<?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>32326</bug_id>
          
          <creation_ts>2009-12-09 09:50:00 -0800</creation_ts>
          <short_desc>Refactor some security code out of V8 bindings</short_desc>
          <delta_ts>2009-12-13 21:01:21 -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>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Charles Reis">creis</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>creis</cc>
    
    <cc>mjs</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yaar</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>170025</commentid>
    <comment_count>0</comment_count>
    <who name="Charles Reis">creis</who>
    <bug_when>2009-12-09 09:50:00 -0800</bug_when>
    <thetext>As a first step toward sharing code between the V8 and JSC bindings, we should try to refactor some of V8&apos;s code for enforcing the Same Origin Policy.  I suggest moving canAccessFrame and checkNodeSecurity from V8Proxy to a new BindingsSecurity class that can be used by multiple bindings.  Since JSC passes around execution state explicitly and V8 does not, the BindingsSecurity interface should be able to take in execution state as an argument.

There has been some discussion about starting to share bindings code in this thread:
http://lists.macosforge.org/pipermail/webkit-dev/2009-May/007935.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170028</commentid>
    <comment_count>1</comment_count>
      <attachid>44542</attachid>
    <who name="Charles Reis">creis</who>
    <bug_when>2009-12-09 10:01:05 -0800</bug_when>
    <thetext>Created attachment 44542
Moves V8&apos;s canAccessFrame and checkNodeSecurity to a new BindingsSecurity class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170036</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-09 10:14:23 -0800</bug_when>
    <thetext>Attachment 44542 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/bindings/v8/custom/V8LocationCustom.cpp:42:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/v8/custom/V8LocationCustom.cpp:222:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/bindings/v8/custom/V8LocationCustom.cpp:240:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/bindings/v8/custom/V8LocationCustom.cpp:259:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170042</commentid>
    <comment_count>3</comment_count>
      <attachid>44544</attachid>
    <who name="Charles Reis">creis</who>
    <bug_when>2009-12-09 10:34:39 -0800</bug_when>
    <thetext>Created attachment 44544
Fixes issues from the style-queue bot</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170043</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-09 10:35:20 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 44544 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170045</commentid>
    <comment_count>5</comment_count>
      <attachid>44544</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-09 10:40:34 -0800</bug_when>
    <thetext>Comment on attachment 44544
Fixes issues from the style-queue bot

Thanks for fixing the style nits.  At a high level, this looks great. I have a few questions:

+ virtual DOMWindow* getActiveWindow() = 0;

Does this need to be virtual, or can we do link-time dispatch here?

+ // Implement BindingsSecurity methods that depend on V8-specific code.

Don&apos;t we want to implement this in a V8BindingsSecurity.cpp file instead of
V8Proxy?  V8Proxy is an all-sing, all-dance dumping ground.

+ class V8State : public BindingsState {

I&apos;d call this V8BindingsState to mirror the DOMWindow / V8DOMWindow name
convention.

In general, it&apos;s slightly unclear to me whether we actually want a
V8BindingsState object that derives from BindingsState or whether we want to
have a single class where some of the methods are implemented by the different
bindings, like ScriptController.  The advantage of the latter is that we&apos;ll get
compile-time dispatch instead of runtime dispatch.

Another option is to have a shared BindingsStateBase and V8 implement a
subclass BindingsState that the shared code refers to.  That way, the bindings
can override whatever methods they need without incurring a virtual method
call.

A final option is to use template namespaces.  These shared classes would be

template&lt;classname Bindings&gt;
class ...

and then refer to Bindings::State.  Then we can have V8Binding::State derive
from GenericBinding::State.  That&apos;s more code, but it might make it easier to
support things like re-using this code for ObjCBindings::State, etc.

Thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170048</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-09 10:48:11 -0800</bug_when>
    <thetext>Anding some more folks in case they&apos;d like to have input at this early stage.  We&apos;re starting small to make sure we get started in the right direction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170151</commentid>
    <comment_count>7</comment_count>
    <who name="Charles Reis">creis</who>
    <bug_when>2009-12-09 13:43:28 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 44544 [details])
&gt; Thanks for fixing the style nits.  At a high level, this looks great. I have a
&gt; few questions:
&gt; 
&gt; + virtual DOMWindow* getActiveWindow() = 0;
&gt; 
&gt; Does this need to be virtual, or can we do link-time dispatch here?
&gt; 

(See below)

&gt; + // Implement BindingsSecurity methods that depend on V8-specific code.
&gt; 
&gt; Don&apos;t we want to implement this in a V8BindingsSecurity.cpp file instead of
&gt; V8Proxy?  V8Proxy is an all-sing, all-dance dumping ground.
&gt; 

Well, reportUnsafeAccessTo (and the enum it relies on) looks like it&apos;s only definied within V8Proxy.cpp, but I could move it to be a static member of V8Proxy that we can call outside V8Proxy.cpp.

I could also move the immediatelyReportUnsafeAccessTo method to the BindingsState class, since that already has bindings-specific code.  That&apos;ll clean up BindingsSecurity so that it&apos;s all shared code.


