<?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>157570</bug_id>
          
          <creation_ts>2016-05-11 10:07:50 -0700</creation_ts>
          <short_desc>Use SecTask SPI to retrieve code signing identifier for user directory suffix</short_desc>
          <delta_ts>2016-05-12 23:51:49 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>WebKit Local Build</version>
          <rep_platform>Mac</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Bates">dbates</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>aestes</cc>
    
    <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>benjamin</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>mitz</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1191964</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-05-11 10:07:50 -0700</bug_when>
    <thetext>It is sufficient to make use of the SecTask SPI to retrieve the code signing identifier of the embedding client for use in the user directory suffix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191965</commentid>
    <comment_count>1</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-05-11 10:08:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/25706517&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191975</commentid>
    <comment_count>2</comment_count>
      <attachid>278635</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-05-11 10:44:51 -0700</bug_when>
    <thetext>Created attachment 278635
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1192055</commentid>
    <comment_count>3</comment_count>
      <attachid>278655</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-05-11 13:25:19 -0700</bug_when>
    <thetext>Created attachment 278655
Patch

Fix typo; substitute 101200 for 12000 as the minimum OS X verson required. I also chose to have codeSigningIdentifier*() return an empty string when targeting OS X &lt; 10.12 to avoid allocating and deallocating a SecTask for the purposes of returning an empty string in secTaskCodeSigningIdentifier().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1192064</commentid>
    <comment_count>4</comment_count>
      <attachid>278659</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-05-11 13:33:12 -0700</bug_when>
    <thetext>Created attachment 278659
Patch

Update comment in file Shared/mac/CodeSigning.h to reflect that codeSigningIdentifier*() no longer differentiates between a Apple/Mac App Store/Apple Developer-signed app and an app signed by a third-party.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1192080</commentid>
    <comment_count>5</comment_count>
      <attachid>278665</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-05-11 13:56:36 -0700</bug_when>
    <thetext>Created attachment 278665
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1192351</commentid>
    <comment_count>6</comment_count>
      <attachid>278665</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-12 09:14:25 -0700</bug_when>
    <thetext>Comment on attachment 278665
Patch

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

Seems OK. Do you have a good plan for testing this?

I had a couple small comments about function naming, but they are optional refinements.

&gt; Source/WebKit2/Shared/mac/ChildProcessMac.mm:94
&gt; +            String defaultUserDirectorySuffix = makeString(String([[NSBundle mainBundle] bundleIdentifier]), &apos;+&apos;, clientIdentifier);

At some point, someone should take a little time and change makeString so it can take an NSString * as one of the things to append, without copying the NSString into a String first. Would make code like this more efficient, but we’d have to come and remove the explicit conversion to String.

&gt; Source/WebKit2/Shared/mac/CodeSigning.h:34
&gt;  String codeSigningIdentifier();

Ironically, this is the one function that I think needs a different name. The name doesn’t state which code signing identifier it returns, just that it returns one. I think that the name should somehow indicate that it’s the code signing identifier of the current process.

&gt; Source/WebKit2/Shared/mac/CodeSigning.h:35
&gt; +String codeSigningIdentifierFromXPCConnection(xpc_connection_t);

I think that this could just be named codeSigningIdentifier. If we did want a longer name, I think the name should express that it’s the identifier of the process on the other end of the connection. Spelling out the type name &quot;XPCConnection&quot; in the name of the function isn’t all that useful since this is C++ and type overloading usually handles such things fine. However, making explicit that this returns the identifier of the process we are connected to might be valuable.

&gt; Source/WebKit2/Shared/mac/CodeSigning.mm:38
&gt; +static String secTaskCodeSigningIdentifier(SecTaskRef task)

This function should almost certainly be named just codeSigningIdentifier. It’s not at all ambiguous which one it is, and I don’t see a reason to include the name of the type, SecTask, in the function’s name.

&gt; Source/WebKit2/Shared/mac/CodeSigning.mm:40
&gt; +    RELEASE_ASSERT(task);

Why this RELEASE_ASSERT? What are we protecting against? I am pretty sure that SecTaskCopySigningIdentifier will crash quickly if passed null, so I don’t think it’s critical for us to cause a crash slightly earlier, but maybe you have some further insight into why a null check is important and helpful.

&gt; Source/WebKit2/Shared/mac/CodeSigning.mm:61
&gt; +    return { };

I suspect we will get an unused parameter warning here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1192384</commentid>
    <comment_count>7</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-05-12 11:25:20 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Do you have a good plan for testing this?
&gt; 

I tested this patch in a debug-built WebKit and an unsigned, ad-hoc code signed, and Mac Developer ID- signed MiniBrowser and WebKitTestRunner. I also tested with system Safari, and an app similar to Safari Technology Preview (a bundle that contains both Safari and WebKit).

&gt; I had a couple small comments about function naming, but they are optional
&gt; refinements.
&gt; 
&gt; &gt; Source/WebKit2/Shared/mac/ChildProcessMac.mm:94
&gt; &gt; +            String defaultUserDirectorySuffix = makeString(String([[NSBundle mainBundle] bundleIdentifier]), &apos;+&apos;, clientIdentifier);
&gt; 
&gt; At some point, someone should take a little time and change makeString so it
&gt; can take an NSString * as one of the things to append, without copying the
&gt; NSString into a String first. Would make code like this more efficient, but
&gt; we’d have to come and remove the explicit conversion to String.
&gt; 

We should do this. I hope you do not mind that I defer this for now.

&gt; &gt; Source/WebKit2/Shared/mac/CodeSigning.h:34
&gt; &gt;  String codeSigningIdentifier();
&gt; 
&gt; Ironically, this is the one function that I think needs a different name.
&gt; The name doesn’t state which code signing identifier it returns, just that
&gt; it returns one. I think that the name should somehow indicate that it’s the
&gt; code signing identifier of the current process.
&gt; 

How about codeSigningIdentifierForSelf()? Or codeSigningIdentifierForCurrentProcess()?

&gt; &gt; Source/WebKit2/Shared/mac/CodeSigning.h:35
&gt; &gt; +String codeSigningIdentifierFromXPCConnection(xpc_connection_t);
&gt; 
&gt; I think that this could just be named codeSigningIdentifier. If we did want
&gt; a longer name, I think the name should express that it’s the identifier of
&gt; the process on the other end of the connection. Spelling out the type name
&gt; &quot;XPCConnection&quot; in the name of the function isn’t all that useful since this
&gt; is C++ and type overloading usually handles such things fine. However,
&gt; making explicit that this returns the identifier of the process we are
&gt; connected to might be valuable.
&gt; 
&gt; &gt; Source/WebKit2/Shared/mac/CodeSigning.mm:38
&gt; &gt; +static String secTaskCodeSigningIdentifier(SecTaskRef task)
&gt; 
&gt; This function should almost certainly be named just codeSigningIdentifier.
&gt; It’s not at all ambiguous which one it is, and I don’t see a reason to
&gt; include the name of the type, SecTask, in the function’s name.
&gt; 

Will rename this function codeSigningIdentifier.

&gt; &gt; Source/WebKit2/Shared/mac/CodeSigning.mm:40
&gt; &gt; +    RELEASE_ASSERT(task);
&gt; 
&gt; Why this RELEASE_ASSERT? What are we protecting against? I am pretty sure
&gt; that SecTaskCopySigningIdentifier will crash quickly if passed null, so I
&gt; don’t think it’s critical for us to cause a crash slightly earlier, but
&gt; maybe you have some further insight into why a null check is important and
&gt; helpful.
&gt; 

The RELEASE_ASSERT is unnecessary as SecTaskCopySigningIdentifier() will crash quickly. Will remove RELEASE_ASSERT.

&gt; &gt; Source/WebKit2/Shared/mac/CodeSigning.mm:61
&gt; &gt; +    return { };
&gt; 
&gt; I suspect we will get an unused parameter warning here.

As you can from the EWS results there was no warning about the unused parameter in this function because for WebKit2 we pass compiler flag -Wno-unused-parameter to disable warnings about unused parameters (why?): &lt;http://trac.webkit.org/browser/trunk/Source/WebKit2/Configurations/Base.xcconfig?rev=+198481#L74&gt;. For completeness, we also disable warnings about unused parameters when building DumpRenderTree, MiniBrowser, TestWebKitAPI, WebInspectorUI, WebKit, and WebKitTestRunner.

I will add UNUSED_PARAM(connection) when building with __MAC_OS_X_VERSION_MIN_REQUIRED &lt; 101200. We should consider building all projects with warnings for unused parameters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1192400</commentid>
    <comment_count>8</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-05-12 12:00:29 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; &gt; Source/WebKit2/Shared/mac/CodeSigning.h:34
&gt; &gt; &gt;  String codeSigningIdentifier();
&gt; &gt; 
&gt; &gt; Ironically, this is the one function that I think needs a different name.
&gt; &gt; The name doesn’t state which code signing identifier it returns, just that
&gt; &gt; it returns one. I think that the name should somehow indicate that it’s the
&gt; &gt; code signing identifier of the current process.
&gt; &gt; 
&gt; 
&gt; How about codeSigningIdentifierForSelf()? Or
&gt; codeSigningIdentifierForCurrentProcess()?
&gt; 

For now, I am going to go with codeSigningIdentifierForCurrentProcess() since I want to land this patch now to mitigate &lt;rdar://problem/26246124&gt;. I am happy to rename this function if you have a better name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1192407</commentid>
    <comment_count>9</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-05-12 12:14:02 -0700</bug_when>
    <thetext>Committed r200785: &lt;http://trac.webkit.org/changeset/200785&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1192674</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-12 23:51:49 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; How about codeSigningIdentifierForSelf()? Or
&gt; codeSigningIdentifierForCurrentProcess()?

I like codeSigningIdentifierForCurrentProcess and I am glad you went with it.

&gt; for WebKit2 we pass compiler flag
&gt; -Wno-unused-parameter to disable warnings about unused parameters (why?)

I think it’s because WebKit2 contains Objective-C code, and for Objective-C it is very onerous to deal with unused parameter warnings since you can’t just omit the names of arguments in Objective-C methods.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278635</attachid>
            <date>2016-05-11 10:44:51 -0700</date>
            <delta_ts>2016-05-11 13:25:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157570-20160511104540.patch</filename>
            <type>text/plain</type>
            <size>11779</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAwNjQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDhmYWUzYmU2NTc1YmQwYmE2MWQxMjA5
