<?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>210729</bug_id>
          
          <creation_ts>2020-04-19 19:30:06 -0700</creation_ts>
          <short_desc>Remove dynamic_cf_cast&lt;&gt;() and replace it with checked_cf_cast&lt;&gt;()</short_desc>
          <delta_ts>2021-02-04 14:05:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=210575</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=221428</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="David Kilzer (:ddkilzer)">ddkilzer</reporter>
          <assigned_to name="David Kilzer (:ddkilzer)">ddkilzer</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1643287</commentid>
    <comment_count>0</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-04-19 19:30:06 -0700</bug_when>
    <thetext>Remove dynamic_cf_cast&lt;&gt;() and replace it with checked_cF_cast&lt;&gt;().

See discussion in Bug 210575, Comment #16: &lt;https://bugs.webkit.org/show_bug.cgi?id=210575#c16&gt;

Always checking for the correct type is the safest option, and it actually wasn&apos;t used in that many places anyway:

Source/WebCore/platform/cf/KeyedDecoderCF.cpp
Source/WebCore/platform/network/cf/NetworkStorageSessionCFNetWin.cpp
Source/WebKit/Shared/mac/WebCoreArgumentCodersMac.mm
Source/WebKit/UIProcess/mac/LegacySessionStateCoding.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643288</commentid>
    <comment_count>1</comment_count>
      <attachid>396936</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-04-19 19:36:19 -0700</bug_when>
    <thetext>Created attachment 396936
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643291</commentid>
    <comment_count>2</comment_count>
      <attachid>396936</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-19 19:47:31 -0700</bug_when>
    <thetext>Comment on attachment 396936
Patch v1

I’m OK with this.

Are there any of these cases where it would be better if the wrong type was silently ignored instead of crashing?

Separately, I’m not sure we should remove dynamic_cf_cast. Some clients might have a reason to use it, just not in these decode functions. It’s the same concept as dynamic_objc_cast and dynamic_cast. I think instead we should consider removing the assertion from it instead of removing it entirely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643296</commentid>
    <comment_count>3</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-04-19 20:34:22 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #2)
&gt; Comment on attachment 396936 [details]
&gt; Patch v1
&gt; 
&gt; I’m OK with this.
&gt; 
&gt; Are there any of these cases where it would be better if the wrong type was
&gt; silently ignored instead of crashing?

I&apos;m not sure I can answer that.

The only reason I could see for not crashing due to an incorrect (and unexpected) type is if some other framework consistently returns the wrong type of object and it has to be worked around so the crash doesn&apos;t occur every time.

Otherwise, getting an unexpected type seems crash-worthy from a security/defensive posture.  It should never happen, so it&apos;s okay to crash when it does because it means something went horribly wrong.

&gt; Separately, I’m not sure we should remove dynamic_cf_cast. Some clients
&gt; might have a reason to use it, just not in these decode functions. It’s the
&gt; same concept as dynamic_objc_cast and dynamic_cast. I think instead we
&gt; should consider removing the assertion from it instead of removing it
&gt; entirely.

I saw the assertion in dynamic_cast&lt;&gt;() as a really useful feature for Debug builds since it would tell you if Release builds were silently dropping the invalid object and returning nullptr.  This is the kind of insight you might want when you can&apos;t figure out why code is failing in Release builds because the invalid type is being replaced with nullptr, but you get immediate feedback about the issue when reproducing in a Debug build.

So in my mind, I&apos;d _like_ dynamic_cast-type functions to assert in Debug builds if it was possible to check for an invalid type.  For CF and NS objects, this is possible, but for C/C++ objects it&apos;s generally not (although maybe RTTI could do it for C++ if that were enabled).  However, I didn&apos;t see this difference in CF/NS vs. C/C++ objects as a reason _not_ to use &quot;dynamic_cast&quot; as the basis for the name.  In fact, I&apos;d see it as a reason to add a Debug assert to check the type to dynamic_objc_cast&lt;&gt;()!

Having said that, I recognize that I&apos;m in the minority here, so I think it&apos;s better to get rid of dynamic_cf_cast&lt;&gt;() entirely and to use checked_cf_cast&lt;&gt;() everywhere so we know when we get an unexpected object type every time it happens (as noted above).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643327</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-19 22:44:08 -0700</bug_when>
    <thetext>This is strange. It’s really not a matter of opinion given that dynamic_cast is built into the language.

We really do have a serious misunderstanding here.

You keep saying *invalid* object. But dynamic_cast is *not* for cases where an object of another type is invalid. It’s for when there is more than one valid type and we are checking for one of the valid types.

That’s why we added checked_cast. It’s for cases where the type has to be a certain one and if it’s not then it’s a programming error or a security vulnerability. It’s much better for those security checks.

But dynamic_cast is not like that. This is not a matter of opinion! It’s a fact of the C++ language design.

You have said that if the object this the wrong type then it is &quot;dropped&quot;, and I don’t know where that idea comes from. If the object has the wrong type, then the cast returns nullptr to indicate that. Nothing is &quot;dropped&quot;.

We should not use &quot;dynamic cast&quot; as terminology for a runtime-checked cast where we know what type something should be and it’s a security or correctness mistake if it’s the wrong type. I think the name checked_cast is good for casts like that, and we should keep using it.

You said something about being in the minority and I don’t think that’s right. I *agree* that we should use checked casts instead of dynamic casts wherever appropriate. That’s good for security.

But we should use a dynamic cast where it is what we want to do; there is no &quot;silently dropping&quot; concern because it will be doing the right thing, not doing the wrong thing silently!

Here’s where this leads us:

&gt;&gt;&gt; I think we should add *checked_objc_cast* and use it to replace any cases of dynamic_objc_cast where we don’t really want a dynamic cast. Where instead we need a runtime-checked type conversion. But please be careful because not every case of dynamic_objc_cast should be replaced by checked_objc_cast.

For a good example of where we must *not* make that kind change, and of why we might need dynamic_cast some times, look in the ObjCObjectGraph.mm source file at functions like typeFromObject.

The reason I want to keep dynamic_cf_cast around is that I would like to be able to use it for things like that.

&gt;&gt;&gt; Also, we should search for CFGetTypeID and consider changing clients to use *either* checked_cf_cast or dynamic_cf_cast, depending on what they are intending to do. This will tie the type check together with the typecast better than what we have today.

But we should be *careful* deploying checked_cf_cast and checked_objc_cast because they will make the code brittle. It’s risky to add release assertions; they can protect us from security bugs, but they can create crashing bugs, too!

An example where dyanamic_cf_cast might be what we want is populateSetting in WebInspectorClientCF.cpp. Another could be in ArgumentCodersCF.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1725789</commentid>
    <comment_count>5</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2021-02-04 14:05:19 -0800</bug_when>
    <thetext>Instead of removing WTF::dynamic_cf_cast&lt;&gt;, we need to make sure existing uses have a nullptr check on the returned value (to handle failures), or to use WTF::checked_cf_cast&lt;&gt; instead.