&gt; + class V8State : public BindingsState {
&gt; 
&gt; I&apos;d call this V8BindingsState to mirror the DOMWindow / V8DOMWindow name
&gt; convention.
&gt; 
&gt; In general, it&apos;s slightly unclear to me whether we actually want a
&gt; V8BindingsState object that derives from BindingsState or whether we want to
&gt; have a single class where some of the methods are implemented by the different
&gt; bindings, like ScriptController.  The advantage of the latter is that we&apos;ll get
&gt; compile-time dispatch instead of runtime dispatch.
&gt; 
&gt; Another option is to have a shared BindingsStateBase and V8 implement a
&gt; subclass BindingsState that the shared code refers to.  That way, the bindings
&gt; can override whatever methods they need without incurring a virtual method
&gt; call.
&gt; 
&gt; A final option is to use template namespaces.  These shared classes would be
&gt; 
&gt; template&lt;classname Bindings&gt;
&gt; class ...
&gt; 
&gt; and then refer to Bindings::State.  Then we can have V8Binding::State derive
&gt; from GenericBinding::State.  That&apos;s more code, but it might make it easier to
&gt; support things like re-using this code for ObjCBindings::State, etc.
&gt; 
&gt; Thoughts?

 I think the template approach is probably the most flexible (while still giving us compile-time dispatch).  I&apos;ll look into it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170832</commentid>
    <comment_count>8</comment_count>
      <attachid>44696</attachid>
    <who name="Charles Reis">creis</who>
    <bug_when>2009-12-11 10:51:08 -0800</bug_when>
    <thetext>Created attachment 44696
Update BindingSecurity class to use templates

This updated patch makes BindingSecurity a template class so that each binding will be able to implement things it depends on, like execution state, without needing virtual methods.  I threw in a few typedefs to make the code easier to use at the call sites.

I also made the error reporting function visible outside V8Proxy.cpp so that we can call it.

Thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170834</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-11 10:53:44 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 44696 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170893</commentid>
    <comment_count>10</comment_count>
      <attachid>44696</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-11 13:08:59 -0800</bug_when>
    <thetext>Comment on attachment 44696
Update BindingSecurity class to use templates

This looks like a great first step.  I&apos;ve noted a few formatting issues below.  There are a couple of things that I&apos;m not sure how they&apos;ll scale up when we convert more of the bindings, but they&apos;re fine for now.  We can revisit them if the code isn&apos;t growing the right direction.

+ template &lt;class Binding&gt; class BindingSecurity {

I think we&apos;d prefer

+ template &lt;class Binding&gt;
+ class BindingSecurity {

(meaning a line break)

+ class BindingSecurityHelper

I&apos;m not entirely sold on this class.  We might need to see more examples to see what the best general pattern is for this kind of thing.

+ typedef BindingSecurity&lt;V8Binding&gt; V8BindingSecurity;

I&apos;m also not sure how this will scale.  It&apos;s fine here though.

+ template &lt;&gt; class State&lt;V8Binding&gt; : public State&lt;GenericBinding&gt; {

We&apos;d also like a line break here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170896</commentid>
    <comment_count>11</comment_count>
    <who name="Charles Reis">creis</who>
    <bug_when>2009-12-11 13:27:47 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 44696 [details])
&gt; This looks like a great first step.  I&apos;ve noted a few formatting issues below. 
&gt; There are a couple of things that I&apos;m not sure how they&apos;ll scale up when we
&gt; convert more of the bindings, but they&apos;re fine for now.  We can revisit them if
&gt; the code isn&apos;t growing the right direction.
&gt; 
&gt; + template &lt;class Binding&gt; class BindingSecurity {
&gt; 
&gt; I think we&apos;d prefer
&gt; 
&gt; + template &lt;class Binding&gt;
&gt; + class BindingSecurity {
&gt; 
&gt; (meaning a line break)
&gt; 

Sure, I&apos;ll upload a patch in just a minute with linebreaks on all the templates.

&gt; + class BindingSecurityHelper
&gt; 
&gt; I&apos;m not entirely sold on this class.  We might need to see more examples to see
&gt; what the best general pattern is for this kind of thing.
&gt; 

I wasn&apos;t thrilled about this, but it seemed the best approach.  That is, I don&apos;t think files like DOMWindow.h are supposed to be included in header files like BindingSecurity.h.  For example, it was causing stack corruption problems for me in V8 code.

On the flip side, templates won&apos;t link unless you forward declare all your instantiations in the cpp file (which is undesirable), or unless you include the method implementations in the header file (which appears to be common in WebKit).

This helper class at least solves both problems-- it lets us call methods on the WebCore types while keeping them opaque in BindingSecurity.h.


&gt; + typedef BindingSecurity&lt;V8Binding&gt; V8BindingSecurity;
&gt; 
&gt; I&apos;m also not sure how this will scale.  It&apos;s fine here though.
&gt; 

I was just using it to make the call sites a little shorter-- I&apos;m not too attached to it in the long run.

&gt; + template &lt;&gt; class State&lt;V8Binding&gt; : public State&lt;GenericBinding&gt; {
&gt; 
&gt; We&apos;d also like a line break here.

Sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170899</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-11 13:32:20 -0800</bug_when>
    <thetext>&gt; I wasn&apos;t thrilled about this, but it seemed the best approach.

Another option to consider is a non-template base class.  That can implement its methods in its own cpp file.  I&apos;m not sure if that scales either.  I&apos;m inclined to try this.  As we do move of this work, the right answer will likely reveal itself.

Another option, by the way, is to move this code into WebCore proper.  If it doesn&apos;t need to call back into the bindings, the dependencies allow it escape from the bindings directory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170900</commentid>
    <comment_count>13</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-11 13:34:29 -0800</bug_when>
    <thetext>There&apos;s also the ScriptState abstraction, but I think this code is different.  Basically ScriptState is part of WebCore&apos;s view of the bindings.  This code is internal to the bindings themselves.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170942</commentid>
    <comment_count>14</comment_count>
      <attachid>44709</attachid>
    <who name="Charles Reis">creis</who>
    <bug_when>2009-12-11 14:56:27 -0800</bug_when>
    <thetext>Created attachment 44709
Adds newlines and a BindingSecurityBase class

I took Adam&apos;s suggestion to make BindingSecurityHelper into BindingSecurityBase, and I added the requested newlines.

I&apos;m inclined to think that this code should stay in the bindings directory, but if WebCore proper has a better place for it, that&apos;s fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170947</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-11 14:59:48 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 44709 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170951</commentid>
    <comment_count>16</comment_count>
      <attachid>44709</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-11 15:13:00 -0800</bug_when>
    <thetext>Comment on attachment 44709
Adds newlines and a BindingSecurityBase class

This looks great.  I&apos;m going to wait a bit before landing this in case someone else wants to give their opinion.

+ DEFINE_STATIC_LOCAL(State, globalV8BindingState, ());

I&apos;m surprised that compiles without the template paramater, but if it does that&apos;s fine.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171289</commentid>
    <comment_count>17</comment_count>
      <attachid>44709</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-13 21:01:13 -0800</bug_when>
    <thetext>Comment on attachment 44709
Adds newlines and a BindingSecurityBase class

Clearing flags on attachment: 44709

Committed r52080: &lt;http://trac.webkit.org/changeset/52080&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171290</commentid>
    <comment_count>18</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-13 21:01:21 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44542</attachid>
            <date>2009-12-09 10:01:05 -0800</date>
            <delta_ts>2009-12-09 10:34:39 -0800</delta_ts>
            <desc>Moves V8&apos;s canAccessFrame and checkNodeSecurity to a new BindingsSecurity class</desc>
            <filename>bindings-security-patch.txt</filename>
            <type>text/plain</type>
            <size>41177</size>
            <attacher name="Charles Reis">creis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTkwMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTEgQEAKKzIwMDktMTItMDkgIENoYXJsZXMgUmVpcyAgPGNyZWlzQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBS
ZWZhY3RvciBzb21lIHNlY3VyaXR5IGNvZGUgb3V0IG9mIFY4IGJpbmRpbmdzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjMyNgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cy4gVGhlcmUgc2hvdWxkIGJlIG5vIGZ1bmN0aW9uYWxpdHkgY2hhbmdlcyBpbiB0
aGlzIHBhdGNoLAorICAgICAgICBzaW5jZSBpdCBpcyBvbmx5IHJlZmFjdG9yaW5nIGNvZGUuCisK
KyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAgKiBXZWJDb3JlLmd5
cGk6CisgICAgICAgICogYmluZGluZ3MvQmluZGluZ3NTZWN1cml0eS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6QmluZGluZ3NTZWN1cml0eTo6Y2FuQWNjZXNzV2luZG93KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpbmRpbmdzU2VjdXJpdHk6OmNhbkFjY2Vzc0ZyYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpbmRpbmdzU2VjdXJpdHk6OmNoZWNrTm9kZVNlY3VyaXR5KToKKyAgICAgICAg
KiBiaW5kaW5ncy9CaW5kaW5nc1NlY3VyaXR5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
QmluZGluZ3NTZWN1cml0eTo6QmluZGluZ3NTZWN1cml0eSk6CisgICAgICAgICogYmluZGluZ3Mv
QmluZGluZ3NTdGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmlzU2FmZVNjcmlwdCk6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaW5k
aW5nc1NlY3VyaXR5OjppbW1lZGlhdGVseVJlcG9ydFVuc2FmZUFjY2Vzc1RvKToKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9WOFByb3h5Lmg6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhTdGF0ZS5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VjhTdGF0ZTo6T25seSk6CisgICAgICAgIChX
ZWJDb3JlOjpWOFN0YXRlOjpnZXRBY3RpdmVXaW5kb3cpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L1Y4U3RhdGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpWOFN0YXRlOjpWOFN0YXRlKToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmFsbG93U2V0dGluZ0ZyYW1lU3JjVG9KYXZhc2NyaXB0VXJsKToKKyAgICAg
ICAgKFdlYkNvcmU6OklOREVYRURfQUNDRVNTX0NIRUNLKToKKyAgICAgICAgKFdlYkNvcmU6Ok5B
TUVEX0FDQ0VTU19DSEVDSyk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2lu
ZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9tOjpXaW5kb3dTZXRUaW1l
b3V0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpBQ0NFU1NPUl9HRVRURVIpOgorICAgICAgICAo
V2ViQ29yZTo6QUNDRVNTT1JfU0VUVEVSKToKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZV
TkNfREVDTCk6CisgICAgICAgIChXZWJDb3JlOjpWOEN1c3RvbTo6Q2xlYXJUaW1lb3V0SW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpOQU1FRF9BQ0NFU1NfQ0hFQ0spOgorICAgICAgICAoV2ViQ29y
ZTo6SU5ERVhFRF9BQ0NFU1NfQ0hFQ0spOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9W
OExvY2F0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFDQ0VTU09SX0dFVFRFUik6
CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAoV2ViQ29y
ZTo6SU5ERVhFRF9BQ0NFU1NfQ0hFQ0spOgorICAgICAgICAoV2ViQ29yZTo6TkFNRURfQUNDRVNT
X0NIRUNLKToKKwogMjAwOS0xMi0wOSAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9XZWJD
b3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDUx
ODg0KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTQzNCw2ICs0
MzQsOSBAQAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvd2luL0FjY2Vzc2liaWxpdHlPYmpl
Y3RXaW4uY3BwJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L3dpbi9BY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlcldpbi5oJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L3d4L0FjY2Vz
c2liaWxpdHlPYmplY3RXeC5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL0JpbmRpbmdzU2Vj
dXJpdHkuY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy9CaW5kaW5nc1NlY3VyaXR5LmgnLAor
ICAgICAgICAgICAgJ2JpbmRpbmdzL0JpbmRpbmdzU3RhdGUuaCcsCiAgICAgICAgICAgICAnYmlu
ZGluZ3MvanMvQ2FjaGVkU2NyaXB0U291cmNlUHJvdmlkZXIuaCcsCiAgICAgICAgICAgICAnYmlu
ZGluZ3MvanMvRE9NT2JqZWN0V2l0aFNWR0NvbnRleHQuaCcsCiAgICAgICAgICAgICAnYmluZGlu
Z3MvanMvR0NDb250cm9sbGVyLmNwcCcsCkBAIC04MjksNiArODMyLDggQEAKICAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9WOE5vZGVGaWx0ZXJDb25kaXRpb24uaCcsCiAgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvVjhQcm94eS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4UHJveHku
aCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhTdGF0ZS5jcHAnLAorICAgICAgICAgICAg
J2JpbmRpbmdzL3Y4L1Y4U3RhdGUuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhTVkdQ
T0RUeXBlV3JhcHBlci5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOFV0aWxpdGllcy5j
cHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4VXRpbGl0aWVzLmgnLApJbmRleDogV2Vi
Q29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUuZ3lwL1dlYkNvcmUuZ3lwCShyZXZpc2lvbiA1MTg4NCkKKysrIFdlYkNvcmUvV2ViQ29yZS5n
eXAvV2ViQ29yZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw2ICsxMDYsNyBAQAogICAgICAg
Jy4uLycsCiAgICAgICAnLi4vYWNjZXNzaWJpbGl0eScsCiAgICAgICAnLi4vYWNjZXNzaWJpbGl0
eS9jaHJvbWl1bScsCisgICAgICAnLi4vYmluZGluZ3MnLAogICAgICAgJy4uL2JpbmRpbmdzL3Y4
JywKICAgICAgICcuLi9iaW5kaW5ncy92OC9jdXN0b20nLAogICAgICAgJy4uL2JyaWRnZScsCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL0JpbmRpbmdzU2VjdXJpdHkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvQmluZGluZ3NTZWN1cml0eS5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL0JpbmRpbmdzU2VjdXJpdHkuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCaW5kaW5nc1NlY3Vy
aXR5LmgiCisKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gU2Ft
ZSBvcmlnaW4gcG9saWN5IGltcGxlbWVudGF0aW9uOgorLy8KKy8vIFNhbWUgb3JpZ2luIHBvbGlj
eSBwcmV2ZW50cyBKUyBjb2RlIGZyb20gZG9tYWluIEEgZnJvbSBhY2Nlc3NpbmcgSlMgJiBET00K
Ky8vIG9iamVjdHMgaW4gYSBkaWZmZXJlbnQgZG9tYWluIEIuIFRoZXJlIGFyZSBleGNlcHRpb25z
IGFuZCBzZXZlcmFsIG9iamVjdHMKKy8vIGFyZSBhY2Nlc3NpYmxlIGJ5IGNyb3NzLWRvbWFpbiBj
b2RlLiBGb3IgZXhhbXBsZSwgdGhlIHdpbmRvdy5mcmFtZXMgb2JqZWN0CisvLyBpcyBhY2Nlc3Np
YmxlIGJ5IGNvZGUgZnJvbSBhIGRpZmZlcmVudCBkb21haW4sIGJ1dCB3aW5kb3cuZG9jdW1lbnQg
aXMgbm90LgorLy8KKy8vIFRoZSBKUyBiaW5kaW5nIGNvZGUgc2V0cyBzZWN1cml0eSBjaGVjayBj
YWxsYmFja3Mgb24gYSBmdW5jdGlvbiB0ZW1wbGF0ZSwKKy8vIGFuZCBhY2Nlc3NpbmcgaW5zdGFu
Y2VzIG9mIHRoZSB0ZW1wbGF0ZSBjYWxscyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uCisvLyBUaGUg
Y2FsbGJhY2sgZnVuY3Rpb24gZW5mb3JjZXMgdGhlIHNhbWUgb3JpZ2luIHBvbGljeS4KKy8vCisv
LyBDYWxsYmFjayBmdW5jdGlvbnMgYXJlIGV4cGVuc2l2ZS4gQmluZGluZyBjb2RlIHNob3VsZCB1
c2UgYSBzZWN1cml0eSB0b2tlbgorLy8gc3RyaW5nIHRvIGRvIGZhc3QgYWNjZXNzIGNoZWNrcyBm
b3IgdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHNvdXJjZSBhbmQgdGFyZ2V0CisvLyBhcmUgaW4gdGhl
IHNhbWUgZG9tYWluLiBBIHNlY3VyaXR5IHRva2VuIGlzIGEgc3RyaW5nIG9iamVjdCB0aGF0IHJl
cHJlc2VudHMKKy8vIHRoZSBwcm90b2NvbC91cmwvcG9ydCBvZiBhIGRvbWFpbi4KKy8vCisvLyBU
aGVyZSBhcmUgc3BlY2lhbCBjYXNlcyB3aGVyZSBzZWN1cml0eSB0b2tlbiBtYXRjaGluZyBpcyBu
b3QgZW5vdWdoLgorLy8gRm9yIGV4YW1wbGUsIEpTIGNhbiBzZXQgaXRzIGRvbWFpbiB0byBhIHN1
cGVyIGRvbWFpbiBieSBjYWxsaW5nCisvLyBkb2N1bWVudC5zZXREb21haW4oLi4uKS4gSW4gdGhl
c2UgY2FzZXMsIHRoZSBiaW5kaW5nIGNvZGUgY2FuIHJlc2V0CisvLyBhIGNvbnRleHQncyBzZWN1
cml0eSB0b2tlbiB0byBpdHMgZ2xvYmFsIG9iamVjdCBzbyB0aGF0IHRoZSBmYXN0IGFjY2Vzcwor
Ly8gY2hlY2sgd2lsbCBhbHdheXMgZmFpbC4KKworLy8gSGVscGVyIHRvIGNoZWNrIGlmIHRoZSBj
dXJyZW50IGV4ZWN1dGlvbiBjb250ZXh0IGNhbiBhY2Nlc3MgYSB0YXJnZXQgZnJhbWUuCisvLyBG
aXJzdCBpdCBjaGVja3Mgc2FtZSBkb21haW4gcG9saWN5IHVzaW5nIHRoZSBsZXhpY2FsIGNvbnRl
eHQuCisvLworLy8gVGhpcyBpcyBlcXVpdmFsZW50IHRvIEtKUzo6V2luZG93OjphbGxvd3NBY2Nl
c3NGcm9tKEV4ZWNTdGF0ZSopLgorYm9vbCBCaW5kaW5nc1NlY3VyaXR5OjpjYW5BY2Nlc3NXaW5k
b3coQmluZGluZ3NTdGF0ZSogc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBET01XaW5kb3cqIHRhcmdldFdpbmRvdykKK3sKKyAgICBBU1NFUlQodGFyZ2V0V2lu
ZG93KTsKKworICAgIFN0cmluZyBtZXNzYWdlOworCisgICAgRE9NV2luZG93KiBhY3RpdmVXaW5k
b3cgPSBzdGF0ZS0+Z2V0QWN0aXZlV2luZG93KCk7CisgICAgaWYgKGFjdGl2ZVdpbmRvdyA9PSB0
YXJnZXRXaW5kb3cpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKCFhY3RpdmVXaW5k
b3cpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IFNlY3VyaXR5T3JpZ2luKiBh
Y3RpdmVTZWN1cml0eU9yaWdpbiA9IGFjdGl2ZVdpbmRvdy0+c2VjdXJpdHlPcmlnaW4oKTsKKyAg
ICBjb25zdCBTZWN1cml0eU9yaWdpbiogdGFyZ2V0U2VjdXJpdHlPcmlnaW4gPSB0YXJnZXRXaW5k
b3ctPnNlY3VyaXR5T3JpZ2luKCk7CisKKyAgICAvLyBXZSBoYXZlIHNlZW4gY3Jhc2hlcyB3ZXJl
IHRoZSBzZWN1cml0eSBvcmlnaW4gb2YgdGhlIHRhcmdldCBoYXMgbm90IGJlZW4KKyAgICAvLyBp
bml0aWFsaXplZC4gRGVmZW5kIGFnYWluc3QgdGhhdC4KKyAgICBpZiAoIXRhcmdldFNlY3VyaXR5
T3JpZ2luKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYWN0aXZlU2VjdXJpdHlP
cmlnaW4tPmNhbkFjY2Vzcyh0YXJnZXRTZWN1cml0eU9yaWdpbikpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgLy8gQWxsb3cgYWNjZXNzIHRvIGEgImFib3V0OmJsYW5rIiBwYWdlIGlmIHRo
ZSBkeW5hbWljIGNvbnRleHQgaXMgYQorICAgIC8vIGRldGFjaGVkIGNvbnRleHQgb2YgdGhlIHNh
bWUgZnJhbWUgYXMgdGhlIGJsYW5rIHBhZ2UuCisgICAgaWYgKHRhcmdldFNlY3VyaXR5T3JpZ2lu
LT5pc0VtcHR5KCkgJiYgYWN0aXZlV2luZG93LT5mcmFtZSgpID09IHRhcmdldFdpbmRvdy0+ZnJh
bWUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgQmluZGluZ3NTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoQmluZGluZ3NTdGF0ZSogc3RhdGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYW1lKiB0YXJnZXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVwb3J0RXJyb3IpCit7
CisgICAgLy8gVGhlIHN1YmplY3QgaXMgZGV0YWNoZWQgZnJvbSBhIGZyYW1lLCBkZW55IGFjY2Vz
c2VzLgorICAgIGlmICghdGFyZ2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
IWNhbkFjY2Vzc1dpbmRvdyhzdGF0ZSwgdGFyZ2V0LT5kb21XaW5kb3coKSkpIHsKKyAgICAgICAg
aWYgKHJlcG9ydEVycm9yKQorICAgICAgICAgICAgaW1tZWRpYXRlbHlSZXBvcnRVbnNhZmVBY2Nl
c3NUbyh0YXJnZXQpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0
cnVlOworfQorCitib29sIEJpbmRpbmdzU2VjdXJpdHk6OmNoZWNrTm9kZVNlY3VyaXR5KEJpbmRp
bmdzU3RhdGUqIHN0YXRlLCBOb2RlKiBub2RlKQoreworICAgIGlmICghbm9kZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgRnJhbWUqIHRhcmdldCA9IG5vZGUtPmRvY3VtZW50KCktPmZy
YW1lKCk7CisKKyAgICBpZiAoIXRhcmdldCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmV0dXJuIGNhbkFjY2Vzc0ZyYW1lKHN0YXRlLCB0YXJnZXQsIHRydWUpOworfQorCit9ICAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9CaW5kaW5nc1NlY3VyaXR5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9CaW5kaW5nc1NlY3VyaXR5LmgJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL0JpbmRpbmdzU2VjdXJpdHkuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQmluZGluZ3NTZWN1cml0eV9oCisjZGVm
aW5lIEJpbmRpbmdzU2VjdXJpdHlfaAorCisjaW5jbHVkZSAiQmluZGluZ3NTdGF0ZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERPTVdpbmRvdzsKK2NsYXNzIEZyYW1lOworY2xh
c3MgTm9kZTsKKworLy8gU2VjdXJpdHkgZnVuY3Rpb25zIHNoYXJlZCBieSB2YXJpb3VzIGxhbmd1
YWdlIGJpbmRpbmdzLgorY2xhc3MgQmluZGluZ3NTZWN1cml0eSB7CitwdWJsaWM6CisgICAgLy8g
Q2hlY2sgaWYgdGhlIGFjdGl2ZSBleGVjdXRpb24gY29udGV4dCBjYW4gYWNjZXNzIHRoZSB0YXJn
ZXQgZnJhbWUuCisgICAgc3RhdGljIGJvb2wgY2FuQWNjZXNzRnJhbWUoQmluZGluZ3NTdGF0ZSos
IEZyYW1lKiwgYm9vbCByZXBvcnRFcnJvcik7CisKKyAgICAvLyBDaGVjayBpZiBpdCBpcyBzYWZl
IHRvIGFjY2VzcyB0aGUgZ2l2ZW4gbm9kZSBmcm9tIHRoZQorICAgIC8vIGN1cnJlbnQgc2VjdXJp
dHkgY29udGV4dC4KKyAgICBzdGF0aWMgYm9vbCBjaGVja05vZGVTZWN1cml0eShCaW5kaW5nc1N0
YXRlKiwgTm9kZSogdGFyZ2V0KTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBCaW5kaW5nc1Nl
Y3VyaXR5KCkge30KKyAgICB+QmluZGluZ3NTZWN1cml0eSgpOworCisgICAgLy8gQ2hlY2sgaWYg
dGhlIGN1cnJlbnQgRE9NV2luZG93J3Mgc2VjdXJpdHkgY29udGV4dCBjYW4gYWNjZXNzIHRoZSB0
YXJnZXQKKyAgICAvLyBET01XaW5kb3cuICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHJlcG9ydCBl
cnJvcnMsIHNvIG1vc3QgY2FsbGVycyBzaG91bGQKKyAgICAvLyB1c2UgY2FuQWNjZXNzRnJhbWUg
aW5zdGVhZC4KKyAgICBzdGF0aWMgYm9vbCBjYW5BY2Nlc3NXaW5kb3coQmluZGluZ3NTdGF0ZSos
IERPTVdpbmRvdyogdGFyZ2V0KTsKKworICAgIC8vIEFueSBmdW5jdGlvbnMgYmVsb3cgbXVzdCBi
ZSBpbXBsZW1lbnRlZCBieSBlYWNoIHNldCBvZiBiaW5kaW5ncywgc2luY2UKKyAgICAvLyB0aGV5
IGFyZSBoZWF2aWx5IGltcGxlbWVudGF0aW9uLXNwZWNpZmljLgorICAgIC8vIEZJWE1FOiBNb3Zl
IGZ1bmN0aW9ucyBsaWtlIHRoaXMgb250byBzb21lIGNhbGxiYWNrIGludGVyZmFjZS4gIFRoZXkn
cmUKKyAgICAvLyBjdXJyZW50bHkganVzdCBsaW5raW5nIGFnYWluc3QgY29kZSBpbiBlYWNoIHNw
ZWNpZmljIGJpbmRpbmcuCisKKyAgICAvLyBSZXBvcnRzIGFuIGVycm9yIG1lc3NhZ2UgKHdpdGhv
dXQgZGVsYXkpIGlmIHRoZSBzZWN1cml0eSBjaGVjayBmYWlscy4KKyAgICBzdGF0aWMgdm9pZCBp
bW1lZGlhdGVseVJlcG9ydFVuc2FmZUFjY2Vzc1RvKEZyYW1lKik7Cit9OworCit9CisKKyNlbmRp
ZiAvLyBCaW5kaW5nc1NlY3VyaXR5X2gKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvQmluZGluZ3NT
dGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvQmluZGluZ3NTdGF0ZS5oCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9CaW5kaW5nc1N0YXRlLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJpbmRpbmdzU3RhdGVfaAorI2RlZmluZSBC
aW5kaW5nc1N0YXRlX2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBET01XaW5kb3c7
CisKKy8vIENvbW1vbiBub3Rpb24gb2YgZXhlY3V0aW9uIHN0YXRlIGZvciBsYW5ndWFnZSBiaW5k
aW5ncy4KK2NsYXNzIEJpbmRpbmdzU3RhdGUgeworcHVibGljOgorICAgIC8vIFRoZSBET01XaW5k
b3cgY29ycmVzcG9uZGluZyB0byB0aGUgJ2NhbGxpbmcgY29udGV4dCcgb2YgZXhlY3V0aW9uLgor
ICAgIHZpcnR1YWwgRE9NV2luZG93KiBnZXRBY3RpdmVXaW5kb3coKSA9IDA7Cit9OworCit9CisK
KyNlbmRpZiAvLyBCaW5kaW5nc1N0YXRlX2gKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNpb24gNTE4ODQpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBAIC00MDEsNyAr
NDAxLDcgQEAgRU5ECiAgICAgSG9sZGVyVG9OYXRpdmUoJGRhdGFOb2RlLCAkaW1wbENsYXNzTmFt
ZSwgJGNsYXNzSW5kZXgpOwogCiAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgPDxFTkQpOwot
ICAgIGlmICghVjhQcm94eTo6Y2FuQWNjZXNzRnJhbWUoaW1wLT5mcmFtZSgpLCBmYWxzZSkpIHsK
KyAgICBpZiAoIUJpbmRpbmdzU2VjdXJpdHk6OmNhbkFjY2Vzc0ZyYW1lKFY4U3RhdGU6Ok9ubHko
KSwgaW1wLT5mcmFtZSgpLCBmYWxzZSkpIHsKICAgICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gc2hhcmVkX3RlbXBsYXRlID0KICAgICAgICAgdjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+OjpOZXcoJG5ld1RlbXBsYXRlU3RyaW5nKTsKICAg
ICAgIHJldHVybiBzaGFyZWRfdGVtcGxhdGUtPkdldEZ1bmN0aW9uKCk7CkBAIC01NDgsOSArNTQ4
LDkgQEAgRU5ECiAKICAgICAjIEdlbmVyYXRlIHNlY3VyaXR5IGNoZWNrcyBpZiBuZWNlc3NhcnkK
ICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2hl
Y2tOb2RlU2VjdXJpdHkifSkgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAg
IGlmICghVjhQcm94eTo6Y2hlY2tOb2RlU2VjdXJpdHkoaW1wLT4kYXR0ck5hbWUoKSkpIHJldHVy
biB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTtcblxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250
ZW50RGVjbHMsICIgICAgaWYgKCFCaW5kaW5nc1NlY3VyaXR5OjpjaGVja05vZGVTZWN1cml0eShW
OFN0YXRlOjpPbmx5KCksIGltcC0+JGF0dHJOYW1lKCkpKSByZXR1cm4gdjg6OkhhbmRsZTx2ODo6
VmFsdWU+KCk7XG5cbiIpOwogICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkNoZWNrRnJhbWVTZWN1cml0eSJ9KSB7Ci0gICAgICAgIHB1c2go
QGltcGxDb250ZW50RGVjbHMsICIgICAgaWYgKCFWOFByb3h5OjpjaGVja05vZGVTZWN1cml0eShp
bXAtPmNvbnRlbnREb2N1bWVudCgpKSkgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpO1xu
XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBpZiAoIUJpbmRpbmdz
U2VjdXJpdHk6OmNoZWNrTm9kZVNlY3VyaXR5KFY4U3RhdGU6Ok9ubHkoKSwgaW1wLT5jb250ZW50
RG9jdW1lbnQoKSkpIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTtcblxuIik7CiAgICAg
fQogCiAgICAgbXkgJHVzZUV4Y2VwdGlvbnMgPSAxIGlmIEB7JGF0dHJpYnV0ZS0+Z2V0dGVyRXhj
ZXB0aW9uc30gYW5kICEoJGlzUG9kVHlwZSk7CkBAIC04OTMsNyArODkzLDcgQEAgRU5ECiAgICAg
ICAgJiYgISRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRG9Ob3RD
aGVja0RvbWFpblNlY3VyaXR5In0pIHsKICAgICAjIFdlIGhhdmUgbm90IGZpbmQgcmVhbCB1c2Ug
Y2FzZXMgeWV0LgogICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsCi0iICAgIGlmICghVjhQcm94
eTo6Y2FuQWNjZXNzRnJhbWUoaW1wLT5mcmFtZSgpLCB0cnVlKSkge1xuIi4KKyIgICAgaWYgKCFC
aW5kaW5nc1NlY3VyaXR5OjpjYW5BY2Nlc3NGcmFtZShWOFN0YXRlOjpPbmx5KCksIGltcC0+ZnJh
bWUoKSwgdHJ1ZSkpIHtcbiIuCiAiICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigp
O1xuIiAuCiAiICAgIH1cbiIpOwogICAgIH0KQEAgLTkyNSw3ICs5MjUsNyBAQCBFTkQKICAgICB9
CiAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiU1ZH
Q2hlY2tTZWN1cml0eURvY3VtZW50In0pIHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNs
cywKLSIgICAgaWYgKCFWOFByb3h5OjpjaGVja05vZGVTZWN1cml0eShpbXAtPmdldFNWR0RvY3Vt
ZW50KGVjKSkpXG4iIC4KKyIgICAgaWYgKCFCaW5kaW5nc1NlY3VyaXR5OjpjaGVja05vZGVTZWN1
cml0eShWOFN0YXRlOjpPbmx5KCksIGltcC0+Z2V0U1ZHRG9jdW1lbnQoZWMpKSlcbiIgLgogIiAg
ICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTtcbiIpOwogICAgIH0KIApAQCAtMTEz
OSw4ICsxMTM5LDEwIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAKICAgICBwdXNoKEBp
bXBsRml4ZWRIZWFkZXIsCiAgICAgICAgICAiI2luY2x1ZGUgXCJjb25maWcuaFwiXG4iIC4KKyAg
ICAgICAgICIjaW5jbHVkZSBcIkJpbmRpbmdzU2VjdXJpdHkuaFwiXG4iIC4KICAgICAgICAgICIj
aW5jbHVkZSBcIlY4UHJveHkuaFwiXG4iIC4KLSAgICAgICAgICIjaW5jbHVkZSBcIlY4QmluZGlu
Zy5oXCJcblxuIiAuCisgICAgICAgICAiI2luY2x1ZGUgXCJWOEJpbmRpbmcuaFwiXG4iIC4KKyAg
ICAgICAgICIjaW5jbHVkZSBcIlY4U3RhdGUuaFwiXG5cbiIgLgogICAgICAgICAgIiN1bmRlZiBM
T0dcblxuIik7CiAKICAgICBwdXNoKEBpbXBsRml4ZWRIZWFkZXIsICJcbiNpZiAke2NvbmRpdGlv
bmFsU3RyaW5nfVxuXG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDUxODg0KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NiArMzIsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xs
ZXIuaCIKIAorI2luY2x1ZGUgIkJpbmRpbmdzU2VjdXJpdHkuaCIKICNpbmNsdWRlICJDaHJvbWl1
bUJyaWRnZS5oIgogI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgpA
QCAtNTIsNiArNTMsNyBAQAogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4TlBP
YmplY3QuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCisjaW5jbHVkZSAiVjhTdGF0ZS5oIgogI2lu
Y2x1ZGUgIldpZGdldC5oIgogI2luY2x1ZGUgIlhTU0F1ZGl0b3IuaCIKICNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CkBAIC04NCw3ICs4Niw3IEBAIEZyYW1lKiBTY3JpcHRDb250cm9sbGVy
OjpyZXRyaWV2ZUZyYW1lRm8KIAogYm9vbCBTY3JpcHRDb250cm9sbGVyOjppc1NhZmVTY3JpcHQo
RnJhbWUqIHRhcmdldCkKIHsKLSAgICByZXR1cm4gVjhQcm94eTo6Y2FuQWNjZXNzRnJhbWUodGFy
Z2V0LCB0cnVlKTsKKyAgICByZXR1cm4gQmluZGluZ3NTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUo
VjhTdGF0ZTo6T25seSgpLCB0YXJnZXQsIHRydWUpOwogfQogCiB2b2lkIFNjcmlwdENvbnRyb2xs
ZXI6OmdjUHJvdGVjdEpTV3JhcHBlcih2b2lkKiBkb21PYmplY3QpCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvdjgv
VjhQcm94eS5jcHAJKHJldmlzaW9uIDUxODg0KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBy
b3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKIAorI2luY2x1ZGUgIkJpbmRpbmdzU2VjdXJpdHku
aCIKICNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgogI2luY2x1ZGUgIkNTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiRGF0ZUV4dGVuc2lvbi5oIgpAQCAtODU2LDk3ICs4
NTcsNiBAQCB2b2lkIFY4UHJveHk6OnVwZGF0ZVNlY3VyaXR5T3JpZ2luKCkKICAgICBzZXRTZWN1
cml0eVRva2VuKCk7CiB9CiAKLS8vIFNhbWUgb3JpZ2luIHBvbGljeSBpbXBsZW1lbnRhdGlvbjoK
LS8vCi0vLyBTYW1lIG9yaWdpbiBwb2xpY3kgcHJldmVudHMgSlMgY29kZSBmcm9tIGRvbWFpbiBB
IGFjY2VzcyBKUyAmIERPTSBvYmplY3RzCi0vLyBpbiBhIGRpZmZlcmVudCBkb21haW4gQi4gVGhl
cmUgYXJlIGV4Y2VwdGlvbnMgYW5kIHNldmVyYWwgb2JqZWN0cyBhcmUKLS8vIGFjY2Vzc2libGUg
YnkgY3Jvc3MtZG9tYWluIGNvZGUuIEZvciBleGFtcGxlLCB0aGUgd2luZG93LmZyYW1lcyBvYmpl
Y3QgaXMKLS8vIGFjY2Vzc2libGUgYnkgY29kZSBmcm9tIGEgZGlmZmVyZW50IGRvbWFpbiwgYnV0
IHdpbmRvdy5kb2N1bWVudCBpcyBub3QuCi0vLwotLy8gVGhlIGJpbmRpbmcgY29kZSBzZXRzIHNl
Y3VyaXR5IGNoZWNrIGNhbGxiYWNrcyBvbiBhIGZ1bmN0aW9uIHRlbXBsYXRlLAotLy8gYW5kIGFj
Y2Vzc2luZyBpbnN0YW5jZXMgb2YgdGhlIHRlbXBsYXRlIGNhbGxzIHRoZSBjYWxsYmFjayBmdW5j
dGlvbi4KLS8vIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBjaGVja3Mgc2FtZSBvcmlnaW4gcG9saWN5
LgotLy8KLS8vIENhbGxiYWNrIGZ1bmN0aW9ucyBhcmUgZXhwZW5zaXZlLiBWOCB1c2VzIGEgc2Vj
dXJpdHkgdG9rZW4gc3RyaW5nIHRvIGRvCi0vLyBmYXN0IGFjY2VzcyBjaGVja3MgZm9yIHRoZSBj
b21tb24gY2FzZSB3aGVyZSBzb3VyY2UgYW5kIHRhcmdldCBhcmUgaW4gdGhlCi0vLyBzYW1lIGRv
bWFpbi4gQSBzZWN1cml0eSB0b2tlbiBpcyBhIHN0cmluZyBvYmplY3QgdGhhdCByZXByZXNlbnRz
Ci0vLyB0aGUgcHJvdG9jb2wvdXJsL3BvcnQgb2YgYSBkb21haW4uCi0vLwotLy8gVGhlcmUgYXJl
IHNwZWNpYWwgY2FzZXMgd2hlcmUgYSBzZWN1cml0eSB0b2tlbiBtYXRjaGluZyBpcyBub3QgZW5v
dWdoLgotLy8gRm9yIGV4YW1wbGUsIEphdmFTY3JpcHQgY2FuIHNldCBpdHMgZG9tYWluIHRvIGEg
c3VwZXIgZG9tYWluIGJ5IGNhbGxpbmcKLS8vIGRvY3VtZW50LnNldERvbWFpbiguLi4pLiBJbiB0
aGVzZSBjYXNlcywgdGhlIGJpbmRpbmcgY29kZSBjYW4gcmVzZXQKLS8vIGEgY29udGV4dCdzIHNl
Y3VyaXR5IHRva2VuIHRvIGl0cyBnbG9iYWwgb2JqZWN0IHNvIHRoYXQgdGhlIGZhc3QgYWNjZXNz
Ci0vLyBjaGVjayB3aWxsIGFsd2F5cyBmYWlsLgotCi0vLyBDaGVjayBpZiB0aGUgY3VycmVudCBl
eGVjdXRpb24gY29udGV4dCBjYW4gYWNjZXNzIGEgdGFyZ2V0IGZyYW1lLgotLy8gRmlyc3QgaXQg
Y2hlY2tzIHNhbWUgZG9tYWluIHBvbGljeSB1c2luZyB0aGUgbGV4aWNhbCBjb250ZXh0Ci0vLwot
Ly8gVGhpcyBpcyBlcXVpdmFsZW50IHRvIEtKUzo6V2luZG93OjphbGxvd3NBY2Nlc3NGcm9tKEV4
ZWNTdGF0ZSosIFN0cmluZyYpLgotYm9vbCBWOFByb3h5OjpjYW5BY2Nlc3NQcml2YXRlKERPTVdp
bmRvdyogdGFyZ2V0V2luZG93KQotewotICAgIEFTU0VSVCh0YXJnZXRXaW5kb3cpOwotCi0gICAg
U3RyaW5nIG1lc3NhZ2U7Ci0KLSAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGFjdGl2ZUNvbnRl
eHQgPSB2ODo6Q29udGV4dDo6R2V0Q2FsbGluZygpOwotICAgIGlmIChhY3RpdmVDb250ZXh0Lklz
RW1wdHkoKSkgewotICAgICAgICAvLyBUaGVyZSBpcyBhIHNpbmdsZSBhY3RpdmF0aW9uIHJlY29y
ZCBvbiB0aGUgc3RhY2ssIHNvIHRoYXQgbXVzdAotICAgICAgICAvLyBiZSB0aGUgYWN0aXZlQ29u
dGV4dC4KLSAgICAgICAgYWN0aXZlQ29udGV4dCA9IHY4OjpDb250ZXh0OjpHZXRDdXJyZW50KCk7
Ci0gICAgfQotICAgIERPTVdpbmRvdyogYWN0aXZlV2luZG93ID0gcmV0cmlldmVXaW5kb3coYWN0
aXZlQ29udGV4dCk7Ci0gICAgaWYgKGFjdGl2ZVdpbmRvdyA9PSB0YXJnZXRXaW5kb3cpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKCFhY3RpdmVXaW5kb3cpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGNvbnN0IFNlY3VyaXR5T3JpZ2luKiBhY3RpdmVTZWN1cml0eU9yaWdp
biA9IGFjdGl2ZVdpbmRvdy0+c2VjdXJpdHlPcmlnaW4oKTsKLSAgICBjb25zdCBTZWN1cml0eU9y
aWdpbiogdGFyZ2V0U2VjdXJpdHlPcmlnaW4gPSB0YXJnZXRXaW5kb3ctPnNlY3VyaXR5T3JpZ2lu
KCk7Ci0KLSAgICAvLyBXZSBoYXZlIHNlZW4gY3Jhc2hlcyB3ZXJlIHRoZSBzZWN1cml0eSBvcmln
aW4gb2YgdGhlIHRhcmdldCBoYXMgbm90IGJlZW4KLSAgICAvLyBpbml0aWFsaXplZC4gRGVmZW5k
IGFnYWluc3QgdGhhdC4KLSAgICBpZiAoIXRhcmdldFNlY3VyaXR5T3JpZ2luKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYWN0aXZlU2VjdXJpdHlPcmlnaW4tPmNhbkFjY2Vzcyh0
YXJnZXRTZWN1cml0eU9yaWdpbikpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gQWxs
b3cgYWNjZXNzIHRvIGEgImFib3V0OmJsYW5rIiBwYWdlIGlmIHRoZSBkeW5hbWljIGNvbnRleHQg
aXMgYQotICAgIC8vIGRldGFjaGVkIGNvbnRleHQgb2YgdGhlIHNhbWUgZnJhbWUgYXMgdGhlIGJs
YW5rIHBhZ2UuCi0gICAgaWYgKHRhcmdldFNlY3VyaXR5T3JpZ2luLT5pc0VtcHR5KCkgJiYgYWN0
aXZlV2luZG93LT5mcmFtZSgpID09IHRhcmdldFdpbmRvdy0+ZnJhbWUoKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVjhQcm94eTo6Y2FuQWNj
ZXNzRnJhbWUoRnJhbWUqIHRhcmdldCwgYm9vbCByZXBvcnRFcnJvcikKLXsKLSAgICAvLyBUaGUg
c3ViamVjdCBpcyBkZXRhY2hlZCBmcm9tIGEgZnJhbWUsIGRlbnkgYWNjZXNzZXMuCi0gICAgaWYg
KCF0YXJnZXQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghY2FuQWNjZXNzUHJp
dmF0ZSh0YXJnZXQtPmRvbVdpbmRvdygpKSkgewotICAgICAgICBpZiAocmVwb3J0RXJyb3IpCi0g
ICAgICAgICAgICByZXBvcnRVbnNhZmVBY2Nlc3NUbyh0YXJnZXQsIFJlcG9ydE5vdyk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVjhQ
cm94eTo6Y2hlY2tOb2RlU2VjdXJpdHkoTm9kZSogbm9kZSkKLXsKLSAgICBpZiAoIW5vZGUpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEZyYW1lKiB0YXJnZXQgPSBub2RlLT5kb2N1bWVu
dCgpLT5mcmFtZSgpOwotCi0gICAgaWYgKCF0YXJnZXQpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHJldHVybiBjYW5BY2Nlc3NGcmFtZSh0YXJnZXQsIHRydWUpOwotfQotCiB2ODo6UGVy
c2lzdGVudDx2ODo6Q29udGV4dD4gVjhQcm94eTo6Y3JlYXRlTmV3Q29udGV4dCh2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGdsb2JhbCwgaW50IGV4dGVuc2lvbkdyb3VwKQogewogICAgIHY4OjpQZXJz
aXN0ZW50PHY4OjpDb250ZXh0PiByZXN1bHQ7CkBAIC0xNDEzLDQgKzEzMjMsMTEgQEAgdjg6Okxv
Y2FsPHY4OjpDb250ZXh0PiB0b1Y4Q29udGV4dChTY3JpcAogICAgIHJldHVybiB2ODo6TG9jYWw8
djg6OkNvbnRleHQ+KCk7CiB9CiAKKy8vIEltcGxlbWVudCBCaW5kaW5nc1NlY3VyaXR5IG1ldGhv
ZHMgdGhhdCBkZXBlbmQgb24gVjgtc3BlY2lmaWMgY29kZS4KKwordm9pZCBCaW5kaW5nc1NlY3Vy
aXR5OjppbW1lZGlhdGVseVJlcG9ydFVuc2FmZUFjY2Vzc1RvKEZyYW1lKiB0YXJnZXQpCit7Cisg
ICAgcmVwb3J0VW5zYWZlQWNjZXNzVG8odGFyZ2V0LCBSZXBvcnROb3cpOworfQorCiB9ICAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgJKHJldmlzaW9uIDUxODg0
KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMw
MCwxMyArMzAwLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBpcyBkaXNhYmxl
ZCBhbmQgaXQgcmV0dXJucyB0cnVlLgogICAgICAgICBzdGF0aWMgYm9vbCBoYW5kbGVPdXRPZk1l
bW9yeSgpOwogCi0gICAgICAgIC8vIENoZWNrIGlmIHRoZSBhY3RpdmUgZXhlY3V0aW9uIGNvbnRl
eHQgY2FuIGFjY2VzcyB0aGUgdGFyZ2V0IGZyYW1lLgotICAgICAgICBzdGF0aWMgYm9vbCBjYW5B
Y2Nlc3NGcmFtZShGcmFtZSosIGJvb2wgcmVwb3J0RXJyb3IpOwotCi0gICAgICAgIC8vIENoZWNr
IGlmIGl0IGlzIHNhZmUgdG8gYWNjZXNzIHRoZSBnaXZlbiBub2RlIGZyb20gdGhlCi0gICAgICAg
IC8vIGN1cnJlbnQgc2VjdXJpdHkgY29udGV4dC4KLSAgICAgICAgc3RhdGljIGJvb2wgY2hlY2tO
b2RlU2VjdXJpdHkoTm9kZSopOwotCiAgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gY2hlY2tOZXdMZWdhbChjb25zdCB2ODo6QXJndW1lbnRzJik7CiAKICAgICAgICAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gY29tcGlsZVNjcmlwdCh2ODo6SGFuZGxlPHY4OjpTdHJp
bmc+IGNvZGUsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGludCBiYXNlTGluZSk7CkBAIC0zODcs
OCArMzgwLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBSZXR1cm5zIGZhbHNl
IHdoZW4gd2UncmUgb3V0IG9mIG1lbW9yeSBpbiBWOC4KICAgICAgICAgYm9vbCBzZXRJbmplY3Rl
ZFNjcmlwdENvbnRleHREZWJ1Z0lkKHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHRhcmdldENvbnRl
eHQpOwogCi0gICAgICAgIHN0YXRpYyBib29sIGNhbkFjY2Vzc1ByaXZhdGUoRE9NV2luZG93Kik7
Ci0KICAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHJhbmdlRXhjZXB0aW9uTmFtZShpbnQgZXhj
ZXB0aW9uQ29kZSk7CiAgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBldmVudEV4Y2VwdGlvbk5h
bWUoaW50IGV4Y2VwdGlvbkNvZGUpOwogICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogeG1sSHR0
cFJlcXVlc3RFeGNlcHRpb25OYW1lKGludCBleGNlcHRpb25Db2RlKTsKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvdjgvVjhTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92
OC9WOFN0YXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhTdGF0
ZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVjhTdGF0ZS5oIgorCisjaW5jbHVkZSAiVjhQcm94eS5oIgorI2luY2x1ZGUg
PHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitWOFN0YXRlKiBW
OFN0YXRlOjpPbmx5KCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFY4U3RhdGUsIGdsb2Jh
bFY4U3RhdGUsICgpKTsKKyAgICByZXR1cm4gJmdsb2JhbFY4U3RhdGU7Cit9CisKK0RPTVdpbmRv
dyogVjhTdGF0ZTo6Z2V0QWN0aXZlV2luZG93KCkKK3sKKyAgICB2ODo6TG9jYWw8djg6OkNvbnRl
eHQ+IGFjdGl2ZUNvbnRleHQgPSB2ODo6Q29udGV4dDo6R2V0Q2FsbGluZygpOworICAgIGlmIChh
Y3RpdmVDb250ZXh0LklzRW1wdHkoKSkgeworICAgICAgICAvLyBUaGVyZSBpcyBhIHNpbmdsZSBh
Y3RpdmF0aW9uIHJlY29yZCBvbiB0aGUgc3RhY2ssIHNvIHRoYXQgbXVzdAorICAgICAgICAvLyBi
ZSB0aGUgYWN0aXZlQ29udGV4dC4KKyAgICAgICAgYWN0aXZlQ29udGV4dCA9IHY4OjpDb250ZXh0
OjpHZXRDdXJyZW50KCk7CisgICAgfQorICAgIHJldHVybiBWOFByb3h5OjpyZXRyaWV2ZVdpbmRv
dyhhY3RpdmVDb250ZXh0KTsKK30KKworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvVjhTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvdjgvVjhTdGF0ZS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOFN0
YXRlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFY4U3RhdGVfaAor
I2RlZmluZSBWOFN0YXRlX2gKKworI2luY2x1ZGUgIkJpbmRpbmdzU3RhdGUuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisvLyBTaW5nbGV0b24gaW1wbGVtZW50YXRpb24gb2YgQmluZGluZ3NT
dGF0ZS4gIFVzZXMgVjgncyBnbG9iYWwgaW5mbyB0byByZXR1cm4KKy8vIGluZm9ybWF0aW9uIGFi
b3V0IHJlbGV2YW50IGV4ZWN1dGlvbiBzdGF0ZS4KK2NsYXNzIFY4U3RhdGUgOiBwdWJsaWMgQmlu
ZGluZ3NTdGF0ZSB7CitwdWJsaWM6CisgICAgLy8gU2luZ2xldG9uCisgICAgc3RhdGljIFY4U3Rh
dGUqIE9ubHkoKTsKKworICAgIC8vIFRoZSBET01XaW5kb3cgY29ycmVzcG9uZGluZyB0byB0aGUg
J2NhbGxpbmcgY29udGV4dCcgb2YgZXhlY3V0aW9uLgorICAgIERPTVdpbmRvdyogZ2V0QWN0aXZl
V2luZG93KCk7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgVjhTdGF0ZSgpIHt9CisgICAgflY4
U3RhdGUoKTsKK307CisKK30KKworI2VuZGlmIC8vIFY4U3RhdGVfaApJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuY3BwCShyZXZpc2lvbiA1MTg4
NCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKIAorI2luY2x1ZGUgIkJpbmRpbmdzU2VjdXJpdHkuaCIK
ICNpbmNsdWRlICJDU1NIZWxwZXIuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKQEAgLTQwLDYgKzQxLDcgQEAKICNpbmNsdWRlICJIVE1MRnJhbWVFbGVtZW50
QmFzZS5oIgogI2luY2x1ZGUgIkxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgorI2lu
Y2x1ZGUgIlY4U3RhdGUuaCIKIAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHUGF0aFNl
Zy5oIgpAQCAtNTEsNyArNTMsNyBAQCBib29sIGFsbG93U2V0dGluZ0ZyYW1lU3JjVG9KYXZhc2Ny
aXB0VXJsCiB7CiAgICAgaWYgKHByb3RvY29sSXMoZGVwcmVjYXRlZFBhcnNlVVJMKHZhbHVlKSwg
ImphdmFzY3JpcHQiKSkgewogICAgICAgICBOb2RlKiBjb250ZW50RG9jID0gZnJhbWUtPmNvbnRl
bnREb2N1bWVudCgpOwotICAgICAgICBpZiAoY29udGVudERvYyAmJiAhVjhQcm94eTo6Y2hlY2tO
b2RlU2VjdXJpdHkoY29udGVudERvYykpCisgICAgICAgIGlmIChjb250ZW50RG9jICYmICFCaW5k
aW5nc1NlY3VyaXR5OjpjaGVja05vZGVTZWN1cml0eShWOFN0YXRlOjpPbmx5KCksIGNvbnRlbnRE
b2MpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTk3LDcgKzk5LDcgQEAgSU5ERVhFRF9BQ0NFU1NfQ0hFQ0soSGlzdG9yeSkKICAgICBBU1NF
UlQoVjhDbGFzc0luZGV4OjpGcm9tSW50KGRhdGEtPkludDMyVmFsdWUoKSkgPT0gVjhDbGFzc0lu
ZGV4OjpISVNUT1JZKTsKICAgICAvLyBPbmx5IGFsbG93IHNhbWUgb3JpZ2luIGFjY2Vzcy4KICAg
ICBIaXN0b3J5KiBoaXN0b3J5ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8
SGlzdG9yeT4oVjhDbGFzc0luZGV4OjpISVNUT1JZLCBob3N0KTsKLSAgICByZXR1cm4gVjhQcm94
eTo6Y2FuQWNjZXNzRnJhbWUoaGlzdG9yeS0+ZnJhbWUoKSwgZmFsc2UpOworICAgIHJldHVybiBC
aW5kaW5nc1NlY3VyaXR5OjpjYW5BY2Nlc3NGcmFtZShWOFN0YXRlOjpPbmx5KCksIGhpc3Rvcnkt
PmZyYW1lKCksIGZhbHNlKTsKIH0KIAogTkFNRURfQUNDRVNTX0NIRUNLKEhpc3RvcnkpCkBAIC0x
MDUsNyArMTA3LDcgQEAgTkFNRURfQUNDRVNTX0NIRUNLKEhpc3RvcnkpCiAgICAgQVNTRVJUKFY4
Q2xhc3NJbmRleDo6RnJvbUludChkYXRhLT5JbnQzMlZhbHVlKCkpID09IFY4Q2xhc3NJbmRleDo6
SElTVE9SWSk7CiAgICAgLy8gT25seSBhbGxvdyBzYW1lIG9yaWdpbiBhY2Nlc3MuCiAgICAgSGlz
dG9yeSogaGlzdG9yeSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEhpc3Rv
cnk+KFY4Q2xhc3NJbmRleDo6SElTVE9SWSwgaG9zdCk7Ci0gICAgcmV0dXJuIFY4UHJveHk6OmNh
bkFjY2Vzc0ZyYW1lKGhpc3RvcnktPmZyYW1lKCksIGZhbHNlKTsKKyAgICByZXR1cm4gQmluZGlu
Z3NTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhTdGF0ZTo6T25seSgpLCBoaXN0b3J5LT5mcmFt
ZSgpLCBmYWxzZSk7CiB9CiAKICN1bmRlZiBJTkRFWEVEX0FDQ0VTU19DSEVDSwpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAkocmV2
aXNpb24gNTE4ODQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDkgKzM2LDExIEBACiAjaW5jbHVkZSAiVjhD
dXN0b21FdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiVjhNZXNzYWdlUG9ydEN1c3RvbS5oIgog
I2luY2x1ZGUgIlY4UHJveHkuaCIKKyNpbmNsdWRlICJWOFN0YXRlLmgiCiAjaW5jbHVkZSAiVjhV
dGlsaXRpZXMuaCIKIAogI2luY2x1ZGUgIkJhc2U2NC5oIgorI2luY2x1ZGUgIkJpbmRpbmdzU2Vj
dXJpdHkuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRE9NVGltZXIu
aCIKICNpbmNsdWRlICJGcmFtZS5oIgpAQCAtMTAxLDcgKzEwMyw3IEBAIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOEN1c3RvbTo6V2luZG93U2UKIAogICAgIERPTVdpbmRvdyogaW1wID0gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRP
TVdJTkRPVywgYXJncy5Ib2xkZXIoKSk7CiAKLSAgICBpZiAoIVY4UHJveHk6OmNhbkFjY2Vzc0Zy
YW1lKGltcC0+ZnJhbWUoKSwgdHJ1ZSkpCisgICAgaWYgKCFCaW5kaW5nc1NlY3VyaXR5OjpjYW5B
Y2Nlc3NGcmFtZShWOFN0YXRlOjpPbmx5KCksIGltcC0+ZnJhbWUoKSwgdHJ1ZSkpCiAgICAgICAg
IHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBz
Y3JpcHRDb250ZXh0ID0gc3RhdGljX2Nhc3Q8U2NyaXB0RXhlY3V0aW9uQ29udGV4dCo+KGltcC0+
ZG9jdW1lbnQoKSk7CkBAIC0xNzEsNyArMTczLDcgQEAgQUNDRVNTT1JfR0VUVEVSKERPTVdpbmRv
d0V2ZW50KQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCiAgICAgRnJhbWUqIGZy
YW1lID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENs
YXNzSW5kZXg6OkRPTVdJTkRPVywgaG9sZGVyKS0+ZnJhbWUoKTsKLSAgICBpZiAoIVY4UHJveHk6
OmNhbkFjY2Vzc0ZyYW1lKGZyYW1lLCB0cnVlKSkKKyAgICBpZiAoIUJpbmRpbmdzU2VjdXJpdHk6
OmNhbkFjY2Vzc0ZyYW1lKFY4U3RhdGU6Ok9ubHkoKSwgZnJhbWUsIHRydWUpKQogICAgICAgICBy
ZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCiAgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250
ZXh0ID0gVjhQcm94eTo6Y29udGV4dChmcmFtZSk7CkBAIC0xOTIsNyArMTk0LDcgQEAgQUNDRVNT
T1JfU0VUVEVSKERPTVdpbmRvd0V2ZW50KQogICAgICAgICByZXR1cm47CiAKICAgICBGcmFtZSog
ZnJhbWUgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4
Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBob2xkZXIpLT5mcmFtZSgpOwotICAgIGlmICghVjhQcm94
eTo6Y2FuQWNjZXNzRnJhbWUoZnJhbWUsIHRydWUpKQorICAgIGlmICghQmluZGluZ3NTZWN1cml0
eTo6Y2FuQWNjZXNzRnJhbWUoVjhTdGF0ZTo6T25seSgpLCBmcmFtZSwgdHJ1ZSkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCA9IFY4UHJveHk6
OmNvbnRleHQoZnJhbWUpOwpAQCAtMjIwLDcgKzIyMiw3IEBAIEFDQ0VTU09SX1NFVFRFUihET01X
aW5kb3dPcGVuZXIpCiB7CiAgICAgRE9NV2luZG93KiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZl
cnRUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBpbmZv
LkhvbGRlcigpKTsKIAotICAgIGlmICghVjhQcm94eTo6Y2FuQWNjZXNzRnJhbWUoaW1wLT5mcmFt
ZSgpLCB0cnVlKSkKKyAgICBpZiAoIUJpbmRpbmdzU2VjdXJpdHk6OmNhbkFjY2Vzc0ZyYW1lKFY4
U3RhdGU6Ok9ubHkoKSwgaW1wLT5mcmFtZSgpLCB0cnVlKSkKICAgICAgICAgcmV0dXJuOwogICAK
ICAgICAvLyBPcGVuZXIgY2FuIGJlIHNoYWRvd2VkIGlmIGl0IGlzIGluIHRoZSBzYW1lIGRvbWFp
bi4KQEAgLTM0Myw3ICszNDUsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woRE9NV2luZG93QWRkRXZl
bnRMaXN0CiAKICAgICBET01XaW5kb3cqIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0
aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGFyZ3MuSG9sZGVy
KCkpOwogCi0gICAgaWYgKCFWOFByb3h5OjpjYW5BY2Nlc3NGcmFtZShpbXAtPmZyYW1lKCksIHRy
dWUpKQorICAgIGlmICghQmluZGluZ3NTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhTdGF0ZTo6
T25seSgpLCBpbXAtPmZyYW1lKCksIHRydWUpKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5l
ZCgpOwogCiAgICAgRG9jdW1lbnQqIGRvYyA9IGltcC0+ZG9jdW1lbnQoKTsKQEAgLTM3Niw3ICsz
NzgsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woRE9NV2luZG93UmVtb3ZlRXZlbnRMCiAKICAgICBE
T01XaW5kb3cqIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PERPTVdp
bmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGFyZ3MuSG9sZGVyKCkpOwogCi0gICAgaWYg
KCFWOFByb3h5OjpjYW5BY2Nlc3NGcmFtZShpbXAtPmZyYW1lKCksIHRydWUpKQorICAgIGlmICgh
QmluZGluZ3NTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhTdGF0ZTo6T25seSgpLCBpbXAtPmZy
YW1lKCksIHRydWUpKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCiAgICAgRG9j
dW1lbnQqIGRvYyA9IGltcC0+ZG9jdW1lbnQoKTsKQEAgLTQ0MSw3ICs0NDMsNyBAQCBDQUxMQkFD
S19GVU5DX0RFQ0woRE9NV2luZG93QXRvYikKIAogICAgIERPTVdpbmRvdyogaW1wID0gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRP
TVdJTkRPVywgYXJncy5Ib2xkZXIoKSk7CiAKLSAgICBpZiAoIVY4UHJveHk6OmNhbkFjY2Vzc0Zy
YW1lKGltcC0+ZnJhbWUoKSwgdHJ1ZSkpCisgICAgaWYgKCFCaW5kaW5nc1NlY3VyaXR5OjpjYW5B
Y2Nlc3NGcmFtZShWOFN0YXRlOjpPbmx5KCksIGltcC0+ZnJhbWUoKSwgdHJ1ZSkpCiAgICAgICAg
IHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCkBA
IC00NjAsNyArNDYyLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRvd0J0b2EpCiAKICAg
ICBET01XaW5kb3cqIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PERP
TVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGFyZ3MuSG9sZGVyKCkpOwogCi0gICAg
aWYgKCFWOFByb3h5OjpjYW5BY2Nlc3NGcmFtZShpbXAtPmZyYW1lKCksIHRydWUpKQorICAgIGlm
ICghQmluZGluZ3NTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhTdGF0ZTo6T25seSgpLCBpbXAt
PmZyYW1lKCksIHRydWUpKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCiAgICAg
aWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQpAQCAtNjIxLDcgKzYyMyw3IEBAIENBTExCQUNLX0ZVTkNf
REVDTChET01XaW5kb3dTaG93TW9kYWxEaWEKICAgICAgICAgVjhDbGFzc0luZGV4OjpET01XSU5E
T1csIGFyZ3MuSG9sZGVyKCkpOwogICAgIEZyYW1lKiBmcmFtZSA9IHdpbmRvdy0+ZnJhbWUoKTsK
IAotICAgIGlmICghVjhQcm94eTo6Y2FuQWNjZXNzRnJhbWUoZnJhbWUsIHRydWUpKQorICAgIGlm
ICghQmluZGluZ3NTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhTdGF0ZTo6T25seSgpLCBmcmFt
ZSwgdHJ1ZSkpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKICAgICBGcmFtZSog
Y2FsbGluZ0ZyYW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckNhbGxpbmdDb250ZXh0KCk7
CkBAIC03MDksNyArNzExLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRvd09wZW4pCiAg
ICAgRE9NV2luZG93KiBwYXJlbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBhcmdzLkhvbGRlcigpKTsKICAg
ICBGcmFtZSogZnJhbWUgPSBwYXJlbnQtPmZyYW1lKCk7CiAKLSAgICBpZiAoIVY4UHJveHk6OmNh
bkFjY2Vzc0ZyYW1lKGZyYW1lLCB0cnVlKSkKKyAgICBpZiAoIUJpbmRpbmdzU2VjdXJpdHk6OmNh
bkFjY2Vzc0ZyYW1lKFY4U3RhdGU6Ok9ubHkoKSwgZnJhbWUsIHRydWUpKQogICAgICAgICByZXR1
cm4gdjg6OlVuZGVmaW5lZCgpOwogCiAgICAgRnJhbWUqIGVudGVyZWRGcmFtZSA9IFY4UHJveHk6
OnJldHJpZXZlRnJhbWVGb3JFbnRlcmVkQ29udGV4dCgpOwpAQCAtOTI1LDcgKzkyNyw3IEBAIHZv
aWQgVjhDdXN0b206OkNsZWFyVGltZW91dEltcGwoY29uc3QgdjgKIAogICAgIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gaG9sZGVyID0gYXJncy5Ib2xkZXIoKTsKICAgICBET01XaW5kb3cqIGltcCA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0lu
ZGV4OjpET01XSU5ET1csIGhvbGRlcik7Ci0gICAgaWYgKCFWOFByb3h5OjpjYW5BY2Nlc3NGcmFt
ZShpbXAtPmZyYW1lKCksIHRydWUpKQorICAgIGlmICghQmluZGluZ3NTZWN1cml0eTo6Y2FuQWNj
ZXNzRnJhbWUoVjhTdGF0ZTo6T25seSgpLCBpbXAtPmZyYW1lKCksIHRydWUpKQogICAgICAgICBy
ZXR1cm47CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IHN0YXRpY19jYXN0
PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqPihpbXAtPmRvY3VtZW50KCkpOwogICAgIGlmICghY29u
dGV4dCkKQEAgLTk3MSw3ICs5NzMsNyBAQCBOQU1FRF9BQ0NFU1NfQ0hFQ0soRE9NV2luZG93KQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgcmV0dXJuIFY4UHJveHk6OmNh
bkFjY2Vzc0ZyYW1lKHRhcmdldCwgZmFsc2UpOworICAgIHJldHVybiBCaW5kaW5nc1NlY3VyaXR5
OjpjYW5BY2Nlc3NGcmFtZShWOFN0YXRlOjpPbmx5KCksIHRhcmdldCwgZmFsc2UpOwogfQogCiBJ
TkRFWEVEX0FDQ0VTU19DSEVDSyhET01XaW5kb3cpCkBAIC05OTMsNyArOTk1LDcgQEAgSU5ERVhF
RF9BQ0NFU1NfQ0hFQ0soRE9NV2luZG93KQogICAgIGlmICgodHlwZSA9PSB2ODo6QUNDRVNTX0dF
VCB8fCB0eXBlID09IHY4OjpBQ0NFU1NfSEFTKSAmJiB0YXJnZXQtPnRyZWUoKS0+Y2hpbGQoaW5k
ZXgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHJldHVybiBWOFByb3h5OjpjYW5BY2Nl
c3NGcmFtZSh0YXJnZXQsIGZhbHNlKTsKKyAgICByZXR1cm4gQmluZGluZ3NTZWN1cml0eTo6Y2Fu
QWNjZXNzRnJhbWUoVjhTdGF0ZTo6T25seSgpLCB0YXJnZXQsIGZhbHNlKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhMb2Nh
dGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhMb2NhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDUxODg0KQorKysgV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhMb2NhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDkg
KzM1LDExIEBACiAjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhDdXN0
b21FdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiVjhMb2NhdGlvbi5oIgorI2luY2x1ZGUgIlY4
U3RhdGUuaCIKICNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIK
IAorI2luY2x1ZGUgIkJpbmRpbmdzU2VjdXJpdHkuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgpAQCAtMjE3LDcg
KzIxOSw3IEBAIEFDQ0VTU09SX0dFVFRFUihMb2NhdGlvblJlbG9hZCkKICAgICAgICAgcmV0dXJu
IHByaXZhdGVUZW1wbGF0ZS0+R2V0RnVuY3Rpb24oKTsKICAgICB9CiAgICAgTG9jYXRpb24qIGlt
cCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNz
SW5kZXg6OkxPQ0FUSU9OLCBob2xkZXIpOwotICAgIGlmICghVjhQcm94eTo6Y2FuQWNjZXNzRnJh
bWUoaW1wLT5mcmFtZSgpLCBmYWxzZSkpIHsKKyAgICBpZiAoIUJpbmRpbmdzU2VjdXJpdHk6OmNh
bkFjY2Vzc0ZyYW1lKFY4U3RhdGU6Ok9ubHkoKSwgaW1wLT5mcmFtZSgpLCBmYWxzZSkpIHsKICAg
ICAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBzaGFyZWRU
ZW1wbGF0ZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3KHY4OjpG
dW5jdGlvblRlbXBsYXRlOjpOZXcodjhMb2NhdGlvblJlbG9hZENhbGxiYWNrLCB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4oKSwgdjg6OlNpZ25hdHVyZTo6TmV3KFY4TG9jYXRpb246OkdldFJhd1RlbXBs
YXRlKCkpKSk7CiAgICAgICAgIHJldHVybiBzaGFyZWRUZW1wbGF0ZS0+R2V0RnVuY3Rpb24oKTsK
ICAgICB9IGVsc2UKQEAgLTIzNSw3ICsyMzcsNyBAQCBBQ0NFU1NPUl9HRVRURVIoTG9jYXRpb25S
ZXBsYWNlKQogICAgICAgICByZXR1cm4gcHJpdmF0ZVRlbXBsYXRlLT5HZXRGdW5jdGlvbigpOwog
ICAgIH0KICAgICBMb2NhdGlvbiogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVP
YmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvbGRlcik7Ci0gICAgaWYg
KCFWOFByb3h5OjpjYW5BY2Nlc3NGcmFtZShpbXAtPmZyYW1lKCksIGZhbHNlKSkgeworICAgIGlm
ICghQmluZGluZ3NTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhTdGF0ZTo6T25seSgpLCBpbXAt
PmZyYW1lKCksIGZhbHNlKSkgewogICAgICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+IHNoYXJlZFRlbXBsYXRlID0gdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+OjpOZXcodjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyh2OExvY2F0aW9uUmVw
bGFjZUNhbGxiYWNrLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwgdjg6OlNpZ25hdHVyZTo6TmV3
KFY4TG9jYXRpb246OkdldFJhd1RlbXBsYXRlKCkpKSk7CiAgICAgICAgIHJldHVybiBzaGFyZWRU
ZW1wbGF0ZS0+R2V0RnVuY3Rpb24oKTsKICAgICB9IGVsc2UKQEAgLTI1NCw3ICsyNTYsNyBAQCBB
Q0NFU1NPUl9HRVRURVIoTG9jYXRpb25Bc3NpZ24pCiAgICAgICAgIHJldHVybiBwcml2YXRlVGVt
cGxhdGUtPkdldEZ1bmN0aW9uKCk7CiAgICAgfQogICAgIExvY2F0aW9uKiBpbXAgPSBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhDbGFzc0luZGV4OjpMT0NB
VElPTiwgaG9sZGVyKTsKLSAgICBpZiAoIVY4UHJveHk6OmNhbkFjY2Vzc0ZyYW1lKGltcC0+ZnJh
bWUoKSwgZmFsc2UpKSB7CisgICAgaWYgKCFCaW5kaW5nc1NlY3VyaXR5OjpjYW5BY2Nlc3NGcmFt
ZShWOFN0YXRlOjpPbmx5KCksIGltcC0+ZnJhbWUoKSwgZmFsc2UpKSB7CiAgICAgICAgIHN0YXRp
YyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gc2hhcmVkVGVtcGxhdGUgPSB2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT46Ok5ldyh2ODo6RnVuY3Rpb25UZW1w
bGF0ZTo6TmV3KHY4TG9jYXRpb25Bc3NpZ25DYWxsYmFjaywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
KCksIHY4OjpTaWduYXR1cmU6Ok5ldyhWOExvY2F0aW9uOjpHZXRSYXdUZW1wbGF0ZSgpKSkpOwog
ICAgICAgICByZXR1cm4gc2hhcmVkVGVtcGxhdGUtPkdldEZ1bmN0aW9uKCk7CiAgICAgfSBlbHNl
CkBAIC0zMzUsNyArMzM3LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKExvY2F0aW9uVG9TdHJpbmcp
CiAgICAgSU5DX1NUQVRTKCJET00uTG9jYXRpb24udG9TdHJpbmciKTsKICAgICB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7CiAgICAgTG9jYXRpb24qIGltcCA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5k
ZXg6OkxPQ0FUSU9OLCBob2xkZXIpOwotICAgIGlmICghVjhQcm94eTo6Y2FuQWNjZXNzRnJhbWUo
aW1wLT5mcmFtZSgpLCB0cnVlKSkKKyAgICBpZiAoIUJpbmRpbmdzU2VjdXJpdHk6OmNhbkFjY2Vz
c0ZyYW1lKFY4U3RhdGU6Ok9ubHkoKSwgaW1wLT5mcmFtZSgpLCB0cnVlKSkKICAgICAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKICAgICBTdHJpbmcgcmVzdWx0ID0gaW1wLT5ocmVmKCk7CiAg
ICAgcmV0dXJuIHY4U3RyaW5nKHJlc3VsdCk7CkBAIC0zNDYsNyArMzQ4LDcgQEAgSU5ERVhFRF9B
Q0NFU1NfQ0hFQ0soTG9jYXRpb24pCiAgICAgQVNTRVJUKFY4Q2xhc3NJbmRleDo6RnJvbUludChk
YXRhLT5JbnQzMlZhbHVlKCkpID09IFY4Q2xhc3NJbmRleDo6TE9DQVRJT04pOwogICAgIC8vIE9u
bHkgYWxsb3cgc2FtZSBvcmlnaW4gYWNjZXNzCiAgICAgTG9jYXRpb24qIGltcCA9ICBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhDbGFzc0luZGV4OjpMT0NB
VElPTiwgaG9zdCk7Ci0gICAgcmV0dXJuIFY4UHJveHk6OmNhbkFjY2Vzc0ZyYW1lKGltcC0+ZnJh
bWUoKSwgZmFsc2UpOworICAgIHJldHVybiBCaW5kaW5nc1NlY3VyaXR5OjpjYW5BY2Nlc3NGcmFt
ZShWOFN0YXRlOjpPbmx5KCksIGltcC0+ZnJhbWUoKSwgZmFsc2UpOwogfQogCiBOQU1FRF9BQ0NF
U1NfQ0hFQ0soTG9jYXRpb24pCkBAIC0zNTQsNyArMzU2LDcgQEAgTkFNRURfQUNDRVNTX0NIRUNL
KExvY2F0aW9uKQogICAgIEFTU0VSVChWOENsYXNzSW5kZXg6OkZyb21JbnQoZGF0YS0+SW50MzJW
YWx1ZSgpKSA9PSBWOENsYXNzSW5kZXg6OkxPQ0FUSU9OKTsKICAgICAvLyBPbmx5IGFsbG93IHNh
bWUgb3JpZ2luIGFjY2VzcwogICAgIExvY2F0aW9uKiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZl
cnRUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhDbGFzc0luZGV4OjpMT0NBVElPTiwgaG9zdCk7
Ci0gICAgcmV0dXJuIFY4UHJveHk6OmNhbkFjY2Vzc0ZyYW1lKGltcC0+ZnJhbWUoKSwgZmFsc2Up
OworICAgIHJldHVybiBCaW5kaW5nc1NlY3VyaXR5OjpjYW5BY2Nlc3NGcmFtZShWOFN0YXRlOjpP
bmx5KCksIGltcC0+ZnJhbWUoKSwgZmFsc2UpOwogfQogCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA1MTkwMikKKysrIFdlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAwOS0xMi0wOSAgQ2hh
cmxlcyBSZWlzICA8Y3JlaXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIHNvbWUgc2VjdXJpdHkgY29kZSBvdXQg
b2YgVjggYmluZGluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTMyMzI2CisKKyAgICAgICAgKiBzcmMvV2ViQmluZGluZ3MuY3BwOgorICAgICAgICAo
V2ViS2l0OjpnZXREcmFnRGF0YUltcGwpOgorCiAyMDA5LTEyLTA5ICBZdXJ5IFNlbWlraGF0c2t5
ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGJ1aWxkIGZpeC4K
SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmluZGluZ3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmluZGluZ3MuY3BwCShyZXZpc2lvbiA1MTg4NCkKKysr
IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmluZGluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCw2ICszOCw3IEBACiAjaW5jbHVkZSAiLi4vcHVibGljL1dlYlJhbmdlLmgiCiAKICNpZiBVU0Uo
VjgpCisjaW5jbHVkZSAiQmluZGluZ3NTZWN1cml0eS5oIgogI2luY2x1ZGUgIkNocm9taXVtRGF0
YU9iamVjdC5oIgogI2luY2x1ZGUgIkNsaXBib2FyZENocm9taXVtLmgiCiAjaW5jbHVkZSAiRXZl
bnROYW1lcy5oIgpAQCAtNDcsNiArNDgsNyBAQAogI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgog
I2luY2x1ZGUgIlY4SGVscGVycy5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKKyNpbmNsdWRlICJW
OFN0YXRlLmgiCiAjZWxpZiBVU0UoSlNDKQogI2luY2x1ZGUgImJyaWRnZS9jL2NfdXRpbGl0eS5o
IgogI2VuZGlmCkBAIC0yMzYsNyArMjM4LDcgQEAgc3RhdGljIGJvb2wgZ2V0RHJhZ0RhdGFJbXBs
KE5QT2JqZWN0KiBucAogICAgIC8vIENoZWNrIHRoZSBleGVjdXRpb24gZnJhbWVzIGFyZSBzYW1l
IG9yaWdpbi4KICAgICBWOFByb3h5KiBjdXJyZW50ID0gVjhQcm94eTo6cmV0cmlldmUoVjhQcm94
eTo6cmV0cmlldmVGcmFtZUZvckN1cnJlbnRDb250ZXh0KCkpOwogICAgIEZyYW1lKiBmcmFtZSA9
IFY4UHJveHk6OnJldHJpZXZlRnJhbWUoY29udGV4dCk7Ci0gICAgaWYgKCFjdXJyZW50IHx8ICFj
dXJyZW50LT5jYW5BY2Nlc3NGcmFtZShmcmFtZSwgZmFsc2UpKQorICAgIGlmICghY3VycmVudCB8
fCAhQmluZGluZ3NTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhTdGF0ZTo6T25seSgpLCBmcmFt
ZSwgZmFsc2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBjb25zdCBFdmVudE5hbWVz
JiBuYW1lcyhldmVudE5hbWVzKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44544</attachid>
            <date>2009-12-09 10:34:39 -0800</date>
            <delta_ts>2009-12-11 10:51:08 -0800</delta_ts>
            <desc>Fixes issues from the style-queue bot</desc>
            <filename>bindings-security-patch-20091209-2.txt</filename>
            <type>text/plain</type>
            <size>41598</size>
            <attacher name="Charles Reis">creis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTkwMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTEgQEAKKzIwMDktMTItMDkgIENoYXJsZXMgUmVpcyAgPGNyZWlzQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBS
ZWZhY3RvciBzb21lIHNlY3VyaXR5IGNvZGUgb3V0IG9mIFY4IGJpbmRpbmdzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjMyNgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cy4gVGhlcmUgc2hvdWxkIGJlIG5vIGZ1bmN0aW9uYWxpdHkgY2hhbmdlcyBpbiB0
aGlzIHBhdGNoLAorICAgICAgICBzaW5jZSBpdCBpcyBvbmx5IHJlZmFjdG9yaW5nIGNvZGUuCisK
KyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAgKiBXZWJDb3JlLmd5
cGk6CisgICAgICAgICogYmluZGluZ3MvQmluZGluZ3NTZWN1cml0eS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6QmluZGluZ3NTZWN1cml0eTo6Y2FuQWNjZXNzV2luZG93KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpbmRpbmdzU2VjdXJpdHk6OmNhbkFjY2Vzc0ZyYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpbmRpbmdzU2VjdXJpdHk6OmNoZWNrTm9kZVNlY3VyaXR5KToKKyAgICAgICAg
KiBiaW5kaW5ncy9CaW5kaW5nc1NlY3VyaXR5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
QmluZGluZ3NTZWN1cml0eTo6QmluZGluZ3NTZWN1cml0eSk6CisgICAgICAgICogYmluZGluZ3Mv
QmluZGluZ3NTdGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmlzU2FmZVNjcmlwdCk6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaW5k
aW5nc1NlY3VyaXR5OjppbW1lZGlhdGVseVJlcG9ydFVuc2FmZUFjY2Vzc1RvKToKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9WOFByb3h5Lmg6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhTdGF0ZS5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VjhTdGF0ZTo6T25seSk6CisgICAgICAgIChX
ZWJDb3JlOjpWOFN0YXRlOjpnZXRBY3RpdmVXaW5kb3cpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L1Y4U3RhdGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpWOFN0YXRlOjpWOFN0YXRlKToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmFsbG93U2V0dGluZ0ZyYW1lU3JjVG9KYXZhc2NyaXB0VXJsKToKKyAgICAg
ICAgKFdlYkNvcmU6OklOREVYRURfQUNDRVNTX0NIRUNLKToKKyAgICAgICAgKFdlYkNvcmU6Ok5B
TUVEX0FDQ0VTU19DSEVDSyk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2lu
ZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9tOjpXaW5kb3dTZXRUaW1l
b3V0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpBQ0NFU1NPUl9HRVRURVIpOgorICAgICAgICAo
V2ViQ29yZTo6QUNDRVNTT1JfU0VUVEVSKToKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZV
TkNfREVDTCk6CisgICAgICAgIChXZWJDb3JlOjpWOEN1c3RvbTo6Q2xlYXJUaW1lb3V0SW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpOQU1FRF9BQ0NFU1NfQ0hFQ0spOgorICAgICAgICAoV2ViQ29y
ZTo6SU5ERVhFRF9BQ0NFU1NfQ0hFQ0spOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9W
OExvY2F0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFDQ0VTU09SX0dFVFRFUik6
CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAoV2ViQ29y
ZTo6SU5ERVhFRF9BQ0NFU1NfQ0hFQ0spOgorICAgICAgICAoV2ViQ29yZTo6TkFNRURfQUNDRVNT
X0NIRUNLKToKKwogMjAwOS0xMi0wOSAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9XZWJD
b3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDUx
ODg0KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTQzNCw2ICs0
MzQsOSBAQAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvd2luL0FjY2Vzc2liaWxpdHlPYmpl
Y3RXaW4uY3BwJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L3dpbi9BY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlcldpbi5oJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L3d4L0FjY2Vz
c2liaWxpdHlPYmplY3RXeC5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL0JpbmRpbmdzU2Vj
dXJpdHkuY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy9CaW5kaW5nc1NlY3VyaXR5LmgnLAor
ICAgICAgICAgICAgJ2JpbmRpbmdzL0JpbmRpbmdzU3RhdGUuaCcsCiAgICAgICAgICAgICAnYmlu
ZGluZ3MvanMvQ2FjaGVkU2NyaXB0U291cmNlUHJvdmlkZXIuaCcsCiAgICAgICAgICAgICAnYmlu
ZGluZ3MvanMvRE9NT2JqZWN0V2l0aFNWR0NvbnRleHQuaCcsCiAgICAgICAgICAgICAnYmluZGlu
Z3MvanMvR0NDb250cm9sbGVyLmNwcCcsCkBAIC04MjksNiArODMyLDggQEAKICAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9WOE5vZGVGaWx0ZXJDb25kaXRpb24uaCcsCiAgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvVjhQcm94eS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4UHJveHku
aCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhTdGF0ZS5jcHAnLAorICAgICAgICAgICAg
J2JpbmRpbmdzL3Y4L1Y4U3RhdGUuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhTVkdQ
T0RUeXBlV3JhcHBlci5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOFV0aWxpdGllcy5j
cHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4VXRpbGl0aWVzLmgnLApJbmRleDogV2Vi
Q29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUuZ3lwL1dlYkNvcmUuZ3lwCShyZXZpc2lvbiA1MTg4NCkKKysrIFdlYkNvcmUvV2ViQ29yZS5n
eXAvV2ViQ29yZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw2ICsxMDYsNyBAQAogICAgICAg
Jy4uLycsCiAgICAgICAnLi4vYWNjZXNzaWJpbGl0eScsCiAgICAgICAnLi4vYWNjZXNzaWJpbGl0
eS9jaHJvbWl1bScsCisgICAgICAnLi4vYmluZGluZ3MnLAogICAgICAgJy4uL2JpbmRpbmdzL3Y4
JywKICAgICAgICcuLi9iaW5kaW5ncy92OC9jdXN0b20nLAogICAgICAgJy4uL2JyaWRnZScsCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL0JpbmRpbmdzU2VjdXJpdHkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvQmluZGluZ3NTZWN1cml0eS5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL0JpbmRpbmdzU2VjdXJpdHkuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCaW5kaW5nc1NlY3Vy
aXR5LmgiCisKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gU2Ft
ZSBvcmlnaW4gcG9saWN5IGltcGxlbWVudGF0aW9uOgorLy8KKy8vIFNhbWUgb3JpZ2luIHBvbGlj
eSBwcmV2ZW50cyBKUyBjb2RlIGZyb20gZG9tYWluIEEgZnJvbSBhY2Nlc3NpbmcgSlMgJiBET00K
Ky8vIG9iamVjdHMgaW4gYSBkaWZmZXJlbnQgZG9tYWluIEIuIFRoZXJlIGFyZSBleGNlcHRpb25z
IGFuZCBzZXZlcmFsIG9iamVjdHMKKy8vIGFyZSBhY2Nlc3NpYmxlIGJ5IGNyb3NzLWRvbWFpbiBj
b2RlLiBGb3IgZXhhbXBsZSwgdGhlIHdpbmRvdy5mcmFtZXMgb2JqZWN0CisvLyBpcyBhY2Nlc3Np
YmxlIGJ5IGNvZGUgZnJvbSBhIGRpZmZlcmVudCBkb21haW4sIGJ1dCB3aW5kb3cuZG9jdW1lbnQg
aXMgbm90LgorLy8KKy8vIFRoZSBKUyBiaW5kaW5nIGNvZGUgc2V0cyBzZWN1cml0eSBjaGVjayBj
YWxsYmFja3Mgb24gYSBmdW5jdGlvbiB0ZW1wbGF0ZSwKKy8vIGFuZCBhY2Nlc3NpbmcgaW5zdGFu
Y2VzIG9mIHRoZSB0ZW1wbGF0ZSBjYWxscyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uCisvLyBUaGUg
Y2FsbGJhY2sgZnVuY3Rpb24gZW5mb3JjZXMgdGhlIHNhbWUgb3JpZ2luIHBvbGljeS4KKy8vCisv
LyBDYWxsYmFjayBmdW5jdGlvbnMgYXJlIGV4cGVuc2l2ZS4gQmluZGluZyBjb2RlIHNob3VsZCB1
c2UgYSBzZWN1cml0eSB0b2tlbgorLy8gc3RyaW5nIHRvIGRvIGZhc3QgYWNjZXNzIGNoZWNrcyBm
b3IgdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHNvdXJjZSBhbmQgdGFyZ2V0CisvLyBhcmUgaW4gdGhl
IHNhbWUgZG9tYWluLiBBIHNlY3VyaXR5IHRva2VuIGlzIGEgc3RyaW5nIG9iamVjdCB0aGF0IHJl
cHJlc2VudHMKKy8vIHRoZSBwcm90b2NvbC91cmwvcG9ydCBvZiBhIGRvbWFpbi4KKy8vCisvLyBU
aGVyZSBhcmUgc3BlY2lhbCBjYXNlcyB3aGVyZSBzZWN1cml0eSB0b2tlbiBtYXRjaGluZyBpcyBu
b3QgZW5vdWdoLgorLy8gRm9yIGV4YW1wbGUsIEpTIGNhbiBzZXQgaXRzIGRvbWFpbiB0byBhIHN1
cGVyIGRvbWFpbiBieSBjYWxsaW5nCisvLyBkb2N1bWVudC5zZXREb21haW4oLi4uKS4gSW4gdGhl
c2UgY2FzZXMsIHRoZSBiaW5kaW5nIGNvZGUgY2FuIHJlc2V0CisvLyBhIGNvbnRleHQncyBzZWN1
cml0eSB0b2tlbiB0byBpdHMgZ2xvYmFsIG9iamVjdCBzbyB0aGF0IHRoZSBmYXN0IGFjY2Vzcwor
Ly8gY2hlY2sgd2lsbCBhbHdheXMgZmFpbC4KKworLy8gSGVscGVyIHRvIGNoZWNrIGlmIHRoZSBj
dXJyZW50IGV4ZWN1dGlvbiBjb250ZXh0IGNhbiBhY2Nlc3MgYSB0YXJnZXQgZnJhbWUuCisvLyBG
aXJzdCBpdCBjaGVja3Mgc2FtZSBkb21haW4gcG9saWN5IHVzaW5nIHRoZSBsZXhpY2FsIGNvbnRl
eHQuCisvLworLy8gVGhpcyBpcyBlcXVpdmFsZW50IHRvIEtKUzo6V2luZG93OjphbGxvd3NBY2Nl
c3NGcm9tKEV4ZWNTdGF0ZSopLgorYm9vbCBCaW5kaW5nc1NlY3VyaXR5OjpjYW5BY2Nlc3NXaW5k
b3coQmluZGluZ3NTdGF0ZSogc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBET01XaW5kb3cqIHRhcmdldFdpbmRvdykKK3sKKyAgICBBU1NFUlQodGFyZ2V0V2lu
ZG93KTsKKworICAgIFN0cmluZyBtZXNzYWdlOworCisgICAgRE9NV2luZG93KiBhY3RpdmVXaW5k
b3cgPSBzdGF0ZS0+Z2V0QWN0aXZlV2luZG93KCk7CisgICAgaWYgKGFjdGl2ZVdpbmRvdyA9PSB0
YXJnZXRXaW5kb3cpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKCFhY3RpdmVXaW5k
b3cpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IFNlY3VyaXR5T3JpZ2luKiBh
Y3RpdmVTZWN1cml0eU9yaWdpbiA9IGFjdGl2ZVdpbmRvdy0+c2VjdXJpdHlPcmlnaW4oKTsKKyAg
ICBjb25zdCBTZWN1cml0eU9yaWdpbiogdGFyZ2V0U2VjdXJpdHlPcmlnaW4gPSB0YXJnZXRXaW5k
b3ctPnNlY3VyaXR5T3JpZ2luKCk7CisKKyAgICAvLyBXZSBoYXZlIHNlZW4gY3Jhc2hlcyB3ZXJl
IHRoZSBzZWN1cml0eSBvcmlnaW4gb2YgdGhlIHRhcmdldCBoYXMgbm90IGJlZW4KKyAgICAvLyBp
bml0aWFsaXplZC4gRGVmZW5kIGFnYWluc3QgdGhhdC4KKyAgICBpZiAoIXRhcmdldFNlY3VyaXR5
T3JpZ2luKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYWN0aXZlU2VjdXJpdHlP
cmlnaW4tPmNhbkFjY2Vzcyh0YXJnZXRTZWN1cml0eU9yaWdpbikpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgLy8gQWxsb3cgYWNjZXNzIHRvIGEgImFib3V0OmJsYW5rIiBwYWdlIGlmIHRo
ZSBkeW5hbWljIGNvbnRleHQgaXMgYQorICAgIC8vIGRldGFjaGVkIGNvbnRleHQgb2YgdGhlIHNh
bWUgZnJhbWUgYXMgdGhlIGJsYW5rIHBhZ2UuCisgICAgaWYgKHRhcmdldFNlY3VyaXR5T3JpZ2lu
LT5pc0VtcHR5KCkgJiYgYWN0aXZlV2luZG93LT5mcmFtZSgpID09IHRhcmdldFdpbmRvdy0+ZnJh
bWUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgQmluZGluZ3NTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoQmluZGluZ3NTdGF0ZSogc3RhdGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYW1lKiB0YXJnZXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVwb3J0RXJyb3IpCit7
CisgICAgLy8gVGhlIHN1YmplY3QgaXMgZGV0YWNoZWQgZnJvbSBhIGZyYW1lLCBkZW55IGFjY2Vz
c2VzLgorICAgIGlmICghdGFyZ2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
IWNhbkFjY2Vzc1dpbmRvdyhzdGF0ZSwgdGFyZ2V0LT5kb21XaW5kb3coKSkpIHsKKyAgICAgICAg
aWYgKHJlcG9ydEVycm9yKQorICAgICAgICAgICAgaW1tZWRpYXRlbHlSZXBvcnRVbnNhZmVBY2Nl
c3NUbyh0YXJnZXQpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0
cnVlOworfQorCitib29sIEJpbmRpbmdzU2VjdXJpdHk6OmNoZWNrTm9kZVNlY3VyaXR5KEJpbmRp
bmdzU3RhdGUqIHN0YXRlLCBOb2RlKiBub2RlKQoreworICAgIGlmICghbm9kZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgRnJhbWUqIHRhcmdldCA9IG5vZGUtPmRvY3VtZW50KCktPmZy
YW1lKCk7CisKKyAgICBpZiAoIXRhcmdldCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmV0dXJuIGNhbkFjY2Vzc0ZyYW1lKHN0YXRlLCB0YXJnZXQsIHRydWUpOworfQorCit9ICAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9CaW5kaW5nc1NlY3VyaXR5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9CaW5kaW5nc1NlY3VyaXR5LmgJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL0JpbmRpbmdzU2VjdXJpdHkuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQmluZGluZ3NTZWN1cml0eV9oCisjZGVm
aW5lIEJpbmRpbmdzU2VjdXJpdHlfaAorCisjaW5jbHVkZSAiQmluZGluZ3NTdGF0ZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERPTVdpbmRvdzsKK2NsYXNzIEZyYW1lOworY2xh
c3MgTm9kZTsKKworLy8gU2VjdXJpdHkgZnVuY3Rpb25zIHNoYXJlZCBieSB2YXJpb3VzIGxhbmd1
YWdlIGJpbmRpbmdzLgorY2xhc3MgQmluZGluZ3NTZWN1cml0eSB7CitwdWJsaWM6CisgICAgLy8g
Q2hlY2sgaWYgdGhlIGFjdGl2ZSBleGVjdXRpb24gY29udGV4dCBjYW4gYWNjZXNzIHRoZSB0YXJn
ZXQgZnJhbWUuCisgICAgc3RhdGljIGJvb2wgY2FuQWNjZXNzRnJhbWUoQmluZGluZ3NTdGF0ZSos
IEZyYW1lKiwgYm9vbCByZXBvcnRFcnJvcik7CisKKyAgICAvLyBDaGVjayBpZiBpdCBpcyBzYWZl
IHRvIGFjY2VzcyB0aGUgZ2l2ZW4gbm9kZSBmcm9tIHRoZQorICAgIC8vIGN1cnJlbnQgc2VjdXJp
dHkgY29udGV4dC4KKyAgICBzdGF0aWMgYm9vbCBjaGVja05vZGVTZWN1cml0eShCaW5kaW5nc1N0
YXRlKiwgTm9kZSogdGFyZ2V0KTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBCaW5kaW5nc1Nl
Y3VyaXR5KCkge30KKyAgICB+QmluZGluZ3NTZWN1cml0eSgpOworCisgICAgLy8gQ2hlY2sgaWYg
dGhlIGN1cnJlbnQgRE9NV2luZG93J3Mgc2VjdXJpdHkgY29udGV4dCBjYW4gYWNjZXNzIHRoZSB0
YXJnZXQKKyAgICAvLyBET01XaW5kb3cuICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHJlcG9ydCBl
cnJvcnMsIHNvIG1vc3QgY2FsbGVycyBzaG91bGQKKyAgICAvLyB1c2UgY2FuQWNjZXNzRnJhbWUg
aW5zdGVhZC4KKyAgICBzdGF0aWMgYm9vbCBjYW5BY2Nlc3NXaW5kb3coQmluZGluZ3NTdGF0ZSos
IERPTVdpbmRvdyogdGFyZ2V0KTsKKworICAgIC8vIEFueSBmdW5jdGlvbnMgYmVsb3cgbXVzdCBi
ZSBpbXBsZW1lbnRlZCBieSBlYWNoIHNldCBvZiBiaW5kaW5ncywgc2luY2UKKyAgICAvLyB0aGV5
IGFyZSBoZWF2aWx5IGltcGxlbWVudGF0aW9uLXNwZWNpZmljLgorICAgIC8vIEZJWE1FOiBNb3Zl
IGZ1bmN0aW9ucyBsaWtlIHRoaXMgb250byBzb21lIGNhbGxiYWNrIGludGVyZmFjZS4gIFRoZXkn
cmUKKyAgICAvLyBjdXJyZW50bHkganVzdCBsaW5raW5nIGFnYWluc3QgY29kZSBpbiBlYWNoIHNw
ZWNpZmljIGJpbmRpbmcuCisKKyAgICAvLyBSZXBvcnRzIGFuIGVycm9yIG1lc3NhZ2UgKHdpdGhv
dXQgZGVsYXkpIGlmIHRoZSBzZWN1cml0eSBjaGVjayBmYWlscy4KKyAgICBzdGF0aWMgdm9pZCBp
bW1lZGlhdGVseVJlcG9ydFVuc2FmZUFjY2Vzc1RvKEZyYW1lKik7Cit9OworCit9CisKKyNlbmRp
ZiAvLyBCaW5kaW5nc1NlY3VyaXR5X2gKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvQmluZGluZ3NT
dGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvQmluZGluZ3NTdGF0ZS5oCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9CaW5kaW5nc1N0YXRlLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJpbmRpbmdzU3RhdGVfaAorI2RlZmluZSBC
aW5kaW5nc1N0YXRlX2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBET01XaW5kb3c7
CisKKy8vIENvbW1vbiBub3Rpb24gb2YgZXhlY3V0aW9uIHN0YXRlIGZvciBsYW5ndWFnZSBiaW5k
aW5ncy4KK2NsYXNzIEJpbmRpbmdzU3RhdGUgeworcHVibGljOgorICAgIC8vIFRoZSBET01XaW5k
b3cgY29ycmVzcG9uZGluZyB0byB0aGUgJ2NhbGxpbmcgY29udGV4dCcgb2YgZXhlY3V0aW9uLgor
ICAgIHZpcnR1YWwgRE9NV2luZG93KiBnZXRBY3RpdmVXaW5kb3coKSA9IDA7Cit9OworCit9CisK
KyNlbmRpZiAvLyBCaW5kaW5nc1N0YXRlX2gKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNpb24gNTE4ODQpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBAIC00MDEsNyAr
NDAxLDcgQEAgRU5ECiAgICAgSG9sZGVyVG9OYXRpdmUoJGRhdGFOb2RlLCAkaW1wbENsYXNzTmFt
ZSwgJGNsYXNzSW5kZXgpOwogCiAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgPDxFTkQpOwot
ICAgIGlmICghVjhQcm94eTo6Y2FuQWNjZXNzRnJhbWUoaW1wLT5mcmFtZSgpLCBmYWxzZSkpIHsK
KyAgICBpZiAoIUJpbmRpbmdzU2VjdXJpdHk6OmNhbkFjY2Vzc0ZyYW1lKFY4U3RhdGU6Ok9ubHko
KSwgaW1wLT5mcmFtZSgpLCBmYWxzZSkpIHsKICAgICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gc2hhcmVkX3RlbXBsYXRlID0KICAgICAgICAgdjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+OjpOZXcoJG5ld1RlbXBsYXRlU3RyaW5nKTsKICAg
ICAgIHJldHVybiBzaGFyZWRfdGVtcGxhdGUtPkdldEZ1bmN0aW9uKCk7CkBAIC01NDgsOSArNTQ4
LDkgQEAgRU5ECiAKICAgICAjIEdlbmVyYXRlIHNlY3VyaXR5IGNoZWNrcyBpZiBuZWNlc3NhcnkK
ICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2hl
Y2tOb2RlU2VjdXJpdHkifSkgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAg
IGlmICghVjhQcm94eTo6Y2hlY2tOb2RlU2VjdXJpdHkoaW1wLT4kYXR0ck5hbWUoKSkpIHJldHVy
biB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTtcblxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250
ZW50RGVjbHMsICIgICAgaWYgKCFCaW5kaW5nc1NlY3VyaXR5OjpjaGVja05vZGVTZWN1cml0eShW
OFN0YXRlOjpPbmx5KCksIGltcC0+JGF0dHJOYW1lKCkpKSByZXR1cm4gdjg6OkhhbmRsZTx2ODo6
VmFsdWU+KCk7XG5cbiIpOwogICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkNoZWNrRnJhbWVTZWN1cml0eSJ9KSB7Ci0gICAgICAgIHB1c2go
QGltcGxDb250ZW50RGVjbHMsICIgICAgaWYgKCFWOFByb3h5OjpjaGVja05vZGVTZWN1cml0eShp
bXAtPmNvbnRlbnREb2N1bWVudCgpKSkgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpO1xu
XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBpZiAoIUJpbmRpbmdz
U2VjdXJpdHk6OmNoZWNrTm9kZVNlY3VyaXR5KFY4U3RhdGU6Ok9ubHkoKSwgaW1wLT5jb250ZW50
RG9jdW1lbnQoKSkpIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTtcblxuIik7CiAgICAg
fQogCiAgICAgbXkgJHVzZUV4Y2VwdGlvbnMgPSAxIGlmIEB7JGF0dHJpYnV0ZS0+Z2V0dGVyRXhj
ZXB0aW9uc30gYW5kICEoJGlzUG9kVHlwZSk7CkBAIC04OTMsNyArODkzLDcgQEAgRU5ECiAgICAg
ICAgJiYgISRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRG9Ob3RD
aGVja0RvbWFpblNlY3VyaXR5In0pIHsKICAgICAjIFdlIGhhdmUgbm90IGZpbmQgcmVhbCB1c2Ug
Y2FzZXMgeWV0LgogICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsCi0iICAgIGlmICghVjhQcm94
eTo6Y2FuQWNjZXNzRnJhbWUoaW1wLT5mcmFtZSgpLCB0cnVlKSkge1xuIi4KKyIgICAgaWYgKCFC
aW5kaW5nc1NlY3VyaXR5OjpjYW5BY2Nlc3NGcmFtZShWOFN0YXRlOjpPbmx5KCksIGltcC0+ZnJh
bWUoKSwgdHJ1ZSkpIHtcbiIuCiAiICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigp
O1xuIiAuCiAiICAgIH1cbiIpOwogICAgIH0KQEAgLTkyNSw3ICs5MjUsNyBAQCBFTkQKICAgICB9
CiAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiU1ZH
Q2hlY2tTZWN1cml0eURvY3VtZW50In0pIHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNs
cywKLSIgICAgaWYgKCFWOFByb3h5OjpjaGVja05vZGVTZWN1cml0eShpbXAtPmdldFNWR0RvY3Vt
ZW50KGVjKSkpXG4iIC4KKyIgICAgaWYgKCFCaW5kaW5nc1NlY3VyaXR5OjpjaGVja05vZGVTZWN1
cml0eShWOFN0YXRlOjpPbmx5KCksIGltcC0+Z2V0U1ZHRG9jdW1lbnQoZWMpKSlcbiIgLgogIiAg
ICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTtcbiIpOwogICAgIH0KIApAQCAtMTEz
OSw4ICsxMTM5LDEwIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAKICAgICBwdXNoKEBp
bXBsRml4ZWRIZWFkZXIsCiAgICAgICAgICAiI2luY2x1ZGUgXCJjb25maWcuaFwiXG4iIC4KKyAg
ICAgICAgICIjaW5jbHVkZSBcIkJpbmRpbmdzU2VjdXJpdHkuaFwiXG4iIC4KICAgICAgICAgICIj
aW5jbHVkZSBcIlY4UHJveHkuaFwiXG4iIC4KLSAgICAgICAgICIjaW5jbHVkZSBcIlY4QmluZGlu
Zy5oXCJcblxuIiAuCisgICAgICAgICAiI2luY2x1ZGUgXCJWOEJpbmRpbmcuaFwiXG4iIC4KKyAg
ICAgICAgICIjaW5jbHVkZSBcIlY4U3RhdGUuaFwiXG5cbiIgLgogICAgICAgICAgIiN1bmRlZiBM
T0dcblxuIik7CiAKICAgICBwdXNoKEBpbXBsRml4ZWRIZWFkZXIsICJcbiNpZiAke2NvbmRpdGlv
bmFsU3RyaW5nfVxuXG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDUxODg0KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NiArMzIsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xs
ZXIuaCIKIAorI2luY2x1ZGUgIkJpbmRpbmdzU2VjdXJpdHkuaCIKICNpbmNsdWRlICJDaHJvbWl1
bUJyaWRnZS5oIgogI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgpA
QCAtNTIsNiArNTMsNyBAQAogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4TlBP
YmplY3QuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCisjaW5jbHVkZSAiVjhTdGF0ZS5oIgogI2lu
Y2x1ZGUgIldpZGdldC5oIgogI2luY2x1ZGUgIlhTU0F1ZGl0b3IuaCIKICNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CkBAIC04NCw3ICs4Niw3IEBAIEZyYW1lKiBTY3JpcHRDb250cm9sbGVy
OjpyZXRyaWV2ZUZyYW1lRm8KIAogYm9vbCBTY3JpcHRDb250cm9sbGVyOjppc1NhZmVTY3JpcHQo
RnJhbWUqIHRhcmdldCkKIHsKLSAgICByZXR1cm4gVjhQcm94eTo6Y2FuQWNjZXNzRnJhbWUodGFy
Z2V0LCB0cnVlKTsKKyAgICByZXR1cm4gQmluZGluZ3NTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUo
VjhTdGF0ZTo6T25seSgpLCB0YXJnZXQsIHRydWUpOwogfQogCiB2b2lkIFNjcmlwdENvbnRyb2xs
ZXI6OmdjUHJvdGVjdEpTV3JhcHBlcih2b2lkKiBkb21PYmplY3QpCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvdjgv
VjhQcm94eS5jcHAJKHJldmlzaW9uIDUxODg0KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBy
b3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKIAorI2luY2x1ZGUgIkJpbmRpbmdzU2VjdXJpdHku
aCIKICNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgogI2luY2x1ZGUgIkNTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiRGF0ZUV4dGVuc2lvbi5oIgpAQCAtODU2LDk3ICs4
NTcsNiBAQCB2b2lkIFY4UHJveHk6OnVwZGF0ZVNlY3VyaXR5T3JpZ2luKCkKICAgICBzZXRTZWN1
cml0eVRva2VuKCk7CiB9CiAKLS8vIFNhbWUgb3JpZ2luIHBvbGljeSBpbXBsZW1lbnRhdGlvbjoK
LS8vCi0vLyBTYW1lIG9yaWdpbiBwb2xpY3kgcHJldmVudHMgSlMgY29kZSBmcm9tIGRvbWFpbiBB
IGFjY2VzcyBKUyAmIERPTSBvYmplY3RzCi0vLyBpbiBhIGRpZmZlcmVudCBkb21haW4gQi4gVGhl
cmUgYXJlIGV4Y2VwdGlvbnMgYW5kIHNldmVyYWwgb2JqZWN0cyBhcmUKLS8vIGFjY2Vzc2libGUg
YnkgY3Jvc3MtZG9tYWluIGNvZGUuIEZvciBleGFtcGxlLCB0aGUgd2luZG93LmZyYW1lcyBvYmpl
Y3QgaXMKLS8vIGFjY2Vzc2libGUgYnkgY29kZSBmcm9tIGEgZGlmZmVyZW50IGRvbWFpbiwgYnV0
IHdpbmRvdy5kb2N1bWVudCBpcyBub3QuCi0vLwotLy8gVGhlIGJpbmRpbmcgY29kZSBzZXRzIHNl
Y3VyaXR5IGNoZWNrIGNhbGxiYWNrcyBvbiBhIGZ1bmN0aW9uIHRlbXBsYXRlLAotLy8gYW5kIGFj
Y2Vzc2luZyBpbnN0YW5jZXMgb2YgdGhlIHRlbXBsYXRlIGNhbGxzIHRoZSBjYWxsYmFjayBmdW5j
dGlvbi4KLS8vIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBjaGVja3Mgc2FtZSBvcmlnaW4gcG9saWN5
LgotLy8KLS8vIENhbGxiYWNrIGZ1bmN0aW9ucyBhcmUgZXhwZW5zaXZlLiBWOCB1c2VzIGEgc2Vj
dXJpdHkgdG9rZW4gc3RyaW5nIHRvIGRvCi0vLyBmYXN0IGFjY2VzcyBjaGVja3MgZm9yIHRoZSBj
b21tb24gY2FzZSB3aGVyZSBzb3VyY2UgYW5kIHRhcmdldCBhcmUgaW4gdGhlCi0vLyBzYW1lIGRv
bWFpbi4gQSBzZWN1cml0eSB0b2tlbiBpcyBhIHN0cmluZyBvYmplY3QgdGhhdCByZXByZXNlbnRz
Ci0vLyB0aGUgcHJvdG9jb2wvdXJsL3BvcnQgb2YgYSBkb21haW4uCi0vLwotLy8gVGhlcmUgYXJl
IHNwZWNpYWwgY2FzZXMgd2hlcmUgYSBzZWN1cml0eSB0b2tlbiBtYXRjaGluZyBpcyBub3QgZW5v
dWdoLgotLy8gRm9yIGV4YW1wbGUsIEphdmFTY3JpcHQgY2FuIHNldCBpdHMgZG9tYWluIHRvIGEg
c3VwZXIgZG9tYWluIGJ5IGNhbGxpbmcKLS8vIGRvY3VtZW50LnNldERvbWFpbiguLi4pLiBJbiB0
aGVzZSBjYXNlcywgdGhlIGJpbmRpbmcgY29kZSBjYW4gcmVzZXQKLS8vIGEgY29udGV4dCdzIHNl
Y3VyaXR5IHRva2VuIHRvIGl0cyBnbG9iYWwgb2JqZWN0IHNvIHRoYXQgdGhlIGZhc3QgYWNjZXNz
Ci0vLyBjaGVjayB3aWxsIGFsd2F5cyBmYWlsLgotCi0vLyBDaGVjayBpZiB0aGUgY3VycmVudCBl
eGVjdXRpb24gY29udGV4dCBjYW4gYWNjZXNzIGEgdGFyZ2V0IGZyYW1lLgotLy8gRmlyc3QgaXQg
Y2hlY2tzIHNhbWUgZG9tYWluIHBvbGljeSB1c2luZyB0aGUgbGV4aWNhbCBjb250ZXh0Ci0vLwot
Ly8gVGhpcyBpcyBlcXVpdmFsZW50IHRvIEtKUzo6V2luZG93OjphbGxvd3NBY2Nlc3NGcm9tKEV4
ZWNTdGF0ZSosIFN0cmluZyYpLgotYm9vbCBWOFByb3h5OjpjYW5BY2Nlc3NQcml2YXRlKERPTVdp
bmRvdyogdGFyZ2V0V2luZG93KQotewotICAgIEFTU0VSVCh0YXJnZXRXaW5kb3cpOwotCi0gICAg
U3RyaW5nIG1lc3NhZ2U7Ci0KLSAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGFjdGl2ZUNvbnRl
eHQgPSB2ODo6Q29udGV4dDo6R2V0Q2FsbGluZygpOwotICAgIGlmIChhY3RpdmVDb250ZXh0Lklz
RW1wdHkoKSkgewotICAgICAgICAvLyBUaGVyZSBpcyBhIHNpbmdsZSBhY3RpdmF0aW9uIHJlY29y
ZCBvbiB0aGUgc3RhY2ssIHNvIHRoYXQgbXVzdAotICAgICAgICAvLyBiZSB0aGUgYWN0aXZlQ29u
dGV4dC4KLSAgICAgICAgYWN0aXZlQ29udGV4dCA9IHY4OjpDb250ZXh0OjpHZXRDdXJyZW50KCk7
Ci0gICAgfQotICAgIERPTVdpbmRvdyogYWN0aXZlV2luZG93ID0gcmV0cmlldmVXaW5kb3coYWN0
aXZlQ29udGV4dCk7Ci0gICAgaWYgKGFjdGl2ZVdpbmRvdyA9PSB0YXJnZXRXaW5kb3cpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKCFhY3RpdmVXaW5kb3cpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGNvbnN0IFNlY3VyaXR5T3JpZ2luKiBhY3RpdmVTZWN1cml0eU9yaWdp
biA9IGFjdGl2ZVdpbmRvdy0+c2VjdXJpdHlPcmlnaW4oKTsKLSAgICBjb25zdCBTZWN1cml0eU9y
aWdpbiogdGFyZ2V0U2VjdXJpdHlPcmlnaW4gPSB0YXJnZXRXaW5kb3ctPnNlY3VyaXR5T3JpZ2lu
KCk7Ci0KLSAgICAvLyBXZSBoYXZlIHNlZW4gY3Jhc2hlcyB3ZXJlIHRoZSBzZWN1cml0eSBvcmln
aW4gb2YgdGhlIHRhcmdldCBoYXMgbm90IGJlZW4KLSAgICAvLyBpbml0aWFsaXplZC4gRGVmZW5k
IGFnYWluc3QgdGhhdC4KLSAgICBpZiAoIXRhcmdldFNlY3VyaXR5T3JpZ2luKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYWN0aXZlU2VjdXJpdHlPcmlnaW4tPmNhbkFjY2Vzcyh0
YXJnZXRTZWN1cml0eU9yaWdpbikpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gQWxs
b3cgYWNjZXNzIHRvIGEgImFib3V0OmJsYW5rIiBwYWdlIGlmIHRoZSBkeW5hbWljIGNvbnRleHQg
aXMgYQotICAgIC8vIGRldGFjaGVkIGNvbnRleHQgb2YgdGhlIHNhbWUgZnJhbWUgYXMgdGhlIGJs
YW5rIHBhZ2UuCi0gICAgaWYgKHRhcmdldFNlY3VyaXR5T3JpZ2luLT5pc0VtcHR5KCkgJiYgYWN0
aXZlV2luZG93LT5mcmFtZSgpID09IHRhcmdldFdpbmRvdy0+ZnJhbWUoKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVjhQcm94eTo6Y2FuQWNj
ZXNzRnJhbWUoRnJhbWUqIHRhcmdldCwgYm9vbCByZXBvcnRFcnJvcikKLXsKLSAgICAvLyBUaGUg
c3ViamVjdCBpcyBkZXRhY2hlZCBmcm9tIGEgZnJhbWUsIGRlbnkgYWNjZXNzZXMuCi0gICAgaWYg
KCF0YXJnZXQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghY2FuQWNjZXNzUHJp
dmF0ZSh0YXJnZXQtPmRvbVdpbmRvdygpKSkgewotICAgICAgICBpZiAocmVwb3J0RXJyb3IpCi0g
ICAgICAgICAgICByZXBvcnRVbnNhZmVBY2Nlc3NUbyh0YXJnZXQsIFJlcG9ydE5vdyk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVjhQ
cm94eTo6Y2hlY2tOb2RlU2VjdXJpdHkoTm9kZSogbm9kZSkKLXsKLSAgICBpZiAoIW5vZGUpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEZyYW1lKiB0YXJnZXQgPSBub2RlLT5kb2N1bWVu
dCgpLT5mcmFtZSgpOwotCi0gICAgaWYgKCF0YXJnZXQpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHJldHVybiBjYW5BY2Nlc3NGcmFtZSh0YXJnZXQsIHRydWUpOwotfQotCiB2ODo6UGVy
c2lzdGVudDx2ODo6Q29udGV4dD4gVjhQcm94eTo6Y3JlYXRlTmV3Q29udGV4dCh2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGdsb2JhbCwgaW50IGV4dGVuc2lvbkdyb3VwKQogewogICAgIHY4OjpQZXJz
aXN0ZW50PHY4OjpDb250ZXh0PiByZXN1bHQ7CkBAIC0xNDEzLDQgKzEzMjMsMTEgQEAgdjg6Okxv
Y2FsPHY4OjpDb250ZXh0PiB0b1Y4Q29udGV4dChTY3JpcAogICAgIHJldHVybiB2ODo6TG9jYWw8
djg6OkNvbnRleHQ+KCk7CiB9CiAKKy8vIEltcGxlbWVudCBCaW5kaW5nc1NlY3VyaXR5IG1ldGhv
ZHMgdGhhdCBkZXBlbmQgb24gVjgtc3BlY2lmaWMgY29kZS4KKwordm9pZCBCaW5kaW5nc1NlY3Vy
aXR5OjppbW1lZGlhdGVseVJlcG9ydFVuc2FmZUFjY2Vzc1RvKEZyYW1lKiB0YXJnZXQpCit7Cisg
ICAgcmVwb3J0VW5zYWZlQWNjZXNzVG8odGFyZ2V0LCBSZXBvcnROb3cpOworfQorCiB9ICAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgJKHJldmlzaW9uIDUxODg0
KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMw
MCwxMyArMzAwLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBpcyBkaXNhYmxl
ZCBhbmQgaXQgcmV0dXJucyB0cnVlLgogICAgICAgICBzdGF0aWMgYm9vbCBoYW5kbGVPdXRPZk1l
bW9yeSgpOwogCi0gICAgICAgIC8vIENoZWNrIGlmIHRoZSBhY3RpdmUgZXhlY3V0aW9uIGNvbnRl
eHQgY2FuIGFjY2VzcyB0aGUgdGFyZ2V0IGZyYW1lLgotICAgICAgICBzdGF0aWMgYm9vbCBjYW5B
Y2Nlc3NGcmFtZShGcmFtZSosIGJvb2wgcmVwb3J0RXJyb3IpOwotCi0gICAgICAgIC8vIENoZWNr
IGlmIGl0IGlzIHNhZmUgdG8gYWNjZXNzIHRoZSBnaXZlbiBub2RlIGZyb20gdGhlCi0gICAgICAg
IC8vIGN1cnJlbnQgc2VjdXJpdHkgY29udGV4dC4KLSAgICAgICAgc3RhdGljIGJvb2wgY2hlY2tO
b2RlU2VjdXJpdHkoTm9kZSopOwotCiAgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gY2hlY2tOZXdMZWdhbChjb25zdCB2ODo6QXJndW1lbnRzJik7CiAKICAgICAgICAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gY29tcGlsZVNjcmlwdCh2ODo6SGFuZGxlPHY4OjpTdHJp
bmc+IGNvZGUsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGludCBiYXNlTGluZSk7CkBAIC0zODcs
OCArMzgwLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBSZXR1cm5zIGZhbHNl
IHdoZW4gd2UncmUgb3V0IG9mIG1lbW9yeSBpbiBWOC4KICAgICAgICAgYm9vbCBzZXRJbmplY3Rl
ZFNjcmlwdENvbnRleHREZWJ1Z0lkKHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHRhcmdldENvbnRl
eHQpOwogCi0gICAgICAgIHN0YXRpYyBib29sIGNhbkFjY2Vzc1ByaXZhdGUoRE9NV2luZG93Kik7
Ci0KICAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHJhbmdlRXhjZXB0aW9uTmFtZShpbnQgZXhj
ZXB0aW9uQ29kZSk7CiAgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBldmVudEV4Y2VwdGlvbk5h
bWUoaW50IGV4Y2VwdGlvbkNvZGUpOwogICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogeG1sSHR0
cFJlcXVlc3RFeGNlcHRpb25OYW1lKGludCBleGNlcHRpb25Db2RlKTsKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvdjgvVjhTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92
OC9WOFN0YXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhTdGF0
ZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVjhTdGF0ZS5oIgorCisjaW5jbHVkZSAiVjhQcm94eS5oIgorI2luY2x1ZGUg
PHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitWOFN0YXRlKiBW
OFN0YXRlOjpPbmx5KCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFY4U3RhdGUsIGdsb2Jh
bFY4U3RhdGUsICgpKTsKKyAgICByZXR1cm4gJmdsb2JhbFY4U3RhdGU7Cit9CisKK0RPTVdpbmRv
dyogVjhTdGF0ZTo6Z2V0QWN0aXZlV2luZG93KCkKK3sKKyAgICB2ODo6TG9jYWw8djg6OkNvbnRl
eHQ+IGFjdGl2ZUNvbnRleHQgPSB2ODo6Q29udGV4dDo6R2V0Q2FsbGluZygpOworICAgIGlmIChh
Y3RpdmVDb250ZXh0LklzRW1wdHkoKSkgeworICAgICAgICAvLyBUaGVyZSBpcyBhIHNpbmdsZSBh
Y3RpdmF0aW9uIHJlY29yZCBvbiB0aGUgc3RhY2ssIHNvIHRoYXQgbXVzdAorICAgICAgICAvLyBi
ZSB0aGUgYWN0aXZlQ29udGV4dC4KKyAgICAgICAgYWN0aXZlQ29udGV4dCA9IHY4OjpDb250ZXh0
OjpHZXRDdXJyZW50KCk7CisgICAgfQorICAgIHJldHVybiBWOFByb3h5OjpyZXRyaWV2ZVdpbmRv
dyhhY3RpdmVDb250ZXh0KTsKK30KKworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvVjhTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvdjgvVjhTdGF0ZS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOFN0
YXRlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFY4U3RhdGVfaAor
I2RlZmluZSBWOFN0YXRlX2gKKworI2luY2x1ZGUgIkJpbmRpbmdzU3RhdGUuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisvLyBTaW5nbGV0b24gaW1wbGVtZW50YXRpb24gb2YgQmluZGluZ3NT
dGF0ZS4gIFVzZXMgVjgncyBnbG9iYWwgaW5mbyB0byByZXR1cm4KKy8vIGluZm9ybWF0aW9uIGFi
b3V0IHJlbGV2YW50IGV4ZWN1dGlvbiBzdGF0ZS4KK2NsYXNzIFY4U3RhdGUgOiBwdWJsaWMgQmlu
ZGluZ3NTdGF0ZSB7CitwdWJsaWM6CisgICAgLy8gU2luZ2xldG9uCisgICAgc3RhdGljIFY4U3Rh
dGUqIE9ubHkoKTsKKworICAgIC8vIFRoZSBET01XaW5kb3cgY29ycmVzcG9uZGluZyB0byB0aGUg
J2NhbGxpbmcgY29udGV4dCcgb2YgZXhlY3V0aW9uLgorICAgIERPTVdpbmRvdyogZ2V0QWN0aXZl
V2luZG93KCk7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgVjhTdGF0ZSgpIHt9CisgICAgflY4
U3RhdGUoKTsKK307CisKK30KKworI2VuZGlmIC8vIFY4U3RhdGVfaApJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuY3BwCShyZXZpc2lvbiA1MTg4
NCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKIAorI2luY2x1ZGUgIkJpbmRpbmdzU2VjdXJpdHkuaCIK
ICNpbmNsdWRlICJDU1NIZWxwZXIuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKQEAgLTQwLDYgKzQxLDcgQEAKICNpbmNsdWRlICJIVE1MRnJhbWVFbGVtZW50
QmFzZS5oIgogI2luY2x1ZGUgIkxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgorI2lu
Y2x1ZGUgIlY4U3RhdGUuaCIKIAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHUGF0aFNl
Zy5oIgpAQCAtNTEsNyArNTMsNyBAQCBib29sIGFsbG93U2V0dGluZ0ZyYW1lU3JjVG9KYXZhc2Ny
aXB0VXJsCiB7CiAgICAgaWYgKHByb3RvY29sSXMoZGVwcmVjYXRlZFBhcnNlVVJMKHZhbHVlKSwg
ImphdmFzY3JpcHQiKSkgewogICAgICAgICBOb2RlKiBjb250ZW50RG9jID0gZnJhbWUtPmNvbnRl
bnREb2N1bWVudCgpOwotICAgICAgICBpZiAoY29udGVudERvYyAmJiAhVjhQcm94eTo6Y2hlY2tO
b2RlU2VjdXJpdHkoY29udGVudERvYykpCisgICAgICAgIGlmIChjb250ZW50RG9jICYmICFCaW5k
aW5nc1NlY3VyaXR5OjpjaGVja05vZGVTZWN1cml0eShWOFN0YXRlOjpPbmx5KCksIGNvbnRlbnRE
b2MpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTk3LDcgKzk5LDcgQEAgSU5ERVhFRF9BQ0NFU1NfQ0hFQ0soSGlzdG9yeSkKICAgICBBU1NF
UlQoVjhDbGFzc0luZGV4OjpGcm9tSW50KGRhdGEtPkludDMyVmFsdWUoKSkgPT0gVjhDbGFzc0lu
ZGV4OjpISVNUT1JZKTsKICAgICAvLyBPbmx5IGFsbG93IHNhbWUgb3JpZ2luIGFjY2Vzcy4KICAg
ICBIaXN0b3J5KiBoaXN0b3J5ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8
SGlzdG9yeT4oVjhDbGFzc0luZGV4OjpISVNUT1JZLCBob3N0KTsKLSAgICByZXR1cm4gVjhQcm94
eTo6Y2FuQWNjZXNzRnJhbWUoaGlzdG9yeS0+ZnJhbWUoKSwgZmFsc2UpOworICAgIHJldHVybiBC
aW5kaW5nc1NlY3VyaXR5OjpjYW5BY2Nlc3NGcmFtZShWOFN0YXRlOjpPbmx5KCksIGhpc3Rvcnkt
PmZyYW1lKCksIGZhbHNlKTsKIH0KIAogTkFNRURfQUNDRVNTX0NIRUNLKEhpc3RvcnkpCkBAIC0x
MDUsNyArMTA3LDcgQEAgTkFNRURfQUNDRVNTX0NIRUNLKEhpc3RvcnkpCiAgICAgQVNTRVJUKFY4
Q2xhc3NJbmRleDo6RnJvbUludChkYXRhLT5JbnQzMlZhbHVlKCkpID09IFY4Q2xhc3NJbmRleDo6
SElTVE9SWSk7CiAgICAgLy8gT25seSBhbGxvdyBzYW1lIG9yaWdpbiBhY2Nlc3MuCiAgICAgSGlz
dG9yeSogaGlzdG9yeSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEhpc3Rv
cnk+KFY4Q2xhc3NJbmRleDo6SElTVE9SWSwgaG9zdCk7Ci0gICAgcmV0dXJuIFY4UHJveHk6OmNh
bkFjY2Vzc0ZyYW1lKGhpc3RvcnktPmZyYW1lKCksIGZhbHNlKTsKKyAgICByZXR1cm4gQmluZGlu
Z3NTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhTdGF0ZTo6T25seSgpLCBoaXN0b3J5LT5mcmFt
ZSgpLCBmYWxzZSk7CiB9CiAKICN1bmRlZiBJTkRFWEVEX0FDQ0VTU19DSEVDSwpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAkocmV2
aXNpb24gNTE4ODQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDkgKzM2LDExIEBACiAjaW5jbHVkZSAiVjhD
dXN0b21FdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiVjhNZXNzYWdlUG9ydEN1c3RvbS5oIgog
I2luY2x1ZGUgIlY4UHJveHkuaCIKKyNpbmNsdWRlICJWOFN0YXRlLmgiCiAjaW5jbHVkZSAiVjhV
dGlsaXRpZXMuaCIKIAogI2luY2x1ZGUgIkJhc2U2NC5oIgorI2luY2x1ZGUgIkJpbmRpbmdzU2Vj
dXJpdHkuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRE9NVGltZXIu
aCIKICNpbmNsdWRlICJGcmFtZS5oIgpAQCAtMTAxLDcgKzEwMyw3IEBAIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOEN1c3RvbTo6V2luZG93U2UKIAogICAgIERPTVdpbmRvdyogaW1wID0gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRP
TVdJTkRPVywgYXJncy5Ib2xkZXIoKSk7CiAKLSAgICBpZiAoIVY4UHJveHk6OmNhbkFjY2Vzc0Zy
YW1lKGltcC0+ZnJhbWUoKSwgdHJ1ZSkpCisgICAgaWYgKCFCaW5kaW5nc1NlY3VyaXR5OjpjYW5B
Y2Nlc3NGcmFtZShWOFN0YXRlOjpPbmx5KCksIGltcC0+ZnJhbWUoKSwgdHJ1ZSkpCiAgICAgICAg
IHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBz
Y3JpcHRDb250ZXh0ID0gc3RhdGljX2Nhc3Q8U2NyaXB0RXhlY3V0aW9uQ29udGV4dCo+KGltcC0+
ZG9jdW1lbnQoKSk7CkBAIC0xNzEsNyArMTczLDcgQEAgQUNDRVNTT1JfR0VUVEVSKERPTVdpbmRv
d0V2ZW50KQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCiAgICAgRnJhbWUqIGZy
YW1lID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENs
YXNzSW5kZXg6OkRPTVdJTkRPVywgaG9sZGVyKS0+ZnJhbWUoKTsKLSAgICBpZiAoIVY4UHJveHk6
OmNhbkFjY2Vzc0ZyYW1lKGZyYW1lLCB0cnVlKSkKKyAgICBpZiAoIUJpbmRpbmdzU2VjdXJpdHk6
OmNhbkFjY2Vzc0ZyYW1lKFY4U3RhdGU6Ok9ubHkoKSwgZnJhbWUsIHRydWUpKQogICAgICAgICBy
ZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCiAgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250
ZXh0ID0gVjhQcm94eTo6Y29udGV4dChmcmFtZSk7CkBAIC0xOTIsNyArMTk0LDcgQEAgQUNDRVNT
T1JfU0VUVEVSKERPTVdpbmRvd0V2ZW50KQogICAgICAgICByZXR1cm47CiAKICAgICBGcmFtZSog
ZnJhbWUgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4
Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBob2xkZXIpLT5mcmFtZSgpOwotICAgIGlmICghVjhQcm94
eTo6Y2FuQWNjZXNzRnJhbWUoZnJhbWUsIHRydWUpKQorICAgIGlmICghQmluZGluZ3NTZWN1cml0
eTo6Y2FuQWNjZXNzRnJhbWUoVjhTdGF0ZTo6T25seSgpLCBmcmFtZSwgdHJ1ZSkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCA9IFY4UHJveHk6
OmNvbnRleHQoZnJhbWUpOwpAQCAtMjIwLDcgKzIyMiw3IEBAIEFDQ0VTU09SX1NFVFRFUihET01X
aW5kb3dPcGVuZXIpCiB7CiAgICAgRE9NV2luZG93KiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZl
cnRUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBpbmZv
LkhvbGRlcigpKTsKIAotICAgIGlmICghVjhQcm94eTo6Y2FuQWNjZXNzRnJhbWUoaW1wLT5mcmFt
ZSgpLCB0cnVlKSkKKyAgICBpZiAoIUJpbmRpbmdzU2VjdXJpdHk6OmNhbkFjY2Vzc0ZyYW1lKFY4
U3RhdGU6Ok9ubHkoKSwgaW1wLT5mcmFtZSgpLCB0cnVlKSkKICAgICAgICAgcmV0dXJuOwogICAK
ICAgICAvLyBPcGVuZXIgY2FuIGJlIHNoYWRvd2VkIGlmIGl0IGlzIGluIHRoZSBzYW1lIGRvbWFp
bi4KQEAgLTM0Myw3ICszNDUsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woRE9NV2luZG93QWRkRXZl
bnRMaXN0CiAKICAgICBET01XaW5kb3cqIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0
aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGFyZ3MuSG9sZGVy
KCkpOwogCi0gICAgaWYgKCFWOFByb3h5OjpjYW5BY2Nlc3NGcmFtZShpbXAtPmZyYW1lKCksIHRy
dWUpKQorICAgIGlmICghQmluZGluZ3NTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhTdGF0ZTo6
T25seSgpLCBpbXAtPmZyYW1lKCksIHRydWUpKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5l
ZCgpOwogCiAgICAgRG9jdW1lbnQqIGRvYyA9IGltcC0+ZG9jdW1lbnQoKTsKQEAgLTM3Niw3ICsz
NzgsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woRE9NV2luZG93UmVtb3ZlRXZlbnRMCiAKICAgICBE
T01XaW5kb3cqIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PERPTVdp
bmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGFyZ3MuSG9sZGVyKCkpOwogCi0gICAgaWYg
KCFWOFByb3h5OjpjYW5BY2Nlc3NGcmFtZShpbXAtPmZyYW1lKCksIHRydWUpKQorICAgIGlmICgh
QmluZGluZ3NTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhTdGF0ZTo6T25seSgpLCBpbXAtPmZy
YW1lKCksIHRydWUpKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCiAgICAgRG9j
dW1lbnQqIGRvYyA9IGltcC0+ZG9jdW1lbnQoKTsKQEAgLTQ0MSw3ICs0NDMsNyBAQCBDQUxMQkFD
S19GVU5DX0RFQ0woRE9NV2luZG93QXRvYikKIAogICAgIERPTVdpbmRvdyogaW1wID0gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRP
TVdJTkRPVywgYXJncy5Ib2xkZXIoKSk7CiAKLSAgICBpZiAoIVY4UHJveHk6OmNhbkFjY2Vzc0Zy
YW1lKGltcC0+ZnJhbWUoKSwgdHJ1ZSkpCisgICAgaWYgKCFCaW5kaW5nc1NlY3VyaXR5OjpjYW5B
Y2Nlc3NGcmFtZShWOFN0YXRlOjpPbmx5KCksIGltcC0+ZnJhbWUoKSwgdHJ1ZSkpCiAgICAgICAg
IHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCkBA
IC00NjAsNyArNDYyLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRvd0J0b2EpCiAKICAg
ICBET01XaW5kb3cqIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PERP
TVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGFyZ3MuSG9sZGVyKCkpOwogCi0gICAg
aWYgKCFWOFByb3h5OjpjYW5BY2Nlc3NGcmFtZShpbXAtPmZyYW1lKCksIHRydWUpKQorICAgIGlm
ICghQmluZGluZ3NTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhTdGF0ZTo6T25seSgpLCBpbXAt
PmZyYW1lKCksIHRydWUpKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCiAgICAg
aWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQpAQCAtNjIxLDcgKzYyMyw3IEBAIENBTExCQUNLX0ZVTkNf
REVDTChET01XaW5kb3dTaG93TW9kYWxEaWEKICAgICAgICAgVjhDbGFzc0luZGV4OjpET01XSU5E
T1csIGFyZ3MuSG9sZGVyKCkpOwogICAgIEZyYW1lKiBmcmFtZSA9IHdpbmRvdy0+ZnJhbWUoKTsK
IAotICAgIGlmICghVjhQcm94eTo6Y2FuQWNjZXNzRnJhbWUoZnJhbWUsIHRydWUpKQorICAgIGlm
ICghQmluZGluZ3NTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhTdGF0ZTo6T25seSgpLCBmcmFt
ZSwgdHJ1ZSkpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKICAgICBGcmFtZSog
Y2FsbGluZ0ZyYW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckNhbGxpbmdDb250ZXh0KCk7
CkBAIC03MDksNyArNzExLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRvd09wZW4pCiAg
ICAgRE9NV2luZG93KiBwYXJlbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBhcmdzLkhvbGRlcigpKTsKICAg
ICBGcmFtZSogZnJhbWUgPSBwYXJlbnQtPmZyYW1lKCk7CiAKLSAgICBpZiAoIVY4UHJveHk6OmNh
bkFjY2Vzc0ZyYW1lKGZyYW1lLCB0cnVlKSkKKyAgICBpZiAoIUJpbmRpbmdzU2VjdXJpdHk6OmNh
bkFjY2Vzc0ZyYW1lKFY4U3RhdGU6Ok9ubHkoKSwgZnJhbWUsIHRydWUpKQogICAgICAgICByZXR1
cm4gdjg6OlVuZGVmaW5lZCgpOwogCiAgICAgRnJhbWUqIGVudGVyZWRGcmFtZSA9IFY4UHJveHk6
OnJldHJpZXZlRnJhbWVGb3JFbnRlcmVkQ29udGV4dCgpOwpAQCAtOTI1LDcgKzkyNyw3IEBAIHZv
aWQgVjhDdXN0b206OkNsZWFyVGltZW91dEltcGwoY29uc3QgdjgKIAogICAgIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gaG9sZGVyID0gYXJncy5Ib2xkZXIoKTsKICAgICBET01XaW5kb3cqIGltcCA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0lu
ZGV4OjpET01XSU5ET1csIGhvbGRlcik7Ci0gICAgaWYgKCFWOFByb3h5OjpjYW5BY2Nlc3NGcmFt
ZShpbXAtPmZyYW1lKCksIHRydWUpKQorICAgIGlmICghQmluZGluZ3NTZWN1cml0eTo6Y2FuQWNj
ZXNzRnJhbWUoVjhTdGF0ZTo6T25seSgpLCBpbXAtPmZyYW1lKCksIHRydWUpKQogICAgICAgICBy
ZXR1cm47CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IHN0YXRpY19jYXN0
PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqPihpbXAtPmRvY3VtZW50KCkpOwogICAgIGlmICghY29u
dGV4dCkKQEAgLTk3MSw3ICs5NzMsNyBAQCBOQU1FRF9BQ0NFU1NfQ0hFQ0soRE9NV2luZG93KQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgcmV0dXJuIFY4UHJveHk6OmNh
bkFjY2Vzc0ZyYW1lKHRhcmdldCwgZmFsc2UpOworICAgIHJldHVybiBCaW5kaW5nc1NlY3VyaXR5
OjpjYW5BY2Nlc3NGcmFtZShWOFN0YXRlOjpPbmx5KCksIHRhcmdldCwgZmFsc2UpOwogfQogCiBJ
TkRFWEVEX0FDQ0VTU19DSEVDSyhET01XaW5kb3cpCkBAIC05OTMsNyArOTk1LDcgQEAgSU5ERVhF
RF9BQ0NFU1NfQ0hFQ0soRE9NV2luZG93KQogICAgIGlmICgodHlwZSA9PSB2ODo6QUNDRVNTX0dF
VCB8fCB0eXBlID09IHY4OjpBQ0NFU1NfSEFTKSAmJiB0YXJnZXQtPnRyZWUoKS0+Y2hpbGQoaW5k
ZXgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHJldHVybiBWOFByb3h5OjpjYW5BY2Nl
c3NGcmFtZSh0YXJnZXQsIGZhbHNlKTsKKyAgICByZXR1cm4gQmluZGluZ3NTZWN1cml0eTo6Y2Fu
QWNjZXNzRnJhbWUoVjhTdGF0ZTo6T25seSgpLCB0YXJnZXQsIGZhbHNlKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhMb2Nh
dGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhMb2NhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDUxODg0KQorKysgV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhMb2NhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEw
ICszMSwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkxvY2F0aW9uLmgiCiAK
KyNpbmNsdWRlICJCaW5kaW5nc1NlY3VyaXR5LmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAj
aW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhDdXN0b21FdmVudExpc3Rl
bmVyLmgiCiAjaW5jbHVkZSAiVjhMb2NhdGlvbi5oIgorI2luY2x1ZGUgIlY4U3RhdGUuaCIKICNp
bmNsdWRlICJWOFV0aWxpdGllcy5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKIApAQCAtMjE3LDEx
ICsyMTksMTEgQEAgQUNDRVNTT1JfR0VUVEVSKExvY2F0aW9uUmVsb2FkKQogICAgICAgICByZXR1
cm4gcHJpdmF0ZVRlbXBsYXRlLT5HZXRGdW5jdGlvbigpOwogICAgIH0KICAgICBMb2NhdGlvbiog
aW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xh
c3NJbmRleDo6TE9DQVRJT04sIGhvbGRlcik7Ci0gICAgaWYgKCFWOFByb3h5OjpjYW5BY2Nlc3NG
cmFtZShpbXAtPmZyYW1lKCksIGZhbHNlKSkgeworICAgIGlmICghQmluZGluZ3NTZWN1cml0eTo6
Y2FuQWNjZXNzRnJhbWUoVjhTdGF0ZTo6T25seSgpLCBpbXAtPmZyYW1lKCksIGZhbHNlKSkgewog
ICAgICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHNoYXJl
ZFRlbXBsYXRlID0gdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+OjpOZXcodjg6
OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyh2OExvY2F0aW9uUmVsb2FkQ2FsbGJhY2ssIHY4OjpIYW5k
bGU8djg6OlZhbHVlPigpLCB2ODo6U2lnbmF0dXJlOjpOZXcoVjhMb2NhdGlvbjo6R2V0UmF3VGVt
cGxhdGUoKSkpKTsKICAgICAgICAgcmV0dXJuIHNoYXJlZFRlbXBsYXRlLT5HZXRGdW5jdGlvbigp
OwotICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gcHJpdmF0ZVRlbXBsYXRlLT5HZXRGdW5jdGlv
bigpOworICAgIH0KKyAgICByZXR1cm4gcHJpdmF0ZVRlbXBsYXRlLT5HZXRGdW5jdGlvbigpOwog
fQogCiBBQ0NFU1NPUl9HRVRURVIoTG9jYXRpb25SZXBsYWNlKQpAQCAtMjM1LDExICsyMzcsMTEg
QEAgQUNDRVNTT1JfR0VUVEVSKExvY2F0aW9uUmVwbGFjZSkKICAgICAgICAgcmV0dXJuIHByaXZh
dGVUZW1wbGF0ZS0+R2V0RnVuY3Rpb24oKTsKICAgICB9CiAgICAgTG9jYXRpb24qIGltcCA9IFY4
RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5kZXg6
OkxPQ0FUSU9OLCBob2xkZXIpOwotICAgIGlmICghVjhQcm94eTo6Y2FuQWNjZXNzRnJhbWUoaW1w
LT5mcmFtZSgpLCBmYWxzZSkpIHsKKyAgICBpZiAoIUJpbmRpbmdzU2VjdXJpdHk6OmNhbkFjY2Vz
c0ZyYW1lKFY4U3RhdGU6Ok9ubHkoKSwgaW1wLT5mcmFtZSgpLCBmYWxzZSkpIHsKICAgICAgICAg
c3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBzaGFyZWRUZW1wbGF0
ZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3KHY4OjpGdW5jdGlv
blRlbXBsYXRlOjpOZXcodjhMb2NhdGlvblJlcGxhY2VDYWxsYmFjaywgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+KCksIHY4OjpTaWduYXR1cmU6Ok5ldyhWOExvY2F0aW9uOjpHZXRSYXdUZW1wbGF0ZSgp
KSkpOwogICAgICAgICByZXR1cm4gc2hhcmVkVGVtcGxhdGUtPkdldEZ1bmN0aW9uKCk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIHJldHVybiBwcml2YXRlVGVtcGxhdGUtPkdldEZ1bmN0aW9uKCk7Cisg
ICAgfQorICAgIHJldHVybiBwcml2YXRlVGVtcGxhdGUtPkdldEZ1bmN0aW9uKCk7CiB9CiAKIEFD
Q0VTU09SX0dFVFRFUihMb2NhdGlvbkFzc2lnbikKQEAgLTI1NCwxMSArMjU2LDExIEBAIEFDQ0VT
U09SX0dFVFRFUihMb2NhdGlvbkFzc2lnbikKICAgICAgICAgcmV0dXJuIHByaXZhdGVUZW1wbGF0
ZS0+R2V0RnVuY3Rpb24oKTsKICAgICB9CiAgICAgTG9jYXRpb24qIGltcCA9IFY4RE9NV3JhcHBl
cjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5kZXg6OkxPQ0FUSU9O
LCBob2xkZXIpOwotICAgIGlmICghVjhQcm94eTo6Y2FuQWNjZXNzRnJhbWUoaW1wLT5mcmFtZSgp
LCBmYWxzZSkpIHsKKyAgICBpZiAoIUJpbmRpbmdzU2VjdXJpdHk6OmNhbkFjY2Vzc0ZyYW1lKFY4
U3RhdGU6Ok9ubHkoKSwgaW1wLT5mcmFtZSgpLCBmYWxzZSkpIHsKICAgICAgICAgc3RhdGljIHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBzaGFyZWRUZW1wbGF0ZSA9IHY4OjpQ
ZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3KHY4OjpGdW5jdGlvblRlbXBsYXRl
OjpOZXcodjhMb2NhdGlvbkFzc2lnbkNhbGxiYWNrLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwg
djg6OlNpZ25hdHVyZTo6TmV3KFY4TG9jYXRpb246OkdldFJhd1RlbXBsYXRlKCkpKSk7CiAgICAg
ICAgIHJldHVybiBzaGFyZWRUZW1wbGF0ZS0+R2V0RnVuY3Rpb24oKTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgcmV0dXJuIHByaXZhdGVUZW1wbGF0ZS0+R2V0RnVuY3Rpb24oKTsKKyAgICB9CisgICAg
cmV0dXJuIHByaXZhdGVUZW1wbGF0ZS0+R2V0RnVuY3Rpb24oKTsKIH0KIAogQ0FMTEJBQ0tfRlVO
Q19ERUNMKExvY2F0aW9uUmVsb2FkKQpAQCAtMzM1LDcgKzMzNyw3IEBAIENBTExCQUNLX0ZVTkNf
REVDTChMb2NhdGlvblRvU3RyaW5nKQogICAgIElOQ19TVEFUUygiRE9NLkxvY2F0aW9uLnRvU3Ry
aW5nIik7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBhcmdzLkhvbGRlcigp
OwogICAgIExvY2F0aW9uKiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxMb2NhdGlvbj4oVjhDbGFzc0luZGV4OjpMT0NBVElPTiwgaG9sZGVyKTsKLSAgICBpZiAoIVY4
UHJveHk6OmNhbkFjY2Vzc0ZyYW1lKGltcC0+ZnJhbWUoKSwgdHJ1ZSkpCisgICAgaWYgKCFCaW5k
aW5nc1NlY3VyaXR5OjpjYW5BY2Nlc3NGcmFtZShWOFN0YXRlOjpPbmx5KCksIGltcC0+ZnJhbWUo
KSwgdHJ1ZSkpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAgICAgU3RyaW5nIHJl
c3VsdCA9IGltcC0+aHJlZigpOwogICAgIHJldHVybiB2OFN0cmluZyhyZXN1bHQpOwpAQCAtMzQ2
LDcgKzM0OCw3IEBAIElOREVYRURfQUNDRVNTX0NIRUNLKExvY2F0aW9uKQogICAgIEFTU0VSVChW
OENsYXNzSW5kZXg6OkZyb21JbnQoZGF0YS0+SW50MzJWYWx1ZSgpKSA9PSBWOENsYXNzSW5kZXg6
OkxPQ0FUSU9OKTsKICAgICAvLyBPbmx5IGFsbG93IHNhbWUgb3JpZ2luIGFjY2VzcwogICAgIExv
Y2F0aW9uKiBpbXAgPSAgVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TG9jYXRp
b24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvc3QpOwotICAgIHJldHVybiBWOFByb3h5Ojpj
YW5BY2Nlc3NGcmFtZShpbXAtPmZyYW1lKCksIGZhbHNlKTsKKyAgICByZXR1cm4gQmluZGluZ3NT
ZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhTdGF0ZTo6T25seSgpLCBpbXAtPmZyYW1lKCksIGZh
bHNlKTsKIH0KIAogTkFNRURfQUNDRVNTX0NIRUNLKExvY2F0aW9uKQpAQCAtMzU0LDcgKzM1Niw3
IEBAIE5BTUVEX0FDQ0VTU19DSEVDSyhMb2NhdGlvbikKICAgICBBU1NFUlQoVjhDbGFzc0luZGV4
OjpGcm9tSW50KGRhdGEtPkludDMyVmFsdWUoKSkgPT0gVjhDbGFzc0luZGV4OjpMT0NBVElPTik7
CiAgICAgLy8gT25seSBhbGxvdyBzYW1lIG9yaWdpbiBhY2Nlc3MKICAgICBMb2NhdGlvbiogaW1w
ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJ
bmRleDo6TE9DQVRJT04sIGhvc3QpOwotICAgIHJldHVybiBWOFByb3h5OjpjYW5BY2Nlc3NGcmFt
ZShpbXAtPmZyYW1lKCksIGZhbHNlKTsKKyAgICByZXR1cm4gQmluZGluZ3NTZWN1cml0eTo6Y2Fu
QWNjZXNzRnJhbWUoVjhTdGF0ZTo6T25seSgpLCBpbXAtPmZyYW1lKCksIGZhbHNlKTsKIH0KIAog
fSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTE5MDIp
CisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTMgQEAKKzIwMDktMTItMDkgIENoYXJsZXMgUmVpcyAgPGNyZWlzQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvciBz
b21lIHNlY3VyaXR5IGNvZGUgb3V0IG9mIFY4IGJpbmRpbmdzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjMyNgorCisgICAgICAgICogc3JjL1dlYkJp
bmRpbmdzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Z2V0RHJhZ0RhdGFJbXBsKToKKwogMjAwOS0x
Mi0wOSAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBV
bnJldmlld2VkLCBidWlsZCBmaXguCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJpbmRp
bmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJpbmRpbmdzLmNw
cAkocmV2aXNpb24gNTE4ODQpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJpbmRpbmdzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIi4uL3B1YmxpYy9X
ZWJSYW5nZS5oIgogCiAjaWYgVVNFKFY4KQorI2luY2x1ZGUgIkJpbmRpbmdzU2VjdXJpdHkuaCIK
ICNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3QuaCIKICNpbmNsdWRlICJDbGlwYm9hcmRDaHJv
bWl1bS5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKQEAgLTQ3LDYgKzQ4LDcgQEAKICNpbmNs
dWRlICJWOERPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJWOEhlbHBlcnMuaCIKICNpbmNsdWRlICJW
OFByb3h5LmgiCisjaW5jbHVkZSAiVjhTdGF0ZS5oIgogI2VsaWYgVVNFKEpTQykKICNpbmNsdWRl
ICJicmlkZ2UvYy9jX3V0aWxpdHkuaCIKICNlbmRpZgpAQCAtMjM2LDcgKzIzOCw3IEBAIHN0YXRp
YyBib29sIGdldERyYWdEYXRhSW1wbChOUE9iamVjdCogbnAKICAgICAvLyBDaGVjayB0aGUgZXhl
Y3V0aW9uIGZyYW1lcyBhcmUgc2FtZSBvcmlnaW4uCiAgICAgVjhQcm94eSogY3VycmVudCA9IFY4
UHJveHk6OnJldHJpZXZlKFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JDdXJyZW50Q29udGV4dCgp
KTsKICAgICBGcmFtZSogZnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lKGNvbnRleHQpOwot
ICAgIGlmICghY3VycmVudCB8fCAhY3VycmVudC0+Y2FuQWNjZXNzRnJhbWUoZnJhbWUsIGZhbHNl
KSkKKyAgICBpZiAoIWN1cnJlbnQgfHwgIUJpbmRpbmdzU2VjdXJpdHk6OmNhbkFjY2Vzc0ZyYW1l
KFY4U3RhdGU6Ok9ubHkoKSwgZnJhbWUsIGZhbHNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgY29uc3QgRXZlbnROYW1lcyYgbmFtZXMoZXZlbnROYW1lcygpKTsK
</data>
<flag name="review"
          id="26425"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44696</attachid>
            <date>2009-12-11 10:51:08 -0800</date>
            <delta_ts>2009-12-11 14:56:27 -0800</delta_ts>
            <desc>Update BindingSecurity class to use templates</desc>
            <filename>bindings-security-patch-20091211-1.txt</filename>
            <type>text/plain</type>
            <size>44355</size>
            <attacher name="Charles Reis">creis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjAwNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTkgQEAKKzIwMDktMTItMTEgIENoYXJsZXMgUmVpcyAgPGNyZWlzQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBS
ZWZhY3RvciBzb21lIHNlY3VyaXR5IGNvZGUgb3V0IG9mIFY4IGJpbmRpbmdzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjMyNgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cy4gIFRoZXJlIHNob3VsZCBiZSBubyBmdW5jdGlvbmFsaXR5IGNoYW5nZXMgaW4g
dGhpcyBwYXRjaCwKKyAgICAgICAgc2luY2UgaXQgaXMgb25seSByZWZhY3RvcmluZyBjb2RlLgor
CisgICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6CisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIGJpbmRpbmdzL0JpbmRpbmdTZWN1cml0eS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6QmluZGluZ1NlY3VyaXR5SGVscGVyOjpnZXRET01XaW5kb3cpOgorICAg
ICAgICAoV2ViQ29yZTo6QmluZGluZ1NlY3VyaXR5SGVscGVyOjpnZXRGcmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpCaW5kaW5nU2VjdXJpdHlIZWxwZXI6OmNhbkFjY2Vzc1dpbmRvdyk6CisgICAg
ICAgICogYmluZGluZ3MvQmluZGluZ1NlY3VyaXR5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6QmluZGluZ1NlY3VyaXR5OjpCaW5kaW5nU2VjdXJpdHkpOgorICAgICAgICAoV2ViQ29yZTo6
OjpjYW5BY2Nlc3NXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6OjpjYW5BY2Nlc3NGcmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjo6OmNoZWNrTm9kZVNlY3VyaXR5KToKKyAgICAgICAgKiBiaW5k
aW5ncy9HZW5lcmljQmluZGluZy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgICogYmlu
ZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRD
b250cm9sbGVyOjppc1NhZmVTY3JpcHQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QmluZGlu
Zy5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QmluZGluZ1N0YXRlLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjo6Ok9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6OjpnZXRBY3RpdmVX
aW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6OjppbW1lZGlhdGVseVJlcG9ydFVuc2FmZUFjY2Vz
c1RvKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEJpbmRpbmdTdGF0ZS5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpyZXBvcnRVbnNhZmVBY2Nlc3NUbyk6CisgICAgICAg
IChXZWJDb3JlOjpyZXBvcnRVbnNhZmVKYXZhU2NyaXB0QWNjZXNzKToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9WOFByb3h5Lmg6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjopOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6YWxsb3dTZXR0aW5nRnJhbWVTcmNUb0phdmFzY3JpcHRVcmwpOgorICAgICAgICAoV2Vi
Q29yZTo6SU5ERVhFRF9BQ0NFU1NfQ0hFQ0spOgorICAgICAgICAoV2ViQ29yZTo6TkFNRURfQUND
RVNTX0NIRUNLKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b206OldpbmRvd1NldFRpbWVvdXRJbXBs
KToKKyAgICAgICAgKFdlYkNvcmU6OkFDQ0VTU09SX0dFVFRFUik6CisgICAgICAgIChXZWJDb3Jl
OjpBQ0NFU1NPUl9TRVRURVIpOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNM
KToKKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9tOjpDbGVhclRpbWVvdXRJbXBsKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5BTUVEX0FDQ0VTU19DSEVDSyk6CisgICAgICAgIChXZWJDb3JlOjpJTkRF
WEVEX0FDQ0VTU19DSEVDSyk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4TG9jYXRp
b25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QUNDRVNTT1JfR0VUVEVSKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgIChXZWJDb3JlOjpJTkRF
WEVEX0FDQ0VTU19DSEVDSyk6CisgICAgICAgIChXZWJDb3JlOjpOQU1FRF9BQ0NFU1NfQ0hFQ0sp
OgorCiAyMDA5LTEyLTExICBTdGV2ZSBCbG9jayAgPHN0ZXZlYmxvY2tAZ29vZ2xlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
Z3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNTE5NzIp
CisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtNDM0LDYgKzQzNCw5
IEBACiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS93aW4vQWNjZXNzaWJpbGl0eU9iamVjdFdp
bi5jcHAnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvd2luL0FjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyV2luLmgnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvd3gvQWNjZXNzaWJp
bGl0eU9iamVjdFd4LmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3MvQmluZGluZ1NlY3VyaXR5
LmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3MvQmluZGluZ1NlY3VyaXR5LmgnLAorICAgICAg
ICAgICAgJ2JpbmRpbmdzL0dlbmVyaWNCaW5kaW5nLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdz
L2pzL0NhY2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdz
L2pzL0RPTU9iamVjdFdpdGhTVkdDb250ZXh0LmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL2pz
L0dDQ29udHJvbGxlci5jcHAnLApAQCAtNzk3LDYgKzgwMCw4IEBACiAgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaCcsCiAgICAgICAgICAgICAnYmluZGlu
Z3MvdjgvVjhCaW5kaW5nLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhCaW5kaW5n
LmgnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4QmluZGluZ1N0YXRlLmNwcCcsCisgICAg
ICAgICAgICAnYmluZGluZ3MvdjgvVjhCaW5kaW5nU3RhdGUuaCcsCiAgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvVjhDb2xsZWN0aW9uLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhD
b2xsZWN0aW9uLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4Q29uc29sZU1lc3NhZ2Uu
Y3BwJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkocmV2aXNpb24gNTE5NzIpCisrKyBX
ZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNiAr
MTA2LDcgQEAKICAgICAgICcuLi8nLAogICAgICAgJy4uL2FjY2Vzc2liaWxpdHknLAogICAgICAg
Jy4uL2FjY2Vzc2liaWxpdHkvY2hyb21pdW0nLAorICAgICAgJy4uL2JpbmRpbmdzJywKICAgICAg
ICcuLi9iaW5kaW5ncy92OCcsCiAgICAgICAnLi4vYmluZGluZ3MvdjgvY3VzdG9tJywKICAgICAg
ICcuLi9icmlkZ2UnLApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9CaW5kaW5nU2VjdXJpdHkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvQmluZGluZ1NlY3VyaXR5LmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvQmluZGluZ1NlY3VyaXR5LmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QmluZGluZ1NlY3VyaXR5LmgiCisKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJG
cmFtZS5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5n
U3RhdGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitET01XaW5kb3cqIEJpbmRpbmdTZWN1
cml0eUhlbHBlcjo6Z2V0RE9NV2luZG93KEZyYW1lKiBmcmFtZSkKK3sKKyAgICByZXR1cm4gZnJh
bWUtPmRvbVdpbmRvdygpOworfQorCitGcmFtZSogQmluZGluZ1NlY3VyaXR5SGVscGVyOjpnZXRG
cmFtZShOb2RlKiBub2RlKQoreworICAgIHJldHVybiBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgp
OworfQorCisvLyBTYW1lIG9yaWdpbiBwb2xpY3kgaW1wbGVtZW50YXRpb246CisvLworLy8gU2Ft
ZSBvcmlnaW4gcG9saWN5IHByZXZlbnRzIEpTIGNvZGUgZnJvbSBkb21haW4gQSBmcm9tIGFjY2Vz
c2luZyBKUyAmIERPTQorLy8gb2JqZWN0cyBpbiBhIGRpZmZlcmVudCBkb21haW4gQi4gVGhlcmUg
YXJlIGV4Y2VwdGlvbnMgYW5kIHNldmVyYWwgb2JqZWN0cworLy8gYXJlIGFjY2Vzc2libGUgYnkg
Y3Jvc3MtZG9tYWluIGNvZGUuIEZvciBleGFtcGxlLCB0aGUgd2luZG93LmZyYW1lcyBvYmplY3QK
Ky8vIGlzIGFjY2Vzc2libGUgYnkgY29kZSBmcm9tIGEgZGlmZmVyZW50IGRvbWFpbiwgYnV0IHdp
bmRvdy5kb2N1bWVudCBpcyBub3QuCisvLworLy8gVGhlIEpTIGJpbmRpbmcgY29kZSBzZXRzIHNl
Y3VyaXR5IGNoZWNrIGNhbGxiYWNrcyBvbiBhIGZ1bmN0aW9uIHRlbXBsYXRlLAorLy8gYW5kIGFj
Y2Vzc2luZyBpbnN0YW5jZXMgb2YgdGhlIHRlbXBsYXRlIGNhbGxzIHRoZSBjYWxsYmFjayBmdW5j
dGlvbi4KKy8vIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBlbmZvcmNlcyB0aGUgc2FtZSBvcmlnaW4g
cG9saWN5LgorLy8KKy8vIENhbGxiYWNrIGZ1bmN0aW9ucyBhcmUgZXhwZW5zaXZlLiBCaW5kaW5n
IGNvZGUgc2hvdWxkIHVzZSBhIHNlY3VyaXR5IHRva2VuCisvLyBzdHJpbmcgdG8gZG8gZmFzdCBh
Y2Nlc3MgY2hlY2tzIGZvciB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgc291cmNlIGFuZCB0YXJnZXQK
Ky8vIGFyZSBpbiB0aGUgc2FtZSBkb21haW4uIEEgc2VjdXJpdHkgdG9rZW4gaXMgYSBzdHJpbmcg
b2JqZWN0IHRoYXQgcmVwcmVzZW50cworLy8gdGhlIHByb3RvY29sL3VybC9wb3J0IG9mIGEgZG9t
YWluLgorLy8KKy8vIFRoZXJlIGFyZSBzcGVjaWFsIGNhc2VzIHdoZXJlIHNlY3VyaXR5IHRva2Vu
IG1hdGNoaW5nIGlzIG5vdCBlbm91Z2guCisvLyBGb3IgZXhhbXBsZSwgSlMgY2FuIHNldCBpdHMg
ZG9tYWluIHRvIGEgc3VwZXIgZG9tYWluIGJ5IGNhbGxpbmcKKy8vIGRvY3VtZW50LnNldERvbWFp
biguLi4pLiBJbiB0aGVzZSBjYXNlcywgdGhlIGJpbmRpbmcgY29kZSBjYW4gcmVzZXQKKy8vIGEg
Y29udGV4dCdzIHNlY3VyaXR5IHRva2VuIHRvIGl0cyBnbG9iYWwgb2JqZWN0IHNvIHRoYXQgdGhl
IGZhc3QgYWNjZXNzCisvLyBjaGVjayB3aWxsIGFsd2F5cyBmYWlsLgorCisvLyBIZWxwZXIgdG8g
Y2hlY2sgaWYgdGhlIGN1cnJlbnQgZXhlY3V0aW9uIGNvbnRleHQgY2FuIGFjY2VzcyBhIHRhcmdl
dCBmcmFtZS4KKy8vIEZpcnN0IGl0IGNoZWNrcyBzYW1lIGRvbWFpbiBwb2xpY3kgdXNpbmcgdGhl
IGxleGljYWwgY29udGV4dC4KKy8vCisvLyBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gS0pTOjpXaW5k
b3c6OmFsbG93c0FjY2Vzc0Zyb20oRXhlY1N0YXRlKikuCitib29sIEJpbmRpbmdTZWN1cml0eUhl
bHBlcjo6Y2FuQWNjZXNzV2luZG93KERPTVdpbmRvdyogYWN0aXZlV2luZG93LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBET01XaW5kb3cqIHRhcmdldFdpbmRv
dykKK3sKKyAgICBBU1NFUlQodGFyZ2V0V2luZG93KTsKKworICAgIFN0cmluZyBtZXNzYWdlOwor
CisgICAgaWYgKGFjdGl2ZVdpbmRvdyA9PSB0YXJnZXRXaW5kb3cpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgaWYgKCFhY3RpdmVXaW5kb3cpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGNvbnN0IFNlY3VyaXR5T3JpZ2luKiBhY3RpdmVTZWN1cml0eU9yaWdpbiA9IGFjdGl2ZVdp
bmRvdy0+c2VjdXJpdHlPcmlnaW4oKTsKKyAgICBjb25zdCBTZWN1cml0eU9yaWdpbiogdGFyZ2V0
U2VjdXJpdHlPcmlnaW4gPSB0YXJnZXRXaW5kb3ctPnNlY3VyaXR5T3JpZ2luKCk7CisKKyAgICAv
LyBXZSBoYXZlIHNlZW4gY3Jhc2hlcyB3ZXJlIHRoZSBzZWN1cml0eSBvcmlnaW4gb2YgdGhlIHRh
cmdldCBoYXMgbm90IGJlZW4KKyAgICAvLyBpbml0aWFsaXplZC4gRGVmZW5kIGFnYWluc3QgdGhh
dC4KKyAgICBpZiAoIXRhcmdldFNlY3VyaXR5T3JpZ2luKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoYWN0aXZlU2VjdXJpdHlPcmlnaW4tPmNhbkFjY2Vzcyh0YXJnZXRTZWN1cml0
eU9yaWdpbikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gQWxsb3cgYWNjZXNzIHRv
IGEgImFib3V0OmJsYW5rIiBwYWdlIGlmIHRoZSBkeW5hbWljIGNvbnRleHQgaXMgYQorICAgIC8v
IGRldGFjaGVkIGNvbnRleHQgb2YgdGhlIHNhbWUgZnJhbWUgYXMgdGhlIGJsYW5rIHBhZ2UuCisg
ICAgaWYgKHRhcmdldFNlY3VyaXR5T3JpZ2luLT5pc0VtcHR5KCkgJiYgYWN0aXZlV2luZG93LT5m
cmFtZSgpID09IHRhcmdldFdpbmRvdy0+ZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL0JpbmRpbmdTZWN1cml0eS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvQmluZGluZ1NlY3VyaXR5LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRp
bmdzL0JpbmRpbmdTZWN1cml0eS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExNCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgQmluZGluZ1NlY3VyaXR5X2gKKyNkZWZpbmUgQmluZGluZ1NlY3VyaXR5X2gKKworI2lu
Y2x1ZGUgIkdlbmVyaWNCaW5kaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
RE9NV2luZG93OworY2xhc3MgRnJhbWU7CitjbGFzcyBOb2RlOworCisvLyBTZWN1cml0eSBmdW5j
dGlvbnMgc2hhcmVkIGJ5IHZhcmlvdXMgbGFuZ3VhZ2UgYmluZGluZ3MuCit0ZW1wbGF0ZSA8Y2xh
c3MgQmluZGluZz4gY2xhc3MgQmluZGluZ1NlY3VyaXR5IHsKK3B1YmxpYzoKKyAgICAvLyBDaGVj
ayBpZiB0aGUgYWN0aXZlIGV4ZWN1dGlvbiBjb250ZXh0IGNhbiBhY2Nlc3MgdGhlIHRhcmdldCBm
cmFtZS4KKyAgICBzdGF0aWMgYm9vbCBjYW5BY2Nlc3NGcmFtZShTdGF0ZTxCaW5kaW5nPiosIEZy
YW1lKiwgYm9vbCByZXBvcnRFcnJvcik7CisKKyAgICAvLyBDaGVjayBpZiBpdCBpcyBzYWZlIHRv
IGFjY2VzcyB0aGUgZ2l2ZW4gbm9kZSBmcm9tIHRoZQorICAgIC8vIGN1cnJlbnQgc2VjdXJpdHkg
Y29udGV4dC4KKyAgICBzdGF0aWMgYm9vbCBjaGVja05vZGVTZWN1cml0eShTdGF0ZTxCaW5kaW5n
PiosIE5vZGUqIHRhcmdldCk7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgQmluZGluZ1NlY3Vy
aXR5KCkge30KKyAgICB+QmluZGluZ1NlY3VyaXR5KCk7CisKKyAgICAvLyBDaGVjayBpZiB0aGUg
Y3VycmVudCBET01XaW5kb3cncyBzZWN1cml0eSBjb250ZXh0IGNhbiBhY2Nlc3MgdGhlIHRhcmdl
dAorICAgIC8vIERPTVdpbmRvdy4gIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVwb3J0IGVycm9y
cywgc28gbW9zdCBjYWxsZXJzIHNob3VsZAorICAgIC8vIHVzZSBjYW5BY2Nlc3NGcmFtZSBpbnN0
ZWFkLgorICAgIHN0YXRpYyBib29sIGNhbkFjY2Vzc1dpbmRvdyhTdGF0ZTxCaW5kaW5nPiosIERP
TVdpbmRvdyogdGFyZ2V0KTsKK307CisKKy8vIENsYXNzIG9mIGhlbHBlciBmdW5jdGlvbnMgdGhh
dCBkZXBlbmQgb24gV2ViQ29yZSBjbGFzc2VzLCBhbmQgdGh1cyBzaG91bGQKKy8vIG5vdCBiZSBp
bXBsZW1lbnRlZCBpbiB0aGlzIGZpbGUuCitjbGFzcyBCaW5kaW5nU2VjdXJpdHlIZWxwZXIgewor
cHVibGljOgorICAgIHN0YXRpYyBET01XaW5kb3cqIGdldERPTVdpbmRvdyhGcmFtZSopOworICAg
IHN0YXRpYyBGcmFtZSogZ2V0RnJhbWUoTm9kZSopOworICAgIHN0YXRpYyBib29sIGNhbkFjY2Vz
c1dpbmRvdyhET01XaW5kb3cqLCBET01XaW5kb3cqKTsKK307CisKKy8vIEltcGxlbWVudGF0aW9u
cyBvZiB0ZW1wbGF0ZWQgbWV0aG9kcyBtdXN0IGJlIGluIHRoaXMgZmlsZS4KKwordGVtcGxhdGUg
PGNsYXNzIEJpbmRpbmc+Citib29sIEJpbmRpbmdTZWN1cml0eTxCaW5kaW5nPjo6Y2FuQWNjZXNz
V2luZG93KFN0YXRlPEJpbmRpbmc+KiBzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRE9NV2luZG93KiB0YXJnZXRXaW5kb3cpCit7CisgICAgRE9N
V2luZG93KiBhY3RpdmVXaW5kb3cgPSBzdGF0ZS0+Z2V0QWN0aXZlV2luZG93KCk7CisgICAgcmV0
dXJuIEJpbmRpbmdTZWN1cml0eUhlbHBlcjo6Y2FuQWNjZXNzV2luZG93KGFjdGl2ZVdpbmRvdywg
dGFyZ2V0V2luZG93KTsKK30KKwordGVtcGxhdGUgPGNsYXNzIEJpbmRpbmc+Citib29sIEJpbmRp
bmdTZWN1cml0eTxCaW5kaW5nPjo6Y2FuQWNjZXNzRnJhbWUoU3RhdGU8QmluZGluZz4qIHN0YXRl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYW1lKiB0
YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCByZXBvcnRFcnJvcikKK3sKKyAgICAvLyBUaGUgc3ViamVjdCBpcyBkZXRhY2hlZCBmcm9tIGEg
ZnJhbWUsIGRlbnkgYWNjZXNzZXMuCisgICAgaWYgKCF0YXJnZXQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmICghY2FuQWNjZXNzV2luZG93KHN0YXRlLCBCaW5kaW5nU2VjdXJpdHlI
ZWxwZXI6OmdldERPTVdpbmRvdyh0YXJnZXQpKSkgeworICAgICAgICBpZiAocmVwb3J0RXJyb3Ip
CisgICAgICAgICAgICBzdGF0ZS0+aW1tZWRpYXRlbHlSZXBvcnRVbnNhZmVBY2Nlc3NUbyh0YXJn
ZXQpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
Cit0ZW1wbGF0ZSA8Y2xhc3MgQmluZGluZz4KK2Jvb2wgQmluZGluZ1NlY3VyaXR5PEJpbmRpbmc+
OjpjaGVja05vZGVTZWN1cml0eShTdGF0ZTxCaW5kaW5nPiogc3RhdGUsIE5vZGUqIG5vZGUpCit7
CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBGcmFtZSogdGFy
Z2V0ID0gQmluZGluZ1NlY3VyaXR5SGVscGVyOjpnZXRGcmFtZShub2RlKTsKKworICAgIGlmICgh
dGFyZ2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gY2FuQWNjZXNzRnJh
bWUoc3RhdGUsIHRhcmdldCwgdHJ1ZSk7Cit9CisKK30KKworI2VuZGlmIC8vIEJpbmRpbmdTZWN1
cml0eV9oCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL0dlbmVyaWNCaW5kaW5nLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9HZW5lcmljQmluZGluZy5oCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9iaW5kaW5ncy9HZW5lcmljQmluZGluZy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBHZW5lcmljQmluZGluZ19oCisjZGVmaW5lIEdlbmVyaWNCaW5kaW5n
X2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBVc2VkIHRvIGluc3RhbnRpYXRlIGJpbmRp
bmcgdGVtcGxhdGVzIGZvciBhbnkgbWV0aG9kcyBzaGFyZWQgYW1vbmcgYWxsCisvLyBsYW5ndWFn
ZSBiaW5kaW5ncy4KK2NsYXNzIEdlbmVyaWNCaW5kaW5nIHt9OworCisvLyBDbGFzcyB0byByZXBy
ZXNlbnQgZXhlY3V0aW9uIHN0YXRlIGZvciBlYWNoIGxhbmd1YWdlIGJpbmRpbmcuCit0ZW1wbGF0
ZSA8Y2xhc3MgVD4gY2xhc3MgU3RhdGUge307CisKKy8vIENvbW1vbiBub3Rpb24gb2YgZXhlY3V0
aW9uIHN0YXRlIGZvciBsYW5ndWFnZSBiaW5kaW5ncy4KK3RlbXBsYXRlIDw+IGNsYXNzIFN0YXRl
PEdlbmVyaWNCaW5kaW5nPiB7CisgICAgLy8gQW55IG1ldGhvZHMgc2hhcmVkIGFjcm9zcyBiaW5k
aW5ncyBjYW4gZ28gaGVyZS4KK307CisKK30KKworI2VuZGlmIC8vIEdlbmVyaWNCaW5kaW5nX2gK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2
aXNpb24gNTE5NzIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4
LnBtCSh3b3JraW5nIGNvcHkpCkBAIC00MDEsNyArNDAxLDcgQEAgRU5ECiAgICAgSG9sZGVyVG9O
YXRpdmUoJGRhdGFOb2RlLCAkaW1wbENsYXNzTmFtZSwgJGNsYXNzSW5kZXgpOwogCiAgICAgcHVz
aChAaW1wbENvbnRlbnREZWNscywgPDxFTkQpOwotICAgIGlmICghVjhQcm94eTo6Y2FuQWNjZXNz
RnJhbWUoaW1wLT5mcmFtZSgpLCBmYWxzZSkpIHsKKyAgICBpZiAoIVY4QmluZGluZ1NlY3VyaXR5
OjpjYW5BY2Nlc3NGcmFtZShWOEJpbmRpbmdTdGF0ZTo6T25seSgpLCBpbXAtPmZyYW1lKCksIGZh
bHNlKSkgewogICAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
PiBzaGFyZWRfdGVtcGxhdGUgPQogICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT46Ok5ldygkbmV3VGVtcGxhdGVTdHJpbmcpOwogICAgICAgcmV0dXJuIHNoYXJlZF90
ZW1wbGF0ZS0+R2V0RnVuY3Rpb24oKTsKQEAgLTU0OCw5ICs1NDgsOSBAQCBFTkQKIAogICAgICMg
R2VuZXJhdGUgc2VjdXJpdHkgY2hlY2tzIGlmIG5lY2Vzc2FyeQogICAgIGlmICgkYXR0cmlidXRl
LT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDaGVja05vZGVTZWN1cml0eSJ9KSB7
Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgaWYgKCFWOFByb3h5OjpjaGVj
a05vZGVTZWN1cml0eShpbXAtPiRhdHRyTmFtZSgpKSkgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZh
bHVlPigpO1xuXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBpZiAo
IVY4QmluZGluZ1NlY3VyaXR5OjpjaGVja05vZGVTZWN1cml0eShWOEJpbmRpbmdTdGF0ZTo6T25s
eSgpLCBpbXAtPiRhdHRyTmFtZSgpKSkgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpO1xu
XG4iKTsKICAgICB9IGVsc2lmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJDaGVja0ZyYW1lU2VjdXJpdHkifSkgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dERlY2xzLCAiICAgIGlmICghVjhQcm94eTo6Y2hlY2tOb2RlU2VjdXJpdHkoaW1wLT5jb250ZW50
RG9jdW1lbnQoKSkpIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTtcblxuIik7CisgICAg
ICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgaWYgKCFWOEJpbmRpbmdTZWN1cml0eTo6
Y2hlY2tOb2RlU2VjdXJpdHkoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgaW1wLT5jb250ZW50RG9j
dW1lbnQoKSkpIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTtcblxuIik7CiAgICAgfQog
CiAgICAgbXkgJHVzZUV4Y2VwdGlvbnMgPSAxIGlmIEB7JGF0dHJpYnV0ZS0+Z2V0dGVyRXhjZXB0
aW9uc30gYW5kICEoJGlzUG9kVHlwZSk7CkBAIC04OTgsNyArODk4LDcgQEAgRU5ECiAgICAgICAg
JiYgISRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRG9Ob3RDaGVj
a0RvbWFpblNlY3VyaXR5In0pIHsKICAgICAjIFdlIGhhdmUgbm90IGZpbmQgcmVhbCB1c2UgY2Fz
ZXMgeWV0LgogICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsCi0iICAgIGlmICghVjhQcm94eTo6
Y2FuQWNjZXNzRnJhbWUoaW1wLT5mcmFtZSgpLCB0cnVlKSkge1xuIi4KKyIgICAgaWYgKCFWOEJp
bmRpbmdTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgaW1w
LT5mcmFtZSgpLCB0cnVlKSkge1xuIi4KICIgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFs
dWU+KCk7XG4iIC4KICIgICAgfVxuIik7CiAgICAgfQpAQCAtOTMwLDcgKzkzMCw3IEBAIEVORAog
ICAgIH0KICAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJTVkdDaGVja1NlY3VyaXR5RG9jdW1lbnQifSkgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dERlY2xzLAotIiAgICBpZiAoIVY4UHJveHk6OmNoZWNrTm9kZVNlY3VyaXR5KGltcC0+Z2V0U1ZH
RG9jdW1lbnQoZWMpKSlcbiIgLgorIiAgICBpZiAoIVY4QmluZGluZ1NlY3VyaXR5OjpjaGVja05v
ZGVTZWN1cml0eShWOEJpbmRpbmdTdGF0ZTo6T25seSgpLCBpbXAtPmdldFNWR0RvY3VtZW50KGVj
KSkpXG4iIC4KICIgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7XG4iKTsKICAg
ICB9CiAKQEAgLTExNDUsNyArMTE0NSw4IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAg
ICAgcHVzaChAaW1wbEZpeGVkSGVhZGVyLAogICAgICAgICAgIiNpbmNsdWRlIFwiY29uZmlnLmhc
IlxuIiAuCiAgICAgICAgICAiI2luY2x1ZGUgXCJWOFByb3h5LmhcIlxuIiAuCi0gICAgICAgICAi
I2luY2x1ZGUgXCJWOEJpbmRpbmcuaFwiXG5cbiIgLgorICAgICAgICAgIiNpbmNsdWRlIFwiVjhC
aW5kaW5nLmhcIlxuIiAuCisgICAgICAgICAiI2luY2x1ZGUgXCJWOEJpbmRpbmdTdGF0ZS5oXCJc
blxuIiAuCiAgICAgICAgICAiI3VuZGVmIExPR1xuXG4iKTsKIAogICAgIHB1c2goQGltcGxGaXhl
ZEhlYWRlciwgIlxuI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIpIGlmICRjb25kaXRpb25h
bFN0cmluZzsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAko
cmV2aXNpb24gNTE5NzIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSAiU2NyaXB0U3Rh
dGUuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2lu
Y2x1ZGUgIlY4QmluZGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiVjhOUE9iamVjdC5oIgogI2luY2x1
ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJXaWRnZXQuaCIKQEAgLTg0LDcgKzg1LDcgQEAgRnJh
bWUqIFNjcmlwdENvbnRyb2xsZXI6OnJldHJpZXZlRnJhbWVGbwogCiBib29sIFNjcmlwdENvbnRy
b2xsZXI6OmlzU2FmZVNjcmlwdChGcmFtZSogdGFyZ2V0KQogewotICAgIHJldHVybiBWOFByb3h5
OjpjYW5BY2Nlc3NGcmFtZSh0YXJnZXQsIHRydWUpOworICAgIHJldHVybiBWOEJpbmRpbmdTZWN1
cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgdGFyZ2V0LCB0cnVl
KTsKIH0KIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpnY1Byb3RlY3RKU1dyYXBwZXIodm9pZCog
ZG9tT2JqZWN0KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCShyZXZpc2lvbiA1MTk3MikK
KysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDYgKzMyLDcgQEAKICNkZWZpbmUgVjhCaW5kaW5nX2gKIAogI2luY2x1ZGUgIkF0b21pY1N0cmlu
Zy5oIgorI2luY2x1ZGUgIkJpbmRpbmdTZWN1cml0eS5oIgogI2luY2x1ZGUgIk1hdGhFeHRyYXMu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5o
IgpAQCAtNDMsNiArNDQsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogICAgIGNsYXNz
IEV2ZW50TGlzdGVuZXI7CiAgICAgY2xhc3MgRXZlbnRUYXJnZXQ7CisKKyAgICAvLyBJbnN0YW50
aWF0ZSBiaW5kaW5nIHRlbXBsYXRlIGNsYXNzZXMgZm9yIFY4LgorICAgIGNsYXNzIFY4QmluZGlu
ZyB7fTsKKyAgICB0eXBlZGVmIEJpbmRpbmdTZWN1cml0eTxWOEJpbmRpbmc+IFY4QmluZGluZ1Nl
Y3VyaXR5OwogICAgIAogICAgIC8vIEEgaGVscGVyIGZ1bmN0aW9uIGV4dHJhY3QgbmF0aXZlIG9i
amVjdCBwb2ludGVyIGZyb20gYSBET00gd3JhcHBlcgogICAgIC8vIGFuZCBjYXN0IHRvIHRoZSBz
cGVjaWZpZWQgdHlwZS4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nU3RhdGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nU3RhdGUuY3Bw
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmdTdGF0ZS5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKKworI2luY2x1ZGUgIlY4UHJveHkuaCIKKyNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU3RhdGU8VjhC
aW5kaW5nPiogU3RhdGU8VjhCaW5kaW5nPjo6T25seSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChTdGF0ZSwgZ2xvYmFsVjhCaW5kaW5nU3RhdGUsICgpKTsKKyAgICByZXR1cm4gJmdsb2Jh
bFY4QmluZGluZ1N0YXRlOworfQorCitET01XaW5kb3cqIFN0YXRlPFY4QmluZGluZz46OmdldEFj
dGl2ZVdpbmRvdygpCit7CisgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBhY3RpdmVDb250ZXh0
ID0gdjg6OkNvbnRleHQ6OkdldENhbGxpbmcoKTsKKyAgICBpZiAoYWN0aXZlQ29udGV4dC5Jc0Vt
cHR5KCkpIHsKKyAgICAgICAgLy8gVGhlcmUgaXMgYSBzaW5nbGUgYWN0aXZhdGlvbiByZWNvcmQg
b24gdGhlIHN0YWNrLCBzbyB0aGF0IG11c3QKKyAgICAgICAgLy8gYmUgdGhlIGFjdGl2ZUNvbnRl
eHQuCisgICAgICAgIGFjdGl2ZUNvbnRleHQgPSB2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpOwor
ICAgIH0KKyAgICByZXR1cm4gVjhQcm94eTo6cmV0cmlldmVXaW5kb3coYWN0aXZlQ29udGV4dCk7
Cit9CisKK3ZvaWQgU3RhdGU8VjhCaW5kaW5nPjo6aW1tZWRpYXRlbHlSZXBvcnRVbnNhZmVBY2Nl
c3NUbyhGcmFtZSogdGFyZ2V0KQoreworICAgIFY4UHJveHk6OnJlcG9ydFVuc2FmZUFjY2Vzc1Rv
KHRhcmdldCwgVjhQcm94eTo6UmVwb3J0Tm93KTsKK30KKworfSAgLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nU3RhdGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZ1N0YXRlLmgJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZ1N0YXRlLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFY4QmluZGluZ1N0YXRlX2gKKyNkZWZpbmUgVjhCaW5kaW5n
U3RhdGVfaAorCisjaW5jbHVkZSAiR2VuZXJpY0JpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEJpbmRp
bmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBTaW5nbGV0b24gaW1wbGVtZW50YXRp
b24gb2YgU3RhdGU8VjhCaW5kaW5nPi4gIFVzZXMgVjgncyBnbG9iYWwgZGF0YQorLy8gc3RydWN0
dXJlcyB0byByZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgcmVsZXZhbnQgZXhlY3V0aW9uIHN0YXRl
LgordGVtcGxhdGUgPD4gY2xhc3MgU3RhdGU8VjhCaW5kaW5nPiA6IHB1YmxpYyBTdGF0ZTxHZW5l
cmljQmluZGluZz4geworcHVibGljOgorICAgIC8vIFNpbmdsZXRvbgorICAgIHN0YXRpYyBTdGF0
ZSogT25seSgpOworCisgICAgLy8gVGhlIERPTVdpbmRvdyBjb3JyZXNwb25kaW5nIHRvIHRoZSAn
Y2FsbGluZyBjb250ZXh0JyBvZiBleGVjdXRpb24uCisgICAgRE9NV2luZG93KiBnZXRBY3RpdmVX
aW5kb3coKTsKKworICAgIC8vIFJlcG9ydHMgYW4gZXJyb3IgbWVzc2FnZSAod2l0aG91dCBkZWxh
eSkgaWYgdGhlIHNlY3VyaXR5IGNoZWNrIGZhaWxzLgorICAgIHN0YXRpYyB2b2lkIGltbWVkaWF0
ZWx5UmVwb3J0VW5zYWZlQWNjZXNzVG8oRnJhbWUqKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNp
dCBTdGF0ZSgpIHt9CisgICAgflN0YXRlKCk7Cit9OworCit0eXBlZGVmIFN0YXRlPFY4QmluZGlu
Zz4gVjhCaW5kaW5nU3RhdGU7CisKK30KKworI2VuZGlmIC8vIFY4QmluZGluZ1N0YXRlX2gKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcAkocmV2aXNpb24gNTE5NzIpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBACiAj
aW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2Uu
aCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmdTdGF0ZS5oIgog
I2luY2x1ZGUgIlY4Q29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIlY4Q29uc29sZU1lc3NhZ2UuaCIK
ICNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKQEAgLTE2Myw3ICsxNjQsNyBAQCBlbnVtIERl
bGF5UmVwb3J0aW5nIHsKICAgICBSZXBvcnROb3cKIH07CiAKLXN0YXRpYyB2b2lkIHJlcG9ydFVu
c2FmZUFjY2Vzc1RvKEZyYW1lKiB0YXJnZXQsIERlbGF5UmVwb3J0aW5nIGRlbGF5KQordm9pZCBW
OFByb3h5OjpyZXBvcnRVbnNhZmVBY2Nlc3NUbyhGcmFtZSogdGFyZ2V0LCBEZWxheVJlcG9ydGlu
ZyBkZWxheSkKIHsKICAgICBBU1NFUlQodGFyZ2V0KTsKICAgICBEb2N1bWVudCogdGFyZ2V0RG9j
dW1lbnQgPSB0YXJnZXQtPmRvY3VtZW50KCk7CkBAIC0yMDcsNyArMjA4LDcgQEAgc3RhdGljIHZv
aWQgcmVwb3J0VW5zYWZlSmF2YVNjcmlwdEFjY2VzcwogewogICAgIEZyYW1lKiB0YXJnZXQgPSBW
OEN1c3RvbTo6R2V0VGFyZ2V0RnJhbWUoaG9zdCwgZGF0YSk7CiAgICAgaWYgKHRhcmdldCkKLSAg
ICAgICAgcmVwb3J0VW5zYWZlQWNjZXNzVG8odGFyZ2V0LCBSZXBvcnRMYXRlcik7CisgICAgICAg
IFY4UHJveHk6OnJlcG9ydFVuc2FmZUFjY2Vzc1RvKHRhcmdldCwgVjhQcm94eTo6UmVwb3J0TGF0
ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBoYW5kbGVGYXRhbEVycm9ySW5WOCgpCkBAIC04NTcsOTcg
Kzg1OCw2IEBAIHZvaWQgVjhQcm94eTo6dXBkYXRlU2VjdXJpdHlPcmlnaW4oKQogICAgIHNldFNl
Y3VyaXR5VG9rZW4oKTsKIH0KIAotLy8gU2FtZSBvcmlnaW4gcG9saWN5IGltcGxlbWVudGF0aW9u
OgotLy8KLS8vIFNhbWUgb3JpZ2luIHBvbGljeSBwcmV2ZW50cyBKUyBjb2RlIGZyb20gZG9tYWlu
IEEgYWNjZXNzIEpTICYgRE9NIG9iamVjdHMKLS8vIGluIGEgZGlmZmVyZW50IGRvbWFpbiBCLiBU
aGVyZSBhcmUgZXhjZXB0aW9ucyBhbmQgc2V2ZXJhbCBvYmplY3RzIGFyZQotLy8gYWNjZXNzaWJs
ZSBieSBjcm9zcy1kb21haW4gY29kZS4gRm9yIGV4YW1wbGUsIHRoZSB3aW5kb3cuZnJhbWVzIG9i
amVjdCBpcwotLy8gYWNjZXNzaWJsZSBieSBjb2RlIGZyb20gYSBkaWZmZXJlbnQgZG9tYWluLCBi
dXQgd2luZG93LmRvY3VtZW50IGlzIG5vdC4KLS8vCi0vLyBUaGUgYmluZGluZyBjb2RlIHNldHMg
c2VjdXJpdHkgY2hlY2sgY2FsbGJhY2tzIG9uIGEgZnVuY3Rpb24gdGVtcGxhdGUsCi0vLyBhbmQg
YWNjZXNzaW5nIGluc3RhbmNlcyBvZiB0aGUgdGVtcGxhdGUgY2FsbHMgdGhlIGNhbGxiYWNrIGZ1
bmN0aW9uLgotLy8gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGNoZWNrcyBzYW1lIG9yaWdpbiBwb2xp
Y3kuCi0vLwotLy8gQ2FsbGJhY2sgZnVuY3Rpb25zIGFyZSBleHBlbnNpdmUuIFY4IHVzZXMgYSBz
ZWN1cml0eSB0b2tlbiBzdHJpbmcgdG8gZG8KLS8vIGZhc3QgYWNjZXNzIGNoZWNrcyBmb3IgdGhl
IGNvbW1vbiBjYXNlIHdoZXJlIHNvdXJjZSBhbmQgdGFyZ2V0IGFyZSBpbiB0aGUKLS8vIHNhbWUg
ZG9tYWluLiBBIHNlY3VyaXR5IHRva2VuIGlzIGEgc3RyaW5nIG9iamVjdCB0aGF0IHJlcHJlc2Vu
dHMKLS8vIHRoZSBwcm90b2NvbC91cmwvcG9ydCBvZiBhIGRvbWFpbi4KLS8vCi0vLyBUaGVyZSBh
cmUgc3BlY2lhbCBjYXNlcyB3aGVyZSBhIHNlY3VyaXR5IHRva2VuIG1hdGNoaW5nIGlzIG5vdCBl
bm91Z2guCi0vLyBGb3IgZXhhbXBsZSwgSmF2YVNjcmlwdCBjYW4gc2V0IGl0cyBkb21haW4gdG8g
YSBzdXBlciBkb21haW4gYnkgY2FsbGluZwotLy8gZG9jdW1lbnQuc2V0RG9tYWluKC4uLikuIElu
IHRoZXNlIGNhc2VzLCB0aGUgYmluZGluZyBjb2RlIGNhbiByZXNldAotLy8gYSBjb250ZXh0J3Mg
c2VjdXJpdHkgdG9rZW4gdG8gaXRzIGdsb2JhbCBvYmplY3Qgc28gdGhhdCB0aGUgZmFzdCBhY2Nl
c3MKLS8vIGNoZWNrIHdpbGwgYWx3YXlzIGZhaWwuCi0KLS8vIENoZWNrIGlmIHRoZSBjdXJyZW50
IGV4ZWN1dGlvbiBjb250ZXh0IGNhbiBhY2Nlc3MgYSB0YXJnZXQgZnJhbWUuCi0vLyBGaXJzdCBp
dCBjaGVja3Mgc2FtZSBkb21haW4gcG9saWN5IHVzaW5nIHRoZSBsZXhpY2FsIGNvbnRleHQKLS8v
Ci0vLyBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gS0pTOjpXaW5kb3c6OmFsbG93c0FjY2Vzc0Zyb20o
RXhlY1N0YXRlKiwgU3RyaW5nJikuCi1ib29sIFY4UHJveHk6OmNhbkFjY2Vzc1ByaXZhdGUoRE9N
V2luZG93KiB0YXJnZXRXaW5kb3cpCi17Ci0gICAgQVNTRVJUKHRhcmdldFdpbmRvdyk7Ci0KLSAg
ICBTdHJpbmcgbWVzc2FnZTsKLQotICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gYWN0aXZlQ29u
dGV4dCA9IHY4OjpDb250ZXh0OjpHZXRDYWxsaW5nKCk7Ci0gICAgaWYgKGFjdGl2ZUNvbnRleHQu
SXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIFRoZXJlIGlzIGEgc2luZ2xlIGFjdGl2YXRpb24gcmVj
b3JkIG9uIHRoZSBzdGFjaywgc28gdGhhdCBtdXN0Ci0gICAgICAgIC8vIGJlIHRoZSBhY3RpdmVD
b250ZXh0LgotICAgICAgICBhY3RpdmVDb250ZXh0ID0gdjg6OkNvbnRleHQ6OkdldEN1cnJlbnQo
KTsKLSAgICB9Ci0gICAgRE9NV2luZG93KiBhY3RpdmVXaW5kb3cgPSByZXRyaWV2ZVdpbmRvdyhh
Y3RpdmVDb250ZXh0KTsKLSAgICBpZiAoYWN0aXZlV2luZG93ID09IHRhcmdldFdpbmRvdykKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoIWFjdGl2ZVdpbmRvdykKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgY29uc3QgU2VjdXJpdHlPcmlnaW4qIGFjdGl2ZVNlY3VyaXR5T3Jp
Z2luID0gYWN0aXZlV2luZG93LT5zZWN1cml0eU9yaWdpbigpOwotICAgIGNvbnN0IFNlY3VyaXR5
T3JpZ2luKiB0YXJnZXRTZWN1cml0eU9yaWdpbiA9IHRhcmdldFdpbmRvdy0+c2VjdXJpdHlPcmln
aW4oKTsKLQotICAgIC8vIFdlIGhhdmUgc2VlbiBjcmFzaGVzIHdlcmUgdGhlIHNlY3VyaXR5IG9y
aWdpbiBvZiB0aGUgdGFyZ2V0IGhhcyBub3QgYmVlbgotICAgIC8vIGluaXRpYWxpemVkLiBEZWZl
bmQgYWdhaW5zdCB0aGF0LgotICAgIGlmICghdGFyZ2V0U2VjdXJpdHlPcmlnaW4pCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmIChhY3RpdmVTZWN1cml0eU9yaWdpbi0+Y2FuQWNjZXNz
KHRhcmdldFNlY3VyaXR5T3JpZ2luKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBB
bGxvdyBhY2Nlc3MgdG8gYSAiYWJvdXQ6YmxhbmsiIHBhZ2UgaWYgdGhlIGR5bmFtaWMgY29udGV4
dCBpcyBhCi0gICAgLy8gZGV0YWNoZWQgY29udGV4dCBvZiB0aGUgc2FtZSBmcmFtZSBhcyB0aGUg
YmxhbmsgcGFnZS4KLSAgICBpZiAodGFyZ2V0U2VjdXJpdHlPcmlnaW4tPmlzRW1wdHkoKSAmJiBh
Y3RpdmVXaW5kb3ctPmZyYW1lKCkgPT0gdGFyZ2V0V2luZG93LT5mcmFtZSgpKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBWOFByb3h5OjpjYW5B
Y2Nlc3NGcmFtZShGcmFtZSogdGFyZ2V0LCBib29sIHJlcG9ydEVycm9yKQotewotICAgIC8vIFRo
ZSBzdWJqZWN0IGlzIGRldGFjaGVkIGZyb20gYSBmcmFtZSwgZGVueSBhY2Nlc3Nlcy4KLSAgICBp
ZiAoIXRhcmdldCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFjYW5BY2Nlc3NQ
cml2YXRlKHRhcmdldC0+ZG9tV2luZG93KCkpKSB7Ci0gICAgICAgIGlmIChyZXBvcnRFcnJvcikK
LSAgICAgICAgICAgIHJlcG9ydFVuc2FmZUFjY2Vzc1RvKHRhcmdldCwgUmVwb3J0Tm93KTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBW
OFByb3h5OjpjaGVja05vZGVTZWN1cml0eShOb2RlKiBub2RlKQotewotICAgIGlmICghbm9kZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRnJhbWUqIHRhcmdldCA9IG5vZGUtPmRvY3Vt
ZW50KCktPmZyYW1lKCk7Ci0KLSAgICBpZiAoIXRhcmdldCkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgcmV0dXJuIGNhbkFjY2Vzc0ZyYW1lKHRhcmdldCwgdHJ1ZSk7Ci19Ci0KIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBWOFByb3h5OjpjcmVhdGVOZXdDb250ZXh0KHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gZ2xvYmFsLCBpbnQgZXh0ZW5zaW9uR3JvdXApCiB7CiAgICAgdjg6OlBl
cnNpc3RlbnQ8djg6OkNvbnRleHQ+IHJlc3VsdDsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvdjgv
VjhQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCShy
ZXZpc2lvbiA1MTk3MikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzksNiArMTM5LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
ICAgIEdlbmVyYWxFcnJvcgogICAgICAgICB9OwogCisgICAgICAgIC8vIFdoZW4gdG8gcmVwb3J0
IGVycm9ycy4KKyAgICAgICAgZW51bSBEZWxheVJlcG9ydGluZyB7CisgICAgICAgICAgICBSZXBv
cnRMYXRlciwKKyAgICAgICAgICAgIFJlcG9ydE5vdworICAgICAgICB9OworCiAgICAgICAgIGV4
cGxpY2l0IFY4UHJveHkoRnJhbWUqKTsKIAogICAgICAgICB+VjhQcm94eSgpOwpAQCAtMzAxLDEz
ICszMDcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIGlzIGRpc2FibGVkIGFu
ZCBpdCByZXR1cm5zIHRydWUuCiAgICAgICAgIHN0YXRpYyBib29sIGhhbmRsZU91dE9mTWVtb3J5
KCk7CiAKLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGFjdGl2ZSBleGVjdXRpb24gY29udGV4dCBj
YW4gYWNjZXNzIHRoZSB0YXJnZXQgZnJhbWUuCi0gICAgICAgIHN0YXRpYyBib29sIGNhbkFjY2Vz
c0ZyYW1lKEZyYW1lKiwgYm9vbCByZXBvcnRFcnJvcik7Ci0KLSAgICAgICAgLy8gQ2hlY2sgaWYg
aXQgaXMgc2FmZSB0byBhY2Nlc3MgdGhlIGdpdmVuIG5vZGUgZnJvbSB0aGUKLSAgICAgICAgLy8g
Y3VycmVudCBzZWN1cml0eSBjb250ZXh0LgotICAgICAgICBzdGF0aWMgYm9vbCBjaGVja05vZGVT
ZWN1cml0eShOb2RlKik7Ci0KICAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBj
aGVja05ld0xlZ2FsKGNvbnN0IHY4OjpBcmd1bWVudHMmKTsKIAogICAgICAgICBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6U2NyaXB0PiBjb21waWxlU2NyaXB0KHY4OjpIYW5kbGU8djg6OlN0cmluZz4g
Y29kZSwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgaW50IGJhc2VMaW5lKTsKQEAgLTM2NSw2ICsz
NjQsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBpbml0Q29udGV4dElm
TmVlZGVkKCk7CiAgICAgICAgIHZvaWQgdXBkYXRlRG9jdW1lbnRXcmFwcGVyKHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB3cmFwcGVyKTsKKyAgICAgICAgCisgICAgICAgIC8vIFJlcG9ydCBhbiB1bnNh
ZmUgYXR0ZW1wdCB0byBhY2Nlc3MgdGhlIGdpdmVuIGZyYW1lIG9uIHRoZSBjb25zb2xlLgorICAg
ICAgICBzdGF0aWMgdm9pZCByZXBvcnRVbnNhZmVBY2Nlc3NUbyhGcmFtZSogdGFyZ2V0LCBEZWxh
eVJlcG9ydGluZyBkZWxheSk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIHNldFNlY3Vy
aXR5VG9rZW4oKTsKQEAgLTM4OSw4ICszOTEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIC8vIFJldHVybnMgZmFsc2Ugd2hlbiB3ZSdyZSBvdXQgb2YgbWVtb3J5IGluIFY4LgogICAg
ICAgICBib29sIHNldEluamVjdGVkU2NyaXB0Q29udGV4dERlYnVnSWQodjg6OkhhbmRsZTx2ODo6
Q29udGV4dD4gdGFyZ2V0Q29udGV4dCk7CiAKLSAgICAgICAgc3RhdGljIGJvb2wgY2FuQWNjZXNz
UHJpdmF0ZShET01XaW5kb3cqKTsKLQogICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogcmFuZ2VF
eGNlcHRpb25OYW1lKGludCBleGNlcHRpb25Db2RlKTsKICAgICAgICAgc3RhdGljIGNvbnN0IGNo
YXIqIGV2ZW50RXhjZXB0aW9uTmFtZShpbnQgZXhjZXB0aW9uQ29kZSk7CiAgICAgICAgIHN0YXRp
YyBjb25zdCBjaGFyKiB4bWxIdHRwUmVxdWVzdEV4Y2VwdGlvbk5hbWUoaW50IGV4Y2VwdGlvbkNv
ZGUpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRp
bmcuY3BwCShyZXZpc2lvbiA1MTk3MikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q3VzdG9tQmluZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDggQEAKICNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVFbGVtZW50QmFzZS5oIgogI2lu
Y2x1ZGUgIkxvY2F0aW9uLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhC
aW5kaW5nU3RhdGUuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAKICNpZiBFTkFCTEUoU1ZHKQpA
QCAtNTEsNyArNTMsNyBAQCBib29sIGFsbG93U2V0dGluZ0ZyYW1lU3JjVG9KYXZhc2NyaXB0VXJs
CiB7CiAgICAgaWYgKHByb3RvY29sSXMoZGVwcmVjYXRlZFBhcnNlVVJMKHZhbHVlKSwgImphdmFz
Y3JpcHQiKSkgewogICAgICAgICBOb2RlKiBjb250ZW50RG9jID0gZnJhbWUtPmNvbnRlbnREb2N1
bWVudCgpOwotICAgICAgICBpZiAoY29udGVudERvYyAmJiAhVjhQcm94eTo6Y2hlY2tOb2RlU2Vj
dXJpdHkoY29udGVudERvYykpCisgICAgICAgIGlmIChjb250ZW50RG9jICYmICFWOEJpbmRpbmdT
ZWN1cml0eTo6Y2hlY2tOb2RlU2VjdXJpdHkoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgY29udGVu
dERvYykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVl
OwpAQCAtOTcsNyArOTksNyBAQCBJTkRFWEVEX0FDQ0VTU19DSEVDSyhIaXN0b3J5KQogICAgIEFT
U0VSVChWOENsYXNzSW5kZXg6OkZyb21JbnQoZGF0YS0+SW50MzJWYWx1ZSgpKSA9PSBWOENsYXNz
SW5kZXg6OkhJU1RPUlkpOwogICAgIC8vIE9ubHkgYWxsb3cgc2FtZSBvcmlnaW4gYWNjZXNzLgog
ICAgIEhpc3RvcnkqIGhpc3RvcnkgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxIaXN0b3J5PihWOENsYXNzSW5kZXg6OkhJU1RPUlksIGhvc3QpOwotICAgIHJldHVybiBWOFBy
b3h5OjpjYW5BY2Nlc3NGcmFtZShoaXN0b3J5LT5mcmFtZSgpLCBmYWxzZSk7CisgICAgcmV0dXJu
IFY4QmluZGluZ1NlY3VyaXR5OjpjYW5BY2Nlc3NGcmFtZShWOEJpbmRpbmdTdGF0ZTo6T25seSgp
LCBoaXN0b3J5LT5mcmFtZSgpLCBmYWxzZSk7CiB9CiAKIE5BTUVEX0FDQ0VTU19DSEVDSyhIaXN0
b3J5KQpAQCAtMTA1LDcgKzEwNyw3IEBAIE5BTUVEX0FDQ0VTU19DSEVDSyhIaXN0b3J5KQogICAg
IEFTU0VSVChWOENsYXNzSW5kZXg6OkZyb21JbnQoZGF0YS0+SW50MzJWYWx1ZSgpKSA9PSBWOENs
YXNzSW5kZXg6OkhJU1RPUlkpOwogICAgIC8vIE9ubHkgYWxsb3cgc2FtZSBvcmlnaW4gYWNjZXNz
LgogICAgIEhpc3RvcnkqIGhpc3RvcnkgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9i
amVjdDxIaXN0b3J5PihWOENsYXNzSW5kZXg6OkhJU1RPUlksIGhvc3QpOwotICAgIHJldHVybiBW
OFByb3h5OjpjYW5BY2Nlc3NGcmFtZShoaXN0b3J5LT5mcmFtZSgpLCBmYWxzZSk7CisgICAgcmV0
dXJuIFY4QmluZGluZ1NlY3VyaXR5OjpjYW5BY2Nlc3NGcmFtZShWOEJpbmRpbmdTdGF0ZTo6T25s
eSgpLCBoaXN0b3J5LT5mcmFtZSgpLCBmYWxzZSk7CiB9CiAKICN1bmRlZiBJTkRFWEVEX0FDQ0VT
U19DSEVDSwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2lu
ZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gNTE5NzIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcg
QEAKICNpbmNsdWRlICJET01XaW5kb3cuaCIKIAogI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2lu
Y2x1ZGUgIlY4QmluZGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCiAj
aW5jbHVkZSAiVjhDdXN0b21FdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiVjhNZXNzYWdlUG9y
dEN1c3RvbS5oIgpAQCAtMTAxLDcgKzEwMiw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEN1
c3RvbTo6V2luZG93U2UKIAogICAgIERPTVdpbmRvdyogaW1wID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgYXJn
cy5Ib2xkZXIoKSk7CiAKLSAgICBpZiAoIVY4UHJveHk6OmNhbkFjY2Vzc0ZyYW1lKGltcC0+ZnJh
bWUoKSwgdHJ1ZSkpCisgICAgaWYgKCFWOEJpbmRpbmdTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUo
VjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgaW1wLT5mcmFtZSgpLCB0cnVlKSkKICAgICAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKIAogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlw
dENvbnRleHQgPSBzdGF0aWNfY2FzdDxTY3JpcHRFeGVjdXRpb25Db250ZXh0Kj4oaW1wLT5kb2N1
bWVudCgpKTsKQEAgLTE3MSw3ICsxNzIsNyBAQCBBQ0NFU1NPUl9HRVRURVIoRE9NV2luZG93RXZl
bnQpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKICAgICBGcmFtZSogZnJhbWUg
PSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJ
bmRleDo6RE9NV0lORE9XLCBob2xkZXIpLT5mcmFtZSgpOwotICAgIGlmICghVjhQcm94eTo6Y2Fu
QWNjZXNzRnJhbWUoZnJhbWUsIHRydWUpKQorICAgIGlmICghVjhCaW5kaW5nU2VjdXJpdHk6OmNh
bkFjY2Vzc0ZyYW1lKFY4QmluZGluZ1N0YXRlOjpPbmx5KCksIGZyYW1lLCB0cnVlKSkKICAgICAg
ICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIAogICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4g
Y29udGV4dCA9IFY4UHJveHk6OmNvbnRleHQoZnJhbWUpOwpAQCAtMTkyLDcgKzE5Myw3IEBAIEFD
Q0VTU09SX1NFVFRFUihET01XaW5kb3dFdmVudCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRnJh
bWUqIGZyYW1lID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93
PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaG9sZGVyKS0+ZnJhbWUoKTsKLSAgICBpZiAoIVY4
UHJveHk6OmNhbkFjY2Vzc0ZyYW1lKGZyYW1lLCB0cnVlKSkKKyAgICBpZiAoIVY4QmluZGluZ1Nl
Y3VyaXR5OjpjYW5BY2Nlc3NGcmFtZShWOEJpbmRpbmdTdGF0ZTo6T25seSgpLCBmcmFtZSwgdHJ1
ZSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4
dCA9IFY4UHJveHk6OmNvbnRleHQoZnJhbWUpOwpAQCAtMjIwLDcgKzIyMSw3IEBAIEFDQ0VTU09S
X1NFVFRFUihET01XaW5kb3dPcGVuZXIpCiB7CiAgICAgRE9NV2luZG93KiBpbXAgPSBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9N
V0lORE9XLCBpbmZvLkhvbGRlcigpKTsKIAotICAgIGlmICghVjhQcm94eTo6Y2FuQWNjZXNzRnJh
bWUoaW1wLT5mcmFtZSgpLCB0cnVlKSkKKyAgICBpZiAoIVY4QmluZGluZ1NlY3VyaXR5OjpjYW5B
Y2Nlc3NGcmFtZShWOEJpbmRpbmdTdGF0ZTo6T25seSgpLCBpbXAtPmZyYW1lKCksIHRydWUpKQog
ICAgICAgICByZXR1cm47CiAgIAogICAgIC8vIE9wZW5lciBjYW4gYmUgc2hhZG93ZWQgaWYgaXQg
aXMgaW4gdGhlIHNhbWUgZG9tYWluLgpAQCAtMzQzLDcgKzM0NCw3IEBAIENBTExCQUNLX0ZVTkNf
REVDTChET01XaW5kb3dBZGRFdmVudExpc3QKIAogICAgIERPTVdpbmRvdyogaW1wID0gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRP
TVdJTkRPVywgYXJncy5Ib2xkZXIoKSk7CiAKLSAgICBpZiAoIVY4UHJveHk6OmNhbkFjY2Vzc0Zy
YW1lKGltcC0+ZnJhbWUoKSwgdHJ1ZSkpCisgICAgaWYgKCFWOEJpbmRpbmdTZWN1cml0eTo6Y2Fu
QWNjZXNzRnJhbWUoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgaW1wLT5mcmFtZSgpLCB0cnVlKSkK
ICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIAogICAgIERvY3VtZW50KiBkb2MgPSBp
bXAtPmRvY3VtZW50KCk7CkBAIC0zNzYsNyArMzc3LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERP
TVdpbmRvd1JlbW92ZUV2ZW50TAogCiAgICAgRE9NV2luZG93KiBpbXAgPSBWOERPTVdyYXBwZXI6
OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9X
LCBhcmdzLkhvbGRlcigpKTsKIAotICAgIGlmICghVjhQcm94eTo6Y2FuQWNjZXNzRnJhbWUoaW1w
LT5mcmFtZSgpLCB0cnVlKSkKKyAgICBpZiAoIVY4QmluZGluZ1NlY3VyaXR5OjpjYW5BY2Nlc3NG
cmFtZShWOEJpbmRpbmdTdGF0ZTo6T25seSgpLCBpbXAtPmZyYW1lKCksIHRydWUpKQogICAgICAg
ICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCiAgICAgRG9jdW1lbnQqIGRvYyA9IGltcC0+ZG9j
dW1lbnQoKTsKQEAgLTQ0MSw3ICs0NDIsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woRE9NV2luZG93
QXRvYikKIAogICAgIERPTVdpbmRvdyogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRp
dmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgYXJncy5Ib2xkZXIo
KSk7CiAKLSAgICBpZiAoIVY4UHJveHk6OmNhbkFjY2Vzc0ZyYW1lKGltcC0+ZnJhbWUoKSwgdHJ1
ZSkpCisgICAgaWYgKCFWOEJpbmRpbmdTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhCaW5kaW5n
U3RhdGU6Ok9ubHkoKSwgaW1wLT5mcmFtZSgpLCB0cnVlKSkKICAgICAgICAgcmV0dXJuIHY4OjpV
bmRlZmluZWQoKTsKIAogICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKQEAgLTQ2MCw3ICs0NjEs
NyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woRE9NV2luZG93QnRvYSkKIAogICAgIERPTVdpbmRvdyog
aW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENs
YXNzSW5kZXg6OkRPTVdJTkRPVywgYXJncy5Ib2xkZXIoKSk7CiAKLSAgICBpZiAoIVY4UHJveHk6
OmNhbkFjY2Vzc0ZyYW1lKGltcC0+ZnJhbWUoKSwgdHJ1ZSkpCisgICAgaWYgKCFWOEJpbmRpbmdT
ZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgaW1wLT5mcmFt
ZSgpLCB0cnVlKSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIAogICAgIGlmIChh
cmdzLkxlbmd0aCgpIDwgMSkKQEAgLTYyMSw3ICs2MjIsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0wo
RE9NV2luZG93U2hvd01vZGFsRGlhCiAgICAgICAgIFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBh
cmdzLkhvbGRlcigpKTsKICAgICBGcmFtZSogZnJhbWUgPSB3aW5kb3ctPmZyYW1lKCk7CiAKLSAg
ICBpZiAoIVY4UHJveHk6OmNhbkFjY2Vzc0ZyYW1lKGZyYW1lLCB0cnVlKSkKKyAgICBpZiAoIVY4
QmluZGluZ1NlY3VyaXR5OjpjYW5BY2Nlc3NGcmFtZShWOEJpbmRpbmdTdGF0ZTo6T25seSgpLCBm
cmFtZSwgdHJ1ZSkpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKICAgICBGcmFt
ZSogY2FsbGluZ0ZyYW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckNhbGxpbmdDb250ZXh0
KCk7CkBAIC03MDksNyArNzEwLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRvd09wZW4p
CiAgICAgRE9NV2luZG93KiBwYXJlbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9i
amVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBhcmdzLkhvbGRlcigpKTsK
ICAgICBGcmFtZSogZnJhbWUgPSBwYXJlbnQtPmZyYW1lKCk7CiAKLSAgICBpZiAoIVY4UHJveHk6
OmNhbkFjY2Vzc0ZyYW1lKGZyYW1lLCB0cnVlKSkKKyAgICBpZiAoIVY4QmluZGluZ1NlY3VyaXR5
OjpjYW5BY2Nlc3NGcmFtZShWOEJpbmRpbmdTdGF0ZTo6T25seSgpLCBmcmFtZSwgdHJ1ZSkpCiAg
ICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKICAgICBGcmFtZSogZW50ZXJlZEZyYW1l
ID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckVudGVyZWRDb250ZXh0KCk7CkBAIC05MjUsNyAr
OTI2LDcgQEAgdm9pZCBWOEN1c3RvbTo6Q2xlYXJUaW1lb3V0SW1wbChjb25zdCB2OAogCiAgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBhcmdzLkhvbGRlcigpOwogICAgIERPTVdp
bmRvdyogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93
PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaG9sZGVyKTsKLSAgICBpZiAoIVY4UHJveHk6OmNh
bkFjY2Vzc0ZyYW1lKGltcC0+ZnJhbWUoKSwgdHJ1ZSkpCisgICAgaWYgKCFWOEJpbmRpbmdTZWN1
cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgaW1wLT5mcmFtZSgp
LCB0cnVlKSkKICAgICAgICAgcmV0dXJuOwogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQgPSBzdGF0aWNfY2FzdDxTY3JpcHRFeGVjdXRpb25Db250ZXh0Kj4oaW1wLT5kb2N1bWVu
dCgpKTsKICAgICBpZiAoIWNvbnRleHQpCkBAIC05NzEsNyArOTcyLDcgQEAgTkFNRURfQUNDRVNT
X0NIRUNLKERPTVdpbmRvdykKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAg
IHJldHVybiBWOFByb3h5OjpjYW5BY2Nlc3NGcmFtZSh0YXJnZXQsIGZhbHNlKTsKKyAgICByZXR1
cm4gVjhCaW5kaW5nU2VjdXJpdHk6OmNhbkFjY2Vzc0ZyYW1lKFY4QmluZGluZ1N0YXRlOjpPbmx5
KCksIHRhcmdldCwgZmFsc2UpOwogfQogCiBJTkRFWEVEX0FDQ0VTU19DSEVDSyhET01XaW5kb3cp
CkBAIC05OTMsNyArOTk0LDcgQEAgSU5ERVhFRF9BQ0NFU1NfQ0hFQ0soRE9NV2luZG93KQogICAg
IGlmICgodHlwZSA9PSB2ODo6QUNDRVNTX0dFVCB8fCB0eXBlID09IHY4OjpBQ0NFU1NfSEFTKSAm
JiB0YXJnZXQtPnRyZWUoKS0+Y2hpbGQoaW5kZXgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAot
ICAgIHJldHVybiBWOFByb3h5OjpjYW5BY2Nlc3NGcmFtZSh0YXJnZXQsIGZhbHNlKTsKKyAgICBy
ZXR1cm4gVjhCaW5kaW5nU2VjdXJpdHk6OmNhbkFjY2Vzc0ZyYW1lKFY4QmluZGluZ1N0YXRlOjpP
bmx5KCksIHRhcmdldCwgZmFsc2UpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9tLmNwcAko
cmV2aXNpb24gNTE5NzIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9u
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkxv
Y2F0aW9uLmgiCiAKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmdT
dGF0ZS5oIgogI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgogI2luY2x1ZGUgIlY4Q3VzdG9t
RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlY4TG9jYXRpb24uaCIKQEAgLTIxNywxMSArMjE4
LDExIEBAIEFDQ0VTU09SX0dFVFRFUihMb2NhdGlvblJlbG9hZCkKICAgICAgICAgcmV0dXJuIHBy
aXZhdGVUZW1wbGF0ZS0+R2V0RnVuY3Rpb24oKTsKICAgICB9CiAgICAgTG9jYXRpb24qIGltcCA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5k
ZXg6OkxPQ0FUSU9OLCBob2xkZXIpOwotICAgIGlmICghVjhQcm94eTo6Y2FuQWNjZXNzRnJhbWUo
aW1wLT5mcmFtZSgpLCBmYWxzZSkpIHsKKyAgICBpZiAoIVY4QmluZGluZ1NlY3VyaXR5OjpjYW5B
Y2Nlc3NGcmFtZShWOEJpbmRpbmdTdGF0ZTo6T25seSgpLCBpbXAtPmZyYW1lKCksIGZhbHNlKSkg
ewogICAgICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHNo
YXJlZFRlbXBsYXRlID0gdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+OjpOZXco
djg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyh2OExvY2F0aW9uUmVsb2FkQ2FsbGJhY2ssIHY4OjpI
YW5kbGU8djg6OlZhbHVlPigpLCB2ODo6U2lnbmF0dXJlOjpOZXcoVjhMb2NhdGlvbjo6R2V0UmF3
VGVtcGxhdGUoKSkpKTsKICAgICAgICAgcmV0dXJuIHNoYXJlZFRlbXBsYXRlLT5HZXRGdW5jdGlv
bigpOwotICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gcHJpdmF0ZVRlbXBsYXRlLT5HZXRGdW5j
dGlvbigpOworICAgIH0KKyAgICByZXR1cm4gcHJpdmF0ZVRlbXBsYXRlLT5HZXRGdW5jdGlvbigp
OwogfQogCiBBQ0NFU1NPUl9HRVRURVIoTG9jYXRpb25SZXBsYWNlKQpAQCAtMjM1LDExICsyMzYs
MTEgQEAgQUNDRVNTT1JfR0VUVEVSKExvY2F0aW9uUmVwbGFjZSkKICAgICAgICAgcmV0dXJuIHBy
aXZhdGVUZW1wbGF0ZS0+R2V0RnVuY3Rpb24oKTsKICAgICB9CiAgICAgTG9jYXRpb24qIGltcCA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5k
ZXg6OkxPQ0FUSU9OLCBob2xkZXIpOwotICAgIGlmICghVjhQcm94eTo6Y2FuQWNjZXNzRnJhbWUo
aW1wLT5mcmFtZSgpLCBmYWxzZSkpIHsKKyAgICBpZiAoIVY4QmluZGluZ1NlY3VyaXR5OjpjYW5B
Y2Nlc3NGcmFtZShWOEJpbmRpbmdTdGF0ZTo6T25seSgpLCBpbXAtPmZyYW1lKCksIGZhbHNlKSkg
ewogICAgICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHNo
YXJlZFRlbXBsYXRlID0gdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+OjpOZXco
djg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyh2OExvY2F0aW9uUmVwbGFjZUNhbGxiYWNrLCB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4oKSwgdjg6OlNpZ25hdHVyZTo6TmV3KFY4TG9jYXRpb246OkdldFJh
d1RlbXBsYXRlKCkpKSk7CiAgICAgICAgIHJldHVybiBzaGFyZWRUZW1wbGF0ZS0+R2V0RnVuY3Rp
b24oKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJuIHByaXZhdGVUZW1wbGF0ZS0+R2V0RnVu
Y3Rpb24oKTsKKyAgICB9CisgICAgcmV0dXJuIHByaXZhdGVUZW1wbGF0ZS0+R2V0RnVuY3Rpb24o
KTsKIH0KIAogQUNDRVNTT1JfR0VUVEVSKExvY2F0aW9uQXNzaWduKQpAQCAtMjU0LDExICsyNTUs
MTEgQEAgQUNDRVNTT1JfR0VUVEVSKExvY2F0aW9uQXNzaWduKQogICAgICAgICByZXR1cm4gcHJp
dmF0ZVRlbXBsYXRlLT5HZXRGdW5jdGlvbigpOwogICAgIH0KICAgICBMb2NhdGlvbiogaW1wID0g
VjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRl
eDo6TE9DQVRJT04sIGhvbGRlcik7Ci0gICAgaWYgKCFWOFByb3h5OjpjYW5BY2Nlc3NGcmFtZShp
bXAtPmZyYW1lKCksIGZhbHNlKSkgeworICAgIGlmICghVjhCaW5kaW5nU2VjdXJpdHk6OmNhbkFj
Y2Vzc0ZyYW1lKFY4QmluZGluZ1N0YXRlOjpPbmx5KCksIGltcC0+ZnJhbWUoKSwgZmFsc2UpKSB7
CiAgICAgICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gc2hh
cmVkVGVtcGxhdGUgPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT46Ok5ldyh2
ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KHY4TG9jYXRpb25Bc3NpZ25DYWxsYmFjaywgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+KCksIHY4OjpTaWduYXR1cmU6Ok5ldyhWOExvY2F0aW9uOjpHZXRSYXdU
ZW1wbGF0ZSgpKSkpOwogICAgICAgICByZXR1cm4gc2hhcmVkVGVtcGxhdGUtPkdldEZ1bmN0aW9u
KCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJldHVybiBwcml2YXRlVGVtcGxhdGUtPkdldEZ1bmN0
aW9uKCk7CisgICAgfQorICAgIHJldHVybiBwcml2YXRlVGVtcGxhdGUtPkdldEZ1bmN0aW9uKCk7
CiB9CiAKIENBTExCQUNLX0ZVTkNfREVDTChMb2NhdGlvblJlbG9hZCkKQEAgLTMzNSw3ICszMzYs
NyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woTG9jYXRpb25Ub1N0cmluZykKICAgICBJTkNfU1RBVFMo
IkRPTS5Mb2NhdGlvbi50b1N0cmluZyIpOwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9s
ZGVyID0gYXJncy5Ib2xkZXIoKTsKICAgICBMb2NhdGlvbiogaW1wID0gVjhET01XcmFwcGVyOjpj
b252ZXJ0VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhv
bGRlcik7Ci0gICAgaWYgKCFWOFByb3h5OjpjYW5BY2Nlc3NGcmFtZShpbXAtPmZyYW1lKCksIHRy
dWUpKQorICAgIGlmICghVjhCaW5kaW5nU2VjdXJpdHk6OmNhbkFjY2Vzc0ZyYW1lKFY4QmluZGlu
Z1N0YXRlOjpPbmx5KCksIGltcC0+ZnJhbWUoKSwgdHJ1ZSkpCiAgICAgICAgIHJldHVybiB2ODo6
VW5kZWZpbmVkKCk7CiAgICAgU3RyaW5nIHJlc3VsdCA9IGltcC0+aHJlZigpOwogICAgIHJldHVy
biB2OFN0cmluZyhyZXN1bHQpOwpAQCAtMzQ2LDcgKzM0Nyw3IEBAIElOREVYRURfQUNDRVNTX0NI
RUNLKExvY2F0aW9uKQogICAgIEFTU0VSVChWOENsYXNzSW5kZXg6OkZyb21JbnQoZGF0YS0+SW50
MzJWYWx1ZSgpKSA9PSBWOENsYXNzSW5kZXg6OkxPQ0FUSU9OKTsKICAgICAvLyBPbmx5IGFsbG93
IHNhbWUgb3JpZ2luIGFjY2VzcwogICAgIExvY2F0aW9uKiBpbXAgPSAgVjhET01XcmFwcGVyOjpj
b252ZXJ0VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhv
c3QpOwotICAgIHJldHVybiBWOFByb3h5OjpjYW5BY2Nlc3NGcmFtZShpbXAtPmZyYW1lKCksIGZh
bHNlKTsKKyAgICByZXR1cm4gVjhCaW5kaW5nU2VjdXJpdHk6OmNhbkFjY2Vzc0ZyYW1lKFY4Qmlu
ZGluZ1N0YXRlOjpPbmx5KCksIGltcC0+ZnJhbWUoKSwgZmFsc2UpOwogfQogCiBOQU1FRF9BQ0NF
U1NfQ0hFQ0soTG9jYXRpb24pCkBAIC0zNTQsNyArMzU1LDcgQEAgTkFNRURfQUNDRVNTX0NIRUNL
KExvY2F0aW9uKQogICAgIEFTU0VSVChWOENsYXNzSW5kZXg6OkZyb21JbnQoZGF0YS0+SW50MzJW
YWx1ZSgpKSA9PSBWOENsYXNzSW5kZXg6OkxPQ0FUSU9OKTsKICAgICAvLyBPbmx5IGFsbG93IHNh
bWUgb3JpZ2luIGFjY2VzcwogICAgIExvY2F0aW9uKiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZl
cnRUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhDbGFzc0luZGV4OjpMT0NBVElPTiwgaG9zdCk7
Ci0gICAgcmV0dXJuIFY4UHJveHk6OmNhbkFjY2Vzc0ZyYW1lKGltcC0+ZnJhbWUoKSwgZmFsc2Up
OworICAgIHJldHVybiBWOEJpbmRpbmdTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhCaW5kaW5n
U3RhdGU6Ok9ubHkoKSwgaW1wLT5mcmFtZSgpLCBmYWxzZSk7CiB9CiAKIH0gIC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDUyMDA1KQorKysgV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDA5LTEy
LTExICBDaGFybGVzIFJlaXMgIDxjcmVpc0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3Igc29tZSBzZWN1cml0eSBj
b2RlIG91dCBvZiBWOCBiaW5kaW5ncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MzIzMjYKKworICAgICAgICAqIHNyYy9XZWJCaW5kaW5ncy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OmdldERyYWdEYXRhSW1wbCk6CisKIDIwMDktMTItMTEgIEF2aSBEcmlz
c21hbiAgPGF2aUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlz
aGVyLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJCaW5kaW5ncy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJCaW5kaW5ncy5jcHAJKHJldmlzaW9uIDUxOTcy
KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJCaW5kaW5ncy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTlBW
OE9iamVjdC5oIiAgLy8gZm9yIFByaXZhdGVJZGVudGlmaWVyCiAjaW5jbHVkZSAiUmFuZ2UuaCIK
KyNpbmNsdWRlICJWOEJpbmRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgog
I2luY2x1ZGUgIlY4SGVscGVycy5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKQEAgLTIzNiw3ICsy
MzcsNyBAQCBzdGF0aWMgYm9vbCBnZXREcmFnRGF0YUltcGwoTlBPYmplY3QqIG5wCiAgICAgLy8g
Q2hlY2sgdGhlIGV4ZWN1dGlvbiBmcmFtZXMgYXJlIHNhbWUgb3JpZ2luLgogICAgIFY4UHJveHkq
IGN1cnJlbnQgPSBWOFByb3h5OjpyZXRyaWV2ZShWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yQ3Vy
cmVudENvbnRleHQoKSk7CiAgICAgRnJhbWUqIGZyYW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFt
ZShjb250ZXh0KTsKLSAgICBpZiAoIWN1cnJlbnQgfHwgIWN1cnJlbnQtPmNhbkFjY2Vzc0ZyYW1l
KGZyYW1lLCBmYWxzZSkpCisgICAgaWYgKCFjdXJyZW50IHx8ICFWOEJpbmRpbmdTZWN1cml0eTo6
Y2FuQWNjZXNzRnJhbWUoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgZnJhbWUsIGZhbHNlKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29uc3QgRXZlbnROYW1lcyYgbmFtZXMoZXZlbnRO
YW1lcygpKTsK
</data>
<flag name="review"
          id="26597"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="26610"
          type_id="3"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44709</attachid>
            <date>2009-12-11 14:56:27 -0800</date>
            <delta_ts>2009-12-13 21:01:13 -0800</delta_ts>
            <desc>Adds newlines and a BindingSecurityBase class</desc>
            <filename>bindings-security-patch-20091211-3.txt</filename>
            <type>text/plain</type>
            <size>46576</size>
            <attacher name="Charles Reis">creis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjAyMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjAgQEAKKzIwMDktMTItMTEgIENoYXJsZXMgUmVpcyAgPGNyZWlzQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBS
ZWZhY3RvciBzb21lIHNlY3VyaXR5IGNvZGUgb3V0IG9mIFY4IGJpbmRpbmdzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjMyNgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cy4gVGhlcmUgc2hvdWxkIGJlIG5vIGZ1bmN0aW9uYWxpdHkgY2hhbmdlcyBpbiB0
aGlzIHBhdGNoLAorICAgICAgICBzaW5jZSBpdCBpcyBvbmx5IHJlZmFjdG9yaW5nIGNvZGUuCisK
KyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAgKiBXZWJDb3JlLmd5
cGk6CisgICAgICAgICogYmluZGluZ3MvQmluZGluZ1NlY3VyaXR5Lmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6QmluZGluZ1NlY3VyaXR5OjpCaW5kaW5nU2VjdXJpdHkpOgorICAgICAgICAo
V2ViQ29yZTo6OjpjYW5BY2Nlc3NXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6OjpjYW5BY2Nl
c3NGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjo6OmNoZWNrTm9kZVNlY3VyaXR5KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9CaW5kaW5nU2VjdXJpdHlCYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpCaW5kaW5nU2VjdXJpdHlCYXNlOjpnZXRET01XaW5kb3cpOgorICAgICAgICAoV2Vi
Q29yZTo6QmluZGluZ1NlY3VyaXR5QmFzZTo6Z2V0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6
QmluZGluZ1NlY3VyaXR5QmFzZTo6Y2FuQWNjZXNzV2luZG93KToKKyAgICAgICAgKiBiaW5kaW5n
cy9CaW5kaW5nU2VjdXJpdHlCYXNlLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL0dlbmVy
aWNCaW5kaW5nLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9T
Y3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6
OmlzU2FmZVNjcmlwdCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhCaW5kaW5nLmg6CisgICAg
ICAgICogYmluZGluZ3MvdjgvVjhCaW5kaW5nU3RhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6Ojo6T25seSk6CisgICAgICAgIChXZWJDb3JlOjo6OmdldEFjdGl2ZVdpbmRvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjo6OmltbWVkaWF0ZWx5UmVwb3J0VW5zYWZlQWNjZXNzVG8pOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L1Y4QmluZGluZ1N0YXRlLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlY4UHJveHk6OnJlcG9ydFVuc2FmZUFjY2Vzc1RvKToKKyAgICAgICAgKFdlYkNvcmU6
OnJlcG9ydFVuc2FmZUphdmFTY3JpcHRBY2Nlc3MpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4
UHJveHkuaDoKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6Oik6CisgICAgICAgICogYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjphbGxv
d1NldHRpbmdGcmFtZVNyY1RvSmF2YXNjcmlwdFVybCk6CisgICAgICAgIChXZWJDb3JlOjpJTkRF
WEVEX0FDQ0VTU19DSEVDSyk6CisgICAgICAgIChXZWJDb3JlOjpOQU1FRF9BQ0NFU1NfQ0hFQ0sp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpWOEN1c3RvbTo6V2luZG93U2V0VGltZW91dEltcGwpOgorICAgICAg
ICAoV2ViQ29yZTo6QUNDRVNTT1JfR0VUVEVSKToKKyAgICAgICAgKFdlYkNvcmU6OkFDQ0VTU09S
X1NFVFRFUik6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAg
ICAoV2ViQ29yZTo6VjhDdXN0b206OkNsZWFyVGltZW91dEltcGwpOgorICAgICAgICAoV2ViQ29y
ZTo6TkFNRURfQUNDRVNTX0NIRUNLKToKKyAgICAgICAgKFdlYkNvcmU6OklOREVYRURfQUNDRVNT
X0NIRUNLKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhMb2NhdGlvbkN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBQ0NFU1NPUl9HRVRURVIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKFdlYkNvcmU6OklOREVYRURfQUNDRVNT
X0NIRUNLKToKKyAgICAgICAgKFdlYkNvcmU6Ok5BTUVEX0FDQ0VTU19DSEVDSyk6CisKIDIwMDkt
MTItMTEgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAg
QnVpbGQgZml4IGZvciBwbGF0Zm9ybXMgd2hlcmUgQUNDRUxFUkFURURfQ09NUE9TSVRJTkcgaXMg
bm90IGRlZmluZWQuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNTE5NzIpCisrKyBXZWJDb3JlL1dlYkNvcmUu
Z3lwaQkod29ya2luZyBjb3B5KQpAQCAtNDM0LDYgKzQzNCwxMCBAQAogICAgICAgICAgICAgJ2Fj
Y2Vzc2liaWxpdHkvd2luL0FjY2Vzc2liaWxpdHlPYmplY3RXaW4uY3BwJywKICAgICAgICAgICAg
ICdhY2Nlc3NpYmlsaXR5L3dpbi9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcldpbi5oJywKICAg
ICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L3d4L0FjY2Vzc2liaWxpdHlPYmplY3RXeC5jcHAnLAor
ICAgICAgICAgICAgJ2JpbmRpbmdzL0JpbmRpbmdTZWN1cml0eS5oJywKKyAgICAgICAgICAgICdi
aW5kaW5ncy9CaW5kaW5nU2VjdXJpdHlCYXNlLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3Mv
QmluZGluZ1NlY3VyaXR5QmFzZS5oJywKKyAgICAgICAgICAgICdiaW5kaW5ncy9HZW5lcmljQmlu
ZGluZy5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRTb3VyY2VQcm92
aWRlci5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy9qcy9ET01PYmplY3RXaXRoU1ZHQ29udGV4
dC5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwJywKQEAgLTc5
Nyw2ICs4MDEsOCBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExp
c3RlbmVyLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHAnLAogICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oJywKKyAgICAgICAgICAgICdiaW5kaW5n
cy92OC9WOEJpbmRpbmdTdGF0ZS5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4Qmlu
ZGluZ1N0YXRlLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4Q29sbGVjdGlvbi5jcHAn
LAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4Q29sbGVjdGlvbi5oJywKICAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9WOENvbnNvbGVNZXNzYWdlLmNwcCcsCkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUuZ3lwL1dlYkNvcmUuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXAvV2Vi
Q29yZS5neXAJKHJldmlzaW9uIDUxOTcyKQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3Jl
Lmd5cAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDYgKzEwNiw3IEBACiAgICAgICAnLi4vJywKICAg
ICAgICcuLi9hY2Nlc3NpYmlsaXR5JywKICAgICAgICcuLi9hY2Nlc3NpYmlsaXR5L2Nocm9taXVt
JywKKyAgICAgICcuLi9iaW5kaW5ncycsCiAgICAgICAnLi4vYmluZGluZ3MvdjgnLAogICAgICAg
Jy4uL2JpbmRpbmdzL3Y4L2N1c3RvbScsCiAgICAgICAnLi4vYnJpZGdlJywKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvQmluZGluZ1NlY3VyaXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9CaW5kaW5nU2VjdXJpdHkuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
QmluZGluZ1NlY3VyaXR5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBCaW5kaW5nU2VjdXJpdHlfaAorI2RlZmluZSBCaW5kaW5nU2VjdXJpdHlfaAorCisjaW5jbHVk
ZSAiQmluZGluZ1NlY3VyaXR5QmFzZS5oIgorI2luY2x1ZGUgIkdlbmVyaWNCaW5kaW5nLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRE9NV2luZG93OworY2xhc3MgRnJhbWU7Citj
bGFzcyBOb2RlOworCisvLyBTZWN1cml0eSBmdW5jdGlvbnMgc2hhcmVkIGJ5IHZhcmlvdXMgbGFu
Z3VhZ2UgYmluZGluZ3MuCit0ZW1wbGF0ZSA8Y2xhc3MgQmluZGluZz4KK2NsYXNzIEJpbmRpbmdT
ZWN1cml0eSA6IHB1YmxpYyBCaW5kaW5nU2VjdXJpdHlCYXNlIHsKK3B1YmxpYzoKKyAgICAvLyBD
aGVjayBpZiB0aGUgYWN0aXZlIGV4ZWN1dGlvbiBjb250ZXh0IGNhbiBhY2Nlc3MgdGhlIHRhcmdl
dCBmcmFtZS4KKyAgICBzdGF0aWMgYm9vbCBjYW5BY2Nlc3NGcmFtZShTdGF0ZTxCaW5kaW5nPios
IEZyYW1lKiwgYm9vbCByZXBvcnRFcnJvcik7CisKKyAgICAvLyBDaGVjayBpZiBpdCBpcyBzYWZl
IHRvIGFjY2VzcyB0aGUgZ2l2ZW4gbm9kZSBmcm9tIHRoZQorICAgIC8vIGN1cnJlbnQgc2VjdXJp
dHkgY29udGV4dC4KKyAgICBzdGF0aWMgYm9vbCBjaGVja05vZGVTZWN1cml0eShTdGF0ZTxCaW5k
aW5nPiosIE5vZGUqIHRhcmdldCk7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgQmluZGluZ1Nl
Y3VyaXR5KCkge30KKyAgICB+QmluZGluZ1NlY3VyaXR5KCk7CisKKyAgICAvLyBDaGVjayBpZiB0
aGUgY3VycmVudCBET01XaW5kb3cncyBzZWN1cml0eSBjb250ZXh0IGNhbiBhY2Nlc3MgdGhlIHRh
cmdldAorICAgIC8vIERPTVdpbmRvdy4gIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVwb3J0IGVy
cm9ycywgc28gbW9zdCBjYWxsZXJzIHNob3VsZAorICAgIC8vIHVzZSBjYW5BY2Nlc3NGcmFtZSBp
bnN0ZWFkLgorICAgIHN0YXRpYyBib29sIGNhbkFjY2Vzc1dpbmRvdyhTdGF0ZTxCaW5kaW5nPios
IERPTVdpbmRvdyogdGFyZ2V0KTsKK307CisKKy8vIEltcGxlbWVudGF0aW9ucyBvZiB0ZW1wbGF0
ZWQgbWV0aG9kcyBtdXN0IGJlIGluIHRoaXMgZmlsZS4KKwordGVtcGxhdGUgPGNsYXNzIEJpbmRp
bmc+Citib29sIEJpbmRpbmdTZWN1cml0eTxCaW5kaW5nPjo6Y2FuQWNjZXNzV2luZG93KFN0YXRl
PEJpbmRpbmc+KiBzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRE9NV2luZG93KiB0YXJnZXRXaW5kb3cpCit7CisgICAgRE9NV2luZG93KiBhY3Rp
dmVXaW5kb3cgPSBzdGF0ZS0+Z2V0QWN0aXZlV2luZG93KCk7CisgICAgcmV0dXJuIGNhbkFjY2Vz
cyhhY3RpdmVXaW5kb3csIHRhcmdldFdpbmRvdyk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBCaW5k
aW5nPgorYm9vbCBCaW5kaW5nU2VjdXJpdHk8QmluZGluZz46OmNhbkFjY2Vzc0ZyYW1lKFN0YXRl
PEJpbmRpbmc+KiBzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBGcmFtZSogdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgcmVwb3J0RXJyb3IpCit7CisgICAgLy8gVGhlIHN1YmplY3QgaXMg
ZGV0YWNoZWQgZnJvbSBhIGZyYW1lLCBkZW55IGFjY2Vzc2VzLgorICAgIGlmICghdGFyZ2V0KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWNhbkFjY2Vzc1dpbmRvdyhzdGF0ZSwg
Z2V0RE9NV2luZG93KHRhcmdldCkpKSB7CisgICAgICAgIGlmIChyZXBvcnRFcnJvcikKKyAgICAg
ICAgICAgIHN0YXRlLT5pbW1lZGlhdGVseVJlcG9ydFVuc2FmZUFjY2Vzc1RvKHRhcmdldCk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBs
YXRlIDxjbGFzcyBCaW5kaW5nPgorYm9vbCBCaW5kaW5nU2VjdXJpdHk8QmluZGluZz46OmNoZWNr
Tm9kZVNlY3VyaXR5KFN0YXRlPEJpbmRpbmc+KiBzdGF0ZSwgTm9kZSogbm9kZSkKK3sKKyAgICBp
ZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEZyYW1lKiB0YXJnZXQgPSBn
ZXRGcmFtZShub2RlKTsKKworICAgIGlmICghdGFyZ2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gY2FuQWNjZXNzRnJhbWUoc3RhdGUsIHRhcmdldCwgdHJ1ZSk7Cit9CisK
K30KKworI2VuZGlmIC8vIEJpbmRpbmdTZWN1cml0eV9oCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L0JpbmRpbmdTZWN1cml0eUJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
QmluZGluZ1NlY3VyaXR5QmFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdz
L0JpbmRpbmdTZWN1cml0eUJhc2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwOSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCaW5kaW5nU2VjdXJpdHlCYXNlLmgiCisK
KyNpbmNsdWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlNl
Y3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitET01XaW5kb3cqIEJpbmRpbmdTZWN1cml0eUJhc2U6OmdldERPTVdpbmRv
dyhGcmFtZSogZnJhbWUpCit7CisgICAgcmV0dXJuIGZyYW1lLT5kb21XaW5kb3coKTsKK30KKwor
RnJhbWUqIEJpbmRpbmdTZWN1cml0eUJhc2U6OmdldEZyYW1lKE5vZGUqIG5vZGUpCit7CisgICAg
cmV0dXJuIG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7Cit9CisKKy8vIFNhbWUgb3JpZ2luIHBv
bGljeSBpbXBsZW1lbnRhdGlvbjoKKy8vCisvLyBTYW1lIG9yaWdpbiBwb2xpY3kgcHJldmVudHMg
SlMgY29kZSBmcm9tIGRvbWFpbiBBIGZyb20gYWNjZXNzaW5nIEpTICYgRE9NCisvLyBvYmplY3Rz
IGluIGEgZGlmZmVyZW50IGRvbWFpbiBCLiBUaGVyZSBhcmUgZXhjZXB0aW9ucyBhbmQgc2V2ZXJh
bCBvYmplY3RzCisvLyBhcmUgYWNjZXNzaWJsZSBieSBjcm9zcy1kb21haW4gY29kZS4gRm9yIGV4
YW1wbGUsIHRoZSB3aW5kb3cuZnJhbWVzIG9iamVjdAorLy8gaXMgYWNjZXNzaWJsZSBieSBjb2Rl
IGZyb20gYSBkaWZmZXJlbnQgZG9tYWluLCBidXQgd2luZG93LmRvY3VtZW50IGlzIG5vdC4KKy8v
CisvLyBUaGUgSlMgYmluZGluZyBjb2RlIHNldHMgc2VjdXJpdHkgY2hlY2sgY2FsbGJhY2tzIG9u
IGEgZnVuY3Rpb24gdGVtcGxhdGUsCisvLyBhbmQgYWNjZXNzaW5nIGluc3RhbmNlcyBvZiB0aGUg
dGVtcGxhdGUgY2FsbHMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLgorLy8gVGhlIGNhbGxiYWNrIGZ1
bmN0aW9uIGVuZm9yY2VzIHRoZSBzYW1lIG9yaWdpbiBwb2xpY3kuCisvLworLy8gQ2FsbGJhY2sg
ZnVuY3Rpb25zIGFyZSBleHBlbnNpdmUuIEJpbmRpbmcgY29kZSBzaG91bGQgdXNlIGEgc2VjdXJp
dHkgdG9rZW4KKy8vIHN0cmluZyB0byBkbyBmYXN0IGFjY2VzcyBjaGVja3MgZm9yIHRoZSBjb21t
b24gY2FzZSB3aGVyZSBzb3VyY2UgYW5kIHRhcmdldAorLy8gYXJlIGluIHRoZSBzYW1lIGRvbWFp
bi4gQSBzZWN1cml0eSB0b2tlbiBpcyBhIHN0cmluZyBvYmplY3QgdGhhdCByZXByZXNlbnRzCisv
LyB0aGUgcHJvdG9jb2wvdXJsL3BvcnQgb2YgYSBkb21haW4uCisvLworLy8gVGhlcmUgYXJlIHNw
ZWNpYWwgY2FzZXMgd2hlcmUgc2VjdXJpdHkgdG9rZW4gbWF0Y2hpbmcgaXMgbm90IGVub3VnaC4K
Ky8vIEZvciBleGFtcGxlLCBKUyBjYW4gc2V0IGl0cyBkb21haW4gdG8gYSBzdXBlciBkb21haW4g
YnkgY2FsbGluZworLy8gZG9jdW1lbnQuc2V0RG9tYWluKC4uLikuIEluIHRoZXNlIGNhc2VzLCB0
aGUgYmluZGluZyBjb2RlIGNhbiByZXNldAorLy8gYSBjb250ZXh0J3Mgc2VjdXJpdHkgdG9rZW4g
dG8gaXRzIGdsb2JhbCBvYmplY3Qgc28gdGhhdCB0aGUgZmFzdCBhY2Nlc3MKKy8vIGNoZWNrIHdp
bGwgYWx3YXlzIGZhaWwuCisKKy8vIEhlbHBlciB0byBjaGVjayBpZiB0aGUgY3VycmVudCBleGVj
dXRpb24gY29udGV4dCBjYW4gYWNjZXNzIGEgdGFyZ2V0IGZyYW1lLgorLy8gRmlyc3QgaXQgY2hl
Y2tzIHNhbWUgZG9tYWluIHBvbGljeSB1c2luZyB0aGUgbGV4aWNhbCBjb250ZXh0LgorLy8KKy8v
IFRoaXMgaXMgZXF1aXZhbGVudCB0byBLSlM6OldpbmRvdzo6YWxsb3dzQWNjZXNzRnJvbShFeGVj
U3RhdGUqKS4KK2Jvb2wgQmluZGluZ1NlY3VyaXR5QmFzZTo6Y2FuQWNjZXNzKERPTVdpbmRvdyog
YWN0aXZlV2luZG93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE9NV2lu
ZG93KiB0YXJnZXRXaW5kb3cpCit7CisgICAgQVNTRVJUKHRhcmdldFdpbmRvdyk7CisKKyAgICBT
dHJpbmcgbWVzc2FnZTsKKworICAgIGlmIChhY3RpdmVXaW5kb3cgPT0gdGFyZ2V0V2luZG93KQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICghYWN0aXZlV2luZG93KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBTZWN1cml0eU9yaWdpbiogYWN0aXZlU2VjdXJpdHlP
cmlnaW4gPSBhY3RpdmVXaW5kb3ctPnNlY3VyaXR5T3JpZ2luKCk7CisgICAgY29uc3QgU2VjdXJp
dHlPcmlnaW4qIHRhcmdldFNlY3VyaXR5T3JpZ2luID0gdGFyZ2V0V2luZG93LT5zZWN1cml0eU9y
aWdpbigpOworCisgICAgLy8gV2UgaGF2ZSBzZWVuIGNyYXNoZXMgd2VyZSB0aGUgc2VjdXJpdHkg
b3JpZ2luIG9mIHRoZSB0YXJnZXQgaGFzIG5vdCBiZWVuCisgICAgLy8gaW5pdGlhbGl6ZWQuIERl
ZmVuZCBhZ2FpbnN0IHRoYXQuCisgICAgaWYgKCF0YXJnZXRTZWN1cml0eU9yaWdpbikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGFjdGl2ZVNlY3VyaXR5T3JpZ2luLT5jYW5BY2Nl
c3ModGFyZ2V0U2VjdXJpdHlPcmlnaW4pKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8v
IEFsbG93IGFjY2VzcyB0byBhICJhYm91dDpibGFuayIgcGFnZSBpZiB0aGUgZHluYW1pYyBjb250
ZXh0IGlzIGEKKyAgICAvLyBkZXRhY2hlZCBjb250ZXh0IG9mIHRoZSBzYW1lIGZyYW1lIGFzIHRo
ZSBibGFuayBwYWdlLgorICAgIGlmICh0YXJnZXRTZWN1cml0eU9yaWdpbi0+aXNFbXB0eSgpICYm
IGFjdGl2ZVdpbmRvdy0+ZnJhbWUoKSA9PSB0YXJnZXRXaW5kb3ctPmZyYW1lKCkpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit9ICAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9CaW5kaW5nU2VjdXJpdHlCYXNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9CaW5kaW5nU2VjdXJpdHlCYXNlLmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL0JpbmRpbmdTZWN1cml0eUJhc2UuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQmluZGluZ1NlY3VyaXR5QmFzZV9oCisj
ZGVmaW5lIEJpbmRpbmdTZWN1cml0eUJhc2VfaAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIERPTVdpbmRvdzsKK2NsYXNzIEZyYW1lOworY2xhc3MgTm9kZTsKKworLy8gSGVscGVyIGZ1
bmN0aW9ucyBmb3IgQmluZGluZ1NlY3VyaXR5IHRoYXQgZGVwZW5kIG9uIFdlYkNvcmUgY2xhc3Nl
cywgYW5kCisvLyB0aHVzIHNob3VsZCBub3QgYmUgaW1wbGVtZW50ZWQgaW4gQmluZGluZ1NlY3Vy
aXR5LmgsIHdoaWNoIGNvbnRhaW5zIHRlbXBsYXRlCisvLyBtZXRob2QgZGVmaW5pdGlvbnMuCitj
bGFzcyBCaW5kaW5nU2VjdXJpdHlCYXNlIHsKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgRE9NV2lu
ZG93KiBnZXRET01XaW5kb3coRnJhbWUqKTsKKyAgICBzdGF0aWMgRnJhbWUqIGdldEZyYW1lKE5v
ZGUqKTsKKyAgICBzdGF0aWMgYm9vbCBjYW5BY2Nlc3MoRE9NV2luZG93KiBhY3RpdmUsIERPTVdp
bmRvdyogdGFyZ2V0KTsKK307CisKK30KKworI2VuZGlmIC8vIEJpbmRpbmdTZWN1cml0eUJhc2Vf
aApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9HZW5lcmljQmluZGluZy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvR2VuZXJpY0JpbmRpbmcuaAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvYmluZGluZ3MvR2VuZXJpY0JpbmRpbmcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgR2VuZXJpY0JpbmRpbmdfaAorI2RlZmluZSBHZW5lcmljQmluZGluZ19oCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVXNlZCB0byBpbnN0YW50aWF0ZSBiaW5kaW5nIHRl
bXBsYXRlcyBmb3IgYW55IG1ldGhvZHMgc2hhcmVkIGFtb25nIGFsbAorLy8gbGFuZ3VhZ2UgYmlu
ZGluZ3MuCitjbGFzcyBHZW5lcmljQmluZGluZyB7fTsKKworLy8gQ2xhc3MgdG8gcmVwcmVzZW50
IGV4ZWN1dGlvbiBzdGF0ZSBmb3IgZWFjaCBsYW5ndWFnZSBiaW5kaW5nLgordGVtcGxhdGUgPGNs
YXNzIFQ+CitjbGFzcyBTdGF0ZSB7fTsKKworLy8gQ29tbW9uIG5vdGlvbiBvZiBleGVjdXRpb24g
c3RhdGUgZm9yIGxhbmd1YWdlIGJpbmRpbmdzLgordGVtcGxhdGUgPD4KK2NsYXNzIFN0YXRlPEdl
bmVyaWNCaW5kaW5nPiB7CisgICAgLy8gQW55IG1ldGhvZHMgc2hhcmVkIGFjcm9zcyBiaW5kaW5n
cyBjYW4gZ28gaGVyZS4KK307CisKK30KKworI2VuZGlmIC8vIEdlbmVyaWNCaW5kaW5nX2gKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNp
b24gNTE5NzIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBt
CSh3b3JraW5nIGNvcHkpCkBAIC00MDEsNyArNDAxLDcgQEAgRU5ECiAgICAgSG9sZGVyVG9OYXRp
dmUoJGRhdGFOb2RlLCAkaW1wbENsYXNzTmFtZSwgJGNsYXNzSW5kZXgpOwogCiAgICAgcHVzaChA
aW1wbENvbnRlbnREZWNscywgPDxFTkQpOwotICAgIGlmICghVjhQcm94eTo6Y2FuQWNjZXNzRnJh
bWUoaW1wLT5mcmFtZSgpLCBmYWxzZSkpIHsKKyAgICBpZiAoIVY4QmluZGluZ1NlY3VyaXR5Ojpj
YW5BY2Nlc3NGcmFtZShWOEJpbmRpbmdTdGF0ZTo6T25seSgpLCBpbXAtPmZyYW1lKCksIGZhbHNl
KSkgewogICAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBz
aGFyZWRfdGVtcGxhdGUgPQogICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1w
bGF0ZT46Ok5ldygkbmV3VGVtcGxhdGVTdHJpbmcpOwogICAgICAgcmV0dXJuIHNoYXJlZF90ZW1w
bGF0ZS0+R2V0RnVuY3Rpb24oKTsKQEAgLTU0OCw5ICs1NDgsOSBAQCBFTkQKIAogICAgICMgR2Vu
ZXJhdGUgc2VjdXJpdHkgY2hlY2tzIGlmIG5lY2Vzc2FyeQogICAgIGlmICgkYXR0cmlidXRlLT5z
aWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDaGVja05vZGVTZWN1cml0eSJ9KSB7Ci0g
ICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgaWYgKCFWOFByb3h5OjpjaGVja05v
ZGVTZWN1cml0eShpbXAtPiRhdHRyTmFtZSgpKSkgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVl
PigpO1xuXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBpZiAoIVY4
QmluZGluZ1NlY3VyaXR5OjpjaGVja05vZGVTZWN1cml0eShWOEJpbmRpbmdTdGF0ZTo6T25seSgp
LCBpbXAtPiRhdHRyTmFtZSgpKSkgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpO1xuXG4i
KTsKICAgICB9IGVsc2lmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJDaGVja0ZyYW1lU2VjdXJpdHkifSkgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudERl
Y2xzLCAiICAgIGlmICghVjhQcm94eTo6Y2hlY2tOb2RlU2VjdXJpdHkoaW1wLT5jb250ZW50RG9j
dW1lbnQoKSkpIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTtcblxuIik7CisgICAgICAg
IHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgaWYgKCFWOEJpbmRpbmdTZWN1cml0eTo6Y2hl
Y2tOb2RlU2VjdXJpdHkoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgaW1wLT5jb250ZW50RG9jdW1l
bnQoKSkpIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTtcblxuIik7CiAgICAgfQogCiAg
ICAgbXkgJHVzZUV4Y2VwdGlvbnMgPSAxIGlmIEB7JGF0dHJpYnV0ZS0+Z2V0dGVyRXhjZXB0aW9u
c30gYW5kICEoJGlzUG9kVHlwZSk7CkBAIC04OTgsNyArODk4LDcgQEAgRU5ECiAgICAgICAgJiYg
ISRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRG9Ob3RDaGVja0Rv
bWFpblNlY3VyaXR5In0pIHsKICAgICAjIFdlIGhhdmUgbm90IGZpbmQgcmVhbCB1c2UgY2FzZXMg
eWV0LgogICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsCi0iICAgIGlmICghVjhQcm94eTo6Y2Fu
QWNjZXNzRnJhbWUoaW1wLT5mcmFtZSgpLCB0cnVlKSkge1xuIi4KKyIgICAgaWYgKCFWOEJpbmRp
bmdTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgaW1wLT5m
cmFtZSgpLCB0cnVlKSkge1xuIi4KICIgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+
KCk7XG4iIC4KICIgICAgfVxuIik7CiAgICAgfQpAQCAtOTMwLDcgKzkzMCw3IEBAIEVORAogICAg
IH0KICAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJT
VkdDaGVja1NlY3VyaXR5RG9jdW1lbnQifSkgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERl
Y2xzLAotIiAgICBpZiAoIVY4UHJveHk6OmNoZWNrTm9kZVNlY3VyaXR5KGltcC0+Z2V0U1ZHRG9j
dW1lbnQoZWMpKSlcbiIgLgorIiAgICBpZiAoIVY4QmluZGluZ1NlY3VyaXR5OjpjaGVja05vZGVT
ZWN1cml0eShWOEJpbmRpbmdTdGF0ZTo6T25seSgpLCBpbXAtPmdldFNWR0RvY3VtZW50KGVjKSkp
XG4iIC4KICIgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7XG4iKTsKICAgICB9
CiAKQEAgLTExNDUsNyArMTE0NSw4IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAg
cHVzaChAaW1wbEZpeGVkSGVhZGVyLAogICAgICAgICAgIiNpbmNsdWRlIFwiY29uZmlnLmhcIlxu
IiAuCiAgICAgICAgICAiI2luY2x1ZGUgXCJWOFByb3h5LmhcIlxuIiAuCi0gICAgICAgICAiI2lu
Y2x1ZGUgXCJWOEJpbmRpbmcuaFwiXG5cbiIgLgorICAgICAgICAgIiNpbmNsdWRlIFwiVjhCaW5k
aW5nLmhcIlxuIiAuCisgICAgICAgICAiI2luY2x1ZGUgXCJWOEJpbmRpbmdTdGF0ZS5oXCJcblxu
IiAuCiAgICAgICAgICAiI3VuZGVmIExPR1xuXG4iKTsKIAogICAgIHB1c2goQGltcGxGaXhlZEhl
YWRlciwgIlxuI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIpIGlmICRjb25kaXRpb25hbFN0
cmluZzsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAkocmV2
aXNpb24gNTE5NzIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSAiU2NyaXB0U3RhdGUu
aCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1
ZGUgIlY4QmluZGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiVjhOUE9iamVjdC5oIgogI2luY2x1ZGUg
IlY4UHJveHkuaCIKICNpbmNsdWRlICJXaWRnZXQuaCIKQEAgLTg0LDcgKzg1LDcgQEAgRnJhbWUq
IFNjcmlwdENvbnRyb2xsZXI6OnJldHJpZXZlRnJhbWVGbwogCiBib29sIFNjcmlwdENvbnRyb2xs
ZXI6OmlzU2FmZVNjcmlwdChGcmFtZSogdGFyZ2V0KQogewotICAgIHJldHVybiBWOFByb3h5Ojpj
YW5BY2Nlc3NGcmFtZSh0YXJnZXQsIHRydWUpOworICAgIHJldHVybiBWOEJpbmRpbmdTZWN1cml0
eTo6Y2FuQWNjZXNzRnJhbWUoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgdGFyZ2V0LCB0cnVlKTsK
IH0KIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpnY1Byb3RlY3RKU1dyYXBwZXIodm9pZCogZG9t
T2JqZWN0KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCShyZXZpc2lvbiA1MTk3MikKKysr
IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYg
KzMyLDcgQEAKICNkZWZpbmUgVjhCaW5kaW5nX2gKIAogI2luY2x1ZGUgIkF0b21pY1N0cmluZy5o
IgorI2luY2x1ZGUgIkJpbmRpbmdTZWN1cml0eS5oIgogI2luY2x1ZGUgIk1hdGhFeHRyYXMuaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgpA
QCAtNDMsNiArNDQsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogICAgIGNsYXNzIEV2
ZW50TGlzdGVuZXI7CiAgICAgY2xhc3MgRXZlbnRUYXJnZXQ7CisKKyAgICAvLyBJbnN0YW50aWF0
ZSBiaW5kaW5nIHRlbXBsYXRlIGNsYXNzZXMgZm9yIFY4LgorICAgIGNsYXNzIFY4QmluZGluZyB7
fTsKKyAgICB0eXBlZGVmIEJpbmRpbmdTZWN1cml0eTxWOEJpbmRpbmc+IFY4QmluZGluZ1NlY3Vy
aXR5OwogICAgIAogICAgIC8vIEEgaGVscGVyIGZ1bmN0aW9uIGV4dHJhY3QgbmF0aXZlIG9iamVj
dCBwb2ludGVyIGZyb20gYSBET00gd3JhcHBlcgogICAgIC8vIGFuZCBjYXN0IHRvIHRoZSBzcGVj
aWZpZWQgdHlwZS4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nU3RhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nU3RhdGUuY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmdTdGF0ZS5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiVjhCaW5kaW5nU3RhdGUuaCIKKworI2luY2x1ZGUgIlY4UHJveHkuaCIKKyNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU3RhdGU8VjhCaW5k
aW5nPiogU3RhdGU8VjhCaW5kaW5nPjo6T25seSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChTdGF0ZSwgZ2xvYmFsVjhCaW5kaW5nU3RhdGUsICgpKTsKKyAgICByZXR1cm4gJmdsb2JhbFY4
QmluZGluZ1N0YXRlOworfQorCitET01XaW5kb3cqIFN0YXRlPFY4QmluZGluZz46OmdldEFjdGl2
ZVdpbmRvdygpCit7CisgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBhY3RpdmVDb250ZXh0ID0g
djg6OkNvbnRleHQ6OkdldENhbGxpbmcoKTsKKyAgICBpZiAoYWN0aXZlQ29udGV4dC5Jc0VtcHR5
KCkpIHsKKyAgICAgICAgLy8gVGhlcmUgaXMgYSBzaW5nbGUgYWN0aXZhdGlvbiByZWNvcmQgb24g
dGhlIHN0YWNrLCBzbyB0aGF0IG11c3QKKyAgICAgICAgLy8gYmUgdGhlIGFjdGl2ZUNvbnRleHQu
CisgICAgICAgIGFjdGl2ZUNvbnRleHQgPSB2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpOworICAg
IH0KKyAgICByZXR1cm4gVjhQcm94eTo6cmV0cmlldmVXaW5kb3coYWN0aXZlQ29udGV4dCk7Cit9
CisKK3ZvaWQgU3RhdGU8VjhCaW5kaW5nPjo6aW1tZWRpYXRlbHlSZXBvcnRVbnNhZmVBY2Nlc3NU
byhGcmFtZSogdGFyZ2V0KQoreworICAgIFY4UHJveHk6OnJlcG9ydFVuc2FmZUFjY2Vzc1RvKHRh
cmdldCwgVjhQcm94eTo6UmVwb3J0Tm93KTsKK30KKworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nU3RhdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZ1N0YXRlLmgJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZ1N0YXRlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
IAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFY4QmluZGluZ1N0YXRlX2gKKyNkZWZpbmUgVjhCaW5kaW5nU3Rh
dGVfaAorCisjaW5jbHVkZSAiR2VuZXJpY0JpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmcu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBTaW5nbGV0b24gaW1wbGVtZW50YXRpb24g
b2YgU3RhdGU8VjhCaW5kaW5nPi4gIFVzZXMgVjgncyBnbG9iYWwgZGF0YQorLy8gc3RydWN0dXJl
cyB0byByZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgcmVsZXZhbnQgZXhlY3V0aW9uIHN0YXRlLgor
dGVtcGxhdGUgPD4KK2NsYXNzIFN0YXRlPFY4QmluZGluZz4gOiBwdWJsaWMgU3RhdGU8R2VuZXJp
Y0JpbmRpbmc+IHsKK3B1YmxpYzoKKyAgICAvLyBTaW5nbGV0b24KKyAgICBzdGF0aWMgU3RhdGUq
IE9ubHkoKTsKKworICAgIC8vIFRoZSBET01XaW5kb3cgY29ycmVzcG9uZGluZyB0byB0aGUgJ2Nh
bGxpbmcgY29udGV4dCcgb2YgZXhlY3V0aW9uLgorICAgIERPTVdpbmRvdyogZ2V0QWN0aXZlV2lu
ZG93KCk7CisKKyAgICAvLyBSZXBvcnRzIGFuIGVycm9yIG1lc3NhZ2UgKHdpdGhvdXQgZGVsYXkp
IGlmIHRoZSBzZWN1cml0eSBjaGVjayBmYWlscy4KKyAgICBzdGF0aWMgdm9pZCBpbW1lZGlhdGVs
eVJlcG9ydFVuc2FmZUFjY2Vzc1RvKEZyYW1lKik7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQg
U3RhdGUoKSB7fQorICAgIH5TdGF0ZSgpOworfTsKKwordHlwZWRlZiBTdGF0ZTxWOEJpbmRpbmc+
IFY4QmluZGluZ1N0YXRlOworCit9CisKKyNlbmRpZiAvLyBWOEJpbmRpbmdTdGF0ZV9oCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvdjgvVjhQcm94eS5jcHAJKHJldmlzaW9uIDUxOTcyKQorKysgV2ViQ29yZS9iaW5k
aW5ncy92OC9WOFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQAogI2lu
Y2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlLmgi
CiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKICNp
bmNsdWRlICJWOENvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJWOENvbnNvbGVNZXNzYWdlLmgiCiAj
aW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCkBAIC0xNjMsNyArMTY0LDcgQEAgZW51bSBEZWxh
eVJlcG9ydGluZyB7CiAgICAgUmVwb3J0Tm93CiB9OwogCi1zdGF0aWMgdm9pZCByZXBvcnRVbnNh
ZmVBY2Nlc3NUbyhGcmFtZSogdGFyZ2V0LCBEZWxheVJlcG9ydGluZyBkZWxheSkKK3ZvaWQgVjhQ
cm94eTo6cmVwb3J0VW5zYWZlQWNjZXNzVG8oRnJhbWUqIHRhcmdldCwgRGVsYXlSZXBvcnRpbmcg
ZGVsYXkpCiB7CiAgICAgQVNTRVJUKHRhcmdldCk7CiAgICAgRG9jdW1lbnQqIHRhcmdldERvY3Vt
ZW50ID0gdGFyZ2V0LT5kb2N1bWVudCgpOwpAQCAtMjA3LDcgKzIwOCw3IEBAIHN0YXRpYyB2b2lk
IHJlcG9ydFVuc2FmZUphdmFTY3JpcHRBY2Nlc3MKIHsKICAgICBGcmFtZSogdGFyZ2V0ID0gVjhD
dXN0b206OkdldFRhcmdldEZyYW1lKGhvc3QsIGRhdGEpOwogICAgIGlmICh0YXJnZXQpCi0gICAg
ICAgIHJlcG9ydFVuc2FmZUFjY2Vzc1RvKHRhcmdldCwgUmVwb3J0TGF0ZXIpOworICAgICAgICBW
OFByb3h5OjpyZXBvcnRVbnNhZmVBY2Nlc3NUbyh0YXJnZXQsIFY4UHJveHk6OlJlcG9ydExhdGVy
KTsKIH0KIAogc3RhdGljIHZvaWQgaGFuZGxlRmF0YWxFcnJvckluVjgoKQpAQCAtODU3LDk3ICs4
NTgsNiBAQCB2b2lkIFY4UHJveHk6OnVwZGF0ZVNlY3VyaXR5T3JpZ2luKCkKICAgICBzZXRTZWN1
cml0eVRva2VuKCk7CiB9CiAKLS8vIFNhbWUgb3JpZ2luIHBvbGljeSBpbXBsZW1lbnRhdGlvbjoK
LS8vCi0vLyBTYW1lIG9yaWdpbiBwb2xpY3kgcHJldmVudHMgSlMgY29kZSBmcm9tIGRvbWFpbiBB
IGFjY2VzcyBKUyAmIERPTSBvYmplY3RzCi0vLyBpbiBhIGRpZmZlcmVudCBkb21haW4gQi4gVGhl
cmUgYXJlIGV4Y2VwdGlvbnMgYW5kIHNldmVyYWwgb2JqZWN0cyBhcmUKLS8vIGFjY2Vzc2libGUg
YnkgY3Jvc3MtZG9tYWluIGNvZGUuIEZvciBleGFtcGxlLCB0aGUgd2luZG93LmZyYW1lcyBvYmpl
Y3QgaXMKLS8vIGFjY2Vzc2libGUgYnkgY29kZSBmcm9tIGEgZGlmZmVyZW50IGRvbWFpbiwgYnV0
IHdpbmRvdy5kb2N1bWVudCBpcyBub3QuCi0vLwotLy8gVGhlIGJpbmRpbmcgY29kZSBzZXRzIHNl
Y3VyaXR5IGNoZWNrIGNhbGxiYWNrcyBvbiBhIGZ1bmN0aW9uIHRlbXBsYXRlLAotLy8gYW5kIGFj
Y2Vzc2luZyBpbnN0YW5jZXMgb2YgdGhlIHRlbXBsYXRlIGNhbGxzIHRoZSBjYWxsYmFjayBmdW5j
dGlvbi4KLS8vIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBjaGVja3Mgc2FtZSBvcmlnaW4gcG9saWN5
LgotLy8KLS8vIENhbGxiYWNrIGZ1bmN0aW9ucyBhcmUgZXhwZW5zaXZlLiBWOCB1c2VzIGEgc2Vj
dXJpdHkgdG9rZW4gc3RyaW5nIHRvIGRvCi0vLyBmYXN0IGFjY2VzcyBjaGVja3MgZm9yIHRoZSBj
b21tb24gY2FzZSB3aGVyZSBzb3VyY2UgYW5kIHRhcmdldCBhcmUgaW4gdGhlCi0vLyBzYW1lIGRv
bWFpbi4gQSBzZWN1cml0eSB0b2tlbiBpcyBhIHN0cmluZyBvYmplY3QgdGhhdCByZXByZXNlbnRz
Ci0vLyB0aGUgcHJvdG9jb2wvdXJsL3BvcnQgb2YgYSBkb21haW4uCi0vLwotLy8gVGhlcmUgYXJl
IHNwZWNpYWwgY2FzZXMgd2hlcmUgYSBzZWN1cml0eSB0b2tlbiBtYXRjaGluZyBpcyBub3QgZW5v
dWdoLgotLy8gRm9yIGV4YW1wbGUsIEphdmFTY3JpcHQgY2FuIHNldCBpdHMgZG9tYWluIHRvIGEg
c3VwZXIgZG9tYWluIGJ5IGNhbGxpbmcKLS8vIGRvY3VtZW50LnNldERvbWFpbiguLi4pLiBJbiB0
aGVzZSBjYXNlcywgdGhlIGJpbmRpbmcgY29kZSBjYW4gcmVzZXQKLS8vIGEgY29udGV4dCdzIHNl
Y3VyaXR5IHRva2VuIHRvIGl0cyBnbG9iYWwgb2JqZWN0IHNvIHRoYXQgdGhlIGZhc3QgYWNjZXNz
Ci0vLyBjaGVjayB3aWxsIGFsd2F5cyBmYWlsLgotCi0vLyBDaGVjayBpZiB0aGUgY3VycmVudCBl
eGVjdXRpb24gY29udGV4dCBjYW4gYWNjZXNzIGEgdGFyZ2V0IGZyYW1lLgotLy8gRmlyc3QgaXQg
Y2hlY2tzIHNhbWUgZG9tYWluIHBvbGljeSB1c2luZyB0aGUgbGV4aWNhbCBjb250ZXh0Ci0vLwot
Ly8gVGhpcyBpcyBlcXVpdmFsZW50IHRvIEtKUzo6V2luZG93OjphbGxvd3NBY2Nlc3NGcm9tKEV4
ZWNTdGF0ZSosIFN0cmluZyYpLgotYm9vbCBWOFByb3h5OjpjYW5BY2Nlc3NQcml2YXRlKERPTVdp
bmRvdyogdGFyZ2V0V2luZG93KQotewotICAgIEFTU0VSVCh0YXJnZXRXaW5kb3cpOwotCi0gICAg
U3RyaW5nIG1lc3NhZ2U7Ci0KLSAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGFjdGl2ZUNvbnRl
eHQgPSB2ODo6Q29udGV4dDo6R2V0Q2FsbGluZygpOwotICAgIGlmIChhY3RpdmVDb250ZXh0Lklz
RW1wdHkoKSkgewotICAgICAgICAvLyBUaGVyZSBpcyBhIHNpbmdsZSBhY3RpdmF0aW9uIHJlY29y
ZCBvbiB0aGUgc3RhY2ssIHNvIHRoYXQgbXVzdAotICAgICAgICAvLyBiZSB0aGUgYWN0aXZlQ29u
dGV4dC4KLSAgICAgICAgYWN0aXZlQ29udGV4dCA9IHY4OjpDb250ZXh0OjpHZXRDdXJyZW50KCk7
Ci0gICAgfQotICAgIERPTVdpbmRvdyogYWN0aXZlV2luZG93ID0gcmV0cmlldmVXaW5kb3coYWN0
aXZlQ29udGV4dCk7Ci0gICAgaWYgKGFjdGl2ZVdpbmRvdyA9PSB0YXJnZXRXaW5kb3cpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKCFhY3RpdmVXaW5kb3cpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGNvbnN0IFNlY3VyaXR5T3JpZ2luKiBhY3RpdmVTZWN1cml0eU9yaWdp
biA9IGFjdGl2ZVdpbmRvdy0+c2VjdXJpdHlPcmlnaW4oKTsKLSAgICBjb25zdCBTZWN1cml0eU9y
aWdpbiogdGFyZ2V0U2VjdXJpdHlPcmlnaW4gPSB0YXJnZXRXaW5kb3ctPnNlY3VyaXR5T3JpZ2lu
KCk7Ci0KLSAgICAvLyBXZSBoYXZlIHNlZW4gY3Jhc2hlcyB3ZXJlIHRoZSBzZWN1cml0eSBvcmln
aW4gb2YgdGhlIHRhcmdldCBoYXMgbm90IGJlZW4KLSAgICAvLyBpbml0aWFsaXplZC4gRGVmZW5k
IGFnYWluc3QgdGhhdC4KLSAgICBpZiAoIXRhcmdldFNlY3VyaXR5T3JpZ2luKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYWN0aXZlU2VjdXJpdHlPcmlnaW4tPmNhbkFjY2Vzcyh0
YXJnZXRTZWN1cml0eU9yaWdpbikpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gQWxs
b3cgYWNjZXNzIHRvIGEgImFib3V0OmJsYW5rIiBwYWdlIGlmIHRoZSBkeW5hbWljIGNvbnRleHQg
aXMgYQotICAgIC8vIGRldGFjaGVkIGNvbnRleHQgb2YgdGhlIHNhbWUgZnJhbWUgYXMgdGhlIGJs
YW5rIHBhZ2UuCi0gICAgaWYgKHRhcmdldFNlY3VyaXR5T3JpZ2luLT5pc0VtcHR5KCkgJiYgYWN0
aXZlV2luZG93LT5mcmFtZSgpID09IHRhcmdldFdpbmRvdy0+ZnJhbWUoKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVjhQcm94eTo6Y2FuQWNj
ZXNzRnJhbWUoRnJhbWUqIHRhcmdldCwgYm9vbCByZXBvcnRFcnJvcikKLXsKLSAgICAvLyBUaGUg
c3ViamVjdCBpcyBkZXRhY2hlZCBmcm9tIGEgZnJhbWUsIGRlbnkgYWNjZXNzZXMuCi0gICAgaWYg
KCF0YXJnZXQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghY2FuQWNjZXNzUHJp
dmF0ZSh0YXJnZXQtPmRvbVdpbmRvdygpKSkgewotICAgICAgICBpZiAocmVwb3J0RXJyb3IpCi0g
ICAgICAgICAgICByZXBvcnRVbnNhZmVBY2Nlc3NUbyh0YXJnZXQsIFJlcG9ydE5vdyk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVjhQ
cm94eTo6Y2hlY2tOb2RlU2VjdXJpdHkoTm9kZSogbm9kZSkKLXsKLSAgICBpZiAoIW5vZGUpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEZyYW1lKiB0YXJnZXQgPSBub2RlLT5kb2N1bWVu
dCgpLT5mcmFtZSgpOwotCi0gICAgaWYgKCF0YXJnZXQpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHJldHVybiBjYW5BY2Nlc3NGcmFtZSh0YXJnZXQsIHRydWUpOwotfQotCiB2ODo6UGVy
c2lzdGVudDx2ODo6Q29udGV4dD4gVjhQcm94eTo6Y3JlYXRlTmV3Q29udGV4dCh2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGdsb2JhbCwgaW50IGV4dGVuc2lvbkdyb3VwKQogewogICAgIHY4OjpQZXJz
aXN0ZW50PHY4OjpDb250ZXh0PiByZXN1bHQ7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
UHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAkocmV2
aXNpb24gNTE5NzIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAkod29ya2luZyBj
b3B5KQpAQCAtMTM5LDYgKzEzOSwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAg
ICBHZW5lcmFsRXJyb3IKICAgICAgICAgfTsKIAorICAgICAgICAvLyBXaGVuIHRvIHJlcG9ydCBl
cnJvcnMuCisgICAgICAgIGVudW0gRGVsYXlSZXBvcnRpbmcgeworICAgICAgICAgICAgUmVwb3J0
TGF0ZXIsCisgICAgICAgICAgICBSZXBvcnROb3cKKyAgICAgICAgfTsKKwogICAgICAgICBleHBs
aWNpdCBWOFByb3h5KEZyYW1lKik7CiAKICAgICAgICAgflY4UHJveHkoKTsKQEAgLTMwMSwxMyAr
MzA3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBpcyBkaXNhYmxlZCBhbmQg
aXQgcmV0dXJucyB0cnVlLgogICAgICAgICBzdGF0aWMgYm9vbCBoYW5kbGVPdXRPZk1lbW9yeSgp
OwogCi0gICAgICAgIC8vIENoZWNrIGlmIHRoZSBhY3RpdmUgZXhlY3V0aW9uIGNvbnRleHQgY2Fu
IGFjY2VzcyB0aGUgdGFyZ2V0IGZyYW1lLgotICAgICAgICBzdGF0aWMgYm9vbCBjYW5BY2Nlc3NG
cmFtZShGcmFtZSosIGJvb2wgcmVwb3J0RXJyb3IpOwotCi0gICAgICAgIC8vIENoZWNrIGlmIGl0
IGlzIHNhZmUgdG8gYWNjZXNzIHRoZSBnaXZlbiBub2RlIGZyb20gdGhlCi0gICAgICAgIC8vIGN1
cnJlbnQgc2VjdXJpdHkgY29udGV4dC4KLSAgICAgICAgc3RhdGljIGJvb2wgY2hlY2tOb2RlU2Vj
dXJpdHkoTm9kZSopOwotCiAgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY2hl
Y2tOZXdMZWdhbChjb25zdCB2ODo6QXJndW1lbnRzJik7CiAKICAgICAgICAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlNjcmlwdD4gY29tcGlsZVNjcmlwdCh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGNv
ZGUsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGludCBiYXNlTGluZSk7CkBAIC0zNjUsNiArMzY0
LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgaW5pdENvbnRleHRJZk5l
ZWRlZCgpOwogICAgICAgICB2b2lkIHVwZGF0ZURvY3VtZW50V3JhcHBlcih2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gd3JhcHBlcik7CisgICAgICAgIAorICAgICAgICAvLyBSZXBvcnQgYW4gdW5zYWZl
IGF0dGVtcHQgdG8gYWNjZXNzIHRoZSBnaXZlbiBmcmFtZSBvbiB0aGUgY29uc29sZS4KKyAgICAg
ICAgc3RhdGljIHZvaWQgcmVwb3J0VW5zYWZlQWNjZXNzVG8oRnJhbWUqIHRhcmdldCwgRGVsYXlS
ZXBvcnRpbmcgZGVsYXkpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBzZXRTZWN1cml0
eVRva2VuKCk7CkBAIC0zODksOCArMzkxLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICAvLyBSZXR1cm5zIGZhbHNlIHdoZW4gd2UncmUgb3V0IG9mIG1lbW9yeSBpbiBWOC4KICAgICAg
ICAgYm9vbCBzZXRJbmplY3RlZFNjcmlwdENvbnRleHREZWJ1Z0lkKHY4OjpIYW5kbGU8djg6OkNv
bnRleHQ+IHRhcmdldENvbnRleHQpOwogCi0gICAgICAgIHN0YXRpYyBib29sIGNhbkFjY2Vzc1By
aXZhdGUoRE9NV2luZG93Kik7Ci0KICAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHJhbmdlRXhj
ZXB0aW9uTmFtZShpbnQgZXhjZXB0aW9uQ29kZSk7CiAgICAgICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBldmVudEV4Y2VwdGlvbk5hbWUoaW50IGV4Y2VwdGlvbkNvZGUpOwogICAgICAgICBzdGF0aWMg
Y29uc3QgY2hhciogeG1sSHR0cFJlcXVlc3RFeGNlcHRpb25OYW1lKGludCBleGNlcHRpb25Db2Rl
KTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5n
LmNwcAkocmV2aXNpb24gNTE5NzIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1
c3RvbUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw4IEBACiAjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lRWxlbWVudEJhc2UuaCIKICNpbmNs
dWRlICJMb2NhdGlvbi5oIgorI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4Qmlu
ZGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgogCiAjaWYgRU5BQkxFKFNWRykKQEAg
LTUxLDcgKzUzLDcgQEAgYm9vbCBhbGxvd1NldHRpbmdGcmFtZVNyY1RvSmF2YXNjcmlwdFVybAog
ewogICAgIGlmIChwcm90b2NvbElzKGRlcHJlY2F0ZWRQYXJzZVVSTCh2YWx1ZSksICJqYXZhc2Ny
aXB0IikpIHsKICAgICAgICAgTm9kZSogY29udGVudERvYyA9IGZyYW1lLT5jb250ZW50RG9jdW1l
bnQoKTsKLSAgICAgICAgaWYgKGNvbnRlbnREb2MgJiYgIVY4UHJveHk6OmNoZWNrTm9kZVNlY3Vy
aXR5KGNvbnRlbnREb2MpKQorICAgICAgICBpZiAoY29udGVudERvYyAmJiAhVjhCaW5kaW5nU2Vj
dXJpdHk6OmNoZWNrTm9kZVNlY3VyaXR5KFY4QmluZGluZ1N0YXRlOjpPbmx5KCksIGNvbnRlbnRE
b2MpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTk3LDcgKzk5LDcgQEAgSU5ERVhFRF9BQ0NFU1NfQ0hFQ0soSGlzdG9yeSkKICAgICBBU1NF
UlQoVjhDbGFzc0luZGV4OjpGcm9tSW50KGRhdGEtPkludDMyVmFsdWUoKSkgPT0gVjhDbGFzc0lu
ZGV4OjpISVNUT1JZKTsKICAgICAvLyBPbmx5IGFsbG93IHNhbWUgb3JpZ2luIGFjY2Vzcy4KICAg
ICBIaXN0b3J5KiBoaXN0b3J5ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8
SGlzdG9yeT4oVjhDbGFzc0luZGV4OjpISVNUT1JZLCBob3N0KTsKLSAgICByZXR1cm4gVjhQcm94
eTo6Y2FuQWNjZXNzRnJhbWUoaGlzdG9yeS0+ZnJhbWUoKSwgZmFsc2UpOworICAgIHJldHVybiBW
OEJpbmRpbmdTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwg
aGlzdG9yeS0+ZnJhbWUoKSwgZmFsc2UpOwogfQogCiBOQU1FRF9BQ0NFU1NfQ0hFQ0soSGlzdG9y
eSkKQEAgLTEwNSw3ICsxMDcsNyBAQCBOQU1FRF9BQ0NFU1NfQ0hFQ0soSGlzdG9yeSkKICAgICBB
U1NFUlQoVjhDbGFzc0luZGV4OjpGcm9tSW50KGRhdGEtPkludDMyVmFsdWUoKSkgPT0gVjhDbGFz
c0luZGV4OjpISVNUT1JZKTsKICAgICAvLyBPbmx5IGFsbG93IHNhbWUgb3JpZ2luIGFjY2Vzcy4K
ICAgICBIaXN0b3J5KiBoaXN0b3J5ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmpl
Y3Q8SGlzdG9yeT4oVjhDbGFzc0luZGV4OjpISVNUT1JZLCBob3N0KTsKLSAgICByZXR1cm4gVjhQ
cm94eTo6Y2FuQWNjZXNzRnJhbWUoaGlzdG9yeS0+ZnJhbWUoKSwgZmFsc2UpOworICAgIHJldHVy
biBWOEJpbmRpbmdTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhCaW5kaW5nU3RhdGU6Ok9ubHko
KSwgaGlzdG9yeS0+ZnJhbWUoKSwgZmFsc2UpOwogfQogCiAjdW5kZWYgSU5ERVhFRF9BQ0NFU1Nf
Q0hFQ0sKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRv
d0N1c3RvbS5jcHAJKHJldmlzaW9uIDUxOTcyKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNs
dWRlICJWOEJpbmRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgogI2lu
Y2x1ZGUgIlY4Q3VzdG9tRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlY4TWVzc2FnZVBvcnRD
dXN0b20uaCIKQEAgLTEwMSw3ICsxMDIsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhDdXN0
b206OldpbmRvd1NlCiAKICAgICBET01XaW5kb3cqIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVy
dFRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGFyZ3Mu
SG9sZGVyKCkpOwogCi0gICAgaWYgKCFWOFByb3h5OjpjYW5BY2Nlc3NGcmFtZShpbXAtPmZyYW1l
KCksIHRydWUpKQorICAgIGlmICghVjhCaW5kaW5nU2VjdXJpdHk6OmNhbkFjY2Vzc0ZyYW1lKFY4
QmluZGluZ1N0YXRlOjpPbmx5KCksIGltcC0+ZnJhbWUoKSwgdHJ1ZSkpCiAgICAgICAgIHJldHVy
biB2ODo6VW5kZWZpbmVkKCk7CiAKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRD
b250ZXh0ID0gc3RhdGljX2Nhc3Q8U2NyaXB0RXhlY3V0aW9uQ29udGV4dCo+KGltcC0+ZG9jdW1l
bnQoKSk7CkBAIC0xNzEsNyArMTcyLDcgQEAgQUNDRVNTT1JfR0VUVEVSKERPTVdpbmRvd0V2ZW50
KQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCiAgICAgRnJhbWUqIGZyYW1lID0g
VjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5k
ZXg6OkRPTVdJTkRPVywgaG9sZGVyKS0+ZnJhbWUoKTsKLSAgICBpZiAoIVY4UHJveHk6OmNhbkFj
Y2Vzc0ZyYW1lKGZyYW1lLCB0cnVlKSkKKyAgICBpZiAoIVY4QmluZGluZ1NlY3VyaXR5OjpjYW5B
Y2Nlc3NGcmFtZShWOEJpbmRpbmdTdGF0ZTo6T25seSgpLCBmcmFtZSwgdHJ1ZSkpCiAgICAgICAg
IHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNv
bnRleHQgPSBWOFByb3h5Ojpjb250ZXh0KGZyYW1lKTsKQEAgLTE5Miw3ICsxOTMsNyBAQCBBQ0NF
U1NPUl9TRVRURVIoRE9NV2luZG93RXZlbnQpCiAgICAgICAgIHJldHVybjsKIAogICAgIEZyYW1l
KiBmcmFtZSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4o
VjhDbGFzc0luZGV4OjpET01XSU5ET1csIGhvbGRlciktPmZyYW1lKCk7Ci0gICAgaWYgKCFWOFBy
b3h5OjpjYW5BY2Nlc3NGcmFtZShmcmFtZSwgdHJ1ZSkpCisgICAgaWYgKCFWOEJpbmRpbmdTZWN1
cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgZnJhbWUsIHRydWUp
KQogICAgICAgICByZXR1cm47CiAKICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRleHQg
PSBWOFByb3h5Ojpjb250ZXh0KGZyYW1lKTsKQEAgLTIyMCw3ICsyMjEsNyBAQCBBQ0NFU1NPUl9T
RVRURVIoRE9NV2luZG93T3BlbmVyKQogewogICAgIERPTVdpbmRvdyogaW1wID0gVjhET01XcmFw
cGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJ
TkRPVywgaW5mby5Ib2xkZXIoKSk7CiAKLSAgICBpZiAoIVY4UHJveHk6OmNhbkFjY2Vzc0ZyYW1l
KGltcC0+ZnJhbWUoKSwgdHJ1ZSkpCisgICAgaWYgKCFWOEJpbmRpbmdTZWN1cml0eTo6Y2FuQWNj
ZXNzRnJhbWUoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgaW1wLT5mcmFtZSgpLCB0cnVlKSkKICAg
ICAgICAgcmV0dXJuOwogICAKICAgICAvLyBPcGVuZXIgY2FuIGJlIHNoYWRvd2VkIGlmIGl0IGlz
IGluIHRoZSBzYW1lIGRvbWFpbi4KQEAgLTM0Myw3ICszNDQsNyBAQCBDQUxMQkFDS19GVU5DX0RF
Q0woRE9NV2luZG93QWRkRXZlbnRMaXN0CiAKICAgICBET01XaW5kb3cqIGltcCA9IFY4RE9NV3Jh
cHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01X
SU5ET1csIGFyZ3MuSG9sZGVyKCkpOwogCi0gICAgaWYgKCFWOFByb3h5OjpjYW5BY2Nlc3NGcmFt
ZShpbXAtPmZyYW1lKCksIHRydWUpKQorICAgIGlmICghVjhCaW5kaW5nU2VjdXJpdHk6OmNhbkFj
Y2Vzc0ZyYW1lKFY4QmluZGluZ1N0YXRlOjpPbmx5KCksIGltcC0+ZnJhbWUoKSwgdHJ1ZSkpCiAg
ICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKICAgICBEb2N1bWVudCogZG9jID0gaW1w
LT5kb2N1bWVudCgpOwpAQCAtMzc2LDcgKzM3Nyw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChET01X
aW5kb3dSZW1vdmVFdmVudEwKIAogICAgIERPTVdpbmRvdyogaW1wID0gVjhET01XcmFwcGVyOjpj
b252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywg
YXJncy5Ib2xkZXIoKSk7CiAKLSAgICBpZiAoIVY4UHJveHk6OmNhbkFjY2Vzc0ZyYW1lKGltcC0+
ZnJhbWUoKSwgdHJ1ZSkpCisgICAgaWYgKCFWOEJpbmRpbmdTZWN1cml0eTo6Y2FuQWNjZXNzRnJh
bWUoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgaW1wLT5mcmFtZSgpLCB0cnVlKSkKICAgICAgICAg
cmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIAogICAgIERvY3VtZW50KiBkb2MgPSBpbXAtPmRvY3Vt
ZW50KCk7CkBAIC00NDEsNyArNDQyLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRvd0F0
b2IpCiAKICAgICBET01XaW5kb3cqIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZl
T2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGFyZ3MuSG9sZGVyKCkp
OwogCi0gICAgaWYgKCFWOFByb3h5OjpjYW5BY2Nlc3NGcmFtZShpbXAtPmZyYW1lKCksIHRydWUp
KQorICAgIGlmICghVjhCaW5kaW5nU2VjdXJpdHk6OmNhbkFjY2Vzc0ZyYW1lKFY4QmluZGluZ1N0
YXRlOjpPbmx5KCksIGltcC0+ZnJhbWUoKSwgdHJ1ZSkpCiAgICAgICAgIHJldHVybiB2ODo6VW5k
ZWZpbmVkKCk7CiAKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCkBAIC00NjAsNyArNDYxLDcg
QEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRvd0J0b2EpCiAKICAgICBET01XaW5kb3cqIGlt
cCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFz
c0luZGV4OjpET01XSU5ET1csIGFyZ3MuSG9sZGVyKCkpOwogCi0gICAgaWYgKCFWOFByb3h5Ojpj
YW5BY2Nlc3NGcmFtZShpbXAtPmZyYW1lKCksIHRydWUpKQorICAgIGlmICghVjhCaW5kaW5nU2Vj
dXJpdHk6OmNhbkFjY2Vzc0ZyYW1lKFY4QmluZGluZ1N0YXRlOjpPbmx5KCksIGltcC0+ZnJhbWUo
KSwgdHJ1ZSkpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKICAgICBpZiAoYXJn
cy5MZW5ndGgoKSA8IDEpCkBAIC02MjEsNyArNjIyLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERP
TVdpbmRvd1Nob3dNb2RhbERpYQogICAgICAgICBWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgYXJn
cy5Ib2xkZXIoKSk7CiAgICAgRnJhbWUqIGZyYW1lID0gd2luZG93LT5mcmFtZSgpOwogCi0gICAg
aWYgKCFWOFByb3h5OjpjYW5BY2Nlc3NGcmFtZShmcmFtZSwgdHJ1ZSkpCisgICAgaWYgKCFWOEJp
bmRpbmdTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgZnJh
bWUsIHRydWUpKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCiAgICAgRnJhbWUq
IGNhbGxpbmdGcmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JDYWxsaW5nQ29udGV4dCgp
OwpAQCAtNzA5LDcgKzcxMCw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChET01XaW5kb3dPcGVuKQog
ICAgIERPTVdpbmRvdyogcGFyZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmpl
Y3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgYXJncy5Ib2xkZXIoKSk7CiAg
ICAgRnJhbWUqIGZyYW1lID0gcGFyZW50LT5mcmFtZSgpOwogCi0gICAgaWYgKCFWOFByb3h5Ojpj
YW5BY2Nlc3NGcmFtZShmcmFtZSwgdHJ1ZSkpCisgICAgaWYgKCFWOEJpbmRpbmdTZWN1cml0eTo6
Y2FuQWNjZXNzRnJhbWUoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgZnJhbWUsIHRydWUpKQogICAg
ICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCiAgICAgRnJhbWUqIGVudGVyZWRGcmFtZSA9
IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JFbnRlcmVkQ29udGV4dCgpOwpAQCAtOTI1LDcgKzky
Niw3IEBAIHZvaWQgVjhDdXN0b206OkNsZWFyVGltZW91dEltcGwoY29uc3QgdjgKIAogICAgIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gYXJncy5Ib2xkZXIoKTsKICAgICBET01XaW5k
b3cqIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4o
VjhDbGFzc0luZGV4OjpET01XSU5ET1csIGhvbGRlcik7Ci0gICAgaWYgKCFWOFByb3h5OjpjYW5B
Y2Nlc3NGcmFtZShpbXAtPmZyYW1lKCksIHRydWUpKQorICAgIGlmICghVjhCaW5kaW5nU2VjdXJp
dHk6OmNhbkFjY2Vzc0ZyYW1lKFY4QmluZGluZ1N0YXRlOjpPbmx5KCksIGltcC0+ZnJhbWUoKSwg
dHJ1ZSkpCiAgICAgICAgIHJldHVybjsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0ID0gc3RhdGljX2Nhc3Q8U2NyaXB0RXhlY3V0aW9uQ29udGV4dCo+KGltcC0+ZG9jdW1lbnQo
KSk7CiAgICAgaWYgKCFjb250ZXh0KQpAQCAtOTcxLDcgKzk3Miw3IEBAIE5BTUVEX0FDQ0VTU19D
SEVDSyhET01XaW5kb3cpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBy
ZXR1cm4gVjhQcm94eTo6Y2FuQWNjZXNzRnJhbWUodGFyZ2V0LCBmYWxzZSk7CisgICAgcmV0dXJu
IFY4QmluZGluZ1NlY3VyaXR5OjpjYW5BY2Nlc3NGcmFtZShWOEJpbmRpbmdTdGF0ZTo6T25seSgp
LCB0YXJnZXQsIGZhbHNlKTsKIH0KIAogSU5ERVhFRF9BQ0NFU1NfQ0hFQ0soRE9NV2luZG93KQpA
QCAtOTkzLDcgKzk5NCw3IEBAIElOREVYRURfQUNDRVNTX0NIRUNLKERPTVdpbmRvdykKICAgICBp
ZiAoKHR5cGUgPT0gdjg6OkFDQ0VTU19HRVQgfHwgdHlwZSA9PSB2ODo6QUNDRVNTX0hBUykgJiYg
dGFyZ2V0LT50cmVlKCktPmNoaWxkKGluZGV4KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAg
ICByZXR1cm4gVjhQcm94eTo6Y2FuQWNjZXNzRnJhbWUodGFyZ2V0LCBmYWxzZSk7CisgICAgcmV0
dXJuIFY4QmluZGluZ1NlY3VyaXR5OjpjYW5BY2Nlc3NGcmFtZShWOEJpbmRpbmdTdGF0ZTo6T25s
eSgpLCB0YXJnZXQsIGZhbHNlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhMb2NhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhMb2NhdGlvbkN1c3RvbS5jcHAJKHJl
dmlzaW9uIDUxOTcyKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhMb2NhdGlvbkN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJMb2Nh
dGlvbi5oIgogCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nU3Rh
dGUuaCIKICNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEN1c3RvbUV2
ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJWOExvY2F0aW9uLmgiCkBAIC0yMTcsMTEgKzIxOCwx
MSBAQCBBQ0NFU1NPUl9HRVRURVIoTG9jYXRpb25SZWxvYWQpCiAgICAgICAgIHJldHVybiBwcml2
YXRlVGVtcGxhdGUtPkdldEZ1bmN0aW9uKCk7CiAgICAgfQogICAgIExvY2F0aW9uKiBpbXAgPSBW
OERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhDbGFzc0luZGV4
OjpMT0NBVElPTiwgaG9sZGVyKTsKLSAgICBpZiAoIVY4UHJveHk6OmNhbkFjY2Vzc0ZyYW1lKGlt
cC0+ZnJhbWUoKSwgZmFsc2UpKSB7CisgICAgaWYgKCFWOEJpbmRpbmdTZWN1cml0eTo6Y2FuQWNj
ZXNzRnJhbWUoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgaW1wLT5mcmFtZSgpLCBmYWxzZSkpIHsK
ICAgICAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBzaGFy
ZWRUZW1wbGF0ZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3KHY4
OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcodjhMb2NhdGlvblJlbG9hZENhbGxiYWNrLCB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4oKSwgdjg6OlNpZ25hdHVyZTo6TmV3KFY4TG9jYXRpb246OkdldFJhd1Rl
bXBsYXRlKCkpKSk7CiAgICAgICAgIHJldHVybiBzaGFyZWRUZW1wbGF0ZS0+R2V0RnVuY3Rpb24o
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJuIHByaXZhdGVUZW1wbGF0ZS0+R2V0RnVuY3Rp
b24oKTsKKyAgICB9CisgICAgcmV0dXJuIHByaXZhdGVUZW1wbGF0ZS0+R2V0RnVuY3Rpb24oKTsK
IH0KIAogQUNDRVNTT1JfR0VUVEVSKExvY2F0aW9uUmVwbGFjZSkKQEAgLTIzNSwxMSArMjM2LDEx
IEBAIEFDQ0VTU09SX0dFVFRFUihMb2NhdGlvblJlcGxhY2UpCiAgICAgICAgIHJldHVybiBwcml2
YXRlVGVtcGxhdGUtPkdldEZ1bmN0aW9uKCk7CiAgICAgfQogICAgIExvY2F0aW9uKiBpbXAgPSBW
OERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhDbGFzc0luZGV4
OjpMT0NBVElPTiwgaG9sZGVyKTsKLSAgICBpZiAoIVY4UHJveHk6OmNhbkFjY2Vzc0ZyYW1lKGlt
cC0+ZnJhbWUoKSwgZmFsc2UpKSB7CisgICAgaWYgKCFWOEJpbmRpbmdTZWN1cml0eTo6Y2FuQWNj
ZXNzRnJhbWUoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgaW1wLT5mcmFtZSgpLCBmYWxzZSkpIHsK
ICAgICAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBzaGFy
ZWRUZW1wbGF0ZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3KHY4
OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcodjhMb2NhdGlvblJlcGxhY2VDYWxsYmFjaywgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+KCksIHY4OjpTaWduYXR1cmU6Ok5ldyhWOExvY2F0aW9uOjpHZXRSYXdU
ZW1wbGF0ZSgpKSkpOwogICAgICAgICByZXR1cm4gc2hhcmVkVGVtcGxhdGUtPkdldEZ1bmN0aW9u
KCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJldHVybiBwcml2YXRlVGVtcGxhdGUtPkdldEZ1bmN0
aW9uKCk7CisgICAgfQorICAgIHJldHVybiBwcml2YXRlVGVtcGxhdGUtPkdldEZ1bmN0aW9uKCk7
CiB9CiAKIEFDQ0VTU09SX0dFVFRFUihMb2NhdGlvbkFzc2lnbikKQEAgLTI1NCwxMSArMjU1LDEx
IEBAIEFDQ0VTU09SX0dFVFRFUihMb2NhdGlvbkFzc2lnbikKICAgICAgICAgcmV0dXJuIHByaXZh
dGVUZW1wbGF0ZS0+R2V0RnVuY3Rpb24oKTsKICAgICB9CiAgICAgTG9jYXRpb24qIGltcCA9IFY4
RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5kZXg6
OkxPQ0FUSU9OLCBob2xkZXIpOwotICAgIGlmICghVjhQcm94eTo6Y2FuQWNjZXNzRnJhbWUoaW1w
LT5mcmFtZSgpLCBmYWxzZSkpIHsKKyAgICBpZiAoIVY4QmluZGluZ1NlY3VyaXR5OjpjYW5BY2Nl
c3NGcmFtZShWOEJpbmRpbmdTdGF0ZTo6T25seSgpLCBpbXAtPmZyYW1lKCksIGZhbHNlKSkgewog
ICAgICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHNoYXJl
ZFRlbXBsYXRlID0gdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+OjpOZXcodjg6
OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyh2OExvY2F0aW9uQXNzaWduQ2FsbGJhY2ssIHY4OjpIYW5k
bGU8djg6OlZhbHVlPigpLCB2ODo6U2lnbmF0dXJlOjpOZXcoVjhMb2NhdGlvbjo6R2V0UmF3VGVt
cGxhdGUoKSkpKTsKICAgICAgICAgcmV0dXJuIHNoYXJlZFRlbXBsYXRlLT5HZXRGdW5jdGlvbigp
OwotICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gcHJpdmF0ZVRlbXBsYXRlLT5HZXRGdW5jdGlv
bigpOworICAgIH0KKyAgICByZXR1cm4gcHJpdmF0ZVRlbXBsYXRlLT5HZXRGdW5jdGlvbigpOwog
fQogCiBDQUxMQkFDS19GVU5DX0RFQ0woTG9jYXRpb25SZWxvYWQpCkBAIC0zMzUsNyArMzM2LDcg
QEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKExvY2F0aW9uVG9TdHJpbmcpCiAgICAgSU5DX1NUQVRTKCJE
T00uTG9jYXRpb24udG9TdHJpbmciKTsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRl
ciA9IGFyZ3MuSG9sZGVyKCk7CiAgICAgTG9jYXRpb24qIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29u
dmVydFRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5kZXg6OkxPQ0FUSU9OLCBob2xk
ZXIpOwotICAgIGlmICghVjhQcm94eTo6Y2FuQWNjZXNzRnJhbWUoaW1wLT5mcmFtZSgpLCB0cnVl
KSkKKyAgICBpZiAoIVY4QmluZGluZ1NlY3VyaXR5OjpjYW5BY2Nlc3NGcmFtZShWOEJpbmRpbmdT
dGF0ZTo6T25seSgpLCBpbXAtPmZyYW1lKCksIHRydWUpKQogICAgICAgICByZXR1cm4gdjg6OlVu
ZGVmaW5lZCgpOwogICAgIFN0cmluZyByZXN1bHQgPSBpbXAtPmhyZWYoKTsKICAgICByZXR1cm4g
djhTdHJpbmcocmVzdWx0KTsKQEAgLTM0Niw3ICszNDcsNyBAQCBJTkRFWEVEX0FDQ0VTU19DSEVD
SyhMb2NhdGlvbikKICAgICBBU1NFUlQoVjhDbGFzc0luZGV4OjpGcm9tSW50KGRhdGEtPkludDMy
VmFsdWUoKSkgPT0gVjhDbGFzc0luZGV4OjpMT0NBVElPTik7CiAgICAgLy8gT25seSBhbGxvdyBz
YW1lIG9yaWdpbiBhY2Nlc3MKICAgICBMb2NhdGlvbiogaW1wID0gIFY4RE9NV3JhcHBlcjo6Y29u
dmVydFRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5kZXg6OkxPQ0FUSU9OLCBob3N0
KTsKLSAgICByZXR1cm4gVjhQcm94eTo6Y2FuQWNjZXNzRnJhbWUoaW1wLT5mcmFtZSgpLCBmYWxz
ZSk7CisgICAgcmV0dXJuIFY4QmluZGluZ1NlY3VyaXR5OjpjYW5BY2Nlc3NGcmFtZShWOEJpbmRp
bmdTdGF0ZTo6T25seSgpLCBpbXAtPmZyYW1lKCksIGZhbHNlKTsKIH0KIAogTkFNRURfQUNDRVNT
X0NIRUNLKExvY2F0aW9uKQpAQCAtMzU0LDcgKzM1NSw3IEBAIE5BTUVEX0FDQ0VTU19DSEVDSyhM
b2NhdGlvbikKICAgICBBU1NFUlQoVjhDbGFzc0luZGV4OjpGcm9tSW50KGRhdGEtPkludDMyVmFs
dWUoKSkgPT0gVjhDbGFzc0luZGV4OjpMT0NBVElPTik7CiAgICAgLy8gT25seSBhbGxvdyBzYW1l
IG9yaWdpbiBhY2Nlc3MKICAgICBMb2NhdGlvbiogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvc3QpOwot
ICAgIHJldHVybiBWOFByb3h5OjpjYW5BY2Nlc3NGcmFtZShpbXAtPmZyYW1lKCksIGZhbHNlKTsK
KyAgICByZXR1cm4gVjhCaW5kaW5nU2VjdXJpdHk6OmNhbkFjY2Vzc0ZyYW1lKFY4QmluZGluZ1N0
YXRlOjpPbmx5KCksIGltcC0+ZnJhbWUoKSwgZmFsc2UpOwogfQogCiB9ICAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA1MjAwNSkKKysrIFdlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAwOS0xMi0x
MSAgQ2hhcmxlcyBSZWlzICA8Y3JlaXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIHNvbWUgc2VjdXJpdHkgY29k
ZSBvdXQgb2YgVjggYmluZGluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTMyMzI2CisKKyAgICAgICAgKiBzcmMvV2ViQmluZGluZ3MuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpnZXREcmFnRGF0YUltcGwpOgorCiAyMDA5LTEyLTExICBBdmkgRHJpc3Nt
YW4gIDxhdmlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hl
ci4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmluZGluZ3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmluZGluZ3MuY3BwCShyZXZpc2lvbiA1MTk3MikK
KysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmluZGluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIk5QVjhP
YmplY3QuaCIgIC8vIGZvciBQcml2YXRlSWRlbnRpZmllcgogI2luY2x1ZGUgIlJhbmdlLmgiCisj
aW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKICNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKICNp
bmNsdWRlICJWOEhlbHBlcnMuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCkBAIC0yMzYsNyArMjM3
LDcgQEAgc3RhdGljIGJvb2wgZ2V0RHJhZ0RhdGFJbXBsKE5QT2JqZWN0KiBucAogICAgIC8vIENo
ZWNrIHRoZSBleGVjdXRpb24gZnJhbWVzIGFyZSBzYW1lIG9yaWdpbi4KICAgICBWOFByb3h5KiBj
dXJyZW50ID0gVjhQcm94eTo6cmV0cmlldmUoVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckN1cnJl
bnRDb250ZXh0KCkpOwogICAgIEZyYW1lKiBmcmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWUo
Y29udGV4dCk7Ci0gICAgaWYgKCFjdXJyZW50IHx8ICFjdXJyZW50LT5jYW5BY2Nlc3NGcmFtZShm
cmFtZSwgZmFsc2UpKQorICAgIGlmICghY3VycmVudCB8fCAhVjhCaW5kaW5nU2VjdXJpdHk6OmNh
bkFjY2Vzc0ZyYW1lKFY4QmluZGluZ1N0YXRlOjpPbmx5KCksIGZyYW1lLCBmYWxzZSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNvbnN0IEV2ZW50TmFtZXMmIG5hbWVzKGV2ZW50TmFt
ZXMoKSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>