OGZmM2M1MzRlYzIzZWZkMzIuLmE1MDU3ZmI4ZTJjN2ZhMzc4ZWVlY2QxZmQzZmY0ZDQ0NGZiM2E1
MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTYtMDUtMTEgIERhbmllbCBCYXRlcyAgPGRhYmF0
ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBTZWNUYXNrIFNQSSB0byByZXRyaWV2ZSBjb2Rl
IHNpZ25pbmcgaWRlbnRpZmllciBmb3IgdXNlciBkaXJlY3Rvcnkgc3VmZml4CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc1NzAKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzI1NzA2NTE3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEZvcndhcmQgZGVjbGFyZSBTUEkgU2VjVGFza0NvcHlTaWduaW5nSWRl
bnRpZmllcigpLgorCisgICAgICAgICogd3RmL3NwaS9jb2NvYS9TZWN1cml0eVNQSS5oOgorCiAy
MDE2LTA1LTEwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgR2V0
IHJpZCBvZiBhIGxvdCBvZiBjYWxscyB0byBSZWZQdHI6OnJlbGVhc2UoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4
IDkwZmFiMGYwN2RlYTFjOGM4ZjYwZGMyMjA3YmNiZDFjNWRjNzkwNDguLmQ4ODc2MGQ5NjI1ZmEz
ZDliMmM3ODdjOGJkMGZhY2ZiOTEyMThlNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBAQAor
MjAxNi0wNS0xMSAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CisKKyAgICAgICAg
VXNlIFNlY1Rhc2sgU1BJIHRvIHJldHJpZXZlIGNvZGUgc2lnbmluZyBpZGVudGlmaWVyIGZvciB1
c2VyIGRpcmVjdG9yeSBzdWZmaXgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1NzU3MAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjU3MDY1MTc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSXQgaXMgc3Vm
ZmljaWVudCB0byBtYWtlIHVzZSBvZiB0aGUgU2VjVGFzayBTUEkgdG8gcmV0cmlldmUgdGhlIGNv
ZGUgc2lnbmluZworICAgICAgICBpZGVudGlmaWVyIG9mIHRoZSBlbWJlZGRpbmcgY2xpZW50IGZv
ciB1c2UgaW4gdGhlIHVzZXIgZGlyZWN0b3J5IHN1ZmZpeC4gVGhpcworICAgICAgICBhdm9pZHMg
dGhlIG5lZWQgdG8gYWxsb3cgQ29kZSBTaWduaW5nIFNlcnZpY2VzIHRvIGhhdmUgYWNjZXNzIHRv
IHRoZSBidW5kbGUKKyAgICAgICAgb2YgdGhlIGVtYmVkZGluZyBjbGllbnQuCisKKyAgICAgICAg
KiBTaGFyZWQvbWFjL0NoaWxkUHJvY2Vzc01hYy5tbToKKyAgICAgICAgKFdlYktpdDo6Q2hpbGRQ
cm9jZXNzOjppbml0aWFsaXplU2FuZGJveCk6IFVzZSB0aGUgY29kZSBzaWduaW5nIGlkZW50aWZp
ZXIgb2YgdGhlCisgICAgICAgIGVtYmVkZGluZyBjbGllbnQgYXMgcGFydCBvZiB0aGUgdXNlciBk
aXJlY3Rvcnkgc3VmZml4IGlmIGF2YWlsYWJsZS4KKyAgICAgICAgKiBTaGFyZWQvbWFjL0NvZGVT
aWduaW5nLmg6CisgICAgICAgICogU2hhcmVkL21hYy9Db2RlU2lnbmluZy5tbToKKyAgICAgICAg
KFdlYktpdDo6c2VjVGFza0NvZGVTaWduaW5nSWRlbnRpZmllcik6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0Ojpjb2RlU2lnbmluZ0lkZW50aWZpZXIpOiBXcm90ZSBpbiB0ZXJtcyBvZiBzZWNUYXNr
Q29kZVNpZ25pbmdJZGVudGlmaWVyKCkgYW5kCisgICAgICAgIFNlY1Rhc2sgU1BJLgorICAgICAg
ICAoV2ViS2l0Ojpjb2RlU2lnbmluZ0lkZW50aWZpZXJGcm9tWFBDQ29ubmVjdGlvbik6IEFkZGVk
LiBVc2VzIHRoZSBhdWRpdCB0b2tlbiBhc3NvY2lhdGVkCisgICAgICAgIHdpdGggdGhlIHNwZWNp
ZmllZCBYUEMgY29ubmVjdGlvbiB0byBnZXQgdGhlIGNvZGUgc2lnbmluZyBpZGVudGlmaWVyIGZv
ciB0aGUgZW1iZWRkaW5nCisgICAgICAgIGNsaWVudC4KKyAgICAgICAgKFdlYktpdDo6c2VjQ29k
ZUZvckN1cnJlbnRQcm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6c2VjQ29kZUZv
clByb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpzZWNDb2RlU2lnbmluZ0luZm9y
bWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6YXBwbGVTaWduZWRPck1hY0FwcFN0
b3JlU2lnbmVkT3JBcHBsZURldmVsb3BlclNpZ25lZFJlcXVpcmVtZW50KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6c2VjQ29kZVNpZ25pbmdJZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6Y29kZVNpZ25pbmdJZGVudGlmaWVyRm9yUHJvY2Vzcyk6IERlbGV0ZWQuCisK
IDIwMTYtMDUtMTAgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBGaXggdGhlICFFTkFCTEUoVklERU8pIGJ1aWxkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9zcGkvY29jb2EvU2VjdXJpdHlTUEkuaCBiL1NvdXJjZS9XVEYvd3RmL3NwaS9jb2NvYS9T
ZWN1cml0eVNQSS5oCmluZGV4IDMxMTY3NjZkYWVlM2M4ZDM0OWY2ODEzNjAwMzM2OGUzZTgwZmM2
ZTQuLjA5MGUxNDIyMWVmNGIzMWFlYjc2YjZkYzFhZTJlMzE3N2ZmZDQyOWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL3NwaS9jb2NvYS9TZWN1cml0eVNQSS5oCisrKyBiL1NvdXJjZS9XVEYv
d3RmL3NwaS9jb2NvYS9TZWN1cml0eVNQSS5oCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRl
IDxTZWN1cml0eS9TZWNDZXJ0aWZpY2F0ZVByaXYuaD4KICNpbmNsdWRlIDxTZWN1cml0eS9TZWNU
YXNrLmg+CisjaW5jbHVkZSA8U2VjdXJpdHkvU2VjVGFza1ByaXYuaD4KICNpbmNsdWRlIDxTZWN1
cml0eS9TZWNUcnVzdFByaXYuaD4KIAogI2Vsc2UKQEAgLTU4LDYgKzU5LDEwIEBAIEVYVEVSTl9D
IFNlY1Rhc2tSZWYgU2VjVGFza0NyZWF0ZVdpdGhBdWRpdFRva2VuKENGQWxsb2NhdG9yUmVmLCBh
dWRpdF90b2tlbl90KTsKIEVYVEVSTl9DIFNlY1Rhc2tSZWYgU2VjVGFza0NyZWF0ZUZyb21TZWxm
KENGQWxsb2NhdG9yUmVmKTsKIEVYVEVSTl9DIENGVHlwZVJlZiBTZWNUYXNrQ29weVZhbHVlRm9y
RW50aXRsZW1lbnQoU2VjVGFza1JlZiwgQ0ZTdHJpbmdSZWYgZW50aXRsZW1lbnQsIENGRXJyb3JS
ZWYgKik7CiAKKyNpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVR
VUlSRUQgPj0gMTAxMjAwCitFWFRFUk5fQyBDRlN0cmluZ1JlZiBTZWNUYXNrQ29weVNpZ25pbmdJ
ZGVudGlmaWVyKFNlY1Rhc2tSZWYsIENGRXJyb3JSZWYgKik7CisjZW5kaWYKKwogI2lmIEhBVkUo
U0VDX1RSVVNUX1NFUklBTElaQVRJT04pCiBFWFRFUk5fQyBDRl9SRVRVUk5TX1JFVEFJTkVEIENG
RGF0YVJlZiBTZWNUcnVzdFNlcmlhbGl6ZShTZWNUcnVzdFJlZiwgQ0ZFcnJvclJlZiAqKTsKIEVY
VEVSTl9DIENGX1JFVFVSTlNfUkVUQUlORUQgU2VjVHJ1c3RSZWYgU2VjVHJ1c3REZXNlcmlhbGl6
ZShDRkRhdGFSZWYgc2VyaWFsaXplZFRydXN0LCBDRkVycm9yUmVmICopOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9DaGlsZFByb2Nlc3NNYWMubW0gYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvbWFjL0NoaWxkUHJvY2Vzc01hYy5tbQppbmRleCA4ZTZjZmExMzMzMGIwNjk4
MmQyMGQ1ZWEzZTI4ODA4MmY5Njg5YjdhLi5hYmFlYmUzMjc1ZTI2YmFlYzc4MWY0ZDNjNjA4Mzc2
NDdjMjJkM2M4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0NoaWxkUHJv
Y2Vzc01hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0NoaWxkUHJvY2Vzc01h
Yy5tbQpAQCAtODMsMTQgKzgzLDE1IEBAIHZvaWQgQ2hpbGRQcm9jZXNzOjppbml0aWFsaXplU2Fu
ZGJveChjb25zdCBDaGlsZFByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmCiAgICAgTlNC
dW5kbGUgKndlYmtpdDJCdW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6TlNDbGFzc0Zy
b21TdHJpbmcoQCJXS1ZpZXciKV07CiAgICAgU3RyaW5nIGRlZmF1bHRQcm9maWxlUGF0aCA9IFt3
ZWJraXQyQnVuZGxlIHBhdGhGb3JSZXNvdXJjZTpbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRs
ZUlkZW50aWZpZXJdIG9mVHlwZTpAInNiIl07CiAKLSAgICBib29sIHdpbGxVc2VVc2VyRGlyZWN0
b3J5U3VmZml4SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXIgPSBmYWxzZTsKICAgICBpZiAoc2FuZGJv
eFBhcmFtZXRlcnMudXNlckRpcmVjdG9yeVN1ZmZpeCgpLmlzTnVsbCgpKSB7CiAgICAgICAgIGF1
dG8gdXNlckRpcmVjdG9yeVN1ZmZpeCA9IHBhcmFtZXRlcnMuZXh0cmFJbml0aWFsaXphdGlvbkRh
dGEuZmluZCgidXNlci1kaXJlY3Rvcnktc3VmZml4Iik7Ci0gICAgICAgIGlmICh1c2VyRGlyZWN0
b3J5U3VmZml4ICE9IHBhcmFtZXRlcnMuZXh0cmFJbml0aWFsaXphdGlvbkRhdGEuZW5kKCkpIHsK
LSAgICAgICAgICAgIHdpbGxVc2VVc2VyRGlyZWN0b3J5U3VmZml4SW5pdGlhbGl6YXRpb25QYXJh
bWV0ZXIgPSB0cnVlOworICAgICAgICBpZiAodXNlckRpcmVjdG9yeVN1ZmZpeCAhPSBwYXJhbWV0
ZXJzLmV4dHJhSW5pdGlhbGl6YXRpb25EYXRhLmVuZCgpKQogICAgICAgICAgICAgc2FuZGJveFBh
cmFtZXRlcnMuc2V0VXNlckRpcmVjdG9yeVN1ZmZpeChbbWFrZVN0cmluZyh1c2VyRGlyZWN0b3J5
U3VmZml4LT52YWx1ZSwgJy8nLCBTdHJpbmcoW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJ
ZGVudGlmaWVyXSkpIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbl0pOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgU3RyaW5nIGRlZmF1bHRVc2VyRGlyZWN0b3J5U3VmZml4ID0gbWFrZVN0
cmluZyhTdHJpbmcoW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSksICcr
JywgcGFyYW1ldGVycy5jbGllbnRJZGVudGlmaWVyKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBTdHJpbmcgY2xpZW50SWRlbnRpZmllciA9IGNvZGVTaWduaW5nSWRlbnRpZmllckZyb21Y
UENDb25uZWN0aW9uKHBhcmFtZXRlcnMuY29ubmVjdGlvbklkZW50aWZpZXIueHBjQ29ubmVjdGlv
bi5nZXQoKSk7CisgICAgICAgICAgICBpZiAoY2xpZW50SWRlbnRpZmllci5pc051bGwoKSkKKyAg
ICAgICAgICAgICAgICBjbGllbnRJZGVudGlmaWVyID0gcGFyYW1ldGVycy5jbGllbnRJZGVudGlm
aWVyOworICAgICAgICAgICAgU3RyaW5nIGRlZmF1bHRVc2VyRGlyZWN0b3J5U3VmZml4ID0gbWFr
ZVN0cmluZyhTdHJpbmcoW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSks
ICcrJywgY2xpZW50SWRlbnRpZmllcik7CiAgICAgICAgICAgICBzYW5kYm94UGFyYW1ldGVycy5z
ZXRVc2VyRGlyZWN0b3J5U3VmZml4KGRlZmF1bHRVc2VyRGlyZWN0b3J5U3VmZml4KTsKICAgICAg
ICAgfQogICAgIH0KQEAgLTE3NCwxNSArMTc1LDYgQEAgdm9pZCBDaGlsZFByb2Nlc3M6OmluaXRp
YWxpemVTYW5kYm94KGNvbnN0IENoaWxkUHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYK
ICAgICAgICAgV1RGTG9nQWx3YXlzKCIlczogQ291bGRuJ3QgZW5hYmxlIHNhbmRib3ggc3R5bGUg
ZmlsZSBxdWFyYW50aW5lOiAlbGRcbiIsIGdldHByb2duYW1lKCksIHN0YXRpY19jYXN0PGxvbmc+
KGVycm9yKSk7CiAgICAgICAgIGV4aXQoRVhfTk9QRVJNKTsKICAgICB9Ci0KLSAgICBpZiAod2ls
bFVzZVVzZXJEaXJlY3RvcnlTdWZmaXhJbml0aWFsaXphdGlvblBhcmFtZXRlcikKLSAgICAgICAg
cmV0dXJuOwotICAgIFN0cmluZyBjbGllbnRDb2RlU2lnbmluZ0lkZW50aWZpZXIgPSBjb2RlU2ln
bmluZ0lkZW50aWZpZXJGb3JQcm9jZXNzKHhwY19jb25uZWN0aW9uX2dldF9waWQocGFyYW1ldGVy
cy5jb25uZWN0aW9uSWRlbnRpZmllci54cGNDb25uZWN0aW9uLmdldCgpKSk7Ci0gICAgYm9vbCBp
c0NsaWVudENvZGVTaWduZWQgPSAhY2xpZW50Q29kZVNpZ25pbmdJZGVudGlmaWVyLmlzTnVsbCgp
OwotICAgIGlmIChpc0NsaWVudENvZGVTaWduZWQgJiYgY2xpZW50Q29kZVNpZ25pbmdJZGVudGlm
aWVyICE9IHBhcmFtZXRlcnMuY2xpZW50SWRlbnRpZmllcikgewotICAgICAgICBXVEZMb2dBbHdh
eXMoIiVzOiBDb2RlIHNpZ25pbmcgaWRlbnRpZmllciBvZiBjbGllbnQgZGlmZmVycyBmcm9tIHBh
c3NlZCBjbGllbnQgaWRlbnRpZmllci5cbiIsIGdldHByb2duYW1lKCkpOwotICAgICAgICBleGl0
KEVYX05PUEVSTSk7Ci0gICAgfQogfQogCiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFV
SVJFRCA+PSAxMDExMDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQ29k
ZVNpZ25pbmcuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQ29kZVNpZ25pbmcuaAppbmRl
eCBlMzFkY2RlMWEyODY0NDJlODAwMTM2ODUzM2EzZTFkZWVmMzIzNzYzLi5iOGM1ZTU3ODRkMDBh
MmViNjE4Njk1OWQ0OGJlNTZjZTAyYzBmMzg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvbWFjL0NvZGVTaWduaW5nLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9D
b2RlU2lnbmluZy5oCkBAIC0zMSw2ICszMSw2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiAvLyBU
aGVzZSBmdW5jdGlvbnMgcmV0dXJuIGEgbnVsbCBzdHJpbmcgaWYgdGhlIHByb2Nlc3MgaXMgZWl0
aGVyIHVuc2lnbmVkIG9yIHNpZ25lZCBieSBhIHRoaXJkLXBhcnR5LgogU3RyaW5nIGNvZGVTaWdu
aW5nSWRlbnRpZmllcigpOwotU3RyaW5nIGNvZGVTaWduaW5nSWRlbnRpZmllckZvclByb2Nlc3Mo
cGlkX3QpOworU3RyaW5nIGNvZGVTaWduaW5nSWRlbnRpZmllckZyb21YUENDb25uZWN0aW9uKHhw
Y19jb25uZWN0aW9uX3QpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQ29kZVNpZ25pbmcubW0gYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvbWFjL0NvZGVTaWduaW5nLm1tCmluZGV4IDM2NmNjZjFlZmIxNWU3NzM2NDNkZjYxMWRh
OGNiYmMyYzRkZGYzOTguLmViNDg1NTAxN2E2YWE2ZGMwMTgzMDEyMTlhODRhMDI4YTYyNzBlNGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQ29kZVNpZ25pbmcubW0KKysr
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Db2RlU2lnbmluZy5tbQpAQCAtMjgsODEgKzI4
LDM1IEBACiAKICNpZiBQTEFURk9STShNQUMpCiAKLSNpbmNsdWRlIDxTZWN1cml0eS9TZWN1cml0
eS5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvY2YvVHlwZUNh
c3RzQ0YuaD4KKyNpbmNsdWRlIDx3dGYvc3BpL2NvY29hL1NlY3VyaXR5U1BJLmg+CisjaW5jbHVk
ZSA8d3RmL3NwaS9kYXJ3aW4vWFBDU1BJLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1zdGF0aWMgUmV0YWluUHRyPFNlY0NvZGVSZWY+
IHNlY0NvZGVGb3JDdXJyZW50UHJvY2VzcygpCitzdGF0aWMgU3RyaW5nIHNlY1Rhc2tDb2RlU2ln
bmluZ0lkZW50aWZpZXIoU2VjVGFza1JlZiB0YXNrKQogewotICAgIFNlY0NvZGVSZWYgY29kZSA9
IG51bGxwdHI7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIVNlY0NvZGVDb3B5U2VsZihrU2VjQ1NEZWZh
dWx0RmxhZ3MsICZjb2RlKSk7Ci0gICAgcmV0dXJuIGFkb3B0Q0YoY29kZSk7Ci19Ci0KLXN0YXRp
YyBSZXRhaW5QdHI8U2VjQ29kZVJlZj4gc2VjQ29kZUZvclByb2Nlc3MocGlkX3QgcGlkKQotewot
ICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gcGlkQ0ZOdW1iZXIgPSBhZG9wdENGKENGTnVtYmVy
Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZwaWQpKTsKLSAg
ICBjb25zdCB2b2lkKiBrZXlzW10gPSB7IGtTZWNHdWVzdEF0dHJpYnV0ZVBpZCB9OwotICAgIGNv
bnN0IHZvaWQqIHZhbHVlc1tdID0geyBwaWRDRk51bWJlci5nZXQoKSB9OwotICAgIFJldGFpblB0
cjxDRkRpY3Rpb25hcnlSZWY+IGF0dHJpYnV0ZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0
ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrZXlzLCB2YWx1ZXMsIFdURl9BUlJBWV9MRU5HVEgoa2V5
cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFs
dWVDYWxsQmFja3MpKTsKLSAgICBTZWNDb2RlUmVmIGNvZGUgPSBudWxscHRyOwotICAgIE9TU3Rh
dHVzIGVycm9yQ29kZSA9IG5vRXJyOwotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgUkVMRUFTRV9B
U1NFUlQoKSB0aGF0IFNlY0NvZGVDb3B5R3Vlc3RXaXRoQXR0cmlidXRlcygpIHJldHVybnMgd2l0
aG91dCBlcnJvci4gU2VlIDxyZGFyOi8vcHJvYmxlbS8yNTcwNjUxNz4uCi0gICAgaWYgKChlcnJv
ckNvZGUgPSBTZWNDb2RlQ29weUd1ZXN0V2l0aEF0dHJpYnV0ZXMobnVsbHB0ciwgYXR0cmlidXRl
cy5nZXQoKSwga1NlY0NTRGVmYXVsdEZsYWdzLCAmY29kZSkpKSB7Ci0gICAgICAgIFdURkxvZ0Fs
d2F5cygiU2VjQ29kZUNvcHlHdWVzdFdpdGhBdHRyaWJ1dGVzKCkgZmFpbGVkIHdpdGggZXJyb3I6
ICVsZFxuIiwgc3RhdGljX2Nhc3Q8bG9uZz4oZXJyb3JDb2RlKSk7Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gYWRvcHRDRihjb2RlKTsKLX0KLQotc3RhdGljIFJl
dGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHNlY0NvZGVTaWduaW5nSW5mb3JtYXRpb24oU2VjQ29k
ZVJlZiBjb2RlKQotewotICAgIENGRGljdGlvbmFyeVJlZiBzaWduaW5nSW5mbyA9IG51bGxwdHI7
Ci0gICAgUkVMRUFTRV9BU1NFUlQoIVNlY0NvZGVDb3B5U2lnbmluZ0luZm9ybWF0aW9uKGNvZGUs
IGtTZWNDU0RlZmF1bHRGbGFncywgJnNpZ25pbmdJbmZvKSk7Ci0gICAgcmV0dXJuIGFkb3B0Q0Yo
c2lnbmluZ0luZm8pOwotfQotCi1zdGF0aWMgUmV0YWluUHRyPFNlY1JlcXVpcmVtZW50UmVmPiBh
cHBsZVNpZ25lZE9yTWFjQXBwU3RvcmVTaWduZWRPckFwcGxlRGV2ZWxvcGVyU2lnbmVkUmVxdWly
ZW1lbnQoKQotewotICAgIENGU3RyaW5nUmVmIHJlcXVpcmVtZW50ID0gQ0ZTVFIoIihhbmNob3Ig
YXBwbGUpIG9yIChhbmNob3IgYXBwbGUgZ2VuZXJpYyBhbmQgY2VydGlmaWNhdGUgbGVhZltmaWVs
ZC4xLjIuODQwLjExMzYzNS4xMDAuNi4xLjldKSBvciAoYW5jaG9yIGFwcGxlIGdlbmVyaWMgYW5k
IGNlcnRpZmljYXRlIDFbZmllbGQuMS4yLjg0MC4xMTM2MzUuMTAwLjYuMi42XSBhbmQgY2VydGlm
aWNhdGUgbGVhZltmaWVsZC4xLjIuODQwLjExMzYzNS4xMDAuNi4xLjEzXSkiKTsKLSAgICBTZWNS
ZXF1aXJlbWVudFJlZiBzaWduaW5nUmVxdWlyZW1lbnQgPSBudWxscHRyOwotICAgIFJFTEVBU0Vf
QVNTRVJUKCFTZWNSZXF1aXJlbWVudENyZWF0ZVdpdGhTdHJpbmcocmVxdWlyZW1lbnQsIGtTZWND
U0RlZmF1bHRGbGFncywgJnNpZ25pbmdSZXF1aXJlbWVudCkpOwotICAgIHJldHVybiBhZG9wdENG
KHNpZ25pbmdSZXF1aXJlbWVudCk7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgc2VjQ29kZVNpZ25pbmdJ
ZGVudGlmaWVyKFNlY0NvZGVSZWYgY29kZSkKLXsKLSAgICBSZXRhaW5QdHI8U2VjUmVxdWlyZW1l
bnRSZWY+IHNpZ25pbmdSZXF1aXJlbWVudCA9IGFwcGxlU2lnbmVkT3JNYWNBcHBTdG9yZVNpZ25l
ZE9yQXBwbGVEZXZlbG9wZXJTaWduZWRSZXF1aXJlbWVudCgpOwotICAgIE9TU3RhdHVzIGVycm9y
Q29kZSA9IFNlY0NvZGVDaGVja1ZhbGlkaXR5KGNvZGUsIGtTZWNDU0RlZmF1bHRGbGFncywgc2ln
bmluZ1JlcXVpcmVtZW50LmdldCgpKTsKLSAgICBpZiAoZXJyb3JDb2RlID09IGVyclNlY0NTVW5z
aWduZWQgfHwgZXJyb3JDb2RlID09IGVyclNlY0NTUmVxRmFpbGVkKQotICAgICAgICByZXR1cm4g
U3RyaW5nKCk7IC8vIFVuc2lnbmVkIG9yIHNpZ25lZCBieSBhIHRoaXJkLXBhcnR5Ci0gICAgUkVM
RUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKCFlcnJvckNvZGUsICJTZWNDb2RlQ2hlY2tWYWxpZGl0
eSgpIGZhaWxlZCB3aXRoIGVycm9yOiAlbGQiLCBzdGF0aWNfY2FzdDxsb25nPihlcnJvckNvZGUp
KTsKLSAgICBTdHJpbmcgY29kZVNpZ25pbmdJZGVudGlmaWVyOwotICAgIFJldGFpblB0cjxDRkRp
Y3Rpb25hcnlSZWY+IHNpZ25pbmdJbmZvID0gc2VjQ29kZVNpZ25pbmdJbmZvcm1hdGlvbihjb2Rl
KTsKLSAgICBpZiAoQ0ZEaWN0aW9uYXJ5UmVmIHBsaXN0ID0gZHluYW1pY19jZl9jYXN0PENGRGlj
dGlvbmFyeVJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoc2lnbmluZ0luZm8uZ2V0KCksIGtTZWND
b2RlSW5mb1BMaXN0KSkpCi0gICAgICAgIGNvZGVTaWduaW5nSWRlbnRpZmllciA9IGR5bmFtaWNf
Y2ZfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocGxpc3QsIGtDRkJ1bmRs
ZUlkZW50aWZpZXJLZXkpKTsKLSAgICBlbHNlCi0gICAgICAgIGNvZGVTaWduaW5nSWRlbnRpZmll
ciA9IGR5bmFtaWNfY2ZfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoc2ln
bmluZ0luZm8uZ2V0KCksIGtTZWNDb2RlSW5mb0lkZW50aWZpZXIpKTsKLSAgICBSRUxFQVNFX0FT
U0VSVCghY29kZVNpZ25pbmdJZGVudGlmaWVyLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIGNvZGVT
aWduaW5nSWRlbnRpZmllcjsKKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49
IDEyMDAwCisgICAgUkVMRUFTRV9BU1NFUlQodGFzayk7CisgICAgcmV0dXJuIGFkb3B0Q0YoU2Vj
VGFza0NvcHlTaWduaW5nSWRlbnRpZmllcih0YXNrLCBudWxscHRyKSkuZ2V0KCk7CisjZWxzZQor
ICAgIHJldHVybiB7IH07CisjZW5kaWYKIH0KIAogU3RyaW5nIGNvZGVTaWduaW5nSWRlbnRpZmll
cigpCiB7Ci0gICAgcmV0dXJuIHNlY0NvZGVTaWduaW5nSWRlbnRpZmllcihzZWNDb2RlRm9yQ3Vy
cmVudFByb2Nlc3MoKS5nZXQoKSk7CisgICAgcmV0dXJuIHNlY1Rhc2tDb2RlU2lnbmluZ0lkZW50
aWZpZXIoYWRvcHRDRihTZWNUYXNrQ3JlYXRlRnJvbVNlbGYoa0NGQWxsb2NhdG9yRGVmYXVsdCkp
LmdldCgpKTsKIH0KIAotU3RyaW5nIGNvZGVTaWduaW5nSWRlbnRpZmllckZvclByb2Nlc3MocGlk
X3QgcGlkKQorU3RyaW5nIGNvZGVTaWduaW5nSWRlbnRpZmllckZyb21YUENDb25uZWN0aW9uKHhw
Y19jb25uZWN0aW9uX3QgY29ubmVjdGlvbikKIHsKLSAgICBhdXRvIGNvZGUgPSBzZWNDb2RlRm9y
UHJvY2VzcyhwaWQpOwotICAgIGlmICghY29kZSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwot
ICAgIHJldHVybiBzZWNDb2RlU2lnbmluZ0lkZW50aWZpZXIoY29kZS5nZXQoKSk7CisgICAgYXVk
aXRfdG9rZW5fdCBhdWRpdFRva2VuOworICAgIHhwY19jb25uZWN0aW9uX2dldF9hdWRpdF90b2tl
bihjb25uZWN0aW9uLCAmYXVkaXRUb2tlbik7CisgICAgcmV0dXJuIHNlY1Rhc2tDb2RlU2lnbmlu
Z0lkZW50aWZpZXIoYWRvcHRDRihTZWNUYXNrQ3JlYXRlV2l0aEF1ZGl0VG9rZW4oa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgYXVkaXRUb2tlbikpLmdldCgpKTsKIH0KLSAgICAKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CiAKICNlbmRpZiAvLyBQTEFURk9STShNQUMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278655</attachid>
            <date>2016-05-11 13:25:19 -0700</date>
            <delta_ts>2016-05-11 13:33:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157570-20160511132608.patch</filename>
            <type>text/plain</type>
            <size>11914</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAwNjQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDhmYWUzYmU2NTc1YmQwYmE2MWQxMjA5
