<?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>164972</bug_id>
          
          <creation_ts>2016-11-18 17:16:50 -0800</creation_ts>
          <short_desc>Fix exception scope verification failures in ArrayConstructor.cpp and ArrayPrototype.cpp</short_desc>
          <delta_ts>2016-11-28 13:27:22 -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>JavaScriptCore</component>
          <version>WebKit Local 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>
          
          <blocked>162351</blocked>
    
    <blocked>165035</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1252970</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-11-18 17:16:50 -0800</bug_when>
    <thetext>Patch coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1252971</commentid>
    <comment_count>1</comment_count>
      <attachid>295228</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-11-18 17:18:51 -0800</bug_when>
    <thetext>Created attachment 295228
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1252975</commentid>
    <comment_count>2</comment_count>
      <attachid>295230</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-11-18 17:24:04 -0800</bug_when>
    <thetext>Created attachment 295230
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253287</commentid>
    <comment_count>3</comment_count>
      <attachid>295230</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-11-21 12:50:29 -0800</bug_when>
    <thetext>Comment on attachment 295230
proposed patch.

New patch with more fixes and returning { } coming soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253288</commentid>
    <comment_count>4</comment_count>
      <attachid>295311</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-11-21 12:56:23 -0800</bug_when>
    <thetext>Created attachment 295311
proposed patch.

Still running tests but preliminary results look good.  Let&apos;s get some EWS testing while we wait.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253289</commentid>
    <comment_count>5</comment_count>
      <attachid>295311</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-11-21 13:32:35 -0800</bug_when>
    <thetext>Comment on attachment 295311
proposed patch.

I think this is ready for a review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253619</commentid>
    <comment_count>6</comment_count>
      <attachid>295311</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-11-24 13:45:24 -0800</bug_when>
    <thetext>Comment on attachment 295311
proposed patch.

It is invalid to replace returning encodedJSValue() with returning { }.  On 32-bit builds, the former is non-zero, while the latter is 0.  Will fix this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253622</commentid>
    <comment_count>7</comment_count>
      <attachid>295419</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-11-24 14:48:36 -0800</bug_when>
    <thetext>Created attachment 295419
proposed patch.

Let&apos;s try this on the EWS first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253623</commentid>
    <comment_count>8</comment_count>
      <attachid>295419</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-11-24 16:18:14 -0800</bug_when>
    <thetext>Comment on attachment 295419
proposed patch.

Tests paas.  Ready for a review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253913</commentid>
    <comment_count>9</comment_count>
      <attachid>295419</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-11-28 12:14:22 -0800</bug_when>
    <thetext>Comment on attachment 295419
proposed patch.

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

r=me

&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:1253
&gt; +    ASSERT(!scope.exception() || !isValid);

I think you want to assert equality here. Otherwise, you don&apos;t check for scope.exception() &amp;&amp; isValid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253955</commentid>
    <comment_count>10</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-11-28 13:12:18 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Comment on attachment 295419 [details]
&gt; proposed patch.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=295419&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:1253
&gt; &gt; +    ASSERT(!scope.exception() || !isValid);
&gt; 
&gt; I think you want to assert equality here. Otherwise, you don&apos;t check for
&gt; scope.exception() &amp;&amp; isValid.

