<?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>150968</bug_id>
          
          <creation_ts>2015-11-05 23:19:39 -0800</creation_ts>
          <short_desc>Implement authentication challenge handling when using NETWORK_SESSION</short_desc>
          <delta_ts>2015-11-12 11:48:26 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>cdumez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1139894</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-05 23:19:39 -0800</bug_when>
    <thetext>Implement authentication challenge handling when using NETWORK_SESSION</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139895</commentid>
    <comment_count>1</comment_count>
      <attachid>264918</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-05 23:19:53 -0800</bug_when>
    <thetext>Created attachment 264918
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139897</commentid>
    <comment_count>2</comment_count>
      <attachid>264918</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-05 23:26:37 -0800</bug_when>
    <thetext>Comment on attachment 264918
Patch

This is conceptually a step in the right direction, but I think I&apos;ll have to reimplement a lot of this.  I&apos;ll still have to sometimes save the callback, communicate with the UIProcess to get a credential, but I think I&apos;m going to have to redo the AuthenticationManager.  It does a lot of coalescing, which I don&apos;t think I&apos;ll need to do because I need to implement URLSession:didReceiveChallenge:completionHandler: separate from URLSession:task:didReceiveChallenge:completionHandler: instead of using ProtectionSpaceAuthenticationSchemeServerTrustEvaluationRequested, and I&apos;ll also have to do deal with protection spaces in a different place than NetworkResourceLoader::canAuthenticateAgainstProtectionSpaceAsync according to https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/URLLoadingSystem/Articles/AuthenticationChallenges.html

This first patch was just so I don&apos;t lose my first attempt before reverting everything and starting over.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140949</commentid>
    <comment_count>3</comment_count>
      <attachid>265231</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-10 14:26:38 -0800</bug_when>
    <thetext>Created attachment 265231
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140963</commentid>
    <comment_count>4</comment_count>
      <attachid>265231</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-11-10 14:58:36 -0800</bug_when>
    <thetext>Comment on attachment 265231
Patch

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

&gt; Source/WebKit2/NetworkProcess/NetworkLoad.cpp:167
&gt; +        completionHandler(AuthenticationChallengeDisposition::RejectProtectionSpace, Credential());

I am pretty sure we want PerformDefaultHandling here. We basically want to let the underlying layer handle server trust in this case.

&gt; Source/WebKit2/NetworkProcess/NetworkLoad.cpp:180
&gt; +        completionHandler(AuthenticationChallengeDisposition::UseCredential, WebCore::Credential());

redundant WebCore::