OGZmM2M1MzRlYzIzZWZkMzIuLmE1MDU3ZmI4ZTJjN2ZhMzc4ZWVlY2QxZmQzZmY0ZDQ0NGZiM2E1
MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTYtMDUtMTEgIERhbmllbCBCYXRlcyAgPGRhYmF0
ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBTZWNUYXNrIFNQSSB0byByZXRyaWV2ZSBjb2Rl
IHNpZ25pbmcgaWRlbnRpZmllciBmb3IgdXNlciBkaXJlY3Rvcnkgc3VmZml4CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc1NzAKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzI1NzA2NTE3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEZvcndhcmQgZGVjbGFyZSBTUEkgU2VjVGFza0NvcHlTaWduaW5nSWRl
bnRpZmllcigpLgorCisgICAgICAgICogd3RmL3NwaS9jb2NvYS9TZWN1cml0eVNQSS5oOgorCiAy
MDE2LTA1LTEwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgR2V0
IHJpZCBvZiBhIGxvdCBvZiBjYWxscyB0byBSZWZQdHI6OnJlbGVhc2UoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4
IDkwZmFiMGYwN2RlYTFjOGM4ZjYwZGMyMjA3YmNiZDFjNWRjNzkwNDguLmQ4ODc2MGQ5NjI1ZmEz
ZDliMmM3ODdjOGJkMGZhY2ZiOTEyMThlNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBAQAor
MjAxNi0wNS0xMSAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CisKKyAgICAgICAg
VXNlIFNlY1Rhc2sgU1BJIHRvIHJldHJpZXZlIGNvZGUgc2lnbmluZyBpZGVudGlmaWVyIGZvciB1
c2VyIGRpcmVjdG9yeSBzdWZmaXgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1NzU3MAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjU3MDY1MTc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSXQgaXMgc3Vm
ZmljaWVudCB0byBtYWtlIHVzZSBvZiB0aGUgU2VjVGFzayBTUEkgdG8gcmV0cmlldmUgdGhlIGNv
ZGUgc2lnbmluZworICAgICAgICBpZGVudGlmaWVyIG9mIHRoZSBlbWJlZGRpbmcgY2xpZW50IGZv
ciB1c2UgaW4gdGhlIHVzZXIgZGlyZWN0b3J5IHN1ZmZpeC4gVGhpcworICAgICAgICBhdm9pZHMg
dGhlIG5lZWQgdG8gYWxsb3cgQ29kZSBTaWduaW5nIFNlcnZpY2VzIHRvIGhhdmUgYWNjZXNzIHRv
IHRoZSBidW5kbGUKKyAgICAgICAgb2YgdGhlIGVtYmVkZGluZyBjbGllbnQuCisKKyAgICAgICAg
KiBTaGFyZWQvbWFjL0NoaWxkUHJvY2Vzc01hYy5tbToKKyAgICAgICAgKFdlYktpdDo6Q2hpbGRQ
cm9jZXNzOjppbml0aWFsaXplU2FuZGJveCk6IFVzZSB0aGUgY29kZSBzaWduaW5nIGlkZW50aWZp
ZXIgb2YgdGhlCisgICAgICAgIGVtYmVkZGluZyBjbGllbnQgYXMgcGFydCBvZiB0aGUgdXNlciBk
aXJlY3Rvcnkgc3VmZml4IGlmIGF2YWlsYWJsZS4KKyAgICAgICAgKiBTaGFyZWQvbWFjL0NvZGVT
aWduaW5nLmg6CisgICAgICAgICogU2hhcmVkL21hYy9Db2RlU2lnbmluZy5tbToKKyAgICAgICAg
KFdlYktpdDo6c2VjVGFza0NvZGVTaWduaW5nSWRlbnRpZmllcik6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0Ojpjb2RlU2lnbmluZ0lkZW50aWZpZXIpOiBXcm90ZSBpbiB0ZXJtcyBvZiBzZWNUYXNr
Q29kZVNpZ25pbmdJZGVudGlmaWVyKCkgYW5kCisgICAgICAgIFNlY1Rhc2sgU1BJLgorICAgICAg
ICAoV2ViS2l0Ojpjb2RlU2lnbmluZ0lkZW50aWZpZXJGcm9tWFBDQ29ubmVjdGlvbik6IEFkZGVk
LiBVc2VzIHRoZSBhdWRpdCB0b2tlbiBhc3NvY2lhdGVkCisgICAgICAgIHdpdGggdGhlIHNwZWNp
ZmllZCBYUEMgY29ubmVjdGlvbiB0byBnZXQgdGhlIGNvZGUgc2lnbmluZyBpZGVudGlmaWVyIGZv
ciB0aGUgZW1iZWRkaW5nCisgICAgICAgIGNsaWVudC4KKyAgICAgICAgKFdlYktpdDo6c2VjQ29k
ZUZvckN1cnJlbnRQcm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6c2VjQ29kZUZv
clByb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpzZWNDb2RlU2lnbmluZ0luZm9y
bWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6YXBwbGVTaWduZWRPck1hY0FwcFN0
b3JlU2lnbmVkT3JBcHBsZURldmVsb3BlclNpZ25lZFJlcXVpcmVtZW50KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6c2VjQ29kZVNpZ25pbmdJZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6Y29kZVNpZ25pbmdJZGVudGlmaWVyRm9yUHJvY2Vzcyk6IERlbGV0ZWQuCisK
IDIwMTYtMDUtMTAgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBGaXggdGhlICFFTkFCTEUoVklERU8pIGJ1aWxkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9zcGkvY29jb2EvU2VjdXJpdHlTUEkuaCBiL1NvdXJjZS9XVEYvd3RmL3NwaS9jb2NvYS9T
ZWN1cml0eVNQSS5oCmluZGV4IDMxMTY3NjZkYWVlM2M4ZDM0OWY2ODEzNjAwMzM2OGUzZTgwZmM2
ZTQuLjA5MGUxNDIyMWVmNGIzMWFlYjc2YjZkYzFhZTJlMzE3N2ZmZDQyOWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL3NwaS9jb2NvYS9TZWN1cml0eVNQSS5oCisrKyBiL1NvdXJjZS9XVEYv
d3RmL3NwaS9jb2NvYS9TZWN1cml0eVNQSS5oCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRl
IDxTZWN1cml0eS9TZWNDZXJ0aWZpY2F0ZVByaXYuaD4KICNpbmNsdWRlIDxTZWN1cml0eS9TZWNU
YXNrLmg+CisjaW5jbHVkZSA8U2VjdXJpdHkvU2VjVGFza1ByaXYuaD4KICNpbmNsdWRlIDxTZWN1
cml0eS9TZWNUcnVzdFByaXYuaD4KIAogI2Vsc2UKQEAgLTU4LDYgKzU5LDEwIEBAIEVYVEVSTl9D
IFNlY1Rhc2tSZWYgU2VjVGFza0NyZWF0ZVdpdGhBdWRpdFRva2VuKENGQWxsb2NhdG9yUmVmLCBh
dWRpdF90b2tlbl90KTsKIEVYVEVSTl9DIFNlY1Rhc2tSZWYgU2VjVGFza0NyZWF0ZUZyb21TZWxm
KENGQWxsb2NhdG9yUmVmKTsKIEVYVEVSTl9DIENGVHlwZVJlZiBTZWNUYXNrQ29weVZhbHVlRm9y
RW50aXRsZW1lbnQoU2VjVGFza1JlZiwgQ0ZTdHJpbmdSZWYgZW50aXRsZW1lbnQsIENGRXJyb3JS
ZWYgKik7CiAKKyNpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVR
VUlSRUQgPj0gMTAxMjAwCitFWFRFUk5fQyBDRlN0cmluZ1JlZiBTZWNUYXNrQ29weVNpZ25pbmdJ
ZGVudGlmaWVyKFNlY1Rhc2tSZWYsIENGRXJyb3JSZWYgKik7CisjZW5kaWYKKwogI2lmIEhBVkUo
U0VDX1RSVVNUX1NFUklBTElaQVRJT04pCiBFWFRFUk5fQyBDRl9SRVRVUk5TX1JFVEFJTkVEIENG
RGF0YVJlZiBTZWNUcnVzdFNlcmlhbGl6ZShTZWNUcnVzdFJlZiwgQ0ZFcnJvclJlZiAqKTsKIEVY
VEVSTl9DIENGX1JFVFVSTlNfUkVUQUlORUQgU2VjVHJ1c3RSZWYgU2VjVHJ1c3REZXNlcmlhbGl6
ZShDRkRhdGFSZWYgc2VyaWFsaXplZFRydXN0LCBDRkVycm9yUmVmICopOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9DaGlsZFByb2Nlc3NNYWMubW0gYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvbWFjL0NoaWxkUHJvY2Vzc01hYy5tbQppbmRleCA4ZTZjZmExMzMzMGIwNjk4
MmQyMGQ1ZWEzZTI4ODA4MmY5Njg5YjdhLi5hYmFlYmUzMjc1ZTI2YmFlYzc4MWY0ZDNjNjA4Mzc2
NDdjMjJkM2M4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0NoaWxkUHJv
Y2Vzc01hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0NoaWxkUHJvY2Vzc01h
Yy5tbQpAQCAtODMsMTQgKzgzLDE1IEBAIHZvaWQgQ2hpbGRQcm9jZXNzOjppbml0aWFsaXplU2Fu
ZGJveChjb25zdCBDaGlsZFByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmCiAgICAgTlNC
dW5kbGUgKndlYmtpdDJCdW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6TlNDbGFzc0Zy
b21TdHJpbmcoQCJXS1ZpZXciKV07CiAgICAgU3RyaW5nIGRlZmF1bHRQcm9maWxlUGF0aCA9IFt3
ZWJraXQyQnVuZGxlIHBhdGhGb3JSZXNvdXJjZTpbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRs
ZUlkZW50aWZpZXJdIG9mVHlwZTpAInNiIl07CiAKLSAgICBib29sIHdpbGxVc2VVc2VyRGlyZWN0
b3J5U3VmZml4SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXIgPSBmYWxzZTsKICAgICBpZiAoc2FuZGJv
eFBhcmFtZXRlcnMudXNlckRpcmVjdG9yeVN1ZmZpeCgpLmlzTnVsbCgpKSB7CiAgICAgICAgIGF1
dG8gdXNlckRpcmVjdG9yeVN1ZmZpeCA9IHBhcmFtZXRlcnMuZXh0cmFJbml0aWFsaXphdGlvbkRh
dGEuZmluZCgidXNlci1kaXJlY3Rvcnktc3VmZml4Iik7Ci0gICAgICAgIGlmICh1c2VyRGlyZWN0
b3J5U3VmZml4ICE9IHBhcmFtZXRlcnMuZXh0cmFJbml0aWFsaXphdGlvbkRhdGEuZW5kKCkpIHsK
LSAgICAgICAgICAgIHdpbGxVc2VVc2VyRGlyZWN0b3J5U3VmZml4SW5pdGlhbGl6YXRpb25QYXJh
bWV0ZXIgPSB0cnVlOworICAgICAgICBpZiAodXNlckRpcmVjdG9yeVN1ZmZpeCAhPSBwYXJhbWV0
ZXJzLmV4dHJhSW5pdGlhbGl6YXRpb25EYXRhLmVuZCgpKQogICAgICAgICAgICAgc2FuZGJveFBh
cmFtZXRlcnMuc2V0VXNlckRpcmVjdG9yeVN1ZmZpeChbbWFrZVN0cmluZyh1c2VyRGlyZWN0b3J5
U3VmZml4LT52YWx1ZSwgJy8nLCBTdHJpbmcoW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJ
ZGVudGlmaWVyXSkpIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbl0pOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgU3RyaW5nIGRlZmF1bHRVc2VyRGlyZWN0b3J5U3VmZml4ID0gbWFrZVN0
cmluZyhTdHJpbmcoW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSksICcr
JywgcGFyYW1ldGVycy5jbGllbnRJZGVudGlmaWVyKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBTdHJpbmcgY2xpZW50SWRlbnRpZmllciA9IGNvZGVTaWduaW5nSWRlbnRpZmllckZyb21Y
UENDb25uZWN0aW9uKHBhcmFtZXRlcnMuY29ubmVjdGlvbklkZW50aWZpZXIueHBjQ29ubmVjdGlv
bi5nZXQoKSk7CisgICAgICAgICAgICBpZiAoY2xpZW50SWRlbnRpZmllci5pc051bGwoKSkKKyAg
ICAgICAgICAgICAgICBjbGllbnRJZGVudGlmaWVyID0gcGFyYW1ldGVycy5jbGllbnRJZGVudGlm
aWVyOworICAgICAgICAgICAgU3RyaW5nIGRlZmF1bHRVc2VyRGlyZWN0b3J5U3VmZml4ID0gbWFr
ZVN0cmluZyhTdHJpbmcoW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSks
ICcrJywgY2xpZW50SWRlbnRpZmllcik7CiAgICAgICAgICAgICBzYW5kYm94UGFyYW1ldGVycy5z
ZXRVc2VyRGlyZWN0b3J5U3VmZml4KGRlZmF1bHRVc2VyRGlyZWN0b3J5U3VmZml4KTsKICAgICAg
ICAgfQogICAgIH0KQEAgLTE3NCwxNSArMTc1LDYgQEAgdm9pZCBDaGlsZFByb2Nlc3M6OmluaXRp
YWxpemVTYW5kYm94KGNvbnN0IENoaWxkUHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYK
ICAgICAgICAgV1RGTG9nQWx3YXlzKCIlczogQ291bGRuJ3QgZW5hYmxlIHNhbmRib3ggc3R5bGUg
ZmlsZSBxdWFyYW50aW5lOiAlbGRcbiIsIGdldHByb2duYW1lKCksIHN0YXRpY19jYXN0PGxvbmc+
KGVycm9yKSk7CiAgICAgICAgIGV4aXQoRVhfTk9QRVJNKTsKICAgICB9Ci0KLSAgICBpZiAod2ls
bFVzZVVzZXJEaXJlY3RvcnlTdWZmaXhJbml0aWFsaXphdGlvblBhcmFtZXRlcikKLSAgICAgICAg
cmV0dXJuOwotICAgIFN0cmluZyBjbGllbnRDb2RlU2lnbmluZ0lkZW50aWZpZXIgPSBjb2RlU2ln
bmluZ0lkZW50aWZpZXJGb3JQcm9jZXNzKHhwY19jb25uZWN0aW9uX2dldF9waWQocGFyYW1ldGVy
cy5jb25uZWN0aW9uSWRlbnRpZmllci54cGNDb25uZWN0aW9uLmdldCgpKSk7Ci0gICAgYm9vbCBp
c0NsaWVudENvZGVTaWduZWQgPSAhY2xpZW50Q29kZVNpZ25pbmdJZGVudGlmaWVyLmlzTnVsbCgp
OwotICAgIGlmIChpc0NsaWVudENvZGVTaWduZWQgJiYgY2xpZW50Q29kZVNpZ25pbmdJZGVudGlm
aWVyICE9IHBhcmFtZXRlcnMuY2xpZW50SWRlbnRpZmllcikgewotICAgICAgICBXVEZMb2dBbHdh
eXMoIiVzOiBDb2RlIHNpZ25pbmcgaWRlbnRpZmllciBvZiBjbGllbnQgZGlmZmVycyBmcm9tIHBh
c3NlZCBjbGllbnQgaWRlbnRpZmllci5cbiIsIGdldHByb2duYW1lKCkpOwotICAgICAgICBleGl0
KEVYX05PUEVSTSk7Ci0gICAgfQogfQogCiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFV
SVJFRCA+PSAxMDExMDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQ29k
ZVNpZ25pbmcuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQ29kZVNpZ25pbmcuaAppbmRl
eCBlMzFkY2RlMWEyODY0NDJlODAwMTM2ODUzM2EzZTFkZWVmMzIzNzYzLi5iOGM1ZTU3ODRkMDBh
MmViNjE4Njk1OWQ0OGJlNTZjZTAyYzBmMzg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvbWFjL0NvZGVTaWduaW5nLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9D
b2RlU2lnbmluZy5oCkBAIC0zMSw2ICszMSw2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiAvLyBU
aGVzZSBmdW5jdGlvbnMgcmV0dXJuIGEgbnVsbCBzdHJpbmcgaWYgdGhlIHByb2Nlc3MgaXMgZWl0
aGVyIHVuc2lnbmVkIG9yIHNpZ25lZCBieSBhIHRoaXJkLXBhcnR5LgogU3RyaW5nIGNvZGVTaWdu
aW5nSWRlbnRpZmllcigpOwotU3RyaW5nIGNvZGVTaWduaW5nSWRlbnRpZmllckZvclByb2Nlc3Mo
cGlkX3QpOworU3RyaW5nIGNvZGVTaWduaW5nSWRlbnRpZmllckZyb21YUENDb25uZWN0aW9uKHhw
Y19jb25uZWN0aW9uX3QpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQ29kZVNpZ25pbmcubW0gYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvbWFjL0NvZGVTaWduaW5nLm1tCmluZGV4IDM2NmNjZjFlZmIxNWU3NzM2NDNkZjYxMWRh
OGNiYmMyYzRkZGYzOTguLjlmODFhNWRhYzJkYzMyNDBhYmMwNzQ2MGNkZTBhZjZkOWJhNGIxYWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQ29kZVNpZ25pbmcubW0KKysr
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Db2RlU2lnbmluZy5tbQpAQCAtMjgsODEgKzI4
LDQxIEBACiAKICNpZiBQTEFURk9STShNQUMpCiAKLSNpbmNsdWRlIDxTZWN1cml0eS9TZWN1cml0
eS5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvY2YvVHlwZUNh
c3RzQ0YuaD4KKyNpbmNsdWRlIDx3dGYvc3BpL2NvY29hL1NlY3VyaXR5U1BJLmg+CisjaW5jbHVk
ZSA8d3RmL3NwaS9kYXJ3aW4vWFBDU1BJLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1zdGF0aWMgUmV0YWluUHRyPFNlY0NvZGVSZWY+
IHNlY0NvZGVGb3JDdXJyZW50UHJvY2VzcygpCisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9S
RVFVSVJFRCA+PSAxMDEyMDAKK3N0YXRpYyBTdHJpbmcgc2VjVGFza0NvZGVTaWduaW5nSWRlbnRp
ZmllcihTZWNUYXNrUmVmIHRhc2spCiB7Ci0gICAgU2VjQ29kZVJlZiBjb2RlID0gbnVsbHB0cjsK
LSAgICBSRUxFQVNFX0FTU0VSVCghU2VjQ29kZUNvcHlTZWxmKGtTZWNDU0RlZmF1bHRGbGFncywg
JmNvZGUpKTsKLSAgICByZXR1cm4gYWRvcHRDRihjb2RlKTsKLX0KLQotc3RhdGljIFJldGFpblB0
cjxTZWNDb2RlUmVmPiBzZWNDb2RlRm9yUHJvY2VzcyhwaWRfdCBwaWQpCi17Ci0gICAgUmV0YWlu
UHRyPENGTnVtYmVyUmVmPiBwaWRDRk51bWJlciA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NG
QWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwgJnBpZCkpOwotICAgIGNvbnN0IHZv
aWQqIGtleXNbXSA9IHsga1NlY0d1ZXN0QXR0cmlidXRlUGlkIH07Ci0gICAgY29uc3Qgdm9pZCog
dmFsdWVzW10gPSB7IHBpZENGTnVtYmVyLmdldCgpIH07Ci0gICAgUmV0YWluUHRyPENGRGljdGlv
bmFyeVJlZj4gYXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9j
YXRvckRlZmF1bHQsIGtleXMsIHZhbHVlcywgV1RGX0FSUkFZX0xFTkdUSChrZXlzKSwgJmtDRlR5
cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNr
cykpOwotICAgIFNlY0NvZGVSZWYgY29kZSA9IG51bGxwdHI7Ci0gICAgT1NTdGF0dXMgZXJyb3JD
b2RlID0gbm9FcnI7Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBSRUxFQVNFX0FTU0VSVCgpIHRo
YXQgU2VjQ29kZUNvcHlHdWVzdFdpdGhBdHRyaWJ1dGVzKCkgcmV0dXJucyB3aXRob3V0IGVycm9y
LiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzI1NzA2NTE3Pi4KLSAgICBpZiAoKGVycm9yQ29kZSA9IFNl
Y0NvZGVDb3B5R3Vlc3RXaXRoQXR0cmlidXRlcyhudWxscHRyLCBhdHRyaWJ1dGVzLmdldCgpLCBr
U2VjQ1NEZWZhdWx0RmxhZ3MsICZjb2RlKSkpIHsKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJTZWND
b2RlQ29weUd1ZXN0V2l0aEF0dHJpYnV0ZXMoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWxkXG4iLCBz
dGF0aWNfY2FzdDxsb25nPihlcnJvckNvZGUpKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgfQotICAgIHJldHVybiBhZG9wdENGKGNvZGUpOwotfQotCi1zdGF0aWMgUmV0YWluUHRyPENG
RGljdGlvbmFyeVJlZj4gc2VjQ29kZVNpZ25pbmdJbmZvcm1hdGlvbihTZWNDb2RlUmVmIGNvZGUp
Ci17Ci0gICAgQ0ZEaWN0aW9uYXJ5UmVmIHNpZ25pbmdJbmZvID0gbnVsbHB0cjsKLSAgICBSRUxF
QVNFX0FTU0VSVCghU2VjQ29kZUNvcHlTaWduaW5nSW5mb3JtYXRpb24oY29kZSwga1NlY0NTRGVm
YXVsdEZsYWdzLCAmc2lnbmluZ0luZm8pKTsKLSAgICByZXR1cm4gYWRvcHRDRihzaWduaW5nSW5m
byk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8U2VjUmVxdWlyZW1lbnRSZWY+IGFwcGxlU2lnbmVk
T3JNYWNBcHBTdG9yZVNpZ25lZE9yQXBwbGVEZXZlbG9wZXJTaWduZWRSZXF1aXJlbWVudCgpCi17
Ci0gICAgQ0ZTdHJpbmdSZWYgcmVxdWlyZW1lbnQgPSBDRlNUUigiKGFuY2hvciBhcHBsZSkgb3Ig
KGFuY2hvciBhcHBsZSBnZW5lcmljIGFuZCBjZXJ0aWZpY2F0ZSBsZWFmW2ZpZWxkLjEuMi44NDAu
MTEzNjM1LjEwMC42LjEuOV0pIG9yIChhbmNob3IgYXBwbGUgZ2VuZXJpYyBhbmQgY2VydGlmaWNh
dGUgMVtmaWVsZC4xLjIuODQwLjExMzYzNS4xMDAuNi4yLjZdIGFuZCBjZXJ0aWZpY2F0ZSBsZWFm
W2ZpZWxkLjEuMi44NDAuMTEzNjM1LjEwMC42LjEuMTNdKSIpOwotICAgIFNlY1JlcXVpcmVtZW50
UmVmIHNpZ25pbmdSZXF1aXJlbWVudCA9IG51bGxwdHI7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIVNl
Y1JlcXVpcmVtZW50Q3JlYXRlV2l0aFN0cmluZyhyZXF1aXJlbWVudCwga1NlY0NTRGVmYXVsdEZs
YWdzLCAmc2lnbmluZ1JlcXVpcmVtZW50KSk7Ci0gICAgcmV0dXJuIGFkb3B0Q0Yoc2lnbmluZ1Jl
cXVpcmVtZW50KTsKLX0KLQotc3RhdGljIFN0cmluZyBzZWNDb2RlU2lnbmluZ0lkZW50aWZpZXIo
U2VjQ29kZVJlZiBjb2RlKQotewotICAgIFJldGFpblB0cjxTZWNSZXF1aXJlbWVudFJlZj4gc2ln
bmluZ1JlcXVpcmVtZW50ID0gYXBwbGVTaWduZWRPck1hY0FwcFN0b3JlU2lnbmVkT3JBcHBsZURl
dmVsb3BlclNpZ25lZFJlcXVpcmVtZW50KCk7Ci0gICAgT1NTdGF0dXMgZXJyb3JDb2RlID0gU2Vj
Q29kZUNoZWNrVmFsaWRpdHkoY29kZSwga1NlY0NTRGVmYXVsdEZsYWdzLCBzaWduaW5nUmVxdWly
ZW1lbnQuZ2V0KCkpOwotICAgIGlmIChlcnJvckNvZGUgPT0gZXJyU2VjQ1NVbnNpZ25lZCB8fCBl
cnJvckNvZGUgPT0gZXJyU2VjQ1NSZXFGYWlsZWQpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsg
Ly8gVW5zaWduZWQgb3Igc2lnbmVkIGJ5IGEgdGhpcmQtcGFydHkKLSAgICBSRUxFQVNFX0FTU0VS
VF9XSVRIX01FU1NBR0UoIWVycm9yQ29kZSwgIlNlY0NvZGVDaGVja1ZhbGlkaXR5KCkgZmFpbGVk
IHdpdGggZXJyb3I6ICVsZCIsIHN0YXRpY19jYXN0PGxvbmc+KGVycm9yQ29kZSkpOwotICAgIFN0
cmluZyBjb2RlU2lnbmluZ0lkZW50aWZpZXI7Ci0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJl
Zj4gc2lnbmluZ0luZm8gPSBzZWNDb2RlU2lnbmluZ0luZm9ybWF0aW9uKGNvZGUpOwotICAgIGlm
IChDRkRpY3Rpb25hcnlSZWYgcGxpc3QgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVm
PihDRkRpY3Rpb25hcnlHZXRWYWx1ZShzaWduaW5nSW5mby5nZXQoKSwga1NlY0NvZGVJbmZvUExp
c3QpKSkKLSAgICAgICAgY29kZVNpZ25pbmdJZGVudGlmaWVyID0gZHluYW1pY19jZl9jYXN0PENG
U3RyaW5nUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShwbGlzdCwga0NGQnVuZGxlSWRlbnRpZmll
cktleSkpOwotICAgIGVsc2UKLSAgICAgICAgY29kZVNpZ25pbmdJZGVudGlmaWVyID0gZHluYW1p
Y19jZl9jYXN0PENGU3RyaW5nUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShzaWduaW5nSW5mby5n
ZXQoKSwga1NlY0NvZGVJbmZvSWRlbnRpZmllcikpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFjb2Rl
U2lnbmluZ0lkZW50aWZpZXIuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gY29kZVNpZ25pbmdJZGVu
dGlmaWVyOworICAgIFJFTEVBU0VfQVNTRVJUKHRhc2spOworICAgIHJldHVybiBhZG9wdENGKFNl
Y1Rhc2tDb3B5U2lnbmluZ0lkZW50aWZpZXIodGFzaywgbnVsbHB0cikpLmdldCgpOwogfQorI2Vu
ZGlmCiAKIFN0cmluZyBjb2RlU2lnbmluZ0lkZW50aWZpZXIoKQogewotICAgIHJldHVybiBzZWND
b2RlU2lnbmluZ0lkZW50aWZpZXIoc2VjQ29kZUZvckN1cnJlbnRQcm9jZXNzKCkuZ2V0KCkpOwor
I2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwCisgICAgcmV0dXJu
IHNlY1Rhc2tDb2RlU2lnbmluZ0lkZW50aWZpZXIoYWRvcHRDRihTZWNUYXNrQ3JlYXRlRnJvbVNl
bGYoa0NGQWxsb2NhdG9yRGVmYXVsdCkpLmdldCgpKTsKKyNlbHNlCisgICAgcmV0dXJuIHsgfTsK
KyNlbmRpZgogfQogCi1TdHJpbmcgY29kZVNpZ25pbmdJZGVudGlmaWVyRm9yUHJvY2VzcyhwaWRf
dCBwaWQpCitTdHJpbmcgY29kZVNpZ25pbmdJZGVudGlmaWVyRnJvbVhQQ0Nvbm5lY3Rpb24oeHBj
X2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uKQogewotICAgIGF1dG8gY29kZSA9IHNlY0NvZGVGb3JQ
cm9jZXNzKHBpZCk7Ci0gICAgaWYgKCFjb2RlKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0g
ICAgcmV0dXJuIHNlY0NvZGVTaWduaW5nSWRlbnRpZmllcihjb2RlLmdldCgpKTsKKyNpZiBfX01B
Q19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMAorICAgIGF1ZGl0X3Rva2VuX3Qg
YXVkaXRUb2tlbjsKKyAgICB4cGNfY29ubmVjdGlvbl9nZXRfYXVkaXRfdG9rZW4oY29ubmVjdGlv
biwgJmF1ZGl0VG9rZW4pOworICAgIHJldHVybiBzZWNUYXNrQ29kZVNpZ25pbmdJZGVudGlmaWVy
KGFkb3B0Q0YoU2VjVGFza0NyZWF0ZVdpdGhBdWRpdFRva2VuKGtDRkFsbG9jYXRvckRlZmF1bHQs
IGF1ZGl0VG9rZW4pKS5nZXQoKSk7CisjZWxzZQorICAgIHJldHVybiB7IH07CisjZW5kaWYKIH0K
LSAgICAKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBQTEFURk9STShNQUMp
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278659</attachid>
            <date>2016-05-11 13:33:12 -0700</date>
            <delta_ts>2016-05-11 13:56:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157570-20160511133401.patch</filename>
            <type>text/plain</type>
            <size>12002</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAwNjQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDhmYWUzYmU2NTc1YmQwYmE2MWQxMjA5
