<?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>142922</bug_id>
          
          <creation_ts>2015-03-20 14:38:42 -0700</creation_ts>
          <short_desc>Insert exception check around toPropertyKey call</short_desc>
          <delta_ts>2015-03-27 04:09:40 -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>JavaScriptCore</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>
          <dependson>142410</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1078950</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-20 14:38:42 -0700</bug_when>
    <thetext>In some places (such as operationPutByValInternal), exception check is missing after toPropertyKey.
However, since it calls toString and it could raise exceptions, we should perform exception check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1078959</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-03-20 14:54:57 -0700</bug_when>
    <thetext>We should also write a regression test for this. I think it can be done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079053</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-21 01:10:39 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; We should also write a regression test for this. I think it can be done.

Seeing the code, I found that we cannot observe this regression. Since

+ Missing exception checks are placed in GetByVal codes
+ Workaround exception check was inserted in callGetter (http://trac.webkit.org/browser/trunk/Source/JavaScriptCore/runtime/GetterSetter.cpp#L77)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079061</commentid>
    <comment_count>3</comment_count>
      <attachid>249171</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-21 05:54:28 -0700</bug_when>
    <thetext>Created attachment 249171
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079062</commentid>
    <comment_count>4</comment_count>
      <attachid>249171</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-21 06:00:53 -0700</bug_when>
    <thetext>Comment on attachment 249171
Patch

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

Added comments.

&gt; Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:575
&gt; +    ASSERT(!exec-&gt;hadException());

Since property is always JSString.

&gt; Source/JavaScriptCore/runtime/ObjectPrototype.cpp:91
&gt; +    return JSValue::encode(jsBoolean(thisValue.toObject(exec)-&gt;hasOwnProperty(exec, propertyName)));

When performing toObject onto null/undefined, it returnes JSNotAObject. This can allow us to defer exception checks live the above code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079077</commentid>
    <comment_count>5</comment_count>
      <attachid>249171</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-03-21 10:02:32 -0700</bug_when>
    <thetext>Comment on attachment 249171
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:15
&gt; +        But since callGetter has conservative (defensive) exception guard,
&gt; +        missing exception checks in GetByVal of JIT/DFG/LLInt cannot be observed.

If they can’t be observed, the checks aren’t needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079078</commentid>
    <comment_count>6</comment_count>
      <attachid>249171</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-03-21 10:07:17 -0700</bug_when>
    <thetext>Comment on attachment 249171
Patch

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

Code generally looks good. Please don’t land the changes that are not testable/observable, though.

&gt;&gt; Source/JavaScriptCore/ChangeLog:15
&gt;&gt; +        missing exception checks in GetByVal of JIT/DFG/LLInt cannot be observed.
&gt; 
&gt; If they can’t be observed, the checks aren’t needed.

Any that can’t be observed aren’t actually bugs!

&gt; Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:576
&gt; +    auto propertyName = property.toPropertyKey(exec);
&gt; +    ASSERT(!exec-&gt;hadException());
&gt; +    RETURN(baseValue.get(exec, propertyName));

I would write this:

    RETURN(baseValue.get(exec, asString(property)-&gt;toIdentifier(exec));

I don’t see any reason to call a function that is then going to check if property is a string. Nor do I see a need to split this out into multiple lines of code just to assert there is no exception.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079142</commentid>
    <comment_count>7</comment_count>
      <attachid>249171</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-22 05:15:40 -0700</bug_when>
    <thetext>Comment on attachment 249171
Patch

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

I&apos;ve found one more issues. I&apos;ll fix it with subsequent patch.

&gt;&gt;&gt; Source/JavaScriptCore/ChangeLog:15
&gt;&gt;&gt; +        missing exception checks in GetByVal of JIT/DFG/LLInt cannot be observed.
&gt;&gt; 
&gt;&gt; If they can’t be observed, the checks aren’t needed.
&gt; 
&gt; Any that can’t be observed aren’t actually bugs!

After investigating the code, I&apos;ve found that the current code works fine and my change breaks it.
I&apos;ll write it in LLIntSlowPaths.cpp.
And I&apos;ll fix my patch with explicit comments.

&gt; Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:751
&gt;      return baseValue.get(exec, property);

Reaching here, `baseValue` may be null or undefined. So baseValue.get also may cause errors.
There&apos;s several source of exceptions.

1. baseValue.get can cause errors if it&apos;s null or undefined.
2. toPropertyKey can cause errors

Seeing the spec, VM first checks (1) and perfoms toPropertyKey and checks (2).
So the above fix cause observable incorrect behavior.

var object = null;
var property = {
  toString() {
    throw new Error(&quot;out&quot;);
  }
}

object[property];    // We should see TypeError (since object is null), but with the above fix, we&apos;ll see new Error(&quot;out&quot;);

I think it&apos;s observable. I&apos;ll update the patch.

&gt;&gt; Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:576
&gt;&gt; +    RETURN(baseValue.get(exec, propertyName));
&gt; 
&gt; I would write this:
&gt; 
&gt;     RETURN(baseValue.get(exec, asString(property)-&gt;toIdentifier(exec));
&gt; 
&gt; I don’t see any reason to call a function that is then going to check if property is a string. Nor do I see a need to split this out into multiple lines of code just to assert there is no exception.

Looks nice. I&apos;ll fix it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079143</commentid>
    <comment_count>8</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-22 05:16:09 -0700</bug_when>
    <thetext>(In reply to comment #7)

Typo: subsequent =&gt; updated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079145</commentid>
    <comment_count>9</comment_count>
      <attachid>249194</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-22 05:47:22 -0700</bug_when>
    <thetext>Created attachment 249194
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079354</commentid>
    <comment_count>10</comment_count>
      <attachid>249194</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-03-23 13:12:07 -0700</bug_when>
    <thetext>Comment on attachment 249194
Patch

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

&gt; Source/JavaScriptCore/dfg/DFGOperations.cpp:300
&gt; +    if (baseValue.isUndefinedOrNull())
&gt; +        return JSValue::encode(vm.throwException(exec, createNotAnObjectError(exec, baseValue)));

Won&apos;t JSValue::get do this check for us?

&gt; Source/JavaScriptCore/dfg/DFGOperations.cpp:331
&gt; +    ASSERT(!JSValue(base).isUndefinedOrNull());

I don&apos;t think this ASSERT makes sense because a cell will never be undefined or null, by virtue of it being a cell.

&gt; Source/JavaScriptCore/jit/JITOperations.cpp:1425
&gt; +    if (baseValue.isUndefinedOrNull())
&gt; +        return exec-&gt;vm().throwException(exec, createNotAnObjectError(exec, baseValue));

I think get will do this for us. You should review other places and find out if these checks are really needed. I guess I&apos;m echoing Darin&apos;s comments a bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079555</commentid>
    <comment_count>11</comment_count>
      <attachid>249194</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-23 22:19:30 -0700</bug_when>
    <thetext>Comment on attachment 249194
Patch

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

Thank you for your review!

&gt;&gt; Source/JavaScriptCore/dfg/DFGOperations.cpp:300
&gt;&gt; +        return JSValue::encode(vm.throwException(exec, createNotAnObjectError(exec, baseValue)));
&gt; 
&gt; Won&apos;t JSValue::get do this check for us?

Yes, but we canot use this here.

JSValue::get checks null/undefined and raise an exception if |this| is null or undefined.
But, in this case, I don&apos;t use it because of the following 3 reasons.

(1)
We need to check whether the baseValue is object coercible before executing JSValue::toPropertyKey, 
Consider the following script,

var object = null;
var called = false;
var property = {
    toString() {
        called = true;
        retrun &quot;value&quot;;
    }
};
try {
    object[property];
} catch (e) {
}
assert(!called);

toPropertyKey can cause toString call. So that is observable.
If we use the following implementation,

    auto propertyName = property.toPropertyKey(exec);
    if (exec-&gt;hadException())
        return JSValue::encode(jsUndefined());
    return JSValue::encode(baseValue.get(exec, propertyName));

The above script causes an assertion failure.

(2)
I think we should not use baseValue.toObject here like the following,

    baseValue.toObject(exec);  // Check object coercible by using toObject.
    if (exec-&gt;hadException())
        return JSValue::encode(jsUndefined());
    auto propertyName = property.toPropertyKey(exec);
    if (exec-&gt;hadException())
        return JSValue::encode(jsUndefined());
    return JSValue::encode(baseValue.get(exec, propertyName));

toObject converts primitive types into wrapper objects.
But it is not efficient since wrapper objects are not necessary if we look up methods from primitive values&apos;s prototype. (using synthesizePrototype is better).

(3)
And we need to take care that we use JSValue::get in the last sequence instead of JSObject::get.
If we use JSObject that is converted by toObject, getter will be called by using this JSObject as |this|.

    JSObject* baseObject = baseValue.toObject(exec);
    if (exec-&gt;hadException())
        return JSValue::encode(jsUndefined());
    auto propertyName = property.toPropertyKey(exec);
    if (exec-&gt;hadException())
        return JSValue::encode(jsUndefined());
    return JSValue::encode(baseObject-&gt;get(exec, propertyName));    // Using baseObject. This is not correct to the spec.

It is not correct since getter should be called with the original |this| value that may be primitive types.


So, in the updated patch, I checks whether baseValue is object coercible explicitly before calling toPropertyKey.

But, you&apos;re right, using

   if (baseValue.isUndefinedOrNull())
        return JSValue::encode(vm.throwException(exec, createNotAnObjectError(exec, baseValue)));

explicitly is not good.

Instead, I&apos;ll propose that introduce `JSValue::requireObjectCoercible`.
The implementation has one on one corresponding to RequireObjectCoercible in the spec.
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-requireobjectcoercible

And the implementation will be the following.

    baseValue.requireObjectCoercible(exec);
    if (exec-&gt;hadException())
        return JSValue::encode(jsUndefined());
    auto propertyName = property.toPropertyKey(exec);
    if (exec-&gt;hadException())
        return JSValue::encode(jsUndefined());
    return JSValue::encode(baseValue.get(exec, propertyName));

What do you think of?

&gt;&gt; Source/JavaScriptCore/dfg/DFGOperations.cpp:331
&gt;&gt; +    ASSERT(!JSValue(base).isUndefinedOrNull());
&gt; 
&gt; I don&apos;t think this ASSERT makes sense because a cell will never be undefined or null, by virtue of it being a cell.

Thanks. OK, I&apos;ll drop this.

&gt;&gt; Source/JavaScriptCore/jit/JITOperations.cpp:1425
&gt;&gt; +        return exec-&gt;vm().throwException(exec, createNotAnObjectError(exec, baseValue));
&gt; 
&gt; I think get will do this for us. You should review other places and find out if these checks are really needed. I guess I&apos;m echoing Darin&apos;s comments a bit.

I&apos;ve commented the reason why we use this check explicitly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079570</commentid>
    <comment_count>12</comment_count>
      <attachid>249316</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-24 00:00:11 -0700</bug_when>
    <thetext>Created attachment 249316
Patch

Updated patch. Adding JSValue::requireObjectCoercible and use it intead of explicit isUndefinedOrNull checks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079571</commentid>
    <comment_count>13</comment_count>
      <attachid>249317</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-24 00:05:36 -0700</bug_when>
    <thetext>Created attachment 249317
Patch

Updated patch. Adding JSValue::requireObjectCoercible and use it intead of explicit isUndefinedOrNull checks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080490</commentid>
    <comment_count>14</comment_count>
      <attachid>249317</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-03-26 16:40:00 -0700</bug_when>
    <thetext>Comment on attachment 249317
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080580</commentid>
    <comment_count>15</comment_count>
      <attachid>249317</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-27 04:09:33 -0700</bug_when>
    <thetext>Comment on attachment 249317
Patch

Clearing flags on attachment: 249317

Committed r182057: &lt;http://trac.webkit.org/changeset/182057&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080581</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-27 04:09:40 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249171</attachid>
            <date>2015-03-21 05:54:28 -0700</date>
            <delta_ts>2015-03-22 05:47:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142922-20150321215353.patch</filename>
            <type>text/plain</type>
            <size>15916</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxODIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
MzZhNTQ2M2M0MzM2YTU4NWEyMWUzMjE4Y2E0M2EwMjg3MDU5N2E0Li4xNzUxZjFlN2Q5MGE3Mjk4
NjMwOTFmNzUxNzEzZjQzZGRmY2I0MDNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MCBAQAorMjAxNS0wMy0yMSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBJbnNlcnQgZXhjZXB0aW9uIGNoZWNrIGp1c3QgYWZ0ZXIgdG9Qcm9w
ZXJ0eUtleSBjYWxsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDI5MjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBJbiBzb21lIHBsYWNlcywgZXhjZXB0aW9uIGNoZWNrIGlzIG1pc3NpbmcgYWZ0ZXIgdG9Q
cm9wZXJ0eUtleS4KKyAgICAgICAgSG93ZXZlciwgc2luY2UgaXQgY2FsbHMgdG9TdHJpbmcgYW5k
IGl0IGNvdWxkIHJhaXNlIGV4Y2VwdGlvbnMsCisgICAgICAgIHdlIHNob3VsZCBwZXJmb3JtIGV4
Y2VwdGlvbiBjaGVjay4KKworICAgICAgICBNaXNzaW5nIGV4Y2VwdGlvbiBjaGVja3MgaW4gT2Jq
ZWN0LnByb3RvdHlwZSBtZXRob2RzIGNhbiBiZQorICAgICAgICBvYnNlcnZlZCBzaW5jZSBpdCB3
b3VsZCBiZSBvdmVycmlkZGVuIHdpdGggdG9PYmplY3QobnVsbC91bmRlZmluZWQpIGVycm9ycy4K
KyAgICAgICAgQnV0IHNpbmNlIGNhbGxHZXR0ZXIgaGFzIGNvbnNlcnZhdGl2ZSAoZGVmZW5zaXZl
KSBleGNlcHRpb24gZ3VhcmQsCisgICAgICAgIG1pc3NpbmcgZXhjZXB0aW9uIGNoZWNrcyBpbiBH
ZXRCeVZhbCBvZiBKSVQvREZHL0xMSW50IGNhbm5vdCBiZSBvYnNlcnZlZC4KKworICAgICAgICAq
IGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6
CisgICAgICAgIChKU0M6OmdldEJ5VmFsKToKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRo
cy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpnZXRCeVZhbCk6CisgICAgICAgICogcnVudGlt
ZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpTTE9XX1BBVEhfREVDTCk6Cisg
ICAgICAgICogcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpvYmpl
Y3RQcm90b0Z1bmNIYXNPd25Qcm9wZXJ0eSk6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVu
Y0RlZmluZUdldHRlcik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0RlZmluZVNldHRl
cik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRlcik6CisgICAgICAg
IChKU0M6Om9iamVjdFByb3RvRnVuY0xvb2t1cFNldHRlcik6CisgICAgICAgIChKU0M6Om9iamVj
dFByb3RvRnVuY1Byb3BlcnR5SXNFbnVtZXJhYmxlKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3Mv
ZXhjZXB0aW9uLWluLXRvLXByb3BlcnR5LWtleS1zaG91bGQtYmUtaGFuZGxlZC1lYXJseS1pbi1v
YmplY3QtbWV0aG9kcy5qczogQWRkZWQuCisgICAgICAgIChzaG91bGRUaHJvdyk6CisgICAgICAg
IChpZik6CisgICAgICAgICogdGVzdHMvc3RyZXNzL2V4Y2VwdGlvbi1pbi10by1wcm9wZXJ0eS1r
ZXktc2hvdWxkLWJlLWhhbmRsZWQtZWFybHkuanM6IEFkZGVkLgorICAgICAgICAoc2hvdWxkVGhy
b3cpOgorICAgICAgICAoLik6CisKIDIwMTUtMDMtMjAgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhu
ZW5iQGdtYWlsLmNvbT4KIAogICAgICAgICBHQ1RpbWVyIHNob3VsZCBrbm93IGtlZXAgdHJhY2sg
b2YgbmVzdGVkIEdDIHBoYXNlcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAKaW5kZXggMDIwNzdjNTQxZTgwYTU5MmQ0NjA5Nzk0ZWI2NGU5MGQ1ODFjMTMzNS4u
YTU2NGVmNzNmMmIxNTU4ZTc1N2JlZDI4YjBmNzhmODI5Mzk5NWQ0ZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCkBAIC0yOTcsNiArMjk3LDggQEAgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbChFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIGUKICAgICB9CiAKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHBy
b3BlcnR5LnRvUHJvcGVydHlLZXkoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVlLmdldChleGVjLCBwcm9wZXJ0eU5hbWUpKTsK
IH0KIApAQCAtMzI1LDYgKzMyNyw4IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uR2V0QnlWYWxDZWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlCiAgICAgfQog
CiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eS50b1Byb3BlcnR5S2V5KGV4ZWMpOwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUo
YmFzZSkuZ2V0KGV4ZWMsIHByb3BlcnR5TmFtZSkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCA1ZmE4YmZmOGViOWFmNjJjODI4MDBlMmZi
NWVlODk0ZjBhYzg1ZDExLi5hNThiNTJhODJjZDE0NjQ1NTBmOGZmYTdiOTEyMThhNGY4ZWZmMDcy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKQEAgLTE0
MjIsNiArMTQyMiw4IEBAIHN0YXRpYyBKU1ZhbHVlIGdldEJ5VmFsKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBSCiAgICAgfQogCiAgICAgYXV0
byBwcm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGV4ZWMpOworICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgcmV0
dXJuIGJhc2VWYWx1ZS5nZXQoZXhlYywgcHJvcGVydHkpOwogfQogCkBAIC0xNTU4LDYgKzE1NjAs
OCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5n
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVgogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgYXV0byBwcm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGV4ZWMpOworICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0
KGV4ZWMsIHByb3BlcnR5KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwCmluZGV4IDE1NTA4MGM2ZDI3ZjA3ZjA0YTI3YmIwZTA2NTdm
MDNiNjBjYzExNWMuLmJmZWM0MWFlYWRlYzEyYTdjZDUxMmJmOGIzOWIwMWVhZTIwMmQ0ZWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcApAQCAt
NzQ2LDYgKzc0Niw4IEBAIGlubGluZSBKU1ZhbHVlIGdldEJ5VmFsKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0KQogICAgIH0KIAogICAgIGF1dG8g
cHJvcGVydHkgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShleGVjKTsKKyAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIHJldHVy
biBiYXNlVmFsdWUuZ2V0KGV4ZWMsIHByb3BlcnR5KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKaW5kZXggMDlhMDhkNzlmMWQ3
ODUwNjdjNThiNmM3YTNiMDc3NzE3N2M1NTNmZi4uYjMxZjhmN2M0ZmIyYTQzMTIxM2JlYTlkNTBh
MWY0NGY4ZmZlZjAxMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21tb25TbG93UGF0aHMuY3BwCkBAIC01NzEsNyArNTcxLDkgQEAgc3RhdGljIENvbW1vblNsb3dQ
YXRoczo6QXJpdHlDaGVja0RhdGEqIHNldHVwQXJpdHlDaGVja0RhdGEoVk0mIHZtLCBpbnQgc2xv
dHNUb0EKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IE9QX0MoMikuanNWYWx1ZSgpOwogICAgIEpT
VmFsdWUgcHJvcGVydHkgPSBPUCgzKS5qc1ZhbHVlKCk7CiAgICAgQVNTRVJUKHByb3BlcnR5Lmlz
U3RyaW5nKCkpOwotICAgIFJFVFVSTihiYXNlVmFsdWUuZ2V0KGV4ZWMsIHByb3BlcnR5LnRvUHJv
cGVydHlLZXkoZXhlYykpKTsKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5LnRvUHJv
cGVydHlLZXkoZXhlYyk7CisgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAg
UkVUVVJOKGJhc2VWYWx1ZS5nZXQoZXhlYywgcHJvcGVydHlOYW1lKSk7CiB9CiAKIFNMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAppbmRl
eCBmMDkyYTk3YWM3MGQ3NDRhNjE5OWM4ZGU1NjhkNzVmYmRkYWFhZDJiLi45NGM1YTRkZjA2YzZh
YzY1YzQwZmUzMTc4YzJiZDkzY2U0ZmU1OWJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAKQEAgLTg1LDcgKzg1LDEwIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUq
IGV4ZWMpCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0hhc093
blByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4
ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0aGlzVmFsdWUudG9PYmplY3QoZXhlYyktPmhhc093blBy
b3BlcnR5KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJvcGVydHlLZXkoZXhlYykpKSk7Cisg
ICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4
ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbih0aGlzVmFsdWUudG9PYmplY3QoZXhlYyktPmhhc093blByb3BlcnR5KGV4ZWMsIHBy
b3BlcnR5TmFtZSkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQ
cm90b0Z1bmNJc1Byb3RvdHlwZU9mKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTExOCwxMSArMTIxLDE1
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jRGVmaW5lR2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYykKICAgICBpZiAoZ2V0Q2FsbERhdGEoZ2V0LCBjYWxsRGF0YSkg
PT0gQ2FsbFR5cGVOb25lKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0
ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoImludmFsaWQgZ2V0dGVyIHVzYWdlIikpKTsK
IAorICAgIGF1dG8gcHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtl
eShleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisKICAgICBQcm9wZXJ0eURlc2NyaXB0b3Ig
ZGVzY3JpcHRvcjsKICAgICBkZXNjcmlwdG9yLnNldEdldHRlcihnZXQpOwogICAgIGRlc2NyaXB0
b3Iuc2V0RW51bWVyYWJsZSh0cnVlKTsKICAgICBkZXNjcmlwdG9yLnNldENvbmZpZ3VyYWJsZSh0
cnVlKTsKLSAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+ZGVmaW5lT3du
UHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtl
eShleGVjKSwgZGVzY3JpcHRvciwgZmFsc2UpOworICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxl
KGV4ZWMtPnZtKCkpLT5kZWZpbmVPd25Qcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUsIGRlc2NyaXB0b3IsIGZhbHNlKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiB9CkBAIC0xMzgsMTEgKzE0NSwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0RlZmluZVNldHRlcihFeGVjU3RhdGUqIGV4ZWMp
CiAgICAgaWYgKGdldENhbGxEYXRhKHNldCwgY2FsbERhdGEpID09IENhbGxUeXBlTm9uZSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVND
SUlMaXRlcmFsKCJpbnZhbGlkIHNldHRlciB1c2FnZSIpKSk7CiAKKyAgICBhdXRvIHByb3BlcnR5
TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJvcGVydHlLZXkoZXhlYyk7CisgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworCiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CiAgICAgZGVz
Y3JpcHRvci5zZXRTZXR0ZXIoc2V0KTsKICAgICBkZXNjcmlwdG9yLnNldEVudW1lcmFibGUodHJ1
ZSk7CiAgICAgZGVzY3JpcHRvci5zZXRDb25maWd1cmFibGUodHJ1ZSk7Ci0gICAgdGhpc09iamVj
dC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmRlZmluZU93blByb3BlcnR5KHRoaXNPYmplY3Qs
IGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJvcGVydHlLZXkoZXhlYyksIGRlc2NyaXB0b3Is
IGZhbHNlKTsKKyAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+ZGVmaW5l
T3duUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBm
YWxzZSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpA
QCAtMTUzLDkgKzE2NCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFBy
b3RvRnVuY0xvb2t1cEdldHRlcihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1Byb3BlcnR5
S2V5KGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKwogICAgIFByb3BlcnR5U2xvdCBzbG90
KHRoaXNPYmplY3QpOwotICAgIGlmICh0aGlzT2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywg
ZXhlYy0+YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtleShleGVjKSwgc2xvdCkKLSAgICAgICAgJiYg
c2xvdC5pc0FjY2Vzc29yKCkpIHsKKyAgICBpZiAodGhpc09iamVjdC0+Z2V0UHJvcGVydHlTbG90
KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkgJiYgc2xvdC5pc0FjY2Vzc29yKCkpIHsKICAgICAg
ICAgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIgPSBzbG90LmdldHRlclNldHRlcigpOwogICAg
ICAgICByZXR1cm4gZ2V0dGVyU2V0dGVyLT5pc0dldHRlck51bGwoKSA/IEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKSA6IEpTVmFsdWU6OmVuY29kZShnZXR0ZXJTZXR0ZXItPmdldHRlcigp
KTsKICAgICB9CkBAIC0xNjksOSArMTgzLDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgb2JqZWN0UHJvdG9GdW5jTG9va3VwU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYykKICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDAp
LnRvUHJvcGVydHlLZXkoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCiAgICAgUHJvcGVy
dHlTbG90IHNsb3QodGhpc09iamVjdCk7Ci0gICAgaWYgKHRoaXNPYmplY3QtPmdldFByb3BlcnR5
U2xvdChleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4ZWMpLCBzbG90KQot
ICAgICAgICAmJiBzbG90LmlzQWNjZXNzb3IoKSkgeworICAgIGlmICh0aGlzT2JqZWN0LT5nZXRQ
cm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSAmJiBzbG90LmlzQWNjZXNzb3Io
KSkgewogICAgICAgICBHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciA9IHNsb3QuZ2V0dGVyU2V0
dGVyKCk7CiAgICAgICAgIHJldHVybiBnZXR0ZXJTZXR0ZXItPmlzU2V0dGVyTnVsbCgpID8gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpIDogSlNWYWx1ZTo6ZW5jb2RlKGdldHRlclNldHRl
ci0+c2V0dGVyKCkpOwogICAgIH0KQEAgLTE4MSw5ICsxOTgsMTMgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNMb29rdXBTZXR0ZXIoRXhlY1N0YXRlKiBleGVj
KQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1Byb3BlcnR5
SXNFbnVtZXJhYmxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU09iamVjdCogdGhpc09iamVj
dCA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChl
eGVjKTsKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJvcGVy
dHlLZXkoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCisgICAgSlNPYmplY3QqIHRoaXNP
YmplY3QgPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmpl
Y3QoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFByb3BlcnR5RGVzY3JpcHRvciBk
ZXNjcmlwdG9yOwogICAgIGJvb2wgZW51bWVyYWJsZSA9IHRoaXNPYmplY3QtPmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpICYmIGRlc2NyaXB0
b3IuZW51bWVyYWJsZSgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGVu
dW1lcmFibGUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvZXhjZXB0aW9uLWluLXRvLXByb3BlcnR5LWtleS1zaG91bGQtYmUtaGFuZGxlZC1lYXJseS1p
bi1vYmplY3QtbWV0aG9kcy5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mv
ZXhjZXB0aW9uLWluLXRvLXByb3BlcnR5LWtleS1zaG91bGQtYmUtaGFuZGxlZC1lYXJseS1pbi1v
YmplY3QtbWV0aG9kcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mN2NjMDFkMDRkNjViODA0ZjJjNzllYTgwZjk2
MDgxMTUxMzE4NGNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9leGNlcHRpb24taW4tdG8tcHJvcGVydHkta2V5LXNob3VsZC1iZS1oYW5kbGVk
LWVhcmx5LWluLW9iamVjdC1tZXRob2RzLmpzCkBAIC0wLDAgKzEsNzMgQEAKKwordmFyIHByb3Bl
cnR5S2V5ID0geworICAgIHRvU3RyaW5nKCkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInBy
b3BlcnR5S2V5LnRvU3RyaW5nIGlzIGNhbGxlZC4iKTsKKyAgICB9Cit9OworCitmdW5jdGlvbiBz
aG91bGRUaHJvdyhmdW5jLCBtZXNzYWdlKSB7CisgICAgdmFyIGVycm9yID0gbnVsbDsKKyAgICB0
cnkgeworICAgICAgICBmdW5jKCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBlcnJvciA9
IGU7CisgICAgfQorICAgIGlmICghZXJyb3IpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigibm90
IHRocm93bi4iKTsKKyAgICBpZiAoU3RyaW5nKGVycm9yKSAhPT0gbWVzc2FnZSkKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJiYWQgZXJyb3I6ICIgKyBTdHJpbmcoZXJyb3IpKTsKK30KKwordmFy
IG9iamVjdCA9IHt9OworCitzaG91bGRUaHJvdyhmdW5jdGlvbiAoKSB7CisgICAgb2JqZWN0Lmhh
c093blByb3BlcnR5KHByb3BlcnR5S2V5KTsKK30sICJFcnJvcjogcHJvcGVydHlLZXkudG9TdHJp
bmcgaXMgY2FsbGVkLiIpOworCitzaG91bGRUaHJvdyhmdW5jdGlvbiAoKSB7CisgICAgT2JqZWN0
LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG51bGwsIHByb3BlcnR5S2V5KTsKK30sICJF
cnJvcjogcHJvcGVydHlLZXkudG9TdHJpbmcgaXMgY2FsbGVkLiIpOworCitzaG91bGRUaHJvdyhm
dW5jdGlvbiAoKSB7CisgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG51
bGwsICdvaycpOworfSwgIlR5cGVFcnJvcjogbnVsbCBpcyBub3QgYW4gb2JqZWN0IChldmFsdWF0
aW5nICdPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobnVsbCwgJ29rJyknKSIp
OworCitzaG91bGRUaHJvdyhmdW5jdGlvbiAoKSB7CisgICAgb2JqZWN0LnByb3BlcnR5SXNFbnVt
ZXJhYmxlKHByb3BlcnR5S2V5KTsKK30sICJFcnJvcjogcHJvcGVydHlLZXkudG9TdHJpbmcgaXMg
Y2FsbGVkLiIpOworCisvLyBUb1Byb3BlcnR5S2V5IGlzIGZpcnN0LCBUb09iamVjdCBpcyBmb2xs
b3dpbmcuCitzaG91bGRUaHJvdyhmdW5jdGlvbiAoKSB7CisgICAgT2JqZWN0LnByb3RvdHlwZS5w
cm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG51bGwsIHByb3BlcnR5S2V5KTsKK30sICJFcnJvcjog
cHJvcGVydHlLZXkudG9TdHJpbmcgaXMgY2FsbGVkLiIpOworCitzaG91bGRUaHJvdyhmdW5jdGlv
biAoKSB7CisgICAgLy8gVG9Qcm9wZXJ0eUtleSBpcyBmaXJzdCwgVG9PYmplY3QgaXMgZm9sbG93
aW5nLgorICAgIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChudWxs
LCAnb2snKTsKK30sICJUeXBlRXJyb3I6IG51bGwgaXMgbm90IGFuIG9iamVjdCAoZXZhbHVhdGlu
ZyAnT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG51bGwsICdvaycp
JykiKTsKKworc2hvdWxkVGhyb3coZnVuY3Rpb24gKCkgeworICAgIG9iamVjdC5fX2RlZmluZUdl
dHRlcl9fKHByb3BlcnR5S2V5LCBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAnTkcnOwor
ICAgIH0pOworfSwgIkVycm9yOiBwcm9wZXJ0eUtleS50b1N0cmluZyBpcyBjYWxsZWQuIik7CisK
K2lmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgJycpKQorICAgIHRo
cm93IG5ldyBFcnJvcigiYmFkIGRlc2NyaXB0b3IiKTsKKworc2hvdWxkVGhyb3coZnVuY3Rpb24g
KCkgeworICAgIG9iamVjdC5fX2RlZmluZVNldHRlcl9fKHByb3BlcnR5S2V5LCBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHJldHVybiAnTkcnOworICAgIH0pOworfSwgIkVycm9yOiBwcm9wZXJ0eUtl
eS50b1N0cmluZyBpcyBjYWxsZWQuIik7CisKK2lmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKG9iamVjdCwgJycpKQorICAgIHRocm93IG5ldyBFcnJvcigiYmFkIGRlc2NyaXB0b3Ii
KTsKKworc2hvdWxkVGhyb3coZnVuY3Rpb24gKCkgeworICAgIG9iamVjdC5fX2xvb2t1cEdldHRl
cl9fKHByb3BlcnR5S2V5KTsKK30sICJFcnJvcjogcHJvcGVydHlLZXkudG9TdHJpbmcgaXMgY2Fs
bGVkLiIpOworCitzaG91bGRUaHJvdyhmdW5jdGlvbiAoKSB7CisgICAgb2JqZWN0Ll9fbG9va3Vw
U2V0dGVyX18ocHJvcGVydHlLZXkpOworfSwgIkVycm9yOiBwcm9wZXJ0eUtleS50b1N0cmluZyBp
cyBjYWxsZWQuIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL2V4Y2VwdGlvbi1pbi10by1wcm9wZXJ0eS1rZXktc2hvdWxkLWJlLWhhbmRsZWQtZWFybHku
anMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2V4Y2VwdGlvbi1pbi10by1w
cm9wZXJ0eS1rZXktc2hvdWxkLWJlLWhhbmRsZWQtZWFybHkuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGYxNzhk
NjI5YWZlYTA1ZTQxZmZiNjUyODc0MTZlZDA3NmZlYTgwMAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZXhjZXB0aW9uLWluLXRvLXByb3BlcnR5
LWtleS1zaG91bGQtYmUtaGFuZGxlZC1lYXJseS5qcwpAQCAtMCwwICsxLDEyMiBAQAorCit2YXIg
cHJvcGVydHlLZXkgPSB7CisgICAgdG9TdHJpbmcoKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJv
cigicHJvcGVydHlLZXkudG9TdHJpbmcgaXMgY2FsbGVkLiIpOworICAgIH0KK307CisKK2Z1bmN0
aW9uIHNob3VsZFRocm93KGZ1bmMsIG1lc3NhZ2UpIHsKKyAgICB2YXIgZXJyb3IgPSBudWxsOwor
ICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGVy
cm9yID0gZTsKKyAgICB9CisgICAgaWYgKCFlcnJvcikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJub3QgdGhyb3duLiIpOworICAgIGlmIChTdHJpbmcoZXJyb3IpICE9PSBtZXNzYWdlKQorICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCBlcnJvcjogIiArIFN0cmluZyhlcnJvcikpOworfQor
CisvLyBHZXRCeVZhbC4KKyhmdW5jdGlvbiAoKSB7CisgICAgdmFyIGNhbGxlZCA9IG51bGw7Cisg
ICAgdmFyIHByb3BlcnR5ID0geworICAgICAgICB0b1N0cmluZygpIHsKKyAgICAgICAgICAgIHJl
dHVybiAidmFsdWUiOworICAgICAgICB9CisgICAgfTsKKyAgICB2YXIgb2JqZWN0ID0geworICAg
ICAgICBnZXQgdmFsdWUoKSB7CisgICAgICAgIH0sCisgICAgICAgIHNldCB2YWx1ZSh2YWwpIHsK
KyAgICAgICAgfQorICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgJycs
IHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBjYWxsZWQgPSAiZ2V0
dGVyIGZvciAnJyBpcyBjYWxsZWQuIjsKKyAgICAgICAgfQorICAgIH0pOworCisgICAgZnVuY3Rp
b24gdGVzdChwcm9wZXJ0eSkgeworICAgICAgICBvYmplY3RbcHJvcGVydHldOworICAgIH0KKyAg
ICBub0lubGluZSh0ZXN0KTsKKworICAgIHNob3VsZFRocm93KGZ1bmN0aW9uICgpIHsgdGVzdChw
cm9wZXJ0eUtleSk7IH0sICJFcnJvcjogcHJvcGVydHlLZXkudG9TdHJpbmcgaXMgY2FsbGVkLiIp
OworICAgIGlmIChjYWxsZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihjYWxsZWQpOworfSgp
KTsKKworLy8gR2V0QnlWYWwgREZHLgorKGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgY2FsbGVkID0g
bnVsbDsKKyAgICB2YXIgcHJvcGVydHkgPSB7CisgICAgICAgIHRvU3RyaW5nKCkgeworICAgICAg
ICAgICAgcmV0dXJuICJ2YWx1ZSI7CisgICAgICAgIH0KKyAgICB9OworICAgIHZhciBvYmplY3Qg
PSB7CisgICAgICAgIGdldCAiIigpIHsKKyAgICAgICAgICAgIGNhbGxlZCA9ICJnZXR0ZXIgZm9y
ICcnIGlzIGNhbGxlZC4iOworICAgICAgICB9LAorICAgICAgICBzZXQgIiIodmFsKSB7CisgICAg
ICAgICAgICBjYWxsZWQgPSAic2V0dGVyIGZvciAnJyBpcyBjYWxsZWQuIjsKKyAgICAgICAgfSwK
KworICAgICAgICBnZXQgdmFsdWUoKSB7CisgICAgICAgIH0sCisgICAgICAgIHNldCB2YWx1ZSh2
YWwpIHsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBmdW5jdGlvbiB0ZXN0KHByb3BlcnR5KSB7
CisgICAgICAgIG9iamVjdFtwcm9wZXJ0eV07CisgICAgfQorICAgIG5vSW5saW5lKHRlc3QpOwor
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKQorICAgICAgICB0ZXN0KHByb3Bl
cnR5KTsKKworICAgIHNob3VsZFRocm93KGZ1bmN0aW9uICgpIHsgdGVzdChwcm9wZXJ0eUtleSk7
IH0sICJFcnJvcjogcHJvcGVydHlLZXkudG9TdHJpbmcgaXMgY2FsbGVkLiIpOworICAgIGlmIChj
YWxsZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihjYWxsZWQpOworfSgpKTsKKworCisvLyBH
ZXRCeVZhbFN0cmluZy4KKyhmdW5jdGlvbiAoKSB7CisgICAgdmFyIGNhbGxlZDsKKyAgICB2YXIg
cHJvcGVydHkgPSB7CisgICAgICAgIHRvU3RyaW5nKCkgeworICAgICAgICAgICAgcmV0dXJuICJ2
YWx1ZSI7CisgICAgICAgIH0KKyAgICB9OworICAgIGZ1bmN0aW9uIGZvbyhhcnJheSwgcHJvcGVy
dHkpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgYXJyYXkubGVuZ3RoOyArK2kpCisgICAgICAgICAgICByZXN1bHQgKz0gYXJyYXlbcHJvcGVy
dHldOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBub0lubGluZShmb28pOwor
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0cmluZy5wcm90b3R5cGUsICIiLCB7CisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgY2FsbGVkID0gImdldHRlciBmb3Ig
JycgaXMgY2FsbGVkLiI7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIHZhciBhcnJheSA9IFsx
LCAyLCAzXTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKQorICAgICAgICBm
b28oYXJyYXksIDApOworCisgICAgdmFyIGFycmF5ID0gWzEsIGZhbHNlLCAzXTsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKQorICAgICAgICBmb28oYXJyYXksIDEpOworCisg
ICAgZm9vKCJoZWxsbyIsIDIpOworICAgIHNob3VsZFRocm93KGZ1bmN0aW9uICgpIHsgZm9vKCJo
ZWxsbyIsIHByb3BlcnR5S2V5KTsgfSwgIkVycm9yOiBwcm9wZXJ0eUtleS50b1N0cmluZyBpcyBj
YWxsZWQuIik7CisKKyAgICBpZiAoY2FsbGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2Fs
bGVkKTsKK30oKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249194</attachid>
            <date>2015-03-22 05:47:22 -0700</date>
            <delta_ts>2015-03-24 00:00:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142922-20150322214647.patch</filename>
            <type>text/plain</type>
            <size>17268</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxODMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
MjZkMGZiZDViMjJiNjI0ZGUxZmQ4MTMxOTM4NjQxZDE0ZmI4ZDg5Li5kYTAwZjYzYjU3NjU4NGZk
YTc3YWEyNzhjNGYzMWY3NzE3N2Y4YmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MiBAQAorMjAxNS0wMy0yMiAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBJbnNlcnQgZXhjZXB0aW9uIGNoZWNrIGp1c3QgYWZ0ZXIgdG9Qcm9w
ZXJ0eUtleSBjYWxsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDI5MjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBJbiBzb21lIHBsYWNlcywgZXhjZXB0aW9uIGNoZWNrIGlzIG1pc3NpbmcgYWZ0ZXIgdG9Q
cm9wZXJ0eUtleS4KKyAgICAgICAgSG93ZXZlciwgc2luY2UgaXQgY2FsbHMgdG9TdHJpbmcgYW5k
IGl0IGNvdWxkIHJhaXNlIGV4Y2VwdGlvbnMsCisgICAgICAgIHdlIHNob3VsZCBwZXJmb3JtIGV4
Y2VwdGlvbiBjaGVjay4KKworICAgICAgICBNaXNzaW5nIGV4Y2VwdGlvbiBjaGVja3MgaW4gT2Jq
ZWN0LnByb3RvdHlwZSBtZXRob2RzIGNhbiBiZQorICAgICAgICBvYnNlcnZlZCBzaW5jZSBpdCB3
b3VsZCBiZSBvdmVycmlkZGVuIHdpdGggdG9PYmplY3QobnVsbC91bmRlZmluZWQpIGVycm9ycy4K
KworICAgICAgICBNaXNzaW5nIGV4Y2VwdGlvbiBjaGVja3MgaW4gR2V0QnlJZCByZWxhdGVkIGNv
ZGUgY2FuIGJlCisgICAgICAgIG9ic2VydmVkIHNpbmNlIGl0IHdvdWxkIGJlIG92ZXJyaWRkZW4g
d2l0aCB0b09iamVjdChudWxsL3VuZGVmaW5lZCkgZXJyb3JzLgorICAgICAgICBUaGlzIHBhdGNo
IGluc2VydHMgaXNVbmRlZmluZWRPck51bGwgY2hlY2sgYmVmb3JlIGV4ZWN1dGluZyB0b1Byb3Bl
cnR5S2V5LgorCisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGpp
dC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6Z2V0QnlWYWwpOgorICAgICAgICAq
IGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldEJ5VmFs
KToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6
OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHA6
CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0hhc093blByb3BlcnR5KToKKyAgICAgICAg
KEpTQzo6b2JqZWN0UHJvdG9GdW5jRGVmaW5lR2V0dGVyKToKKyAgICAgICAgKEpTQzo6b2JqZWN0
UHJvdG9GdW5jRGVmaW5lU2V0dGVyKToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jTG9v
a3VwR2V0dGVyKToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jTG9va3VwU2V0dGVyKToK
KyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jUHJvcGVydHlJc0VudW1lcmFibGUpOgorICAg
ICAgICAqIHRlc3RzL3N0cmVzcy9leGNlcHRpb24taW4tdG8tcHJvcGVydHkta2V5LXNob3VsZC1i
ZS1oYW5kbGVkLWVhcmx5LWluLW9iamVjdC1tZXRob2RzLmpzOiBBZGRlZC4KKyAgICAgICAgKHNo
b3VsZFRocm93KToKKyAgICAgICAgKGlmKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvZXhjZXB0
aW9uLWluLXRvLXByb3BlcnR5LWtleS1zaG91bGQtYmUtaGFuZGxlZC1lYXJseS5qczogQWRkZWQu
CisgICAgICAgIChzaG91bGRUaHJvdyk6CisgICAgICAgICguKToKKwogMjAxNS0wMy0yMSAgSm9z
ZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBhIHR5cG8g
aW4gUGFyc2VyIGVycm9yIG1lc3NhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCmluZGV4IDAyMDc3YzU0MWU4MGE1OTJkNDYwOTc5NGViNjRlOTBkNTgxYzEz
MzUuLjM2ZTU3ODFjOWUwZDg2NWRkYjMyMDQyYmU1NmQ2MmU5ZmU0NDY1YTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcApAQCAtMjk2LDcgKzI5NiwxMSBA
QCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsKEV4ZWNTdGF0
ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZQogICAgICAgICB9CiAgICAgfQogCisgICAgaWYgKGJh
c2VWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHZtLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3IoZXhlYywg
YmFzZVZhbHVlKSkpOwogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gcHJvcGVydHkudG9Qcm9wZXJ0
eUtleShleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShiYXNlVmFsdWUuZ2V0KGV4ZWMsIHByb3BlcnR5TmFtZSkpOwogfQogCkBAIC0zMjQsNyAr
MzI4LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxD
ZWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlCiAgICAgICAgIH0KICAgICB9CiAKKyAg
ICBBU1NFUlQoIUpTVmFsdWUoYmFzZSkuaXNVbmRlZmluZWRPck51bGwoKSk7CiAgICAgYXV0byBw
cm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eS50b1Byb3BlcnR5S2V5KGV4ZWMpOworICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoYmFzZSkuZ2V0KGV4
ZWMsIHByb3BlcnR5TmFtZSkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcAppbmRleCA1ZmE4YmZmOGViOWFmNjJjODI4MDBlMmZiNWVlODk0ZjBhYzg1
ZDExLi41MDlmZmRlYzFjNDUwOTY3ZTYzZjEzNmZhY2U3ZWI2ZGIwOGJmYjVhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKQEAgLTE0MjEsNyArMTQyMSwx
MSBAQCBzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFz
ZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgUgogICAgICAgICByZXR1cm4gYmFzZVZhbHVlLmdl
dChleGVjLCBpKTsKICAgICB9CiAKKyAgICBpZiAoYmFzZVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCisgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0
ZU5vdEFuT2JqZWN0RXJyb3IoZXhlYywgYmFzZVZhbHVlKSk7CiAgICAgYXV0byBwcm9wZXJ0eSA9
IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgcmV0dXJuIGJhc2VWYWx1
ZS5nZXQoZXhlYywgcHJvcGVydHkpOwogfQogCkBAIC0xNTU3LDcgKzE1NjEsMTEgQEAgRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbFN0cmluZyhFeGVjU3RhdGUq
IGV4ZWMsIEVuY29kZWRKU1YKICAgICAgICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFk
ZHJlc3MoZXhlYy0+Y29kZUJsb2NrKCksIFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERS
RVNTKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uR2V0QnlWYWxEZWZhdWx0KSk7CiAgICAgICAgIH0K
ICAgICB9IGVsc2UgeworICAgICAgICBpZiAoYmFzZVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHZtLnRocm93RXhjZXB0aW9uKGV4
ZWMsIGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3IoZXhlYywgYmFzZVZhbHVlKSkpOwogICAgICAgICBh
dXRvIHByb3BlcnR5ID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZXhlYyk7CisgICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoZXhlYywg
cHJvcGVydHkpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50U2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5jcHAKaW5kZXggMTU1MDgwYzZkMjdmMDdmMDRhMjdiYjBlMDY1N2YwM2I2MGNj
MTE1Yy4uNWMyODI4YTc1ZjFjNDM1NWU0NTVhZTY1OWZlZmYxOWJkMGU1YTMzMCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCkBAIC03NDUsNyAr
NzQ1LDExIEBAIGlubGluZSBKU1ZhbHVlIGdldEJ5VmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0KQogICAgICAgICByZXR1cm4gYmFzZVZhbHVl
LmdldChleGVjLCBpKTsKICAgICB9CiAKKyAgICBpZiAoYmFzZVZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCisgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNy
ZWF0ZU5vdEFuT2JqZWN0RXJyb3IoZXhlYywgYmFzZVZhbHVlKSk7CiAgICAgYXV0byBwcm9wZXJ0
eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgcmV0dXJuIGJhc2VW
YWx1ZS5nZXQoZXhlYywgcHJvcGVydHkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAppbmRleCAwOWEwOGQ3OWYxZDc4NTA2N2M1
OGI2YzdhM2IwNzc3MTc3YzU1M2ZmLi5kMzAxNWVlOTk3Y2MyYjQ5YjM4MDI3ZjY2MjdiMmViMTFm
YTg2ZWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25T
bG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNs
b3dQYXRocy5jcHAKQEAgLTU3MSw3ICs1NzEsNyBAQCBzdGF0aWMgQ29tbW9uU2xvd1BhdGhzOjpB
cml0eUNoZWNrRGF0YSogc2V0dXBBcml0eUNoZWNrRGF0YShWTSYgdm0sIGludCBzbG90c1RvQQog
ICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gT1BfQygyKS5qc1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSBw
cm9wZXJ0eSA9IE9QKDMpLmpzVmFsdWUoKTsKICAgICBBU1NFUlQocHJvcGVydHkuaXNTdHJpbmco
KSk7Ci0gICAgUkVUVVJOKGJhc2VWYWx1ZS5nZXQoZXhlYywgcHJvcGVydHkudG9Qcm9wZXJ0eUtl
eShleGVjKSkpOworICAgIFJFVFVSTihiYXNlVmFsdWUuZ2V0KGV4ZWMsIGFzU3RyaW5nKHByb3Bl
cnR5KS0+dG9JZGVudGlmaWVyKGV4ZWMpKSk7CiB9CiAKIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAppbmRleCBmMDkyYTk3YWM3MGQ3
NDRhNjE5OWM4ZGU1NjhkNzVmYmRkYWFhZDJiLi45NGM1YTRkZjA2YzZhYzY1YzQwZmUzMTc4YzJi
ZDkzY2U0ZmU1OWJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
YmplY3RQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09i
amVjdFByb3RvdHlwZS5jcHAKQEAgLTg1LDcgKzg1LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMpCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0hhc093blByb3BlcnR5KEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgp
LnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbih0aGlzVmFsdWUudG9PYmplY3QoZXhlYyktPmhhc093blByb3BlcnR5KGV4ZWMsIGV4
ZWMtPmFyZ3VtZW50KDApLnRvUHJvcGVydHlLZXkoZXhlYykpKSk7CisgICAgYXV0byBwcm9wZXJ0
eU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4ZWMpOworICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0aGlzVmFs
dWUudG9PYmplY3QoZXhlYyktPmhhc093blByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpKTsK
IH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNJc1Byb3Rv
dHlwZU9mKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTExOCwxMSArMTIxLDE1IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jRGVmaW5lR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYykKICAgICBpZiAoZ2V0Q2FsbERhdGEoZ2V0LCBjYWxsRGF0YSkgPT0gQ2FsbFR5cGVOb25l
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVj
LCBBU0NJSUxpdGVyYWwoImludmFsaWQgZ2V0dGVyIHVzYWdlIikpKTsKIAorICAgIGF1dG8gcHJv
cGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtleShleGVjKTsKKyAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CisKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAg
ICBkZXNjcmlwdG9yLnNldEdldHRlcihnZXQpOwogICAgIGRlc2NyaXB0b3Iuc2V0RW51bWVyYWJs
ZSh0cnVlKTsKICAgICBkZXNjcmlwdG9yLnNldENvbmZpZ3VyYWJsZSh0cnVlKTsKLSAgICB0aGlz
T2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+ZGVmaW5lT3duUHJvcGVydHkodGhpc09i
amVjdCwgZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtleShleGVjKSwgZGVzY3Jp
cHRvciwgZmFsc2UpOworICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5k
ZWZpbmVPd25Qcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0
b3IsIGZhbHNlKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiB9CkBAIC0xMzgsMTEgKzE0NSwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9i
amVjdFByb3RvRnVuY0RlZmluZVNldHRlcihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgaWYgKGdldENh
bGxEYXRhKHNldCwgY2FsbERhdGEpID09IENhbGxUeXBlTm9uZSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJpbnZh
bGlkIHNldHRlciB1c2FnZSIpKSk7CiAKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFy
Z3VtZW50KDApLnRvUHJvcGVydHlLZXkoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCiAg
ICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CiAgICAgZGVzY3JpcHRvci5zZXRTZXR0
ZXIoc2V0KTsKICAgICBkZXNjcmlwdG9yLnNldEVudW1lcmFibGUodHJ1ZSk7CiAgICAgZGVzY3Jp
cHRvci5zZXRDb25maWd1cmFibGUodHJ1ZSk7Ci0gICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUo
ZXhlYy0+dm0oKSktPmRlZmluZU93blByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIGV4ZWMtPmFy
Z3VtZW50KDApLnRvUHJvcGVydHlLZXkoZXhlYyksIGRlc2NyaXB0b3IsIGZhbHNlKTsKKyAgICB0
aGlzT2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+ZGVmaW5lT3duUHJvcGVydHkodGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBmYWxzZSk7CiAKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMTUzLDkgKzE2NCwx
MiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0xvb2t1cEdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCisgICAgYXV0byBw
cm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4ZWMpOworICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKwogICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXNPYmplY3QpOwot
ICAgIGlmICh0aGlzT2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgZXhlYy0+YXJndW1lbnQo
MCkudG9Qcm9wZXJ0eUtleShleGVjKSwgc2xvdCkKLSAgICAgICAgJiYgc2xvdC5pc0FjY2Vzc29y
KCkpIHsKKyAgICBpZiAodGhpc09iamVjdC0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5
TmFtZSwgc2xvdCkgJiYgc2xvdC5pc0FjY2Vzc29yKCkpIHsKICAgICAgICAgR2V0dGVyU2V0dGVy
KiBnZXR0ZXJTZXR0ZXIgPSBzbG90LmdldHRlclNldHRlcigpOwogICAgICAgICByZXR1cm4gZ2V0
dGVyU2V0dGVyLT5pc0dldHRlck51bGwoKSA/IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KSA6IEpTVmFsdWU6OmVuY29kZShnZXR0ZXJTZXR0ZXItPmdldHRlcigpKTsKICAgICB9CkBAIC0x
NjksOSArMTgzLDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9G
dW5jTG9va3VwU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYykKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAK
KyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJvcGVydHlLZXko
ZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCiAgICAgUHJvcGVydHlTbG90IHNsb3QodGhp
c09iamVjdCk7Ci0gICAgaWYgKHRoaXNPYmplY3QtPmdldFByb3BlcnR5U2xvdChleGVjLCBleGVj
LT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4ZWMpLCBzbG90KQotICAgICAgICAmJiBzbG90
LmlzQWNjZXNzb3IoKSkgeworICAgIGlmICh0aGlzT2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoZXhl
YywgcHJvcGVydHlOYW1lLCBzbG90KSAmJiBzbG90LmlzQWNjZXNzb3IoKSkgewogICAgICAgICBH
ZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciA9IHNsb3QuZ2V0dGVyU2V0dGVyKCk7CiAgICAgICAg
IHJldHVybiBnZXR0ZXJTZXR0ZXItPmlzU2V0dGVyTnVsbCgpID8gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpIDogSlNWYWx1ZTo6ZW5jb2RlKGdldHRlclNldHRlci0+c2V0dGVyKCkpOwog
ICAgIH0KQEAgLTE4MSw5ICsxOTgsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBv
YmplY3RQcm90b0Z1bmNMb29rdXBTZXR0ZXIoRXhlY1N0YXRlKiBleGVjKQogCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1Byb3BlcnR5SXNFbnVtZXJhYmxlKEV4
ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGV4ZWMtPnRoaXNW
YWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKICAgICBhdXRv
IHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJvcGVydHlLZXkoZXhlYyk7Cisg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogCisgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBleGVjLT50
aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7CisgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwogICAg
IGJvb2wgZW51bWVyYWJsZSA9IHRoaXNPYmplY3QtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihl
eGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZSgp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGVudW1lcmFibGUpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZXhjZXB0aW9uLWlu
LXRvLXByb3BlcnR5LWtleS1zaG91bGQtYmUtaGFuZGxlZC1lYXJseS1pbi1vYmplY3QtbWV0aG9k
cy5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZXhjZXB0aW9uLWluLXRv
LXByb3BlcnR5LWtleS1zaG91bGQtYmUtaGFuZGxlZC1lYXJseS1pbi1vYmplY3QtbWV0aG9kcy5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5mN2NjMDFkMDRkNjViODA0ZjJjNzllYTgwZjk2MDgxMTUxMzE4NGNhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9leGNl
cHRpb24taW4tdG8tcHJvcGVydHkta2V5LXNob3VsZC1iZS1oYW5kbGVkLWVhcmx5LWluLW9iamVj
dC1tZXRob2RzLmpzCkBAIC0wLDAgKzEsNzMgQEAKKwordmFyIHByb3BlcnR5S2V5ID0geworICAg
IHRvU3RyaW5nKCkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInByb3BlcnR5S2V5LnRvU3Ry
aW5nIGlzIGNhbGxlZC4iKTsKKyAgICB9Cit9OworCitmdW5jdGlvbiBzaG91bGRUaHJvdyhmdW5j
LCBtZXNzYWdlKSB7CisgICAgdmFyIGVycm9yID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBm
dW5jKCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBlcnJvciA9IGU7CisgICAgfQorICAg
IGlmICghZXJyb3IpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigibm90IHRocm93bi4iKTsKKyAg
ICBpZiAoU3RyaW5nKGVycm9yKSAhPT0gbWVzc2FnZSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJiYWQgZXJyb3I6ICIgKyBTdHJpbmcoZXJyb3IpKTsKK30KKwordmFyIG9iamVjdCA9IHt9Owor
CitzaG91bGRUaHJvdyhmdW5jdGlvbiAoKSB7CisgICAgb2JqZWN0Lmhhc093blByb3BlcnR5KHBy
b3BlcnR5S2V5KTsKK30sICJFcnJvcjogcHJvcGVydHlLZXkudG9TdHJpbmcgaXMgY2FsbGVkLiIp
OworCitzaG91bGRUaHJvdyhmdW5jdGlvbiAoKSB7CisgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNP
d25Qcm9wZXJ0eS5jYWxsKG51bGwsIHByb3BlcnR5S2V5KTsKK30sICJFcnJvcjogcHJvcGVydHlL
ZXkudG9TdHJpbmcgaXMgY2FsbGVkLiIpOworCitzaG91bGRUaHJvdyhmdW5jdGlvbiAoKSB7Cisg
ICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG51bGwsICdvaycpOworfSwg
IlR5cGVFcnJvcjogbnVsbCBpcyBub3QgYW4gb2JqZWN0IChldmFsdWF0aW5nICdPYmplY3QucHJv
dG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobnVsbCwgJ29rJyknKSIpOworCitzaG91bGRUaHJv
dyhmdW5jdGlvbiAoKSB7CisgICAgb2JqZWN0LnByb3BlcnR5SXNFbnVtZXJhYmxlKHByb3BlcnR5
S2V5KTsKK30sICJFcnJvcjogcHJvcGVydHlLZXkudG9TdHJpbmcgaXMgY2FsbGVkLiIpOworCisv
LyBUb1Byb3BlcnR5S2V5IGlzIGZpcnN0LCBUb09iamVjdCBpcyBmb2xsb3dpbmcuCitzaG91bGRU
aHJvdyhmdW5jdGlvbiAoKSB7CisgICAgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVy
YWJsZS5jYWxsKG51bGwsIHByb3BlcnR5S2V5KTsKK30sICJFcnJvcjogcHJvcGVydHlLZXkudG9T
dHJpbmcgaXMgY2FsbGVkLiIpOworCitzaG91bGRUaHJvdyhmdW5jdGlvbiAoKSB7CisgICAgLy8g
VG9Qcm9wZXJ0eUtleSBpcyBmaXJzdCwgVG9PYmplY3QgaXMgZm9sbG93aW5nLgorICAgIE9iamVj
dC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChudWxsLCAnb2snKTsKK30sICJU
eXBlRXJyb3I6IG51bGwgaXMgbm90IGFuIG9iamVjdCAoZXZhbHVhdGluZyAnT2JqZWN0LnByb3Rv
dHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG51bGwsICdvaycpJykiKTsKKworc2hvdWxk
VGhyb3coZnVuY3Rpb24gKCkgeworICAgIG9iamVjdC5fX2RlZmluZUdldHRlcl9fKHByb3BlcnR5
S2V5LCBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAnTkcnOworICAgIH0pOworfSwgIkVy
cm9yOiBwcm9wZXJ0eUtleS50b1N0cmluZyBpcyBjYWxsZWQuIik7CisKK2lmIChPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgJycpKQorICAgIHRocm93IG5ldyBFcnJvcigi
YmFkIGRlc2NyaXB0b3IiKTsKKworc2hvdWxkVGhyb3coZnVuY3Rpb24gKCkgeworICAgIG9iamVj
dC5fX2RlZmluZVNldHRlcl9fKHByb3BlcnR5S2V5LCBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl
dHVybiAnTkcnOworICAgIH0pOworfSwgIkVycm9yOiBwcm9wZXJ0eUtleS50b1N0cmluZyBpcyBj
YWxsZWQuIik7CisKK2lmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwg
JycpKQorICAgIHRocm93IG5ldyBFcnJvcigiYmFkIGRlc2NyaXB0b3IiKTsKKworc2hvdWxkVGhy
b3coZnVuY3Rpb24gKCkgeworICAgIG9iamVjdC5fX2xvb2t1cEdldHRlcl9fKHByb3BlcnR5S2V5
KTsKK30sICJFcnJvcjogcHJvcGVydHlLZXkudG9TdHJpbmcgaXMgY2FsbGVkLiIpOworCitzaG91
bGRUaHJvdyhmdW5jdGlvbiAoKSB7CisgICAgb2JqZWN0Ll9fbG9va3VwU2V0dGVyX18ocHJvcGVy
dHlLZXkpOworfSwgIkVycm9yOiBwcm9wZXJ0eUtleS50b1N0cmluZyBpcyBjYWxsZWQuIik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2V4Y2VwdGlvbi1p
bi10by1wcm9wZXJ0eS1rZXktc2hvdWxkLWJlLWhhbmRsZWQtZWFybHkuanMgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2V4Y2VwdGlvbi1pbi10by1wcm9wZXJ0eS1rZXktc2hv
dWxkLWJlLWhhbmRsZWQtZWFybHkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmRiYmYyNzE1M2JlY2ZjMzA5YzA5
YmJmNjgwMTA1Y2JkNTFhMmZkZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3MvZXhjZXB0aW9uLWluLXRvLXByb3BlcnR5LWtleS1zaG91bGQtYmUt
aGFuZGxlZC1lYXJseS5qcwpAQCAtMCwwICsxLDEyNSBAQAorCit2YXIgcHJvcGVydHlLZXkgPSB7
CisgICAgdG9TdHJpbmcoKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigicHJvcGVydHlLZXku
dG9TdHJpbmcgaXMgY2FsbGVkLiIpOworICAgIH0KK307CisKK2Z1bmN0aW9uIHNob3VsZFRocm93
KGZ1bmMsIG1lc3NhZ2UpIHsKKyAgICB2YXIgZXJyb3IgPSBudWxsOworICAgIHRyeSB7CisgICAg
ICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGVycm9yID0gZTsKKyAgICB9
CisgICAgaWYgKCFlcnJvcikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJub3QgdGhyb3duLiIp
OworICAgIGlmIChTdHJpbmcoZXJyb3IpICE9PSBtZXNzYWdlKQorICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoImJhZCBlcnJvcjogIiArIFN0cmluZyhlcnJvcikpOworfQorCisvLyBHZXRCeVZhbC4K
KyhmdW5jdGlvbiAoKSB7CisgICAgdmFyIGNhbGxlZCA9IG51bGw7CisgICAgdmFyIHByb3BlcnR5
ID0geworICAgICAgICB0b1N0cmluZygpIHsKKyAgICAgICAgICAgIHJldHVybiAidmFsdWUiOwor
ICAgICAgICB9CisgICAgfTsKKyAgICB2YXIgb2JqZWN0ID0geworICAgICAgICBnZXQgdmFsdWUo
KSB7CisgICAgICAgIH0sCisgICAgICAgIHNldCB2YWx1ZSh2YWwpIHsKKyAgICAgICAgfQorICAg
IH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgJycsIHsKKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBjYWxsZWQgPSAiZ2V0dGVyIGZvciAnJyBpcyBj
YWxsZWQuIjsKKyAgICAgICAgfQorICAgIH0pOworCisgICAgZnVuY3Rpb24gdGVzdChvYmplY3Qs
IHByb3BlcnR5KSB7CisgICAgICAgIG9iamVjdFtwcm9wZXJ0eV07CisgICAgfQorICAgIG5vSW5s
aW5lKHRlc3QpOworCisgICAgc2hvdWxkVGhyb3coZnVuY3Rpb24gKCkgeyB0ZXN0KG9iamVjdCwg
cHJvcGVydHlLZXkpOyB9LCAiRXJyb3I6IHByb3BlcnR5S2V5LnRvU3RyaW5nIGlzIGNhbGxlZC4i
KTsKKyAgICBzaG91bGRUaHJvdyhmdW5jdGlvbiAoKSB7IHRlc3QobnVsbCwgcHJvcGVydHlLZXkp
OyB9LCAiVHlwZUVycm9yOiBudWxsIGlzIG5vdCBhbiBvYmplY3QgKGV2YWx1YXRpbmcgJ29iamVj
dFtwcm9wZXJ0eV0nKSIpOworICAgIGlmIChjYWxsZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJv
cihjYWxsZWQpOworfSgpKTsKKworLy8gR2V0QnlWYWwgREZHLgorKGZ1bmN0aW9uICgpIHsKKyAg
ICB2YXIgY2FsbGVkID0gbnVsbDsKKyAgICB2YXIgcHJvcGVydHkgPSB7CisgICAgICAgIHRvU3Ry
aW5nKCkgeworICAgICAgICAgICAgcmV0dXJuICJ2YWx1ZSI7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIHZhciBvYmplY3QgPSB7CisgICAgICAgIGdldCAiIigpIHsKKyAgICAgICAgICAgIGNhbGxl
ZCA9ICJnZXR0ZXIgZm9yICcnIGlzIGNhbGxlZC4iOworICAgICAgICB9LAorICAgICAgICBzZXQg
IiIodmFsKSB7CisgICAgICAgICAgICBjYWxsZWQgPSAic2V0dGVyIGZvciAnJyBpcyBjYWxsZWQu
IjsKKyAgICAgICAgfSwKKworICAgICAgICBnZXQgdmFsdWUoKSB7CisgICAgICAgIH0sCisgICAg
ICAgIHNldCB2YWx1ZSh2YWwpIHsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBmdW5jdGlvbiB0
ZXN0KG9iamVjdCwgcHJvcGVydHkpIHsKKyAgICAgICAgb2JqZWN0W3Byb3BlcnR5XTsKKyAgICB9
CisgICAgbm9JbmxpbmUodGVzdCk7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyAr
K2kpCisgICAgICAgIHRlc3Qob2JqZWN0LCBwcm9wZXJ0eSk7CisKKyAgICBzaG91bGRUaHJvdyhm
dW5jdGlvbiAoKSB7IHRlc3Qob2JqZWN0LCBwcm9wZXJ0eUtleSk7IH0sICJFcnJvcjogcHJvcGVy
dHlLZXkudG9TdHJpbmcgaXMgY2FsbGVkLiIpOworICAgIHNob3VsZFRocm93KGZ1bmN0aW9uICgp
IHsgdGVzdChudWxsLCBwcm9wZXJ0eUtleSk7IH0sICJUeXBlRXJyb3I6IG51bGwgaXMgbm90IGFu
IG9iamVjdCAoZXZhbHVhdGluZyAnb2JqZWN0W3Byb3BlcnR5XScpIik7CisgICAgaWYgKGNhbGxl
ZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGNhbGxlZCk7Cit9KCkpOworCisKKy8vIEdldEJ5
VmFsU3RyaW5nLgorKGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgY2FsbGVkOworICAgIHZhciBwcm9w
ZXJ0eSA9IHsKKyAgICAgICAgdG9TdHJpbmcoKSB7CisgICAgICAgICAgICByZXR1cm4gInZhbHVl
IjsKKyAgICAgICAgfQorICAgIH07CisgICAgZnVuY3Rpb24gdGVzdChhcnJheSwgbGVuZ3RoLCBw
cm9wZXJ0eSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHJlc3VsdCArPSBhcnJheVtwcm9wZXJ0
eV07CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIG5vSW5saW5lKHRlc3QpOwor
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0cmluZy5wcm90b3R5cGUsICIiLCB7CisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgY2FsbGVkID0gImdldHRlciBmb3Ig
JycgaXMgY2FsbGVkLiI7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIHZhciBhcnJheSA9IFsx
LCAyLCAzXTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKQorICAgICAgICB0
ZXN0KGFycmF5LCBhcnJheS5sZW5ndGgsIDApOworCisgICAgdmFyIGFycmF5ID0gWzEsIGZhbHNl
LCAzXTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKQorICAgICAgICB0ZXN0
KGFycmF5LCBhcnJheS5sZW5ndGgsIDEpOworCisgICAgdGVzdCgiaGVsbG8iLCAiaGVsbG8iLmxl
bmd0aCwgMik7CisgICAgc2hvdWxkVGhyb3coZnVuY3Rpb24gKCkgeyB0ZXN0KCJoZWxsbyIsICJo
ZWxsbyIubGVuZ3RoLCBwcm9wZXJ0eUtleSk7IH0sICJFcnJvcjogcHJvcGVydHlLZXkudG9TdHJp
bmcgaXMgY2FsbGVkLiIpOworICAgIHNob3VsZFRocm93KGZ1bmN0aW9uICgpIHsgdGVzdChudWxs
LCAyMCwgcHJvcGVydHlLZXkpOyB9LCAiVHlwZUVycm9yOiBudWxsIGlzIG5vdCBhbiBvYmplY3Qg
KG5lYXIgJy4uLmZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpLi4uJykiKTsKKworICAg
IGlmIChjYWxsZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihjYWxsZWQpOworfSgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249316</attachid>
            <date>2015-03-24 00:00:11 -0700</date>
            <delta_ts>2015-03-24 00:05:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142922-20150324155934.patch</filename>
            <type>text/plain</type>
            <size>21295</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxODUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
N2M4MTVjYmNmZGI4NmJjMzg1MDU5OWI4MTA3MjJjYWQ2ZTg0ZTNiLi5lODdjZjlmMWFmOTA1YTE2
ZDE0ZjI0MzAzMWQwNmY3YzY5ZTlhNTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MyBAQAorMjAxNS0wMy0yMyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBJbnNlcnQgZXhjZXB0aW9uIGNoZWNrIGFyb3VuZCB0b1Byb3BlcnR5
S2V5IGNhbGwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0MjkyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEluIHNvbWUgcGxhY2VzLCBleGNlcHRpb24gY2hlY2sgaXMgbWlzc2luZyBhZnRlci9iZWZvcmUg
dG9Qcm9wZXJ0eUtleS4KKyAgICAgICAgSG93ZXZlciwgc2luY2UgaXQgY2FsbHMgdG9TdHJpbmcs
IGl0J3Mgb2JzZXJ2YWJsZSB0byB1c2VycywKKworICAgICAgICBNaXNzaW5nIGV4Y2VwdGlvbiBj
aGVja3MgaW4gT2JqZWN0LnByb3RvdHlwZSBtZXRob2RzIGNhbiBiZQorICAgICAgICBvYnNlcnZl
ZCBzaW5jZSBpdCB3b3VsZCBiZSBvdmVycmlkZGVuIHdpdGggdG9PYmplY3QobnVsbC91bmRlZmlu
ZWQpIGVycm9ycy4KKyAgICAgICAgV2UgaW5zZXJ0ZWQgZXhjZXB0aW9uIGNoZWNrcyBhZnRlciB0
b1Byb3BlcnR5S2V5LgorCisgICAgICAgIE1pc3NpbmcgZXhjZXB0aW9uIGNoZWNrcyBpbiBHZXRC
eUlkIHJlbGF0ZWQgY29kZSBjYW4gYmUKKyAgICAgICAgb2JzZXJ2ZWQgc2luY2UgaXQgd291bGQg
YmUgb3ZlcnJpZGRlbiB3aXRoIHRvT2JqZWN0KG51bGwvdW5kZWZpbmVkKSBlcnJvcnMuCisgICAg
ICAgIEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0byBpbnNlcnQgZXhjZXB0aW9uIGNoZWNrcyBiZWZv
cmUvYWZ0ZXIgdG9Qcm9wZXJ0eUtleQorICAgICAgICBzaW5jZSBSZXF1aXJlT2JqZWN0Q29lcmNp
YmxlIGZvbGxvd2VkIGJ5IHRvUHJvcGVydHlLZXkgY2FuIGNhdXNlIGV4Y2VwdGlvbnMuCisKKyAg
ICAgICAgSlNWYWx1ZTo6Z2V0IGNoZWNrcyBudWxsL3VuZGVmaW5lZCBhbmQgcmFpc2UgYW4gZXhj
ZXB0aW9uIGlmIHx0aGlzfCBpcyBudWxsIG9yIHVuZGVmaW5lZC4KKyAgICAgICAgSG93ZXZlciwg
d2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIHRoZSBiYXNlVmFsdWUgaXMgb2JqZWN0IGNvZXJjaWJs
ZSBiZWZvcmUgZXhlY3V0aW5nIEpTVmFsdWU6OnRvUHJvcGVydHlLZXkuCisgICAgICAgIEFjY29y
ZGluZyB0byB0aGUgc3BlYywgd2UgZmlyc3QgcGVyZm9ybSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxl
IGFuZCBjaGVjayB0aGUgZXhjZXB0aW9uLgorICAgICAgICBBbmQgc2Vjb25kLCB3ZSBwZXJmb3Jt
IFRvUHJvcGVydHlLZXkgYW5kIGNoZWNrIHRoZSBleGNlcHRpb24uCisgICAgICAgIFNpbmNlIEpT
VmFsdWU6OnRvUHJvcGVydHlLZXkgY2FuIGNhdXNlIHRvU3RyaW5nIGNhbGwsIHRoaXMgaXMgb2Jz
ZXJ2YWJsZSB0byB1c2Vycy4KKyAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHRoZSB0YXJnZXQgaXMg
bm90IG9iamVjdCBjb2VyY2libGUsCisgICAgICAgIFRvUHJvcGVydHlLZXkgc2hvdWxkIG5vdCBi
ZSBleGVjdXRlZCwgYW5kIHRvU3RyaW5nIHNob3VsZCBub3QgYmUgZXhlY3V0ZWQgYnkgVG9Qcm9w
ZXJ0eUtleS4KKyAgICAgICAgU28gdGhlIG9yZGVyIG9mIG9ic2VydmFibGUgYWN0aW9ucyAoUmVx
dWlyZU9iamVjdENvZXJjaWJsZSBhbmQgVG9Qcm9wZXJ0eUtleSkgc2hvdWxkIGJlIGNvcnJlY3Qg
dG8gdGhlIHNwZWMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIEpTVmFsdWU6OnJl
cXVpcmVPYmplY3RDb2VyY2libGUgYW5kIHVzZSBpdCBiZWNhdXNlIG9mIHRoZSBmb2xsb3dpbmcg
MiByZWFzb25zLgorCisgICAgICAgIDEuIFVzaW5nIHRvT2JqZWN0IGluc3RlYWQgb2YgcmVxdWly
ZU9iamVjdENvZXJjaWJsZSBwcm9kdWNlcyB1bm5lY2Vzc2FyeSB3cmFwcGVyIG9iamVjdC4KKwor
ICAgICAgICB0b09iamVjdCBjb252ZXJ0cyBwcmltaXRpdmUgdHlwZXMgaW50byB3cmFwcGVyIG9i
amVjdHMuCisgICAgICAgIEJ1dCBpdCBpcyBub3QgZWZmaWNpZW50IHNpbmNlIHdyYXBwZXIgb2Jq
ZWN0cyBhcmUgbm90IG5lY2Vzc2FyeQorICAgICAgICBpZiB3ZSBsb29rIHVwIG1ldGhvZHMgZnJv
bSBwcmltaXRpdmUgdmFsdWVzJ3MgcHJvdG90eXBlLiAodXNpbmcgc3ludGhlc2l6ZVByb3RvdHlw
ZSBpcyBiZXR0ZXIpLgorCisgICAgICAgIDIuIFVzaW5nIHRoZSByZXN1bHQgb2YgdG9PYmplY3Qg
aXMgbm90IGNvcnJlY3QgdG8gdGhlIHNwZWMuCisKKyAgICAgICAgVG8gYWxpZ24gdG8gdGhlIHNw
ZWMgY29ycmVjdGx5LCB3ZSBjYW5ub3QgdXNlIEpTT2JqZWN0OjpnZXQKKyAgICAgICAgYnkgdXNp
bmcgdGhlIHdyYXBwZXIgb2JqZWN0IHByb2R1Y2VkIGJ5IHRoZSB0b09iamVjdCBzdWdnZXN0ZWQg
aW4gKDEpLgorICAgICAgICBJZiB3ZSB1c2UgSlNPYmplY3QgdGhhdCBpcyBjb252ZXJ0ZWQgYnkg
dG9PYmplY3QsIGdldHRlciB3aWxsIGJlIGNhbGxlZCBieSB1c2luZyB0aGlzIEpTT2JqZWN0IGFz
IHx0aGlzfC4KKyAgICAgICAgSXQgaXMgbm90IGNvcnJlY3Qgc2luY2UgZ2V0dGVyIHNob3VsZCBi
ZSBjYWxsZWQgd2l0aCB0aGUgb3JpZ2luYWwgfHRoaXN8IHZhbHVlIHRoYXQgbWF5IGJlIHByaW1p
dGl2ZSB0eXBlcy4KKworICAgICAgICBTbyBpbiB0aGlzIHBhdGNoLCB3ZSB1c2UgSlNWYWx1ZTo6
cmVxdWlyZU9iamVjdENvZXJjaWJsZQorICAgICAgICB0byBjaGVjayB0aGUgdGFyZ2V0IGlzIG9i
amVjdCBjb2VyY2libGUgYW5kIHJhaXNlIGFuIGVycm9yIGlmIGl0J3Mgbm90LgorCisgICAgICAg
ICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNw
cDoKKyAgICAgICAgKEpTQzo6Z2V0QnlWYWwpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldEJ5VmFsKToKKyAgICAgICAgKiBydW50
aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToK
KyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWUuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQ0pT
VmFsdWVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OnJlcXVpcmVPYmplY3RDb2Vy
Y2libGUpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcDoKKyAgICAgICAg
KEpTQzo6b2JqZWN0UHJvdG9GdW5jSGFzT3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpvYmpl
Y3RQcm90b0Z1bmNEZWZpbmVHZXR0ZXIpOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNE
ZWZpbmVTZXR0ZXIpOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNMb29rdXBHZXR0ZXIp
OgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNMb29rdXBTZXR0ZXIpOgorICAgICAgICAo
SlNDOjpvYmplY3RQcm90b0Z1bmNQcm9wZXJ0eUlzRW51bWVyYWJsZSk6CisgICAgICAgICogdGVz
dHMvc3RyZXNzL2V4Y2VwdGlvbi1pbi10by1wcm9wZXJ0eS1rZXktc2hvdWxkLWJlLWhhbmRsZWQt
ZWFybHktaW4tb2JqZWN0LW1ldGhvZHMuanM6IEFkZGVkLgorICAgICAgICAoc2hvdWxkVGhyb3cp
OgorICAgICAgICAoaWYpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9leGNlcHRpb24taW4tdG8t
cHJvcGVydHkta2V5LXNob3VsZC1iZS1oYW5kbGVkLWVhcmx5LmpzOiBBZGRlZC4KKyAgICAgICAg
KHNob3VsZFRocm93KToKKyAgICAgICAgKC4pOgorCiAyMDE1LTAzLTIyICBGaWxpcCBQaXpsbyAg
PGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIERGRzo6VmFsdWVSZWNvdmVyeU92
ZXJyaWRlOyBpdCdzIGJlZW4gZGVhZCBzaW5jZSB3ZSByZW1vdmVkIGZvcndhcmQgc3BlY3VsYXRp
b25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAppbmRleCAw
MjA3N2M1NDFlODBhNTkyZDQ2MDk3OTRlYjY0ZTkwZDU4MWMxMzM1Li5jNGY1MzY2NjE1NGJmODc3
MGIwZTcxODJhYTJjYTk3NTdhZDc4N2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAKQEAgLTI5Niw3ICsyOTYsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGUKICAgICAgICAgfQogICAgIH0KIAorICAgIGJhc2VWYWx1ZS5yZXF1aXJlT2JqZWN0Q29l
cmNpYmxlKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIHByb3BlcnR5TmFt
ZSA9IHByb3BlcnR5LnRvUHJvcGVydHlLZXkoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVlLmdldChleGVjLCBwcm9wZXJ0eU5h
bWUpKTsKIH0KIApAQCAtMzI1LDYgKzMzMCw4IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uR2V0QnlWYWxDZWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlCiAg
ICAgfQogCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eS50b1Byb3BlcnR5S2V5KGV4
ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
VmFsdWUoYmFzZSkuZ2V0KGV4ZWMsIHByb3BlcnR5TmFtZSkpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCA1ZmE4YmZmOGViOWFmNjJjODI4
MDBlMmZiNWVlODk0ZjBhYzg1ZDExLi4xNmI1NzM1NTAwMWYzMGYwMmE5NDI5YWQ0ZTUxODRmZTMx
YzZlYmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAK
QEAgLTE0MjEsNyArMTQyMSwxMiBAQCBzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgUgogICAgICAgICBy
ZXR1cm4gYmFzZVZhbHVlLmdldChleGVjLCBpKTsKICAgICB9CiAKKyAgICBiYXNlVmFsdWUucmVx
dWlyZU9iamVjdENvZXJjaWJsZShleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGF1dG8gcHJvcGVydHkgPSBzdWJz
Y3JpcHQudG9Qcm9wZXJ0eUtleShleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIHJldHVybiBiYXNlVmFsdWUuZ2V0
KGV4ZWMsIHByb3BlcnR5KTsKIH0KIApAQCAtMTU1Nyw3ICsxNTYyLDEyIEBAIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxTdHJpbmcoRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWCiAgICAgICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNz
KGV4ZWMtPmNvZGVCbG9jaygpLCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyks
IEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkdldEJ5VmFsRGVmYXVsdCkpOwogICAgICAgICB9CiAgICAg
fSBlbHNlIHsKKyAgICAgICAgYmFzZVZhbHVlLnJlcXVpcmVPYmplY3RDb2VyY2libGUoZXhlYyk7
CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIGF1dG8gcHJvcGVydHkgPSBz
dWJzY3JpcHQudG9Qcm9wZXJ0eUtleShleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICAgICAgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCBwcm9wZXJ0eSk7CiAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcApp
bmRleCAxNTUwODBjNmQyN2YwN2YwNGEyN2JiMGUwNjU3ZjAzYjYwY2MxMTVjLi40MmRhMmQyNWM5
ZDIwYzgwMWU4MDZmMWE0M2I0Mjc3ZDFiMjlmYTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKQEAgLTc0NSw3ICs3NDUsMTIgQEAgaW5saW5l
IEpTVmFsdWUgZ2V0QnlWYWwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNW
YWx1ZSBzdWJzY3JpcHQpCiAgICAgICAgIHJldHVybiBiYXNlVmFsdWUuZ2V0KGV4ZWMsIGkpOwog
ICAgIH0KIAorICAgIGJhc2VWYWx1ZS5yZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGV4ZWMpOworICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgYXV0byBwcm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGV4ZWMpOworICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgcmV0dXJuIGJhc2VWYWx1ZS5nZXQoZXhlYywgcHJvcGVydHkpOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAppbmRleCAw
OWEwOGQ3OWYxZDc4NTA2N2M1OGI2YzdhM2IwNzc3MTc3YzU1M2ZmLi5kMzAxNWVlOTk3Y2MyYjQ5
YjM4MDI3ZjY2MjdiMmViMTFmYTg2ZWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKQEAgLTU3MSw3ICs1NzEsNyBAQCBzdGF0aWMg
Q29tbW9uU2xvd1BhdGhzOjpBcml0eUNoZWNrRGF0YSogc2V0dXBBcml0eUNoZWNrRGF0YShWTSYg
dm0sIGludCBzbG90c1RvQQogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gT1BfQygyKS5qc1ZhbHVl
KCk7CiAgICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IE9QKDMpLmpzVmFsdWUoKTsKICAgICBBU1NFUlQo
cHJvcGVydHkuaXNTdHJpbmcoKSk7Ci0gICAgUkVUVVJOKGJhc2VWYWx1ZS5nZXQoZXhlYywgcHJv
cGVydHkudG9Qcm9wZXJ0eUtleShleGVjKSkpOworICAgIFJFVFVSTihiYXNlVmFsdWUuZ2V0KGV4
ZWMsIGFzU3RyaW5nKHByb3BlcnR5KS0+dG9JZGVudGlmaWVyKGV4ZWMpKSk7CiB9CiAKIFNMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgKaW5kZXggMzYwZTQ2ZTkx
MzQxNDZlMmZhNGE1ZjVmOTNlOWRiZTYyNmQxN2I0NS4uMjFmZGYzMzc4MDdlMjYyM2I3Zjg1Yjlk
YmI0NTA0NWZjMWVkMzZhMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDSlNWYWx1ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pT
VmFsdWUuaApAQCAtMzAyLDYgKzMwMiw3IEBAIGNsYXNzIEpTVmFsdWUgewogICAgIHZvaWQgZHVt
cEZvckJhY2t0cmFjZShQcmludFN0cmVhbSYpIGNvbnN0OwogCiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgSlNPYmplY3QqIHN5bnRoZXNpemVQcm90b3R5cGUoRXhlY1N0YXRlKikgY29uc3Q7CisgICAg
Ym9vbCByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKEV4ZWNTdGF0ZSopIGNvbnN0OwogCiAgICAgLy8g
Q29uc3RhbnRzIHVzZWQgZm9yIEludDUyLiBJbnQ1MiBpc24ndCBwYXJ0IG9mIEpTVmFsdWUgcmln
aHQgbm93LCBidXQgSlNWYWx1ZXMgbWF5IGJlCiAgICAgLy8gY29udmVydGVkIHRvIEludDUycyBh
bmQgYmFjayBhZ2Fpbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ0pTVmFsdWVJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NK
U1ZhbHVlSW5saW5lcy5oCmluZGV4IDQ2M2Y5ZmFhOGNjNjFkMjM0MTkyYmQ4ZWE4NjY5ZmI1NjQz
OTcxZTguLmE0MGY5OGY4OTkzYjJiZGFjZTY4YjE1MjhmNDg4YTNiZWY0MzE4ZjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaApAQCAt
MjYsNiArMjYsNyBAQAogI2lmbmRlZiBKU1ZhbHVlSW5saW5lc19oCiAjZGVmaW5lIEpTVmFsdWVJ
bmxpbmVzX2gKIAorI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKICNpbmNsdWRlICJJZGVu
dGlmaWVyLmgiCiAjaW5jbHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTQ0pT
VmFsdWUuaCIKQEAgLTkxNiw2ICs5MTcsMTQgQEAgaW5saW5lIFRyaVN0YXRlIEpTVmFsdWU6OnB1
cmVUb0Jvb2xlYW4oKSBjb25zdAogICAgIHJldHVybiBpc1RydWUoKSA/IFRydWVUcmlTdGF0ZSA6
IEZhbHNlVHJpU3RhdGU7CiB9CiAKK0FMV0FZU19JTkxJTkUgYm9vbCBKU1ZhbHVlOjpyZXF1aXJl
T2JqZWN0Q29lcmNpYmxlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK3sKKyAgICBpZiAoIWlzVW5k
ZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGV4ZWMtPnZtKCkudGhy
b3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90QW5PYmplY3RFcnJvcihleGVjLCAqdGhpcykpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBK
U1ZhbHVlSW5saW5lc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PYmplY3RQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2Jq
ZWN0UHJvdG90eXBlLmNwcAppbmRleCBmMDkyYTk3YWM3MGQ3NDRhNjE5OWM4ZGU1NjhkNzVmYmRk
YWFhZDJiLi45NGM1YTRkZjA2YzZhYzY1YzQwZmUzMTc4YzJiZDkzY2U0ZmU1OWJlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAKQEAg
LTg1LDcgKzg1LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9G
dW5jVmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMpCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG9iamVjdFByb3RvRnVuY0hhc093blByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RN
b2RlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0aGlzVmFsdWUudG9P
YmplY3QoZXhlYyktPmhhc093blByb3BlcnR5KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJv
cGVydHlLZXkoZXhlYykpKSk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVu
dCgwKS50b1Byb3BlcnR5S2V5KGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0aGlzVmFsdWUudG9PYmplY3QoZXhlYyktPmhh
c093blByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNJc1Byb3RvdHlwZU9mKEV4ZWNTdGF0ZSogZXhl
YykKQEAgLTExOCwxMSArMTIxLDE1IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2Jq
ZWN0UHJvdG9GdW5jRGVmaW5lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYykKICAgICBpZiAoZ2V0Q2Fs
bERhdGEoZ2V0LCBjYWxsRGF0YSkgPT0gQ2FsbFR5cGVOb25lKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoImludmFs
aWQgZ2V0dGVyIHVzYWdlIikpKTsKIAorICAgIGF1dG8gcHJvcGVydHlOYW1lID0gZXhlYy0+YXJn
dW1lbnQoMCkudG9Qcm9wZXJ0eUtleShleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisKICAg
ICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICBkZXNjcmlwdG9yLnNldEdldHRl
cihnZXQpOwogICAgIGRlc2NyaXB0b3Iuc2V0RW51bWVyYWJsZSh0cnVlKTsKICAgICBkZXNjcmlw
dG9yLnNldENvbmZpZ3VyYWJsZSh0cnVlKTsKLSAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZShl
eGVjLT52bSgpKS0+ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgZXhlYy0+YXJn
dW1lbnQoMCkudG9Qcm9wZXJ0eUtleShleGVjKSwgZGVzY3JpcHRvciwgZmFsc2UpOworICAgIHRo
aXNPYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5kZWZpbmVPd25Qcm9wZXJ0eSh0aGlz
T2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGZhbHNlKTsKIAogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC0xMzgsMTEgKzE0NSwx
NSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0RlZmluZVNl
dHRlcihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgaWYgKGdldENhbGxEYXRhKHNldCwgY2FsbERhdGEp
ID09IENhbGxUeXBlTm9uZSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVh
dGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJpbnZhbGlkIHNldHRlciB1c2FnZSIpKSk7
CiAKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJvcGVydHlL
ZXkoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCiAgICAgUHJvcGVydHlEZXNjcmlwdG9y
IGRlc2NyaXB0b3I7CiAgICAgZGVzY3JpcHRvci5zZXRTZXR0ZXIoc2V0KTsKICAgICBkZXNjcmlw
dG9yLnNldEVudW1lcmFibGUodHJ1ZSk7CiAgICAgZGVzY3JpcHRvci5zZXRDb25maWd1cmFibGUo
dHJ1ZSk7Ci0gICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmRlZmluZU93
blByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJvcGVydHlL
ZXkoZXhlYyksIGRlc2NyaXB0b3IsIGZhbHNlKTsKKyAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJs
ZShleGVjLT52bSgpKS0+ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lLCBkZXNjcmlwdG9yLCBmYWxzZSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMTUzLDkgKzE2NCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRlcihFeGVjU3RhdGUqIGV4ZWMp
CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5h
cmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKwog
ICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXNPYmplY3QpOwotICAgIGlmICh0aGlzT2JqZWN0LT5n
ZXRQcm9wZXJ0eVNsb3QoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtleShleGVj
KSwgc2xvdCkKLSAgICAgICAgJiYgc2xvdC5pc0FjY2Vzc29yKCkpIHsKKyAgICBpZiAodGhpc09i
amVjdC0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkgJiYgc2xvdC5p
c0FjY2Vzc29yKCkpIHsKICAgICAgICAgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIgPSBzbG90
LmdldHRlclNldHRlcigpOwogICAgICAgICByZXR1cm4gZ2V0dGVyU2V0dGVyLT5pc0dldHRlck51
bGwoKSA/IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSA6IEpTVmFsdWU6OmVuY29kZShn
ZXR0ZXJTZXR0ZXItPmdldHRlcigpKTsKICAgICB9CkBAIC0xNjksOSArMTgzLDEyIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jTG9va3VwU2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYykKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKKyAgICBhdXRvIHByb3BlcnR5TmFt
ZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJvcGVydHlLZXkoZXhlYyk7CisgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworCiAgICAgUHJvcGVydHlTbG90IHNsb3QodGhpc09iamVjdCk7Ci0gICAgaWYgKHRo
aXNPYmplY3QtPmdldFByb3BlcnR5U2xvdChleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1Byb3Bl
cnR5S2V5KGV4ZWMpLCBzbG90KQotICAgICAgICAmJiBzbG90LmlzQWNjZXNzb3IoKSkgeworICAg
IGlmICh0aGlzT2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90
KSAmJiBzbG90LmlzQWNjZXNzb3IoKSkgewogICAgICAgICBHZXR0ZXJTZXR0ZXIqIGdldHRlclNl
dHRlciA9IHNsb3QuZ2V0dGVyU2V0dGVyKCk7CiAgICAgICAgIHJldHVybiBnZXR0ZXJTZXR0ZXIt
PmlzU2V0dGVyTnVsbCgpID8gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpIDogSlNWYWx1
ZTo6ZW5jb2RlKGdldHRlclNldHRlci0+c2V0dGVyKCkpOwogICAgIH0KQEAgLTE4MSw5ICsxOTgs
MTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNMb29rdXBT
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjKQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9i
amVjdFByb3RvRnVuY1Byb3BlcnR5SXNFbnVtZXJhYmxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICBKU09iamVjdCogdGhpc09iamVjdCA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBT
dHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGV4ZWMt
PmFyZ3VtZW50KDApLnRvUHJvcGVydHlLZXkoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
CisgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhl
YywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwogICAgIGJvb2wgZW51bWVyYWJsZSA9IHRo
aXNPYmplY3QtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3IpICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNCb29sZWFuKGVudW1lcmFibGUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZXhjZXB0aW9uLWluLXRvLXByb3BlcnR5LWtleS1zaG91
bGQtYmUtaGFuZGxlZC1lYXJseS1pbi1vYmplY3QtbWV0aG9kcy5qcyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9zdHJlc3MvZXhjZXB0aW9uLWluLXRvLXByb3BlcnR5LWtleS1zaG91bGQt
YmUtaGFuZGxlZC1lYXJseS1pbi1vYmplY3QtbWV0aG9kcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mN2NjMDFk
MDRkNjViODA0ZjJjNzllYTgwZjk2MDgxMTUxMzE4NGNhCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9leGNlcHRpb24taW4tdG8tcHJvcGVydHkt
a2V5LXNob3VsZC1iZS1oYW5kbGVkLWVhcmx5LWluLW9iamVjdC1tZXRob2RzLmpzCkBAIC0wLDAg
KzEsNzMgQEAKKwordmFyIHByb3BlcnR5S2V5ID0geworICAgIHRvU3RyaW5nKCkgeworICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoInByb3BlcnR5S2V5LnRvU3RyaW5nIGlzIGNhbGxlZC4iKTsKKyAg
ICB9Cit9OworCitmdW5jdGlvbiBzaG91bGRUaHJvdyhmdW5jLCBtZXNzYWdlKSB7CisgICAgdmFy
IGVycm9yID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBmdW5jKCk7CisgICAgfSBjYXRjaCAo
ZSkgeworICAgICAgICBlcnJvciA9IGU7CisgICAgfQorICAgIGlmICghZXJyb3IpCisgICAgICAg
IHRocm93IG5ldyBFcnJvcigibm90IHRocm93bi4iKTsKKyAgICBpZiAoU3RyaW5nKGVycm9yKSAh
PT0gbWVzc2FnZSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgZXJyb3I6ICIgKyBTdHJp
bmcoZXJyb3IpKTsKK30KKwordmFyIG9iamVjdCA9IHt9OworCitzaG91bGRUaHJvdyhmdW5jdGlv
biAoKSB7CisgICAgb2JqZWN0Lmhhc093blByb3BlcnR5KHByb3BlcnR5S2V5KTsKK30sICJFcnJv
cjogcHJvcGVydHlLZXkudG9TdHJpbmcgaXMgY2FsbGVkLiIpOworCitzaG91bGRUaHJvdyhmdW5j
dGlvbiAoKSB7CisgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG51bGws
IHByb3BlcnR5S2V5KTsKK30sICJFcnJvcjogcHJvcGVydHlLZXkudG9TdHJpbmcgaXMgY2FsbGVk
LiIpOworCitzaG91bGRUaHJvdyhmdW5jdGlvbiAoKSB7CisgICAgT2JqZWN0LnByb3RvdHlwZS5o
YXNPd25Qcm9wZXJ0eS5jYWxsKG51bGwsICdvaycpOworfSwgIlR5cGVFcnJvcjogbnVsbCBpcyBu
b3QgYW4gb2JqZWN0IChldmFsdWF0aW5nICdPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5
LmNhbGwobnVsbCwgJ29rJyknKSIpOworCitzaG91bGRUaHJvdyhmdW5jdGlvbiAoKSB7CisgICAg
b2JqZWN0LnByb3BlcnR5SXNFbnVtZXJhYmxlKHByb3BlcnR5S2V5KTsKK30sICJFcnJvcjogcHJv
cGVydHlLZXkudG9TdHJpbmcgaXMgY2FsbGVkLiIpOworCisvLyBUb1Byb3BlcnR5S2V5IGlzIGZp
cnN0LCBUb09iamVjdCBpcyBmb2xsb3dpbmcuCitzaG91bGRUaHJvdyhmdW5jdGlvbiAoKSB7Cisg
ICAgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG51bGwsIHByb3Bl
cnR5S2V5KTsKK30sICJFcnJvcjogcHJvcGVydHlLZXkudG9TdHJpbmcgaXMgY2FsbGVkLiIpOwor
CitzaG91bGRUaHJvdyhmdW5jdGlvbiAoKSB7CisgICAgLy8gVG9Qcm9wZXJ0eUtleSBpcyBmaXJz
dCwgVG9PYmplY3QgaXMgZm9sbG93aW5nLgorICAgIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJ
c0VudW1lcmFibGUuY2FsbChudWxsLCAnb2snKTsKK30sICJUeXBlRXJyb3I6IG51bGwgaXMgbm90
IGFuIG9iamVjdCAoZXZhbHVhdGluZyAnT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVy
YWJsZS5jYWxsKG51bGwsICdvaycpJykiKTsKKworc2hvdWxkVGhyb3coZnVuY3Rpb24gKCkgewor
ICAgIG9iamVjdC5fX2RlZmluZUdldHRlcl9fKHByb3BlcnR5S2V5LCBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHJldHVybiAnTkcnOworICAgIH0pOworfSwgIkVycm9yOiBwcm9wZXJ0eUtleS50b1N0
cmluZyBpcyBjYWxsZWQuIik7CisKK2lmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KG9iamVjdCwgJycpKQorICAgIHRocm93IG5ldyBFcnJvcigiYmFkIGRlc2NyaXB0b3IiKTsKKwor
c2hvdWxkVGhyb3coZnVuY3Rpb24gKCkgeworICAgIG9iamVjdC5fX2RlZmluZVNldHRlcl9fKHBy
b3BlcnR5S2V5LCBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAnTkcnOworICAgIH0pOwor
fSwgIkVycm9yOiBwcm9wZXJ0eUtleS50b1N0cmluZyBpcyBjYWxsZWQuIik7CisKK2lmIChPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgJycpKQorICAgIHRocm93IG5ldyBF
cnJvcigiYmFkIGRlc2NyaXB0b3IiKTsKKworc2hvdWxkVGhyb3coZnVuY3Rpb24gKCkgeworICAg
IG9iamVjdC5fX2xvb2t1cEdldHRlcl9fKHByb3BlcnR5S2V5KTsKK30sICJFcnJvcjogcHJvcGVy
dHlLZXkudG9TdHJpbmcgaXMgY2FsbGVkLiIpOworCitzaG91bGRUaHJvdyhmdW5jdGlvbiAoKSB7
CisgICAgb2JqZWN0Ll9fbG9va3VwU2V0dGVyX18ocHJvcGVydHlLZXkpOworfSwgIkVycm9yOiBw
cm9wZXJ0eUtleS50b1N0cmluZyBpcyBjYWxsZWQuIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2V4Y2VwdGlvbi1pbi10by1wcm9wZXJ0eS1rZXktc2hv
dWxkLWJlLWhhbmRsZWQtZWFybHkuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL2V4Y2VwdGlvbi1pbi10by1wcm9wZXJ0eS1rZXktc2hvdWxkLWJlLWhhbmRsZWQtZWFybHku
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZTUxMWQwM2I5NTRlYmMwZTMzNDcyZjcyZmQzNzE4NDNkYzg5MzM5OAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZXhj
ZXB0aW9uLWluLXRvLXByb3BlcnR5LWtleS1zaG91bGQtYmUtaGFuZGxlZC1lYXJseS5qcwpAQCAt
MCwwICsxLDEzOSBAQAorCit2YXIgcHJvcGVydHlLZXkgPSB7CisgICAgdG9TdHJpbmcoKSB7Cisg
ICAgICAgIHRocm93IG5ldyBFcnJvcigicHJvcGVydHlLZXkudG9TdHJpbmcgaXMgY2FsbGVkLiIp
OworICAgIH0KK307CisKK2Z1bmN0aW9uIHNob3VsZFRocm93KGZ1bmMsIG1lc3NhZ2UpIHsKKyAg
ICB2YXIgZXJyb3IgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNh
dGNoIChlKSB7CisgICAgICAgIGVycm9yID0gZTsKKyAgICB9CisgICAgaWYgKCFlcnJvcikKKyAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJub3QgdGhyb3duLiIpOworICAgIGlmIChTdHJpbmcoZXJy
b3IpICE9PSBtZXNzYWdlKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCBlcnJvcjogIiAr
IFN0cmluZyhlcnJvcikpOworfQorCisvLyBHZXRCeVZhbC4KKyhmdW5jdGlvbiAoKSB7CisgICAg
dmFyIGNhbGxlZCA9IG51bGw7CisgICAgdmFyIHRvU3RyaW5nQ2FsbGVkID0gZmFsc2U7CisgICAg
dmFyIHByb3BlcnR5ID0geworICAgICAgICB0b1N0cmluZygpIHsKKyAgICAgICAgICAgIHRvU3Ry
aW5nQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiAidmFsdWUiOworICAgICAgICB9
CisgICAgfTsKKyAgICB2YXIgb2JqZWN0ID0geworICAgICAgICBnZXQgdmFsdWUoKSB7CisgICAg
ICAgIH0sCisgICAgICAgIHNldCB2YWx1ZSh2YWwpIHsKKyAgICAgICAgfQorICAgIH07CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgJycsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICBjYWxsZWQgPSAiZ2V0dGVyIGZvciAnJyBpcyBjYWxsZWQuIjsK
KyAgICAgICAgfQorICAgIH0pOworCisgICAgZnVuY3Rpb24gdGVzdChvYmplY3QsIHByb3BlcnR5
KSB7CisgICAgICAgIG9iamVjdFtwcm9wZXJ0eV07CisgICAgfQorICAgIG5vSW5saW5lKHRlc3Qp
OworCisgICAgc2hvdWxkVGhyb3coZnVuY3Rpb24gKCkgeyB0ZXN0KG9iamVjdCwgcHJvcGVydHlL
ZXkpOyB9LCAiRXJyb3I6IHByb3BlcnR5S2V5LnRvU3RyaW5nIGlzIGNhbGxlZC4iKTsKKyAgICBp
ZiAoY2FsbGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2FsbGVkKTsKKyAgICB0b1N0cmlu
Z0NhbGxlZCA9IGZhbHNlOworICAgIHNob3VsZFRocm93KGZ1bmN0aW9uICgpIHsgdGVzdChudWxs
LCBwcm9wZXJ0eUtleSk7IH0sICJUeXBlRXJyb3I6IG51bGwgaXMgbm90IGFuIG9iamVjdCAoZXZh
bHVhdGluZyAnb2JqZWN0W3Byb3BlcnR5XScpIik7CisgICAgaWYgKHRvU3RyaW5nQ2FsbGVkKQor
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInRvU3RyaW5nIGlzIGNhbGxlZC4iKTsKK30oKSk7CisK
Ky8vIEdldEJ5VmFsIERGRy4KKyhmdW5jdGlvbiAoKSB7CisgICAgdmFyIGNhbGxlZCA9IG51bGw7
CisgICAgdmFyIHRvU3RyaW5nQ2FsbGVkID0gZmFsc2U7CisgICAgdmFyIHByb3BlcnR5ID0gewor
ICAgICAgICB0b1N0cmluZygpIHsKKyAgICAgICAgICAgIHRvU3RyaW5nQ2FsbGVkID0gdHJ1ZTsK
KyAgICAgICAgICAgIHJldHVybiAidmFsdWUiOworICAgICAgICB9CisgICAgfTsKKyAgICB2YXIg
b2JqZWN0ID0geworICAgICAgICBnZXQgIiIoKSB7CisgICAgICAgICAgICBjYWxsZWQgPSAiZ2V0
dGVyIGZvciAnJyBpcyBjYWxsZWQuIjsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0ICIiKHZhbCkg
eworICAgICAgICAgICAgY2FsbGVkID0gInNldHRlciBmb3IgJycgaXMgY2FsbGVkLiI7CisgICAg
ICAgIH0sCisKKyAgICAgICAgZ2V0IHZhbHVlKCkgeworICAgICAgICB9LAorICAgICAgICBzZXQg
dmFsdWUodmFsKSB7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZnVuY3Rpb24gdGVzdChvYmpl
Y3QsIHByb3BlcnR5KSB7CisgICAgICAgIG9iamVjdFtwcm9wZXJ0eV07CisgICAgfQorICAgIG5v
SW5saW5lKHRlc3QpOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKQorICAg
ICAgICB0ZXN0KG9iamVjdCwgcHJvcGVydHkpOworCisgICAgc2hvdWxkVGhyb3coZnVuY3Rpb24g
KCkgeyB0ZXN0KG9iamVjdCwgcHJvcGVydHlLZXkpOyB9LCAiRXJyb3I6IHByb3BlcnR5S2V5LnRv
U3RyaW5nIGlzIGNhbGxlZC4iKTsKKyAgICBpZiAoY2FsbGVkKQorICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoY2FsbGVkKTsKKyAgICB0b1N0cmluZ0NhbGxlZCA9IGZhbHNlOworICAgIHNob3VsZFRo
cm93KGZ1bmN0aW9uICgpIHsgdGVzdChudWxsLCBwcm9wZXJ0eUtleSk7IH0sICJUeXBlRXJyb3I6
IG51bGwgaXMgbm90IGFuIG9iamVjdCAoZXZhbHVhdGluZyAnb2JqZWN0W3Byb3BlcnR5XScpIik7
CisgICAgaWYgKHRvU3RyaW5nQ2FsbGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInRvU3Ry
aW5nIGlzIGNhbGxlZC4iKTsKK30oKSk7CisKKworLy8gR2V0QnlWYWxTdHJpbmcuCisoZnVuY3Rp
b24gKCkgeworICAgIHZhciBjYWxsZWQ7CisgICAgdmFyIHRvU3RyaW5nQ2FsbGVkID0gZmFsc2U7
CisgICAgdmFyIHByb3BlcnR5ID0geworICAgICAgICB0b1N0cmluZygpIHsKKyAgICAgICAgICAg
IHRvU3RyaW5nQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiAidmFsdWUiOworICAg
ICAgICB9CisgICAgfTsKKyAgICBmdW5jdGlvbiB0ZXN0KGFycmF5LCBsZW5ndGgsIHByb3BlcnR5
KSB7CisgICAgICAgIHZhciByZXN1bHQgPSAwOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgcmVzdWx0ICs9IGFycmF5W3Byb3BlcnR5XTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgbm9JbmxpbmUodGVzdCk7CisKKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoU3RyaW5nLnByb3RvdHlwZSwgIiIsIHsKKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBjYWxsZWQgPSAiZ2V0dGVyIGZvciAnJyBpcyBj
YWxsZWQuIjsKKyAgICAgICAgfQorICAgIH0pOworCisgICAgdmFyIGFycmF5ID0gWzEsIDIsIDNd
OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpCisgICAgICAgIHRlc3QoYXJy
YXksIGFycmF5Lmxlbmd0aCwgMCk7CisKKyAgICB2YXIgYXJyYXkgPSBbMSwgZmFsc2UsIDNdOwor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpCisgICAgICAgIHRlc3QoYXJyYXks
IGFycmF5Lmxlbmd0aCwgMSk7CisKKyAgICB0ZXN0KCJoZWxsbyIsICJoZWxsbyIubGVuZ3RoLCAy
KTsKKyAgICBzaG91bGRUaHJvdyhmdW5jdGlvbiAoKSB7IHRlc3QoImhlbGxvIiwgImhlbGxvIi5s
ZW5ndGgsIHByb3BlcnR5S2V5KTsgfSwgIkVycm9yOiBwcm9wZXJ0eUtleS50b1N0cmluZyBpcyBj
YWxsZWQuIik7CisgICAgaWYgKGNhbGxlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGNhbGxl
ZCk7CisgICAgdG9TdHJpbmdDYWxsZWQgPSBmYWxzZTsKKyAgICBzaG91bGRUaHJvdyhmdW5jdGlv
biAoKSB7IHRlc3QobnVsbCwgMjAsIHByb3BlcnR5S2V5KTsgfSwgIlR5cGVFcnJvcjogbnVsbCBp
cyBub3QgYW4gb2JqZWN0IChuZWFyICcuLi5mb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KS4uLicpIik7CisgICAgaWYgKHRvU3RyaW5nQ2FsbGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoInRvU3RyaW5nIGlzIGNhbGxlZC4iKTsKK30oKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249317</attachid>
            <date>2015-03-24 00:05:36 -0700</date>
            <delta_ts>2015-03-27 04:09:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142922-20150324160500.patch</filename>
            <type>text/plain</type>
            <size>21348</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxODg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
ZTRmNzRmYWE3ZmNjNjNlZmNmZGFlZDFlOTU0Y2Y3YjkyNTczYjcwLi5hMjYwNTYwMmUwODNhYjE2
Y2UwOWEyNTc2YmViMjJmODk1OTI0MGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MyBAQAorMjAxNS0wMy0yNCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBJbnNlcnQgZXhjZXB0aW9uIGNoZWNrIGFyb3VuZCB0b1Byb3BlcnR5
S2V5IGNhbGwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0MjkyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEluIHNvbWUgcGxhY2VzLCBleGNlcHRpb24gY2hlY2sgaXMgbWlzc2luZyBhZnRlci9iZWZvcmUg
dG9Qcm9wZXJ0eUtleS4KKyAgICAgICAgSG93ZXZlciwgc2luY2UgaXQgY2FsbHMgdG9TdHJpbmcs
IGl0J3Mgb2JzZXJ2YWJsZSB0byB1c2VycywKKworICAgICAgICBNaXNzaW5nIGV4Y2VwdGlvbiBj
aGVja3MgaW4gT2JqZWN0LnByb3RvdHlwZSBtZXRob2RzIGNhbiBiZQorICAgICAgICBvYnNlcnZl
ZCBzaW5jZSBpdCB3b3VsZCBiZSBvdmVycmlkZGVuIHdpdGggdG9PYmplY3QobnVsbC91bmRlZmlu
ZWQpIGVycm9ycy4KKyAgICAgICAgV2UgaW5zZXJ0ZWQgZXhjZXB0aW9uIGNoZWNrcyBhZnRlciB0
b1Byb3BlcnR5S2V5LgorCisgICAgICAgIE1pc3NpbmcgZXhjZXB0aW9uIGNoZWNrcyBpbiBHZXRC
eUlkIHJlbGF0ZWQgY29kZSBjYW4gYmUKKyAgICAgICAgb2JzZXJ2ZWQgc2luY2UgaXQgd291bGQg
YmUgb3ZlcnJpZGRlbiB3aXRoIHRvT2JqZWN0KG51bGwvdW5kZWZpbmVkKSBlcnJvcnMuCisgICAg
ICAgIEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0byBpbnNlcnQgZXhjZXB0aW9uIGNoZWNrcyBiZWZv
cmUvYWZ0ZXIgdG9Qcm9wZXJ0eUtleQorICAgICAgICBzaW5jZSBSZXF1aXJlT2JqZWN0Q29lcmNp
YmxlIGZvbGxvd2VkIGJ5IHRvUHJvcGVydHlLZXkgY2FuIGNhdXNlIGV4Y2VwdGlvbnMuCisKKyAg
ICAgICAgSlNWYWx1ZTo6Z2V0IGNoZWNrcyBudWxsL3VuZGVmaW5lZCBhbmQgcmFpc2UgYW4gZXhj
ZXB0aW9uIGlmIHx0aGlzfCBpcyBudWxsIG9yIHVuZGVmaW5lZC4KKyAgICAgICAgSG93ZXZlciwg
d2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIHRoZSBiYXNlVmFsdWUgaXMgb2JqZWN0IGNvZXJjaWJs
ZSBiZWZvcmUgZXhlY3V0aW5nIEpTVmFsdWU6OnRvUHJvcGVydHlLZXkuCisgICAgICAgIEFjY29y
ZGluZyB0byB0aGUgc3BlYywgd2UgZmlyc3QgcGVyZm9ybSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxl
IGFuZCBjaGVjayB0aGUgZXhjZXB0aW9uLgorICAgICAgICBBbmQgc2Vjb25kLCB3ZSBwZXJmb3Jt
IFRvUHJvcGVydHlLZXkgYW5kIGNoZWNrIHRoZSBleGNlcHRpb24uCisgICAgICAgIFNpbmNlIEpT
VmFsdWU6OnRvUHJvcGVydHlLZXkgY2FuIGNhdXNlIHRvU3RyaW5nIGNhbGwsIHRoaXMgaXMgb2Jz
ZXJ2YWJsZSB0byB1c2Vycy4KKyAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHRoZSB0YXJnZXQgaXMg
bm90IG9iamVjdCBjb2VyY2libGUsCisgICAgICAgIFRvUHJvcGVydHlLZXkgc2hvdWxkIG5vdCBi
ZSBleGVjdXRlZCwgYW5kIHRvU3RyaW5nIHNob3VsZCBub3QgYmUgZXhlY3V0ZWQgYnkgVG9Qcm9w
ZXJ0eUtleS4KKyAgICAgICAgU28gdGhlIG9yZGVyIG9mIG9ic2VydmFibGUgYWN0aW9ucyAoUmVx
dWlyZU9iamVjdENvZXJjaWJsZSBhbmQgVG9Qcm9wZXJ0eUtleSkgc2hvdWxkIGJlIGNvcnJlY3Qg
dG8gdGhlIHNwZWMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIEpTVmFsdWU6OnJl
cXVpcmVPYmplY3RDb2VyY2libGUgYW5kIHVzZSBpdCBiZWNhdXNlIG9mIHRoZSBmb2xsb3dpbmcg
MiByZWFzb25zLgorCisgICAgICAgIDEuIFVzaW5nIHRvT2JqZWN0IGluc3RlYWQgb2YgcmVxdWly
ZU9iamVjdENvZXJjaWJsZSBwcm9kdWNlcyB1bm5lY2Vzc2FyeSB3cmFwcGVyIG9iamVjdC4KKwor
ICAgICAgICB0b09iamVjdCBjb252ZXJ0cyBwcmltaXRpdmUgdHlwZXMgaW50byB3cmFwcGVyIG9i
amVjdHMuCisgICAgICAgIEJ1dCBpdCBpcyBub3QgZWZmaWNpZW50IHNpbmNlIHdyYXBwZXIgb2Jq
ZWN0cyBhcmUgbm90IG5lY2Vzc2FyeQorICAgICAgICBpZiB3ZSBsb29rIHVwIG1ldGhvZHMgZnJv
bSBwcmltaXRpdmUgdmFsdWVzJ3MgcHJvdG90eXBlLiAodXNpbmcgc3ludGhlc2l6ZVByb3RvdHlw
ZSBpcyBiZXR0ZXIpLgorCisgICAgICAgIDIuIFVzaW5nIHRoZSByZXN1bHQgb2YgdG9PYmplY3Qg
aXMgbm90IGNvcnJlY3QgdG8gdGhlIHNwZWMuCisKKyAgICAgICAgVG8gYWxpZ24gdG8gdGhlIHNw
ZWMgY29ycmVjdGx5LCB3ZSBjYW5ub3QgdXNlIEpTT2JqZWN0OjpnZXQKKyAgICAgICAgYnkgdXNp
bmcgdGhlIHdyYXBwZXIgb2JqZWN0IHByb2R1Y2VkIGJ5IHRoZSB0b09iamVjdCBzdWdnZXN0ZWQg
aW4gKDEpLgorICAgICAgICBJZiB3ZSB1c2UgSlNPYmplY3QgdGhhdCBpcyBjb252ZXJ0ZWQgYnkg
dG9PYmplY3QsIGdldHRlciB3aWxsIGJlIGNhbGxlZCBieSB1c2luZyB0aGlzIEpTT2JqZWN0IGFz
IHx0aGlzfC4KKyAgICAgICAgSXQgaXMgbm90IGNvcnJlY3Qgc2luY2UgZ2V0dGVyIHNob3VsZCBi
ZSBjYWxsZWQgd2l0aCB0aGUgb3JpZ2luYWwgfHRoaXN8IHZhbHVlIHRoYXQgbWF5IGJlIHByaW1p
dGl2ZSB0eXBlcy4KKworICAgICAgICBTbyBpbiB0aGlzIHBhdGNoLCB3ZSB1c2UgSlNWYWx1ZTo6
cmVxdWlyZU9iamVjdENvZXJjaWJsZQorICAgICAgICB0byBjaGVjayB0aGUgdGFyZ2V0IGlzIG9i
amVjdCBjb2VyY2libGUgYW5kIHJhaXNlIGFuIGVycm9yIGlmIGl0J3Mgbm90LgorCisgICAgICAg
ICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNw
cDoKKyAgICAgICAgKEpTQzo6Z2V0QnlWYWwpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldEJ5VmFsKToKKyAgICAgICAgKiBydW50
aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToK
KyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWUuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQ0pT
VmFsdWVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OnJlcXVpcmVPYmplY3RDb2Vy
Y2libGUpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcDoKKyAgICAgICAg
KEpTQzo6b2JqZWN0UHJvdG9GdW5jSGFzT3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpvYmpl
Y3RQcm90b0Z1bmNEZWZpbmVHZXR0ZXIpOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNE
ZWZpbmVTZXR0ZXIpOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNMb29rdXBHZXR0ZXIp
OgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNMb29rdXBTZXR0ZXIpOgorICAgICAgICAo
SlNDOjpvYmplY3RQcm90b0Z1bmNQcm9wZXJ0eUlzRW51bWVyYWJsZSk6CisgICAgICAgICogdGVz
dHMvc3RyZXNzL2V4Y2VwdGlvbi1pbi10by1wcm9wZXJ0eS1rZXktc2hvdWxkLWJlLWhhbmRsZWQt
ZWFybHktaW4tb2JqZWN0LW1ldGhvZHMuanM6IEFkZGVkLgorICAgICAgICAoc2hvdWxkVGhyb3cp
OgorICAgICAgICAoaWYpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9leGNlcHRpb24taW4tdG8t
cHJvcGVydHkta2V5LXNob3VsZC1iZS1oYW5kbGVkLWVhcmx5LmpzOiBBZGRlZC4KKyAgICAgICAg
KHNob3VsZFRocm93KToKKyAgICAgICAgKC4pOgorCiAyMDE1LTAzLTIzICBGaWxpcCBQaXpsbyAg
PGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgSlNDIHNob3VsZCBoYXZlIGEgbG93LWNvc3Qg
YXN5bmNocm9ub3VzIGRpc2Fzc2VtYmxlcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5jcHAKaW5kZXggMDIwNzdjNTQxZTgwYTU5MmQ0NjA5Nzk0ZWI2NGU5MGQ1ODFj
MTMzNS4uYzRmNTM2NjYxNTRiZjg3NzBiMGU3MTgyYWEyY2E5NzU3YWQ3ODdlMyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCkBAIC0yOTYsNyArMjk2LDEy
IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWwoRXhlY1N0
YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlCiAgICAgICAgIH0KICAgICB9CiAKKyAgICBiYXNl
VmFsdWUucmVxdWlyZU9iamVjdENvZXJjaWJsZShleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eS50b1Byb3BlcnR5S2V5KGV4ZWMpOwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJhc2VWYWx1
ZS5nZXQoZXhlYywgcHJvcGVydHlOYW1lKSk7CiB9CiAKQEAgLTMyNSw2ICszMzAsOCBAQCBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsQ2VsbChFeGVjU3RhdGUq
IGV4ZWMsIEpTQ2VsbCogYmFzZQogICAgIH0KIAogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gcHJv
cGVydHkudG9Qcm9wZXJ0eUtleShleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKGJhc2UpLmdldChleGVjLCBwcm9wZXJ0eU5hbWUp
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5k
ZXggNWZhOGJmZjhlYjlhZjYyYzgyODAwZTJmYjVlZTg5NGYwYWM4NWQxMS4uMTZiNTczNTUwMDFm
MzBmMDJhOTQyOWFkNGU1MTg0ZmUzMWM2ZWJjMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC0xNDIxLDcgKzE0MjEsMTIgQEAgc3RhdGljIEpTVmFs
dWUgZ2V0QnlWYWwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBz
dWJzY3JpcHQsIFIKICAgICAgICAgcmV0dXJuIGJhc2VWYWx1ZS5nZXQoZXhlYywgaSk7CiAgICAg
fQogCisgICAgYmFzZVZhbHVlLnJlcXVpcmVPYmplY3RDb2VyY2libGUoZXhlYyk7CisgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICBhdXRvIHByb3BlcnR5ID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZXhlYyk7CisgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICByZXR1cm4gYmFzZVZhbHVlLmdldChleGVjLCBwcm9wZXJ0eSk7CiB9CiAKQEAgLTE1NTcsNyAr
MTU2MiwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFs
U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVgogICAgICAgICAgICAgICAgIGN0aVBh
dGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhleGVjLT5jb2RlQmxvY2soKSwgUmV0dXJuQWRkcmVzc1B0
cihPVVJfUkVUVVJOX0FERFJFU1MpLCBGdW5jdGlvblB0cihvcGVyYXRpb25HZXRCeVZhbERlZmF1
bHQpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VWYWx1ZS5yZXF1aXJl
T2JqZWN0Q29lcmNpYmxlKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
ICAgICBhdXRvIHByb3BlcnR5ID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZXhlYyk7CisgICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQo
ZXhlYywgcHJvcGVydHkpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXggMTU1MDgwYzZkMjdmMDdmMDRhMjdiYjBlMDY1N2Yw
M2I2MGNjMTE1Yy4uNDJkYTJkMjVjOWQyMGM4MDFlODA2ZjFhNDNiNDI3N2QxYjI5ZmE3MCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCkBAIC03
NDUsNyArNzQ1LDEyIEBAIGlubGluZSBKU1ZhbHVlIGdldEJ5VmFsKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0KQogICAgICAgICByZXR1cm4gYmFz
ZVZhbHVlLmdldChleGVjLCBpKTsKICAgICB9CiAKKyAgICBiYXNlVmFsdWUucmVxdWlyZU9iamVj
dENvZXJjaWJsZShleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGF1dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Q
cm9wZXJ0eUtleShleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIHJldHVybiBiYXNlVmFsdWUuZ2V0KGV4ZWMsIHBy
b3BlcnR5KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1v
blNsb3dQYXRocy5jcHAKaW5kZXggMDlhMDhkNzlmMWQ3ODUwNjdjNThiNmM3YTNiMDc3NzE3N2M1
NTNmZi4uZDMwMTVlZTk5N2NjMmI0OWIzODAyN2Y2NjI3YjJlYjExZmE4NmViMCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCkBAIC01
NzEsNyArNTcxLDcgQEAgc3RhdGljIENvbW1vblNsb3dQYXRoczo6QXJpdHlDaGVja0RhdGEqIHNl
dHVwQXJpdHlDaGVja0RhdGEoVk0mIHZtLCBpbnQgc2xvdHNUb0EKICAgICBKU1ZhbHVlIGJhc2VW
YWx1ZSA9IE9QX0MoMikuanNWYWx1ZSgpOwogICAgIEpTVmFsdWUgcHJvcGVydHkgPSBPUCgzKS5q
c1ZhbHVlKCk7CiAgICAgQVNTRVJUKHByb3BlcnR5LmlzU3RyaW5nKCkpOwotICAgIFJFVFVSTihi
YXNlVmFsdWUuZ2V0KGV4ZWMsIHByb3BlcnR5LnRvUHJvcGVydHlLZXkoZXhlYykpKTsKKyAgICBS
RVRVUk4oYmFzZVZhbHVlLmdldChleGVjLCBhc1N0cmluZyhwcm9wZXJ0eSktPnRvSWRlbnRpZmll
cihleGVjKSkpOwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X3N0cnVjdHVyZV9w
cm9wZXJ0eV9lbnVtZXJhdG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDSlNWYWx1ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNW
YWx1ZS5oCmluZGV4IDM2MGU0NmU5MTM0MTQ2ZTJmYTRhNWY1ZjkzZTlkYmU2MjZkMTdiNDUuLjIx
ZmRmMzM3ODA3ZTI2MjNiN2Y4NWI5ZGJiNDUwNDVmYzFlZDM2YTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgKQEAgLTMwMiw2ICszMDIsNyBAQCBjbGFzcyBK
U1ZhbHVlIHsKICAgICB2b2lkIGR1bXBGb3JCYWNrdHJhY2UoUHJpbnRTdHJlYW0mKSBjb25zdDsK
IAogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBzeW50aGVzaXplUHJvdG90eXBlKEV4
ZWNTdGF0ZSopIGNvbnN0OworICAgIGJvb2wgcmVxdWlyZU9iamVjdENvZXJjaWJsZShFeGVjU3Rh
dGUqKSBjb25zdDsKIAogICAgIC8vIENvbnN0YW50cyB1c2VkIGZvciBJbnQ1Mi4gSW50NTIgaXNu
J3QgcGFydCBvZiBKU1ZhbHVlIHJpZ2h0IG5vdywgYnV0IEpTVmFsdWVzIG1heSBiZQogICAgIC8v
IGNvbnZlcnRlZCB0byBJbnQ1MnMgYW5kIGJhY2sgYWdhaW4uCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaAppbmRleCA0NjNmOWZhYThjYzYx
ZDIzNDE5MmJkOGVhODY2OWZiNTY0Mzk3MWU4Li5hNDBmOThmODk5M2IyYmRhY2U2OGIxNTI4ZjQ4
OGEzYmVmNDMxOGY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NKU1ZhbHVlSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q0pTVmFsdWVJbmxpbmVzLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgSlNWYWx1ZUlubGlu
ZXNfaAogI2RlZmluZSBKU1ZhbHVlSW5saW5lc19oCiAKKyNpbmNsdWRlICJFeGNlcHRpb25IZWxw
ZXJzLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkludGVybmFsRnVuY3Rp
b24uaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCkBAIC05MTYsNiArOTE3LDE0IEBAIGlubGlu
ZSBUcmlTdGF0ZSBKU1ZhbHVlOjpwdXJlVG9Cb29sZWFuKCkgY29uc3QKICAgICByZXR1cm4gaXNU
cnVlKCkgPyBUcnVlVHJpU3RhdGUgOiBGYWxzZVRyaVN0YXRlOwogfQogCitBTFdBWVNfSU5MSU5F
IGJvb2wgSlNWYWx1ZTo6cmVxdWlyZU9iamVjdENvZXJjaWJsZShFeGVjU3RhdGUqIGV4ZWMpIGNv
bnN0Cit7CisgICAgaWYgKCFpc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEFuT2JqZWN0
RXJyb3IoZXhlYywgKnRoaXMpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwogCiAjZW5kaWYgLy8gSlNWYWx1ZUlubGluZXNfaApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAKaW5kZXggMDBkNTZjNjE1OTE4
MjQ4Yjc5NGExYmU4MjI4Njc5NWEwMzVhMTU3ZS4uZWY4NTRiMGQwNDU4NGI1ZTdjMTg1OWM5Njgy
YjE5YTUwYWQ3MzU3MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T2JqZWN0UHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
YmplY3RQcm90b3R5cGUuY3BwCkBAIC04NSw3ICs4NSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRlKiBleGVjKQogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNIYXNPd25Qcm9wZXJ0eShFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUo
KS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4odGhpc1ZhbHVlLnRvT2JqZWN0KGV4ZWMpLT5oYXNPd25Qcm9wZXJ0eShleGVjLCBl
eGVjLT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4ZWMpKSkpOworICAgIGF1dG8gcHJvcGVy
dHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtleShleGVjKTsKKyAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odGhpc1Zh
bHVlLnRvT2JqZWN0KGV4ZWMpLT5oYXNPd25Qcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKSk7
CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jSXNQcm90
b3R5cGVPZihFeGVjU3RhdGUqIGV4ZWMpCkBAIC0xMTgsMTMgKzEyMSwxNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0RlZmluZUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMpCiAgICAgaWYgKGdldENhbGxEYXRhKGdldCwgY2FsbERhdGEpID09IENhbGxUeXBlTm9u
ZSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhl
YywgQVNDSUlMaXRlcmFsKCJpbnZhbGlkIGdldHRlciB1c2FnZSIpKSk7CiAKKyAgICBhdXRvIHBy
b3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJvcGVydHlLZXkoZXhlYyk7CisgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworCiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CiAg
ICAgZGVzY3JpcHRvci5zZXRHZXR0ZXIoZ2V0KTsKICAgICBkZXNjcmlwdG9yLnNldEVudW1lcmFi
bGUodHJ1ZSk7CiAgICAgZGVzY3JpcHRvci5zZXRDb25maWd1cmFibGUodHJ1ZSk7CiAKICAgICBi
b29sIHNob3VsZFRocm93ID0gdHJ1ZTsKLSAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZShleGVj
LT52bSgpKS0+ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgZXhlYy0+YXJndW1l
bnQoMCkudG9Qcm9wZXJ0eUtleShleGVjKSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOworICAg
IHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5kZWZpbmVPd25Qcm9wZXJ0eSh0
aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHNob3VsZFRocm93KTsK
IAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC0xNDAs
MTMgKzE0NywxNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVu
Y0RlZmluZVNldHRlcihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgaWYgKGdldENhbGxEYXRhKHNldCwg
Y2FsbERhdGEpID09IENhbGxUeXBlTm9uZSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJpbnZhbGlkIHNldHRlciB1
c2FnZSIpKSk7CiAKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRv
UHJvcGVydHlLZXkoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCiAgICAgUHJvcGVydHlE
ZXNjcmlwdG9yIGRlc2NyaXB0b3I7CiAgICAgZGVzY3JpcHRvci5zZXRTZXR0ZXIoc2V0KTsKICAg
ICBkZXNjcmlwdG9yLnNldEVudW1lcmFibGUodHJ1ZSk7CiAgICAgZGVzY3JpcHRvci5zZXRDb25m
aWd1cmFibGUodHJ1ZSk7CiAKICAgICBib29sIHNob3VsZFRocm93ID0gdHJ1ZTsKLSAgICB0aGlz
T2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+ZGVmaW5lT3duUHJvcGVydHkodGhpc09i
amVjdCwgZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtleShleGVjKSwgZGVzY3Jp
cHRvciwgc2hvdWxkVGhyb3cpOworICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZt
KCkpLT5kZWZpbmVPd25Qcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3IsIHNob3VsZFRocm93KTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiB9CkBAIC0xNTcsOSArMTY4LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jTG9va3VwR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYykKICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvUHJvcGVydHlLZXkoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCiAgICAg
UHJvcGVydHlTbG90IHNsb3QodGhpc09iamVjdCk7Ci0gICAgaWYgKHRoaXNPYmplY3QtPmdldFBy
b3BlcnR5U2xvdChleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4ZWMpLCBz
bG90KQotICAgICAgICAmJiBzbG90LmlzQWNjZXNzb3IoKSkgeworICAgIGlmICh0aGlzT2JqZWN0
LT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSAmJiBzbG90LmlzQWNj
ZXNzb3IoKSkgewogICAgICAgICBHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciA9IHNsb3QuZ2V0
dGVyU2V0dGVyKCk7CiAgICAgICAgIHJldHVybiBnZXR0ZXJTZXR0ZXItPmlzR2V0dGVyTnVsbCgp
ID8gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpIDogSlNWYWx1ZTo6ZW5jb2RlKGdldHRl
clNldHRlci0+Z2V0dGVyKCkpOwogICAgIH0KQEAgLTE3Myw5ICsxODcsMTIgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNMb29rdXBTZXR0ZXIoRXhlY1N0YXRl
KiBleGVjKQogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAorICAgIGF1dG8gcHJvcGVydHlOYW1lID0g
ZXhlYy0+YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtleShleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzT2JqZWN0KTsKLSAgICBpZiAodGhpc09i
amVjdC0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJvcGVydHlL
ZXkoZXhlYyksIHNsb3QpCi0gICAgICAgICYmIHNsb3QuaXNBY2Nlc3NvcigpKSB7CisgICAgaWYg
KHRoaXNPYmplY3QtPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpICYm
IHNsb3QuaXNBY2Nlc3NvcigpKSB7CiAgICAgICAgIEdldHRlclNldHRlciogZ2V0dGVyU2V0dGVy
ID0gc2xvdC5nZXR0ZXJTZXR0ZXIoKTsKICAgICAgICAgcmV0dXJuIGdldHRlclNldHRlci0+aXNT
ZXR0ZXJOdWxsKCkgPyBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkgOiBKU1ZhbHVlOjpl
bmNvZGUoZ2V0dGVyU2V0dGVyLT5zZXR0ZXIoKSk7CiAgICAgfQpAQCAtMTg1LDkgKzIwMiwxMyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0xvb2t1cFNldHRl
cihFeGVjU3RhdGUqIGV4ZWMpCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0
UHJvdG9GdW5jUHJvcGVydHlJc0VudW1lcmFibGUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpT
T2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmlj
dE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gZXhlYy0+YXJn
dW1lbnQoMCkudG9Qcm9wZXJ0eUtleShleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKKyAg
ICBKU09iamVjdCogdGhpc09iamVjdCA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBT
dHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgUHJv
cGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CiAgICAgYm9vbCBlbnVtZXJhYmxlID0gdGhpc09i
amVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3Jp
cHRvcikgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4oZW51bWVyYWJsZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9leGNlcHRpb24taW4tdG8tcHJvcGVydHkta2V5LXNob3VsZC1i
ZS1oYW5kbGVkLWVhcmx5LWluLW9iamVjdC1tZXRob2RzLmpzIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9leGNlcHRpb24taW4tdG8tcHJvcGVydHkta2V5LXNob3VsZC1iZS1o
YW5kbGVkLWVhcmx5LWluLW9iamVjdC1tZXRob2RzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY3Y2MwMWQwNGQ2
NWI4MDRmMmM3OWVhODBmOTYwODExNTEzMTg0Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2V4Y2VwdGlvbi1pbi10by1wcm9wZXJ0eS1rZXkt
c2hvdWxkLWJlLWhhbmRsZWQtZWFybHktaW4tb2JqZWN0LW1ldGhvZHMuanMKQEAgLTAsMCArMSw3
MyBAQAorCit2YXIgcHJvcGVydHlLZXkgPSB7CisgICAgdG9TdHJpbmcoKSB7CisgICAgICAgIHRo
cm93IG5ldyBFcnJvcigicHJvcGVydHlLZXkudG9TdHJpbmcgaXMgY2FsbGVkLiIpOworICAgIH0K
K307CisKK2Z1bmN0aW9uIHNob3VsZFRocm93KGZ1bmMsIG1lc3NhZ2UpIHsKKyAgICB2YXIgZXJy
b3IgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlKSB7
CisgICAgICAgIGVycm9yID0gZTsKKyAgICB9CisgICAgaWYgKCFlcnJvcikKKyAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJub3QgdGhyb3duLiIpOworICAgIGlmIChTdHJpbmcoZXJyb3IpICE9PSBt
ZXNzYWdlKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCBlcnJvcjogIiArIFN0cmluZyhl
cnJvcikpOworfQorCit2YXIgb2JqZWN0ID0ge307CisKK3Nob3VsZFRocm93KGZ1bmN0aW9uICgp
IHsKKyAgICBvYmplY3QuaGFzT3duUHJvcGVydHkocHJvcGVydHlLZXkpOworfSwgIkVycm9yOiBw
cm9wZXJ0eUtleS50b1N0cmluZyBpcyBjYWxsZWQuIik7CisKK3Nob3VsZFRocm93KGZ1bmN0aW9u
ICgpIHsKKyAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobnVsbCwgcHJv
cGVydHlLZXkpOworfSwgIkVycm9yOiBwcm9wZXJ0eUtleS50b1N0cmluZyBpcyBjYWxsZWQuIik7
CisKK3Nob3VsZFRocm93KGZ1bmN0aW9uICgpIHsKKyAgICBPYmplY3QucHJvdG90eXBlLmhhc093
blByb3BlcnR5LmNhbGwobnVsbCwgJ29rJyk7Cit9LCAiVHlwZUVycm9yOiBudWxsIGlzIG5vdCBh
biBvYmplY3QgKGV2YWx1YXRpbmcgJ09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2Fs
bChudWxsLCAnb2snKScpIik7CisKK3Nob3VsZFRocm93KGZ1bmN0aW9uICgpIHsKKyAgICBvYmpl
Y3QucHJvcGVydHlJc0VudW1lcmFibGUocHJvcGVydHlLZXkpOworfSwgIkVycm9yOiBwcm9wZXJ0
eUtleS50b1N0cmluZyBpcyBjYWxsZWQuIik7CisKKy8vIFRvUHJvcGVydHlLZXkgaXMgZmlyc3Qs
IFRvT2JqZWN0IGlzIGZvbGxvd2luZy4KK3Nob3VsZFRocm93KGZ1bmN0aW9uICgpIHsKKyAgICBP
YmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwobnVsbCwgcHJvcGVydHlL
ZXkpOworfSwgIkVycm9yOiBwcm9wZXJ0eUtleS50b1N0cmluZyBpcyBjYWxsZWQuIik7CisKK3No
b3VsZFRocm93KGZ1bmN0aW9uICgpIHsKKyAgICAvLyBUb1Byb3BlcnR5S2V5IGlzIGZpcnN0LCBU
b09iamVjdCBpcyBmb2xsb3dpbmcuCisgICAgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51
bWVyYWJsZS5jYWxsKG51bGwsICdvaycpOworfSwgIlR5cGVFcnJvcjogbnVsbCBpcyBub3QgYW4g
b2JqZWN0IChldmFsdWF0aW5nICdPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxl
LmNhbGwobnVsbCwgJ29rJyknKSIpOworCitzaG91bGRUaHJvdyhmdW5jdGlvbiAoKSB7CisgICAg
b2JqZWN0Ll9fZGVmaW5lR2V0dGVyX18ocHJvcGVydHlLZXksIGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgcmV0dXJuICdORyc7CisgICAgfSk7Cit9LCAiRXJyb3I6IHByb3BlcnR5S2V5LnRvU3RyaW5n
IGlzIGNhbGxlZC4iKTsKKworaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2Jq
ZWN0LCAnJykpCisgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgZGVzY3JpcHRvciIpOworCitzaG91
bGRUaHJvdyhmdW5jdGlvbiAoKSB7CisgICAgb2JqZWN0Ll9fZGVmaW5lU2V0dGVyX18ocHJvcGVy
dHlLZXksIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICdORyc7CisgICAgfSk7Cit9LCAi
RXJyb3I6IHByb3BlcnR5S2V5LnRvU3RyaW5nIGlzIGNhbGxlZC4iKTsKKworaWYgKE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCAnJykpCisgICAgdGhyb3cgbmV3IEVycm9y
KCJiYWQgZGVzY3JpcHRvciIpOworCitzaG91bGRUaHJvdyhmdW5jdGlvbiAoKSB7CisgICAgb2Jq
ZWN0Ll9fbG9va3VwR2V0dGVyX18ocHJvcGVydHlLZXkpOworfSwgIkVycm9yOiBwcm9wZXJ0eUtl
eS50b1N0cmluZyBpcyBjYWxsZWQuIik7CisKK3Nob3VsZFRocm93KGZ1bmN0aW9uICgpIHsKKyAg
ICBvYmplY3QuX19sb29rdXBTZXR0ZXJfXyhwcm9wZXJ0eUtleSk7Cit9LCAiRXJyb3I6IHByb3Bl
cnR5S2V5LnRvU3RyaW5nIGlzIGNhbGxlZC4iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9zdHJlc3MvZXhjZXB0aW9uLWluLXRvLXByb3BlcnR5LWtleS1zaG91bGQt
YmUtaGFuZGxlZC1lYXJseS5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mv
ZXhjZXB0aW9uLWluLXRvLXByb3BlcnR5LWtleS1zaG91bGQtYmUtaGFuZGxlZC1lYXJseS5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5lNTExZDAzYjk1NGViYzBlMzM0NzJmNzJmZDM3MTg0M2RjODkzMzk4Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9leGNlcHRp
b24taW4tdG8tcHJvcGVydHkta2V5LXNob3VsZC1iZS1oYW5kbGVkLWVhcmx5LmpzCkBAIC0wLDAg
KzEsMTM5IEBACisKK3ZhciBwcm9wZXJ0eUtleSA9IHsKKyAgICB0b1N0cmluZygpIHsKKyAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJwcm9wZXJ0eUtleS50b1N0cmluZyBpcyBjYWxsZWQuIik7Cisg
ICAgfQorfTsKKworZnVuY3Rpb24gc2hvdWxkVGhyb3coZnVuYywgbWVzc2FnZSkgeworICAgIHZh
ciBlcnJvciA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgZnVuYygpOworICAgIH0gY2F0Y2gg
KGUpIHsKKyAgICAgICAgZXJyb3IgPSBlOworICAgIH0KKyAgICBpZiAoIWVycm9yKQorICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIm5vdCB0aHJvd24uIik7CisgICAgaWYgKFN0cmluZyhlcnJvcikg
IT09IG1lc3NhZ2UpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIGVycm9yOiAiICsgU3Ry
aW5nKGVycm9yKSk7Cit9CisKKy8vIEdldEJ5VmFsLgorKGZ1bmN0aW9uICgpIHsKKyAgICB2YXIg
Y2FsbGVkID0gbnVsbDsKKyAgICB2YXIgdG9TdHJpbmdDYWxsZWQgPSBmYWxzZTsKKyAgICB2YXIg
cHJvcGVydHkgPSB7CisgICAgICAgIHRvU3RyaW5nKCkgeworICAgICAgICAgICAgdG9TdHJpbmdD
YWxsZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuICJ2YWx1ZSI7CisgICAgICAgIH0KKyAg
ICB9OworICAgIHZhciBvYmplY3QgPSB7CisgICAgICAgIGdldCB2YWx1ZSgpIHsKKyAgICAgICAg
fSwKKyAgICAgICAgc2V0IHZhbHVlKHZhbCkgeworICAgICAgICB9CisgICAgfTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCAnJywgeworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIGNhbGxlZCA9ICJnZXR0ZXIgZm9yICcnIGlzIGNhbGxlZC4iOworICAg
ICAgICB9CisgICAgfSk7CisKKyAgICBmdW5jdGlvbiB0ZXN0KG9iamVjdCwgcHJvcGVydHkpIHsK
KyAgICAgICAgb2JqZWN0W3Byb3BlcnR5XTsKKyAgICB9CisgICAgbm9JbmxpbmUodGVzdCk7CisK
KyAgICBzaG91bGRUaHJvdyhmdW5jdGlvbiAoKSB7IHRlc3Qob2JqZWN0LCBwcm9wZXJ0eUtleSk7
IH0sICJFcnJvcjogcHJvcGVydHlLZXkudG9TdHJpbmcgaXMgY2FsbGVkLiIpOworICAgIGlmIChj
YWxsZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihjYWxsZWQpOworICAgIHRvU3RyaW5nQ2Fs
bGVkID0gZmFsc2U7CisgICAgc2hvdWxkVGhyb3coZnVuY3Rpb24gKCkgeyB0ZXN0KG51bGwsIHBy
b3BlcnR5S2V5KTsgfSwgIlR5cGVFcnJvcjogbnVsbCBpcyBub3QgYW4gb2JqZWN0IChldmFsdWF0
aW5nICdvYmplY3RbcHJvcGVydHldJykiKTsKKyAgICBpZiAodG9TdHJpbmdDYWxsZWQpCisgICAg
ICAgIHRocm93IG5ldyBFcnJvcigidG9TdHJpbmcgaXMgY2FsbGVkLiIpOworfSgpKTsKKworLy8g
R2V0QnlWYWwgREZHLgorKGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgY2FsbGVkID0gbnVsbDsKKyAg
ICB2YXIgdG9TdHJpbmdDYWxsZWQgPSBmYWxzZTsKKyAgICB2YXIgcHJvcGVydHkgPSB7CisgICAg
ICAgIHRvU3RyaW5nKCkgeworICAgICAgICAgICAgdG9TdHJpbmdDYWxsZWQgPSB0cnVlOworICAg
ICAgICAgICAgcmV0dXJuICJ2YWx1ZSI7CisgICAgICAgIH0KKyAgICB9OworICAgIHZhciBvYmpl
Y3QgPSB7CisgICAgICAgIGdldCAiIigpIHsKKyAgICAgICAgICAgIGNhbGxlZCA9ICJnZXR0ZXIg
Zm9yICcnIGlzIGNhbGxlZC4iOworICAgICAgICB9LAorICAgICAgICBzZXQgIiIodmFsKSB7Cisg
ICAgICAgICAgICBjYWxsZWQgPSAic2V0dGVyIGZvciAnJyBpcyBjYWxsZWQuIjsKKyAgICAgICAg
fSwKKworICAgICAgICBnZXQgdmFsdWUoKSB7CisgICAgICAgIH0sCisgICAgICAgIHNldCB2YWx1
ZSh2YWwpIHsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBmdW5jdGlvbiB0ZXN0KG9iamVjdCwg
cHJvcGVydHkpIHsKKyAgICAgICAgb2JqZWN0W3Byb3BlcnR5XTsKKyAgICB9CisgICAgbm9Jbmxp
bmUodGVzdCk7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpCisgICAgICAg
IHRlc3Qob2JqZWN0LCBwcm9wZXJ0eSk7CisKKyAgICBzaG91bGRUaHJvdyhmdW5jdGlvbiAoKSB7
IHRlc3Qob2JqZWN0LCBwcm9wZXJ0eUtleSk7IH0sICJFcnJvcjogcHJvcGVydHlLZXkudG9TdHJp
bmcgaXMgY2FsbGVkLiIpOworICAgIGlmIChjYWxsZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJv
cihjYWxsZWQpOworICAgIHRvU3RyaW5nQ2FsbGVkID0gZmFsc2U7CisgICAgc2hvdWxkVGhyb3co
ZnVuY3Rpb24gKCkgeyB0ZXN0KG51bGwsIHByb3BlcnR5S2V5KTsgfSwgIlR5cGVFcnJvcjogbnVs
bCBpcyBub3QgYW4gb2JqZWN0IChldmFsdWF0aW5nICdvYmplY3RbcHJvcGVydHldJykiKTsKKyAg
ICBpZiAodG9TdHJpbmdDYWxsZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigidG9TdHJpbmcg
aXMgY2FsbGVkLiIpOworfSgpKTsKKworCisvLyBHZXRCeVZhbFN0cmluZy4KKyhmdW5jdGlvbiAo
KSB7CisgICAgdmFyIGNhbGxlZDsKKyAgICB2YXIgdG9TdHJpbmdDYWxsZWQgPSBmYWxzZTsKKyAg
ICB2YXIgcHJvcGVydHkgPSB7CisgICAgICAgIHRvU3RyaW5nKCkgeworICAgICAgICAgICAgdG9T
dHJpbmdDYWxsZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuICJ2YWx1ZSI7CisgICAgICAg
IH0KKyAgICB9OworICAgIGZ1bmN0aW9uIHRlc3QoYXJyYXksIGxlbmd0aCwgcHJvcGVydHkpIHsK
KyAgICAgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpCisgICAgICAgICAgICByZXN1bHQgKz0gYXJyYXlbcHJvcGVydHldOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBub0lubGluZSh0ZXN0KTsKKworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShTdHJpbmcucHJvdG90eXBlLCAiIiwgeworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGNhbGxlZCA9ICJnZXR0ZXIgZm9yICcnIGlzIGNhbGxl
ZC4iOworICAgICAgICB9CisgICAgfSk7CisKKyAgICB2YXIgYXJyYXkgPSBbMSwgMiwgM107Cisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKKyAgICAgICAgdGVzdChhcnJheSwg
YXJyYXkubGVuZ3RoLCAwKTsKKworICAgIHZhciBhcnJheSA9IFsxLCBmYWxzZSwgM107CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKKyAgICAgICAgdGVzdChhcnJheSwgYXJy
YXkubGVuZ3RoLCAxKTsKKworICAgIHRlc3QoImhlbGxvIiwgImhlbGxvIi5sZW5ndGgsIDIpOwor
ICAgIHNob3VsZFRocm93KGZ1bmN0aW9uICgpIHsgdGVzdCgiaGVsbG8iLCAiaGVsbG8iLmxlbmd0
aCwgcHJvcGVydHlLZXkpOyB9LCAiRXJyb3I6IHByb3BlcnR5S2V5LnRvU3RyaW5nIGlzIGNhbGxl
ZC4iKTsKKyAgICBpZiAoY2FsbGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2FsbGVkKTsK
KyAgICB0b1N0cmluZ0NhbGxlZCA9IGZhbHNlOworICAgIHNob3VsZFRocm93KGZ1bmN0aW9uICgp
IHsgdGVzdChudWxsLCAyMCwgcHJvcGVydHlLZXkpOyB9LCAiVHlwZUVycm9yOiBudWxsIGlzIG5v
dCBhbiBvYmplY3QgKG5lYXIgJy4uLmZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpLi4u
JykiKTsKKyAgICBpZiAodG9TdHJpbmdDYWxsZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigi
dG9TdHJpbmcgaXMgY2FsbGVkLiIpOworfSgpKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>