This assertion needs to be as is because it is possible for speciesWatchpointsValid(0 to return false (i.e. isValid is false) without throwing an exception.  The reverse is not true i.e. if an exception was thrown, then isValid must be false.

I confirmed this by running the test JSTests/stress/array-concat-on-frozen-object.js.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253958</commentid>
    <comment_count>11</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-11-28 13:27:22 -0800</bug_when>
    <thetext>Thanks for the review.  Landed in r209011: &lt;http://trac.webkit.org/r209011&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295228</attachid>
            <date>2016-11-18 17:18:51 -0800</date>
            <delta_ts>2016-11-18 17:24:04 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-164972.patch</filename>
            <type>text/plain</type>
            <size>27876</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4OTExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBA
CisyMDE2LTExLTE4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBG
aXggZXhjZXB0aW9uIHNjb3BlIHZlcmlmaWNhdGlvbiBmYWlsdXJlcyBpbiBBcnJheUNvbnN0cnVj
dG9yLmNwcCBhbmQgQXJyYXlQcm90b3R5cGUuY3BwLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0OTcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpjb25zdHJ1Y3RBcnJheVdpdGhTaXplUXVpcmspOgorICAgICAgICAqIHJ1
bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpnZXRQcm9wZXJ0eSk6Cisg
ICAgICAgIChKU0M6OnNwZWNpZXNXYXRjaHBvaW50c1ZhbGlkKToKKyAgICAgICAgKEpTQzo6c3Bl
Y2llc0NvbnN0cnVjdEFycmF5KToKKyAgICAgICAgKEpTQzo6c2hpZnQpOgorICAgICAgICAoSlND
Ojp1bnNoaWZ0KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNUb1N0cmluZyk6CisgICAg
ICAgIChKU0M6OmFycmF5UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpm
YXN0Sm9pbik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jSm9pbik6CisgICAgICAgIChK
U0M6OmFycmF5UHJvdG9GdW5jUG9wKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNQdXNo
KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNSZXZlcnNlKToKKyAgICAgICAgKEpTQzo6
YXJyYXlQcm90b0Z1bmNTaGlmdCk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU2xpY2Up
OgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NwbGljZSk6CisgICAgICAgIChKU0M6OmFy
cmF5UHJvdG9GdW5jVW5TaGlmdCk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jSW5kZXhP
Zik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jTGFzdEluZGV4T2YpOgorICAgICAgICAo
SlNDOjpjb25jYXRBcHBlbmRPbmUpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvUHJpdmF0ZUZ1
bmNDb25jYXRNZW1jcHkpOgorICAgICAgICAoSlNDOjpBcnJheVByb3RvdHlwZTo6YXR0ZW1wdFRv
SW5pdGlhbGl6ZVNwZWNpZXNXYXRjaHBvaW50KToKKwogMjAxNi0xMS0xOCAgSmVyZW15IEpvbmVz
ICA8amVyZW15akBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHJ1bnRpbWUgZmxhZyB0byBlbmFi
bGUgcG9pbnRlciBsb2NrLiBFbmFibGUgcG9pbnRlciBsb2NrIGZlYXR1cmUgZm9yIG1hYy4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0
b3IuY3BwCShyZXZpc2lvbiAyMDg5MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTIgKzcwLDE1IEBA
IEpTVmFsdWUgY29uc3RydWN0QXJyYXlXaXRoU2l6ZVF1aXJrKEV4ZWMKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBpZiAoIWxlbmd0aC5pc051bWJlcigpKQorICAgIGlmICghbGVuZ3RoLmlzTnVtYmVyKCkp
IHsKKyAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICByZXR1cm4gY29uc3RydWN0QXJy
YXlOZWdhdGl2ZUluZGV4ZWQoZXhlYywgcHJvZmlsZSwgZ2xvYmFsT2JqZWN0LCAmbGVuZ3RoLCAx
LCBuZXdUYXJnZXQpOworICAgIH0KICAgICAKICAgICB1aW50MzJfdCBuID0gbGVuZ3RoLnRvVUlu
dDMyKGV4ZWMpOwogICAgIGlmIChuICE9IGxlbmd0aC50b051bWJlcihleGVjKSkKICAgICAgICAg
cmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMs
IEFTQ0lJTGl0ZXJhbCgiQXJyYXkgc2l6ZSBpcyBub3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRpdmUg
aW50ZWdlci4iKSkpOworICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICByZXR1cm4gY29uc3RydWN0
RW1wdHlBcnJheShleGVjLCBwcm9maWxlLCBnbG9iYWxPYmplY3QsIG4sIG5ld1RhcmdldCk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3Rv
dHlwZS5jcHAJKHJldmlzaW9uIDIwODkwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDYgKzE0OSw5IEBA
IHZvaWQgQXJyYXlQcm90b3R5cGU6OmRlc3Ryb3koSlNDOjpKU0NlbGwKIAogc3RhdGljIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSBnZXRQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBv
YmplY3QsIHVuc2lnbmVkIGluZGV4KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIAogICAgIGlmIChKU1Zh
bHVlIHJlc3VsdCA9IG9iamVjdC0+dHJ5R2V0SW5kZXhRdWlja2x5KGluZGV4KSkKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICAvLyBXZSB3YW50IHRvIHBlcmZvcm0gZ2V0IGFuZCBoYXMgaW4g
dGhlIHNhbWUgb3BlcmF0aW9uLgpAQCAtMTU2LDEwICsxNTksMTUgQEAgc3RhdGljIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZSBnZXRQcm9wZXJ0eQogICAgIC8vIG9ubHkgdGltZSBpdCBpcyBvYnNlcnZh
YmxlIGlzIHdoZW4gd2UgZW5jb3VudGVyIGFuIG9wYXF1ZSBvYmplY3RzIChQcm94eU9iamVjdCBh
bmQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QpCiAgICAgLy8gc29tZXdoZXJlIGluIHRoZSBwcm90
b3R5cGUgY2hhaW4uCiAgICAgUHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBQcm9wZXJ0eVNsb3Q6
OkludGVybmFsTWV0aG9kVHlwZTo6SGFzUHJvcGVydHkpOwotICAgIGlmICghb2JqZWN0LT5nZXRQ
cm9wZXJ0eVNsb3QoZXhlYywgaW5kZXgsIHNsb3QpKQorICAgIGJvb2wgaGFzUHJvcGVydHkgPSBv
YmplY3QtPmdldFByb3BlcnR5U2xvdChleGVjLCBpbmRleCwgc2xvdCk7CisgICAgQVNTRVJUKCFz
Y29wZS5leGNlcHRpb24oKSB8fCAhaGFzUHJvcGVydHkpOworICAgIGlmICghaGFzUHJvcGVydHkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0gICAgaWYgKFVOTElLRUxZKHNsb3QuaXNUYWlu
dGVkQnlPcGFxdWVPYmplY3QoKSkpCisgICAgaWYgKFVOTElLRUxZKHNsb3QuaXNUYWludGVkQnlP
cGFxdWVPYmplY3QoKSkpIHsKKyAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICByZXR1
cm4gb2JqZWN0LT5nZXQoZXhlYywgaW5kZXgpOworICAgIH0KKyAgICBzY29wZS5yZWxlYXNlKCk7
CiAgICAgcmV0dXJuIHNsb3QuZ2V0VmFsdWUoZXhlYywgaW5kZXgpOwogfQogCkBAIC0xODUsMTAg
KzE5MywxNSBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHNldExlbmd0aChFeGVjCiAKIGlu
bGluZSBib29sIHNwZWNpZXNXYXRjaHBvaW50c1ZhbGlkKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIHRoaXNPYmplY3QpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBBcnJheVByb3RvdHlwZSogYXJy
YXlQcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+YXJyYXlQcm90b3R5cGUo
KTsKICAgICBBcnJheVByb3RvdHlwZTo6U3BlY2llc1dhdGNocG9pbnRTdGF0dXMgc3RhdHVzID0g
YXJyYXlQcm90b3R5cGUtPnNwZWNpZXNXYXRjaHBvaW50U3RhdHVzKCk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXR1cyA9PSBBcnJheVByb3RvdHlwZTo6U3BlY2llc1dhdGNocG9pbnRTdGF0dXM6OlVu
aW5pdGlhbGl6ZWQpKQorICAgIGlmIChVTkxJS0VMWShzdGF0dXMgPT0gQXJyYXlQcm90b3R5cGU6
OlNwZWNpZXNXYXRjaHBvaW50U3RhdHVzOjpVbmluaXRpYWxpemVkKSkgewogICAgICAgICBzdGF0
dXMgPSBhcnJheVByb3RvdHlwZS0+YXR0ZW1wdFRvSW5pdGlhbGl6ZVNwZWNpZXNXYXRjaHBvaW50
KGV4ZWMpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CisgICAg
fQogICAgIEFTU0VSVChzdGF0dXMgIT0gQXJyYXlQcm90b3R5cGU6OlNwZWNpZXNXYXRjaHBvaW50
U3RhdHVzOjpVbmluaXRpYWxpemVkKTsKICAgICByZXR1cm4gIXRoaXNPYmplY3QtPmhhc0N1c3Rv
bVByb3BlcnRpZXMoKQogICAgICAgICAmJiBhcnJheVByb3RvdHlwZSA9PSB0aGlzT2JqZWN0LT5n
ZXRQcm90b3R5cGVEaXJlY3QoKQpAQCAtMjEyLDEwICsyMjUsMTQgQEAgc3RhdGljIEFMV0FZU19J
TkxJTkUgc3RkOjpwYWlyPFNwZWNpZXNDbwogCiAgICAgLy8gRUNNQSA5LjQuMi4zOiBodHRwczov
L3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGUKICAgICBKU1Zh
bHVlIGNvbnN0cnVjdG9yID0ganNVbmRlZmluZWQoKTsKLSAgICBpZiAoTElLRUxZKGlzQXJyYXko
ZXhlYywgdGhpc09iamVjdCkpKSB7CisgICAgYm9vbCB0aGlzSXNBcnJheSA9IGlzQXJyYXkoZXhl
YywgdGhpc09iamVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZXhjZXB0aW9u
UmVzdWx0KCkpOworICAgIGlmIChMSUtFTFkodGhpc0lzQXJyYXkpKSB7CiAgICAgICAgIC8vIEZh
c3QgcGF0aCBpbiB0aGUgbm9ybWFsIGNhc2Ugd2hlcmUgdGhlIHVzZXIgaGFzIG5vdCBzZXQgYW4g
b3duIGNvbnN0cnVjdG9yIGFuZCB0aGUgQXJyYXkucHJvdG90eXBlLmNvbnN0cnVjdG9yIGlzIG5v
cm1hbC4KICAgICAgICAgLy8gV2UgbmVlZCBwcm90b3R5cGUgY2hlY2sgZm9yIHN1YmNsYXNzZXMg
b2YgQXJyYXksIHdoaWNoIGFyZSBBcnJheSBvYmplY3RzIGJ1dCBoYXZlIGEgZGlmZmVyZW50IHBy
b3RvdHlwZSBieSBkZWZhdWx0LgotICAgICAgICBpZiAoTElLRUxZKHNwZWNpZXNXYXRjaHBvaW50
c1ZhbGlkKGV4ZWMsIHRoaXNPYmplY3QpKSkKKyAgICAgICAgYm9vbCBpc1ZhbGlkID0gc3BlY2ll
c1dhdGNocG9pbnRzVmFsaWQoZXhlYywgdGhpc09iamVjdCk7CisgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGV4Y2VwdGlvblJlc3VsdCgpKTsKKyAgICAgICAgaWYgKExJS0VMWShp
c1ZhbGlkKSkKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihTcGVjaWVzQ29uc3Ry
dWN0UmVzdWx0OjpGYXN0UGF0aCwgbnVsbHB0cik7CiAKICAgICAgICAgY29uc3RydWN0b3IgPSB0
aGlzT2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yKTsK
QEAgLTI5NCwxNyArMzExLDI0IEBAIHZvaWQgc2hpZnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogdGgKICAgICBmb3IgKHVuc2lnbmVkIGsgPSBoZWFkZXI7IGsgPCBsZW5ndGggLSBjdXJyZW50
Q291bnQ7ICsraykgewogICAgICAgICB1bnNpZ25lZCBmcm9tID0gayArIGN1cnJlbnRDb3VudDsK
ICAgICAgICAgdW5zaWduZWQgdG8gPSBrICsgcmVzdWx0Q291bnQ7Ci0gICAgICAgIGlmIChKU1Zh
bHVlIHZhbHVlID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgZnJvbSkpIHsKLSAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBmcm9tKTsKKyAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKyAgICAgICAgaWYgKHZhbHVlKSB7CiAgICAg
ICAgICAgICB0aGlzT2JqLT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIHRvLCB2YWx1ZSwgdHJ1ZSk7
CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwotICAgICAg
ICB9IGVsc2UgaWYgKCF0aGlzT2JqLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJ
bmRleCh0aGlzT2JqLCBleGVjLCB0bykpIHsKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4
ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoVW5hYmxlVG9EZWxldGVQcm9wZXJ0eUVycm9yKSk7Ci0g
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBib29sIHN1
Y2Nlc3MgPSB0aGlzT2JqLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0
aGlzT2JqLCBleGVjLCB0byk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB2b2lkKCkpOworICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAg
dGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbChVbmFibGVUb0RlbGV0ZVBy
b3BlcnR5RXJyb3IpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CiAgICAgZm9yICh1bnNpZ25lZCBrID0gbGVuZ3RoOyBrID4gbGVuZ3Ro
IC0gY291bnQ7IC0taykgewotICAgICAgICBpZiAoIXRoaXNPYmotPm1ldGhvZFRhYmxlKHZtKS0+
ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmosIGV4ZWMsIGsgLSAxKSkgeworICAgICAgICBi
b29sIHN1Y2Nlc3MgPSB0aGlzT2JqLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJ
bmRleCh0aGlzT2JqLCBleGVjLCBrIC0gMSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHZvaWQoKSk7CisgICAgICAgIGlmICghc3VjY2VzcykgewogICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbChVbmFibGVUb0RlbGV0ZVByb3Bl
cnR5RXJyb3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMzMxLDIxICsz
NTUsMzAgQEAgdm9pZCB1bnNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIAogCiAgICAg
aWYgKGlzSlNBcnJheSh0aGlzT2JqKSkgewogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJy
YXkodGhpc09iaik7Ci0gICAgICAgIGlmIChhcnJheS0+bGVuZ3RoKCkgPT0gbGVuZ3RoICYmIGFy
cmF5LT51bnNoaWZ0Q291bnQ8c2hpZnRDb3VudE1vZGU+KGV4ZWMsIGhlYWRlciwgY291bnQpKQot
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoYXJyYXktPmxlbmd0aCgpID09IGxlbmd0
aCkgeworICAgICAgICAgICAgYm9vbCBoYW5kbGVkID0gYXJyYXktPnVuc2hpZnRDb3VudDxzaGlm
dENvdW50TW9kZT4oZXhlYywgaGVhZGVyLCBjb3VudCk7CisgICAgICAgICAgICBBU1NFUlQoIXNj
b3BlLmV4Y2VwdGlvbigpIHx8IGhhbmRsZWQpOworICAgICAgICAgICAgaWYgKGhhbmRsZWQpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQogCiAgICAgZm9yICh1bnNp
Z25lZCBrID0gbGVuZ3RoIC0gY3VycmVudENvdW50OyBrID4gaGVhZGVyOyAtLWspIHsKICAgICAg
ICAgdW5zaWduZWQgZnJvbSA9IGsgKyBjdXJyZW50Q291bnQgLSAxOwogICAgICAgICB1bnNpZ25l
ZCB0byA9IGsgKyByZXN1bHRDb3VudCAtIDE7Ci0gICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0g
Z2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgZnJvbSkpIHsKLSAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBnZXRQ
cm9wZXJ0eShleGVjLCB0aGlzT2JqLCBmcm9tKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgdm9pZCgpKTsKKyAgICAgICAgaWYgKHZhbHVlKSB7CiAgICAgICAgICAgICB0aGlz
T2JqLT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIHRvLCB2YWx1ZSwgdHJ1ZSk7Ci0gICAgICAgIH0g
ZWxzZSBpZiAoIXRoaXNPYmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4
KHRoaXNPYmosIGV4ZWMsIHRvKSkgewotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywg
c2NvcGUsIEFTQ0lJTGl0ZXJhbChVbmFibGVUb0RlbGV0ZVByb3BlcnR5RXJyb3IpKTsKLSAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZv
aWQoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSB0aGlz
T2JqLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqLCBleGVj
LCB0byk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwor
ICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJy
b3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbChVbmFibGVUb0RlbGV0ZVByb3BlcnR5RXJyb3Ip
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICB9CiB9CiAKQEAg
LTM3OCw4ICs0MTEsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3Rv
RgogICAgIH0KIAogICAgIC8vIDQuIFJldHVybiB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtb
Q2FsbF1dIGludGVybmFsIG1ldGhvZCBvZiBmdW5jIHByb3ZpZGluZyBhcnJheSBhcyB0aGUgdGhp
cyB2YWx1ZSBhbmQgYW4gZW1wdHkgYXJndW1lbnRzIGxpc3QuCi0gICAgaWYgKCFpc0pTQXJyYXko
dGhpc09iamVjdCkgfHwgY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Okhvc3QgfHwgY2FsbERhdGEubmF0
aXZlLmZ1bmN0aW9uICE9IGFycmF5UHJvdG9GdW5jSm9pbikKKyAgICBpZiAoIWlzSlNBcnJheSh0
aGlzT2JqZWN0KSB8fCBjYWxsVHlwZSAhPSBDYWxsVHlwZTo6SG9zdCB8fCBjYWxsRGF0YS5uYXRp
dmUuZnVuY3Rpb24gIT0gYXJyYXlQcm90b0Z1bmNKb2luKSB7CisgICAgICAgIHNjb3BlLnJlbGVh
c2UoKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsKGV4ZWMsIGZ1bmN0aW9u
LCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNPYmplY3QsIGV4ZWMtPmVtcHR5TGlzdCgpKSk7Cisg
ICAgfQogCiAgICAgQVNTRVJUKGlzSlNBcnJheSh0aGlzVmFsdWUpKTsKICAgICBKU0FycmF5KiB0
aGlzQXJyYXkgPSBhc0FycmF5KHRoaXNWYWx1ZSk7CkBAIC0zODcsNiArNDIyLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHRoaXNBcnJheS0+bGVuZ3RoKCk7CiAKICAgICBTdHJpbmdSZWN1cnNpb25DaGVja2VyIGNoZWNr
ZXIoZXhlYywgdGhpc0FycmF5KTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8IGNo
ZWNrZXIuZWFybHlSZXR1cm5WYWx1ZSgpKTsKICAgICBpZiAoSlNWYWx1ZSBlYXJseVJldHVyblZh
bHVlID0gY2hlY2tlci5lYXJseVJldHVyblZhbHVlKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoZWFybHlSZXR1cm5WYWx1ZSk7CiAKQEAgLTQwMyw2ICs0MzksNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIH0KIAorICAgIHNjb3BlLnJlbGVh
c2UoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpvaW5lci5qb2luKCpleGVjKSk7CiB9
CiAKQEAgLTQxOSw2ICs0NTYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5
UHJvdG9GCiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAKICAgICBTdHJpbmdSZWN1cnNpb25DaGVja2VyIGNoZWNrZXIoZXhlYywgdGhpc09iamVjdCk7
CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCBjaGVja2VyLmVhcmx5UmV0dXJuVmFs
dWUoKSk7CiAgICAgaWYgKEpTVmFsdWUgZWFybHlSZXR1cm5WYWx1ZSA9IGNoZWNrZXIuZWFybHlS
ZXR1cm5WYWx1ZSgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGVhcmx5UmV0dXJu
VmFsdWUpOwogCkBAIC00NjQsNiArNTAyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhcnJheVByb3RvRgogICAgIH0KICNlbmRpZiAvLyAhRU5BQkxFKElOVEwpCiAKKyAgICBzY29w
ZS5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdHJpbmdKb2luZXIuam9p
bigqZXhlYykpOwogfQogCkBAIC01ODEsNiArNjIwLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGZhc3RKb2luKEV4ZWNTdGF0ZQogICAgICAgICAgICAgICAgIGpvaW5lci5hcHBlbmRFbXB0eVN0
cmluZygpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIHNjb3BlLnJlbGVhc2Uo
KTsKICAgICAgICAgcmV0dXJuIGpvaW5lci5qb2luKHN0YXRlKTsKICAgICB9CiAgICAgY2FzZSBB
TExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7CkBAIC02MDQsNiArNjQ0LDcgQEAgc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGZhc3RKb2luKEV4ZWNTdGF0ZQogICAgICAgICAgICAgICAgIGpvaW5lci5h
cHBlbmRFbXB0eVN0cmluZygpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIHNj
b3BlLnJlbGVhc2UoKTsKICAgICAgICAgcmV0dXJuIGpvaW5lci5qb2luKHN0YXRlKTsKICAgICB9
CiAgICAgfQpAQCAtNjE3LDYgKzY1OCw3IEBAIGdlbmVyYWxDYXNlOgogICAgICAgICBqb2luZXIu
YXBwZW5kKHN0YXRlLCBlbGVtZW50KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgSlNWYWx1ZSgpKTsKICAgICB9CisgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIHJldHVybiBq
b2luZXIuam9pbihzdGF0ZSk7CiB9CiAKQEAgLTYyNywxMCArNjY5LDEyIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAogICAgIC8vIDEuIExldCBPIGJlID8gVG9P
YmplY3QodGhpcyB2YWx1ZSkuCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBleGVjLT50aGlz
VmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7CisgICAgQVNT
RVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCAhdGhpc09iamVjdCk7CiAgICAgaWYgKCF0aGlzT2Jq
ZWN0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAgICBT
dHJpbmdSZWN1cnNpb25DaGVja2VyIGNoZWNrZXIoZXhlYywgdGhpc09iamVjdCk7CisgICAgQVNT
RVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCBjaGVja2VyLmVhcmx5UmV0dXJuVmFsdWUoKSk7CiAg
ICAgaWYgKEpTVmFsdWUgZWFybHlSZXR1cm5WYWx1ZSA9IGNoZWNrZXIuZWFybHlSZXR1cm5WYWx1
ZSgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGVhcmx5UmV0dXJuVmFsdWUpOwog
CkBAIC02NDksMTEgKzY5MywxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5
UHJvdG9GCiAgICAgICAgICAgICBKU1N0cmluZyoganNTZXBhcmF0b3IgPSBqc1NpbmdsZUNoYXJh
Y3RlclN0cmluZyhleGVjLCBjb21tYSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAorICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgp
OwogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzbG93Sm9pbigqZXhlYywgdGhp
c09iamVjdCwganNTZXBhcmF0b3IsIGxlbmd0aDY0KSk7CiAgICAgICAgIH0KIAogICAgICAgICB1
bnNpZ25lZCB1bnNpZ25lZExlbmd0aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZW5ndGgpOwog
ICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8ZG91YmxlPih1bnNpZ25lZExlbmd0aCkgPT0gbGVu
Z3RoKTsKKworICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoZmFzdEpvaW4oKmV4ZWMsIHRoaXNPYmplY3QsIHsgJmNvbW1hLCAxIH0sIHVuc2ln
bmVkTGVuZ3RoKSk7CiAgICAgfQogCkBAIC02NjQsNiArNzExLDggQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIGlmIChVTkxJS0VMWShsZW5ndGggPiBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfHwgIWNhblVzZUZhc3RKb2luKHRoaXNP
YmplY3QpKSkgewogICAgICAgICB1aW50NjRfdCBsZW5ndGg2NCA9IHN0YXRpY19jYXN0PHVpbnQ2
NF90PihsZW5ndGgpOwogICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8ZG91YmxlPihsZW5ndGg2
NCkgPT0gbGVuZ3RoKTsKKworICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoc2xvd0pvaW4oKmV4ZWMsIHRoaXNPYmplY3QsIGpzU2VwYXJhdG9y
LCBsZW5ndGg2NCkpOwogICAgIH0KIApAQCAtNjgxLDI4ICs3MzAsMzIgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBl
eGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSk7CiAKLSAgICBpZiAoaXNK
U0FycmF5KHRoaXNWYWx1ZSkpCisgICAgaWYgKGlzSlNBcnJheSh0aGlzVmFsdWUpKSB7CisgICAg
ICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc0Fy
cmF5KHRoaXNWYWx1ZSktPnBvcChleGVjKSk7CisgICAgfQogCiAgICAgSlNPYmplY3QqIHRoaXNP
YmogPSB0aGlzVmFsdWUudG9PYmplY3QoZXhlYyk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRp
b24oKSB8fCAhdGhpc09iaik7CiAgICAgaWYgKCF0aGlzT2JqKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gZ2V0TGVuZ3Ro
KGV4ZWMsIHRoaXNPYmopOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwogCi0gICAgSlNWYWx1ZSByZXN1bHQ7CiAgICAgaWYgKGxlbmd0aCA9PSAwKSB7
CisgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgcHV0TGVuZ3RoKGV4ZWMsIHZtLCB0
aGlzT2JqLCBqc051bWJlcihsZW5ndGgpKTsKLSAgICAgICAgcmVzdWx0ID0ganNVbmRlZmluZWQo
KTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXN1bHQgPSB0aGlzT2JqLT5nZXQoZXhlYywgbGVu
Z3RoIC0gMSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwotICAgICAgICBpZiAoIXRoaXNPYmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJv
cGVydHlCeUluZGV4KHRoaXNPYmosIGV4ZWMsIGxlbmd0aCAtIDEpKSB7Ci0gICAgICAgICAgICB0
aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKFVuYWJsZVRvRGVsZXRlUHJv
cGVydHlFcnJvcikpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKLSAgICAgICAgfQotICAgICAgICBwdXRMZW5ndGgoZXhlYywgdm0sIHRoaXNPYmos
IGpzTnVtYmVyKGxlbmd0aCAtIDEpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICB9CisKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRoaXNPYmotPmdl
dChleGVjLCBsZW5ndGggLSAxKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKyAgICBpZiAoIXRoaXNPYmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRl
UHJvcGVydHlCeUluZGV4KHRoaXNPYmosIGV4ZWMsIGxlbmd0aCAtIDEpKSB7CisgICAgICAgIHRo
cm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoVW5hYmxlVG9EZWxldGVQcm9w
ZXJ0eUVycm9yKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgfQorICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICBwdXRMZW5ndGgoZXhlYywgdm0s
IHRoaXNPYmosIGpzTnVtYmVyKGxlbmd0aCAtIDEpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7CiB9CiAKQEAgLTcxNCwxMSArNzY3LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAogICAgIGlmIChpc0pTQXJyYXkodGhpc1ZhbHVlKSAm
JiBleGVjLT5hcmd1bWVudENvdW50KCkgPT0gMSkgewogICAgICAgICBKU0FycmF5KiBhcnJheSA9
IGFzQXJyYXkodGhpc1ZhbHVlKTsKKyAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICBh
cnJheS0+cHVzaChleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYXJyYXktPmxlbmd0aCgpKSk7CiAgICAgfQog
ICAgIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLnRvT2JqZWN0KGV4ZWMpOwor
ICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgIXRoaXNPYmopOwogICAgIGlmICghdGhp
c09iaikKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHVu
c2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsKQEAgLTczNyw2ICs3OTIs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgfQogICAg
IAogICAgIEpTVmFsdWUgbmV3TGVuZ3RoKHN0YXRpY19jYXN0PGludDY0X3Q+KGxlbmd0aCkgKyBz
dGF0aWNfY2FzdDxpbnQ2NF90PihleGVjLT5hcmd1bWVudENvdW50KCkpKTsKKyAgICBzY29wZS5y
ZWxlYXNlKCk7CiAgICAgcHV0TGVuZ3RoKGV4ZWMsIHZtLCB0aGlzT2JqLCBuZXdMZW5ndGgpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobmV3TGVuZ3RoKTsKIH0KQEAgLTc0Nyw2ICs4MDMs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNPYmplY3QqIHRoaXNPYmpl
Y3QgPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3Qo
ZXhlYyk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCAhdGhpc09iamVjdCk7CiAg
ICAgaWYgKCF0aGlzT2JqZWN0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSk7CiAKQEAgLTgxMiw4ICs4NjksMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhcnJheVByb3RvRgogICAgICAgICB9IGVsc2UgaWYgKCF0aGlzT2JqZWN0LT5tZXRob2RUYWJs
ZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBsb3dlcikpIHsK
ICAgICAgICAgICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbChVbmFibGVUb0RlbGV0ZVByb3Bl
cnR5RXJyb3IpKTsKKyAgICAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgfQorICAgICAgICBBU1NF
UlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgICAgICBpZiAobG93ZXJFeGlzdHMpIHsKICAg
ICAgICAgICAgIHRoaXNPYmplY3QtPnB1dEJ5SW5kZXhJbmxpbmUoZXhlYywgdXBwZXIsIGxvd2Vy
VmFsdWUsIHRydWUpOwpAQCAtODIxLDggKzg4MCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXNPYmplY3QtPm1ldGhv
ZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIHVwcGVy
KSkgewogICAgICAgICAgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgICAg
ICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKFVuYWJsZVRvRGVsZXRl
UHJvcGVydHlFcnJvcikpOworICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgICAgICB9CisgICAgICAg
IEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIH0KICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRoaXNPYmplY3QpOwogfQpAQCAtODMyLDIxICs4OTMsMjQgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiB0
aGlzT2JqID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2Jq
ZWN0KGV4ZWMpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgIXRoaXNPYmopOwog
ICAgIGlmICghdGhpc09iaikKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAotICAgIEpT
VmFsdWUgcmVzdWx0OwogICAgIGlmIChsZW5ndGggPT0gMCkgeworICAgICAgICBzY29wZS5yZWxl
YXNlKCk7CiAgICAgICAgIHB1dExlbmd0aChleGVjLCB2bSwgdGhpc09iaiwganNOdW1iZXIobGVu
Z3RoKSk7Ci0gICAgICAgIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgcmVzdWx0ID0gdGhpc09iai0+Z2V0SW5kZXgoZXhlYywgMCk7Ci0gICAgICAgIHNoaWZ0
PEpTQXJyYXk6OlNoaWZ0Q291bnRGb3JTaGlmdD4oZXhlYywgdGhpc09iaiwgMCwgMSwgMCwgbGVu
Z3RoKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7Ci0gICAgICAgIHB1dExlbmd0aChleGVjLCB2bSwgdGhpc09iaiwganNOdW1iZXIobGVuZ3Ro
IC0gMSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIH0KKworICAgIEpTVmFsdWUgcmVzdWx0ID0gdGhpc09iai0+Z2V0SW5kZXgoZXhlYywgMCk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAg
c2hpZnQ8SlNBcnJheTo6U2hpZnRDb3VudEZvclNoaWZ0PihleGVjLCB0aGlzT2JqLCAwLCAxLCAw
LCBsZW5ndGgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOworICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICBwdXRMZW5ndGgoZXhlYywgdm0sIHRoaXNP
YmosIGpzTnVtYmVyKGxlbmd0aCAtIDEpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CiB9CiAKQEAgLTg1NiwyMCArOTIwLDI2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYXJyYXlQcm90b0YKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVjdCogdGhpc09iaiA9IGV4
ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsK
KyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8ICF0aGlzT2JqKTsKICAgICBpZiAoIXRo
aXNPYmopCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICB1
bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICB1bnNpZ25lZCBiZWdp
biA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMCwgbGVuZ3RoKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICB1
bnNpZ25lZCBlbmQgPSBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGV4ZWMsIDEs
IGxlbmd0aCwgbGVuZ3RoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKIAogICAgIHN0ZDo6cGFpcjxTcGVjaWVzQ29uc3RydWN0UmVzdWx0LCBKU09i
amVjdCo+IHNwZWNpZXNSZXN1bHQgPSBzcGVjaWVzQ29uc3RydWN0QXJyYXkoZXhlYywgdGhpc09i
aiwgZW5kIC0gYmVnaW4pOwogICAgIC8vIFdlIGNhbiBvbmx5IGdldCBhbiBleGNlcHRpb24gaWYg
d2UgY2FsbCBzb21lIHVzZXIgZnVuY3Rpb24uCisgICAgQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9u
KCkgPT0gKHNwZWNpZXNSZXN1bHQuZmlyc3QgPT0gU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RXhj
ZXB0aW9uKSk7CiAgICAgaWYgKFVOTElLRUxZKHNwZWNpZXNSZXN1bHQuZmlyc3QgPT0gU3BlY2ll
c0NvbnN0cnVjdFJlc3VsdDo6RXhjZXB0aW9uKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKIAotICAgIGlmIChMSUtFTFkoc3BlY2llc1Jlc3VsdC5maXJz
dCA9PSBTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpGYXN0UGF0aCAmJiBpc0pTQXJyYXkodGhpc09i
aikgJiYgbGVuZ3RoID09IGdldExlbmd0aChleGVjLCB0aGlzT2JqKSkpIHsKKyAgICBib29sIG9r
VG9Eb0Zhc3RQYXRoID0gc3BlY2llc1Jlc3VsdC5maXJzdCA9PSBTcGVjaWVzQ29uc3RydWN0UmVz
dWx0OjpGYXN0UGF0aCAmJiBpc0pTQXJyYXkodGhpc09iaikgJiYgbGVuZ3RoID09IGdldExlbmd0
aChleGVjLCB0aGlzT2JqKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKKyAgICBpZiAoTElLRUxZKG9rVG9Eb0Zhc3RQYXRoKSkgewogICAgICAgICBp
ZiAoSlNBcnJheSogcmVzdWx0ID0gYXNBcnJheSh0aGlzT2JqKS0+ZmFzdFNsaWNlKCpleGVjLCBi
ZWdpbiwgZW5kIC0gYmVnaW4pKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOwogICAgIH0KQEAgLTg4Niw4ICs5NTYsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRgogICAgIGZvciAodW5zaWduZWQgayA9IGJlZ2luOyBrIDwgZW5k
OyBrKyssIG4rKykgewogICAgICAgICBKU1ZhbHVlIHYgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlz
T2JqLCBrKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7Ci0gICAgICAgIGlmICh2KQorICAgICAgICBpZiAodikgewogICAgICAgICAgICAgcmVz
dWx0LT5wdXREaXJlY3RJbmRleChleGVjLCBuLCB2LCAwLCBQdXREaXJlY3RJbmRleFNob3VsZFRo
cm93KTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgICAgICB9CiAgICAgfQogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICBzZXRM
ZW5ndGgoZXhlYywgdm0sIHJlc3VsdCwgbik7CkBAIC05MDIsMTUgKzk3NCwxNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSBleGVjLT50aGlz
VmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7CisgICAgQVNT
RVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCAhdGhpc09iaik7CiAgICAgaWYgKCF0aGlzT2JqKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgICAgIHJldHVy
biBlbmNvZGVkSlNWYWx1ZSgpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVj
LCB0aGlzT2JqKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKIAogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKSB7CiAgICAgICAgIHN0ZDo6
cGFpcjxTcGVjaWVzQ29uc3RydWN0UmVzdWx0LCBKU09iamVjdCo+IHNwZWNpZXNSZXN1bHQgPSBz
cGVjaWVzQ29uc3RydWN0QXJyYXkoZXhlYywgdGhpc09iaiwgMCk7CisgICAgICAgIEFTU0VSVCgh
IXNjb3BlLmV4Y2VwdGlvbigpID09IChzcGVjaWVzUmVzdWx0LmZpcnN0ID09IFNwZWNpZXNDb25z
dHJ1Y3RSZXN1bHQ6OkV4Y2VwdGlvbikpOwogICAgICAgICBpZiAoc3BlY2llc1Jlc3VsdC5maXJz
dCA9PSBTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpFeGNlcHRpb24pCi0gICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgcmV0dXJuIGVu
Y29kZWRKU1ZhbHVlKCk7CiAKICAgICAgICAgSlNPYmplY3QqIHJlc3VsdDsKICAgICAgICAgaWYg
KHNwZWNpZXNSZXN1bHQuZmlyc3QgPT0gU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6Q3JlYXRlZE9i
amVjdCkKQEAgLTkyOCwxMCArMTAwMiwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GCiAgICAgfQogCiAgICAgdW5zaWduZWQgYWN0dWFsU3RhcnQgPSBhcmd1bWVu
dENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGV4ZWMsIDAsIGxlbmd0aCk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICB1bnNpZ25lZCBh
Y3R1YWxEZWxldGVDb3VudCA9IGxlbmd0aCAtIGFjdHVhbFN0YXJ0OwogICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgPiAxKSB7CiAgICAgICAgIGRvdWJsZSBkZWxldGVDb3VudCA9IGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50ZWdlcihleGVjKTsKKyAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAgIGlmIChkZWxldGVD
b3VudCA8IDApCiAgICAgICAgICAgICBhY3R1YWxEZWxldGVDb3VudCA9IDA7CiAgICAgICAgIGVs
c2UgaWYgKGRlbGV0ZUNvdW50ID4gbGVuZ3RoIC0gYWN0dWFsU3RhcnQpCkBAIC05NDEsMTEgKzEw
MTcsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIH0K
IAogICAgIHN0ZDo6cGFpcjxTcGVjaWVzQ29uc3RydWN0UmVzdWx0LCBKU09iamVjdCo+IHNwZWNp
ZXNSZXN1bHQgPSBzcGVjaWVzQ29uc3RydWN0QXJyYXkoZXhlYywgdGhpc09iaiwgYWN0dWFsRGVs
ZXRlQ291bnQpOworICAgIEFTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09IChzcGVjaWVzUmVz
dWx0LmZpcnN0ID09IFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkV4Y2VwdGlvbikpOwogICAgIGlm
IChzcGVjaWVzUmVzdWx0LmZpcnN0ID09IFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkV4Y2VwdGlv
bikKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAg
IEpTT2JqZWN0KiByZXN1bHQgPSBudWxscHRyOwotICAgIGlmIChzcGVjaWVzUmVzdWx0LmZpcnN0
ID09IFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkZhc3RQYXRoICYmIGlzSlNBcnJheSh0aGlzT2Jq
KSAmJiBsZW5ndGggPT0gZ2V0TGVuZ3RoKGV4ZWMsIHRoaXNPYmopKQorICAgIGJvb2wgb2tUb0Rv
RmFzdFBhdGggPSBzcGVjaWVzUmVzdWx0LmZpcnN0ID09IFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6
OkZhc3RQYXRoICYmIGlzSlNBcnJheSh0aGlzT2JqKSAmJiBsZW5ndGggPT0gZ2V0TGVuZ3RoKGV4
ZWMsIHRoaXNPYmopOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgIGlmIChMSUtFTFkob2tUb0RvRmFzdFBhdGgpKQogICAgICAgICByZXN1bHQg
PSBhc0FycmF5KHRoaXNPYmopLT5mYXN0U2xpY2UoKmV4ZWMsIGFjdHVhbFN0YXJ0LCBhY3R1YWxE
ZWxldGVDb3VudCk7CiAKICAgICBpZiAoIXJlc3VsdCkgewpAQCAtMTAwMCw2ICsxMDc5LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIC8vIDE1LjQuNC4x
MwogCiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhl
YywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRp
b24oKSB8fCAhdGhpc09iaik7CiAgICAgaWYgKCF0aGlzT2JqKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gZ2V0TGVuZ3Ro
KGV4ZWMsIHRoaXNPYmopOwpAQCAtMTAxNSw2ICsxMDk1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICB9CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJl
cihsZW5ndGggKyBuckFyZ3MpOworICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICBwdXRMZW5ndGgo
ZXhlYywgdm0sIHRoaXNPYmosIHJlc3VsdCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOwogfQpAQCAtMTAyNiw2ICsxMTA3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheVByb3RvRgogCiAgICAgLy8gMTUuNC40LjE0CiAgICAgSlNPYmplY3QqIHRoaXNP
YmogPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3Qo
ZXhlYyk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCAhdGhpc09iaik7CiAgICAg
aWYgKCF0aGlzT2JqKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7
CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gZ2V0TGVuZ3RoKGV4ZWMsIHRoaXNPYmopOwpAQCAtMTA1
MywxMCArMTEzNSwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9G
CiAKICAgICAvLyAxNS40LjQuMTUKICAgICBKU09iamVjdCogdGhpc09iaiA9IGV4ZWMtPnRoaXNW
YWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKKyAgICBBU1NF
UlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8ICF0aGlzT2JqKTsKICAgICBpZiAoIXRoaXNPYmopCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICB1bnNpZ25lZCBs
ZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7Ci0gICAgaWYgKCFsZW5ndGgpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSB8fCAhbGVuZ3RoKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKC0xKSk7CiAKICAgICB1bnNpZ25lZCBpbmRleCA9
IGxlbmd0aCAtIDE7CkBAIC0xMTMxLDEzICsxMjE0LDE2IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBjb25jYXRBcHBlbmRPbmUoRXgKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpKTsKIAotICAg
IGlmICghcmVzdWx0LT5hcHBlbmRNZW1jcHkoZXhlYywgdm0sIDAsIGZpcnN0KSkgewotICAgICAg
ICBpZiAoIW1vdmVFbGVtZW50cyhleGVjLCB2bSwgcmVzdWx0LCAwLCBmaXJzdCwgZmlyc3RBcnJh
eVNpemUpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIGJv
b2wgc3VjY2VzcyA9IHJlc3VsdC0+YXBwZW5kTWVtY3B5KGV4ZWMsIHZtLCAwLCBmaXJzdCk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgaWYg
KCFzdWNjZXNzKSB7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IG1vdmVFbGVtZW50cyhleGVjLCB2
bSwgcmVzdWx0LCAwLCBmaXJzdCwgZmlyc3RBcnJheVNpemUpOworICAgICAgICBBU1NFUlQoIXNj
b3BlLmV4Y2VwdGlvbigpID09IHN1Y2Nlc3MpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7Ci0gICAgICAgIH0KICAg
ICB9CiAKKyAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChl
eGVjLCBmaXJzdEFycmF5U2l6ZSwgc2Vjb25kKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CiAKQEAgLTExNTksMTIgKzEyNDUsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvUAogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVs
bCgpKTsKIAogICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgdGhlIHNwZWNpZXMgY29uc3RydWN0b3Ig
aGVyZSBzaW5jZSBjaGVja2luZyBpdCBpbiB0aGUgSlMgd3JhcHBlciBpcyB0b28gZXhwZW5zaXZl
IGZvciB0aGUgbm9uLW9wdGltaXppbmcgdGllcnMuCi0gICAgaWYgKFVOTElLRUxZKCFzcGVjaWVz
V2F0Y2hwb2ludHNWYWxpZChleGVjLCBmaXJzdEFycmF5KSkpCisgICAgYm9vbCBpc1ZhbGlkID0g
c3BlY2llc1dhdGNocG9pbnRzVmFsaWQoZXhlYywgZmlyc3RBcnJheSk7CisgICAgQVNTRVJUKCFz
Y29wZS5leGNlcHRpb24oKSB8fCAhaXNWYWxpZCk7CisgICAgaWYgKFVOTElLRUxZKCFpc1ZhbGlk
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAKICAgICBKU1Zh
bHVlIHNlY29uZCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOwotICAgIGlmICghaXNKU0Fy
cmF5KHNlY29uZCkpCisgICAgaWYgKCFpc0pTQXJyYXkoc2Vjb25kKSkgeworICAgICAgICBzY29w
ZS5yZWxlYXNlKCk7CiAgICAgICAgIHJldHVybiBjb25jYXRBcHBlbmRPbmUoZXhlYywgdm0sIGZp
cnN0QXJyYXksIHNlY29uZCk7CisgICAgfQogCiAgICAgSlNBcnJheSogc2Vjb25kQXJyYXkgPSBq
c0Nhc3Q8SlNBcnJheSo+KHNlY29uZCk7CiAgICAgCkBAIC0xMTgwLDExICsxMjcwLDE0IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b1AKICAgICAgICAgSlNBcnJheSog
cmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCBmaXJzdEFycmF5U2l6
ZSArIHNlY29uZEFycmF5U2l6ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwogCi0gICAgICAgIGlmICghbW92ZUVsZW1lbnRzKGV4ZWMsIHZt
LCByZXN1bHQsIDAsIGZpcnN0QXJyYXksIGZpcnN0QXJyYXlTaXplKQotICAgICAgICAgICAgfHwg
IW1vdmVFbGVtZW50cyhleGVjLCB2bSwgcmVzdWx0LCBmaXJzdEFycmF5U2l6ZSwgc2Vjb25kQXJy
YXksIHNlY29uZEFycmF5U2l6ZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChzY29wZS5leGNlcHRp
b24oKSk7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IG1vdmVFbGVtZW50cyhleGVjLCB2bSwgcmVz
dWx0LCAwLCBmaXJzdEFycmF5LCBmaXJzdEFycmF5U2l6ZSk7CisgICAgICAgIEFTU0VSVCghc2Nv
cGUuZXhjZXB0aW9uKCkgPT0gc3VjY2Vzcyk7CisgICAgICAgIGlmICghc3VjY2VzcykKKyAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICAgICAgc3VjY2Vz
cyA9IG1vdmVFbGVtZW50cyhleGVjLCB2bSwgcmVzdWx0LCBmaXJzdEFycmF5U2l6ZSwgc2Vjb25k
QXJyYXksIHNlY29uZEFycmF5U2l6ZSk7CisgICAgICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9u
KCkgPT0gc3VjY2Vzcyk7CisgICAgICAgIGlmICghc3VjY2VzcykKICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKLSAgICAgICAgfQogCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9CkBAIC0xMjUwLDYgKzEzNDMsNyBAQCBB
cnJheVByb3RvdHlwZTo6U3BlY2llc1dhdGNocG9pbnRTdGF0dXMgCiAgICAgQVNTRVJUKG1fc3Bl
Y2llc1dhdGNocG9pbnRTdGF0dXMgPT0gU3BlY2llc1dhdGNocG9pbnRTdGF0dXM6OlVuaW5pdGlh
bGl6ZWQpOwogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxv
ZygiQXR0ZW1wdGluZyB0byBpbml0aWFsaXplIEFycmF5IHNwZWNpZXMgd2F0Y2hwb2ludHMgZm9y
IEFycmF5LnByb3RvdHlwZTogIiwgcG9pbnRlckR1bXAodGhpcyksICIgd2l0aCBzdHJ1Y3R1cmU6
ICIsIHBvaW50ZXJEdW1wKHRoaXMtPnN0cnVjdHVyZSgpKSwgIlxuYW5kIEFycmF5OiAiLCBwb2lu
dGVyRHVtcCh0aGlzLT5nbG9iYWxPYmplY3QoKS0+YXJyYXlDb25zdHJ1Y3RvcigpKSwgIiB3aXRo
IHN0cnVjdHVyZTogIiwgcG9pbnRlckR1bXAodGhpcy0+Z2xvYmFsT2JqZWN0KCktPmFycmF5Q29u
c3RydWN0b3IoKS0+c3RydWN0dXJlKCkpLCAiXG4iKTsKQEAgLTEyNjcsNyArMTM2MSw4IEBAIEFy
cmF5UHJvdG90eXBlOjpTcGVjaWVzV2F0Y2hwb2ludFN0YXR1cyAKIAogICAgIFByb3BlcnR5U2xv
dCBjb25zdHJ1Y3RvclNsb3QodGhpcywgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6
OlZNSW5xdWlyeSk7CiAgICAgSlNWYWx1ZSh0aGlzKS5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1l
cy0+Y29uc3RydWN0b3IsIGNvbnN0cnVjdG9yU2xvdCk7Ci0gICAgaWYgKGNvbnN0cnVjdG9yU2xv
dC5zbG90QmFzZSgpICE9IHRoaXMKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
CisgICAgICAgIHx8IGNvbnN0cnVjdG9yU2xvdC5zbG90QmFzZSgpICE9IHRoaXMKICAgICAgICAg
fHwgIWNvbnN0cnVjdG9yU2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkKICAgICAgICAgfHwgY29uc3Ry
dWN0b3JTbG90LmdldFZhbHVlKGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yKSAh
PSBhcnJheUNvbnN0cnVjdG9yKQogICAgICAgICByZXR1cm4gbV9zcGVjaWVzV2F0Y2hwb2ludFN0
YXR1cyA9IFNwZWNpZXNXYXRjaHBvaW50U3RhdHVzOjpGaXJlZDsKQEAgLTEyNzgsNyArMTM3Myw4
IEBAIEFycmF5UHJvdG90eXBlOjpTcGVjaWVzV2F0Y2hwb2ludFN0YXR1cyAKIAogICAgIFByb3Bl
cnR5U2xvdCBzcGVjaWVzU2xvdChhcnJheUNvbnN0cnVjdG9yLCBQcm9wZXJ0eVNsb3Q6OkludGVy
bmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5KTsKICAgICBKU1ZhbHVlKGFycmF5Q29uc3RydWN0b3Ip
LmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5zcGVjaWVzU3ltYm9sLCBzcGVjaWVzU2xvdCk7
Ci0gICAgaWYgKHNwZWNpZXNTbG90LnNsb3RCYXNlKCkgIT0gYXJyYXlDb25zdHJ1Y3RvcgorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkKKyAgICAgICAgfHwgc3BlY2llc1Nsb3Qu
c2xvdEJhc2UoKSAhPSBhcnJheUNvbnN0cnVjdG9yCiAgICAgICAgIHx8ICFzcGVjaWVzU2xvdC5p
c0NhY2hlYWJsZUdldHRlcigpCiAgICAgICAgIHx8IHNwZWNpZXNTbG90LmdldHRlclNldHRlcigp
ICE9IGdsb2JhbE9iamVjdC0+c3BlY2llc0dldHRlclNldHRlcigpKQogICAgICAgICByZXR1cm4g
bV9zcGVjaWVzV2F0Y2hwb2ludFN0YXR1cyA9IFNwZWNpZXNXYXRjaHBvaW50U3RhdHVzOjpGaXJl
ZDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295230</attachid>
            <date>2016-11-18 17:24:04 -0800</date>
            <delta_ts>2016-11-21 12:50:29 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-164972.patch</filename>
            <type>text/plain</type>
            <size>28586</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4OTExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBA
CisyMDE2LTExLTE4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBG
aXggZXhjZXB0aW9uIHNjb3BlIHZlcmlmaWNhdGlvbiBmYWlsdXJlcyBpbiBBcnJheUNvbnN0cnVj
dG9yLmNwcCBhbmQgQXJyYXlQcm90b3R5cGUuY3BwLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0OTcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpjb25zdHJ1Y3RBcnJheVdpdGhTaXplUXVpcmspOgorICAgICAgICAqIHJ1
bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpnZXRQcm9wZXJ0eSk6Cisg
ICAgICAgIChKU0M6OnNwZWNpZXNXYXRjaHBvaW50c1ZhbGlkKToKKyAgICAgICAgKEpTQzo6c3Bl
Y2llc0NvbnN0cnVjdEFycmF5KToKKyAgICAgICAgKEpTQzo6c2hpZnQpOgorICAgICAgICAoSlND
Ojp1bnNoaWZ0KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNUb1N0cmluZyk6CisgICAg
ICAgIChKU0M6OmFycmF5UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpm
YXN0Sm9pbik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jSm9pbik6CisgICAgICAgIChK
U0M6OmFycmF5UHJvdG9GdW5jUG9wKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNQdXNo
KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNSZXZlcnNlKToKKyAgICAgICAgKEpTQzo6
YXJyYXlQcm90b0Z1bmNTaGlmdCk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU2xpY2Up
OgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NwbGljZSk6CisgICAgICAgIChKU0M6OmFy
cmF5UHJvdG9GdW5jVW5TaGlmdCk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jSW5kZXhP
Zik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jTGFzdEluZGV4T2YpOgorICAgICAgICAo
SlNDOjpjb25jYXRBcHBlbmRPbmUpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvUHJpdmF0ZUZ1
bmNDb25jYXRNZW1jcHkpOgorICAgICAgICAoSlNDOjpBcnJheVByb3RvdHlwZTo6YXR0ZW1wdFRv
SW5pdGlhbGl6ZVNwZWNpZXNXYXRjaHBvaW50KToKKwogMjAxNi0xMS0xOCAgSmVyZW15IEpvbmVz
ICA8amVyZW15akBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHJ1bnRpbWUgZmxhZyB0byBlbmFi
bGUgcG9pbnRlciBsb2NrLiBFbmFibGUgcG9pbnRlciBsb2NrIGZlYXR1cmUgZm9yIG1hYy4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0
b3IuY3BwCShyZXZpc2lvbiAyMDg5MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTIgKzcwLDE1IEBA
IEpTVmFsdWUgY29uc3RydWN0QXJyYXlXaXRoU2l6ZVF1aXJrKEV4ZWMKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBpZiAoIWxlbmd0aC5pc051bWJlcigpKQorICAgIGlmICghbGVuZ3RoLmlzTnVtYmVyKCkp
IHsKKyAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICByZXR1cm4gY29uc3RydWN0QXJy
YXlOZWdhdGl2ZUluZGV4ZWQoZXhlYywgcHJvZmlsZSwgZ2xvYmFsT2JqZWN0LCAmbGVuZ3RoLCAx
LCBuZXdUYXJnZXQpOworICAgIH0KICAgICAKICAgICB1aW50MzJfdCBuID0gbGVuZ3RoLnRvVUlu
dDMyKGV4ZWMpOwogICAgIGlmIChuICE9IGxlbmd0aC50b051bWJlcihleGVjKSkKICAgICAgICAg
cmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMs
IEFTQ0lJTGl0ZXJhbCgiQXJyYXkgc2l6ZSBpcyBub3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRpdmUg
aW50ZWdlci4iKSkpOworICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICByZXR1cm4gY29uc3RydWN0
RW1wdHlBcnJheShleGVjLCBwcm9maWxlLCBnbG9iYWxPYmplY3QsIG4sIG5ld1RhcmdldCk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3Rv
dHlwZS5jcHAJKHJldmlzaW9uIDIwODkwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDYgKzE0OSw5IEBA
IHZvaWQgQXJyYXlQcm90b3R5cGU6OmRlc3Ryb3koSlNDOjpKU0NlbGwKIAogc3RhdGljIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSBnZXRQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBv
YmplY3QsIHVuc2lnbmVkIGluZGV4KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIAogICAgIGlmIChKU1Zh
bHVlIHJlc3VsdCA9IG9iamVjdC0+dHJ5R2V0SW5kZXhRdWlja2x5KGluZGV4KSkKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICAvLyBXZSB3YW50IHRvIHBlcmZvcm0gZ2V0IGFuZCBoYXMgaW4g
dGhlIHNhbWUgb3BlcmF0aW9uLgpAQCAtMTU2LDEwICsxNTksMTUgQEAgc3RhdGljIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZSBnZXRQcm9wZXJ0eQogICAgIC8vIG9ubHkgdGltZSBpdCBpcyBvYnNlcnZh
YmxlIGlzIHdoZW4gd2UgZW5jb3VudGVyIGFuIG9wYXF1ZSBvYmplY3RzIChQcm94eU9iamVjdCBh
bmQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QpCiAgICAgLy8gc29tZXdoZXJlIGluIHRoZSBwcm90
b3R5cGUgY2hhaW4uCiAgICAgUHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBQcm9wZXJ0eVNsb3Q6
OkludGVybmFsTWV0aG9kVHlwZTo6SGFzUHJvcGVydHkpOwotICAgIGlmICghb2JqZWN0LT5nZXRQ
cm9wZXJ0eVNsb3QoZXhlYywgaW5kZXgsIHNsb3QpKQorICAgIGJvb2wgaGFzUHJvcGVydHkgPSBv
YmplY3QtPmdldFByb3BlcnR5U2xvdChleGVjLCBpbmRleCwgc2xvdCk7CisgICAgQVNTRVJUKCFz
Y29wZS5leGNlcHRpb24oKSB8fCAhaGFzUHJvcGVydHkpOworICAgIGlmICghaGFzUHJvcGVydHkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0gICAgaWYgKFVOTElLRUxZKHNsb3QuaXNUYWlu
dGVkQnlPcGFxdWVPYmplY3QoKSkpCisgICAgaWYgKFVOTElLRUxZKHNsb3QuaXNUYWludGVkQnlP
cGFxdWVPYmplY3QoKSkpIHsKKyAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICByZXR1
cm4gb2JqZWN0LT5nZXQoZXhlYywgaW5kZXgpOworICAgIH0KKyAgICBzY29wZS5yZWxlYXNlKCk7
CiAgICAgcmV0dXJuIHNsb3QuZ2V0VmFsdWUoZXhlYywgaW5kZXgpOwogfQogCkBAIC0xODUsMTAg
KzE5MywxNSBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHNldExlbmd0aChFeGVjCiAKIGlu
bGluZSBib29sIHNwZWNpZXNXYXRjaHBvaW50c1ZhbGlkKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIHRoaXNPYmplY3QpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBBcnJheVByb3RvdHlwZSogYXJy
YXlQcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+YXJyYXlQcm90b3R5cGUo
KTsKICAgICBBcnJheVByb3RvdHlwZTo6U3BlY2llc1dhdGNocG9pbnRTdGF0dXMgc3RhdHVzID0g
YXJyYXlQcm90b3R5cGUtPnNwZWNpZXNXYXRjaHBvaW50U3RhdHVzKCk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXR1cyA9PSBBcnJheVByb3RvdHlwZTo6U3BlY2llc1dhdGNocG9pbnRTdGF0dXM6OlVu
aW5pdGlhbGl6ZWQpKQorICAgIGlmIChVTkxJS0VMWShzdGF0dXMgPT0gQXJyYXlQcm90b3R5cGU6
OlNwZWNpZXNXYXRjaHBvaW50U3RhdHVzOjpVbmluaXRpYWxpemVkKSkgewogICAgICAgICBzdGF0
dXMgPSBhcnJheVByb3RvdHlwZS0+YXR0ZW1wdFRvSW5pdGlhbGl6ZVNwZWNpZXNXYXRjaHBvaW50
KGV4ZWMpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CisgICAg
fQogICAgIEFTU0VSVChzdGF0dXMgIT0gQXJyYXlQcm90b3R5cGU6OlNwZWNpZXNXYXRjaHBvaW50
U3RhdHVzOjpVbmluaXRpYWxpemVkKTsKICAgICByZXR1cm4gIXRoaXNPYmplY3QtPmhhc0N1c3Rv
bVByb3BlcnRpZXMoKQogICAgICAgICAmJiBhcnJheVByb3RvdHlwZSA9PSB0aGlzT2JqZWN0LT5n
ZXRQcm90b3R5cGVEaXJlY3QoKQpAQCAtMjEyLDEwICsyMjUsMTQgQEAgc3RhdGljIEFMV0FZU19J
TkxJTkUgc3RkOjpwYWlyPFNwZWNpZXNDbwogCiAgICAgLy8gRUNNQSA5LjQuMi4zOiBodHRwczov
L3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGUKICAgICBKU1Zh
bHVlIGNvbnN0cnVjdG9yID0ganNVbmRlZmluZWQoKTsKLSAgICBpZiAoTElLRUxZKGlzQXJyYXko
ZXhlYywgdGhpc09iamVjdCkpKSB7CisgICAgYm9vbCB0aGlzSXNBcnJheSA9IGlzQXJyYXkoZXhl
YywgdGhpc09iamVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZXhjZXB0aW9u
UmVzdWx0KCkpOworICAgIGlmIChMSUtFTFkodGhpc0lzQXJyYXkpKSB7CiAgICAgICAgIC8vIEZh
c3QgcGF0aCBpbiB0aGUgbm9ybWFsIGNhc2Ugd2hlcmUgdGhlIHVzZXIgaGFzIG5vdCBzZXQgYW4g
b3duIGNvbnN0cnVjdG9yIGFuZCB0aGUgQXJyYXkucHJvdG90eXBlLmNvbnN0cnVjdG9yIGlzIG5v
cm1hbC4KICAgICAgICAgLy8gV2UgbmVlZCBwcm90b3R5cGUgY2hlY2sgZm9yIHN1YmNsYXNzZXMg
b2YgQXJyYXksIHdoaWNoIGFyZSBBcnJheSBvYmplY3RzIGJ1dCBoYXZlIGEgZGlmZmVyZW50IHBy
b3RvdHlwZSBieSBkZWZhdWx0LgotICAgICAgICBpZiAoTElLRUxZKHNwZWNpZXNXYXRjaHBvaW50
c1ZhbGlkKGV4ZWMsIHRoaXNPYmplY3QpKSkKKyAgICAgICAgYm9vbCBpc1ZhbGlkID0gc3BlY2ll
c1dhdGNocG9pbnRzVmFsaWQoZXhlYywgdGhpc09iamVjdCk7CisgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGV4Y2VwdGlvblJlc3VsdCgpKTsKKyAgICAgICAgaWYgKExJS0VMWShp
c1ZhbGlkKSkKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihTcGVjaWVzQ29uc3Ry
dWN0UmVzdWx0OjpGYXN0UGF0aCwgbnVsbHB0cik7CiAKICAgICAgICAgY29uc3RydWN0b3IgPSB0
aGlzT2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yKTsK
QEAgLTI5NCwxNyArMzExLDI0IEBAIHZvaWQgc2hpZnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogdGgKICAgICBmb3IgKHVuc2lnbmVkIGsgPSBoZWFkZXI7IGsgPCBsZW5ndGggLSBjdXJyZW50
Q291bnQ7ICsraykgewogICAgICAgICB1bnNpZ25lZCBmcm9tID0gayArIGN1cnJlbnRDb3VudDsK
ICAgICAgICAgdW5zaWduZWQgdG8gPSBrICsgcmVzdWx0Q291bnQ7Ci0gICAgICAgIGlmIChKU1Zh
bHVlIHZhbHVlID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgZnJvbSkpIHsKLSAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBmcm9tKTsKKyAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKyAgICAgICAgaWYgKHZhbHVlKSB7CiAgICAg
ICAgICAgICB0aGlzT2JqLT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIHRvLCB2YWx1ZSwgdHJ1ZSk7
CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwotICAgICAg
ICB9IGVsc2UgaWYgKCF0aGlzT2JqLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJ
bmRleCh0aGlzT2JqLCBleGVjLCB0bykpIHsKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4
ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoVW5hYmxlVG9EZWxldGVQcm9wZXJ0eUVycm9yKSk7Ci0g
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBib29sIHN1
Y2Nlc3MgPSB0aGlzT2JqLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0
aGlzT2JqLCBleGVjLCB0byk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB2b2lkKCkpOworICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAg
dGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbChVbmFibGVUb0RlbGV0ZVBy
b3BlcnR5RXJyb3IpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CiAgICAgZm9yICh1bnNpZ25lZCBrID0gbGVuZ3RoOyBrID4gbGVuZ3Ro
IC0gY291bnQ7IC0taykgewotICAgICAgICBpZiAoIXRoaXNPYmotPm1ldGhvZFRhYmxlKHZtKS0+
ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmosIGV4ZWMsIGsgLSAxKSkgeworICAgICAgICBi
b29sIHN1Y2Nlc3MgPSB0aGlzT2JqLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJ
bmRleCh0aGlzT2JqLCBleGVjLCBrIC0gMSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHZvaWQoKSk7CisgICAgICAgIGlmICghc3VjY2VzcykgewogICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbChVbmFibGVUb0RlbGV0ZVByb3Bl
cnR5RXJyb3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMzMxLDIxICsz
NTUsMzAgQEAgdm9pZCB1bnNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIAogCiAgICAg
aWYgKGlzSlNBcnJheSh0aGlzT2JqKSkgewogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJy
YXkodGhpc09iaik7Ci0gICAgICAgIGlmIChhcnJheS0+bGVuZ3RoKCkgPT0gbGVuZ3RoICYmIGFy
cmF5LT51bnNoaWZ0Q291bnQ8c2hpZnRDb3VudE1vZGU+KGV4ZWMsIGhlYWRlciwgY291bnQpKQot
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoYXJyYXktPmxlbmd0aCgpID09IGxlbmd0
aCkgeworICAgICAgICAgICAgYm9vbCBoYW5kbGVkID0gYXJyYXktPnVuc2hpZnRDb3VudDxzaGlm
dENvdW50TW9kZT4oZXhlYywgaGVhZGVyLCBjb3VudCk7CisgICAgICAgICAgICBBU1NFUlQoIXNj
b3BlLmV4Y2VwdGlvbigpIHx8IGhhbmRsZWQpOworICAgICAgICAgICAgaWYgKGhhbmRsZWQpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQogCiAgICAgZm9yICh1bnNp
Z25lZCBrID0gbGVuZ3RoIC0gY3VycmVudENvdW50OyBrID4gaGVhZGVyOyAtLWspIHsKICAgICAg
ICAgdW5zaWduZWQgZnJvbSA9IGsgKyBjdXJyZW50Q291bnQgLSAxOwogICAgICAgICB1bnNpZ25l
ZCB0byA9IGsgKyByZXN1bHRDb3VudCAtIDE7Ci0gICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0g
Z2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgZnJvbSkpIHsKLSAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBnZXRQ
cm9wZXJ0eShleGVjLCB0aGlzT2JqLCBmcm9tKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgdm9pZCgpKTsKKyAgICAgICAgaWYgKHZhbHVlKSB7CiAgICAgICAgICAgICB0aGlz
T2JqLT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIHRvLCB2YWx1ZSwgdHJ1ZSk7Ci0gICAgICAgIH0g
ZWxzZSBpZiAoIXRoaXNPYmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4
KHRoaXNPYmosIGV4ZWMsIHRvKSkgewotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywg
c2NvcGUsIEFTQ0lJTGl0ZXJhbChVbmFibGVUb0RlbGV0ZVByb3BlcnR5RXJyb3IpKTsKLSAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZv
aWQoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSB0aGlz
T2JqLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqLCBleGVj
LCB0byk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwor
ICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJy
b3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbChVbmFibGVUb0RlbGV0ZVByb3BlcnR5RXJyb3Ip
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICB9CiB9CiAKQEAg
LTM3OCw4ICs0MTEsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3Rv
RgogICAgIH0KIAogICAgIC8vIDQuIFJldHVybiB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtb
Q2FsbF1dIGludGVybmFsIG1ldGhvZCBvZiBmdW5jIHByb3ZpZGluZyBhcnJheSBhcyB0aGUgdGhp
cyB2YWx1ZSBhbmQgYW4gZW1wdHkgYXJndW1lbnRzIGxpc3QuCi0gICAgaWYgKCFpc0pTQXJyYXko
dGhpc09iamVjdCkgfHwgY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Okhvc3QgfHwgY2FsbERhdGEubmF0
aXZlLmZ1bmN0aW9uICE9IGFycmF5UHJvdG9GdW5jSm9pbikKKyAgICBpZiAoIWlzSlNBcnJheSh0
aGlzT2JqZWN0KSB8fCBjYWxsVHlwZSAhPSBDYWxsVHlwZTo6SG9zdCB8fCBjYWxsRGF0YS5uYXRp
dmUuZnVuY3Rpb24gIT0gYXJyYXlQcm90b0Z1bmNKb2luKSB7CisgICAgICAgIHNjb3BlLnJlbGVh
c2UoKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsKGV4ZWMsIGZ1bmN0aW9u
LCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNPYmplY3QsIGV4ZWMtPmVtcHR5TGlzdCgpKSk7Cisg
ICAgfQogCiAgICAgQVNTRVJUKGlzSlNBcnJheSh0aGlzVmFsdWUpKTsKICAgICBKU0FycmF5KiB0
aGlzQXJyYXkgPSBhc0FycmF5KHRoaXNWYWx1ZSk7CkBAIC0zODcsNiArNDIyLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHRoaXNBcnJheS0+bGVuZ3RoKCk7CiAKICAgICBTdHJpbmdSZWN1cnNpb25DaGVja2VyIGNoZWNr
ZXIoZXhlYywgdGhpc0FycmF5KTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8IGNo
ZWNrZXIuZWFybHlSZXR1cm5WYWx1ZSgpKTsKICAgICBpZiAoSlNWYWx1ZSBlYXJseVJldHVyblZh
bHVlID0gY2hlY2tlci5lYXJseVJldHVyblZhbHVlKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoZWFybHlSZXR1cm5WYWx1ZSk7CiAKQEAgLTQwMyw2ICs0MzksNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIH0KIAorICAgIHNjb3BlLnJlbGVh
c2UoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpvaW5lci5qb2luKCpleGVjKSk7CiB9
CiAKQEAgLTQxOSw2ICs0NTYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5
UHJvdG9GCiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAKICAgICBTdHJpbmdSZWN1cnNpb25DaGVja2VyIGNoZWNrZXIoZXhlYywgdGhpc09iamVjdCk7
CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCBjaGVja2VyLmVhcmx5UmV0dXJuVmFs
dWUoKSk7CiAgICAgaWYgKEpTVmFsdWUgZWFybHlSZXR1cm5WYWx1ZSA9IGNoZWNrZXIuZWFybHlS
ZXR1cm5WYWx1ZSgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGVhcmx5UmV0dXJu
VmFsdWUpOwogCkBAIC00NjQsNiArNTAyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhcnJheVByb3RvRgogICAgIH0KICNlbmRpZiAvLyAhRU5BQkxFKElOVEwpCiAKKyAgICBzY29w
ZS5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdHJpbmdKb2luZXIuam9p
bigqZXhlYykpOwogfQogCkBAIC01ODEsNiArNjIwLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGZhc3RKb2luKEV4ZWNTdGF0ZQogICAgICAgICAgICAgICAgIGpvaW5lci5hcHBlbmRFbXB0eVN0
cmluZygpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIHNjb3BlLnJlbGVhc2Uo
KTsKICAgICAgICAgcmV0dXJuIGpvaW5lci5qb2luKHN0YXRlKTsKICAgICB9CiAgICAgY2FzZSBB
TExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7CkBAIC02MDQsNiArNjQ0LDcgQEAgc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGZhc3RKb2luKEV4ZWNTdGF0ZQogICAgICAgICAgICAgICAgIGpvaW5lci5h
cHBlbmRFbXB0eVN0cmluZygpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIHNj
b3BlLnJlbGVhc2UoKTsKICAgICAgICAgcmV0dXJuIGpvaW5lci5qb2luKHN0YXRlKTsKICAgICB9
CiAgICAgfQpAQCAtNjE3LDYgKzY1OCw3IEBAIGdlbmVyYWxDYXNlOgogICAgICAgICBqb2luZXIu
YXBwZW5kKHN0YXRlLCBlbGVtZW50KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgSlNWYWx1ZSgpKTsKICAgICB9CisgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIHJldHVybiBq
b2luZXIuam9pbihzdGF0ZSk7CiB9CiAKQEAgLTYyNywxMCArNjY5LDEyIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAogICAgIC8vIDEuIExldCBPIGJlID8gVG9P
YmplY3QodGhpcyB2YWx1ZSkuCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBleGVjLT50aGlz
VmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7CisgICAgQVNT
RVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCAhdGhpc09iamVjdCk7CiAgICAgaWYgKCF0aGlzT2Jq
ZWN0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgICAg
IHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogCiAgICAgU3RyaW5nUmVjdXJzaW9uQ2hlY2tlciBj
aGVja2VyKGV4ZWMsIHRoaXNPYmplY3QpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkg
fHwgY2hlY2tlci5lYXJseVJldHVyblZhbHVlKCkpOwogICAgIGlmIChKU1ZhbHVlIGVhcmx5UmV0
dXJuVmFsdWUgPSBjaGVja2VyLmVhcmx5UmV0dXJuVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShlYXJseVJldHVyblZhbHVlKTsKIApAQCAtNjQ5LDExICs2OTMsMTQgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAgSlNT
dHJpbmcqIGpzU2VwYXJhdG9yID0ganNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZXhlYywgY29tbWEp
OwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAKKyAgICAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoc2xvd0pvaW4oKmV4ZWMsIHRoaXNPYmplY3QsIGpzU2VwYXJhdG9yLCBs
ZW5ndGg2NCkpOwogICAgICAgICB9CiAKICAgICAgICAgdW5zaWduZWQgdW5zaWduZWRMZW5ndGgg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoKTsKICAgICAgICAgQVNTRVJUKHN0YXRpY19j
YXN0PGRvdWJsZT4odW5zaWduZWRMZW5ndGgpID09IGxlbmd0aCk7CisKKyAgICAgICAgc2NvcGUu
cmVsZWFzZSgpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGZhc3RKb2luKCpleGVj
LCB0aGlzT2JqZWN0LCB7ICZjb21tYSwgMSB9LCB1bnNpZ25lZExlbmd0aCkpOwogICAgIH0KIApA
QCAtNjY0LDYgKzcxMSw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0YKICAgICBpZiAoVU5MSUtFTFkobGVuZ3RoID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpIHx8ICFjYW5Vc2VGYXN0Sm9pbih0aGlzT2JqZWN0KSkpIHsKICAgICAgICAgdWlu
dDY0X3QgbGVuZ3RoNjQgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4obGVuZ3RoKTsKICAgICAgICAg
QVNTRVJUKHN0YXRpY19jYXN0PGRvdWJsZT4obGVuZ3RoNjQpID09IGxlbmd0aCk7CisKKyAgICAg
ICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNsb3dK
b2luKCpleGVjLCB0aGlzT2JqZWN0LCBqc1NlcGFyYXRvciwgbGVuZ3RoNjQpKTsKICAgICB9CiAK
QEAgLTY4MSwyOCArNzMwLDMyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b0YKIAogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlz
KGV4ZWMsIFN0cmljdE1vZGUpOwogCi0gICAgaWYgKGlzSlNBcnJheSh0aGlzVmFsdWUpKQorICAg
IGlmIChpc0pTQXJyYXkodGhpc1ZhbHVlKSkgeworICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNBcnJheSh0aGlzVmFsdWUpLT5wb3AoZXhl
YykpOworICAgIH0KIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLnRvT2JqZWN0
KGV4ZWMpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgIXRoaXNPYmopOwogICAg
IGlmICghdGhpc09iaikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
OworICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKICAgICB1bnNpZ25lZCBsZW5ndGgg
PSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKLSAgICBKU1ZhbHVlIHJlc3VsdDsKICAgICBpZiAobGVu
Z3RoID09IDApIHsKKyAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICBwdXRMZW5ndGgo
ZXhlYywgdm0sIHRoaXNPYmosIGpzTnVtYmVyKGxlbmd0aCkpOwotICAgICAgICByZXN1bHQgPSBq
c1VuZGVmaW5lZCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc3VsdCA9IHRoaXNPYmotPmdl
dChleGVjLCBsZW5ndGggLSAxKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgICAgIGlmICghdGhpc09iai0+bWV0aG9kVGFibGUodm0p
LT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iaiwgZXhlYywgbGVuZ3RoIC0gMSkpIHsKLSAg
ICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoVW5hYmxl
VG9EZWxldGVQcm9wZXJ0eUVycm9yKSk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwotICAgICAgICB9Ci0gICAgICAgIHB1dExlbmd0aChleGVjLCB2
bSwgdGhpc09iaiwganNOdW1iZXIobGVuZ3RoIC0gMSkpOworICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KKworICAgIEpTVmFsdWUgcmVzdWx0ID0g
dGhpc09iai0+Z2V0KGV4ZWMsIGxlbmd0aCAtIDEpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIGlmICghdGhpc09iai0+bWV0aG9kVGFibGUo
dm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iaiwgZXhlYywgbGVuZ3RoIC0gMSkpIHsK
KyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbChVbmFibGVU
b0RlbGV0ZVByb3BlcnR5RXJyb3IpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICB9CisgICAgc2NvcGUucmVsZWFzZSgpOworICAgIHB1dExlbmd0
aChleGVjLCB2bSwgdGhpc09iaiwganNOdW1iZXIobGVuZ3RoIC0gMSkpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIApAQCAtNzE0LDEzICs3NjcsMTUgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiAgICAgaWYgKGlzSlNBcnJheSh0
aGlzVmFsdWUpICYmIGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA9PSAxKSB7CiAgICAgICAgIEpTQXJy
YXkqIGFycmF5ID0gYXNBcnJheSh0aGlzVmFsdWUpOworICAgICAgICBzY29wZS5yZWxlYXNlKCk7
CiAgICAgICAgIGFycmF5LT5wdXNoKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihhcnJheS0+bGVuZ3RoKCkp
KTsKICAgICB9CiAgICAgCiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUudG9PYmpl
Y3QoZXhlYyk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCAhdGhpc09iaik7CiAg
ICAgaWYgKCF0aGlzT2JqKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUo
KSk7CisgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogICAgIHVuc2lnbmVkIGxlbmd0
aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIApAQCAtNzM3LDYgKzc5Miw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICB9CiAgICAgCiAgICAgSlNWYWx1ZSBu
ZXdMZW5ndGgoc3RhdGljX2Nhc3Q8aW50NjRfdD4obGVuZ3RoKSArIHN0YXRpY19jYXN0PGludDY0
X3Q+KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSkpOworICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICBw
dXRMZW5ndGgoZXhlYywgdm0sIHRoaXNPYmosIG5ld0xlbmd0aCk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShuZXdMZW5ndGgpOwogfQpAQCAtNzQ3LDggKzgwMyw5IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGV4ZWMtPnRoaXNW
YWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKKyAgICBBU1NF
UlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8ICF0aGlzT2JqZWN0KTsKICAgICBpZiAoIXRoaXNPYmpl
Y3QpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICAgICAg
cmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5n
dGgoZXhlYywgdGhpc09iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CkBAIC04MTIsOCArODY5LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgfSBlbHNlIGlmICghdGhpc09iamVjdC0+bWV0
aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgbG93
ZXIpKSB7CiAgICAgICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAg
ICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoVW5hYmxlVG9EZWxl
dGVQcm9wZXJ0eUVycm9yKSk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
VmFsdWUoKSk7CisgICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7CisgICAgICAgICAgICByZXR1
cm4gZW5jb2RlZEpTVmFsdWUoKTsKICAgICAgICAgfQorICAgICAgICBBU1NFUlQoIXNjb3BlLmV4
Y2VwdGlvbigpKTsKIAogICAgICAgICBpZiAobG93ZXJFeGlzdHMpIHsKICAgICAgICAgICAgIHRo
aXNPYmplY3QtPnB1dEJ5SW5kZXhJbmxpbmUoZXhlYywgdXBwZXIsIGxvd2VyVmFsdWUsIHRydWUp
OwpAQCAtODIxLDggKzg4MCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5
UHJvdG9GCiAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+
ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIHVwcGVyKSkgewogICAgICAg
ICAgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICB0aHJvd1R5cGVF
cnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKFVuYWJsZVRvRGVsZXRlUHJvcGVydHlFcnJv
cikpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAg
ICAgICAgICAgc2NvcGUucmVsZWFzZSgpOworICAgICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1Zh
bHVlKCk7CiAgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAg
ICAgfQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhpc09iamVjdCk7CiB9CkBAIC04MzIs
MjEgKzg5MywyNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSBleGVjLT50aGlzVmFsdWUoKS50b1Ro
aXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7CisgICAgQVNTRVJUKCFzY29wZS5l
eGNlcHRpb24oKSB8fCAhdGhpc09iaik7CiAgICAgaWYgKCF0aGlzT2JqKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgICAgIHJldHVybiBlbmNvZGVkSlNW
YWx1ZSgpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAotICAg
IEpTVmFsdWUgcmVzdWx0OwogICAgIGlmIChsZW5ndGggPT0gMCkgeworICAgICAgICBzY29wZS5y
ZWxlYXNlKCk7CiAgICAgICAgIHB1dExlbmd0aChleGVjLCB2bSwgdGhpc09iaiwganNOdW1iZXIo
bGVuZ3RoKSk7Ci0gICAgICAgIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgcmVzdWx0ID0gdGhpc09iai0+Z2V0SW5kZXgoZXhlYywgMCk7Ci0gICAgICAgIHNo
aWZ0PEpTQXJyYXk6OlNoaWZ0Q291bnRGb3JTaGlmdD4oZXhlYywgdGhpc09iaiwgMCwgMSwgMCwg
bGVuZ3RoKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7Ci0gICAgICAgIHB1dExlbmd0aChleGVjLCB2bSwgdGhpc09iaiwganNOdW1iZXIobGVu
Z3RoIC0gMSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIH0KKworICAgIEpTVmFsdWUgcmVzdWx0ID0gdGhpc09iai0+Z2V0SW5kZXgoZXhlYywg
MCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgc2hpZnQ8SlNBcnJheTo6U2hpZnRDb3VudEZvclNoaWZ0PihleGVjLCB0aGlzT2JqLCAwLCAx
LCAwLCBsZW5ndGgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICBwdXRMZW5ndGgoZXhlYywgdm0sIHRo
aXNPYmosIGpzTnVtYmVyKGxlbmd0aCAtIDEpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CiB9CiAKQEAgLTg1NiwyMCArOTIwLDI2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVjdCogdGhpc09iaiA9
IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVj
KTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8ICF0aGlzT2JqKTsKICAgICBpZiAo
IXRoaXNPYmopCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAg
ICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gZ2V0
TGVuZ3RoKGV4ZWMsIHRoaXNPYmopOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogCiAgICAgdW5zaWduZWQgYmVnaW4gPSBhcmd1bWVudENsYW1wZWRJ
bmRleEZyb21TdGFydE9yRW5kKGV4ZWMsIDAsIGxlbmd0aCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgdW5zaWduZWQgZW5kID0gYXJndW1l
bnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAxLCBsZW5ndGgsIGxlbmd0aCk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBz
dGQ6OnBhaXI8U3BlY2llc0NvbnN0cnVjdFJlc3VsdCwgSlNPYmplY3QqPiBzcGVjaWVzUmVzdWx0
ID0gc3BlY2llc0NvbnN0cnVjdEFycmF5KGV4ZWMsIHRoaXNPYmosIGVuZCAtIGJlZ2luKTsKICAg
ICAvLyBXZSBjYW4gb25seSBnZXQgYW4gZXhjZXB0aW9uIGlmIHdlIGNhbGwgc29tZSB1c2VyIGZ1
bmN0aW9uLgorICAgIEFTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09IChzcGVjaWVzUmVzdWx0
LmZpcnN0ID09IFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkV4Y2VwdGlvbikpOwogICAgIGlmIChV
TkxJS0VMWShzcGVjaWVzUmVzdWx0LmZpcnN0ID09IFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkV4
Y2VwdGlvbikpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAKLSAgICBpZiAoTElLRUxZKHNwZWNpZXNSZXN1bHQuZmlyc3QgPT0gU3BlY2llc0NvbnN0cnVj
dFJlc3VsdDo6RmFzdFBhdGggJiYgaXNKU0FycmF5KHRoaXNPYmopICYmIGxlbmd0aCA9PSBnZXRM
ZW5ndGgoZXhlYywgdGhpc09iaikpKSB7CisgICAgYm9vbCBva1RvRG9GYXN0UGF0aCA9IHNwZWNp
ZXNSZXN1bHQuZmlyc3QgPT0gU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RmFzdFBhdGggJiYgaXNK
U0FycmF5KHRoaXNPYmopICYmIGxlbmd0aCA9PSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgaWYg
KExJS0VMWShva1RvRG9GYXN0UGF0aCkpIHsKICAgICAgICAgaWYgKEpTQXJyYXkqIHJlc3VsdCA9
IGFzQXJyYXkodGhpc09iaiktPmZhc3RTbGljZSgqZXhlYywgYmVnaW4sIGVuZCAtIGJlZ2luKSkK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9CkBAIC04
ODYsOCArOTU2LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YK
ICAgICBmb3IgKHVuc2lnbmVkIGsgPSBiZWdpbjsgayA8IGVuZDsgaysrLCBuKyspIHsKICAgICAg
ICAgSlNWYWx1ZSB2ID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgayk7CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgICAgICBpZiAo
dikKKyAgICAgICAgaWYgKHYpIHsKICAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgo
ZXhlYywgbiwgdiwgMCwgUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyk7CisgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgfQog
ICAgIH0KICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgc2V0TGVuZ3RoKGV4ZWMsIHZtLCByZXN1
bHQsIG4pOwpAQCAtOTAyLDE1ICs5NzQsMTcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhcnJheVByb3RvRgogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMs
IFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9u
KCkgfHwgIXRoaXNPYmopOwogICAgIGlmICghdGhpc09iaikKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsK
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBpZiAoIWV4
ZWMtPmFyZ3VtZW50Q291bnQoKSkgewogICAgICAgICBzdGQ6OnBhaXI8U3BlY2llc0NvbnN0cnVj
dFJlc3VsdCwgSlNPYmplY3QqPiBzcGVjaWVzUmVzdWx0ID0gc3BlY2llc0NvbnN0cnVjdEFycmF5
KGV4ZWMsIHRoaXNPYmosIDApOworICAgICAgICBBU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9
PSAoc3BlY2llc1Jlc3VsdC5maXJzdCA9PSBTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpFeGNlcHRp
b24pKTsKICAgICAgICAgaWYgKHNwZWNpZXNSZXN1bHQuZmlyc3QgPT0gU3BlY2llc0NvbnN0cnVj
dFJlc3VsdDo6RXhjZXB0aW9uKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogCiAg
ICAgICAgIEpTT2JqZWN0KiByZXN1bHQ7CiAgICAgICAgIGlmIChzcGVjaWVzUmVzdWx0LmZpcnN0
ID09IFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkNyZWF0ZWRPYmplY3QpCkBAIC05MjgsMTAgKzEw
MDIsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIH0K
IAogICAgIHVuc2lnbmVkIGFjdHVhbFN0YXJ0ID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3Rh
cnRPckVuZChleGVjLCAwLCBsZW5ndGgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgdW5zaWduZWQgYWN0dWFsRGVsZXRlQ291bnQgPSBs
ZW5ndGggLSBhY3R1YWxTdGFydDsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMSkg
ewogICAgICAgICBkb3VibGUgZGVsZXRlQ291bnQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgx
KS50b0ludGVnZXIoZXhlYyk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogICAgICAgICBpZiAoZGVsZXRlQ291bnQgPCAwKQogICAgICAgICAg
ICAgYWN0dWFsRGVsZXRlQ291bnQgPSAwOwogICAgICAgICBlbHNlIGlmIChkZWxldGVDb3VudCA+
IGxlbmd0aCAtIGFjdHVhbFN0YXJ0KQpAQCAtOTQxLDExICsxMDE3LDE0IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICB9CiAKICAgICBzdGQ6OnBhaXI8U3Bl
Y2llc0NvbnN0cnVjdFJlc3VsdCwgSlNPYmplY3QqPiBzcGVjaWVzUmVzdWx0ID0gc3BlY2llc0Nv
bnN0cnVjdEFycmF5KGV4ZWMsIHRoaXNPYmosIGFjdHVhbERlbGV0ZUNvdW50KTsKKyAgICBBU1NF
UlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAoc3BlY2llc1Jlc3VsdC5maXJzdCA9PSBTcGVjaWVz
Q29uc3RydWN0UmVzdWx0OjpFeGNlcHRpb24pKTsKICAgICBpZiAoc3BlY2llc1Jlc3VsdC5maXJz
dCA9PSBTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpFeGNlcHRpb24pCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBKU09iamVjdCogcmVzdWx0ID0g
bnVsbHB0cjsKLSAgICBpZiAoc3BlY2llc1Jlc3VsdC5maXJzdCA9PSBTcGVjaWVzQ29uc3RydWN0
UmVzdWx0OjpGYXN0UGF0aCAmJiBpc0pTQXJyYXkodGhpc09iaikgJiYgbGVuZ3RoID09IGdldExl
bmd0aChleGVjLCB0aGlzT2JqKSkKKyAgICBib29sIG9rVG9Eb0Zhc3RQYXRoID0gc3BlY2llc1Jl
c3VsdC5maXJzdCA9PSBTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpGYXN0UGF0aCAmJiBpc0pTQXJy
YXkodGhpc09iaikgJiYgbGVuZ3RoID09IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBpZiAoTElL
RUxZKG9rVG9Eb0Zhc3RQYXRoKSkKICAgICAgICAgcmVzdWx0ID0gYXNBcnJheSh0aGlzT2JqKS0+
ZmFzdFNsaWNlKCpleGVjLCBhY3R1YWxTdGFydCwgYWN0dWFsRGVsZXRlQ291bnQpOwogCiAgICAg
aWYgKCFyZXN1bHQpIHsKQEAgLTEwMDAsOCArMTA3OSw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAvLyAxNS40LjQuMTMKIAogICAgIEpTT2JqZWN0KiB0
aGlzT2JqID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2Jq
ZWN0KGV4ZWMpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgIXRoaXNPYmopOwog
ICAgIGlmICghdGhpc09iaikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpOworICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKICAgICB1bnNpZ25lZCBsZW5n
dGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKQEAgLTEwMTUsNiArMTA5NSw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgfQogICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNOdW1iZXIobGVuZ3RoICsgbnJBcmdzKTsKKyAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAg
cHV0TGVuZ3RoKGV4ZWMsIHZtLCB0aGlzT2JqLCByZXN1bHQpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKIH0KQEAgLTEwMjYsOCArMTEwNyw5IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAogICAgIC8vIDE1LjQuNC4xNAogICAgIEpTT2Jq
ZWN0KiB0aGlzT2JqID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUp
LnRvT2JqZWN0KGV4ZWMpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgIXRoaXNP
YmopOwogICAgIGlmICghdGhpc09iaikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKCkpOworICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKQEAgLTEwNTMsMTAgKzExMzUsMTEgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiAgICAgLy8gMTUuNC40
LjE1CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhl
YywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRp
b24oKSB8fCAhdGhpc09iaik7CiAgICAgaWYgKCF0aGlzT2JqKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgp
OwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsKLSAgICBp
ZiAoIWxlbmd0aCkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpIHx8ICFsZW5n
dGgpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoLTEpKTsKIAogICAg
IHVuc2lnbmVkIGluZGV4ID0gbGVuZ3RoIC0gMTsKQEAgLTExMzEsMTMgKzEyMTQsMTYgQEAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIGNvbmNhdEFwcGVuZE9uZShFeAogICAgIGlmICghcmVzdWx0KQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVj
LCBzY29wZSkpOwogCi0gICAgaWYgKCFyZXN1bHQtPmFwcGVuZE1lbWNweShleGVjLCB2bSwgMCwg
Zmlyc3QpKSB7Ci0gICAgICAgIGlmICghbW92ZUVsZW1lbnRzKGV4ZWMsIHZtLCByZXN1bHQsIDAs
IGZpcnN0LCBmaXJzdEFycmF5U2l6ZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChzY29wZS5leGNl
cHRpb24oKSk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7
Ci0gICAgICAgIH0KKyAgICBib29sIHN1Y2Nlc3MgPSByZXN1bHQtPmFwcGVuZE1lbWNweShleGVj
LCB2bSwgMCwgZmlyc3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOworICAgIGlmICghc3VjY2VzcykgeworICAgICAgICBib29sIHN1Y2Nlc3MgPSBt
b3ZlRWxlbWVudHMoZXhlYywgdm0sIHJlc3VsdCwgMCwgZmlyc3QsIGZpcnN0QXJyYXlTaXplKTsK
KyAgICAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSA9PSBzdWNjZXNzKTsKKyAgICAgICAg
aWYgKCFzdWNjZXNzKQorICAgICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CiAgICAg
fQogCisgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhl
YywgZmlyc3RBcnJheVNpemUsIHNlY29uZCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOwogCkBAIC0xMTU5LDEyICsxMjQ1LDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYXJyYXlQcm90b1AKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwo
KSk7CiAKICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIHRoZSBzcGVjaWVzIGNvbnN0cnVjdG9yIGhl
cmUgc2luY2UgY2hlY2tpbmcgaXQgaW4gdGhlIEpTIHdyYXBwZXIgaXMgdG9vIGV4cGVuc2l2ZSBm
b3IgdGhlIG5vbi1vcHRpbWl6aW5nIHRpZXJzLgotICAgIGlmIChVTkxJS0VMWSghc3BlY2llc1dh
dGNocG9pbnRzVmFsaWQoZXhlYywgZmlyc3RBcnJheSkpKQorICAgIGJvb2wgaXNWYWxpZCA9IHNw
ZWNpZXNXYXRjaHBvaW50c1ZhbGlkKGV4ZWMsIGZpcnN0QXJyYXkpOworICAgIEFTU0VSVCghc2Nv
cGUuZXhjZXB0aW9uKCkgfHwgIWlzVmFsaWQpOworICAgIGlmIChVTkxJS0VMWSghaXNWYWxpZCkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogCiAgICAgSlNWYWx1
ZSBzZWNvbmQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKLSAgICBpZiAoIWlzSlNBcnJh
eShzZWNvbmQpKQorICAgIGlmICghaXNKU0FycmF5KHNlY29uZCkpIHsKKyAgICAgICAgc2NvcGUu
cmVsZWFzZSgpOwogICAgICAgICByZXR1cm4gY29uY2F0QXBwZW5kT25lKGV4ZWMsIHZtLCBmaXJz
dEFycmF5LCBzZWNvbmQpOworICAgIH0KIAogICAgIEpTQXJyYXkqIHNlY29uZEFycmF5ID0ganND
YXN0PEpTQXJyYXkqPihzZWNvbmQpOwogICAgIApAQCAtMTE4MCwxMSArMTI3MCwxNCBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9QCiAgICAgICAgIEpTQXJyYXkqIHJl
c3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgZmlyc3RBcnJheVNpemUg
KyBzZWNvbmRBcnJheVNpemUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKIAotICAgICAgICBpZiAoIW1vdmVFbGVtZW50cyhleGVjLCB2bSwg
cmVzdWx0LCAwLCBmaXJzdEFycmF5LCBmaXJzdEFycmF5U2l6ZSkKLSAgICAgICAgICAgIHx8ICFt
b3ZlRWxlbWVudHMoZXhlYywgdm0sIHJlc3VsdCwgZmlyc3RBcnJheVNpemUsIHNlY29uZEFycmF5
LCBzZWNvbmRBcnJheVNpemUpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9u
KCkpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwotICAg
ICAgICB9CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IG1vdmVFbGVtZW50cyhleGVjLCB2bSwgcmVz
dWx0LCAwLCBmaXJzdEFycmF5LCBmaXJzdEFycmF5U2l6ZSk7CisgICAgICAgIEFTU0VSVCghc2Nv
cGUuZXhjZXB0aW9uKCkgPT0gc3VjY2Vzcyk7CisgICAgICAgIGlmICghc3VjY2VzcykKKyAgICAg
ICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgICAgICBzdWNjZXNzID0gbW92ZUVs
ZW1lbnRzKGV4ZWMsIHZtLCByZXN1bHQsIGZpcnN0QXJyYXlTaXplLCBzZWNvbmRBcnJheSwgc2Vj
b25kQXJyYXlTaXplKTsKKyAgICAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSA9PSBzdWNj
ZXNzKTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICAgICAgcmV0dXJuIGVuY29kZWRK
U1ZhbHVlKCk7CiAKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAg
IH0KQEAgLTEyNTAsNiArMTM0Myw3IEBAIEFycmF5UHJvdG90eXBlOjpTcGVjaWVzV2F0Y2hwb2lu
dFN0YXR1cyAKICAgICBBU1NFUlQobV9zcGVjaWVzV2F0Y2hwb2ludFN0YXR1cyA9PSBTcGVjaWVz
V2F0Y2hwb2ludFN0YXR1czo6VW5pbml0aWFsaXplZCk7CiAKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlm
ICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJBdHRlbXB0aW5nIHRvIGluaXRpYWxpemUgQXJy
YXkgc3BlY2llcyB3YXRjaHBvaW50cyBmb3IgQXJyYXkucHJvdG90eXBlOiAiLCBwb2ludGVyRHVt
cCh0aGlzKSwgIiB3aXRoIHN0cnVjdHVyZTogIiwgcG9pbnRlckR1bXAodGhpcy0+c3RydWN0dXJl
KCkpLCAiXG5hbmQgQXJyYXk6ICIsIHBvaW50ZXJEdW1wKHRoaXMtPmdsb2JhbE9iamVjdCgpLT5h
cnJheUNvbnN0cnVjdG9yKCkpLCAiIHdpdGggc3RydWN0dXJlOiAiLCBwb2ludGVyRHVtcCh0aGlz
LT5nbG9iYWxPYmplY3QoKS0+YXJyYXlDb25zdHJ1Y3RvcigpLT5zdHJ1Y3R1cmUoKSksICJcbiIp
OwpAQCAtMTI2Nyw3ICsxMzYxLDggQEAgQXJyYXlQcm90b3R5cGU6OlNwZWNpZXNXYXRjaHBvaW50
U3RhdHVzIAogCiAgICAgUHJvcGVydHlTbG90IGNvbnN0cnVjdG9yU2xvdCh0aGlzLCBQcm9wZXJ0
eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5KTsKICAgICBKU1ZhbHVlKHRoaXMp
LmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgY29uc3RydWN0b3JTbG90
KTsKLSAgICBpZiAoY29uc3RydWN0b3JTbG90LnNsb3RCYXNlKCkgIT0gdGhpcworICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkKKyAgICAgICAgfHwgY29uc3RydWN0b3JTbG90LnNs
b3RCYXNlKCkgIT0gdGhpcwogICAgICAgICB8fCAhY29uc3RydWN0b3JTbG90LmlzQ2FjaGVhYmxl
VmFsdWUoKQogICAgICAgICB8fCBjb25zdHJ1Y3RvclNsb3QuZ2V0VmFsdWUoZXhlYywgdm0ucHJv
cGVydHlOYW1lcy0+Y29uc3RydWN0b3IpICE9IGFycmF5Q29uc3RydWN0b3IpCiAgICAgICAgIHJl
dHVybiBtX3NwZWNpZXNXYXRjaHBvaW50U3RhdHVzID0gU3BlY2llc1dhdGNocG9pbnRTdGF0dXM6
OkZpcmVkOwpAQCAtMTI3OCw3ICsxMzczLDggQEAgQXJyYXlQcm90b3R5cGU6OlNwZWNpZXNXYXRj
aHBvaW50U3RhdHVzIAogCiAgICAgUHJvcGVydHlTbG90IHNwZWNpZXNTbG90KGFycmF5Q29uc3Ry
dWN0b3IsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkpOwogICAg
IEpTVmFsdWUoYXJyYXlDb25zdHJ1Y3RvcikuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnNw
ZWNpZXNTeW1ib2wsIHNwZWNpZXNTbG90KTsKLSAgICBpZiAoc3BlY2llc1Nsb3Quc2xvdEJhc2Uo
KSAhPSBhcnJheUNvbnN0cnVjdG9yCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KQorICAgICAgICB8fCBzcGVjaWVzU2xvdC5zbG90QmFzZSgpICE9IGFycmF5Q29uc3RydWN0b3IK
ICAgICAgICAgfHwgIXNwZWNpZXNTbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkKICAgICAgICAgfHwg
c3BlY2llc1Nsb3QuZ2V0dGVyU2V0dGVyKCkgIT0gZ2xvYmFsT2JqZWN0LT5zcGVjaWVzR2V0dGVy
U2V0dGVyKCkpCiAgICAgICAgIHJldHVybiBtX3NwZWNpZXNXYXRjaHBvaW50U3RhdHVzID0gU3Bl
Y2llc1dhdGNocG9pbnRTdGF0dXM6OkZpcmVkOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295311</attachid>
            <date>2016-11-21 12:56:23 -0800</date>
            <delta_ts>2016-11-24 14:48:48 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-164972.patch</filename>
            <type>text/plain</type>
            <size>42965</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4OTUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBA
CisyMDE2LTExLTIxICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBG
aXggZXhjZXB0aW9uIHNjb3BlIHZlcmlmaWNhdGlvbiBmYWlsdXJlcyBpbiBBcnJheUNvbnN0cnVj
dG9yLmNwcCBhbmQgQXJyYXlQcm90b3R5cGUuY3BwLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0OTcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWxzbyBjaGFuZ2VkIHRvIHJldHVybiB7IH0gd2hlcmUg
YXBwcm9wcmlhdGUuCisKKyAgICAgICAgKiBydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpjb25zdHJ1Y3RBcnJheVdpdGhTaXplUXVpcmspOgorICAgICAgICAqIHJ1
bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpnZXRQcm9wZXJ0eSk6Cisg
ICAgICAgIChKU0M6OnNwZWNpZXNXYXRjaHBvaW50c1ZhbGlkKToKKyAgICAgICAgKEpTQzo6c3Bl
Y2llc0NvbnN0cnVjdEFycmF5KToKKyAgICAgICAgKEpTQzo6c2hpZnQpOgorICAgICAgICAoSlND
Ojp1bnNoaWZ0KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNUb1N0cmluZyk6CisgICAg
ICAgIChKU0M6OmFycmF5UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpz
bG93Sm9pbik6CisgICAgICAgIChKU0M6OmZhc3RKb2luKToKKyAgICAgICAgKEpTQzo6YXJyYXlQ
cm90b0Z1bmNKb2luKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNQb3ApOgorICAgICAg
ICAoSlNDOjphcnJheVByb3RvRnVuY1B1c2gpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVu
Y1JldmVyc2UpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NoaWZ0KToKKyAgICAgICAg
KEpTQzo6YXJyYXlQcm90b0Z1bmNTbGljZSk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5j
U3BsaWNlKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNVblNoaWZ0KToKKyAgICAgICAg
KEpTQzo6YXJyYXlQcm90b0Z1bmNJbmRleE9mKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1
bmNMYXN0SW5kZXhPZik6CisgICAgICAgIChKU0M6OmNvbmNhdEFwcGVuZE9uZSk6CisgICAgICAg
IChKU0M6OmFycmF5UHJvdG9Qcml2YXRlRnVuY0NvbmNhdE1lbWNweSk6CisgICAgICAgIChKU0M6
OkFycmF5UHJvdG90eXBlOjphdHRlbXB0VG9Jbml0aWFsaXplU3BlY2llc1dhdGNocG9pbnQpOgor
CiAyMDE2LTExLTIxICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBG
aXggZXhjZXB0aW9uIHNjb3BlIHZlcmlmaWNhdGlvbiBmYWlsdXJlcyBpbiAqRXhlY3V0YWJsZS5j
cHAgZmlsZXMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0
cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA4OTUwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcw
LDEyICs3MCwxNSBAQCBKU1ZhbHVlIGNvbnN0cnVjdEFycmF5V2l0aFNpemVRdWlyayhFeGVjCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0gICAgaWYgKCFsZW5ndGguaXNOdW1iZXIoKSkKKyAgICBpZiAoIWxlbmd0
aC5pc051bWJlcigpKSB7CisgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgcmV0dXJu
IGNvbnN0cnVjdEFycmF5TmVnYXRpdmVJbmRleGVkKGV4ZWMsIHByb2ZpbGUsIGdsb2JhbE9iamVj
dCwgJmxlbmd0aCwgMSwgbmV3VGFyZ2V0KTsKKyAgICB9CiAgICAgCiAgICAgdWludDMyX3QgbiA9
IGxlbmd0aC50b1VJbnQzMihleGVjKTsKICAgICBpZiAobiAhPSBsZW5ndGgudG9OdW1iZXIoZXhl
YykpCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlUmFu
Z2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkFycmF5IHNpemUgaXMgbm90IGEgc21hbGwgZW5v
dWdoIHBvc2l0aXZlIGludGVnZXIuIikpKTsKKyAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgcmV0
dXJuIGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgcHJvZmlsZSwgZ2xvYmFsT2JqZWN0LCBuLCBu
ZXdUYXJnZXQpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJh
eVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDg5NTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
OSw2ICsxNDksOSBAQCB2b2lkIEFycmF5UHJvdG90eXBlOjpkZXN0cm95KEpTQzo6SlNDZWxsCiAK
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0UHJvcGVydHkoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogb2JqZWN0LCB1bnNpZ25lZCBpbmRleCkKIHsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAK
ICAgICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBvYmplY3QtPnRyeUdldEluZGV4UXVpY2tseShpbmRl
eCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgLy8gV2Ugd2FudCB0byBwZXJmb3JtIGdl
dCBhbmQgaGFzIGluIHRoZSBzYW1lIG9wZXJhdGlvbi4KQEAgLTE1NiwxMCArMTU5LDE1IEBAIHN0
YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0UHJvcGVydHkKICAgICAvLyBvbmx5IHRpbWUg
aXQgaXMgb2JzZXJ2YWJsZSBpcyB3aGVuIHdlIGVuY291bnRlciBhbiBvcGFxdWUgb2JqZWN0cyAo
UHJveHlPYmplY3QgYW5kIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KQogICAgIC8vIHNvbWV3aGVy
ZSBpbiB0aGUgcHJvdG90eXBlIGNoYWluLgogICAgIFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwg
UHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6Okhhc1Byb3BlcnR5KTsKLSAgICBpZiAo
IW9iamVjdC0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGluZGV4LCBzbG90KSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWUoKTsKLSAgICBpZiAoVU5MSUtFTFkoc2xvdC5pc1RhaW50ZWRCeU9wYXF1ZU9i
amVjdCgpKSkKKyAgICBib29sIGhhc1Byb3BlcnR5ID0gb2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3Qo
ZXhlYywgaW5kZXgsIHNsb3QpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgIWhh
c1Byb3BlcnR5KTsKKyAgICBpZiAoIWhhc1Byb3BlcnR5KQorICAgICAgICByZXR1cm4geyB9Owor
ICAgIGlmIChVTkxJS0VMWShzbG90LmlzVGFpbnRlZEJ5T3BhcXVlT2JqZWN0KCkpKSB7CisgICAg
ICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgcmV0dXJuIG9iamVjdC0+Z2V0KGV4ZWMsIGlu
ZGV4KTsKKyAgICB9CisgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIHJldHVybiBzbG90LmdldFZh
bHVlKGV4ZWMsIGluZGV4KTsKIH0KIApAQCAtMTg1LDEwICsxOTMsMTUgQEAgc3RhdGljIEFMV0FZ
U19JTkxJTkUgdm9pZCBzZXRMZW5ndGgoRXhlYwogCiBpbmxpbmUgYm9vbCBzcGVjaWVzV2F0Y2hw
b2ludHNWYWxpZChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0KQogeworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCiAgICAgQXJyYXlQcm90b3R5cGUqIGFycmF5UHJvdG90eXBlID0gdGhpc09iamVj
dC0+Z2xvYmFsT2JqZWN0KCktPmFycmF5UHJvdG90eXBlKCk7CiAgICAgQXJyYXlQcm90b3R5cGU6
OlNwZWNpZXNXYXRjaHBvaW50U3RhdHVzIHN0YXR1cyA9IGFycmF5UHJvdG90eXBlLT5zcGVjaWVz
V2F0Y2hwb2ludFN0YXR1cygpOwotICAgIGlmIChVTkxJS0VMWShzdGF0dXMgPT0gQXJyYXlQcm90
b3R5cGU6OlNwZWNpZXNXYXRjaHBvaW50U3RhdHVzOjpVbmluaXRpYWxpemVkKSkKKyAgICBpZiAo
VU5MSUtFTFkoc3RhdHVzID09IEFycmF5UHJvdG90eXBlOjpTcGVjaWVzV2F0Y2hwb2ludFN0YXR1
czo6VW5pbml0aWFsaXplZCkpIHsKICAgICAgICAgc3RhdHVzID0gYXJyYXlQcm90b3R5cGUtPmF0
dGVtcHRUb0luaXRpYWxpemVTcGVjaWVzV2F0Y2hwb2ludChleGVjKTsKKyAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOworICAgIH0KICAgICBBU1NFUlQoc3RhdHVzICE9
IEFycmF5UHJvdG90eXBlOjpTcGVjaWVzV2F0Y2hwb2ludFN0YXR1czo6VW5pbml0aWFsaXplZCk7
CiAgICAgcmV0dXJuICF0aGlzT2JqZWN0LT5oYXNDdXN0b21Qcm9wZXJ0aWVzKCkKICAgICAgICAg
JiYgYXJyYXlQcm90b3R5cGUgPT0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KCkKQEAg
LTIxMiwxMCArMjI1LDE0IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHN0ZDo6cGFpcjxTcGVjaWVz
Q28KIAogICAgIC8vIEVDTUEgOS40LjIuMzogaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYy
LyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlCiAgICAgSlNWYWx1ZSBjb25zdHJ1Y3RvciA9IGpzVW5k
ZWZpbmVkKCk7Ci0gICAgaWYgKExJS0VMWShpc0FycmF5KGV4ZWMsIHRoaXNPYmplY3QpKSkgewor
ICAgIGJvb2wgdGhpc0lzQXJyYXkgPSBpc0FycmF5KGV4ZWMsIHRoaXNPYmplY3QpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGV4Y2VwdGlvblJlc3VsdCgpKTsKKyAgICBpZiAoTElL
RUxZKHRoaXNJc0FycmF5KSkgewogICAgICAgICAvLyBGYXN0IHBhdGggaW4gdGhlIG5vcm1hbCBj
YXNlIHdoZXJlIHRoZSB1c2VyIGhhcyBub3Qgc2V0IGFuIG93biBjb25zdHJ1Y3RvciBhbmQgdGhl
IEFycmF5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciBpcyBub3JtYWwuCiAgICAgICAgIC8vIFdlIG5l
ZWQgcHJvdG90eXBlIGNoZWNrIGZvciBzdWJjbGFzc2VzIG9mIEFycmF5LCB3aGljaCBhcmUgQXJy
YXkgb2JqZWN0cyBidXQgaGF2ZSBhIGRpZmZlcmVudCBwcm90b3R5cGUgYnkgZGVmYXVsdC4KLSAg
ICAgICAgaWYgKExJS0VMWShzcGVjaWVzV2F0Y2hwb2ludHNWYWxpZChleGVjLCB0aGlzT2JqZWN0
KSkpCisgICAgICAgIGJvb2wgaXNWYWxpZCA9IHNwZWNpZXNXYXRjaHBvaW50c1ZhbGlkKGV4ZWMs
IHRoaXNPYmplY3QpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBleGNlcHRp
b25SZXN1bHQoKSk7CisgICAgICAgIGlmIChMSUtFTFkoaXNWYWxpZCkpCiAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjptYWtlX3BhaXIoU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RmFzdFBhdGgsIG51
bGxwdHIpOwogCiAgICAgICAgIGNvbnN0cnVjdG9yID0gdGhpc09iamVjdC0+Z2V0KGV4ZWMsIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rvcik7CkBAIC0yOTQsMTcgKzMxMSwyNCBAQCB2
b2lkIHNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoCiAgICAgZm9yICh1bnNpZ25l
ZCBrID0gaGVhZGVyOyBrIDwgbGVuZ3RoIC0gY3VycmVudENvdW50OyArK2spIHsKICAgICAgICAg
dW5zaWduZWQgZnJvbSA9IGsgKyBjdXJyZW50Q291bnQ7CiAgICAgICAgIHVuc2lnbmVkIHRvID0g
ayArIHJlc3VsdENvdW50OwotICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IGdldFByb3BlcnR5
KGV4ZWMsIHRoaXNPYmosIGZyb20pKSB7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB2b2lkKCkpOworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZ2V0UHJvcGVydHkoZXhl
YywgdGhpc09iaiwgZnJvbSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZv
aWQoKSk7CisgICAgICAgIGlmICh2YWx1ZSkgewogICAgICAgICAgICAgdGhpc09iai0+cHV0QnlJ
bmRleElubGluZShleGVjLCB0bywgdmFsdWUsIHRydWUpOwogICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLSAgICAgICAgfSBlbHNlIGlmICghdGhpc09iai0+
bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iaiwgZXhlYywgdG8p
KSB7Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFs
KFVuYWJsZVRvRGVsZXRlUHJvcGVydHlFcnJvcikpOwotICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gdGhpc09iai0+bWV0aG9k
VGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iaiwgZXhlYywgdG8pOworICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKyAgICAgICAgICAg
IGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNj
b3BlLCBBU0NJSUxpdGVyYWwoVW5hYmxlVG9EZWxldGVQcm9wZXJ0eUVycm9yKSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIGZv
ciAodW5zaWduZWQgayA9IGxlbmd0aDsgayA+IGxlbmd0aCAtIGNvdW50OyAtLWspIHsKLSAgICAg
ICAgaWYgKCF0aGlzT2JqLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0
aGlzT2JqLCBleGVjLCBrIC0gMSkpIHsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gdGhpc09iai0+
bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iaiwgZXhlYywgayAt
IDEpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOworICAgICAg
ICBpZiAoIXN1Y2Nlc3MpIHsKICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3Bl
LCBBU0NJSUxpdGVyYWwoVW5hYmxlVG9EZWxldGVQcm9wZXJ0eUVycm9yKSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KQEAgLTMzMSwyMSArMzU1LDMwIEBAIHZvaWQgdW5zaGlmdChF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiAKIAogICAgIGlmIChpc0pTQXJyYXkodGhpc09iaikp
IHsKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHRoaXNPYmopOwotICAgICAgICBp
ZiAoYXJyYXktPmxlbmd0aCgpID09IGxlbmd0aCAmJiBhcnJheS0+dW5zaGlmdENvdW50PHNoaWZ0
Q291bnRNb2RlPihleGVjLCBoZWFkZXIsIGNvdW50KSkKLSAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgaWYgKGFycmF5LT5sZW5ndGgoKSA9PSBsZW5ndGgpIHsKKyAgICAgICAgICAgIGJvb2wg
aGFuZGxlZCA9IGFycmF5LT51bnNoaWZ0Q291bnQ8c2hpZnRDb3VudE1vZGU+KGV4ZWMsIGhlYWRl
ciwgY291bnQpOworICAgICAgICAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCBoYW5k
bGVkKTsKKyAgICAgICAgICAgIGlmIChoYW5kbGVkKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQogICAgIH0KIAogICAgIGZvciAodW5zaWduZWQgayA9IGxlbmd0aCAtIGN1cnJl
bnRDb3VudDsgayA+IGhlYWRlcjsgLS1rKSB7CiAgICAgICAgIHVuc2lnbmVkIGZyb20gPSBrICsg
Y3VycmVudENvdW50IC0gMTsKICAgICAgICAgdW5zaWduZWQgdG8gPSBrICsgcmVzdWx0Q291bnQg
LSAxOwotICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNP
YmosIGZyb20pKSB7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lk
KCkpOworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwg
ZnJvbSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisgICAg
ICAgIGlmICh2YWx1ZSkgewogICAgICAgICAgICAgdGhpc09iai0+cHV0QnlJbmRleElubGluZShl
eGVjLCB0bywgdmFsdWUsIHRydWUpOwotICAgICAgICB9IGVsc2UgaWYgKCF0aGlzT2JqLT5tZXRo
b2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqLCBleGVjLCB0bykpIHsK
LSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoVW5h
YmxlVG9EZWxldGVQcm9wZXJ0eUVycm9yKSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gdGhpc09iai0+bWV0aG9kVGFibGUodm0pLT5k
ZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iaiwgZXhlYywgdG8pOworICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKyAgICAgICAgICAgIGlmICghc3VjY2Vz
cykgeworICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxp
dGVyYWwoVW5hYmxlVG9EZWxldGVQcm9wZXJ0eUVycm9yKSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHZvaWQoKSk7CiAgICAgfQogfQogCkBAIC0zNTcsMTEgKzM5MCwxMSBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKICAgICAvLyAxLiBMZXQgYXJy
YXkgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIFRvT2JqZWN0IG9uIHRoZSB0aGlzIHZhbHVlLgog
ICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gdGhpc1ZhbHVlLnRvT2JqZWN0KGV4ZWMpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgCiAgICAgLy8gMi4gTGV0IGZ1bmMgYmUg
dGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBhcnJh
eSB3aXRoIGFyZ3VtZW50ICJqb2luIi4KICAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gSlNWYWx1ZSh0
aGlzT2JqZWN0KS5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmpvaW4pOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICAvLyAzLiBJZiBJc0NhbGxhYmxlKGZ1bmMp
IGlzIGZhbHNlLCB0aGVuIGxldCBmdW5jIGJlIHRoZSBzdGFuZGFyZCBidWlsdC1pbiBtZXRob2Qg
T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAoMTUuMi40LjIpLgogICAgIGJvb2wgY3VzdG9tSm9p
bkNhc2UgPSBmYWxzZTsKQEAgLTM3OCw4ICs0MTEsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRgogICAgIH0KIAogICAgIC8vIDQuIFJldHVybiB0aGUgcmVzdWx0
IG9mIGNhbGxpbmcgdGhlIFtbQ2FsbF1dIGludGVybmFsIG1ldGhvZCBvZiBmdW5jIHByb3ZpZGlu
ZyBhcnJheSBhcyB0aGUgdGhpcyB2YWx1ZSBhbmQgYW4gZW1wdHkgYXJndW1lbnRzIGxpc3QuCi0g
ICAgaWYgKCFpc0pTQXJyYXkodGhpc09iamVjdCkgfHwgY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Okhv
c3QgfHwgY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uICE9IGFycmF5UHJvdG9GdW5jSm9pbikKKyAg
ICBpZiAoIWlzSlNBcnJheSh0aGlzT2JqZWN0KSB8fCBjYWxsVHlwZSAhPSBDYWxsVHlwZTo6SG9z
dCB8fCBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gIT0gYXJyYXlQcm90b0Z1bmNKb2luKSB7Cisg
ICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShj
YWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNPYmplY3QsIGV4ZWMt
PmVtcHR5TGlzdCgpKSk7CisgICAgfQogCiAgICAgQVNTRVJUKGlzSlNBcnJheSh0aGlzVmFsdWUp
KTsKICAgICBKU0FycmF5KiB0aGlzQXJyYXkgPSBhc0FycmF5KHRoaXNWYWx1ZSk7CkBAIC0zODcs
MjIgKzQyMiwyNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc0FycmF5LT5sZW5ndGgoKTsKIAogICAgIFN0cmluZ1Jl
Y3Vyc2lvbkNoZWNrZXIgY2hlY2tlcihleGVjLCB0aGlzQXJyYXkpOworICAgIEFTU0VSVCghc2Nv
cGUuZXhjZXB0aW9uKCkgfHwgY2hlY2tlci5lYXJseVJldHVyblZhbHVlKCkpOwogICAgIGlmIChK
U1ZhbHVlIGVhcmx5UmV0dXJuVmFsdWUgPSBjaGVja2VyLmVhcmx5UmV0dXJuVmFsdWUoKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShlYXJseVJldHVyblZhbHVlKTsKIAogICAgIEpT
U3RyaW5nSm9pbmVyIGpvaW5lcigqZXhlYywgJywnLCBsZW5ndGgpOwotICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpIHsKICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdGhpc0FycmF5LT50cnlHZXRJbmRleFF1
aWNrbHkoaSk7CiAgICAgICAgIGlmICghZWxlbWVudCkgewogICAgICAgICAgICAgZWxlbWVudCA9
IHRoaXNBcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogICAgICAgICB9CiAgICAgICAgIGpvaW5lci5hcHBlbmQoKmV4ZWMs
IGVsZW1lbnQpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICB9
CiAKKyAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqb2lu
ZXIuam9pbigqZXhlYykpOwogfQogCkBAIC00MTMsNTcgKzQ1MCw1OSBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVj
LT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSk7CiAKICAgICBKU09iamVjdCog
dGhpc09iamVjdCA9IHRoaXNWYWx1ZS50b09iamVjdChleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gZ2V0TGVuZ3RoKGV4ZWMsIHRo
aXNPYmplY3QpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBTdHJpbmdS
ZWN1cnNpb25DaGVja2VyIGNoZWNrZXIoZXhlYywgdGhpc09iamVjdCk7CisgICAgQVNTRVJUKCFz
Y29wZS5leGNlcHRpb24oKSB8fCBjaGVja2VyLmVhcmx5UmV0dXJuVmFsdWUoKSk7CiAgICAgaWYg
KEpTVmFsdWUgZWFybHlSZXR1cm5WYWx1ZSA9IGNoZWNrZXIuZWFybHlSZXR1cm5WYWx1ZSgpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGVhcmx5UmV0dXJuVmFsdWUpOwogCiAgICAg
SlNTdHJpbmdKb2luZXIgc3RyaW5nSm9pbmVyKCpleGVjLCAnLCcsIGxlbmd0aCk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogI2lmIEVOQUJMRShJTlRMKQogICAgIEFyZ0xpc3Qg
YXJndW1lbnRzKGV4ZWMpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsr
aSkgewogICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB0aGlzT2JqZWN0LT5nZXRJbmRleChleGVj
LCBpKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgIGlm
IChlbGVtZW50LmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgICAgICBlbGVtZW50ID0ganNF
bXB0eVN0cmluZyhleGVjKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBKU1ZhbHVlIGNv
bnZlcnNpb25GdW5jdGlvbiA9IGVsZW1lbnQuZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS50b0xvY2FsZVN0cmluZyk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAgICAgICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICAgICAgICAgIENh
bGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoY29udmVyc2lvbkZ1bmN0aW9uLCBjYWxsRGF0
YSk7CiAgICAgICAgICAgICBpZiAoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpIHsKICAgICAg
ICAgICAgICAgICBlbGVtZW50ID0gY2FsbChleGVjLCBjb252ZXJzaW9uRnVuY3Rpb24sIGNhbGxU
eXBlLCBjYWxsRGF0YSwgZWxlbWVudCwgYXJndW1lbnRzKTsKLSAgICAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIHN0cmluZ0pvaW5lci5hcHBlbmQoKmV4ZWMsIGVsZW1lbnQpOwotICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICB9CiAjZWxzZSAvLyAhRU5BQkxF
KElOVEwpCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAg
ICAgIEpTVmFsdWUgZWxlbWVudCA9IHRoaXNPYmplY3QtPmdldEluZGV4KGV4ZWMsIGkpOwotICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgaWYgKGVsZW1lbnQu
aXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBKU1Zh
bHVlIGNvbnZlcnNpb25GdW5jdGlvbiA9IGVsZW1lbnQuZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS50b0xvY2FsZVN0cmluZyk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICAgICAgQ2FsbFR5cGUgY2Fs
bFR5cGUgPSBnZXRDYWxsRGF0YShjb252ZXJzaW9uRnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICAg
ICAgaWYgKGNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25lKSB7CiAgICAgICAgICAgICBlbGVtZW50
ID0gY2FsbChleGVjLCBjb252ZXJzaW9uRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgZWxl
bWVudCwgZXhlYy0+ZW1wdHlMaXN0KCkpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogICAgICAgICB9CiAgICAgICAgIHN0cmluZ0pvaW5lci5hcHBlbmQo
KmV4ZWMsIGVsZW1lbnQpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
ICAgICB9CiAjZW5kaWYgLy8gIUVOQUJMRShJTlRMKQogCisgICAgc2NvcGUucmVsZWFzZSgpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc3RyaW5nSm9pbmVyLmpvaW4oKmV4ZWMpKTsKIH0K
IApAQCAtNTAzLDcgKzU0Miw3IEBAIHN0YXRpYyBKU1ZhbHVlIHNsb3dKb2luKEV4ZWNTdGF0ZSYg
ZXhlYywKIAogICAgIC8vIDYuIExldCBlbGVtZW50MCBiZSBHZXQoTywgIjAiKS4KICAgICBKU1Zh
bHVlIGVsZW1lbnQwID0gdGhpc09iamVjdC0+Z2V0SW5kZXgoJmV4ZWMsIDApOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKIAogICAgIC8vIDcuIElmIGVsZW1lbnQwIGlzIHVuZGVmaW5lZCBvciBu
dWxsLCBsZXQgUiBiZSB0aGUgZW1wdHkgU3RyaW5nOyBvdGhlcndpc2UsIGxldCBSIGJlID8gVG9T
dHJpbmcoZWxlbWVudDApLgogICAgIEpTU3RyaW5nKiByID0gbnVsbHB0cjsKQEAgLTUxMSw3ICs1
NTAsNyBAQCBzdGF0aWMgSlNWYWx1ZSBzbG93Sm9pbihFeGVjU3RhdGUmIGV4ZWMsCiAgICAgICAg
IHIgPSBqc0VtcHR5U3RyaW5nKCZleGVjKTsKICAgICBlbHNlCiAgICAgICAgIHIgPSBlbGVtZW50
MC50b1N0cmluZygmZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1
ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgLy8gOC4g
TGV0IGsgYmUgMS4KICAgICAvLyA5LiBSZXBlYXQsIHdoaWxlIGsgPCBsZW4KQEAgLTUxOSw3ICs1
NTgsNyBAQCBzdGF0aWMgSlNWYWx1ZSBzbG93Sm9pbihFeGVjU3RhdGUmIGV4ZWMsCiAgICAgZm9y
ICh1aW50NjRfdCBrID0gMTsgayA8IGxlbmd0aDsgKytrKSB7CiAgICAgICAgIC8vIGIuIExldCBl
bGVtZW50IGJlID8gR2V0KE8sICEgVG9TdHJpbmcoaykpLgogICAgICAgICBKU1ZhbHVlIGVsZW1l
bnQgPSB0aGlzT2JqZWN0LT5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMs
IEF0b21pY1N0cmluZzo6bnVtYmVyKGspKSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CiAKICAgICAgICAgLy8gYy4gSWYgZWxlbWVudCBpcyB1bmRlZmluZWQgb3IgbnVsbCwgbGV0
IG5leHQgYmUgdGhlIGVtcHR5IFN0cmluZzsgb3RoZXJ3aXNlLCBsZXQgbmV4dCBiZSA/IFRvU3Ry
aW5nKGVsZW1lbnQpLgogICAgICAgICBKU1N0cmluZyogbmV4dCA9IG51bGxwdHI7CkBAIC01Mjks
MTIgKzU2OCwxMiBAQCBzdGF0aWMgSlNWYWx1ZSBzbG93Sm9pbihFeGVjU3RhdGUmIGV4ZWMsCiAg
ICAgICAgICAgICBuZXh0ID0ganNFbXB0eVN0cmluZygmZXhlYyk7CiAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgbmV4dCA9IGVsZW1lbnQudG9TdHJpbmcoJmV4ZWMpOwotICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgICAgIC8vIGEuIExldCBTIGJlIHRoZSBTdHJpbmcg
dmFsdWUgcHJvZHVjZWQgYnkgY29uY2F0ZW5hdGluZyBSIGFuZCBzZXAuCiAgICAgICAgIC8vIGQu
IExldCBSIGJlIGEgU3RyaW5nIHZhbHVlIHByb2R1Y2VkIGJ5IGNvbmNhdGVuYXRpbmcgUyBhbmQg
bmV4dC4KICAgICAgICAgciA9IGpzU3RyaW5nKCZleGVjLCByLCBzZXBhcmF0b3IsIG5leHQpOwot
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOworICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIH0KICAgICAvLyAxMC4gUmV0dXJu
IFIuCiAgICAgcmV0dXJuIHI7CkBAIC01NjUsNyArNjA0LDcgQEAgc3RhdGljIGlubGluZSBKU1Zh
bHVlIGZhc3RKb2luKEV4ZWNTdGF0ZQogICAgICAgICBpZiAobGVuZ3RoID4gYnV0dGVyZmx5LnB1
YmxpY0xlbmd0aCgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIEpTU3RyaW5nSm9pbmVy
IGpvaW5lcihzdGF0ZSwgc2VwYXJhdG9yLCBsZW5ndGgpOwotICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwogICAgICAgICBhdXRvIGRhdGEgPSBidXR0ZXJmbHkuY29udGlndW91cygpLmRh
dGEoKTsKICAgICAgICAgYm9vbCBob2xlc0tub3duVG9CZU9LID0gZmFsc2U7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewpAQCAtNTgxLDYgKzYyMCw3IEBA
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBmYXN0Sm9pbihFeGVjU3RhdGUKICAgICAgICAgICAgICAg
ICBqb2luZXIuYXBwZW5kRW1wdHlTdHJpbmcoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQor
ICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIHJldHVybiBqb2luZXIuam9pbihzdGF0
ZSk7CiAgICAgfQogICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogewpAQCAtNTg4
LDcgKzYyOCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBmYXN0Sm9pbihFeGVjU3RhdGUKICAg
ICAgICAgaWYgKGxlbmd0aCA+IGJ1dHRlcmZseS5wdWJsaWNMZW5ndGgoKSkKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBKU1N0cmluZ0pvaW5lciBqb2luZXIoc3RhdGUsIHNlcGFyYXRvciwg
bGVuZ3RoKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsK
KyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgYXV0byBk
YXRhID0gYnV0dGVyZmx5LmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCk7CiAgICAgICAgIGJvb2wg
aG9sZXNLbm93blRvQmVPSyA9IGZhbHNlOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpIHsKQEAgLTYwNCwxOSArNjQ0LDIxIEBAIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBmYXN0Sm9pbihFeGVjU3RhdGUKICAgICAgICAgICAgICAgICBqb2luZXIuYXBwZW5kRW1w
dHlTdHJpbmcoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBzY29wZS5yZWxl
YXNlKCk7CiAgICAgICAgIHJldHVybiBqb2luZXIuam9pbihzdGF0ZSk7CiAgICAgfQogICAgIH0K
IAogZ2VuZXJhbENhc2U6CiAgICAgSlNTdHJpbmdKb2luZXIgam9pbmVyKHN0YXRlLCBzZXBhcmF0
b3IsIGxlbmd0aCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB0aGlz
T2JqZWN0LT5nZXRJbmRleCgmc3RhdGUsIGkpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwogICAgICAgICBqb2luZXIuYXBwZW5kKHN0YXRlLCBlbGVtZW50KTsKLSAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKICAgICB9CisgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIHJl
dHVybiBqb2luZXIuam9pbihzdGF0ZSk7CiB9CiAKQEAgLTYyNywxNiArNjY5LDE4IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAogICAgIC8vIDEuIExldCBPIGJl
ID8gVG9PYmplY3QodGhpcyB2YWx1ZSkuCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBleGVj
LT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7Cisg
ICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCAhdGhpc09iamVjdCk7CiAgICAgaWYgKCF0
aGlzT2JqZWN0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7Cisg
ICAgICAgIHJldHVybiB7IH07CiAKICAgICBTdHJpbmdSZWN1cnNpb25DaGVja2VyIGNoZWNrZXIo
ZXhlYywgdGhpc09iamVjdCk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCBjaGVj
a2VyLmVhcmx5UmV0dXJuVmFsdWUoKSk7CiAgICAgaWYgKEpTVmFsdWUgZWFybHlSZXR1cm5WYWx1
ZSA9IGNoZWNrZXIuZWFybHlSZXR1cm5WYWx1ZSgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGVhcmx5UmV0dXJuVmFsdWUpOwogCiAgICAgLy8gMi4gTGV0IGxlbiBiZSA/IFRvTGVu
Z3RoKD8gR2V0KE8sICJsZW5ndGgiKSkuCiAgICAgZG91YmxlIGxlbmd0aCA9IHRvTGVuZ3RoKGV4
ZWMsIHRoaXNPYmplY3QpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICAv
LyAzLiBJZiBzZXBhcmF0b3IgaXMgdW5kZWZpbmVkLCBsZXQgc2VwYXJhdG9yIGJlIHRoZSBzaW5n
bGUtZWxlbWVudCBTdHJpbmcgIiwiLgogICAgIEpTVmFsdWUgc2VwYXJhdG9yVmFsdWUgPSBleGVj
LT5hcmd1bWVudCgwKTsKQEAgLTY0NywyOCArNjkxLDMzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAgIHVpbnQ2NF90IGxlbmd0aDY0ID0gc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KGxlbmd0aCk7CiAgICAgICAgICAgICBBU1NFUlQoc3RhdGljX2Nh
c3Q8ZG91YmxlPihsZW5ndGg2NCkgPT0gbGVuZ3RoKTsKICAgICAgICAgICAgIEpTU3RyaW5nKiBq
c1NlcGFyYXRvciA9IGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV4ZWMsIGNvbW1hKTsKLSAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAorICAgICAgICAgICAg
c2NvcGUucmVsZWFzZSgpOwogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzbG93
Sm9pbigqZXhlYywgdGhpc09iamVjdCwganNTZXBhcmF0b3IsIGxlbmd0aDY0KSk7CiAgICAgICAg
IH0KIAogICAgICAgICB1bnNpZ25lZCB1bnNpZ25lZExlbmd0aCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihsZW5ndGgpOwogICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8ZG91YmxlPih1bnNpZ25l
ZExlbmd0aCkgPT0gbGVuZ3RoKTsKKworICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZmFzdEpvaW4oKmV4ZWMsIHRoaXNPYmplY3QsIHsgJmNv
bW1hLCAxIH0sIHVuc2lnbmVkTGVuZ3RoKSk7CiAgICAgfQogCiAgICAgLy8gNC4gTGV0IHNlcCBi
ZSA/IFRvU3RyaW5nKHNlcGFyYXRvcikuCiAgICAgSlNTdHJpbmcqIGpzU2VwYXJhdG9yID0gc2Vw
YXJhdG9yVmFsdWUudG9TdHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKIAogICAgIGlmIChVTkxJS0VMWShsZW5ndGggPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkPjo6bWF4KCkgfHwgIWNhblVzZUZhc3RKb2luKHRoaXNPYmplY3QpKSkgewogICAgICAgICB1
aW50NjRfdCBsZW5ndGg2NCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihsZW5ndGgpOwogICAgICAg
ICBBU1NFUlQoc3RhdGljX2Nhc3Q8ZG91YmxlPihsZW5ndGg2NCkgPT0gbGVuZ3RoKTsKKworICAg
ICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc2xv
d0pvaW4oKmV4ZWMsIHRoaXNPYmplY3QsIGpzU2VwYXJhdG9yLCBsZW5ndGg2NCkpOwogICAgIH0K
IAogICAgIGF1dG8gdmlld1dpdGhTdHJpbmcgPSBqc1NlcGFyYXRvci0+dmlld1dpdGhVbmRlcmx5
aW5nU3RyaW5nKCpleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAg
c2NvcGUucmVsZWFzZSgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZmFzdEpvaW4oKmV4
ZWMsIHRoaXNPYmplY3QsIHZpZXdXaXRoU3RyaW5nLnZpZXcsIGxlbmd0aCkpOwpAQCAtNjgxLDI4
ICs3MzAsMzQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiAg
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3Ry
aWN0TW9kZSk7CiAKLSAgICBpZiAoaXNKU0FycmF5KHRoaXNWYWx1ZSkpCisgICAgaWYgKGlzSlNB
cnJheSh0aGlzVmFsdWUpKSB7CisgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShhc0FycmF5KHRoaXNWYWx1ZSktPnBvcChleGVjKSk7CisgICAg
fQogCiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUudG9PYmplY3QoZXhlYyk7Cisg
ICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCAhdGhpc09iaik7CiAgICAgaWYgKCF0aGlz
T2JqKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgICAg
IHJldHVybiB7IH07CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gZ2V0TGVuZ3RoKGV4ZWMsIHRoaXNP
YmopOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKLSAgICBKU1ZhbHVlIHJlc3Vs
dDsKICAgICBpZiAobGVuZ3RoID09IDApIHsKKyAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAg
ICAgICBwdXRMZW5ndGgoZXhlYywgdm0sIHRoaXNPYmosIGpzTnVtYmVyKGxlbmd0aCkpOwotICAg
ICAgICByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc3Vs
dCA9IHRoaXNPYmotPmdldChleGVjLCBsZW5ndGggLSAxKTsKLSAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgICAgIGlmICghdGhpc09iai0+
bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iaiwgZXhlYywgbGVu
Z3RoIC0gMSkpIHsKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJ
SUxpdGVyYWwoVW5hYmxlVG9EZWxldGVQcm9wZXJ0eUVycm9yKSk7Ci0gICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgICAgICB9Ci0gICAgICAgIHB1
dExlbmd0aChleGVjLCB2bSwgdGhpc09iaiwganNOdW1iZXIobGVuZ3RoIC0gMSkpOworICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0KKworICAgIEpT
VmFsdWUgcmVzdWx0ID0gdGhpc09iai0+Z2V0KGV4ZWMsIGxlbmd0aCAtIDEpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgYm9vbCBzdWNjZXNzID0gdGhpc09iai0+
bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iaiwgZXhlYywgbGVu
Z3RoIC0gMSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBpZiAo
IXN1Y2Nlc3MpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0
ZXJhbChVbmFibGVUb0RlbGV0ZVByb3BlcnR5RXJyb3IpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
ICAgICB9CisgICAgc2NvcGUucmVsZWFzZSgpOworICAgIHB1dExlbmd0aChleGVjLCB2bSwgdGhp
c09iaiwganNOdW1iZXIobGVuZ3RoIC0gMSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKIH0KIApAQCAtNzE0LDE1ICs3NjksMTcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRgogCiAgICAgaWYgKGlzSlNBcnJheSh0aGlzVmFsdWUpICYmIGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSA9PSAxKSB7CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNB
cnJheSh0aGlzVmFsdWUpOworICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIGFycmF5
LT5wdXNoKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc051bWJlcihhcnJheS0+bGVuZ3RoKCkpKTsKICAgICB9CiAgICAg
CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUudG9PYmplY3QoZXhlYyk7CisgICAg
QVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCAhdGhpc09iaik7CiAgICAgaWYgKCF0aGlzT2Jq
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgICAgIHJl
dHVybiB7IH07CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gZ2V0TGVuZ3RoKGV4ZWMsIHRoaXNPYmop
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIG4g
PSAwOyBuIDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyBuKyspIHsKICAgICAgICAgLy8gQ2hlY2sg
Zm9yIGludGVnZXIgb3ZlcmZsb3c7IHdoZXJlIHNhZmUgd2UgY2FuIGRvIGEgZmFzdCBwdXQgYnkg
aW5kZXguCkBAIC03MzMsMTAgKzc5MCwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GCiAgICAgICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IElkZW50
aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgSlNWYWx1ZShzdGF0aWNfY2FzdDxpbnQ2NF90PihsZW5n
dGgpICsgc3RhdGljX2Nhc3Q8aW50NjRfdD4obikpLnRvV1RGU3RyaW5nKGV4ZWMpKTsKICAgICAg
ICAgICAgIHRoaXNPYmotPm1ldGhvZFRhYmxlKCktPnB1dCh0aGlzT2JqLCBleGVjLCBwcm9wZXJ0
eU5hbWUsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KG4pLCBzbG90KTsKICAgICAgICAgfQotICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICB9CiAgICAgCiAgICAgSlNW
YWx1ZSBuZXdMZW5ndGgoc3RhdGljX2Nhc3Q8aW50NjRfdD4obGVuZ3RoKSArIHN0YXRpY19jYXN0
PGludDY0X3Q+KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSkpOworICAgIHNjb3BlLnJlbGVhc2UoKTsK
ICAgICBwdXRMZW5ndGgoZXhlYywgdm0sIHRoaXNPYmosIG5ld0xlbmd0aCk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShuZXdMZW5ndGgpOwogfQpAQCAtNzQ3LDExICs4MDUsMTIgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhl
Yy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwor
ICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgIXRoaXNPYmplY3QpOwogICAgIGlmICgh
dGhpc09iamVjdCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwor
ICAgICAgICByZXR1cm4geyB9OwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gZ2V0TGVuZ3RoKGV4
ZWMsIHRoaXNPYmplY3QpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBz
d2l0Y2ggKHRoaXNPYmplY3QtPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBTExfQ09OVElH
VU9VU19JTkRFWElOR19UWVBFUzoKQEAgLTc5MSwzNyArODUwLDQzIEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBmb3IgKHVuc2lnbmVkIGxvd2VyID0gMDsg
bG93ZXIgPCBtaWRkbGU7IGxvd2VyKyspIHsKICAgICAgICAgdW5zaWduZWQgdXBwZXIgPSBsZW5n
dGggLSBsb3dlciAtIDE7CiAgICAgICAgIGJvb2wgbG93ZXJFeGlzdHMgPSB0aGlzT2JqZWN0LT5o
YXNQcm9wZXJ0eShleGVjLCBsb3dlcik7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogICAgICAgICBKU1ZhbHVlIGxvd2VyVmFsdWU7CiAgICAgICAgIGlmIChsb3dlckV4
aXN0cykgewogICAgICAgICAgICAgbG93ZXJWYWx1ZSA9IHRoaXNPYmplY3QtPmdldChleGVjLCBs
b3dlcik7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAg
ICAgICAgIH0KIAogICAgICAgICBib29sIHVwcGVyRXhpc3RzID0gdGhpc09iamVjdC0+aGFzUHJv
cGVydHkoZXhlYywgdXBwZXIpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKICAgICAgICAgSlNWYWx1ZSB1cHBlclZhbHVlOwogICAgICAgICBpZiAodXBwZXJFeGlzdHMp
IHsKICAgICAgICAgICAgIHVwcGVyVmFsdWUgPSB0aGlzT2JqZWN0LT5nZXQoZXhlYywgdXBwZXIp
OwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAg
ICB9CiAKICAgICAgICAgaWYgKHVwcGVyRXhpc3RzKSB7CiAgICAgICAgICAgICB0aGlzT2JqZWN0
LT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIGxvd2VyLCB1cHBlclZhbHVlLCB0cnVlKTsKLSAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAg
ICAgICB9IGVsc2UgaWYgKCF0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3Bl
cnR5QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBsb3dlcikpIHsKLSAgICAgICAgICAgIGlmICgh
c2NvcGUuZXhjZXB0aW9uKCkpCisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gdGhp
c09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVj
dCwgZXhlYywgbG93ZXIpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKKyAgICAgICAgICAgIGlmICghc3VjY2VzcykgewogICAgICAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoVW5hYmxlVG9EZWxldGVQcm9wZXJ0
eUVycm9yKSk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQog
CiAgICAgICAgIGlmIChsb3dlckV4aXN0cykgewogICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0
QnlJbmRleElubGluZShleGVjLCB1cHBlciwgbG93ZXJWYWx1ZSwgdHJ1ZSk7Ci0gICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICAgICAg
fSBlbHNlIGlmICghdGhpc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5
SW5kZXgodGhpc09iamVjdCwgZXhlYywgdXBwZXIpKSB7Ci0gICAgICAgICAgICBpZiAoIXNjb3Bl
LmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IHRoaXNPYmpl
Y3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4
ZWMsIHVwcGVyKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKICAgICAgICAgICAgICAgICB0aHJvd1R5cGVF
cnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKFVuYWJsZVRvRGVsZXRlUHJvcGVydHlFcnJv
cikpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAg
ICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzT2JqZWN0KTsKQEAgLTgzMiwyMSArODk3
LDI0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBKU09iamVjdCogdGhpc09iaiA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVj
LCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlv
bigpIHx8ICF0aGlzT2JqKTsKICAgICBpZiAoIXRoaXNPYmopCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKIAotICAgIEpTVmFsdWUgcmVzdWx0OwogICAgIGlmIChsZW5ndGggPT0gMCkg
eworICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIHB1dExlbmd0aChleGVjLCB2bSwg
dGhpc09iaiwganNOdW1iZXIobGVuZ3RoKSk7Ci0gICAgICAgIHJlc3VsdCA9IGpzVW5kZWZpbmVk
KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0ID0gdGhpc09iai0+Z2V0SW5kZXgoZXhl
YywgMCk7Ci0gICAgICAgIHNoaWZ0PEpTQXJyYXk6OlNoaWZ0Q291bnRGb3JTaGlmdD4oZXhlYywg
dGhpc09iaiwgMCwgMSwgMCwgbGVuZ3RoKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgICAgIHB1dExlbmd0aChleGVjLCB2bSwgdGhp
c09iaiwganNOdW1iZXIobGVuZ3RoIC0gMSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KKworICAgIEpTVmFsdWUgcmVzdWx0ID0gdGhpc09i
ai0+Z2V0SW5kZXgoZXhlYywgMCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKKyAgICBzaGlmdDxKU0FycmF5OjpTaGlmdENvdW50Rm9yU2hpZnQ+KGV4ZWMsIHRoaXNPYmos
IDAsIDEsIDAsIGxlbmd0aCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
KyAgICBzY29wZS5yZWxlYXNlKCk7CisgICAgcHV0TGVuZ3RoKGV4ZWMsIHZtLCB0aGlzT2JqLCBq
c051bWJlcihsZW5ndGggLSAxKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OwogfQogCkBAIC04NTYsMjAgKzkyNCwyNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSBleGVjLT50
aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7CisgICAg
QVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCAhdGhpc09iaik7CiAgICAgaWYgKCF0aGlzT2Jq
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgICAgIHJl
dHVybiB7IH07CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gZ2V0TGVuZ3RoKGV4ZWMsIHRoaXNPYmop
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICB1bnNpZ25lZCBiZWdpbiA9
IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMCwgbGVuZ3RoKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIHVuc2lnbmVkIGVuZCA9IGFy
Z3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMSwgbGVuZ3RoLCBsZW5ndGgp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBzdGQ6OnBhaXI8
U3BlY2llc0NvbnN0cnVjdFJlc3VsdCwgSlNPYmplY3QqPiBzcGVjaWVzUmVzdWx0ID0gc3BlY2ll
c0NvbnN0cnVjdEFycmF5KGV4ZWMsIHRoaXNPYmosIGVuZCAtIGJlZ2luKTsKICAgICAvLyBXZSBj
YW4gb25seSBnZXQgYW4gZXhjZXB0aW9uIGlmIHdlIGNhbGwgc29tZSB1c2VyIGZ1bmN0aW9uLgor
ICAgIEFTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09IChzcGVjaWVzUmVzdWx0LmZpcnN0ID09
IFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkV4Y2VwdGlvbikpOwogICAgIGlmIChVTkxJS0VMWShz
cGVjaWVzUmVzdWx0LmZpcnN0ID09IFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkV4Y2VwdGlvbikp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAg
IHJldHVybiB7IH07CiAKLSAgICBpZiAoTElLRUxZKHNwZWNpZXNSZXN1bHQuZmlyc3QgPT0gU3Bl
Y2llc0NvbnN0cnVjdFJlc3VsdDo6RmFzdFBhdGggJiYgaXNKU0FycmF5KHRoaXNPYmopICYmIGxl
bmd0aCA9PSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaikpKSB7CisgICAgYm9vbCBva1RvRG9GYXN0
UGF0aCA9IHNwZWNpZXNSZXN1bHQuZmlyc3QgPT0gU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RmFz
dFBhdGggJiYgaXNKU0FycmF5KHRoaXNPYmopICYmIGxlbmd0aCA9PSBnZXRMZW5ndGgoZXhlYywg
dGhpc09iaik7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBpZiAo
TElLRUxZKG9rVG9Eb0Zhc3RQYXRoKSkgewogICAgICAgICBpZiAoSlNBcnJheSogcmVzdWx0ID0g
YXNBcnJheSh0aGlzT2JqKS0+ZmFzdFNsaWNlKCpleGVjLCBiZWdpbiwgZW5kIC0gYmVnaW4pKQog
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KQEAgLTg3
OSwxNSArOTUzLDE3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YK
ICAgICAgICAgcmVzdWx0ID0gc3BlY2llc1Jlc3VsdC5zZWNvbmQ7CiAgICAgZWxzZSB7CiAgICAg
ICAgIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgZW5kIC0gYmVn
aW4pOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICB9CiAKICAg
ICB1bnNpZ25lZCBuID0gMDsKICAgICBmb3IgKHVuc2lnbmVkIGsgPSBiZWdpbjsgayA8IGVuZDsg
aysrLCBuKyspIHsKICAgICAgICAgSlNWYWx1ZSB2ID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09i
aiwgayk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwotICAgICAgICBpZiAodikKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKKyAgICAgICAgaWYgKHYpIHsKICAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5k
ZXgoZXhlYywgbiwgdiwgMCwgUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyk7CisgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICB9CiAgICAgfQogICAg
IHNjb3BlLnJlbGVhc2UoKTsKICAgICBzZXRMZW5ndGgoZXhlYywgdm0sIHJlc3VsdCwgbik7CkBA
IC05MDIsMzYgKzk3OCw0MCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJv
dG9GCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNP
YmplY3QqIHRoaXNPYmogPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9k
ZSkudG9PYmplY3QoZXhlYyk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCAhdGhp
c09iaik7CiAgICAgaWYgKCF0aGlzT2JqKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgdW5zaWduZWQgbGVuZ3RoID0g
Z2V0TGVuZ3RoKGV4ZWMsIHRoaXNPYmopOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CiAKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkgewogICAgICAgICBzdGQ6OnBhaXI8
U3BlY2llc0NvbnN0cnVjdFJlc3VsdCwgSlNPYmplY3QqPiBzcGVjaWVzUmVzdWx0ID0gc3BlY2ll
c0NvbnN0cnVjdEFycmF5KGV4ZWMsIHRoaXNPYmosIDApOworICAgICAgICBBU1NFUlQoISFzY29w
ZS5leGNlcHRpb24oKSA9PSAoc3BlY2llc1Jlc3VsdC5maXJzdCA9PSBTcGVjaWVzQ29uc3RydWN0
UmVzdWx0OjpFeGNlcHRpb24pKTsKICAgICAgICAgaWYgKHNwZWNpZXNSZXN1bHQuZmlyc3QgPT0g
U3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RXhjZXB0aW9uKQotICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CiAK
ICAgICAgICAgSlNPYmplY3QqIHJlc3VsdDsKICAgICAgICAgaWYgKHNwZWNpZXNSZXN1bHQuZmly
c3QgPT0gU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6Q3JlYXRlZE9iamVjdCkKICAgICAgICAgICAg
IHJlc3VsdCA9IHNwZWNpZXNSZXN1bHQuc2Vjb25kOwogICAgICAgICBlbHNlIHsKICAgICAgICAg
ICAgIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0cik7Ci0gICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgIH0KIAogICAg
ICAgICBzZXRMZW5ndGgoZXhlYywgdm0sIHJlc3VsdCwgMCk7Ci0gICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIHNl
dExlbmd0aChleGVjLCB2bSwgdGhpc09iaiwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KIAogICAgIHVuc2lnbmVkIGFjdHVhbFN0YXJ0ID0g
YXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAwLCBsZW5ndGgpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICB1bnNpZ25lZCBhY3R1YWxE
ZWxldGVDb3VudCA9IGxlbmd0aCAtIGFjdHVhbFN0YXJ0OwogICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPiAxKSB7CiAgICAgICAgIGRvdWJsZSBkZWxldGVDb3VudCA9IGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDEpLnRvSW50ZWdlcihleGVjKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKICAgICAgICAgaWYgKGRlbGV0ZUNvdW50IDwgMCkKICAgICAgICAg
ICAgIGFjdHVhbERlbGV0ZUNvdW50ID0gMDsKICAgICAgICAgZWxzZSBpZiAoZGVsZXRlQ291bnQg
PiBsZW5ndGggLSBhY3R1YWxTdGFydCkKQEAgLTk0MSwxMSArMTAyMSwxNCBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgfQogCiAgICAgc3RkOjpwYWlyPFNw
ZWNpZXNDb25zdHJ1Y3RSZXN1bHQsIEpTT2JqZWN0Kj4gc3BlY2llc1Jlc3VsdCA9IHNwZWNpZXND
b25zdHJ1Y3RBcnJheShleGVjLCB0aGlzT2JqLCBhY3R1YWxEZWxldGVDb3VudCk7CisgICAgQVNT
RVJUKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gKHNwZWNpZXNSZXN1bHQuZmlyc3QgPT0gU3BlY2ll
c0NvbnN0cnVjdFJlc3VsdDo6RXhjZXB0aW9uKSk7CiAgICAgaWYgKHNwZWNpZXNSZXN1bHQuZmly
c3QgPT0gU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RXhjZXB0aW9uKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNPYmplY3QqIHJlc3VsdCA9
IG51bGxwdHI7Ci0gICAgaWYgKHNwZWNpZXNSZXN1bHQuZmlyc3QgPT0gU3BlY2llc0NvbnN0cnVj
dFJlc3VsdDo6RmFzdFBhdGggJiYgaXNKU0FycmF5KHRoaXNPYmopICYmIGxlbmd0aCA9PSBnZXRM
ZW5ndGgoZXhlYywgdGhpc09iaikpCisgICAgYm9vbCBva1RvRG9GYXN0UGF0aCA9IHNwZWNpZXNS
ZXN1bHQuZmlyc3QgPT0gU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RmFzdFBhdGggJiYgaXNKU0Fy
cmF5KHRoaXNPYmopICYmIGxlbmd0aCA9PSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBpZiAoTElLRUxZKG9rVG9Eb0Zh
c3RQYXRoKSkKICAgICAgICAgcmVzdWx0ID0gYXNBcnJheSh0aGlzT2JqKS0+ZmFzdFNsaWNlKCpl
eGVjLCBhY3R1YWxTdGFydCwgYWN0dWFsRGVsZXRlQ291bnQpOwogCiAgICAgaWYgKCFyZXN1bHQp
IHsKQEAgLTk1NCwxMSArMTAzNywxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GCiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7
IGsgPCBhY3R1YWxEZWxldGVDb3VudDsgKytrKSB7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2
ID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgayArIGFjdHVhbFN0YXJ0KTsKLSAgICAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAg
ICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICAg
ICAgICAgIGlmIChVTkxJS0VMWSghdikpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgICAgIHJlc3VsdC0+cHV0QnlJbmRleElubGluZShleGVjLCBrLCB2LCB0cnVl
KTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcmVzdWx0ID0g
SlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJy
YXlXaXRoVW5kZWNpZGVkKSwgYWN0dWFsRGVsZXRlQ291bnQpOwpAQCAtOTY3LDcgKzEwNTAsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBhY3R1YWxEZWxldGVDb3VudDsg
KytrKSB7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2ID0gZ2V0UHJvcGVydHkoZXhlYywgdGhp
c09iaiwgayArIGFjdHVhbFN0YXJ0KTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWSghdikp
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIHJlc3VsdC0+
aW5pdGlhbGl6ZUluZGV4KHZtLCBrLCB2KTsKQEAgLTk3OCwxNCArMTA2MSwxNCBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgdW5zaWduZWQgaXRlbUNvdW50
ID0gc3RkOjptYXg8aW50PihleGVjLT5hcmd1bWVudENvdW50KCkgLSAyLCAwKTsKICAgICBpZiAo
aXRlbUNvdW50IDwgYWN0dWFsRGVsZXRlQ291bnQpIHsKICAgICAgICAgc2hpZnQ8SlNBcnJheTo6
U2hpZnRDb3VudEZvclNwbGljZT4oZXhlYywgdGhpc09iaiwgYWN0dWFsU3RhcnQsIGFjdHVhbERl
bGV0ZUNvdW50LCBpdGVtQ291bnQsIGxlbmd0aCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwogICAgIH0gZWxzZSBpZiAoaXRlbUNvdW50ID4gYWN0dWFsRGVsZXRlQ291
bnQpIHsKICAgICAgICAgdW5zaGlmdDxKU0FycmF5OjpTaGlmdENvdW50Rm9yU3BsaWNlPihleGVj
LCB0aGlzT2JqLCBhY3R1YWxTdGFydCwgYWN0dWFsRGVsZXRlQ291bnQsIGl0ZW1Db3VudCwgbGVu
Z3RoKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgfQogICAg
IGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBpdGVtQ291bnQ7ICsraykgewogICAgICAgICB0aGlz
T2JqLT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIGsgKyBhY3R1YWxTdGFydCwgZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoayArIDIpLCB0cnVlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAgICAgfQogICAgIAogICAgIHNjb3BlLnJlbGVhc2UoKTsKQEAgLTEwMDAsMjEg
KzEwODMsMjMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAg
IC8vIDE1LjQuNC4xMwogCiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSBleGVjLT50aGlzVmFsdWUo
KS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7CisgICAgQVNTRVJUKCEh
c2NvcGUuZXhjZXB0aW9uKCkgPT0gIXRoaXNPYmopOwogICAgIGlmICghdGhpc09iaikKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgICAgICByZXR1cm4geyB9
OwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgdW5zaWduZWQgbnJBcmdzID0gZXhlYy0+
YXJndW1lbnRDb3VudCgpOwogICAgIGlmIChuckFyZ3MpIHsKICAgICAgICAgdW5zaGlmdDxKU0Fy
cmF5OjpTaGlmdENvdW50Rm9yU2hpZnQ+KGV4ZWMsIHRoaXNPYmosIDAsIDAsIG5yQXJncywgbGVu
Z3RoKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgfQogICAg
IGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBuckFyZ3M7ICsraykgewogICAgICAgICB0aGlzT2Jq
LT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIGssIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGspLCB0
cnVlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgfQogICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIobGVuZ3RoICsgbnJBcmdzKTsKKyAgICBzY29wZS5y
ZWxlYXNlKCk7CiAgICAgcHV0TGVuZ3RoKGV4ZWMsIHZtLCB0aGlzT2JqLCByZXN1bHQpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KQEAgLTEwMjYsMjEgKzExMTEsMjIg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiAgICAgLy8gMTUu
NC40LjE0CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMo
ZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7CisgICAgQVNTRVJUKCEhc2NvcGUuZXhj
ZXB0aW9uKCkgPT0gIXRoaXNPYmopOwogICAgIGlmICghdGhpc09iaikKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgICAgICByZXR1cm4geyB9OwogICAgIHVu
c2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogCiAgICAgdW5zaWduZWQgaW5kZXggPSBhcmd1bWVudENsYW1wZWRJ
bmRleEZyb21TdGFydE9yRW5kKGV4ZWMsIDEsIGxlbmd0aCk7CiAgICAgSlNWYWx1ZSBzZWFyY2hF
bGVtZW50ID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgZm9yICg7IGluZGV4IDwgbGVuZ3RoOyAr
K2luZGV4KSB7CiAgICAgICAgIEpTVmFsdWUgZSA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmos
IGluZGV4KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAg
IGlmICghZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoSlNWYWx1ZTo6c3Ry
aWN0RXF1YWwoZXhlYywgc2VhcmNoRWxlbWVudCwgZSkpCiAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGluZGV4KSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwogICAgIH0KIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1i
ZXIoLTEpKTsKQEAgLTEwNTMsMTAgKzExMzksMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheVByb3RvRgogCiAgICAgLy8gMTUuNC40LjE1CiAgICAgSlNPYmplY3QqIHRoaXNP
YmogPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3Qo
ZXhlYyk7CisgICAgQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gIXRoaXNPYmopOwogICAg
IGlmICghdGhpc09iaikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
OworICAgICAgICByZXR1cm4geyB9OwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChl
eGVjLCB0aGlzT2JqKTsKLSAgICBpZiAoIWxlbmd0aCkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpIHx8ICFsZW5ndGgpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOdW1iZXIoLTEpKTsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0gbGVuZ3RoIC0gMTsKQEAgLTEw
NzYsMTIgKzExNjMsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3Rv
RgogICAgIGRvIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBsZW5ndGgpOwogICAg
ICAgICBKU1ZhbHVlIGUgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBpbmRleCk7Ci0gICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBpZiAoIWUpCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKEpTVmFsdWU6OnN0cmljdEVxdWFsKGV4ZWMs
IHNlYXJjaEVsZW1lbnQsIGUpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c051bWJlcihpbmRleCkpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
ICAgICB9IHdoaWxlIChpbmRleC0tKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNO
dW1iZXIoLTEpKTsKQEAgLTExMzEsMTMgKzEyMTgsMTYgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IGNvbmNhdEFwcGVuZE9uZShFeAogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSkpOwogCi0gICAg
aWYgKCFyZXN1bHQtPmFwcGVuZE1lbWNweShleGVjLCB2bSwgMCwgZmlyc3QpKSB7Ci0gICAgICAg
IGlmICghbW92ZUVsZW1lbnRzKGV4ZWMsIHZtLCByZXN1bHQsIDAsIGZpcnN0LCBmaXJzdEFycmF5
U2l6ZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSk7Ci0gICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7Ci0gICAgICAgIH0KKyAgICBi
b29sIHN1Y2Nlc3MgPSByZXN1bHQtPmFwcGVuZE1lbWNweShleGVjLCB2bSwgMCwgZmlyc3QpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgaWYgKCFzdWNjZXNzKSB7
CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IG1vdmVFbGVtZW50cyhleGVjLCB2bSwgcmVzdWx0LCAw
LCBmaXJzdCwgZmlyc3RBcnJheVNpemUpOworICAgICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlv
bigpID09IHN1Y2Nlc3MpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgICAgICByZXR1
cm4geyB9OwogICAgIH0KIAorICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICByZXN1bHQtPnB1dERp
cmVjdEluZGV4KGV4ZWMsIGZpcnN0QXJyYXlTaXplLCBzZWNvbmQpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKIApAQCAtMTE1OSwxMiArMTI0OSwxNiBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9QCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOdWxsKCkpOwogCiAgICAgLy8gV2UgbmVlZCB0byBjaGVjayB0aGUgc3BlY2llcyBj
b25zdHJ1Y3RvciBoZXJlIHNpbmNlIGNoZWNraW5nIGl0IGluIHRoZSBKUyB3cmFwcGVyIGlzIHRv
byBleHBlbnNpdmUgZm9yIHRoZSBub24tb3B0aW1pemluZyB0aWVycy4KLSAgICBpZiAoVU5MSUtF
TFkoIXNwZWNpZXNXYXRjaHBvaW50c1ZhbGlkKGV4ZWMsIGZpcnN0QXJyYXkpKSkKKyAgICBib29s
IGlzVmFsaWQgPSBzcGVjaWVzV2F0Y2hwb2ludHNWYWxpZChleGVjLCBmaXJzdEFycmF5KTsKKyAg
ICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8ICFpc1ZhbGlkKTsKKyAgICBpZiAoVU5MSUtF
TFkoIWlzVmFsaWQpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsK
IAogICAgIEpTVmFsdWUgc2Vjb25kID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSk7Ci0gICAg
aWYgKCFpc0pTQXJyYXkoc2Vjb25kKSkKKyAgICBpZiAoIWlzSlNBcnJheShzZWNvbmQpKSB7Cisg
ICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgcmV0dXJuIGNvbmNhdEFwcGVuZE9uZShl
eGVjLCB2bSwgZmlyc3RBcnJheSwgc2Vjb25kKTsKKyAgICB9CiAKICAgICBKU0FycmF5KiBzZWNv
bmRBcnJheSA9IGpzQ2FzdDxKU0FycmF5Kj4oc2Vjb25kKTsKICAgICAKQEAgLTExNzgsMTMgKzEy
NzIsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvUAogICAgIElu
ZGV4aW5nVHlwZSB0eXBlID0gZmlyc3RBcnJheS0+bWVyZ2VJbmRleGluZ1R5cGVGb3JDb3B5aW5n
KHNlY29uZFR5cGUpOwogICAgIGlmICh0eXBlID09IE5vbkFycmF5IHx8ICFmaXJzdEFycmF5LT5j
YW5GYXN0Q29weSh2bSwgc2Vjb25kQXJyYXkpIHx8IGZpcnN0QXJyYXlTaXplICsgc2Vjb25kQXJy
YXlTaXplID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpIHsKICAgICAgICAgSlNBcnJheSogcmVz
dWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCBmaXJzdEFycmF5U2l6ZSAr
IHNlY29uZEFycmF5U2l6ZSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OwogCi0gICAgICAgIGlmICghbW92ZUVsZW1lbnRzKGV4ZWMsIHZtLCByZXN1bHQsIDAsIGZpcnN0
QXJyYXksIGZpcnN0QXJyYXlTaXplKQotICAgICAgICAgICAgfHwgIW1vdmVFbGVtZW50cyhleGVj
LCB2bSwgcmVzdWx0LCBmaXJzdEFycmF5U2l6ZSwgc2Vjb25kQXJyYXksIHNlY29uZEFycmF5U2l6
ZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSk7Ci0gICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7Ci0gICAgICAgIH0KKyAgICAgICAg
Ym9vbCBzdWNjZXNzID0gbW92ZUVsZW1lbnRzKGV4ZWMsIHZtLCByZXN1bHQsIDAsIGZpcnN0QXJy
YXksIGZpcnN0QXJyYXlTaXplKTsKKyAgICAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSA9
PSBzdWNjZXNzKTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICAgICAgc3VjY2VzcyA9IG1vdmVFbGVtZW50cyhleGVjLCB2bSwgcmVzdWx0LCBmaXJz
dEFycmF5U2l6ZSwgc2Vjb25kQXJyYXksIHNlY29uZEFycmF5U2l6ZSk7CisgICAgICAgIEFTU0VS
VCghc2NvcGUuZXhjZXB0aW9uKCkgPT0gc3VjY2Vzcyk7CisgICAgICAgIGlmICghc3VjY2VzcykK
KyAgICAgICAgICAgIHJldHVybiB7IH07CiAKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOwogICAgIH0KQEAgLTEyNTAsNiArMTM0Nyw3IEBAIEFycmF5UHJvdG90eXBlOjpT
cGVjaWVzV2F0Y2hwb2ludFN0YXR1cyAKICAgICBBU1NFUlQobV9zcGVjaWVzV2F0Y2hwb2ludFN0
YXR1cyA9PSBTcGVjaWVzV2F0Y2hwb2ludFN0YXR1czo6VW5pbml0aWFsaXplZCk7CiAKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJBdHRlbXB0aW5nIHRv
IGluaXRpYWxpemUgQXJyYXkgc3BlY2llcyB3YXRjaHBvaW50cyBmb3IgQXJyYXkucHJvdG90eXBl
OiAiLCBwb2ludGVyRHVtcCh0aGlzKSwgIiB3aXRoIHN0cnVjdHVyZTogIiwgcG9pbnRlckR1bXAo
dGhpcy0+c3RydWN0dXJlKCkpLCAiXG5hbmQgQXJyYXk6ICIsIHBvaW50ZXJEdW1wKHRoaXMtPmds
b2JhbE9iamVjdCgpLT5hcnJheUNvbnN0cnVjdG9yKCkpLCAiIHdpdGggc3RydWN0dXJlOiAiLCBw
b2ludGVyRHVtcCh0aGlzLT5nbG9iYWxPYmplY3QoKS0+YXJyYXlDb25zdHJ1Y3RvcigpLT5zdHJ1
Y3R1cmUoKSksICJcbiIpOwpAQCAtMTI2Nyw3ICsxMzY1LDggQEAgQXJyYXlQcm90b3R5cGU6OlNw
ZWNpZXNXYXRjaHBvaW50U3RhdHVzIAogCiAgICAgUHJvcGVydHlTbG90IGNvbnN0cnVjdG9yU2xv
dCh0aGlzLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5KTsKICAg
ICBKU1ZhbHVlKHRoaXMpLmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3Rvciwg
Y29uc3RydWN0b3JTbG90KTsKLSAgICBpZiAoY29uc3RydWN0b3JTbG90LnNsb3RCYXNlKCkgIT0g
dGhpcworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkKKyAgICAgICAgfHwgY29u
c3RydWN0b3JTbG90LnNsb3RCYXNlKCkgIT0gdGhpcwogICAgICAgICB8fCAhY29uc3RydWN0b3JT
bG90LmlzQ2FjaGVhYmxlVmFsdWUoKQogICAgICAgICB8fCBjb25zdHJ1Y3RvclNsb3QuZ2V0VmFs
dWUoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IpICE9IGFycmF5Q29uc3RydWN0
b3IpCiAgICAgICAgIHJldHVybiBtX3NwZWNpZXNXYXRjaHBvaW50U3RhdHVzID0gU3BlY2llc1dh
dGNocG9pbnRTdGF0dXM6OkZpcmVkOwpAQCAtMTI3OCw3ICsxMzc3LDggQEAgQXJyYXlQcm90b3R5
cGU6OlNwZWNpZXNXYXRjaHBvaW50U3RhdHVzIAogCiAgICAgUHJvcGVydHlTbG90IHNwZWNpZXNT
bG90KGFycmF5Q29uc3RydWN0b3IsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpW
TUlucXVpcnkpOwogICAgIEpTVmFsdWUoYXJyYXlDb25zdHJ1Y3RvcikuZ2V0KGV4ZWMsIHZtLnBy
b3BlcnR5TmFtZXMtPnNwZWNpZXNTeW1ib2wsIHNwZWNpZXNTbG90KTsKLSAgICBpZiAoc3BlY2ll
c1Nsb3Quc2xvdEJhc2UoKSAhPSBhcnJheUNvbnN0cnVjdG9yCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKQorICAgICAgICB8fCBzcGVjaWVzU2xvdC5zbG90QmFzZSgpICE9IGFy
cmF5Q29uc3RydWN0b3IKICAgICAgICAgfHwgIXNwZWNpZXNTbG90LmlzQ2FjaGVhYmxlR2V0dGVy
KCkKICAgICAgICAgfHwgc3BlY2llc1Nsb3QuZ2V0dGVyU2V0dGVyKCkgIT0gZ2xvYmFsT2JqZWN0
LT5zcGVjaWVzR2V0dGVyU2V0dGVyKCkpCiAgICAgICAgIHJldHVybiBtX3NwZWNpZXNXYXRjaHBv
aW50U3RhdHVzID0gU3BlY2llc1dhdGNocG9pbnRTdGF0dXM6OkZpcmVkOwo=
</data>
<flag name="review"
          id="317926"
          type_id="1"
          status="-"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295419</attachid>
            <date>2016-11-24 14:48:36 -0800</date>
            <delta_ts>2016-11-28 12:14:22 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-164972.patch</filename>
            <type>text/plain</type>
            <size>36287</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4OTc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBA
CisyMDE2LTExLTI0ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBG
aXggZXhjZXB0aW9uIHNjb3BlIHZlcmlmaWNhdGlvbiBmYWlsdXJlcyBpbiBBcnJheUNvbnN0cnVj
dG9yLmNwcCBhbmQgQXJyYXlQcm90b3R5cGUuY3BwLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0OTcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpjb25zdHJ1Y3RBcnJheVdpdGhTaXplUXVpcmspOgorICAgICAgICAqIHJ1
bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpnZXRQcm9wZXJ0eSk6Cisg
ICAgICAgIChKU0M6OnB1dExlbmd0aCk6CisgICAgICAgIChKU0M6OnNwZWNpZXNXYXRjaHBvaW50
c1ZhbGlkKToKKyAgICAgICAgKEpTQzo6c3BlY2llc0NvbnN0cnVjdEFycmF5KToKKyAgICAgICAg
KEpTQzo6c2hpZnQpOgorICAgICAgICAoSlNDOjp1bnNoaWZ0KToKKyAgICAgICAgKEpTQzo6YXJy
YXlQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jVG9Mb2Nh
bGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpzbG93Sm9pbik6CisgICAgICAgIChKU0M6OmZhc3RK
b2luKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNKb2luKToKKyAgICAgICAgKEpTQzo6
YXJyYXlQcm90b0Z1bmNQb3ApOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1B1c2gpOgor
ICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1JldmVyc2UpOgorICAgICAgICAoSlNDOjphcnJh
eVByb3RvRnVuY1NoaWZ0KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNTbGljZSk6Cisg
ICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU3BsaWNlKToKKyAgICAgICAgKEpTQzo6YXJyYXlQ
cm90b0Z1bmNVblNoaWZ0KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNJbmRleE9mKToK
KyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNMYXN0SW5kZXhPZik6CisgICAgICAgIChKU0M6
OmNvbmNhdEFwcGVuZE9uZSk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9Qcml2YXRlRnVuY0Nv
bmNhdE1lbWNweSk6CisgICAgICAgIChKU0M6OkFycmF5UHJvdG90eXBlOjphdHRlbXB0VG9Jbml0
aWFsaXplU3BlY2llc1dhdGNocG9pbnQpOgorCiAyMDE2LTExLTIzICBaYW4gRG9iZXJzZWsgIDx6
ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZW1vdmUgRU5BQkxFX0FTU0VNQkxFUl9X
WF9FWENMVVNJVkUgY29kZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwODk3NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03MCwxMiArNzAsMTUgQEAgSlNWYWx1ZSBjb25zdHJ1Y3RBcnJheVdpdGhTaXplUXVpcmso
RXhlYwogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgIGlmICghbGVuZ3RoLmlzTnVtYmVyKCkpCisgICAgaWYg
KCFsZW5ndGguaXNOdW1iZXIoKSkgeworICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAg
IHJldHVybiBjb25zdHJ1Y3RBcnJheU5lZ2F0aXZlSW5kZXhlZChleGVjLCBwcm9maWxlLCBnbG9i
YWxPYmplY3QsICZsZW5ndGgsIDEsIG5ld1RhcmdldCk7CisgICAgfQogICAgIAogICAgIHVpbnQz
Ml90IG4gPSBsZW5ndGgudG9VSW50MzIoZXhlYyk7CiAgICAgaWYgKG4gIT0gbGVuZ3RoLnRvTnVt
YmVyKGV4ZWMpKQogICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNy
ZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJBcnJheSBzaXplIGlzIG5vdCBhIHNt
YWxsIGVub3VnaCBwb3NpdGl2ZSBpbnRlZ2VyLiIpKSk7CisgICAgc2NvcGUucmVsZWFzZSgpOwog
ICAgIHJldHVybiBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIHByb2ZpbGUsIGdsb2JhbE9iamVj
dCwgbiwgbmV3VGFyZ2V0KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJyYXlQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA4OTc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDksNiArMTQ5LDkgQEAgdm9pZCBBcnJheVByb3RvdHlwZTo6ZGVzdHJveShKU0M6OkpT
Q2VsbAogCiBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldFByb3BlcnR5KEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgdW5zaWduZWQgaW5kZXgpCiB7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgCiAgICAgaWYgKEpTVmFsdWUgcmVzdWx0ID0gb2JqZWN0LT50cnlHZXRJbmRleFF1aWNr
bHkoaW5kZXgpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIC8vIFdlIHdhbnQgdG8gcGVy
Zm9ybSBnZXQgYW5kIGhhcyBpbiB0aGUgc2FtZSBvcGVyYXRpb24uCkBAIC0xNTYsMTcgKzE1OSwy
MiBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldFByb3BlcnR5CiAgICAgLy8gb25s
eSB0aW1lIGl0IGlzIG9ic2VydmFibGUgaXMgd2hlbiB3ZSBlbmNvdW50ZXIgYW4gb3BhcXVlIG9i
amVjdHMgKFByb3h5T2JqZWN0IGFuZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCkKICAgICAvLyBz
b21ld2hlcmUgaW4gdGhlIHByb3RvdHlwZSBjaGFpbi4KICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChv
YmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpIYXNQcm9wZXJ0eSk7Ci0g
ICAgaWYgKCFvYmplY3QtPmdldFByb3BlcnR5U2xvdChleGVjLCBpbmRleCwgc2xvdCkpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0gICAgaWYgKFVOTElLRUxZKHNsb3QuaXNUYWludGVkQnlP
cGFxdWVPYmplY3QoKSkpCisgICAgYm9vbCBoYXNQcm9wZXJ0eSA9IG9iamVjdC0+Z2V0UHJvcGVy
dHlTbG90KGV4ZWMsIGluZGV4LCBzbG90KTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigp
IHx8ICFoYXNQcm9wZXJ0eSk7CisgICAgaWYgKCFoYXNQcm9wZXJ0eSkKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICBpZiAoVU5MSUtFTFkoc2xvdC5pc1RhaW50ZWRCeU9wYXF1ZU9iamVjdCgpKSkg
eworICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIHJldHVybiBvYmplY3QtPmdldChl
eGVjLCBpbmRleCk7CisgICAgfQorICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICByZXR1cm4gc2xv
dC5nZXRWYWx1ZShleGVjLCBpbmRleCk7CiB9CiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wg
cHV0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBKU09iamVjdCogb2JqLCBKU1ZhbHVl
IHZhbHVlKQogewogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iaik7Ci0gICAgcmV0dXJuIG9i
ai0+bWV0aG9kVGFibGUoKS0+cHV0KG9iaiwgZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3Ro
LCB2YWx1ZSwgc2xvdCk7CisgICAgcmV0dXJuIG9iai0+bWV0aG9kVGFibGUodm0pLT5wdXQob2Jq
LCBleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIHZhbHVlLCBzbG90KTsKIH0KIAogc3Rh
dGljIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0s
IEpTT2JqZWN0KiBvYmosIHVuc2lnbmVkIHZhbHVlKQpAQCAtMTg1LDEwICsxOTMsMTUgQEAgc3Rh
dGljIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRMZW5ndGgoRXhlYwogCiBpbmxpbmUgYm9vbCBzcGVj
aWVzV2F0Y2hwb2ludHNWYWxpZChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0
KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCiAgICAgQXJyYXlQcm90b3R5cGUqIGFycmF5UHJvdG90eXBlID0g
dGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmFycmF5UHJvdG90eXBlKCk7CiAgICAgQXJyYXlQ
cm90b3R5cGU6OlNwZWNpZXNXYXRjaHBvaW50U3RhdHVzIHN0YXR1cyA9IGFycmF5UHJvdG90eXBl
LT5zcGVjaWVzV2F0Y2hwb2ludFN0YXR1cygpOwotICAgIGlmIChVTkxJS0VMWShzdGF0dXMgPT0g
QXJyYXlQcm90b3R5cGU6OlNwZWNpZXNXYXRjaHBvaW50U3RhdHVzOjpVbmluaXRpYWxpemVkKSkK
KyAgICBpZiAoVU5MSUtFTFkoc3RhdHVzID09IEFycmF5UHJvdG90eXBlOjpTcGVjaWVzV2F0Y2hw
b2ludFN0YXR1czo6VW5pbml0aWFsaXplZCkpIHsKICAgICAgICAgc3RhdHVzID0gYXJyYXlQcm90
b3R5cGUtPmF0dGVtcHRUb0luaXRpYWxpemVTcGVjaWVzV2F0Y2hwb2ludChleGVjKTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOworICAgIH0KICAgICBBU1NFUlQo
c3RhdHVzICE9IEFycmF5UHJvdG90eXBlOjpTcGVjaWVzV2F0Y2hwb2ludFN0YXR1czo6VW5pbml0
aWFsaXplZCk7CiAgICAgcmV0dXJuICF0aGlzT2JqZWN0LT5oYXNDdXN0b21Qcm9wZXJ0aWVzKCkK
ICAgICAgICAgJiYgYXJyYXlQcm90b3R5cGUgPT0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGly
ZWN0KCkKQEAgLTIxMiwxMyArMjI1LDE3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHN0ZDo6cGFp
cjxTcGVjaWVzQ28KIAogICAgIC8vIEVDTUEgOS40LjIuMzogaHR0cHM6Ly90YzM5LmdpdGh1Yi5p
by9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlCiAgICAgSlNWYWx1ZSBjb25zdHJ1Y3Rv
ciA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgaWYgKExJS0VMWShpc0FycmF5KGV4ZWMsIHRoaXNPYmpl
Y3QpKSkgeworICAgIGJvb2wgdGhpc0lzQXJyYXkgPSBpc0FycmF5KGV4ZWMsIHRoaXNPYmplY3Qp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGV4Y2VwdGlvblJlc3VsdCgpKTsKKyAg
ICBpZiAoTElLRUxZKHRoaXNJc0FycmF5KSkgewogICAgICAgICAvLyBGYXN0IHBhdGggaW4gdGhl
IG5vcm1hbCBjYXNlIHdoZXJlIHRoZSB1c2VyIGhhcyBub3Qgc2V0IGFuIG93biBjb25zdHJ1Y3Rv
ciBhbmQgdGhlIEFycmF5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciBpcyBub3JtYWwuCiAgICAgICAg
IC8vIFdlIG5lZWQgcHJvdG90eXBlIGNoZWNrIGZvciBzdWJjbGFzc2VzIG9mIEFycmF5LCB3aGlj
aCBhcmUgQXJyYXkgb2JqZWN0cyBidXQgaGF2ZSBhIGRpZmZlcmVudCBwcm90b3R5cGUgYnkgZGVm
YXVsdC4KLSAgICAgICAgaWYgKExJS0VMWShzcGVjaWVzV2F0Y2hwb2ludHNWYWxpZChleGVjLCB0
aGlzT2JqZWN0KSkpCisgICAgICAgIGJvb2wgaXNWYWxpZCA9IHNwZWNpZXNXYXRjaHBvaW50c1Zh
bGlkKGV4ZWMsIHRoaXNPYmplY3QpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBleGNlcHRpb25SZXN1bHQoKSk7CisgICAgICAgIGlmIChMSUtFTFkoaXNWYWxpZCkpCiAgICAg
ICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RmFz
dFBhdGgsIG51bGxwdHIpOwogCi0gICAgICAgIGNvbnN0cnVjdG9yID0gdGhpc09iamVjdC0+Z2V0
KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rvcik7CisgICAgICAgIGNvbnN0
cnVjdG9yID0gdGhpc09iamVjdC0+Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVj
dG9yKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZXhjZXB0aW9uUmVzdWx0
KCkpOwogICAgICAgICBpZiAoY29uc3RydWN0b3IuaXNDb25zdHJ1Y3RvcigpKSB7CiAgICAgICAg
ICAgICBKU09iamVjdCogY29uc3RydWN0b3JPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjb25z
dHJ1Y3Rvcik7CkBAIC0yMjYsNyArMjQzLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgc3RkOjpw
YWlyPFNwZWNpZXNDbwogICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihTcGVj
aWVzQ29uc3RydWN0UmVzdWx0OjpGYXN0UGF0aCwgbnVsbHB0cik7OwogICAgICAgICB9CiAgICAg
ICAgIGlmIChjb25zdHJ1Y3Rvci5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICBjb25zdHJ1Y3Rv
ciA9IGNvbnN0cnVjdG9yLmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc3BlY2llc1N5
bWJvbCk7CisgICAgICAgICAgICBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yLmdldChleGVjLCB2
bS5wcm9wZXJ0eU5hbWVzLT5zcGVjaWVzU3ltYm9sKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGV4Y2VwdGlvblJlc3VsdCgpKTsKICAgICAgICAgICAgIGlmIChjb25z
dHJ1Y3Rvci5pc051bGwoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIo
U3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RmFzdFBhdGgsIG51bGxwdHIpOzsKQEAgLTI5NCwxNyAr
MzExLDI0IEBAIHZvaWQgc2hpZnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGgKICAgICBm
b3IgKHVuc2lnbmVkIGsgPSBoZWFkZXI7IGsgPCBsZW5ndGggLSBjdXJyZW50Q291bnQ7ICsraykg
ewogICAgICAgICB1bnNpZ25lZCBmcm9tID0gayArIGN1cnJlbnRDb3VudDsKICAgICAgICAgdW5z
aWduZWQgdG8gPSBrICsgcmVzdWx0Q291bnQ7Ci0gICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0g
Z2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgZnJvbSkpIHsKLSAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBnZXRQ
cm9wZXJ0eShleGVjLCB0aGlzT2JqLCBmcm9tKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgdm9pZCgpKTsKKyAgICAgICAgaWYgKHZhbHVlKSB7CiAgICAgICAgICAgICB0aGlz
T2JqLT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIHRvLCB2YWx1ZSwgdHJ1ZSk7CiAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwotICAgICAgICB9IGVsc2UgaWYg
KCF0aGlzT2JqLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2Jq
LCBleGVjLCB0bykpIHsKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBB
U0NJSUxpdGVyYWwoVW5hYmxlVG9EZWxldGVQcm9wZXJ0eUVycm9yKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSB0aGlz
T2JqLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqLCBleGVj
LCB0byk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwor
ICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJy
b3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbChVbmFibGVUb0RlbGV0ZVByb3BlcnR5RXJyb3Ip
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9CiAgICAgZm9yICh1bnNpZ25lZCBrID0gbGVuZ3RoOyBrID4gbGVuZ3RoIC0gY291bnQ7IC0t
aykgewotICAgICAgICBpZiAoIXRoaXNPYmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVy
dHlCeUluZGV4KHRoaXNPYmosIGV4ZWMsIGsgLSAxKSkgeworICAgICAgICBib29sIHN1Y2Nlc3Mg
PSB0aGlzT2JqLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2Jq
LCBleGVjLCBrIC0gMSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQo
KSk7CisgICAgICAgIGlmICghc3VjY2VzcykgewogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3Io
ZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbChVbmFibGVUb0RlbGV0ZVByb3BlcnR5RXJyb3IpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMzMxLDIxICszNTUsMzAgQEAgdm9p
ZCB1bnNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIAogCiAgICAgaWYgKGlzSlNBcnJh
eSh0aGlzT2JqKSkgewogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodGhpc09iaik7
Ci0gICAgICAgIGlmIChhcnJheS0+bGVuZ3RoKCkgPT0gbGVuZ3RoICYmIGFycmF5LT51bnNoaWZ0
Q291bnQ8c2hpZnRDb3VudE1vZGU+KGV4ZWMsIGhlYWRlciwgY291bnQpKQotICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBpZiAoYXJyYXktPmxlbmd0aCgpID09IGxlbmd0aCkgeworICAgICAg
ICAgICAgYm9vbCBoYW5kbGVkID0gYXJyYXktPnVuc2hpZnRDb3VudDxzaGlmdENvdW50TW9kZT4o
ZXhlYywgaGVhZGVyLCBjb3VudCk7CisgICAgICAgICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlv
bigpIHx8IGhhbmRsZWQpOworICAgICAgICAgICAgaWYgKGhhbmRsZWQpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQogCiAgICAgZm9yICh1bnNpZ25lZCBrID0gbGVu
Z3RoIC0gY3VycmVudENvdW50OyBrID4gaGVhZGVyOyAtLWspIHsKICAgICAgICAgdW5zaWduZWQg
ZnJvbSA9IGsgKyBjdXJyZW50Q291bnQgLSAxOwogICAgICAgICB1bnNpZ25lZCB0byA9IGsgKyBy
ZXN1bHRDb3VudCAtIDE7Ci0gICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gZ2V0UHJvcGVydHko
ZXhlYywgdGhpc09iaiwgZnJvbSkpIHsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHZvaWQoKSk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBnZXRQcm9wZXJ0eShleGVj
LCB0aGlzT2JqLCBmcm9tKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9p
ZCgpKTsKKyAgICAgICAgaWYgKHZhbHVlKSB7CiAgICAgICAgICAgICB0aGlzT2JqLT5wdXRCeUlu
ZGV4SW5saW5lKGV4ZWMsIHRvLCB2YWx1ZSwgdHJ1ZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoIXRo
aXNPYmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmosIGV4
ZWMsIHRvKSkgewotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJ
TGl0ZXJhbChVbmFibGVUb0RlbGV0ZVByb3BlcnR5RXJyb3IpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSB0aGlzT2JqLT5tZXRob2RU
YWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqLCBleGVjLCB0byk7CisgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOworICAgICAgICAgICAg
aWYgKFVOTElLRUxZKCFzdWNjZXNzKSkgeworICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9y
KGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoVW5hYmxlVG9EZWxldGVQcm9wZXJ0eUVycm9yKSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgfQogfQogCkBAIC0z
NjAsNyArMzkzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIAog
ICAgIC8vIDIuIExldCBmdW5jIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRdXSBp
bnRlcm5hbCBtZXRob2Qgb2YgYXJyYXkgd2l0aCBhcmd1bWVudCAiam9pbiIuCi0gICAgSlNWYWx1
ZSBmdW5jdGlvbiA9IEpTVmFsdWUodGhpc09iamVjdCkuZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5qb2luKTsKKyAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gSlNWYWx1ZSh0aGlzT2JqZWN0
KS5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+am9pbik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICAvLyAzLiBJZiBJc0NhbGxhYmxl
KGZ1bmMpIGlzIGZhbHNlLCB0aGVuIGxldCBmdW5jIGJlIHRoZSBzdGFuZGFyZCBidWlsdC1pbiBt
ZXRob2QgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAoMTUuMi40LjIpLgpAQCAtMzc4LDggKzQx
MSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgfQog
CiAgICAgLy8gNC4gUmV0dXJuIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tDYWxsXV0gaW50
ZXJuYWwgbWV0aG9kIG9mIGZ1bmMgcHJvdmlkaW5nIGFycmF5IGFzIHRoZSB0aGlzIHZhbHVlIGFu
ZCBhbiBlbXB0eSBhcmd1bWVudHMgbGlzdC4KLSAgICBpZiAoIWlzSlNBcnJheSh0aGlzT2JqZWN0
KSB8fCBjYWxsVHlwZSAhPSBDYWxsVHlwZTo6SG9zdCB8fCBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rp
b24gIT0gYXJyYXlQcm90b0Z1bmNKb2luKQorICAgIGlmICghaXNKU0FycmF5KHRoaXNPYmplY3Qp
IHx8IGNhbGxUeXBlICE9IENhbGxUeXBlOjpIb3N0IHx8IGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlv
biAhPSBhcnJheVByb3RvRnVuY0pvaW4pIHsKKyAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBl
LCBjYWxsRGF0YSwgdGhpc09iamVjdCwgZXhlYy0+ZW1wdHlMaXN0KCkpKTsKKyAgICB9CiAKICAg
ICBBU1NFUlQoaXNKU0FycmF5KHRoaXNWYWx1ZSkpOwogICAgIEpTQXJyYXkqIHRoaXNBcnJheSA9
IGFzQXJyYXkodGhpc1ZhbHVlKTsKQEAgLTM4Nyw2ICs0MjIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc0FycmF5
LT5sZW5ndGgoKTsKIAogICAgIFN0cmluZ1JlY3Vyc2lvbkNoZWNrZXIgY2hlY2tlcihleGVjLCB0
aGlzQXJyYXkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgY2hlY2tlci5lYXJs
eVJldHVyblZhbHVlKCkpOwogICAgIGlmIChKU1ZhbHVlIGVhcmx5UmV0dXJuVmFsdWUgPSBjaGVj
a2VyLmVhcmx5UmV0dXJuVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShl
YXJseVJldHVyblZhbHVlKTsKIApAQCAtNDAzLDYgKzQzOSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgfQogCisgICAgc2NvcGUucmVsZWFzZSgpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoam9pbmVyLmpvaW4oKmV4ZWMpKTsKIH0KIApAQCAtNDE5
LDYgKzQ1Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIFN0
cmluZ1JlY3Vyc2lvbkNoZWNrZXIgY2hlY2tlcihleGVjLCB0aGlzT2JqZWN0KTsKKyAgICBBU1NF
UlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8IGNoZWNrZXIuZWFybHlSZXR1cm5WYWx1ZSgpKTsKICAg
ICBpZiAoSlNWYWx1ZSBlYXJseVJldHVyblZhbHVlID0gY2hlY2tlci5lYXJseVJldHVyblZhbHVl
KCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZWFybHlSZXR1cm5WYWx1ZSk7CiAK
QEAgLTQzMyw3ICs0NzEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJv
dG9GCiAgICAgICAgIGlmIChlbGVtZW50LmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgICAg
ICBlbGVtZW50ID0ganNFbXB0eVN0cmluZyhleGVjKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBKU1ZhbHVlIGNvbnZlcnNpb25GdW5jdGlvbiA9IGVsZW1lbnQuZ2V0KGV4ZWMsIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS50b0xvY2FsZVN0cmluZyk7CisgICAgICAgICAgICBKU1ZhbHVlIGNv
bnZlcnNpb25GdW5jdGlvbiA9IGVsZW1lbnQuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnRv
TG9jYWxlU3RyaW5nKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgICAg
ICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGNvbnZlcnNpb25GdW5jdGlvbiwg
Y2FsbERhdGEpOwpAQCAtNDUxLDcgKzQ4OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYXJyYXlQcm90b0YKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAgICAgICAgIGlmIChlbGVtZW50LmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgSlNWYWx1ZSBjb252ZXJzaW9uRnVuY3Rpb24g
PSBlbGVtZW50LmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9Mb2NhbGVTdHJpbmcp
OworICAgICAgICBKU1ZhbHVlIGNvbnZlcnNpb25GdW5jdGlvbiA9IGVsZW1lbnQuZ2V0KGV4ZWMs
IHZtLnByb3BlcnR5TmFtZXMtPnRvTG9jYWxlU3RyaW5nKTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAgIENhbGxEYXRhIGNhbGxE
YXRhOwogICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGNvbnZlcnNpb25G
dW5jdGlvbiwgY2FsbERhdGEpOwpAQCAtNDY0LDYgKzUwMiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICB9CiAjZW5kaWYgLy8gIUVOQUJMRShJTlRMKQog
CisgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc3RyaW5n
Sm9pbmVyLmpvaW4oKmV4ZWMpKTsKIH0KIApAQCAtNTAzLDcgKzU0Miw3IEBAIHN0YXRpYyBKU1Zh
bHVlIHNsb3dKb2luKEV4ZWNTdGF0ZSYgZXhlYywKIAogICAgIC8vIDYuIExldCBlbGVtZW50MCBi
ZSBHZXQoTywgIjAiKS4KICAgICBKU1ZhbHVlIGVsZW1lbnQwID0gdGhpc09iamVjdC0+Z2V0SW5k
ZXgoJmV4ZWMsIDApOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIC8vIDcuIElmIGVs
ZW1lbnQwIGlzIHVuZGVmaW5lZCBvciBudWxsLCBsZXQgUiBiZSB0aGUgZW1wdHkgU3RyaW5nOyBv
dGhlcndpc2UsIGxldCBSIGJlID8gVG9TdHJpbmcoZWxlbWVudDApLgogICAgIEpTU3RyaW5nKiBy
ID0gbnVsbHB0cjsKQEAgLTUxMSw3ICs1NTAsNyBAQCBzdGF0aWMgSlNWYWx1ZSBzbG93Sm9pbihF
eGVjU3RhdGUmIGV4ZWMsCiAgICAgICAgIHIgPSBqc0VtcHR5U3RyaW5nKCZleGVjKTsKICAgICBl
bHNlCiAgICAgICAgIHIgPSBlbGVtZW50MC50b1N0cmluZygmZXhlYyk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwogCiAgICAgLy8gOC4gTGV0IGsgYmUgMS4KICAgICAvLyA5LiBSZXBlYXQsIHdo
aWxlIGsgPCBsZW4KQEAgLTUxOSw3ICs1NTgsNyBAQCBzdGF0aWMgSlNWYWx1ZSBzbG93Sm9pbihF
eGVjU3RhdGUmIGV4ZWMsCiAgICAgZm9yICh1aW50NjRfdCBrID0gMTsgayA8IGxlbmd0aDsgKytr
KSB7CiAgICAgICAgIC8vIGIuIExldCBlbGVtZW50IGJlID8gR2V0KE8sICEgVG9TdHJpbmcoaykp
LgogICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB0aGlzT2JqZWN0LT5nZXQoJmV4ZWMsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsIEF0b21pY1N0cmluZzo6bnVtYmVyKGspKSk7Ci0gICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICAgICAgLy8gYy4gSWYgZWxlbWVudCBp
cyB1bmRlZmluZWQgb3IgbnVsbCwgbGV0IG5leHQgYmUgdGhlIGVtcHR5IFN0cmluZzsgb3RoZXJ3
aXNlLCBsZXQgbmV4dCBiZSA/IFRvU3RyaW5nKGVsZW1lbnQpLgogICAgICAgICBKU1N0cmluZyog
bmV4dCA9IG51bGxwdHI7CkBAIC01MjksMTIgKzU2OCwxMiBAQCBzdGF0aWMgSlNWYWx1ZSBzbG93
Sm9pbihFeGVjU3RhdGUmIGV4ZWMsCiAgICAgICAgICAgICBuZXh0ID0ganNFbXB0eVN0cmluZygm
ZXhlYyk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbmV4dCA9IGVsZW1lbnQudG9TdHJp
bmcoJmV4ZWMpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgICAgIC8v
IGEuIExldCBTIGJlIHRoZSBTdHJpbmcgdmFsdWUgcHJvZHVjZWQgYnkgY29uY2F0ZW5hdGluZyBS
IGFuZCBzZXAuCiAgICAgICAgIC8vIGQuIExldCBSIGJlIGEgU3RyaW5nIHZhbHVlIHByb2R1Y2Vk
IGJ5IGNvbmNhdGVuYXRpbmcgUyBhbmQgbmV4dC4KICAgICAgICAgciA9IGpzU3RyaW5nKCZleGVj
LCByLCBzZXBhcmF0b3IsIG5leHQpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwog
ICAgIH0KICAgICAvLyAxMC4gUmV0dXJuIFIuCiAgICAgcmV0dXJuIHI7CkBAIC01NjUsNyArNjA0
LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGZhc3RKb2luKEV4ZWNTdGF0ZQogICAgICAgICBp
ZiAobGVuZ3RoID4gYnV0dGVyZmx5LnB1YmxpY0xlbmd0aCgpKQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIEpTU3RyaW5nSm9pbmVyIGpvaW5lcihzdGF0ZSwgc2VwYXJhdG9yLCBsZW5ndGgp
OwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOworICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBhdXRvIGRhdGEgPSBi
dXR0ZXJmbHkuY29udGlndW91cygpLmRhdGEoKTsKICAgICAgICAgYm9vbCBob2xlc0tub3duVG9C
ZU9LID0gZmFsc2U7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsr
aSkgewpAQCAtNTgxLDYgKzYyMCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBmYXN0Sm9pbihF
eGVjU3RhdGUKICAgICAgICAgICAgICAgICBqb2luZXIuYXBwZW5kRW1wdHlTdHJpbmcoKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAg
IHJldHVybiBqb2luZXIuam9pbihzdGF0ZSk7CiAgICAgfQogICAgIGNhc2UgQUxMX0RPVUJMRV9J
TkRFWElOR19UWVBFUzogewpAQCAtNTg4LDcgKzYyOCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBmYXN0Sm9pbihFeGVjU3RhdGUKICAgICAgICAgaWYgKGxlbmd0aCA+IGJ1dHRlcmZseS5wdWJs
aWNMZW5ndGgoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBKU1N0cmluZ0pvaW5lciBq
b2luZXIoc3RhdGUsIHNlcGFyYXRvciwgbGVuZ3RoKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKICAgICAgICAgYXV0byBkYXRhID0gYnV0dGVyZmx5LmNvbnRpZ3VvdXNEb3VibGUo
KS5kYXRhKCk7CiAgICAgICAgIGJvb2wgaG9sZXNLbm93blRvQmVPSyA9IGZhbHNlOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKQEAgLTYwNCwxOSArNjQ0
LDIxIEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBmYXN0Sm9pbihFeGVjU3RhdGUKICAgICAgICAg
ICAgICAgICBqb2luZXIuYXBwZW5kRW1wdHlTdHJpbmcoKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQorICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIHJldHVybiBqb2luZXIuam9p
bihzdGF0ZSk7CiAgICAgfQogICAgIH0KIAogZ2VuZXJhbENhc2U6CiAgICAgSlNTdHJpbmdKb2lu
ZXIgam9pbmVyKHN0YXRlLCBzZXBhcmF0b3IsIGxlbmd0aCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAg
ICBKU1ZhbHVlIGVsZW1lbnQgPSB0aGlzT2JqZWN0LT5nZXRJbmRleCgmc3RhdGUsIGkpOwotICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOworICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBqb2luZXIuYXBwZW5kKHN0YXRl
LCBlbGVtZW50KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgp
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICB9CisgICAg
c2NvcGUucmVsZWFzZSgpOwogICAgIHJldHVybiBqb2luZXIuam9pbihzdGF0ZSk7CiB9CiAKQEAg
LTYyNywxMCArNjY5LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0YKIAogICAgIC8vIDEuIExldCBPIGJlID8gVG9PYmplY3QodGhpcyB2YWx1ZSkuCiAgICAgSlNP
YmplY3QqIHRoaXNPYmplY3QgPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0
TW9kZSkudG9PYmplY3QoZXhlYyk7Ci0gICAgaWYgKCF0aGlzT2JqZWN0KQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgQVNTRVJUKCEhc2NvcGUuZXhjZXB0
aW9uKCkgPT0gIXRoaXNPYmplY3QpOworICAgIGlmIChVTkxJS0VMWSghdGhpc09iamVjdCkpCisg
ICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogCiAgICAgU3RyaW5nUmVjdXJzaW9uQ2hl
Y2tlciBjaGVja2VyKGV4ZWMsIHRoaXNPYmplY3QpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0
aW9uKCkgfHwgY2hlY2tlci5lYXJseVJldHVyblZhbHVlKCkpOwogICAgIGlmIChKU1ZhbHVlIGVh
cmx5UmV0dXJuVmFsdWUgPSBjaGVja2VyLmVhcmx5UmV0dXJuVmFsdWUoKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShlYXJseVJldHVyblZhbHVlKTsKIApAQCAtNjQ5LDExICs2OTMs
MTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICAg
ICAgSlNTdHJpbmcqIGpzU2VwYXJhdG9yID0ganNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZXhlYywg
Y29tbWEpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAKKyAgICAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoc2xvd0pvaW4oKmV4ZWMsIHRoaXNPYmplY3QsIGpzU2VwYXJh
dG9yLCBsZW5ndGg2NCkpOwogICAgICAgICB9CiAKICAgICAgICAgdW5zaWduZWQgdW5zaWduZWRM
ZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoKTsKICAgICAgICAgQVNTRVJUKHN0
YXRpY19jYXN0PGRvdWJsZT4odW5zaWduZWRMZW5ndGgpID09IGxlbmd0aCk7CisKKyAgICAgICAg
c2NvcGUucmVsZWFzZSgpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGZhc3RKb2lu
KCpleGVjLCB0aGlzT2JqZWN0LCB7ICZjb21tYSwgMSB9LCB1bnNpZ25lZExlbmd0aCkpOwogICAg
IH0KIApAQCAtNjY0LDYgKzcxMSw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0YKICAgICBpZiAoVU5MSUtFTFkobGVuZ3RoID4gc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpIHx8ICFjYW5Vc2VGYXN0Sm9pbih0aGlzT2JqZWN0KSkpIHsKICAgICAg
ICAgdWludDY0X3QgbGVuZ3RoNjQgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4obGVuZ3RoKTsKICAg
ICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGRvdWJsZT4obGVuZ3RoNjQpID09IGxlbmd0aCk7CisK
KyAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHNsb3dKb2luKCpleGVjLCB0aGlzT2JqZWN0LCBqc1NlcGFyYXRvciwgbGVuZ3RoNjQpKTsKICAg
ICB9CiAKQEAgLTY4MSwyOCArNzMwLDM0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlQcm90b0YKIAogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCku
dG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpOwogCi0gICAgaWYgKGlzSlNBcnJheSh0aGlzVmFsdWUp
KQorICAgIGlmIChpc0pTQXJyYXkodGhpc1ZhbHVlKSkgeworICAgICAgICBzY29wZS5yZWxlYXNl
KCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNBcnJheSh0aGlzVmFsdWUpLT5w
b3AoZXhlYykpOworICAgIH0KIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLnRv
T2JqZWN0KGV4ZWMpOwotICAgIGlmICghdGhpc09iaikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKCkpOworICAgIEFTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICF0
aGlzT2JqKTsKKyAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmopKQorICAgICAgICByZXR1cm4gZW5j
b2RlZEpTVmFsdWUoKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhp
c09iaik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAKLSAgICBKU1ZhbHVlIHJlc3VsdDsKICAgICBpZiAobGVuZ3RoID09IDApIHsKKyAgICAgICAg
c2NvcGUucmVsZWFzZSgpOwogICAgICAgICBwdXRMZW5ndGgoZXhlYywgdm0sIHRoaXNPYmosIGpz
TnVtYmVyKGxlbmd0aCkpOwotICAgICAgICByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHJlc3VsdCA9IHRoaXNPYmotPmdldChleGVjLCBsZW5ndGggLSAxKTsK
LSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0g
ICAgICAgIGlmICghdGhpc09iai0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5k
ZXgodGhpc09iaiwgZXhlYywgbGVuZ3RoIC0gMSkpIHsKLSAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoVW5hYmxlVG9EZWxldGVQcm9wZXJ0eUVycm9y
KSk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwot
ICAgICAgICB9Ci0gICAgICAgIHB1dExlbmd0aChleGVjLCB2bSwgdGhpc09iaiwganNOdW1iZXIo
bGVuZ3RoIC0gMSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIH0KKworICAgIEpTVmFsdWUgcmVzdWx0ID0gdGhpc09iai0+Z2V0KGV4ZWMsIGxl
bmd0aCAtIDEpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOworICAgIGJvb2wgc3VjY2VzcyA9IHRoaXNPYmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRl
UHJvcGVydHlCeUluZGV4KHRoaXNPYmosIGV4ZWMsIGxlbmd0aCAtIDEpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIGlmIChVTkxJS0VMWSgh
c3VjY2VzcykpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0
ZXJhbChVbmFibGVUb0RlbGV0ZVByb3BlcnR5RXJyb3IpKTsKKyAgICAgICAgcmV0dXJuIGVuY29k
ZWRKU1ZhbHVlKCk7CisgICAgfQorICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICBwdXRMZW5ndGgo
ZXhlYywgdm0sIHRoaXNPYmosIGpzTnVtYmVyKGxlbmd0aCAtIDEpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKQEAgLTcxNCwyOSArNzY5LDMyIEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAogICAgIGlmIChpc0pTQXJyYXkodGhp
c1ZhbHVlKSAmJiBleGVjLT5hcmd1bWVudENvdW50KCkgPT0gMSkgewogICAgICAgICBKU0FycmF5
KiBhcnJheSA9IGFzQXJyYXkodGhpc1ZhbHVlKTsKKyAgICAgICAgc2NvcGUucmVsZWFzZSgpOwog
ICAgICAgICBhcnJheS0+cHVzaChleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYXJyYXktPmxlbmd0aCgpKSk7
CiAgICAgfQogICAgIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLnRvT2JqZWN0
KGV4ZWMpOwotICAgIGlmICghdGhpc09iaikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpOworICAgIEFTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICF0aGlzT2Jq
KTsKKyAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmopKQorICAgICAgICByZXR1cm4gZW5jb2RlZEpT
VmFsdWUoKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAg
ICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyBuKyspIHsK
ICAgICAgICAgLy8gQ2hlY2sgZm9yIGludGVnZXIgb3ZlcmZsb3c7IHdoZXJlIHNhZmUgd2UgY2Fu
IGRvIGEgZmFzdCBwdXQgYnkgaW5kZXguCiAgICAgICAgIGlmIChsZW5ndGggKyBuID49IGxlbmd0
aCkKLSAgICAgICAgICAgIHRoaXNPYmotPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgodGhpc09i
aiwgZXhlYywgbGVuZ3RoICsgbiwgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQobiksIHRydWUpOwor
ICAgICAgICAgICAgdGhpc09iai0+bWV0aG9kVGFibGUodm0pLT5wdXRCeUluZGV4KHRoaXNPYmos
IGV4ZWMsIGxlbmd0aCArIG4sIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KG4pLCB0cnVlKTsKICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzT2JqKTsK
ICAgICAgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyhleGVjLCBKU1ZhbHVlKHN0YXRpY19jYXN0PGludDY0X3Q+KGxlbmd0aCkgKyBzdGF0aWNf
Y2FzdDxpbnQ2NF90PihuKSkudG9XVEZTdHJpbmcoZXhlYykpOwotICAgICAgICAgICAgdGhpc09i
ai0+bWV0aG9kVGFibGUoKS0+cHV0KHRoaXNPYmosIGV4ZWMsIHByb3BlcnR5TmFtZSwgZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQobiksIHNsb3QpOworICAgICAgICAgICAgdGhpc09iai0+bWV0aG9k
VGFibGUodm0pLT5wdXQodGhpc09iaiwgZXhlYywgcHJvcGVydHlOYW1lLCBleGVjLT51bmNoZWNr
ZWRBcmd1bWVudChuKSwgc2xvdCk7CiAgICAgICAgIH0KICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgfQogICAgIAogICAgIEpTVmFsdWUg
bmV3TGVuZ3RoKHN0YXRpY19jYXN0PGludDY0X3Q+KGxlbmd0aCkgKyBzdGF0aWNfY2FzdDxpbnQ2
NF90PihleGVjLT5hcmd1bWVudENvdW50KCkpKTsKKyAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAg
cHV0TGVuZ3RoKGV4ZWMsIHZtLCB0aGlzT2JqLCBuZXdMZW5ndGgpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUobmV3TGVuZ3RoKTsKIH0KQEAgLTc0Nyw4ICs4MDUsOSBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBleGVjLT50aGlz
VmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7Ci0gICAgaWYg
KCF0aGlzT2JqZWN0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7
CisgICAgQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gIXRoaXNPYmplY3QpOworICAgIGlm
IChVTkxJS0VMWSghdGhpc09iamVjdCkpCisgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgp
OwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gZ2V0TGVuZ3RoKGV4ZWMsIHRoaXNPYmplY3QpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwpAQCAtODA5
LDE5ICs4NjgsMjUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgog
ICAgICAgICBpZiAodXBwZXJFeGlzdHMpIHsKICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dEJ5
SW5kZXhJbmxpbmUoZXhlYywgbG93ZXIsIHVwcGVyVmFsdWUsIHRydWUpOwogICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgICAgIH0g
ZWxzZSBpZiAoIXRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGxvd2VyKSkgewotICAgICAgICAgICAgaWYgKCFzY29wZS5l
eGNlcHRpb24oKSkKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9
IHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNP
YmplY3QsIGV4ZWMsIGxvd2VyKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFzdWNjZXNz
KSkgewogICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxp
dGVyYWwoVW5hYmxlVG9EZWxldGVQcm9wZXJ0eUVycm9yKSk7Ci0gICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVuY29k
ZWRKU1ZhbHVlKCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobG93
ZXJFeGlzdHMpIHsKICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dEJ5SW5kZXhJbmxpbmUoZXhl
YywgdXBwZXIsIGxvd2VyVmFsdWUsIHRydWUpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoIXRoaXNP
YmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3Qs
IGV4ZWMsIHVwcGVyKSkgewotICAgICAgICAgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IHRoaXNPYmplY3QtPm1l
dGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIHVw
cGVyKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFzdWNjZXNzKSkgewogICAgICAgICAg
ICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoVW5hYmxlVG9E
ZWxldGVQcm9wZXJ0eUVycm9yKSk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7Cisg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0aGlzT2JqZWN0KTsKQEAgLTgzMiwyMSArODk3LDI0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVjdCogdGhpc09iaiA9
IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVj
KTsKLSAgICBpZiAoIXRoaXNPYmopCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNW
YWx1ZSgpKTsKKyAgICBBU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAhdGhpc09iaik7Cisg
ICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqKSkKKyAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVl
KCk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gZ2V0TGVuZ3RoKGV4ZWMsIHRoaXNPYmopOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCi0gICAgSlNW
YWx1ZSByZXN1bHQ7CiAgICAgaWYgKGxlbmd0aCA9PSAwKSB7CisgICAgICAgIHNjb3BlLnJlbGVh
c2UoKTsKICAgICAgICAgcHV0TGVuZ3RoKGV4ZWMsIHZtLCB0aGlzT2JqLCBqc051bWJlcihsZW5n
dGgpKTsKLSAgICAgICAgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICByZXN1bHQgPSB0aGlzT2JqLT5nZXRJbmRleChleGVjLCAwKTsKLSAgICAgICAgc2hpZnQ8
SlNBcnJheTo6U2hpZnRDb3VudEZvclNoaWZ0PihleGVjLCB0aGlzT2JqLCAwLCAxLCAwLCBsZW5n
dGgpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKLSAgICAgICAgcHV0TGVuZ3RoKGV4ZWMsIHZtLCB0aGlzT2JqLCBqc051bWJlcihsZW5ndGgg
LSAxKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgfQorCisgICAgSlNWYWx1ZSByZXN1bHQgPSB0aGlzT2JqLT5nZXRJbmRleChleGVjLCAwKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBz
aGlmdDxKU0FycmF5OjpTaGlmdENvdW50Rm9yU2hpZnQ+KGV4ZWMsIHRoaXNPYmosIDAsIDEsIDAs
IGxlbmd0aCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CisgICAgc2NvcGUucmVsZWFzZSgpOworICAgIHB1dExlbmd0aChleGVjLCB2bSwgdGhpc09i
aiwganNOdW1iZXIobGVuZ3RoIC0gMSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKIH0KIApAQCAtODU2LDIwICs5MjQsMjYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheVByb3RvRgogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gZXhl
Yy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwot
ICAgIGlmICghdGhpc09iaikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpOworICAgIEFTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICF0aGlzT2JqKTsKKyAgICBp
ZiAoVU5MSUtFTFkoIXRoaXNPYmopKQorICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsK
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICB1bnNpZ25l
ZCBiZWdpbiA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMCwgbGVu
Z3RoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
ICAgICB1bnNpZ25lZCBlbmQgPSBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGV4
ZWMsIDEsIGxlbmd0aCwgbGVuZ3RoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIHN0ZDo6cGFpcjxTcGVjaWVzQ29uc3RydWN0UmVzdWx0
LCBKU09iamVjdCo+IHNwZWNpZXNSZXN1bHQgPSBzcGVjaWVzQ29uc3RydWN0QXJyYXkoZXhlYywg
dGhpc09iaiwgZW5kIC0gYmVnaW4pOwogICAgIC8vIFdlIGNhbiBvbmx5IGdldCBhbiBleGNlcHRp
b24gaWYgd2UgY2FsbCBzb21lIHVzZXIgZnVuY3Rpb24uCisgICAgQVNTRVJUKCEhc2NvcGUuZXhj
ZXB0aW9uKCkgPT0gKHNwZWNpZXNSZXN1bHQuZmlyc3QgPT0gU3BlY2llc0NvbnN0cnVjdFJlc3Vs
dDo6RXhjZXB0aW9uKSk7CiAgICAgaWYgKFVOTElLRUxZKHNwZWNpZXNSZXN1bHQuZmlyc3QgPT0g
U3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RXhjZXB0aW9uKSkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVl
KCk7CiAKLSAgICBpZiAoTElLRUxZKHNwZWNpZXNSZXN1bHQuZmlyc3QgPT0gU3BlY2llc0NvbnN0
cnVjdFJlc3VsdDo6RmFzdFBhdGggJiYgaXNKU0FycmF5KHRoaXNPYmopICYmIGxlbmd0aCA9PSBn
ZXRMZW5ndGgoZXhlYywgdGhpc09iaikpKSB7CisgICAgYm9vbCBva1RvRG9GYXN0UGF0aCA9IHNw
ZWNpZXNSZXN1bHQuZmlyc3QgPT0gU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RmFzdFBhdGggJiYg
aXNKU0FycmF5KHRoaXNPYmopICYmIGxlbmd0aCA9PSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAg
aWYgKExJS0VMWShva1RvRG9GYXN0UGF0aCkpIHsKICAgICAgICAgaWYgKEpTQXJyYXkqIHJlc3Vs
dCA9IGFzQXJyYXkodGhpc09iaiktPmZhc3RTbGljZSgqZXhlYywgYmVnaW4sIGVuZCAtIGJlZ2lu
KSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9CkBA
IC04ODYsOCArOTYwLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0YKICAgICBmb3IgKHVuc2lnbmVkIGsgPSBiZWdpbjsgayA8IGVuZDsgaysrLCBuKyspIHsKICAg
ICAgICAgSlNWYWx1ZSB2ID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgayk7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgICAgICBp
ZiAodikKKyAgICAgICAgaWYgKHYpIHsKICAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5k
ZXgoZXhlYywgbiwgdiwgMCwgUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyk7CisgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAg
fQogICAgIH0KICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgc2V0TGVuZ3RoKGV4ZWMsIHZtLCBy
ZXN1bHQsIG4pOwpAQCAtOTAyLDE1ICs5NzgsMTcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheVByb3RvRgogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4
ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmICghdGhpc09iaikKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIEFTU0VSVCghIXNjb3Bl
LmV4Y2VwdGlvbigpID09ICF0aGlzT2JqKTsKKyAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmopKQor
ICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBn
ZXRMZW5ndGgoZXhlYywgdGhpc09iaik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkgewog
ICAgICAgICBzdGQ6OnBhaXI8U3BlY2llc0NvbnN0cnVjdFJlc3VsdCwgSlNPYmplY3QqPiBzcGVj
aWVzUmVzdWx0ID0gc3BlY2llc0NvbnN0cnVjdEFycmF5KGV4ZWMsIHRoaXNPYmosIDApOwotICAg
ICAgICBpZiAoc3BlY2llc1Jlc3VsdC5maXJzdCA9PSBTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpF
eGNlcHRpb24pCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworICAgICAgICBBU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAoc3BlY2llc1Jlc3Vs
dC5maXJzdCA9PSBTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpFeGNlcHRpb24pKTsKKyAgICAgICAg
aWYgKFVOTElLRUxZKHNwZWNpZXNSZXN1bHQuZmlyc3QgPT0gU3BlY2llc0NvbnN0cnVjdFJlc3Vs
dDo6RXhjZXB0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogCiAg
ICAgICAgIEpTT2JqZWN0KiByZXN1bHQ7CiAgICAgICAgIGlmIChzcGVjaWVzUmVzdWx0LmZpcnN0
ID09IFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkNyZWF0ZWRPYmplY3QpCkBAIC05MjgsMTAgKzEw
MDYsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIH0K
IAogICAgIHVuc2lnbmVkIGFjdHVhbFN0YXJ0ID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3Rh
cnRPckVuZChleGVjLCAwLCBsZW5ndGgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgdW5zaWduZWQgYWN0dWFsRGVsZXRlQ291bnQgPSBs
ZW5ndGggLSBhY3R1YWxTdGFydDsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMSkg
ewogICAgICAgICBkb3VibGUgZGVsZXRlQ291bnQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgx
KS50b0ludGVnZXIoZXhlYyk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogICAgICAgICBpZiAoZGVsZXRlQ291bnQgPCAwKQogICAgICAgICAg
ICAgYWN0dWFsRGVsZXRlQ291bnQgPSAwOwogICAgICAgICBlbHNlIGlmIChkZWxldGVDb3VudCA+
IGxlbmd0aCAtIGFjdHVhbFN0YXJ0KQpAQCAtOTQxLDExICsxMDIxLDE0IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICB9CiAKICAgICBzdGQ6OnBhaXI8U3Bl
Y2llc0NvbnN0cnVjdFJlc3VsdCwgSlNPYmplY3QqPiBzcGVjaWVzUmVzdWx0ID0gc3BlY2llc0Nv
bnN0cnVjdEFycmF5KGV4ZWMsIHRoaXNPYmosIGFjdHVhbERlbGV0ZUNvdW50KTsKKyAgICBBU1NF
UlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAoc3BlY2llc1Jlc3VsdC5maXJzdCA9PSBTcGVjaWVz
Q29uc3RydWN0UmVzdWx0OjpFeGNlcHRpb24pKTsKICAgICBpZiAoc3BlY2llc1Jlc3VsdC5maXJz
dCA9PSBTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpFeGNlcHRpb24pCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBKU09iamVjdCogcmVzdWx0ID0g
bnVsbHB0cjsKLSAgICBpZiAoc3BlY2llc1Jlc3VsdC5maXJzdCA9PSBTcGVjaWVzQ29uc3RydWN0
UmVzdWx0OjpGYXN0UGF0aCAmJiBpc0pTQXJyYXkodGhpc09iaikgJiYgbGVuZ3RoID09IGdldExl
bmd0aChleGVjLCB0aGlzT2JqKSkKKyAgICBib29sIG9rVG9Eb0Zhc3RQYXRoID0gc3BlY2llc1Jl
c3VsdC5maXJzdCA9PSBTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpGYXN0UGF0aCAmJiBpc0pTQXJy
YXkodGhpc09iaikgJiYgbGVuZ3RoID09IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBpZiAoTElL
RUxZKG9rVG9Eb0Zhc3RQYXRoKSkKICAgICAgICAgcmVzdWx0ID0gYXNBcnJheSh0aGlzT2JqKS0+
ZmFzdFNsaWNlKCpleGVjLCBhY3R1YWxTdGFydCwgYWN0dWFsRGVsZXRlQ291bnQpOwogCiAgICAg
aWYgKCFyZXN1bHQpIHsKQEAgLTEwMDAsOCArMTA4Myw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAvLyAxNS40LjQuMTMKIAogICAgIEpTT2JqZWN0KiB0
aGlzT2JqID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2Jq
ZWN0KGV4ZWMpOwotICAgIGlmICghdGhpc09iaikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKCkpOworICAgIEFTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICF0aGlz
T2JqKTsKKyAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmopKQorICAgICAgICByZXR1cm4gZW5jb2Rl
ZEpTVmFsdWUoKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09i
aik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAK
QEAgLTEwMTUsNiArMTA5OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b0YKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAgICAgfQogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIobGVuZ3RoICsgbnJBcmdz
KTsKKyAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgcHV0TGVuZ3RoKGV4ZWMsIHZtLCB0aGlzT2Jq
LCByZXN1bHQpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KQEAgLTEw
MjYsOCArMTExMSw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YK
IAogICAgIC8vIDE1LjQuNC4xNAogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gZXhlYy0+dGhpc1Zh
bHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmICgh
dGhpc09iaikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAg
IEFTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICF0aGlzT2JqKTsKKyAgICBpZiAoVU5MSUtF
TFkoIXRoaXNPYmopKQorICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKICAgICB1bnNp
Z25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKQEAgLTEwNTMsMTAgKzExMzksMTEg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiAgICAgLy8gMTUu
NC40LjE1CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMo
ZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7Ci0gICAgaWYgKCF0aGlzT2JqKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgQVNTRVJUKCEhc2Nv
cGUuZXhjZXB0aW9uKCkgPT0gIXRoaXNPYmopOworICAgIGlmIChVTkxJS0VMWSghdGhpc09iaikp
CisgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9
IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsKLSAgICBpZiAoIWxlbmd0aCkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpIHx8ICFsZW5ndGgpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOdW1iZXIoLTEpKTsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0gbGVuZ3Ro
IC0gMTsKQEAgLTExMzEsMTMgKzEyMTgsMTYgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGNvbmNh
dEFwcGVuZE9uZShFeAogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSkpOwogCi0gICAgaWYgKCFy
ZXN1bHQtPmFwcGVuZE1lbWNweShleGVjLCB2bSwgMCwgZmlyc3QpKSB7Ci0gICAgICAgIGlmICgh
bW92ZUVsZW1lbnRzKGV4ZWMsIHZtLCByZXN1bHQsIDAsIGZpcnN0LCBmaXJzdEFycmF5U2l6ZSkp
IHsKLSAgICAgICAgICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7Ci0gICAgICAgIH0KKyAgICBib29sIHN1
Y2Nlc3MgPSByZXN1bHQtPmFwcGVuZE1lbWNweShleGVjLCB2bSwgMCwgZmlyc3QpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIGlmICghc3Vj
Y2VzcykgeworICAgICAgICBib29sIHN1Y2Nlc3MgPSBtb3ZlRWxlbWVudHMoZXhlYywgdm0sIHJl
c3VsdCwgMCwgZmlyc3QsIGZpcnN0QXJyYXlTaXplKTsKKyAgICAgICAgQVNTRVJUKCFzY29wZS5l
eGNlcHRpb24oKSA9PSBzdWNjZXNzKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdWNjZXNzKSkK
KyAgICAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogICAgIH0KIAorICAgIHNjb3Bl
LnJlbGVhc2UoKTsKICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGZpcnN0QXJyYXlT
aXplLCBzZWNvbmQpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIApAQCAt
MTE1OSwxMiArMTI0OSwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJv
dG9QCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogCiAgICAgLy8g
V2UgbmVlZCB0byBjaGVjayB0aGUgc3BlY2llcyBjb25zdHJ1Y3RvciBoZXJlIHNpbmNlIGNoZWNr
aW5nIGl0IGluIHRoZSBKUyB3cmFwcGVyIGlzIHRvbyBleHBlbnNpdmUgZm9yIHRoZSBub24tb3B0
aW1pemluZyB0aWVycy4KLSAgICBpZiAoVU5MSUtFTFkoIXNwZWNpZXNXYXRjaHBvaW50c1ZhbGlk
KGV4ZWMsIGZpcnN0QXJyYXkpKSkKKyAgICBib29sIGlzVmFsaWQgPSBzcGVjaWVzV2F0Y2hwb2lu
dHNWYWxpZChleGVjLCBmaXJzdEFycmF5KTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigp
IHx8ICFpc1ZhbGlkKTsKKyAgICBpZiAoVU5MSUtFTFkoIWlzVmFsaWQpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKIAogICAgIEpTVmFsdWUgc2Vjb25kID0gZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMSk7Ci0gICAgaWYgKCFpc0pTQXJyYXkoc2Vjb25kKSkKKyAg
ICBpZiAoIWlzSlNBcnJheShzZWNvbmQpKSB7CisgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAg
ICAgICAgcmV0dXJuIGNvbmNhdEFwcGVuZE9uZShleGVjLCB2bSwgZmlyc3RBcnJheSwgc2Vjb25k
KTsKKyAgICB9CiAKICAgICBKU0FycmF5KiBzZWNvbmRBcnJheSA9IGpzQ2FzdDxKU0FycmF5Kj4o
c2Vjb25kKTsKICAgICAKQEAgLTExODAsMTEgKzEyNzQsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvUAogICAgICAgICBKU0FycmF5KiByZXN1bHQgPSBjb25zdHJ1
Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIGZpcnN0QXJyYXlTaXplICsgc2Vjb25kQXJyYXlT
aXplKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAKLSAgICAgICAgaWYgKCFtb3ZlRWxlbWVudHMoZXhlYywgdm0sIHJlc3VsdCwgMCwgZmly
c3RBcnJheSwgZmlyc3RBcnJheVNpemUpCi0gICAgICAgICAgICB8fCAhbW92ZUVsZW1lbnRzKGV4
ZWMsIHZtLCByZXN1bHQsIGZpcnN0QXJyYXlTaXplLCBzZWNvbmRBcnJheSwgc2Vjb25kQXJyYXlT
aXplKSkgewotICAgICAgICAgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpKTsKLSAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKLSAgICAgICAgfQorICAgICAg
ICBib29sIHN1Y2Nlc3MgPSBtb3ZlRWxlbWVudHMoZXhlYywgdm0sIHJlc3VsdCwgMCwgZmlyc3RB
cnJheSwgZmlyc3RBcnJheVNpemUpOworICAgICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigp
ID09IHN1Y2Nlc3MpOworICAgICAgICBpZiAoVU5MSUtFTFkoIXN1Y2Nlc3MpKQorICAgICAgICAg
ICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CisgICAgICAgIHN1Y2Nlc3MgPSBtb3ZlRWxlbWVu
dHMoZXhlYywgdm0sIHJlc3VsdCwgZmlyc3RBcnJheVNpemUsIHNlY29uZEFycmF5LCBzZWNvbmRB
cnJheVNpemUpOworICAgICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpID09IHN1Y2Nlc3Mp
OworICAgICAgICBpZiAoVU5MSUtFTFkoIXN1Y2Nlc3MpKQorICAgICAgICAgICAgcmV0dXJuIGVu
Y29kZWRKU1ZhbHVlKCk7CiAKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OwogICAgIH0KQEAgLTEyNTAsNiArMTM0Nyw3IEBAIEFycmF5UHJvdG90eXBlOjpTcGVjaWVzV2F0
Y2hwb2ludFN0YXR1cyAKICAgICBBU1NFUlQobV9zcGVjaWVzV2F0Y2hwb2ludFN0YXR1cyA9PSBT
cGVjaWVzV2F0Y2hwb2ludFN0YXR1czo6VW5pbml0aWFsaXplZCk7CiAKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAog
ICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJBdHRlbXB0aW5nIHRvIGluaXRpYWxp
emUgQXJyYXkgc3BlY2llcyB3YXRjaHBvaW50cyBmb3IgQXJyYXkucHJvdG90eXBlOiAiLCBwb2lu
dGVyRHVtcCh0aGlzKSwgIiB3aXRoIHN0cnVjdHVyZTogIiwgcG9pbnRlckR1bXAodGhpcy0+c3Ry
dWN0dXJlKCkpLCAiXG5hbmQgQXJyYXk6ICIsIHBvaW50ZXJEdW1wKHRoaXMtPmdsb2JhbE9iamVj
dCgpLT5hcnJheUNvbnN0cnVjdG9yKCkpLCAiIHdpdGggc3RydWN0dXJlOiAiLCBwb2ludGVyRHVt
cCh0aGlzLT5nbG9iYWxPYmplY3QoKS0+YXJyYXlDb25zdHJ1Y3RvcigpLT5zdHJ1Y3R1cmUoKSks
ICJcbiIpOwpAQCAtMTI2Nyw3ICsxMzY1LDggQEAgQXJyYXlQcm90b3R5cGU6OlNwZWNpZXNXYXRj
aHBvaW50U3RhdHVzIAogCiAgICAgUHJvcGVydHlTbG90IGNvbnN0cnVjdG9yU2xvdCh0aGlzLCBQ
cm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5KTsKICAgICBKU1ZhbHVl
KHRoaXMpLmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgY29uc3RydWN0
b3JTbG90KTsKLSAgICBpZiAoY29uc3RydWN0b3JTbG90LnNsb3RCYXNlKCkgIT0gdGhpcworICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkKKyAgICAgICAgfHwgY29uc3RydWN0b3JT
bG90LnNsb3RCYXNlKCkgIT0gdGhpcwogICAgICAgICB8fCAhY29uc3RydWN0b3JTbG90LmlzQ2Fj
aGVhYmxlVmFsdWUoKQogICAgICAgICB8fCBjb25zdHJ1Y3RvclNsb3QuZ2V0VmFsdWUoZXhlYywg
dm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IpICE9IGFycmF5Q29uc3RydWN0b3IpCiAgICAg
ICAgIHJldHVybiBtX3NwZWNpZXNXYXRjaHBvaW50U3RhdHVzID0gU3BlY2llc1dhdGNocG9pbnRT
dGF0dXM6OkZpcmVkOwpAQCAtMTI3OCw3ICsxMzc3LDggQEAgQXJyYXlQcm90b3R5cGU6OlNwZWNp
ZXNXYXRjaHBvaW50U3RhdHVzIAogCiAgICAgUHJvcGVydHlTbG90IHNwZWNpZXNTbG90KGFycmF5
Q29uc3RydWN0b3IsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkp
OwogICAgIEpTVmFsdWUoYXJyYXlDb25zdHJ1Y3RvcikuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFt
ZXMtPnNwZWNpZXNTeW1ib2wsIHNwZWNpZXNTbG90KTsKLSAgICBpZiAoc3BlY2llc1Nsb3Quc2xv
dEJhc2UoKSAhPSBhcnJheUNvbnN0cnVjdG9yCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKQorICAgICAgICB8fCBzcGVjaWVzU2xvdC5zbG90QmFzZSgpICE9IGFycmF5Q29uc3Ry
dWN0b3IKICAgICAgICAgfHwgIXNwZWNpZXNTbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkKICAgICAg
ICAgfHwgc3BlY2llc1Nsb3QuZ2V0dGVyU2V0dGVyKCkgIT0gZ2xvYmFsT2JqZWN0LT5zcGVjaWVz
R2V0dGVyU2V0dGVyKCkpCiAgICAgICAgIHJldHVybiBtX3NwZWNpZXNXYXRjaHBvaW50U3RhdHVz
ID0gU3BlY2llc1dhdGNocG9pbnRTdGF0dXM6OkZpcmVkOwo=
</data>
<flag name="review"
          id="318006"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>