See:
Bug 221428: WTF::dynamic_cf_cast&lt;&gt; should not assert in Debug builds
&lt;https://bugs.webkit.org/show_bug.cgi?id=221428&gt;

Closing this as WONTFIX (NTBF).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396936</attachid>
            <date>2020-04-19 19:36:19 -0700</date>
            <delta_ts>2021-02-04 14:05:25 -0800</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-210729-20200419193750.patch</filename>
            <type>text/plain</type>
            <size>20721</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMzQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDg2MzMyMjJlYzhmN2Q1MDQ0YjI0YjQ5
YzY4ZjNhM2RlMDgyMzA0N2UuLmM3ZjM4ZGM0ZDIxNzc3NzQ2MWZiZTg4MWY3ODZjNDA4YjJhZGQ3
YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjAtMDQtMTkgIERhdmlkIEtpbHplciAgPGRka2ls
emVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgZHluYW1pY19jZl9jYXN0PD4oKSBhbmQg
cmVwbGFjZSBpdCB3aXRoIGNoZWNrZWRfY2ZfY2FzdDw+KCkKKyAgICAgICAgPGh0dHBzOi8vd2Vi
a2l0Lm9yZy9iLzIxMDcyOT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHd0Zi9jZi9UeXBlQ2FzdHNDRi5oOgorICAgICAgICAoV1RGOjpkeW5hbWlj
X2NmX2Nhc3QpOiBEZWxldGUuCisKIDIwMjAtMDQtMTkgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtp
QGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBFbmFibGUgQmlnSW50CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZDI2YTZkMDg5NzAzM2FmYmMxMGM1MWQxMmQwZDIxMTE5NTYxODUyNy4uYjI5MjIwZWIxNjk5Zjdl
MmYzNDIwMTViZjE4ZjVmNTQ2MDcwYmRkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisy
MDIwLTA0LTE5ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CisKKyAgICAgICAg
UmVtb3ZlIGR5bmFtaWNfY2ZfY2FzdDw+KCkgYW5kIHJlcGxhY2UgaXQgd2l0aCBjaGVja2VkX2Nm
X2Nhc3Q8PigpCisgICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8yMTA3Mjk+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jZi9L
ZXllZERlY29kZXJDRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpLZXllZERlY29kZXJDRjo6S2V5
ZWREZWNvZGVyQ0YpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWREZWNvZGVyQ0Y6OmRlY29kZUJ5
dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OktleWVkRGVjb2RlckNGOjpkZWNvZGVCb29sKToKKyAg
ICAgICAgKFdlYkNvcmU6OktleWVkRGVjb2RlckNGOjpkZWNvZGVJbnQzMik6CisgICAgICAgIChX
ZWJDb3JlOjpLZXllZERlY29kZXJDRjo6ZGVjb2RlSW50NjQpOgorICAgICAgICAoV2ViQ29yZTo6
S2V5ZWREZWNvZGVyQ0Y6OmRlY29kZUZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OktleWVkRGVj
b2RlckNGOjpkZWNvZGVEb3VibGUpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWREZWNvZGVyQ0Y6
OmRlY29kZVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpLZXllZERlY29kZXJDRjo6YmVnaW5P
YmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWREZWNvZGVyQ0Y6OmJlZ2luQXJyYXkpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXRX
aW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llQ3JlYXRlZFRpbWUpOgorCiAyMDIwLTA0
LTE5ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bVEZD
XSBBZGQgY29sdW1uIHNwYW5uaW5nIHN1cHBvcnQgZm9yIGZsZXhpYmxlIHRhYmxlIHdpZHRoCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCmluZGV4IDUxYmI1ZTAwNjVlYjA1MzUwMGI5YTUzOWVmNGQyNDczYjA5OTBhM2EuLjcwNTI1
ZWEyNDIyMjQzNWU0MDMyZDUzNGQyZjk1YzIwMTc1MGZjZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjMgQEAKKzIwMjAtMDQtMTkgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KKwor
ICAgICAgICBSZW1vdmUgZHluYW1pY19jZl9jYXN0PD4oKSBhbmQgcmVwbGFjZSBpdCB3aXRoIGNo
ZWNrZWRfY2ZfY2FzdDw+KCkKKyAgICAgICAgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIxMDcyOT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJl
ZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tOgorICAgICAgICAoSVBDOjpleHRyYWN0
RGljdGlvbmFyeVZhbHVlKToKKyAgICAgICAgKElQQzo6Y3JlYXRlQXJjaGl2ZUxpc3QpOgorICAg
ICAgICAtIFNpbXBsaWZ5IGNvZGUgbm93IHRoYXQgY2hlY2tlZF9jZl9jYXN0PD4oKSB3aWxsIHJl
bGVhc2UgYXNzZXJ0CisgICAgICAgICAgaWYgYW4gdW5leHBlY3RlZCBDRiB0eXBlIGlzIHVzZWQu
CisgICAgICAgICogVUlQcm9jZXNzL21hYy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpkZWNvZGVTZXNzaW9uSGlzdG9yeUVudHJ5KToKKyAgICAgICAgKFdl
YktpdDo6ZGVjb2RlU2Vzc2lvbkhpc3RvcnlFbnRyaWVzKToKKyAgICAgICAgKFdlYktpdDo6ZGVj
b2RlVjBTZXNzaW9uSGlzdG9yeSk6CisgICAgICAgIChXZWJLaXQ6OmRlY29kZVYxU2Vzc2lvbkhp
c3RvcnkpOgorICAgICAgICAoV2ViS2l0OjpkZWNvZGVTZXNzaW9uSGlzdG9yeSk6CisgICAgICAg
IChXZWJLaXQ6OmRlY29kZUxlZ2FjeVNlc3Npb25TdGF0ZSk6CisKIDIwMjAtMDQtMTggIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSBoZWFkZXIgcG9zdHBy
b2Nlc3NpbmcgdmVyc2lvbiBjdXRvZmYgdG8ga2VlcCBBcHBsZSBpbnRlcm5hbCBidWlsZHMgd29y
a2luZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvY2YvVHlwZUNhc3RzQ0YuaCBiL1NvdXJj
ZS9XVEYvd3RmL2NmL1R5cGVDYXN0c0NGLmgKaW5kZXggZTM0ZmQ2ZjM0OTMzZjIyYTNlODkyOTY0
ZTgyZWM2NmY2YzNiMTU3OC4uZWI4NjkwYTlhZTZhZmVjYzFkZjM1NjgyNDFlN2IxZmZmNGE3NTc5
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvY2YvVHlwZUNhc3RzQ0YuaAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9jZi9UeXBlQ2FzdHNDRi5oCkBAIC02MiwxOCArNjIsNiBAQCBXVEZfREVDTEFS
RV9DRl9NVVRBQkxFX1RZUEVfVFJBSVQoQ0ZTdHJpbmcsIENGTXV0YWJsZVN0cmluZyk7CiAKICN1
bmRlZiBXVEZfREVDTEFSRV9DRl9NVVRBQkxFX1RZUEVfVFJBSVQKIAotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gVCBkeW5hbWljX2NmX2Nhc3QoQ0ZUeXBlUmVmIG9iamVjdCkKLXsKLSAgICBpZiAoIW9i
amVjdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTihDRkdldFR5cGVJRChvYmplY3QpID09IENGVHlwZVRyYWl0PFQ+Ojp0eXBl
SUQoKSk7Ci0gICAgaWYgKENGR2V0VHlwZUlEKG9iamVjdCkgIT0gQ0ZUeXBlVHJhaXQ8VD46OnR5
cGVJRCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUPihjb25zdF9jYXN0PENGX0JSSURHRURfVFlQRShpZCkgdm9pZCo+KG9iamVjdCkpOwotfQot
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNoZWNrZWRfY2ZfY2FzdChDRlR5cGVSZWYgb2JqZWN0
KQogewogICAgIGlmICghb2JqZWN0KQpAQCAtODcsNCArNzUsMyBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBUIGNoZWNrZWRfY2ZfY2FzdChDRlR5cGVSZWYgb2JqZWN0KQogfSAvLyBuYW1lc3BhY2Ug
V1RGCiAKIHVzaW5nIFdURjo6Y2hlY2tlZF9jZl9jYXN0OwotdXNpbmcgV1RGOjpkeW5hbWljX2Nm
X2Nhc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9LZXllZERlY29k
ZXJDRi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9LZXllZERlY29kZXJDRi5jcHAK
aW5kZXggN2E0N2Y1NjA4YmJiNmRlOWQzNzczYjE3ZTk4ZTQ3NjRhMjQyMjJjNy4uMmRjZGI5ZTdl
MThlZGIyNzEzMmVjZjgxNTQ5NWExODJkYTM3YWVkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2YvS2V5ZWREZWNvZGVyQ0YuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NmL0tleWVkRGVjb2RlckNGLmNwcApAQCAtNDEsNyArNDEsNyBAQCBLZXllZERlY29k
ZXJDRjo6S2V5ZWREZWNvZGVyQ0YoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCiAg
ICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZVdpdGhCeXRlc05vQ29weShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBkYXRhLCBzaXplLCBrQ0ZBbGxvY2F0b3JOdWxsKSk7CiAgICAgYXV0
byBjZlByb3BlcnR5TGlzdCA9IGFkb3B0Q0YoQ0ZQcm9wZXJ0eUxpc3RDcmVhdGVXaXRoRGF0YShr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCBjZkRhdGEuZ2V0KCksIGtDRlByb3BlcnR5TGlzdEltbXV0YWJs
ZSwgbnVsbHB0ciwgbnVsbHB0cikpOwogCi0gICAgaWYgKGR5bmFtaWNfY2ZfY2FzdDxDRkRpY3Rp
b25hcnlSZWY+KGNmUHJvcGVydHlMaXN0LmdldCgpKSkKKyAgICBpZiAoY2hlY2tlZF9jZl9jYXN0
PENGRGljdGlvbmFyeVJlZj4oY2ZQcm9wZXJ0eUxpc3QuZ2V0KCkpKQogICAgICAgICBtX3Jvb3RE
aWN0aW9uYXJ5ID0gYWRvcHRDRihzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KGNmUHJvcGVy
dHlMaXN0LmxlYWtSZWYoKSkpOwogICAgIGVsc2UKICAgICAgICAgbV9yb290RGljdGlvbmFyeSA9
IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIG51bGxwdHIs
IG51bGxwdHIsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0
aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKQEAgLTU4LDcgKzU4LDcgQEAgS2V5ZWREZWNvZGVyQ0Y6
On5LZXllZERlY29kZXJDRigpCiAKIGJvb2wgS2V5ZWREZWNvZGVyQ0Y6OmRlY29kZUJ5dGVzKGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCB1aW50OF90KiYgYnl0ZXMsIHNpemVfdCYgc2l6ZSkKIHsK
LSAgICBhdXRvIGRhdGEgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZEYXRhUmVmPihDRkRpY3Rpb25hcnlH
ZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygpLmdl
dCgpKSk7CisgICAgYXV0byBkYXRhID0gY2hlY2tlZF9jZl9jYXN0PENGRGF0YVJlZj4oQ0ZEaWN0
aW9uYXJ5R2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3JlYXRlQ0ZTdHJp
bmcoKS5nZXQoKSkpOwogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBA
IC02OSw3ICs2OSw3IEBAIGJvb2wgS2V5ZWREZWNvZGVyQ0Y6OmRlY29kZUJ5dGVzKGNvbnN0IFN0
cmluZyYga2V5LCBjb25zdCB1aW50OF90KiYgYnl0ZXMsIHNpemVfCiAKIGJvb2wgS2V5ZWREZWNv
ZGVyQ0Y6OmRlY29kZUJvb2woY29uc3QgU3RyaW5nJiBrZXksIGJvb2wmIHJlc3VsdCkKIHsKLSAg
ICBhdXRvIGJvb2xlYW4gPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZCb29sZWFuUmVmPihDRkRpY3Rpb25h
cnlHZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygp
LmdldCgpKSk7CisgICAgYXV0byBib29sZWFuID0gY2hlY2tlZF9jZl9jYXN0PENGQm9vbGVhblJl
Zj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3Jl
YXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOwogICAgIGlmICghYm9vbGVhbikKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCkBAIC04OSw3ICs4OSw3IEBAIGJvb2wgS2V5ZWREZWNvZGVyQ0Y6OmRlY29kZVVJ
bnQ2NChjb25zdCBTdHJpbmcmIGtleSwgdWludDY0X3QmIHJlc3VsdCkKIAogYm9vbCBLZXllZERl
Y29kZXJDRjo6ZGVjb2RlSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIGludDMyX3QmIHJlc3VsdCkK
IHsKLSAgICBhdXRvIG51bWJlciA9IGR5bmFtaWNfY2ZfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0
aW9uYXJ5R2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3JlYXRlQ0ZTdHJp
bmcoKS5nZXQoKSkpOworICAgIGF1dG8gbnVtYmVyID0gY2hlY2tlZF9jZl9jYXN0PENGTnVtYmVy
UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5j
cmVhdGVDRlN0cmluZygpLmdldCgpKSk7CiAgICAgaWYgKCFudW1iZXIpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIApAQCAtOTgsNyArOTgsNyBAQCBib29sIEtleWVkRGVjb2RlckNGOjpkZWNvZGVJ
bnQzMihjb25zdCBTdHJpbmcmIGtleSwgaW50MzJfdCYgcmVzdWx0KQogCiBib29sIEtleWVkRGVj
b2RlckNGOjpkZWNvZGVJbnQ2NChjb25zdCBTdHJpbmcmIGtleSwgaW50NjRfdCYgcmVzdWx0KQog
ewotICAgIGF1dG8gbnVtYmVyID0gZHluYW1pY19jZl9jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rp
b25hcnlHZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmlu
ZygpLmdldCgpKSk7CisgICAgYXV0byBudW1iZXIgPSBjaGVja2VkX2NmX2Nhc3Q8Q0ZOdW1iZXJS
ZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNy
ZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKICAgICBpZiAoIW51bWJlcikKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCkBAIC0xMDcsNyArMTA3LDcgQEAgYm9vbCBLZXllZERlY29kZXJDRjo6ZGVjb2Rl
SW50NjQoY29uc3QgU3RyaW5nJiBrZXksIGludDY0X3QmIHJlc3VsdCkKIAogYm9vbCBLZXllZERl
Y29kZXJDRjo6ZGVjb2RlRmxvYXQoY29uc3QgU3RyaW5nJiBrZXksIGZsb2F0JiByZXN1bHQpCiB7
Ci0gICAgYXV0byBudW1iZXIgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlv
bmFyeUdldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNGU3RyaW5n
KCkuZ2V0KCkpKTsKKyAgICBhdXRvIG51bWJlciA9IGNoZWNrZWRfY2ZfY2FzdDxDRk51bWJlclJl
Zj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3Jl
YXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOwogICAgIGlmICghbnVtYmVyKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKQEAgLTExNiw3ICsxMTYsNyBAQCBib29sIEtleWVkRGVjb2RlckNGOjpkZWNvZGVG
bG9hdChjb25zdCBTdHJpbmcmIGtleSwgZmxvYXQmIHJlc3VsdCkKIAogYm9vbCBLZXllZERlY29k
ZXJDRjo6ZGVjb2RlRG91YmxlKGNvbnN0IFN0cmluZyYga2V5LCBkb3VibGUmIHJlc3VsdCkKIHsK
LSAgICBhdXRvIG51bWJlciA9IGR5bmFtaWNfY2ZfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9u
YXJ5R2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3JlYXRlQ0ZTdHJpbmco
KS5nZXQoKSkpOworICAgIGF1dG8gbnVtYmVyID0gY2hlY2tlZF9jZl9jYXN0PENGTnVtYmVyUmVm
PihDRkRpY3Rpb25hcnlHZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVh
dGVDRlN0cmluZygpLmdldCgpKSk7CiAgICAgaWYgKCFudW1iZXIpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIApAQCAtMTI1LDcgKzEyNSw3IEBAIGJvb2wgS2V5ZWREZWNvZGVyQ0Y6OmRlY29kZURv
dWJsZShjb25zdCBTdHJpbmcmIGtleSwgZG91YmxlJiByZXN1bHQpCiAKIGJvb2wgS2V5ZWREZWNv
ZGVyQ0Y6OmRlY29kZVN0cmluZyhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5nJiByZXN1bHQpCiB7
Ci0gICAgYXV0byBzdHJpbmcgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGRGljdGlv
bmFyeUdldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNGU3RyaW5n
KCkuZ2V0KCkpKTsKKyAgICBhdXRvIHN0cmluZyA9IGNoZWNrZWRfY2ZfY2FzdDxDRlN0cmluZ1Jl
Zj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3Jl
YXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOwogICAgIGlmICghc3RyaW5nKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKQEAgLTEzNSw3ICsxMzUsNyBAQCBib29sIEtleWVkRGVjb2RlckNGOjpkZWNvZGVT
dHJpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyYgcmVzdWx0KQogCiBib29sIEtleWVkRGVj
b2RlckNGOjpiZWdpbk9iamVjdChjb25zdCBTdHJpbmcmIGtleSkKIHsKLSAgICBhdXRvIGRpY3Rp
b25hcnkgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkRpY3Rpb25hcnlHZXRW
YWx1ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygpLmdldCgp
KSk7CisgICAgYXV0byBkaWN0aW9uYXJ5ID0gY2hlY2tlZF9jZl9jYXN0PENGRGljdGlvbmFyeVJl
Zj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXkuY3Jl
YXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOwogICAgIGlmICghZGljdGlvbmFyeSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCkBAIC0xNTAsNyArMTUwLDcgQEAgdm9pZCBLZXllZERlY29kZXJDRjo6ZW5k
T2JqZWN0KCkKIAogYm9vbCBLZXllZERlY29kZXJDRjo6YmVnaW5BcnJheShjb25zdCBTdHJpbmcm
IGtleSkKIHsKLSAgICBhdXRvIGFycmF5ID0gZHluYW1pY19jZl9jYXN0PENGQXJyYXlSZWY+KENG
RGljdGlvbmFyeUdldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5LmNyZWF0ZUNG
U3RyaW5nKCkuZ2V0KCkpKTsKKyAgICBhdXRvIGFycmF5ID0gY2hlY2tlZF9jZl9jYXN0PENGQXJy
YXlSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSwga2V5
LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKICAgICBpZiAoIWFycmF5KQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXRXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jZi9OZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldFdpbi5jcHAKaW5kZXgg
ODM2YTJhZGQ5ODBmN2U1MjA3MzI2YzZiMjU4YjRhZjBhNTRhNzhhYy4uZDZmYjA5MWEzZDgwYjU5
NGNhOGNiMTJhOTVjZTFiYmJhZWY1ZWIzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jZi9OZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldFdpbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9OZXR3b3JrU3RvcmFnZVNlc3Npb25D
Rk5ldFdpbi5jcHAKQEAgLTEyMCw3ICsxMjAsNyBAQCBzdGF0aWMgZG91YmxlIGNvb2tpZUNyZWF0
ZWRUaW1lKENGSFRUUENvb2tpZVJlZiBjb29raWUpCiAgICAgUmV0YWluUHRyPENGRGljdGlvbmFy
eVJlZj4gcHJvcHMgPSBhZG9wdENGKENGSFRUUENvb2tpZUNvcHlQcm9wZXJ0aWVzKGNvb2tpZSkp
OwogICAgIGF1dG8gdmFsdWUgPSBDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wcy5nZXQoKSwgc19j
cmVhdGVkQ0YpOwogICAgIAotICAgIGF1dG8gYXNOdW1iZXIgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZO
dW1iZXJSZWY+KHZhbHVlKTsKKyAgICBhdXRvIGFzTnVtYmVyID0gY2hlY2tlZF9jZl9jYXN0PENG
TnVtYmVyUmVmPih2YWx1ZSk7CiAgICAgaWYgKGFzTnVtYmVyKSB7CiAgICAgICAgIGRvdWJsZSBh
c0RvdWJsZTsKICAgICAgICAgaWYgKENGTnVtYmVyR2V0VmFsdWUoYXNOdW1iZXIsIGtDRk51bWJl
ckZsb2F0NjRUeXBlLCAmYXNEb3VibGUpKQpAQCAtMTI4LDcgKzEyOCw3IEBAIHN0YXRpYyBkb3Vi
bGUgY29va2llQ3JlYXRlZFRpbWUoQ0ZIVFRQQ29va2llUmVmIGNvb2tpZSkKICAgICAgICAgcmV0
dXJuIDAuMDsKICAgICB9CiAgICAgCi0gICAgYXV0byBhc1N0cmluZyA9IGR5bmFtaWNfY2ZfY2Fz
dDxDRlN0cmluZ1JlZj4odmFsdWUpOworICAgIGF1dG8gYXNTdHJpbmcgPSBjaGVja2VkX2NmX2Nh
c3Q8Q0ZTdHJpbmdSZWY+KHZhbHVlKTsKICAgICBpZiAoYXNTdHJpbmcpCiAgICAgICAgIHJldHVy
biBjYW5vbmljYWxDb29raWVUaW1lKENGU3RyaW5nR2V0RG91YmxlVmFsdWUoYXNTdHJpbmcpKTsK
ICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1l
bnRDb2RlcnNNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzTWFjLm1tCmluZGV4IGZlZDM3NTRlY2RjYzAzNDRjOTNhODNmZmFkZjZjOTRhMWJhZDI0
ZjMuLjAyOTQyMDZiZGFmZDhkMDJmNmY4YmYxY2VhODliMDRkN2ViZmM4NDQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW0KKysr
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbQpA
QCAtOTIsMjcgKzkyLDIzIEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGljdGlvbmFyeVJl
Zj4gY3JlYXRlU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24oQ0ZJbmRlCiAgICAgcmV0dXJuIGRp
Y3Rpb25hcnk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZT4gYm9vbCBleHRyYWN0
RGljdGlvbmFyeVZhbHVlKENGRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBDRlN0cmluZ1JlZiBr
ZXksIFZhbHVlVHlwZSogcmVzdWx0KQordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlPiB2b2lk
IGV4dHJhY3REaWN0aW9uYXJ5VmFsdWUoQ0ZEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnksIENGU3Ry
aW5nUmVmIGtleSwgVmFsdWVUeXBlKiByZXN1bHQpCiB7Ci0gICAgYXV0byB1bnR5cGVkVmFsdWUg
PSBDRkRpY3Rpb25hcnlHZXRWYWx1ZShkaWN0aW9uYXJ5LCBrZXkpOwotICAgIGF1dG8gdmFsdWUg
PSBkeW5hbWljX2NmX2Nhc3Q8VmFsdWVUeXBlPih1bnR5cGVkVmFsdWUpOwotICAgIGlmICh1bnR5
cGVkVmFsdWUgJiYgIXZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byB2YWx1
ZSA9IGNoZWNrZWRfY2ZfY2FzdDxWYWx1ZVR5cGU+KENGRGljdGlvbmFyeUdldFZhbHVlKGRpY3Rp
b25hcnksIGtleSkpOwogICAgIGlmIChyZXN1bHQpCiAgICAgICAgICpyZXN1bHQgPSB2YWx1ZTsK
LSAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIGJvb2wgY3JlYXRlQXJjaGl2ZUxpc3QoQ0ZE
aWN0aW9uYXJ5UmVmIHJlcHJlc2VudGF0aW9uLCBDRlR5cGVSZWYgdG9rZW5OdWxsLCBDRkluZGV4
KiB2ZXJzaW9uLCBDRlR5cGVSZWYqKiBvYmplY3RzLCBDRkluZGV4KiBvYmplY3RDb3VudCwgQ0ZE
aWN0aW9uYXJ5UmVmKiBwcm90b2NvbFByb3BlcnRpZXMsIENGTnVtYmVyUmVmKiBleHBlY3RlZENv
bnRlbnRMZW5ndGgsIENGU3RyaW5nUmVmKiBtaW1lVHlwZSkKIHsKLSAgICBhdXRvIHZlcnNpb25O
dW1iZXIgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVl
KHJlcHJlc2VudGF0aW9uLCBDRlNUUigidmVyc2lvbiIpKSk7CisgICAgYXV0byB2ZXJzaW9uTnVt
YmVyID0gY2hlY2tlZF9jZl9jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShy
ZXByZXNlbnRhdGlvbiwgQ0ZTVFIoInZlcnNpb24iKSkpOwogICAgIGlmICghdmVyc2lvbk51bWJl
cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFDRk51bWJlckdldFZhbHVlKHZl
cnNpb25OdW1iZXIsIGtDRk51bWJlckNGSW5kZXhUeXBlLCB2ZXJzaW9uKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgYXV0byBhcmNoaXZlTGlzdEFycmF5ID0gZHluYW1pY19jZl9jYXN0
PENGQXJyYXlSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHJlcHJlc2VudGF0aW9uLCBDRlNUUigi
YXJjaGl2ZUxpc3QiKSkpOworICAgIGF1dG8gYXJjaGl2ZUxpc3RBcnJheSA9IGNoZWNrZWRfY2Zf
Y2FzdDxDRkFycmF5UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShyZXByZXNlbnRhdGlvbiwgQ0ZT
VFIoImFyY2hpdmVMaXN0IikpKTsKICAgICBpZiAoIWFyY2hpdmVMaXN0QXJyYXkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIApAQCAtMTI0LDEyICsxMjAsOSBAQCBzdGF0aWMgYm9vbCBjcmVhdGVB
cmNoaXZlTGlzdChDRkRpY3Rpb25hcnlSZWYgcmVwcmVzZW50YXRpb24sIENGVHlwZVJlZiB0b2tl
bk51bAogICAgIGlmIChidWZmZXJTaXplLmhhc092ZXJmbG93ZWQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgaWYgKCFleHRyYWN0RGljdGlvbmFyeVZhbHVlKHJlcHJlc2VudGF0aW9u
LCBDRlNUUigicHJvdG9jb2xQcm9wZXJ0aWVzIiksIHByb3RvY29sUHJvcGVydGllcykpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWV4dHJhY3REaWN0aW9uYXJ5VmFsdWUocmVwcmVz
ZW50YXRpb24sIENGU1RSKCJleHBlY3RlZENvbnRlbnRMZW5ndGgiKSwgZXhwZWN0ZWRDb250ZW50
TGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZXh0cmFjdERpY3Rpb25h
cnlWYWx1ZShyZXByZXNlbnRhdGlvbiwgQ0ZTVFIoIm1pbWVUeXBlIiksIG1pbWVUeXBlKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGV4dHJhY3REaWN0aW9uYXJ5VmFsdWUocmVwcmVzZW50
YXRpb24sIENGU1RSKCJwcm90b2NvbFByb3BlcnRpZXMiKSwgcHJvdG9jb2xQcm9wZXJ0aWVzKTsK
KyAgICBleHRyYWN0RGljdGlvbmFyeVZhbHVlKHJlcHJlc2VudGF0aW9uLCBDRlNUUigiZXhwZWN0
ZWRDb250ZW50TGVuZ3RoIiksIGV4cGVjdGVkQ29udGVudExlbmd0aCk7CisgICAgZXh0cmFjdERp
Y3Rpb25hcnlWYWx1ZShyZXByZXNlbnRhdGlvbiwgQ0ZTVFIoIm1pbWVUeXBlIiksIG1pbWVUeXBl
KTsKIAogICAgICpvYmplY3RDb3VudCA9IGFyY2hpdmVMaXN0QXJyYXlDb3VudDsKICAgICAqb2Jq
ZWN0cyA9IHN0YXRpY19jYXN0PENGVHlwZVJlZio+KG1hbGxvYyhidWZmZXJTaXplLnVuc2FmZUdl
dCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvTGVnYWN5U2Vz
c2lvblN0YXRlQ29kaW5nLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9MZWdhY3lT
ZXNzaW9uU3RhdGVDb2RpbmcuY3BwCmluZGV4IDY2YTNiN2QyMWQwMDEwM2M1YmUyMGI0Y2Y5MTlh
YTY1MjFiYzVjNzEuLmM2ZjA2M2JlMjMwZjk0NmVjNGMyZDNiMTQwYzkzYjVkNjY0ZjM3OTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9MZWdhY3lTZXNzaW9uU3RhdGVD
b2RpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9MZWdhY3lTZXNzaW9u
U3RhdGVDb2RpbmcuY3BwCkBAIC05ODIsMjMgKzk4MiwyMyBAQCBzdGF0aWMgV0FSTl9VTlVTRURf
UkVUVVJOIGJvb2wgZGVjb2RlU2Vzc2lvbkhpc3RvcnlFbnRyeURhdGEoQ0ZEYXRhUmVmIGhpc3Rv
cnlFbgogCiBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlU2Vzc2lvbkhpc3Rv
cnlFbnRyeShDRkRpY3Rpb25hcnlSZWYgZW50cnlEaWN0aW9uYXJ5LCBCYWNrRm9yd2FyZExpc3RJ
dGVtU3RhdGUmIGJhY2tGb3J3YXJkTGlzdEl0ZW1TdGF0ZSkKIHsKLSAgICBhdXRvIHRpdGxlID0g
ZHluYW1pY19jZl9jYXN0PENGU3RyaW5nUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShlbnRyeURp
Y3Rpb25hcnksIHNlc3Npb25IaXN0b3J5RW50cnlUaXRsZUtleSkpOworICAgIGF1dG8gdGl0bGUg
PSBjaGVja2VkX2NmX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGVudHJ5
RGljdGlvbmFyeSwgc2Vzc2lvbkhpc3RvcnlFbnRyeVRpdGxlS2V5KSk7CiAgICAgaWYgKCF0aXRs
ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byB1cmxTdHJpbmcgPSBkeW5hbWlj
X2NmX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGVudHJ5RGljdGlvbmFy
eSwgc2Vzc2lvbkhpc3RvcnlFbnRyeVVSTEtleSkpOworICAgIGF1dG8gdXJsU3RyaW5nID0gY2hl
Y2tlZF9jZl9jYXN0PENGU3RyaW5nUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShlbnRyeURpY3Rp
b25hcnksIHNlc3Npb25IaXN0b3J5RW50cnlVUkxLZXkpKTsKICAgICBpZiAoIXVybFN0cmluZykK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBvcmlnaW5hbFVSTFN0cmluZyA9IGR5
bmFtaWNfY2ZfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZW50cnlEaWN0
aW9uYXJ5LCBzZXNzaW9uSGlzdG9yeUVudHJ5T3JpZ2luYWxVUkxLZXkpKTsKKyAgICBhdXRvIG9y
aWdpbmFsVVJMU3RyaW5nID0gY2hlY2tlZF9jZl9jYXN0PENGU3RyaW5nUmVmPihDRkRpY3Rpb25h
cnlHZXRWYWx1ZShlbnRyeURpY3Rpb25hcnksIHNlc3Npb25IaXN0b3J5RW50cnlPcmlnaW5hbFVS
TEtleSkpOwogICAgIGlmICghb3JpZ2luYWxVUkxTdHJpbmcpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGF1dG8gaGlzdG9yeUVudHJ5RGF0YSA9IGR5bmFtaWNfY2ZfY2FzdDxDRkRhdGFS
ZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGVudHJ5RGljdGlvbmFyeSwgc2Vzc2lvbkhpc3RvcnlF
bnRyeURhdGFLZXkpKTsKKyAgICBhdXRvIGhpc3RvcnlFbnRyeURhdGEgPSBjaGVja2VkX2NmX2Nh
c3Q8Q0ZEYXRhUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShlbnRyeURpY3Rpb25hcnksIHNlc3Np
b25IaXN0b3J5RW50cnlEYXRhS2V5KSk7CiAgICAgaWYgKCFoaXN0b3J5RW50cnlEYXRhKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIHJhd1Nob3VsZE9wZW5FeHRlcm5hbFVSTHNQ
b2xpY3kgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVl
KGVudHJ5RGljdGlvbmFyeSwgc2Vzc2lvbkhpc3RvcnlFbnRyeVNob3VsZE9wZW5FeHRlcm5hbFVS
THNQb2xpY3lLZXkpKTsKKyAgICBhdXRvIHJhd1Nob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kg
PSBjaGVja2VkX2NmX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGVudHJ5
RGljdGlvbmFyeSwgc2Vzc2lvbkhpc3RvcnlFbnRyeVNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xp
Y3lLZXkpKTsKICAgICBXZWJDb3JlOjpTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5IHNob3Vs
ZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3k7CiAgICAgaWYgKHJhd1Nob3VsZE9wZW5FeHRlcm5hbFVS
THNQb2xpY3kpIHsKICAgICAgICAgdWludDY0X3QgdmFsdWU7CkBAIC0xMDIxLDcgKzEwMjEsNyBA
QCBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlU2Vzc2lvbkhpc3RvcnlFbnRy
eShDRkRpY3Rpb25hcnlSZWYgZW50cnlEaQogc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29s
IGRlY29kZVNlc3Npb25IaXN0b3J5RW50cmllcyhDRkFycmF5UmVmIGVudHJpZXNBcnJheSwgVmVj
dG9yPEJhY2tGb3J3YXJkTGlzdEl0ZW1TdGF0ZT4mIGVudHJpZXMpCiB7CiAgICAgZm9yIChDRklu
ZGV4IGkgPSAwLCBzaXplID0gQ0ZBcnJheUdldENvdW50KGVudHJpZXNBcnJheSk7IGkgPCBzaXpl
OyArK2kpIHsKLSAgICAgICAgYXV0byBlbnRyeURpY3Rpb25hcnkgPSBkeW5hbWljX2NmX2Nhc3Q8
Q0ZEaWN0aW9uYXJ5UmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGVudHJpZXNBcnJheSwgaSkp
OworICAgICAgICBhdXRvIGVudHJ5RGljdGlvbmFyeSA9IGNoZWNrZWRfY2ZfY2FzdDxDRkRpY3Rp
b25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoZW50cmllc0FycmF5LCBpKSk7CiAgICAg
ICAgIGlmICghZW50cnlEaWN0aW9uYXJ5KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBA
IC0xMDM3LDcgKzEwMzcsNyBAQCBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2Rl
U2Vzc2lvbkhpc3RvcnlFbnRyaWVzKENGQXJyYXlSZWYgZW50cmllc0FycgogCiBzdGF0aWMgV0FS
Tl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlVjBTZXNzaW9uSGlzdG9yeShDRkRpY3Rpb25hcnlS
ZWYgc2Vzc2lvbkhpc3RvcnlEaWN0aW9uYXJ5LCBCYWNrRm9yd2FyZExpc3RTdGF0ZSYgYmFja0Zv
cndhcmRMaXN0U3RhdGUpCiB7Ci0gICAgYXV0byBjdXJyZW50SW5kZXhOdW1iZXIgPSBkeW5hbWlj
X2NmX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHNlc3Npb25IaXN0b3J5
RGljdGlvbmFyeSwgc2Vzc2lvbkhpc3RvcnlDdXJyZW50SW5kZXhLZXkpKTsKKyAgICBhdXRvIGN1
cnJlbnRJbmRleE51bWJlciA9IGNoZWNrZWRfY2ZfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9u
YXJ5R2V0VmFsdWUoc2Vzc2lvbkhpc3RvcnlEaWN0aW9uYXJ5LCBzZXNzaW9uSGlzdG9yeUN1cnJl
bnRJbmRleEtleSkpOwogICAgIGlmICghY3VycmVudEluZGV4TnVtYmVyKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKQEAgLTEwNDgsNyArMTA0OCw3IEBAIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRV
Uk4gYm9vbCBkZWNvZGVWMFNlc3Npb25IaXN0b3J5KENGRGljdGlvbmFyeVJlZiBzZXNzaW9uSGlz
CiAgICAgaWYgKGN1cnJlbnRJbmRleCA8IC0xKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBhdXRvIGhpc3RvcnlFbnRyaWVzID0gZHluYW1pY19jZl9jYXN0PENGQXJyYXlSZWY+KENGRGlj
dGlvbmFyeUdldFZhbHVlKHNlc3Npb25IaXN0b3J5RGljdGlvbmFyeSwgc2Vzc2lvbkhpc3RvcnlF
bnRyaWVzS2V5KSk7CisgICAgYXV0byBoaXN0b3J5RW50cmllcyA9IGNoZWNrZWRfY2ZfY2FzdDxD
RkFycmF5UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShzZXNzaW9uSGlzdG9yeURpY3Rpb25hcnks
IHNlc3Npb25IaXN0b3J5RW50cmllc0tleSkpOwogICAgIGlmICghaGlzdG9yeUVudHJpZXMpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTA3Myw3ICsxMDczLDcgQEAgc3RhdGljIFdBUk5f
VU5VU0VEX1JFVFVSTiBib29sIGRlY29kZVYwU2Vzc2lvbkhpc3RvcnkoQ0ZEaWN0aW9uYXJ5UmVm
IHNlc3Npb25IaXMKIAogc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZVYxU2Vz
c2lvbkhpc3RvcnkoQ0ZEaWN0aW9uYXJ5UmVmIHNlc3Npb25IaXN0b3J5RGljdGlvbmFyeSwgQmFj
a0ZvcndhcmRMaXN0U3RhdGUmIGJhY2tGb3J3YXJkTGlzdFN0YXRlKQogewotICAgIGF1dG8gY3Vy
cmVudEluZGV4TnVtYmVyID0gZHluYW1pY19jZl9jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25h
cnlHZXRWYWx1ZShzZXNzaW9uSGlzdG9yeURpY3Rpb25hcnksIHNlc3Npb25IaXN0b3J5Q3VycmVu
dEluZGV4S2V5KSk7CisgICAgYXV0byBjdXJyZW50SW5kZXhOdW1iZXIgPSBjaGVja2VkX2NmX2Nh
c3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHNlc3Npb25IaXN0b3J5RGljdGlv
bmFyeSwgc2Vzc2lvbkhpc3RvcnlDdXJyZW50SW5kZXhLZXkpKTsKICAgICBpZiAoIWN1cnJlbnRJ
bmRleE51bWJlcikgewogICAgICAgICAvLyBObyBjdXJyZW50IGluZGV4IG1lYW5zIHRoZSBkaWN0
aW9uYXJ5IHJlcHJlc2VudHMgYW4gZW1wdHkgc2Vzc2lvbi4KICAgICAgICAgYmFja0ZvcndhcmRM
aXN0U3RhdGUuY3VycmVudEluZGV4ID0gV1RGOjpudWxsb3B0OwpAQCAtMTA4OCw3ICsxMDg4LDcg
QEAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZVYxU2Vzc2lvbkhpc3Rvcnko
Q0ZEaWN0aW9uYXJ5UmVmIHNlc3Npb25IaXMKICAgICBpZiAoY3VycmVudEluZGV4IDwgMCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBoaXN0b3J5RW50cmllcyA9IGR5bmFtaWNf
Y2ZfY2FzdDxDRkFycmF5UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShzZXNzaW9uSGlzdG9yeURp
Y3Rpb25hcnksIHNlc3Npb25IaXN0b3J5RW50cmllc0tleSkpOworICAgIGF1dG8gaGlzdG9yeUVu
dHJpZXMgPSBjaGVja2VkX2NmX2Nhc3Q8Q0ZBcnJheVJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUo
c2Vzc2lvbkhpc3RvcnlEaWN0aW9uYXJ5LCBzZXNzaW9uSGlzdG9yeUVudHJpZXNLZXkpKTsKICAg
ICBpZiAoIWhpc3RvcnlFbnRyaWVzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTExMDQs
NyArMTEwNCw3IEBAIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVWMVNlc3Np
b25IaXN0b3J5KENGRGljdGlvbmFyeVJlZiBzZXNzaW9uSGlzCiAKIHN0YXRpYyBXQVJOX1VOVVNF
RF9SRVRVUk4gYm9vbCBkZWNvZGVTZXNzaW9uSGlzdG9yeShDRkRpY3Rpb25hcnlSZWYgYmFja0Zv
cndhcmRMaXN0RGljdGlvbmFyeSwgQmFja0ZvcndhcmRMaXN0U3RhdGUmIGJhY2tGb3J3YXJkTGlz
dFN0YXRlKQogewotICAgIGF1dG8gc2Vzc2lvbkhpc3RvcnlWZXJzaW9uTnVtYmVyID0gZHluYW1p
Y19jZl9jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShiYWNrRm9yd2FyZExp
c3REaWN0aW9uYXJ5LCBzZXNzaW9uSGlzdG9yeVZlcnNpb25LZXkpKTsKKyAgICBhdXRvIHNlc3Np
b25IaXN0b3J5VmVyc2lvbk51bWJlciA9IGNoZWNrZWRfY2ZfY2FzdDxDRk51bWJlclJlZj4oQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUoYmFja0ZvcndhcmRMaXN0RGljdGlvbmFyeSwgc2Vzc2lvbkhpc3Rv
cnlWZXJzaW9uS2V5KSk7CiAgICAgaWYgKCFzZXNzaW9uSGlzdG9yeVZlcnNpb25OdW1iZXIpIHsK
ICAgICAgICAgLy8gVmVyc2lvbiAwIHNlc3Npb24gaGlzdG9yeSBkaWN0aW9uYXJpZXMgZGlkIG5v
dCBjb250YWluIGEgdmVyc2lvbiBudW1iZXIuCiAgICAgICAgIHJldHVybiBkZWNvZGVWMFNlc3Np
b25IaXN0b3J5KGJhY2tGb3J3YXJkTGlzdERpY3Rpb25hcnksIGJhY2tGb3J3YXJkTGlzdFN0YXRl
KTsKQEAgLTExMzEsMjIgKzExMzEsMjIgQEAgYm9vbCBkZWNvZGVMZWdhY3lTZXNzaW9uU3RhdGUo
Y29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBzaXplLCBTZXNzaW9uU3RhdGUmIHMKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byBjZlByb3BlcnR5TGlzdCA9IGFkb3B0Q0YoQ0ZQ
cm9wZXJ0eUxpc3RDcmVhdGVXaXRoRGF0YShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBhZG9wdENGKENG
RGF0YUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBieXRlcyArIHNpemVvZih1aW50MzJfdCks
IHNpemUgLSBzaXplb2YodWludDMyX3QpKSkuZ2V0KCksIGtDRlByb3BlcnR5TGlzdEltbXV0YWJs
ZSwgbnVsbHB0ciwgbnVsbHB0cikpOwotICAgIGF1dG8gc2Vzc2lvblN0YXRlRGljdGlvbmFyeSA9
IGR5bmFtaWNfY2ZfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KGNmUHJvcGVydHlMaXN0LmdldCgpKTsK
KyAgICBhdXRvIHNlc3Npb25TdGF0ZURpY3Rpb25hcnkgPSBjaGVja2VkX2NmX2Nhc3Q8Q0ZEaWN0
aW9uYXJ5UmVmPihjZlByb3BlcnR5TGlzdC5nZXQoKSk7CiAgICAgaWYgKCFzZXNzaW9uU3RhdGVE
aWN0aW9uYXJ5KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoYXV0byBiYWNrRm9y
d2FyZExpc3REaWN0aW9uYXJ5ID0gZHluYW1pY19jZl9jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUoc2Vzc2lvblN0YXRlRGljdGlvbmFyeSwgc2Vzc2lvbkhpc3RvcnlL
ZXkpKSkgeworICAgIGlmIChhdXRvIGJhY2tGb3J3YXJkTGlzdERpY3Rpb25hcnkgPSBjaGVja2Vk
X2NmX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShzZXNzaW9uU3Rh
dGVEaWN0aW9uYXJ5LCBzZXNzaW9uSGlzdG9yeUtleSkpKSB7CiAgICAgICAgIGlmICghZGVjb2Rl
U2Vzc2lvbkhpc3RvcnkoYmFja0ZvcndhcmRMaXN0RGljdGlvbmFyeSwgc2Vzc2lvblN0YXRlLmJh
Y2tGb3J3YXJkTGlzdFN0YXRlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
LSAgICBpZiAoYXV0byBwcm92aXNpb25hbFVSTFN0cmluZyA9IGR5bmFtaWNfY2ZfY2FzdDxDRlN0
cmluZ1JlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoc2Vzc2lvblN0YXRlRGljdGlvbmFyeSwgcHJv
dmlzaW9uYWxVUkxLZXkpKSkgeworICAgIGlmIChhdXRvIHByb3Zpc2lvbmFsVVJMU3RyaW5nID0g
Y2hlY2tlZF9jZl9jYXN0PENGU3RyaW5nUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShzZXNzaW9u
U3RhdGVEaWN0aW9uYXJ5LCBwcm92aXNpb25hbFVSTEtleSkpKSB7CiAgICAgICAgIHNlc3Npb25T
dGF0ZS5wcm92aXNpb25hbFVSTCA9IFVSTChVUkwoKSwgcHJvdmlzaW9uYWxVUkxTdHJpbmcpOwog
ICAgICAgICBpZiAoIXNlc3Npb25TdGF0ZS5wcm92aXNpb25hbFVSTC5pc1ZhbGlkKCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKGF1dG8gcmVuZGVyVHJlZVNp
emUgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHNl
c3Npb25TdGF0ZURpY3Rpb25hcnksIHJlbmRlclRyZWVTaXplS2V5KSkpCisgICAgaWYgKGF1dG8g
cmVuZGVyVHJlZVNpemUgPSBjaGVja2VkX2NmX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFy
eUdldFZhbHVlKHNlc3Npb25TdGF0ZURpY3Rpb25hcnksIHJlbmRlclRyZWVTaXplS2V5KSkpCiAg
ICAgICAgIENGTnVtYmVyR2V0VmFsdWUocmVuZGVyVHJlZVNpemUsIGtDRk51bWJlclNJbnQ2NFR5
cGUsICZzZXNzaW9uU3RhdGUucmVuZGVyVHJlZVNpemUpOwogICAgIGVsc2UKICAgICAgICAgc2Vz
c2lvblN0YXRlLnJlbmRlclRyZWVTaXplID0gMDsK
</data>

          </attachment>
      

    </bug>

</bugzilla>