<?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>144485</bug_id>
          
          <creation_ts>2015-04-30 18:48:39 -0700</creation_ts>
          <short_desc>[Content Extensions] Redo NFA generation</short_desc>
          <delta_ts>2015-05-05 10:29:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</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="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>benjamin</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1090703</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-04-30 18:48:39 -0700</bug_when>
    <thetext>We want to delete the prefix tree as we generate the NFA to decrease the max memory usage, and we also want to combine all the regexes with the same prefix up to the last quantified term into one NFA to decrease the number of NFAs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090704</commentid>
    <comment_count>1</comment_count>
      <attachid>252129</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-04-30 18:56:21 -0700</bug_when>
    <thetext>Created attachment 252129
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090705</commentid>
    <comment_count>2</comment_count>
      <attachid>252129</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-04-30 18:58:56 -0700</bug_when>
    <thetext>Comment on attachment 252129
Patch

This patch doesn&apos;t quite pass all the api tests, and it uses recursion instead of a stack and a loop, but it&apos;s *pretty good* work in progress.  Good enough to upload.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090838</commentid>
    <comment_count>3</comment_count>
      <attachid>252160</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-05-01 11:45:33 -0700</bug_when>
    <thetext>Created attachment 252160
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090839</commentid>
    <comment_count>4</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-05-01 11:46:42 -0700</bug_when>
    <thetext>This last patch passes most of the tests, but when I make multiple NFAs it generates too many NFA nodes.  I think something is wrong with my calls to generateGraph.  Ben, could you take a look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090878</commentid>
    <comment_count>5</comment_count>
      <attachid>252160</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-05-01 14:12:02 -0700</bug_when>
    <thetext>Comment on attachment 252160
Patch

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

Some quick comments:

&gt; Source/WebCore/contentextensions/CombinedURLFilters.cpp:171
&gt; +        if (edge.term.quantity() != AtomQuantifier::One)
&gt; +            continue; // This will be a part of another NFA.

That does not look correct. You can have quantifier in subterm of a group. That&apos;s why hasFixedLength() exists.

&gt; Source/WebCore/contentextensions/CombinedURLFilters.cpp:173
&gt; +            edge.term.destroy(); // Mark this leaf for deleting.

Instead of making destroy() public, can&apos;t you just have:
    edge.term = Term(DeletedValue);
?

&gt; Source/WebCore/contentextensions/CombinedURLFilters.cpp:202
&gt; +        while (!stack.isEmpty() &amp;&amp; stack.last().vertex-&gt;edges.last().term.quantity() == AtomQuantifier::One)

Please don&apos;t use quantifiers directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091112</commentid>
    <comment_count>6</comment_count>
      <attachid>252240</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-05-02 11:13:45 -0700</bug_when>
    <thetext>Created attachment 252240
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091113</commentid>
    <comment_count>7</comment_count>
      <attachid>252240</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-05-02 11:15:33 -0700</bug_when>
    <thetext>Comment on attachment 252240
Patch

This latest patch passes all the current tests (HOORAY!).  I still need to add some tests, make it non-recursive, and address Ben&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091124</commentid>
    <comment_count>8</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-05-02 12:20:40 -0700</bug_when>
    <thetext>We will still need to combine small DFAs even after this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091186</commentid>
    <comment_count>9</comment_count>
      <attachid>252260</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-05-02 23:31:42 -0700</bug_when>
    <thetext>Created attachment 252260
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091187</commentid>
    <comment_count>10</comment_count>
      <attachid>252261</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-05-02 23:38:25 -0700</bug_when>
    <thetext>Created attachment 252261
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091188</commentid>
    <comment_count>11</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-05-02 23:38:52 -0700</bug_when>
    <thetext>This last patch should be pretty final and ready for real review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091189</commentid>
    <comment_count>12</comment_count>
      <attachid>252262</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-05-02 23:53:59 -0700</bug_when>
    <thetext>Created attachment 252262
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091387</commentid>
    <comment_count>13</comment_count>
      <attachid>252312</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-05-04 08:40:52 -0700</bug_when>
    <thetext>Created attachment 252312
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091392</commentid>
    <comment_count>14</comment_count>
      <attachid>252313</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-05-04 08:55:25 -0700</bug_when>
    <thetext>Created attachment 252313
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091592</commentid>
    <comment_count>15</comment_count>
      <attachid>252313</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-05-04 16:23:37 -0700</bug_when>
    <thetext>Comment on attachment 252313
Patch

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

&gt; Source/WebCore/contentextensions/CombinedURLFilters.cpp:170
&gt; +    /*
&gt; +    // Non-recursive form of this:
&gt; +    for (auto&amp; edge : root.edges) {
&gt; +        if (!edge.term.hasFixedLength())
&gt; +            continue; // This will be a part of another NFA.
&gt; +        unsigned subtreeRootId = edge.term.generateGraph(nfa, nfaRootId, edge.child-&gt;finalActions);
&gt; +        generateNFAForSubtree(nfa, subtreeRootId, *edge.child.get());
&gt; +        if (edge.child-&gt;edges.isEmpty())
&gt; +            edge.term = Term(Term::DeletedValue); // Mark this leaf for deleting.
&gt; +    }
&gt; +    root.edges.removeAllMatching([](PrefixTreeEdge&amp; edge)
&gt; +    {
&gt; +        return edge.term.isDeletedValue();
&gt; +    });
&gt; +    */

Commented-out code?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091700</commentid>
    <comment_count>16</comment_count>
      <attachid>252313</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-05-04 22:10:02 -0700</bug_when>
    <thetext>Comment on attachment 252313
Patch

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

Looks great. Sorry for the review delay.

&gt; Source/WebCore/contentextensions/CombinedURLFilters.cpp:157
&gt; +    /*
&gt; +    // Non-recursive form of this:

Did you intend to leave this?

I think a description of the algorithm in a few paragraph would be more valuable than the code.

&gt; Source/WebCore/contentextensions/CombinedURLFilters.cpp:180
&gt; +        unsigned rootId;

nfaNodeId?

&gt; Source/WebCore/contentextensions/CombinedURLFilters.cpp:192
&gt; +        if (edgeIndex &gt;= vertex.edges.size()) {

I would inverse the two blocks of the if and the condition.

The reason is readability. As you read, you can read them in order, the first case being the recursive step, the second being the edge case.

&gt; Source/WebCore/contentextensions/CombinedURLFilters.cpp:200
&gt; +                auto&amp; edge = stack.last().vertex.edges[stack.last().edgeIndex];

Let&apos;s put stack.last() in a temporary.

&gt; Source/WebCore/contentextensions/CombinedURLFilters.cpp:262
&gt; +        // FIXME: Combine small NFAs to reduce the number of NFAs.

That will be done later, outside this class. That FIXME is at the wrong place.

&gt; Source/WebCore/contentextensions/CombinedURLFilters.cpp:268
&gt; +                if (stack.last()-&gt;edges.isEmpty()) {

It might be clearer to use stack[stack.size() - 1] here to make the next line more obvious?

&gt; Tools/TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:537
&gt; +    const unsigned size = 100000;

You went for really big :)

&gt; Tools/TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:542
&gt; +    // FIXME: DFAToNFA::convert takes way too long on these deep NFAs. We should optimize for that case.

That&apos;s weird, that seems like an easy case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091807</commentid>
    <comment_count>17</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-05-05 10:29:15 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/183818</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252129</attachid>
            <date>2015-04-30 18:56:21 -0700</date>
            <delta_ts>2015-05-01 11:45:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144485-20150430185510.patch</filename>
            <type>text/plain</type>
            <size>15398</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzY2MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDE1LTA0LTMwICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gQ29tYmluZSBORkFzIHByb3Blcmx5IGFuZCBmcmVlIG1lbW9yeSBhcyB3ZSBj
b21waWxlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQ0NDg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SSBzdGlsbCBuZWVkIHRvIGFkZCBhIHRlc3QgdGhhdCBoYXMgYSBzdGFjayBvdmVyZmxvdyB3aXRo
IG15IGN1cnJlbnQgcmVjdXJzaXZlIGFwcHJvYWNoLAorICAgICAgICBhbmQgYW5vdGhlciB0ZXN0
IHRoYXQgaGFkIHRvbyBtYW55IE5GQXMgYnV0IGRvZXNuJ3QgYW55IG1vcmUuCisKKyAgICAgICAg
KiBjb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVSTEZpbHRlcnMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OnJlY3Vyc2l2ZU1lbW9yeVVzZWQpOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbWJpbmVkVVJMRmlsdGVyczo6bWVtb3J5VXNl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29tYmluZWRVUkxGaWx0
ZXJzOjphZGRQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpn
ZW5lcmF0ZU5GQUZvclN1YnRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6OkNvbWJpbmVkVVJMRmlsdGVyczo6cHJvY2Vzc05GQXMpOgorICAgICAgICAqIGNvbnRlbnRl
eHRlbnNpb25zL0NvbWJpbmVkVVJMRmlsdGVycy5oOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNp
b25zL1Rlcm0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJtOjpp
bnZhbGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJtOjpx
dWFudGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VGVybTo6VGVy
bSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VGVybTo6aXNWYWxpZCk6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VGVybTo6cXVhbnRpZnkpOgor
CiAyMDE1LTA0LTMwICBKYXZpZXIgRmVybmFuZGV6ICA8amZlcm5hbmRlekBpZ2FsaWEuY29tPgog
CiAgICAgICAgIFtDU1MgR3JpZCBMYXlvdXRdIG92ZXJmbG93LXBvc2l0aW9uIGtleXdvcmQgZm9y
IGFsaWduIGFuZCBqdXN0aWZ5IHByb3BlcnRpZXMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVSTEZpbHRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbWJpbmVkVVJMRmlsdGVycy5jcHAJKHJldmlz
aW9uIDE4MzU1NikKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbWJpbmVk
VVJMRmlsdGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDI3ICszNSwzMiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CiAKLXR5cGVkZWYg
VmVjdG9yPHN0ZDo6cGFpcjxUZXJtLCBzdGQ6OnVuaXF1ZV9wdHI8UHJlZml4VHJlZVZlcnRleD4+
LCAwLCBXVEY6OkNyYXNoT25PdmVyZmxvdywgMT4gUHJlZml4VHJlZUVkZ2VzOworc3RydWN0IFBy
ZWZpeFRyZWVFZGdlIHsKKyAgICBUZXJtIHRlcm07CisgICAgc3RkOjp1bmlxdWVfcHRyPFByZWZp
eFRyZWVWZXJ0ZXg+IGNoaWxkVmVydGV4OworfTsKKyAgICAKK3R5cGVkZWYgVmVjdG9yPFByZWZp
eFRyZWVFZGdlLCAwLCBXVEY6OkNyYXNoT25PdmVyZmxvdywgMT4gUHJlZml4VHJlZUVkZ2VzOwog
CiBzdHJ1Y3QgUHJlZml4VHJlZVZlcnRleCB7CiAgICAgUHJlZml4VHJlZUVkZ2VzIGVkZ2VzOwog
ICAgIEFjdGlvbkxpc3QgZmluYWxBY3Rpb25zOwotICAgIGJvb2wgaW5WYXJpYWJsZUxlbmd0aFBy
ZWZpeCB7IGZhbHNlIH07CiB9OwogCi1zdGF0aWMgc2l6ZV90IHJlY3Vyc2l2ZU1lbW9yeVVzZWQo
Y29uc3Qgc3RkOjp1bmlxdWVfcHRyPFByZWZpeFRyZWVWZXJ0ZXg+JiBub2RlKQorc3RhdGljIHNp
emVfdCByZWN1cnNpdmVNZW1vcnlVc2VkKGNvbnN0IFByZWZpeFRyZWVWZXJ0ZXgmIG5vZGUpCiB7
CiAgICAgc2l6ZV90IHNpemUgPSBzaXplb2YoUHJlZml4VHJlZVZlcnRleCkKLSAgICAgICAgKyBu
b2RlLT5lZGdlcy5jYXBhY2l0eSgpICogc2l6ZW9mKHN0ZDo6cGFpcjxUZXJtLCBzdGQ6OnVuaXF1
ZV9wdHI8UHJlZml4VHJlZVZlcnRleD4+KQotICAgICAgICArIG5vZGUtPmZpbmFsQWN0aW9ucy5j
YXBhY2l0eSgpICogc2l6ZW9mKHVpbnQ2NF90KTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNoaWxk
IDogbm9kZS0+ZWRnZXMpCi0gICAgICAgIHNpemUgKz0gcmVjdXJzaXZlTWVtb3J5VXNlZChjaGls
ZC5zZWNvbmQpOworICAgICAgICArIG5vZGUuZWRnZXMuY2FwYWNpdHkoKSAqIHNpemVvZihzdGQ6
OnBhaXI8VGVybSwgc3RkOjp1bmlxdWVfcHRyPFByZWZpeFRyZWVWZXJ0ZXg+PikKKyAgICAgICAg
KyBub2RlLmZpbmFsQWN0aW9ucy5jYXBhY2l0eSgpICogc2l6ZW9mKHVpbnQ2NF90KTsKKyAgICBm
b3IgKGNvbnN0IGF1dG8mIGVkZ2UgOiBub2RlLmVkZ2VzKQorICAgICAgICBzaXplICs9IHJlY3Vy
c2l2ZU1lbW9yeVVzZWQoKmVkZ2UuY2hpbGRWZXJ0ZXguZ2V0KCkpOwogICAgIHJldHVybiBzaXpl
OwogfQogCiBzaXplX3QgQ29tYmluZWRVUkxGaWx0ZXJzOjptZW1vcnlVc2VkKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gcmVjdXJzaXZlTWVtb3J5VXNlZChtX3ByZWZpeFRyZWVSb290KTsKKyAgICBB
U1NFUlQobV9wcmVmaXhUcmVlUm9vdCk7CisgICAgcmV0dXJuIHJlY3Vyc2l2ZU1lbW9yeVVzZWQo
Km1fcHJlZml4VHJlZVJvb3QuZ2V0KCkpOwogfQogICAgIAogQ29tYmluZWRVUkxGaWx0ZXJzOjpD
b21iaW5lZFVSTEZpbHRlcnMoKQpAQCAtOTAsMjEgKzk1LDE3IEBAIHZvaWQgQ29tYmluZWRVUkxG
aWx0ZXJzOjphZGRQYXR0ZXJuKHVpbnQKICAgICBmb3IgKGNvbnN0IFRlcm0mIHRlcm0gOiBwYXR0
ZXJuKSB7CiAgICAgICAgIHNpemVfdCBuZXh0RW50cnlJbmRleCA9IFdURjo6bm90Rm91bmQ7CiAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGFzdFByZWZpeFRyZWUtPmVkZ2VzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAobGFzdFByZWZpeFRyZWUtPmVkZ2VzW2ldLmZpcnN0
ID09IHRlcm0pIHsKKyAgICAgICAgICAgIGlmIChsYXN0UHJlZml4VHJlZS0+ZWRnZXNbaV0udGVy
bSA9PSB0ZXJtKSB7CiAgICAgICAgICAgICAgICAgbmV4dEVudHJ5SW5kZXggPSBpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmIChu
ZXh0RW50cnlJbmRleCAhPSBXVEY6Om5vdEZvdW5kKQotICAgICAgICAgICAgbGFzdFByZWZpeFRy
ZWUgPSBsYXN0UHJlZml4VHJlZS0+ZWRnZXNbbmV4dEVudHJ5SW5kZXhdLnNlY29uZC5nZXQoKTsK
KyAgICAgICAgICAgIGxhc3RQcmVmaXhUcmVlID0gbGFzdFByZWZpeFRyZWUtPmVkZ2VzW25leHRF
bnRyeUluZGV4XS5jaGlsZFZlcnRleC5nZXQoKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICBoYXNOZXdUZXJtID0gdHJ1ZTsKLQotICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFByZWZp
eFRyZWVWZXJ0ZXg+IG5leHRQcmVmaXhUcmVlVmVydGV4ID0gc3RkOjptYWtlX3VuaXF1ZTxQcmVm
aXhUcmVlVmVydGV4PigpOwotCi0gICAgICAgICAgICBBU1NFUlQobGFzdFByZWZpeFRyZWUtPmVk
Z2VzLmZpbmQoc3RkOjptYWtlX3BhaXIodGVybSwgc3RkOjptYWtlX3VuaXF1ZTxQcmVmaXhUcmVl
VmVydGV4PigpKSkgPT0gV1RGOjpub3RGb3VuZCk7Ci0gICAgICAgICAgICBsYXN0UHJlZml4VHJl
ZS0+ZWRnZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHRlcm0sIFdURjo6bW92ZShuZXh0UHJlZml4
VHJlZVZlcnRleCkpKTsKLSAgICAgICAgICAgIGxhc3RQcmVmaXhUcmVlID0gbGFzdFByZWZpeFRy
ZWUtPmVkZ2VzLmxhc3QoKS5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBsYXN0UHJlZml4VHJl
ZS0+ZWRnZXMuYXBwZW5kKFByZWZpeFRyZWVFZGdlKHt0ZXJtLCBzdGQ6Om1ha2VfdW5pcXVlPFBy
ZWZpeFRyZWVWZXJ0ZXg+KCl9KSk7CisgICAgICAgICAgICBsYXN0UHJlZml4VHJlZSA9IGxhc3RQ
cmVmaXhUcmVlLT5lZGdlcy5sYXN0KCkuY2hpbGRWZXJ0ZXguZ2V0KCk7CiAgICAgICAgIH0KICAg
ICAgICAgcHJlZml4VHJlZVZlcnRpY2VzRm9yUGF0dGVybi5hcHBlbmQobGFzdFByZWZpeFRyZWUp
OwogICAgIH0KQEAgLTExMiwxMTkgKzExMyw4MiBAQCB2b2lkIENvbWJpbmVkVVJMRmlsdGVyczo6
YWRkUGF0dGVybih1aW50CiAgICAgQWN0aW9uTGlzdCYgYWN0aW9ucyA9IHByZWZpeFRyZWVWZXJ0
aWNlc0ZvclBhdHRlcm4ubGFzdCgpLT5maW5hbEFjdGlvbnM7CiAgICAgaWYgKGFjdGlvbnMuZmlu
ZChhY3Rpb25JZCkgPT0gV1RGOjpub3RGb3VuZCkKICAgICAgICAgYWN0aW9ucy5hcHBlbmQoYWN0
aW9uSWQpOwotCi0gICAgaWYgKCFoYXNOZXdUZXJtKQotICAgICAgICByZXR1cm47Ci0KLSAgICBi
b29sIGhhc1NlZW5WYXJpYWJsZUxlbmd0aFRlcm1zID0gZmFsc2U7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gcGF0dGVybi5zaXplKCk7IGktLTspIHsKLSAgICAgICAgY29uc3QgVGVybSYgdGVybSA9
IHBhdHRlcm5baV07Ci0gICAgICAgIGhhc1NlZW5WYXJpYWJsZUxlbmd0aFRlcm1zIHw9ICF0ZXJt
Lmhhc0ZpeGVkTGVuZ3RoKCk7Ci0gICAgICAgIHByZWZpeFRyZWVWZXJ0aWNlc0ZvclBhdHRlcm5b
aSArIDFdLT5pblZhcmlhYmxlTGVuZ3RoUHJlZml4IHw9IGhhc1NlZW5WYXJpYWJsZUxlbmd0aFRl
cm1zOwotICAgIH0KLSAgICBwcmVmaXhUcmVlVmVydGljZXNGb3JQYXR0ZXJuWzBdLT5pblZhcmlh
YmxlTGVuZ3RoUHJlZml4IHw9IGhhc1NlZW5WYXJpYWJsZUxlbmd0aFRlcm1zOwogfQogCiBzdHJ1
Y3QgQWN0aXZlU3VidHJlZSB7Ci0gICAgY29uc3QgUHJlZml4VHJlZVZlcnRleCogdmVydGV4Owot
ICAgIFByZWZpeFRyZWVFZGdlczo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7CisgICAgUHJlZml4
VHJlZVZlcnRleCogdmVydGV4OworICAgIHNpemVfdCBlZGdlSW5kZXg7CiB9OwogCi1zdGF0aWMg
dm9pZCBnZW5lcmF0ZU5GQUZvclN1YnRyZWUoTkZBJiBuZmEsIHVuc2lnbmVkIHJvb3RJZCwgY29u
c3QgUHJlZml4VHJlZVZlcnRleCYgcHJlZml4VHJlZVZlcnRleCkKK3N0YXRpYyB2b2lkIGdlbmVy
YXRlTkZBRm9yU3VidHJlZShORkEmIG5mYSwgdW5zaWduZWQgcm9vdElkLCBQcmVmaXhUcmVlVmVy
dGV4JiB2ZXJ0ZXgpCiB7Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghcHJlZml4VHJlZVZlcnRl
eC5pblZhcmlhYmxlTGVuZ3RoUHJlZml4LCAiVGhpcyBjb2RlIGFzc3VtZXMgdGhlIHN1YnRyZWVz
IHdpdGggdmFyaWFibGUgcHJlZml4IGxlbmd0aCBoYXZlIGFscmVhZHkgYmVlbiBoYW5kbGVkLiIp
OwotCi0gICAgc3RydWN0IEFjdGl2ZU5GQVN1YnRyZWUgOiBBY3RpdmVTdWJ0cmVlIHsKLSAgICAg
ICAgQWN0aXZlTkZBU3VidHJlZShjb25zdCBQcmVmaXhUcmVlVmVydGV4KiB2ZXJ0ZXgsIFByZWZp
eFRyZWVFZGdlczo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3IsIHVuc2lnbmVkIG5vZGVJbmRleCkK
LSAgICAgICAgICAgIDogQWN0aXZlU3VidHJlZSh7IHZlcnRleCwgaXRlcmF0b3IgfSkKLSAgICAg
ICAgICAgICwgbGFzdE5vZGVJbmRleChub2RlSW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgfQot
ICAgICAgICB1bnNpZ25lZCBsYXN0Tm9kZUluZGV4OwotICAgIH07Ci0KLSAgICBWZWN0b3I8QWN0
aXZlTkZBU3VidHJlZT4gYWN0aXZlU3RhY2s7Ci0gICAgYWN0aXZlU3RhY2suYXBwZW5kKEFjdGl2
ZU5GQVN1YnRyZWUoJnByZWZpeFRyZWVWZXJ0ZXgsIHByZWZpeFRyZWVWZXJ0ZXguZWRnZXMuYmVn
aW4oKSwgcm9vdElkKSk7Ci0KLSAgICB3aGlsZSAodHJ1ZSkgewotICAgIFByb2Nlc3NTdWJ0cmVl
OgotICAgICAgICBmb3IgKEFjdGl2ZU5GQVN1YnRyZWUmIGFjdGl2ZVN1YnRyZWUgPSBhY3RpdmVT
dGFjay5sYXN0KCk7IGFjdGl2ZVN1YnRyZWUuaXRlcmF0b3IgIT0gYWN0aXZlU3VidHJlZS52ZXJ0
ZXgtPmVkZ2VzLmVuZCgpOyArK2FjdGl2ZVN1YnRyZWUuaXRlcmF0b3IpIHsKLSAgICAgICAgICAg
IGlmIChhY3RpdmVTdWJ0cmVlLml0ZXJhdG9yLT5zZWNvbmQtPmluVmFyaWFibGVMZW5ndGhQcmVm
aXgpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGNvbnN0IFRlcm0m
IHRlcm0gPSBhY3RpdmVTdWJ0cmVlLml0ZXJhdG9yLT5maXJzdDsKLSAgICAgICAgICAgIHVuc2ln
bmVkIG5ld0VuZE5vZGVJbmRleCA9IHRlcm0uZ2VuZXJhdGVHcmFwaChuZmEsIGFjdGl2ZVN1YnRy
ZWUubGFzdE5vZGVJbmRleCwgYWN0aXZlU3VidHJlZS5pdGVyYXRvci0+c2Vjb25kLT5maW5hbEFj
dGlvbnMpOwotCi0gICAgICAgICAgICBQcmVmaXhUcmVlVmVydGV4KiBwcmVmaXhUcmVlVmVydGV4
ID0gYWN0aXZlU3VidHJlZS5pdGVyYXRvci0+c2Vjb25kLmdldCgpOwotICAgICAgICAgICAgaWYg
KCFwcmVmaXhUcmVlVmVydGV4LT5lZGdlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBh
Y3RpdmVTdGFjay5hcHBlbmQoQWN0aXZlTkZBU3VidHJlZShwcmVmaXhUcmVlVmVydGV4LCBwcmVm
aXhUcmVlVmVydGV4LT5lZGdlcy5iZWdpbigpLCBuZXdFbmROb2RlSW5kZXgpKTsKLSAgICAgICAg
ICAgICAgICBnb3RvIFByb2Nlc3NTdWJ0cmVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgYWN0aXZlU3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICBpZiAoYWN0aXZlU3Rh
Y2suaXNFbXB0eSgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICsrYWN0aXZlU3RhY2su
bGFzdCgpLml0ZXJhdG9yOworICAgIGZvciAoYXV0byYgZWRnZSA6IHZlcnRleC5lZGdlcykgewor
ICAgICAgICB1bnNpZ25lZCBzdWJ0cmVlUm9vdElkID0gZWRnZS50ZXJtLmdlbmVyYXRlR3JhcGgo
bmZhLCByb290SWQsIGVkZ2UuY2hpbGRWZXJ0ZXgtPmZpbmFsQWN0aW9ucyk7CisgICAgICAgIGdl
bmVyYXRlTkZBRm9yU3VidHJlZShuZmEsIHN1YnRyZWVSb290SWQsICplZGdlLmNoaWxkVmVydGV4
LmdldCgpKTsKKyAgICAgICAgaWYgKGVkZ2UuY2hpbGRWZXJ0ZXgtPmVkZ2VzLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIGVkZ2UudGVybS5pbnZhbGlkYXRlKCk7IC8vIE1hcmsgdGhpcyBsZWFmIGZv
ciBkZWxldGluZy4KICAgICB9CisgICAgdmVydGV4LmVkZ2VzLnJlbW92ZUFsbE1hdGNoaW5nKFtd
KFByZWZpeFRyZWVFZGdlJiBlZGdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICFlZGdlLnRlcm0u
aXNWYWxpZCgpOworICAgIH0pOwogfQogCi12b2lkIENvbWJpbmVkVVJMRmlsdGVyczo6cHJvY2Vz
c05GQXMoc3RkOjpmdW5jdGlvbjx2b2lkKE5GQSYmKT4gaGFuZGxlcikgY29uc3QKK3ZvaWQgQ29t
YmluZWRVUkxGaWx0ZXJzOjpwcm9jZXNzTkZBcyhzdGQ6OmZ1bmN0aW9uPHZvaWQoTkZBJiYpPiBo
YW5kbGVyKQogewotICAgIFZlY3RvcjxBY3RpdmVTdWJ0cmVlPiBhY3RpdmVTdGFjazsKLSAgICBh
Y3RpdmVTdGFjay5hcHBlbmQoQWN0aXZlU3VidHJlZSh7IG1fcHJlZml4VHJlZVJvb3QuZ2V0KCks
IG1fcHJlZml4VHJlZVJvb3QtPmVkZ2VzLmJlZ2luKCkgfSkpOwotCiAgICAgd2hpbGUgKHRydWUp
IHsKLSAgICBQcm9jZXNzU3VidHJlZToKLSAgICAgICAgQWN0aXZlU3VidHJlZSYgYWN0aXZlU3Vi
dHJlZSA9IGFjdGl2ZVN0YWNrLmxhc3QoKTsKLQotICAgICAgICAvLyBXZSBnbyBkZXB0aCBmaXJz
dCBpbnRvIHRoZSBzdWJ0cmVlcyB3aXRoIHZhcmlhYmxlIHByZWZpeC4gRmluZCB0aGUgbmV4dCBz
dWJ0cmVlLgotICAgICAgICBmb3IgKDsgYWN0aXZlU3VidHJlZS5pdGVyYXRvciAhPSBhY3RpdmVT
dWJ0cmVlLnZlcnRleC0+ZWRnZXMuZW5kKCk7ICsrYWN0aXZlU3VidHJlZS5pdGVyYXRvcikgewot
ICAgICAgICAgICAgUHJlZml4VHJlZVZlcnRleCogcHJlZml4VHJlZVZlcnRleCA9IGFjdGl2ZVN1
YnRyZWUuaXRlcmF0b3ItPnNlY29uZC5nZXQoKTsKLSAgICAgICAgICAgIGlmIChwcmVmaXhUcmVl
VmVydGV4LT5pblZhcmlhYmxlTGVuZ3RoUHJlZml4KSB7Ci0gICAgICAgICAgICAgICAgYWN0aXZl
U3RhY2suYXBwZW5kKEFjdGl2ZVN1YnRyZWUoeyBwcmVmaXhUcmVlVmVydGV4LCBwcmVmaXhUcmVl
VmVydGV4LT5lZGdlcy5iZWdpbigpIH0pKTsKLSAgICAgICAgICAgICAgICBnb3RvIFByb2Nlc3NT
dWJ0cmVlOwotICAgICAgICAgICAgfQorICAgICAgICAvLyBHZXQgYSBzdGFjayBnb2luZyBvdXQg
dG8gYSBsZWFmLgorICAgICAgICAvLyBXZSBhcmJpdHJhcmlseSBjaG9vc2UgdGhlIHRoZSBsYXN0
IHZlcnRleCB0byBtYWtlIGl0IGZhc3QgdG8gcmVtb3ZlIGl0IGZyb20gVmVjdG9ycyB3aGVuIHdl
J3JlIGRvbmUuCisgICAgICAgIFZlY3RvcjxBY3RpdmVTdWJ0cmVlLCAxMjg+IHN0YWNrOworICAg
ICAgICBBU1NFUlQobV9wcmVmaXhUcmVlUm9vdCk7CisgICAgICAgIGZvciAoUHJlZml4VHJlZVZl
cnRleCogdmVydGV4ID0gbV9wcmVmaXhUcmVlUm9vdC5nZXQoKTsgIXZlcnRleC0+ZWRnZXMuaXNF
bXB0eSgpOyB2ZXJ0ZXggPSB2ZXJ0ZXgtPmVkZ2VzLmxhc3QoKS5jaGlsZFZlcnRleC5nZXQoKSkg
eworICAgICAgICAgICAgQVNTRVJUKHZlcnRleCk7CisgICAgICAgICAgICBBU1NFUlQodmVydGV4
LT5lZGdlcy5zaXplKCkpOworICAgICAgICAgICAgc3RhY2suYXBwZW5kKEFjdGl2ZVN1YnRyZWUo
e3ZlcnRleCwgdmVydGV4LT5lZGdlcy5zaXplKCkgLSAxfSkpOwogICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gQWZ0ZXIgd2UgcmVhY2hlZCBoZXJlLCB3ZSBrbm93IHRoYXQgYWxsIHRoZSBzdWJ0cmVl
cyB3aXRoIHZhcmlhYmxlIHByZWZpeGVzIGhhdmUgYmVlbiBwcm9jZXNzZWQsCi0gICAgICAgIC8v
IHRpbWUgdG8gZ2VuZXJhdGUgdGhlIE5GQSBmb3IgdGhlIGdyYXBoIHJvb3RlZCBoZXJlLgotICAg
ICAgICBib29sIG5lZWRUb0dlbmVyYXRlID0gYWN0aXZlU3VidHJlZS52ZXJ0ZXgtPmVkZ2VzLmlz
RW1wdHkoKSAmJiAhYWN0aXZlU3VidHJlZS52ZXJ0ZXgtPmZpbmFsQWN0aW9ucy5pc0VtcHR5KCk7
Ci0gICAgICAgIGlmICghbmVlZFRvR2VuZXJhdGUpIHsKLSAgICAgICAgICAgIGZvciAoY29uc3Qg
YXV0byYgZWRnZSA6IGFjdGl2ZVN1YnRyZWUudmVydGV4LT5lZGdlcykgewotICAgICAgICAgICAg
ICAgIGlmICghZWRnZS5zZWNvbmQtPmluVmFyaWFibGVMZW5ndGhQcmVmaXgpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbmVlZFRvR2VuZXJhdGUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChzdGFj
ay5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIC8vIFdlJ3JlIGRvbmUgb25jZSB3ZSBoYXZlIHBy
b2Nlc3NlZCBhbmQgcmVtb3ZlZCBhbGwgdGhlIGVkZ2VzIGluIHRoZSBwcmVmaXggdHJlZS4KKyAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5lZWRUb0dlbmVyYXRl
KSB7Ci0gICAgICAgICAgICBORkEgbmZhOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBwcmVmaXhF
bmQgPSBuZmEucm9vdCgpOwotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
YWN0aXZlU3RhY2suc2l6ZSgpIC0gMTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVGVy
bSYgdGVybSA9IGFjdGl2ZVN0YWNrW2ldLml0ZXJhdG9yLT5maXJzdDsKLSAgICAgICAgICAgICAg
ICBwcmVmaXhFbmQgPSB0ZXJtLmdlbmVyYXRlR3JhcGgobmZhLCBwcmVmaXhFbmQsIGFjdGl2ZVN0
YWNrW2ldLml0ZXJhdG9yLT5zZWNvbmQtPmZpbmFsQWN0aW9ucyk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgZWRnZSA6IGFjdGl2ZVN1YnRyZWUudmVydGV4
LT5lZGdlcykgewotICAgICAgICAgICAgICAgIGlmICghZWRnZS5zZWNvbmQtPmluVmFyaWFibGVM
ZW5ndGhQcmVmaXgpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgVGVybSYgdGVybSA9IGVk
Z2UuZmlyc3Q7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG5ld1N1YnRyZWVTdGFydCA9
IHRlcm0uZ2VuZXJhdGVHcmFwaChuZmEsIHByZWZpeEVuZCwgZWRnZS5zZWNvbmQtPmZpbmFsQWN0
aW9ucyk7Ci0gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlTkZBRm9yU3VidHJlZShuZmEsIG5l
d1N1YnRyZWVTdGFydCwgKmVkZ2Uuc2Vjb25kKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGhhbmRsZXIoV1RGOjptb3ZlKG5mYSkp
OworICAgICAgICAKKyAgICAgICAgLy8gRmluZCB0aGUgbGFzdCB0ZXJtIHdpdGggYSBxdWFudGlm
aWVyIGlmIHRoZXJlIGlzIG9uZS4KKyAgICAgICAgdW5zaWduZWQgbGFzdFF1YW50aWZpZWRUZXJt
SW5kZXggPSBzdGFjay5zaXplKCkgLSAxOworICAgICAgICB3aGlsZSAobGFzdFF1YW50aWZpZWRU
ZXJtSW5kZXggJiYgc3RhY2tbbGFzdFF1YW50aWZpZWRUZXJtSW5kZXhdLnZlcnRleC0+ZWRnZXNb
c3RhY2tbbGFzdFF1YW50aWZpZWRUZXJtSW5kZXhdLmVkZ2VJbmRleF0udGVybS5xdWFudGl0eSgp
ID09IEF0b21RdWFudGlmaWVyOjpPbmUpCisgICAgICAgICAgICBsYXN0UXVhbnRpZmllZFRlcm1J
bmRleC0tOworICAgICAgICAKKyAgICAgICAgLy8gTWFrZSBhbiBORkEgd2l0aCB0aGUgc3VidHJl
ZXMgZm9yIHdob20gdGhpcyBpcyBhbHNvIHRoZSBsYXN0IHF1YW50aWZpZXIgKG9yIHdobyBhbHNv
IGhhdmUgbm8gcXVhbnRpZmllcikuCisgICAgICAgIE5GQSBuZmE7CisgICAgICAgIHVuc2lnbmVk
IHByZWZpeEVuZCA9IG5mYS5yb290KCk7CisgICAgICAgIGlmIChsYXN0UXVhbnRpZmllZFRlcm1J
bmRleCkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxhc3RRdWFudGlm
aWVkVGVybUluZGV4IC0gMTsgKytpKSB7CisgICAgICAgICAgICAgICAgY29uc3QgVGVybSYgdGVy
bSA9IHN0YWNrW2ldLnZlcnRleC0+ZWRnZXNbc3RhY2tbaV0uZWRnZUluZGV4XS50ZXJtOworICAg
ICAgICAgICAgICAgIHByZWZpeEVuZCA9IHRlcm0uZ2VuZXJhdGVHcmFwaChuZmEsIHByZWZpeEVu
ZCwgc3RhY2tbaV0udmVydGV4LT5lZGdlc1tzdGFja1tpXS5lZGdlSW5kZXhdLmNoaWxkVmVydGV4
LT5maW5hbEFjdGlvbnMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEFjdGl2
ZVN1YnRyZWUmIGFjdGl2ZVN1YnRyZWUgPSBzdGFja1tsYXN0UXVhbnRpZmllZFRlcm1JbmRleF07
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhY3RpdmVTdWJ0cmVlLnZlcnRleC0+
ZWRnZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIGVkZ2UgPSBhY3Rp
dmVTdWJ0cmVlLnZlcnRleC0+ZWRnZXNbaV07CisgICAgICAgICAgICBjb25zdCBUZXJtJiB0ZXJt
ID0gZWRnZS50ZXJtOworICAgICAgICAgICAgdW5zaWduZWQgbmV3U3VidHJlZVN0YXJ0ID0gdGVy
bS5nZW5lcmF0ZUdyYXBoKG5mYSwgcHJlZml4RW5kLCBlZGdlLmNoaWxkVmVydGV4LT5maW5hbEFj
dGlvbnMpOworICAgICAgICAgICAgZ2VuZXJhdGVORkFGb3JTdWJ0cmVlKG5mYSwgbmV3U3VidHJl
ZVN0YXJ0LCAqZWRnZS5jaGlsZFZlcnRleC5nZXQoKSk7CisgICAgICAgICAgICBpZiAoZWRnZS5j
aGlsZFZlcnRleC0+ZWRnZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGFjdGl2ZVN1YnRy
ZWUudmVydGV4LT5lZGdlc1tpXS50ZXJtLmludmFsaWRhdGUoKTsgLy8gTWFyayB0aGlzIGxlYWYg
Zm9yIGRlbGV0aW5nLgorICAgICAgICB9CisgICAgICAgIGFjdGl2ZVN1YnRyZWUudmVydGV4LT5l
ZGdlcy5yZW1vdmVBbGxNYXRjaGluZyhbXShQcmVmaXhUcmVlRWRnZSYgZWRnZSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuICFlZGdlLnRlcm0uaXNWYWxpZCgpOworICAgICAgICB9KTsK
KyAgICAgICAgaGFuZGxlcihXVEY6Om1vdmUobmZhKSk7CisgICAgICAgIAorICAgICAgICAvLyBE
ZWxldGUgYW55IHByb2Nlc3NlZCBsZWF2ZXMsIGtlZXBpbmcgdGhlIHJvb3QuCisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IHN0YWNrLnNpemUoKSAtIDE7IGk7IC0taSkgeworICAgICAgICAgICAg
aWYgKHN0YWNrW2ldLnZlcnRleC0+ZWRnZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKHN0YWNrW2kgLSAxXS5lZGdlSW5kZXggPT0gc3RhY2tbaSAtIDFdLnZlcnRleC0+ZWRn
ZXMuc2l6ZSgpIC0gMSk7CisgICAgICAgICAgICAgICAgc3RhY2tbaSAtIDFdLnZlcnRleC0+ZWRn
ZXMucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgICAgIHN0YWNrLnJlbW92ZUxhc3QoKTsKKyAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gV2UgaGF2ZSBwcm9jZXNzZWQgYWxsIHRoZSBzdWJ0cmVlcyBvZiB0aGlzIGxldmVs
LCBwb3AgdGhlIHN0YWNrIGFuZCBtb3ZlIG9uIHRvIHRoZSBuZXh0IHNpYmxpbmcuCi0gICAgICAg
IGFjdGl2ZVN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgaWYgKGFjdGl2ZVN0YWNrLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICArK2FjdGl2ZVN0YWNrLmxhc3QoKS5p
dGVyYXRvcjsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0NvbWJpbmVkVVJMRmlsdGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL0NvbWJpbmVkVVJMRmlsdGVycy5oCShyZXZpc2lvbiAxODM1NTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVSTEZpbHRlcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZFBh
dHRlcm4odWludDY0X3QgcGF0dGVybklkLCBjb25zdCBWZWN0b3I8VGVybT4mIHBhdHRlcm4pOwog
Ci0gICAgdm9pZCBwcm9jZXNzTkZBcyhzdGQ6OmZ1bmN0aW9uPHZvaWQoTkZBJiYpPiBoYW5kbGVy
KSBjb25zdDsKKyAgICB2b2lkIHByb2Nlc3NORkFzKHN0ZDo6ZnVuY3Rpb248dm9pZChORkEmJik+
IGhhbmRsZXIpOwogICAgIHZvaWQgY2xlYXIoKTsKIAogICAgIHNpemVfdCBtZW1vcnlVc2VkKCkg
Y29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9UZXJtLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvVGVybS5oCShyZXZp
c2lvbiAxODM1NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9UZXJtLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDcgQEAgcHVibGljOgogICAgIH5UZXJtKCk7CiAK
ICAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKKyAgICB2b2lkIGludmFsaWRhdGUoKSB7IGRlc3Ry
b3koKTsgfQogCiAgICAgLy8gQ2hhcmFjdGVyU2V0IHRlcm1zIG9ubHkuCiAgICAgdm9pZCBhZGRD
aGFyYWN0ZXIoVUNoYXIgY2hhcmFjdGVyLCBib29sIGlzQ2FzZVNlbnNpdGl2ZSk7CkBAIC04MSw3
ICs4Miw4IEBAIHB1YmxpYzoKICAgICAvLyBHcm91cCB0ZXJtcyBvbmx5LgogICAgIHZvaWQgZXh0
ZW5kR3JvdXBTdWJwYXR0ZXJuKGNvbnN0IFRlcm0mKTsKIAotICAgIHZvaWQgcXVhbnRpZnkoY29u
c3QgQXRvbVF1YW50aWZpZXImKTsKKyAgICB2b2lkIHF1YW50aWZ5KGNvbnN0IEF0b21RdWFudGlm
aWVyKTsKKyAgICBBdG9tUXVhbnRpZmllciBxdWFudGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcXVh
bnRpZmllcjsgfQogCiAgICAgdW5zaWduZWQgZ2VuZXJhdGVHcmFwaChORkEmLCB1bnNpZ25lZCBz
dGFydCwgY29uc3QgQWN0aW9uTGlzdCYgZmluYWxBY3Rpb25zKSBjb25zdDsKIApAQCAtMjY5LDcg
KzI3MSw3IEBAIGlubGluZSBUZXJtOjpUZXJtKGNvbnN0IFRlcm0mIG90aGVyKQogCiBpbmxpbmUg
VGVybTo6VGVybShUZXJtJiYgb3RoZXIpCiAgICAgOiBtX3Rlcm1UeXBlKFdURjo6bW92ZShvdGhl
ci5tX3Rlcm1UeXBlKSkKLSAgICAsIG1fcXVhbnRpZmllcihXVEY6Om1vdmUob3RoZXIubV9xdWFu
dGlmaWVyKSkKKyAgICAsIG1fcXVhbnRpZmllcihvdGhlci5tX3F1YW50aWZpZXIpCiB7CiAgICAg
c3dpdGNoIChtX3Rlcm1UeXBlKSB7CiAgICAgY2FzZSBUZXJtVHlwZTo6RW1wdHk6CkBAIC0zMDIs
NyArMzA0LDcgQEAgaW5saW5lIFRlcm06On5UZXJtKCkKIAogaW5saW5lIGJvb2wgVGVybTo6aXNW
YWxpZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fdGVybVR5cGUgIT0gVGVybVR5cGU6OkVtcHR5
ICYmIG1fdGVybVR5cGUgIT0gVGVybVR5cGU6OkRlbGV0ZWQ7CisgICAgcmV0dXJuIG1fdGVybVR5
cGUgIT0gVGVybVR5cGU6OkRlbGV0ZWQgJiYgbV90ZXJtVHlwZSAhPSBUZXJtVHlwZTo6RW1wdHk7
CiB9CiAKIGlubGluZSB2b2lkIFRlcm06OmFkZENoYXJhY3RlcihVQ2hhciBjaGFyYWN0ZXIsIGJv
b2wgaXNDYXNlU2Vuc2l0aXZlKQpAQCAtMzI5LDcgKzMzMSw3IEBAIGlubGluZSB2b2lkIFRlcm06
OmV4dGVuZEdyb3VwU3VicGF0dGVybigKICAgICBtX2F0b21EYXRhLmdyb3VwLnRlcm1zLmFwcGVu
ZCh0ZXJtKTsKIH0KIAotaW5saW5lIHZvaWQgVGVybTo6cXVhbnRpZnkoY29uc3QgQXRvbVF1YW50
aWZpZXImIHF1YW50aWZpZXIpCitpbmxpbmUgdm9pZCBUZXJtOjpxdWFudGlmeShjb25zdCBBdG9t
UXVhbnRpZmllciBxdWFudGlmaWVyKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9xdWFu
dGlmaWVyID09IEF0b21RdWFudGlmaWVyOjpPbmUsICJUcmFuc2l0aW9uIHRvIHF1YW50aWZpZWQg
dGVybSBzaG91bGQgb25seSBoYXBwZW4gb25jZS4iKTsKICAgICBtX3F1YW50aWZpZXIgPSBxdWFu
dGlmaWVyOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252160</attachid>
            <date>2015-05-01 11:45:33 -0700</date>
            <delta_ts>2015-05-02 11:13:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144485-20150501114421.patch</filename>
            <type>text/plain</type>
            <size>12435</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzY4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE1LTA1LTAxICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gQ29tYmluZSBORkFzIHByb3Blcmx5IGFuZCBmcmVlIG1lbW9yeSBhcyB3ZSBj
b21waWxlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQ0NDg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SSBzdGlsbCBuZWVkIHRvIGFkZCBhIHRlc3QgdGhhdCBoYXMgYSBzdGFjayBvdmVyZmxvdyB3aXRo
IG15IGN1cnJlbnQgcmVjdXJzaXZlIGFwcHJvYWNoLAorICAgICAgICBhbmQgYW5vdGhlciB0ZXN0
IHRoYXQgaGFkIHRvbyBtYW55IE5GQXMgYnV0IGRvZXNuJ3QgYW55IG1vcmUuCisKKyAgICAgICAg
KiBjb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVSTEZpbHRlcnMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbWJpbmVkVVJMRmlsdGVyczo6YWRkUGF0dGVybik6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Z2VuZXJhdGVORkFGb3JTdWJ0
cmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb21iaW5lZFVSTEZp
bHRlcnM6OnByb2Nlc3NORkFzKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5l
ZFVSTEZpbHRlcnMuaDoKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9UZXJtLmg6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VGVybTo6cXVhbnRpdHkpOgorCiAyMDE1
LTA1LTAxICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQg
QVBJIHRvIGRpc2FibGUgbWV0YSByZWZyZXNoZXMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVSTEZpbHRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbWJpbmVkVVJMRmlsdGVycy5jcHAJKHJldmlz
aW9uIDE4MzY3NykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbWJpbmVk
VVJMRmlsdGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDYgQEAgdHlwZWRlZiBW
ZWN0b3I8UHJlZml4VHJlZUVkZ2UsIDAsIFdURjo6Qwogc3RydWN0IFByZWZpeFRyZWVWZXJ0ZXgg
ewogICAgIFByZWZpeFRyZWVFZGdlcyBlZGdlczsKICAgICBBY3Rpb25MaXN0IGZpbmFsQWN0aW9u
czsKLSAgICBib29sIGluVmFyaWFibGVMZW5ndGhQcmVmaXggeyBmYWxzZSB9OwogfTsKIAogI2lm
IENPTlRFTlRfRVhURU5TSU9OU19QRVJGT1JNQU5DRV9SRVBPUlRJTkcKQEAgLTEzMiw3ICsxMzEs
NiBAQCB2b2lkIENvbWJpbmVkVVJMRmlsdGVyczo6YWRkUGF0dGVybih1aW50CiAgICAgcHJlZml4
VHJlZVZlcnRpY2VzRm9yUGF0dGVybi5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBhdHRlcm4uc2l6
ZSgpICsgMSk7CiAKICAgICAvLyBFeHRlbmQgdGhlIHByZWZpeCB0cmVlIHdpdGggdGhlIG5ldyBw
YXR0ZXJuLgotICAgIGJvb2wgaGFzTmV3VGVybSA9IGZhbHNlOwogICAgIFByZWZpeFRyZWVWZXJ0
ZXgqIGxhc3RQcmVmaXhUcmVlID0gbV9wcmVmaXhUcmVlUm9vdC5nZXQoKTsKICAgICBwcmVmaXhU
cmVlVmVydGljZXNGb3JQYXR0ZXJuLmFwcGVuZChsYXN0UHJlZml4VHJlZSk7CiAKQEAgLTE0Nyw4
ICsxNDUsNiBAQCB2b2lkIENvbWJpbmVkVVJMRmlsdGVyczo6YWRkUGF0dGVybih1aW50CiAgICAg
ICAgIGlmIChuZXh0RW50cnlJbmRleCAhPSBXVEY6Om5vdEZvdW5kKQogICAgICAgICAgICAgbGFz
dFByZWZpeFRyZWUgPSBsYXN0UHJlZml4VHJlZS0+ZWRnZXNbbmV4dEVudHJ5SW5kZXhdLmNoaWxk
LmdldCgpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGhhc05ld1Rlcm0gPSB0cnVlOwot
CiAgICAgICAgICAgICBsYXN0UHJlZml4VHJlZS0+ZWRnZXMuYXBwZW5kKFByZWZpeFRyZWVFZGdl
KHt0ZXJtLCBzdGQ6Om1ha2VfdW5pcXVlPFByZWZpeFRyZWVWZXJ0ZXg+KCl9KSk7CiAgICAgICAg
ICAgICBsYXN0UHJlZml4VHJlZSA9IGxhc3RQcmVmaXhUcmVlLT5lZGdlcy5sYXN0KCkuY2hpbGQu
Z2V0KCk7CiAgICAgICAgIH0KQEAgLTE1OCwxMTggKzE1NCw4NSBAQCB2b2lkIENvbWJpbmVkVVJM
RmlsdGVyczo6YWRkUGF0dGVybih1aW50CiAgICAgQWN0aW9uTGlzdCYgYWN0aW9ucyA9IHByZWZp
eFRyZWVWZXJ0aWNlc0ZvclBhdHRlcm4ubGFzdCgpLT5maW5hbEFjdGlvbnM7CiAgICAgaWYgKGFj
dGlvbnMuZmluZChhY3Rpb25JZCkgPT0gV1RGOjpub3RGb3VuZCkKICAgICAgICAgYWN0aW9ucy5h
cHBlbmQoYWN0aW9uSWQpOwotCi0gICAgaWYgKCFoYXNOZXdUZXJtKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBib29sIGhhc1NlZW5WYXJpYWJsZUxlbmd0aFRlcm1zID0gZmFsc2U7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gcGF0dGVybi5zaXplKCk7IGktLTspIHsKLSAgICAgICAgY29uc3QgVGVy
bSYgdGVybSA9IHBhdHRlcm5baV07Ci0gICAgICAgIGhhc1NlZW5WYXJpYWJsZUxlbmd0aFRlcm1z
IHw9ICF0ZXJtLmhhc0ZpeGVkTGVuZ3RoKCk7Ci0gICAgICAgIHByZWZpeFRyZWVWZXJ0aWNlc0Zv
clBhdHRlcm5baSArIDFdLT5pblZhcmlhYmxlTGVuZ3RoUHJlZml4IHw9IGhhc1NlZW5WYXJpYWJs
ZUxlbmd0aFRlcm1zOwotICAgIH0KLSAgICBwcmVmaXhUcmVlVmVydGljZXNGb3JQYXR0ZXJuWzBd
LT5pblZhcmlhYmxlTGVuZ3RoUHJlZml4IHw9IGhhc1NlZW5WYXJpYWJsZUxlbmd0aFRlcm1zOwog
fQogCi1zdHJ1Y3QgQWN0aXZlU3VidHJlZSB7Ci0gICAgY29uc3QgUHJlZml4VHJlZVZlcnRleCog
dmVydGV4OwotICAgIFByZWZpeFRyZWVFZGdlczo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7Citz
dHJ1Y3QgVHJhdmVyc2FsU3RlcCB7CisgICAgUHJlZml4VHJlZVZlcnRleCogdmVydGV4OworICAg
IHNpemVfdCBlZGdlSW5kZXg7CiB9OwogCi1zdGF0aWMgdm9pZCBnZW5lcmF0ZU5GQUZvclN1YnRy
ZWUoTkZBJiBuZmEsIHVuc2lnbmVkIHJvb3RJZCwgY29uc3QgUHJlZml4VHJlZVZlcnRleCYgcHJl
Zml4VHJlZVZlcnRleCkKKy8vIEZJWE1FOiBBZGQgYSB0ZXN0IHRoYXQgaGFzIGEgZGVlcCBwcmVm
aXggdHJlZSAoY2F1c2luZyBhIHJlY3Vyc2lvbiBzdGFjayBvdmVyZmxvdyBoZXJlKSBhbmQgdXNl
IGEgVmVjdG9yIGluc3RlYWQgb2YgcmVjdXJzaW9uLgorc3RhdGljIHZvaWQgZ2VuZXJhdGVORkFG
b3JTdWJ0cmVlKE5GQSYgbmZhLCB1bnNpZ25lZCByb290SWQsIFByZWZpeFRyZWVWZXJ0ZXgmIHZl
cnRleCkKIHsKLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFwcmVmaXhUcmVlVmVydGV4LmluVmFy
aWFibGVMZW5ndGhQcmVmaXgsICJUaGlzIGNvZGUgYXNzdW1lcyB0aGUgc3VidHJlZXMgd2l0aCB2
YXJpYWJsZSBwcmVmaXggbGVuZ3RoIGhhdmUgYWxyZWFkeSBiZWVuIGhhbmRsZWQuIik7Ci0KLSAg
ICBzdHJ1Y3QgQWN0aXZlTkZBU3VidHJlZSA6IEFjdGl2ZVN1YnRyZWUgewotICAgICAgICBBY3Rp
dmVORkFTdWJ0cmVlKGNvbnN0IFByZWZpeFRyZWVWZXJ0ZXgqIHZlcnRleCwgUHJlZml4VHJlZUVk
Z2VzOjpjb25zdF9pdGVyYXRvciBpdGVyYXRvciwgdW5zaWduZWQgbm9kZUluZGV4KQotICAgICAg
ICAgICAgOiBBY3RpdmVTdWJ0cmVlKHsgdmVydGV4LCBpdGVyYXRvciB9KQotICAgICAgICAgICAg
LCBsYXN0Tm9kZUluZGV4KG5vZGVJbmRleCkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAg
IHVuc2lnbmVkIGxhc3ROb2RlSW5kZXg7Ci0gICAgfTsKLQotICAgIFZlY3RvcjxBY3RpdmVORkFT
dWJ0cmVlPiBhY3RpdmVTdGFjazsKLSAgICBhY3RpdmVTdGFjay5hcHBlbmQoQWN0aXZlTkZBU3Vi
dHJlZSgmcHJlZml4VHJlZVZlcnRleCwgcHJlZml4VHJlZVZlcnRleC5lZGdlcy5iZWdpbigpLCBy
b290SWQpKTsKLQotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgUHJvY2Vzc1N1YnRyZWU6Ci0gICAg
ICAgIGZvciAoQWN0aXZlTkZBU3VidHJlZSYgYWN0aXZlU3VidHJlZSA9IGFjdGl2ZVN0YWNrLmxh
c3QoKTsgYWN0aXZlU3VidHJlZS5pdGVyYXRvciAhPSBhY3RpdmVTdWJ0cmVlLnZlcnRleC0+ZWRn
ZXMuZW5kKCk7ICsrYWN0aXZlU3VidHJlZS5pdGVyYXRvcikgewotICAgICAgICAgICAgaWYgKGFj
dGl2ZVN1YnRyZWUuaXRlcmF0b3ItPmNoaWxkLT5pblZhcmlhYmxlTGVuZ3RoUHJlZml4KQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBjb25zdCBUZXJtJiB0ZXJtID0g
YWN0aXZlU3VidHJlZS5pdGVyYXRvci0+dGVybTsKLSAgICAgICAgICAgIHVuc2lnbmVkIG5ld0Vu
ZE5vZGVJbmRleCA9IHRlcm0uZ2VuZXJhdGVHcmFwaChuZmEsIGFjdGl2ZVN1YnRyZWUubGFzdE5v
ZGVJbmRleCwgYWN0aXZlU3VidHJlZS5pdGVyYXRvci0+Y2hpbGQtPmZpbmFsQWN0aW9ucyk7Ci0K
LSAgICAgICAgICAgIFByZWZpeFRyZWVWZXJ0ZXgqIHByZWZpeFRyZWVWZXJ0ZXggPSBhY3RpdmVT
dWJ0cmVlLml0ZXJhdG9yLT5jaGlsZC5nZXQoKTsKLSAgICAgICAgICAgIGlmICghcHJlZml4VHJl
ZVZlcnRleC0+ZWRnZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgYWN0aXZlU3RhY2su
YXBwZW5kKEFjdGl2ZU5GQVN1YnRyZWUocHJlZml4VHJlZVZlcnRleCwgcHJlZml4VHJlZVZlcnRl
eC0+ZWRnZXMuYmVnaW4oKSwgbmV3RW5kTm9kZUluZGV4KSk7Ci0gICAgICAgICAgICAgICAgZ290
byBQcm9jZXNzU3VidHJlZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGFj
dGl2ZVN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgaWYgKGFjdGl2ZVN0YWNrLmlzRW1wdHko
KSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICArK2FjdGl2ZVN0YWNrLmxhc3QoKS5pdGVy
YXRvcjsKLSAgICB9CisgICAgZm9yIChhdXRvJiBlZGdlIDogdmVydGV4LmVkZ2VzKSB7CisgICAg
ICAgIHVuc2lnbmVkIHN1YnRyZWVSb290SWQgPSBlZGdlLnRlcm0uZ2VuZXJhdGVHcmFwaChuZmEs
IHJvb3RJZCwgZWRnZS5jaGlsZC0+ZmluYWxBY3Rpb25zKTsKKyAgICAgICAgZ2VuZXJhdGVORkFG
b3JTdWJ0cmVlKG5mYSwgc3VidHJlZVJvb3RJZCwgKmVkZ2UuY2hpbGQuZ2V0KCkpOworICAgICAg
ICBpZiAoZWRnZS50ZXJtLnF1YW50aXR5KCkgIT0gQXRvbVF1YW50aWZpZXI6Ok9uZSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOyAvLyBUaGlzIHdpbGwgYmUgYSBwYXJ0IG9mIGFub3RoZXIgTkZBLgor
ICAgICAgICBpZiAoZWRnZS5jaGlsZC0+ZWRnZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgZWRn
ZS50ZXJtLmRlc3Ryb3koKTsgLy8gTWFyayB0aGlzIGxlYWYgZm9yIGRlbGV0aW5nLgorICAgIH0K
KyAgICB2ZXJ0ZXguZWRnZXMucmVtb3ZlQWxsTWF0Y2hpbmcoW10oUHJlZml4VHJlZUVkZ2UmIGVk
Z2UpCisgICAgeworICAgICAgICByZXR1cm4gZWRnZS50ZXJtLmlzRGVsZXRlZFZhbHVlKCk7Cisg
ICAgfSk7CiB9CiAKLXZvaWQgQ29tYmluZWRVUkxGaWx0ZXJzOjpwcm9jZXNzTkZBcyhzdGQ6OmZ1
bmN0aW9uPHZvaWQoTkZBJiYpPiBoYW5kbGVyKSBjb25zdAordm9pZCBDb21iaW5lZFVSTEZpbHRl
cnM6OnByb2Nlc3NORkFzKHN0ZDo6ZnVuY3Rpb248dm9pZChORkEmJik+IGhhbmRsZXIpCiB7Ci0g
ICAgVmVjdG9yPEFjdGl2ZVN1YnRyZWU+IGFjdGl2ZVN0YWNrOwotICAgIGFjdGl2ZVN0YWNrLmFw
cGVuZChBY3RpdmVTdWJ0cmVlKHsgbV9wcmVmaXhUcmVlUm9vdC5nZXQoKSwgbV9wcmVmaXhUcmVl
Um9vdC0+ZWRnZXMuYmVnaW4oKSB9KSk7Ci0KKyNpZiBDT05URU5UX0VYVEVOU0lPTlNfU1RBVEVf
TUFDSElORV9ERUJVR0dJTkcKKyAgICBwcmludCgpOworI2VuZGlmCiAgICAgd2hpbGUgKHRydWUp
IHsKLSAgICBQcm9jZXNzU3VidHJlZToKLSAgICAgICAgQWN0aXZlU3VidHJlZSYgYWN0aXZlU3Vi
dHJlZSA9IGFjdGl2ZVN0YWNrLmxhc3QoKTsKLQotICAgICAgICAvLyBXZSBnbyBkZXB0aCBmaXJz
dCBpbnRvIHRoZSBzdWJ0cmVlcyB3aXRoIHZhcmlhYmxlIHByZWZpeC4gRmluZCB0aGUgbmV4dCBz
dWJ0cmVlLgotICAgICAgICBmb3IgKDsgYWN0aXZlU3VidHJlZS5pdGVyYXRvciAhPSBhY3RpdmVT
dWJ0cmVlLnZlcnRleC0+ZWRnZXMuZW5kKCk7ICsrYWN0aXZlU3VidHJlZS5pdGVyYXRvcikgewot
ICAgICAgICAgICAgUHJlZml4VHJlZVZlcnRleCogcHJlZml4VHJlZVZlcnRleCA9IGFjdGl2ZVN1
YnRyZWUuaXRlcmF0b3ItPmNoaWxkLmdldCgpOwotICAgICAgICAgICAgaWYgKHByZWZpeFRyZWVW
ZXJ0ZXgtPmluVmFyaWFibGVMZW5ndGhQcmVmaXgpIHsKLSAgICAgICAgICAgICAgICBhY3RpdmVT
dGFjay5hcHBlbmQoQWN0aXZlU3VidHJlZSh7IHByZWZpeFRyZWVWZXJ0ZXgsIHByZWZpeFRyZWVW
ZXJ0ZXgtPmVkZ2VzLmJlZ2luKCkgfSkpOwotICAgICAgICAgICAgICAgIGdvdG8gUHJvY2Vzc1N1
YnRyZWU7Ci0gICAgICAgICAgICB9CisgICAgICAgIC8vIEdldCBhIHN0YWNrIGdvaW5nIG91dCB0
byBhIGxlYWYuCisgICAgICAgIFZlY3RvcjxUcmF2ZXJzYWxTdGVwLCAxMjg+IHN0YWNrOworICAg
ICAgICBBU1NFUlQobV9wcmVmaXhUcmVlUm9vdCk7CisgICAgICAgIGZvciAoUHJlZml4VHJlZVZl
cnRleCogdmVydGV4ID0gbV9wcmVmaXhUcmVlUm9vdC5nZXQoKTsgIXZlcnRleC0+ZWRnZXMuaXNF
bXB0eSgpOyB2ZXJ0ZXggPSB2ZXJ0ZXgtPmVkZ2VzLmxhc3QoKS5jaGlsZC5nZXQoKSkgeworICAg
ICAgICAgICAgQVNTRVJUKHZlcnRleCk7CisgICAgICAgICAgICBBU1NFUlQodmVydGV4LT5lZGdl
cy5zaXplKCkpOworICAgICAgICAgICAgLy8gV2UgYXJiaXRyYXJpbHkgY2hvb3NlIHRoZSB0aGUg
bGFzdCB2ZXJ0ZXggdG8gbWFrZSBpdCBmYXN0IHRvIHJlbW92ZSBpdCBmcm9tIFZlY3RvcnMgd2hl
biB3ZSdyZSBkb25lLgorICAgICAgICAgICAgc3RhY2suYXBwZW5kKFRyYXZlcnNhbFN0ZXAoe3Zl
cnRleCwgdmVydGV4LT5lZGdlcy5zaXplKCkgLSAxfSkpOwogICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gQWZ0ZXIgd2UgcmVhY2hlZCBoZXJlLCB3ZSBrbm93IHRoYXQgYWxsIHRoZSBzdWJ0cmVlcyB3
aXRoIHZhcmlhYmxlIHByZWZpeGVzIGhhdmUgYmVlbiBwcm9jZXNzZWQsCi0gICAgICAgIC8vIHRp
bWUgdG8gZ2VuZXJhdGUgdGhlIE5GQSBmb3IgdGhlIGdyYXBoIHJvb3RlZCBoZXJlLgotICAgICAg
ICBib29sIG5lZWRUb0dlbmVyYXRlID0gYWN0aXZlU3VidHJlZS52ZXJ0ZXgtPmVkZ2VzLmlzRW1w
dHkoKSAmJiAhYWN0aXZlU3VidHJlZS52ZXJ0ZXgtPmZpbmFsQWN0aW9ucy5pc0VtcHR5KCk7Ci0g
ICAgICAgIGlmICghbmVlZFRvR2VuZXJhdGUpIHsKLSAgICAgICAgICAgIGZvciAoY29uc3QgYXV0
byYgZWRnZSA6IGFjdGl2ZVN1YnRyZWUudmVydGV4LT5lZGdlcykgewotICAgICAgICAgICAgICAg
IGlmICghZWRnZS5jaGlsZC0+aW5WYXJpYWJsZUxlbmd0aFByZWZpeCkgewotICAgICAgICAgICAg
ICAgICAgICBuZWVkVG9HZW5lcmF0ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKHN0YWNrLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgLy8gV2UncmUgZG9uZSBvbmNlIHdlIGhhdmUgcHJvY2Vz
c2VkIGFuZCByZW1vdmVkIGFsbCB0aGUgZWRnZXMgaW4gdGhlIHByZWZpeCB0cmVlLgorICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KLQotICAgICAgICBpZiAobmVlZFRvR2VuZXJhdGUpIHsK
LSAgICAgICAgICAgIE5GQSBuZmE7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIHByZWZpeEVuZCA9
IG5mYS5yb290KCk7Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhY3Rp
dmVTdGFjay5zaXplKCkgLSAxOyArK2kpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBUZXJtJiB0
ZXJtID0gYWN0aXZlU3RhY2tbaV0uaXRlcmF0b3ItPnRlcm07Ci0gICAgICAgICAgICAgICAgcHJl
Zml4RW5kID0gdGVybS5nZW5lcmF0ZUdyYXBoKG5mYSwgcHJlZml4RW5kLCBhY3RpdmVTdGFja1tp
XS5pdGVyYXRvci0+Y2hpbGQtPmZpbmFsQWN0aW9ucyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGZvciAoY29uc3QgYXV0byYgZWRnZSA6IGFjdGl2ZVN1YnRyZWUudmVydGV4LT5lZGdl
cykgewotICAgICAgICAgICAgICAgIGlmICghZWRnZS5jaGlsZC0+aW5WYXJpYWJsZUxlbmd0aFBy
ZWZpeCkgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBuZXdTdWJ0cmVlU3RhcnQgPSBl
ZGdlLnRlcm0uZ2VuZXJhdGVHcmFwaChuZmEsIHByZWZpeEVuZCwgZWRnZS5jaGlsZC0+ZmluYWxB
Y3Rpb25zKTsKLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVORkFGb3JTdWJ0cmVlKG5mYSwg
bmV3U3VidHJlZVN0YXJ0LCAqZWRnZS5jaGlsZCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBoYW5kbGVyKFdURjo6bW92ZShuZmEp
KTsKKyAgICAgICAgCisgICAgICAgIC8vIEZpbmQgdGhlIGxhc3QgdGVybSB3aXRoIGEgcXVhbnRp
ZmllciBpZiB0aGVyZSBpcyBvbmUuCisgICAgICAgIHdoaWxlICghc3RhY2suaXNFbXB0eSgpICYm
IHN0YWNrLmxhc3QoKS52ZXJ0ZXgtPmVkZ2VzLmxhc3QoKS50ZXJtLnF1YW50aXR5KCkgPT0gQXRv
bVF1YW50aWZpZXI6Ok9uZSkKKyAgICAgICAgICAgIHN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIE1ha2UgYW4gTkZBIHdpdGggdGhlIHN1YnRyZWVzIGZvciB3aG9tIHRo
aXMgaXMgYWxzbyB0aGUgbGFzdCBxdWFudGlmaWVyIChvciB3aG8gYWxzbyBoYXZlIG5vIHF1YW50
aWZpZXIpLgorICAgICAgICBORkEgbmZhOworICAgICAgICB1bnNpZ25lZCBwcmVmaXhFbmQgPSBu
ZmEucm9vdCgpOworICAgICAgICBmb3IgKGNvbnN0IFRyYXZlcnNhbFN0ZXAmIHN0ZXAgOiBzdGFj
aykgeworICAgICAgICAgICAgY29uc3QgUHJlZml4VHJlZUVkZ2UmIGVkZ2UgPSBzdGVwLnZlcnRl
eC0+ZWRnZXNbc3RlcC5lZGdlSW5kZXhdOworICAgICAgICAgICAgcHJlZml4RW5kID0gZWRnZS50
ZXJtLmdlbmVyYXRlR3JhcGgobmZhLCBwcmVmaXhFbmQsIGVkZ2UuY2hpbGQtPmZpbmFsQWN0aW9u
cyk7CisgICAgICAgIH0KKyAgICAgICAgVHJhdmVyc2FsU3RlcCYgc3RlcCA9IHN0YWNrLmxhc3Qo
KTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGVwLnZlcnRl
eC0+ZWRnZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIGVkZ2UgPSBz
dGVwLnZlcnRleC0+ZWRnZXNbaV07CisgICAgICAgICAgICBjb25zdCBUZXJtJiB0ZXJtID0gZWRn
ZS50ZXJtOworICAgICAgICAgICAgdW5zaWduZWQgbmV3U3VidHJlZVN0YXJ0ID0gdGVybS5nZW5l
cmF0ZUdyYXBoKG5mYSwgcHJlZml4RW5kLCBlZGdlLmNoaWxkLT5maW5hbEFjdGlvbnMpOworICAg
ICAgICAgICAgZ2VuZXJhdGVORkFGb3JTdWJ0cmVlKG5mYSwgbmV3U3VidHJlZVN0YXJ0LCAqZWRn
ZS5jaGlsZC5nZXQoKSk7CisgICAgICAgICAgICBpZiAoZWRnZS5jaGlsZC0+ZWRnZXMuaXNFbXB0
eSgpKQorICAgICAgICAgICAgICAgIHN0ZXAudmVydGV4LT5lZGdlc1tpXS50ZXJtLmRlc3Ryb3ko
KTsgLy8gTWFyayB0aGlzIGxlYWYgZm9yIGRlbGV0aW5nLgorICAgICAgICB9CisgICAgICAgIHN0
ZXAudmVydGV4LT5lZGdlcy5yZW1vdmVBbGxNYXRjaGluZyhbXShQcmVmaXhUcmVlRWRnZSYgZWRn
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVkZ2UudGVybS5pc0RlbGV0ZWRWYWx1
ZSgpOworICAgICAgICB9KTsKKyAgICAgICAgaGFuZGxlcihXVEY6Om1vdmUobmZhKSk7CisgICAg
ICAgIAorICAgICAgICAvLyBEZWxldGUgcHJvY2Vzc2VkIGxlYWYgdmVydGljZXMuCisgICAgICAg
IHdoaWxlIChzdGFjay5zaXplKCkgPiAxICYmIHN0YWNrLmxhc3QoKS52ZXJ0ZXgtPmVkZ2VzLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShzdGFja1tzdGFjay5z
aXplKCkgLSAyXS5lZGdlSW5kZXggPT0gc3RhY2tbc3RhY2suc2l6ZSgpIC0gMl0udmVydGV4LT5l
ZGdlcy5zaXplKCkgLSAxLAorICAgICAgICAgICAgICAgICJXZSBzaG91bGQgdHJhdmVyc2UgdG8g
dGhlIGxhc3QgZWRnZSB0byBiZSBhYmxlIHRvIHVzZSBlZGdlcy5yZW1vdmVMYXN0Iik7CisgICAg
ICAgICAgICBzdGFja1tzdGFjay5zaXplKCkgLSAyXS52ZXJ0ZXgtPmVkZ2VzLnJlbW92ZUxhc3Qo
KTsKKyAgICAgICAgICAgIC8vIHN0YWNrLmxhc3QoKS52ZXJ0ZXggbm93IHBvaW50cyB0byBhIGRl
bGV0ZWQgUHJlZml4VHJlZVZlcnRleCwgYnV0IHdlJ3JlIG5vdCBnb2luZyB0byB1c2UgdGhhdCBw
b2ludGVyLgorICAgICAgICAgICAgc3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gV2UgaGF2ZSBwcm9jZXNzZWQgYWxsIHRoZSBzdWJ0cmVlcyBvZiB0aGlzIGxldmVs
LCBwb3AgdGhlIHN0YWNrIGFuZCBtb3ZlIG9uIHRvIHRoZSBuZXh0IHNpYmxpbmcuCi0gICAgICAg
IGFjdGl2ZVN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgaWYgKGFjdGl2ZVN0YWNrLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICArK2FjdGl2ZVN0YWNrLmxhc3QoKS5p
dGVyYXRvcjsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0NvbWJpbmVkVVJMRmlsdGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL0NvbWJpbmVkVVJMRmlsdGVycy5oCShyZXZpc2lvbiAxODM2NzcpCisr
KyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVSTEZpbHRlcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZFBh
dHRlcm4odWludDY0X3QgcGF0dGVybklkLCBjb25zdCBWZWN0b3I8VGVybT4mIHBhdHRlcm4pOwog
Ci0gICAgdm9pZCBwcm9jZXNzTkZBcyhzdGQ6OmZ1bmN0aW9uPHZvaWQoTkZBJiYpPiBoYW5kbGVy
KSBjb25zdDsKKyAgICB2b2lkIHByb2Nlc3NORkFzKHN0ZDo6ZnVuY3Rpb248dm9pZChORkEmJik+
IGhhbmRsZXIpOwogICAgIHZvaWQgY2xlYXIoKTsKIAogI2lmIENPTlRFTlRfRVhURU5TSU9OU19Q
RVJGT1JNQU5DRV9SRVBPUlRJTkcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL1Rlcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9UZXJtLmgJKHJldmlzaW9uIDE4MzY3NykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL1Rlcm0uaAkod29ya2luZyBjb3B5KQpAQCAtODUsNiArODUsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBleHRlbmRHcm91cFN1YnBhdHRlcm4oY29uc3QgVGVybSYpOwogCiAgICAgdm9pZCBx
dWFudGlmeShjb25zdCBBdG9tUXVhbnRpZmllciYpOworICAgIEF0b21RdWFudGlmaWVyIHF1YW50
aXR5KCkgY29uc3QgeyByZXR1cm4gbV9xdWFudGlmaWVyOyB9CiAKICAgICB1bnNpZ25lZCBnZW5l
cmF0ZUdyYXBoKE5GQSYsIHVuc2lnbmVkIHN0YXJ0LCBjb25zdCBBY3Rpb25MaXN0JiBmaW5hbEFj
dGlvbnMpIGNvbnN0OwogCkBAIC0xMDgsNiArMTA5LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBp
c0VtcHR5VmFsdWUoKSBjb25zdDsKICAgICBib29sIGlzRGVsZXRlZFZhbHVlKCkgY29uc3Q7Cisg
ICAgdm9pZCBkZXN0cm95KCk7CiAKICNpZiBDT05URU5UX0VYVEVOU0lPTlNfU1RBVEVfTUFDSElO
RV9ERUJVR0dJTkcKICAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKQEAgLTEyMCw4ICsxMjIs
NiBAQCBwcml2YXRlOgogCiAgICAgdW5zaWduZWQgZ2VuZXJhdGVTdWJncmFwaEZvckF0b20oTkZB
JiwgdW5zaWduZWQgc291cmNlKSBjb25zdDsKIAotICAgIHZvaWQgZGVzdHJveSgpOwotCiAgICAg
ZW51bSBjbGFzcyBUZXJtVHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBFbXB0eSwKICAgICAgICAg
RGVsZXRlZCwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252240</attachid>
            <date>2015-05-02 11:13:45 -0700</date>
            <delta_ts>2015-05-02 23:31:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144485-20150502111237.patch</filename>
            <type>text/plain</type>
            <size>12728</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzY4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE1LTA1LTAyICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gQ29tYmluZSBORkFzIHByb3Blcmx5IGFuZCBmcmVlIG1lbW9yeSBhcyB3ZSBj
b21waWxlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQ0NDg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SSBzdGlsbCBuZWVkIHRvIGFkZCBhIHRlc3QgdGhhdCBoYXMgYSBzdGFjayBvdmVyZmxvdyB3aXRo
IG15IGN1cnJlbnQgcmVjdXJzaXZlIGFwcHJvYWNoLAorICAgICAgICBhbmQgYW5vdGhlciB0ZXN0
IHRoYXQgaGFkIHRvbyBtYW55IE5GQXMgYnV0IGRvZXNuJ3QgYW55IG1vcmUuCisKKyAgICAgICAg
KiBjb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVSTEZpbHRlcnMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbWJpbmVkVVJMRmlsdGVyczo6YWRkUGF0dGVybik6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Z2VuZXJhdGVORkFGb3JTdWJ0
cmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb21iaW5lZFVSTEZp
bHRlcnM6OnByb2Nlc3NORkFzKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5l
ZFVSTEZpbHRlcnMuaDoKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5z
aW9uc0RlYnVnZ2luZy5oOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL1Rlcm0uaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJtOjpxdWFudGl0eSk6CisKIDIw
MTUtMDUtMDEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIEFk
ZCBBUEkgdG8gZGlzYWJsZSBtZXRhIHJlZnJlc2hlcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL0NvbWJpbmVkVVJMRmlsdGVycy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29tYmluZWRVUkxGaWx0ZXJzLmNwcAkocmV2
aXNpb24gMTgzNjc3KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29tYmlu
ZWRVUkxGaWx0ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNiBAQCB0eXBlZGVm
IFZlY3RvcjxQcmVmaXhUcmVlRWRnZSwgMCwgV1RGOjpDCiBzdHJ1Y3QgUHJlZml4VHJlZVZlcnRl
eCB7CiAgICAgUHJlZml4VHJlZUVkZ2VzIGVkZ2VzOwogICAgIEFjdGlvbkxpc3QgZmluYWxBY3Rp
b25zOwotICAgIGJvb2wgaW5WYXJpYWJsZUxlbmd0aFByZWZpeCB7IGZhbHNlIH07CiB9OwogCiAj
aWYgQ09OVEVOVF9FWFRFTlNJT05TX1BFUkZPUk1BTkNFX1JFUE9SVElORwpAQCAtMTI4LDExICsx
MjcsMTAgQEAgdm9pZCBDb21iaW5lZFVSTEZpbHRlcnM6OmFkZFBhdHRlcm4odWludAogICAgIGlm
IChwYXR0ZXJuLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPFByZWZp
eFRyZWVWZXJ0ZXgqLCAxMjg+IHByZWZpeFRyZWVWZXJ0aWNlc0ZvclBhdHRlcm47CisgICAgVmVj
dG9yPFByZWZpeFRyZWVWZXJ0ZXgqLCAxMjg+IHByZWZpeFRyZWVWZXJ0aWNlc0ZvclBhdHRlcm47
IC8vIEdldCByaWQgb2YgdGhpcyBhbmQgb25seSB1c2UgbGFzdFByZWZpeFRyZWUuCiAgICAgcHJl
Zml4VHJlZVZlcnRpY2VzRm9yUGF0dGVybi5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBhdHRlcm4u
c2l6ZSgpICsgMSk7CiAKICAgICAvLyBFeHRlbmQgdGhlIHByZWZpeCB0cmVlIHdpdGggdGhlIG5l
dyBwYXR0ZXJuLgotICAgIGJvb2wgaGFzTmV3VGVybSA9IGZhbHNlOwogICAgIFByZWZpeFRyZWVW
ZXJ0ZXgqIGxhc3RQcmVmaXhUcmVlID0gbV9wcmVmaXhUcmVlUm9vdC5nZXQoKTsKICAgICBwcmVm
aXhUcmVlVmVydGljZXNGb3JQYXR0ZXJuLmFwcGVuZChsYXN0UHJlZml4VHJlZSk7CiAKQEAgLTE0
Nyw4ICsxNDUsNiBAQCB2b2lkIENvbWJpbmVkVVJMRmlsdGVyczo6YWRkUGF0dGVybih1aW50CiAg
ICAgICAgIGlmIChuZXh0RW50cnlJbmRleCAhPSBXVEY6Om5vdEZvdW5kKQogICAgICAgICAgICAg
bGFzdFByZWZpeFRyZWUgPSBsYXN0UHJlZml4VHJlZS0+ZWRnZXNbbmV4dEVudHJ5SW5kZXhdLmNo
aWxkLmdldCgpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGhhc05ld1Rlcm0gPSB0cnVl
OwotCiAgICAgICAgICAgICBsYXN0UHJlZml4VHJlZS0+ZWRnZXMuYXBwZW5kKFByZWZpeFRyZWVF
ZGdlKHt0ZXJtLCBzdGQ6Om1ha2VfdW5pcXVlPFByZWZpeFRyZWVWZXJ0ZXg+KCl9KSk7CiAgICAg
ICAgICAgICBsYXN0UHJlZml4VHJlZSA9IGxhc3RQcmVmaXhUcmVlLT5lZGdlcy5sYXN0KCkuY2hp
bGQuZ2V0KCk7CiAgICAgICAgIH0KQEAgLTE1OCwxMTggKzE1NCw4MCBAQCB2b2lkIENvbWJpbmVk
VVJMRmlsdGVyczo6YWRkUGF0dGVybih1aW50CiAgICAgQWN0aW9uTGlzdCYgYWN0aW9ucyA9IHBy
ZWZpeFRyZWVWZXJ0aWNlc0ZvclBhdHRlcm4ubGFzdCgpLT5maW5hbEFjdGlvbnM7CiAgICAgaWYg
KGFjdGlvbnMuZmluZChhY3Rpb25JZCkgPT0gV1RGOjpub3RGb3VuZCkKICAgICAgICAgYWN0aW9u
cy5hcHBlbmQoYWN0aW9uSWQpOwotCi0gICAgaWYgKCFoYXNOZXdUZXJtKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBib29sIGhhc1NlZW5WYXJpYWJsZUxlbmd0aFRlcm1zID0gZmFsc2U7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gcGF0dGVybi5zaXplKCk7IGktLTspIHsKLSAgICAgICAgY29uc3Qg
VGVybSYgdGVybSA9IHBhdHRlcm5baV07Ci0gICAgICAgIGhhc1NlZW5WYXJpYWJsZUxlbmd0aFRl
cm1zIHw9ICF0ZXJtLmhhc0ZpeGVkTGVuZ3RoKCk7Ci0gICAgICAgIHByZWZpeFRyZWVWZXJ0aWNl
c0ZvclBhdHRlcm5baSArIDFdLT5pblZhcmlhYmxlTGVuZ3RoUHJlZml4IHw9IGhhc1NlZW5WYXJp
YWJsZUxlbmd0aFRlcm1zOwotICAgIH0KLSAgICBwcmVmaXhUcmVlVmVydGljZXNGb3JQYXR0ZXJu
WzBdLT5pblZhcmlhYmxlTGVuZ3RoUHJlZml4IHw9IGhhc1NlZW5WYXJpYWJsZUxlbmd0aFRlcm1z
OwogfQogCi1zdHJ1Y3QgQWN0aXZlU3VidHJlZSB7Ci0gICAgY29uc3QgUHJlZml4VHJlZVZlcnRl
eCogdmVydGV4OwotICAgIFByZWZpeFRyZWVFZGdlczo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7
Ci19OwotCi1zdGF0aWMgdm9pZCBnZW5lcmF0ZU5GQUZvclN1YnRyZWUoTkZBJiBuZmEsIHVuc2ln
bmVkIHJvb3RJZCwgY29uc3QgUHJlZml4VHJlZVZlcnRleCYgcHJlZml4VHJlZVZlcnRleCkKKy8v
IEZJWE1FOiBBZGQgYSB0ZXN0IHRoYXQgaGFzIGEgZGVlcCBwcmVmaXggdHJlZSAoY2F1c2luZyBh
IHJlY3Vyc2lvbiBzdGFjayBvdmVyZmxvdyBoZXJlKSBhbmQgdXNlIGEgVmVjdG9yIGluc3RlYWQg
b2YgcmVjdXJzaW9uLgorc3RhdGljIHZvaWQgZ2VuZXJhdGVORkFGb3JTdWJ0cmVlKE5GQSYgbmZh
LCB1bnNpZ25lZCByb290SWQsIFByZWZpeFRyZWVWZXJ0ZXgmIHZlcnRleCkKIHsKLSAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKCFwcmVmaXhUcmVlVmVydGV4LmluVmFyaWFibGVMZW5ndGhQcmVmaXgs
ICJUaGlzIGNvZGUgYXNzdW1lcyB0aGUgc3VidHJlZXMgd2l0aCB2YXJpYWJsZSBwcmVmaXggbGVu
Z3RoIGhhdmUgYWxyZWFkeSBiZWVuIGhhbmRsZWQuIik7Ci0KLSAgICBzdHJ1Y3QgQWN0aXZlTkZB
U3VidHJlZSA6IEFjdGl2ZVN1YnRyZWUgewotICAgICAgICBBY3RpdmVORkFTdWJ0cmVlKGNvbnN0
IFByZWZpeFRyZWVWZXJ0ZXgqIHZlcnRleCwgUHJlZml4VHJlZUVkZ2VzOjpjb25zdF9pdGVyYXRv
ciBpdGVyYXRvciwgdW5zaWduZWQgbm9kZUluZGV4KQotICAgICAgICAgICAgOiBBY3RpdmVTdWJ0
cmVlKHsgdmVydGV4LCBpdGVyYXRvciB9KQotICAgICAgICAgICAgLCBsYXN0Tm9kZUluZGV4KG5v
ZGVJbmRleCkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIHVuc2lnbmVkIGxhc3ROb2Rl
SW5kZXg7Ci0gICAgfTsKLQotICAgIFZlY3RvcjxBY3RpdmVORkFTdWJ0cmVlPiBhY3RpdmVTdGFj
azsKLSAgICBhY3RpdmVTdGFjay5hcHBlbmQoQWN0aXZlTkZBU3VidHJlZSgmcHJlZml4VHJlZVZl
cnRleCwgcHJlZml4VHJlZVZlcnRleC5lZGdlcy5iZWdpbigpLCByb290SWQpKTsKLQotICAgIHdo
aWxlICh0cnVlKSB7Ci0gICAgUHJvY2Vzc1N1YnRyZWU6Ci0gICAgICAgIGZvciAoQWN0aXZlTkZB
U3VidHJlZSYgYWN0aXZlU3VidHJlZSA9IGFjdGl2ZVN0YWNrLmxhc3QoKTsgYWN0aXZlU3VidHJl
ZS5pdGVyYXRvciAhPSBhY3RpdmVTdWJ0cmVlLnZlcnRleC0+ZWRnZXMuZW5kKCk7ICsrYWN0aXZl
U3VidHJlZS5pdGVyYXRvcikgewotICAgICAgICAgICAgaWYgKGFjdGl2ZVN1YnRyZWUuaXRlcmF0
b3ItPmNoaWxkLT5pblZhcmlhYmxlTGVuZ3RoUHJlZml4KQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgICAgICBjb25zdCBUZXJtJiB0ZXJtID0gYWN0aXZlU3VidHJlZS5pdGVy
YXRvci0+dGVybTsKLSAgICAgICAgICAgIHVuc2lnbmVkIG5ld0VuZE5vZGVJbmRleCA9IHRlcm0u
Z2VuZXJhdGVHcmFwaChuZmEsIGFjdGl2ZVN1YnRyZWUubGFzdE5vZGVJbmRleCwgYWN0aXZlU3Vi
dHJlZS5pdGVyYXRvci0+Y2hpbGQtPmZpbmFsQWN0aW9ucyk7Ci0KLSAgICAgICAgICAgIFByZWZp
eFRyZWVWZXJ0ZXgqIHByZWZpeFRyZWVWZXJ0ZXggPSBhY3RpdmVTdWJ0cmVlLml0ZXJhdG9yLT5j
aGlsZC5nZXQoKTsKLSAgICAgICAgICAgIGlmICghcHJlZml4VHJlZVZlcnRleC0+ZWRnZXMuaXNF
bXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgYWN0aXZlU3RhY2suYXBwZW5kKEFjdGl2ZU5GQVN1
YnRyZWUocHJlZml4VHJlZVZlcnRleCwgcHJlZml4VHJlZVZlcnRleC0+ZWRnZXMuYmVnaW4oKSwg
bmV3RW5kTm9kZUluZGV4KSk7Ci0gICAgICAgICAgICAgICAgZ290byBQcm9jZXNzU3VidHJlZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGFjdGl2ZVN0YWNrLnJlbW92ZUxh
c3QoKTsKLSAgICAgICAgaWYgKGFjdGl2ZVN0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICArK2FjdGl2ZVN0YWNrLmxhc3QoKS5pdGVyYXRvcjsKLSAgICB9CisgICAg
Zm9yIChhdXRvJiBlZGdlIDogdmVydGV4LmVkZ2VzKSB7CisgICAgICAgIGlmIChlZGdlLnRlcm0u
cXVhbnRpdHkoKSAhPSBBdG9tUXVhbnRpZmllcjo6T25lKQorICAgICAgICAgICAgY29udGludWU7
IC8vIFRoaXMgd2lsbCBiZSBhIHBhcnQgb2YgYW5vdGhlciBORkEuCisgICAgICAgIHVuc2lnbmVk
IHN1YnRyZWVSb290SWQgPSBlZGdlLnRlcm0uZ2VuZXJhdGVHcmFwaChuZmEsIHJvb3RJZCwgZWRn
ZS5jaGlsZC0+ZmluYWxBY3Rpb25zKTsKKyAgICAgICAgQVNTRVJUKGVkZ2UuY2hpbGQuZ2V0KCkp
OworICAgICAgICBnZW5lcmF0ZU5GQUZvclN1YnRyZWUobmZhLCBzdWJ0cmVlUm9vdElkLCAqZWRn
ZS5jaGlsZC5nZXQoKSk7CisgICAgICAgIGlmIChlZGdlLmNoaWxkLT5lZGdlcy5pc0VtcHR5KCkp
CisgICAgICAgICAgICBlZGdlLnRlcm0uZGVzdHJveSgpOyAvLyBNYXJrIHRoaXMgbGVhZiBmb3Ig
ZGVsZXRpbmcuCisgICAgfQorICAgIHZlcnRleC5lZGdlcy5yZW1vdmVBbGxNYXRjaGluZyhbXShQ
cmVmaXhUcmVlRWRnZSYgZWRnZSkKKyAgICB7CisgICAgICAgIHJldHVybiBlZGdlLnRlcm0uaXNE
ZWxldGVkVmFsdWUoKTsKKyAgICB9KTsKIH0KIAotdm9pZCBDb21iaW5lZFVSTEZpbHRlcnM6OnBy
b2Nlc3NORkFzKHN0ZDo6ZnVuY3Rpb248dm9pZChORkEmJik+IGhhbmRsZXIpIGNvbnN0Cit2b2lk
IENvbWJpbmVkVVJMRmlsdGVyczo6cHJvY2Vzc05GQXMoc3RkOjpmdW5jdGlvbjx2b2lkKE5GQSYm
KT4gaGFuZGxlcikKIHsKLSAgICBWZWN0b3I8QWN0aXZlU3VidHJlZT4gYWN0aXZlU3RhY2s7Ci0g
ICAgYWN0aXZlU3RhY2suYXBwZW5kKEFjdGl2ZVN1YnRyZWUoeyBtX3ByZWZpeFRyZWVSb290Lmdl
dCgpLCBtX3ByZWZpeFRyZWVSb290LT5lZGdlcy5iZWdpbigpIH0pKTsKLQorI2lmIENPTlRFTlRf
RVhURU5TSU9OU19TVEFURV9NQUNISU5FX0RFQlVHR0lORworICAgIHByaW50KCk7CisjZW5kaWYK
ICAgICB3aGlsZSAodHJ1ZSkgewotICAgIFByb2Nlc3NTdWJ0cmVlOgotICAgICAgICBBY3RpdmVT
dWJ0cmVlJiBhY3RpdmVTdWJ0cmVlID0gYWN0aXZlU3RhY2subGFzdCgpOwotCi0gICAgICAgIC8v
IFdlIGdvIGRlcHRoIGZpcnN0IGludG8gdGhlIHN1YnRyZWVzIHdpdGggdmFyaWFibGUgcHJlZml4
LiBGaW5kIHRoZSBuZXh0IHN1YnRyZWUuCi0gICAgICAgIGZvciAoOyBhY3RpdmVTdWJ0cmVlLml0
ZXJhdG9yICE9IGFjdGl2ZVN1YnRyZWUudmVydGV4LT5lZGdlcy5lbmQoKTsgKythY3RpdmVTdWJ0
cmVlLml0ZXJhdG9yKSB7Ci0gICAgICAgICAgICBQcmVmaXhUcmVlVmVydGV4KiBwcmVmaXhUcmVl
VmVydGV4ID0gYWN0aXZlU3VidHJlZS5pdGVyYXRvci0+Y2hpbGQuZ2V0KCk7Ci0gICAgICAgICAg
ICBpZiAocHJlZml4VHJlZVZlcnRleC0+aW5WYXJpYWJsZUxlbmd0aFByZWZpeCkgewotICAgICAg
ICAgICAgICAgIGFjdGl2ZVN0YWNrLmFwcGVuZChBY3RpdmVTdWJ0cmVlKHsgcHJlZml4VHJlZVZl
cnRleCwgcHJlZml4VHJlZVZlcnRleC0+ZWRnZXMuYmVnaW4oKSB9KSk7Ci0gICAgICAgICAgICAg
ICAgZ290byBQcm9jZXNzU3VidHJlZTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgLy8gVHJhdmVy
c2Ugb3V0IHRvIGEgbGVhZi4KKyAgICAgICAgVmVjdG9yPFByZWZpeFRyZWVWZXJ0ZXgqLCAxMjg+
IHN0YWNrOworICAgICAgICBBU1NFUlQobV9wcmVmaXhUcmVlUm9vdCk7CisgICAgICAgIFByZWZp
eFRyZWVWZXJ0ZXgqIHZlcnRleCA9IG1fcHJlZml4VHJlZVJvb3QuZ2V0KCk7CisgICAgICAgIHdo
aWxlICh0cnVlKSB7CisgICAgICAgICAgICBzdGFjay5hcHBlbmQodmVydGV4KTsKKyAgICAgICAg
ICAgIGlmICh2ZXJ0ZXgtPmVkZ2VzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIHZlcnRleCA9IHZlcnRleC0+ZWRnZXMubGFzdCgpLmNoaWxkLmdldCgpOwog
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gQWZ0ZXIgd2UgcmVhY2hlZCBoZXJlLCB3ZSBrbm93IHRo
YXQgYWxsIHRoZSBzdWJ0cmVlcyB3aXRoIHZhcmlhYmxlIHByZWZpeGVzIGhhdmUgYmVlbiBwcm9j
ZXNzZWQsCi0gICAgICAgIC8vIHRpbWUgdG8gZ2VuZXJhdGUgdGhlIE5GQSBmb3IgdGhlIGdyYXBo
IHJvb3RlZCBoZXJlLgotICAgICAgICBib29sIG5lZWRUb0dlbmVyYXRlID0gYWN0aXZlU3VidHJl
ZS52ZXJ0ZXgtPmVkZ2VzLmlzRW1wdHkoKSAmJiAhYWN0aXZlU3VidHJlZS52ZXJ0ZXgtPmZpbmFs
QWN0aW9ucy5pc0VtcHR5KCk7Ci0gICAgICAgIGlmICghbmVlZFRvR2VuZXJhdGUpIHsKLSAgICAg
ICAgICAgIGZvciAoY29uc3QgYXV0byYgZWRnZSA6IGFjdGl2ZVN1YnRyZWUudmVydGV4LT5lZGdl
cykgewotICAgICAgICAgICAgICAgIGlmICghZWRnZS5jaGlsZC0+aW5WYXJpYWJsZUxlbmd0aFBy
ZWZpeCkgewotICAgICAgICAgICAgICAgICAgICBuZWVkVG9HZW5lcmF0ZSA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
KyAgICAgICAgaWYgKHN0YWNrLnNpemUoKSA9PSAxKQorICAgICAgICAgICAgYnJlYWs7IC8vIFdl
J3JlIGRvbmUgb25jZSB3ZSBoYXZlIHByb2Nlc3NlZCBhbmQgcmVtb3ZlZCBhbGwgdGhlIGVkZ2Vz
IGluIHRoZSBwcmVmaXggdHJlZS4KKyAgICAgICAgCisgICAgICAgIC8vIEZpbmQgdGhlIHByZWZp
eCByb290IGZvciB0aGlzIE5GQS4gVGhpcyBpcyB0aGUgdmVydGV4IGFmdGVyIHRoZSBsYXN0IHRl
cm0gd2l0aCBhIHF1YW50aWZpZXIgaWYgdGhlcmUgaXMgb25lLAorICAgICAgICAvLyBvciB0aGUg
cm9vdCBpZiB0aGVyZSBhcmUgbm8gcXVhbnRpZmllcnMgbGVmdC4KKyAgICAgICAgd2hpbGUgKHN0
YWNrLnNpemUoKSA+IDEpIHsKKyAgICAgICAgICAgIGlmIChzdGFja1tzdGFjay5zaXplKCkgLSAy
XS0+ZWRnZXMubGFzdCgpLnRlcm0ucXVhbnRpdHkoKSAhPSBBdG9tUXVhbnRpZmllcjo6T25lKQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgc3RhY2sucmVtb3ZlTGFzdCgpOwog
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5lZWRUb0dlbmVyYXRlKSB7Ci0gICAgICAgICAgICBO
RkEgbmZhOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBwcmVmaXhFbmQgPSBuZmEucm9vdCgpOwot
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYWN0aXZlU3RhY2suc2l6ZSgp
IC0gMTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVGVybSYgdGVybSA9IGFjdGl2ZVN0
YWNrW2ldLml0ZXJhdG9yLT50ZXJtOwotICAgICAgICAgICAgICAgIHByZWZpeEVuZCA9IHRlcm0u
Z2VuZXJhdGVHcmFwaChuZmEsIHByZWZpeEVuZCwgYWN0aXZlU3RhY2tbaV0uaXRlcmF0b3ItPmNo
aWxkLT5maW5hbEFjdGlvbnMpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKGNv
bnN0IGF1dG8mIGVkZ2UgOiBhY3RpdmVTdWJ0cmVlLnZlcnRleC0+ZWRnZXMpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoIWVkZ2UuY2hpbGQtPmluVmFyaWFibGVMZW5ndGhQcmVmaXgpIHsKLSAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgbmV3U3VidHJlZVN0YXJ0ID0gZWRnZS50ZXJtLmdlbmVy
YXRlR3JhcGgobmZhLCBwcmVmaXhFbmQsIGVkZ2UuY2hpbGQtPmZpbmFsQWN0aW9ucyk7Ci0gICAg
ICAgICAgICAgICAgICAgIGdlbmVyYXRlTkZBRm9yU3VidHJlZShuZmEsIG5ld1N1YnRyZWVTdGFy
dCwgKmVkZ2UuY2hpbGQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgaGFuZGxlcihXVEY6Om1vdmUobmZhKSk7CisgICAgICAgIEFT
U0VSVF9XSVRIX01FU1NBR0UoIXN0YWNrLmlzRW1wdHkoKSwgIkF0IGxlYXN0IHRoZSByb290IHNo
b3VsZCBiZSBpbiB0aGUgc3RhY2siKTsKKyAgICAgICAgCisgICAgICAgIC8vIE1ha2UgYW4gTkZB
IHdpdGggdGhlIHN1YnRyZWVzIGZvciB3aG9tIHRoaXMgaXMgYWxzbyB0aGUgbGFzdCBxdWFudGlm
aWVyIChvciB3aG8gYWxzbyBoYXZlIG5vIHF1YW50aWZpZXIpLgorICAgICAgICBORkEgbmZhOwor
ICAgICAgICAvLyBQdXQgdGhlIHByZWZpeCBpbnRvIHRoZSBORkEuCisgICAgICAgIHVuc2lnbmVk
IHByZWZpeEVuZCA9IG5mYS5yb290KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzdGFjay5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgICAgIEFTU0VSVCghc3RhY2tbaV0t
PmVkZ2VzLmlzRW1wdHkoKSk7CisgICAgICAgICAgICBjb25zdCBQcmVmaXhUcmVlRWRnZSYgZWRn
ZSA9IHN0YWNrW2ldLT5lZGdlcy5sYXN0KCk7CisgICAgICAgICAgICBwcmVmaXhFbmQgPSBlZGdl
LnRlcm0uZ2VuZXJhdGVHcmFwaChuZmEsIHByZWZpeEVuZCwgZWRnZS5jaGlsZC0+ZmluYWxBY3Rp
b25zKTsKKyAgICAgICAgfQorICAgICAgICAvLyBQdXQgdGhlIG5vbi1xdWFudGlmaWVkIHZlcnRp
Y2VzIGluIHRoZSBzdWJ0cmVlIGludG8gdGhlIE5GQSBhbmQgZGVsZXRlIHRoZW0uCisgICAgICAg
IEFTU0VSVChzdGFjay5sYXN0KCkpOworICAgICAgICBnZW5lcmF0ZU5GQUZvclN1YnRyZWUobmZh
LCBwcmVmaXhFbmQsICpzdGFjay5sYXN0KCkpOworICAgICAgICAKKyAgICAgICAgaGFuZGxlcihX
VEY6Om1vdmUobmZhKSk7CisgICAgICAgIAorICAgICAgICAvLyBDbGVhbiB1cCBhbnkgcHJvY2Vz
c2VkIGxlYWYgbm9kZXMuCisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBpZiAo
c3RhY2suc2l6ZSgpID4gMSkgeworICAgICAgICAgICAgICAgIGlmIChzdGFjay5sYXN0KCktPmVk
Z2VzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICBzdGFja1tzdGFjay5zaXplKCkg
LSAyXS0+ZWRnZXMucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgICAgICAgICBzdGFjay5yZW1v
dmVMYXN0KCk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOyAvLyBWZXJ0ZXggaXMgbm90IGEgbGVhZi4KKyAgICAgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgICAgIGJyZWFrOyAvLyBMZWF2ZSB0aGUgZW1wdHkgcm9vdC4KICAgICAgICAgfQotCi0g
ICAgICAgIC8vIFdlIGhhdmUgcHJvY2Vzc2VkIGFsbCB0aGUgc3VidHJlZXMgb2YgdGhpcyBsZXZl
bCwgcG9wIHRoZSBzdGFjayBhbmQgbW92ZSBvbiB0byB0aGUgbmV4dCBzaWJsaW5nLgotICAgICAg
ICBhY3RpdmVTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIGlmIChhY3RpdmVTdGFjay5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgKythY3RpdmVTdGFjay5sYXN0KCku
aXRlcmF0b3I7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9Db21iaW5lZFVSTEZpbHRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVSTEZpbHRlcnMuaAkocmV2aXNpb24gMTgzNjc3KQor
KysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29tYmluZWRVUkxGaWx0ZXJzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRQ
YXR0ZXJuKHVpbnQ2NF90IHBhdHRlcm5JZCwgY29uc3QgVmVjdG9yPFRlcm0+JiBwYXR0ZXJuKTsK
IAotICAgIHZvaWQgcHJvY2Vzc05GQXMoc3RkOjpmdW5jdGlvbjx2b2lkKE5GQSYmKT4gaGFuZGxl
cikgY29uc3Q7CisgICAgdm9pZCBwcm9jZXNzTkZBcyhzdGQ6OmZ1bmN0aW9uPHZvaWQoTkZBJiYp
PiBoYW5kbGVyKTsKICAgICB2b2lkIGNsZWFyKCk7CiAKICNpZiBDT05URU5UX0VYVEVOU0lPTlNf
UEVSRk9STUFOQ0VfUkVQT1JUSU5HCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9Db250ZW50RXh0ZW5zaW9uc0RlYnVnZ2luZy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zRGVidWdnaW5nLmgJKHJl
dmlzaW9uIDE4MzY2NykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRl
bnRFeHRlbnNpb25zRGVidWdnaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAK
IAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAKLSNkZWZpbmUgQ09OVEVOVF9FWFRF
TlNJT05TX1NUQVRFX01BQ0hJTkVfREVCVUdHSU5HIDAKKyNkZWZpbmUgQ09OVEVOVF9FWFRFTlNJ
T05TX1NUQVRFX01BQ0hJTkVfREVCVUdHSU5HIDEKIAogI2RlZmluZSBDT05URU5UX0VYVEVOU0lP
TlNfUEVSRk9STUFOQ0VfUkVQT1JUSU5HIDAKIApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvVGVybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL1Rlcm0uaAkocmV2aXNpb24gMTgzNjc3KQorKysgU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvVGVybS5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIGV4dGVuZEdyb3VwU3VicGF0dGVybihjb25zdCBUZXJtJik7CiAKICAg
ICB2b2lkIHF1YW50aWZ5KGNvbnN0IEF0b21RdWFudGlmaWVyJik7CisgICAgQXRvbVF1YW50aWZp
ZXIgcXVhbnRpdHkoKSBjb25zdCB7IHJldHVybiBtX3F1YW50aWZpZXI7IH0KIAogICAgIHVuc2ln
bmVkIGdlbmVyYXRlR3JhcGgoTkZBJiwgdW5zaWduZWQgc3RhcnQsIGNvbnN0IEFjdGlvbkxpc3Qm
IGZpbmFsQWN0aW9ucykgY29uc3Q7CiAKQEAgLTEwOCw2ICsxMDksNyBAQCBwdWJsaWM6CiAKICAg
ICBib29sIGlzRW1wdHlWYWx1ZSgpIGNvbnN0OwogICAgIGJvb2wgaXNEZWxldGVkVmFsdWUoKSBj
b25zdDsKKyAgICB2b2lkIGRlc3Ryb3koKTsKIAogI2lmIENPTlRFTlRfRVhURU5TSU9OU19TVEFU
RV9NQUNISU5FX0RFQlVHR0lORwogICAgIFN0cmluZyB0b1N0cmluZygpIGNvbnN0OwpAQCAtMTIw
LDggKzEyMiw2IEBAIHByaXZhdGU6CiAKICAgICB1bnNpZ25lZCBnZW5lcmF0ZVN1YmdyYXBoRm9y
QXRvbShORkEmLCB1bnNpZ25lZCBzb3VyY2UpIGNvbnN0OwogCi0gICAgdm9pZCBkZXN0cm95KCk7
Ci0KICAgICBlbnVtIGNsYXNzIFRlcm1UeXBlIDogdWludDhfdCB7CiAgICAgICAgIEVtcHR5LAog
ICAgICAgICBEZWxldGVkLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252260</attachid>
            <date>2015-05-02 23:31:42 -0700</date>
            <delta_ts>2015-05-02 23:38:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144485-20150502233029.patch</filename>
            <type>text/plain</type>
            <size>20132</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzcyNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE1LTA1LTAyICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gQ29tYmluZSBORkFzIHByb3Blcmx5IGFuZCBmcmVlIG1lbW9yeSBhcyB3ZSBj
b21waWxlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQ0NDg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBjb3JyZWN0bHkgY29tYmluZXMgYWxsIHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2l0
aCBhIGNvbW1vbiBwcmVmaXggdXAgdG8KKyAgICAgICAgdGhlIGxhc3QgcXVhbnRpZmllZCB0ZXJt
IGludG8gdGhlIHNhbWUgTkZBLiAgSXQgYWxzbyBkZWxldGVzIHRoZSBwcmVmaXggdHJlZSBhcyBp
dAorICAgICAgICBjcmVhdGVzIE5GQXMsIHJlZHVjaW5nIHRoZSBtYXhpbXVtIG1lbW9yeSB1c2Vk
IHdoZW4gY29tcGlsaW5nLgorCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29tYmluZWRV
UkxGaWx0ZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb21i
aW5lZFVSTEZpbHRlcnM6OmFkZFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OmdlbmVyYXRlTkZBRm9yU3VidHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6Q29tYmluZWRVUkxGaWx0ZXJzOjpwcm9jZXNzTkZBcyk6CisgICAgICAg
ICogY29udGVudGV4dGVuc2lvbnMvQ29tYmluZWRVUkxGaWx0ZXJzLmg6CisgICAgICAgICogY29u
dGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNEZWJ1Z2dpbmcuaDoKKwogMjAxNS0wNS0w
MiAgR3l1eW91bmcgS2ltICA8Z3l1eW91bmcua2ltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFB1
cmdlIFBhc3NSZWZQdHIgY3JlYXRlKCkgZmFjdG9yeSBmdW5jdGlvbnMgaW4gaHRtbCAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbWJpbmVkVVJMRmlsdGVycy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29tYmluZWRV
UkxGaWx0ZXJzLmNwcAkocmV2aXNpb24gMTgzNjc3KQorKysgU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvQ29tYmluZWRVUkxGaWx0ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcs
NyArNDcsNiBAQCB0eXBlZGVmIFZlY3RvcjxQcmVmaXhUcmVlRWRnZSwgMCwgV1RGOjpDCiBzdHJ1
Y3QgUHJlZml4VHJlZVZlcnRleCB7CiAgICAgUHJlZml4VHJlZUVkZ2VzIGVkZ2VzOwogICAgIEFj
dGlvbkxpc3QgZmluYWxBY3Rpb25zOwotICAgIGJvb2wgaW5WYXJpYWJsZUxlbmd0aFByZWZpeCB7
IGZhbHNlIH07CiB9OwogCiAjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1BFUkZPUk1BTkNFX1JFUE9S
VElORwpAQCAtMTI4LDEzICsxMjcsOCBAQCB2b2lkIENvbWJpbmVkVVJMRmlsdGVyczo6YWRkUGF0
dGVybih1aW50CiAgICAgaWYgKHBhdHRlcm4uaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBWZWN0b3I8UHJlZml4VHJlZVZlcnRleCosIDEyOD4gcHJlZml4VHJlZVZlcnRpY2VzRm9y
UGF0dGVybjsKLSAgICBwcmVmaXhUcmVlVmVydGljZXNGb3JQYXR0ZXJuLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkocGF0dGVybi5zaXplKCkgKyAxKTsKLQogICAgIC8vIEV4dGVuZCB0aGUgcHJlZml4
IHRyZWUgd2l0aCB0aGUgbmV3IHBhdHRlcm4uCi0gICAgYm9vbCBoYXNOZXdUZXJtID0gZmFsc2U7
CiAgICAgUHJlZml4VHJlZVZlcnRleCogbGFzdFByZWZpeFRyZWUgPSBtX3ByZWZpeFRyZWVSb290
LmdldCgpOwotICAgIHByZWZpeFRyZWVWZXJ0aWNlc0ZvclBhdHRlcm4uYXBwZW5kKGxhc3RQcmVm
aXhUcmVlKTsKIAogICAgIGZvciAoY29uc3QgVGVybSYgdGVybSA6IHBhdHRlcm4pIHsKICAgICAg
ICAgc2l6ZV90IG5leHRFbnRyeUluZGV4ID0gV1RGOjpub3RGb3VuZDsKQEAgLTE0NywxMjkgKzE0
MSwxMzIgQEAgdm9pZCBDb21iaW5lZFVSTEZpbHRlcnM6OmFkZFBhdHRlcm4odWludAogICAgICAg
ICBpZiAobmV4dEVudHJ5SW5kZXggIT0gV1RGOjpub3RGb3VuZCkKICAgICAgICAgICAgIGxhc3RQ
cmVmaXhUcmVlID0gbGFzdFByZWZpeFRyZWUtPmVkZ2VzW25leHRFbnRyeUluZGV4XS5jaGlsZC5n
ZXQoKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBoYXNOZXdUZXJtID0gdHJ1ZTsKLQog
ICAgICAgICAgICAgbGFzdFByZWZpeFRyZWUtPmVkZ2VzLmFwcGVuZChQcmVmaXhUcmVlRWRnZSh7
dGVybSwgc3RkOjptYWtlX3VuaXF1ZTxQcmVmaXhUcmVlVmVydGV4PigpfSkpOwogICAgICAgICAg
ICAgbGFzdFByZWZpeFRyZWUgPSBsYXN0UHJlZml4VHJlZS0+ZWRnZXMubGFzdCgpLmNoaWxkLmdl
dCgpOwogICAgICAgICB9Ci0gICAgICAgIHByZWZpeFRyZWVWZXJ0aWNlc0ZvclBhdHRlcm4uYXBw
ZW5kKGxhc3RQcmVmaXhUcmVlKTsKICAgICB9CiAKLSAgICBBY3Rpb25MaXN0JiBhY3Rpb25zID0g
cHJlZml4VHJlZVZlcnRpY2VzRm9yUGF0dGVybi5sYXN0KCktPmZpbmFsQWN0aW9uczsKKyAgICBB
Y3Rpb25MaXN0JiBhY3Rpb25zID0gbGFzdFByZWZpeFRyZWUtPmZpbmFsQWN0aW9uczsKICAgICBp
ZiAoYWN0aW9ucy5maW5kKGFjdGlvbklkKSA9PSBXVEY6Om5vdEZvdW5kKQogICAgICAgICBhY3Rp
b25zLmFwcGVuZChhY3Rpb25JZCk7Ci0KLSAgICBpZiAoIWhhc05ld1Rlcm0pCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGJvb2wgaGFzU2VlblZhcmlhYmxlTGVuZ3RoVGVybXMgPSBmYWxzZTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBwYXR0ZXJuLnNpemUoKTsgaS0tOykgewotICAgICAgICBjb25z
dCBUZXJtJiB0ZXJtID0gcGF0dGVybltpXTsKLSAgICAgICAgaGFzU2VlblZhcmlhYmxlTGVuZ3Ro
VGVybXMgfD0gIXRlcm0uaGFzRml4ZWRMZW5ndGgoKTsKLSAgICAgICAgcHJlZml4VHJlZVZlcnRp
Y2VzRm9yUGF0dGVybltpICsgMV0tPmluVmFyaWFibGVMZW5ndGhQcmVmaXggfD0gaGFzU2VlblZh
cmlhYmxlTGVuZ3RoVGVybXM7Ci0gICAgfQotICAgIHByZWZpeFRyZWVWZXJ0aWNlc0ZvclBhdHRl
cm5bMF0tPmluVmFyaWFibGVMZW5ndGhQcmVmaXggfD0gaGFzU2VlblZhcmlhYmxlTGVuZ3RoVGVy
bXM7CiB9CiAKLXN0cnVjdCBBY3RpdmVTdWJ0cmVlIHsKLSAgICBjb25zdCBQcmVmaXhUcmVlVmVy
dGV4KiB2ZXJ0ZXg7Ci0gICAgUHJlZml4VHJlZUVkZ2VzOjpjb25zdF9pdGVyYXRvciBpdGVyYXRv
cjsKLX07Ci0KLXN0YXRpYyB2b2lkIGdlbmVyYXRlTkZBRm9yU3VidHJlZShORkEmIG5mYSwgdW5z
aWduZWQgcm9vdElkLCBjb25zdCBQcmVmaXhUcmVlVmVydGV4JiBwcmVmaXhUcmVlVmVydGV4KQor
c3RhdGljIHZvaWQgZ2VuZXJhdGVORkFGb3JTdWJ0cmVlKE5GQSYgbmZhLCB1bnNpZ25lZCBuZmFS
b290SWQsIFByZWZpeFRyZWVWZXJ0ZXgmIHJvb3QpCiB7Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FH
RSghcHJlZml4VHJlZVZlcnRleC5pblZhcmlhYmxlTGVuZ3RoUHJlZml4LCAiVGhpcyBjb2RlIGFz
c3VtZXMgdGhlIHN1YnRyZWVzIHdpdGggdmFyaWFibGUgcHJlZml4IGxlbmd0aCBoYXZlIGFscmVh
ZHkgYmVlbiBoYW5kbGVkLiIpOwotCi0gICAgc3RydWN0IEFjdGl2ZU5GQVN1YnRyZWUgOiBBY3Rp
dmVTdWJ0cmVlIHsKLSAgICAgICAgQWN0aXZlTkZBU3VidHJlZShjb25zdCBQcmVmaXhUcmVlVmVy
dGV4KiB2ZXJ0ZXgsIFByZWZpeFRyZWVFZGdlczo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3IsIHVu
c2lnbmVkIG5vZGVJbmRleCkKLSAgICAgICAgICAgIDogQWN0aXZlU3VidHJlZSh7IHZlcnRleCwg
aXRlcmF0b3IgfSkKLSAgICAgICAgICAgICwgbGFzdE5vZGVJbmRleChub2RlSW5kZXgpCi0gICAg
ICAgIHsKLSAgICAgICAgfQotICAgICAgICB1bnNpZ25lZCBsYXN0Tm9kZUluZGV4OworICAgIC8q
CisgICAgLy8gTm9uLXJlY3Vyc2l2ZSBmb3JtIG9mIHRoaXM6CisgICAgZm9yIChhdXRvJiBlZGdl
IDogcm9vdC5lZGdlcykgeworICAgICAgICBpZiAoIWVkZ2UudGVybS5oYXNGaXhlZExlbmd0aCgp
KQorICAgICAgICAgICAgY29udGludWU7IC8vIFRoaXMgd2lsbCBiZSBhIHBhcnQgb2YgYW5vdGhl
ciBORkEuCisgICAgICAgIHVuc2lnbmVkIHN1YnRyZWVSb290SWQgPSBlZGdlLnRlcm0uZ2VuZXJh
dGVHcmFwaChuZmEsIG5mYVJvb3RJZCwgZWRnZS5jaGlsZC0+ZmluYWxBY3Rpb25zKTsKKyAgICAg
ICAgZ2VuZXJhdGVORkFGb3JTdWJ0cmVlKG5mYSwgc3VidHJlZVJvb3RJZCwgKmVkZ2UuY2hpbGQu
Z2V0KCkpOworICAgICAgICBpZiAoZWRnZS5jaGlsZC0+ZWRnZXMuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgZWRnZS50ZXJtID0gVGVybShUZXJtOjpEZWxldGVkVmFsdWUpOyAvLyBNYXJrIHRoaXMg
bGVhZiBmb3IgZGVsZXRpbmcuCisgICAgfQorICAgIHJvb3QuZWRnZXMucmVtb3ZlQWxsTWF0Y2hp
bmcoW10oUHJlZml4VHJlZUVkZ2UmIGVkZ2UpCisgICAgeworICAgICAgICByZXR1cm4gZWRnZS50
ZXJtLmlzRGVsZXRlZFZhbHVlKCk7CisgICAgfSk7CisgICAgKi8KKyAgICAKKyAgICBzdHJ1Y3Qg
QWN0aXZlU3VidHJlZSB7CisgICAgICAgIFByZWZpeFRyZWVWZXJ0ZXgqIHZlcnRleDsKKyAgICAg
ICAgdW5zaWduZWQgcm9vdElkOworICAgICAgICB1bnNpZ25lZCBlZGdlSW5kZXg7CiAgICAgfTsK
LQotICAgIFZlY3RvcjxBY3RpdmVORkFTdWJ0cmVlPiBhY3RpdmVTdGFjazsKLSAgICBhY3RpdmVT
dGFjay5hcHBlbmQoQWN0aXZlTkZBU3VidHJlZSgmcHJlZml4VHJlZVZlcnRleCwgcHJlZml4VHJl
ZVZlcnRleC5lZGdlcy5iZWdpbigpLCByb290SWQpKTsKLQotICAgIHdoaWxlICh0cnVlKSB7Ci0g
ICAgUHJvY2Vzc1N1YnRyZWU6Ci0gICAgICAgIGZvciAoQWN0aXZlTkZBU3VidHJlZSYgYWN0aXZl
U3VidHJlZSA9IGFjdGl2ZVN0YWNrLmxhc3QoKTsgYWN0aXZlU3VidHJlZS5pdGVyYXRvciAhPSBh
Y3RpdmVTdWJ0cmVlLnZlcnRleC0+ZWRnZXMuZW5kKCk7ICsrYWN0aXZlU3VidHJlZS5pdGVyYXRv
cikgewotICAgICAgICAgICAgaWYgKGFjdGl2ZVN1YnRyZWUuaXRlcmF0b3ItPmNoaWxkLT5pblZh
cmlhYmxlTGVuZ3RoUHJlZml4KQorICAgIFZlY3RvcjxBY3RpdmVTdWJ0cmVlPiBzdGFjazsKKyAg
ICBpZiAoIXJvb3QuZWRnZXMuaXNFbXB0eSgpKQorICAgICAgICBzdGFjay5hcHBlbmQoQWN0aXZl
U3VidHJlZSh7JnJvb3QsIG5mYVJvb3RJZCwgMH0pKTsKKyAgICAKKyAgICAvLyBHZW5lcmF0ZSBn
cmFwaHMgZm9yIGVhY2ggc3VidHJlZSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gYW55IHF1YW50aWZp
ZXJzLgorICAgIHdoaWxlICghc3RhY2suaXNFbXB0eSgpKSB7CisgICAgICAgIFByZWZpeFRyZWVW
ZXJ0ZXgqIHZlcnRleCA9IHN0YWNrLmxhc3QoKS52ZXJ0ZXg7CisgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGVkZ2VJbmRleCA9IHN0YWNrLmxhc3QoKS5lZGdlSW5kZXg7CisKKyAgICAgICAgQVNTRVJU
KHZlcnRleCk7CisgICAgICAgIGlmIChlZGdlSW5kZXggPj0gdmVydGV4LT5lZGdlcy5zaXplKCkp
IHsKKyAgICAgICAgICAgIEFTU0VSVChlZGdlSW5kZXggPT0gdmVydGV4LT5lZGdlcy5zaXplKCkp
OworICAgICAgICAgICAgdmVydGV4LT5lZGdlcy5yZW1vdmVBbGxNYXRjaGluZyhbXShQcmVmaXhU
cmVlRWRnZSYgZWRnZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWRn
ZS50ZXJtLmlzRGVsZXRlZFZhbHVlKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHN0
YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIGlmICghc3RhY2suaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICAgICAgYXV0byYgZWRnZSA9IHN0YWNrLmxhc3QoKS52ZXJ0ZXgtPmVkZ2VzW3N0
YWNrLmxhc3QoKS5lZGdlSW5kZXhdOworICAgICAgICAgICAgICAgIGlmIChlZGdlLmNoaWxkLT5l
ZGdlcy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIGVkZ2UudGVybSA9IFRlcm0oVGVy
bTo6RGVsZXRlZFZhbHVlKTsgLy8gTWFyayB0aGlzIGxlYWYgZm9yIGRlbGV0aW5nLgorICAgICAg
ICAgICAgICAgIHN0YWNrLmxhc3QoKS5lZGdlSW5kZXgrKzsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8mIGVkZ2UgPSB2ZXJ0ZXgtPmVkZ2VzW2VkZ2VJ
bmRleF07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFF1YW50aWZpZWQgZWRnZXMgaW4g
dGhlIHN1YnRyZWUgd2lsbCBiZSBhIHBhcnQgb2YgYW5vdGhlciBORkEuCisgICAgICAgICAgICBp
ZiAoIWVkZ2UudGVybS5oYXNGaXhlZExlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgc3RhY2su
bGFzdCgpLmVkZ2VJbmRleCsrOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
ICAgICBjb25zdCBUZXJtJiB0ZXJtID0gYWN0aXZlU3VidHJlZS5pdGVyYXRvci0+dGVybTsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIG5ld0VuZE5vZGVJbmRleCA9IHRlcm0uZ2VuZXJhdGVHcmFwaChu
ZmEsIGFjdGl2ZVN1YnRyZWUubGFzdE5vZGVJbmRleCwgYWN0aXZlU3VidHJlZS5pdGVyYXRvci0+
Y2hpbGQtPmZpbmFsQWN0aW9ucyk7Ci0KLSAgICAgICAgICAgIFByZWZpeFRyZWVWZXJ0ZXgqIHBy
ZWZpeFRyZWVWZXJ0ZXggPSBhY3RpdmVTdWJ0cmVlLml0ZXJhdG9yLT5jaGlsZC5nZXQoKTsKLSAg
ICAgICAgICAgIGlmICghcHJlZml4VHJlZVZlcnRleC0+ZWRnZXMuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgICAgICAgICAgYWN0aXZlU3RhY2suYXBwZW5kKEFjdGl2ZU5GQVN1YnRyZWUocHJlZml4VHJl
ZVZlcnRleCwgcHJlZml4VHJlZVZlcnRleC0+ZWRnZXMuYmVnaW4oKSwgbmV3RW5kTm9kZUluZGV4
KSk7Ci0gICAgICAgICAgICAgICAgZ290byBQcm9jZXNzU3VidHJlZTsKICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgdW5zaWduZWQgc3VidHJlZVJvb3RJZCA9IGVkZ2Uu
dGVybS5nZW5lcmF0ZUdyYXBoKG5mYSwgc3RhY2subGFzdCgpLnJvb3RJZCwgZWRnZS5jaGlsZC0+
ZmluYWxBY3Rpb25zKTsKKyAgICAgICAgICAgIHN0YWNrLmFwcGVuZChBY3RpdmVTdWJ0cmVlKHtl
ZGdlLmNoaWxkLmdldCgpLCBzdWJ0cmVlUm9vdElkLCAwfSkpOwogICAgICAgICB9Ci0KLSAgICAg
ICAgYWN0aXZlU3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICBpZiAoYWN0aXZlU3RhY2suaXNF
bXB0eSgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICsrYWN0aXZlU3RhY2subGFzdCgp
Lml0ZXJhdG9yOwogICAgIH0KIH0KIAotdm9pZCBDb21iaW5lZFVSTEZpbHRlcnM6OnByb2Nlc3NO
RkFzKHN0ZDo6ZnVuY3Rpb248dm9pZChORkEmJik+IGhhbmRsZXIpIGNvbnN0Cit2b2lkIENvbWJp
bmVkVVJMRmlsdGVyczo6cHJvY2Vzc05GQXMoc3RkOjpmdW5jdGlvbjx2b2lkKE5GQSYmKT4gaGFu
ZGxlcikKIHsKLSAgICBWZWN0b3I8QWN0aXZlU3VidHJlZT4gYWN0aXZlU3RhY2s7Ci0gICAgYWN0
aXZlU3RhY2suYXBwZW5kKEFjdGl2ZVN1YnRyZWUoeyBtX3ByZWZpeFRyZWVSb290LmdldCgpLCBt
X3ByZWZpeFRyZWVSb290LT5lZGdlcy5iZWdpbigpIH0pKTsKLQorI2lmIENPTlRFTlRfRVhURU5T
SU9OU19TVEFURV9NQUNISU5FX0RFQlVHR0lORworICAgIHByaW50KCk7CisjZW5kaWYKICAgICB3
aGlsZSAodHJ1ZSkgewotICAgIFByb2Nlc3NTdWJ0cmVlOgotICAgICAgICBBY3RpdmVTdWJ0cmVl
JiBhY3RpdmVTdWJ0cmVlID0gYWN0aXZlU3RhY2subGFzdCgpOwotCi0gICAgICAgIC8vIFdlIGdv
IGRlcHRoIGZpcnN0IGludG8gdGhlIHN1YnRyZWVzIHdpdGggdmFyaWFibGUgcHJlZml4LiBGaW5k
IHRoZSBuZXh0IHN1YnRyZWUuCi0gICAgICAgIGZvciAoOyBhY3RpdmVTdWJ0cmVlLml0ZXJhdG9y
ICE9IGFjdGl2ZVN1YnRyZWUudmVydGV4LT5lZGdlcy5lbmQoKTsgKythY3RpdmVTdWJ0cmVlLml0
ZXJhdG9yKSB7Ci0gICAgICAgICAgICBQcmVmaXhUcmVlVmVydGV4KiBwcmVmaXhUcmVlVmVydGV4
ID0gYWN0aXZlU3VidHJlZS5pdGVyYXRvci0+Y2hpbGQuZ2V0KCk7Ci0gICAgICAgICAgICBpZiAo
cHJlZml4VHJlZVZlcnRleC0+aW5WYXJpYWJsZUxlbmd0aFByZWZpeCkgewotICAgICAgICAgICAg
ICAgIGFjdGl2ZVN0YWNrLmFwcGVuZChBY3RpdmVTdWJ0cmVlKHsgcHJlZml4VHJlZVZlcnRleCwg
cHJlZml4VHJlZVZlcnRleC0+ZWRnZXMuYmVnaW4oKSB9KSk7Ci0gICAgICAgICAgICAgICAgZ290
byBQcm9jZXNzU3VidHJlZTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgLy8gVHJhdmVyc2Ugb3V0
IHRvIGEgbGVhZi4KKyAgICAgICAgVmVjdG9yPFByZWZpeFRyZWVWZXJ0ZXgqLCAxMjg+IHN0YWNr
OworICAgICAgICBBU1NFUlQobV9wcmVmaXhUcmVlUm9vdCk7CisgICAgICAgIFByZWZpeFRyZWVW
ZXJ0ZXgqIHZlcnRleCA9IG1fcHJlZml4VHJlZVJvb3QuZ2V0KCk7CisgICAgICAgIHdoaWxlICh0
cnVlKSB7CisgICAgICAgICAgICBzdGFjay5hcHBlbmQodmVydGV4KTsKKyAgICAgICAgICAgIGlm
ICh2ZXJ0ZXgtPmVkZ2VzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIHZlcnRleCA9IHZlcnRleC0+ZWRnZXMubGFzdCgpLmNoaWxkLmdldCgpOwogICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gQWZ0ZXIgd2UgcmVhY2hlZCBoZXJlLCB3ZSBrbm93IHRoYXQgYWxs
IHRoZSBzdWJ0cmVlcyB3aXRoIHZhcmlhYmxlIHByZWZpeGVzIGhhdmUgYmVlbiBwcm9jZXNzZWQs
Ci0gICAgICAgIC8vIHRpbWUgdG8gZ2VuZXJhdGUgdGhlIE5GQSBmb3IgdGhlIGdyYXBoIHJvb3Rl
ZCBoZXJlLgotICAgICAgICBib29sIG5lZWRUb0dlbmVyYXRlID0gYWN0aXZlU3VidHJlZS52ZXJ0
ZXgtPmVkZ2VzLmlzRW1wdHkoKSAmJiAhYWN0aXZlU3VidHJlZS52ZXJ0ZXgtPmZpbmFsQWN0aW9u
cy5pc0VtcHR5KCk7Ci0gICAgICAgIGlmICghbmVlZFRvR2VuZXJhdGUpIHsKLSAgICAgICAgICAg
IGZvciAoY29uc3QgYXV0byYgZWRnZSA6IGFjdGl2ZVN1YnRyZWUudmVydGV4LT5lZGdlcykgewot
ICAgICAgICAgICAgICAgIGlmICghZWRnZS5jaGlsZC0+aW5WYXJpYWJsZUxlbmd0aFByZWZpeCkg
ewotICAgICAgICAgICAgICAgICAgICBuZWVkVG9HZW5lcmF0ZSA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAg
ICAgaWYgKHN0YWNrLnNpemUoKSA9PSAxKQorICAgICAgICAgICAgYnJlYWs7IC8vIFdlJ3JlIGRv
bmUgb25jZSB3ZSBoYXZlIHByb2Nlc3NlZCBhbmQgcmVtb3ZlZCBhbGwgdGhlIGVkZ2VzIGluIHRo
ZSBwcmVmaXggdHJlZS4KKyAgICAgICAgCisgICAgICAgIC8vIEZpbmQgdGhlIHByZWZpeCByb290
IGZvciB0aGlzIE5GQS4gVGhpcyBpcyB0aGUgdmVydGV4IGFmdGVyIHRoZSBsYXN0IHRlcm0gd2l0
aCBhIHF1YW50aWZpZXIgaWYgdGhlcmUgaXMgb25lLAorICAgICAgICAvLyBvciB0aGUgcm9vdCBp
ZiB0aGVyZSBhcmUgbm8gcXVhbnRpZmllcnMgbGVmdC4KKyAgICAgICAgd2hpbGUgKHN0YWNrLnNp
emUoKSA+IDEpIHsKKyAgICAgICAgICAgIGlmICghc3RhY2tbc3RhY2suc2l6ZSgpIC0gMl0tPmVk
Z2VzLmxhc3QoKS50ZXJtLmhhc0ZpeGVkTGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBzdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgIH0KLQotICAgICAgICBp
ZiAobmVlZFRvR2VuZXJhdGUpIHsKLSAgICAgICAgICAgIE5GQSBuZmE7Ci0KLSAgICAgICAgICAg
IHVuc2lnbmVkIHByZWZpeEVuZCA9IG5mYS5yb290KCk7Ci0KLSAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBhY3RpdmVTdGFjay5zaXplKCkgLSAxOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICBjb25zdCBUZXJtJiB0ZXJtID0gYWN0aXZlU3RhY2tbaV0uaXRlcmF0b3ItPnRlcm07
Ci0gICAgICAgICAgICAgICAgcHJlZml4RW5kID0gdGVybS5nZW5lcmF0ZUdyYXBoKG5mYSwgcHJl
Zml4RW5kLCBhY3RpdmVTdGFja1tpXS5pdGVyYXRvci0+Y2hpbGQtPmZpbmFsQWN0aW9ucyk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgZWRnZSA6IGFjdGl2
ZVN1YnRyZWUudmVydGV4LT5lZGdlcykgewotICAgICAgICAgICAgICAgIGlmICghZWRnZS5jaGls
ZC0+aW5WYXJpYWJsZUxlbmd0aFByZWZpeCkgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBuZXdTdWJ0cmVlU3RhcnQgPSBlZGdlLnRlcm0uZ2VuZXJhdGVHcmFwaChuZmEsIHByZWZpeEVu
ZCwgZWRnZS5jaGlsZC0+ZmluYWxBY3Rpb25zKTsKLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJh
dGVORkFGb3JTdWJ0cmVlKG5mYSwgbmV3U3VidHJlZVN0YXJ0LCAqZWRnZS5jaGlsZCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBo
YW5kbGVyKFdURjo6bW92ZShuZmEpKTsKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghc3Rh
Y2suaXNFbXB0eSgpLCAiQXQgbGVhc3QgdGhlIHJvb3Qgc2hvdWxkIGJlIGluIHRoZSBzdGFjayIp
OworICAgICAgICAKKyAgICAgICAgLy8gTWFrZSBhbiBORkEgd2l0aCB0aGUgc3VidHJlZXMgZm9y
IHdob20gdGhpcyBpcyBhbHNvIHRoZSBsYXN0IHF1YW50aWZpZXIgKG9yIHdobyBhbHNvIGhhdmUg
bm8gcXVhbnRpZmllcikuCisgICAgICAgIE5GQSBuZmE7CisgICAgICAgIC8vIFB1dCB0aGUgcHJl
Zml4IGludG8gdGhlIE5GQS4KKyAgICAgICAgdW5zaWduZWQgcHJlZml4RW5kID0gbmZhLnJvb3Qo
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YWNrLnNpemUoKSAtIDE7ICsr
aSkgeworICAgICAgICAgICAgQVNTRVJUKCFzdGFja1tpXS0+ZWRnZXMuaXNFbXB0eSgpKTsKKyAg
ICAgICAgICAgIGNvbnN0IFByZWZpeFRyZWVFZGdlJiBlZGdlID0gc3RhY2tbaV0tPmVkZ2VzLmxh
c3QoKTsKKyAgICAgICAgICAgIHByZWZpeEVuZCA9IGVkZ2UudGVybS5nZW5lcmF0ZUdyYXBoKG5m
YSwgcHJlZml4RW5kLCBlZGdlLmNoaWxkLT5maW5hbEFjdGlvbnMpOworICAgICAgICB9CisgICAg
ICAgIC8vIFB1dCB0aGUgbm9uLXF1YW50aWZpZWQgdmVydGljZXMgaW4gdGhlIHN1YnRyZWUgaW50
byB0aGUgTkZBIGFuZCBkZWxldGUgdGhlbS4KKyAgICAgICAgQVNTRVJUKHN0YWNrLmxhc3QoKSk7
CisgICAgICAgIGdlbmVyYXRlTkZBRm9yU3VidHJlZShuZmEsIHByZWZpeEVuZCwgKnN0YWNrLmxh
c3QoKSk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogQ29tYmluZSBzbWFsbCBORkFzIHRv
IHJlZHVjZSB0aGUgbnVtYmVyIG9mIE5GQXMuCisgICAgICAgIGhhbmRsZXIoV1RGOjptb3ZlKG5m
YSkpOworICAgICAgICAKKyAgICAgICAgLy8gQ2xlYW4gdXAgYW55IHByb2Nlc3NlZCBsZWFmIG5v
ZGVzLgorICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgaWYgKHN0YWNrLnNpemUo
KSA+IDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3RhY2subGFzdCgpLT5lZGdlcy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhY2tbc3RhY2suc2l6ZSgpIC0gMl0tPmVkZ2Vz
LnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhY2sucmVtb3ZlTGFzdCgpOwor
ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gVmVy
dGV4IGlzIG5vdCBhIGxlYWYuCisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBi
cmVhazsgLy8gTGVhdmUgdGhlIGVtcHR5IHJvb3QuCiAgICAgICAgIH0KLQotICAgICAgICAvLyBX
ZSBoYXZlIHByb2Nlc3NlZCBhbGwgdGhlIHN1YnRyZWVzIG9mIHRoaXMgbGV2ZWwsIHBvcCB0aGUg
c3RhY2sgYW5kIG1vdmUgb24gdG8gdGhlIG5leHQgc2libGluZy4KLSAgICAgICAgYWN0aXZlU3Rh
Y2sucmVtb3ZlTGFzdCgpOwotICAgICAgICBpZiAoYWN0aXZlU3RhY2suaXNFbXB0eSgpKQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICsrYWN0aXZlU3RhY2subGFzdCgpLml0ZXJhdG9yOwog
ICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29tYmlu
ZWRVUkxGaWx0ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvQ29tYmluZWRVUkxGaWx0ZXJzLmgJKHJldmlzaW9uIDE4MzY3NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbWJpbmVkVVJMRmlsdGVycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRkUGF0dGVybih1aW50
NjRfdCBwYXR0ZXJuSWQsIGNvbnN0IFZlY3RvcjxUZXJtPiYgcGF0dGVybik7CiAKLSAgICB2b2lk
IHByb2Nlc3NORkFzKHN0ZDo6ZnVuY3Rpb248dm9pZChORkEmJik+IGhhbmRsZXIpIGNvbnN0Owor
ICAgIHZvaWQgcHJvY2Vzc05GQXMoc3RkOjpmdW5jdGlvbjx2b2lkKE5GQSYmKT4gaGFuZGxlcik7
CiAgICAgdm9pZCBjbGVhcigpOwogCiAjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1BFUkZPUk1BTkNF
X1JFUE9SVElORwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVu
dEV4dGVuc2lvbnNEZWJ1Z2dpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0RlYnVnZ2luZy5oCShyZXZpc2lvbiAxODM2
NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9u
c0RlYnVnZ2luZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAjZGVmaW5lIENP
TlRFTlRfRVhURU5TSU9OU19QQUdFX1NJWkUgMTYzODQKIAogI2lmIENPTlRFTlRfRVhURU5TSU9O
U19QRVJGT1JNQU5DRV9SRVBPUlRJTkcKLSNkZWZpbmUgTE9HX0xBUkdFX1NUUlVDVFVSRVMobmFt
ZSwgc2l6ZSkgaWYgKHNpemUgPiAxMDAwMDAwKSB7IGRhdGFMb2dGKCJOQU1FOiAlcyBTSVpFICVk
IiwgI25hbWUsIChpbnQpKHNpemUpKTsgfTsKKyNkZWZpbmUgTE9HX0xBUkdFX1NUUlVDVFVSRVMo
bmFtZSwgc2l6ZSkgaWYgKHNpemUgPiAxMDAwMDAwKSB7IGRhdGFMb2dGKCJOQU1FOiAlcyBTSVpF
ICVkXG4iLCAjbmFtZSwgKGludCkoc2l6ZSkpOyB9OwogI2Vsc2UKICNkZWZpbmUgTE9HX0xBUkdF
X1NUUlVDVFVSRVMobmFtZSwgc2l6ZSkKICNlbmRpZgpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTgzNzI2KQorKysgVG9vbHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTUtMDUtMDIgIEFs
ZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBbQ29u
dGVudCBFeHRlbnNpb25zXSBDb21iaW5lIE5GQXMgcHJvcGVybHkgYW5kIGZyZWUgbWVtb3J5IGFz
IHdlIGNvbXBpbGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDQ0ODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHA6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUX0YpOgorICAgICAgICBBZGRlZCB0ZXN0cyBm
b3IgY29ycmVjdGx5IHNwbGl0dGluZyB1cCBORkFzIHdpdGggdW5xdWFudGlmaWVkIHRlcm1zIGFm
dGVyIHF1YW50aWZpZWQgdGVybXMuCisgICAgICAgIEFkZGVkIHRlc3RzIGZvciBkZWVwIE5GQXMu
CisKIDIwMTUtMDUtMDEgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtYXJpb0BlbmRsZXNzbS5jb20+
CiAKICAgICAgICAgY2hlY2std2Via2l0LXN0eWxlIGZhaWxzIGR1ZSB0byBzeXN0ZW0gcHlsaW50
CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9D
b250ZW50RXh0ZW5zaW9ucy5jcHAJKHJldmlzaW9uIDE4MzU1NikKKysrIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ5NSwxMCArNDk1LDkgQEAgVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBSZXNvdXJj
ZU9yTAogICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIHtVUkwoVVJMKCksICJodHRwOi8vd2Via2l0
Lm9yZyIpLCBVUkwoVVJMKCksICJodHRwOi8vbm90X3dlYmtpdC5vcmciKSwgUmVzb3VyY2VUeXBl
OjpJbWFnZX0sIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrQ29va2llcywg
Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKIH0KICAgICAKLVRF
U1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgTXVsdGlERkEpCitURVNUX0YoQ29udGVudEV4dGVu
c2lvblRlc3QsIFdpZGVORkEpCiB7CiAgICAgLy8gTWFrZSBhbiBORkEgd2l0aCBhYm91dCAxNDAw
IG5vZGVzLgotICAgIC8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IG1ha2UgbXVsdGlwbGUgREZBcyBh
bnltb3JlLiBBZGQgYSB0ZXN0IHRoYXQgZG9lcy4KICAgICBTdHJpbmdCdWlsZGVyIHJ1bGVMaXN0
OwogICAgIHJ1bGVMaXN0LmFwcGVuZCgnWycpOwogICAgIGZvciAoY2hhciBjMSA9ICdBJzsgYzEg
PD0gJ1onOyArK2MxKSB7CkBAIC01MzMsNiArNTMyLDM3IEBAIFRFU1RfRihDb250ZW50RXh0ZW5z
aW9uVGVzdCwgTXVsdGlERkEpCiAgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50
UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvIiksIHsgfSk7CiB9CiAKK1RFU1RfRihDb250ZW50
RXh0ZW5zaW9uVGVzdCwgRGVlcE5GQSkKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBzaXplID0gNTAw
MDAwOworICAgIAorICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb21iaW5lZFVSTEZpbHRlcnMgY29t
YmluZWRVUkxGaWx0ZXJzOworICAgIENvbnRlbnRFeHRlbnNpb25zOjpVUkxGaWx0ZXJQYXJzZXIg
cGFyc2VyKGNvbWJpbmVkVVJMRmlsdGVycyk7CisgICAgCisgICAgLy8gRklYTUU6IERGQVRvTkZB
Ojpjb252ZXJ0IHRha2VzIHdheSB0b28gbG9uZyBvbiB0aGVzZSBkZWVwIE5GQXMuIFdlIHNob3Vs
ZCBvcHRpbWl6ZSBmb3IgdGhhdCBjYXNlLgorICAgIAorICAgIFN0cmluZ0J1aWxkZXIgbG90c09m
QXM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgbG90
c09mQXMuYXBwZW5kKCdBJyk7CisgICAgRVhQRUNUX0VRKENvbnRlbnRFeHRlbnNpb25zOjpVUkxG
aWx0ZXJQYXJzZXI6OlBhcnNlU3RhdHVzOjpPaywgcGFyc2VyLmFkZFBhdHRlcm4obG90c09mQXMu
dG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBmYWxzZSwgMCkpOworICAgIAorICAgIC8vIEZJWE1F
OiBZYXJyIG91Z2h0IHRvIGJlIGFibGUgdG8gaGFuZGxlIDJNQiByZWd1bGFyIGV4cHJlc3Npb25z
LgorICAgIFN0cmluZ0J1aWxkZXIgdG9vTWFueUFzOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzaXplICogNDsgKytpKQorICAgICAgICB0b29NYW55QXMuYXBwZW5kKCdBJyk7CisgICAg
RVhQRUNUX0VRKENvbnRlbnRFeHRlbnNpb25zOjpVUkxGaWx0ZXJQYXJzZXI6OlBhcnNlU3RhdHVz
OjpZYXJyRXJyb3IsIHBhcnNlci5hZGRQYXR0ZXJuKHRvb01hbnlBcy50b1N0cmluZygpLnV0Zjgo
KS5kYXRhKCksIGZhbHNlLCAwKSk7CisgICAgCisgICAgU3RyaW5nQnVpbGRlciBuZXN0ZWRHcm91
cHM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgbmVz
dGVkR3JvdXBzLmFwcGVuZCgnKCcpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXpl
OyArK2kpCisgICAgICAgIG5lc3RlZEdyb3Vwcy5hcHBlbmQoIkIpIik7CisgICAgLy8gRklYTUU6
IEFkZCBuZXN0ZWRHcm91cHMuIFJpZ2h0IG5vdyBpdCBhbHNvIHRha2VzIHRvbyBsb25nLiBJdCBz
aG91bGQgYmUgb3B0aW1pemVkLgorICAgIAorICAgIC8vIFRoaXMgc2hvdWxkIG5vdCBjcmFzaCBh
bmQgbm90IHRpbWVvdXQuCisgICAgRVhQRUNUX0VRKDF1bCwgY3JlYXRlTkZBcyhjb21iaW5lZFVS
TEZpbHRlcnMpLnNpemUoKSk7Cit9CisKIHZvaWQgY2hlY2tDb21waWxlckVycm9yKGNvbnN0IGNo
YXIqIGpzb24sIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uRXJyb3IgZXhwZWN0
ZWRFcnJvcikKIHsKICAgICBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uRGF0YSBleHRlbnNpb25EYXRhOwpAQCAtNjE2LDkgKzY0Niw5IEBAIFRFU1Rf
RihDb250ZW50RXh0ZW5zaW9uVGVzdCwgU3RyaWN0UHJlZmkKIFRFU1RfRihDb250ZW50RXh0ZW5z
aW9uVGVzdCwgU3RyaWN0UHJlZml4U2VwYXJhdGVkTWFjaGluZXMyKQogewogICAgIGF1dG8gYmFj
a2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0
cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXmZvb1wifX0sIgotICAgICJ7XCJhY3Rpb25cIjp7
XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeLipbYS1j
XStiYXJcIn19LCIKLSAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmln
Z2VyXCI6e1widXJsLWZpbHRlclwiOlwiXndlYmtpdDpcIn19LCIKLSAgICAie1wiYWN0aW9uXCI6
e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiW2EtY10r
Yitvb21cIn19XSIpOworICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0s
XCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXi4qW2EtY10rYmFyXCJ9fSwiCisgICAgICAg
ICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmls
dGVyXCI6XCJed2Via2l0OlwifX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwi
YmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiW2EtY10rYitvb21cIn19XSIp
OwogCiAgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDov
L3dlYmtpdC5vcmcvIiksIHsgfSk7CiAgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3Vt
ZW50UmVxdWVzdCgiZm9vOi8vd2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0
aW9uVHlwZTo6QmxvY2tMb2FkIH0pOwpAQCAtNjQ2LDYgKzY3NiwzNiBAQCBURVNUX0YoQ29udGVu
dEV4dGVuc2lvblRlc3QsIFN0cmljdFByZWZpCiAgICAgRVhQRUNUX0VRKDN1bCwgY3JlYXRlTkZB
cyhjb21iaW5lZFVSTEZpbHRlcnMpLnNpemUoKSk7CiB9CiAKK1RFU1RfRihDb250ZW50RXh0ZW5z
aW9uVGVzdCwgU3RyaWN0UHJlZml4U2VwYXJhdGVkTWFjaGluZXMzKQoreworICAgIGF1dG8gYmFj
a2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0
cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiQSpEXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25c
Ijp7XCJ0eXBlXCI6XCJpZ25vcmUtcHJldmlvdXMtcnVsZXNcIn0sXCJ0cmlnZ2VyXCI6e1widXJs
LWZpbHRlclwiOlwiQSpCQStcIn19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpc
ImJsb2NrLWNvb2tpZXNcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiQSpCQ1wifX1d
Iik7CisgICAgCisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgi
aHR0cDovL3dlYmtpdC5vcmcvRCIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpC
bG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVz
dCgiaHR0cDovL3dlYmtpdC5vcmcvQUFEIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5
cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRS
ZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9BQiIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJh
Y2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL0FCQSIpLCB7IH0s
IHRydWUpOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0
dHA6Ly93ZWJraXQub3JnL0FCQUQiKSwgeyB9LCB0cnVlKTsKKyAgICB0ZXN0UmVxdWVzdChiYWNr
ZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9CQyIpLCB7IENvbnRl
bnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXN9KTsKKyAgICB0ZXN0UmVxdWVz
dChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9BQkMiKSwg
eyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tDb29raWVzfSk7CisgICAgdGVz
dFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcv
QUJBQkMiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tDb29raWVzfSwg
dHJ1ZSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0
cDovL3dlYmtpdC5vcmcvQUJBQkNBRCIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBl
OjpCbG9ja0Nvb2tpZXN9LCB0cnVlKTsKK30KKyAgICAKK1RFU1RfRihDb250ZW50RXh0ZW5zaW9u
VGVzdCwgU3RyaWN0UHJlZml4U2VwYXJhdGVkTWFjaGluZXMzUGFydGl0aW9uaW5nKQoreworICAg
IENvbnRlbnRFeHRlbnNpb25zOjpDb21iaW5lZFVSTEZpbHRlcnMgY29tYmluZWRVUkxGaWx0ZXJz
OworICAgIENvbnRlbnRFeHRlbnNpb25zOjpVUkxGaWx0ZXJQYXJzZXIgcGFyc2VyKGNvbWJpbmVk
VVJMRmlsdGVycyk7CisgICAgCisgICAgRVhQRUNUX0VRKENvbnRlbnRFeHRlbnNpb25zOjpVUkxG
aWx0ZXJQYXJzZXI6OlBhcnNlU3RhdHVzOjpPaywgcGFyc2VyLmFkZFBhdHRlcm4oIkEqRCIsIGZh
bHNlLCAwKSk7CisgICAgRVhQRUNUX0VRKENvbnRlbnRFeHRlbnNpb25zOjpVUkxGaWx0ZXJQYXJz
ZXI6OlBhcnNlU3RhdHVzOjpPaywgcGFyc2VyLmFkZFBhdHRlcm4oIkEqQkErIiwgZmFsc2UsIDEp
KTsKKyAgICBFWFBFQ1RfRVEoQ29udGVudEV4dGVuc2lvbnM6OlVSTEZpbHRlclBhcnNlcjo6UGFy
c2VTdGF0dXM6Ok9rLCBwYXJzZXIuYWRkUGF0dGVybigiQSpCQyIsIGZhbHNlLCAyKSk7CisgICAg
CisgICAgLy8gIkEqQSIgYW5kICJBKkJDIiBjYW4gYmUgZ3JvdXBlZCwgIkEqQkErIiBzaG91bGQg
bm90LgorICAgIEVYUEVDVF9FUSgydWwsIGNyZWF0ZU5GQXMoY29tYmluZWRVUkxGaWx0ZXJzKS5z
aXplKCkpOworfQorCiBzdGF0aWMgdm9pZCB0ZXN0UGF0dGVyblN0YXR1cyhTdHJpbmcgcGF0dGVy
biwgQ29udGVudEV4dGVuc2lvbnM6OlVSTEZpbHRlclBhcnNlcjo6UGFyc2VTdGF0dXMgc3RhdHVz
KQogewogICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb21iaW5lZFVSTEZpbHRlcnMgY29tYmluZWRV
UkxGaWx0ZXJzOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252261</attachid>
            <date>2015-05-02 23:38:25 -0700</date>
            <delta_ts>2015-05-02 23:53:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144485-20150502233712.patch</filename>
            <type>text/plain</type>
            <size>20302</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzcyNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE1LTA1LTAyICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gQ29tYmluZSBORkFzIHByb3Blcmx5IGFuZCBmcmVlIG1lbW9yeSBhcyB3ZSBj
b21waWxlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQ0NDg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBjb3JyZWN0bHkgY29tYmluZXMgYWxsIHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2l0
aCBhIGNvbW1vbiBwcmVmaXggdXAgdG8KKyAgICAgICAgdGhlIGxhc3QgcXVhbnRpZmllZCB0ZXJt
IGludG8gdGhlIHNhbWUgTkZBLiAgSXQgYWxzbyBkZWxldGVzIHRoZSBwcmVmaXggdHJlZSBhcyBp
dAorICAgICAgICBjcmVhdGVzIE5GQXMsIHJlZHVjaW5nIHRoZSBtYXhpbXVtIG1lbW9yeSB1c2Vk
IHdoZW4gY29tcGlsaW5nLgorCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29tYmluZWRV
UkxGaWx0ZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb21i
aW5lZFVSTEZpbHRlcnM6OmFkZFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OmdlbmVyYXRlTkZBRm9yU3VidHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6Q29tYmluZWRVUkxGaWx0ZXJzOjpwcm9jZXNzTkZBcyk6CisgICAgICAg
ICogY29udGVudGV4dGVuc2lvbnMvQ29tYmluZWRVUkxGaWx0ZXJzLmg6CisgICAgICAgICogY29u
dGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNEZWJ1Z2dpbmcuaDoKKwogMjAxNS0wNS0w
MiAgR3l1eW91bmcgS2ltICA8Z3l1eW91bmcua2ltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFB1
cmdlIFBhc3NSZWZQdHIgY3JlYXRlKCkgZmFjdG9yeSBmdW5jdGlvbnMgaW4gaHRtbCAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbWJpbmVkVVJMRmlsdGVycy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29tYmluZWRV
UkxGaWx0ZXJzLmNwcAkocmV2aXNpb24gMTgzNjc3KQorKysgU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvQ29tYmluZWRVUkxGaWx0ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcs
NyArNDcsNiBAQCB0eXBlZGVmIFZlY3RvcjxQcmVmaXhUcmVlRWRnZSwgMCwgV1RGOjpDCiBzdHJ1
Y3QgUHJlZml4VHJlZVZlcnRleCB7CiAgICAgUHJlZml4VHJlZUVkZ2VzIGVkZ2VzOwogICAgIEFj
dGlvbkxpc3QgZmluYWxBY3Rpb25zOwotICAgIGJvb2wgaW5WYXJpYWJsZUxlbmd0aFByZWZpeCB7
IGZhbHNlIH07CiB9OwogCiAjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1BFUkZPUk1BTkNFX1JFUE9S
VElORwpAQCAtMTI4LDEzICsxMjcsOCBAQCB2b2lkIENvbWJpbmVkVVJMRmlsdGVyczo6YWRkUGF0
dGVybih1aW50CiAgICAgaWYgKHBhdHRlcm4uaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBWZWN0b3I8UHJlZml4VHJlZVZlcnRleCosIDEyOD4gcHJlZml4VHJlZVZlcnRpY2VzRm9y
UGF0dGVybjsKLSAgICBwcmVmaXhUcmVlVmVydGljZXNGb3JQYXR0ZXJuLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkocGF0dGVybi5zaXplKCkgKyAxKTsKLQogICAgIC8vIEV4dGVuZCB0aGUgcHJlZml4
IHRyZWUgd2l0aCB0aGUgbmV3IHBhdHRlcm4uCi0gICAgYm9vbCBoYXNOZXdUZXJtID0gZmFsc2U7
CiAgICAgUHJlZml4VHJlZVZlcnRleCogbGFzdFByZWZpeFRyZWUgPSBtX3ByZWZpeFRyZWVSb290
LmdldCgpOwotICAgIHByZWZpeFRyZWVWZXJ0aWNlc0ZvclBhdHRlcm4uYXBwZW5kKGxhc3RQcmVm
aXhUcmVlKTsKIAogICAgIGZvciAoY29uc3QgVGVybSYgdGVybSA6IHBhdHRlcm4pIHsKICAgICAg
ICAgc2l6ZV90IG5leHRFbnRyeUluZGV4ID0gV1RGOjpub3RGb3VuZDsKQEAgLTE0NywxMjkgKzE0
MSwxMzIgQEAgdm9pZCBDb21iaW5lZFVSTEZpbHRlcnM6OmFkZFBhdHRlcm4odWludAogICAgICAg
ICBpZiAobmV4dEVudHJ5SW5kZXggIT0gV1RGOjpub3RGb3VuZCkKICAgICAgICAgICAgIGxhc3RQ
cmVmaXhUcmVlID0gbGFzdFByZWZpeFRyZWUtPmVkZ2VzW25leHRFbnRyeUluZGV4XS5jaGlsZC5n
ZXQoKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBoYXNOZXdUZXJtID0gdHJ1ZTsKLQog
ICAgICAgICAgICAgbGFzdFByZWZpeFRyZWUtPmVkZ2VzLmFwcGVuZChQcmVmaXhUcmVlRWRnZSh7
dGVybSwgc3RkOjptYWtlX3VuaXF1ZTxQcmVmaXhUcmVlVmVydGV4PigpfSkpOwogICAgICAgICAg
ICAgbGFzdFByZWZpeFRyZWUgPSBsYXN0UHJlZml4VHJlZS0+ZWRnZXMubGFzdCgpLmNoaWxkLmdl
dCgpOwogICAgICAgICB9Ci0gICAgICAgIHByZWZpeFRyZWVWZXJ0aWNlc0ZvclBhdHRlcm4uYXBw
ZW5kKGxhc3RQcmVmaXhUcmVlKTsKICAgICB9CiAKLSAgICBBY3Rpb25MaXN0JiBhY3Rpb25zID0g
cHJlZml4VHJlZVZlcnRpY2VzRm9yUGF0dGVybi5sYXN0KCktPmZpbmFsQWN0aW9uczsKKyAgICBB
Y3Rpb25MaXN0JiBhY3Rpb25zID0gbGFzdFByZWZpeFRyZWUtPmZpbmFsQWN0aW9uczsKICAgICBp
ZiAoYWN0aW9ucy5maW5kKGFjdGlvbklkKSA9PSBXVEY6Om5vdEZvdW5kKQogICAgICAgICBhY3Rp
b25zLmFwcGVuZChhY3Rpb25JZCk7Ci0KLSAgICBpZiAoIWhhc05ld1Rlcm0pCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGJvb2wgaGFzU2VlblZhcmlhYmxlTGVuZ3RoVGVybXMgPSBmYWxzZTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBwYXR0ZXJuLnNpemUoKTsgaS0tOykgewotICAgICAgICBjb25z
dCBUZXJtJiB0ZXJtID0gcGF0dGVybltpXTsKLSAgICAgICAgaGFzU2VlblZhcmlhYmxlTGVuZ3Ro
VGVybXMgfD0gIXRlcm0uaGFzRml4ZWRMZW5ndGgoKTsKLSAgICAgICAgcHJlZml4VHJlZVZlcnRp
Y2VzRm9yUGF0dGVybltpICsgMV0tPmluVmFyaWFibGVMZW5ndGhQcmVmaXggfD0gaGFzU2VlblZh
cmlhYmxlTGVuZ3RoVGVybXM7Ci0gICAgfQotICAgIHByZWZpeFRyZWVWZXJ0aWNlc0ZvclBhdHRl
cm5bMF0tPmluVmFyaWFibGVMZW5ndGhQcmVmaXggfD0gaGFzU2VlblZhcmlhYmxlTGVuZ3RoVGVy
bXM7CiB9CiAKLXN0cnVjdCBBY3RpdmVTdWJ0cmVlIHsKLSAgICBjb25zdCBQcmVmaXhUcmVlVmVy
dGV4KiB2ZXJ0ZXg7Ci0gICAgUHJlZml4VHJlZUVkZ2VzOjpjb25zdF9pdGVyYXRvciBpdGVyYXRv
cjsKLX07Ci0KLXN0YXRpYyB2b2lkIGdlbmVyYXRlTkZBRm9yU3VidHJlZShORkEmIG5mYSwgdW5z
aWduZWQgcm9vdElkLCBjb25zdCBQcmVmaXhUcmVlVmVydGV4JiBwcmVmaXhUcmVlVmVydGV4KQor
c3RhdGljIHZvaWQgZ2VuZXJhdGVORkFGb3JTdWJ0cmVlKE5GQSYgbmZhLCB1bnNpZ25lZCBuZmFS
b290SWQsIFByZWZpeFRyZWVWZXJ0ZXgmIHJvb3QpCiB7Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FH
RSghcHJlZml4VHJlZVZlcnRleC5pblZhcmlhYmxlTGVuZ3RoUHJlZml4LCAiVGhpcyBjb2RlIGFz
c3VtZXMgdGhlIHN1YnRyZWVzIHdpdGggdmFyaWFibGUgcHJlZml4IGxlbmd0aCBoYXZlIGFscmVh
ZHkgYmVlbiBoYW5kbGVkLiIpOwotCi0gICAgc3RydWN0IEFjdGl2ZU5GQVN1YnRyZWUgOiBBY3Rp
dmVTdWJ0cmVlIHsKLSAgICAgICAgQWN0aXZlTkZBU3VidHJlZShjb25zdCBQcmVmaXhUcmVlVmVy
dGV4KiB2ZXJ0ZXgsIFByZWZpeFRyZWVFZGdlczo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3IsIHVu
c2lnbmVkIG5vZGVJbmRleCkKLSAgICAgICAgICAgIDogQWN0aXZlU3VidHJlZSh7IHZlcnRleCwg
aXRlcmF0b3IgfSkKLSAgICAgICAgICAgICwgbGFzdE5vZGVJbmRleChub2RlSW5kZXgpCi0gICAg
ICAgIHsKLSAgICAgICAgfQotICAgICAgICB1bnNpZ25lZCBsYXN0Tm9kZUluZGV4OworICAgIC8q
CisgICAgLy8gTm9uLXJlY3Vyc2l2ZSBmb3JtIG9mIHRoaXM6CisgICAgZm9yIChhdXRvJiBlZGdl
IDogcm9vdC5lZGdlcykgeworICAgICAgICBpZiAoIWVkZ2UudGVybS5oYXNGaXhlZExlbmd0aCgp
KQorICAgICAgICAgICAgY29udGludWU7IC8vIFRoaXMgd2lsbCBiZSBhIHBhcnQgb2YgYW5vdGhl
ciBORkEuCisgICAgICAgIHVuc2lnbmVkIHN1YnRyZWVSb290SWQgPSBlZGdlLnRlcm0uZ2VuZXJh
dGVHcmFwaChuZmEsIG5mYVJvb3RJZCwgZWRnZS5jaGlsZC0+ZmluYWxBY3Rpb25zKTsKKyAgICAg
ICAgZ2VuZXJhdGVORkFGb3JTdWJ0cmVlKG5mYSwgc3VidHJlZVJvb3RJZCwgKmVkZ2UuY2hpbGQu
Z2V0KCkpOworICAgICAgICBpZiAoZWRnZS5jaGlsZC0+ZWRnZXMuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgZWRnZS50ZXJtID0gVGVybShUZXJtOjpEZWxldGVkVmFsdWUpOyAvLyBNYXJrIHRoaXMg
bGVhZiBmb3IgZGVsZXRpbmcuCisgICAgfQorICAgIHJvb3QuZWRnZXMucmVtb3ZlQWxsTWF0Y2hp
bmcoW10oUHJlZml4VHJlZUVkZ2UmIGVkZ2UpCisgICAgeworICAgICAgICByZXR1cm4gZWRnZS50
ZXJtLmlzRGVsZXRlZFZhbHVlKCk7CisgICAgfSk7CisgICAgKi8KKyAgICAKKyAgICBzdHJ1Y3Qg
QWN0aXZlU3VidHJlZSB7CisgICAgICAgIFByZWZpeFRyZWVWZXJ0ZXgqIHZlcnRleDsKKyAgICAg
ICAgdW5zaWduZWQgcm9vdElkOworICAgICAgICB1bnNpZ25lZCBlZGdlSW5kZXg7CiAgICAgfTsK
LQotICAgIFZlY3RvcjxBY3RpdmVORkFTdWJ0cmVlPiBhY3RpdmVTdGFjazsKLSAgICBhY3RpdmVT
dGFjay5hcHBlbmQoQWN0aXZlTkZBU3VidHJlZSgmcHJlZml4VHJlZVZlcnRleCwgcHJlZml4VHJl
ZVZlcnRleC5lZGdlcy5iZWdpbigpLCByb290SWQpKTsKLQotICAgIHdoaWxlICh0cnVlKSB7Ci0g
ICAgUHJvY2Vzc1N1YnRyZWU6Ci0gICAgICAgIGZvciAoQWN0aXZlTkZBU3VidHJlZSYgYWN0aXZl
U3VidHJlZSA9IGFjdGl2ZVN0YWNrLmxhc3QoKTsgYWN0aXZlU3VidHJlZS5pdGVyYXRvciAhPSBh
Y3RpdmVTdWJ0cmVlLnZlcnRleC0+ZWRnZXMuZW5kKCk7ICsrYWN0aXZlU3VidHJlZS5pdGVyYXRv
cikgewotICAgICAgICAgICAgaWYgKGFjdGl2ZVN1YnRyZWUuaXRlcmF0b3ItPmNoaWxkLT5pblZh
cmlhYmxlTGVuZ3RoUHJlZml4KQorICAgIFZlY3RvcjxBY3RpdmVTdWJ0cmVlPiBzdGFjazsKKyAg
ICBpZiAoIXJvb3QuZWRnZXMuaXNFbXB0eSgpKQorICAgICAgICBzdGFjay5hcHBlbmQoQWN0aXZl
U3VidHJlZSh7JnJvb3QsIG5mYVJvb3RJZCwgMH0pKTsKKyAgICAKKyAgICAvLyBHZW5lcmF0ZSBn
cmFwaHMgZm9yIGVhY2ggc3VidHJlZSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gYW55IHF1YW50aWZp
ZXJzLgorICAgIHdoaWxlICghc3RhY2suaXNFbXB0eSgpKSB7CisgICAgICAgIFByZWZpeFRyZWVW
ZXJ0ZXgqIHZlcnRleCA9IHN0YWNrLmxhc3QoKS52ZXJ0ZXg7CisgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGVkZ2VJbmRleCA9IHN0YWNrLmxhc3QoKS5lZGdlSW5kZXg7CisKKyAgICAgICAgQVNTRVJU
KHZlcnRleCk7CisgICAgICAgIGlmIChlZGdlSW5kZXggPj0gdmVydGV4LT5lZGdlcy5zaXplKCkp
IHsKKyAgICAgICAgICAgIEFTU0VSVChlZGdlSW5kZXggPT0gdmVydGV4LT5lZGdlcy5zaXplKCkp
OworICAgICAgICAgICAgdmVydGV4LT5lZGdlcy5yZW1vdmVBbGxNYXRjaGluZyhbXShQcmVmaXhU
cmVlRWRnZSYgZWRnZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWRn
ZS50ZXJtLmlzRGVsZXRlZFZhbHVlKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHN0
YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIGlmICghc3RhY2suaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICAgICAgYXV0byYgZWRnZSA9IHN0YWNrLmxhc3QoKS52ZXJ0ZXgtPmVkZ2VzW3N0
YWNrLmxhc3QoKS5lZGdlSW5kZXhdOworICAgICAgICAgICAgICAgIGlmIChlZGdlLmNoaWxkLT5l
ZGdlcy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIGVkZ2UudGVybSA9IFRlcm0oVGVy
bTo6RGVsZXRlZFZhbHVlKTsgLy8gTWFyayB0aGlzIGxlYWYgZm9yIGRlbGV0aW5nLgorICAgICAg
ICAgICAgICAgIHN0YWNrLmxhc3QoKS5lZGdlSW5kZXgrKzsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8mIGVkZ2UgPSB2ZXJ0ZXgtPmVkZ2VzW2VkZ2VJ
bmRleF07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFF1YW50aWZpZWQgZWRnZXMgaW4g
dGhlIHN1YnRyZWUgd2lsbCBiZSBhIHBhcnQgb2YgYW5vdGhlciBORkEuCisgICAgICAgICAgICBp
ZiAoIWVkZ2UudGVybS5oYXNGaXhlZExlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgc3RhY2su
bGFzdCgpLmVkZ2VJbmRleCsrOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
ICAgICBjb25zdCBUZXJtJiB0ZXJtID0gYWN0aXZlU3VidHJlZS5pdGVyYXRvci0+dGVybTsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIG5ld0VuZE5vZGVJbmRleCA9IHRlcm0uZ2VuZXJhdGVHcmFwaChu
ZmEsIGFjdGl2ZVN1YnRyZWUubGFzdE5vZGVJbmRleCwgYWN0aXZlU3VidHJlZS5pdGVyYXRvci0+
Y2hpbGQtPmZpbmFsQWN0aW9ucyk7Ci0KLSAgICAgICAgICAgIFByZWZpeFRyZWVWZXJ0ZXgqIHBy
ZWZpeFRyZWVWZXJ0ZXggPSBhY3RpdmVTdWJ0cmVlLml0ZXJhdG9yLT5jaGlsZC5nZXQoKTsKLSAg
ICAgICAgICAgIGlmICghcHJlZml4VHJlZVZlcnRleC0+ZWRnZXMuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgICAgICAgICAgYWN0aXZlU3RhY2suYXBwZW5kKEFjdGl2ZU5GQVN1YnRyZWUocHJlZml4VHJl
ZVZlcnRleCwgcHJlZml4VHJlZVZlcnRleC0+ZWRnZXMuYmVnaW4oKSwgbmV3RW5kTm9kZUluZGV4
KSk7Ci0gICAgICAgICAgICAgICAgZ290byBQcm9jZXNzU3VidHJlZTsKICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgdW5zaWduZWQgc3VidHJlZVJvb3RJZCA9IGVkZ2Uu
dGVybS5nZW5lcmF0ZUdyYXBoKG5mYSwgc3RhY2subGFzdCgpLnJvb3RJZCwgZWRnZS5jaGlsZC0+
ZmluYWxBY3Rpb25zKTsKKyAgICAgICAgICAgIHN0YWNrLmFwcGVuZChBY3RpdmVTdWJ0cmVlKHtl
ZGdlLmNoaWxkLmdldCgpLCBzdWJ0cmVlUm9vdElkLCAwfSkpOwogICAgICAgICB9Ci0KLSAgICAg
ICAgYWN0aXZlU3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICBpZiAoYWN0aXZlU3RhY2suaXNF
bXB0eSgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICsrYWN0aXZlU3RhY2subGFzdCgp
Lml0ZXJhdG9yOwogICAgIH0KIH0KIAotdm9pZCBDb21iaW5lZFVSTEZpbHRlcnM6OnByb2Nlc3NO
RkFzKHN0ZDo6ZnVuY3Rpb248dm9pZChORkEmJik+IGhhbmRsZXIpIGNvbnN0Cit2b2lkIENvbWJp
bmVkVVJMRmlsdGVyczo6cHJvY2Vzc05GQXMoc3RkOjpmdW5jdGlvbjx2b2lkKE5GQSYmKT4gaGFu
ZGxlcikKIHsKLSAgICBWZWN0b3I8QWN0aXZlU3VidHJlZT4gYWN0aXZlU3RhY2s7Ci0gICAgYWN0
aXZlU3RhY2suYXBwZW5kKEFjdGl2ZVN1YnRyZWUoeyBtX3ByZWZpeFRyZWVSb290LmdldCgpLCBt
X3ByZWZpeFRyZWVSb290LT5lZGdlcy5iZWdpbigpIH0pKTsKLQorI2lmIENPTlRFTlRfRVhURU5T
SU9OU19TVEFURV9NQUNISU5FX0RFQlVHR0lORworICAgIHByaW50KCk7CisjZW5kaWYKICAgICB3
aGlsZSAodHJ1ZSkgewotICAgIFByb2Nlc3NTdWJ0cmVlOgotICAgICAgICBBY3RpdmVTdWJ0cmVl
JiBhY3RpdmVTdWJ0cmVlID0gYWN0aXZlU3RhY2subGFzdCgpOwotCi0gICAgICAgIC8vIFdlIGdv
IGRlcHRoIGZpcnN0IGludG8gdGhlIHN1YnRyZWVzIHdpdGggdmFyaWFibGUgcHJlZml4LiBGaW5k
IHRoZSBuZXh0IHN1YnRyZWUuCi0gICAgICAgIGZvciAoOyBhY3RpdmVTdWJ0cmVlLml0ZXJhdG9y
ICE9IGFjdGl2ZVN1YnRyZWUudmVydGV4LT5lZGdlcy5lbmQoKTsgKythY3RpdmVTdWJ0cmVlLml0
ZXJhdG9yKSB7Ci0gICAgICAgICAgICBQcmVmaXhUcmVlVmVydGV4KiBwcmVmaXhUcmVlVmVydGV4
ID0gYWN0aXZlU3VidHJlZS5pdGVyYXRvci0+Y2hpbGQuZ2V0KCk7Ci0gICAgICAgICAgICBpZiAo
cHJlZml4VHJlZVZlcnRleC0+aW5WYXJpYWJsZUxlbmd0aFByZWZpeCkgewotICAgICAgICAgICAg
ICAgIGFjdGl2ZVN0YWNrLmFwcGVuZChBY3RpdmVTdWJ0cmVlKHsgcHJlZml4VHJlZVZlcnRleCwg
cHJlZml4VHJlZVZlcnRleC0+ZWRnZXMuYmVnaW4oKSB9KSk7Ci0gICAgICAgICAgICAgICAgZ290
byBQcm9jZXNzU3VidHJlZTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgLy8gVHJhdmVyc2Ugb3V0
IHRvIGEgbGVhZi4KKyAgICAgICAgVmVjdG9yPFByZWZpeFRyZWVWZXJ0ZXgqLCAxMjg+IHN0YWNr
OworICAgICAgICBBU1NFUlQobV9wcmVmaXhUcmVlUm9vdCk7CisgICAgICAgIFByZWZpeFRyZWVW
ZXJ0ZXgqIHZlcnRleCA9IG1fcHJlZml4VHJlZVJvb3QuZ2V0KCk7CisgICAgICAgIHdoaWxlICh0
cnVlKSB7CisgICAgICAgICAgICBzdGFjay5hcHBlbmQodmVydGV4KTsKKyAgICAgICAgICAgIGlm
ICh2ZXJ0ZXgtPmVkZ2VzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIHZlcnRleCA9IHZlcnRleC0+ZWRnZXMubGFzdCgpLmNoaWxkLmdldCgpOwogICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gQWZ0ZXIgd2UgcmVhY2hlZCBoZXJlLCB3ZSBrbm93IHRoYXQgYWxs
IHRoZSBzdWJ0cmVlcyB3aXRoIHZhcmlhYmxlIHByZWZpeGVzIGhhdmUgYmVlbiBwcm9jZXNzZWQs
Ci0gICAgICAgIC8vIHRpbWUgdG8gZ2VuZXJhdGUgdGhlIE5GQSBmb3IgdGhlIGdyYXBoIHJvb3Rl
ZCBoZXJlLgotICAgICAgICBib29sIG5lZWRUb0dlbmVyYXRlID0gYWN0aXZlU3VidHJlZS52ZXJ0
ZXgtPmVkZ2VzLmlzRW1wdHkoKSAmJiAhYWN0aXZlU3VidHJlZS52ZXJ0ZXgtPmZpbmFsQWN0aW9u
cy5pc0VtcHR5KCk7Ci0gICAgICAgIGlmICghbmVlZFRvR2VuZXJhdGUpIHsKLSAgICAgICAgICAg
IGZvciAoY29uc3QgYXV0byYgZWRnZSA6IGFjdGl2ZVN1YnRyZWUudmVydGV4LT5lZGdlcykgewot
ICAgICAgICAgICAgICAgIGlmICghZWRnZS5jaGlsZC0+aW5WYXJpYWJsZUxlbmd0aFByZWZpeCkg
ewotICAgICAgICAgICAgICAgICAgICBuZWVkVG9HZW5lcmF0ZSA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAg
ICAgaWYgKHN0YWNrLnNpemUoKSA9PSAxKQorICAgICAgICAgICAgYnJlYWs7IC8vIFdlJ3JlIGRv
bmUgb25jZSB3ZSBoYXZlIHByb2Nlc3NlZCBhbmQgcmVtb3ZlZCBhbGwgdGhlIGVkZ2VzIGluIHRo
ZSBwcmVmaXggdHJlZS4KKyAgICAgICAgCisgICAgICAgIC8vIEZpbmQgdGhlIHByZWZpeCByb290
IGZvciB0aGlzIE5GQS4gVGhpcyBpcyB0aGUgdmVydGV4IGFmdGVyIHRoZSBsYXN0IHRlcm0gd2l0
aCBhIHF1YW50aWZpZXIgaWYgdGhlcmUgaXMgb25lLAorICAgICAgICAvLyBvciB0aGUgcm9vdCBp
ZiB0aGVyZSBhcmUgbm8gcXVhbnRpZmllcnMgbGVmdC4KKyAgICAgICAgd2hpbGUgKHN0YWNrLnNp
emUoKSA+IDEpIHsKKyAgICAgICAgICAgIGlmICghc3RhY2tbc3RhY2suc2l6ZSgpIC0gMl0tPmVk
Z2VzLmxhc3QoKS50ZXJtLmhhc0ZpeGVkTGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBzdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgIH0KLQotICAgICAgICBp
ZiAobmVlZFRvR2VuZXJhdGUpIHsKLSAgICAgICAgICAgIE5GQSBuZmE7Ci0KLSAgICAgICAgICAg
IHVuc2lnbmVkIHByZWZpeEVuZCA9IG5mYS5yb290KCk7Ci0KLSAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBhY3RpdmVTdGFjay5zaXplKCkgLSAxOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICBjb25zdCBUZXJtJiB0ZXJtID0gYWN0aXZlU3RhY2tbaV0uaXRlcmF0b3ItPnRlcm07
Ci0gICAgICAgICAgICAgICAgcHJlZml4RW5kID0gdGVybS5nZW5lcmF0ZUdyYXBoKG5mYSwgcHJl
Zml4RW5kLCBhY3RpdmVTdGFja1tpXS5pdGVyYXRvci0+Y2hpbGQtPmZpbmFsQWN0aW9ucyk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgZWRnZSA6IGFjdGl2
ZVN1YnRyZWUudmVydGV4LT5lZGdlcykgewotICAgICAgICAgICAgICAgIGlmICghZWRnZS5jaGls
ZC0+aW5WYXJpYWJsZUxlbmd0aFByZWZpeCkgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBuZXdTdWJ0cmVlU3RhcnQgPSBlZGdlLnRlcm0uZ2VuZXJhdGVHcmFwaChuZmEsIHByZWZpeEVu
ZCwgZWRnZS5jaGlsZC0+ZmluYWxBY3Rpb25zKTsKLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJh
dGVORkFGb3JTdWJ0cmVlKG5mYSwgbmV3U3VidHJlZVN0YXJ0LCAqZWRnZS5jaGlsZCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBo
YW5kbGVyKFdURjo6bW92ZShuZmEpKTsKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghc3Rh
Y2suaXNFbXB0eSgpLCAiQXQgbGVhc3QgdGhlIHJvb3Qgc2hvdWxkIGJlIGluIHRoZSBzdGFjayIp
OworICAgICAgICAKKyAgICAgICAgLy8gTWFrZSBhbiBORkEgd2l0aCB0aGUgc3VidHJlZXMgZm9y
IHdob20gdGhpcyBpcyBhbHNvIHRoZSBsYXN0IHF1YW50aWZpZXIgKG9yIHdobyBhbHNvIGhhdmUg
bm8gcXVhbnRpZmllcikuCisgICAgICAgIE5GQSBuZmE7CisgICAgICAgIC8vIFB1dCB0aGUgcHJl
Zml4IGludG8gdGhlIE5GQS4KKyAgICAgICAgdW5zaWduZWQgcHJlZml4RW5kID0gbmZhLnJvb3Qo
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YWNrLnNpemUoKSAtIDE7ICsr
aSkgeworICAgICAgICAgICAgQVNTRVJUKCFzdGFja1tpXS0+ZWRnZXMuaXNFbXB0eSgpKTsKKyAg
ICAgICAgICAgIGNvbnN0IFByZWZpeFRyZWVFZGdlJiBlZGdlID0gc3RhY2tbaV0tPmVkZ2VzLmxh
c3QoKTsKKyAgICAgICAgICAgIHByZWZpeEVuZCA9IGVkZ2UudGVybS5nZW5lcmF0ZUdyYXBoKG5m
YSwgcHJlZml4RW5kLCBlZGdlLmNoaWxkLT5maW5hbEFjdGlvbnMpOworICAgICAgICB9CisgICAg
ICAgIC8vIFB1dCB0aGUgbm9uLXF1YW50aWZpZWQgdmVydGljZXMgaW4gdGhlIHN1YnRyZWUgaW50
byB0aGUgTkZBIGFuZCBkZWxldGUgdGhlbS4KKyAgICAgICAgQVNTRVJUKHN0YWNrLmxhc3QoKSk7
CisgICAgICAgIGdlbmVyYXRlTkZBRm9yU3VidHJlZShuZmEsIHByZWZpeEVuZCwgKnN0YWNrLmxh
c3QoKSk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogQ29tYmluZSBzbWFsbCBORkFzIHRv
IHJlZHVjZSB0aGUgbnVtYmVyIG9mIE5GQXMuCisgICAgICAgIGhhbmRsZXIoV1RGOjptb3ZlKG5m
YSkpOworICAgICAgICAKKyAgICAgICAgLy8gQ2xlYW4gdXAgYW55IHByb2Nlc3NlZCBsZWFmIG5v
ZGVzLgorICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgaWYgKHN0YWNrLnNpemUo
KSA+IDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3RhY2subGFzdCgpLT5lZGdlcy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhY2tbc3RhY2suc2l6ZSgpIC0gMl0tPmVkZ2Vz
LnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhY2sucmVtb3ZlTGFzdCgpOwor
ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gVmVy
dGV4IGlzIG5vdCBhIGxlYWYuCisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBi
cmVhazsgLy8gTGVhdmUgdGhlIGVtcHR5IHJvb3QuCiAgICAgICAgIH0KLQotICAgICAgICAvLyBX
ZSBoYXZlIHByb2Nlc3NlZCBhbGwgdGhlIHN1YnRyZWVzIG9mIHRoaXMgbGV2ZWwsIHBvcCB0aGUg
c3RhY2sgYW5kIG1vdmUgb24gdG8gdGhlIG5leHQgc2libGluZy4KLSAgICAgICAgYWN0aXZlU3Rh
Y2sucmVtb3ZlTGFzdCgpOwotICAgICAgICBpZiAoYWN0aXZlU3RhY2suaXNFbXB0eSgpKQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICsrYWN0aXZlU3RhY2subGFzdCgpLml0ZXJhdG9yOwog
ICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29tYmlu
ZWRVUkxGaWx0ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvQ29tYmluZWRVUkxGaWx0ZXJzLmgJKHJldmlzaW9uIDE4MzY3NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbWJpbmVkVVJMRmlsdGVycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRkUGF0dGVybih1aW50
NjRfdCBwYXR0ZXJuSWQsIGNvbnN0IFZlY3RvcjxUZXJtPiYgcGF0dGVybik7CiAKLSAgICB2b2lk
IHByb2Nlc3NORkFzKHN0ZDo6ZnVuY3Rpb248dm9pZChORkEmJik+IGhhbmRsZXIpIGNvbnN0Owor
ICAgIHZvaWQgcHJvY2Vzc05GQXMoc3RkOjpmdW5jdGlvbjx2b2lkKE5GQSYmKT4gaGFuZGxlcik7
CiAgICAgdm9pZCBjbGVhcigpOwogCiAjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1BFUkZPUk1BTkNF
X1JFUE9SVElORwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVu
dEV4dGVuc2lvbnNEZWJ1Z2dpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0RlYnVnZ2luZy5oCShyZXZpc2lvbiAxODM2
NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9u
c0RlYnVnZ2luZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAjZGVmaW5lIENP
TlRFTlRfRVhURU5TSU9OU19QQUdFX1NJWkUgMTYzODQKIAogI2lmIENPTlRFTlRfRVhURU5TSU9O
U19QRVJGT1JNQU5DRV9SRVBPUlRJTkcKLSNkZWZpbmUgTE9HX0xBUkdFX1NUUlVDVFVSRVMobmFt
ZSwgc2l6ZSkgaWYgKHNpemUgPiAxMDAwMDAwKSB7IGRhdGFMb2dGKCJOQU1FOiAlcyBTSVpFICVk
IiwgI25hbWUsIChpbnQpKHNpemUpKTsgfTsKKyNkZWZpbmUgTE9HX0xBUkdFX1NUUlVDVFVSRVMo
bmFtZSwgc2l6ZSkgaWYgKHNpemUgPiAxMDAwMDAwKSB7IGRhdGFMb2dGKCJOQU1FOiAlcyBTSVpF
ICVkXG4iLCAjbmFtZSwgKGludCkoc2l6ZSkpOyB9OwogI2Vsc2UKICNkZWZpbmUgTE9HX0xBUkdF
X1NUUlVDVFVSRVMobmFtZSwgc2l6ZSkKICNlbmRpZgpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTgzNzI2KQorKysgVG9vbHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTUtMDUtMDIgIEFs
ZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBbQ29u
dGVudCBFeHRlbnNpb25zXSBDb21iaW5lIE5GQXMgcHJvcGVybHkgYW5kIGZyZWUgbWVtb3J5IGFz
IHdlIGNvbXBpbGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDQ0ODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHA6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUX0YpOgorICAgICAgICBBZGRlZCB0ZXN0cyBm
b3IgY29ycmVjdGx5IHNwbGl0dGluZyB1cCBORkFzIHdpdGggdW5xdWFudGlmaWVkIHRlcm1zIGFm
dGVyIHF1YW50aWZpZWQgdGVybXMuCisgICAgICAgIEFkZGVkIHRlc3RzIGZvciBkZWVwIE5GQXMu
CisKIDIwMTUtMDUtMDEgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtYXJpb0BlbmRsZXNzbS5jb20+
CiAKICAgICAgICAgY2hlY2std2Via2l0LXN0eWxlIGZhaWxzIGR1ZSB0byBzeXN0ZW0gcHlsaW50
CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9D
b250ZW50RXh0ZW5zaW9ucy5jcHAJKHJldmlzaW9uIDE4MzU1NikKKysrIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ5NSwxMCArNDk1LDkgQEAgVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBSZXNvdXJj
ZU9yTAogICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIHtVUkwoVVJMKCksICJodHRwOi8vd2Via2l0
Lm9yZyIpLCBVUkwoVVJMKCksICJodHRwOi8vbm90X3dlYmtpdC5vcmciKSwgUmVzb3VyY2VUeXBl
OjpJbWFnZX0sIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrQ29va2llcywg
Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKIH0KICAgICAKLVRF
U1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgTXVsdGlERkEpCitURVNUX0YoQ29udGVudEV4dGVu
c2lvblRlc3QsIFdpZGVORkEpCiB7CiAgICAgLy8gTWFrZSBhbiBORkEgd2l0aCBhYm91dCAxNDAw
IG5vZGVzLgotICAgIC8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IG1ha2UgbXVsdGlwbGUgREZBcyBh
bnltb3JlLiBBZGQgYSB0ZXN0IHRoYXQgZG9lcy4KICAgICBTdHJpbmdCdWlsZGVyIHJ1bGVMaXN0
OwogICAgIHJ1bGVMaXN0LmFwcGVuZCgnWycpOwogICAgIGZvciAoY2hhciBjMSA9ICdBJzsgYzEg
PD0gJ1onOyArK2MxKSB7CkBAIC01MzMsNiArNTMyLDM3IEBAIFRFU1RfRihDb250ZW50RXh0ZW5z
aW9uVGVzdCwgTXVsdGlERkEpCiAgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50
UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvIiksIHsgfSk7CiB9CiAKK1RFU1RfRihDb250ZW50
RXh0ZW5zaW9uVGVzdCwgRGVlcE5GQSkKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBzaXplID0gNTAw
MDAwOworICAgIAorICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb21iaW5lZFVSTEZpbHRlcnMgY29t
YmluZWRVUkxGaWx0ZXJzOworICAgIENvbnRlbnRFeHRlbnNpb25zOjpVUkxGaWx0ZXJQYXJzZXIg
cGFyc2VyKGNvbWJpbmVkVVJMRmlsdGVycyk7CisgICAgCisgICAgLy8gRklYTUU6IERGQVRvTkZB
Ojpjb252ZXJ0IHRha2VzIHdheSB0b28gbG9uZyBvbiB0aGVzZSBkZWVwIE5GQXMuIFdlIHNob3Vs
ZCBvcHRpbWl6ZSBmb3IgdGhhdCBjYXNlLgorICAgIAorICAgIFN0cmluZ0J1aWxkZXIgbG90c09m
QXM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgbG90
c09mQXMuYXBwZW5kKCdBJyk7CisgICAgRVhQRUNUX0VRKENvbnRlbnRFeHRlbnNpb25zOjpVUkxG
aWx0ZXJQYXJzZXI6OlBhcnNlU3RhdHVzOjpPaywgcGFyc2VyLmFkZFBhdHRlcm4obG90c09mQXMu
dG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBmYWxzZSwgMCkpOworICAgIAorICAgIC8vIEZJWE1F
OiBZYXJyIG91Z2h0IHRvIGJlIGFibGUgdG8gaGFuZGxlIDJNQiByZWd1bGFyIGV4cHJlc3Npb25z
LgorICAgIFN0cmluZ0J1aWxkZXIgdG9vTWFueUFzOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzaXplICogNDsgKytpKQorICAgICAgICB0b29NYW55QXMuYXBwZW5kKCdBJyk7CisgICAg
RVhQRUNUX0VRKENvbnRlbnRFeHRlbnNpb25zOjpVUkxGaWx0ZXJQYXJzZXI6OlBhcnNlU3RhdHVz
OjpZYXJyRXJyb3IsIHBhcnNlci5hZGRQYXR0ZXJuKHRvb01hbnlBcy50b1N0cmluZygpLnV0Zjgo
KS5kYXRhKCksIGZhbHNlLCAwKSk7CisgICAgCisgICAgU3RyaW5nQnVpbGRlciBuZXN0ZWRHcm91
cHM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgbmVz
dGVkR3JvdXBzLmFwcGVuZCgnKCcpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXpl
OyArK2kpCisgICAgICAgIG5lc3RlZEdyb3Vwcy5hcHBlbmQoIkIpIik7CisgICAgLy8gRklYTUU6
IEFkZCBuZXN0ZWRHcm91cHMuIFJpZ2h0IG5vdyBpdCBhbHNvIHRha2VzIHRvbyBsb25nLiBJdCBz
aG91bGQgYmUgb3B0aW1pemVkLgorICAgIAorICAgIC8vIFRoaXMgc2hvdWxkIG5vdCBjcmFzaCBh
bmQgbm90IHRpbWVvdXQuCisgICAgRVhQRUNUX0VRKDF1bCwgY3JlYXRlTkZBcyhjb21iaW5lZFVS
TEZpbHRlcnMpLnNpemUoKSk7Cit9CisKIHZvaWQgY2hlY2tDb21waWxlckVycm9yKGNvbnN0IGNo
YXIqIGpzb24sIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uRXJyb3IgZXhwZWN0
ZWRFcnJvcikKIHsKICAgICBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uRGF0YSBleHRlbnNpb25EYXRhOwpAQCAtNjE2LDkgKzY0Niw5IEBAIFRFU1Rf
RihDb250ZW50RXh0ZW5zaW9uVGVzdCwgU3RyaWN0UHJlZmkKIFRFU1RfRihDb250ZW50RXh0ZW5z
aW9uVGVzdCwgU3RyaWN0UHJlZml4U2VwYXJhdGVkTWFjaGluZXMyKQogewogICAgIGF1dG8gYmFj
a2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0
cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXmZvb1wifX0sIgotICAgICJ7XCJhY3Rpb25cIjp7
XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeLipbYS1j
XStiYXJcIn19LCIKLSAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmln
Z2VyXCI6e1widXJsLWZpbHRlclwiOlwiXndlYmtpdDpcIn19LCIKLSAgICAie1wiYWN0aW9uXCI6
e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiW2EtY10r
Yitvb21cIn19XSIpOworICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0s
XCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXi4qW2EtY10rYmFyXCJ9fSwiCisgICAgICAg
ICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmls
dGVyXCI6XCJed2Via2l0OlwifX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwi
YmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiW2EtY10rYitvb21cIn19XSIp
OwogCiAgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDov
L3dlYmtpdC5vcmcvIiksIHsgfSk7CiAgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3Vt
ZW50UmVxdWVzdCgiZm9vOi8vd2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0
aW9uVHlwZTo6QmxvY2tMb2FkIH0pOwpAQCAtNjQ2LDYgKzY3NiwzNyBAQCBURVNUX0YoQ29udGVu
dEV4dGVuc2lvblRlc3QsIFN0cmljdFByZWZpCiAgICAgRVhQRUNUX0VRKDN1bCwgY3JlYXRlTkZB
cyhjb21iaW5lZFVSTEZpbHRlcnMpLnNpemUoKSk7CiB9CiAKK1RFU1RfRihDb250ZW50RXh0ZW5z
aW9uVGVzdCwgU3RyaWN0UHJlZml4U2VwYXJhdGVkTWFjaGluZXMzKQoreworICAgIGF1dG8gYmFj
a2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0
cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiQSpEXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25c
Ijp7XCJ0eXBlXCI6XCJpZ25vcmUtcHJldmlvdXMtcnVsZXNcIn0sXCJ0cmlnZ2VyXCI6e1widXJs
LWZpbHRlclwiOlwiQSpCQStcIn19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpc
ImJsb2NrLWNvb2tpZXNcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiQSpCQ1wifX1d
Iik7CisgICAgCisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgi
aHR0cDovL3dlYmtpdC5vcmcvRCIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpC
bG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVz
dCgiaHR0cDovL3dlYmtpdC5vcmcvQUFEIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5
cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRS
ZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9BQiIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJh
Y2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL0FCQSIpLCB7IH0s
IHRydWUpOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0
dHA6Ly93ZWJraXQub3JnL0FCQUQiKSwgeyB9LCB0cnVlKTsKKyAgICB0ZXN0UmVxdWVzdChiYWNr
ZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9CQyIpLCB7IENvbnRl
bnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXMgfSk7CisgICAgdGVzdFJlcXVl
c3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvQUJDIiks
IHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrQ29va2llcyB9KTsKKyAgICB0
ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9y
Zy9BQkFCQyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXMg
fSwgdHJ1ZSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgi
aHR0cDovL3dlYmtpdC5vcmcvQUJBQkNBRCIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25U
eXBlOjpCbG9ja0Nvb2tpZXMgfSwgdHJ1ZSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFp
bkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvQUJDQUQiKSwgeyBDb250ZW50RXh0
ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tDb29raWVzLCBDb250ZW50RXh0ZW5zaW9uczo6QWN0
aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworfQorICAgIAorVEVTVF9GKENvbnRlbnRFeHRlbnNpb25U
ZXN0LCBTdHJpY3RQcmVmaXhTZXBhcmF0ZWRNYWNoaW5lczNQYXJ0aXRpb25pbmcpCit7CisgICAg
Q29udGVudEV4dGVuc2lvbnM6OkNvbWJpbmVkVVJMRmlsdGVycyBjb21iaW5lZFVSTEZpbHRlcnM7
CisgICAgQ29udGVudEV4dGVuc2lvbnM6OlVSTEZpbHRlclBhcnNlciBwYXJzZXIoY29tYmluZWRV
UkxGaWx0ZXJzKTsKKyAgICAKKyAgICBFWFBFQ1RfRVEoQ29udGVudEV4dGVuc2lvbnM6OlVSTEZp
bHRlclBhcnNlcjo6UGFyc2VTdGF0dXM6Ok9rLCBwYXJzZXIuYWRkUGF0dGVybigiQSpEIiwgZmFs
c2UsIDApKTsKKyAgICBFWFBFQ1RfRVEoQ29udGVudEV4dGVuc2lvbnM6OlVSTEZpbHRlclBhcnNl
cjo6UGFyc2VTdGF0dXM6Ok9rLCBwYXJzZXIuYWRkUGF0dGVybigiQSpCQSsiLCBmYWxzZSwgMSkp
OworICAgIEVYUEVDVF9FUShDb250ZW50RXh0ZW5zaW9uczo6VVJMRmlsdGVyUGFyc2VyOjpQYXJz
ZVN0YXR1czo6T2ssIHBhcnNlci5hZGRQYXR0ZXJuKCJBKkJDIiwgZmFsc2UsIDIpKTsKKyAgICAK
KyAgICAvLyAiQSpBIiBhbmQgIkEqQkMiIGNhbiBiZSBncm91cGVkLCAiQSpCQSsiIHNob3VsZCBu
b3QuCisgICAgRVhQRUNUX0VRKDJ1bCwgY3JlYXRlTkZBcyhjb21iaW5lZFVSTEZpbHRlcnMpLnNp
emUoKSk7Cit9CisKIHN0YXRpYyB2b2lkIHRlc3RQYXR0ZXJuU3RhdHVzKFN0cmluZyBwYXR0ZXJu
LCBDb250ZW50RXh0ZW5zaW9uczo6VVJMRmlsdGVyUGFyc2VyOjpQYXJzZVN0YXR1cyBzdGF0dXMp
CiB7CiAgICAgQ29udGVudEV4dGVuc2lvbnM6OkNvbWJpbmVkVVJMRmlsdGVycyBjb21iaW5lZFVS
TEZpbHRlcnM7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252262</attachid>
            <date>2015-05-02 23:53:59 -0700</date>
            <delta_ts>2015-05-04 08:40:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144485-20150502235247.patch</filename>
            <type>text/plain</type>
            <size>20495</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzcyNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE1LTA1LTAyICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gQ29tYmluZSBORkFzIHByb3Blcmx5IGFuZCBmcmVlIG1lbW9yeSBhcyB3ZSBj
b21waWxlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQ0NDg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBjb3JyZWN0bHkgY29tYmluZXMgYWxsIHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2l0
aCBhIGNvbW1vbiBwcmVmaXggdXAgdG8KKyAgICAgICAgdGhlIGxhc3QgcXVhbnRpZmllZCB0ZXJt
IGludG8gdGhlIHNhbWUgTkZBLiAgSXQgYWxzbyBkZWxldGVzIHRoZSBwcmVmaXggdHJlZSBhcyBp
dCAKKyAgICAgICAgY3JlYXRlcyBORkFzLCB0aHVzIHJlZHVjaW5nIHRoZSBtYXhpbXVtIG1lbW9y
eSB1c2VkIHdoZW4gY29tcGlsaW5nLgorCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29t
YmluZWRVUkxGaWx0ZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpDb21iaW5lZFVSTEZpbHRlcnM6OmFkZFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6OmdlbmVyYXRlTkZBRm9yU3VidHJlZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6Q29tYmluZWRVUkxGaWx0ZXJzOjpwcm9jZXNzTkZBcyk6Cisg
ICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29tYmluZWRVUkxGaWx0ZXJzLmg6CisgICAgICAg
ICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNEZWJ1Z2dpbmcuaDoKKwogMjAx
NS0wNS0wMiAgR3l1eW91bmcgS2ltICA8Z3l1eW91bmcua2ltQHNhbXN1bmcuY29tPgogCiAgICAg
ICAgIFB1cmdlIFBhc3NSZWZQdHIgY3JlYXRlKCkgZmFjdG9yeSBmdW5jdGlvbnMgaW4gaHRtbCAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbWJpbmVkVVJMRmlsdGVy
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29t
YmluZWRVUkxGaWx0ZXJzLmNwcAkocmV2aXNpb24gMTgzNjc3KQorKysgU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvQ29tYmluZWRVUkxGaWx0ZXJzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDcsNyArNDcsNiBAQCB0eXBlZGVmIFZlY3RvcjxQcmVmaXhUcmVlRWRnZSwgMCwgV1RGOjpD
CiBzdHJ1Y3QgUHJlZml4VHJlZVZlcnRleCB7CiAgICAgUHJlZml4VHJlZUVkZ2VzIGVkZ2VzOwog
ICAgIEFjdGlvbkxpc3QgZmluYWxBY3Rpb25zOwotICAgIGJvb2wgaW5WYXJpYWJsZUxlbmd0aFBy
ZWZpeCB7IGZhbHNlIH07CiB9OwogCiAjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1BFUkZPUk1BTkNF
X1JFUE9SVElORwpAQCAtMTI4LDEzICsxMjcsOCBAQCB2b2lkIENvbWJpbmVkVVJMRmlsdGVyczo6
YWRkUGF0dGVybih1aW50CiAgICAgaWYgKHBhdHRlcm4uaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBWZWN0b3I8UHJlZml4VHJlZVZlcnRleCosIDEyOD4gcHJlZml4VHJlZVZlcnRp
Y2VzRm9yUGF0dGVybjsKLSAgICBwcmVmaXhUcmVlVmVydGljZXNGb3JQYXR0ZXJuLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkocGF0dGVybi5zaXplKCkgKyAxKTsKLQogICAgIC8vIEV4dGVuZCB0aGUg
cHJlZml4IHRyZWUgd2l0aCB0aGUgbmV3IHBhdHRlcm4uCi0gICAgYm9vbCBoYXNOZXdUZXJtID0g
ZmFsc2U7CiAgICAgUHJlZml4VHJlZVZlcnRleCogbGFzdFByZWZpeFRyZWUgPSBtX3ByZWZpeFRy
ZWVSb290LmdldCgpOwotICAgIHByZWZpeFRyZWVWZXJ0aWNlc0ZvclBhdHRlcm4uYXBwZW5kKGxh
c3RQcmVmaXhUcmVlKTsKIAogICAgIGZvciAoY29uc3QgVGVybSYgdGVybSA6IHBhdHRlcm4pIHsK
ICAgICAgICAgc2l6ZV90IG5leHRFbnRyeUluZGV4ID0gV1RGOjpub3RGb3VuZDsKQEAgLTE0Nywx
MjkgKzE0MSwxMzggQEAgdm9pZCBDb21iaW5lZFVSTEZpbHRlcnM6OmFkZFBhdHRlcm4odWludAog
ICAgICAgICBpZiAobmV4dEVudHJ5SW5kZXggIT0gV1RGOjpub3RGb3VuZCkKICAgICAgICAgICAg
IGxhc3RQcmVmaXhUcmVlID0gbGFzdFByZWZpeFRyZWUtPmVkZ2VzW25leHRFbnRyeUluZGV4XS5j
aGlsZC5nZXQoKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBoYXNOZXdUZXJtID0gdHJ1
ZTsKLQogICAgICAgICAgICAgbGFzdFByZWZpeFRyZWUtPmVkZ2VzLmFwcGVuZChQcmVmaXhUcmVl
RWRnZSh7dGVybSwgc3RkOjptYWtlX3VuaXF1ZTxQcmVmaXhUcmVlVmVydGV4PigpfSkpOwogICAg
ICAgICAgICAgbGFzdFByZWZpeFRyZWUgPSBsYXN0UHJlZml4VHJlZS0+ZWRnZXMubGFzdCgpLmNo
aWxkLmdldCgpOwogICAgICAgICB9Ci0gICAgICAgIHByZWZpeFRyZWVWZXJ0aWNlc0ZvclBhdHRl
cm4uYXBwZW5kKGxhc3RQcmVmaXhUcmVlKTsKICAgICB9CiAKLSAgICBBY3Rpb25MaXN0JiBhY3Rp
b25zID0gcHJlZml4VHJlZVZlcnRpY2VzRm9yUGF0dGVybi5sYXN0KCktPmZpbmFsQWN0aW9uczsK
KyAgICBBY3Rpb25MaXN0JiBhY3Rpb25zID0gbGFzdFByZWZpeFRyZWUtPmZpbmFsQWN0aW9uczsK
ICAgICBpZiAoYWN0aW9ucy5maW5kKGFjdGlvbklkKSA9PSBXVEY6Om5vdEZvdW5kKQogICAgICAg
ICBhY3Rpb25zLmFwcGVuZChhY3Rpb25JZCk7Ci0KLSAgICBpZiAoIWhhc05ld1Rlcm0pCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGJvb2wgaGFzU2VlblZhcmlhYmxlTGVuZ3RoVGVybXMgPSBmYWxz
ZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBwYXR0ZXJuLnNpemUoKTsgaS0tOykgewotICAgICAg
ICBjb25zdCBUZXJtJiB0ZXJtID0gcGF0dGVybltpXTsKLSAgICAgICAgaGFzU2VlblZhcmlhYmxl
TGVuZ3RoVGVybXMgfD0gIXRlcm0uaGFzRml4ZWRMZW5ndGgoKTsKLSAgICAgICAgcHJlZml4VHJl
ZVZlcnRpY2VzRm9yUGF0dGVybltpICsgMV0tPmluVmFyaWFibGVMZW5ndGhQcmVmaXggfD0gaGFz
U2VlblZhcmlhYmxlTGVuZ3RoVGVybXM7Ci0gICAgfQotICAgIHByZWZpeFRyZWVWZXJ0aWNlc0Zv
clBhdHRlcm5bMF0tPmluVmFyaWFibGVMZW5ndGhQcmVmaXggfD0gaGFzU2VlblZhcmlhYmxlTGVu
Z3RoVGVybXM7CiB9CiAKLXN0cnVjdCBBY3RpdmVTdWJ0cmVlIHsKLSAgICBjb25zdCBQcmVmaXhU
cmVlVmVydGV4KiB2ZXJ0ZXg7Ci0gICAgUHJlZml4VHJlZUVkZ2VzOjpjb25zdF9pdGVyYXRvciBp
dGVyYXRvcjsKLX07Ci0KLXN0YXRpYyB2b2lkIGdlbmVyYXRlTkZBRm9yU3VidHJlZShORkEmIG5m
YSwgdW5zaWduZWQgcm9vdElkLCBjb25zdCBQcmVmaXhUcmVlVmVydGV4JiBwcmVmaXhUcmVlVmVy
dGV4KQorc3RhdGljIHZvaWQgZ2VuZXJhdGVORkFGb3JTdWJ0cmVlKE5GQSYgbmZhLCB1bnNpZ25l
ZCBuZmFSb290SWQsIFByZWZpeFRyZWVWZXJ0ZXgmIHJvb3QpCiB7Ci0gICAgQVNTRVJUX1dJVEhf
TUVTU0FHRSghcHJlZml4VHJlZVZlcnRleC5pblZhcmlhYmxlTGVuZ3RoUHJlZml4LCAiVGhpcyBj
b2RlIGFzc3VtZXMgdGhlIHN1YnRyZWVzIHdpdGggdmFyaWFibGUgcHJlZml4IGxlbmd0aCBoYXZl
IGFscmVhZHkgYmVlbiBoYW5kbGVkLiIpOwotCi0gICAgc3RydWN0IEFjdGl2ZU5GQVN1YnRyZWUg
OiBBY3RpdmVTdWJ0cmVlIHsKLSAgICAgICAgQWN0aXZlTkZBU3VidHJlZShjb25zdCBQcmVmaXhU
cmVlVmVydGV4KiB2ZXJ0ZXgsIFByZWZpeFRyZWVFZGdlczo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0
b3IsIHVuc2lnbmVkIG5vZGVJbmRleCkKLSAgICAgICAgICAgIDogQWN0aXZlU3VidHJlZSh7IHZl
cnRleCwgaXRlcmF0b3IgfSkKLSAgICAgICAgICAgICwgbGFzdE5vZGVJbmRleChub2RlSW5kZXgp
CisgICAgLyoKKyAgICAvLyBOb24tcmVjdXJzaXZlIGZvcm0gb2YgdGhpczoKKyAgICBmb3IgKGF1
dG8mIGVkZ2UgOiByb290LmVkZ2VzKSB7CisgICAgICAgIGlmICghZWRnZS50ZXJtLmhhc0ZpeGVk
TGVuZ3RoKCkpCisgICAgICAgICAgICBjb250aW51ZTsgLy8gVGhpcyB3aWxsIGJlIGEgcGFydCBv
ZiBhbm90aGVyIE5GQS4KKyAgICAgICAgdW5zaWduZWQgc3VidHJlZVJvb3RJZCA9IGVkZ2UudGVy
bS5nZW5lcmF0ZUdyYXBoKG5mYSwgbmZhUm9vdElkLCBlZGdlLmNoaWxkLT5maW5hbEFjdGlvbnMp
OworICAgICAgICBnZW5lcmF0ZU5GQUZvclN1YnRyZWUobmZhLCBzdWJ0cmVlUm9vdElkLCAqZWRn
ZS5jaGlsZC5nZXQoKSk7CisgICAgICAgIGlmIChlZGdlLmNoaWxkLT5lZGdlcy5pc0VtcHR5KCkp
CisgICAgICAgICAgICBlZGdlLnRlcm0gPSBUZXJtKFRlcm06OkRlbGV0ZWRWYWx1ZSk7IC8vIE1h
cmsgdGhpcyBsZWFmIGZvciBkZWxldGluZy4KKyAgICB9CisgICAgcm9vdC5lZGdlcy5yZW1vdmVB
bGxNYXRjaGluZyhbXShQcmVmaXhUcmVlRWRnZSYgZWRnZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBlZGdlLnRlcm0uaXNEZWxldGVkVmFsdWUoKTsKKyAgICB9KTsKKyAgICAqLworICAgIAorICAg
IHN0cnVjdCBBY3RpdmVTdWJ0cmVlIHsKKyAgICAgICAgQWN0aXZlU3VidHJlZShQcmVmaXhUcmVl
VmVydGV4JiB2ZXJ0ZXgsIHVuc2lnbmVkIHJvb3RJZCwgdW5zaWduZWQgZWRnZUluZGV4KQorICAg
ICAgICAgICAgOiB2ZXJ0ZXgodmVydGV4KQorICAgICAgICAgICAgLCByb290SWQocm9vdElkKQor
ICAgICAgICAgICAgLCBlZGdlSW5kZXgoZWRnZUluZGV4KQogICAgICAgICB7CiAgICAgICAgIH0K
LSAgICAgICAgdW5zaWduZWQgbGFzdE5vZGVJbmRleDsKKyAgICAgICAgUHJlZml4VHJlZVZlcnRl
eCYgdmVydGV4OworICAgICAgICB1bnNpZ25lZCByb290SWQ7CisgICAgICAgIHVuc2lnbmVkIGVk
Z2VJbmRleDsKICAgICB9OwotCi0gICAgVmVjdG9yPEFjdGl2ZU5GQVN1YnRyZWU+IGFjdGl2ZVN0
YWNrOwotICAgIGFjdGl2ZVN0YWNrLmFwcGVuZChBY3RpdmVORkFTdWJ0cmVlKCZwcmVmaXhUcmVl
VmVydGV4LCBwcmVmaXhUcmVlVmVydGV4LmVkZ2VzLmJlZ2luKCksIHJvb3RJZCkpOwotCi0gICAg
d2hpbGUgKHRydWUpIHsKLSAgICBQcm9jZXNzU3VidHJlZToKLSAgICAgICAgZm9yIChBY3RpdmVO
RkFTdWJ0cmVlJiBhY3RpdmVTdWJ0cmVlID0gYWN0aXZlU3RhY2subGFzdCgpOyBhY3RpdmVTdWJ0
cmVlLml0ZXJhdG9yICE9IGFjdGl2ZVN1YnRyZWUudmVydGV4LT5lZGdlcy5lbmQoKTsgKythY3Rp
dmVTdWJ0cmVlLml0ZXJhdG9yKSB7Ci0gICAgICAgICAgICBpZiAoYWN0aXZlU3VidHJlZS5pdGVy
YXRvci0+Y2hpbGQtPmluVmFyaWFibGVMZW5ndGhQcmVmaXgpCisgICAgVmVjdG9yPEFjdGl2ZVN1
YnRyZWU+IHN0YWNrOworICAgIGlmICghcm9vdC5lZGdlcy5pc0VtcHR5KCkpCisgICAgICAgIHN0
YWNrLmFwcGVuZChBY3RpdmVTdWJ0cmVlKHJvb3QsIG5mYVJvb3RJZCwgMCkpOworICAgIAorICAg
IC8vIEdlbmVyYXRlIGdyYXBocyBmb3IgZWFjaCBzdWJ0cmVlIHRoYXQgZG9lcyBub3QgY29udGFp
biBhbnkgcXVhbnRpZmllcnMuCisgICAgd2hpbGUgKCFzdGFjay5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgUHJlZml4VHJlZVZlcnRleCYgdmVydGV4ID0gc3RhY2subGFzdCgpLnZlcnRleDsKKyAgICAg
ICAgY29uc3QgdW5zaWduZWQgZWRnZUluZGV4ID0gc3RhY2subGFzdCgpLmVkZ2VJbmRleDsKKwor
ICAgICAgICBpZiAoZWRnZUluZGV4ID49IHZlcnRleC5lZGdlcy5zaXplKCkpIHsKKyAgICAgICAg
ICAgIEFTU0VSVChlZGdlSW5kZXggPT0gdmVydGV4LmVkZ2VzLnNpemUoKSk7CisgICAgICAgICAg
ICB2ZXJ0ZXguZWRnZXMucmVtb3ZlQWxsTWF0Y2hpbmcoW10oUHJlZml4VHJlZUVkZ2UmIGVkZ2Up
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVkZ2UudGVybS5pc0RlbGV0
ZWRWYWx1ZSgpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBzdGFjay5yZW1vdmVMYXN0
KCk7CisgICAgICAgICAgICBpZiAoIXN0YWNrLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAg
IGF1dG8mIGVkZ2UgPSBzdGFjay5sYXN0KCkudmVydGV4LmVkZ2VzW3N0YWNrLmxhc3QoKS5lZGdl
SW5kZXhdOworICAgICAgICAgICAgICAgIGlmIChlZGdlLmNoaWxkLT5lZGdlcy5pc0VtcHR5KCkp
CisgICAgICAgICAgICAgICAgICAgIGVkZ2UudGVybSA9IFRlcm0oVGVybTo6RGVsZXRlZFZhbHVl
KTsgLy8gTWFyayB0aGlzIGxlYWYgZm9yIGRlbGV0aW5nLgorICAgICAgICAgICAgICAgIHN0YWNr
Lmxhc3QoKS5lZGdlSW5kZXgrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGF1dG8mIGVkZ2UgPSB2ZXJ0ZXguZWRnZXNbZWRnZUluZGV4XTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgLy8gUXVhbnRpZmllZCBlZGdlcyBpbiB0aGUgc3VidHJlZSB3aWxs
IGJlIGEgcGFydCBvZiBhbm90aGVyIE5GQS4KKyAgICAgICAgICAgIGlmICghZWRnZS50ZXJtLmhh
c0ZpeGVkTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBzdGFjay5sYXN0KCkuZWRnZUluZGV4
Kys7CiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGNvbnN0IFRlcm0m
IHRlcm0gPSBhY3RpdmVTdWJ0cmVlLml0ZXJhdG9yLT50ZXJtOwotICAgICAgICAgICAgdW5zaWdu
ZWQgbmV3RW5kTm9kZUluZGV4ID0gdGVybS5nZW5lcmF0ZUdyYXBoKG5mYSwgYWN0aXZlU3VidHJl
ZS5sYXN0Tm9kZUluZGV4LCBhY3RpdmVTdWJ0cmVlLml0ZXJhdG9yLT5jaGlsZC0+ZmluYWxBY3Rp
b25zKTsKLQotICAgICAgICAgICAgUHJlZml4VHJlZVZlcnRleCogcHJlZml4VHJlZVZlcnRleCA9
IGFjdGl2ZVN1YnRyZWUuaXRlcmF0b3ItPmNoaWxkLmdldCgpOwotICAgICAgICAgICAgaWYgKCFw
cmVmaXhUcmVlVmVydGV4LT5lZGdlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBhY3Rp
dmVTdGFjay5hcHBlbmQoQWN0aXZlTkZBU3VidHJlZShwcmVmaXhUcmVlVmVydGV4LCBwcmVmaXhU
cmVlVmVydGV4LT5lZGdlcy5iZWdpbigpLCBuZXdFbmROb2RlSW5kZXgpKTsKLSAgICAgICAgICAg
ICAgICBnb3RvIFByb2Nlc3NTdWJ0cmVlOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICB1bnNpZ25lZCBzdWJ0cmVlUm9vdElkID0gZWRnZS50ZXJtLmdlbmVyYXRlR3Jh
cGgobmZhLCBzdGFjay5sYXN0KCkucm9vdElkLCBlZGdlLmNoaWxkLT5maW5hbEFjdGlvbnMpOwor
ICAgICAgICAgICAgQVNTRVJUKGVkZ2UuY2hpbGQuZ2V0KCkpOworICAgICAgICAgICAgc3RhY2su
YXBwZW5kKEFjdGl2ZVN1YnRyZWUoKmVkZ2UuY2hpbGQuZ2V0KCksIHN1YnRyZWVSb290SWQsIDAp
KTsKICAgICAgICAgfQotCi0gICAgICAgIGFjdGl2ZVN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAg
ICAgaWYgKGFjdGl2ZVN0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICArK2FjdGl2ZVN0YWNrLmxhc3QoKS5pdGVyYXRvcjsKICAgICB9CiB9CiAKLXZvaWQgQ29tYmlu
ZWRVUkxGaWx0ZXJzOjpwcm9jZXNzTkZBcyhzdGQ6OmZ1bmN0aW9uPHZvaWQoTkZBJiYpPiBoYW5k
bGVyKSBjb25zdAordm9pZCBDb21iaW5lZFVSTEZpbHRlcnM6OnByb2Nlc3NORkFzKHN0ZDo6ZnVu
Y3Rpb248dm9pZChORkEmJik+IGhhbmRsZXIpCiB7Ci0gICAgVmVjdG9yPEFjdGl2ZVN1YnRyZWU+
IGFjdGl2ZVN0YWNrOwotICAgIGFjdGl2ZVN0YWNrLmFwcGVuZChBY3RpdmVTdWJ0cmVlKHsgbV9w
cmVmaXhUcmVlUm9vdC5nZXQoKSwgbV9wcmVmaXhUcmVlUm9vdC0+ZWRnZXMuYmVnaW4oKSB9KSk7
Ci0KKyNpZiBDT05URU5UX0VYVEVOU0lPTlNfU1RBVEVfTUFDSElORV9ERUJVR0dJTkcKKyAgICBw
cmludCgpOworI2VuZGlmCiAgICAgd2hpbGUgKHRydWUpIHsKLSAgICBQcm9jZXNzU3VidHJlZToK
LSAgICAgICAgQWN0aXZlU3VidHJlZSYgYWN0aXZlU3VidHJlZSA9IGFjdGl2ZVN0YWNrLmxhc3Qo
KTsKLQotICAgICAgICAvLyBXZSBnbyBkZXB0aCBmaXJzdCBpbnRvIHRoZSBzdWJ0cmVlcyB3aXRo
IHZhcmlhYmxlIHByZWZpeC4gRmluZCB0aGUgbmV4dCBzdWJ0cmVlLgotICAgICAgICBmb3IgKDsg
YWN0aXZlU3VidHJlZS5pdGVyYXRvciAhPSBhY3RpdmVTdWJ0cmVlLnZlcnRleC0+ZWRnZXMuZW5k
KCk7ICsrYWN0aXZlU3VidHJlZS5pdGVyYXRvcikgewotICAgICAgICAgICAgUHJlZml4VHJlZVZl
cnRleCogcHJlZml4VHJlZVZlcnRleCA9IGFjdGl2ZVN1YnRyZWUuaXRlcmF0b3ItPmNoaWxkLmdl
dCgpOwotICAgICAgICAgICAgaWYgKHByZWZpeFRyZWVWZXJ0ZXgtPmluVmFyaWFibGVMZW5ndGhQ
cmVmaXgpIHsKLSAgICAgICAgICAgICAgICBhY3RpdmVTdGFjay5hcHBlbmQoQWN0aXZlU3VidHJl
ZSh7IHByZWZpeFRyZWVWZXJ0ZXgsIHByZWZpeFRyZWVWZXJ0ZXgtPmVkZ2VzLmJlZ2luKCkgfSkp
OwotICAgICAgICAgICAgICAgIGdvdG8gUHJvY2Vzc1N1YnRyZWU7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgIC8vIFRyYXZlcnNlIG91dCB0byBhIGxlYWYuCisgICAgICAgIFZlY3RvcjxQcmVmaXhU
cmVlVmVydGV4JiwgMTI4PiBzdGFjazsKKyAgICAgICAgQVNTRVJUKG1fcHJlZml4VHJlZVJvb3Qp
OworICAgICAgICBQcmVmaXhUcmVlVmVydGV4KiB2ZXJ0ZXggPSBtX3ByZWZpeFRyZWVSb290Lmdl
dCgpOworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgc3RhY2suYXBwZW5kKHZl
cnRleCk7CisgICAgICAgICAgICBpZiAodmVydGV4LT5lZGdlcy5pc0VtcHR5KCkpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB2ZXJ0ZXggPSB2ZXJ0ZXgtPmVkZ2VzLmxhc3Qo
KS5jaGlsZC5nZXQoKTsKICAgICAgICAgfQotCi0gICAgICAgIC8vIEFmdGVyIHdlIHJlYWNoZWQg
aGVyZSwgd2Uga25vdyB0aGF0IGFsbCB0aGUgc3VidHJlZXMgd2l0aCB2YXJpYWJsZSBwcmVmaXhl
cyBoYXZlIGJlZW4gcHJvY2Vzc2VkLAotICAgICAgICAvLyB0aW1lIHRvIGdlbmVyYXRlIHRoZSBO
RkEgZm9yIHRoZSBncmFwaCByb290ZWQgaGVyZS4KLSAgICAgICAgYm9vbCBuZWVkVG9HZW5lcmF0
ZSA9IGFjdGl2ZVN1YnRyZWUudmVydGV4LT5lZGdlcy5pc0VtcHR5KCkgJiYgIWFjdGl2ZVN1YnRy
ZWUudmVydGV4LT5maW5hbEFjdGlvbnMuaXNFbXB0eSgpOwotICAgICAgICBpZiAoIW5lZWRUb0dl
bmVyYXRlKSB7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVkZ2UgOiBhY3RpdmVTdWJ0
cmVlLnZlcnRleC0+ZWRnZXMpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWVkZ2UuY2hpbGQtPmlu
VmFyaWFibGVMZW5ndGhQcmVmaXgpIHsKLSAgICAgICAgICAgICAgICAgICAgbmVlZFRvR2VuZXJh
dGUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChzdGFjay5zaXplKCkgPT0gMSkKKyAgICAgICAg
ICAgIGJyZWFrOyAvLyBXZSdyZSBkb25lIG9uY2Ugd2UgaGF2ZSBwcm9jZXNzZWQgYW5kIHJlbW92
ZWQgYWxsIHRoZSBlZGdlcyBpbiB0aGUgcHJlZml4IHRyZWUuCisgICAgICAgIAorICAgICAgICAv
LyBGaW5kIHRoZSBwcmVmaXggcm9vdCBmb3IgdGhpcyBORkEuIFRoaXMgaXMgdGhlIHZlcnRleCBh
ZnRlciB0aGUgbGFzdCB0ZXJtIHdpdGggYSBxdWFudGlmaWVyIGlmIHRoZXJlIGlzIG9uZSwKKyAg
ICAgICAgLy8gb3IgdGhlIHJvb3QgaWYgdGhlcmUgYXJlIG5vIHF1YW50aWZpZXJzIGxlZnQuCisg
ICAgICAgIHdoaWxlIChzdGFjay5zaXplKCkgPiAxKSB7CisgICAgICAgICAgICBpZiAoIXN0YWNr
W3N0YWNrLnNpemUoKSAtIDJdLT5lZGdlcy5sYXN0KCkudGVybS5oYXNGaXhlZExlbmd0aCgpKQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgc3RhY2sucmVtb3ZlTGFzdCgpOwog
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5lZWRUb0dlbmVyYXRlKSB7Ci0gICAgICAgICAgICBO
RkEgbmZhOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBwcmVmaXhFbmQgPSBuZmEucm9vdCgpOwot
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYWN0aXZlU3RhY2suc2l6ZSgp
IC0gMTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVGVybSYgdGVybSA9IGFjdGl2ZVN0
YWNrW2ldLml0ZXJhdG9yLT50ZXJtOwotICAgICAgICAgICAgICAgIHByZWZpeEVuZCA9IHRlcm0u
Z2VuZXJhdGVHcmFwaChuZmEsIHByZWZpeEVuZCwgYWN0aXZlU3RhY2tbaV0uaXRlcmF0b3ItPmNo
aWxkLT5maW5hbEFjdGlvbnMpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKGNv
bnN0IGF1dG8mIGVkZ2UgOiBhY3RpdmVTdWJ0cmVlLnZlcnRleC0+ZWRnZXMpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoIWVkZ2UuY2hpbGQtPmluVmFyaWFibGVMZW5ndGhQcmVmaXgpIHsKLSAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgbmV3U3VidHJlZVN0YXJ0ID0gZWRnZS50ZXJtLmdlbmVy
YXRlR3JhcGgobmZhLCBwcmVmaXhFbmQsIGVkZ2UuY2hpbGQtPmZpbmFsQWN0aW9ucyk7Ci0gICAg
ICAgICAgICAgICAgICAgIGdlbmVyYXRlTkZBRm9yU3VidHJlZShuZmEsIG5ld1N1YnRyZWVTdGFy
dCwgKmVkZ2UuY2hpbGQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgaGFuZGxlcihXVEY6Om1vdmUobmZhKSk7CisgICAgICAgIEFT
U0VSVF9XSVRIX01FU1NBR0UoIXN0YWNrLmlzRW1wdHkoKSwgIkF0IGxlYXN0IHRoZSByb290IHNo
b3VsZCBiZSBpbiB0aGUgc3RhY2siKTsKKyAgICAgICAgCisgICAgICAgIC8vIE1ha2UgYW4gTkZB
IHdpdGggdGhlIHN1YnRyZWVzIGZvciB3aG9tIHRoaXMgaXMgYWxzbyB0aGUgbGFzdCBxdWFudGlm
aWVyIChvciB3aG8gYWxzbyBoYXZlIG5vIHF1YW50aWZpZXIpLgorICAgICAgICBORkEgbmZhOwor
ICAgICAgICAvLyBQdXQgdGhlIHByZWZpeCBpbnRvIHRoZSBORkEuCisgICAgICAgIHVuc2lnbmVk
IHByZWZpeEVuZCA9IG5mYS5yb290KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzdGFjay5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgICAgIEFTU0VSVCghc3RhY2tbaV0t
PmVkZ2VzLmlzRW1wdHkoKSk7CisgICAgICAgICAgICBjb25zdCBQcmVmaXhUcmVlRWRnZSYgZWRn
ZSA9IHN0YWNrW2ldLT5lZGdlcy5sYXN0KCk7CisgICAgICAgICAgICBwcmVmaXhFbmQgPSBlZGdl
LnRlcm0uZ2VuZXJhdGVHcmFwaChuZmEsIHByZWZpeEVuZCwgZWRnZS5jaGlsZC0+ZmluYWxBY3Rp
b25zKTsKKyAgICAgICAgfQorICAgICAgICAvLyBQdXQgdGhlIG5vbi1xdWFudGlmaWVkIHZlcnRp
Y2VzIGluIHRoZSBzdWJ0cmVlIGludG8gdGhlIE5GQSBhbmQgZGVsZXRlIHRoZW0uCisgICAgICAg
IEFTU0VSVChzdGFjay5sYXN0KCkpOworICAgICAgICBnZW5lcmF0ZU5GQUZvclN1YnRyZWUobmZh
LCBwcmVmaXhFbmQsICpzdGFjay5sYXN0KCkpOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6
IENvbWJpbmUgc21hbGwgTkZBcyB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBORkFzLgorICAgICAg
ICBoYW5kbGVyKFdURjo6bW92ZShuZmEpKTsKKyAgICAgICAgCisgICAgICAgIC8vIENsZWFuIHVw
IGFueSBwcm9jZXNzZWQgbGVhZiBub2Rlcy4KKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAg
ICAgICAgIGlmIChzdGFjay5zaXplKCkgPiAxKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0YWNr
Lmxhc3QoKS0+ZWRnZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YWNrW3N0
YWNrLnNpemUoKSAtIDJdLT5lZGdlcy5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAgICAgICAg
IHN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7IC8vIFZlcnRleCBpcyBub3QgYSBsZWFmLgorICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgYnJlYWs7IC8vIExlYXZlIHRoZSBlbXB0eSByb290LgogICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gV2UgaGF2ZSBwcm9jZXNzZWQgYWxsIHRoZSBzdWJ0cmVlcyBv
ZiB0aGlzIGxldmVsLCBwb3AgdGhlIHN0YWNrIGFuZCBtb3ZlIG9uIHRvIHRoZSBuZXh0IHNpYmxp
bmcuCi0gICAgICAgIGFjdGl2ZVN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgaWYgKGFjdGl2
ZVN0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICArK2FjdGl2ZVN0
YWNrLmxhc3QoKS5pdGVyYXRvcjsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL0NvbWJpbmVkVVJMRmlsdGVycy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbWJpbmVkVVJMRmlsdGVycy5oCShyZXZpc2lv
biAxODM2NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVS
TEZpbHRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGFkZFBhdHRlcm4odWludDY0X3QgcGF0dGVybklkLCBjb25zdCBWZWN0b3I8VGVybT4m
IHBhdHRlcm4pOwogCi0gICAgdm9pZCBwcm9jZXNzTkZBcyhzdGQ6OmZ1bmN0aW9uPHZvaWQoTkZB
JiYpPiBoYW5kbGVyKSBjb25zdDsKKyAgICB2b2lkIHByb2Nlc3NORkFzKHN0ZDo6ZnVuY3Rpb248
dm9pZChORkEmJik+IGhhbmRsZXIpOwogICAgIHZvaWQgY2xlYXIoKTsKIAogI2lmIENPTlRFTlRf
RVhURU5TSU9OU19QRVJGT1JNQU5DRV9SRVBPUlRJTkcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zRGVidWdnaW5nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNEZWJ1
Z2dpbmcuaAkocmV2aXNpb24gMTgzNjY3KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvQ29udGVudEV4dGVuc2lvbnNEZWJ1Z2dpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMzYs
NyArMzYsNyBAQAogI2RlZmluZSBDT05URU5UX0VYVEVOU0lPTlNfUEFHRV9TSVpFIDE2Mzg0CiAK
ICNpZiBDT05URU5UX0VYVEVOU0lPTlNfUEVSRk9STUFOQ0VfUkVQT1JUSU5HCi0jZGVmaW5lIExP
R19MQVJHRV9TVFJVQ1RVUkVTKG5hbWUsIHNpemUpIGlmIChzaXplID4gMTAwMDAwMCkgeyBkYXRh
TG9nRigiTkFNRTogJXMgU0laRSAlZCIsICNuYW1lLCAoaW50KShzaXplKSk7IH07CisjZGVmaW5l
IExPR19MQVJHRV9TVFJVQ1RVUkVTKG5hbWUsIHNpemUpIGlmIChzaXplID4gMTAwMDAwMCkgeyBk
YXRhTG9nRigiTkFNRTogJXMgU0laRSAlZFxuIiwgI25hbWUsIChpbnQpKHNpemUpKTsgfTsKICNl
bHNlCiAjZGVmaW5lIExPR19MQVJHRV9TVFJVQ1RVUkVTKG5hbWUsIHNpemUpCiAjZW5kaWYKSW5k
ZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDE4MzcyNikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE1IEBACisyMDE1LTA1LTAyICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQgRXh0ZW5zaW9uc10gQ29tYmluZSBORkFzIHByb3Bl
cmx5IGFuZCBmcmVlIG1lbW9yeSBhcyB3ZSBjb21waWxlLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NDg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
Q29udGVudEV4dGVuc2lvbnMuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToK
KyAgICAgICAgQWRkZWQgdGVzdHMgZm9yIGNvcnJlY3RseSBzcGxpdHRpbmcgdXAgTkZBcyB3aXRo
IHVucXVhbnRpZmllZCB0ZXJtcyBhZnRlciBxdWFudGlmaWVkIHRlcm1zLgorICAgICAgICBBZGRl
ZCB0ZXN0cyBmb3IgZGVlcCBORkFzLgorCiAyMDE1LTA1LTAxICBNYXJpbyBTYW5jaGV6IFByYWRh
ICA8bWFyaW9AZW5kbGVzc20uY29tPgogCiAgICAgICAgIGNoZWNrLXdlYmtpdC1zdHlsZSBmYWls
cyBkdWUgdG8gc3lzdGVtIHB5bGludApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwCShyZXZpc2lvbiAxODM1
NTYpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTUsMTAgKzQ5NSw5IEBAIFRFU1RfRihDb250ZW50
RXh0ZW5zaW9uVGVzdCwgUmVzb3VyY2VPckwKICAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCB7VVJM
KFVSTCgpLCAiaHR0cDovL3dlYmtpdC5vcmciKSwgVVJMKFVSTCgpLCAiaHR0cDovL25vdF93ZWJr
aXQub3JnIiksIFJlc291cmNlVHlwZTo6SW1hZ2V9LCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rp
b25UeXBlOjpCbG9ja0Nvb2tpZXMsIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9j
a0xvYWQgfSk7CiB9CiAgICAgCi1URVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIE11bHRpREZB
KQorVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBXaWRlTkZBKQogewogICAgIC8vIE1ha2Ug
YW4gTkZBIHdpdGggYWJvdXQgMTQwMCBub2Rlcy4KLSAgICAvLyBGSVhNRTogVGhpcyBkb2VzIG5v
dCBtYWtlIG11bHRpcGxlIERGQXMgYW55bW9yZS4gQWRkIGEgdGVzdCB0aGF0IGRvZXMuCiAgICAg
U3RyaW5nQnVpbGRlciBydWxlTGlzdDsKICAgICBydWxlTGlzdC5hcHBlbmQoJ1snKTsKICAgICBm
b3IgKGNoYXIgYzEgPSAnQSc7IGMxIDw9ICdaJzsgKytjMSkgewpAQCAtNTMzLDYgKzUzMiwzNyBA
QCBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIE11bHRpREZBKQogICAgIHRlc3RSZXF1ZXN0
KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnLyIpLCB7IH0p
OwogfQogCitURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIERlZXBORkEpCit7CisgICAgY29u
c3QgdW5zaWduZWQgc2l6ZSA9IDUwMDAwMDsKKyAgICAKKyAgICBDb250ZW50RXh0ZW5zaW9uczo6
Q29tYmluZWRVUkxGaWx0ZXJzIGNvbWJpbmVkVVJMRmlsdGVyczsKKyAgICBDb250ZW50RXh0ZW5z
aW9uczo6VVJMRmlsdGVyUGFyc2VyIHBhcnNlcihjb21iaW5lZFVSTEZpbHRlcnMpOworICAgIAor
ICAgIC8vIEZJWE1FOiBERkFUb05GQTo6Y29udmVydCB0YWtlcyB3YXkgdG9vIGxvbmcgb24gdGhl
c2UgZGVlcCBORkFzLiBXZSBzaG91bGQgb3B0aW1pemUgZm9yIHRoYXQgY2FzZS4KKyAgICAKKyAg
ICBTdHJpbmdCdWlsZGVyIGxvdHNPZkFzOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
aXplOyArK2kpCisgICAgICAgIGxvdHNPZkFzLmFwcGVuZCgnQScpOworICAgIEVYUEVDVF9FUShD
b250ZW50RXh0ZW5zaW9uczo6VVJMRmlsdGVyUGFyc2VyOjpQYXJzZVN0YXR1czo6T2ssIHBhcnNl
ci5hZGRQYXR0ZXJuKGxvdHNPZkFzLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgZmFsc2UsIDAp
KTsKKyAgICAKKyAgICAvLyBGSVhNRTogWWFyciBvdWdodCB0byBiZSBhYmxlIHRvIGhhbmRsZSAy
TUIgcmVndWxhciBleHByZXNzaW9ucy4KKyAgICBTdHJpbmdCdWlsZGVyIHRvb01hbnlBczsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZSAqIDQ7ICsraSkKKyAgICAgICAgdG9vTWFu
eUFzLmFwcGVuZCgnQScpOworICAgIEVYUEVDVF9FUShDb250ZW50RXh0ZW5zaW9uczo6VVJMRmls
dGVyUGFyc2VyOjpQYXJzZVN0YXR1czo6WWFyckVycm9yLCBwYXJzZXIuYWRkUGF0dGVybih0b29N
YW55QXMudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBmYWxzZSwgMCkpOworICAgIAorICAgIFN0
cmluZ0J1aWxkZXIgbmVzdGVkR3JvdXBzOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
aXplOyArK2kpCisgICAgICAgIG5lc3RlZEdyb3Vwcy5hcHBlbmQoJygnKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBuZXN0ZWRHcm91cHMuYXBwZW5k
KCJCKSIpOworICAgIC8vIEZJWE1FOiBBZGQgbmVzdGVkR3JvdXBzLiBSaWdodCBub3cgaXQgYWxz
byB0YWtlcyB0b28gbG9uZy4gSXQgc2hvdWxkIGJlIG9wdGltaXplZC4KKyAgICAKKyAgICAvLyBU
aGlzIHNob3VsZCBub3QgY3Jhc2ggYW5kIG5vdCB0aW1lb3V0LgorICAgIEVYUEVDVF9FUSgxdWws
IGNyZWF0ZU5GQXMoY29tYmluZWRVUkxGaWx0ZXJzKS5zaXplKCkpOworfQorCiB2b2lkIGNoZWNr
Q29tcGlsZXJFcnJvcihjb25zdCBjaGFyKiBqc29uLCBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVu
dEV4dGVuc2lvbkVycm9yIGV4cGVjdGVkRXJyb3IpCiB7CiAgICAgV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEgZXh0ZW5zaW9uRGF0YTsKQEAg
LTYxNiw5ICs2NDYsOSBAQCBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIFN0cmljdFByZWZp
CiBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIFN0cmljdFByZWZpeFNlcGFyYXRlZE1hY2hp
bmVzMikKIHsKICAgICBhdXRvIGJhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntc
InR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5mb29cIn19
LCIKLSAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1wi
dXJsLWZpbHRlclwiOlwiXi4qW2EtY10rYmFyXCJ9fSwiCi0gICAgIntcImFjdGlvblwiOntcInR5
cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl53ZWJraXQ6XCJ9
fSwiCi0gICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntc
InVybC1maWx0ZXJcIjpcIlthLWNdK2Irb29tXCJ9fV0iKTsKKyAgICAgICAgIntcImFjdGlvblwi
OntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl4uKlth
LWNdK2JhclwifX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0s
XCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXndlYmtpdDpcIn19LCIKKyAgICAgICAgIntc
ImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJc
IjpcIlthLWNdK2Irb29tXCJ9fV0iKTsKIAogICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5E
b2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnLyIpLCB7IH0pOwogICAgIHRlc3RSZXF1
ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImZvbzovL3dlYmtpdC5vcmcvIiksIHsg
Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKQEAgLTY0Niw2ICs2
NzYsMzcgQEAgVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBTdHJpY3RQcmVmaQogICAgIEVY
UEVDVF9FUSgzdWwsIGNyZWF0ZU5GQXMoY29tYmluZWRVUkxGaWx0ZXJzKS5zaXplKCkpOwogfQog
CitURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIFN0cmljdFByZWZpeFNlcGFyYXRlZE1hY2hp
bmVzMykKK3sKKyAgICBhdXRvIGJhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntc
InR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIkEqRFwifX0s
IgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiaWdub3JlLXByZXZpb3VzLXJ1bGVz
XCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIkEqQkErXCJ9fSwiCisgICAgICAgICJ7
XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9jay1jb29raWVzXCJ9LFwidHJpZ2dlclwiOntcInVy
bC1maWx0ZXJcIjpcIkEqQkNcIn19XSIpOworICAgIAorICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQs
IG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL0QiKSwgeyBDb250ZW50RXh0
ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tl
bmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL0FBRCIpLCB7IENvbnRl
bnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3Qo
YmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvQUIiKSwgeyB9
KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8v
d2Via2l0Lm9yZy9BQkEiKSwgeyB9LCB0cnVlKTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9BQkFEIiksIHsgfSwgdHJ1ZSk7
CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dl
YmtpdC5vcmcvQkMiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tDb29r
aWVzIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0
dHA6Ly93ZWJraXQub3JnL0FCQyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpC
bG9ja0Nvb2tpZXMgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVx
dWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvQUJBQkMiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0
aW9uVHlwZTo6QmxvY2tDb29raWVzIH0sIHRydWUpOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQs
IG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL0FCQUJDQUQiKSwgeyBDb250
ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tDb29raWVzIH0sIHRydWUpOworICAgIHRl
c3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3Jn
L0FCQ0FEIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrQ29va2llcywg
Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKK30KKyAgICAKK1RF
U1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgU3RyaWN0UHJlZml4U2VwYXJhdGVkTWFjaGluZXMz
UGFydGl0aW9uaW5nKQoreworICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb21iaW5lZFVSTEZpbHRl
cnMgY29tYmluZWRVUkxGaWx0ZXJzOworICAgIENvbnRlbnRFeHRlbnNpb25zOjpVUkxGaWx0ZXJQ
YXJzZXIgcGFyc2VyKGNvbWJpbmVkVVJMRmlsdGVycyk7CisgICAgCisgICAgRVhQRUNUX0VRKENv
bnRlbnRFeHRlbnNpb25zOjpVUkxGaWx0ZXJQYXJzZXI6OlBhcnNlU3RhdHVzOjpPaywgcGFyc2Vy
LmFkZFBhdHRlcm4oIkEqRCIsIGZhbHNlLCAwKSk7CisgICAgRVhQRUNUX0VRKENvbnRlbnRFeHRl
bnNpb25zOjpVUkxGaWx0ZXJQYXJzZXI6OlBhcnNlU3RhdHVzOjpPaywgcGFyc2VyLmFkZFBhdHRl
cm4oIkEqQkErIiwgZmFsc2UsIDEpKTsKKyAgICBFWFBFQ1RfRVEoQ29udGVudEV4dGVuc2lvbnM6
OlVSTEZpbHRlclBhcnNlcjo6UGFyc2VTdGF0dXM6Ok9rLCBwYXJzZXIuYWRkUGF0dGVybigiQSpC
QyIsIGZhbHNlLCAyKSk7CisgICAgCisgICAgLy8gIkEqQSIgYW5kICJBKkJDIiBjYW4gYmUgZ3Jv
dXBlZCwgIkEqQkErIiBzaG91bGQgbm90LgorICAgIEVYUEVDVF9FUSgydWwsIGNyZWF0ZU5GQXMo
Y29tYmluZWRVUkxGaWx0ZXJzKS5zaXplKCkpOworfQorCiBzdGF0aWMgdm9pZCB0ZXN0UGF0dGVy
blN0YXR1cyhTdHJpbmcgcGF0dGVybiwgQ29udGVudEV4dGVuc2lvbnM6OlVSTEZpbHRlclBhcnNl
cjo6UGFyc2VTdGF0dXMgc3RhdHVzKQogewogICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb21iaW5l
ZFVSTEZpbHRlcnMgY29tYmluZWRVUkxGaWx0ZXJzOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252312</attachid>
            <date>2015-05-04 08:40:52 -0700</date>
            <delta_ts>2015-05-04 08:55:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144485-20150504083938.patch</filename>
            <type>text/plain</type>
            <size>20490</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzcyNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE1LTA1LTAyICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gQ29tYmluZSBORkFzIHByb3Blcmx5IGFuZCBmcmVlIG1lbW9yeSBhcyB3ZSBj
b21waWxlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQ0NDg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBjb3JyZWN0bHkgY29tYmluZXMgYWxsIHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2l0
aCBhIGNvbW1vbiBwcmVmaXggdXAgdG8KKyAgICAgICAgdGhlIGxhc3QgcXVhbnRpZmllZCB0ZXJt
IGludG8gdGhlIHNhbWUgTkZBLiAgSXQgYWxzbyBkZWxldGVzIHRoZSBwcmVmaXggdHJlZSBhcyBp
dCAKKyAgICAgICAgY3JlYXRlcyBORkFzLCB0aHVzIHJlZHVjaW5nIHRoZSBtYXhpbXVtIG1lbW9y
eSB1c2VkIHdoZW4gY29tcGlsaW5nLgorCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29t
YmluZWRVUkxGaWx0ZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpDb21iaW5lZFVSTEZpbHRlcnM6OmFkZFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6OmdlbmVyYXRlTkZBRm9yU3VidHJlZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6Q29tYmluZWRVUkxGaWx0ZXJzOjpwcm9jZXNzTkZBcyk6Cisg
ICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29tYmluZWRVUkxGaWx0ZXJzLmg6CisgICAgICAg
ICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNEZWJ1Z2dpbmcuaDoKKwogMjAx
NS0wNS0wMiAgR3l1eW91bmcgS2ltICA8Z3l1eW91bmcua2ltQHNhbXN1bmcuY29tPgogCiAgICAg
ICAgIFB1cmdlIFBhc3NSZWZQdHIgY3JlYXRlKCkgZmFjdG9yeSBmdW5jdGlvbnMgaW4gaHRtbCAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbWJpbmVkVVJMRmlsdGVy
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29t
YmluZWRVUkxGaWx0ZXJzLmNwcAkocmV2aXNpb24gMTgzNjc3KQorKysgU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvQ29tYmluZWRVUkxGaWx0ZXJzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDcsNyArNDcsNiBAQCB0eXBlZGVmIFZlY3RvcjxQcmVmaXhUcmVlRWRnZSwgMCwgV1RGOjpD
CiBzdHJ1Y3QgUHJlZml4VHJlZVZlcnRleCB7CiAgICAgUHJlZml4VHJlZUVkZ2VzIGVkZ2VzOwog
ICAgIEFjdGlvbkxpc3QgZmluYWxBY3Rpb25zOwotICAgIGJvb2wgaW5WYXJpYWJsZUxlbmd0aFBy
ZWZpeCB7IGZhbHNlIH07CiB9OwogCiAjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1BFUkZPUk1BTkNF
X1JFUE9SVElORwpAQCAtMTI4LDEzICsxMjcsOCBAQCB2b2lkIENvbWJpbmVkVVJMRmlsdGVyczo6
YWRkUGF0dGVybih1aW50CiAgICAgaWYgKHBhdHRlcm4uaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBWZWN0b3I8UHJlZml4VHJlZVZlcnRleCosIDEyOD4gcHJlZml4VHJlZVZlcnRp
Y2VzRm9yUGF0dGVybjsKLSAgICBwcmVmaXhUcmVlVmVydGljZXNGb3JQYXR0ZXJuLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkocGF0dGVybi5zaXplKCkgKyAxKTsKLQogICAgIC8vIEV4dGVuZCB0aGUg
cHJlZml4IHRyZWUgd2l0aCB0aGUgbmV3IHBhdHRlcm4uCi0gICAgYm9vbCBoYXNOZXdUZXJtID0g
ZmFsc2U7CiAgICAgUHJlZml4VHJlZVZlcnRleCogbGFzdFByZWZpeFRyZWUgPSBtX3ByZWZpeFRy
ZWVSb290LmdldCgpOwotICAgIHByZWZpeFRyZWVWZXJ0aWNlc0ZvclBhdHRlcm4uYXBwZW5kKGxh
c3RQcmVmaXhUcmVlKTsKIAogICAgIGZvciAoY29uc3QgVGVybSYgdGVybSA6IHBhdHRlcm4pIHsK
ICAgICAgICAgc2l6ZV90IG5leHRFbnRyeUluZGV4ID0gV1RGOjpub3RGb3VuZDsKQEAgLTE0Nywx
MjkgKzE0MSwxMzggQEAgdm9pZCBDb21iaW5lZFVSTEZpbHRlcnM6OmFkZFBhdHRlcm4odWludAog
ICAgICAgICBpZiAobmV4dEVudHJ5SW5kZXggIT0gV1RGOjpub3RGb3VuZCkKICAgICAgICAgICAg
IGxhc3RQcmVmaXhUcmVlID0gbGFzdFByZWZpeFRyZWUtPmVkZ2VzW25leHRFbnRyeUluZGV4XS5j
aGlsZC5nZXQoKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBoYXNOZXdUZXJtID0gdHJ1
ZTsKLQogICAgICAgICAgICAgbGFzdFByZWZpeFRyZWUtPmVkZ2VzLmFwcGVuZChQcmVmaXhUcmVl
RWRnZSh7dGVybSwgc3RkOjptYWtlX3VuaXF1ZTxQcmVmaXhUcmVlVmVydGV4PigpfSkpOwogICAg
ICAgICAgICAgbGFzdFByZWZpeFRyZWUgPSBsYXN0UHJlZml4VHJlZS0+ZWRnZXMubGFzdCgpLmNo
aWxkLmdldCgpOwogICAgICAgICB9Ci0gICAgICAgIHByZWZpeFRyZWVWZXJ0aWNlc0ZvclBhdHRl
cm4uYXBwZW5kKGxhc3RQcmVmaXhUcmVlKTsKICAgICB9CiAKLSAgICBBY3Rpb25MaXN0JiBhY3Rp
b25zID0gcHJlZml4VHJlZVZlcnRpY2VzRm9yUGF0dGVybi5sYXN0KCktPmZpbmFsQWN0aW9uczsK
KyAgICBBY3Rpb25MaXN0JiBhY3Rpb25zID0gbGFzdFByZWZpeFRyZWUtPmZpbmFsQWN0aW9uczsK
ICAgICBpZiAoYWN0aW9ucy5maW5kKGFjdGlvbklkKSA9PSBXVEY6Om5vdEZvdW5kKQogICAgICAg
ICBhY3Rpb25zLmFwcGVuZChhY3Rpb25JZCk7Ci0KLSAgICBpZiAoIWhhc05ld1Rlcm0pCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGJvb2wgaGFzU2VlblZhcmlhYmxlTGVuZ3RoVGVybXMgPSBmYWxz
ZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBwYXR0ZXJuLnNpemUoKTsgaS0tOykgewotICAgICAg
ICBjb25zdCBUZXJtJiB0ZXJtID0gcGF0dGVybltpXTsKLSAgICAgICAgaGFzU2VlblZhcmlhYmxl
TGVuZ3RoVGVybXMgfD0gIXRlcm0uaGFzRml4ZWRMZW5ndGgoKTsKLSAgICAgICAgcHJlZml4VHJl
ZVZlcnRpY2VzRm9yUGF0dGVybltpICsgMV0tPmluVmFyaWFibGVMZW5ndGhQcmVmaXggfD0gaGFz
U2VlblZhcmlhYmxlTGVuZ3RoVGVybXM7Ci0gICAgfQotICAgIHByZWZpeFRyZWVWZXJ0aWNlc0Zv
clBhdHRlcm5bMF0tPmluVmFyaWFibGVMZW5ndGhQcmVmaXggfD0gaGFzU2VlblZhcmlhYmxlTGVu
Z3RoVGVybXM7CiB9CiAKLXN0cnVjdCBBY3RpdmVTdWJ0cmVlIHsKLSAgICBjb25zdCBQcmVmaXhU
cmVlVmVydGV4KiB2ZXJ0ZXg7Ci0gICAgUHJlZml4VHJlZUVkZ2VzOjpjb25zdF9pdGVyYXRvciBp
dGVyYXRvcjsKLX07Ci0KLXN0YXRpYyB2b2lkIGdlbmVyYXRlTkZBRm9yU3VidHJlZShORkEmIG5m
YSwgdW5zaWduZWQgcm9vdElkLCBjb25zdCBQcmVmaXhUcmVlVmVydGV4JiBwcmVmaXhUcmVlVmVy
dGV4KQorc3RhdGljIHZvaWQgZ2VuZXJhdGVORkFGb3JTdWJ0cmVlKE5GQSYgbmZhLCB1bnNpZ25l
ZCBuZmFSb290SWQsIFByZWZpeFRyZWVWZXJ0ZXgmIHJvb3QpCiB7Ci0gICAgQVNTRVJUX1dJVEhf
TUVTU0FHRSghcHJlZml4VHJlZVZlcnRleC5pblZhcmlhYmxlTGVuZ3RoUHJlZml4LCAiVGhpcyBj
b2RlIGFzc3VtZXMgdGhlIHN1YnRyZWVzIHdpdGggdmFyaWFibGUgcHJlZml4IGxlbmd0aCBoYXZl
IGFscmVhZHkgYmVlbiBoYW5kbGVkLiIpOwotCi0gICAgc3RydWN0IEFjdGl2ZU5GQVN1YnRyZWUg
OiBBY3RpdmVTdWJ0cmVlIHsKLSAgICAgICAgQWN0aXZlTkZBU3VidHJlZShjb25zdCBQcmVmaXhU
cmVlVmVydGV4KiB2ZXJ0ZXgsIFByZWZpeFRyZWVFZGdlczo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0
b3IsIHVuc2lnbmVkIG5vZGVJbmRleCkKLSAgICAgICAgICAgIDogQWN0aXZlU3VidHJlZSh7IHZl
cnRleCwgaXRlcmF0b3IgfSkKLSAgICAgICAgICAgICwgbGFzdE5vZGVJbmRleChub2RlSW5kZXgp
CisgICAgLyoKKyAgICAvLyBOb24tcmVjdXJzaXZlIGZvcm0gb2YgdGhpczoKKyAgICBmb3IgKGF1
dG8mIGVkZ2UgOiByb290LmVkZ2VzKSB7CisgICAgICAgIGlmICghZWRnZS50ZXJtLmhhc0ZpeGVk
TGVuZ3RoKCkpCisgICAgICAgICAgICBjb250aW51ZTsgLy8gVGhpcyB3aWxsIGJlIGEgcGFydCBv
ZiBhbm90aGVyIE5GQS4KKyAgICAgICAgdW5zaWduZWQgc3VidHJlZVJvb3RJZCA9IGVkZ2UudGVy
bS5nZW5lcmF0ZUdyYXBoKG5mYSwgbmZhUm9vdElkLCBlZGdlLmNoaWxkLT5maW5hbEFjdGlvbnMp
OworICAgICAgICBnZW5lcmF0ZU5GQUZvclN1YnRyZWUobmZhLCBzdWJ0cmVlUm9vdElkLCAqZWRn
ZS5jaGlsZC5nZXQoKSk7CisgICAgICAgIGlmIChlZGdlLmNoaWxkLT5lZGdlcy5pc0VtcHR5KCkp
CisgICAgICAgICAgICBlZGdlLnRlcm0gPSBUZXJtKFRlcm06OkRlbGV0ZWRWYWx1ZSk7IC8vIE1h
cmsgdGhpcyBsZWFmIGZvciBkZWxldGluZy4KKyAgICB9CisgICAgcm9vdC5lZGdlcy5yZW1vdmVB
bGxNYXRjaGluZyhbXShQcmVmaXhUcmVlRWRnZSYgZWRnZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBlZGdlLnRlcm0uaXNEZWxldGVkVmFsdWUoKTsKKyAgICB9KTsKKyAgICAqLworICAgIAorICAg
IHN0cnVjdCBBY3RpdmVTdWJ0cmVlIHsKKyAgICAgICAgQWN0aXZlU3VidHJlZShQcmVmaXhUcmVl
VmVydGV4JiB2ZXJ0ZXgsIHVuc2lnbmVkIHJvb3RJZCwgdW5zaWduZWQgZWRnZUluZGV4KQorICAg
ICAgICAgICAgOiB2ZXJ0ZXgodmVydGV4KQorICAgICAgICAgICAgLCByb290SWQocm9vdElkKQor
ICAgICAgICAgICAgLCBlZGdlSW5kZXgoZWRnZUluZGV4KQogICAgICAgICB7CiAgICAgICAgIH0K
LSAgICAgICAgdW5zaWduZWQgbGFzdE5vZGVJbmRleDsKKyAgICAgICAgUHJlZml4VHJlZVZlcnRl
eCYgdmVydGV4OworICAgICAgICB1bnNpZ25lZCByb290SWQ7CisgICAgICAgIHVuc2lnbmVkIGVk
Z2VJbmRleDsKICAgICB9OwotCi0gICAgVmVjdG9yPEFjdGl2ZU5GQVN1YnRyZWU+IGFjdGl2ZVN0
YWNrOwotICAgIGFjdGl2ZVN0YWNrLmFwcGVuZChBY3RpdmVORkFTdWJ0cmVlKCZwcmVmaXhUcmVl
VmVydGV4LCBwcmVmaXhUcmVlVmVydGV4LmVkZ2VzLmJlZ2luKCksIHJvb3RJZCkpOwotCi0gICAg
d2hpbGUgKHRydWUpIHsKLSAgICBQcm9jZXNzU3VidHJlZToKLSAgICAgICAgZm9yIChBY3RpdmVO
RkFTdWJ0cmVlJiBhY3RpdmVTdWJ0cmVlID0gYWN0aXZlU3RhY2subGFzdCgpOyBhY3RpdmVTdWJ0
cmVlLml0ZXJhdG9yICE9IGFjdGl2ZVN1YnRyZWUudmVydGV4LT5lZGdlcy5lbmQoKTsgKythY3Rp
dmVTdWJ0cmVlLml0ZXJhdG9yKSB7Ci0gICAgICAgICAgICBpZiAoYWN0aXZlU3VidHJlZS5pdGVy
YXRvci0+Y2hpbGQtPmluVmFyaWFibGVMZW5ndGhQcmVmaXgpCisgICAgVmVjdG9yPEFjdGl2ZVN1
YnRyZWU+IHN0YWNrOworICAgIGlmICghcm9vdC5lZGdlcy5pc0VtcHR5KCkpCisgICAgICAgIHN0
YWNrLmFwcGVuZChBY3RpdmVTdWJ0cmVlKHJvb3QsIG5mYVJvb3RJZCwgMCkpOworICAgIAorICAg
IC8vIEdlbmVyYXRlIGdyYXBocyBmb3IgZWFjaCBzdWJ0cmVlIHRoYXQgZG9lcyBub3QgY29udGFp
biBhbnkgcXVhbnRpZmllcnMuCisgICAgd2hpbGUgKCFzdGFjay5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgUHJlZml4VHJlZVZlcnRleCYgdmVydGV4ID0gc3RhY2subGFzdCgpLnZlcnRleDsKKyAgICAg
ICAgY29uc3QgdW5zaWduZWQgZWRnZUluZGV4ID0gc3RhY2subGFzdCgpLmVkZ2VJbmRleDsKKwor
ICAgICAgICBpZiAoZWRnZUluZGV4ID49IHZlcnRleC5lZGdlcy5zaXplKCkpIHsKKyAgICAgICAg
ICAgIEFTU0VSVChlZGdlSW5kZXggPT0gdmVydGV4LmVkZ2VzLnNpemUoKSk7CisgICAgICAgICAg
ICB2ZXJ0ZXguZWRnZXMucmVtb3ZlQWxsTWF0Y2hpbmcoW10oUHJlZml4VHJlZUVkZ2UmIGVkZ2Up
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVkZ2UudGVybS5pc0RlbGV0
ZWRWYWx1ZSgpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBzdGFjay5yZW1vdmVMYXN0
KCk7CisgICAgICAgICAgICBpZiAoIXN0YWNrLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAg
IGF1dG8mIGVkZ2UgPSBzdGFjay5sYXN0KCkudmVydGV4LmVkZ2VzW3N0YWNrLmxhc3QoKS5lZGdl
SW5kZXhdOworICAgICAgICAgICAgICAgIGlmIChlZGdlLmNoaWxkLT5lZGdlcy5pc0VtcHR5KCkp
CisgICAgICAgICAgICAgICAgICAgIGVkZ2UudGVybSA9IFRlcm0oVGVybTo6RGVsZXRlZFZhbHVl
KTsgLy8gTWFyayB0aGlzIGxlYWYgZm9yIGRlbGV0aW5nLgorICAgICAgICAgICAgICAgIHN0YWNr
Lmxhc3QoKS5lZGdlSW5kZXgrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGF1dG8mIGVkZ2UgPSB2ZXJ0ZXguZWRnZXNbZWRnZUluZGV4XTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgLy8gUXVhbnRpZmllZCBlZGdlcyBpbiB0aGUgc3VidHJlZSB3aWxs
IGJlIGEgcGFydCBvZiBhbm90aGVyIE5GQS4KKyAgICAgICAgICAgIGlmICghZWRnZS50ZXJtLmhh
c0ZpeGVkTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBzdGFjay5sYXN0KCkuZWRnZUluZGV4
Kys7CiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGNvbnN0IFRlcm0m
IHRlcm0gPSBhY3RpdmVTdWJ0cmVlLml0ZXJhdG9yLT50ZXJtOwotICAgICAgICAgICAgdW5zaWdu
ZWQgbmV3RW5kTm9kZUluZGV4ID0gdGVybS5nZW5lcmF0ZUdyYXBoKG5mYSwgYWN0aXZlU3VidHJl
ZS5sYXN0Tm9kZUluZGV4LCBhY3RpdmVTdWJ0cmVlLml0ZXJhdG9yLT5jaGlsZC0+ZmluYWxBY3Rp
b25zKTsKLQotICAgICAgICAgICAgUHJlZml4VHJlZVZlcnRleCogcHJlZml4VHJlZVZlcnRleCA9
IGFjdGl2ZVN1YnRyZWUuaXRlcmF0b3ItPmNoaWxkLmdldCgpOwotICAgICAgICAgICAgaWYgKCFw
cmVmaXhUcmVlVmVydGV4LT5lZGdlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBhY3Rp
dmVTdGFjay5hcHBlbmQoQWN0aXZlTkZBU3VidHJlZShwcmVmaXhUcmVlVmVydGV4LCBwcmVmaXhU
cmVlVmVydGV4LT5lZGdlcy5iZWdpbigpLCBuZXdFbmROb2RlSW5kZXgpKTsKLSAgICAgICAgICAg
ICAgICBnb3RvIFByb2Nlc3NTdWJ0cmVlOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICB1bnNpZ25lZCBzdWJ0cmVlUm9vdElkID0gZWRnZS50ZXJtLmdlbmVyYXRlR3Jh
cGgobmZhLCBzdGFjay5sYXN0KCkucm9vdElkLCBlZGdlLmNoaWxkLT5maW5hbEFjdGlvbnMpOwor
ICAgICAgICAgICAgQVNTRVJUKGVkZ2UuY2hpbGQuZ2V0KCkpOworICAgICAgICAgICAgc3RhY2su
YXBwZW5kKEFjdGl2ZVN1YnRyZWUoKmVkZ2UuY2hpbGQuZ2V0KCksIHN1YnRyZWVSb290SWQsIDAp
KTsKICAgICAgICAgfQotCi0gICAgICAgIGFjdGl2ZVN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAg
ICAgaWYgKGFjdGl2ZVN0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICArK2FjdGl2ZVN0YWNrLmxhc3QoKS5pdGVyYXRvcjsKICAgICB9CiB9CiAKLXZvaWQgQ29tYmlu
ZWRVUkxGaWx0ZXJzOjpwcm9jZXNzTkZBcyhzdGQ6OmZ1bmN0aW9uPHZvaWQoTkZBJiYpPiBoYW5k
bGVyKSBjb25zdAordm9pZCBDb21iaW5lZFVSTEZpbHRlcnM6OnByb2Nlc3NORkFzKHN0ZDo6ZnVu
Y3Rpb248dm9pZChORkEmJik+IGhhbmRsZXIpCiB7Ci0gICAgVmVjdG9yPEFjdGl2ZVN1YnRyZWU+
IGFjdGl2ZVN0YWNrOwotICAgIGFjdGl2ZVN0YWNrLmFwcGVuZChBY3RpdmVTdWJ0cmVlKHsgbV9w
cmVmaXhUcmVlUm9vdC5nZXQoKSwgbV9wcmVmaXhUcmVlUm9vdC0+ZWRnZXMuYmVnaW4oKSB9KSk7
Ci0KKyNpZiBDT05URU5UX0VYVEVOU0lPTlNfU1RBVEVfTUFDSElORV9ERUJVR0dJTkcKKyAgICBw
cmludCgpOworI2VuZGlmCiAgICAgd2hpbGUgKHRydWUpIHsKLSAgICBQcm9jZXNzU3VidHJlZToK
LSAgICAgICAgQWN0aXZlU3VidHJlZSYgYWN0aXZlU3VidHJlZSA9IGFjdGl2ZVN0YWNrLmxhc3Qo
KTsKLQotICAgICAgICAvLyBXZSBnbyBkZXB0aCBmaXJzdCBpbnRvIHRoZSBzdWJ0cmVlcyB3aXRo
IHZhcmlhYmxlIHByZWZpeC4gRmluZCB0aGUgbmV4dCBzdWJ0cmVlLgotICAgICAgICBmb3IgKDsg
YWN0aXZlU3VidHJlZS5pdGVyYXRvciAhPSBhY3RpdmVTdWJ0cmVlLnZlcnRleC0+ZWRnZXMuZW5k
KCk7ICsrYWN0aXZlU3VidHJlZS5pdGVyYXRvcikgewotICAgICAgICAgICAgUHJlZml4VHJlZVZl
cnRleCogcHJlZml4VHJlZVZlcnRleCA9IGFjdGl2ZVN1YnRyZWUuaXRlcmF0b3ItPmNoaWxkLmdl
dCgpOwotICAgICAgICAgICAgaWYgKHByZWZpeFRyZWVWZXJ0ZXgtPmluVmFyaWFibGVMZW5ndGhQ
cmVmaXgpIHsKLSAgICAgICAgICAgICAgICBhY3RpdmVTdGFjay5hcHBlbmQoQWN0aXZlU3VidHJl
ZSh7IHByZWZpeFRyZWVWZXJ0ZXgsIHByZWZpeFRyZWVWZXJ0ZXgtPmVkZ2VzLmJlZ2luKCkgfSkp
OwotICAgICAgICAgICAgICAgIGdvdG8gUHJvY2Vzc1N1YnRyZWU7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgIC8vIFRyYXZlcnNlIG91dCB0byBhIGxlYWYuCisgICAgICAgIFZlY3RvcjxQcmVmaXhU
cmVlVmVydGV4KiwgMTI4PiBzdGFjazsKKyAgICAgICAgUHJlZml4VHJlZVZlcnRleCogdmVydGV4
ID0gbV9wcmVmaXhUcmVlUm9vdC5nZXQoKTsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAg
ICAgICAgIEFTU0VSVCh2ZXJ0ZXgpOworICAgICAgICAgICAgc3RhY2suYXBwZW5kKHZlcnRleCk7
CisgICAgICAgICAgICBpZiAodmVydGV4LT5lZGdlcy5pc0VtcHR5KCkpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB2ZXJ0ZXggPSB2ZXJ0ZXgtPmVkZ2VzLmxhc3QoKS5jaGls
ZC5nZXQoKTsKICAgICAgICAgfQotCi0gICAgICAgIC8vIEFmdGVyIHdlIHJlYWNoZWQgaGVyZSwg
d2Uga25vdyB0aGF0IGFsbCB0aGUgc3VidHJlZXMgd2l0aCB2YXJpYWJsZSBwcmVmaXhlcyBoYXZl
IGJlZW4gcHJvY2Vzc2VkLAotICAgICAgICAvLyB0aW1lIHRvIGdlbmVyYXRlIHRoZSBORkEgZm9y
IHRoZSBncmFwaCByb290ZWQgaGVyZS4KLSAgICAgICAgYm9vbCBuZWVkVG9HZW5lcmF0ZSA9IGFj
dGl2ZVN1YnRyZWUudmVydGV4LT5lZGdlcy5pc0VtcHR5KCkgJiYgIWFjdGl2ZVN1YnRyZWUudmVy
dGV4LT5maW5hbEFjdGlvbnMuaXNFbXB0eSgpOwotICAgICAgICBpZiAoIW5lZWRUb0dlbmVyYXRl
KSB7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVkZ2UgOiBhY3RpdmVTdWJ0cmVlLnZl
cnRleC0+ZWRnZXMpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWVkZ2UuY2hpbGQtPmluVmFyaWFi
bGVMZW5ndGhQcmVmaXgpIHsKLSAgICAgICAgICAgICAgICAgICAgbmVlZFRvR2VuZXJhdGUgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9CisgICAgICAgIGlmIChzdGFjay5zaXplKCkgPT0gMSkKKyAgICAgICAgICAgIGJy
ZWFrOyAvLyBXZSdyZSBkb25lIG9uY2Ugd2UgaGF2ZSBwcm9jZXNzZWQgYW5kIHJlbW92ZWQgYWxs
IHRoZSBlZGdlcyBpbiB0aGUgcHJlZml4IHRyZWUuCisgICAgICAgIAorICAgICAgICAvLyBGaW5k
IHRoZSBwcmVmaXggcm9vdCBmb3IgdGhpcyBORkEuIFRoaXMgaXMgdGhlIHZlcnRleCBhZnRlciB0
aGUgbGFzdCB0ZXJtIHdpdGggYSBxdWFudGlmaWVyIGlmIHRoZXJlIGlzIG9uZSwKKyAgICAgICAg
Ly8gb3IgdGhlIHJvb3QgaWYgdGhlcmUgYXJlIG5vIHF1YW50aWZpZXJzIGxlZnQuCisgICAgICAg
IHdoaWxlIChzdGFjay5zaXplKCkgPiAxKSB7CisgICAgICAgICAgICBpZiAoIXN0YWNrW3N0YWNr
LnNpemUoKSAtIDJdLT5lZGdlcy5sYXN0KCkudGVybS5oYXNGaXhlZExlbmd0aCgpKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgc3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKG5lZWRUb0dlbmVyYXRlKSB7Ci0gICAgICAgICAgICBORkEgbmZh
OwotCi0gICAgICAgICAgICB1bnNpZ25lZCBwcmVmaXhFbmQgPSBuZmEucm9vdCgpOwotCi0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYWN0aXZlU3RhY2suc2l6ZSgpIC0gMTsg
KytpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVGVybSYgdGVybSA9IGFjdGl2ZVN0YWNrW2ld
Lml0ZXJhdG9yLT50ZXJtOwotICAgICAgICAgICAgICAgIHByZWZpeEVuZCA9IHRlcm0uZ2VuZXJh
dGVHcmFwaChuZmEsIHByZWZpeEVuZCwgYWN0aXZlU3RhY2tbaV0uaXRlcmF0b3ItPmNoaWxkLT5m
aW5hbEFjdGlvbnMpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKGNvbnN0IGF1
dG8mIGVkZ2UgOiBhY3RpdmVTdWJ0cmVlLnZlcnRleC0+ZWRnZXMpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoIWVkZ2UuY2hpbGQtPmluVmFyaWFibGVMZW5ndGhQcmVmaXgpIHsKLSAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgbmV3U3VidHJlZVN0YXJ0ID0gZWRnZS50ZXJtLmdlbmVyYXRlR3Jh
cGgobmZhLCBwcmVmaXhFbmQsIGVkZ2UuY2hpbGQtPmZpbmFsQWN0aW9ucyk7Ci0gICAgICAgICAg
ICAgICAgICAgIGdlbmVyYXRlTkZBRm9yU3VidHJlZShuZmEsIG5ld1N1YnRyZWVTdGFydCwgKmVk
Z2UuY2hpbGQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgaGFuZGxlcihXVEY6Om1vdmUobmZhKSk7CisgICAgICAgIEFTU0VSVF9X
SVRIX01FU1NBR0UoIXN0YWNrLmlzRW1wdHkoKSwgIkF0IGxlYXN0IHRoZSByb290IHNob3VsZCBi
ZSBpbiB0aGUgc3RhY2siKTsKKyAgICAgICAgCisgICAgICAgIC8vIE1ha2UgYW4gTkZBIHdpdGgg
dGhlIHN1YnRyZWVzIGZvciB3aG9tIHRoaXMgaXMgYWxzbyB0aGUgbGFzdCBxdWFudGlmaWVyIChv
ciB3aG8gYWxzbyBoYXZlIG5vIHF1YW50aWZpZXIpLgorICAgICAgICBORkEgbmZhOworICAgICAg
ICAvLyBQdXQgdGhlIHByZWZpeCBpbnRvIHRoZSBORkEuCisgICAgICAgIHVuc2lnbmVkIHByZWZp
eEVuZCA9IG5mYS5yb290KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGFj
ay5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgICAgIEFTU0VSVCghc3RhY2tbaV0tPmVkZ2Vz
LmlzRW1wdHkoKSk7CisgICAgICAgICAgICBjb25zdCBQcmVmaXhUcmVlRWRnZSYgZWRnZSA9IHN0
YWNrW2ldLT5lZGdlcy5sYXN0KCk7CisgICAgICAgICAgICBwcmVmaXhFbmQgPSBlZGdlLnRlcm0u
Z2VuZXJhdGVHcmFwaChuZmEsIHByZWZpeEVuZCwgZWRnZS5jaGlsZC0+ZmluYWxBY3Rpb25zKTsK
KyAgICAgICAgfQorICAgICAgICAvLyBQdXQgdGhlIG5vbi1xdWFudGlmaWVkIHZlcnRpY2VzIGlu
IHRoZSBzdWJ0cmVlIGludG8gdGhlIE5GQSBhbmQgZGVsZXRlIHRoZW0uCisgICAgICAgIEFTU0VS
VChzdGFjay5sYXN0KCkpOworICAgICAgICBnZW5lcmF0ZU5GQUZvclN1YnRyZWUobmZhLCBwcmVm
aXhFbmQsICpzdGFjay5sYXN0KCkpOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IENvbWJp
bmUgc21hbGwgTkZBcyB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBORkFzLgorICAgICAgICBoYW5k
bGVyKFdURjo6bW92ZShuZmEpKTsKKyAgICAgICAgCisgICAgICAgIC8vIENsZWFuIHVwIGFueSBw
cm9jZXNzZWQgbGVhZiBub2Rlcy4KKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAg
IGlmIChzdGFjay5zaXplKCkgPiAxKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmxhc3Qo
KS0+ZWRnZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YWNrW3N0YWNrLnNp
emUoKSAtIDJdLT5lZGdlcy5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAgICAgICAgIHN0YWNr
LnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7IC8vIFZlcnRleCBpcyBub3QgYSBsZWFmLgorICAgICAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICAgICAgYnJlYWs7IC8vIExlYXZlIHRoZSBlbXB0eSByb290LgogICAgICAgICB9
Ci0KLSAgICAgICAgLy8gV2UgaGF2ZSBwcm9jZXNzZWQgYWxsIHRoZSBzdWJ0cmVlcyBvZiB0aGlz
IGxldmVsLCBwb3AgdGhlIHN0YWNrIGFuZCBtb3ZlIG9uIHRvIHRoZSBuZXh0IHNpYmxpbmcuCi0g
ICAgICAgIGFjdGl2ZVN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgaWYgKGFjdGl2ZVN0YWNr
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICArK2FjdGl2ZVN0YWNrLmxh
c3QoKS5pdGVyYXRvcjsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0NvbWJpbmVkVVJMRmlsdGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbWJpbmVkVVJMRmlsdGVycy5oCShyZXZpc2lvbiAxODM2
NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVSTEZpbHRl
cnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGFkZFBhdHRlcm4odWludDY0X3QgcGF0dGVybklkLCBjb25zdCBWZWN0b3I8VGVybT4mIHBhdHRl
cm4pOwogCi0gICAgdm9pZCBwcm9jZXNzTkZBcyhzdGQ6OmZ1bmN0aW9uPHZvaWQoTkZBJiYpPiBo
YW5kbGVyKSBjb25zdDsKKyAgICB2b2lkIHByb2Nlc3NORkFzKHN0ZDo6ZnVuY3Rpb248dm9pZChO
RkEmJik+IGhhbmRsZXIpOwogICAgIHZvaWQgY2xlYXIoKTsKIAogI2lmIENPTlRFTlRfRVhURU5T
SU9OU19QRVJGT1JNQU5DRV9SRVBPUlRJTkcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zRGVidWdnaW5nLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNEZWJ1Z2dpbmcu
aAkocmV2aXNpb24gMTgzNjY3KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
Q29udGVudEV4dGVuc2lvbnNEZWJ1Z2dpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYs
NyBAQAogI2RlZmluZSBDT05URU5UX0VYVEVOU0lPTlNfUEFHRV9TSVpFIDE2Mzg0CiAKICNpZiBD
T05URU5UX0VYVEVOU0lPTlNfUEVSRk9STUFOQ0VfUkVQT1JUSU5HCi0jZGVmaW5lIExPR19MQVJH
RV9TVFJVQ1RVUkVTKG5hbWUsIHNpemUpIGlmIChzaXplID4gMTAwMDAwMCkgeyBkYXRhTG9nRigi
TkFNRTogJXMgU0laRSAlZCIsICNuYW1lLCAoaW50KShzaXplKSk7IH07CisjZGVmaW5lIExPR19M
QVJHRV9TVFJVQ1RVUkVTKG5hbWUsIHNpemUpIGlmIChzaXplID4gMTAwMDAwMCkgeyBkYXRhTG9n
RigiTkFNRTogJXMgU0laRSAlZFxuIiwgI25hbWUsIChpbnQpKHNpemUpKTsgfTsKICNlbHNlCiAj
ZGVmaW5lIExPR19MQVJHRV9TVFJVQ1RVUkVTKG5hbWUsIHNpemUpCiAjZW5kaWYKSW5kZXg6IFRv
b2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4
MzcyNikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBA
CisyMDE1LTA1LTAyICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgW0NvbnRlbnQgRXh0ZW5zaW9uc10gQ29tYmluZSBORkFzIHByb3Blcmx5IGFu
ZCBmcmVlIG1lbW9yeSBhcyB3ZSBjb21waWxlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NDg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVu
dEV4dGVuc2lvbnMuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKyAgICAg
ICAgQWRkZWQgdGVzdHMgZm9yIGNvcnJlY3RseSBzcGxpdHRpbmcgdXAgTkZBcyB3aXRoIHVucXVh
bnRpZmllZCB0ZXJtcyBhZnRlciBxdWFudGlmaWVkIHRlcm1zLgorICAgICAgICBBZGRlZCB0ZXN0
cyBmb3IgZGVlcCBORkFzLgorCiAyMDE1LTA1LTAxICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bWFy
aW9AZW5kbGVzc20uY29tPgogCiAgICAgICAgIGNoZWNrLXdlYmtpdC1zdHlsZSBmYWlscyBkdWUg
dG8gc3lzdGVtIHB5bGludApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L0NvbnRlbnRFeHRlbnNpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwCShyZXZpc2lvbiAxODM1NTYpCisr
KyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00OTUsMTAgKzQ5NSw5IEBAIFRFU1RfRihDb250ZW50RXh0ZW5z
aW9uVGVzdCwgUmVzb3VyY2VPckwKICAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCB7VVJMKFVSTCgp
LCAiaHR0cDovL3dlYmtpdC5vcmciKSwgVVJMKFVSTCgpLCAiaHR0cDovL25vdF93ZWJraXQub3Jn
IiksIFJlc291cmNlVHlwZTo6SW1hZ2V9LCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBl
OjpCbG9ja0Nvb2tpZXMsIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQg
fSk7CiB9CiAgICAgCi1URVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIE11bHRpREZBKQorVEVT
VF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBXaWRlTkZBKQogewogICAgIC8vIE1ha2UgYW4gTkZB
IHdpdGggYWJvdXQgMTQwMCBub2Rlcy4KLSAgICAvLyBGSVhNRTogVGhpcyBkb2VzIG5vdCBtYWtl
IG11bHRpcGxlIERGQXMgYW55bW9yZS4gQWRkIGEgdGVzdCB0aGF0IGRvZXMuCiAgICAgU3RyaW5n
QnVpbGRlciBydWxlTGlzdDsKICAgICBydWxlTGlzdC5hcHBlbmQoJ1snKTsKICAgICBmb3IgKGNo
YXIgYzEgPSAnQSc7IGMxIDw9ICdaJzsgKytjMSkgewpAQCAtNTMzLDYgKzUzMiwzNyBAQCBURVNU
X0YoQ29udGVudEV4dGVuc2lvblRlc3QsIE11bHRpREZBKQogICAgIHRlc3RSZXF1ZXN0KGJhY2tl
bmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnLyIpLCB7IH0pOwogfQog
CitURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIERlZXBORkEpCit7CisgICAgY29uc3QgdW5z
aWduZWQgc2l6ZSA9IDEwMDAwMDsKKyAgICAKKyAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29tYmlu
ZWRVUkxGaWx0ZXJzIGNvbWJpbmVkVVJMRmlsdGVyczsKKyAgICBDb250ZW50RXh0ZW5zaW9uczo6
VVJMRmlsdGVyUGFyc2VyIHBhcnNlcihjb21iaW5lZFVSTEZpbHRlcnMpOworICAgIAorICAgIC8v
IEZJWE1FOiBERkFUb05GQTo6Y29udmVydCB0YWtlcyB3YXkgdG9vIGxvbmcgb24gdGhlc2UgZGVl
cCBORkFzLiBXZSBzaG91bGQgb3B0aW1pemUgZm9yIHRoYXQgY2FzZS4KKyAgICAKKyAgICBTdHJp
bmdCdWlsZGVyIGxvdHNPZkFzOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyAr
K2kpCisgICAgICAgIGxvdHNPZkFzLmFwcGVuZCgnQScpOworICAgIEVYUEVDVF9FUShDb250ZW50
RXh0ZW5zaW9uczo6VVJMRmlsdGVyUGFyc2VyOjpQYXJzZVN0YXR1czo6T2ssIHBhcnNlci5hZGRQ
YXR0ZXJuKGxvdHNPZkFzLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgZmFsc2UsIDApKTsKKyAg
ICAKKyAgICAvLyBGSVhNRTogWWFyciBvdWdodCB0byBiZSBhYmxlIHRvIGhhbmRsZSAyTUIgcmVn
dWxhciBleHByZXNzaW9ucy4KKyAgICBTdHJpbmdCdWlsZGVyIHRvb01hbnlBczsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZSAqIDIwOyArK2kpCisgICAgICAgIHRvb01hbnlBcy5h
cHBlbmQoJ0EnKTsKKyAgICBFWFBFQ1RfRVEoQ29udGVudEV4dGVuc2lvbnM6OlVSTEZpbHRlclBh
cnNlcjo6UGFyc2VTdGF0dXM6OllhcnJFcnJvciwgcGFyc2VyLmFkZFBhdHRlcm4odG9vTWFueUFz
LnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgZmFsc2UsIDApKTsKKyAgICAKKyAgICBTdHJpbmdC
dWlsZGVyIG5lc3RlZEdyb3VwczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsg
KytpKQorICAgICAgICBuZXN0ZWRHcm91cHMuYXBwZW5kKCcoJyk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgbmVzdGVkR3JvdXBzLmFwcGVuZCgiQiki
KTsKKyAgICAvLyBGSVhNRTogQWRkIG5lc3RlZEdyb3Vwcy4gUmlnaHQgbm93IGl0IGFsc28gdGFr
ZXMgdG9vIGxvbmcuIEl0IHNob3VsZCBiZSBvcHRpbWl6ZWQuCisgICAgCisgICAgLy8gVGhpcyBz
aG91bGQgbm90IGNyYXNoIGFuZCBub3QgdGltZW91dC4KKyAgICBFWFBFQ1RfRVEoMXVsLCBjcmVh
dGVORkFzKGNvbWJpbmVkVVJMRmlsdGVycykuc2l6ZSgpKTsKK30KKwogdm9pZCBjaGVja0NvbXBp
bGVyRXJyb3IoY29uc3QgY2hhcioganNvbiwgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRl
bnNpb25FcnJvciBleHBlY3RlZEVycm9yKQogewogICAgIFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhIGV4dGVuc2lvbkRhdGE7CkBAIC02MTYs
OSArNjQ2LDkgQEAgVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBTdHJpY3RQcmVmaQogVEVT
VF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBTdHJpY3RQcmVmaXhTZXBhcmF0ZWRNYWNoaW5lczIp
CiB7CiAgICAgYXV0byBiYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBl
XCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeZm9vXCJ9fSwiCi0g
ICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1m
aWx0ZXJcIjpcIl4uKlthLWNdK2JhclwifX0sIgotICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6
XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJed2Via2l0OlwifX0sIgot
ICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwt
ZmlsdGVyXCI6XCJbYS1jXStiK29vbVwifX1dIik7CisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0
eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeLipbYS1jXSti
YXJcIn19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJp
Z2dlclwiOntcInVybC1maWx0ZXJcIjpcIl53ZWJraXQ6XCJ9fSwiCisgICAgICAgICJ7XCJhY3Rp
b25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJb
YS1jXStiK29vbVwifX1dIik7CiAKICAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1l
bnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy8iKSwgeyB9KTsKICAgICB0ZXN0UmVxdWVzdChi
YWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJmb286Ly93ZWJraXQub3JnLyIpLCB7IENvbnRl
bnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CkBAIC02NDYsNiArNjc2LDM3
IEBAIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgU3RyaWN0UHJlZmkKICAgICBFWFBFQ1Rf
RVEoM3VsLCBjcmVhdGVORkFzKGNvbWJpbmVkVVJMRmlsdGVycykuc2l6ZSgpKTsKIH0KIAorVEVT
VF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBTdHJpY3RQcmVmaXhTZXBhcmF0ZWRNYWNoaW5lczMp
Cit7CisgICAgYXV0byBiYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBl
XCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJBKkRcIn19LCIKKyAg
ICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImlnbm9yZS1wcmV2aW91cy1ydWxlc1wifSxc
InRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJBKkJBK1wifX0sIgorICAgICAgICAie1wiYWN0
aW9uXCI6e1widHlwZVwiOlwiYmxvY2stY29va2llc1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmls
dGVyXCI6XCJBKkJDXCJ9fV0iKTsKKyAgICAKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWlu
RG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9EIiksIHsgQ29udGVudEV4dGVuc2lv
bnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9BQUQiKSwgeyBDb250ZW50RXh0
ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tl
bmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL0FCIiksIHsgfSk7Cisg
ICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtp
dC5vcmcvQUJBIiksIHsgfSwgdHJ1ZSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRv
Y3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvQUJBRCIpLCB7IH0sIHRydWUpOworICAg
IHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQu
b3JnL0JDIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrQ29va2llcyB9
KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8v
d2Via2l0Lm9yZy9BQkMiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tD
b29raWVzIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3Qo
Imh0dHA6Ly93ZWJraXQub3JnL0FCQUJDIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5
cGU6OkJsb2NrQ29va2llcyB9LCB0cnVlKTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWlu
RG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9BQkFCQ0FEIiksIHsgQ29udGVudEV4
dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrQ29va2llcyB9LCB0cnVlKTsKKyAgICB0ZXN0UmVx
dWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9BQkNB
RCIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXMsIENvbnRl
bnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7Cit9CisgICAgCitURVNUX0Yo
Q29udGVudEV4dGVuc2lvblRlc3QsIFN0cmljdFByZWZpeFNlcGFyYXRlZE1hY2hpbmVzM1BhcnRp
dGlvbmluZykKK3sKKyAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29tYmluZWRVUkxGaWx0ZXJzIGNv
bWJpbmVkVVJMRmlsdGVyczsKKyAgICBDb250ZW50RXh0ZW5zaW9uczo6VVJMRmlsdGVyUGFyc2Vy
IHBhcnNlcihjb21iaW5lZFVSTEZpbHRlcnMpOworICAgIAorICAgIEVYUEVDVF9FUShDb250ZW50
RXh0ZW5zaW9uczo6VVJMRmlsdGVyUGFyc2VyOjpQYXJzZVN0YXR1czo6T2ssIHBhcnNlci5hZGRQ
YXR0ZXJuKCJBKkQiLCBmYWxzZSwgMCkpOworICAgIEVYUEVDVF9FUShDb250ZW50RXh0ZW5zaW9u
czo6VVJMRmlsdGVyUGFyc2VyOjpQYXJzZVN0YXR1czo6T2ssIHBhcnNlci5hZGRQYXR0ZXJuKCJB
KkJBKyIsIGZhbHNlLCAxKSk7CisgICAgRVhQRUNUX0VRKENvbnRlbnRFeHRlbnNpb25zOjpVUkxG
aWx0ZXJQYXJzZXI6OlBhcnNlU3RhdHVzOjpPaywgcGFyc2VyLmFkZFBhdHRlcm4oIkEqQkMiLCBm
YWxzZSwgMikpOworICAgIAorICAgIC8vICJBKkEiIGFuZCAiQSpCQyIgY2FuIGJlIGdyb3VwZWQs
ICJBKkJBKyIgc2hvdWxkIG5vdC4KKyAgICBFWFBFQ1RfRVEoMnVsLCBjcmVhdGVORkFzKGNvbWJp
bmVkVVJMRmlsdGVycykuc2l6ZSgpKTsKK30KKwogc3RhdGljIHZvaWQgdGVzdFBhdHRlcm5TdGF0
dXMoU3RyaW5nIHBhdHRlcm4sIENvbnRlbnRFeHRlbnNpb25zOjpVUkxGaWx0ZXJQYXJzZXI6OlBh
cnNlU3RhdHVzIHN0YXR1cykKIHsKICAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29tYmluZWRVUkxG
aWx0ZXJzIGNvbWJpbmVkVVJMRmlsdGVyczsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252313</attachid>
            <date>2015-05-04 08:55:25 -0700</date>
            <delta_ts>2015-05-04 22:10:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144485-20150504085411.patch</filename>
            <type>text/plain</type>
            <size>22953</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4Mzc0NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDE1LTA1LTA0ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gQ29tYmluZSBORkFzIHByb3Blcmx5IGFuZCBmcmVlIG1lbW9yeSBhcyB3ZSBj
b21waWxlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQ0NDg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBjb3JyZWN0bHkgY29tYmluZXMgYWxsIHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2l0
aCBhIGNvbW1vbiBwcmVmaXggdXAgdG8KKyAgICAgICAgdGhlIGxhc3QgcXVhbnRpZmllZCB0ZXJt
IGludG8gdGhlIHNhbWUgTkZBLiAgSXQgYWxzbyBkZWxldGVzIHRoZSBwcmVmaXggdHJlZSBhcyBp
dCAKKyAgICAgICAgY3JlYXRlcyBORkFzLCB0aHVzIHJlZHVjaW5nIHRoZSBtYXhpbXVtIG1lbW9y
eSB1c2VkIHdoZW4gY29tcGlsaW5nLgorCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29t
YmluZWRVUkxGaWx0ZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpDb21iaW5lZFVSTEZpbHRlcnM6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6OkNvbWJpbmVkVVJMRmlsdGVyczo6YWRkUGF0dGVybik6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Z2VuZXJhdGVORkFGb3JTdWJ0cmVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb21iaW5lZFVSTEZpbHRlcnM6OnByb2Nl
c3NORkFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb21iaW5lZFVS
TEZpbHRlcnM6OmNsZWFyKTogRGVsZXRlZC4KKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9D
b21iaW5lZFVSTEZpbHRlcnMuaDoKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50
RXh0ZW5zaW9uQ29tcGlsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6OmNvbXBpbGVSdWxlTGlzdCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVu
dEV4dGVuc2lvbnNEZWJ1Z2dpbmcuaDoKKwogMjAxNS0wNS0wNCAgWmFuIERvYmVyc2VrICA8emRv
YmVyc2VrQGlnYWxpYS5jb20+CiAKICAgICAgICAgW1dURl0gUmVtb3ZlIEZ1bmN0aW9uYWwuaCBp
bmNsdXNpb25zCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5l
ZFVSTEZpbHRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0NvbWJpbmVkVVJMRmlsdGVycy5jcHAJKHJldmlzaW9uIDE4MzY3NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbWJpbmVkVVJMRmlsdGVycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDcgKzQ3LDYgQEAgdHlwZWRlZiBWZWN0b3I8UHJlZml4VHJlZUVkZ2Us
IDAsIFdURjo6Qwogc3RydWN0IFByZWZpeFRyZWVWZXJ0ZXggewogICAgIFByZWZpeFRyZWVFZGdl
cyBlZGdlczsKICAgICBBY3Rpb25MaXN0IGZpbmFsQWN0aW9uczsKLSAgICBib29sIGluVmFyaWFi
bGVMZW5ndGhQcmVmaXggeyBmYWxzZSB9OwogfTsKIAogI2lmIENPTlRFTlRfRVhURU5TSU9OU19Q
RVJGT1JNQU5DRV9SRVBPUlRJTkcKQEAgLTExNiw5ICsxMTUsOSBAQCBDb21iaW5lZFVSTEZpbHRl
cnM6On5Db21iaW5lZFVSTEZpbHRlcnMoCiB7CiB9CiAKLXZvaWQgQ29tYmluZWRVUkxGaWx0ZXJz
OjpjbGVhcigpCitib29sIENvbWJpbmVkVVJMRmlsdGVyczo6aXNFbXB0eSgpCiB7Ci0gICAgbV9w
cmVmaXhUcmVlUm9vdCA9IHN0ZDo6bWFrZV91bmlxdWU8UHJlZml4VHJlZVZlcnRleD4oKTsKKyAg
ICByZXR1cm4gbV9wcmVmaXhUcmVlUm9vdC0+ZWRnZXMuaXNFbXB0eSgpOwogfQogCiB2b2lkIENv
bWJpbmVkVVJMRmlsdGVyczo6YWRkUGF0dGVybih1aW50NjRfdCBhY3Rpb25JZCwgY29uc3QgVmVj
dG9yPFRlcm0+JiBwYXR0ZXJuKQpAQCAtMTI4LDEzICsxMjcsOCBAQCB2b2lkIENvbWJpbmVkVVJM
RmlsdGVyczo6YWRkUGF0dGVybih1aW50CiAgICAgaWYgKHBhdHRlcm4uaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8UHJlZml4VHJlZVZlcnRleCosIDEyOD4gcHJlZml4
VHJlZVZlcnRpY2VzRm9yUGF0dGVybjsKLSAgICBwcmVmaXhUcmVlVmVydGljZXNGb3JQYXR0ZXJu
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocGF0dGVybi5zaXplKCkgKyAxKTsKLQogICAgIC8vIEV4
dGVuZCB0aGUgcHJlZml4IHRyZWUgd2l0aCB0aGUgbmV3IHBhdHRlcm4uCi0gICAgYm9vbCBoYXNO
ZXdUZXJtID0gZmFsc2U7CiAgICAgUHJlZml4VHJlZVZlcnRleCogbGFzdFByZWZpeFRyZWUgPSBt
X3ByZWZpeFRyZWVSb290LmdldCgpOwotICAgIHByZWZpeFRyZWVWZXJ0aWNlc0ZvclBhdHRlcm4u
YXBwZW5kKGxhc3RQcmVmaXhUcmVlKTsKIAogICAgIGZvciAoY29uc3QgVGVybSYgdGVybSA6IHBh
dHRlcm4pIHsKICAgICAgICAgc2l6ZV90IG5leHRFbnRyeUluZGV4ID0gV1RGOjpub3RGb3VuZDsK
QEAgLTE0NywxMjkgKzE0MSwxMzggQEAgdm9pZCBDb21iaW5lZFVSTEZpbHRlcnM6OmFkZFBhdHRl
cm4odWludAogICAgICAgICBpZiAobmV4dEVudHJ5SW5kZXggIT0gV1RGOjpub3RGb3VuZCkKICAg
ICAgICAgICAgIGxhc3RQcmVmaXhUcmVlID0gbGFzdFByZWZpeFRyZWUtPmVkZ2VzW25leHRFbnRy
eUluZGV4XS5jaGlsZC5nZXQoKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBoYXNOZXdU
ZXJtID0gdHJ1ZTsKLQogICAgICAgICAgICAgbGFzdFByZWZpeFRyZWUtPmVkZ2VzLmFwcGVuZChQ
cmVmaXhUcmVlRWRnZSh7dGVybSwgc3RkOjptYWtlX3VuaXF1ZTxQcmVmaXhUcmVlVmVydGV4Pigp
fSkpOwogICAgICAgICAgICAgbGFzdFByZWZpeFRyZWUgPSBsYXN0UHJlZml4VHJlZS0+ZWRnZXMu
bGFzdCgpLmNoaWxkLmdldCgpOwogICAgICAgICB9Ci0gICAgICAgIHByZWZpeFRyZWVWZXJ0aWNl
c0ZvclBhdHRlcm4uYXBwZW5kKGxhc3RQcmVmaXhUcmVlKTsKICAgICB9CiAKLSAgICBBY3Rpb25M
aXN0JiBhY3Rpb25zID0gcHJlZml4VHJlZVZlcnRpY2VzRm9yUGF0dGVybi5sYXN0KCktPmZpbmFs
QWN0aW9uczsKKyAgICBBY3Rpb25MaXN0JiBhY3Rpb25zID0gbGFzdFByZWZpeFRyZWUtPmZpbmFs
QWN0aW9uczsKICAgICBpZiAoYWN0aW9ucy5maW5kKGFjdGlvbklkKSA9PSBXVEY6Om5vdEZvdW5k
KQogICAgICAgICBhY3Rpb25zLmFwcGVuZChhY3Rpb25JZCk7Ci0KLSAgICBpZiAoIWhhc05ld1Rl
cm0pCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgaGFzU2VlblZhcmlhYmxlTGVuZ3RoVGVy
bXMgPSBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBwYXR0ZXJuLnNpemUoKTsgaS0tOykg
ewotICAgICAgICBjb25zdCBUZXJtJiB0ZXJtID0gcGF0dGVybltpXTsKLSAgICAgICAgaGFzU2Vl
blZhcmlhYmxlTGVuZ3RoVGVybXMgfD0gIXRlcm0uaGFzRml4ZWRMZW5ndGgoKTsKLSAgICAgICAg
cHJlZml4VHJlZVZlcnRpY2VzRm9yUGF0dGVybltpICsgMV0tPmluVmFyaWFibGVMZW5ndGhQcmVm
aXggfD0gaGFzU2VlblZhcmlhYmxlTGVuZ3RoVGVybXM7Ci0gICAgfQotICAgIHByZWZpeFRyZWVW
ZXJ0aWNlc0ZvclBhdHRlcm5bMF0tPmluVmFyaWFibGVMZW5ndGhQcmVmaXggfD0gaGFzU2VlblZh
cmlhYmxlTGVuZ3RoVGVybXM7CiB9CiAKLXN0cnVjdCBBY3RpdmVTdWJ0cmVlIHsKLSAgICBjb25z
dCBQcmVmaXhUcmVlVmVydGV4KiB2ZXJ0ZXg7Ci0gICAgUHJlZml4VHJlZUVkZ2VzOjpjb25zdF9p
dGVyYXRvciBpdGVyYXRvcjsKLX07Ci0KLXN0YXRpYyB2b2lkIGdlbmVyYXRlTkZBRm9yU3VidHJl
ZShORkEmIG5mYSwgdW5zaWduZWQgcm9vdElkLCBjb25zdCBQcmVmaXhUcmVlVmVydGV4JiBwcmVm
aXhUcmVlVmVydGV4KQorc3RhdGljIHZvaWQgZ2VuZXJhdGVORkFGb3JTdWJ0cmVlKE5GQSYgbmZh
LCB1bnNpZ25lZCBuZmFSb290SWQsIFByZWZpeFRyZWVWZXJ0ZXgmIHJvb3QpCiB7Ci0gICAgQVNT
RVJUX1dJVEhfTUVTU0FHRSghcHJlZml4VHJlZVZlcnRleC5pblZhcmlhYmxlTGVuZ3RoUHJlZml4
LCAiVGhpcyBjb2RlIGFzc3VtZXMgdGhlIHN1YnRyZWVzIHdpdGggdmFyaWFibGUgcHJlZml4IGxl
bmd0aCBoYXZlIGFscmVhZHkgYmVlbiBoYW5kbGVkLiIpOwotCi0gICAgc3RydWN0IEFjdGl2ZU5G
QVN1YnRyZWUgOiBBY3RpdmVTdWJ0cmVlIHsKLSAgICAgICAgQWN0aXZlTkZBU3VidHJlZShjb25z
dCBQcmVmaXhUcmVlVmVydGV4KiB2ZXJ0ZXgsIFByZWZpeFRyZWVFZGdlczo6Y29uc3RfaXRlcmF0
b3IgaXRlcmF0b3IsIHVuc2lnbmVkIG5vZGVJbmRleCkKLSAgICAgICAgICAgIDogQWN0aXZlU3Vi
dHJlZSh7IHZlcnRleCwgaXRlcmF0b3IgfSkKLSAgICAgICAgICAgICwgbGFzdE5vZGVJbmRleChu
b2RlSW5kZXgpCisgICAgLyoKKyAgICAvLyBOb24tcmVjdXJzaXZlIGZvcm0gb2YgdGhpczoKKyAg
ICBmb3IgKGF1dG8mIGVkZ2UgOiByb290LmVkZ2VzKSB7CisgICAgICAgIGlmICghZWRnZS50ZXJt
Lmhhc0ZpeGVkTGVuZ3RoKCkpCisgICAgICAgICAgICBjb250aW51ZTsgLy8gVGhpcyB3aWxsIGJl
IGEgcGFydCBvZiBhbm90aGVyIE5GQS4KKyAgICAgICAgdW5zaWduZWQgc3VidHJlZVJvb3RJZCA9
IGVkZ2UudGVybS5nZW5lcmF0ZUdyYXBoKG5mYSwgbmZhUm9vdElkLCBlZGdlLmNoaWxkLT5maW5h
bEFjdGlvbnMpOworICAgICAgICBnZW5lcmF0ZU5GQUZvclN1YnRyZWUobmZhLCBzdWJ0cmVlUm9v
dElkLCAqZWRnZS5jaGlsZC5nZXQoKSk7CisgICAgICAgIGlmIChlZGdlLmNoaWxkLT5lZGdlcy5p
c0VtcHR5KCkpCisgICAgICAgICAgICBlZGdlLnRlcm0gPSBUZXJtKFRlcm06OkRlbGV0ZWRWYWx1
ZSk7IC8vIE1hcmsgdGhpcyBsZWFmIGZvciBkZWxldGluZy4KKyAgICB9CisgICAgcm9vdC5lZGdl
cy5yZW1vdmVBbGxNYXRjaGluZyhbXShQcmVmaXhUcmVlRWRnZSYgZWRnZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBlZGdlLnRlcm0uaXNEZWxldGVkVmFsdWUoKTsKKyAgICB9KTsKKyAgICAqLwor
ICAgIAorICAgIHN0cnVjdCBBY3RpdmVTdWJ0cmVlIHsKKyAgICAgICAgQWN0aXZlU3VidHJlZShQ
cmVmaXhUcmVlVmVydGV4JiB2ZXJ0ZXgsIHVuc2lnbmVkIHJvb3RJZCwgdW5zaWduZWQgZWRnZUlu
ZGV4KQorICAgICAgICAgICAgOiB2ZXJ0ZXgodmVydGV4KQorICAgICAgICAgICAgLCByb290SWQo
cm9vdElkKQorICAgICAgICAgICAgLCBlZGdlSW5kZXgoZWRnZUluZGV4KQogICAgICAgICB7CiAg
ICAgICAgIH0KLSAgICAgICAgdW5zaWduZWQgbGFzdE5vZGVJbmRleDsKKyAgICAgICAgUHJlZml4
VHJlZVZlcnRleCYgdmVydGV4OworICAgICAgICB1bnNpZ25lZCByb290SWQ7CisgICAgICAgIHVu
c2lnbmVkIGVkZ2VJbmRleDsKICAgICB9OwotCi0gICAgVmVjdG9yPEFjdGl2ZU5GQVN1YnRyZWU+
IGFjdGl2ZVN0YWNrOwotICAgIGFjdGl2ZVN0YWNrLmFwcGVuZChBY3RpdmVORkFTdWJ0cmVlKCZw
cmVmaXhUcmVlVmVydGV4LCBwcmVmaXhUcmVlVmVydGV4LmVkZ2VzLmJlZ2luKCksIHJvb3RJZCkp
OwotCi0gICAgd2hpbGUgKHRydWUpIHsKLSAgICBQcm9jZXNzU3VidHJlZToKLSAgICAgICAgZm9y
IChBY3RpdmVORkFTdWJ0cmVlJiBhY3RpdmVTdWJ0cmVlID0gYWN0aXZlU3RhY2subGFzdCgpOyBh
Y3RpdmVTdWJ0cmVlLml0ZXJhdG9yICE9IGFjdGl2ZVN1YnRyZWUudmVydGV4LT5lZGdlcy5lbmQo
KTsgKythY3RpdmVTdWJ0cmVlLml0ZXJhdG9yKSB7Ci0gICAgICAgICAgICBpZiAoYWN0aXZlU3Vi
dHJlZS5pdGVyYXRvci0+Y2hpbGQtPmluVmFyaWFibGVMZW5ndGhQcmVmaXgpCisgICAgVmVjdG9y
PEFjdGl2ZVN1YnRyZWU+IHN0YWNrOworICAgIGlmICghcm9vdC5lZGdlcy5pc0VtcHR5KCkpCisg
ICAgICAgIHN0YWNrLmFwcGVuZChBY3RpdmVTdWJ0cmVlKHJvb3QsIG5mYVJvb3RJZCwgMCkpOwor
ICAgIAorICAgIC8vIEdlbmVyYXRlIGdyYXBocyBmb3IgZWFjaCBzdWJ0cmVlIHRoYXQgZG9lcyBu
b3QgY29udGFpbiBhbnkgcXVhbnRpZmllcnMuCisgICAgd2hpbGUgKCFzdGFjay5pc0VtcHR5KCkp
IHsKKyAgICAgICAgUHJlZml4VHJlZVZlcnRleCYgdmVydGV4ID0gc3RhY2subGFzdCgpLnZlcnRl
eDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgZWRnZUluZGV4ID0gc3RhY2subGFzdCgpLmVkZ2VJ
bmRleDsKKworICAgICAgICBpZiAoZWRnZUluZGV4ID49IHZlcnRleC5lZGdlcy5zaXplKCkpIHsK
KyAgICAgICAgICAgIEFTU0VSVChlZGdlSW5kZXggPT0gdmVydGV4LmVkZ2VzLnNpemUoKSk7Cisg
ICAgICAgICAgICB2ZXJ0ZXguZWRnZXMucmVtb3ZlQWxsTWF0Y2hpbmcoW10oUHJlZml4VHJlZUVk
Z2UmIGVkZ2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVkZ2UudGVy
bS5pc0RlbGV0ZWRWYWx1ZSgpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBzdGFjay5y
ZW1vdmVMYXN0KCk7CisgICAgICAgICAgICBpZiAoIXN0YWNrLmlzRW1wdHkoKSkgeworICAgICAg
ICAgICAgICAgIGF1dG8mIGVkZ2UgPSBzdGFjay5sYXN0KCkudmVydGV4LmVkZ2VzW3N0YWNrLmxh
c3QoKS5lZGdlSW5kZXhdOworICAgICAgICAgICAgICAgIGlmIChlZGdlLmNoaWxkLT5lZGdlcy5p
c0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIGVkZ2UudGVybSA9IFRlcm0oVGVybTo6RGVs
ZXRlZFZhbHVlKTsgLy8gTWFyayB0aGlzIGxlYWYgZm9yIGRlbGV0aW5nLgorICAgICAgICAgICAg
ICAgIHN0YWNrLmxhc3QoKS5lZGdlSW5kZXgrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGF1dG8mIGVkZ2UgPSB2ZXJ0ZXguZWRnZXNbZWRnZUluZGV4XTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gUXVhbnRpZmllZCBlZGdlcyBpbiB0aGUgc3Vi
dHJlZSB3aWxsIGJlIGEgcGFydCBvZiBhbm90aGVyIE5GQS4KKyAgICAgICAgICAgIGlmICghZWRn
ZS50ZXJtLmhhc0ZpeGVkTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBzdGFjay5sYXN0KCku
ZWRnZUluZGV4Kys7CiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGNv
bnN0IFRlcm0mIHRlcm0gPSBhY3RpdmVTdWJ0cmVlLml0ZXJhdG9yLT50ZXJtOwotICAgICAgICAg
ICAgdW5zaWduZWQgbmV3RW5kTm9kZUluZGV4ID0gdGVybS5nZW5lcmF0ZUdyYXBoKG5mYSwgYWN0
aXZlU3VidHJlZS5sYXN0Tm9kZUluZGV4LCBhY3RpdmVTdWJ0cmVlLml0ZXJhdG9yLT5jaGlsZC0+
ZmluYWxBY3Rpb25zKTsKLQotICAgICAgICAgICAgUHJlZml4VHJlZVZlcnRleCogcHJlZml4VHJl
ZVZlcnRleCA9IGFjdGl2ZVN1YnRyZWUuaXRlcmF0b3ItPmNoaWxkLmdldCgpOwotICAgICAgICAg
ICAgaWYgKCFwcmVmaXhUcmVlVmVydGV4LT5lZGdlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAg
ICAgICBhY3RpdmVTdGFjay5hcHBlbmQoQWN0aXZlTkZBU3VidHJlZShwcmVmaXhUcmVlVmVydGV4
LCBwcmVmaXhUcmVlVmVydGV4LT5lZGdlcy5iZWdpbigpLCBuZXdFbmROb2RlSW5kZXgpKTsKLSAg
ICAgICAgICAgICAgICBnb3RvIFByb2Nlc3NTdWJ0cmVlOwogICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICB1bnNpZ25lZCBzdWJ0cmVlUm9vdElkID0gZWRnZS50ZXJtLmdl
bmVyYXRlR3JhcGgobmZhLCBzdGFjay5sYXN0KCkucm9vdElkLCBlZGdlLmNoaWxkLT5maW5hbEFj
dGlvbnMpOworICAgICAgICAgICAgQVNTRVJUKGVkZ2UuY2hpbGQuZ2V0KCkpOworICAgICAgICAg
ICAgc3RhY2suYXBwZW5kKEFjdGl2ZVN1YnRyZWUoKmVkZ2UuY2hpbGQuZ2V0KCksIHN1YnRyZWVS
b290SWQsIDApKTsKICAgICAgICAgfQotCi0gICAgICAgIGFjdGl2ZVN0YWNrLnJlbW92ZUxhc3Qo
KTsKLSAgICAgICAgaWYgKGFjdGl2ZVN0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICArK2FjdGl2ZVN0YWNrLmxhc3QoKS5pdGVyYXRvcjsKICAgICB9CiB9CiAKLXZv
aWQgQ29tYmluZWRVUkxGaWx0ZXJzOjpwcm9jZXNzTkZBcyhzdGQ6OmZ1bmN0aW9uPHZvaWQoTkZB
JiYpPiBoYW5kbGVyKSBjb25zdAordm9pZCBDb21iaW5lZFVSTEZpbHRlcnM6OnByb2Nlc3NORkFz
KHN0ZDo6ZnVuY3Rpb248dm9pZChORkEmJik+IGhhbmRsZXIpCiB7Ci0gICAgVmVjdG9yPEFjdGl2
ZVN1YnRyZWU+IGFjdGl2ZVN0YWNrOwotICAgIGFjdGl2ZVN0YWNrLmFwcGVuZChBY3RpdmVTdWJ0
cmVlKHsgbV9wcmVmaXhUcmVlUm9vdC5nZXQoKSwgbV9wcmVmaXhUcmVlUm9vdC0+ZWRnZXMuYmVn
aW4oKSB9KSk7Ci0KKyNpZiBDT05URU5UX0VYVEVOU0lPTlNfU1RBVEVfTUFDSElORV9ERUJVR0dJ
TkcKKyAgICBwcmludCgpOworI2VuZGlmCiAgICAgd2hpbGUgKHRydWUpIHsKLSAgICBQcm9jZXNz
U3VidHJlZToKLSAgICAgICAgQWN0aXZlU3VidHJlZSYgYWN0aXZlU3VidHJlZSA9IGFjdGl2ZVN0
YWNrLmxhc3QoKTsKLQotICAgICAgICAvLyBXZSBnbyBkZXB0aCBmaXJzdCBpbnRvIHRoZSBzdWJ0
cmVlcyB3aXRoIHZhcmlhYmxlIHByZWZpeC4gRmluZCB0aGUgbmV4dCBzdWJ0cmVlLgotICAgICAg
ICBmb3IgKDsgYWN0aXZlU3VidHJlZS5pdGVyYXRvciAhPSBhY3RpdmVTdWJ0cmVlLnZlcnRleC0+
ZWRnZXMuZW5kKCk7ICsrYWN0aXZlU3VidHJlZS5pdGVyYXRvcikgewotICAgICAgICAgICAgUHJl
Zml4VHJlZVZlcnRleCogcHJlZml4VHJlZVZlcnRleCA9IGFjdGl2ZVN1YnRyZWUuaXRlcmF0b3It
PmNoaWxkLmdldCgpOwotICAgICAgICAgICAgaWYgKHByZWZpeFRyZWVWZXJ0ZXgtPmluVmFyaWFi
bGVMZW5ndGhQcmVmaXgpIHsKLSAgICAgICAgICAgICAgICBhY3RpdmVTdGFjay5hcHBlbmQoQWN0
aXZlU3VidHJlZSh7IHByZWZpeFRyZWVWZXJ0ZXgsIHByZWZpeFRyZWVWZXJ0ZXgtPmVkZ2VzLmJl
Z2luKCkgfSkpOwotICAgICAgICAgICAgICAgIGdvdG8gUHJvY2Vzc1N1YnRyZWU7Ci0gICAgICAg
ICAgICB9CisgICAgICAgIC8vIFRyYXZlcnNlIG91dCB0byBhIGxlYWYuCisgICAgICAgIFZlY3Rv
cjxQcmVmaXhUcmVlVmVydGV4KiwgMTI4PiBzdGFjazsKKyAgICAgICAgUHJlZml4VHJlZVZlcnRl
eCogdmVydGV4ID0gbV9wcmVmaXhUcmVlUm9vdC5nZXQoKTsKKyAgICAgICAgd2hpbGUgKHRydWUp
IHsKKyAgICAgICAgICAgIEFTU0VSVCh2ZXJ0ZXgpOworICAgICAgICAgICAgc3RhY2suYXBwZW5k
KHZlcnRleCk7CisgICAgICAgICAgICBpZiAodmVydGV4LT5lZGdlcy5pc0VtcHR5KCkpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB2ZXJ0ZXggPSB2ZXJ0ZXgtPmVkZ2VzLmxh
c3QoKS5jaGlsZC5nZXQoKTsKICAgICAgICAgfQotCi0gICAgICAgIC8vIEFmdGVyIHdlIHJlYWNo
ZWQgaGVyZSwgd2Uga25vdyB0aGF0IGFsbCB0aGUgc3VidHJlZXMgd2l0aCB2YXJpYWJsZSBwcmVm
aXhlcyBoYXZlIGJlZW4gcHJvY2Vzc2VkLAotICAgICAgICAvLyB0aW1lIHRvIGdlbmVyYXRlIHRo
ZSBORkEgZm9yIHRoZSBncmFwaCByb290ZWQgaGVyZS4KLSAgICAgICAgYm9vbCBuZWVkVG9HZW5l
cmF0ZSA9IGFjdGl2ZVN1YnRyZWUudmVydGV4LT5lZGdlcy5pc0VtcHR5KCkgJiYgIWFjdGl2ZVN1
YnRyZWUudmVydGV4LT5maW5hbEFjdGlvbnMuaXNFbXB0eSgpOwotICAgICAgICBpZiAoIW5lZWRU
b0dlbmVyYXRlKSB7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVkZ2UgOiBhY3RpdmVT
dWJ0cmVlLnZlcnRleC0+ZWRnZXMpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWVkZ2UuY2hpbGQt
PmluVmFyaWFibGVMZW5ndGhQcmVmaXgpIHsKLSAgICAgICAgICAgICAgICAgICAgbmVlZFRvR2Vu
ZXJhdGUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChzdGFjay5zaXplKCkgPT0gMSkKKyAgICAg
ICAgICAgIGJyZWFrOyAvLyBXZSdyZSBkb25lIG9uY2Ugd2UgaGF2ZSBwcm9jZXNzZWQgYW5kIHJl
bW92ZWQgYWxsIHRoZSBlZGdlcyBpbiB0aGUgcHJlZml4IHRyZWUuCisgICAgICAgIAorICAgICAg
ICAvLyBGaW5kIHRoZSBwcmVmaXggcm9vdCBmb3IgdGhpcyBORkEuIFRoaXMgaXMgdGhlIHZlcnRl
eCBhZnRlciB0aGUgbGFzdCB0ZXJtIHdpdGggYSBxdWFudGlmaWVyIGlmIHRoZXJlIGlzIG9uZSwK
KyAgICAgICAgLy8gb3IgdGhlIHJvb3QgaWYgdGhlcmUgYXJlIG5vIHF1YW50aWZpZXJzIGxlZnQu
CisgICAgICAgIHdoaWxlIChzdGFjay5zaXplKCkgPiAxKSB7CisgICAgICAgICAgICBpZiAoIXN0
YWNrW3N0YWNrLnNpemUoKSAtIDJdLT5lZGdlcy5sYXN0KCkudGVybS5oYXNGaXhlZExlbmd0aCgp
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgc3RhY2sucmVtb3ZlTGFzdCgp
OwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5lZWRUb0dlbmVyYXRlKSB7Ci0gICAgICAgICAg
ICBORkEgbmZhOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBwcmVmaXhFbmQgPSBuZmEucm9vdCgp
OwotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYWN0aXZlU3RhY2suc2l6
ZSgpIC0gMTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVGVybSYgdGVybSA9IGFjdGl2
ZVN0YWNrW2ldLml0ZXJhdG9yLT50ZXJtOwotICAgICAgICAgICAgICAgIHByZWZpeEVuZCA9IHRl
cm0uZ2VuZXJhdGVHcmFwaChuZmEsIHByZWZpeEVuZCwgYWN0aXZlU3RhY2tbaV0uaXRlcmF0b3It
PmNoaWxkLT5maW5hbEFjdGlvbnMpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3Ig
KGNvbnN0IGF1dG8mIGVkZ2UgOiBhY3RpdmVTdWJ0cmVlLnZlcnRleC0+ZWRnZXMpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoIWVkZ2UuY2hpbGQtPmluVmFyaWFibGVMZW5ndGhQcmVmaXgpIHsKLSAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbmV3U3VidHJlZVN0YXJ0ID0gZWRnZS50ZXJtLmdl
bmVyYXRlR3JhcGgobmZhLCBwcmVmaXhFbmQsIGVkZ2UuY2hpbGQtPmZpbmFsQWN0aW9ucyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlTkZBRm9yU3VidHJlZShuZmEsIG5ld1N1YnRyZWVT
dGFydCwgKmVkZ2UuY2hpbGQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgaGFuZGxlcihXVEY6Om1vdmUobmZhKSk7CisgICAgICAg
IEFTU0VSVF9XSVRIX01FU1NBR0UoIXN0YWNrLmlzRW1wdHkoKSwgIkF0IGxlYXN0IHRoZSByb290
IHNob3VsZCBiZSBpbiB0aGUgc3RhY2siKTsKKyAgICAgICAgCisgICAgICAgIC8vIE1ha2UgYW4g
TkZBIHdpdGggdGhlIHN1YnRyZWVzIGZvciB3aG9tIHRoaXMgaXMgYWxzbyB0aGUgbGFzdCBxdWFu
dGlmaWVyIChvciB3aG8gYWxzbyBoYXZlIG5vIHF1YW50aWZpZXIpLgorICAgICAgICBORkEgbmZh
OworICAgICAgICAvLyBQdXQgdGhlIHByZWZpeCBpbnRvIHRoZSBORkEuCisgICAgICAgIHVuc2ln
bmVkIHByZWZpeEVuZCA9IG5mYS5yb290KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzdGFjay5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgICAgIEFTU0VSVCghc3RhY2tb
aV0tPmVkZ2VzLmlzRW1wdHkoKSk7CisgICAgICAgICAgICBjb25zdCBQcmVmaXhUcmVlRWRnZSYg
ZWRnZSA9IHN0YWNrW2ldLT5lZGdlcy5sYXN0KCk7CisgICAgICAgICAgICBwcmVmaXhFbmQgPSBl
ZGdlLnRlcm0uZ2VuZXJhdGVHcmFwaChuZmEsIHByZWZpeEVuZCwgZWRnZS5jaGlsZC0+ZmluYWxB
Y3Rpb25zKTsKKyAgICAgICAgfQorICAgICAgICAvLyBQdXQgdGhlIG5vbi1xdWFudGlmaWVkIHZl
cnRpY2VzIGluIHRoZSBzdWJ0cmVlIGludG8gdGhlIE5GQSBhbmQgZGVsZXRlIHRoZW0uCisgICAg
ICAgIEFTU0VSVChzdGFjay5sYXN0KCkpOworICAgICAgICBnZW5lcmF0ZU5GQUZvclN1YnRyZWUo
bmZhLCBwcmVmaXhFbmQsICpzdGFjay5sYXN0KCkpOworICAgICAgICAKKyAgICAgICAgLy8gRklY
TUU6IENvbWJpbmUgc21hbGwgTkZBcyB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBORkFzLgorICAg
ICAgICBoYW5kbGVyKFdURjo6bW92ZShuZmEpKTsKKyAgICAgICAgCisgICAgICAgIC8vIENsZWFu
IHVwIGFueSBwcm9jZXNzZWQgbGVhZiBub2Rlcy4KKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAg
ICAgICAgICAgIGlmIChzdGFjay5zaXplKCkgPiAxKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0
YWNrLmxhc3QoKS0+ZWRnZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YWNr
W3N0YWNrLnNpemUoKSAtIDJdLT5lZGdlcy5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAgICAg
ICAgIHN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7IC8vIFZlcnRleCBpcyBub3QgYSBsZWFmLgorICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgYnJlYWs7IC8vIExlYXZlIHRoZSBlbXB0eSByb290Lgog
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gV2UgaGF2ZSBwcm9jZXNzZWQgYWxsIHRoZSBzdWJ0cmVl
cyBvZiB0aGlzIGxldmVsLCBwb3AgdGhlIHN0YWNrIGFuZCBtb3ZlIG9uIHRvIHRoZSBuZXh0IHNp
YmxpbmcuCi0gICAgICAgIGFjdGl2ZVN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgaWYgKGFj
dGl2ZVN0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICArK2FjdGl2
ZVN0YWNrLmxhc3QoKS5pdGVyYXRvcjsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0NvbWJpbmVkVVJMRmlsdGVycy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbWJpbmVkVVJMRmlsdGVycy5oCShyZXZp
c2lvbiAxODM2NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5l
ZFVSTEZpbHRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsOCBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGFkZFBhdHRlcm4odWludDY0X3QgcGF0dGVybklkLCBjb25zdCBWZWN0b3I8VGVy
bT4mIHBhdHRlcm4pOwogCi0gICAgdm9pZCBwcm9jZXNzTkZBcyhzdGQ6OmZ1bmN0aW9uPHZvaWQo
TkZBJiYpPiBoYW5kbGVyKSBjb25zdDsKLSAgICB2b2lkIGNsZWFyKCk7CisgICAgdm9pZCBwcm9j
ZXNzTkZBcyhzdGQ6OmZ1bmN0aW9uPHZvaWQoTkZBJiYpPiBoYW5kbGVyKTsKKyAgICBib29sIGlz
RW1wdHkoKTsKIAogI2lmIENPTlRFTlRfRVhURU5TSU9OU19QRVJGT1JNQU5DRV9SRVBPUlRJTkcK
ICAgICBzaXplX3QgbWVtb3J5VXNlZCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGls
ZXIuY3BwCShyZXZpc2lvbiAxODM2NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDIs
NiArMjQyLDcgQEAgc3RkOjplcnJvcl9jb2RlIGNvbXBpbGVSdWxlTGlzdChDb250ZW50RQogCiAg
ICAgICAgIGZpcnN0TkZBU2VlbiA9IHRydWU7CiAgICAgfSk7CisgICAgQVNTRVJUKGNvbWJpbmVk
VVJMRmlsdGVycy5pc0VtcHR5KCkpOwogCiAgICAgaWYgKCFmaXJzdE5GQVNlZW4pIHsKICAgICAg
ICAgLy8gT3VyIGJ5dGVjb2RlIGludGVycHJldGVyIGV4cGVjdHMgdG8gaGF2ZSBhdCBsZWFzdCBv
bmUgREZBLCBzbyBpZiB3ZSBoYXZlbid0IHNlZW4gYW55CkBAIC0yNTYsOSArMjU3LDYgQEAgc3Rk
OjplcnJvcl9jb2RlIGNvbXBpbGVSdWxlTGlzdChDb250ZW50RQogICAgICAgICBjb21waWxlci5j
b21waWxlKCk7CiAgICAgfQogCi0gICAgLy8gRklYTUU6IGNvbWJpbmVkVVJMRmlsdGVycyBzaG91
bGQgYmUgY2xlYXJlZCBpbmNyZW1lbnRhbGx5IGFzIGl0IGlzIHByb2Nlc3NpbmcgTkZBcy4gCi0g
ICAgY29tYmluZWRVUkxGaWx0ZXJzLmNsZWFyKCk7Ci0KICAgICBMT0dfTEFSR0VfU1RSVUNUVVJF
Uyh1bml2ZXJzYWxBY3Rpb25Mb2NhdGlvbnMsIHVuaXZlcnNhbEFjdGlvbkxvY2F0aW9ucy5jYXBh
Y2l0eSgpICogc2l6ZW9mKHVuc2lnbmVkKSk7CiAgICAgdW5pdmVyc2FsQWN0aW9uTG9jYXRpb25z
LmNsZWFyKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRl
bnRFeHRlbnNpb25zRGVidWdnaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNEZWJ1Z2dpbmcuaAkocmV2aXNpb24gMTgz
NjY3KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lv
bnNEZWJ1Z2dpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogI2RlZmluZSBD
T05URU5UX0VYVEVOU0lPTlNfUEFHRV9TSVpFIDE2Mzg0CiAKICNpZiBDT05URU5UX0VYVEVOU0lP
TlNfUEVSRk9STUFOQ0VfUkVQT1JUSU5HCi0jZGVmaW5lIExPR19MQVJHRV9TVFJVQ1RVUkVTKG5h
bWUsIHNpemUpIGlmIChzaXplID4gMTAwMDAwMCkgeyBkYXRhTG9nRigiTkFNRTogJXMgU0laRSAl
ZCIsICNuYW1lLCAoaW50KShzaXplKSk7IH07CisjZGVmaW5lIExPR19MQVJHRV9TVFJVQ1RVUkVT
KG5hbWUsIHNpemUpIGlmIChzaXplID4gMTAwMDAwMCkgeyBkYXRhTG9nRigiTkFNRTogJXMgU0la
RSAlZFxuIiwgI25hbWUsIChpbnQpKHNpemUpKTsgfTsKICNlbHNlCiAjZGVmaW5lIExPR19MQVJH
RV9TVFJVQ1RVUkVTKG5hbWUsIHNpemUpCiAjZW5kaWYKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzcyNikKKysrIFRvb2xz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE1LTA1LTAyICBB
bGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0Nv
bnRlbnQgRXh0ZW5zaW9uc10gQ29tYmluZSBORkFzIHByb3Blcmx5IGFuZCBmcmVlIG1lbW9yeSBh
cyB3ZSBjb21waWxlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQ0NDg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3Bw
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKyAgICAgICAgQWRkZWQgdGVzdHMg
Zm9yIGNvcnJlY3RseSBzcGxpdHRpbmcgdXAgTkZBcyB3aXRoIHVucXVhbnRpZmllZCB0ZXJtcyBh
ZnRlciBxdWFudGlmaWVkIHRlcm1zLgorICAgICAgICBBZGRlZCB0ZXN0cyBmb3IgZGVlcCBORkFz
LgorCiAyMDE1LTA1LTAxICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bWFyaW9AZW5kbGVzc20uY29t
PgogCiAgICAgICAgIGNoZWNrLXdlYmtpdC1zdHlsZSBmYWlscyBkdWUgdG8gc3lzdGVtIHB5bGlu
dApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNp
b25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
Q29udGVudEV4dGVuc2lvbnMuY3BwCShyZXZpc2lvbiAxODM1NTYpCisrKyBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00OTUsMTAgKzQ5NSw5IEBAIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgUmVzb3Vy
Y2VPckwKICAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCB7VVJMKFVSTCgpLCAiaHR0cDovL3dlYmtp
dC5vcmciKSwgVVJMKFVSTCgpLCAiaHR0cDovL25vdF93ZWJraXQub3JnIiksIFJlc291cmNlVHlw
ZTo6SW1hZ2V9LCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXMs
IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CiB9CiAgICAgCi1U
RVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIE11bHRpREZBKQorVEVTVF9GKENvbnRlbnRFeHRl
bnNpb25UZXN0LCBXaWRlTkZBKQogewogICAgIC8vIE1ha2UgYW4gTkZBIHdpdGggYWJvdXQgMTQw
MCBub2Rlcy4KLSAgICAvLyBGSVhNRTogVGhpcyBkb2VzIG5vdCBtYWtlIG11bHRpcGxlIERGQXMg
YW55bW9yZS4gQWRkIGEgdGVzdCB0aGF0IGRvZXMuCiAgICAgU3RyaW5nQnVpbGRlciBydWxlTGlz
dDsKICAgICBydWxlTGlzdC5hcHBlbmQoJ1snKTsKICAgICBmb3IgKGNoYXIgYzEgPSAnQSc7IGMx
IDw9ICdaJzsgKytjMSkgewpAQCAtNTMzLDYgKzUzMiwzNyBAQCBURVNUX0YoQ29udGVudEV4dGVu
c2lvblRlc3QsIE11bHRpREZBKQogICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVu
dFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnLyIpLCB7IH0pOwogfQogCitURVNUX0YoQ29udGVu
dEV4dGVuc2lvblRlc3QsIERlZXBORkEpCit7CisgICAgY29uc3QgdW5zaWduZWQgc2l6ZSA9IDEw
MDAwMDsKKyAgICAKKyAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29tYmluZWRVUkxGaWx0ZXJzIGNv
bWJpbmVkVVJMRmlsdGVyczsKKyAgICBDb250ZW50RXh0ZW5zaW9uczo6VVJMRmlsdGVyUGFyc2Vy
IHBhcnNlcihjb21iaW5lZFVSTEZpbHRlcnMpOworICAgIAorICAgIC8vIEZJWE1FOiBERkFUb05G
QTo6Y29udmVydCB0YWtlcyB3YXkgdG9vIGxvbmcgb24gdGhlc2UgZGVlcCBORkFzLiBXZSBzaG91
bGQgb3B0aW1pemUgZm9yIHRoYXQgY2FzZS4KKyAgICAKKyAgICBTdHJpbmdCdWlsZGVyIGxvdHNP
ZkFzOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIGxv
dHNPZkFzLmFwcGVuZCgnQScpOworICAgIEVYUEVDVF9FUShDb250ZW50RXh0ZW5zaW9uczo6VVJM
RmlsdGVyUGFyc2VyOjpQYXJzZVN0YXR1czo6T2ssIHBhcnNlci5hZGRQYXR0ZXJuKGxvdHNPZkFz
LnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgZmFsc2UsIDApKTsKKyAgICAKKyAgICAvLyBGSVhN
RTogWWFyciBvdWdodCB0byBiZSBhYmxlIHRvIGhhbmRsZSAyTUIgcmVndWxhciBleHByZXNzaW9u
cy4KKyAgICBTdHJpbmdCdWlsZGVyIHRvb01hbnlBczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2l6ZSAqIDIwOyArK2kpCisgICAgICAgIHRvb01hbnlBcy5hcHBlbmQoJ0EnKTsKKyAg
ICBFWFBFQ1RfRVEoQ29udGVudEV4dGVuc2lvbnM6OlVSTEZpbHRlclBhcnNlcjo6UGFyc2VTdGF0
dXM6OllhcnJFcnJvciwgcGFyc2VyLmFkZFBhdHRlcm4odG9vTWFueUFzLnRvU3RyaW5nKCkudXRm
OCgpLmRhdGEoKSwgZmFsc2UsIDApKTsKKyAgICAKKyAgICBTdHJpbmdCdWlsZGVyIG5lc3RlZEdy
b3VwczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBu
ZXN0ZWRHcm91cHMuYXBwZW5kKCcoJyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNp
emU7ICsraSkKKyAgICAgICAgbmVzdGVkR3JvdXBzLmFwcGVuZCgiQikiKTsKKyAgICAvLyBGSVhN
RTogQWRkIG5lc3RlZEdyb3Vwcy4gUmlnaHQgbm93IGl0IGFsc28gdGFrZXMgdG9vIGxvbmcuIEl0
IHNob3VsZCBiZSBvcHRpbWl6ZWQuCisgICAgCisgICAgLy8gVGhpcyBzaG91bGQgbm90IGNyYXNo
IGFuZCBub3QgdGltZW91dC4KKyAgICBFWFBFQ1RfRVEoMXVsLCBjcmVhdGVORkFzKGNvbWJpbmVk
VVJMRmlsdGVycykuc2l6ZSgpKTsKK30KKwogdm9pZCBjaGVja0NvbXBpbGVyRXJyb3IoY29uc3Qg
Y2hhcioganNvbiwgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25FcnJvciBleHBl
Y3RlZEVycm9yKQogewogICAgIFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb21waWxlZENv
bnRlbnRFeHRlbnNpb25EYXRhIGV4dGVuc2lvbkRhdGE7CkBAIC02MTYsOSArNjQ2LDkgQEAgVEVT
VF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBTdHJpY3RQcmVmaQogVEVTVF9GKENvbnRlbnRFeHRl
bnNpb25UZXN0LCBTdHJpY3RQcmVmaXhTZXBhcmF0ZWRNYWNoaW5lczIpCiB7CiAgICAgYXV0byBi
YWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxc
InRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeZm9vXCJ9fSwiCi0gICAgIntcImFjdGlvblwi
OntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl4uKlth
LWNdK2JhclwifX0sIgotICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRy
aWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJed2Via2l0OlwifX0sIgotICAgICJ7XCJhY3Rpb25c
Ijp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJbYS1j
XStiK29vbVwifX1dIik7CisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wi
fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeLipbYS1jXStiYXJcIn19LCIKKyAgICAg
ICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1m
aWx0ZXJcIjpcIl53ZWJraXQ6XCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6
XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJbYS1jXStiK29vbVwifX1d
Iik7CiAKICAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRw
Oi8vd2Via2l0Lm9yZy8iKSwgeyB9KTsKICAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9j
dW1lbnRSZXF1ZXN0KCJmb286Ly93ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpB
Y3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CkBAIC02NDYsNiArNjc2LDUyIEBAIFRFU1RfRihDb250
ZW50RXh0ZW5zaW9uVGVzdCwgU3RyaWN0UHJlZmkKICAgICBFWFBFQ1RfRVEoM3VsLCBjcmVhdGVO
RkFzKGNvbWJpbmVkVVJMRmlsdGVycykuc2l6ZSgpKTsKIH0KIAorVEVTVF9GKENvbnRlbnRFeHRl
bnNpb25UZXN0LCBTdHJpY3RQcmVmaXhTZXBhcmF0ZWRNYWNoaW5lczMpCit7CisgICAgYXV0byBi
YWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxc
InRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJBKkRcIn19LCIKKyAgICAgICAgIntcImFjdGlv
blwiOntcInR5cGVcIjpcImlnbm9yZS1wcmV2aW91cy1ydWxlc1wifSxcInRyaWdnZXJcIjp7XCJ1
cmwtZmlsdGVyXCI6XCJBKkJBK1wifX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwi
OlwiYmxvY2stY29va2llc1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJBKkJDXCJ9
fV0iKTsKKyAgICAKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0
KCJodHRwOi8vd2Via2l0Lm9yZy9EIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6
OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1
ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9BQUQiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9u
VHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVu
dFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL0FCIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qo
YmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvQUJBIiksIHsg
fSwgdHJ1ZSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgi
aHR0cDovL3dlYmtpdC5vcmcvQUJBRCIpLCB7IH0sIHRydWUpOworICAgIHRlc3RSZXF1ZXN0KGJh
Y2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL0JDIiksIHsgQ29u
dGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrQ29va2llcyB9KTsKKyAgICB0ZXN0UmVx
dWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9BQkMi
KSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tDb29raWVzIH0pOworICAg
IHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQu
b3JnL0FCQUJDIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrQ29va2ll
cyB9LCB0cnVlKTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0
KCJodHRwOi8vd2Via2l0Lm9yZy9BQkFCQ0FEIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlv
blR5cGU6OkJsb2NrQ29va2llcyB9LCB0cnVlKTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9BQkNBRCIpLCB7IENvbnRlbnRF
eHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXMsIENvbnRlbnRFeHRlbnNpb25zOjpB
Y3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7Cit9CisgICAgCitURVNUX0YoQ29udGVudEV4dGVuc2lv
blRlc3QsIFN0cmljdFByZWZpeFNlcGFyYXRlZE1hY2hpbmVzM1BhcnRpdGlvbmluZykKK3sKKyAg
ICBDb250ZW50RXh0ZW5zaW9uczo6Q29tYmluZWRVUkxGaWx0ZXJzIGNvbWJpbmVkVVJMRmlsdGVy
czsKKyAgICBDb250ZW50RXh0ZW5zaW9uczo6VVJMRmlsdGVyUGFyc2VyIHBhcnNlcihjb21iaW5l
ZFVSTEZpbHRlcnMpOworICAgIAorICAgIEVYUEVDVF9FUShDb250ZW50RXh0ZW5zaW9uczo6VVJM
RmlsdGVyUGFyc2VyOjpQYXJzZVN0YXR1czo6T2ssIHBhcnNlci5hZGRQYXR0ZXJuKCJBKkQiLCBm
YWxzZSwgMCkpOworICAgIEVYUEVDVF9FUShDb250ZW50RXh0ZW5zaW9uczo6VVJMRmlsdGVyUGFy
c2VyOjpQYXJzZVN0YXR1czo6T2ssIHBhcnNlci5hZGRQYXR0ZXJuKCJBKkJBKyIsIGZhbHNlLCAx
KSk7CisgICAgRVhQRUNUX0VRKENvbnRlbnRFeHRlbnNpb25zOjpVUkxGaWx0ZXJQYXJzZXI6OlBh
cnNlU3RhdHVzOjpPaywgcGFyc2VyLmFkZFBhdHRlcm4oIkEqQkMiLCBmYWxzZSwgMikpOworICAg
IAorICAgIC8vICJBKkEiIGFuZCAiQSpCQyIgY2FuIGJlIGdyb3VwZWQsICJBKkJBKyIgc2hvdWxk
IG5vdC4KKyAgICBFWFBFQ1RfRVEoMnVsLCBjcmVhdGVORkFzKGNvbWJpbmVkVVJMRmlsdGVycyku
c2l6ZSgpKTsKK30KKworVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBRdWFudGlmaWVySW5H
cm91cCkKK3sKKyAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29tYmluZWRVUkxGaWx0ZXJzIGNvbWJp
bmVkVVJMRmlsdGVyczsKKyAgICBDb250ZW50RXh0ZW5zaW9uczo6VVJMRmlsdGVyUGFyc2VyIHBh
cnNlcihjb21iaW5lZFVSTEZpbHRlcnMpOworICAgIAorICAgIEVYUEVDVF9FUShDb250ZW50RXh0
ZW5zaW9uczo6VVJMRmlsdGVyUGFyc2VyOjpQYXJzZVN0YXR1czo6T2ssIHBhcnNlci5hZGRQYXR0
ZXJuKCIoKChBKylCKUMpIiwgZmFsc2UsIDApKTsKKyAgICBFWFBFQ1RfRVEoQ29udGVudEV4dGVu
c2lvbnM6OlVSTEZpbHRlclBhcnNlcjo6UGFyc2VTdGF0dXM6Ok9rLCBwYXJzZXIuYWRkUGF0dGVy
bigiKCgoQSlCKylDKSIsIGZhbHNlLCAxKSk7CisgICAgRVhQRUNUX0VRKENvbnRlbnRFeHRlbnNp
b25zOjpVUkxGaWx0ZXJQYXJzZXI6OlBhcnNlU3RhdHVzOjpPaywgcGFyc2VyLmFkZFBhdHRlcm4o
IigoKEEpQispQylEIiwgZmFsc2UsIDIpKTsKKyAgICBFWFBFQ1RfRVEoQ29udGVudEV4dGVuc2lv
bnM6OlVSTEZpbHRlclBhcnNlcjo6UGFyc2VTdGF0dXM6Ok9rLCBwYXJzZXIuYWRkUGF0dGVybigi
KCgoQSlCKUMrKSIsIGZhbHNlLCAzKSk7CisgICAgRVhQRUNUX0VRKENvbnRlbnRFeHRlbnNpb25z
OjpVUkxGaWx0ZXJQYXJzZXI6OlBhcnNlU3RhdHVzOjpPaywgcGFyc2VyLmFkZFBhdHRlcm4oIigo
KEEpQilDKSIsIGZhbHNlLCA0KSk7CisgICAgCisgICAgLy8gKCgoQSlCKylDKSBhbmQgKCgoQSlC
KylDKUQgc2hvdWxkIGJlIGluIHRoZSBzYW1lIE5GQS4KKyAgICBFWFBFQ1RfRVEoNHVsLCBjcmVh
dGVORkFzKGNvbWJpbmVkVVJMRmlsdGVycykuc2l6ZSgpKTsKK30KKwogc3RhdGljIHZvaWQgdGVz
dFBhdHRlcm5TdGF0dXMoU3RyaW5nIHBhdHRlcm4sIENvbnRlbnRFeHRlbnNpb25zOjpVUkxGaWx0
ZXJQYXJzZXI6OlBhcnNlU3RhdHVzIHN0YXR1cykKIHsKICAgICBDb250ZW50RXh0ZW5zaW9uczo6
Q29tYmluZWRVUkxGaWx0ZXJzIGNvbWJpbmVkVVJMRmlsdGVyczsK
</data>
<flag name="review"
          id="277155"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>