OGZmM2M1MzRlYzIzZWZkMzIuLmE1MDU3ZmI4ZTJjN2ZhMzc4ZWVlY2QxZmQzZmY0ZDQ0NGZiM2E1
MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTYtMDUtMTEgIERhbmllbCBCYXRlcyAgPGRhYmF0
ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBTZWNUYXNrIFNQSSB0byByZXRyaWV2ZSBjb2Rl
IHNpZ25pbmcgaWRlbnRpZmllciBmb3IgdXNlciBkaXJlY3Rvcnkgc3VmZml4CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc1NzAKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzI1NzA2NTE3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEZvcndhcmQgZGVjbGFyZSBTUEkgU2VjVGFza0NvcHlTaWduaW5nSWRl
bnRpZmllcigpLgorCisgICAgICAgICogd3RmL3NwaS9jb2NvYS9TZWN1cml0eVNQSS5oOgorCiAy
MDE2LTA1LTEwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgR2V0
IHJpZCBvZiBhIGxvdCBvZiBjYWxscyB0byBSZWZQdHI6OnJlbGVhc2UoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4
IDkwZmFiMGYwN2RlYTFjOGM4ZjYwZGMyMjA3YmNiZDFjNWRjNzkwNDguLmRiZjBlZGRkYzA1NGJk
ZjA3M2M4YjM1YTc4YzdiNmUzYTRmNTBhNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBAQAor
MjAxNi0wNS0xMSAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CisKKyAgICAgICAg
VXNlIFNlY1Rhc2sgU1BJIHRvIHJldHJpZXZlIGNvZGUgc2lnbmluZyBpZGVudGlmaWVyIGZvciB1
c2VyIGRpcmVjdG9yeSBzdWZmaXgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1NzU3MAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjU3MDY1MTc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSXQgaXMgc3Vm
ZmljaWVudCB0byBtYWtlIHVzZSBvZiB0aGUgU2VjVGFzayBTUEkgdG8gcmV0cmlldmUgdGhlIGNv
ZGUgc2lnbmluZworICAgICAgICBpZGVudGlmaWVyIG9mIHRoZSBlbWJlZGRpbmcgY2xpZW50IGZv
ciB1c2UgaW4gdGhlIHVzZXIgZGlyZWN0b3J5IHN1ZmZpeC4gVGhpcworICAgICAgICBhdm9pZHMg
dGhlIG5lZWQgdG8gYWxsb3cgQ29kZSBTaWduaW5nIFNlcnZpY2VzIHRvIGhhdmUgYWNjZXNzIHRv
IHRoZSBidW5kbGUKKyAgICAgICAgb2YgdGhlIGVtYmVkZGluZyBjbGllbnQuCisKKyAgICAgICAg
KiBTaGFyZWQvbWFjL0NoaWxkUHJvY2Vzc01hYy5tbToKKyAgICAgICAgKFdlYktpdDo6Q2hpbGRQ
cm9jZXNzOjppbml0aWFsaXplU2FuZGJveCk6IFVzZSB0aGUgY29kZSBzaWduaW5nIGlkZW50aWZp
ZXIgb2YgdGhlCisgICAgICAgIGVtYmVkZGluZyBjbGllbnQgYXMgcGFydCBvZiB0aGUgdXNlciBk
aXJlY3Rvcnkgc3VmZml4IGlmIGF2YWlsYWJsZS4KKyAgICAgICAgKiBTaGFyZWQvbWFjL0NvZGVT
aWduaW5nLmg6IFVwZGF0ZSBjb21tZW50LgorICAgICAgICAqIFNoYXJlZC9tYWMvQ29kZVNpZ25p
bmcubW06CisgICAgICAgIChXZWJLaXQ6OnNlY1Rhc2tDb2RlU2lnbmluZ0lkZW50aWZpZXIpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6Y29kZVNpZ25pbmdJZGVudGlmaWVyKTogV3JvdGUgaW4g
dGVybXMgb2Ygc2VjVGFza0NvZGVTaWduaW5nSWRlbnRpZmllcigpIGFuZAorICAgICAgICBTZWNU
YXNrIFNQSS4KKyAgICAgICAgKFdlYktpdDo6Y29kZVNpZ25pbmdJZGVudGlmaWVyRnJvbVhQQ0Nv
bm5lY3Rpb24pOiBBZGRlZC4gVXNlcyB0aGUgYXVkaXQgdG9rZW4gYXNzb2NpYXRlZAorICAgICAg
ICB3aXRoIHRoZSBzcGVjaWZpZWQgWFBDIGNvbm5lY3Rpb24gdG8gZ2V0IHRoZSBjb2RlIHNpZ25p
bmcgaWRlbnRpZmllciBmb3IgdGhlIGVtYmVkZGluZworICAgICAgICBjbGllbnQuCisgICAgICAg
IChXZWJLaXQ6OnNlY0NvZGVGb3JDdXJyZW50UHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OnNlY0NvZGVGb3JQcm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6c2Vj
Q29kZVNpZ25pbmdJbmZvcm1hdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OmFwcGxl
U2lnbmVkT3JNYWNBcHBTdG9yZVNpZ25lZE9yQXBwbGVEZXZlbG9wZXJTaWduZWRSZXF1aXJlbWVu
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OnNlY0NvZGVTaWduaW5nSWRlbnRpZmllcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OmNvZGVTaWduaW5nSWRlbnRpZmllckZvclByb2Nl
c3MpOiBEZWxldGVkLgorCiAyMDE2LTA1LTEwICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdl
YmtpdC5vcmc+CiAKICAgICAgICAgRml4IHRoZSAhRU5BQkxFKFZJREVPKSBidWlsZApkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvc3BpL2NvY29hL1NlY3VyaXR5U1BJLmggYi9Tb3VyY2UvV1RG
L3d0Zi9zcGkvY29jb2EvU2VjdXJpdHlTUEkuaAppbmRleCAzMTE2NzY2ZGFlZTNjOGQzNDlmNjgx
MzYwMDMzNjhlM2U4MGZjNmU0Li4wOTBlMTQyMjFlZjRiMzFhZWI3NmI2ZGMxYWUyZTMxNzdmZmQ0
MjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9zcGkvY29jb2EvU2VjdXJpdHlTUEkuaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9zcGkvY29jb2EvU2VjdXJpdHlTUEkuaApAQCAtMzAsNiArMzAs
NyBAQAogCiAjaW5jbHVkZSA8U2VjdXJpdHkvU2VjQ2VydGlmaWNhdGVQcml2Lmg+CiAjaW5jbHVk
ZSA8U2VjdXJpdHkvU2VjVGFzay5oPgorI2luY2x1ZGUgPFNlY3VyaXR5L1NlY1Rhc2tQcml2Lmg+
CiAjaW5jbHVkZSA8U2VjdXJpdHkvU2VjVHJ1c3RQcml2Lmg+CiAKICNlbHNlCkBAIC01OCw2ICs1
OSwxMCBAQCBFWFRFUk5fQyBTZWNUYXNrUmVmIFNlY1Rhc2tDcmVhdGVXaXRoQXVkaXRUb2tlbihD
RkFsbG9jYXRvclJlZiwgYXVkaXRfdG9rZW5fdCk7CiBFWFRFUk5fQyBTZWNUYXNrUmVmIFNlY1Rh
c2tDcmVhdGVGcm9tU2VsZihDRkFsbG9jYXRvclJlZik7CiBFWFRFUk5fQyBDRlR5cGVSZWYgU2Vj
VGFza0NvcHlWYWx1ZUZvckVudGl0bGVtZW50KFNlY1Rhc2tSZWYsIENGU3RyaW5nUmVmIGVudGl0
bGVtZW50LCBDRkVycm9yUmVmICopOwogCisjaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19Y
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMAorRVhURVJOX0MgQ0ZTdHJpbmdSZWYgU2Vj
VGFza0NvcHlTaWduaW5nSWRlbnRpZmllcihTZWNUYXNrUmVmLCBDRkVycm9yUmVmICopOworI2Vu
ZGlmCisKICNpZiBIQVZFKFNFQ19UUlVTVF9TRVJJQUxJWkFUSU9OKQogRVhURVJOX0MgQ0ZfUkVU
VVJOU19SRVRBSU5FRCBDRkRhdGFSZWYgU2VjVHJ1c3RTZXJpYWxpemUoU2VjVHJ1c3RSZWYsIENG
RXJyb3JSZWYgKik7CiBFWFRFUk5fQyBDRl9SRVRVUk5TX1JFVEFJTkVEIFNlY1RydXN0UmVmIFNl
Y1RydXN0RGVzZXJpYWxpemUoQ0ZEYXRhUmVmIHNlcmlhbGl6ZWRUcnVzdCwgQ0ZFcnJvclJlZiAq
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQ2hpbGRQcm9jZXNzTWFj
Lm1tIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9DaGlsZFByb2Nlc3NNYWMubW0KaW5kZXgg
OGU2Y2ZhMTMzMzBiMDY5ODJkMjBkNWVhM2UyODgwODJmOTY4OWI3YS4uYWJhZWJlMzI3NWUyNmJh
ZWM3ODFmNGQzYzYwODM3NjQ3YzIyZDNjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL21hYy9DaGlsZFByb2Nlc3NNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21h
Yy9DaGlsZFByb2Nlc3NNYWMubW0KQEAgLTgzLDE0ICs4MywxNSBAQCB2b2lkIENoaWxkUHJvY2Vz
czo6aW5pdGlhbGl6ZVNhbmRib3goY29uc3QgQ2hpbGRQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJh
bWV0ZXJzJgogICAgIE5TQnVuZGxlICp3ZWJraXQyQnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZUZv
ckNsYXNzOk5TQ2xhc3NGcm9tU3RyaW5nKEAiV0tWaWV3IildOwogICAgIFN0cmluZyBkZWZhdWx0
UHJvZmlsZVBhdGggPSBbd2Via2l0MkJ1bmRsZSBwYXRoRm9yUmVzb3VyY2U6W1tOU0J1bmRsZSBt
YWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSBvZlR5cGU6QCJzYiJdOwogCi0gICAgYm9vbCB3
aWxsVXNlVXNlckRpcmVjdG9yeVN1ZmZpeEluaXRpYWxpemF0aW9uUGFyYW1ldGVyID0gZmFsc2U7
CiAgICAgaWYgKHNhbmRib3hQYXJhbWV0ZXJzLnVzZXJEaXJlY3RvcnlTdWZmaXgoKS5pc051bGwo
KSkgewogICAgICAgICBhdXRvIHVzZXJEaXJlY3RvcnlTdWZmaXggPSBwYXJhbWV0ZXJzLmV4dHJh
SW5pdGlhbGl6YXRpb25EYXRhLmZpbmQoInVzZXItZGlyZWN0b3J5LXN1ZmZpeCIpOwotICAgICAg
ICBpZiAodXNlckRpcmVjdG9yeVN1ZmZpeCAhPSBwYXJhbWV0ZXJzLmV4dHJhSW5pdGlhbGl6YXRp
b25EYXRhLmVuZCgpKSB7Ci0gICAgICAgICAgICB3aWxsVXNlVXNlckRpcmVjdG9yeVN1ZmZpeElu
aXRpYWxpemF0aW9uUGFyYW1ldGVyID0gdHJ1ZTsKKyAgICAgICAgaWYgKHVzZXJEaXJlY3RvcnlT
dWZmaXggIT0gcGFyYW1ldGVycy5leHRyYUluaXRpYWxpemF0aW9uRGF0YS5lbmQoKSkKICAgICAg
ICAgICAgIHNhbmRib3hQYXJhbWV0ZXJzLnNldFVzZXJEaXJlY3RvcnlTdWZmaXgoW21ha2VTdHJp
bmcodXNlckRpcmVjdG9yeVN1ZmZpeC0+dmFsdWUsICcvJywgU3RyaW5nKFtbTlNCdW5kbGUgbWFp
bkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0pKSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb25dKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFN0cmluZyBkZWZhdWx0VXNlckRpcmVjdG9y
eVN1ZmZpeCA9IG1ha2VTdHJpbmcoU3RyaW5nKFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxl
SWRlbnRpZmllcl0pLCAnKycsIHBhcmFtZXRlcnMuY2xpZW50SWRlbnRpZmllcik7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgU3RyaW5nIGNsaWVudElkZW50aWZpZXIgPSBjb2RlU2lnbmlu
Z0lkZW50aWZpZXJGcm9tWFBDQ29ubmVjdGlvbihwYXJhbWV0ZXJzLmNvbm5lY3Rpb25JZGVudGlm
aWVyLnhwY0Nvbm5lY3Rpb24uZ2V0KCkpOworICAgICAgICAgICAgaWYgKGNsaWVudElkZW50aWZp
ZXIuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgY2xpZW50SWRlbnRpZmllciA9IHBhcmFtZXRl
cnMuY2xpZW50SWRlbnRpZmllcjsKKyAgICAgICAgICAgIFN0cmluZyBkZWZhdWx0VXNlckRpcmVj
dG9yeVN1ZmZpeCA9IG1ha2VTdHJpbmcoU3RyaW5nKFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVu
ZGxlSWRlbnRpZmllcl0pLCAnKycsIGNsaWVudElkZW50aWZpZXIpOwogICAgICAgICAgICAgc2Fu
ZGJveFBhcmFtZXRlcnMuc2V0VXNlckRpcmVjdG9yeVN1ZmZpeChkZWZhdWx0VXNlckRpcmVjdG9y
eVN1ZmZpeCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNzQsMTUgKzE3NSw2IEBAIHZvaWQgQ2hp
bGRQcm9jZXNzOjppbml0aWFsaXplU2FuZGJveChjb25zdCBDaGlsZFByb2Nlc3NJbml0aWFsaXph
dGlvblBhcmFtZXRlcnMmCiAgICAgICAgIFdURkxvZ0Fsd2F5cygiJXM6IENvdWxkbid0IGVuYWJs
ZSBzYW5kYm94IHN0eWxlIGZpbGUgcXVhcmFudGluZTogJWxkXG4iLCBnZXRwcm9nbmFtZSgpLCBz
dGF0aWNfY2FzdDxsb25nPihlcnJvcikpOwogICAgICAgICBleGl0KEVYX05PUEVSTSk7CiAgICAg
fQotCi0gICAgaWYgKHdpbGxVc2VVc2VyRGlyZWN0b3J5U3VmZml4SW5pdGlhbGl6YXRpb25QYXJh
bWV0ZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBTdHJpbmcgY2xpZW50Q29kZVNpZ25pbmdJZGVu
dGlmaWVyID0gY29kZVNpZ25pbmdJZGVudGlmaWVyRm9yUHJvY2Vzcyh4cGNfY29ubmVjdGlvbl9n
ZXRfcGlkKHBhcmFtZXRlcnMuY29ubmVjdGlvbklkZW50aWZpZXIueHBjQ29ubmVjdGlvbi5nZXQo
KSkpOwotICAgIGJvb2wgaXNDbGllbnRDb2RlU2lnbmVkID0gIWNsaWVudENvZGVTaWduaW5nSWRl
bnRpZmllci5pc051bGwoKTsKLSAgICBpZiAoaXNDbGllbnRDb2RlU2lnbmVkICYmIGNsaWVudENv
ZGVTaWduaW5nSWRlbnRpZmllciAhPSBwYXJhbWV0ZXJzLmNsaWVudElkZW50aWZpZXIpIHsKLSAg
ICAgICAgV1RGTG9nQWx3YXlzKCIlczogQ29kZSBzaWduaW5nIGlkZW50aWZpZXIgb2YgY2xpZW50
IGRpZmZlcnMgZnJvbSBwYXNzZWQgY2xpZW50IGlkZW50aWZpZXIuXG4iLCBnZXRwcm9nbmFtZSgp
KTsKLSAgICAgICAgZXhpdChFWF9OT1BFUk0pOwotICAgIH0KIH0KIAogI2lmIF9fTUFDX09TX1hf
VkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMTAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvbWFjL0NvZGVTaWduaW5nLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0Nv
ZGVTaWduaW5nLmgKaW5kZXggZTMxZGNkZTFhMjg2NDQyZTgwMDEzNjg1MzNhM2UxZGVlZjMyMzc2
My4uMmM3ZWVjNmE0NWE4NmMwZDhiYTE0ZWVhYWI5ZjA2OTQwNGJlYzZlYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Db2RlU2lnbmluZy5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9tYWMvQ29kZVNpZ25pbmcuaApAQCAtMjksOCArMjksOCBAQAogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAotLy8gVGhlc2UgZnVuY3Rpb25zIHJldHVybiBhIG51bGwgc3RyaW5nIGlm
IHRoZSBwcm9jZXNzIGlzIGVpdGhlciB1bnNpZ25lZCBvciBzaWduZWQgYnkgYSB0aGlyZC1wYXJ0
eS4KKy8vIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gYSBudWxsIHN0cmluZyBpZiB0aGUgcHJvY2Vz
cyBpcyB1bnNpZ25lZC4KIFN0cmluZyBjb2RlU2lnbmluZ0lkZW50aWZpZXIoKTsKLVN0cmluZyBj
b2RlU2lnbmluZ0lkZW50aWZpZXJGb3JQcm9jZXNzKHBpZF90KTsKK1N0cmluZyBjb2RlU2lnbmlu
Z0lkZW50aWZpZXJGcm9tWFBDQ29ubmVjdGlvbih4cGNfY29ubmVjdGlvbl90KTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0Nv
ZGVTaWduaW5nLm1tIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Db2RlU2lnbmluZy5tbQpp
bmRleCAzNjZjY2YxZWZiMTVlNzczNjQzZGY2MTFkYThjYmJjMmM0ZGRmMzk4Li45ZjgxYTVkYWMy
ZGMzMjQwYWJjMDc0NjBjZGUwYWY2ZDliYTRiMWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvbWFjL0NvZGVTaWduaW5nLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9t
YWMvQ29kZVNpZ25pbmcubW0KQEAgLTI4LDgxICsyOCw0MSBAQAogCiAjaWYgUExBVEZPUk0oTUFD
KQogCi0jaW5jbHVkZSA8U2VjdXJpdHkvU2VjdXJpdHkuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2NmL1R5cGVDYXN0c0NGLmg+CisjaW5jbHVkZSA8d3RmL3Nw
aS9jb2NvYS9TZWN1cml0eVNQSS5oPgorI2luY2x1ZGUgPHd0Zi9zcGkvZGFyd2luL1hQQ1NQSS5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAotc3RhdGljIFJldGFpblB0cjxTZWNDb2RlUmVmPiBzZWNDb2RlRm9yQ3VycmVudFByb2Nlc3Mo
KQorI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwCitzdGF0aWMg
U3RyaW5nIHNlY1Rhc2tDb2RlU2lnbmluZ0lkZW50aWZpZXIoU2VjVGFza1JlZiB0YXNrKQogewot
ICAgIFNlY0NvZGVSZWYgY29kZSA9IG51bGxwdHI7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIVNlY0Nv
ZGVDb3B5U2VsZihrU2VjQ1NEZWZhdWx0RmxhZ3MsICZjb2RlKSk7Ci0gICAgcmV0dXJuIGFkb3B0
Q0YoY29kZSk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8U2VjQ29kZVJlZj4gc2VjQ29kZUZvclBy
b2Nlc3MocGlkX3QgcGlkKQotewotICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gcGlkQ0ZOdW1i
ZXIgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJl
ckludFR5cGUsICZwaWQpKTsKLSAgICBjb25zdCB2b2lkKiBrZXlzW10gPSB7IGtTZWNHdWVzdEF0
dHJpYnV0ZVBpZCB9OwotICAgIGNvbnN0IHZvaWQqIHZhbHVlc1tdID0geyBwaWRDRk51bWJlci5n
ZXQoKSB9OwotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGF0dHJpYnV0ZXMgPSBhZG9w
dENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrZXlzLCB2YWx1ZXMs
IFdURl9BUlJBWV9MRU5HVEgoa2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywg
JmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLSAgICBTZWNDb2RlUmVmIGNvZGUg
PSBudWxscHRyOwotICAgIE9TU3RhdHVzIGVycm9yQ29kZSA9IG5vRXJyOwotICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgUkVMRUFTRV9BU1NFUlQoKSB0aGF0IFNlY0NvZGVDb3B5R3Vlc3RXaXRoQXR0
cmlidXRlcygpIHJldHVybnMgd2l0aG91dCBlcnJvci4gU2VlIDxyZGFyOi8vcHJvYmxlbS8yNTcw
NjUxNz4uCi0gICAgaWYgKChlcnJvckNvZGUgPSBTZWNDb2RlQ29weUd1ZXN0V2l0aEF0dHJpYnV0
ZXMobnVsbHB0ciwgYXR0cmlidXRlcy5nZXQoKSwga1NlY0NTRGVmYXVsdEZsYWdzLCAmY29kZSkp
KSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiU2VjQ29kZUNvcHlHdWVzdFdpdGhBdHRyaWJ1dGVz
KCkgZmFpbGVkIHdpdGggZXJyb3I6ICVsZFxuIiwgc3RhdGljX2Nhc3Q8bG9uZz4oZXJyb3JDb2Rl
KSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gYWRvcHRDRihj
b2RlKTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHNlY0NvZGVTaWdu
aW5nSW5mb3JtYXRpb24oU2VjQ29kZVJlZiBjb2RlKQotewotICAgIENGRGljdGlvbmFyeVJlZiBz
aWduaW5nSW5mbyA9IG51bGxwdHI7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIVNlY0NvZGVDb3B5U2ln
bmluZ0luZm9ybWF0aW9uKGNvZGUsIGtTZWNDU0RlZmF1bHRGbGFncywgJnNpZ25pbmdJbmZvKSk7
Ci0gICAgcmV0dXJuIGFkb3B0Q0Yoc2lnbmluZ0luZm8pOwotfQotCi1zdGF0aWMgUmV0YWluUHRy
PFNlY1JlcXVpcmVtZW50UmVmPiBhcHBsZVNpZ25lZE9yTWFjQXBwU3RvcmVTaWduZWRPckFwcGxl
RGV2ZWxvcGVyU2lnbmVkUmVxdWlyZW1lbnQoKQotewotICAgIENGU3RyaW5nUmVmIHJlcXVpcmVt
ZW50ID0gQ0ZTVFIoIihhbmNob3IgYXBwbGUpIG9yIChhbmNob3IgYXBwbGUgZ2VuZXJpYyBhbmQg
Y2VydGlmaWNhdGUgbGVhZltmaWVsZC4xLjIuODQwLjExMzYzNS4xMDAuNi4xLjldKSBvciAoYW5j
aG9yIGFwcGxlIGdlbmVyaWMgYW5kIGNlcnRpZmljYXRlIDFbZmllbGQuMS4yLjg0MC4xMTM2MzUu
MTAwLjYuMi42XSBhbmQgY2VydGlmaWNhdGUgbGVhZltmaWVsZC4xLjIuODQwLjExMzYzNS4xMDAu
Ni4xLjEzXSkiKTsKLSAgICBTZWNSZXF1aXJlbWVudFJlZiBzaWduaW5nUmVxdWlyZW1lbnQgPSBu
dWxscHRyOwotICAgIFJFTEVBU0VfQVNTRVJUKCFTZWNSZXF1aXJlbWVudENyZWF0ZVdpdGhTdHJp
bmcocmVxdWlyZW1lbnQsIGtTZWNDU0RlZmF1bHRGbGFncywgJnNpZ25pbmdSZXF1aXJlbWVudCkp
OwotICAgIHJldHVybiBhZG9wdENGKHNpZ25pbmdSZXF1aXJlbWVudCk7Ci19Ci0KLXN0YXRpYyBT
dHJpbmcgc2VjQ29kZVNpZ25pbmdJZGVudGlmaWVyKFNlY0NvZGVSZWYgY29kZSkKLXsKLSAgICBS
ZXRhaW5QdHI8U2VjUmVxdWlyZW1lbnRSZWY+IHNpZ25pbmdSZXF1aXJlbWVudCA9IGFwcGxlU2ln
bmVkT3JNYWNBcHBTdG9yZVNpZ25lZE9yQXBwbGVEZXZlbG9wZXJTaWduZWRSZXF1aXJlbWVudCgp
OwotICAgIE9TU3RhdHVzIGVycm9yQ29kZSA9IFNlY0NvZGVDaGVja1ZhbGlkaXR5KGNvZGUsIGtT
ZWNDU0RlZmF1bHRGbGFncywgc2lnbmluZ1JlcXVpcmVtZW50LmdldCgpKTsKLSAgICBpZiAoZXJy
b3JDb2RlID09IGVyclNlY0NTVW5zaWduZWQgfHwgZXJyb3JDb2RlID09IGVyclNlY0NTUmVxRmFp
bGVkKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7IC8vIFVuc2lnbmVkIG9yIHNpZ25lZCBieSBh
IHRoaXJkLXBhcnR5Ci0gICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKCFlcnJvckNvZGUs
ICJTZWNDb2RlQ2hlY2tWYWxpZGl0eSgpIGZhaWxlZCB3aXRoIGVycm9yOiAlbGQiLCBzdGF0aWNf
Y2FzdDxsb25nPihlcnJvckNvZGUpKTsKLSAgICBTdHJpbmcgY29kZVNpZ25pbmdJZGVudGlmaWVy
OwotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHNpZ25pbmdJbmZvID0gc2VjQ29kZVNp
Z25pbmdJbmZvcm1hdGlvbihjb2RlKTsKLSAgICBpZiAoQ0ZEaWN0aW9uYXJ5UmVmIHBsaXN0ID0g
ZHluYW1pY19jZl9jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoc2ln
bmluZ0luZm8uZ2V0KCksIGtTZWNDb2RlSW5mb1BMaXN0KSkpCi0gICAgICAgIGNvZGVTaWduaW5n
SWRlbnRpZmllciA9IGR5bmFtaWNfY2ZfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZEaWN0aW9uYXJ5R2V0
VmFsdWUocGxpc3QsIGtDRkJ1bmRsZUlkZW50aWZpZXJLZXkpKTsKLSAgICBlbHNlCi0gICAgICAg
IGNvZGVTaWduaW5nSWRlbnRpZmllciA9IGR5bmFtaWNfY2ZfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUoc2lnbmluZ0luZm8uZ2V0KCksIGtTZWNDb2RlSW5mb0lkZW50aWZp
ZXIpKTsKLSAgICBSRUxFQVNFX0FTU0VSVCghY29kZVNpZ25pbmdJZGVudGlmaWVyLmlzRW1wdHko
KSk7Ci0gICAgcmV0dXJuIGNvZGVTaWduaW5nSWRlbnRpZmllcjsKKyAgICBSRUxFQVNFX0FTU0VS
VCh0YXNrKTsKKyAgICByZXR1cm4gYWRvcHRDRihTZWNUYXNrQ29weVNpZ25pbmdJZGVudGlmaWVy
KHRhc2ssIG51bGxwdHIpKS5nZXQoKTsKIH0KKyNlbmRpZgogCiBTdHJpbmcgY29kZVNpZ25pbmdJ
ZGVudGlmaWVyKCkKIHsKLSAgICByZXR1cm4gc2VjQ29kZVNpZ25pbmdJZGVudGlmaWVyKHNlY0Nv
ZGVGb3JDdXJyZW50UHJvY2VzcygpLmdldCgpKTsKKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID49IDEwMTIwMAorICAgIHJldHVybiBzZWNUYXNrQ29kZVNpZ25pbmdJZGVudGlm
aWVyKGFkb3B0Q0YoU2VjVGFza0NyZWF0ZUZyb21TZWxmKGtDRkFsbG9jYXRvckRlZmF1bHQpKS5n
ZXQoKSk7CisjZWxzZQorICAgIHJldHVybiB7IH07CisjZW5kaWYKIH0KIAotU3RyaW5nIGNvZGVT
aWduaW5nSWRlbnRpZmllckZvclByb2Nlc3MocGlkX3QgcGlkKQorU3RyaW5nIGNvZGVTaWduaW5n
SWRlbnRpZmllckZyb21YUENDb25uZWN0aW9uKHhwY19jb25uZWN0aW9uX3QgY29ubmVjdGlvbikK
IHsKLSAgICBhdXRvIGNvZGUgPSBzZWNDb2RlRm9yUHJvY2VzcyhwaWQpOwotICAgIGlmICghY29k
ZSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBzZWNDb2RlU2lnbmluZ0lk
ZW50aWZpZXIoY29kZS5nZXQoKSk7CisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJF
RCA+PSAxMDEyMDAKKyAgICBhdWRpdF90b2tlbl90IGF1ZGl0VG9rZW47CisgICAgeHBjX2Nvbm5l
Y3Rpb25fZ2V0X2F1ZGl0X3Rva2VuKGNvbm5lY3Rpb24sICZhdWRpdFRva2VuKTsKKyAgICByZXR1
cm4gc2VjVGFza0NvZGVTaWduaW5nSWRlbnRpZmllcihhZG9wdENGKFNlY1Rhc2tDcmVhdGVXaXRo
QXVkaXRUb2tlbihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBhdWRpdFRva2VuKSkuZ2V0KCkpOworI2Vs
c2UKKyAgICByZXR1cm4geyB9OworI2VuZGlmCiB9Ci0gICAgCisKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdAogCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278665</attachid>
            <date>2016-05-11 13:56:36 -0700</date>
            <delta_ts>2016-05-12 09:14:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157570-20160511135725.patch</filename>
            <type>text/plain</type>
            <size>12137</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAwNjQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDhmYWUzYmU2NTc1YmQwYmE2MWQxMjA5