&gt; Source/WebKit2/Shared/Authentication/AuthenticationManager.cpp:206
&gt; +        if (auto completionHandler = m_challengeCompletionHandlers.take(challengeID)) {

I would move the new code out of the if(!coreClient) scope and do this beforehand.

&gt; Source/WebKit2/Shared/Authentication/AuthenticationManager.cpp:235
&gt; +        if (auto completionHandler = m_challengeCompletionHandlers.take(challengeID)) {

I would move this before the if(!coreClient)

&gt; Source/WebKit2/Shared/Authentication/AuthenticationManager.cpp:263
&gt; +#if USE(NETWORK_SESSION)

I would move this before the if(!coreClient)

&gt; Source/WebKit2/Shared/Authentication/AuthenticationManager.cpp:293
&gt; +        if (auto completionHandler = m_challengeCompletionHandlers.take(challengeID)) {

I would move this before the if(!coreClient)

&gt; Source/WebKit2/Shared/Authentication/AuthenticationManager.cpp:322
&gt; +        if (auto completionHandler = m_challengeCompletionHandlers.take(challengeID)) {

I would move this before the if(!coreClient)

&gt; Source/WebKit2/Shared/Authentication/AuthenticationManager.h:99
&gt; +    HashMap&lt;uint64_t, ChallengeCompletionHandler&gt; m_challengeCompletionHandlers;

I think I would add a new struct wrapper to reduce the amount of #ifdefing:
struct AuthenticationRequest {
    WebCore::AuthenticationChallenge challenge;
#if USE(NETWORK_SESSION)
    ChallengeCompletionHandler completionHandler;
#endif
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140966</commentid>
    <comment_count>5</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-10 15:03:32 -0800</bug_when>
    <thetext>Other comments are good, and I will address.
(In reply to comment #4)
&gt; &gt; Source/WebKit2/Shared/Authentication/AuthenticationManager.h:99
&gt; &gt; +    HashMap&lt;uint64_t, ChallengeCompletionHandler&gt; m_challengeCompletionHandlers;
&gt; 
&gt; I think I would add a new struct wrapper to reduce the amount of #ifdefing:
&gt; struct AuthenticationRequest {
&gt;     WebCore::AuthenticationChallenge challenge;
&gt; #if USE(NETWORK_SESSION)
&gt;     ChallengeCompletionHandler completionHandler;
&gt; #endif
&gt; }
I think this would be great, except right now we have media loading code that makes authentication challenges without completion handlers in the WebProcess.  Once this changes, I think this change would be good.  And also getting rid of the addChallengeToChallengeMap that doesn&apos;t have a callback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140972</commentid>
    <comment_count>6</comment_count>
      <attachid>265238</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-10 15:40:38 -0800</bug_when>
    <thetext>Created attachment 265238
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141006</commentid>
    <comment_count>7</comment_count>
      <attachid>265253</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-10 17:28:57 -0800</bug_when>
    <thetext>Created attachment 265253
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141020</commentid>
    <comment_count>8</comment_count>
      <attachid>265253</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-11-10 18:23:02 -0800</bug_when>
    <thetext>Comment on attachment 265253
Patch

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

&gt; Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm:115
&gt; +            auto completionHandlerCopy = Block_copy(completionHandler);
&gt; +            client-&gt;didReceiveChallenge(challenge, [completionHandlerCopy](WebKit::AuthenticationChallengeDisposition disposition, const WebCore::Credential&amp; credential)

Why the Block_copy?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141022</commentid>
    <comment_count>9</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-10 18:29:27 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/192287</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141571</commentid>
    <comment_count>10</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-12 11:48:26 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 265253 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=265253&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm:115
&gt; &gt; +            auto completionHandlerCopy = Block_copy(completionHandler);
&gt; &gt; +            client-&gt;didReceiveChallenge(challenge, [completionHandlerCopy](WebKit::AuthenticationChallengeDisposition disposition, const WebCore::Credential&amp; credential)
&gt; 
&gt; Why the Block_copy?
Blocks are by default on the stack in non-automatic-reference-counted code, so we can&apos;t store the std::function that wraps it and call it once it goes out of scope.  With Block_copy, it copies it to the heap so we can use it later.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264918</attachid>
            <date>2015-11-05 23:19:53 -0800</date>
            <delta_ts>2015-11-10 14:26:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150968-20151105231854.patch</filename>
            <type>text/plain</type>
            <size>17728</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MjA5MykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDE1LTExLTA1ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50
IGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZSBoYW5kbGluZyB3aGVuIHVzaW5nIE5FVFdPUktfU0VT
U0lPTgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUw
OTY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVDaGFsbGVuZ2UpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAg
ICAgICogU2hhcmVkL0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uTWFuYWdlci5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkF1dGhlbnRpY2F0aW9uTWFuYWdlcjo6QXV0aGVudGljYXRpb25NYW5h
Z2VyKToKKyAgICAgICAgKFdlYktpdDo6QXV0aGVudGljYXRpb25NYW5hZ2VyOjphZGRDaGFsbGVu
Z2VUb0NoYWxsZW5nZU1hcCk6CisgICAgICAgIChXZWJLaXQ6OkF1dGhlbnRpY2F0aW9uTWFuYWdl
cjo6c2hvdWxkQ29hbGVzY2VDaGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpBdXRoZW50aWNh
dGlvbk1hbmFnZXI6OmNvYWxlc2NlQ2hhbGxlbmdlc01hdGNoaW5nKToKKyAgICAgICAgKFdlYktp
dDo6QXV0aGVudGljYXRpb25NYW5hZ2VyOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UpOgorICAgICAgICAoV2ViS2l0OjpBdXRoZW50aWNhdGlvbk1hbmFnZXI6OnVzZUNyZWRlbnRp
YWxGb3JTaW5nbGVDaGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpBdXRoZW50aWNhdGlvbk1h
bmFnZXI6OmNvbnRpbnVlV2l0aG91dENyZWRlbnRpYWxGb3JDaGFsbGVuZ2UpOgorICAgICAgICAo
V2ViS2l0OjpBdXRoZW50aWNhdGlvbk1hbmFnZXI6OmNvbnRpbnVlV2l0aG91dENyZWRlbnRpYWxG
b3JTaW5nbGVDaGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpBdXRoZW50aWNhdGlvbk1hbmFn
ZXI6OmNhbmNlbENoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6OkF1dGhlbnRpY2F0aW9uTWFu
YWdlcjo6Y2FuY2VsU2luZ2xlQ2hhbGxlbmdlKToKKyAgICAgICAgKFdlYktpdDo6QXV0aGVudGlj
YXRpb25NYW5hZ2VyOjpwZXJmb3JtRGVmYXVsdEhhbmRsaW5nKToKKyAgICAgICAgKFdlYktpdDo6
QXV0aGVudGljYXRpb25NYW5hZ2VyOjpwZXJmb3JtRGVmYXVsdEhhbmRsaW5nRm9yU2luZ2xlQ2hh
bGxlbmdlKToKKyAgICAgICAgKFdlYktpdDo6QXV0aGVudGljYXRpb25NYW5hZ2VyOjpyZWplY3RQ
cm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZSk6CisgICAgICAgIChXZWJLaXQ6OkF1dGhlbnRpY2F0
aW9uTWFuYWdlcjo6cmVqZWN0UHJvdGVjdGlvblNwYWNlQW5kQ29udGludWVGb3JTaW5nbGVDaGFs
bGVuZ2UpOgorICAgICAgICAqIFNoYXJlZC9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbk1h
bmFnZXIuaDoKKyAgICAgICAgKiBTaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6RG93bmxvYWQ6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6
CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUxvYWRlckNsaWVudDo6c2hvdWxkVXNlQ3JlZGVudGlh
bFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0
Y2hEaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSk6CisKIDIwMTUtMTEtMDUgIE5pa29zIEFuZHJvbmlrb3MgIDxuaWtvcy5hbmRyb25pa29z
LXdlYmtpdEBjaXNyYS5jYW5vbi5jb20uYXU+CiAKICAgICAgICAgQWRkIHJ1bnRpbWUgYW5kIGNv
bXBpbGUgdGltZSBmbGFncyBmb3IgZW5hYmxpbmcgV2ViIEFuaW1hdGlvbnMgQVBJIGFuZCBtb2Rl
bC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Jlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gMTkxOTk4KQorKysgU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDU3LDggKzQ1NywzMSBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6d2lsbFBl
cmZvcm1ICiAKIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlQ2hhbGxlbmdl
KGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UsIHN0ZDo6
ZnVuY3Rpb248dm9pZChBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uLCBjb25zdCBX
ZWJDb3JlOjpDcmVkZW50aWFsJik+IGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VE
aXNwb3NpdGlvbjo6UGVyZm9ybURlZmF1bHRIYW5kbGluZywgV2ViQ29yZTo6Q3JlZGVudGlhbCgp
KTsKKyAgICAvLyBOZXR3b3JrUmVzb3VyY2VMb2FkZXIgZG9lcyBub3Qga25vdyB3aGV0aGVyIHRo
ZSByZXF1ZXN0IGlzIGNyb3NzIG9yaWdpbiwgc28gV2ViIHByb2Nlc3MgY29tcHV0ZXMgYW4gYXBw
bGljYWJsZSBjcmVkZW50aWFsIHBvbGljeSBmb3IgaXQuCisgICAgQVNTRVJUKG1fcGFyYW1ldGVy
cy5jbGllbnRDcmVkZW50aWFsUG9saWN5ICE9IERvTm90QXNrQ2xpZW50Rm9yQ3Jvc3NPcmlnaW5D
cmVkZW50aWFscyk7CisgICAgCisgICAgCisgICAgLy8gSGFuZGxlIHNlcnZlciB0cnVzdCBldmFs
dWF0aW9uIGF0IHBsYXRmb3JtLWxldmVsIGlmIHJlcXVlc3RlZCwgZm9yIHBlcmZvcm1hbmNlIHJl
YXNvbnMuCisgICAgaWYgKGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKS5hdXRoZW50aWNhdGlv
blNjaGVtZSgpID09IFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lU2VydmVyVHJ1
c3RFdmFsdWF0aW9uUmVxdWVzdGVkCisgICAgICAgICYmICFOZXR3b3JrUHJvY2Vzczo6c2luZ2xl
dG9uKCkuY2FuSGFuZGxlSFRUUFNTZXJ2ZXJUcnVzdEV2YWx1YXRpb24oKSkgeworICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpSZWpl
Y3RQcm90ZWN0aW9uU3BhY2UsIENyZWRlbnRpYWwoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgaWYgKGlzU3luY2hyb25vdXMoKSkgeworICAgICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIGFzayB0aGUgV2ViUHJvY2VzcyBsaWtlIHRoZSBhc3luY2hyb25vdXMgY2FzZSBiZWxv
dyBkb2VzLgorICAgICAgICAvLyBUaGlzIGlzIGN1cnJlbnRseSBpbXBvc3NpYmxlIGFzIHRoZSBX
ZWJQcm9jZXNzIGlzIGJsb2NrZWQgd2FpdGluZyBvbiB0aGlzIHN5bmNocm9ub3VzIGxvYWQuCisg
ICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB3ZSBjYW4ganVtcCBzdHJhaWdodCB0byB0aGUg
VUkgcHJvY2VzcyB0byByZXNvbHZlIHRoaXMuCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlBlcmZvcm1EZWZhdWx0SGFuZGxpbmcs
IENyZWRlbnRpYWwoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKG1f
cGFyYW1ldGVycy5jbGllbnRDcmVkZW50aWFsUG9saWN5ID09IERvTm90QXNrQ2xpZW50Rm9yQW55
Q3JlZGVudGlhbHMpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VEaXNwb3NpdGlvbjo6VXNlQ3JlZGVudGlhbCwgV2ViQ29yZTo6Q3JlZGVudGlhbCgp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBOZXR3b3JrUHJvY2Vzczo6c2lu
Z2xldG9uKCkuYXV0aGVudGljYXRpb25NYW5hZ2VyKCkuZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKG1fcGFyYW1ldGVycy53ZWJQYWdlSUQsIG1fcGFyYW1ldGVycy53ZWJGcmFtZUlE
LCBjaGFsbGVuZ2UsIGNvbXBsZXRpb25IYW5kbGVyKTsKIH0KIAogdm9pZCBOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlc3BvbnNlRGlzcG9zaXRpb24pPiBj
b21wbGV0aW9uSGFuZGxlcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BdXRoZW50aWNh
dGlvbi9BdXRoZW50aWNhdGlvbk1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbk1hbmFnZXIuY3BwCShyZXZp
c2lvbiAxOTE5ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQXV0aGVudGljYXRpb24vQXV0
aGVudGljYXRpb25NYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsMTcgQEAg
QXV0aGVudGljYXRpb25NYW5hZ2VyOjpBdXRoZW50aWNhdGlvbk1hbgogICAgIG1fcHJvY2Vzcy0+
YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpBdXRoZW50aWNhdGlvbk1hbmFnZXI6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwogfQogCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikK
K3VpbnQ2NF90IEF1dGhlbnRpY2F0aW9uTWFuYWdlcjo6YWRkQ2hhbGxlbmdlVG9DaGFsbGVuZ2VN
YXAoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlLCBDaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlciBjb21wbGV0aW9uSGFuZGxlcikK
K3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgdWludDY0X3QgY2hhbGxl
bmdlSUQgPSBnZW5lcmF0ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlSUQoKTsKKyAgICBtX2NoYWxs
ZW5nZXMuc2V0KGNoYWxsZW5nZUlELCBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk7CisgICAgbV9j
aGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlcnMuc2V0KGNoYWxsZW5nZUlELCBjb21wbGV0aW9uSGFu
ZGxlcik7CisgICAgcmV0dXJuIGNoYWxsZW5nZUlEOworfQorI2Vsc2UKIHVpbnQ2NF90IEF1dGhl
bnRpY2F0aW9uTWFuYWdlcjo6YWRkQ2hhbGxlbmdlVG9DaGFsbGVuZ2VNYXAoY29uc3QgV2ViQ29y
ZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKQogewog
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CkBAIC03OCw2ICs4OSw3IEBAIHVpbnQ2NF90
IEF1dGhlbnRpY2F0aW9uTWFuYWdlcjo6YWRkQ2hhbGwKICAgICBtX2NoYWxsZW5nZXMuc2V0KGNo
YWxsZW5nZUlELCBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk7CiAgICAgcmV0dXJuIGNoYWxsZW5n
ZUlEOwogfQorI2VuZGlmCiAKIGJvb2wgQXV0aGVudGljYXRpb25NYW5hZ2VyOjpzaG91bGRDb2Fs
ZXNjZUNoYWxsZW5nZSh1aW50NjRfdCBjaGFsbGVuZ2VJRCwgY29uc3QgQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UmIGNoYWxsZW5nZSkgY29uc3QKIHsKQEAgLTExMCw2ICsxMjIsNyBAQCBWZWN0b3I8
dWludDY0X3Q+IEF1dGhlbnRpY2F0aW9uTWFuYWdlcjo6CiAgICAgcmV0dXJuIGNoYWxsZW5nZXNU
b0NvYWxlc2NlOwogfQogCisjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCiB2b2lkIEF1dGhlbnRp
Y2F0aW9uTWFuYWdlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdlYkZyYW1l
KiBmcmFtZSwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKQogewogICAgIEFTU0VSVChmcmFtZSk7CkBAIC0xMjMsOCArMTM2LDIzIEBAIHZvaWQg
QXV0aGVudGljYXRpb25NYW5hZ2VyOjpkaWRSZWNlaXZlQXUKICAgICAKICAgICBtX3Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKGZyYW1lLT5mcmFtZUlEKCksIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCBjaGFsbGVu
Z2VJRCksIGZyYW1lLT5wYWdlKCktPnBhZ2VJRCgpKTsKIH0KKyNlbmRpZgogCiAjaWYgRU5BQkxF
KE5FVFdPUktfUFJPQ0VTUykKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQordm9pZCBBdXRoZW50
aWNhdGlvbk1hbmFnZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSh1aW50NjRf
dCBwYWdlSUQsIHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
JiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSwgQ2hhbGxlbmdlQ29tcGxldGlvbkhhbmRsZXIgY29t
cGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKHBhZ2VJRCk7CisgICAgQVNTRVJUKGZyYW1l
SUQpOworICAgIAorICAgIHVpbnQ2NF90IGNoYWxsZW5nZUlEID0gYWRkQ2hhbGxlbmdlVG9DaGFs
bGVuZ2VNYXAoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIGNvbXBsZXRpb25IYW5kbGVyKTsKKyAg
ICAKKyAgICBpZiAoc2hvdWxkQ29hbGVzY2VDaGFsbGVuZ2UoY2hhbGxlbmdlSUQsIGF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fcHJvY2Vzcy0+
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3NQcm94eTo6RGlkUmVjZWl2ZUF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlKHBhZ2VJRCwgZnJhbWVJRCwgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIGFk
ZENoYWxsZW5nZVRvQ2hhbGxlbmdlTWFwKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCBjb21wbGV0
aW9uSGFuZGxlcikpKTsKK30KKyNlbHNlCiB2b2lkIEF1dGhlbnRpY2F0aW9uTWFuYWdlcjo6ZGlk
UmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKHVpbnQ2NF90IHBhZ2VJRCwgdWludDY0X3Qg
ZnJhbWVJRCwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKQogewogICAgIEFTU0VSVChwYWdlSUQpOwpAQCAtMTM3LDcgKzE2NSw5IEBAIHZvaWQg
QXV0aGVudGljYXRpb25NYW5hZ2VyOjpkaWRSZWNlaXZlQXUKICAgICBtX3Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OkRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZShwYWdlSUQsIGZyYW1lSUQsIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCBhZGRDaGFs
bGVuZ2VUb0NoYWxsZW5nZU1hcChhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkpKTsKIH0KICNlbmRp
ZgorI2VuZGlmCiAKKyNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKIHZvaWQgQXV0aGVudGljYXRp
b25NYW5hZ2VyOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoRG93bmxvYWQqIGRv
d25sb2FkLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgYXV0aGVudGljYXRpb25DaGFs
bGVuZ2UpCiB7CiAgICAgdWludDY0X3QgY2hhbGxlbmdlSUQgPSBhZGRDaGFsbGVuZ2VUb0NoYWxs
ZW5nZU1hcChhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk7CkBAIC0xNDYsNiArMTc2LDcgQEAgdm9p
ZCBBdXRoZW50aWNhdGlvbk1hbmFnZXI6OmRpZFJlY2VpdmVBdQogCiAgICAgZG93bmxvYWQtPnNl
bmQoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZShhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSwgYWRkQ2hhbGxlbmdlVG9DaGFsbGVuZ2VNYXAo
YXV0aGVudGljYXRpb25DaGFsbGVuZ2UpKSk7CiB9CisjZW5kaWYKIAogLy8gQ3VycmVudGx5LCBv
bmx5IE1hYyBrbm93cyBob3cgdG8gcmVzcG9uZCB0byBhdXRoZW50aWNhdGlvbiBjaGFsbGVuZ2Vz
IHdpdGggY2VydGlmaWNhdGUgaW5mby4KICNpZiAhSEFWRShTRUNfSURFTlRJVFkpCkBAIC0xNjUs
NiArMTk2LDEyIEBAIHZvaWQgQXV0aGVudGljYXRpb25NYW5hZ2VyOjp1c2VDcmVkZW50aWEKIAog
dm9pZCBBdXRoZW50aWNhdGlvbk1hbmFnZXI6OnVzZUNyZWRlbnRpYWxGb3JTaW5nbGVDaGFsbGVu
Z2UodWludDY0X3QgY2hhbGxlbmdlSUQsIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwsIGNv
bnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQogeworI2lmIFVTRShORVRXT1JL
X1NFU1NJT04pCisgICAgQVNTRVJUKG1fY2hhbGxlbmdlQ29tcGxldGlvbkhhbmRsZXJzLmNvbnRh
aW5zKGNoYWxsZW5nZUlEKSk7CisgICAgYXV0byBjb21wbGV0aW9uSGFuZGxlciA9IG1fY2hhbGxl
bmdlQ29tcGxldGlvbkhhbmRsZXJzLnRha2UoY2hhbGxlbmdlSUQpOworICAgIGNvbXBsZXRpb25I
YW5kbGVyKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlVzZUNyZWRlbnRpYWws
IGNyZWRlbnRpYWwpOworICAgIG1fY2hhbGxlbmdlcy5yZW1vdmUoY2hhbGxlbmdlSUQpOworI2Vs
c2UKICAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSBjaGFsbGVuZ2UgPSBtX2NoYWxsZW5nZXMu
dGFrZShjaGFsbGVuZ2VJRCk7CiAgICAgQVNTRVJUKCFjaGFsbGVuZ2UuaXNOdWxsKCkpOwogICAg
IApAQCAtMTgwLDYgKzIxNyw3IEBAIHZvaWQgQXV0aGVudGljYXRpb25NYW5hZ2VyOjp1c2VDcmVk
ZW50aWEKICAgICB9CiAKICAgICBjb3JlQ2xpZW50LT5yZWNlaXZlZENyZWRlbnRpYWwoY2hhbGxl
bmdlLCBjcmVkZW50aWFsKTsKKyNlbmRpZgogfQogCiB2b2lkIEF1dGhlbnRpY2F0aW9uTWFuYWdl
cjo6Y29udGludWVXaXRob3V0Q3JlZGVudGlhbEZvckNoYWxsZW5nZSh1aW50NjRfdCBjaGFsbGVu
Z2VJRCkKQEAgLTE5Miw2ICsyMzAsMTIgQEAgdm9pZCBBdXRoZW50aWNhdGlvbk1hbmFnZXI6OmNv
bnRpbnVlV2l0aAogCiB2b2lkIEF1dGhlbnRpY2F0aW9uTWFuYWdlcjo6Y29udGludWVXaXRob3V0
Q3JlZGVudGlhbEZvclNpbmdsZUNoYWxsZW5nZSh1aW50NjRfdCBjaGFsbGVuZ2VJRCkKIHsKKyNp
ZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAgIEFTU0VSVChtX2NoYWxsZW5nZUNvbXBsZXRpb25I
YW5kbGVycy5jb250YWlucyhjaGFsbGVuZ2VJRCkpOworICAgIGF1dG8gY29tcGxldGlvbkhhbmRs
ZXIgPSBtX2NoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVycy50YWtlKGNoYWxsZW5nZUlEKTsKKyAg
ICBjb21wbGV0aW9uSGFuZGxlcihBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpV
c2VDcmVkZW50aWFsLCBDcmVkZW50aWFsKCkpOworICAgIG1fY2hhbGxlbmdlcy5yZW1vdmUoY2hh
bGxlbmdlSUQpOworI2Vsc2UKICAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSBjaGFsbGVuZ2Ug
PSBtX2NoYWxsZW5nZXMudGFrZShjaGFsbGVuZ2VJRCk7CiAgICAgQVNTRVJUKCFjaGFsbGVuZ2Uu
aXNOdWxsKCkpOwogICAgIEF1dGhlbnRpY2F0aW9uQ2xpZW50KiBjb3JlQ2xpZW50ID0gY2hhbGxl
bmdlLmF1dGhlbnRpY2F0aW9uQ2xpZW50KCk7CkBAIC0yMDMsNiArMjQ3LDcgQEAgdm9pZCBBdXRo
ZW50aWNhdGlvbk1hbmFnZXI6OmNvbnRpbnVlV2l0aAogICAgIH0KIAogICAgIGNvcmVDbGllbnQt
PnJlY2VpdmVkUmVxdWVzdFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbChjaGFsbGVuZ2UpOwor
I2VuZGlmCiB9CiAKIHZvaWQgQXV0aGVudGljYXRpb25NYW5hZ2VyOjpjYW5jZWxDaGFsbGVuZ2Uo
dWludDY0X3QgY2hhbGxlbmdlSUQpCkBAIC0yMTUsNiArMjYwLDEyIEBAIHZvaWQgQXV0aGVudGlj
YXRpb25NYW5hZ2VyOjpjYW5jZWxDaGFsbGUKIAogdm9pZCBBdXRoZW50aWNhdGlvbk1hbmFnZXI6
OmNhbmNlbFNpbmdsZUNoYWxsZW5nZSh1aW50NjRfdCBjaGFsbGVuZ2VJRCkKIHsKKyNpZiBVU0Uo
TkVUV09SS19TRVNTSU9OKQorICAgIEFTU0VSVChtX2NoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVy
cy5jb250YWlucyhjaGFsbGVuZ2VJRCkpOworICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXIgPSBt
X2NoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVycy50YWtlKGNoYWxsZW5nZUlEKTsKKyAgICBjb21w
bGV0aW9uSGFuZGxlcihBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpDYW5jZWws
IENyZWRlbnRpYWwoKSk7CisgICAgbV9jaGFsbGVuZ2VzLnJlbW92ZShjaGFsbGVuZ2VJRCk7Cisj
ZWxzZQogICAgIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIGNoYWxsZW5nZSA9IG1fY2hhbGxlbmdl
cy50YWtlKGNoYWxsZW5nZUlEKTsKICAgICBBU1NFUlQoIWNoYWxsZW5nZS5pc051bGwoKSk7CiAg
ICAgQXV0aGVudGljYXRpb25DbGllbnQqIGNvcmVDbGllbnQgPSBjaGFsbGVuZ2UuYXV0aGVudGlj
YXRpb25DbGllbnQoKTsKQEAgLTIyNiw2ICsyNzcsNyBAQCB2b2lkIEF1dGhlbnRpY2F0aW9uTWFu
YWdlcjo6Y2FuY2VsU2luZ2xlCiAgICAgfQogCiAgICAgY29yZUNsaWVudC0+cmVjZWl2ZWRDYW5j
ZWxsYXRpb24oY2hhbGxlbmdlKTsKKyNlbmRpZgogfQogCiB2b2lkIEF1dGhlbnRpY2F0aW9uTWFu
YWdlcjo6cGVyZm9ybURlZmF1bHRIYW5kbGluZyh1aW50NjRfdCBjaGFsbGVuZ2VJRCkKQEAgLTIz
OCw2ICsyOTAsMTIgQEAgdm9pZCBBdXRoZW50aWNhdGlvbk1hbmFnZXI6OnBlcmZvcm1EZWZhdQog
CiB2b2lkIEF1dGhlbnRpY2F0aW9uTWFuYWdlcjo6cGVyZm9ybURlZmF1bHRIYW5kbGluZ0ZvclNp
bmdsZUNoYWxsZW5nZSh1aW50NjRfdCBjaGFsbGVuZ2VJRCkKIHsKKyNpZiBVU0UoTkVUV09SS19T
RVNTSU9OKQorICAgIEFTU0VSVChtX2NoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVycy5jb250YWlu
cyhjaGFsbGVuZ2VJRCkpOworICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXIgPSBtX2NoYWxsZW5n
ZUNvbXBsZXRpb25IYW5kbGVycy50YWtlKGNoYWxsZW5nZUlEKTsKKyAgICBjb21wbGV0aW9uSGFu
ZGxlcihBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpQZXJmb3JtRGVmYXVsdEhh
bmRsaW5nLCBDcmVkZW50aWFsKCkpOworICAgIG1fY2hhbGxlbmdlcy5yZW1vdmUoY2hhbGxlbmdl
SUQpOworI2Vsc2UKICAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSBjaGFsbGVuZ2UgPSBtX2No
YWxsZW5nZXMudGFrZShjaGFsbGVuZ2VJRCk7CiAgICAgQVNTRVJUKCFjaGFsbGVuZ2UuaXNOdWxs
KCkpOwogICAgIEF1dGhlbnRpY2F0aW9uQ2xpZW50KiBjb3JlQ2xpZW50ID0gY2hhbGxlbmdlLmF1
dGhlbnRpY2F0aW9uQ2xpZW50KCk7CkBAIC0yNDksNiArMzA3LDcgQEAgdm9pZCBBdXRoZW50aWNh
dGlvbk1hbmFnZXI6OnBlcmZvcm1EZWZhdQogICAgIH0KIAogICAgIGNvcmVDbGllbnQtPnJlY2Vp
dmVkUmVxdWVzdFRvUGVyZm9ybURlZmF1bHRIYW5kbGluZyhjaGFsbGVuZ2UpOworI2VuZGlmCiB9
CiAKIHZvaWQgQXV0aGVudGljYXRpb25NYW5hZ2VyOjpyZWplY3RQcm90ZWN0aW9uU3BhY2VBbmRD
b250aW51ZSh1aW50NjRfdCBjaGFsbGVuZ2VJRCkKQEAgLTI2MSw2ICszMjAsMTIgQEAgdm9pZCBB
dXRoZW50aWNhdGlvbk1hbmFnZXI6OnJlamVjdFByb3RlYwogCiB2b2lkIEF1dGhlbnRpY2F0aW9u
TWFuYWdlcjo6cmVqZWN0UHJvdGVjdGlvblNwYWNlQW5kQ29udGludWVGb3JTaW5nbGVDaGFsbGVu
Z2UodWludDY0X3QgY2hhbGxlbmdlSUQpCiB7CisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAg
ICBBU1NFUlQobV9jaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlcnMuY29udGFpbnMoY2hhbGxlbmdl
SUQpKTsKKyAgICBhdXRvIGNvbXBsZXRpb25IYW5kbGVyID0gbV9jaGFsbGVuZ2VDb21wbGV0aW9u
SGFuZGxlcnMudGFrZShjaGFsbGVuZ2VJRCk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbjo6UmVqZWN0UHJvdGVjdGlvblNwYWNlLCBDcmVk
ZW50aWFsKCkpOworICAgIG1fY2hhbGxlbmdlcy5yZW1vdmUoY2hhbGxlbmdlSUQpOworI2Vsc2UK
ICAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSBjaGFsbGVuZ2UgPSBtX2NoYWxsZW5nZXMudGFr
ZShjaGFsbGVuZ2VJRCk7CiAgICAgQVNTRVJUKCFjaGFsbGVuZ2UuaXNOdWxsKCkpOwogICAgIEF1
dGhlbnRpY2F0aW9uQ2xpZW50KiBjb3JlQ2xpZW50ID0gY2hhbGxlbmdlLmF1dGhlbnRpY2F0aW9u
Q2xpZW50KCk7CkBAIC0yNzIsNiArMzM3LDcgQEAgdm9pZCBBdXRoZW50aWNhdGlvbk1hbmFnZXI6
OnJlamVjdFByb3RlYwogICAgIH0KIAogICAgIGNvcmVDbGllbnQtPnJlY2VpdmVkQ2hhbGxlbmdl
UmVqZWN0aW9uKGNoYWxsZW5nZSk7CisjZW5kaWYKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRp
b25NYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0F1dGhlbnRp
Y2F0aW9uL0F1dGhlbnRpY2F0aW9uTWFuYWdlci5oCShyZXZpc2lvbiAxOTE5ODApCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25NYW5hZ2VyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIk1lc3NhZ2VSZWNl
aXZlci5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzU3VwcGxlbWVudC5oIgorI2luY2x1ZGUg
Ik5ldHdvcmtTZXNzaW9uLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1N1cHBsZW1lbnQuaCIKICNp
bmNsdWRlIDxXZWJDb3JlL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmg+CiAjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KQEAgLTUyLDEyICs1MywyMSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29u
c3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKIAotICAgIC8vIENhbGxlZCBmb3IgcmVzb3VyY2Vz
IGluIHRoZSBXZWJQcm9jZXNzIChOZXR3b3JrUHJvY2VzcyBkaXNhYmxlZCkKKyNpZiAhRU5BQkxF
KE5FVFdPUktfUFJPQ0VTUykKICAgICB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZShXZWJGcmFtZSosIGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7
Ci0gICAgLy8gQ2FsbGVkIGZvciByZXNvdXJjZXMgaW4gdGhlIE5ldHdvcmtQcm9jZXNzIChOZXR3
b3JrUHJvY2VzcyBlbmFibGVkKQorI2Vsc2UKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAg
IHR5cGVkZWYgc3RkOjpmdW5jdGlvbjx2b2lkKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9z
aXRpb24sIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmKT4gQ2hhbGxlbmdlQ29tcGxldGlvbkhh
bmRsZXI7CisgICAgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UodWludDY0
X3QgcGFnZUlELCB1aW50NjRfdCBmcmFtZUlELCBjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSYsIENoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyKTsKKyNlbHNlCiAgICAgdm9p
ZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UodWludDY0X3QgcGFnZUlELCB1aW50
NjRfdCBmcmFtZUlELCBjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwor
I2VuZGlmCisjZW5kaWYKKworI2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQogICAgIC8vIENhbGxl
ZCBmb3IgZG93bmxvYWRzIHdpdGggb3Igd2l0aG91dCB0aGUgTmV0d29ya1Byb2Nlc3MKICAgICB2
b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShEb3dubG9hZCosIGNvbnN0IFdl
YkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7CisjZW5kaWYKIAogICAgIHZvaWQgdXNl
Q3JlZGVudGlhbEZvckNoYWxsZW5nZSh1aW50NjRfdCBjaGFsbGVuZ2VJRCwgY29uc3QgV2ViQ29y
ZTo6Q3JlZGVudGlhbCYsIGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpOwogICAgIHZv
aWQgY29udGludWVXaXRob3V0Q3JlZGVudGlhbEZvckNoYWxsZW5nZSh1aW50NjRfdCBjaGFsbGVu
Z2VJRCk7CkBAIC03Myw3ICs4MywxMSBAQCBwcml2YXRlOgogCiAgICAgYm9vbCB0cnlVc2VDZXJ0
aWZpY2F0ZUluZm9Gb3JDaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFs
bGVuZ2UmLCBjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKTsKIAorI2lmIFVTRShORVRX
T1JLX1NFU1NJT04pCisgICAgdWludDY0X3QgYWRkQ2hhbGxlbmdlVG9DaGFsbGVuZ2VNYXAoY29u
c3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBDaGFsbGVuZ2VDb21wbGV0aW9u
SGFuZGxlcik7CisjZWxzZQogICAgIHVpbnQ2NF90IGFkZENoYWxsZW5nZVRvQ2hhbGxlbmdlTWFw
KGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7CisjZW5kaWYKICAgICBi
b29sIHNob3VsZENvYWxlc2NlQ2hhbGxlbmdlKHVpbnQ2NF90IGNoYWxsZW5nZUlELCBjb25zdCBX
ZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpIGNvbnN0OwogCiAgICAgdm9pZCB1c2VD
cmVkZW50aWFsRm9yU2luZ2xlQ2hhbGxlbmdlKHVpbnQ2NF90IGNoYWxsZW5nZUlELCBjb25zdCBX
ZWJDb3JlOjpDcmVkZW50aWFsJiwgY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJik7CkBA
IC04OCw2ICsxMDIsOSBAQCBwcml2YXRlOgogCiAgICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90
LCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZT4gQXV0aGVudGljYXRpb25DaGFsbGVu
Z2VNYXA7CiAgICAgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VNYXAgbV9jaGFsbGVuZ2VzOworI2lm
IFVTRShORVRXT1JLX1NFU1NJT04pCisgICAgSGFzaE1hcDx1aW50NjRfdCwgQ2hhbGxlbmdlQ29t
cGxldGlvbkhhbmRsZXI+IG1fY2hhbGxlbmdlQ29tcGxldGlvbkhhbmRsZXJzOworI2VuZGlmCiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9E
b3dubG9hZHMvRG93bmxvYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCShyZXZpc2lvbiAxOTE5ODApCisrKyBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQs
NiArMzQsNyBAQAogI2luY2x1ZGUgIkRvd25sb2FkTWFuYWdlci5oIgogI2luY2x1ZGUgIlNhbmRi
b3hFeHRlbnNpb24uaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCkBAIC02Myw3ICs2NCwxMSBAQCB2b2lkIERvd25sb2FkOjpkaWRTdGFydCgpCiAKIHZvaWQg
RG93bmxvYWQ6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpCiB7CisjaWYgVVNFKE5F
VFdPUktfU0VTU0lPTikKKyAgICBub3RJbXBsZW1lbnRlZCgpOworI2Vsc2UKICAgICBtX2Rvd25s
b2FkTWFuYWdlci5kb3dubG9hZHNBdXRoZW50aWNhdGlvbk1hbmFnZXIoKS5kaWRSZWNlaXZlQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UodGhpcywgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOworI2Vu
ZGlmCiB9CiAKIHZvaWQgRG93bmxvYWQ6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQu
Y3BwCShyZXZpc2lvbiAxOTE5ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgz
LDYgKzE4MywxMiBAQCBib29sIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpzaG91bGRVc2VDcmVkCiAg
ICAgcmV0dXJuIHdlYlBhZ2UtPmluamVjdGVkQnVuZGxlUmVzb3VyY2VMb2FkQ2xpZW50KCkuc2hv
dWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2Uod2ViUGFnZSwgbV9mcmFtZSwgaWRlbnRpZmllcik7CiB9
CiAKKyNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQordm9pZCBXZWJGcmFtZUxvYWRlckNsaWVu
dDo6ZGlzcGF0Y2hEaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoRG9jdW1lbnRMb2Fk
ZXIqLCB1bnNpZ25lZCBsb25nLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKyNlbHNlCiB2b2lkIFdlYkZyYW1l
TG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShE
b2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlJiBjaGFsbGVuZ2UpCiB7CiAgICAgLy8gRklYTUU6IEF1dGhlbnRpY2F0aW9uIGlzIGEgcGVy
LXJlc291cmNlIGNvbmNlcHQsIGJ1dCB3ZSBkb24ndCBkbyBwZXItcmVzb3VyY2UgaGFuZGxpbmcg
aW4gdGhlIFVJUHJvY2VzcyBhdCB0aGUgQVBJIGxldmVsIHF1aXRlIHlldC4KQEAgLTE5NCw4ICsy
MDAsOSBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlCiAKICAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PEF1dGhlbnRpY2F0aW9uTWFuYWdlcj4o
KS0+ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKG1fZnJhbWUsIGNoYWxsZW5nZSk7
CiB9CisjZW5kaWYKIAotdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRDYW5j
ZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcg
LyppZGVudGlmaWVyKi8sIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgICAgCit2b2lk
IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAvKmlkZW50aWZpZXIqLywgY29u
c3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265231</attachid>
            <date>2015-11-10 14:26:38 -0800</date>
            <delta_ts>2015-11-10 15:40:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150968-20151110142634.patch</filename>
            <type>text/plain</type>
            <size>19834</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MjI2NykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDE1LTExLTEwICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50
IGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZSBoYW5kbGluZyB3aGVuIHVzaW5nIE5FVFdPUktfU0VT
U0lPTgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUw
OTY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtM
b2FkOjpkaWRSZWNlaXZlQ2hhbGxlbmdlKToKKyAgICAgICAgQ29weSBmdW5jdGlvbmFsaXR5IGZy
b20gTmV0d29ya0xvYWQ6OmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VBc3lu
YyAod2hpY2ggaXMgdXNlZCB3aGVuIHdlIGRvbid0IHVzZSBORVRXT1JLX1NFU1NJT04pCisgICAg
ICAgIGJlY2F1c2UgdGhlcmUgaXMgbm8gY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25T
cGFjZSBkZWxlZ2F0ZSBjYWxsYmFjayB3aGVuIHVzaW5nIE5TVVJMU2Vzc2lvbiwgYWNjb3JkaW5n
IHRvCisgICAgICAgIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9saWJyYXJ5L2lvcy9kb2N1
bWVudGF0aW9uL0NvY29hL0NvbmNlcHR1YWwvVVJMTG9hZGluZ1N5c3RlbS9BcnRpY2xlcy9BdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZXMuaHRtbAorICAgICAgICBJbnN0ZWFkLCBhbGwgYXV0aGVudGlj
YXRpb24gY2hhbGxlbmdlIGNhbGxiYWNrcyBnbyB0byBVUkxTZXNzaW9uOnRhc2s6ZGlkUmVjZWl2
ZUNoYWxsZW5nZTpjb21wbGV0aW9uSGFuZGxlcjoKKyAgICAgICAgYmVjYXVzZSB3ZSBkbyBub3Qg
aW1wbGVtZW50IFVSTFNlc3Npb246ZGlkUmVjZWl2ZUNoYWxsZW5nZTpjb21wbGV0aW9uSGFuZGxl
cjoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1t
OgorICAgICAgICAoLVtOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIFVSTFNlc3Npb246dGFzazp3aWxs
UGVyZm9ybUhUVFBSZWRpcmVjdGlvbjpuZXdSZXF1ZXN0OmNvbXBsZXRpb25IYW5kbGVyOl0pOgor
ICAgICAgICAoLVtOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIFVSTFNlc3Npb246dGFzazpkaWRSZWNl
aXZlQ2hhbGxlbmdlOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtOZXR3b3JrU2Vz
c2lvbkRlbGVnYXRlIFVSTFNlc3Npb246ZGF0YVRhc2s6ZGlkUmVjZWl2ZVJlc3BvbnNlOmNvbXBs
ZXRpb25IYW5kbGVyOl0pOgorICAgICAgICBNYWtlIGEgYmxvY2sgY29weSBvZiB0aGUgY29tcGxl
dGlvbiBoYW5kbGVycyBzbyB3ZSBjYW4gY29weSB0aGUgc3RkOjpmdW5jdGlvbnMgdGhhdCB3cmFw
IHRoZW0gaW50byBIYXNoTWFwcyBhbmQgY2FsbCB0aGVtIGxhdGVyLAorICAgICAgICBpbiB0aGlz
IGNhc2Ugd2UgY2FsbCB0aGUgY29tcGxldGlvbiBoYW5kbGVyIGFmdGVyIHRoZSBVSVByb2Nlc3Mg
Z2l2ZXMgdXMgY3JlZGVudGlhbHMgZm9yIGFuIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZS4KKyAg
ICAgICAgKiBTaGFyZWQvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25NYW5hZ2VyLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6QXV0aGVudGljYXRpb25NYW5hZ2VyOjpBdXRoZW50aWNhdGlvbk1h
bmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpBdXRoZW50aWNhdGlvbk1hbmFnZXI6OmFkZENoYWxs
ZW5nZVRvQ2hhbGxlbmdlTWFwKToKKyAgICAgICAgKFdlYktpdDo6QXV0aGVudGljYXRpb25NYW5h
Z2VyOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICBGaXggYW4g
ZXhpc3RpbmcgYnVnIHRoYXQgY2F1c2VkIG11bHRpcGxlIGNhbGxzIHRvIGFkZENoYWxsZW5nZVRv
Q2hhbGxlbmdlTWFwIGZvciBvbmUgY2hhbGxlbmdlLiAgVGhpcyBjYXVzZWQgdG9vIG1hbnkgY2Fs
bHMgdG8gCisgICAgICAgIHRoZSBBdXRoZW50aWNhdGlvbkNsaWVudCBtZXRob2RzLCB3aGljaCBk
aWQgbm90IGNhdXNlIGEgcHJvYmxlbSBiZWNhdXNlIHRoZXkgd2VyZSBub3Qgb25lLXRpbWUtdXNl
IGJsb2NrIGNvcGllcyBvZiBjb21wbGV0aW9uIGhhbmRsZXJzIGJlZm9yZS4KKyAgICAgICAgKFdl
YktpdDo6QXV0aGVudGljYXRpb25NYW5hZ2VyOjp1c2VDcmVkZW50aWFsRm9yU2luZ2xlQ2hhbGxl
bmdlKToKKyAgICAgICAgKFdlYktpdDo6QXV0aGVudGljYXRpb25NYW5hZ2VyOjpjb250aW51ZVdp
dGhvdXRDcmVkZW50aWFsRm9yU2luZ2xlQ2hhbGxlbmdlKToKKyAgICAgICAgKFdlYktpdDo6QXV0
aGVudGljYXRpb25NYW5hZ2VyOjpjYW5jZWxTaW5nbGVDaGFsbGVuZ2UpOgorICAgICAgICAoV2Vi
S2l0OjpBdXRoZW50aWNhdGlvbk1hbmFnZXI6OnBlcmZvcm1EZWZhdWx0SGFuZGxpbmdGb3JTaW5n
bGVDaGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpBdXRoZW50aWNhdGlvbk1hbmFnZXI6OnJl
amVjdFByb3RlY3Rpb25TcGFjZUFuZENvbnRpbnVlRm9yU2luZ2xlQ2hhbGxlbmdlKToKKyAgICAg
ICAgQ2FsbCBjb21wbGV0aW9uIGhhbmRsZXJzIHdoaWNoIHdlIHN0b3JlZCBpbiBhIEhhc2hNYXAg
YmVmb3JlIGRvaW5nIElQQyBpZiB3ZSBhcmUgdXNpbmcgTkVUV09SS19TRVNTSU9OLAorICAgICAg
ICB3aGljaCBoYXMgY29tcGxldGlvbiBoYW5kbGVycyBpbnN0ZWFkIG9mIGNvbnRpbnVlU29tZXRo
aW5nIGNsaWVudCBjYWxscy4KKyAgICAgICAgKiBTaGFyZWQvQXV0aGVudGljYXRpb24vQXV0aGVu
dGljYXRpb25NYW5hZ2VyLmg6CisgICAgICAgICogU2hhcmVkL0Rvd25sb2Fkcy9Eb3dubG9hZC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZDo6ZGlkUmVjZWl2ZVJlc3BvbnNl
KToKKyAgICAgICAgKiBTaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkQXV0aGVudGljYXRpb25DbGll
bnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50Ojpy
ZWNlaXZlZENoYWxsZW5nZVJlamVjdGlvbik6CisgICAgICAgICogU2hhcmVkL0Rvd25sb2Fkcy9E
b3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50Lmg6CisgICAgICAgIEFkZCBpZmRlZnMgZm9yIGNv
ZGUgcmVsYXRlZCB0byBkb3dubG9hZGluZyBJIHdpbGwgaW1wbGVtZW50IGxhdGVyLgorCiAyMDE1
LTExLTEwICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgRml4ZWQg
dGhlIGJ1aWxkLgpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xv
YWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtMb2FkLmNwcAkocmV2aXNpb24gMTkyMTcyKQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya0xvYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsOCArMTU4LDMwIEBA
IHZvaWQgTmV0d29ya0xvYWQ6OndpbGxQZXJmb3JtSFRUUFJlZGlyZWMKIAogdm9pZCBOZXR3b3Jr
TG9hZDo6ZGlkUmVjZWl2ZUNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYg
Y2hhbGxlbmdlLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNw
b3NpdGlvbiwgY29uc3QgQ3JlZGVudGlhbCYpPiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlRGlzcG9zaXRpb246OlBlcmZvcm1EZWZhdWx0SGFuZGxpbmcsIENyZWRlbnRpYWwoKSk7
CisgICAgLy8gTmV0d29ya1Jlc291cmNlTG9hZGVyIGRvZXMgbm90IGtub3cgd2hldGhlciB0aGUg
cmVxdWVzdCBpcyBjcm9zcyBvcmlnaW4sIHNvIFdlYiBwcm9jZXNzIGNvbXB1dGVzIGFuIGFwcGxp
Y2FibGUgY3JlZGVudGlhbCBwb2xpY3kgZm9yIGl0LgorICAgIEFTU0VSVChtX3BhcmFtZXRlcnMu
Y2xpZW50Q3JlZGVudGlhbFBvbGljeSAhPSBEb05vdEFza0NsaWVudEZvckNyb3NzT3JpZ2luQ3Jl
ZGVudGlhbHMpOworCisgICAgLy8gSGFuZGxlIHNlcnZlciB0cnVzdCBldmFsdWF0aW9uIGF0IHBs
YXRmb3JtLWxldmVsIGlmIHJlcXVlc3RlZCwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuCisgICAg
aWYgKGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKS5hdXRoZW50aWNhdGlvblNjaGVtZSgpID09
IFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lU2VydmVyVHJ1c3RFdmFsdWF0aW9u
UmVxdWVzdGVkCisgICAgICAgICYmICFOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuY2FuSGFu
ZGxlSFRUUFNTZXJ2ZXJUcnVzdEV2YWx1YXRpb24oKSkgeworICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpSZWplY3RQcm90ZWN0aW9u
U3BhY2UsIENyZWRlbnRpYWwoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
bV9jbGllbnQuaXNTeW5jaHJvbm91cygpKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
YXNrIHRoZSBXZWJQcm9jZXNzIGxpa2UgdGhlIGFzeW5jaHJvbm91cyBjYXNlIGJlbG93IGRvZXMu
CisgICAgICAgIC8vIFRoaXMgaXMgY3VycmVudGx5IGltcG9zc2libGUgYXMgdGhlIFdlYlByb2Nl
c3MgaXMgYmxvY2tlZCB3YWl0aW5nIG9uIHRoaXMgc3luY2hyb25vdXMgbG9hZC4KKyAgICAgICAg
Ly8gSXQncyBwb3NzaWJsZSB0aGF0IHdlIGNhbiBqdW1wIHN0cmFpZ2h0IHRvIHRoZSBVSSBwcm9j
ZXNzIHRvIHJlc29sdmUgdGhpcy4KKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbjo6UGVyZm9ybURlZmF1bHRIYW5kbGluZywgQ3JlZGVu
dGlhbCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3BhcmFtZXRlcnMu
Y2xpZW50Q3JlZGVudGlhbFBvbGljeSA9PSBEb05vdEFza0NsaWVudEZvckFueUNyZWRlbnRpYWxz
KSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlz
cG9zaXRpb246OlVzZUNyZWRlbnRpYWwsIFdlYkNvcmU6OkNyZWRlbnRpYWwoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuYXV0aGVu
dGljYXRpb25NYW5hZ2VyKCkuZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKG1fcGFy
YW1ldGVycy53ZWJQYWdlSUQsIG1fcGFyYW1ldGVycy53ZWJGcmFtZUlELCBjaGFsbGVuZ2UsIGNv
bXBsZXRpb25IYW5kbGVyKTsKIH0KIAogdm9pZCBOZXR3b3JrTG9hZDo6ZGlkUmVjZWl2ZVJlc3Bv
bnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBzdGQ6OmZ1bmN0aW9uPHZvaWQo
UmVzcG9uc2VEaXNwb3NpdGlvbik+IGNvbXBsZXRpb25IYW5kbGVyKQpJbmRleDogU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lv
bkNvY29hLm1tCShyZXZpc2lvbiAxOTIxNzIpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05NCw5
ICs5NCwxMSBAQCAtICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3NpCiAKICAg
ICBpZiAoYXV0byogbmV0d29ya2luZ1Rhc2sgPSBfc2Vzc2lvbi0+ZGF0YVRhc2tGb3JJZGVudGlm
aWVyKHRhc2sudGFza0lkZW50aWZpZXIpKSB7CiAgICAgICAgIGlmIChhdXRvKiBjbGllbnQgPSBu
ZXR3b3JraW5nVGFzay0+Y2xpZW50KCkpIHsKLSAgICAgICAgICAgIGNsaWVudC0+d2lsbFBlcmZv
cm1IVFRQUmVkaXJlY3Rpb24ocmVzcG9uc2UsIHJlcXVlc3QsIF4oY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQorICAgICAgICAgICAgYXV0byBjb21wbGV0aW9uSGFuZGxl
ckNvcHkgPSBCbG9ja19jb3B5KGNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICAgICAgICAgIGNsaWVu
dC0+d2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24ocmVzcG9uc2UsIHJlcXVlc3QsIFtjb21wbGV0
aW9uSGFuZGxlckNvcHldKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkK
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KHJlcXVlc3QubnNVUkxSZXF1ZXN0KFdlYkNvcmU6OlVwZGF0ZUhUVFBCb2R5KSk7CisgICAgICAg
ICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyQ29weShyZXF1ZXN0Lm5zVVJMUmVxdWVzdChX
ZWJDb3JlOjpVcGRhdGVIVFRQQm9keSkpOworICAgICAgICAgICAgICAgICAgICBCbG9ja19yZWxl
YXNlKGNvbXBsZXRpb25IYW5kbGVyQ29weSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgKTsKICAgICAgICAgfQpAQCAtMTA5LDkgKzExMSwxMSBAQCAtICh2b2lkKVVSTFNlc3Npb246
KE5TVVJMU2Vzc2lvbiAqKXNlc3NpCiAKICAgICBpZiAoYXV0byogbmV0d29ya2luZ1Rhc2sgPSBf
c2Vzc2lvbi0+ZGF0YVRhc2tGb3JJZGVudGlmaWVyKHRhc2sudGFza0lkZW50aWZpZXIpKSB7CiAg
ICAgICAgIGlmIChhdXRvKiBjbGllbnQgPSBuZXR3b3JraW5nVGFzay0+Y2xpZW50KCkpIHsKLSAg
ICAgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZUNoYWxsZW5nZShjaGFsbGVuZ2UsIF4oV2ViS2l0
OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9uLCBjb25zdCBX
ZWJDb3JlOjpDcmVkZW50aWFsJiBjcmVkZW50aWFsKQorICAgICAgICAgICAgYXV0byBjb21wbGV0
aW9uSGFuZGxlckNvcHkgPSBCbG9ja19jb3B5KGNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICAgICAg
ICAgIGNsaWVudC0+ZGlkUmVjZWl2ZUNoYWxsZW5nZShjaGFsbGVuZ2UsIFtjb21wbGV0aW9uSGFu
ZGxlckNvcHldKFdlYktpdDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiBkaXNw
b3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYgY3JlZGVudGlhbCkKICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHRvTlNVUkxT
ZXNzaW9uQXV0aENoYWxsZW5nZURpc3Bvc2l0aW9uKGRpc3Bvc2l0aW9uKSwgY3JlZGVudGlhbC5u
c0NyZWRlbnRpYWwoKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyQ29w
eSh0b05TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VEaXNwb3NpdGlvbihkaXNwb3NpdGlvbiksIGNy
ZWRlbnRpYWwubnNDcmVkZW50aWFsKCkpOworICAgICAgICAgICAgICAgICAgICBCbG9ja19yZWxl
YXNlKGNvbXBsZXRpb25IYW5kbGVyQ29weSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgKTsKICAgICAgICAgfQpAQCAtMTM2LDkgKzE0MCwxMSBAQCAtICh2b2lkKVVSTFNlc3Npb246
KE5TVVJMU2Vzc2lvbiAqKXNlc3NpCiAgICAgICAgIGlmIChhdXRvKiBjbGllbnQgPSBuZXR3b3Jr
aW5nVGFzay0+Y2xpZW50KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAgICAgICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc291cmNlUmVzcG9uc2Uo
cmVzcG9uc2UpOwotICAgICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UocmVzb3Vy
Y2VSZXNwb25zZSwgXihXZWJLaXQ6OlJlc3BvbnNlRGlzcG9zaXRpb24gcmVzcG9uc2VEaXNwb3Np
dGlvbikKKyAgICAgICAgICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXJDb3B5ID0gQmxvY2tfY29w
eShjb21wbGV0aW9uSGFuZGxlcik7CisgICAgICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVSZXNw
b25zZShyZXNvdXJjZVJlc3BvbnNlLCBbY29tcGxldGlvbkhhbmRsZXJDb3B5XShXZWJLaXQ6OlJl
c3BvbnNlRGlzcG9zaXRpb24gcmVzcG9uc2VEaXNwb3NpdGlvbikKICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHRvTlNVUkxTZXNzaW9uUmVz
cG9uc2VEaXNwb3NpdGlvbihyZXNwb25zZURpc3Bvc2l0aW9uKSk7CisgICAgICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyQ29weSh0b05TVVJMU2Vzc2lvblJlc3BvbnNlRGlzcG9zaXRp
b24ocmVzcG9uc2VEaXNwb3NpdGlvbikpOworICAgICAgICAgICAgICAgICAgICBCbG9ja19yZWxl
YXNlKGNvbXBsZXRpb25IYW5kbGVyQ29weSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0F1dGhlbnRpY2F0
aW9uL0F1dGhlbnRpY2F0aW9uTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvU2hhcmVkL0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uTWFuYWdlci5jcHAJKHJldmlz
aW9uIDE5MjE3MikKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BdXRoZW50aWNhdGlvbi9BdXRo
ZW50aWNhdGlvbk1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCwxOCBAQCBB
dXRoZW50aWNhdGlvbk1hbmFnZXI6OkF1dGhlbnRpY2F0aW9uTWFuCiAgICAgbV9wcm9jZXNzLT5h
ZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkF1dGhlbnRpY2F0aW9uTWFuYWdlcjo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CiB9CiAKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQor
dWludDY0X3QgQXV0aGVudGljYXRpb25NYW5hZ2VyOjphZGRDaGFsbGVuZ2VUb0NoYWxsZW5nZU1h
cChjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgYXV0aGVudGljYXRpb25D
aGFsbGVuZ2UsIENoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyIGNvbXBsZXRpb25IYW5kbGVyKQor
eworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICB1aW50NjRfdCBjaGFsbGVu
Z2VJRCA9IGFkZENoYWxsZW5nZVRvQ2hhbGxlbmdlTWFwKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KTsKKyAgICBtX2NoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVycy5zZXQoY2hhbGxlbmdlSUQsIGNv
bXBsZXRpb25IYW5kbGVyKTsKKyAgICAKKyAgICByZXR1cm4gY2hhbGxlbmdlSUQ7Cit9CisjZW5k
aWYKKwogdWludDY0X3QgQXV0aGVudGljYXRpb25NYW5hZ2VyOjphZGRDaGFsbGVuZ2VUb0NoYWxs
ZW5nZU1hcChjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgYXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKQEAgLTEy
NSw2ICsxMzcsMTkgQEAgdm9pZCBBdXRoZW50aWNhdGlvbk1hbmFnZXI6OmRpZFJlY2VpdmVBdQog
fQogCiAjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9O
KQordm9pZCBBdXRoZW50aWNhdGlvbk1hbmFnZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSh1aW50NjRfdCBwYWdlSUQsIHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlJiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSwgQ2hhbGxlbmdlQ29tcGxl
dGlvbkhhbmRsZXIgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKHBhZ2VJRCk7Cisg
ICAgQVNTRVJUKGZyYW1lSUQpOworCisgICAgdWludDY0X3QgY2hhbGxlbmdlSUQgPSBhZGRDaGFs
bGVuZ2VUb0NoYWxsZW5nZU1hcChhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSwgY29tcGxldGlvbkhh
bmRsZXIpOworICAgIGlmIChzaG91bGRDb2FsZXNjZUNoYWxsZW5nZShjaGFsbGVuZ2VJRCwgYXV0
aGVudGljYXRpb25DaGFsbGVuZ2UpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9wcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpEaWRSZWNlaXZlQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UocGFnZUlELCBmcmFtZUlELCBhdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSwgY2hhbGxlbmdlSUQpKTsKK30KKyNlbmRpZgogdm9pZCBBdXRoZW50aWNhdGlvbk1hbmFnZXI6
OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSh1aW50NjRfdCBwYWdlSUQsIHVpbnQ2
NF90IGZyYW1lSUQsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBhdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSkKIHsKICAgICBBU1NFUlQocGFnZUlEKTsKQEAgLTEzNCwxMCArMTU5LDExIEBA
IHZvaWQgQXV0aGVudGljYXRpb25NYW5hZ2VyOjpkaWRSZWNlaXZlQXUKICAgICBpZiAoc2hvdWxk
Q29hbGVzY2VDaGFsbGVuZ2UoY2hhbGxlbmdlSUQsIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3NQcm94eTo6RGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKHBhZ2VJ
RCwgZnJhbWVJRCwgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIGFkZENoYWxsZW5nZVRvQ2hhbGxl
bmdlTWFwKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSkpOworICAgIG1fcHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3NQcm94eTo6RGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKHBhZ2VJRCwgZnJhbWVJRCwgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIGNoYWxsZW5n
ZUlEKSk7CiB9CiAjZW5kaWYKIAorI2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQogdm9pZCBBdXRo
ZW50aWNhdGlvbk1hbmFnZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShEb3du
bG9hZCogZG93bmxvYWQsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBhdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSkKIHsKICAgICB1aW50NjRfdCBjaGFsbGVuZ2VJRCA9IGFkZENoYWxsZW5n
ZVRvQ2hhbGxlbmdlTWFwKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKTsKQEAgLTE0Niw2ICsxNzIs
NyBAQCB2b2lkIEF1dGhlbnRpY2F0aW9uTWFuYWdlcjo6ZGlkUmVjZWl2ZUF1CiAKICAgICBkb3du
bG9hZC0+c2VuZChNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6RGlkUmVjZWl2ZUF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCBhZGRDaGFsbGVuZ2VUb0NoYWxs
ZW5nZU1hcChhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkpKTsKIH0KKyNlbmRpZgogCiAvLyBDdXJy
ZW50bHksIG9ubHkgTWFjIGtub3dzIGhvdyB0byByZXNwb25kIHRvIGF1dGhlbnRpY2F0aW9uIGNo
YWxsZW5nZXMgd2l0aCBjZXJ0aWZpY2F0ZSBpbmZvLgogI2lmICFIQVZFKFNFQ19JREVOVElUWSkK
QEAgLTE3Myw2ICsyMDAsMTQgQEAgdm9pZCBBdXRoZW50aWNhdGlvbk1hbmFnZXI6OnVzZUNyZWRl
bnRpYQogICAgIAogICAgIEF1dGhlbnRpY2F0aW9uQ2xpZW50KiBjb3JlQ2xpZW50ID0gY2hhbGxl
bmdlLmF1dGhlbnRpY2F0aW9uQ2xpZW50KCk7CiAgICAgaWYgKCFjb3JlQ2xpZW50KSB7CisjaWYg
VVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBjb21wbGV0aW9u
IGhhbmRsZXIsIHRoZW4gdGhlcmUgaXMgbm8gQXV0aGVudGljYXRpb25DbGllbnQuCisgICAgICAg
IC8vIEZJWE1FOiBSZW1vdmUgdGhlIHVzZSBvZiBBdXRoZW50aWNhdGlvbkNsaWVudCBpbiBXZWJL
aXQyIG9uY2UgTkVUV09SS19TRVNTSU9OIGlzIHVzZWQgZm9yIGFsbCBsb2Fkcy4KKyAgICAgICAg
aWYgKGF1dG8gY29tcGxldGlvbkhhbmRsZXIgPSBtX2NoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVy
cy50YWtlKGNoYWxsZW5nZUlEKSkgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbjo6VXNlQ3JlZGVudGlhbCwgY3JlZGVudGlh
bCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyNlbmRpZgogICAgICAgICAvLyBG
SVhNRTogVGhlIGF1dGhlbnRpY2F0aW9uIGNsaWVudCBpcyBudWxsIGZvciBkb3dubG9hZHMsIGJ1
dCBpdCBjYW4gYWxzbyBiZSBudWxsIGZvciBjYW5jZWxlZCBsb2Fkcy4KICAgICAgICAgLy8gV2Ug
c2hvdWxkIG5vdCBjYWxsIERvd25sb2FkOjpyZWNlaXZlZENyZWRlbnRpYWwgaW4gdGhlIGxhdHRl
ciBjYXNlLgogICAgICAgICBEb3dubG9hZDo6cmVjZWl2ZWRDcmVkZW50aWFsKGNoYWxsZW5nZSwg
Y3JlZGVudGlhbCk7CkBAIC0xOTYsNiArMjMxLDEyIEBAIHZvaWQgQXV0aGVudGljYXRpb25NYW5h
Z2VyOjpjb250aW51ZVdpdGgKICAgICBBU1NFUlQoIWNoYWxsZW5nZS5pc051bGwoKSk7CiAgICAg
QXV0aGVudGljYXRpb25DbGllbnQqIGNvcmVDbGllbnQgPSBjaGFsbGVuZ2UuYXV0aGVudGljYXRp
b25DbGllbnQoKTsKICAgICBpZiAoIWNvcmVDbGllbnQpIHsKKyNpZiBVU0UoTkVUV09SS19TRVNT
SU9OKQorICAgICAgICBpZiAoYXV0byBjb21wbGV0aW9uSGFuZGxlciA9IG1fY2hhbGxlbmdlQ29t
cGxldGlvbkhhbmRsZXJzLnRha2UoY2hhbGxlbmdlSUQpKSB7CisgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpVc2VDcmVkZW50
aWFsLCBDcmVkZW50aWFsKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisjZW5k
aWYKICAgICAgICAgLy8gRklYTUU6IFRoZSBhdXRoZW50aWNhdGlvbiBjbGllbnQgaXMgbnVsbCBm
b3IgZG93bmxvYWRzLCBidXQgaXQgY2FuIGFsc28gYmUgbnVsbCBmb3IgY2FuY2VsZWQgbG9hZHMu
CiAgICAgICAgIC8vIFdlIHNob3VsZCBub3QgY2FsbCBEb3dubG9hZDo6cmVjZWl2ZWRDcmVkZW50
aWFsIGluIHRoZSBsYXR0ZXIgY2FzZS4KICAgICAgICAgRG93bmxvYWQ6OnJlY2VpdmVkUmVxdWVz
dFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbChjaGFsbGVuZ2UpOwpAQCAtMjE5LDYgKzI2MCwx
MiBAQCB2b2lkIEF1dGhlbnRpY2F0aW9uTWFuYWdlcjo6Y2FuY2VsU2luZ2xlCiAgICAgQVNTRVJU
KCFjaGFsbGVuZ2UuaXNOdWxsKCkpOwogICAgIEF1dGhlbnRpY2F0aW9uQ2xpZW50KiBjb3JlQ2xp
ZW50ID0gY2hhbGxlbmdlLmF1dGhlbnRpY2F0aW9uQ2xpZW50KCk7CiAgICAgaWYgKCFjb3JlQ2xp
ZW50KSB7CisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICAgICAgaWYgKGF1dG8gY29tcGxl
dGlvbkhhbmRsZXIgPSBtX2NoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVycy50YWtlKGNoYWxsZW5n
ZUlEKSkgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQXV0aGVudGljYXRpb25DaGFs
bGVuZ2VEaXNwb3NpdGlvbjo6Q2FuY2VsLCBDcmVkZW50aWFsKCkpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisjZW5kaWYKICAgICAgICAgLy8gRklYTUU6IFRoZSBhdXRoZW50aWNh
dGlvbiBjbGllbnQgaXMgbnVsbCBmb3IgZG93bmxvYWRzLCBidXQgaXQgY2FuIGFsc28gYmUgbnVs
bCBmb3IgY2FuY2VsZWQgbG9hZHMuCiAgICAgICAgIC8vIFdlIHNob3VsZCBub3QgY2FsbCBEb3du
bG9hZDo6cmVjZWl2ZWRDcmVkZW50aWFsIGluIHRoZSBsYXR0ZXIgY2FzZS4KICAgICAgICAgRG93
bmxvYWQ6OnJlY2VpdmVkQ2FuY2VsbGF0aW9uKGNoYWxsZW5nZSk7CkBAIC0yNDIsNiArMjg5LDEy
IEBAIHZvaWQgQXV0aGVudGljYXRpb25NYW5hZ2VyOjpwZXJmb3JtRGVmYXUKICAgICBBU1NFUlQo
IWNoYWxsZW5nZS5pc051bGwoKSk7CiAgICAgQXV0aGVudGljYXRpb25DbGllbnQqIGNvcmVDbGll
bnQgPSBjaGFsbGVuZ2UuYXV0aGVudGljYXRpb25DbGllbnQoKTsKICAgICBpZiAoIWNvcmVDbGll
bnQpIHsKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAgICAgICBpZiAoYXV0byBjb21wbGV0
aW9uSGFuZGxlciA9IG1fY2hhbGxlbmdlQ29tcGxldGlvbkhhbmRsZXJzLnRha2UoY2hhbGxlbmdl
SUQpKSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZURpc3Bvc2l0aW9uOjpQZXJmb3JtRGVmYXVsdEhhbmRsaW5nLCBDcmVkZW50aWFsKCkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisjZW5kaWYKICAgICAgICAgLy8gRklYTUU6
IFRoZSBhdXRoZW50aWNhdGlvbiBjbGllbnQgaXMgbnVsbCBmb3IgZG93bmxvYWRzLCBidXQgaXQg
Y2FuIGFsc28gYmUgbnVsbCBmb3IgY2FuY2VsZWQgbG9hZHMuCiAgICAgICAgIC8vIFdlIHNob3Vs
ZCBub3QgY2FsbCBEb3dubG9hZDo6cmVjZWl2ZWRDcmVkZW50aWFsIGluIHRoZSBsYXR0ZXIgY2Fz
ZS4KICAgICAgICAgRG93bmxvYWQ6OnJlY2VpdmVkUmVxdWVzdFRvUGVyZm9ybURlZmF1bHRIYW5k
bGluZyhjaGFsbGVuZ2UpOwpAQCAtMjY1LDYgKzMxOCwxMiBAQCB2b2lkIEF1dGhlbnRpY2F0aW9u
TWFuYWdlcjo6cmVqZWN0UHJvdGVjCiAgICAgQVNTRVJUKCFjaGFsbGVuZ2UuaXNOdWxsKCkpOwog
ICAgIEF1dGhlbnRpY2F0aW9uQ2xpZW50KiBjb3JlQ2xpZW50ID0gY2hhbGxlbmdlLmF1dGhlbnRp
Y2F0aW9uQ2xpZW50KCk7CiAgICAgaWYgKCFjb3JlQ2xpZW50KSB7CisjaWYgVVNFKE5FVFdPUktf
U0VTU0lPTikKKyAgICAgICAgaWYgKGF1dG8gY29tcGxldGlvbkhhbmRsZXIgPSBtX2NoYWxsZW5n
ZUNvbXBsZXRpb25IYW5kbGVycy50YWtlKGNoYWxsZW5nZUlEKSkgeworICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbjo6UmVqZWN0
UHJvdGVjdGlvblNwYWNlLCBDcmVkZW50aWFsKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisjZW5kaWYKICAgICAgICAgLy8gRklYTUU6IFRoZSBhdXRoZW50aWNhdGlvbiBjbGll
bnQgaXMgbnVsbCBmb3IgZG93bmxvYWRzLCBidXQgaXQgY2FuIGFsc28gYmUgbnVsbCBmb3IgY2Fu
Y2VsZWQgbG9hZHMuCiAgICAgICAgIC8vIFdlIHNob3VsZCBub3QgY2FsbCBEb3dubG9hZDo6cmVj
ZWl2ZWRDcmVkZW50aWFsIGluIHRoZSBsYXR0ZXIgY2FzZS4KICAgICAgICAgRG93bmxvYWQ6OnJl
Y2VpdmVkQ2hhbGxlbmdlUmVqZWN0aW9uKGNoYWxsZW5nZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25NYW5hZ2VyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9u
TWFuYWdlci5oCShyZXZpc2lvbiAxOTIxNzIpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQXV0
aGVudGljYXRpb24vQXV0aGVudGljYXRpb25NYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgogI2luY2x1ZGUgIk5l
dHdvcmtQcm9jZXNzU3VwcGxlbWVudC5oIgorI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCiAj
aW5jbHVkZSAiV2ViUHJvY2Vzc1N1cHBsZW1lbnQuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0F1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTUyLDYg
KzUzLDEwIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzdXBwbGVtZW50TmFt
ZSgpOwogCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICB0eXBlZGVmIHN0ZDo6ZnVuY3Rp
b248dm9pZChBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uLCBjb25zdCBXZWJDb3Jl
OjpDcmVkZW50aWFsJik+IENoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyOworICAgIHZvaWQgZGlk
UmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKHVpbnQ2NF90IHBhZ2VJRCwgdWludDY0X3Qg
ZnJhbWVJRCwgY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBDaGFsbGVu
Z2VDb21wbGV0aW9uSGFuZGxlcik7CisjZW5kaWYKICAgICAvLyBDYWxsZWQgZm9yIHJlc291cmNl
cyBpbiB0aGUgV2ViUHJvY2VzcyAoTmV0d29ya1Byb2Nlc3MgZGlzYWJsZWQpCiAgICAgdm9pZCBk
aWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV2ViRnJhbWUqLCBjb25zdCBXZWJDb3Jl
OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwogICAgIC8vIENhbGxlZCBmb3IgcmVzb3VyY2Vz
IGluIHRoZSBOZXR3b3JrUHJvY2VzcyAoTmV0d29ya1Byb2Nlc3MgZW5hYmxlZCkKQEAgLTczLDYg
Kzc4LDkgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgdHJ5VXNlQ2VydGlmaWNhdGVJbmZvRm9yQ2hh
bGxlbmdlKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgY29uc3QgV2Vi
Q29yZTo6Q2VydGlmaWNhdGVJbmZvJik7CiAKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAg
IHVpbnQ2NF90IGFkZENoYWxsZW5nZVRvQ2hhbGxlbmdlTWFwKGNvbnN0IFdlYkNvcmU6OkF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlJiwgQ2hhbGxlbmdlQ29tcGxldGlvbkhhbmRsZXIpOworI2VuZGlm
CiAgICAgdWludDY0X3QgYWRkQ2hhbGxlbmdlVG9DaGFsbGVuZ2VNYXAoY29uc3QgV2ViQ29yZTo6
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKICAgICBib29sIHNob3VsZENvYWxlc2NlQ2hhbGxl
bmdlKHVpbnQ2NF90IGNoYWxsZW5nZUlELCBjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSYpIGNvbnN0OwogCkBAIC04Niw2ICs5NCwxMCBAQCBwcml2YXRlOgogCiAgICAgQ2hp
bGRQcm9jZXNzKiBtX3Byb2Nlc3M7CiAKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAgIC8v
IEZJWE1FOiBVc2Ugb25lIEhhc2hNYXAgZm9yIHRoZSBjaGFsbGVuZ2VzIGFuZCBjb21wbGV0aW9u
IGhhbmRsZXJzIG9uY2UgZXZlcnlvbmUgaXMgdXNpbmcgTkVUV09SS19TRVNTSU9OLgorICAgIEhh
c2hNYXA8dWludDY0X3QsIENoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyPiBtX2NoYWxsZW5nZUNv
bXBsZXRpb25IYW5kbGVyczsKKyNlbmRpZgogICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwg
V2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2U+IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
TWFwOwogICAgIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlTWFwIG1fY2hhbGxlbmdlczsKIH07Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkLmNwcAkocmV2
aXNpb24gMTkyMTcyKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9Eb3dubG9h
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDExICsyOSwxNSBAQAogI2luY2x1ZGUgIkF1dGhl
bnRpY2F0aW9uTWFuYWdlci5oIgogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJE
YXRhUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiRG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudC5o
IgogI2luY2x1ZGUgIkRvd25sb2FkUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkRvd25sb2Fk
TWFuYWdlci5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKICNpbmNsdWRlICJXZWJD
b3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+
CisKKyNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKKyNpbmNsdWRlICJEb3dubG9hZEF1dGhlbnRp
Y2F0aW9uQ2xpZW50LmgiCisjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAg
LTYzLDcgKzY3LDExIEBAIHZvaWQgRG93bmxvYWQ6OmRpZFN0YXJ0KCkKIAogdm9pZCBEb3dubG9h
ZDo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlJiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkKIHsKKyNpZiBVU0UoTkVUV09SS19T
RVNTSU9OKQorICAgIG5vdEltcGxlbWVudGVkKCk7CisjZWxzZQogICAgIG1fZG93bmxvYWRNYW5h
Z2VyLmRvd25sb2Fkc0F1dGhlbnRpY2F0aW9uTWFuYWdlcigpLmRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSh0aGlzLCBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk7CisjZW5kaWYKIH0K
IAogdm9pZCBEb3dubG9hZDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlKQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9Eb3du
bG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQuY3BwCShyZXZp
c2lvbiAxOTIxNzIpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL0Rvd25sb2Fk
QXV0aGVudGljYXRpb25DbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRG93bmxvYWRBdXRoZW50aWNhdGlvbkNs
aWVudC5oIgogCisjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCisKICNpbmNsdWRlICJEb3dubG9h
ZC5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTY0LDMgKzY2LDUgQEAgdm9pZCBE
b3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50OjpyZWNlaQogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL0Rv
d25sb2FkQXV0aGVudGljYXRpb25DbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQuaAkocmV2aXNp
b24gMTkyMTcyKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9Eb3dubG9hZEF1
dGhlbnRpY2F0aW9uQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDggQEAKICNp
Zm5kZWYgRG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudF9oCiAjZGVmaW5lIERvd25sb2FkQXV0
aGVudGljYXRpb25DbGllbnRfaAogCisjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCisKICNpbmNs
dWRlIDxXZWJDb3JlL0F1dGhlbnRpY2F0aW9uQ2xpZW50Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtNjUsNCArNjcsNiBAQCBw
cml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAorI2VuZGlmIC8vICFVU0UoTkVUV09S
S19TRVNTSU9OKQorCiAjZW5kaWYgLy8gRG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudF9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265238</attachid>
            <date>2015-11-10 15:40:38 -0800</date>
            <delta_ts>2015-11-10 17:28:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150968-20151110154034.patch</filename>
            <type>text/plain</type>
            <size>25384</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MjI2NykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDE1LTExLTEwICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50
IGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZSBoYW5kbGluZyB3aGVuIHVzaW5nIE5FVFdPUktfU0VT
U0lPTgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUw
OTY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtM
b2FkOjpkaWRSZWNlaXZlQ2hhbGxlbmdlKToKKyAgICAgICAgQ29weSBmdW5jdGlvbmFsaXR5IGZy
b20gTmV0d29ya0xvYWQ6OmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VBc3lu
YyAod2hpY2ggaXMgdXNlZCB3aGVuIHdlIGRvbid0IHVzZSBORVRXT1JLX1NFU1NJT04pCisgICAg
ICAgIGJlY2F1c2UgdGhlcmUgaXMgbm8gY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25T
cGFjZSBkZWxlZ2F0ZSBjYWxsYmFjayB3aGVuIHVzaW5nIE5TVVJMU2Vzc2lvbiwgYWNjb3JkaW5n
IHRvCisgICAgICAgIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9saWJyYXJ5L2lvcy9kb2N1
bWVudGF0aW9uL0NvY29hL0NvbmNlcHR1YWwvVVJMTG9hZGluZ1N5c3RlbS9BcnRpY2xlcy9BdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZXMuaHRtbAorICAgICAgICBJbnN0ZWFkLCBhbGwgYXV0aGVudGlj
YXRpb24gY2hhbGxlbmdlIGNhbGxiYWNrcyBnbyB0byBVUkxTZXNzaW9uOnRhc2s6ZGlkUmVjZWl2
ZUNoYWxsZW5nZTpjb21wbGV0aW9uSGFuZGxlcjoKKyAgICAgICAgYmVjYXVzZSB3ZSBkbyBub3Qg
aW1wbGVtZW50IFVSTFNlc3Npb246ZGlkUmVjZWl2ZUNoYWxsZW5nZTpjb21wbGV0aW9uSGFuZGxl
cjoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1t
OgorICAgICAgICAoLVtOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIFVSTFNlc3Npb246dGFzazp3aWxs
UGVyZm9ybUhUVFBSZWRpcmVjdGlvbjpuZXdSZXF1ZXN0OmNvbXBsZXRpb25IYW5kbGVyOl0pOgor
ICAgICAgICAoLVtOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIFVSTFNlc3Npb246dGFzazpkaWRSZWNl
aXZlQ2hhbGxlbmdlOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtOZXR3b3JrU2Vz
c2lvbkRlbGVnYXRlIFVSTFNlc3Npb246ZGF0YVRhc2s6ZGlkUmVjZWl2ZVJlc3BvbnNlOmNvbXBs
ZXRpb25IYW5kbGVyOl0pOgorICAgICAgICBNYWtlIGEgYmxvY2sgY29weSBvZiB0aGUgY29tcGxl
dGlvbiBoYW5kbGVycyBzbyB3ZSBjYW4gY29weSB0aGUgc3RkOjpmdW5jdGlvbnMgdGhhdCB3cmFw
IHRoZW0gaW50byBIYXNoTWFwcyBhbmQgY2FsbCB0aGVtIGxhdGVyLAorICAgICAgICBpbiB0aGlz
IGNhc2Ugd2UgY2FsbCB0aGUgY29tcGxldGlvbiBoYW5kbGVyIGFmdGVyIHRoZSBVSVByb2Nlc3Mg
Z2l2ZXMgdXMgY3JlZGVudGlhbHMgZm9yIGFuIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZS4KKyAg
ICAgICAgKiBTaGFyZWQvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25NYW5hZ2VyLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6QXV0aGVudGljYXRpb25NYW5hZ2VyOjpBdXRoZW50aWNhdGlvbk1h
bmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpBdXRoZW50aWNhdGlvbk1hbmFnZXI6OmFkZENoYWxs
ZW5nZVRvQ2hhbGxlbmdlTWFwKToKKyAgICAgICAgKFdlYktpdDo6QXV0aGVudGljYXRpb25NYW5h
Z2VyOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICBGaXggYW4g
ZXhpc3RpbmcgYnVnIHRoYXQgY2F1c2VkIG11bHRpcGxlIGNhbGxzIHRvIGFkZENoYWxsZW5nZVRv
Q2hhbGxlbmdlTWFwIGZvciBvbmUgY2hhbGxlbmdlLiAgVGhpcyBjYXVzZWQgdG9vIG1hbnkgY2Fs
bHMgdG8gCisgICAgICAgIHRoZSBBdXRoZW50aWNhdGlvbkNsaWVudCBtZXRob2RzLCB3aGljaCBk
aWQgbm90IGNhdXNlIGEgcHJvYmxlbSBiZWNhdXNlIHRoZXkgd2VyZSBub3Qgb25lLXRpbWUtdXNl
IGJsb2NrIGNvcGllcyBvZiBjb21wbGV0aW9uIGhhbmRsZXJzIGJlZm9yZS4KKyAgICAgICAgKFdl
YktpdDo6QXV0aGVudGljYXRpb25NYW5hZ2VyOjp1c2VDcmVkZW50aWFsRm9yU2luZ2xlQ2hhbGxl
bmdlKToKKyAgICAgICAgKFdlYktpdDo6QXV0aGVudGljYXRpb25NYW5hZ2VyOjpjb250aW51ZVdp
dGhvdXRDcmVkZW50aWFsRm9yU2luZ2xlQ2hhbGxlbmdlKToKKyAgICAgICAgKFdlYktpdDo6QXV0
aGVudGljYXRpb25NYW5hZ2VyOjpjYW5jZWxTaW5nbGVDaGFsbGVuZ2UpOgorICAgICAgICAoV2Vi
S2l0OjpBdXRoZW50aWNhdGlvbk1hbmFnZXI6OnBlcmZvcm1EZWZhdWx0SGFuZGxpbmdGb3JTaW5n
bGVDaGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpBdXRoZW50aWNhdGlvbk1hbmFnZXI6OnJl
amVjdFByb3RlY3Rpb25TcGFjZUFuZENvbnRpbnVlRm9yU2luZ2xlQ2hhbGxlbmdlKToKKyAgICAg
ICAgQ2FsbCBjb21wbGV0aW9uIGhhbmRsZXJzIHdoaWNoIHdlIHN0b3JlZCBpbiBhIEhhc2hNYXAg
YmVmb3JlIGRvaW5nIElQQyBpZiB3ZSBhcmUgdXNpbmcgTkVUV09SS19TRVNTSU9OLAorICAgICAg
ICB3aGljaCBoYXMgY29tcGxldGlvbiBoYW5kbGVycyBpbnN0ZWFkIG9mIGNvbnRpbnVlU29tZXRo
aW5nIGNsaWVudCBjYWxscy4KKyAgICAgICAgKiBTaGFyZWQvQXV0aGVudGljYXRpb24vQXV0aGVu
dGljYXRpb25NYW5hZ2VyLmg6CisgICAgICAgICogU2hhcmVkL0Rvd25sb2Fkcy9Eb3dubG9hZC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZDo6ZGlkUmVjZWl2ZVJlc3BvbnNl
KToKKyAgICAgICAgKiBTaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkQXV0aGVudGljYXRpb25DbGll
bnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50Ojpy
ZWNlaXZlZENoYWxsZW5nZVJlamVjdGlvbik6CisgICAgICAgICogU2hhcmVkL0Rvd25sb2Fkcy9E
b3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50Lmg6CisgICAgICAgIEFkZCBpZmRlZnMgZm9yIGNv
ZGUgcmVsYXRlZCB0byBkb3dubG9hZGluZyBJIHdpbGwgaW1wbGVtZW50IGxhdGVyLgorCiAyMDE1
LTExLTEwICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgRml4ZWQg
dGhlIGJ1aWxkLgpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xv
YWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtMb2FkLmNwcAkocmV2aXNpb24gMTkyMTcyKQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya0xvYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsOCArMTU4LDMwIEBA
IHZvaWQgTmV0d29ya0xvYWQ6OndpbGxQZXJmb3JtSFRUUFJlZGlyZWMKIAogdm9pZCBOZXR3b3Jr
TG9hZDo6ZGlkUmVjZWl2ZUNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYg
Y2hhbGxlbmdlLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNw
b3NpdGlvbiwgY29uc3QgQ3JlZGVudGlhbCYpPiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlRGlzcG9zaXRpb246OlBlcmZvcm1EZWZhdWx0SGFuZGxpbmcsIENyZWRlbnRpYWwoKSk7
CisgICAgLy8gTmV0d29ya1Jlc291cmNlTG9hZGVyIGRvZXMgbm90IGtub3cgd2hldGhlciB0aGUg
cmVxdWVzdCBpcyBjcm9zcyBvcmlnaW4sIHNvIFdlYiBwcm9jZXNzIGNvbXB1dGVzIGFuIGFwcGxp
Y2FibGUgY3JlZGVudGlhbCBwb2xpY3kgZm9yIGl0LgorICAgIEFTU0VSVChtX3BhcmFtZXRlcnMu
Y2xpZW50Q3JlZGVudGlhbFBvbGljeSAhPSBEb05vdEFza0NsaWVudEZvckNyb3NzT3JpZ2luQ3Jl
ZGVudGlhbHMpOworCisgICAgLy8gSGFuZGxlIHNlcnZlciB0cnVzdCBldmFsdWF0aW9uIGF0IHBs
YXRmb3JtLWxldmVsIGlmIHJlcXVlc3RlZCwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuCisgICAg
aWYgKGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKS5hdXRoZW50aWNhdGlvblNjaGVtZSgpID09
IFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lU2VydmVyVHJ1c3RFdmFsdWF0aW9u
UmVxdWVzdGVkCisgICAgICAgICYmICFOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuY2FuSGFu
ZGxlSFRUUFNTZXJ2ZXJUcnVzdEV2YWx1YXRpb24oKSkgeworICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpQZXJmb3JtRGVmYXVsdEhh
bmRsaW5nLCBDcmVkZW50aWFsKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KG1fY2xpZW50LmlzU3luY2hyb25vdXMoKSkgeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGFzayB0aGUgV2ViUHJvY2VzcyBsaWtlIHRoZSBhc3luY2hyb25vdXMgY2FzZSBiZWxvdyBkb2Vz
LgorICAgICAgICAvLyBUaGlzIGlzIGN1cnJlbnRseSBpbXBvc3NpYmxlIGFzIHRoZSBXZWJQcm9j
ZXNzIGlzIGJsb2NrZWQgd2FpdGluZyBvbiB0aGlzIHN5bmNocm9ub3VzIGxvYWQuCisgICAgICAg
IC8vIEl0J3MgcG9zc2libGUgdGhhdCB3ZSBjYW4ganVtcCBzdHJhaWdodCB0byB0aGUgVUkgcHJv
Y2VzcyB0byByZXNvbHZlIHRoaXMuCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlBlcmZvcm1EZWZhdWx0SGFuZGxpbmcsIENyZWRl
bnRpYWwoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9wYXJhbWV0ZXJz
LmNsaWVudENyZWRlbnRpYWxQb2xpY3kgPT0gRG9Ob3RBc2tDbGllbnRGb3JBbnlDcmVkZW50aWFs
cykgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURp
c3Bvc2l0aW9uOjpVc2VDcmVkZW50aWFsLCBDcmVkZW50aWFsKCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmF1dGhlbnRpY2F0aW9u
TWFuYWdlcigpLmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShtX3BhcmFtZXRlcnMu
d2ViUGFnZUlELCBtX3BhcmFtZXRlcnMud2ViRnJhbWVJRCwgY2hhbGxlbmdlLCBjb21wbGV0aW9u
SGFuZGxlcik7CiB9CiAKIHZvaWQgTmV0d29ya0xvYWQ6OmRpZFJlY2VpdmVSZXNwb25zZShjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlc3BvbnNl
RGlzcG9zaXRpb24pPiBjb21wbGV0aW9uSGFuZGxlcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5t
bQkocmV2aXNpb24gMTkyMTcyKQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29j
b2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtOTQsOSArOTQsMTEg
QEAgLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaQogCiAgICAgaWYgKGF1
dG8qIG5ldHdvcmtpbmdUYXNrID0gX3Nlc3Npb24tPmRhdGFUYXNrRm9ySWRlbnRpZmllcih0YXNr
LnRhc2tJZGVudGlmaWVyKSkgewogICAgICAgICBpZiAoYXV0byogY2xpZW50ID0gbmV0d29ya2lu
Z1Rhc2stPmNsaWVudCgpKSB7Ci0gICAgICAgICAgICBjbGllbnQtPndpbGxQZXJmb3JtSFRUUFJl
ZGlyZWN0aW9uKHJlc3BvbnNlLCByZXF1ZXN0LCBeKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCkKKyAgICAgICAgICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXJDb3B5ID0g
QmxvY2tfY29weShjb21wbGV0aW9uSGFuZGxlcik7CisgICAgICAgICAgICBjbGllbnQtPndpbGxQ
ZXJmb3JtSFRUUFJlZGlyZWN0aW9uKHJlc3BvbnNlLCByZXF1ZXN0LCBbY29tcGxldGlvbkhhbmRs
ZXJDb3B5XShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXF1ZXN0
Lm5zVVJMUmVxdWVzdChXZWJDb3JlOjpVcGRhdGVIVFRQQm9keSkpOworICAgICAgICAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlckNvcHkocmVxdWVzdC5uc1VSTFJlcXVlc3QoV2ViQ29yZTo6
VXBkYXRlSFRUUEJvZHkpKTsKKyAgICAgICAgICAgICAgICAgICAgQmxvY2tfcmVsZWFzZShjb21w
bGV0aW9uSGFuZGxlckNvcHkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICk7CiAg
ICAgICAgIH0KQEAgLTEwOSw5ICsxMTEsMTEgQEAgLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNl
c3Npb24gKilzZXNzaQogCiAgICAgaWYgKGF1dG8qIG5ldHdvcmtpbmdUYXNrID0gX3Nlc3Npb24t
PmRhdGFUYXNrRm9ySWRlbnRpZmllcih0YXNrLnRhc2tJZGVudGlmaWVyKSkgewogICAgICAgICBp
ZiAoYXV0byogY2xpZW50ID0gbmV0d29ya2luZ1Rhc2stPmNsaWVudCgpKSB7Ci0gICAgICAgICAg
ICBjbGllbnQtPmRpZFJlY2VpdmVDaGFsbGVuZ2UoY2hhbGxlbmdlLCBeKFdlYktpdDo6QXV0aGVu
dGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6
Q3JlZGVudGlhbCYgY3JlZGVudGlhbCkKKyAgICAgICAgICAgIGF1dG8gY29tcGxldGlvbkhhbmRs
ZXJDb3B5ID0gQmxvY2tfY29weShjb21wbGV0aW9uSGFuZGxlcik7CisgICAgICAgICAgICBjbGll
bnQtPmRpZFJlY2VpdmVDaGFsbGVuZ2UoY2hhbGxlbmdlLCBbY29tcGxldGlvbkhhbmRsZXJDb3B5
XShXZWJLaXQ6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24gZGlzcG9zaXRpb24s
IGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCiAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih0b05TVVJMU2Vzc2lvbkF1
dGhDaGFsbGVuZ2VEaXNwb3NpdGlvbihkaXNwb3NpdGlvbiksIGNyZWRlbnRpYWwubnNDcmVkZW50
aWFsKCkpOworICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlckNvcHkodG9OU1VS
TFNlc3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9zaXRpb24oZGlzcG9zaXRpb24pLCBjcmVkZW50aWFs
Lm5zQ3JlZGVudGlhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgQmxvY2tfcmVsZWFzZShjb21w
bGV0aW9uSGFuZGxlckNvcHkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICk7CiAg
ICAgICAgIH0KQEAgLTEzNiw5ICsxNDAsMTEgQEAgLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNl
c3Npb24gKilzZXNzaQogICAgICAgICBpZiAoYXV0byogY2xpZW50ID0gbmV0d29ya2luZ1Rhc2st
PmNsaWVudCgpKSB7CiAgICAgICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgICAg
ICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNvdXJjZVJlc3BvbnNlKHJlc3BvbnNl
KTsKLSAgICAgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKHJlc291cmNlUmVzcG9u
c2UsIF4oV2ViS2l0OjpSZXNwb25zZURpc3Bvc2l0aW9uIHJlc3BvbnNlRGlzcG9zaXRpb24pCisg
ICAgICAgICAgICBhdXRvIGNvbXBsZXRpb25IYW5kbGVyQ29weSA9IEJsb2NrX2NvcHkoY29tcGxl
dGlvbkhhbmRsZXIpOworICAgICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UocmVz
b3VyY2VSZXNwb25zZSwgW2NvbXBsZXRpb25IYW5kbGVyQ29weV0oV2ViS2l0OjpSZXNwb25zZURp
c3Bvc2l0aW9uIHJlc3BvbnNlRGlzcG9zaXRpb24pCiAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih0b05TVVJMU2Vzc2lvblJlc3BvbnNlRGlz
cG9zaXRpb24ocmVzcG9uc2VEaXNwb3NpdGlvbikpOworICAgICAgICAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlckNvcHkodG9OU1VSTFNlc3Npb25SZXNwb25zZURpc3Bvc2l0aW9uKHJlc3Bv
bnNlRGlzcG9zaXRpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgQmxvY2tfcmVsZWFzZShjb21w
bGV0aW9uSGFuZGxlckNvcHkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICk7CiAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BdXRoZW50aWNhdGlvbi9BdXRo
ZW50aWNhdGlvbk1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbk1hbmFnZXIuY3BwCShyZXZpc2lvbiAxOTIx
NzIpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRp
b25NYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTIgKzcwLDEyIEBAIEF1dGhlbnRp
Y2F0aW9uTWFuYWdlcjo6QXV0aGVudGljYXRpb25NYW4KICAgICBtX3Byb2Nlc3MtPmFkZE1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6QXV0aGVudGljYXRpb25NYW5hZ2VyOjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksICp0aGlzKTsKIH0KIAotdWludDY0X3QgQXV0aGVudGljYXRpb25NYW5hZ2VyOjph
ZGRDaGFsbGVuZ2VUb0NoYWxsZW5nZU1hcChjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpCit1aW50NjRfdCBBdXRoZW50aWNhdGlv
bk1hbmFnZXI6OmFkZENoYWxsZW5nZVRvQ2hhbGxlbmdlTWFwKGNvbnN0IENoYWxsZW5nZSYgY2hh
bGxlbmdlKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICB1aW50NjRf
dCBjaGFsbGVuZ2VJRCA9IGdlbmVyYXRlQXV0aGVudGljYXRpb25DaGFsbGVuZ2VJRCgpOwotICAg
IG1fY2hhbGxlbmdlcy5zZXQoY2hhbGxlbmdlSUQsIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKTsK
KyAgICBtX2NoYWxsZW5nZXMuc2V0KGNoYWxsZW5nZUlELCBjaGFsbGVuZ2UpOwogICAgIHJldHVy
biBjaGFsbGVuZ2VJRDsKIH0KIApAQCAtODUsNyArODUsNyBAQCBib29sIEF1dGhlbnRpY2F0aW9u
TWFuYWdlcjo6c2hvdWxkQ29hbGVzCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGZvciAo
YXV0byYgaXRlbSA6IG1fY2hhbGxlbmdlcykgewotICAgICAgICBpZiAoaXRlbS5rZXkgIT0gY2hh
bGxlbmdlSUQgJiYgUHJvdGVjdGlvblNwYWNlOjpjb21wYXJlKGNoYWxsZW5nZS5wcm90ZWN0aW9u
U3BhY2UoKSwgaXRlbS52YWx1ZS5wcm90ZWN0aW9uU3BhY2UoKSkpCisgICAgICAgIGlmIChpdGVt
LmtleSAhPSBjaGFsbGVuZ2VJRCAmJiBQcm90ZWN0aW9uU3BhY2U6OmNvbXBhcmUoY2hhbGxlbmdl
LnByb3RlY3Rpb25TcGFjZSgpLCBpdGVtLnZhbHVlLmNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2Uo
KSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtOTMsMTcgKzkzLDE3IEBAIGJvb2wgQXV0aGVudGljYXRpb25NYW5hZ2VyOjpzaG91bGRDb2Fs
ZXMKIAogVmVjdG9yPHVpbnQ2NF90PiBBdXRoZW50aWNhdGlvbk1hbmFnZXI6OmNvYWxlc2NlQ2hh
bGxlbmdlc01hdGNoaW5nKHVpbnQ2NF90IGNoYWxsZW5nZUlEKSBjb25zdAogewotICAgIEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlIGNoYWxsZW5nZSA9IG1fY2hhbGxlbmdlcy5nZXQoY2hhbGxlbmdl
SUQpOwotICAgIEFTU0VSVCghY2hhbGxlbmdlLmlzTnVsbCgpKTsKKyAgICBhdXRvIGNoYWxsZW5n
ZSA9IG1fY2hhbGxlbmdlcy5nZXQoY2hhbGxlbmdlSUQpOworICAgIEFTU0VSVCghY2hhbGxlbmdl
LmNoYWxsZW5nZS5pc051bGwoKSk7CiAKICAgICBWZWN0b3I8dWludDY0X3Q+IGNoYWxsZW5nZXNU
b0NvYWxlc2NlOwogICAgIGNoYWxsZW5nZXNUb0NvYWxlc2NlLmFwcGVuZChjaGFsbGVuZ2VJRCk7
CiAKLSAgICBpZiAoIWNhbkNvYWxlc2NlQ2hhbGxlbmdlKGNoYWxsZW5nZSkpCisgICAgaWYgKCFj
YW5Db2FsZXNjZUNoYWxsZW5nZShjaGFsbGVuZ2UuY2hhbGxlbmdlKSkKICAgICAgICAgcmV0dXJu
IGNoYWxsZW5nZXNUb0NvYWxlc2NlOwogCiAgICAgZm9yIChhdXRvJiBpdGVtIDogbV9jaGFsbGVu
Z2VzKSB7Ci0gICAgICAgIGlmIChpdGVtLmtleSAhPSBjaGFsbGVuZ2VJRCAmJiBQcm90ZWN0aW9u
U3BhY2U6OmNvbXBhcmUoY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLCBpdGVtLnZhbHVlLnBy
b3RlY3Rpb25TcGFjZSgpKSkKKyAgICAgICAgaWYgKGl0ZW0ua2V5ICE9IGNoYWxsZW5nZUlEICYm
IFByb3RlY3Rpb25TcGFjZTo6Y29tcGFyZShjaGFsbGVuZ2UuY2hhbGxlbmdlLnByb3RlY3Rpb25T
cGFjZSgpLCBpdGVtLnZhbHVlLmNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSkpCiAgICAgICAg
ICAgICBjaGFsbGVuZ2VzVG9Db2FsZXNjZS5hcHBlbmQoaXRlbS5rZXkpOwogICAgIH0KIApAQCAt
MTE1LDcgKzExNSwxMSBAQCB2b2lkIEF1dGhlbnRpY2F0aW9uTWFuYWdlcjo6ZGlkUmVjZWl2ZUF1
CiAgICAgQVNTRVJUKGZyYW1lKTsKICAgICBBU1NFUlQoZnJhbWUtPnBhZ2UoKSk7CiAKLSAgICB1
aW50NjRfdCBjaGFsbGVuZ2VJRCA9IGFkZENoYWxsZW5nZVRvQ2hhbGxlbmdlTWFwKGF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKTsKKyAgICB1aW50NjRfdCBjaGFsbGVuZ2VJRCA9IGFkZENoYWxsZW5n
ZVRvQ2hhbGxlbmdlTWFwKHthdXRoZW50aWNhdGlvbkNoYWxsZW5nZQorI2lmIFVTRShORVRXT1JL
X1NFU1NJT04pCisgICAgICAgICwgQ2hhbGxlbmdlQ29tcGxldGlvbkhhbmRsZXIoKQorI2VuZGlm
CisgICAgfSk7CiAKICAgICAvLyBDb2FsZXNjZSBjaGFsbGVuZ2VzIGluIHRoZSBzYW1lIHByb3Rl
Y3Rpb24gc3BhY2UuCiAgICAgaWYgKHNob3VsZENvYWxlc2NlQ2hhbGxlbmdlKGNoYWxsZW5nZUlE
LCBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkpCkBAIC0xMjUsMTkgKzEyOSwzNyBAQCB2b2lkIEF1
dGhlbnRpY2F0aW9uTWFuYWdlcjo6ZGlkUmVjZWl2ZUF1CiB9CiAKICNpZiBFTkFCTEUoTkVUV09S
S19QUk9DRVNTKQorI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCit2b2lkIEF1dGhlbnRpY2F0aW9u
TWFuYWdlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKHVpbnQ2NF90IHBhZ2VJ
RCwgdWludDY0X3QgZnJhbWVJRCwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlLCBDaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlciBjb21wbGV0aW9u
SGFuZGxlcikKK3sKKyAgICBBU1NFUlQocGFnZUlEKTsKKyAgICBBU1NFUlQoZnJhbWVJRCk7CisK
KyAgICB1aW50NjRfdCBjaGFsbGVuZ2VJRCA9IGFkZENoYWxsZW5nZVRvQ2hhbGxlbmdlTWFwKHth
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSwgY29tcGxldGlvbkhhbmRsZXJ9KTsKKyAgICBpZiAoc2hv
dWxkQ29hbGVzY2VDaGFsbGVuZ2UoY2hhbGxlbmdlSUQsIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6RGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKHBh
Z2VJRCwgZnJhbWVJRCwgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIGNoYWxsZW5nZUlEKSk7Cit9
CisjZW5kaWYKIHZvaWQgQXV0aGVudGljYXRpb25NYW5hZ2VyOjpkaWRSZWNlaXZlQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UodWludDY0X3QgcGFnZUlELCB1aW50NjRfdCBmcmFtZUlELCBjb25zdCBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpCiB7CiAgICAg
QVNTRVJUKHBhZ2VJRCk7CiAgICAgQVNTRVJUKGZyYW1lSUQpOwogCi0gICAgdWludDY0X3QgY2hh
bGxlbmdlSUQgPSBhZGRDaGFsbGVuZ2VUb0NoYWxsZW5nZU1hcChhdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSk7CisgICAgdWludDY0X3QgY2hhbGxlbmdlSUQgPSBhZGRDaGFsbGVuZ2VUb0NoYWxsZW5n
ZU1hcCh7YXV0aGVudGljYXRpb25DaGFsbGVuZ2UKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQor
ICAgICAgICAsIENoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyKCkKKyNlbmRpZgorICAgIH0pOwog
ICAgIGlmIChzaG91bGRDb2FsZXNjZUNoYWxsZW5nZShjaGFsbGVuZ2VJRCwgYXV0aGVudGljYXRp
b25DaGFsbGVuZ2UpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbV9wcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpEaWRSZWNlaXZlQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UocGFnZUlELCBmcmFtZUlELCBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSwgYWRkQ2hh
bGxlbmdlVG9DaGFsbGVuZ2VNYXAoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpKSk7CisgICAgbV9w
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpEaWRSZWNlaXZlQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UocGFnZUlELCBmcmFtZUlELCBhdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSwgY2hhbGxlbmdlSUQpKTsKIH0KICNlbmRpZgogCisjaWYgIVVTRShORVRXT1JLX1NFU1NJ
T04pCiB2b2lkIEF1dGhlbnRpY2F0aW9uTWFuYWdlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKERvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKQogewogICAgIHVpbnQ2NF90IGNoYWxsZW5nZUlE
ID0gYWRkQ2hhbGxlbmdlVG9DaGFsbGVuZ2VNYXAoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOwpA
QCAtMTQ2LDYgKzE2OCw3IEBAIHZvaWQgQXV0aGVudGljYXRpb25NYW5hZ2VyOjpkaWRSZWNlaXZl
QXUKIAogICAgIGRvd25sb2FkLT5zZW5kKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIGFkZENo
YWxsZW5nZVRvQ2hhbGxlbmdlTWFwKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSkpOwogfQorI2Vu
ZGlmCiAKIC8vIEN1cnJlbnRseSwgb25seSBNYWMga25vd3MgaG93IHRvIHJlc3BvbmQgdG8gYXV0
aGVudGljYXRpb24gY2hhbGxlbmdlcyB3aXRoIGNlcnRpZmljYXRlIGluZm8uCiAjaWYgIUhBVkUo
U0VDX0lERU5USVRZKQpAQCAtMTY1LDIxICsxODgsMzAgQEAgdm9pZCBBdXRoZW50aWNhdGlvbk1h
bmFnZXI6OnVzZUNyZWRlbnRpYQogCiB2b2lkIEF1dGhlbnRpY2F0aW9uTWFuYWdlcjo6dXNlQ3Jl
ZGVudGlhbEZvclNpbmdsZUNoYWxsZW5nZSh1aW50NjRfdCBjaGFsbGVuZ2VJRCwgY29uc3QgQ3Jl
ZGVudGlhbCYgY3JlZGVudGlhbCwgY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUlu
Zm8pCiB7Ci0gICAgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgY2hhbGxlbmdlID0gbV9jaGFsbGVu
Z2VzLnRha2UoY2hhbGxlbmdlSUQpOwotICAgIEFTU0VSVCghY2hhbGxlbmdlLmlzTnVsbCgpKTsK
LSAgICAKLSAgICBpZiAodHJ5VXNlQ2VydGlmaWNhdGVJbmZvRm9yQ2hhbGxlbmdlKGNoYWxsZW5n
ZSwgY2VydGlmaWNhdGVJbmZvKSkKKyAgICBhdXRvIGNoYWxsZW5nZSA9IG1fY2hhbGxlbmdlcy50
YWtlKGNoYWxsZW5nZUlEKTsKKyAgICBBU1NFUlQoIWNoYWxsZW5nZS5jaGFsbGVuZ2UuaXNOdWxs
KCkpOworCisgICAgaWYgKHRyeVVzZUNlcnRpZmljYXRlSW5mb0ZvckNoYWxsZW5nZShjaGFsbGVu
Z2UuY2hhbGxlbmdlLCBjZXJ0aWZpY2F0ZUluZm8pKQogICAgICAgICByZXR1cm47Ci0gICAgCi0g
ICAgQXV0aGVudGljYXRpb25DbGllbnQqIGNvcmVDbGllbnQgPSBjaGFsbGVuZ2UuYXV0aGVudGlj
YXRpb25DbGllbnQoKTsKKworI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisgICAgLy8gSWYgdGhl
cmUgaXMgYSBjb21wbGV0aW9uIGhhbmRsZXIsIHRoZW4gdGhlcmUgaXMgbm8gQXV0aGVudGljYXRp
b25DbGllbnQuCisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgdXNlIG9mIEF1dGhlbnRpY2F0aW9u
Q2xpZW50IGluIFdlYktpdDIgb25jZSBORVRXT1JLX1NFU1NJT04gaXMgdXNlZCBmb3IgYWxsIGxv
YWRzLgorICAgIGlmIChjaGFsbGVuZ2UuY29tcGxldGlvbkhhbmRsZXIpIHsKKyAgICAgICAgY2hh
bGxlbmdlLmNvbXBsZXRpb25IYW5kbGVyKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRp
b246OlVzZUNyZWRlbnRpYWwsIGNyZWRlbnRpYWwpOworICAgICAgICByZXR1cm47CisgICAgfQor
I2VuZGlmCisKKyAgICBBdXRoZW50aWNhdGlvbkNsaWVudCogY29yZUNsaWVudCA9IGNoYWxsZW5n
ZS5jaGFsbGVuZ2UuYXV0aGVudGljYXRpb25DbGllbnQoKTsKICAgICBpZiAoIWNvcmVDbGllbnQp
IHsKICAgICAgICAgLy8gRklYTUU6IFRoZSBhdXRoZW50aWNhdGlvbiBjbGllbnQgaXMgbnVsbCBm
b3IgZG93bmxvYWRzLCBidXQgaXQgY2FuIGFsc28gYmUgbnVsbCBmb3IgY2FuY2VsZWQgbG9hZHMu
CiAgICAgICAgIC8vIFdlIHNob3VsZCBub3QgY2FsbCBEb3dubG9hZDo6cmVjZWl2ZWRDcmVkZW50
aWFsIGluIHRoZSBsYXR0ZXIgY2FzZS4KLSAgICAgICAgRG93bmxvYWQ6OnJlY2VpdmVkQ3JlZGVu
dGlhbChjaGFsbGVuZ2UsIGNyZWRlbnRpYWwpOworICAgICAgICBEb3dubG9hZDo6cmVjZWl2ZWRD
cmVkZW50aWFsKGNoYWxsZW5nZS5jaGFsbGVuZ2UsIGNyZWRlbnRpYWwpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgY29yZUNsaWVudC0+cmVjZWl2ZWRDcmVkZW50aWFsKGNoYWxsZW5n
ZSwgY3JlZGVudGlhbCk7CisgICAgY29yZUNsaWVudC0+cmVjZWl2ZWRDcmVkZW50aWFsKGNoYWxs
ZW5nZS5jaGFsbGVuZ2UsIGNyZWRlbnRpYWwpOwogfQogCiB2b2lkIEF1dGhlbnRpY2F0aW9uTWFu
YWdlcjo6Y29udGludWVXaXRob3V0Q3JlZGVudGlhbEZvckNoYWxsZW5nZSh1aW50NjRfdCBjaGFs
bGVuZ2VJRCkKQEAgLTE5MiwxNyArMjI0LDI1IEBAIHZvaWQgQXV0aGVudGljYXRpb25NYW5hZ2Vy
Ojpjb250aW51ZVdpdGgKIAogdm9pZCBBdXRoZW50aWNhdGlvbk1hbmFnZXI6OmNvbnRpbnVlV2l0
aG91dENyZWRlbnRpYWxGb3JTaW5nbGVDaGFsbGVuZ2UodWludDY0X3QgY2hhbGxlbmdlSUQpCiB7
Ci0gICAgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgY2hhbGxlbmdlID0gbV9jaGFsbGVuZ2VzLnRh
a2UoY2hhbGxlbmdlSUQpOwotICAgIEFTU0VSVCghY2hhbGxlbmdlLmlzTnVsbCgpKTsKLSAgICBB
dXRoZW50aWNhdGlvbkNsaWVudCogY29yZUNsaWVudCA9IGNoYWxsZW5nZS5hdXRoZW50aWNhdGlv
bkNsaWVudCgpOworICAgIGF1dG8gY2hhbGxlbmdlID0gbV9jaGFsbGVuZ2VzLnRha2UoY2hhbGxl
bmdlSUQpOworICAgIEFTU0VSVCghY2hhbGxlbmdlLmNoYWxsZW5nZS5pc051bGwoKSk7CisKKyNp
ZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAgIGlmIChjaGFsbGVuZ2UuY29tcGxldGlvbkhhbmRs
ZXIpIHsKKyAgICAgICAgY2hhbGxlbmdlLmNvbXBsZXRpb25IYW5kbGVyKEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlRGlzcG9zaXRpb246OlVzZUNyZWRlbnRpYWwsIENyZWRlbnRpYWwoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIEF1dGhlbnRpY2F0aW9uQ2xpZW50KiBj
b3JlQ2xpZW50ID0gY2hhbGxlbmdlLmNoYWxsZW5nZS5hdXRoZW50aWNhdGlvbkNsaWVudCgpOwog
ICAgIGlmICghY29yZUNsaWVudCkgewogICAgICAgICAvLyBGSVhNRTogVGhlIGF1dGhlbnRpY2F0
aW9uIGNsaWVudCBpcyBudWxsIGZvciBkb3dubG9hZHMsIGJ1dCBpdCBjYW4gYWxzbyBiZSBudWxs
IGZvciBjYW5jZWxlZCBsb2Fkcy4KICAgICAgICAgLy8gV2Ugc2hvdWxkIG5vdCBjYWxsIERvd25s
b2FkOjpyZWNlaXZlZENyZWRlbnRpYWwgaW4gdGhlIGxhdHRlciBjYXNlLgotICAgICAgICBEb3du
bG9hZDo6cmVjZWl2ZWRSZXF1ZXN0VG9Db250aW51ZVdpdGhvdXRDcmVkZW50aWFsKGNoYWxsZW5n
ZSk7CisgICAgICAgIERvd25sb2FkOjpyZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENy
ZWRlbnRpYWwoY2hhbGxlbmdlLmNoYWxsZW5nZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBjb3JlQ2xpZW50LT5yZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRp
YWwoY2hhbGxlbmdlKTsKKyAgICBjb3JlQ2xpZW50LT5yZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVl
V2l0aG91dENyZWRlbnRpYWwoY2hhbGxlbmdlLmNoYWxsZW5nZSk7CiB9CiAKIHZvaWQgQXV0aGVu
dGljYXRpb25NYW5hZ2VyOjpjYW5jZWxDaGFsbGVuZ2UodWludDY0X3QgY2hhbGxlbmdlSUQpCkBA
IC0yMTUsMTcgKzI1NSwyNSBAQCB2b2lkIEF1dGhlbnRpY2F0aW9uTWFuYWdlcjo6Y2FuY2VsQ2hh
bGxlCiAKIHZvaWQgQXV0aGVudGljYXRpb25NYW5hZ2VyOjpjYW5jZWxTaW5nbGVDaGFsbGVuZ2Uo
dWludDY0X3QgY2hhbGxlbmdlSUQpCiB7Ci0gICAgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgY2hh
bGxlbmdlID0gbV9jaGFsbGVuZ2VzLnRha2UoY2hhbGxlbmdlSUQpOwotICAgIEFTU0VSVCghY2hh
bGxlbmdlLmlzTnVsbCgpKTsKLSAgICBBdXRoZW50aWNhdGlvbkNsaWVudCogY29yZUNsaWVudCA9
IGNoYWxsZW5nZS5hdXRoZW50aWNhdGlvbkNsaWVudCgpOworICAgIGF1dG8gY2hhbGxlbmdlID0g
bV9jaGFsbGVuZ2VzLnRha2UoY2hhbGxlbmdlSUQpOworICAgIEFTU0VSVCghY2hhbGxlbmdlLmNo
YWxsZW5nZS5pc051bGwoKSk7CisKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAgIGlmIChj
aGFsbGVuZ2UuY29tcGxldGlvbkhhbmRsZXIpIHsKKyAgICAgICAgY2hhbGxlbmdlLmNvbXBsZXRp
b25IYW5kbGVyKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OkNhbmNlbCwgQ3Jl
ZGVudGlhbCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgQXV0aGVu
dGljYXRpb25DbGllbnQqIGNvcmVDbGllbnQgPSBjaGFsbGVuZ2UuY2hhbGxlbmdlLmF1dGhlbnRp
Y2F0aW9uQ2xpZW50KCk7CiAgICAgaWYgKCFjb3JlQ2xpZW50KSB7CiAgICAgICAgIC8vIEZJWE1F
OiBUaGUgYXV0aGVudGljYXRpb24gY2xpZW50IGlzIG51bGwgZm9yIGRvd25sb2FkcywgYnV0IGl0
IGNhbiBhbHNvIGJlIG51bGwgZm9yIGNhbmNlbGVkIGxvYWRzLgogICAgICAgICAvLyBXZSBzaG91
bGQgbm90IGNhbGwgRG93bmxvYWQ6OnJlY2VpdmVkQ3JlZGVudGlhbCBpbiB0aGUgbGF0dGVyIGNh
c2UuCi0gICAgICAgIERvd25sb2FkOjpyZWNlaXZlZENhbmNlbGxhdGlvbihjaGFsbGVuZ2UpOwor
ICAgICAgICBEb3dubG9hZDo6cmVjZWl2ZWRDYW5jZWxsYXRpb24oY2hhbGxlbmdlLmNoYWxsZW5n
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjb3JlQ2xpZW50LT5yZWNlaXZlZENh
bmNlbGxhdGlvbihjaGFsbGVuZ2UpOworICAgIGNvcmVDbGllbnQtPnJlY2VpdmVkQ2FuY2VsbGF0
aW9uKGNoYWxsZW5nZS5jaGFsbGVuZ2UpOwogfQogCiB2b2lkIEF1dGhlbnRpY2F0aW9uTWFuYWdl
cjo6cGVyZm9ybURlZmF1bHRIYW5kbGluZyh1aW50NjRfdCBjaGFsbGVuZ2VJRCkKQEAgLTIzOCwx
NyArMjg2LDI1IEBAIHZvaWQgQXV0aGVudGljYXRpb25NYW5hZ2VyOjpwZXJmb3JtRGVmYXUKIAog
dm9pZCBBdXRoZW50aWNhdGlvbk1hbmFnZXI6OnBlcmZvcm1EZWZhdWx0SGFuZGxpbmdGb3JTaW5n
bGVDaGFsbGVuZ2UodWludDY0X3QgY2hhbGxlbmdlSUQpCiB7Ci0gICAgQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UgY2hhbGxlbmdlID0gbV9jaGFsbGVuZ2VzLnRha2UoY2hhbGxlbmdlSUQpOwotICAg
IEFTU0VSVCghY2hhbGxlbmdlLmlzTnVsbCgpKTsKLSAgICBBdXRoZW50aWNhdGlvbkNsaWVudCog
Y29yZUNsaWVudCA9IGNoYWxsZW5nZS5hdXRoZW50aWNhdGlvbkNsaWVudCgpOworICAgIGF1dG8g
Y2hhbGxlbmdlID0gbV9jaGFsbGVuZ2VzLnRha2UoY2hhbGxlbmdlSUQpOworICAgIEFTU0VSVCgh
Y2hhbGxlbmdlLmNoYWxsZW5nZS5pc051bGwoKSk7CisKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9O
KQorICAgIGlmIChjaGFsbGVuZ2UuY29tcGxldGlvbkhhbmRsZXIpIHsKKyAgICAgICAgY2hhbGxl
bmdlLmNvbXBsZXRpb25IYW5kbGVyKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246
OlBlcmZvcm1EZWZhdWx0SGFuZGxpbmcsIENyZWRlbnRpYWwoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisjZW5kaWYKKworICAgIEF1dGhlbnRpY2F0aW9uQ2xpZW50KiBjb3JlQ2xpZW50ID0g
Y2hhbGxlbmdlLmNoYWxsZW5nZS5hdXRoZW50aWNhdGlvbkNsaWVudCgpOwogICAgIGlmICghY29y
ZUNsaWVudCkgewogICAgICAgICAvLyBGSVhNRTogVGhlIGF1dGhlbnRpY2F0aW9uIGNsaWVudCBp
cyBudWxsIGZvciBkb3dubG9hZHMsIGJ1dCBpdCBjYW4gYWxzbyBiZSBudWxsIGZvciBjYW5jZWxl
ZCBsb2Fkcy4KICAgICAgICAgLy8gV2Ugc2hvdWxkIG5vdCBjYWxsIERvd25sb2FkOjpyZWNlaXZl
ZENyZWRlbnRpYWwgaW4gdGhlIGxhdHRlciBjYXNlLgotICAgICAgICBEb3dubG9hZDo6cmVjZWl2
ZWRSZXF1ZXN0VG9QZXJmb3JtRGVmYXVsdEhhbmRsaW5nKGNoYWxsZW5nZSk7CisgICAgICAgIERv
d25sb2FkOjpyZWNlaXZlZFJlcXVlc3RUb1BlcmZvcm1EZWZhdWx0SGFuZGxpbmcoY2hhbGxlbmdl
LmNoYWxsZW5nZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjb3JlQ2xpZW50LT5y
ZWNlaXZlZFJlcXVlc3RUb1BlcmZvcm1EZWZhdWx0SGFuZGxpbmcoY2hhbGxlbmdlKTsKKyAgICBj
b3JlQ2xpZW50LT5yZWNlaXZlZFJlcXVlc3RUb1BlcmZvcm1EZWZhdWx0SGFuZGxpbmcoY2hhbGxl
bmdlLmNoYWxsZW5nZSk7CiB9CiAKIHZvaWQgQXV0aGVudGljYXRpb25NYW5hZ2VyOjpyZWplY3RQ
cm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZSh1aW50NjRfdCBjaGFsbGVuZ2VJRCkKQEAgLTI2MSwx
NyArMzE3LDI1IEBAIHZvaWQgQXV0aGVudGljYXRpb25NYW5hZ2VyOjpyZWplY3RQcm90ZWMKIAog
dm9pZCBBdXRoZW50aWNhdGlvbk1hbmFnZXI6OnJlamVjdFByb3RlY3Rpb25TcGFjZUFuZENvbnRp
bnVlRm9yU2luZ2xlQ2hhbGxlbmdlKHVpbnQ2NF90IGNoYWxsZW5nZUlEKQogewotICAgIEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlIGNoYWxsZW5nZSA9IG1fY2hhbGxlbmdlcy50YWtlKGNoYWxsZW5n
ZUlEKTsKLSAgICBBU1NFUlQoIWNoYWxsZW5nZS5pc051bGwoKSk7Ci0gICAgQXV0aGVudGljYXRp
b25DbGllbnQqIGNvcmVDbGllbnQgPSBjaGFsbGVuZ2UuYXV0aGVudGljYXRpb25DbGllbnQoKTsK
KyAgICBhdXRvIGNoYWxsZW5nZSA9IG1fY2hhbGxlbmdlcy50YWtlKGNoYWxsZW5nZUlEKTsKKyAg
ICBBU1NFUlQoIWNoYWxsZW5nZS5jaGFsbGVuZ2UuaXNOdWxsKCkpOworCisjaWYgVVNFKE5FVFdP
UktfU0VTU0lPTikKKyAgICBpZiAoY2hhbGxlbmdlLmNvbXBsZXRpb25IYW5kbGVyKSB7CisgICAg
ICAgIGNoYWxsZW5nZS5jb21wbGV0aW9uSGFuZGxlcihBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURp
c3Bvc2l0aW9uOjpSZWplY3RQcm90ZWN0aW9uU3BhY2UsIENyZWRlbnRpYWwoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIEF1dGhlbnRpY2F0aW9uQ2xpZW50KiBjb3Jl
Q2xpZW50ID0gY2hhbGxlbmdlLmNoYWxsZW5nZS5hdXRoZW50aWNhdGlvbkNsaWVudCgpOwogICAg
IGlmICghY29yZUNsaWVudCkgewogICAgICAgICAvLyBGSVhNRTogVGhlIGF1dGhlbnRpY2F0aW9u
IGNsaWVudCBpcyBudWxsIGZvciBkb3dubG9hZHMsIGJ1dCBpdCBjYW4gYWxzbyBiZSBudWxsIGZv
ciBjYW5jZWxlZCBsb2Fkcy4KICAgICAgICAgLy8gV2Ugc2hvdWxkIG5vdCBjYWxsIERvd25sb2Fk
OjpyZWNlaXZlZENyZWRlbnRpYWwgaW4gdGhlIGxhdHRlciBjYXNlLgotICAgICAgICBEb3dubG9h
ZDo6cmVjZWl2ZWRDaGFsbGVuZ2VSZWplY3Rpb24oY2hhbGxlbmdlKTsKKyAgICAgICAgRG93bmxv
YWQ6OnJlY2VpdmVkQ2hhbGxlbmdlUmVqZWN0aW9uKGNoYWxsZW5nZS5jaGFsbGVuZ2UpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgY29yZUNsaWVudC0+cmVjZWl2ZWRDaGFsbGVuZ2VS
ZWplY3Rpb24oY2hhbGxlbmdlKTsKKyAgICBjb3JlQ2xpZW50LT5yZWNlaXZlZENoYWxsZW5nZVJl
amVjdGlvbihjaGFsbGVuZ2UuY2hhbGxlbmdlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRp
b25NYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0F1dGhlbnRp
Y2F0aW9uL0F1dGhlbnRpY2F0aW9uTWFuYWdlci5oCShyZXZpc2lvbiAxOTIxNzIpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25NYW5hZ2VyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIk1lc3NhZ2VSZWNl
aXZlci5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzU3VwcGxlbWVudC5oIgorI2luY2x1ZGUg
Ik5ldHdvcmtTZXNzaW9uLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1N1cHBsZW1lbnQuaCIKICNp
bmNsdWRlIDxXZWJDb3JlL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmg+CiAjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KQEAgLTUyLDYgKzUzLDEwIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25z
dCBjaGFyKiBzdXBwbGVtZW50TmFtZSgpOwogCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAg
ICB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248dm9pZChBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bv
c2l0aW9uLCBjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJik+IENoYWxsZW5nZUNvbXBsZXRpb25I
YW5kbGVyOworICAgIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKHVpbnQ2
NF90IHBhZ2VJRCwgdWludDY0X3QgZnJhbWVJRCwgY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmLCBDaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlcik7CisjZW5kaWYKICAgICAv
LyBDYWxsZWQgZm9yIHJlc291cmNlcyBpbiB0aGUgV2ViUHJvY2VzcyAoTmV0d29ya1Byb2Nlc3Mg
ZGlzYWJsZWQpCiAgICAgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV2Vi
RnJhbWUqLCBjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwogICAgIC8v
IENhbGxlZCBmb3IgcmVzb3VyY2VzIGluIHRoZSBOZXR3b3JrUHJvY2VzcyAoTmV0d29ya1Byb2Nl
c3MgZW5hYmxlZCkKQEAgLTY4LDEyICs3MywxOSBAQCBwdWJsaWM6CiAgICAgdWludDY0X3Qgb3V0
c3RhbmRpbmdBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9j
aGFsbGVuZ2VzLnNpemUoKTsgfQogCiBwcml2YXRlOgorICAgIHN0cnVjdCBDaGFsbGVuZ2Ugewor
ICAgICAgICBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSBjaGFsbGVuZ2U7CisjaWYg
VVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICAgICAgQ2hhbGxlbmdlQ29tcGxldGlvbkhhbmRsZXIg
Y29tcGxldGlvbkhhbmRsZXI7CisjZW5kaWYKKyAgICB9OworICAgIAogICAgIC8vIElQQzo6TWVz
c2FnZVJlY2VpdmVyCiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYsIElQQzo6TWVzc2FnZURlY29kZXImKSBvdmVycmlkZTsKIAogICAgIGJvb2wgdHJ5
VXNlQ2VydGlmaWNhdGVJbmZvRm9yQ2hhbGxlbmdlKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlJiwgY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJik7CiAKLSAgICB1
aW50NjRfdCBhZGRDaGFsbGVuZ2VUb0NoYWxsZW5nZU1hcChjb25zdCBXZWJDb3JlOjpBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSYpOworICAgIHVpbnQ2NF90IGFkZENoYWxsZW5nZVRvQ2hhbGxlbmdl
TWFwKGNvbnN0IENoYWxsZW5nZSYpOwogICAgIGJvb2wgc2hvdWxkQ29hbGVzY2VDaGFsbGVuZ2Uo
dWludDY0X3QgY2hhbGxlbmdlSUQsIGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlJikgY29uc3Q7CiAKICAgICB2b2lkIHVzZUNyZWRlbnRpYWxGb3JTaW5nbGVDaGFsbGVuZ2Uo
dWludDY0X3QgY2hhbGxlbmdlSUQsIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmLCBjb25zdCBX
ZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKTsKQEAgLTg2LDggKzk4LDcgQEAgcHJpdmF0ZToKIAog
ICAgIENoaWxkUHJvY2VzcyogbV9wcm9jZXNzOwogCi0gICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2
NF90LCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZT4gQXV0aGVudGljYXRpb25DaGFs
bGVuZ2VNYXA7Ci0gICAgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VNYXAgbV9jaGFsbGVuZ2VzOwor
ICAgIEhhc2hNYXA8dWludDY0X3QsIENoYWxsZW5nZT4gbV9jaGFsbGVuZ2VzOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRz
L0Rvd25sb2FkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxv
YWRzL0Rvd25sb2FkLmNwcAkocmV2aXNpb24gMTkyMTcyKQorKysgU291cmNlL1dlYktpdDIvU2hh
cmVkL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDExICsyOSwx
NSBAQAogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uTWFuYWdlci5oIgogI2luY2x1ZGUgIkNvbm5l
Y3Rpb24uaCIKICNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiRG93bmxvYWRB
dXRoZW50aWNhdGlvbkNsaWVudC5oIgogI2luY2x1ZGUgIkRvd25sb2FkUHJveHlNZXNzYWdlcy5o
IgogI2luY2x1ZGUgIkRvd25sb2FkTWFuYWdlci5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNp
b24uaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL05vdEltcGxlbWVudGVkLmg+CisKKyNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKKyNpbmNs
dWRlICJEb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50LmgiCisjZW5kaWYKIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTYzLDcgKzY3LDExIEBAIHZvaWQgRG93bmxvYWQ6OmRpZFN0
YXJ0KCkKIAogdm9pZCBEb3dubG9hZDo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkK
IHsKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAgIG5vdEltcGxlbWVudGVkKCk7CisjZWxz
ZQogICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRvd25sb2Fkc0F1dGhlbnRpY2F0aW9uTWFuYWdlcigp
LmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSh0aGlzLCBhdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSk7CisjZW5kaWYKIH0KIAogdm9pZCBEb3dubG9hZDo6ZGlkUmVjZWl2ZVJlc3BvbnNl
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQpJbmRleDogU291cmNlL1dlYktpdDIv
U2hhcmVkL0Rvd25sb2Fkcy9Eb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkQXV0aGVudGlj
YXRpb25DbGllbnQuY3BwCShyZXZpc2lvbiAxOTIxNzIpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvRG93bmxvYWRzL0Rvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRG93
bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudC5oIgogCisjaWYgIVVTRShORVRXT1JLX1NFU1NJT04p
CisKICNpbmNsdWRlICJEb3dubG9hZC5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAg
LTY0LDMgKzY2LDUgQEAgdm9pZCBEb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50OjpyZWNlaQog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkQXV0aGVudGlj
YXRpb25DbGllbnQuaAkocmV2aXNpb24gMTkyMTcyKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVk
L0Rvd25sb2Fkcy9Eb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDggQEAKICNpZm5kZWYgRG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudF9o
CiAjZGVmaW5lIERvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnRfaAogCisjaWYgIVVTRShORVRX
T1JLX1NFU1NJT04pCisKICNpbmNsdWRlIDxXZWJDb3JlL0F1dGhlbnRpY2F0aW9uQ2xpZW50Lmg+
CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgpAQCAtNjUsNCArNjcsNiBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAor
I2VuZGlmIC8vICFVU0UoTkVUV09SS19TRVNTSU9OKQorCiAjZW5kaWYgLy8gRG93bmxvYWRBdXRo
ZW50aWNhdGlvbkNsaWVudF9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265253</attachid>
            <date>2015-11-10 17:28:57 -0800</date>
            <delta_ts>2015-11-10 18:23:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150968-20151110172852.patch</filename>
            <type>text/plain</type>
            <size>25614</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MjI2NykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDE1LTExLTEwICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50
IGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZSBoYW5kbGluZyB3aGVuIHVzaW5nIE5FVFdPUktfU0VT
U0lPTgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUw
OTY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtM
b2FkOjpkaWRSZWNlaXZlQ2hhbGxlbmdlKToKKyAgICAgICAgQ29weSBmdW5jdGlvbmFsaXR5IGZy
b20gTmV0d29ya0xvYWQ6OmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VBc3lu
YyAod2hpY2ggaXMgdXNlZCB3aGVuIHdlIGRvbid0IHVzZSBORVRXT1JLX1NFU1NJT04pCisgICAg
ICAgIGJlY2F1c2UgdGhlcmUgaXMgbm8gY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25T
cGFjZSBkZWxlZ2F0ZSBjYWxsYmFjayB3aGVuIHVzaW5nIE5TVVJMU2Vzc2lvbiwgYWNjb3JkaW5n
IHRvCisgICAgICAgIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9saWJyYXJ5L2lvcy9kb2N1
bWVudGF0aW9uL0NvY29hL0NvbmNlcHR1YWwvVVJMTG9hZGluZ1N5c3RlbS9BcnRpY2xlcy9BdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZXMuaHRtbAorICAgICAgICBJbnN0ZWFkLCBhbGwgYXV0aGVudGlj
YXRpb24gY2hhbGxlbmdlIGNhbGxiYWNrcyBnbyB0byBVUkxTZXNzaW9uOnRhc2s6ZGlkUmVjZWl2
ZUNoYWxsZW5nZTpjb21wbGV0aW9uSGFuZGxlcjoKKyAgICAgICAgYmVjYXVzZSB3ZSBkbyBub3Qg
aW1wbGVtZW50IFVSTFNlc3Npb246ZGlkUmVjZWl2ZUNoYWxsZW5nZTpjb21wbGV0aW9uSGFuZGxl
cjoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1t
OgorICAgICAgICAoLVtOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIFVSTFNlc3Npb246dGFzazp3aWxs
UGVyZm9ybUhUVFBSZWRpcmVjdGlvbjpuZXdSZXF1ZXN0OmNvbXBsZXRpb25IYW5kbGVyOl0pOgor
ICAgICAgICAoLVtOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIFVSTFNlc3Npb246dGFzazpkaWRSZWNl
aXZlQ2hhbGxlbmdlOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtOZXR3b3JrU2Vz
c2lvbkRlbGVnYXRlIFVSTFNlc3Npb246ZGF0YVRhc2s6ZGlkUmVjZWl2ZVJlc3BvbnNlOmNvbXBs
ZXRpb25IYW5kbGVyOl0pOgorICAgICAgICBNYWtlIGEgYmxvY2sgY29weSBvZiB0aGUgY29tcGxl
dGlvbiBoYW5kbGVycyBzbyB3ZSBjYW4gY29weSB0aGUgc3RkOjpmdW5jdGlvbnMgdGhhdCB3cmFw
IHRoZW0gaW50byBIYXNoTWFwcyBhbmQgY2FsbCB0aGVtIGxhdGVyLAorICAgICAgICBpbiB0aGlz
IGNhc2Ugd2UgY2FsbCB0aGUgY29tcGxldGlvbiBoYW5kbGVyIGFmdGVyIHRoZSBVSVByb2Nlc3Mg
Z2l2ZXMgdXMgY3JlZGVudGlhbHMgZm9yIGFuIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZS4KKyAg
ICAgICAgKiBTaGFyZWQvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25NYW5hZ2VyLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6QXV0aGVudGljYXRpb25NYW5hZ2VyOjpBdXRoZW50aWNhdGlvbk1h
bmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpBdXRoZW50aWNhdGlvbk1hbmFnZXI6OmFkZENoYWxs
ZW5nZVRvQ2hhbGxlbmdlTWFwKToKKyAgICAgICAgKFdlYktpdDo6QXV0aGVudGljYXRpb25NYW5h
Z2VyOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICBGaXggYW4g
ZXhpc3RpbmcgYnVnIHRoYXQgY2F1c2VkIG11bHRpcGxlIGNhbGxzIHRvIGFkZENoYWxsZW5nZVRv
Q2hhbGxlbmdlTWFwIGZvciBvbmUgY2hhbGxlbmdlLiAgVGhpcyBjYXVzZWQgdG9vIG1hbnkgY2Fs
bHMgdG8gCisgICAgICAgIHRoZSBBdXRoZW50aWNhdGlvbkNsaWVudCBtZXRob2RzLCB3aGljaCBk
aWQgbm90IGNhdXNlIGEgcHJvYmxlbSBiZWNhdXNlIHRoZXkgd2VyZSBub3Qgb25lLXRpbWUtdXNl
IGJsb2NrIGNvcGllcyBvZiBjb21wbGV0aW9uIGhhbmRsZXJzIGJlZm9yZS4KKyAgICAgICAgKFdl
YktpdDo6QXV0aGVudGljYXRpb25NYW5hZ2VyOjp1c2VDcmVkZW50aWFsRm9yU2luZ2xlQ2hhbGxl
bmdlKToKKyAgICAgICAgKFdlYktpdDo6QXV0aGVudGljYXRpb25NYW5hZ2VyOjpjb250aW51ZVdp
dGhvdXRDcmVkZW50aWFsRm9yU2luZ2xlQ2hhbGxlbmdlKToKKyAgICAgICAgKFdlYktpdDo6QXV0
aGVudGljYXRpb25NYW5hZ2VyOjpjYW5jZWxTaW5nbGVDaGFsbGVuZ2UpOgorICAgICAgICAoV2Vi
S2l0OjpBdXRoZW50aWNhdGlvbk1hbmFnZXI6OnBlcmZvcm1EZWZhdWx0SGFuZGxpbmdGb3JTaW5n
bGVDaGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpBdXRoZW50aWNhdGlvbk1hbmFnZXI6OnJl
amVjdFByb3RlY3Rpb25TcGFjZUFuZENvbnRpbnVlRm9yU2luZ2xlQ2hhbGxlbmdlKToKKyAgICAg
ICAgQ2FsbCBjb21wbGV0aW9uIGhhbmRsZXJzIHdoaWNoIHdlIHN0b3JlZCBpbiBhIEhhc2hNYXAg
YmVmb3JlIGRvaW5nIElQQyBpZiB3ZSBhcmUgdXNpbmcgTkVUV09SS19TRVNTSU9OLAorICAgICAg
ICB3aGljaCBoYXMgY29tcGxldGlvbiBoYW5kbGVycyBpbnN0ZWFkIG9mIGNvbnRpbnVlU29tZXRo
aW5nIGNsaWVudCBjYWxscy4KKyAgICAgICAgKiBTaGFyZWQvQXV0aGVudGljYXRpb24vQXV0aGVu
dGljYXRpb25NYW5hZ2VyLmg6CisgICAgICAgICogU2hhcmVkL0Rvd25sb2Fkcy9Eb3dubG9hZC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZDo6ZGlkUmVjZWl2ZVJlc3BvbnNl
KToKKyAgICAgICAgKiBTaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkQXV0aGVudGljYXRpb25DbGll
bnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50Ojpy
ZWNlaXZlZENoYWxsZW5nZVJlamVjdGlvbik6CisgICAgICAgICogU2hhcmVkL0Rvd25sb2Fkcy9E
b3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50Lmg6CisgICAgICAgIEFkZCBpZmRlZnMgZm9yIGNv
ZGUgcmVsYXRlZCB0byBkb3dubG9hZGluZyBJIHdpbGwgaW1wbGVtZW50IGxhdGVyLgorCiAyMDE1
LTExLTEwICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgRml4ZWQg
dGhlIGJ1aWxkLgpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xv
YWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtMb2FkLmNwcAkocmV2aXNpb24gMTkyMTcyKQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya0xvYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsOCArMTU4LDMwIEBA
IHZvaWQgTmV0d29ya0xvYWQ6OndpbGxQZXJmb3JtSFRUUFJlZGlyZWMKIAogdm9pZCBOZXR3b3Jr
TG9hZDo6ZGlkUmVjZWl2ZUNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYg
Y2hhbGxlbmdlLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNw
b3NpdGlvbiwgY29uc3QgQ3JlZGVudGlhbCYpPiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlRGlzcG9zaXRpb246OlBlcmZvcm1EZWZhdWx0SGFuZGxpbmcsIENyZWRlbnRpYWwoKSk7
CisgICAgLy8gTmV0d29ya1Jlc291cmNlTG9hZGVyIGRvZXMgbm90IGtub3cgd2hldGhlciB0aGUg
cmVxdWVzdCBpcyBjcm9zcyBvcmlnaW4sIHNvIFdlYiBwcm9jZXNzIGNvbXB1dGVzIGFuIGFwcGxp
Y2FibGUgY3JlZGVudGlhbCBwb2xpY3kgZm9yIGl0LgorICAgIEFTU0VSVChtX3BhcmFtZXRlcnMu
Y2xpZW50Q3JlZGVudGlhbFBvbGljeSAhPSBEb05vdEFza0NsaWVudEZvckNyb3NzT3JpZ2luQ3Jl
ZGVudGlhbHMpOworCisgICAgLy8gSGFuZGxlIHNlcnZlciB0cnVzdCBldmFsdWF0aW9uIGF0IHBs
YXRmb3JtLWxldmVsIGlmIHJlcXVlc3RlZCwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuCisgICAg
aWYgKGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKS5hdXRoZW50aWNhdGlvblNjaGVtZSgpID09
IFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lU2VydmVyVHJ1c3RFdmFsdWF0aW9u
UmVxdWVzdGVkCisgICAgICAgICYmICFOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuY2FuSGFu
ZGxlSFRUUFNTZXJ2ZXJUcnVzdEV2YWx1YXRpb24oKSkgeworICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpQZXJmb3JtRGVmYXVsdEhh
bmRsaW5nLCBDcmVkZW50aWFsKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KG1fY2xpZW50LmlzU3luY2hyb25vdXMoKSkgeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGFzayB0aGUgV2ViUHJvY2VzcyBsaWtlIHRoZSBhc3luY2hyb25vdXMgY2FzZSBiZWxvdyBkb2Vz
LgorICAgICAgICAvLyBUaGlzIGlzIGN1cnJlbnRseSBpbXBvc3NpYmxlIGFzIHRoZSBXZWJQcm9j
ZXNzIGlzIGJsb2NrZWQgd2FpdGluZyBvbiB0aGlzIHN5bmNocm9ub3VzIGxvYWQuCisgICAgICAg
IC8vIEl0J3MgcG9zc2libGUgdGhhdCB3ZSBjYW4ganVtcCBzdHJhaWdodCB0byB0aGUgVUkgcHJv
Y2VzcyB0byByZXNvbHZlIHRoaXMuCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlBlcmZvcm1EZWZhdWx0SGFuZGxpbmcsIENyZWRl
bnRpYWwoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9wYXJhbWV0ZXJz
LmNsaWVudENyZWRlbnRpYWxQb2xpY3kgPT0gRG9Ob3RBc2tDbGllbnRGb3JBbnlDcmVkZW50aWFs
cykgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURp
c3Bvc2l0aW9uOjpVc2VDcmVkZW50aWFsLCBDcmVkZW50aWFsKCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmF1dGhlbnRpY2F0aW9u
TWFuYWdlcigpLmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShtX3BhcmFtZXRlcnMu
d2ViUGFnZUlELCBtX3BhcmFtZXRlcnMud2ViRnJhbWVJRCwgY2hhbGxlbmdlLCBjb21wbGV0aW9u
SGFuZGxlcik7CiB9CiAKIHZvaWQgTmV0d29ya0xvYWQ6OmRpZFJlY2VpdmVSZXNwb25zZShjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlc3BvbnNl
RGlzcG9zaXRpb24pPiBjb21wbGV0aW9uSGFuZGxlcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5t
bQkocmV2aXNpb24gMTkyMTcyKQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29j
b2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtOTQsOSArOTQsMTEg
QEAgLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaQogCiAgICAgaWYgKGF1
dG8qIG5ldHdvcmtpbmdUYXNrID0gX3Nlc3Npb24tPmRhdGFUYXNrRm9ySWRlbnRpZmllcih0YXNr
LnRhc2tJZGVudGlmaWVyKSkgewogICAgICAgICBpZiAoYXV0byogY2xpZW50ID0gbmV0d29ya2lu
Z1Rhc2stPmNsaWVudCgpKSB7Ci0gICAgICAgICAgICBjbGllbnQtPndpbGxQZXJmb3JtSFRUUFJl
ZGlyZWN0aW9uKHJlc3BvbnNlLCByZXF1ZXN0LCBeKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCkKKyAgICAgICAgICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXJDb3B5ID0g
QmxvY2tfY29weShjb21wbGV0aW9uSGFuZGxlcik7CisgICAgICAgICAgICBjbGllbnQtPndpbGxQ
ZXJmb3JtSFRUUFJlZGlyZWN0aW9uKHJlc3BvbnNlLCByZXF1ZXN0LCBbY29tcGxldGlvbkhhbmRs
ZXJDb3B5XShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXF1ZXN0
Lm5zVVJMUmVxdWVzdChXZWJDb3JlOjpVcGRhdGVIVFRQQm9keSkpOworICAgICAgICAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlckNvcHkocmVxdWVzdC5uc1VSTFJlcXVlc3QoV2ViQ29yZTo6
VXBkYXRlSFRUUEJvZHkpKTsKKyAgICAgICAgICAgICAgICAgICAgQmxvY2tfcmVsZWFzZShjb21w
bGV0aW9uSGFuZGxlckNvcHkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICk7CiAg
ICAgICAgIH0KQEAgLTEwOSw5ICsxMTEsMTEgQEAgLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNl
c3Npb24gKilzZXNzaQogCiAgICAgaWYgKGF1dG8qIG5ldHdvcmtpbmdUYXNrID0gX3Nlc3Npb24t
PmRhdGFUYXNrRm9ySWRlbnRpZmllcih0YXNrLnRhc2tJZGVudGlmaWVyKSkgewogICAgICAgICBp
ZiAoYXV0byogY2xpZW50ID0gbmV0d29ya2luZ1Rhc2stPmNsaWVudCgpKSB7Ci0gICAgICAgICAg
ICBjbGllbnQtPmRpZFJlY2VpdmVDaGFsbGVuZ2UoY2hhbGxlbmdlLCBeKFdlYktpdDo6QXV0aGVu
dGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6
Q3JlZGVudGlhbCYgY3JlZGVudGlhbCkKKyAgICAgICAgICAgIGF1dG8gY29tcGxldGlvbkhhbmRs
ZXJDb3B5ID0gQmxvY2tfY29weShjb21wbGV0aW9uSGFuZGxlcik7CisgICAgICAgICAgICBjbGll
bnQtPmRpZFJlY2VpdmVDaGFsbGVuZ2UoY2hhbGxlbmdlLCBbY29tcGxldGlvbkhhbmRsZXJDb3B5
XShXZWJLaXQ6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24gZGlzcG9zaXRpb24s
IGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCiAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih0b05TVVJMU2Vzc2lvbkF1
dGhDaGFsbGVuZ2VEaXNwb3NpdGlvbihkaXNwb3NpdGlvbiksIGNyZWRlbnRpYWwubnNDcmVkZW50
aWFsKCkpOworICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlckNvcHkodG9OU1VS
TFNlc3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9zaXRpb24oZGlzcG9zaXRpb24pLCBjcmVkZW50aWFs
Lm5zQ3JlZGVudGlhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgQmxvY2tfcmVsZWFzZShjb21w
bGV0aW9uSGFuZGxlckNvcHkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICk7CiAg
ICAgICAgIH0KQEAgLTEzNiw5ICsxNDAsMTEgQEAgLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNl
c3Npb24gKilzZXNzaQogICAgICAgICBpZiAoYXV0byogY2xpZW50ID0gbmV0d29ya2luZ1Rhc2st
PmNsaWVudCgpKSB7CiAgICAgICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgICAg
ICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNvdXJjZVJlc3BvbnNlKHJlc3BvbnNl
KTsKLSAgICAgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKHJlc291cmNlUmVzcG9u
c2UsIF4oV2ViS2l0OjpSZXNwb25zZURpc3Bvc2l0aW9uIHJlc3BvbnNlRGlzcG9zaXRpb24pCisg
ICAgICAgICAgICBhdXRvIGNvbXBsZXRpb25IYW5kbGVyQ29weSA9IEJsb2NrX2NvcHkoY29tcGxl
dGlvbkhhbmRsZXIpOworICAgICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UocmVz
b3VyY2VSZXNwb25zZSwgW2NvbXBsZXRpb25IYW5kbGVyQ29weV0oV2ViS2l0OjpSZXNwb25zZURp
c3Bvc2l0aW9uIHJlc3BvbnNlRGlzcG9zaXRpb24pCiAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih0b05TVVJMU2Vzc2lvblJlc3BvbnNlRGlz
cG9zaXRpb24ocmVzcG9uc2VEaXNwb3NpdGlvbikpOworICAgICAgICAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlckNvcHkodG9OU1VSTFNlc3Npb25SZXNwb25zZURpc3Bvc2l0aW9uKHJlc3Bv
bnNlRGlzcG9zaXRpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgQmxvY2tfcmVsZWFzZShjb21w
bGV0aW9uSGFuZGxlckNvcHkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICk7CiAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BdXRoZW50aWNhdGlvbi9BdXRo
ZW50aWNhdGlvbk1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbk1hbmFnZXIuY3BwCShyZXZpc2lvbiAxOTIx
NzIpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRp
b25NYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTIgKzcwLDEyIEBAIEF1dGhlbnRp
Y2F0aW9uTWFuYWdlcjo6QXV0aGVudGljYXRpb25NYW4KICAgICBtX3Byb2Nlc3MtPmFkZE1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6QXV0aGVudGljYXRpb25NYW5hZ2VyOjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksICp0aGlzKTsKIH0KIAotdWludDY0X3QgQXV0aGVudGljYXRpb25NYW5hZ2VyOjph
ZGRDaGFsbGVuZ2VUb0NoYWxsZW5nZU1hcChjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpCit1aW50NjRfdCBBdXRoZW50aWNhdGlv
bk1hbmFnZXI6OmFkZENoYWxsZW5nZVRvQ2hhbGxlbmdlTWFwKGNvbnN0IENoYWxsZW5nZSYgY2hh
bGxlbmdlKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICB1aW50NjRf
dCBjaGFsbGVuZ2VJRCA9IGdlbmVyYXRlQXV0aGVudGljYXRpb25DaGFsbGVuZ2VJRCgpOwotICAg
IG1fY2hhbGxlbmdlcy5zZXQoY2hhbGxlbmdlSUQsIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKTsK
KyAgICBtX2NoYWxsZW5nZXMuc2V0KGNoYWxsZW5nZUlELCBjaGFsbGVuZ2UpOwogICAgIHJldHVy
biBjaGFsbGVuZ2VJRDsKIH0KIApAQCAtODUsNyArODUsNyBAQCBib29sIEF1dGhlbnRpY2F0aW9u
TWFuYWdlcjo6c2hvdWxkQ29hbGVzCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGZvciAo
YXV0byYgaXRlbSA6IG1fY2hhbGxlbmdlcykgewotICAgICAgICBpZiAoaXRlbS5rZXkgIT0gY2hh
bGxlbmdlSUQgJiYgUHJvdGVjdGlvblNwYWNlOjpjb21wYXJlKGNoYWxsZW5nZS5wcm90ZWN0aW9u
U3BhY2UoKSwgaXRlbS52YWx1ZS5wcm90ZWN0aW9uU3BhY2UoKSkpCisgICAgICAgIGlmIChpdGVt
LmtleSAhPSBjaGFsbGVuZ2VJRCAmJiBQcm90ZWN0aW9uU3BhY2U6OmNvbXBhcmUoY2hhbGxlbmdl
LnByb3RlY3Rpb25TcGFjZSgpLCBpdGVtLnZhbHVlLmNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2Uo
KSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtOTMsMTcgKzkzLDE3IEBAIGJvb2wgQXV0aGVudGljYXRpb25NYW5hZ2VyOjpzaG91bGRDb2Fs
ZXMKIAogVmVjdG9yPHVpbnQ2NF90PiBBdXRoZW50aWNhdGlvbk1hbmFnZXI6OmNvYWxlc2NlQ2hh
bGxlbmdlc01hdGNoaW5nKHVpbnQ2NF90IGNoYWxsZW5nZUlEKSBjb25zdAogewotICAgIEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlIGNoYWxsZW5nZSA9IG1fY2hhbGxlbmdlcy5nZXQoY2hhbGxlbmdl
SUQpOwotICAgIEFTU0VSVCghY2hhbGxlbmdlLmlzTnVsbCgpKTsKKyAgICBhdXRvIGNoYWxsZW5n
ZSA9IG1fY2hhbGxlbmdlcy5nZXQoY2hhbGxlbmdlSUQpOworICAgIEFTU0VSVCghY2hhbGxlbmdl
LmNoYWxsZW5nZS5pc051bGwoKSk7CiAKICAgICBWZWN0b3I8dWludDY0X3Q+IGNoYWxsZW5nZXNU
b0NvYWxlc2NlOwogICAgIGNoYWxsZW5nZXNUb0NvYWxlc2NlLmFwcGVuZChjaGFsbGVuZ2VJRCk7
CiAKLSAgICBpZiAoIWNhbkNvYWxlc2NlQ2hhbGxlbmdlKGNoYWxsZW5nZSkpCisgICAgaWYgKCFj
YW5Db2FsZXNjZUNoYWxsZW5nZShjaGFsbGVuZ2UuY2hhbGxlbmdlKSkKICAgICAgICAgcmV0dXJu
IGNoYWxsZW5nZXNUb0NvYWxlc2NlOwogCiAgICAgZm9yIChhdXRvJiBpdGVtIDogbV9jaGFsbGVu
Z2VzKSB7Ci0gICAgICAgIGlmIChpdGVtLmtleSAhPSBjaGFsbGVuZ2VJRCAmJiBQcm90ZWN0aW9u
U3BhY2U6OmNvbXBhcmUoY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLCBpdGVtLnZhbHVlLnBy
b3RlY3Rpb25TcGFjZSgpKSkKKyAgICAgICAgaWYgKGl0ZW0ua2V5ICE9IGNoYWxsZW5nZUlEICYm
IFByb3RlY3Rpb25TcGFjZTo6Y29tcGFyZShjaGFsbGVuZ2UuY2hhbGxlbmdlLnByb3RlY3Rpb25T
cGFjZSgpLCBpdGVtLnZhbHVlLmNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSkpCiAgICAgICAg
ICAgICBjaGFsbGVuZ2VzVG9Db2FsZXNjZS5hcHBlbmQoaXRlbS5rZXkpOwogICAgIH0KIApAQCAt
MTE1LDcgKzExNSwxMSBAQCB2b2lkIEF1dGhlbnRpY2F0aW9uTWFuYWdlcjo6ZGlkUmVjZWl2ZUF1
CiAgICAgQVNTRVJUKGZyYW1lKTsKICAgICBBU1NFUlQoZnJhbWUtPnBhZ2UoKSk7CiAKLSAgICB1
aW50NjRfdCBjaGFsbGVuZ2VJRCA9IGFkZENoYWxsZW5nZVRvQ2hhbGxlbmdlTWFwKGF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKTsKKyAgICB1aW50NjRfdCBjaGFsbGVuZ2VJRCA9IGFkZENoYWxsZW5n
ZVRvQ2hhbGxlbmdlTWFwKHthdXRoZW50aWNhdGlvbkNoYWxsZW5nZQorI2lmIFVTRShORVRXT1JL
X1NFU1NJT04pCisgICAgICAgICwgQ2hhbGxlbmdlQ29tcGxldGlvbkhhbmRsZXIoKQorI2VuZGlm
CisgICAgfSk7CiAKICAgICAvLyBDb2FsZXNjZSBjaGFsbGVuZ2VzIGluIHRoZSBzYW1lIHByb3Rl
Y3Rpb24gc3BhY2UuCiAgICAgaWYgKHNob3VsZENvYWxlc2NlQ2hhbGxlbmdlKGNoYWxsZW5nZUlE
LCBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkpCkBAIC0xMjUsMjcgKzEyOSw0NiBAQCB2b2lkIEF1
dGhlbnRpY2F0aW9uTWFuYWdlcjo6ZGlkUmVjZWl2ZUF1CiB9CiAKICNpZiBFTkFCTEUoTkVUV09S
S19QUk9DRVNTKQorI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCit2b2lkIEF1dGhlbnRpY2F0aW9u
TWFuYWdlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKHVpbnQ2NF90IHBhZ2VJ
RCwgdWludDY0X3QgZnJhbWVJRCwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlLCBDaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlciBjb21wbGV0aW9u
SGFuZGxlcikKK3sKKyAgICBBU1NFUlQocGFnZUlEKTsKKyAgICBBU1NFUlQoZnJhbWVJRCk7CisK
KyAgICB1aW50NjRfdCBjaGFsbGVuZ2VJRCA9IGFkZENoYWxsZW5nZVRvQ2hhbGxlbmdlTWFwKHth
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSwgY29tcGxldGlvbkhhbmRsZXJ9KTsKKyAgICBpZiAoc2hv
dWxkQ29hbGVzY2VDaGFsbGVuZ2UoY2hhbGxlbmdlSUQsIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6RGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKHBh
Z2VJRCwgZnJhbWVJRCwgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIGNoYWxsZW5nZUlEKSk7Cit9
CisjZW5kaWYKIHZvaWQgQXV0aGVudGljYXRpb25NYW5hZ2VyOjpkaWRSZWNlaXZlQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UodWludDY0X3QgcGFnZUlELCB1aW50NjRfdCBmcmFtZUlELCBjb25zdCBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpCiB7CiAgICAg
QVNTRVJUKHBhZ2VJRCk7CiAgICAgQVNTRVJUKGZyYW1lSUQpOwogCi0gICAgdWludDY0X3QgY2hh
bGxlbmdlSUQgPSBhZGRDaGFsbGVuZ2VUb0NoYWxsZW5nZU1hcChhdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSk7CisgICAgdWludDY0X3QgY2hhbGxlbmdlSUQgPSBhZGRDaGFsbGVuZ2VUb0NoYWxsZW5n
ZU1hcCh7YXV0aGVudGljYXRpb25DaGFsbGVuZ2UKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQor
ICAgICAgICAsIENoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyKCkKKyNlbmRpZgorICAgIH0pOwog
ICAgIGlmIChzaG91bGRDb2FsZXNjZUNoYWxsZW5nZShjaGFsbGVuZ2VJRCwgYXV0aGVudGljYXRp
b25DaGFsbGVuZ2UpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbV9wcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpEaWRSZWNlaXZlQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UocGFnZUlELCBmcmFtZUlELCBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSwgYWRkQ2hh
bGxlbmdlVG9DaGFsbGVuZ2VNYXAoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpKSk7CisgICAgbV9w
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpEaWRSZWNlaXZlQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UocGFnZUlELCBmcmFtZUlELCBhdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSwgY2hhbGxlbmdlSUQpKTsKIH0KICNlbmRpZgogCisjaWYgIVVTRShORVRXT1JLX1NFU1NJ
T04pCiB2b2lkIEF1dGhlbnRpY2F0aW9uTWFuYWdlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKERvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKQogewotICAgIHVpbnQ2NF90IGNoYWxsZW5nZUlE
ID0gYWRkQ2hhbGxlbmdlVG9DaGFsbGVuZ2VNYXAoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOwor
ICAgIHVpbnQ2NF90IGNoYWxsZW5nZUlEID0gYWRkQ2hhbGxlbmdlVG9DaGFsbGVuZ2VNYXAoe2F1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlfSk7CiAgICAgaWYgKHNob3VsZENvYWxlc2NlQ2hhbGxlbmdl
KGNoYWxsZW5nZUlELCBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGRvd25sb2FkLT5zZW5kKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEaWRSZWNlaXZl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIGFkZENoYWxs
ZW5nZVRvQ2hhbGxlbmdlTWFwKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSkpOworICAgIGRvd25s
b2FkLT5zZW5kKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEaWRSZWNlaXZlQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIGNoYWxsZW5nZUlEKSk7CiB9Cisj
ZW5kaWYKIAogLy8gQ3VycmVudGx5LCBvbmx5IE1hYyBrbm93cyBob3cgdG8gcmVzcG9uZCB0byBh
dXRoZW50aWNhdGlvbiBjaGFsbGVuZ2VzIHdpdGggY2VydGlmaWNhdGUgaW5mby4KICNpZiAhSEFW
RShTRUNfSURFTlRJVFkpCkBAIC0xNjUsMjEgKzE4OCwzMCBAQCB2b2lkIEF1dGhlbnRpY2F0aW9u
TWFuYWdlcjo6dXNlQ3JlZGVudGlhCiAKIHZvaWQgQXV0aGVudGljYXRpb25NYW5hZ2VyOjp1c2VD
cmVkZW50aWFsRm9yU2luZ2xlQ2hhbGxlbmdlKHVpbnQ2NF90IGNoYWxsZW5nZUlELCBjb25zdCBD
cmVkZW50aWFsJiBjcmVkZW50aWFsLCBjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRl
SW5mbykKIHsKLSAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSBjaGFsbGVuZ2UgPSBtX2NoYWxs
ZW5nZXMudGFrZShjaGFsbGVuZ2VJRCk7Ci0gICAgQVNTRVJUKCFjaGFsbGVuZ2UuaXNOdWxsKCkp
OwotICAgIAotICAgIGlmICh0cnlVc2VDZXJ0aWZpY2F0ZUluZm9Gb3JDaGFsbGVuZ2UoY2hhbGxl
bmdlLCBjZXJ0aWZpY2F0ZUluZm8pKQorICAgIGF1dG8gY2hhbGxlbmdlID0gbV9jaGFsbGVuZ2Vz
LnRha2UoY2hhbGxlbmdlSUQpOworICAgIEFTU0VSVCghY2hhbGxlbmdlLmNoYWxsZW5nZS5pc051
bGwoKSk7CisKKyAgICBpZiAodHJ5VXNlQ2VydGlmaWNhdGVJbmZvRm9yQ2hhbGxlbmdlKGNoYWxs
ZW5nZS5jaGFsbGVuZ2UsIGNlcnRpZmljYXRlSW5mbykpCiAgICAgICAgIHJldHVybjsKLSAgICAK
LSAgICBBdXRoZW50aWNhdGlvbkNsaWVudCogY29yZUNsaWVudCA9IGNoYWxsZW5nZS5hdXRoZW50
aWNhdGlvbkNsaWVudCgpOworCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICAvLyBJZiB0
aGVyZSBpcyBhIGNvbXBsZXRpb24gaGFuZGxlciwgdGhlbiB0aGVyZSBpcyBubyBBdXRoZW50aWNh
dGlvbkNsaWVudC4KKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSB1c2Ugb2YgQXV0aGVudGljYXRp
b25DbGllbnQgaW4gV2ViS2l0MiBvbmNlIE5FVFdPUktfU0VTU0lPTiBpcyB1c2VkIGZvciBhbGwg
bG9hZHMuCisgICAgaWYgKGNoYWxsZW5nZS5jb21wbGV0aW9uSGFuZGxlcikgeworICAgICAgICBj
aGFsbGVuZ2UuY29tcGxldGlvbkhhbmRsZXIoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3Np
dGlvbjo6VXNlQ3JlZGVudGlhbCwgY3JlZGVudGlhbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisjZW5kaWYKKworICAgIEF1dGhlbnRpY2F0aW9uQ2xpZW50KiBjb3JlQ2xpZW50ID0gY2hhbGxl
bmdlLmNoYWxsZW5nZS5hdXRoZW50aWNhdGlvbkNsaWVudCgpOwogICAgIGlmICghY29yZUNsaWVu
dCkgewogICAgICAgICAvLyBGSVhNRTogVGhlIGF1dGhlbnRpY2F0aW9uIGNsaWVudCBpcyBudWxs
IGZvciBkb3dubG9hZHMsIGJ1dCBpdCBjYW4gYWxzbyBiZSBudWxsIGZvciBjYW5jZWxlZCBsb2Fk
cy4KICAgICAgICAgLy8gV2Ugc2hvdWxkIG5vdCBjYWxsIERvd25sb2FkOjpyZWNlaXZlZENyZWRl
bnRpYWwgaW4gdGhlIGxhdHRlciBjYXNlLgotICAgICAgICBEb3dubG9hZDo6cmVjZWl2ZWRDcmVk
ZW50aWFsKGNoYWxsZW5nZSwgY3JlZGVudGlhbCk7CisgICAgICAgIERvd25sb2FkOjpyZWNlaXZl
ZENyZWRlbnRpYWwoY2hhbGxlbmdlLmNoYWxsZW5nZSwgY3JlZGVudGlhbCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBjb3JlQ2xpZW50LT5yZWNlaXZlZENyZWRlbnRpYWwoY2hhbGxl
bmdlLCBjcmVkZW50aWFsKTsKKyAgICBjb3JlQ2xpZW50LT5yZWNlaXZlZENyZWRlbnRpYWwoY2hh
bGxlbmdlLmNoYWxsZW5nZSwgY3JlZGVudGlhbCk7CiB9CiAKIHZvaWQgQXV0aGVudGljYXRpb25N
YW5hZ2VyOjpjb250aW51ZVdpdGhvdXRDcmVkZW50aWFsRm9yQ2hhbGxlbmdlKHVpbnQ2NF90IGNo
YWxsZW5nZUlEKQpAQCAtMTkyLDE3ICsyMjQsMjUgQEAgdm9pZCBBdXRoZW50aWNhdGlvbk1hbmFn
ZXI6OmNvbnRpbnVlV2l0aAogCiB2b2lkIEF1dGhlbnRpY2F0aW9uTWFuYWdlcjo6Y29udGludWVX
aXRob3V0Q3JlZGVudGlhbEZvclNpbmdsZUNoYWxsZW5nZSh1aW50NjRfdCBjaGFsbGVuZ2VJRCkK
IHsKLSAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSBjaGFsbGVuZ2UgPSBtX2NoYWxsZW5nZXMu
dGFrZShjaGFsbGVuZ2VJRCk7Ci0gICAgQVNTRVJUKCFjaGFsbGVuZ2UuaXNOdWxsKCkpOwotICAg
IEF1dGhlbnRpY2F0aW9uQ2xpZW50KiBjb3JlQ2xpZW50ID0gY2hhbGxlbmdlLmF1dGhlbnRpY2F0
aW9uQ2xpZW50KCk7CisgICAgYXV0byBjaGFsbGVuZ2UgPSBtX2NoYWxsZW5nZXMudGFrZShjaGFs
bGVuZ2VJRCk7CisgICAgQVNTRVJUKCFjaGFsbGVuZ2UuY2hhbGxlbmdlLmlzTnVsbCgpKTsKKwor
I2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisgICAgaWYgKGNoYWxsZW5nZS5jb21wbGV0aW9uSGFu
ZGxlcikgeworICAgICAgICBjaGFsbGVuZ2UuY29tcGxldGlvbkhhbmRsZXIoQXV0aGVudGljYXRp
b25DaGFsbGVuZ2VEaXNwb3NpdGlvbjo6VXNlQ3JlZGVudGlhbCwgQ3JlZGVudGlhbCgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgQXV0aGVudGljYXRpb25DbGllbnQq
IGNvcmVDbGllbnQgPSBjaGFsbGVuZ2UuY2hhbGxlbmdlLmF1dGhlbnRpY2F0aW9uQ2xpZW50KCk7
CiAgICAgaWYgKCFjb3JlQ2xpZW50KSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGUgYXV0aGVudGlj
YXRpb24gY2xpZW50IGlzIG51bGwgZm9yIGRvd25sb2FkcywgYnV0IGl0IGNhbiBhbHNvIGJlIG51
bGwgZm9yIGNhbmNlbGVkIGxvYWRzLgogICAgICAgICAvLyBXZSBzaG91bGQgbm90IGNhbGwgRG93
bmxvYWQ6OnJlY2VpdmVkQ3JlZGVudGlhbCBpbiB0aGUgbGF0dGVyIGNhc2UuCi0gICAgICAgIERv
d25sb2FkOjpyZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwoY2hhbGxl
bmdlKTsKKyAgICAgICAgRG93bmxvYWQ6OnJlY2VpdmVkUmVxdWVzdFRvQ29udGludWVXaXRob3V0
Q3JlZGVudGlhbChjaGFsbGVuZ2UuY2hhbGxlbmdlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGNvcmVDbGllbnQtPnJlY2VpdmVkUmVxdWVzdFRvQ29udGludWVXaXRob3V0Q3JlZGVu
dGlhbChjaGFsbGVuZ2UpOworICAgIGNvcmVDbGllbnQtPnJlY2VpdmVkUmVxdWVzdFRvQ29udGlu
dWVXaXRob3V0Q3JlZGVudGlhbChjaGFsbGVuZ2UuY2hhbGxlbmdlKTsKIH0KIAogdm9pZCBBdXRo
ZW50aWNhdGlvbk1hbmFnZXI6OmNhbmNlbENoYWxsZW5nZSh1aW50NjRfdCBjaGFsbGVuZ2VJRCkK
QEAgLTIxNSwxNyArMjU1LDI1IEBAIHZvaWQgQXV0aGVudGljYXRpb25NYW5hZ2VyOjpjYW5jZWxD
aGFsbGUKIAogdm9pZCBBdXRoZW50aWNhdGlvbk1hbmFnZXI6OmNhbmNlbFNpbmdsZUNoYWxsZW5n
ZSh1aW50NjRfdCBjaGFsbGVuZ2VJRCkKIHsKLSAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSBj
aGFsbGVuZ2UgPSBtX2NoYWxsZW5nZXMudGFrZShjaGFsbGVuZ2VJRCk7Ci0gICAgQVNTRVJUKCFj
aGFsbGVuZ2UuaXNOdWxsKCkpOwotICAgIEF1dGhlbnRpY2F0aW9uQ2xpZW50KiBjb3JlQ2xpZW50
ID0gY2hhbGxlbmdlLmF1dGhlbnRpY2F0aW9uQ2xpZW50KCk7CisgICAgYXV0byBjaGFsbGVuZ2Ug
PSBtX2NoYWxsZW5nZXMudGFrZShjaGFsbGVuZ2VJRCk7CisgICAgQVNTRVJUKCFjaGFsbGVuZ2Uu
Y2hhbGxlbmdlLmlzTnVsbCgpKTsKKworI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisgICAgaWYg
KGNoYWxsZW5nZS5jb21wbGV0aW9uSGFuZGxlcikgeworICAgICAgICBjaGFsbGVuZ2UuY29tcGxl
dGlvbkhhbmRsZXIoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbjo6Q2FuY2VsLCBD
cmVkZW50aWFsKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBBdXRo
ZW50aWNhdGlvbkNsaWVudCogY29yZUNsaWVudCA9IGNoYWxsZW5nZS5jaGFsbGVuZ2UuYXV0aGVu
dGljYXRpb25DbGllbnQoKTsKICAgICBpZiAoIWNvcmVDbGllbnQpIHsKICAgICAgICAgLy8gRklY
TUU6IFRoZSBhdXRoZW50aWNhdGlvbiBjbGllbnQgaXMgbnVsbCBmb3IgZG93bmxvYWRzLCBidXQg
aXQgY2FuIGFsc28gYmUgbnVsbCBmb3IgY2FuY2VsZWQgbG9hZHMuCiAgICAgICAgIC8vIFdlIHNo
b3VsZCBub3QgY2FsbCBEb3dubG9hZDo6cmVjZWl2ZWRDcmVkZW50aWFsIGluIHRoZSBsYXR0ZXIg
Y2FzZS4KLSAgICAgICAgRG93bmxvYWQ6OnJlY2VpdmVkQ2FuY2VsbGF0aW9uKGNoYWxsZW5nZSk7
CisgICAgICAgIERvd25sb2FkOjpyZWNlaXZlZENhbmNlbGxhdGlvbihjaGFsbGVuZ2UuY2hhbGxl
bmdlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNvcmVDbGllbnQtPnJlY2VpdmVk
Q2FuY2VsbGF0aW9uKGNoYWxsZW5nZSk7CisgICAgY29yZUNsaWVudC0+cmVjZWl2ZWRDYW5jZWxs
YXRpb24oY2hhbGxlbmdlLmNoYWxsZW5nZSk7CiB9CiAKIHZvaWQgQXV0aGVudGljYXRpb25NYW5h
Z2VyOjpwZXJmb3JtRGVmYXVsdEhhbmRsaW5nKHVpbnQ2NF90IGNoYWxsZW5nZUlEKQpAQCAtMjM4
LDE3ICsyODYsMjUgQEAgdm9pZCBBdXRoZW50aWNhdGlvbk1hbmFnZXI6OnBlcmZvcm1EZWZhdQog
CiB2b2lkIEF1dGhlbnRpY2F0aW9uTWFuYWdlcjo6cGVyZm9ybURlZmF1bHRIYW5kbGluZ0ZvclNp
bmdsZUNoYWxsZW5nZSh1aW50NjRfdCBjaGFsbGVuZ2VJRCkKIHsKLSAgICBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSBjaGFsbGVuZ2UgPSBtX2NoYWxsZW5nZXMudGFrZShjaGFsbGVuZ2VJRCk7Ci0g
ICAgQVNTRVJUKCFjaGFsbGVuZ2UuaXNOdWxsKCkpOwotICAgIEF1dGhlbnRpY2F0aW9uQ2xpZW50
KiBjb3JlQ2xpZW50ID0gY2hhbGxlbmdlLmF1dGhlbnRpY2F0aW9uQ2xpZW50KCk7CisgICAgYXV0
byBjaGFsbGVuZ2UgPSBtX2NoYWxsZW5nZXMudGFrZShjaGFsbGVuZ2VJRCk7CisgICAgQVNTRVJU
KCFjaGFsbGVuZ2UuY2hhbGxlbmdlLmlzTnVsbCgpKTsKKworI2lmIFVTRShORVRXT1JLX1NFU1NJ
T04pCisgICAgaWYgKGNoYWxsZW5nZS5jb21wbGV0aW9uSGFuZGxlcikgeworICAgICAgICBjaGFs
bGVuZ2UuY29tcGxldGlvbkhhbmRsZXIoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlv
bjo6UGVyZm9ybURlZmF1bHRIYW5kbGluZywgQ3JlZGVudGlhbCgpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyNlbmRpZgorCisgICAgQXV0aGVudGljYXRpb25DbGllbnQqIGNvcmVDbGllbnQg
PSBjaGFsbGVuZ2UuY2hhbGxlbmdlLmF1dGhlbnRpY2F0aW9uQ2xpZW50KCk7CiAgICAgaWYgKCFj
b3JlQ2xpZW50KSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGUgYXV0aGVudGljYXRpb24gY2xpZW50
IGlzIG51bGwgZm9yIGRvd25sb2FkcywgYnV0IGl0IGNhbiBhbHNvIGJlIG51bGwgZm9yIGNhbmNl
bGVkIGxvYWRzLgogICAgICAgICAvLyBXZSBzaG91bGQgbm90IGNhbGwgRG93bmxvYWQ6OnJlY2Vp
dmVkQ3JlZGVudGlhbCBpbiB0aGUgbGF0dGVyIGNhc2UuCi0gICAgICAgIERvd25sb2FkOjpyZWNl
aXZlZFJlcXVlc3RUb1BlcmZvcm1EZWZhdWx0SGFuZGxpbmcoY2hhbGxlbmdlKTsKKyAgICAgICAg
RG93bmxvYWQ6OnJlY2VpdmVkUmVxdWVzdFRvUGVyZm9ybURlZmF1bHRIYW5kbGluZyhjaGFsbGVu
Z2UuY2hhbGxlbmdlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNvcmVDbGllbnQt
PnJlY2VpdmVkUmVxdWVzdFRvUGVyZm9ybURlZmF1bHRIYW5kbGluZyhjaGFsbGVuZ2UpOworICAg
IGNvcmVDbGllbnQtPnJlY2VpdmVkUmVxdWVzdFRvUGVyZm9ybURlZmF1bHRIYW5kbGluZyhjaGFs
bGVuZ2UuY2hhbGxlbmdlKTsKIH0KIAogdm9pZCBBdXRoZW50aWNhdGlvbk1hbmFnZXI6OnJlamVj
dFByb3RlY3Rpb25TcGFjZUFuZENvbnRpbnVlKHVpbnQ2NF90IGNoYWxsZW5nZUlEKQpAQCAtMjYx
LDE3ICszMTcsMjUgQEAgdm9pZCBBdXRoZW50aWNhdGlvbk1hbmFnZXI6OnJlamVjdFByb3RlYwog
CiB2b2lkIEF1dGhlbnRpY2F0aW9uTWFuYWdlcjo6cmVqZWN0UHJvdGVjdGlvblNwYWNlQW5kQ29u
dGludWVGb3JTaW5nbGVDaGFsbGVuZ2UodWludDY0X3QgY2hhbGxlbmdlSUQpCiB7Ci0gICAgQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UgY2hhbGxlbmdlID0gbV9jaGFsbGVuZ2VzLnRha2UoY2hhbGxl
bmdlSUQpOwotICAgIEFTU0VSVCghY2hhbGxlbmdlLmlzTnVsbCgpKTsKLSAgICBBdXRoZW50aWNh
dGlvbkNsaWVudCogY29yZUNsaWVudCA9IGNoYWxsZW5nZS5hdXRoZW50aWNhdGlvbkNsaWVudCgp
OworICAgIGF1dG8gY2hhbGxlbmdlID0gbV9jaGFsbGVuZ2VzLnRha2UoY2hhbGxlbmdlSUQpOwor
ICAgIEFTU0VSVCghY2hhbGxlbmdlLmNoYWxsZW5nZS5pc051bGwoKSk7CisKKyNpZiBVU0UoTkVU
V09SS19TRVNTSU9OKQorICAgIGlmIChjaGFsbGVuZ2UuY29tcGxldGlvbkhhbmRsZXIpIHsKKyAg
ICAgICAgY2hhbGxlbmdlLmNvbXBsZXRpb25IYW5kbGVyKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
RGlzcG9zaXRpb246OlJlamVjdFByb3RlY3Rpb25TcGFjZSwgQ3JlZGVudGlhbCgpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgQXV0aGVudGljYXRpb25DbGllbnQqIGNv
cmVDbGllbnQgPSBjaGFsbGVuZ2UuY2hhbGxlbmdlLmF1dGhlbnRpY2F0aW9uQ2xpZW50KCk7CiAg
ICAgaWYgKCFjb3JlQ2xpZW50KSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGUgYXV0aGVudGljYXRp
b24gY2xpZW50IGlzIG51bGwgZm9yIGRvd25sb2FkcywgYnV0IGl0IGNhbiBhbHNvIGJlIG51bGwg
Zm9yIGNhbmNlbGVkIGxvYWRzLgogICAgICAgICAvLyBXZSBzaG91bGQgbm90IGNhbGwgRG93bmxv
YWQ6OnJlY2VpdmVkQ3JlZGVudGlhbCBpbiB0aGUgbGF0dGVyIGNhc2UuCi0gICAgICAgIERvd25s
b2FkOjpyZWNlaXZlZENoYWxsZW5nZVJlamVjdGlvbihjaGFsbGVuZ2UpOworICAgICAgICBEb3du
bG9hZDo6cmVjZWl2ZWRDaGFsbGVuZ2VSZWplY3Rpb24oY2hhbGxlbmdlLmNoYWxsZW5nZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjb3JlQ2xpZW50LT5yZWNlaXZlZENoYWxsZW5n
ZVJlamVjdGlvbihjaGFsbGVuZ2UpOworICAgIGNvcmVDbGllbnQtPnJlY2VpdmVkQ2hhbGxlbmdl
UmVqZWN0aW9uKGNoYWxsZW5nZS5jaGFsbGVuZ2UpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNh
dGlvbk1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQXV0aGVu
dGljYXRpb24vQXV0aGVudGljYXRpb25NYW5hZ2VyLmgJKHJldmlzaW9uIDE5MjE3MikKKysrIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbk1hbmFnZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiTWVzc2FnZVJl
Y2VpdmVyLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NTdXBwbGVtZW50LmgiCisjaW5jbHVk
ZSAiTmV0d29ya1Nlc3Npb24uaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzU3VwcGxlbWVudC5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaD4KICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgpAQCAtNTIsNiArNTMsMTAgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNv
bnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7CiAKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQor
ICAgIHR5cGVkZWYgc3RkOjpmdW5jdGlvbjx2b2lkKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlz
cG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmKT4gQ2hhbGxlbmdlQ29tcGxldGlv
bkhhbmRsZXI7CisgICAgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UodWlu
dDY0X3QgcGFnZUlELCB1aW50NjRfdCBmcmFtZUlELCBjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSYsIENoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyKTsKKyNlbmRpZgogICAg
IC8vIENhbGxlZCBmb3IgcmVzb3VyY2VzIGluIHRoZSBXZWJQcm9jZXNzIChOZXR3b3JrUHJvY2Vz
cyBkaXNhYmxlZCkKICAgICB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShX
ZWJGcmFtZSosIGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7CiAgICAg
Ly8gQ2FsbGVkIGZvciByZXNvdXJjZXMgaW4gdGhlIE5ldHdvcmtQcm9jZXNzIChOZXR3b3JrUHJv
Y2VzcyBlbmFibGVkKQpAQCAtNjgsMTIgKzczLDE5IEBAIHB1YmxpYzoKICAgICB1aW50NjRfdCBv
dXRzdGFuZGluZ0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQ291bnQoKSBjb25zdCB7IHJldHVybiBt
X2NoYWxsZW5nZXMuc2l6ZSgpOyB9CiAKIHByaXZhdGU6CisgICAgc3RydWN0IENoYWxsZW5nZSB7
CisgICAgICAgIFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIGNoYWxsZW5nZTsKKyNp
ZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAgICAgICBDaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxl
ciBjb21wbGV0aW9uSGFuZGxlcjsKKyNlbmRpZgorICAgIH07CisgICAgCiAgICAgLy8gSVBDOjpN
ZXNzYWdlUmVjZWl2ZXIKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiwgSVBDOjpNZXNzYWdlRGVjb2RlciYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCB0
cnlVc2VDZXJ0aWZpY2F0ZUluZm9Gb3JDaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmLCBjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKTsKIAotICAg
IHVpbnQ2NF90IGFkZENoYWxsZW5nZVRvQ2hhbGxlbmdlTWFwKGNvbnN0IFdlYkNvcmU6OkF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlJik7CisgICAgdWludDY0X3QgYWRkQ2hhbGxlbmdlVG9DaGFsbGVu
Z2VNYXAoY29uc3QgQ2hhbGxlbmdlJik7CiAgICAgYm9vbCBzaG91bGRDb2FsZXNjZUNoYWxsZW5n
ZSh1aW50NjRfdCBjaGFsbGVuZ2VJRCwgY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFs
bGVuZ2UmKSBjb25zdDsKIAogICAgIHZvaWQgdXNlQ3JlZGVudGlhbEZvclNpbmdsZUNoYWxsZW5n
ZSh1aW50NjRfdCBjaGFsbGVuZ2VJRCwgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYsIGNvbnN0
IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpOwpAQCAtODYsOCArOTgsNyBAQCBwcml2YXRlOgog
CiAgICAgQ2hpbGRQcm9jZXNzKiBtX3Byb2Nlc3M7CiAKLSAgICB0eXBlZGVmIEhhc2hNYXA8dWlu
dDY0X3QsIFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlPiBBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZU1hcDsKLSAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZU1hcCBtX2NoYWxsZW5nZXM7
CisgICAgSGFzaE1hcDx1aW50NjRfdCwgQ2hhbGxlbmdlPiBtX2NoYWxsZW5nZXM7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9h
ZHMvRG93bmxvYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3du
bG9hZHMvRG93bmxvYWQuY3BwCShyZXZpc2lvbiAxOTIxNzIpCisrKyBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5
LDE1IEBACiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25NYW5hZ2VyLmgiCiAjaW5jbHVkZSAiQ29u
bmVjdGlvbi5oIgogI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKLSNpbmNsdWRlICJEb3dubG9h
ZEF1dGhlbnRpY2F0aW9uQ2xpZW50LmgiCiAjaW5jbHVkZSAiRG93bmxvYWRQcm94eU1lc3NhZ2Vz
LmgiCiAjaW5jbHVkZSAiRG93bmxvYWRNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiU2FuZGJveEV4dGVu
c2lvbi5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKworI2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQorI2lu
Y2x1ZGUgIkRvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQuaCIKKyNlbmRpZgogCiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNjMsNyArNjcsMTEgQEAgdm9pZCBEb3dubG9hZDo6ZGlk
U3RhcnQoKQogCiB2b2lkIERvd25sb2FkOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KQogeworI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyNl
bHNlCiAgICAgbV9kb3dubG9hZE1hbmFnZXIuZG93bmxvYWRzQXV0aGVudGljYXRpb25NYW5hZ2Vy
KCkuZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKHRoaXMsIGF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKTsKKyNlbmRpZgogfQogCiB2b2lkIERvd25sb2FkOjpkaWRSZWNlaXZlUmVzcG9u
c2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvRG93bmxvYWRBdXRoZW50
aWNhdGlvbkNsaWVudC5jcHAJKHJldmlzaW9uIDE5MjE3MikKKysrIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9Eb3dubG9hZHMvRG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJE
b3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50LmgiCiAKKyNpZiAhVVNFKE5FVFdPUktfU0VTU0lP
TikKKwogI2luY2x1ZGUgIkRvd25sb2FkLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpA
QCAtNjQsMyArNjYsNSBAQCB2b2lkIERvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQ6OnJlY2Vp
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9Eb3dubG9hZHMvRG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvRG93bmxvYWRBdXRoZW50
aWNhdGlvbkNsaWVudC5oCShyZXZpc2lvbiAxOTIxNzIpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvRG93bmxvYWRzL0Rvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMjYsNiArMjYsOCBAQAogI2lmbmRlZiBEb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50
X2gKICNkZWZpbmUgRG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudF9oCiAKKyNpZiAhVVNFKE5F
VFdPUktfU0VTU0lPTikKKwogI2luY2x1ZGUgPFdlYkNvcmUvQXV0aGVudGljYXRpb25DbGllbnQu
aD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CkBAIC02NSw0ICs2Nyw2IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAog
CisjZW5kaWYgLy8gIVVTRShORVRXT1JLX1NFU1NJT04pCisKICNlbmRpZiAvLyBEb3dubG9hZEF1
dGhlbnRpY2F0aW9uQ2xpZW50X2gK
</data>
<flag name="review"
          id="290315"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>