OGZmM2M1MzRlYzIzZWZkMzIuLmE1MDU3ZmI4ZTJjN2ZhMzc4ZWVlY2QxZmQzZmY0ZDQ0NGZiM2E1
MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTYtMDUtMTEgIERhbmllbCBCYXRlcyAgPGRhYmF0
ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBTZWNUYXNrIFNQSSB0byByZXRyaWV2ZSBjb2Rl
IHNpZ25pbmcgaWRlbnRpZmllciBmb3IgdXNlciBkaXJlY3Rvcnkgc3VmZml4CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc1NzAKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzI1NzA2NTE3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEZvcndhcmQgZGVjbGFyZSBTUEkgU2VjVGFza0NvcHlTaWduaW5nSWRl
bnRpZmllcigpLgorCisgICAgICAgICogd3RmL3NwaS9jb2NvYS9TZWN1cml0eVNQSS5oOgorCiAy
MDE2LTA1LTEwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgR2V0
IHJpZCBvZiBhIGxvdCBvZiBjYWxscyB0byBSZWZQdHI6OnJlbGVhc2UoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4
IDkwZmFiMGYwN2RlYTFjOGM4ZjYwZGMyMjA3YmNiZDFjNWRjNzkwNDguLmUzOGQzMzkzNWU0ZWRl
NTBjMWQ2MDEyOGM3MTliNDA5OWEyY2E4YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNSBAQAor
MjAxNi0wNS0xMSAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CisKKyAgICAgICAg
VXNlIFNlY1Rhc2sgU1BJIHRvIHJldHJpZXZlIGNvZGUgc2lnbmluZyBpZGVudGlmaWVyIGZvciB1
c2VyIGRpcmVjdG9yeSBzdWZmaXgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1NzU3MAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjU3MDY1MTc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSXQgaXMgc3Vm
ZmljaWVudCB0byBtYWtlIHVzZSBvZiB0aGUgU2VjVGFzayBTUEkgdG8gcmV0cmlldmUgdGhlIGNv
ZGUgc2lnbmluZworICAgICAgICBpZGVudGlmaWVyIG9mIHRoZSBlbWJlZGRpbmcgY2xpZW50IGZv
ciB1c2UgaW4gdGhlIHVzZXIgZGlyZWN0b3J5IHN1ZmZpeC4gVGhpcworICAgICAgICBhdm9pZHMg
dGhlIG5lZWQgdG8gYWxsb3cgQ29kZSBTaWduaW5nIFNlcnZpY2VzIHRvIGhhdmUgYWNjZXNzIHRv
IHRoZSBidW5kbGUKKyAgICAgICAgb2YgdGhlIGVtYmVkZGluZyBjbGllbnQuCisKKyAgICAgICAg
KiBTaGFyZWQvbWFjL0NoaWxkUHJvY2Vzc01hYy5tbToKKyAgICAgICAgKFdlYktpdDo6Q2hpbGRQ
cm9jZXNzOjppbml0aWFsaXplU2FuZGJveCk6IFVzZSB0aGUgY29kZSBzaWduaW5nIGlkZW50aWZp
ZXIgb2YgdGhlCisgICAgICAgIGVtYmVkZGluZyBjbGllbnQgYXMgcGFydCBvZiB0aGUgdXNlciBk
aXJlY3Rvcnkgc3VmZml4IGlmIGF2YWlsYWJsZS4KKyAgICAgICAgKiBTaGFyZWQvbWFjL0NvZGVT
aWduaW5nLmg6IFVwZGF0ZSBjb21tZW50IGFuZCBpbmNsdWRlIGhlYWRlciB3dGYvc3BpL2Rhcndp
bi9YUENTUEkuaAorICAgICAgICBmb3IgdGhlIGRlZmluaXRpb24gb2YgeHBjX2Nvbm5lY3Rpb25f
dC4KKyAgICAgICAgKiBTaGFyZWQvbWFjL0NvZGVTaWduaW5nLm1tOgorICAgICAgICAoV2ViS2l0
OjpzZWNUYXNrQ29kZVNpZ25pbmdJZGVudGlmaWVyKTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
OmNvZGVTaWduaW5nSWRlbnRpZmllcik6IFdyb3RlIGluIHRlcm1zIG9mIHNlY1Rhc2tDb2RlU2ln
bmluZ0lkZW50aWZpZXIoKSBhbmQKKyAgICAgICAgU2VjVGFzayBTUEkuCisgICAgICAgIChXZWJL
aXQ6OmNvZGVTaWduaW5nSWRlbnRpZmllckZyb21YUENDb25uZWN0aW9uKTogQWRkZWQuIFVzZXMg
dGhlIGF1ZGl0IHRva2VuIGFzc29jaWF0ZWQKKyAgICAgICAgd2l0aCB0aGUgc3BlY2lmaWVkIFhQ
QyBjb25uZWN0aW9uIHRvIGdldCB0aGUgY29kZSBzaWduaW5nIGlkZW50aWZpZXIgZm9yIHRoZSBl
bWJlZGRpbmcKKyAgICAgICAgY2xpZW50LgorICAgICAgICAoV2ViS2l0OjpzZWNDb2RlRm9yQ3Vy
cmVudFByb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpzZWNDb2RlRm9yUHJvY2Vz
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OnNlY0NvZGVTaWduaW5nSW5mb3JtYXRpb24p
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjphcHBsZVNpZ25lZE9yTWFjQXBwU3RvcmVTaWdu
ZWRPckFwcGxlRGV2ZWxvcGVyU2lnbmVkUmVxdWlyZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpzZWNDb2RlU2lnbmluZ0lkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0Ojpjb2RlU2lnbmluZ0lkZW50aWZpZXJGb3JQcm9jZXNzKTogRGVsZXRlZC4KKwogMjAxNi0w
NS0xMCAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIEZp
eCB0aGUgIUVOQUJMRShWSURFTykgYnVpbGQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3Nw
aS9jb2NvYS9TZWN1cml0eVNQSS5oIGIvU291cmNlL1dURi93dGYvc3BpL2NvY29hL1NlY3VyaXR5
U1BJLmgKaW5kZXggMzExNjc2NmRhZWUzYzhkMzQ5ZjY4MTM2MDAzMzY4ZTNlODBmYzZlNC4uMDkw
ZTE0MjIxZWY0YjMxYWViNzZiNmRjMWFlMmUzMTc3ZmZkNDI5YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvc3BpL2NvY29hL1NlY3VyaXR5U1BJLmgKKysrIGIvU291cmNlL1dURi93dGYvc3Bp
L2NvY29hL1NlY3VyaXR5U1BJLmgKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgPFNlY3Vy
aXR5L1NlY0NlcnRpZmljYXRlUHJpdi5oPgogI2luY2x1ZGUgPFNlY3VyaXR5L1NlY1Rhc2suaD4K
KyNpbmNsdWRlIDxTZWN1cml0eS9TZWNUYXNrUHJpdi5oPgogI2luY2x1ZGUgPFNlY3VyaXR5L1Nl
Y1RydXN0UHJpdi5oPgogCiAjZWxzZQpAQCAtNTgsNiArNTksMTAgQEAgRVhURVJOX0MgU2VjVGFz
a1JlZiBTZWNUYXNrQ3JlYXRlV2l0aEF1ZGl0VG9rZW4oQ0ZBbGxvY2F0b3JSZWYsIGF1ZGl0X3Rv
a2VuX3QpOwogRVhURVJOX0MgU2VjVGFza1JlZiBTZWNUYXNrQ3JlYXRlRnJvbVNlbGYoQ0ZBbGxv
Y2F0b3JSZWYpOwogRVhURVJOX0MgQ0ZUeXBlUmVmIFNlY1Rhc2tDb3B5VmFsdWVGb3JFbnRpdGxl
bWVudChTZWNUYXNrUmVmLCBDRlN0cmluZ1JlZiBlbnRpdGxlbWVudCwgQ0ZFcnJvclJlZiAqKTsK
IAorI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+
PSAxMDEyMDAKK0VYVEVSTl9DIENGU3RyaW5nUmVmIFNlY1Rhc2tDb3B5U2lnbmluZ0lkZW50aWZp
ZXIoU2VjVGFza1JlZiwgQ0ZFcnJvclJlZiAqKTsKKyNlbmRpZgorCiAjaWYgSEFWRShTRUNfVFJV
U1RfU0VSSUFMSVpBVElPTikKIEVYVEVSTl9DIENGX1JFVFVSTlNfUkVUQUlORUQgQ0ZEYXRhUmVm
IFNlY1RydXN0U2VyaWFsaXplKFNlY1RydXN0UmVmLCBDRkVycm9yUmVmICopOwogRVhURVJOX0Mg
Q0ZfUkVUVVJOU19SRVRBSU5FRCBTZWNUcnVzdFJlZiBTZWNUcnVzdERlc2VyaWFsaXplKENGRGF0
YVJlZiBzZXJpYWxpemVkVHJ1c3QsIENGRXJyb3JSZWYgKik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvbWFjL0NoaWxkUHJvY2Vzc01hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9tYWMvQ2hpbGRQcm9jZXNzTWFjLm1tCmluZGV4IDhlNmNmYTEzMzMwYjA2OTgyZDIwZDVl
YTNlMjg4MDgyZjk2ODliN2EuLmFiYWViZTMyNzVlMjZiYWVjNzgxZjRkM2M2MDgzNzY0N2MyMmQz
YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQ2hpbGRQcm9jZXNzTWFj
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQ2hpbGRQcm9jZXNzTWFjLm1tCkBA
IC04MywxNCArODMsMTUgQEAgdm9pZCBDaGlsZFByb2Nlc3M6OmluaXRpYWxpemVTYW5kYm94KGNv
bnN0IENoaWxkUHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYKICAgICBOU0J1bmRsZSAq
d2Via2l0MkJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpOU0NsYXNzRnJvbVN0cmlu
ZyhAIldLVmlldyIpXTsKICAgICBTdHJpbmcgZGVmYXVsdFByb2ZpbGVQYXRoID0gW3dlYmtpdDJC
dW5kbGUgcGF0aEZvclJlc291cmNlOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRp
Zmllcl0gb2ZUeXBlOkAic2IiXTsKIAotICAgIGJvb2wgd2lsbFVzZVVzZXJEaXJlY3RvcnlTdWZm
aXhJbml0aWFsaXphdGlvblBhcmFtZXRlciA9IGZhbHNlOwogICAgIGlmIChzYW5kYm94UGFyYW1l
dGVycy51c2VyRGlyZWN0b3J5U3VmZml4KCkuaXNOdWxsKCkpIHsKICAgICAgICAgYXV0byB1c2Vy
RGlyZWN0b3J5U3VmZml4ID0gcGFyYW1ldGVycy5leHRyYUluaXRpYWxpemF0aW9uRGF0YS5maW5k
KCJ1c2VyLWRpcmVjdG9yeS1zdWZmaXgiKTsKLSAgICAgICAgaWYgKHVzZXJEaXJlY3RvcnlTdWZm
aXggIT0gcGFyYW1ldGVycy5leHRyYUluaXRpYWxpemF0aW9uRGF0YS5lbmQoKSkgewotICAgICAg
ICAgICAgd2lsbFVzZVVzZXJEaXJlY3RvcnlTdWZmaXhJbml0aWFsaXphdGlvblBhcmFtZXRlciA9
IHRydWU7CisgICAgICAgIGlmICh1c2VyRGlyZWN0b3J5U3VmZml4ICE9IHBhcmFtZXRlcnMuZXh0
cmFJbml0aWFsaXphdGlvbkRhdGEuZW5kKCkpCiAgICAgICAgICAgICBzYW5kYm94UGFyYW1ldGVy
cy5zZXRVc2VyRGlyZWN0b3J5U3VmZml4KFttYWtlU3RyaW5nKHVzZXJEaXJlY3RvcnlTdWZmaXgt
PnZhbHVlLCAnLycsIFN0cmluZyhbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZp
ZXJdKSkgZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uXSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBTdHJpbmcgZGVmYXVsdFVzZXJEaXJlY3RvcnlTdWZmaXggPSBtYWtlU3RyaW5nKFN0
cmluZyhbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdKSwgJysnLCBwYXJh
bWV0ZXJzLmNsaWVudElkZW50aWZpZXIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFN0
cmluZyBjbGllbnRJZGVudGlmaWVyID0gY29kZVNpZ25pbmdJZGVudGlmaWVyRnJvbVhQQ0Nvbm5l
Y3Rpb24ocGFyYW1ldGVycy5jb25uZWN0aW9uSWRlbnRpZmllci54cGNDb25uZWN0aW9uLmdldCgp
KTsKKyAgICAgICAgICAgIGlmIChjbGllbnRJZGVudGlmaWVyLmlzTnVsbCgpKQorICAgICAgICAg
ICAgICAgIGNsaWVudElkZW50aWZpZXIgPSBwYXJhbWV0ZXJzLmNsaWVudElkZW50aWZpZXI7Cisg
ICAgICAgICAgICBTdHJpbmcgZGVmYXVsdFVzZXJEaXJlY3RvcnlTdWZmaXggPSBtYWtlU3RyaW5n
KFN0cmluZyhbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdKSwgJysnLCBj
bGllbnRJZGVudGlmaWVyKTsKICAgICAgICAgICAgIHNhbmRib3hQYXJhbWV0ZXJzLnNldFVzZXJE
aXJlY3RvcnlTdWZmaXgoZGVmYXVsdFVzZXJEaXJlY3RvcnlTdWZmaXgpOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMTc0LDE1ICsxNzUsNiBAQCB2b2lkIENoaWxkUHJvY2Vzczo6aW5pdGlhbGl6ZVNh
bmRib3goY29uc3QgQ2hpbGRQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJgogICAgICAg
ICBXVEZMb2dBbHdheXMoIiVzOiBDb3VsZG4ndCBlbmFibGUgc2FuZGJveCBzdHlsZSBmaWxlIHF1
YXJhbnRpbmU6ICVsZFxuIiwgZ2V0cHJvZ25hbWUoKSwgc3RhdGljX2Nhc3Q8bG9uZz4oZXJyb3Ip
KTsKICAgICAgICAgZXhpdChFWF9OT1BFUk0pOwogICAgIH0KLQotICAgIGlmICh3aWxsVXNlVXNl
ckRpcmVjdG9yeVN1ZmZpeEluaXRpYWxpemF0aW9uUGFyYW1ldGVyKQotICAgICAgICByZXR1cm47
Ci0gICAgU3RyaW5nIGNsaWVudENvZGVTaWduaW5nSWRlbnRpZmllciA9IGNvZGVTaWduaW5nSWRl
bnRpZmllckZvclByb2Nlc3MoeHBjX2Nvbm5lY3Rpb25fZ2V0X3BpZChwYXJhbWV0ZXJzLmNvbm5l
Y3Rpb25JZGVudGlmaWVyLnhwY0Nvbm5lY3Rpb24uZ2V0KCkpKTsKLSAgICBib29sIGlzQ2xpZW50
Q29kZVNpZ25lZCA9ICFjbGllbnRDb2RlU2lnbmluZ0lkZW50aWZpZXIuaXNOdWxsKCk7Ci0gICAg
aWYgKGlzQ2xpZW50Q29kZVNpZ25lZCAmJiBjbGllbnRDb2RlU2lnbmluZ0lkZW50aWZpZXIgIT0g
cGFyYW1ldGVycy5jbGllbnRJZGVudGlmaWVyKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiJXM6
IENvZGUgc2lnbmluZyBpZGVudGlmaWVyIG9mIGNsaWVudCBkaWZmZXJzIGZyb20gcGFzc2VkIGNs
aWVudCBpZGVudGlmaWVyLlxuIiwgZ2V0cHJvZ25hbWUoKSk7Ci0gICAgICAgIGV4aXQoRVhfTk9Q
RVJNKTsKLSAgICB9CiB9CiAKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49
IDEwMTEwMApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Db2RlU2lnbmlu
Zy5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Db2RlU2lnbmluZy5oCmluZGV4IGUzMWRj
ZGUxYTI4NjQ0MmU4MDAxMzY4NTMzYTNlMWRlZWYzMjM3NjMuLjMzNTliNWU3NTU5YTQxZTY5MWVl
NDRmNGUyMmQ1OWUzNjkwZDRlY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9t
YWMvQ29kZVNpZ25pbmcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0NvZGVTaWdu
aW5nLmgKQEAgLTI2LDExICsyNiwxMiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9zcGkvZGFyd2luL1hQQ1NQSS5oPgogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAotLy8gVGhlc2UgZnVuY3Rpb25zIHJldHVybiBhIG51bGwgc3RyaW5nIGlm
IHRoZSBwcm9jZXNzIGlzIGVpdGhlciB1bnNpZ25lZCBvciBzaWduZWQgYnkgYSB0aGlyZC1wYXJ0
eS4KKy8vIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gYSBudWxsIHN0cmluZyBpZiB0aGUgcHJvY2Vz
cyBpcyB1bnNpZ25lZC4KIFN0cmluZyBjb2RlU2lnbmluZ0lkZW50aWZpZXIoKTsKLVN0cmluZyBj
b2RlU2lnbmluZ0lkZW50aWZpZXJGb3JQcm9jZXNzKHBpZF90KTsKK1N0cmluZyBjb2RlU2lnbmlu
Z0lkZW50aWZpZXJGcm9tWFBDQ29ubmVjdGlvbih4cGNfY29ubmVjdGlvbl90KTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0Nv
ZGVTaWduaW5nLm1tIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Db2RlU2lnbmluZy5tbQpp
bmRleCAzNjZjY2YxZWZiMTVlNzczNjQzZGY2MTFkYThjYmJjMmM0ZGRmMzk4Li4xMWYxYWUwOWUz
ODhhZGI5NDNmNmZjN2RiMmU0NTQ4YzA0ZjNjYzFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvbWFjL0NvZGVTaWduaW5nLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9t
YWMvQ29kZVNpZ25pbmcubW0KQEAgLTI4LDgxICsyOCw0MCBAQAogCiAjaWYgUExBVEZPUk0oTUFD
KQogCi0jaW5jbHVkZSA8U2VjdXJpdHkvU2VjdXJpdHkuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2NmL1R5cGVDYXN0c0NGLmg+CisjaW5jbHVkZSA8d3RmL3Nw
aS9jb2NvYS9TZWN1cml0eVNQSS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotc3RhdGljIFJldGFpblB0cjxTZWNDb2RlUmVmPiBzZWND
b2RlRm9yQ3VycmVudFByb2Nlc3MoKQorI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlS
RUQgPj0gMTAxMjAwCitzdGF0aWMgU3RyaW5nIHNlY1Rhc2tDb2RlU2lnbmluZ0lkZW50aWZpZXIo
U2VjVGFza1JlZiB0YXNrKQogewotICAgIFNlY0NvZGVSZWYgY29kZSA9IG51bGxwdHI7Ci0gICAg
UkVMRUFTRV9BU1NFUlQoIVNlY0NvZGVDb3B5U2VsZihrU2VjQ1NEZWZhdWx0RmxhZ3MsICZjb2Rl
KSk7Ci0gICAgcmV0dXJuIGFkb3B0Q0YoY29kZSk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8U2Vj
Q29kZVJlZj4gc2VjQ29kZUZvclByb2Nlc3MocGlkX3QgcGlkKQotewotICAgIFJldGFpblB0cjxD
Rk51bWJlclJlZj4gcGlkQ0ZOdW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9j
YXRvckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZwaWQpKTsKLSAgICBjb25zdCB2b2lkKiBr
ZXlzW10gPSB7IGtTZWNHdWVzdEF0dHJpYnV0ZVBpZCB9OwotICAgIGNvbnN0IHZvaWQqIHZhbHVl
c1tdID0geyBwaWRDRk51bWJlci5nZXQoKSB9OwotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlS
ZWY+IGF0dHJpYnV0ZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBrZXlzLCB2YWx1ZXMsIFdURl9BUlJBWV9MRU5HVEgoa2V5cyksICZrQ0ZUeXBlRGlj
dGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsK
LSAgICBTZWNDb2RlUmVmIGNvZGUgPSBudWxscHRyOwotICAgIE9TU3RhdHVzIGVycm9yQ29kZSA9
IG5vRXJyOwotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgUkVMRUFTRV9BU1NFUlQoKSB0aGF0IFNl
Y0NvZGVDb3B5R3Vlc3RXaXRoQXR0cmlidXRlcygpIHJldHVybnMgd2l0aG91dCBlcnJvci4gU2Vl
IDxyZGFyOi8vcHJvYmxlbS8yNTcwNjUxNz4uCi0gICAgaWYgKChlcnJvckNvZGUgPSBTZWNDb2Rl
Q29weUd1ZXN0V2l0aEF0dHJpYnV0ZXMobnVsbHB0ciwgYXR0cmlidXRlcy5nZXQoKSwga1NlY0NT
RGVmYXVsdEZsYWdzLCAmY29kZSkpKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiU2VjQ29kZUNv
cHlHdWVzdFdpdGhBdHRyaWJ1dGVzKCkgZmFpbGVkIHdpdGggZXJyb3I6ICVsZFxuIiwgc3RhdGlj
X2Nhc3Q8bG9uZz4oZXJyb3JDb2RlKSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0K
LSAgICByZXR1cm4gYWRvcHRDRihjb2RlKTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDRkRpY3Rp
b25hcnlSZWY+IHNlY0NvZGVTaWduaW5nSW5mb3JtYXRpb24oU2VjQ29kZVJlZiBjb2RlKQotewot
ICAgIENGRGljdGlvbmFyeVJlZiBzaWduaW5nSW5mbyA9IG51bGxwdHI7Ci0gICAgUkVMRUFTRV9B
U1NFUlQoIVNlY0NvZGVDb3B5U2lnbmluZ0luZm9ybWF0aW9uKGNvZGUsIGtTZWNDU0RlZmF1bHRG
bGFncywgJnNpZ25pbmdJbmZvKSk7Ci0gICAgcmV0dXJuIGFkb3B0Q0Yoc2lnbmluZ0luZm8pOwot
fQotCi1zdGF0aWMgUmV0YWluUHRyPFNlY1JlcXVpcmVtZW50UmVmPiBhcHBsZVNpZ25lZE9yTWFj
QXBwU3RvcmVTaWduZWRPckFwcGxlRGV2ZWxvcGVyU2lnbmVkUmVxdWlyZW1lbnQoKQotewotICAg
IENGU3RyaW5nUmVmIHJlcXVpcmVtZW50ID0gQ0ZTVFIoIihhbmNob3IgYXBwbGUpIG9yIChhbmNo
b3IgYXBwbGUgZ2VuZXJpYyBhbmQgY2VydGlmaWNhdGUgbGVhZltmaWVsZC4xLjIuODQwLjExMzYz
NS4xMDAuNi4xLjldKSBvciAoYW5jaG9yIGFwcGxlIGdlbmVyaWMgYW5kIGNlcnRpZmljYXRlIDFb
ZmllbGQuMS4yLjg0MC4xMTM2MzUuMTAwLjYuMi42XSBhbmQgY2VydGlmaWNhdGUgbGVhZltmaWVs
ZC4xLjIuODQwLjExMzYzNS4xMDAuNi4xLjEzXSkiKTsKLSAgICBTZWNSZXF1aXJlbWVudFJlZiBz
aWduaW5nUmVxdWlyZW1lbnQgPSBudWxscHRyOwotICAgIFJFTEVBU0VfQVNTRVJUKCFTZWNSZXF1
aXJlbWVudENyZWF0ZVdpdGhTdHJpbmcocmVxdWlyZW1lbnQsIGtTZWNDU0RlZmF1bHRGbGFncywg
JnNpZ25pbmdSZXF1aXJlbWVudCkpOwotICAgIHJldHVybiBhZG9wdENGKHNpZ25pbmdSZXF1aXJl
bWVudCk7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgc2VjQ29kZVNpZ25pbmdJZGVudGlmaWVyKFNlY0Nv
ZGVSZWYgY29kZSkKLXsKLSAgICBSZXRhaW5QdHI8U2VjUmVxdWlyZW1lbnRSZWY+IHNpZ25pbmdS
ZXF1aXJlbWVudCA9IGFwcGxlU2lnbmVkT3JNYWNBcHBTdG9yZVNpZ25lZE9yQXBwbGVEZXZlbG9w
ZXJTaWduZWRSZXF1aXJlbWVudCgpOwotICAgIE9TU3RhdHVzIGVycm9yQ29kZSA9IFNlY0NvZGVD
aGVja1ZhbGlkaXR5KGNvZGUsIGtTZWNDU0RlZmF1bHRGbGFncywgc2lnbmluZ1JlcXVpcmVtZW50
LmdldCgpKTsKLSAgICBpZiAoZXJyb3JDb2RlID09IGVyclNlY0NTVW5zaWduZWQgfHwgZXJyb3JD
b2RlID09IGVyclNlY0NTUmVxRmFpbGVkKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7IC8vIFVu
c2lnbmVkIG9yIHNpZ25lZCBieSBhIHRoaXJkLXBhcnR5Ci0gICAgUkVMRUFTRV9BU1NFUlRfV0lU
SF9NRVNTQUdFKCFlcnJvckNvZGUsICJTZWNDb2RlQ2hlY2tWYWxpZGl0eSgpIGZhaWxlZCB3aXRo
IGVycm9yOiAlbGQiLCBzdGF0aWNfY2FzdDxsb25nPihlcnJvckNvZGUpKTsKLSAgICBTdHJpbmcg
Y29kZVNpZ25pbmdJZGVudGlmaWVyOwotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHNp
Z25pbmdJbmZvID0gc2VjQ29kZVNpZ25pbmdJbmZvcm1hdGlvbihjb2RlKTsKLSAgICBpZiAoQ0ZE
aWN0aW9uYXJ5UmVmIHBsaXN0ID0gZHluYW1pY19jZl9jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUoc2lnbmluZ0luZm8uZ2V0KCksIGtTZWNDb2RlSW5mb1BMaXN0KSkp
Ci0gICAgICAgIGNvZGVTaWduaW5nSWRlbnRpZmllciA9IGR5bmFtaWNfY2ZfY2FzdDxDRlN0cmlu
Z1JlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocGxpc3QsIGtDRkJ1bmRsZUlkZW50aWZpZXJLZXkp
KTsKLSAgICBlbHNlCi0gICAgICAgIGNvZGVTaWduaW5nSWRlbnRpZmllciA9IGR5bmFtaWNfY2Zf
Y2FzdDxDRlN0cmluZ1JlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoc2lnbmluZ0luZm8uZ2V0KCks
IGtTZWNDb2RlSW5mb0lkZW50aWZpZXIpKTsKLSAgICBSRUxFQVNFX0FTU0VSVCghY29kZVNpZ25p
bmdJZGVudGlmaWVyLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIGNvZGVTaWduaW5nSWRlbnRpZmll
cjsKKyAgICBSRUxFQVNFX0FTU0VSVCh0YXNrKTsKKyAgICByZXR1cm4gYWRvcHRDRihTZWNUYXNr
Q29weVNpZ25pbmdJZGVudGlmaWVyKHRhc2ssIG51bGxwdHIpKS5nZXQoKTsKIH0KKyNlbmRpZgog
CiBTdHJpbmcgY29kZVNpZ25pbmdJZGVudGlmaWVyKCkKIHsKLSAgICByZXR1cm4gc2VjQ29kZVNp
Z25pbmdJZGVudGlmaWVyKHNlY0NvZGVGb3JDdXJyZW50UHJvY2VzcygpLmdldCgpKTsKKyNpZiBf
X01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMAorICAgIHJldHVybiBzZWNU
YXNrQ29kZVNpZ25pbmdJZGVudGlmaWVyKGFkb3B0Q0YoU2VjVGFza0NyZWF0ZUZyb21TZWxmKGtD
RkFsbG9jYXRvckRlZmF1bHQpKS5nZXQoKSk7CisjZWxzZQorICAgIHJldHVybiB7IH07CisjZW5k
aWYKIH0KIAotU3RyaW5nIGNvZGVTaWduaW5nSWRlbnRpZmllckZvclByb2Nlc3MocGlkX3QgcGlk
KQorU3RyaW5nIGNvZGVTaWduaW5nSWRlbnRpZmllckZyb21YUENDb25uZWN0aW9uKHhwY19jb25u
ZWN0aW9uX3QgY29ubmVjdGlvbikKIHsKLSAgICBhdXRvIGNvZGUgPSBzZWNDb2RlRm9yUHJvY2Vz
cyhwaWQpOwotICAgIGlmICghY29kZSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJl
dHVybiBzZWNDb2RlU2lnbmluZ0lkZW50aWZpZXIoY29kZS5nZXQoKSk7CisjaWYgX19NQUNfT1Nf
WF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAKKyAgICBhdWRpdF90b2tlbl90IGF1ZGl0
VG9rZW47CisgICAgeHBjX2Nvbm5lY3Rpb25fZ2V0X2F1ZGl0X3Rva2VuKGNvbm5lY3Rpb24sICZh
dWRpdFRva2VuKTsKKyAgICByZXR1cm4gc2VjVGFza0NvZGVTaWduaW5nSWRlbnRpZmllcihhZG9w
dENGKFNlY1Rhc2tDcmVhdGVXaXRoQXVkaXRUb2tlbihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBhdWRp
dFRva2VuKSkuZ2V0KCkpOworI2Vsc2UKKyAgICByZXR1cm4geyB9OworI2VuZGlmCiB9Ci0gICAg
CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQo=
</data>
<flag name="review"
          id="302729"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>