<?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>100229</bug_id>
          
          <creation_ts>2012-10-24 04:35:41 -0700</creation_ts>
          <short_desc>[Custom Elements] Implement bare-bone document.register()</short_desc>
          <delta_ts>2013-02-24 05:23:42 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>WebExposed</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>109129</dependson>
          <blocked>99688</blocked>
    
    <blocked>108138</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hajime Morrita">morrita</reporter>
          <assigned_to name="Hajime Morrita">morrita</assigned_to>
          <cc>abarth</cc>
    
    <cc>arv</cc>
    
    <cc>buildbot</cc>
    
    <cc>bzbarsky</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dominicc</cc>
    
    <cc>ericbidelman</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>fishd</cc>
    
    <cc>haraken</cc>
    
    <cc>inferno</cc>
    
    <cc>jamesr</cc>
    
    <cc>japhet</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>ojan</cc>
    
    <cc>peter</cc>
    
    <cc>peter+ews</cc>
    
    <cc>philn</cc>
    
    <cc>rniwa</cc>
    
    <cc>syoichi</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>webcomponents-bugzilla</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>749533</commentid>
    <comment_count>0</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-10-24 04:35:41 -0700</bug_when>
    <thetext>Implement document.register() with no option parameter support, which will come after this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749572</commentid>
    <comment_count>1</comment_count>
      <attachid>170372</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-10-24 05:23:43 -0700</bug_when>
    <thetext>Created attachment 170372
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749573</commentid>
    <comment_count>2</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-10-24 05:24:57 -0700</bug_when>
    <thetext>If overall direction looks OK, I&apos;ll land some preparation parts as sub changes then
make this green.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749831</commentid>
    <comment_count>3</comment_count>
      <attachid>170372</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-10-24 11:01:19 -0700</bug_when>
    <thetext>Comment on attachment 170372
Patch

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

I like the overall direction, I think it&apos;s very close to the spec. I would love for Haraken to look over the V8 code.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:349
&gt; +    static v8::Persistent&lt;v8::FunctionTemplate&gt; GetTemplate(void* = 0);

Can you help me understand why this additional param is needed?

&gt; Source/WebCore/bindings/v8/DOMFunction.h:49
&gt; +class DOMFunction : public RefCounted&lt;DOMFunction&gt;

DOMFunction seems like a bad name. There aren&apos;t any DOM functions :)

Also, it seems that it&apos;s not really used in itself, only as DOMElementConstructor. Maybe we could elide it in to DOMElementConstructor altogether?

&gt; Source/WebCore/dom/Document.cpp:723
&gt; +        clearSupplements();

This seems wrong. Why didn&apos;t we need this before? Smells like an architectural flaw somewhere in this patch.

&gt; Source/WebCore/dom/DocumentCustomElement.h:52
&gt; +class DocumentCustomElement : public Supplement&lt;ScriptExecutionContext&gt; {

I wonder if this can be combined with CustomElementRegistry?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750235</commentid>
    <comment_count>4</comment_count>
      <attachid>170372</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-10-24 17:20:51 -0700</bug_when>
    <thetext>Comment on attachment 170372
Patch

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

Hi Dimiri, thanks for the quick reqview. That helped!

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:349
&gt;&gt; +    static v8::Persistent&lt;v8::FunctionTemplate&gt; GetTemplate(void* = 0);
&gt; 
&gt; Can you help me understand why this additional param is needed?

We need to return different FunctionTemplate for each custom element definition.
But we cannot generate different C++ function for each of them.
So this change passes DOMElemenntConstructor as a parameter so that the function
can look the associated FunctionTemplate object.

For built-in classes, each of them needs only one FunctionTemplate.

&gt;&gt; Source/WebCore/bindings/v8/DOMFunction.h:49
&gt;&gt; +class DOMFunction : public RefCounted&lt;DOMFunction&gt;
&gt; 
&gt; DOMFunction seems like a bad name. There aren&apos;t any DOM functions :)
&gt; 
&gt; Also, it seems that it&apos;s not really used in itself, only as DOMElementConstructor. Maybe we could elide it in to DOMElementConstructor altogether?

Good point. I&apos;ll kill this.
I made this just because I&apos;d like to have a counterpart of WebIDL &quot;Function&quot; interface.
But it now seems overkill.

&gt;&gt; Source/WebCore/dom/Document.cpp:723
&gt;&gt; +        clearSupplements();
&gt; 
&gt; This seems wrong. Why didn&apos;t we need this before? Smells like an architectural flaw somewhere in this patch.

While writing a response, I actually found a flaw and came up with an alternative idea.
So this will be removed. Thanks for reviewing ;-)

&gt;&gt; Source/WebCore/dom/DocumentCustomElement.h:52
&gt;&gt; +class DocumentCustomElement : public Supplement&lt;ScriptExecutionContext&gt; {
&gt; 
&gt; I wonder if this can be combined with CustomElementRegistry?

Good point. Will do. I&apos;ll merge CustomElementRegistry to this class since
I&apos;m hesitating to have CustomElementRegistry.idl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750589</commentid>
    <comment_count>5</comment_count>
      <attachid>170596</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-10-25 02:33:43 -0700</bug_when>
    <thetext>Created attachment 170596
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750605</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-25 03:10:34 -0700</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750888</commentid>
    <comment_count>7</comment_count>
      <attachid>170596</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-10-25 08:58:47 -0700</bug_when>
    <thetext>Comment on attachment 170596
Patch

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

&gt; Source/WebCore/bindings/v8/V8PerContextData.h:87
&gt; +    void addDisposable(V8ContextDisposable* disposable) { m_disposables.append(disposable); }

Abarth needs to look a this.

&gt; Source/WebCore/dom/DocumentCustomElement.h:51
&gt; +class DocumentCustomElement : public Supplement&lt;ScriptExecutionContext&gt; {

This seems like a bad name... It&apos;s neither Document nor Custom element :) I liked CustomElementRegistry... can we bring it back?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751261</commentid>
    <comment_count>8</comment_count>
      <attachid>170596</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-25 15:13:23 -0700</bug_when>
    <thetext>Comment on attachment 170596
Patch

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

Have you run performance tests on this patch?  It seems like it might introduce slowdowns to document.createElement and possibly to parsing.

&gt; Source/WebCore/bindings/v8/DOMElementConstructor.cpp:47
&gt; +    return elementTemplate()-&gt;GetFunction();

It seems very strange that you&apos;re ignoring the creationContext and the isolate.

&gt; Source/WebCore/bindings/v8/DOMElementConstructor.cpp:122
&gt; +    v8::Handle&lt;v8::FunctionTemplate&gt; desc = createRawTemplate();

desc -&gt; please use complete words in variable names.

&gt; Source/WebCore/bindings/v8/DOMElementConstructor.cpp:124
&gt; +    return v8::Persistent&lt;v8::FunctionTemplate&gt;::New(desc);

Can we use ScopedPersistent rather than manually calling Persistent::New ?

&gt; Source/WebCore/bindings/v8/DOMElementConstructor.cpp:130
&gt; +    ref();

Manually ref()/deref() is bad times.

&gt; Source/WebCore/bindings/v8/WrapperTypeInfo.h:48
&gt; -    typedef v8::Persistent&lt;v8::FunctionTemplate&gt; (*GetTemplateFunction)();
&gt; +    typedef v8::Persistent&lt;v8::FunctionTemplate&gt; (*GetTemplateFunction)(void*);
&gt; +    typedef void* GetTemplateFunctionParameterType;

Why is this a void*?  Is there a more semantic type we can use?

&gt; Source/WebCore/dom/CustomElementDefinition.cpp:57
&gt; +    willDestroyDocument();

What does ~CustomElementDefinition have to do with destroying documents?

&gt; Source/WebCore/dom/DocumentCustomElement.cpp:89
&gt; +PassRefPtr&lt;DOMElementConstructor&gt; DocumentCustomElement::webkitRegister(Document* document, const AtomicString&amp; name, ExceptionCode&amp; ec)

webkitRegister -&gt; please use unprefixed names in the implementation and use ImplementedAs in the IDL.

&gt;&gt; Source/WebCore/dom/DocumentCustomElement.h:51
&gt;&gt; +class DocumentCustomElement : public Supplement&lt;ScriptExecutionContext&gt; {
&gt; 
&gt; This seems like a bad name... It&apos;s neither Document nor Custom element :) I liked CustomElementRegistry... can we bring it back?

Is there a reason to use Supplement for this feature?  It seems like its a core part of DOM and it should be implemented directly on Document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751262</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-25 15:14:17 -0700</bug_when>
    <thetext>I need to digest this patch a bit.  There&apos;s a lot of unusual stuff in there that I&apos;d like to think about.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751396</commentid>
    <comment_count>10</comment_count>
      <attachid>170596</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-10-25 18:14:57 -0700</bug_when>
    <thetext>Comment on attachment 170596
Patch

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

&gt;&gt; Source/WebCore/bindings/v8/DOMElementConstructor.cpp:47
&gt;&gt; +    return elementTemplate()-&gt;GetFunction();
&gt; 
&gt; It seems very strange that you&apos;re ignoring the creationContext and the isolate.

I&apos;ll remove them. Since the GetFunction() doesn&apos;t take them so we have no place to use it anyway.

&gt;&gt; Source/WebCore/bindings/v8/DOMElementConstructor.cpp:124
&gt;&gt; +    return v8::Persistent&lt;v8::FunctionTemplate&gt;::New(desc);
&gt; 
&gt; Can we use ScopedPersistent rather than manually calling Persistent::New ?

Oh, I wasn&apos;t aware of that. Will do.

&gt;&gt; Source/WebCore/bindings/v8/DOMElementConstructor.cpp:130
&gt;&gt; +    ref();
&gt; 
&gt; Manually ref()/deref() is bad times.

Yeah, this is a pain point. I have another idea so will try it.

&gt;&gt; Source/WebCore/bindings/v8/WrapperTypeInfo.h:48
&gt;&gt; +    typedef void* GetTemplateFunctionParameterType;
&gt; 
&gt; Why is this a void*?  Is there a more semantic type we can use?

Hmm. This actually points DOMElementConstructdor. But I don&apos;t want to propagate that fact to binding global.
Maybe providing a superclass is sufficient.

&gt;&gt; Source/WebCore/dom/CustomElementDefinition.cpp:57
&gt;&gt; +    willDestroyDocument();
&gt; 
&gt; What does ~CustomElementDefinition have to do with destroying documents?

DOMElementConstructor, which is owned by a document and a V8 object, has a pointer to the document.
We need to clear the pointer since DOMElementConstructor can survive after the host document is dead due to the nature of GC.

&gt;&gt; Source/WebCore/dom/DocumentCustomElement.cpp:89
&gt;&gt; +PassRefPtr&lt;DOMElementConstructor&gt; DocumentCustomElement::webkitRegister(Document* document, const AtomicString&amp; name, ExceptionCode&amp; ec)
&gt; 
&gt; webkitRegister -&gt; please use unprefixed names in the implementation and use ImplementedAs in the IDL.

Sure, I wasn&apos;t aware of implementAs. &quot;register&quot; is a keyword of C++ so I&apos;ll pick some reasonable-looking name.

&gt;&gt;&gt; Source/WebCore/dom/DocumentCustomElement.h:51
&gt;&gt;&gt; +class DocumentCustomElement : public Supplement&lt;ScriptExecutionContext&gt; {
&gt;&gt; 
&gt;&gt; This seems like a bad name... It&apos;s neither Document nor Custom element :) I liked CustomElementRegistry... can we bring it back?
&gt; 
&gt; Is there a reason to use Supplement for this feature?  It seems like its a core part of DOM and it should be implemented directly on Document.

Hmm. I felt uncomfortable with messing up Document with #ifdefs anymore.
But in this case you are right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751400</commentid>
    <comment_count>11</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-10-25 18:18:44 -0700</bug_when>
    <thetext>&gt; I need to digest this patch a bit.  There&apos;s a lot of unusual stuff in there that I&apos;d like to think about.
Thanks!

In my feeling, what notably different is that
- FunctionTemplate and WrapperTypeInfo are no longer static variables.
  They are allocated dynamically for custom elements and we need take 
  care of its lifetime.
- GetTemplate() is no longer stateless. It needs some associated context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751443</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-25 19:02:15 -0700</bug_when>
    <thetext>Yeah, I need to think about the implications of those things, especially WrapperTypeInfo not being static.  In principle, we should be able to do this with only static WrapperTypeInfo objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755693</commentid>
    <comment_count>13</comment_count>
      <attachid>170596</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-31 15:59:52 -0700</bug_when>
    <thetext>Comment on attachment 170596
Patch

I&apos;ve now read the spec and gone over this patch a couple times.  I don&apos;t really understand how this works.  Maybe I need to study it more or perhaps a ChangeLog entry would help.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755697</commentid>
    <comment_count>14</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-10-31 16:05:17 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 170596 [details])
&gt; I&apos;ve now read the spec and gone over this patch a couple times.  I don&apos;t really understand how this works.  Maybe I need to study it more or perhaps a ChangeLog entry would help.

Sounds like we need a design doc or somesuch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755698</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-31 16:06:50 -0700</bug_when>
    <thetext>&gt; Sounds like we need a design doc or somesuch.

Yeah, I can also try implementing it myself to see how each of these issues come up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755752</commentid>
    <comment_count>16</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-31 17:38:52 -0700</bug_when>
    <thetext>Ok, I&apos;m starting to understand.  You can seem my work here:

https://github.com/abarth/webkit/compare/master...document-register</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755769</commentid>
    <comment_count>17</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-31 18:14:32 -0700</bug_when>
    <thetext>I now understand why you went down the design path you did in your patch.  I think your patch has the same problems with memory leaks that I noted in my GitHub branch.

I still think we can avoid dynamically creating WrapperTypeInfo structs.  I need to work the code a bit more to figure it out.  Basically, we need to work at a lower layer (beneath WrapperTypeInfo, if you like), probably by calling V8ObjectConstructor functions directly.

We also need to solve the lifetime issue, which is going to be tricky.  Basically, whatever object we use to hold on to the options.prototype (whether that&apos;s the prototype object itself or the Function we return from document.register) is going to need to be a weak pointer that uses the Document as its opaqueRootForGC.

Question for dglazkov: What is supposed to happen in the following situation:

var a = {};
a.which = &quot;a&quot;;
a.__proto__ = HTMLElement.prototype;

var b = {};
b.which = &quot;b&quot;;
b.__proto__ = HTMLElement.prototype;

var func = document.register(&quot;x-foo&quot;, {
  prototype: a
});

var createdBefore = document.createElement(&quot;x-foo&quot;);
var constructedBefore = new func();

alert(createdBefore.which);  // I assume this alerts &quot;a&quot;.
alert(constructedBefore.which);  // I assume this alerts &quot;a&quot; as well.

func.prototype = b;

var createdAfter = document.createElement(&quot;x-foo&quot;);
var constructedAfter = new func();

alert(createdAfter.which);  // ???
alert(constructedAfter.which);  // ???

document.body.appendChild(createdAfter);  // I assume this works.
document.body.appendChild(constructedAfter);  // Does this work?

var c = {};
c.which = &quot;c&quot;;

func.prototype = c;

var constructedMuchLater = new func();

document.body.appendChild(constructedMuchLater);  // Does this work?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756008</commentid>
    <comment_count>18</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-11-01 02:33:31 -0700</bug_when>
    <thetext>Adam, thanks for your investigation! I looked into the prototype.

Note that it isn&apos;t enough to just re-set the prototype for each wrapper.
We also need to inherit v8::Accessor from the parent prototype&apos;s FunctionTemplate
so that we have IDL-defined properties (attributes) on the wrapper JS object.

On WrapperTypeInfo allocation, we possibly able to pass the caller context to GetTemplate()
so that either GetTemplate or WrapperTypeInfo doen&apos;t need to know its own context, 
which requires the dynamic allocation.
The context will be an implementation object to be wrapped.
The GetTemplate() could lookup the corresponding function template object based on the 
implementation object.

On lifetime of ScriptValue (in github version)/FunctionTemplate (in my version), 
Probably we could make the reference weak and let Document&apos;s visitation callback to traverse 
the weak reference. I need to learn how these cross-boundary lifecycle work though.

I&apos;ll revise the patch next week once I come back from TPAC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756012</commentid>
    <comment_count>19</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-11-01 02:35:47 -0700</bug_when>
    <thetext>By the way, we should mark the prototype of the constructor function read-only. 
That is how constructors of built-in elements work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756094</commentid>
    <comment_count>20</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-01 04:38:14 -0700</bug_when>
    <thetext>@dglazkov: How is document.register supposed to work for extension content scripts?

== main world ==

document.register(&quot;x-foo&quot;, ...)
document.body.appendChild(document.createElement(&quot;x-foo&quot;));

== content script ==

var x = document.body.lastChild.__proto__;

Is &quot;x&quot; an object from the main world?  That would violate the security requirement that JavaScript objects do not cross from one world to another.

Similarly, what happens if the content script tries to register an element?  Will that leak an object from the content script to the mail world?

Are the lifetime callbacks made once for each element or once for each element in each world?  If the former, then the wrapper in the isolated world probably won&apos;t get whatever special sauce the lifetime callback sets up.  If the former, the lifetime callbacks are going to get very confused because they&apos;ll be running on a wrapper object from another world...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756097</commentid>
    <comment_count>21</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-01 04:43:06 -0700</bug_when>
    <thetext>&gt; Note that it isn&apos;t enough to just re-set the prototype for each wrapper.
&gt; We also need to inherit v8::Accessor from the parent prototype&apos;s FunctionTemplate
&gt; so that we have IDL-defined properties (attributes) on the wrapper JS object.

I think that should work fine in my branch.  V8HTMLElement::wrap should construct the wrapper JS object with the right v8::Accessor object.  I haven&apos;t tested it, so maybe there&apos;s some subtly I don&apos;t understand.

&gt; On WrapperTypeInfo allocation, we possibly able to pass the caller context to GetTemplate()
&gt; so that either GetTemplate or WrapperTypeInfo doen&apos;t need to know its own context, 
&gt; which requires the dynamic allocation.

I don&apos;t understand why we need to create a new template for these wrappers.  We should be able to use the HTMLElement template and then suitably modify the wrapper.

&gt; On lifetime of ScriptValue (in github version)/FunctionTemplate (in my version), 
&gt; Probably we could make the reference weak and let Document&apos;s visitation callback to traverse 
&gt; the weak reference. I need to learn how these cross-boundary lifecycle work though.

Yes, the reference needs to be weak, and we need to integrate with V8GCController&apos;s GC prologue.

&gt; I&apos;ll revise the patch next week once I come back from TPAC.

Sounds good.  This is going to be a very tricky patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756270</commentid>
    <comment_count>22</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-11-01 08:27:51 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; &gt; Note that it isn&apos;t enough to just re-set the prototype for each wrapper.
&gt; &gt; We also need to inherit v8::Accessor from the parent prototype&apos;s FunctionTemplate
&gt; &gt; so that we have IDL-defined properties (attributes) on the wrapper JS object.
&gt; 
&gt; I think that should work fine in my branch.  V8HTMLElement::wrap should construct the wrapper JS object with the right v8::Accessor object.  I haven&apos;t tested it, so maybe there&apos;s some subtly I don&apos;t understand.

It seems you are right. I&apos;m sorry for my confusing comment.

&gt; 
&gt; &gt; On WrapperTypeInfo allocation, we possibly able to pass the caller context to GetTemplate()
&gt; &gt; so that either GetTemplate or WrapperTypeInfo doen&apos;t need to know its own context, 
&gt; &gt; which requires the dynamic allocation.
&gt; 
&gt; I don&apos;t understand why we need to create a new template for these wrappers.  We should be able to use the HTMLElement template and then suitably modify the wrapper.
&gt; 

I thought it is the only way to give a (C++-implemented) constructor callback for
each returning constructor function. Other options?


&gt; &gt; On lifetime of ScriptValue (in github version)/FunctionTemplate (in my version), 
&gt; &gt; Probably we could make the reference weak and let Document&apos;s visitation callback to traverse 
&gt; &gt; the weak reference. I need to learn how these cross-boundary lifecycle work though.
&gt; 
&gt; Yes, the reference needs to be weak, and we need to integrate with V8GCController&apos;s GC prologue.
&gt; 
&gt; &gt; I&apos;ll revise the patch next week once I come back from TPAC.
&gt; 
&gt; Sounds good.  This is going to be a very tricky patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756299</commentid>
    <comment_count>23</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-01 08:43:06 -0700</bug_when>
    <thetext>&gt; I thought it is the only way to give a (C++-implemented) constructor callback for
&gt; each returning constructor function. Other options?

I haven&apos;t looked at that closely yet.  I would try creating a C++ object that has a wrapper.  We&apos;d make the object callable so that the web page could call it as a constructor.  I think it auto-magically gets typeof &quot;function&quot; when it becomes callable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756313</commentid>
    <comment_count>24</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-11-01 09:00:32 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; &gt; I thought it is the only way to give a (C++-implemented) constructor callback for
&gt; &gt; each returning constructor function. Other options?
&gt; 
&gt; I haven&apos;t looked at that closely yet.  I would try creating a C++ object that has a wrapper.  We&apos;d make the object callable so that the web page could call it as a constructor.  I think it auto-magically gets typeof &quot;function&quot; when it becomes callable.

Wow, found that there is ObjectTemplate::SetCallAsFunctionHandler(). I can use it!
Thanks for your advice :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756366</commentid>
    <comment_count>25</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-11-01 09:50:43 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; I now understand why you went down the design path you did in your patch.  I think your patch has the same problems with memory leaks that I noted in my GitHub branch.
&gt; 
&gt; I still think we can avoid dynamically creating WrapperTypeInfo structs.  I need to work the code a bit more to figure it out.  Basically, we need to work at a lower layer (beneath WrapperTypeInfo, if you like), probably by calling V8ObjectConstructor functions directly.
&gt; 
&gt; We also need to solve the lifetime issue, which is going to be tricky.  Basically, whatever object we use to hold on to the options.prototype (whether that&apos;s the prototype object itself or the Function we return from document.register) is going to need to be a weak pointer that uses the Document as its opaqueRootForGC.
&gt; 
&gt; Question for dglazkov: What is supposed to happen in the following situation:
&gt; 
&gt; var a = {};
&gt; a.which = &quot;a&quot;;
&gt; a.__proto__ = HTMLElement.prototype;
&gt; 
&gt; var b = {};
&gt; b.which = &quot;b&quot;;
&gt; b.__proto__ = HTMLElement.prototype;
&gt; 
&gt; var func = document.register(&quot;x-foo&quot;, {
&gt;   prototype: a
&gt; });
&gt; 
&gt; var createdBefore = document.createElement(&quot;x-foo&quot;);
&gt; var constructedBefore = new func();
&gt; 
&gt; alert(createdBefore.which);  // I assume this alerts &quot;a&quot;.
&gt; alert(constructedBefore.which);  // I assume this alerts &quot;a&quot; as well.

Yes in both cases. &quot;func&quot; is an element constructor.

&gt; 
&gt; func.prototype = b;
&gt; 
&gt; var createdAfter = document.createElement(&quot;x-foo&quot;);
&gt; var constructedAfter = new func();
&gt; 
&gt; alert(createdAfter.which);  // ???
&gt; alert(constructedAfter.which);  // ???

Per spec today, it will still be &quot;a&quot;, because constructor closes over the original prototype and uses it to instantiate the element:

http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/custom/index.html#dfn-custom-element-constructor-generation

&gt; 
&gt; document.body.appendChild(createdAfter);  // I assume this works.
&gt; document.body.appendChild(constructedAfter);  // Does this work?

Yup. both work.

&gt; 
&gt; var c = {};
&gt; c.which = &quot;c&quot;;
&gt; 
&gt; func.prototype = c;
&gt; 
&gt; var constructedMuchLater = new func();
&gt; 
&gt; document.body.appendChild(constructedMuchLater);  // Does this work?

Still uses a.

These are good tricky questions. In your opinion, does the specified behavior make sense?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756390</commentid>
    <comment_count>26</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-01 10:06:23 -0700</bug_when>
    <thetext>&gt; These are good tricky questions. In your opinion, does the specified behavior make sense?

Yes!  They&apos;re the best answers from an implementation point of view.  What they tell me is that we need to hold m_prototype with a lifetime equal to that of document and that the function that we return from document.register is decoupled from the element creation / wrapping process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767562</commentid>
    <comment_count>27</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-11-14 18:22:08 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; &gt; I haven&apos;t looked at that closely yet.  I would try creating a C++ object that has a wrapper.  We&apos;d make the object callable so that the web page could call it as a constructor.  I think it auto-magically gets typeof &quot;function&quot; when it becomes callable.
&gt; 
&gt; Wow, found that there is ObjectTemplate::SetCallAsFunctionHandler(). I can use it!
&gt; Thanks for your advice :-)

Haraken pointed out that the object cannot be a function even if it is callable.
This is right. Functions need to have apply, bind and other built-in method but
function-like callable objects don&apos;t have these. I&apos;ll look into some other path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767571</commentid>
    <comment_count>28</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-11-14 18:33:01 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; (In reply to comment #24)
&gt; &gt; &gt; I haven&apos;t looked at that closely yet.  I would try creating a C++ object that has a wrapper.  We&apos;d make the object callable so that the web page could call it as a constructor.  I think it auto-magically gets typeof &quot;function&quot; when it becomes callable.
&gt; &gt; 
&gt; &gt; Wow, found that there is ObjectTemplate::SetCallAsFunctionHandler(). I can use it!
&gt; &gt; Thanks for your advice :-)
&gt; 
&gt; Haraken pointed out that the object cannot be a function even if it is callable.
&gt; This is right. Functions need to have apply, bind and other built-in method but
&gt; function-like callable objects don&apos;t have these. I&apos;ll look into some other path.

In a long term, a correct way to fix the problem would be to have v8::Function inherit from v8::Object and have v8::FunctionTemplate inherit from v8::ObjectTemplate. I know you need a more short-term solution though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767596</commentid>
    <comment_count>29</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-14 18:53:42 -0800</bug_when>
    <thetext>&gt; Haraken pointed out that the object cannot be a function even if it is callable.
&gt; This is right. Functions need to have apply, bind and other built-in method but
&gt; function-like callable objects don&apos;t have these. I&apos;ll look into some other path.

You&apos;re going to need to set the __proto__ property anyway, so that shouldn&apos;t be a problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767607</commentid>
    <comment_count>30</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-11-14 19:06:04 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; &gt; Haraken pointed out that the object cannot be a function even if it is callable.
&gt; &gt; This is right. Functions need to have apply, bind and other built-in method but
&gt; &gt; function-like callable objects don&apos;t have these. I&apos;ll look into some other path.
&gt; 
&gt; You&apos;re going to need to set the __proto__ property anyway, so that shouldn&apos;t be a problem.

It looks implementations of built-in functions don&apos;t accept function-like objects.
I tried Function.prototype.apply(funcLike, null, []) then it throws an error that says
funcLike should be a function but should not be an object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767611</commentid>
    <comment_count>31</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-14 19:08:16 -0800</bug_when>
    <thetext>&gt; It looks implementations of built-in functions don&apos;t accept function-like objects.

That&apos;s too bad.

&gt; I tried Function.prototype.apply(funcLike, null, []) then it throws an error that says
&gt; funcLike should be a function but should not be an object.

How did you create funcLike?  Is typeof funcLike == &quot;function&quot; ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767632</commentid>
    <comment_count>32</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-11-14 19:43:01 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; &gt; It looks implementations of built-in functions don&apos;t accept function-like objects.
&gt; 
&gt; That&apos;s too bad.
&gt; 
&gt; &gt; I tried Function.prototype.apply(funcLike, null, []) then it throws an error that says
&gt; &gt; funcLike should be a function but should not be an object.
&gt; 
&gt; How did you create funcLike?  Is typeof funcLike == &quot;function&quot; ?

No, it&apos;s a object which has callAsFunction (or callAsConstructor) callback.
One example is that HTMLEmbedElement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769045</commentid>
    <comment_count>33</comment_count>
      <attachid>174633</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-11-16 02:00:26 -0800</bug_when>
    <thetext>Created attachment 174633
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769047</commentid>
    <comment_count>34</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-11-16 02:03:26 -0800</bug_when>
    <thetext>This version follows Adam&apos;s suggestion in general sense, with a tweak
to support function semantics of register()-ed constructors.
I&apos;ll write a design doc. This one is, IMO, simpler than the last version though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769048</commentid>
    <comment_count>35</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-11-16 02:04:41 -0800</bug_when>
    <thetext>Note that this this patch is a bit outdated since toV8() and toNative() is under big refactoring and
I don&apos;t want to fight against per-rebase merges.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769933</commentid>
    <comment_count>36</comment_count>
      <attachid>174633</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-11-17 03:56:11 -0800</bug_when>
    <thetext>Comment on attachment 174633
Patch

oops. This isn&apos;t ready for review yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772406</commentid>
    <comment_count>37</comment_count>
      <attachid>175327</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-11-20 19:49:26 -0800</bug_when>
    <thetext>Created attachment 175327
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772407</commentid>
    <comment_count>38</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-11-20 19:50:18 -0800</bug_when>
    <thetext>This one is almost ready to review. But before that, I need to announce the feature to webkit-dev.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772427</commentid>
    <comment_count>39</comment_count>
      <attachid>175327</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-11-20 20:39:26 -0800</bug_when>
    <thetext>Comment on attachment 175327
Patch

Attachment 175327 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14913830</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772440</commentid>
    <comment_count>40</comment_count>
      <attachid>175327</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-20 21:15:06 -0800</bug_when>
    <thetext>Comment on attachment 175327
Patch

Attachment 175327 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14908789

New failing tests:
editing/inserting/insert-composition-whitespace.html
editing/pasteboard/paste-and-sanitize.html
dom/xhtml/level3/core/documentadoptnode16.xhtml
dom/xhtml/level1/core/hc_documentcreateelementcasesensitive.xhtml
accessibility/canvas-fallback-content.html
editing/execCommand/remove-format-elements.html
editing/execCommand/applyblockelement-visiblepositionforindex-crash.html
dom/xhtml/level3/core/nodeisdefaultnamespace09.xhtml
dom/html/level1/core/hc_elementwrongdocumenterr.html
dom/html/level1/core/hc_attrinsertbefore6.html
editing/selection/extend-by-sentence-001.html
dom/html/level1/core/hc_attrappendchild5.html
editing/deleting/delete-and-cleanup.html
dom/html/level1/core/hc_nodeappendchildnewchilddiffdocument.html
dom/html/level1/core/hc_namednodemapwrongdocumenterr.html
dom/xhtml/level3/core/documentnormalizedocument10.xhtml
accessibility/aria-hidden-updates-alldescendants.html
editing/editability/ignored-content.html
dom/html/level1/core/hc_attrappendchild2.html
dom/html/level1/core/hc_nodeinsertbeforenewchilddiffdocument.html
editing/undo/replace-text-in-node-preserving-markers-crash.html
editing/pasteboard/paste-without-nesting.html
http/tests/misc/script-defer-after-slow-stylesheet.html
editing/style/remove-format-without-enclosing-block.html
editing/execCommand/ident-crashes-topnode-is-text.html
editing/selection/root-inlinebox-selected-children-crash.html
fast/block/child-not-removed-from-parent-lineboxes-crash.html
dom/xhtml/level1/core/hc_attrappendchild2.xhtml
fast/block/merge-anonymous-block-remove-child-crash2.html
dom/html/level1/core/hc_nodereplacechildnewchilddiffdocument.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772517</commentid>
    <comment_count>41</comment_count>
      <attachid>175349</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-11-20 23:48:54 -0800</bug_when>
    <thetext>Created attachment 175349
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772587</commentid>
    <comment_count>42</comment_count>
      <attachid>175349</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-11-21 01:08:40 -0800</bug_when>
    <thetext>Comment on attachment 175349
Patch

Attachment 175349 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14901862

New failing tests:
fast/dom/custom/document-register-basic.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772597</commentid>
    <comment_count>43</comment_count>
      <attachid>175368</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-11-21 01:21:47 -0800</bug_when>
    <thetext>Created attachment 175368
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773603</commentid>
    <comment_count>44</comment_count>
      <attachid>175368</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-21 23:08:08 -0800</bug_when>
    <thetext>Comment on attachment 175368
Patch

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

I&apos;m sorry, but I ran out of time to look at this patch.  This version looks like a big improvement over the previous version.  I&apos;ve left some comments below about ways in which we might be able to improve it further.

&gt; Source/WebCore/ChangeLog:29
&gt; +        This chagne tweaks make_names.pl (or generated HTMLElementFactory)

chagne -&gt; change

&gt; Source/WebCore/ChangeLog:49
&gt; +        [JS Adaptor Fuction] &lt;-(hidden property)-&gt; [JS Wrapper Object] -(internal field)-&gt; [C++ Natie object]

Is there some reason we can&apos;t use the JS Adaptor Function as the wrapper for the native C++ object?  I guess I need to read the patch.

typo: Natie -&gt; Native.

&gt; Source/WebCore/ChangeLog:70
&gt; +

Thank you for the detailed ChangeLog entry.

&gt; Source/WebCore/bindings/v8/CustomElementHelpers.cpp:43
&gt; +    DEFINE_STATIC_LOCAL(ScriptValue, value, (v8::Persistent&lt;v8::Value&gt;::New(V8HTMLSpanElement::GetTemplate()-&gt;GetFunction()-&gt;Get(v8::String::NewSymbol(&quot;prototype&quot;)))));

This can&apos;t be right.  It needs to be per-context, not static (or even per-isolate).

&gt; Source/WebCore/bindings/v8/V8AdaptorFunction.cpp:45
&gt; +v8::Persistent&lt;v8::FunctionTemplate&gt; V8AdaptorFunction::configureTemplate(v8::Persistent&lt;v8::FunctionTemplate&gt; desc)

desc -&gt; template?

&gt; Source/WebCore/bindings/v8/V8AdaptorFunction.cpp:57
&gt; +    Vector&lt;v8::Handle&lt;v8::Value&gt; &gt; argArray(args.Length());
&gt; +    for (int i = 0; i &lt; args.Length(); ++i)
&gt; +        argArray.append(args[i]);

It&apos;s lame that we have to copy the arguments like this.  Can we not get a pointer and length from v8::Arguments?  We might want to add that API.

&gt; Source/WebCore/bindings/v8/V8AdaptorFunction.cpp:63
&gt; +v8::Handle&lt;v8::Function&gt; V8AdaptorFunction::wrap(v8::Handle&lt;v8::Object&gt; object, v8::Handle&lt;v8::Value&gt; prototype, AtomicString name)

AtomicString -&gt; const AtomicString&amp; ?

&gt; Source/WebCore/bindings/v8/V8AdaptorFunction.cpp:68
&gt; +    adaptor-&gt;SetName(v8::String::New(name.characters(), name.length()));

Why not use v8String rather than v8::String::New?  It&apos;s much faster.

&gt; Source/WebCore/bindings/v8/V8AdaptorFunction.cpp:70
&gt; +    adaptor-&gt;SetHiddenValue(V8HiddenPropertyName::detail(), object);
&gt; +    object-&gt;SetHiddenValue(V8HiddenPropertyName::detail(), adaptor);

This is also very slow.  Perhaps we should configure the function template to have an internal field we can use here.

It still seems to me like we can use the function object directly as a JS wrapper and avoid this adaptor thing.  What&apos;s stopping us from doing that?

&gt; Source/WebCore/bindings/v8/V8HTMLCustomElement.cpp:59
&gt; +    v8::Handle&lt;v8::Context&gt; context;
&gt; +    if (!creationContext.IsEmpty() &amp;&amp; creationContext-&gt;CreationContext() != v8::Context::GetCurrent()) {
&gt; +        // For performance, we enter the context only if the currently running context
&gt; +        // is different from the context that we are about to enter.
&gt; +        context = v8::Local&lt;v8::Context&gt;::New(creationContext-&gt;CreationContext());
&gt; +        ASSERT(!context.IsEmpty());
&gt; +        context-&gt;Enter();
&gt; +    }

THis is really old code now.  instantiateV8Object handles this these days.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818445</commentid>
    <comment_count>45</comment_count>
      <attachid>185141</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-01-28 20:42:03 -0800</bug_when>
    <thetext>Created attachment 185141
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818451</commentid>
    <comment_count>46</comment_count>
      <attachid>185141</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-01-28 20:45:52 -0800</bug_when>
    <thetext>Comment on attachment 185141
Patch

Back from long quiet period...

I addressed Adam&apos;s comment if possible and added explaining FIXMEs / filed bugs for points I don&apos;t want to address in this patch.
I&apos;ll announce the feature in webkit-dev once this patch becomes technically sensible for given standard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818465</commentid>
    <comment_count>47</comment_count>
      <attachid>185147</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-01-28 21:16:18 -0800</bug_when>
    <thetext>Created attachment 185147
Renamed the feature flag</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818466</commentid>
    <comment_count>48</comment_count>
      <attachid>185147</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-01-28 21:17:52 -0800</bug_when>
    <thetext>Comment on attachment 185147
Renamed the feature flag

cq- until the feature announcement is made.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818508</commentid>
    <comment_count>49</comment_count>
      <attachid>185147</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-28 21:58:58 -0800</bug_when>
    <thetext>Comment on attachment 185147
Renamed the feature flag

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        - The feature is guarded by ENABLE(CUSTOM_DOM_ELMENTS) and RuntimeEnabledFeatures::customDOMElementsEnabled().

CUSTOM_DOM_ELMENTS -&gt; this name doesn&apos;t match the code

&gt; Source/WebCore/ChangeLog:66
&gt; +        Although this first version doesn&apos;t support the optinal prototype

optinal -&gt; optional

&gt; Source/WebCore/bindings/v8/CustomElementHelpers.cpp:46
&gt; +    return ScriptValue(frame-&gt;script()-&gt;windowShell(mainThreadNormalWorld())-&gt;customElementDefaultPrototype());

mainThreadNormalWorld -&gt; This probably won&apos;t work properly with content scripts that run in another isolated world.

&gt; Source/WebCore/bindings/v8/CustomElementHelpers.cpp:49
&gt; +bool CustomElementHelpers::isCustomElementsAllowed(Frame* frame)

Ah, I see.  :)

Can we assert isCustomElementsAllowed in defaultPrototypeOf?

&gt; Source/WebCore/bindings/v8/CustomElementHelpers.cpp:53
&gt; +    return mainWorldScriptState(frame) == ScriptState::current();

There&apos;s probably a faster way to check this condition.

&gt; Source/WebCore/bindings/v8/V8AdaptorFunction.cpp:40
&gt; +    // FIXME: Should be stored in per-isolate data store

Yes...  We now pass the isolate around a lot in the bindings.  It should be easy to pass it to this function.

&gt; Source/WebCore/bindings/v8/V8AdaptorFunction.cpp:66
&gt; +    v8::Handle&lt;v8::Function&gt; adaptor = v8::Handle&lt;v8::Function&gt;::Cast(getTemplate()-&gt;GetFunction());

getTemplate() &lt;-- Seems like we could pass the isolate here.

&gt; Source/WebCore/bindings/v8/V8AdaptorFunction.cpp:68
&gt; +        adaptor-&gt;Set(v8::String::NewSymbol(&quot;prototype&quot;), prototype, v8::ReadOnly);

Do we intend to call the setter for &quot;prototype&quot; on Object.prototype ?

&gt; Source/WebCore/bindings/v8/V8AdaptorFunction.cpp:71
&gt; +    adaptor-&gt;SetHiddenValue(V8HiddenPropertyName::detail(), object);
&gt; +    object-&gt;SetHiddenValue(V8HiddenPropertyName::detail(), adaptor);

detail &lt;-- We should probably create a new V8HiddenPropertyName for this purpose.

&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.cpp:491
&gt; +    ScopedPersistent&lt;v8::Function&gt; spanConstructor(v8::Handle&lt;v8::Function&gt;::Cast(m_global-&gt;Get(v8String(&quot;HTMLSpanElement&quot;, m_isolate))));

Cast &lt;-- This might be a bad cast.  Someone might have messed with the HTMLSpanElement property.  We need to check whether the object we get back from m_global really is a v8::Function before casting it.

Also, I don&apos;t think there&apos;s any reason to use ScopedPersistent here.  We can just use v8::Handle.

&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.cpp:492
&gt; +    m_customElementDefaultPrototype.set(v8::Handle&lt;v8::Object&gt;::Cast(spanConstructor-&gt;Get(v8String(&quot;prototype&quot;, m_isolate))));

Again, this might be a bad cast.  We need to check that we actually get a v8::Object.

&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.h:115
&gt; +    ScopedPersistent&lt;v8::Object&gt; m_customElementDefaultPrototype;

Can this cause a memory leak?  What prevents m_customElementDefaultPrototype from retaining V8DOMWindowShell?  We probably need to clear this out in disposeContext() or clearForNavigation/clearForClose or something.

&gt; Source/WebCore/bindings/v8/V8HTMLCustomElement.cpp:44
&gt; +// FIXME: Each custom elements should have its own GetTemplate method so that it can derived from differenct super element.

differenct -&gt; different

&gt; Source/WebCore/bindings/v8/V8HTMLCustomElement.cpp:49
&gt; +    CustomElementConstructor* ctor = CustomElementRegistry::constructorOf(impl.get());

ctor -&gt; constructor

&gt; Source/WebCore/bindings/v8/V8HTMLCustomElement.cpp:51
&gt; +        return v8::Handle&lt;v8::Object&gt;::Cast(WebCore::toV8(toHTMLUnknownElement(impl.get()), creationContext, isolate));

Cast &lt;-- Are you sure this cast is valid?  I guess we know that impl is non-zero?

&gt; Source/WebCore/bindings/v8/V8HTMLCustomElement.cpp:59
&gt; +    if (CustomElementHelpers::isCustomElementsAllowed(impl-&gt;document()-&gt;frame())) {

We shouldn&apos;t need to talk to the Frame here.  The document() and its DOMWindow should be enough for us.  Consider the case when the Frame has navigated away from impl-&gt;document().

&gt; Source/WebCore/bindings/v8/custom/V8CustomElementConstructorCustom.cpp:51
&gt; +    return V8HTMLCustomElement::toV8(element.get());

What about the creationContext and the isolate parameter?  We shouldn&apos;t be omitting these parameters in new code, especially not for elements.  In this case, args.Holder() should be the creationContext.

&gt; Source/WebCore/dom/CustomElementConstructor.h:54
&gt; +    explicit CustomElementConstructor(Document*, const QualifiedName&amp;, const String&amp;, const ScriptValue&amp;);

explicit &lt;-- This keyword is only useful on one-argument constructors.

CustomElementConstructor &lt;-- This constructor should be private because all callers should use the &quot;create&quot; function instead.

&gt; Source/WebCore/dom/CustomElementConstructor.h:59
&gt; +    AtomicString name() const { return m_name; }

AtomicString -&gt; const AtomicString&amp;

&gt; Source/WebCore/dom/CustomElementConstructor.h:69
&gt; +    ScriptValue m_prototype;

Isn&apos;t this a memory leak?

&gt; Source/WebCore/dom/CustomElementRegistry.h:72
&gt; +    ScriptValue m_defaultPrototype;

This is probably also a memory leak.  What if someone runs the following code:

HTMLSpanElement.prototype.foo = document

Now we have a cycle and we&apos;ll leak the entire document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818509</commentid>
    <comment_count>50</comment_count>
      <attachid>185147</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-28 21:59:28 -0800</bug_when>
    <thetext>Comment on attachment 185147
Renamed the feature flag

This patch has lots of memory leaks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818571</commentid>
    <comment_count>51</comment_count>
      <attachid>185147</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-01-28 22:55:42 -0800</bug_when>
    <thetext>Comment on attachment 185147
Renamed the feature flag

Thanks for the quick and late night review, Adam!
I realized my change is behind recent &quot;passing-isolate&quot; effort.
And also noticed that there are many cycles. Probably I need to make some references weak to break them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818588</commentid>
    <comment_count>52</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-28 23:08:54 -0800</bug_when>
    <thetext>Yeah, it&apos;s going to be slightly tricky to break the cycles.  One thing you have going for you is that the registration created by document.register lasts for the lifetime of the document.  In your patch, you&apos;ve interpreted that to mean until the document is destroyed.  However, it might be easier to interpret that to mean &quot;as long as the document is displayed in a frame&quot;.  For example, you could clear out the registry when ActiveDOMObject::stop is called.  That might be an easier approach that adding a lot of complicated weak handle logic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818780</commentid>
    <comment_count>53</comment_count>
      <attachid>185147</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-01-29 03:07:36 -0800</bug_when>
    <thetext>Comment on attachment 185147
Renamed the feature flag

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

&gt;&gt; Source/WebCore/bindings/v8/CustomElementHelpers.cpp:49
&gt;&gt; +bool CustomElementHelpers::isCustomElementsAllowed(Frame* frame)
&gt; 
&gt; Ah, I see.  :)
&gt; 
&gt; Can we assert isCustomElementsAllowed in defaultPrototypeOf?

Yes, we should.

&gt;&gt; Source/WebCore/bindings/v8/V8AdaptorFunction.cpp:68
&gt;&gt; +        adaptor-&gt;Set(v8::String::NewSymbol(&quot;prototype&quot;), prototype, v8::ReadOnly);
&gt; 
&gt; Do we intend to call the setter for &quot;prototype&quot; on Object.prototype ?

Good point. The standard says nothing particular. I&apos;d support to allow it considering that even object serialization does allow it.

&gt;&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.h:115
&gt;&gt; +    ScopedPersistent&lt;v8::Object&gt; m_customElementDefaultPrototype;
&gt; 
&gt; Can this cause a memory leak?  What prevents m_customElementDefaultPrototype from retaining V8DOMWindowShell?  We probably need to clear this out in disposeContext() or clearForNavigation/clearForClose or something.

Right. I should figure out some trigger to start cycle breaking as you suggested.

&gt;&gt; Source/WebCore/bindings/v8/V8HTMLCustomElement.cpp:51
&gt;&gt; +        return v8::Handle&lt;v8::Object&gt;::Cast(WebCore::toV8(toHTMLUnknownElement(impl.get()), creationContext, isolate));
&gt; 
&gt; Cast &lt;-- Are you sure this cast is valid?  I guess we know that impl is non-zero?

Yes, well, no. I updated the caller. The condition also should be ASSERT-ed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819870</commentid>
    <comment_count>54</comment_count>
      <attachid>185411</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-01-30 00:14:05 -0800</bug_when>
    <thetext>Created attachment 185411
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819872</commentid>
    <comment_count>55</comment_count>
      <attachid>185411</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-01-30 00:16:52 -0800</bug_when>
    <thetext>Comment on attachment 185411
Patch

This change gets rid of ScriptValue member variables to prevent cycles.
The reference to JavaScript objects are pushed into wrapper object side. 
For example, CustomElementConstructor::m_prototype in the last version is moved to
&quot;prototype&quot; property of the wrapper object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820222</commentid>
    <comment_count>56</comment_count>
    <who name="Dominic Cooney">dominicc</who>
    <bug_when>2013-01-30 08:23:41 -0800</bug_when>
    <thetext>&gt; &gt;&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.h:115
&gt; &gt;&gt; +    ScopedPersistent&lt;v8::Object&gt; m_customElementDefaultPrototype;
&gt; &gt; 
&gt; &gt; Can this cause a memory leak?  What prevents m_customElementDefaultPrototype from retaining V8DOMWindowShell?  We probably need to clear this out in disposeContext() or clearForNavigation/clearForClose or something.
&gt; 
&gt; Right. I should figure out some trigger to start cycle breaking as you suggested.

What about the venerable hidden reference on the V8 side? ie make the C++ handle weak, and put a hidden reference from the document wrapper to the prototype?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820250</commentid>
    <comment_count>57</comment_count>
      <attachid>185411</attachid>
    <who name="Dominic Cooney">dominicc</who>
    <bug_when>2013-01-30 09:04:48 -0800</bug_when>
    <thetext>Comment on attachment 185411
Patch

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

&gt; Source/WebCore/bindings/v8/CustomElementHelpers.cpp:48
&gt; +        wrapper-&gt;Set(v8String(&quot;prototype&quot;, state-&gt;context()-&gt;GetIsolate()), prototypeValue, v8::ReadOnly);

Does v8::ReadOnly mean not writable, not configurable? If not this code needs hardening.

&gt; Source/WebCore/bindings/v8/CustomElementHelpers.cpp:57
&gt; +    v8::Handle&lt;v8::Value&gt; interfaceObject = global-&gt;Get(v8String(&quot;HTMLSpanElement&quot;, isolate));

Isn’t it easy for the script author to set this to anything that they want?

It would be better to consult V8HTMLSpanElement directly to get the interface object, then the interface prototype object.

&gt; Source/WebCore/bindings/v8/CustomElementHelpers.cpp:66
&gt; +bool CustomElementHelpers::isCustomElementsAllowed(ScriptState* state)

It seems grammatically weird to have is with plural elements. But maybe the pull of is for a boolean accessor is irresistibile?

&gt; Source/WebCore/bindings/v8/V8AdaptorFunction.h:47
&gt; +//      WebKit need it to associate each wrapper to its backing C++ object. We store it in an internal field of the wrapped object.

It looks like you use a hidden value, which is slightly different to an internal field.

&gt; Source/WebCore/bindings/v8/V8AdaptorFunction.h:49
&gt; +// Once 1) is addresssed, we could attack 2) with it. 

How would 2 be attacked?

Because you can alternatively work around the problem with #1 by creating an object with a call-as-instance handler, right? The downside of this is that the type of custom element constructors will be object and not function until #1 is fixed.

&gt; Source/WebCore/bindings/v8/V8HTMLCustomElement.cpp:65
&gt; +        wrapper-&gt;Set(v8String(&quot;constructor&quot;, isolate), constructorWapper);

In JavaScript, typically the constructor property is set on the prototype, not the instance.

&gt; Source/WebCore/bindings/v8/custom/V8CustomElementConstructorCustom.cpp:43
&gt; +        return throwTypeError(&quot;DOM object constructor cannot be called as a function.&quot;, args.GetIsolate());

For consistency it might be nice to produce the same error V8 produces for the built-in constructors, namely a TypeError with &quot;Illegal constructor&quot;?

Does WebIDL define an error message for calling constructors as functions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820429</commentid>
    <comment_count>58</comment_count>
      <attachid>185411</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-30 12:48:29 -0800</bug_when>
    <thetext>Comment on attachment 185411
Patch

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

&gt;&gt; Source/WebCore/bindings/v8/CustomElementHelpers.cpp:57
&gt;&gt; +    v8::Handle&lt;v8::Value&gt; interfaceObject = global-&gt;Get(v8String(&quot;HTMLSpanElement&quot;, isolate));
&gt; 
&gt; Isn’t it easy for the script author to set this to anything that they want?
&gt; 
&gt; It would be better to consult V8HTMLSpanElement directly to get the interface object, then the interface prototype object.

We should at least do an instanceOf check.

&gt; Source/WebCore/bindings/v8/CustomElementHelpers.h:45
&gt; +    static void initializeConstructorWrapper(CustomElementConstructor*, const ScriptValue&amp;, ScriptState*);

I&apos;d name the second parameter.  It&apos;s not clear what ScriptValue you&apos;re supposed to pass here.

&gt; Source/WebCore/bindings/v8/V8AdaptorFunction.cpp:51
&gt; +    v8::Persistent&lt;v8::FunctionTemplate&gt; newTemplate = v8::Persistent&lt;v8::FunctionTemplate&gt;::New(v8::FunctionTemplate::New());

I might add a comment that this leak is intentional so that folks don&apos;t copy/paste the pattern elsewhere without realizing that it&apos;s a leak.

&gt; Source/WebCore/bindings/v8/V8DOMWrapper.cpp:154
&gt; +v8::Handle&lt;v8::Function&gt; V8DOMWrapper::toFunction(v8::Handle&lt;v8::Object&gt; object, AtomicString name, v8::Isolate* isolate)

AtomicString -&gt; const AtomicString&amp; ?

&gt; Source/WebCore/dom/CustomElementConstructor.h:60
&gt; +    void willDestroyDocument();

Should this class be a ContextDestructionObserver?

&gt; Source/WebCore/dom/Document.h:1548
&gt; +    OwnPtr&lt;CustomElementRegistry&gt; m_registry;

CustomElementRegistry is RefCounted but here you&apos;re using an OwnPtr.  Perhaps CustomElementRegistry should not be RefCounted?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820436</commentid>
    <comment_count>59</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-30 12:52:26 -0800</bug_when>
    <thetext>This iteration looks like a big improvement.  I don&apos;t fully understand where the storage went, which means I&apos;ll need to study it some more.  dominicc has a bunch of good comments.

One thing that worries me is all the calls to V8&apos;s Get() function.  It&apos;s tricky to read back from the JavaScript environment because the web page might have rewired things in a strange way.  Also, every call to Get() can end up running JavaScript, we need to be prepared to re-enter WebCore at each of these call sites.  If we can&apos;t eliminate the Get() calls, perhaps we should have tests that use __defineGetter__ to hook each one so that ClusterFuzz will have some seed material to hammer us on re-entrancy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820964</commentid>
    <comment_count>60</comment_count>
      <attachid>185411</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-01-30 18:57:53 -0800</bug_when>
    <thetext>Comment on attachment 185411
Patch

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

Dominic, Adam, Thanks for another review!
Since I&apos;m under gardener duty, I&apos;ll be back this next week.

&gt;&gt; Source/WebCore/bindings/v8/CustomElementHelpers.cpp:66
&gt;&gt; +bool CustomElementHelpers::isCustomElementsAllowed(ScriptState* state)
&gt; 
&gt; It seems grammatically weird to have is with plural elements. But maybe the pull of is for a boolean accessor is irresistibile?

Hm. Renamed this to avoid isFeatureAllowed() to avoid such a complication.

&gt;&gt; Source/WebCore/bindings/v8/CustomElementHelpers.h:45
&gt;&gt; +    static void initializeConstructorWrapper(CustomElementConstructor*, const ScriptValue&amp;, ScriptState*);
&gt; 
&gt; I&apos;d name the second parameter.  It&apos;s not clear what ScriptValue you&apos;re supposed to pass here.

Done.

&gt;&gt; Source/WebCore/bindings/v8/V8AdaptorFunction.cpp:51
&gt;&gt; +    v8::Persistent&lt;v8::FunctionTemplate&gt; newTemplate = v8::Persistent&lt;v8::FunctionTemplate&gt;::New(v8::FunctionTemplate::New());
&gt; 
&gt; I might add a comment that this leak is intentional so that folks don&apos;t copy/paste the pattern elsewhere without realizing that it&apos;s a leak.

Right. Should do.

&gt;&gt; Source/WebCore/bindings/v8/V8AdaptorFunction.h:47
&gt;&gt; +//      WebKit need it to associate each wrapper to its backing C++ object. We store it in an internal field of the wrapped object.
&gt; 
&gt; It looks like you use a hidden value, which is slightly different to an internal field.

Right. Fixed.

&gt;&gt; Source/WebCore/bindings/v8/V8AdaptorFunction.h:49
&gt;&gt; +// Once 1) is addresssed, we could attack 2) with it. 
&gt; 
&gt; How would 2 be attacked?
&gt; 
&gt; Because you can alternatively work around the problem with #1 by creating an object with a call-as-instance handler, right? The downside of this is that the type of custom element constructors will be object and not function until #1 is fixed.

My first version exposed the callable object directly. 
But it doesn&apos;t have any methods from Function since it is not a function as you mentioned.

Once #1 is fixed, we could just create a function instance for the specific type of C++ object.
I expect it not be a big deal since Function is inherited from Object and in many case they are compatible.

&gt;&gt; Source/WebCore/bindings/v8/V8HTMLCustomElement.cpp:65
&gt;&gt; +        wrapper-&gt;Set(v8String(&quot;constructor&quot;, isolate), constructorWapper);
&gt; 
&gt; In JavaScript, typically the constructor property is set on the prototype, not the instance.

Right. This is simply wrong. Altering the constructor is done when the prototype object is registered.
And, well, you are making a good point. I might need to spec clarification.

&gt;&gt; Source/WebCore/bindings/v8/custom/V8CustomElementConstructorCustom.cpp:43
&gt;&gt; +        return throwTypeError(&quot;DOM object constructor cannot be called as a function.&quot;, args.GetIsolate());
&gt; 
&gt; For consistency it might be nice to produce the same error V8 produces for the built-in constructors, namely a TypeError with &quot;Illegal constructor&quot;?
&gt; 
&gt; Does WebIDL define an error message for calling constructors as functions?

This error message is copied from a generated constructor. So I think this is same as other binding-backed constructors.
Try &quot;Image()&quot; for example.

&gt;&gt; Source/WebCore/dom/CustomElementConstructor.h:60
&gt;&gt; +    void willDestroyDocument();
&gt; 
&gt; Should this class be a ContextDestructionObserver?

That might be possible but I rather prefer to explicitly notify this from the Registry to emphasize the ownership.
DestructionObserver could be generalized to use both places though.

&gt;&gt; Source/WebCore/dom/Document.h:1548
&gt;&gt; +    OwnPtr&lt;CustomElementRegistry&gt; m_registry;
&gt; 
&gt; CustomElementRegistry is RefCounted but here you&apos;re using an OwnPtr.  Perhaps CustomElementRegistry should not be RefCounted?

Good catch! The class shoudn&apos;t ref-counted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821487</commentid>
    <comment_count>61</comment_count>
    <who name="Dominic Cooney">dominicc</who>
    <bug_when>2013-01-31 06:37:27 -0800</bug_when>
    <thetext>(In reply to comment #59)
&gt; One thing that worries me is all the calls to V8&apos;s Get() function.  It&apos;s tricky to read back from the JavaScript environment because the web page might have rewired things in a strange way.  Also, every call to Get() can end up running JavaScript, we need to be prepared to re-enter WebCore at each of these call sites.

This was my visceral reaction, but Get(&quot;prototype&quot;) on the constructor, provided you did not mix up setting prototype as v8::ReadOnly or mix up the constructor for another object, is safe I think since that will be non-writable, non-configurable?

But maybe I am missing a more creative way to attack this.

The &apos;prototype&apos; option once implemented will provide more opportunity for mischief.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821659</commentid>
    <comment_count>62</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-31 10:46:13 -0800</bug_when>
    <thetext>&gt; This was my visceral reaction, but Get(&quot;prototype&quot;) on the constructor, provided you did not mix up setting prototype as v8::ReadOnly or mix up the constructor for another object, is safe I think since that will be non-writable, non-configurable?

We should add LayoutTests for a bunch of ways of trying to attack it.  For example, we should try assignment, deleting and then assigning, as well as using __defineGetter__ to shadow it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827098</commentid>
    <comment_count>63</comment_count>
      <attachid>187003</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-02-07 00:18:12 -0800</bug_when>
    <thetext>Created attachment 187003
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827100</commentid>
    <comment_count>64</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-02-07 00:20:31 -0800</bug_when>
    <thetext>I tried to write some fuzzing code but Bug 109129 prevented me to do it.
The last patch changed to accept &quot;prototype&quot; parameter since I found that 
the default parameter behavior has ugliness in the spec (I filed a w3 bug for that.)
This patch doesn&apos;t support the default &quot;prototype&quot; parameter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827147</commentid>
    <comment_count>65</comment_count>
      <attachid>187003</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-07 01:05:35 -0800</bug_when>
    <thetext>Comment on attachment 187003
Patch

Attachment 187003 did not pass cr-linux-debug-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16443015</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827175</commentid>
    <comment_count>66</comment_count>
      <attachid>187003</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2013-02-07 01:29:58 -0800</bug_when>
    <thetext>Comment on attachment 187003
Patch

Attachment 187003 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/16431023</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827207</commentid>
    <comment_count>67</comment_count>
      <attachid>187003</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2013-02-07 02:28:58 -0800</bug_when>
    <thetext>Comment on attachment 187003
Patch

Attachment 187003 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/16445039</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827225</commentid>
    <comment_count>68</comment_count>
      <attachid>187035</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-02-07 02:52:23 -0800</bug_when>
    <thetext>Created attachment 187035
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828123</commentid>
    <comment_count>69</comment_count>
      <attachid>187223</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-02-07 20:06:31 -0800</bug_when>
    <thetext>Created attachment 187223
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833724</commentid>
    <comment_count>70</comment_count>
      <attachid>188486</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-02-14 23:10:23 -0800</bug_when>
    <thetext>Created attachment 188486
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833725</commentid>
    <comment_count>71</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-02-14 23:13:09 -0800</bug_when>
    <thetext>The last one contains a few fuzzing tests that I could figure out.
And they actually hit some crashes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834127</commentid>
    <comment_count>72</comment_count>
      <attachid>188486</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-15 10:06:25 -0800</bug_when>
    <thetext>Comment on attachment 188486
Patch

Attachment 188486 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/16556033

New failing tests:
media/video-controls-captions-trackmenu.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835094</commentid>
    <comment_count>73</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-02-17 20:15:56 -0800</bug_when>
    <thetext>(In reply to comment #72)
&gt; (From update of attachment 188486 [details])
&gt; Attachment 188486 [details] did not pass mac-ews (mac):
Seems a false positive. The new code isn&apos;t enabled on mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837580</commentid>
    <comment_count>74</comment_count>
      <attachid>188486</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-20 11:03:54 -0800</bug_when>
    <thetext>Comment on attachment 188486
Patch

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

Some minor comments below.  I have to run to a meeting.  I&apos;ll look more later today.

&gt; Source/WebCore/ChangeLog:3
&gt; +

You&apos;ve got an extra blank line here.

&gt; Source/WebCore/ChangeLog:155
&gt; +2013-01-29  Hajime Morrita  &lt;morrita@google.com&gt;

Looks like you&apos;ve got a second copy of the ChangeLog entry.

&gt; Source/WebCore/bindings/v8/CustomElementHelpers.cpp:47
&gt; +    v8::Handle&lt;v8::Value&gt; wrapperValue = WebCore::toV8(constructor, state-&gt;context()-&gt;Global(), state-&gt;context()-&gt;GetIsolate());

&quot;WebCore::&quot; &lt;-- You should be able to drop this prefix.

&gt; Source/WebCore/bindings/v8/CustomElementHelpers.cpp:53
&gt; +    //   - __defineSetter__ nor __defineGetter__ also doesn&apos;t work against function objects and

I&apos;m not sure that&apos;s true.  Try typing the following into the web inspector:

window.alert.__defineGetter__(&quot;foo&quot;, function() { console.log(&quot;hi&quot;) } ); window.alert.foo

&gt; Source/WebCore/bindings/v8/CustomElementHelpers.cpp:83
&gt; +    // document.register() sets the construcdtor property, so the prototype shouldn&apos;t have one.

typo: construcdtor

&gt; Source/WebCore/bindings/v8/CustomElementHelpers.cpp:92
&gt; +    v8::Handle&lt;v8::Object&gt; spanPrototype = v8::Handle&lt;v8::Object&gt;::Cast(spanConstructor-&gt;Get(v8String(&quot;prototype&quot;, state-&gt;context()-&gt;GetIsolate())));

This execute arbitrary script.

&gt; Source/WebCore/bindings/v8/CustomElementHelpers.cpp:95
&gt; +    v8::Handle&lt;v8::Object&gt; paragraphConstructor = v8::Handle&lt;v8::Object&gt;::Cast(perContextData-&gt;constructorForType(&amp;V8HTMLParagraphElement::info));

Why does this fall back to the &lt;p&gt; prototype?

&gt; Source/WebCore/bindings/v8/V8AdaptorFunction.cpp:46
&gt; +    if (!isolate)
&gt; +        isolate = v8::Isolate::GetCurrent();

Aren&apos;t isolate parameters required for getTemplate now?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837708</commentid>
    <comment_count>75</comment_count>
      <attachid>188486</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-20 13:43:16 -0800</bug_when>
    <thetext>Comment on attachment 188486
Patch

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

&gt; Source/WebCore/dom/CustomElementConstructor.cpp:65
&gt; +void CustomElementConstructor::willDestroyDocument()
&gt; +{
&gt; +    m_document = 0;
&gt; +}

Should this just be a ContextDestructionObserver?

&gt; Source/WebCore/dom/CustomElementRegistry.cpp:55
&gt; +    for (ConstructorMap::iterator i = m_constructors.begin(); i != m_constructors.end(); ++i)
&gt; +        i-&gt;value-&gt;willDestroyDocument();

This isn&apos;t needed if the constructors are ContextDestructionObservers.

&gt; Source/WebCore/dom/CustomElementRegistry.cpp:81
&gt; +        reservedNames.append(&quot;annotation-xml&quot;);
&gt; +        reservedNames.append(&quot;color-profile&quot;);
&gt; +        reservedNames.append(&quot;font-face&quot;);
&gt; +        reservedNames.append(&quot;font-face-src&quot;);
&gt; +        reservedNames.append(&quot;font-face-uri&quot;);
&gt; +        reservedNames.append(&quot;font-face-format&quot;);
&gt; +        reservedNames.append(&quot;font-face-name&quot;);
&gt; +        reservedNames.append(&quot;missing-glyph&quot;);

We should have constants for these already in MathMLNames or SVGNames, right?

&gt; Source/WebCore/dom/CustomElementRegistry.cpp:128
&gt; +    RefPtr&lt;CustomElementConstructor&gt; fresh = CustomElementConstructor::create(state, m_document, newName, &quot;HTMLCustomElement&quot;, prototypeValue);
&gt; +    if (!fresh) {
&gt; +        ec = INVALID_STATE_ERR;
&gt; +        return 0;
&gt; +    }
&gt; +        
&gt; +    m_constructors.add(fresh-&gt;tagName().impl(), fresh);

The main problem with this patch is that if CustomElementHelpers::isValidPrototypeParameter or similar executes JavaScript, then the member variables touched in the remainder of this function might have already been destroyed.

&gt; Source/WebCore/dom/CustomElementRegistry.cpp:132
&gt; +CustomElementConstructor* CustomElementRegistry::find(const QualifiedName&amp; name) const

So this function return a PassRefPtr to ensure that all callers keep a reference to the CustomElementConstructor?

&gt; Source/WebCore/dom/CustomElementRegistry.cpp:141
&gt; +    if (CustomElementConstructor* found = find(name))
&gt; +        return found-&gt;createElement();

For example, here |found| might be destoryed by JavaScript called via createElement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837711</commentid>
    <comment_count>76</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-20 13:44:21 -0800</bug_when>
    <thetext>This patch generally looks good.  I&apos;m only really worried about use-after-free issues that might be caused by re-entering JavaScript via setters and getters as noted above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838273</commentid>
    <comment_count>77</comment_count>
      <attachid>189493</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-02-21 03:02:32 -0800</bug_when>
    <thetext>Created attachment 189493
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838276</commentid>
    <comment_count>78</comment_count>
      <attachid>188486</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-02-21 03:07:54 -0800</bug_when>
    <thetext>Comment on attachment 188486
Patch

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

Adam, thanks for your patient and thoughtful review.
I tried to tighten up the guard against script execution which comes from the reentrancy.

&gt;&gt; Source/WebCore/ChangeLog:3
&gt;&gt; +
&gt; 
&gt; You&apos;ve got an extra blank line here.

Oops. Removed.

&gt;&gt; Source/WebCore/ChangeLog:155
&gt;&gt; +2013-01-29  Hajime Morrita  &lt;morrita@google.com&gt;
&gt; 
&gt; Looks like you&apos;ve got a second copy of the ChangeLog entry.

Removed.

&gt;&gt; Source/WebCore/bindings/v8/CustomElementHelpers.cpp:47
&gt;&gt; +    v8::Handle&lt;v8::Value&gt; wrapperValue = WebCore::toV8(constructor, state-&gt;context()-&gt;Global(), state-&gt;context()-&gt;GetIsolate());
&gt; 
&gt; &quot;WebCore::&quot; &lt;-- You should be able to drop this prefix.

Right. Removed.

&gt;&gt; Source/WebCore/bindings/v8/CustomElementHelpers.cpp:53
&gt;&gt; +    //   - __defineSetter__ nor __defineGetter__ also doesn&apos;t work against function objects and
&gt; 
&gt; I&apos;m not sure that&apos;s true.  Try typing the following into the web inspector:
&gt; 
&gt; window.alert.__defineGetter__(&quot;foo&quot;, function() { console.log(&quot;hi&quot;) } ); window.alert.foo

My explanation was unclear. __defineGetter__ doesn&apos;t work for &quot;prototype&quot; and property of function objects. 
I revised this comment.

&gt;&gt; Source/WebCore/bindings/v8/CustomElementHelpers.cpp:83
&gt;&gt; +    // document.register() sets the construcdtor property, so the prototype shouldn&apos;t have one.
&gt; 
&gt; typo: construcdtor

Fixed.

&gt;&gt; Source/WebCore/bindings/v8/V8AdaptorFunction.cpp:46
&gt;&gt; +        isolate = v8::Isolate::GetCurrent();
&gt; 
&gt; Aren&apos;t isolate parameters required for getTemplate now?

Yes it is since the template is stored in per-isolate data.

&gt;&gt; Source/WebCore/dom/CustomElementConstructor.cpp:65
&gt;&gt; +}
&gt; 
&gt; Should this just be a ContextDestructionObserver?

It should. Fixed.

&gt;&gt; Source/WebCore/dom/CustomElementRegistry.cpp:81
&gt;&gt; +        reservedNames.append(&quot;missing-glyph&quot;);
&gt; 
&gt; We should have constants for these already in MathMLNames or SVGNames, right?

Good point. Will use such constants.

&gt;&gt; Source/WebCore/dom/CustomElementRegistry.cpp:128
&gt;&gt; +    m_constructors.add(fresh-&gt;tagName().impl(), fresh);
&gt; 
&gt; The main problem with this patch is that if CustomElementHelpers::isValidPrototypeParameter or similar executes JavaScript, then the member variables touched in the remainder of this function might have already been destroyed.

Well, that&apos;s a frightening idea, but that&apos;s possible...
I&apos;ll turn this registory class a Refcounted and protect it self during this function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838331</commentid>
    <comment_count>79</comment_count>
      <attachid>189493</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-21 04:31:03 -0800</bug_when>
    <thetext>Comment on attachment 189493
Patch

Attachment 189493 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16652950

New failing tests:
fast/dom/custom/document-register-reentrant-returning-fake.html
fast/dom/prototype-chain.html
fast/dom/custom/document-register-reentrant-null-constructor.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838354</commentid>
    <comment_count>80</comment_count>
      <attachid>189493</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-21 05:24:47 -0800</bug_when>
    <thetext>Comment on attachment 189493
Patch

Attachment 189493 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16694008

New failing tests:
fast/dom/custom/document-register-reentrant-returning-fake.html
fast/dom/prototype-chain.html
fast/dom/custom/document-register-reentrant-null-constructor.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838451</commentid>
    <comment_count>81</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2013-02-21 08:32:17 -0800</bug_when>
    <thetext>(In reply to comment #78)
&gt; (From update of attachment 188486 [details])

&gt; &gt;&gt; Source/WebCore/bindings/v8/CustomElementHelpers.cpp:53
&gt; &gt;&gt; +    //   - __defineSetter__ nor __defineGetter__ also doesn&apos;t work against function objects and
&gt; &gt; 
&gt; &gt; I&apos;m not sure that&apos;s true.  Try typing the following into the web inspector:
&gt; &gt; 
&gt; &gt; window.alert.__defineGetter__(&quot;foo&quot;, function() { console.log(&quot;hi&quot;) } ); window.alert.foo
&gt; 
&gt; My explanation was unclear. __defineGetter__ doesn&apos;t work for &quot;prototype&quot; and property of function objects. 
&gt; I revised this comment.

The &apos;prototype&apos; property of functions are non configurable and for the WebIDL interface object we even make it non writable. http://www.w3.org/TR/WebIDL/#interface-object

Also, we should stop using __defineGetter__ (both in code and in prose). Please refer to the standard ES5 object model terms and APIs. If you used the relevant terms, (non configurable in this case) it would have been a lot easier to follow why user code cannot add a getter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838540</commentid>
    <comment_count>82</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-21 10:06:29 -0800</bug_when>
    <thetext>&gt; Also, we should stop using __defineGetter__ (both in code and in prose). Please refer to the standard ES5 object model terms and APIs. If you used the relevant terms, (non configurable in this case) it would have been a lot easier to follow why user code cannot add a getter.

Sorry, I haven&apos;t learned the details of the new object model.  Is there something less intimidating than the ES5 spec that I should read to better understand how this works in practice?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838544</commentid>
    <comment_count>83</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2013-02-21 10:12:27 -0800</bug_when>
    <thetext>(In reply to comment #82)
&gt; &gt; Also, we should stop using __defineGetter__ (both in code and in prose). Please refer to the standard ES5 object model terms and APIs. If you used the relevant terms, (non configurable in this case) it would have been a lot easier to follow why user code cannot add a getter.
&gt; 
&gt; Sorry, I haven&apos;t learned the details of the new object model.  Is there something less intimidating than the ES5 spec that I should read to better understand how this works in practice?

I apologize if my tone was a bit harsh. That was not my intention.

I haven&apos;t read the link below in detail but Tom is a member of TC39 so I assume it is all correct.

http://soft.vub.ac.be/~tvcutsem/invokedynamic/js-object-model</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839171</commentid>
    <comment_count>84</comment_count>
      <attachid>189666</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-02-21 20:16:10 -0800</bug_when>
    <thetext>Created attachment 189666
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839172</commentid>
    <comment_count>85</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-02-21 20:19:04 -0800</bug_when>
    <thetext>Updated the test to fix the failure, and revised the comment to in the standard term.
The fuzzing test happened to have been using definedProperty() already :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839224</commentid>
    <comment_count>86</comment_count>
      <attachid>189666</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-21 22:04:44 -0800</bug_when>
    <thetext>Comment on attachment 189666
Patch

Attachment 189666 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16690616

New failing tests:
fast/dom/prototype-chain.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839324</commentid>
    <comment_count>87</comment_count>
      <attachid>189706</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-02-22 00:25:31 -0800</bug_when>
    <thetext>Created attachment 189706
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839632</commentid>
    <comment_count>88</comment_count>
      <attachid>189706</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2013-02-22 08:59:55 -0800</bug_when>
    <thetext>Comment on attachment 189706
Patch

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

&gt; Source/WebCore/ChangeLog:49
&gt; +        [JS Adaptor Fiction] &lt;-(hidden property)-&gt; [JS Wrapper Object] -(internal field)-&gt; [C++ Native object]

fiction?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839711</commentid>
    <comment_count>89</comment_count>
      <attachid>189706</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-22 10:32:54 -0800</bug_when>
    <thetext>Comment on attachment 189706
Patch

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

&gt; Source/WebCore/bindings/v8/CustomElementHelpers.cpp:66
&gt; +static bool hasNoBuiltinsInPrototype(v8::Handle&lt;v8::Object&gt; htmlPrototype, v8::Handle&lt;v8::Value&gt; chain)

What a strange function.  Why is this needed?

&gt; Source/WebCore/bindings/v8/V8AdaptorFunction.cpp:46
&gt; +    if (!isolate)
&gt; +        isolate = v8::Isolate::GetCurrent();

I meant that I think everyone that calls this function will pass a non-zero isolate argument.

&gt; Source/WebCore/bindings/v8/V8DOMConfiguration.cpp:71
&gt; +        prototype-&gt;SetInternalFieldCount(prototypeInternalFieldcount);

This seems like a bit of a hack.  Perhaps we should skip this hack and make sure we fix bug 110436 before enabling this feature.

&gt; Source/WebCore/bindings/v8/V8HTMLCustomElement.cpp:42
&gt; +#if ENABLE(CUSTOM_ELEMENTS)

We usually put file-level ifdefs just after config.h with a blank line above and below.

&gt; Source/WebCore/bindings/v8/V8HTMLCustomElement.h:56
&gt; +        return v8::Handle&lt;v8::Object&gt;::Cast(v8NullWithCheck(isolate));

This is a bad cast.  v8::Null is not a v8::Object.  This function should probably return a v8::Value rather than a v8::Object.

&gt; Source/WebCore/bindings/v8/custom/V8CustomElementConstructorCustom.cpp:51
&gt; +    return V8HTMLCustomElement::toV8(element.get(), args.Holder(), args.GetIsolate());

Yeah, looks like the caller can handle a v8::Value.

&gt; Source/WebCore/dom/CustomElementRegistry.cpp:51
&gt; +#if ENABLE(CUSTOM_ELEMENTS)

We should move all these ifdefs to the usual place below config.h

&gt; Source/WebCore/dom/CustomElementRegistry.cpp:95
&gt; +    if (WTF::notFound != reservedNames.find(name))

&quot;WTF::&quot; shouldn&apos;t be needed

&gt; Source/WebCore/dom/CustomElementRegistry.cpp:141
&gt; +    RefPtr&lt;CustomElementConstructor&gt; fresh = CustomElementConstructor::create(state, document(), newName, &quot;HTMLCustomElement&quot;, prototypeValue);

fresh &lt;-- I probably would have called this &quot;constructor&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839713</commentid>
    <comment_count>90</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-22 10:34:15 -0800</bug_when>
    <thetext>The above are just nits.  The only think I&apos;m not super happy about is the abuse of the internal field count.  I&apos;ll leave it up to you to decide how to resolve that issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840339</commentid>
    <comment_count>91</comment_count>
      <attachid>189706</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-02-23 02:08:52 -0800</bug_when>
    <thetext>Comment on attachment 189706
Patch

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

Adam, Dimitri, thanks for taking a look and for the thorough review.
I&apos;ll re-think how to address prototype hack when extending this to allow arbitrary HTMLElement subclasses on Bug 110436.
It will need a certain amount of hassle thus will be done in separate change.

&gt;&gt; Source/WebCore/ChangeLog:49
&gt;&gt; +        [JS Adaptor Fiction] &lt;-(hidden property)-&gt; [JS Wrapper Object] -(internal field)-&gt; [C++ Native object]
&gt; 
&gt; fiction?

Ouch, my spellchecker went too far :-(

&gt;&gt; Source/WebCore/bindings/v8/CustomElementHelpers.cpp:66
&gt;&gt; +static bool hasNoBuiltinsInPrototype(v8::Handle&lt;v8::Object&gt; htmlPrototype, v8::Handle&lt;v8::Value&gt; chain)
&gt; 
&gt; What a strange function.  Why is this needed?

As you pointed out below, this is because of bug 110436.

&gt;&gt; Source/WebCore/bindings/v8/V8AdaptorFunction.cpp:46
&gt;&gt; +        isolate = v8::Isolate::GetCurrent();
&gt; 
&gt; I meant that I think everyone that calls this function will pass a non-zero isolate argument.

Ah, good news! I&apos;ll turn this to ASSERT().

&gt;&gt; Source/WebCore/bindings/v8/V8DOMConfiguration.cpp:71
&gt;&gt; +        prototype-&gt;SetInternalFieldCount(prototypeInternalFieldcount);
&gt; 
&gt; This seems like a bit of a hack.  Perhaps we should skip this hack and make sure we fix bug 110436 before enabling this feature.

True. This is kind of a bandaid.
I don&apos;t have definitive idea on how to address bug 110436, but this will surely be changed significantly during the fix.

&gt;&gt; Source/WebCore/bindings/v8/V8HTMLCustomElement.cpp:42
&gt;&gt; +#if ENABLE(CUSTOM_ELEMENTS)
&gt; 
&gt; We usually put file-level ifdefs just after config.h with a blank line above and below.

Will fix.

&gt;&gt; Source/WebCore/bindings/v8/V8HTMLCustomElement.h:56
&gt;&gt; +        return v8::Handle&lt;v8::Object&gt;::Cast(v8NullWithCheck(isolate));
&gt; 
&gt; This is a bad cast.  v8::Null is not a v8::Object.  This function should probably return a v8::Value rather than a v8::Object.

Right. Will fix.

&gt;&gt; Source/WebCore/dom/CustomElementRegistry.cpp:51
&gt;&gt; +#if ENABLE(CUSTOM_ELEMENTS)
&gt; 
&gt; We should move all these ifdefs to the usual place below config.h

Will fix.

&gt;&gt; Source/WebCore/dom/CustomElementRegistry.cpp:95
&gt;&gt; +    if (WTF::notFound != reservedNames.find(name))
&gt; 
&gt; &quot;WTF::&quot; shouldn&apos;t be needed

Will fix.

&gt;&gt; Source/WebCore/dom/CustomElementRegistry.cpp:141
&gt;&gt; +    RefPtr&lt;CustomElementConstructor&gt; fresh = CustomElementConstructor::create(state, document(), newName, &quot;HTMLCustomElement&quot;, prototypeValue);
&gt; 
&gt; fresh &lt;-- I probably would have called this &quot;constructor&quot;

Right. there are no non-fresh constructor...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840340</commentid>
    <comment_count>92</comment_count>
      <attachid>189917</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-02-23 02:10:25 -0800</bug_when>
    <thetext>Created attachment 189917
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840350</commentid>
    <comment_count>93</comment_count>
      <attachid>189917</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-23 03:25:21 -0800</bug_when>
    <thetext>Comment on attachment 189917
Patch for landing

Rejecting attachment 189917 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=gce-cq-03&apos;, &apos;apply-attachment&apos;, &apos;--no-update&apos;, &apos;--non-interactive&apos;, 189917, &apos;--port=chromium-xvfb&apos;]&quot; exit_code: 2 cwd: /mnt/git/webkit-commit-queue

Last 500 characters of output:
er-reentrant-returning-fake.html
patching file LayoutTests/fast/dom/custom/document-register-reentrant-throwing-constructor-expected.txt
patching file LayoutTests/fast/dom/custom/document-register-reentrant-throwing-constructor.html
patching file LayoutTests/fast/dom/custom/resources/document-register-fuzz.js
patching file LayoutTests/platform/mac/TestExpectations

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;]&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue

Full output: http://queues.webkit.org/results/16716631</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840563</commentid>
    <comment_count>94</comment_count>
      <attachid>189963</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-02-24 01:27:29 -0800</bug_when>
    <thetext>Created attachment 189963
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840591</commentid>
    <comment_count>95</comment_count>
      <attachid>189963</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-24 05:23:32 -0800</bug_when>
    <thetext>Comment on attachment 189963
Patch for landing

Clearing flags on attachment: 189963

Committed r143865: &lt;http://trac.webkit.org/changeset/143865&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840592</commentid>
    <comment_count>96</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-24 05:23:42 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170372</attachid>
            <date>2012-10-24 05:23:43 -0700</date>
            <delta_ts>2012-10-25 02:33:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100229-20121024212218.patch</filename>
            <type>text/plain</type>
            <size>58922</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyMzM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZTdkNGEyNzgy
ODRjYTE5OWQzMGRiMGFmMjhkMDc0YmQ0ZDQ5NjczYy4uN2Y5MGQ2YjgyOTQ0NmNmMTEzZWJlMWIy
NzQwNzBmMWFjZjE3MzdiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtOTk5LDYgKzk5OSw3IEBACiAg
ICAgICAgICAgICAnZG9tL0RldmljZU1vdGlvbkV2ZW50LmlkbCcsCiAgICAgICAgICAgICAnZG9t
L0RldmljZU9yaWVudGF0aW9uRXZlbnQuaWRsJywKICAgICAgICAgICAgICdkb20vRG9jdW1lbnQu
aWRsJywKKyAgICAgICAgICAgICdkb20vRG9jdW1lbnRDdXN0b21FbGVtZW50LmlkbCcsCiAgICAg
ICAgICAgICAnZG9tL0RvY3VtZW50RnJhZ21lbnQuaWRsJywKICAgICAgICAgICAgICdkb20vRG9j
dW1lbnRUeXBlLmlkbCcsCiAgICAgICAgICAgICAnZG9tL0VsZW1lbnQuaWRsJywKQEAgLTIyMjks
NiArMjIzMCw4IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvRE9NRGF0YS5oJywKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuY3BwJywKICAgICAgICAgICAgICdiaW5k
aW5ncy92OC9ET01EYXRhU3RvcmUuaCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvRE9NRnVu
Y3Rpb24uaCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvRE9NRnVuY3Rpb24uY3BwJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9ET01UcmFuc2FjdGlvbi5jcHAnLAogICAgICAgICAgICAg
J2JpbmRpbmdzL3Y4L0RPTVRyYW5zYWN0aW9uLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4
L0RPTVdyYXBwZXJXb3JsZC5jcHAnLApAQCAtMjMyMCw2ICsyMzIzLDggQEAKICAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9WOEV2ZW50TGlzdGVuZXIuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mv
djgvVjhFdmVudExpc3RlbmVyTGlzdC5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4
RXZlbnRMaXN0ZW5lckxpc3QuaCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhGdW5jdGlv
bi5oJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEZ1bmN0aW9uLmNwcCcsCiAgICAgICAg
ICAgICAnYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwJywKICAgICAgICAgICAgICdiaW5k
aW5ncy92OC9WOEdDQ29udHJvbGxlci5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEdD
Rm9yQ29udGV4dERpc3Bvc2UuY3BwJywKQEAgLTM4MDMsNiArMzgwOCwxMCBAQAogICAgICAgICAg
ICAgJ2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5jcHAnLAogICAgICAgICAgICAgJ2RvbS9D
b250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlci5jcHAnLAogICAgICAgICAgICAgJ2RvbS9Dcm9zc1Ro
cmVhZFRhc2suaCcsCisgICAgICAgICAgICAnZG9tL0N1c3RvbUVsZW1lbnREZWZpbml0aW9uLmNw
cCcsCisgICAgICAgICAgICAnZG9tL0N1c3RvbUVsZW1lbnREZWZpbml0aW9uLmgnLAorICAgICAg
ICAgICAgJ2RvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuY3BwJywKKyAgICAgICAgICAgICdkb20v
Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmgnLAogICAgICAgICAgICAgJ2RvbS9DdXN0b21FdmVudC5j
cHAnLAogICAgICAgICAgICAgJ2RvbS9DdXN0b21FdmVudC5oJywKICAgICAgICAgICAgICdkb20v
RE9NQWxsSW5PbmUuY3BwJywKQEAgLTM4MzcsNiArMzg0Niw4IEBACiAgICAgICAgICAgICAnZG9t
L0RldmljZU9yaWVudGF0aW9uRXZlbnQuY3BwJywKICAgICAgICAgICAgICdkb20vRGV2aWNlT3Jp
ZW50YXRpb25FdmVudC5oJywKICAgICAgICAgICAgICdkb20vRG9jdW1lbnQuY3BwJywKKyAgICAg
ICAgICAgICdkb20vRG9jdW1lbnRDdXN0b21FbGVtZW50LmNwcCcsCisgICAgICAgICAgICAnZG9t
L0RvY3VtZW50Q3VzdG9tRWxlbWVudC5oJywKICAgICAgICAgICAgICdkb20vRG9jdW1lbnRFdmVu
dFF1ZXVlLmNwcCcsCiAgICAgICAgICAgICAnZG9tL0RvY3VtZW50RXZlbnRRdWV1ZS5oJywKICAg
ICAgICAgICAgICdkb20vRG9jdW1lbnRGcmFnbWVudC5jcHAnLApAQCAtNDA0Miw2ICs0MDUzLDcg
QEAKICAgICAgICAgICAgICdodG1sL0NsYXNzTGlzdC5oJywKICAgICAgICAgICAgICdodG1sL0Nv
bG9ySW5wdXRUeXBlLmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9Db2xvcklucHV0VHlwZS5oJywK
KyAgICAgICAgICAgICdodG1sL0NvbG9ySW5wdXRUeXBlLmgnLAogICAgICAgICAgICAgJ2h0bWwv
RE9NRm9ybURhdGEuY3BwJywKICAgICAgICAgICAgICdodG1sL0RPTUZvcm1EYXRhLmgnLAogICAg
ICAgICAgICAgJ2h0bWwvRE9NU2V0dGFibGVUb2tlbkxpc3QuY3BwJywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMu
Y3BwCmluZGV4IDdjZDg3ZDEzZTgxZTU2YTE2MTJhNjNlNmRkMGYzZTBiMzIyNmMwY2UuLmMwYTM1
OWVmMzEwMGMxOThmN2IyYzA5NmY2YjAxZmRiYmFjMzA1YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNw
cApAQCAtMTkzLDYgKzE5MywxMCBAQCBib29sIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmlzU2hh
ZG93RE9NRW5hYmxlZCA9IGZhbHNlOwogYm9vbCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjppc0F1
dGhvclNoYWRvd0RPTUZvckFueUVsZW1lbnRFbmFibGVkID0gZmFsc2U7CiAjZW5kaWYKIAorI2lm
IEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorYm9vbCBSdW50aW1lRW5hYmxlZEZlYXR1cmVz
Ojppc0N1c3RvbURPTUVsZW1lbnRzRW5hYmxlZCA9IGZhbHNlOworI2VuZGlmCisKICNpZiBFTkFC
TEUoU1RZTEVfU0NPUEVEKQogYm9vbCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjppc1N0eWxlU2Nv
cGVkRW5hYmxlZCA9IGZhbHNlOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oCmluZGV4IDMzYTdlNmZl
NWI3ZDdiYTI0MWZmNzM2YjI4MGE2YzhmYTllZmQzN2UuLjM1NWMxNTM4ZTg3NTkxOTUzYzQyM2U5
NTY2NmQ1NTBmMDY0MDVmODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dl
bmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oCkBAIC0yMTUsNiArMjE1LDExIEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRBdXRob3JTaGFkb3dET01Gb3JBbnlFbGVtZW50
RW5hYmxlZChib29sIGlzRW5hYmxlZCkgeyBpc0F1dGhvclNoYWRvd0RPTUZvckFueUVsZW1lbnRF
bmFibGVkID0gaXNFbmFibGVkOyB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDVVNUT01fRE9NX0VM
RU1FTlRTKQorICAgIHN0YXRpYyBib29sIGN1c3RvbURPTUVsZW1lbnRzRW5hYmxlZCgpIHsgcmV0
dXJuIGlzQ3VzdG9tRE9NRWxlbWVudHNFbmFibGVkOyB9CisgICAgc3RhdGljIHZvaWQgc2V0Q3Vz
dG9tRE9NRWxlbWVudHMoYm9vbCBpc0VuYWJsZWQpIHsgaXNDdXN0b21ET01FbGVtZW50c0VuYWJs
ZWQgPSBpc0VuYWJsZWQ7IH0KKyNlbmRpZgorCiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKICAg
ICBzdGF0aWMgYm9vbCBzdHlsZVNjb3BlZEVuYWJsZWQoKSB7IHJldHVybiBpc1N0eWxlU2NvcGVk
RW5hYmxlZDsgfQogICAgIHN0YXRpYyB2b2lkIHNldFN0eWxlU2NvcGVkRW5hYmxlZChib29sIGlz
RW5hYmxlZCkgeyBpc1N0eWxlU2NvcGVkRW5hYmxlZCA9IGlzRW5hYmxlZDsgfQpAQCAtMzI4LDYg
KzMzMywxMCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIGlzQXV0aG9yU2hhZG93RE9NRm9y
QW55RWxlbWVudEVuYWJsZWQ7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDVVNUT01fRE9NX0VMRU1F
TlRTKQorICAgIHN0YXRpYyBib29sIGlzQ3VzdG9tRE9NRWxlbWVudHNFbmFibGVkOworI2VuZGlm
CisKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQogICAgIHN0YXRpYyBib29sIGlzU3R5bGVTY29w
ZWRFbmFibGVkOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvclY4LnBtCmluZGV4IDU0NzcyZmY5ODNiOGI5NDgzMTZlZjBlNDY2OGMx
N2UyZDZjOTIwODIuLjg2OTRjNmZjNGNmNDk0NWY0ZjA4YWRmOWU1MWUzNGQzZDNlMjUwNDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4
LnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4
LnBtCkBAIC0zNDYsNyArMzQ2LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKIGNsYXNzIFY4JHtuYXRpdmVUeXBlfUNvbnN0cnVjdG9y
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IEdldFRlbXBsYXRlKCk7CisgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPiBHZXRUZW1wbGF0ZSh2b2lkKiA9IDApOwogICAgIHN0YXRpYyBXcmFwcGVyVHlw
ZUluZm8gaW5mbzsKIH07CiAKQEAgLTM3Nyw3ICszNzcsNyBAQCBFTkQKICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCA8PEVORCk7CiAgICAgc3RhdGljIGJvb2wgSGFzSW5zdGFuY2Uodjg6OkhhbmRs
ZTx2ODo6VmFsdWU+KTsKICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IEdldFJhd1RlbXBsYXRlKCk7Ci0gICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiBHZXRUZW1wbGF0ZSgpOworICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0VGVtcGxhdGUodm9pZCogPSAwKTsKICAgICBzdGF0
aWMgJHtuYXRpdmVUeXBlfSogdG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3Qp
CiAgICAgewogICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwke25hdGl2ZVR5cGV9Kj4o
b2JqZWN0LT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQodjhET01XcmFwcGVyT2JqZWN0SW5k
ZXgpKTsKQEAgLTIwNTksMTIgKzIwNTksMTIgQEAgc3ViIEdlbmVyYXRlTmFtZWRDb25zdHJ1Y3Rv
ckNhbGxiYWNrCiAKICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQWN0
aXZlRE9NT2JqZWN0In0pIHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKLVdy
YXBwZXJUeXBlSW5mbyBWOCR7aW1wbENsYXNzTmFtZX1Db25zdHJ1Y3Rvcjo6aW5mbyA9IHsgVjgk
e2ltcGxDbGFzc05hbWV9Q29uc3RydWN0b3I6OkdldFRlbXBsYXRlLCBWOCR7aW1wbENsYXNzTmFt
ZX06OmRlcmVmT2JqZWN0LCBWOCR7aW1wbENsYXNzTmFtZX06OnRvQWN0aXZlRE9NT2JqZWN0LCAw
LCBWOCR7aW1wbENsYXNzTmFtZX06Omluc3RhbGxQZXJDb250ZXh0UHJvdG90eXBlUHJvcGVydGll
cywgMCwgV3JhcHBlclR5cGVPYmplY3RQcm90b3R5cGUgfTsKK1dyYXBwZXJUeXBlSW5mbyBWOCR7
aW1wbENsYXNzTmFtZX1Db25zdHJ1Y3Rvcjo6aW5mbyA9IHsgVjgke2ltcGxDbGFzc05hbWV9Q29u
c3RydWN0b3I6OkdldFRlbXBsYXRlLCAwLCBWOCR7aW1wbENsYXNzTmFtZX06OmRlcmVmT2JqZWN0
LCBWOCR7aW1wbENsYXNzTmFtZX06OnRvQWN0aXZlRE9NT2JqZWN0LCAwLCBWOCR7aW1wbENsYXNz
TmFtZX06Omluc3RhbGxQZXJDb250ZXh0UHJvdG90eXBlUHJvcGVydGllcywgMCwgV3JhcHBlclR5
cGVPYmplY3RQcm90b3R5cGUgfTsKIAogRU5ECiAgICAgfSBlbHNlIHsKICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsIDw8RU5EKTsKLVdyYXBwZXJUeXBlSW5mbyBWOCR7aW1wbENsYXNzTmFtZX1D
b25zdHJ1Y3Rvcjo6aW5mbyA9IHsgVjgke2ltcGxDbGFzc05hbWV9Q29uc3RydWN0b3I6OkdldFRl
bXBsYXRlLCAwLCAwLCAwLCBWOCR7aW1wbENsYXNzTmFtZX06Omluc3RhbGxQZXJDb250ZXh0UHJv
dG90eXBlUHJvcGVydGllcywgMCwgV3JhcHBlclR5cGVPYmplY3RQcm90b3R5cGUgfTsKK1dyYXBw
ZXJUeXBlSW5mbyBWOCR7aW1wbENsYXNzTmFtZX1Db25zdHJ1Y3Rvcjo6aW5mbyA9IHsgVjgke2lt
cGxDbGFzc05hbWV9Q29uc3RydWN0b3I6OkdldFRlbXBsYXRlLCAwLCAwLCAwLCAwLCBWOCR7aW1w
bENsYXNzTmFtZX06Omluc3RhbGxQZXJDb250ZXh0UHJvdG90eXBlUHJvcGVydGllcywgMCwgV3Jh
cHBlclR5cGVPYmplY3RQcm90b3R5cGUgfTsKIAogRU5ECiAgICAgfQpAQCAtMjE0NSw3ICsyMTQ1
LDcgQEAgRU5ECiAKICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwogCi12ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjgke2ltcGxDbGFzc05hbWV9Q29uc3RydWN0b3I6
OkdldFRlbXBsYXRlKCkKK3Y4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOCR7
aW1wbENsYXNzTmFtZX1Db25zdHJ1Y3Rvcjo6R2V0VGVtcGxhdGUodm9pZCopCiB7CiAgICAgc3Rh
dGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBjYWNoZWRUZW1wbGF0ZTsK
ICAgICBpZiAoIWNhY2hlZFRlbXBsYXRlLklzRW1wdHkoKSkKQEAgLTI2MDQsNyArMjYwNCw3IEBA
IHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAKICAgICBteSAkV3JhcHBlclR5cGVQcm90b3R5
cGUgPSAkZGF0YU5vZGUtPmlzRXhjZXB0aW9uID8gIldyYXBwZXJUeXBlRXJyb3JQcm90b3R5cGUi
IDogIldyYXBwZXJUeXBlT2JqZWN0UHJvdG90eXBlIjsKIAotICAgIHB1c2goQGltcGxDb250ZW50
RGVjbHMsICJXcmFwcGVyVHlwZUluZm8gJHtjbGFzc05hbWV9OjppbmZvID0geyAke2NsYXNzTmFt
ZX06OkdldFRlbXBsYXRlLCAke2NsYXNzTmFtZX06OmRlcmVmT2JqZWN0LCAkdG9BY3RpdmUsICRk
b21WaXNpdG9yLCAke2NsYXNzTmFtZX06Omluc3RhbGxQZXJDb250ZXh0UHJvdG90eXBlUHJvcGVy
dGllcywgJHBhcmVudENsYXNzSW5mbywgJFdyYXBwZXJUeXBlUHJvdG90eXBlIH07XG5cbiIpOwor
ICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICJXcmFwcGVyVHlwZUluZm8gJHtjbGFzc05hbWV9
OjppbmZvID0geyAke2NsYXNzTmFtZX06OkdldFRlbXBsYXRlLCAwLCAke2NsYXNzTmFtZX06OmRl
cmVmT2JqZWN0LCAkdG9BY3RpdmUsICRkb21WaXNpdG9yLCAke2NsYXNzTmFtZX06Omluc3RhbGxQ
ZXJDb250ZXh0UHJvdG90eXBlUHJvcGVydGllcywgJHBhcmVudENsYXNzSW5mbywgJFdyYXBwZXJU
eXBlUHJvdG90eXBlIH07XG5cbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICJuYW1l
c3BhY2UgJHtpbnRlcmZhY2VOYW1lfVY4SW50ZXJuYWwge1xuXG4iKTsKIAogICAgIHB1c2goQGlt
cGxDb250ZW50RGVjbHMsICJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdm9pZCBWOF9VU0UoVCkgeyB9
XG5cbiIpOwpAQCAtMzAzNCw3ICszMDM0LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+ICR7Y2xhc3NOYW1lfTo6R2V0UmF3VGVtcGxhdGUoKQogICAgIHJldHVybiB0ZW1w
bDsKIH0KIAotdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+ICR7Y2xhc3NOYW1l
fTo6R2V0VGVtcGxhdGUoKQordjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+ICR7
Y2xhc3NOYW1lfTo6R2V0VGVtcGxhdGUodm9pZCopCiB7CiAgICAgVjhQZXJJc29sYXRlRGF0YSog
ZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRh
OjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5k
KCZpbmZvKTsKQEAgLTM2ODYsNiArMzY4NiwxMiBAQCBzdWIgR2V0TmF0aXZlVHlwZQogICAgICAg
ICB9CiAgICAgfQogCisgICAgIyBUaGUgbmFtZSBvZiBhbnkgbmF0aXZlIHR5cGUgY2Fubm90IGJl
ICJGdW5jdGlvbiIgc2luY2UgdGhlcmUgaXMgYSBjb25mbGljdGluZyBuYW1lCisgICAgIyBzbyB3
ZSBnaXZlIGFuIGFsaWFzIGhlcmUuCisgICAgaWYgKCR0eXBlIGVxICJGdW5jdGlvbiIpIHsKKyAg
ICAgICAgJHR5cGUgPSAiRE9NRnVuY3Rpb24iOworICAgIH0KKwogICAgIG15ICRzZXF1ZW5jZVR5
cGUgPSAkY29kZUdlbmVyYXRvci0+R2V0U2VxdWVuY2VUeXBlKCR0eXBlKTsKICAgICByZXR1cm4g
IlZlY3Rvcjwke3NlcXVlbmNlVHlwZX0+IiBpZiAkc2VxdWVuY2VUeXBlOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01GdW5jdGlvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9ET01GdW5jdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTJjY2JkMjEyN2Fj
NDUyYzMzYTBkMzkzODJhMzA5NjFjMjFhN2NjYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTUZ1bmN0aW9uLmNwcApAQCAtMCwwICsxLDEyNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJET01GdW5jdGlvbi5oIgorCisjaW5jbHVkZSAiQ3Vz
dG9tRWxlbWVudERlZmluaXRpb24uaCIKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50UmVnaXN0cnku
aCIKKyNpbmNsdWRlICJEb2N1bWVudEN1c3RvbUVsZW1lbnQuaCIKKyNpbmNsdWRlICJWOEJpbmRp
bmcuaCIKKyNpbmNsdWRlICJWOEZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiVjhIVE1MRWxlbWVudC5o
IgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
RE9NRnVuY3Rpb246OkRPTUZ1bmN0aW9uKERvY3VtZW50KiBkb2N1bWVudCkKKyAgICA6IG1fZG9j
dW1lbnQoZG9jdW1lbnQpCit7CisgICAgbV9kb2N1bWVudC0+Z3VhcmRSZWYoKTsKK30KKworRE9N
RnVuY3Rpb246On5ET01GdW5jdGlvbigpCit7CisgICAgbV9kb2N1bWVudC0+Z3VhcmREZXJlZigp
OworfQorCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gRE9NRnVuY3Rpb246OnRvVjgodjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQorewor
ICAgIGlmIChtX3RlbXBsYXRlLklzRW1wdHkoKSkKKyAgICAgICAgbV90ZW1wbGF0ZSA9IHY4OjpQ
ZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3KGNyZWF0ZVRlbXBsYXRlKGNyZWF0
aW9uQ29udGV4dCwgaXNvbGF0ZSkpOworICAgIHJldHVybiBtX3RlbXBsYXRlLT5HZXRGdW5jdGlv
bigpOworfQorCisjaWYgRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCisKK1Bhc3NSZWZQdHI8
RE9NRWxlbWVudENvbnN0cnVjdG9yPiBET01FbGVtZW50Q29uc3RydWN0b3I6OmNyZWF0ZShEb2N1
bWVudCogZG9jdW1lbnQsIEN1c3RvbUVsZW1lbnREZWZpbml0aW9uKiBkZWZpbml0aW9uKQorewor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgRE9NRWxlbWVudENvbnN0cnVjdG9yKGRvY3VtZW50LCBk
ZWZpbml0aW9uKSk7Cit9CisKK0RPTUVsZW1lbnRDb25zdHJ1Y3Rvcjo6RE9NRWxlbWVudENvbnN0
cnVjdG9yKERvY3VtZW50KiBkb2N1bWVudCwgQ3VzdG9tRWxlbWVudERlZmluaXRpb24qIGRlZmlu
aXRpb24pCisgICAgOiBET01GdW5jdGlvbihkb2N1bWVudCkKKyAgICAsIG1fZGVmaW5pdGlvbihk
ZWZpbml0aW9uKQoreworfQorCitET01FbGVtZW50Q29uc3RydWN0b3I6On5ET01FbGVtZW50Q29u
c3RydWN0b3IoKQoreworfQorCit2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBET01F
bGVtZW50Q29uc3RydWN0b3I6OnBhcmVudFRlbXBsYXRlKCkgY29uc3QKK3sKKyAgICAvLyBGSVhN
RTogU3VwcG9ydCBpbmhlcml0YW5jZQorICAgIHJldHVybiBWOEhUTUxFbGVtZW50OjpHZXRUZW1w
bGF0ZSgpOworfQorCitQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBET01FbGVtZW50Q29uc3RydWN0
b3I6OmNyZWF0ZUVsZW1lbnQoKSBjb25zdAoreworICAgIGlmICghbV9kZWZpbml0aW9uKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9kZWZpbml0aW9uLT5jcmVhdGVFbGVtZW50KCk7
Cit9CisKK3Y4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBET01FbGVtZW50Q29u
c3RydWN0b3I6OmdldEVsZW1lbnRUZW1wbGF0ZSh2b2lkKiBwYXJhbSkKK3sKKyAgICBBU1NFUlQo
cGFyYW0pOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxET01FbGVtZW50Q29uc3RydWN0b3IqPihw
YXJhbSktPmVsZW1lbnRUZW1wbGF0ZSgpOworfQorCitXcmFwcGVyVHlwZUluZm8qIERPTUVsZW1l
bnRDb25zdHJ1Y3Rvcjo6ZWxlbWVudFR5cGVJbmZvKCkgY29uc3QKK3sKKyAgICBpZiAoIW1faW5m
bykgeworICAgICAgICBXcmFwcGVyVHlwZUluZm8gaW5mbyA9IHsgZ2V0RWxlbWVudFRlbXBsYXRl
LCBjb25zdF9jYXN0PERPTUVsZW1lbnRDb25zdHJ1Y3Rvcio+KHRoaXMpLCBWOEhUTUxFbGVtZW50
OjpkZXJlZk9iamVjdCwgMCwgMCwgMCwgJlY4SFRNTEVsZW1lbnQ6OmluZm8sIFdyYXBwZXJUeXBl
T2JqZWN0UHJvdG90eXBlIH07CisgICAgICAgIG1faW5mbyA9IGFkb3B0UHRyKG5ldyBXcmFwcGVy
VHlwZUluZm8oaW5mbykpOworICAgIH0KKworICAgIHJldHVybiBtX2luZm8uZ2V0KCk7Cit9CisK
K2NvbnN0IGNoYXIqIERPTUVsZW1lbnRDb25zdHJ1Y3Rvcjo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0
Cit7CisgICAgaWYgKCFtX2RlZmluaXRpb24pCisgICAgICAgIHJldHVybiAiIjsKKyAgICByZXR1
cm4gbV9kZWZpbml0aW9uLT5pbnRlcmZhY2VOYW1lKCk7Cit9CisKK3Y4OjpIYW5kbGU8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+IERPTUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlVGVtcGxhdGUodjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRl
KQoreworICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKKyAgICB2ODo6SGFuZGxlPHY4
OjpGdW5jdGlvblRlbXBsYXRlPiBkZXNjID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKKyAgICBWOEVs
ZW1lbnRDb25zdHJ1Y3Rvcjo6Y29uZmlndXJlRnVuY3Rpb25UZW1wbGF0ZShkZXNjLCB0aGlzLCBp
c29sYXRlKTsKKyAgICByZXR1cm4gZGVzYzsKK30KKworI2VuZGlmIC8vIEVOQUJMRShDVVNUT01f
RE9NX0VMRU1FTlRTKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01GdW5jdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvRE9NRnVuY3Rpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YTJiYmM1ODEzNWQyZDQxODI4NTk1
OTBiYTFjM2IyMTY0ZWYyNmM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvRE9NRnVuY3Rpb24uaApAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRE9NRnVuY3Rp
b25faAorI2RlZmluZSBET01GdW5jdGlvbl9oCisKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CisjaW5jbHVkZSA8djguaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5j
bHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEN1c3Rv
bUVsZW1lbnREZWZpbml0aW9uOworY2xhc3MgRGljdGlvbmFyeTsKK2NsYXNzIERvY3VtZW50Owor
Y2xhc3MgSFRNTEVsZW1lbnQ7CitjbGFzcyBXcmFwcGVyVHlwZUluZm87CisKK2NsYXNzIERPTUZ1
bmN0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8RE9NRnVuY3Rpb24+Cit7CitwdWJsaWM6CisgICAg
ZXhwbGljaXQgRE9NRnVuY3Rpb24oRG9jdW1lbnQqIGRvY3VtZW50KTsKKyAgICB2aXJ0dWFsIH5E
T01GdW5jdGlvbigpOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4g
bV9kb2N1bWVudDsgfQorCisgICAgLy8gVjggc3BlY2lmaWMgaW50ZXJmYWNlCisgICAgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHRvVjgodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRl
eHQsIHY4OjpJc29sYXRlKik7CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IGVsZW1lbnRUZW1wbGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGVtcGxhdGU7IH0KKworcHJv
dGVjdGVkOgorICAgIHZpcnR1YWwgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gY3Jl
YXRlVGVtcGxhdGUodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJ
c29sYXRlKikgPSAwOworCitwcml2YXRlOgorICAgIERvY3VtZW50KiBtX2RvY3VtZW50OworICAg
IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBtX3RlbXBsYXRlOworfTsKKwor
I2lmIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorCitjbGFzcyBET01FbGVtZW50Q29uc3Ry
dWN0b3IgOiBwdWJsaWMgRE9NRnVuY3Rpb24KK3sKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxET01FbGVtZW50Q29uc3RydWN0b3I+IGNyZWF0ZShEb2N1bWVudCosIEN1c3RvbUVsZW1l
bnREZWZpbml0aW9uKik7CisKKyAgICBleHBsaWNpdCBET01FbGVtZW50Q29uc3RydWN0b3IoRG9j
dW1lbnQqLCBDdXN0b21FbGVtZW50RGVmaW5pdGlvbiopOworICAgIHZpcnR1YWwgfkRPTUVsZW1l
bnRDb25zdHJ1Y3RvcigpOworCisgICAgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gY3JlYXRlRWxl
bWVudCgpIGNvbnN0OworICAgIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAg
ICB2b2lkIHdpbGxEZXN0cm95RGVmaW5pdGlvbigpIHsgbV9kZWZpbml0aW9uID0gMDsgfQorCisg
ICAgLy8gVjggc3BlY2lmaWMgaW50ZXJmYWNlCisgICAgc3RhdGljIERPTUVsZW1lbnRDb25zdHJ1
Y3RvciogdG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pik7CisgICAgc3RhdGljIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBnZXRFbGVtZW50VGVtcGxhdGUodm9pZCop
OworCisgICAgdmlydHVhbCB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBjcmVhdGVU
ZW1wbGF0ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xh
dGUqKSBPVkVSUklERTsKKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBwYXJl
bnRUZW1wbGF0ZSgpIGNvbnN0OworICAgIFdyYXBwZXJUeXBlSW5mbyogZWxlbWVudFR5cGVJbmZv
KCkgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIEN1c3RvbUVsZW1lbnREZWZpbml0aW9uKiBt
X2RlZmluaXRpb247CisgICAgbXV0YWJsZSBPd25QdHI8V3JhcHBlclR5cGVJbmZvPiBtX2luZm87
Cit9OworCisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIERPTUZ1bmN0aW9uX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L05QVjhPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvTlBWOE9iamVjdC5jcHAKaW5kZXggZTY1ODk2NDE3MDc5MjE4ZTU5ZDg4YzQ5
MTRiYzY0MzRjYmE4OTY1Mi4uOGNhY2FmODI1MTYzNTUyODlmYjQyNmE5MmYzODllNDcxYzI4ZGY3
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvTlBWOE9iamVjdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvTlBWOE9iamVjdC5jcHAKQEAgLTUxLDcg
KzUxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXcmFwcGVyVHlwZUluZm8qIG5wT2JqZWN0
VHlwZUluZm8oKQogewotICAgIHN0YXRpYyBXcmFwcGVyVHlwZUluZm8gdHlwZUluZm8gPSB7IDAs
IDAsIDAsIDAsIDAsIDAsIFdyYXBwZXJUeXBlT2JqZWN0UHJvdG90eXBlIH07CisgICAgc3RhdGlj
IFdyYXBwZXJUeXBlSW5mbyB0eXBlSW5mbyA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgV3JhcHBl
clR5cGVPYmplY3RQcm90b3R5cGUgfTsKICAgICByZXR1cm4gJnR5cGVJbmZvOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEZ1bmN0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RnVuY3Rpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjljNDBkYTVm
NWVmYTE5MmVjNTU1MzgyNmM3MTQ1YjU5YzMwYWEzMWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEZ1bmN0aW9uLmNwcApAQCAtMCwwICsxLDExNiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWOEZ1bmN0aW9uLmgiCisKKyNpbmNsdWRlICJI
VE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIlY4SFRNTFVua25vd25FbGVtZW50LmgiCisjaW5jbHVk
ZSAiRG9jdW1lbnRDdXN0b21FbGVtZW50LmgiCisjaW5jbHVkZSAiRE9NRnVuY3Rpb24uaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCisK
K1dyYXBwZXJUeXBlSW5mbyBWOEVsZW1lbnRDb25zdHJ1Y3Rvcjo6aW5mbyA9IHsgMCwgMCwgVjhF
bGVtZW50Q29uc3RydWN0b3I6OmRlcmVmT2JqZWN0LCAwLCAwLCAwLCAwLCBXcmFwcGVyVHlwZU9i
amVjdFByb3RvdHlwZSB9OworCitpbmxpbmUgRE9NRWxlbWVudENvbnN0cnVjdG9yKiBWOEVsZW1l
bnRDb25zdHJ1Y3Rvcjo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QpCit7
CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8RE9NRWxlbWVudENvbnN0cnVjdG9yKj4ob2Jq
ZWN0LT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQodjhET01XcmFwcGVyT2JqZWN0SW5kZXgp
KTsKK30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RWxlbWVudENvbnN0cnVjdG9yOjpjb25z
dHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NU
QVRTKCJET00uVjhFbGVtZW50Q29uc3RydWN0b3IuQ29uc3RydWN0b3IiKTsKKworICAgIGlmICgh
YXJncy5Jc0NvbnN0cnVjdENhbGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCJE
T00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4iKTsK
KworICAgIGlmIChDb25zdHJ1Y3Rvck1vZGU6OmN1cnJlbnQoKSA9PSBDb25zdHJ1Y3Rvck1vZGU6
OldyYXBFeGlzdGluZ09iamVjdCkKKyAgICAgICAgcmV0dXJuIGFyZ3MuSG9sZGVyKCk7CisKKyAg
ICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHByb3RvID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6
Q2FzdChhcmdzLkNhbGxlZSgpLT5HZXQodjg6OlN0cmluZzo6TmV3U3ltYm9sKCJwcm90b3R5cGUi
KSkpOworICAgIEFTU0VSVChwcm90by0+SW50ZXJuYWxGaWVsZENvdW50KCkgPD0gdjhEZWZhdWx0
V3JhcHBlckludGVybmFsRmllbGRDb3VudCk7CisgICAgRE9NRWxlbWVudENvbnN0cnVjdG9yKiBj
b25zdHJ1Y3RvckltcGwgPSBWOEVsZW1lbnRDb25zdHJ1Y3Rvcjo6dG9OYXRpdmUocHJvdG8pOwor
ICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudEltcGwgPSBjb25zdHJ1Y3RvckltcGwtPmNy
ZWF0ZUVsZW1lbnQoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBhcmdz
LkhvbGRlcigpOworICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcih3cmFwcGVyLCBjb25z
dHJ1Y3RvckltcGwtPmVsZW1lbnRUeXBlSW5mbygpLCBlbGVtZW50SW1wbC5nZXQoKSk7CisgICAg
VjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JET01Ob2RlKGVsZW1lbnRJbXBsLnJlbGVhc2Uo
KSwgd3JhcHBlciwgYXJncy5HZXRJc29sYXRlKCkpOworCisgICAgcmV0dXJuIHdyYXBwZXI7Cit9
CisKK3ZvaWQgVjhFbGVtZW50Q29uc3RydWN0b3I6OmNvbmZpZ3VyZUZ1bmN0aW9uVGVtcGxhdGUo
djg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZGVzYywgUGFzc1JlZlB0cjxET01FbGVt
ZW50Q29uc3RydWN0b3I+IGltcGwsIHY4OjpJc29sYXRlKiBpc29sYXRlKQoreworICAgIFY4RE9N
Q29uZmlndXJhdGlvbjo6Y29uZmlndXJlVGVtcGxhdGUodjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+OjpOZXcoZGVzYyksIGltcGwtPmludGVyZmFjZU5hbWUoKSwgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT46Ok5ldyhpbXBsLT5wYXJlbnRUZW1wbGF0ZSgpKSwgaW50ZXJuYWxGaWVs
ZENvdW50LCAwLCAwLCAwLCAwKTsKKyAgICBkZXNjLT5SZWFkT25seVByb3RvdHlwZSgpOworICAg
IGRlc2MtPlNldENhbGxIYW5kbGVyKGNvbnN0cnVjdG9yQ2FsbGJhY2spOworICAgIGRlc2MtPlNl
dCh2ODo6U3RyaW5nOjpOZXdTeW1ib2woInRvU3RyaW5nIiksIFY4UGVySXNvbGF0ZURhdGE6OmN1
cnJlbnQoKS0+dG9TdHJpbmdUZW1wbGF0ZSgpKTsKKyAgICBkZXNjLT5Qcm90b3R5cGVUZW1wbGF0
ZSgpLT5TZXRJbnRlcm5hbEZpZWxkQ291bnQocHJvdG90eXBlSW50ZXJuYWxGaWVsZENvdW50KTsK
KyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHByb3RvID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0
Pjo6Q2FzdChkZXNjLT5HZXRGdW5jdGlvbigpLT5HZXQodjg6OlN0cmluZzo6TmV3U3ltYm9sKCJw
cm90b3R5cGUiKSkpOworICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcihwcm90bywgJmlu
Zm8sIGltcGwuZ2V0KCkpOworICAgIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yRE9NT2Jq
ZWN0KGltcGwsIHByb3RvLCBpc29sYXRlKTsKK30KKwordm9pZCBWOEVsZW1lbnRDb25zdHJ1Y3Rv
cjo6ZGVyZWZPYmplY3Qodm9pZCogb2JqZWN0KQoreworICAgIHN0YXRpY19jYXN0PERPTUVsZW1l
bnRDb25zdHJ1Y3Rvcio+KG9iamVjdCktPmRlcmVmKCk7Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZh
bHVlPiBWOEVsZW1lbnRDb25zdHJ1Y3Rvcjo6d3JhcEVsZW1lbnQoSFRNTEVsZW1lbnQqIGltcGws
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNv
bGF0ZSkKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBWOERPTVdyYXBw
ZXI6OmdldENhY2hlZFdyYXBwZXIoaW1wbCk7CisgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgcmV0dXJuIFY4RWxlbWVudENvbnN0cnVjdG9y
Ojp3cmFwRWxlbWVudFNsb3coaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKK30KKwor
djg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RWxlbWVudENvbnN0cnVjdG9yOjp3cmFwRWxlbWVudFNs
b3coSFRNTEVsZW1lbnQqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250
ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3sKKyAgICBET01FbGVtZW50Q29uc3RydWN0b3Iq
IGN0b3IgPSBEb2N1bWVudEN1c3RvbUVsZW1lbnQ6OmNvbnN0cnVjdG9yT2YoaW1wbCk7CisgICAg
aWYgKCFjdG9yKQorICAgICAgICByZXR1cm4gVjhIVE1MVW5rbm93bkVsZW1lbnQ6OndyYXAodG9I
VE1MVW5rbm93bkVsZW1lbnQoaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisKKyAg
ICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUoY3JlYXRpb25Db250ZXh0LT5DcmVhdGlvbkNvbnRl
eHQoKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhET01XcmFwcGVy
OjppbnN0YW50aWF0ZVY4T2JqZWN0KGltcGwtPmRvY3VtZW50KCksIGN0b3ItPmVsZW1lbnRUeXBl
SW5mbygpLCBpbXBsKTsKKyAgICBpZiAod3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biB3cmFwcGVyOworCisgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlckhhbmRs
ZSA9IFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yRE9NTm9kZShpbXBsLCB3cmFwcGVyLCBp
c29sYXRlKTsKKyAgICB3cmFwcGVySGFuZGxlLlNldFdyYXBwZXJDbGFzc0lkKHY4RE9NU3VidHJl
ZUNsYXNzSWQpOworCisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUo
Q1VTVE9NX0RPTV9FTEVNRU5UUykKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhGdW5jdGlvbi5oIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhGdW5jdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRkNDEwMzE5NDUyMTk4YTRj
ZDc3ZDczM2U5N2RjZGNlNjZlOTUwNzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOEZ1bmN0aW9uLmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVjhGdW5j
dGlvbl9oCisjZGVmaW5lIFY4RnVuY3Rpb25faAorCisjaW5jbHVkZSAiRE9NRnVuY3Rpb24uaCIK
KyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKKyNpbmNs
dWRlIDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgRE9NRWxlbWVudENvbnN0cnVjdG9yOworY2xhc3MgSFRNTEVsZW1lbnQ7
CisKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChET01GdW5jdGlvbiogaW1wbCwg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKK3sKKyAgICBpZiAoIWltcGwpCisg
ICAgICAgIHJldHVybiB2OE51bGxXaXRoQ2hlY2soaXNvbGF0ZSk7CisgICAgcmV0dXJuIGltcGwt
PnRvVjgoY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKK30KKworaW5saW5lIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB0b1Y4KFBhc3NSZWZQdHI8RE9NRnVuY3Rpb24+IGltcGwsIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2
ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCit7CisgICAgcmV0dXJuIHRvVjgoaW1wbC5nZXQoKSwg
Y3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKK30KKworI2lmIEVOQUJMRShDVVNUT01fRE9NX0VM
RU1FTlRTKQorCitjbGFzcyBWOEVsZW1lbnRDb25zdHJ1Y3RvciB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFdyYXBwZXJUeXBlSW5mbyBpbmZvOworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgaW50ZXJu
YWxGaWVsZENvdW50ID0gdjhEZWZhdWx0V3JhcHBlckludGVybmFsRmllbGRDb3VudDsKKyAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IHByb3RvdHlwZUludGVybmFsRmllbGRDb3VudCA9IHY4RGVmYXVs
dFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQ7CisKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IGNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYpOworICAgIHN0
YXRpYyB2b2lkIGNvbmZpZ3VyZUZ1bmN0aW9uVGVtcGxhdGUodjg6OkhhbmRsZTx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4sIFBhc3NSZWZQdHI8RE9NRWxlbWVudENvbnN0cnVjdG9yPiwgdjg6Oklzb2xh
dGUqKTsKKyAgICBzdGF0aWMgRE9NRWxlbWVudENvbnN0cnVjdG9yKiB0b05hdGl2ZSh2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+KTsKKyAgICBzdGF0aWMgdm9pZCBkZXJlZk9iamVjdCh2b2lkKik7CisK
KyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBFbGVtZW50KEhUTUxFbGVtZW50
Kiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiA9IDApOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gd3JhcEVsZW1lbnRTbG93KEhUTUxFbGVtZW50Kiwgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0Piwgdjg6Oklzb2xhdGUqKTsKK307CisKKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0RPTV9F
TEVNRU5UUykKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVjhGdW5jdGlv
bl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9XcmFwcGVyVHlwZUlu
Zm8uaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dyYXBwZXJUeXBlSW5mby5oCmluZGV4
IGE0YmQ0OTk4ZGRkNmU2MTRmZjdmMDA1YTVlNzEzODA3Yzc0NTI0MWIuLmViMmNhNGM5YWQwYzc0
NjIxYmI5MDU1ODA0NTAyZjdiNTk3MTUwMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1dyYXBwZXJUeXBlSW5mby5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1dyYXBwZXJUeXBlSW5mby5oCkBAIC00NCw3ICs0NCw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgIHN0YXRpYyBjb25zdCB1aW50MTZfdCB2OERPTVN1YnRyZWVDbGFzc0lkID0gMTsK
IAotICAgIHR5cGVkZWYgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+ICgqR2V0
VGVtcGxhdGVGdW5jdGlvbikoKTsKKyAgICB0eXBlZGVmIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiAoKkdldFRlbXBsYXRlRnVuY3Rpb24pKHZvaWQqKTsKKyAgICB0eXBlZGVm
IHZvaWQqIEdldFRlbXBsYXRlRnVuY3Rpb25QYXJhbWV0ZXJUeXBlOwogICAgIHR5cGVkZWYgdm9p
ZCAoKkRlcmVmT2JqZWN0RnVuY3Rpb24pKHZvaWQqKTsKICAgICB0eXBlZGVmIEFjdGl2ZURPTU9i
amVjdCogKCpUb0FjdGl2ZURPTU9iamVjdEZ1bmN0aW9uKSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
KTsKICAgICB0eXBlZGVmIHZvaWQgKCpET01XcmFwcGVyVmlzaXRvckZ1bmN0aW9uKShET01EYXRh
U3RvcmUqLCB2b2lkKiwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4pOwpAQCAtODEsNyArODIs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPiBnZXRUZW1wbGF0ZSgpIHsgcmV0dXJuIGdldFRlbXBsYXRlRnVuY3Rpb24oKTsgfQorICAg
ICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZ2V0VGVtcGxhdGUoKSB7
IHJldHVybiBnZXRUZW1wbGF0ZUZ1bmN0aW9uKGdldFRlbXBsYXRlRnVuY3Rpb25QYXJhbWV0ZXIp
OyB9CiAgICAgICAgIAogICAgICAgICB2b2lkIGRlcmVmT2JqZWN0KHZvaWQqIG9iamVjdCkKICAg
ICAgICAgewpAQCAtMTA5LDYgKzExMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
fQogCiAgICAgICAgIGNvbnN0IEdldFRlbXBsYXRlRnVuY3Rpb24gZ2V0VGVtcGxhdGVGdW5jdGlv
bjsKKyAgICAgICAgY29uc3QgR2V0VGVtcGxhdGVGdW5jdGlvblBhcmFtZXRlclR5cGUgZ2V0VGVt
cGxhdGVGdW5jdGlvblBhcmFtZXRlcjsKICAgICAgICAgY29uc3QgRGVyZWZPYmplY3RGdW5jdGlv
biBkZXJlZk9iamVjdEZ1bmN0aW9uOwogICAgICAgICBjb25zdCBUb0FjdGl2ZURPTU9iamVjdEZ1
bmN0aW9uIHRvQWN0aXZlRE9NT2JqZWN0RnVuY3Rpb247CiAgICAgICAgIGNvbnN0IERPTVdyYXBw
ZXJWaXNpdG9yRnVuY3Rpb24gZG9tV3JhcHBlclZpc2l0b3JGdW5jdGlvbjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxJbWFnZUVsZW1lbnRDb25z
dHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSW1h
Z2VFbGVtZW50Q29uc3RydWN0b3IuY3BwCmluZGV4IDI1NmM5ZDM3ZTQxMWNmZTcwYTZlMzYzNzgy
YTM2NjNhMDQ0NTNkM2YuLjM3ZDMyNmMzNmRhMTY1ODlkMjI5YmE5NjE2YjhkNTMyYmRiN2VjNWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxJbWFn
ZUVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yLmNwcApAQCAtNDMsNyArNDMsNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdyYXBwZXJUeXBlSW5mbyBWOEhUTUxJbWFnZUVs
ZW1lbnRDb25zdHJ1Y3Rvcjo6aW5mbyA9IHsgVjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3I6
OkdldFRlbXBsYXRlLCAwLCAwLCAwLCBWOEhUTUxJbWFnZUVsZW1lbnQ6Omluc3RhbGxQZXJDb250
ZXh0UHJvdG90eXBlUHJvcGVydGllcywgMCwgV3JhcHBlclR5cGVPYmplY3RQcm90b3R5cGUgfTsK
K1dyYXBwZXJUeXBlSW5mbyBWOEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3Rvcjo6aW5mbyA9IHsg
VjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3I6OkdldFRlbXBsYXRlLCAwLCAwLCAwLCAwLCBW
OEhUTUxJbWFnZUVsZW1lbnQ6Omluc3RhbGxQZXJDb250ZXh0UHJvdG90eXBlUHJvcGVydGllcywg
MCwgV3JhcHBlclR5cGVPYmplY3RQcm90b3R5cGUgfTsKIAogc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiB2OEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpB
cmd1bWVudHMmIGFyZ3MpCiB7CkBAIC04NCw3ICs4NCw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6
QXJnCiAgICAgcmV0dXJuIHdyYXBwZXI7CiB9CiAKLXY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPiBWOEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3Rvcjo6R2V0VGVtcGxhdGUoKQor
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4SFRNTEltYWdlRWxlbWVudENv
bnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSh2b2lkKikKIHsKICAgICBzdGF0aWMgdjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGNhY2hlZFRlbXBsYXRlOwogICAgIGlmICghY2FjaGVk
VGVtcGxhdGUuSXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yLmggYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3IuaAppbmRl
eCA1ZGI0OTQ2NWY1OWEzZjNmZjVhMTc1MGMzZjU3OGUwMzJhOGVjYmY2Li4yN2ZlZmViMTE2Zjc0
ODBjMTRiN2E0YWE4MjdmM2YwZDllMTg5OTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3IuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSW1hZ2VFbGVtZW50Q29uc3Ry
dWN0b3IuaApAQCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFY4
SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdjg6OlBl
cnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdldFRlbXBsYXRlKCk7CisgICAgc3RhdGlj
IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBHZXRUZW1wbGF0ZSh2b2lkKik7
CiAgICAgc3RhdGljIFdyYXBwZXJUeXBlSW5mbyBpbmZvOwogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnREZWZpbml0aW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9DdXN0b21FbGVtZW50RGVmaW5pdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWQ2ZDRkZWE1
MjQxMTc4NTk4N2NiYTMxZjMzYTFkYjEyNmE5MGY3YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50RGVmaW5pdGlvbi5jcHAKQEAgLTAsMCArMSw3MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50RGVmaW5pdGlvbi5o
IgorCisjaWYgRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCisKKyNpbmNsdWRlICJET01GdW5j
dGlvbi5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIK
KyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVm
UHRyPEN1c3RvbUVsZW1lbnREZWZpbml0aW9uPiBDdXN0b21FbGVtZW50RGVmaW5pdGlvbjo6Y3Jl
YXRlKERvY3VtZW50KiBkb2N1bWVudCwgQXRvbWljU3RyaW5nIG5hbWUpCit7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBDdXN0b21FbGVtZW50RGVmaW5pdGlvbihkb2N1bWVudCwgbmFtZSkpOwor
fQorCitDdXN0b21FbGVtZW50RGVmaW5pdGlvbjo6Q3VzdG9tRWxlbWVudERlZmluaXRpb24oRG9j
dW1lbnQqIGRvY3VtZW50LCBBdG9taWNTdHJpbmcgbmFtZSkKKyAgICA6IG1fbmFtZShudWxsQXRv
bSwgbmFtZS5sb3dlcigpLCBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJKQorICAgICwgbV9j
b25zdHJ1Y3RvcihET01FbGVtZW50Q29uc3RydWN0b3I6OmNyZWF0ZShkb2N1bWVudCwgdGhpcykp
Cit7Cit9CisKK0N1c3RvbUVsZW1lbnREZWZpbml0aW9uOjp+Q3VzdG9tRWxlbWVudERlZmluaXRp
b24oKQoreworICAgIG1fY29uc3RydWN0b3ItPndpbGxEZXN0cm95RGVmaW5pdGlvbigpOworfQor
CitQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBDdXN0b21FbGVtZW50RGVmaW5pdGlvbjo6Y3JlYXRl
RWxlbWVudCgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFN1cHBvcnQgaW5oZXJpdGFuY2UKKyAg
ICByZXR1cm4gSFRNTEVsZW1lbnQ6OmNyZWF0ZShtX25hbWUsIG1fY29uc3RydWN0b3ItPmRvY3Vt
ZW50KCkpOworfQorCitjb25zdCBjaGFyKiBDdXN0b21FbGVtZW50RGVmaW5pdGlvbjo6aW50ZXJm
YWNlTmFtZSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFNob3VsZCBiZSBnaXZlbiBhcyBhIHBh
cmFtZXRlciBvZiByZWdpc3RlcigpLgorICAgIHJldHVybiAiSFRNTEN1c3RvbUVsZW1lbnQiOwor
fQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50RGVmaW5pdGlvbi5oIGIvU291cmNl
L1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnREZWZpbml0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGVmZDRh
MDBkYjM0ODg3ZjkxMWE4MWZjMTQ0MTg4NmMyN2YyZTgwZQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50RGVmaW5pdGlvbi5oCkBAIC0wLDAgKzEsNjgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIEN1c3RvbUVsZW1lbnREZWZpbml0aW9uX2gKKyNkZWZpbmUgQ3VzdG9tRWxlbWVu
dERlZmluaXRpb25faAorCisjaWYgRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCisKKyNpbmNs
dWRlICJRdWFsaWZpZWROYW1lLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRE9NRWxlbWVudENvbnN0cnVjdG9yOworY2xhc3MgRG9j
dW1lbnQ7CitjbGFzcyBIVE1MRWxlbWVudDsKKworY2xhc3MgQ3VzdG9tRWxlbWVudERlZmluaXRp
b24gOiBwdWJsaWMgUmVmQ291bnRlZDxDdXN0b21FbGVtZW50RGVmaW5pdGlvbj4geworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnREZWZpbml0aW9uPiBjcmVhdGUo
RG9jdW1lbnQqLCBBdG9taWNTdHJpbmcgbmFtZSk7CisgICAgZXhwbGljaXQgQ3VzdG9tRWxlbWVu
dERlZmluaXRpb24oRG9jdW1lbnQqLCBBdG9taWNTdHJpbmcgbmFtZSk7CisgICAgfkN1c3RvbUVs
ZW1lbnREZWZpbml0aW9uKCk7CisKKyAgICBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBjcmVhdGVF
bGVtZW50KCkgY29uc3Q7CisgICAgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSgpIGNvbnN0Owor
CisgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsg
fQorICAgIERPTUVsZW1lbnRDb25zdHJ1Y3RvciogY29uc3RydWN0b3IoKSBjb25zdCB7IHJldHVy
biBtX2NvbnN0cnVjdG9yLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgUXVhbGlmaWVkTmFtZSBt
X25hbWU7CisgICAgUmVmUHRyPERPTUVsZW1lbnRDb25zdHJ1Y3Rvcj4gbV9jb25zdHJ1Y3RvcjsK
K307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVnaXN0cnku
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMzkzYjk4MmZlMGJmZDYwY2NhMTUwOTQyNzU1NDYxZDIzNTc1NTI2YgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuY3BwCkBA
IC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVu
dFJlZ2lzdHJ5LmgiCisKKyNpZiBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKKworI2luY2x1
ZGUgIkRPTUZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJIVE1M
RWxlbWVudC5oIgorI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnREZWZpbml0aW9uLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxDdXN0b21FbGVtZW50UmVnaXN0cnk+IEN1c3Rv
bUVsZW1lbnRSZWdpc3RyeTo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICByZXR1
cm4gYWRvcHRQdHIobmV3IEN1c3RvbUVsZW1lbnRSZWdpc3RyeShkb2N1bWVudCkpOworfQorCitD
dXN0b21FbGVtZW50UmVnaXN0cnk6OkN1c3RvbUVsZW1lbnRSZWdpc3RyeShEb2N1bWVudCogZG9j
dW1lbnQpCisgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQoreworfQorCitDdXN0b21FbGVtZW50
UmVnaXN0cnk6On5DdXN0b21FbGVtZW50UmVnaXN0cnkoKQoreworfQorCitDdXN0b21FbGVtZW50
RGVmaW5pdGlvbiogQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpmaW5kRGVmaW5pdGlvbihjb25zdCBR
dWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAoreworICAgIC8vIEZJWE1FOiB0YWtlIGNhcmUgb2Yg
Y2FzZS4KKyAgICBEZWZpbml0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBmb3VuZCA9IG1fZGVmaW5p
dGlvbnMuZmluZChuYW1lLmltcGwoKSk7CisgICAgcmV0dXJuIChmb3VuZCAhPSBtX2RlZmluaXRp
b25zLmVuZCgpKSA/IGZvdW5kLT52YWx1ZS5nZXQoKSA6IDA7Cit9CisKK1Bhc3NSZWZQdHI8SFRN
TEVsZW1lbnQ+IEN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6Y3JlYXRlRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiBuYW1lKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICBp
ZiAoQ3VzdG9tRWxlbWVudERlZmluaXRpb24qIGZvdW5kID0gZmluZERlZmluaXRpb24obmFtZSkp
CisgICAgICAgIHJldHVybiBmb3VuZC0+Y3JlYXRlRWxlbWVudCgpOworICAgIHJldHVybiAwOwor
fQorCitQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnREZWZpbml0aW9uPiBDdXN0b21FbGVtZW50UmVn
aXN0cnk6OnJlZ2lzdGVyRWxlbWVudChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IERp
Y3Rpb25hcnkmIG9wdGlvbnMsIEV4Y2VwdGlvbkNvZGUmKQoreworICAgIC8vIEZJWE1FOiBjaGVj
ayBkdXBsaWNhdGlvbiBhbmQgdmFsaWRpdHksIG5vcm1hbGl6ZSB0aGUgbmFtZS4KKyAgICBSZWZQ
dHI8Q3VzdG9tRWxlbWVudERlZmluaXRpb24+IGZyZXNoID0gQ3VzdG9tRWxlbWVudERlZmluaXRp
b246OmNyZWF0ZShtX2RvY3VtZW50LCBuYW1lKTsKKyAgICBtX2RlZmluaXRpb25zLmFkZChmcmVz
aC0+bmFtZSgpLmltcGwoKSwgZnJlc2gpOworICAgIHJldHVybiBmcmVzaDsKK30KKworCit9CisK
KyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9DdXN0b21FbGVtZW50UmVnaXN0cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNzBjMDA0Njk5OTJmODE0Yjg4
MWM1ZjJmYjg2YWJjYTFiZGZiYWExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEN1c3Rv
bUVsZW1lbnRSZWdpc3RyeV9oCisjZGVmaW5lIEN1c3RvbUVsZW1lbnRSZWdpc3RyeV9oCisKKyNp
ZiBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKKworI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRE
ZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIlF1YWxp
ZmllZE5hbWUuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0F0b21pY1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIERvY3VtZW50OworY2xhc3MgRGljdGlvbmFyeTsKK2NsYXNzIEN1
c3RvbUVsZW1lbnREZWZpbml0aW9uOworCitjbGFzcyBDdXN0b21FbGVtZW50UmVnaXN0cnkgewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEN1c3RvbUVsZW1lbnRSZWdpc3RyeT4gY3Jl
YXRlKERvY3VtZW50Kik7CisgICAgZXhwbGljaXQgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5KERvY3Vt
ZW50Kik7CisgICAgfkN1c3RvbUVsZW1lbnRSZWdpc3RyeSgpOworCisgICAgUGFzc1JlZlB0cjxD
dXN0b21FbGVtZW50RGVmaW5pdGlvbj4gcmVnaXN0ZXJFbGVtZW50KGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZSwgY29uc3QgRGljdGlvbmFyeSYgb3B0aW9ucywgRXhjZXB0aW9uQ29kZSYpOworICAg
IFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbmFtZSkgY29uc3Q7CisgICAgQ3VzdG9tRWxlbWVudERlZmluaXRpb24qIGZpbmREZWZpbml0
aW9uKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0OworCitwcml2YXRlOgorICAgIHR5
cGVkZWYgSGFzaE1hcDxRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lSW1wbCosIFJlZlB0cjxD
dXN0b21FbGVtZW50RGVmaW5pdGlvbj4gPiBEZWZpbml0aW9uTWFwOworCisgICAgRGVmaW5pdGlv
bk1hcCBtX2RlZmluaXRpb25zOworICAgIERvY3VtZW50KiBtX2RvY3VtZW50OworfTsKKworfQor
CisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAKaW5kZXggZTg1YzhmMWMwNzNmZmUxMGRhMDdjZmI0YmNlM2JjZWI5NDQ0
NzNhNi4uNzkzMjU5MWUzYzRlY2ZlZjFiY2Y3NjY4OGQwZDVhYTZjMGQxZTgzYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCkBAIC03MjAsNiArNzIwLDggQEAgdm9pZCBEb2N1bWVudDo6cmVtb3Zl
ZExhc3RSZWYoKQogCiAgICAgICAgIG1fY3NzQ2FudmFzRWxlbWVudHMuY2xlYXIoKTsKIAorICAg
ICAgICBjbGVhclN1cHBsZW1lbnRzKCk7CisKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05f
RlJBTUUpCiAgICAgICAgIC8vIEZJWE1FOiBjb25zaWRlciB1c2luZyBBY3RpdmVET01PYmplY3Qu
CiAgICAgICAgIGlmIChtX3NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEN1c3RvbUVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50Q3VzdG9tRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjY4OGY5NzQx
ZDIwZDI4YWEzMmJiYzkyYzY0ZTFhYjVmYzZlMzI3MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEN1c3RvbUVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsMTA3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAg
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRvY3VtZW50Q3VzdG9tRWxl
bWVudC5oIgorCisjaWYgRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCisKKyNpbmNsdWRlICJD
dXN0b21FbGVtZW50UmVnaXN0cnkuaCIKKyNpbmNsdWRlICJET01GdW5jdGlvbi5oIgorI2luY2x1
ZGUgIkRpY3Rpb25hcnkuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkhUTUxF
bGVtZW50LmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0RvY3VtZW50Q3VzdG9tRWxlbWVudDo6RG9jdW1lbnRDdXN0b21FbGVt
ZW50KERvY3VtZW50KiBkb2N1bWVudCkKKyAgICA6IG1fcmVnaXN0cnkoQ3VzdG9tRWxlbWVudFJl
Z2lzdHJ5OjpjcmVhdGUoZG9jdW1lbnQpKQoreworfQorCitEb2N1bWVudEN1c3RvbUVsZW1lbnQ6
On5Eb2N1bWVudEN1c3RvbUVsZW1lbnQoKQoreworfQorCitEb2N1bWVudEN1c3RvbUVsZW1lbnQq
IERvY3VtZW50Q3VzdG9tRWxlbWVudDo6ZnJvbShEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAg
aWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpjdXN0b21ET01FbGVtZW50c0VuYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmlu
Zywgc3VwcGxlbWVudE5hbWUsICgiRG9jdW1lbnRDdXN0b21FbGVtZW50IikpOworICAgIERvY3Vt
ZW50Q3VzdG9tRWxlbWVudCogc3VwcGxlbWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Q3VzdG9t
RWxlbWVudCo+KFN1cHBsZW1lbnQ8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD46OmZyb20oZG9jdW1l
bnQsIHN1cHBsZW1lbnROYW1lKSk7CisgICAgaWYgKCFzdXBwbGVtZW50KSB7CisgICAgICAgIHN1
cHBsZW1lbnQgPSBuZXcgRG9jdW1lbnRDdXN0b21FbGVtZW50KGRvY3VtZW50KTsKKyAgICAgICAg
U3VwcGxlbWVudDxTY3JpcHRFeGVjdXRpb25Db250ZXh0Pjo6cHJvdmlkZVRvKGRvY3VtZW50LCBz
dXBwbGVtZW50TmFtZSwgYWRvcHRQdHIoc3VwcGxlbWVudCkpOworICAgIH0KKworICAgIHJldHVy
biBzdXBwbGVtZW50OworfQorCitET01FbGVtZW50Q29uc3RydWN0b3IqIERvY3VtZW50Q3VzdG9t
RWxlbWVudDo6Y29uc3RydWN0b3JPZihIVE1MRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBEb2N1
bWVudEN1c3RvbUVsZW1lbnQqIHN1cHBsZW1lbnQgPSBmcm9tKGVsZW1lbnQtPmRvY3VtZW50KCkp
OworICAgIGlmICghc3VwcGxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgQ3VzdG9tRWxl
bWVudERlZmluaXRpb24qIGRlZmluaXRpb24gPSBzdXBwbGVtZW50LT5yZWdpc3RyeSgpLT5maW5k
RGVmaW5pdGlvbihlbGVtZW50LT50YWdRTmFtZSgpKTsKKyAgICBpZiAoIWRlZmluaXRpb24pCisg
ICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBkZWZpbml0aW9uLT5jb25zdHJ1Y3RvcigpOwor
fQorCitQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBEb2N1bWVudEN1c3RvbUVsZW1lbnQ6OmNyZWF0
ZUVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKQor
eworICAgIERvY3VtZW50Q3VzdG9tRWxlbWVudCogc2VsZiA9IERvY3VtZW50Q3VzdG9tRWxlbWVu
dDo6ZnJvbShkb2N1bWVudCk7CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gc2VsZi0+cmVnaXN0cnkoKS0+Y3JlYXRlRWxlbWVudChuYW1lKTsKK30KKworUGFz
c1JlZlB0cjxET01GdW5jdGlvbj4gRG9jdW1lbnRDdXN0b21FbGVtZW50Ojp3ZWJraXRSZWdpc3Rl
cihEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgcmV0dXJuIHdlYmtpdFJlZ2lzdGVyKGRvY3VtZW50LCBuYW1lLCBE
aWN0aW9uYXJ5KCksIGVjKTsKK30KKworUGFzc1JlZlB0cjxET01GdW5jdGlvbj4gRG9jdW1lbnRD
dXN0b21FbGVtZW50Ojp3ZWJraXRSZWdpc3RlcihEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSwgY29uc3QgRGljdGlvbmFyeSYgb3B0aW9ucywgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgRG9jdW1lbnRDdXN0b21FbGVtZW50KiBzZWxmID0gRG9jdW1lbnRDdXN0
b21FbGVtZW50Ojpmcm9tKGRvY3VtZW50KTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVy
biAwOworCisgICAgUmVmUHRyPEN1c3RvbUVsZW1lbnREZWZpbml0aW9uPiByZWdpc3RlcmVkID0g
c2VsZi0+cmVnaXN0cnkoKS0+cmVnaXN0ZXJFbGVtZW50KG5hbWUsIG9wdGlvbnMsIGVjKTsKKyAg
ICBpZiAoIXJlZ2lzdGVyZWQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiByZWdpc3Rl
cmVkLT5jb25zdHJ1Y3RvcigpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0RP
TV9FTEVNRU5UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEN1c3Rv
bUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEN1c3RvbUVsZW1lbnQuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mNjAyZThhNjgwN2I4ZDEyNmEyNzdkMTZiYWEzOGQ5NWMyMmEzYTBjCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50Q3VzdG9tRWxlbWVudC5o
CkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMK
KyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERPTVdpbmRvd05vdGlmaWNhdGlvbnNf
aAorI2RlZmluZSBET01XaW5kb3dOb3RpZmljYXRpb25zX2gKKworI2lmIEVOQUJMRShDVVNUT01f
RE9NX0VMRU1FTlRTKQorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIlN1
cHBsZW1lbnRhYmxlLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEN1c3RvbUVsZW1l
bnRSZWdpc3RyeTsKK2NsYXNzIERPTUVsZW1lbnRDb25zdHJ1Y3RvcjsKK2NsYXNzIERPTUZ1bmN0
aW9uOworY2xhc3MgRGljdGlvbmFyeTsKK2NsYXNzIERvY3VtZW50OworY2xhc3MgSFRNTEVsZW1l
bnQ7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworY2xhc3MgUXVhbGlmaWVkTmFtZTsK
KworY2xhc3MgRG9jdW1lbnRDdXN0b21FbGVtZW50IDogcHVibGljIFN1cHBsZW1lbnQ8U2NyaXB0
RXhlY3V0aW9uQ29udGV4dD4geworcHVibGljOgorICAgIGV4cGxpY2l0IERvY3VtZW50Q3VzdG9t
RWxlbWVudChEb2N1bWVudCopOworICAgIH5Eb2N1bWVudEN1c3RvbUVsZW1lbnQoKTsKKworICAg
IHN0YXRpYyBEb2N1bWVudEN1c3RvbUVsZW1lbnQqIGZyb20oRG9jdW1lbnQqKTsKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxET01GdW5jdGlvbj4gd2Via2l0UmVnaXN0ZXIoRG9jdW1lbnQqLCBjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxET01GdW5jdGlvbj4gd2Via2l0UmVnaXN0ZXIoRG9jdW1lbnQqLCBjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUsIGNvbnN0IERpY3Rpb25hcnkmIG9wdGlvbnMsIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gY3JlYXRlRWxlbWVudChEb2N1bWVu
dCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKKyAgICBzdGF0aWMgRE9NRWxlbWVudENvbnN0cnVj
dG9yKiBjb25zdHJ1Y3Rvck9mKEhUTUxFbGVtZW50Kik7CisKKyAgICBDdXN0b21FbGVtZW50UmVn
aXN0cnkqIHJlZ2lzdHJ5KCkgY29uc3QgeyByZXR1cm4gbV9yZWdpc3RyeS5nZXQoKTsgfQorCitw
cml2YXRlOgorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBjbGVhcmVkIHdoZW4gRG9jdW1l
bnQ6OnJlbW92ZWRMYXN0UmVmKCkgaXMgY2FsbGVkLgorICAgIE93blB0cjxDdXN0b21FbGVtZW50
UmVnaXN0cnk+IG1fcmVnaXN0cnk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50Q3VzdG9tRWxlbWVudC5pZGwgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnRDdXN0b21FbGVtZW50LmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNzMwYTQzNjZi
OGU5ZWE3NjYzZGRlYWQ1N2NkMDBhNTYzYzAzNWVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50Q3VzdG9tRWxlbWVudC5pZGwKQEAgLTAsMCArMSw0NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKK21vZHVsZSBjb3JlIHsKKworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlv
bmFsPUNVU1RPTV9ET01fRUxFTUVOVFMsCisgICAgICAgIFN1cHBsZW1lbnRhbD1Eb2N1bWVudAor
ICAgIF0gRG9jdW1lbnRDdXN0b21FbGVtZW50IHsKKyNpZiBkZWZpbmVkKExBTkdVQUdFX0pBVkFT
Q1JJUFQpICYmIExBTkdVQUdFX0pBVkFTQ1JJUFQKKyAgICAgICAgW1Y4RW5hYmxlZEF0UnVudGlt
ZT1jdXN0b21ET01FbGVtZW50c10KKyAgICAgICAgRnVuY3Rpb24gd2Via2l0UmVnaXN0ZXIoaW4g
RE9NU3RyaW5nIG5hbWUsIGluIFtPcHRpb25hbF0gRGljdGlvbmFyeSBvcHRpb25zKQorICAgICAg
ICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisjZW5kaWYKKyAgICB9OworCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9tYWtlX25hbWVzLnBsCmluZGV4IDM4ZDg1OTVkZWIxNjAzZWI1MmI3NTE4MTcyMjQyOGMzZjUw
NTkxZDQuLmZkMWNiNDlkY2U4ZWFiN2E5YTc4OGUzYTU2ODgzZjcwNTEzNzRlNzMgMTAwNzU1Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9tYWtlX25hbWVzLnBsCkBAIC04MjgsNiArODI4LDEwIEBAIHByaW50IEYgPDxFTkQKICNp
bmNsdWRlICJTZXR0aW5ncy5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVN
RU5UUykKKyNpbmNsdWRlICJEb2N1bWVudEN1c3RvbUVsZW1lbnQuaCIKKyNlbmRpZgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSAkcGFyYW1ldGVyc3tuYW1lc3BhY2V9
TmFtZXM7CkBAIC04NTAsNiArODU0LDI3IEBAIG15ICV0YWdDb25zdHJ1Y3Rvck1hcCA9IGJ1aWxk
Q29uc3RydWN0b3JNYXAoKTsKIAogcHJpbnRDb25zdHJ1Y3RvcnMoJEYsIFwldGFnQ29uc3RydWN0
b3JNYXApOwogCitpZiAoJHBhcmFtZXRlcnN7bmFtZXNwYWNlfSBlcSAiSFRNTCIpIHsKKyAgICBw
cmludCBGIDw8RU5ECitzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGNyZWF0
ZUZhbGxiYWNrRWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZykKK3sKKyNpZiBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKKyAgICBpZiAoUGFzc1Jl
ZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudCA9IERvY3VtZW50Q3VzdG9tRWxlbWVudDo6Y3JlYXRl
RWxlbWVudChkb2N1bWVudCwgdGFnKSkKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisjZW5kaWYK
KyAgICByZXR1cm4gJHBhcmFtZXRlcnN7ZmFsbGJhY2tJbnRlcmZhY2VOYW1lfTo6Y3JlYXRlKHRh
ZywgZG9jdW1lbnQpOworfQorRU5ECisgICAgOworfSBlbHNlIHsKKyAgICBwcmludCBGIDw8RU5E
CitzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8JHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnQ+
IGNyZWF0ZUZhbGxiYWNrRWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZykKK3sKKyAgICByZXR1cm4gJHBhcmFtZXRlcnN7ZmFsbGJhY2tJbnRlcmZhY2VO
YW1lfTo6Y3JlYXRlKHRhZywgZG9jdW1lbnQpOworfQorRU5ECit9CisKIHByaW50IEYgPDxFTkQK
IHN0YXRpYyB2b2lkIGFkZFRhZyhjb25zdCBRdWFsaWZpZWROYW1lJiB0YWcsIENvbnN0cnVjdG9y
RnVuY3Rpb24gZnVuYykKIHsKQEAgLTkxNCw4ICs5MzksNyBAQCBwcmludCBGIDw8RU5ECiAKIEVO
RAogOwotcHJpbnQgRiAiICAgIHJldHVybiAkcGFyYW1ldGVyc3tmYWxsYmFja0ludGVyZmFjZU5h
bWV9OjpjcmVhdGUocU5hbWUsIGRvY3VtZW50KTtcbiI7Ci0KK3ByaW50IEYgIiAgICByZXR1cm4g
Y3JlYXRlRmFsbGJhY2tFbGVtZW50KGRvY3VtZW50LCBxTmFtZSk7XG4iOwogcHJpbnQgRiA8PEVO
RAogfQogCkBAIC0xMTcxLDYgKzExOTUsNyBAQCBFTkQKIDsKICAgICB9IGVsc2lmICgkd3JhcHBl
ckZhY3RvcnlUeXBlIGVxICJWOCIpIHsKICAgICAgICAgcHJpbnQgRiA8PEVORAorI2luY2x1ZGUg
IlY4RnVuY3Rpb24uaCIKICNpbmNsdWRlICJWOCRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50
LmgiCiAgICAgICAgIAogI2luY2x1ZGUgPHY4Lmg+CkBAIC0xMjU1LDkgKzEyODAsMjEgQEAgRU5E
CiAgICAgfSBlbHNpZiAoJHdyYXBwZXJGYWN0b3J5VHlwZSBlcSAiVjgiKSB7CiAgICAgICAgIHBy
aW50IEYgPDxFTkQKICAgICAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXJGdW5jdGlvbihlbGVtZW50
LCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworRU5ECis7CisgICAgICAgIGlmICgkcGFyYW1l
dGVyc3tuYW1lc3BhY2V9IGVxICJIVE1MIikgeworICAgICAgICAgICAgcHJpbnQgRiA8PEVORAor
I2lmIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorICAgIHJldHVybiBWOEVsZW1lbnRDb25z
dHJ1Y3Rvcjo6d3JhcEVsZW1lbnQoZWxlbWVudCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsK
KyNlbmRpZgorRU5ECis7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcmludCBGIDw8
RU5ECiAgICAgcmV0dXJuIFY4JHBhcmFtZXRlcnN7ZmFsbGJhY2tJbnRlcmZhY2VOYW1lfTo6d3Jh
cCh0byRwYXJhbWV0ZXJze2ZhbGxiYWNrSW50ZXJmYWNlTmFtZX0oZWxlbWVudCksIGNyZWF0aW9u
Q29udGV4dCwgaXNvbGF0ZSk7CiBFTkQKIDsKKyAgICAgICAgfQogICAgIH0KICAgICBwcmludCBG
IDw8RU5ECiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TdXBwbGVtZW50
YWJsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3VwcGxlbWVudGFibGUuaAppbmRleCAw
YTI3OGZjYTM3NTdiYTE5MWI5N2FlY2FmZWFkZDg3YmM1ZWExZTU2Li5mZTg4ZWRjNjMwZjgzNjMz
MTAzNjMwM2JjZmNkMjU0OTdiMjY2ZjIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TdXBwbGVtZW50YWJsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N1cHBs
ZW1lbnRhYmxlLmgKQEAgLTc0LDYgKzc0LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9z
dXBwbGVtZW50cy5nZXQoa2V5KTsKICAgICB9CiAKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGNsZWFy
U3VwcGxlbWVudHMoKSB7IG1fc3VwcGxlbWVudHMuY2xlYXIoKTsgfQorCiBwcml2YXRlOgogICAg
IHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmcsIE93blB0cjxTdXBwbGVtZW50PFQ+ID4gPiBT
dXBwbGVtZW50TWFwOwogICAgIFN1cHBsZW1lbnRNYXAgbV9zdXBwbGVtZW50czsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaSBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vZmVhdHVyZXMuZ3lwaQppbmRleCA4MTZjMDdlOGFiMjJhOWM0NTRmMDAxODQwOTg2
NjU2M2M1YzkyODIzLi5jYzFjOGEwNDZmNjg0M2E2OTdmNWM3NjlkODgwNTI3MGNiODZjZTM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCkBAIC01MSw2ICs1MSw3IEBACiAgICAg
ICAnRU5BQkxFX0NTU19TSEFERVJTPTEnLAogICAgICAgJ0VOQUJMRV9DU1NfVkFSSUFCTEVTPTEn
LAogICAgICAgJ0VOQUJMRV9DU1NfU1RJQ0tZX1BPU0lUSU9OPTEnLAorICAgICAgJ0VOQUJMRV9D
VVNUT01fRE9NX0VMRU1FTlRTPTEnLAogICAgICAgJ0VOQUJMRV9DVVNUT01fU0NIRU1FX0hBTkRM
RVI9MCcsCiAgICAgICAnRU5BQkxFX0RBU0hCT0FSRF9TVVBQT1JUPTAnLAogICAgICAgJ0VOQUJM
RV9EQVRBX1RSQU5TRkVSX0lURU1TPTEnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViUnVudGltZUZlYXR1cmVzLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJSdW50aW1lRmVhdHVyZXMuaAppbmRleCA2NGNmODI5YjUwMjhhYTY0NmFlYmE5
YTkwZTg5Mzg4M2MwYjY5M2I4Li44Y2M2MGY0ZjA3NWQwMWM5ZjQ0MGI4MzFlN2ExNDNhZjcxYjA2
NjE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJSdW50aW1l
RmVhdHVyZXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJSdW50aW1l
RmVhdHVyZXMuaApAQCAtMTMyLDYgKzEzMiw5IEBAIHB1YmxpYzoKICAgICBXRUJLSVRfRVhQT1JU
IHN0YXRpYyB2b2lkIGVuYWJsZVNoYWRvd0RPTShib29sKTsKICAgICBXRUJLSVRfRVhQT1JUIHN0
YXRpYyBib29sIGlzU2hhZG93RE9NRW5hYmxlZCgpOwogCisgICAgV0VCS0lUX0VYUE9SVCBzdGF0
aWMgdm9pZCBlbmFibGVDdXN0b21ET01FbGVtZW50cyhib29sKTsKKyAgICBXRUJLSVRfRVhQT1JU
IHN0YXRpYyBib29sIGlzQ3VzdG9tRE9NRWxlbWVudHNFbmFibGVkKCk7CisKICAgICBXRUJLSVRf
RVhQT1JUIHN0YXRpYyB2b2lkIGVuYWJsZVN0eWxlU2NvcGVkKGJvb2wpOwogICAgIFdFQktJVF9F
WFBPUlQgc3RhdGljIGJvb2wgaXNTdHlsZVNjb3BlZEVuYWJsZWQoKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUnVudGltZUZlYXR1cmVzLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlJ1bnRpbWVGZWF0dXJlcy5jcHAKaW5kZXggNGU2NGM2
NjRiZmZkMGEwYjQ2N2RkY2JiN2UwZGQ1MDUzYjk2ODA5YS4uN2ExOWI2YTdiNGQ3YzgyZWRkNmM5
M2Q5MjEyYmU3NzlmYTc3MmY1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViUnVudGltZUZlYXR1cmVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJSdW50aW1lRmVhdHVyZXMuY3BwCkBAIC01MDMsNiArNTAzLDI1IEBAIGJvb2wgV2ViUnVu
dGltZUZlYXR1cmVzOjppc1NoYWRvd0RPTUVuYWJsZWQoKQogI2VuZGlmCiB9CiAKK3ZvaWQgV2Vi
UnVudGltZUZlYXR1cmVzOjplbmFibGVDdXN0b21ET01FbGVtZW50cyhib29sIGVuYWJsZSkKK3sK
KyNpZiBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKKyAgICBSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzZXRDdXN0b21ET01FbGVtZW50cyhlbmFibGUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oZW5hYmxlKTsKKyNlbmRpZgorfQorCitib29sIFdlYlJ1bnRpbWVGZWF0dXJlczo6aXNDdXN0
b21ET01FbGVtZW50c0VuYWJsZWQoKQoreworI2lmIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRT
KQorICAgIHJldHVybiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpjdXN0b21ET01FbGVtZW50c0Vu
YWJsZWQoKTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKKwogdm9pZCBX
ZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZVN0eWxlU2NvcGVkKGJvb2wgZW5hYmxlKQogewogI2lm
IEVOQUJMRShTVFlMRV9TQ09QRUQpCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0U2hlbGwuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFNoZWxsLmNwcAppbmRleCAyNjkyZTc0NTg2MGViMzM5YjM5MGZhZjk1NDQ1Mjk4OWJmMDVlN2Yy
Li43MjAwYjI4MzY1Y2QyZjQ4ZjNhNGYwYTYxMTBiOTdhODg0Y2QzN2UwIDEwMDY0NAotLS0gYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCisrKyBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKQEAgLTE0Miw2ICsxNDIsNyBAQCBU
ZXN0U2hlbGw6OlRlc3RTaGVsbCgpCiAgICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVWaWRl
b1RyYWNrKHRydWUpOwogICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlR2FtZXBhZCh0cnVl
KTsKICAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZVNoYWRvd0RPTSh0cnVlKTsKKyAgICBX
ZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZUN1c3RvbURPTUVsZW1lbnRzKHRydWUpOwogICAgIFdl
YlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlU3R5bGVTY29wZWQodHJ1ZSk7CiAgICAgV2ViUnVudGlt
ZUZlYXR1cmVzOjplbmFibGVTY3JpcHRlZFNwZWVjaCh0cnVlKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170596</attachid>
            <date>2012-10-25 02:33:43 -0700</date>
            <delta_ts>2012-11-16 02:00:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100229-20121025183217.patch</filename>
            <type>text/plain</type>
            <size>57189</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyMzM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZTdkNGEyNzgy
ODRjYTE5OWQzMGRiMGFmMjhkMDc0YmQ0ZDQ5NjczYy4uZDFiMjE1NjFlZWI1ZDEwODhlMTgzY2Y2
NDhhOWExNDgwMjBhMDRhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtOTk5LDYgKzk5OSw3IEBACiAg
ICAgICAgICAgICAnZG9tL0RldmljZU1vdGlvbkV2ZW50LmlkbCcsCiAgICAgICAgICAgICAnZG9t
L0RldmljZU9yaWVudGF0aW9uRXZlbnQuaWRsJywKICAgICAgICAgICAgICdkb20vRG9jdW1lbnQu
aWRsJywKKyAgICAgICAgICAgICdkb20vRG9jdW1lbnRDdXN0b21FbGVtZW50LmlkbCcsCiAgICAg
ICAgICAgICAnZG9tL0RvY3VtZW50RnJhZ21lbnQuaWRsJywKICAgICAgICAgICAgICdkb20vRG9j
dW1lbnRUeXBlLmlkbCcsCiAgICAgICAgICAgICAnZG9tL0VsZW1lbnQuaWRsJywKQEAgLTIyMjks
NiArMjIzMCw4IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvRE9NRGF0YS5oJywKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuY3BwJywKICAgICAgICAgICAgICdiaW5k
aW5ncy92OC9ET01EYXRhU3RvcmUuaCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvRE9NRWxl
bWVudENvbnN0cnVjdG9yLmgnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0RPTUVsZW1lbnRD
b25zdHJ1Y3Rvci5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0RPTVRyYW5zYWN0aW9u
LmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvRE9NVHJhbnNhY3Rpb24uaCcsCiAgICAg
ICAgICAgICAnYmluZGluZ3MvdjgvRE9NV3JhcHBlcldvcmxkLmNwcCcsCkBAIC0yMzA3LDYgKzIz
MTAsNyBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4Q2FsbGJhY2suaCcsCiAgICAgICAg
ICAgICAnYmluZGluZ3MvdjgvVjhDb2xsZWN0aW9uLmNwcCcsCiAgICAgICAgICAgICAnYmluZGlu
Z3MvdjgvVjhDb2xsZWN0aW9uLmgnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4Q29udGV4
dERpc3Bvc2FibGUuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhEZXBlbmRlbnRSZXRh
aW5lZC5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOERPTUNvbmZpZ3VyYXRpb24uY3Bw
JywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOERPTUNvbmZpZ3VyYXRpb24uaCcsCkBAIC0y
MzIwLDYgKzIzMjQsOCBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4RXZlbnRMaXN0ZW5l
ci5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEV2ZW50TGlzdGVuZXJMaXN0LmNwcCcs
CiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhFdmVudExpc3RlbmVyTGlzdC5oJywKKyAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9WOERPTUVsZW1lbnRDb25zdHJ1Y3Rvci5oJywKKyAgICAgICAg
ICAgICdiaW5kaW5ncy92OC9WOERPTUVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAnLAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcCcsCiAgICAgICAgICAgICAnYmluZGlu
Z3MvdjgvVjhHQ0NvbnRyb2xsZXIuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhHQ0Zv
ckNvbnRleHREaXNwb3NlLmNwcCcsCkBAIC0zODAzLDYgKzM4MDksOCBAQAogICAgICAgICAgICAg
J2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5jcHAnLAogICAgICAgICAgICAgJ2RvbS9Db250
ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlci5jcHAnLAogICAgICAgICAgICAgJ2RvbS9Dcm9zc1RocmVh
ZFRhc2suaCcsCisgICAgICAgICAgICAnZG9tL0N1c3RvbUVsZW1lbnREZWZpbml0aW9uLmNwcCcs
CisgICAgICAgICAgICAnZG9tL0N1c3RvbUVsZW1lbnREZWZpbml0aW9uLmgnLAogICAgICAgICAg
ICAgJ2RvbS9DdXN0b21FdmVudC5jcHAnLAogICAgICAgICAgICAgJ2RvbS9DdXN0b21FdmVudC5o
JywKICAgICAgICAgICAgICdkb20vRE9NQWxsSW5PbmUuY3BwJywKQEAgLTM4MzcsNiArMzg0NSw4
IEBACiAgICAgICAgICAgICAnZG9tL0RldmljZU9yaWVudGF0aW9uRXZlbnQuY3BwJywKICAgICAg
ICAgICAgICdkb20vRGV2aWNlT3JpZW50YXRpb25FdmVudC5oJywKICAgICAgICAgICAgICdkb20v
RG9jdW1lbnQuY3BwJywKKyAgICAgICAgICAgICdkb20vRG9jdW1lbnRDdXN0b21FbGVtZW50LmNw
cCcsCisgICAgICAgICAgICAnZG9tL0RvY3VtZW50Q3VzdG9tRWxlbWVudC5oJywKICAgICAgICAg
ICAgICdkb20vRG9jdW1lbnRFdmVudFF1ZXVlLmNwcCcsCiAgICAgICAgICAgICAnZG9tL0RvY3Vt
ZW50RXZlbnRRdWV1ZS5oJywKICAgICAgICAgICAgICdkb20vRG9jdW1lbnRGcmFnbWVudC5jcHAn
LApAQCAtNDA0Miw2ICs0MDUyLDcgQEAKICAgICAgICAgICAgICdodG1sL0NsYXNzTGlzdC5oJywK
ICAgICAgICAgICAgICdodG1sL0NvbG9ySW5wdXRUeXBlLmNwcCcsCiAgICAgICAgICAgICAnaHRt
bC9Db2xvcklucHV0VHlwZS5oJywKKyAgICAgICAgICAgICdodG1sL0NvbG9ySW5wdXRUeXBlLmgn
LAogICAgICAgICAgICAgJ2h0bWwvRE9NRm9ybURhdGEuY3BwJywKICAgICAgICAgICAgICdodG1s
L0RPTUZvcm1EYXRhLmgnLAogICAgICAgICAgICAgJ2h0bWwvRE9NU2V0dGFibGVUb2tlbkxpc3Qu
Y3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGlt
ZUVuYWJsZWRGZWF0dXJlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1
bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwCmluZGV4IDdjZDg3ZDEzZTgxZTU2YTE2MTJhNjNlNmRk
MGYzZTBiMzIyNmMwY2UuLmMwYTM1OWVmMzEwMGMxOThmN2IyYzA5NmY2YjAxZmRiYmFjMzA1YTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJs
ZWRGZWF0dXJlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50
aW1lRW5hYmxlZEZlYXR1cmVzLmNwcApAQCAtMTkzLDYgKzE5MywxMCBAQCBib29sIFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OmlzU2hhZG93RE9NRW5hYmxlZCA9IGZhbHNlOwogYm9vbCBSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjppc0F1dGhvclNoYWRvd0RPTUZvckFueUVsZW1lbnRFbmFibGVkID0g
ZmFsc2U7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorYm9vbCBS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjppc0N1c3RvbURPTUVsZW1lbnRzRW5hYmxlZCA9IGZhbHNl
OworI2VuZGlmCisKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQogYm9vbCBSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjppc1N0eWxlU2NvcGVkRW5hYmxlZCA9IGZhbHNlOwogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVy
ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0
dXJlcy5oCmluZGV4IDMzYTdlNmZlNWI3ZDdiYTI0MWZmNzM2YjI4MGE2YzhmYTllZmQzN2UuLjM1
NWMxNTM4ZTg3NTkxOTUzYzQyM2U5NTY2NmQ1NTBmMDY0MDVmODggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5o
CkBAIC0yMTUsNiArMjE1LDExIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRBdXRob3JT
aGFkb3dET01Gb3JBbnlFbGVtZW50RW5hYmxlZChib29sIGlzRW5hYmxlZCkgeyBpc0F1dGhvclNo
YWRvd0RPTUZvckFueUVsZW1lbnRFbmFibGVkID0gaXNFbmFibGVkOyB9CiAjZW5kaWYKIAorI2lm
IEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorICAgIHN0YXRpYyBib29sIGN1c3RvbURPTUVs
ZW1lbnRzRW5hYmxlZCgpIHsgcmV0dXJuIGlzQ3VzdG9tRE9NRWxlbWVudHNFbmFibGVkOyB9Cisg
ICAgc3RhdGljIHZvaWQgc2V0Q3VzdG9tRE9NRWxlbWVudHMoYm9vbCBpc0VuYWJsZWQpIHsgaXND
dXN0b21ET01FbGVtZW50c0VuYWJsZWQgPSBpc0VuYWJsZWQ7IH0KKyNlbmRpZgorCiAjaWYgRU5B
QkxFKFNUWUxFX1NDT1BFRCkKICAgICBzdGF0aWMgYm9vbCBzdHlsZVNjb3BlZEVuYWJsZWQoKSB7
IHJldHVybiBpc1N0eWxlU2NvcGVkRW5hYmxlZDsgfQogICAgIHN0YXRpYyB2b2lkIHNldFN0eWxl
U2NvcGVkRW5hYmxlZChib29sIGlzRW5hYmxlZCkgeyBpc1N0eWxlU2NvcGVkRW5hYmxlZCA9IGlz
RW5hYmxlZDsgfQpAQCAtMzI4LDYgKzMzMywxMCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBib29s
IGlzQXV0aG9yU2hhZG93RE9NRm9yQW55RWxlbWVudEVuYWJsZWQ7CiAjZW5kaWYKIAorI2lmIEVO
QUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorICAgIHN0YXRpYyBib29sIGlzQ3VzdG9tRE9NRWxl
bWVudHNFbmFibGVkOworI2VuZGlmCisKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQogICAgIHN0
YXRpYyBib29sIGlzU3R5bGVTY29wZWRFbmFibGVkOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCmluZGV4IDU0NzcyZmY5
ODNiOGI5NDgzMTZlZjBlNDY2OGMxN2UyZDZjOTIwODIuLmI1MzM1ODg4MzZlOTQxNjUwYjdkNjc3
MTg5ZDFhMmZlNDVhY2Y4MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCkBAIC0zNDYsNyArMzQ2LDcgQEAgc3ViIEdlbmVyYXRl
SGVhZGVyCiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKIGNsYXNzIFY4JHtu
YXRpdmVUeXBlfUNvbnN0cnVjdG9yIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdldFRlbXBsYXRlKCk7CisgICAgc3RhdGljIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBHZXRUZW1wbGF0ZSh2b2lkKiA9IDApOwog
ICAgIHN0YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKIH07CiAKQEAgLTM3Nyw3ICszNzcsNyBA
QCBFTkQKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CiAgICAgc3RhdGljIGJvb2wg
SGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKICAgICBzdGF0aWMgdjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdldFJhd1RlbXBsYXRlKCk7Ci0gICAgc3RhdGlj
IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBHZXRUZW1wbGF0ZSgpOworICAg
IHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0VGVtcGxhdGUo
dm9pZCogPSAwKTsKICAgICBzdGF0aWMgJHtuYXRpdmVUeXBlfSogdG9OYXRpdmUodjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBvYmplY3QpCiAgICAgewogICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDwke25hdGl2ZVR5cGV9Kj4ob2JqZWN0LT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQo
djhET01XcmFwcGVyT2JqZWN0SW5kZXgpKTsKQEAgLTIwNTksMTIgKzIwNTksMTIgQEAgc3ViIEdl
bmVyYXRlTmFtZWRDb25zdHJ1Y3RvckNhbGxiYWNrCiAKICAgICBpZiAoJGRhdGFOb2RlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiQWN0aXZlRE9NT2JqZWN0In0pIHsKICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsIDw8RU5EKTsKLVdyYXBwZXJUeXBlSW5mbyBWOCR7aW1wbENsYXNzTmFtZX1Db25z
dHJ1Y3Rvcjo6aW5mbyA9IHsgVjgke2ltcGxDbGFzc05hbWV9Q29uc3RydWN0b3I6OkdldFRlbXBs
YXRlLCBWOCR7aW1wbENsYXNzTmFtZX06OmRlcmVmT2JqZWN0LCBWOCR7aW1wbENsYXNzTmFtZX06
OnRvQWN0aXZlRE9NT2JqZWN0LCAwLCBWOCR7aW1wbENsYXNzTmFtZX06Omluc3RhbGxQZXJDb250
ZXh0UHJvdG90eXBlUHJvcGVydGllcywgMCwgV3JhcHBlclR5cGVPYmplY3RQcm90b3R5cGUgfTsK
K1dyYXBwZXJUeXBlSW5mbyBWOCR7aW1wbENsYXNzTmFtZX1Db25zdHJ1Y3Rvcjo6aW5mbyA9IHsg
Vjgke2ltcGxDbGFzc05hbWV9Q29uc3RydWN0b3I6OkdldFRlbXBsYXRlLCAwLCBWOCR7aW1wbENs
YXNzTmFtZX06OmRlcmVmT2JqZWN0LCBWOCR7aW1wbENsYXNzTmFtZX06OnRvQWN0aXZlRE9NT2Jq
ZWN0LCAwLCBWOCR7aW1wbENsYXNzTmFtZX06Omluc3RhbGxQZXJDb250ZXh0UHJvdG90eXBlUHJv
cGVydGllcywgMCwgV3JhcHBlclR5cGVPYmplY3RQcm90b3R5cGUgfTsKIAogRU5ECiAgICAgfSBl
bHNlIHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKLVdyYXBwZXJUeXBlSW5m
byBWOCR7aW1wbENsYXNzTmFtZX1Db25zdHJ1Y3Rvcjo6aW5mbyA9IHsgVjgke2ltcGxDbGFzc05h
bWV9Q29uc3RydWN0b3I6OkdldFRlbXBsYXRlLCAwLCAwLCAwLCBWOCR7aW1wbENsYXNzTmFtZX06
Omluc3RhbGxQZXJDb250ZXh0UHJvdG90eXBlUHJvcGVydGllcywgMCwgV3JhcHBlclR5cGVPYmpl
Y3RQcm90b3R5cGUgfTsKK1dyYXBwZXJUeXBlSW5mbyBWOCR7aW1wbENsYXNzTmFtZX1Db25zdHJ1
Y3Rvcjo6aW5mbyA9IHsgVjgke2ltcGxDbGFzc05hbWV9Q29uc3RydWN0b3I6OkdldFRlbXBsYXRl
LCAwLCAwLCAwLCAwLCBWOCR7aW1wbENsYXNzTmFtZX06Omluc3RhbGxQZXJDb250ZXh0UHJvdG90
eXBlUHJvcGVydGllcywgMCwgV3JhcHBlclR5cGVPYmplY3RQcm90b3R5cGUgfTsKIAogRU5ECiAg
ICAgfQpAQCAtMjE0NSw3ICsyMTQ1LDcgQEAgRU5ECiAKICAgICBwdXNoKEBpbXBsQ29udGVudCwg
PDxFTkQpOwogCi12ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjgke2ltcGxD
bGFzc05hbWV9Q29uc3RydWN0b3I6OkdldFRlbXBsYXRlKCkKK3Y4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiBWOCR7aW1wbENsYXNzTmFtZX1Db25zdHJ1Y3Rvcjo6R2V0VGVtcGxh
dGUodm9pZCopCiB7CiAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPiBjYWNoZWRUZW1wbGF0ZTsKICAgICBpZiAoIWNhY2hlZFRlbXBsYXRlLklzRW1wdHkoKSkK
QEAgLTI2MDQsNyArMjYwNCw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAKICAgICBt
eSAkV3JhcHBlclR5cGVQcm90b3R5cGUgPSAkZGF0YU5vZGUtPmlzRXhjZXB0aW9uID8gIldyYXBw
ZXJUeXBlRXJyb3JQcm90b3R5cGUiIDogIldyYXBwZXJUeXBlT2JqZWN0UHJvdG90eXBlIjsKIAot
ICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICJXcmFwcGVyVHlwZUluZm8gJHtjbGFzc05hbWV9
OjppbmZvID0geyAke2NsYXNzTmFtZX06OkdldFRlbXBsYXRlLCAke2NsYXNzTmFtZX06OmRlcmVm
T2JqZWN0LCAkdG9BY3RpdmUsICRkb21WaXNpdG9yLCAke2NsYXNzTmFtZX06Omluc3RhbGxQZXJD
b250ZXh0UHJvdG90eXBlUHJvcGVydGllcywgJHBhcmVudENsYXNzSW5mbywgJFdyYXBwZXJUeXBl
UHJvdG90eXBlIH07XG5cbiIpOworICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICJXcmFwcGVy
VHlwZUluZm8gJHtjbGFzc05hbWV9OjppbmZvID0geyAke2NsYXNzTmFtZX06OkdldFRlbXBsYXRl
LCAwLCAke2NsYXNzTmFtZX06OmRlcmVmT2JqZWN0LCAkdG9BY3RpdmUsICRkb21WaXNpdG9yLCAk
e2NsYXNzTmFtZX06Omluc3RhbGxQZXJDb250ZXh0UHJvdG90eXBlUHJvcGVydGllcywgJHBhcmVu
dENsYXNzSW5mbywgJFdyYXBwZXJUeXBlUHJvdG90eXBlIH07XG5cbiIpOwogICAgIHB1c2goQGlt
cGxDb250ZW50RGVjbHMsICJuYW1lc3BhY2UgJHtpbnRlcmZhY2VOYW1lfVY4SW50ZXJuYWwge1xu
XG4iKTsKIAogICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICJ0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4gdm9pZCBWOF9VU0UoVCkgeyB9XG5cbiIpOwpAQCAtMzAzNCw3ICszMDM0LDcgQEAgdjg6OlBl
cnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+ICR7Y2xhc3NOYW1lfTo6R2V0UmF3VGVtcGxh
dGUoKQogICAgIHJldHVybiB0ZW1wbDsKIH0KIAotdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+ICR7Y2xhc3NOYW1lfTo6R2V0VGVtcGxhdGUoKQordjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+ICR7Y2xhc3NOYW1lfTo6R2V0VGVtcGxhdGUodm9pZCopCiB7CiAg
ICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsK
ICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0
YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L0RPTUVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9ET01FbGVtZW50Q29uc3RydWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2ZmUxOGY3
MTI2NDBlNzQzZDRmOWNjMWZhNDY0ZTM2ZDdmNWUyNmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01FbGVtZW50Q29uc3RydWN0b3IuY3BwCkBAIC0wLDAg
KzEsMTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRPTUVsZW1lbnRDb25zdHJ1
Y3Rvci5oIgorCisjaWYgRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCisKKyNpbmNsdWRlICJD
dXN0b21FbGVtZW50RGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIkRvY3VtZW50Q3VzdG9tRWxlbWVu
dC5oIgorI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4RE9NRWxlbWVudENvbnN0
cnVjdG9yLmgiCisjaW5jbHVkZSAiVjhIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+
IERPTUVsZW1lbnRDb25zdHJ1Y3Rvcjo6dG9WOCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0
aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqKQoreworICAgIHJldHVybiBlbGVtZW50VGVtcGxhdGUo
KS0+R2V0RnVuY3Rpb24oKTsKK30KKworUGFzc1JlZlB0cjxET01FbGVtZW50Q29uc3RydWN0b3I+
IERPTUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlKEN1c3RvbUVsZW1lbnREZWZpbml0aW9uKiBk
ZWZpbml0aW9uKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRE9NRWxlbWVudENvbnN0cnVj
dG9yKGRlZmluaXRpb24pKTsKK30KKworRE9NRWxlbWVudENvbnN0cnVjdG9yOjpET01FbGVtZW50
Q29uc3RydWN0b3IoQ3VzdG9tRWxlbWVudERlZmluaXRpb24qIGRlZmluaXRpb24pCisgICAgOiBt
X2RlZmluaXRpb24oZGVmaW5pdGlvbikKK3sKKyAgICBXcmFwcGVyVHlwZUluZm8gaW5mbyA9IHsg
Z2V0RWxlbWVudFRlbXBsYXRlLCBjb25zdF9jYXN0PERPTUVsZW1lbnRDb25zdHJ1Y3Rvcio+KHRo
aXMpLCBWOEhUTUxFbGVtZW50OjpkZXJlZk9iamVjdCwgMCwgMCwgMCwgJlY4SFRNTEVsZW1lbnQ6
OmluZm8sIFdyYXBwZXJUeXBlT2JqZWN0UHJvdG90eXBlIH07CisgICAgbV9pbmZvID0gYWRvcHRQ
dHIobmV3IFdyYXBwZXJUeXBlSW5mbyhpbmZvKSk7Cit9CisKK0RPTUVsZW1lbnRDb25zdHJ1Y3Rv
cjo6fkRPTUVsZW1lbnRDb25zdHJ1Y3RvcigpCit7Cit9CisKK3ZvaWQgRE9NRWxlbWVudENvbnN0
cnVjdG9yOjp3aWxsRGVzdHJveURvY3VtZW50KCkKK3sKKyAgICBtX2RvY3VtZW50ID0gMDsKKyAg
ICBtX2RlZmluaXRpb24gPSAwOworfQorCit2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRl
PiBET01FbGVtZW50Q29uc3RydWN0b3I6OnBhcmVudFRlbXBsYXRlKCkgY29uc3QKK3sKKyAgICAv
LyBGSVhNRTogU3VwcG9ydCBpbmhlcml0YW5jZQorICAgIHJldHVybiBWOEhUTUxFbGVtZW50OjpH
ZXRUZW1wbGF0ZSgpOworfQorCitEb2N1bWVudCogRE9NRWxlbWVudENvbnN0cnVjdG9yOjpkb2N1
bWVudCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2RlZmluaXRpb24pCisgICAgICAgIHJldHVybiAw
OworICAgIHJldHVybiBtX2RlZmluaXRpb24tPmRvY3VtZW50KCk7Cit9CisKK1Bhc3NSZWZQdHI8
SFRNTEVsZW1lbnQ+IERPTUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlRWxlbWVudCgpIGNvbnN0
Cit7CisgICAgaWYgKCFtX2RlZmluaXRpb24pCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVy
biBtX2RlZmluaXRpb24tPmNyZWF0ZUVsZW1lbnQoKTsKK30KKwordjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IERPTUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Z2V0RWxlbWVudFRlbXBs
YXRlKHZvaWQqIHBhcmFtKQoreworICAgIEFTU0VSVChwYXJhbSk7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PERPTUVsZW1lbnRDb25zdHJ1Y3Rvcio+KHBhcmFtKS0+ZWxlbWVudFRlbXBsYXRlKCk7
Cit9CisKK2NvbnN0IGNoYXIqIERPTUVsZW1lbnRDb25zdHJ1Y3Rvcjo6aW50ZXJmYWNlTmFtZSgp
IGNvbnN0Cit7CisgICAgaWYgKCFtX2RlZmluaXRpb24pCisgICAgICAgIHJldHVybiAiIjsKKyAg
ICByZXR1cm4gbV9kZWZpbml0aW9uLT5pbnRlcmZhY2VOYW1lKCk7Cit9CisKK2lubGluZSB2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gRE9NRWxlbWVudENvbnN0cnVjdG9yOjpl
bGVtZW50VGVtcGxhdGUoKQoreworICAgIGlmIChtX3RlbXBsYXRlLklzRW1wdHkoKSkKKyAgICAg
ICAgbV90ZW1wbGF0ZSA9IGNyZWF0ZVRlbXBsYXRlKCk7CisgICAgcmV0dXJuIG1fdGVtcGxhdGU7
Cit9CisKK3Y4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBET01FbGVtZW50Q29u
c3RydWN0b3I6OmNyZWF0ZVRlbXBsYXRlKCkKK3sKKyAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxl
U2NvcGU7CisKKyAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBjb250YWN0IGJldHdlZW4gZWFjaCBE
T01FbGVtZW50Q29uc3RydWN0b3IKKyAgICAvLyBhbmQgY29ycmVzcG9uZGluZyBjb250ZXh0LiBU
aGUgb2JqZWN0IHJlZ2lzdGVycyBpdHNlbGYgdG8gdGhlCisgICAgLy8gY29udGV4dCBzbyB0aGF0
IGl0IGNhbiBzdXJ2aXZlIGV2ZW4gYWZ0ZXIgdGhlIGhvc3QgZG9jdW1lbnQgaXMKKyAgICAvLyBk
ZWxldGVkLgorICAgIHJlZ2lzdGVyVG8oVjhQZXJDb250ZXh0RGF0YTo6ZnJvbSh2ODo6Q29udGV4
dDo6R2V0Q3VycmVudCgpKSk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRl
PiBkZXNjID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKKyAgICBWOEVsZW1lbnRDb25zdHJ1Y3Rvcjo6
Y29uZmlndXJlRnVuY3Rpb25UZW1wbGF0ZShkZXNjLCB0aGlzKTsKKyAgICByZXR1cm4gdjg6OlBl
cnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+OjpOZXcoZGVzYyk7Cit9CisKK3ZvaWQgRE9N
RWxlbWVudENvbnN0cnVjdG9yOjpyZWdpc3RlclRvKFY4UGVyQ29udGV4dERhdGEqIGNvbnRleHQp
Cit7CisgICAgY29udGV4dC0+YWRkRGlzcG9zYWJsZSh0aGlzKTsKKyAgICByZWYoKTsKK30KKwor
dm9pZCBET01FbGVtZW50Q29uc3RydWN0b3I6OmNvbnRleHREaXNwb3NpbmcoKQoreworICAgIGRl
cmVmKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShD
VVNUT01fRE9NX0VMRU1FTlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvRE9NRWxlbWVudENvbnN0cnVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9E
T01FbGVtZW50Q29uc3RydWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZWRlMjRmNjNhY2YwZTJjOTY5M2U4
MWY3YjM2OGNmYjAyOTkwNzZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvRE9NRWxlbWVudENvbnN0cnVjdG9yLmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
RE9NRWxlbWVudENvbnN0cnVjdG9yX2gKKyNkZWZpbmUgRE9NRWxlbWVudENvbnN0cnVjdG9yX2gK
KworI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJWOENvbnRleHREaXNwb3Nh
YmxlLmgiCisjaW5jbHVkZSA8djguaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEN1c3RvbUVsZW1lbnREZWZpbml0aW9uOworY2xhc3MgRGljdGlvbmFyeTsKK2NsYXNzIERvY3Vt
ZW50OworY2xhc3MgSFRNTEVsZW1lbnQ7CitjbGFzcyBXcmFwcGVyVHlwZUluZm87CitjbGFzcyBW
OFBlckNvbnRleHREYXRhOworCisjaWYgRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCisKK2Ns
YXNzIERPTUVsZW1lbnRDb25zdHJ1Y3RvciA6IHB1YmxpYyBSZWZDb3VudGVkPERPTUVsZW1lbnRD
b25zdHJ1Y3Rvcj4sIHB1YmxpYyBWOENvbnRleHREaXNwb3NhYmxlIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxET01FbGVtZW50Q29uc3RydWN0b3I+IGNyZWF0ZShDdXN0b21FbGVt
ZW50RGVmaW5pdGlvbiopOworCisgICAgZXhwbGljaXQgRE9NRWxlbWVudENvbnN0cnVjdG9yKEN1
c3RvbUVsZW1lbnREZWZpbml0aW9uKik7CisgICAgdmlydHVhbCB+RE9NRWxlbWVudENvbnN0cnVj
dG9yKCk7CisKKyAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRy
PEhUTUxFbGVtZW50PiBjcmVhdGVFbGVtZW50KCkgY29uc3Q7CisgICAgY29uc3QgY2hhciogaW50
ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZvaWQgd2lsbERlc3Ryb3lEb2N1bWVudCgpOworCisg
ICAgLy8gVjggc3BlY2lmaWMgaW50ZXJmYWNlCisgICAgc3RhdGljIERPTUVsZW1lbnRDb25zdHJ1
Y3RvciogdG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pik7CisgICAgc3RhdGljIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBnZXRFbGVtZW50VGVtcGxhdGUodm9pZCop
OworCisgICAgV3JhcHBlclR5cGVJbmZvKiBlbGVtZW50VHlwZUluZm8oKSBjb25zdCB7IHJldHVy
biBtX2luZm8uZ2V0KCk7IH0KKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBw
YXJlbnRUZW1wbGF0ZSgpIGNvbnN0OworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSopOworICAg
IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBlbGVtZW50VGVtcGxhdGUoKTsK
KyAgICAKK3ByaXZhdGU6CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IGNyZWF0ZVRlbXBsYXRlKCk7CisKKyAgICB2b2lkIHJlZ2lzdGVyVG8oVjhQZXJDb250ZXh0RGF0
YSopOworICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0RGlzcG9zaW5nKCkgT1ZFUlJJREU7CisKKyAg
ICBEb2N1bWVudCogbV9kb2N1bWVudDsKKyAgICBDdXN0b21FbGVtZW50RGVmaW5pdGlvbiogbV9k
ZWZpbml0aW9uOworICAgIE93blB0cjxXcmFwcGVyVHlwZUluZm8+IG1faW5mbzsKKyAgICB2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gbV90ZW1wbGF0ZTsKK307CisKKyNlbmRp
ZiAvLyBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRE9NRWxlbWVudENvbnN0cnVjdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L05QVjhPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvTlBWOE9iamVjdC5jcHAKaW5kZXggZTY1ODk2NDE3MDc5MjE4ZTU5ZDg4YzQ5MTRi
YzY0MzRjYmE4OTY1Mi4uOGNhY2FmODI1MTYzNTUyODlmYjQyNmE5MmYzODllNDcxYzI4ZGY3OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvTlBWOE9iamVjdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvTlBWOE9iamVjdC5jcHAKQEAgLTUxLDcgKzUx
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXcmFwcGVyVHlwZUluZm8qIG5wT2JqZWN0VHlw
ZUluZm8oKQogewotICAgIHN0YXRpYyBXcmFwcGVyVHlwZUluZm8gdHlwZUluZm8gPSB7IDAsIDAs
IDAsIDAsIDAsIDAsIFdyYXBwZXJUeXBlT2JqZWN0UHJvdG90eXBlIH07CisgICAgc3RhdGljIFdy
YXBwZXJUeXBlSW5mbyB0eXBlSW5mbyA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgV3JhcHBlclR5
cGVPYmplY3RQcm90b3R5cGUgfTsKICAgICByZXR1cm4gJnR5cGVJbmZvOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOENvbnRleHREaXNwb3NhYmxlLmggYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOENvbnRleHREaXNwb3NhYmxlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNzkyNzViZDVjYTExOTgxNGJhMmM3MzAxYWIzNmQ4OTAxNGVmMDI2YwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Q29udGV4dERpc3Bvc2FibGUuaApA
QCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBWOENvbnRleHREaXNwb3NhYmxlX2gKKyNkZWZpbmUgVjhD
b250ZXh0RGlzcG9zYWJsZV9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVjhDb250
ZXh0RGlzcG9zYWJsZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+VjhDb250ZXh0RGlzcG9zYWJs
ZSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0RGlzcG9zaW5nKCkgPSAwOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVjhDb250ZXh0RGlzcG9zYWJsZV9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTUVsZW1lbnRDb25z
dHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTUVsZW1lbnRDb25z
dHJ1Y3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTZhNmY3ODhmMzU2MDNiMzcwMjcyYTU5YWU4YTkyOWVm
OWEzZmM0MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
RE9NRWxlbWVudENvbnN0cnVjdG9yLmNwcApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJWOERPTUVsZW1lbnRDb25zdHJ1Y3Rvci5oIgorCisjaW5jbHVkZSAi
RG9jdW1lbnRDdXN0b21FbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNs
dWRlICJWOEhUTUxVbmtub3duRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNp
ZiBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKKworV3JhcHBlclR5cGVJbmZvIFY4RWxlbWVu
dENvbnN0cnVjdG9yOjppbmZvID0geyAwLCAwLCBWOEVsZW1lbnRDb25zdHJ1Y3Rvcjo6ZGVyZWZP
YmplY3QsIDAsIDAsIDAsIDAsIFdyYXBwZXJUeXBlT2JqZWN0UHJvdG90eXBlIH07CisKK2lubGlu
ZSBET01FbGVtZW50Q29uc3RydWN0b3IqIFY4RWxlbWVudENvbnN0cnVjdG9yOjp0b05hdGl2ZSh2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxET01FbGVtZW50Q29uc3RydWN0b3IqPihvYmplY3QtPkdldFBvaW50ZXJGcm9tSW50ZXJu
YWxGaWVsZCh2OERPTVdyYXBwZXJPYmplY3RJbmRleCkpOworfQorCit2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhFbGVtZW50Q29uc3RydWN0b3I6OmNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6
OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5WOEVsZW1lbnRDb25zdHJ1
Y3Rvci5Db25zdHJ1Y3RvciIpOworCisgICAgaWYgKCFhcmdzLklzQ29uc3RydWN0Q2FsbCgpKQor
ICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoIkRPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fu
bm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLiIpOworCisgICAgaWYgKENvbnN0cnVjdG9yTW9k
ZTo6Y3VycmVudCgpID09IENvbnN0cnVjdG9yTW9kZTo6V3JhcEV4aXN0aW5nT2JqZWN0KQorICAg
ICAgICByZXR1cm4gYXJncy5Ib2xkZXIoKTsKKworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
cHJvdG8gPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3MuQ2FsbGVlKCktPkdldCh2
ODo6U3RyaW5nOjpOZXdTeW1ib2woInByb3RvdHlwZSIpKSk7CisgICAgQVNTRVJUKHByb3RvLT5J
bnRlcm5hbEZpZWxkQ291bnQoKSA8PSB2OERlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVsZENvdW50
KTsKKyAgICBET01FbGVtZW50Q29uc3RydWN0b3IqIGNvbnN0cnVjdG9ySW1wbCA9IFY4RWxlbWVu
dENvbnN0cnVjdG9yOjp0b05hdGl2ZShwcm90byk7CisgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBl
bGVtZW50SW1wbCA9IGNvbnN0cnVjdG9ySW1wbC0+Y3JlYXRlRWxlbWVudCgpOworICAgIGlmICgh
ZWxlbWVudEltcGwpCisgICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOworICAgIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGFyZ3MuSG9sZGVyKCk7CisgICAgVjhET01XcmFwcGVy
OjpzZXRET01XcmFwcGVyKHdyYXBwZXIsIGNvbnN0cnVjdG9ySW1wbC0+ZWxlbWVudFR5cGVJbmZv
KCksIGVsZW1lbnRJbXBsLmdldCgpKTsKKyAgICBWOERPTVdyYXBwZXI6OnNldEpTV3JhcHBlckZv
ckRPTU5vZGUoZWxlbWVudEltcGwucmVsZWFzZSgpLCB3cmFwcGVyLCBhcmdzLkdldElzb2xhdGUo
KSk7CisKKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKwordm9pZCBWOEVsZW1lbnRDb25zdHJ1Y3Rv
cjo6Y29uZmlndXJlRnVuY3Rpb25UZW1wbGF0ZSh2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBs
YXRlPiBkZXNjLCBQYXNzUmVmUHRyPERPTUVsZW1lbnRDb25zdHJ1Y3Rvcj4gaW1wbCkKK3sKKyAg
ICBWOERPTUNvbmZpZ3VyYXRpb246OmNvbmZpZ3VyZVRlbXBsYXRlKAorICAgICAgICB2ODo6UGVy
c2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT46Ok5ldyhkZXNjKSwgaW1wbC0+aW50ZXJmYWNl
TmFtZSgpLCAKKyAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+OjpO
ZXcoaW1wbC0+cGFyZW50VGVtcGxhdGUoKSksIGludGVybmFsRmllbGRDb3VudCwgMCwgMCwgMCwg
MCk7CisgICAgZGVzYy0+UmVhZE9ubHlQcm90b3R5cGUoKTsKKyAgICBkZXNjLT5TZXRDYWxsSGFu
ZGxlcihjb25zdHJ1Y3RvckNhbGxiYWNrKTsKKyAgICBkZXNjLT5TZXQodjg6OlN0cmluZzo6TmV3
U3ltYm9sKCJ0b1N0cmluZyIpLCBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCktPnRvU3RyaW5n
VGVtcGxhdGUoKSk7CisgICAgZGVzYy0+UHJvdG90eXBlVGVtcGxhdGUoKS0+U2V0SW50ZXJuYWxG
aWVsZENvdW50KHByb3RvdHlwZUludGVybmFsRmllbGRDb3VudCk7CisgICAgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBwcm90byA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoZGVzYy0+R2V0
RnVuY3Rpb24oKS0+R2V0KHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCgicHJvdG90eXBlIikpKTsKKyAg
ICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIocHJvdG8sICZpbmZvLCBpbXBsLmdldCgpKTsK
KyAgICBWOERPTVdyYXBwZXI6OnNldEpTV3JhcHBlckZvckRPTU9iamVjdChpbXBsLCBwcm90bywg
djg6Oklzb2xhdGU6OkdldEN1cnJlbnQoKSk7Cit9CisKK3ZvaWQgVjhFbGVtZW50Q29uc3RydWN0
b3I6OmRlcmVmT2JqZWN0KHZvaWQqIG9iamVjdCkKK3sKKyAgICBzdGF0aWNfY2FzdDxET01FbGVt
ZW50Q29uc3RydWN0b3IqPihvYmplY3QpLT5kZXJlZigpOworfQorCit2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhFbGVtZW50Q29uc3RydWN0b3I6OndyYXBFbGVtZW50KEhUTUxFbGVtZW50KiBpbXBs
LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlz
b2xhdGUpCit7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhET01XcmFw
cGVyOjpnZXRDYWNoZWRXcmFwcGVyKGltcGwpOworICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiB3cmFwcGVyOworICAgIHJldHVybiBWOEVsZW1lbnRDb25zdHJ1Y3Rv
cjo6d3JhcEVsZW1lbnRTbG93KGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7Cit9CisK
K3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEVsZW1lbnRDb25zdHJ1Y3Rvcjo6d3JhcEVsZW1lbnRT
bG93KEhUTUxFbGVtZW50KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29u
dGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit7CisgICAgRE9NRWxlbWVudENvbnN0cnVjdG9y
KiBjdG9yID0gRG9jdW1lbnRDdXN0b21FbGVtZW50Ojpjb25zdHJ1Y3Rvck9mKGltcGwpOworICAg
IGlmICghY3RvcikKKyAgICAgICAgcmV0dXJuIFY4SFRNTFVua25vd25FbGVtZW50Ojp3cmFwKHRv
SFRNTFVua25vd25FbGVtZW50KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworCisg
ICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKGNyZWF0aW9uQ29udGV4dC0+Q3JlYXRpb25Db250
ZXh0KCkpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IFY4RE9NV3JhcHBl
cjo6aW5zdGFudGlhdGVWOE9iamVjdChpbXBsLT5kb2N1bWVudCgpLCBjdG9yLT5lbGVtZW50VHlw
ZUluZm8oKSwgaW1wbCk7CisgICAgaWYgKHdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gd3JhcHBlcjsKKworICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXJIYW5k
bGUgPSBWOERPTVdyYXBwZXI6OnNldEpTV3JhcHBlckZvckRPTU5vZGUoaW1wbCwgd3JhcHBlciwg
aXNvbGF0ZSk7CisgICAgd3JhcHBlckhhbmRsZS5TZXRXcmFwcGVyQ2xhc3NJZCh2OERPTVN1YnRy
ZWVDbGFzc0lkKTsKKworICAgIHJldHVybiB3cmFwcGVyOworfQorCisjZW5kaWYgLy8gRU5BQkxF
KENVU1RPTV9ET01fRUxFTUVOVFMpCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NRWxlbWVudENvbnN0cnVjdG9yLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTUVsZW1lbnRDb25zdHJ1Y3Rvci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjk0NDdkZDI1NjgyNDM0OThlZjQwNDllMjI4NmQwNDViZTE5MjBlMjEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTUVsZW1lbnRDb25z
dHJ1Y3Rvci5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFY4RE9NRWxlbWVudENvbnN0cnVjdG9y
X2gKKyNkZWZpbmUgVjhET01FbGVtZW50Q29uc3RydWN0b3JfaAorCisjaW5jbHVkZSAiRE9NRWxl
bWVudENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhE
T01XcmFwcGVyLmgiCisjaW5jbHVkZSA8djguaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERPTUVsZW1lbnRDb25zdHJ1Y3RvcjsK
K2NsYXNzIEhUTUxFbGVtZW50OworCitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgo
RE9NRWxlbWVudENvbnN0cnVjdG9yKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0
aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xh
dGUgPSAwKQoreworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVj
ayhpc29sYXRlKTsKKyAgICByZXR1cm4gaW1wbC0+dG9WOChjcmVhdGlvbkNvbnRleHQsIGlzb2xh
dGUpOworfQorCitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjxE
T01FbGVtZW50Q29uc3RydWN0b3I+IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRp
b25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSogaXNvbGF0
ZSA9IDApCit7CisgICAgcmV0dXJuIHRvVjgoaW1wbC5nZXQoKSwgY3JlYXRpb25Db250ZXh0LCBp
c29sYXRlKTsKK30KKworI2lmIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorCitjbGFzcyBW
OEVsZW1lbnRDb25zdHJ1Y3RvciB7CitwdWJsaWM6CisgICAgc3RhdGljIFdyYXBwZXJUeXBlSW5m
byBpbmZvOworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgaW50ZXJuYWxGaWVsZENvdW50ID0gdjhE
ZWZhdWx0V3JhcHBlckludGVybmFsRmllbGRDb3VudDsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IHByb3RvdHlwZUludGVybmFsRmllbGRDb3VudCA9IHY4RGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZp
ZWxkQ291bnQ7CisKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnN0cnVjdG9y
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYpOworICAgIHN0YXRpYyB2b2lkIGNvbmZpZ3Vy
ZUZ1bmN0aW9uVGVtcGxhdGUodjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4sIFBhc3NS
ZWZQdHI8RE9NRWxlbWVudENvbnN0cnVjdG9yPik7CisgICAgc3RhdGljIERPTUVsZW1lbnRDb25z
dHJ1Y3RvciogdG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pik7CisgICAgc3RhdGljIHZv
aWQgZGVyZWZPYmplY3Qodm9pZCopOworCisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB3cmFwRWxlbWVudChIVE1MRWxlbWVudCosIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRp
b25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSogPSAwKTsK
KyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBFbGVtZW50U2xvdyhIVE1MRWxl
bWVudCosIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4sIHY4OjpJc29sYXRlKik7Cit9OworCisjZW5k
aWYgLy8gRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFY4RE9NRWxlbWVudENvbnN0cnVjdG9yX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UGVyQ29udGV4dERhdGEuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhQZXJDb250ZXh0RGF0YS5jcHAKaW5kZXggOTc2NDYyMGQ0M2Jl
YzBmMDJlYTFmYWYzNDY3Y2I5NjI1YjFhOTIyOS4uZDJhODU2NzE3MjdlNTBkYjdiMDg3ZGJmOTFl
ODI1Zjg3Y2Y0YTNiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQ
ZXJDb250ZXh0RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQZXJD
b250ZXh0RGF0YS5jcHAKQEAgLTY3LDYgKzY3LDEzIEBAIHZvaWQgVjhQZXJDb250ZXh0RGF0YTo6
ZGlzcG9zZSgpCiAgICAgICAgIH0KICAgICAgICAgbV9jb25zdHJ1Y3Rvck1hcC5jbGVhcigpOwog
ICAgIH0KKworICAgIHsKKyAgICAgICAgRGlzcG9zYWJsZUxpc3Q6Oml0ZXJhdG9yIGl0ID0gbV9k
aXNwb3NhYmxlcy5iZWdpbigpOworICAgICAgICBmb3IgKDsgaXQgIT0gbV9kaXNwb3NhYmxlcy5l
bmQoKTsgKytpdCkKKyAgICAgICAgICAgICgqaXQpLT5jb250ZXh0RGlzcG9zaW5nKCk7CisgICAg
ICAgIG1fZGlzcG9zYWJsZXMuY2xlYXIoKTsKKyAgICB9CiB9CiAKICNkZWZpbmUgVjhfU1RPUkVf
UFJJTU9SRElBTChuYW1lLCBOYW1lKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOFBlckNvbnRleHREYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OFBlckNvbnRleHREYXRhLmgKaW5kZXggOGMzYzQzN2UyOGMwODMxZGQwMzE1OTE0NjAyNzUwZmI2
NTNmNTIwNC4uMDY5Zjc5OWU4Y2NiMDkzMzBiZGUxYmIxNTJjNTc3MDFhYjc0YTA3ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQZXJDb250ZXh0RGF0YS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UGVyQ29udGV4dERhdGEuaApAQCAtMzIsOSAr
MzIsMTEgQEAKICNkZWZpbmUgVjhQZXJDb250ZXh0RGF0YV9oCiAKICNpbmNsdWRlICJTY29wZWRQ
ZXJzaXN0ZW50LmgiCisjaW5jbHVkZSAiVjhDb250ZXh0RGlzcG9zYWJsZS5oIgogI2luY2x1ZGUg
IldyYXBwZXJUeXBlSW5mby5oIgogI2luY2x1ZGUgPHY4Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTgyLDYgKzg0LDggQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gJm1fdjhOUE9iamVjdE1hcDsKICAgICB9CiAKKyAgICB2b2lkIGFkZERp
c3Bvc2FibGUoVjhDb250ZXh0RGlzcG9zYWJsZSogZGlzcG9zYWJsZSkgeyBtX2Rpc3Bvc2FibGVz
LmFwcGVuZChkaXNwb3NhYmxlKTsgfQorCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFY4UGVyQ29u
dGV4dERhdGEodjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IGNvbnRleHQpCiAgICAgICAgIDog
bV9jb250ZXh0KGNvbnRleHQpCkBAIC0xMDEsNiArMTA1LDkgQEAgcHJpdmF0ZToKICAgICB0eXBl
ZGVmIFdURjo6SGFzaE1hcDxXcmFwcGVyVHlwZUluZm8qLCB2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb24+ID4gQ29uc3RydWN0b3JNYXA7CiAgICAgQ29uc3RydWN0b3JNYXAgbV9jb25zdHJ1Y3Rv
ck1hcDsKIAorICAgIHR5cGVkZWYgVmVjdG9yPFY4Q29udGV4dERpc3Bvc2FibGUqPiBEaXNwb3Nh
YmxlTGlzdDsKKyAgICBEaXNwb3NhYmxlTGlzdCBtX2Rpc3Bvc2FibGVzOworCiAgICAgVjhOUE9i
amVjdE1hcCBtX3Y4TlBPYmplY3RNYXA7CiAKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4
dD4gbV9jb250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV3Jh
cHBlclR5cGVJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9XcmFwcGVyVHlwZUlu
Zm8uaAppbmRleCBhNGJkNDk5OGRkZDZlNjE0ZmY3ZjAwNWE1ZTcxMzgwN2M3NDUyNDFiLi5lYjJj
YTRjOWFkMGM3NDYyMWJiOTA1NTgwNDUwMmY3YjU5NzE1MDIyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9XcmFwcGVyVHlwZUluZm8uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9XcmFwcGVyVHlwZUluZm8uaApAQCAtNDQsNyArNDQsOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICAgICBzdGF0aWMgY29uc3QgdWludDE2X3QgdjhET01TdWJ0cmVlQ2xh
c3NJZCA9IDE7CiAKLSAgICB0eXBlZGVmIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPiAoKkdldFRlbXBsYXRlRnVuY3Rpb24pKCk7CisgICAgdHlwZWRlZiB2ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gKCpHZXRUZW1wbGF0ZUZ1bmN0aW9uKSh2b2lkKik7Cisg
ICAgdHlwZWRlZiB2b2lkKiBHZXRUZW1wbGF0ZUZ1bmN0aW9uUGFyYW1ldGVyVHlwZTsKICAgICB0
eXBlZGVmIHZvaWQgKCpEZXJlZk9iamVjdEZ1bmN0aW9uKSh2b2lkKik7CiAgICAgdHlwZWRlZiBB
Y3RpdmVET01PYmplY3QqICgqVG9BY3RpdmVET01PYmplY3RGdW5jdGlvbikodjg6OkhhbmRsZTx2
ODo6T2JqZWN0Pik7CiAgICAgdHlwZWRlZiB2b2lkICgqRE9NV3JhcHBlclZpc2l0b3JGdW5jdGlv
bikoRE9NRGF0YVN0b3JlKiwgdm9pZCosIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+KTsKQEAg
LTgxLDcgKzgyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gZ2V0VGVtcGxhdGUoKSB7IHJldHVybiBnZXRUZW1wbGF0ZUZ1bmN0aW9u
KCk7IH0KKyAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGdldFRl
bXBsYXRlKCkgeyByZXR1cm4gZ2V0VGVtcGxhdGVGdW5jdGlvbihnZXRUZW1wbGF0ZUZ1bmN0aW9u
UGFyYW1ldGVyKTsgfQogICAgICAgICAKICAgICAgICAgdm9pZCBkZXJlZk9iamVjdCh2b2lkKiBv
YmplY3QpCiAgICAgICAgIHsKQEAgLTEwOSw2ICsxMTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIH0KIAogICAgICAgICBjb25zdCBHZXRUZW1wbGF0ZUZ1bmN0aW9uIGdldFRlbXBs
YXRlRnVuY3Rpb247CisgICAgICAgIGNvbnN0IEdldFRlbXBsYXRlRnVuY3Rpb25QYXJhbWV0ZXJU
eXBlIGdldFRlbXBsYXRlRnVuY3Rpb25QYXJhbWV0ZXI7CiAgICAgICAgIGNvbnN0IERlcmVmT2Jq
ZWN0RnVuY3Rpb24gZGVyZWZPYmplY3RGdW5jdGlvbjsKICAgICAgICAgY29uc3QgVG9BY3RpdmVE
T01PYmplY3RGdW5jdGlvbiB0b0FjdGl2ZURPTU9iamVjdEZ1bmN0aW9uOwogICAgICAgICBjb25z
dCBET01XcmFwcGVyVmlzaXRvckZ1bmN0aW9uIGRvbVdyYXBwZXJWaXNpdG9yRnVuY3Rpb247CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSW1hZ2VF
bGVtZW50Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yLmNwcAppbmRleCAyNTZjOWQzN2U0MTFjZmU3
MGE2ZTM2Mzc4MmEzNjYzYTA0NDUzZDNmLi4zN2QzMjZjMzZkYTE2NTg5ZDIyOWJhOTYxNmI4ZDUz
MmJkYjdlYzVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAKQEAgLTQz
LDcgKzQzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1XcmFwcGVyVHlwZUluZm8gVjhI
VE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3I6OmluZm8gPSB7IFY4SFRNTEltYWdlRWxlbWVudENv
bnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSwgMCwgMCwgMCwgVjhIVE1MSW1hZ2VFbGVtZW50OjppbnN0
YWxsUGVyQ29udGV4dFByb3RvdHlwZVByb3BlcnRpZXMsIDAsIFdyYXBwZXJUeXBlT2JqZWN0UHJv
dG90eXBlIH07CitXcmFwcGVyVHlwZUluZm8gVjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3I6
OmluZm8gPSB7IFY4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSwgMCwg
MCwgMCwgMCwgVjhIVE1MSW1hZ2VFbGVtZW50OjppbnN0YWxsUGVyQ29udGV4dFByb3RvdHlwZVBy
b3BlcnRpZXMsIDAsIFdyYXBwZXJUeXBlT2JqZWN0UHJvdG90eXBlIH07CiAKIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3JDYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewpAQCAtODQsNyArODQsNyBAQCBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHY4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yQ2FsbGJhY2so
Y29uc3Qgdjg6OkFyZwogICAgIHJldHVybiB3cmFwcGVyOwogfQogCi12ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3I6OkdldFRl
bXBsYXRlKCkKK3Y4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOEhUTUxJbWFn
ZUVsZW1lbnRDb25zdHJ1Y3Rvcjo6R2V0VGVtcGxhdGUodm9pZCopCiB7CiAgICAgc3RhdGljIHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBjYWNoZWRUZW1wbGF0ZTsKICAgICBp
ZiAoIWNhY2hlZFRlbXBsYXRlLklzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3Rvci5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEltYWdlRWxlbWVudENvbnN0cnVj
dG9yLmgKaW5kZXggNWRiNDk0NjVmNTlhM2YzZmY1YTE3NTBjM2Y1NzhlMDMyYThlY2JmNi4uMjdm
ZWZlYjExNmY3NDgwYzE0YjdhNGFhODI3ZjNmMGQ5ZTE4OTk4OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9y
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEltYWdlRWxl
bWVudENvbnN0cnVjdG9yLmgKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBWOEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3RvciB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBHZXRUZW1wbGF0ZSgpOwor
ICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0VGVtcGxh
dGUodm9pZCopOwogICAgIHN0YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50RGVmaW5pdGlvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudERlZmluaXRpb24uY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjJjYThmNDc1NTQwNjE5MGZlN2JhNjA5YmQwZjYzODkxYTVkZjI4MjUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudERlZmluaXRpb24uY3BwCkBAIC0w
LDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudERl
ZmluaXRpb24uaCIKKworI2lmIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorCisjaW5jbHVk
ZSAiRE9NRWxlbWVudENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNs
dWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudERlZmluaXRpb24+IEN1c3RvbUVs
ZW1lbnREZWZpbml0aW9uOjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBBdG9taWNTdHJpbmcg
bmFtZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEN1c3RvbUVsZW1lbnREZWZpbml0aW9u
KGRvY3VtZW50LCBuYW1lKSk7Cit9CisKK0N1c3RvbUVsZW1lbnREZWZpbml0aW9uOjpDdXN0b21F
bGVtZW50RGVmaW5pdGlvbihEb2N1bWVudCogZG9jdW1lbnQsIEF0b21pY1N0cmluZyBuYW1lKQor
ICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKKyAgICAsIG1fbmFtZShudWxsQXRvbSwgbmFtZS5s
b3dlcigpLCBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJKQorICAgICwgbV9jb25zdHJ1Y3Rv
cihET01FbGVtZW50Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzKSkKK3sKK30KKworQ3VzdG9tRWxl
bWVudERlZmluaXRpb246On5DdXN0b21FbGVtZW50RGVmaW5pdGlvbigpCit7CisgICAgd2lsbERl
c3Ryb3lEb2N1bWVudCgpOworfQorCit2b2lkIEN1c3RvbUVsZW1lbnREZWZpbml0aW9uOjp3aWxs
RGVzdHJveURvY3VtZW50KCkKK3sKKyAgICBtX2NvbnN0cnVjdG9yLT53aWxsRGVzdHJveURvY3Vt
ZW50KCk7CisgICAgbV9kb2N1bWVudCA9IDA7Cit9CisKK1Bhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+
IEN1c3RvbUVsZW1lbnREZWZpbml0aW9uOjpjcmVhdGVFbGVtZW50KCkgY29uc3QKK3sKKyAgICAv
LyBGSVhNRTogU3VwcG9ydCBpbmhlcml0YW5jZQorICAgIGlmICghbV9kb2N1bWVudCkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIEhUTUxFbGVtZW50OjpjcmVhdGUobV9uYW1lLCBtX2Rv
Y3VtZW50KTsKK30KKworY29uc3QgY2hhciogQ3VzdG9tRWxlbWVudERlZmluaXRpb246OmludGVy
ZmFjZU5hbWUoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBTaG91bGQgYmUgZ2l2ZW4gYXMgYSBw
YXJhbWV0ZXIgb2YgcmVnaXN0ZXIoKS4KKyAgICByZXR1cm4gIkhUTUxDdXN0b21FbGVtZW50IjsK
K30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudERlZmluaXRpb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50RGVmaW5pdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNiYzQx
OGY2NmNmNTQzODAzOTNjZmVmMTlhNDcwNWFkOGY5MTc5YmQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudERlZmluaXRpb24uaApAQCAtMCwwICsxLDcy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBDdXN0b21FbGVtZW50RGVmaW5pdGlvbl9oCisjZGVmaW5lIEN1c3RvbUVsZW1l
bnREZWZpbml0aW9uX2gKKworI2lmIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorCisjaW5j
bHVkZSAiUXVhbGlmaWVkTmFtZS5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERPTUVsZW1lbnRDb25zdHJ1Y3RvcjsKK2NsYXNzIERv
Y3VtZW50OworY2xhc3MgSFRNTEVsZW1lbnQ7CisKK2NsYXNzIEN1c3RvbUVsZW1lbnREZWZpbml0
aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8Q3VzdG9tRWxlbWVudERlZmluaXRpb24+IHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50RGVmaW5pdGlvbj4gY3JlYXRl
KERvY3VtZW50KiwgQXRvbWljU3RyaW5nIG5hbWUpOworICAgIGV4cGxpY2l0IEN1c3RvbUVsZW1l
bnREZWZpbml0aW9uKERvY3VtZW50KiwgQXRvbWljU3RyaW5nIG5hbWUpOworICAgIH5DdXN0b21F
bGVtZW50RGVmaW5pdGlvbigpOworCisgICAgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gY3JlYXRl
RWxlbWVudCgpIGNvbnN0OworICAgIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUoKSBjb25zdDsK
KworICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0K
KyAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9
CisgICAgRE9NRWxlbWVudENvbnN0cnVjdG9yKiBjb25zdHJ1Y3RvcigpIGNvbnN0IHsgcmV0dXJu
IG1fY29uc3RydWN0b3IuZ2V0KCk7IH0KKworICAgIHZvaWQgd2lsbERlc3Ryb3lEb2N1bWVudCgp
OworCitwcml2YXRlOgorICAgIERvY3VtZW50KiBtX2RvY3VtZW50OworICAgIFF1YWxpZmllZE5h
bWUgbV9uYW1lOworICAgIFJlZlB0cjxET01FbGVtZW50Q29uc3RydWN0b3I+IG1fY29uc3RydWN0
b3I7Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRDdXN0b21FbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEN1c3RvbUVsZW1lbnQuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmVmNjA1OGU5OTVlZmUzMzA1N2M2MzY4YjBkZGU0YmE5NTI4MzQ5OTkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRDdXN0b21FbGVtZW50LmNw
cApAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9y
cworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJEb2N1bWVudEN1c3RvbUVsZW1lbnQuaCIKKworI2luY2x1ZGUgIkRPTUVsZW1lbnRDb25zdHJ1
Y3Rvci5oIgorI2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgor
I2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJl
cy5oIgorCisjaWYgRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworRG9jdW1lbnRDdXN0b21FbGVtZW50OjpEb2N1bWVudEN1c3RvbUVsZW1lbnQoRG9j
dW1lbnQqIGRvY3VtZW50KQorICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKK3sKK30KKworRG9j
dW1lbnRDdXN0b21FbGVtZW50Ojp+RG9jdW1lbnRDdXN0b21FbGVtZW50KCkKK3sKKyAgICBmb3Ig
KERlZmluaXRpb25NYXA6Oml0ZXJhdG9yIGkgPSBtX2RlZmluaXRpb25zLmJlZ2luKCk7IGkgIT0g
bV9kZWZpbml0aW9ucy5lbmQoKTsgKytpKQorICAgICAgICBpLT52YWx1ZS0+d2lsbERlc3Ryb3lE
b2N1bWVudCgpOworfQorCitEb2N1bWVudEN1c3RvbUVsZW1lbnQqIERvY3VtZW50Q3VzdG9tRWxl
bWVudDo6ZnJvbShEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgaWYgKCFSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpjdXN0b21ET01FbGVtZW50c0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgc3VwcGxlbWVudE5hbWUs
ICgiRG9jdW1lbnRDdXN0b21FbGVtZW50IikpOworICAgIERvY3VtZW50Q3VzdG9tRWxlbWVudCog
c3VwcGxlbWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Q3VzdG9tRWxlbWVudCo+KFN1cHBsZW1l
bnQ8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD46OmZyb20oZG9jdW1lbnQsIHN1cHBsZW1lbnROYW1l
KSk7CisgICAgaWYgKCFzdXBwbGVtZW50KSB7CisgICAgICAgIHN1cHBsZW1lbnQgPSBuZXcgRG9j
dW1lbnRDdXN0b21FbGVtZW50KGRvY3VtZW50KTsKKyAgICAgICAgU3VwcGxlbWVudDxTY3JpcHRF
eGVjdXRpb25Db250ZXh0Pjo6cHJvdmlkZVRvKGRvY3VtZW50LCBzdXBwbGVtZW50TmFtZSwgYWRv
cHRQdHIoc3VwcGxlbWVudCkpOworICAgIH0KKworICAgIHJldHVybiBzdXBwbGVtZW50OworfQor
CitQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBEb2N1bWVudEN1c3RvbUVsZW1lbnQ6OmNyZWF0ZUVs
ZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKQorewor
ICAgIERvY3VtZW50Q3VzdG9tRWxlbWVudCogc2VsZiA9IGZyb20oZG9jdW1lbnQpOworICAgIGlm
ICghc2VsZikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHNlbGYtPmNyZWF0ZUVsZW1l
bnQobmFtZSk7Cit9CisKK0RPTUVsZW1lbnRDb25zdHJ1Y3RvciogRG9jdW1lbnRDdXN0b21FbGVt
ZW50Ojpjb25zdHJ1Y3Rvck9mKEhUTUxFbGVtZW50KiBlbGVtZW50KQoreworICAgIERvY3VtZW50
Q3VzdG9tRWxlbWVudCogc2VsZiA9IGZyb20oZWxlbWVudC0+ZG9jdW1lbnQoKSk7CisgICAgaWYg
KCFzZWxmKQorICAgICAgICByZXR1cm4gMDsKKyAgICBDdXN0b21FbGVtZW50RGVmaW5pdGlvbiog
ZGVmaW5pdGlvbiA9IHNlbGYtPmZpbmREZWZpbml0aW9uKGVsZW1lbnQtPnRhZ1FOYW1lKCkpOwor
ICAgIGlmICghZGVmaW5pdGlvbikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGRlZmlu
aXRpb24tPmNvbnN0cnVjdG9yKCk7Cit9CisKK1Bhc3NSZWZQdHI8RE9NRWxlbWVudENvbnN0cnVj
dG9yPiBEb2N1bWVudEN1c3RvbUVsZW1lbnQ6OndlYmtpdFJlZ2lzdGVyKERvY3VtZW50KiBkb2N1
bWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICByZXR1cm4gd2Via2l0UmVnaXN0ZXIoZG9jdW1lbnQsIG5hbWUsIERpY3Rpb25hcnkoKSwgZWMp
OworfQorCitQYXNzUmVmUHRyPERPTUVsZW1lbnRDb25zdHJ1Y3Rvcj4gRG9jdW1lbnRDdXN0b21F
bGVtZW50Ojp3ZWJraXRSZWdpc3RlcihEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSwgY29uc3QgRGljdGlvbmFyeSYgb3B0aW9ucywgRXhjZXB0aW9uQ29kZSYgZWMp
Cit7CisgICAgRG9jdW1lbnRDdXN0b21FbGVtZW50KiBzZWxmID0gRG9jdW1lbnRDdXN0b21FbGVt
ZW50Ojpmcm9tKGRvY3VtZW50KTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgUmVmUHRyPEN1c3RvbUVsZW1lbnREZWZpbml0aW9uPiByZWdpc3RlcmVkID0gc2VsZi0+
cmVnaXN0ZXJFbGVtZW50KG5hbWUsIG9wdGlvbnMsIGVjKTsKKyAgICBpZiAoIXJlZ2lzdGVyZWQp
CisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiByZWdpc3RlcmVkLT5jb25zdHJ1Y3Rvcigp
OworfQorCitQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnREZWZpbml0aW9uPiBEb2N1bWVudEN1c3Rv
bUVsZW1lbnQ6OnJlZ2lzdGVyRWxlbWVudChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0
IERpY3Rpb25hcnkmIG9wdGlvbnMsIEV4Y2VwdGlvbkNvZGUmKQoreworICAgIC8vIEZJWE1FOiBj
aGVjayBkdXBsaWNhdGlvbiBhbmQgdmFsaWRpdHksIG5vcm1hbGl6ZSB0aGUgbmFtZS4KKyAgICBS
ZWZQdHI8Q3VzdG9tRWxlbWVudERlZmluaXRpb24+IGZyZXNoID0gQ3VzdG9tRWxlbWVudERlZmlu
aXRpb246OmNyZWF0ZShtX2RvY3VtZW50LCBuYW1lKTsKKyAgICBtX2RlZmluaXRpb25zLmFkZChm
cmVzaC0+bmFtZSgpLmltcGwoKSwgZnJlc2gpOworICAgIHJldHVybiBmcmVzaDsKK30KKworQ3Vz
dG9tRWxlbWVudERlZmluaXRpb24qIERvY3VtZW50Q3VzdG9tRWxlbWVudDo6ZmluZERlZmluaXRp
b24oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogdGFr
ZSBjYXJlIG9mIG5hbWUgY2FzZXMuCisgICAgRGVmaW5pdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3Ig
Zm91bmQgPSBtX2RlZmluaXRpb25zLmZpbmQobmFtZS5pbXBsKCkpOworICAgIHJldHVybiAoZm91
bmQgIT0gbV9kZWZpbml0aW9ucy5lbmQoKSkgPyBmb3VuZC0+dmFsdWUuZ2V0KCkgOiAwOworfQor
CitQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBEb2N1bWVudEN1c3RvbUVsZW1lbnQ6OmNyZWF0ZUVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKK3sKKyAgICBpZiAoQ3VzdG9t
RWxlbWVudERlZmluaXRpb24qIGZvdW5kID0gZmluZERlZmluaXRpb24obmFtZSkpCisgICAgICAg
IHJldHVybiBmb3VuZC0+Y3JlYXRlRWxlbWVudCgpOworICAgIHJldHVybiAwOworfQorCit9CisK
KyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEN1c3RvbUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudEN1c3RvbUVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wOWFmOGFiODNiZTA2YTc5ZDJj
NTBiODhiZDdlNzIwYjgyYWNiZjI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50Q3VzdG9tRWxlbWVudC5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlz
dHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIERvY3VtZW50Q3VzdG9tRWxlbWVudF9oCisjZGVmaW5lIERvY3VtZW50Q3VzdG9tRWxlbWVu
dF9oCisKKyNpZiBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKKworI2luY2x1ZGUgIkN1c3Rv
bUVsZW1lbnREZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1
ZGUgIlN1cHBsZW1lbnRhYmxlLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERPTUVs
ZW1lbnRDb25zdHJ1Y3RvcjsKK2NsYXNzIERpY3Rpb25hcnk7CitjbGFzcyBEb2N1bWVudDsKK2Ns
YXNzIEhUTUxFbGVtZW50OworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKK2NsYXNzIFF1
YWxpZmllZE5hbWU7CisKK2NsYXNzIERvY3VtZW50Q3VzdG9tRWxlbWVudCA6IHB1YmxpYyBTdXBw
bGVtZW50PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBE
b2N1bWVudEN1c3RvbUVsZW1lbnQoRG9jdW1lbnQqKTsKKyAgICB+RG9jdW1lbnRDdXN0b21FbGVt
ZW50KCk7CisKKyAgICBzdGF0aWMgRG9jdW1lbnRDdXN0b21FbGVtZW50KiBmcm9tKERvY3VtZW50
Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnQoRG9j
dW1lbnQqLCBjb25zdCBRdWFsaWZpZWROYW1lJik7CisgICAgc3RhdGljIERPTUVsZW1lbnRDb25z
dHJ1Y3RvciogY29uc3RydWN0b3JPZihIVE1MRWxlbWVudCopOworCisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8RE9NRWxlbWVudENvbnN0cnVjdG9yPiB3ZWJraXRSZWdpc3RlcihEb2N1bWVudCosIGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPERPTUVsZW1lbnRDb25zdHJ1Y3Rvcj4gd2Via2l0UmVnaXN0ZXIoRG9jdW1lbnQqLCBj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IERpY3Rpb25hcnkmIG9wdGlvbnMsIEV4Y2Vw
dGlvbkNvZGUmKTsKKworICAgIFBhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudERlZmluaXRpb24+IHJl
Z2lzdGVyRWxlbWVudChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IERpY3Rpb25hcnkm
IG9wdGlvbnMsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBDdXN0b21FbGVtZW50RGVmaW5pdGlvbiog
ZmluZERlZmluaXRpb24oY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OworICAgIFBhc3NSZWZQ
dHI8SFRNTEVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0
OworCitwcml2YXRlOgorICAgIHR5cGVkZWYgSGFzaE1hcDxRdWFsaWZpZWROYW1lOjpRdWFsaWZp
ZWROYW1lSW1wbCosIFJlZlB0cjxDdXN0b21FbGVtZW50RGVmaW5pdGlvbj4gPiBEZWZpbml0aW9u
TWFwOworCisgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CisgICAgRGVmaW5pdGlvbk1hcCBtX2Rl
ZmluaXRpb25zOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudEN1c3RvbUVsZW1lbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50Q3VzdG9tRWxlbWVudC5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGMxYTJmZWY5N2Y3OWVhOTVkMjQ4
NjJhMzNiOWQyYjllMTA1N2ExMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudEN1c3RvbUVsZW1lbnQuaWRsCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlz
dHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1
bGUgY29yZSB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1DVVNUT01f
RE9NX0VMRU1FTlRTLAorICAgICAgICBTdXBwbGVtZW50YWw9RG9jdW1lbnQKKyAgICBdIERvY3Vt
ZW50Q3VzdG9tRWxlbWVudCB7CisjaWYgZGVmaW5lZChMQU5HVUFHRV9KQVZBU0NSSVBUKSAmJiBM
QU5HVUFHRV9KQVZBU0NSSVBUCisgICAgICAgIFtWOEVuYWJsZWRBdFJ1bnRpbWU9Y3VzdG9tRE9N
RWxlbWVudHNdCisgICAgICAgIERPTUVsZW1lbnRDb25zdHJ1Y3RvciB3ZWJraXRSZWdpc3Rlcihp
biBET01TdHJpbmcgbmFtZSwgaW4gW09wdGlvbmFsXSBEaWN0aW9uYXJ5IG9wdGlvbnMpCisgICAg
ICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyNlbmRpZgorICAgIH07CisKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsIGIvU291cmNlL1dlYkNvcmUv
ZG9tL21ha2VfbmFtZXMucGwKaW5kZXggMzhkODU5NWRlYjE2MDNlYjUyYjc1MTgxNzIyNDI4YzNm
NTA1OTFkNC4uNzVhNWQ1NGZjMTUyMTA0NzEzYjhjYzYwNGMxOTdkNzczMWJmNTEyYSAxMDA3NTUK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL21ha2VfbmFtZXMucGwKQEAgLTgyOCw2ICs4MjgsMTAgQEAgcHJpbnQgRiA8PEVORAog
I2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjZW5kaWYKIAorI2lmIEVOQUJMRShDVVNUT01fRE9NX0VM
RU1FTlRTKQorI2luY2x1ZGUgIkRvY3VtZW50Q3VzdG9tRWxlbWVudC5oIgorI2VuZGlmCisKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlICRwYXJhbWV0ZXJze25hbWVzcGFj
ZX1OYW1lczsKQEAgLTg1MCw2ICs4NTQsMjcgQEAgbXkgJXRhZ0NvbnN0cnVjdG9yTWFwID0gYnVp
bGRDb25zdHJ1Y3Rvck1hcCgpOwogCiBwcmludENvbnN0cnVjdG9ycygkRiwgXCV0YWdDb25zdHJ1
Y3Rvck1hcCk7CiAKK2lmICgkcGFyYW1ldGVyc3tuYW1lc3BhY2V9IGVxICJIVE1MIikgeworICAg
IHByaW50IEYgPDxFTkQKK3N0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gY3Jl
YXRlRmFsbGJhY2tFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnKQoreworI2lmIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorICAgIGlmIChQYXNz
UmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50ID0gRG9jdW1lbnRDdXN0b21FbGVtZW50OjpjcmVh
dGVFbGVtZW50KGRvY3VtZW50LCB0YWcpKQorICAgICAgICByZXR1cm4gZWxlbWVudDsKKyNlbmRp
ZgorICAgIHJldHVybiAkcGFyYW1ldGVyc3tmYWxsYmFja0ludGVyZmFjZU5hbWV9OjpjcmVhdGUo
dGFnLCBkb2N1bWVudCk7Cit9CitFTkQKKyAgICA7Cit9IGVsc2UgeworICAgIHByaW50IEYgPDxF
TkQKK3N0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjwkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVu
dD4gY3JlYXRlRmFsbGJhY2tFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnKQoreworICAgIHJldHVybiAkcGFyYW1ldGVyc3tmYWxsYmFja0ludGVyZmFj
ZU5hbWV9OjpjcmVhdGUodGFnLCBkb2N1bWVudCk7Cit9CitFTkQKK30KKwogcHJpbnQgRiA8PEVO
RAogc3RhdGljIHZvaWQgYWRkVGFnKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZywgQ29uc3RydWN0
b3JGdW5jdGlvbiBmdW5jKQogewpAQCAtOTE0LDggKzkzOSw3IEBAIHByaW50IEYgPDxFTkQKIAog
RU5ECiA7Ci1wcmludCBGICIgICAgcmV0dXJuICRwYXJhbWV0ZXJze2ZhbGxiYWNrSW50ZXJmYWNl
TmFtZX06OmNyZWF0ZShxTmFtZSwgZG9jdW1lbnQpO1xuIjsKLQorcHJpbnQgRiAiICAgIHJldHVy
biBjcmVhdGVGYWxsYmFja0VsZW1lbnQoZG9jdW1lbnQsIHFOYW1lKTtcbiI7CiBwcmludCBGIDw8
RU5ECiB9CiAKQEAgLTExNzEsNiArMTE5NSw3IEBAIEVORAogOwogICAgIH0gZWxzaWYgKCR3cmFw
cGVyRmFjdG9yeVR5cGUgZXEgIlY4IikgewogICAgICAgICBwcmludCBGIDw8RU5ECisjaW5jbHVk
ZSAiVjhET01FbGVtZW50Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJWOCRwYXJhbWV0ZXJze25h
bWVzcGFjZX1FbGVtZW50LmgiCiAgICAgICAgIAogI2luY2x1ZGUgPHY4Lmg+CkBAIC0xMjU1LDkg
KzEyODAsMjEgQEAgRU5ECiAgICAgfSBlbHNpZiAoJHdyYXBwZXJGYWN0b3J5VHlwZSBlcSAiVjgi
KSB7CiAgICAgICAgIHByaW50IEYgPDxFTkQKICAgICAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXJG
dW5jdGlvbihlbGVtZW50LCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworRU5ECis7CisgICAg
ICAgIGlmICgkcGFyYW1ldGVyc3tuYW1lc3BhY2V9IGVxICJIVE1MIikgeworICAgICAgICAgICAg
cHJpbnQgRiA8PEVORAorI2lmIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorICAgIHJldHVy
biBWOEVsZW1lbnRDb25zdHJ1Y3Rvcjo6d3JhcEVsZW1lbnQoZWxlbWVudCwgY3JlYXRpb25Db250
ZXh0LCBpc29sYXRlKTsKKyNlbmRpZgorRU5ECis7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBwcmludCBGIDw8RU5ECiAgICAgcmV0dXJuIFY4JHBhcmFtZXRlcnN7ZmFsbGJhY2tJbnRl
cmZhY2VOYW1lfTo6d3JhcCh0byRwYXJhbWV0ZXJze2ZhbGxiYWNrSW50ZXJmYWNlTmFtZX0oZWxl
bWVudCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiBFTkQKIDsKKyAgICAgICAgfQogICAg
IH0KICAgICBwcmludCBGIDw8RU5ECiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL2ZlYXR1cmVzLmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkK
aW5kZXggODE2YzA3ZThhYjIyYTljNDU0ZjAwMTg0MDk4NjY1NjNjNWM5MjgyMy4uY2MxYzhhMDQ2
ZjY4NDNhNjk3ZjVjNzY5ZDg4MDUyNzBjYjg2Y2UzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVh
dHVyZXMuZ3lwaQpAQCAtNTEsNiArNTEsNyBAQAogICAgICAgJ0VOQUJMRV9DU1NfU0hBREVSUz0x
JywKICAgICAgICdFTkFCTEVfQ1NTX1ZBUklBQkxFUz0xJywKICAgICAgICdFTkFCTEVfQ1NTX1NU
SUNLWV9QT1NJVElPTj0xJywKKyAgICAgICdFTkFCTEVfQ1VTVE9NX0RPTV9FTEVNRU5UUz0xJywK
ICAgICAgICdFTkFCTEVfQ1VTVE9NX1NDSEVNRV9IQU5ETEVSPTAnLAogICAgICAgJ0VOQUJMRV9E
QVNIQk9BUkRfU1VQUE9SVD0wJywKICAgICAgICdFTkFCTEVfREFUQV9UUkFOU0ZFUl9JVEVNUz0x
JywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlJ1bnRpbWVG
ZWF0dXJlcy5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUnVudGltZUZlYXR1
cmVzLmgKaW5kZXggNjRjZjgyOWI1MDI4YWE2NDZhZWJhOWE5MGU4OTM4ODNjMGI2OTNiOC4uOGNj
NjBmNGYwNzVkMDFjOWY0NDBiODMxZTdhMTQzYWY3MWIwNjYxNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUnVudGltZUZlYXR1cmVzLmgKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUnVudGltZUZlYXR1cmVzLmgKQEAgLTEzMiw2ICsx
MzIsOSBAQCBwdWJsaWM6CiAgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgdm9pZCBlbmFibGVTaGFk
b3dET00oYm9vbCk7CiAgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgYm9vbCBpc1NoYWRvd0RPTUVu
YWJsZWQoKTsKIAorICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIHZvaWQgZW5hYmxlQ3VzdG9tRE9N
RWxlbWVudHMoYm9vbCk7CisgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgYm9vbCBpc0N1c3RvbURP
TUVsZW1lbnRzRW5hYmxlZCgpOworCiAgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgdm9pZCBlbmFi
bGVTdHlsZVNjb3BlZChib29sKTsKICAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBib29sIGlzU3R5
bGVTY29wZWRFbmFibGVkKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlJ1bnRpbWVGZWF0dXJlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJSdW50aW1lRmVhdHVyZXMuY3BwCmluZGV4IDRlNjRjNjY0YmZmZDBhMGI0NjdkZGNiYjdlMGRk
NTA1M2I5NjgwOWEuLjdhMTliNmE3YjRkN2M4MmVkZDZjOTNkOTIxMmJlNzc5ZmE3NzJmNTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlJ1bnRpbWVGZWF0dXJlcy5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUnVudGltZUZlYXR1cmVzLmNw
cApAQCAtNTAzLDYgKzUwMywyNSBAQCBib29sIFdlYlJ1bnRpbWVGZWF0dXJlczo6aXNTaGFkb3dE
T01FbmFibGVkKCkKICNlbmRpZgogfQogCit2b2lkIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxl
Q3VzdG9tRE9NRWxlbWVudHMoYm9vbCBlbmFibGUpCit7CisjaWYgRU5BQkxFKENVU1RPTV9ET01f
RUxFTUVOVFMpCisgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0Q3VzdG9tRE9NRWxlbWVu
dHMoZW5hYmxlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGVuYWJsZSk7CisjZW5kaWYKK30K
KworYm9vbCBXZWJSdW50aW1lRmVhdHVyZXM6OmlzQ3VzdG9tRE9NRWxlbWVudHNFbmFibGVkKCkK
K3sKKyNpZiBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKKyAgICByZXR1cm4gUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6Y3VzdG9tRE9NRWxlbWVudHNFbmFibGVkKCk7CisjZWxzZQorICAgIHJl
dHVybiBmYWxzZTsKKyNlbmRpZgorfQorCisKIHZvaWQgV2ViUnVudGltZUZlYXR1cmVzOjplbmFi
bGVTdHlsZVNjb3BlZChib29sIGVuYWJsZSkKIHsKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQpk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcCBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKaW5kZXggMjY5MmU3
NDU4NjBlYjMzOWIzOTBmYWY5NTQ0NTI5ODliZjA1ZTdmMi4uNzIwMGIyODM2NWNkMmY0OGYzYTRm
MGE2MTEwYjk3YTg4NGNkMzdlMCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFNoZWxsLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0U2hlbGwuY3BwCkBAIC0xNDIsNiArMTQyLDcgQEAgVGVzdFNoZWxsOjpUZXN0U2hlbGwoKQog
ICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlVmlkZW9UcmFjayh0cnVlKTsKICAgICBXZWJS
dW50aW1lRmVhdHVyZXM6OmVuYWJsZUdhbWVwYWQodHJ1ZSk7CiAgICAgV2ViUnVudGltZUZlYXR1
cmVzOjplbmFibGVTaGFkb3dET00odHJ1ZSk7CisgICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFi
bGVDdXN0b21ET01FbGVtZW50cyh0cnVlKTsKICAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJs
ZVN0eWxlU2NvcGVkKHRydWUpOwogICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlU2NyaXB0
ZWRTcGVlY2godHJ1ZSk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174633</attachid>
            <date>2012-11-16 02:00:26 -0800</date>
            <delta_ts>2012-11-20 19:49:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100229-20121116185822.patch</filename>
            <type>text/plain</type>
            <size>56563</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0MzY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMmJiMGZjNzBm
YmJhMjMyYTQxMzEwN2NlYWUxOGNiNTdkYjYxMWE2Yi4uZWZjNTBkZDQ2YjE0ZTZkNWU5YTExN2Mz
YzVjNjVlZDQ4NTU3YzNiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtOTcyLDYgKzk3Miw3IEBACiAg
ICAgICAgICAgICAnZG9tL0NsaXBib2FyZC5pZGwnLAogICAgICAgICAgICAgJ2RvbS9Db21tZW50
LmlkbCcsCiAgICAgICAgICAgICAnZG9tL0NvbXBvc2l0aW9uRXZlbnQuaWRsJywKKyAgICAgICAg
ICAgICdkb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmlkbCcsCiAgICAgICAgICAgICAnZG9t
L0N1c3RvbUV2ZW50LmlkbCcsCiAgICAgICAgICAgICAnZG9tL0RPTUNvcmVFeGNlcHRpb24uaWRs
JywKICAgICAgICAgICAgICdkb20vRE9NRXJyb3IuaWRsJywKQEAgLTIxOTcsNiArMjE5OCw4IEBA
CiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvQXJyYXlWYWx1ZS5oJywKICAgICAgICAgICAgICdi
aW5kaW5ncy92OC9CaW5kaW5nU3RhdGUuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9C
aW5kaW5nU3RhdGUuaCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvQ3VzdG9tRWxlbWVudEhl
bHBlcnMuY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9DdXN0b21FbGVtZW50SGVscGVy
cy5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuY3BwJywKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaCcsCiAgICAgICAgICAgICAnYmluZGlu
Z3MvdjgvRE9NV3JhcHBlck1hcC5oJywKQEAgLTIyNjQsNiArMjI2Nyw4IEBACiAgICAgICAgICAg
ICAnYmluZGluZ3MvdjgvU2hhcmVkUGVyc2lzdGVudC5oJywKICAgICAgICAgICAgICdiaW5kaW5n
cy92OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdz
L3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmgnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4
L1Y4QWRhcHRvckZ1bmN0aW9uLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhBZGFw
dG9yRnVuY3Rpb24uaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNwcCcs
CiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgnLAogICAgICAgICAgICAgJ2Jp
bmRpbmdzL3Y4L1Y4QmluZGluZ01hY3Jvcy5oJywKQEAgLTIyNzEsNiArMjI3Niw3IEBACiAgICAg
ICAgICAgICAnYmluZGluZ3MvdjgvVjhDYWxsYmFjay5oJywKICAgICAgICAgICAgICdiaW5kaW5n
cy92OC9WOENvbGxlY3Rpb24uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOENvbGxl
Y3Rpb24uaCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhDb250ZXh0RGlzcG9zYWJsZS5o
JywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOERlcGVuZGVudFJldGFpbmVkLmgnLAogICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4RE9NQ29uZmlndXJhdGlvbi5jcHAnLAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL3Y4L1Y4RE9NQ29uZmlndXJhdGlvbi5oJywKQEAgLTIyODYsNiArMjI5Miw4
IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuaCcsCiAgICAgICAg
ICAgICAnYmluZGluZ3MvdjgvVjhHQ0ZvckNvbnRleHREaXNwb3NlLmNwcCcsCiAgICAgICAgICAg
ICAnYmluZGluZ3MvdjgvVjhHQ0ZvckNvbnRleHREaXNwb3NlLmgnLAorICAgICAgICAgICAgJ2Jp
bmRpbmdzL3Y4L1Y4SFRNTEN1c3RvbUVsZW1lbnQuY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5n
cy92OC9WOEhUTUxDdXN0b21FbGVtZW50LmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4
SGlkZGVuUHJvcGVydHlOYW1lLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhIaWRk
ZW5Qcm9wZXJ0eU5hbWUuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRM
aXN0ZW5lci5jcHAnLApAQCAtMjM0Miw2ICsyMzUwLDcgQEAKICAgICAgICAgICAgICdiaW5kaW5n
cy92OC9jdXN0b20vVjhDbGlwYm9hcmRDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5n
cy92OC9jdXN0b20vVjhDb25zb2xlQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q29vcmRpbmF0ZXNDdXN0b20uY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5n
cy92OC9jdXN0b20vVjhDdXN0b21FbGVtZW50Q29uc3RydWN0b3JDdXN0b20uY3BwJywKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21FdmVudEN1c3RvbS5jcHAnLAogICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2Fs
bGJhY2suY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21YUGF0
aE5TUmVzb2x2ZXIuY3BwJywKQEAgLTM3NjYsNiArMzc3NSwxMCBAQAogICAgICAgICAgICAgJ2Rv
bS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5jcHAnLAogICAgICAgICAgICAgJ2RvbS9Db250ZXh0
RGVzdHJ1Y3Rpb25PYnNlcnZlci5jcHAnLAogICAgICAgICAgICAgJ2RvbS9Dcm9zc1RocmVhZFRh
c2suaCcsCisgICAgICAgICAgICAnZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAnLAor
ICAgICAgICAgICAgJ2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaCcsCisgICAgICAgICAg
ICAnZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5jcHAnLAorICAgICAgICAgICAgJ2RvbS9DdXN0
b21FbGVtZW50UmVnaXN0cnkuaCcsCiAgICAgICAgICAgICAnZG9tL0N1c3RvbUV2ZW50LmNwcCcs
CiAgICAgICAgICAgICAnZG9tL0N1c3RvbUV2ZW50LmgnLAogICAgICAgICAgICAgJ2RvbS9ET01B
bGxJbk9uZS5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJp
Yy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dl
bmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHAKaW5kZXggZDZhNWY5MmM5MzMzNjUzMDQy
YjNhNDgwYzIxMTFlNTA2MDEzNzMwMC4uYTJlNjAyYmU3M2UxM2VjZmM2MzBhOWU1MjFiMWZkYzdj
ZDJmNGRlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50
aW1lRW5hYmxlZEZlYXR1cmVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5l
cmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwCkBAIC0xOTIsNiArMTkyLDEwIEBAIGJvb2wg
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6aXNTaGFkb3dET01FbmFibGVkID0gZmFsc2U7CiBib29s
IFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmlzQXV0aG9yU2hhZG93RE9NRm9yQW55RWxlbWVudEVu
YWJsZWQgPSBmYWxzZTsKICNlbmRpZgogCisjaWYgRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMp
Citib29sIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmlzQ3VzdG9tRE9NRWxlbWVudHNFbmFibGVk
ID0gZmFsc2U7CisjZW5kaWYKKwogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCiBib29sIFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OmlzU3R5bGVTY29wZWRFbmFibGVkID0gZmFsc2U7CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJs
ZWRGZWF0dXJlcy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5h
YmxlZEZlYXR1cmVzLmgKaW5kZXggMmMyNDg2OWViMjI3NzRmNzhjYzYwMTMwZGNkODMzMzRiMmQ2
OTIyYi4uNmRiZDVlN2UyMzRmMmFiODcwYzYzOTU0YWQzNGM4ZWE2YzQ3NGQyYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVz
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZl
YXR1cmVzLmgKQEAgLTIxMiw2ICsyMTIsMTEgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNl
dEF1dGhvclNoYWRvd0RPTUZvckFueUVsZW1lbnRFbmFibGVkKGJvb2wgaXNFbmFibGVkKSB7IGlz
QXV0aG9yU2hhZG93RE9NRm9yQW55RWxlbWVudEVuYWJsZWQgPSBpc0VuYWJsZWQ7IH0KICNlbmRp
ZgogCisjaWYgRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCisgICAgc3RhdGljIGJvb2wgY3Vz
dG9tRE9NRWxlbWVudHNFbmFibGVkKCkgeyByZXR1cm4gaXNDdXN0b21ET01FbGVtZW50c0VuYWJs
ZWQ7IH0KKyAgICBzdGF0aWMgdm9pZCBzZXRDdXN0b21ET01FbGVtZW50cyhib29sIGlzRW5hYmxl
ZCkgeyBpc0N1c3RvbURPTUVsZW1lbnRzRW5hYmxlZCA9IGlzRW5hYmxlZDsgfQorI2VuZGlmCisK
ICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQogICAgIHN0YXRpYyBib29sIHN0eWxlU2NvcGVkRW5h
YmxlZCgpIHsgcmV0dXJuIGlzU3R5bGVTY29wZWRFbmFibGVkOyB9CiAgICAgc3RhdGljIHZvaWQg
c2V0U3R5bGVTY29wZWRFbmFibGVkKGJvb2wgaXNFbmFibGVkKSB7IGlzU3R5bGVTY29wZWRFbmFi
bGVkID0gaXNFbmFibGVkOyB9CkBAIC0zMzAsNiArMzM1LDEwIEBAIHByaXZhdGU6CiAgICAgc3Rh
dGljIGJvb2wgaXNBdXRob3JTaGFkb3dET01Gb3JBbnlFbGVtZW50RW5hYmxlZDsKICNlbmRpZgog
CisjaWYgRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCisgICAgc3RhdGljIGJvb2wgaXNDdXN0
b21ET01FbGVtZW50c0VuYWJsZWQ7CisjZW5kaWYKKwogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQp
CiAgICAgc3RhdGljIGJvb2wgaXNTdHlsZVNjb3BlZEVuYWJsZWQ7CiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KaW5kZXgg
NmNhNWEwMzRhZmYzMGY3MGFiYzk0MTgyNjRlNGVlNTZiYjlmODYxZi4uOWQzYjIxOGVjZTIwNjhl
YmVkNzFjNmE2NzY3NDk2YTBjZDljMzA1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KQEAgLTM3MywxMyArMzczLDIwIEBAIEVO
RAogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiZmFsc2U7XG4iKTsKICAgICB9CiAKKyAg
ICBteSAkZnJvbUZ1bmN0aW9uT3BlbmluZyA9ICIiOworICAgIG15ICRmcm9tRnVuY3Rpb25DbG9z
aW5nID0gIiI7CisgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlY4V3Jh
cEFzRnVuY3Rpb24ifSkgeworICAgICAgICAkZnJvbUZ1bmN0aW9uT3BlbmluZyA9ICJWOERPTVdy
YXBwZXI6OmZyb21GdW5jdGlvbigiOworICAgICAgICAkZnJvbUZ1bmN0aW9uQ2xvc2luZyA9ICIp
IjsKKyAgICB9CisKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CiAgICAgc3RhdGlj
IGJvb2wgSGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKICAgICBzdGF0aWMgdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdldFJhd1RlbXBsYXRlKCk7CiAgICAg
c3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBHZXRUZW1wbGF0ZSgp
OwogICAgIHN0YXRpYyAke25hdGl2ZVR5cGV9KiB0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IG9iamVjdCkKICAgICB7Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCR7bmF0
aXZlVHlwZX0qPihvYmplY3QtPkdldEFsaWduZWRQb2ludGVyRnJvbUludGVybmFsRmllbGQodjhE
T01XcmFwcGVyT2JqZWN0SW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
JHtuYXRpdmVUeXBlfSo+KCR7ZnJvbUZ1bmN0aW9uT3BlbmluZ31vYmplY3Qke2Zyb21GdW5jdGlv
bkNsb3Npbmd9LT5HZXRBbGlnbmVkUG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9NV3JhcHBl
ck9iamVjdEluZGV4KSk7CiAgICAgfQogICAgIGlubGluZSBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiB3cmFwKCR7bmF0aXZlVHlwZX0qLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0
aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqID0gMCk7
CiAgICAgc3RhdGljIHZvaWQgZGVyZWZPYmplY3Qodm9pZCopOwpAQCAtNTA5LDYgKzUxNiwxNSBA
QCBFTkQKIAogRU5ECiAKKyAgICBteSAkdG9GdW5jdGlvbk9wZW5pbmcgPSAiIjsKKyAgICBteSAk
dG9GdW5jdGlvbkNsb3NpbmcgPSAiIjsKKyAgICBteSAkdG9GdW5jdGlvbkNsb3NpbmdTbG93ID0g
IiI7CisgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlY4V3JhcEFzRnVu
Y3Rpb24ifSkgeworICAgICAgICAkdG9GdW5jdGlvbk9wZW5pbmcgPSAiVjhET01XcmFwcGVyOjp0
b0Z1bmN0aW9uKCI7CisgICAgICAgICR0b0Z1bmN0aW9uQ2xvc2luZyA9ICIpIjsKKyAgICAgICAg
JHRvRnVuY3Rpb25DbG9zaW5nU2xvdyA9ICIsIGltcGwtPnByb3RvdHlwZSgpLnY4VmFsdWUoKSwg
aW1wbC0+bmFtZSgpKSI7CisgICAgfQorCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgPDxFTkQp
Owogdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiAke2NsYXNzTmFtZX06OndyYXAoJHtuYXRpdmVUeXBl
fSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29s
YXRlKiBpc29sYXRlKQogewpAQCAtNTE3LDEwICs1MzMsMTAgQEAgRU5ECiAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgPDxFTkQpOwogICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBw
ZXIgPSAkZ2V0Q2FjaGVkV3JhcHBlcjsKICAgICAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkK
LSAgICAgICAgICAgIHJldHVybiB3cmFwcGVyOworICAgICAgICAgICAgcmV0dXJuICR7dG9GdW5j
dGlvbk9wZW5pbmd9d3JhcHBlciR7dG9GdW5jdGlvbkNsb3Npbmd9OwogRU5ECiAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgPDxFTkQpOwotICAgIHJldHVybiAke2NsYXNzTmFtZX06OndyYXBTbG93
KGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgcmV0dXJuICR7dG9GdW5jdGlv
bk9wZW5pbmd9JHtjbGFzc05hbWV9Ojp3cmFwU2xvdyhpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlz
b2xhdGUpJHt0b0Z1bmN0aW9uQ2xvc2luZ1Nsb3d9OwogfQogRU5ECiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0CmluZGV4IGRiNTg4NGM1
ZjQyOGM3MGQ4NWFlMTI0ZTFkNjQ4NjE5YmZlN2RlNDAuLjllM2M0YjJkNjE2Zjg5MGJkOGEyYTZi
NzA4NmNiNDE5Y2I2ZTJiZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvSURMQXR0cmlidXRlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9JRExBdHRyaWJ1dGVzLnR4dApAQCAtMTIyLDMgKzEyMiw0IEBAIFY4R2VuZXJhdGVJc1Jl
YWNoYWJsZT1JbXBsRG9jdW1lbnR8SW1wbEVsZW1lbnRSb290fEltcGxPd25lclJvb3R8SW1wbE93
bmVyTm9kZVJvCiBWOE1lYXN1cmVBcz0qCiBWOFJlYWRPbmx5CiBWOFVuZm9yZ2VhYmxlCitWOFdy
YXBBc0Z1bmN0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9DdXN0
b21FbGVtZW50SGVscGVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9DdXN0b21F
bGVtZW50SGVscGVycy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmEyZjQ4Zjk2ZjQ0ZmIzOWZkNWE2NDdmYTgz
YzYxMTNjZWM0YTExMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmNwcApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRIZWxwZXJzLmgiCisKKyNpbmNsdWRlICJW
OEhUTUxTcGFuRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBFTkFCTEUo
Q1VTVE9NX0RPTV9FTEVNRU5UUykKKworY29uc3QgU2NyaXB0VmFsdWUmIEN1c3RvbUVsZW1lbnRI
ZWxwZXJzOjpkZWZhdWx0UHJvdG90eXBlKCkKK3sKKyAgICAvLyBGSVhNRTogU2hvdWxkIGJlIHN0
b3JlZCBpbiBwZXItaXNvbGF0ZSBzdG9yZQorICAgIERFRklORV9TVEFUSUNfTE9DQUwoU2NyaXB0
VmFsdWUsIHZhbHVlLCAodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPjo6TmV3KFY4SFRNTFNwYW5F
bGVtZW50OjpHZXRUZW1wbGF0ZSgpLT5HZXRGdW5jdGlvbigpLT5HZXQodjg6OlN0cmluZzo6TmV3
U3ltYm9sKCJwcm90b3R5cGUiKSkpKSk7CisgICAgcmV0dXJuIHZhbHVlOworfTsKKyNlbmRpZiAv
LyBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvQ3VzdG9tRWxlbWVudEhlbHBl
cnMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZTIwZThlYzZhNWVhODhmZmY0ZDYxMmFjZmQ4MTA5NTNmZjAxOTU1NQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0N1c3RvbUVsZW1lbnRI
ZWxwZXJzLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ3VzdG9tRWxlbWVudEhlbHBlcnNfaAor
I2RlZmluZSBDdXN0b21FbGVtZW50SGVscGVyc19oCisKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5U
UykKKworY2xhc3MgQ3VzdG9tRWxlbWVudEhlbHBlcnMgeworcHVibGljOgorICAgIHN0YXRpYyBj
b25zdCBTY3JpcHRWYWx1ZSYgZGVmYXVsdFByb3RvdHlwZSgpOworfTsKKworI2VuZGlmIC8vIEVO
QUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBDdXN0b21FbGVtZW50SGVscGVyc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTI5MzhhMzUyNmZjMmJi
NDE2YThmZjE3M2FjNGZmZThjNjBkM2FhNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmNwcApAQCAtMCwwICsxLDc0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlY4QWRhcHRvckZ1bmN0aW9uLmgiCisKKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4QWRhcHRvckZ1bmN0aW9uOjpnZXRUZW1wbGF0ZSgp
Cit7CisgICAgLy8gRklYTUU6IFNob3VsZCBiZSBzdG9yZWQgaW4gcGVyLWlzb2xhdGUgZGF0YSBz
dG9yZQorICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVt
cGwgPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT46Ok5ldyh2ODo6RnVuY3Rp
b25UZW1wbGF0ZTo6TmV3KCkpOworICAgIHJldHVybiBjb25maWd1cmVUZW1wbGF0ZSh0ZW1wbCk7
Cit9CisKK3Y4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOEFkYXB0b3JGdW5j
dGlvbjo6Y29uZmlndXJlVGVtcGxhdGUodjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IGRlc2MpCit7CisgICAgZGVzYy0+U2V0Q2FsbEhhbmRsZXIoJlY4QWRhcHRvckZ1bmN0aW9u
OjppbnZvY2F0aW9uQ2FsbGJhY2spOworICAgIHJldHVybiBkZXNjOworfQorCit2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gVjhBZGFwdG9yRnVuY3Rpb246Omludm9jYXRpb25DYWxsYmFjayhjb25zdCB2
ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBl
ZCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJncy5DYWxsZWUoKS0+R2V0SGlkZGVu
VmFsdWUoVjhIaWRkZW5Qcm9wZXJ0eU5hbWU6OmRldGFpbCgpKSk7CisgICAgLy8gRklYTUU6IFRo
aXMgY2FuIGJlIGZhc3RlciBpZiB3ZSBjYW4gYWNjZXNzIHVuZGVybHlpbmcgbmF0aXZlIGNhbGxi
YWNrIGRpcmVjdGx5LgorICAgIFZlY3Rvcjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiBhcmdBcnJh
eShhcmdzLkxlbmd0aCgpKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3MuTGVuZ3RoKCk7
ICsraSkKKyAgICAgICAgYXJnQXJyYXkuYXBwZW5kKGFyZ3NbaV0pOworICAgIGlmIChhcmdzLklz
Q29uc3RydWN0Q2FsbCgpKQorICAgICAgICByZXR1cm4gd3JhcHBlZC0+Q2FsbEFzQ29uc3RydWN0
b3IoYXJnQXJyYXkuc2l6ZSgpLCBhcmdBcnJheS5kYXRhKCkpOworICAgIHJldHVybiB3cmFwcGVk
LT5DYWxsQXNGdW5jdGlvbihhcmdzLlRoaXMoKSwgYXJnQXJyYXkuc2l6ZSgpLCBhcmdBcnJheS5k
YXRhKCkpOworfQorCit2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gVjhBZGFwdG9yRnVuY3Rpb246
OndyYXAodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QsIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBwcm90b3R5cGUsIEF0b21pY1N0cmluZyBuYW1lKQoreworICAgIHY4OjpIYW5kbGU8djg6OkZ1
bmN0aW9uPiBhZGFwdG9yID0gdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+OjpDYXN0KGdldFRlbXBs
YXRlKCktPkdldEZ1bmN0aW9uKCkpOworICAgIGlmICghcHJvdG90eXBlLklzRW1wdHkoKSAmJiBw
cm90b3R5cGUtPklzT2JqZWN0KCkpCisgICAgICAgIGFkYXB0b3ItPlNldCh2ODo6U3RyaW5nOjpO
ZXdTeW1ib2woInByb3RvdHlwZSIpLCBwcm90b3R5cGUsIHY4OjpSZWFkT25seSk7CisgICAgYWRh
cHRvci0+U2V0TmFtZSh2ODo6U3RyaW5nOjpOZXcobmFtZS5jaGFyYWN0ZXJzKCksIG5hbWUubGVu
Z3RoKCkpKTsKKyAgICBhZGFwdG9yLT5TZXRIaWRkZW5WYWx1ZShWOEhpZGRlblByb3BlcnR5TmFt
ZTo6ZGV0YWlsKCksIG9iamVjdCk7CisgICAgb2JqZWN0LT5TZXRIaWRkZW5WYWx1ZShWOEhpZGRl
blByb3BlcnR5TmFtZTo6ZGV0YWlsKCksIGFkYXB0b3IpOworICAgIHJldHVybiBhZGFwdG9yOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhBZGFwdG9yRnVuY3Rpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yN2Y2MTYyNTFhZjhkZWJmM2NjOWRm
YmZmNzQzYzE3NDA2MWY3YzQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhBZGFwdG9yRnVuY3Rpb24uaApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBWOEFk
YXB0b3JGdW5jdGlvbl9oCisjZGVmaW5lIFY4QWRhcHRvckZ1bmN0aW9uX2gKKworI2luY2x1ZGUg
IlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4SGlkZGVuUHJvcGVydHlOYW1lLmgiCisjaW5jbHVk
ZSA8djguaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFY4QWRhcHRvckZ1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiB1bndyYXAodjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+KTsKKyAg
ICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IHdyYXAodjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0Piwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHByb3RvdHlwZSwgQXRvbWljU3RyaW5nIG5hbWUp
OworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gZ2V0KHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4pOworCisgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPiBnZXRUZW1wbGF0ZSgpOworICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gY29uZmlndXJlVGVtcGxhdGUodjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+KTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGludm9jYXRpb25D
YWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJik7Cit9OworCitpbmxpbmUgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBWOEFkYXB0b3JGdW5jdGlvbjo6dW53cmFwKHY4OjpIYW5kbGU8djg6OkZ1bmN0
aW9uPiBmdW5jdGlvbikKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlZCA9IGZ1
bmN0aW9uLT5HZXRIaWRkZW5WYWx1ZShWOEhpZGRlblByb3BlcnR5TmFtZTo6ZGV0YWlsKCkpOwor
ICAgIEFTU0VSVCghd3JhcHBlZC5Jc0VtcHR5KCkpOworICAgIEFTU0VSVCh3cmFwcGVkLT5Jc09i
amVjdCgpKTsKKyAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh3cmFwcGVk
KTsKK30KKworaW5saW5lIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBWOEFkYXB0b3JGdW5jdGlv
bjo6Z2V0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KQoreworICAgIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBhZGFwdG9yRnVuY3Rpb24gPSBvYmplY3QtPkdldEhpZGRlblZhbHVlKFY4SGlk
ZGVuUHJvcGVydHlOYW1lOjpkZXRhaWwoKSk7CisgICAgQVNTRVJUKCFhZGFwdG9yRnVuY3Rpb24u
SXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoYWRhcHRvckZ1bmN0aW9uLT5Jc0Z1bmN0aW9uKCkpOwor
ICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj46OkNhc3QoYWRhcHRvckZ1bmN0aW9u
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVjhBZGFwdG9yRnVu
Y3Rpb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFw
cGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAKaW5k
ZXggMjhhOTA3MjIwZDAxNDM3MzljNDhkZmVmNDc5NWYyZjI5NWE5Y2M3Ny4uNTIwYjljZTJmNDdm
ZTlkYTBjMGRhZTU4N2U0MjVhNWUzMzNiY2Q2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOERPTVdyYXBwZXIuY3BwCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiRnJhbWVM
b2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCiAjaW5jbHVkZSAi
VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJWOEFkYXB0b3JGdW5jdGlvbi5o
IgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4Q29sbGVjdGlvbi5oIgogI2lu
Y2x1ZGUgIlY4RXZlbnRMaXN0ZW5lci5oIgpAQCAtMTg0LDQgKzE4NSwyMSBAQCBQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcih2ODo6TG9jYWw8
djg6OlZhbHVlPiB2YQogI2VuZGlmCiB9CiAKK3Y4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBWOERP
TVdyYXBwZXI6OnRvRnVuY3Rpb24odjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QpCit7Cisg
ICAgcmV0dXJuIFY4QWRhcHRvckZ1bmN0aW9uOjpnZXQob2JqZWN0KTsKK30KKwordjg6OkhhbmRs
ZTx2ODo6RnVuY3Rpb24+IFY4RE9NV3JhcHBlcjo6dG9GdW5jdGlvbih2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IG9iamVjdCwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHByb3RvdHlwZSwgQXRvbWljU3Ry
aW5nIG5hbWUpCit7CisgICAgcmV0dXJuIFY4QWRhcHRvckZ1bmN0aW9uOjp3cmFwKG9iamVjdCwg
cHJvdG90eXBlLCBuYW1lKTsKK30KKwordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOERPTVdyYXBw
ZXI6OmZyb21GdW5jdGlvbih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkKK3sKKyAgICBp
ZiAoIW9iamVjdC0+SXNGdW5jdGlvbigpKQorICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIHJl
dHVybiBWOEFkYXB0b3JGdW5jdGlvbjo6dW53cmFwKHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPjo6
Q2FzdChvYmplY3QpKTsKK30KKwogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKaW5kZXggMTlkMGUzNGQyNjc3YjIxZGEyMjhh
NjY1NjkyYmNjOWU3MmRkM2E4MS4uMTdmMGRlZmQ5ZjM4M2YwNmYyZmVhOGE3NTMwMTJmZTFiNGNm
Yzc5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKQEAgLTEy
Nyw2ICsxMjcsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgcmV0dXJuIGNv
bnRleHQtPndvcmxkKCktPmlzb2xhdGVkV29ybGRET01EYXRhU3RvcmUoKS0+Z2V0KG5vZGUpOwog
ICAgICAgICB9CiAKKyAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiB0b0Z1
bmN0aW9uKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4pOworICAgICAgICBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6RnVuY3Rpb24+IHRvRnVuY3Rpb24odjg6OkhhbmRsZTx2ODo6T2JqZWN0Piwgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHByb3RvdHlwZSwgQXRvbWljU3RyaW5nIG5hbWUpOworICAgICAgICBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBmcm9tRnVuY3Rpb24odjg6OkhhbmRsZTx2ODo6
T2JqZWN0Pik7CisKICAgICBwcml2YXRlOgogICAgICAgICBzdGF0aWMgdm9pZCBzZXRXcmFwcGVy
Q2xhc3Modm9pZCosIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpCiAgICAgICAg
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SFRNTEN1c3RvbUVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVu
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOTBiZjE3Y2JlY2I2MGNiODkzMjkyOTQ5NTYxYjliOWRhZmMzOTRm
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SFRNTEN1
c3RvbUVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVjhIVE1MQ3VzdG9tRWxlbWVudC5oIgorCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudFJl
Z2lzdHJ5LmgiCisjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJWOEN1c3RvbUVs
ZW1lbnRDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIlY4SFRNTFNwYW5FbGVtZW50LmgiCisjaW5j
bHVkZSAiVjhIVE1MVW5rbm93bkVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisj
aWYgRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCisKKy8vIEZJWE1FOiBFYWNoIGN1c3RvbSBl
bGVtZW50cyBzaG91bGQgaGF2ZSBpdHMgb3duIEdldFRlbXBsYXRlIG1ldGhvZCBzbyB0aGF0IGl0
IGNhbiBkZXJpdmVkIGZyb20gZGlmZmVyZW5jdCBzdXBlciBlbGVtZW50LgorV3JhcHBlclR5cGVJ
bmZvIFY4SFRNTEN1c3RvbUVsZW1lbnQ6OmluZm8gPSB7ICZWOEhUTUxTcGFuRWxlbWVudDo6R2V0
VGVtcGxhdGUsIFY4SFRNTEVsZW1lbnQ6OmRlcmVmT2JqZWN0LCAwLCAwLCAwLCAmVjhIVE1MU3Bh
bkVsZW1lbnQ6OmluZm8sIFdyYXBwZXJUeXBlT2JqZWN0UHJvdG90eXBlIH07CisKK3Y4OjpIYW5k
bGU8djg6OlZhbHVlPiBWOEhUTUxDdXN0b21FbGVtZW50Ojp3cmFwU2xvdyhQYXNzUmVmUHRyPEhU
TUxFbGVtZW50PiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwg
djg6Oklzb2xhdGUqIGlzb2xhdGUpCit7CisgICAgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKiBj
dG9yID0gQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Ojpjb25zdHJ1Y3Rvck9mKGltcGwuZ2V0KCkpOwor
ICAgIGlmICghY3RvcikKKyAgICAgICAgcmV0dXJuIFY4SFRNTFVua25vd25FbGVtZW50Ojp3cmFw
KHRvSFRNTFVua25vd25FbGVtZW50KGltcGwuZ2V0KCkpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xh
dGUpOworCisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dDsKKyAgICBpZiAoIWNy
ZWF0aW9uQ29udGV4dC5Jc0VtcHR5KCkgJiYgY3JlYXRpb25Db250ZXh0LT5DcmVhdGlvbkNvbnRl
eHQoKSAhPSB2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpKSB7CisgICAgICAgIC8vIEZvciBwZXJm
b3JtYW5jZSwgd2UgZW50ZXIgdGhlIGNvbnRleHQgb25seSBpZiB0aGUgY3VycmVudGx5IHJ1bm5p
bmcgY29udGV4dAorICAgICAgICAvLyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgY29udGV4dCB0aGF0
IHdlIGFyZSBhYm91dCB0byBlbnRlci4KKyAgICAgICAgY29udGV4dCA9IHY4OjpMb2NhbDx2ODo6
Q29udGV4dD46Ok5ldyhjcmVhdGlvbkNvbnRleHQtPkNyZWF0aW9uQ29udGV4dCgpKTsKKyAgICAg
ICAgQVNTRVJUKCFjb250ZXh0LklzRW1wdHkoKSk7CisgICAgICAgIGNvbnRleHQtPkVudGVyKCk7
CisgICAgfQorCisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhET01XcmFw
cGVyOjppbnN0YW50aWF0ZVY4T2JqZWN0KCZpbmZvLCBpbXBsLmdldCgpKTsKKworICAgIGlmICgh
Y29udGV4dC5Jc0VtcHR5KCkpCisgICAgICAgIGNvbnRleHQtPkV4aXQoKTsKKworICAgIGlmICh3
cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisKKyAgICAvLyBGSVhN
RTogVGhpcyBzaG91bGRuJ3QgYmUgbmVlZGVkIG9uY2UgZWFjaCBjdXN0b20gZWxlbWVudCBoYXMg
aXRzIG93biBGdW5jdGlvblRlbXBsYXRlCisgICAgd3JhcHBlci0+U2V0KHY4OjpTdHJpbmc6Ok5l
d1N5bWJvbCgiY29uc3RydWN0b3IiKSwgdG9WOChjdG9yLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xh
dGUpKTsKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVySGFuZGxlID0gVjhE
T01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JET01PYmplY3QoaW1wbCwgd3JhcHBlciwgaXNvbGF0
ZSk7CisgICAgd3JhcHBlckhhbmRsZS5NYXJrSW5kZXBlbmRlbnQoKTsKKworICAgIHJldHVybiB3
cmFwcGVyOworfQorCisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4SFRNTEN1c3RvbUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
SFRNTEN1c3RvbUVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lN2U3Y2Y4Mjk3NmI1MjZlNmU2ZWFmM2Vl
ZTQwOThjMDYzZTgzM2QzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVudC5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFY4SFRN
TEN1c3RvbUVsZW1lbnRfaAorI2RlZmluZSBWOEhUTUxDdXN0b21FbGVtZW50X2gKKworI2luY2x1
ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIlY4
SFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSFRNTEVsZW1lbnQ7CisKKyNpZiBF
TkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKKworY2xhc3MgVjhIVE1MQ3VzdG9tRWxlbWVudCB7
CitwdWJsaWM6CisgICAgc3RhdGljIFdyYXBwZXJUeXBlSW5mbyBpbmZvOworICAgIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcChIVE1MRWxlbWVudCosIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNv
bGF0ZSogPSAwKTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBTbG93KFBh
c3NSZWZQdHI8SFRNTEVsZW1lbnQ+LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+LCB2ODo6SXNvbGF0
ZSopOworfTsKKworaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxDdXN0b21FbGVt
ZW50Ojp3cmFwKEhUTUxFbGVtZW50KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0
aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit7CisgICAgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiB3cmFwcGVyID0gVjhET01XcmFwcGVyOjpnZXRDYWNoZWRXcmFwcGVyKGltcGwpOwor
ICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB3cmFwcGVyOworICAg
IHJldHVybiBWOEhUTUxDdXN0b21FbGVtZW50Ojp3cmFwU2xvdyhpbXBsLCBjcmVhdGlvbkNvbnRl
eHQsIGlzb2xhdGUpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMp
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFY4SFRNTEN1c3RvbUVsZW1l
bnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3Vz
dG9tRWxlbWVudENvbnN0cnVjdG9yQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvckN1c3RvbS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMjE0ZTk3MzNlOWE1YTAzNGZiMTBjZGI4YWUwMmYyMmVlOGY0OTdiNQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUVsZW1lbnRD
b25zdHJ1Y3RvckN1c3RvbS5jcHAKQEAgLTAsMCArMSw1NSBAQAorLyoKKyogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqIAorKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorKiBtZXQ6CisqIAorKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisqIGRpc3RyaWJ1dGlvbi4KKyogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorKiAKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tRWxlbWVu
dENvbnN0cnVjdG9yLmgiCisKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaCIK
KyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEhUTUxDdXN0b21FbGVtZW50Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4Q3VzdG9t
RWxlbWVudENvbnN0cnVjdG9yOjpjYWxsQXNGdW5jdGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJET00uVjhDdXN0b21FbGVtZW50Q29uc3Ry
dWN0b3IuQ29uc3RydWN0b3IiKTsKKyAgICBpZiAoIWFyZ3MuSXNDb25zdHJ1Y3RDYWxsKCkpCisg
ICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigiRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5u
b3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uIik7CisgICAgaWYgKENvbnN0cnVjdG9yTW9kZTo6
Y3VycmVudCgpID09IENvbnN0cnVjdG9yTW9kZTo6V3JhcEV4aXN0aW5nT2JqZWN0KQorICAgICAg
ICByZXR1cm4gYXJncy5Ib2xkZXIoKTsKKworICAgIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvciog
aW1wbCA9IHRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIFJlZlB0cjxIVE1MRWxlbWVudD4g
ZWxlbWVudCA9IGltcGwtPmNyZWF0ZUVsZW1lbnQoKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAg
ICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOworICAgIHJldHVybiBWOEhUTUxDdXN0b21FbGVtZW50
Ojp3cmFwKGVsZW1lbnQuZ2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmNmM2ZiZmU2YzZkMTljZmUwNzFiYjVjOTNiMmY4OTQ4NmY3YjNmODkKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmNwcApA
QCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkN1c3RvbUVsZW1l
bnRDb25zdHJ1Y3Rvci5oIgorCisjaWYgRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCisKKyNp
bmNsdWRlICJDdXN0b21FbGVtZW50SGVscGVycy5oIgorI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRS
ZWdpc3RyeS5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiSFRNTEVsZW1lbnQu
aCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVj
dG9yPiBDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQs
IEF0b21pY1N0cmluZyB0YWdOYW1lKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3VzdG9t
RWxlbWVudENvbnN0cnVjdG9yKGRvY3VtZW50LCB0YWdOYW1lKSk7Cit9CisKK0N1c3RvbUVsZW1l
bnRDb25zdHJ1Y3Rvcjo6Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKERvY3VtZW50KiBkb2N1bWVu
dCwgQXRvbWljU3RyaW5nIHRhZ05hbWUpCisgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQorICAg
ICwgbV90YWdOYW1lKG51bGxBdG9tLCB0YWdOYW1lLmxvd2VyKCksIEhUTUxOYW1lczo6eGh0bWxO
YW1lc3BhY2VVUkkpCisgICAgLCBtX25hbWUoIkhUTUxDdXN0b21FbGVtZW50IikKKyAgICAsIG1f
cHJvdG90eXBlKEN1c3RvbUVsZW1lbnRIZWxwZXJzOjpkZWZhdWx0UHJvdG90eXBlKCkpCit7Cit9
CisKK0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6fkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcigp
Cit7Cit9CisKK3ZvaWQgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjp3aWxsRGVzdHJveURvY3Vt
ZW50KCkKK3sKKyAgICBtX2RvY3VtZW50ID0gMDsKK30KKworUGFzc1JlZlB0cjxIVE1MRWxlbWVu
dD4gQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjpjcmVhdGVFbGVtZW50KCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fZG9jdW1lbnQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBIVE1MRWxl
bWVudDo6Y3JlYXRlKG1fdGFnTmFtZSwgbV9kb2N1bWVudCk7Cit9CisKK30KKworI2VuZGlmIC8v
IEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3Rv
bUVsZW1lbnRDb25zdHJ1Y3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYxYjRiMGY4NGEwNDc2Mjk0Yzc5MGVi
MWQ0NjFlYzExY2Q2ZDk0NDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ3VzdG9t
RWxlbWVudENvbnN0cnVjdG9yX2gKKyNkZWZpbmUgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yX2gK
KworI2lmIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorCisjaW5jbHVkZSAiUXVhbGlmaWVk
TmFtZS5oIgorI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgQ3VzdG9tRWxlbWVudERlZmluaXRpb247CitjbGFzcyBEaWN0aW9uYXJ5
OworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBIVE1MRWxlbWVudDsKKworY2xhc3MgQ3VzdG9tRWxl
bWVudENvbnN0cnVjdG9yIDogcHVibGljIFJlZkNvdW50ZWQ8Q3VzdG9tRWxlbWVudENvbnN0cnVj
dG9yPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0
cnVjdG9yPiBjcmVhdGUoRG9jdW1lbnQqLCBBdG9taWNTdHJpbmcgbmFtZSk7CisKKyAgICBleHBs
aWNpdCBDdXN0b21FbGVtZW50Q29uc3RydWN0b3IoRG9jdW1lbnQqLCBBdG9taWNTdHJpbmcgbmFt
ZSk7CisgICAgdmlydHVhbCB+Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKCk7CisKKyAgICBEb2N1
bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50OyB9CisgICAgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFnTmFtZTsgfQorICAg
IEF0b21pY1N0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgY29uc3Qg
U2NyaXB0VmFsdWUmIHByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdG90eXBlOyB9CisK
KyAgICBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBjcmVhdGVFbGVtZW50KCkgY29uc3Q7CisgICAg
dm9pZCB3aWxsRGVzdHJveURvY3VtZW50KCk7CisgICAgCitwcml2YXRlOgorICAgIERvY3VtZW50
KiBtX2RvY3VtZW50OworICAgIFF1YWxpZmllZE5hbWUgbV90YWdOYW1lOworICAgIEF0b21pY1N0
cmluZyBtX25hbWU7CisgICAgU2NyaXB0VmFsdWUgbV9wcm90b3R5cGU7Cit9OworCit9CisKKyNl
bmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKKworI2VuZGlmIC8vIEN1c3RvbUVs
ZW1lbnRDb25zdHJ1Y3Rvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9t
RWxlbWVudENvbnN0cnVjdG9yLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50
Q29uc3RydWN0b3IuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM4YTFhOWI3MWQ4MDlmOTQ3OWU4M2UwMDc3ZDFl
Y2VhNjAwYWRkYjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9t
RWxlbWVudENvbnN0cnVjdG9yLmlkbApAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworWwor
ICAgIENvbmRpdGlvbmFsPUNVU1RPTV9ET01fRUxFTUVOVFMsCisgICAgVjhFbmFibGVkQXRSdW50
aW1lPWN1c3RvbURPTUVsZW1lbnRzLAorICAgIFY4V3JhcEFzRnVuY3Rpb24sCisgICAgQ3VzdG9t
Q2FsbAorXSBpbnRlcmZhY2UgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yIHsKK307CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE4NDhh
MjFmNzNkM2YwNWFkYTM1M2Y0ZmJiMDkzZTg4Y2E4NjFlYTIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmNwcApAQCAtMCwwICsxLDg3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAg
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAq
ICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRS
ZWdpc3RyeS5oIgorCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmgiCisjaW5j
bHVkZSAiRGljdGlvbmFyeS5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiSFRN
TEVsZW1lbnQuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisKKyNpZiBF
TkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDdXN0
b21FbGVtZW50UmVnaXN0cnk6OkN1c3RvbUVsZW1lbnRSZWdpc3RyeShEb2N1bWVudCogZG9jdW1l
bnQpCisgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQoreworfQorCitDdXN0b21FbGVtZW50UmVn
aXN0cnk6On5DdXN0b21FbGVtZW50UmVnaXN0cnkoKQoreworICAgIGZvciAoQ29uc3RydWN0b3JN
YXA6Oml0ZXJhdG9yIGkgPSBtX2NvbnN0cnVjdG9ycy5iZWdpbigpOyBpICE9IG1fY29uc3RydWN0
b3JzLmVuZCgpOyArK2kpCisgICAgICAgIGktPnZhbHVlLT53aWxsRGVzdHJveURvY3VtZW50KCk7
Cit9CisKK0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciogQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Ojpj
b25zdHJ1Y3Rvck9mKEhUTUxFbGVtZW50KiBlbGVtZW50KQoreworICAgIEN1c3RvbUVsZW1lbnRS
ZWdpc3RyeSogc2VsZiA9IGVsZW1lbnQtPmRvY3VtZW50KCktPnJlZ2lzdHJ5KCk7CisgICAgaWYg
KCFzZWxmKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc2VsZi0+ZmluZChlbGVtZW50
LT50YWdRTmFtZSgpKTsKK30KKworUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+
IEN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6cmVnaXN0ZXJFbGVtZW50KGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZSwgY29uc3QgRGljdGlvbmFyeSYgb3B0aW9ucywgRXhjZXB0aW9uQ29kZSYpCit7Cisg
ICAgLy8gRklYTUU6IGNoZWNrIGR1cGxpY2F0aW9uIGFuZCB2YWxpZGl0eSwgbm9ybWFsaXplIHRo
ZSBuYW1lLgorICAgIFJlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IGZyZXNoID0gQ3Vz
dG9tRWxlbWVudENvbnN0cnVjdG9yOjpjcmVhdGUobV9kb2N1bWVudCwgbmFtZSk7CisgICAgbV9j
b25zdHJ1Y3RvcnMuYWRkKGZyZXNoLT50YWdOYW1lKCkuaW1wbCgpLCBmcmVzaCk7CisgICAgcmV0
dXJuIGZyZXNoOworfQorCitDdXN0b21FbGVtZW50Q29uc3RydWN0b3IqIEN1c3RvbUVsZW1lbnRS
ZWdpc3RyeTo6ZmluZChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAoreworICAgIC8v
IEZJWE1FOiB0YWtlIGNhcmUgb2YgbmFtZSBjYXNlcy4KKyAgICBDb25zdHJ1Y3Rvck1hcDo6Y29u
c3RfaXRlcmF0b3IgZm91bmQgPSBtX2NvbnN0cnVjdG9ycy5maW5kKG5hbWUuaW1wbCgpKTsKKyAg
ICByZXR1cm4gKGZvdW5kICE9IG1fY29uc3RydWN0b3JzLmVuZCgpKSA/IGZvdW5kLT52YWx1ZS5n
ZXQoKSA6IDA7Cit9CisKK1Bhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IEN1c3RvbUVsZW1lbnRSZWdp
c3RyeTo6Y3JlYXRlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAorewor
ICAgIGlmIChDdXN0b21FbGVtZW50Q29uc3RydWN0b3IqIGZvdW5kID0gZmluZChuYW1lKSkKKyAg
ICAgICAgcmV0dXJuIGZvdW5kLT5jcmVhdGVFbGVtZW50KCk7CisgICAgcmV0dXJuIDA7Cit9CisK
K30KKworI2VuZGlmIC8vIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5oIGIvU291cmNlL1dlYkNv
cmUvZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE4ZDYwNzJlYzhjZDZm
YjRmMDY0MWFiZjQyZTA2NDU0NTcyMWE5ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAg
ICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5X2gKKyNkZWZpbmUgQ3VzdG9tRWxlbWVudFJl
Z2lzdHJ5X2gKKworI2lmIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorCisjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKKyNpbmNsdWRlICJT
dXBwbGVtZW50YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDdXN0b21FbGVtZW50
Q29uc3RydWN0b3I7CitjbGFzcyBEaWN0aW9uYXJ5OworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBI
VE1MRWxlbWVudDsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CitjbGFzcyBRdWFsaWZp
ZWROYW1lOworCitjbGFzcyBDdXN0b21FbGVtZW50UmVnaXN0cnkgOiBwdWJsaWMgUmVmQ291bnRl
ZDxDdXN0b21FbGVtZW50UmVnaXN0cnk+IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBDdXN0b21F
bGVtZW50UmVnaXN0cnkoRG9jdW1lbnQqKTsKKyAgICB+Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5KCk7
CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IHdlYmtp
dFJlZ2lzdGVyKERvY3VtZW50KiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25D
b2RlJik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiB3
ZWJraXRSZWdpc3RlcihEb2N1bWVudCosIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3Qg
RGljdGlvbmFyeSYgb3B0aW9ucywgRXhjZXB0aW9uQ29kZSYpOworCisgICAgUGFzc1JlZlB0cjxD
dXN0b21FbGVtZW50Q29uc3RydWN0b3I+IHJlZ2lzdGVyRWxlbWVudChjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWUsIGNvbnN0IERpY3Rpb25hcnkmIG9wdGlvbnMsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICBDdXN0b21FbGVtZW50Q29uc3RydWN0b3IqIGZpbmQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNv
bnN0OworICAgIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYpIGNvbnN0OworCisgICAgc3RhdGljIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rv
ciogY29uc3RydWN0b3JPZihIVE1MRWxlbWVudCopOworCitwcml2YXRlOgorICAgIHR5cGVkZWYg
SGFzaE1hcDxRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lSW1wbCosIFJlZlB0cjxDdXN0b21F
bGVtZW50Q29uc3RydWN0b3I+ID5Db25zdHJ1Y3Rvck1hcDsKKworICAgIERvY3VtZW50KiBtX2Rv
Y3VtZW50OworICAgIENvbnN0cnVjdG9yTWFwIG1fY29uc3RydWN0b3JzOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMp
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IGM3MTdmYWMxNjVjMWI0MTc1YjY2
OTM4OTczYzgwZGE0NTA3MzY5YmMuLmYyNTU3ZWM0MjM0Y2I1Y2UyMTI3OGUyMTlkNzAwNDIyZGQ3
YzczYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNDYsNiArNDYsOCBAQAogI2luY2x1
ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgogI2luY2x1ZGUgIkNvbnRleHRGZWF0dXJlcy5o
IgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgorI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRDb25zdHJ1
Y3Rvci5oIgorI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRSZWdpc3RyeS5oIgogI2luY2x1ZGUgIkRP
TUltcGxlbWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5oIgog
I2luY2x1ZGUgIkRPTVNlbGVjdGlvbi5oIgpAQCAtNTMsNiArNTUsNyBAQAogI2luY2x1ZGUgIkRh
dGVDb21wb25lbnRzLmgiCiAjaW5jbHVkZSAiRGV2aWNlTW90aW9uQ29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgIkRldmljZU9yaWVudGF0aW9uQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkRpY3Rpb25h
cnkuaCIKICNpbmNsdWRlICJEb2N1bWVudEV2ZW50UXVldWUuaCIKICNpbmNsdWRlICJEb2N1bWVu
dEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKQEAgLTg3MSw2ICs4NzQs
MjAgQEAgUGFzc1JlZlB0cjxFbGVtZW50PiBEb2N1bWVudDo6Y3JlYXRlRWxlbWVudChjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkMKICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChR
dWFsaWZpZWROYW1lKG51bGxBdG9tLCBuYW1lLCBudWxsQXRvbSksIGZhbHNlKTsKIH0KIAorI2lm
IEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29u
c3RydWN0b3I+IERvY3VtZW50OjpyZWdpc3RlckVsZW1lbnQoY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICByZXR1cm4gcmVnaXN0ZXJFbGVtZW50KG5h
bWUsIERpY3Rpb25hcnkoKSwgZWMpOworfQorCitQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25z
dHJ1Y3Rvcj4gRG9jdW1lbnQ6OnJlZ2lzdGVyRWxlbWVudChjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWUsIGNvbnN0IERpY3Rpb25hcnkmIG9wdGlvbnMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IGlmICghbV9yZWdpc3RyeSkKKyAgICAgICAgbV9yZWdpc3RyeSA9IGFkb3B0UHRyKG5ldyBDdXN0
b21FbGVtZW50UmVnaXN0cnkodGhpcykpOworICAgIHJldHVybiBtX3JlZ2lzdHJ5LT5yZWdpc3Rl
ckVsZW1lbnQobmFtZSwgb3B0aW9ucywgZWMpOworfQorI2VuZGlmIC8vIEVOQUJMRShDVVNUT01f
RE9NX0VMRU1FTlRTKQorCiBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IERvY3VtZW50Ojpj
cmVhdGVEb2N1bWVudEZyYWdtZW50KCkKIHsKICAgICByZXR1cm4gRG9jdW1lbnRGcmFnbWVudDo6
Y3JlYXRlKGRvY3VtZW50KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCA5MmEzMmNiYjMzYzA2
MDRjYTIwMjRmMTYzZTkzZGVjMWUxMzYzZDk5Li5lMTcwZDE4MTM2NDkzNzA0MDIzODhjMWVhZTNk
ZTk0YzE4ODhkMzcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtNjcsNiArNjcsOCBAQCBjbGFz
cyBDYW52YXNSZW5kZXJpbmdDb250ZXh0OwogY2xhc3MgQ2hhcmFjdGVyRGF0YTsKIGNsYXNzIENv
bW1lbnQ7CiBjbGFzcyBDb250ZXh0RmVhdHVyZXM7CitjbGFzcyBDdXN0b21FbGVtZW50Q29uc3Ry
dWN0b3I7CitjbGFzcyBDdXN0b21FbGVtZW50UmVnaXN0cnk7CiBjbGFzcyBET01JbXBsZW1lbnRh
dGlvbjsKIGNsYXNzIERPTU5hbWVkRmxvd0NvbGxlY3Rpb247CiBjbGFzcyBET01TZWxlY3Rpb247
CkBAIC0xMTQ4LDYgKzExNTAsMTMgQEAgcHVibGljOgogICAgIFRleHRBdXRvc2l6ZXIqIHRleHRB
dXRvc2l6ZXIoKSB7IHJldHVybiBtX3RleHRBdXRvc2l6ZXIuZ2V0KCk7IH0KICNlbmRpZgogCisj
aWYgRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCisgICAgUGFzc1JlZlB0cjxDdXN0b21FbGVt
ZW50Q29uc3RydWN0b3I+IHJlZ2lzdGVyRWxlbWVudChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUs
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rv
cj4gcmVnaXN0ZXJFbGVtZW50KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgRGljdGlv
bmFyeSYgb3B0aW9ucywgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8RWxlbWVudD4g
Y3JlYXRlQ3VzdG9tRWxlbWVudChjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpOworICAgIEN1
c3RvbUVsZW1lbnRSZWdpc3RyeSogcmVnaXN0cnkoKSBjb25zdCB7IHJldHVybiBtX3JlZ2lzdHJ5
LmdldCgpOyB9CisjZW5kaWYKKwogICAgIHZvaWQgYWRqdXN0RmxvYXRRdWFkc0ZvclNjcm9sbEFu
ZEFic29sdXRlWm9vbUFuZEZyYW1lU2NhbGUoVmVjdG9yPEZsb2F0UXVhZD4mLCBSZW5kZXJPYmpl
Y3QqKTsKICAgICB2b2lkIGFkanVzdEZsb2F0UmVjdEZvclNjcm9sbEFuZEFic29sdXRlWm9vbUFu
ZEZyYW1lU2NhbGUoRmxvYXRSZWN0JiwgUmVuZGVyT2JqZWN0Kik7CiAKQEAgLTE1MDMsNiArMTUx
MiwxMCBAQCBwcml2YXRlOgogICAgIE93blB0cjxUZXh0QXV0b3NpemVyPiBtX3RleHRBdXRvc2l6
ZXI7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorICAgIE93blB0
cjxDdXN0b21FbGVtZW50UmVnaXN0cnk+IG1fcmVnaXN0cnk7CisjZW5kaWYKKwogICAgIGJvb2wg
bV9zY2hlZHVsZWRUYXNrc0FyZVN1c3BlbmRlZDsKICAgICAKICAgICBib29sIG1fdmlzdWFsVXBk
YXRlc0FsbG93ZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRs
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmlkbAppbmRleCBiNDRiYTFkZTEzZWFhZjYx
YjJmYTMyMzE5ODFkYmY3ODQ5OTNiMGQ3Li44ODM1NWFlYzA5OTk5NWMyODE0ZDA1ZmRjNTA3MjA1
YmRjZjhhMDRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwKQEAgLTMzOSw2ICszMzksOSBAQAog
ICAgIFtOb3RFbnVtZXJhYmxlLCBDb25kaXRpb25hbD1QT0lOVEVSX0xPQ0ssIFY4RW5hYmxlZEF0
UnVudGltZT1wb2ludGVyTG9ja10gYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb253ZWJraXRwb2lu
dGVybG9ja2Vycm9yOwogI2VuZGlmCiAKKyAgICBbVjhFbmFibGVkQXRSdW50aW1lPWN1c3RvbURP
TUVsZW1lbnRzLCBDb25kaXRpb25hbD1DVVNUT01fRE9NX0VMRU1FTlRTLCBJbXBsZW1lbnRlZEFz
PXJlZ2lzdGVyRWxlbWVudF0KKyAgICBDdXN0b21FbGVtZW50Q29uc3RydWN0b3Igd2Via2l0UmVn
aXN0ZXIoaW4gRE9NU3RyaW5nIG5hbWUsIGluIFtPcHRpb25hbF0gRGljdGlvbmFyeSBvcHRpb25z
KSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKwogI2lmIGRlZmluZWQoRU5BQkxFX1RPVUNIX0VWRU5U
UykgJiYgRU5BQkxFX1RPVUNIX0VWRU5UUwogICAgIFtSZXR1cm5OZXdPYmplY3QsIFY4RW5hYmxl
ZEF0UnVudGltZV0gVG91Y2ggY3JlYXRlVG91Y2goaW4gW09wdGlvbmFsPURlZmF1bHRJc1VuZGVm
aW5lZF0gRE9NV2luZG93IHdpbmRvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsPURlZmF1bHRJc1VuZGVmaW5lZF0gRXZl
bnRUYXJnZXQgdGFyZ2V0LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFt
ZXMucGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbAppbmRleCAzOGQ4NTk1ZGVi
MTYwM2ViNTJiNzUxODE3MjI0MjhjM2Y1MDU5MWQ0Li43ZWY4MmEwMzZlNDg1MDljNjcwMjFmMWE1
ZDFjNjUwMmY2YjA4YTc2IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1l
cy5wbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbApAQCAtMTE3MSw4ICsx
MTcxLDggQEAgRU5ECiA7CiAgICAgfSBlbHNpZiAoJHdyYXBwZXJGYWN0b3J5VHlwZSBlcSAiVjgi
KSB7CiAgICAgICAgIHByaW50IEYgPDxFTkQKKyNpbmNsdWRlICJWOEhUTUxDdXN0b21FbGVtZW50
LmgiCiAjaW5jbHVkZSAiVjgkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudC5oIgotICAgICAg
ICAKICNpbmNsdWRlIDx2OC5oPgogRU5ECiA7CkBAIC0xMjU1LDkgKzEyNTUsMjEgQEAgRU5ECiAg
ICAgfSBlbHNpZiAoJHdyYXBwZXJGYWN0b3J5VHlwZSBlcSAiVjgiKSB7CiAgICAgICAgIHByaW50
IEYgPDxFTkQKICAgICAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXJGdW5jdGlvbihlbGVtZW50LCBj
cmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworRU5ECis7CisgICAgICAgIGlmICgkcGFyYW1ldGVy
c3tuYW1lc3BhY2V9IGVxICJIVE1MIikgeworICAgICAgICAgICAgcHJpbnQgRiA8PEVORAorI2lm
IEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorICAgIHJldHVybiBWOEhUTUxDdXN0b21FbGVt
ZW50Ojp3cmFwKGVsZW1lbnQsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisjZW5kaWYKK0VO
RAorOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJpbnQgRiA8PEVORAogICAgIHJl
dHVybiBWOCRwYXJhbWV0ZXJze2ZhbGxiYWNrSW50ZXJmYWNlTmFtZX06OndyYXAodG8kcGFyYW1l
dGVyc3tmYWxsYmFja0ludGVyZmFjZU5hbWV9KGVsZW1lbnQpLCBjcmVhdGlvbkNvbnRleHQsIGlz
b2xhdGUpOwogRU5ECiA7CisgICAgICAgIH0KICAgICB9CiAgICAgcHJpbnQgRiA8PEVORAogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCmluZGV4IGYzODZkZWI3NzYyODkyMGFmM2I3
ZmYyMDViOWY4NjE5NWNiYWJkMWQuLjM0ZjM0ODg2ZGUxNGY1ZDEwOTI5MzNkYjU1YTMzMGNiZDBi
Y2M2YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKQEAgLTUyLDYgKzUyLDcg
QEAKICAgICAgICdFTkFCTEVfQ1NTX1NIQURFUlM9MScsCiAgICAgICAnRU5BQkxFX0NTU19WQVJJ
QUJMRVM9MScsCiAgICAgICAnRU5BQkxFX0NTU19TVElDS1lfUE9TSVRJT049MScsCisgICAgICAn
RU5BQkxFX0NVU1RPTV9ET01fRUxFTUVOVFM9MScsCiAgICAgICAnRU5BQkxFX0NVU1RPTV9TQ0hF
TUVfSEFORExFUj0wJywKICAgICAgICdFTkFCTEVfREFTSEJPQVJEX1NVUFBPUlQ9MCcsCiAgICAg
ICAnRU5BQkxFX0RBVEFfVFJBTlNGRVJfSVRFTVM9MScsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJSdW50aW1lRmVhdHVyZXMuaCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlJ1bnRpbWVGZWF0dXJlcy5oCmluZGV4IDIyZGU5ODE2MzRhYmFj
NWJiMjg1NTU1YzI0YjY3MzhhODA5NmIzYTMuLjcyNmQ0MTYyNDg5NTMxNjdhOWMxZWMwZDVjMGVi
MDNiYzljZmIyNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlJ1bnRpbWVGZWF0dXJlcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlJ1bnRpbWVGZWF0dXJlcy5oCkBAIC0xMzAsNiArMTMwLDkgQEAgcHVibGljOgogICAgIFdFQktJ
VF9FWFBPUlQgc3RhdGljIHZvaWQgZW5hYmxlU2hhZG93RE9NKGJvb2wpOwogICAgIFdFQktJVF9F
WFBPUlQgc3RhdGljIGJvb2wgaXNTaGFkb3dET01FbmFibGVkKCk7CiAKKyAgICBXRUJLSVRfRVhQ
T1JUIHN0YXRpYyB2b2lkIGVuYWJsZUN1c3RvbURPTUVsZW1lbnRzKGJvb2wpOworICAgIFdFQktJ
VF9FWFBPUlQgc3RhdGljIGJvb2wgaXNDdXN0b21ET01FbGVtZW50c0VuYWJsZWQoKTsKKwogICAg
IFdFQktJVF9FWFBPUlQgc3RhdGljIHZvaWQgZW5hYmxlU3R5bGVTY29wZWQoYm9vbCk7CiAgICAg
V0VCS0lUX0VYUE9SVCBzdGF0aWMgYm9vbCBpc1N0eWxlU2NvcGVkRW5hYmxlZCgpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJSdW50aW1lRmVhdHVyZXMuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUnVudGltZUZlYXR1cmVzLmNwcAppbmRl
eCAwNmJjMzA4MmY1NWZkYzA4ZDVlNjIwYzM0ZjIwZGQ4ZWQwYjU0NmNkLi5hNDJmM2Y0NWZmYTE2
YTlmN2YxOTY1Mzk1OGUzMjdmYjNiOWMyNjQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJSdW50aW1lRmVhdHVyZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlJ1bnRpbWVGZWF0dXJlcy5jcHAKQEAgLTQ4NSw2ICs0ODUsMjUgQEAgYm9v
bCBXZWJSdW50aW1lRmVhdHVyZXM6OmlzU2hhZG93RE9NRW5hYmxlZCgpCiAjZW5kaWYKIH0KIAor
dm9pZCBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZUN1c3RvbURPTUVsZW1lbnRzKGJvb2wgZW5h
YmxlKQoreworI2lmIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorICAgIFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNldEN1c3RvbURPTUVsZW1lbnRzKGVuYWJsZSk7CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShlbmFibGUpOworI2VuZGlmCit9CisKK2Jvb2wgV2ViUnVudGltZUZlYXR1cmVz
Ojppc0N1c3RvbURPTUVsZW1lbnRzRW5hYmxlZCgpCit7CisjaWYgRU5BQkxFKENVU1RPTV9ET01f
RUxFTUVOVFMpCisgICAgcmV0dXJuIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmN1c3RvbURPTUVs
ZW1lbnRzRW5hYmxlZCgpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwor
CiB2b2lkIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlU3R5bGVTY29wZWQoYm9vbCBlbmFibGUp
CiB7CiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0U2hlbGwuY3BwCmluZGV4IDRkYjFlMzJkNTNlYzA5MDMxNWI1NjA0MTYyMWQwOThk
ZDc1ODNjN2IuLmM2YTQxYjUzMzg4YzZlNDAwOGI2ZjBiNjAyOTVjZjNmNmEwMDEyZmUgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKKysrIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcApAQCAtMTQ0LDYgKzE0
NCw3IEBAIFRlc3RTaGVsbDo6VGVzdFNoZWxsKCkKICAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVu
YWJsZVZpZGVvVHJhY2sodHJ1ZSk7CiAgICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVHYW1l
cGFkKHRydWUpOwogICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlU2hhZG93RE9NKHRydWUp
OworICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlQ3VzdG9tRE9NRWxlbWVudHModHJ1ZSk7
CiAgICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVTdHlsZVNjb3BlZCh0cnVlKTsKICAgICBX
ZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZVNjcmlwdGVkU3BlZWNoKHRydWUpOwogICAgIFdlYlJ1
bnRpbWVGZWF0dXJlczo6ZW5hYmxlUmVxdWVzdEF1dG9jb21wbGV0ZSh0cnVlKTsKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1iYXNpYy5o
dG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLWJhc2lj
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNTM2YjU5ZDJiZWRhNTQ5NjUxYjUzZTVkYTAyMzA2NDhlZjY0MTZm
OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVu
dC1yZWdpc3Rlci1iYXNpYy5odG1sCkBAIC0wLDAgKzEsNjEgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJjb250YWluZXIiPjwv
ZGl2PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0aW5nIGRvY3VtZW50LnJlZ2lzdGVyKCkg
YmFzaWMgYmVoYXZpb3JzLiIpOworCitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1
bm5lci5kdW1wQXNUZXh0KCk7CisKKy8vIFhYWDogVGVzdCBiYWQgaW52b2NhdGlvbnMuICh3cm9u
ZyBuYW1lLCBkdXBsaWNhdGlvbiwgZXRjLikKKwordmFyIGZvb0NvbnN0cnVjdG9yID0gZG9jdW1l
bnQud2Via2l0UmVnaXN0ZXIoIngtZm9vIik7CitzaG91bGRCZSgidHlwZW9mIGZvb0NvbnN0cnVj
dG9yIiwgIidmdW5jdGlvbiciKTsKK3Nob3VsZEJlKCJmb29Db25zdHJ1Y3Rvci5wcm90b3R5cGUi
LCAiSFRNTFNwYW5FbGVtZW50LnByb3RvdHlwZSIpOworCisvLyBDYWxsIGFzIGZ1bmN0aW9uCitz
aG91bGRUaHJvdygiZm9vQ29uc3RydWN0b3IoKSIsICInVHlwZUVycm9yOiBET00gb2JqZWN0IGNv
bnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4nIikKKworLy8gQ29uc3Ry
dWN0b3IgaW5pdGlhdGVkIGluc3RhbnRpYXRpb24KK3ZhciBjcmVhdGVkRm9vID0gbmV3IGZvb0Nv
bnN0cnVjdG9yKCk7CisKKy8vIEpTIGJ1aWx0LWluIHByb3BlcnRpZXMKK3Nob3VsZEJlKCJjcmVh
dGVkRm9vLl9fcHJvdG9fXyIsICJmb29Db25zdHJ1Y3Rvci5wcm90b3R5cGUiKTsKK3Nob3VsZEJl
KCJjcmVhdGVkRm9vLmNvbnN0cnVjdG9yIiwgImZvb0NvbnN0cnVjdG9yIik7CisKKy8vIE5hdGl2
ZSBnZXR0ZXIKK3Nob3VsZEJlKCJjcmVhdGVkRm9vLnRhZ05hbWUiLCAiJ1gtRk9PJyIpOworCisv
LyBOYXRpdmUgc2V0dGVyCitjcmVhdGVkRm9vLmlubmVySFRNTCA9ICJIZWxsbyI7CitzaG91bGRC
ZSgiY3JlYXRlZEZvby50ZXh0Q29udGVudCIsICInSGVsbG8nIik7CisKKy8vIE5hdGl2ZSBtZXRo
b2QKK3ZhciBjaGlsZERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworY3JlYXRl
ZEZvby5hcHBlbmRDaGlsZChjaGlsZERpdik7CitzaG91bGRCZSgiY3JlYXRlZEZvby5sYXN0Q2hp
bGQiLCAiY2hpbGREaXYiKTsKKworLy8gUGFyc2VyIGluaXRpYXRlZCBpbnN0YW50aWF0aW9uCit2
YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRhaW5lciIpOworY29u
dGFpbmVyLmlubmVySFRNTCA9ICI8eC1mb28+PC94LWZvbz4iOworcGFyc2VkRm9vID0gY29udGFp
bmVyLmZpcnN0Q2hpbGQ7CisKK3Nob3VsZEJlKCJwYXJzZWRGb28uX19wcm90b19fIiwgImZvb0Nv
bnN0cnVjdG9yLnByb3RvdHlwZSIpOworc2hvdWxkQmUoInBhcnNlZEZvby50YWdOYW1lIiwgIidY
LUZPTyciKTsKKworLy8gRW5zdXJpbmcgdGhlIHdyYXBwZXIgaXMgcmV0YWluZWQKK3BhcnNlZEZv
by5zb21lUHJvcGVydHkgPSAiaGVsbG8iOworc2hvdWxkQmUoInBhcnNlZEZvby5zb21lUHJvcGVy
dHkiLCAiY29udGFpbmVyLmZpcnN0Q2hpbGQuc29tZVByb3BlcnR5Iik7CisKKy8vIEhhdmluZyBh
bm90ZWhyIGNvbnN0cnVjdG9yCit2YXIgYmFyQ29uc3RydWN0b3IgPSBkb2N1bWVudC53ZWJraXRS
ZWdpc3RlcigieC1iYXIiKTsKK3ZhciBjcmVhdGVkQmFyID0gbmV3IGJhckNvbnN0cnVjdG9yKCk7
CitzaG91bGRCZSgiY3JlYXRlZEJhci50YWdOYW1lIiwgIidYLUJBUiciKTsKKworPC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175327</attachid>
            <date>2012-11-20 19:49:26 -0800</date>
            <delta_ts>2012-11-20 23:48:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100229-20121121124714.patch</filename>
            <type>text/plain</type>
            <size>68988</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1MzQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjc4YjBmMjI1ZWJkNjFi
MGU5NDBiZTNkZDQ1ZDAyZTllYjI1YmRiNi4uNGQ1ZDQ1ZGEyMmVjMmU4ZTNjYzY5MzZhOTU1OTI2
ZWRjNjM5Y2IzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1NiBAQAorMjAxMi0xMS0xOSAgSGFq
aW1lIE1vcnJpdGEgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgW0N1c3RvbSBFbGVt
ZW50c10gSW1wbGVtZW50IGJhcmUtYm9uZSBkb2N1bWVudC5yZWdpc3RlcigpCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDAyMjkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNoYW5nZSBpbXBsZW1l
bnRzIHByZWZpeGVkIHZlcnNpb24gb2YgZG9jdW1lbnQucmVnaXRlcigpLCB3aXRoIG1pbmltYWwg
ZmVhdHVyZSBzdXBwb3J0LgorICAgICAgICAtIFRoZSBmZWF0dXJlIGlzIGd1YXJkZWQgYnkgRU5B
QkxFKENVU1RPTV9ET01fRUxNRU5UUykgYW5kIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmN1c3Rv
bURPTUVsZW1lbnRzRW5hYmxlZCgpLgorICAgICAgICAtIFRoaXMgYmFyZS1ib25lIHZlcnNpb24g
b25seSByZWNvZ25pemVzICJuYW1lIiBwYXJhbXRlciBhbmQgaWdub3JlcyBhbnkgb3B0aW9uYWwg
cGFyYW1ldGVycy4KKyAgICAgICAgLSBDdXJyZW50bHkgb25seSBWOCBpcyBzdXBwb3J0ZWQuIEpT
QyBiaW5kaW5nIG5lZWRzIGl0cyBvd24gYmluZGluZyBpbXBsZW1lbnRhdGlvbi4KKworICAgICAg
ICA9IE1ham9yIG5ldyBjbGFzc2VzIHVuZGVyIGRvbS86CisKKyAgICAgICAgVGhlIGRvbSBtb2R1
bGUgaGFzIHR3byBuZXcgY2xhc3NlczoKKyAgICAgICAgLSBDdXN0b21FbGVtZW50Q29uc3RydWN0
b3I6IEEgcmV0dXJuIHZhbHVlIG9mIGRvY3VtZW50LnJlZ2lzdGVyKCkKKyAgICAgICAgICB3aGlj
aCBob2xkcyB0aGUgY3VzdG9tIGVsZW1lbnQgZGVmaW5pdGlvbi4KKyAgICAgICAgLSBDdXN0b21F
bGVtZW50UmVnaXN0cnk6IEEgY29sbGVjdGlvbiBvZiBDdXN0b21FbGVtZW50Q29uc3RydWN0b3Ig
b2JqZWN0cy4KKyAgICAgICAgICBDdXN0b21FbGVtZW50UmVnaXN0cnkgaW5zdGFuY2UgaXMgY3Jl
YXRlZCBwZXIgRG9jdW1lbnQgYW5kIGl0IGlzIG93bmVkIGJ5IHRoZSBEb2N1bWVudC4KKworICAg
ICAgICBDdXN0b21FbGVtZW50Q29uc3RydWN0b3Iga25vd3MgdGhlIGRlZmluaXRpb24gb2YgZWFj
aCBjdXN0b20KKyAgICAgICAgZWxlbWVudCwgd2hpY2ggaXMgcmVnaXN0ZXJlZCBieSBkb2N1bWVu
dC5yZWdpc3RlcigpLiBUaGUgbmFtZSBhbmQKKyAgICAgICAgb3RoZXIgb3B0aW9ucyBhcmUgaGVs
ZCBieSB0aGlzIG9iamVjdC4gQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5IG93bnMgYSBzZXQKKyAgICAg
ICAgb2YgdGhlIHJlZ2lzdGVyZWQgY29uc3RydWN0b3JzLiBUaGUgcmVnaXN0cnkgZ3VhcmFudGVl
cyBpbnZhcmlhbnRzCisgICAgICAgIGxpa2UgdW5pcXVlbmVzcyBvZiB0aGUgZWxlbWVudCBuYW1l
cy4KKworICAgICAgICA9IENoYW5nZSBvbiBtYWtlX25hbWVzLnBsCisKKyAgICAgICAgVGhpcyBj
aGFnbmUgdHdlYWtzIG1ha2VfbmFtZXMucGwgKG9yIGdlbmVyYXRlZCBIVE1MRWxlbWVudEZhY3Rv
cnkpCisgICAgICAgIHRvIGhvb2sgdGhlIGNyZWF0aW9ucyBvZiB1bmtub3duIGVsZW1lbnRzLiBT
b21lIG9mIGVsZW1lbnQgbmFtZXMKKyAgICAgICAgd2hpY2ggY29tZSB0byB0aGUgZmFsbGJhY2sg
cGF0aCBjYW4gYmUgb25lIG9mIHJlZ2lzdGVyZWQgY3VzdG9tCisgICAgICAgIGVsZW1lbnQuCisK
KyAgICAgICAgPSBbVjhXcmFwQXNGdW5jdGlvbl0gZXh0ZW5kZWQgYXR0cmlidXRlOgorCisgICAg
ICAgIFRoZSBkb2N1bWVudC5yZWdpc3RlcigpIEFQSSByZXR1cm5zIGEgY29uc3RydWN0b3IKKyAg
ICAgICAgZnVuY3Rpb24uIEhvd2V2ZXIsIHRoZSBWOCBiaW5kaW5nIGN1cnJlbnRseSBkb2Vzbid0
IHN1cHBvcnQgaXQuIFRvCisgICAgICAgIG1ha2UgaXQgcG9zc2libGUsIHRoaXMgY2hhbmdlIGlu
dHJvZHVjZXMgIlY4V3JhcEFzRnVuY3Rpb24iCisgICAgICAgIGV4dGVuZGVkIGF0dHJpYnV0ZSBm
b3IgYW5ub3RhdGluZyBDdXN0b21FbGVtZW50Q29uc3RydWN0b3IgSURMCisgICAgICAgIGludGVy
ZmFjZS4KKworICAgICAgICBWOFdyYXBBc0Z1bmN0aW9uIHdyYXBzIHRoZSBhbm5vdGF0ZWQgaW50
ZXJmYWNlIHdpdGggYSBKYXZhU2NpcnB0CisgICAgICAgIGZ1bmN0aW9uLCB3aGljaCBjYWxscyB0
aGUgb3JpZ2luYWwgb2JqZWN0IGFzIGEgZnVuY3Rpb24gb3IgYQorICAgICAgICBjb25zdHJ1Y3Rv
ciBkZXBlbmRzIG9uIHRoZSBjYWxsIHNpdGUuCisKKyAgICAgICAgV2l0aCB0aGlzIHdyYXBwZXIg
ZnVuY3Rpb24sIHRoZXJlIGlzIHR3byBsZXZlbCBvZiBpbmRpcmVjdGlvbgorICAgICAgICBiZXR3
ZWVuIG5hdGl2ZSBDKysgb2JqZWN0IGFuZCBhdXRob3ItdmlzaWJsZSBKUyBmdW5jdGlvbjoKKwor
ICAgICAgICBbSlMgQWRhcHRvciBGdWN0aW9uXSA8LShoaWRkZW4gcHJvcGVydHkpLT4gW0pTIFdy
YXBwZXIgT2JqZWN0XSAtKGludGVybmFsIGZpZWxkKS0+IFtDKysgTmF0aWUgb2JqZWN0XQorCisg
ICAgICAgIFRoZSBjb2RlIGdlbmVyYXRvciBnZW5lcmF0ZXMgdGhlIGJpbmRpbmcgY29kZSB3aGlj
aCBkZWFscyB3aXRoCisgICAgICAgIHRoaXMgaW5kaXJlY3Rpb24uICBBbHNvLCB0aGVyZSBpcyBh
IHNldCBvZiBoZWxwZXIgZnVuY3Rpb25zIGluCisgICAgICAgIFY4QWRhcHRvckZ1bmN0aW9uLmgv
Y3BwIHdoaWNoIHRha2UgY2FyZSBvZiB0aGlzIGluZGlyZWN0aW9uLgorICAgICAgICBWOERPTVdy
YXBwZXIuY3BwL2ggd29ya3MgYXMgYSBmYWNhZGUgZm9yIHRoZXNlIEFQSXMgYW5kIHVzZWQgZnJv
bQorICAgICAgICB0aGUgZ2VuZXJhdGVkIGNvZGUuCisKKyAgICAgICAgPSBWOEhUTUxDdXN0b21F
bGVtZW50CisKKyAgICAgICAgVW5saWtlIGJ1aWx0LWluIEhUTUwgZWxlbWVudHMsIGFueSBjdXN0
b20gZWxlbWVudCBoYXMgbm8KKyAgICAgICAgY29ycmVzcG9uZGluZyBDKysgY2xhc3MuIEluc3Rl
YWQsIGRvY3VtZW50LnJlZ2lzdGVyKCkgc2hvdWxkIGFsbG93CisgICAgICAgIHBhc3NpbmcgYSBw
cm90b3R5cGUgb2JqZWN0IGZvciB0aGUgZWxlbWVudHMgYmVpbmcgcmVnaXN0ZXJlZC4KKworICAg
ICAgICBBbHRob3VnaCB0aGlzIGZpcnN0IHZlcnNpb24gZG9lc24ndCBzdXBwb3J0IHRoZSBvcHRp
bmFsIHByb3RvdHlwZQorICAgICAgICBwYXJhbWV0ZXIgeWV0LCBWOEhUTUxDdXN0b21FbGVtZW50
IGhlbHBlciBjbGFzcyBpcyBhIHBsdW1iaW5nIGZvcgorICAgICAgICBpdC4gVGhpcyBjbGFzcyBl
bmNhcHN1bGF0ZXMgSlMgd3JhcHBlciBvYmplY3QgY3JlYXRpb24gZm9yIGN1c3RvbQorICAgICAg
ICBlbGVtZW1lbnQgaW5zdGFuY2VzLiBGb3IgZXhhbXBsZSwgaXQgdGFrZXMgY2FyZSBvZiBwcm90
b3R5cGUgY2hhaW4KKyAgICAgICAgc2V0dXAuIEFzIHdlIHN1cHBvcnQgdGhlICJwcm90b3R5cGUi
IG9wdGlvbmFsIHBhcmFtZXRlciBmb3IKKyAgICAgICAgZG9jdW1lbnQucmVnaXN0ZXIoKSBpbiBm
dXJ0dXJlIGNoYW5nZXMsIHRoaXMgcGx1bWJpbmcgd2lsbCBiZQorICAgICAgICBleHRlbmRlZC4K
KworICAgICAgICBUZXN0OiBmYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMu
aHRtbAorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGJpbmRpbmdzL2dlbmVy
aWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaDoKKyAgICAgICAg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6Y3VzdG9tRE9NRWxlbWVudHNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNldEN1c3RvbURPTUVsZW1lbnRzKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKEdlbmVyYXRl
SGVhZGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0Ogor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRIZWxwZXJz
OjpkZWZhdWx0UHJvdG90eXBlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9DdXN0b21FbGVtZW50
SGVscGVycy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ3VzdG9tRWxl
bWVudEhlbHBlcnMpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4QWRhcHRv
ckZ1bmN0aW9uOjpnZXRUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOEFkYXB0b3JGdW5j
dGlvbjo6Y29uZmlndXJlVGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhBZGFwdG9yRnVu
Y3Rpb246Omludm9jYXRpb25DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOEFkYXB0b3JG
dW5jdGlvbjo6d3JhcCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhBZGFwdG9yRnVuY3Rpb24u
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFY4QWRhcHRvckZ1bmN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlY4QWRhcHRvckZ1bmN0aW9uOjp1bndyYXApOgorICAgICAg
ICAoV2ViQ29yZTo6VjhBZGFwdG9yRnVuY3Rpb246OmdldCk6CisgICAgICAgICogYmluZGluZ3Mv
djgvVjhET01XcmFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6dG9G
dW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3Jh
cHBlcjo6ZnJvbUZ1bmN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERPTVdyYXBwZXIu
aDoKKyAgICAgICAgKFY4RE9NV3JhcHBlcik6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhIVE1M
Q3VzdG9tRWxlbWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpWOEhUTUxDdXN0b21FbGVtZW50OjpjcmVhdGVXcmFwcGVyKToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChWOEhUTUxDdXN0b21FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlY4
SFRNTEN1c3RvbUVsZW1lbnQ6OnRvVjgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEN1c3RvbUVs
ZW1lbnQ6OnRvVjgpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUVsZW1l
bnRDb25zdHJ1Y3RvckN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpWOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y2FsbEFzRnVuY3Rpb25D
YWxsYmFjayk6CisgICAgICAgICogZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50
Q29uc3RydWN0b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50Q29u
c3RydWN0b3I6OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpD
dXN0b21FbGVtZW50Q29uc3RydWN0b3I6On5DdXN0b21FbGVtZW50Q29uc3RydWN0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjp3aWxsRGVzdHJveURvY3Vt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRl
RWxlbWVudCk6CisgICAgICAgICogZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6ZG9jdW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjp0YWdOYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6bmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6OnByb3RvdHlwZSk6CisgICAg
ICAgICogZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5pZGw6IEFkZGVkLgorICAgICAgICAq
IGRvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpDdXN0b21FbGVtZW50
UmVnaXN0cnkpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5Ojp+Q3Vz
dG9tRWxlbWVudFJlZ2lzdHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWdp
c3RyeTo6Y29uc3RydWN0b3JPZik6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVn
aXN0cnk6OnJlZ2lzdGVyRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50
UmVnaXN0cnk6OmZpbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5
OjpjcmVhdGVFbGVtZW50KToKKyAgICAgICAgKiBkb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Lmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDdXN0b21FbGVtZW50UmVnaXN0
cnkpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWdpc3RlckVsZW1lbnQpOgorICAgICAgICAqIGRv
bS9Eb2N1bWVudC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEb2N1bWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVnaXN0cnkpOgorICAgICAgICAqIGRvbS9Eb2N1
bWVudC5pZGw6CisgICAgICAgICogZG9tL21ha2VfbmFtZXMucGw6CisgICAgICAgIChwcmludFdy
YXBwZXJGYWN0b3J5Q3BwRmlsZSk6CisKIDIwMTItMTEtMjAgIEtlbnRhcm8gSGFyYSAgPGhhcmFr
ZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJlbW92ZSAkb3V0cHV0RGlyIGFuZCAkb3V0cHV0
SGVhZGVyc0RpciBmcm9tIGdsb2JhbCB2YXJpYWJsZXMgb2YgY29kZSBnZW5lcmF0b3JzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDdkODNlZWQwZWJkOTY2YWNlMDkwYTczYTBiZThmMmY0
Y2JhMTIzMTQuLjI1Zjk2YmJlMTg2MDY4YTM2ZDRkZWE2MTIwNjc4NDIxNzkxNGFjMWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTItMTEtMTkgIEhhamlt
ZSBNb3JyaXRhICA8bW9ycml0YUBnb29nbGUuY29tPgorCisgICAgICAgIFtDdXN0b20gRWxlbWVu
dHNdIEltcGxlbWVudCBiYXJlLWJvbmUgZG9jdW1lbnQucmVnaXN0ZXIoKQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwMjI5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgZW5hYmxlQ3VzdG9tRE9N
RWxlbWVudHMgZmxhZy4KKworICAgICAgICAqIGZlYXR1cmVzLmd5cGk6CisgICAgICAgICogcHVi
bGljL1dlYlJ1bnRpbWVGZWF0dXJlcy5oOgorICAgICAgICAoV2ViUnVudGltZUZlYXR1cmVzKToK
KyAgICAgICAgKiBzcmMvV2ViUnVudGltZUZlYXR1cmVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVDdXN0b21ET01FbGVtZW50cyk6CisgICAgICAgIChX
ZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJSdW50aW1lRmVhdHVyZXM6OmlzQ3VzdG9tRE9N
RWxlbWVudHNFbmFibGVkKToKKwogMjAxMi0xMS0yMCAgUmFjaGVsIEJsdW0gIDxncm9ieUBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBOZWVkIHNwZWxsY2hlY2sgc3VnZ2VzdGlv
bnMgZXZlbiBpZiBjb250aW51b3VzIGNoZWNrIGlzIG9mZi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBh
OGIzZmVkYjY0MjI1ZWZhNDQ5YThhMjA3ODFmNDgzODk3NmI0NWI4Li43MjJhODNhNzJiOGFiYzli
MzFhNTI2ZjZiZmJiN2ZhYjNjZmVhZjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC05ODIsNiArOTgy
LDcgQEAKICAgICAgICAgICAgICdkb20vQ2xpcGJvYXJkLmlkbCcsCiAgICAgICAgICAgICAnZG9t
L0NvbW1lbnQuaWRsJywKICAgICAgICAgICAgICdkb20vQ29tcG9zaXRpb25FdmVudC5pZGwnLAor
ICAgICAgICAgICAgJ2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaWRsJywKICAgICAgICAg
ICAgICdkb20vQ3VzdG9tRXZlbnQuaWRsJywKICAgICAgICAgICAgICdkb20vRE9NQ29yZUV4Y2Vw
dGlvbi5pZGwnLAogICAgICAgICAgICAgJ2RvbS9ET01FcnJvci5pZGwnLApAQCAtMjIwOSw2ICsy
MjEwLDggQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9BcnJheVZhbHVlLmgnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L0JpbmRpbmdTdGF0ZS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L0JpbmRpbmdTdGF0ZS5oJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9DdXN0b21F
bGVtZW50SGVscGVycy5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0N1c3RvbUVsZW1l
bnRIZWxwZXJzLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5jcHAn
LAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5oJywKICAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9ET01SZXF1ZXN0U3RhdGUuaCcsCkBAIC0yMjc3LDYgKzIyODAsOCBAQAog
ICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1NoYXJlZFBlcnNpc3RlbnQuaCcsCiAgICAgICAgICAg
ICAnYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuY3BwJywKICAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5oJywKKyAgICAgICAgICAgICdi
aW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdz
L3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4Qmlu
ZGluZy5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oJywKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9WOEJpbmRpbmdNYWNyb3MuaCcsCkBAIC0yMjg0LDYgKzIyODks
NyBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4Q2FsbGJhY2suaCcsCiAgICAgICAgICAg
ICAnYmluZGluZ3MvdjgvVjhDb2xsZWN0aW9uLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mv
djgvVjhDb2xsZWN0aW9uLmgnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4Q29udGV4dERp
c3Bvc2FibGUuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhEZXBlbmRlbnRSZXRhaW5l
ZC5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOERPTUNvbmZpZ3VyYXRpb24uY3BwJywK
ICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOERPTUNvbmZpZ3VyYXRpb24uaCcsCkBAIC0yMjk5
LDYgKzIzMDUsOCBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmgn
LAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4R0NGb3JDb250ZXh0RGlzcG9zZS5jcHAnLAog
ICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4R0NGb3JDb250ZXh0RGlzcG9zZS5oJywKKyAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50LmNwcCcsCisgICAgICAgICAg
ICAnYmluZGluZ3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVudC5oJywKICAgICAgICAgICAgICdiaW5k
aW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdz
L3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4
TGF6eUV2ZW50TGlzdGVuZXIuY3BwJywKQEAgLTIzNTUsNiArMjM2Myw3IEBACiAgICAgICAgICAg
ICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2xpcGJvYXJkQ3VzdG9tLmNwcCcsCiAgICAgICAgICAg
ICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q29uc29sZUN1c3RvbS5jcHAnLAogICAgICAgICAgICAg
J2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENvb3JkaW5hdGVzQ3VzdG9tLmNwcCcsCisgICAgICAgICAg
ICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yQ3VzdG9tLmNw
cCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tRXZlbnRDdXN0b20u
Y3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxTdGF0ZW1l
bnRFcnJvckNhbGxiYWNrLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcCcsCkBAIC0zNzk0LDYgKzM4MDMsMTAgQEAKICAgICAg
ICAgICAgICdkb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwJywKICAgICAgICAgICAgICdk
b20vQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIuY3BwJywKICAgICAgICAgICAgICdkb20vQ3Jv
c3NUaHJlYWRUYXNrLmgnLAorICAgICAgICAgICAgJ2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0
b3IuY3BwJywKKyAgICAgICAgICAgICdkb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmgnLAor
ICAgICAgICAgICAgJ2RvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuY3BwJywKKyAgICAgICAgICAg
ICdkb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmgnLAogICAgICAgICAgICAgJ2RvbS9DdXN0b21F
dmVudC5jcHAnLAogICAgICAgICAgICAgJ2RvbS9DdXN0b21FdmVudC5oJywKICAgICAgICAgICAg
ICdkb20vRE9NQWxsSW5PbmUuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwCmluZGV4IGVhMzY3OWUy
ZDAzNzBiNTAyMTM0Njk4ZDRmYzJhY2FmMzA1Yjg3OGIuLjlkOWY5MjMxMGMwODA5Y2RiODBjYmNh
NTRiN2UxZmY2MjljNzFjYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dl
bmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNwcApAQCAtMTg4LDYgKzE4OCwx
MCBAQCBib29sIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmlzU2hhZG93RE9NRW5hYmxlZCA9IGZh
bHNlOwogYm9vbCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjppc0F1dGhvclNoYWRvd0RPTUZvckFu
eUVsZW1lbnRFbmFibGVkID0gZmFsc2U7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDVVNUT01fRE9N
X0VMRU1FTlRTKQorYm9vbCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjppc0N1c3RvbURPTUVsZW1l
bnRzRW5hYmxlZCA9IGZhbHNlOworI2VuZGlmCisKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQog
Ym9vbCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjppc1N0eWxlU2NvcGVkRW5hYmxlZCA9IGZhbHNl
OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1
bnRpbWVFbmFibGVkRmVhdHVyZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMv
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5oCmluZGV4IGJiOTVjZTg0NTZjYjkyM2NiOTAzMDA0YTFm
YWVmNmZlNzk4MzFiNDQuLjhhNjA2YTNkNWNiOGMzZDUyMzM0ZmIyYmIyZDZkYzJiZWE2N2I5NjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJs
ZWRGZWF0dXJlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGlt
ZUVuYWJsZWRGZWF0dXJlcy5oCkBAIC0yMDcsNiArMjA3LDExIEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgdm9pZCBzZXRBdXRob3JTaGFkb3dET01Gb3JBbnlFbGVtZW50RW5hYmxlZChib29sIGlzRW5h
YmxlZCkgeyBpc0F1dGhvclNoYWRvd0RPTUZvckFueUVsZW1lbnRFbmFibGVkID0gaXNFbmFibGVk
OyB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorICAgIHN0YXRp
YyBib29sIGN1c3RvbURPTUVsZW1lbnRzRW5hYmxlZCgpIHsgcmV0dXJuIGlzQ3VzdG9tRE9NRWxl
bWVudHNFbmFibGVkOyB9CisgICAgc3RhdGljIHZvaWQgc2V0Q3VzdG9tRE9NRWxlbWVudHMoYm9v
bCBpc0VuYWJsZWQpIHsgaXNDdXN0b21ET01FbGVtZW50c0VuYWJsZWQgPSBpc0VuYWJsZWQ7IH0K
KyNlbmRpZgorCiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKICAgICBzdGF0aWMgYm9vbCBzdHls
ZVNjb3BlZEVuYWJsZWQoKSB7IHJldHVybiBpc1N0eWxlU2NvcGVkRW5hYmxlZDsgfQogICAgIHN0
YXRpYyB2b2lkIHNldFN0eWxlU2NvcGVkRW5hYmxlZChib29sIGlzRW5hYmxlZCkgeyBpc1N0eWxl
U2NvcGVkRW5hYmxlZCA9IGlzRW5hYmxlZDsgfQpAQCAtMzIxLDYgKzMyNiwxMCBAQCBwcml2YXRl
OgogICAgIHN0YXRpYyBib29sIGlzQXV0aG9yU2hhZG93RE9NRm9yQW55RWxlbWVudEVuYWJsZWQ7
CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorICAgIHN0YXRpYyBi
b29sIGlzQ3VzdG9tRE9NRWxlbWVudHNFbmFibGVkOworI2VuZGlmCisKICNpZiBFTkFCTEUoU1RZ
TEVfU0NPUEVEKQogICAgIHN0YXRpYyBib29sIGlzU3R5bGVTY29wZWRFbmFibGVkOwogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JWOC5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4
LnBtCmluZGV4IDUwZDUxNDI3ZTlmMTMyNjc2ZmRkOTNhOGFiY2FkZTM1YjYyNjVlYTQuLjQzMDAz
MDFiNTI5ZTA1OGY1MjU3YjQ0M2EyYzRiOGU4MzQ5MzFlYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCkBAIC0zNTQsMTMgKzM1
NCwyMCBAQCBFTkQKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgImZhbHNlO1xuIik7CiAg
ICAgfQogCisgICAgbXkgJGZyb21GdW5jdGlvbk9wZW5pbmcgPSAiIjsKKyAgICBteSAkZnJvbUZ1
bmN0aW9uQ2xvc2luZyA9ICIiOworICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiVjhXcmFwQXNGdW5jdGlvbiJ9KSB7CisgICAgICAgICRmcm9tRnVuY3Rpb25PcGVuaW5n
ID0gIlY4RE9NV3JhcHBlcjo6ZnJvbUZ1bmN0aW9uKCI7CisgICAgICAgICRmcm9tRnVuY3Rpb25D
bG9zaW5nID0gIikiOworICAgIH0KKwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsK
ICAgICBzdGF0aWMgYm9vbCBIYXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOwogICAg
IHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0UmF3VGVtcGxh
dGUoKTsKICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdl
dFRlbXBsYXRlKCk7CiAgICAgc3RhdGljICR7bmF0aXZlVHlwZX0qIHRvTmF0aXZlKHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gb2JqZWN0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8JHtuYXRpdmVUeXBlfSo+KG9iamVjdC0+R2V0QWxpZ25lZFBvaW50ZXJGcm9tSW50ZXJu
YWxGaWVsZCh2OERPTVdyYXBwZXJPYmplY3RJbmRleCkpOworICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDwke25hdGl2ZVR5cGV9Kj4oJHtmcm9tRnVuY3Rpb25PcGVuaW5nfW9iamVjdCR7
ZnJvbUZ1bmN0aW9uQ2xvc2luZ30tPkdldEFsaWduZWRQb2ludGVyRnJvbUludGVybmFsRmllbGQo
djhET01XcmFwcGVyT2JqZWN0SW5kZXgpKTsKICAgICB9CiAgICAgc3RhdGljIHZvaWQgZGVyZWZP
YmplY3Qodm9pZCopOwogICAgIHN0YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKQEAgLTUzMCw2
ICs1MzcsOSBAQCBFTkQKIAogICAgICAgICBteSAkZ2V0Q2FjaGVkV3JhcHBlciA9ICRjb2RlR2Vu
ZXJhdG9yLT5Jc1N1YlR5cGUoJGludGVyZmFjZSwgIk5vZGUiKSA/ICJET01EYXRhU3RvcmU6Omdl
dE5vZGUoaW1wbCwgaXNvbGF0ZSkiIDogIkRPTURhdGFTdG9yZTo6Y3VycmVudChpc29sYXRlKS0+
Z2V0KGltcGwpIjsKICAgICAgICAgbXkgJGNyZWF0ZVdyYXBwZXJDYWxsID0gJGN1c3RvbVdyYXAg
PyAiJHt2OEludGVyZmFjZU5hbWV9Ojp3cmFwIiA6ICIke3Y4SW50ZXJmYWNlTmFtZX06OmNyZWF0
ZVdyYXBwZXIiOworICAgICAgICBteSAkcmV0dXJuaW5nV3JhcHBlciA9ICRpbnRlcmZhY2UtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJWOFdyYXBBc0Z1bmN0aW9uIn0gPyAiVjhET01XcmFwcGVyOjp0
b0Z1bmN0aW9uKHdyYXBwZXIpIiA6ICJ3cmFwcGVyIjsKKyAgICAgICAgbXkgJHJldHVybmluZ0Ny
ZWF0ZWRXcmFwcGVyQmVnaW4gPSAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVjhX
cmFwQXNGdW5jdGlvbiJ9ID8gIlY4RE9NV3JhcHBlcjo6dG9GdW5jdGlvbigiIDogIiI7CisgICAg
ICAgIG15ICRyZXR1cm5pbmdDcmVhdGVkV3JhcHBlckVuZCA9ICRpbnRlcmZhY2UtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJWOFdyYXBBc0Z1bmN0aW9uIn0gPyAiLCBpbXBsLT5wcm90b3R5cGUoKS52
OFZhbHVlKCksIGltcGwtPm5hbWUoKSkiIDogIiI7CiAKICAgICAgICAgaWYgKCRjdXN0b21XcmFw
KSB7CiAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CkBAIC01NDMsNyAr
NTUzLDcgQEAgaW5saW5lIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcCgke25hdGl2ZVR5cGV9
KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGMKIHsKICAgICBBU1NFUlQoaW1wbCk7CiAg
ICAgQVNTRVJUKCRnZXRDYWNoZWRXcmFwcGVyLklzRW1wdHkoKSk7Ci0gICAgcmV0dXJuICRjcmVh
dGVXcmFwcGVyQ2FsbChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworICAgIHJldHVy
biAke3JldHVybmluZ0NyZWF0ZWRXcmFwcGVyQmVnaW59JGNyZWF0ZVdyYXBwZXJDYWxsKGltcGws
IGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSkke3JldHVybmluZ0NyZWF0ZWRXcmFwcGVyRW5kfTsK
IH0KIEVORAogICAgICAgICB9CkBAIC01NTYsNyArNTY2LDcgQEAgaW5saW5lIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gdG9WOE9iamVjdCgke25hdGl2ZVR5cGV9KiBpbXBsLCB2ODo6SGFuZGxlPHY4
OjpPYmoKICAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKTsKICAgICB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSAkZ2V0Q2FjaGVkV3JhcHBlcjsKICAgICBpZiAo
IXdyYXBwZXIuSXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAgICAgICAgcmV0
dXJuICRyZXR1cm5pbmdXcmFwcGVyOwogICAgIHJldHVybiB3cmFwKGltcGwsIGNyZWF0aW9uQ29u
dGV4dCwgaXNvbGF0ZSk7CiB9CiAKQEAgLTU2Niw3ICs1NzYsNyBAQCBpbmxpbmUgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHRvVjgoJHtuYXRpdmVUeXBlfSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBjcgogICAgICAgICByZXR1cm4gdjhOdWxsV2l0aENoZWNrKGlzb2xhdGUpOwogICAgIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyID0gJGdldENhY2hlZFdyYXBwZXI7CiAgICAgaWYg
KCF3cmFwcGVyLklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgICAgIHJl
dHVybiAkcmV0dXJuaW5nV3JhcHBlcjsKICAgICByZXR1cm4gd3JhcChpbXBsLCBjcmVhdGlvbkNv
bnRleHQsIGlzb2xhdGUpOwogfQogRU5ECkBAIC01ODMsNyArNTkzLDcgQEAgaW5saW5lIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdCgke25hdGl2ZVR5cGV9KiBpbXBsLCBjb25zdCB2ODo6
QWNjZXNzb3JJbmYKICAgICAvLyB2ODo6QWNjZXNzb3JJbmZvLgogICAgIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gd3JhcHBlciA9IChob2xkZXItPndyYXBwZXIoKSA9PSBpbmZvLkhvbGRlcigpKSA/
IGltcGwtPndyYXBwZXIoKSA6IERPTURhdGFTdG9yZTo6Z2V0Tm9kZShpbXBsLCBpbmZvLkdldElz
b2xhdGUoKSk7CiAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHdy
YXBwZXI7CisgICAgICAgIHJldHVybiAkcmV0dXJuaW5nV3JhcHBlcjsKICAgICByZXR1cm4gd3Jh
cChpbXBsLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiBFTkQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0CmluZGV4
IDcwOTBmNjYzZWEyZThhOTZjMmUzOGU1OThiZjVjYWQxZjdjMmMzMmIuLmQ1YjdhNGU2MzQ2NmJh
M2RiZjIwOGM5ODFjOGM4YzA1ZjE3NWViNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dApAQCAtMTIzLDMgKzEyMyw0IEBAIFY4Tm9X
cmFwcGVyQ2FjaGUKIFY4TWVhc3VyZUFzPSoKIFY4UmVhZE9ubHkKIFY4VW5mb3JnZWFibGUKK1Y4
V3JhcEFzRnVuY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0N1
c3RvbUVsZW1lbnRIZWxwZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0N1c3Rv
bUVsZW1lbnRIZWxwZXJzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YTJmNDhmOTZmNDRmYjM5ZmQ1YTY0N2Zh
ODNjNjExM2NlYzRhMTEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvQ3VzdG9tRWxlbWVudEhlbHBlcnMuY3BwCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudEhlbHBlcnMuaCIKKworI2luY2x1ZGUg
IlY4SFRNTFNwYW5FbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIEVOQUJM
RShDVVNUT01fRE9NX0VMRU1FTlRTKQorCitjb25zdCBTY3JpcHRWYWx1ZSYgQ3VzdG9tRWxlbWVu
dEhlbHBlcnM6OmRlZmF1bHRQcm90b3R5cGUoKQoreworICAgIC8vIEZJWE1FOiBTaG91bGQgYmUg
c3RvcmVkIGluIHBlci1pc29sYXRlIHN0b3JlCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTY3Jp
cHRWYWx1ZSwgdmFsdWUsICh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+OjpOZXcoVjhIVE1MU3Bh
bkVsZW1lbnQ6OkdldFRlbXBsYXRlKCktPkdldEZ1bmN0aW9uKCktPkdldCh2ODo6U3RyaW5nOjpO
ZXdTeW1ib2woInByb3RvdHlwZSIpKSkpKTsKKyAgICByZXR1cm4gdmFsdWU7Cit9OworI2VuZGlm
IC8vIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9DdXN0b21FbGVtZW50SGVs
cGVycy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvQ3VzdG9tRWxlbWVudEhlbHBlcnMu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5lMjBlOGVjNmE1ZWE4OGZmZjRkNjEyYWNmZDgxMDk1M2ZmMDE5NTU1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvQ3VzdG9tRWxlbWVu
dEhlbHBlcnMuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDdXN0b21FbGVtZW50SGVscGVyc19o
CisjZGVmaW5lIEN1c3RvbUVsZW1lbnRIZWxwZXJzX2gKKworI2luY2x1ZGUgIlNjcmlwdFZhbHVl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIEVOQUJMRShDVVNUT01fRE9NX0VMRU1F
TlRTKQorCitjbGFzcyBDdXN0b21FbGVtZW50SGVscGVycyB7CitwdWJsaWM6CisgICAgc3RhdGlj
IGNvbnN0IFNjcmlwdFZhbHVlJiBkZWZhdWx0UHJvdG90eXBlKCk7Cit9OworCisjZW5kaWYgLy8g
RU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEN1c3RvbUVsZW1lbnRIZWxwZXJzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMjkzOGEzNTI2ZmMy
YmI0MTZhOGZmMTczYWM0ZmZlOGM2MGQzYWE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhBZGFwdG9yRnVuY3Rpb24uY3BwCkBAIC0wLDAgKzEsNzQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVjhBZGFwdG9yRnVuY3Rpb24uaCIKKworI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhBZGFwdG9yRnVuY3Rpb246OmdldFRlbXBsYXRl
KCkKK3sKKyAgICAvLyBGSVhNRTogU2hvdWxkIGJlIHN0b3JlZCBpbiBwZXItaXNvbGF0ZSBkYXRh
IHN0b3JlCisgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0
ZW1wbCA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3KHY4OjpGdW5j
dGlvblRlbXBsYXRlOjpOZXcoKSk7CisgICAgcmV0dXJuIGNvbmZpZ3VyZVRlbXBsYXRlKHRlbXBs
KTsKK30KKwordjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4QWRhcHRvckZ1
bmN0aW9uOjpjb25maWd1cmVUZW1wbGF0ZSh2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1w
bGF0ZT4gZGVzYykKK3sKKyAgICBkZXNjLT5TZXRDYWxsSGFuZGxlcigmVjhBZGFwdG9yRnVuY3Rp
b246Omludm9jYXRpb25DYWxsYmFjayk7CisgICAgcmV0dXJuIGRlc2M7Cit9CisKK3Y4OjpIYW5k
bGU8djg6OlZhbHVlPiBWOEFkYXB0b3JGdW5jdGlvbjo6aW52b2NhdGlvbkNhbGxiYWNrKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFw
cGVkID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzLkNhbGxlZSgpLT5HZXRIaWRk
ZW5WYWx1ZShWOEhpZGRlblByb3BlcnR5TmFtZTo6ZGV0YWlsKCkpKTsKKyAgICAvLyBGSVhNRTog
VGhpcyBjYW4gYmUgZmFzdGVyIGlmIHdlIGNhbiBhY2Nlc3MgdW5kZXJseWluZyBuYXRpdmUgY2Fs
bGJhY2sgZGlyZWN0bHkuCisgICAgVmVjdG9yPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+IGFyZ0Fy
cmF5KGFyZ3MuTGVuZ3RoKCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5MZW5ndGgo
KTsgKytpKQorICAgICAgICBhcmdBcnJheS5hcHBlbmQoYXJnc1tpXSk7CisgICAgaWYgKGFyZ3Mu
SXNDb25zdHJ1Y3RDYWxsKCkpCisgICAgICAgIHJldHVybiB3cmFwcGVkLT5DYWxsQXNDb25zdHJ1
Y3RvcihhcmdBcnJheS5zaXplKCksIGFyZ0FycmF5LmRhdGEoKSk7CisgICAgcmV0dXJuIHdyYXBw
ZWQtPkNhbGxBc0Z1bmN0aW9uKGFyZ3MuVGhpcygpLCBhcmdBcnJheS5zaXplKCksIGFyZ0FycmF5
LmRhdGEoKSk7Cit9CisKK3Y4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBWOEFkYXB0b3JGdW5jdGlv
bjo6d3JhcCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCwgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHByb3RvdHlwZSwgQXRvbWljU3RyaW5nIG5hbWUpCit7CisgICAgdjg6OkhhbmRsZTx2ODo6
RnVuY3Rpb24+IGFkYXB0b3IgPSB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj46OkNhc3QoZ2V0VGVt
cGxhdGUoKS0+R2V0RnVuY3Rpb24oKSk7CisgICAgaWYgKCFwcm90b3R5cGUuSXNFbXB0eSgpICYm
IHByb3RvdHlwZS0+SXNPYmplY3QoKSkKKyAgICAgICAgYWRhcHRvci0+U2V0KHY4OjpTdHJpbmc6
Ok5ld1N5bWJvbCgicHJvdG90eXBlIiksIHByb3RvdHlwZSwgdjg6OlJlYWRPbmx5KTsKKyAgICBh
ZGFwdG9yLT5TZXROYW1lKHY4OjpTdHJpbmc6Ok5ldyhuYW1lLmNoYXJhY3RlcnMoKSwgbmFtZS5s
ZW5ndGgoKSkpOworICAgIGFkYXB0b3ItPlNldEhpZGRlblZhbHVlKFY4SGlkZGVuUHJvcGVydHlO
YW1lOjpkZXRhaWwoKSwgb2JqZWN0KTsKKyAgICBvYmplY3QtPlNldEhpZGRlblZhbHVlKFY4SGlk
ZGVuUHJvcGVydHlOYW1lOjpkZXRhaWwoKSwgYWRhcHRvcik7CisgICAgcmV0dXJuIGFkYXB0b3I7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOEFkYXB0b3JGdW5jdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI3ZjYxNjI1MWFmOGRlYmYzY2M5
ZGZiZmY3NDNjMTc0MDYxZjdjNDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFY4
QWRhcHRvckZ1bmN0aW9uX2gKKyNkZWZpbmUgVjhBZGFwdG9yRnVuY3Rpb25faAorCisjaW5jbHVk
ZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaCIKKyNpbmNs
dWRlIDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgVjhBZGFwdG9yRnVuY3Rpb24geworcHVibGljOgorICAgIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHVud3JhcCh2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4pOwor
ICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gd3JhcCh2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+LCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcHJvdG90eXBlLCBBdG9taWNTdHJpbmcgbmFt
ZSk7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBnZXQodjg6OkhhbmRsZTx2
ODo6T2JqZWN0Pik7CisKKyAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IGdldFRlbXBsYXRlKCk7CisgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiBjb25maWd1cmVUZW1wbGF0ZSh2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4pOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaW52b2NhdGlv
bkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmKTsKK307CisKK2lubGluZSB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IFY4QWRhcHRvckZ1bmN0aW9uOjp1bndyYXAodjg6OkhhbmRsZTx2ODo6RnVu
Y3Rpb24+IGZ1bmN0aW9uKQoreworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVkID0g
ZnVuY3Rpb24tPkdldEhpZGRlblZhbHVlKFY4SGlkZGVuUHJvcGVydHlOYW1lOjpkZXRhaWwoKSk7
CisgICAgQVNTRVJUKCF3cmFwcGVkLklzRW1wdHkoKSk7CisgICAgQVNTRVJUKHdyYXBwZWQtPklz
T2JqZWN0KCkpOworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHdyYXBw
ZWQpOworfQorCitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IFY4QWRhcHRvckZ1bmN0
aW9uOjpnZXQodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QpCit7CisgICAgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGFkYXB0b3JGdW5jdGlvbiA9IG9iamVjdC0+R2V0SGlkZGVuVmFsdWUoVjhI
aWRkZW5Qcm9wZXJ0eU5hbWU6OmRldGFpbCgpKTsKKyAgICBBU1NFUlQoIWFkYXB0b3JGdW5jdGlv
bi5Jc0VtcHR5KCkpOworICAgIEFTU0VSVChhZGFwdG9yRnVuY3Rpb24tPklzRnVuY3Rpb24oKSk7
CisgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPjo6Q2FzdChhZGFwdG9yRnVuY3Rp
b24pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBWOEFkYXB0b3JG
dW5jdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdy
YXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcApp
bmRleCBmNmVmYzg4MTdiM2Y2NDVkZTk5NzI5NWI1NTUzYjhlMTY4OWU4NDkyLi5mMWQ3ZDZmYTU2
OGZjZWZlNmQzYTcwN2VmYTYzMmQ5YTk1NmNjMjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJGcmFt
ZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKICNpbmNsdWRl
ICJWOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIlY4QWRhcHRvckZ1bmN0aW9u
LmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhDb2xsZWN0aW9uLmgiCiAj
aW5jbHVkZSAiVjhFdmVudExpc3RlbmVyLmgiCkBAIC0yMTAsNCArMjExLDIxIEBAIFBhc3NSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4gVjhET01XcmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IHZhCiAjZW5kaWYKIH0KIAordjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IFY4
RE9NV3JhcHBlcjo6dG9GdW5jdGlvbih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0KQorewor
ICAgIHJldHVybiBWOEFkYXB0b3JGdW5jdGlvbjo6Z2V0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46
OkNhc3Qob2JqZWN0KSk7Cit9CisKK3Y4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBWOERPTVdyYXBw
ZXI6OnRvRnVuY3Rpb24odjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QsIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBwcm90b3R5cGUsIEF0b21pY1N0cmluZyBuYW1lKQoreworICAgIHJldHVybiBW
OEFkYXB0b3JGdW5jdGlvbjo6d3JhcChvYmplY3QsIHByb3RvdHlwZSwgbmFtZSk7Cit9CisKK3Y4
OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhET01XcmFwcGVyOjpmcm9tRnVuY3Rpb24odjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBvYmplY3QpCit7CisgICAgaWYgKCFvYmplY3QtPklzRnVuY3Rpb24oKSkK
KyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICByZXR1cm4gVjhBZGFwdG9yRnVuY3Rpb246OnVu
d3JhcCh2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj46OkNhc3Qob2JqZWN0KSk7Cit9CisKIH0gIC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOERPTVdyYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBl
ci5oCmluZGV4IDFmODA2MmRjNmQ2OTQ5ZjA4NjFhZjM5Yjk2N2IwMGZmZGNmOTA5YjUuLjgwNDA2
NzVhMjExM2UyYTczOTAyNmIwODc5MjIyZmQ1NDdjMTYzZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oCkBAIC0xMTIsNiArMTEyLDEwIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgICAgICBzdGF0aWMgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGluc3RhbnRp
YXRlVjhPYmplY3Qodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIFdyYXBw
ZXJUeXBlSW5mbyosIHZvaWQqKTsKIAorICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6RnVu
Y3Rpb24+IHRvRnVuY3Rpb24odjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKKyAgICAgICAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiB0b0Z1bmN0aW9uKHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4sIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBwcm90b3R5cGUsIEF0b21pY1N0cmluZyBuYW1lKTsK
KyAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZnJvbUZ1bmN0aW9uKHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4pOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgc3RhdGljIHZvaWQg
c2V0V3JhcHBlckNsYXNzKHZvaWQqLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVy
KQogICAgICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhU
TUxDdXN0b21FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SFRNTEN1
c3RvbUVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU3YTQwNjE4MTgyZjQxYWVkYTRhOGQyY2Y1ZmFj
NDlkODYzZGRlZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOEhUTUxDdXN0b21FbGVtZW50LmNwcApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlY4SFRNTEN1c3RvbUVsZW1lbnQuaCIKKworI2luY2x1ZGUgIkN1c3Rv
bUVsZW1lbnRSZWdpc3RyeS5oIgorI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAi
VjhDdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJWOEhUTUxTcGFuRWxlbWVu
dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVN
RU5UUykKKworLy8gRklYTUU6IEVhY2ggY3VzdG9tIGVsZW1lbnRzIHNob3VsZCBoYXZlIGl0cyBv
d24gR2V0VGVtcGxhdGUgbWV0aG9kIHNvIHRoYXQgaXQgY2FuIGRlcml2ZWQgZnJvbSBkaWZmZXJl
bmN0IHN1cGVyIGVsZW1lbnQuCitXcmFwcGVyVHlwZUluZm8gVjhIVE1MQ3VzdG9tRWxlbWVudDo6
aW5mbyA9IHsgJlY4SFRNTFNwYW5FbGVtZW50OjpHZXRUZW1wbGF0ZSwgVjhIVE1MRWxlbWVudDo6
ZGVyZWZPYmplY3QsIDAsIDAsIDAsICZWOEhUTUxTcGFuRWxlbWVudDo6aW5mbywgV3JhcHBlclR5
cGVPYmplY3RQcm90b3R5cGUgfTsKKwordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOEhUTUxDdXN0
b21FbGVtZW50OjpjcmVhdGVXcmFwcGVyKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGltcGwsIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0
ZSkKK3sKKyAgICBDdXN0b21FbGVtZW50Q29uc3RydWN0b3IqIGN0b3IgPSBDdXN0b21FbGVtZW50
UmVnaXN0cnk6OmNvbnN0cnVjdG9yT2YoaW1wbC5nZXQoKSk7CisgICAgaWYgKCFjdG9yKQorICAg
ICAgICByZXR1cm4gdG9WOCh0b0hUTUxVbmtub3duRWxlbWVudChpbXBsLmdldCgpKSwgY3JlYXRp
b25Db250ZXh0LCBpc29sYXRlKTsKKworICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRl
eHQ7CisgICAgaWYgKCFjcmVhdGlvbkNvbnRleHQuSXNFbXB0eSgpICYmIGNyZWF0aW9uQ29udGV4
dC0+Q3JlYXRpb25Db250ZXh0KCkgIT0gdjg6OkNvbnRleHQ6OkdldEN1cnJlbnQoKSkgeworICAg
ICAgICAvLyBGb3IgcGVyZm9ybWFuY2UsIHdlIGVudGVyIHRoZSBjb250ZXh0IG9ubHkgaWYgdGhl
IGN1cnJlbnRseSBydW5uaW5nIGNvbnRleHQKKyAgICAgICAgLy8gaXMgZGlmZmVyZW50IGZyb20g
dGhlIGNvbnRleHQgdGhhdCB3ZSBhcmUgYWJvdXQgdG8gZW50ZXIuCisgICAgICAgIGNvbnRleHQg
PSB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcoY3JlYXRpb25Db250ZXh0LT5DcmVhdGlvbkNv
bnRleHQoKSk7CisgICAgICAgIEFTU0VSVCghY29udGV4dC5Jc0VtcHR5KCkpOworICAgICAgICBj
b250ZXh0LT5FbnRlcigpOworICAgIH0KKworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3Jh
cHBlciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdChjcmVhdGlvbkNvbnRleHQs
ICZpbmZvLCBpbXBsLmdldCgpKTsKKworICAgIGlmICghY29udGV4dC5Jc0VtcHR5KCkpCisgICAg
ICAgIGNvbnRleHQtPkV4aXQoKTsKKworICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIHdyYXBwZXI7CisKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgYmUgbmVl
ZGVkIG9uY2UgZWFjaCBjdXN0b20gZWxlbWVudCBoYXMgaXRzIG93biBGdW5jdGlvblRlbXBsYXRl
CisgICAgd3JhcHBlci0+U2V0KHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCgiY29uc3RydWN0b3IiKSwg
V2ViQ29yZTo6dG9WOChjdG9yLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpKTsKKyAgICAvKnY4
OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXJIYW5kbGUgPSAqL1Y4RE9NV3JhcHBlcjo6
Y3JlYXRlRE9NV3JhcHBlcihpbXBsLCAmaW5mbywgd3JhcHBlciwgaXNvbGF0ZSk7CisKKyAgICBy
ZXR1cm4gd3JhcHBlcjsKK30KKworI2VuZGlmIC8vIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRT
KQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOEhUTUxDdXN0b21FbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmM4NGU5NjU3NjEyNDk2YTdj
OTA2NjAxNzc2MjdhOTc3NWE2MWQzYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4SFRNTEN1c3RvbUVsZW1lbnQuaApAQCAtMCwwICsxLDc4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBWOEhUTUxDdXN0b21FbGVtZW50X2gKKyNkZWZpbmUgVjhIVE1MQ3VzdG9tRWxlbWVudF9oCisK
KyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKKyNpbmNs
dWRlICJWOEhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhIVE1MVW5rbm93bkVsZW1lbnQuaCIK
KyNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgSFRNTEVsZW1lbnQ7CisKKyNpZiBFTkFCTEUoQ1VTVE9NX0RP
TV9FTEVNRU5UUykKKworY2xhc3MgVjhIVE1MQ3VzdG9tRWxlbWVudCB7CitwdWJsaWM6CisgICAg
c3RhdGljIFdyYXBwZXJUeXBlSW5mbyBpbmZvOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IHRvVjgoSFRNTEVsZW1lbnQqLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9u
Q29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqID0gMCk7Cisg
ICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRlV3JhcHBlcihQYXNzUmVmUHRy
PEhUTUxFbGVtZW50Piwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Piwgdjg6Oklzb2xhdGUqKTsKK307
CisKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4SFRNTEN1c3RvbUVsZW1lbnQ6OnRv
VjgoSFRNTEVsZW1lbnQqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250
ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IHdyYXBwZXIgPSBET01EYXRhU3RvcmU6OmdldE5vZGUoaW1wbCwgaXNvbGF0ZSk7CisgICAgaWYg
KCF3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgcmV0dXJu
IFY4SFRNTEN1c3RvbUVsZW1lbnQ6OmNyZWF0ZVdyYXBwZXIoaW1wbCwgY3JlYXRpb25Db250ZXh0
LCBpc29sYXRlKTsKK30KKworI2Vsc2UgLy8gRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCisK
K2NsYXNzIFY4SFRNTEN1c3RvbUVsZW1lbnQgeworcHVibGljOgorICAgIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IHdyYXAoSFRNTEVsZW1lbnQqLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUq
ID0gMCk7Cit9OworCitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBIVE1MQ3VzdG9tRWxl
bWVudDo6dG9WOChIVE1MRWxlbWVudCogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVh
dGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQoreworICAgIHJldHVybiB0b1Y4KHRv
SFRNTFVua25vd25FbGVtZW50KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworfQor
CisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFY4SFRNTEN1c3RvbUVsZW1lbnRfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tRWxlbWVudENvbnN0cnVj
dG9yQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3Rv
bUVsZW1lbnRDb25zdHJ1Y3RvckN1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODJkODhjOWM2OTUxZGRh
NjE1MmE2MzljMTM1OTJmNzcwZDNmMmY1MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvckN1c3RvbS5j
cHAKQEAgLTAsMCArMSw1NSBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqIAorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
KiBtZXQ6CisqIAorKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisqIGRpc3RyaWJ1dGlvbi4KKyogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKiAKKyog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmgiCisK
KyNpbmNsdWRlICJDdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJWOEJpbmRp
bmcuaCIKKyNpbmNsdWRlICJWOEhUTUxDdXN0b21FbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9y
OjpjYWxsQXNGdW5jdGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7Cisg
ICAgSU5DX1NUQVRTKCJET00uVjhDdXN0b21FbGVtZW50Q29uc3RydWN0b3IuQ29uc3RydWN0b3Ii
KTsKKyAgICBpZiAoIWFyZ3MuSXNDb25zdHJ1Y3RDYWxsKCkpCisgICAgICAgIHJldHVybiB0aHJv
d1R5cGVFcnJvcigiRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEg
ZnVuY3Rpb24uIik7CisgICAgaWYgKENvbnN0cnVjdG9yTW9kZTo6Y3VycmVudCgpID09IENvbnN0
cnVjdG9yTW9kZTo6V3JhcEV4aXN0aW5nT2JqZWN0KQorICAgICAgICByZXR1cm4gYXJncy5Ib2xk
ZXIoKTsKKworICAgIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciogaW1wbCA9IHRvTmF0aXZlKGFy
Z3MuSG9sZGVyKCkpOworICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudCA9IGltcGwtPmNy
ZWF0ZUVsZW1lbnQoKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybiB2OFVuZGVm
aW5lZCgpOworICAgIHJldHVybiBWOEhUTUxDdXN0b21FbGVtZW50Ojp0b1Y4KGVsZW1lbnQuZ2V0
KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjliYWM4YjA1MDg3NDM0
YjgzZGFhYzdjNDMzMzA0NzI4NzUxYTRkZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmNwcApAQCAtMCwwICsxLDc2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oIgor
CisjaWYgRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCisKKyNpbmNsdWRlICJDdXN0b21FbGVt
ZW50SGVscGVycy5oIgorI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRSZWdpc3RyeS5oIgorI2luY2x1
ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1Bhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiBDdXN0b21FbGVtZW50
Q29uc3RydWN0b3I6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDdXN0b21FbGVtZW50Q29u
c3RydWN0b3IoZG9jdW1lbnQsIHRhZ05hbWUpKTsKK30KKworQ3VzdG9tRWxlbWVudENvbnN0cnVj
dG9yOjpDdXN0b21FbGVtZW50Q29uc3RydWN0b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lKQorICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKKyAgICAs
IG1fdGFnTmFtZSh0YWdOYW1lKQorICAgICwgbV9uYW1lKCJIVE1MQ3VzdG9tRWxlbWVudCIpCisg
ICAgLCBtX3Byb3RvdHlwZShDdXN0b21FbGVtZW50SGVscGVyczo6ZGVmYXVsdFByb3RvdHlwZSgp
KQoreworfQorCitDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6On5DdXN0b21FbGVtZW50Q29uc3Ry
dWN0b3IoKQoreworfQorCit2b2lkIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6d2lsbERlc3Ry
b3lEb2N1bWVudCgpCit7CisgICAgbV9kb2N1bWVudCA9IDA7Cit9CisKK1Bhc3NSZWZQdHI8SFRN
TEVsZW1lbnQ+IEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlRWxlbWVudCgpIGNvbnN0
Cit7CisgICAgaWYgKCFtX2RvY3VtZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4g
SFRNTEVsZW1lbnQ6OmNyZWF0ZShtX3RhZ05hbWUsIG1fZG9jdW1lbnQpOworfQorCit9CisKKyNl
bmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YzA0MTlmMWNhYTIyM2Nj
NzlhZTE2NjQ4NDdjYjk2NjVlYWRjNDc1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcl9oCisjZGVmaW5lIEN1c3RvbUVsZW1lbnRDb25zdHJ1
Y3Rvcl9oCisKKyNpZiBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKKworI2luY2x1ZGUgIlF1
YWxpZmllZE5hbWUuaCIKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEN1c3RvbUVsZW1lbnREZWZpbml0aW9uOworY2xhc3MgRGlj
dGlvbmFyeTsKK2NsYXNzIERvY3VtZW50OworY2xhc3MgSFRNTEVsZW1lbnQ7CisKK2NsYXNzIEN1
c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciA6IHB1YmxpYyBSZWZDb3VudGVkPEN1c3RvbUVsZW1lbnRD
b25zdHJ1Y3Rvcj4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEN1c3RvbUVsZW1l
bnRDb25zdHJ1Y3Rvcj4gY3JlYXRlKERvY3VtZW50KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwor
CisgICAgZXhwbGljaXQgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKERvY3VtZW50KiwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYpOworICAgIHZpcnR1YWwgfkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcigp
OworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudDsg
fQorICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUoKSBjb25zdCB7IHJldHVybiBtX3Rh
Z05hbWU7IH0KKyAgICBBdG9taWNTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsg
fQorICAgIGNvbnN0IFNjcmlwdFZhbHVlJiBwcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBtX3By
b3RvdHlwZTsgfQorCisgICAgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gY3JlYXRlRWxlbWVudCgp
IGNvbnN0OworICAgIHZvaWQgd2lsbERlc3Ryb3lEb2N1bWVudCgpOworICAgIAorcHJpdmF0ZToK
KyAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKKyAgICBRdWFsaWZpZWROYW1lIG1fdGFnTmFtZTsK
KyAgICBBdG9taWNTdHJpbmcgbV9uYW1lOworICAgIFNjcmlwdFZhbHVlIG1fcHJvdG90eXBlOwor
fTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCisKKyNlbmRp
ZiAvLyBDdXN0b21FbGVtZW50Q29uc3RydWN0b3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jOGExYTliNzFkODA5Zjk0
NzllODNlMDA3N2QxZWNlYTYwMGFkZGI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5pZGwKQEAgLTAsMCArMSwzMSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKK1sKKyAgICBDb25kaXRpb25hbD1DVVNUT01fRE9NX0VMRU1FTlRTLAorICAgIFY4
RW5hYmxlZEF0UnVudGltZT1jdXN0b21ET01FbGVtZW50cywKKyAgICBWOFdyYXBBc0Z1bmN0aW9u
LAorICAgIEN1c3RvbUNhbGwKK10gaW50ZXJmYWNlIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciB7
Cit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3Ry
eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5kMTU4ZWU4OGUwNTdiOWUyOTc2MTk0YjBhNmRmMzVlYTIzYTVjMzY5Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5jcHAK
QEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwor
ICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJD
dXN0b21FbGVtZW50UmVnaXN0cnkuaCIKKworI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRDb25zdHJ1
Y3Rvci5oIgorI2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgor
I2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVk
ZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgorCisjaWYgRU5BQkxFKENVU1RPTV9ET01fRUxF
TUVOVFMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpD
dXN0b21FbGVtZW50UmVnaXN0cnkoRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogbV9kb2N1bWVu
dChkb2N1bWVudCkKK3sKK30KKworQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Ojp+Q3VzdG9tRWxlbWVu
dFJlZ2lzdHJ5KCkKK3sKKyAgICBmb3IgKENvbnN0cnVjdG9yTWFwOjppdGVyYXRvciBpID0gbV9j
b25zdHJ1Y3RvcnMuYmVnaW4oKTsgaSAhPSBtX2NvbnN0cnVjdG9ycy5lbmQoKTsgKytpKQorICAg
ICAgICBpLT52YWx1ZS0+d2lsbERlc3Ryb3lEb2N1bWVudCgpOworfQorCitDdXN0b21FbGVtZW50
Q29uc3RydWN0b3IqIEN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6Y29uc3RydWN0b3JPZihIVE1MRWxl
bWVudCogZWxlbWVudCkKK3sKKyAgICBDdXN0b21FbGVtZW50UmVnaXN0cnkqIHNlbGYgPSBlbGVt
ZW50LT5kb2N1bWVudCgpLT5yZWdpc3RyeSgpOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgcmV0dXJuIHNlbGYtPmZpbmQoZWxlbWVudC0+dGFnUU5hbWUoKSk7Cit9CisK
K1Bhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiBDdXN0b21FbGVtZW50UmVnaXN0
cnk6OnJlZ2lzdGVyRWxlbWVudChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IERpY3Rp
b25hcnkmIG9wdGlvbnMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFF1YWxpZmllZE5hbWUg
bmV3TmFtZShudWxsQXRvbSwgbmFtZS5sb3dlcigpLCBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNl
VVJJKTsKKyAgICBpZiAoIW5ld05hbWUubG9jYWxOYW1lKCkuc3RhcnRzV2l0aCgieC0iKSkgewor
ICAgICAgICBlYyA9IElOVkFMSURfQ0hBUkFDVEVSX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorICAgICAgICAKKyAgICBpZiAoZmluZChuZXdOYW1lKSkgeworICAgICAgICBlYyA9IElO
VkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8
Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiBmcmVzaCA9IEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rv
cjo6Y3JlYXRlKG1fZG9jdW1lbnQsIG5ld05hbWUpOworICAgIG1fY29uc3RydWN0b3JzLmFkZChm
cmVzaC0+dGFnTmFtZSgpLmltcGwoKSwgZnJlc2gpOworICAgIHJldHVybiBmcmVzaDsKK30KKwor
Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKiBDdXN0b21FbGVtZW50UmVnaXN0cnk6OmZpbmQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKK3sKKyAgICBDb25zdHJ1Y3Rvck1hcDo6Y29u
c3RfaXRlcmF0b3IgZm91bmQgPSBtX2NvbnN0cnVjdG9ycy5maW5kKG5hbWUuaW1wbCgpKTsKKyAg
ICByZXR1cm4gKGZvdW5kICE9IG1fY29uc3RydWN0b3JzLmVuZCgpKSA/IGZvdW5kLT52YWx1ZS5n
ZXQoKSA6IDA7Cit9CisKK1Bhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IEN1c3RvbUVsZW1lbnRSZWdp
c3RyeTo6Y3JlYXRlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAorewor
ICAgIGlmIChDdXN0b21FbGVtZW50Q29uc3RydWN0b3IqIGZvdW5kID0gZmluZChuYW1lKSkKKyAg
ICAgICAgcmV0dXJuIGZvdW5kLT5jcmVhdGVFbGVtZW50KCk7CisgICAgcmV0dXJuIDA7Cit9CisK
K30KKworI2VuZGlmIC8vIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5oIGIvU291cmNlL1dlYkNv
cmUvZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE4ZDYwNzJlYzhjZDZm
YjRmMDY0MWFiZjQyZTA2NDU0NTcyMWE5ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAg
ICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5X2gKKyNkZWZpbmUgQ3VzdG9tRWxlbWVudFJl
Z2lzdHJ5X2gKKworI2lmIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorCisjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKKyNpbmNsdWRlICJT
dXBwbGVtZW50YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDdXN0b21FbGVtZW50
Q29uc3RydWN0b3I7CitjbGFzcyBEaWN0aW9uYXJ5OworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBI
VE1MRWxlbWVudDsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CitjbGFzcyBRdWFsaWZp
ZWROYW1lOworCitjbGFzcyBDdXN0b21FbGVtZW50UmVnaXN0cnkgOiBwdWJsaWMgUmVmQ291bnRl
ZDxDdXN0b21FbGVtZW50UmVnaXN0cnk+IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBDdXN0b21F
bGVtZW50UmVnaXN0cnkoRG9jdW1lbnQqKTsKKyAgICB+Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5KCk7
CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IHdlYmtp
dFJlZ2lzdGVyKERvY3VtZW50KiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25D
b2RlJik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiB3
ZWJraXRSZWdpc3RlcihEb2N1bWVudCosIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3Qg
RGljdGlvbmFyeSYgb3B0aW9ucywgRXhjZXB0aW9uQ29kZSYpOworCisgICAgUGFzc1JlZlB0cjxD
dXN0b21FbGVtZW50Q29uc3RydWN0b3I+IHJlZ2lzdGVyRWxlbWVudChjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWUsIGNvbnN0IERpY3Rpb25hcnkmIG9wdGlvbnMsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICBDdXN0b21FbGVtZW50Q29uc3RydWN0b3IqIGZpbmQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNv
bnN0OworICAgIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYpIGNvbnN0OworCisgICAgc3RhdGljIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rv
ciogY29uc3RydWN0b3JPZihIVE1MRWxlbWVudCopOworCitwcml2YXRlOgorICAgIHR5cGVkZWYg
SGFzaE1hcDxRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lSW1wbCosIFJlZlB0cjxDdXN0b21F
bGVtZW50Q29uc3RydWN0b3I+ID5Db25zdHJ1Y3Rvck1hcDsKKworICAgIERvY3VtZW50KiBtX2Rv
Y3VtZW50OworICAgIENvbnN0cnVjdG9yTWFwIG1fY29uc3RydWN0b3JzOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMp
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDQ1MGEyZjhkODVhOTA4NjUyNjU4
ZDQ4Y2NlNWNmMGI3NjYwNzU3OTIuLjYyOWIwODllNDEwOGY3N2FmODRlZjhiN2E0MDQ2MTYxMWJm
ZjEzMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNDYsMTEgKzQ2LDE0IEBACiAjaW5j
bHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCiAjaW5jbHVkZSAiQ29udGV4dEZlYXR1cmVz
LmgiCiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudENvbnN0
cnVjdG9yLmgiCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAi
RE9NSW1wbGVtZW50YXRpb24uaCIKICNpbmNsdWRlICJET01OYW1lZEZsb3dDb2xsZWN0aW9uLmgi
CiAjaW5jbHVkZSAiRE9NU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5j
bHVkZSAiRGF0ZUNvbXBvbmVudHMuaCIKKyNpbmNsdWRlICJEaWN0aW9uYXJ5LmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnRFdmVudFF1ZXVlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgog
I2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCkBAIC04NjgsNiArODcxLDIwIEBAIFBhc3NSZWZQ
dHI8RWxlbWVudD4gRG9jdW1lbnQ6OmNyZWF0ZUVsZW1lbnQoY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lLCBFeGNlcHRpb25DCiAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgbmFtZSwgbnVsbEF0b20pLCBmYWxzZSk7CiB9CiAKKyNpZiBFTkFCTEUoQ1VTVE9N
X0RPTV9FTEVNRU5UUykKK1Bhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiBEb2N1
bWVudDo6cmVnaXN0ZXJFbGVtZW50KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgcmV0dXJuIHJlZ2lzdGVyRWxlbWVudChuYW1lLCBEaWN0aW9uYXJ5
KCksIGVjKTsKK30KKworUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IERvY3Vt
ZW50OjpyZWdpc3RlckVsZW1lbnQoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBEaWN0
aW9uYXJ5JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIW1fcmVnaXN0
cnkpCisgICAgICAgIG1fcmVnaXN0cnkgPSBhZG9wdFB0cihuZXcgQ3VzdG9tRWxlbWVudFJlZ2lz
dHJ5KHRoaXMpKTsKKyAgICByZXR1cm4gbV9yZWdpc3RyeS0+cmVnaXN0ZXJFbGVtZW50KG5hbWUs
IG9wdGlvbnMsIGVjKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykK
KwogUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBEb2N1bWVudDo6Y3JlYXRlRG9jdW1lbnRG
cmFnbWVudCgpCiB7CiAgICAgcmV0dXJuIERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZShkb2N1bWVu
dCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggOWI3Yjk3YmQxMjgwODZlNDlmNDgxNmIwZDMy
ZmQ1MWYzMGNjMjdjOS4uNDM1ZGIwNjJmNjZjYzU2OTg3ZDhkZTk2NjhjY2U4MWJmZjk1NzY2MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTY3LDYgKzY3LDggQEAgY2xhc3MgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDsKIGNsYXNzIENoYXJhY3RlckRhdGE7CiBjbGFzcyBDb21tZW50OwogY2xhc3Mg
Q29udGV4dEZlYXR1cmVzOworY2xhc3MgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOworY2xhc3Mg
Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5OwogY2xhc3MgRE9NSW1wbGVtZW50YXRpb247CiBjbGFzcyBE
T01OYW1lZEZsb3dDb2xsZWN0aW9uOwogY2xhc3MgRE9NU2VsZWN0aW9uOwpAQCAtMTE0OCw2ICsx
MTUwLDEzIEBAIHB1YmxpYzoKICAgICBUZXh0QXV0b3NpemVyKiB0ZXh0QXV0b3NpemVyKCkgeyBy
ZXR1cm4gbV90ZXh0QXV0b3NpemVyLmdldCgpOyB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDVVNU
T01fRE9NX0VMRU1FTlRTKQorICAgIFBhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9y
PiByZWdpc3RlckVsZW1lbnQoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IHJlZ2lzdGVyRWxl
bWVudChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IERpY3Rpb25hcnkmIG9wdGlvbnMs
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+IGNyZWF0ZUN1c3RvbUVs
ZW1lbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKTsKKyAgICBDdXN0b21FbGVtZW50UmVn
aXN0cnkqIHJlZ2lzdHJ5KCkgY29uc3QgeyByZXR1cm4gbV9yZWdpc3RyeS5nZXQoKTsgfQorI2Vu
ZGlmCisKICAgICB2b2lkIGFkanVzdEZsb2F0UXVhZHNGb3JTY3JvbGxBbmRBYnNvbHV0ZVpvb21B
bmRGcmFtZVNjYWxlKFZlY3RvcjxGbG9hdFF1YWQ+JiwgUmVuZGVyT2JqZWN0Kik7CiAgICAgdm9p
ZCBhZGp1c3RGbG9hdFJlY3RGb3JTY3JvbGxBbmRBYnNvbHV0ZVpvb21BbmRGcmFtZVNjYWxlKEZs
b2F0UmVjdCYsIFJlbmRlck9iamVjdCopOwogCkBAIC0xNTEzLDYgKzE1MjIsMTAgQEAgcHJpdmF0
ZToKICAgICBPd25QdHI8VGV4dEF1dG9zaXplcj4gbV90ZXh0QXV0b3NpemVyOwogI2VuZGlmCiAK
KyNpZiBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKKyAgICBPd25QdHI8Q3VzdG9tRWxlbWVu
dFJlZ2lzdHJ5PiBtX3JlZ2lzdHJ5OworI2VuZGlmCisKICAgICBib29sIG1fc2NoZWR1bGVkVGFz
a3NBcmVTdXNwZW5kZWQ7CiAgICAgCiAgICAgYm9vbCBtX3Zpc3VhbFVwZGF0ZXNBbGxvd2VkOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmlkbCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5pZGwKaW5kZXggMTBjZmVmYTA3YTE3ZTk4ZGMyYWZmMzMwMzk1OTAx
Nzc0ZTZiZjlkYi4uNzQ5YWE0ZDY3Zjg0Y2M5MjQ3NzE1ZjFiMzYyZTA4ZGE3YTA5MjU5OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmlkbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaWRsCkBAIC0zMzksNiArMzM5LDkgQEAKICAgICBbTm90RW51bWVy
YWJsZSwgQ29uZGl0aW9uYWw9UE9JTlRFUl9MT0NLXSBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBv
bndlYmtpdHBvaW50ZXJsb2NrZXJyb3I7CiAjZW5kaWYKIAorICAgIFtWOEVuYWJsZWRBdFJ1bnRp
bWU9Y3VzdG9tRE9NRWxlbWVudHMsIENvbmRpdGlvbmFsPUNVU1RPTV9ET01fRUxFTUVOVFMsIElt
cGxlbWVudGVkQXM9cmVnaXN0ZXJFbGVtZW50XQorICAgIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rv
ciB3ZWJraXRSZWdpc3RlcihpbiBET01TdHJpbmcgbmFtZSwgaW4gW09wdGlvbmFsXSBEaWN0aW9u
YXJ5IG9wdGlvbnMpIHJhaXNlcyhET01FeGNlcHRpb24pOworCiAjaWYgZGVmaW5lZChFTkFCTEVf
VE9VQ0hfRVZFTlRTKSAmJiBFTkFCTEVfVE9VQ0hfRVZFTlRTCiAgICAgW1JldHVybk5ld09iamVj
dCwgVjhFbmFibGVkQXRSdW50aW1lXSBUb3VjaCBjcmVhdGVUb3VjaChpbiBbT3B0aW9uYWw9RGVm
YXVsdElzVW5kZWZpbmVkXSBET01XaW5kb3cgd2luZG93LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5k
ZWZpbmVkXSBFdmVudFRhcmdldCB0YXJnZXQsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vbWFrZV9uYW1lcy5wbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCmluZGV4
IDcxNWJhNTZlNDcwYWRiYmQxMDIwNjA0ZTJhMGQ2MzA3NTE1NWFlNmUuLjcyODVmYjhkMTVjZTll
YWJkYTFkZTlmMzdiOWM0YzMyNWJmNjQ5ZjggMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9tYWtlX25hbWVzLnBsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCkBA
IC0xMTcyLDggKzExNzIsOCBAQCBFTkQKIDsKICAgICB9IGVsc2lmICgkd3JhcHBlckZhY3RvcnlU
eXBlIGVxICJWOCIpIHsKICAgICAgICAgcHJpbnQgRiA8PEVORAorI2luY2x1ZGUgIlY4SFRNTEN1
c3RvbUVsZW1lbnQuaCIKICNpbmNsdWRlICJWOCRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50
LmgiCi0gICAgICAgIAogI2luY2x1ZGUgPHY4Lmg+CiBFTkQKIDsKQEAgLTEyNzQsNiArMTI3NCwx
MSBAQCBFTkQKICAgICByZXR1cm4gVjhTVkdFbGVtZW50OjpjcmVhdGVXcmFwcGVyKGVsZW1lbnQs
IGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiBFTkQKIDsKKyAgICAgICAgfSBlbHNpZiAoJHBh
cmFtZXRlcnN7bmFtZXNwYWNlfSBlcSAiSFRNTCIpIHsKKyAgICAgICAgICAgIHByaW50IEYgPDxF
TkQKKyAgICByZXR1cm4gVjhIVE1MQ3VzdG9tRWxlbWVudDo6dG9WOChlbGVtZW50LCBjcmVhdGlv
bkNvbnRleHQsIGlzb2xhdGUpOworRU5ECis7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBwcmludCBGIDw8RU5ECiAgICAgcmV0dXJuIHdyYXAodG8kcGFyYW1ldGVyc3tmYWxsYmFja0lu
dGVyZmFjZU5hbWV9KGVsZW1lbnQpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCmluZGV4IDRmNDMxMDZkMzg3NTFkNGY3NTg5ZGQ3MmRi
M2NlMmU0ZjFkNGNhMWYuLjcyNDdmNjRhZTRiMzQ0Y2JmYzBhYmMzMGJiN2U1YzFmNWI1OTNlODIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKQEAgLTUxLDYgKzUxLDcgQEAKICAg
ICAgICdFTkFCTEVfQ1NTX1NIQURFUlM9MScsCiAgICAgICAnRU5BQkxFX0NTU19WQVJJQUJMRVM9
MScsCiAgICAgICAnRU5BQkxFX0NTU19TVElDS1lfUE9TSVRJT049MScsCisgICAgICAnRU5BQkxF
X0NVU1RPTV9ET01fRUxFTUVOVFM9MScsCiAgICAgICAnRU5BQkxFX0NVU1RPTV9TQ0hFTUVfSEFO
RExFUj0wJywKICAgICAgICdFTkFCTEVfREFTSEJPQVJEX1NVUFBPUlQ9MCcsCiAgICAgICAnRU5B
QkxFX0RBVEFfVFJBTlNGRVJfSVRFTVM9MScsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJSdW50aW1lRmVhdHVyZXMuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYlJ1bnRpbWVGZWF0dXJlcy5oCmluZGV4IDJmNmVmMWNlNGVhMDk0ZmQxYmNh
NGYxMjhkYTM0ZTUyYTUwOTc1YWIuLjUxMjQyZDQyMzMwMGUzNTZlODc3OGMyYmE4OGRmODUxMjBi
NzMzOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlJ1bnRp
bWVGZWF0dXJlcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlJ1bnRp
bWVGZWF0dXJlcy5oCkBAIC0xMjcsNiArMTI3LDkgQEAgcHVibGljOgogICAgIFdFQktJVF9FWFBP
UlQgc3RhdGljIHZvaWQgZW5hYmxlU2hhZG93RE9NKGJvb2wpOwogICAgIFdFQktJVF9FWFBPUlQg
c3RhdGljIGJvb2wgaXNTaGFkb3dET01FbmFibGVkKCk7CiAKKyAgICBXRUJLSVRfRVhQT1JUIHN0
YXRpYyB2b2lkIGVuYWJsZUN1c3RvbURPTUVsZW1lbnRzKGJvb2wpOworICAgIFdFQktJVF9FWFBP
UlQgc3RhdGljIGJvb2wgaXNDdXN0b21ET01FbGVtZW50c0VuYWJsZWQoKTsKKwogICAgIFdFQktJ
VF9FWFBPUlQgc3RhdGljIHZvaWQgZW5hYmxlU3R5bGVTY29wZWQoYm9vbCk7CiAgICAgV0VCS0lU
X0VYUE9SVCBzdGF0aWMgYm9vbCBpc1N0eWxlU2NvcGVkRW5hYmxlZCgpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJSdW50aW1lRmVhdHVyZXMuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUnVudGltZUZlYXR1cmVzLmNwcAppbmRleCBhMTk1
ZGUyOTI5MDgwMGMwNTAzZjExOGIwYjM2MzcxZjBiMjg0NmM5Li4xNTMwM2ZjMTM0NDczNGEzNzU5
M2ZlYWRmZjIwZmY5ZDI0NWZkOGU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJSdW50aW1lRmVhdHVyZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlJ1bnRpbWVGZWF0dXJlcy5jcHAKQEAgLTQ2Nyw2ICs0NjcsMjUgQEAgYm9vbCBXZWJS
dW50aW1lRmVhdHVyZXM6OmlzU2hhZG93RE9NRW5hYmxlZCgpCiAjZW5kaWYKIH0KIAordm9pZCBX
ZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZUN1c3RvbURPTUVsZW1lbnRzKGJvb2wgZW5hYmxlKQor
eworI2lmIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorICAgIFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNldEN1c3RvbURPTUVsZW1lbnRzKGVuYWJsZSk7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShlbmFibGUpOworI2VuZGlmCit9CisKK2Jvb2wgV2ViUnVudGltZUZlYXR1cmVzOjppc0N1
c3RvbURPTUVsZW1lbnRzRW5hYmxlZCgpCit7CisjaWYgRU5BQkxFKENVU1RPTV9ET01fRUxFTUVO
VFMpCisgICAgcmV0dXJuIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmN1c3RvbURPTUVsZW1lbnRz
RW5hYmxlZCgpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworCiB2b2lk
IFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlU3R5bGVTY29wZWQoYm9vbCBlbmFibGUpCiB7CiAj
aWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rv
b2xzL0NoYW5nZUxvZwppbmRleCA0MTJjNjZiYTU3NjcwNmI5MjRmOWM0MjE2N2E2N2EzYTRhYzcz
OGY3Li43NmE3NzJiYTY2YjZjZGZkMGY3Mzc0YzVhOTEzZWM4OWM3ZDFlZDY0IDEwMDY0NAotLS0g
YS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTItMTEtMTkgIEhhamltZSBNb3JyaXRhICA8bW9ycml0YUBnb29nbGUuY29tPgorCisgICAg
ICAgIFtDdXN0b20gRWxlbWVudHNdIEltcGxlbWVudCBiYXJlLWJvbmUgZG9jdW1lbnQucmVnaXN0
ZXIoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAw
MjI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
ZWQgZW5hYmxlQ3VzdG9tRE9NRWxlbWVudHMgZmxhZy4KKworICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHA6CisgICAgICAgIChUZXN0U2hlbGw6OlRlc3RTaGVs
bCk6CisKIDIwMTItMTEtMjAgIEppbndvbyBTb25nICA8amlud29vNy5zb25nQHNhbXN1bmcuY29t
PgogCiAgICAgICAgIFtFRkxdW1dLMl0gQWRkIEV3a19XaW5kb3dfRmVhdHVyZXMgQVBJIGFuZCBy
ZWxhdGVkIFVJIGNhbGxiYWNrcwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFNoZWxsLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RT
aGVsbC5jcHAKaW5kZXggNzVmZWMxMzBhMDdjNTZmNzk3YjQzOWVmNGM5ZWRhMmZjZDIwNDkyYy4u
ODI1MGE5MDhlYmU5OWY3NGM3NjQzZWQwNTM0MmMwOTkwOWQ4OTZiZCAxMDA2NDQKLS0tIGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcAorKysgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCkBAIC0xNDUsNiArMTQ1LDcgQEAgVGVz
dFNoZWxsOjpUZXN0U2hlbGwoKQogICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlVmlkZW9U
cmFjayh0cnVlKTsKICAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZUdhbWVwYWQodHJ1ZSk7
CiAgICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVTaGFkb3dET00odHJ1ZSk7CisgICAgV2Vi
UnVudGltZUZlYXR1cmVzOjplbmFibGVDdXN0b21ET01FbGVtZW50cyh0cnVlKTsKICAgICBXZWJS
dW50aW1lRmVhdHVyZXM6OmVuYWJsZVN0eWxlU2NvcGVkKHRydWUpOwogICAgIFdlYlJ1bnRpbWVG
ZWF0dXJlczo6ZW5hYmxlU2NyaXB0ZWRTcGVlY2godHJ1ZSk7CiAgICAgV2ViUnVudGltZUZlYXR1
cmVzOjplbmFibGVSZXF1ZXN0QXV0b2NvbXBsZXRlKHRydWUpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDM5NjNjNjBkMzVi
OTY4YjlmYzc2YzM4MjU3YjUxMTUyOTZlYjgzNmMuLmI4YzhlMzY0MGRhZjJkODRjODI1OGMzMDFi
YWFkOTQ0ODQ3M2NkMjQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMi0xMS0xOSAgSGFqaW1l
IE1vcnJpdGEgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgW0N1c3RvbSBFbGVtZW50
c10gSW1wbGVtZW50IGJhcmUtYm9uZSBkb2N1bWVudC5yZWdpc3RlcigpCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDAyMjkKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZG9tL2N1c3RvbS9kb2N1
bWVudC1yZWdpc3Rlci1iYXNpYy5odG1sOiBBZGRlZC4KKwogMjAxMi0xMS0yMCAgQWRhbSBLbGVp
biAgPGFkYW1rQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbSlNDXSBNdXRhdGlvbk9ic2VydmVy
IHdyYXBwZXIgc2hvdWxkIG5vdCBiZSBjb2xsZWN0ZWQgd2hpbGUgc3RpbGwgb2JzZXJ2aW5nCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXIt
YmFzaWMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rl
ci1iYXNpYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjExZThhZjhmMzk5ZTZiNDdlMzIzZDdhMjcxNzE2ODFl
N2NjMzg0YzEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20v
ZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMuaHRtbApAQCAtMCwwICsxLDg0IEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0iY29udGFp
bmVyIj48L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdGluZyBkb2N1bWVudC5yZWdp
c3RlcigpIGJhc2ljIGJlaGF2aW9ycy4iKTsKKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAg
IHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworZG9jdW1lbnQucmVnaXN0ZXIgPSBkb2N1bWVudC5y
ZWdpc3RlciB8fCBkb2N1bWVudC53ZWJraXRSZWdpc3RlcjsKKworLy8gSW52YWxpZCBuYW1lcwor
c2hvdWxkVGhyb3coImRvY3VtZW50LnJlZ2lzdGVyKCdmb28nKSIsICInRXJyb3I6IEludmFsaWRD
aGFyYWN0ZXJFcnJvcjogRE9NIEV4Y2VwdGlvbiA1JyIpOworc2hvdWxkVGhyb3coImRvY3VtZW50
LnJlZ2lzdGVyKCd5LWZvbycpIiwgIidFcnJvcjogSW52YWxpZENoYXJhY3RlckVycm9yOiBET00g
RXhjZXB0aW9uIDUnIik7CitzaG91bGRUaHJvdygiZG9jdW1lbnQucmVnaXN0ZXIoJ3hmb28nKSIs
ICInRXJyb3I6IEludmFsaWRDaGFyYWN0ZXJFcnJvcjogRE9NIEV4Y2VwdGlvbiA1JyIpOworc2hv
dWxkVGhyb3coImRvY3VtZW50LnJlZ2lzdGVyKCd5LXgtZm9vJykiLCAiJ0Vycm9yOiBJbnZhbGlk
Q2hhcmFjdGVyRXJyb3I6IERPTSBFeGNlcHRpb24gNSciKTsKKwordmFyIGZvb0NvbnN0cnVjdG9y
ID0gZG9jdW1lbnQucmVnaXN0ZXIoIngtZm9vIik7CitzaG91bGRCZSgidHlwZW9mIGZvb0NvbnN0
cnVjdG9yIiwgIidmdW5jdGlvbiciKTsKK3Nob3VsZEJlKCJmb29Db25zdHJ1Y3Rvci5wcm90b3R5
cGUiLCAiSFRNTFNwYW5FbGVtZW50LnByb3RvdHlwZSIpOworCisvLyBOYW1lIGNvbmZsaWN0cwor
c2hvdWxkVGhyb3coImRvY3VtZW50LnJlZ2lzdGVyKCd4LWZvbycpIiwgIidFcnJvcjogSW52YWxp
ZFN0YXRlRXJyb3I6IERPTSBFeGNlcHRpb24gMTEnIik7CitzaG91bGRUaHJvdygiZG9jdW1lbnQu
cmVnaXN0ZXIoJ1gtRk9PJykiLCAiJ0Vycm9yOiBJbnZhbGlkU3RhdGVFcnJvcjogRE9NIEV4Y2Vw
dGlvbiAxMSciKTsKKworLy8gQ2FsbCBhcyBmdW5jdGlvbgorc2hvdWxkVGhyb3coImZvb0NvbnN0
cnVjdG9yKCkiLCAiJ1R5cGVFcnJvcjogRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUg
Y2FsbGVkIGFzIGEgZnVuY3Rpb24uJyIpCisKKy8vIENvbnN0cnVjdG9yIGluaXRpYXRlZCBpbnN0
YW50aWF0aW9uCit2YXIgY3JlYXRlZEZvbyA9IG5ldyBmb29Db25zdHJ1Y3RvcigpOworCisvLyBK
UyBidWlsdC1pbiBwcm9wZXJ0aWVzCitzaG91bGRCZSgiY3JlYXRlZEZvby5fX3Byb3RvX18iLCAi
Zm9vQ29uc3RydWN0b3IucHJvdG90eXBlIik7CitzaG91bGRCZSgiY3JlYXRlZEZvby5jb25zdHJ1
Y3RvciIsICJmb29Db25zdHJ1Y3RvciIpOworCisvLyBOYXRpdmUgZ2V0dGVyCitzaG91bGRCZSgi
Y3JlYXRlZEZvby50YWdOYW1lIiwgIidYLUZPTyciKTsKKworLy8gTmF0aXZlIHNldHRlcgorY3Jl
YXRlZEZvby5pbm5lckhUTUwgPSAiSGVsbG8iOworc2hvdWxkQmUoImNyZWF0ZWRGb28udGV4dENv
bnRlbnQiLCAiJ0hlbGxvJyIpOworCisvLyBOYXRpdmUgbWV0aG9kCit2YXIgY2hpbGREaXYgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKK2NyZWF0ZWRGb28uYXBwZW5kQ2hpbGQoY2hp
bGREaXYpOworc2hvdWxkQmUoImNyZWF0ZWRGb28ubGFzdENoaWxkIiwgImNoaWxkRGl2Iik7CisK
Ky8vIFBhcnNlciBpbml0aWF0ZWQgaW5zdGFudGlhdGlvbgordmFyIGNvbnRhaW5lciA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJjb250YWluZXIiKTsKK2NvbnRhaW5lci5pbm5lckhUTUwgPSAi
PHgtZm9vPjwveC1mb28+IjsKK3BhcnNlZEZvbyA9IGNvbnRhaW5lci5maXJzdENoaWxkOworCitz
aG91bGRCZSgicGFyc2VkRm9vLl9fcHJvdG9fXyIsICJmb29Db25zdHJ1Y3Rvci5wcm90b3R5cGUi
KTsKK3Nob3VsZEJlKCJwYXJzZWRGb28udGFnTmFtZSIsICInWC1GT08nIik7CisKKy8vIEVuc3Vy
aW5nIHRoZSB3cmFwcGVyIGlzIHJldGFpbmVkCitwYXJzZWRGb28uc29tZVByb3BlcnR5ID0gImhl
bGxvIjsKK3Nob3VsZEJlKCJwYXJzZWRGb28uc29tZVByb3BlcnR5IiwgImNvbnRhaW5lci5maXJz
dENoaWxkLnNvbWVQcm9wZXJ0eSIpOworCisvLyBIYXZpbmcgYW5vdGVociBjb25zdHJ1Y3Rvcgor
dmFyIGJhckNvbnN0cnVjdG9yID0gZG9jdW1lbnQucmVnaXN0ZXIoIngtYmFyIik7Cit2YXIgY3Jl
YXRlZEJhciA9IG5ldyBiYXJDb25zdHJ1Y3RvcigpOworc2hvdWxkQmUoImNyZWF0ZWRCYXIudGFn
TmFtZSIsICInWC1CQVInIik7CisKKy8vIFdpdGggaXJyZWd1bGFyIGNhc2VzCit2YXIgY3JlYXRl
ZFVwcGVyQmFyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiWC1CQVIiKTsKK3ZhciBjcmVhdGVk
TWl4ZWRCYXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJYLUJhciIpOworc2hvdWxkQmUoImNy
ZWF0ZWRVcHBlckJhci5jb25zdHJ1Y3RvciIsICJiYXJDb25zdHJ1Y3RvciIpOworc2hvdWxkQmUo
ImNyZWF0ZWRVcHBlckJhci50YWdOYW1lIiwgIidYLUJBUiciKTsKK3Nob3VsZEJlKCJjcmVhdGVk
TWl4ZWRCYXIuY29uc3RydWN0b3IiLCAiYmFyQ29uc3RydWN0b3IiKTsKK3Nob3VsZEJlKCJjcmVh
dGVkTWl4ZWRCYXIudGFnTmFtZSIsICInWC1CQVInIik7CisKK2NvbnRhaW5lci5pbm5lckhUTUwg
PSAiPFgtQkFSPjwvWC1CQVI+PFgtQmFyPjwvWC1CYXI+IjsKK3Nob3VsZEJlKCJjb250YWluZXIu
Zmlyc3RDaGlsZC5jb25zdHJ1Y3RvciIsICJiYXJDb25zdHJ1Y3RvciIpOworc2hvdWxkQmUoImNv
bnRhaW5lci5maXJzdENoaWxkLnRhZ05hbWUiLCAiJ1gtQkFSJyIpOworc2hvdWxkQmUoImNvbnRh
aW5lci5sYXN0Q2hpbGQuY29uc3RydWN0b3IiLCAiYmFyQ29uc3RydWN0b3IiKTsKK3Nob3VsZEJl
KCJjb250YWluZXIubGFzdENoaWxkLnRhZ05hbWUiLCAiJ1gtQkFSJyIpOworCis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175349</attachid>
            <date>2012-11-20 23:48:54 -0800</date>
            <delta_ts>2012-11-21 01:21:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100229-20121121164641.patch</filename>
            <type>text/plain</type>
            <size>71737</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1MzQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjc4YjBmMjI1ZWJkNjFi
MGU5NDBiZTNkZDQ1ZDAyZTllYjI1YmRiNi4uZjkyZjExZmNhM2U3ODQxZjJiMTU3NjA4MjBlNzNk
ZjZhODViODQ4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1NyBAQAorMjAxMi0xMS0xOSAgSGFq
aW1lIE1vcnJpdGEgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgW0N1c3RvbSBFbGVt
ZW50c10gSW1wbGVtZW50IGJhcmUtYm9uZSBkb2N1bWVudC5yZWdpc3RlcigpCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDAyMjkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNoYW5nZSBpbXBsZW1l
bnRzIHByZWZpeGVkIHZlcnNpb24gb2YgZG9jdW1lbnQucmVnaXRlcigpLCB3aXRoIG1pbmltYWwg
ZmVhdHVyZSBzdXBwb3J0LgorICAgICAgICAtIFRoZSBmZWF0dXJlIGlzIGd1YXJkZWQgYnkgRU5B
QkxFKENVU1RPTV9ET01fRUxNRU5UUykgYW5kIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmN1c3Rv
bURPTUVsZW1lbnRzRW5hYmxlZCgpLgorICAgICAgICAtIFRoaXMgYmFyZS1ib25lIHZlcnNpb24g
b25seSByZWNvZ25pemVzICJuYW1lIiBwYXJhbXRlciBhbmQgaWdub3JlcyBhbnkgb3B0aW9uYWwg
cGFyYW1ldGVycy4KKyAgICAgICAgLSBDdXJyZW50bHkgb25seSBWOCBpcyBzdXBwb3J0ZWQuIEpT
QyBiaW5kaW5nIG5lZWRzIGl0cyBvd24gYmluZGluZyBpbXBsZW1lbnRhdGlvbi4KKworICAgICAg
ICA9IE1ham9yIG5ldyBjbGFzc2VzIHVuZGVyIGRvbS86CisKKyAgICAgICAgVGhlIGRvbSBtb2R1
bGUgaGFzIHR3byBuZXcgY2xhc3NlczoKKyAgICAgICAgLSBDdXN0b21FbGVtZW50Q29uc3RydWN0
b3I6IEEgcmV0dXJuIHZhbHVlIG9mIGRvY3VtZW50LnJlZ2lzdGVyKCkKKyAgICAgICAgICB3aGlj
aCBob2xkcyB0aGUgY3VzdG9tIGVsZW1lbnQgZGVmaW5pdGlvbi4KKyAgICAgICAgLSBDdXN0b21F
bGVtZW50UmVnaXN0cnk6IEEgY29sbGVjdGlvbiBvZiBDdXN0b21FbGVtZW50Q29uc3RydWN0b3Ig
b2JqZWN0cy4KKyAgICAgICAgICBDdXN0b21FbGVtZW50UmVnaXN0cnkgaW5zdGFuY2UgaXMgY3Jl
YXRlZCBwZXIgRG9jdW1lbnQgYW5kIGl0IGlzIG93bmVkIGJ5IHRoZSBEb2N1bWVudC4KKworICAg
ICAgICBDdXN0b21FbGVtZW50Q29uc3RydWN0b3Iga25vd3MgdGhlIGRlZmluaXRpb24gb2YgZWFj
aCBjdXN0b20KKyAgICAgICAgZWxlbWVudCwgd2hpY2ggaXMgcmVnaXN0ZXJlZCBieSBkb2N1bWVu
dC5yZWdpc3RlcigpLiBUaGUgbmFtZSBhbmQKKyAgICAgICAgb3RoZXIgb3B0aW9ucyBhcmUgaGVs
ZCBieSB0aGlzIG9iamVjdC4gQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5IG93bnMgYSBzZXQKKyAgICAg
ICAgb2YgdGhlIHJlZ2lzdGVyZWQgY29uc3RydWN0b3JzLiBUaGUgcmVnaXN0cnkgZ3VhcmFudGVl
cyBpbnZhcmlhbnRzCisgICAgICAgIGxpa2UgdW5pcXVlbmVzcyBvZiB0aGUgZWxlbWVudCBuYW1l
cy4KKworICAgICAgICA9IENoYW5nZSBvbiBtYWtlX25hbWVzLnBsCisKKyAgICAgICAgVGhpcyBj
aGFnbmUgdHdlYWtzIG1ha2VfbmFtZXMucGwgKG9yIGdlbmVyYXRlZCBIVE1MRWxlbWVudEZhY3Rv
cnkpCisgICAgICAgIHRvIGhvb2sgdGhlIGNyZWF0aW9ucyBvZiB1bmtub3duIGVsZW1lbnRzLiBT
b21lIG9mIGVsZW1lbnQgbmFtZXMKKyAgICAgICAgd2hpY2ggY29tZSB0byB0aGUgZmFsbGJhY2sg
cGF0aCBjYW4gYmUgb25lIG9mIHJlZ2lzdGVyZWQgY3VzdG9tCisgICAgICAgIGVsZW1lbnQuCisK
KyAgICAgICAgPSBbVjhXcmFwQXNGdW5jdGlvbl0gZXh0ZW5kZWQgYXR0cmlidXRlOgorCisgICAg
ICAgIFRoZSBkb2N1bWVudC5yZWdpc3RlcigpIEFQSSByZXR1cm5zIGEgY29uc3RydWN0b3IKKyAg
ICAgICAgZnVuY3Rpb24uIEhvd2V2ZXIsIHRoZSBWOCBiaW5kaW5nIGN1cnJlbnRseSBkb2Vzbid0
IHN1cHBvcnQgaXQuIFRvCisgICAgICAgIG1ha2UgaXQgcG9zc2libGUsIHRoaXMgY2hhbmdlIGlu
dHJvZHVjZXMgIlY4V3JhcEFzRnVuY3Rpb24iCisgICAgICAgIGV4dGVuZGVkIGF0dHJpYnV0ZSBm
b3IgYW5ub3RhdGluZyBDdXN0b21FbGVtZW50Q29uc3RydWN0b3IgSURMCisgICAgICAgIGludGVy
ZmFjZS4KKworICAgICAgICBWOFdyYXBBc0Z1bmN0aW9uIHdyYXBzIHRoZSBhbm5vdGF0ZWQgaW50
ZXJmYWNlIHdpdGggYSBKYXZhU2NpcnB0CisgICAgICAgIGZ1bmN0aW9uLCB3aGljaCBjYWxscyB0
aGUgb3JpZ2luYWwgb2JqZWN0IGFzIGEgZnVuY3Rpb24gb3IgYQorICAgICAgICBjb25zdHJ1Y3Rv
ciBkZXBlbmRzIG9uIHRoZSBjYWxsIHNpdGUuCisKKyAgICAgICAgV2l0aCB0aGlzIHdyYXBwZXIg
ZnVuY3Rpb24sIHRoZXJlIGlzIHR3byBsZXZlbCBvZiBpbmRpcmVjdGlvbgorICAgICAgICBiZXR3
ZWVuIG5hdGl2ZSBDKysgb2JqZWN0IGFuZCBhdXRob3ItdmlzaWJsZSBKUyBmdW5jdGlvbjoKKwor
ICAgICAgICBbSlMgQWRhcHRvciBGdWN0aW9uXSA8LShoaWRkZW4gcHJvcGVydHkpLT4gW0pTIFdy
YXBwZXIgT2JqZWN0XSAtKGludGVybmFsIGZpZWxkKS0+IFtDKysgTmF0aWUgb2JqZWN0XQorCisg
ICAgICAgIFRoZSBjb2RlIGdlbmVyYXRvciBnZW5lcmF0ZXMgdGhlIGJpbmRpbmcgY29kZSB3aGlj
aCBkZWFscyB3aXRoCisgICAgICAgIHRoaXMgaW5kaXJlY3Rpb24uICBBbHNvLCB0aGVyZSBpcyBh
IHNldCBvZiBoZWxwZXIgZnVuY3Rpb25zIGluCisgICAgICAgIFY4QWRhcHRvckZ1bmN0aW9uLmgv
Y3BwIHdoaWNoIHRha2UgY2FyZSBvZiB0aGlzIGluZGlyZWN0aW9uLgorICAgICAgICBWOERPTVdy
YXBwZXIuY3BwL2ggd29ya3MgYXMgYSBmYWNhZGUgZm9yIHRoZXNlIEFQSXMgYW5kIHVzZWQgZnJv
bQorICAgICAgICB0aGUgZ2VuZXJhdGVkIGNvZGUuCisKKyAgICAgICAgPSBWOEhUTUxDdXN0b21F
bGVtZW50CisKKyAgICAgICAgVW5saWtlIGJ1aWx0LWluIEhUTUwgZWxlbWVudHMsIGFueSBjdXN0
b20gZWxlbWVudCBoYXMgbm8KKyAgICAgICAgY29ycmVzcG9uZGluZyBDKysgY2xhc3MuIEluc3Rl
YWQsIGRvY3VtZW50LnJlZ2lzdGVyKCkgc2hvdWxkIGFsbG93CisgICAgICAgIHBhc3NpbmcgYSBw
cm90b3R5cGUgb2JqZWN0IGZvciB0aGUgZWxlbWVudHMgYmVpbmcgcmVnaXN0ZXJlZC4KKworICAg
ICAgICBBbHRob3VnaCB0aGlzIGZpcnN0IHZlcnNpb24gZG9lc24ndCBzdXBwb3J0IHRoZSBvcHRp
bmFsIHByb3RvdHlwZQorICAgICAgICBwYXJhbWV0ZXIgeWV0LCBWOEhUTUxDdXN0b21FbGVtZW50
IGhlbHBlciBjbGFzcyBpcyBhIHBsdW1iaW5nIGZvcgorICAgICAgICBpdC4gVGhpcyBjbGFzcyBl
bmNhcHN1bGF0ZXMgSlMgd3JhcHBlciBvYmplY3QgY3JlYXRpb24gZm9yIGN1c3RvbQorICAgICAg
ICBlbGVtZW1lbnQgaW5zdGFuY2VzLiBGb3IgZXhhbXBsZSwgaXQgdGFrZXMgY2FyZSBvZiBwcm90
b3R5cGUgY2hhaW4KKyAgICAgICAgc2V0dXAuIEFzIHdlIHN1cHBvcnQgdGhlICJwcm90b3R5cGUi
IG9wdGlvbmFsIHBhcmFtZXRlciBmb3IKKyAgICAgICAgZG9jdW1lbnQucmVnaXN0ZXIoKSBpbiBm
dXJ0dXJlIGNoYW5nZXMsIHRoaXMgcGx1bWJpbmcgd2lsbCBiZQorICAgICAgICBleHRlbmRlZC4K
KworICAgICAgICBUZXN0OiBmYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMu
aHRtbAorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBXZWJDb3Jl
Lmd5cGk6CisgICAgICAgICogYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL2dlbmVyaWMvUnVu
dGltZUVuYWJsZWRGZWF0dXJlcy5oOgorICAgICAgICAoUnVudGltZUVuYWJsZWRGZWF0dXJlcyk6
CisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpjdXN0b21ET01FbGVt
ZW50c0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2V0Q3VzdG9tRE9NRWxlbWVudHMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvclY4LnBtOgorICAgICAgICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQ6CisgICAgICAgICogYmluZGluZ3MvdjgvQ3Vz
dG9tRWxlbWVudEhlbHBlcnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudEhlbHBlcnM6OmRlZmF1bHRQcm90b3R5cGUpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChDdXN0b21FbGVtZW50SGVscGVycyk6CisgICAgICAgICog
YmluZGluZ3MvdjgvVjhBZGFwdG9yRnVuY3Rpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6VjhBZGFwdG9yRnVuY3Rpb246OmdldFRlbXBsYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlY4QWRhcHRvckZ1bmN0aW9uOjpjb25maWd1cmVUZW1wbGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpWOEFkYXB0b3JGdW5jdGlvbjo6aW52b2NhdGlvbkNhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OlY4QWRhcHRvckZ1bmN0aW9uOjp3cmFwKToKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoVjhBZGFwdG9yRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6VjhB
ZGFwdG9yRnVuY3Rpb246OnVud3JhcCk6CisgICAgICAgIChXZWJDb3JlOjpWOEFkYXB0b3JGdW5j
dGlvbjo6Z2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjp0b0Z1bmN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpmcm9tRnVuY3Rpb24pOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oOgorICAgICAgICAoVjhET01XcmFwcGVy
KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4SFRNTEN1c3RvbUVsZW1l
bnQ6OmNyZWF0ZVdyYXBwZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4SFRNTEN1c3RvbUVs
ZW1lbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFY4SFRNTEN1c3Rv
bUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6VjhIVE1MQ3VzdG9tRWxlbWVudDo6dG9WOCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ3VzdG9tRWxlbWVudDo6dG9WOCk6CisgICAgICAgICog
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yQ3VzdG9tLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9tRWxl
bWVudENvbnN0cnVjdG9yOjpjYWxsQXNGdW5jdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKiBkb20v
Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Q3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6
fkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVt
ZW50Q29uc3RydWN0b3I6OndpbGxEZXN0cm95RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjpjcmVhdGVFbGVtZW50KToKKyAgICAgICAgKiBkb20v
Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChDdXN0b21FbGVtZW50Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vz
dG9tRWxlbWVudENvbnN0cnVjdG9yOjpkb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0
b21FbGVtZW50Q29uc3RydWN0b3I6OnRhZ05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9t
RWxlbWVudENvbnN0cnVjdG9yOjpuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1l
bnRDb25zdHJ1Y3Rvcjo6cHJvdG90eXBlKToKKyAgICAgICAgKiBkb20vQ3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yLmlkbDogQWRkZWQuCisgICAgICAgICogZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3Ry
eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0
b21FbGVtZW50UmVnaXN0cnk6OkN1c3RvbUVsZW1lbnRSZWdpc3RyeSk6CisgICAgICAgIChXZWJD
b3JlOjpDdXN0b21FbGVtZW50UmVnaXN0cnk6On5DdXN0b21FbGVtZW50UmVnaXN0cnkpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5Ojpjb25zdHJ1Y3Rvck9mKToKKyAg
ICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6cmVnaXN0ZXJFbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6ZmluZCk6CisgICAgICAg
IChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVnaXN0cnk6OmNyZWF0ZUVsZW1lbnQpOgorICAgICAg
ICAqIGRvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKEN1c3RvbUVsZW1lbnRSZWdpc3RyeSk6CisgICAgICAgICogZG9tL0RvY3Vt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OnJlZ2lzdGVyRWxlbWVudCk6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKERvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
OjpyZWdpc3RyeSk6CisgICAgICAgICogZG9tL21ha2VfbmFtZXMucGw6CisgICAgICAgIChwcmlu
dFdyYXBwZXJGYWN0b3J5Q3BwRmlsZSk6CisgICAgICAgICogaHRtbC9Eb2N1bWVudC5pZGw6CisK
IDIwMTItMTEtMjAgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFJlbW92ZSAkb3V0cHV0RGlyIGFuZCAkb3V0cHV0SGVhZGVyc0RpciBmcm9tIGdsb2JhbCB2
YXJpYWJsZXMgb2YgY29kZSBnZW5lcmF0b3JzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDdkODNlZWQwZWJkOTY2YWNlMDkwYTczYTBiZThmMmY0Y2JhMTIzMTQuLjI1Zjk2YmJlMTg2MDY4
YTM2ZDRkZWE2MTIwNjc4NDIxNzkxNGFjMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTItMTEtMTkgIEhhamltZSBNb3JyaXRhICA8bW9ycml0YUBnb29n
bGUuY29tPgorCisgICAgICAgIFtDdXN0b20gRWxlbWVudHNdIEltcGxlbWVudCBiYXJlLWJvbmUg
ZG9jdW1lbnQucmVnaXN0ZXIoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTAwMjI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkZWQgZW5hYmxlQ3VzdG9tRE9NRWxlbWVudHMgZmxhZy4KKworICAgICAg
ICAqIGZlYXR1cmVzLmd5cGk6CisgICAgICAgICogcHVibGljL1dlYlJ1bnRpbWVGZWF0dXJlcy5o
OgorICAgICAgICAoV2ViUnVudGltZUZlYXR1cmVzKToKKyAgICAgICAgKiBzcmMvV2ViUnVudGlt
ZUZlYXR1cmVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUnVudGltZUZlYXR1cmVzOjplbmFi
bGVDdXN0b21ET01FbGVtZW50cyk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJSdW50aW1lRmVhdHVyZXM6OmlzQ3VzdG9tRE9NRWxlbWVudHNFbmFibGVkKToKKwogMjAx
Mi0xMS0yMCAgUmFjaGVsIEJsdW0gIDxncm9ieUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0No
cm9taXVtXSBOZWVkIHNwZWxsY2hlY2sgc3VnZ2VzdGlvbnMgZXZlbiBpZiBjb250aW51b3VzIGNo
ZWNrIGlzIG9mZi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1h
a2UgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IGY4ZDlhZTcyNWRl
Mzk1ZGNmNTU3YzQwY2Y5Mjg0MmQwNjUxNDg2NmQuLjMzYTQ2NTI4YjQ3YjBiOTc2MGE0NzljMzg0
Y2Y2ZGZlYjhiMzNkMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2Vz
Lm1ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMjA1LDYg
KzIwNSw3IEBAIEJJTkRJTkdfSURMUyA9IFwKICAgICAkKFdlYkNvcmUpL2RvbS9DbGlwYm9hcmQu
aWRsIFwKICAgICAkKFdlYkNvcmUpL2RvbS9Db21tZW50LmlkbCBcCiAgICAgJChXZWJDb3JlKS9k
b20vQ29tcG9zaXRpb25FdmVudC5pZGwgXAorICAgICQoV2ViQ29yZSkvZG9tL0N1c3RvbUVsZW1l
bnRDb25zdHJ1Y3Rvci5pZGwgXAogICAgICQoV2ViQ29yZSkvZG9tL0N1c3RvbUV2ZW50LmlkbCBc
CiAgICAgJChXZWJDb3JlKS9kb20vRE9NQ29yZUV4Y2VwdGlvbi5pZGwgXAogICAgICQoV2ViQ29y
ZSkvZG9tL0RPTUVycm9yLmlkbCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYThiM2ZlZGI2NDIyNWVm
YTQ0OWE4YTIwNzgxZjQ4Mzg5NzZiNDViOC4uNzIyYTgzYTcyYjhhYmM5YjMxYTUyNmY2YmZiYjdm
YWIzY2ZlYWYxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtOTgyLDYgKzk4Miw3IEBACiAgICAgICAg
ICAgICAnZG9tL0NsaXBib2FyZC5pZGwnLAogICAgICAgICAgICAgJ2RvbS9Db21tZW50LmlkbCcs
CiAgICAgICAgICAgICAnZG9tL0NvbXBvc2l0aW9uRXZlbnQuaWRsJywKKyAgICAgICAgICAgICdk
b20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmlkbCcsCiAgICAgICAgICAgICAnZG9tL0N1c3Rv
bUV2ZW50LmlkbCcsCiAgICAgICAgICAgICAnZG9tL0RPTUNvcmVFeGNlcHRpb24uaWRsJywKICAg
ICAgICAgICAgICdkb20vRE9NRXJyb3IuaWRsJywKQEAgLTIyMDksNiArMjIxMCw4IEBACiAgICAg
ICAgICAgICAnYmluZGluZ3MvdjgvQXJyYXlWYWx1ZS5oJywKICAgICAgICAgICAgICdiaW5kaW5n
cy92OC9CaW5kaW5nU3RhdGUuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9CaW5kaW5n
U3RhdGUuaCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvQ3VzdG9tRWxlbWVudEhlbHBlcnMu
Y3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9DdXN0b21FbGVtZW50SGVscGVycy5oJywK
ICAgICAgICAgICAgICdiaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuY3BwJywKICAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mvdjgv
RE9NUmVxdWVzdFN0YXRlLmgnLApAQCAtMjI3Nyw2ICsyMjgwLDggQEAKICAgICAgICAgICAgICdi
aW5kaW5ncy92OC9TaGFyZWRQZXJzaXN0ZW50LmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4
L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mvdjgv
VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhB
ZGFwdG9yRnVuY3Rpb24uY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEFkYXB0b3JG
dW5jdGlvbi5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEJpbmRpbmcuY3BwJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9WOEJpbmRpbmcuaCcsCiAgICAgICAgICAgICAnYmluZGlu
Z3MvdjgvVjhCaW5kaW5nTWFjcm9zLmgnLApAQCAtMjI4NCw2ICsyMjg5LDcgQEAKICAgICAgICAg
ICAgICdiaW5kaW5ncy92OC9WOENhbGxiYWNrLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4
L1Y4Q29sbGVjdGlvbi5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4Q29sbGVjdGlv
bi5oJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOENvbnRleHREaXNwb3NhYmxlLmgnLAog
ICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4RGVwZW5kZW50UmV0YWluZWQuaCcsCiAgICAgICAg
ICAgICAnYmluZGluZ3MvdjgvVjhET01Db25maWd1cmF0aW9uLmNwcCcsCiAgICAgICAgICAgICAn
YmluZGluZ3MvdjgvVjhET01Db25maWd1cmF0aW9uLmgnLApAQCAtMjI5OSw2ICsyMzA1LDggQEAK
ICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5oJywKICAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9WOEdDRm9yQ29udGV4dERpc3Bvc2UuY3BwJywKICAgICAgICAgICAgICdi
aW5kaW5ncy92OC9WOEdDRm9yQ29udGV4dERpc3Bvc2UuaCcsCisgICAgICAgICAgICAnYmluZGlu
Z3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVudC5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4
L1Y4SFRNTEN1c3RvbUVsZW1lbnQuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhIaWRk
ZW5Qcm9wZXJ0eU5hbWUuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEhpZGRlblBy
b3BlcnR5TmFtZS5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOExhenlFdmVudExpc3Rl
bmVyLmNwcCcsCkBAIC0yMzU1LDYgKzIzNjMsNyBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOENsaXBib2FyZEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOENvbnNvbGVDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9j
dXN0b20vVjhDb29yZGluYXRlc0N1c3RvbS5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvckN1c3RvbS5jcHAnLAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUV2ZW50Q3VzdG9tLmNwcCcsCiAgICAgICAg
ICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFj
ay5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVhQYXRoTlNS
ZXNvbHZlci5jcHAnLApAQCAtMzc5NCw2ICszODAzLDEwIEBACiAgICAgICAgICAgICAnZG9tL0Nv
bnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcCcsCiAgICAgICAgICAgICAnZG9tL0NvbnRleHREZXN0
cnVjdGlvbk9ic2VydmVyLmNwcCcsCiAgICAgICAgICAgICAnZG9tL0Nyb3NzVGhyZWFkVGFzay5o
JywKKyAgICAgICAgICAgICdkb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmNwcCcsCisgICAg
ICAgICAgICAnZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oJywKKyAgICAgICAgICAgICdk
b20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmNwcCcsCisgICAgICAgICAgICAnZG9tL0N1c3RvbUVs
ZW1lbnRSZWdpc3RyeS5oJywKICAgICAgICAgICAgICdkb20vQ3VzdG9tRXZlbnQuY3BwJywKICAg
ICAgICAgICAgICdkb20vQ3VzdG9tRXZlbnQuaCcsCiAgICAgICAgICAgICAnZG9tL0RPTUFsbElu
T25lLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1
bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJp
Yy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNwcAppbmRleCBlYTM2NzllMmQwMzcwYjUwMjEzNDY5
OGQ0ZmMyYWNhZjMwNWI4NzhiLi45ZDlmOTIzMTBjMDgwOWNkYjgwY2JjYTU0YjdlMWZmNjI5Yzcx
Y2FlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVF
bmFibGVkRmVhdHVyZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMv
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHAKQEAgLTE4OCw2ICsxODgsMTAgQEAgYm9vbCBSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjppc1NoYWRvd0RPTUVuYWJsZWQgPSBmYWxzZTsKIGJvb2wgUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6aXNBdXRob3JTaGFkb3dET01Gb3JBbnlFbGVtZW50RW5hYmxl
ZCA9IGZhbHNlOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKK2Jv
b2wgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6aXNDdXN0b21ET01FbGVtZW50c0VuYWJsZWQgPSBm
YWxzZTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKIGJvb2wgUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6aXNTdHlsZVNjb3BlZEVuYWJsZWQgPSBmYWxzZTsKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZl
YXR1cmVzLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVk
RmVhdHVyZXMuaAppbmRleCBiYjk1Y2U4NDU2Y2I5MjNjYjkwMzAwNGExZmFlZjZmZTc5ODMxYjQ0
Li44YTYwNmEzZDVjYjhjM2Q1MjMzNGZiMmJiMmQ2ZGMyYmVhNjdiOTYwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVy
ZXMuaApAQCAtMjA3LDYgKzIwNywxMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0QXV0
aG9yU2hhZG93RE9NRm9yQW55RWxlbWVudEVuYWJsZWQoYm9vbCBpc0VuYWJsZWQpIHsgaXNBdXRo
b3JTaGFkb3dET01Gb3JBbnlFbGVtZW50RW5hYmxlZCA9IGlzRW5hYmxlZDsgfQogI2VuZGlmCiAK
KyNpZiBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKKyAgICBzdGF0aWMgYm9vbCBjdXN0b21E
T01FbGVtZW50c0VuYWJsZWQoKSB7IHJldHVybiBpc0N1c3RvbURPTUVsZW1lbnRzRW5hYmxlZDsg
fQorICAgIHN0YXRpYyB2b2lkIHNldEN1c3RvbURPTUVsZW1lbnRzKGJvb2wgaXNFbmFibGVkKSB7
IGlzQ3VzdG9tRE9NRWxlbWVudHNFbmFibGVkID0gaXNFbmFibGVkOyB9CisjZW5kaWYKKwogI2lm
IEVOQUJMRShTVFlMRV9TQ09QRUQpCiAgICAgc3RhdGljIGJvb2wgc3R5bGVTY29wZWRFbmFibGVk
KCkgeyByZXR1cm4gaXNTdHlsZVNjb3BlZEVuYWJsZWQ7IH0KICAgICBzdGF0aWMgdm9pZCBzZXRT
dHlsZVNjb3BlZEVuYWJsZWQoYm9vbCBpc0VuYWJsZWQpIHsgaXNTdHlsZVNjb3BlZEVuYWJsZWQg
PSBpc0VuYWJsZWQ7IH0KQEAgLTMyMSw2ICszMjYsMTAgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMg
Ym9vbCBpc0F1dGhvclNoYWRvd0RPTUZvckFueUVsZW1lbnRFbmFibGVkOwogI2VuZGlmCiAKKyNp
ZiBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKKyAgICBzdGF0aWMgYm9vbCBpc0N1c3RvbURP
TUVsZW1lbnRzRW5hYmxlZDsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKICAg
ICBzdGF0aWMgYm9vbCBpc1N0eWxlU2NvcGVkRW5hYmxlZDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCA1MGQ1
MTQyN2U5ZjEzMjY3NmZkZDkzYThhYmNhZGUzNWI2MjY1ZWE0Li40MzAwMzAxYjUyOWUwNThmNTI1
N2I0NDNhMmM0YjhlODM0OTMxZWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtMzU0LDEzICszNTQsMjAgQEAgRU5ECiAg
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJmYWxzZTtcbiIpOwogICAgIH0KIAorICAgIG15
ICRmcm9tRnVuY3Rpb25PcGVuaW5nID0gIiI7CisgICAgbXkgJGZyb21GdW5jdGlvbkNsb3Npbmcg
PSAiIjsKKyAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlY4V3JhcEFz
RnVuY3Rpb24ifSkgeworICAgICAgICAkZnJvbUZ1bmN0aW9uT3BlbmluZyA9ICJWOERPTVdyYXBw
ZXI6OmZyb21GdW5jdGlvbigiOworICAgICAgICAkZnJvbUZ1bmN0aW9uQ2xvc2luZyA9ICIpIjsK
KyAgICB9CisKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CiAgICAgc3RhdGljIGJv
b2wgSGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKICAgICBzdGF0aWMgdjg6OlBl
cnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdldFJhd1RlbXBsYXRlKCk7CiAgICAgc3Rh
dGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBHZXRUZW1wbGF0ZSgpOwog
ICAgIHN0YXRpYyAke25hdGl2ZVR5cGV9KiB0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IG9iamVjdCkKICAgICB7Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCR7bmF0aXZl
VHlwZX0qPihvYmplY3QtPkdldEFsaWduZWRQb2ludGVyRnJvbUludGVybmFsRmllbGQodjhET01X
cmFwcGVyT2JqZWN0SW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8JHtu
YXRpdmVUeXBlfSo+KCR7ZnJvbUZ1bmN0aW9uT3BlbmluZ31vYmplY3Qke2Zyb21GdW5jdGlvbkNs
b3Npbmd9LT5HZXRBbGlnbmVkUG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9NV3JhcHBlck9i
amVjdEluZGV4KSk7CiAgICAgfQogICAgIHN0YXRpYyB2b2lkIGRlcmVmT2JqZWN0KHZvaWQqKTsK
ICAgICBzdGF0aWMgV3JhcHBlclR5cGVJbmZvIGluZm87CkBAIC01MzAsNiArNTM3LDkgQEAgRU5E
CiAKICAgICAgICAgbXkgJGdldENhY2hlZFdyYXBwZXIgPSAkY29kZUdlbmVyYXRvci0+SXNTdWJU
eXBlKCRpbnRlcmZhY2UsICJOb2RlIikgPyAiRE9NRGF0YVN0b3JlOjpnZXROb2RlKGltcGwsIGlz
b2xhdGUpIiA6ICJET01EYXRhU3RvcmU6OmN1cnJlbnQoaXNvbGF0ZSktPmdldChpbXBsKSI7CiAg
ICAgICAgIG15ICRjcmVhdGVXcmFwcGVyQ2FsbCA9ICRjdXN0b21XcmFwID8gIiR7djhJbnRlcmZh
Y2VOYW1lfTo6d3JhcCIgOiAiJHt2OEludGVyZmFjZU5hbWV9OjpjcmVhdGVXcmFwcGVyIjsKKyAg
ICAgICAgbXkgJHJldHVybmluZ1dyYXBwZXIgPSAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiVjhXcmFwQXNGdW5jdGlvbiJ9ID8gIlY4RE9NV3JhcHBlcjo6dG9GdW5jdGlvbih3cmFw
cGVyKSIgOiAid3JhcHBlciI7CisgICAgICAgIG15ICRyZXR1cm5pbmdDcmVhdGVkV3JhcHBlckJl
Z2luID0gJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlY4V3JhcEFzRnVuY3Rpb24i
fSA/ICJWOERPTVdyYXBwZXI6OnRvRnVuY3Rpb24oIiA6ICIiOworICAgICAgICBteSAkcmV0dXJu
aW5nQ3JlYXRlZFdyYXBwZXJFbmQgPSAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
VjhXcmFwQXNGdW5jdGlvbiJ9ID8gIiwgaW1wbC0+cHJvdG90eXBlKCkudjhWYWx1ZSgpLCBpbXBs
LT5uYW1lKCkpIiA6ICIiOwogCiAgICAgICAgIGlmICgkY3VzdG9tV3JhcCkgewogICAgICAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgPDxFTkQpOwpAQCAtNTQzLDcgKzU1Myw3IEBAIGlubGlu
ZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoJHtuYXRpdmVUeXBlfSogaW1wbCwgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBjCiB7CiAgICAgQVNTRVJUKGltcGwpOwogICAgIEFTU0VSVCgkZ2V0
Q2FjaGVkV3JhcHBlci5Jc0VtcHR5KCkpOwotICAgIHJldHVybiAkY3JlYXRlV3JhcHBlckNhbGwo
aW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKKyAgICByZXR1cm4gJHtyZXR1cm5pbmdD
cmVhdGVkV3JhcHBlckJlZ2lufSRjcmVhdGVXcmFwcGVyQ2FsbChpbXBsLCBjcmVhdGlvbkNvbnRl
eHQsIGlzb2xhdGUpJHtyZXR1cm5pbmdDcmVhdGVkV3JhcHBlckVuZH07CiB9CiBFTkQKICAgICAg
ICAgfQpAQCAtNTU2LDcgKzU2Niw3IEBAIGlubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHRv
VjhPYmplY3QoJHtuYXRpdmVUeXBlfSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqCiAgICAgICAg
IHJldHVybiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCk7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiB3cmFwcGVyID0gJGdldENhY2hlZFdyYXBwZXI7CiAgICAgaWYgKCF3cmFwcGVyLklzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgICAgIHJldHVybiAkcmV0dXJuaW5n
V3JhcHBlcjsKICAgICByZXR1cm4gd3JhcChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUp
OwogfQogCkBAIC01NjYsNyArNTc2LDcgQEAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0
b1Y4KCR7bmF0aXZlVHlwZX0qIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3IKICAgICAg
ICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhpc29sYXRlKTsKICAgICB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gd3JhcHBlciA9ICRnZXRDYWNoZWRXcmFwcGVyOwogICAgIGlmICghd3JhcHBlci5Jc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiB3cmFwcGVyOworICAgICAgICByZXR1cm4gJHJldHVybmlu
Z1dyYXBwZXI7CiAgICAgcmV0dXJuIHdyYXAoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRl
KTsKIH0KIEVORApAQCAtNTgzLDcgKzU5Myw3IEBAIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdG9WOEZhc3QoJHtuYXRpdmVUeXBlfSogaW1wbCwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mCiAg
ICAgLy8gdjg6OkFjY2Vzc29ySW5mby4KICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBw
ZXIgPSAoaG9sZGVyLT53cmFwcGVyKCkgPT0gaW5mby5Ib2xkZXIoKSkgPyBpbXBsLT53cmFwcGVy
KCkgOiBET01EYXRhU3RvcmU6OmdldE5vZGUoaW1wbCwgaW5mby5HZXRJc29sYXRlKCkpOwogICAg
IGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB3cmFwcGVyOworICAgICAg
ICByZXR1cm4gJHJldHVybmluZ1dyYXBwZXI7CiAgICAgcmV0dXJuIHdyYXAoaW1wbCwgaW5mby5I
b2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0IGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dAppbmRleCA3MDkwZjY2M2VhMmU4
YTk2YzJlMzhlNTk4YmY1Y2FkMWY3YzJjMzJiLi5kNWI3YTRlNjM0NjZiYTNkYmYyMDhjOTgxYzhj
OGMwNWYxNzVlYjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0lETEF0dHJpYnV0ZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
SURMQXR0cmlidXRlcy50eHQKQEAgLTEyMywzICsxMjMsNCBAQCBWOE5vV3JhcHBlckNhY2hlCiBW
OE1lYXN1cmVBcz0qCiBWOFJlYWRPbmx5CiBWOFVuZm9yZ2VhYmxlCitWOFdyYXBBc0Z1bmN0aW9u
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9DdXN0b21FbGVtZW50SGVs
cGVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9DdXN0b21FbGVtZW50SGVscGVy
cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNmEyZjQ4Zjk2ZjQ0ZmIzOWZkNWE2NDdmYTgzYzYxMTNjZWM0YTEx
MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0N1c3RvbUVs
ZW1lbnRIZWxwZXJzLmNwcApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkN1c3RvbUVsZW1lbnRIZWxwZXJzLmgiCisKKyNpbmNsdWRlICJWOEhUTUxTcGFuRWxl
bWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBFTkFCTEUoQ1VTVE9NX0RPTV9F
TEVNRU5UUykKKworY29uc3QgU2NyaXB0VmFsdWUmIEN1c3RvbUVsZW1lbnRIZWxwZXJzOjpkZWZh
dWx0UHJvdG90eXBlKCkKK3sKKyAgICAvLyBGSVhNRTogU2hvdWxkIGJlIHN0b3JlZCBpbiBwZXIt
aXNvbGF0ZSBzdG9yZQorICAgIERFRklORV9TVEFUSUNfTE9DQUwoU2NyaXB0VmFsdWUsIHZhbHVl
LCAodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPjo6TmV3KFY4SFRNTFNwYW5FbGVtZW50OjpHZXRU
ZW1wbGF0ZSgpLT5HZXRGdW5jdGlvbigpLT5HZXQodjg6OlN0cmluZzo6TmV3U3ltYm9sKCJwcm90
b3R5cGUiKSkpKSk7CisgICAgcmV0dXJuIHZhbHVlOworfTsKKyNlbmRpZiAvLyBFTkFCTEUoQ1VT
VE9NX0RPTV9FTEVNRU5UUykKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvQ3VzdG9tRWxlbWVudEhlbHBlcnMuaCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZTIwZThlYzZhNWVhODhmZmY0ZDYxMmFjZmQ4MTA5NTNmZjAxOTU1NQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmgKQEAg
LTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgQ3VzdG9tRWxlbWVudEhlbHBlcnNfaAorI2RlZmluZSBDdXN0
b21FbGVtZW50SGVscGVyc19oCisKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKyNpZiBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKKworY2xhc3Mg
Q3VzdG9tRWxlbWVudEhlbHBlcnMgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBTY3JpcHRW
YWx1ZSYgZGVmYXVsdFByb3RvdHlwZSgpOworfTsKKworI2VuZGlmIC8vIEVOQUJMRShDVVNUT01f
RE9NX0VMRU1FTlRTKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDdXN0
b21FbGVtZW50SGVscGVyc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOEFkYXB0b3JGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFk
YXB0b3JGdW5jdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTI5MzhhMzUyNmZjMmJiNDE2YThmZjE3M2Fj
NGZmZThjNjBkM2FhNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmNwcApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlY4QWRhcHRvckZ1bmN0aW9uLmgiCisKKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+IFY4QWRhcHRvckZ1bmN0aW9uOjpnZXRUZW1wbGF0ZSgpCit7CisgICAgLy8g
RklYTUU6IFNob3VsZCBiZSBzdG9yZWQgaW4gcGVyLWlzb2xhdGUgZGF0YSBzdG9yZQorICAgIHN0
YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSB2ODo6UGVy
c2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT46Ok5ldyh2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6
TmV3KCkpOworICAgIHJldHVybiBjb25maWd1cmVUZW1wbGF0ZSh0ZW1wbCk7Cit9CisKK3Y4OjpQ
ZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOEFkYXB0b3JGdW5jdGlvbjo6Y29uZmln
dXJlVGVtcGxhdGUodjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGRlc2MpCit7
CisgICAgZGVzYy0+U2V0Q2FsbEhhbmRsZXIoJlY4QWRhcHRvckZ1bmN0aW9uOjppbnZvY2F0aW9u
Q2FsbGJhY2spOworICAgIHJldHVybiBkZXNjOworfQorCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
VjhBZGFwdG9yRnVuY3Rpb246Omludm9jYXRpb25DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzKQoreworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlZCA9IHY4OjpIYW5k
bGU8djg6Ok9iamVjdD46OkNhc3QoYXJncy5DYWxsZWUoKS0+R2V0SGlkZGVuVmFsdWUoVjhIaWRk
ZW5Qcm9wZXJ0eU5hbWU6OmRldGFpbCgpKSk7CisgICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIGZh
c3RlciBpZiB3ZSBjYW4gYWNjZXNzIHVuZGVybHlpbmcgbmF0aXZlIGNhbGxiYWNrIGRpcmVjdGx5
LgorICAgIFZlY3Rvcjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiBhcmdBcnJheShhcmdzLkxlbmd0
aCgpKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3MuTGVuZ3RoKCk7ICsraSkKKyAgICAg
ICAgYXJnQXJyYXkuYXBwZW5kKGFyZ3NbaV0pOworICAgIGlmIChhcmdzLklzQ29uc3RydWN0Q2Fs
bCgpKQorICAgICAgICByZXR1cm4gd3JhcHBlZC0+Q2FsbEFzQ29uc3RydWN0b3IoYXJnQXJyYXku
c2l6ZSgpLCBhcmdBcnJheS5kYXRhKCkpOworICAgIHJldHVybiB3cmFwcGVkLT5DYWxsQXNGdW5j
dGlvbihhcmdzLlRoaXMoKSwgYXJnQXJyYXkuc2l6ZSgpLCBhcmdBcnJheS5kYXRhKCkpOworfQor
Cit2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gVjhBZGFwdG9yRnVuY3Rpb246OndyYXAodjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBvYmplY3QsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBwcm90b3R5cGUs
IEF0b21pY1N0cmluZyBuYW1lKQoreworICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBhZGFw
dG9yID0gdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+OjpDYXN0KGdldFRlbXBsYXRlKCktPkdldEZ1
bmN0aW9uKCkpOworICAgIGlmICghcHJvdG90eXBlLklzRW1wdHkoKSAmJiBwcm90b3R5cGUtPklz
T2JqZWN0KCkpCisgICAgICAgIGFkYXB0b3ItPlNldCh2ODo6U3RyaW5nOjpOZXdTeW1ib2woInBy
b3RvdHlwZSIpLCBwcm90b3R5cGUsIHY4OjpSZWFkT25seSk7CisgICAgYWRhcHRvci0+U2V0TmFt
ZSh2ODo6U3RyaW5nOjpOZXcobmFtZS5jaGFyYWN0ZXJzKCksIG5hbWUubGVuZ3RoKCkpKTsKKyAg
ICBhZGFwdG9yLT5TZXRIaWRkZW5WYWx1ZShWOEhpZGRlblByb3BlcnR5TmFtZTo6ZGV0YWlsKCks
IG9iamVjdCk7CisgICAgb2JqZWN0LT5TZXRIaWRkZW5WYWx1ZShWOEhpZGRlblByb3BlcnR5TmFt
ZTo6ZGV0YWlsKCksIGFkYXB0b3IpOworICAgIHJldHVybiBhZGFwdG9yOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OEFkYXB0b3JGdW5jdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBZGFwdG9y
RnVuY3Rpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yN2Y2MTYyNTFhZjhkZWJmM2NjOWRmYmZmNzQzYzE3NDA2
MWY3YzQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhB
ZGFwdG9yRnVuY3Rpb24uaApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBWOEFkYXB0b3JGdW5jdGlv
bl9oCisjZGVmaW5lIFY4QWRhcHRvckZ1bmN0aW9uX2gKKworI2luY2x1ZGUgIlY4QmluZGluZy5o
IgorI2luY2x1ZGUgIlY4SGlkZGVuUHJvcGVydHlOYW1lLmgiCisjaW5jbHVkZSA8djguaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFY4QWRhcHRvckZ1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiB1bndyYXAodjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+KTsKKyAgICBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6RnVuY3Rpb24+IHdyYXAodjg6OkhhbmRsZTx2ODo6T2JqZWN0Piwgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHByb3RvdHlwZSwgQXRvbWljU3RyaW5nIG5hbWUpOworICAgIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gZ2V0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4pOwor
CisgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBnZXRUZW1w
bGF0ZSgpOworICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4g
Y29uZmlndXJlVGVtcGxhdGUodjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+KTsK
KyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGludm9jYXRpb25DYWxsYmFjayhjb25z
dCB2ODo6QXJndW1lbnRzJik7Cit9OworCitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBW
OEFkYXB0b3JGdW5jdGlvbjo6dW53cmFwKHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBmdW5jdGlv
bikKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlZCA9IGZ1bmN0aW9uLT5HZXRI
aWRkZW5WYWx1ZShWOEhpZGRlblByb3BlcnR5TmFtZTo6ZGV0YWlsKCkpOworICAgIEFTU0VSVCgh
d3JhcHBlZC5Jc0VtcHR5KCkpOworICAgIEFTU0VSVCh3cmFwcGVkLT5Jc09iamVjdCgpKTsKKyAg
ICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh3cmFwcGVkKTsKK30KKworaW5s
aW5lIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBWOEFkYXB0b3JGdW5jdGlvbjo6Z2V0KHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KQoreworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBh
ZGFwdG9yRnVuY3Rpb24gPSBvYmplY3QtPkdldEhpZGRlblZhbHVlKFY4SGlkZGVuUHJvcGVydHlO
YW1lOjpkZXRhaWwoKSk7CisgICAgQVNTRVJUKCFhZGFwdG9yRnVuY3Rpb24uSXNFbXB0eSgpKTsK
KyAgICBBU1NFUlQoYWRhcHRvckZ1bmN0aW9uLT5Jc0Z1bmN0aW9uKCkpOworICAgIHJldHVybiB2
ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj46OkNhc3QoYWRhcHRvckZ1bmN0aW9uKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVjhBZGFwdG9yRnVuY3Rpb25faApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAKaW5kZXggZjZlZmM4ODE3
YjNmNjQ1ZGU5OTcyOTViNTU1M2I4ZTE2ODllODQ5Mi4uZjFkN2Q2ZmE1NjhmY2VmZTZkM2E3MDdl
ZmE2MzJkOWE5NTZjYzIwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhET01XcmFwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdy
YXBwZXIuY3BwCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQu
aCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCiAjaW5jbHVkZSAiVjhBYnN0cmFjdEV2
ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJWOEFkYXB0b3JGdW5jdGlvbi5oIgogI2luY2x1ZGUg
IlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4Q29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIlY4RXZl
bnRMaXN0ZW5lci5oIgpAQCAtMjEwLDQgKzIxMSwyMSBAQCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcih2ODo6TG9jYWw8djg6OlZhbHVlPiB2
YQogI2VuZGlmCiB9CiAKK3Y4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBWOERPTVdyYXBwZXI6OnRv
RnVuY3Rpb24odjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9iamVjdCkKK3sKKyAgICByZXR1cm4gVjhB
ZGFwdG9yRnVuY3Rpb246OmdldCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KG9iamVjdCkp
OworfQorCit2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gVjhET01XcmFwcGVyOjp0b0Z1bmN0aW9u
KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0LCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcHJv
dG90eXBlLCBBdG9taWNTdHJpbmcgbmFtZSkKK3sKKyAgICByZXR1cm4gVjhBZGFwdG9yRnVuY3Rp
b246OndyYXAob2JqZWN0LCBwcm90b3R5cGUsIG5hbWUpOworfQorCit2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IFY4RE9NV3JhcHBlcjo6ZnJvbUZ1bmN0aW9uKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
b2JqZWN0KQoreworICAgIGlmICghb2JqZWN0LT5Jc0Z1bmN0aW9uKCkpCisgICAgICAgIHJldHVy
biBvYmplY3Q7CisgICAgcmV0dXJuIFY4QWRhcHRvckZ1bmN0aW9uOjp1bndyYXAodjg6OkhhbmRs
ZTx2ODo6RnVuY3Rpb24+OjpDYXN0KG9iamVjdCkpOworfQorCiB9ICAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAppbmRleCAxZjgw
NjJkYzZkNjk0OWYwODYxYWYzOWI5NjdiMDBmZmRjZjkwOWI1Li44MDQwNjc1YTIxMTNlMmE3Mzkw
MjZiMDg3OTIyMmZkNTQ3YzE2M2VhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOERPTVdyYXBwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERP
TVdyYXBwZXIuaApAQCAtMTEyLDYgKzExMiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICAgICAgc3RhdGljIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBpbnN0YW50aWF0ZVY4T2JqZWN0KHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCBXcmFwcGVyVHlwZUluZm8qLCB2
b2lkKik7CiAKKyAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiB0b0Z1bmN0
aW9uKHY4OjpIYW5kbGU8djg6OlZhbHVlPik7CisgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpGdW5jdGlvbj4gdG9GdW5jdGlvbih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+LCB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gcHJvdG90eXBlLCBBdG9taWNTdHJpbmcgbmFtZSk7CisgICAgICAgIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGZyb21GdW5jdGlvbih2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+KTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyB2b2lkIHNldFdyYXBwZXJDbGFz
cyh2b2lkKiwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKICAgICAgICAgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi42YjM5NTIxMTIwNDhkMzAxYzViZTRmZDJlZTlkOGZkZmYwN2ZlN2QwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIVE1MQ3VzdG9t
RWxlbWVudC5jcHAKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJWOEhUTUxDdXN0b21FbGVtZW50LmgiCisKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50UmVnaXN0
cnkuaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tRWxlbWVu
dENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiVjhIVE1MU3BhbkVsZW1lbnQuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisjaWYgRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCisKKy8vIEZJ
WE1FOiBFYWNoIGN1c3RvbSBlbGVtZW50cyBzaG91bGQgaGF2ZSBpdHMgb3duIEdldFRlbXBsYXRl
IG1ldGhvZCBzbyB0aGF0IGl0IGNhbiBkZXJpdmVkIGZyb20gZGlmZmVyZW5jdCBzdXBlciBlbGVt
ZW50LgorV3JhcHBlclR5cGVJbmZvIFY4SFRNTEN1c3RvbUVsZW1lbnQ6OmluZm8gPSB7ICZWOEhU
TUxTcGFuRWxlbWVudDo6R2V0VGVtcGxhdGUsIFY4SFRNTEVsZW1lbnQ6OmRlcmVmT2JqZWN0LCAw
LCAwLCAwLCAmVjhIVE1MU3BhbkVsZW1lbnQ6OmluZm8sIFdyYXBwZXJUeXBlT2JqZWN0UHJvdG90
eXBlIH07CisKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhIVE1MQ3VzdG9tRWxlbWVudDo6Y3Jl
YXRlV3JhcHBlcihQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit7CisgICAgQ3Vz
dG9tRWxlbWVudENvbnN0cnVjdG9yKiBjdG9yID0gQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Ojpjb25z
dHJ1Y3Rvck9mKGltcGwuZ2V0KCkpOworICAgIGlmICghY3RvcikKKyAgICAgICAgcmV0dXJuIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoV2ViQ29yZTo6dG9WOCh0b0hUTUxVbmtub3duRWxl
bWVudChpbXBsLmdldCgpKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKSk7CisKKyAgICB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0OworICAgIGlmICghY3JlYXRpb25Db250ZXh0Lklz
RW1wdHkoKSAmJiBjcmVhdGlvbkNvbnRleHQtPkNyZWF0aW9uQ29udGV4dCgpICE9IHY4OjpDb250
ZXh0OjpHZXRDdXJyZW50KCkpIHsKKyAgICAgICAgLy8gRm9yIHBlcmZvcm1hbmNlLCB3ZSBlbnRl
ciB0aGUgY29udGV4dCBvbmx5IGlmIHRoZSBjdXJyZW50bHkgcnVubmluZyBjb250ZXh0CisgICAg
ICAgIC8vIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBjb250ZXh0IHRoYXQgd2UgYXJlIGFib3V0IHRv
IGVudGVyLgorICAgICAgICBjb250ZXh0ID0gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KGNy
ZWF0aW9uQ29udGV4dC0+Q3JlYXRpb25Db250ZXh0KCkpOworICAgICAgICBBU1NFUlQoIWNvbnRl
eHQuSXNFbXB0eSgpKTsKKyAgICAgICAgY29udGV4dC0+RW50ZXIoKTsKKyAgICB9CisKKyAgICB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omluc3RhbnRpYXRl
VjhPYmplY3QoY3JlYXRpb25Db250ZXh0LCAmaW5mbywgaW1wbC5nZXQoKSk7CisKKyAgICBpZiAo
IWNvbnRleHQuSXNFbXB0eSgpKQorICAgICAgICBjb250ZXh0LT5FeGl0KCk7CisKKyAgICBpZiAo
d3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB3cmFwcGVyOworCisgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkbid0IGJlIG5lZWRlZCBvbmNlIGVhY2ggY3VzdG9tIGVsZW1lbnQgaGFz
IGl0cyBvd24gRnVuY3Rpb25UZW1wbGF0ZQorICAgIHdyYXBwZXItPlNldCh2ODo6U3RyaW5nOjpO
ZXdTeW1ib2woImNvbnN0cnVjdG9yIiksIFdlYkNvcmU6OnRvVjgoY3RvciwgY3JlYXRpb25Db250
ZXh0LCBpc29sYXRlKSk7CisgICAgLyp2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVy
SGFuZGxlID0gKi9WOERPTVdyYXBwZXI6OmNyZWF0ZURPTVdyYXBwZXIoaW1wbCwgJmluZm8sIHdy
YXBwZXIsIGlzb2xhdGUpOworCisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisKKyNlbmRpZiAvLyBF
TkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVudC5o
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVudC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmZjODRlOTY1NzYxMjQ5NmE3YzkwNjYwMTc3NjI3YTk3NzVhNjFkM2MKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50
LmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVjhIVE1MQ3VzdG9tRWxlbWVudF9oCisjZGVmaW5l
IFY4SFRNTEN1c3RvbUVsZW1lbnRfaAorCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVk
ZSAiVjhET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiVjhIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUg
IlY4SFRNTFVua25vd25FbGVtZW50LmgiCisjaW5jbHVkZSA8djguaD4KKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEhUTUxFbGVtZW50
OworCisjaWYgRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCisKK2NsYXNzIFY4SFRNTEN1c3Rv
bUVsZW1lbnQgeworcHVibGljOgorICAgIHN0YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKKyAg
ICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB0b1Y4KEhUTUxFbGVtZW50Kiwgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
KCksIHY4OjpJc29sYXRlKiA9IDApOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IGNyZWF0ZVdyYXBwZXIoUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4sIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4sIHY4OjpJc29sYXRlKik7Cit9OworCitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBWOEhUTUxDdXN0b21FbGVtZW50Ojp0b1Y4KEhUTUxFbGVtZW50KiBpbXBsLCB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit7Cisg
ICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpnZXROb2Rl
KGltcGwsIGlzb2xhdGUpOworICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiB3cmFwcGVyOworICAgIHJldHVybiBWOEhUTUxDdXN0b21FbGVtZW50OjpjcmVhdGVXcmFw
cGVyKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7Cit9CisKKyNlbHNlIC8vIEVOQUJM
RShDVVNUT01fRE9NX0VMRU1FTlRTKQorCitjbGFzcyBWOEhUTUxDdXN0b21FbGVtZW50IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKEhUTUxFbGVtZW50
Kiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiA9IDApOworfTsKKworaW5saW5lIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gSFRNTEN1c3RvbUVsZW1lbnQ6OnRvVjgoSFRNTEVsZW1lbnQqIGltcGwsIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0
ZSkKK3sKKyAgICByZXR1cm4gdG9WOCh0b0hUTUxVbmtub3duRWxlbWVudChpbXBsKSwgY3JlYXRp
b25Db250ZXh0LCBpc29sYXRlKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShDVVNUT01fRE9NX0VM
RU1FTlRTKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBWOEhUTUxDdXN0
b21FbGVtZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvckN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21FbGVtZW50Q29uc3RydWN0b3JDdXN0b20uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjgyZDg4YzljNjk1MWRkYTYxNTJhNjM5YzEzNTkyZjc3MGQzZjJmNTIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21F
bGVtZW50Q29uc3RydWN0b3JDdXN0b20uY3BwCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKiAKKyogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyogbWV0OgorKiAKKyogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKiBkaXN0cmlidXRpb24uCisqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyogCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWOEN1c3Rv
bUVsZW1lbnRDb25zdHJ1Y3Rvci5oIgorCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudENvbnN0cnVj
dG9yLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhIVE1MQ3VzdG9tRWxl
bWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBW
OEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y2FsbEFzRnVuY3Rpb25DYWxsYmFjayhjb25zdCB2
ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIElOQ19TVEFUUygiRE9NLlY4Q3VzdG9tRWxlbWVu
dENvbnN0cnVjdG9yLkNvbnN0cnVjdG9yIik7CisgICAgaWYgKCFhcmdzLklzQ29uc3RydWN0Q2Fs
bCgpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoIkRPTSBvYmplY3QgY29uc3RydWN0
b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLiIpOworICAgIGlmIChDb25zdHJ1Y3Rv
ck1vZGU6OmN1cnJlbnQoKSA9PSBDb25zdHJ1Y3Rvck1vZGU6OldyYXBFeGlzdGluZ09iamVjdCkK
KyAgICAgICAgcmV0dXJuIGFyZ3MuSG9sZGVyKCk7CisKKyAgICBDdXN0b21FbGVtZW50Q29uc3Ry
dWN0b3IqIGltcGwgPSB0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICBSZWZQdHI8SFRNTEVs
ZW1lbnQ+IGVsZW1lbnQgPSBpbXBsLT5jcmVhdGVFbGVtZW50KCk7CisgICAgaWYgKCFlbGVtZW50
KQorICAgICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKKyAgICByZXR1cm4gVjhIVE1MQ3VzdG9t
RWxlbWVudDo6dG9WOChlbGVtZW50LmdldCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi45YmFjOGIwNTA4NzQzNGI4M2RhYWM3YzQzMzMwNDcyODc1MWE0ZGY5Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rv
ci5jcHAKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDdXN0
b21FbGVtZW50Q29uc3RydWN0b3IuaCIKKworI2lmIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRT
KQorCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudEhlbHBlcnMuaCIKKyNpbmNsdWRlICJDdXN0b21F
bGVtZW50UmVnaXN0cnkuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkhUTUxF
bGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRD
b25zdHJ1Y3Rvcj4gQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjpjcmVhdGUoRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKQoreworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKGRvY3VtZW50LCB0YWdOYW1lKSk7Cit9
CisKK0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKERv
Y3VtZW50KiBkb2N1bWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSkKKyAgICA6IG1f
ZG9jdW1lbnQoZG9jdW1lbnQpCisgICAgLCBtX3RhZ05hbWUodGFnTmFtZSkKKyAgICAsIG1fbmFt
ZSgiSFRNTEN1c3RvbUVsZW1lbnQiKQorICAgICwgbV9wcm90b3R5cGUoQ3VzdG9tRWxlbWVudEhl
bHBlcnM6OmRlZmF1bHRQcm90b3R5cGUoKSkKK3sKK30KKworQ3VzdG9tRWxlbWVudENvbnN0cnVj
dG9yOjp+Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKCkKK3sKK30KKwordm9pZCBDdXN0b21FbGVt
ZW50Q29uc3RydWN0b3I6OndpbGxEZXN0cm95RG9jdW1lbnQoKQoreworICAgIG1fZG9jdW1lbnQg
PSAwOworfQorCitQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBDdXN0b21FbGVtZW50Q29uc3RydWN0
b3I6OmNyZWF0ZUVsZW1lbnQoKSBjb25zdAoreworICAgIGlmICghbV9kb2N1bWVudCkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIEhUTUxFbGVtZW50OjpjcmVhdGUobV90YWdOYW1lLCBt
X2RvY3VtZW50KTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9ET01fRUxFTUVO
VFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudENvbnN0cnVj
dG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOGMwNDE5ZjFjYWEyMjNjYzc5YWUxNjY0ODQ3Y2I5NjY1ZWFkYzQ3NQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3Iu
aApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDdXN0b21FbGVtZW50Q29uc3RydWN0b3JfaAorI2Rl
ZmluZSBDdXN0b21FbGVtZW50Q29uc3RydWN0b3JfaAorCisjaWYgRU5BQkxFKENVU1RPTV9ET01f
RUxFTUVOVFMpCisKKyNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCisjaW5jbHVkZSAiU2NyaXB0
VmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9B
dG9taWNTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDdXN0b21FbGVt
ZW50RGVmaW5pdGlvbjsKK2NsYXNzIERpY3Rpb25hcnk7CitjbGFzcyBEb2N1bWVudDsKK2NsYXNz
IEhUTUxFbGVtZW50OworCitjbGFzcyBDdXN0b21FbGVtZW50Q29uc3RydWN0b3IgOiBwdWJsaWMg
UmVmQ291bnRlZDxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IGNyZWF0ZShEb2N1bWVudCos
IGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKKworICAgIGV4cGxpY2l0IEN1c3RvbUVsZW1lbnRDb25z
dHJ1Y3RvcihEb2N1bWVudCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKKyAgICB2aXJ0dWFsIH5D
dXN0b21FbGVtZW50Q29uc3RydWN0b3IoKTsKKworICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KKyAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lKCkgY29uc3QgeyByZXR1cm4gbV90YWdOYW1lOyB9CisgICAgQXRvbWljU3RyaW5nIG5hbWUo
KSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICBjb25zdCBTY3JpcHRWYWx1ZSYgcHJvdG90
eXBlKCkgY29uc3QgeyByZXR1cm4gbV9wcm90b3R5cGU7IH0KKworICAgIFBhc3NSZWZQdHI8SFRN
TEVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnQoKSBjb25zdDsKKyAgICB2b2lkIHdpbGxEZXN0cm95RG9j
dW1lbnQoKTsKKyAgICAKK3ByaXZhdGU6CisgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CisgICAg
UXVhbGlmaWVkTmFtZSBtX3RhZ05hbWU7CisgICAgQXRvbWljU3RyaW5nIG1fbmFtZTsKKyAgICBT
Y3JpcHRWYWx1ZSBtX3Byb3RvdHlwZTsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShDVVNU
T01fRE9NX0VMRU1FTlRTKQorCisjZW5kaWYgLy8gQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3Iu
aWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5pZGwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYzhhMWE5YjcxZDgwOWY5NDc5ZTgzZTAwNzdkMWVjZWE2MDBhZGRiNwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3Iu
aWRsCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitbCisgICAgQ29uZGl0aW9uYWw9Q1VT
VE9NX0RPTV9FTEVNRU5UUywKKyAgICBWOEVuYWJsZWRBdFJ1bnRpbWU9Y3VzdG9tRE9NRWxlbWVu
dHMsCisgICAgVjhXcmFwQXNGdW5jdGlvbiwKKyAgICBDdXN0b21DYWxsCitdIGludGVyZmFjZSBD
dXN0b21FbGVtZW50Q29uc3RydWN0b3IgeworfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3Rv
bUVsZW1lbnRSZWdpc3RyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDE1OGVlODhlMDU3YjllMjk3NjE5NGIw
YTZkZjM1ZWEyM2E1YzM2OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9D
dXN0b21FbGVtZW50UmVnaXN0cnkuY3BwCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJp
YnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmgiCisKKyNpbmNs
dWRlICJDdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJEaWN0aW9uYXJ5Lmgi
CisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKKwor
I2lmIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0N1c3RvbUVsZW1lbnRSZWdpc3RyeTo6Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5KERvY3VtZW50KiBk
b2N1bWVudCkKKyAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCit7Cit9CisKK0N1c3RvbUVsZW1l
bnRSZWdpc3RyeTo6fkN1c3RvbUVsZW1lbnRSZWdpc3RyeSgpCit7CisgICAgZm9yIChDb25zdHJ1
Y3Rvck1hcDo6aXRlcmF0b3IgaSA9IG1fY29uc3RydWN0b3JzLmJlZ2luKCk7IGkgIT0gbV9jb25z
dHJ1Y3RvcnMuZW5kKCk7ICsraSkKKyAgICAgICAgaS0+dmFsdWUtPndpbGxEZXN0cm95RG9jdW1l
bnQoKTsKK30KKworQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKiBDdXN0b21FbGVtZW50UmVnaXN0
cnk6OmNvbnN0cnVjdG9yT2YoSFRNTEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgQ3VzdG9tRWxl
bWVudFJlZ2lzdHJ5KiBzZWxmID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+cmVnaXN0cnkoKTsKKyAg
ICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBzZWxmLT5maW5kKGVs
ZW1lbnQtPnRhZ1FOYW1lKCkpOworfQorCitQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1
Y3Rvcj4gQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpyZWdpc3RlckVsZW1lbnQoY29uc3QgQXRvbWlj
U3RyaW5nJiBuYW1lLCBjb25zdCBEaWN0aW9uYXJ5JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBRdWFsaWZpZWROYW1lIG5ld05hbWUobnVsbEF0b20sIG5hbWUubG93ZXIoKSwg
SFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSk7CisgICAgaWYgKCFuZXdOYW1lLmxvY2FsTmFt
ZSgpLnN0YXJ0c1dpdGgoIngtIikpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX0NIQVJBQ1RFUl9F
UlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAgICAgCisgICAgaWYgKGZpbmQobmV3
TmFtZSkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorCisgICAgUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gZnJlc2gg
PSBDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6OmNyZWF0ZShtX2RvY3VtZW50LCBuZXdOYW1lKTsK
KyAgICBtX2NvbnN0cnVjdG9ycy5hZGQoZnJlc2gtPnRhZ05hbWUoKS5pbXBsKCksIGZyZXNoKTsK
KyAgICByZXR1cm4gZnJlc2g7Cit9CisKK0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciogQ3VzdG9t
RWxlbWVudFJlZ2lzdHJ5OjpmaW5kKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0Cit7
CisgICAgQ29uc3RydWN0b3JNYXA6OmNvbnN0X2l0ZXJhdG9yIGZvdW5kID0gbV9jb25zdHJ1Y3Rv
cnMuZmluZChuYW1lLmltcGwoKSk7CisgICAgcmV0dXJuIChmb3VuZCAhPSBtX2NvbnN0cnVjdG9y
cy5lbmQoKSkgPyBmb3VuZC0+dmFsdWUuZ2V0KCkgOiAwOworfQorCitQYXNzUmVmUHRyPEhUTUxF
bGVtZW50PiBDdXN0b21FbGVtZW50UmVnaXN0cnk6OmNyZWF0ZUVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgbmFtZSkgY29uc3QKK3sKKyAgICBpZiAoQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9y
KiBmb3VuZCA9IGZpbmQobmFtZSkpCisgICAgICAgIHJldHVybiBmb3VuZC0+Y3JlYXRlRWxlbWVu
dCgpOworICAgIHJldHVybiAwOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0RP
TV9FTEVNRU5UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50
UmVnaXN0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4xOGQ2MDcyZWM4Y2Q2ZmI0ZjA2NDFhYmY0MmUwNjQ1NDU3MjFhOWRlCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5o
CkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMK
KyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEN1c3RvbUVsZW1lbnRSZWdpc3RyeV9o
CisjZGVmaW5lIEN1c3RvbUVsZW1lbnRSZWdpc3RyeV9oCisKKyNpZiBFTkFCTEUoQ1VTVE9NX0RP
TV9FTEVNRU5UUykKKworI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJRdWFs
aWZpZWROYW1lLmgiCisjaW5jbHVkZSAiU3VwcGxlbWVudGFibGUuaCIKKyNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOworY2xhc3MgRGljdGlvbmFyeTsK
K2NsYXNzIERvY3VtZW50OworY2xhc3MgSFRNTEVsZW1lbnQ7CitjbGFzcyBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OworY2xhc3MgUXVhbGlmaWVkTmFtZTsKKworY2xhc3MgQ3VzdG9tRWxlbWVudFJl
Z2lzdHJ5IDogcHVibGljIFJlZkNvdW50ZWQ8Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5PiB7CitwdWJs
aWM6CisgICAgZXhwbGljaXQgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5KERvY3VtZW50Kik7CisgICAg
fkN1c3RvbUVsZW1lbnRSZWdpc3RyeSgpOworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q3VzdG9t
RWxlbWVudENvbnN0cnVjdG9yPiB3ZWJraXRSZWdpc3RlcihEb2N1bWVudCosIGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEN1
c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gd2Via2l0UmVnaXN0ZXIoRG9jdW1lbnQqLCBjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IERpY3Rpb25hcnkmIG9wdGlvbnMsIEV4Y2VwdGlvbkNv
ZGUmKTsKKworICAgIFBhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiByZWdpc3Rl
ckVsZW1lbnQoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBEaWN0aW9uYXJ5JiBvcHRp
b25zLCBFeGNlcHRpb25Db2RlJik7CisgICAgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKiBmaW5k
KGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPEhUTUxFbGVtZW50
PiBjcmVhdGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKKworICAgIHN0YXRp
YyBDdXN0b21FbGVtZW50Q29uc3RydWN0b3IqIGNvbnN0cnVjdG9yT2YoSFRNTEVsZW1lbnQqKTsK
KworcHJpdmF0ZToKKyAgICB0eXBlZGVmIEhhc2hNYXA8UXVhbGlmaWVkTmFtZTo6UXVhbGlmaWVk
TmFtZUltcGwqLCBSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiA+Q29uc3RydWN0b3JN
YXA7CisKKyAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKKyAgICBDb25zdHJ1Y3Rvck1hcCBtX2Nv
bnN0cnVjdG9yczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApp
bmRleCA0NTBhMmY4ZDg1YTkwODY1MjY1OGQ0OGNjZTVjZjBiNzY2MDc1NzkyLi42MjliMDg5ZTQx
MDhmNzdhZjg0ZWY4YjdhNDA0NjE2MTFiZmYxMzBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
QEAgLTQ2LDExICs0NiwxNCBAQAogI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgog
I2luY2x1ZGUgIkNvbnRleHRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgorI2lu
Y2x1ZGUgIkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkN1c3RvbUVsZW1l
bnRSZWdpc3RyeS5oIgogI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCiAjaW5jbHVkZSAi
RE9NTmFtZWRGbG93Q29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkRPTVNlbGVjdGlvbi5oIgogI2lu
Y2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRhdGVDb21wb25lbnRzLmgiCisjaW5jbHVk
ZSAiRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIkRvY3VtZW50RXZlbnRRdWV1ZS5oIgogI2luY2x1
ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgpAQCAt
ODY4LDYgKzg3MSwyMCBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+IERvY3VtZW50OjpjcmVhdGVFbGVt
ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgRXhjZXB0aW9uQwogICAgIHJldHVybiBjcmVh
dGVFbGVtZW50KFF1YWxpZmllZE5hbWUobnVsbEF0b20sIG5hbWUsIG51bGxBdG9tKSwgZmFsc2Up
OwogfQogCisjaWYgRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCitQYXNzUmVmUHRyPEN1c3Rv
bUVsZW1lbnRDb25zdHJ1Y3Rvcj4gRG9jdW1lbnQ6OnJlZ2lzdGVyRWxlbWVudChjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiByZWdpc3Rl
ckVsZW1lbnQobmFtZSwgRGljdGlvbmFyeSgpLCBlYyk7Cit9CisKK1Bhc3NSZWZQdHI8Q3VzdG9t
RWxlbWVudENvbnN0cnVjdG9yPiBEb2N1bWVudDo6cmVnaXN0ZXJFbGVtZW50KGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZSwgY29uc3QgRGljdGlvbmFyeSYgb3B0aW9ucywgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgaWYgKCFtX3JlZ2lzdHJ5KQorICAgICAgICBtX3JlZ2lzdHJ5ID0gYWRvcHRQ
dHIobmV3IEN1c3RvbUVsZW1lbnRSZWdpc3RyeSh0aGlzKSk7CisgICAgcmV0dXJuIG1fcmVnaXN0
cnktPnJlZ2lzdGVyRWxlbWVudChuYW1lLCBvcHRpb25zLCBlYyk7Cit9CisjZW5kaWYgLy8gRU5B
QkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCisKIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
RG9jdW1lbnQ6OmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKQogewogICAgIHJldHVybiBEb2N1bWVu
dEZyYWdtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDli
N2I5N2JkMTI4MDg2ZTQ5ZjQ4MTZiMGQzMmZkNTFmMzBjYzI3YzkuLjQzNWRiMDYyZjY2Y2M1Njk4
N2Q4ZGU5NjY4Y2NlODFiZmY5NTc2NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC02Nyw2ICs2
Nyw4IEBAIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQ7CiBjbGFzcyBDaGFyYWN0ZXJEYXRh
OwogY2xhc3MgQ29tbWVudDsKIGNsYXNzIENvbnRleHRGZWF0dXJlczsKK2NsYXNzIEN1c3RvbUVs
ZW1lbnRDb25zdHJ1Y3RvcjsKK2NsYXNzIEN1c3RvbUVsZW1lbnRSZWdpc3RyeTsKIGNsYXNzIERP
TUltcGxlbWVudGF0aW9uOwogY2xhc3MgRE9NTmFtZWRGbG93Q29sbGVjdGlvbjsKIGNsYXNzIERP
TVNlbGVjdGlvbjsKQEAgLTExNDgsNiArMTE1MCwxMyBAQCBwdWJsaWM6CiAgICAgVGV4dEF1dG9z
aXplciogdGV4dEF1dG9zaXplcigpIHsgcmV0dXJuIG1fdGV4dEF1dG9zaXplci5nZXQoKTsgfQog
I2VuZGlmCiAKKyNpZiBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKKyAgICBQYXNzUmVmUHRy
PEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gcmVnaXN0ZXJFbGVtZW50KGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8Q3VzdG9tRWxlbWVu
dENvbnN0cnVjdG9yPiByZWdpc3RlckVsZW1lbnQoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBj
b25zdCBEaWN0aW9uYXJ5JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0
cjxFbGVtZW50PiBjcmVhdGVDdXN0b21FbGVtZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFt
ZSk7CisgICAgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5KiByZWdpc3RyeSgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVnaXN0cnkuZ2V0KCk7IH0KKyNlbmRpZgorCiAgICAgdm9pZCBhZGp1c3RGbG9hdFF1YWRz
Rm9yU2Nyb2xsQW5kQWJzb2x1dGVab29tQW5kRnJhbWVTY2FsZShWZWN0b3I8RmxvYXRRdWFkPiYs
IFJlbmRlck9iamVjdCopOwogICAgIHZvaWQgYWRqdXN0RmxvYXRSZWN0Rm9yU2Nyb2xsQW5kQWJz
b2x1dGVab29tQW5kRnJhbWVTY2FsZShGbG9hdFJlY3QmLCBSZW5kZXJPYmplY3QqKTsKIApAQCAt
MTUxMyw2ICsxNTIyLDEwIEBAIHByaXZhdGU6CiAgICAgT3duUHRyPFRleHRBdXRvc2l6ZXI+IG1f
dGV4dEF1dG9zaXplcjsKICNlbmRpZgogCisjaWYgRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMp
CisgICAgT3duUHRyPEN1c3RvbUVsZW1lbnRSZWdpc3RyeT4gbV9yZWdpc3RyeTsKKyNlbmRpZgor
CiAgICAgYm9vbCBtX3NjaGVkdWxlZFRhc2tzQXJlU3VzcGVuZGVkOwogICAgIAogICAgIGJvb2wg
bV92aXN1YWxVcGRhdGVzQWxsb3dlZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9t
YWtlX25hbWVzLnBsIGIvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKaW5kZXggNzE1
YmE1NmU0NzBhZGJiZDEwMjA2MDRlMmEwZDYzMDc1MTU1YWU2ZS4uNzI4NWZiOGQxNWNlOWVhYmRh
MWRlOWYzN2I5YzRjMzI1YmY2NDlmOCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL21h
a2VfbmFtZXMucGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKQEAgLTEx
NzIsOCArMTE3Miw4IEBAIEVORAogOwogICAgIH0gZWxzaWYgKCR3cmFwcGVyRmFjdG9yeVR5cGUg
ZXEgIlY4IikgewogICAgICAgICBwcmludCBGIDw8RU5ECisjaW5jbHVkZSAiVjhIVE1MQ3VzdG9t
RWxlbWVudC5oIgogI2luY2x1ZGUgIlY4JHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnQuaCIK
LSAgICAgICAgCiAjaW5jbHVkZSA8djguaD4KIEVORAogOwpAQCAtMTI3NCw2ICsxMjc0LDExIEBA
IEVORAogICAgIHJldHVybiBWOFNWR0VsZW1lbnQ6OmNyZWF0ZVdyYXBwZXIoZWxlbWVudCwgY3Jl
YXRpb25Db250ZXh0LCBpc29sYXRlKTsKIEVORAogOworICAgICAgICB9IGVsc2lmICgkcGFyYW1l
dGVyc3tuYW1lc3BhY2V9IGVxICJIVE1MIikgeworICAgICAgICAgICAgcHJpbnQgRiA8PEVORAor
ICAgIHJldHVybiBWOEhUTUxDdXN0b21FbGVtZW50Ojp0b1Y4KGVsZW1lbnQsIGNyZWF0aW9uQ29u
dGV4dCwgaXNvbGF0ZSk7CitFTkQKKzsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHBy
aW50IEYgPDxFTkQKICAgICByZXR1cm4gd3JhcCh0byRwYXJhbWV0ZXJze2ZhbGxiYWNrSW50ZXJm
YWNlTmFtZX0oZWxlbWVudCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxEb2N1bWVudC5pZGwKaW5kZXggM2Q4MDUwYTExNDY2YWE3ZTNjYzU4NWUyMTAwZjJk
YWY0ZTNiMDRkYy4uY2M5MGY0Y2VmMjY1OWRmM2ZiNzMyNDg2OTMwZmJhMTU2MDc3NGI3MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaWRsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmlkbApAQCAtNTIsNiArNTIsMTEgQEAKICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgRWxlbWVudCBhY3RpdmVFbGVtZW50OwogICAgIGJvb2xlYW4gaGFz
Rm9jdXMoKTsKIAorI2lmIGRlZmluZWQoRU5BQkxFX0NVU1RPTV9ET01fRUxFTUVOVFMpICYmIEVO
QUJMRV9DVVNUT01fRE9NX0VMRU1FTlRTCisgICAgW1Y4RW5hYmxlZEF0UnVudGltZT1jdXN0b21E
T01FbGVtZW50cywgQ29uZGl0aW9uYWw9Q1VTVE9NX0RPTV9FTEVNRU5UUywgSW1wbGVtZW50ZWRB
cz1yZWdpc3RlckVsZW1lbnRdCisgICAgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yIHdlYmtpdFJl
Z2lzdGVyKGluIERPTVN0cmluZyBuYW1lLCBpbiBbT3B0aW9uYWxdIERpY3Rpb25hcnkgb3B0aW9u
cykgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisjZW5kaWYKKwogICAgIC8vIERlcHJlY2F0ZWQgYXR0
cmlidXRlcwogICAgICAgICAgICAgIFtUcmVhdE51bGxBcz1OdWxsU3RyaW5nXSBhdHRyaWJ1dGUg
RE9NU3RyaW5nIGJnQ29sb3I7CiAgICAgICAgICAgICAgW1RyZWF0TnVsbEFzPU51bGxTdHJpbmdd
IGF0dHJpYnV0ZSBET01TdHJpbmcgZmdDb2xvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vZmVhdHVyZXMuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMu
Z3lwaQppbmRleCA0ZjQzMTA2ZDM4NzUxZDRmNzU4OWRkNzJkYjNjZTJlNGYxZDRjYTFmLi43MjQ3
ZjY0YWU0YjM0NGNiZmMwYWJjMzBiYjdlNWMxZjViNTkzZTgyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9mZWF0dXJlcy5neXBpCkBAIC01MSw2ICs1MSw3IEBACiAgICAgICAnRU5BQkxFX0NTU19TSEFE
RVJTPTEnLAogICAgICAgJ0VOQUJMRV9DU1NfVkFSSUFCTEVTPTEnLAogICAgICAgJ0VOQUJMRV9D
U1NfU1RJQ0tZX1BPU0lUSU9OPTEnLAorICAgICAgJ0VOQUJMRV9DVVNUT01fRE9NX0VMRU1FTlRT
PTEnLAogICAgICAgJ0VOQUJMRV9DVVNUT01fU0NIRU1FX0hBTkRMRVI9MCcsCiAgICAgICAnRU5B
QkxFX0RBU0hCT0FSRF9TVVBQT1JUPTAnLAogICAgICAgJ0VOQUJMRV9EQVRBX1RSQU5TRkVSX0lU
RU1TPTEnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUnVu
dGltZUZlYXR1cmVzLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJSdW50aW1l
RmVhdHVyZXMuaAppbmRleCAyZjZlZjFjZTRlYTA5NGZkMWJjYTRmMTI4ZGEzNGU1MmE1MDk3NWFi
Li41MTI0MmQ0MjMzMDBlMzU2ZTg3NzhjMmJhODhkZjg1MTIwYjczMzllIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJSdW50aW1lRmVhdHVyZXMuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJSdW50aW1lRmVhdHVyZXMuaApAQCAtMTI3
LDYgKzEyNyw5IEBAIHB1YmxpYzoKICAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyB2b2lkIGVuYWJs
ZVNoYWRvd0RPTShib29sKTsKICAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBib29sIGlzU2hhZG93
RE9NRW5hYmxlZCgpOwogCisgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgdm9pZCBlbmFibGVDdXN0
b21ET01FbGVtZW50cyhib29sKTsKKyAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBib29sIGlzQ3Vz
dG9tRE9NRWxlbWVudHNFbmFibGVkKCk7CisKICAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyB2b2lk
IGVuYWJsZVN0eWxlU2NvcGVkKGJvb2wpOwogICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIGJvb2wg
aXNTdHlsZVNjb3BlZEVuYWJsZWQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViUnVudGltZUZlYXR1cmVzLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlJ1bnRpbWVGZWF0dXJlcy5jcHAKaW5kZXggYTE5NWRlMjkyOTA4MDBjMDUwM2YxMThi
MGIzNjM3MWYwYjI4NDZjOS4uMTUzMDNmYzEzNDQ3MzRhMzc1OTNmZWFkZmYyMGZmOWQyNDVmZDhl
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUnVudGltZUZlYXR1
cmVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJSdW50aW1lRmVhdHVy
ZXMuY3BwCkBAIC00NjcsNiArNDY3LDI1IEBAIGJvb2wgV2ViUnVudGltZUZlYXR1cmVzOjppc1No
YWRvd0RPTUVuYWJsZWQoKQogI2VuZGlmCiB9CiAKK3ZvaWQgV2ViUnVudGltZUZlYXR1cmVzOjpl
bmFibGVDdXN0b21ET01FbGVtZW50cyhib29sIGVuYWJsZSkKK3sKKyNpZiBFTkFCTEUoQ1VTVE9N
X0RPTV9FTEVNRU5UUykKKyAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzZXRDdXN0b21ET01F
bGVtZW50cyhlbmFibGUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZW5hYmxlKTsKKyNlbmRp
ZgorfQorCitib29sIFdlYlJ1bnRpbWVGZWF0dXJlczo6aXNDdXN0b21ET01FbGVtZW50c0VuYWJs
ZWQoKQoreworI2lmIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorICAgIHJldHVybiBSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpjdXN0b21ET01FbGVtZW50c0VuYWJsZWQoKTsKKyNlbHNlCisg
ICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKKwogdm9pZCBXZWJSdW50aW1lRmVhdHVyZXM6
OmVuYWJsZVN0eWxlU2NvcGVkKGJvb2wgZW5hYmxlKQogewogI2lmIEVOQUJMRShTVFlMRV9TQ09Q
RUQpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXgg
NDEyYzY2YmE1NzY3MDZiOTI0ZjljNDIxNjdhNjdhM2E0YWM3MzhmNy4uNzZhNzcyYmE2NmI2Y2Rm
ZDBmNzM3NGM1YTkxM2VjODljN2QxZWQ2NCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisr
KyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTExLTE5ICBIYWppbWUg
TW9ycml0YSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBbQ3VzdG9tIEVsZW1lbnRz
XSBJbXBsZW1lbnQgYmFyZS1ib25lIGRvY3VtZW50LnJlZ2lzdGVyKCkKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDIyOQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGVuYWJsZUN1c3RvbURPTUVs
ZW1lbnRzIGZsYWcuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hl
bGwuY3BwOgorICAgICAgICAoVGVzdFNoZWxsOjpUZXN0U2hlbGwpOgorCiAyMDEyLTExLTIwICBK
aW53b28gU29uZyAgPGppbndvbzcuc29uZ0BzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXVtX
SzJdIEFkZCBFd2tfV2luZG93X0ZlYXR1cmVzIEFQSSBhbmQgcmVsYXRlZCBVSSBjYWxsYmFja3MK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCmluZGV4IDc1ZmVj
MTMwYTA3YzU2Zjc5N2I0MzllZjRjOWVkYTJmY2QyMDQ5MmMuLjgyNTBhOTA4ZWJlOTlmNzRjNzY0
M2VkMDUzNDJjMDk5MDlkODk2YmQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RTaGVsbC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFNoZWxsLmNwcApAQCAtMTQ1LDYgKzE0NSw3IEBAIFRlc3RTaGVsbDo6VGVzdFNoZWxsKCkK
ICAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZVZpZGVvVHJhY2sodHJ1ZSk7CiAgICAgV2Vi
UnVudGltZUZlYXR1cmVzOjplbmFibGVHYW1lcGFkKHRydWUpOwogICAgIFdlYlJ1bnRpbWVGZWF0
dXJlczo6ZW5hYmxlU2hhZG93RE9NKHRydWUpOworICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5h
YmxlQ3VzdG9tRE9NRWxlbWVudHModHJ1ZSk7CiAgICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFi
bGVTdHlsZVNjb3BlZCh0cnVlKTsKICAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZVNjcmlw
dGVkU3BlZWNoKHRydWUpOwogICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlUmVxdWVzdEF1
dG9jb21wbGV0ZSh0cnVlKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAzOTYzYzYwZDM1Yjk2OGI5ZmM3NmMzODI1N2I1MTE1
Mjk2ZWI4MzZjLi4yNjdkNWFmNmEzYjM0ZmUyYjI0M2NhNTM2YWFjYjJmZjZiZmNjYzAzIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMTEtMTkgIEhhamltZSBNb3JyaXRhICA8bW9ycml0YUBn
b29nbGUuY29tPgorCisgICAgICAgIFtDdXN0b20gRWxlbWVudHNdIEltcGxlbWVudCBiYXJlLWJv
bmUgZG9jdW1lbnQucmVnaXN0ZXIoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTAwMjI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBmYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMu
aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVy
LWJhc2ljLWV4cGVjdGVkLnR4dDogQWRkZWQuCisKIDIwMTItMTEtMjAgIEFkYW0gS2xlaW4gIDxh
ZGFta0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0pTQ10gTXV0YXRpb25PYnNlcnZlciB3cmFw
cGVyIHNob3VsZCBub3QgYmUgY29sbGVjdGVkIHdoaWxlIHN0aWxsIG9ic2VydmluZwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLWJhc2lj
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdp
c3Rlci1iYXNpYy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTA1NTMxMWM2ZjlkYTg4MjI5MGQ1
MDJlYTNmZTQyNGRmNjk3MDdlOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1iYXNpYy1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSwzMiBAQAorVGVzdGluZyBkb2N1bWVudC5yZWdpc3RlcigpIGJhc2ljIGJlaGF2aW9ycy4KKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgZG9jdW1lbnQucmVnaXN0ZXIoJ2Zv
bycpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSW52YWxpZENoYXJhY3RlckVycm9yOiBET00gRXhj
ZXB0aW9uIDUuCitQQVNTIGRvY3VtZW50LnJlZ2lzdGVyKCd5LWZvbycpIHRocmV3IGV4Y2VwdGlv
biBFcnJvcjogSW52YWxpZENoYXJhY3RlckVycm9yOiBET00gRXhjZXB0aW9uIDUuCitQQVNTIGRv
Y3VtZW50LnJlZ2lzdGVyKCd4Zm9vJykgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJbnZhbGlkQ2hh
cmFjdGVyRXJyb3I6IERPTSBFeGNlcHRpb24gNS4KK1BBU1MgZG9jdW1lbnQucmVnaXN0ZXIoJ3kt
eC1mb28nKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IEludmFsaWRDaGFyYWN0ZXJFcnJvcjogRE9N
IEV4Y2VwdGlvbiA1LgorUEFTUyB0eXBlb2YgZm9vQ29uc3RydWN0b3IgaXMgJ2Z1bmN0aW9uJwor
UEFTUyBmb29Db25zdHJ1Y3Rvci5wcm90b3R5cGUgaXMgSFRNTFNwYW5FbGVtZW50LnByb3RvdHlw
ZQorUEFTUyBkb2N1bWVudC5yZWdpc3RlcigneC1mb28nKSB0aHJldyBleGNlcHRpb24gRXJyb3I6
IEludmFsaWRTdGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDExLgorUEFTUyBkb2N1bWVudC5yZWdp
c3RlcignWC1GT08nKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IEludmFsaWRTdGF0ZUVycm9yOiBE
T00gRXhjZXB0aW9uIDExLgorUEFTUyBmb29Db25zdHJ1Y3RvcigpIHRocmV3IGV4Y2VwdGlvbiBU
eXBlRXJyb3I6IERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1
bmN0aW9uLi4KK1BBU1MgY3JlYXRlZEZvby5fX3Byb3RvX18gaXMgZm9vQ29uc3RydWN0b3IucHJv
dG90eXBlCitQQVNTIGNyZWF0ZWRGb28uY29uc3RydWN0b3IgaXMgZm9vQ29uc3RydWN0b3IKK1BB
U1MgY3JlYXRlZEZvby50YWdOYW1lIGlzICdYLUZPTycKK1BBU1MgY3JlYXRlZEZvby50ZXh0Q29u
dGVudCBpcyAnSGVsbG8nCitQQVNTIGNyZWF0ZWRGb28ubGFzdENoaWxkIGlzIGNoaWxkRGl2CitQ
QVNTIHBhcnNlZEZvby5fX3Byb3RvX18gaXMgZm9vQ29uc3RydWN0b3IucHJvdG90eXBlCitQQVNT
IHBhcnNlZEZvby50YWdOYW1lIGlzICdYLUZPTycKK1BBU1MgcGFyc2VkRm9vLnNvbWVQcm9wZXJ0
eSBpcyBjb250YWluZXIuZmlyc3RDaGlsZC5zb21lUHJvcGVydHkKK1BBU1MgY3JlYXRlZEJhci50
YWdOYW1lIGlzICdYLUJBUicKK1BBU1MgY3JlYXRlZFVwcGVyQmFyLmNvbnN0cnVjdG9yIGlzIGJh
ckNvbnN0cnVjdG9yCitQQVNTIGNyZWF0ZWRVcHBlckJhci50YWdOYW1lIGlzICdYLUJBUicKK1BB
U1MgY3JlYXRlZE1peGVkQmFyLmNvbnN0cnVjdG9yIGlzIGJhckNvbnN0cnVjdG9yCitQQVNTIGNy
ZWF0ZWRNaXhlZEJhci50YWdOYW1lIGlzICdYLUJBUicKK1BBU1MgY29udGFpbmVyLmZpcnN0Q2hp
bGQuY29uc3RydWN0b3IgaXMgYmFyQ29uc3RydWN0b3IKK1BBU1MgY29udGFpbmVyLmZpcnN0Q2hp
bGQudGFnTmFtZSBpcyAnWC1CQVInCitQQVNTIGNvbnRhaW5lci5sYXN0Q2hpbGQuY29uc3RydWN0
b3IgaXMgYmFyQ29uc3RydWN0b3IKK1BBU1MgY29udGFpbmVyLmxhc3RDaGlsZC50YWdOYW1lIGlz
ICdYLUJBUicKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3Vt
ZW50LXJlZ2lzdGVyLWJhc2ljLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9j
dW1lbnQtcmVnaXN0ZXItYmFzaWMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMWU4YWY4ZjM5OWU2YjQ3ZTMy
M2Q3YTI3MTcxNjgxZTdjYzM4NGMxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLWJhc2ljLmh0bWwKQEAgLTAsMCArMSw4NCBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxk
aXYgaWQ9ImNvbnRhaW5lciI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3Rpbmcg
ZG9jdW1lbnQucmVnaXN0ZXIoKSBiYXNpYyBiZWhhdmlvcnMuIik7CisKK2lmICh3aW5kb3cudGVz
dFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKK2RvY3VtZW50LnJlZ2lzdGVy
ID0gZG9jdW1lbnQucmVnaXN0ZXIgfHwgZG9jdW1lbnQud2Via2l0UmVnaXN0ZXI7CisKKy8vIElu
dmFsaWQgbmFtZXMKK3Nob3VsZFRocm93KCJkb2N1bWVudC5yZWdpc3RlcignZm9vJykiLCAiJ0Vy
cm9yOiBJbnZhbGlkQ2hhcmFjdGVyRXJyb3I6IERPTSBFeGNlcHRpb24gNSciKTsKK3Nob3VsZFRo
cm93KCJkb2N1bWVudC5yZWdpc3RlcigneS1mb28nKSIsICInRXJyb3I6IEludmFsaWRDaGFyYWN0
ZXJFcnJvcjogRE9NIEV4Y2VwdGlvbiA1JyIpOworc2hvdWxkVGhyb3coImRvY3VtZW50LnJlZ2lz
dGVyKCd4Zm9vJykiLCAiJ0Vycm9yOiBJbnZhbGlkQ2hhcmFjdGVyRXJyb3I6IERPTSBFeGNlcHRp
b24gNSciKTsKK3Nob3VsZFRocm93KCJkb2N1bWVudC5yZWdpc3RlcigneS14LWZvbycpIiwgIidF
cnJvcjogSW52YWxpZENoYXJhY3RlckVycm9yOiBET00gRXhjZXB0aW9uIDUnIik7CisKK3ZhciBm
b29Db25zdHJ1Y3RvciA9IGRvY3VtZW50LnJlZ2lzdGVyKCJ4LWZvbyIpOworc2hvdWxkQmUoInR5
cGVvZiBmb29Db25zdHJ1Y3RvciIsICInZnVuY3Rpb24nIik7CitzaG91bGRCZSgiZm9vQ29uc3Ry
dWN0b3IucHJvdG90eXBlIiwgIkhUTUxTcGFuRWxlbWVudC5wcm90b3R5cGUiKTsKKworLy8gTmFt
ZSBjb25mbGljdHMKK3Nob3VsZFRocm93KCJkb2N1bWVudC5yZWdpc3RlcigneC1mb28nKSIsICIn
RXJyb3I6IEludmFsaWRTdGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDExJyIpOworc2hvdWxkVGhy
b3coImRvY3VtZW50LnJlZ2lzdGVyKCdYLUZPTycpIiwgIidFcnJvcjogSW52YWxpZFN0YXRlRXJy
b3I6IERPTSBFeGNlcHRpb24gMTEnIik7CisKKy8vIENhbGwgYXMgZnVuY3Rpb24KK3Nob3VsZFRo
cm93KCJmb29Db25zdHJ1Y3RvcigpIiwgIidUeXBlRXJyb3I6IERPTSBvYmplY3QgY29uc3RydWN0
b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLiciKQorCisvLyBDb25zdHJ1Y3RvciBp
bml0aWF0ZWQgaW5zdGFudGlhdGlvbgordmFyIGNyZWF0ZWRGb28gPSBuZXcgZm9vQ29uc3RydWN0
b3IoKTsKKworLy8gSlMgYnVpbHQtaW4gcHJvcGVydGllcworc2hvdWxkQmUoImNyZWF0ZWRGb28u
X19wcm90b19fIiwgImZvb0NvbnN0cnVjdG9yLnByb3RvdHlwZSIpOworc2hvdWxkQmUoImNyZWF0
ZWRGb28uY29uc3RydWN0b3IiLCAiZm9vQ29uc3RydWN0b3IiKTsKKworLy8gTmF0aXZlIGdldHRl
cgorc2hvdWxkQmUoImNyZWF0ZWRGb28udGFnTmFtZSIsICInWC1GT08nIik7CisKKy8vIE5hdGl2
ZSBzZXR0ZXIKK2NyZWF0ZWRGb28uaW5uZXJIVE1MID0gIkhlbGxvIjsKK3Nob3VsZEJlKCJjcmVh
dGVkRm9vLnRleHRDb250ZW50IiwgIidIZWxsbyciKTsKKworLy8gTmF0aXZlIG1ldGhvZAordmFy
IGNoaWxkRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CitjcmVhdGVkRm9vLmFw
cGVuZENoaWxkKGNoaWxkRGl2KTsKK3Nob3VsZEJlKCJjcmVhdGVkRm9vLmxhc3RDaGlsZCIsICJj
aGlsZERpdiIpOworCisvLyBQYXJzZXIgaW5pdGlhdGVkIGluc3RhbnRpYXRpb24KK3ZhciBjb250
YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGFpbmVyIik7Citjb250YWluZXIu
aW5uZXJIVE1MID0gIjx4LWZvbz48L3gtZm9vPiI7CitwYXJzZWRGb28gPSBjb250YWluZXIuZmly
c3RDaGlsZDsKKworc2hvdWxkQmUoInBhcnNlZEZvby5fX3Byb3RvX18iLCAiZm9vQ29uc3RydWN0
b3IucHJvdG90eXBlIik7CitzaG91bGRCZSgicGFyc2VkRm9vLnRhZ05hbWUiLCAiJ1gtRk9PJyIp
OworCisvLyBFbnN1cmluZyB0aGUgd3JhcHBlciBpcyByZXRhaW5lZAorcGFyc2VkRm9vLnNvbWVQ
cm9wZXJ0eSA9ICJoZWxsbyI7CitzaG91bGRCZSgicGFyc2VkRm9vLnNvbWVQcm9wZXJ0eSIsICJj
b250YWluZXIuZmlyc3RDaGlsZC5zb21lUHJvcGVydHkiKTsKKworLy8gSGF2aW5nIGFub3RlaHIg
Y29uc3RydWN0b3IKK3ZhciBiYXJDb25zdHJ1Y3RvciA9IGRvY3VtZW50LnJlZ2lzdGVyKCJ4LWJh
ciIpOwordmFyIGNyZWF0ZWRCYXIgPSBuZXcgYmFyQ29uc3RydWN0b3IoKTsKK3Nob3VsZEJlKCJj
cmVhdGVkQmFyLnRhZ05hbWUiLCAiJ1gtQkFSJyIpOworCisvLyBXaXRoIGlycmVndWxhciBjYXNl
cwordmFyIGNyZWF0ZWRVcHBlckJhciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlgtQkFSIik7
Cit2YXIgY3JlYXRlZE1peGVkQmFyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiWC1CYXIiKTsK
K3Nob3VsZEJlKCJjcmVhdGVkVXBwZXJCYXIuY29uc3RydWN0b3IiLCAiYmFyQ29uc3RydWN0b3Ii
KTsKK3Nob3VsZEJlKCJjcmVhdGVkVXBwZXJCYXIudGFnTmFtZSIsICInWC1CQVInIik7CitzaG91
bGRCZSgiY3JlYXRlZE1peGVkQmFyLmNvbnN0cnVjdG9yIiwgImJhckNvbnN0cnVjdG9yIik7Citz
aG91bGRCZSgiY3JlYXRlZE1peGVkQmFyLnRhZ05hbWUiLCAiJ1gtQkFSJyIpOworCitjb250YWlu
ZXIuaW5uZXJIVE1MID0gIjxYLUJBUj48L1gtQkFSPjxYLUJhcj48L1gtQmFyPiI7CitzaG91bGRC
ZSgiY29udGFpbmVyLmZpcnN0Q2hpbGQuY29uc3RydWN0b3IiLCAiYmFyQ29uc3RydWN0b3IiKTsK
K3Nob3VsZEJlKCJjb250YWluZXIuZmlyc3RDaGlsZC50YWdOYW1lIiwgIidYLUJBUiciKTsKK3No
b3VsZEJlKCJjb250YWluZXIubGFzdENoaWxkLmNvbnN0cnVjdG9yIiwgImJhckNvbnN0cnVjdG9y
Iik7CitzaG91bGRCZSgiY29udGFpbmVyLmxhc3RDaGlsZC50YWdOYW1lIiwgIidYLUJBUiciKTsK
KworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175368</attachid>
            <date>2012-11-21 01:21:47 -0800</date>
            <delta_ts>2013-01-28 20:41:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100229-20121121181934.patch</filename>
            <type>text/plain</type>
            <size>72378</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1MzU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzA2NThmZDE3MWU1Yzk5
MjZmODYwYTczZDRkMWJmZDAyMTkzZjdjZC4uZWUyZWI3MjE0Njg3NjI5YTJhNTFmOWRjYmRkMjJk
YmFmMDc0MTBlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1NyBAQAorMjAxMi0xMS0xOSAgSGFq
aW1lIE1vcnJpdGEgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgW0N1c3RvbSBFbGVt
ZW50c10gSW1wbGVtZW50IGJhcmUtYm9uZSBkb2N1bWVudC5yZWdpc3RlcigpCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDAyMjkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNoYW5nZSBpbXBsZW1l
bnRzIHByZWZpeGVkIHZlcnNpb24gb2YgZG9jdW1lbnQucmVnaXRlcigpLCB3aXRoIG1pbmltYWwg
ZmVhdHVyZSBzdXBwb3J0LgorICAgICAgICAtIFRoZSBmZWF0dXJlIGlzIGd1YXJkZWQgYnkgRU5B
QkxFKENVU1RPTV9ET01fRUxNRU5UUykgYW5kIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmN1c3Rv
bURPTUVsZW1lbnRzRW5hYmxlZCgpLgorICAgICAgICAtIFRoaXMgYmFyZS1ib25lIHZlcnNpb24g
b25seSByZWNvZ25pemVzICJuYW1lIiBwYXJhbXRlciBhbmQgaWdub3JlcyBhbnkgb3B0aW9uYWwg
cGFyYW1ldGVycy4KKyAgICAgICAgLSBDdXJyZW50bHkgb25seSBWOCBpcyBzdXBwb3J0ZWQuIEpT
QyBiaW5kaW5nIG5lZWRzIGl0cyBvd24gYmluZGluZyBpbXBsZW1lbnRhdGlvbi4KKworICAgICAg
ICA9IE1ham9yIG5ldyBjbGFzc2VzIHVuZGVyIGRvbS86CisKKyAgICAgICAgVGhlIGRvbSBtb2R1
bGUgaGFzIHR3byBuZXcgY2xhc3NlczoKKyAgICAgICAgLSBDdXN0b21FbGVtZW50Q29uc3RydWN0
b3I6IEEgcmV0dXJuIHZhbHVlIG9mIGRvY3VtZW50LnJlZ2lzdGVyKCkKKyAgICAgICAgICB3aGlj
aCBob2xkcyB0aGUgY3VzdG9tIGVsZW1lbnQgZGVmaW5pdGlvbi4KKyAgICAgICAgLSBDdXN0b21F
bGVtZW50UmVnaXN0cnk6IEEgY29sbGVjdGlvbiBvZiBDdXN0b21FbGVtZW50Q29uc3RydWN0b3Ig
b2JqZWN0cy4KKyAgICAgICAgICBDdXN0b21FbGVtZW50UmVnaXN0cnkgaW5zdGFuY2UgaXMgY3Jl
YXRlZCBwZXIgRG9jdW1lbnQgYW5kIGl0IGlzIG93bmVkIGJ5IHRoZSBEb2N1bWVudC4KKworICAg
ICAgICBDdXN0b21FbGVtZW50Q29uc3RydWN0b3Iga25vd3MgdGhlIGRlZmluaXRpb24gb2YgZWFj
aCBjdXN0b20KKyAgICAgICAgZWxlbWVudCwgd2hpY2ggaXMgcmVnaXN0ZXJlZCBieSBkb2N1bWVu
dC5yZWdpc3RlcigpLiBUaGUgbmFtZSBhbmQKKyAgICAgICAgb3RoZXIgb3B0aW9ucyBhcmUgaGVs
ZCBieSB0aGlzIG9iamVjdC4gQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5IG93bnMgYSBzZXQKKyAgICAg
ICAgb2YgdGhlIHJlZ2lzdGVyZWQgY29uc3RydWN0b3JzLiBUaGUgcmVnaXN0cnkgZ3VhcmFudGVl
cyBpbnZhcmlhbnRzCisgICAgICAgIGxpa2UgdW5pcXVlbmVzcyBvZiB0aGUgZWxlbWVudCBuYW1l
cy4KKworICAgICAgICA9IENoYW5nZSBvbiBtYWtlX25hbWVzLnBsCisKKyAgICAgICAgVGhpcyBj
aGFnbmUgdHdlYWtzIG1ha2VfbmFtZXMucGwgKG9yIGdlbmVyYXRlZCBIVE1MRWxlbWVudEZhY3Rv
cnkpCisgICAgICAgIHRvIGhvb2sgdGhlIGNyZWF0aW9ucyBvZiB1bmtub3duIGVsZW1lbnRzLiBT
b21lIG9mIGVsZW1lbnQgbmFtZXMKKyAgICAgICAgd2hpY2ggY29tZSB0byB0aGUgZmFsbGJhY2sg
cGF0aCBjYW4gYmUgb25lIG9mIHJlZ2lzdGVyZWQgY3VzdG9tCisgICAgICAgIGVsZW1lbnQuCisK
KyAgICAgICAgPSBbVjhXcmFwQXNGdW5jdGlvbl0gZXh0ZW5kZWQgYXR0cmlidXRlOgorCisgICAg
ICAgIFRoZSBkb2N1bWVudC5yZWdpc3RlcigpIEFQSSByZXR1cm5zIGEgY29uc3RydWN0b3IKKyAg
ICAgICAgZnVuY3Rpb24uIEhvd2V2ZXIsIHRoZSBWOCBiaW5kaW5nIGN1cnJlbnRseSBkb2Vzbid0
IHN1cHBvcnQgaXQuIFRvCisgICAgICAgIG1ha2UgaXQgcG9zc2libGUsIHRoaXMgY2hhbmdlIGlu
dHJvZHVjZXMgIlY4V3JhcEFzRnVuY3Rpb24iCisgICAgICAgIGV4dGVuZGVkIGF0dHJpYnV0ZSBm
b3IgYW5ub3RhdGluZyBDdXN0b21FbGVtZW50Q29uc3RydWN0b3IgSURMCisgICAgICAgIGludGVy
ZmFjZS4KKworICAgICAgICBWOFdyYXBBc0Z1bmN0aW9uIHdyYXBzIHRoZSBhbm5vdGF0ZWQgaW50
ZXJmYWNlIHdpdGggYSBKYXZhU2NpcnB0CisgICAgICAgIGZ1bmN0aW9uLCB3aGljaCBjYWxscyB0
aGUgb3JpZ2luYWwgb2JqZWN0IGFzIGEgZnVuY3Rpb24gb3IgYQorICAgICAgICBjb25zdHJ1Y3Rv
ciBkZXBlbmRzIG9uIHRoZSBjYWxsIHNpdGUuCisKKyAgICAgICAgV2l0aCB0aGlzIHdyYXBwZXIg
ZnVuY3Rpb24sIHRoZXJlIGlzIHR3byBsZXZlbCBvZiBpbmRpcmVjdGlvbgorICAgICAgICBiZXR3
ZWVuIG5hdGl2ZSBDKysgb2JqZWN0IGFuZCBhdXRob3ItdmlzaWJsZSBKUyBmdW5jdGlvbjoKKwor
ICAgICAgICBbSlMgQWRhcHRvciBGdWN0aW9uXSA8LShoaWRkZW4gcHJvcGVydHkpLT4gW0pTIFdy
YXBwZXIgT2JqZWN0XSAtKGludGVybmFsIGZpZWxkKS0+IFtDKysgTmF0aWUgb2JqZWN0XQorCisg
ICAgICAgIFRoZSBjb2RlIGdlbmVyYXRvciBnZW5lcmF0ZXMgdGhlIGJpbmRpbmcgY29kZSB3aGlj
aCBkZWFscyB3aXRoCisgICAgICAgIHRoaXMgaW5kaXJlY3Rpb24uICBBbHNvLCB0aGVyZSBpcyBh
IHNldCBvZiBoZWxwZXIgZnVuY3Rpb25zIGluCisgICAgICAgIFY4QWRhcHRvckZ1bmN0aW9uLmgv
Y3BwIHdoaWNoIHRha2UgY2FyZSBvZiB0aGlzIGluZGlyZWN0aW9uLgorICAgICAgICBWOERPTVdy
YXBwZXIuY3BwL2ggd29ya3MgYXMgYSBmYWNhZGUgZm9yIHRoZXNlIEFQSXMgYW5kIHVzZWQgZnJv
bQorICAgICAgICB0aGUgZ2VuZXJhdGVkIGNvZGUuCisKKyAgICAgICAgPSBWOEhUTUxDdXN0b21F
bGVtZW50CisKKyAgICAgICAgVW5saWtlIGJ1aWx0LWluIEhUTUwgZWxlbWVudHMsIGFueSBjdXN0
b20gZWxlbWVudCBoYXMgbm8KKyAgICAgICAgY29ycmVzcG9uZGluZyBDKysgY2xhc3MuIEluc3Rl
YWQsIGRvY3VtZW50LnJlZ2lzdGVyKCkgc2hvdWxkIGFsbG93CisgICAgICAgIHBhc3NpbmcgYSBw
cm90b3R5cGUgb2JqZWN0IGZvciB0aGUgZWxlbWVudHMgYmVpbmcgcmVnaXN0ZXJlZC4KKworICAg
ICAgICBBbHRob3VnaCB0aGlzIGZpcnN0IHZlcnNpb24gZG9lc24ndCBzdXBwb3J0IHRoZSBvcHRp
bmFsIHByb3RvdHlwZQorICAgICAgICBwYXJhbWV0ZXIgeWV0LCBWOEhUTUxDdXN0b21FbGVtZW50
IGhlbHBlciBjbGFzcyBpcyBhIHBsdW1iaW5nIGZvcgorICAgICAgICBpdC4gVGhpcyBjbGFzcyBl
bmNhcHN1bGF0ZXMgSlMgd3JhcHBlciBvYmplY3QgY3JlYXRpb24gZm9yIGN1c3RvbQorICAgICAg
ICBlbGVtZW1lbnQgaW5zdGFuY2VzLiBGb3IgZXhhbXBsZSwgaXQgdGFrZXMgY2FyZSBvZiBwcm90
b3R5cGUgY2hhaW4KKyAgICAgICAgc2V0dXAuIEFzIHdlIHN1cHBvcnQgdGhlICJwcm90b3R5cGUi
IG9wdGlvbmFsIHBhcmFtZXRlciBmb3IKKyAgICAgICAgZG9jdW1lbnQucmVnaXN0ZXIoKSBpbiBm
dXJ0dXJlIGNoYW5nZXMsIHRoaXMgcGx1bWJpbmcgd2lsbCBiZQorICAgICAgICBleHRlbmRlZC4K
KworICAgICAgICBUZXN0OiBmYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMu
aHRtbAorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBXZWJDb3Jl
Lmd5cGk6CisgICAgICAgICogYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL2dlbmVyaWMvUnVu
dGltZUVuYWJsZWRGZWF0dXJlcy5oOgorICAgICAgICAoUnVudGltZUVuYWJsZWRGZWF0dXJlcyk6
CisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpjdXN0b21ET01FbGVt
ZW50c0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2V0Q3VzdG9tRE9NRWxlbWVudHMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvclY4LnBtOgorICAgICAgICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQ6CisgICAgICAgICogYmluZGluZ3MvdjgvQ3Vz
dG9tRWxlbWVudEhlbHBlcnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudEhlbHBlcnM6OmRlZmF1bHRQcm90b3R5cGUpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChDdXN0b21FbGVtZW50SGVscGVycyk6CisgICAgICAgICog
YmluZGluZ3MvdjgvVjhBZGFwdG9yRnVuY3Rpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6VjhBZGFwdG9yRnVuY3Rpb246OmdldFRlbXBsYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlY4QWRhcHRvckZ1bmN0aW9uOjpjb25maWd1cmVUZW1wbGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpWOEFkYXB0b3JGdW5jdGlvbjo6aW52b2NhdGlvbkNhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OlY4QWRhcHRvckZ1bmN0aW9uOjp3cmFwKToKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoVjhBZGFwdG9yRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6VjhB
ZGFwdG9yRnVuY3Rpb246OnVud3JhcCk6CisgICAgICAgIChXZWJDb3JlOjpWOEFkYXB0b3JGdW5j
dGlvbjo6Z2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjp0b0Z1bmN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpmcm9tRnVuY3Rpb24pOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oOgorICAgICAgICAoVjhET01XcmFwcGVy
KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4SFRNTEN1c3RvbUVsZW1l
bnQ6OmNyZWF0ZVdyYXBwZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4SFRNTEN1c3RvbUVs
ZW1lbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFY4SFRNTEN1c3Rv
bUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6VjhIVE1MQ3VzdG9tRWxlbWVudDo6dG9WOCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ3VzdG9tRWxlbWVudDo6dG9WOCk6CisgICAgICAgICog
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yQ3VzdG9tLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9tRWxl
bWVudENvbnN0cnVjdG9yOjpjYWxsQXNGdW5jdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKiBkb20v
Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Q3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6
fkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVt
ZW50Q29uc3RydWN0b3I6OndpbGxEZXN0cm95RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjpjcmVhdGVFbGVtZW50KToKKyAgICAgICAgKiBkb20v
Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChDdXN0b21FbGVtZW50Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vz
dG9tRWxlbWVudENvbnN0cnVjdG9yOjpkb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0
b21FbGVtZW50Q29uc3RydWN0b3I6OnRhZ05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9t
RWxlbWVudENvbnN0cnVjdG9yOjpuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1l
bnRDb25zdHJ1Y3Rvcjo6cHJvdG90eXBlKToKKyAgICAgICAgKiBkb20vQ3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yLmlkbDogQWRkZWQuCisgICAgICAgICogZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3Ry
eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0
b21FbGVtZW50UmVnaXN0cnk6OkN1c3RvbUVsZW1lbnRSZWdpc3RyeSk6CisgICAgICAgIChXZWJD
b3JlOjpDdXN0b21FbGVtZW50UmVnaXN0cnk6On5DdXN0b21FbGVtZW50UmVnaXN0cnkpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5Ojpjb25zdHJ1Y3Rvck9mKToKKyAg
ICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6cmVnaXN0ZXJFbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6ZmluZCk6CisgICAgICAg
IChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVnaXN0cnk6OmNyZWF0ZUVsZW1lbnQpOgorICAgICAg
ICAqIGRvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKEN1c3RvbUVsZW1lbnRSZWdpc3RyeSk6CisgICAgICAgICogZG9tL0RvY3Vt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OnJlZ2lzdGVyRWxlbWVudCk6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKERvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
OjpyZWdpc3RyeSk6CisgICAgICAgICogZG9tL21ha2VfbmFtZXMucGw6CisgICAgICAgIChwcmlu
dFdyYXBwZXJGYWN0b3J5Q3BwRmlsZSk6CisgICAgICAgICogaHRtbC9Eb2N1bWVudC5pZGw6CisK
IDIwMTItMTEtMjAgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFtWOF0gUmVtb3ZlIHY4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuY3Bw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDdkODNlZWQwZWJkOTY2YWNlMDkwYTczYTBi
ZThmMmY0Y2JhMTIzMTQuLjI1Zjk2YmJlMTg2MDY4YTM2ZDRkZWE2MTIwNjc4NDIxNzkxNGFjMWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTItMTEtMTkg
IEhhamltZSBNb3JyaXRhICA8bW9ycml0YUBnb29nbGUuY29tPgorCisgICAgICAgIFtDdXN0b20g
RWxlbWVudHNdIEltcGxlbWVudCBiYXJlLWJvbmUgZG9jdW1lbnQucmVnaXN0ZXIoKQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwMjI5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgZW5hYmxlQ3Vz
dG9tRE9NRWxlbWVudHMgZmxhZy4KKworICAgICAgICAqIGZlYXR1cmVzLmd5cGk6CisgICAgICAg
ICogcHVibGljL1dlYlJ1bnRpbWVGZWF0dXJlcy5oOgorICAgICAgICAoV2ViUnVudGltZUZlYXR1
cmVzKToKKyAgICAgICAgKiBzcmMvV2ViUnVudGltZUZlYXR1cmVzLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVDdXN0b21ET01FbGVtZW50cyk6CisgICAg
ICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJSdW50aW1lRmVhdHVyZXM6OmlzQ3Vz
dG9tRE9NRWxlbWVudHNFbmFibGVkKToKKwogMjAxMi0xMS0yMCAgUmFjaGVsIEJsdW0gIDxncm9i
eUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBOZWVkIHNwZWxsY2hlY2sgc3Vn
Z2VzdGlvbnMgZXZlbiBpZiBjb250aW51b3VzIGNoZWNrIGlzIG9mZi4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCmluZGV4IGY4ZDlhZTcyNWRlMzk1ZGNmNTU3YzQwY2Y5Mjg0MmQwNjUxNDg2
NmQuLjMzYTQ2NTI4YjQ3YjBiOTc2MGE0NzljMzg0Y2Y2ZGZlYjhiMzNkMDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
RGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMjA1LDYgKzIwNSw3IEBAIEJJTkRJTkdfSURMUyA9IFwK
ICAgICAkKFdlYkNvcmUpL2RvbS9DbGlwYm9hcmQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2RvbS9D
b21tZW50LmlkbCBcCiAgICAgJChXZWJDb3JlKS9kb20vQ29tcG9zaXRpb25FdmVudC5pZGwgXAor
ICAgICQoV2ViQ29yZSkvZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5pZGwgXAogICAgICQo
V2ViQ29yZSkvZG9tL0N1c3RvbUV2ZW50LmlkbCBcCiAgICAgJChXZWJDb3JlKS9kb20vRE9NQ29y
ZUV4Y2VwdGlvbi5pZGwgXAogICAgICQoV2ViQ29yZSkvZG9tL0RPTUVycm9yLmlkbCBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKaW5kZXggYTI3N2IxNzU3NWE5NDM5ZGE2NzJhYjc2YTZlNThlMDczOWExNTcyNS4u
YTE3NGVlOGI1YWMxMGYyMWU1OTg2OWM1ODRkMWUyMWIyYjk2YTlkMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQpAQCAtOTgyLDYgKzk4Miw3IEBACiAgICAgICAgICAgICAnZG9tL0NsaXBib2FyZC5pZGwnLAog
ICAgICAgICAgICAgJ2RvbS9Db21tZW50LmlkbCcsCiAgICAgICAgICAgICAnZG9tL0NvbXBvc2l0
aW9uRXZlbnQuaWRsJywKKyAgICAgICAgICAgICdkb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9y
LmlkbCcsCiAgICAgICAgICAgICAnZG9tL0N1c3RvbUV2ZW50LmlkbCcsCiAgICAgICAgICAgICAn
ZG9tL0RPTUNvcmVFeGNlcHRpb24uaWRsJywKICAgICAgICAgICAgICdkb20vRE9NRXJyb3IuaWRs
JywKQEAgLTIyMDksNiArMjIxMCw4IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvQXJyYXlW
YWx1ZS5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9CaW5kaW5nU3RhdGUuY3BwJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9CaW5kaW5nU3RhdGUuaCcsCisgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvQ3VzdG9tRWxlbWVudEhlbHBlcnMuY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5n
cy92OC9DdXN0b21FbGVtZW50SGVscGVycy5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9E
T01EYXRhU3RvcmUuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9ET01EYXRhU3RvcmUu
aCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvRE9NUmVxdWVzdFN0YXRlLmgnLApAQCAtMjI3
Nyw2ICsyMjgwLDggQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9TaGFyZWRQZXJzaXN0ZW50
LmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmNw
cCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaCcs
CisgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhBZGFwdG9yRnVuY3Rpb24uY3BwJywKKyAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5oJywKICAgICAgICAgICAgICdi
aW5kaW5ncy92OC9WOEJpbmRpbmcuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEJp
bmRpbmcuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhCaW5kaW5nTWFjcm9zLmgnLApA
QCAtMjI4NCw2ICsyMjg5LDcgQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOENhbGxiYWNr
LmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4Q29sbGVjdGlvbi5jcHAnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L1Y4Q29sbGVjdGlvbi5oJywKKyAgICAgICAgICAgICdiaW5kaW5n
cy92OC9WOENvbnRleHREaXNwb3NhYmxlLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4
RGVwZW5kZW50UmV0YWluZWQuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhET01Db25m
aWd1cmF0aW9uLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhET01Db25maWd1cmF0
aW9uLmgnLApAQCAtMjI5OSw2ICsyMzA1LDggQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9W
OEdDQ29udHJvbGxlci5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEdDRm9yQ29udGV4
dERpc3Bvc2UuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEdDRm9yQ29udGV4dERp
c3Bvc2UuaCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVudC5j
cHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4SFRNTEN1c3RvbUVsZW1lbnQuaCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuY3BwJywKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oJywKICAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmNwcCcsCkBAIC0yMzU1LDYgKzIzNjMs
NyBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENsaXBib2FyZEN1c3RvbS5j
cHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENvbnNvbGVDdXN0b20uY3Bw
JywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDb29yZGluYXRlc0N1c3RvbS5j
cHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUVsZW1lbnRDb25z
dHJ1Y3RvckN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1
c3RvbUV2ZW50Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAnLAogICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAnLApAQCAtMzc5Myw2ICsz
ODAyLDEwIEBACiAgICAgICAgICAgICAnZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcCcs
CiAgICAgICAgICAgICAnZG9tL0NvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyLmNwcCcsCiAgICAg
ICAgICAgICAnZG9tL0Nyb3NzVGhyZWFkVGFzay5oJywKKyAgICAgICAgICAgICdkb20vQ3VzdG9t
RWxlbWVudENvbnN0cnVjdG9yLmNwcCcsCisgICAgICAgICAgICAnZG9tL0N1c3RvbUVsZW1lbnRD
b25zdHJ1Y3Rvci5oJywKKyAgICAgICAgICAgICdkb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmNw
cCcsCisgICAgICAgICAgICAnZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5oJywKICAgICAgICAg
ICAgICdkb20vQ3VzdG9tRXZlbnQuY3BwJywKICAgICAgICAgICAgICdkb20vQ3VzdG9tRXZlbnQu
aCcsCiAgICAgICAgICAgICAnZG9tL0RPTUFsbEluT25lLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNw
cAppbmRleCBlYTM2NzllMmQwMzcwYjUwMjEzNDY5OGQ0ZmMyYWNhZjMwNWI4NzhiLi45ZDlmOTIz
MTBjMDgwOWNkYjgwY2JjYTU0YjdlMWZmNjI5YzcxY2FlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHAK
QEAgLTE4OCw2ICsxODgsMTAgQEAgYm9vbCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjppc1NoYWRv
d0RPTUVuYWJsZWQgPSBmYWxzZTsKIGJvb2wgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6aXNBdXRo
b3JTaGFkb3dET01Gb3JBbnlFbGVtZW50RW5hYmxlZCA9IGZhbHNlOwogI2VuZGlmCiAKKyNpZiBF
TkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKK2Jvb2wgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
aXNDdXN0b21ET01FbGVtZW50c0VuYWJsZWQgPSBmYWxzZTsKKyNlbmRpZgorCiAjaWYgRU5BQkxF
KFNUWUxFX1NDT1BFRCkKIGJvb2wgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6aXNTdHlsZVNjb3Bl
ZEVuYWJsZWQgPSBmYWxzZTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaAppbmRleCBiYjk1Y2U4NDU2
Y2I5MjNjYjkwMzAwNGExZmFlZjZmZTc5ODMxYjQ0Li44YTYwNmEzZDVjYjhjM2Q1MjMzNGZiMmJi
MmQ2ZGMyYmVhNjdiOTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5l
cmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaApAQCAtMjA3LDYgKzIwNywxMSBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0QXV0aG9yU2hhZG93RE9NRm9yQW55RWxlbWVudEVu
YWJsZWQoYm9vbCBpc0VuYWJsZWQpIHsgaXNBdXRob3JTaGFkb3dET01Gb3JBbnlFbGVtZW50RW5h
YmxlZCA9IGlzRW5hYmxlZDsgfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVN
RU5UUykKKyAgICBzdGF0aWMgYm9vbCBjdXN0b21ET01FbGVtZW50c0VuYWJsZWQoKSB7IHJldHVy
biBpc0N1c3RvbURPTUVsZW1lbnRzRW5hYmxlZDsgfQorICAgIHN0YXRpYyB2b2lkIHNldEN1c3Rv
bURPTUVsZW1lbnRzKGJvb2wgaXNFbmFibGVkKSB7IGlzQ3VzdG9tRE9NRWxlbWVudHNFbmFibGVk
ID0gaXNFbmFibGVkOyB9CisjZW5kaWYKKwogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCiAgICAg
c3RhdGljIGJvb2wgc3R5bGVTY29wZWRFbmFibGVkKCkgeyByZXR1cm4gaXNTdHlsZVNjb3BlZEVu
YWJsZWQ7IH0KICAgICBzdGF0aWMgdm9pZCBzZXRTdHlsZVNjb3BlZEVuYWJsZWQoYm9vbCBpc0Vu
YWJsZWQpIHsgaXNTdHlsZVNjb3BlZEVuYWJsZWQgPSBpc0VuYWJsZWQ7IH0KQEAgLTMyMSw2ICsz
MjYsMTAgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCBpc0F1dGhvclNoYWRvd0RPTUZvckFu
eUVsZW1lbnRFbmFibGVkOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5U
UykKKyAgICBzdGF0aWMgYm9vbCBpc0N1c3RvbURPTUVsZW1lbnRzRW5hYmxlZDsKKyNlbmRpZgor
CiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKICAgICBzdGF0aWMgYm9vbCBpc1N0eWxlU2NvcGVk
RW5hYmxlZDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCAxOWM5MGJlMDU3NjM2MTIyNmEwNzMyNzQ4NDY4YTdk
ZTFmYjZjYWNkLi43ZTZlMzY1OTY3Yjg5NzgzMDlhODhhMjU3OTViYjUyZTBmMmE1Yjc1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bQpAQCAtMzU0LDEzICszNTQsMjAgQEAgRU5ECiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICJmYWxzZTtcbiIpOwogICAgIH0KIAorICAgIG15ICRmcm9tRnVuY3Rpb25PcGVuaW5nID0gIiI7
CisgICAgbXkgJGZyb21GdW5jdGlvbkNsb3NpbmcgPSAiIjsKKyAgICBpZiAoJGludGVyZmFjZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlY4V3JhcEFzRnVuY3Rpb24ifSkgeworICAgICAgICAkZnJv
bUZ1bmN0aW9uT3BlbmluZyA9ICJWOERPTVdyYXBwZXI6OmZyb21GdW5jdGlvbigiOworICAgICAg
ICAkZnJvbUZ1bmN0aW9uQ2xvc2luZyA9ICIpIjsKKyAgICB9CisKICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCA8PEVORCk7CiAgICAgc3RhdGljIGJvb2wgSGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2
ODo6VmFsdWU+KTsKICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IEdldFJhd1RlbXBsYXRlKCk7CiAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiBHZXRUZW1wbGF0ZSgpOwogICAgIHN0YXRpYyAke25hdGl2ZVR5cGV9KiB0
b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PCR7bmF0aXZlVHlwZX0qPihvYmplY3QtPkdldEFsaWduZWRQ
b2ludGVyRnJvbUludGVybmFsRmllbGQodjhET01XcmFwcGVyT2JqZWN0SW5kZXgpKTsKKyAgICAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8JHtuYXRpdmVUeXBlfSo+KCR7ZnJvbUZ1bmN0aW9u
T3BlbmluZ31vYmplY3Qke2Zyb21GdW5jdGlvbkNsb3Npbmd9LT5HZXRBbGlnbmVkUG9pbnRlckZy
b21JbnRlcm5hbEZpZWxkKHY4RE9NV3JhcHBlck9iamVjdEluZGV4KSk7CiAgICAgfQogICAgIHN0
YXRpYyB2b2lkIGRlcmVmT2JqZWN0KHZvaWQqKTsKICAgICBzdGF0aWMgV3JhcHBlclR5cGVJbmZv
IGluZm87CkBAIC01MzUsNiArNTQyLDkgQEAgRU5ECiAKICAgICAgICAgbXkgJGdldENhY2hlZFdy
YXBwZXIgPSAkY29kZUdlbmVyYXRvci0+SXNTdWJUeXBlKCRpbnRlcmZhY2UsICJOb2RlIikgPyAi
RE9NRGF0YVN0b3JlOjpnZXROb2RlKGltcGwsIGlzb2xhdGUpIiA6ICJET01EYXRhU3RvcmU6OmN1
cnJlbnQoaXNvbGF0ZSktPmdldChpbXBsKSI7CiAgICAgICAgIG15ICRjcmVhdGVXcmFwcGVyQ2Fs
bCA9ICRjdXN0b21XcmFwID8gIiR7djhJbnRlcmZhY2VOYW1lfTo6d3JhcCIgOiAiJHt2OEludGVy
ZmFjZU5hbWV9OjpjcmVhdGVXcmFwcGVyIjsKKyAgICAgICAgbXkgJHJldHVybmluZ1dyYXBwZXIg
PSAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVjhXcmFwQXNGdW5jdGlvbiJ9ID8g
IlY4RE9NV3JhcHBlcjo6dG9GdW5jdGlvbih3cmFwcGVyKSIgOiAid3JhcHBlciI7CisgICAgICAg
IG15ICRyZXR1cm5pbmdDcmVhdGVkV3JhcHBlckJlZ2luID0gJGludGVyZmFjZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IlY4V3JhcEFzRnVuY3Rpb24ifSA/ICJWOERPTVdyYXBwZXI6OnRvRnVuY3Rp
b24oIiA6ICIiOworICAgICAgICBteSAkcmV0dXJuaW5nQ3JlYXRlZFdyYXBwZXJFbmQgPSAkaW50
ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVjhXcmFwQXNGdW5jdGlvbiJ9ID8gIiwgaW1w
bC0+cHJvdG90eXBlKCkudjhWYWx1ZSgpLCBpbXBsLT5uYW1lKCkpIiA6ICIiOwogCiAgICAgICAg
IGlmICgkY3VzdG9tV3JhcCkgewogICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgPDxF
TkQpOwpAQCAtNTQ4LDcgKzU1OCw3IEBAIGlubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdy
YXAoJHtuYXRpdmVUeXBlfSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjCiB7CiAgICAg
QVNTRVJUKGltcGwpOwogICAgIEFTU0VSVCgkZ2V0Q2FjaGVkV3JhcHBlci5Jc0VtcHR5KCkpOwot
ICAgIHJldHVybiAkY3JlYXRlV3JhcHBlckNhbGwoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29s
YXRlKTsKKyAgICByZXR1cm4gJHtyZXR1cm5pbmdDcmVhdGVkV3JhcHBlckJlZ2lufSRjcmVhdGVX
cmFwcGVyQ2FsbChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpJHtyZXR1cm5pbmdDcmVh
dGVkV3JhcHBlckVuZH07CiB9CiBFTkQKICAgICAgICAgfQpAQCAtNTYxLDcgKzU3MSw3IEBAIGlu
bGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHRvVjhPYmplY3QoJHtuYXRpdmVUeXBlfSogaW1w
bCwgdjg6OkhhbmRsZTx2ODo6T2JqCiAgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+KCk7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gJGdldENhY2hlZFdy
YXBwZXI7CiAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHdyYXBw
ZXI7CisgICAgICAgIHJldHVybiAkcmV0dXJuaW5nV3JhcHBlcjsKICAgICByZXR1cm4gd3JhcChp
bXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQogCkBAIC01NzEsNyArNTgxLDcgQEAg
aW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KCR7bmF0aXZlVHlwZX0qIGltcGwsIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gY3IKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhp
c29sYXRlKTsKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9ICRnZXRDYWNoZWRX
cmFwcGVyOwogICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB3cmFw
cGVyOworICAgICAgICByZXR1cm4gJHJldHVybmluZ1dyYXBwZXI7CiAgICAgcmV0dXJuIHdyYXAo
aW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KIEVORApAQCAtNTg4LDcgKzU5OCw3
IEBAIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZhc3QoJHtuYXRpdmVUeXBlfSog
aW1wbCwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mCiAgICAgLy8gdjg6OkFjY2Vzc29ySW5mby4KICAg
ICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSAoaG9sZGVyLT53cmFwcGVyKCkgPT0g
aW5mby5Ib2xkZXIoKSkgPyBpbXBsLT53cmFwcGVyKCkgOiBET01EYXRhU3RvcmU6OmdldE5vZGUo
aW1wbCwgaW5mby5HZXRJc29sYXRlKCkpOwogICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiB3cmFwcGVyOworICAgICAgICByZXR1cm4gJHJldHVybmluZ1dyYXBwZXI7
CiAgICAgcmV0dXJuIHdyYXAoaW1wbCwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkp
OwogfQogRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lE
TEF0dHJpYnV0ZXMudHh0IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRy
aWJ1dGVzLnR4dAppbmRleCA3MDkwZjY2M2VhMmU4YTk2YzJlMzhlNTk4YmY1Y2FkMWY3YzJjMzJi
Li5kNWI3YTRlNjM0NjZiYTNkYmYyMDhjOTgxYzhjOGMwNWYxNzVlYjRkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0CisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQKQEAgLTEyMywz
ICsxMjMsNCBAQCBWOE5vV3JhcHBlckNhY2hlCiBWOE1lYXN1cmVBcz0qCiBWOFJlYWRPbmx5CiBW
OFVuZm9yZ2VhYmxlCitWOFdyYXBBc0Z1bmN0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9DdXN0b21FbGVtZW50SGVscGVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9DdXN0b21FbGVtZW50SGVscGVycy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmEyZjQ4Zjk2
ZjQ0ZmIzOWZkNWE2NDdmYTgzYzYxMTNjZWM0YTExMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmNwcApAQCAtMCwwICsx
LDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRIZWxwZXJz
LmgiCisKKyNpbmNsdWRlICJWOEhUTUxTcGFuRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKKyNpZiBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKKworY29uc3QgU2NyaXB0VmFs
dWUmIEN1c3RvbUVsZW1lbnRIZWxwZXJzOjpkZWZhdWx0UHJvdG90eXBlKCkKK3sKKyAgICAvLyBG
SVhNRTogU2hvdWxkIGJlIHN0b3JlZCBpbiBwZXItaXNvbGF0ZSBzdG9yZQorICAgIERFRklORV9T
VEFUSUNfTE9DQUwoU2NyaXB0VmFsdWUsIHZhbHVlLCAodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVl
Pjo6TmV3KFY4SFRNTFNwYW5FbGVtZW50OjpHZXRUZW1wbGF0ZSgpLT5HZXRGdW5jdGlvbigpLT5H
ZXQodjg6OlN0cmluZzo6TmV3U3ltYm9sKCJwcm90b3R5cGUiKSkpKSk7CisgICAgcmV0dXJuIHZh
bHVlOworfTsKKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Q3VzdG9tRWxlbWVudEhlbHBlcnMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0N1c3Rv
bUVsZW1lbnRIZWxwZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTIwZThlYzZhNWVhODhmZmY0ZDYxMmFjZmQ4
MTA5NTNmZjAxOTU1NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ3VzdG9t
RWxlbWVudEhlbHBlcnNfaAorI2RlZmluZSBDdXN0b21FbGVtZW50SGVscGVyc19oCisKKyNpbmNs
dWRlICJTY3JpcHRWYWx1ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBFTkFCTEUo
Q1VTVE9NX0RPTV9FTEVNRU5UUykKKworY2xhc3MgQ3VzdG9tRWxlbWVudEhlbHBlcnMgeworcHVi
bGljOgorICAgIHN0YXRpYyBjb25zdCBTY3JpcHRWYWx1ZSYgZGVmYXVsdFByb3RvdHlwZSgpOwor
fTsKKworI2VuZGlmIC8vIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDdXN0b21FbGVtZW50SGVscGVyc19oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYTI5MzhhMzUyNmZjMmJiNDE2YThmZjE3M2FjNGZmZThjNjBkM2FhNAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmNwcApA
QCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlY4QWRhcHRvckZ1
bmN0aW9uLmgiCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4QWRhcHRvckZ1bmN0
aW9uOjpnZXRUZW1wbGF0ZSgpCit7CisgICAgLy8gRklYTUU6IFNob3VsZCBiZSBzdG9yZWQgaW4g
cGVyLWlzb2xhdGUgZGF0YSBzdG9yZQorICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT46Ok5ldyh2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KCkpOworICAgIHJldHVybiBjb25maWd1
cmVUZW1wbGF0ZSh0ZW1wbCk7Cit9CisKK3Y4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPiBWOEFkYXB0b3JGdW5jdGlvbjo6Y29uZmlndXJlVGVtcGxhdGUodjg6OlBlcnNpc3RlbnQ8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGRlc2MpCit7CisgICAgZGVzYy0+U2V0Q2FsbEhhbmRsZXIo
JlY4QWRhcHRvckZ1bmN0aW9uOjppbnZvY2F0aW9uQ2FsbGJhY2spOworICAgIHJldHVybiBkZXNj
OworfQorCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhBZGFwdG9yRnVuY3Rpb246Omludm9jYXRp
b25DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gd3JhcHBlZCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJncy5D
YWxsZWUoKS0+R2V0SGlkZGVuVmFsdWUoVjhIaWRkZW5Qcm9wZXJ0eU5hbWU6OmRldGFpbCgpKSk7
CisgICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIGZhc3RlciBpZiB3ZSBjYW4gYWNjZXNzIHVuZGVy
bHlpbmcgbmF0aXZlIGNhbGxiYWNrIGRpcmVjdGx5LgorICAgIFZlY3Rvcjx2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gPiBhcmdBcnJheShhcmdzLkxlbmd0aCgpKTsKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IGFyZ3MuTGVuZ3RoKCk7ICsraSkKKyAgICAgICAgYXJnQXJyYXkuYXBwZW5kKGFyZ3NbaV0p
OworICAgIGlmIChhcmdzLklzQ29uc3RydWN0Q2FsbCgpKQorICAgICAgICByZXR1cm4gd3JhcHBl
ZC0+Q2FsbEFzQ29uc3RydWN0b3IoYXJnQXJyYXkuc2l6ZSgpLCBhcmdBcnJheS5kYXRhKCkpOwor
ICAgIHJldHVybiB3cmFwcGVkLT5DYWxsQXNGdW5jdGlvbihhcmdzLlRoaXMoKSwgYXJnQXJyYXku
c2l6ZSgpLCBhcmdBcnJheS5kYXRhKCkpOworfQorCit2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4g
VjhBZGFwdG9yRnVuY3Rpb246OndyYXAodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QsIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBwcm90b3R5cGUsIEF0b21pY1N0cmluZyBuYW1lKQoreworICAg
IHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBhZGFwdG9yID0gdjg6OkhhbmRsZTx2ODo6RnVuY3Rp
b24+OjpDYXN0KGdldFRlbXBsYXRlKCktPkdldEZ1bmN0aW9uKCkpOworICAgIGlmICghcHJvdG90
eXBlLklzRW1wdHkoKSAmJiBwcm90b3R5cGUtPklzT2JqZWN0KCkpCisgICAgICAgIGFkYXB0b3It
PlNldCh2ODo6U3RyaW5nOjpOZXdTeW1ib2woInByb3RvdHlwZSIpLCBwcm90b3R5cGUsIHY4OjpS
ZWFkT25seSk7CisgICAgYWRhcHRvci0+U2V0TmFtZSh2ODo6U3RyaW5nOjpOZXcobmFtZS5jaGFy
YWN0ZXJzKCksIG5hbWUubGVuZ3RoKCkpKTsKKyAgICBhZGFwdG9yLT5TZXRIaWRkZW5WYWx1ZShW
OEhpZGRlblByb3BlcnR5TmFtZTo6ZGV0YWlsKCksIG9iamVjdCk7CisgICAgb2JqZWN0LT5TZXRI
aWRkZW5WYWx1ZShWOEhpZGRlblByb3BlcnR5TmFtZTo6ZGV0YWlsKCksIGFkYXB0b3IpOworICAg
IHJldHVybiBhZGFwdG9yOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5oIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBZGFwdG9yRnVuY3Rpb24uaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yN2Y2
MTYyNTFhZjhkZWJmM2NjOWRmYmZmNzQzYzE3NDA2MWY3YzQwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBZGFwdG9yRnVuY3Rpb24uaApAQCAtMCwwICsx
LDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBWOEFkYXB0b3JGdW5jdGlvbl9oCisjZGVmaW5lIFY4QWRhcHRvckZ1bmN0
aW9uX2gKKworI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4SGlkZGVuUHJvcGVy
dHlOYW1lLmgiCisjaW5jbHVkZSA8djguaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFY4QWRhcHRvckZ1bmN0aW9uIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB1bndyYXAodjg6OkhhbmRsZTx2
ODo6RnVuY3Rpb24+KTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IHdyYXAo
djg6OkhhbmRsZTx2ODo6T2JqZWN0Piwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHByb3RvdHlwZSwg
QXRvbWljU3RyaW5nIG5hbWUpOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4g
Z2V0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4pOworCisgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBnZXRUZW1wbGF0ZSgpOworICAgIHN0YXRpYyB2ODo6UGVy
c2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gY29uZmlndXJlVGVtcGxhdGUodjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+KTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IGludm9jYXRpb25DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJik7Cit9OworCitp
bmxpbmUgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOEFkYXB0b3JGdW5jdGlvbjo6dW53cmFwKHY4
OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBmdW5jdGlvbikKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gd3JhcHBlZCA9IGZ1bmN0aW9uLT5HZXRIaWRkZW5WYWx1ZShWOEhpZGRlblByb3BlcnR5
TmFtZTo6ZGV0YWlsKCkpOworICAgIEFTU0VSVCghd3JhcHBlZC5Jc0VtcHR5KCkpOworICAgIEFT
U0VSVCh3cmFwcGVkLT5Jc09iamVjdCgpKTsKKyAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0Pjo6Q2FzdCh3cmFwcGVkKTsKK30KKworaW5saW5lIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9u
PiBWOEFkYXB0b3JGdW5jdGlvbjo6Z2V0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KQor
eworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhZGFwdG9yRnVuY3Rpb24gPSBvYmplY3QtPkdl
dEhpZGRlblZhbHVlKFY4SGlkZGVuUHJvcGVydHlOYW1lOjpkZXRhaWwoKSk7CisgICAgQVNTRVJU
KCFhZGFwdG9yRnVuY3Rpb24uSXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoYWRhcHRvckZ1bmN0aW9u
LT5Jc0Z1bmN0aW9uKCkpOworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj46OkNh
c3QoYWRhcHRvckZ1bmN0aW9uKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gVjhBZGFwdG9yRnVuY3Rpb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
RE9NV3JhcHBlci5jcHAKaW5kZXggZjZlZmM4ODE3YjNmNjQ1ZGU5OTcyOTViNTU1M2I4ZTE2ODll
ODQ5Mi4uZjFkN2Q2ZmE1NjhmY2VmZTZkM2E3MDdlZmE2MzJkOWE5NTZjYzIwZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCkBAIC0zOSw2ICszOSw3IEBA
CiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnR5
U2V0LmgiCiAjaW5jbHVkZSAiVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJW
OEFkYXB0b3JGdW5jdGlvbi5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4
Q29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIlY4RXZlbnRMaXN0ZW5lci5oIgpAQCAtMjEwLDQgKzIx
MSwyMSBAQCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRM
aXN0ZW5lcih2ODo6TG9jYWw8djg6OlZhbHVlPiB2YQogI2VuZGlmCiB9CiAKK3Y4OjpIYW5kbGU8
djg6OkZ1bmN0aW9uPiBWOERPTVdyYXBwZXI6OnRvRnVuY3Rpb24odjg6OkhhbmRsZTx2ODo6VmFs
dWU+IG9iamVjdCkKK3sKKyAgICByZXR1cm4gVjhBZGFwdG9yRnVuY3Rpb246OmdldCh2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+OjpDYXN0KG9iamVjdCkpOworfQorCit2ODo6SGFuZGxlPHY4OjpGdW5j
dGlvbj4gVjhET01XcmFwcGVyOjp0b0Z1bmN0aW9uKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2Jq
ZWN0LCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcHJvdG90eXBlLCBBdG9taWNTdHJpbmcgbmFtZSkK
K3sKKyAgICByZXR1cm4gVjhBZGFwdG9yRnVuY3Rpb246OndyYXAob2JqZWN0LCBwcm90b3R5cGUs
IG5hbWUpOworfQorCit2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4RE9NV3JhcHBlcjo6ZnJvbUZ1
bmN0aW9uKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KQoreworICAgIGlmICghb2JqZWN0
LT5Jc0Z1bmN0aW9uKCkpCisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgcmV0dXJuIFY4QWRh
cHRvckZ1bmN0aW9uOjp1bndyYXAodjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+OjpDYXN0KG9iamVj
dCkpOworfQorCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOERPTVdyYXBwZXIuaAppbmRleCAxZjgwNjJkYzZkNjk0OWYwODYxYWYzOWI5NjdiMDBm
ZmRjZjkwOWI1Li44MDQwNjc1YTIxMTNlMmE3MzkwMjZiMDg3OTIyMmZkNTQ3YzE2M2VhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaApAQCAtMTEyLDYgKzExMiwx
MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgc3RhdGljIHY4OjpMb2NhbDx2ODo6
T2JqZWN0PiBpbnN0YW50aWF0ZVY4T2JqZWN0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRp
b25Db250ZXh0LCBXcmFwcGVyVHlwZUluZm8qLCB2b2lkKik7CiAKKyAgICAgICAgc3RhdGljIHY4
OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiB0b0Z1bmN0aW9uKHY4OjpIYW5kbGU8djg6OlZhbHVlPik7
CisgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gdG9GdW5jdGlvbih2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+LCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcHJvdG90eXBlLCBBdG9t
aWNTdHJpbmcgbmFtZSk7CisgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGZy
b21GdW5jdGlvbih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKKwogICAgIHByaXZhdGU6CiAgICAg
ICAgIHN0YXRpYyB2b2lkIHNldFdyYXBwZXJDbGFzcyh2b2lkKiwgdjg6OlBlcnNpc3RlbnQ8djg6
Ok9iamVjdD4gd3JhcHBlcikKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YjM5NTIxMTIwNDhk
MzAxYzViZTRmZDJlZTlkOGZkZmYwN2ZlN2QwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVudC5jcHAKQEAgLTAsMCArMSw3OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWOEhUTUxDdXN0b21FbGVtZW50LmgiCisK
KyNpbmNsdWRlICJDdXN0b21FbGVtZW50UmVnaXN0cnkuaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVu
dC5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAi
VjhIVE1MU3BhbkVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgRU5BQkxF
KENVU1RPTV9ET01fRUxFTUVOVFMpCisKKy8vIEZJWE1FOiBFYWNoIGN1c3RvbSBlbGVtZW50cyBz
aG91bGQgaGF2ZSBpdHMgb3duIEdldFRlbXBsYXRlIG1ldGhvZCBzbyB0aGF0IGl0IGNhbiBkZXJp
dmVkIGZyb20gZGlmZmVyZW5jdCBzdXBlciBlbGVtZW50LgorV3JhcHBlclR5cGVJbmZvIFY4SFRN
TEN1c3RvbUVsZW1lbnQ6OmluZm8gPSB7ICZWOEhUTUxTcGFuRWxlbWVudDo6R2V0VGVtcGxhdGUs
IFY4SFRNTEVsZW1lbnQ6OmRlcmVmT2JqZWN0LCAwLCAwLCAwLCAmVjhIVE1MU3BhbkVsZW1lbnQ6
OmluZm8sIFdyYXBwZXJUeXBlT2JqZWN0UHJvdG90eXBlIH07CisKK3Y4OjpIYW5kbGU8djg6Ok9i
amVjdD4gVjhIVE1MQ3VzdG9tRWxlbWVudDo6Y3JlYXRlV3JhcHBlcihQYXNzUmVmUHRyPEhUTUxF
bGVtZW50PiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6
Oklzb2xhdGUqIGlzb2xhdGUpCit7CisgICAgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKiBjdG9y
ID0gQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Ojpjb25zdHJ1Y3Rvck9mKGltcGwuZ2V0KCkpOworICAg
IGlmICghY3RvcikKKyAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qo
V2ViQ29yZTo6dG9WOCh0b0hUTUxVbmtub3duRWxlbWVudChpbXBsLmdldCgpKSwgY3JlYXRpb25D
b250ZXh0LCBpc29sYXRlKSk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0
OworICAgIGlmICghY3JlYXRpb25Db250ZXh0LklzRW1wdHkoKSAmJiBjcmVhdGlvbkNvbnRleHQt
PkNyZWF0aW9uQ29udGV4dCgpICE9IHY4OjpDb250ZXh0OjpHZXRDdXJyZW50KCkpIHsKKyAgICAg
ICAgLy8gRm9yIHBlcmZvcm1hbmNlLCB3ZSBlbnRlciB0aGUgY29udGV4dCBvbmx5IGlmIHRoZSBj
dXJyZW50bHkgcnVubmluZyBjb250ZXh0CisgICAgICAgIC8vIGlzIGRpZmZlcmVudCBmcm9tIHRo
ZSBjb250ZXh0IHRoYXQgd2UgYXJlIGFib3V0IHRvIGVudGVyLgorICAgICAgICBjb250ZXh0ID0g
djg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KGNyZWF0aW9uQ29udGV4dC0+Q3JlYXRpb25Db250
ZXh0KCkpOworICAgICAgICBBU1NFUlQoIWNvbnRleHQuSXNFbXB0eSgpKTsKKyAgICAgICAgY29u
dGV4dC0+RW50ZXIoKTsKKyAgICB9CisKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBw
ZXIgPSBWOERPTVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3QoY3JlYXRpb25Db250ZXh0LCAm
aW5mbywgaW1wbC5nZXQoKSk7CisKKyAgICBpZiAoIWNvbnRleHQuSXNFbXB0eSgpKQorICAgICAg
ICBjb250ZXh0LT5FeGl0KCk7CisKKyAgICBpZiAod3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiB3cmFwcGVyOworCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIG5lZWRl
ZCBvbmNlIGVhY2ggY3VzdG9tIGVsZW1lbnQgaGFzIGl0cyBvd24gRnVuY3Rpb25UZW1wbGF0ZQor
ICAgIHdyYXBwZXItPlNldCh2ODo6U3RyaW5nOjpOZXdTeW1ib2woImNvbnN0cnVjdG9yIiksIFdl
YkNvcmU6OnRvVjgoY3RvciwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKSk7CisgICAgLyp2ODo6
UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVySGFuZGxlID0gKi9WOERPTVdyYXBwZXI6OmNy
ZWF0ZURPTVdyYXBwZXIoaW1wbCwgJmluZm8sIHdyYXBwZXIsIGlzb2xhdGUpOworCisgICAgcmV0
dXJuIHdyYXBwZXI7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhIVE1MQ3VzdG9tRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZjODRlOTY1NzYxMjQ5NmE3Yzkw
NjYwMTc3NjI3YTk3NzVhNjFkM2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50LmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
VjhIVE1MQ3VzdG9tRWxlbWVudF9oCisjZGVmaW5lIFY4SFRNTEN1c3RvbUVsZW1lbnRfaAorCisj
aW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCisjaW5jbHVk
ZSAiVjhIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIlY4SFRNTFVua25vd25FbGVtZW50LmgiCisj
aW5jbHVkZSA8djguaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEhUTUxFbGVtZW50OworCisjaWYgRU5BQkxFKENVU1RPTV9ET01f
RUxFTUVOVFMpCisKK2NsYXNzIFY4SFRNTEN1c3RvbUVsZW1lbnQgeworcHVibGljOgorICAgIHN0
YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiB0b1Y4KEhUTUxFbGVtZW50Kiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNv
bnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiA9IDApOworICAg
IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0ZVdyYXBwZXIoUGFzc1JlZlB0cjxI
VE1MRWxlbWVudD4sIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4sIHY4OjpJc29sYXRlKik7Cit9Owor
CitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOEhUTUxDdXN0b21FbGVtZW50Ojp0b1Y4
KEhUTUxFbGVtZW50KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4
dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3
cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpnZXROb2RlKGltcGwsIGlzb2xhdGUpOworICAgIGlmICgh
d3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB3cmFwcGVyOworICAgIHJldHVybiBW
OEhUTUxDdXN0b21FbGVtZW50OjpjcmVhdGVXcmFwcGVyKGltcGwsIGNyZWF0aW9uQ29udGV4dCwg
aXNvbGF0ZSk7Cit9CisKKyNlbHNlIC8vIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorCitj
bGFzcyBWOEhUTUxDdXN0b21FbGVtZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiB3cmFwKEhUTUxFbGVtZW50Kiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBj
cmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiA9
IDApOworfTsKKworaW5saW5lIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gSFRNTEN1c3RvbUVsZW1l
bnQ6OnRvVjgoSFRNTEVsZW1lbnQqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRp
b25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3sKKyAgICByZXR1cm4gdG9WOCh0b0hU
TUxVbmtub3duRWxlbWVudChpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKK30KKwor
I2VuZGlmIC8vIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBWOEhUTUxDdXN0b21FbGVtZW50X2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rv
ckN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21F
bGVtZW50Q29uc3RydWN0b3JDdXN0b20uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgyZDg4YzljNjk1MWRkYTYx
NTJhNjM5YzEzNTkyZjc3MGQzZjJmNTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21FbGVtZW50Q29uc3RydWN0b3JDdXN0b20uY3Bw
CkBAIC0wLDAgKzEsNTUgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorKiAKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyog
bWV0OgorKiAKKyogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorKiBkaXN0cmlidXRpb24uCisqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyogCisqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJWOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oIgorCisj
aW5jbHVkZSAiQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5n
LmgiCisjaW5jbHVkZSAiVjhIVE1MQ3VzdG9tRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6
Y2FsbEFzRnVuY3Rpb25DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAg
IElOQ19TVEFUUygiRE9NLlY4Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLkNvbnN0cnVjdG9yIik7
CisgICAgaWYgKCFhcmdzLklzQ29uc3RydWN0Q2FsbCgpKQorICAgICAgICByZXR1cm4gdGhyb3dU
eXBlRXJyb3IoIkRPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1
bmN0aW9uLiIpOworICAgIGlmIChDb25zdHJ1Y3Rvck1vZGU6OmN1cnJlbnQoKSA9PSBDb25zdHJ1
Y3Rvck1vZGU6OldyYXBFeGlzdGluZ09iamVjdCkKKyAgICAgICAgcmV0dXJuIGFyZ3MuSG9sZGVy
KCk7CisKKyAgICBDdXN0b21FbGVtZW50Q29uc3RydWN0b3IqIGltcGwgPSB0b05hdGl2ZShhcmdz
LkhvbGRlcigpKTsKKyAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IGVsZW1lbnQgPSBpbXBsLT5jcmVh
dGVFbGVtZW50KCk7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm4gdjhVbmRlZmlu
ZWQoKTsKKyAgICByZXR1cm4gVjhIVE1MQ3VzdG9tRWxlbWVudDo6dG9WOChlbGVtZW50LmdldCgp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YmFjOGIwNTA4NzQzNGI4
M2RhYWM3YzQzMzMwNDcyODc1MWE0ZGY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAKQEAgLTAsMCArMSw3NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaCIKKwor
I2lmIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVu
dEhlbHBlcnMuaCIKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50UmVnaXN0cnkuaCIKKyNpbmNsdWRl
ICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gQ3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yOjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3VzdG9tRWxlbWVudENvbnN0
cnVjdG9yKGRvY3VtZW50LCB0YWdOYW1lKSk7Cit9CisKK0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rv
cjo6Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSkKKyAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCisgICAgLCBt
X3RhZ05hbWUodGFnTmFtZSkKKyAgICAsIG1fbmFtZSgiSFRNTEN1c3RvbUVsZW1lbnQiKQorICAg
ICwgbV9wcm90b3R5cGUoQ3VzdG9tRWxlbWVudEhlbHBlcnM6OmRlZmF1bHRQcm90b3R5cGUoKSkK
K3sKK30KKworQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjp+Q3VzdG9tRWxlbWVudENvbnN0cnVj
dG9yKCkKK3sKK30KKwordm9pZCBDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6OndpbGxEZXN0cm95
RG9jdW1lbnQoKQoreworICAgIG1fZG9jdW1lbnQgPSAwOworfQorCitQYXNzUmVmUHRyPEhUTUxF
bGVtZW50PiBDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6OmNyZWF0ZUVsZW1lbnQoKSBjb25zdAor
eworICAgIGlmICghbV9kb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIEhU
TUxFbGVtZW50OjpjcmVhdGUobV90YWdOYW1lLCBtX2RvY3VtZW50KTsKK30KKworfQorCisjZW5k
aWYgLy8gRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGMwNDE5ZjFjYWEyMjNjYzc5
YWUxNjY0ODQ3Y2I5NjY1ZWFkYzQ3NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaApAQCAtMCwwICsxLDc2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBD
dXN0b21FbGVtZW50Q29uc3RydWN0b3JfaAorI2RlZmluZSBDdXN0b21FbGVtZW50Q29uc3RydWN0
b3JfaAorCisjaWYgRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCisKKyNpbmNsdWRlICJRdWFs
aWZpZWROYW1lLmgiCisjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBDdXN0b21FbGVtZW50RGVmaW5pdGlvbjsKK2NsYXNzIERpY3Rp
b25hcnk7CitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEhUTUxFbGVtZW50OworCitjbGFzcyBDdXN0
b21FbGVtZW50Q29uc3RydWN0b3IgOiBwdWJsaWMgUmVmQ291bnRlZDxDdXN0b21FbGVtZW50Q29u
c3RydWN0b3I+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50
Q29uc3RydWN0b3I+IGNyZWF0ZShEb2N1bWVudCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKKwor
ICAgIGV4cGxpY2l0IEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvcihEb2N1bWVudCosIGNvbnN0IFF1
YWxpZmllZE5hbWUmKTsKKyAgICB2aXJ0dWFsIH5DdXN0b21FbGVtZW50Q29uc3RydWN0b3IoKTsK
KworICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0K
KyAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKCkgY29uc3QgeyByZXR1cm4gbV90YWdO
YW1lOyB9CisgICAgQXRvbWljU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0K
KyAgICBjb25zdCBTY3JpcHRWYWx1ZSYgcHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gbV9wcm90
b3R5cGU7IH0KKworICAgIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnQoKSBj
b25zdDsKKyAgICB2b2lkIHdpbGxEZXN0cm95RG9jdW1lbnQoKTsKKyAgICAKK3ByaXZhdGU6Cisg
ICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CisgICAgUXVhbGlmaWVkTmFtZSBtX3RhZ05hbWU7Cisg
ICAgQXRvbWljU3RyaW5nIG1fbmFtZTsKKyAgICBTY3JpcHRWYWx1ZSBtX3Byb3RvdHlwZTsKK307
CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorCisjZW5kaWYg
Ly8gQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1
c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzhhMWE5YjcxZDgwOWY5NDc5
ZTgzZTAwNzdkMWVjZWE2MDBhZGRiNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaWRsCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCitbCisgICAgQ29uZGl0aW9uYWw9Q1VTVE9NX0RPTV9FTEVNRU5UUywKKyAgICBWOEVu
YWJsZWRBdFJ1bnRpbWU9Y3VzdG9tRE9NRWxlbWVudHMsCisgICAgVjhXcmFwQXNGdW5jdGlvbiwK
KyAgICBDdXN0b21DYWxsCitdIGludGVyZmFjZSBDdXN0b21FbGVtZW50Q29uc3RydWN0b3Igewor
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVnaXN0cnku
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZDE1OGVlODhlMDU3YjllMjk3NjE5NGIwYTZkZjM1ZWEyM2E1YzM2OQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuY3BwCkBA
IC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAq
ICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3Vz
dG9tRWxlbWVudFJlZ2lzdHJ5LmgiCisKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50Q29uc3RydWN0
b3IuaCIKKyNpbmNsdWRlICJEaWN0aW9uYXJ5LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNp
bmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUg
IlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKKworI2lmIEVOQUJMRShDVVNUT01fRE9NX0VMRU1F
TlRTKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0N1c3RvbUVsZW1lbnRSZWdpc3RyeTo6Q3Vz
dG9tRWxlbWVudFJlZ2lzdHJ5KERvY3VtZW50KiBkb2N1bWVudCkKKyAgICA6IG1fZG9jdW1lbnQo
ZG9jdW1lbnQpCit7Cit9CisKK0N1c3RvbUVsZW1lbnRSZWdpc3RyeTo6fkN1c3RvbUVsZW1lbnRS
ZWdpc3RyeSgpCit7CisgICAgZm9yIChDb25zdHJ1Y3Rvck1hcDo6aXRlcmF0b3IgaSA9IG1fY29u
c3RydWN0b3JzLmJlZ2luKCk7IGkgIT0gbV9jb25zdHJ1Y3RvcnMuZW5kKCk7ICsraSkKKyAgICAg
ICAgaS0+dmFsdWUtPndpbGxEZXN0cm95RG9jdW1lbnQoKTsKK30KKworQ3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yKiBDdXN0b21FbGVtZW50UmVnaXN0cnk6OmNvbnN0cnVjdG9yT2YoSFRNTEVsZW1l
bnQqIGVsZW1lbnQpCit7CisgICAgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5KiBzZWxmID0gZWxlbWVu
dC0+ZG9jdW1lbnQoKS0+cmVnaXN0cnkoKTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVy
biAwOworICAgIHJldHVybiBzZWxmLT5maW5kKGVsZW1lbnQtPnRhZ1FOYW1lKCkpOworfQorCitQ
YXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5
OjpyZWdpc3RlckVsZW1lbnQoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBEaWN0aW9u
YXJ5JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBRdWFsaWZpZWROYW1lIG5l
d05hbWUobnVsbEF0b20sIG5hbWUubG93ZXIoKSwgSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVS
SSk7CisgICAgaWYgKCFuZXdOYW1lLmxvY2FsTmFtZSgpLnN0YXJ0c1dpdGgoIngtIikpIHsKKyAg
ICAgICAgZWMgPSBJTlZBTElEX0NIQVJBQ1RFUl9FUlI7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKyAgICAgICAgCisgICAgaWYgKGZpbmQobmV3TmFtZSkpIHsKKyAgICAgICAgZWMgPSBJTlZB
TElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUmVmUHRyPEN1
c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gZnJlc2ggPSBDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6
OmNyZWF0ZShtX2RvY3VtZW50LCBuZXdOYW1lKTsKKyAgICBtX2NvbnN0cnVjdG9ycy5hZGQoZnJl
c2gtPnRhZ05hbWUoKS5pbXBsKCksIGZyZXNoKTsKKyAgICByZXR1cm4gZnJlc2g7Cit9CisKK0N1
c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciogQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpmaW5kKGNvbnN0
IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0Cit7CisgICAgQ29uc3RydWN0b3JNYXA6OmNvbnN0
X2l0ZXJhdG9yIGZvdW5kID0gbV9jb25zdHJ1Y3RvcnMuZmluZChuYW1lLmltcGwoKSk7CisgICAg
cmV0dXJuIChmb3VuZCAhPSBtX2NvbnN0cnVjdG9ycy5lbmQoKSkgPyBmb3VuZC0+dmFsdWUuZ2V0
KCkgOiAwOworfQorCitQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBDdXN0b21FbGVtZW50UmVnaXN0
cnk6OmNyZWF0ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKK3sKKyAg
ICBpZiAoQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKiBmb3VuZCA9IGZpbmQobmFtZSkpCisgICAg
ICAgIHJldHVybiBmb3VuZC0+Y3JlYXRlRWxlbWVudCgpOworICAgIHJldHVybiAwOworfQorCit9
CisKKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuaCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xOGQ2MDcyZWM4Y2Q2ZmI0
ZjA2NDFhYmY0MmUwNjQ1NDU3MjFhOWRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAg
ZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEN1c3RvbUVsZW1lbnRSZWdpc3RyeV9oCisjZGVmaW5lIEN1c3RvbUVsZW1lbnRSZWdp
c3RyeV9oCisKKyNpZiBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKKworI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCisjaW5jbHVkZSAiU3Vw
cGxlbWVudGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yOworY2xhc3MgRGljdGlvbmFyeTsKK2NsYXNzIERvY3VtZW50OworY2xhc3MgSFRN
TEVsZW1lbnQ7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworY2xhc3MgUXVhbGlmaWVk
TmFtZTsKKworY2xhc3MgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5IDogcHVibGljIFJlZkNvdW50ZWQ8
Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5PiB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ3VzdG9tRWxl
bWVudFJlZ2lzdHJ5KERvY3VtZW50Kik7CisgICAgfkN1c3RvbUVsZW1lbnRSZWdpc3RyeSgpOwor
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiB3ZWJraXRS
ZWdpc3RlcihEb2N1bWVudCosIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gd2Vi
a2l0UmVnaXN0ZXIoRG9jdW1lbnQqLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IERp
Y3Rpb25hcnkmIG9wdGlvbnMsIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIFBhc3NSZWZQdHI8Q3Vz
dG9tRWxlbWVudENvbnN0cnVjdG9yPiByZWdpc3RlckVsZW1lbnQoY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lLCBjb25zdCBEaWN0aW9uYXJ5JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJik7CisgICAg
Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKiBmaW5kKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25z
dDsKKyAgICBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBjcmVhdGVFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmKSBjb25zdDsKKworICAgIHN0YXRpYyBDdXN0b21FbGVtZW50Q29uc3RydWN0b3Iq
IGNvbnN0cnVjdG9yT2YoSFRNTEVsZW1lbnQqKTsKKworcHJpdmF0ZToKKyAgICB0eXBlZGVmIEhh
c2hNYXA8UXVhbGlmaWVkTmFtZTo6UXVhbGlmaWVkTmFtZUltcGwqLCBSZWZQdHI8Q3VzdG9tRWxl
bWVudENvbnN0cnVjdG9yPiA+Q29uc3RydWN0b3JNYXA7CisKKyAgICBEb2N1bWVudCogbV9kb2N1
bWVudDsKKyAgICBDb25zdHJ1Y3Rvck1hcCBtX2NvbnN0cnVjdG9yczsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCA0NTBhMmY4ZDg1YTkwODY1MjY1OGQ0
OGNjZTVjZjBiNzY2MDc1NzkyLi42MjliMDg5ZTQxMDhmNzdhZjg0ZWY4YjdhNDA0NjE2MTFiZmYx
MzBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTQ2LDExICs0NiwxNCBAQAogI2luY2x1
ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgogI2luY2x1ZGUgIkNvbnRleHRGZWF0dXJlcy5o
IgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgorI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRDb25zdHJ1
Y3Rvci5oIgorI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRSZWdpc3RyeS5oIgogI2luY2x1ZGUgIkRP
TUltcGxlbWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5oIgog
I2luY2x1ZGUgIkRPTVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1
ZGUgIkRhdGVDb21wb25lbnRzLmgiCisjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgogI2luY2x1ZGUg
IkRvY3VtZW50RXZlbnRRdWV1ZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNp
bmNsdWRlICJEb2N1bWVudExvYWRlci5oIgpAQCAtODY4LDYgKzg3MSwyMCBAQCBQYXNzUmVmUHRy
PEVsZW1lbnQ+IERvY3VtZW50OjpjcmVhdGVFbGVtZW50KGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZSwgRXhjZXB0aW9uQwogICAgIHJldHVybiBjcmVhdGVFbGVtZW50KFF1YWxpZmllZE5hbWUobnVs
bEF0b20sIG5hbWUsIG51bGxBdG9tKSwgZmFsc2UpOwogfQogCisjaWYgRU5BQkxFKENVU1RPTV9E
T01fRUxFTUVOVFMpCitQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gRG9jdW1l
bnQ6OnJlZ2lzdGVyRWxlbWVudChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIHJldHVybiByZWdpc3RlckVsZW1lbnQobmFtZSwgRGljdGlvbmFyeSgp
LCBlYyk7Cit9CisKK1Bhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiBEb2N1bWVu
dDo6cmVnaXN0ZXJFbGVtZW50KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgRGljdGlv
bmFyeSYgb3B0aW9ucywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFtX3JlZ2lzdHJ5
KQorICAgICAgICBtX3JlZ2lzdHJ5ID0gYWRvcHRQdHIobmV3IEN1c3RvbUVsZW1lbnRSZWdpc3Ry
eSh0aGlzKSk7CisgICAgcmV0dXJuIG1fcmVnaXN0cnktPnJlZ2lzdGVyRWxlbWVudChuYW1lLCBv
cHRpb25zLCBlYyk7Cit9CisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCisK
IFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRG9jdW1lbnQ6OmNyZWF0ZURvY3VtZW50RnJh
Z21lbnQoKQogewogICAgIHJldHVybiBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUoZG9jdW1lbnQo
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDliN2I5N2JkMTI4MDg2ZTQ5ZjQ4MTZiMGQzMmZk
NTFmMzBjYzI3YzkuLjQzNWRiMDYyZjY2Y2M1Njk4N2Q4ZGU5NjY4Y2NlODFiZmY5NTc2NjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5oCkBAIC02Nyw2ICs2Nyw4IEBAIGNsYXNzIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQ7CiBjbGFzcyBDaGFyYWN0ZXJEYXRhOwogY2xhc3MgQ29tbWVudDsKIGNsYXNzIENv
bnRleHRGZWF0dXJlczsKK2NsYXNzIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvcjsKK2NsYXNzIEN1
c3RvbUVsZW1lbnRSZWdpc3RyeTsKIGNsYXNzIERPTUltcGxlbWVudGF0aW9uOwogY2xhc3MgRE9N
TmFtZWRGbG93Q29sbGVjdGlvbjsKIGNsYXNzIERPTVNlbGVjdGlvbjsKQEAgLTExNDgsNiArMTE1
MCwxMyBAQCBwdWJsaWM6CiAgICAgVGV4dEF1dG9zaXplciogdGV4dEF1dG9zaXplcigpIHsgcmV0
dXJuIG1fdGV4dEF1dG9zaXplci5nZXQoKTsgfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQ1VTVE9N
X0RPTV9FTEVNRU5UUykKKyAgICBQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4g
cmVnaXN0ZXJFbGVtZW50KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYp
OworICAgIFBhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiByZWdpc3RlckVsZW1l
bnQoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBEaWN0aW9uYXJ5JiBvcHRpb25zLCBF
eGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxFbGVtZW50PiBjcmVhdGVDdXN0b21FbGVt
ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSk7CisgICAgQ3VzdG9tRWxlbWVudFJlZ2lz
dHJ5KiByZWdpc3RyeSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0cnkuZ2V0KCk7IH0KKyNlbmRp
ZgorCiAgICAgdm9pZCBhZGp1c3RGbG9hdFF1YWRzRm9yU2Nyb2xsQW5kQWJzb2x1dGVab29tQW5k
RnJhbWVTY2FsZShWZWN0b3I8RmxvYXRRdWFkPiYsIFJlbmRlck9iamVjdCopOwogICAgIHZvaWQg
YWRqdXN0RmxvYXRSZWN0Rm9yU2Nyb2xsQW5kQWJzb2x1dGVab29tQW5kRnJhbWVTY2FsZShGbG9h
dFJlY3QmLCBSZW5kZXJPYmplY3QqKTsKIApAQCAtMTUxMyw2ICsxNTIyLDEwIEBAIHByaXZhdGU6
CiAgICAgT3duUHRyPFRleHRBdXRvc2l6ZXI+IG1fdGV4dEF1dG9zaXplcjsKICNlbmRpZgogCisj
aWYgRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCisgICAgT3duUHRyPEN1c3RvbUVsZW1lbnRS
ZWdpc3RyeT4gbV9yZWdpc3RyeTsKKyNlbmRpZgorCiAgICAgYm9vbCBtX3NjaGVkdWxlZFRhc2tz
QXJlU3VzcGVuZGVkOwogICAgIAogICAgIGJvb2wgbV92aXN1YWxVcGRhdGVzQWxsb3dlZDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsIGIvU291cmNlL1dlYkNv
cmUvZG9tL21ha2VfbmFtZXMucGwKaW5kZXggNzE1YmE1NmU0NzBhZGJiZDEwMjA2MDRlMmEwZDYz
MDc1MTU1YWU2ZS4uNzI4NWZiOGQxNWNlOWVhYmRhMWRlOWYzN2I5YzRjMzI1YmY2NDlmOCAxMDA3
NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL21ha2VfbmFtZXMucGwKQEAgLTExNzIsOCArMTE3Miw4IEBAIEVORAogOwogICAg
IH0gZWxzaWYgKCR3cmFwcGVyRmFjdG9yeVR5cGUgZXEgIlY4IikgewogICAgICAgICBwcmludCBG
IDw8RU5ECisjaW5jbHVkZSAiVjhIVE1MQ3VzdG9tRWxlbWVudC5oIgogI2luY2x1ZGUgIlY4JHBh
cmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnQuaCIKLSAgICAgICAgCiAjaW5jbHVkZSA8djguaD4K
IEVORAogOwpAQCAtMTI3NCw2ICsxMjc0LDExIEBAIEVORAogICAgIHJldHVybiBWOFNWR0VsZW1l
bnQ6OmNyZWF0ZVdyYXBwZXIoZWxlbWVudCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIEVO
RAogOworICAgICAgICB9IGVsc2lmICgkcGFyYW1ldGVyc3tuYW1lc3BhY2V9IGVxICJIVE1MIikg
eworICAgICAgICAgICAgcHJpbnQgRiA8PEVORAorICAgIHJldHVybiBWOEhUTUxDdXN0b21FbGVt
ZW50Ojp0b1Y4KGVsZW1lbnQsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CitFTkQKKzsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHByaW50IEYgPDxFTkQKICAgICByZXR1cm4gd3Jh
cCh0byRwYXJhbWV0ZXJze2ZhbGxiYWNrSW50ZXJmYWNlTmFtZX0oZWxlbWVudCksIGNyZWF0aW9u
Q29udGV4dCwgaXNvbGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxE
b2N1bWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5pZGwKaW5kZXgg
M2Q4MDUwYTExNDY2YWE3ZTNjYzU4NWUyMTAwZjJkYWY0ZTNiMDRkYy4uY2M5MGY0Y2VmMjY1OWRm
M2ZiNzMyNDg2OTMwZmJhMTU2MDc3NGI3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRG9jdW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50
LmlkbApAQCAtNTIsNiArNTIsMTEgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRWxlbWVudCBh
Y3RpdmVFbGVtZW50OwogICAgIGJvb2xlYW4gaGFzRm9jdXMoKTsKIAorI2lmIGRlZmluZWQoRU5B
QkxFX0NVU1RPTV9ET01fRUxFTUVOVFMpICYmIEVOQUJMRV9DVVNUT01fRE9NX0VMRU1FTlRTCisg
ICAgW1Y4RW5hYmxlZEF0UnVudGltZT1jdXN0b21ET01FbGVtZW50cywgQ29uZGl0aW9uYWw9Q1VT
VE9NX0RPTV9FTEVNRU5UUywgSW1wbGVtZW50ZWRBcz1yZWdpc3RlckVsZW1lbnRdCisgICAgQ3Vz
dG9tRWxlbWVudENvbnN0cnVjdG9yIHdlYmtpdFJlZ2lzdGVyKGluIERPTVN0cmluZyBuYW1lLCBp
biBbT3B0aW9uYWxdIERpY3Rpb25hcnkgb3B0aW9ucykgcmFpc2VzKERPTUV4Y2VwdGlvbik7Cisj
ZW5kaWYKKwogICAgIC8vIERlcHJlY2F0ZWQgYXR0cmlidXRlcwogICAgICAgICAgICAgIFtUcmVh
dE51bGxBcz1OdWxsU3RyaW5nXSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGJnQ29sb3I7CiAgICAgICAg
ICAgICAgW1RyZWF0TnVsbEFzPU51bGxTdHJpbmddIGF0dHJpYnV0ZSBET01TdHJpbmcgZmdDb2xv
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaSBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQppbmRleCA0ZjQzMTA2ZDM4NzUxZDRm
NzU4OWRkNzJkYjNjZTJlNGYxZDRjYTFmLi43MjQ3ZjY0YWU0YjM0NGNiZmMwYWJjMzBiYjdlNWMx
ZjViNTkzZTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5
cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCkBAIC01MSw2ICs1
MSw3IEBACiAgICAgICAnRU5BQkxFX0NTU19TSEFERVJTPTEnLAogICAgICAgJ0VOQUJMRV9DU1Nf
VkFSSUFCTEVTPTEnLAogICAgICAgJ0VOQUJMRV9DU1NfU1RJQ0tZX1BPU0lUSU9OPTEnLAorICAg
ICAgJ0VOQUJMRV9DVVNUT01fRE9NX0VMRU1FTlRTPTEnLAogICAgICAgJ0VOQUJMRV9DVVNUT01f
U0NIRU1FX0hBTkRMRVI9MCcsCiAgICAgICAnRU5BQkxFX0RBU0hCT0FSRF9TVVBQT1JUPTAnLAog
ICAgICAgJ0VOQUJMRV9EQVRBX1RSQU5TRkVSX0lURU1TPTEnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUnVudGltZUZlYXR1cmVzLmggYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJSdW50aW1lRmVhdHVyZXMuaAppbmRleCAyZjZlZjFjZTRl
YTA5NGZkMWJjYTRmMTI4ZGEzNGU1MmE1MDk3NWFiLi41MTI0MmQ0MjMzMDBlMzU2ZTg3NzhjMmJh
ODhkZjg1MTIwYjczMzllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJSdW50aW1lRmVhdHVyZXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJSdW50aW1lRmVhdHVyZXMuaApAQCAtMTI3LDYgKzEyNyw5IEBAIHB1YmxpYzoKICAgICBX
RUJLSVRfRVhQT1JUIHN0YXRpYyB2b2lkIGVuYWJsZVNoYWRvd0RPTShib29sKTsKICAgICBXRUJL
SVRfRVhQT1JUIHN0YXRpYyBib29sIGlzU2hhZG93RE9NRW5hYmxlZCgpOwogCisgICAgV0VCS0lU
X0VYUE9SVCBzdGF0aWMgdm9pZCBlbmFibGVDdXN0b21ET01FbGVtZW50cyhib29sKTsKKyAgICBX
RUJLSVRfRVhQT1JUIHN0YXRpYyBib29sIGlzQ3VzdG9tRE9NRWxlbWVudHNFbmFibGVkKCk7CisK
ICAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyB2b2lkIGVuYWJsZVN0eWxlU2NvcGVkKGJvb2wpOwog
ICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIGJvb2wgaXNTdHlsZVNjb3BlZEVuYWJsZWQoKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUnVudGltZUZlYXR1cmVz
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlJ1bnRpbWVGZWF0dXJlcy5jcHAK
aW5kZXggYTE5NWRlMjkyOTA4MDBjMDUwM2YxMThiMGIzNjM3MWYwYjI4NDZjOS4uMTUzMDNmYzEz
NDQ3MzRhMzc1OTNmZWFkZmYyMGZmOWQyNDVmZDhlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViUnVudGltZUZlYXR1cmVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJSdW50aW1lRmVhdHVyZXMuY3BwCkBAIC00NjcsNiArNDY3LDI1IEBA
IGJvb2wgV2ViUnVudGltZUZlYXR1cmVzOjppc1NoYWRvd0RPTUVuYWJsZWQoKQogI2VuZGlmCiB9
CiAKK3ZvaWQgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVDdXN0b21ET01FbGVtZW50cyhib29s
IGVuYWJsZSkKK3sKKyNpZiBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKKyAgICBSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzZXRDdXN0b21ET01FbGVtZW50cyhlbmFibGUpOworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oZW5hYmxlKTsKKyNlbmRpZgorfQorCitib29sIFdlYlJ1bnRpbWVGZWF0
dXJlczo6aXNDdXN0b21ET01FbGVtZW50c0VuYWJsZWQoKQoreworI2lmIEVOQUJMRShDVVNUT01f
RE9NX0VMRU1FTlRTKQorICAgIHJldHVybiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpjdXN0b21E
T01FbGVtZW50c0VuYWJsZWQoKTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9
CisKKwogdm9pZCBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZVN0eWxlU2NvcGVkKGJvb2wgZW5h
YmxlKQogewogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFu
Z2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNmZlMzg0MzU5OGU2ZDUzNjBjMTkzNTRkODFh
MWFjYjIxZjk4NmM1YS4uMmNlMGVjYzEwNzQxODQyNzQ0ZDIzMzkyOTYyOWE1Y2QxYTc0YzNlMCAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE1IEBACisyMDEyLTExLTE5ICBIYWppbWUgTW9ycml0YSAgPG1vcnJpdGFAZ29vZ2xlLmNv
bT4KKworICAgICAgICBbQ3VzdG9tIEVsZW1lbnRzXSBJbXBsZW1lbnQgYmFyZS1ib25lIGRvY3Vt
ZW50LnJlZ2lzdGVyKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEwMDIyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZGVkIGVuYWJsZUN1c3RvbURPTUVsZW1lbnRzIGZsYWcuCisKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwOgorICAgICAgICAoVGVzdFNoZWxs
OjpUZXN0U2hlbGwpOgorCiAyMDEyLTExLTIwICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcu
Ym90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTMzODU5
LgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNw
cCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKaW5kZXggNzVm
ZWMxMzBhMDdjNTZmNzk3YjQzOWVmNGM5ZWRhMmZjZDIwNDkyYy4uODI1MGE5MDhlYmU5OWY3NGM3
NjQzZWQwNTM0MmMwOTkwOWQ4OTZiZCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFNoZWxsLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0U2hlbGwuY3BwCkBAIC0xNDUsNiArMTQ1LDcgQEAgVGVzdFNoZWxsOjpUZXN0U2hlbGwo
KQogICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlVmlkZW9UcmFjayh0cnVlKTsKICAgICBX
ZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZUdhbWVwYWQodHJ1ZSk7CiAgICAgV2ViUnVudGltZUZl
YXR1cmVzOjplbmFibGVTaGFkb3dET00odHJ1ZSk7CisgICAgV2ViUnVudGltZUZlYXR1cmVzOjpl
bmFibGVDdXN0b21ET01FbGVtZW50cyh0cnVlKTsKICAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVu
YWJsZVN0eWxlU2NvcGVkKHRydWUpOwogICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlU2Ny
aXB0ZWRTcGVlY2godHJ1ZSk7CiAgICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVSZXF1ZXN0
QXV0b2NvbXBsZXRlKHRydWUpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDE4NDY1MTczMDEzNWVkMDAyMTVmZTdhNDc3MTli
NmFlZGY0NThlMjQuLjhkNjc2MmI4YWM2YWQwYjNjZGI0ZWNkODE2OTAwN2MyMzdhMjA5YjEgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0xMS0xOSAgSGFqaW1lIE1vcnJpdGEgIDxtb3JyaXRh
QGdvb2dsZS5jb20+CisKKyAgICAgICAgW0N1c3RvbSBFbGVtZW50c10gSW1wbGVtZW50IGJhcmUt
Ym9uZSBkb2N1bWVudC5yZWdpc3RlcigpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMDAyMjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIGZhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1iYXNp
Yy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0
ZXItYmFzaWMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvVGVz
dEV4cGVjdGF0aW9uczoKKwogMjAxMi0xMS0yMCAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiBGaXhlZCB3ZWJraXRfbGludCBjb21w
bGFpbnRzIGFib3V0IG92ZXJsYXBwaW5nIGVudHJpZXMgaW4gQ2hyb21pdW0gVGVzdEV4cGVjdGF0
aW9ucy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1y
ZWdpc3Rlci1iYXNpYy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20v
ZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEwNTUzMTFj
NmY5ZGE4ODIyOTBkNTAyZWEzZmU0MjRkZjY5NzA3ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMtZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsMzIgQEAKK1Rlc3RpbmcgZG9jdW1lbnQucmVnaXN0ZXIoKSBiYXNpYyBi
ZWhhdmlvcnMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIg
bWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGRvY3VtZW50
LnJlZ2lzdGVyKCdmb28nKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IEludmFsaWRDaGFyYWN0ZXJF
cnJvcjogRE9NIEV4Y2VwdGlvbiA1LgorUEFTUyBkb2N1bWVudC5yZWdpc3RlcigneS1mb28nKSB0
aHJldyBleGNlcHRpb24gRXJyb3I6IEludmFsaWRDaGFyYWN0ZXJFcnJvcjogRE9NIEV4Y2VwdGlv
biA1LgorUEFTUyBkb2N1bWVudC5yZWdpc3RlcigneGZvbycpIHRocmV3IGV4Y2VwdGlvbiBFcnJv
cjogSW52YWxpZENoYXJhY3RlckVycm9yOiBET00gRXhjZXB0aW9uIDUuCitQQVNTIGRvY3VtZW50
LnJlZ2lzdGVyKCd5LXgtZm9vJykgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJbnZhbGlkQ2hhcmFj
dGVyRXJyb3I6IERPTSBFeGNlcHRpb24gNS4KK1BBU1MgdHlwZW9mIGZvb0NvbnN0cnVjdG9yIGlz
ICdmdW5jdGlvbicKK1BBU1MgZm9vQ29uc3RydWN0b3IucHJvdG90eXBlIGlzIEhUTUxTcGFuRWxl
bWVudC5wcm90b3R5cGUKK1BBU1MgZG9jdW1lbnQucmVnaXN0ZXIoJ3gtZm9vJykgdGhyZXcgZXhj
ZXB0aW9uIEVycm9yOiBJbnZhbGlkU3RhdGVFcnJvcjogRE9NIEV4Y2VwdGlvbiAxMS4KK1BBU1Mg
ZG9jdW1lbnQucmVnaXN0ZXIoJ1gtRk9PJykgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJbnZhbGlk
U3RhdGVFcnJvcjogRE9NIEV4Y2VwdGlvbiAxMS4KK1BBU1MgZm9vQ29uc3RydWN0b3IoKSB0aHJl
dyBleGNlcHRpb24gVHlwZUVycm9yOiBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBj
YWxsZWQgYXMgYSBmdW5jdGlvbi4uCitQQVNTIGNyZWF0ZWRGb28uX19wcm90b19fIGlzIGZvb0Nv
bnN0cnVjdG9yLnByb3RvdHlwZQorUEFTUyBjcmVhdGVkRm9vLmNvbnN0cnVjdG9yIGlzIGZvb0Nv
bnN0cnVjdG9yCitQQVNTIGNyZWF0ZWRGb28udGFnTmFtZSBpcyAnWC1GT08nCitQQVNTIGNyZWF0
ZWRGb28udGV4dENvbnRlbnQgaXMgJ0hlbGxvJworUEFTUyBjcmVhdGVkRm9vLmxhc3RDaGlsZCBp
cyBjaGlsZERpdgorUEFTUyBwYXJzZWRGb28uX19wcm90b19fIGlzIGZvb0NvbnN0cnVjdG9yLnBy
b3RvdHlwZQorUEFTUyBwYXJzZWRGb28udGFnTmFtZSBpcyAnWC1GT08nCitQQVNTIHBhcnNlZEZv
by5zb21lUHJvcGVydHkgaXMgY29udGFpbmVyLmZpcnN0Q2hpbGQuc29tZVByb3BlcnR5CitQQVNT
IGNyZWF0ZWRCYXIudGFnTmFtZSBpcyAnWC1CQVInCitQQVNTIGNyZWF0ZWRVcHBlckJhci5jb25z
dHJ1Y3RvciBpcyBiYXJDb25zdHJ1Y3RvcgorUEFTUyBjcmVhdGVkVXBwZXJCYXIudGFnTmFtZSBp
cyAnWC1CQVInCitQQVNTIGNyZWF0ZWRNaXhlZEJhci5jb25zdHJ1Y3RvciBpcyBiYXJDb25zdHJ1
Y3RvcgorUEFTUyBjcmVhdGVkTWl4ZWRCYXIudGFnTmFtZSBpcyAnWC1CQVInCitQQVNTIGNvbnRh
aW5lci5maXJzdENoaWxkLmNvbnN0cnVjdG9yIGlzIGJhckNvbnN0cnVjdG9yCitQQVNTIGNvbnRh
aW5lci5maXJzdENoaWxkLnRhZ05hbWUgaXMgJ1gtQkFSJworUEFTUyBjb250YWluZXIubGFzdENo
aWxkLmNvbnN0cnVjdG9yIGlzIGJhckNvbnN0cnVjdG9yCitQQVNTIGNvbnRhaW5lci5sYXN0Q2hp
bGQudGFnTmFtZSBpcyAnWC1CQVInCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9t
L2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1iYXNpYy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9k
b20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLWJhc2ljLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTFlOGFm
OGYzOTllNmI0N2UzMjNkN2EyNzE3MTY4MWU3Y2MzODRjMQotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1iYXNpYy5odG1sCkBA
IC0wLDAgKzEsODQgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8ZGl2IGlkPSJjb250YWluZXIiPjwvZGl2PgorPHNjcmlwdD4KK2Rlc2NyaXB0
aW9uKCJUZXN0aW5nIGRvY3VtZW50LnJlZ2lzdGVyKCkgYmFzaWMgYmVoYXZpb3JzLiIpOworCitp
ZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7Citkb2N1
bWVudC5yZWdpc3RlciA9IGRvY3VtZW50LnJlZ2lzdGVyIHx8IGRvY3VtZW50LndlYmtpdFJlZ2lz
dGVyOworCisvLyBJbnZhbGlkIG5hbWVzCitzaG91bGRUaHJvdygiZG9jdW1lbnQucmVnaXN0ZXIo
J2ZvbycpIiwgIidFcnJvcjogSW52YWxpZENoYXJhY3RlckVycm9yOiBET00gRXhjZXB0aW9uIDUn
Iik7CitzaG91bGRUaHJvdygiZG9jdW1lbnQucmVnaXN0ZXIoJ3ktZm9vJykiLCAiJ0Vycm9yOiBJ
bnZhbGlkQ2hhcmFjdGVyRXJyb3I6IERPTSBFeGNlcHRpb24gNSciKTsKK3Nob3VsZFRocm93KCJk
b2N1bWVudC5yZWdpc3RlcigneGZvbycpIiwgIidFcnJvcjogSW52YWxpZENoYXJhY3RlckVycm9y
OiBET00gRXhjZXB0aW9uIDUnIik7CitzaG91bGRUaHJvdygiZG9jdW1lbnQucmVnaXN0ZXIoJ3kt
eC1mb28nKSIsICInRXJyb3I6IEludmFsaWRDaGFyYWN0ZXJFcnJvcjogRE9NIEV4Y2VwdGlvbiA1
JyIpOworCit2YXIgZm9vQ29uc3RydWN0b3IgPSBkb2N1bWVudC5yZWdpc3RlcigieC1mb28iKTsK
K3Nob3VsZEJlKCJ0eXBlb2YgZm9vQ29uc3RydWN0b3IiLCAiJ2Z1bmN0aW9uJyIpOworc2hvdWxk
QmUoImZvb0NvbnN0cnVjdG9yLnByb3RvdHlwZSIsICJIVE1MU3BhbkVsZW1lbnQucHJvdG90eXBl
Iik7CisKKy8vIE5hbWUgY29uZmxpY3RzCitzaG91bGRUaHJvdygiZG9jdW1lbnQucmVnaXN0ZXIo
J3gtZm9vJykiLCAiJ0Vycm9yOiBJbnZhbGlkU3RhdGVFcnJvcjogRE9NIEV4Y2VwdGlvbiAxMSci
KTsKK3Nob3VsZFRocm93KCJkb2N1bWVudC5yZWdpc3RlcignWC1GT08nKSIsICInRXJyb3I6IElu
dmFsaWRTdGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDExJyIpOworCisvLyBDYWxsIGFzIGZ1bmN0
aW9uCitzaG91bGRUaHJvdygiZm9vQ29uc3RydWN0b3IoKSIsICInVHlwZUVycm9yOiBET00gb2Jq
ZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4nIikKKworLy8g
Q29uc3RydWN0b3IgaW5pdGlhdGVkIGluc3RhbnRpYXRpb24KK3ZhciBjcmVhdGVkRm9vID0gbmV3
IGZvb0NvbnN0cnVjdG9yKCk7CisKKy8vIEpTIGJ1aWx0LWluIHByb3BlcnRpZXMKK3Nob3VsZEJl
KCJjcmVhdGVkRm9vLl9fcHJvdG9fXyIsICJmb29Db25zdHJ1Y3Rvci5wcm90b3R5cGUiKTsKK3No
b3VsZEJlKCJjcmVhdGVkRm9vLmNvbnN0cnVjdG9yIiwgImZvb0NvbnN0cnVjdG9yIik7CisKKy8v
IE5hdGl2ZSBnZXR0ZXIKK3Nob3VsZEJlKCJjcmVhdGVkRm9vLnRhZ05hbWUiLCAiJ1gtRk9PJyIp
OworCisvLyBOYXRpdmUgc2V0dGVyCitjcmVhdGVkRm9vLmlubmVySFRNTCA9ICJIZWxsbyI7Citz
aG91bGRCZSgiY3JlYXRlZEZvby50ZXh0Q29udGVudCIsICInSGVsbG8nIik7CisKKy8vIE5hdGl2
ZSBtZXRob2QKK3ZhciBjaGlsZERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwor
Y3JlYXRlZEZvby5hcHBlbmRDaGlsZChjaGlsZERpdik7CitzaG91bGRCZSgiY3JlYXRlZEZvby5s
YXN0Q2hpbGQiLCAiY2hpbGREaXYiKTsKKworLy8gUGFyc2VyIGluaXRpYXRlZCBpbnN0YW50aWF0
aW9uCit2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRhaW5lciIp
OworY29udGFpbmVyLmlubmVySFRNTCA9ICI8eC1mb28+PC94LWZvbz4iOworcGFyc2VkRm9vID0g
Y29udGFpbmVyLmZpcnN0Q2hpbGQ7CisKK3Nob3VsZEJlKCJwYXJzZWRGb28uX19wcm90b19fIiwg
ImZvb0NvbnN0cnVjdG9yLnByb3RvdHlwZSIpOworc2hvdWxkQmUoInBhcnNlZEZvby50YWdOYW1l
IiwgIidYLUZPTyciKTsKKworLy8gRW5zdXJpbmcgdGhlIHdyYXBwZXIgaXMgcmV0YWluZWQKK3Bh
cnNlZEZvby5zb21lUHJvcGVydHkgPSAiaGVsbG8iOworc2hvdWxkQmUoInBhcnNlZEZvby5zb21l
UHJvcGVydHkiLCAiY29udGFpbmVyLmZpcnN0Q2hpbGQuc29tZVByb3BlcnR5Iik7CisKKy8vIEhh
dmluZyBhbm90ZWhyIGNvbnN0cnVjdG9yCit2YXIgYmFyQ29uc3RydWN0b3IgPSBkb2N1bWVudC5y
ZWdpc3RlcigieC1iYXIiKTsKK3ZhciBjcmVhdGVkQmFyID0gbmV3IGJhckNvbnN0cnVjdG9yKCk7
CitzaG91bGRCZSgiY3JlYXRlZEJhci50YWdOYW1lIiwgIidYLUJBUiciKTsKKworLy8gV2l0aCBp
cnJlZ3VsYXIgY2FzZXMKK3ZhciBjcmVhdGVkVXBwZXJCYXIgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJYLUJBUiIpOwordmFyIGNyZWF0ZWRNaXhlZEJhciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoIlgtQmFyIik7CitzaG91bGRCZSgiY3JlYXRlZFVwcGVyQmFyLmNvbnN0cnVjdG9yIiwgImJh
ckNvbnN0cnVjdG9yIik7CitzaG91bGRCZSgiY3JlYXRlZFVwcGVyQmFyLnRhZ05hbWUiLCAiJ1gt
QkFSJyIpOworc2hvdWxkQmUoImNyZWF0ZWRNaXhlZEJhci5jb25zdHJ1Y3RvciIsICJiYXJDb25z
dHJ1Y3RvciIpOworc2hvdWxkQmUoImNyZWF0ZWRNaXhlZEJhci50YWdOYW1lIiwgIidYLUJBUici
KTsKKworY29udGFpbmVyLmlubmVySFRNTCA9ICI8WC1CQVI+PC9YLUJBUj48WC1CYXI+PC9YLUJh
cj4iOworc2hvdWxkQmUoImNvbnRhaW5lci5maXJzdENoaWxkLmNvbnN0cnVjdG9yIiwgImJhckNv
bnN0cnVjdG9yIik7CitzaG91bGRCZSgiY29udGFpbmVyLmZpcnN0Q2hpbGQudGFnTmFtZSIsICIn
WC1CQVInIik7CitzaG91bGRCZSgiY29udGFpbmVyLmxhc3RDaGlsZC5jb25zdHJ1Y3RvciIsICJi
YXJDb25zdHJ1Y3RvciIpOworc2hvdWxkQmUoImNvbnRhaW5lci5sYXN0Q2hpbGQudGFnTmFtZSIs
ICInWC1CQVInIik7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucwppbmRleCAzMGIzNjVlNjUwZjVjY2Q4NTNkMzdi
ZjZlNDhjMmJlMGVmYjNkZmIxLi4yNGEwMzQxZjg4NDBhMjdjYjE5YjI5ZWVlM2JiZmE4ODE4ZDhh
MDA0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9u
cworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucwpAQCAtNDI1
LDYgKzQyNSw4IEBAIGZhc3QvcmVnaW9ucy9zdHlsZS1zY29wZWQtaW4tZmxvdy5odG1sCiBmYXN0
L2RvbS9zaGFkb3cKIGVkaXRpbmcvc2hhZG93CiBpbnNwZWN0b3IvZWxlbWVudHMvdXBkYXRlLXNo
YWRvd2RvbS5odG1sCisjIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKSBpcyBkaXNhYmxlZC4K
K2Zhc3QvZG9tL2N1c3RvbQogCiAjIEpTQyBkb2VzIG5vdCBzdXBwb3J0IHNldElzb2xhdGVkV29y
bGRTZWN1cml0eU9yaWdpbiAoaHR0cDovL3dlYmtpdC5vcmcvYi82MTU0MCkKIGh0dHAvdGVzdHMv
c2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC9jcm9zcy1vcmlnaW4teGhyLmh0bWwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185141</attachid>
            <date>2013-01-28 20:42:03 -0800</date>
            <delta_ts>2013-01-28 21:16:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100229-20130129133849.patch</filename>
            <type>text/plain</type>
            <size>74755</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxMDMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjdlMWMzYWYyZWMyYzY5
YWE1NmI0M2Q0NDFjNzQ1NWY0MDVkNmIxOS4uN2U4NmQxMzRkNWNmMmJkZTI2ODAwZmRjZWE2ODkx
MWZkNmI1ZWI1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2NSBAQAorMjAxMy0wMS0yNyAgSGFq
aW1lIE1vcnJpdGEgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgW0N1c3RvbSBFbGVt
ZW50c10gSW1wbGVtZW50IGJhcmUtYm9uZSBkb2N1bWVudC5yZWdpc3RlcigpCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDAyMjkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNoYW5nZSBpbXBsZW1l
bnRzIHByZWZpeGVkIHZlcnNpb24gb2YgZG9jdW1lbnQucmVnaXRlcigpLCB3aXRoIG1pbmltYWwg
ZmVhdHVyZSBzdXBwb3J0LgorICAgICAgICAtIFRoZSBmZWF0dXJlIGlzIGd1YXJkZWQgYnkgRU5B
QkxFKENVU1RPTV9ET01fRUxNRU5UUykgYW5kIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmN1c3Rv
bURPTUVsZW1lbnRzRW5hYmxlZCgpLgorICAgICAgICAtIFRoaXMgYmFyZS1ib25lIHZlcnNpb24g
b25seSByZWNvZ25pemVzICJuYW1lIiBwYXJhbXRlciBhbmQgaWdub3JlcyBhbnkgb3B0aW9uYWwg
cGFyYW1ldGVycy4KKyAgICAgICAgLSBDdXJyZW50bHkgb25seSBWOCBpcyBzdXBwb3J0ZWQuIEpT
QyBiaW5kaW5nIG5lZWRzIGl0cyBvd24gYmluZGluZyBpbXBsZW1lbnRhdGlvbi4KKworICAgICAg
ICA9IE1ham9yIG5ldyBjbGFzc2VzIHVuZGVyIGRvbS86CisKKyAgICAgICAgVGhlIGRvbSBtb2R1
bGUgaGFzIHR3byBuZXcgY2xhc3NlczoKKyAgICAgICAgLSBDdXN0b21FbGVtZW50Q29uc3RydWN0
b3I6IEEgcmV0dXJuIHZhbHVlIG9mIGRvY3VtZW50LnJlZ2lzdGVyKCkKKyAgICAgICAgICB3aGlj
aCBob2xkcyB0aGUgY3VzdG9tIGVsZW1lbnQgZGVmaW5pdGlvbi4KKyAgICAgICAgLSBDdXN0b21F
bGVtZW50UmVnaXN0cnk6IEEgY29sbGVjdGlvbiBvZiBDdXN0b21FbGVtZW50Q29uc3RydWN0b3Ig
b2JqZWN0cy4KKyAgICAgICAgICBDdXN0b21FbGVtZW50UmVnaXN0cnkgaW5zdGFuY2UgaXMgY3Jl
YXRlZCBwZXIgRG9jdW1lbnQgYW5kIGl0IGlzIG93bmVkIGJ5IHRoZSBEb2N1bWVudC4KKworICAg
ICAgICBDdXN0b21FbGVtZW50Q29uc3RydWN0b3Iga25vd3MgdGhlIGRlZmluaXRpb24gb2YgZWFj
aCBjdXN0b20KKyAgICAgICAgZWxlbWVudCwgd2hpY2ggaXMgcmVnaXN0ZXJlZCBieSBkb2N1bWVu
dC5yZWdpc3RlcigpLiBUaGUgbmFtZSBhbmQKKyAgICAgICAgb3RoZXIgb3B0aW9ucyBhcmUgaGVs
ZCBieSB0aGlzIG9iamVjdC4gQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5IG93bnMgYSBzZXQKKyAgICAg
ICAgb2YgdGhlIHJlZ2lzdGVyZWQgY29uc3RydWN0b3JzLiBUaGUgcmVnaXN0cnkgZ3VhcmFudGVl
cyBpbnZhcmlhbnRzCisgICAgICAgIGxpa2UgdW5pcXVlbmVzcyBvZiB0aGUgZWxlbWVudCBuYW1l
cy4KKworICAgICAgICA9IEEgY2hhbmdlIG9uIG1ha2VfbmFtZXMucGwKKworICAgICAgICBUaGlz
IGNoYW5nZSB0d2Vha3MgbWFrZV9uYW1lcy5wbCAob3IgZ2VuZXJhdGVkIEhUTUxFbGVtZW50RmFj
dG9yeSkKKyAgICAgICAgdG8gaG9vayB0aGUgY3JlYXRpb25zIG9mIHVua25vd24gZWxlbWVudHMu
IFNvbWUgb2YgZWxlbWVudCBuYW1lcworICAgICAgICB3aGljaCBjb21lIHRvIHRoZSBmYWxsYmFj
ayBwYXRoIGNhbiBiZSBvbmUgb2YgcmVnaXN0ZXJlZCBjdXN0b20KKyAgICAgICAgZWxlbWVudC4K
KworICAgICAgICA9IFtWOFdyYXBBc0Z1bmN0aW9uXSBleHRlbmRlZCBhdHRyaWJ1dGU6CisKKyAg
ICAgICAgVGhlIGRvY3VtZW50LnJlZ2lzdGVyKCkgQVBJIHJldHVybnMgYSBjb25zdHJ1Y3Rvcgor
ICAgICAgICBmdW5jdGlvbi4gSG93ZXZlciwgdGhlIFY4IGJpbmRpbmcgY3VycmVudGx5IGRvZXNu
J3Qgc3VwcG9ydCBpdC4gVG8KKyAgICAgICAgbWFrZSBpdCBwb3NzaWJsZSwgdGhpcyBjaGFuZ2Ug
aW50cm9kdWNlcyAiVjhXcmFwQXNGdW5jdGlvbiIKKyAgICAgICAgZXh0ZW5kZWQgYXR0cmlidXRl
IGZvciBhbm5vdGF0aW5nIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciBJREwKKyAgICAgICAgaW50
ZXJmYWNlLgorCisgICAgICAgIFY4V3JhcEFzRnVuY3Rpb24gd3JhcHMgdGhlIGFubm90YXRlZCBp
bnRlcmZhY2Ugd2l0aCBhIEphdmFTY2lycHQKKyAgICAgICAgZnVuY3Rpb24sIHdoaWNoIGNhbGxz
IHRoZSBvcmlnaW5hbCBvYmplY3QgYXMgYSBmdW5jdGlvbiBvciBhCisgICAgICAgIGNvbnN0cnVj
dG9yIGRlcGVuZHMgb24gdGhlIGNhbGwgc2l0ZS4KKworICAgICAgICBXaXRoIHRoaXMgd3JhcHBl
ciBmdW5jdGlvbiwgdGhlcmUgaXMgdHdvIGxldmVsIG9mIGluZGlyZWN0aW9uCisgICAgICAgIGJl
dHdlZW4gbmF0aXZlIEMrKyBvYmplY3QgYW5kIGF1dGhvci12aXNpYmxlIEpTIGZ1bmN0aW9uOgor
CisgICAgICAgIFtKUyBBZGFwdG9yIEZ1Y3Rpb25dIDwtKGhpZGRlbiBwcm9wZXJ0eSktPiBbSlMg
V3JhcHBlciBPYmplY3RdIC0oaW50ZXJuYWwgZmllbGQpLT4gW0MrKyBOYXRpdmUgb2JqZWN0XQor
CisgICAgICAgIFRoZSBjb2RlIGdlbmVyYXRvciBnZW5lcmF0ZXMgdGhlIGJpbmRpbmcgY29kZSB3
aGljaCBkZWFscyB3aXRoCisgICAgICAgIHRoaXMgaW5kaXJlY3Rpb24uICBBbHNvLCB0aGVyZSBp
cyBhIHNldCBvZiBoZWxwZXIgZnVuY3Rpb25zIGluCisgICAgICAgIFY4QWRhcHRvckZ1bmN0aW9u
LmgvY3BwIHdoaWNoIHRha2UgY2FyZSBvZiB0aGlzIGluZGlyZWN0aW9uLgorICAgICAgICBWOERP
TVdyYXBwZXIuY3BwL2ggd29ya3MgYXMgYSBmYWNhZGUgZm9yIHRoZXNlIEFQSXMgYW5kIHVzZWQg
ZnJvbQorICAgICAgICB0aGUgZ2VuZXJhdGVkIGNvZGUuCisKKyAgICAgICAgVGhpcyByZWR1bmRh
bmN5IGNvbWVzIGZyb20gbGltaXRhdGlvbnMgb2YgYm90aCBWOCBiaW5kaW5ncyBhbmQgVjgKKyAg
ICAgICAgZW1iZWRkaW5nIEFQSS4gU2VlIGJ1ZyAxMDgxMzggZm9yIGRldGFpbHMuCisKKyAgICAg
ICAgPSBWOEhUTUxDdXN0b21FbGVtZW50CisKKyAgICAgICAgVW5saWtlIGJ1aWx0LWluIEhUTUwg
ZWxlbWVudHMsIGFueSBjdXN0b20gZWxlbWVudCBoYXMgbm8KKyAgICAgICAgY29ycmVzcG9uZGlu
ZyBDKysgY2xhc3MuIEluc3RlYWQsIGRvY3VtZW50LnJlZ2lzdGVyKCkgc2hvdWxkIGFsbG93Cisg
ICAgICAgIHBhc3NpbmcgYSBwcm90b3R5cGUgb2JqZWN0IGZvciB0aGUgZWxlbWVudHMgYmVpbmcg
cmVnaXN0ZXJlZC4KKworICAgICAgICBBbHRob3VnaCB0aGlzIGZpcnN0IHZlcnNpb24gZG9lc24n
dCBzdXBwb3J0IHRoZSBvcHRpbmFsIHByb3RvdHlwZQorICAgICAgICBwYXJhbWV0ZXIgeWV0LCBW
OEhUTUxDdXN0b21FbGVtZW50IGhlbHBlciBjbGFzcyBpcyBhIHBsdW1iaW5nIGZvcgorICAgICAg
ICBpdC4gVGhpcyBjbGFzcyBlbmNhcHN1bGF0ZXMgSlMgd3JhcHBlciBvYmplY3QgY3JlYXRpb24g
Zm9yIGN1c3RvbQorICAgICAgICBlbGVtZW1lbnQgaW5zdGFuY2VzLiBGb3IgZXhhbXBsZSwgaXQg
dGFrZXMgY2FyZSBvZiBwcm90b3R5cGUgY2hhaW4KKyAgICAgICAgc2V0dXAuIEFzIHdlIHN1cHBv
cnQgdGhlICJwcm90b3R5cGUiIG9wdGlvbmFsIHBhcmFtZXRlciBmb3IKKyAgICAgICAgZG9jdW1l
bnQucmVnaXN0ZXIoKSBpbiBmdXJ0dXJlIGNoYW5nZXMsIHRoaXMgcGx1bWJpbmcgd2lsbCBiZQor
ICAgICAgICBleHRlbmRlZC4KKworICAgICAgICA9IEN1c3RvbSBET00gZWxlbWV0bnMgYW5kIG11
bHRpcGxlIHdvcmxkcworCisgICAgICAgIEluIHRoaXMgcGF0Y2gsIGN1c3RvbSBlbGVtZW50IHJl
Z2lzdHJhdGlvbiBhbmQgaW5zdGFudGlhdGlvbiBpcyBub3QgYWxsb3dlZAorICAgICAgICBpbiBu
b24tbWFpbiB3b3JsZCBhbmQgZG9jdW1lbnQucmVnaXN0ZXIoKSBBUEkganVzdCBmYWlscyB0aGVy
ZS4KKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFz
aWMuaHRtbAorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6CisgICAgICAgICogYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1
cmVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL2dlbmVyaWMv
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5oOgorICAgICAgICAoUnVudGltZUVuYWJsZWRGZWF0dXJl
cyk6CisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpjdXN0b21ET01F
bGVtZW50c0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2V0Q3VzdG9tRE9NRWxlbWVudHMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQ6CisgICAgICAgICogYmluZGluZ3Mvdjgv
Q3VzdG9tRWxlbWVudEhlbHBlcnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudEhlbHBlcnM6OmRlZmF1bHRQcm90b3R5cGUpOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDdXN0b21FbGVtZW50SGVscGVycyk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvVjhBZGFwdG9yRnVuY3Rpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VjhBZGFwdG9yRnVuY3Rpb246OmdldFRlbXBsYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlY4QWRhcHRvckZ1bmN0aW9uOjpjb25maWd1cmVUZW1wbGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOEFkYXB0b3JGdW5jdGlvbjo6aW52b2NhdGlvbkNhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlY4QWRhcHRvckZ1bmN0aW9uOjp3cmFwKToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoVjhBZGFwdG9yRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
VjhBZGFwdG9yRnVuY3Rpb246OnVud3JhcCk6CisgICAgICAgIChXZWJDb3JlOjpWOEFkYXB0b3JG
dW5jdGlvbjo6Z2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjp0b0Z1bmN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpmcm9tRnVuY3Rpb24pOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oOgorICAgICAgICAoVjhET01XcmFw
cGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4SFRNTEN1c3RvbUVs
ZW1lbnQ6OmNyZWF0ZVdyYXBwZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4SFRNTEN1c3Rv
bUVsZW1lbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFY4SFRNTEN1
c3RvbUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6VjhIVE1MQ3VzdG9tRWxlbWVudDo6dG9W
OCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ3VzdG9tRWxlbWVudDo6dG9WOCk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yQ3VzdG9tLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9t
RWxlbWVudENvbnN0cnVjdG9yOjpjYWxsQXNGdW5jdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKiBk
b20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Q3VzdG9tRWxlbWVu
dENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rv
cjo6fkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21F
bGVtZW50Q29uc3RydWN0b3I6OndpbGxEZXN0cm95RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjpjcmVhdGVFbGVtZW50KToKKyAgICAgICAgKiBk
b20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChDdXN0b21FbGVtZW50Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjpkb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpD
dXN0b21FbGVtZW50Q29uc3RydWN0b3I6OnRhZ05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vz
dG9tRWxlbWVudENvbnN0cnVjdG9yOjpuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVs
ZW1lbnRDb25zdHJ1Y3Rvcjo6cHJvdG90eXBlKToKKyAgICAgICAgKiBkb20vQ3VzdG9tRWxlbWVu
dENvbnN0cnVjdG9yLmlkbDogQWRkZWQuCisgICAgICAgICogZG9tL0N1c3RvbUVsZW1lbnRSZWdp
c3RyeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpD
dXN0b21FbGVtZW50UmVnaXN0cnk6OkN1c3RvbUVsZW1lbnRSZWdpc3RyeSk6CisgICAgICAgIChX
ZWJDb3JlOjpDdXN0b21FbGVtZW50UmVnaXN0cnk6On5DdXN0b21FbGVtZW50UmVnaXN0cnkpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5Ojpjb25zdHJ1Y3Rvck9mKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6cmVnaXN0ZXJFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6ZmluZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVnaXN0cnk6OmNyZWF0ZUVsZW1lbnQpOgorICAg
ICAgICAqIGRvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKEN1c3RvbUVsZW1lbnRSZWdpc3RyeSk6CisgICAgICAgICogZG9tL0Rv
Y3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OnJlZ2lzdGVyRWxlbWVudCk6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKERvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjpyZWdpc3RyeSk6CisgICAgICAgICogZG9tL21ha2VfbmFtZXMucGw6CisgICAgICAgIChw
cmludFdyYXBwZXJGYWN0b3J5Q3BwRmlsZSk6CisgICAgICAgICogaHRtbC9Eb2N1bWVudC5pZGw6
CisKIDIwMTMtMDEtMjggIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBbY2hyb21pdW1dIEJ1aWxkIGZpeC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZjg4
MGQ3MTdmNDZhY2E0YjJmMjM4Y2Y2MWRjNTJjMWFjN2U1OTIwYy4uM2ExMTIwOTAyMmRhODE2NjEy
OGI2MzhmOTlmNTY3OGU3ODg4YzBhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMCBAQAorMjAxMy0wMS0yNyAgSGFqaW1lIE1vcnJpdGEgIDxtb3JyaXRhQGdvb2dsZS5j
b20+CisKKyAgICAgICAgW0N1c3RvbSBFbGVtZW50c10gSW1wbGVtZW50IGJhcmUtYm9uZSBkb2N1
bWVudC5yZWdpc3RlcigpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDAyMjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGRlZCBlbmFibGVDdXN0b21ET01FbGVtZW50cyBmbGFnLgorCisgICAgICAgICog
ZmVhdHVyZXMuZ3lwaToKKyAgICAgICAgKiBwdWJsaWMvV2ViUnVudGltZUZlYXR1cmVzLmg6Cisg
ICAgICAgIChXZWJSdW50aW1lRmVhdHVyZXMpOgorICAgICAgICAqIHNyYy9XZWJSdW50aW1lRmVh
dHVyZXMuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZUN1
c3RvbURPTUVsZW1lbnRzKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlJ1bnRpbWVGZWF0dXJlczo6aXNDdXN0b21ET01FbGVtZW50c0VuYWJsZWQpOgorCiAyMDEzLTAx
LTI4ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAg
ICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTQxMDA2LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2Vz
Lm1ha2UKaW5kZXggYmQ1ZjQ1ODQ1NjgyNDk1YWY5NmU4ZGYwYjk0YmJhY2RmN2RmM2RmZC4uMDg4
ZTFmZTczMjE0MDMzYTRmNDE1NDgzZjI1NjRjNDI2ODYxZjEyYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCkBAIC0yMTQsNiArMjE0LDcgQEAgQklORElOR19JRExTID0gXAogICAgICQo
V2ViQ29yZSkvZG9tL0NsaXBib2FyZC5pZGwgXAogICAgICQoV2ViQ29yZSkvZG9tL0NvbW1lbnQu
aWRsIFwKICAgICAkKFdlYkNvcmUpL2RvbS9Db21wb3NpdGlvbkV2ZW50LmlkbCBcCisgICAgJChX
ZWJDb3JlKS9kb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmlkbCBcCiAgICAgJChXZWJDb3Jl
KS9kb20vQ3VzdG9tRXZlbnQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2RvbS9ET01Db3JlRXhjZXB0
aW9uLmlkbCBcCiAgICAgJChXZWJDb3JlKS9kb20vRE9NRXJyb3IuaWRsIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQppbmRleCBmYTM1MGVhZDA5NWI2YTY5ODU0NDk2OWNjNTFmN2NjYjRhZmM0ZTE1Li41ZDQwMDQx
MmQ0ODc5YjU0MWNkNjViMGJhZGExYmRhMTQ2MjEwYzE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0y
MDMsNiArMjAzLDcgQEAKICAgICAgICAgICAgICdkb20vQ2xpcGJvYXJkLmlkbCcsCiAgICAgICAg
ICAgICAnZG9tL0NvbW1lbnQuaWRsJywKICAgICAgICAgICAgICdkb20vQ29tcG9zaXRpb25FdmVu
dC5pZGwnLAorICAgICAgICAgICAgJ2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaWRsJywK
ICAgICAgICAgICAgICdkb20vQ3VzdG9tRXZlbnQuaWRsJywKICAgICAgICAgICAgICdkb20vRE9N
Q29yZUV4Y2VwdGlvbi5pZGwnLAogICAgICAgICAgICAgJ2RvbS9ET01FcnJvci5pZGwnLApAQCAt
MTE3Niw2ICsxMTc3LDggQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9BcnJheVZhbHVlLmgn
LAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0JpbmRpbmdTdGF0ZS5jcHAnLAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL3Y4L0JpbmRpbmdTdGF0ZS5oJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92
OC9DdXN0b21FbGVtZW50SGVscGVycy5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0N1
c3RvbUVsZW1lbnRIZWxwZXJzLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0RPTURhdGFT
dG9yZS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5oJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9ET01SZXF1ZXN0U3RhdGUuaCcsCkBAIC0xMjQ0LDYgKzEy
NDcsOCBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1NoYXJlZFBlcnNpc3RlbnQuaCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuY3BwJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5oJywKKyAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5jcHAnLAorICAgICAgICAgICAg
J2JpbmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdz
L3Y4L1Y4QmluZGluZy5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5o
JywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEJpbmRpbmdNYWNyb3MuaCcsCkBAIC0xMjY1
LDYgKzEyNzAsOCBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmgn
LAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4R0NGb3JDb250ZXh0RGlzcG9zZS5jcHAnLAog
ICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4R0NGb3JDb250ZXh0RGlzcG9zZS5oJywKKyAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50LmNwcCcsCisgICAgICAgICAg
ICAnYmluZGluZ3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVudC5oJywKICAgICAgICAgICAgICdiaW5k
aW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdz
L3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4
SW5pdGlhbGl6ZXIuY3BwJywKQEAgLTEzMjUsNiArMTMzMiw3IEBACiAgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4Q29uc29sZUN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOENvb3JkaW5hdGVzQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4Q3J5cHRvQ3VzdG9tLmNwcCcsCisgICAgICAgICAgICAnYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yQ3VzdG9tLmNwcCcsCiAgICAg
ICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tRXZlbnRDdXN0b20uY3BwJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNh
bGxiYWNrLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tWFBh
dGhOU1Jlc29sdmVyLmNwcCcsCkBAIC0yNzUxLDYgKzI3NTksMTAgQEAKICAgICAgICAgICAgICdk
b20vQ29udGV4dEZlYXR1cmVzLmNwcCcsCiAgICAgICAgICAgICAnZG9tL0NvbnRleHRGZWF0dXJl
cy5oJywKICAgICAgICAgICAgICdkb20vQ3Jvc3NUaHJlYWRUYXNrLmgnLAorICAgICAgICAgICAg
J2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuY3BwJywKKyAgICAgICAgICAgICdkb20vQ3Vz
dG9tRWxlbWVudENvbnN0cnVjdG9yLmgnLAorICAgICAgICAgICAgJ2RvbS9DdXN0b21FbGVtZW50
UmVnaXN0cnkuY3BwJywKKyAgICAgICAgICAgICdkb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Lmgn
LAogICAgICAgICAgICAgJ2RvbS9DdXN0b21FdmVudC5jcHAnLAogICAgICAgICAgICAgJ2RvbS9D
dXN0b21FdmVudC5oJywKICAgICAgICAgICAgICdkb20vRE9NQWxsSW5PbmUuY3BwJywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0
dXJlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVk
RmVhdHVyZXMuY3BwCmluZGV4IDgyMGY1YTZhZjllYjc0MjM3ODE5Nzk2ZGIyODA1ZDVhMmU2YTc5
M2EuLmY3ZDM2OGI2NGY5NDA2OWRlZGY1NjMyN2Y2YTY5ZTRmNTUwODM3MTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZl
YXR1cmVzLmNwcApAQCAtMTg5LDYgKzE4OSwxMCBAQCBib29sIFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OmlzU2hhZG93RE9NRW5hYmxlZCA9IGZhbHNlOwogYm9vbCBSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjppc0F1dGhvclNoYWRvd0RPTUZvckFueUVsZW1lbnRFbmFibGVkID0gZmFsc2U7CiAjZW5k
aWYKIAorI2lmIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorYm9vbCBSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjppc0N1c3RvbURPTUVsZW1lbnRzRW5hYmxlZCA9IGZhbHNlOworI2VuZGlmCisK
ICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQogYm9vbCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpp
c1N0eWxlU2NvcGVkRW5hYmxlZCA9IGZhbHNlOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oCmluZGV4
IDIxNTMyZTljZWVhYjczZWY3MDhlNTY1YmVjYWZhODQwNTA4NWI1ZTAuLjQ0MDM2YTliOTBmNjZj
MjE4M2ExYzUzYmM1NDdmMGI3NDg3NDgzNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oCkBAIC0yMTAsNiAr
MjEwLDExIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRBdXRob3JTaGFkb3dET01Gb3JB
bnlFbGVtZW50RW5hYmxlZChib29sIGlzRW5hYmxlZCkgeyBpc0F1dGhvclNoYWRvd0RPTUZvckFu
eUVsZW1lbnRFbmFibGVkID0gaXNFbmFibGVkOyB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDVVNU
T01fRE9NX0VMRU1FTlRTKQorICAgIHN0YXRpYyBib29sIGN1c3RvbURPTUVsZW1lbnRzRW5hYmxl
ZCgpIHsgcmV0dXJuIGlzQ3VzdG9tRE9NRWxlbWVudHNFbmFibGVkOyB9CisgICAgc3RhdGljIHZv
aWQgc2V0Q3VzdG9tRE9NRWxlbWVudHMoYm9vbCBpc0VuYWJsZWQpIHsgaXNDdXN0b21ET01FbGVt
ZW50c0VuYWJsZWQgPSBpc0VuYWJsZWQ7IH0KKyNlbmRpZgorCiAjaWYgRU5BQkxFKFNUWUxFX1ND
T1BFRCkKICAgICBzdGF0aWMgYm9vbCBzdHlsZVNjb3BlZEVuYWJsZWQoKSB7IHJldHVybiBpc1N0
eWxlU2NvcGVkRW5hYmxlZDsgfQogICAgIHN0YXRpYyB2b2lkIHNldFN0eWxlU2NvcGVkRW5hYmxl
ZChib29sIGlzRW5hYmxlZCkgeyBpc1N0eWxlU2NvcGVkRW5hYmxlZCA9IGlzRW5hYmxlZDsgfQpA
QCAtMzQxLDYgKzM0NiwxMCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIGlzQXV0aG9yU2hh
ZG93RE9NRm9yQW55RWxlbWVudEVuYWJsZWQ7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDVVNUT01f
RE9NX0VMRU1FTlRTKQorICAgIHN0YXRpYyBib29sIGlzQ3VzdG9tRE9NRWxlbWVudHNFbmFibGVk
OworI2VuZGlmCisKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQogICAgIHN0YXRpYyBib29sIGlz
U3R5bGVTY29wZWRFbmFibGVkOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCmluZGV4IGNhY2EyMTdkYTIyOGY1Mzc0ZTJm
NGJhZDc4YWQwOGRmNWI0MGFiMzMuLjUzZGFhNTcwMWQ2MjM0MmJkOGNmZmU3ZTlhZTdhOGY1MTNm
MTg4ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvclY4LnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvclY4LnBtCkBAIC0zNTIsMTMgKzM1MiwyMCBAQCBFTkQKICAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgImZhbHNlO1xuIik7CiAgICAgfQogCisgICAgbXkgJGZyb21GdW5jdGlvbk9w
ZW5pbmcgPSAiIjsKKyAgICBteSAkZnJvbUZ1bmN0aW9uQ2xvc2luZyA9ICIiOworICAgIGlmICgk
aW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVjhXcmFwQXNGdW5jdGlvbiJ9KSB7Cisg
ICAgICAgICRmcm9tRnVuY3Rpb25PcGVuaW5nID0gIlY4RE9NV3JhcHBlcjo6ZnJvbUZ1bmN0aW9u
KCI7CisgICAgICAgICRmcm9tRnVuY3Rpb25DbG9zaW5nID0gIikiOworICAgIH0KKwogICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKICAgICBzdGF0aWMgYm9vbCBIYXNJbnN0YW5jZSh2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOwogICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gR2V0UmF3VGVtcGxhdGUodjg6Oklzb2xhdGUqID0gMCk7CiAgICAgc3Rh
dGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBHZXRUZW1wbGF0ZSh2ODo6
SXNvbGF0ZSogPSAwKTsKICAgICBzdGF0aWMgJHtuYXRpdmVUeXBlfSogdG9OYXRpdmUodjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBvYmplY3QpCiAgICAgewotICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDwke25hdGl2ZVR5cGV9Kj4ob2JqZWN0LT5HZXRBbGlnbmVkUG9pbnRlckZyb21JbnRl
cm5hbEZpZWxkKHY4RE9NV3JhcHBlck9iamVjdEluZGV4KSk7CisgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PCR7bmF0aXZlVHlwZX0qPigke2Zyb21GdW5jdGlvbk9wZW5pbmd9b2JqZWN0
JHtmcm9tRnVuY3Rpb25DbG9zaW5nfS0+R2V0QWxpZ25lZFBvaW50ZXJGcm9tSW50ZXJuYWxGaWVs
ZCh2OERPTVdyYXBwZXJPYmplY3RJbmRleCkpOwogICAgIH0KICAgICBzdGF0aWMgdm9pZCBkZXJl
Zk9iamVjdCh2b2lkKik7CiAgICAgc3RhdGljIFdyYXBwZXJUeXBlSW5mbyBpbmZvOwpAQCAtNTQz
LDYgKzU1MCw5IEBAIEVORAogICAgIH0gZWxzZSB7CiAKICAgICAgICAgbXkgJGNyZWF0ZVdyYXBw
ZXJDYWxsID0gJGN1c3RvbVdyYXAgPyAiJHt2OEludGVyZmFjZU5hbWV9Ojp3cmFwIiA6ICIke3Y4
SW50ZXJmYWNlTmFtZX06OmNyZWF0ZVdyYXBwZXIiOworICAgICAgICBteSAkcmV0dXJuaW5nV3Jh
cHBlciA9ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJWOFdyYXBBc0Z1bmN0aW9u
In0gPyAiVjhET01XcmFwcGVyOjp0b0Z1bmN0aW9uKHdyYXBwZXIpIiA6ICJ3cmFwcGVyIjsKKyAg
ICAgICAgbXkgJHJldHVybmluZ0NyZWF0ZWRXcmFwcGVyT3BlbmluZyA9ICRpbnRlcmZhY2UtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJWOFdyYXBBc0Z1bmN0aW9uIn0gPyAiVjhET01XcmFwcGVyOjp0
b0Z1bmN0aW9uKCIgOiAiIjsKKyAgICAgICAgbXkgJHJldHVybmluZ0NyZWF0ZWRXcmFwcGVyQ2xv
c2luZyA9ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJWOFdyYXBBc0Z1bmN0aW9u
In0gPyAiLCBpbXBsLT5wcm90b3R5cGUoKS52OFZhbHVlKCksIGltcGwtPm5hbWUoKSwgaXNvbGF0
ZSkiIDogIiI7CiAKICAgICAgICAgaWYgKCRjdXN0b21XcmFwKSB7CiAgICAgICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCA8PEVORCk7CkBAIC01NTYsNyArNTY2LDcgQEAgaW5saW5lIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gd3JhcCgke25hdGl2ZVR5cGV9KiBpbXBsLCB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IGMKIHsKICAgICBBU1NFUlQoaW1wbCk7CiAgICAgQVNTRVJUKERPTURhdGFTdG9y
ZTo6Z2V0V3JhcHBlcihpbXBsLCBpc29sYXRlKS5Jc0VtcHR5KCkpOwotICAgIHJldHVybiAkY3Jl
YXRlV3JhcHBlckNhbGwoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKKyAgICByZXR1
cm4gJHtyZXR1cm5pbmdDcmVhdGVkV3JhcHBlck9wZW5pbmd9JGNyZWF0ZVdyYXBwZXJDYWxsKGlt
cGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSkke3JldHVybmluZ0NyZWF0ZWRXcmFwcGVyQ2xv
c2luZ307CiB9CiBFTkQKICAgICAgICAgfQpAQCAtNTY5LDcgKzU3OSw3IEBAIGlubGluZSB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOCgke25hdGl2ZVR5cGV9KiBpbXBsLCB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IGNyCiAgICAgICAgIHJldHVybiB2OE51bGxXaXRoQ2hlY2soaXNvbGF0ZSk7CiAg
ICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZXIgPSBET01EYXRhU3RvcmU6OmdldFdyYXBw
ZXIoaW1wbCwgaXNvbGF0ZSk7CiAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIHdyYXBwZXI7CisgICAgICAgIHJldHVybiAkcmV0dXJuaW5nV3JhcHBlcjsKICAgICBy
ZXR1cm4gd3JhcChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0IGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dAppbmRleCA3
MDU0NDNlYjUyMWIzNjA0YWNlZjRjZTNlMDliMjcxYTg4OWY0MmY2Li44M2I4MjVhMmEzZDAyOWQ0
ZTc2ZDdmOGExNzQ1NWNkOTc4YTJiMzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQKQEAgLTEyNiwzICsxMjYsNCBAQCBWOE5vV3Jh
cHBlckNhY2hlCiBWOE1lYXN1cmVBcz0qCiBWOFJlYWRPbmx5CiBWOFVuZm9yZ2VhYmxlCitWOFdy
YXBBc0Z1bmN0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9DdXN0
b21FbGVtZW50SGVscGVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9DdXN0b21F
bGVtZW50SGVscGVycy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2ZlNjgwNWE5YTVkZTAxMTVkNzhmZGQwYTRj
NjA0OTkxNzg0YzIzMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmNwcApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRIZWxwZXJzLmgiCisKKyNpbmNsdWRlICJG
cmFtZS5oIgorI2luY2x1ZGUgIlY4RE9NV2luZG93U2hlbGwuaCIKKyNpbmNsdWRlICJWOEhUTUxT
cGFuRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBFTkFCTEUoQ1VTVE9N
X0RPTV9FTEVNRU5UUykKKworU2NyaXB0VmFsdWUgQ3VzdG9tRWxlbWVudEhlbHBlcnM6OmRlZmF1
bHRQcm90b3R5cGVPZihGcmFtZSogZnJhbWUpCit7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAg
cmV0dXJuIFNjcmlwdFZhbHVlKCk7CisgICAgcmV0dXJuIFNjcmlwdFZhbHVlKGZyYW1lLT5zY3Jp
cHQoKS0+d2luZG93U2hlbGwobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT5jdXN0b21FbGVtZW50
RGVmYXVsdFByb3RvdHlwZSgpKTsKK307CisKK2Jvb2wgQ3VzdG9tRWxlbWVudEhlbHBlcnM6Omlz
Q3VzdG9tRWxlbWVudHNBbGxvd2VkKEZyYW1lKiBmcmFtZSkKK3sKKyAgICBpZiAoIWZyYW1lKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1haW5Xb3JsZFNjcmlwdFN0YXRlKGZy
YW1lKSA9PSBTY3JpcHRTdGF0ZTo6Y3VycmVudCgpOworfQorCisKKyNlbmRpZiAvLyBFTkFCTEUo
Q1VTVE9NX0RPTV9FTEVNRU5UUykKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvQ3VzdG9tRWxlbWVudEhlbHBlcnMuaCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYTcyN2U5NjE2MmM4ZTQ3MDVmOWQwODhhM2ZkMDRhMjQ4OTdhMWJjZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmgK
QEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgQ3VzdG9tRWxlbWVudEhlbHBlcnNfaAorI2RlZmluZSBD
dXN0b21FbGVtZW50SGVscGVyc19oCisKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKyNpZiBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKKworY2xh
c3MgRnJhbWU7CisKK2NsYXNzIEN1c3RvbUVsZW1lbnRIZWxwZXJzIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgYm9vbCBpc0N1c3RvbUVsZW1lbnRzQWxsb3dlZChGcmFtZSopOworICAgIHN0YXRpYyBT
Y3JpcHRWYWx1ZSBkZWZhdWx0UHJvdG90eXBlT2YoRnJhbWUqKTsKK307CisKKyNlbmRpZiAvLyBF
TkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gQ3VzdG9tRWxlbWVudEhlbHBlcnNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhBZGFwdG9yRnVuY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhBZGFwdG9yRnVuY3Rpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZlNzQ2MTEzZTBiMjg5
NTA1MjVhMzk3NzY1MTcyZTczMzNlNTkwZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5jcHAKQEAgLTAsMCArMSw3NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWOEFkYXB0b3JGdW5jdGlvbi5oIgorCisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Y4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOEFkYXB0b3JGdW5jdGlvbjo6Z2V0VGVtcGxhdGUo
KQoreworICAgIC8vIEZJWE1FOiBTaG91bGQgYmUgc3RvcmVkIGluIHBlci1pc29sYXRlIGRhdGEg
c3RvcmUKKyAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRl
bXBsID0gdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+OjpOZXcodjg6OkZ1bmN0
aW9uVGVtcGxhdGU6Ok5ldygpKTsKKyAgICByZXR1cm4gY29uZmlndXJlVGVtcGxhdGUodGVtcGwp
OworfQorCit2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhBZGFwdG9yRnVu
Y3Rpb246OmNvbmZpZ3VyZVRlbXBsYXRlKHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPiBmdW5jdGlvblRlbXBsYXRlKQoreworICAgIGZ1bmN0aW9uVGVtcGxhdGUtPlNldENhbGxI
YW5kbGVyKCZWOEFkYXB0b3JGdW5jdGlvbjo6aW52b2NhdGlvbkNhbGxiYWNrKTsKKyAgICByZXR1
cm4gZnVuY3Rpb25UZW1wbGF0ZTsKK30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4QWRhcHRv
ckZ1bmN0aW9uOjppbnZvY2F0aW9uQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykK
K3sKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZWQgPSB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+OjpDYXN0KGFyZ3MuQ2FsbGVlKCktPkdldEhpZGRlblZhbHVlKFY4SGlkZGVuUHJvcGVy
dHlOYW1lOjpkZXRhaWwoKSkpOworICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSBmYXN0ZXIgaWYg
d2UgY2FuIGFjY2VzcyB1bmRlcmx5aW5nIG5hdGl2ZSBjYWxsYmFjayBkaXJlY3RseS4KKyAgICAv
LyBXZSB3b24ndCBuZWVkIHRoaXMgb25jZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTA4MTM4IGlzIGFkZHJlc3NlZC4KKyAgICBWZWN0b3I8djg6OkhhbmRsZTx2ODo6
VmFsdWU+ID4gYXJnQXJyYXkoYXJncy5MZW5ndGgoKSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBhcmdzLkxlbmd0aCgpOyArK2kpCisgICAgICAgIGFyZ0FycmF5LmFwcGVuZChhcmdzW2ldKTsK
KyAgICBpZiAoYXJncy5Jc0NvbnN0cnVjdENhbGwoKSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZWQt
PkNhbGxBc0NvbnN0cnVjdG9yKGFyZ0FycmF5LnNpemUoKSwgYXJnQXJyYXkuZGF0YSgpKTsKKyAg
ICByZXR1cm4gd3JhcHBlZC0+Q2FsbEFzRnVuY3Rpb24oYXJncy5UaGlzKCksIGFyZ0FycmF5LnNp
emUoKSwgYXJnQXJyYXkuZGF0YSgpKTsKK30KKwordjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IFY4
QWRhcHRvckZ1bmN0aW9uOjp3cmFwKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0LCB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gcHJvdG90eXBlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIHY4
OjpJc29sYXRlKiBpc29sYXRlKQoreworICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBhZGFw
dG9yID0gdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+OjpDYXN0KGdldFRlbXBsYXRlKCktPkdldEZ1
bmN0aW9uKCkpOworICAgIGlmICghcHJvdG90eXBlLklzRW1wdHkoKSAmJiBwcm90b3R5cGUtPklz
T2JqZWN0KCkpCisgICAgICAgIGFkYXB0b3ItPlNldCh2ODo6U3RyaW5nOjpOZXdTeW1ib2woInBy
b3RvdHlwZSIpLCBwcm90b3R5cGUsIHY4OjpSZWFkT25seSk7CisgICAgYWRhcHRvci0+U2V0TmFt
ZSh2OFN0cmluZyhuYW1lLnN0cmluZygpLCBpc29sYXRlKSk7CisgICAgYWRhcHRvci0+U2V0SGlk
ZGVuVmFsdWUoVjhIaWRkZW5Qcm9wZXJ0eU5hbWU6OmRldGFpbCgpLCBvYmplY3QpOworICAgIG9i
amVjdC0+U2V0SGlkZGVuVmFsdWUoVjhIaWRkZW5Qcm9wZXJ0eU5hbWU6OmRldGFpbCgpLCBhZGFw
dG9yKTsKKyAgICByZXR1cm4gYWRhcHRvcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBZGFwdG9yRnVuY3Rpb24u
aCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNjcwZDMyYmRkZjQ2ZjM0MGE3ZWRiZWRkMWYyZTY3YTdmYzA2NTJjMQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmgK
QEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgVjhBZGFwdG9yRnVuY3Rpb25faAorI2RlZmluZSBWOEFk
YXB0b3JGdW5jdGlvbl9oCisKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEhp
ZGRlblByb3BlcnR5TmFtZS5oIgorI2luY2x1ZGUgPHY4Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLworLy8gRklYTUUoaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODEzOCk6CisvLyBWOEFkYXB0b3JGdW5j
dGlvbiBjbGFzcyBhbmQgVjhXcmFwQXNGdW5jdGlvbiBJREwgYXR0cmlidXRlIGFyZSBuZWVkZWQg
Zm9yIHR3byByZWFzb25zOgorLy8gLSAxKSBWOCBkb2Vzbid0IGFsbG93IGV4cGFuZGluZyB0aGUg
aW50ZXJuYWwgZmllbGQgb2YgZnVuY3Rpb24gb2JqZWN0cy4gaHR0cHM6Ly9jb2RlLmdvb2dsZS5j
b20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTgzNworLy8gICAgICBXZWJLaXQgbmVlZCBpdCB0byBh
c3NvY2lhdGUgZWFjaCB3cmFwcGVyIHRvIGl0cyBiYWNraW5nIEMrKyBvYmplY3QuCisvLyAtIDIp
IEJpbmRpbmcgY29kZWJhc2UgYXNzdW1lcyBldmVyeSB3cmFwcGVyIG9iamVjdCBpcyBjcmVhdGVk
IHRocm91Z2ggT2JqZWN0VGVtcGxhdGU6Ok5ld0luc3RhbmNlKCksIG5vdCBGdW5jdGlvblRlbXBs
YXRlOjpHZXRGdW5jdGlvbigpLgorLy8gT25jZSAxKSBpcyBhZGRyZXNzc2VkLCB3ZSBjb3VsZCBh
dHRhY2sgMikgd2l0aCBpdC4gCisvLworY2xhc3MgVjhBZGFwdG9yRnVuY3Rpb24geworcHVibGlj
OgorICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHVud3JhcCh2ODo6SGFuZGxlPHY4
OjpGdW5jdGlvbj4pOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gd3JhcCh2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+LCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcHJvdG90eXBlLCBj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIHY4OjpJc29sYXRlKik7CisgICAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OkZ1bmN0aW9uPiBnZXQodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pik7CisKKyAgICBz
dGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGdldFRlbXBsYXRlKCk7
CisgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBjb25maWd1
cmVUZW1wbGF0ZSh2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4pOworICAgIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaW52b2NhdGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpB
cmd1bWVudHMmKTsKK307CisKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4QWRhcHRv
ckZ1bmN0aW9uOjp1bndyYXAodjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IGZ1bmN0aW9uKQorewor
ICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVkID0gZnVuY3Rpb24tPkdldEhpZGRlblZh
bHVlKFY4SGlkZGVuUHJvcGVydHlOYW1lOjpkZXRhaWwoKSk7CisgICAgQVNTRVJUKCF3cmFwcGVk
LklzRW1wdHkoKSk7CisgICAgQVNTRVJUKHdyYXBwZWQtPklzT2JqZWN0KCkpOworICAgIHJldHVy
biB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHdyYXBwZWQpOworfQorCitpbmxpbmUgdjg6
OkhhbmRsZTx2ODo6RnVuY3Rpb24+IFY4QWRhcHRvckZ1bmN0aW9uOjpnZXQodjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBvYmplY3QpCit7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFkYXB0b3JG
dW5jdGlvbiA9IG9iamVjdC0+R2V0SGlkZGVuVmFsdWUoVjhIaWRkZW5Qcm9wZXJ0eU5hbWU6OmRl
dGFpbCgpKTsKKyAgICBBU1NFUlQoIWFkYXB0b3JGdW5jdGlvbi5Jc0VtcHR5KCkpOworICAgIEFT
U0VSVChhZGFwdG9yRnVuY3Rpb24tPklzRnVuY3Rpb24oKSk7CisgICAgcmV0dXJuIHY4OjpIYW5k
bGU8djg6OkZ1bmN0aW9uPjo6Q2FzdChhZGFwdG9yRnVuY3Rpb24pOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBWOEFkYXB0b3JGdW5jdGlvbl9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCmluZGV4IGE5MjY1NDY3
NDhhYzFlYTk1MmFjOTM4ZDg0NzQ1Yzg3YThjYmViYzAuLjlmMTE1YTQwNDgxZDJiMWZjYjliNGMx
ZDI0ODE4NzY0ZWU0MGNiZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4RE9NV2luZG93U2hlbGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
RE9NV2luZG93U2hlbGwuY3BwCkBAIC0zMzYsNiArMzM2LDggQEAgYm9vbCBWOERPTVdpbmRvd1No
ZWxsOjppbnN0YWxsRE9NV2luZG93KCkKICAgICBWOERPTVdyYXBwZXI6OnNldE5hdGl2ZUluZm8o
aW5uZXJHbG9iYWxPYmplY3QsICZWOERPTVdpbmRvdzo6aW5mbywgd2luZG93KTsKICAgICBpbm5l
ckdsb2JhbE9iamVjdC0+U2V0UHJvdG90eXBlKHdpbmRvd1dyYXBwZXIpOwogICAgIFY4RE9NV3Jh
cHBlcjo6YXNzb2NpYXRlT2JqZWN0V2l0aFdyYXBwZXIoUGFzc1JlZlB0cjxET01XaW5kb3c+KHdp
bmRvdyksICZWOERPTVdpbmRvdzo6aW5mbywgd2luZG93V3JhcHBlciwgbV9pc29sYXRlKTsKKyAg
ICB1cGRhdGVDdXN0b21FbGVtZW50RGVmYXVsdFByb3RvdHlwZSgpOworCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKQEAgLTQ4Myw0ICs0ODUsMTIgQEAgdm9pZCBWOERPTVdpbmRvd1NoZWxsOjp1cGRh
dGVTZWN1cml0eU9yaWdpbigpCiAgICAgc2V0U2VjdXJpdHlUb2tlbigpOwogfQogCisjaWYgRU5B
QkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCit2b2lkIFY4RE9NV2luZG93U2hlbGw6OnVwZGF0ZUN1
c3RvbUVsZW1lbnREZWZhdWx0UHJvdG90eXBlKCkKK3sKKyAgICBTY29wZWRQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvbj4gc3BhbkNvbnN0cnVjdG9yKHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPjo6Q2Fz
dChtX2dsb2JhbC0+R2V0KHY4U3RyaW5nKCJIVE1MU3BhbkVsZW1lbnQiLCBtX2lzb2xhdGUpKSkp
OworICAgIG1fY3VzdG9tRWxlbWVudERlZmF1bHRQcm90b3R5cGUuc2V0KHY4OjpIYW5kbGU8djg6
Ok9iamVjdD46OkNhc3Qoc3BhbkNvbnN0cnVjdG9yLT5HZXQodjhTdHJpbmcoInByb3RvdHlwZSIs
IG1faXNvbGF0ZSkpKSk7Cit9CisjZW5kaWYKKwogfSAvLyBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmggYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmgKaW5kZXggN2Q1YmFlNDA0Nzk3MGI5
NTU4ZWQ4YzQwMzg3Mzc3MTk5NzdmYmM0ZS4uMTUxMzNlMjhiY2RkZWI0ZjljM2I4MjM4NmQ1ZGVj
MDY3ZDA0ZjU0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01X
aW5kb3dTaGVsbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93
U2hlbGwuaApAQCAtMTA4LDYgKzEwOCwxNiBAQCBwcml2YXRlOgogICAgIFNjb3BlZFBlcnNpc3Rl
bnQ8djg6OkNvbnRleHQ+IG1fY29udGV4dDsKICAgICBTY29wZWRQZXJzaXN0ZW50PHY4OjpPYmpl
Y3Q+IG1fZ2xvYmFsOwogICAgIFNjb3BlZFBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gbV9kb2N1bWVu
dDsKKworCisjaWYgRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCisgICAgdm9pZCB1cGRhdGVD
dXN0b21FbGVtZW50RGVmYXVsdFByb3RvdHlwZSgpOworICAgIFNjb3BlZFBlcnNpc3RlbnQ8djg6
Ok9iamVjdD4gbV9jdXN0b21FbGVtZW50RGVmYXVsdFByb3RvdHlwZTsKK3B1YmxpYzoKKyAgICB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGN1c3RvbUVsZW1lbnREZWZhdWx0UHJvdG90eXBlKCkgY29u
c3QgeyByZXR1cm4gbV9jdXN0b21FbGVtZW50RGVmYXVsdFByb3RvdHlwZS5nZXQoKTsgfQorI2Vs
c2UKKyAgICB2b2lkIHVwZGF0ZUN1c3RvbUVsZW1lbnREZWZhdWx0UHJvdG90eXBlKCkgeyB9Cisj
ZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCmluZGV4IGQ0N2ZmZDNmY2ExM2NlZWY5MDJlNGY5Mjgy
YWNkMWJmZmUxM2I3ZWUuLjk2ODg0YWI0YTEzMDYzOGI2MGIzOTVlOGMyMTgxYmE5NjQ0NzI5ODMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcApAQCAtMzEs
NiArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5o
IgogCisjaW5jbHVkZSAiVjhBZGFwdG9yRnVuY3Rpb24uaCIKICNpbmNsdWRlICJWOEJpbmRpbmcu
aCIKICNpbmNsdWRlICJWOERPTVdpbmRvdy5oIgogI2luY2x1ZGUgIlY4SFRNTENvbGxlY3Rpb24u
aCIKQEAgLTE0Myw0ICsxNDQsMjEgQEAgYm9vbCBWOERPTVdyYXBwZXI6OmlzV3JhcHBlck9mVHlw
ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIFdyYXBwZXJUeXBlSW5mbyoKICAgICByZXR1
cm4gdHlwZUluZm8gPT0gdHlwZTsKIH0KIAordjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IFY4RE9N
V3JhcHBlcjo6dG9GdW5jdGlvbih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0KQoreworICAg
IHJldHVybiBWOEFkYXB0b3JGdW5jdGlvbjo6Z2V0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNh
c3Qob2JqZWN0KSk7Cit9CisKK3Y4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBWOERPTVdyYXBwZXI6
OnRvRnVuY3Rpb24odjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QsIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBwcm90b3R5cGUsIEF0b21pY1N0cmluZyBuYW1lLCB2ODo6SXNvbGF0ZSogaXNvbGF0
ZSkKK3sKKyAgICByZXR1cm4gVjhBZGFwdG9yRnVuY3Rpb246OndyYXAob2JqZWN0LCBwcm90b3R5
cGUsIG5hbWUsIGlzb2xhdGUpOworfQorCit2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4RE9NV3Jh
cHBlcjo6ZnJvbUZ1bmN0aW9uKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KQoreworICAg
IGlmICghb2JqZWN0LT5Jc0Z1bmN0aW9uKCkpCisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAg
cmV0dXJuIFY4QWRhcHRvckZ1bmN0aW9uOjp1bndyYXAodjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+
OjpDYXN0KG9iamVjdCkpOworfQorCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAppbmRleCA3NzBmOWI2YTRlYmRkOWZmZDJk
N2FiYmEzZmFhMzZjZTIyZDFjMzcwLi5jZDNlMjlkYTIxYTlhODlmYjcwYzc1MGJhN2Y4MjYzYmVk
NzNiOWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBw
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaApAQCAt
NjUsNiArNjUsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgYm9vbCBp
c0RPTVdyYXBwZXIodjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKICAgICAgICAgc3RhdGljIGJvb2wg
aXNXcmFwcGVyT2ZUeXBlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiwgV3JhcHBlclR5cGVJbmZvKik7
CiAKKyAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiB0b0Z1bmN0aW9uKHY4
OjpIYW5kbGU8djg6OlZhbHVlPik7CisgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpGdW5j
dGlvbj4gdG9GdW5jdGlvbih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+LCB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gcHJvdG90eXBlLCBBdG9taWNTdHJpbmcgbmFtZSwgdjg6Oklzb2xhdGUqKTsKKyAgICAg
ICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZnJvbUZ1bmN0aW9uKHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4pOworCiAgICAgICAgIC8vIEZJWE1FOiBXaHkgaXMgdGhpcyBmdW5jdGlvbiBp
biBWOERPTVdyYXBwZXI/CiAgICAgICAgIHN0YXRpYyB2b2lkIHNldE5hbWVkSGlkZGVuUmVmZXJl
bmNlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gcGFyZW50LCBjb25zdCBjaGFyKiBuYW1lLCB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gY2hpbGQpOwogICAgIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4SFRNTEN1c3RvbUVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkzNmYwNjg4
NDdkNTQ5MDFkNDQyOGY5ZjNlNzUwOTBkMzJjMjhjZTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50LmNwcApAQCAtMCwwICsx
LDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlY4SFRNTEN1c3RvbUVsZW1lbnQu
aCIKKworI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRIZWxwZXJzLmgiCisjaW5jbHVkZSAiQ3VzdG9t
RWxlbWVudFJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJW
OEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIlY4SFRNTFNwYW5FbGVtZW50
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIEVOQUJMRShDVVNUT01fRE9NX0VMRU1F
TlRTKQorCisvLyBGSVhNRTogRWFjaCBjdXN0b20gZWxlbWVudHMgc2hvdWxkIGhhdmUgaXRzIG93
biBHZXRUZW1wbGF0ZSBtZXRob2Qgc28gdGhhdCBpdCBjYW4gZGVyaXZlZCBmcm9tIGRpZmZlcmVu
Y3Qgc3VwZXIgZWxlbWVudC4KK1dyYXBwZXJUeXBlSW5mbyBWOEhUTUxDdXN0b21FbGVtZW50Ojpp
bmZvID0geyAmVjhIVE1MU3BhbkVsZW1lbnQ6OkdldFRlbXBsYXRlLCBWOEhUTUxFbGVtZW50Ojpk
ZXJlZk9iamVjdCwgMCwgMCwgMCwgMCwgJlY4SFRNTFNwYW5FbGVtZW50OjppbmZvLCBXcmFwcGVy
VHlwZU9iamVjdFByb3RvdHlwZSB9OworCit2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4SFRNTEN1
c3RvbUVsZW1lbnQ6OmNyZWF0ZVdyYXBwZXIoUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gaW1wbCwg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29s
YXRlKQoreworICAgIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciogY3RvciA9IEN1c3RvbUVsZW1l
bnRSZWdpc3RyeTo6Y29uc3RydWN0b3JPZihpbXBsLmdldCgpKTsKKyAgICBpZiAoIWN0b3IpCisg
ICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KFdlYkNvcmU6OnRvVjgo
dG9IVE1MVW5rbm93bkVsZW1lbnQoaW1wbC5nZXQoKSksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0
ZSkpOworCisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhET01XcmFwcGVy
OjpjcmVhdGVXcmFwcGVyKGNyZWF0aW9uQ29udGV4dCwgJmluZm8sIGltcGwuZ2V0KCkpOworICAg
IGlmICh3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgVjhE
T01XcmFwcGVyOjphc3NvY2lhdGVPYmplY3RXaXRoV3JhcHBlcihpbXBsLCAmaW5mbywgd3JhcHBl
ciwgaXNvbGF0ZSk7CisKKyAgICAvLyBUaGUgY29uc3RydWN0b3IgYW5kIHJlZ2lzdGVyZWQgbGlm
ZWN5Y2xlIGNhbGxiYWNrcyBzaG91bGQgYmUgdmlzaWJsZSBvbmx5IGZyb20gbWFpbiB3b3JsZC4K
KyAgICBpZiAoQ3VzdG9tRWxlbWVudEhlbHBlcnM6OmlzQ3VzdG9tRWxlbWVudHNBbGxvd2VkKGlt
cGwtPmRvY3VtZW50KCktPmZyYW1lKCkpKSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZG4ndCBiZSBuZWVkZWQgb25jZSBlYWNoIGN1c3RvbSBlbGVtZW50IGhhcyBpdHMgb3duIEZ1bmN0
aW9uVGVtcGxhdGUKKyAgICAgICAgd3JhcHBlci0+U2V0KHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCgi
Y29uc3RydWN0b3IiKSwgV2ViQ29yZTo6dG9WOChjdG9yLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xh
dGUpKTsKKyAgICB9CisKKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKworI2VuZGlmIC8vIEVOQUJM
RShDVVNUT01fRE9NX0VMRU1FTlRTKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYjIzZjViMDJlNGUyNmJjOGZlNWI5NjIzNzNkYzMwY2JmN2E4NGFiNgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SFRNTEN1c3RvbUVsZW1lbnQuaApA
QCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBWOEhUTUxDdXN0b21FbGVtZW50X2gKKyNkZWZpbmUgVjhI
VE1MQ3VzdG9tRWxlbWVudF9oCisKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJW
OERPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJWOEhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhI
VE1MVW5rbm93bkVsZW1lbnQuaCIKKyNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSFRNTEVsZW1lbnQ7CisK
KyNpZiBFTkFCTEUoQ1VTVE9NX0RPTV9FTEVNRU5UUykKKworY2xhc3MgVjhIVE1MQ3VzdG9tRWxl
bWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFdyYXBwZXJUeXBlSW5mbyBpbmZvOworICAgIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHRvVjgoSFRNTEVsZW1lbnQqLCB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwg
djg6Oklzb2xhdGUqID0gMCk7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3Jl
YXRlV3JhcHBlcihQYXNzUmVmUHRyPEhUTUxFbGVtZW50Piwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
Piwgdjg6Oklzb2xhdGUqKTsKK307CisKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4
SFRNTEN1c3RvbUVsZW1lbnQ6OnRvVjgoSFRNTEVsZW1lbnQqIGltcGwsIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3sKKyAgICB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBET01EYXRhU3RvcmU6OmdldFdyYXBwZXIo
aW1wbCwgaXNvbGF0ZSk7CisgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIHdyYXBwZXI7CisgICAgcmV0dXJuIFY4SFRNTEN1c3RvbUVsZW1lbnQ6OmNyZWF0ZVdyYXBw
ZXIoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKK30KKworI2Vsc2UgLy8gRU5BQkxF
KENVU1RPTV9ET01fRUxFTUVOVFMpCisKK2NsYXNzIFY4SFRNTEN1c3RvbUVsZW1lbnQgeworcHVi
bGljOgorICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoSFRNTEVsZW1lbnQq
LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqID0gMCk7Cit9OworCitpbmxpbmUgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBIVE1MQ3VzdG9tRWxlbWVudDo6dG9WOChIVE1MRWxlbWVudCogaW1wbCwgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRl
KQoreworICAgIHJldHVybiB0b1Y4KHRvSFRNTFVua25vd25FbGVtZW50KGltcGwpLCBjcmVhdGlv
bkNvbnRleHQsIGlzb2xhdGUpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9ET01fRUxF
TUVOVFMpCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFY4SFRNTEN1c3Rv
bUVsZW1lbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvckN1c3RvbS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMzA2NTU2NGE5ZDgxYzJkMDE1NjJhODc3MzY3M2U3ZGE5YWM1ZjQ2MAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUVs
ZW1lbnRDb25zdHJ1Y3RvckN1c3RvbS5jcHAKQEAgLTAsMCArMSw1NCBAQAorLyoKKyogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqIAorKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorKiBtZXQ6CisqIAorKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisqIGRpc3RyaWJ1dGlvbi4KKyogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorKiAKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlY4Q3VzdG9t
RWxlbWVudENvbnN0cnVjdG9yLmgiCisKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50Q29uc3RydWN0
b3IuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEhUTUxDdXN0b21FbGVt
ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4
Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjpjYWxsQXNGdW5jdGlvbkNhbGxiYWNrKGNvbnN0IHY4
OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgaWYgKCFhcmdzLklzQ29uc3RydWN0Q2FsbCgpKQor
ICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoIkRPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fu
bm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLiIsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICBp
ZiAoQ29uc3RydWN0b3JNb2RlOjpjdXJyZW50KCkgPT0gQ29uc3RydWN0b3JNb2RlOjpXcmFwRXhp
c3RpbmdPYmplY3QpCisgICAgICAgIHJldHVybiBhcmdzLkhvbGRlcigpOworCisgICAgQ3VzdG9t
RWxlbWVudENvbnN0cnVjdG9yKiBpbXBsID0gdG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CisgICAg
UmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50ID0gaW1wbC0+Y3JlYXRlRWxlbWVudCgpOworICAg
IGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CisgICAgcmV0dXJu
IFY4SFRNTEN1c3RvbUVsZW1lbnQ6OnRvVjgoZWxlbWVudC5nZXQoKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVt
ZW50Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRDb25z
dHJ1Y3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjE5MTM1YmQxMmVhYmJkYzE3YmNjN2E4MTk0MzExZDlm
ZGRmODhkZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVt
ZW50Q29uc3RydWN0b3IuY3BwCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmgiCisKKyNpZiBFTkFCTEUoQ1VTVE9N
X0RPTV9FTEVNRU5UUykKKworI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRSZWdpc3RyeS5oIgorI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1Bhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiBDdXN0b21FbGVt
ZW50Q29uc3RydWN0b3I6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU2NyaXB0VmFsdWUmIHBy
b3RvdHlwZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEN1c3RvbUVsZW1lbnRDb25zdHJ1
Y3Rvcihkb2N1bWVudCwgdGFnTmFtZSwgbmFtZSwgcHJvdG90eXBlKSk7Cit9CisKK0N1c3RvbUVs
ZW1lbnRDb25zdHJ1Y3Rvcjo6Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKERvY3VtZW50KiBkb2N1
bWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTY3JpcHRWYWx1ZSYgcHJvdG90eXBlKQorICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkK
KyAgICAsIG1fdGFnTmFtZSh0YWdOYW1lKQorICAgICwgbV9uYW1lKG5hbWUpCisgICAgLCBtX3By
b3RvdHlwZShwcm90b3R5cGUpCit7Cit9CisKK0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6fkN1
c3RvbUVsZW1lbnRDb25zdHJ1Y3RvcigpCit7Cit9CisKK3ZvaWQgQ3VzdG9tRWxlbWVudENvbnN0
cnVjdG9yOjp3aWxsRGVzdHJveURvY3VtZW50KCkKK3sKKyAgICBtX2RvY3VtZW50ID0gMDsKK30K
KworUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjpjcmVh
dGVFbGVtZW50KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZG9jdW1lbnQpCisgICAgICAgIHJldHVy
biAwOworICAgIHJldHVybiBIVE1MRWxlbWVudDo6Y3JlYXRlKG1fdGFnTmFtZSwgbV9kb2N1bWVu
dCk7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oIGIv
U291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjNhODJhZGY5YjFmNmYxYmE1NzNlNmE1NTBkNWJhZGEyMjJiZmRkYzYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmgKQEAgLTAs
MCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yX2gKKyNkZWZpbmUgQ3Vz
dG9tRWxlbWVudENvbnN0cnVjdG9yX2gKKworI2lmIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRT
KQorCisjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgorI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgi
CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ3VzdG9tRWxlbWVudERlZmlu
aXRpb247CitjbGFzcyBEaWN0aW9uYXJ5OworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBIVE1MRWxl
bWVudDsKKworY2xhc3MgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yIDogcHVibGljIFJlZkNvdW50
ZWQ8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiBjcmVhdGUoRG9jdW1lbnQqLCBjb25zdCBR
dWFsaWZpZWROYW1lJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU2NyaXB0VmFsdWUmKTsKKworICAg
IGV4cGxpY2l0IEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvcihEb2N1bWVudCosIGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTY3JpcHRWYWx1ZSYpOworICAgIHZpcnR1
YWwgfkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvcigpOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50
KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudDsgfQorICAgIGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUoKSBjb25zdCB7IHJldHVybiBtX3RhZ05hbWU7IH0KKyAgICBBdG9taWNTdHJpbmcg
bmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIGNvbnN0IFNjcmlwdFZhbHVlJiBw
cm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBtX3Byb3RvdHlwZTsgfQorCisgICAgUGFzc1JlZlB0
cjxIVE1MRWxlbWVudD4gY3JlYXRlRWxlbWVudCgpIGNvbnN0OworICAgIHZvaWQgd2lsbERlc3Ry
b3lEb2N1bWVudCgpOworICAgIAorcHJpdmF0ZToKKyAgICBEb2N1bWVudCogbV9kb2N1bWVudDsK
KyAgICBRdWFsaWZpZWROYW1lIG1fdGFnTmFtZTsKKyAgICBBdG9taWNTdHJpbmcgbV9uYW1lOwor
ICAgIFNjcmlwdFZhbHVlIG1fcHJvdG90eXBlOworfTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxF
KENVU1RPTV9ET01fRUxFTUVOVFMpCisKKyNlbmRpZiAvLyBDdXN0b21FbGVtZW50Q29uc3RydWN0
b3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1
Y3Rvci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmlk
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jOGExYTliNzFkODA5Zjk0NzllODNlMDA3N2QxZWNlYTYwMGFkZGI3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1
Y3Rvci5pZGwKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1sKKyAgICBDb25kaXRpb25h
bD1DVVNUT01fRE9NX0VMRU1FTlRTLAorICAgIFY4RW5hYmxlZEF0UnVudGltZT1jdXN0b21ET01F
bGVtZW50cywKKyAgICBWOFdyYXBBc0Z1bmN0aW9uLAorICAgIEN1c3RvbUNhbGwKK10gaW50ZXJm
YWNlIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciB7Cit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNTE2N2IyNTA0Mzg2ZDgzNjU3
ZGM2Y2YwYzRmOGMxZmQxYmI0ZWJmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5jcHAKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAg
ZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmgiCisK
KyNpbmNsdWRlICJDdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJDdXN0b21F
bGVtZW50SGVscGVycy5oIgorI2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIKKyNpbmNsdWRlICJEb2N1
bWVudC5oIgorI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgorCisjaWYgRU5BQkxFKENVU1RP
TV9ET01fRUxFTUVOVFMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ3VzdG9tRWxlbWVudFJl
Z2lzdHJ5OjpDdXN0b21FbGVtZW50UmVnaXN0cnkoRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDog
bV9kb2N1bWVudChkb2N1bWVudCkKKyAgICAsIG1fZGVmYXVsdFByb3RvdHlwZShDdXN0b21FbGVt
ZW50SGVscGVyczo6ZGVmYXVsdFByb3RvdHlwZU9mKGRvY3VtZW50LT5mcmFtZSgpKSkKK3sKK30K
KworQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Ojp+Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5KCkKK3sKKyAg
ICBmb3IgKENvbnN0cnVjdG9yTWFwOjppdGVyYXRvciBpID0gbV9jb25zdHJ1Y3RvcnMuYmVnaW4o
KTsgaSAhPSBtX2NvbnN0cnVjdG9ycy5lbmQoKTsgKytpKQorICAgICAgICBpLT52YWx1ZS0+d2ls
bERlc3Ryb3lEb2N1bWVudCgpOworfQorCitDdXN0b21FbGVtZW50Q29uc3RydWN0b3IqIEN1c3Rv
bUVsZW1lbnRSZWdpc3RyeTo6Y29uc3RydWN0b3JPZihIVE1MRWxlbWVudCogZWxlbWVudCkKK3sK
KyAgICBDdXN0b21FbGVtZW50UmVnaXN0cnkqIHNlbGYgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5y
ZWdpc3RyeSgpOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
IHNlbGYtPmZpbmQoZWxlbWVudC0+dGFnUU5hbWUoKSk7Cit9CisKK1Bhc3NSZWZQdHI8Q3VzdG9t
RWxlbWVudENvbnN0cnVjdG9yPiBDdXN0b21FbGVtZW50UmVnaXN0cnk6OnJlZ2lzdGVyRWxlbWVu
dChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IERpY3Rpb25hcnkmIG9wdGlvbnMsIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghQ3VzdG9tRWxlbWVudEhlbHBlcnM6OmlzQ3Vz
dG9tRWxlbWVudHNBbGxvd2VkKG1fZG9jdW1lbnQtPmZyYW1lKCkpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIFF1YWxpZmllZE5hbWUgbmV3TmFtZShudWxsQXRvbSwgbmFtZS5sb3dlcigpLCBI
VE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJKTsKKyAgICBpZiAoIW5ld05hbWUubG9jYWxOYW1l
KCkuc3RhcnRzV2l0aCgieC0iKSkgeworICAgICAgICBlYyA9IElOVkFMSURfQ0hBUkFDVEVSX0VS
UjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgICAgICAKKyAgICBpZiAoZmluZChuZXdO
YW1lKSkgeworICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICBSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiBmcmVzaCA9
IEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlKG1fZG9jdW1lbnQsIG5ld05hbWUsICJI
VE1MQ3VzdG9tRWxlbWVudCIsIG1fZGVmYXVsdFByb3RvdHlwZSk7CisgICAgbV9jb25zdHJ1Y3Rv
cnMuYWRkKGZyZXNoLT50YWdOYW1lKCkuaW1wbCgpLCBmcmVzaCk7CisgICAgcmV0dXJuIGZyZXNo
OworfQorCitDdXN0b21FbGVtZW50Q29uc3RydWN0b3IqIEN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6
ZmluZChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAoreworICAgIENvbnN0cnVjdG9y
TWFwOjpjb25zdF9pdGVyYXRvciBmb3VuZCA9IG1fY29uc3RydWN0b3JzLmZpbmQobmFtZS5pbXBs
KCkpOworICAgIHJldHVybiAoZm91bmQgIT0gbV9jb25zdHJ1Y3RvcnMuZW5kKCkpID8gZm91bmQt
PnZhbHVlLmdldCgpIDogMDsKK30KKworUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gQ3VzdG9tRWxl
bWVudFJlZ2lzdHJ5OjpjcmVhdGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNv
bnN0Cit7CisgICAgaWYgKEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciogZm91bmQgPSBmaW5kKG5h
bWUpKQorICAgICAgICByZXR1cm4gZm91bmQtPmNyZWF0ZUVsZW1lbnQoKTsKKyAgICByZXR1cm4g
MDsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDU4MmUy
MWMwMGVmYTQ5NDJmNWE4MTA0M2U1ZGU1YjUxNzE3MzMyNgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuaApAQCAtMCwwICsxLDc5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAg
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBDdXN0b21FbGVtZW50UmVnaXN0cnlfaAorI2RlZmluZSBDdXN0b21F
bGVtZW50UmVnaXN0cnlfaAorCisjaWYgRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCisKKyNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgorI2lu
Y2x1ZGUgIlNjcmlwdFZhbHVlLmgiCisjaW5jbHVkZSAiU3VwcGxlbWVudGFibGUuaCIKKyNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOworY2xhc3MgRGlj
dGlvbmFyeTsKK2NsYXNzIERvY3VtZW50OworY2xhc3MgSFRNTEVsZW1lbnQ7CitjbGFzcyBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OworY2xhc3MgUXVhbGlmaWVkTmFtZTsKKworY2xhc3MgQ3VzdG9t
RWxlbWVudFJlZ2lzdHJ5IDogcHVibGljIFJlZkNvdW50ZWQ8Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5
PiB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5KERvY3VtZW50
Kik7CisgICAgfkN1c3RvbUVsZW1lbnRSZWdpc3RyeSgpOworCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiB3ZWJraXRSZWdpc3RlcihEb2N1bWVudCosIGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gd2Via2l0UmVnaXN0ZXIoRG9jdW1lbnQq
LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IERpY3Rpb25hcnkmIG9wdGlvbnMsIEV4
Y2VwdGlvbkNvZGUmKTsKKworICAgIFBhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9y
PiByZWdpc3RlckVsZW1lbnQoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBEaWN0aW9u
YXJ5JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJik7CisgICAgQ3VzdG9tRWxlbWVudENvbnN0cnVj
dG9yKiBmaW5kKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPEhU
TUxFbGVtZW50PiBjcmVhdGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKKwor
ICAgIHN0YXRpYyBDdXN0b21FbGVtZW50Q29uc3RydWN0b3IqIGNvbnN0cnVjdG9yT2YoSFRNTEVs
ZW1lbnQqKTsKKworcHJpdmF0ZToKKyAgICB0eXBlZGVmIEhhc2hNYXA8UXVhbGlmaWVkTmFtZTo6
UXVhbGlmaWVkTmFtZUltcGwqLCBSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiA+Q29u
c3RydWN0b3JNYXA7CisKKyAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKKyAgICBTY3JpcHRWYWx1
ZSBtX2RlZmF1bHRQcm90b3R5cGU7CisgICAgQ29uc3RydWN0b3JNYXAgbV9jb25zdHJ1Y3RvcnM7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9N
X0RPTV9FTEVNRU5UUykKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggNmNiYTI5
ZWQ2OTgyYjA3Y2U5MTc2YjU3MTI2MzkyNGQ1ZDk1MThlYi4uZjg3ZGM1OGQ1YWU4OTA1OTM3OTMx
YTgzZTNhOWFjYzA0OTU0MjIzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC00NiwxMSAr
NDYsMTQgQEAKICNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKICNpbmNsdWRlICJD
b250ZXh0RmVhdHVyZXMuaCIKICNpbmNsdWRlICJDb29raWVKYXIuaCIKKyNpbmNsdWRlICJDdXN0
b21FbGVtZW50Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50UmVnaXN0cnku
aCIKICNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkRPTU5hbWVkRmxv
d0NvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJET01TZWxlY3Rpb24uaCIKICNpbmNsdWRlICJET01X
aW5kb3cuaCIKICNpbmNsdWRlICJEYXRlQ29tcG9uZW50cy5oIgorI2luY2x1ZGUgIkRpY3Rpb25h
cnkuaCIKICNpbmNsdWRlICJEb2N1bWVudEV2ZW50UXVldWUuaCIKICNpbmNsdWRlICJEb2N1bWVu
dEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKQEAgLTgzOCw2ICs4NDEs
MjAgQEAgUGFzc1JlZlB0cjxFbGVtZW50PiBEb2N1bWVudDo6Y3JlYXRlRWxlbWVudChjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkMKICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChR
dWFsaWZpZWROYW1lKG51bGxBdG9tLCBuYW1lLCBudWxsQXRvbSksIGZhbHNlKTsKIH0KIAorI2lm
IEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29u
c3RydWN0b3I+IERvY3VtZW50OjpyZWdpc3RlckVsZW1lbnQoY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICByZXR1cm4gcmVnaXN0ZXJFbGVtZW50KG5h
bWUsIERpY3Rpb25hcnkoKSwgZWMpOworfQorCitQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25z
dHJ1Y3Rvcj4gRG9jdW1lbnQ6OnJlZ2lzdGVyRWxlbWVudChjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWUsIGNvbnN0IERpY3Rpb25hcnkmIG9wdGlvbnMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IGlmICghbV9yZWdpc3RyeSkKKyAgICAgICAgbV9yZWdpc3RyeSA9IGFkb3B0UHRyKG5ldyBDdXN0
b21FbGVtZW50UmVnaXN0cnkodGhpcykpOworICAgIHJldHVybiBtX3JlZ2lzdHJ5LT5yZWdpc3Rl
ckVsZW1lbnQobmFtZSwgb3B0aW9ucywgZWMpOworfQorI2VuZGlmIC8vIEVOQUJMRShDVVNUT01f
RE9NX0VMRU1FTlRTKQorCiBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IERvY3VtZW50Ojpj
cmVhdGVEb2N1bWVudEZyYWdtZW50KCkKIHsKICAgICByZXR1cm4gRG9jdW1lbnRGcmFnbWVudDo6
Y3JlYXRlKGRvY3VtZW50KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCAwYjJiZGQ3ZTI4ZjZj
ZDFkMTU0YzEyM2M0ZDdhNmIyZTYwNGNmOTkzLi45Nzk1NmZjYWY2ZDI2MjQzNzg2ZTBlYzNlZGYy
ZjU4OTIzMTljMjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtNjksNiArNjksOCBAQCBjbGFz
cyBDYW52YXNSZW5kZXJpbmdDb250ZXh0OwogY2xhc3MgQ2hhcmFjdGVyRGF0YTsKIGNsYXNzIENv
bW1lbnQ7CiBjbGFzcyBDb250ZXh0RmVhdHVyZXM7CitjbGFzcyBDdXN0b21FbGVtZW50Q29uc3Ry
dWN0b3I7CitjbGFzcyBDdXN0b21FbGVtZW50UmVnaXN0cnk7CiBjbGFzcyBET01JbXBsZW1lbnRh
dGlvbjsKIGNsYXNzIERPTU5hbWVkRmxvd0NvbGxlY3Rpb247CiBjbGFzcyBET01TZWxlY3Rpb247
CkBAIC0xMTYyLDYgKzExNjQsMTMgQEAgcHVibGljOgogICAgIFRleHRBdXRvc2l6ZXIqIHRleHRB
dXRvc2l6ZXIoKSB7IHJldHVybiBtX3RleHRBdXRvc2l6ZXIuZ2V0KCk7IH0KICNlbmRpZgogCisj
aWYgRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpCisgICAgUGFzc1JlZlB0cjxDdXN0b21FbGVt
ZW50Q29uc3RydWN0b3I+IHJlZ2lzdGVyRWxlbWVudChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUs
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rv
cj4gcmVnaXN0ZXJFbGVtZW50KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgRGljdGlv
bmFyeSYgb3B0aW9ucywgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8RWxlbWVudD4g
Y3JlYXRlQ3VzdG9tRWxlbWVudChjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpOworICAgIEN1
c3RvbUVsZW1lbnRSZWdpc3RyeSogcmVnaXN0cnkoKSBjb25zdCB7IHJldHVybiBtX3JlZ2lzdHJ5
LmdldCgpOyB9CisjZW5kaWYKKwogICAgIHZvaWQgYWRqdXN0RmxvYXRRdWFkc0ZvclNjcm9sbEFu
ZEFic29sdXRlWm9vbUFuZEZyYW1lU2NhbGUoVmVjdG9yPEZsb2F0UXVhZD4mLCBSZW5kZXJPYmpl
Y3QqKTsKICAgICB2b2lkIGFkanVzdEZsb2F0UmVjdEZvclNjcm9sbEFuZEFic29sdXRlWm9vbUFu
ZEZyYW1lU2NhbGUoRmxvYXRSZWN0JiwgUmVuZGVyT2JqZWN0Kik7CiAKQEAgLTE1MzMsNiArMTU0
MiwxMCBAQCBwcml2YXRlOgogICAgIE93blB0cjxUZXh0QXV0b3NpemVyPiBtX3RleHRBdXRvc2l6
ZXI7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorICAgIE93blB0
cjxDdXN0b21FbGVtZW50UmVnaXN0cnk+IG1fcmVnaXN0cnk7CisjZW5kaWYKKwogICAgIGJvb2wg
bV9zY2hlZHVsZWRUYXNrc0FyZVN1c3BlbmRlZDsKICAgICAKICAgICBib29sIG1fdmlzdWFsVXBk
YXRlc0FsbG93ZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5w
bCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCmluZGV4IDIwMWY0NWY0NGU4Njg4
NzA5NDc0MzNlMzA1ZDY3MTc1ODc4Y2U4M2EuLjM1YmE5MTRkNDI2OTY0ZWE1MjY4MTBiMGQ0OGYx
ODY0MDFiMmRhMTEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCkBAIC0xMTcyLDggKzExNzIs
OCBAQCBFTkQKIDsKICAgICB9IGVsc2lmICgkd3JhcHBlckZhY3RvcnlUeXBlIGVxICJWOCIpIHsK
ICAgICAgICAgcHJpbnQgRiA8PEVORAorI2luY2x1ZGUgIlY4SFRNTEN1c3RvbUVsZW1lbnQuaCIK
ICNpbmNsdWRlICJWOCRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50LmgiCi0gICAgICAgIAog
I2luY2x1ZGUgPHY4Lmg+CiBFTkQKIDsKQEAgLTEyNzQsNiArMTI3NCwxMSBAQCBFTkQKICAgICBy
ZXR1cm4gVjhTVkdFbGVtZW50OjpjcmVhdGVXcmFwcGVyKGVsZW1lbnQsIGNyZWF0aW9uQ29udGV4
dCwgaXNvbGF0ZSk7CiBFTkQKIDsKKyAgICAgICAgfSBlbHNpZiAoJHBhcmFtZXRlcnN7bmFtZXNw
YWNlfSBlcSAiSFRNTCIpIHsKKyAgICAgICAgICAgIHByaW50IEYgPDxFTkQKKyAgICByZXR1cm4g
VjhIVE1MQ3VzdG9tRWxlbWVudDo6dG9WOChlbGVtZW50LCBjcmVhdGlvbkNvbnRleHQsIGlzb2xh
dGUpOworRU5ECis7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBwcmludCBGIDw8RU5E
CiAgICAgcmV0dXJuIHdyYXAodG8kcGFyYW1ldGVyc3tmYWxsYmFja0ludGVyZmFjZU5hbWV9KGVs
ZW1lbnQpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9j
dW1lbnQuaWRsCmluZGV4IDNkODA1MGExMTQ2NmFhN2UzY2M1ODVlMjEwMGYyZGFmNGUzYjA0ZGMu
LmNjOTBmNGNlZjI2NTlkZjNmYjczMjQ4NjkzMGZiYTE1NjA3NzRiNzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxEb2N1bWVudC5pZGwKQEAgLTUyLDYgKzUyLDExIEBACiAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIEVsZW1lbnQgYWN0aXZlRWxlbWVudDsKICAgICBib29sZWFuIGhhc0ZvY3VzKCk7CiAK
KyNpZiBkZWZpbmVkKEVOQUJMRV9DVVNUT01fRE9NX0VMRU1FTlRTKSAmJiBFTkFCTEVfQ1VTVE9N
X0RPTV9FTEVNRU5UUworICAgIFtWOEVuYWJsZWRBdFJ1bnRpbWU9Y3VzdG9tRE9NRWxlbWVudHMs
IENvbmRpdGlvbmFsPUNVU1RPTV9ET01fRUxFTUVOVFMsIEltcGxlbWVudGVkQXM9cmVnaXN0ZXJF
bGVtZW50XQorICAgIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciB3ZWJraXRSZWdpc3RlcihpbiBE
T01TdHJpbmcgbmFtZSwgaW4gW09wdGlvbmFsXSBEaWN0aW9uYXJ5IG9wdGlvbnMpIHJhaXNlcyhE
T01FeGNlcHRpb24pOworI2VuZGlmCisKICAgICAvLyBEZXByZWNhdGVkIGF0dHJpYnV0ZXMKICAg
ICAgICAgICAgICBbVHJlYXROdWxsQXM9TnVsbFN0cmluZ10gYXR0cmlidXRlIERPTVN0cmluZyBi
Z0NvbG9yOwogICAgICAgICAgICAgIFtUcmVhdE51bGxBcz1OdWxsU3RyaW5nXSBhdHRyaWJ1dGUg
RE9NU3RyaW5nIGZnQ29sb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2Zl
YXR1cmVzLmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKaW5kZXgg
N2U3M2M3NTI3MTg4OWFiNzg5NDlhMTI2YzYxM2ZhZWM4MjBlYjgwOS4uODU3YmI3ODU4NDcyMDk4
YjgyNWU5MWQyNjY0NDg0ZGM0OGMwMGFmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9mZWF0dXJlcy5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMu
Z3lwaQpAQCAtNTQsNiArNTQsNyBAQAogICAgICAgJ0VOQUJMRV9DU1NfVFJBTlNGT1JNU19BTklN
QVRJT05TX1RSQU5TSVRJT05TX1VOUFJFRklYRUQ9MCcsCiAgICAgICAnRU5BQkxFX0NTU19WQVJJ
QUJMRVM9MScsCiAgICAgICAnRU5BQkxFX0NTU19TVElDS1lfUE9TSVRJT049MScsCisgICAgICAn
RU5BQkxFX0NVU1RPTV9ET01fRUxFTUVOVFM9MScsCiAgICAgICAnRU5BQkxFX0NVU1RPTV9TQ0hF
TUVfSEFORExFUj0wJywKICAgICAgICdFTkFCTEVfREFTSEJPQVJEX1NVUFBPUlQ9MCcsCiAgICAg
ICAnRU5BQkxFX0RBVEFfVFJBTlNGRVJfSVRFTVM9MScsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJSdW50aW1lRmVhdHVyZXMuaCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlJ1bnRpbWVGZWF0dXJlcy5oCmluZGV4IDJhNDk4OWQ5M2U0MTlk
Nzc3MDg4Mzg4ZDhmMDA4MTRlMDQxMTgyNjIuLmM3YzI3ZDhmNGNhZTc1OTY1NGZiNTFmYzZkMjll
NmI1YTNlOTkzMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlJ1bnRpbWVGZWF0dXJlcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlJ1bnRpbWVGZWF0dXJlcy5oCkBAIC0xMjUsNiArMTI1LDkgQEAgcHVibGljOgogICAgIFdFQktJ
VF9FWFBPUlQgc3RhdGljIHZvaWQgZW5hYmxlU2hhZG93RE9NKGJvb2wpOwogICAgIFdFQktJVF9F
WFBPUlQgc3RhdGljIGJvb2wgaXNTaGFkb3dET01FbmFibGVkKCk7CiAKKyAgICBXRUJLSVRfRVhQ
T1JUIHN0YXRpYyB2b2lkIGVuYWJsZUN1c3RvbURPTUVsZW1lbnRzKGJvb2wpOworICAgIFdFQktJ
VF9FWFBPUlQgc3RhdGljIGJvb2wgaXNDdXN0b21ET01FbGVtZW50c0VuYWJsZWQoKTsKKwogICAg
IFdFQktJVF9FWFBPUlQgc3RhdGljIHZvaWQgZW5hYmxlU3R5bGVTY29wZWQoYm9vbCk7CiAgICAg
V0VCS0lUX0VYUE9SVCBzdGF0aWMgYm9vbCBpc1N0eWxlU2NvcGVkRW5hYmxlZCgpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJSdW50aW1lRmVhdHVyZXMuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUnVudGltZUZlYXR1cmVzLmNwcAppbmRl
eCAwMTliNjczOGE3MTFmOTlkMGY1YmM1MzI0ZGMyMzdlMzMyZGI2ZjdmLi4zYjZjOWY2NTlhODBj
NmYzZjUwMjk2NGUxZmZkZWRlOTg4ODg4NjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJSdW50aW1lRmVhdHVyZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlJ1bnRpbWVGZWF0dXJlcy5jcHAKQEAgLTQ2Nyw2ICs0NjcsMjUgQEAgYm9v
bCBXZWJSdW50aW1lRmVhdHVyZXM6OmlzU2hhZG93RE9NRW5hYmxlZCgpCiAjZW5kaWYKIH0KIAor
dm9pZCBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZUN1c3RvbURPTUVsZW1lbnRzKGJvb2wgZW5h
YmxlKQoreworI2lmIEVOQUJMRShDVVNUT01fRE9NX0VMRU1FTlRTKQorICAgIFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNldEN1c3RvbURPTUVsZW1lbnRzKGVuYWJsZSk7CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShlbmFibGUpOworI2VuZGlmCit9CisKK2Jvb2wgV2ViUnVudGltZUZlYXR1cmVz
Ojppc0N1c3RvbURPTUVsZW1lbnRzRW5hYmxlZCgpCit7CisjaWYgRU5BQkxFKENVU1RPTV9ET01f
RUxFTUVOVFMpCisgICAgcmV0dXJuIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmN1c3RvbURPTUVs
ZW1lbnRzRW5hYmxlZCgpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwor
CiB2b2lkIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlU3R5bGVTY29wZWQoYm9vbCBlbmFibGUp
CiB7CiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxv
ZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAyNmQ0YzA2MzM2NTQzMmM3NzVjM2Q0MzZjOWJjZjE5
NTdlNjQ4YTQxLi42MDlmODk2MWZmOTQ0M2I1ZDk2ZTJhMGUxNTcwZGVhNjQ0MDM4YmFhIDEwMDY0
NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTUgQEAKKzIwMTMtMDEtMjcgIEhhamltZSBNb3JyaXRhICA8bW9ycml0YUBnb29nbGUuY29tPgor
CisgICAgICAgIFtDdXN0b20gRWxlbWVudHNdIEltcGxlbWVudCBiYXJlLWJvbmUgZG9jdW1lbnQu
cmVnaXN0ZXIoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTAwMjI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkZWQgZW5hYmxlQ3VzdG9tRE9NRWxlbWVudHMgZmxhZy4KKworICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHA6CisgICAgICAgIChUZXN0U2hlbGw6OlRl
c3RTaGVsbCk6CisKIDIwMTMtMDEtMjggIFRpbW90aHkgTG9oICA8dGltbG9oQGNocm9taXVtLmNv
bT4KIAogICAgICAgICBSZWZhY3RvciBDaGFuZ2VMb2cgYW5kIFByZXBhcmVDaGFuZ2VMb2cgdG8g
dXNlIEZpbGVTeXN0ZW0gb2JqZWN0cwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFNoZWxsLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RTaGVsbC5jcHAKaW5kZXggNzFkOTNkZGQ4ODVlZjEyZGE0YTNjMGM3ZTIwMWU2YjI1OTVmOGVk
My4uNTRlYmNkODEzMzMwNGI3ZGYxNzYzMjhjZTUwZTYwYzNhOTk4MGEzNiAxMDA2NDQKLS0tIGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcAorKysgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCkBAIC0xNDUsNiArMTQ1LDcgQEAg
VGVzdFNoZWxsOjpUZXN0U2hlbGwoKQogICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlVmlk
ZW9UcmFjayh0cnVlKTsKICAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZUdhbWVwYWQodHJ1
ZSk7CiAgICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVTaGFkb3dET00odHJ1ZSk7CisgICAg
V2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVDdXN0b21ET01FbGVtZW50cyh0cnVlKTsKICAgICBX
ZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZVN0eWxlU2NvcGVkKHRydWUpOwogICAgIFdlYlJ1bnRp
bWVGZWF0dXJlczo6ZW5hYmxlU2NyaXB0ZWRTcGVlY2godHJ1ZSk7CiAgICAgV2ViUnVudGltZUZl
YXR1cmVzOjplbmFibGVSZXF1ZXN0QXV0b2NvbXBsZXRlKHRydWUpOwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDA3N2RmODgx
NzlkYzJhZWFjMDRhZjlhMjY2ZDMyNGVjM2Y2ZDM3ZjguLjM4ZjhlYjkxNWI0NjAyNWNiNmQ0MGNh
MDNmNmFhODNiNGRkMmJiYjYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMy0wMS0yNyAgSGFq
aW1lIE1vcnJpdGEgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgW0N1c3RvbSBFbGVt
ZW50c10gSW1wbGVtZW50IGJhcmUtYm9uZSBkb2N1bWVudC5yZWdpc3RlcigpCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDAyMjkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZG9tL2N1c3RvbS9k
b2N1bWVudC1yZWdpc3Rlci1iYXNpYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9j
dXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9uczoKKwogMjAxMy0wMS0yOCAgTWljaGFl
bCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIGludGVnZXItbW9k
dWxvLmpzIGEgdHJ5IEpTLVJlZ3Jlc3MgdGVzdApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLWJhc2ljLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1iYXNpYy1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMTA1NTMxMWM2ZjlkYTg4MjI5MGQ1MDJlYTNmZTQyNGRmNjk3MDdlOAot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1y
ZWdpc3Rlci1iYXNpYy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzMiBAQAorVGVzdGluZyBkb2N1
bWVudC5yZWdpc3RlcigpIGJhc2ljIGJlaGF2aW9ycy4KKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK1BBU1MgZG9jdW1lbnQucmVnaXN0ZXIoJ2ZvbycpIHRocmV3IGV4Y2VwdGlvbiBF
cnJvcjogSW52YWxpZENoYXJhY3RlckVycm9yOiBET00gRXhjZXB0aW9uIDUuCitQQVNTIGRvY3Vt
ZW50LnJlZ2lzdGVyKCd5LWZvbycpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSW52YWxpZENoYXJh
Y3RlckVycm9yOiBET00gRXhjZXB0aW9uIDUuCitQQVNTIGRvY3VtZW50LnJlZ2lzdGVyKCd4Zm9v
JykgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJbnZhbGlkQ2hhcmFjdGVyRXJyb3I6IERPTSBFeGNl
cHRpb24gNS4KK1BBU1MgZG9jdW1lbnQucmVnaXN0ZXIoJ3kteC1mb28nKSB0aHJldyBleGNlcHRp
b24gRXJyb3I6IEludmFsaWRDaGFyYWN0ZXJFcnJvcjogRE9NIEV4Y2VwdGlvbiA1LgorUEFTUyB0
eXBlb2YgZm9vQ29uc3RydWN0b3IgaXMgJ2Z1bmN0aW9uJworUEFTUyBmb29Db25zdHJ1Y3Rvci5w
cm90b3R5cGUgaXMgSFRNTFNwYW5FbGVtZW50LnByb3RvdHlwZQorUEFTUyBkb2N1bWVudC5yZWdp
c3RlcigneC1mb28nKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IEludmFsaWRTdGF0ZUVycm9yOiBE
T00gRXhjZXB0aW9uIDExLgorUEFTUyBkb2N1bWVudC5yZWdpc3RlcignWC1GT08nKSB0aHJldyBl
eGNlcHRpb24gRXJyb3I6IEludmFsaWRTdGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDExLgorUEFT
UyBmb29Db25zdHJ1Y3RvcigpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IERPTSBvYmplY3Qg
Y29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLi4KK1BBU1MgY3JlYXRl
ZEZvby5fX3Byb3RvX18gaXMgZm9vQ29uc3RydWN0b3IucHJvdG90eXBlCitQQVNTIGNyZWF0ZWRG
b28uY29uc3RydWN0b3IgaXMgZm9vQ29uc3RydWN0b3IKK1BBU1MgY3JlYXRlZEZvby50YWdOYW1l
IGlzICdYLUZPTycKK1BBU1MgY3JlYXRlZEZvby50ZXh0Q29udGVudCBpcyAnSGVsbG8nCitQQVNT
IGNyZWF0ZWRGb28ubGFzdENoaWxkIGlzIGNoaWxkRGl2CitQQVNTIHBhcnNlZEZvby5fX3Byb3Rv
X18gaXMgZm9vQ29uc3RydWN0b3IucHJvdG90eXBlCitQQVNTIHBhcnNlZEZvby50YWdOYW1lIGlz
ICdYLUZPTycKK1BBU1MgcGFyc2VkRm9vLnNvbWVQcm9wZXJ0eSBpcyBjb250YWluZXIuZmlyc3RD
aGlsZC5zb21lUHJvcGVydHkKK1BBU1MgY3JlYXRlZEJhci50YWdOYW1lIGlzICdYLUJBUicKK1BB
U1MgY3JlYXRlZFVwcGVyQmFyLmNvbnN0cnVjdG9yIGlzIGJhckNvbnN0cnVjdG9yCitQQVNTIGNy
ZWF0ZWRVcHBlckJhci50YWdOYW1lIGlzICdYLUJBUicKK1BBU1MgY3JlYXRlZE1peGVkQmFyLmNv
bnN0cnVjdG9yIGlzIGJhckNvbnN0cnVjdG9yCitQQVNTIGNyZWF0ZWRNaXhlZEJhci50YWdOYW1l
IGlzICdYLUJBUicKK1BBU1MgY29udGFpbmVyLmZpcnN0Q2hpbGQuY29uc3RydWN0b3IgaXMgYmFy
Q29uc3RydWN0b3IKK1BBU1MgY29udGFpbmVyLmZpcnN0Q2hpbGQudGFnTmFtZSBpcyAnWC1CQVIn
CitQQVNTIGNvbnRhaW5lci5sYXN0Q2hpbGQuY29uc3RydWN0b3IgaXMgYmFyQ29uc3RydWN0b3IK
K1BBU1MgY29udGFpbmVyLmxhc3RDaGlsZC50YWdOYW1lIGlzICdYLUJBUicKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLWJhc2ljLmh0
bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xMWU4YWY4ZjM5OWU2YjQ3ZTMyM2Q3YTI3MTcxNjgxZTdjYzM4NGMx
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50
LXJlZ2lzdGVyLWJhc2ljLmh0bWwKQEAgLTAsMCArMSw4NCBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImNvbnRhaW5lciI+PC9k
aXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3RpbmcgZG9jdW1lbnQucmVnaXN0ZXIoKSBi
YXNpYyBiZWhhdmlvcnMuIik7CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVu
bmVyLmR1bXBBc1RleHQoKTsKK2RvY3VtZW50LnJlZ2lzdGVyID0gZG9jdW1lbnQucmVnaXN0ZXIg
fHwgZG9jdW1lbnQud2Via2l0UmVnaXN0ZXI7CisKKy8vIEludmFsaWQgbmFtZXMKK3Nob3VsZFRo
cm93KCJkb2N1bWVudC5yZWdpc3RlcignZm9vJykiLCAiJ0Vycm9yOiBJbnZhbGlkQ2hhcmFjdGVy
RXJyb3I6IERPTSBFeGNlcHRpb24gNSciKTsKK3Nob3VsZFRocm93KCJkb2N1bWVudC5yZWdpc3Rl
cigneS1mb28nKSIsICInRXJyb3I6IEludmFsaWRDaGFyYWN0ZXJFcnJvcjogRE9NIEV4Y2VwdGlv
biA1JyIpOworc2hvdWxkVGhyb3coImRvY3VtZW50LnJlZ2lzdGVyKCd4Zm9vJykiLCAiJ0Vycm9y
OiBJbnZhbGlkQ2hhcmFjdGVyRXJyb3I6IERPTSBFeGNlcHRpb24gNSciKTsKK3Nob3VsZFRocm93
KCJkb2N1bWVudC5yZWdpc3RlcigneS14LWZvbycpIiwgIidFcnJvcjogSW52YWxpZENoYXJhY3Rl
ckVycm9yOiBET00gRXhjZXB0aW9uIDUnIik7CisKK3ZhciBmb29Db25zdHJ1Y3RvciA9IGRvY3Vt
ZW50LnJlZ2lzdGVyKCJ4LWZvbyIpOworc2hvdWxkQmUoInR5cGVvZiBmb29Db25zdHJ1Y3RvciIs
ICInZnVuY3Rpb24nIik7CitzaG91bGRCZSgiZm9vQ29uc3RydWN0b3IucHJvdG90eXBlIiwgIkhU
TUxTcGFuRWxlbWVudC5wcm90b3R5cGUiKTsKKworLy8gTmFtZSBjb25mbGljdHMKK3Nob3VsZFRo
cm93KCJkb2N1bWVudC5yZWdpc3RlcigneC1mb28nKSIsICInRXJyb3I6IEludmFsaWRTdGF0ZUVy
cm9yOiBET00gRXhjZXB0aW9uIDExJyIpOworc2hvdWxkVGhyb3coImRvY3VtZW50LnJlZ2lzdGVy
KCdYLUZPTycpIiwgIidFcnJvcjogSW52YWxpZFN0YXRlRXJyb3I6IERPTSBFeGNlcHRpb24gMTEn
Iik7CisKKy8vIENhbGwgYXMgZnVuY3Rpb24KK3Nob3VsZFRocm93KCJmb29Db25zdHJ1Y3Rvcigp
IiwgIidUeXBlRXJyb3I6IERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBh
cyBhIGZ1bmN0aW9uLiciKQorCisvLyBDb25zdHJ1Y3RvciBpbml0aWF0ZWQgaW5zdGFudGlhdGlv
bgordmFyIGNyZWF0ZWRGb28gPSBuZXcgZm9vQ29uc3RydWN0b3IoKTsKKworLy8gSlMgYnVpbHQt
aW4gcHJvcGVydGllcworc2hvdWxkQmUoImNyZWF0ZWRGb28uX19wcm90b19fIiwgImZvb0NvbnN0
cnVjdG9yLnByb3RvdHlwZSIpOworc2hvdWxkQmUoImNyZWF0ZWRGb28uY29uc3RydWN0b3IiLCAi
Zm9vQ29uc3RydWN0b3IiKTsKKworLy8gTmF0aXZlIGdldHRlcgorc2hvdWxkQmUoImNyZWF0ZWRG
b28udGFnTmFtZSIsICInWC1GT08nIik7CisKKy8vIE5hdGl2ZSBzZXR0ZXIKK2NyZWF0ZWRGb28u
aW5uZXJIVE1MID0gIkhlbGxvIjsKK3Nob3VsZEJlKCJjcmVhdGVkRm9vLnRleHRDb250ZW50Iiwg
IidIZWxsbyciKTsKKworLy8gTmF0aXZlIG1ldGhvZAordmFyIGNoaWxkRGl2ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgiZGl2Iik7CitjcmVhdGVkRm9vLmFwcGVuZENoaWxkKGNoaWxkRGl2KTsK
K3Nob3VsZEJlKCJjcmVhdGVkRm9vLmxhc3RDaGlsZCIsICJjaGlsZERpdiIpOworCisvLyBQYXJz
ZXIgaW5pdGlhdGVkIGluc3RhbnRpYXRpb24KK3ZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiY29udGFpbmVyIik7Citjb250YWluZXIuaW5uZXJIVE1MID0gIjx4LWZvbz48
L3gtZm9vPiI7CitwYXJzZWRGb28gPSBjb250YWluZXIuZmlyc3RDaGlsZDsKKworc2hvdWxkQmUo
InBhcnNlZEZvby5fX3Byb3RvX18iLCAiZm9vQ29uc3RydWN0b3IucHJvdG90eXBlIik7CitzaG91
bGRCZSgicGFyc2VkRm9vLnRhZ05hbWUiLCAiJ1gtRk9PJyIpOworCisvLyBFbnN1cmluZyB0aGUg
d3JhcHBlciBpcyByZXRhaW5lZAorcGFyc2VkRm9vLnNvbWVQcm9wZXJ0eSA9ICJoZWxsbyI7Citz
aG91bGRCZSgicGFyc2VkRm9vLnNvbWVQcm9wZXJ0eSIsICJjb250YWluZXIuZmlyc3RDaGlsZC5z
b21lUHJvcGVydHkiKTsKKworLy8gSGF2aW5nIGFub3RlaHIgY29uc3RydWN0b3IKK3ZhciBiYXJD
b25zdHJ1Y3RvciA9IGRvY3VtZW50LnJlZ2lzdGVyKCJ4LWJhciIpOwordmFyIGNyZWF0ZWRCYXIg
PSBuZXcgYmFyQ29uc3RydWN0b3IoKTsKK3Nob3VsZEJlKCJjcmVhdGVkQmFyLnRhZ05hbWUiLCAi
J1gtQkFSJyIpOworCisvLyBXaXRoIGlycmVndWxhciBjYXNlcwordmFyIGNyZWF0ZWRVcHBlckJh
ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlgtQkFSIik7Cit2YXIgY3JlYXRlZE1peGVkQmFy
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiWC1CYXIiKTsKK3Nob3VsZEJlKCJjcmVhdGVkVXBw
ZXJCYXIuY29uc3RydWN0b3IiLCAiYmFyQ29uc3RydWN0b3IiKTsKK3Nob3VsZEJlKCJjcmVhdGVk
VXBwZXJCYXIudGFnTmFtZSIsICInWC1CQVInIik7CitzaG91bGRCZSgiY3JlYXRlZE1peGVkQmFy
LmNvbnN0cnVjdG9yIiwgImJhckNvbnN0cnVjdG9yIik7CitzaG91bGRCZSgiY3JlYXRlZE1peGVk
QmFyLnRhZ05hbWUiLCAiJ1gtQkFSJyIpOworCitjb250YWluZXIuaW5uZXJIVE1MID0gIjxYLUJB
Uj48L1gtQkFSPjxYLUJhcj48L1gtQmFyPiI7CitzaG91bGRCZSgiY29udGFpbmVyLmZpcnN0Q2hp
bGQuY29uc3RydWN0b3IiLCAiYmFyQ29uc3RydWN0b3IiKTsKK3Nob3VsZEJlKCJjb250YWluZXIu
Zmlyc3RDaGlsZC50YWdOYW1lIiwgIidYLUJBUiciKTsKK3Nob3VsZEJlKCJjb250YWluZXIubGFz
dENoaWxkLmNvbnN0cnVjdG9yIiwgImJhckNvbnN0cnVjdG9yIik7CitzaG91bGRCZSgiY29udGFp
bmVyLmxhc3RDaGlsZC50YWdOYW1lIiwgIidYLUJBUiciKTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVj
dGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zCmluZGV4
IDM0YTBkMTA4YTQzOTRlOWQyMjAwM2NlN2Q3OTc5OTRkODNlMjYxNzEuLjIzZmYyMGM4NTIxNmI0
NGVhY2ExMzllMTRhZjY0YWFkYWU4Y2JjNTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL21hYy9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9U
ZXN0RXhwZWN0YXRpb25zCkBAIC0xMDEzLDYgKzEwMTMsOSBAQCB3ZWJraXQub3JnL2IvNzY0ODkg
Y29tcG9zaXRpbmcvd2ViZ2wvd2ViZ2wtcmVmbGVjdGlvbi5odG1sIFsgSW1hZ2VPbmx5RmFpbHVy
ZSBdCiB3ZWJraXQub3JnL2IvNzY0MzkgWyBEZWJ1ZyBdIGZhc3QvZG9tL3NoYWRvdy9jb250ZW50
LWVsZW1lbnQtYXBpLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi83NjQzOSBbIERlYnVn
IF0gZmFzdC9kb20vc2hhZG93L2NvbnRlbnQtZWxlbWVudC1vdXRzaWRlLXNoYWRvdy5odG1sIFsg
RmFpbHVyZSBdCiAKKyMgRU5BQkxFKENVU1RPTV9ET01fRUxFTUVOVFMpIGlzIGRpc2FibGVkLgor
ZmFzdC9kb20vY3VzdG9tCisKICMgQ1NTIFZhcmlhYmxlcyBhcmUgbm90IHlldCBlbmFibGVkLgog
d2Via2l0Lm9yZy9iLzg1NTgwIGZhc3QvY3NzL3ZhcmlhYmxlcwogd2Via2l0Lm9yZy9iLzg1NTgw
IGluc3BlY3Rvci9zdHlsZXMvdmFyaWFibGVzCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185147</attachid>
            <date>2013-01-28 21:16:18 -0800</date>
            <delta_ts>2013-01-30 00:13:59 -0800</delta_ts>
            <desc>Renamed the feature flag</desc>
            <filename>bug-100229-20130129141304.patch</filename>
            <type>text/plain</type>
            <size>74705</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxMDQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGMyNGQ4OGM0OGE2Yzdm
Zjc3MzFmY2Q3MzVjMDgxYWU0NTA2NzczOS4uMjI4YjJiNTk2NGYyZjNiNTJiMmMwZjVkNTE4OGUy
MDIxYTFjNTM2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2NSBAQAorMjAxMy0wMS0yNyAgSGFq
aW1lIE1vcnJpdGEgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgW0N1c3RvbSBFbGVt
ZW50c10gSW1wbGVtZW50IGJhcmUtYm9uZSBkb2N1bWVudC5yZWdpc3RlcigpCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDAyMjkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNoYW5nZSBpbXBsZW1l
bnRzIHByZWZpeGVkIHZlcnNpb24gb2YgZG9jdW1lbnQucmVnaXRlcigpLCB3aXRoIG1pbmltYWwg
ZmVhdHVyZSBzdXBwb3J0LgorICAgICAgICAtIFRoZSBmZWF0dXJlIGlzIGd1YXJkZWQgYnkgRU5B
QkxFKENVU1RPTV9ET01fRUxNRU5UUykgYW5kIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmN1c3Rv
bURPTUVsZW1lbnRzRW5hYmxlZCgpLgorICAgICAgICAtIFRoaXMgYmFyZS1ib25lIHZlcnNpb24g
b25seSByZWNvZ25pemVzICJuYW1lIiBwYXJhbXRlciBhbmQgaWdub3JlcyBhbnkgb3B0aW9uYWwg
cGFyYW1ldGVycy4KKyAgICAgICAgLSBDdXJyZW50bHkgb25seSBWOCBpcyBzdXBwb3J0ZWQuIEpT
QyBiaW5kaW5nIG5lZWRzIGl0cyBvd24gYmluZGluZyBpbXBsZW1lbnRhdGlvbi4KKworICAgICAg
ICA9IE1ham9yIG5ldyBjbGFzc2VzIHVuZGVyIGRvbS86CisKKyAgICAgICAgVGhlIGRvbSBtb2R1
bGUgaGFzIHR3byBuZXcgY2xhc3NlczoKKyAgICAgICAgLSBDdXN0b21FbGVtZW50Q29uc3RydWN0
b3I6IEEgcmV0dXJuIHZhbHVlIG9mIGRvY3VtZW50LnJlZ2lzdGVyKCkKKyAgICAgICAgICB3aGlj
aCBob2xkcyB0aGUgY3VzdG9tIGVsZW1lbnQgZGVmaW5pdGlvbi4KKyAgICAgICAgLSBDdXN0b21F
bGVtZW50UmVnaXN0cnk6IEEgY29sbGVjdGlvbiBvZiBDdXN0b21FbGVtZW50Q29uc3RydWN0b3Ig
b2JqZWN0cy4KKyAgICAgICAgICBDdXN0b21FbGVtZW50UmVnaXN0cnkgaW5zdGFuY2UgaXMgY3Jl
YXRlZCBwZXIgRG9jdW1lbnQgYW5kIGl0IGlzIG93bmVkIGJ5IHRoZSBEb2N1bWVudC4KKworICAg
ICAgICBDdXN0b21FbGVtZW50Q29uc3RydWN0b3Iga25vd3MgdGhlIGRlZmluaXRpb24gb2YgZWFj
aCBjdXN0b20KKyAgICAgICAgZWxlbWVudCwgd2hpY2ggaXMgcmVnaXN0ZXJlZCBieSBkb2N1bWVu
dC5yZWdpc3RlcigpLiBUaGUgbmFtZSBhbmQKKyAgICAgICAgb3RoZXIgb3B0aW9ucyBhcmUgaGVs
ZCBieSB0aGlzIG9iamVjdC4gQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5IG93bnMgYSBzZXQKKyAgICAg
ICAgb2YgdGhlIHJlZ2lzdGVyZWQgY29uc3RydWN0b3JzLiBUaGUgcmVnaXN0cnkgZ3VhcmFudGVl
cyBpbnZhcmlhbnRzCisgICAgICAgIGxpa2UgdW5pcXVlbmVzcyBvZiB0aGUgZWxlbWVudCBuYW1l
cy4KKworICAgICAgICA9IEEgY2hhbmdlIG9uIG1ha2VfbmFtZXMucGwKKworICAgICAgICBUaGlz
IGNoYW5nZSB0d2Vha3MgbWFrZV9uYW1lcy5wbCAob3IgZ2VuZXJhdGVkIEhUTUxFbGVtZW50RmFj
dG9yeSkKKyAgICAgICAgdG8gaG9vayB0aGUgY3JlYXRpb25zIG9mIHVua25vd24gZWxlbWVudHMu
IFNvbWUgb2YgZWxlbWVudCBuYW1lcworICAgICAgICB3aGljaCBjb21lIHRvIHRoZSBmYWxsYmFj
ayBwYXRoIGNhbiBiZSBvbmUgb2YgcmVnaXN0ZXJlZCBjdXN0b20KKyAgICAgICAgZWxlbWVudC4K
KworICAgICAgICA9IFtWOFdyYXBBc0Z1bmN0aW9uXSBleHRlbmRlZCBhdHRyaWJ1dGU6CisKKyAg
ICAgICAgVGhlIGRvY3VtZW50LnJlZ2lzdGVyKCkgQVBJIHJldHVybnMgYSBjb25zdHJ1Y3Rvcgor
ICAgICAgICBmdW5jdGlvbi4gSG93ZXZlciwgdGhlIFY4IGJpbmRpbmcgY3VycmVudGx5IGRvZXNu
J3Qgc3VwcG9ydCBpdC4gVG8KKyAgICAgICAgbWFrZSBpdCBwb3NzaWJsZSwgdGhpcyBjaGFuZ2Ug
aW50cm9kdWNlcyAiVjhXcmFwQXNGdW5jdGlvbiIKKyAgICAgICAgZXh0ZW5kZWQgYXR0cmlidXRl
IGZvciBhbm5vdGF0aW5nIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciBJREwKKyAgICAgICAgaW50
ZXJmYWNlLgorCisgICAgICAgIFY4V3JhcEFzRnVuY3Rpb24gd3JhcHMgdGhlIGFubm90YXRlZCBp
bnRlcmZhY2Ugd2l0aCBhIEphdmFTY2lycHQKKyAgICAgICAgZnVuY3Rpb24sIHdoaWNoIGNhbGxz
IHRoZSBvcmlnaW5hbCBvYmplY3QgYXMgYSBmdW5jdGlvbiBvciBhCisgICAgICAgIGNvbnN0cnVj
dG9yIGRlcGVuZHMgb24gdGhlIGNhbGwgc2l0ZS4KKworICAgICAgICBXaXRoIHRoaXMgd3JhcHBl
ciBmdW5jdGlvbiwgdGhlcmUgaXMgdHdvIGxldmVsIG9mIGluZGlyZWN0aW9uCisgICAgICAgIGJl
dHdlZW4gbmF0aXZlIEMrKyBvYmplY3QgYW5kIGF1dGhvci12aXNpYmxlIEpTIGZ1bmN0aW9uOgor
CisgICAgICAgIFtKUyBBZGFwdG9yIEZ1Y3Rpb25dIDwtKGhpZGRlbiBwcm9wZXJ0eSktPiBbSlMg
V3JhcHBlciBPYmplY3RdIC0oaW50ZXJuYWwgZmllbGQpLT4gW0MrKyBOYXRpdmUgb2JqZWN0XQor
CisgICAgICAgIFRoZSBjb2RlIGdlbmVyYXRvciBnZW5lcmF0ZXMgdGhlIGJpbmRpbmcgY29kZSB3
aGljaCBkZWFscyB3aXRoCisgICAgICAgIHRoaXMgaW5kaXJlY3Rpb24uICBBbHNvLCB0aGVyZSBp
cyBhIHNldCBvZiBoZWxwZXIgZnVuY3Rpb25zIGluCisgICAgICAgIFY4QWRhcHRvckZ1bmN0aW9u
LmgvY3BwIHdoaWNoIHRha2UgY2FyZSBvZiB0aGlzIGluZGlyZWN0aW9uLgorICAgICAgICBWOERP
TVdyYXBwZXIuY3BwL2ggd29ya3MgYXMgYSBmYWNhZGUgZm9yIHRoZXNlIEFQSXMgYW5kIHVzZWQg
ZnJvbQorICAgICAgICB0aGUgZ2VuZXJhdGVkIGNvZGUuCisKKyAgICAgICAgVGhpcyByZWR1bmRh
bmN5IGNvbWVzIGZyb20gbGltaXRhdGlvbnMgb2YgYm90aCBWOCBiaW5kaW5ncyBhbmQgVjgKKyAg
ICAgICAgZW1iZWRkaW5nIEFQSS4gU2VlIGJ1ZyAxMDgxMzggZm9yIGRldGFpbHMuCisKKyAgICAg
ICAgPSBWOEhUTUxDdXN0b21FbGVtZW50CisKKyAgICAgICAgVW5saWtlIGJ1aWx0LWluIEhUTUwg
ZWxlbWVudHMsIGFueSBjdXN0b20gZWxlbWVudCBoYXMgbm8KKyAgICAgICAgY29ycmVzcG9uZGlu
ZyBDKysgY2xhc3MuIEluc3RlYWQsIGRvY3VtZW50LnJlZ2lzdGVyKCkgc2hvdWxkIGFsbG93Cisg
ICAgICAgIHBhc3NpbmcgYSBwcm90b3R5cGUgb2JqZWN0IGZvciB0aGUgZWxlbWVudHMgYmVpbmcg
cmVnaXN0ZXJlZC4KKworICAgICAgICBBbHRob3VnaCB0aGlzIGZpcnN0IHZlcnNpb24gZG9lc24n
dCBzdXBwb3J0IHRoZSBvcHRpbmFsIHByb3RvdHlwZQorICAgICAgICBwYXJhbWV0ZXIgeWV0LCBW
OEhUTUxDdXN0b21FbGVtZW50IGhlbHBlciBjbGFzcyBpcyBhIHBsdW1iaW5nIGZvcgorICAgICAg
ICBpdC4gVGhpcyBjbGFzcyBlbmNhcHN1bGF0ZXMgSlMgd3JhcHBlciBvYmplY3QgY3JlYXRpb24g
Zm9yIGN1c3RvbQorICAgICAgICBlbGVtZW1lbnQgaW5zdGFuY2VzLiBGb3IgZXhhbXBsZSwgaXQg
dGFrZXMgY2FyZSBvZiBwcm90b3R5cGUgY2hhaW4KKyAgICAgICAgc2V0dXAuIEFzIHdlIHN1cHBv
cnQgdGhlICJwcm90b3R5cGUiIG9wdGlvbmFsIHBhcmFtZXRlciBmb3IKKyAgICAgICAgZG9jdW1l
bnQucmVnaXN0ZXIoKSBpbiBmdXJ0dXJlIGNoYW5nZXMsIHRoaXMgcGx1bWJpbmcgd2lsbCBiZQor
ICAgICAgICBleHRlbmRlZC4KKworICAgICAgICA9IEN1c3RvbSBET00gZWxlbWV0bnMgYW5kIG11
bHRpcGxlIHdvcmxkcworCisgICAgICAgIEluIHRoaXMgcGF0Y2gsIGN1c3RvbSBlbGVtZW50IHJl
Z2lzdHJhdGlvbiBhbmQgaW5zdGFudGlhdGlvbiBpcyBub3QgYWxsb3dlZAorICAgICAgICBpbiBu
b24tbWFpbiB3b3JsZCBhbmQgZG9jdW1lbnQucmVnaXN0ZXIoKSBBUEkganVzdCBmYWlscyB0aGVy
ZS4KKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFz
aWMuaHRtbAorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6CisgICAgICAgICogYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1
cmVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL2dlbmVyaWMv
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5oOgorICAgICAgICAoUnVudGltZUVuYWJsZWRGZWF0dXJl
cyk6CisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpjdXN0b21ET01F
bGVtZW50c0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2V0Q3VzdG9tRE9NRWxlbWVudHMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQ6CisgICAgICAgICogYmluZGluZ3Mvdjgv
Q3VzdG9tRWxlbWVudEhlbHBlcnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudEhlbHBlcnM6OmRlZmF1bHRQcm90b3R5cGUpOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDdXN0b21FbGVtZW50SGVscGVycyk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvVjhBZGFwdG9yRnVuY3Rpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VjhBZGFwdG9yRnVuY3Rpb246OmdldFRlbXBsYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlY4QWRhcHRvckZ1bmN0aW9uOjpjb25maWd1cmVUZW1wbGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOEFkYXB0b3JGdW5jdGlvbjo6aW52b2NhdGlvbkNhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlY4QWRhcHRvckZ1bmN0aW9uOjp3cmFwKToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoVjhBZGFwdG9yRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
VjhBZGFwdG9yRnVuY3Rpb246OnVud3JhcCk6CisgICAgICAgIChXZWJDb3JlOjpWOEFkYXB0b3JG
dW5jdGlvbjo6Z2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjp0b0Z1bmN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpmcm9tRnVuY3Rpb24pOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oOgorICAgICAgICAoVjhET01XcmFw
cGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4SFRNTEN1c3RvbUVs
ZW1lbnQ6OmNyZWF0ZVdyYXBwZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4SFRNTEN1c3Rv
bUVsZW1lbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFY4SFRNTEN1
c3RvbUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6VjhIVE1MQ3VzdG9tRWxlbWVudDo6dG9W
OCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ3VzdG9tRWxlbWVudDo6dG9WOCk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yQ3VzdG9tLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9t
RWxlbWVudENvbnN0cnVjdG9yOjpjYWxsQXNGdW5jdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKiBk
b20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Q3VzdG9tRWxlbWVu
dENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rv
cjo6fkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21F
bGVtZW50Q29uc3RydWN0b3I6OndpbGxEZXN0cm95RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjpjcmVhdGVFbGVtZW50KToKKyAgICAgICAgKiBk
b20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChDdXN0b21FbGVtZW50Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjpkb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpD
dXN0b21FbGVtZW50Q29uc3RydWN0b3I6OnRhZ05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vz
dG9tRWxlbWVudENvbnN0cnVjdG9yOjpuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVs
ZW1lbnRDb25zdHJ1Y3Rvcjo6cHJvdG90eXBlKToKKyAgICAgICAgKiBkb20vQ3VzdG9tRWxlbWVu
dENvbnN0cnVjdG9yLmlkbDogQWRkZWQuCisgICAgICAgICogZG9tL0N1c3RvbUVsZW1lbnRSZWdp
c3RyeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpD
dXN0b21FbGVtZW50UmVnaXN0cnk6OkN1c3RvbUVsZW1lbnRSZWdpc3RyeSk6CisgICAgICAgIChX
ZWJDb3JlOjpDdXN0b21FbGVtZW50UmVnaXN0cnk6On5DdXN0b21FbGVtZW50UmVnaXN0cnkpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5Ojpjb25zdHJ1Y3Rvck9mKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6cmVnaXN0ZXJFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6ZmluZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVnaXN0cnk6OmNyZWF0ZUVsZW1lbnQpOgorICAg
ICAgICAqIGRvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKEN1c3RvbUVsZW1lbnRSZWdpc3RyeSk6CisgICAgICAgICogZG9tL0Rv
Y3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OnJlZ2lzdGVyRWxlbWVudCk6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKERvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjpyZWdpc3RyeSk6CisgICAgICAgICogZG9tL21ha2VfbmFtZXMucGw6CisgICAgICAgIChw
cmludFdyYXBwZXJGYWN0b3J5Q3BwRmlsZSk6CisgICAgICAgICogaHRtbC9Eb2N1bWVudC5pZGw6
CisKIDIwMTMtMDEtMjggIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAK
ICAgICAgICAgcG9zaXRpb246Zml4ZWQgdGhhdCBkb2Vzbid0IHJlbmRlciBhbnkgY29udGVudCBz
aG91bGQgbm90IGZvcmNlIGNvbXBvc2l0aW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDBlYzM4MjM0M2ExNmVkOGM2MTNhZTM5NjNjNzVmYjRiYjNmZjU5OTAuLmY5ZTY5MzU0NDRiMTdk
NzNjMWNkM2ZiY2FhM2IyMGMyYjdhNTNkMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTMtMDEtMjcgIEhhamltZSBNb3JyaXRhICA8bW9ycml0YUBnb29n
bGUuY29tPgorCisgICAgICAgIFtDdXN0b20gRWxlbWVudHNdIEltcGxlbWVudCBiYXJlLWJvbmUg
ZG9jdW1lbnQucmVnaXN0ZXIoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTAwMjI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkZWQgZW5hYmxlQ3VzdG9tRE9NRWxlbWVudHMgZmxhZy4KKworICAgICAg
ICAqIGZlYXR1cmVzLmd5cGk6CisgICAgICAgICogcHVibGljL1dlYlJ1bnRpbWVGZWF0dXJlcy5o
OgorICAgICAgICAoV2ViUnVudGltZUZlYXR1cmVzKToKKyAgICAgICAgKiBzcmMvV2ViUnVudGlt
ZUZlYXR1cmVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUnVudGltZUZlYXR1cmVzOjplbmFi
bGVDdXN0b21ET01FbGVtZW50cyk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJSdW50aW1lRmVhdHVyZXM6OmlzQ3VzdG9tRE9NRWxlbWVudHNFbmFibGVkKToKKwogMjAx
My0wMS0yOCAgVG9tIFNlcGV6ICA8dHNlcGV6QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbdjhd
IFNlY3VyaXR5IGZlYXR1cmU6IEphdmFTY3JpcHQgQmluZGluZ3MgaGFyZGVuaW5nCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dlYkNvcmUv
RGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCBiZDVmNDU4NDU2ODI0OTVhZjk2ZThkZjBiOTRiYmFj
ZGY3ZGYzZGZkLi4wODhlMWZlNzMyMTQwMzNhNGY0MTU0ODNmMjU2NGM0MjY4NjFmMTJhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTIxNCw2ICsyMTQsNyBAQCBCSU5ESU5HX0lE
TFMgPSBcCiAgICAgJChXZWJDb3JlKS9kb20vQ2xpcGJvYXJkLmlkbCBcCiAgICAgJChXZWJDb3Jl
KS9kb20vQ29tbWVudC5pZGwgXAogICAgICQoV2ViQ29yZSkvZG9tL0NvbXBvc2l0aW9uRXZlbnQu
aWRsIFwKKyAgICAkKFdlYkNvcmUpL2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaWRsIFwK
ICAgICAkKFdlYkNvcmUpL2RvbS9DdXN0b21FdmVudC5pZGwgXAogICAgICQoV2ViQ29yZSkvZG9t
L0RPTUNvcmVFeGNlcHRpb24uaWRsIFwKICAgICAkKFdlYkNvcmUpL2RvbS9ET01FcnJvci5pZGwg
XApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCmluZGV4IGZhMzUwZWFkMDk1YjZhNjk4NTQ0OTY5Y2M1MWY3Y2NiNGFm
YzRlMTUuLjVkNDAwNDEyZDQ4NzliNTQxY2Q2NWIwYmFkYTFiZGExNDYyMTBjMTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKQEAgLTIwMyw2ICsyMDMsNyBAQAogICAgICAgICAgICAgJ2RvbS9DbGlwYm9hcmQu
aWRsJywKICAgICAgICAgICAgICdkb20vQ29tbWVudC5pZGwnLAogICAgICAgICAgICAgJ2RvbS9D
b21wb3NpdGlvbkV2ZW50LmlkbCcsCisgICAgICAgICAgICAnZG9tL0N1c3RvbUVsZW1lbnRDb25z
dHJ1Y3Rvci5pZGwnLAogICAgICAgICAgICAgJ2RvbS9DdXN0b21FdmVudC5pZGwnLAogICAgICAg
ICAgICAgJ2RvbS9ET01Db3JlRXhjZXB0aW9uLmlkbCcsCiAgICAgICAgICAgICAnZG9tL0RPTUVy
cm9yLmlkbCcsCkBAIC0xMTc2LDYgKzExNzcsOCBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4
L0FycmF5VmFsdWUuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvQmluZGluZ1N0YXRlLmNw
cCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvQmluZGluZ1N0YXRlLmgnLAorICAgICAgICAg
ICAgJ2JpbmRpbmdzL3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmNwcCcsCisgICAgICAgICAgICAn
YmluZGluZ3MvdjgvQ3VzdG9tRWxlbWVudEhlbHBlcnMuaCcsCiAgICAgICAgICAgICAnYmluZGlu
Z3MvdjgvRE9NRGF0YVN0b3JlLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvRE9NRGF0
YVN0b3JlLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0RPTVJlcXVlc3RTdGF0ZS5oJywK
QEAgLTEyNDQsNiArMTI0Nyw4IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvU2hhcmVkUGVy
c2lzdGVudC5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRMaXN0
ZW5lci5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3Rl
bmVyLmgnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmNwcCcs
CisgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhBZGFwdG9yRnVuY3Rpb24uaCcsCiAgICAgICAg
ICAgICAnYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mv
djgvVjhCaW5kaW5nLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4QmluZGluZ01hY3Jv
cy5oJywKQEAgLTEyNjUsNiArMTI3MCw4IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhH
Q0NvbnRyb2xsZXIuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhHQ0ZvckNvbnRleHRE
aXNwb3NlLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhHQ0ZvckNvbnRleHREaXNw
b3NlLmgnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4SFRNTEN1c3RvbUVsZW1lbnQuY3Bw
JywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50LmgnLAogICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmNwcCcsCiAgICAgICAg
ICAgICAnYmluZGluZ3MvdjgvVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaCcsCiAgICAgICAgICAgICAn
YmluZGluZ3MvdjgvVjhJbml0aWFsaXplci5jcHAnLApAQCAtMTMyNSw2ICsxMzMyLDcgQEAKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDb25zb2xlQ3VzdG9tLmNwcCcsCiAgICAg
ICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q29vcmRpbmF0ZXNDdXN0b20uY3BwJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDcnlwdG9DdXN0b20uY3BwJywKKyAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21FbGVtZW50Q29uc3RydWN0b3JDdXN0
b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21FdmVudEN1
c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFN0
YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0
b20vVjhDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwJywKQEAgLTI3NTEsNiArMjc1OSwxMCBAQAog
ICAgICAgICAgICAgJ2RvbS9Db250ZXh0RmVhdHVyZXMuY3BwJywKICAgICAgICAgICAgICdkb20v
Q29udGV4dEZlYXR1cmVzLmgnLAogICAgICAgICAgICAgJ2RvbS9Dcm9zc1RocmVhZFRhc2suaCcs
CisgICAgICAgICAgICAnZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAnLAorICAgICAg
ICAgICAgJ2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaCcsCisgICAgICAgICAgICAnZG9t
L0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5jcHAnLAorICAgICAgICAgICAgJ2RvbS9DdXN0b21FbGVt
ZW50UmVnaXN0cnkuaCcsCiAgICAgICAgICAgICAnZG9tL0N1c3RvbUV2ZW50LmNwcCcsCiAgICAg
ICAgICAgICAnZG9tL0N1c3RvbUV2ZW50LmgnLAogICAgICAgICAgICAgJ2RvbS9ET01BbGxJbk9u
ZS5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50
aW1lRW5hYmxlZEZlYXR1cmVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMv
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHAKaW5kZXggODIwZjVhNmFmOWViNzQyMzc4MTk3OTZk
YjI4MDVkNWEyZTZhNzkzYS4uNzRmODUyODJjOGViMzQ5ZWNmZTg4ZTAwNjg4YmZjZDdmYjAzOTEz
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5h
YmxlZEZlYXR1cmVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1
bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwCkBAIC0xODksNiArMTg5LDEwIEBAIGJvb2wgUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6aXNTaGFkb3dET01FbmFibGVkID0gZmFsc2U7CiBib29sIFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OmlzQXV0aG9yU2hhZG93RE9NRm9yQW55RWxlbWVudEVuYWJsZWQg
PSBmYWxzZTsKICNlbmRpZgogCisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKK2Jvb2wgUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6aXNDdXN0b21ET01FbGVtZW50c0VuYWJsZWQgPSBmYWxzZTsK
KyNlbmRpZgorCiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKIGJvb2wgUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6aXNTdHlsZVNjb3BlZEVuYWJsZWQgPSBmYWxzZTsKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVz
LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVy
ZXMuaAppbmRleCAyMTUzMmU5Y2VlYWI3M2VmNzA4ZTU2NWJlY2FmYTg0MDUwODViNWUwLi43NGM4
MjQyMzFhNTZlNmFmZjdlN2QzMzg5MGMwZGM2ZGYzNzNkOGUzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaApA
QCAtMjEwLDYgKzIxMCwxMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0QXV0aG9yU2hh
ZG93RE9NRm9yQW55RWxlbWVudEVuYWJsZWQoYm9vbCBpc0VuYWJsZWQpIHsgaXNBdXRob3JTaGFk
b3dET01Gb3JBbnlFbGVtZW50RW5hYmxlZCA9IGlzRW5hYmxlZDsgfQogI2VuZGlmCiAKKyNpZiBF
TkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorICAgIHN0YXRpYyBib29sIGN1c3RvbURPTUVsZW1lbnRz
RW5hYmxlZCgpIHsgcmV0dXJuIGlzQ3VzdG9tRE9NRWxlbWVudHNFbmFibGVkOyB9CisgICAgc3Rh
dGljIHZvaWQgc2V0Q3VzdG9tRE9NRWxlbWVudHMoYm9vbCBpc0VuYWJsZWQpIHsgaXNDdXN0b21E
T01FbGVtZW50c0VuYWJsZWQgPSBpc0VuYWJsZWQ7IH0KKyNlbmRpZgorCiAjaWYgRU5BQkxFKFNU
WUxFX1NDT1BFRCkKICAgICBzdGF0aWMgYm9vbCBzdHlsZVNjb3BlZEVuYWJsZWQoKSB7IHJldHVy
biBpc1N0eWxlU2NvcGVkRW5hYmxlZDsgfQogICAgIHN0YXRpYyB2b2lkIHNldFN0eWxlU2NvcGVk
RW5hYmxlZChib29sIGlzRW5hYmxlZCkgeyBpc1N0eWxlU2NvcGVkRW5hYmxlZCA9IGlzRW5hYmxl
ZDsgfQpAQCAtMzQxLDYgKzM0NiwxMCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIGlzQXV0
aG9yU2hhZG93RE9NRm9yQW55RWxlbWVudEVuYWJsZWQ7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShD
VVNUT01fRUxFTUVOVFMpCisgICAgc3RhdGljIGJvb2wgaXNDdXN0b21ET01FbGVtZW50c0VuYWJs
ZWQ7CisjZW5kaWYKKwogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCiAgICAgc3RhdGljIGJvb2wg
aXNTdHlsZVNjb3BlZEVuYWJsZWQ7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KaW5kZXggNTI0ZTIyOWQ1NTRmODUzZDYw
YTUzY2IwNmJmMTcyNzA2MDFhNGQwOC4uZDVjZTgwNzE5MzY5MjgyYTE1ODc0ZGUyMTRjODQ3OGI3
ZWM3NWYxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9yVjgucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9yVjgucG0KQEAgLTM1MiwxMyArMzUyLDIwIEBAIEVORAogICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiZmFsc2U7XG4iKTsKICAgICB9CiAKKyAgICBteSAkZnJvbUZ1bmN0aW9u
T3BlbmluZyA9ICIiOworICAgIG15ICRmcm9tRnVuY3Rpb25DbG9zaW5nID0gIiI7CisgICAgaWYg
KCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJWOFdyYXBBc0Z1bmN0aW9uIn0pIHsK
KyAgICAgICAgJGZyb21GdW5jdGlvbk9wZW5pbmcgPSAiVjhET01XcmFwcGVyOjpmcm9tRnVuY3Rp
b24oIjsKKyAgICAgICAgJGZyb21GdW5jdGlvbkNsb3NpbmcgPSAiKSI7CisgICAgfQorCiAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgPDxFTkQpOwogICAgIHN0YXRpYyBib29sIEhhc0luc3RhbmNl
KHY4OjpIYW5kbGU8djg6OlZhbHVlPik7CiAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiBHZXRSYXdUZW1wbGF0ZSh2ODo6SXNvbGF0ZSogPSAwKTsKICAgICBz
dGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdldFRlbXBsYXRlKHY4
OjpJc29sYXRlKiA9IDApOwogICAgIHN0YXRpYyAke25hdGl2ZVR5cGV9KiB0b05hdGl2ZSh2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkKICAgICB7Ci0gICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PCR7bmF0aXZlVHlwZX0qPihvYmplY3QtPkdldEFsaWduZWRQb2ludGVyRnJvbUlu
dGVybmFsRmllbGQodjhET01XcmFwcGVyT2JqZWN0SW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8JHtuYXRpdmVUeXBlfSo+KCR7ZnJvbUZ1bmN0aW9uT3BlbmluZ31vYmpl
Y3Qke2Zyb21GdW5jdGlvbkNsb3Npbmd9LT5HZXRBbGlnbmVkUG9pbnRlckZyb21JbnRlcm5hbEZp
ZWxkKHY4RE9NV3JhcHBlck9iamVjdEluZGV4KSk7CiAgICAgfQogICAgIHN0YXRpYyB2b2lkIGRl
cmVmT2JqZWN0KHZvaWQqKTsKICAgICBzdGF0aWMgV3JhcHBlclR5cGVJbmZvIGluZm87CkBAIC01
NDMsNiArNTUwLDkgQEAgRU5ECiAgICAgfSBlbHNlIHsKIAogICAgICAgICBteSAkY3JlYXRlV3Jh
cHBlckNhbGwgPSAkY3VzdG9tV3JhcCA/ICIke3Y4SW50ZXJmYWNlTmFtZX06OndyYXAiIDogIiR7
djhJbnRlcmZhY2VOYW1lfTo6Y3JlYXRlV3JhcHBlciI7CisgICAgICAgIG15ICRyZXR1cm5pbmdX
cmFwcGVyID0gJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlY4V3JhcEFzRnVuY3Rp
b24ifSA/ICJWOERPTVdyYXBwZXI6OnRvRnVuY3Rpb24od3JhcHBlcikiIDogIndyYXBwZXIiOwor
ICAgICAgICBteSAkcmV0dXJuaW5nQ3JlYXRlZFdyYXBwZXJPcGVuaW5nID0gJGludGVyZmFjZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlY4V3JhcEFzRnVuY3Rpb24ifSA/ICJWOERPTVdyYXBwZXI6
OnRvRnVuY3Rpb24oIiA6ICIiOworICAgICAgICBteSAkcmV0dXJuaW5nQ3JlYXRlZFdyYXBwZXJD
bG9zaW5nID0gJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlY4V3JhcEFzRnVuY3Rp
b24ifSA/ICIsIGltcGwtPnByb3RvdHlwZSgpLnY4VmFsdWUoKSwgaW1wbC0+bmFtZSgpLCBpc29s
YXRlKSIgOiAiIjsKIAogICAgICAgICBpZiAoJGN1c3RvbVdyYXApIHsKICAgICAgICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKQEAgLTU1Niw3ICs1NjYsNyBAQCBpbmxpbmUgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKCR7bmF0aXZlVHlwZX0qIGltcGwsIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gYwogewogICAgIEFTU0VSVChpbXBsKTsKICAgICBBU1NFUlQoRE9NRGF0YVN0
b3JlOjpnZXRXcmFwcGVyKGltcGwsIGlzb2xhdGUpLklzRW1wdHkoKSk7Ci0gICAgcmV0dXJuICRj
cmVhdGVXcmFwcGVyQ2FsbChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworICAgIHJl
dHVybiAke3JldHVybmluZ0NyZWF0ZWRXcmFwcGVyT3BlbmluZ30kY3JlYXRlV3JhcHBlckNhbGwo
aW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKSR7cmV0dXJuaW5nQ3JlYXRlZFdyYXBwZXJD
bG9zaW5nfTsKIH0KIEVORAogICAgICAgICB9CkBAIC01NjksNyArNTc5LDcgQEAgaW5saW5lIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KCR7bmF0aXZlVHlwZX0qIGltcGwsIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gY3IKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhpc29sYXRlKTsK
ICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IERPTURhdGFTdG9yZTo6Z2V0V3Jh
cHBlcihpbXBsLCBpc29sYXRlKTsKICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gd3JhcHBlcjsKKyAgICAgICAgcmV0dXJuICRyZXR1cm5pbmdXcmFwcGVyOwogICAg
IHJldHVybiB3cmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0CmluZGV4
IGM2MzY0NGZiZTk2NTI5ZGY3OGEyMzgzMGE1NmI2NDFhMmRiZWRkMDcuLjE4NjExMTgxNTA5ZWMz
YjVjYzc0YzBhOWYzMDhiNmIwNTk4Y2EzNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dApAQCAtMTI5LDMgKzEyOSw0IEBAIFY4TWVh
c3VyZUFzPSoKIFY4UmVhZE9ubHkKIFY4U2tpcFZUYWJsZVZhbGlkYXRpb24KIFY4VW5mb3JnZWFi
bGUKK1Y4V3JhcEFzRnVuY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYmFlNThhNjU4YWExOWY3YjM1
NWQyYjhmMWMxMDUwZGQ3MjJlZTMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvQ3VzdG9tRWxlbWVudEhlbHBlcnMuY3BwCkBAIC0wLDAgKzEsNTkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudEhlbHBlcnMuaCIKKworI2lu
Y2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiVjhET01XaW5kb3dTaGVsbC5oIgorI2luY2x1ZGUg
IlY4SFRNTFNwYW5FbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIEVOQUJM
RShDVVNUT01fRUxFTUVOVFMpCisKK1NjcmlwdFZhbHVlIEN1c3RvbUVsZW1lbnRIZWxwZXJzOjpk
ZWZhdWx0UHJvdG90eXBlT2YoRnJhbWUqIGZyYW1lKQoreworICAgIGlmICghZnJhbWUpCisgICAg
ICAgIHJldHVybiBTY3JpcHRWYWx1ZSgpOworICAgIHJldHVybiBTY3JpcHRWYWx1ZShmcmFtZS0+
c2NyaXB0KCktPndpbmRvd1NoZWxsKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Y3VzdG9tRWxl
bWVudERlZmF1bHRQcm90b3R5cGUoKSk7Cit9OworCitib29sIEN1c3RvbUVsZW1lbnRIZWxwZXJz
Ojppc0N1c3RvbUVsZW1lbnRzQWxsb3dlZChGcmFtZSogZnJhbWUpCit7CisgICAgaWYgKCFmcmFt
ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtYWluV29ybGRTY3JpcHRTdGF0
ZShmcmFtZSkgPT0gU2NyaXB0U3RhdGU6OmN1cnJlbnQoKTsKK30KKworCisjZW5kaWYgLy8gRU5B
QkxFKENVU1RPTV9FTEVNRU5UUykKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvQ3VzdG9tRWxlbWVudEhlbHBlcnMuaCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZjI5OWNjMzJiNGM3ZjUyYjE3NWY4OTY3YzM1NjA5MzY2ZWY1MzAwOQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmgK
QEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgQ3VzdG9tRWxlbWVudEhlbHBlcnNfaAorI2RlZmluZSBD
dXN0b21FbGVtZW50SGVscGVyc19oCisKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCitjbGFzcyBG
cmFtZTsKKworY2xhc3MgQ3VzdG9tRWxlbWVudEhlbHBlcnMgeworcHVibGljOgorICAgIHN0YXRp
YyBib29sIGlzQ3VzdG9tRWxlbWVudHNBbGxvd2VkKEZyYW1lKik7CisgICAgc3RhdGljIFNjcmlw
dFZhbHVlIGRlZmF1bHRQcm90b3R5cGVPZihGcmFtZSopOworfTsKKworI2VuZGlmIC8vIEVOQUJM
RShDVVNUT01fRUxFTUVOVFMpCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEN1c3RvbUVsZW1lbnRIZWxwZXJzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4QWRhcHRvckZ1bmN0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZTc0NjExM2UwYjI4OTUwNTI1YTM5
Nzc2NTE3MmU3MzMzZTU5MGZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhBZGFwdG9yRnVuY3Rpb24uY3BwCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiVjhBZGFwdG9yRnVuY3Rpb24uaCIKKworI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2ODo6UGVyc2lzdGVudDx2ODo6
RnVuY3Rpb25UZW1wbGF0ZT4gVjhBZGFwdG9yRnVuY3Rpb246OmdldFRlbXBsYXRlKCkKK3sKKyAg
ICAvLyBGSVhNRTogU2hvdWxkIGJlIHN0b3JlZCBpbiBwZXItaXNvbGF0ZSBkYXRhIHN0b3JlCisg
ICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3KHY4OjpGdW5jdGlvblRlbXBs
YXRlOjpOZXcoKSk7CisgICAgcmV0dXJuIGNvbmZpZ3VyZVRlbXBsYXRlKHRlbXBsKTsKK30KKwor
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4QWRhcHRvckZ1bmN0aW9uOjpj
b25maWd1cmVUZW1wbGF0ZSh2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZnVu
Y3Rpb25UZW1wbGF0ZSkKK3sKKyAgICBmdW5jdGlvblRlbXBsYXRlLT5TZXRDYWxsSGFuZGxlcigm
VjhBZGFwdG9yRnVuY3Rpb246Omludm9jYXRpb25DYWxsYmFjayk7CisgICAgcmV0dXJuIGZ1bmN0
aW9uVGVtcGxhdGU7Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEFkYXB0b3JGdW5jdGlv
bjo6aW52b2NhdGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVkID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6
Q2FzdChhcmdzLkNhbGxlZSgpLT5HZXRIaWRkZW5WYWx1ZShWOEhpZGRlblByb3BlcnR5TmFtZTo6
ZGV0YWlsKCkpKTsKKyAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgZmFzdGVyIGlmIHdlIGNhbiBh
Y2Nlc3MgdW5kZXJseWluZyBuYXRpdmUgY2FsbGJhY2sgZGlyZWN0bHkuCisgICAgLy8gV2Ugd29u
J3QgbmVlZCB0aGlzIG9uY2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwODEzOCBpcyBhZGRyZXNzZWQuCisgICAgVmVjdG9yPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+
IGFyZ0FycmF5KGFyZ3MuTGVuZ3RoKCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5M
ZW5ndGgoKTsgKytpKQorICAgICAgICBhcmdBcnJheS5hcHBlbmQoYXJnc1tpXSk7CisgICAgaWYg
KGFyZ3MuSXNDb25zdHJ1Y3RDYWxsKCkpCisgICAgICAgIHJldHVybiB3cmFwcGVkLT5DYWxsQXND
b25zdHJ1Y3RvcihhcmdBcnJheS5zaXplKCksIGFyZ0FycmF5LmRhdGEoKSk7CisgICAgcmV0dXJu
IHdyYXBwZWQtPkNhbGxBc0Z1bmN0aW9uKGFyZ3MuVGhpcygpLCBhcmdBcnJheS5zaXplKCksIGFy
Z0FycmF5LmRhdGEoKSk7Cit9CisKK3Y4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBWOEFkYXB0b3JG
dW5jdGlvbjo6d3JhcCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCwgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHByb3RvdHlwZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCB2ODo6SXNvbGF0
ZSogaXNvbGF0ZSkKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gYWRhcHRvciA9IHY4
OjpIYW5kbGU8djg6OkZ1bmN0aW9uPjo6Q2FzdChnZXRUZW1wbGF0ZSgpLT5HZXRGdW5jdGlvbigp
KTsKKyAgICBpZiAoIXByb3RvdHlwZS5Jc0VtcHR5KCkgJiYgcHJvdG90eXBlLT5Jc09iamVjdCgp
KQorICAgICAgICBhZGFwdG9yLT5TZXQodjg6OlN0cmluZzo6TmV3U3ltYm9sKCJwcm90b3R5cGUi
KSwgcHJvdG90eXBlLCB2ODo6UmVhZE9ubHkpOworICAgIGFkYXB0b3ItPlNldE5hbWUodjhTdHJp
bmcobmFtZS5zdHJpbmcoKSwgaXNvbGF0ZSkpOworICAgIGFkYXB0b3ItPlNldEhpZGRlblZhbHVl
KFY4SGlkZGVuUHJvcGVydHlOYW1lOjpkZXRhaWwoKSwgb2JqZWN0KTsKKyAgICBvYmplY3QtPlNl
dEhpZGRlblZhbHVlKFY4SGlkZGVuUHJvcGVydHlOYW1lOjpkZXRhaWwoKSwgYWRhcHRvcik7Cisg
ICAgcmV0dXJuIGFkYXB0b3I7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY3
MGQzMmJkZGY0NmYzNDBhN2VkYmVkZDFmMmU2N2E3ZmMwNjUyYzEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5oCkBAIC0wLDAg
KzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFY4QWRhcHRvckZ1bmN0aW9uX2gKKyNkZWZpbmUgVjhBZGFwdG9yRnVu
Y3Rpb25faAorCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhIaWRkZW5Qcm9w
ZXJ0eU5hbWUuaCIKKyNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8KKy8vIEZJWE1FKGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgxMzgpOgorLy8gVjhBZGFwdG9yRnVuY3Rpb24gY2xh
c3MgYW5kIFY4V3JhcEFzRnVuY3Rpb24gSURMIGF0dHJpYnV0ZSBhcmUgbmVlZGVkIGZvciB0d28g
cmVhc29uczoKKy8vIC0gMSkgVjggZG9lc24ndCBhbGxvdyBleHBhbmRpbmcgdGhlIGludGVybmFs
IGZpZWxkIG9mIGZ1bmN0aW9uIG9iamVjdHMuIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3Avdjgv
aXNzdWVzL2RldGFpbD9pZD04MzcKKy8vICAgICAgV2ViS2l0IG5lZWQgaXQgdG8gYXNzb2NpYXRl
IGVhY2ggd3JhcHBlciB0byBpdHMgYmFja2luZyBDKysgb2JqZWN0LgorLy8gLSAyKSBCaW5kaW5n
IGNvZGViYXNlIGFzc3VtZXMgZXZlcnkgd3JhcHBlciBvYmplY3QgaXMgY3JlYXRlZCB0aHJvdWdo
IE9iamVjdFRlbXBsYXRlOjpOZXdJbnN0YW5jZSgpLCBub3QgRnVuY3Rpb25UZW1wbGF0ZTo6R2V0
RnVuY3Rpb24oKS4KKy8vIE9uY2UgMSkgaXMgYWRkcmVzc3NlZCwgd2UgY291bGQgYXR0YWNrIDIp
IHdpdGggaXQuIAorLy8KK2NsYXNzIFY4QWRhcHRvckZ1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB1bndyYXAodjg6OkhhbmRsZTx2ODo6RnVuY3Rp
b24+KTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IHdyYXAodjg6OkhhbmRs
ZTx2ODo6T2JqZWN0Piwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHByb3RvdHlwZSwgY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lLCB2ODo6SXNvbGF0ZSopOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpGdW5jdGlvbj4gZ2V0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4pOworCisgICAgc3RhdGljIHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBnZXRUZW1wbGF0ZSgpOworICAgIHN0
YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gY29uZmlndXJlVGVtcGxh
dGUodjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+KTsKKyAgICBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IGludm9jYXRpb25DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRz
Jik7Cit9OworCitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOEFkYXB0b3JGdW5jdGlv
bjo6dW53cmFwKHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBmdW5jdGlvbikKK3sKKyAgICB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlZCA9IGZ1bmN0aW9uLT5HZXRIaWRkZW5WYWx1ZShWOEhp
ZGRlblByb3BlcnR5TmFtZTo6ZGV0YWlsKCkpOworICAgIEFTU0VSVCghd3JhcHBlZC5Jc0VtcHR5
KCkpOworICAgIEFTU0VSVCh3cmFwcGVkLT5Jc09iamVjdCgpKTsKKyAgICByZXR1cm4gdjg6Okhh
bmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh3cmFwcGVkKTsKK30KKworaW5saW5lIHY4OjpIYW5kbGU8
djg6OkZ1bmN0aW9uPiBWOEFkYXB0b3JGdW5jdGlvbjo6Z2V0KHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gb2JqZWN0KQoreworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhZGFwdG9yRnVuY3Rpb24g
PSBvYmplY3QtPkdldEhpZGRlblZhbHVlKFY4SGlkZGVuUHJvcGVydHlOYW1lOjpkZXRhaWwoKSk7
CisgICAgQVNTRVJUKCFhZGFwdG9yRnVuY3Rpb24uSXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoYWRh
cHRvckZ1bmN0aW9uLT5Jc0Z1bmN0aW9uKCkpOworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpG
dW5jdGlvbj46OkNhc3QoYWRhcHRvckZ1bmN0aW9uKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gVjhBZGFwdG9yRnVuY3Rpb25faApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcAppbmRleCBhOTI2NTQ2NzQ4YWMxZWE5
NTJhYzkzOGQ4NDc0NWM4N2E4Y2JlYmMwLi5lZDkzOGQzODlmNDhmMTQ0OGZmM2Y3YjFkNzZiOTEz
YTlkOGYwYTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdp
bmRvd1NoZWxsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRv
d1NoZWxsLmNwcApAQCAtMzM2LDYgKzMzNiw4IEBAIGJvb2wgVjhET01XaW5kb3dTaGVsbDo6aW5z
dGFsbERPTVdpbmRvdygpCiAgICAgVjhET01XcmFwcGVyOjpzZXROYXRpdmVJbmZvKGlubmVyR2xv
YmFsT2JqZWN0LCAmVjhET01XaW5kb3c6OmluZm8sIHdpbmRvdyk7CiAgICAgaW5uZXJHbG9iYWxP
YmplY3QtPlNldFByb3RvdHlwZSh3aW5kb3dXcmFwcGVyKTsKICAgICBWOERPTVdyYXBwZXI6OmFz
c29jaWF0ZU9iamVjdFdpdGhXcmFwcGVyKFBhc3NSZWZQdHI8RE9NV2luZG93Pih3aW5kb3cpLCAm
VjhET01XaW5kb3c6OmluZm8sIHdpbmRvd1dyYXBwZXIsIG1faXNvbGF0ZSk7CisgICAgdXBkYXRl
Q3VzdG9tRWxlbWVudERlZmF1bHRQcm90b3R5cGUoKTsKKwogICAgIHJldHVybiB0cnVlOwogfQog
CkBAIC00ODMsNCArNDg1LDEyIEBAIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6dXBkYXRlU2VjdXJp
dHlPcmlnaW4oKQogICAgIHNldFNlY3VyaXR5VG9rZW4oKTsKIH0KIAorI2lmIEVOQUJMRShDVVNU
T01fRUxFTUVOVFMpCit2b2lkIFY4RE9NV2luZG93U2hlbGw6OnVwZGF0ZUN1c3RvbUVsZW1lbnRE
ZWZhdWx0UHJvdG90eXBlKCkKK3sKKyAgICBTY29wZWRQZXJzaXN0ZW50PHY4OjpGdW5jdGlvbj4g
c3BhbkNvbnN0cnVjdG9yKHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPjo6Q2FzdChtX2dsb2JhbC0+
R2V0KHY4U3RyaW5nKCJIVE1MU3BhbkVsZW1lbnQiLCBtX2lzb2xhdGUpKSkpOworICAgIG1fY3Vz
dG9tRWxlbWVudERlZmF1bHRQcm90b3R5cGUuc2V0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNh
c3Qoc3BhbkNvbnN0cnVjdG9yLT5HZXQodjhTdHJpbmcoInByb3RvdHlwZSIsIG1faXNvbGF0ZSkp
KSk7Cit9CisjZW5kaWYKKwogfSAvLyBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOERPTVdpbmRvd1NoZWxsLmgKaW5kZXggN2Q1YmFlNDA0Nzk3MGI5NTU4ZWQ4YzQwMzg3
Mzc3MTk5NzdmYmM0ZS4uMWY5MTVkOTk2NjMxZDVhMzE4NTc2NDc1NWNkMDVhNWNmMWYxYTA5YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuaApAQCAt
MTA4LDYgKzEwOCwxNiBAQCBwcml2YXRlOgogICAgIFNjb3BlZFBlcnNpc3RlbnQ8djg6OkNvbnRl
eHQ+IG1fY29udGV4dDsKICAgICBTY29wZWRQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IG1fZ2xvYmFs
OwogICAgIFNjb3BlZFBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gbV9kb2N1bWVudDsKKworCisjaWYg
RU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKyAgICB2b2lkIHVwZGF0ZUN1c3RvbUVsZW1lbnREZWZh
dWx0UHJvdG90eXBlKCk7CisgICAgU2NvcGVkUGVyc2lzdGVudDx2ODo6T2JqZWN0PiBtX2N1c3Rv
bUVsZW1lbnREZWZhdWx0UHJvdG90eXBlOworcHVibGljOgorICAgIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gY3VzdG9tRWxlbWVudERlZmF1bHRQcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBtX2N1
c3RvbUVsZW1lbnREZWZhdWx0UHJvdG90eXBlLmdldCgpOyB9CisjZWxzZQorICAgIHZvaWQgdXBk
YXRlQ3VzdG9tRWxlbWVudERlZmF1bHRQcm90b3R5cGUoKSB7IH0KKyNlbmRpZgogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhET01XcmFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3Jh
cHBlci5jcHAKaW5kZXggZDQ3ZmZkM2ZjYTEzY2VlZjkwMmU0ZjkyODJhY2QxYmZmZTEzYjdlZS4u
OTY4ODRhYjRhMTMwNjM4YjYwYjM5NWU4YzIxODFiYTk2NDQ3Mjk4MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCiAKKyNpbmNsdWRlICJW
OEFkYXB0b3JGdW5jdGlvbi5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4
RE9NV2luZG93LmgiCiAjaW5jbHVkZSAiVjhIVE1MQ29sbGVjdGlvbi5oIgpAQCAtMTQzLDQgKzE0
NCwyMSBAQCBib29sIFY4RE9NV3JhcHBlcjo6aXNXcmFwcGVyT2ZUeXBlKHY4OjpIYW5kbGU8djg6
OlZhbHVlPiB2YWx1ZSwgV3JhcHBlclR5cGVJbmZvKgogICAgIHJldHVybiB0eXBlSW5mbyA9PSB0
eXBlOwogfQogCit2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gVjhET01XcmFwcGVyOjp0b0Z1bmN0
aW9uKHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvYmplY3QpCit7CisgICAgcmV0dXJuIFY4QWRhcHRv
ckZ1bmN0aW9uOjpnZXQodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChvYmplY3QpKTsKK30K
Kwordjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IFY4RE9NV3JhcHBlcjo6dG9GdW5jdGlvbih2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHByb3RvdHlw
ZSwgQXRvbWljU3RyaW5nIG5hbWUsIHY4OjpJc29sYXRlKiBpc29sYXRlKQoreworICAgIHJldHVy
biBWOEFkYXB0b3JGdW5jdGlvbjo6d3JhcChvYmplY3QsIHByb3RvdHlwZSwgbmFtZSwgaXNvbGF0
ZSk7Cit9CisKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhET01XcmFwcGVyOjpmcm9tRnVuY3Rp
b24odjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QpCit7CisgICAgaWYgKCFvYmplY3QtPklz
RnVuY3Rpb24oKSkKKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICByZXR1cm4gVjhBZGFwdG9y
RnVuY3Rpb246OnVud3JhcCh2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj46OkNhc3Qob2JqZWN0KSk7
Cit9CisKIH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4RE9NV3JhcHBlci5oCmluZGV4IDc3MGY5YjZhNGViZGQ5ZmZkMmQ3YWJiYTNmYWEzNmNlMjJk
MWMzNzAuLmNkM2UyOWRhMjFhOWE4OWZiNzBjNzUwYmE3ZjgyNjNiZWQ3M2I5YWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oCkBAIC02NSw2ICs2NSwxMCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyBib29sIGlzRE9NV3JhcHBlcih2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4pOwogICAgICAgICBzdGF0aWMgYm9vbCBpc1dyYXBwZXJPZlR5cGUo
djg6OkhhbmRsZTx2ODo6VmFsdWU+LCBXcmFwcGVyVHlwZUluZm8qKTsKIAorICAgICAgICBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IHRvRnVuY3Rpb24odjg6OkhhbmRsZTx2ODo6VmFs
dWU+KTsKKyAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiB0b0Z1bmN0aW9u
KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4sIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBwcm90b3R5cGUs
IEF0b21pY1N0cmluZyBuYW1lLCB2ODo6SXNvbGF0ZSopOworICAgICAgICBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBmcm9tRnVuY3Rpb24odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pik7CisK
ICAgICAgICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGZ1bmN0aW9uIGluIFY4RE9NV3JhcHBlcj8K
ICAgICAgICAgc3RhdGljIHZvaWQgc2V0TmFtZWRIaWRkZW5SZWZlcmVuY2Uodjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBwYXJlbnQsIGNvbnN0IGNoYXIqIG5hbWUsIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBjaGlsZCk7CiAgICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4SFRNTEN1c3RvbUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhI
VE1MQ3VzdG9tRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmU3YTgyMGVhMWQ1MWRiMjdlNWM2NWRi
MWE5OGU3OTMwZDMzYzM2MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4SFRNTEN1c3RvbUVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiVjhIVE1MQ3VzdG9tRWxlbWVudC5oIgorCisjaW5jbHVkZSAi
Q3VzdG9tRWxlbWVudEhlbHBlcnMuaCIKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50UmVnaXN0cnku
aCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiVjhIVE1MU3BhbkVsZW1lbnQuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKworLy8gRklYTUU6IEVh
Y2ggY3VzdG9tIGVsZW1lbnRzIHNob3VsZCBoYXZlIGl0cyBvd24gR2V0VGVtcGxhdGUgbWV0aG9k
IHNvIHRoYXQgaXQgY2FuIGRlcml2ZWQgZnJvbSBkaWZmZXJlbmN0IHN1cGVyIGVsZW1lbnQuCitX
cmFwcGVyVHlwZUluZm8gVjhIVE1MQ3VzdG9tRWxlbWVudDo6aW5mbyA9IHsgJlY4SFRNTFNwYW5F
bGVtZW50OjpHZXRUZW1wbGF0ZSwgVjhIVE1MRWxlbWVudDo6ZGVyZWZPYmplY3QsIDAsIDAsIDAs
IDAsICZWOEhUTUxTcGFuRWxlbWVudDo6aW5mbywgV3JhcHBlclR5cGVPYmplY3RQcm90b3R5cGUg
fTsKKwordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOEhUTUxDdXN0b21FbGVtZW50OjpjcmVhdGVX
cmFwcGVyKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3sKKyAgICBDdXN0b21F
bGVtZW50Q29uc3RydWN0b3IqIGN0b3IgPSBDdXN0b21FbGVtZW50UmVnaXN0cnk6OmNvbnN0cnVj
dG9yT2YoaW1wbC5nZXQoKSk7CisgICAgaWYgKCFjdG9yKQorICAgICAgICByZXR1cm4gdjg6Okhh
bmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChXZWJDb3JlOjp0b1Y4KHRvSFRNTFVua25vd25FbGVtZW50
KGltcGwuZ2V0KCkpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpKTsKKworICAgIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6Y3JlYXRlV3JhcHBlcihjcmVh
dGlvbkNvbnRleHQsICZpbmZvLCBpbXBsLmdldCgpKTsKKyAgICBpZiAod3JhcHBlci5Jc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiB3cmFwcGVyOworICAgIFY4RE9NV3JhcHBlcjo6YXNzb2NpYXRl
T2JqZWN0V2l0aFdyYXBwZXIoaW1wbCwgJmluZm8sIHdyYXBwZXIsIGlzb2xhdGUpOworCisgICAg
Ly8gVGhlIGNvbnN0cnVjdG9yIGFuZCByZWdpc3RlcmVkIGxpZmVjeWNsZSBjYWxsYmFja3Mgc2hv
dWxkIGJlIHZpc2libGUgb25seSBmcm9tIG1haW4gd29ybGQuCisgICAgaWYgKEN1c3RvbUVsZW1l
bnRIZWxwZXJzOjppc0N1c3RvbUVsZW1lbnRzQWxsb3dlZChpbXBsLT5kb2N1bWVudCgpLT5mcmFt
ZSgpKSkgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgYmUgbmVlZGVkIG9uY2Ug
ZWFjaCBjdXN0b20gZWxlbWVudCBoYXMgaXRzIG93biBGdW5jdGlvblRlbXBsYXRlCisgICAgICAg
IHdyYXBwZXItPlNldCh2ODo6U3RyaW5nOjpOZXdTeW1ib2woImNvbnN0cnVjdG9yIiksIFdlYkNv
cmU6OnRvVjgoY3RvciwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKSk7CisgICAgfQorCisgICAg
cmV0dXJuIHdyYXBwZXI7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOEhUTUxDdXN0b21FbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjQ0NDU3MzkyNWU4OTVhNDcwZjM2
NzBmYWY1ZmY0ZGE1YTZiOTE3OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4SFRNTEN1c3RvbUVsZW1lbnQuaApAQCAtMCwwICsxLDc4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBW
OEhUTUxDdXN0b21FbGVtZW50X2gKKyNkZWZpbmUgVjhIVE1MQ3VzdG9tRWxlbWVudF9oCisKKyNp
bmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKKyNpbmNsdWRl
ICJWOEhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhIVE1MVW5rbm93bkVsZW1lbnQuaCIKKyNp
bmNsdWRlIDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgSFRNTEVsZW1lbnQ7CisKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1F
TlRTKQorCitjbGFzcyBWOEhUTUxDdXN0b21FbGVtZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
V3JhcHBlclR5cGVJbmZvIGluZm87CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
dG9WOChIVE1MRWxlbWVudCosIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0
ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSogPSAwKTsKKyAgICBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGVXcmFwcGVyKFBhc3NSZWZQdHI8SFRNTEVs
ZW1lbnQ+LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+LCB2ODo6SXNvbGF0ZSopOworfTsKKworaW5s
aW5lIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhIVE1MQ3VzdG9tRWxlbWVudDo6dG9WOChIVE1M
RWxlbWVudCogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4
OjpJc29sYXRlKiBpc29sYXRlKQoreworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBl
ciA9IERPTURhdGFTdG9yZTo6Z2V0V3JhcHBlcihpbXBsLCBpc29sYXRlKTsKKyAgICBpZiAoIXdy
YXBwZXIuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAgICByZXR1cm4gVjhI
VE1MQ3VzdG9tRWxlbWVudDo6Y3JlYXRlV3JhcHBlcihpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlz
b2xhdGUpOworfQorCisjZWxzZSAvLyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCitjbGFzcyBW
OEhUTUxDdXN0b21FbGVtZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiB3cmFwKEhUTUxFbGVtZW50Kiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlv
bkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiA9IDApOwor
fTsKKworaW5saW5lIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gSFRNTEN1c3RvbUVsZW1lbnQ6OnRv
VjgoSFRNTEVsZW1lbnQqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250
ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3sKKyAgICByZXR1cm4gdG9WOCh0b0hUTUxVbmtu
b3duRWxlbWVudChpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKK30KKworI2VuZGlm
IC8vIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFY4SFRNTEN1c3RvbUVsZW1lbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yQ3VzdG9tLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUVsZW1lbnRDb25z
dHJ1Y3RvckN1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzA2NTU2NGE5ZDgxYzJkMDE1NjJhODc3MzY3
M2U3ZGE5YWM1ZjQ2MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvckN1c3RvbS5jcHAKQEAgLTAsMCAr
MSw1NCBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisqIAorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorKiBtZXQ6CisqIAor
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisq
IGRpc3RyaWJ1dGlvbi4KKyogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKiAKKyogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlY4Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmgiCisKKyNpbmNsdWRlICJD
dXN0b21FbGVtZW50Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNs
dWRlICJWOEhUTUxDdXN0b21FbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordjg6
OkhhbmRsZTx2ODo6VmFsdWU+IFY4Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjpjYWxsQXNGdW5j
dGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgaWYgKCFhcmdz
LklzQ29uc3RydWN0Q2FsbCgpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoIkRPTSBv
YmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLiIsIGFyZ3Mu
R2V0SXNvbGF0ZSgpKTsKKyAgICBpZiAoQ29uc3RydWN0b3JNb2RlOjpjdXJyZW50KCkgPT0gQ29u
c3RydWN0b3JNb2RlOjpXcmFwRXhpc3RpbmdPYmplY3QpCisgICAgICAgIHJldHVybiBhcmdzLkhv
bGRlcigpOworCisgICAgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKiBpbXBsID0gdG9OYXRpdmUo
YXJncy5Ib2xkZXIoKSk7CisgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50ID0gaW1wbC0+
Y3JlYXRlRWxlbWVudCgpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIHY4VW5k
ZWZpbmVkKCk7CisgICAgcmV0dXJuIFY4SFRNTEN1c3RvbUVsZW1lbnQ6OnRvVjgoZWxlbWVudC5n
ZXQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDgwNDJhMDNkNDY1
M2U1NjgxYjEzYTg5NzI1ZjU5ZjBlNzdhNGU1OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuY3BwCkBAIC0wLDAgKzEsNzUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmgi
CisKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVu
dFJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3Ry
dWN0b3I+IEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTY3JpcHRWYWx1ZSYgcHJvdG90eXBlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3Vz
dG9tRWxlbWVudENvbnN0cnVjdG9yKGRvY3VtZW50LCB0YWdOYW1lLCBuYW1lLCBwcm90b3R5cGUp
KTsKK30KKworQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjpDdXN0b21FbGVtZW50Q29uc3RydWN0
b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFNjcmlwdFZhbHVlJiBwcm90b3R5cGUpCisgICAgOiBtX2Rv
Y3VtZW50KGRvY3VtZW50KQorICAgICwgbV90YWdOYW1lKHRhZ05hbWUpCisgICAgLCBtX25hbWUo
bmFtZSkKKyAgICAsIG1fcHJvdG90eXBlKHByb3RvdHlwZSkKK3sKK30KKworQ3VzdG9tRWxlbWVu
dENvbnN0cnVjdG9yOjp+Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKCkKK3sKK30KKwordm9pZCBD
dXN0b21FbGVtZW50Q29uc3RydWN0b3I6OndpbGxEZXN0cm95RG9jdW1lbnQoKQoreworICAgIG1f
ZG9jdW1lbnQgPSAwOworfQorCitQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBDdXN0b21FbGVtZW50
Q29uc3RydWN0b3I6OmNyZWF0ZUVsZW1lbnQoKSBjb25zdAoreworICAgIGlmICghbV9kb2N1bWVu
dCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIEhUTUxFbGVtZW50OjpjcmVhdGUobV90
YWdOYW1lLCBtX2RvY3VtZW50KTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9F
TEVNRU5UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50Q29u
c3RydWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3Iu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45MTM4ODlhYzUyZWViMjZmZTc2ZmU3ODA3NmE2ZTNjNTJlMmE5OGExCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1
Y3Rvci5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcl9o
CisjZGVmaW5lIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcl9oCisKKyNpZiBFTkFCTEUoQ1VTVE9N
X0VMRU1FTlRTKQorCisjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgorI2luY2x1ZGUgIlNjcmlw
dFZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
QXRvbWljU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ3VzdG9tRWxl
bWVudERlZmluaXRpb247CitjbGFzcyBEaWN0aW9uYXJ5OworY2xhc3MgRG9jdW1lbnQ7CitjbGFz
cyBIVE1MRWxlbWVudDsKKworY2xhc3MgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yIDogcHVibGlj
IFJlZkNvdW50ZWQ8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiBjcmVhdGUoRG9jdW1lbnQq
LCBjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU2NyaXB0VmFsdWUm
KTsKKworICAgIGV4cGxpY2l0IEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvcihEb2N1bWVudCosIGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTY3JpcHRWYWx1ZSYpOwor
ICAgIHZpcnR1YWwgfkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvcigpOworCisgICAgRG9jdW1lbnQq
IGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudDsgfQorICAgIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUoKSBjb25zdCB7IHJldHVybiBtX3RhZ05hbWU7IH0KKyAgICBBdG9t
aWNTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIGNvbnN0IFNjcmlw
dFZhbHVlJiBwcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBtX3Byb3RvdHlwZTsgfQorCisgICAg
UGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gY3JlYXRlRWxlbWVudCgpIGNvbnN0OworICAgIHZvaWQg
d2lsbERlc3Ryb3lEb2N1bWVudCgpOworICAgIAorcHJpdmF0ZToKKyAgICBEb2N1bWVudCogbV9k
b2N1bWVudDsKKyAgICBRdWFsaWZpZWROYW1lIG1fdGFnTmFtZTsKKyAgICBBdG9taWNTdHJpbmcg
bV9uYW1lOworICAgIFNjcmlwdFZhbHVlIG1fcHJvdG90eXBlOworfTsKKworfQorCisjZW5kaWYg
Ly8gRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKworI2VuZGlmIC8vIEN1c3RvbUVsZW1lbnRDb25z
dHJ1Y3Rvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0
b3IuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjQ3YzUzMGY4N2RlYWU2N2ZhNWZkYTFlMTM5YjA1Y2I5OGEwNzNi
MGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yLmlkbApAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworWworICAgIENvbmRp
dGlvbmFsPUNVU1RPTV9FTEVNRU5UUywKKyAgICBWOEVuYWJsZWRBdFJ1bnRpbWU9Y3VzdG9tRE9N
RWxlbWVudHMsCisgICAgVjhXcmFwQXNGdW5jdGlvbiwKKyAgICBDdXN0b21DYWxsCitdIGludGVy
ZmFjZSBDdXN0b21FbGVtZW50Q29uc3RydWN0b3IgeworfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWI1MTVlYWE3OGI0ZmY1Yjhi
NmFhZmNkNWY5N2IxN2EzYmIxNGUzZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuY3BwCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAg
IGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRSZWdpc3RyeS5oIgor
CisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiQ3VzdG9t
RWxlbWVudEhlbHBlcnMuaCIKKyNpbmNsdWRlICJEaWN0aW9uYXJ5LmgiCisjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKKworI2lmIEVOQUJMRShDVVNU
T01fRUxFTUVOVFMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ3VzdG9tRWxlbWVudFJlZ2lz
dHJ5OjpDdXN0b21FbGVtZW50UmVnaXN0cnkoRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogbV9k
b2N1bWVudChkb2N1bWVudCkKKyAgICAsIG1fZGVmYXVsdFByb3RvdHlwZShDdXN0b21FbGVtZW50
SGVscGVyczo6ZGVmYXVsdFByb3RvdHlwZU9mKGRvY3VtZW50LT5mcmFtZSgpKSkKK3sKK30KKwor
Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5Ojp+Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5KCkKK3sKKyAgICBm
b3IgKENvbnN0cnVjdG9yTWFwOjppdGVyYXRvciBpID0gbV9jb25zdHJ1Y3RvcnMuYmVnaW4oKTsg
aSAhPSBtX2NvbnN0cnVjdG9ycy5lbmQoKTsgKytpKQorICAgICAgICBpLT52YWx1ZS0+d2lsbERl
c3Ryb3lEb2N1bWVudCgpOworfQorCitDdXN0b21FbGVtZW50Q29uc3RydWN0b3IqIEN1c3RvbUVs
ZW1lbnRSZWdpc3RyeTo6Y29uc3RydWN0b3JPZihIVE1MRWxlbWVudCogZWxlbWVudCkKK3sKKyAg
ICBDdXN0b21FbGVtZW50UmVnaXN0cnkqIHNlbGYgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5yZWdp
c3RyeSgpOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHNl
bGYtPmZpbmQoZWxlbWVudC0+dGFnUU5hbWUoKSk7Cit9CisKK1Bhc3NSZWZQdHI8Q3VzdG9tRWxl
bWVudENvbnN0cnVjdG9yPiBDdXN0b21FbGVtZW50UmVnaXN0cnk6OnJlZ2lzdGVyRWxlbWVudChj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IERpY3Rpb25hcnkmIG9wdGlvbnMsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIGlmICghQ3VzdG9tRWxlbWVudEhlbHBlcnM6OmlzQ3VzdG9t
RWxlbWVudHNBbGxvd2VkKG1fZG9jdW1lbnQtPmZyYW1lKCkpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIFF1YWxpZmllZE5hbWUgbmV3TmFtZShudWxsQXRvbSwgbmFtZS5sb3dlcigpLCBIVE1M
TmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJKTsKKyAgICBpZiAoIW5ld05hbWUubG9jYWxOYW1lKCku
c3RhcnRzV2l0aCgieC0iKSkgeworICAgICAgICBlYyA9IElOVkFMSURfQ0hBUkFDVEVSX0VSUjsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgICAgICAKKyAgICBpZiAoZmluZChuZXdOYW1l
KSkgeworICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisKKyAgICBSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiBmcmVzaCA9IEN1
c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlKG1fZG9jdW1lbnQsIG5ld05hbWUsICJIVE1M
Q3VzdG9tRWxlbWVudCIsIG1fZGVmYXVsdFByb3RvdHlwZSk7CisgICAgbV9jb25zdHJ1Y3RvcnMu
YWRkKGZyZXNoLT50YWdOYW1lKCkuaW1wbCgpLCBmcmVzaCk7CisgICAgcmV0dXJuIGZyZXNoOwor
fQorCitDdXN0b21FbGVtZW50Q29uc3RydWN0b3IqIEN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6Zmlu
ZChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAoreworICAgIENvbnN0cnVjdG9yTWFw
Ojpjb25zdF9pdGVyYXRvciBmb3VuZCA9IG1fY29uc3RydWN0b3JzLmZpbmQobmFtZS5pbXBsKCkp
OworICAgIHJldHVybiAoZm91bmQgIT0gbV9jb25zdHJ1Y3RvcnMuZW5kKCkpID8gZm91bmQtPnZh
bHVlLmdldCgpIDogMDsKK30KKworUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gQ3VzdG9tRWxlbWVu
dFJlZ2lzdHJ5OjpjcmVhdGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0
Cit7CisgICAgaWYgKEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciogZm91bmQgPSBmaW5kKG5hbWUp
KQorICAgICAgICByZXR1cm4gZm91bmQtPmNyZWF0ZUVsZW1lbnQoKTsKKyAgICByZXR1cm4gMDsK
K30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZWMwZjA2YjJhZGNj
MjgwNWM0OTk1NjBkYjRjNmRmMDhlNjcxZjhjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIEN1c3RvbUVsZW1lbnRSZWdpc3RyeV9oCisjZGVmaW5lIEN1c3RvbUVsZW1lbnRS
ZWdpc3RyeV9oCisKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCisjaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKKyNpbmNsdWRlICJTY3Jp
cHRWYWx1ZS5oIgorI2luY2x1ZGUgIlN1cHBsZW1lbnRhYmxlLmgiCisjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvcjsKK2NsYXNzIERpY3Rpb25hcnk7Citj
bGFzcyBEb2N1bWVudDsKK2NsYXNzIEhUTUxFbGVtZW50OworY2xhc3MgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dDsKK2NsYXNzIFF1YWxpZmllZE5hbWU7CisKK2NsYXNzIEN1c3RvbUVsZW1lbnRSZWdp
c3RyeSA6IHB1YmxpYyBSZWZDb3VudGVkPEN1c3RvbUVsZW1lbnRSZWdpc3RyeT4geworcHVibGlj
OgorICAgIGV4cGxpY2l0IEN1c3RvbUVsZW1lbnRSZWdpc3RyeShEb2N1bWVudCopOworICAgIH5D
dXN0b21FbGVtZW50UmVnaXN0cnkoKTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEN1c3RvbUVs
ZW1lbnRDb25zdHJ1Y3Rvcj4gd2Via2l0UmVnaXN0ZXIoRG9jdW1lbnQqLCBjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDdXN0
b21FbGVtZW50Q29uc3RydWN0b3I+IHdlYmtpdFJlZ2lzdGVyKERvY3VtZW50KiwgY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lLCBjb25zdCBEaWN0aW9uYXJ5JiBvcHRpb25zLCBFeGNlcHRpb25Db2Rl
Jik7CisKKyAgICBQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gcmVnaXN0ZXJF
bGVtZW50KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgRGljdGlvbmFyeSYgb3B0aW9u
cywgRXhjZXB0aW9uQ29kZSYpOworICAgIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciogZmluZChj
b25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4g
Y3JlYXRlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7CisKKyAgICBzdGF0aWMg
Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKiBjb25zdHJ1Y3Rvck9mKEhUTUxFbGVtZW50Kik7CisK
K3ByaXZhdGU6CisgICAgdHlwZWRlZiBIYXNoTWFwPFF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5h
bWVJbXBsKiwgUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gPkNvbnN0cnVjdG9yTWFw
OworCisgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CisgICAgU2NyaXB0VmFsdWUgbV9kZWZhdWx0
UHJvdG90eXBlOworICAgIENvbnN0cnVjdG9yTWFwIG1fY29uc3RydWN0b3JzOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9FTEVNRU5UUykK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggNmNiYTI5ZWQ2OTgyYjA3Y2U5MTc2
YjU3MTI2MzkyNGQ1ZDk1MThlYi4uODEzZWJmMGU2MDk2Yjk1NTA1NDEzMTA5MzgyMTA2N2JhNjQz
NTEyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC00NiwxMSArNDYsMTQgQEAKICNpbmNs
dWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKICNpbmNsdWRlICJDb250ZXh0RmVhdHVyZXMu
aCIKICNpbmNsdWRlICJDb29raWVKYXIuaCIKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50Q29uc3Ry
dWN0b3IuaCIKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50UmVnaXN0cnkuaCIKICNpbmNsdWRlICJE
T01JbXBsZW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkRPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaCIK
ICNpbmNsdWRlICJET01TZWxlY3Rpb24uaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNs
dWRlICJEYXRlQ29tcG9uZW50cy5oIgorI2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIKICNpbmNsdWRl
ICJEb2N1bWVudEV2ZW50UXVldWUuaCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKQEAgLTgzOCw2ICs4NDEsMjAgQEAgUGFzc1JlZlB0
cjxFbGVtZW50PiBEb2N1bWVudDo6Y3JlYXRlRWxlbWVudChjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWUsIEV4Y2VwdGlvbkMKICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChRdWFsaWZpZWROYW1lKG51
bGxBdG9tLCBuYW1lLCBudWxsQXRvbSksIGZhbHNlKTsKIH0KIAorI2lmIEVOQUJMRShDVVNUT01f
RUxFTUVOVFMpCitQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gRG9jdW1lbnQ6
OnJlZ2lzdGVyRWxlbWVudChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIHJldHVybiByZWdpc3RlckVsZW1lbnQobmFtZSwgRGljdGlvbmFyeSgpLCBl
Yyk7Cit9CisKK1Bhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiBEb2N1bWVudDo6
cmVnaXN0ZXJFbGVtZW50KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgRGljdGlvbmFy
eSYgb3B0aW9ucywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFtX3JlZ2lzdHJ5KQor
ICAgICAgICBtX3JlZ2lzdHJ5ID0gYWRvcHRQdHIobmV3IEN1c3RvbUVsZW1lbnRSZWdpc3RyeSh0
aGlzKSk7CisgICAgcmV0dXJuIG1fcmVnaXN0cnktPnJlZ2lzdGVyRWxlbWVudChuYW1lLCBvcHRp
b25zLCBlYyk7Cit9CisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKwogUGFzc1Jl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBEb2N1bWVudDo6Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgp
CiB7CiAgICAgcmV0dXJuIERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmgKaW5kZXggMGIyYmRkN2UyOGY2Y2QxZDE1NGMxMjNjNGQ3YTZiMmU2MDRj
Zjk5My4uNjQ4ZDUxYjVlNWU3ZWEwMWJjMTBlNDQ2OTg1OWQwNWM3MDNmNWI5MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmgKQEAgLTY5LDYgKzY5LDggQEAgY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDsKIGNsYXNzIENoYXJhY3RlckRhdGE7CiBjbGFzcyBDb21tZW50OwogY2xhc3MgQ29udGV4dEZl
YXR1cmVzOworY2xhc3MgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOworY2xhc3MgQ3VzdG9tRWxl
bWVudFJlZ2lzdHJ5OwogY2xhc3MgRE9NSW1wbGVtZW50YXRpb247CiBjbGFzcyBET01OYW1lZEZs
b3dDb2xsZWN0aW9uOwogY2xhc3MgRE9NU2VsZWN0aW9uOwpAQCAtMTE2Miw2ICsxMTY0LDEzIEBA
IHB1YmxpYzoKICAgICBUZXh0QXV0b3NpemVyKiB0ZXh0QXV0b3NpemVyKCkgeyByZXR1cm4gbV90
ZXh0QXV0b3NpemVyLmdldCgpOyB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDVVNUT01fRUxFTUVO
VFMpCisgICAgUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IHJlZ2lzdGVyRWxl
bWVudChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNz
UmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gcmVnaXN0ZXJFbGVtZW50KGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSwgY29uc3QgRGljdGlvbmFyeSYgb3B0aW9ucywgRXhjZXB0aW9uQ29k
ZSYpOworICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gY3JlYXRlQ3VzdG9tRWxlbWVudChjb25zdCBB
dG9taWNTdHJpbmcmIHRhZ05hbWUpOworICAgIEN1c3RvbUVsZW1lbnRSZWdpc3RyeSogcmVnaXN0
cnkoKSBjb25zdCB7IHJldHVybiBtX3JlZ2lzdHJ5LmdldCgpOyB9CisjZW5kaWYKKwogICAgIHZv
aWQgYWRqdXN0RmxvYXRRdWFkc0ZvclNjcm9sbEFuZEFic29sdXRlWm9vbUFuZEZyYW1lU2NhbGUo
VmVjdG9yPEZsb2F0UXVhZD4mLCBSZW5kZXJPYmplY3QqKTsKICAgICB2b2lkIGFkanVzdEZsb2F0
UmVjdEZvclNjcm9sbEFuZEFic29sdXRlWm9vbUFuZEZyYW1lU2NhbGUoRmxvYXRSZWN0JiwgUmVu
ZGVyT2JqZWN0Kik7CiAKQEAgLTE1MzMsNiArMTU0MiwxMCBAQCBwcml2YXRlOgogICAgIE93blB0
cjxUZXh0QXV0b3NpemVyPiBtX3RleHRBdXRvc2l6ZXI7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShD
VVNUT01fRUxFTUVOVFMpCisgICAgT3duUHRyPEN1c3RvbUVsZW1lbnRSZWdpc3RyeT4gbV9yZWdp
c3RyeTsKKyNlbmRpZgorCiAgICAgYm9vbCBtX3NjaGVkdWxlZFRhc2tzQXJlU3VzcGVuZGVkOwog
ICAgIAogICAgIGJvb2wgbV92aXN1YWxVcGRhdGVzQWxsb3dlZDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsIGIvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFt
ZXMucGwKaW5kZXggMjAxZjQ1ZjQ0ZTg2ODg3MDk0NzQzM2UzMDVkNjcxNzU4NzhjZTgzYS4uMzVi
YTkxNGQ0MjY5NjRlYTUyNjgxMGIwZDQ4ZjE4NjQwMWIyZGExMSAxMDA3NTUKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL21ha2Vf
bmFtZXMucGwKQEAgLTExNzIsOCArMTE3Miw4IEBAIEVORAogOwogICAgIH0gZWxzaWYgKCR3cmFw
cGVyRmFjdG9yeVR5cGUgZXEgIlY4IikgewogICAgICAgICBwcmludCBGIDw8RU5ECisjaW5jbHVk
ZSAiVjhIVE1MQ3VzdG9tRWxlbWVudC5oIgogI2luY2x1ZGUgIlY4JHBhcmFtZXRlcnN7bmFtZXNw
YWNlfUVsZW1lbnQuaCIKLSAgICAgICAgCiAjaW5jbHVkZSA8djguaD4KIEVORAogOwpAQCAtMTI3
NCw2ICsxMjc0LDExIEBAIEVORAogICAgIHJldHVybiBWOFNWR0VsZW1lbnQ6OmNyZWF0ZVdyYXBw
ZXIoZWxlbWVudCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIEVORAogOworICAgICAgICB9
IGVsc2lmICgkcGFyYW1ldGVyc3tuYW1lc3BhY2V9IGVxICJIVE1MIikgeworICAgICAgICAgICAg
cHJpbnQgRiA8PEVORAorICAgIHJldHVybiBWOEhUTUxDdXN0b21FbGVtZW50Ojp0b1Y4KGVsZW1l
bnQsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CitFTkQKKzsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIHByaW50IEYgPDxFTkQKICAgICByZXR1cm4gd3JhcCh0byRwYXJhbWV0ZXJz
e2ZhbGxiYWNrSW50ZXJmYWNlTmFtZX0oZWxlbWVudCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5pZGwgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5pZGwKaW5kZXggMjVmMGE1YzM5MDM1MTE0
YjVkZjE5MTdjMjk1MjkxNjBhOWI0N2M5OC4uZDI4YzFiNDVlY2IzMzZjNGYyNTQxNzE2OGI0NjNi
ZDk5ZjVjM2YyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQu
aWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmlkbApAQCAtNTMsNiAr
NTMsMTEgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRWxlbWVudCBhY3RpdmVFbGVtZW50Owog
ICAgIGJvb2xlYW4gaGFzRm9jdXMoKTsKIAorI2lmIGRlZmluZWQoRU5BQkxFX0NVU1RPTV9FTEVN
RU5UUykgJiYgRU5BQkxFX0NVU1RPTV9FTEVNRU5UUworICAgIFtWOEVuYWJsZWRBdFJ1bnRpbWU9
Y3VzdG9tRE9NRWxlbWVudHMsIENvbmRpdGlvbmFsPUNVU1RPTV9FTEVNRU5UUywgSW1wbGVtZW50
ZWRBcz1yZWdpc3RlckVsZW1lbnRdCisgICAgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yIHdlYmtp
dFJlZ2lzdGVyKGluIERPTVN0cmluZyBuYW1lLCBpbiBbT3B0aW9uYWxdIERpY3Rpb25hcnkgb3B0
aW9ucykgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisjZW5kaWYKKwogICAgIC8vIERlcHJlY2F0ZWQg
YXR0cmlidXRlcwogICAgICAgICAgICAgIFtUcmVhdE51bGxBcz1OdWxsU3RyaW5nXSBhdHRyaWJ1
dGUgRE9NU3RyaW5nIGJnQ29sb3I7CiAgICAgICAgICAgICAgW1RyZWF0TnVsbEFzPU51bGxTdHJp
bmddIGF0dHJpYnV0ZSBET01TdHJpbmcgZmdDb2xvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVy
ZXMuZ3lwaQppbmRleCAxMTkyMWI2ZjljZDAzYjE4OTkwNmZlZWRiZTcxNzliOWE0NzhlMzcxLi4x
NGRjZWFjMjNhNDEzNmIxYzE3MWMwMDIwYjlkMjlmMGEwYTM5ODk5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9mZWF0dXJlcy5neXBpCkBAIC01NSw2ICs1NSw3IEBACiAgICAgICAnRU5BQkxFX0NTU19U
UkFOU0ZPUk1TX0FOSU1BVElPTlNfVFJBTlNJVElPTlNfVU5QUkVGSVhFRD0wJywKICAgICAgICdF
TkFCTEVfQ1NTX1ZBUklBQkxFUz0xJywKICAgICAgICdFTkFCTEVfQ1NTX1NUSUNLWV9QT1NJVElP
Tj0xJywKKyAgICAgICdFTkFCTEVfQ1VTVE9NX0VMRU1FTlRTPTEnLAogICAgICAgJ0VOQUJMRV9D
VVNUT01fU0NIRU1FX0hBTkRMRVI9MCcsCiAgICAgICAnRU5BQkxFX0RBU0hCT0FSRF9TVVBQT1JU
PTAnLAogICAgICAgJ0VOQUJMRV9EQVRBX1RSQU5TRkVSX0lURU1TPTEnLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUnVudGltZUZlYXR1cmVzLmggYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJSdW50aW1lRmVhdHVyZXMuaAppbmRleCAyYTQ5
ODlkOTNlNDE5ZDc3NzA4ODM4OGQ4ZjAwODE0ZTA0MTE4MjYyLi5jN2MyN2Q4ZjRjYWU3NTk2NTRm
YjUxZmM2ZDI5ZTZiNWEzZTk5MzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJSdW50aW1lRmVhdHVyZXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJSdW50aW1lRmVhdHVyZXMuaApAQCAtMTI1LDYgKzEyNSw5IEBAIHB1YmxpYzoK
ICAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyB2b2lkIGVuYWJsZVNoYWRvd0RPTShib29sKTsKICAg
ICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBib29sIGlzU2hhZG93RE9NRW5hYmxlZCgpOwogCisgICAg
V0VCS0lUX0VYUE9SVCBzdGF0aWMgdm9pZCBlbmFibGVDdXN0b21ET01FbGVtZW50cyhib29sKTsK
KyAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBib29sIGlzQ3VzdG9tRE9NRWxlbWVudHNFbmFibGVk
KCk7CisKICAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyB2b2lkIGVuYWJsZVN0eWxlU2NvcGVkKGJv
b2wpOwogICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIGJvb2wgaXNTdHlsZVNjb3BlZEVuYWJsZWQo
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUnVudGltZUZl
YXR1cmVzLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlJ1bnRpbWVGZWF0dXJl
cy5jcHAKaW5kZXggMDE5YjY3MzhhNzExZjk5ZDBmNWJjNTMyNGRjMjM3ZTMzMmRiNmY3Zi4uMWU4
OTczNThkYzg0ODE1OGE3N2MyNTJjMjM4YTBmZTBkNjViNDlhNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUnVudGltZUZlYXR1cmVzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJSdW50aW1lRmVhdHVyZXMuY3BwCkBAIC00NjcsNiArNDY3
LDI1IEBAIGJvb2wgV2ViUnVudGltZUZlYXR1cmVzOjppc1NoYWRvd0RPTUVuYWJsZWQoKQogI2Vu
ZGlmCiB9CiAKK3ZvaWQgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVDdXN0b21ET01FbGVtZW50
cyhib29sIGVuYWJsZSkKK3sKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorICAgIFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNldEN1c3RvbURPTUVsZW1lbnRzKGVuYWJsZSk7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShlbmFibGUpOworI2VuZGlmCit9CisKK2Jvb2wgV2ViUnVudGltZUZl
YXR1cmVzOjppc0N1c3RvbURPTUVsZW1lbnRzRW5hYmxlZCgpCit7CisjaWYgRU5BQkxFKENVU1RP
TV9FTEVNRU5UUykKKyAgICByZXR1cm4gUnVudGltZUVuYWJsZWRGZWF0dXJlczo6Y3VzdG9tRE9N
RWxlbWVudHNFbmFibGVkKCk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQor
CisKIHZvaWQgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVTdHlsZVNjb3BlZChib29sIGVuYWJs
ZSkKIHsKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdl
TG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDI2ZDRjMDYzMzY1NDMyYzc3NWMzZDQzNmM5YmNm
MTk1N2U2NDhhNDEuLjYwOWY4OTYxZmY5NDQzYjVkOTZlMmEwZTE1NzBkZWE2NDQwMzhiYWEgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNSBAQAorMjAxMy0wMS0yNyAgSGFqaW1lIE1vcnJpdGEgIDxtb3JyaXRhQGdvb2dsZS5jb20+
CisKKyAgICAgICAgW0N1c3RvbSBFbGVtZW50c10gSW1wbGVtZW50IGJhcmUtYm9uZSBkb2N1bWVu
dC5yZWdpc3RlcigpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMDAyMjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGRlZCBlbmFibGVDdXN0b21ET01FbGVtZW50cyBmbGFnLgorCisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcDoKKyAgICAgICAgKFRlc3RTaGVsbDo6
VGVzdFNoZWxsKToKKwogMjAxMy0wMS0yOCAgVGltb3RoeSBMb2ggIDx0aW1sb2hAY2hyb21pdW0u
Y29tPgogCiAgICAgICAgIFJlZmFjdG9yIENoYW5nZUxvZyBhbmQgUHJlcGFyZUNoYW5nZUxvZyB0
byB1c2UgRmlsZVN5c3RlbSBvYmplY3RzCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFNoZWxsLmNwcAppbmRleCA3MWQ5M2RkZDg4NWVmMTJkYTRhM2MwYzdlMjAxZTZiMjU5NWY4
ZWQzLi41NGViY2Q4MTMzMzA0YjdkZjE3NjMyOGNlNTBlNjBjM2E5OTgwYTM2IDEwMDY0NAotLS0g
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCisrKyBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKQEAgLTE0NSw2ICsxNDUsNyBA
QCBUZXN0U2hlbGw6OlRlc3RTaGVsbCgpCiAgICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVW
aWRlb1RyYWNrKHRydWUpOwogICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlR2FtZXBhZCh0
cnVlKTsKICAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZVNoYWRvd0RPTSh0cnVlKTsKKyAg
ICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZUN1c3RvbURPTUVsZW1lbnRzKHRydWUpOwogICAg
IFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlU3R5bGVTY29wZWQodHJ1ZSk7CiAgICAgV2ViUnVu
dGltZUZlYXR1cmVzOjplbmFibGVTY3JpcHRlZFNwZWVjaCh0cnVlKTsKICAgICBXZWJSdW50aW1l
RmVhdHVyZXM6OmVuYWJsZVJlcXVlc3RBdXRvY29tcGxldGUodHJ1ZSk7CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNjM5NDEy
YWU3YTNjMGE3NGU5MDM5ODM5YTI1MjI3NTBlNzcxZjE0OS4uMzMzZWMwZDNhZjc3MzM2NGZkMTdi
MmNhYjNhZjE2ZWNhNzA2NWVjMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEzLTAxLTI3ICBI
YWppbWUgTW9ycml0YSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBbQ3VzdG9tIEVs
ZW1lbnRzXSBJbXBsZW1lbnQgYmFyZS1ib25lIGRvY3VtZW50LnJlZ2lzdGVyKCkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDIyOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9kb20vY3VzdG9t
L2RvY3VtZW50LXJlZ2lzdGVyLWJhc2ljLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9t
L2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1iYXNpYy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDEzLTAxLTI4ICBLZWlz
aGkgSGF0dG9yaSAgPGtlaXNoaUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gUmVi
YXNlbGluaW5nIGludGVnZXItbW9kdWxvIGFmdGVyIHIxNDEwMzEuCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLWJhc2lj
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMDU1MzExYzZmOWRhODgyMjkwZDUwMmVhM2ZlNDI0
ZGY2OTcwN2U4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9t
L2RvY3VtZW50LXJlZ2lzdGVyLWJhc2ljLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMyIEBACitU
ZXN0aW5nIGRvY3VtZW50LnJlZ2lzdGVyKCkgYmFzaWMgYmVoYXZpb3JzLgorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworUEFTUyBkb2N1bWVudC5yZWdpc3RlcignZm9vJykgdGhyZXcg
ZXhjZXB0aW9uIEVycm9yOiBJbnZhbGlkQ2hhcmFjdGVyRXJyb3I6IERPTSBFeGNlcHRpb24gNS4K
K1BBU1MgZG9jdW1lbnQucmVnaXN0ZXIoJ3ktZm9vJykgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJ
bnZhbGlkQ2hhcmFjdGVyRXJyb3I6IERPTSBFeGNlcHRpb24gNS4KK1BBU1MgZG9jdW1lbnQucmVn
aXN0ZXIoJ3hmb28nKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IEludmFsaWRDaGFyYWN0ZXJFcnJv
cjogRE9NIEV4Y2VwdGlvbiA1LgorUEFTUyBkb2N1bWVudC5yZWdpc3RlcigneS14LWZvbycpIHRo
cmV3IGV4Y2VwdGlvbiBFcnJvcjogSW52YWxpZENoYXJhY3RlckVycm9yOiBET00gRXhjZXB0aW9u
IDUuCitQQVNTIHR5cGVvZiBmb29Db25zdHJ1Y3RvciBpcyAnZnVuY3Rpb24nCitQQVNTIGZvb0Nv
bnN0cnVjdG9yLnByb3RvdHlwZSBpcyBIVE1MU3BhbkVsZW1lbnQucHJvdG90eXBlCitQQVNTIGRv
Y3VtZW50LnJlZ2lzdGVyKCd4LWZvbycpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSW52YWxpZFN0
YXRlRXJyb3I6IERPTSBFeGNlcHRpb24gMTEuCitQQVNTIGRvY3VtZW50LnJlZ2lzdGVyKCdYLUZP
TycpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSW52YWxpZFN0YXRlRXJyb3I6IERPTSBFeGNlcHRp
b24gMTEuCitQQVNTIGZvb0NvbnN0cnVjdG9yKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjog
RE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uLgor
UEFTUyBjcmVhdGVkRm9vLl9fcHJvdG9fXyBpcyBmb29Db25zdHJ1Y3Rvci5wcm90b3R5cGUKK1BB
U1MgY3JlYXRlZEZvby5jb25zdHJ1Y3RvciBpcyBmb29Db25zdHJ1Y3RvcgorUEFTUyBjcmVhdGVk
Rm9vLnRhZ05hbWUgaXMgJ1gtRk9PJworUEFTUyBjcmVhdGVkRm9vLnRleHRDb250ZW50IGlzICdI
ZWxsbycKK1BBU1MgY3JlYXRlZEZvby5sYXN0Q2hpbGQgaXMgY2hpbGREaXYKK1BBU1MgcGFyc2Vk
Rm9vLl9fcHJvdG9fXyBpcyBmb29Db25zdHJ1Y3Rvci5wcm90b3R5cGUKK1BBU1MgcGFyc2VkRm9v
LnRhZ05hbWUgaXMgJ1gtRk9PJworUEFTUyBwYXJzZWRGb28uc29tZVByb3BlcnR5IGlzIGNvbnRh
aW5lci5maXJzdENoaWxkLnNvbWVQcm9wZXJ0eQorUEFTUyBjcmVhdGVkQmFyLnRhZ05hbWUgaXMg
J1gtQkFSJworUEFTUyBjcmVhdGVkVXBwZXJCYXIuY29uc3RydWN0b3IgaXMgYmFyQ29uc3RydWN0
b3IKK1BBU1MgY3JlYXRlZFVwcGVyQmFyLnRhZ05hbWUgaXMgJ1gtQkFSJworUEFTUyBjcmVhdGVk
TWl4ZWRCYXIuY29uc3RydWN0b3IgaXMgYmFyQ29uc3RydWN0b3IKK1BBU1MgY3JlYXRlZE1peGVk
QmFyLnRhZ05hbWUgaXMgJ1gtQkFSJworUEFTUyBjb250YWluZXIuZmlyc3RDaGlsZC5jb25zdHJ1
Y3RvciBpcyBiYXJDb25zdHJ1Y3RvcgorUEFTUyBjb250YWluZXIuZmlyc3RDaGlsZC50YWdOYW1l
IGlzICdYLUJBUicKK1BBU1MgY29udGFpbmVyLmxhc3RDaGlsZC5jb25zdHJ1Y3RvciBpcyBiYXJD
b25zdHJ1Y3RvcgorUEFTUyBjb250YWluZXIubGFzdENoaWxkLnRhZ05hbWUgaXMgJ1gtQkFSJwor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0
ZXItYmFzaWMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdp
c3Rlci1iYXNpYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjExZThhZjhmMzk5ZTZiNDdlMzIzZDdhMjcxNzE2
ODFlN2NjMzg0YzEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0
b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMuaHRtbApAQCAtMCwwICsxLDg0IEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0iY29u
dGFpbmVyIj48L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdGluZyBkb2N1bWVudC5y
ZWdpc3RlcigpIGJhc2ljIGJlaGF2aW9ycy4iKTsKKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKQor
ICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworZG9jdW1lbnQucmVnaXN0ZXIgPSBkb2N1bWVu
dC5yZWdpc3RlciB8fCBkb2N1bWVudC53ZWJraXRSZWdpc3RlcjsKKworLy8gSW52YWxpZCBuYW1l
cworc2hvdWxkVGhyb3coImRvY3VtZW50LnJlZ2lzdGVyKCdmb28nKSIsICInRXJyb3I6IEludmFs
aWRDaGFyYWN0ZXJFcnJvcjogRE9NIEV4Y2VwdGlvbiA1JyIpOworc2hvdWxkVGhyb3coImRvY3Vt
ZW50LnJlZ2lzdGVyKCd5LWZvbycpIiwgIidFcnJvcjogSW52YWxpZENoYXJhY3RlckVycm9yOiBE
T00gRXhjZXB0aW9uIDUnIik7CitzaG91bGRUaHJvdygiZG9jdW1lbnQucmVnaXN0ZXIoJ3hmb28n
KSIsICInRXJyb3I6IEludmFsaWRDaGFyYWN0ZXJFcnJvcjogRE9NIEV4Y2VwdGlvbiA1JyIpOwor
c2hvdWxkVGhyb3coImRvY3VtZW50LnJlZ2lzdGVyKCd5LXgtZm9vJykiLCAiJ0Vycm9yOiBJbnZh
bGlkQ2hhcmFjdGVyRXJyb3I6IERPTSBFeGNlcHRpb24gNSciKTsKKwordmFyIGZvb0NvbnN0cnVj
dG9yID0gZG9jdW1lbnQucmVnaXN0ZXIoIngtZm9vIik7CitzaG91bGRCZSgidHlwZW9mIGZvb0Nv
bnN0cnVjdG9yIiwgIidmdW5jdGlvbiciKTsKK3Nob3VsZEJlKCJmb29Db25zdHJ1Y3Rvci5wcm90
b3R5cGUiLCAiSFRNTFNwYW5FbGVtZW50LnByb3RvdHlwZSIpOworCisvLyBOYW1lIGNvbmZsaWN0
cworc2hvdWxkVGhyb3coImRvY3VtZW50LnJlZ2lzdGVyKCd4LWZvbycpIiwgIidFcnJvcjogSW52
YWxpZFN0YXRlRXJyb3I6IERPTSBFeGNlcHRpb24gMTEnIik7CitzaG91bGRUaHJvdygiZG9jdW1l
bnQucmVnaXN0ZXIoJ1gtRk9PJykiLCAiJ0Vycm9yOiBJbnZhbGlkU3RhdGVFcnJvcjogRE9NIEV4
Y2VwdGlvbiAxMSciKTsKKworLy8gQ2FsbCBhcyBmdW5jdGlvbgorc2hvdWxkVGhyb3coImZvb0Nv
bnN0cnVjdG9yKCkiLCAiJ1R5cGVFcnJvcjogRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3Qg
YmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJyIpCisKKy8vIENvbnN0cnVjdG9yIGluaXRpYXRlZCBp
bnN0YW50aWF0aW9uCit2YXIgY3JlYXRlZEZvbyA9IG5ldyBmb29Db25zdHJ1Y3RvcigpOworCisv
LyBKUyBidWlsdC1pbiBwcm9wZXJ0aWVzCitzaG91bGRCZSgiY3JlYXRlZEZvby5fX3Byb3RvX18i
LCAiZm9vQ29uc3RydWN0b3IucHJvdG90eXBlIik7CitzaG91bGRCZSgiY3JlYXRlZEZvby5jb25z
dHJ1Y3RvciIsICJmb29Db25zdHJ1Y3RvciIpOworCisvLyBOYXRpdmUgZ2V0dGVyCitzaG91bGRC
ZSgiY3JlYXRlZEZvby50YWdOYW1lIiwgIidYLUZPTyciKTsKKworLy8gTmF0aXZlIHNldHRlcgor
Y3JlYXRlZEZvby5pbm5lckhUTUwgPSAiSGVsbG8iOworc2hvdWxkQmUoImNyZWF0ZWRGb28udGV4
dENvbnRlbnQiLCAiJ0hlbGxvJyIpOworCisvLyBOYXRpdmUgbWV0aG9kCit2YXIgY2hpbGREaXYg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKK2NyZWF0ZWRGb28uYXBwZW5kQ2hpbGQo
Y2hpbGREaXYpOworc2hvdWxkQmUoImNyZWF0ZWRGb28ubGFzdENoaWxkIiwgImNoaWxkRGl2Iik7
CisKKy8vIFBhcnNlciBpbml0aWF0ZWQgaW5zdGFudGlhdGlvbgordmFyIGNvbnRhaW5lciA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250YWluZXIiKTsKK2NvbnRhaW5lci5pbm5lckhUTUwg
PSAiPHgtZm9vPjwveC1mb28+IjsKK3BhcnNlZEZvbyA9IGNvbnRhaW5lci5maXJzdENoaWxkOwor
CitzaG91bGRCZSgicGFyc2VkRm9vLl9fcHJvdG9fXyIsICJmb29Db25zdHJ1Y3Rvci5wcm90b3R5
cGUiKTsKK3Nob3VsZEJlKCJwYXJzZWRGb28udGFnTmFtZSIsICInWC1GT08nIik7CisKKy8vIEVu
c3VyaW5nIHRoZSB3cmFwcGVyIGlzIHJldGFpbmVkCitwYXJzZWRGb28uc29tZVByb3BlcnR5ID0g
ImhlbGxvIjsKK3Nob3VsZEJlKCJwYXJzZWRGb28uc29tZVByb3BlcnR5IiwgImNvbnRhaW5lci5m
aXJzdENoaWxkLnNvbWVQcm9wZXJ0eSIpOworCisvLyBIYXZpbmcgYW5vdGVociBjb25zdHJ1Y3Rv
cgordmFyIGJhckNvbnN0cnVjdG9yID0gZG9jdW1lbnQucmVnaXN0ZXIoIngtYmFyIik7Cit2YXIg
Y3JlYXRlZEJhciA9IG5ldyBiYXJDb25zdHJ1Y3RvcigpOworc2hvdWxkQmUoImNyZWF0ZWRCYXIu
dGFnTmFtZSIsICInWC1CQVInIik7CisKKy8vIFdpdGggaXJyZWd1bGFyIGNhc2VzCit2YXIgY3Jl
YXRlZFVwcGVyQmFyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiWC1CQVIiKTsKK3ZhciBjcmVh
dGVkTWl4ZWRCYXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJYLUJhciIpOworc2hvdWxkQmUo
ImNyZWF0ZWRVcHBlckJhci5jb25zdHJ1Y3RvciIsICJiYXJDb25zdHJ1Y3RvciIpOworc2hvdWxk
QmUoImNyZWF0ZWRVcHBlckJhci50YWdOYW1lIiwgIidYLUJBUiciKTsKK3Nob3VsZEJlKCJjcmVh
dGVkTWl4ZWRCYXIuY29uc3RydWN0b3IiLCAiYmFyQ29uc3RydWN0b3IiKTsKK3Nob3VsZEJlKCJj
cmVhdGVkTWl4ZWRCYXIudGFnTmFtZSIsICInWC1CQVInIik7CisKK2NvbnRhaW5lci5pbm5lckhU
TUwgPSAiPFgtQkFSPjwvWC1CQVI+PFgtQmFyPjwvWC1CYXI+IjsKK3Nob3VsZEJlKCJjb250YWlu
ZXIuZmlyc3RDaGlsZC5jb25zdHJ1Y3RvciIsICJiYXJDb25zdHJ1Y3RvciIpOworc2hvdWxkQmUo
ImNvbnRhaW5lci5maXJzdENoaWxkLnRhZ05hbWUiLCAiJ1gtQkFSJyIpOworc2hvdWxkQmUoImNv
bnRhaW5lci5sYXN0Q2hpbGQuY29uc3RydWN0b3IiLCAiYmFyQ29uc3RydWN0b3IiKTsKK3Nob3Vs
ZEJlKCJjb250YWluZXIubGFzdENoaWxkLnRhZ05hbWUiLCAiJ1gtQkFSJyIpOworCis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3Rh
dGlvbnMKaW5kZXggMzRhMGQxMDhhNDM5NGU5ZDIyMDAzY2U3ZDc5Nzk5NGQ4M2UyNjE3MS4uZWQx
NWM2NDY2NTRhZGY0ZDk4OTZjMGRkZjg1M2NlYTRhYTJlMWZmNyAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTEwMTMsNiArMTAxMyw5IEBAIHdlYmtpdC5v
cmcvYi83NjQ4OSBjb21wb3NpdGluZy93ZWJnbC93ZWJnbC1yZWZsZWN0aW9uLmh0bWwgWyBJbWFn
ZU9ubHlGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi83NjQzOSBbIERlYnVnIF0gZmFzdC9kb20vc2hh
ZG93L2NvbnRlbnQtZWxlbWVudC1hcGkuaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzc2
NDM5IFsgRGVidWcgXSBmYXN0L2RvbS9zaGFkb3cvY29udGVudC1lbGVtZW50LW91dHNpZGUtc2hh
ZG93Lmh0bWwgWyBGYWlsdXJlIF0KIAorIyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKSBpcyBkaXNh
YmxlZC4KK2Zhc3QvZG9tL2N1c3RvbQorCiAjIENTUyBWYXJpYWJsZXMgYXJlIG5vdCB5ZXQgZW5h
YmxlZC4KIHdlYmtpdC5vcmcvYi84NTU4MCBmYXN0L2Nzcy92YXJpYWJsZXMKIHdlYmtpdC5vcmcv
Yi84NTU4MCBpbnNwZWN0b3Ivc3R5bGVzL3ZhcmlhYmxlcwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185411</attachid>
            <date>2013-01-30 00:14:05 -0800</date>
            <delta_ts>2013-02-07 00:18:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100229-20130130171050.patch</filename>
            <type>text/plain</type>
            <size>76730</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxMjI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzUwYjVjYWFlNjEyMGJk
NzJhNWIzZjJkMTFlMDFlNzE0ZTk4Y2UxNC4uODMzYWQ1ODBlOWJjYThkZWI1MjQ3YzRiZTk2ZTg4
ZTVmOWRjYjMyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MyBAQAorMjAxMy0wMS0yOSAgSGFq
aW1lIE1vcnJpdGEgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgW0N1c3RvbSBFbGVt
ZW50c10gSW1wbGVtZW50IGJhcmUtYm9uZSBkb2N1bWVudC5yZWdpc3RlcigpCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDAyMjkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNoYW5nZSBpbXBsZW1l
bnRzIHByZWZpeGVkIHZlcnNpb24gb2YgZG9jdW1lbnQucmVnaXN0ZXIoKSwgd2l0aCBtaW5pbWFs
IGZlYXR1cmUgc3VwcG9ydC4KKyAgICAgICAgLSBUaGUgZmVhdHVyZSBpcyBndWFyZGVkIGJ5IEVO
QUJMRShDVVNUT01fRUxFTUVOVFMpIGFuZCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpjdXN0b21E
T01FbGVtZW50c0VuYWJsZWQoKS4KKyAgICAgICAgLSBUaGlzIGJhcmUtYm9uZSB2ZXJzaW9uIG9u
bHkgcmVjb2duaXplcyAibmFtZSIgcGFyYW1ldGVyIGFuZCBpZ25vcmVzIGFueSBvdGhlciBvcHRp
b25hbCBwYXJhbWV0ZXJzLgorICAgICAgICAtIEN1cnJlbnRseSBvbmx5IFY4IGlzIHN1cHBvcnRl
ZC4gSlNDIGJpbmRpbmcgbmVlZHMgaXRzIG93biBiaW5kaW5nIGltcGxlbWVudGF0aW9uLgorCisg
ICAgICAgID0gTWFqb3IgbmV3IGNsYXNzZXMgdW5kZXIgZG9tLzoKKworICAgICAgICBUaGUgZG9t
IG1vZHVsZSBoYXMgdHdvIG5ldyBjbGFzc2VzOgorICAgICAgICAtIEN1c3RvbUVsZW1lbnRDb25z
dHJ1Y3RvcjogQSByZXR1cm4gdmFsdWUgb2YgZG9jdW1lbnQucmVnaXN0ZXIoKQorICAgICAgICAg
IHdoaWNoIGhvbGRzIHRoZSBjdXN0b20gZWxlbWVudCBkZWZpbml0aW9uLgorICAgICAgICAtIEN1
c3RvbUVsZW1lbnRSZWdpc3RyeTogQSBjb2xsZWN0aW9uIG9mIEN1c3RvbUVsZW1lbnRDb25zdHJ1
Y3RvciBvYmplY3RzLgorICAgICAgICAgIEN1c3RvbUVsZW1lbnRSZWdpc3RyeSBpbnN0YW5jZSBp
cyBjcmVhdGVkIHBlciBEb2N1bWVudCBhbmQgaXMgb3duZWQgYnkgdGhlIERvY3VtZW50LgorCisg
ICAgICAgIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciBrbm93cyB0aGUgZGVmaW5pdGlvbiBvZiBl
YWNoIGN1c3RvbQorICAgICAgICBlbGVtZW50LCB3aGljaCBpcyByZWdpc3RlcmVkIGJ5IGRvY3Vt
ZW50LnJlZ2lzdGVyKCkuIFRoZSBuYW1lIGFuZAorICAgICAgICBvdGhlciBvcHRpb25zIGFyZSBo
ZWxkIGJ5IHRoaXMgb2JqZWN0LiBDdXN0b21FbGVtZW50UmVnaXN0cnkgb3ducyBhIHNldAorICAg
ICAgICBvZiB0aGUgcmVnaXN0ZXJlZCBjb25zdHJ1Y3RvcnMuIFRoZSByZWdpc3RyeSBndWFyYW50
ZWVzIGludmFyaWFudHMKKyAgICAgICAgbGlrZSB2YWxpZGl0eSBhbmQgdW5pcXVlbmVzcyBvZiB0
aGUgZWxlbWVudCBuYW1lcy4KKworICAgICAgICA9IEEgY2hhbmdlIG9uIG1ha2VfbmFtZXMucGwK
KworICAgICAgICBUaGlzIGNoYW5nZSB0d2Vha3MgbWFrZV9uYW1lcy5wbCAob3IgZ2VuZXJhdGVk
IEhUTUxFbGVtZW50RmFjdG9yeSkKKyAgICAgICAgdG8gaG9vayB0aGUgY3JlYXRpb25zIG9mIHVu
a25vd24gZWxlbWVudHMuIFNvbWUgb2YgZWxlbWVudCBuYW1lcworICAgICAgICB3aGljaCBjb21l
IHRvIHRoZSBmYWxsYmFjayBwYXRoIGNhbiBiZSBvbmUgb2YgcmVnaXN0ZXJlZCBjdXN0b20KKyAg
ICAgICAgZWxlbWVudC4KKworICAgICAgICA9IFtWOFdyYXBBc0Z1bmN0aW9uXSBleHRlbmRlZCBh
dHRyaWJ1dGU6CisKKyAgICAgICAgVGhlIGRvY3VtZW50LnJlZ2lzdGVyKCkgQVBJIHJldHVybnMg
YSBjb25zdHJ1Y3RvcgorICAgICAgICBmdW5jdGlvbi4gSG93ZXZlciwgdGhlIFY4IGJpbmRpbmcg
Y3VycmVudGx5IGRvZXNuJ3Qgc3VwcG9ydCBpdC4gVG8KKyAgICAgICAgbWFrZSBpdCBwb3NzaWJs
ZSwgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyAiVjhXcmFwQXNGdW5jdGlvbiIKKyAgICAgICAgZXh0
ZW5kZWQgYXR0cmlidXRlIGZvciBhbm5vdGF0aW5nIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciBJ
REwKKyAgICAgICAgaW50ZXJmYWNlLgorCisgICAgICAgIFY4V3JhcEFzRnVuY3Rpb24gd3JhcHMg
dGhlIGFubm90YXRlZCBpbnRlcmZhY2Ugd2l0aCBhIEphdmFTY3JpcHQKKyAgICAgICAgZnVuY3Rp
b24sIHdoaWNoIGNhbGxzIHRoZSBvcmlnaW5hbCBvYmplY3QgYXMgYSBmdW5jdGlvbiwgb3IgYXMg
YQorICAgICAgICBjb25zdHJ1Y3RvcgorCisgICAgICAgIFdpdGggdGhpcyB3cmFwcGVyIGZ1bmN0
aW9uLCB0aGVyZSBhcmUgdHdvIGxldmVscyBvZiBpbmRpcmVjdGlvbgorICAgICAgICBiZXR3ZWVu
IG5hdGl2ZSBDKysgb2JqZWN0IGFuZCBhdXRob3ItdmlzaWJsZSBKUyBmdW5jdGlvbjoKKworICAg
ICAgICBbSlMgQWRhcHRvciBGaWN0aW9uXSA8LShoaWRkZW4gcHJvcGVydHkpLT4gW0pTIFdyYXBw
ZXIgT2JqZWN0XSAtKGludGVybmFsIGZpZWxkKS0+IFtDKysgTmF0aXZlIG9iamVjdF0KKworICAg
ICAgICBUaGUgY29kZSBnZW5lcmF0b3IgZ2VuZXJhdGVzIHRoZSBiaW5kaW5nIGNvZGUgd2hpY2gg
ZGVhbHMgd2l0aAorICAgICAgICB0aGlzIGluZGlyZWN0aW9uLiAgQWxzbywgdGhlcmUgaXMgYSBz
ZXQgb2YgaGVscGVyIGZ1bmN0aW9ucyBpbgorICAgICAgICBWOEFkYXB0b3JGdW5jdGlvbi5oL2Nw
cCB3aGljaCB0YWtlIGNhcmUgb2YgdGhpcyBpbmRpcmVjdGlvbi4KKyAgICAgICAgVjhET01XcmFw
cGVyLmNwcC9oIHdvcmtzIGFzIGEgZmFjYWRlIGZvciB0aGVzZSBBUElzIGFuZCBpcyB1c2VkIGZy
b20KKyAgICAgICAgdGhlIGdlbmVyYXRlZCBjb2RlLgorCisgICAgICAgIFRoaXMgcmVkdW5kYW5j
eSBjb21lcyBmcm9tIGxpbWl0YXRpb25zIG9mIGJvdGggVjggYmluZGluZ3MgYW5kIFY4CisgICAg
ICAgIGVtYmVkZGluZyBBUEkuIFNlZSBidWcgMTA4MTM4IGZvciBkZXRhaWxzLgorCisgICAgICAg
ID0gVjhIVE1MQ3VzdG9tRWxlbWVudAorCisgICAgICAgIFVubGlrZSBidWlsdC1pbiBIVE1MIGVs
ZW1lbnRzLCBhbnkgY3VzdG9tIGVsZW1lbnQgaGFzIG5vCisgICAgICAgIGNvcnJlc3BvbmRpbmcg
QysrIGNsYXNzLiBJbnN0ZWFkLCBkb2N1bWVudC5yZWdpc3RlcigpIHNob3VsZCBhbGxvdworICAg
ICAgICBwYXNzaW5nIGEgcHJvdG90eXBlIG9iamVjdCBmb3IgdGhlIGVsZW1lbnRzIGJlaW5nIHJl
Z2lzdGVyZWQuCisKKyAgICAgICAgQWx0aG91Z2ggdGhpcyBmaXJzdCB2ZXJzaW9uIGRvZXNuJ3Qg
c3VwcG9ydCB0aGUgb3B0aW9uYWwgcHJvdG90eXBlCisgICAgICAgIHBhcmFtZXRlciB5ZXQsIFY4
SFRNTEN1c3RvbUVsZW1lbnQgY2xhc3MgaXMgbWFkZSBmb3IgYSBwbHVtYmluZworICAgICAgICBm
b3Igc3VwcG9ydGluZyBzdWNoIGZlYXR1cmVzIGluIGNvbWluZyBjaGFuZ2VzLiBUaGlzIGNsYXNz
CisgICAgICAgIGVuY2Fwc3VsYXRlcyBKUyB3cmFwcGVyIG9iamVjdCBjcmVhdGlvbiBmb3IgY3Vz
dG9tIGVsZW1lbnQKKyAgICAgICAgaW5zdGFuY2VzLiBGb3IgZXhhbXBsZSwgaXQgdGFrZXMgY2Fy
ZSBvZiBwcm90b3R5cGUgY2hhaW4gc2V0dXAuIEFzCisgICAgICAgIHdlIHN1cHBvcnQgdGhlICJw
cm90b3R5cGUiIG9wdGlvbmFsIHBhcmFtZXRlciBmb3IgZG9jdW1lbnQucmVnaXN0ZXIoKSwKKyAg
ICAgICAgdGhpcyBwbHVtYmluZyB3aWxsIGJlIGV4dGVuZGVkLgorCisgICAgICAgID0gQ3VzdG9t
IERPTSBlbGVtZW50cyBhbmQgbXVsdGlwbGUgd29ybGRzCisKKyAgICAgICAgSW4gdGhpcyBwYXRj
aCwgY3VzdG9tIGVsZW1lbnQgcmVnaXN0cmF0aW9uIGFuZCBpbnN0YW50aWF0aW9uIGlzIG5vdCBh
bGxvd2VkCisgICAgICAgIGluIG5vbi1tYWluIHdvcmxkIGFuZCBkb2N1bWVudC5yZWdpc3Rlcigp
IEFQSSBqdXN0IGZhaWxzIHRoZXJlLgorCisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL2N1c3RvbS9k
b2N1bWVudC1yZWdpc3Rlci1iYXNpYy5odG1sCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5t
YWtlOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBiaW5kaW5ncy9nZW5lcmlj
L1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2dlbmVyaWMv
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5oOgorICAgICAgICAoUnVudGltZUVuYWJsZWRGZWF0dXJl
cyk6CisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpjdXN0b21ET01F
bGVtZW50c0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2V0Q3VzdG9tRE9NRWxlbWVudHMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQ6CisgICAgICAgICogYmluZGluZ3Mvdjgv
Q3VzdG9tRWxlbWVudEhlbHBlcnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1c3Rv
bUVsZW1lbnRIZWxwZXJzOjppbml0aWFsaXplQ29uc3RydWN0b3JXcmFwcGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRIZWxwZXJzOjpkZWZhdWx0UHJvdG90eXBlT2YpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudEhlbHBlcnM6OmlzQ3VzdG9tRWxlbWVudHNBbGxv
d2VkKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9DdXN0b21FbGVtZW50SGVscGVycy5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5o
LgorICAgICAgICAoQ3VzdG9tRWxlbWVudEhlbHBlcnMpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L1Y4QWRhcHRvckZ1bmN0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpWOEFkYXB0
b3JGdW5jdGlvbjo6Z2V0VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhBZGFwdG9yRnVu
Y3Rpb246OmNvbmZpZ3VyZVRlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4QWRhcHRvckZ1
bmN0aW9uOjppbnZvY2F0aW9uQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VjhBZGFwdG9y
RnVuY3Rpb246OndyYXApOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9u
Lmg6IEFkZGVkLgorICAgICAgICAoVjhBZGFwdG9yRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6VjhBZGFwdG9yRnVuY3Rpb246OnVud3JhcCk6CisgICAgICAgIChXZWJDb3JlOjpWOEFkYXB0
b3JGdW5jdGlvbjo6Z2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjp0b0Z1bmN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6ZnJvbUZ1bmN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9WOERPTVdyYXBwZXIuaDoKKyAgICAgICAgKFY4RE9NV3JhcHBlcik6CisgICAgICAgICog
YmluZGluZ3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6VjhIVE1MQ3VzdG9tRWxlbWVudDo6Y3JlYXRlV3JhcHBlcik6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVudC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oLgorICAgICAgICAoVjhIVE1MQ3Vz
dG9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpWOEhUTUxDdXN0b21FbGVtZW50Ojp0b1Y4
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDdXN0b21FbGVtZW50Ojp0b1Y4KToKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvckN1c3RvbS5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6OmNhbGxBc0Z1bmN0
aW9uQ2FsbGJhY2spOgorICAgICAgICAqIGRvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuY3Bw
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5
TmFtZS5oLgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjpDdXN0b21F
bGVtZW50Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudENvbnN0
cnVjdG9yOjp+Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkN1
c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6d2lsbERlc3Ryb3lEb2N1bWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6OmNyZWF0ZUVsZW1lbnQpOgorICAgICAg
ICAqIGRvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaC4KKyAgICAgICAgKEN1c3Rv
bUVsZW1lbnRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50Q29u
c3RydWN0b3I6OmRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRDb25z
dHJ1Y3Rvcjo6dGFnTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50Q29uc3Ry
dWN0b3I6Om5hbWUpOgorICAgICAgICAqIGRvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaWRs
OiBBZGRlZC4KKyAgICAgICAgKiBkb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVnaXN0cnk6OkN1c3RvbUVsZW1lbnRS
ZWdpc3RyeSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVnaXN0cnk6On5DdXN0
b21FbGVtZW50UmVnaXN0cnkpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlZ2lz
dHJ5Ojpjb25zdHJ1Y3Rvck9mKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWdp
c3RyeTo6aXNWYWxpZE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlZ2lz
dHJ5OjpyZWdpc3RlckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJl
Z2lzdHJ5OjpmaW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6
Y3JlYXRlRWxlbWVudCk6CisgICAgICAgICogZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5oOiBB
ZGRlZC4KKyAgICAgICAgKEN1c3RvbUVsZW1lbnRSZWdpc3RyeSk6CisgICAgICAgICogZG9tL0Rv
Y3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZW1vdmVkTGFzdFJlZik6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVnaXN0ZXJFbGVtZW50KToKKyAgICAgICAg
KiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWdpc3RyeSk6
CisgICAgICAgICogZG9tL21ha2VfbmFtZXMucGw6CisgICAgICAgIChwcmludFdyYXBwZXJGYWN0
b3J5Q3BwRmlsZSk6CisgICAgICAgICogaHRtbC9IVE1MRG9jdW1lbnQuaWRsOgorCiAyMDEzLTAx
LTI5ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgU2Ny
b2xsYmFyIGFuZCBzY3JvbGwgY29ybmVyIGNvbXBvc2l0ZWQgbGF5ZXJzIHBvc2l0aW9uZWQgaW5j
b3JyZWN0bHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYzY3YzI3YWNiMDQzMWNjZjhk
MTAxZjQ5MzE1OTU5YTdiZWU3NjMxYi4uN2VjYjUyZWQ3YTQwZmQ0NjE2Yzc3YzUzZWMzMjgxMDMy
NzMyMjQxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAx
My0wMS0yNyAgSGFqaW1lIE1vcnJpdGEgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAg
W0N1c3RvbSBFbGVtZW50c10gSW1wbGVtZW50IGJhcmUtYm9uZSBkb2N1bWVudC5yZWdpc3Rlcigp
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDAyMjkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBl
bmFibGVDdXN0b21ET01FbGVtZW50cyBmbGFnLgorCisgICAgICAgICogZmVhdHVyZXMuZ3lwaToK
KyAgICAgICAgKiBwdWJsaWMvV2ViUnVudGltZUZlYXR1cmVzLmg6CisgICAgICAgIChXZWJSdW50
aW1lRmVhdHVyZXMpOgorICAgICAgICAqIHNyYy9XZWJSdW50aW1lRmVhdHVyZXMuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZUN1c3RvbURPTUVsZW1lbnRz
KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJ1bnRpbWVGZWF0dXJl
czo6aXNDdXN0b21ET01FbGVtZW50c0VuYWJsZWQpOgorCiAyMDEzLTAxLTI5ICBNYXJrIExhbSAg
PG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW5hbWUgQWJzdHJhY3REYXRhYmFzZSB0
byBEYXRhYmFzZUJhY2tlbmQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291
cmNlcy5tYWtlIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCBiZDVm
NDU4NDU2ODI0OTVhZjk2ZThkZjBiOTRiYmFjZGY3ZGYzZGZkLi4wODhlMWZlNzMyMTQwMzNhNGY0
MTU0ODNmMjU2NGM0MjY4NjFmMTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAg
LTIxNCw2ICsyMTQsNyBAQCBCSU5ESU5HX0lETFMgPSBcCiAgICAgJChXZWJDb3JlKS9kb20vQ2xp
cGJvYXJkLmlkbCBcCiAgICAgJChXZWJDb3JlKS9kb20vQ29tbWVudC5pZGwgXAogICAgICQoV2Vi
Q29yZSkvZG9tL0NvbXBvc2l0aW9uRXZlbnQuaWRsIFwKKyAgICAkKFdlYkNvcmUpL2RvbS9DdXN0
b21FbGVtZW50Q29uc3RydWN0b3IuaWRsIFwKICAgICAkKFdlYkNvcmUpL2RvbS9DdXN0b21FdmVu
dC5pZGwgXAogICAgICQoV2ViQ29yZSkvZG9tL0RPTUNvcmVFeGNlcHRpb24uaWRsIFwKICAgICAk
KFdlYkNvcmUpL2RvbS9ET01FcnJvci5pZGwgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDY1MzhkNDc1
OTQzMzk3ZTQ0MTY2N2M0NzlhYzJiZmY4NmU1ZDExNGMuLjY1MzczYWRlZmQ0YTE2ZmM4OTljNDky
M2MxYWY1NDYwNzA2YTY3ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTIwMyw2ICsyMDMsNyBAQAog
ICAgICAgICAgICAgJ2RvbS9DbGlwYm9hcmQuaWRsJywKICAgICAgICAgICAgICdkb20vQ29tbWVu
dC5pZGwnLAogICAgICAgICAgICAgJ2RvbS9Db21wb3NpdGlvbkV2ZW50LmlkbCcsCisgICAgICAg
ICAgICAnZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5pZGwnLAogICAgICAgICAgICAgJ2Rv
bS9DdXN0b21FdmVudC5pZGwnLAogICAgICAgICAgICAgJ2RvbS9ET01Db3JlRXhjZXB0aW9uLmlk
bCcsCiAgICAgICAgICAgICAnZG9tL0RPTUVycm9yLmlkbCcsCkBAIC0xMTc2LDYgKzExNzcsOCBA
QAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0FycmF5VmFsdWUuaCcsCiAgICAgICAgICAgICAn
YmluZGluZ3MvdjgvQmluZGluZ1N0YXRlLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mvdjgv
QmluZGluZ1N0YXRlLmgnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0N1c3RvbUVsZW1lbnRI
ZWxwZXJzLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvQ3VzdG9tRWxlbWVudEhlbHBl
cnMuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmNwcCcsCiAgICAg
ICAgICAgICAnYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmgnLAogICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L0RPTVJlcXVlc3RTdGF0ZS5oJywKQEAgLTEyNDQsNiArMTI0Nyw4IEBACiAgICAgICAg
ICAgICAnYmluZGluZ3MvdjgvU2hhcmVkUGVyc2lzdGVudC5oJywKICAgICAgICAgICAgICdiaW5k
aW5ncy92OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5jcHAnLAogICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmgnLAorICAgICAgICAgICAgJ2JpbmRpbmdz
L3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhB
ZGFwdG9yRnVuY3Rpb24uaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNw
cCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgnLAogICAgICAgICAgICAg
J2JpbmRpbmdzL3Y4L1Y4QmluZGluZ01hY3Jvcy5oJywKQEAgLTEyNjUsNiArMTI3MCw4IEBACiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuaCcsCiAgICAgICAgICAgICAn
YmluZGluZ3MvdjgvVjhHQ0ZvckNvbnRleHREaXNwb3NlLmNwcCcsCiAgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvVjhHQ0ZvckNvbnRleHREaXNwb3NlLmgnLAorICAgICAgICAgICAgJ2JpbmRpbmdz
L3Y4L1Y4SFRNTEN1c3RvbUVsZW1lbnQuY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9W
OEhUTUxDdXN0b21FbGVtZW50LmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4SGlkZGVu
UHJvcGVydHlOYW1lLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhIaWRkZW5Qcm9w
ZXJ0eU5hbWUuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhJbml0aWFsaXplci5jcHAn
LApAQCAtMTMyNSw2ICsxMzMyLDcgQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20v
VjhDb25zb2xlQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q29vcmRpbmF0ZXNDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20v
VjhDcnlwdG9DdXN0b20uY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhD
dXN0b21FbGVtZW50Q29uc3RydWN0b3JDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5n
cy92OC9jdXN0b20vVjhDdXN0b21FdmVudEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3Bw
JywKQEAgLTI3NTAsNiArMjc1OCwxMCBAQAogICAgICAgICAgICAgJ2RvbS9Db250ZXh0RmVhdHVy
ZXMuY3BwJywKICAgICAgICAgICAgICdkb20vQ29udGV4dEZlYXR1cmVzLmgnLAogICAgICAgICAg
ICAgJ2RvbS9Dcm9zc1RocmVhZFRhc2suaCcsCisgICAgICAgICAgICAnZG9tL0N1c3RvbUVsZW1l
bnRDb25zdHJ1Y3Rvci5jcHAnLAorICAgICAgICAgICAgJ2RvbS9DdXN0b21FbGVtZW50Q29uc3Ry
dWN0b3IuaCcsCisgICAgICAgICAgICAnZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5jcHAnLAor
ICAgICAgICAgICAgJ2RvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuaCcsCiAgICAgICAgICAgICAn
ZG9tL0N1c3RvbUV2ZW50LmNwcCcsCiAgICAgICAgICAgICAnZG9tL0N1c3RvbUV2ZW50LmgnLAog
ICAgICAgICAgICAgJ2RvbS9ET01BbGxJbk9uZS5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHAKaW5k
ZXggODIwZjVhNmFmOWViNzQyMzc4MTk3OTZkYjI4MDVkNWEyZTZhNzkzYS4uNzRmODUyODJjOGVi
MzQ5ZWNmZTg4ZTAwNjg4YmZjZDdmYjAzOTEzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwCkBAIC0x
ODksNiArMTg5LDEwIEBAIGJvb2wgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6aXNTaGFkb3dET01F
bmFibGVkID0gZmFsc2U7CiBib29sIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmlzQXV0aG9yU2hh
ZG93RE9NRm9yQW55RWxlbWVudEVuYWJsZWQgPSBmYWxzZTsKICNlbmRpZgogCisjaWYgRU5BQkxF
KENVU1RPTV9FTEVNRU5UUykKK2Jvb2wgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6aXNDdXN0b21E
T01FbGVtZW50c0VuYWJsZWQgPSBmYWxzZTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFNUWUxFX1ND
T1BFRCkKIGJvb2wgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6aXNTdHlsZVNjb3BlZEVuYWJsZWQg
PSBmYWxzZTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2Vu
ZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9n
ZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaAppbmRleCAyMTUzMmU5Y2VlYWI3M2VmNzA4
ZTU2NWJlY2FmYTg0MDUwODViNWUwLi43NGM4MjQyMzFhNTZlNmFmZjdlN2QzMzg5MGMwZGM2ZGYz
NzNkOGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRp
bWVFbmFibGVkRmVhdHVyZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmlj
L1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaApAQCAtMjEwLDYgKzIxMCwxMSBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIHZvaWQgc2V0QXV0aG9yU2hhZG93RE9NRm9yQW55RWxlbWVudEVuYWJsZWQoYm9v
bCBpc0VuYWJsZWQpIHsgaXNBdXRob3JTaGFkb3dET01Gb3JBbnlFbGVtZW50RW5hYmxlZCA9IGlz
RW5hYmxlZDsgfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorICAgIHN0
YXRpYyBib29sIGN1c3RvbURPTUVsZW1lbnRzRW5hYmxlZCgpIHsgcmV0dXJuIGlzQ3VzdG9tRE9N
RWxlbWVudHNFbmFibGVkOyB9CisgICAgc3RhdGljIHZvaWQgc2V0Q3VzdG9tRE9NRWxlbWVudHMo
Ym9vbCBpc0VuYWJsZWQpIHsgaXNDdXN0b21ET01FbGVtZW50c0VuYWJsZWQgPSBpc0VuYWJsZWQ7
IH0KKyNlbmRpZgorCiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKICAgICBzdGF0aWMgYm9vbCBz
dHlsZVNjb3BlZEVuYWJsZWQoKSB7IHJldHVybiBpc1N0eWxlU2NvcGVkRW5hYmxlZDsgfQogICAg
IHN0YXRpYyB2b2lkIHNldFN0eWxlU2NvcGVkRW5hYmxlZChib29sIGlzRW5hYmxlZCkgeyBpc1N0
eWxlU2NvcGVkRW5hYmxlZCA9IGlzRW5hYmxlZDsgfQpAQCAtMzQxLDYgKzM0NiwxMCBAQCBwcml2
YXRlOgogICAgIHN0YXRpYyBib29sIGlzQXV0aG9yU2hhZG93RE9NRm9yQW55RWxlbWVudEVuYWJs
ZWQ7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisgICAgc3RhdGljIGJv
b2wgaXNDdXN0b21ET01FbGVtZW50c0VuYWJsZWQ7CisjZW5kaWYKKwogI2lmIEVOQUJMRShTVFlM
RV9TQ09QRUQpCiAgICAgc3RhdGljIGJvb2wgaXNTdHlsZVNjb3BlZEVuYWJsZWQ7CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgu
cG0KaW5kZXggNTI0ZTIyOWQ1NTRmODUzZDYwYTUzY2IwNmJmMTcyNzA2MDFhNGQwOC4uNjRkMjJl
ZDU1MTAzZTJkMWU4ZmY0OWNmMDA0ZDFiZjNmOWI1ZTMwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KQEAgLTM1MiwxMyArMzUy
LDIwIEBAIEVORAogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiZmFsc2U7XG4iKTsKICAg
ICB9CiAKKyAgICBteSAkZnJvbUZ1bmN0aW9uT3BlbmluZyA9ICIiOworICAgIG15ICRmcm9tRnVu
Y3Rpb25DbG9zaW5nID0gIiI7CisgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJWOFdyYXBBc0Z1bmN0aW9uIn0pIHsKKyAgICAgICAgJGZyb21GdW5jdGlvbk9wZW5pbmcg
PSAiVjhET01XcmFwcGVyOjpmcm9tRnVuY3Rpb24oIjsKKyAgICAgICAgJGZyb21GdW5jdGlvbkNs
b3NpbmcgPSAiKSI7CisgICAgfQorCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgPDxFTkQpOwog
ICAgIHN0YXRpYyBib29sIEhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPik7CiAgICAg
c3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBHZXRSYXdUZW1wbGF0
ZSh2ODo6SXNvbGF0ZSogPSAwKTsKICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+IEdldFRlbXBsYXRlKHY4OjpJc29sYXRlKiA9IDApOwogICAgIHN0YXRpYyAk
e25hdGl2ZVR5cGV9KiB0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCR7bmF0aXZlVHlwZX0qPihvYmpl
Y3QtPkdldEFsaWduZWRQb2ludGVyRnJvbUludGVybmFsRmllbGQodjhET01XcmFwcGVyT2JqZWN0
SW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8JHtuYXRpdmVUeXBlfSo+
KCR7ZnJvbUZ1bmN0aW9uT3BlbmluZ31vYmplY3Qke2Zyb21GdW5jdGlvbkNsb3Npbmd9LT5HZXRB
bGlnbmVkUG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9NV3JhcHBlck9iamVjdEluZGV4KSk7
CiAgICAgfQogICAgIHN0YXRpYyB2b2lkIGRlcmVmT2JqZWN0KHZvaWQqKTsKICAgICBzdGF0aWMg
V3JhcHBlclR5cGVJbmZvIGluZm87CkBAIC01NDMsNiArNTUwLDkgQEAgRU5ECiAgICAgfSBlbHNl
IHsKIAogICAgICAgICBteSAkY3JlYXRlV3JhcHBlckNhbGwgPSAkY3VzdG9tV3JhcCA/ICIke3Y4
SW50ZXJmYWNlTmFtZX06OndyYXAiIDogIiR7djhJbnRlcmZhY2VOYW1lfTo6Y3JlYXRlV3JhcHBl
ciI7CisgICAgICAgIG15ICRyZXR1cm5pbmdXcmFwcGVyID0gJGludGVyZmFjZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IlY4V3JhcEFzRnVuY3Rpb24ifSA/ICJWOERPTVdyYXBwZXI6OnRvRnVuY3Rp
b24od3JhcHBlcikiIDogIndyYXBwZXIiOworICAgICAgICBteSAkcmV0dXJuaW5nQ3JlYXRlZFdy
YXBwZXJPcGVuaW5nID0gJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlY4V3JhcEFz
RnVuY3Rpb24ifSA/ICJWOERPTVdyYXBwZXI6OnRvRnVuY3Rpb24oIiA6ICIiOworICAgICAgICBt
eSAkcmV0dXJuaW5nQ3JlYXRlZFdyYXBwZXJDbG9zaW5nID0gJGludGVyZmFjZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IlY4V3JhcEFzRnVuY3Rpb24ifSA/ICIsIGltcGwtPm5hbWUoKSwgaXNvbGF0
ZSkiIDogIiI7CiAKICAgICAgICAgaWYgKCRjdXN0b21XcmFwKSB7CiAgICAgICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCA8PEVORCk7CkBAIC01NTYsNyArNTY2LDcgQEAgaW5saW5lIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gd3JhcCgke25hdGl2ZVR5cGV9KiBpbXBsLCB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IGMKIHsKICAgICBBU1NFUlQoaW1wbCk7CiAgICAgQVNTRVJUKERPTURhdGFTdG9y
ZTo6Z2V0V3JhcHBlcihpbXBsLCBpc29sYXRlKS5Jc0VtcHR5KCkpOwotICAgIHJldHVybiAkY3Jl
YXRlV3JhcHBlckNhbGwoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKKyAgICByZXR1
cm4gJHtyZXR1cm5pbmdDcmVhdGVkV3JhcHBlck9wZW5pbmd9JGNyZWF0ZVdyYXBwZXJDYWxsKGlt
cGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSkke3JldHVybmluZ0NyZWF0ZWRXcmFwcGVyQ2xv
c2luZ307CiB9CiBFTkQKICAgICAgICAgfQpAQCAtNTY5LDcgKzU3OSw3IEBAIGlubGluZSB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOCgke25hdGl2ZVR5cGV9KiBpbXBsLCB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IGNyCiAgICAgICAgIHJldHVybiB2OE51bGxXaXRoQ2hlY2soaXNvbGF0ZSk7CiAg
ICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZXIgPSBET01EYXRhU3RvcmU6OmdldFdyYXBw
ZXIoaW1wbCwgaXNvbGF0ZSk7CiAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIHdyYXBwZXI7CisgICAgICAgIHJldHVybiAkcmV0dXJuaW5nV3JhcHBlcjsKICAgICBy
ZXR1cm4gd3JhcChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQogCkBAIC01ODAs
NyArNTkwLDcgQEAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdCgke25hdGl2
ZVR5cGV9KiBpbXBsLCBjb25zdCBIb2xkZXJDb250YWluZXIKICAgICAgICAgcmV0dXJuIHY4TnVs
bChjb250YWluZXIuR2V0SXNvbGF0ZSgpKTsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdy
YXBwZXIgPSBET01EYXRhU3RvcmU6OmdldFdyYXBwZXJGYXN0KGltcGwsIGNvbnRhaW5lciwgd3Jh
cHBhYmxlKTsKICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gd3Jh
cHBlcjsKKyAgICAgICAgcmV0dXJuICRyZXR1cm5pbmdXcmFwcGVyOwogICAgIHJldHVybiB3cmFw
KGltcGwsIGNvbnRhaW5lci5Ib2xkZXIoKSwgY29udGFpbmVyLkdldElzb2xhdGUoKSk7CiB9CiBF
TkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmli
dXRlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMu
dHh0CmluZGV4IGM2MzY0NGZiZTk2NTI5ZGY3OGEyMzgzMGE1NmI2NDFhMmRiZWRkMDcuLjE4NjEx
MTgxNTA5ZWMzYjVjYzc0YzBhOWYzMDhiNmIwNTk4Y2EzNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dApAQCAtMTI5LDMgKzEyOSw0
IEBAIFY4TWVhc3VyZUFzPSoKIFY4UmVhZE9ubHkKIFY4U2tpcFZUYWJsZVZhbGlkYXRpb24KIFY4
VW5mb3JnZWFibGUKK1Y4V3JhcEFzRnVuY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kOTEyNTViZjA5
ODI4Nzk2M2VjN2ZmNzQyNmU2Y2ZlYjNjMGJlMDZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvQ3VzdG9tRWxlbWVudEhlbHBlcnMuY3BwCkBAIC0wLDAgKzEs
NzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudEhlbHBlcnMu
aCIKKworI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tRWxl
bWVudENvbnN0cnVjdG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIEVOQUJMRShD
VVNUT01fRUxFTUVOVFMpCisKK3ZvaWQgQ3VzdG9tRWxlbWVudEhlbHBlcnM6OmluaXRpYWxpemVD
b25zdHJ1Y3RvcldyYXBwZXIoQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKiBjb25zdHJ1Y3Rvciwg
Y29uc3QgU2NyaXB0VmFsdWUmIHByb3RvdHlwZSwgU2NyaXB0U3RhdGUqIHN0YXRlKQoreworICAg
IEFTU0VSVChpc0N1c3RvbUVsZW1lbnRzQWxsb3dlZChzdGF0ZSkpOworCisgICAgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChXZWJD
b3JlOjp0b1Y4KGNvbnN0cnVjdG9yLCBzdGF0ZS0+Y29udGV4dCgpLT5HbG9iYWwoKSwgc3RhdGUt
PmNvbnRleHQoKS0+R2V0SXNvbGF0ZSgpKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBy
b3RvdHlwZVZhbHVlID0gcHJvdG90eXBlLnY4VmFsdWUoKTsKKyAgICBpZiAoIXByb3RvdHlwZVZh
bHVlLklzRW1wdHkoKSAmJiBwcm90b3R5cGVWYWx1ZS0+SXNPYmplY3QoKSkKKyAgICAgICAgd3Jh
cHBlci0+U2V0KHY4U3RyaW5nKCJwcm90b3R5cGUiLCBzdGF0ZS0+Y29udGV4dCgpLT5HZXRJc29s
YXRlKCkpLCBwcm90b3R5cGVWYWx1ZSwgdjg6OlJlYWRPbmx5KTsKK30KKworU2NyaXB0VmFsdWUg
Q3VzdG9tRWxlbWVudEhlbHBlcnM6OmRlZmF1bHRQcm90b3R5cGVPZihTY3JpcHRTdGF0ZSogc3Rh
dGUpCit7CisgICAgQVNTRVJUKGlzQ3VzdG9tRWxlbWVudHNBbGxvd2VkKHN0YXRlKSk7CisKKyAg
ICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdsb2JhbCA9IHN0YXRlLT5jb250ZXh0KCktPkdsb2Jh
bCgpOworICAgIHY4OjpJc29sYXRlKiBpc29sYXRlID0gc3RhdGUtPmNvbnRleHQoKS0+R2V0SXNv
bGF0ZSgpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBpbnRlcmZhY2VPYmplY3QgPSBnbG9i
YWwtPkdldCh2OFN0cmluZygiSFRNTFNwYW5FbGVtZW50IiwgaXNvbGF0ZSkpOworICAgIGlmIChp
bnRlcmZhY2VPYmplY3QuSXNFbXB0eSgpIHx8ICFpbnRlcmZhY2VPYmplY3QtPklzT2JqZWN0KCkp
CisgICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZSgpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBwcm90b3R5cGUgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGludGVyZmFjZU9iamVj
dCktPkdldCh2OFN0cmluZygicHJvdG90eXBlIiwgaXNvbGF0ZSkpOworICAgIGlmIChwcm90b3R5
cGUuSXNFbXB0eSgpIHx8ICFwcm90b3R5cGUtPklzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBT
Y3JpcHRWYWx1ZSgpOworICAgIHJldHVybiBTY3JpcHRWYWx1ZShwcm90b3R5cGUpOworfTsKKwor
Ym9vbCBDdXN0b21FbGVtZW50SGVscGVyczo6aXNDdXN0b21FbGVtZW50c0FsbG93ZWQoU2NyaXB0
U3RhdGUqIHN0YXRlKQoreworICAgIHJldHVybiBpc0N1c3RvbUVsZW1lbnRzQWxsb3dlZChzdGF0
ZS0+Y29udGV4dCgpKTsKK30KKworYm9vbCBDdXN0b21FbGVtZW50SGVscGVyczo6aXNDdXN0b21F
bGVtZW50c0FsbG93ZWQodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCkKK3sKKyAgICBy
ZXR1cm4gIURPTVdyYXBwZXJXb3JsZDo6aXNvbGF0ZWQoY29udGV4dCk7Cit9CisKKworI2VuZGlm
IC8vIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJz
LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9DdXN0b21FbGVtZW50SGVscGVycy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmE4NGYyZTYwZDUyN2ZhMGRiODYyNGY3Y2I2NjM1YmFlYzA1Nzc0YjEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9DdXN0b21FbGVtZW50SGVs
cGVycy5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEN1c3RvbUVsZW1lbnRIZWxwZXJzX2gKKyNk
ZWZpbmUgQ3VzdG9tRWxlbWVudEhlbHBlcnNfaAorCisjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKwor
Y2xhc3MgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOworY2xhc3MgU2NyaXB0U3RhdGU7CisKK2Ns
YXNzIEN1c3RvbUVsZW1lbnRIZWxwZXJzIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBpbml0
aWFsaXplQ29uc3RydWN0b3JXcmFwcGVyKEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciosIGNvbnN0
IFNjcmlwdFZhbHVlJiwgU2NyaXB0U3RhdGUqKTsKKyAgICBzdGF0aWMgYm9vbCBpc0N1c3RvbUVs
ZW1lbnRzQWxsb3dlZChTY3JpcHRTdGF0ZSopOworICAgIHN0YXRpYyBTY3JpcHRWYWx1ZSBkZWZh
dWx0UHJvdG90eXBlT2YoU2NyaXB0U3RhdGUqKTsKKworICAgIHN0YXRpYyBib29sIGlzQ3VzdG9t
RWxlbWVudHNBbGxvd2VkKHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KTsKK307CisKKyNlbmRpZiAv
LyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBDdXN0b21FbGVtZW50SGVscGVyc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTM0ZWU0ZmIxZjMyN2Uw
NDViYTI2N2NlMDM0MGNkODA5ZWFhZjcxZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmNwcApAQCAtMCwwICsxLDg2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlY4QWRhcHRvckZ1bmN0aW9uLmgiCisKKyNpbmNs
dWRlICJWOFBlcklzb2xhdGVEYXRhLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYg
RU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXcmFwcGVy
VHlwZUluZm8gVjhBZGFwdG9yRnVuY3Rpb246OmluZm8gPSB7IFY4QWRhcHRvckZ1bmN0aW9uOjpn
ZXRUZW1wbGF0ZSwgMCwgMCwgMCwgMCwgMCwgMCwgV3JhcHBlclR5cGVPYmplY3RQcm90b3R5cGUg
fTsKKwordjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4QWRhcHRvckZ1bmN0
aW9uOjpnZXRUZW1wbGF0ZSh2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3sKKyAgICBpZiAoIWlzb2xh
dGUpCisgICAgICAgIGlzb2xhdGUgPSB2ODo6SXNvbGF0ZTo6R2V0Q3VycmVudCgpOworICAgIFY4
UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpmcm9tKGlzb2xhdGUpOwor
ICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRh
LT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOworICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+
cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7Cisg
ICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IG5ld1RlbXBsYXRlID0gdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+OjpOZXcodjg6OkZ1bmN0aW9uVGVtcGxh
dGU6Ok5ldygpKTsKKyAgICBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmFkZCgmaW5mbywgY29uZmln
dXJlVGVtcGxhdGUobmV3VGVtcGxhdGUpKTsKKyAgICByZXR1cm4gbmV3VGVtcGxhdGU7Cit9CisK
K3Y4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOEFkYXB0b3JGdW5jdGlvbjo6
Y29uZmlndXJlVGVtcGxhdGUodjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGZ1
bmN0aW9uVGVtcGxhdGUpCit7CisgICAgZnVuY3Rpb25UZW1wbGF0ZS0+U2V0Q2FsbEhhbmRsZXIo
JlY4QWRhcHRvckZ1bmN0aW9uOjppbnZvY2F0aW9uQ2FsbGJhY2spOworICAgIHJldHVybiBmdW5j
dGlvblRlbXBsYXRlOworfQorCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhBZGFwdG9yRnVuY3Rp
b246Omludm9jYXRpb25DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAg
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlZCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46
OkNhc3QoYXJncy5DYWxsZWUoKS0+R2V0SGlkZGVuVmFsdWUoVjhIaWRkZW5Qcm9wZXJ0eU5hbWU6
OmFkYXB0b3JGdW5jdGlvblBlZXIoKSkpOworICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSBmYXN0
ZXIgaWYgd2UgY2FuIGFjY2VzcyB1bmRlcmx5aW5nIG5hdGl2ZSBjYWxsYmFjayBkaXJlY3RseS4K
KyAgICAvLyBXZSB3b24ndCBuZWVkIHRoaXMgb25jZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTA4MTM4IGlzIGFkZHJlc3NlZC4KKyAgICBWZWN0b3I8djg6OkhhbmRs
ZTx2ODo6VmFsdWU+ID4gYXJnQXJyYXkoYXJncy5MZW5ndGgoKSk7CisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBhcmdzLkxlbmd0aCgpOyArK2kpCisgICAgICAgIGFyZ0FycmF5LmFwcGVuZChhcmdz
W2ldKTsKKyAgICBpZiAoYXJncy5Jc0NvbnN0cnVjdENhbGwoKSkKKyAgICAgICAgcmV0dXJuIHdy
YXBwZWQtPkNhbGxBc0NvbnN0cnVjdG9yKGFyZ0FycmF5LnNpemUoKSwgYXJnQXJyYXkuZGF0YSgp
KTsKKyAgICByZXR1cm4gd3JhcHBlZC0+Q2FsbEFzRnVuY3Rpb24oYXJncy5UaGlzKCksIGFyZ0Fy
cmF5LnNpemUoKSwgYXJnQXJyYXkuZGF0YSgpKTsKK30KKwordjg6OkhhbmRsZTx2ODo6RnVuY3Rp
b24+IFY4QWRhcHRvckZ1bmN0aW9uOjp3cmFwKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0
LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIHY4OjpJc29sYXRlKiBpc29sYXRlKQoreworICAg
IHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBhZGFwdG9yID0gdjg6OkhhbmRsZTx2ODo6RnVuY3Rp
b24+OjpDYXN0KGdldFRlbXBsYXRlKGlzb2xhdGUpLT5HZXRGdW5jdGlvbigpKTsKKyAgICBhZGFw
dG9yLT5TZXROYW1lKHY4U3RyaW5nKG5hbWUuc3RyaW5nKCksIGlzb2xhdGUpKTsKKyAgICBhZGFw
dG9yLT5TZXRIaWRkZW5WYWx1ZShWOEhpZGRlblByb3BlcnR5TmFtZTo6YWRhcHRvckZ1bmN0aW9u
UGVlcigpLCBvYmplY3QpOworICAgIG9iamVjdC0+U2V0SGlkZGVuVmFsdWUoVjhIaWRkZW5Qcm9w
ZXJ0eU5hbWU6OmFkYXB0b3JGdW5jdGlvblBlZXIoKSwgYWRhcHRvcik7CisgICAgcmV0dXJuIGFk
YXB0b3I7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShD
VVNUT01fRUxFTUVOVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OEFkYXB0b3JGdW5jdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBZGFwdG9y
RnVuY3Rpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZDljZWNiNjgwNmZjMWJlM2JlMDEzNTY5Y2M2MDBmYTUy
YTNhZmJmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhB
ZGFwdG9yRnVuY3Rpb24uaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBWOEFkYXB0b3JGdW5jdGlv
bl9oCisjZGVmaW5lIFY4QWRhcHRvckZ1bmN0aW9uX2gKKworI2luY2x1ZGUgIlY4QmluZGluZy5o
IgorI2luY2x1ZGUgIlY4SGlkZGVuUHJvcGVydHlOYW1lLmgiCisjaW5jbHVkZSAiV3JhcHBlclR5
cGVJbmZvLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworI2lmIEVOQUJMRShDVVNU
T01fRUxFTUVOVFMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8KKy8vIEZJWE1FKGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgxMzgpOgorLy8gVjhBZGFwdG9y
RnVuY3Rpb24gY2xhc3MgYW5kIFY4V3JhcEFzRnVuY3Rpb24gSURMIGF0dHJpYnV0ZSBhcmUgbmVl
ZGVkIGZvciB0d28gcmVhc29uczoKKy8vIC0gMSkgVjggZG9lc24ndCBhbGxvdyBleHBhbmRpbmcg
dGhlIGludGVybmFsIGZpZWxkIG9mIGZ1bmN0aW9uIG9iamVjdHMuIGh0dHBzOi8vY29kZS5nb29n
bGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD04MzcKKy8vICAgICAgV2ViS2l0IG5lZWQgaXQg
dG8gYXNzb2NpYXRlIGVhY2ggd3JhcHBlciB0byBpdHMgYmFja2luZyBDKysgb2JqZWN0LiBXZSBz
dG9yZSBpdCBpbiBhbiBpbnRlcm5hbCBmaWVsZCBvZiB0aGUgd3JhcHBlZCBvYmplY3QuCisvLyAt
IDIpIEJpbmRpbmcgY29kZWJhc2UgYXNzdW1lcyBldmVyeSB3cmFwcGVyIG9iamVjdCBpcyBjcmVh
dGVkIHRocm91Z2ggT2JqZWN0VGVtcGxhdGU6Ok5ld0luc3RhbmNlKCksIG5vdCBGdW5jdGlvblRl
bXBsYXRlOjpHZXRGdW5jdGlvbigpLgorLy8gT25jZSAxKSBpcyBhZGRyZXNzc2VkLCB3ZSBjb3Vs
ZCBhdHRhY2sgMikgd2l0aCBpdC4gCisvLworY2xhc3MgVjhBZGFwdG9yRnVuY3Rpb24geworcHVi
bGljOgorICAgIHN0YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKKyAgICBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiB1bndyYXAodjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+KTsKKyAgICBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IHdyYXAodjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCB2ODo6SXNvbGF0ZSopOworICAgIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gZ2V0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4pOworCisg
ICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBnZXRUZW1wbGF0
ZSh2ODo6SXNvbGF0ZSogPSAwKTsKKyAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+IGNvbmZpZ3VyZVRlbXBsYXRlKHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPik7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBpbnZvY2F0aW9u
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYpOworfTsKKworaW5saW5lIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gVjhBZGFwdG9yRnVuY3Rpb246OnVud3JhcCh2ODo6SGFuZGxlPHY4OjpGdW5j
dGlvbj4gZnVuY3Rpb24pCit7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZWQgPSBm
dW5jdGlvbi0+R2V0SGlkZGVuVmFsdWUoVjhIaWRkZW5Qcm9wZXJ0eU5hbWU6OmFkYXB0b3JGdW5j
dGlvblBlZXIoKSk7CisgICAgQVNTRVJUKCF3cmFwcGVkLklzRW1wdHkoKSk7CisgICAgQVNTRVJU
KHdyYXBwZWQtPklzT2JqZWN0KCkpOworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
OjpDYXN0KHdyYXBwZWQpOworfQorCitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IFY4
QWRhcHRvckZ1bmN0aW9uOjpnZXQodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QpCit7Cisg
ICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFkYXB0b3JGdW5jdGlvbiA9IG9iamVjdC0+R2V0SGlk
ZGVuVmFsdWUoVjhIaWRkZW5Qcm9wZXJ0eU5hbWU6OmFkYXB0b3JGdW5jdGlvblBlZXIoKSk7Cisg
ICAgQVNTRVJUKCFhZGFwdG9yRnVuY3Rpb24uSXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoYWRhcHRv
ckZ1bmN0aW9uLT5Jc0Z1bmN0aW9uKCkpOworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpGdW5j
dGlvbj46OkNhc3QoYWRhcHRvckZ1bmN0aW9uKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKyNlbmRpZiAvLyBWOEFkYXB0
b3JGdW5jdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERP
TVdyYXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNw
cAppbmRleCBkNDdmZmQzZmNhMTNjZWVmOTAyZTRmOTI4MmFjZDFiZmZlMTNiN2VlLi5mN2ZjMTBh
YzM0M2JkMDAzZDdmNmNlMWIxMDFkYWY3NTQ5ZDE2OTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKIAorI2luY2x1ZGUgIlY4QWRhcHRv
ckZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhET01XaW5k
b3cuaCIKICNpbmNsdWRlICJWOEhUTUxDb2xsZWN0aW9uLmgiCkBAIC0xNDMsNCArMTQ0LDI1IEBA
IGJvb2wgVjhET01XcmFwcGVyOjppc1dyYXBwZXJPZlR5cGUodjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHZhbHVlLCBXcmFwcGVyVHlwZUluZm8qCiAgICAgcmV0dXJuIHR5cGVJbmZvID09IHR5cGU7CiB9
CiAKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCit2ODo6SGFuZGxlPHY4OjpGdW5jdGlv
bj4gVjhET01XcmFwcGVyOjp0b0Z1bmN0aW9uKHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvYmplY3Qp
Cit7CisgICAgcmV0dXJuIFY4QWRhcHRvckZ1bmN0aW9uOjpnZXQodjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0Pjo6Q2FzdChvYmplY3QpKTsKK30KKwordjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IFY4RE9N
V3JhcHBlcjo6dG9GdW5jdGlvbih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCwgQXRvbWlj
U3RyaW5nIG5hbWUsIHY4OjpJc29sYXRlKiBpc29sYXRlKQoreworICAgIHJldHVybiBWOEFkYXB0
b3JGdW5jdGlvbjo6d3JhcChvYmplY3QsIG5hbWUsIGlzb2xhdGUpOworfQorCit2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IFY4RE9NV3JhcHBlcjo6ZnJvbUZ1bmN0aW9uKHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gb2JqZWN0KQoreworICAgIGlmICghb2JqZWN0LT5Jc0Z1bmN0aW9uKCkpCisgICAgICAg
IHJldHVybiBvYmplY3Q7CisgICAgcmV0dXJuIFY4QWRhcHRvckZ1bmN0aW9uOjp1bndyYXAodjg6
OkhhbmRsZTx2ODo6RnVuY3Rpb24+OjpDYXN0KG9iamVjdCkpOworfQorCisjZW5kaWYgLy8gRU5B
QkxFKENVU1RPTV9FTEVNRU5UUykKKwogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKaW5kZXggNzcwZjliNmE0ZWJkZDlmZmQy
ZDdhYmJhM2ZhYTM2Y2UyMmQxYzM3MC4uNDg5ZjM3MThkNWM1YTM0Yzc3YjdkZGU0OWJhMjNmYTBm
ZDAxMmU0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFw
cGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKQEAg
LTY1LDYgKzY1LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIGJvb2wg
aXNET01XcmFwcGVyKHY4OjpIYW5kbGU8djg6OlZhbHVlPik7CiAgICAgICAgIHN0YXRpYyBib29s
IGlzV3JhcHBlck9mVHlwZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4sIFdyYXBwZXJUeXBlSW5mbyop
OwogCisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKyAgICAgICAgLy8gVXNlZCBmb3IgVjhX
cmFwQXNGdW5jdGlvbiwgd2hpY2ggaXMgdXNlZCBvbmx5IGJ5IENVU1RPTV9FTEVNRU5UUworICAg
ICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IHRvRnVuY3Rpb24odjg6OkhhbmRs
ZTx2ODo6VmFsdWU+KTsKKyAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiB0
b0Z1bmN0aW9uKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4sIEF0b21pY1N0cmluZyBuYW1lLCB2ODo6
SXNvbGF0ZSopOworICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBmcm9tRnVu
Y3Rpb24odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pik7CisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9F
TEVNRU5UUykKKwogICAgICAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMgZnVuY3Rpb24gaW4gVjhE
T01XcmFwcGVyPwogICAgICAgICBzdGF0aWMgdm9pZCBzZXROYW1lZEhpZGRlblJlZmVyZW5jZSh2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHBhcmVudCwgY29uc3QgY2hhciogbmFtZSwgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGNoaWxkKTsKICAgICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mN2VlNmZjOTRhOGM0
NjJhYjZjMjY2MWRiZTIzODkxNTBmN2E4ZjNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVudC5jcHAKQEAgLTAsMCArMSw3NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWOEhUTUxDdXN0b21FbGVtZW50LmgiCisK
KyNpbmNsdWRlICJDdXN0b21FbGVtZW50SGVscGVycy5oIgorI2luY2x1ZGUgIkN1c3RvbUVsZW1l
bnRSZWdpc3RyeS5oIgorI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhDdXN0
b21FbGVtZW50Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJWOEhUTUxTcGFuRWxlbWVudC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCisv
LyBGSVhNRTogRWFjaCBjdXN0b20gZWxlbWVudHMgc2hvdWxkIGhhdmUgaXRzIG93biBHZXRUZW1w
bGF0ZSBtZXRob2Qgc28gdGhhdCBpdCBjYW4gYmUgZGVyaXZlZCBmcm9tIGRpZmZlcmVudCBzdXBl
ciBlbGVtZW50LgorV3JhcHBlclR5cGVJbmZvIFY4SFRNTEN1c3RvbUVsZW1lbnQ6OmluZm8gPSB7
ICZWOEhUTUxTcGFuRWxlbWVudDo6R2V0VGVtcGxhdGUsIFY4SFRNTEVsZW1lbnQ6OmRlcmVmT2Jq
ZWN0LCAwLCAwLCAwLCAwLCAmVjhIVE1MU3BhbkVsZW1lbnQ6OmluZm8sIFdyYXBwZXJUeXBlT2Jq
ZWN0UHJvdG90eXBlIH07CisKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhIVE1MQ3VzdG9tRWxl
bWVudDo6Y3JlYXRlV3JhcHBlcihQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBpbXBsLCB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit7
CisgICAgQVNTRVJUKGltcGwpOworCisgICAgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKiBjb25z
dHJ1Y3RvciA9IEN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6Y29uc3RydWN0b3JPZihpbXBsLmdldCgp
KTsKKyAgICBpZiAoIWNvbnN0cnVjdG9yKQorICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6
T2JqZWN0Pjo6Q2FzdChXZWJDb3JlOjp0b1Y4KHRvSFRNTFVua25vd25FbGVtZW50KGltcGwuZ2V0
KCkpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpKTsKKworICAgIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6Y3JlYXRlV3JhcHBlcihjcmVhdGlvbkNvbnRl
eHQsICZpbmZvLCBpbXBsLmdldCgpKTsKKyAgICBpZiAod3JhcHBlci5Jc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiB3cmFwcGVyOworCisgICAgLy8gVGhlIGNvbnN0cnVjdG9yIGFuZCByZWdpc3Rl
cmVkIGxpZmVjeWNsZSBjYWxsYmFja3Mgc2hvdWxkIGJlIHZpc2libGUgb25seSBmcm9tIG1haW4g
d29ybGQuCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIG5lZWRlZCBvbmNlIGVhY2gg
Y3VzdG9tIGVsZW1lbnQgaGFzIGl0cyBvd24gRnVuY3Rpb25UZW1wbGF0ZQorICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgxMzgKKyAgICBpZiAoQ3VzdG9t
RWxlbWVudEhlbHBlcnM6OmlzQ3VzdG9tRWxlbWVudHNBbGxvd2VkKGNyZWF0aW9uQ29udGV4dC0+
Q3JlYXRpb25Db250ZXh0KCkpKSB7CisgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY29u
c3RydWN0b3JXYXBwZXIgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KFdlYkNvcmU6OnRv
VjgoY29uc3RydWN0b3IsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSkpOworICAgICAgICB3cmFw
cGVyLT5TZXRQcm90b3R5cGUoY29uc3RydWN0b3JXYXBwZXItPkdldCh2OFN0cmluZygicHJvdG90
eXBlIiwgaXNvbGF0ZSkpKTsKKyAgICAgICAgd3JhcHBlci0+U2V0KHY4U3RyaW5nKCJjb25zdHJ1
Y3RvciIsIGlzb2xhdGUpLCBjb25zdHJ1Y3RvcldhcHBlcik7CisgICAgfQorCisgICAgVjhET01X
cmFwcGVyOjphc3NvY2lhdGVPYmplY3RXaXRoV3JhcHBlcihpbXBsLCAmaW5mbywgd3JhcHBlciwg
aXNvbGF0ZSk7CisKKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKworI2VuZGlmIC8vIEVOQUJMRShD
VVNUT01fRUxFTUVOVFMpCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SFRNTEN1c3RvbUVsZW1lbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SFRNTEN1c3RvbUVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YmZi
ZjM5ZmE3MGQzZjZmZjdkMjgwMjc2MmI0OWY0MWVkMjY1MTJjCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVudC5oCkBAIC0wLDAg
KzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFY4SFRNTEN1c3RvbUVsZW1lbnRfaAorI2RlZmluZSBWOEhUTUxDdXN0
b21FbGVtZW50X2gKKworI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4RE9NV3Jh
cHBlci5oIgorI2luY2x1ZGUgIlY4SFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJWOEhUTUxVbmtu
b3duRWxlbWVudC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgSFRNTEVsZW1lbnQ7CisKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1F
TlRTKQorCitjbGFzcyBWOEhUTUxDdXN0b21FbGVtZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
V3JhcHBlclR5cGVJbmZvIGluZm87CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
dG9WOChIVE1MRWxlbWVudCosIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0
ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSogPSAwKTsKKyAgICBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGVXcmFwcGVyKFBhc3NSZWZQdHI8SFRNTEVs
ZW1lbnQ+LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+LCB2ODo6SXNvbGF0ZSopOworfTsKKworaW5s
aW5lIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhIVE1MQ3VzdG9tRWxlbWVudDo6dG9WOChIVE1M
RWxlbWVudCogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4
OjpJc29sYXRlKiBpc29sYXRlKQoreworICAgIGlmIChVTkxJS0VMWSghaW1wbCkpCisgICAgICAg
IHJldHVybiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHY4TnVsbFdpdGhDaGVjayhpc29s
YXRlKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gRE9NRGF0YVN0b3Jl
OjpnZXRXcmFwcGVyKGltcGwsIGlzb2xhdGUpOworICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiB3cmFwcGVyOworICAgIHJldHVybiBWOEhUTUxDdXN0b21FbGVtZW50
OjpjcmVhdGVXcmFwcGVyKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7Cit9CisKKyNl
bHNlIC8vIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKK2NsYXNzIFY4SFRNTEN1c3RvbUVsZW1l
bnQgeworcHVibGljOgorICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoSFRN
TEVsZW1lbnQqLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqID0gMCk7Cit9OworCitpbmxpbmUgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBIVE1MQ3VzdG9tRWxlbWVudDo6dG9WOChIVE1MRWxlbWVudCog
aW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRl
KiBpc29sYXRlKQoreworICAgIHJldHVybiB0b1Y4KHRvSFRNTFVua25vd25FbGVtZW50KGltcGwp
LCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKENVU1RP
TV9FTEVNRU5UUykKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVjhIVE1M
Q3VzdG9tRWxlbWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OEhpZGRlblByb3BlcnR5TmFtZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIaWRk
ZW5Qcm9wZXJ0eU5hbWUuaAppbmRleCA5YmIwMWNlMTFmZDJiNDRmMTRjNGUwOWMxNTQ3MWRmODI0
ZTMxOGI4Li43ZjEwYjg4YWQwN2ExNTYwZGY4Y2MyMGZiNzFhODRjMzkzN2NiMTNiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmgKQEAg
LTQ1LDYgKzQ1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIFYoc2NyaXB0U3RhdGUpIFwK
ICAgICBWKHNsZWVwRnVuY3Rpb24pIFwKICAgICBWKHN0YXRlKSBcCisgICAgVihhZGFwdG9yRnVu
Y3Rpb25QZWVyKSBcCiAgICAgVih0b1N0cmluZ1N0cmluZykgXAogICAgIFYodHlwZWRBcnJheUhp
ZGRlbkNvcHlNZXRob2QpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvckN1c3RvbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21FbGVtZW50Q29uc3RydWN0b3JDdXN0b20u
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjM0Mzc0ZjY3Njg4MGM5Mjg1NGYyODg5NDZhNjM5MTUxYTBiM2IyMzUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhD
dXN0b21FbGVtZW50Q29uc3RydWN0b3JDdXN0b20uY3BwCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKiAK
KyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyogbWV0OgorKiAKKyogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
Kyogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKiBkaXN0cmlidXRpb24u
CisqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyogCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJW
OEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oIgorCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhIVE1MQ3Vz
dG9tRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Y4OjpIYW5kbGU8djg6OlZh
bHVlPiBWOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y2FsbEFzRnVuY3Rpb25DYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIGlmICghYXJncy5Jc0NvbnN0cnVjdENh
bGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCJET00gb2JqZWN0IGNvbnN0cnVj
dG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4iLCBhcmdzLkdldElzb2xhdGUoKSk7
CisgICAgaWYgKENvbnN0cnVjdG9yTW9kZTo6Y3VycmVudCgpID09IENvbnN0cnVjdG9yTW9kZTo6
V3JhcEV4aXN0aW5nT2JqZWN0KQorICAgICAgICByZXR1cm4gYXJncy5Ib2xkZXIoKTsKKworICAg
IEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciogaW1wbCA9IHRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkp
OworICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudCA9IGltcGwtPmNyZWF0ZUVsZW1lbnQo
KTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOworICAg
IHJldHVybiBWOEhUTUxDdXN0b21FbGVtZW50Ojp0b1Y4KGVsZW1lbnQuZ2V0KCksIGFyZ3MuSG9s
ZGVyKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lMTIyMmMxODQ5YTNlMzdiMjQ2ZjUwN2Y2M2E5MDMyYjIxMTk1MGE3Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5j
cHAKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDdXN0b21F
bGVtZW50Q29uc3RydWN0b3IuaCIKKworI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKKyNp
bmNsdWRlICJDdXN0b21FbGVtZW50SGVscGVycy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisj
aW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9y
PiBDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6OmNyZWF0ZShTY3JpcHRTdGF0ZSogc3RhdGUsIERv
Y3VtZW50KiBkb2N1bWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTY3JpcHRWYWx1ZSYgcHJvdG90eXBlKQoreworICAgIFJlZlB0cjxD
dXN0b21FbGVtZW50Q29uc3RydWN0b3I+IGNyZWF0ZWQgPSBhZG9wdFJlZihuZXcgQ3VzdG9tRWxl
bWVudENvbnN0cnVjdG9yKGRvY3VtZW50LCB0YWdOYW1lLCBuYW1lKSk7CisgICAgQ3VzdG9tRWxl
bWVudEhlbHBlcnM6OmluaXRpYWxpemVDb25zdHJ1Y3RvcldyYXBwZXIoY3JlYXRlZC5nZXQoKSwg
cHJvdG90eXBlLCBzdGF0ZSk7CisgICAgcmV0dXJuIGNyZWF0ZWQucmVsZWFzZSgpOworfQorCitD
dXN0b21FbGVtZW50Q29uc3RydWN0b3I6OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvcihEb2N1bWVu
dCogZG9jdW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIGNvbnN0IFN0cmluZyYg
bmFtZSkKKyAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCisgICAgLCBtX3RhZ05hbWUodGFnTmFt
ZSkKKyAgICAsIG1fbmFtZShuYW1lKQoreworfQorCitDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6
On5DdXN0b21FbGVtZW50Q29uc3RydWN0b3IoKQoreworfQorCit2b2lkIEN1c3RvbUVsZW1lbnRD
b25zdHJ1Y3Rvcjo6d2lsbERlc3Ryb3lEb2N1bWVudCgpCit7CisgICAgbV9kb2N1bWVudCA9IDA7
Cit9CisKK1Bhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6
Y3JlYXRlRWxlbWVudCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2RvY3VtZW50KQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICByZXR1cm4gSFRNTEVsZW1lbnQ6OmNyZWF0ZShtX3RhZ05hbWUsIG1fZG9j
dW1lbnQpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oIGIv
U291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjRlYWM2OTEwOGIyZjZmM2M2ZTVjMWFjYTVlY2ExYjVjZmQ5Yjk1NjIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmgKQEAgLTAs
MCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yX2gKKyNkZWZpbmUgQ3Vz
dG9tRWxlbWVudENvbnN0cnVjdG9yX2gKKworI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisK
KyNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBIVE1MRWxlbWVudDsKK2NsYXNzIFNjcmlwdFN0YXRl
OworY2xhc3MgU2NyaXB0VmFsdWU7CisKK2NsYXNzIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciA6
IHB1YmxpYyBSZWZDb3VudGVkPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4geworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gY3JlYXRlKFNj
cmlwdFN0YXRlKiwgRG9jdW1lbnQqLCBjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgU3RyaW5n
JiwgY29uc3QgU2NyaXB0VmFsdWUmKTsKKworICAgIHZpcnR1YWwgfkN1c3RvbUVsZW1lbnRDb25z
dHJ1Y3RvcigpOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9k
b2N1bWVudDsgfQorICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUoKSBjb25zdCB7IHJl
dHVybiBtX3RhZ05hbWU7IH0KKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUoKSBjb25zdCB7
IHJldHVybiBtX25hbWU7IH0KKworICAgIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGNyZWF0ZUVs
ZW1lbnQoKSBjb25zdDsKKyAgICB2b2lkIHdpbGxEZXN0cm95RG9jdW1lbnQoKTsKKyAgICAKK3By
aXZhdGU6CisgICAgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKERvY3VtZW50KiwgY29uc3QgUXVh
bGlmaWVkTmFtZSYsIGNvbnN0IFN0cmluZyYpOworCisgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7
CisgICAgUXVhbGlmaWVkTmFtZSBtX3RhZ05hbWU7CisgICAgQXRvbWljU3RyaW5nIG1fbmFtZTsK
K307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKKyNlbmRpZiAv
LyBDdXN0b21FbGVtZW50Q29uc3RydWN0b3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3Vz
dG9tRWxlbWVudENvbnN0cnVjdG9yLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40N2M1MzBmODdkZWFlNjdmYTVm
ZGExZTEzOWIwNWNiOThhMDczYjBkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5pZGwKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKK1sKKyAgICBDb25kaXRpb25hbD1DVVNUT01fRUxFTUVOVFMsCisgICAgVjhFbmFibGVk
QXRSdW50aW1lPWN1c3RvbURPTUVsZW1lbnRzLAorICAgIFY4V3JhcEFzRnVuY3Rpb24sCisgICAg
Q3VzdG9tQ2FsbAorXSBpbnRlcmZhY2UgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yIHsKK307CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmRlZjUxNDFhZDZhZTFiZmFkNGNhNTBjMTBkZDBiNjA4ODE2ZjEyMzIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmNwcApAQCAtMCww
ICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0
aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDdXN0b21F
bGVtZW50UmVnaXN0cnkuaCIKKworI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5o
IgorI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRIZWxwZXJzLmgiCisjaW5jbHVkZSAiRGljdGlvbmFy
eS5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgi
CisjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KKworI2lmIEVOQUJMRShDVVNUT01fRUxFTUVO
VFMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpDdXN0
b21FbGVtZW50UmVnaXN0cnkoRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogbV9kb2N1bWVudChk
b2N1bWVudCkKK3sKK30KKworQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Ojp+Q3VzdG9tRWxlbWVudFJl
Z2lzdHJ5KCkKK3sKKyAgICBmb3IgKENvbnN0cnVjdG9yTWFwOjppdGVyYXRvciBpID0gbV9jb25z
dHJ1Y3RvcnMuYmVnaW4oKTsgaSAhPSBtX2NvbnN0cnVjdG9ycy5lbmQoKTsgKytpKQorICAgICAg
ICBpLT52YWx1ZS0+d2lsbERlc3Ryb3lEb2N1bWVudCgpOworfQorCitDdXN0b21FbGVtZW50Q29u
c3RydWN0b3IqIEN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6Y29uc3RydWN0b3JPZihIVE1MRWxlbWVu
dCogZWxlbWVudCkKK3sKKyAgICBDdXN0b21FbGVtZW50UmVnaXN0cnkqIHNlbGYgPSBlbGVtZW50
LT5kb2N1bWVudCgpLT5yZWdpc3RyeSgpOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIHNlbGYtPmZpbmQoZWxlbWVudC0+dGFnUU5hbWUoKSk7Cit9CisKK2Jv
b2wgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Ojppc1ZhbGlkTmFtZShjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUpCit7CisgICAgc2l6ZV90IGh5cGhlblBvc2l0aW9uID0gbmFtZS5maW5kKCctJyk7Cisg
ICAgaWYgKGh5cGhlblBvc2l0aW9uID09IG5vdEZvdW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIERvY3VtZW50Ojppc1ZhbGlkTmFtZShuYW1lLnN0cmluZygpKTsKK30KKwor
UGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IEN1c3RvbUVsZW1lbnRSZWdpc3Ry
eTo6cmVnaXN0ZXJFbGVtZW50KFNjcmlwdFN0YXRlKiBzdGF0ZSwgY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lLCBjb25zdCBEaWN0aW9uYXJ5JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBpZiAoIUN1c3RvbUVsZW1lbnRIZWxwZXJzOjppc0N1c3RvbUVsZW1lbnRzQWxsb3dlZChz
dGF0ZSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgUXVhbGlmaWVkTmFtZSBuZXdOYW1lKG51
bGxBdG9tLCBuYW1lLmxvd2VyKCksIEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkpOworICAg
IGlmICghaXNWYWxpZE5hbWUobmV3TmFtZS5sb2NhbE5hbWUoKSkpIHsKKyAgICAgICAgZWMgPSBJ
TlZBTElEX0NIQVJBQ1RFUl9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAgICAg
CisgICAgaWYgKGZpbmQobmV3TmFtZSkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VS
UjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgU2NyaXB0VmFsdWUgZGVmYXVsdFBy
b3RvdHlwZSA9IEN1c3RvbUVsZW1lbnRIZWxwZXJzOjpkZWZhdWx0UHJvdG90eXBlT2Yoc3RhdGUp
OworICAgIFJlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IGZyZXNoID0gQ3VzdG9tRWxl
bWVudENvbnN0cnVjdG9yOjpjcmVhdGUoc3RhdGUsIG1fZG9jdW1lbnQsIG5ld05hbWUsICJIVE1M
Q3VzdG9tRWxlbWVudCIsIGRlZmF1bHRQcm90b3R5cGUpOworICAgIG1fY29uc3RydWN0b3JzLmFk
ZChmcmVzaC0+dGFnTmFtZSgpLmltcGwoKSwgZnJlc2gpOworICAgIHJldHVybiBmcmVzaDsKK30K
KworQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKiBDdXN0b21FbGVtZW50UmVnaXN0cnk6OmZpbmQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKK3sKKyAgICBDb25zdHJ1Y3Rvck1hcDo6
Y29uc3RfaXRlcmF0b3IgZm91bmQgPSBtX2NvbnN0cnVjdG9ycy5maW5kKG5hbWUuaW1wbCgpKTsK
KyAgICByZXR1cm4gKGZvdW5kICE9IG1fY29uc3RydWN0b3JzLmVuZCgpKSA/IGZvdW5kLT52YWx1
ZS5nZXQoKSA6IDA7Cit9CisKK1Bhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IEN1c3RvbUVsZW1lbnRS
ZWdpc3RyeTo6Y3JlYXRlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAor
eworICAgIGlmIChDdXN0b21FbGVtZW50Q29uc3RydWN0b3IqIGZvdW5kID0gZmluZChuYW1lKSkK
KyAgICAgICAgcmV0dXJuIGZvdW5kLT5jcmVhdGVFbGVtZW50KCk7CisgICAgcmV0dXJuIDA7Cit9
CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmQ4YmViY2MwMzBhZjFk
ZTQwYTAyNWIxMjZlNjUzNDA1MDQwNjU5YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuaApAQCAtMCwwICsxLDc3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAg
IGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBDdXN0b21FbGVtZW50UmVnaXN0cnlfaAorI2RlZmluZSBDdXN0b21FbGVtZW50UmVn
aXN0cnlfaAorCisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKworI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKKyNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCisjaW5jbHVkZSAiU2NyaXB0
VmFsdWUuaCIKKyNpbmNsdWRlICJTdXBwbGVtZW50YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBDdXN0b21FbGVtZW50Q29uc3RydWN0b3I7CitjbGFzcyBEaWN0aW9uYXJ5OworY2xh
c3MgRG9jdW1lbnQ7CitjbGFzcyBIVE1MRWxlbWVudDsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ7CitjbGFzcyBRdWFsaWZpZWROYW1lOworCitjbGFzcyBDdXN0b21FbGVtZW50UmVnaXN0
cnkgOiBwdWJsaWMgUmVmQ291bnRlZDxDdXN0b21FbGVtZW50UmVnaXN0cnk+IHsKK3B1YmxpYzoK
KyAgICBleHBsaWNpdCBDdXN0b21FbGVtZW50UmVnaXN0cnkoRG9jdW1lbnQqKTsKKyAgICB+Q3Vz
dG9tRWxlbWVudFJlZ2lzdHJ5KCk7CisKKyAgICBQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25z
dHJ1Y3Rvcj4gcmVnaXN0ZXJFbGVtZW50KFdlYkNvcmU6OlNjcmlwdFN0YXRlKiwgY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lLCBjb25zdCBEaWN0aW9uYXJ5JiBvcHRpb25zLCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKiBmaW5kKGNvbnN0IFF1YWxpZmllZE5h
bWUmKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBjcmVhdGVFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKKworICAgIHN0YXRpYyBDdXN0b21FbGVtZW50Q29u
c3RydWN0b3IqIGNvbnN0cnVjdG9yT2YoSFRNTEVsZW1lbnQqKTsKKworcHJpdmF0ZToKKyAgICBz
dGF0aWMgYm9vbCBpc1ZhbGlkTmFtZShjb25zdCBBdG9taWNTdHJpbmcmKTsKKworICAgIHR5cGVk
ZWYgSGFzaE1hcDxRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lSW1wbCosIFJlZlB0cjxDdXN0
b21FbGVtZW50Q29uc3RydWN0b3I+ID5Db25zdHJ1Y3Rvck1hcDsKKworICAgIERvY3VtZW50KiBt
X2RvY3VtZW50OworICAgIENvbnN0cnVjdG9yTWFwIG1fY29uc3RydWN0b3JzOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9FTEVNRU5UUykK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggYWM4ZTk4NmY2OWNiMTllNGY0NzMy
YTg4YmM4NTkwNzhjZWVmNGNkMy4uZjU0ZjBhZGFmODY4MmJmMmUxYTA3Y2E3NTA3ODg2YWNmNmVh
ZWU1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC00NiwxMSArNDYsMTQgQEAKICNpbmNs
dWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKICNpbmNsdWRlICJDb250ZXh0RmVhdHVyZXMu
aCIKICNpbmNsdWRlICJDb29raWVKYXIuaCIKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50Q29uc3Ry
dWN0b3IuaCIKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50UmVnaXN0cnkuaCIKICNpbmNsdWRlICJE
T01JbXBsZW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkRPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaCIK
ICNpbmNsdWRlICJET01TZWxlY3Rpb24uaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNs
dWRlICJEYXRlQ29tcG9uZW50cy5oIgorI2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIKICNpbmNsdWRl
ICJEb2N1bWVudEV2ZW50UXVldWUuaCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKQEAgLTY3NSw2ICs2NzgsMTAgQEAgdm9pZCBEb2N1
bWVudDo6cmVtb3ZlZExhc3RSZWYoKQogICAgICAgICBtX2Z1bGxTY3JlZW5FbGVtZW50U3RhY2su
Y2xlYXIoKTsKICNlbmRpZgogCisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKyAgICAgICAg
bV9yZWdpc3RyeS5jbGVhcigpOworI2VuZGlmCisKICAgICAgICAgZGV0YWNoUGFyc2VyKCk7CiAK
ICAgICAgICAgLy8gcmVtb3ZlRGV0YWNoZWRDaGlsZHJlbigpIGRvZXNuJ3QgYWx3YXlzIHVucmVn
aXN0ZXIgSURzLApAQCAtODQzLDYgKzg1MCwyMCBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+IERvY3Vt
ZW50OjpjcmVhdGVFbGVtZW50KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgRXhjZXB0aW9uQwog
ICAgIHJldHVybiBjcmVhdGVFbGVtZW50KFF1YWxpZmllZE5hbWUobnVsbEF0b20sIG5hbWUsIG51
bGxBdG9tKSwgZmFsc2UpOwogfQogCisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKK1Bhc3NS
ZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiBEb2N1bWVudDo6cmVnaXN0ZXJFbGVtZW50
KFdlYkNvcmU6OlNjcmlwdFN0YXRlKiBzdGF0ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICByZXR1cm4gcmVnaXN0ZXJFbGVtZW50KHN0YXRlLCBu
YW1lLCBEaWN0aW9uYXJ5KCksIGVjKTsKK30KKworUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29u
c3RydWN0b3I+IERvY3VtZW50OjpyZWdpc3RlckVsZW1lbnQoV2ViQ29yZTo6U2NyaXB0U3RhdGUq
IHN0YXRlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IERpY3Rpb25hcnkmIG9wdGlv
bnMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghbV9yZWdpc3RyeSkKKyAgICAgICAg
bV9yZWdpc3RyeSA9IGFkb3B0UHRyKG5ldyBDdXN0b21FbGVtZW50UmVnaXN0cnkodGhpcykpOwor
ICAgIHJldHVybiBtX3JlZ2lzdHJ5LT5yZWdpc3RlckVsZW1lbnQoc3RhdGUsIG5hbWUsIG9wdGlv
bnMsIGVjKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCiBQYXNzUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IERvY3VtZW50OjpjcmVhdGVEb2N1bWVudEZyYWdtZW50KCkK
IHsKICAgICByZXR1cm4gRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuaAppbmRleCA4NThlNDU5MGU3NjU3M2I5ODYzNTI0ZjMxMTJjNjAzZTVmMjE2
NTA5Li5lOWE4MmE4NjljODQ2MTE0OTZkZjAxOTc3NzI4M2QwYmRmODIyMDhjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuaApAQCAtNjksNiArNjksOCBAQCBjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0
OwogY2xhc3MgQ2hhcmFjdGVyRGF0YTsKIGNsYXNzIENvbW1lbnQ7CiBjbGFzcyBDb250ZXh0RmVh
dHVyZXM7CitjbGFzcyBDdXN0b21FbGVtZW50Q29uc3RydWN0b3I7CitjbGFzcyBDdXN0b21FbGVt
ZW50UmVnaXN0cnk7CiBjbGFzcyBET01JbXBsZW1lbnRhdGlvbjsKIGNsYXNzIERPTU5hbWVkRmxv
d0NvbGxlY3Rpb247CiBjbGFzcyBET01TZWxlY3Rpb247CkBAIC0xMTY0LDYgKzExNjYsMTMgQEAg
cHVibGljOgogICAgIFRleHRBdXRvc2l6ZXIqIHRleHRBdXRvc2l6ZXIoKSB7IHJldHVybiBtX3Rl
eHRBdXRvc2l6ZXIuZ2V0KCk7IH0KICNlbmRpZgogCisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5U
UykKKyAgICBQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gcmVnaXN0ZXJFbGVt
ZW50KFdlYkNvcmU6OlNjcmlwdFN0YXRlKiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBFeGNl
cHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IHJl
Z2lzdGVyRWxlbWVudChXZWJDb3JlOjpTY3JpcHRTdGF0ZSosIGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZSwgY29uc3QgRGljdGlvbmFyeSYgb3B0aW9ucywgRXhjZXB0aW9uQ29kZSYpOworICAgIFBh
c3NSZWZQdHI8RWxlbWVudD4gY3JlYXRlQ3VzdG9tRWxlbWVudChjb25zdCBBdG9taWNTdHJpbmcm
IHRhZ05hbWUpOworICAgIEN1c3RvbUVsZW1lbnRSZWdpc3RyeSogcmVnaXN0cnkoKSBjb25zdCB7
IHJldHVybiBtX3JlZ2lzdHJ5LmdldCgpOyB9CisjZW5kaWYKKwogICAgIHZvaWQgYWRqdXN0Rmxv
YXRRdWFkc0ZvclNjcm9sbEFuZEFic29sdXRlWm9vbUFuZEZyYW1lU2NhbGUoVmVjdG9yPEZsb2F0
UXVhZD4mLCBSZW5kZXJPYmplY3QqKTsKICAgICB2b2lkIGFkanVzdEZsb2F0UmVjdEZvclNjcm9s
bEFuZEFic29sdXRlWm9vbUFuZEZyYW1lU2NhbGUoRmxvYXRSZWN0JiwgUmVuZGVyT2JqZWN0Kik7
CiAKQEAgLTE1MzUsNiArMTU0NCwxMCBAQCBwcml2YXRlOgogICAgIE93blB0cjxUZXh0QXV0b3Np
emVyPiBtX3RleHRBdXRvc2l6ZXI7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDVVNUT01fRUxFTUVO
VFMpCisgICAgT3duUHRyPEN1c3RvbUVsZW1lbnRSZWdpc3RyeT4gbV9yZWdpc3RyeTsKKyNlbmRp
ZgorCiAgICAgYm9vbCBtX3NjaGVkdWxlZFRhc2tzQXJlU3VzcGVuZGVkOwogICAgIAogICAgIGJv
b2wgbV92aXN1YWxVcGRhdGVzQWxsb3dlZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9tYWtlX25hbWVzLnBsIGIvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKaW5kZXgg
MjAxZjQ1ZjQ0ZTg2ODg3MDk0NzQzM2UzMDVkNjcxNzU4NzhjZTgzYS4uMzViYTkxNGQ0MjY5NjRl
YTUyNjgxMGIwZDQ4ZjE4NjQwMWIyZGExMSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L21ha2VfbmFtZXMucGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKQEAg
LTExNzIsOCArMTE3Miw4IEBAIEVORAogOwogICAgIH0gZWxzaWYgKCR3cmFwcGVyRmFjdG9yeVR5
cGUgZXEgIlY4IikgewogICAgICAgICBwcmludCBGIDw8RU5ECisjaW5jbHVkZSAiVjhIVE1MQ3Vz
dG9tRWxlbWVudC5oIgogI2luY2x1ZGUgIlY4JHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnQu
aCIKLSAgICAgICAgCiAjaW5jbHVkZSA8djguaD4KIEVORAogOwpAQCAtMTI3NCw2ICsxMjc0LDEx
IEBAIEVORAogICAgIHJldHVybiBWOFNWR0VsZW1lbnQ6OmNyZWF0ZVdyYXBwZXIoZWxlbWVudCwg
Y3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIEVORAogOworICAgICAgICB9IGVsc2lmICgkcGFy
YW1ldGVyc3tuYW1lc3BhY2V9IGVxICJIVE1MIikgeworICAgICAgICAgICAgcHJpbnQgRiA8PEVO
RAorICAgIHJldHVybiBWOEhUTUxDdXN0b21FbGVtZW50Ojp0b1Y4KGVsZW1lbnQsIGNyZWF0aW9u
Q29udGV4dCwgaXNvbGF0ZSk7CitFTkQKKzsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IHByaW50IEYgPDxFTkQKICAgICByZXR1cm4gd3JhcCh0byRwYXJhbWV0ZXJze2ZhbGxiYWNrSW50
ZXJmYWNlTmFtZX0oZWxlbWVudCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxEb2N1bWVudC5pZGwKaW5kZXggMjVmMGE1YzM5MDM1MTE0YjVkZjE5MTdjMjk1
MjkxNjBhOWI0N2M5OC4uN2MyOWZjYjVkYzE4OTJhYWFjNzJmNTI0MDM2M2VlMmMyNGQyM2Q5ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaWRsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmlkbApAQCAtNTMsNiArNTMsMTEgQEAKICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgRWxlbWVudCBhY3RpdmVFbGVtZW50OwogICAgIGJvb2xlYW4g
aGFzRm9jdXMoKTsKIAorI2lmIGRlZmluZWQoRU5BQkxFX0NVU1RPTV9FTEVNRU5UUykgJiYgRU5B
QkxFX0NVU1RPTV9FTEVNRU5UUworICAgIFtWOEVuYWJsZWRBdFJ1bnRpbWU9Y3VzdG9tRE9NRWxl
bWVudHMsIENvbmRpdGlvbmFsPUNVU1RPTV9FTEVNRU5UUywgSW1wbGVtZW50ZWRBcz1yZWdpc3Rl
ckVsZW1lbnQsIENhbGxXaXRoPVNjcmlwdFN0YXRlXQorICAgIEN1c3RvbUVsZW1lbnRDb25zdHJ1
Y3RvciB3ZWJraXRSZWdpc3RlcihpbiBET01TdHJpbmcgbmFtZSwgaW4gW09wdGlvbmFsXSBEaWN0
aW9uYXJ5IG9wdGlvbnMpIHJhaXNlcyhET01FeGNlcHRpb24pOworI2VuZGlmCisKICAgICAvLyBE
ZXByZWNhdGVkIGF0dHJpYnV0ZXMKICAgICAgICAgICAgICBbVHJlYXROdWxsQXM9TnVsbFN0cmlu
Z10gYXR0cmlidXRlIERPTVN0cmluZyBiZ0NvbG9yOwogICAgICAgICAgICAgIFtUcmVhdE51bGxB
cz1OdWxsU3RyaW5nXSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGZnQ29sb3I7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL2ZlYXR1cmVzLmd5cGkKaW5kZXggYzI0NGFkOWQxZjg3OTM5N2RkNmQ3MTI4MDY1OTY2MzY1
ZDQ1Mjk4YS4uMGRkM2YzMzNjZGRhMzFlZDBhZDQ3ZTk0NmUwZWY0ZmQ1NDAzYjFkYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQpAQCAtNTQsNiArNTQsNyBAQAogICAgICAgJ0VO
QUJMRV9DU1NfVFJBTlNGT1JNU19BTklNQVRJT05TX1RSQU5TSVRJT05TX1VOUFJFRklYRUQ9MCcs
CiAgICAgICAnRU5BQkxFX0NTU19WQVJJQUJMRVM9MScsCiAgICAgICAnRU5BQkxFX0NTU19TVElD
S1lfUE9TSVRJT049MScsCisgICAgICAnRU5BQkxFX0NVU1RPTV9FTEVNRU5UUz0xJywKICAgICAg
ICdFTkFCTEVfQ1VTVE9NX1NDSEVNRV9IQU5ETEVSPTAnLAogICAgICAgJ0VOQUJMRV9EQVNIQk9B
UkRfU1VQUE9SVD0wJywKICAgICAgICdFTkFCTEVfREFUQV9UUkFOU0ZFUl9JVEVNUz0xJywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlJ1bnRpbWVGZWF0dXJl
cy5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUnVudGltZUZlYXR1cmVzLmgK
aW5kZXggMmE0OTg5ZDkzZTQxOWQ3NzcwODgzODhkOGYwMDgxNGUwNDExODI2Mi4uYzdjMjdkOGY0
Y2FlNzU5NjU0ZmI1MWZjNmQyOWU2YjVhM2U5OTMyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViUnVudGltZUZlYXR1cmVzLmgKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViUnVudGltZUZlYXR1cmVzLmgKQEAgLTEyNSw2ICsxMjUsOSBA
QCBwdWJsaWM6CiAgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgdm9pZCBlbmFibGVTaGFkb3dET00o
Ym9vbCk7CiAgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgYm9vbCBpc1NoYWRvd0RPTUVuYWJsZWQo
KTsKIAorICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIHZvaWQgZW5hYmxlQ3VzdG9tRE9NRWxlbWVu
dHMoYm9vbCk7CisgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgYm9vbCBpc0N1c3RvbURPTUVsZW1l
bnRzRW5hYmxlZCgpOworCiAgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgdm9pZCBlbmFibGVTdHls
ZVNjb3BlZChib29sKTsKICAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBib29sIGlzU3R5bGVTY29w
ZWRFbmFibGVkKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlJ1bnRpbWVGZWF0dXJlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJSdW50
aW1lRmVhdHVyZXMuY3BwCmluZGV4IDAxOWI2NzM4YTcxMWY5OWQwZjViYzUzMjRkYzIzN2UzMzJk
YjZmN2YuLjFlODk3MzU4ZGM4NDgxNThhNzdjMjUyYzIzOGEwZmUwZDY1YjQ5YTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlJ1bnRpbWVGZWF0dXJlcy5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUnVudGltZUZlYXR1cmVzLmNwcApAQCAt
NDY3LDYgKzQ2NywyNSBAQCBib29sIFdlYlJ1bnRpbWVGZWF0dXJlczo6aXNTaGFkb3dET01FbmFi
bGVkKCkKICNlbmRpZgogfQogCit2b2lkIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlQ3VzdG9t
RE9NRWxlbWVudHMoYm9vbCBlbmFibGUpCit7CisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykK
KyAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzZXRDdXN0b21ET01FbGVtZW50cyhlbmFibGUp
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZW5hYmxlKTsKKyNlbmRpZgorfQorCitib29sIFdl
YlJ1bnRpbWVGZWF0dXJlczo6aXNDdXN0b21ET01FbGVtZW50c0VuYWJsZWQoKQoreworI2lmIEVO
QUJMRShDVVNUT01fRUxFTUVOVFMpCisgICAgcmV0dXJuIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OmN1c3RvbURPTUVsZW1lbnRzRW5hYmxlZCgpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7Cisj
ZW5kaWYKK30KKworCiB2b2lkIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlU3R5bGVTY29wZWQo
Ym9vbCBlbmFibGUpCiB7CiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKZGlmZiAtLWdpdCBhL1Rv
b2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA3ZDJkNTc2NTNlMjZlM2U1ODcy
MWUwNzkxMTBhMWU4YmU2MGI4ZTY3Li43MTcyMDYxMDFmNjRlOWM0ZmU4ZTE5M2QxNmFmZjEzZmVi
YjVlZTU0IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTUgQEAKKzIwMTMtMDEtMjcgIEhhamltZSBNb3JyaXRhICA8bW9ycml0YUBn
b29nbGUuY29tPgorCisgICAgICAgIFtDdXN0b20gRWxlbWVudHNdIEltcGxlbWVudCBiYXJlLWJv
bmUgZG9jdW1lbnQucmVnaXN0ZXIoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTAwMjI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkZWQgZW5hYmxlQ3VzdG9tRE9NRWxlbWVudHMgZmxhZy4KKworICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHA6CisgICAgICAgIChU
ZXN0U2hlbGw6OlRlc3RTaGVsbCk6CisKIDIwMTMtMDEtMjkgIEFsYW4gQ3V0dGVyICA8YWxhbmN1
dHRlckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgTmVlZCBhIGNyLWxpbnV4IGRlYnVnIEVXUyBi
b3QKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5j
cHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCmluZGV4IDRh
ZjljMGU3OWI3MTFkMDc2NTllYzEwZmEzZmM4NzEzYzFjNTljMzkuLjc2ZjE3MjExOTYzYTJlNjk5
MzczNTI2MThkNWI1YjMyY2VhZTVkMGEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vVGVzdFNoZWxsLmNwcApAQCAtMTQ0LDYgKzE0NCw3IEBAIFRlc3RTaGVsbDo6VGVzdFNoZWxs
KCkKICAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZVZpZGVvVHJhY2sodHJ1ZSk7CiAgICAg
V2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVHYW1lcGFkKHRydWUpOwogICAgIFdlYlJ1bnRpbWVG
ZWF0dXJlczo6ZW5hYmxlU2hhZG93RE9NKHRydWUpOworICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6
ZW5hYmxlQ3VzdG9tRE9NRWxlbWVudHModHJ1ZSk7CiAgICAgV2ViUnVudGltZUZlYXR1cmVzOjpl
bmFibGVTdHlsZVNjb3BlZCh0cnVlKTsKICAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZVNj
cmlwdGVkU3BlZWNoKHRydWUpOwogICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlUmVxdWVz
dEF1dG9jb21wbGV0ZSh0cnVlKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA2MmI3NTYwNzdkNzdlN2RjYmMyY2Q5YTZmM2M1
MTczYjU5M2MyMTZlLi4zMmFkMWQ5ZjZkMTQ3YmIxZGE5NDVmNDlmMmFiZDBkZjBmMWNiYjUyIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTMtMDEtMjcgIEhhamltZSBNb3JyaXRhICA8bW9ycml0
YUBnb29nbGUuY29tPgorCisgICAgICAgIFtDdXN0b20gRWxlbWVudHNdIEltcGxlbWVudCBiYXJl
LWJvbmUgZG9jdW1lbnQucmVnaXN0ZXIoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTAwMjI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBmYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFz
aWMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lz
dGVyLWJhc2ljLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1Rl
c3RFeHBlY3RhdGlvbnM6CisKIDIwMTMtMDEtMjkgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtp
bUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBFRkwgR3JhZGVuaW5nLgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLWJh
c2ljLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1y
ZWdpc3Rlci1iYXNpYy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjNjNWViZmUxYWVmMDcyOGE3
Mzk5YzA4ZGE1YzE3ZTU4ZTg3Yjg2MgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1iYXNpYy1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwzNCBAQAorVGVzdGluZyBkb2N1bWVudC5yZWdpc3RlcigpIGJhc2ljIGJlaGF2aW9ycy4K
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgZG9jdW1lbnQucmVnaXN0ZXIo
J2ZvbycpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSW52YWxpZENoYXJhY3RlckVycm9yOiBET00g
RXhjZXB0aW9uIDUuCitQQVNTIGRvY3VtZW50LnJlZ2lzdGVyKCd4Zm9vJykgdGhyZXcgZXhjZXB0
aW9uIEVycm9yOiBJbnZhbGlkQ2hhcmFjdGVyRXJyb3I6IERPTSBFeGNlcHRpb24gNS4KK1BBU1Mg
dHlwZW9mIGZvb0NvbnN0cnVjdG9yIGlzICdmdW5jdGlvbicKK1BBU1MgZm9vQ29uc3RydWN0b3Iu
cHJvdG90eXBlIGlzIEhUTUxTcGFuRWxlbWVudC5wcm90b3R5cGUKK1BBU1MgZG9jdW1lbnQucmVn
aXN0ZXIoJ3gtZm9vJykgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJbnZhbGlkU3RhdGVFcnJvcjog
RE9NIEV4Y2VwdGlvbiAxMS4KK1BBU1MgZG9jdW1lbnQucmVnaXN0ZXIoJ1gtRk9PJykgdGhyZXcg
ZXhjZXB0aW9uIEVycm9yOiBJbnZhbGlkU3RhdGVFcnJvcjogRE9NIEV4Y2VwdGlvbiAxMS4KK1BB
U1MgZm9vQ29uc3RydWN0b3IoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBET00gb2JqZWN0
IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4uCitQQVNTIGNyZWF0
ZWRGb28uX19wcm90b19fIGlzIGZvb0NvbnN0cnVjdG9yLnByb3RvdHlwZQorUEFTUyBjcmVhdGVk
Rm9vLmNvbnN0cnVjdG9yIGlzIGZvb0NvbnN0cnVjdG9yCitQQVNTIGNyZWF0ZWRGb28udGFnTmFt
ZSBpcyAnWC1GT08nCitQQVNTIGNyZWF0ZWRGb28udGV4dENvbnRlbnQgaXMgJ0hlbGxvJworUEFT
UyBjcmVhdGVkRm9vLmxhc3RDaGlsZCBpcyBjaGlsZERpdgorUEFTUyBwYXJzZWRGb28uX19wcm90
b19fIGlzIGZvb0NvbnN0cnVjdG9yLnByb3RvdHlwZQorUEFTUyBwYXJzZWRGb28udGFnTmFtZSBp
cyAnWC1GT08nCitQQVNTIHBhcnNlZEZvby5zb21lUHJvcGVydHkgaXMgY29udGFpbmVyLmZpcnN0
Q2hpbGQuc29tZVByb3BlcnR5CitQQVNTIGNyZWF0ZWRCYXIudGFnTmFtZSBpcyAnWC1CQVInCitQ
QVNTIGNyZWF0ZWRVcHBlckJhci5jb25zdHJ1Y3RvciBpcyBiYXJDb25zdHJ1Y3RvcgorUEFTUyBj
cmVhdGVkVXBwZXJCYXIudGFnTmFtZSBpcyAnWC1CQVInCitQQVNTIGNyZWF0ZWRNaXhlZEJhci5j
b25zdHJ1Y3RvciBpcyBiYXJDb25zdHJ1Y3RvcgorUEFTUyBjcmVhdGVkTWl4ZWRCYXIudGFnTmFt
ZSBpcyAnWC1CQVInCitQQVNTIGNvbnRhaW5lci5maXJzdENoaWxkLmNvbnN0cnVjdG9yIGlzIGJh
ckNvbnN0cnVjdG9yCitQQVNTIGNvbnRhaW5lci5maXJzdENoaWxkLnRhZ05hbWUgaXMgJ1gtQkFS
JworUEFTUyBjb250YWluZXIubGFzdENoaWxkLmNvbnN0cnVjdG9yIGlzIGJhckNvbnN0cnVjdG9y
CitQQVNTIGNvbnRhaW5lci5sYXN0Q2hpbGQudGFnTmFtZSBpcyAnWC1CQVInCitQQVNTIChuZXcg
KGRvY3VtZW50LnJlZ2lzdGVyKCd5LWJhcicpKSgpKS50YWdOYW1lIGlzICdZLUJBUicKK1BBU1Mg
KG5ldyAoZG9jdW1lbnQucmVnaXN0ZXIoJ3l6LWJhcicpKSgpKS50YWdOYW1lIGlzICdZWi1CQVIn
CitQQVNTIChuZXcgKGRvY3VtZW50LnJlZ2lzdGVyKCd5LXotYmFyJykpKCkpLnRhZ05hbWUgaXMg
J1ktWi1CQVInCitQQVNTIChuZXcgKGRvY3VtZW50LnJlZ2lzdGVyKCd5LS1iYXInKSkoKSkudGFn
TmFtZSBpcyAnWS0tQkFSJworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0
b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1
c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1iYXNpYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhlZGJjODI1NWQx
YWJhZjlkYzMxZDE5MjBkMjdlNjQ3MzU0MTM3ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMuaHRtbApAQCAtMCww
ICsxLDg4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPGRpdiBpZD0iY29udGFpbmVyIj48L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigi
VGVzdGluZyBkb2N1bWVudC5yZWdpc3RlcigpIGJhc2ljIGJlaGF2aW9ycy4iKTsKKworaWYgKHdp
bmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworZG9jdW1lbnQu
cmVnaXN0ZXIgPSBkb2N1bWVudC5yZWdpc3RlciB8fCBkb2N1bWVudC53ZWJraXRSZWdpc3RlcjsK
KworLy8gSW52YWxpZCBuYW1lcworc2hvdWxkVGhyb3coImRvY3VtZW50LnJlZ2lzdGVyKCdmb28n
KSIsICInRXJyb3I6IEludmFsaWRDaGFyYWN0ZXJFcnJvcjogRE9NIEV4Y2VwdGlvbiA1JyIpOwor
c2hvdWxkVGhyb3coImRvY3VtZW50LnJlZ2lzdGVyKCd4Zm9vJykiLCAiJ0Vycm9yOiBJbnZhbGlk
Q2hhcmFjdGVyRXJyb3I6IERPTSBFeGNlcHRpb24gNSciKTsKKwordmFyIGZvb0NvbnN0cnVjdG9y
ID0gZG9jdW1lbnQucmVnaXN0ZXIoIngtZm9vIik7CitzaG91bGRCZSgidHlwZW9mIGZvb0NvbnN0
cnVjdG9yIiwgIidmdW5jdGlvbiciKTsKK3Nob3VsZEJlKCJmb29Db25zdHJ1Y3Rvci5wcm90b3R5
cGUiLCAiSFRNTFNwYW5FbGVtZW50LnByb3RvdHlwZSIpOworCisvLyBOYW1lIGNvbmZsaWN0cwor
c2hvdWxkVGhyb3coImRvY3VtZW50LnJlZ2lzdGVyKCd4LWZvbycpIiwgIidFcnJvcjogSW52YWxp
ZFN0YXRlRXJyb3I6IERPTSBFeGNlcHRpb24gMTEnIik7CitzaG91bGRUaHJvdygiZG9jdW1lbnQu
cmVnaXN0ZXIoJ1gtRk9PJykiLCAiJ0Vycm9yOiBJbnZhbGlkU3RhdGVFcnJvcjogRE9NIEV4Y2Vw
dGlvbiAxMSciKTsKKworLy8gQ2FsbCBhcyBmdW5jdGlvbgorc2hvdWxkVGhyb3coImZvb0NvbnN0
cnVjdG9yKCkiLCAiJ1R5cGVFcnJvcjogRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUg
Y2FsbGVkIGFzIGEgZnVuY3Rpb24uJyIpCisKKy8vIENvbnN0cnVjdG9yIGluaXRpYXRlZCBpbnN0
YW50aWF0aW9uCit2YXIgY3JlYXRlZEZvbyA9IG5ldyBmb29Db25zdHJ1Y3RvcigpOworCisvLyBK
UyBidWlsdC1pbiBwcm9wZXJ0aWVzCitzaG91bGRCZSgiY3JlYXRlZEZvby5fX3Byb3RvX18iLCAi
Zm9vQ29uc3RydWN0b3IucHJvdG90eXBlIik7CitzaG91bGRCZSgiY3JlYXRlZEZvby5jb25zdHJ1
Y3RvciIsICJmb29Db25zdHJ1Y3RvciIpOworCisvLyBOYXRpdmUgZ2V0dGVyCitzaG91bGRCZSgi
Y3JlYXRlZEZvby50YWdOYW1lIiwgIidYLUZPTyciKTsKKworLy8gTmF0aXZlIHNldHRlcgorY3Jl
YXRlZEZvby5pbm5lckhUTUwgPSAiSGVsbG8iOworc2hvdWxkQmUoImNyZWF0ZWRGb28udGV4dENv
bnRlbnQiLCAiJ0hlbGxvJyIpOworCisvLyBOYXRpdmUgbWV0aG9kCit2YXIgY2hpbGREaXYgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKK2NyZWF0ZWRGb28uYXBwZW5kQ2hpbGQoY2hp
bGREaXYpOworc2hvdWxkQmUoImNyZWF0ZWRGb28ubGFzdENoaWxkIiwgImNoaWxkRGl2Iik7CisK
Ky8vIFBhcnNlciBpbml0aWF0ZWQgaW5zdGFudGlhdGlvbgordmFyIGNvbnRhaW5lciA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJjb250YWluZXIiKTsKK2NvbnRhaW5lci5pbm5lckhUTUwgPSAi
PHgtZm9vPjwveC1mb28+IjsKK3BhcnNlZEZvbyA9IGNvbnRhaW5lci5maXJzdENoaWxkOworCitz
aG91bGRCZSgicGFyc2VkRm9vLl9fcHJvdG9fXyIsICJmb29Db25zdHJ1Y3Rvci5wcm90b3R5cGUi
KTsKK3Nob3VsZEJlKCJwYXJzZWRGb28udGFnTmFtZSIsICInWC1GT08nIik7CisKKy8vIEVuc3Vy
aW5nIHRoZSB3cmFwcGVyIGlzIHJldGFpbmVkCitwYXJzZWRGb28uc29tZVByb3BlcnR5ID0gImhl
bGxvIjsKK3Nob3VsZEJlKCJwYXJzZWRGb28uc29tZVByb3BlcnR5IiwgImNvbnRhaW5lci5maXJz
dENoaWxkLnNvbWVQcm9wZXJ0eSIpOworCisvLyBIYXZpbmcgYW5vdGhlciBjb25zdHJ1Y3Rvcgor
dmFyIGJhckNvbnN0cnVjdG9yID0gZG9jdW1lbnQucmVnaXN0ZXIoIngtYmFyIik7Cit2YXIgY3Jl
YXRlZEJhciA9IG5ldyBiYXJDb25zdHJ1Y3RvcigpOworc2hvdWxkQmUoImNyZWF0ZWRCYXIudGFn
TmFtZSIsICInWC1CQVInIik7CisKKy8vIFdpdGggaXJyZWd1bGFyIGNhc2VzCit2YXIgY3JlYXRl
ZFVwcGVyQmFyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiWC1CQVIiKTsKK3ZhciBjcmVhdGVk
TWl4ZWRCYXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJYLUJhciIpOworc2hvdWxkQmUoImNy
ZWF0ZWRVcHBlckJhci5jb25zdHJ1Y3RvciIsICJiYXJDb25zdHJ1Y3RvciIpOworc2hvdWxkQmUo
ImNyZWF0ZWRVcHBlckJhci50YWdOYW1lIiwgIidYLUJBUiciKTsKK3Nob3VsZEJlKCJjcmVhdGVk
TWl4ZWRCYXIuY29uc3RydWN0b3IiLCAiYmFyQ29uc3RydWN0b3IiKTsKK3Nob3VsZEJlKCJjcmVh
dGVkTWl4ZWRCYXIudGFnTmFtZSIsICInWC1CQVInIik7CisKK2NvbnRhaW5lci5pbm5lckhUTUwg
PSAiPFgtQkFSPjwvWC1CQVI+PFgtQmFyPjwvWC1CYXI+IjsKK3Nob3VsZEJlKCJjb250YWluZXIu
Zmlyc3RDaGlsZC5jb25zdHJ1Y3RvciIsICJiYXJDb25zdHJ1Y3RvciIpOworc2hvdWxkQmUoImNv
bnRhaW5lci5maXJzdENoaWxkLnRhZ05hbWUiLCAiJ1gtQkFSJyIpOworc2hvdWxkQmUoImNvbnRh
aW5lci5sYXN0Q2hpbGQuY29uc3RydWN0b3IiLCAiYmFyQ29uc3RydWN0b3IiKTsKK3Nob3VsZEJl
KCJjb250YWluZXIubGFzdENoaWxkLnRhZ05hbWUiLCAiJ1gtQkFSJyIpOworCisvLyBTdHJhbmdl
IGJ1dCB2YWxpZCBuYW1lcworc2hvdWxkQmUoIihuZXcgKGRvY3VtZW50LnJlZ2lzdGVyKCd5LWJh
cicpKSgpKS50YWdOYW1lIiwgIidZLUJBUiciKTsKK3Nob3VsZEJlKCIobmV3IChkb2N1bWVudC5y
ZWdpc3RlcigneXotYmFyJykpKCkpLnRhZ05hbWUiLCAiJ1laLUJBUiciKTsKK3Nob3VsZEJlKCIo
bmV3IChkb2N1bWVudC5yZWdpc3RlcigneS16LWJhcicpKSgpKS50YWdOYW1lIiwgIidZLVotQkFS
JyIpOworc2hvdWxkQmUoIihuZXcgKGRvY3VtZW50LnJlZ2lzdGVyKCd5LS1iYXInKSkoKSkudGFn
TmFtZSIsICInWS0tQkFSJyIpOworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggMDZlNzZiMmY1YzUzNTE5
NDE3OWYyMTIyYzc4ZTVkNWMzN2JhZWUyYy4uODJlZjM5OWRmNTg4YzIxNzZmNTBmNzJjY2Q2ZWYy
OTg0MTRkYWRlNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBl
Y3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMK
QEAgLTEwMTMsNiArMTAxMyw5IEBAIHdlYmtpdC5vcmcvYi83NjQ4OSBjb21wb3NpdGluZy93ZWJn
bC93ZWJnbC1yZWZsZWN0aW9uLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIHdlYmtpdC5vcmcv
Yi83NjQzOSBbIERlYnVnIF0gZmFzdC9kb20vc2hhZG93L2NvbnRlbnQtZWxlbWVudC1hcGkuaHRt
bCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzc2NDM5IFsgRGVidWcgXSBmYXN0L2RvbS9zaGFk
b3cvY29udGVudC1lbGVtZW50LW91dHNpZGUtc2hhZG93Lmh0bWwgWyBGYWlsdXJlIF0KIAorIyBF
TkFCTEUoQ1VTVE9NX0VMRU1FTlRTKSBpcyBkaXNhYmxlZC4KK2Zhc3QvZG9tL2N1c3RvbQorCiAj
IENTUyBWYXJpYWJsZXMgYXJlIG5vdCB5ZXQgZW5hYmxlZC4KIHdlYmtpdC5vcmcvYi84NTU4MCBm
YXN0L2Nzcy92YXJpYWJsZXMKIHdlYmtpdC5vcmcvYi84NTU4MCBpbnNwZWN0b3Ivc3R5bGVzL3Zh
cmlhYmxlcwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187003</attachid>
            <date>2013-02-07 00:18:12 -0800</date>
            <delta_ts>2013-02-07 02:52:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100229-20130207171448.patch</filename>
            <type>text/plain</type>
            <size>89551</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyMDY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTZiYjJlNzVkNTVhZDNk
MTRjYmZlZjA1NWU5MzJlYmRhMDIxMmYxNy4uNDE1OTgzNTY3YTcxY2YwM2EzZWE2OTJiYzkxNjc5
ZjZjODRlNDk2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwNCBAQAorMjAxMy0wMi0wNiAgSGFq
aW1lIE1vcnJpdGEgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKworICAgICAgICBbQ3VzdG9tIEVs
ZW1lbnRzXSBJbXBsZW1lbnQgYmFyZS1ib25lIGRvY3VtZW50LnJlZ2lzdGVyKCkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDIyOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGltcGxl
bWVudHMgcHJlZml4ZWQgdmVyc2lvbiBvZiBkb2N1bWVudC5yZWdpc3RlcigpLCB3aXRoIG1pbmlt
YWwgZmVhdHVyZSBzdXBwb3J0LgorICAgICAgICAtIFRoZSBmZWF0dXJlIGlzIGd1YXJkZWQgYnkg
RU5BQkxFKENVU1RPTV9FTEVNRU5UUykgYW5kIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmN1c3Rv
bURPTUVsZW1lbnRzRW5hYmxlZCgpLgorICAgICAgICAtIFRoaXMgYmFyZS1ib25lIHZlcnNpb24g
b25seSByZWNvZ25pemVzICJuYW1lIiBhbmQgInByb3RvdHlwZSIgcGFyYW1ldGVycy4gSXQgZG9l
c24ndCBzdXBwb3J0IGRlZmF1bHQgdmFsdWUgb2YgInByb3RvdHlwZSIgcGFyYW1ldGVyLgorICAg
ICAgICAtIEN1cnJlbnRseSBvbmx5IFY4IGlzIHN1cHBvcnRlZC4gSlNDIGJpbmRpbmcgbmVlZHMg
aXRzIG93biBiaW5kaW5nIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgID0gTWFqb3IgbmV3IGNs
YXNzZXMgdW5kZXIgZG9tLzoKKworICAgICAgICBUaGUgZG9tIG1vZHVsZSBoYXMgdHdvIG5ldyBj
bGFzc2VzOgorICAgICAgICAtIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvcjogQSByZXR1cm4gdmFs
dWUgb2YgZG9jdW1lbnQucmVnaXN0ZXIoKQorICAgICAgICAgIHdoaWNoIGhvbGRzIHRoZSBjdXN0
b20gZWxlbWVudCBkZWZpbml0aW9uLgorICAgICAgICAtIEN1c3RvbUVsZW1lbnRSZWdpc3RyeTog
QSBjb2xsZWN0aW9uIG9mIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciBvYmplY3RzLgorICAgICAg
ICAgIEN1c3RvbUVsZW1lbnRSZWdpc3RyeSBpbnN0YW5jZSBpcyBjcmVhdGVkIHBlciBEb2N1bWVu
dCBhbmQgaXMgb3duZWQgYnkgdGhlIERvY3VtZW50LgorCisgICAgICAgIEN1c3RvbUVsZW1lbnRD
b25zdHJ1Y3RvciBrbm93cyB0aGUgZGVmaW5pdGlvbiBvZiBlYWNoIGN1c3RvbQorICAgICAgICBl
bGVtZW50LCB3aGljaCBpcyByZWdpc3RlcmVkIGJ5IGRvY3VtZW50LnJlZ2lzdGVyKCkuIFRoZSBu
YW1lIGFuZAorICAgICAgICBvdGhlciBvcHRpb25zIGFyZSBoZWxkIGJ5IHRoaXMgb2JqZWN0LiBD
dXN0b21FbGVtZW50UmVnaXN0cnkgb3ducyBhIHNldAorICAgICAgICBvZiB0aGUgcmVnaXN0ZXJl
ZCBjb25zdHJ1Y3RvcnMuIFRoZSByZWdpc3RyeSBndWFyYW50ZWVzIGludmFyaWFudHMKKyAgICAg
ICAgbGlrZSB2YWxpZGl0eSBhbmQgdW5pcXVlbmVzcyBvZiB0aGUgZWxlbWVudCBuYW1lcy4KKwor
ICAgICAgICA9IEEgY2hhbmdlIG9uIG1ha2VfbmFtZXMucGwKKworICAgICAgICBUaGlzIGNoYW5n
ZSB0d2Vha3MgbWFrZV9uYW1lcy5wbCAob3IgZ2VuZXJhdGVkIEhUTUxFbGVtZW50RmFjdG9yeSkK
KyAgICAgICAgdG8gaG9vayB0aGUgY3JlYXRpb25zIG9mIHVua25vd24gZWxlbWVudHMuIFNvbWUg
b2YgZWxlbWVudCBuYW1lcworICAgICAgICB3aGljaCBjb21lIHRvIHRoZSBmYWxsYmFjayBwYXRo
IGNhbiBiZSBvbmUgb2YgcmVnaXN0ZXJlZCBjdXN0b20KKyAgICAgICAgZWxlbWVudC4KKworICAg
ICAgICA9IFtWOFdyYXBBc0Z1bmN0aW9uXSBleHRlbmRlZCBhdHRyaWJ1dGU6CisKKyAgICAgICAg
VGhlIGRvY3VtZW50LnJlZ2lzdGVyKCkgQVBJIHJldHVybnMgYSBjb25zdHJ1Y3RvcgorICAgICAg
ICBmdW5jdGlvbi4gSG93ZXZlciwgdGhlIFY4IGJpbmRpbmcgY3VycmVudGx5IGRvZXNuJ3Qgc3Vw
cG9ydCBpdC4gVG8KKyAgICAgICAgbWFrZSBpdCBwb3NzaWJsZSwgdGhpcyBjaGFuZ2UgaW50cm9k
dWNlcyAiVjhXcmFwQXNGdW5jdGlvbiIKKyAgICAgICAgZXh0ZW5kZWQgYXR0cmlidXRlIGZvciBh
bm5vdGF0aW5nIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciBJREwKKyAgICAgICAgaW50ZXJmYWNl
LgorCisgICAgICAgIFY4V3JhcEFzRnVuY3Rpb24gd3JhcHMgdGhlIGFubm90YXRlZCBpbnRlcmZh
Y2Ugd2l0aCBhIEphdmFTY3JpcHQKKyAgICAgICAgZnVuY3Rpb24sIHdoaWNoIGNhbGxzIHRoZSBv
cmlnaW5hbCBvYmplY3QgYXMgYSBmdW5jdGlvbiwgb3IgYXMgYQorICAgICAgICBjb25zdHJ1Y3Rv
cgorCisgICAgICAgIFdpdGggdGhpcyB3cmFwcGVyIGZ1bmN0aW9uLCB0aGVyZSBhcmUgdHdvIGxl
dmVscyBvZiBpbmRpcmVjdGlvbgorICAgICAgICBiZXR3ZWVuIG5hdGl2ZSBDKysgb2JqZWN0IGFu
ZCBhdXRob3ItdmlzaWJsZSBKUyBmdW5jdGlvbjoKKworICAgICAgICBbSlMgQWRhcHRvciBGaWN0
aW9uXSA8LShoaWRkZW4gcHJvcGVydHkpLT4gW0pTIFdyYXBwZXIgT2JqZWN0XSAtKGludGVybmFs
IGZpZWxkKS0+IFtDKysgTmF0aXZlIG9iamVjdF0KKworICAgICAgICBUaGUgY29kZSBnZW5lcmF0
b3IgZ2VuZXJhdGVzIHRoZSBiaW5kaW5nIGNvZGUgd2hpY2ggZGVhbHMgd2l0aAorICAgICAgICB0
aGlzIGluZGlyZWN0aW9uLiAgQWxzbywgdGhlcmUgaXMgYSBzZXQgb2YgaGVscGVyIGZ1bmN0aW9u
cyBpbgorICAgICAgICBWOEFkYXB0b3JGdW5jdGlvbi5oL2NwcCB3aGljaCB0YWtlIGNhcmUgb2Yg
dGhpcyBpbmRpcmVjdGlvbi4KKyAgICAgICAgVjhET01XcmFwcGVyLmNwcC9oIHdvcmtzIGFzIGEg
ZmFjYWRlIGZvciB0aGVzZSBBUElzIGFuZCBpcyB1c2VkIGZyb20KKyAgICAgICAgdGhlIGdlbmVy
YXRlZCBjb2RlLgorCisgICAgICAgIFRoaXMgcmVkdW5kYW5jeSBjb21lcyBmcm9tIGxpbWl0YXRp
b25zIG9mIGJvdGggVjggYmluZGluZ3MgYW5kIFY4CisgICAgICAgIGVtYmVkZGluZyBBUEkuIFNl
ZSBidWcgMTA4MTM4IGZvciBkZXRhaWxzLgorCisgICAgICAgID0gVjhIVE1MQ3VzdG9tRWxlbWVu
dAorCisgICAgICAgIFVubGlrZSBidWlsdC1pbiBIVE1MIGVsZW1lbnRzLCBhbnkgY3VzdG9tIGVs
ZW1lbnQgaGFzIG5vCisgICAgICAgIGNvcnJlc3BvbmRpbmcgQysrIGNsYXNzLiBJbnN0ZWFkLCBk
b2N1bWVudC5yZWdpc3RlcigpIHNob3VsZCBhbGxvdworICAgICAgICBwYXNzaW5nIGEgcHJvdG90
eXBlIG9iamVjdCBmb3IgdGhlIGVsZW1lbnRzIGJlaW5nIHJlZ2lzdGVyZWQuCisKKyAgICAgICAg
QWx0aG91Z2ggdGhpcyBmaXJzdCB2ZXJzaW9uIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgb3B0aW9uYWwg
cHJvdG90eXBlCisgICAgICAgIHBhcmFtZXRlciB5ZXQsIFY4SFRNTEN1c3RvbUVsZW1lbnQgY2xh
c3MgaXMgbWFkZSBmb3IgYSBwbHVtYmluZworICAgICAgICBmb3Igc3VwcG9ydGluZyBzdWNoIGZl
YXR1cmVzIGluIGNvbWluZyBjaGFuZ2VzLiBUaGlzIGNsYXNzCisgICAgICAgIGVuY2Fwc3VsYXRl
cyBKUyB3cmFwcGVyIG9iamVjdCBjcmVhdGlvbiBmb3IgY3VzdG9tIGVsZW1lbnQKKyAgICAgICAg
aW5zdGFuY2VzLiBGb3IgZXhhbXBsZSwgaXQgdGFrZXMgY2FyZSBvZiBwcm90b3R5cGUgY2hhaW4g
c2V0dXAuIEFzCisgICAgICAgIHdlIHN1cHBvcnQgdGhlICJwcm90b3R5cGUiIG9wdGlvbmFsIHBh
cmFtZXRlciBmb3IgZG9jdW1lbnQucmVnaXN0ZXIoKSwKKyAgICAgICAgdGhpcyBwbHVtYmluZyB3
aWxsIGJlIGV4dGVuZGVkLgorCisgICAgICAgID0gQ3VzdG9tIERPTSBlbGVtZW50cyBhbmQgbXVs
dGlwbGUgd29ybGRzCisKKyAgICAgICAgSW4gdGhpcyBwYXRjaCwgY3VzdG9tIGVsZW1lbnQgcmVn
aXN0cmF0aW9uIGFuZCBpbnN0YW50aWF0aW9uIGlzIG5vdCBhbGxvd2VkCisgICAgICAgIGluIG5v
bi1tYWluIHdvcmxkIGFuZCBkb2N1bWVudC5yZWdpc3RlcigpIEFQSSBqdXN0IGZhaWxzIHRoZXJl
LgorCisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1iYXNp
Yy5odG1sCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIFdlYkNv
cmUuZ3lwaToKKyAgICAgICAgKiBiaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVy
ZXMuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJl
cy5oOgorICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6Y3VzdG9tRE9N
RWxlbWVudHNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNldEN1c3RvbURPTUVsZW1lbnRzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0
ZXMudHh0OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50SGVscGVyczo6aW5pdGlhbGl6
ZUNvbnN0cnVjdG9yV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpoYXNQcm90b3R5cGVJbkNo
YWluKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRIZWxwZXJzOjppc1ZhbGlkUHJv
dG90eXBlUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRIZWxwZXJz
Ojppc0ZlYXR1cmVBbGxvd2VkKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9DdXN0b21FbGVtZW50
SGVscGVycy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhpZGRl
blByb3BlcnR5TmFtZS5oLgorICAgICAgICAoQ3VzdG9tRWxlbWVudEhlbHBlcnMpOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpWOEFkYXB0b3JGdW5jdGlvbjo6Z2V0VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6VjhBZGFwdG9yRnVuY3Rpb246OmNvbmZpZ3VyZVRlbXBsYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlY4QWRhcHRvckZ1bmN0aW9uOjppbnZvY2F0aW9uQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6VjhBZGFwdG9yRnVuY3Rpb246OndyYXApOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4
QWRhcHRvckZ1bmN0aW9uLmg6IEFkZGVkLgorICAgICAgICAoVjhBZGFwdG9yRnVuY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6VjhBZGFwdG9yRnVuY3Rpb246OnVud3JhcCk6CisgICAgICAgIChX
ZWJDb3JlOjpWOEFkYXB0b3JGdW5jdGlvbjo6Z2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9W
OERPTVdyYXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjp0b0Z1bmN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6ZnJvbUZ1bmN0aW9uKToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaDoKKyAgICAgICAgKFY4RE9NV3JhcHBl
cik6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVudC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6VjhIVE1MQ3VzdG9tRWxlbWVudDo6Y3JlYXRlV3JhcHBlcik6
CisgICAgICAgICogYmluZGluZ3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVudC5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oLgorICAg
ICAgICAoVjhIVE1MQ3VzdG9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpWOEhUTUxDdXN0
b21FbGVtZW50Ojp0b1Y4KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDdXN0b21FbGVtZW50Ojp0
b1Y4KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvckN1c3Rv
bS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b21FbGVtZW50Q29uc3RydWN0
b3I6OmNhbGxBc0Z1bmN0aW9uQ2FsbGJhY2spOgorICAgICAgICAqIGRvbS9DdXN0b21FbGVtZW50
Q29uc3RydWN0b3IuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OEhpZGRlblByb3BlcnR5TmFtZS5oLgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudENvbnN0
cnVjdG9yOjpDdXN0b21FbGVtZW50Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vz
dG9tRWxlbWVudENvbnN0cnVjdG9yOjp+Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6d2lsbERlc3Ryb3lEb2N1bWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6OmNyZWF0ZUVs
ZW1lbnQpOgorICAgICAgICAqIGRvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaC4K
KyAgICAgICAgKEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpD
dXN0b21FbGVtZW50Q29uc3RydWN0b3I6OmRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkN1
c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6dGFnTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0
b21FbGVtZW50Q29uc3RydWN0b3I6Om5hbWUpOgorICAgICAgICAqIGRvbS9DdXN0b21FbGVtZW50
Q29uc3RydWN0b3IuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBkb20vQ3VzdG9tRWxlbWVudFJlZ2lz
dHJ5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVnaXN0cnk6
OkN1c3RvbUVsZW1lbnRSZWdpc3RyeSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50
UmVnaXN0cnk6On5DdXN0b21FbGVtZW50UmVnaXN0cnkpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vz
dG9tRWxlbWVudFJlZ2lzdHJ5Ojpjb25zdHJ1Y3Rvck9mKToKKyAgICAgICAgKFdlYkNvcmU6OkN1
c3RvbUVsZW1lbnRSZWdpc3RyeTo6aXNWYWxpZE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vz
dG9tRWxlbWVudFJlZ2lzdHJ5OjpyZWdpc3RlckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpmaW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVs
ZW1lbnRSZWdpc3RyeTo6Y3JlYXRlRWxlbWVudCk6CisgICAgICAgICogZG9tL0N1c3RvbUVsZW1l
bnRSZWdpc3RyeS5oOiBBZGRlZC4KKyAgICAgICAgKEN1c3RvbUVsZW1lbnRSZWdpc3RyeSk6Cisg
ICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpy
ZW1vdmVkTGFzdFJlZik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVnaXN0ZXJFbGVt
ZW50KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKERvY3VtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWdpc3RyeSk6CisgICAgICAgICogZG9tL21ha2Vf
bmFtZXMucGw6CisgICAgICAgIChwcmludFdyYXBwZXJGYWN0b3J5Q3BwRmlsZSk6CisgICAgICAg
ICogaHRtbC9IVE1MRG9jdW1lbnQuaWRsOgorCisyMDEzLTAxLTI5ICBIYWppbWUgTW9ycml0YSAg
PG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBbQ3VzdG9tIEVsZW1lbnRzXSBJbXBsZW1l
bnQgYmFyZS1ib25lIGRvY3VtZW50LnJlZ2lzdGVyKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDIyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGltcGxlbWVudHMgcHJlZml4ZWQg
dmVyc2lvbiBvZiBkb2N1bWVudC5yZWdpc3RlcigpLCB3aXRoIG1pbmltYWwgZmVhdHVyZSBzdXBw
b3J0LgorICAgICAgICAtIFRoZSBmZWF0dXJlIGlzIGd1YXJkZWQgYnkgRU5BQkxFKENVU1RPTV9F
TEVNRU5UUykgYW5kIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmN1c3RvbURPTUVsZW1lbnRzRW5h
YmxlZCgpLgorICAgICAgICAtIFRoaXMgYmFyZS1ib25lIHZlcnNpb24gb25seSByZWNvZ25pemVz
ICJuYW1lIiBwYXJhbWV0ZXIgYW5kIGlnbm9yZXMgYW55IG90aGVyIG9wdGlvbmFsIHBhcmFtZXRl
cnMuCisgICAgICAgIC0gQ3VycmVudGx5IG9ubHkgVjggaXMgc3VwcG9ydGVkLiBKU0MgYmluZGlu
ZyBuZWVkcyBpdHMgb3duIGJpbmRpbmcgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgPSBNYWpv
ciBuZXcgY2xhc3NlcyB1bmRlciBkb20vOgorCisgICAgICAgIFRoZSBkb20gbW9kdWxlIGhhcyB0
d28gbmV3IGNsYXNzZXM6CisgICAgICAgIC0gQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOiBBIHJl
dHVybiB2YWx1ZSBvZiBkb2N1bWVudC5yZWdpc3RlcigpCisgICAgICAgICAgd2hpY2ggaG9sZHMg
dGhlIGN1c3RvbSBlbGVtZW50IGRlZmluaXRpb24uCisgICAgICAgIC0gQ3VzdG9tRWxlbWVudFJl
Z2lzdHJ5OiBBIGNvbGxlY3Rpb24gb2YgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yIG9iamVjdHMu
CisgICAgICAgICAgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5IGluc3RhbmNlIGlzIGNyZWF0ZWQgcGVy
IERvY3VtZW50IGFuZCBpcyBvd25lZCBieSB0aGUgRG9jdW1lbnQuCisKKyAgICAgICAgQ3VzdG9t
RWxlbWVudENvbnN0cnVjdG9yIGtub3dzIHRoZSBkZWZpbml0aW9uIG9mIGVhY2ggY3VzdG9tCisg
ICAgICAgIGVsZW1lbnQsIHdoaWNoIGlzIHJlZ2lzdGVyZWQgYnkgZG9jdW1lbnQucmVnaXN0ZXIo
KS4gVGhlIG5hbWUgYW5kCisgICAgICAgIG90aGVyIG9wdGlvbnMgYXJlIGhlbGQgYnkgdGhpcyBv
YmplY3QuIEN1c3RvbUVsZW1lbnRSZWdpc3RyeSBvd25zIGEgc2V0CisgICAgICAgIG9mIHRoZSBy
ZWdpc3RlcmVkIGNvbnN0cnVjdG9ycy4gVGhlIHJlZ2lzdHJ5IGd1YXJhbnRlZXMgaW52YXJpYW50
cworICAgICAgICBsaWtlIHZhbGlkaXR5IGFuZCB1bmlxdWVuZXNzIG9mIHRoZSBlbGVtZW50IG5h
bWVzLgorCisgICAgICAgID0gQSBjaGFuZ2Ugb24gbWFrZV9uYW1lcy5wbAorCisgICAgICAgIFRo
aXMgY2hhbmdlIHR3ZWFrcyBtYWtlX25hbWVzLnBsIChvciBnZW5lcmF0ZWQgSFRNTEVsZW1lbnRG
YWN0b3J5KQorICAgICAgICB0byBob29rIHRoZSBjcmVhdGlvbnMgb2YgdW5rbm93biBlbGVtZW50
cy4gU29tZSBvZiBlbGVtZW50IG5hbWVzCisgICAgICAgIHdoaWNoIGNvbWUgdG8gdGhlIGZhbGxi
YWNrIHBhdGggY2FuIGJlIG9uZSBvZiByZWdpc3RlcmVkIGN1c3RvbQorICAgICAgICBlbGVtZW50
LgorCisgICAgICAgID0gW1Y4V3JhcEFzRnVuY3Rpb25dIGV4dGVuZGVkIGF0dHJpYnV0ZToKKwor
ICAgICAgICBUaGUgZG9jdW1lbnQucmVnaXN0ZXIoKSBBUEkgcmV0dXJucyBhIGNvbnN0cnVjdG9y
CisgICAgICAgIGZ1bmN0aW9uLiBIb3dldmVyLCB0aGUgVjggYmluZGluZyBjdXJyZW50bHkgZG9l
c24ndCBzdXBwb3J0IGl0LiBUbworICAgICAgICBtYWtlIGl0IHBvc3NpYmxlLCB0aGlzIGNoYW5n
ZSBpbnRyb2R1Y2VzICJWOFdyYXBBc0Z1bmN0aW9uIgorICAgICAgICBleHRlbmRlZCBhdHRyaWJ1
dGUgZm9yIGFubm90YXRpbmcgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yIElETAorICAgICAgICBp
bnRlcmZhY2UuCisKKyAgICAgICAgVjhXcmFwQXNGdW5jdGlvbiB3cmFwcyB0aGUgYW5ub3RhdGVk
IGludGVyZmFjZSB3aXRoIGEgSmF2YVNjcmlwdAorICAgICAgICBmdW5jdGlvbiwgd2hpY2ggY2Fs
bHMgdGhlIG9yaWdpbmFsIG9iamVjdCBhcyBhIGZ1bmN0aW9uLCBvciBhcyBhCisgICAgICAgIGNv
bnN0cnVjdG9yCisKKyAgICAgICAgV2l0aCB0aGlzIHdyYXBwZXIgZnVuY3Rpb24sIHRoZXJlIGFy
ZSB0d28gbGV2ZWxzIG9mIGluZGlyZWN0aW9uCisgICAgICAgIGJldHdlZW4gbmF0aXZlIEMrKyBv
YmplY3QgYW5kIGF1dGhvci12aXNpYmxlIEpTIGZ1bmN0aW9uOgorCisgICAgICAgIFtKUyBBZGFw
dG9yIEZpY3Rpb25dIDwtKGhpZGRlbiBwcm9wZXJ0eSktPiBbSlMgV3JhcHBlciBPYmplY3RdIC0o
aW50ZXJuYWwgZmllbGQpLT4gW0MrKyBOYXRpdmUgb2JqZWN0XQorCisgICAgICAgIFRoZSBjb2Rl
IGdlbmVyYXRvciBnZW5lcmF0ZXMgdGhlIGJpbmRpbmcgY29kZSB3aGljaCBkZWFscyB3aXRoCisg
ICAgICAgIHRoaXMgaW5kaXJlY3Rpb24uICBBbHNvLCB0aGVyZSBpcyBhIHNldCBvZiBoZWxwZXIg
ZnVuY3Rpb25zIGluCisgICAgICAgIFY4QWRhcHRvckZ1bmN0aW9uLmgvY3BwIHdoaWNoIHRha2Ug
Y2FyZSBvZiB0aGlzIGluZGlyZWN0aW9uLgorICAgICAgICBWOERPTVdyYXBwZXIuY3BwL2ggd29y
a3MgYXMgYSBmYWNhZGUgZm9yIHRoZXNlIEFQSXMgYW5kIGlzIHVzZWQgZnJvbQorICAgICAgICB0
aGUgZ2VuZXJhdGVkIGNvZGUuCisKKyAgICAgICAgVGhpcyByZWR1bmRhbmN5IGNvbWVzIGZyb20g
bGltaXRhdGlvbnMgb2YgYm90aCBWOCBiaW5kaW5ncyBhbmQgVjgKKyAgICAgICAgZW1iZWRkaW5n
IEFQSS4gU2VlIGJ1ZyAxMDgxMzggZm9yIGRldGFpbHMuCisKKyAgICAgICAgPSBWOEhUTUxDdXN0
b21FbGVtZW50CisKKyAgICAgICAgVW5saWtlIGJ1aWx0LWluIEhUTUwgZWxlbWVudHMsIGFueSBj
dXN0b20gZWxlbWVudCBoYXMgbm8KKyAgICAgICAgY29ycmVzcG9uZGluZyBDKysgY2xhc3MuIElu
c3RlYWQsIGRvY3VtZW50LnJlZ2lzdGVyKCkgc2hvdWxkIGFsbG93CisgICAgICAgIHBhc3Npbmcg
YSBwcm90b3R5cGUgb2JqZWN0IGZvciB0aGUgZWxlbWVudHMgYmVpbmcgcmVnaXN0ZXJlZC4KKwor
ICAgICAgICBBbHRob3VnaCB0aGlzIGZpcnN0IHZlcnNpb24gZG9lc24ndCBzdXBwb3J0IHRoZSBv
cHRpb25hbCBwcm90b3R5cGUKKyAgICAgICAgcGFyYW1ldGVyIHlldCwgVjhIVE1MQ3VzdG9tRWxl
bWVudCBjbGFzcyBpcyBtYWRlIGZvciBhIHBsdW1iaW5nCisgICAgICAgIGZvciBzdXBwb3J0aW5n
IHN1Y2ggZmVhdHVyZXMgaW4gY29taW5nIGNoYW5nZXMuIFRoaXMgY2xhc3MKKyAgICAgICAgZW5j
YXBzdWxhdGVzIEpTIHdyYXBwZXIgb2JqZWN0IGNyZWF0aW9uIGZvciBjdXN0b20gZWxlbWVudAor
ICAgICAgICBpbnN0YW5jZXMuIEZvciBleGFtcGxlLCBpdCB0YWtlcyBjYXJlIG9mIHByb3RvdHlw
ZSBjaGFpbiBzZXR1cC4gQXMKKyAgICAgICAgd2Ugc3VwcG9ydCB0aGUgInByb3RvdHlwZSIgb3B0
aW9uYWwgcGFyYW1ldGVyIGZvciBkb2N1bWVudC5yZWdpc3RlcigpLAorICAgICAgICB0aGlzIHBs
dW1iaW5nIHdpbGwgYmUgZXh0ZW5kZWQuCisKKyAgICAgICAgPSBDdXN0b20gRE9NIGVsZW1lbnRz
IGFuZCBtdWx0aXBsZSB3b3JsZHMKKworICAgICAgICBJbiB0aGlzIHBhdGNoLCBjdXN0b20gZWxl
bWVudCByZWdpc3RyYXRpb24gYW5kIGluc3RhbnRpYXRpb24gaXMgbm90IGFsbG93ZWQKKyAgICAg
ICAgaW4gbm9uLW1haW4gd29ybGQgYW5kIGRvY3VtZW50LnJlZ2lzdGVyKCkgQVBJIGp1c3QgZmFp
bHMgdGhlcmUuCisKKyAgICAgICAgVGVzdDogZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lz
dGVyLWJhc2ljLmh0bWwKKworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAg
ICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGJpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJs
ZWRGZWF0dXJlcy5jcHA6CisgICAgICAgICogYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxl
ZEZlYXR1cmVzLmg6CisgICAgICAgIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmN1c3RvbURPTUVsZW1lbnRzRW5hYmxl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzZXRDdXN0b21E
T01FbGVtZW50cyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgu
cG06CisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy9JRExBdHRyaWJ1dGVzLnR4dDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9DdXN0b21FbGVtZW50
SGVscGVycy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudEhlbHBl
cnM6OmluaXRpYWxpemVDb25zdHJ1Y3RvcldyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vz
dG9tRWxlbWVudEhlbHBlcnM6OmRlZmF1bHRQcm90b3R5cGVPZik6CisgICAgICAgIChXZWJDb3Jl
OjpDdXN0b21FbGVtZW50SGVscGVyczo6aXNDdXN0b21FbGVtZW50c0FsbG93ZWQpOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmguCisgICAgICAgIChD
dXN0b21FbGVtZW50SGVscGVycyk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhBZGFwdG9yRnVu
Y3Rpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlY4QWRhcHRvckZ1bmN0aW9uOjpn
ZXRUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOEFkYXB0b3JGdW5jdGlvbjo6Y29uZmln
dXJlVGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhBZGFwdG9yRnVuY3Rpb246Omludm9j
YXRpb25DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOEFkYXB0b3JGdW5jdGlvbjo6d3Jh
cCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhBZGFwdG9yRnVuY3Rpb24uaDogQWRkZWQuCisg
ICAgICAgIChWOEFkYXB0b3JGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpWOEFkYXB0b3JG
dW5jdGlvbjo6dW53cmFwKToKKyAgICAgICAgKFdlYkNvcmU6OlY4QWRhcHRvckZ1bmN0aW9uOjpn
ZXQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpWOERPTVdyYXBwZXI6OnRvRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6VjhE
T01XcmFwcGVyOjpmcm9tRnVuY3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV3Jh
cHBlci5oOgorICAgICAgICAoVjhET01XcmFwcGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9W
OEhUTUxDdXN0b21FbGVtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpWOEhUTUxD
dXN0b21FbGVtZW50OjpjcmVhdGVXcmFwcGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEhU
TUxDdXN0b21FbGVtZW50Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmguCisgICAgICAgIChWOEhUTUxDdXN0b21FbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlY4SFRNTEN1c3RvbUVsZW1lbnQ6OnRvVjgpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEN1c3RvbUVsZW1lbnQ6OnRvVjgpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yQ3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpWOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y2FsbEFzRnVuY3Rpb25DYWxsYmFjayk6
CisgICAgICAgICogZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5jcHA6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmguCisgICAg
ICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6OkN1c3RvbUVsZW1lbnRDb25zdHJ1
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6On5DdXN0
b21FbGVtZW50Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yOjp3aWxsRGVzdHJveURvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3Rv
bUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlRWxlbWVudCk6CisgICAgICAgICogZG9tL0N1c3Rv
bUVsZW1lbnRDb25zdHJ1Y3Rvci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oLgorICAgICAgICAoQ3VzdG9tRWxlbWVudENvbnN0
cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6ZG9j
dW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjp0YWdO
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6bmFtZSk6
CisgICAgICAgICogZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5pZGw6IEFkZGVkLgorICAg
ICAgICAqIGRvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6fkN1c3RvbUVsZW1lbnRSZWdp
c3RyeSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVnaXN0cnk6OmNvbnN0cnVj
dG9yT2YpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5Ojppc1ZhbGlk
TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVnaXN0cnk6OnJlZ2lzdGVy
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVnaXN0cnk6OmZpbmQp
OgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpjcmVhdGVFbGVtZW50
KToKKyAgICAgICAgKiBkb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Lmg6IEFkZGVkLgorICAgICAg
ICAoQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlbW92ZWRMYXN0UmVmKToKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50OjpyZWdpc3RlckVsZW1lbnQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlZ2lzdHJ5KToKKyAgICAgICAgKiBk
b20vbWFrZV9uYW1lcy5wbDoKKyAgICAgICAgKHByaW50V3JhcHBlckZhY3RvcnlDcHBGaWxlKToK
KyAgICAgICAgKiBodG1sL0hUTUxEb2N1bWVudC5pZGw6CisKIDIwMTMtMDItMDYgIE1pa2UgV2Vz
dCAgPG1rd3N0QGNocm9taXVtLm9yZz4KIAogICAgICAgICBFbnRpdHktaGVhZGVyIGV4dGVuc2lv
biBoZWFkZXJzIGhvbm9yZWQgb24gMzA0IHJlc3BvbnNlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKaW5kZXggNjVjMWYwZjIwYjAxNDhjMjIzMWZjMDYyZDllZjliOGMxOTlkZGQxNS4uZTBiZTEz
MjdjMGVkZTkxMWVlNjFhOGI1ZDRlMWY4MmVhNWI4Y2EyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMy0wMS0yNyAgSGFqaW1lIE1vcnJpdGEgIDxtb3Jy
aXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgW0N1c3RvbSBFbGVtZW50c10gSW1wbGVtZW50IGJh
cmUtYm9uZSBkb2N1bWVudC5yZWdpc3RlcigpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMDAyMjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGRlZCBlbmFibGVDdXN0b21ET01FbGVtZW50cyBmbGFnLgor
CisgICAgICAgICogZmVhdHVyZXMuZ3lwaToKKyAgICAgICAgKiBwdWJsaWMvV2ViUnVudGltZUZl
YXR1cmVzLmg6CisgICAgICAgIChXZWJSdW50aW1lRmVhdHVyZXMpOgorICAgICAgICAqIHNyYy9X
ZWJSdW50aW1lRmVhdHVyZXMuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSdW50aW1lRmVhdHVy
ZXM6OmVuYWJsZUN1c3RvbURPTUVsZW1lbnRzKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlJ1bnRpbWVGZWF0dXJlczo6aXNDdXN0b21ET01FbGVtZW50c0VuYWJsZWQp
OgorCiAyMDEzLTAyLTA2ICBUZXJyeSBBbmRlcnNvbiAgPHRkYW5kZXJzb25AY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIEFkZCBzdXBwb3J0IGZvciBnZXN0dXJlIHNjcm9sbCBldmVudHMgdGhhdCBk
byBub3QgcHJvcGFnYXRlIHRvIGVuY2xvc2luZyBzY3JvbGxhYmxlcwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRT
b3VyY2VzLm1ha2UKaW5kZXggNjA1YTIxZWYzZGRmZGYyYTg3ZmU5Y2EyOGExNWUxYWZmOTY1MDE0
My4uOTQwMzI2MmQ3YzdkODQxZTM0ZWFiNzY0MGNjZjBmOGY3MWUyODcyYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9E
ZXJpdmVkU291cmNlcy5tYWtlCkBAIC0yMTQsNiArMjE0LDcgQEAgQklORElOR19JRExTID0gXAog
ICAgICQoV2ViQ29yZSkvZG9tL0NsaXBib2FyZC5pZGwgXAogICAgICQoV2ViQ29yZSkvZG9tL0Nv
bW1lbnQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2RvbS9Db21wb3NpdGlvbkV2ZW50LmlkbCBcCisg
ICAgJChXZWJDb3JlKS9kb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmlkbCBcCiAgICAgJChX
ZWJDb3JlKS9kb20vQ3VzdG9tRXZlbnQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2RvbS9ET01Db3Jl
RXhjZXB0aW9uLmlkbCBcCiAgICAgJChXZWJDb3JlKS9kb20vRE9NRXJyb3IuaWRsIFwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQppbmRleCAxODA0MTU2ZmQ0MDRhMjA0NTE0MGQ5YzFjMDkzMzJjZDQyY2Y2MGRjLi5h
ODU3MGQ4YjRlZTIxNTM1ZjZjNjAwMTlkYWExZjBjODc0ZTIzM2FiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CkBAIC0yMDQsNiArMjA0LDcgQEAKICAgICAgICAgICAgICdkb20vQ2xpcGJvYXJkLmlkbCcsCiAg
ICAgICAgICAgICAnZG9tL0NvbW1lbnQuaWRsJywKICAgICAgICAgICAgICdkb20vQ29tcG9zaXRp
b25FdmVudC5pZGwnLAorICAgICAgICAgICAgJ2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3Iu
aWRsJywKICAgICAgICAgICAgICdkb20vQ3VzdG9tRXZlbnQuaWRsJywKICAgICAgICAgICAgICdk
b20vRE9NQ29yZUV4Y2VwdGlvbi5pZGwnLAogICAgICAgICAgICAgJ2RvbS9ET01FcnJvci5pZGwn
LApAQCAtMTE5Miw2ICsxMTkzLDggQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9BcnJheVZh
bHVlLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0JpbmRpbmdTdGF0ZS5jcHAnLAogICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L0JpbmRpbmdTdGF0ZS5oJywKKyAgICAgICAgICAgICdiaW5k
aW5ncy92OC9DdXN0b21FbGVtZW50SGVscGVycy5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdz
L3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0RP
TURhdGFTdG9yZS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5o
JywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9ET01SZXF1ZXN0U3RhdGUuaCcsCkBAIC0xMjYw
LDYgKzEyNjMsOCBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1NoYXJlZFBlcnNpc3RlbnQu
aCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuY3Bw
JywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5oJywK
KyAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5jcHAnLAorICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmgnLAogICAgICAgICAgICAgJ2Jp
bmRpbmdzL3Y4L1Y4QmluZGluZy5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4Qmlu
ZGluZy5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEJpbmRpbmdNYWNyb3MuaCcsCkBA
IC0xMjgxLDYgKzEyODYsOCBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9s
bGVyLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4R0NGb3JDb250ZXh0RGlzcG9zZS5j
cHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4R0NGb3JDb250ZXh0RGlzcG9zZS5oJywK
KyAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50LmNwcCcsCisgICAg
ICAgICAgICAnYmluZGluZ3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVudC5oJywKICAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5jcHAnLAogICAgICAgICAgICAgJ2Jp
bmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdz
L3Y4L1Y4SW5pdGlhbGl6ZXIuY3BwJywKQEAgLTEzNDEsNiArMTM0OCw3IEBACiAgICAgICAgICAg
ICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q29uc29sZUN1c3RvbS5jcHAnLAogICAgICAgICAgICAg
J2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENvb3JkaW5hdGVzQ3VzdG9tLmNwcCcsCiAgICAgICAgICAg
ICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3J5cHRvQ3VzdG9tLmNwcCcsCisgICAgICAgICAgICAn
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yQ3VzdG9tLmNwcCcs
CiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tRXZlbnRDdXN0b20uY3Bw
JywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxTdGF0ZW1lbnRF
cnJvckNhbGxiYWNrLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3Vz
dG9tWFBhdGhOU1Jlc29sdmVyLmNwcCcsCkBAIC0yNzcyLDYgKzI3ODAsMTAgQEAKICAgICAgICAg
ICAgICdkb20vQ29udGV4dEZlYXR1cmVzLmNwcCcsCiAgICAgICAgICAgICAnZG9tL0NvbnRleHRG
ZWF0dXJlcy5oJywKICAgICAgICAgICAgICdkb20vQ3Jvc3NUaHJlYWRUYXNrLmgnLAorICAgICAg
ICAgICAgJ2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuY3BwJywKKyAgICAgICAgICAgICdk
b20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmgnLAorICAgICAgICAgICAgJ2RvbS9DdXN0b21F
bGVtZW50UmVnaXN0cnkuY3BwJywKKyAgICAgICAgICAgICdkb20vQ3VzdG9tRWxlbWVudFJlZ2lz
dHJ5LmgnLAogICAgICAgICAgICAgJ2RvbS9DdXN0b21FdmVudC5jcHAnLAogICAgICAgICAgICAg
J2RvbS9DdXN0b21FdmVudC5oJywKICAgICAgICAgICAgICdkb20vRE9NQWxsSW5PbmUuY3BwJywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJs
ZWRGZWF0dXJlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVF
bmFibGVkRmVhdHVyZXMuY3BwCmluZGV4IDgyMGY1YTZhZjllYjc0MjM3ODE5Nzk2ZGIyODA1ZDVh
MmU2YTc5M2EuLjc0Zjg1MjgyYzhlYjM0OWVjZmU4OGUwMDY4OGJmY2Q3ZmIwMzkxM2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0
dXJlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5h
YmxlZEZlYXR1cmVzLmNwcApAQCAtMTg5LDYgKzE4OSwxMCBAQCBib29sIFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OmlzU2hhZG93RE9NRW5hYmxlZCA9IGZhbHNlOwogYm9vbCBSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjppc0F1dGhvclNoYWRvd0RPTUZvckFueUVsZW1lbnRFbmFibGVkID0gZmFsc2U7
CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCitib29sIFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OmlzQ3VzdG9tRE9NRWxlbWVudHNFbmFibGVkID0gZmFsc2U7CisjZW5kaWYK
KwogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCiBib29sIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OmlzU3R5bGVTY29wZWRFbmFibGVkID0gZmFsc2U7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgKaW5k
ZXggMjE1MzJlOWNlZWFiNzNlZjcwOGU1NjViZWNhZmE4NDA1MDg1YjVlMC4uNzRjODI0MjMxYTU2
ZTZhZmY3ZTdkMzM4OTBjMGRjNmRmMzczZDhlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgKQEAgLTIxMCw2
ICsyMTAsMTEgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldEF1dGhvclNoYWRvd0RPTUZv
ckFueUVsZW1lbnRFbmFibGVkKGJvb2wgaXNFbmFibGVkKSB7IGlzQXV0aG9yU2hhZG93RE9NRm9y
QW55RWxlbWVudEVuYWJsZWQgPSBpc0VuYWJsZWQ7IH0KICNlbmRpZgogCisjaWYgRU5BQkxFKENV
U1RPTV9FTEVNRU5UUykKKyAgICBzdGF0aWMgYm9vbCBjdXN0b21ET01FbGVtZW50c0VuYWJsZWQo
KSB7IHJldHVybiBpc0N1c3RvbURPTUVsZW1lbnRzRW5hYmxlZDsgfQorICAgIHN0YXRpYyB2b2lk
IHNldEN1c3RvbURPTUVsZW1lbnRzKGJvb2wgaXNFbmFibGVkKSB7IGlzQ3VzdG9tRE9NRWxlbWVu
dHNFbmFibGVkID0gaXNFbmFibGVkOyB9CisjZW5kaWYKKwogI2lmIEVOQUJMRShTVFlMRV9TQ09Q
RUQpCiAgICAgc3RhdGljIGJvb2wgc3R5bGVTY29wZWRFbmFibGVkKCkgeyByZXR1cm4gaXNTdHls
ZVNjb3BlZEVuYWJsZWQ7IH0KICAgICBzdGF0aWMgdm9pZCBzZXRTdHlsZVNjb3BlZEVuYWJsZWQo
Ym9vbCBpc0VuYWJsZWQpIHsgaXNTdHlsZVNjb3BlZEVuYWJsZWQgPSBpc0VuYWJsZWQ7IH0KQEAg
LTM0MSw2ICszNDYsMTAgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCBpc0F1dGhvclNoYWRv
d0RPTUZvckFueUVsZW1lbnRFbmFibGVkOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQ1VTVE9NX0VM
RU1FTlRTKQorICAgIHN0YXRpYyBib29sIGlzQ3VzdG9tRE9NRWxlbWVudHNFbmFibGVkOworI2Vu
ZGlmCisKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQogICAgIHN0YXRpYyBib29sIGlzU3R5bGVT
Y29wZWRFbmFibGVkOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCmluZGV4IDVjZDVlMDM3N2EzMGQ0ZjAzMzUxMTQyZGNk
MmE0OTk3NzliNDViZTcuLjA5ZTgwOTEwMmM5NGVhZGYyYzRjYWUwOWE2ZDYyZTBkNzExYjA1NTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtCkBAIC0zNTIsMTMgKzM1MiwyMCBAQCBFTkQKICAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgImZhbHNlO1xuIik7CiAgICAgfQogCisgICAgbXkgJGZyb21GdW5jdGlvbk9wZW5pbmcg
PSAiIjsKKyAgICBteSAkZnJvbUZ1bmN0aW9uQ2xvc2luZyA9ICIiOworICAgIGlmICgkaW50ZXJm
YWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVjhXcmFwQXNGdW5jdGlvbiJ9KSB7CisgICAgICAg
ICRmcm9tRnVuY3Rpb25PcGVuaW5nID0gIlY4RE9NV3JhcHBlcjo6ZnJvbUZ1bmN0aW9uKCI7Cisg
ICAgICAgICRmcm9tRnVuY3Rpb25DbG9zaW5nID0gIikiOworICAgIH0KKwogICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsIDw8RU5EKTsKICAgICBzdGF0aWMgYm9vbCBIYXNJbnN0YW5jZSh2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4sIHY4OjpJc29sYXRlKik7CiAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBHZXRSYXdUZW1wbGF0ZSh2ODo6SXNvbGF0ZSopOwogICAg
IHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0VGVtcGxhdGUo
djg6Oklzb2xhdGUqKTsKICAgICBzdGF0aWMgJHtuYXRpdmVUeXBlfSogdG9OYXRpdmUodjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBvYmplY3QpCiAgICAgewotICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDwke25hdGl2ZVR5cGV9Kj4ob2JqZWN0LT5HZXRBbGlnbmVkUG9pbnRlckZyb21JbnRl
cm5hbEZpZWxkKHY4RE9NV3JhcHBlck9iamVjdEluZGV4KSk7CisgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PCR7bmF0aXZlVHlwZX0qPigke2Zyb21GdW5jdGlvbk9wZW5pbmd9b2JqZWN0
JHtmcm9tRnVuY3Rpb25DbG9zaW5nfS0+R2V0QWxpZ25lZFBvaW50ZXJGcm9tSW50ZXJuYWxGaWVs
ZCh2OERPTVdyYXBwZXJPYmplY3RJbmRleCkpOwogICAgIH0KICAgICBzdGF0aWMgdm9pZCBkZXJl
Zk9iamVjdCh2b2lkKik7CiAgICAgc3RhdGljIFdyYXBwZXJUeXBlSW5mbyBpbmZvOwpAQCAtNTM5
LDYgKzU0Niw5IEBAIEVORAogICAgIH0gZWxzZSB7CiAKICAgICAgICAgbXkgJGNyZWF0ZVdyYXBw
ZXJDYWxsID0gJGN1c3RvbVdyYXAgPyAiJHt2OEludGVyZmFjZU5hbWV9Ojp3cmFwIiA6ICIke3Y4
SW50ZXJmYWNlTmFtZX06OmNyZWF0ZVdyYXBwZXIiOworICAgICAgICBteSAkcmV0dXJuaW5nV3Jh
cHBlciA9ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJWOFdyYXBBc0Z1bmN0aW9u
In0gPyAiVjhET01XcmFwcGVyOjp0b0Z1bmN0aW9uKHdyYXBwZXIpIiA6ICJ3cmFwcGVyIjsKKyAg
ICAgICAgbXkgJHJldHVybmluZ0NyZWF0ZWRXcmFwcGVyT3BlbmluZyA9ICRpbnRlcmZhY2UtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJWOFdyYXBBc0Z1bmN0aW9uIn0gPyAiVjhET01XcmFwcGVyOjp0
b0Z1bmN0aW9uKCIgOiAiIjsKKyAgICAgICAgbXkgJHJldHVybmluZ0NyZWF0ZWRXcmFwcGVyQ2xv
c2luZyA9ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJWOFdyYXBBc0Z1bmN0aW9u
In0gPyAiLCBpbXBsLT5uYW1lKCksIGlzb2xhdGUpIiA6ICIiOwogCiAgICAgICAgIGlmICgkY3Vz
dG9tV3JhcCkgewogICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgPDxFTkQpOwpAQCAt
NTUyLDcgKzU2Miw3IEBAIGlubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoJHtuYXRp
dmVUeXBlfSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjCiB7CiAgICAgQVNTRVJUKGlt
cGwpOwogICAgIEFTU0VSVChET01EYXRhU3RvcmU6OmdldFdyYXBwZXIoaW1wbCwgaXNvbGF0ZSku
SXNFbXB0eSgpKTsKLSAgICByZXR1cm4gJGNyZWF0ZVdyYXBwZXJDYWxsKGltcGwsIGNyZWF0aW9u
Q29udGV4dCwgaXNvbGF0ZSk7CisgICAgcmV0dXJuICR7cmV0dXJuaW5nQ3JlYXRlZFdyYXBwZXJP
cGVuaW5nfSRjcmVhdGVXcmFwcGVyQ2FsbChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUp
JHtyZXR1cm5pbmdDcmVhdGVkV3JhcHBlckNsb3Npbmd9OwogfQogRU5ECiAgICAgICAgIH0KQEAg
LTU2NSw3ICs1NzUsNyBAQCBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoJHtuYXRp
dmVUeXBlfSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcgogICAgICAgICByZXR1cm4g
djhOdWxsV2l0aENoZWNrKGlzb2xhdGUpOwogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFw
cGVyID0gRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyKGltcGwsIGlzb2xhdGUpOwogICAgIGlmICgh
d3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB3cmFwcGVyOworICAgICAgICByZXR1
cm4gJHJldHVybmluZ1dyYXBwZXI7CiAgICAgcmV0dXJuIHdyYXAoaW1wbCwgY3JlYXRpb25Db250
ZXh0LCBpc29sYXRlKTsKIH0KIApAQCAtNTc2LDcgKzU4Niw3IEBAIGlubGluZSB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdG9WOEZhc3QoJHtuYXRpdmVUeXBlfSogaW1wbCwgY29uc3QgSG9sZGVyQ29u
dGFpbmVyCiAgICAgICAgIHJldHVybiB2OE51bGwoY29udGFpbmVyLkdldElzb2xhdGUoKSk7CiAg
ICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpnZXRXcmFw
cGVyRmFzdChpbXBsLCBjb250YWluZXIsIHdyYXBwYWJsZSk7CiAgICAgaWYgKCF3cmFwcGVyLklz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgICAgIHJldHVybiAkcmV0dXJu
aW5nV3JhcHBlcjsKICAgICByZXR1cm4gd3JhcChpbXBsLCBjb250YWluZXIuSG9sZGVyKCksIGNv
bnRhaW5lci5HZXRJc29sYXRlKCkpOwogfQogRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0IGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dAppbmRleCBjNjM2NDRmYmU5NjUyOWRmNzhh
MjM4MzBhNTZiNjQxYTJkYmVkZDA3Li4xODYxMTE4MTUwOWVjM2I1Y2M3NGMwYTlmMzA4YjZiMDU5
OGNhMzQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0
dHJpYnV0ZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0
cmlidXRlcy50eHQKQEAgLTEyOSwzICsxMjksNCBAQCBWOE1lYXN1cmVBcz0qCiBWOFJlYWRPbmx5
CiBWOFNraXBWVGFibGVWYWxpZGF0aW9uCiBWOFVuZm9yZ2VhYmxlCitWOFdyYXBBc0Z1bmN0aW9u
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9DdXN0b21FbGVtZW50SGVs
cGVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9DdXN0b21FbGVtZW50SGVscGVy
cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMGUwMTYyYjVkZjA3MjBhOGYzYzA1ZWFiYTk4NDI3YmMxZmUzYTRh
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0N1c3RvbUVs
ZW1lbnRIZWxwZXJzLmNwcApAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJDdXN0b21FbGVtZW50SGVscGVycy5oIgorCisjaW5jbHVkZSAiRE9NV3JhcHBlcldv
cmxkLmgiCisjaW5jbHVkZSAiVjhDdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRl
ICJWOEhUTUxFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIEVOQUJMRShD
VVNUT01fRUxFTUVOVFMpCisKK3ZvaWQgQ3VzdG9tRWxlbWVudEhlbHBlcnM6OmluaXRpYWxpemVD
b25zdHJ1Y3RvcldyYXBwZXIoQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKiBjb25zdHJ1Y3Rvciwg
Y29uc3QgU2NyaXB0VmFsdWUmIHByb3RvdHlwZSwgU2NyaXB0U3RhdGUqIHN0YXRlKQoreworICAg
IEFTU0VSVChpc0ZlYXR1cmVBbGxvd2VkKHN0YXRlKSk7CisgICAgQVNTRVJUKCFwcm90b3R5cGUu
djhWYWx1ZSgpLklzRW1wdHkoKSAmJiBwcm90b3R5cGUudjhWYWx1ZSgpLT5Jc09iamVjdCgpKTsK
KyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+OjpDYXN0KFdlYkNvcmU6OnRvVjgoY29uc3RydWN0b3IsIHN0YXRlLT5jb250ZXh0KCktPkds
b2JhbCgpLCBzdGF0ZS0+Y29udGV4dCgpLT5HZXRJc29sYXRlKCkpKTsKKyAgICAvLyAtIE9iamVj
dDo6Rm9yY2VTZXQoKSBub3IgT2JqZWN0OjpTZXRBY2Nlc3NvciBEb2Vzbid0IHdvcmsgYWdhaW5z
dCB0aGUgInByb3RvdHlwZSIgcHJvcGVydHkgb2YgZnVuY3Rpb24gb2JqZWN0cy4KKyAgICAvLyAt
IFNldCgpLWluZyBoZXJlIGlzIHNhZmUgYmVjYXVzZQorICAgIC8vICAgLSBfX2RlZmluZVNldHRl
cl9fIG5vciBfX2RlZmluZUdldHRlcl9fIGFsc28gZG9lc24ndCB3b3JrIGFnYWluc3QgZnVuY3Rp
b24gb2JqZWN0cyBhbmQKKyAgICAvLyAgIC0gVXNpbmcgU2V0KCkgaXMgb2theSBiZWNhdWVzIGVh
Y2ggZnVuY3Rpb24gaGFzICJwcm90b3R5cGUiIHByb3BlcnR5IGZyb20gc3RhcnQgYW5kIE9iamVj
dHMucHJvdG90eXBlIGNhbm5vdCBpbnRlcmNlcHQgdGhlIHByb3BlcnR5IGFjY2Vzcy4KKyAgICB3
cmFwcGVyLT5TZXQodjhTdHJpbmcoInByb3RvdHlwZSIsIHN0YXRlLT5jb250ZXh0KCktPkdldElz
b2xhdGUoKSksIHByb3RvdHlwZS52OFZhbHVlKCksIHY4OjpSZWFkT25seSk7CisKKyAgICB2ODo6
SGFuZGxlPHY4OjpTdHJpbmc+IGNvbnN0cnVjdG9yS2V5ID0gdjhTdHJpbmcoImNvbnN0cnVjdG9y
Iiwgc3RhdGUtPmNvbnRleHQoKS0+R2V0SXNvbGF0ZSgpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IHByb3RvdHlwZU9iamVjdCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QocHJv
dG90eXBlLnY4VmFsdWUoKSk7CisgICAgQVNTRVJUKCFwcm90b3R5cGVPYmplY3QtPkhhc093blBy
b3BlcnR5KGNvbnN0cnVjdG9yS2V5KSk7CisgICAgcHJvdG90eXBlT2JqZWN0LT5Gb3JjZVNldChj
b25zdHJ1Y3RvcktleSwgd3JhcHBlciwgdjg6OlJlYWRPbmx5KTsKK30KKworc3RhdGljIGJvb2wg
aGFzUHJvdG90eXBlSW5DaGFpbih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHByb3RvdHlwZSwgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IGNoYWluKQoreworICAgIHdoaWxlICghY2hhaW4uSXNFbXB0eSgp
KSB7CisgICAgICAgIGlmIChjaGFpbiA9PSBwcm90b3R5cGUpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgaWYgKCFjaGFpbi0+SXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgY2hhaW4gPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGNo
YWluKS0+R2V0UHJvdG90eXBlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCiti
b29sIEN1c3RvbUVsZW1lbnRIZWxwZXJzOjppc1ZhbGlkUHJvdG90eXBlUGFyYW1ldGVyKGNvbnN0
IFNjcmlwdFZhbHVlJiBwcm90b3R5cGUsIFNjcmlwdFN0YXRlKiBzdGF0ZSkKK3sKKyAgICBpZiAo
cHJvdG90eXBlLnY4VmFsdWUoKS5Jc0VtcHR5KCkgfHwgIXByb3RvdHlwZS52OFZhbHVlKCktPklz
T2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIGRvY3VtZW50LnJlZ2lz
dGVyKCkgc2V0cyB0aGUgY29uc3RydWNkdG9yIHByb3BlcnR5LCBzbyB0aGUgcHJvdG90eXBlIHNo
b3VsZG4ndCBoYXZlIG9uZS4KKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHByb3RvdHlwZU9i
amVjdCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QocHJvdG90eXBlLnY4VmFsdWUoKSk7
CisgICAgaWYgKHByb3RvdHlwZU9iamVjdC0+SGFzT3duUHJvcGVydHkodjhTdHJpbmcoImNvbnN0
cnVjdG9yIiwgc3RhdGUtPmNvbnRleHQoKS0+R2V0SXNvbGF0ZSgpKSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBWOFBlckNvbnRleHREYXRhKiBwZXJDb250ZXh0RGF0YSA9IFY4UGVyQ29u
dGV4dERhdGE6OmZyb20oc3RhdGUtPmNvbnRleHQoKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBjb25zdHJ1Y3RvciA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QocGVyQ29udGV4
dERhdGEtPmNvbnN0cnVjdG9yRm9yVHlwZSgmVjhIVE1MRWxlbWVudDo6aW5mbykpOworICAgIC8v
IFRoaXMgR2V0KCkgaXMgc2FmZSBzaW5jZSB0aGUgcHJvdG90eXBlIHByb3BlcnR5IG9mIHRoZSBj
b25zdHJ1Y3RvciBpcyBidWlsdC1pbiBhbmQgcmVhZC1vbmx5LgorICAgIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gY29uc3RydWN0b3JQcm90b3R5cGUgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpD
YXN0KGNvbnN0cnVjdG9yLT5HZXQodjhTdHJpbmcoInByb3RvdHlwZSIsIHN0YXRlLT5jb250ZXh0
KCktPkdldElzb2xhdGUoKSkpKTsKKyAgICBpZiAoIWhhc1Byb3RvdHlwZUluQ2hhaW4oY29uc3Ry
dWN0b3JQcm90b3R5cGUsIHByb3RvdHlwZU9iamVjdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDdXN0b21FbGVtZW50SGVscGVyczo6aXNGZWF0
dXJlQWxsb3dlZChTY3JpcHRTdGF0ZSogc3RhdGUpCit7CisgICAgcmV0dXJuIGlzRmVhdHVyZUFs
bG93ZWQoc3RhdGUtPmNvbnRleHQoKSk7Cit9CisKK2Jvb2wgQ3VzdG9tRWxlbWVudEhlbHBlcnM6
OmlzRmVhdHVyZUFsbG93ZWQodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCkKK3sKKyAg
ICByZXR1cm4gIURPTVdyYXBwZXJXb3JsZDo6aXNvbGF0ZWQoY29udGV4dCk7Cit9CisKKworI2Vu
ZGlmIC8vIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0N1c3RvbUVsZW1lbnRIZWxw
ZXJzLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9DdXN0b21FbGVtZW50SGVscGVycy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjJkNTc4NTMxNDk4ZmJhMzI4NDViZDkzOTk2NjY0MDM3YWVkYjRiN2MKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9DdXN0b21FbGVtZW50
SGVscGVycy5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEN1c3RvbUVsZW1lbnRIZWxwZXJzX2gK
KyNkZWZpbmUgQ3VzdG9tRWxlbWVudEhlbHBlcnNfaAorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgorI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
I2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKK2NsYXNzIEN1c3RvbUVsZW1lbnRDb25zdHJ1
Y3RvcjsKK2NsYXNzIFNjcmlwdFN0YXRlOworCitjbGFzcyBDdXN0b21FbGVtZW50SGVscGVycyB7
CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUNvbnN0cnVjdG9yV3JhcHBlcihD
dXN0b21FbGVtZW50Q29uc3RydWN0b3IqLCBjb25zdCBTY3JpcHRWYWx1ZSYgcHJvdG90eXBlLCBT
Y3JpcHRTdGF0ZSopOworICAgIHN0YXRpYyBib29sIGlzVmFsaWRQcm90b3R5cGVQYXJhbWV0ZXIo
Y29uc3QgU2NyaXB0VmFsdWUmLCBTY3JpcHRTdGF0ZSopOworICAgIHN0YXRpYyBib29sIGlzRmVh
dHVyZUFsbG93ZWQoU2NyaXB0U3RhdGUqKTsKKworICAgIHN0YXRpYyBib29sIGlzRmVhdHVyZUFs
bG93ZWQodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4pOworfTsKKworI2VuZGlmIC8vIEVOQUJMRShD
VVNUT01fRUxFTUVOVFMpCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEN1
c3RvbUVsZW1lbnRIZWxwZXJzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
QWRhcHRvckZ1bmN0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NTJkOWJiMWRkNGFmNzc1N2FjNTRiMzY2
NWFjYmM0YWU4ZDMxNGMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhBZGFwdG9yRnVuY3Rpb24uY3BwCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVjhBZGFwdG9yRnVuY3Rpb24uaCIKKworI2luY2x1ZGUgIlY4UGVy
SXNvbGF0ZURhdGEuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZiBFTkFCTEUoQ1VT
VE9NX0VMRU1FTlRTKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dyYXBwZXJUeXBlSW5mbyBW
OEFkYXB0b3JGdW5jdGlvbjo6aW5mbyA9IHsgVjhBZGFwdG9yRnVuY3Rpb246OmdldFRlbXBsYXRl
LCAwLCAwLCAwLCAwLCAwLCAwLCBXcmFwcGVyVHlwZU9iamVjdFByb3RvdHlwZSB9OworCit2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhBZGFwdG9yRnVuY3Rpb246OmdldFRl
bXBsYXRlKHY4OjpJc29sYXRlKiBpc29sYXRlKQoreworICAgIGlmICghaXNvbGF0ZSkKKyAgICAg
ICAgaXNvbGF0ZSA9IHY4OjpJc29sYXRlOjpHZXRDdXJyZW50KCk7CisgICAgVjhQZXJJc29sYXRl
RGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmZyb20oaXNvbGF0ZSk7CisgICAgVjhQZXJJ
c29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBs
YXRlTWFwKCkuZmluZCgmaW5mbyk7CisgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0
ZU1hcCgpLmVuZCgpKQorICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKKyAgICAvLyBUaGUg
bGlmZXRpbWUgaXMgb2YgbmV3VGVtcGxhdGUgaXMgZGVsZWdhdGVkIHRvIHRoZSBUZW1wbGF0ZU1h
cCB0aHVzIHRoaXMgd29uJ3QgYmUgbGVha2VkLgorICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiBuZXdUZW1wbGF0ZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRl
bXBsYXRlPjo6TmV3KHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoKSk7CisgICAgZGF0YS0+cmF3
VGVtcGxhdGVNYXAoKS5hZGQoJmluZm8sIGNvbmZpZ3VyZVRlbXBsYXRlKG5ld1RlbXBsYXRlKSk7
CisgICAgcmV0dXJuIG5ld1RlbXBsYXRlOworfQorCit2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gVjhBZGFwdG9yRnVuY3Rpb246OmNvbmZpZ3VyZVRlbXBsYXRlKHY4OjpQZXJz
aXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBmdW5jdGlvblRlbXBsYXRlKQoreworICAgIGZ1
bmN0aW9uVGVtcGxhdGUtPlNldENhbGxIYW5kbGVyKCZWOEFkYXB0b3JGdW5jdGlvbjo6aW52b2Nh
dGlvbkNhbGxiYWNrKTsKKyAgICByZXR1cm4gZnVuY3Rpb25UZW1wbGF0ZTsKK30KKwordjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFY4QWRhcHRvckZ1bmN0aW9uOjppbnZvY2F0aW9uQ2FsbGJhY2soY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdy
YXBwZWQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3MuQ2FsbGVlKCktPkdldEhp
ZGRlblZhbHVlKFY4SGlkZGVuUHJvcGVydHlOYW1lOjphZGFwdG9yRnVuY3Rpb25QZWVyKCkpKTsK
KyAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgZmFzdGVyIGlmIHdlIGNhbiBhY2Nlc3MgdW5kZXJs
eWluZyBuYXRpdmUgY2FsbGJhY2sgZGlyZWN0bHkuCisgICAgLy8gV2Ugd29uJ3QgbmVlZCB0aGlz
IG9uY2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODEzOCBpcyBh
ZGRyZXNzZWQuCisgICAgVmVjdG9yPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+IGFyZ0FycmF5KGFy
Z3MuTGVuZ3RoKCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5MZW5ndGgoKTsgKytp
KQorICAgICAgICBhcmdBcnJheS5hcHBlbmQoYXJnc1tpXSk7CisgICAgaWYgKGFyZ3MuSXNDb25z
dHJ1Y3RDYWxsKCkpCisgICAgICAgIHJldHVybiB3cmFwcGVkLT5DYWxsQXNDb25zdHJ1Y3Rvcihh
cmdBcnJheS5zaXplKCksIGFyZ0FycmF5LmRhdGEoKSk7CisgICAgcmV0dXJuIHdyYXBwZWQtPkNh
bGxBc0Z1bmN0aW9uKGFyZ3MuVGhpcygpLCBhcmdBcnJheS5zaXplKCksIGFyZ0FycmF5LmRhdGEo
KSk7Cit9CisKK3Y4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBWOEFkYXB0b3JGdW5jdGlvbjo6d3Jh
cCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4g
YWRhcHRvciA9IHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPjo6Q2FzdChnZXRUZW1wbGF0ZShpc29s
YXRlKS0+R2V0RnVuY3Rpb24oKSk7CisgICAgYWRhcHRvci0+U2V0TmFtZSh2OFN0cmluZyhuYW1l
LnN0cmluZygpLCBpc29sYXRlKSk7CisgICAgYWRhcHRvci0+U2V0SGlkZGVuVmFsdWUoVjhIaWRk
ZW5Qcm9wZXJ0eU5hbWU6OmFkYXB0b3JGdW5jdGlvblBlZXIoKSwgb2JqZWN0KTsKKyAgICBvYmpl
Y3QtPlNldEhpZGRlblZhbHVlKFY4SGlkZGVuUHJvcGVydHlOYW1lOjphZGFwdG9yRnVuY3Rpb25Q
ZWVyKCksIGFkYXB0b3IpOworICAgIHJldHVybiBhZGFwdG9yOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBZGFwdG9yRnVuY3Rpb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTNk
NmJiNTFmNDQwYTRjNzcyNGFiY2UzZGU5MzA2OGRhZThjM2E1NwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmgKQEAgLTAsMCAr
MSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgVjhBZGFwdG9yRnVuY3Rpb25faAorI2RlZmluZSBWOEFkYXB0b3JGdW5j
dGlvbl9oCisKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEhpZGRlblByb3Bl
cnR5TmFtZS5oIgorI2luY2x1ZGUgIldyYXBwZXJUeXBlSW5mby5oIgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKy8vCisvLyBGSVhNRShodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTA4MTM4KToKKy8vIFY4QWRhcHRvckZ1bmN0aW9uIGNsYXNzIGFuZCBWOFdyYXBB
c0Z1bmN0aW9uIElETCBhdHRyaWJ1dGUgYXJlIG5lZWRlZCBmb3IgdHdvIHJlYXNvbnM6CisvLyAt
IDEpIFY4IGRvZXNuJ3QgYWxsb3cgZXhwYW5kaW5nIHRoZSBpbnRlcm5hbCBmaWVsZCBvZiBmdW5j
dGlvbiBvYmplY3RzLiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/
aWQ9ODM3CisvLyAgICAgIFdlYktpdCBuZWVkIGl0IHRvIGFzc29jaWF0ZSBlYWNoIHdyYXBwZXIg
dG8gaXRzIGJhY2tpbmcgQysrIG9iamVjdC4gV2Ugc3RvcmUgaXQgaW4gYSBoaWRkZW4gcHJvcGVy
dHkgb2YgdGhlIHdyYXBwZWQgb2JqZWN0LgorLy8gLSAyKSBCaW5kaW5nIGNvZGViYXNlIGFzc3Vt
ZXMgZXZlcnkgd3JhcHBlciBvYmplY3QgaXMgY3JlYXRlZCB0aHJvdWdoIE9iamVjdFRlbXBsYXRl
OjpOZXdJbnN0YW5jZSgpLCBub3QgRnVuY3Rpb25UZW1wbGF0ZTo6R2V0RnVuY3Rpb24oKS4KKy8v
IE9uY2UgMSkgaXMgYWRkcmVzc3NlZCwgd2UgY291bGQgYXR0YWNrIDIpIHdpdGggaXQuIAorLy8K
K2NsYXNzIFY4QWRhcHRvckZ1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgV3JhcHBlclR5
cGVJbmZvIGluZm87CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gdW53cmFwKHY4
OjpIYW5kbGU8djg6OkZ1bmN0aW9uPik7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OkZ1bmN0
aW9uPiB3cmFwKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4sIGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZSwgdjg6Oklzb2xhdGUqKTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IGdl
dCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKKworICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZ2V0VGVtcGxhdGUodjg6Oklzb2xhdGUqID0gMCk7CisgICAg
c3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBjb25maWd1cmVUZW1w
bGF0ZSh2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4pOworICAgIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaW52b2NhdGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVu
dHMmKTsKK307CisKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4QWRhcHRvckZ1bmN0
aW9uOjp1bndyYXAodjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IGZ1bmN0aW9uKQoreworICAgIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVkID0gZnVuY3Rpb24tPkdldEhpZGRlblZhbHVlKFY4
SGlkZGVuUHJvcGVydHlOYW1lOjphZGFwdG9yRnVuY3Rpb25QZWVyKCkpOworICAgIEFTU0VSVCgh
d3JhcHBlZC5Jc0VtcHR5KCkpOworICAgIEFTU0VSVCh3cmFwcGVkLT5Jc09iamVjdCgpKTsKKyAg
ICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh3cmFwcGVkKTsKK30KKworaW5s
aW5lIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBWOEFkYXB0b3JGdW5jdGlvbjo6Z2V0KHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KQoreworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBh
ZGFwdG9yRnVuY3Rpb24gPSBvYmplY3QtPkdldEhpZGRlblZhbHVlKFY4SGlkZGVuUHJvcGVydHlO
YW1lOjphZGFwdG9yRnVuY3Rpb25QZWVyKCkpOworICAgIEFTU0VSVCghYWRhcHRvckZ1bmN0aW9u
LklzRW1wdHkoKSk7CisgICAgQVNTRVJUKGFkYXB0b3JGdW5jdGlvbi0+SXNGdW5jdGlvbigpKTsK
KyAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+OjpDYXN0KGFkYXB0b3JGdW5jdGlv
bik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDVVNU
T01fRUxFTUVOVFMpCisjZW5kaWYgLy8gVjhBZGFwdG9yRnVuY3Rpb25faApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAKaW5kZXggYzdjNzgyZjA3YmUyMThkMTg3
ZGM4NGRkNjcyZTc5MTk4ZTAzODRkZi4uNGQwZDI0Nzc0Njk4MzE0MGZiNTA5ZGQ0NTU2OTQxNzli
NzI1MzU4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFw
cGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3Bw
CkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVjhET01X
cmFwcGVyLmgiCiAKKyNpbmNsdWRlICJWOEFkYXB0b3JGdW5jdGlvbi5oIgogI2luY2x1ZGUgIlY4
QmluZGluZy5oIgogI2luY2x1ZGUgIlY4RE9NV2luZG93LmgiCiAjaW5jbHVkZSAiVjhIVE1MQ29s
bGVjdGlvbi5oIgpAQCAtMTQzLDQgKzE0NCwyNSBAQCBib29sIFY4RE9NV3JhcHBlcjo6aXNXcmFw
cGVyT2ZUeXBlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgV3JhcHBlclR5cGVJbmZvKgog
ICAgIHJldHVybiB0eXBlSW5mbyA9PSB0eXBlOwogfQogCisjaWYgRU5BQkxFKENVU1RPTV9FTEVN
RU5UUykKKwordjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IFY4RE9NV3JhcHBlcjo6dG9GdW5jdGlv
bih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0KQoreworICAgIHJldHVybiBWOEFkYXB0b3JG
dW5jdGlvbjo6Z2V0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qob2JqZWN0KSk7Cit9CisK
K3Y4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBWOERPTVdyYXBwZXI6OnRvRnVuY3Rpb24odjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBvYmplY3QsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgdjg6Oklz
b2xhdGUqIGlzb2xhdGUpCit7CisgICAgcmV0dXJuIFY4QWRhcHRvckZ1bmN0aW9uOjp3cmFwKG9i
amVjdCwgbmFtZSwgaXNvbGF0ZSk7Cit9CisKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhET01X
cmFwcGVyOjpmcm9tRnVuY3Rpb24odjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QpCit7Cisg
ICAgaWYgKCFvYmplY3QtPklzRnVuY3Rpb24oKSkKKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAg
ICByZXR1cm4gVjhBZGFwdG9yRnVuY3Rpb246OnVud3JhcCh2ODo6SGFuZGxlPHY4OjpGdW5jdGlv
bj46OkNhc3Qob2JqZWN0KSk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRT
KQorCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OERPTVdyYXBwZXIuaAppbmRleCBkOGZmMjg2MWZkNzA1ZjJjNjZjZDRmZjAwY2VjZDc3YTFjNzcw
OGIyLi5lNmFmM2RiZDAzYjVlOTNlZDNiM2FlZDBmOTU3ZjA2ODU3NzFjOGQwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaApAQCAtNjUsNiArNjUsMTMgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgYm9vbCBpc0RPTVdyYXBwZXIodjg6Okhh
bmRsZTx2ODo6VmFsdWU+KTsKICAgICAgICAgc3RhdGljIGJvb2wgaXNXcmFwcGVyT2ZUeXBlKHY4
OjpIYW5kbGU8djg6OlZhbHVlPiwgV3JhcHBlclR5cGVJbmZvKik7CiAKKyNpZiBFTkFCTEUoQ1VT
VE9NX0VMRU1FTlRTKQorICAgICAgICAvLyBVc2VkIGZvciBWOFdyYXBBc0Z1bmN0aW9uLCB3aGlj
aCBpcyB1c2VkIG9ubHkgYnkgQ1VTVE9NX0VMRU1FTlRTCisgICAgICAgIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpGdW5jdGlvbj4gdG9GdW5jdGlvbih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOworICAg
ICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IHRvRnVuY3Rpb24odjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCB2ODo6SXNvbGF0ZSopOwor
ICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBmcm9tRnVuY3Rpb24odjg6Okhh
bmRsZTx2ODo6T2JqZWN0Pik7CisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKwog
ICAgICAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMgZnVuY3Rpb24gaW4gVjhET01XcmFwcGVyPwog
ICAgICAgICBzdGF0aWMgdm9pZCBzZXROYW1lZEhpZGRlblJlZmVyZW5jZSh2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IHBhcmVudCwgY29uc3QgY2hhciogbmFtZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGNoaWxkKTsKICAgICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhIVE1MQ3VzdG9tRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhU
TUxDdXN0b21FbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYTZhMDMwNTUyMTJjZjJmYTA3YTUxM2Nh
MDY2YjhhZWYwN2RiNjU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVudC5jcHAKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJWOEhUTUxDdXN0b21FbGVtZW50LmgiCisKKyNpbmNsdWRlICJD
dXN0b21FbGVtZW50SGVscGVycy5oIgorI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRSZWdpc3RyeS5o
IgorI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhDdXN0b21FbGVtZW50Q29u
c3RydWN0b3IuaCIKKyNpbmNsdWRlICJWOEhUTUxTcGFuRWxlbWVudC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCisvLyBGSVhNRTogRWFj
aCBjdXN0b20gZWxlbWVudHMgc2hvdWxkIGhhdmUgaXRzIG93biBHZXRUZW1wbGF0ZSBtZXRob2Qg
c28gdGhhdCBpdCBjYW4gYmUgZGVyaXZlZCBmcm9tIGRpZmZlcmVudCBzdXBlciBlbGVtZW50Lgor
V3JhcHBlclR5cGVJbmZvIFY4SFRNTEN1c3RvbUVsZW1lbnQ6OmluZm8gPSB7ICZWOEhUTUxTcGFu
RWxlbWVudDo6R2V0VGVtcGxhdGUsIFY4SFRNTEVsZW1lbnQ6OmRlcmVmT2JqZWN0LCAwLCAwLCAw
LCAwLCAmVjhIVE1MU3BhbkVsZW1lbnQ6OmluZm8sIFdyYXBwZXJUeXBlT2JqZWN0UHJvdG90eXBl
IH07CisKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhIVE1MQ3VzdG9tRWxlbWVudDo6Y3JlYXRl
V3JhcHBlcihQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit7CisgICAgQVNTRVJU
KGltcGwpOworCisgICAgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKiBjb25zdHJ1Y3RvciA9IEN1
c3RvbUVsZW1lbnRSZWdpc3RyeTo6Y29uc3RydWN0b3JPZihpbXBsLmdldCgpKTsKKyAgICBpZiAo
IWNvbnN0cnVjdG9yKQorICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2Fz
dChXZWJDb3JlOjp0b1Y4KHRvSFRNTFVua25vd25FbGVtZW50KGltcGwuZ2V0KCkpLCBjcmVhdGlv
bkNvbnRleHQsIGlzb2xhdGUpKTsKKworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBl
ciA9IFY4RE9NV3JhcHBlcjo6Y3JlYXRlV3JhcHBlcihjcmVhdGlvbkNvbnRleHQsICZpbmZvLCBp
bXBsLmdldCgpKTsKKyAgICBpZiAod3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB3
cmFwcGVyOworCisgICAgLy8gVGhlIGNvbnN0cnVjdG9yIGFuZCByZWdpc3RlcmVkIGxpZmVjeWNs
ZSBjYWxsYmFja3Mgc2hvdWxkIGJlIHZpc2libGUgb25seSBmcm9tIG1haW4gd29ybGQuCisgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIG5lZWRlZCBvbmNlIGVhY2ggY3VzdG9tIGVsZW1l
bnQgaGFzIGl0cyBvd24gRnVuY3Rpb25UZW1wbGF0ZQorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgxMzgKKyAgICBpZiAoQ3VzdG9tRWxlbWVudEhlbHBl
cnM6OmlzRmVhdHVyZUFsbG93ZWQoY3JlYXRpb25Db250ZXh0LT5DcmVhdGlvbkNvbnRleHQoKSkp
IHsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjb25zdHJ1Y3RvcldhcHBlciA9IHY4
OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoV2ViQ29yZTo6dG9WOChjb25zdHJ1Y3RvciwgY3Jl
YXRpb25Db250ZXh0LCBpc29sYXRlKSk7CisgICAgICAgIHdyYXBwZXItPlNldFByb3RvdHlwZShj
b25zdHJ1Y3RvcldhcHBlci0+R2V0KHY4U3RyaW5nKCJwcm90b3R5cGUiLCBpc29sYXRlKSkpOwor
ICAgIH0KKworICAgIFY4RE9NV3JhcHBlcjo6YXNzb2NpYXRlT2JqZWN0V2l0aFdyYXBwZXIoaW1w
bCwgJmluZm8sIHdyYXBwZXIsIGlzb2xhdGUpOworCisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisK
KyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhUTUxDdXN0b21F
bGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNGJmYmYzOWZhNzBkM2Y2ZmY3ZDI4MDI3NjJiNDlmNDFlZDI2NTEyYwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SFRNTEN1c3Rv
bUVsZW1lbnQuaApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBWOEhUTUxDdXN0b21FbGVtZW50X2gK
KyNkZWZpbmUgVjhIVE1MQ3VzdG9tRWxlbWVudF9oCisKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIK
KyNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJWOEhUTUxFbGVtZW50LmgiCisj
aW5jbHVkZSAiVjhIVE1MVW5rbm93bkVsZW1lbnQuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEhUTUxFbGVtZW50OworCisjaWYg
RU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKworY2xhc3MgVjhIVE1MQ3VzdG9tRWxlbWVudCB7Citw
dWJsaWM6CisgICAgc3RhdGljIFdyYXBwZXJUeXBlSW5mbyBpbmZvOworICAgIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IHRvVjgoSFRNTEVsZW1lbnQqLCB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xh
dGUqID0gMCk7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRlV3JhcHBl
cihQYXNzUmVmUHRyPEhUTUxFbGVtZW50Piwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Piwgdjg6Oklz
b2xhdGUqKTsKK307CisKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4SFRNTEN1c3Rv
bUVsZW1lbnQ6OnRvVjgoSFRNTEVsZW1lbnQqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
Y3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3sKKyAgICBpZiAoVU5MSUtF
TFkoIWltcGwpKQorICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh2
OE51bGxXaXRoQ2hlY2soaXNvbGF0ZSkpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3Jh
cHBlciA9IERPTURhdGFTdG9yZTo6Z2V0V3JhcHBlcihpbXBsLCBpc29sYXRlKTsKKyAgICBpZiAo
IXdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAgICByZXR1cm4g
VjhIVE1MQ3VzdG9tRWxlbWVudDo6Y3JlYXRlV3JhcHBlcihpbXBsLCBjcmVhdGlvbkNvbnRleHQs
IGlzb2xhdGUpOworfQorCisjZWxzZSAvLyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCitjbGFz
cyBWOEhUTUxDdXN0b21FbGVtZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiB3cmFwKEhUTUxFbGVtZW50Kiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVh
dGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiA9IDAp
OworfTsKKworaW5saW5lIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gSFRNTEN1c3RvbUVsZW1lbnQ6
OnRvVjgoSFRNTEVsZW1lbnQqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25D
b250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3sKKyAgICByZXR1cm4gdG9WOCh0b0hUTUxV
bmtub3duRWxlbWVudChpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKK30KKworI2Vu
ZGlmIC8vIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIFY4SFRNTEN1c3RvbUVsZW1lbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmgKaW5kZXggOWJiMDFjZTExZmQyYjQ0
ZjE0YzRlMDljMTU0NzFkZjgyNGUzMThiOC4uN2YxMGI4OGFkMDdhMTU2MGRmOGNjMjBmYjcxYTg0
YzM5MzdjYjEzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIaWRk
ZW5Qcm9wZXJ0eU5hbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhpZGRl
blByb3BlcnR5TmFtZS5oCkBAIC00NSw2ICs0NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICBWKHNjcmlwdFN0YXRlKSBcCiAgICAgVihzbGVlcEZ1bmN0aW9uKSBcCiAgICAgVihzdGF0ZSkg
XAorICAgIFYoYWRhcHRvckZ1bmN0aW9uUGVlcikgXAogICAgIFYodG9TdHJpbmdTdHJpbmcpIFwK
ICAgICBWKHR5cGVkQXJyYXlIaWRkZW5Db3B5TWV0aG9kKQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21FbGVtZW50Q29uc3RydWN0b3JDdXN0
b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tRWxlbWVu
dENvbnN0cnVjdG9yQ3VzdG9tLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNDM3NGY2NzY4ODBjOTI4NTRmMjg4
OTQ2YTYzOTE1MWEwYjNiMjM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yQ3VzdG9tLmNwcApAQCAt
MCwwICsxLDU0IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyogCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisqIG1ldDoK
KyogCisqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyogZGlzdHJpYnV0aW9uLgorKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqIAorKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVjhDdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaCIKKworI2luY2x1
ZGUgIkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIlY4QmluZGluZy5oIgor
I2luY2x1ZGUgIlY4SFRNTEN1c3RvbUVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Cit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6OmNhbGxB
c0Z1bmN0aW9uQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBpZiAo
IWFyZ3MuSXNDb25zdHJ1Y3RDYWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigi
RE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uIiwg
YXJncy5HZXRJc29sYXRlKCkpOworICAgIGlmIChDb25zdHJ1Y3Rvck1vZGU6OmN1cnJlbnQoKSA9
PSBDb25zdHJ1Y3Rvck1vZGU6OldyYXBFeGlzdGluZ09iamVjdCkKKyAgICAgICAgcmV0dXJuIGFy
Z3MuSG9sZGVyKCk7CisKKyAgICBDdXN0b21FbGVtZW50Q29uc3RydWN0b3IqIGltcGwgPSB0b05h
dGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IGVsZW1lbnQgPSBp
bXBsLT5jcmVhdGVFbGVtZW50KCk7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm4g
djhVbmRlZmluZWQoKTsKKyAgICByZXR1cm4gVjhIVE1MQ3VzdG9tRWxlbWVudDo6dG9WOChlbGVt
ZW50LmdldCgpLCBhcmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21F
bGVtZW50Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRD
b25zdHJ1Y3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTEyMjJjMTg0OWEzZTM3YjI0NmY1MDdmNjNhOTAz
MmIyMTE5NTBhNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21F
bGVtZW50Q29uc3RydWN0b3IuY3BwCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmgiCisKKyNpZiBFTkFCTEUoQ1VT
VE9NX0VMRU1FTlRTKQorCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudEhlbHBlcnMuaCIKKyNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPEN1c3Rv
bUVsZW1lbnRDb25zdHJ1Y3Rvcj4gQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjpjcmVhdGUoU2Ny
aXB0U3RhdGUqIHN0YXRlLCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU2NyaXB0VmFsdWUmIHByb3RvdHlw
ZSkKK3sKKyAgICBSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiBjcmVhdGVkID0gYWRv
cHRSZWYobmV3IEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcihkb2N1bWVudCwgdGFnTmFtZSwgbmFt
ZSkpOworICAgIEN1c3RvbUVsZW1lbnRIZWxwZXJzOjppbml0aWFsaXplQ29uc3RydWN0b3JXcmFw
cGVyKGNyZWF0ZWQuZ2V0KCksIHByb3RvdHlwZSwgc3RhdGUpOworICAgIHJldHVybiBjcmVhdGVk
LnJlbGVhc2UoKTsKK30KKworQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjpDdXN0b21FbGVtZW50
Q29uc3RydWN0b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQorICAg
ICwgbV90YWdOYW1lKHRhZ05hbWUpCisgICAgLCBtX25hbWUobmFtZSkKK3sKK30KKworQ3VzdG9t
RWxlbWVudENvbnN0cnVjdG9yOjp+Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKCkKK3sKK30KKwor
dm9pZCBDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6OndpbGxEZXN0cm95RG9jdW1lbnQoKQorewor
ICAgIG1fZG9jdW1lbnQgPSAwOworfQorCitQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBDdXN0b21F
bGVtZW50Q29uc3RydWN0b3I6OmNyZWF0ZUVsZW1lbnQoKSBjb25zdAoreworICAgIGlmICghbV9k
b2N1bWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIEhUTUxFbGVtZW50OjpjcmVh
dGUobV90YWdOYW1lLCBtX2RvY3VtZW50KTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKENV
U1RPTV9FTEVNRU5UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVt
ZW50Q29uc3RydWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50Q29uc3Ry
dWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40ZWFjNjkxMDhiMmY2ZjNjNmU1YzFhY2E1ZWNhMWI1Y2ZkOWI5
NTYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRD
b25zdHJ1Y3Rvci5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEN1c3RvbUVsZW1lbnRDb25zdHJ1
Y3Rvcl9oCisjZGVmaW5lIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcl9oCisKKyNpZiBFTkFCTEUo
Q1VTVE9NX0VMRU1FTlRTKQorCisjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgorI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERvY3VtZW50OworY2xhc3MgSFRNTEVsZW1lbnQ7
CitjbGFzcyBTY3JpcHRTdGF0ZTsKK2NsYXNzIFNjcmlwdFZhbHVlOworCitjbGFzcyBDdXN0b21F
bGVtZW50Q29uc3RydWN0b3IgOiBwdWJsaWMgUmVmQ291bnRlZDxDdXN0b21FbGVtZW50Q29uc3Ry
dWN0b3I+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29u
c3RydWN0b3I+IGNyZWF0ZShTY3JpcHRTdGF0ZSosIERvY3VtZW50KiwgY29uc3QgUXVhbGlmaWVk
TmFtZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFNjcmlwdFZhbHVlJik7CisKKyAgICB2aXJ0dWFs
IH5DdXN0b21FbGVtZW50Q29uc3RydWN0b3IoKTsKKworICAgIERvY3VtZW50KiBkb2N1bWVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KKyAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lKCkgY29uc3QgeyByZXR1cm4gbV90YWdOYW1lOyB9CisgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisKKyAgICBQYXNzUmVmUHRyPEhU
TUxFbGVtZW50PiBjcmVhdGVFbGVtZW50KCkgY29uc3Q7CisgICAgdm9pZCB3aWxsRGVzdHJveURv
Y3VtZW50KCk7CisgICAgCitwcml2YXRlOgorICAgIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvcihE
b2N1bWVudCosIGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBTdHJpbmcmKTsKKworICAgIERv
Y3VtZW50KiBtX2RvY3VtZW50OworICAgIFF1YWxpZmllZE5hbWUgbV90YWdOYW1lOworICAgIEF0
b21pY1N0cmluZyBtX25hbWU7Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0VM
RU1FTlRTKQorCisjZW5kaWYgLy8gQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaWRsIGIvU291
cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5pZGwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NDdjNTMwZjg3ZGVhZTY3ZmE1ZmRhMWUxMzliMDVjYjk4YTA3M2IwZAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaWRsCkBAIC0w
LDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitbCisgICAgQ29uZGl0aW9uYWw9Q1VTVE9NX0VMRU1F
TlRTLAorICAgIFY4RW5hYmxlZEF0UnVudGltZT1jdXN0b21ET01FbGVtZW50cywKKyAgICBWOFdy
YXBBc0Z1bmN0aW9uLAorICAgIEN1c3RvbUNhbGwKK10gaW50ZXJmYWNlIEN1c3RvbUVsZW1lbnRD
b25zdHJ1Y3RvciB7Cit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVs
ZW1lbnRSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlZ2lz
dHJ5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44ZTIwYjg0MmFkY2NiNTQ5MzI2Mzk0NTBiMzAyMWE0YzllNzll
MTg0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRS
ZWdpc3RyeS5jcHAKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICog
My4gTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBj
b250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmgiCisKKyNpbmNsdWRlICJDdXN0b21F
bGVtZW50Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50SGVscGVycy5oIgor
I2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUg
IkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiUnVudGlt
ZUVuYWJsZWRGZWF0dXJlcy5oIgorI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CisKKyNpZiBF
TkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0N1c3RvbUVs
ZW1lbnRSZWdpc3RyeTo6Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5KERvY3VtZW50KiBkb2N1bWVudCkK
KyAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCit7Cit9CisKK0N1c3RvbUVsZW1lbnRSZWdpc3Ry
eTo6fkN1c3RvbUVsZW1lbnRSZWdpc3RyeSgpCit7CisgICAgZm9yIChDb25zdHJ1Y3Rvck1hcDo6
aXRlcmF0b3IgaSA9IG1fY29uc3RydWN0b3JzLmJlZ2luKCk7IGkgIT0gbV9jb25zdHJ1Y3RvcnMu
ZW5kKCk7ICsraSkKKyAgICAgICAgaS0+dmFsdWUtPndpbGxEZXN0cm95RG9jdW1lbnQoKTsKK30K
KworQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKiBDdXN0b21FbGVtZW50UmVnaXN0cnk6OmNvbnN0
cnVjdG9yT2YoSFRNTEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgQ3VzdG9tRWxlbWVudFJlZ2lz
dHJ5KiBzZWxmID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+cmVnaXN0cnkoKTsKKyAgICBpZiAoIXNl
bGYpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBzZWxmLT5maW5kKGVsZW1lbnQtPnRh
Z1FOYW1lKCkpOworfQorCitib29sIEN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6aXNWYWxpZE5hbWUo
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQoreworICAgIHNpemVfdCBoeXBoZW5Qb3NpdGlvbiA9
IG5hbWUuZmluZCgnLScpOworICAgIGlmIChoeXBoZW5Qb3NpdGlvbiA9PSBub3RGb3VuZCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8QXRv
bWljU3RyaW5nPiwgcmVzZXJ2ZWROYW1lcywgKCkpOworICAgIGlmIChyZXNlcnZlZE5hbWVzLmlz
RW1wdHkoKSkgeworICAgICAgICByZXNlcnZlZE5hbWVzLmFwcGVuZCgiYW5ub3RhdGlvbi14bWwi
KTsKKyAgICAgICAgcmVzZXJ2ZWROYW1lcy5hcHBlbmQoImNvbG9yLXByb2ZpbGUiKTsKKyAgICAg
ICAgcmVzZXJ2ZWROYW1lcy5hcHBlbmQoImZvbnQtZmFjZSIpOworICAgICAgICByZXNlcnZlZE5h
bWVzLmFwcGVuZCgiZm9udC1mYWNlLXNyYyIpOworICAgICAgICByZXNlcnZlZE5hbWVzLmFwcGVu
ZCgiZm9udC1mYWNlLXVyaSIpOworICAgICAgICByZXNlcnZlZE5hbWVzLmFwcGVuZCgiZm9udC1m
YWNlLWZvcm1hdCIpOworICAgICAgICByZXNlcnZlZE5hbWVzLmFwcGVuZCgiZm9udC1mYWNlLW5h
bWUiKTsKKyAgICAgICAgcmVzZXJ2ZWROYW1lcy5hcHBlbmQoIm1pc3NpbmctZ2x5cGgiKTsKKyAg
ICB9CisKKyAgICBpZiAoV1RGOjpub3RGb3VuZCAhPSByZXNlcnZlZE5hbWVzLmZpbmQobmFtZSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBEb2N1bWVudDo6aXNWYWxpZE5h
bWUobmFtZS5zdHJpbmcoKSk7Cit9CisKK1Bhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVj
dG9yPiBDdXN0b21FbGVtZW50UmVnaXN0cnk6OnJlZ2lzdGVyRWxlbWVudChTY3JpcHRTdGF0ZSog
c3RhdGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgRGljdGlvbmFyeSYgb3B0aW9u
cywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFDdXN0b21FbGVtZW50SGVscGVyczo6
aXNGZWF0dXJlQWxsb3dlZChzdGF0ZSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgUXVhbGlm
aWVkTmFtZSBuZXdOYW1lKG51bGxBdG9tLCBuYW1lLmxvd2VyKCksIEhUTUxOYW1lczo6eGh0bWxO
YW1lc3BhY2VVUkkpOworICAgIGlmICghaXNWYWxpZE5hbWUobmV3TmFtZS5sb2NhbE5hbWUoKSkp
IHsKKyAgICAgICAgZWMgPSBJTlZBTElEX0NIQVJBQ1RFUl9FUlI7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKyAgICAgICAgCisgICAgaWYgKGZpbmQobmV3TmFtZSkpIHsKKyAgICAgICAgZWMg
PSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgU2Ny
aXB0VmFsdWUgcHJvdG90eXBlVmFsdWU7CisgICAgaWYgKCFvcHRpb25zLmdldCgicHJvdG90eXBl
IiwgcHJvdG90eXBlVmFsdWUpKSB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhlIGRl
ZmF1bHQgdmFsdWUgaGFuZGxpbmcuCisgICAgICAgIC8vIEN1cnJlbnRseSBkZWZhdWx0IHZhbHVl
IG9mIHRoZSAicHJvdG90eXBlIiBwYXJhbWV0ZXIsIHdoaWNoCisgICAgICAgIC8vIGlzIEhUTUxT
cGFuRWxlbWVudC5wcm90b3R5cGUsIGhhcyBhbiBhbWJpZ3VpdHkgYWJvdXQgaXRzCisgICAgICAg
IC8vIGJlaGF2aW9yLiBUaGUgc3BlYyBzaG91bGQgYmUgZml4ZWQgYmVmb3JlIFdlYktpdCBpbXBs
ZW1lbnRzCisgICAgICAgIC8vIGl0LiBodHRwczovL3d3dy53My5vcmcvQnVncy9QdWJsaWMvc2hv
d19idWcuY2dpP2lkPTIwODAxCisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmICghQ3VzdG9tRWxlbWVudEhlbHBlcnM6Omlz
VmFsaWRQcm90b3R5cGVQYXJhbWV0ZXIocHJvdG90eXBlVmFsdWUsIHN0YXRlKSkgeworICAgICAg
ICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAg
ICBSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiBmcmVzaCA9IEN1c3RvbUVsZW1lbnRD
b25zdHJ1Y3Rvcjo6Y3JlYXRlKHN0YXRlLCBtX2RvY3VtZW50LCBuZXdOYW1lLCAiSFRNTEN1c3Rv
bUVsZW1lbnQiLCBwcm90b3R5cGVWYWx1ZSk7CisgICAgbV9jb25zdHJ1Y3RvcnMuYWRkKGZyZXNo
LT50YWdOYW1lKCkuaW1wbCgpLCBmcmVzaCk7CisgICAgcmV0dXJuIGZyZXNoOworfQorCitDdXN0
b21FbGVtZW50Q29uc3RydWN0b3IqIEN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6ZmluZChjb25zdCBR
dWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAoreworICAgIENvbnN0cnVjdG9yTWFwOjpjb25zdF9p
dGVyYXRvciBmb3VuZCA9IG1fY29uc3RydWN0b3JzLmZpbmQobmFtZS5pbXBsKCkpOworICAgIHJl
dHVybiAoZm91bmQgIT0gbV9jb25zdHJ1Y3RvcnMuZW5kKCkpID8gZm91bmQtPnZhbHVlLmdldCgp
IDogMDsKK30KKworUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5
OjpjcmVhdGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0Cit7CisgICAg
aWYgKEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciogZm91bmQgPSBmaW5kKG5hbWUpKQorICAgICAg
ICByZXR1cm4gZm91bmQtPmNyZWF0ZUVsZW1lbnQoKTsKKyAgICByZXR1cm4gMDsKK30KKworfQor
CisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9D
dXN0b21FbGVtZW50UmVnaXN0cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41Zjg1MGNkN2YzMjJiNTczNGM4OTgx
ZjlkNTNiZjQ2NzYwZjczYmVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJp
YnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IEN1c3RvbUVsZW1lbnRSZWdpc3RyeV9oCisjZGVmaW5lIEN1c3RvbUVsZW1lbnRSZWdpc3RyeV9o
CisKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgorI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5o
IgorI2luY2x1ZGUgIlN1cHBsZW1lbnRhYmxlLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
KyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvcjsKK2NsYXNzIERpY3Rpb25hcnk7CitjbGFzcyBEb2N1
bWVudDsKK2NsYXNzIEhUTUxFbGVtZW50OworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsK
K2NsYXNzIFF1YWxpZmllZE5hbWU7CisKK2NsYXNzIEN1c3RvbUVsZW1lbnRSZWdpc3RyeSB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5KTsgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ3VzdG9tRWxlbWVudFJlZ2lz
dHJ5KERvY3VtZW50Kik7CisgICAgfkN1c3RvbUVsZW1lbnRSZWdpc3RyeSgpOworCisgICAgUGFz
c1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IHJlZ2lzdGVyRWxlbWVudChXZWJDb3Jl
OjpTY3JpcHRTdGF0ZSosIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgRGljdGlvbmFy
eSYgb3B0aW9ucywgRXhjZXB0aW9uQ29kZSYpOworICAgIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rv
ciogZmluZChjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxIVE1M
RWxlbWVudD4gY3JlYXRlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7CisKKyAg
ICBzdGF0aWMgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKiBjb25zdHJ1Y3Rvck9mKEhUTUxFbGVt
ZW50Kik7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZE5hbWUoY29uc3QgQXRv
bWljU3RyaW5nJik7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8UXVhbGlmaWVkTmFtZTo6UXVhbGlm
aWVkTmFtZUltcGwqLCBSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiA+Q29uc3RydWN0
b3JNYXA7CisKKyAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKKyAgICBDb25zdHJ1Y3Rvck1hcCBt
X2NvbnN0cnVjdG9yczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmlu
ZGV4IDYyMTQ3NTZiYzE0Mzg5MzE2OTk2NGRlYWNmZjcyY2FmYTcyMDM2YjIuLmY0NzgzMGNmN2Yx
NmFlMDlhY2RmYWM3NTIxZGVhNWJlMTczODA0ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApA
QCAtNDYsMTEgKzQ2LDE0IEBACiAjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCiAj
aW5jbHVkZSAiQ29udGV4dEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCisjaW5j
bHVkZSAiQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVu
dFJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiRE9NSW1wbGVtZW50YXRpb24uaCIKICNpbmNsdWRlICJE
T01OYW1lZEZsb3dDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRE9NU2VsZWN0aW9uLmgiCiAjaW5j
bHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRGF0ZUNvbXBvbmVudHMuaCIKKyNpbmNsdWRl
ICJEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRFdmVudFF1ZXVlLmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCkBAIC02
NzUsNiArNjc4LDEwIEBAIHZvaWQgRG9jdW1lbnQ6OnJlbW92ZWRMYXN0UmVmKCkKICAgICAgICAg
bV9mdWxsU2NyZWVuRWxlbWVudFN0YWNrLmNsZWFyKCk7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShD
VVNUT01fRUxFTUVOVFMpCisgICAgICAgIG1fcmVnaXN0cnkuY2xlYXIoKTsKKyNlbmRpZgorCiAg
ICAgICAgIGRldGFjaFBhcnNlcigpOwogCiAgICAgICAgIC8vIHJlbW92ZURldGFjaGVkQ2hpbGRy
ZW4oKSBkb2Vzbid0IGFsd2F5cyB1bnJlZ2lzdGVyIElEcywKQEAgLTg0Myw2ICs4NTAsMjAgQEAg
UGFzc1JlZlB0cjxFbGVtZW50PiBEb2N1bWVudDo6Y3JlYXRlRWxlbWVudChjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkMKICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChRdWFsaWZp
ZWROYW1lKG51bGxBdG9tLCBuYW1lLCBudWxsQXRvbSksIGZhbHNlKTsKIH0KIAorI2lmIEVOQUJM
RShDVVNUT01fRUxFTUVOVFMpCitQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4g
RG9jdW1lbnQ6OnJlZ2lzdGVyRWxlbWVudChXZWJDb3JlOjpTY3JpcHRTdGF0ZSogc3RhdGUsIGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJu
IHJlZ2lzdGVyRWxlbWVudChzdGF0ZSwgbmFtZSwgRGljdGlvbmFyeSgpLCBlYyk7Cit9CisKK1Bh
c3NSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiBEb2N1bWVudDo6cmVnaXN0ZXJFbGVt
ZW50KFdlYkNvcmU6OlNjcmlwdFN0YXRlKiBzdGF0ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
LCBjb25zdCBEaWN0aW9uYXJ5JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBp
ZiAoIW1fcmVnaXN0cnkpCisgICAgICAgIG1fcmVnaXN0cnkgPSBhZG9wdFB0cihuZXcgQ3VzdG9t
RWxlbWVudFJlZ2lzdHJ5KHRoaXMpKTsKKyAgICByZXR1cm4gbV9yZWdpc3RyeS0+cmVnaXN0ZXJF
bGVtZW50KHN0YXRlLCBuYW1lLCBvcHRpb25zLCBlYyk7Cit9CisjZW5kaWYgLy8gRU5BQkxFKENV
U1RPTV9FTEVNRU5UUykKKwogUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBEb2N1bWVudDo6
Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpCiB7CiAgICAgcmV0dXJuIERvY3VtZW50RnJhZ21lbnQ6
OmNyZWF0ZShkb2N1bWVudCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggN2JkOWYxOTBjNDc1
YTU3MzJlMzMyMzUzMWU3ZWI1NzQ0MTYyYjE2Yy4uNDA4ZDg5MjkwYjU5N2MyMjE4NzNlYjMzNzE2
ZGNjNWMzYTI4ODlmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTcwLDYgKzcwLDggQEAgY2xh
c3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDsKIGNsYXNzIENoYXJhY3RlckRhdGE7CiBjbGFzcyBD
b21tZW50OwogY2xhc3MgQ29udGV4dEZlYXR1cmVzOworY2xhc3MgQ3VzdG9tRWxlbWVudENvbnN0
cnVjdG9yOworY2xhc3MgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5OwogY2xhc3MgRE9NSW1wbGVtZW50
YXRpb247CiBjbGFzcyBET01OYW1lZEZsb3dDb2xsZWN0aW9uOwogY2xhc3MgRE9NU2VsZWN0aW9u
OwpAQCAtMTE2NSw2ICsxMTY3LDEzIEBAIHB1YmxpYzoKICAgICBUZXh0QXV0b3NpemVyKiB0ZXh0
QXV0b3NpemVyKCkgeyByZXR1cm4gbV90ZXh0QXV0b3NpemVyLmdldCgpOyB9CiAjZW5kaWYKIAor
I2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisgICAgUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50
Q29uc3RydWN0b3I+IHJlZ2lzdGVyRWxlbWVudChXZWJDb3JlOjpTY3JpcHRTdGF0ZSosIGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8Q3Vz
dG9tRWxlbWVudENvbnN0cnVjdG9yPiByZWdpc3RlckVsZW1lbnQoV2ViQ29yZTo6U2NyaXB0U3Rh
dGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IERpY3Rpb25hcnkmIG9wdGlvbnMs
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+IGNyZWF0ZUN1c3RvbUVs
ZW1lbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKTsKKyAgICBDdXN0b21FbGVtZW50UmVn
aXN0cnkqIHJlZ2lzdHJ5KCkgY29uc3QgeyByZXR1cm4gbV9yZWdpc3RyeS5nZXQoKTsgfQorI2Vu
ZGlmCisKICAgICB2b2lkIGFkanVzdEZsb2F0UXVhZHNGb3JTY3JvbGxBbmRBYnNvbHV0ZVpvb21B
bmRGcmFtZVNjYWxlKFZlY3RvcjxGbG9hdFF1YWQ+JiwgUmVuZGVyT2JqZWN0Kik7CiAgICAgdm9p
ZCBhZGp1c3RGbG9hdFJlY3RGb3JTY3JvbGxBbmRBYnNvbHV0ZVpvb21BbmRGcmFtZVNjYWxlKEZs
b2F0UmVjdCYsIFJlbmRlck9iamVjdCopOwogCkBAIC0xNTM4LDYgKzE1NDcsMTAgQEAgcHJpdmF0
ZToKICAgICBPd25QdHI8VGV4dEF1dG9zaXplcj4gbV90ZXh0QXV0b3NpemVyOwogI2VuZGlmCiAK
KyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorICAgIE93blB0cjxDdXN0b21FbGVtZW50UmVn
aXN0cnk+IG1fcmVnaXN0cnk7CisjZW5kaWYKKwogICAgIGJvb2wgbV9zY2hlZHVsZWRUYXNrc0Fy
ZVN1c3BlbmRlZDsKICAgICAKICAgICBib29sIG1fdmlzdWFsVXBkYXRlc0FsbG93ZWQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9tYWtlX25hbWVzLnBsCmluZGV4IDIwMWY0NWY0NGU4Njg4NzA5NDc0MzNlMzA1ZDY3MTc1
ODc4Y2U4M2EuLjM1YmE5MTRkNDI2OTY0ZWE1MjY4MTBiMGQ0OGYxODY0MDFiMmRhMTEgMTAwNzU1
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9tYWtlX25hbWVzLnBsCkBAIC0xMTcyLDggKzExNzIsOCBAQCBFTkQKIDsKICAgICB9
IGVsc2lmICgkd3JhcHBlckZhY3RvcnlUeXBlIGVxICJWOCIpIHsKICAgICAgICAgcHJpbnQgRiA8
PEVORAorI2luY2x1ZGUgIlY4SFRNTEN1c3RvbUVsZW1lbnQuaCIKICNpbmNsdWRlICJWOCRwYXJh
bWV0ZXJze25hbWVzcGFjZX1FbGVtZW50LmgiCi0gICAgICAgIAogI2luY2x1ZGUgPHY4Lmg+CiBF
TkQKIDsKQEAgLTEyNzQsNiArMTI3NCwxMSBAQCBFTkQKICAgICByZXR1cm4gVjhTVkdFbGVtZW50
OjpjcmVhdGVXcmFwcGVyKGVsZW1lbnQsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiBFTkQK
IDsKKyAgICAgICAgfSBlbHNpZiAoJHBhcmFtZXRlcnN7bmFtZXNwYWNlfSBlcSAiSFRNTCIpIHsK
KyAgICAgICAgICAgIHByaW50IEYgPDxFTkQKKyAgICByZXR1cm4gVjhIVE1MQ3VzdG9tRWxlbWVu
dDo6dG9WOChlbGVtZW50LCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworRU5ECis7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBwcmludCBGIDw8RU5ECiAgICAgcmV0dXJuIHdyYXAo
dG8kcGFyYW1ldGVyc3tmYWxsYmFja0ludGVyZmFjZU5hbWV9KGVsZW1lbnQpLCBjcmVhdGlvbkNv
bnRleHQsIGlzb2xhdGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9j
dW1lbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaWRsCmluZGV4IDI1
ZjBhNWMzOTAzNTExNGI1ZGYxOTE3YzI5NTI5MTYwYTliNDdjOTguLjdjMjlmY2I1ZGMxODkyYWFh
YzcyZjUyNDAzNjNlZTJjMjRkMjNkOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTERvY3VtZW50LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5p
ZGwKQEAgLTUzLDYgKzUzLDExIEBACiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEVsZW1lbnQgYWN0
aXZlRWxlbWVudDsKICAgICBib29sZWFuIGhhc0ZvY3VzKCk7CiAKKyNpZiBkZWZpbmVkKEVOQUJM
RV9DVVNUT01fRUxFTUVOVFMpICYmIEVOQUJMRV9DVVNUT01fRUxFTUVOVFMKKyAgICBbVjhFbmFi
bGVkQXRSdW50aW1lPWN1c3RvbURPTUVsZW1lbnRzLCBDb25kaXRpb25hbD1DVVNUT01fRUxFTUVO
VFMsIEltcGxlbWVudGVkQXM9cmVnaXN0ZXJFbGVtZW50LCBDYWxsV2l0aD1TY3JpcHRTdGF0ZV0K
KyAgICBDdXN0b21FbGVtZW50Q29uc3RydWN0b3Igd2Via2l0UmVnaXN0ZXIoaW4gRE9NU3RyaW5n
IG5hbWUsIGluIFtPcHRpb25hbF0gRGljdGlvbmFyeSBvcHRpb25zKSByYWlzZXMoRE9NRXhjZXB0
aW9uKTsKKyNlbmRpZgorCiAgICAgLy8gRGVwcmVjYXRlZCBhdHRyaWJ1dGVzCiAgICAgICAgICAg
ICAgW1RyZWF0TnVsbEFzPU51bGxTdHJpbmddIGF0dHJpYnV0ZSBET01TdHJpbmcgYmdDb2xvcjsK
ICAgICAgICAgICAgICBbVHJlYXROdWxsQXM9TnVsbFN0cmluZ10gYXR0cmlidXRlIERPTVN0cmlu
ZyBmZ0NvbG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5n
eXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCmluZGV4IDY0YThlYTNk
ZWJkYTU5Y2FjYmI3MjBiNWY3NDVkMWFlOTBmMTYxNDIuLjEwMDAxYTM0MGZhNzdlNGJhZTgzNzVi
MWIwNzdlNTYzMzY0OTkyOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVh
dHVyZXMuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKQEAg
LTU0LDYgKzU0LDcgQEAKICAgICAgICdFTkFCTEVfQ1NTX1RSQU5TRk9STVNfQU5JTUFUSU9OU19V
TlBSRUZJWEVEPTAnLAogICAgICAgJ0VOQUJMRV9DU1NfVkFSSUFCTEVTPTEnLAogICAgICAgJ0VO
QUJMRV9DU1NfU1RJQ0tZX1BPU0lUSU9OPTEnLAorICAgICAgJ0VOQUJMRV9DVVNUT01fRUxFTUVO
VFM9MScsCiAgICAgICAnRU5BQkxFX0NVU1RPTV9TQ0hFTUVfSEFORExFUj0wJywKICAgICAgICdF
TkFCTEVfREFTSEJPQVJEX1NVUFBPUlQ9MCcsCiAgICAgICAnRU5BQkxFX0RBVEFfVFJBTlNGRVJf
SVRFTVM9MScsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJS
dW50aW1lRmVhdHVyZXMuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlJ1bnRp
bWVGZWF0dXJlcy5oCmluZGV4IDJhNDk4OWQ5M2U0MTlkNzc3MDg4Mzg4ZDhmMDA4MTRlMDQxMTgy
NjIuLmM3YzI3ZDhmNGNhZTc1OTY1NGZiNTFmYzZkMjllNmI1YTNlOTkzMmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlJ1bnRpbWVGZWF0dXJlcy5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlJ1bnRpbWVGZWF0dXJlcy5oCkBAIC0x
MjUsNiArMTI1LDkgQEAgcHVibGljOgogICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIHZvaWQgZW5h
YmxlU2hhZG93RE9NKGJvb2wpOwogICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIGJvb2wgaXNTaGFk
b3dET01FbmFibGVkKCk7CiAKKyAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyB2b2lkIGVuYWJsZUN1
c3RvbURPTUVsZW1lbnRzKGJvb2wpOworICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIGJvb2wgaXND
dXN0b21ET01FbGVtZW50c0VuYWJsZWQoKTsKKwogICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIHZv
aWQgZW5hYmxlU3R5bGVTY29wZWQoYm9vbCk7CiAgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgYm9v
bCBpc1N0eWxlU2NvcGVkRW5hYmxlZCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJSdW50aW1lRmVhdHVyZXMuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViUnVudGltZUZlYXR1cmVzLmNwcAppbmRleCAwMTliNjczOGE3MTFmOTlkMGY1YmM1
MzI0ZGMyMzdlMzMyZGI2ZjdmLi4xZTg5NzM1OGRjODQ4MTU4YTc3YzI1MmMyMzhhMGZlMGQ2NWI0
OWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJSdW50aW1lRmVh
dHVyZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlJ1bnRpbWVGZWF0
dXJlcy5jcHAKQEAgLTQ2Nyw2ICs0NjcsMjUgQEAgYm9vbCBXZWJSdW50aW1lRmVhdHVyZXM6Omlz
U2hhZG93RE9NRW5hYmxlZCgpCiAjZW5kaWYKIH0KIAordm9pZCBXZWJSdW50aW1lRmVhdHVyZXM6
OmVuYWJsZUN1c3RvbURPTUVsZW1lbnRzKGJvb2wgZW5hYmxlKQoreworI2lmIEVOQUJMRShDVVNU
T01fRUxFTUVOVFMpCisgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0Q3VzdG9tRE9NRWxl
bWVudHMoZW5hYmxlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGVuYWJsZSk7CisjZW5kaWYK
K30KKworYm9vbCBXZWJSdW50aW1lRmVhdHVyZXM6OmlzQ3VzdG9tRE9NRWxlbWVudHNFbmFibGVk
KCkKK3sKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorICAgIHJldHVybiBSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpjdXN0b21ET01FbGVtZW50c0VuYWJsZWQoKTsKKyNlbHNlCisgICAgcmV0
dXJuIGZhbHNlOworI2VuZGlmCit9CisKKwogdm9pZCBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJs
ZVN0eWxlU2NvcGVkKGJvb2wgZW5hYmxlKQogewogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCmRp
ZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNTdhNjBm
NGNhNjczMmZkNjg1MmI1OTkxNjY4YmFmOTA1Y2FiZTA4ZC4uYjc4MGQwMWI2YzAwMzE1MjQzMjYx
MjYyNzQ3OTQ5ZTRlMzBhMmRiMiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEzLTAxLTI3ICBIYWppbWUgTW9ycml0
YSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBbQ3VzdG9tIEVsZW1lbnRzXSBJbXBs
ZW1lbnQgYmFyZS1ib25lIGRvY3VtZW50LnJlZ2lzdGVyKCkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDIyOQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGVuYWJsZUN1c3RvbURPTUVsZW1lbnRz
IGZsYWcuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3Bw
OgorICAgICAgICAoVGVzdFNoZWxsOjpUZXN0U2hlbGwpOgorCiAyMDEzLTAyLTA2ICBSb2dlciBG
b25nICA8cm9nZXJfZm9uZ0BhcHBsZS5jb20+CiAKICAgICAgICAgVlMyMDEwIFdpbkxhdW5jaGVy
IHByb2plY3QsIHByb3BlcnR5IHNoZWV0cyBhbmQgcmVzb3VyY2VzLgpkaWZmIC0tZ2l0IGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcCBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKaW5kZXggYWFjOTUyOTBlMzdjNzJjZGY0NmZk
YjVlZDllZTBmZTEzZTU2NjU4NS4uNTk1OWQyOTZiM2RmYzcwNmNiYzAwNDhlOWU0ZmFmMWRiY2Y1
Y2M3MSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxs
LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCkBA
IC0xNDYsNiArMTQ2LDcgQEAgVGVzdFNoZWxsOjpUZXN0U2hlbGwoKQogICAgIFdlYlJ1bnRpbWVG
ZWF0dXJlczo6ZW5hYmxlVmlkZW9UcmFjayh0cnVlKTsKICAgICBXZWJSdW50aW1lRmVhdHVyZXM6
OmVuYWJsZUdhbWVwYWQodHJ1ZSk7CiAgICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVTaGFk
b3dET00odHJ1ZSk7CisgICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVDdXN0b21ET01FbGVt
ZW50cyh0cnVlKTsKICAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZVN0eWxlU2NvcGVkKHRy
dWUpOwogICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlU2NyaXB0ZWRTcGVlY2godHJ1ZSk7
CiAgICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVSZXF1ZXN0QXV0b2NvbXBsZXRlKHRydWUp
OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCmluZGV4IDVjMjhlZTYyNWJkYTY2ZDcwOGJiODQ3NDJiYzk3ODc4YmUxODY5ODUuLmYxNmM1
MGQ1M2JkOGQzY2IwYTM5MDNhYzg3ZmY5YjM1ZmY4ODAyMjcgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBA
QAorMjAxMy0wMS0yNyAgSGFqaW1lIE1vcnJpdGEgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAg
ICAgICAgW0N1c3RvbSBFbGVtZW50c10gSW1wbGVtZW50IGJhcmUtYm9uZSBkb2N1bWVudC5yZWdp
c3RlcigpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDAyMjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGZhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1iYXNpYy5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9uczoKKwog
MjAxMy0wMi0wNiAgTWlrZSBXZXN0ICA8bWt3c3RAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEVu
dGl0eS1oZWFkZXIgZXh0ZW5zaW9uIGhlYWRlcnMgaG9ub3JlZCBvbiAzMDQgcmVzcG9uc2VzLgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVy
LWJhc2ljLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVu
dC1yZWdpc3Rlci1iYXNpYy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTAwZWI5MDQ3MTY3MTA4
MWEzNzk0MDk2ODdiY2ZhZTkzY2IzMzA4NAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1iYXNpYy1leHBlY3RlZC50eHQKQEAg
LTAsMCArMSw0MiBAQAorVGVzdGluZyBkb2N1bWVudC5yZWdpc3RlcigpIGJhc2ljIGJlaGF2aW9y
cy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgZG9jdW1lbnQucmVnaXN0
ZXIoJ2ZvbycsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpIHRocmV3IGV4Y2VwdGlvbiBFcnJv
cjogSW52YWxpZENoYXJhY3RlckVycm9yOiBET00gRXhjZXB0aW9uIDUuCitQQVNTIGRvY3VtZW50
LnJlZ2lzdGVyKCd4Zm9vJywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSkgdGhyZXcgZXhjZXB0
aW9uIEVycm9yOiBJbnZhbGlkQ2hhcmFjdGVyRXJyb3I6IERPTSBFeGNlcHRpb24gNS4KK1BBU1Mg
ZG9jdW1lbnQucmVnaXN0ZXIoJ21pc3NpbmctZ2x5cGgnLCBjcmVhdGVSZWdpc3RlclBhcmFtdGVy
cygpKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IEludmFsaWRDaGFyYWN0ZXJFcnJvcjogRE9NIEV4
Y2VwdGlvbiA1LgorUEFTUyB0eXBlb2YgZm9vQ29uc3RydWN0b3IgaXMgJ2Z1bmN0aW9uJworUEFT
UyBmb29Db25zdHJ1Y3Rvci5wcm90b3R5cGUuX19wcm90b19fIGlzIEhUTUxQYXJhZ3JhcGhFbGVt
ZW50LnByb3RvdHlwZQorUEFTUyBmb29Db25zdHJ1Y3Rvci5wcm90b3R5cGUudGhpc0lzUHJvdG90
eXBlIGlzIHRydWUKK1BBU1MgZG9jdW1lbnQucmVnaXN0ZXIoJ3gtZm9vJywgY3JlYXRlUmVnaXN0
ZXJQYXJhbXRlcnMoKSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJbnZhbGlkU3RhdGVFcnJvcjog
RE9NIEV4Y2VwdGlvbiAxMS4KK1BBU1MgZG9jdW1lbnQucmVnaXN0ZXIoJ1gtRk9PJywgY3JlYXRl
UmVnaXN0ZXJQYXJhbXRlcnMoKSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJbnZhbGlkU3RhdGVF
cnJvcjogRE9NIEV4Y2VwdGlvbiAxMS4KK1BBU1MgZG9jdW1lbnQucmVnaXN0ZXIoJ3gtYmFkLWEn
LCB7IHByb3RvdHlwZTogSFRNTFNwYW5FbGVtZW50LnByb3RvdHlwZSB9KSB0aHJldyBleGNlcHRp
b24gRXJyb3I6IEludmFsaWRTdGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDExLgorUEFTUyBkb2N1
bWVudC5yZWdpc3RlcigneC1iYWQtYicsIHsgcHJvdG90eXBlOiB7fSB9KSB0aHJldyBleGNlcHRp
b24gRXJyb3I6IEludmFsaWRTdGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDExLgorUEFTUyBkb2N1
bWVudC5yZWdpc3RlcigneC1iYWQtYycsIHsgcHJvdG90eXBlOiBPYmplY3QuY3JlYXRlKERvY3Vt
ZW50LnByb3RvdHlwZSkgfSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJbnZhbGlkU3RhdGVFcnJv
cjogRE9NIEV4Y2VwdGlvbiAxMS4KK1BBU1MgZm9vQ29uc3RydWN0b3IoKSB0aHJldyBleGNlcHRp
b24gVHlwZUVycm9yOiBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMg
YSBmdW5jdGlvbi4uCitQQVNTIGNyZWF0ZWRGb28uX19wcm90b19fIGlzIGZvb0NvbnN0cnVjdG9y
LnByb3RvdHlwZQorUEFTUyBjcmVhdGVkRm9vLmNvbnN0cnVjdG9yIGlzIGZvb0NvbnN0cnVjdG9y
CitQQVNTIGNyZWF0ZWRGb28udGFnTmFtZSBpcyAnWC1GT08nCitQQVNTIGNyZWF0ZWRGb28udGV4
dENvbnRlbnQgaXMgJ0hlbGxvJworUEFTUyBjcmVhdGVkRm9vLmxhc3RDaGlsZCBpcyBjaGlsZERp
dgorUEFTUyBwYXJzZWRGb28uX19wcm90b19fIGlzIGZvb0NvbnN0cnVjdG9yLnByb3RvdHlwZQor
UEFTUyBwYXJzZWRGb28udGFnTmFtZSBpcyAnWC1GT08nCitQQVNTIHBhcnNlZEZvby5zb21lUHJv
cGVydHkgaXMgY29udGFpbmVyLmZpcnN0Q2hpbGQuc29tZVByb3BlcnR5CitQQVNTIGNyZWF0ZWRC
YXIudGFnTmFtZSBpcyAnWC1CQVInCitQQVNTIGNyZWF0ZWRCYXoudGFnTmFtZSBpcyAnWC1CQVon
CitQQVNTIGNyZWF0ZWRCYXoudGhpc0lzUHJvdG90eXBlIGlzIHRydWUKK1BBU1MgY3JlYXRlZEJh
ei50aGlzSXNBbHNvUHJvdG90eXBlIGlzIHRydWUKK1BBU1MgY3JlYXRlZFVwcGVyQmFyLmNvbnN0
cnVjdG9yIGlzIGJhckNvbnN0cnVjdG9yCitQQVNTIGNyZWF0ZWRVcHBlckJhci50YWdOYW1lIGlz
ICdYLUJBUicKK1BBU1MgY3JlYXRlZE1peGVkQmFyLmNvbnN0cnVjdG9yIGlzIGJhckNvbnN0cnVj
dG9yCitQQVNTIGNyZWF0ZWRNaXhlZEJhci50YWdOYW1lIGlzICdYLUJBUicKK1BBU1MgY29udGFp
bmVyLmZpcnN0Q2hpbGQuY29uc3RydWN0b3IgaXMgYmFyQ29uc3RydWN0b3IKK1BBU1MgY29udGFp
bmVyLmZpcnN0Q2hpbGQudGFnTmFtZSBpcyAnWC1CQVInCitQQVNTIGNvbnRhaW5lci5sYXN0Q2hp
bGQuY29uc3RydWN0b3IgaXMgYmFyQ29uc3RydWN0b3IKK1BBU1MgY29udGFpbmVyLmxhc3RDaGls
ZC50YWdOYW1lIGlzICdYLUJBUicKK1BBU1MgKG5ldyAoZG9jdW1lbnQucmVnaXN0ZXIoJ3ktYmFy
JywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSkpKCkpLnRhZ05hbWUgaXMgJ1ktQkFSJworUEFT
UyAobmV3IChkb2N1bWVudC5yZWdpc3RlcigneXotYmFyJywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRl
cnMoKSkpKCkpLnRhZ05hbWUgaXMgJ1laLUJBUicKK1BBU1MgKG5ldyAoZG9jdW1lbnQucmVnaXN0
ZXIoJ3ktei1iYXInLCBjcmVhdGVSZWdpc3RlclBhcmFtdGVycygpKSkoKSkudGFnTmFtZSBpcyAn
WS1aLUJBUicKK1BBU1MgKG5ldyAoZG9jdW1lbnQucmVnaXN0ZXIoJ3ktLWJhcicsIGNyZWF0ZVJl
Z2lzdGVyUGFyYW10ZXJzKCkpKSgpKS50YWdOYW1lIGlzICdZLS1CQVInCisKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1iYXNpYy5odG1s
IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLWJhc2ljLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNDA2M2RiZmQ1ZDgzZmFlMTEwY2IyMTFkY2M4YTY5Y2Y4NThmM2VkYgot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1y
ZWdpc3Rlci1iYXNpYy5odG1sCkBAIC0wLDAgKzEsMTExIEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0iY29udGFpbmVyIj48L2Rp
dj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdGluZyBkb2N1bWVudC5yZWdpc3RlcigpIGJh
c2ljIGJlaGF2aW9ycy4iKTsKKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5u
ZXIuZHVtcEFzVGV4dCgpOworZG9jdW1lbnQucmVnaXN0ZXIgPSBkb2N1bWVudC5yZWdpc3RlciB8
fCBkb2N1bWVudC53ZWJraXRSZWdpc3RlcjsKKworZnVuY3Rpb24gY3JlYXRlUmVnaXN0ZXJQYXJh
bXRlcnMoKQoreworICAgIHJldHVybiB7CisgICAgICAgIHByb3RvdHlwZTogT2JqZWN0LmNyZWF0
ZShIVE1MUGFyYWdyYXBoRWxlbWVudC5wcm90b3R5cGUsIHsgdGhpc0lzUHJvdG90eXBlOiB7IHZh
bHVlOiB0cnVlIH0gfSkKKyAgICB9OworfQorCisvLyBJbnZhbGlkIG5hbWVzCitzaG91bGRUaHJv
dygiZG9jdW1lbnQucmVnaXN0ZXIoJ2ZvbycsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpIiwg
IidFcnJvcjogSW52YWxpZENoYXJhY3RlckVycm9yOiBET00gRXhjZXB0aW9uIDUnIik7CitzaG91
bGRUaHJvdygiZG9jdW1lbnQucmVnaXN0ZXIoJ3hmb28nLCBjcmVhdGVSZWdpc3RlclBhcmFtdGVy
cygpKSIsICInRXJyb3I6IEludmFsaWRDaGFyYWN0ZXJFcnJvcjogRE9NIEV4Y2VwdGlvbiA1JyIp
Oworc2hvdWxkVGhyb3coImRvY3VtZW50LnJlZ2lzdGVyKCdtaXNzaW5nLWdseXBoJywgY3JlYXRl
UmVnaXN0ZXJQYXJhbXRlcnMoKSkiLCAiJ0Vycm9yOiBJbnZhbGlkQ2hhcmFjdGVyRXJyb3I6IERP
TSBFeGNlcHRpb24gNSciKTsKKwordmFyIGZvb0NvbnN0cnVjdG9yID0gZG9jdW1lbnQucmVnaXN0
ZXIoIngtZm9vIiwgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSk7CitzaG91bGRCZSgidHlwZW9m
IGZvb0NvbnN0cnVjdG9yIiwgIidmdW5jdGlvbiciKTsKK3Nob3VsZEJlKCJmb29Db25zdHJ1Y3Rv
ci5wcm90b3R5cGUuX19wcm90b19fIiwgIkhUTUxQYXJhZ3JhcGhFbGVtZW50LnByb3RvdHlwZSIp
Oworc2hvdWxkQmVUcnVlKCJmb29Db25zdHJ1Y3Rvci5wcm90b3R5cGUudGhpc0lzUHJvdG90eXBl
Iik7CisKKy8vIE5hbWUgY29uZmxpY3RzCitzaG91bGRUaHJvdygiZG9jdW1lbnQucmVnaXN0ZXIo
J3gtZm9vJywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSkiLCAiJ0Vycm9yOiBJbnZhbGlkU3Rh
dGVFcnJvcjogRE9NIEV4Y2VwdGlvbiAxMSciKTsKK3Nob3VsZFRocm93KCJkb2N1bWVudC5yZWdp
c3RlcignWC1GT08nLCBjcmVhdGVSZWdpc3RlclBhcmFtdGVycygpKSIsICInRXJyb3I6IEludmFs
aWRTdGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDExJyIpOworCisvLyBCYWQgcHJvdG90eXBlOiBj
b25zdHJ1Y3RvciBwcm9wZXJ0eSBleGlzdHMKK3Nob3VsZFRocm93KCJkb2N1bWVudC5yZWdpc3Rl
cigneC1iYWQtYScsIHsgcHJvdG90eXBlOiBIVE1MU3BhbkVsZW1lbnQucHJvdG90eXBlIH0pIiwg
IidFcnJvcjogSW52YWxpZFN0YXRlRXJyb3I6IERPTSBFeGNlcHRpb24gMTEnIik7CisvLyBCYWQg
cHJvdG90eXBlOiBtaXNzaW5nIF9fcHJvdG9fXworc2hvdWxkVGhyb3coImRvY3VtZW50LnJlZ2lz
dGVyKCd4LWJhZC1iJywgeyBwcm90b3R5cGU6IHt9IH0pIiwgIidFcnJvcjogSW52YWxpZFN0YXRl
RXJyb3I6IERPTSBFeGNlcHRpb24gMTEnIik7CisvLyBCYWQgcHJvdG90eXBlOiB3cm9uZyBfX3By
b3RvX18KK3Nob3VsZFRocm93KCJkb2N1bWVudC5yZWdpc3RlcigneC1iYWQtYycsIHsgcHJvdG90
eXBlOiBPYmplY3QuY3JlYXRlKERvY3VtZW50LnByb3RvdHlwZSkgfSkiLCAiJ0Vycm9yOiBJbnZh
bGlkU3RhdGVFcnJvcjogRE9NIEV4Y2VwdGlvbiAxMSciKTsKKworLy8gQ2FsbCBhcyBmdW5jdGlv
bgorc2hvdWxkVGhyb3coImZvb0NvbnN0cnVjdG9yKCkiLCAiJ1R5cGVFcnJvcjogRE9NIG9iamVj
dCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJyIpCisKKy8vIENv
bnN0cnVjdG9yIGluaXRpYXRlZCBpbnN0YW50aWF0aW9uCit2YXIgY3JlYXRlZEZvbyA9IG5ldyBm
b29Db25zdHJ1Y3RvcigpOworCisvLyBKUyBidWlsdC1pbiBwcm9wZXJ0aWVzCitzaG91bGRCZSgi
Y3JlYXRlZEZvby5fX3Byb3RvX18iLCAiZm9vQ29uc3RydWN0b3IucHJvdG90eXBlIik7CitzaG91
bGRCZSgiY3JlYXRlZEZvby5jb25zdHJ1Y3RvciIsICJmb29Db25zdHJ1Y3RvciIpOworCisvLyBO
YXRpdmUgZ2V0dGVyCitzaG91bGRCZSgiY3JlYXRlZEZvby50YWdOYW1lIiwgIidYLUZPTyciKTsK
KworLy8gTmF0aXZlIHNldHRlcgorY3JlYXRlZEZvby5pbm5lckhUTUwgPSAiSGVsbG8iOworc2hv
dWxkQmUoImNyZWF0ZWRGb28udGV4dENvbnRlbnQiLCAiJ0hlbGxvJyIpOworCisvLyBOYXRpdmUg
bWV0aG9kCit2YXIgY2hpbGREaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKK2Ny
ZWF0ZWRGb28uYXBwZW5kQ2hpbGQoY2hpbGREaXYpOworc2hvdWxkQmUoImNyZWF0ZWRGb28ubGFz
dENoaWxkIiwgImNoaWxkRGl2Iik7CisKKy8vIFBhcnNlciBpbml0aWF0ZWQgaW5zdGFudGlhdGlv
bgordmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250YWluZXIiKTsK
K2NvbnRhaW5lci5pbm5lckhUTUwgPSAiPHgtZm9vPjwveC1mb28+IjsKK3BhcnNlZEZvbyA9IGNv
bnRhaW5lci5maXJzdENoaWxkOworCitzaG91bGRCZSgicGFyc2VkRm9vLl9fcHJvdG9fXyIsICJm
b29Db25zdHJ1Y3Rvci5wcm90b3R5cGUiKTsKK3Nob3VsZEJlKCJwYXJzZWRGb28udGFnTmFtZSIs
ICInWC1GT08nIik7CisKKy8vIEVuc3VyaW5nIHRoZSB3cmFwcGVyIGlzIHJldGFpbmVkCitwYXJz
ZWRGb28uc29tZVByb3BlcnR5ID0gImhlbGxvIjsKK3Nob3VsZEJlKCJwYXJzZWRGb28uc29tZVBy
b3BlcnR5IiwgImNvbnRhaW5lci5maXJzdENoaWxkLnNvbWVQcm9wZXJ0eSIpOworCisvLyBIYXZp
bmcgYW5vdGhlciBjb25zdHJ1Y3RvcgordmFyIGJhckNvbnN0cnVjdG9yID0gZG9jdW1lbnQucmVn
aXN0ZXIoIngtYmFyIiwgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSk7Cit2YXIgY3JlYXRlZEJh
ciA9IG5ldyBiYXJDb25zdHJ1Y3RvcigpOworc2hvdWxkQmUoImNyZWF0ZWRCYXIudGFnTmFtZSIs
ICInWC1CQVInIik7CisKKy8vIEhhdmluZyBhIHN1YmNsYXNzCit2YXIgYmF6Q29uc3RydWN0b3Ig
PSBkb2N1bWVudC5yZWdpc3RlcigieC1iYXoiLCB7IHByb3RvdHlwZTogT2JqZWN0LmNyZWF0ZShm
b29Db25zdHJ1Y3Rvci5wcm90b3R5cGUsIHsgdGhpc0lzQWxzb1Byb3RvdHlwZTogeyB2YWx1ZTog
dHJ1ZSB9IH0pIH0pOwordmFyIGNyZWF0ZWRCYXogPSBuZXcgYmF6Q29uc3RydWN0b3IoKTsKK3No
b3VsZEJlKCJjcmVhdGVkQmF6LnRhZ05hbWUiLCAiJ1gtQkFaJyIpOworc2hvdWxkQmVUcnVlKCJj
cmVhdGVkQmF6LnRoaXNJc1Byb3RvdHlwZSIpOworc2hvdWxkQmVUcnVlKCJjcmVhdGVkQmF6LnRo
aXNJc0Fsc29Qcm90b3R5cGUiKTsKKworLy8gV2l0aCBpcnJlZ3VsYXIgY2FzZXMKK3ZhciBjcmVh
dGVkVXBwZXJCYXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJYLUJBUiIpOwordmFyIGNyZWF0
ZWRNaXhlZEJhciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlgtQmFyIik7CitzaG91bGRCZSgi
Y3JlYXRlZFVwcGVyQmFyLmNvbnN0cnVjdG9yIiwgImJhckNvbnN0cnVjdG9yIik7CitzaG91bGRC
ZSgiY3JlYXRlZFVwcGVyQmFyLnRhZ05hbWUiLCAiJ1gtQkFSJyIpOworc2hvdWxkQmUoImNyZWF0
ZWRNaXhlZEJhci5jb25zdHJ1Y3RvciIsICJiYXJDb25zdHJ1Y3RvciIpOworc2hvdWxkQmUoImNy
ZWF0ZWRNaXhlZEJhci50YWdOYW1lIiwgIidYLUJBUiciKTsKKworY29udGFpbmVyLmlubmVySFRN
TCA9ICI8WC1CQVI+PC9YLUJBUj48WC1CYXI+PC9YLUJhcj4iOworc2hvdWxkQmUoImNvbnRhaW5l
ci5maXJzdENoaWxkLmNvbnN0cnVjdG9yIiwgImJhckNvbnN0cnVjdG9yIik7CitzaG91bGRCZSgi
Y29udGFpbmVyLmZpcnN0Q2hpbGQudGFnTmFtZSIsICInWC1CQVInIik7CitzaG91bGRCZSgiY29u
dGFpbmVyLmxhc3RDaGlsZC5jb25zdHJ1Y3RvciIsICJiYXJDb25zdHJ1Y3RvciIpOworc2hvdWxk
QmUoImNvbnRhaW5lci5sYXN0Q2hpbGQudGFnTmFtZSIsICInWC1CQVInIik7CisKKy8vIFN0cmFu
Z2UgYnV0IHZhbGlkIG5hbWVzCitzaG91bGRCZSgiKG5ldyAoZG9jdW1lbnQucmVnaXN0ZXIoJ3kt
YmFyJywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSkpKCkpLnRhZ05hbWUiLCAiJ1ktQkFSJyIp
Oworc2hvdWxkQmUoIihuZXcgKGRvY3VtZW50LnJlZ2lzdGVyKCd5ei1iYXInLCBjcmVhdGVSZWdp
c3RlclBhcmFtdGVycygpKSkoKSkudGFnTmFtZSIsICInWVotQkFSJyIpOworc2hvdWxkQmUoIihu
ZXcgKGRvY3VtZW50LnJlZ2lzdGVyKCd5LXotYmFyJywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMo
KSkpKCkpLnRhZ05hbWUiLCAiJ1ktWi1CQVInIik7CitzaG91bGRCZSgiKG5ldyAoZG9jdW1lbnQu
cmVnaXN0ZXIoJ3ktLWJhcicsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpKSgpKS50YWdOYW1l
IiwgIidZLS1CQVInIik7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucwppbmRleCBkZDJhNDM0MzE1OGIwMTM4MmI0
ZWQwYzA0Mjc5ZDgxYWEwNzNlMWMxLi4xNDlhNThhNmMyZDU4Y2JmZmQ4NWU5YjkzM2Y0NDkxNjBk
MmQwZTg0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0
aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucwpAQCAt
MTA5Myw2ICsxMDkzLDkgQEAgd2Via2l0Lm9yZy9iLzc2NDg5IGNvbXBvc2l0aW5nL3dlYmdsL3dl
YmdsLXJlZmxlY3Rpb24uaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzc2
NDM5IFsgRGVidWcgXSBmYXN0L2RvbS9zaGFkb3cvY29udGVudC1lbGVtZW50LWFwaS5odG1sIFsg
RmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvNzY0MzkgWyBEZWJ1ZyBdIGZhc3QvZG9tL3NoYWRvdy9j
b250ZW50LWVsZW1lbnQtb3V0c2lkZS1zaGFkb3cuaHRtbCBbIEZhaWx1cmUgXQogCisjIEVOQUJM
RShDVVNUT01fRUxFTUVOVFMpIGlzIGRpc2FibGVkLgorZmFzdC9kb20vY3VzdG9tCisKICMgQ1NT
IFZhcmlhYmxlcyBhcmUgbm90IHlldCBlbmFibGVkLgogd2Via2l0Lm9yZy9iLzg1NTgwIGZhc3Qv
Y3NzL3ZhcmlhYmxlcwogd2Via2l0Lm9yZy9iLzg1NTgwIGluc3BlY3Rvci9zdHlsZXMvdmFyaWFi
bGVzCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187035</attachid>
            <date>2013-02-07 02:52:23 -0800</date>
            <delta_ts>2013-02-07 20:06:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100229-20130207194859.patch</filename>
            <type>text/plain</type>
            <size>89564</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyMDg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWVjMGYyNWEwZTM0MDQ3
MDg2YjEwY2E3NzFlMGFlMDBiZjllYTNmMi4uZjAxZDA1NzE4MTMyM2Y0MmM1YjBlNzFkZWQ4NzJh
YmJmYWY3OWU1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwNCBAQAorMjAxMy0wMi0wNiAgSGFq
aW1lIE1vcnJpdGEgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKworICAgICAgICBbQ3VzdG9tIEVs
ZW1lbnRzXSBJbXBsZW1lbnQgYmFyZS1ib25lIGRvY3VtZW50LnJlZ2lzdGVyKCkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDIyOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGltcGxl
bWVudHMgcHJlZml4ZWQgdmVyc2lvbiBvZiBkb2N1bWVudC5yZWdpc3RlcigpLCB3aXRoIG1pbmlt
YWwgZmVhdHVyZSBzdXBwb3J0LgorICAgICAgICAtIFRoZSBmZWF0dXJlIGlzIGd1YXJkZWQgYnkg
RU5BQkxFKENVU1RPTV9FTEVNRU5UUykgYW5kIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmN1c3Rv
bURPTUVsZW1lbnRzRW5hYmxlZCgpLgorICAgICAgICAtIFRoaXMgYmFyZS1ib25lIHZlcnNpb24g
b25seSByZWNvZ25pemVzICJuYW1lIiBhbmQgInByb3RvdHlwZSIgcGFyYW1ldGVycy4gSXQgZG9l
c24ndCBzdXBwb3J0IGRlZmF1bHQgdmFsdWUgb2YgInByb3RvdHlwZSIgcGFyYW1ldGVyLgorICAg
ICAgICAtIEN1cnJlbnRseSBvbmx5IFY4IGlzIHN1cHBvcnRlZC4gSlNDIGJpbmRpbmcgbmVlZHMg
aXRzIG93biBiaW5kaW5nIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgID0gTWFqb3IgbmV3IGNs
YXNzZXMgdW5kZXIgZG9tLzoKKworICAgICAgICBUaGUgZG9tIG1vZHVsZSBoYXMgdHdvIG5ldyBj
bGFzc2VzOgorICAgICAgICAtIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvcjogQSByZXR1cm4gdmFs
dWUgb2YgZG9jdW1lbnQucmVnaXN0ZXIoKQorICAgICAgICAgIHdoaWNoIGhvbGRzIHRoZSBjdXN0
b20gZWxlbWVudCBkZWZpbml0aW9uLgorICAgICAgICAtIEN1c3RvbUVsZW1lbnRSZWdpc3RyeTog
QSBjb2xsZWN0aW9uIG9mIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciBvYmplY3RzLgorICAgICAg
ICAgIEN1c3RvbUVsZW1lbnRSZWdpc3RyeSBpbnN0YW5jZSBpcyBjcmVhdGVkIHBlciBEb2N1bWVu
dCBhbmQgaXMgb3duZWQgYnkgdGhlIERvY3VtZW50LgorCisgICAgICAgIEN1c3RvbUVsZW1lbnRD
b25zdHJ1Y3RvciBrbm93cyB0aGUgZGVmaW5pdGlvbiBvZiBlYWNoIGN1c3RvbQorICAgICAgICBl
bGVtZW50LCB3aGljaCBpcyByZWdpc3RlcmVkIGJ5IGRvY3VtZW50LnJlZ2lzdGVyKCkuIFRoZSBu
YW1lIGFuZAorICAgICAgICBvdGhlciBvcHRpb25zIGFyZSBoZWxkIGJ5IHRoaXMgb2JqZWN0LiBD
dXN0b21FbGVtZW50UmVnaXN0cnkgb3ducyBhIHNldAorICAgICAgICBvZiB0aGUgcmVnaXN0ZXJl
ZCBjb25zdHJ1Y3RvcnMuIFRoZSByZWdpc3RyeSBndWFyYW50ZWVzIGludmFyaWFudHMKKyAgICAg
ICAgbGlrZSB2YWxpZGl0eSBhbmQgdW5pcXVlbmVzcyBvZiB0aGUgZWxlbWVudCBuYW1lcy4KKwor
ICAgICAgICA9IEEgY2hhbmdlIG9uIG1ha2VfbmFtZXMucGwKKworICAgICAgICBUaGlzIGNoYW5n
ZSB0d2Vha3MgbWFrZV9uYW1lcy5wbCAob3IgZ2VuZXJhdGVkIEhUTUxFbGVtZW50RmFjdG9yeSkK
KyAgICAgICAgdG8gaG9vayB0aGUgY3JlYXRpb25zIG9mIHVua25vd24gZWxlbWVudHMuIFNvbWUg
b2YgZWxlbWVudCBuYW1lcworICAgICAgICB3aGljaCBjb21lIHRvIHRoZSBmYWxsYmFjayBwYXRo
IGNhbiBiZSBvbmUgb2YgcmVnaXN0ZXJlZCBjdXN0b20KKyAgICAgICAgZWxlbWVudC4KKworICAg
ICAgICA9IFtWOFdyYXBBc0Z1bmN0aW9uXSBleHRlbmRlZCBhdHRyaWJ1dGU6CisKKyAgICAgICAg
VGhlIGRvY3VtZW50LnJlZ2lzdGVyKCkgQVBJIHJldHVybnMgYSBjb25zdHJ1Y3RvcgorICAgICAg
ICBmdW5jdGlvbi4gSG93ZXZlciwgdGhlIFY4IGJpbmRpbmcgY3VycmVudGx5IGRvZXNuJ3Qgc3Vw
cG9ydCBpdC4gVG8KKyAgICAgICAgbWFrZSBpdCBwb3NzaWJsZSwgdGhpcyBjaGFuZ2UgaW50cm9k
dWNlcyAiVjhXcmFwQXNGdW5jdGlvbiIKKyAgICAgICAgZXh0ZW5kZWQgYXR0cmlidXRlIGZvciBh
bm5vdGF0aW5nIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciBJREwKKyAgICAgICAgaW50ZXJmYWNl
LgorCisgICAgICAgIFY4V3JhcEFzRnVuY3Rpb24gd3JhcHMgdGhlIGFubm90YXRlZCBpbnRlcmZh
Y2Ugd2l0aCBhIEphdmFTY3JpcHQKKyAgICAgICAgZnVuY3Rpb24sIHdoaWNoIGNhbGxzIHRoZSBv
cmlnaW5hbCBvYmplY3QgYXMgYSBmdW5jdGlvbiwgb3IgYXMgYQorICAgICAgICBjb25zdHJ1Y3Rv
cgorCisgICAgICAgIFdpdGggdGhpcyB3cmFwcGVyIGZ1bmN0aW9uLCB0aGVyZSBhcmUgdHdvIGxl
dmVscyBvZiBpbmRpcmVjdGlvbgorICAgICAgICBiZXR3ZWVuIG5hdGl2ZSBDKysgb2JqZWN0IGFu
ZCBhdXRob3ItdmlzaWJsZSBKUyBmdW5jdGlvbjoKKworICAgICAgICBbSlMgQWRhcHRvciBGaWN0
aW9uXSA8LShoaWRkZW4gcHJvcGVydHkpLT4gW0pTIFdyYXBwZXIgT2JqZWN0XSAtKGludGVybmFs
IGZpZWxkKS0+IFtDKysgTmF0aXZlIG9iamVjdF0KKworICAgICAgICBUaGUgY29kZSBnZW5lcmF0
b3IgZ2VuZXJhdGVzIHRoZSBiaW5kaW5nIGNvZGUgd2hpY2ggZGVhbHMgd2l0aAorICAgICAgICB0
aGlzIGluZGlyZWN0aW9uLiAgQWxzbywgdGhlcmUgaXMgYSBzZXQgb2YgaGVscGVyIGZ1bmN0aW9u
cyBpbgorICAgICAgICBWOEFkYXB0b3JGdW5jdGlvbi5oL2NwcCB3aGljaCB0YWtlIGNhcmUgb2Yg
dGhpcyBpbmRpcmVjdGlvbi4KKyAgICAgICAgVjhET01XcmFwcGVyLmNwcC9oIHdvcmtzIGFzIGEg
ZmFjYWRlIGZvciB0aGVzZSBBUElzIGFuZCBpcyB1c2VkIGZyb20KKyAgICAgICAgdGhlIGdlbmVy
YXRlZCBjb2RlLgorCisgICAgICAgIFRoaXMgcmVkdW5kYW5jeSBjb21lcyBmcm9tIGxpbWl0YXRp
b25zIG9mIGJvdGggVjggYmluZGluZ3MgYW5kIFY4CisgICAgICAgIGVtYmVkZGluZyBBUEkuIFNl
ZSBidWcgMTA4MTM4IGZvciBkZXRhaWxzLgorCisgICAgICAgID0gVjhIVE1MQ3VzdG9tRWxlbWVu
dAorCisgICAgICAgIFVubGlrZSBidWlsdC1pbiBIVE1MIGVsZW1lbnRzLCBhbnkgY3VzdG9tIGVs
ZW1lbnQgaGFzIG5vCisgICAgICAgIGNvcnJlc3BvbmRpbmcgQysrIGNsYXNzLiBJbnN0ZWFkLCBk
b2N1bWVudC5yZWdpc3RlcigpIHNob3VsZCBhbGxvdworICAgICAgICBwYXNzaW5nIGEgcHJvdG90
eXBlIG9iamVjdCBmb3IgdGhlIGVsZW1lbnRzIGJlaW5nIHJlZ2lzdGVyZWQuCisKKyAgICAgICAg
QWx0aG91Z2ggdGhpcyBmaXJzdCB2ZXJzaW9uIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgb3B0aW9uYWwg
cHJvdG90eXBlCisgICAgICAgIHBhcmFtZXRlciB5ZXQsIFY4SFRNTEN1c3RvbUVsZW1lbnQgY2xh
c3MgaXMgbWFkZSBmb3IgYSBwbHVtYmluZworICAgICAgICBmb3Igc3VwcG9ydGluZyBzdWNoIGZl
YXR1cmVzIGluIGNvbWluZyBjaGFuZ2VzLiBUaGlzIGNsYXNzCisgICAgICAgIGVuY2Fwc3VsYXRl
cyBKUyB3cmFwcGVyIG9iamVjdCBjcmVhdGlvbiBmb3IgY3VzdG9tIGVsZW1lbnQKKyAgICAgICAg
aW5zdGFuY2VzLiBGb3IgZXhhbXBsZSwgaXQgdGFrZXMgY2FyZSBvZiBwcm90b3R5cGUgY2hhaW4g
c2V0dXAuIEFzCisgICAgICAgIHdlIHN1cHBvcnQgdGhlICJwcm90b3R5cGUiIG9wdGlvbmFsIHBh
cmFtZXRlciBmb3IgZG9jdW1lbnQucmVnaXN0ZXIoKSwKKyAgICAgICAgdGhpcyBwbHVtYmluZyB3
aWxsIGJlIGV4dGVuZGVkLgorCisgICAgICAgID0gQ3VzdG9tIERPTSBlbGVtZW50cyBhbmQgbXVs
dGlwbGUgd29ybGRzCisKKyAgICAgICAgSW4gdGhpcyBwYXRjaCwgY3VzdG9tIGVsZW1lbnQgcmVn
aXN0cmF0aW9uIGFuZCBpbnN0YW50aWF0aW9uIGlzIG5vdCBhbGxvd2VkCisgICAgICAgIGluIG5v
bi1tYWluIHdvcmxkIGFuZCBkb2N1bWVudC5yZWdpc3RlcigpIEFQSSBqdXN0IGZhaWxzIHRoZXJl
LgorCisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1iYXNp
Yy5odG1sCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIFdlYkNv
cmUuZ3lwaToKKyAgICAgICAgKiBiaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVy
ZXMuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJl
cy5oOgorICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6Y3VzdG9tRE9N
RWxlbWVudHNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNldEN1c3RvbURPTUVsZW1lbnRzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0
ZXMudHh0OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50SGVscGVyczo6aW5pdGlhbGl6
ZUNvbnN0cnVjdG9yV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpoYXNQcm90b3R5cGVJbkNo
YWluKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRIZWxwZXJzOjppc1ZhbGlkUHJv
dG90eXBlUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRIZWxwZXJz
Ojppc0ZlYXR1cmVBbGxvd2VkKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9DdXN0b21FbGVtZW50
SGVscGVycy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhpZGRl
blByb3BlcnR5TmFtZS5oLgorICAgICAgICAoQ3VzdG9tRWxlbWVudEhlbHBlcnMpOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpWOEFkYXB0b3JGdW5jdGlvbjo6Z2V0VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6VjhBZGFwdG9yRnVuY3Rpb246OmNvbmZpZ3VyZVRlbXBsYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlY4QWRhcHRvckZ1bmN0aW9uOjppbnZvY2F0aW9uQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6VjhBZGFwdG9yRnVuY3Rpb246OndyYXApOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4
QWRhcHRvckZ1bmN0aW9uLmg6IEFkZGVkLgorICAgICAgICAoVjhBZGFwdG9yRnVuY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6VjhBZGFwdG9yRnVuY3Rpb246OnVud3JhcCk6CisgICAgICAgIChX
ZWJDb3JlOjpWOEFkYXB0b3JGdW5jdGlvbjo6Z2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9W
OERPTVdyYXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjp0b0Z1bmN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6ZnJvbUZ1bmN0aW9uKToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaDoKKyAgICAgICAgKFY4RE9NV3JhcHBl
cik6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVudC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6VjhIVE1MQ3VzdG9tRWxlbWVudDo6Y3JlYXRlV3JhcHBlcik6
CisgICAgICAgICogYmluZGluZ3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVudC5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oLgorICAg
ICAgICAoVjhIVE1MQ3VzdG9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpWOEhUTUxDdXN0
b21FbGVtZW50Ojp0b1Y4KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDdXN0b21FbGVtZW50Ojp0
b1Y4KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvckN1c3Rv
bS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b21FbGVtZW50Q29uc3RydWN0
b3I6OmNhbGxBc0Z1bmN0aW9uQ2FsbGJhY2spOgorICAgICAgICAqIGRvbS9DdXN0b21FbGVtZW50
Q29uc3RydWN0b3IuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OEhpZGRlblByb3BlcnR5TmFtZS5oLgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudENvbnN0
cnVjdG9yOjpDdXN0b21FbGVtZW50Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vz
dG9tRWxlbWVudENvbnN0cnVjdG9yOjp+Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6d2lsbERlc3Ryb3lEb2N1bWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6OmNyZWF0ZUVs
ZW1lbnQpOgorICAgICAgICAqIGRvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaC4K
KyAgICAgICAgKEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpD
dXN0b21FbGVtZW50Q29uc3RydWN0b3I6OmRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkN1
c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6dGFnTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0
b21FbGVtZW50Q29uc3RydWN0b3I6Om5hbWUpOgorICAgICAgICAqIGRvbS9DdXN0b21FbGVtZW50
Q29uc3RydWN0b3IuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBkb20vQ3VzdG9tRWxlbWVudFJlZ2lz
dHJ5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVnaXN0cnk6
OkN1c3RvbUVsZW1lbnRSZWdpc3RyeSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50
UmVnaXN0cnk6On5DdXN0b21FbGVtZW50UmVnaXN0cnkpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vz
dG9tRWxlbWVudFJlZ2lzdHJ5Ojpjb25zdHJ1Y3Rvck9mKToKKyAgICAgICAgKFdlYkNvcmU6OkN1
c3RvbUVsZW1lbnRSZWdpc3RyeTo6aXNWYWxpZE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vz
dG9tRWxlbWVudFJlZ2lzdHJ5OjpyZWdpc3RlckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpmaW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVs
ZW1lbnRSZWdpc3RyeTo6Y3JlYXRlRWxlbWVudCk6CisgICAgICAgICogZG9tL0N1c3RvbUVsZW1l
bnRSZWdpc3RyeS5oOiBBZGRlZC4KKyAgICAgICAgKEN1c3RvbUVsZW1lbnRSZWdpc3RyeSk6Cisg
ICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpy
ZW1vdmVkTGFzdFJlZik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVnaXN0ZXJFbGVt
ZW50KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKERvY3VtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWdpc3RyeSk6CisgICAgICAgICogZG9tL21ha2Vf
bmFtZXMucGw6CisgICAgICAgIChwcmludFdyYXBwZXJGYWN0b3J5Q3BwRmlsZSk6CisgICAgICAg
ICogaHRtbC9IVE1MRG9jdW1lbnQuaWRsOgorCisyMDEzLTAxLTI5ICBIYWppbWUgTW9ycml0YSAg
PG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBbQ3VzdG9tIEVsZW1lbnRzXSBJbXBsZW1l
bnQgYmFyZS1ib25lIGRvY3VtZW50LnJlZ2lzdGVyKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDIyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGltcGxlbWVudHMgcHJlZml4ZWQg
dmVyc2lvbiBvZiBkb2N1bWVudC5yZWdpc3RlcigpLCB3aXRoIG1pbmltYWwgZmVhdHVyZSBzdXBw
b3J0LgorICAgICAgICAtIFRoZSBmZWF0dXJlIGlzIGd1YXJkZWQgYnkgRU5BQkxFKENVU1RPTV9F
TEVNRU5UUykgYW5kIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmN1c3RvbURPTUVsZW1lbnRzRW5h
YmxlZCgpLgorICAgICAgICAtIFRoaXMgYmFyZS1ib25lIHZlcnNpb24gb25seSByZWNvZ25pemVz
ICJuYW1lIiBwYXJhbWV0ZXIgYW5kIGlnbm9yZXMgYW55IG90aGVyIG9wdGlvbmFsIHBhcmFtZXRl
cnMuCisgICAgICAgIC0gQ3VycmVudGx5IG9ubHkgVjggaXMgc3VwcG9ydGVkLiBKU0MgYmluZGlu
ZyBuZWVkcyBpdHMgb3duIGJpbmRpbmcgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgPSBNYWpv
ciBuZXcgY2xhc3NlcyB1bmRlciBkb20vOgorCisgICAgICAgIFRoZSBkb20gbW9kdWxlIGhhcyB0
d28gbmV3IGNsYXNzZXM6CisgICAgICAgIC0gQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOiBBIHJl
dHVybiB2YWx1ZSBvZiBkb2N1bWVudC5yZWdpc3RlcigpCisgICAgICAgICAgd2hpY2ggaG9sZHMg
dGhlIGN1c3RvbSBlbGVtZW50IGRlZmluaXRpb24uCisgICAgICAgIC0gQ3VzdG9tRWxlbWVudFJl
Z2lzdHJ5OiBBIGNvbGxlY3Rpb24gb2YgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yIG9iamVjdHMu
CisgICAgICAgICAgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5IGluc3RhbmNlIGlzIGNyZWF0ZWQgcGVy
IERvY3VtZW50IGFuZCBpcyBvd25lZCBieSB0aGUgRG9jdW1lbnQuCisKKyAgICAgICAgQ3VzdG9t
RWxlbWVudENvbnN0cnVjdG9yIGtub3dzIHRoZSBkZWZpbml0aW9uIG9mIGVhY2ggY3VzdG9tCisg
ICAgICAgIGVsZW1lbnQsIHdoaWNoIGlzIHJlZ2lzdGVyZWQgYnkgZG9jdW1lbnQucmVnaXN0ZXIo
KS4gVGhlIG5hbWUgYW5kCisgICAgICAgIG90aGVyIG9wdGlvbnMgYXJlIGhlbGQgYnkgdGhpcyBv
YmplY3QuIEN1c3RvbUVsZW1lbnRSZWdpc3RyeSBvd25zIGEgc2V0CisgICAgICAgIG9mIHRoZSBy
ZWdpc3RlcmVkIGNvbnN0cnVjdG9ycy4gVGhlIHJlZ2lzdHJ5IGd1YXJhbnRlZXMgaW52YXJpYW50
cworICAgICAgICBsaWtlIHZhbGlkaXR5IGFuZCB1bmlxdWVuZXNzIG9mIHRoZSBlbGVtZW50IG5h
bWVzLgorCisgICAgICAgID0gQSBjaGFuZ2Ugb24gbWFrZV9uYW1lcy5wbAorCisgICAgICAgIFRo
aXMgY2hhbmdlIHR3ZWFrcyBtYWtlX25hbWVzLnBsIChvciBnZW5lcmF0ZWQgSFRNTEVsZW1lbnRG
YWN0b3J5KQorICAgICAgICB0byBob29rIHRoZSBjcmVhdGlvbnMgb2YgdW5rbm93biBlbGVtZW50
cy4gU29tZSBvZiBlbGVtZW50IG5hbWVzCisgICAgICAgIHdoaWNoIGNvbWUgdG8gdGhlIGZhbGxi
YWNrIHBhdGggY2FuIGJlIG9uZSBvZiByZWdpc3RlcmVkIGN1c3RvbQorICAgICAgICBlbGVtZW50
LgorCisgICAgICAgID0gW1Y4V3JhcEFzRnVuY3Rpb25dIGV4dGVuZGVkIGF0dHJpYnV0ZToKKwor
ICAgICAgICBUaGUgZG9jdW1lbnQucmVnaXN0ZXIoKSBBUEkgcmV0dXJucyBhIGNvbnN0cnVjdG9y
CisgICAgICAgIGZ1bmN0aW9uLiBIb3dldmVyLCB0aGUgVjggYmluZGluZyBjdXJyZW50bHkgZG9l
c24ndCBzdXBwb3J0IGl0LiBUbworICAgICAgICBtYWtlIGl0IHBvc3NpYmxlLCB0aGlzIGNoYW5n
ZSBpbnRyb2R1Y2VzICJWOFdyYXBBc0Z1bmN0aW9uIgorICAgICAgICBleHRlbmRlZCBhdHRyaWJ1
dGUgZm9yIGFubm90YXRpbmcgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yIElETAorICAgICAgICBp
bnRlcmZhY2UuCisKKyAgICAgICAgVjhXcmFwQXNGdW5jdGlvbiB3cmFwcyB0aGUgYW5ub3RhdGVk
IGludGVyZmFjZSB3aXRoIGEgSmF2YVNjcmlwdAorICAgICAgICBmdW5jdGlvbiwgd2hpY2ggY2Fs
bHMgdGhlIG9yaWdpbmFsIG9iamVjdCBhcyBhIGZ1bmN0aW9uLCBvciBhcyBhCisgICAgICAgIGNv
bnN0cnVjdG9yCisKKyAgICAgICAgV2l0aCB0aGlzIHdyYXBwZXIgZnVuY3Rpb24sIHRoZXJlIGFy
ZSB0d28gbGV2ZWxzIG9mIGluZGlyZWN0aW9uCisgICAgICAgIGJldHdlZW4gbmF0aXZlIEMrKyBv
YmplY3QgYW5kIGF1dGhvci12aXNpYmxlIEpTIGZ1bmN0aW9uOgorCisgICAgICAgIFtKUyBBZGFw
dG9yIEZpY3Rpb25dIDwtKGhpZGRlbiBwcm9wZXJ0eSktPiBbSlMgV3JhcHBlciBPYmplY3RdIC0o
aW50ZXJuYWwgZmllbGQpLT4gW0MrKyBOYXRpdmUgb2JqZWN0XQorCisgICAgICAgIFRoZSBjb2Rl
IGdlbmVyYXRvciBnZW5lcmF0ZXMgdGhlIGJpbmRpbmcgY29kZSB3aGljaCBkZWFscyB3aXRoCisg
ICAgICAgIHRoaXMgaW5kaXJlY3Rpb24uICBBbHNvLCB0aGVyZSBpcyBhIHNldCBvZiBoZWxwZXIg
ZnVuY3Rpb25zIGluCisgICAgICAgIFY4QWRhcHRvckZ1bmN0aW9uLmgvY3BwIHdoaWNoIHRha2Ug
Y2FyZSBvZiB0aGlzIGluZGlyZWN0aW9uLgorICAgICAgICBWOERPTVdyYXBwZXIuY3BwL2ggd29y
a3MgYXMgYSBmYWNhZGUgZm9yIHRoZXNlIEFQSXMgYW5kIGlzIHVzZWQgZnJvbQorICAgICAgICB0
aGUgZ2VuZXJhdGVkIGNvZGUuCisKKyAgICAgICAgVGhpcyByZWR1bmRhbmN5IGNvbWVzIGZyb20g
bGltaXRhdGlvbnMgb2YgYm90aCBWOCBiaW5kaW5ncyBhbmQgVjgKKyAgICAgICAgZW1iZWRkaW5n
IEFQSS4gU2VlIGJ1ZyAxMDgxMzggZm9yIGRldGFpbHMuCisKKyAgICAgICAgPSBWOEhUTUxDdXN0
b21FbGVtZW50CisKKyAgICAgICAgVW5saWtlIGJ1aWx0LWluIEhUTUwgZWxlbWVudHMsIGFueSBj
dXN0b20gZWxlbWVudCBoYXMgbm8KKyAgICAgICAgY29ycmVzcG9uZGluZyBDKysgY2xhc3MuIElu
c3RlYWQsIGRvY3VtZW50LnJlZ2lzdGVyKCkgc2hvdWxkIGFsbG93CisgICAgICAgIHBhc3Npbmcg
YSBwcm90b3R5cGUgb2JqZWN0IGZvciB0aGUgZWxlbWVudHMgYmVpbmcgcmVnaXN0ZXJlZC4KKwor
ICAgICAgICBBbHRob3VnaCB0aGlzIGZpcnN0IHZlcnNpb24gZG9lc24ndCBzdXBwb3J0IHRoZSBv
cHRpb25hbCBwcm90b3R5cGUKKyAgICAgICAgcGFyYW1ldGVyIHlldCwgVjhIVE1MQ3VzdG9tRWxl
bWVudCBjbGFzcyBpcyBtYWRlIGZvciBhIHBsdW1iaW5nCisgICAgICAgIGZvciBzdXBwb3J0aW5n
IHN1Y2ggZmVhdHVyZXMgaW4gY29taW5nIGNoYW5nZXMuIFRoaXMgY2xhc3MKKyAgICAgICAgZW5j
YXBzdWxhdGVzIEpTIHdyYXBwZXIgb2JqZWN0IGNyZWF0aW9uIGZvciBjdXN0b20gZWxlbWVudAor
ICAgICAgICBpbnN0YW5jZXMuIEZvciBleGFtcGxlLCBpdCB0YWtlcyBjYXJlIG9mIHByb3RvdHlw
ZSBjaGFpbiBzZXR1cC4gQXMKKyAgICAgICAgd2Ugc3VwcG9ydCB0aGUgInByb3RvdHlwZSIgb3B0
aW9uYWwgcGFyYW1ldGVyIGZvciBkb2N1bWVudC5yZWdpc3RlcigpLAorICAgICAgICB0aGlzIHBs
dW1iaW5nIHdpbGwgYmUgZXh0ZW5kZWQuCisKKyAgICAgICAgPSBDdXN0b20gRE9NIGVsZW1lbnRz
IGFuZCBtdWx0aXBsZSB3b3JsZHMKKworICAgICAgICBJbiB0aGlzIHBhdGNoLCBjdXN0b20gZWxl
bWVudCByZWdpc3RyYXRpb24gYW5kIGluc3RhbnRpYXRpb24gaXMgbm90IGFsbG93ZWQKKyAgICAg
ICAgaW4gbm9uLW1haW4gd29ybGQgYW5kIGRvY3VtZW50LnJlZ2lzdGVyKCkgQVBJIGp1c3QgZmFp
bHMgdGhlcmUuCisKKyAgICAgICAgVGVzdDogZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lz
dGVyLWJhc2ljLmh0bWwKKworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAg
ICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGJpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJs
ZWRGZWF0dXJlcy5jcHA6CisgICAgICAgICogYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxl
ZEZlYXR1cmVzLmg6CisgICAgICAgIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmN1c3RvbURPTUVsZW1lbnRzRW5hYmxl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzZXRDdXN0b21E
T01FbGVtZW50cyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgu
cG06CisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy9JRExBdHRyaWJ1dGVzLnR4dDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9DdXN0b21FbGVtZW50
SGVscGVycy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudEhlbHBl
cnM6OmluaXRpYWxpemVDb25zdHJ1Y3RvcldyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vz
dG9tRWxlbWVudEhlbHBlcnM6OmRlZmF1bHRQcm90b3R5cGVPZik6CisgICAgICAgIChXZWJDb3Jl
OjpDdXN0b21FbGVtZW50SGVscGVyczo6aXNDdXN0b21FbGVtZW50c0FsbG93ZWQpOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmguCisgICAgICAgIChD
dXN0b21FbGVtZW50SGVscGVycyk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhBZGFwdG9yRnVu
Y3Rpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlY4QWRhcHRvckZ1bmN0aW9uOjpn
ZXRUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOEFkYXB0b3JGdW5jdGlvbjo6Y29uZmln
dXJlVGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhBZGFwdG9yRnVuY3Rpb246Omludm9j
YXRpb25DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOEFkYXB0b3JGdW5jdGlvbjo6d3Jh
cCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhBZGFwdG9yRnVuY3Rpb24uaDogQWRkZWQuCisg
ICAgICAgIChWOEFkYXB0b3JGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpWOEFkYXB0b3JG
dW5jdGlvbjo6dW53cmFwKToKKyAgICAgICAgKFdlYkNvcmU6OlY4QWRhcHRvckZ1bmN0aW9uOjpn
ZXQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpWOERPTVdyYXBwZXI6OnRvRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6VjhE
T01XcmFwcGVyOjpmcm9tRnVuY3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV3Jh
cHBlci5oOgorICAgICAgICAoVjhET01XcmFwcGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9W
OEhUTUxDdXN0b21FbGVtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpWOEhUTUxD
dXN0b21FbGVtZW50OjpjcmVhdGVXcmFwcGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEhU
TUxDdXN0b21FbGVtZW50Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmguCisgICAgICAgIChWOEhUTUxDdXN0b21FbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlY4SFRNTEN1c3RvbUVsZW1lbnQ6OnRvVjgpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEN1c3RvbUVsZW1lbnQ6OnRvVjgpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yQ3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpWOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y2FsbEFzRnVuY3Rpb25DYWxsYmFjayk6
CisgICAgICAgICogZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5jcHA6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmguCisgICAg
ICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6OkN1c3RvbUVsZW1lbnRDb25zdHJ1
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6On5DdXN0
b21FbGVtZW50Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yOjp3aWxsRGVzdHJveURvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3Rv
bUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlRWxlbWVudCk6CisgICAgICAgICogZG9tL0N1c3Rv
bUVsZW1lbnRDb25zdHJ1Y3Rvci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oLgorICAgICAgICAoQ3VzdG9tRWxlbWVudENvbnN0
cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6ZG9j
dW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjp0YWdO
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6bmFtZSk6
CisgICAgICAgICogZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5pZGw6IEFkZGVkLgorICAg
ICAgICAqIGRvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6fkN1c3RvbUVsZW1lbnRSZWdp
c3RyeSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVnaXN0cnk6OmNvbnN0cnVj
dG9yT2YpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5Ojppc1ZhbGlk
TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVnaXN0cnk6OnJlZ2lzdGVy
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVnaXN0cnk6OmZpbmQp
OgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpjcmVhdGVFbGVtZW50
KToKKyAgICAgICAgKiBkb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Lmg6IEFkZGVkLgorICAgICAg
ICAoQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlbW92ZWRMYXN0UmVmKToKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50OjpyZWdpc3RlckVsZW1lbnQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlZ2lzdHJ5KToKKyAgICAgICAgKiBk
b20vbWFrZV9uYW1lcy5wbDoKKyAgICAgICAgKHByaW50V3JhcHBlckZhY3RvcnlDcHBGaWxlKToK
KyAgICAgICAgKiBodG1sL0hUTUxEb2N1bWVudC5pZGw6CisKIDIwMTMtMDItMDcgIElseWEgVGlr
aG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgZml4
IGZvciBpbnNwZWN0b3IgdGVzdHMgaW4gZGVidWcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmlu
ZGV4IDY1YzFmMGYyMGIwMTQ4YzIyMzFmYzA2MmQ5ZWY5YjhjMTk5ZGRkMTUuLmUwYmUxMzI3YzBl
ZGU5MTFlZTYxYThiNWQ0ZTFmODJlYTViOGNhMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjAgQEAKKzIwMTMtMDEtMjcgIEhhamltZSBNb3JyaXRhICA8bW9ycml0YUBn
b29nbGUuY29tPgorCisgICAgICAgIFtDdXN0b20gRWxlbWVudHNdIEltcGxlbWVudCBiYXJlLWJv
bmUgZG9jdW1lbnQucmVnaXN0ZXIoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTAwMjI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkZWQgZW5hYmxlQ3VzdG9tRE9NRWxlbWVudHMgZmxhZy4KKworICAg
ICAgICAqIGZlYXR1cmVzLmd5cGk6CisgICAgICAgICogcHVibGljL1dlYlJ1bnRpbWVGZWF0dXJl
cy5oOgorICAgICAgICAoV2ViUnVudGltZUZlYXR1cmVzKToKKyAgICAgICAgKiBzcmMvV2ViUnVu
dGltZUZlYXR1cmVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUnVudGltZUZlYXR1cmVzOjpl
bmFibGVDdXN0b21ET01FbGVtZW50cyk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJSdW50aW1lRmVhdHVyZXM6OmlzQ3VzdG9tRE9NRWxlbWVudHNFbmFibGVkKToKKwog
MjAxMy0wMi0wNiAgVGVycnkgQW5kZXJzb24gIDx0ZGFuZGVyc29uQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBBZGQgc3VwcG9ydCBmb3IgZ2VzdHVyZSBzY3JvbGwgZXZlbnRzIHRoYXQgZG8gbm90
IHByb3BhZ2F0ZSB0byBlbmNsb3Npbmcgc2Nyb2xsYWJsZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNl
cy5tYWtlCmluZGV4IDM5YmRlOGVjYzU4OTFiYTE4MmNhY2E0ZjNhODdhNGIyNTg2YjBlZmMuLjQ3
YzBkNmE3YTI4MzI0YzQyY2U1ZTU5NGQ4ZWRjNzNlYzg1YjJlZDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvRGVyaXZl
ZFNvdXJjZXMubWFrZQpAQCAtMjE0LDYgKzIxNCw3IEBAIEJJTkRJTkdfSURMUyA9IFwKICAgICAk
KFdlYkNvcmUpL2RvbS9DbGlwYm9hcmQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2RvbS9Db21tZW50
LmlkbCBcCiAgICAgJChXZWJDb3JlKS9kb20vQ29tcG9zaXRpb25FdmVudC5pZGwgXAorICAgICQo
V2ViQ29yZSkvZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5pZGwgXAogICAgICQoV2ViQ29y
ZSkvZG9tL0N1c3RvbUV2ZW50LmlkbCBcCiAgICAgJChXZWJDb3JlKS9kb20vRE9NQ29yZUV4Y2Vw
dGlvbi5pZGwgXAogICAgICQoV2ViQ29yZSkvZG9tL0RPTUVycm9yLmlkbCBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKaW5kZXggMjhjOGU3ZDFmYjhlZGJjZjZmZGEzZTA2ZTIxMjg3N2MxZTE1MTE3MS4uMThkNzE5
MWQ0NzY5M2IwYjlhOTlmMWU3NGE2ZGE5OGQ2MmIwZjVlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAt
MjA0LDYgKzIwNCw3IEBACiAgICAgICAgICAgICAnZG9tL0NsaXBib2FyZC5pZGwnLAogICAgICAg
ICAgICAgJ2RvbS9Db21tZW50LmlkbCcsCiAgICAgICAgICAgICAnZG9tL0NvbXBvc2l0aW9uRXZl
bnQuaWRsJywKKyAgICAgICAgICAgICdkb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmlkbCcs
CiAgICAgICAgICAgICAnZG9tL0N1c3RvbUV2ZW50LmlkbCcsCiAgICAgICAgICAgICAnZG9tL0RP
TUNvcmVFeGNlcHRpb24uaWRsJywKICAgICAgICAgICAgICdkb20vRE9NRXJyb3IuaWRsJywKQEAg
LTExOTMsNiArMTE5NCw4IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvQXJyYXlWYWx1ZS5o
JywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9CaW5kaW5nU3RhdGUuY3BwJywKICAgICAgICAg
ICAgICdiaW5kaW5ncy92OC9CaW5kaW5nU3RhdGUuaCcsCisgICAgICAgICAgICAnYmluZGluZ3Mv
djgvQ3VzdG9tRWxlbWVudEhlbHBlcnMuY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9D
dXN0b21FbGVtZW50SGVscGVycy5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9ET01EYXRh
U3RvcmUuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvRE9NUmVxdWVzdFN0YXRlLmgnLApAQCAtMTI2MSw2ICsx
MjY0LDggQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9TaGFyZWRQZXJzaXN0ZW50LmgnLAog
ICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmNwcCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaCcsCisgICAg
ICAgICAgICAnYmluZGluZ3MvdjgvVjhBZGFwdG9yRnVuY3Rpb24uY3BwJywKKyAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5oJywKICAgICAgICAgICAgICdiaW5kaW5n
cy92OC9WOEJpbmRpbmcuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEJpbmRpbmcu
aCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhCaW5kaW5nTWFjcm9zLmgnLApAQCAtMTI4
Miw2ICsxMjg3LDggQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5o
JywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEdDRm9yQ29udGV4dERpc3Bvc2UuY3BwJywK
ICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEdDRm9yQ29udGV4dERpc3Bvc2UuaCcsCisgICAg
ICAgICAgICAnYmluZGluZ3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVudC5jcHAnLAorICAgICAgICAg
ICAgJ2JpbmRpbmdzL3Y4L1Y4SFRNTEN1c3RvbUVsZW1lbnQuaCcsCiAgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5n
cy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9W
OEluaXRpYWxpemVyLmNwcCcsCkBAIC0xMzQyLDYgKzEzNDksNyBAQAogICAgICAgICAgICAgJ2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOENvbnNvbGVDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5k
aW5ncy92OC9jdXN0b20vVjhDb29yZGluYXRlc0N1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOENyeXB0b0N1c3RvbS5jcHAnLAorICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvckN1c3RvbS5jcHAnLAogICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUV2ZW50Q3VzdG9tLmNwcCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjay5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVhQ
YXRoTlNSZXNvbHZlci5jcHAnLApAQCAtMjc3Myw2ICsyNzgxLDEwIEBACiAgICAgICAgICAgICAn
ZG9tL0NvbnRleHRGZWF0dXJlcy5jcHAnLAogICAgICAgICAgICAgJ2RvbS9Db250ZXh0RmVhdHVy
ZXMuaCcsCiAgICAgICAgICAgICAnZG9tL0Nyb3NzVGhyZWFkVGFzay5oJywKKyAgICAgICAgICAg
ICdkb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmNwcCcsCisgICAgICAgICAgICAnZG9tL0N1
c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oJywKKyAgICAgICAgICAgICdkb20vQ3VzdG9tRWxlbWVu
dFJlZ2lzdHJ5LmNwcCcsCisgICAgICAgICAgICAnZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5o
JywKICAgICAgICAgICAgICdkb20vQ3VzdG9tRXZlbnQuY3BwJywKICAgICAgICAgICAgICdkb20v
Q3VzdG9tRXZlbnQuaCcsCiAgICAgICAgICAgICAnZG9tL0RPTUFsbEluT25lLmNwcCcsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVh
dHVyZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxl
ZEZlYXR1cmVzLmNwcAppbmRleCA4MjBmNWE2YWY5ZWI3NDIzNzgxOTc5NmRiMjgwNWQ1YTJlNmE3
OTNhLi43NGY4NTI4MmM4ZWIzNDllY2ZlODhlMDA2ODhiZmNkN2ZiMDM5MTNjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5jcHAKQEAgLTE4OSw2ICsxODksMTAgQEAgYm9vbCBSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjppc1NoYWRvd0RPTUVuYWJsZWQgPSBmYWxzZTsKIGJvb2wgUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6aXNBdXRob3JTaGFkb3dET01Gb3JBbnlFbGVtZW50RW5hYmxlZCA9IGZhbHNlOwogI2Vu
ZGlmCiAKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorYm9vbCBSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjppc0N1c3RvbURPTUVsZW1lbnRzRW5hYmxlZCA9IGZhbHNlOworI2VuZGlmCisKICNp
ZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQogYm9vbCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjppc1N0
eWxlU2NvcGVkRW5hYmxlZCA9IGZhbHNlOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oCmluZGV4IDIx
NTMyZTljZWVhYjczZWY3MDhlNTY1YmVjYWZhODQwNTA4NWI1ZTAuLjc0YzgyNDIzMWE1NmU2YWZm
N2U3ZDMzODkwYzBkYzZkZjM3M2Q4ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oCkBAIC0yMTAsNiArMjEw
LDExIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRBdXRob3JTaGFkb3dET01Gb3JBbnlF
bGVtZW50RW5hYmxlZChib29sIGlzRW5hYmxlZCkgeyBpc0F1dGhvclNoYWRvd0RPTUZvckFueUVs
ZW1lbnRFbmFibGVkID0gaXNFbmFibGVkOyB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDVVNUT01f
RUxFTUVOVFMpCisgICAgc3RhdGljIGJvb2wgY3VzdG9tRE9NRWxlbWVudHNFbmFibGVkKCkgeyBy
ZXR1cm4gaXNDdXN0b21ET01FbGVtZW50c0VuYWJsZWQ7IH0KKyAgICBzdGF0aWMgdm9pZCBzZXRD
dXN0b21ET01FbGVtZW50cyhib29sIGlzRW5hYmxlZCkgeyBpc0N1c3RvbURPTUVsZW1lbnRzRW5h
YmxlZCA9IGlzRW5hYmxlZDsgfQorI2VuZGlmCisKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQog
ICAgIHN0YXRpYyBib29sIHN0eWxlU2NvcGVkRW5hYmxlZCgpIHsgcmV0dXJuIGlzU3R5bGVTY29w
ZWRFbmFibGVkOyB9CiAgICAgc3RhdGljIHZvaWQgc2V0U3R5bGVTY29wZWRFbmFibGVkKGJvb2wg
aXNFbmFibGVkKSB7IGlzU3R5bGVTY29wZWRFbmFibGVkID0gaXNFbmFibGVkOyB9CkBAIC0zNDEs
NiArMzQ2LDEwIEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGJvb2wgaXNBdXRob3JTaGFkb3dET01G
b3JBbnlFbGVtZW50RW5hYmxlZDsKICNlbmRpZgogCisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5U
UykKKyAgICBzdGF0aWMgYm9vbCBpc0N1c3RvbURPTUVsZW1lbnRzRW5hYmxlZDsKKyNlbmRpZgor
CiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKICAgICBzdGF0aWMgYm9vbCBpc1N0eWxlU2NvcGVk
RW5hYmxlZDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCA1Y2Q1ZTAzNzdhMzBkNGYwMzM1MTE0MmRjZDJhNDk5
Nzc5YjQ1YmU3Li4wOWU4MDkxMDJjOTRlYWRmMmM0Y2FlMDlhNmQ2MmUwZDcxMWIwNTU4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bQpAQCAtMzUyLDEzICszNTIsMjAgQEAgRU5ECiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICJmYWxzZTtcbiIpOwogICAgIH0KIAorICAgIG15ICRmcm9tRnVuY3Rpb25PcGVuaW5nID0gIiI7
CisgICAgbXkgJGZyb21GdW5jdGlvbkNsb3NpbmcgPSAiIjsKKyAgICBpZiAoJGludGVyZmFjZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlY4V3JhcEFzRnVuY3Rpb24ifSkgeworICAgICAgICAkZnJv
bUZ1bmN0aW9uT3BlbmluZyA9ICJWOERPTVdyYXBwZXI6OmZyb21GdW5jdGlvbigiOworICAgICAg
ICAkZnJvbUZ1bmN0aW9uQ2xvc2luZyA9ICIpIjsKKyAgICB9CisKICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCA8PEVORCk7CiAgICAgc3RhdGljIGJvb2wgSGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2
ODo6VmFsdWU+LCB2ODo6SXNvbGF0ZSopOwogICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6
RnVuY3Rpb25UZW1wbGF0ZT4gR2V0UmF3VGVtcGxhdGUodjg6Oklzb2xhdGUqKTsKICAgICBzdGF0
aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdldFRlbXBsYXRlKHY4OjpJ
c29sYXRlKik7CiAgICAgc3RhdGljICR7bmF0aXZlVHlwZX0qIHRvTmF0aXZlKHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gb2JqZWN0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8JHtuYXRpdmVUeXBlfSo+KG9iamVjdC0+R2V0QWxpZ25lZFBvaW50ZXJGcm9tSW50ZXJuYWxG
aWVsZCh2OERPTVdyYXBwZXJPYmplY3RJbmRleCkpOworICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDwke25hdGl2ZVR5cGV9Kj4oJHtmcm9tRnVuY3Rpb25PcGVuaW5nfW9iamVjdCR7ZnJv
bUZ1bmN0aW9uQ2xvc2luZ30tPkdldEFsaWduZWRQb2ludGVyRnJvbUludGVybmFsRmllbGQodjhE
T01XcmFwcGVyT2JqZWN0SW5kZXgpKTsKICAgICB9CiAgICAgc3RhdGljIHZvaWQgZGVyZWZPYmpl
Y3Qodm9pZCopOwogICAgIHN0YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKQEAgLTUzOSw2ICs1
NDYsOSBAQCBFTkQKICAgICB9IGVsc2UgewogCiAgICAgICAgIG15ICRjcmVhdGVXcmFwcGVyQ2Fs
bCA9ICRjdXN0b21XcmFwID8gIiR7djhJbnRlcmZhY2VOYW1lfTo6d3JhcCIgOiAiJHt2OEludGVy
ZmFjZU5hbWV9OjpjcmVhdGVXcmFwcGVyIjsKKyAgICAgICAgbXkgJHJldHVybmluZ1dyYXBwZXIg
PSAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVjhXcmFwQXNGdW5jdGlvbiJ9ID8g
IlY4RE9NV3JhcHBlcjo6dG9GdW5jdGlvbih3cmFwcGVyKSIgOiAid3JhcHBlciI7CisgICAgICAg
IG15ICRyZXR1cm5pbmdDcmVhdGVkV3JhcHBlck9wZW5pbmcgPSAkaW50ZXJmYWNlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiVjhXcmFwQXNGdW5jdGlvbiJ9ID8gIlY4RE9NV3JhcHBlcjo6dG9GdW5j
dGlvbigiIDogIiI7CisgICAgICAgIG15ICRyZXR1cm5pbmdDcmVhdGVkV3JhcHBlckNsb3Npbmcg
PSAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVjhXcmFwQXNGdW5jdGlvbiJ9ID8g
IiwgaW1wbC0+bmFtZSgpLCBpc29sYXRlKSIgOiAiIjsKIAogICAgICAgICBpZiAoJGN1c3RvbVdy
YXApIHsKICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKQEAgLTU1Miw3
ICs1NjIsNyBAQCBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKCR7bmF0aXZlVHlw
ZX0qIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gYwogewogICAgIEFTU0VSVChpbXBsKTsK
ICAgICBBU1NFUlQoRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyKGltcGwsIGlzb2xhdGUpLklzRW1w
dHkoKSk7Ci0gICAgcmV0dXJuICRjcmVhdGVXcmFwcGVyQ2FsbChpbXBsLCBjcmVhdGlvbkNvbnRl
eHQsIGlzb2xhdGUpOworICAgIHJldHVybiAke3JldHVybmluZ0NyZWF0ZWRXcmFwcGVyT3Blbmlu
Z30kY3JlYXRlV3JhcHBlckNhbGwoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKSR7cmV0
dXJuaW5nQ3JlYXRlZFdyYXBwZXJDbG9zaW5nfTsKIH0KIEVORAogICAgICAgICB9CkBAIC01NjUs
NyArNTc1LDcgQEAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KCR7bmF0aXZlVHlw
ZX0qIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3IKICAgICAgICAgcmV0dXJuIHY4TnVs
bFdpdGhDaGVjayhpc29sYXRlKTsKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9
IERPTURhdGFTdG9yZTo6Z2V0V3JhcHBlcihpbXBsLCBpc29sYXRlKTsKICAgICBpZiAoIXdyYXBw
ZXIuSXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAgICAgICAgcmV0dXJuICRy
ZXR1cm5pbmdXcmFwcGVyOwogICAgIHJldHVybiB3cmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwg
aXNvbGF0ZSk7CiB9CiAKQEAgLTU3Niw3ICs1ODYsNyBAQCBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHRvVjhGYXN0KCR7bmF0aXZlVHlwZX0qIGltcGwsIGNvbnN0IEhvbGRlckNvbnRhaW5l
cgogICAgICAgICByZXR1cm4gdjhOdWxsKGNvbnRhaW5lci5HZXRJc29sYXRlKCkpOwogICAgIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IERPTURhdGFTdG9yZTo6Z2V0V3JhcHBlckZh
c3QoaW1wbCwgY29udGFpbmVyLCB3cmFwcGFibGUpOwogICAgIGlmICghd3JhcHBlci5Jc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiB3cmFwcGVyOworICAgICAgICByZXR1cm4gJHJldHVybmluZ1dy
YXBwZXI7CiAgICAgcmV0dXJuIHdyYXAoaW1wbCwgY29udGFpbmVyLkhvbGRlcigpLCBjb250YWlu
ZXIuR2V0SXNvbGF0ZSgpKTsKIH0KIEVORApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQKaW5kZXggYzYzNjQ0ZmJlOTY1MjlkZjc4YTIzODMw
YTU2YjY0MWEyZGJlZGQwNy4uMTg2MTExODE1MDllYzNiNWNjNzRjMGE5ZjMwOGI2YjA1OThjYTM0
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1
dGVzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0
ZXMudHh0CkBAIC0xMjksMyArMTI5LDQgQEAgVjhNZWFzdXJlQXM9KgogVjhSZWFkT25seQogVjhT
a2lwVlRhYmxlVmFsaWRhdGlvbgogVjhVbmZvcmdlYWJsZQorVjhXcmFwQXNGdW5jdGlvbgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvQ3VzdG9tRWxlbWVudEhlbHBlcnMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvQ3VzdG9tRWxlbWVudEhlbHBlcnMuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjBlMDE2MmI1ZGYwNzIwYThmM2MwNWVhYmE5ODQyN2JjMWZlM2E0YWMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9DdXN0b21FbGVtZW50
SGVscGVycy5jcHAKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQ3VzdG9tRWxlbWVudEhlbHBlcnMuaCIKKworI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5o
IgorI2luY2x1ZGUgIlY4Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiVjhI
VE1MRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBFTkFCTEUoQ1VTVE9N
X0VMRU1FTlRTKQorCit2b2lkIEN1c3RvbUVsZW1lbnRIZWxwZXJzOjppbml0aWFsaXplQ29uc3Ry
dWN0b3JXcmFwcGVyKEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciogY29uc3RydWN0b3IsIGNvbnN0
IFNjcmlwdFZhbHVlJiBwcm90b3R5cGUsIFNjcmlwdFN0YXRlKiBzdGF0ZSkKK3sKKyAgICBBU1NF
UlQoaXNGZWF0dXJlQWxsb3dlZChzdGF0ZSkpOworICAgIEFTU0VSVCghcHJvdG90eXBlLnY4VmFs
dWUoKS5Jc0VtcHR5KCkgJiYgcHJvdG90eXBlLnY4VmFsdWUoKS0+SXNPYmplY3QoKSk7CisgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6
Q2FzdChXZWJDb3JlOjp0b1Y4KGNvbnN0cnVjdG9yLCBzdGF0ZS0+Y29udGV4dCgpLT5HbG9iYWwo
KSwgc3RhdGUtPmNvbnRleHQoKS0+R2V0SXNvbGF0ZSgpKSk7CisgICAgLy8gLSBPYmplY3Q6OkZv
cmNlU2V0KCkgbm9yIE9iamVjdDo6U2V0QWNjZXNzb3IgRG9lc24ndCB3b3JrIGFnYWluc3QgdGhl
ICJwcm90b3R5cGUiIHByb3BlcnR5IG9mIGZ1bmN0aW9uIG9iamVjdHMuCisgICAgLy8gLSBTZXQo
KS1pbmcgaGVyZSBpcyBzYWZlIGJlY2F1c2UKKyAgICAvLyAgIC0gX19kZWZpbmVTZXR0ZXJfXyBu
b3IgX19kZWZpbmVHZXR0ZXJfXyBhbHNvIGRvZXNuJ3Qgd29yayBhZ2FpbnN0IGZ1bmN0aW9uIG9i
amVjdHMgYW5kCisgICAgLy8gICAtIFVzaW5nIFNldCgpIGlzIG9rYXkgYmVjYXVlcyBlYWNoIGZ1
bmN0aW9uIGhhcyAicHJvdG90eXBlIiBwcm9wZXJ0eSBmcm9tIHN0YXJ0IGFuZCBPYmplY3RzLnBy
b3RvdHlwZSBjYW5ub3QgaW50ZXJjZXB0IHRoZSBwcm9wZXJ0eSBhY2Nlc3MuCisgICAgd3JhcHBl
ci0+U2V0KHY4U3RyaW5nKCJwcm90b3R5cGUiLCBzdGF0ZS0+Y29udGV4dCgpLT5HZXRJc29sYXRl
KCkpLCBwcm90b3R5cGUudjhWYWx1ZSgpLCB2ODo6UmVhZE9ubHkpOworCisgICAgdjg6OkhhbmRs
ZTx2ODo6U3RyaW5nPiBjb25zdHJ1Y3RvcktleSA9IHY4U3RyaW5nKCJjb25zdHJ1Y3RvciIsIHN0
YXRlLT5jb250ZXh0KCktPkdldElzb2xhdGUoKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBwcm90b3R5cGVPYmplY3QgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHByb3RvdHlw
ZS52OFZhbHVlKCkpOworICAgIEFTU0VSVCghcHJvdG90eXBlT2JqZWN0LT5IYXNPd25Qcm9wZXJ0
eShjb25zdHJ1Y3RvcktleSkpOworICAgIHByb3RvdHlwZU9iamVjdC0+Rm9yY2VTZXQoY29uc3Ry
dWN0b3JLZXksIHdyYXBwZXIsIHY4OjpSZWFkT25seSk7Cit9CisKK3N0YXRpYyBib29sIGhhc1By
b3RvdHlwZUluQ2hhaW4odjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBwcm90b3R5cGUsIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBjaGFpbikKK3sKKyAgICB3aGlsZSAoIWNoYWluLklzRW1wdHkoKSkgewor
ICAgICAgICBpZiAoY2hhaW4gPT0gcHJvdG90eXBlKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGlmICghY2hhaW4tPklzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGNoYWluID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChjaGFpbikt
PkdldFByb3RvdHlwZSgpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBD
dXN0b21FbGVtZW50SGVscGVyczo6aXNWYWxpZFByb3RvdHlwZVBhcmFtZXRlcihjb25zdCBTY3Jp
cHRWYWx1ZSYgcHJvdG90eXBlLCBTY3JpcHRTdGF0ZSogc3RhdGUpCit7CisgICAgaWYgKHByb3Rv
dHlwZS52OFZhbHVlKCkuSXNFbXB0eSgpIHx8ICFwcm90b3R5cGUudjhWYWx1ZSgpLT5Jc09iamVj
dCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBkb2N1bWVudC5yZWdpc3Rlcigp
IHNldHMgdGhlIGNvbnN0cnVjZHRvciBwcm9wZXJ0eSwgc28gdGhlIHByb3RvdHlwZSBzaG91bGRu
J3QgaGF2ZSBvbmUuCisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBwcm90b3R5cGVPYmplY3Qg
PSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHByb3RvdHlwZS52OFZhbHVlKCkpOworICAg
IGlmIChwcm90b3R5cGVPYmplY3QtPkhhc093blByb3BlcnR5KHY4U3RyaW5nKCJjb25zdHJ1Y3Rv
ciIsIHN0YXRlLT5jb250ZXh0KCktPkdldElzb2xhdGUoKSkpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgVjhQZXJDb250ZXh0RGF0YSogcGVyQ29udGV4dERhdGEgPSBWOFBlckNvbnRleHRE
YXRhOjpmcm9tKHN0YXRlLT5jb250ZXh0KCkpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
Y29uc3RydWN0b3IgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHBlckNvbnRleHREYXRh
LT5jb25zdHJ1Y3RvckZvclR5cGUoJlY4SFRNTEVsZW1lbnQ6OmluZm8pKTsKKyAgICAvLyBUaGlz
IEdldCgpIGlzIHNhZmUgc2luY2UgdGhlIHByb3RvdHlwZSBwcm9wZXJ0eSBvZiB0aGUgY29uc3Ry
dWN0b3IgaXMgYnVpbHQtaW4gYW5kIHJlYWQtb25seS4KKyAgICB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IGNvbnN0cnVjdG9yUHJvdG90eXBlID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChj
b25zdHJ1Y3Rvci0+R2V0KHY4U3RyaW5nKCJwcm90b3R5cGUiLCBzdGF0ZS0+Y29udGV4dCgpLT5H
ZXRJc29sYXRlKCkpKSk7CisgICAgaWYgKCFoYXNQcm90b3R5cGVJbkNoYWluKGNvbnN0cnVjdG9y
UHJvdG90eXBlLCBwcm90b3R5cGVPYmplY3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ3VzdG9tRWxlbWVudEhlbHBlcnM6OmlzRmVhdHVyZUFs
bG93ZWQoU2NyaXB0U3RhdGUqIHN0YXRlKQoreworICAgIHJldHVybiBpc0ZlYXR1cmVBbGxvd2Vk
KHN0YXRlLT5jb250ZXh0KCkpOworfQorCitib29sIEN1c3RvbUVsZW1lbnRIZWxwZXJzOjppc0Zl
YXR1cmVBbGxvd2VkKHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQpCit7CisgICAgcmV0
dXJuICFET01XcmFwcGVyV29ybGQ6Omlzb2xhdGVkKGNvbnRleHQpOworfQorCisKKyNlbmRpZiAv
LyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9DdXN0b21FbGVtZW50SGVscGVycy5o
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvQ3VzdG9tRWxlbWVudEhlbHBlcnMuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yZDU3ODUzMTQ5OGZiYTMyODQ1YmQ5Mzk5NjY2NDAzN2FlZGI0YjdjCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvQ3VzdG9tRWxlbWVudEhlbHBl
cnMuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDdXN0b21FbGVtZW50SGVscGVyc19oCisjZGVm
aW5lIEN1c3RvbUVsZW1lbnRIZWxwZXJzX2gKKworI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
KyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBF
TkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCitjbGFzcyBDdXN0b21FbGVtZW50Q29uc3RydWN0b3I7
CitjbGFzcyBTY3JpcHRTdGF0ZTsKKworY2xhc3MgQ3VzdG9tRWxlbWVudEhlbHBlcnMgeworcHVi
bGljOgorICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVDb25zdHJ1Y3RvcldyYXBwZXIoQ3VzdG9t
RWxlbWVudENvbnN0cnVjdG9yKiwgY29uc3QgU2NyaXB0VmFsdWUmIHByb3RvdHlwZSwgU2NyaXB0
U3RhdGUqKTsKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkUHJvdG90eXBlUGFyYW1ldGVyKGNvbnN0
IFNjcmlwdFZhbHVlJiwgU2NyaXB0U3RhdGUqKTsKKyAgICBzdGF0aWMgYm9vbCBpc0ZlYXR1cmVB
bGxvd2VkKFNjcmlwdFN0YXRlKik7CisKKyAgICBzdGF0aWMgYm9vbCBpc0ZlYXR1cmVBbGxvd2Vk
KHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KTsKK307CisKKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9N
X0VMRU1FTlRTKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDdXN0b21F
bGVtZW50SGVscGVyc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OEFkYXB0b3JGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFkYXB0
b3JGdW5jdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDUyZDliYjFkZDRhZjc3NTdhYzU0YjM2NjVhY2Jj
NGFlOGQzMTRjMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4QWRhcHRvckZ1bmN0aW9uLmNwcApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlY4QWRhcHRvckZ1bmN0aW9uLmgiCisKKyNpbmNsdWRlICJWOFBlcklzb2xh
dGVEYXRhLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgRU5BQkxFKENVU1RPTV9F
TEVNRU5UUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXcmFwcGVyVHlwZUluZm8gVjhBZGFw
dG9yRnVuY3Rpb246OmluZm8gPSB7IFY4QWRhcHRvckZ1bmN0aW9uOjpnZXRUZW1wbGF0ZSwgMCwg
MCwgMCwgMCwgMCwgMCwgV3JhcHBlclR5cGVPYmplY3RQcm90b3R5cGUgfTsKKwordjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4QWRhcHRvckZ1bmN0aW9uOjpnZXRUZW1wbGF0
ZSh2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3sKKyAgICBpZiAoIWlzb2xhdGUpCisgICAgICAgIGlz
b2xhdGUgPSB2ODo6SXNvbGF0ZTo6R2V0Q3VycmVudCgpOworICAgIFY4UGVySXNvbGF0ZURhdGEq
IGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpmcm9tKGlzb2xhdGUpOworICAgIFY4UGVySXNvbGF0
ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1h
cCgpLmZpbmQoJmluZm8pOworICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAo
KS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CisgICAgLy8gVGhlIGxpZmV0
aW1lIGlzIG9mIG5ld1RlbXBsYXRlIGlzIGRlbGVnYXRlZCB0byB0aGUgVGVtcGxhdGVNYXAgdGh1
cyB0aGlzIHdvbid0IGJlIGxlYWtlZC4KKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4gbmV3VGVtcGxhdGUgPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT46Ok5ldyh2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KCkpOworICAgIGRhdGEtPnJhd1RlbXBs
YXRlTWFwKCkuYWRkKCZpbmZvLCBjb25maWd1cmVUZW1wbGF0ZShuZXdUZW1wbGF0ZSkpOworICAg
IHJldHVybiBuZXdUZW1wbGF0ZTsKK30KKwordjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IFY4QWRhcHRvckZ1bmN0aW9uOjpjb25maWd1cmVUZW1wbGF0ZSh2ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZnVuY3Rpb25UZW1wbGF0ZSkKK3sKKyAgICBmdW5jdGlv
blRlbXBsYXRlLT5TZXRDYWxsSGFuZGxlcigmVjhBZGFwdG9yRnVuY3Rpb246Omludm9jYXRpb25D
YWxsYmFjayk7CisgICAgcmV0dXJuIGZ1bmN0aW9uVGVtcGxhdGU7Cit9CisKK3Y4OjpIYW5kbGU8
djg6OlZhbHVlPiBWOEFkYXB0b3JGdW5jdGlvbjo6aW52b2NhdGlvbkNhbGxiYWNrKGNvbnN0IHY4
OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVk
ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzLkNhbGxlZSgpLT5HZXRIaWRkZW5W
YWx1ZShWOEhpZGRlblByb3BlcnR5TmFtZTo6YWRhcHRvckZ1bmN0aW9uUGVlcigpKSk7CisgICAg
Ly8gRklYTUU6IFRoaXMgY2FuIGJlIGZhc3RlciBpZiB3ZSBjYW4gYWNjZXNzIHVuZGVybHlpbmcg
bmF0aXZlIGNhbGxiYWNrIGRpcmVjdGx5LgorICAgIC8vIFdlIHdvbid0IG5lZWQgdGhpcyBvbmNl
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgxMzggaXMgYWRkcmVz
c2VkLgorICAgIFZlY3Rvcjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiBhcmdBcnJheShhcmdzLkxl
bmd0aCgpKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3MuTGVuZ3RoKCk7ICsraSkKKyAg
ICAgICAgYXJnQXJyYXkuYXBwZW5kKGFyZ3NbaV0pOworICAgIGlmIChhcmdzLklzQ29uc3RydWN0
Q2FsbCgpKQorICAgICAgICByZXR1cm4gd3JhcHBlZC0+Q2FsbEFzQ29uc3RydWN0b3IoYXJnQXJy
YXkuc2l6ZSgpLCBhcmdBcnJheS5kYXRhKCkpOworICAgIHJldHVybiB3cmFwcGVkLT5DYWxsQXNG
dW5jdGlvbihhcmdzLlRoaXMoKSwgYXJnQXJyYXkuc2l6ZSgpLCBhcmdBcnJheS5kYXRhKCkpOwor
fQorCit2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gVjhBZGFwdG9yRnVuY3Rpb246OndyYXAodjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgdjg6
Oklzb2xhdGUqIGlzb2xhdGUpCit7CisgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IGFkYXB0
b3IgPSB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj46OkNhc3QoZ2V0VGVtcGxhdGUoaXNvbGF0ZSkt
PkdldEZ1bmN0aW9uKCkpOworICAgIGFkYXB0b3ItPlNldE5hbWUodjhTdHJpbmcobmFtZS5zdHJp
bmcoKSwgaXNvbGF0ZSkpOworICAgIGFkYXB0b3ItPlNldEhpZGRlblZhbHVlKFY4SGlkZGVuUHJv
cGVydHlOYW1lOjphZGFwdG9yRnVuY3Rpb25QZWVyKCksIG9iamVjdCk7CisgICAgb2JqZWN0LT5T
ZXRIaWRkZW5WYWx1ZShWOEhpZGRlblByb3BlcnR5TmFtZTo6YWRhcHRvckZ1bmN0aW9uUGVlcigp
LCBhZGFwdG9yKTsKKyAgICByZXR1cm4gYWRhcHRvcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUzZDZiYjUx
ZjQ0MGE0Yzc3MjRhYmNlM2RlOTMwNjhkYWU4YzNhNTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5oCkBAIC0wLDAgKzEsODIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFY4QWRhcHRvckZ1bmN0aW9uX2gKKyNkZWZpbmUgVjhBZGFwdG9yRnVuY3Rpb25f
aAorCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhIaWRkZW5Qcm9wZXJ0eU5h
bWUuaCIKKyNpbmNsdWRlICJXcmFwcGVyVHlwZUluZm8uaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgorCisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisvLworLy8gRklYTUUoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwODEzOCk6CisvLyBWOEFkYXB0b3JGdW5jdGlvbiBjbGFzcyBhbmQgVjhXcmFwQXNGdW5j
dGlvbiBJREwgYXR0cmlidXRlIGFyZSBuZWVkZWQgZm9yIHR3byByZWFzb25zOgorLy8gLSAxKSBW
OCBkb2Vzbid0IGFsbG93IGV4cGFuZGluZyB0aGUgaW50ZXJuYWwgZmllbGQgb2YgZnVuY3Rpb24g
b2JqZWN0cy4gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTgz
NworLy8gICAgICBXZWJLaXQgbmVlZCBpdCB0byBhc3NvY2lhdGUgZWFjaCB3cmFwcGVyIHRvIGl0
cyBiYWNraW5nIEMrKyBvYmplY3QuIFdlIHN0b3JlIGl0IGluIGEgaGlkZGVuIHByb3BlcnR5IG9m
IHRoZSB3cmFwcGVkIG9iamVjdC4KKy8vIC0gMikgQmluZGluZyBjb2RlYmFzZSBhc3N1bWVzIGV2
ZXJ5IHdyYXBwZXIgb2JqZWN0IGlzIGNyZWF0ZWQgdGhyb3VnaCBPYmplY3RUZW1wbGF0ZTo6TmV3
SW5zdGFuY2UoKSwgbm90IEZ1bmN0aW9uVGVtcGxhdGU6OkdldEZ1bmN0aW9uKCkuCisvLyBPbmNl
IDEpIGlzIGFkZHJlc3NzZWQsIHdlIGNvdWxkIGF0dGFjayAyKSB3aXRoIGl0LiAKKy8vCitjbGFz
cyBWOEFkYXB0b3JGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFdyYXBwZXJUeXBlSW5m
byBpbmZvOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHVud3JhcCh2ODo6SGFu
ZGxlPHY4OjpGdW5jdGlvbj4pOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4g
d3JhcCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIHY4
OjpJc29sYXRlKik7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBnZXQodjg6
OkhhbmRsZTx2ODo6T2JqZWN0Pik7CisKKyAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+IGdldFRlbXBsYXRlKHY4OjpJc29sYXRlKiA9IDApOworICAgIHN0YXRp
YyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gY29uZmlndXJlVGVtcGxhdGUo
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+KTsKKyAgICBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGludm9jYXRpb25DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJik7
Cit9OworCitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOEFkYXB0b3JGdW5jdGlvbjo6
dW53cmFwKHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBmdW5jdGlvbikKK3sKKyAgICB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gd3JhcHBlZCA9IGZ1bmN0aW9uLT5HZXRIaWRkZW5WYWx1ZShWOEhpZGRl
blByb3BlcnR5TmFtZTo6YWRhcHRvckZ1bmN0aW9uUGVlcigpKTsKKyAgICBBU1NFUlQoIXdyYXBw
ZWQuSXNFbXB0eSgpKTsKKyAgICBBU1NFUlQod3JhcHBlZC0+SXNPYmplY3QoKSk7CisgICAgcmV0
dXJuIHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qod3JhcHBlZCk7Cit9CisKK2lubGluZSB2
ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gVjhBZGFwdG9yRnVuY3Rpb246OmdldCh2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IG9iamVjdCkKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYWRhcHRv
ckZ1bmN0aW9uID0gb2JqZWN0LT5HZXRIaWRkZW5WYWx1ZShWOEhpZGRlblByb3BlcnR5TmFtZTo6
YWRhcHRvckZ1bmN0aW9uUGVlcigpKTsKKyAgICBBU1NFUlQoIWFkYXB0b3JGdW5jdGlvbi5Jc0Vt
cHR5KCkpOworICAgIEFTU0VSVChhZGFwdG9yRnVuY3Rpb24tPklzRnVuY3Rpb24oKSk7CisgICAg
cmV0dXJuIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPjo6Q2FzdChhZGFwdG9yRnVuY3Rpb24pOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0VM
RU1FTlRTKQorI2VuZGlmIC8vIFY4QWRhcHRvckZ1bmN0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCmluZGV4IGM3Yzc4MmYwN2JlMjE4ZDE4N2RjODRk
ZDY3MmU3OTE5OGUwMzg0ZGYuLjRkMGQyNDc3NDY5ODMxNDBmYjUwOWRkNDU1Njk0MTc5YjcyNTM1
ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcApAQCAt
MzEsNiArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlY4RE9NV3JhcHBl
ci5oIgogCisjaW5jbHVkZSAiVjhBZGFwdG9yRnVuY3Rpb24uaCIKICNpbmNsdWRlICJWOEJpbmRp
bmcuaCIKICNpbmNsdWRlICJWOERPTVdpbmRvdy5oIgogI2luY2x1ZGUgIlY4SFRNTENvbGxlY3Rp
b24uaCIKQEAgLTE0Myw0ICsxNDQsMjUgQEAgYm9vbCBWOERPTVdyYXBwZXI6OmlzV3JhcHBlck9m
VHlwZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIFdyYXBwZXJUeXBlSW5mbyoKICAgICBy
ZXR1cm4gdHlwZUluZm8gPT0gdHlwZTsKIH0KIAorI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMp
CisKK3Y4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBWOERPTVdyYXBwZXI6OnRvRnVuY3Rpb24odjg6
OkhhbmRsZTx2ODo6VmFsdWU+IG9iamVjdCkKK3sKKyAgICByZXR1cm4gVjhBZGFwdG9yRnVuY3Rp
b246OmdldCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KG9iamVjdCkpOworfQorCit2ODo6
SGFuZGxlPHY4OjpGdW5jdGlvbj4gVjhET01XcmFwcGVyOjp0b0Z1bmN0aW9uKHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gb2JqZWN0LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIHY4OjpJc29sYXRl
KiBpc29sYXRlKQoreworICAgIHJldHVybiBWOEFkYXB0b3JGdW5jdGlvbjo6d3JhcChvYmplY3Qs
IG5hbWUsIGlzb2xhdGUpOworfQorCit2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4RE9NV3JhcHBl
cjo6ZnJvbUZ1bmN0aW9uKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KQoreworICAgIGlm
ICghb2JqZWN0LT5Jc0Z1bmN0aW9uKCkpCisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgcmV0
dXJuIFY4QWRhcHRvckZ1bmN0aW9uOjp1bndyYXAodjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+OjpD
YXN0KG9iamVjdCkpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKwog
fSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4RE9NV3JhcHBlci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01X
cmFwcGVyLmgKaW5kZXggZDhmZjI4NjFmZDcwNWYyYzY2Y2Q0ZmYwMGNlY2Q3N2ExYzc3MDhiMi4u
ZTZhZjNkYmQwM2I1ZTkzZWQzYjNhZWQwZjk1N2YwNjg1NzcxYzhkMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKQEAgLTY1LDYgKzY1LDEzIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIGJvb2wgaXNET01XcmFwcGVyKHY4OjpIYW5kbGU8
djg6OlZhbHVlPik7CiAgICAgICAgIHN0YXRpYyBib29sIGlzV3JhcHBlck9mVHlwZSh2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4sIFdyYXBwZXJUeXBlSW5mbyopOwogCisjaWYgRU5BQkxFKENVU1RPTV9F
TEVNRU5UUykKKyAgICAgICAgLy8gVXNlZCBmb3IgVjhXcmFwQXNGdW5jdGlvbiwgd2hpY2ggaXMg
dXNlZCBvbmx5IGJ5IENVU1RPTV9FTEVNRU5UUworICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6RnVuY3Rpb24+IHRvRnVuY3Rpb24odjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKKyAgICAgICAg
c3RhdGljIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiB0b0Z1bmN0aW9uKHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4sIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgdjg6Oklzb2xhdGUqKTsKKyAgICAg
ICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZnJvbUZ1bmN0aW9uKHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4pOworI2VuZGlmIC8vIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKICAgICAg
ICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGZ1bmN0aW9uIGluIFY4RE9NV3JhcHBlcj8KICAgICAg
ICAgc3RhdGljIHZvaWQgc2V0TmFtZWRIaWRkZW5SZWZlcmVuY2Uodjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBwYXJlbnQsIGNvbnN0IGNoYXIqIG5hbWUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjaGls
ZCk7CiAgICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SFRN
TEN1c3RvbUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIVE1MQ3Vz
dG9tRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzY0Yjc0MTA0MTdhZmM1MTM3YjA4MTJmYWE2YTNi
NTMzNDYxZjBmYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4SFRNTEN1c3RvbUVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiVjhIVE1MQ3VzdG9tRWxlbWVudC5oIgorCisjaW5jbHVkZSAiQ3VzdG9t
RWxlbWVudEhlbHBlcnMuaCIKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50UmVnaXN0cnkuaCIKKyNp
bmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tRWxlbWVudENvbnN0cnVj
dG9yLmgiCisjaW5jbHVkZSAiVjhIVE1MU3BhbkVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKworLy8gRklYTUU6IEVhY2ggY3Vz
dG9tIGVsZW1lbnRzIHNob3VsZCBoYXZlIGl0cyBvd24gR2V0VGVtcGxhdGUgbWV0aG9kIHNvIHRo
YXQgaXQgY2FuIGJlIGRlcml2ZWQgZnJvbSBkaWZmZXJlbnQgc3VwZXIgZWxlbWVudC4KK1dyYXBw
ZXJUeXBlSW5mbyBWOEhUTUxDdXN0b21FbGVtZW50OjppbmZvID0geyAmVjhIVE1MU3BhbkVsZW1l
bnQ6OkdldFRlbXBsYXRlLCBWOEhUTUxFbGVtZW50OjpkZXJlZk9iamVjdCwgMCwgMCwgMCwgMCwg
JlY4SFRNTFNwYW5FbGVtZW50OjppbmZvLCBXcmFwcGVyVHlwZU9iamVjdFByb3RvdHlwZSB9Owor
Cit2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4SFRNTEN1c3RvbUVsZW1lbnQ6OmNyZWF0ZVdyYXBw
ZXIoUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBj
cmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQoreworICAgIEFTU0VSVChpbXBs
KTsKKworICAgIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciogY29uc3RydWN0b3IgPSBDdXN0b21F
bGVtZW50UmVnaXN0cnk6OmNvbnN0cnVjdG9yT2YoaW1wbC5nZXQoKSk7CisgICAgaWYgKCFjb25z
dHJ1Y3RvcikKKyAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoV2Vi
Q29yZTo6dG9WOCh0b0hUTUxVbmtub3duRWxlbWVudChpbXBsLmdldCgpKSwgY3JlYXRpb25Db250
ZXh0LCBpc29sYXRlKSk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBW
OERPTVdyYXBwZXI6OmNyZWF0ZVdyYXBwZXIoY3JlYXRpb25Db250ZXh0LCAmaW5mbywgaW1wbC5n
ZXQoKSwgaXNvbGF0ZSk7CisgICAgaWYgKHdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gd3JhcHBlcjsKKworICAgIC8vIFRoZSBjb25zdHJ1Y3RvciBhbmQgcmVnaXN0ZXJlZCBsaWZl
Y3ljbGUgY2FsbGJhY2tzIHNob3VsZCBiZSB2aXNpYmxlIG9ubHkgZnJvbSBtYWluIHdvcmxkLgor
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZG4ndCBiZSBuZWVkZWQgb25jZSBlYWNoIGN1c3RvbSBl
bGVtZW50IGhhcyBpdHMgb3duIEZ1bmN0aW9uVGVtcGxhdGUKKyAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4MTM4CisgICAgaWYgKEN1c3RvbUVsZW1lbnRI
ZWxwZXJzOjppc0ZlYXR1cmVBbGxvd2VkKGNyZWF0aW9uQ29udGV4dC0+Q3JlYXRpb25Db250ZXh0
KCkpKSB7CisgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY29uc3RydWN0b3JXYXBwZXIg
PSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KFdlYkNvcmU6OnRvVjgoY29uc3RydWN0b3Is
IGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSkpOworICAgICAgICB3cmFwcGVyLT5TZXRQcm90b3R5
cGUoY29uc3RydWN0b3JXYXBwZXItPkdldCh2OFN0cmluZygicHJvdG90eXBlIiwgaXNvbGF0ZSkp
KTsKKyAgICB9CisKKyAgICBWOERPTVdyYXBwZXI6OmFzc29jaWF0ZU9iamVjdFdpdGhXcmFwcGVy
KGltcGwsICZpbmZvLCB3cmFwcGVyLCBpc29sYXRlKTsKKworICAgIHJldHVybiB3cmFwcGVyOwor
fQorCisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIVE1MQ3Vz
dG9tRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIVE1MQ3VzdG9tRWxl
bWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjRiZmJmMzlmYTcwZDNmNmZmN2QyODAyNzYyYjQ5ZjQxZWQyNjUx
MmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhUTUxD
dXN0b21FbGVtZW50LmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVjhIVE1MQ3VzdG9tRWxlbWVu
dF9oCisjZGVmaW5lIFY4SFRNTEN1c3RvbUVsZW1lbnRfaAorCisjaW5jbHVkZSAiVjhCaW5kaW5n
LmgiCisjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiVjhIVE1MRWxlbWVudC5o
IgorI2luY2x1ZGUgIlY4SFRNTFVua25vd25FbGVtZW50LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBIVE1MRWxlbWVudDsKKwor
I2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKK2NsYXNzIFY4SFRNTEN1c3RvbUVsZW1lbnQg
eworcHVibGljOgorICAgIHN0YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKKyAgICBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB0b1Y4KEhUTUxFbGVtZW50Kiwgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJ
c29sYXRlKiA9IDApOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0ZVdy
YXBwZXIoUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4sIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4sIHY4
OjpJc29sYXRlKik7Cit9OworCitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOEhUTUxD
dXN0b21FbGVtZW50Ojp0b1Y4KEhUTUxFbGVtZW50KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit7CisgICAgaWYgKFVO
TElLRUxZKCFpbXBsKSkKKyAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNh
c3QodjhOdWxsV2l0aENoZWNrKGlzb2xhdGUpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IHdyYXBwZXIgPSBET01EYXRhU3RvcmU6OmdldFdyYXBwZXIoaW1wbCwgaXNvbGF0ZSk7CisgICAg
aWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgcmV0
dXJuIFY4SFRNTEN1c3RvbUVsZW1lbnQ6OmNyZWF0ZVdyYXBwZXIoaW1wbCwgY3JlYXRpb25Db250
ZXh0LCBpc29sYXRlKTsKK30KKworI2Vsc2UgLy8gRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKwor
Y2xhc3MgVjhIVE1MQ3VzdG9tRWxlbWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gd3JhcChIVE1MRWxlbWVudCosIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
Y3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSog
PSAwKTsKK307CisKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IEhUTUxDdXN0b21FbGVt
ZW50Ojp0b1Y4KEhUTUxFbGVtZW50KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0
aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit7CisgICAgcmV0dXJuIHRvVjgodG9I
VE1MVW5rbm93bkVsZW1lbnQoaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7Cit9CisK
KyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBWOEhUTUxDdXN0b21FbGVtZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmggYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oCmluZGV4IDliYjAxY2UxMWZk
MmI0NGYxNGM0ZTA5YzE1NDcxZGY4MjRlMzE4YjguLjdmMTBiODhhZDA3YTE1NjBkZjhjYzIwZmI3
MWE4NGMzOTM3Y2IxM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
SGlkZGVuUHJvcGVydHlOYW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhI
aWRkZW5Qcm9wZXJ0eU5hbWUuaApAQCAtNDUsNiArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgVihzY3JpcHRTdGF0ZSkgXAogICAgIFYoc2xlZXBGdW5jdGlvbikgXAogICAgIFYoc3Rh
dGUpIFwKKyAgICBWKGFkYXB0b3JGdW5jdGlvblBlZXIpIFwKICAgICBWKHRvU3RyaW5nU3RyaW5n
KSBcCiAgICAgVih0eXBlZEFycmF5SGlkZGVuQ29weU1ldGhvZCkKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9y
Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUVs
ZW1lbnRDb25zdHJ1Y3RvckN1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzQzNzRmNjc2ODgwYzkyODU0
ZjI4ODk0NmE2MzkxNTFhMGIzYjIzNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvckN1c3RvbS5jcHAK
QEAgLTAsMCArMSw1NCBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisqIAorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorKiBt
ZXQ6CisqIAorKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisqIGRpc3RyaWJ1dGlvbi4KKyogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKiAKKyogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmgiCisKKyNp
bmNsdWRlICJDdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmcu
aCIKKyNpbmNsdWRlICJWOEhUTUxDdXN0b21FbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjpj
YWxsQXNGdW5jdGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAg
aWYgKCFhcmdzLklzQ29uc3RydWN0Q2FsbCgpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJy
b3IoIkRPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9u
LiIsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICBpZiAoQ29uc3RydWN0b3JNb2RlOjpjdXJyZW50
KCkgPT0gQ29uc3RydWN0b3JNb2RlOjpXcmFwRXhpc3RpbmdPYmplY3QpCisgICAgICAgIHJldHVy
biBhcmdzLkhvbGRlcigpOworCisgICAgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKiBpbXBsID0g
dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CisgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50
ID0gaW1wbC0+Y3JlYXRlRWxlbWVudCgpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0
dXJuIHY4VW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIFY4SFRNTEN1c3RvbUVsZW1lbnQ6OnRvVjgo
ZWxlbWVudC5nZXQoKSwgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ3Vz
dG9tRWxlbWVudENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVt
ZW50Q29uc3RydWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUxMjIyYzE4NDlhM2UzN2IyNDZmNTA3ZjYz
YTkwMzJiMjExOTUwYTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3Vz
dG9tRWxlbWVudENvbnN0cnVjdG9yLmNwcApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oIgorCisjaWYgRU5BQkxF
KENVU1RPTV9FTEVNRU5UUykKKworI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRIZWxwZXJzLmgiCisj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxD
dXN0b21FbGVtZW50Q29uc3RydWN0b3I+IEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRl
KFNjcmlwdFN0YXRlKiBzdGF0ZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFNjcmlwdFZhbHVlJiBwcm90
b3R5cGUpCit7CisgICAgUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gY3JlYXRlZCA9
IGFkb3B0UmVmKG5ldyBDdXN0b21FbGVtZW50Q29uc3RydWN0b3IoZG9jdW1lbnQsIHRhZ05hbWUs
IG5hbWUpKTsKKyAgICBDdXN0b21FbGVtZW50SGVscGVyczo6aW5pdGlhbGl6ZUNvbnN0cnVjdG9y
V3JhcHBlcihjcmVhdGVkLmdldCgpLCBwcm90b3R5cGUsIHN0YXRlKTsKKyAgICByZXR1cm4gY3Jl
YXRlZC5yZWxlYXNlKCk7Cit9CisKK0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Q3VzdG9tRWxl
bWVudENvbnN0cnVjdG9yKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgY29uc3QgU3RyaW5nJiBuYW1lKQorICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkK
KyAgICAsIG1fdGFnTmFtZSh0YWdOYW1lKQorICAgICwgbV9uYW1lKG5hbWUpCit7Cit9CisKK0N1
c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6fkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvcigpCit7Cit9
CisKK3ZvaWQgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjp3aWxsRGVzdHJveURvY3VtZW50KCkK
K3sKKyAgICBtX2RvY3VtZW50ID0gMDsKK30KKworUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gQ3Vz
dG9tRWxlbWVudENvbnN0cnVjdG9yOjpjcmVhdGVFbGVtZW50KCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fZG9jdW1lbnQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBIVE1MRWxlbWVudDo6
Y3JlYXRlKG1fdGFnTmFtZSwgbV9kb2N1bWVudCk7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJM
RShDVVNUT01fRUxFTUVOVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9t
RWxlbWVudENvbnN0cnVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGVhYzY5MTA4YjJmNmYzYzZlNWMxYWNhNWVjYTFiNWNm
ZDliOTU2MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVt
ZW50Q29uc3RydWN0b3IuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDdXN0b21FbGVtZW50Q29u
c3RydWN0b3JfaAorI2RlZmluZSBDdXN0b21FbGVtZW50Q29uc3RydWN0b3JfaAorCisjaWYgRU5B
QkxFKENVU1RPTV9FTEVNRU5UUykKKworI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKKyNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEhUTUxFbGVt
ZW50OworY2xhc3MgU2NyaXB0U3RhdGU7CitjbGFzcyBTY3JpcHRWYWx1ZTsKKworY2xhc3MgQ3Vz
dG9tRWxlbWVudENvbnN0cnVjdG9yIDogcHVibGljIFJlZkNvdW50ZWQ8Q3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q3VzdG9tRWxlbWVu
dENvbnN0cnVjdG9yPiBjcmVhdGUoU2NyaXB0U3RhdGUqLCBEb2N1bWVudCosIGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTY3JpcHRWYWx1ZSYpOworCisgICAgdmly
dHVhbCB+Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKCk7CisKKyAgICBEb2N1bWVudCogZG9jdW1l
bnQoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50OyB9CisgICAgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFnTmFtZTsgfQorICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorCisgICAgUGFzc1JlZlB0
cjxIVE1MRWxlbWVudD4gY3JlYXRlRWxlbWVudCgpIGNvbnN0OworICAgIHZvaWQgd2lsbERlc3Ry
b3lEb2N1bWVudCgpOworICAgIAorcHJpdmF0ZToKKyAgICBDdXN0b21FbGVtZW50Q29uc3RydWN0
b3IoRG9jdW1lbnQqLCBjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgU3RyaW5nJik7CisKKyAg
ICBEb2N1bWVudCogbV9kb2N1bWVudDsKKyAgICBRdWFsaWZpZWROYW1lIG1fdGFnTmFtZTsKKyAg
ICBBdG9taWNTdHJpbmcgbV9uYW1lOworfTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKENVU1RP
TV9FTEVNRU5UUykKKworI2VuZGlmIC8vIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmlkbCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaWRsCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjQ3YzUzMGY4N2RlYWU2N2ZhNWZkYTFlMTM5YjA1Y2I5OGEwNzNiMGQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmlkbApA
QCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworWworICAgIENvbmRpdGlvbmFsPUNVU1RPTV9F
TEVNRU5UUywKKyAgICBWOEVuYWJsZWRBdFJ1bnRpbWU9Y3VzdG9tRE9NRWxlbWVudHMsCisgICAg
VjhXcmFwQXNGdW5jdGlvbiwKKyAgICBDdXN0b21DYWxsCitdIGludGVyZmFjZSBDdXN0b21FbGVt
ZW50Q29uc3RydWN0b3IgeworfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0
b21FbGVtZW50UmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRS
ZWdpc3RyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGUyMGI4NDJhZGNjYjU0OTMyNjM5NDUwYjMwMjFhNGM5
ZTc5ZTE4NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVt
ZW50UmVnaXN0cnkuY3BwCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4K
KyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRSZWdpc3RyeS5oIgorCisjaW5jbHVkZSAiQ3Vz
dG9tRWxlbWVudENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudEhlbHBlcnMu
aCIKKyNpbmNsdWRlICJEaWN0aW9uYXJ5LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNs
dWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIlJ1
bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorCisj
aWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDdXN0
b21FbGVtZW50UmVnaXN0cnk6OkN1c3RvbUVsZW1lbnRSZWdpc3RyeShEb2N1bWVudCogZG9jdW1l
bnQpCisgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQoreworfQorCitDdXN0b21FbGVtZW50UmVn
aXN0cnk6On5DdXN0b21FbGVtZW50UmVnaXN0cnkoKQoreworICAgIGZvciAoQ29uc3RydWN0b3JN
YXA6Oml0ZXJhdG9yIGkgPSBtX2NvbnN0cnVjdG9ycy5iZWdpbigpOyBpICE9IG1fY29uc3RydWN0
b3JzLmVuZCgpOyArK2kpCisgICAgICAgIGktPnZhbHVlLT53aWxsRGVzdHJveURvY3VtZW50KCk7
Cit9CisKK0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciogQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Ojpj
b25zdHJ1Y3Rvck9mKEhUTUxFbGVtZW50KiBlbGVtZW50KQoreworICAgIEN1c3RvbUVsZW1lbnRS
ZWdpc3RyeSogc2VsZiA9IGVsZW1lbnQtPmRvY3VtZW50KCktPnJlZ2lzdHJ5KCk7CisgICAgaWYg
KCFzZWxmKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc2VsZi0+ZmluZChlbGVtZW50
LT50YWdRTmFtZSgpKTsKK30KKworYm9vbCBDdXN0b21FbGVtZW50UmVnaXN0cnk6OmlzVmFsaWRO
YW1lKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKK3sKKyAgICBzaXplX3QgaHlwaGVuUG9zaXRp
b24gPSBuYW1lLmZpbmQoJy0nKTsKKyAgICBpZiAoaHlwaGVuUG9zaXRpb24gPT0gbm90Rm91bmQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIERFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9y
PEF0b21pY1N0cmluZz4sIHJlc2VydmVkTmFtZXMsICgpKTsKKyAgICBpZiAocmVzZXJ2ZWROYW1l
cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgcmVzZXJ2ZWROYW1lcy5hcHBlbmQoImFubm90YXRpb24t
eG1sIik7CisgICAgICAgIHJlc2VydmVkTmFtZXMuYXBwZW5kKCJjb2xvci1wcm9maWxlIik7Cisg
ICAgICAgIHJlc2VydmVkTmFtZXMuYXBwZW5kKCJmb250LWZhY2UiKTsKKyAgICAgICAgcmVzZXJ2
ZWROYW1lcy5hcHBlbmQoImZvbnQtZmFjZS1zcmMiKTsKKyAgICAgICAgcmVzZXJ2ZWROYW1lcy5h
cHBlbmQoImZvbnQtZmFjZS11cmkiKTsKKyAgICAgICAgcmVzZXJ2ZWROYW1lcy5hcHBlbmQoImZv
bnQtZmFjZS1mb3JtYXQiKTsKKyAgICAgICAgcmVzZXJ2ZWROYW1lcy5hcHBlbmQoImZvbnQtZmFj
ZS1uYW1lIik7CisgICAgICAgIHJlc2VydmVkTmFtZXMuYXBwZW5kKCJtaXNzaW5nLWdseXBoIik7
CisgICAgfQorCisgICAgaWYgKFdURjo6bm90Rm91bmQgIT0gcmVzZXJ2ZWROYW1lcy5maW5kKG5h
bWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gRG9jdW1lbnQ6OmlzVmFs
aWROYW1lKG5hbWUuc3RyaW5nKCkpOworfQorCitQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25z
dHJ1Y3Rvcj4gQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpyZWdpc3RlckVsZW1lbnQoU2NyaXB0U3Rh
dGUqIHN0YXRlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IERpY3Rpb25hcnkmIG9w
dGlvbnMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghQ3VzdG9tRWxlbWVudEhlbHBl
cnM6OmlzRmVhdHVyZUFsbG93ZWQoc3RhdGUpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFF1
YWxpZmllZE5hbWUgbmV3TmFtZShudWxsQXRvbSwgbmFtZS5sb3dlcigpLCBIVE1MTmFtZXM6Onho
dG1sTmFtZXNwYWNlVVJJKTsKKyAgICBpZiAoIWlzVmFsaWROYW1lKG5ld05hbWUubG9jYWxOYW1l
KCkpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9DSEFSQUNURVJfRVJSOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisgICAgICAgIAorICAgIGlmIChmaW5kKG5ld05hbWUpKSB7CisgICAgICAg
IGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg
IFNjcmlwdFZhbHVlIHByb3RvdHlwZVZhbHVlOworICAgIGlmICghb3B0aW9ucy5nZXQoInByb3Rv
dHlwZSIsIHByb3RvdHlwZVZhbHVlKSkgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
ZSBkZWZhdWx0IHZhbHVlIGhhbmRsaW5nLgorICAgICAgICAvLyBDdXJyZW50bHkgZGVmYXVsdCB2
YWx1ZSBvZiB0aGUgInByb3RvdHlwZSIgcGFyYW1ldGVyLCB3aGljaAorICAgICAgICAvLyBpcyBI
VE1MU3BhbkVsZW1lbnQucHJvdG90eXBlLCBoYXMgYW4gYW1iaWd1aXR5IGFib3V0IGl0cworICAg
ICAgICAvLyBiZWhhdmlvci4gVGhlIHNwZWMgc2hvdWxkIGJlIGZpeGVkIGJlZm9yZSBXZWJLaXQg
aW1wbGVtZW50cworICAgICAgICAvLyBpdC4gaHR0cHM6Ly93d3cudzMub3JnL0J1Z3MvUHVibGlj
L3Nob3dfYnVnLmNnaT9pZD0yMDgwMQorICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoIUN1c3RvbUVsZW1lbnRIZWxwZXJz
Ojppc1ZhbGlkUHJvdG90eXBlUGFyYW1ldGVyKHByb3RvdHlwZVZhbHVlLCBzdGF0ZSkpIHsKKyAg
ICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
CisgICAgUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gZnJlc2ggPSBDdXN0b21FbGVt
ZW50Q29uc3RydWN0b3I6OmNyZWF0ZShzdGF0ZSwgbV9kb2N1bWVudCwgbmV3TmFtZSwgIkhUTUxD
dXN0b21FbGVtZW50IiwgcHJvdG90eXBlVmFsdWUpOworICAgIG1fY29uc3RydWN0b3JzLmFkZChm
cmVzaC0+dGFnTmFtZSgpLmltcGwoKSwgZnJlc2gpOworICAgIHJldHVybiBmcmVzaDsKK30KKwor
Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKiBDdXN0b21FbGVtZW50UmVnaXN0cnk6OmZpbmQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKK3sKKyAgICBDb25zdHJ1Y3Rvck1hcDo6Y29u
c3RfaXRlcmF0b3IgZm91bmQgPSBtX2NvbnN0cnVjdG9ycy5maW5kKG5hbWUuaW1wbCgpKTsKKyAg
ICByZXR1cm4gKGZvdW5kICE9IG1fY29uc3RydWN0b3JzLmVuZCgpKSA/IGZvdW5kLT52YWx1ZS5n
ZXQoKSA6IDA7Cit9CisKK1Bhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IEN1c3RvbUVsZW1lbnRSZWdp
c3RyeTo6Y3JlYXRlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAorewor
ICAgIGlmIChDdXN0b21FbGVtZW50Q29uc3RydWN0b3IqIGZvdW5kID0gZmluZChuYW1lKSkKKyAg
ICAgICAgcmV0dXJuIGZvdW5kLT5jcmVhdGVFbGVtZW50KCk7CisgICAgcmV0dXJuIDA7Cit9CisK
K30KKworI2VuZGlmIC8vIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWY4NTBjZDdmMzIyYjU3MzRj
ODk4MWY5ZDUzYmY0Njc2MGY3M2JlZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBDdXN0b21FbGVtZW50UmVnaXN0cnlfaAorI2RlZmluZSBDdXN0b21FbGVtZW50UmVnaXN0
cnlfaAorCisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKworI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKKyNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCisjaW5jbHVkZSAiU2NyaXB0VmFs
dWUuaCIKKyNpbmNsdWRlICJTdXBwbGVtZW50YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBDdXN0b21FbGVtZW50Q29uc3RydWN0b3I7CitjbGFzcyBEaWN0aW9uYXJ5OworY2xhc3Mg
RG9jdW1lbnQ7CitjbGFzcyBIVE1MRWxlbWVudDsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ7CitjbGFzcyBRdWFsaWZpZWROYW1lOworCitjbGFzcyBDdXN0b21FbGVtZW50UmVnaXN0cnkg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEN1c3RvbUVsZW1lbnRSZWdpc3RyeSk7IFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IEN1c3RvbUVsZW1lbnRS
ZWdpc3RyeShEb2N1bWVudCopOworICAgIH5DdXN0b21FbGVtZW50UmVnaXN0cnkoKTsKKworICAg
IFBhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiByZWdpc3RlckVsZW1lbnQoV2Vi
Q29yZTo6U2NyaXB0U3RhdGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IERpY3Rp
b25hcnkmIG9wdGlvbnMsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBDdXN0b21FbGVtZW50Q29uc3Ry
dWN0b3IqIGZpbmQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8
SFRNTEVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0Owor
CisgICAgc3RhdGljIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciogY29uc3RydWN0b3JPZihIVE1M
RWxlbWVudCopOworCitwcml2YXRlOgorICAgIHN0YXRpYyBib29sIGlzVmFsaWROYW1lKGNvbnN0
IEF0b21pY1N0cmluZyYpOworCisgICAgdHlwZWRlZiBIYXNoTWFwPFF1YWxpZmllZE5hbWU6OlF1
YWxpZmllZE5hbWVJbXBsKiwgUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gPkNvbnN0
cnVjdG9yTWFwOworCisgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CisgICAgQ29uc3RydWN0b3JN
YXAgbV9jb25zdHJ1Y3RvcnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAppbmRleCA2MjE0NzU2YmMxNDM4OTMxNjk5NjRkZWFjZmY3MmNhZmE3MjAzNmIyLi5mNDc4MzBj
ZjdmMTZhZTA5YWNkZmFjNzUyMWRlYTViZTE3MzgwNDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKQEAgLTQ2LDExICs0NiwxNCBAQAogI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeS5o
IgogI2luY2x1ZGUgIkNvbnRleHRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgor
I2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkN1c3RvbUVs
ZW1lbnRSZWdpc3RyeS5oIgogI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCiAjaW5jbHVk
ZSAiRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkRPTVNlbGVjdGlvbi5oIgog
I2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRhdGVDb21wb25lbnRzLmgiCisjaW5j
bHVkZSAiRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIkRvY3VtZW50RXZlbnRRdWV1ZS5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgpA
QCAtNjc1LDYgKzY3OCwxMCBAQCB2b2lkIERvY3VtZW50OjpyZW1vdmVkTGFzdFJlZigpCiAgICAg
ICAgIG1fZnVsbFNjcmVlbkVsZW1lbnRTdGFjay5jbGVhcigpOwogI2VuZGlmCiAKKyNpZiBFTkFC
TEUoQ1VTVE9NX0VMRU1FTlRTKQorICAgICAgICBtX3JlZ2lzdHJ5LmNsZWFyKCk7CisjZW5kaWYK
KwogICAgICAgICBkZXRhY2hQYXJzZXIoKTsKIAogICAgICAgICAvLyByZW1vdmVEZXRhY2hlZENo
aWxkcmVuKCkgZG9lc24ndCBhbHdheXMgdW5yZWdpc3RlciBJRHMsCkBAIC04NDMsNiArODUwLDIw
IEBAIFBhc3NSZWZQdHI8RWxlbWVudD4gRG9jdW1lbnQ6OmNyZWF0ZUVsZW1lbnQoY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25DCiAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoUXVh
bGlmaWVkTmFtZShudWxsQXRvbSwgbmFtZSwgbnVsbEF0b20pLCBmYWxzZSk7CiB9CiAKKyNpZiBF
TkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0
b3I+IERvY3VtZW50OjpyZWdpc3RlckVsZW1lbnQoV2ViQ29yZTo6U2NyaXB0U3RhdGUqIHN0YXRl
LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJl
dHVybiByZWdpc3RlckVsZW1lbnQoc3RhdGUsIG5hbWUsIERpY3Rpb25hcnkoKSwgZWMpOworfQor
CitQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gRG9jdW1lbnQ6OnJlZ2lzdGVy
RWxlbWVudChXZWJDb3JlOjpTY3JpcHRTdGF0ZSogc3RhdGUsIGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZSwgY29uc3QgRGljdGlvbmFyeSYgb3B0aW9ucywgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgaWYgKCFtX3JlZ2lzdHJ5KQorICAgICAgICBtX3JlZ2lzdHJ5ID0gYWRvcHRQdHIobmV3IEN1
c3RvbUVsZW1lbnRSZWdpc3RyeSh0aGlzKSk7CisgICAgcmV0dXJuIG1fcmVnaXN0cnktPnJlZ2lz
dGVyRWxlbWVudChzdGF0ZSwgbmFtZSwgb3B0aW9ucywgZWMpOworfQorI2VuZGlmIC8vIEVOQUJM
RShDVVNUT01fRUxFTUVOVFMpCisKIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRG9jdW1l
bnQ6OmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKQogewogICAgIHJldHVybiBEb2N1bWVudEZyYWdt
ZW50OjpjcmVhdGUoZG9jdW1lbnQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDdiZDlmMTkw
YzQ3NWE1NzMyZTMzMjM1MzFlN2ViNTc0NDE2MmIxNmMuLjQwOGQ4OTI5MGI1OTdjMjIxODczZWIz
MzcxNmRjYzVjM2EyODg5ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC03MCw2ICs3MCw4IEBA
IGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQ7CiBjbGFzcyBDaGFyYWN0ZXJEYXRhOwogY2xh
c3MgQ29tbWVudDsKIGNsYXNzIENvbnRleHRGZWF0dXJlczsKK2NsYXNzIEN1c3RvbUVsZW1lbnRD
b25zdHJ1Y3RvcjsKK2NsYXNzIEN1c3RvbUVsZW1lbnRSZWdpc3RyeTsKIGNsYXNzIERPTUltcGxl
bWVudGF0aW9uOwogY2xhc3MgRE9NTmFtZWRGbG93Q29sbGVjdGlvbjsKIGNsYXNzIERPTVNlbGVj
dGlvbjsKQEAgLTExNjUsNiArMTE2NywxMyBAQCBwdWJsaWM6CiAgICAgVGV4dEF1dG9zaXplciog
dGV4dEF1dG9zaXplcigpIHsgcmV0dXJuIG1fdGV4dEF1dG9zaXplci5nZXQoKTsgfQogI2VuZGlm
CiAKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorICAgIFBhc3NSZWZQdHI8Q3VzdG9tRWxl
bWVudENvbnN0cnVjdG9yPiByZWdpc3RlckVsZW1lbnQoV2ViQ29yZTo6U2NyaXB0U3RhdGUqLCBj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRy
PEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gcmVnaXN0ZXJFbGVtZW50KFdlYkNvcmU6OlNjcmlw
dFN0YXRlKiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBEaWN0aW9uYXJ5JiBvcHRp
b25zLCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxFbGVtZW50PiBjcmVhdGVDdXN0
b21FbGVtZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSk7CisgICAgQ3VzdG9tRWxlbWVu
dFJlZ2lzdHJ5KiByZWdpc3RyeSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0cnkuZ2V0KCk7IH0K
KyNlbmRpZgorCiAgICAgdm9pZCBhZGp1c3RGbG9hdFF1YWRzRm9yU2Nyb2xsQW5kQWJzb2x1dGVa
b29tQW5kRnJhbWVTY2FsZShWZWN0b3I8RmxvYXRRdWFkPiYsIFJlbmRlck9iamVjdCopOwogICAg
IHZvaWQgYWRqdXN0RmxvYXRSZWN0Rm9yU2Nyb2xsQW5kQWJzb2x1dGVab29tQW5kRnJhbWVTY2Fs
ZShGbG9hdFJlY3QmLCBSZW5kZXJPYmplY3QqKTsKIApAQCAtMTUzOCw2ICsxNTQ3LDEwIEBAIHBy
aXZhdGU6CiAgICAgT3duUHRyPFRleHRBdXRvc2l6ZXI+IG1fdGV4dEF1dG9zaXplcjsKICNlbmRp
ZgogCisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKyAgICBPd25QdHI8Q3VzdG9tRWxlbWVu
dFJlZ2lzdHJ5PiBtX3JlZ2lzdHJ5OworI2VuZGlmCisKICAgICBib29sIG1fc2NoZWR1bGVkVGFz
a3NBcmVTdXNwZW5kZWQ7CiAgICAgCiAgICAgYm9vbCBtX3Zpc3VhbFVwZGF0ZXNBbGxvd2VkOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vbWFrZV9uYW1lcy5wbAppbmRleCAyMDFmNDVmNDRlODY4ODcwOTQ3NDMzZTMwNWQ2
NzE3NTg3OGNlODNhLi4zNWJhOTE0ZDQyNjk2NGVhNTI2ODEwYjBkNDhmMTg2NDAxYjJkYTExIDEw
MDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbApAQCAtMTE3Miw4ICsxMTcyLDggQEAgRU5ECiA7CiAg
ICAgfSBlbHNpZiAoJHdyYXBwZXJGYWN0b3J5VHlwZSBlcSAiVjgiKSB7CiAgICAgICAgIHByaW50
IEYgPDxFTkQKKyNpbmNsdWRlICJWOEhUTUxDdXN0b21FbGVtZW50LmgiCiAjaW5jbHVkZSAiVjgk
cGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudC5oIgotICAgICAgICAKICNpbmNsdWRlIDx2OC5o
PgogRU5ECiA7CkBAIC0xMjc0LDYgKzEyNzQsMTEgQEAgRU5ECiAgICAgcmV0dXJuIFY4U1ZHRWxl
bWVudDo6Y3JlYXRlV3JhcHBlcihlbGVtZW50LCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwog
RU5ECiA7CisgICAgICAgIH0gZWxzaWYgKCRwYXJhbWV0ZXJze25hbWVzcGFjZX0gZXEgIkhUTUwi
KSB7CisgICAgICAgICAgICBwcmludCBGIDw8RU5ECisgICAgcmV0dXJuIFY4SFRNTEN1c3RvbUVs
ZW1lbnQ6OnRvVjgoZWxlbWVudCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKK0VORAorOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcHJpbnQgRiA8PEVORAogICAgIHJldHVybiB3
cmFwKHRvJHBhcmFtZXRlcnN7ZmFsbGJhY2tJbnRlcmZhY2VOYW1lfShlbGVtZW50KSwgY3JlYXRp
b25Db250ZXh0LCBpc29sYXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TERvY3VtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmlkbAppbmRl
eCAyNWYwYTVjMzkwMzUxMTRiNWRmMTkxN2MyOTUyOTE2MGE5YjQ3Yzk4Li43YzI5ZmNiNWRjMTg5
MmFhYWM3MmY1MjQwMzYzZWUyYzI0ZDIzZDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxEb2N1bWVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1l
bnQuaWRsCkBAIC01Myw2ICs1MywxMSBAQAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBFbGVtZW50
IGFjdGl2ZUVsZW1lbnQ7CiAgICAgYm9vbGVhbiBoYXNGb2N1cygpOwogCisjaWYgZGVmaW5lZChF
TkFCTEVfQ1VTVE9NX0VMRU1FTlRTKSAmJiBFTkFCTEVfQ1VTVE9NX0VMRU1FTlRTCisgICAgW1Y4
RW5hYmxlZEF0UnVudGltZT1jdXN0b21ET01FbGVtZW50cywgQ29uZGl0aW9uYWw9Q1VTVE9NX0VM
RU1FTlRTLCBJbXBsZW1lbnRlZEFzPXJlZ2lzdGVyRWxlbWVudCwgQ2FsbFdpdGg9U2NyaXB0U3Rh
dGVdCisgICAgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yIHdlYmtpdFJlZ2lzdGVyKGluIERPTVN0
cmluZyBuYW1lLCBpbiBbT3B0aW9uYWxdIERpY3Rpb25hcnkgb3B0aW9ucykgcmFpc2VzKERPTUV4
Y2VwdGlvbik7CisjZW5kaWYKKwogICAgIC8vIERlcHJlY2F0ZWQgYXR0cmlidXRlcwogICAgICAg
ICAgICAgIFtUcmVhdE51bGxBcz1OdWxsU3RyaW5nXSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGJnQ29s
b3I7CiAgICAgICAgICAgICAgW1RyZWF0TnVsbEFzPU51bGxTdHJpbmddIGF0dHJpYnV0ZSBET01T
dHJpbmcgZmdDb2xvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVy
ZXMuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQppbmRleCA2NGE4
ZWEzZGViZGE1OWNhY2JiNzIwYjVmNzQ1ZDFhZTkwZjE2MTQyLi4xMDAwMWEzNDBmYTc3ZTRiYWU4
Mzc1YjFiMDc3ZTU2MzM2NDk5MjlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L2ZlYXR1cmVzLmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBp
CkBAIC01NCw2ICs1NCw3IEBACiAgICAgICAnRU5BQkxFX0NTU19UUkFOU0ZPUk1TX0FOSU1BVElP
TlNfVU5QUkVGSVhFRD0wJywKICAgICAgICdFTkFCTEVfQ1NTX1ZBUklBQkxFUz0xJywKICAgICAg
ICdFTkFCTEVfQ1NTX1NUSUNLWV9QT1NJVElPTj0xJywKKyAgICAgICdFTkFCTEVfQ1VTVE9NX0VM
RU1FTlRTPTEnLAogICAgICAgJ0VOQUJMRV9DVVNUT01fU0NIRU1FX0hBTkRMRVI9MCcsCiAgICAg
ICAnRU5BQkxFX0RBU0hCT0FSRF9TVVBQT1JUPTAnLAogICAgICAgJ0VOQUJMRV9EQVRBX1RSQU5T
RkVSX0lURU1TPTEnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViUnVudGltZUZlYXR1cmVzLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJS
dW50aW1lRmVhdHVyZXMuaAppbmRleCAyYTQ5ODlkOTNlNDE5ZDc3NzA4ODM4OGQ4ZjAwODE0ZTA0
MTE4MjYyLi5jN2MyN2Q4ZjRjYWU3NTk2NTRmYjUxZmM2ZDI5ZTZiNWEzZTk5MzJhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJSdW50aW1lRmVhdHVyZXMuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJSdW50aW1lRmVhdHVyZXMuaApA
QCAtMTI1LDYgKzEyNSw5IEBAIHB1YmxpYzoKICAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyB2b2lk
IGVuYWJsZVNoYWRvd0RPTShib29sKTsKICAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBib29sIGlz
U2hhZG93RE9NRW5hYmxlZCgpOwogCisgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgdm9pZCBlbmFi
bGVDdXN0b21ET01FbGVtZW50cyhib29sKTsKKyAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBib29s
IGlzQ3VzdG9tRE9NRWxlbWVudHNFbmFibGVkKCk7CisKICAgICBXRUJLSVRfRVhQT1JUIHN0YXRp
YyB2b2lkIGVuYWJsZVN0eWxlU2NvcGVkKGJvb2wpOwogICAgIFdFQktJVF9FWFBPUlQgc3RhdGlj
IGJvb2wgaXNTdHlsZVNjb3BlZEVuYWJsZWQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViUnVudGltZUZlYXR1cmVzLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlJ1bnRpbWVGZWF0dXJlcy5jcHAKaW5kZXggMDE5YjY3MzhhNzExZjk5ZDBm
NWJjNTMyNGRjMjM3ZTMzMmRiNmY3Zi4uMWU4OTczNThkYzg0ODE1OGE3N2MyNTJjMjM4YTBmZTBk
NjViNDlhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUnVudGlt
ZUZlYXR1cmVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJSdW50aW1l
RmVhdHVyZXMuY3BwCkBAIC00NjcsNiArNDY3LDI1IEBAIGJvb2wgV2ViUnVudGltZUZlYXR1cmVz
Ojppc1NoYWRvd0RPTUVuYWJsZWQoKQogI2VuZGlmCiB9CiAKK3ZvaWQgV2ViUnVudGltZUZlYXR1
cmVzOjplbmFibGVDdXN0b21ET01FbGVtZW50cyhib29sIGVuYWJsZSkKK3sKKyNpZiBFTkFCTEUo
Q1VTVE9NX0VMRU1FTlRTKQorICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNldEN1c3RvbURP
TUVsZW1lbnRzKGVuYWJsZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShlbmFibGUpOworI2Vu
ZGlmCit9CisKK2Jvb2wgV2ViUnVudGltZUZlYXR1cmVzOjppc0N1c3RvbURPTUVsZW1lbnRzRW5h
YmxlZCgpCit7CisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKyAgICByZXR1cm4gUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6Y3VzdG9tRE9NRWxlbWVudHNFbmFibGVkKCk7CisjZWxzZQorICAg
IHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCisKIHZvaWQgV2ViUnVudGltZUZlYXR1cmVzOjpl
bmFibGVTdHlsZVNjb3BlZChib29sIGVuYWJsZSkKIHsKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVE
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDMy
YjkwMDI4NThjYjcxMDFhNzY3ODUyOTk2ZmRkZjk2MWFlYjhjOTIuLmQ3MTczZmMxMDQ2OGFkMWI3
ZDM3OTQ3MjUxMzEzMzU5MmM5ZGQ5YTQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysg
Yi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMy0wMS0yNyAgSGFqaW1lIE1v
cnJpdGEgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgW0N1c3RvbSBFbGVtZW50c10g
SW1wbGVtZW50IGJhcmUtYm9uZSBkb2N1bWVudC5yZWdpc3RlcigpCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDAyMjkKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBlbmFibGVDdXN0b21ET01FbGVt
ZW50cyBmbGFnLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxs
LmNwcDoKKyAgICAgICAgKFRlc3RTaGVsbDo6VGVzdFNoZWxsKToKKwogMjAxMy0wMi0wNSAgU2lt
b24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBkaWdpYS5jb20+CiAKICAgICAgICAgW1F0XSBD
b21waWxlIFdURiB0ZXN0cyBvZiBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFNoZWxsLmNwcAppbmRleCBhYWM5NTI5MGUzN2M3MmNkZjQ2ZmRiNWVkOWVl
MGZlMTNlNTY2NTg1Li41OTU5ZDI5NmIzZGZjNzA2Y2JjMDA0OGU5ZTRmYWYxZGJjZjVjYzcxIDEw
MDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCisr
KyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKQEAgLTE0Niw2
ICsxNDYsNyBAQCBUZXN0U2hlbGw6OlRlc3RTaGVsbCgpCiAgICAgV2ViUnVudGltZUZlYXR1cmVz
OjplbmFibGVWaWRlb1RyYWNrKHRydWUpOwogICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxl
R2FtZXBhZCh0cnVlKTsKICAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZVNoYWRvd0RPTSh0
cnVlKTsKKyAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZUN1c3RvbURPTUVsZW1lbnRzKHRy
dWUpOwogICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlU3R5bGVTY29wZWQodHJ1ZSk7CiAg
ICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVTY3JpcHRlZFNwZWVjaCh0cnVlKTsKICAgICBX
ZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZVJlcXVlc3RBdXRvY29tcGxldGUodHJ1ZSk7CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5k
ZXggYjA5NTQ2YTIyMTQ0OGYyMDMwNTFjNmM3M2Y4ZTJjYzdmOTlkZjc4Yy4uYjkxODM3YzFlZmFh
ODY4MDk5NWUyZWU4NGM0ZWU1MWY1NTZkODgzZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEz
LTAxLTI3ICBIYWppbWUgTW9ycml0YSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBb
Q3VzdG9tIEVsZW1lbnRzXSBJbXBsZW1lbnQgYmFyZS1ib25lIGRvY3VtZW50LnJlZ2lzdGVyKCkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDIyOQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9k
b20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLWJhc2ljLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1iYXNpYy1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDEzLTAy
LTA3ICBNYXR0IEZhbGtlbmhhZ2VuICA8ZmFsa2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBS
b2xsb3V0IHIxNDIwNTggdmFyaW91cyBjcmFzaGVzIGFuZCB0aW1lb3V0cyBvbiBBcHBsZU1hYyBh
bmQgQ2hyb21pdW0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1
bWVudC1yZWdpc3Rlci1iYXNpYy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9j
dXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUw
MGViOTA0NzE2NzEwODFhMzc5NDA5Njg3YmNmYWU5M2NiMzMwODQKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMtZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsNDIgQEAKK1Rlc3RpbmcgZG9jdW1lbnQucmVnaXN0ZXIoKSBi
YXNpYyBiZWhhdmlvcnMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGRv
Y3VtZW50LnJlZ2lzdGVyKCdmb28nLCBjcmVhdGVSZWdpc3RlclBhcmFtdGVycygpKSB0aHJldyBl
eGNlcHRpb24gRXJyb3I6IEludmFsaWRDaGFyYWN0ZXJFcnJvcjogRE9NIEV4Y2VwdGlvbiA1Lgor
UEFTUyBkb2N1bWVudC5yZWdpc3RlcigneGZvbycsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkp
IHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSW52YWxpZENoYXJhY3RlckVycm9yOiBET00gRXhjZXB0
aW9uIDUuCitQQVNTIGRvY3VtZW50LnJlZ2lzdGVyKCdtaXNzaW5nLWdseXBoJywgY3JlYXRlUmVn
aXN0ZXJQYXJhbXRlcnMoKSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJbnZhbGlkQ2hhcmFjdGVy
RXJyb3I6IERPTSBFeGNlcHRpb24gNS4KK1BBU1MgdHlwZW9mIGZvb0NvbnN0cnVjdG9yIGlzICdm
dW5jdGlvbicKK1BBU1MgZm9vQ29uc3RydWN0b3IucHJvdG90eXBlLl9fcHJvdG9fXyBpcyBIVE1M
UGFyYWdyYXBoRWxlbWVudC5wcm90b3R5cGUKK1BBU1MgZm9vQ29uc3RydWN0b3IucHJvdG90eXBl
LnRoaXNJc1Byb3RvdHlwZSBpcyB0cnVlCitQQVNTIGRvY3VtZW50LnJlZ2lzdGVyKCd4LWZvbycs
IGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSW52YWxp
ZFN0YXRlRXJyb3I6IERPTSBFeGNlcHRpb24gMTEuCitQQVNTIGRvY3VtZW50LnJlZ2lzdGVyKCdY
LUZPTycsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjog
SW52YWxpZFN0YXRlRXJyb3I6IERPTSBFeGNlcHRpb24gMTEuCitQQVNTIGRvY3VtZW50LnJlZ2lz
dGVyKCd4LWJhZC1hJywgeyBwcm90b3R5cGU6IEhUTUxTcGFuRWxlbWVudC5wcm90b3R5cGUgfSkg
dGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJbnZhbGlkU3RhdGVFcnJvcjogRE9NIEV4Y2VwdGlvbiAx
MS4KK1BBU1MgZG9jdW1lbnQucmVnaXN0ZXIoJ3gtYmFkLWInLCB7IHByb3RvdHlwZToge30gfSkg
dGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJbnZhbGlkU3RhdGVFcnJvcjogRE9NIEV4Y2VwdGlvbiAx
MS4KK1BBU1MgZG9jdW1lbnQucmVnaXN0ZXIoJ3gtYmFkLWMnLCB7IHByb3RvdHlwZTogT2JqZWN0
LmNyZWF0ZShEb2N1bWVudC5wcm90b3R5cGUpIH0pIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSW52
YWxpZFN0YXRlRXJyb3I6IERPTSBFeGNlcHRpb24gMTEuCitQQVNTIGZvb0NvbnN0cnVjdG9yKCkg
dGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3Qg
YmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uLgorUEFTUyBjcmVhdGVkRm9vLl9fcHJvdG9fXyBpcyBm
b29Db25zdHJ1Y3Rvci5wcm90b3R5cGUKK1BBU1MgY3JlYXRlZEZvby5jb25zdHJ1Y3RvciBpcyBm
b29Db25zdHJ1Y3RvcgorUEFTUyBjcmVhdGVkRm9vLnRhZ05hbWUgaXMgJ1gtRk9PJworUEFTUyBj
cmVhdGVkRm9vLnRleHRDb250ZW50IGlzICdIZWxsbycKK1BBU1MgY3JlYXRlZEZvby5sYXN0Q2hp
bGQgaXMgY2hpbGREaXYKK1BBU1MgcGFyc2VkRm9vLl9fcHJvdG9fXyBpcyBmb29Db25zdHJ1Y3Rv
ci5wcm90b3R5cGUKK1BBU1MgcGFyc2VkRm9vLnRhZ05hbWUgaXMgJ1gtRk9PJworUEFTUyBwYXJz
ZWRGb28uc29tZVByb3BlcnR5IGlzIGNvbnRhaW5lci5maXJzdENoaWxkLnNvbWVQcm9wZXJ0eQor
UEFTUyBjcmVhdGVkQmFyLnRhZ05hbWUgaXMgJ1gtQkFSJworUEFTUyBjcmVhdGVkQmF6LnRhZ05h
bWUgaXMgJ1gtQkFaJworUEFTUyBjcmVhdGVkQmF6LnRoaXNJc1Byb3RvdHlwZSBpcyB0cnVlCitQ
QVNTIGNyZWF0ZWRCYXoudGhpc0lzQWxzb1Byb3RvdHlwZSBpcyB0cnVlCitQQVNTIGNyZWF0ZWRV
cHBlckJhci5jb25zdHJ1Y3RvciBpcyBiYXJDb25zdHJ1Y3RvcgorUEFTUyBjcmVhdGVkVXBwZXJC
YXIudGFnTmFtZSBpcyAnWC1CQVInCitQQVNTIGNyZWF0ZWRNaXhlZEJhci5jb25zdHJ1Y3RvciBp
cyBiYXJDb25zdHJ1Y3RvcgorUEFTUyBjcmVhdGVkTWl4ZWRCYXIudGFnTmFtZSBpcyAnWC1CQVIn
CitQQVNTIGNvbnRhaW5lci5maXJzdENoaWxkLmNvbnN0cnVjdG9yIGlzIGJhckNvbnN0cnVjdG9y
CitQQVNTIGNvbnRhaW5lci5maXJzdENoaWxkLnRhZ05hbWUgaXMgJ1gtQkFSJworUEFTUyBjb250
YWluZXIubGFzdENoaWxkLmNvbnN0cnVjdG9yIGlzIGJhckNvbnN0cnVjdG9yCitQQVNTIGNvbnRh
aW5lci5sYXN0Q2hpbGQudGFnTmFtZSBpcyAnWC1CQVInCitQQVNTIChuZXcgKGRvY3VtZW50LnJl
Z2lzdGVyKCd5LWJhcicsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpKSgpKS50YWdOYW1lIGlz
ICdZLUJBUicKK1BBU1MgKG5ldyAoZG9jdW1lbnQucmVnaXN0ZXIoJ3l6LWJhcicsIGNyZWF0ZVJl
Z2lzdGVyUGFyYW10ZXJzKCkpKSgpKS50YWdOYW1lIGlzICdZWi1CQVInCitQQVNTIChuZXcgKGRv
Y3VtZW50LnJlZ2lzdGVyKCd5LXotYmFyJywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSkpKCkp
LnRhZ05hbWUgaXMgJ1ktWi1CQVInCitQQVNTIChuZXcgKGRvY3VtZW50LnJlZ2lzdGVyKCd5LS1i
YXInLCBjcmVhdGVSZWdpc3RlclBhcmFtdGVycygpKSkoKSkudGFnTmFtZSBpcyAnWS0tQkFSJwor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0
ZXItYmFzaWMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdp
c3Rlci1iYXNpYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQwNjNkYmZkNWQ4M2ZhZTExMGNiMjExZGNjOGE2
OWNmODU4ZjNlZGIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0
b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMuaHRtbApAQCAtMCwwICsxLDExMSBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImNv
bnRhaW5lciI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3RpbmcgZG9jdW1lbnQu
cmVnaXN0ZXIoKSBiYXNpYyBiZWhhdmlvcnMuIik7CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikK
KyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKK2RvY3VtZW50LnJlZ2lzdGVyID0gZG9jdW1l
bnQucmVnaXN0ZXIgfHwgZG9jdW1lbnQud2Via2l0UmVnaXN0ZXI7CisKK2Z1bmN0aW9uIGNyZWF0
ZVJlZ2lzdGVyUGFyYW10ZXJzKCkKK3sKKyAgICByZXR1cm4geworICAgICAgICBwcm90b3R5cGU6
IE9iamVjdC5jcmVhdGUoSFRNTFBhcmFncmFwaEVsZW1lbnQucHJvdG90eXBlLCB7IHRoaXNJc1By
b3RvdHlwZTogeyB2YWx1ZTogdHJ1ZSB9IH0pCisgICAgfTsKK30KKworLy8gSW52YWxpZCBuYW1l
cworc2hvdWxkVGhyb3coImRvY3VtZW50LnJlZ2lzdGVyKCdmb28nLCBjcmVhdGVSZWdpc3RlclBh
cmFtdGVycygpKSIsICInRXJyb3I6IEludmFsaWRDaGFyYWN0ZXJFcnJvcjogRE9NIEV4Y2VwdGlv
biA1JyIpOworc2hvdWxkVGhyb3coImRvY3VtZW50LnJlZ2lzdGVyKCd4Zm9vJywgY3JlYXRlUmVn
aXN0ZXJQYXJhbXRlcnMoKSkiLCAiJ0Vycm9yOiBJbnZhbGlkQ2hhcmFjdGVyRXJyb3I6IERPTSBF
eGNlcHRpb24gNSciKTsKK3Nob3VsZFRocm93KCJkb2N1bWVudC5yZWdpc3RlcignbWlzc2luZy1n
bHlwaCcsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpIiwgIidFcnJvcjogSW52YWxpZENoYXJh
Y3RlckVycm9yOiBET00gRXhjZXB0aW9uIDUnIik7CisKK3ZhciBmb29Db25zdHJ1Y3RvciA9IGRv
Y3VtZW50LnJlZ2lzdGVyKCJ4LWZvbyIsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpOworc2hv
dWxkQmUoInR5cGVvZiBmb29Db25zdHJ1Y3RvciIsICInZnVuY3Rpb24nIik7CitzaG91bGRCZSgi
Zm9vQ29uc3RydWN0b3IucHJvdG90eXBlLl9fcHJvdG9fXyIsICJIVE1MUGFyYWdyYXBoRWxlbWVu
dC5wcm90b3R5cGUiKTsKK3Nob3VsZEJlVHJ1ZSgiZm9vQ29uc3RydWN0b3IucHJvdG90eXBlLnRo
aXNJc1Byb3RvdHlwZSIpOworCisvLyBOYW1lIGNvbmZsaWN0cworc2hvdWxkVGhyb3coImRvY3Vt
ZW50LnJlZ2lzdGVyKCd4LWZvbycsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpIiwgIidFcnJv
cjogSW52YWxpZFN0YXRlRXJyb3I6IERPTSBFeGNlcHRpb24gMTEnIik7CitzaG91bGRUaHJvdygi
ZG9jdW1lbnQucmVnaXN0ZXIoJ1gtRk9PJywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSkiLCAi
J0Vycm9yOiBJbnZhbGlkU3RhdGVFcnJvcjogRE9NIEV4Y2VwdGlvbiAxMSciKTsKKworLy8gQmFk
IHByb3RvdHlwZTogY29uc3RydWN0b3IgcHJvcGVydHkgZXhpc3RzCitzaG91bGRUaHJvdygiZG9j
dW1lbnQucmVnaXN0ZXIoJ3gtYmFkLWEnLCB7IHByb3RvdHlwZTogSFRNTFNwYW5FbGVtZW50LnBy
b3RvdHlwZSB9KSIsICInRXJyb3I6IEludmFsaWRTdGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDEx
JyIpOworLy8gQmFkIHByb3RvdHlwZTogbWlzc2luZyBfX3Byb3RvX18KK3Nob3VsZFRocm93KCJk
b2N1bWVudC5yZWdpc3RlcigneC1iYWQtYicsIHsgcHJvdG90eXBlOiB7fSB9KSIsICInRXJyb3I6
IEludmFsaWRTdGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDExJyIpOworLy8gQmFkIHByb3RvdHlw
ZTogd3JvbmcgX19wcm90b19fCitzaG91bGRUaHJvdygiZG9jdW1lbnQucmVnaXN0ZXIoJ3gtYmFk
LWMnLCB7IHByb3RvdHlwZTogT2JqZWN0LmNyZWF0ZShEb2N1bWVudC5wcm90b3R5cGUpIH0pIiwg
IidFcnJvcjogSW52YWxpZFN0YXRlRXJyb3I6IERPTSBFeGNlcHRpb24gMTEnIik7CisKKy8vIENh
bGwgYXMgZnVuY3Rpb24KK3Nob3VsZFRocm93KCJmb29Db25zdHJ1Y3RvcigpIiwgIidUeXBlRXJy
b3I6IERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9u
LiciKQorCisvLyBDb25zdHJ1Y3RvciBpbml0aWF0ZWQgaW5zdGFudGlhdGlvbgordmFyIGNyZWF0
ZWRGb28gPSBuZXcgZm9vQ29uc3RydWN0b3IoKTsKKworLy8gSlMgYnVpbHQtaW4gcHJvcGVydGll
cworc2hvdWxkQmUoImNyZWF0ZWRGb28uX19wcm90b19fIiwgImZvb0NvbnN0cnVjdG9yLnByb3Rv
dHlwZSIpOworc2hvdWxkQmUoImNyZWF0ZWRGb28uY29uc3RydWN0b3IiLCAiZm9vQ29uc3RydWN0
b3IiKTsKKworLy8gTmF0aXZlIGdldHRlcgorc2hvdWxkQmUoImNyZWF0ZWRGb28udGFnTmFtZSIs
ICInWC1GT08nIik7CisKKy8vIE5hdGl2ZSBzZXR0ZXIKK2NyZWF0ZWRGb28uaW5uZXJIVE1MID0g
IkhlbGxvIjsKK3Nob3VsZEJlKCJjcmVhdGVkRm9vLnRleHRDb250ZW50IiwgIidIZWxsbyciKTsK
KworLy8gTmF0aXZlIG1ldGhvZAordmFyIGNoaWxkRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgiZGl2Iik7CitjcmVhdGVkRm9vLmFwcGVuZENoaWxkKGNoaWxkRGl2KTsKK3Nob3VsZEJlKCJj
cmVhdGVkRm9vLmxhc3RDaGlsZCIsICJjaGlsZERpdiIpOworCisvLyBQYXJzZXIgaW5pdGlhdGVk
IGluc3RhbnRpYXRpb24KK3ZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
Y29udGFpbmVyIik7Citjb250YWluZXIuaW5uZXJIVE1MID0gIjx4LWZvbz48L3gtZm9vPiI7Citw
YXJzZWRGb28gPSBjb250YWluZXIuZmlyc3RDaGlsZDsKKworc2hvdWxkQmUoInBhcnNlZEZvby5f
X3Byb3RvX18iLCAiZm9vQ29uc3RydWN0b3IucHJvdG90eXBlIik7CitzaG91bGRCZSgicGFyc2Vk
Rm9vLnRhZ05hbWUiLCAiJ1gtRk9PJyIpOworCisvLyBFbnN1cmluZyB0aGUgd3JhcHBlciBpcyBy
ZXRhaW5lZAorcGFyc2VkRm9vLnNvbWVQcm9wZXJ0eSA9ICJoZWxsbyI7CitzaG91bGRCZSgicGFy
c2VkRm9vLnNvbWVQcm9wZXJ0eSIsICJjb250YWluZXIuZmlyc3RDaGlsZC5zb21lUHJvcGVydHki
KTsKKworLy8gSGF2aW5nIGFub3RoZXIgY29uc3RydWN0b3IKK3ZhciBiYXJDb25zdHJ1Y3RvciA9
IGRvY3VtZW50LnJlZ2lzdGVyKCJ4LWJhciIsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpOwor
dmFyIGNyZWF0ZWRCYXIgPSBuZXcgYmFyQ29uc3RydWN0b3IoKTsKK3Nob3VsZEJlKCJjcmVhdGVk
QmFyLnRhZ05hbWUiLCAiJ1gtQkFSJyIpOworCisvLyBIYXZpbmcgYSBzdWJjbGFzcwordmFyIGJh
ekNvbnN0cnVjdG9yID0gZG9jdW1lbnQucmVnaXN0ZXIoIngtYmF6IiwgeyBwcm90b3R5cGU6IE9i
amVjdC5jcmVhdGUoZm9vQ29uc3RydWN0b3IucHJvdG90eXBlLCB7IHRoaXNJc0Fsc29Qcm90b3R5
cGU6IHsgdmFsdWU6IHRydWUgfSB9KSB9KTsKK3ZhciBjcmVhdGVkQmF6ID0gbmV3IGJhekNvbnN0
cnVjdG9yKCk7CitzaG91bGRCZSgiY3JlYXRlZEJhei50YWdOYW1lIiwgIidYLUJBWiciKTsKK3No
b3VsZEJlVHJ1ZSgiY3JlYXRlZEJhei50aGlzSXNQcm90b3R5cGUiKTsKK3Nob3VsZEJlVHJ1ZSgi
Y3JlYXRlZEJhei50aGlzSXNBbHNvUHJvdG90eXBlIik7CisKKy8vIFdpdGggaXJyZWd1bGFyIGNh
c2VzCit2YXIgY3JlYXRlZFVwcGVyQmFyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiWC1CQVIi
KTsKK3ZhciBjcmVhdGVkTWl4ZWRCYXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJYLUJhciIp
Oworc2hvdWxkQmUoImNyZWF0ZWRVcHBlckJhci5jb25zdHJ1Y3RvciIsICJiYXJDb25zdHJ1Y3Rv
ciIpOworc2hvdWxkQmUoImNyZWF0ZWRVcHBlckJhci50YWdOYW1lIiwgIidYLUJBUiciKTsKK3No
b3VsZEJlKCJjcmVhdGVkTWl4ZWRCYXIuY29uc3RydWN0b3IiLCAiYmFyQ29uc3RydWN0b3IiKTsK
K3Nob3VsZEJlKCJjcmVhdGVkTWl4ZWRCYXIudGFnTmFtZSIsICInWC1CQVInIik7CisKK2NvbnRh
aW5lci5pbm5lckhUTUwgPSAiPFgtQkFSPjwvWC1CQVI+PFgtQmFyPjwvWC1CYXI+IjsKK3Nob3Vs
ZEJlKCJjb250YWluZXIuZmlyc3RDaGlsZC5jb25zdHJ1Y3RvciIsICJiYXJDb25zdHJ1Y3RvciIp
Oworc2hvdWxkQmUoImNvbnRhaW5lci5maXJzdENoaWxkLnRhZ05hbWUiLCAiJ1gtQkFSJyIpOwor
c2hvdWxkQmUoImNvbnRhaW5lci5sYXN0Q2hpbGQuY29uc3RydWN0b3IiLCAiYmFyQ29uc3RydWN0
b3IiKTsKK3Nob3VsZEJlKCJjb250YWluZXIubGFzdENoaWxkLnRhZ05hbWUiLCAiJ1gtQkFSJyIp
OworCisvLyBTdHJhbmdlIGJ1dCB2YWxpZCBuYW1lcworc2hvdWxkQmUoIihuZXcgKGRvY3VtZW50
LnJlZ2lzdGVyKCd5LWJhcicsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpKSgpKS50YWdOYW1l
IiwgIidZLUJBUiciKTsKK3Nob3VsZEJlKCIobmV3IChkb2N1bWVudC5yZWdpc3RlcigneXotYmFy
JywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSkpKCkpLnRhZ05hbWUiLCAiJ1laLUJBUiciKTsK
K3Nob3VsZEJlKCIobmV3IChkb2N1bWVudC5yZWdpc3RlcigneS16LWJhcicsIGNyZWF0ZVJlZ2lz
dGVyUGFyYW10ZXJzKCkpKSgpKS50YWdOYW1lIiwgIidZLVotQkFSJyIpOworc2hvdWxkQmUoIihu
ZXcgKGRvY3VtZW50LnJlZ2lzdGVyKCd5LS1iYXInLCBjcmVhdGVSZWdpc3RlclBhcmFtdGVycygp
KSkoKSkudGFnTmFtZSIsICInWS0tQkFSJyIpOworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25z
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggYmY2N2Yy
M2U4NTQ4YmM3ZDczOGU1NjcxMjU0YzM1ZGU1MDI2NDI4OS4uZGRmODE3MjA0MDRkYzMzZjNmZWNm
YTU3N2ZjYTZmMGJiMzY0MDZhYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBl
Y3RhdGlvbnMKQEAgLTEwMjcsNiArMTAyNyw5IEBAIHdlYmtpdC5vcmcvYi83NjQ4OSBjb21wb3Np
dGluZy93ZWJnbC93ZWJnbC1yZWZsZWN0aW9uLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIHdl
YmtpdC5vcmcvYi83NjQzOSBbIERlYnVnIF0gZmFzdC9kb20vc2hhZG93L2NvbnRlbnQtZWxlbWVu
dC1hcGkuaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzc2NDM5IFsgRGVidWcgXSBmYXN0
L2RvbS9zaGFkb3cvY29udGVudC1lbGVtZW50LW91dHNpZGUtc2hhZG93Lmh0bWwgWyBGYWlsdXJl
IF0KIAorIyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKSBpcyBkaXNhYmxlZC4KK2Zhc3QvZG9tL2N1
c3RvbQorCiAjIENTUyBWYXJpYWJsZXMgYXJlIG5vdCB5ZXQgZW5hYmxlZC4KIHdlYmtpdC5vcmcv
Yi84NTU4MCBmYXN0L2Nzcy92YXJpYWJsZXMKIHdlYmtpdC5vcmcvYi84NTU4MCBpbnNwZWN0b3Iv
c3R5bGVzL3ZhcmlhYmxlcwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187223</attachid>
            <date>2013-02-07 20:06:31 -0800</date>
            <delta_ts>2013-02-14 23:10:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100229-20130208130306.patch</filename>
            <type>text/plain</type>
            <size>89999</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyMjIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDhkYThjZDg5YmE1ZWQ2
NTUxNTQ2NzNhZDRmZDU1MDE0ZDRkMzhhYS4uMTQ4YTE5NTRlMjA2MTk4Zjk4MzQzY2MwODg4MWVk
ZDE2Nzk0OTMxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwNCBAQAorMjAxMy0wMi0wNiAgSGFq
aW1lIE1vcnJpdGEgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKworICAgICAgICBbQ3VzdG9tIEVs
ZW1lbnRzXSBJbXBsZW1lbnQgYmFyZS1ib25lIGRvY3VtZW50LnJlZ2lzdGVyKCkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDIyOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGltcGxl
bWVudHMgcHJlZml4ZWQgdmVyc2lvbiBvZiBkb2N1bWVudC5yZWdpc3RlcigpLCB3aXRoIG1pbmlt
YWwgZmVhdHVyZSBzdXBwb3J0LgorICAgICAgICAtIFRoZSBmZWF0dXJlIGlzIGd1YXJkZWQgYnkg
RU5BQkxFKENVU1RPTV9FTEVNRU5UUykgYW5kIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmN1c3Rv
bURPTUVsZW1lbnRzRW5hYmxlZCgpLgorICAgICAgICAtIFRoaXMgYmFyZS1ib25lIHZlcnNpb24g
b25seSByZWNvZ25pemVzICJuYW1lIiBhbmQgInByb3RvdHlwZSIgcGFyYW1ldGVycy4gSXQgZG9l
c24ndCBzdXBwb3J0IGRlZmF1bHQgdmFsdWUgb2YgInByb3RvdHlwZSIgcGFyYW1ldGVyLgorICAg
ICAgICAtIEN1cnJlbnRseSBvbmx5IFY4IGlzIHN1cHBvcnRlZC4gSlNDIGJpbmRpbmcgbmVlZHMg
aXRzIG93biBiaW5kaW5nIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgID0gTWFqb3IgbmV3IGNs
YXNzZXMgdW5kZXIgZG9tLzoKKworICAgICAgICBUaGUgZG9tIG1vZHVsZSBoYXMgdHdvIG5ldyBj
bGFzc2VzOgorICAgICAgICAtIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvcjogQSByZXR1cm4gdmFs
dWUgb2YgZG9jdW1lbnQucmVnaXN0ZXIoKQorICAgICAgICAgIHdoaWNoIGhvbGRzIHRoZSBjdXN0
b20gZWxlbWVudCBkZWZpbml0aW9uLgorICAgICAgICAtIEN1c3RvbUVsZW1lbnRSZWdpc3RyeTog
QSBjb2xsZWN0aW9uIG9mIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciBvYmplY3RzLgorICAgICAg
ICAgIEN1c3RvbUVsZW1lbnRSZWdpc3RyeSBpbnN0YW5jZSBpcyBjcmVhdGVkIHBlciBEb2N1bWVu
dCBhbmQgaXMgb3duZWQgYnkgdGhlIERvY3VtZW50LgorCisgICAgICAgIEN1c3RvbUVsZW1lbnRD
b25zdHJ1Y3RvciBrbm93cyB0aGUgZGVmaW5pdGlvbiBvZiBlYWNoIGN1c3RvbQorICAgICAgICBl
bGVtZW50LCB3aGljaCBpcyByZWdpc3RlcmVkIGJ5IGRvY3VtZW50LnJlZ2lzdGVyKCkuIFRoZSBu
YW1lIGFuZAorICAgICAgICBvdGhlciBvcHRpb25zIGFyZSBoZWxkIGJ5IHRoaXMgb2JqZWN0LiBD
dXN0b21FbGVtZW50UmVnaXN0cnkgb3ducyBhIHNldAorICAgICAgICBvZiB0aGUgcmVnaXN0ZXJl
ZCBjb25zdHJ1Y3RvcnMuIFRoZSByZWdpc3RyeSBndWFyYW50ZWVzIGludmFyaWFudHMKKyAgICAg
ICAgbGlrZSB2YWxpZGl0eSBhbmQgdW5pcXVlbmVzcyBvZiB0aGUgZWxlbWVudCBuYW1lcy4KKwor
ICAgICAgICA9IEEgY2hhbmdlIG9uIG1ha2VfbmFtZXMucGwKKworICAgICAgICBUaGlzIGNoYW5n
ZSB0d2Vha3MgbWFrZV9uYW1lcy5wbCAob3IgZ2VuZXJhdGVkIEhUTUxFbGVtZW50RmFjdG9yeSkK
KyAgICAgICAgdG8gaG9vayB0aGUgY3JlYXRpb25zIG9mIHVua25vd24gZWxlbWVudHMuIFNvbWUg
b2YgZWxlbWVudCBuYW1lcworICAgICAgICB3aGljaCBjb21lIHRvIHRoZSBmYWxsYmFjayBwYXRo
IGNhbiBiZSBvbmUgb2YgcmVnaXN0ZXJlZCBjdXN0b20KKyAgICAgICAgZWxlbWVudC4KKworICAg
ICAgICA9IFtWOFdyYXBBc0Z1bmN0aW9uXSBleHRlbmRlZCBhdHRyaWJ1dGU6CisKKyAgICAgICAg
VGhlIGRvY3VtZW50LnJlZ2lzdGVyKCkgQVBJIHJldHVybnMgYSBjb25zdHJ1Y3RvcgorICAgICAg
ICBmdW5jdGlvbi4gSG93ZXZlciwgdGhlIFY4IGJpbmRpbmcgY3VycmVudGx5IGRvZXNuJ3Qgc3Vw
cG9ydCBpdC4gVG8KKyAgICAgICAgbWFrZSBpdCBwb3NzaWJsZSwgdGhpcyBjaGFuZ2UgaW50cm9k
dWNlcyAiVjhXcmFwQXNGdW5jdGlvbiIKKyAgICAgICAgZXh0ZW5kZWQgYXR0cmlidXRlIGZvciBh
bm5vdGF0aW5nIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciBJREwKKyAgICAgICAgaW50ZXJmYWNl
LgorCisgICAgICAgIFY4V3JhcEFzRnVuY3Rpb24gd3JhcHMgdGhlIGFubm90YXRlZCBpbnRlcmZh
Y2Ugd2l0aCBhIEphdmFTY3JpcHQKKyAgICAgICAgZnVuY3Rpb24sIHdoaWNoIGNhbGxzIHRoZSBv
cmlnaW5hbCBvYmplY3QgYXMgYSBmdW5jdGlvbiwgb3IgYXMgYQorICAgICAgICBjb25zdHJ1Y3Rv
cgorCisgICAgICAgIFdpdGggdGhpcyB3cmFwcGVyIGZ1bmN0aW9uLCB0aGVyZSBhcmUgdHdvIGxl
dmVscyBvZiBpbmRpcmVjdGlvbgorICAgICAgICBiZXR3ZWVuIG5hdGl2ZSBDKysgb2JqZWN0IGFu
ZCBhdXRob3ItdmlzaWJsZSBKUyBmdW5jdGlvbjoKKworICAgICAgICBbSlMgQWRhcHRvciBGaWN0
aW9uXSA8LShoaWRkZW4gcHJvcGVydHkpLT4gW0pTIFdyYXBwZXIgT2JqZWN0XSAtKGludGVybmFs
IGZpZWxkKS0+IFtDKysgTmF0aXZlIG9iamVjdF0KKworICAgICAgICBUaGUgY29kZSBnZW5lcmF0
b3IgZ2VuZXJhdGVzIHRoZSBiaW5kaW5nIGNvZGUgd2hpY2ggZGVhbHMgd2l0aAorICAgICAgICB0
aGlzIGluZGlyZWN0aW9uLiAgQWxzbywgdGhlcmUgaXMgYSBzZXQgb2YgaGVscGVyIGZ1bmN0aW9u
cyBpbgorICAgICAgICBWOEFkYXB0b3JGdW5jdGlvbi5oL2NwcCB3aGljaCB0YWtlIGNhcmUgb2Yg
dGhpcyBpbmRpcmVjdGlvbi4KKyAgICAgICAgVjhET01XcmFwcGVyLmNwcC9oIHdvcmtzIGFzIGEg
ZmFjYWRlIGZvciB0aGVzZSBBUElzIGFuZCBpcyB1c2VkIGZyb20KKyAgICAgICAgdGhlIGdlbmVy
YXRlZCBjb2RlLgorCisgICAgICAgIFRoaXMgcmVkdW5kYW5jeSBjb21lcyBmcm9tIGxpbWl0YXRp
b25zIG9mIGJvdGggVjggYmluZGluZ3MgYW5kIFY4CisgICAgICAgIGVtYmVkZGluZyBBUEkuIFNl
ZSBidWcgMTA4MTM4IGZvciBkZXRhaWxzLgorCisgICAgICAgID0gVjhIVE1MQ3VzdG9tRWxlbWVu
dAorCisgICAgICAgIFVubGlrZSBidWlsdC1pbiBIVE1MIGVsZW1lbnRzLCBhbnkgY3VzdG9tIGVs
ZW1lbnQgaGFzIG5vCisgICAgICAgIGNvcnJlc3BvbmRpbmcgQysrIGNsYXNzLiBJbnN0ZWFkLCBk
b2N1bWVudC5yZWdpc3RlcigpIHNob3VsZCBhbGxvdworICAgICAgICBwYXNzaW5nIGEgcHJvdG90
eXBlIG9iamVjdCBmb3IgdGhlIGVsZW1lbnRzIGJlaW5nIHJlZ2lzdGVyZWQuCisKKyAgICAgICAg
QWx0aG91Z2ggdGhpcyBmaXJzdCB2ZXJzaW9uIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgb3B0aW9uYWwg
cHJvdG90eXBlCisgICAgICAgIHBhcmFtZXRlciB5ZXQsIFY4SFRNTEN1c3RvbUVsZW1lbnQgY2xh
c3MgaXMgbWFkZSBmb3IgYSBwbHVtYmluZworICAgICAgICBmb3Igc3VwcG9ydGluZyBzdWNoIGZl
YXR1cmVzIGluIGNvbWluZyBjaGFuZ2VzLiBUaGlzIGNsYXNzCisgICAgICAgIGVuY2Fwc3VsYXRl
cyBKUyB3cmFwcGVyIG9iamVjdCBjcmVhdGlvbiBmb3IgY3VzdG9tIGVsZW1lbnQKKyAgICAgICAg
aW5zdGFuY2VzLiBGb3IgZXhhbXBsZSwgaXQgdGFrZXMgY2FyZSBvZiBwcm90b3R5cGUgY2hhaW4g
c2V0dXAuIEFzCisgICAgICAgIHdlIHN1cHBvcnQgdGhlICJwcm90b3R5cGUiIG9wdGlvbmFsIHBh
cmFtZXRlciBmb3IgZG9jdW1lbnQucmVnaXN0ZXIoKSwKKyAgICAgICAgdGhpcyBwbHVtYmluZyB3
aWxsIGJlIGV4dGVuZGVkLgorCisgICAgICAgID0gQ3VzdG9tIERPTSBlbGVtZW50cyBhbmQgbXVs
dGlwbGUgd29ybGRzCisKKyAgICAgICAgSW4gdGhpcyBwYXRjaCwgY3VzdG9tIGVsZW1lbnQgcmVn
aXN0cmF0aW9uIGFuZCBpbnN0YW50aWF0aW9uIGlzIG5vdCBhbGxvd2VkCisgICAgICAgIGluIG5v
bi1tYWluIHdvcmxkIGFuZCBkb2N1bWVudC5yZWdpc3RlcigpIEFQSSBqdXN0IGZhaWxzIHRoZXJl
LgorCisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1iYXNp
Yy5odG1sCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIFdlYkNv
cmUuZ3lwaToKKyAgICAgICAgKiBiaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVy
ZXMuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJl
cy5oOgorICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6Y3VzdG9tRE9N
RWxlbWVudHNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNldEN1c3RvbURPTUVsZW1lbnRzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0
ZXMudHh0OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50SGVscGVyczo6aW5pdGlhbGl6
ZUNvbnN0cnVjdG9yV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpoYXNQcm90b3R5cGVJbkNo
YWluKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRIZWxwZXJzOjppc1ZhbGlkUHJv
dG90eXBlUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRIZWxwZXJz
Ojppc0ZlYXR1cmVBbGxvd2VkKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9DdXN0b21FbGVtZW50
SGVscGVycy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhpZGRl
blByb3BlcnR5TmFtZS5oLgorICAgICAgICAoQ3VzdG9tRWxlbWVudEhlbHBlcnMpOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpWOEFkYXB0b3JGdW5jdGlvbjo6Z2V0VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6VjhBZGFwdG9yRnVuY3Rpb246OmNvbmZpZ3VyZVRlbXBsYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlY4QWRhcHRvckZ1bmN0aW9uOjppbnZvY2F0aW9uQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6VjhBZGFwdG9yRnVuY3Rpb246OndyYXApOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4
QWRhcHRvckZ1bmN0aW9uLmg6IEFkZGVkLgorICAgICAgICAoVjhBZGFwdG9yRnVuY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6VjhBZGFwdG9yRnVuY3Rpb246OnVud3JhcCk6CisgICAgICAgIChX
ZWJDb3JlOjpWOEFkYXB0b3JGdW5jdGlvbjo6Z2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9W
OERPTVdyYXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjp0b0Z1bmN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6ZnJvbUZ1bmN0aW9uKToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaDoKKyAgICAgICAgKFY4RE9NV3JhcHBl
cik6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVudC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6VjhIVE1MQ3VzdG9tRWxlbWVudDo6Y3JlYXRlV3JhcHBlcik6
CisgICAgICAgICogYmluZGluZ3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVudC5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oLgorICAg
ICAgICAoVjhIVE1MQ3VzdG9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpWOEhUTUxDdXN0
b21FbGVtZW50Ojp0b1Y4KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDdXN0b21FbGVtZW50Ojp0
b1Y4KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvckN1c3Rv
bS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b21FbGVtZW50Q29uc3RydWN0
b3I6OmNhbGxBc0Z1bmN0aW9uQ2FsbGJhY2spOgorICAgICAgICAqIGRvbS9DdXN0b21FbGVtZW50
Q29uc3RydWN0b3IuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OEhpZGRlblByb3BlcnR5TmFtZS5oLgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudENvbnN0
cnVjdG9yOjpDdXN0b21FbGVtZW50Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vz
dG9tRWxlbWVudENvbnN0cnVjdG9yOjp+Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6d2lsbERlc3Ryb3lEb2N1bWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6OmNyZWF0ZUVs
ZW1lbnQpOgorICAgICAgICAqIGRvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaC4K
KyAgICAgICAgKEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpD
dXN0b21FbGVtZW50Q29uc3RydWN0b3I6OmRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkN1
c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6dGFnTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0
b21FbGVtZW50Q29uc3RydWN0b3I6Om5hbWUpOgorICAgICAgICAqIGRvbS9DdXN0b21FbGVtZW50
Q29uc3RydWN0b3IuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBkb20vQ3VzdG9tRWxlbWVudFJlZ2lz
dHJ5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVnaXN0cnk6
OkN1c3RvbUVsZW1lbnRSZWdpc3RyeSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50
UmVnaXN0cnk6On5DdXN0b21FbGVtZW50UmVnaXN0cnkpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vz
dG9tRWxlbWVudFJlZ2lzdHJ5Ojpjb25zdHJ1Y3Rvck9mKToKKyAgICAgICAgKFdlYkNvcmU6OkN1
c3RvbUVsZW1lbnRSZWdpc3RyeTo6aXNWYWxpZE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vz
dG9tRWxlbWVudFJlZ2lzdHJ5OjpyZWdpc3RlckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpmaW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVs
ZW1lbnRSZWdpc3RyeTo6Y3JlYXRlRWxlbWVudCk6CisgICAgICAgICogZG9tL0N1c3RvbUVsZW1l
bnRSZWdpc3RyeS5oOiBBZGRlZC4KKyAgICAgICAgKEN1c3RvbUVsZW1lbnRSZWdpc3RyeSk6Cisg
ICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpy
ZW1vdmVkTGFzdFJlZik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVnaXN0ZXJFbGVt
ZW50KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKERvY3VtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWdpc3RyeSk6CisgICAgICAgICogZG9tL21ha2Vf
bmFtZXMucGw6CisgICAgICAgIChwcmludFdyYXBwZXJGYWN0b3J5Q3BwRmlsZSk6CisgICAgICAg
ICogaHRtbC9IVE1MRG9jdW1lbnQuaWRsOgorCisyMDEzLTAxLTI5ICBIYWppbWUgTW9ycml0YSAg
PG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBbQ3VzdG9tIEVsZW1lbnRzXSBJbXBsZW1l
bnQgYmFyZS1ib25lIGRvY3VtZW50LnJlZ2lzdGVyKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDIyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGltcGxlbWVudHMgcHJlZml4ZWQg
dmVyc2lvbiBvZiBkb2N1bWVudC5yZWdpc3RlcigpLCB3aXRoIG1pbmltYWwgZmVhdHVyZSBzdXBw
b3J0LgorICAgICAgICAtIFRoZSBmZWF0dXJlIGlzIGd1YXJkZWQgYnkgRU5BQkxFKENVU1RPTV9F
TEVNRU5UUykgYW5kIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmN1c3RvbURPTUVsZW1lbnRzRW5h
YmxlZCgpLgorICAgICAgICAtIFRoaXMgYmFyZS1ib25lIHZlcnNpb24gb25seSByZWNvZ25pemVz
ICJuYW1lIiBwYXJhbWV0ZXIgYW5kIGlnbm9yZXMgYW55IG90aGVyIG9wdGlvbmFsIHBhcmFtZXRl
cnMuCisgICAgICAgIC0gQ3VycmVudGx5IG9ubHkgVjggaXMgc3VwcG9ydGVkLiBKU0MgYmluZGlu
ZyBuZWVkcyBpdHMgb3duIGJpbmRpbmcgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgPSBNYWpv
ciBuZXcgY2xhc3NlcyB1bmRlciBkb20vOgorCisgICAgICAgIFRoZSBkb20gbW9kdWxlIGhhcyB0
d28gbmV3IGNsYXNzZXM6CisgICAgICAgIC0gQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOiBBIHJl
dHVybiB2YWx1ZSBvZiBkb2N1bWVudC5yZWdpc3RlcigpCisgICAgICAgICAgd2hpY2ggaG9sZHMg
dGhlIGN1c3RvbSBlbGVtZW50IGRlZmluaXRpb24uCisgICAgICAgIC0gQ3VzdG9tRWxlbWVudFJl
Z2lzdHJ5OiBBIGNvbGxlY3Rpb24gb2YgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yIG9iamVjdHMu
CisgICAgICAgICAgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5IGluc3RhbmNlIGlzIGNyZWF0ZWQgcGVy
IERvY3VtZW50IGFuZCBpcyBvd25lZCBieSB0aGUgRG9jdW1lbnQuCisKKyAgICAgICAgQ3VzdG9t
RWxlbWVudENvbnN0cnVjdG9yIGtub3dzIHRoZSBkZWZpbml0aW9uIG9mIGVhY2ggY3VzdG9tCisg
ICAgICAgIGVsZW1lbnQsIHdoaWNoIGlzIHJlZ2lzdGVyZWQgYnkgZG9jdW1lbnQucmVnaXN0ZXIo
KS4gVGhlIG5hbWUgYW5kCisgICAgICAgIG90aGVyIG9wdGlvbnMgYXJlIGhlbGQgYnkgdGhpcyBv
YmplY3QuIEN1c3RvbUVsZW1lbnRSZWdpc3RyeSBvd25zIGEgc2V0CisgICAgICAgIG9mIHRoZSBy
ZWdpc3RlcmVkIGNvbnN0cnVjdG9ycy4gVGhlIHJlZ2lzdHJ5IGd1YXJhbnRlZXMgaW52YXJpYW50
cworICAgICAgICBsaWtlIHZhbGlkaXR5IGFuZCB1bmlxdWVuZXNzIG9mIHRoZSBlbGVtZW50IG5h
bWVzLgorCisgICAgICAgID0gQSBjaGFuZ2Ugb24gbWFrZV9uYW1lcy5wbAorCisgICAgICAgIFRo
aXMgY2hhbmdlIHR3ZWFrcyBtYWtlX25hbWVzLnBsIChvciBnZW5lcmF0ZWQgSFRNTEVsZW1lbnRG
YWN0b3J5KQorICAgICAgICB0byBob29rIHRoZSBjcmVhdGlvbnMgb2YgdW5rbm93biBlbGVtZW50
cy4gU29tZSBvZiBlbGVtZW50IG5hbWVzCisgICAgICAgIHdoaWNoIGNvbWUgdG8gdGhlIGZhbGxi
YWNrIHBhdGggY2FuIGJlIG9uZSBvZiByZWdpc3RlcmVkIGN1c3RvbQorICAgICAgICBlbGVtZW50
LgorCisgICAgICAgID0gW1Y4V3JhcEFzRnVuY3Rpb25dIGV4dGVuZGVkIGF0dHJpYnV0ZToKKwor
ICAgICAgICBUaGUgZG9jdW1lbnQucmVnaXN0ZXIoKSBBUEkgcmV0dXJucyBhIGNvbnN0cnVjdG9y
CisgICAgICAgIGZ1bmN0aW9uLiBIb3dldmVyLCB0aGUgVjggYmluZGluZyBjdXJyZW50bHkgZG9l
c24ndCBzdXBwb3J0IGl0LiBUbworICAgICAgICBtYWtlIGl0IHBvc3NpYmxlLCB0aGlzIGNoYW5n
ZSBpbnRyb2R1Y2VzICJWOFdyYXBBc0Z1bmN0aW9uIgorICAgICAgICBleHRlbmRlZCBhdHRyaWJ1
dGUgZm9yIGFubm90YXRpbmcgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yIElETAorICAgICAgICBp
bnRlcmZhY2UuCisKKyAgICAgICAgVjhXcmFwQXNGdW5jdGlvbiB3cmFwcyB0aGUgYW5ub3RhdGVk
IGludGVyZmFjZSB3aXRoIGEgSmF2YVNjcmlwdAorICAgICAgICBmdW5jdGlvbiwgd2hpY2ggY2Fs
bHMgdGhlIG9yaWdpbmFsIG9iamVjdCBhcyBhIGZ1bmN0aW9uLCBvciBhcyBhCisgICAgICAgIGNv
bnN0cnVjdG9yCisKKyAgICAgICAgV2l0aCB0aGlzIHdyYXBwZXIgZnVuY3Rpb24sIHRoZXJlIGFy
ZSB0d28gbGV2ZWxzIG9mIGluZGlyZWN0aW9uCisgICAgICAgIGJldHdlZW4gbmF0aXZlIEMrKyBv
YmplY3QgYW5kIGF1dGhvci12aXNpYmxlIEpTIGZ1bmN0aW9uOgorCisgICAgICAgIFtKUyBBZGFw
dG9yIEZpY3Rpb25dIDwtKGhpZGRlbiBwcm9wZXJ0eSktPiBbSlMgV3JhcHBlciBPYmplY3RdIC0o
aW50ZXJuYWwgZmllbGQpLT4gW0MrKyBOYXRpdmUgb2JqZWN0XQorCisgICAgICAgIFRoZSBjb2Rl
IGdlbmVyYXRvciBnZW5lcmF0ZXMgdGhlIGJpbmRpbmcgY29kZSB3aGljaCBkZWFscyB3aXRoCisg
ICAgICAgIHRoaXMgaW5kaXJlY3Rpb24uICBBbHNvLCB0aGVyZSBpcyBhIHNldCBvZiBoZWxwZXIg
ZnVuY3Rpb25zIGluCisgICAgICAgIFY4QWRhcHRvckZ1bmN0aW9uLmgvY3BwIHdoaWNoIHRha2Ug
Y2FyZSBvZiB0aGlzIGluZGlyZWN0aW9uLgorICAgICAgICBWOERPTVdyYXBwZXIuY3BwL2ggd29y
a3MgYXMgYSBmYWNhZGUgZm9yIHRoZXNlIEFQSXMgYW5kIGlzIHVzZWQgZnJvbQorICAgICAgICB0
aGUgZ2VuZXJhdGVkIGNvZGUuCisKKyAgICAgICAgVGhpcyByZWR1bmRhbmN5IGNvbWVzIGZyb20g
bGltaXRhdGlvbnMgb2YgYm90aCBWOCBiaW5kaW5ncyBhbmQgVjgKKyAgICAgICAgZW1iZWRkaW5n
IEFQSS4gU2VlIGJ1ZyAxMDgxMzggZm9yIGRldGFpbHMuCisKKyAgICAgICAgPSBWOEhUTUxDdXN0
b21FbGVtZW50CisKKyAgICAgICAgVW5saWtlIGJ1aWx0LWluIEhUTUwgZWxlbWVudHMsIGFueSBj
dXN0b20gZWxlbWVudCBoYXMgbm8KKyAgICAgICAgY29ycmVzcG9uZGluZyBDKysgY2xhc3MuIElu
c3RlYWQsIGRvY3VtZW50LnJlZ2lzdGVyKCkgc2hvdWxkIGFsbG93CisgICAgICAgIHBhc3Npbmcg
YSBwcm90b3R5cGUgb2JqZWN0IGZvciB0aGUgZWxlbWVudHMgYmVpbmcgcmVnaXN0ZXJlZC4KKwor
ICAgICAgICBBbHRob3VnaCB0aGlzIGZpcnN0IHZlcnNpb24gZG9lc24ndCBzdXBwb3J0IHRoZSBv
cHRpb25hbCBwcm90b3R5cGUKKyAgICAgICAgcGFyYW1ldGVyIHlldCwgVjhIVE1MQ3VzdG9tRWxl
bWVudCBjbGFzcyBpcyBtYWRlIGZvciBhIHBsdW1iaW5nCisgICAgICAgIGZvciBzdXBwb3J0aW5n
IHN1Y2ggZmVhdHVyZXMgaW4gY29taW5nIGNoYW5nZXMuIFRoaXMgY2xhc3MKKyAgICAgICAgZW5j
YXBzdWxhdGVzIEpTIHdyYXBwZXIgb2JqZWN0IGNyZWF0aW9uIGZvciBjdXN0b20gZWxlbWVudAor
ICAgICAgICBpbnN0YW5jZXMuIEZvciBleGFtcGxlLCBpdCB0YWtlcyBjYXJlIG9mIHByb3RvdHlw
ZSBjaGFpbiBzZXR1cC4gQXMKKyAgICAgICAgd2Ugc3VwcG9ydCB0aGUgInByb3RvdHlwZSIgb3B0
aW9uYWwgcGFyYW1ldGVyIGZvciBkb2N1bWVudC5yZWdpc3RlcigpLAorICAgICAgICB0aGlzIHBs
dW1iaW5nIHdpbGwgYmUgZXh0ZW5kZWQuCisKKyAgICAgICAgPSBDdXN0b20gRE9NIGVsZW1lbnRz
IGFuZCBtdWx0aXBsZSB3b3JsZHMKKworICAgICAgICBJbiB0aGlzIHBhdGNoLCBjdXN0b20gZWxl
bWVudCByZWdpc3RyYXRpb24gYW5kIGluc3RhbnRpYXRpb24gaXMgbm90IGFsbG93ZWQKKyAgICAg
ICAgaW4gbm9uLW1haW4gd29ybGQgYW5kIGRvY3VtZW50LnJlZ2lzdGVyKCkgQVBJIGp1c3QgZmFp
bHMgdGhlcmUuCisKKyAgICAgICAgVGVzdDogZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lz
dGVyLWJhc2ljLmh0bWwKKworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAg
ICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGJpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJs
ZWRGZWF0dXJlcy5jcHA6CisgICAgICAgICogYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxl
ZEZlYXR1cmVzLmg6CisgICAgICAgIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmN1c3RvbURPTUVsZW1lbnRzRW5hYmxl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzZXRDdXN0b21E
T01FbGVtZW50cyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgu
cG06CisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy9JRExBdHRyaWJ1dGVzLnR4dDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9DdXN0b21FbGVtZW50
SGVscGVycy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudEhlbHBl
cnM6OmluaXRpYWxpemVDb25zdHJ1Y3RvcldyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vz
dG9tRWxlbWVudEhlbHBlcnM6OmRlZmF1bHRQcm90b3R5cGVPZik6CisgICAgICAgIChXZWJDb3Jl
OjpDdXN0b21FbGVtZW50SGVscGVyczo6aXNDdXN0b21FbGVtZW50c0FsbG93ZWQpOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmguCisgICAgICAgIChD
dXN0b21FbGVtZW50SGVscGVycyk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhBZGFwdG9yRnVu
Y3Rpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlY4QWRhcHRvckZ1bmN0aW9uOjpn
ZXRUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOEFkYXB0b3JGdW5jdGlvbjo6Y29uZmln
dXJlVGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhBZGFwdG9yRnVuY3Rpb246Omludm9j
YXRpb25DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOEFkYXB0b3JGdW5jdGlvbjo6d3Jh
cCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhBZGFwdG9yRnVuY3Rpb24uaDogQWRkZWQuCisg
ICAgICAgIChWOEFkYXB0b3JGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpWOEFkYXB0b3JG
dW5jdGlvbjo6dW53cmFwKToKKyAgICAgICAgKFdlYkNvcmU6OlY4QWRhcHRvckZ1bmN0aW9uOjpn
ZXQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpWOERPTVdyYXBwZXI6OnRvRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6VjhE
T01XcmFwcGVyOjpmcm9tRnVuY3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV3Jh
cHBlci5oOgorICAgICAgICAoVjhET01XcmFwcGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9W
OEhUTUxDdXN0b21FbGVtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpWOEhUTUxD
dXN0b21FbGVtZW50OjpjcmVhdGVXcmFwcGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEhU
TUxDdXN0b21FbGVtZW50Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmguCisgICAgICAgIChWOEhUTUxDdXN0b21FbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlY4SFRNTEN1c3RvbUVsZW1lbnQ6OnRvVjgpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEN1c3RvbUVsZW1lbnQ6OnRvVjgpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yQ3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpWOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y2FsbEFzRnVuY3Rpb25DYWxsYmFjayk6
CisgICAgICAgICogZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5jcHA6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmguCisgICAg
ICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6OkN1c3RvbUVsZW1lbnRDb25zdHJ1
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6On5DdXN0
b21FbGVtZW50Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yOjp3aWxsRGVzdHJveURvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3Rv
bUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlRWxlbWVudCk6CisgICAgICAgICogZG9tL0N1c3Rv
bUVsZW1lbnRDb25zdHJ1Y3Rvci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oLgorICAgICAgICAoQ3VzdG9tRWxlbWVudENvbnN0
cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6ZG9j
dW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjp0YWdO
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6bmFtZSk6
CisgICAgICAgICogZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5pZGw6IEFkZGVkLgorICAg
ICAgICAqIGRvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6fkN1c3RvbUVsZW1lbnRSZWdp
c3RyeSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVnaXN0cnk6OmNvbnN0cnVj
dG9yT2YpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5Ojppc1ZhbGlk
TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVnaXN0cnk6OnJlZ2lzdGVy
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVnaXN0cnk6OmZpbmQp
OgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpjcmVhdGVFbGVtZW50
KToKKyAgICAgICAgKiBkb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Lmg6IEFkZGVkLgorICAgICAg
ICAoQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlbW92ZWRMYXN0UmVmKToKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50OjpyZWdpc3RlckVsZW1lbnQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlZ2lzdHJ5KToKKyAgICAgICAgKiBk
b20vbWFrZV9uYW1lcy5wbDoKKyAgICAgICAgKHByaW50V3JhcHBlckZhY3RvcnlDcHBGaWxlKToK
KyAgICAgICAgKiBodG1sL0hUTUxEb2N1bWVudC5pZGw6CisKIDIwMTMtMDItMDcgIFNldWxnaSBL
aW0gIDxzZXVsZ2lraW1AY29tcGFueTEwMC5uZXQ+CiAKICAgICAgICAgW0d0a10gUnVuTG9vcDo6
cnVuIHNodW9sZCBydW4gY3VycmVudCB0aHJlYWQncyBydW4gbG9vcC4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKaW5kZXggN2IwMzczZDhjMzhmNDdhYjc5ZDVlYmVjMTAxNjBjMDVmODI4MGY0MC4u
YTE5MzE3NzNiNzk0MTc3N2M2YmU0MjYxY2JlZjk2MTc2MjM4ZWRlZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMy0wMS0yNyAgSGFqaW1lIE1vcnJpdGEg
IDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgW0N1c3RvbSBFbGVtZW50c10gSW1wbGVt
ZW50IGJhcmUtYm9uZSBkb2N1bWVudC5yZWdpc3RlcigpCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDAyMjkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBlbmFibGVDdXN0b21ET01FbGVtZW50cyBm
bGFnLgorCisgICAgICAgICogZmVhdHVyZXMuZ3lwaToKKyAgICAgICAgKiBwdWJsaWMvV2ViUnVu
dGltZUZlYXR1cmVzLmg6CisgICAgICAgIChXZWJSdW50aW1lRmVhdHVyZXMpOgorICAgICAgICAq
IHNyYy9XZWJSdW50aW1lRmVhdHVyZXMuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSdW50aW1l
RmVhdHVyZXM6OmVuYWJsZUN1c3RvbURPTUVsZW1lbnRzKToKKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlJ1bnRpbWVGZWF0dXJlczo6aXNDdXN0b21ET01FbGVtZW50c0Vu
YWJsZWQpOgorCiAyMDEzLTAyLTA3ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4K
IAogICAgICAgICBbQ2hyb21pdW0tQW5kcm9pZF0gRGlzYWJsZSBpbnB1dFt0eXBlPWRhdGV0aW1l
XQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJj
ZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggMzliZGU4ZWNjNTg5MWJhMTgyY2Fj
YTRmM2E4N2E0YjI1ODZiMGVmYy4uNDdjMGQ2YTdhMjgzMjRjNDJjZTVlNTk0ZDhlZGM3M2VjODVi
MmVkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0yMTQsNiArMjE0LDcgQEAg
QklORElOR19JRExTID0gXAogICAgICQoV2ViQ29yZSkvZG9tL0NsaXBib2FyZC5pZGwgXAogICAg
ICQoV2ViQ29yZSkvZG9tL0NvbW1lbnQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2RvbS9Db21wb3Np
dGlvbkV2ZW50LmlkbCBcCisgICAgJChXZWJDb3JlKS9kb20vQ3VzdG9tRWxlbWVudENvbnN0cnVj
dG9yLmlkbCBcCiAgICAgJChXZWJDb3JlKS9kb20vQ3VzdG9tRXZlbnQuaWRsIFwKICAgICAkKFdl
YkNvcmUpL2RvbS9ET01Db3JlRXhjZXB0aW9uLmlkbCBcCiAgICAgJChXZWJDb3JlKS9kb20vRE9N
RXJyb3IuaWRsIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBhMTJlNzZkMGI0MWRkZjBlZTcxZDhkMjZh
ZjQ3Njc1YTZmYzQ4MzAzLi4xNWM4YjViZjA4ODYzOGI2MmIwNmJhZjM4OTE0YTI1M2IyNmY3YTE0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yMDQsNiArMjA0LDcgQEAKICAgICAgICAgICAgICdkb20v
Q2xpcGJvYXJkLmlkbCcsCiAgICAgICAgICAgICAnZG9tL0NvbW1lbnQuaWRsJywKICAgICAgICAg
ICAgICdkb20vQ29tcG9zaXRpb25FdmVudC5pZGwnLAorICAgICAgICAgICAgJ2RvbS9DdXN0b21F
bGVtZW50Q29uc3RydWN0b3IuaWRsJywKICAgICAgICAgICAgICdkb20vQ3VzdG9tRXZlbnQuaWRs
JywKICAgICAgICAgICAgICdkb20vRE9NQ29yZUV4Y2VwdGlvbi5pZGwnLAogICAgICAgICAgICAg
J2RvbS9ET01FcnJvci5pZGwnLApAQCAtMTE5OCw2ICsxMTk5LDggQEAKICAgICAgICAgICAgICdi
aW5kaW5ncy92OC9BcnJheVZhbHVlLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0JpbmRp
bmdTdGF0ZS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0JpbmRpbmdTdGF0ZS5oJywK
KyAgICAgICAgICAgICdiaW5kaW5ncy92OC9DdXN0b21FbGVtZW50SGVscGVycy5jcHAnLAorICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmgnLAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdz
L3Y4L0RPTURhdGFTdG9yZS5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9ET01SZXF1ZXN0
U3RhdGUuaCcsCkBAIC0xMjY2LDYgKzEyNjksOCBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4
L1NoYXJlZFBlcnNpc3RlbnQuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhBYnN0cmFj
dEV2ZW50TGlzdGVuZXIuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEFic3RyYWN0
RXZlbnRMaXN0ZW5lci5oJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5j
dGlvbi5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmgn
LAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHAnLAogICAgICAgICAgICAg
J2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEJp
bmRpbmdNYWNyb3MuaCcsCkBAIC0xMjg3LDYgKzEyOTIsOCBAQAogICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L1Y4R0NDb250cm9sbGVyLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4R0NG
b3JDb250ZXh0RGlzcG9zZS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4R0NGb3JD
b250ZXh0RGlzcG9zZS5oJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEhUTUxDdXN0b21F
bGVtZW50LmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVu
dC5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5jcHAn
LAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmgnLAogICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4SW5pdGlhbGl6ZXIuY3BwJywKQEAgLTEzNDcsNiArMTM1
NCw3IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q29uc29sZUN1c3RvbS5j
cHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENvb3JkaW5hdGVzQ3VzdG9t
LmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3J5cHRvQ3VzdG9tLmNw
cCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tRWxlbWVudENvbnN0
cnVjdG9yQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3Vz
dG9tRXZlbnRDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhD
dXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcCcsCiAgICAgICAgICAgICAnYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4Q3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcCcsCkBAIC0yNzc4LDYgKzI3
ODYsMTAgQEAKICAgICAgICAgICAgICdkb20vQ29udGV4dEZlYXR1cmVzLmNwcCcsCiAgICAgICAg
ICAgICAnZG9tL0NvbnRleHRGZWF0dXJlcy5oJywKICAgICAgICAgICAgICdkb20vQ3Jvc3NUaHJl
YWRUYXNrLmgnLAorICAgICAgICAgICAgJ2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuY3Bw
JywKKyAgICAgICAgICAgICdkb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmgnLAorICAgICAg
ICAgICAgJ2RvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuY3BwJywKKyAgICAgICAgICAgICdkb20v
Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmgnLAogICAgICAgICAgICAgJ2RvbS9DdXN0b21FdmVudC5j
cHAnLAogICAgICAgICAgICAgJ2RvbS9DdXN0b21FdmVudC5oJywKICAgICAgICAgICAgICdkb20v
RE9NQWxsSW5PbmUuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dl
bmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwCmluZGV4IDgyMGY1YTZhZjllYjc0
MjM3ODE5Nzk2ZGIyODA1ZDVhMmU2YTc5M2EuLjc0Zjg1MjgyYzhlYjM0OWVjZmU4OGUwMDY4OGJm
Y2Q3ZmIwMzkxM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMv
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
Z2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNwcApAQCAtMTg5LDYgKzE4OSwxMCBAQCBi
b29sIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmlzU2hhZG93RE9NRW5hYmxlZCA9IGZhbHNlOwog
Ym9vbCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjppc0F1dGhvclNoYWRvd0RPTUZvckFueUVsZW1l
bnRFbmFibGVkID0gZmFsc2U7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMp
Citib29sIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmlzQ3VzdG9tRE9NRWxlbWVudHNFbmFibGVk
ID0gZmFsc2U7CisjZW5kaWYKKwogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCiBib29sIFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OmlzU3R5bGVTY29wZWRFbmFibGVkID0gZmFsc2U7CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJs
ZWRGZWF0dXJlcy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5h
YmxlZEZlYXR1cmVzLmgKaW5kZXggMjE1MzJlOWNlZWFiNzNlZjcwOGU1NjViZWNhZmE4NDA1MDg1
YjVlMC4uNzRjODI0MjMxYTU2ZTZhZmY3ZTdkMzM4OTBjMGRjNmRmMzczZDhlMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVz
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZl
YXR1cmVzLmgKQEAgLTIxMCw2ICsyMTAsMTEgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNl
dEF1dGhvclNoYWRvd0RPTUZvckFueUVsZW1lbnRFbmFibGVkKGJvb2wgaXNFbmFibGVkKSB7IGlz
QXV0aG9yU2hhZG93RE9NRm9yQW55RWxlbWVudEVuYWJsZWQgPSBpc0VuYWJsZWQ7IH0KICNlbmRp
ZgogCisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKyAgICBzdGF0aWMgYm9vbCBjdXN0b21E
T01FbGVtZW50c0VuYWJsZWQoKSB7IHJldHVybiBpc0N1c3RvbURPTUVsZW1lbnRzRW5hYmxlZDsg
fQorICAgIHN0YXRpYyB2b2lkIHNldEN1c3RvbURPTUVsZW1lbnRzKGJvb2wgaXNFbmFibGVkKSB7
IGlzQ3VzdG9tRE9NRWxlbWVudHNFbmFibGVkID0gaXNFbmFibGVkOyB9CisjZW5kaWYKKwogI2lm
IEVOQUJMRShTVFlMRV9TQ09QRUQpCiAgICAgc3RhdGljIGJvb2wgc3R5bGVTY29wZWRFbmFibGVk
KCkgeyByZXR1cm4gaXNTdHlsZVNjb3BlZEVuYWJsZWQ7IH0KICAgICBzdGF0aWMgdm9pZCBzZXRT
dHlsZVNjb3BlZEVuYWJsZWQoYm9vbCBpc0VuYWJsZWQpIHsgaXNTdHlsZVNjb3BlZEVuYWJsZWQg
PSBpc0VuYWJsZWQ7IH0KQEAgLTM0MSw2ICszNDYsMTAgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMg
Ym9vbCBpc0F1dGhvclNoYWRvd0RPTUZvckFueUVsZW1lbnRFbmFibGVkOwogI2VuZGlmCiAKKyNp
ZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorICAgIHN0YXRpYyBib29sIGlzQ3VzdG9tRE9NRWxl
bWVudHNFbmFibGVkOworI2VuZGlmCisKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQogICAgIHN0
YXRpYyBib29sIGlzU3R5bGVTY29wZWRFbmFibGVkOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCmluZGV4IGNmMjRhNmFl
OGY3MWE0ODMyOWYwZTFmM2Q1NThiNmIxOWFhNjJkYzQuLmFlNDhhZTU5MjMyMjM2YTAwYzViMGZk
MzE5MmE0YTRiYWIxZWEwMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCkBAIC0zNTIsMTMgKzM1MiwyMCBAQCBFTkQKICAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgImZhbHNlO1xuIik7CiAgICAgfQogCisgICAgbXkgJGZy
b21GdW5jdGlvbk9wZW5pbmcgPSAiIjsKKyAgICBteSAkZnJvbUZ1bmN0aW9uQ2xvc2luZyA9ICIi
OworICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVjhXcmFwQXNGdW5j
dGlvbiJ9KSB7CisgICAgICAgICRmcm9tRnVuY3Rpb25PcGVuaW5nID0gIlY4RE9NV3JhcHBlcjo6
ZnJvbUZ1bmN0aW9uKCI7CisgICAgICAgICRmcm9tRnVuY3Rpb25DbG9zaW5nID0gIikiOworICAg
IH0KKwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKICAgICBzdGF0aWMgYm9vbCBI
YXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4sIHY4OjpJc29sYXRlKik7CiAgICAgc3Rh
dGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBHZXRSYXdUZW1wbGF0ZSh2
ODo6SXNvbGF0ZSopOwogICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1w
bGF0ZT4gR2V0VGVtcGxhdGUodjg6Oklzb2xhdGUqKTsKICAgICBzdGF0aWMgJHtuYXRpdmVUeXBl
fSogdG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QpCiAgICAgewotICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwke25hdGl2ZVR5cGV9Kj4ob2JqZWN0LT5HZXRBbGln
bmVkUG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9NV3JhcHBlck9iamVjdEluZGV4KSk7Cisg
ICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCR7bmF0aXZlVHlwZX0qPigke2Zyb21GdW5j
dGlvbk9wZW5pbmd9b2JqZWN0JHtmcm9tRnVuY3Rpb25DbG9zaW5nfS0+R2V0QWxpZ25lZFBvaW50
ZXJGcm9tSW50ZXJuYWxGaWVsZCh2OERPTVdyYXBwZXJPYmplY3RJbmRleCkpOwogICAgIH0KICAg
ICBzdGF0aWMgdm9pZCBkZXJlZk9iamVjdCh2b2lkKik7CiAgICAgc3RhdGljIFdyYXBwZXJUeXBl
SW5mbyBpbmZvOwpAQCAtNTM5LDYgKzU0Niw5IEBAIEVORAogICAgIH0gZWxzZSB7CiAKICAgICAg
ICAgbXkgJGNyZWF0ZVdyYXBwZXJDYWxsID0gJGN1c3RvbVdyYXAgPyAiJHt2OEludGVyZmFjZU5h
bWV9Ojp3cmFwIiA6ICIke3Y4SW50ZXJmYWNlTmFtZX06OmNyZWF0ZVdyYXBwZXIiOworICAgICAg
ICBteSAkcmV0dXJuaW5nV3JhcHBlciA9ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJWOFdyYXBBc0Z1bmN0aW9uIn0gPyAiVjhET01XcmFwcGVyOjp0b0Z1bmN0aW9uKHdyYXBwZXIp
IiA6ICJ3cmFwcGVyIjsKKyAgICAgICAgbXkgJHJldHVybmluZ0NyZWF0ZWRXcmFwcGVyT3Blbmlu
ZyA9ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJWOFdyYXBBc0Z1bmN0aW9uIn0g
PyAiVjhET01XcmFwcGVyOjp0b0Z1bmN0aW9uKCIgOiAiIjsKKyAgICAgICAgbXkgJHJldHVybmlu
Z0NyZWF0ZWRXcmFwcGVyQ2xvc2luZyA9ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJWOFdyYXBBc0Z1bmN0aW9uIn0gPyAiLCBpbXBsLT5uYW1lKCksIGlzb2xhdGUpIiA6ICIiOwog
CiAgICAgICAgIGlmICgkY3VzdG9tV3JhcCkgewogICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgPDxFTkQpOwpAQCAtNTUyLDcgKzU2Miw3IEBAIGlubGluZSB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IHdyYXAoJHtuYXRpdmVUeXBlfSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBj
CiB7CiAgICAgQVNTRVJUKGltcGwpOwogICAgIEFTU0VSVChET01EYXRhU3RvcmU6OmdldFdyYXBw
ZXIoaW1wbCwgaXNvbGF0ZSkuSXNFbXB0eSgpKTsKLSAgICByZXR1cm4gJGNyZWF0ZVdyYXBwZXJD
YWxsKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgcmV0dXJuICR7cmV0dXJu
aW5nQ3JlYXRlZFdyYXBwZXJPcGVuaW5nfSRjcmVhdGVXcmFwcGVyQ2FsbChpbXBsLCBjcmVhdGlv
bkNvbnRleHQsIGlzb2xhdGUpJHtyZXR1cm5pbmdDcmVhdGVkV3JhcHBlckNsb3Npbmd9OwogfQog
RU5ECiAgICAgICAgIH0KQEAgLTU2NSw3ICs1NzUsNyBAQCBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHRvVjgoJHtuYXRpdmVUeXBlfSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBj
cgogICAgICAgICByZXR1cm4gdjhOdWxsV2l0aENoZWNrKGlzb2xhdGUpOwogICAgIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB3cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyKGltcGwsIGlz
b2xhdGUpOwogICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB3cmFw
cGVyOworICAgICAgICByZXR1cm4gJHJldHVybmluZ1dyYXBwZXI7CiAgICAgcmV0dXJuIHdyYXAo
aW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KIApAQCAtNTc2LDcgKzU4Niw3IEBA
IGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZhc3QoJHtuYXRpdmVUeXBlfSogaW1w
bCwgY29uc3QgSG9sZGVyQ29udGFpbmVyCiAgICAgICAgIHJldHVybiB2OE51bGwoY29udGFpbmVy
LkdldElzb2xhdGUoKSk7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gRE9N
RGF0YVN0b3JlOjpnZXRXcmFwcGVyRmFzdChpbXBsLCBjb250YWluZXIsIHdyYXBwYWJsZSk7CiAg
ICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAg
ICAgIHJldHVybiAkcmV0dXJuaW5nV3JhcHBlcjsKICAgICByZXR1cm4gd3JhcChpbXBsLCBjb250
YWluZXIuSG9sZGVyKCksIGNvbnRhaW5lci5HZXRJc29sYXRlKCkpOwogfQogRU5ECmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0IGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dAppbmRleCBj
NjM2NDRmYmU5NjUyOWRmNzhhMjM4MzBhNTZiNjQxYTJkYmVkZDA3Li4xODYxMTE4MTUwOWVjM2I1
Y2M3NGMwYTlmMzA4YjZiMDU5OGNhMzQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQKQEAgLTEyOSwzICsxMjksNCBAQCBWOE1lYXN1
cmVBcz0qCiBWOFJlYWRPbmx5CiBWOFNraXBWVGFibGVWYWxpZGF0aW9uCiBWOFVuZm9yZ2VhYmxl
CitWOFdyYXBBc0Z1bmN0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9DdXN0b21FbGVtZW50SGVscGVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9D
dXN0b21FbGVtZW50SGVscGVycy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTMzYjQ2NjQzNzliMzI5YTU1NzZm
OTlkMGRjZDdjZTM4OWMyNWE4MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmNwcApAQCAtMCwwICsxLDEwNyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50SGVscGVycy5oIgorCisjaW5j
bHVkZSAiRE9NV3JhcHBlcldvcmxkLmgiCisjaW5jbHVkZSAiVjhDdXN0b21FbGVtZW50Q29uc3Ry
dWN0b3IuaCIKKyNpbmNsdWRlICJWOEhUTUxQYXJhZ3JhcGhFbGVtZW50LmgiCisjaW5jbHVkZSAi
VjhIVE1MU3BhbkVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgRU5BQkxF
KENVU1RPTV9FTEVNRU5UUykKKwordm9pZCBDdXN0b21FbGVtZW50SGVscGVyczo6aW5pdGlhbGl6
ZUNvbnN0cnVjdG9yV3JhcHBlcihDdXN0b21FbGVtZW50Q29uc3RydWN0b3IqIGNvbnN0cnVjdG9y
LCBjb25zdCBTY3JpcHRWYWx1ZSYgcHJvdG90eXBlLCBTY3JpcHRTdGF0ZSogc3RhdGUpCit7Cisg
ICAgQVNTRVJUKGlzRmVhdHVyZUFsbG93ZWQoc3RhdGUpKTsKKyAgICBBU1NFUlQoIXByb3RvdHlw
ZS52OFZhbHVlKCkuSXNFbXB0eSgpICYmIHByb3RvdHlwZS52OFZhbHVlKCktPklzT2JqZWN0KCkp
OworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IHY4OjpIYW5kbGU8djg6Ok9i
amVjdD46OkNhc3QoV2ViQ29yZTo6dG9WOChjb25zdHJ1Y3Rvciwgc3RhdGUtPmNvbnRleHQoKS0+
R2xvYmFsKCksIHN0YXRlLT5jb250ZXh0KCktPkdldElzb2xhdGUoKSkpOworICAgIC8vIC0gT2Jq
ZWN0OjpGb3JjZVNldCgpIG5vciBPYmplY3Q6OlNldEFjY2Vzc29yIERvZXNuJ3Qgd29yayBhZ2Fp
bnN0IHRoZSAicHJvdG90eXBlIiBwcm9wZXJ0eSBvZiBmdW5jdGlvbiBvYmplY3RzLgorICAgIC8v
IC0gU2V0KCktaW5nIGhlcmUgaXMgc2FmZSBiZWNhdXNlCisgICAgLy8gICAtIF9fZGVmaW5lU2V0
dGVyX18gbm9yIF9fZGVmaW5lR2V0dGVyX18gYWxzbyBkb2Vzbid0IHdvcmsgYWdhaW5zdCBmdW5j
dGlvbiBvYmplY3RzIGFuZAorICAgIC8vICAgLSBVc2luZyBTZXQoKSBpcyBva2F5IGJlY2F1ZXMg
ZWFjaCBmdW5jdGlvbiBoYXMgInByb3RvdHlwZSIgcHJvcGVydHkgZnJvbSBzdGFydCBhbmQgT2Jq
ZWN0cy5wcm90b3R5cGUgY2Fubm90IGludGVyY2VwdCB0aGUgcHJvcGVydHkgYWNjZXNzLgorICAg
IHdyYXBwZXItPlNldCh2OFN0cmluZygicHJvdG90eXBlIiwgc3RhdGUtPmNvbnRleHQoKS0+R2V0
SXNvbGF0ZSgpKSwgcHJvdG90eXBlLnY4VmFsdWUoKSwgdjg6OlJlYWRPbmx5KTsKKworICAgIHY4
OjpIYW5kbGU8djg6OlN0cmluZz4gY29uc3RydWN0b3JLZXkgPSB2OFN0cmluZygiY29uc3RydWN0
b3IiLCBzdGF0ZS0+Y29udGV4dCgpLT5HZXRJc29sYXRlKCkpOworICAgIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gcHJvdG90eXBlT2JqZWN0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChw
cm90b3R5cGUudjhWYWx1ZSgpKTsKKyAgICBBU1NFUlQoIXByb3RvdHlwZU9iamVjdC0+SGFzT3du
UHJvcGVydHkoY29uc3RydWN0b3JLZXkpKTsKKyAgICBwcm90b3R5cGVPYmplY3QtPkZvcmNlU2V0
KGNvbnN0cnVjdG9yS2V5LCB3cmFwcGVyLCB2ODo6UmVhZE9ubHkpOworfQorCitzdGF0aWMgYm9v
bCBoYXNQcm90b3R5cGVJbkNoYWluKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gcHJvdG90eXBlLCB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY2hhaW4pCit7CisgICAgd2hpbGUgKCFjaGFpbi5Jc0VtcHR5
KCkpIHsKKyAgICAgICAgaWYgKGNoYWluID09IHByb3RvdHlwZSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBpZiAoIWNoYWluLT5Jc09iamVjdCgpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBjaGFpbiA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qo
Y2hhaW4pLT5HZXRQcm90b3R5cGUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgQ3VzdG9tRWxlbWVudEhlbHBlcnM6OmlzVmFsaWRQcm90b3R5cGVQYXJhbWV0ZXIoY29u
c3QgU2NyaXB0VmFsdWUmIHByb3RvdHlwZSwgU2NyaXB0U3RhdGUqIHN0YXRlKQoreworICAgIGlm
IChwcm90b3R5cGUudjhWYWx1ZSgpLklzRW1wdHkoKSB8fCAhcHJvdG90eXBlLnY4VmFsdWUoKS0+
SXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gZG9jdW1lbnQucmVn
aXN0ZXIoKSBzZXRzIHRoZSBjb25zdHJ1Y2R0b3IgcHJvcGVydHksIHNvIHRoZSBwcm90b3R5cGUg
c2hvdWxkbid0IGhhdmUgb25lLgorICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gcHJvdG90eXBl
T2JqZWN0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChwcm90b3R5cGUudjhWYWx1ZSgp
KTsKKyAgICBpZiAocHJvdG90eXBlT2JqZWN0LT5IYXNPd25Qcm9wZXJ0eSh2OFN0cmluZygiY29u
c3RydWN0b3IiLCBzdGF0ZS0+Y29udGV4dCgpLT5HZXRJc29sYXRlKCkpKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIFY4UGVyQ29udGV4dERhdGEqIHBlckNvbnRleHREYXRhID0gVjhQZXJD
b250ZXh0RGF0YTo6ZnJvbShzdGF0ZS0+Y29udGV4dCgpKTsKKyAgICAvLyBGSVhNRTogU2hvdWxk
IGFsbG93IGFyYml0cmFyeSBIVE1MRWxlbWVudCBzdWJjbGFzc3Nlcy4KKyAgICAvLyBUaGlzIEdl
dCgpIGlzIHNhZmUgc2luY2UgdGhlIHByb3RvdHlwZSBwcm9wZXJ0eSBvZiB0aGUgY29uc3RydWN0
b3IgaXMgYnVpbHQtaW4gYW5kIHJlYWQtb25seS4KKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IHNwYW5Db25zdHJ1Y3RvciA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QocGVyQ29udGV4
dERhdGEtPmNvbnN0cnVjdG9yRm9yVHlwZSgmVjhIVE1MU3BhbkVsZW1lbnQ6OmluZm8pKTsKKyAg
ICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHNwYW5Qcm90b3R5cGUgPSB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+OjpDYXN0KHNwYW5Db25zdHJ1Y3Rvci0+R2V0KHY4U3RyaW5nKCJwcm90b3R5cGUiLCBz
dGF0ZS0+Y29udGV4dCgpLT5HZXRJc29sYXRlKCkpKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBwYXJhZ3JhcGhDb25zdHJ1Y3RvciA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qo
cGVyQ29udGV4dERhdGEtPmNvbnN0cnVjdG9yRm9yVHlwZSgmVjhIVE1MUGFyYWdyYXBoRWxlbWVu
dDo6aW5mbykpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gcGFyYWdyYXBoUHJvdG90eXBl
ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChwYXJhZ3JhcGhDb25zdHJ1Y3Rvci0+R2V0
KHY4U3RyaW5nKCJwcm90b3R5cGUiLCBzdGF0ZS0+Y29udGV4dCgpLT5HZXRJc29sYXRlKCkpKSk7
CisgICAgaWYgKCFoYXNQcm90b3R5cGVJbkNoYWluKHNwYW5Qcm90b3R5cGUsIHByb3RvdHlwZU9i
amVjdCkgJiYgIWhhc1Byb3RvdHlwZUluQ2hhaW4ocGFyYWdyYXBoUHJvdG90eXBlLCBwcm90b3R5
cGVPYmplY3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgQ3VzdG9tRWxlbWVudEhlbHBlcnM6OmlzRmVhdHVyZUFsbG93ZWQoU2NyaXB0U3RhdGUq
IHN0YXRlKQoreworICAgIHJldHVybiBpc0ZlYXR1cmVBbGxvd2VkKHN0YXRlLT5jb250ZXh0KCkp
OworfQorCitib29sIEN1c3RvbUVsZW1lbnRIZWxwZXJzOjppc0ZlYXR1cmVBbGxvd2VkKHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQpCit7CisgICAgcmV0dXJuICFET01XcmFwcGVyV29y
bGQ6Omlzb2xhdGVkKGNvbnRleHQpOworfQorCisKKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0VM
RU1FTlRTKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9DdXN0b21FbGVtZW50SGVscGVycy5oIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvQ3VzdG9tRWxlbWVudEhlbHBlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZDU3ODUzMTQ5
OGZiYTMyODQ1YmQ5Mzk5NjY2NDAzN2FlZGI0YjdjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvQ3VzdG9tRWxlbWVudEhlbHBlcnMuaApAQCAtMCwwICsxLDU3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBDdXN0b21FbGVtZW50SGVscGVyc19oCisjZGVmaW5lIEN1c3RvbUVsZW1lbnRI
ZWxwZXJzX2gKKworI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJTY3JpcHRW
YWx1ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1F
TlRTKQorCitjbGFzcyBDdXN0b21FbGVtZW50Q29uc3RydWN0b3I7CitjbGFzcyBTY3JpcHRTdGF0
ZTsKKworY2xhc3MgQ3VzdG9tRWxlbWVudEhlbHBlcnMgeworcHVibGljOgorICAgIHN0YXRpYyB2
b2lkIGluaXRpYWxpemVDb25zdHJ1Y3RvcldyYXBwZXIoQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9y
KiwgY29uc3QgU2NyaXB0VmFsdWUmIHByb3RvdHlwZSwgU2NyaXB0U3RhdGUqKTsKKyAgICBzdGF0
aWMgYm9vbCBpc1ZhbGlkUHJvdG90eXBlUGFyYW1ldGVyKGNvbnN0IFNjcmlwdFZhbHVlJiwgU2Ny
aXB0U3RhdGUqKTsKKyAgICBzdGF0aWMgYm9vbCBpc0ZlYXR1cmVBbGxvd2VkKFNjcmlwdFN0YXRl
Kik7CisKKyAgICBzdGF0aWMgYm9vbCBpc0ZlYXR1cmVBbGxvd2VkKHY4OjpIYW5kbGU8djg6OkNv
bnRleHQ+KTsKK307CisKKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDdXN0b21FbGVtZW50SGVscGVyc19oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNDUyZDliYjFkZDRhZjc3NTdhYzU0YjM2NjVhY2JjNGFlOGQzMTRjMQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9u
LmNwcApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlY4QWRh
cHRvckZ1bmN0aW9uLmgiCisKKyNpbmNsdWRlICJWOFBlcklzb2xhdGVEYXRhLmgiCisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitXcmFwcGVyVHlwZUluZm8gVjhBZGFwdG9yRnVuY3Rpb246OmluZm8g
PSB7IFY4QWRhcHRvckZ1bmN0aW9uOjpnZXRUZW1wbGF0ZSwgMCwgMCwgMCwgMCwgMCwgMCwgV3Jh
cHBlclR5cGVPYmplY3RQcm90b3R5cGUgfTsKKwordjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IFY4QWRhcHRvckZ1bmN0aW9uOjpnZXRUZW1wbGF0ZSh2ODo6SXNvbGF0ZSogaXNv
bGF0ZSkKK3sKKyAgICBpZiAoIWlzb2xhdGUpCisgICAgICAgIGlzb2xhdGUgPSB2ODo6SXNvbGF0
ZTo6R2V0Q3VycmVudCgpOworICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xh
dGVEYXRhOjpmcm9tKGlzb2xhdGUpOworICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFw
OjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwor
ICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKKyAgICAgICAg
cmV0dXJuIHJlc3VsdC0+dmFsdWU7CisgICAgLy8gVGhlIGxpZmV0aW1lIGlzIG9mIG5ld1RlbXBs
YXRlIGlzIGRlbGVnYXRlZCB0byB0aGUgVGVtcGxhdGVNYXAgdGh1cyB0aGlzIHdvbid0IGJlIGxl
YWtlZC4KKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gbmV3VGVtcGxh
dGUgPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT46Ok5ldyh2ODo6RnVuY3Rp
b25UZW1wbGF0ZTo6TmV3KCkpOworICAgIGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuYWRkKCZpbmZv
LCBjb25maWd1cmVUZW1wbGF0ZShuZXdUZW1wbGF0ZSkpOworICAgIHJldHVybiBuZXdUZW1wbGF0
ZTsKK30KKwordjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4QWRhcHRvckZ1
bmN0aW9uOjpjb25maWd1cmVUZW1wbGF0ZSh2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1w
bGF0ZT4gZnVuY3Rpb25UZW1wbGF0ZSkKK3sKKyAgICBmdW5jdGlvblRlbXBsYXRlLT5TZXRDYWxs
SGFuZGxlcigmVjhBZGFwdG9yRnVuY3Rpb246Omludm9jYXRpb25DYWxsYmFjayk7CisgICAgcmV0
dXJuIGZ1bmN0aW9uVGVtcGxhdGU7Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEFkYXB0
b3JGdW5jdGlvbjo6aW52b2NhdGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3Mp
Cit7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVkID0gdjg6OkhhbmRsZTx2ODo6
T2JqZWN0Pjo6Q2FzdChhcmdzLkNhbGxlZSgpLT5HZXRIaWRkZW5WYWx1ZShWOEhpZGRlblByb3Bl
cnR5TmFtZTo6YWRhcHRvckZ1bmN0aW9uUGVlcigpKSk7CisgICAgLy8gRklYTUU6IFRoaXMgY2Fu
IGJlIGZhc3RlciBpZiB3ZSBjYW4gYWNjZXNzIHVuZGVybHlpbmcgbmF0aXZlIGNhbGxiYWNrIGRp
cmVjdGx5LgorICAgIC8vIFdlIHdvbid0IG5lZWQgdGhpcyBvbmNlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgxMzggaXMgYWRkcmVzc2VkLgorICAgIFZlY3Rvcjx2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiBhcmdBcnJheShhcmdzLkxlbmd0aCgpKTsKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGFyZ3MuTGVuZ3RoKCk7ICsraSkKKyAgICAgICAgYXJnQXJyYXkuYXBw
ZW5kKGFyZ3NbaV0pOworICAgIGlmIChhcmdzLklzQ29uc3RydWN0Q2FsbCgpKQorICAgICAgICBy
ZXR1cm4gd3JhcHBlZC0+Q2FsbEFzQ29uc3RydWN0b3IoYXJnQXJyYXkuc2l6ZSgpLCBhcmdBcnJh
eS5kYXRhKCkpOworICAgIHJldHVybiB3cmFwcGVkLT5DYWxsQXNGdW5jdGlvbihhcmdzLlRoaXMo
KSwgYXJnQXJyYXkuc2l6ZSgpLCBhcmdBcnJheS5kYXRhKCkpOworfQorCit2ODo6SGFuZGxlPHY4
OjpGdW5jdGlvbj4gVjhBZGFwdG9yRnVuY3Rpb246OndyYXAodjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBvYmplY3QsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUp
Cit7CisgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IGFkYXB0b3IgPSB2ODo6SGFuZGxlPHY4
OjpGdW5jdGlvbj46OkNhc3QoZ2V0VGVtcGxhdGUoaXNvbGF0ZSktPkdldEZ1bmN0aW9uKCkpOwor
ICAgIGFkYXB0b3ItPlNldE5hbWUodjhTdHJpbmcobmFtZS5zdHJpbmcoKSwgaXNvbGF0ZSkpOwor
ICAgIGFkYXB0b3ItPlNldEhpZGRlblZhbHVlKFY4SGlkZGVuUHJvcGVydHlOYW1lOjphZGFwdG9y
RnVuY3Rpb25QZWVyKCksIG9iamVjdCk7CisgICAgb2JqZWN0LT5TZXRIaWRkZW5WYWx1ZShWOEhp
ZGRlblByb3BlcnR5TmFtZTo6YWRhcHRvckZ1bmN0aW9uUGVlcigpLCBhZGFwdG9yKTsKKyAgICBy
ZXR1cm4gYWRhcHRvcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKENVU1RPTV9FTEVNRU5UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OEFkYXB0b3JGdW5jdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUzZDZiYjUxZjQ0MGE0Yzc3MjRhYmNlM2Rl
OTMwNjhkYWU4YzNhNTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOEFkYXB0b3JGdW5jdGlvbi5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFY4QWRhcHRv
ckZ1bmN0aW9uX2gKKyNkZWZpbmUgVjhBZGFwdG9yRnVuY3Rpb25faAorCisjaW5jbHVkZSAiVjhC
aW5kaW5nLmgiCisjaW5jbHVkZSAiVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaCIKKyNpbmNsdWRlICJX
cmFwcGVyVHlwZUluZm8uaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCisjaWYgRU5B
QkxFKENVU1RPTV9FTEVNRU5UUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLworLy8gRklY
TUUoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODEzOCk6CisvLyBW
OEFkYXB0b3JGdW5jdGlvbiBjbGFzcyBhbmQgVjhXcmFwQXNGdW5jdGlvbiBJREwgYXR0cmlidXRl
IGFyZSBuZWVkZWQgZm9yIHR3byByZWFzb25zOgorLy8gLSAxKSBWOCBkb2Vzbid0IGFsbG93IGV4
cGFuZGluZyB0aGUgaW50ZXJuYWwgZmllbGQgb2YgZnVuY3Rpb24gb2JqZWN0cy4gaHR0cHM6Ly9j
b2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTgzNworLy8gICAgICBXZWJLaXQg
bmVlZCBpdCB0byBhc3NvY2lhdGUgZWFjaCB3cmFwcGVyIHRvIGl0cyBiYWNraW5nIEMrKyBvYmpl
Y3QuIFdlIHN0b3JlIGl0IGluIGEgaGlkZGVuIHByb3BlcnR5IG9mIHRoZSB3cmFwcGVkIG9iamVj
dC4KKy8vIC0gMikgQmluZGluZyBjb2RlYmFzZSBhc3N1bWVzIGV2ZXJ5IHdyYXBwZXIgb2JqZWN0
IGlzIGNyZWF0ZWQgdGhyb3VnaCBPYmplY3RUZW1wbGF0ZTo6TmV3SW5zdGFuY2UoKSwgbm90IEZ1
bmN0aW9uVGVtcGxhdGU6OkdldEZ1bmN0aW9uKCkuCisvLyBPbmNlIDEpIGlzIGFkZHJlc3NzZWQs
IHdlIGNvdWxkIGF0dGFjayAyKSB3aXRoIGl0LiAKKy8vCitjbGFzcyBWOEFkYXB0b3JGdW5jdGlv
biB7CitwdWJsaWM6CisgICAgc3RhdGljIFdyYXBwZXJUeXBlSW5mbyBpbmZvOworICAgIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHVud3JhcCh2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4p
OworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gd3JhcCh2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIHY4OjpJc29sYXRlKik7CisgICAg
c3RhdGljIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBnZXQodjg6OkhhbmRsZTx2ODo6T2JqZWN0
Pik7CisKKyAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGdl
dFRlbXBsYXRlKHY4OjpJc29sYXRlKiA9IDApOworICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gY29uZmlndXJlVGVtcGxhdGUodjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+KTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGlu
dm9jYXRpb25DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJik7Cit9OworCitpbmxpbmUgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBWOEFkYXB0b3JGdW5jdGlvbjo6dW53cmFwKHY4OjpIYW5kbGU8
djg6OkZ1bmN0aW9uPiBmdW5jdGlvbikKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3Jh
cHBlZCA9IGZ1bmN0aW9uLT5HZXRIaWRkZW5WYWx1ZShWOEhpZGRlblByb3BlcnR5TmFtZTo6YWRh
cHRvckZ1bmN0aW9uUGVlcigpKTsKKyAgICBBU1NFUlQoIXdyYXBwZWQuSXNFbXB0eSgpKTsKKyAg
ICBBU1NFUlQod3JhcHBlZC0+SXNPYmplY3QoKSk7CisgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD46OkNhc3Qod3JhcHBlZCk7Cit9CisKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpGdW5j
dGlvbj4gVjhBZGFwdG9yRnVuY3Rpb246OmdldCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVj
dCkKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYWRhcHRvckZ1bmN0aW9uID0gb2JqZWN0
LT5HZXRIaWRkZW5WYWx1ZShWOEhpZGRlblByb3BlcnR5TmFtZTo6YWRhcHRvckZ1bmN0aW9uUGVl
cigpKTsKKyAgICBBU1NFUlQoIWFkYXB0b3JGdW5jdGlvbi5Jc0VtcHR5KCkpOworICAgIEFTU0VS
VChhZGFwdG9yRnVuY3Rpb24tPklzRnVuY3Rpb24oKSk7CisgICAgcmV0dXJuIHY4OjpIYW5kbGU8
djg6OkZ1bmN0aW9uPjo6Q2FzdChhZGFwdG9yRnVuY3Rpb24pOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorI2VuZGlmIC8v
IFY4QWRhcHRvckZ1bmN0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4RE9NV3JhcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdy
YXBwZXIuY3BwCmluZGV4IDM0Mjc3OGFjZjc5NDZhYTBkY2I0Yzc4OWFiMGRiNzAwOWIwNGM4YjMu
LjRkOGMyMjZmM2UyNzJmMGUzNTk2MjFlOGQ0MDY4YzMxOTRiNTNmYjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgogCisjaW5jbHVkZSAi
VjhBZGFwdG9yRnVuY3Rpb24uaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJW
OERPTVdpbmRvdy5oIgogI2luY2x1ZGUgIlY4SFRNTENvbGxlY3Rpb24uaCIKQEAgLTEzNyw0ICsx
MzgsMjUgQEAgYm9vbCBWOERPTVdyYXBwZXI6OmlzV3JhcHBlck9mVHlwZSh2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdmFsdWUsIFdyYXBwZXJUeXBlSW5mbyoKICAgICByZXR1cm4gdHlwZUluZm8gPT0g
dHlwZTsKIH0KIAorI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKK3Y4OjpIYW5kbGU8djg6
OkZ1bmN0aW9uPiBWOERPTVdyYXBwZXI6OnRvRnVuY3Rpb24odjg6OkhhbmRsZTx2ODo6VmFsdWU+
IG9iamVjdCkKK3sKKyAgICByZXR1cm4gVjhBZGFwdG9yRnVuY3Rpb246OmdldCh2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+OjpDYXN0KG9iamVjdCkpOworfQorCit2ODo6SGFuZGxlPHY4OjpGdW5jdGlv
bj4gVjhET01XcmFwcGVyOjp0b0Z1bmN0aW9uKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0
LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIHY4OjpJc29sYXRlKiBpc29sYXRlKQoreworICAg
IHJldHVybiBWOEFkYXB0b3JGdW5jdGlvbjo6d3JhcChvYmplY3QsIG5hbWUsIGlzb2xhdGUpOwor
fQorCit2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4RE9NV3JhcHBlcjo6ZnJvbUZ1bmN0aW9uKHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KQoreworICAgIGlmICghb2JqZWN0LT5Jc0Z1bmN0
aW9uKCkpCisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgcmV0dXJuIFY4QWRhcHRvckZ1bmN0
aW9uOjp1bndyYXAodjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+OjpDYXN0KG9iamVjdCkpOworfQor
CisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKwogfSAgLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBl
ci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKaW5kZXggMzlk
Y2U0N2YzZjc1NzI4ZGU3ZGIyOTc2Zjg3NGNiZTdhYjEyY2FhNC4uMTg0NDFhOWUxMmZlYzJkZWU5
ODkyNDljYTM4NDFlYzUzNmFkYTEwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhET01XcmFwcGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhE
T01XcmFwcGVyLmgKQEAgLTYyLDYgKzYyLDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
ICAgICBzdGF0aWMgYm9vbCBpc0RPTVdyYXBwZXIodjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKICAg
ICAgICAgc3RhdGljIGJvb2wgaXNXcmFwcGVyT2ZUeXBlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiwg
V3JhcHBlclR5cGVJbmZvKik7CisKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorICAgICAg
ICAvLyBVc2VkIGZvciBWOFdyYXBBc0Z1bmN0aW9uLCB3aGljaCBpcyB1c2VkIG9ubHkgYnkgQ1VT
VE9NX0VMRU1FTlRTCisgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gdG9G
dW5jdGlvbih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOworICAgICAgICBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6RnVuY3Rpb24+IHRvRnVuY3Rpb24odjg6OkhhbmRsZTx2ODo6T2JqZWN0PiwgY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lLCB2ODo6SXNvbGF0ZSopOworICAgICAgICBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBmcm9tRnVuY3Rpb24odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pik7Cisj
ZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKICAgICB9OwogCiAgICAgaW5saW5lIHZv
aWQgVjhET01XcmFwcGVyOjpzZXROYXRpdmVJbmZvKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3Jh
cHBlciwgV3JhcHBlclR5cGVJbmZvKiB0eXBlLCB2b2lkKiBvYmplY3QpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SFRNTEN1c3RvbUVsZW1lbnQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjlmODUzNjY0NDA1NmMyMDI3YWY1ODcyZGE4MjAwMTQ5ZmE3NDE3MTgKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50LmNwcApA
QCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlY4SFRNTEN1c3Rv
bUVsZW1lbnQuaCIKKworI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRIZWxwZXJzLmgiCisjaW5jbHVk
ZSAiQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNp
bmNsdWRlICJWOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIlY4SFRNTFNw
YW5FbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIEVOQUJMRShDVVNUT01f
RUxFTUVOVFMpCisKKy8vIEZJWE1FOiBFYWNoIGN1c3RvbSBlbGVtZW50cyBzaG91bGQgaGF2ZSBp
dHMgb3duIEdldFRlbXBsYXRlIG1ldGhvZCBzbyB0aGF0IGl0IGNhbiBiZSBkZXJpdmVkIGZyb20g
ZGlmZmVyZW50IHN1cGVyIGVsZW1lbnQuCitXcmFwcGVyVHlwZUluZm8gVjhIVE1MQ3VzdG9tRWxl
bWVudDo6aW5mbyA9IHsgJlY4SFRNTFNwYW5FbGVtZW50OjpHZXRUZW1wbGF0ZSwgVjhIVE1MRWxl
bWVudDo6ZGVyZWZPYmplY3QsIDAsIDAsIDAsIDAsICZWOEhUTUxTcGFuRWxlbWVudDo6aW5mbywg
V3JhcHBlclR5cGVPYmplY3RQcm90b3R5cGUgfTsKKwordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBW
OEhUTUxDdXN0b21FbGVtZW50OjpjcmVhdGVXcmFwcGVyKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+
IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0
ZSogaXNvbGF0ZSkKK3sKKyAgICBBU1NFUlQoaW1wbCk7CisKKyAgICBDdXN0b21FbGVtZW50Q29u
c3RydWN0b3IqIGNvbnN0cnVjdG9yID0gQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Ojpjb25zdHJ1Y3Rv
ck9mKGltcGwuZ2V0KCkpOworICAgIGlmICghY29uc3RydWN0b3IpCisgICAgICAgIHJldHVybiB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KFdlYkNvcmU6OnRvVjgodG9IVE1MVW5rbm93bkVs
ZW1lbnQoaW1wbC5nZXQoKSksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSkpOworCisgICAgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhET01XcmFwcGVyOjpjcmVhdGVXcmFwcGVy
KGNyZWF0aW9uQ29udGV4dCwgJmluZm8sIGltcGwuZ2V0KCksIGlzb2xhdGUpOworICAgIGlmICh3
cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisKKyAgICAvLyBUaGUg
Y29uc3RydWN0b3IgYW5kIHJlZ2lzdGVyZWQgbGlmZWN5Y2xlIGNhbGxiYWNrcyBzaG91bGQgYmUg
dmlzaWJsZSBvbmx5IGZyb20gbWFpbiB3b3JsZC4KKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGRu
J3QgYmUgbmVlZGVkIG9uY2UgZWFjaCBjdXN0b20gZWxlbWVudCBoYXMgaXRzIG93biBGdW5jdGlv
blRlbXBsYXRlCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwODEzOAorICAgIGlmIChDdXN0b21FbGVtZW50SGVscGVyczo6aXNGZWF0dXJlQWxsb3dlZChj
cmVhdGlvbkNvbnRleHQtPkNyZWF0aW9uQ29udGV4dCgpKSkgeworICAgICAgICB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGNvbnN0cnVjdG9yV2FwcGVyID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6
Q2FzdChXZWJDb3JlOjp0b1Y4KGNvbnN0cnVjdG9yLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUp
KTsKKyAgICAgICAgd3JhcHBlci0+U2V0UHJvdG90eXBlKGNvbnN0cnVjdG9yV2FwcGVyLT5HZXQo
djhTdHJpbmcoInByb3RvdHlwZSIsIGlzb2xhdGUpKSk7CisgICAgfQorCisgICAgVjhET01XcmFw
cGVyOjphc3NvY2lhdGVPYmplY3RXaXRoV3JhcHBlcihpbXBsLCAmaW5mbywgd3JhcHBlciwgaXNv
bGF0ZSwgV3JhcHBlckNvbmZpZ3VyYXRpb246OkRlcGVuZGVudCk7CisKKyAgICByZXR1cm4gd3Jh
cHBlcjsKK30KKworI2VuZGlmIC8vIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
SFRNTEN1c3RvbUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SFRNTEN1
c3RvbUVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YmZiZjM5ZmE3MGQzZjZmZjdkMjgwMjc2MmI0OWY0
MWVkMjY1MTJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhIVE1MQ3VzdG9tRWxlbWVudC5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFY4SFRNTEN1c3Rv
bUVsZW1lbnRfaAorI2RlZmluZSBWOEhUTUxDdXN0b21FbGVtZW50X2gKKworI2luY2x1ZGUgIlY4
QmluZGluZy5oIgorI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIlY4SFRNTEVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJWOEhUTUxVbmtub3duRWxlbWVudC5oIgorI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSFRNTEVsZW1l
bnQ7CisKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCitjbGFzcyBWOEhUTUxDdXN0b21F
bGVtZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgV3JhcHBlclR5cGVJbmZvIGluZm87CisgICAg
c3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gdG9WOChIVE1MRWxlbWVudCosIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pigp
LCB2ODo6SXNvbGF0ZSogPSAwKTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBj
cmVhdGVXcmFwcGVyKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+LCB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+LCB2ODo6SXNvbGF0ZSopOworfTsKKworaW5saW5lIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
VjhIVE1MQ3VzdG9tRWxlbWVudDo6dG9WOChIVE1MRWxlbWVudCogaW1wbCwgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQoreworICAg
IGlmIChVTkxJS0VMWSghaW1wbCkpCisgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+OjpDYXN0KHY4TnVsbFdpdGhDaGVjayhpc29sYXRlKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiB3cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyKGltcGwsIGlzb2xhdGUp
OworICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB3cmFwcGVyOwor
ICAgIHJldHVybiBWOEhUTUxDdXN0b21FbGVtZW50OjpjcmVhdGVXcmFwcGVyKGltcGwsIGNyZWF0
aW9uQ29udGV4dCwgaXNvbGF0ZSk7Cit9CisKKyNlbHNlIC8vIEVOQUJMRShDVVNUT01fRUxFTUVO
VFMpCisKK2NsYXNzIFY4SFRNTEN1c3RvbUVsZW1lbnQgeworcHVibGljOgorICAgIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoSFRNTEVsZW1lbnQqLCB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklz
b2xhdGUqID0gMCk7Cit9OworCitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBIVE1MQ3Vz
dG9tRWxlbWVudDo6dG9WOChIVE1MRWxlbWVudCogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQoreworICAgIHJldHVybiB0
b1Y4KHRvSFRNTFVua25vd25FbGVtZW50KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUp
OworfQorCisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVjhIVE1MQ3VzdG9tRWxlbWVudF9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaAppbmRleCBjYzZk
ZWI0M2NlMWQxYTEyMjgwN2E4MmRlOGU4ODFjYzkxYTFkMTRhLi42NzlmNmRjNDJlYWFlODg3OWUy
ZDgzMzJhNDQyOGI3YTRhYjlkNTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmgKQEAgLTQ1LDYgKzQ1LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIFYoc2NyaXB0U3RhdGUpIFwKICAgICBWKHNsZWVwRnVuY3Rpb24pIFwKICAg
ICBWKHN0YXRlKSBcCisgICAgVihhZGFwdG9yRnVuY3Rpb25QZWVyKSBcCiAgICAgVih0b1N0cmlu
Z1N0cmluZykgXAogICAgIFYodHlwZWRBcnJheUhpZGRlbkNvcHlNZXRob2QpCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUVsZW1lbnRDb25z
dHJ1Y3RvckN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhD
dXN0b21FbGVtZW50Q29uc3RydWN0b3JDdXN0b20uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM0Mzc0ZjY3Njg4
MGM5Mjg1NGYyODg5NDZhNjM5MTUxYTBiM2IyMzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21FbGVtZW50Q29uc3RydWN0b3JDdXN0
b20uY3BwCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKiAKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyogbWV0OgorKiAKKyogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorKiBkaXN0cmlidXRpb24uCisqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyog
CisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5o
IgorCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiVjhC
aW5kaW5nLmgiCisjaW5jbHVkZSAiVjhIVE1MQ3VzdG9tRWxlbWVudC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEN1c3RvbUVsZW1lbnRDb25zdHJ1
Y3Rvcjo6Y2FsbEFzRnVuY3Rpb25DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQor
eworICAgIGlmICghYXJncy5Jc0NvbnN0cnVjdENhbGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93
VHlwZUVycm9yKCJET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBm
dW5jdGlvbi4iLCBhcmdzLkdldElzb2xhdGUoKSk7CisgICAgaWYgKENvbnN0cnVjdG9yTW9kZTo6
Y3VycmVudCgpID09IENvbnN0cnVjdG9yTW9kZTo6V3JhcEV4aXN0aW5nT2JqZWN0KQorICAgICAg
ICByZXR1cm4gYXJncy5Ib2xkZXIoKTsKKworICAgIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvciog
aW1wbCA9IHRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIFJlZlB0cjxIVE1MRWxlbWVudD4g
ZWxlbWVudCA9IGltcGwtPmNyZWF0ZUVsZW1lbnQoKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAg
ICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOworICAgIHJldHVybiBWOEhUTUxDdXN0b21FbGVtZW50
Ojp0b1Y4KGVsZW1lbnQuZ2V0KCksIGFyZ3MuSG9sZGVyKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3Vz
dG9tRWxlbWVudENvbnN0cnVjdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMTIyMmMxODQ5YTNlMzdiMjQ2
ZjUwN2Y2M2E5MDMyYjIxMTk1MGE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaCIKKworI2lm
IEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50SGVscGVy
cy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NS
ZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiBDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6
OmNyZWF0ZShTY3JpcHRTdGF0ZSogc3RhdGUsIERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTY3JpcHRWYWx1
ZSYgcHJvdG90eXBlKQoreworICAgIFJlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IGNy
ZWF0ZWQgPSBhZG9wdFJlZihuZXcgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKGRvY3VtZW50LCB0
YWdOYW1lLCBuYW1lKSk7CisgICAgQ3VzdG9tRWxlbWVudEhlbHBlcnM6OmluaXRpYWxpemVDb25z
dHJ1Y3RvcldyYXBwZXIoY3JlYXRlZC5nZXQoKSwgcHJvdG90eXBlLCBzdGF0ZSk7CisgICAgcmV0
dXJuIGNyZWF0ZWQucmVsZWFzZSgpOworfQorCitDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6OkN1
c3RvbUVsZW1lbnRDb25zdHJ1Y3RvcihEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICA6IG1fZG9jdW1lbnQoZG9j
dW1lbnQpCisgICAgLCBtX3RhZ05hbWUodGFnTmFtZSkKKyAgICAsIG1fbmFtZShuYW1lKQorewor
fQorCitDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6On5DdXN0b21FbGVtZW50Q29uc3RydWN0b3Io
KQoreworfQorCit2b2lkIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6d2lsbERlc3Ryb3lEb2N1
bWVudCgpCit7CisgICAgbV9kb2N1bWVudCA9IDA7Cit9CisKK1Bhc3NSZWZQdHI8SFRNTEVsZW1l
bnQ+IEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlRWxlbWVudCgpIGNvbnN0Cit7Cisg
ICAgaWYgKCFtX2RvY3VtZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gSFRNTEVs
ZW1lbnQ6OmNyZWF0ZShtX3RhZ05hbWUsIG1fZG9jdW1lbnQpOworfQorCit9CisKKyNlbmRpZiAv
LyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVs
ZW1lbnRDb25zdHJ1Y3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRlYWM2OTEwOGIyZjZmM2M2ZTVjMWFjYTVl
Y2ExYjVjZmQ5Yjk1NjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3Vz
dG9tRWxlbWVudENvbnN0cnVjdG9yLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ3VzdG9tRWxl
bWVudENvbnN0cnVjdG9yX2gKKyNkZWZpbmUgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yX2gKKwor
I2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKKyNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgi
CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBI
VE1MRWxlbWVudDsKK2NsYXNzIFNjcmlwdFN0YXRlOworY2xhc3MgU2NyaXB0VmFsdWU7CisKK2Ns
YXNzIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciA6IHB1YmxpYyBSZWZDb3VudGVkPEN1c3RvbUVs
ZW1lbnRDb25zdHJ1Y3Rvcj4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEN1c3Rv
bUVsZW1lbnRDb25zdHJ1Y3Rvcj4gY3JlYXRlKFNjcmlwdFN0YXRlKiwgRG9jdW1lbnQqLCBjb25z
dCBRdWFsaWZpZWROYW1lJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU2NyaXB0VmFsdWUmKTsKKwor
ICAgIHZpcnR1YWwgfkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvcigpOworCisgICAgRG9jdW1lbnQq
IGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudDsgfQorICAgIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUoKSBjb25zdCB7IHJldHVybiBtX3RhZ05hbWU7IH0KKyAgICBjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKworICAgIFBh
c3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnQoKSBjb25zdDsKKyAgICB2b2lkIHdp
bGxEZXN0cm95RG9jdW1lbnQoKTsKKyAgICAKK3ByaXZhdGU6CisgICAgQ3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yKERvY3VtZW50KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IFN0cmluZyYp
OworCisgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CisgICAgUXVhbGlmaWVkTmFtZSBtX3RhZ05h
bWU7CisgICAgQXRvbWljU3RyaW5nIG1fbmFtZTsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJM
RShDVVNUT01fRUxFTUVOVFMpCisKKyNlbmRpZiAvLyBDdXN0b21FbGVtZW50Q29uc3RydWN0b3Jf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rv
ci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmlkbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40N2M1MzBmODdkZWFlNjdmYTVmZGExZTEzOWIwNWNiOThhMDczYjBkCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rv
ci5pZGwKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1sKKyAgICBDb25kaXRpb25hbD1D
VVNUT01fRUxFTUVOVFMsCisgICAgVjhFbmFibGVkQXRSdW50aW1lPWN1c3RvbURPTUVsZW1lbnRz
LAorICAgIFY4V3JhcEFzRnVuY3Rpb24sCisgICAgQ3VzdG9tQ2FsbAorXSBpbnRlcmZhY2UgQ3Vz
dG9tRWxlbWVudENvbnN0cnVjdG9yIHsKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21F
bGVtZW50UmVnaXN0cnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhlMjBiODQyYWRjY2I1NDkzMjYzOTQ1MGIz
MDIxYTRjOWU3OWUxODQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3Vz
dG9tRWxlbWVudFJlZ2lzdHJ5LmNwcApAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmli
dXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50UmVnaXN0cnkuaCIKKworI2luY2x1
ZGUgIkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRI
ZWxwZXJzLmgiCisjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgorI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CisjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNs
dWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUu
aD4KKworI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpDdXN0b21FbGVtZW50UmVnaXN0cnkoRG9jdW1lbnQq
IGRvY3VtZW50KQorICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKK3sKK30KKworQ3VzdG9tRWxl
bWVudFJlZ2lzdHJ5Ojp+Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5KCkKK3sKKyAgICBmb3IgKENvbnN0
cnVjdG9yTWFwOjppdGVyYXRvciBpID0gbV9jb25zdHJ1Y3RvcnMuYmVnaW4oKTsgaSAhPSBtX2Nv
bnN0cnVjdG9ycy5lbmQoKTsgKytpKQorICAgICAgICBpLT52YWx1ZS0+d2lsbERlc3Ryb3lEb2N1
bWVudCgpOworfQorCitDdXN0b21FbGVtZW50Q29uc3RydWN0b3IqIEN1c3RvbUVsZW1lbnRSZWdp
c3RyeTo6Y29uc3RydWN0b3JPZihIVE1MRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBDdXN0b21F
bGVtZW50UmVnaXN0cnkqIHNlbGYgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5yZWdpc3RyeSgpOwor
ICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHNlbGYtPmZpbmQo
ZWxlbWVudC0+dGFnUU5hbWUoKSk7Cit9CisKK2Jvb2wgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Ojpp
c1ZhbGlkTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCit7CisgICAgc2l6ZV90IGh5cGhl
blBvc2l0aW9uID0gbmFtZS5maW5kKCctJyk7CisgICAgaWYgKGh5cGhlblBvc2l0aW9uID09IG5v
dEZvdW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KFZlY3RvcjxBdG9taWNTdHJpbmc+LCByZXNlcnZlZE5hbWVzLCAoKSk7CisgICAgaWYgKHJlc2Vy
dmVkTmFtZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIHJlc2VydmVkTmFtZXMuYXBwZW5kKCJhbm5v
dGF0aW9uLXhtbCIpOworICAgICAgICByZXNlcnZlZE5hbWVzLmFwcGVuZCgiY29sb3ItcHJvZmls
ZSIpOworICAgICAgICByZXNlcnZlZE5hbWVzLmFwcGVuZCgiZm9udC1mYWNlIik7CisgICAgICAg
IHJlc2VydmVkTmFtZXMuYXBwZW5kKCJmb250LWZhY2Utc3JjIik7CisgICAgICAgIHJlc2VydmVk
TmFtZXMuYXBwZW5kKCJmb250LWZhY2UtdXJpIik7CisgICAgICAgIHJlc2VydmVkTmFtZXMuYXBw
ZW5kKCJmb250LWZhY2UtZm9ybWF0Iik7CisgICAgICAgIHJlc2VydmVkTmFtZXMuYXBwZW5kKCJm
b250LWZhY2UtbmFtZSIpOworICAgICAgICByZXNlcnZlZE5hbWVzLmFwcGVuZCgibWlzc2luZy1n
bHlwaCIpOworICAgIH0KKworICAgIGlmIChXVEY6Om5vdEZvdW5kICE9IHJlc2VydmVkTmFtZXMu
ZmluZChuYW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIERvY3VtZW50
Ojppc1ZhbGlkTmFtZShuYW1lLnN0cmluZygpKTsKK30KKworUGFzc1JlZlB0cjxDdXN0b21FbGVt
ZW50Q29uc3RydWN0b3I+IEN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6cmVnaXN0ZXJFbGVtZW50KFNj
cmlwdFN0YXRlKiBzdGF0ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBEaWN0aW9u
YXJ5JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIUN1c3RvbUVsZW1l
bnRIZWxwZXJzOjppc0ZlYXR1cmVBbGxvd2VkKHN0YXRlKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBRdWFsaWZpZWROYW1lIG5ld05hbWUobnVsbEF0b20sIG5hbWUubG93ZXIoKSwgSFRNTE5h
bWVzOjp4aHRtbE5hbWVzcGFjZVVSSSk7CisgICAgaWYgKCFpc1ZhbGlkTmFtZShuZXdOYW1lLmxv
Y2FsTmFtZSgpKSkgeworICAgICAgICBlYyA9IElOVkFMSURfQ0hBUkFDVEVSX0VSUjsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorICAgICAgICAKKyAgICBpZiAoZmluZChuZXdOYW1lKSkgewor
ICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisKKyAgICBTY3JpcHRWYWx1ZSBwcm90b3R5cGVWYWx1ZTsKKyAgICBpZiAoIW9wdGlvbnMuZ2V0
KCJwcm90b3R5cGUiLCBwcm90b3R5cGVWYWx1ZSkpIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxl
bWVudCB0aGUgZGVmYXVsdCB2YWx1ZSBoYW5kbGluZy4KKyAgICAgICAgLy8gQ3VycmVudGx5IGRl
ZmF1bHQgdmFsdWUgb2YgdGhlICJwcm90b3R5cGUiIHBhcmFtZXRlciwgd2hpY2gKKyAgICAgICAg
Ly8gaXMgSFRNTFNwYW5FbGVtZW50LnByb3RvdHlwZSwgaGFzIGFuIGFtYmlndWl0eSBhYm91dCBp
dHMKKyAgICAgICAgLy8gYmVoYXZpb3IuIFRoZSBzcGVjIHNob3VsZCBiZSBmaXhlZCBiZWZvcmUg
V2ViS2l0IGltcGxlbWVudHMKKyAgICAgICAgLy8gaXQuIGh0dHBzOi8vd3d3LnczLm9yZy9CdWdz
L1B1YmxpYy9zaG93X2J1Zy5jZ2k/aWQ9MjA4MDEKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRF
X0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKCFDdXN0b21FbGVtZW50
SGVscGVyczo6aXNWYWxpZFByb3RvdHlwZVBhcmFtZXRlcihwcm90b3R5cGVWYWx1ZSwgc3RhdGUp
KSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKworICAgIFJlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IGZyZXNoID0gQ3Vz
dG9tRWxlbWVudENvbnN0cnVjdG9yOjpjcmVhdGUoc3RhdGUsIG1fZG9jdW1lbnQsIG5ld05hbWUs
ICJIVE1MQ3VzdG9tRWxlbWVudCIsIHByb3RvdHlwZVZhbHVlKTsKKyAgICBtX2NvbnN0cnVjdG9y
cy5hZGQoZnJlc2gtPnRhZ05hbWUoKS5pbXBsKCksIGZyZXNoKTsKKyAgICByZXR1cm4gZnJlc2g7
Cit9CisKK0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciogQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Ojpm
aW5kKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0Cit7CisgICAgQ29uc3RydWN0b3JN
YXA6OmNvbnN0X2l0ZXJhdG9yIGZvdW5kID0gbV9jb25zdHJ1Y3RvcnMuZmluZChuYW1lLmltcGwo
KSk7CisgICAgcmV0dXJuIChmb3VuZCAhPSBtX2NvbnN0cnVjdG9ycy5lbmQoKSkgPyBmb3VuZC0+
dmFsdWUuZ2V0KCkgOiAwOworfQorCitQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBDdXN0b21FbGVt
ZW50UmVnaXN0cnk6OmNyZWF0ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29u
c3QKK3sKKyAgICBpZiAoQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKiBmb3VuZCA9IGZpbmQobmFt
ZSkpCisgICAgICAgIHJldHVybiBmb3VuZC0+Y3JlYXRlRWxlbWVudCgpOworICAgIHJldHVybiAw
OworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5oIGIvU291cmNlL1dl
YkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVmODUwY2Q3ZjMy
MmI1NzM0Yzg5ODFmOWQ1M2JmNDY3NjBmNzNiZWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmgKQEAgLTAsMCArMSw3OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5X2gKKyNkZWZpbmUgQ3VzdG9tRWxlbWVu
dFJlZ2lzdHJ5X2gKKworI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKKyNpbmNsdWRlICJF
eGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgorI2luY2x1ZGUgIlNj
cmlwdFZhbHVlLmgiCisjaW5jbHVkZSAiU3VwcGxlbWVudGFibGUuaCIKKyNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOworY2xhc3MgRGljdGlvbmFyeTsK
K2NsYXNzIERvY3VtZW50OworY2xhc3MgSFRNTEVsZW1lbnQ7CitjbGFzcyBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OworY2xhc3MgUXVhbGlmaWVkTmFtZTsKKworY2xhc3MgQ3VzdG9tRWxlbWVudFJl
Z2lzdHJ5IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDdXN0b21FbGVtZW50UmVnaXN0cnkp
OyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBDdXN0b21F
bGVtZW50UmVnaXN0cnkoRG9jdW1lbnQqKTsKKyAgICB+Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5KCk7
CisKKyAgICBQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gcmVnaXN0ZXJFbGVt
ZW50KFdlYkNvcmU6OlNjcmlwdFN0YXRlKiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25z
dCBEaWN0aW9uYXJ5JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJik7CisgICAgQ3VzdG9tRWxlbWVu
dENvbnN0cnVjdG9yKiBmaW5kKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKKyAgICBQYXNz
UmVmUHRyPEhUTUxFbGVtZW50PiBjcmVhdGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmKSBj
b25zdDsKKworICAgIHN0YXRpYyBDdXN0b21FbGVtZW50Q29uc3RydWN0b3IqIGNvbnN0cnVjdG9y
T2YoSFRNTEVsZW1lbnQqKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkTmFt
ZShjb25zdCBBdG9taWNTdHJpbmcmKTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxRdWFsaWZpZWRO
YW1lOjpRdWFsaWZpZWROYW1lSW1wbCosIFJlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+
ID5Db25zdHJ1Y3Rvck1hcDsKKworICAgIERvY3VtZW50KiBtX2RvY3VtZW50OworICAgIENvbnN0
cnVjdG9yTWFwIG1fY29uc3RydWN0b3JzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAKaW5kZXggNjIxNDc1NmJjMTQzODkzMTY5OTY0ZGVhY2ZmNzJjYWZhNzIwMzZiMi4u
ZjQ3ODMwY2Y3ZjE2YWUwOWFjZGZhYzc1MjFkZWE1YmUxNzM4MDQ4OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCkBAIC00NiwxMSArNDYsMTQgQEAKICNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQ
b2xpY3kuaCIKICNpbmNsdWRlICJDb250ZXh0RmVhdHVyZXMuaCIKICNpbmNsdWRlICJDb29raWVK
YXIuaCIKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJD
dXN0b21FbGVtZW50UmVnaXN0cnkuaCIKICNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlvbi5oIgog
I2luY2x1ZGUgIkRPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJET01TZWxlY3Rp
b24uaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJEYXRlQ29tcG9uZW50cy5o
IgorI2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJEb2N1bWVudEV2ZW50UXVldWUu
aCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2Fk
ZXIuaCIKQEAgLTY3NSw2ICs2NzgsMTAgQEAgdm9pZCBEb2N1bWVudDo6cmVtb3ZlZExhc3RSZWYo
KQogICAgICAgICBtX2Z1bGxTY3JlZW5FbGVtZW50U3RhY2suY2xlYXIoKTsKICNlbmRpZgogCisj
aWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKyAgICAgICAgbV9yZWdpc3RyeS5jbGVhcigpOwor
I2VuZGlmCisKICAgICAgICAgZGV0YWNoUGFyc2VyKCk7CiAKICAgICAgICAgLy8gcmVtb3ZlRGV0
YWNoZWRDaGlsZHJlbigpIGRvZXNuJ3QgYWx3YXlzIHVucmVnaXN0ZXIgSURzLApAQCAtODQzLDYg
Kzg1MCwyMCBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+IERvY3VtZW50OjpjcmVhdGVFbGVtZW50KGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSwgRXhjZXB0aW9uQwogICAgIHJldHVybiBjcmVhdGVFbGVt
ZW50KFF1YWxpZmllZE5hbWUobnVsbEF0b20sIG5hbWUsIG51bGxBdG9tKSwgZmFsc2UpOwogfQog
CisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKK1Bhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yPiBEb2N1bWVudDo6cmVnaXN0ZXJFbGVtZW50KFdlYkNvcmU6OlNjcmlwdFN0YXRl
KiBzdGF0ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICByZXR1cm4gcmVnaXN0ZXJFbGVtZW50KHN0YXRlLCBuYW1lLCBEaWN0aW9uYXJ5KCksIGVj
KTsKK30KKworUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IERvY3VtZW50Ojpy
ZWdpc3RlckVsZW1lbnQoV2ViQ29yZTo6U2NyaXB0U3RhdGUqIHN0YXRlLCBjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUsIGNvbnN0IERpY3Rpb25hcnkmIG9wdGlvbnMsIEV4Y2VwdGlvbkNvZGUmIGVj
KQoreworICAgIGlmICghbV9yZWdpc3RyeSkKKyAgICAgICAgbV9yZWdpc3RyeSA9IGFkb3B0UHRy
KG5ldyBDdXN0b21FbGVtZW50UmVnaXN0cnkodGhpcykpOworICAgIHJldHVybiBtX3JlZ2lzdHJ5
LT5yZWdpc3RlckVsZW1lbnQoc3RhdGUsIG5hbWUsIG9wdGlvbnMsIGVjKTsKK30KKyNlbmRpZiAv
LyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCiBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IERvY3VtZW50OjpjcmVhdGVEb2N1bWVudEZyYWdtZW50KCkKIHsKICAgICByZXR1cm4gRG9jdW1l
bnRGcmFnbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCA3
YmQ5ZjE5MGM0NzVhNTczMmUzMzIzNTMxZTdlYjU3NDQxNjJiMTZjLi40MDhkODkyOTBiNTk3YzIy
MTg3M2ViMzM3MTZkY2M1YzNhMjg4OWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtNzAsNiAr
NzAsOCBAQCBjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0OwogY2xhc3MgQ2hhcmFjdGVyRGF0
YTsKIGNsYXNzIENvbW1lbnQ7CiBjbGFzcyBDb250ZXh0RmVhdHVyZXM7CitjbGFzcyBDdXN0b21F
bGVtZW50Q29uc3RydWN0b3I7CitjbGFzcyBDdXN0b21FbGVtZW50UmVnaXN0cnk7CiBjbGFzcyBE
T01JbXBsZW1lbnRhdGlvbjsKIGNsYXNzIERPTU5hbWVkRmxvd0NvbGxlY3Rpb247CiBjbGFzcyBE
T01TZWxlY3Rpb247CkBAIC0xMTY1LDYgKzExNjcsMTMgQEAgcHVibGljOgogICAgIFRleHRBdXRv
c2l6ZXIqIHRleHRBdXRvc2l6ZXIoKSB7IHJldHVybiBtX3RleHRBdXRvc2l6ZXIuZ2V0KCk7IH0K
ICNlbmRpZgogCisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKyAgICBQYXNzUmVmUHRyPEN1
c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gcmVnaXN0ZXJFbGVtZW50KFdlYkNvcmU6OlNjcmlwdFN0
YXRlKiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFz
c1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IHJlZ2lzdGVyRWxlbWVudChXZWJDb3Jl
OjpTY3JpcHRTdGF0ZSosIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgRGljdGlvbmFy
eSYgb3B0aW9ucywgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gY3Jl
YXRlQ3VzdG9tRWxlbWVudChjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpOworICAgIEN1c3Rv
bUVsZW1lbnRSZWdpc3RyeSogcmVnaXN0cnkoKSBjb25zdCB7IHJldHVybiBtX3JlZ2lzdHJ5Lmdl
dCgpOyB9CisjZW5kaWYKKwogICAgIHZvaWQgYWRqdXN0RmxvYXRRdWFkc0ZvclNjcm9sbEFuZEFi
c29sdXRlWm9vbUFuZEZyYW1lU2NhbGUoVmVjdG9yPEZsb2F0UXVhZD4mLCBSZW5kZXJPYmplY3Qq
KTsKICAgICB2b2lkIGFkanVzdEZsb2F0UmVjdEZvclNjcm9sbEFuZEFic29sdXRlWm9vbUFuZEZy
YW1lU2NhbGUoRmxvYXRSZWN0JiwgUmVuZGVyT2JqZWN0Kik7CiAKQEAgLTE1MzgsNiArMTU0Nywx
MCBAQCBwcml2YXRlOgogICAgIE93blB0cjxUZXh0QXV0b3NpemVyPiBtX3RleHRBdXRvc2l6ZXI7
CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisgICAgT3duUHRyPEN1c3Rv
bUVsZW1lbnRSZWdpc3RyeT4gbV9yZWdpc3RyeTsKKyNlbmRpZgorCiAgICAgYm9vbCBtX3NjaGVk
dWxlZFRhc2tzQXJlU3VzcGVuZGVkOwogICAgIAogICAgIGJvb2wgbV92aXN1YWxVcGRhdGVzQWxs
b3dlZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsIGIvU291
cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKaW5kZXggMjAxZjQ1ZjQ0ZTg2ODg3MDk0NzQz
M2UzMDVkNjcxNzU4NzhjZTgzYS4uMzViYTkxNGQ0MjY5NjRlYTUyNjgxMGIwZDQ4ZjE4NjQwMWIy
ZGExMSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKQEAgLTExNzIsOCArMTE3Miw4IEBAIEVO
RAogOwogICAgIH0gZWxzaWYgKCR3cmFwcGVyRmFjdG9yeVR5cGUgZXEgIlY4IikgewogICAgICAg
ICBwcmludCBGIDw8RU5ECisjaW5jbHVkZSAiVjhIVE1MQ3VzdG9tRWxlbWVudC5oIgogI2luY2x1
ZGUgIlY4JHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnQuaCIKLSAgICAgICAgCiAjaW5jbHVk
ZSA8djguaD4KIEVORAogOwpAQCAtMTI3NCw2ICsxMjc0LDExIEBAIEVORAogICAgIHJldHVybiBW
OFNWR0VsZW1lbnQ6OmNyZWF0ZVdyYXBwZXIoZWxlbWVudCwgY3JlYXRpb25Db250ZXh0LCBpc29s
YXRlKTsKIEVORAogOworICAgICAgICB9IGVsc2lmICgkcGFyYW1ldGVyc3tuYW1lc3BhY2V9IGVx
ICJIVE1MIikgeworICAgICAgICAgICAgcHJpbnQgRiA8PEVORAorICAgIHJldHVybiBWOEhUTUxD
dXN0b21FbGVtZW50Ojp0b1Y4KGVsZW1lbnQsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CitF
TkQKKzsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHByaW50IEYgPDxFTkQKICAgICBy
ZXR1cm4gd3JhcCh0byRwYXJhbWV0ZXJze2ZhbGxiYWNrSW50ZXJmYWNlTmFtZX0oZWxlbWVudCks
IGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxEb2N1bWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5p
ZGwKaW5kZXggMjVmMGE1YzM5MDM1MTE0YjVkZjE5MTdjMjk1MjkxNjBhOWI0N2M5OC4uN2MyOWZj
YjVkYzE4OTJhYWFjNzJmNTI0MDM2M2VlMmMyNGQyM2Q5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TERvY3VtZW50LmlkbApAQCAtNTMsNiArNTMsMTEgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUg
RWxlbWVudCBhY3RpdmVFbGVtZW50OwogICAgIGJvb2xlYW4gaGFzRm9jdXMoKTsKIAorI2lmIGRl
ZmluZWQoRU5BQkxFX0NVU1RPTV9FTEVNRU5UUykgJiYgRU5BQkxFX0NVU1RPTV9FTEVNRU5UUwor
ICAgIFtWOEVuYWJsZWRBdFJ1bnRpbWU9Y3VzdG9tRE9NRWxlbWVudHMsIENvbmRpdGlvbmFsPUNV
U1RPTV9FTEVNRU5UUywgSW1wbGVtZW50ZWRBcz1yZWdpc3RlckVsZW1lbnQsIENhbGxXaXRoPVNj
cmlwdFN0YXRlXQorICAgIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciB3ZWJraXRSZWdpc3Rlcihp
biBET01TdHJpbmcgbmFtZSwgaW4gW09wdGlvbmFsXSBEaWN0aW9uYXJ5IG9wdGlvbnMpIHJhaXNl
cyhET01FeGNlcHRpb24pOworI2VuZGlmCisKICAgICAvLyBEZXByZWNhdGVkIGF0dHJpYnV0ZXMK
ICAgICAgICAgICAgICBbVHJlYXROdWxsQXM9TnVsbFN0cmluZ10gYXR0cmlidXRlIERPTVN0cmlu
ZyBiZ0NvbG9yOwogICAgICAgICAgICAgIFtUcmVhdE51bGxBcz1OdWxsU3RyaW5nXSBhdHRyaWJ1
dGUgRE9NU3RyaW5nIGZnQ29sb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L2ZlYXR1cmVzLmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKaW5k
ZXggMWJjZmJlNjhkNzRlZGUwMzU3MDZmODYyNjgwYTNkZWFlYzkxMjZkMy4uYTQyMTg3MWM1ZTI5
NGU1NjU2YTc5NTdjYjk2YTkyNDdiZTlhZjFhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9mZWF0dXJlcy5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVy
ZXMuZ3lwaQpAQCAtNTQsNiArNTQsNyBAQAogICAgICAgJ0VOQUJMRV9DU1NfVFJBTlNGT1JNU19B
TklNQVRJT05TX1VOUFJFRklYRUQ9MCcsCiAgICAgICAnRU5BQkxFX0NTU19WQVJJQUJMRVM9MScs
CiAgICAgICAnRU5BQkxFX0NTU19TVElDS1lfUE9TSVRJT049MScsCisgICAgICAnRU5BQkxFX0NV
U1RPTV9FTEVNRU5UUz0xJywKICAgICAgICdFTkFCTEVfQ1VTVE9NX1NDSEVNRV9IQU5ETEVSPTAn
LAogICAgICAgJ0VOQUJMRV9EQVNIQk9BUkRfU1VQUE9SVD0wJywKICAgICAgICdFTkFCTEVfREFU
QV9UUkFOU0ZFUl9JVEVNUz0xJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYlJ1bnRpbWVGZWF0dXJlcy5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViUnVudGltZUZlYXR1cmVzLmgKaW5kZXggZWM2NDExZTQwMmM1MjFlN2E4NDY2M2I2ZWY0
ZGU0NTE5YTgwMjUyZi4uYjJhNWYwNWU3MGI0MzViMDhjMWQ2MmM0ODI3YjBiMDgzYTU1YjU2YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUnVudGltZUZlYXR1
cmVzLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUnVudGltZUZlYXR1
cmVzLmgKQEAgLTEyNSw2ICsxMjUsOSBAQCBwdWJsaWM6CiAgICAgV0VCS0lUX0VYUE9SVCBzdGF0
aWMgdm9pZCBlbmFibGVTaGFkb3dET00oYm9vbCk7CiAgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMg
Ym9vbCBpc1NoYWRvd0RPTUVuYWJsZWQoKTsKIAorICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIHZv
aWQgZW5hYmxlQ3VzdG9tRE9NRWxlbWVudHMoYm9vbCk7CisgICAgV0VCS0lUX0VYUE9SVCBzdGF0
aWMgYm9vbCBpc0N1c3RvbURPTUVsZW1lbnRzRW5hYmxlZCgpOworCiAgICAgV0VCS0lUX0VYUE9S
VCBzdGF0aWMgdm9pZCBlbmFibGVTdHlsZVNjb3BlZChib29sKTsKICAgICBXRUJLSVRfRVhQT1JU
IHN0YXRpYyBib29sIGlzU3R5bGVTY29wZWRFbmFibGVkKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlJ1bnRpbWVGZWF0dXJlcy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJSdW50aW1lRmVhdHVyZXMuY3BwCmluZGV4IDE5NjNlOTE0ZDM4
NzNiYzMwM2ZkYTNkNTNkZTRkMjA5MTgzMzUwNjcuLmM3OWYyMmE5NjEwMzk2NTM0ODQyNTUwMDc5
OGFkN2IzZDA2NjQ4MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlJ1bnRpbWVGZWF0dXJlcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
UnVudGltZUZlYXR1cmVzLmNwcApAQCAtNDgxLDYgKzQ4MSwyNSBAQCBib29sIFdlYlJ1bnRpbWVG
ZWF0dXJlczo6aXNTaGFkb3dET01FbmFibGVkKCkKICNlbmRpZgogfQogCit2b2lkIFdlYlJ1bnRp
bWVGZWF0dXJlczo6ZW5hYmxlQ3VzdG9tRE9NRWxlbWVudHMoYm9vbCBlbmFibGUpCit7CisjaWYg
RU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKyAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzZXRD
dXN0b21ET01FbGVtZW50cyhlbmFibGUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZW5hYmxl
KTsKKyNlbmRpZgorfQorCitib29sIFdlYlJ1bnRpbWVGZWF0dXJlczo6aXNDdXN0b21ET01FbGVt
ZW50c0VuYWJsZWQoKQoreworI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisgICAgcmV0dXJu
IFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmN1c3RvbURPTUVsZW1lbnRzRW5hYmxlZCgpOworI2Vs
c2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworCiB2b2lkIFdlYlJ1bnRpbWVGZWF0
dXJlczo6ZW5hYmxlU3R5bGVTY29wZWQoYm9vbCBlbmFibGUpCiB7CiAjaWYgRU5BQkxFKFNUWUxF
X1NDT1BFRCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwpp
bmRleCA0Y2M3NDdlN2ZlYWJmZjZhODZhZjJiMTdhOTEwMmY5YjQ0NDQxZWVlLi5kZGYzMjE5ZGNm
OTk0NWIyNmZjNDdmNTU4MDJhZDZmZjg2YWFiNmMyIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VM
b2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTMtMDEtMjcgIEhh
amltZSBNb3JyaXRhICA8bW9ycml0YUBnb29nbGUuY29tPgorCisgICAgICAgIFtDdXN0b20gRWxl
bWVudHNdIEltcGxlbWVudCBiYXJlLWJvbmUgZG9jdW1lbnQucmVnaXN0ZXIoKQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwMjI5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgZW5hYmxlQ3VzdG9t
RE9NRWxlbWVudHMgZmxhZy4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RTaGVsbC5jcHA6CisgICAgICAgIChUZXN0U2hlbGw6OlRlc3RTaGVsbCk6CisKIDIwMTMtMDIt
MDcgIERhdmlkIEZhcmxlciAgPGRmYXJsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2VmaWxl
cyBzaG91bGQgd29yayBmb3IgYXJiaXRyYXJ5IFNES3MgYW5kIGFyY2hpdGVjdHVyZXMgb24gQXBw
bGUgcG9ydHMKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RT
aGVsbC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCmlu
ZGV4IGFhYzk1MjkwZTM3YzcyY2RmNDZmZGI1ZWQ5ZWUwZmUxM2U1NjY1ODUuLjU5NTlkMjk2YjNk
ZmM3MDZjYmMwMDQ4ZTllNGZhZjFkYmNmNWNjNzEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFNoZWxsLmNwcApAQCAtMTQ2LDYgKzE0Niw3IEBAIFRlc3RTaGVsbDo6VGVz
dFNoZWxsKCkKICAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZVZpZGVvVHJhY2sodHJ1ZSk7
CiAgICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVHYW1lcGFkKHRydWUpOwogICAgIFdlYlJ1
bnRpbWVGZWF0dXJlczo6ZW5hYmxlU2hhZG93RE9NKHRydWUpOworICAgIFdlYlJ1bnRpbWVGZWF0
dXJlczo6ZW5hYmxlQ3VzdG9tRE9NRWxlbWVudHModHJ1ZSk7CiAgICAgV2ViUnVudGltZUZlYXR1
cmVzOjplbmFibGVTdHlsZVNjb3BlZCh0cnVlKTsKICAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVu
YWJsZVNjcmlwdGVkU3BlZWNoKHRydWUpOwogICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxl
UmVxdWVzdEF1dG9jb21wbGV0ZSh0cnVlKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBlN2E3NjU5ODUwMmUwYTJjYmQwMTkw
ZDNiMzc5MDVjN2UzNWExY2NjLi40MzY1ZmE4MTI3YzAwZGFkYjJiMGYyNDYxODA3Y2FiNzM0ZTZl
MGI3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTMtMDEtMjcgIEhhamltZSBNb3JyaXRhICA8
bW9ycml0YUBnb29nbGUuY29tPgorCisgICAgICAgIFtDdXN0b20gRWxlbWVudHNdIEltcGxlbWVu
dCBiYXJlLWJvbmUgZG9jdW1lbnQucmVnaXN0ZXIoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwMjI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0
ZXItYmFzaWMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50
LXJlZ2lzdGVyLWJhc2ljLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
bWFjL1Rlc3RFeHBlY3RhdGlvbnM6CisKIDIwMTMtMDItMDcgIE1hdHQgRmFsa2VuaGFnZW4gIDxm
YWxrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgZ2FyZGVuaW5nLiBSZWJh
c2VsaW5lIGJpZGktaWdub3JlZC1mb3ItZmlyc3QtY2hpbGQtaW5saW5lLmh0bWwKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1iYXNpYy1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0
ZXItYmFzaWMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUwMGViOTA0NzE2NzEwODFhMzc5NDA5
Njg3YmNmYWU5M2NiMzMwODQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
NDIgQEAKK1Rlc3RpbmcgZG9jdW1lbnQucmVnaXN0ZXIoKSBiYXNpYyBiZWhhdmlvcnMuCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGRvY3VtZW50LnJlZ2lzdGVyKCdmb28n
LCBjcmVhdGVSZWdpc3RlclBhcmFtdGVycygpKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IEludmFs
aWRDaGFyYWN0ZXJFcnJvcjogRE9NIEV4Y2VwdGlvbiA1LgorUEFTUyBkb2N1bWVudC5yZWdpc3Rl
cigneGZvbycsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpIHRocmV3IGV4Y2VwdGlvbiBFcnJv
cjogSW52YWxpZENoYXJhY3RlckVycm9yOiBET00gRXhjZXB0aW9uIDUuCitQQVNTIGRvY3VtZW50
LnJlZ2lzdGVyKCdtaXNzaW5nLWdseXBoJywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSkgdGhy
ZXcgZXhjZXB0aW9uIEVycm9yOiBJbnZhbGlkQ2hhcmFjdGVyRXJyb3I6IERPTSBFeGNlcHRpb24g
NS4KK1BBU1MgdHlwZW9mIGZvb0NvbnN0cnVjdG9yIGlzICdmdW5jdGlvbicKK1BBU1MgZm9vQ29u
c3RydWN0b3IucHJvdG90eXBlLl9fcHJvdG9fXyBpcyBIVE1MUGFyYWdyYXBoRWxlbWVudC5wcm90
b3R5cGUKK1BBU1MgZm9vQ29uc3RydWN0b3IucHJvdG90eXBlLnRoaXNJc1Byb3RvdHlwZSBpcyB0
cnVlCitQQVNTIGRvY3VtZW50LnJlZ2lzdGVyKCd4LWZvbycsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10
ZXJzKCkpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSW52YWxpZFN0YXRlRXJyb3I6IERPTSBFeGNl
cHRpb24gMTEuCitQQVNTIGRvY3VtZW50LnJlZ2lzdGVyKCdYLUZPTycsIGNyZWF0ZVJlZ2lzdGVy
UGFyYW10ZXJzKCkpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSW52YWxpZFN0YXRlRXJyb3I6IERP
TSBFeGNlcHRpb24gMTEuCitQQVNTIGRvY3VtZW50LnJlZ2lzdGVyKCd4LWJhZC1hJywgeyBwcm90
b3R5cGU6IEhUTUxTcGFuRWxlbWVudC5wcm90b3R5cGUgfSkgdGhyZXcgZXhjZXB0aW9uIEVycm9y
OiBJbnZhbGlkU3RhdGVFcnJvcjogRE9NIEV4Y2VwdGlvbiAxMS4KK1BBU1MgZG9jdW1lbnQucmVn
aXN0ZXIoJ3gtYmFkLWInLCB7IHByb3RvdHlwZToge30gfSkgdGhyZXcgZXhjZXB0aW9uIEVycm9y
OiBJbnZhbGlkU3RhdGVFcnJvcjogRE9NIEV4Y2VwdGlvbiAxMS4KK1BBU1MgZG9jdW1lbnQucmVn
aXN0ZXIoJ3gtYmFkLWMnLCB7IHByb3RvdHlwZTogT2JqZWN0LmNyZWF0ZShEb2N1bWVudC5wcm90
b3R5cGUpIH0pIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSW52YWxpZFN0YXRlRXJyb3I6IERPTSBF
eGNlcHRpb24gMTEuCitQQVNTIGZvb0NvbnN0cnVjdG9yKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVF
cnJvcjogRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rp
b24uLgorUEFTUyBjcmVhdGVkRm9vLl9fcHJvdG9fXyBpcyBmb29Db25zdHJ1Y3Rvci5wcm90b3R5
cGUKK1BBU1MgY3JlYXRlZEZvby5jb25zdHJ1Y3RvciBpcyBmb29Db25zdHJ1Y3RvcgorUEFTUyBj
cmVhdGVkRm9vLnRhZ05hbWUgaXMgJ1gtRk9PJworUEFTUyBjcmVhdGVkRm9vLnRleHRDb250ZW50
IGlzICdIZWxsbycKK1BBU1MgY3JlYXRlZEZvby5sYXN0Q2hpbGQgaXMgY2hpbGREaXYKK1BBU1Mg
cGFyc2VkRm9vLl9fcHJvdG9fXyBpcyBmb29Db25zdHJ1Y3Rvci5wcm90b3R5cGUKK1BBU1MgcGFy
c2VkRm9vLnRhZ05hbWUgaXMgJ1gtRk9PJworUEFTUyBwYXJzZWRGb28uc29tZVByb3BlcnR5IGlz
IGNvbnRhaW5lci5maXJzdENoaWxkLnNvbWVQcm9wZXJ0eQorUEFTUyBjcmVhdGVkQmFyLnRhZ05h
bWUgaXMgJ1gtQkFSJworUEFTUyBjcmVhdGVkQmF6LnRhZ05hbWUgaXMgJ1gtQkFaJworUEFTUyBj
cmVhdGVkQmF6LnRoaXNJc1Byb3RvdHlwZSBpcyB0cnVlCitQQVNTIGNyZWF0ZWRCYXoudGhpc0lz
QWxzb1Byb3RvdHlwZSBpcyB0cnVlCitQQVNTIGNyZWF0ZWRVcHBlckJhci5jb25zdHJ1Y3RvciBp
cyBiYXJDb25zdHJ1Y3RvcgorUEFTUyBjcmVhdGVkVXBwZXJCYXIudGFnTmFtZSBpcyAnWC1CQVIn
CitQQVNTIGNyZWF0ZWRNaXhlZEJhci5jb25zdHJ1Y3RvciBpcyBiYXJDb25zdHJ1Y3RvcgorUEFT
UyBjcmVhdGVkTWl4ZWRCYXIudGFnTmFtZSBpcyAnWC1CQVInCitQQVNTIGNvbnRhaW5lci5maXJz
dENoaWxkLmNvbnN0cnVjdG9yIGlzIGJhckNvbnN0cnVjdG9yCitQQVNTIGNvbnRhaW5lci5maXJz
dENoaWxkLnRhZ05hbWUgaXMgJ1gtQkFSJworUEFTUyBjb250YWluZXIubGFzdENoaWxkLmNvbnN0
cnVjdG9yIGlzIGJhckNvbnN0cnVjdG9yCitQQVNTIGNvbnRhaW5lci5sYXN0Q2hpbGQudGFnTmFt
ZSBpcyAnWC1CQVInCitQQVNTIChuZXcgKGRvY3VtZW50LnJlZ2lzdGVyKCd5LWJhcicsIGNyZWF0
ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpKSgpKS50YWdOYW1lIGlzICdZLUJBUicKK1BBU1MgKG5ldyAo
ZG9jdW1lbnQucmVnaXN0ZXIoJ3l6LWJhcicsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpKSgp
KS50YWdOYW1lIGlzICdZWi1CQVInCitQQVNTIChuZXcgKGRvY3VtZW50LnJlZ2lzdGVyKCd5LXot
YmFyJywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSkpKCkpLnRhZ05hbWUgaXMgJ1ktWi1CQVIn
CitQQVNTIChuZXcgKGRvY3VtZW50LnJlZ2lzdGVyKCd5LS1iYXInLCBjcmVhdGVSZWdpc3RlclBh
cmFtdGVycygpKSkoKSkudGFnTmFtZSBpcyAnWS0tQkFSJworCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMuaHRtbCBiL0xheW91
dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1iYXNpYy5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjQwNjNkYmZkNWQ4M2ZhZTExMGNiMjExZGNjOGE2OWNmODU4ZjNlZGIKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXIt
YmFzaWMuaHRtbApAQCAtMCwwICsxLDExMSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImNvbnRhaW5lciI+PC9kaXY+Cis8c2Ny
aXB0PgorZGVzY3JpcHRpb24oIlRlc3RpbmcgZG9jdW1lbnQucmVnaXN0ZXIoKSBiYXNpYyBiZWhh
dmlvcnMuIik7CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLmR1bXBB
c1RleHQoKTsKK2RvY3VtZW50LnJlZ2lzdGVyID0gZG9jdW1lbnQucmVnaXN0ZXIgfHwgZG9jdW1l
bnQud2Via2l0UmVnaXN0ZXI7CisKK2Z1bmN0aW9uIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkK
K3sKKyAgICByZXR1cm4geworICAgICAgICBwcm90b3R5cGU6IE9iamVjdC5jcmVhdGUoSFRNTFBh
cmFncmFwaEVsZW1lbnQucHJvdG90eXBlLCB7IHRoaXNJc1Byb3RvdHlwZTogeyB2YWx1ZTogdHJ1
ZSB9IH0pCisgICAgfTsKK30KKworLy8gSW52YWxpZCBuYW1lcworc2hvdWxkVGhyb3coImRvY3Vt
ZW50LnJlZ2lzdGVyKCdmb28nLCBjcmVhdGVSZWdpc3RlclBhcmFtdGVycygpKSIsICInRXJyb3I6
IEludmFsaWRDaGFyYWN0ZXJFcnJvcjogRE9NIEV4Y2VwdGlvbiA1JyIpOworc2hvdWxkVGhyb3co
ImRvY3VtZW50LnJlZ2lzdGVyKCd4Zm9vJywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSkiLCAi
J0Vycm9yOiBJbnZhbGlkQ2hhcmFjdGVyRXJyb3I6IERPTSBFeGNlcHRpb24gNSciKTsKK3Nob3Vs
ZFRocm93KCJkb2N1bWVudC5yZWdpc3RlcignbWlzc2luZy1nbHlwaCcsIGNyZWF0ZVJlZ2lzdGVy
UGFyYW10ZXJzKCkpIiwgIidFcnJvcjogSW52YWxpZENoYXJhY3RlckVycm9yOiBET00gRXhjZXB0
aW9uIDUnIik7CisKK3ZhciBmb29Db25zdHJ1Y3RvciA9IGRvY3VtZW50LnJlZ2lzdGVyKCJ4LWZv
byIsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpOworc2hvdWxkQmUoInR5cGVvZiBmb29Db25z
dHJ1Y3RvciIsICInZnVuY3Rpb24nIik7CitzaG91bGRCZSgiZm9vQ29uc3RydWN0b3IucHJvdG90
eXBlLl9fcHJvdG9fXyIsICJIVE1MUGFyYWdyYXBoRWxlbWVudC5wcm90b3R5cGUiKTsKK3Nob3Vs
ZEJlVHJ1ZSgiZm9vQ29uc3RydWN0b3IucHJvdG90eXBlLnRoaXNJc1Byb3RvdHlwZSIpOworCisv
LyBOYW1lIGNvbmZsaWN0cworc2hvdWxkVGhyb3coImRvY3VtZW50LnJlZ2lzdGVyKCd4LWZvbycs
IGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpIiwgIidFcnJvcjogSW52YWxpZFN0YXRlRXJyb3I6
IERPTSBFeGNlcHRpb24gMTEnIik7CitzaG91bGRUaHJvdygiZG9jdW1lbnQucmVnaXN0ZXIoJ1gt
Rk9PJywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSkiLCAiJ0Vycm9yOiBJbnZhbGlkU3RhdGVF
cnJvcjogRE9NIEV4Y2VwdGlvbiAxMSciKTsKKworLy8gQmFkIHByb3RvdHlwZTogY29uc3RydWN0
b3IgcHJvcGVydHkgZXhpc3RzCitzaG91bGRUaHJvdygiZG9jdW1lbnQucmVnaXN0ZXIoJ3gtYmFk
LWEnLCB7IHByb3RvdHlwZTogSFRNTFNwYW5FbGVtZW50LnByb3RvdHlwZSB9KSIsICInRXJyb3I6
IEludmFsaWRTdGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDExJyIpOworLy8gQmFkIHByb3RvdHlw
ZTogbWlzc2luZyBfX3Byb3RvX18KK3Nob3VsZFRocm93KCJkb2N1bWVudC5yZWdpc3RlcigneC1i
YWQtYicsIHsgcHJvdG90eXBlOiB7fSB9KSIsICInRXJyb3I6IEludmFsaWRTdGF0ZUVycm9yOiBE
T00gRXhjZXB0aW9uIDExJyIpOworLy8gQmFkIHByb3RvdHlwZTogd3JvbmcgX19wcm90b19fCitz
aG91bGRUaHJvdygiZG9jdW1lbnQucmVnaXN0ZXIoJ3gtYmFkLWMnLCB7IHByb3RvdHlwZTogT2Jq
ZWN0LmNyZWF0ZShEb2N1bWVudC5wcm90b3R5cGUpIH0pIiwgIidFcnJvcjogSW52YWxpZFN0YXRl
RXJyb3I6IERPTSBFeGNlcHRpb24gMTEnIik7CisKKy8vIENhbGwgYXMgZnVuY3Rpb24KK3Nob3Vs
ZFRocm93KCJmb29Db25zdHJ1Y3RvcigpIiwgIidUeXBlRXJyb3I6IERPTSBvYmplY3QgY29uc3Ry
dWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLiciKQorCisvLyBDb25zdHJ1Y3Rv
ciBpbml0aWF0ZWQgaW5zdGFudGlhdGlvbgordmFyIGNyZWF0ZWRGb28gPSBuZXcgZm9vQ29uc3Ry
dWN0b3IoKTsKKworLy8gSlMgYnVpbHQtaW4gcHJvcGVydGllcworc2hvdWxkQmUoImNyZWF0ZWRG
b28uX19wcm90b19fIiwgImZvb0NvbnN0cnVjdG9yLnByb3RvdHlwZSIpOworc2hvdWxkQmUoImNy
ZWF0ZWRGb28uY29uc3RydWN0b3IiLCAiZm9vQ29uc3RydWN0b3IiKTsKKworLy8gTmF0aXZlIGdl
dHRlcgorc2hvdWxkQmUoImNyZWF0ZWRGb28udGFnTmFtZSIsICInWC1GT08nIik7CisKKy8vIE5h
dGl2ZSBzZXR0ZXIKK2NyZWF0ZWRGb28uaW5uZXJIVE1MID0gIkhlbGxvIjsKK3Nob3VsZEJlKCJj
cmVhdGVkRm9vLnRleHRDb250ZW50IiwgIidIZWxsbyciKTsKKworLy8gTmF0aXZlIG1ldGhvZAor
dmFyIGNoaWxkRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CitjcmVhdGVkRm9v
LmFwcGVuZENoaWxkKGNoaWxkRGl2KTsKK3Nob3VsZEJlKCJjcmVhdGVkRm9vLmxhc3RDaGlsZCIs
ICJjaGlsZERpdiIpOworCisvLyBQYXJzZXIgaW5pdGlhdGVkIGluc3RhbnRpYXRpb24KK3ZhciBj
b250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGFpbmVyIik7Citjb250YWlu
ZXIuaW5uZXJIVE1MID0gIjx4LWZvbz48L3gtZm9vPiI7CitwYXJzZWRGb28gPSBjb250YWluZXIu
Zmlyc3RDaGlsZDsKKworc2hvdWxkQmUoInBhcnNlZEZvby5fX3Byb3RvX18iLCAiZm9vQ29uc3Ry
dWN0b3IucHJvdG90eXBlIik7CitzaG91bGRCZSgicGFyc2VkRm9vLnRhZ05hbWUiLCAiJ1gtRk9P
JyIpOworCisvLyBFbnN1cmluZyB0aGUgd3JhcHBlciBpcyByZXRhaW5lZAorcGFyc2VkRm9vLnNv
bWVQcm9wZXJ0eSA9ICJoZWxsbyI7CitzaG91bGRCZSgicGFyc2VkRm9vLnNvbWVQcm9wZXJ0eSIs
ICJjb250YWluZXIuZmlyc3RDaGlsZC5zb21lUHJvcGVydHkiKTsKKworLy8gSGF2aW5nIGFub3Ro
ZXIgY29uc3RydWN0b3IKK3ZhciBiYXJDb25zdHJ1Y3RvciA9IGRvY3VtZW50LnJlZ2lzdGVyKCJ4
LWJhciIsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpOwordmFyIGNyZWF0ZWRCYXIgPSBuZXcg
YmFyQ29uc3RydWN0b3IoKTsKK3Nob3VsZEJlKCJjcmVhdGVkQmFyLnRhZ05hbWUiLCAiJ1gtQkFS
JyIpOworCisvLyBIYXZpbmcgYSBzdWJjbGFzcwordmFyIGJhekNvbnN0cnVjdG9yID0gZG9jdW1l
bnQucmVnaXN0ZXIoIngtYmF6IiwgeyBwcm90b3R5cGU6IE9iamVjdC5jcmVhdGUoZm9vQ29uc3Ry
dWN0b3IucHJvdG90eXBlLCB7IHRoaXNJc0Fsc29Qcm90b3R5cGU6IHsgdmFsdWU6IHRydWUgfSB9
KSB9KTsKK3ZhciBjcmVhdGVkQmF6ID0gbmV3IGJhekNvbnN0cnVjdG9yKCk7CitzaG91bGRCZSgi
Y3JlYXRlZEJhei50YWdOYW1lIiwgIidYLUJBWiciKTsKK3Nob3VsZEJlVHJ1ZSgiY3JlYXRlZEJh
ei50aGlzSXNQcm90b3R5cGUiKTsKK3Nob3VsZEJlVHJ1ZSgiY3JlYXRlZEJhei50aGlzSXNBbHNv
UHJvdG90eXBlIik7CisKKy8vIFdpdGggaXJyZWd1bGFyIGNhc2VzCit2YXIgY3JlYXRlZFVwcGVy
QmFyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiWC1CQVIiKTsKK3ZhciBjcmVhdGVkTWl4ZWRC
YXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJYLUJhciIpOworc2hvdWxkQmUoImNyZWF0ZWRV
cHBlckJhci5jb25zdHJ1Y3RvciIsICJiYXJDb25zdHJ1Y3RvciIpOworc2hvdWxkQmUoImNyZWF0
ZWRVcHBlckJhci50YWdOYW1lIiwgIidYLUJBUiciKTsKK3Nob3VsZEJlKCJjcmVhdGVkTWl4ZWRC
YXIuY29uc3RydWN0b3IiLCAiYmFyQ29uc3RydWN0b3IiKTsKK3Nob3VsZEJlKCJjcmVhdGVkTWl4
ZWRCYXIudGFnTmFtZSIsICInWC1CQVInIik7CisKK2NvbnRhaW5lci5pbm5lckhUTUwgPSAiPFgt
QkFSPjwvWC1CQVI+PFgtQmFyPjwvWC1CYXI+IjsKK3Nob3VsZEJlKCJjb250YWluZXIuZmlyc3RD
aGlsZC5jb25zdHJ1Y3RvciIsICJiYXJDb25zdHJ1Y3RvciIpOworc2hvdWxkQmUoImNvbnRhaW5l
ci5maXJzdENoaWxkLnRhZ05hbWUiLCAiJ1gtQkFSJyIpOworc2hvdWxkQmUoImNvbnRhaW5lci5s
YXN0Q2hpbGQuY29uc3RydWN0b3IiLCAiYmFyQ29uc3RydWN0b3IiKTsKK3Nob3VsZEJlKCJjb250
YWluZXIubGFzdENoaWxkLnRhZ05hbWUiLCAiJ1gtQkFSJyIpOworCisvLyBTdHJhbmdlIGJ1dCB2
YWxpZCBuYW1lcworc2hvdWxkQmUoIihuZXcgKGRvY3VtZW50LnJlZ2lzdGVyKCd5LWJhcicsIGNy
ZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpKSgpKS50YWdOYW1lIiwgIidZLUJBUiciKTsKK3Nob3Vs
ZEJlKCIobmV3IChkb2N1bWVudC5yZWdpc3RlcigneXotYmFyJywgY3JlYXRlUmVnaXN0ZXJQYXJh
bXRlcnMoKSkpKCkpLnRhZ05hbWUiLCAiJ1laLUJBUiciKTsKK3Nob3VsZEJlKCIobmV3IChkb2N1
bWVudC5yZWdpc3RlcigneS16LWJhcicsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpKSgpKS50
YWdOYW1lIiwgIidZLVotQkFSJyIpOworc2hvdWxkQmUoIihuZXcgKGRvY3VtZW50LnJlZ2lzdGVy
KCd5LS1iYXInLCBjcmVhdGVSZWdpc3RlclBhcmFtdGVycygpKSkoKSkudGFnTmFtZSIsICInWS0t
QkFSJyIpOworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggNjJmNDA5MmY0MTQzZmQ3YzQ0NzljZWJlYjk3
NzI1MDc5MDc4ZmNkMi4uOTEwYzNlNjNkNmQ5NTgyODM2OGE3NjUxMzlmNzNiMGQ1MDA0OTJkMiAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKKysr
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTEwMzEsNiAr
MTAzMSw5IEBAIHdlYmtpdC5vcmcvYi83NjQ4OSBjb21wb3NpdGluZy93ZWJnbC93ZWJnbC1yZWZs
ZWN0aW9uLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi83NjQzOSBbIERl
YnVnIF0gZmFzdC9kb20vc2hhZG93L2NvbnRlbnQtZWxlbWVudC1hcGkuaHRtbCBbIEZhaWx1cmUg
XQogd2Via2l0Lm9yZy9iLzc2NDM5IFsgRGVidWcgXSBmYXN0L2RvbS9zaGFkb3cvY29udGVudC1l
bGVtZW50LW91dHNpZGUtc2hhZG93Lmh0bWwgWyBGYWlsdXJlIF0KIAorIyBFTkFCTEUoQ1VTVE9N
X0VMRU1FTlRTKSBpcyBkaXNhYmxlZC4KK2Zhc3QvZG9tL2N1c3RvbQorCiAjIENTUyBWYXJpYWJs
ZXMgYXJlIG5vdCB5ZXQgZW5hYmxlZC4KIHdlYmtpdC5vcmcvYi84NTU4MCBmYXN0L2Nzcy92YXJp
YWJsZXMKIHdlYmtpdC5vcmcvYi84NTU4MCBpbnNwZWN0b3Ivc3R5bGVzL3ZhcmlhYmxlcwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188486</attachid>
            <date>2013-02-14 23:10:23 -0800</date>
            <delta_ts>2013-02-21 20:15:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100229-20130215160650.patch</filename>
            <type>text/plain</type>
            <size>98725</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyOTU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmIyNTMzMTc3NWQwMzU4
MzMxMTk1NjQyMjcwNWZkYzA4ODlkNmRmZS4uZTY5NjRlYTdiY2IzMDU2MjQ4ZDlhNzcyYWI5ZWIz
MmE0ZDJmY2RkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwNyBAQAorMjAxMy0wMi0wNiAgSGFq
aW1lIE1vcnJpdGEgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKworICAgICAgICBbQ3VzdG9tIEVs
ZW1lbnRzXSBJbXBsZW1lbnQgYmFyZS1ib25lIGRvY3VtZW50LnJlZ2lzdGVyKCkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDIyOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGltcGxl
bWVudHMgcHJlZml4ZWQgdmVyc2lvbiBvZiBkb2N1bWVudC5yZWdpc3RlcigpLCB3aXRoIG1pbmlt
YWwgZmVhdHVyZSBzdXBwb3J0LgorICAgICAgICAtIFRoZSBmZWF0dXJlIGlzIGd1YXJkZWQgYnkg
RU5BQkxFKENVU1RPTV9FTEVNRU5UUykgYW5kIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmN1c3Rv
bURPTUVsZW1lbnRzRW5hYmxlZCgpLgorICAgICAgICAtIFRoaXMgYmFyZS1ib25lIHZlcnNpb24g
b25seSByZWNvZ25pemVzICJuYW1lIiBhbmQgInByb3RvdHlwZSIgcGFyYW1ldGVycy4gSXQgZG9l
c24ndCBzdXBwb3J0IGRlZmF1bHQgdmFsdWUgb2YgInByb3RvdHlwZSIgcGFyYW1ldGVyLgorICAg
ICAgICAtIEN1cnJlbnRseSBvbmx5IFY4IGlzIHN1cHBvcnRlZC4gSlNDIGJpbmRpbmcgbmVlZHMg
aXRzIG93biBiaW5kaW5nIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgID0gTWFqb3IgbmV3IGNs
YXNzZXMgdW5kZXIgZG9tLzoKKworICAgICAgICBUaGUgZG9tIG1vZHVsZSBoYXMgdHdvIG5ldyBj
bGFzc2VzOgorICAgICAgICAtIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvcjogQSByZXR1cm4gdmFs
dWUgb2YgZG9jdW1lbnQucmVnaXN0ZXIoKQorICAgICAgICAgIHdoaWNoIGhvbGRzIHRoZSBjdXN0
b20gZWxlbWVudCBkZWZpbml0aW9uLgorICAgICAgICAtIEN1c3RvbUVsZW1lbnRSZWdpc3RyeTog
QSBjb2xsZWN0aW9uIG9mIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciBvYmplY3RzLgorICAgICAg
ICAgIEN1c3RvbUVsZW1lbnRSZWdpc3RyeSBpbnN0YW5jZSBpcyBjcmVhdGVkIHBlciBEb2N1bWVu
dCBhbmQgaXMgb3duZWQgYnkgdGhlIERvY3VtZW50LgorCisgICAgICAgIEN1c3RvbUVsZW1lbnRD
b25zdHJ1Y3RvciBrbm93cyB0aGUgZGVmaW5pdGlvbiBvZiBlYWNoIGN1c3RvbQorICAgICAgICBl
bGVtZW50LCB3aGljaCBpcyByZWdpc3RlcmVkIGJ5IGRvY3VtZW50LnJlZ2lzdGVyKCkuIFRoZSBu
YW1lIGFuZAorICAgICAgICBvdGhlciBvcHRpb25zIGFyZSBoZWxkIGJ5IHRoaXMgb2JqZWN0LiBD
dXN0b21FbGVtZW50UmVnaXN0cnkgb3ducyBhIHNldAorICAgICAgICBvZiB0aGUgcmVnaXN0ZXJl
ZCBjb25zdHJ1Y3RvcnMuIFRoZSByZWdpc3RyeSBndWFyYW50ZWVzIGludmFyaWFudHMKKyAgICAg
ICAgbGlrZSB2YWxpZGl0eSBhbmQgdW5pcXVlbmVzcyBvZiB0aGUgZWxlbWVudCBuYW1lcy4KKwor
ICAgICAgICA9IEEgY2hhbmdlIG9uIG1ha2VfbmFtZXMucGwKKworICAgICAgICBUaGlzIGNoYW5n
ZSB0d2Vha3MgbWFrZV9uYW1lcy5wbCAob3IgZ2VuZXJhdGVkIEhUTUxFbGVtZW50RmFjdG9yeSkK
KyAgICAgICAgdG8gaG9vayB0aGUgY3JlYXRpb25zIG9mIHVua25vd24gZWxlbWVudHMuIFNvbWUg
b2YgZWxlbWVudCBuYW1lcworICAgICAgICB3aGljaCBjb21lIHRvIHRoZSBmYWxsYmFjayBwYXRo
IGNhbiBiZSBvbmUgb2YgcmVnaXN0ZXJlZCBjdXN0b20KKyAgICAgICAgZWxlbWVudC4KKworICAg
ICAgICA9IFtWOFdyYXBBc0Z1bmN0aW9uXSBleHRlbmRlZCBhdHRyaWJ1dGU6CisKKyAgICAgICAg
VGhlIGRvY3VtZW50LnJlZ2lzdGVyKCkgQVBJIHJldHVybnMgYSBjb25zdHJ1Y3RvcgorICAgICAg
ICBmdW5jdGlvbi4gSG93ZXZlciwgdGhlIFY4IGJpbmRpbmcgY3VycmVudGx5IGRvZXNuJ3Qgc3Vw
cG9ydCBpdC4gVG8KKyAgICAgICAgbWFrZSBpdCBwb3NzaWJsZSwgdGhpcyBjaGFuZ2UgaW50cm9k
dWNlcyAiVjhXcmFwQXNGdW5jdGlvbiIKKyAgICAgICAgZXh0ZW5kZWQgYXR0cmlidXRlIGZvciBh
bm5vdGF0aW5nIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciBJREwKKyAgICAgICAgaW50ZXJmYWNl
LgorCisgICAgICAgIFY4V3JhcEFzRnVuY3Rpb24gd3JhcHMgdGhlIGFubm90YXRlZCBpbnRlcmZh
Y2Ugd2l0aCBhIEphdmFTY3JpcHQKKyAgICAgICAgZnVuY3Rpb24sIHdoaWNoIGNhbGxzIHRoZSBv
cmlnaW5hbCBvYmplY3QgYXMgYSBmdW5jdGlvbiwgb3IgYXMgYQorICAgICAgICBjb25zdHJ1Y3Rv
cgorCisgICAgICAgIFdpdGggdGhpcyB3cmFwcGVyIGZ1bmN0aW9uLCB0aGVyZSBhcmUgdHdvIGxl
dmVscyBvZiBpbmRpcmVjdGlvbgorICAgICAgICBiZXR3ZWVuIG5hdGl2ZSBDKysgb2JqZWN0IGFu
ZCBhdXRob3ItdmlzaWJsZSBKUyBmdW5jdGlvbjoKKworICAgICAgICBbSlMgQWRhcHRvciBGaWN0
aW9uXSA8LShoaWRkZW4gcHJvcGVydHkpLT4gW0pTIFdyYXBwZXIgT2JqZWN0XSAtKGludGVybmFs
IGZpZWxkKS0+IFtDKysgTmF0aXZlIG9iamVjdF0KKworICAgICAgICBUaGUgY29kZSBnZW5lcmF0
b3IgZ2VuZXJhdGVzIHRoZSBiaW5kaW5nIGNvZGUgd2hpY2ggZGVhbHMgd2l0aAorICAgICAgICB0
aGlzIGluZGlyZWN0aW9uLiAgQWxzbywgdGhlcmUgaXMgYSBzZXQgb2YgaGVscGVyIGZ1bmN0aW9u
cyBpbgorICAgICAgICBWOEFkYXB0b3JGdW5jdGlvbi5oL2NwcCB3aGljaCB0YWtlIGNhcmUgb2Yg
dGhpcyBpbmRpcmVjdGlvbi4KKyAgICAgICAgVjhET01XcmFwcGVyLmNwcC9oIHdvcmtzIGFzIGEg
ZmFjYWRlIGZvciB0aGVzZSBBUElzIGFuZCBpcyB1c2VkIGZyb20KKyAgICAgICAgdGhlIGdlbmVy
YXRlZCBjb2RlLgorCisgICAgICAgIFRoaXMgcmVkdW5kYW5jeSBjb21lcyBmcm9tIGxpbWl0YXRp
b25zIG9mIGJvdGggVjggYmluZGluZ3MgYW5kIFY4CisgICAgICAgIGVtYmVkZGluZyBBUEkuIFNl
ZSBidWcgMTA4MTM4IGZvciBkZXRhaWxzLgorCisgICAgICAgID0gVjhIVE1MQ3VzdG9tRWxlbWVu
dAorCisgICAgICAgIFVubGlrZSBidWlsdC1pbiBIVE1MIGVsZW1lbnRzLCBhbnkgY3VzdG9tIGVs
ZW1lbnQgaGFzIG5vCisgICAgICAgIGNvcnJlc3BvbmRpbmcgQysrIGNsYXNzLiBJbnN0ZWFkLCBk
b2N1bWVudC5yZWdpc3RlcigpIHNob3VsZCBhbGxvdworICAgICAgICBwYXNzaW5nIGEgcHJvdG90
eXBlIG9iamVjdCBmb3IgdGhlIGVsZW1lbnRzIGJlaW5nIHJlZ2lzdGVyZWQuCisKKyAgICAgICAg
QWx0aG91Z2ggdGhpcyBmaXJzdCB2ZXJzaW9uIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgb3B0aW9uYWwg
cHJvdG90eXBlCisgICAgICAgIHBhcmFtZXRlciB5ZXQsIFY4SFRNTEN1c3RvbUVsZW1lbnQgY2xh
c3MgaXMgbWFkZSBmb3IgYSBwbHVtYmluZworICAgICAgICBmb3Igc3VwcG9ydGluZyBzdWNoIGZl
YXR1cmVzIGluIGNvbWluZyBjaGFuZ2VzLiBUaGlzIGNsYXNzCisgICAgICAgIGVuY2Fwc3VsYXRl
cyBKUyB3cmFwcGVyIG9iamVjdCBjcmVhdGlvbiBmb3IgY3VzdG9tIGVsZW1lbnQKKyAgICAgICAg
aW5zdGFuY2VzLiBGb3IgZXhhbXBsZSwgaXQgdGFrZXMgY2FyZSBvZiBwcm90b3R5cGUgY2hhaW4g
c2V0dXAuIEFzCisgICAgICAgIHdlIHN1cHBvcnQgdGhlICJwcm90b3R5cGUiIG9wdGlvbmFsIHBh
cmFtZXRlciBmb3IgZG9jdW1lbnQucmVnaXN0ZXIoKSwKKyAgICAgICAgdGhpcyBwbHVtYmluZyB3
aWxsIGJlIGV4dGVuZGVkLgorCisgICAgICAgID0gQ3VzdG9tIERPTSBlbGVtZW50cyBhbmQgbXVs
dGlwbGUgd29ybGRzCisKKyAgICAgICAgSW4gdGhpcyBwYXRjaCwgY3VzdG9tIGVsZW1lbnQgcmVn
aXN0cmF0aW9uIGFuZCBpbnN0YW50aWF0aW9uIGlzIG5vdCBhbGxvd2VkCisgICAgICAgIGluIG5v
bi1tYWluIHdvcmxkIGFuZCBkb2N1bWVudC5yZWdpc3RlcigpIEFQSSBqdXN0IGZhaWxzIHRoZXJl
LgorCisgICAgICAgIFRlc3RzOiBmYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFz
aWMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVy
LXJlZW50cmFudC1udWxsLWNvbnN0cnVjdG9yLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZG9t
L2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1yZWVudHJhbnQtcmV0dXJuaW5nLWZha2UuaHRtbAor
ICAgICAgICAgICAgICAgZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFu
dC10aHJvd2luZy1jb25zdHJ1Y3Rvci5odG1sCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5t
YWtlOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBiaW5kaW5ncy9nZW5lcmlj
L1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2dlbmVyaWMv
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5oOgorICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6Y3VzdG9tRE9NRWxlbWVudHNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNldEN1c3RvbURPTUVsZW1lbnRzKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0N1c3Rv
bUVsZW1lbnRIZWxwZXJzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVt
ZW50SGVscGVyczo6aW5pdGlhbGl6ZUNvbnN0cnVjdG9yV3JhcHBlcik6CisgICAgICAgIChXZWJD
b3JlOjpoYXNQcm90b3R5cGVJbkNoYWluKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1l
bnRIZWxwZXJzOjppc1ZhbGlkUHJvdG90eXBlUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkN1c3RvbUVsZW1lbnRIZWxwZXJzOjppc0ZlYXR1cmVBbGxvd2VkKToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9DdXN0b21FbGVtZW50SGVscGVycy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oLgorICAgICAgICAoQ3VzdG9tRWxl
bWVudEhlbHBlcnMpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpWOEFkYXB0b3JGdW5jdGlvbjo6Z2V0VGVtcGxh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhBZGFwdG9yRnVuY3Rpb246OmNvbmZpZ3VyZVRlbXBs
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4QWRhcHRvckZ1bmN0aW9uOjppbnZvY2F0aW9uQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VjhBZGFwdG9yRnVuY3Rpb246OndyYXApOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmg6IEFkZGVkLgorICAgICAgICAo
VjhBZGFwdG9yRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6VjhBZGFwdG9yRnVuY3Rpb246
OnVud3JhcCk6CisgICAgICAgIChXZWJDb3JlOjpWOEFkYXB0b3JGdW5jdGlvbjo6Z2V0KToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VjhET01XcmFwcGVyOjp0b0Z1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBl
cjo6ZnJvbUZ1bmN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaDoK
KyAgICAgICAgKFY4RE9NV3JhcHBlcik6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhIVE1MQ3Vz
dG9tRWxlbWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VjhIVE1MQ3VzdG9tRWxl
bWVudDo6Y3JlYXRlV3JhcHBlcik6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhIVE1MQ3VzdG9t
RWxlbWVudC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhpZGRl
blByb3BlcnR5TmFtZS5oLgorICAgICAgICAoVjhIVE1MQ3VzdG9tRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpWOEhUTUxDdXN0b21FbGVtZW50Ojp0b1Y4KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxDdXN0b21FbGVtZW50Ojp0b1Y4KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEhpZGRl
blByb3BlcnR5TmFtZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUVs
ZW1lbnRDb25zdHJ1Y3RvckN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VjhD
dXN0b21FbGVtZW50Q29uc3RydWN0b3I6OmNhbGxBc0Z1bmN0aW9uQ2FsbGJhY2spOgorICAgICAg
ICAqIGRvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oLgorICAgICAgICAoV2Vi
Q29yZTo6Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjpDdXN0b21FbGVtZW50Q29uc3RydWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjp+Q3VzdG9tRWxlbWVu
dENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rv
cjo6d2lsbERlc3Ryb3lEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50
Q29uc3RydWN0b3I6OmNyZWF0ZUVsZW1lbnQpOgorICAgICAgICAqIGRvbS9DdXN0b21FbGVtZW50
Q29uc3RydWN0b3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhI
aWRkZW5Qcm9wZXJ0eU5hbWUuaC4KKyAgICAgICAgKEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcik6
CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6OmRvY3VtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6dGFnTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6Om5hbWUpOgorICAgICAg
ICAqIGRvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBk
b20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpD
dXN0b21FbGVtZW50UmVnaXN0cnk6OkN1c3RvbUVsZW1lbnRSZWdpc3RyeSk6CisgICAgICAgIChX
ZWJDb3JlOjpDdXN0b21FbGVtZW50UmVnaXN0cnk6On5DdXN0b21FbGVtZW50UmVnaXN0cnkpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5Ojpjb25zdHJ1Y3Rvck9mKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6aXNWYWxpZE5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpyZWdpc3RlckVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpmaW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6Y3JlYXRlRWxlbWVudCk6CisgICAg
ICAgICogZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5oOiBBZGRlZC4KKyAgICAgICAgKEN1c3Rv
bUVsZW1lbnRSZWdpc3RyeSk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjpyZW1vdmVkTGFzdFJlZik6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6cmVnaXN0ZXJFbGVtZW50KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAg
ICAgICAgKERvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWdpc3RyeSk6
CisgICAgICAgICogZG9tL21ha2VfbmFtZXMucGw6CisgICAgICAgIChwcmludFdyYXBwZXJGYWN0
b3J5Q3BwRmlsZSk6CisgICAgICAgICogaHRtbC9IVE1MRG9jdW1lbnQuaWRsOgorCisyMDEzLTAx
LTI5ICBIYWppbWUgTW9ycml0YSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBbQ3Vz
dG9tIEVsZW1lbnRzXSBJbXBsZW1lbnQgYmFyZS1ib25lIGRvY3VtZW50LnJlZ2lzdGVyKCkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDIyOQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY2hhbmdl
IGltcGxlbWVudHMgcHJlZml4ZWQgdmVyc2lvbiBvZiBkb2N1bWVudC5yZWdpc3RlcigpLCB3aXRo
IG1pbmltYWwgZmVhdHVyZSBzdXBwb3J0LgorICAgICAgICAtIFRoZSBmZWF0dXJlIGlzIGd1YXJk
ZWQgYnkgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykgYW5kIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OmN1c3RvbURPTUVsZW1lbnRzRW5hYmxlZCgpLgorICAgICAgICAtIFRoaXMgYmFyZS1ib25lIHZl
cnNpb24gb25seSByZWNvZ25pemVzICJuYW1lIiBwYXJhbWV0ZXIgYW5kIGlnbm9yZXMgYW55IG90
aGVyIG9wdGlvbmFsIHBhcmFtZXRlcnMuCisgICAgICAgIC0gQ3VycmVudGx5IG9ubHkgVjggaXMg
c3VwcG9ydGVkLiBKU0MgYmluZGluZyBuZWVkcyBpdHMgb3duIGJpbmRpbmcgaW1wbGVtZW50YXRp
b24uCisKKyAgICAgICAgPSBNYWpvciBuZXcgY2xhc3NlcyB1bmRlciBkb20vOgorCisgICAgICAg
IFRoZSBkb20gbW9kdWxlIGhhcyB0d28gbmV3IGNsYXNzZXM6CisgICAgICAgIC0gQ3VzdG9tRWxl
bWVudENvbnN0cnVjdG9yOiBBIHJldHVybiB2YWx1ZSBvZiBkb2N1bWVudC5yZWdpc3RlcigpCisg
ICAgICAgICAgd2hpY2ggaG9sZHMgdGhlIGN1c3RvbSBlbGVtZW50IGRlZmluaXRpb24uCisgICAg
ICAgIC0gQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5OiBBIGNvbGxlY3Rpb24gb2YgQ3VzdG9tRWxlbWVu
dENvbnN0cnVjdG9yIG9iamVjdHMuCisgICAgICAgICAgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5IGlu
c3RhbmNlIGlzIGNyZWF0ZWQgcGVyIERvY3VtZW50IGFuZCBpcyBvd25lZCBieSB0aGUgRG9jdW1l
bnQuCisKKyAgICAgICAgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yIGtub3dzIHRoZSBkZWZpbml0
aW9uIG9mIGVhY2ggY3VzdG9tCisgICAgICAgIGVsZW1lbnQsIHdoaWNoIGlzIHJlZ2lzdGVyZWQg
YnkgZG9jdW1lbnQucmVnaXN0ZXIoKS4gVGhlIG5hbWUgYW5kCisgICAgICAgIG90aGVyIG9wdGlv
bnMgYXJlIGhlbGQgYnkgdGhpcyBvYmplY3QuIEN1c3RvbUVsZW1lbnRSZWdpc3RyeSBvd25zIGEg
c2V0CisgICAgICAgIG9mIHRoZSByZWdpc3RlcmVkIGNvbnN0cnVjdG9ycy4gVGhlIHJlZ2lzdHJ5
IGd1YXJhbnRlZXMgaW52YXJpYW50cworICAgICAgICBsaWtlIHZhbGlkaXR5IGFuZCB1bmlxdWVu
ZXNzIG9mIHRoZSBlbGVtZW50IG5hbWVzLgorCisgICAgICAgID0gQSBjaGFuZ2Ugb24gbWFrZV9u
YW1lcy5wbAorCisgICAgICAgIFRoaXMgY2hhbmdlIHR3ZWFrcyBtYWtlX25hbWVzLnBsIChvciBn
ZW5lcmF0ZWQgSFRNTEVsZW1lbnRGYWN0b3J5KQorICAgICAgICB0byBob29rIHRoZSBjcmVhdGlv
bnMgb2YgdW5rbm93biBlbGVtZW50cy4gU29tZSBvZiBlbGVtZW50IG5hbWVzCisgICAgICAgIHdo
aWNoIGNvbWUgdG8gdGhlIGZhbGxiYWNrIHBhdGggY2FuIGJlIG9uZSBvZiByZWdpc3RlcmVkIGN1
c3RvbQorICAgICAgICBlbGVtZW50LgorCisgICAgICAgID0gW1Y4V3JhcEFzRnVuY3Rpb25dIGV4
dGVuZGVkIGF0dHJpYnV0ZToKKworICAgICAgICBUaGUgZG9jdW1lbnQucmVnaXN0ZXIoKSBBUEkg
cmV0dXJucyBhIGNvbnN0cnVjdG9yCisgICAgICAgIGZ1bmN0aW9uLiBIb3dldmVyLCB0aGUgVjgg
YmluZGluZyBjdXJyZW50bHkgZG9lc24ndCBzdXBwb3J0IGl0LiBUbworICAgICAgICBtYWtlIGl0
IHBvc3NpYmxlLCB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzICJWOFdyYXBBc0Z1bmN0aW9uIgorICAg
ICAgICBleHRlbmRlZCBhdHRyaWJ1dGUgZm9yIGFubm90YXRpbmcgQ3VzdG9tRWxlbWVudENvbnN0
cnVjdG9yIElETAorICAgICAgICBpbnRlcmZhY2UuCisKKyAgICAgICAgVjhXcmFwQXNGdW5jdGlv
biB3cmFwcyB0aGUgYW5ub3RhdGVkIGludGVyZmFjZSB3aXRoIGEgSmF2YVNjcmlwdAorICAgICAg
ICBmdW5jdGlvbiwgd2hpY2ggY2FsbHMgdGhlIG9yaWdpbmFsIG9iamVjdCBhcyBhIGZ1bmN0aW9u
LCBvciBhcyBhCisgICAgICAgIGNvbnN0cnVjdG9yCisKKyAgICAgICAgV2l0aCB0aGlzIHdyYXBw
ZXIgZnVuY3Rpb24sIHRoZXJlIGFyZSB0d28gbGV2ZWxzIG9mIGluZGlyZWN0aW9uCisgICAgICAg
IGJldHdlZW4gbmF0aXZlIEMrKyBvYmplY3QgYW5kIGF1dGhvci12aXNpYmxlIEpTIGZ1bmN0aW9u
OgorCisgICAgICAgIFtKUyBBZGFwdG9yIEZpY3Rpb25dIDwtKGhpZGRlbiBwcm9wZXJ0eSktPiBb
SlMgV3JhcHBlciBPYmplY3RdIC0oaW50ZXJuYWwgZmllbGQpLT4gW0MrKyBOYXRpdmUgb2JqZWN0
XQorCisgICAgICAgIFRoZSBjb2RlIGdlbmVyYXRvciBnZW5lcmF0ZXMgdGhlIGJpbmRpbmcgY29k
ZSB3aGljaCBkZWFscyB3aXRoCisgICAgICAgIHRoaXMgaW5kaXJlY3Rpb24uICBBbHNvLCB0aGVy
ZSBpcyBhIHNldCBvZiBoZWxwZXIgZnVuY3Rpb25zIGluCisgICAgICAgIFY4QWRhcHRvckZ1bmN0
aW9uLmgvY3BwIHdoaWNoIHRha2UgY2FyZSBvZiB0aGlzIGluZGlyZWN0aW9uLgorICAgICAgICBW
OERPTVdyYXBwZXIuY3BwL2ggd29ya3MgYXMgYSBmYWNhZGUgZm9yIHRoZXNlIEFQSXMgYW5kIGlz
IHVzZWQgZnJvbQorICAgICAgICB0aGUgZ2VuZXJhdGVkIGNvZGUuCisKKyAgICAgICAgVGhpcyBy
ZWR1bmRhbmN5IGNvbWVzIGZyb20gbGltaXRhdGlvbnMgb2YgYm90aCBWOCBiaW5kaW5ncyBhbmQg
VjgKKyAgICAgICAgZW1iZWRkaW5nIEFQSS4gU2VlIGJ1ZyAxMDgxMzggZm9yIGRldGFpbHMuCisK
KyAgICAgICAgPSBWOEhUTUxDdXN0b21FbGVtZW50CisKKyAgICAgICAgVW5saWtlIGJ1aWx0LWlu
IEhUTUwgZWxlbWVudHMsIGFueSBjdXN0b20gZWxlbWVudCBoYXMgbm8KKyAgICAgICAgY29ycmVz
cG9uZGluZyBDKysgY2xhc3MuIEluc3RlYWQsIGRvY3VtZW50LnJlZ2lzdGVyKCkgc2hvdWxkIGFs
bG93CisgICAgICAgIHBhc3NpbmcgYSBwcm90b3R5cGUgb2JqZWN0IGZvciB0aGUgZWxlbWVudHMg
YmVpbmcgcmVnaXN0ZXJlZC4KKworICAgICAgICBBbHRob3VnaCB0aGlzIGZpcnN0IHZlcnNpb24g
ZG9lc24ndCBzdXBwb3J0IHRoZSBvcHRpb25hbCBwcm90b3R5cGUKKyAgICAgICAgcGFyYW1ldGVy
IHlldCwgVjhIVE1MQ3VzdG9tRWxlbWVudCBjbGFzcyBpcyBtYWRlIGZvciBhIHBsdW1iaW5nCisg
ICAgICAgIGZvciBzdXBwb3J0aW5nIHN1Y2ggZmVhdHVyZXMgaW4gY29taW5nIGNoYW5nZXMuIFRo
aXMgY2xhc3MKKyAgICAgICAgZW5jYXBzdWxhdGVzIEpTIHdyYXBwZXIgb2JqZWN0IGNyZWF0aW9u
IGZvciBjdXN0b20gZWxlbWVudAorICAgICAgICBpbnN0YW5jZXMuIEZvciBleGFtcGxlLCBpdCB0
YWtlcyBjYXJlIG9mIHByb3RvdHlwZSBjaGFpbiBzZXR1cC4gQXMKKyAgICAgICAgd2Ugc3VwcG9y
dCB0aGUgInByb3RvdHlwZSIgb3B0aW9uYWwgcGFyYW1ldGVyIGZvciBkb2N1bWVudC5yZWdpc3Rl
cigpLAorICAgICAgICB0aGlzIHBsdW1iaW5nIHdpbGwgYmUgZXh0ZW5kZWQuCisKKyAgICAgICAg
PSBDdXN0b20gRE9NIGVsZW1lbnRzIGFuZCBtdWx0aXBsZSB3b3JsZHMKKworICAgICAgICBJbiB0
aGlzIHBhdGNoLCBjdXN0b20gZWxlbWVudCByZWdpc3RyYXRpb24gYW5kIGluc3RhbnRpYXRpb24g
aXMgbm90IGFsbG93ZWQKKyAgICAgICAgaW4gbm9uLW1haW4gd29ybGQgYW5kIGRvY3VtZW50LnJl
Z2lzdGVyKCkgQVBJIGp1c3QgZmFpbHMgdGhlcmUuCisKKyAgICAgICAgVGVzdDogZmFzdC9kb20v
Y3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLWJhc2ljLmh0bWwKKworICAgICAgICAqIERlcml2ZWRT
b3VyY2VzLm1ha2U6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGJpbmRpbmdz
L2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHA6CisgICAgICAgICogYmluZGluZ3Mv
Z2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmg6CisgICAgICAgIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmN1
c3RvbURPTUVsZW1lbnRzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzZXRDdXN0b21ET01FbGVtZW50cyk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dDoKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9DdXN0b21FbGVtZW50SGVscGVycy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q3VzdG9tRWxlbWVudEhlbHBlcnM6OmluaXRpYWxpemVDb25zdHJ1Y3RvcldyYXBwZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudEhlbHBlcnM6OmRlZmF1bHRQcm90b3R5cGVP
Zik6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50SGVscGVyczo6aXNDdXN0b21FbGVt
ZW50c0FsbG93ZWQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJz
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVy
dHlOYW1lLmguCisgICAgICAgIChDdXN0b21FbGVtZW50SGVscGVycyk6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvVjhBZGFwdG9yRnVuY3Rpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlY4QWRhcHRvckZ1bmN0aW9uOjpnZXRUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOEFk
YXB0b3JGdW5jdGlvbjo6Y29uZmlndXJlVGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhB
ZGFwdG9yRnVuY3Rpb246Omludm9jYXRpb25DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpW
OEFkYXB0b3JGdW5jdGlvbjo6d3JhcCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhBZGFwdG9y
RnVuY3Rpb24uaDogQWRkZWQuCisgICAgICAgIChWOEFkYXB0b3JGdW5jdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpWOEFkYXB0b3JGdW5jdGlvbjo6dW53cmFwKToKKyAgICAgICAgKFdlYkNvcmU6
OlY4QWRhcHRvckZ1bmN0aW9uOjpnZXQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV3Jh
cHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OnRvRnVuY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpmcm9tRnVuY3Rpb24pOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oOgorICAgICAgICAoVjhET01XcmFwcGVyKToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50LmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpWOEhUTUxDdXN0b21FbGVtZW50OjpjcmVhdGVXcmFwcGVyKToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50Lmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmguCisgICAgICAgIChW
OEhUTUxDdXN0b21FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlY4SFRNTEN1c3RvbUVsZW1l
bnQ6OnRvVjgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEN1c3RvbUVsZW1lbnQ6OnRvVjgpOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmg6CisgICAgICAgICog
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yQ3VzdG9tLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpWOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y2Fs
bEFzRnVuY3Rpb25DYWxsYmFjayk6CisgICAgICAgICogZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1
Y3Rvci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SGlkZGVu
UHJvcGVydHlOYW1lLmguCisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50Q29uc3RydWN0
b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6
OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVt
ZW50Q29uc3RydWN0b3I6On5DdXN0b21FbGVtZW50Q29uc3RydWN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjp3aWxsRGVzdHJveURvY3VtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlRWxlbWVudCk6
CisgICAgICAgICogZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oLgorICAgICAg
ICAoQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVs
ZW1lbnRDb25zdHJ1Y3Rvcjo6ZG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxl
bWVudENvbnN0cnVjdG9yOjp0YWdOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1l
bnRDb25zdHJ1Y3Rvcjo6bmFtZSk6CisgICAgICAgICogZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1
Y3Rvci5pZGw6IEFkZGVkLgorICAgICAgICAqIGRvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6Q3VzdG9t
RWxlbWVudFJlZ2lzdHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWdpc3Ry
eTo6fkN1c3RvbUVsZW1lbnRSZWdpc3RyeSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVt
ZW50UmVnaXN0cnk6OmNvbnN0cnVjdG9yT2YpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxl
bWVudFJlZ2lzdHJ5Ojppc1ZhbGlkTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVt
ZW50UmVnaXN0cnk6OnJlZ2lzdGVyRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21F
bGVtZW50UmVnaXN0cnk6OmZpbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJl
Z2lzdHJ5OjpjcmVhdGVFbGVtZW50KToKKyAgICAgICAgKiBkb20vQ3VzdG9tRWxlbWVudFJlZ2lz
dHJ5Lmg6IEFkZGVkLgorICAgICAgICAoQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5KToKKyAgICAgICAg
KiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlbW92ZWRM
YXN0UmVmKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWdpc3RlckVsZW1lbnQpOgor
ICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJl
Z2lzdHJ5KToKKyAgICAgICAgKiBkb20vbWFrZV9uYW1lcy5wbDoKKyAgICAgICAgKHByaW50V3Jh
cHBlckZhY3RvcnlDcHBGaWxlKToKKyAgICAgICAgKiBodG1sL0hUTUxEb2N1bWVudC5pZGw6CisK
IDIwMTMtMDItMTQgIEhheWF0byBJdG8gIDxoYXlhdG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IEZhY3RvciBFdmVudCByZXRhcmdldGluZyBjb2RlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpp
bmRleCAxZTU1YmM0ZWE2Yzk2OGU4NzBlNzcyMjVmYjQyNTg0NTg2MTZiNGUzLi44NTcyMzlkMjQw
MTZkZGNlZTMwMzM4M2Y2ZTQzNzA3NTdjNDgxODI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDIwIEBACisyMDEzLTAxLTI3ICBIYWppbWUgTW9ycml0YSAgPG1vcnJpdGFA
Z29vZ2xlLmNvbT4KKworICAgICAgICBbQ3VzdG9tIEVsZW1lbnRzXSBJbXBsZW1lbnQgYmFyZS1i
b25lIGRvY3VtZW50LnJlZ2lzdGVyKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwMDIyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZGVkIGVuYWJsZUN1c3RvbURPTUVsZW1lbnRzIGZsYWcuCisKKyAg
ICAgICAgKiBmZWF0dXJlcy5neXBpOgorICAgICAgICAqIHB1YmxpYy9XZWJSdW50aW1lRmVhdHVy
ZXMuaDoKKyAgICAgICAgKFdlYlJ1bnRpbWVGZWF0dXJlcyk6CisgICAgICAgICogc3JjL1dlYlJ1
bnRpbWVGZWF0dXJlcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJ1bnRpbWVGZWF0dXJlczo6
ZW5hYmxlQ3VzdG9tRE9NRWxlbWVudHMpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViUnVudGltZUZlYXR1cmVzOjppc0N1c3RvbURPTUVsZW1lbnRzRW5hYmxlZCk6CisK
IDIwMTMtMDItMTQgIERhdmlkIFRyYWlub3IgIDxkdHJhaW5vckBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgW2Nocm9taXVtXSBObyB0cmlnZ2VyaW5nIGF1dG9maWxsIG9uIHVuZm9jdXMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViQ29y
ZS9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IDM3NzIyNTJlNTA0NjI5ZmY3MzBkMjE2MzA2NGFi
N2FjM2ZjNGI2MGMuLjFkMzg3Mjg0NjJkZTdkZDM3MzIzMmI2MzBjYjNlOTVkZmVhMGUwMTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNl
L1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMjIwLDYgKzIyMCw3IEBAIEJJTkRJTkdf
SURMUyA9IFwKICAgICAkKFdlYkNvcmUpL2RvbS9DbGlwYm9hcmQuaWRsIFwKICAgICAkKFdlYkNv
cmUpL2RvbS9Db21tZW50LmlkbCBcCiAgICAgJChXZWJDb3JlKS9kb20vQ29tcG9zaXRpb25FdmVu
dC5pZGwgXAorICAgICQoV2ViQ29yZSkvZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5pZGwg
XAogICAgICQoV2ViQ29yZSkvZG9tL0N1c3RvbUV2ZW50LmlkbCBcCiAgICAgJChXZWJDb3JlKS9k
b20vRE9NQ29yZUV4Y2VwdGlvbi5pZGwgXAogICAgICQoV2ViQ29yZSkvZG9tL0RPTUVycm9yLmlk
bCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKaW5kZXggM2ZmYTY1NTgwMDAzNTRlMzA5Y2VkMzQ4ZjRkMjIzYjE0
ZWYyY2MyNS4uNDRhNTFhYjg3ZWEwMTlhMjNjMWM0MTM2OWE3YTZhMzg4MTQ3MzkzYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQpAQCAtMjAwLDYgKzIwMCw3IEBACiAgICAgICAgICAgICAnZG9tL0NsaXBib2Fy
ZC5pZGwnLAogICAgICAgICAgICAgJ2RvbS9Db21tZW50LmlkbCcsCiAgICAgICAgICAgICAnZG9t
L0NvbXBvc2l0aW9uRXZlbnQuaWRsJywKKyAgICAgICAgICAgICdkb20vQ3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yLmlkbCcsCiAgICAgICAgICAgICAnZG9tL0N1c3RvbUV2ZW50LmlkbCcsCiAgICAg
ICAgICAgICAnZG9tL0RPTUNvcmVFeGNlcHRpb24uaWRsJywKICAgICAgICAgICAgICdkb20vRE9N
RXJyb3IuaWRsJywKQEAgLTExODYsNiArMTE4Nyw4IEBACiAgICAgICAgICAgICAnYmluZGluZ3Mv
djgvQXJyYXlWYWx1ZS5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9CaW5kaW5nU3RhdGUu
Y3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9CaW5kaW5nU3RhdGUuaCcsCisgICAgICAg
ICAgICAnYmluZGluZ3MvdjgvQ3VzdG9tRWxlbWVudEhlbHBlcnMuY3BwJywKKyAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9DdXN0b21FbGVtZW50SGVscGVycy5oJywKICAgICAgICAgICAgICdiaW5k
aW5ncy92OC9ET01EYXRhU3RvcmUuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9ET01E
YXRhU3RvcmUuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvRE9NUmVxdWVzdFN0YXRlLmgn
LApAQCAtMTI1NCw2ICsxMjU3LDggQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9TaGFyZWRQ
ZXJzaXN0ZW50LmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExp
c3RlbmVyLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlz
dGVuZXIuaCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhBZGFwdG9yRnVuY3Rpb24uY3Bw
JywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5oJywKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9WOEJpbmRpbmcuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5n
cy92OC9WOEJpbmRpbmcuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhCaW5kaW5nTWFj
cm9zLmgnLApAQCAtMTI3NSw2ICsxMjgwLDggQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9W
OEdDQ29udHJvbGxlci5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEdDRm9yQ29udGV4
dERpc3Bvc2UuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEdDRm9yQ29udGV4dERp
c3Bvc2UuaCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVudC5j
cHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4SFRNTEN1c3RvbUVsZW1lbnQuaCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuY3BwJywKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oJywKICAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9WOEluaXRpYWxpemVyLmNwcCcsCkBAIC0xMzM1LDYgKzEzNDIsNyBAQAog
ICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENvbnNvbGVDdXN0b20uY3BwJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDb29yZGluYXRlc0N1c3RvbS5jcHAnLAog
ICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENyeXB0b0N1c3RvbS5jcHAnLAorICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvckN1
c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUV2ZW50
Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FM
U3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEN1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAnLApAQCAtMjc3MCw2ICsyNzc4LDEwIEBA
CiAgICAgICAgICAgICAnZG9tL0NvbnRleHRGZWF0dXJlcy5jcHAnLAogICAgICAgICAgICAgJ2Rv
bS9Db250ZXh0RmVhdHVyZXMuaCcsCiAgICAgICAgICAgICAnZG9tL0Nyb3NzVGhyZWFkVGFzay5o
JywKKyAgICAgICAgICAgICdkb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmNwcCcsCisgICAg
ICAgICAgICAnZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oJywKKyAgICAgICAgICAgICdk
b20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmNwcCcsCisgICAgICAgICAgICAnZG9tL0N1c3RvbUVs
ZW1lbnRSZWdpc3RyeS5oJywKICAgICAgICAgICAgICdkb20vQ3VzdG9tRXZlbnQuY3BwJywKICAg
ICAgICAgICAgICdkb20vQ3VzdG9tRXZlbnQuaCcsCiAgICAgICAgICAgICAnZG9tL0RPTUFsbElu
T25lLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1
bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJp
Yy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNwcAppbmRleCAyYzY4ODc0MDQ1N2MwNGI3Y2IwZDJh
NzZmMjRhZjM2NDY1YTRkYzk0Li4yYjlhNGI5ZjU1ZDgwNTViZDQyNWIxZjVmZjk2NDk1ZWFkZDY3
MmFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVF
bmFibGVkRmVhdHVyZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMv
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHAKQEAgLTE4OSw2ICsxODksMTAgQEAgYm9vbCBSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjppc1NoYWRvd0RPTUVuYWJsZWQgPSBmYWxzZTsKIGJvb2wgUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6aXNBdXRob3JTaGFkb3dET01Gb3JBbnlFbGVtZW50RW5hYmxl
ZCA9IGZhbHNlOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorYm9vbCBS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjppc0N1c3RvbURPTUVsZW1lbnRzRW5hYmxlZCA9IGZhbHNl
OworI2VuZGlmCisKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQogYm9vbCBSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjppc1N0eWxlU2NvcGVkRW5hYmxlZCA9IGZhbHNlOwogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVy
ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0
dXJlcy5oCmluZGV4IDUyNjZmMzBhODhhN2FlMjFlZWQ5NWM0MzI1MjZjZTIyNzE4NTcxNGUuLjMz
ODg5ZDY3MDExYzU4ZGI1M2ViMjY0MjdiNGMwYzAwYjlkNzFkYzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5o
CkBAIC0yMTAsNiArMjEwLDExIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRBdXRob3JT
aGFkb3dET01Gb3JBbnlFbGVtZW50RW5hYmxlZChib29sIGlzRW5hYmxlZCkgeyBpc0F1dGhvclNo
YWRvd0RPTUZvckFueUVsZW1lbnRFbmFibGVkID0gaXNFbmFibGVkOyB9CiAjZW5kaWYKIAorI2lm
IEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisgICAgc3RhdGljIGJvb2wgY3VzdG9tRE9NRWxlbWVu
dHNFbmFibGVkKCkgeyByZXR1cm4gaXNDdXN0b21ET01FbGVtZW50c0VuYWJsZWQ7IH0KKyAgICBz
dGF0aWMgdm9pZCBzZXRDdXN0b21ET01FbGVtZW50cyhib29sIGlzRW5hYmxlZCkgeyBpc0N1c3Rv
bURPTUVsZW1lbnRzRW5hYmxlZCA9IGlzRW5hYmxlZDsgfQorI2VuZGlmCisKICNpZiBFTkFCTEUo
U1RZTEVfU0NPUEVEKQogICAgIHN0YXRpYyBib29sIHN0eWxlU2NvcGVkRW5hYmxlZCgpIHsgcmV0
dXJuIGlzU3R5bGVTY29wZWRFbmFibGVkOyB9CiAgICAgc3RhdGljIHZvaWQgc2V0U3R5bGVTY29w
ZWRFbmFibGVkKGJvb2wgaXNFbmFibGVkKSB7IGlzU3R5bGVTY29wZWRFbmFibGVkID0gaXNFbmFi
bGVkOyB9CkBAIC0zMzQsNiArMzM5LDEwIEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGJvb2wgaXNB
dXRob3JTaGFkb3dET01Gb3JBbnlFbGVtZW50RW5hYmxlZDsKICNlbmRpZgogCisjaWYgRU5BQkxF
KENVU1RPTV9FTEVNRU5UUykKKyAgICBzdGF0aWMgYm9vbCBpc0N1c3RvbURPTUVsZW1lbnRzRW5h
YmxlZDsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKICAgICBzdGF0aWMgYm9v
bCBpc1N0eWxlU2NvcGVkRW5hYmxlZDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCA2ZmYyYzA1MmZkODZhMjY3
MDM5YWFlMWU0ZDY2Yzk4MjJkMDQ1ZmRiLi42NGFlYjY1MjcwMjJmZWUyOGJhNTExOTQzYmM5NDgw
MWQ5YjlkNTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JWOC5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JWOC5wbQpAQCAtMzUyLDEzICszNTIsMjAgQEAgRU5ECiAgICAgICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICJmYWxzZTtcbiIpOwogICAgIH0KIAorICAgIG15ICRmcm9tRnVuY3Rp
b25PcGVuaW5nID0gIiI7CisgICAgbXkgJGZyb21GdW5jdGlvbkNsb3NpbmcgPSAiIjsKKyAgICBp
ZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlY4V3JhcEFzRnVuY3Rpb24ifSkg
eworICAgICAgICAkZnJvbUZ1bmN0aW9uT3BlbmluZyA9ICJWOERPTVdyYXBwZXI6OmZyb21GdW5j
dGlvbigiOworICAgICAgICAkZnJvbUZ1bmN0aW9uQ2xvc2luZyA9ICIpIjsKKyAgICB9CisKICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CiAgICAgc3RhdGljIGJvb2wgSGFzSW5zdGFu
Y2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+LCB2ODo6SXNvbGF0ZSopOwogICAgIHN0YXRpYyB2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0UmF3VGVtcGxhdGUodjg6Oklzb2xh
dGUqKTsKICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdl
dFRlbXBsYXRlKHY4OjpJc29sYXRlKik7CiAgICAgc3RhdGljICR7bmF0aXZlVHlwZX0qIHRvTmF0
aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KQogICAgIHsKLSAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8JHtuYXRpdmVUeXBlfSo+KG9iamVjdC0+R2V0QWxpZ25lZFBvaW50
ZXJGcm9tSW50ZXJuYWxGaWVsZCh2OERPTVdyYXBwZXJPYmplY3RJbmRleCkpOworICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwke25hdGl2ZVR5cGV9Kj4oJHtmcm9tRnVuY3Rpb25PcGVu
aW5nfW9iamVjdCR7ZnJvbUZ1bmN0aW9uQ2xvc2luZ30tPkdldEFsaWduZWRQb2ludGVyRnJvbUlu
dGVybmFsRmllbGQodjhET01XcmFwcGVyT2JqZWN0SW5kZXgpKTsKICAgICB9CiAgICAgc3RhdGlj
IHZvaWQgZGVyZWZPYmplY3Qodm9pZCopOwogICAgIHN0YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5m
bzsKQEAgLTUzOSw2ICs1NDYsOSBAQCBFTkQKICAgICB9IGVsc2UgewogCiAgICAgICAgIG15ICRj
cmVhdGVXcmFwcGVyQ2FsbCA9ICRjdXN0b21XcmFwID8gIiR7djhJbnRlcmZhY2VOYW1lfTo6d3Jh
cCIgOiAiJHt2OEludGVyZmFjZU5hbWV9OjpjcmVhdGVXcmFwcGVyIjsKKyAgICAgICAgbXkgJHJl
dHVybmluZ1dyYXBwZXIgPSAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVjhXcmFw
QXNGdW5jdGlvbiJ9ID8gIlY4RE9NV3JhcHBlcjo6dG9GdW5jdGlvbih3cmFwcGVyKSIgOiAid3Jh
cHBlciI7CisgICAgICAgIG15ICRyZXR1cm5pbmdDcmVhdGVkV3JhcHBlck9wZW5pbmcgPSAkaW50
ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVjhXcmFwQXNGdW5jdGlvbiJ9ID8gIlY4RE9N
V3JhcHBlcjo6dG9GdW5jdGlvbigiIDogIiI7CisgICAgICAgIG15ICRyZXR1cm5pbmdDcmVhdGVk
V3JhcHBlckNsb3NpbmcgPSAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVjhXcmFw
QXNGdW5jdGlvbiJ9ID8gIiwgaW1wbC0+bmFtZSgpLCBpc29sYXRlKSIgOiAiIjsKIAogICAgICAg
ICBpZiAoJGN1c3RvbVdyYXApIHsKICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIDw8
RU5EKTsKQEAgLTU1Miw3ICs1NjIsNyBAQCBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3
cmFwKCR7bmF0aXZlVHlwZX0qIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gYwogewogICAg
IEFTU0VSVChpbXBsKTsKICAgICBBU1NFUlQoRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyKGltcGws
IGlzb2xhdGUpLklzRW1wdHkoKSk7Ci0gICAgcmV0dXJuICRjcmVhdGVXcmFwcGVyQ2FsbChpbXBs
LCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworICAgIHJldHVybiAke3JldHVybmluZ0NyZWF0
ZWRXcmFwcGVyT3BlbmluZ30kY3JlYXRlV3JhcHBlckNhbGwoaW1wbCwgY3JlYXRpb25Db250ZXh0
LCBpc29sYXRlKSR7cmV0dXJuaW5nQ3JlYXRlZFdyYXBwZXJDbG9zaW5nfTsKIH0KIEVORAogICAg
ICAgICB9CkBAIC01NjUsNyArNTc1LDcgQEAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0
b1Y4KCR7bmF0aXZlVHlwZX0qIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3IKICAgICAg
ICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhpc29sYXRlKTsKICAgICB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gd3JhcHBlciA9IERPTURhdGFTdG9yZTo6Z2V0V3JhcHBlcihpbXBsLCBpc29sYXRlKTsK
ICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAg
ICAgICAgcmV0dXJuICRyZXR1cm5pbmdXcmFwcGVyOwogICAgIHJldHVybiB3cmFwKGltcGwsIGNy
ZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKQEAgLTU3Niw3ICs1ODYsNyBAQCBpbmxpbmUg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhGYXN0KCR7bmF0aXZlVHlwZX0qIGltcGwsIGNvbnN0
IEhvbGRlckNvbnRhaW5lcgogICAgICAgICByZXR1cm4gdjhOdWxsKGNvbnRhaW5lci5HZXRJc29s
YXRlKCkpOwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IERPTURhdGFTdG9y
ZTo6Z2V0V3JhcHBlckZhc3QoaW1wbCwgY29udGFpbmVyLCB3cmFwcGFibGUpOwogICAgIGlmICgh
d3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB3cmFwcGVyOworICAgICAgICByZXR1
cm4gJHJldHVybmluZ1dyYXBwZXI7CiAgICAgcmV0dXJuIHdyYXAoaW1wbCwgY29udGFpbmVyLkhv
bGRlcigpLCBjb250YWluZXIuR2V0SXNvbGF0ZSgpKTsKIH0KIEVORApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQKaW5kZXggYzYzNjQ0ZmJl
OTY1MjlkZjc4YTIzODMwYTU2YjY0MWEyZGJlZGQwNy4uMTg2MTExODE1MDllYzNiNWNjNzRjMGE5
ZjMwOGI2YjA1OThjYTM0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9JRExBdHRyaWJ1dGVzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0lETEF0dHJpYnV0ZXMudHh0CkBAIC0xMjksMyArMTI5LDQgQEAgVjhNZWFzdXJlQXM9Kgog
VjhSZWFkT25seQogVjhTa2lwVlRhYmxlVmFsaWRhdGlvbgogVjhVbmZvcmdlYWJsZQorVjhXcmFw
QXNGdW5jdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvQ3VzdG9t
RWxlbWVudEhlbHBlcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvQ3VzdG9tRWxl
bWVudEhlbHBlcnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM4MmU1Y2QwYWRkZmVjYjllODkxODlkNGJiZTZi
ZjFiY2NhY2NiMTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9DdXN0b21FbGVtZW50SGVscGVycy5jcHAKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudEhlbHBlcnMuaCIKKworI2luY2x1ZGUgIkRP
TVdyYXBwZXJXb3JsZC5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmgi
CisjaW5jbHVkZSAiVjhIVE1MUGFyYWdyYXBoRWxlbWVudC5oIgorI2luY2x1ZGUgIlY4SFRNTFNw
YW5FbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIEVOQUJMRShDVVNUT01f
RUxFTUVOVFMpCisKK2Jvb2wgQ3VzdG9tRWxlbWVudEhlbHBlcnM6OmluaXRpYWxpemVDb25zdHJ1
Y3RvcldyYXBwZXIoQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKiBjb25zdHJ1Y3RvciwgY29uc3Qg
U2NyaXB0VmFsdWUmIHByb3RvdHlwZSwgU2NyaXB0U3RhdGUqIHN0YXRlKQoreworICAgIEFTU0VS
VChpc0ZlYXR1cmVBbGxvd2VkKHN0YXRlKSk7CisgICAgQVNTRVJUKCFwcm90b3R5cGUudjhWYWx1
ZSgpLklzRW1wdHkoKSAmJiBwcm90b3R5cGUudjhWYWx1ZSgpLT5Jc09iamVjdCgpKTsKKyAgICB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlclZhbHVlID0gV2ViQ29yZTo6dG9WOChjb25zdHJ1
Y3Rvciwgc3RhdGUtPmNvbnRleHQoKS0+R2xvYmFsKCksIHN0YXRlLT5jb250ZXh0KCktPkdldElz
b2xhdGUoKSk7CisgICAgaWYgKHdyYXBwZXJWYWx1ZS5Jc0VtcHR5KCkgfHwgIXdyYXBwZXJWYWx1
ZS0+SXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gd3JhcHBlciA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qod3JhcHBlclZh
bHVlKTsKKyAgICAvLyAtIE9iamVjdDo6Rm9yY2VTZXQoKSBub3IgT2JqZWN0OjpTZXRBY2Nlc3Nv
ciBEb2Vzbid0IHdvcmsgYWdhaW5zdCB0aGUgInByb3RvdHlwZSIgcHJvcGVydHkgb2YgZnVuY3Rp
b24gb2JqZWN0cy4KKyAgICAvLyAtIFNldCgpLWluZyBoZXJlIGlzIHNhZmUgYmVjYXVzZQorICAg
IC8vICAgLSBfX2RlZmluZVNldHRlcl9fIG5vciBfX2RlZmluZUdldHRlcl9fIGFsc28gZG9lc24n
dCB3b3JrIGFnYWluc3QgZnVuY3Rpb24gb2JqZWN0cyBhbmQKKyAgICAvLyAgIC0gVXNpbmcgU2V0
KCkgaXMgb2theSBiZWNhdWVzIGVhY2ggZnVuY3Rpb24gaGFzICJwcm90b3R5cGUiIHByb3BlcnR5
IGZyb20gc3RhcnQgYW5kIE9iamVjdHMucHJvdG90eXBlIGNhbm5vdCBpbnRlcmNlcHQgdGhlIHBy
b3BlcnR5IGFjY2Vzcy4KKyAgICB3cmFwcGVyLT5TZXQodjhTdHJpbmcoInByb3RvdHlwZSIsIHN0
YXRlLT5jb250ZXh0KCktPkdldElzb2xhdGUoKSksIHByb3RvdHlwZS52OFZhbHVlKCksIHY4OjpS
ZWFkT25seSk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGNvbnN0cnVjdG9yS2V5ID0g
djhTdHJpbmcoImNvbnN0cnVjdG9yIiwgc3RhdGUtPmNvbnRleHQoKS0+R2V0SXNvbGF0ZSgpKTsK
KyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHByb3RvdHlwZU9iamVjdCA9IHY4OjpIYW5kbGU8
djg6Ok9iamVjdD46OkNhc3QocHJvdG90eXBlLnY4VmFsdWUoKSk7CisgICAgQVNTRVJUKCFwcm90
b3R5cGVPYmplY3QtPkhhc093blByb3BlcnR5KGNvbnN0cnVjdG9yS2V5KSk7CisgICAgcHJvdG90
eXBlT2JqZWN0LT5Gb3JjZVNldChjb25zdHJ1Y3RvcktleSwgd3JhcHBlciwgdjg6OlJlYWRPbmx5
KTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgaGFzUHJvdG90eXBl
SW5DaGFpbih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHByb3RvdHlwZSwgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IGNoYWluKQoreworICAgIHdoaWxlICghY2hhaW4uSXNFbXB0eSgpKSB7CisgICAgICAg
IGlmIChjaGFpbiA9PSBwcm90b3R5cGUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgaWYgKCFjaGFpbi0+SXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgY2hhaW4gPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGNoYWluKS0+R2V0UHJv
dG90eXBlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEN1c3RvbUVs
ZW1lbnRIZWxwZXJzOjppc1ZhbGlkUHJvdG90eXBlUGFyYW1ldGVyKGNvbnN0IFNjcmlwdFZhbHVl
JiBwcm90b3R5cGUsIFNjcmlwdFN0YXRlKiBzdGF0ZSkKK3sKKyAgICBpZiAocHJvdG90eXBlLnY4
VmFsdWUoKS5Jc0VtcHR5KCkgfHwgIXByb3RvdHlwZS52OFZhbHVlKCktPklzT2JqZWN0KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIGRvY3VtZW50LnJlZ2lzdGVyKCkgc2V0cyB0
aGUgY29uc3RydWNkdG9yIHByb3BlcnR5LCBzbyB0aGUgcHJvdG90eXBlIHNob3VsZG4ndCBoYXZl
IG9uZS4KKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHByb3RvdHlwZU9iamVjdCA9IHY4OjpI
YW5kbGU8djg6Ok9iamVjdD46OkNhc3QocHJvdG90eXBlLnY4VmFsdWUoKSk7CisgICAgaWYgKHBy
b3RvdHlwZU9iamVjdC0+SGFzT3duUHJvcGVydHkodjhTdHJpbmcoImNvbnN0cnVjdG9yIiwgc3Rh
dGUtPmNvbnRleHQoKS0+R2V0SXNvbGF0ZSgpKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBWOFBlckNvbnRleHREYXRhKiBwZXJDb250ZXh0RGF0YSA9IFY4UGVyQ29udGV4dERhdGE6OmZy
b20oc3RhdGUtPmNvbnRleHQoKSk7CisgICAgLy8gRklYTUU6IFNob3VsZCBhbGxvdyBhcmJpdHJh
cnkgSFRNTEVsZW1lbnQgc3ViY2xhc3NzZXMuCisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBz
cGFuQ29uc3RydWN0b3IgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHBlckNvbnRleHRE
YXRhLT5jb25zdHJ1Y3RvckZvclR5cGUoJlY4SFRNTFNwYW5FbGVtZW50OjppbmZvKSk7CisgICAg
aWYgKHNwYW5Db25zdHJ1Y3Rvci5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHNwYW5Qcm90b3R5cGUgPSB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+OjpDYXN0KHNwYW5Db25zdHJ1Y3Rvci0+R2V0KHY4U3RyaW5nKCJwcm90b3R5cGUiLCBz
dGF0ZS0+Y29udGV4dCgpLT5HZXRJc29sYXRlKCkpKSk7CisgICAgaWYgKHNwYW5Qcm90b3R5cGUu
SXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBwYXJhZ3JhcGhDb25zdHJ1Y3RvciA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qo
cGVyQ29udGV4dERhdGEtPmNvbnN0cnVjdG9yRm9yVHlwZSgmVjhIVE1MUGFyYWdyYXBoRWxlbWVu
dDo6aW5mbykpOworICAgIGlmIChwYXJhZ3JhcGhDb25zdHJ1Y3Rvci5Jc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHBhcmFncmFwaFBy
b3RvdHlwZSA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QocGFyYWdyYXBoQ29uc3RydWN0
b3ItPkdldCh2OFN0cmluZygicHJvdG90eXBlIiwgc3RhdGUtPmNvbnRleHQoKS0+R2V0SXNvbGF0
ZSgpKSkpOworICAgIGlmIChwYXJhZ3JhcGhQcm90b3R5cGUuSXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKCFoYXNQcm90b3R5cGVJbkNoYWluKHNwYW5Qcm90b3R5cGUs
IHByb3RvdHlwZU9iamVjdCkgJiYgIWhhc1Byb3RvdHlwZUluQ2hhaW4ocGFyYWdyYXBoUHJvdG90
eXBlLCBwcm90b3R5cGVPYmplY3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgQ3VzdG9tRWxlbWVudEhlbHBlcnM6OmlzRmVhdHVyZUFsbG93ZWQo
U2NyaXB0U3RhdGUqIHN0YXRlKQoreworICAgIHJldHVybiBpc0ZlYXR1cmVBbGxvd2VkKHN0YXRl
LT5jb250ZXh0KCkpOworfQorCitib29sIEN1c3RvbUVsZW1lbnRIZWxwZXJzOjppc0ZlYXR1cmVB
bGxvd2VkKHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQpCit7CisgICAgaWYgKERPTVdy
YXBwZXJXb3JsZCogd29ybGQgPSBET01XcmFwcGVyV29ybGQ6OmdldFdvcmxkKGNvbnRleHQpKQor
ICAgICAgICByZXR1cm4gd29ybGQtPmlzTWFpbldvcmxkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKKworI2VuZGlmIC8vIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0N1c3RvbUVs
ZW1lbnRIZWxwZXJzLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9DdXN0b21FbGVtZW50
SGVscGVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA4ZDFiY2JjMTg5NTY5NWRkYWFiZGFkMGZiZjNmOGI5ZDMx
YWJiYTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9DdXN0
b21FbGVtZW50SGVscGVycy5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEN1c3RvbUVsZW1lbnRI
ZWxwZXJzX2gKKyNkZWZpbmUgQ3VzdG9tRWxlbWVudEhlbHBlcnNfaAorCisjaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKK2NsYXNzIEN1c3RvbUVsZW1l
bnRDb25zdHJ1Y3RvcjsKK2NsYXNzIFNjcmlwdFN0YXRlOworCitjbGFzcyBDdXN0b21FbGVtZW50
SGVscGVycyB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZUNvbnN0cnVjdG9y
V3JhcHBlcihDdXN0b21FbGVtZW50Q29uc3RydWN0b3IqLCBjb25zdCBTY3JpcHRWYWx1ZSYgcHJv
dG90eXBlLCBTY3JpcHRTdGF0ZSopOworICAgIHN0YXRpYyBib29sIGlzVmFsaWRQcm90b3R5cGVQ
YXJhbWV0ZXIoY29uc3QgU2NyaXB0VmFsdWUmLCBTY3JpcHRTdGF0ZSopOworICAgIHN0YXRpYyBi
b29sIGlzRmVhdHVyZUFsbG93ZWQoU2NyaXB0U3RhdGUqKTsKKworICAgIHN0YXRpYyBib29sIGlz
RmVhdHVyZUFsbG93ZWQodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4pOworfTsKKworI2VuZGlmIC8v
IEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEN1c3RvbUVsZW1lbnRIZWxwZXJzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZjRiZGI1OGRlMzFiYzRm
NzY2MTJkYTRlMjEzOWU1MmZmMzZkMDhlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhBZGFwdG9yRnVuY3Rpb24uY3BwCkBAIC0wLDAgKzEsOTEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVjhBZGFwdG9yRnVuY3Rpb24uaCIKKworI2luY2x1
ZGUgIlY4UGVySXNvbGF0ZURhdGEuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZiBF
TkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dyYXBwZXJU
eXBlSW5mbyBWOEFkYXB0b3JGdW5jdGlvbjo6aW5mbyA9IHsgVjhBZGFwdG9yRnVuY3Rpb246Omdl
dFRlbXBsYXRlLCAwLCAwLCAwLCAwLCAwLCAwLCBXcmFwcGVyVHlwZU9iamVjdFByb3RvdHlwZSB9
OworCit2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhBZGFwdG9yRnVuY3Rp
b246OmdldFRlbXBsYXRlKHY4OjpJc29sYXRlKiBpc29sYXRlKQoreworICAgIGlmICghaXNvbGF0
ZSkKKyAgICAgICAgaXNvbGF0ZSA9IHY4OjpJc29sYXRlOjpHZXRDdXJyZW50KCk7CisgICAgVjhQ
ZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmZyb20oaXNvbGF0ZSk7Cisg
ICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEt
PnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CisgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5y
YXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQorICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKKyAg
ICAvLyBUaGUgbGlmZXRpbWUgaXMgb2YgbmV3VGVtcGxhdGUgaXMgZGVsZWdhdGVkIHRvIHRoZSBU
ZW1wbGF0ZU1hcCB0aHVzIHRoaXMgd29uJ3QgYmUgbGVha2VkLgorICAgIHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBuZXdUZW1wbGF0ZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPjo6TmV3KHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoKSk7CisgICAg
ZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5hZGQoJmluZm8sIGNvbmZpZ3VyZVRlbXBsYXRlKG5ld1Rl
bXBsYXRlKSk7CisgICAgcmV0dXJuIG5ld1RlbXBsYXRlOworfQorCit2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhBZGFwdG9yRnVuY3Rpb246OmNvbmZpZ3VyZVRlbXBsYXRl
KHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBmdW5jdGlvblRlbXBsYXRlKQor
eworICAgIGZ1bmN0aW9uVGVtcGxhdGUtPlNldENhbGxIYW5kbGVyKCZWOEFkYXB0b3JGdW5jdGlv
bjo6aW52b2NhdGlvbkNhbGxiYWNrKTsKKyAgICByZXR1cm4gZnVuY3Rpb25UZW1wbGF0ZTsKK30K
Kwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4QWRhcHRvckZ1bmN0aW9uOjppbnZvY2F0aW9uQ2Fs
bGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IHdyYXBwZWQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3MuQ2FsbGVl
KCktPkdldEhpZGRlblZhbHVlKFY4SGlkZGVuUHJvcGVydHlOYW1lOjphZGFwdG9yRnVuY3Rpb25Q
ZWVyKCkpKTsKKyAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgZmFzdGVyIGlmIHdlIGNhbiBhY2Nl
c3MgdW5kZXJseWluZyBuYXRpdmUgY2FsbGJhY2sgZGlyZWN0bHkuCisgICAgLy8gV2Ugd29uJ3Qg
bmVlZCB0aGlzIG9uY2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
ODEzOCBpcyBhZGRyZXNzZWQuCisgICAgVmVjdG9yPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+IGFy
Z0FycmF5KGFyZ3MuTGVuZ3RoKCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5MZW5n
dGgoKTsgKytpKQorICAgICAgICBhcmdBcnJheS5hcHBlbmQoYXJnc1tpXSk7CisgICAgaWYgKGFy
Z3MuSXNDb25zdHJ1Y3RDYWxsKCkpCisgICAgICAgIHJldHVybiB3cmFwcGVkLT5DYWxsQXNDb25z
dHJ1Y3RvcihhcmdBcnJheS5zaXplKCksIGFyZ0FycmF5LmRhdGEoKSk7CisgICAgcmV0dXJuIHdy
YXBwZWQtPkNhbGxBc0Z1bmN0aW9uKGFyZ3MuVGhpcygpLCBhcmdBcnJheS5zaXplKCksIGFyZ0Fy
cmF5LmRhdGEoKSk7Cit9CisKK3Y4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBWOEFkYXB0b3JGdW5j
dGlvbjo6d3JhcCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCwgY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3sKKyAgICBpZiAob2JqZWN0LklzRW1w
dHkoKSB8fCAhb2JqZWN0LT5Jc09iamVjdCgpKQorICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2
ODo6RnVuY3Rpb24+KCk7CisgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IGFkYXB0b3IgPSB2
ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj46OkNhc3QoZ2V0VGVtcGxhdGUoaXNvbGF0ZSktPkdldEZ1
bmN0aW9uKCkpOworICAgIGlmIChhZGFwdG9yLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHY4
OjpIYW5kbGU8djg6OkZ1bmN0aW9uPigpOworICAgIGFkYXB0b3ItPlNldE5hbWUodjhTdHJpbmco
bmFtZS5zdHJpbmcoKSwgaXNvbGF0ZSkpOworICAgIGFkYXB0b3ItPlNldEhpZGRlblZhbHVlKFY4
SGlkZGVuUHJvcGVydHlOYW1lOjphZGFwdG9yRnVuY3Rpb25QZWVyKCksIG9iamVjdCk7CisgICAg
b2JqZWN0LT5TZXRIaWRkZW5WYWx1ZShWOEhpZGRlblByb3BlcnR5TmFtZTo6YWRhcHRvckZ1bmN0
aW9uUGVlcigpLCBhZGFwdG9yKTsKKyAgICByZXR1cm4gYWRhcHRvcjsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmUzZDZiYjUxZjQ0MGE0Yzc3MjRhYmNlM2RlOTMwNjhkYWU4YzNhNTcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5oCkBAIC0w
LDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFY4QWRhcHRvckZ1bmN0aW9uX2gKKyNkZWZpbmUgVjhBZGFwdG9y
RnVuY3Rpb25faAorCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhIaWRkZW5Q
cm9wZXJ0eU5hbWUuaCIKKyNpbmNsdWRlICJXcmFwcGVyVHlwZUluZm8uaCIKKyNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorCisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisvLworLy8gRklYTUUoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwODEzOCk6CisvLyBWOEFkYXB0b3JGdW5jdGlvbiBjbGFzcyBhbmQgVjhX
cmFwQXNGdW5jdGlvbiBJREwgYXR0cmlidXRlIGFyZSBuZWVkZWQgZm9yIHR3byByZWFzb25zOgor
Ly8gLSAxKSBWOCBkb2Vzbid0IGFsbG93IGV4cGFuZGluZyB0aGUgaW50ZXJuYWwgZmllbGQgb2Yg
ZnVuY3Rpb24gb2JqZWN0cy4gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0
YWlsP2lkPTgzNworLy8gICAgICBXZWJLaXQgbmVlZCBpdCB0byBhc3NvY2lhdGUgZWFjaCB3cmFw
cGVyIHRvIGl0cyBiYWNraW5nIEMrKyBvYmplY3QuIFdlIHN0b3JlIGl0IGluIGEgaGlkZGVuIHBy
b3BlcnR5IG9mIHRoZSB3cmFwcGVkIG9iamVjdC4KKy8vIC0gMikgQmluZGluZyBjb2RlYmFzZSBh
c3N1bWVzIGV2ZXJ5IHdyYXBwZXIgb2JqZWN0IGlzIGNyZWF0ZWQgdGhyb3VnaCBPYmplY3RUZW1w
bGF0ZTo6TmV3SW5zdGFuY2UoKSwgbm90IEZ1bmN0aW9uVGVtcGxhdGU6OkdldEZ1bmN0aW9uKCku
CisvLyBPbmNlIDEpIGlzIGFkZHJlc3NzZWQsIHdlIGNvdWxkIGF0dGFjayAyKSB3aXRoIGl0LiAK
Ky8vCitjbGFzcyBWOEFkYXB0b3JGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFdyYXBw
ZXJUeXBlSW5mbyBpbmZvOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHVud3Jh
cCh2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4pOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpG
dW5jdGlvbj4gd3JhcCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+LCBjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUsIHY4OjpJc29sYXRlKik7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9u
PiBnZXQodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pik7CisKKyAgICBzdGF0aWMgdjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGdldFRlbXBsYXRlKHY4OjpJc29sYXRlKiA9IDApOwor
ICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gY29uZmlndXJl
VGVtcGxhdGUodjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+KTsKKyAgICBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGludm9jYXRpb25DYWxsYmFjayhjb25zdCB2ODo6QXJn
dW1lbnRzJik7Cit9OworCitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOEFkYXB0b3JG
dW5jdGlvbjo6dW53cmFwKHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBmdW5jdGlvbikKK3sKKyAg
ICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlZCA9IGZ1bmN0aW9uLT5HZXRIaWRkZW5WYWx1
ZShWOEhpZGRlblByb3BlcnR5TmFtZTo6YWRhcHRvckZ1bmN0aW9uUGVlcigpKTsKKyAgICBBU1NF
UlQoIXdyYXBwZWQuSXNFbXB0eSgpKTsKKyAgICBBU1NFUlQod3JhcHBlZC0+SXNPYmplY3QoKSk7
CisgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qod3JhcHBlZCk7Cit9CisK
K2lubGluZSB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gVjhBZGFwdG9yRnVuY3Rpb246OmdldCh2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gYWRhcHRvckZ1bmN0aW9uID0gb2JqZWN0LT5HZXRIaWRkZW5WYWx1ZShWOEhpZGRlblByb3Bl
cnR5TmFtZTo6YWRhcHRvckZ1bmN0aW9uUGVlcigpKTsKKyAgICBBU1NFUlQoIWFkYXB0b3JGdW5j
dGlvbi5Jc0VtcHR5KCkpOworICAgIEFTU0VSVChhZGFwdG9yRnVuY3Rpb24tPklzRnVuY3Rpb24o
KSk7CisgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPjo6Q2FzdChhZGFwdG9yRnVu
Y3Rpb24pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
Q1VTVE9NX0VMRU1FTlRTKQorI2VuZGlmIC8vIFY4QWRhcHRvckZ1bmN0aW9uX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCmluZGV4IDM0Mjc3OGFjZjc5NDZh
YTBkY2I0Yzc4OWFiMGRiNzAwOWIwNGM4YjMuLjRkOGMyMjZmM2UyNzJmMGUzNTk2MjFlOGQ0MDY4
YzMxOTRiNTNmYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9N
V3JhcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVy
LmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlY4
RE9NV3JhcHBlci5oIgogCisjaW5jbHVkZSAiVjhBZGFwdG9yRnVuY3Rpb24uaCIKICNpbmNsdWRl
ICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOERPTVdpbmRvdy5oIgogI2luY2x1ZGUgIlY4SFRN
TENvbGxlY3Rpb24uaCIKQEAgLTEzNyw0ICsxMzgsMjUgQEAgYm9vbCBWOERPTVdyYXBwZXI6Omlz
V3JhcHBlck9mVHlwZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIFdyYXBwZXJUeXBlSW5m
byoKICAgICByZXR1cm4gdHlwZUluZm8gPT0gdHlwZTsKIH0KIAorI2lmIEVOQUJMRShDVVNUT01f
RUxFTUVOVFMpCisKK3Y4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBWOERPTVdyYXBwZXI6OnRvRnVu
Y3Rpb24odjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9iamVjdCkKK3sKKyAgICByZXR1cm4gVjhBZGFw
dG9yRnVuY3Rpb246OmdldCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KG9iamVjdCkpOwor
fQorCit2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gVjhET01XcmFwcGVyOjp0b0Z1bmN0aW9uKHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIHY4
OjpJc29sYXRlKiBpc29sYXRlKQoreworICAgIHJldHVybiBWOEFkYXB0b3JGdW5jdGlvbjo6d3Jh
cChvYmplY3QsIG5hbWUsIGlzb2xhdGUpOworfQorCit2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4
RE9NV3JhcHBlcjo6ZnJvbUZ1bmN0aW9uKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KQor
eworICAgIGlmICghb2JqZWN0LT5Jc0Z1bmN0aW9uKCkpCisgICAgICAgIHJldHVybiBvYmplY3Q7
CisgICAgcmV0dXJuIFY4QWRhcHRvckZ1bmN0aW9uOjp1bndyYXAodjg6OkhhbmRsZTx2ODo6RnVu
Y3Rpb24+OjpDYXN0KG9iamVjdCkpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9FTEVN
RU5UUykKKwogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhET01XcmFwcGVyLmgKaW5kZXggMzlkY2U0N2YzZjc1NzI4ZGU3ZGIyOTc2Zjg3NGNiZTdh
YjEyY2FhNC4uMTg0NDFhOWUxMmZlYzJkZWU5ODkyNDljYTM4NDFlYzUzNmFkYTEwMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKQEAgLTYyLDYgKzYyLDEzIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBzdGF0aWMgYm9vbCBpc0RPTVdyYXBwZXIo
djg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKICAgICAgICAgc3RhdGljIGJvb2wgaXNXcmFwcGVyT2ZU
eXBlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiwgV3JhcHBlclR5cGVJbmZvKik7CisKKyNpZiBFTkFC
TEUoQ1VTVE9NX0VMRU1FTlRTKQorICAgICAgICAvLyBVc2VkIGZvciBWOFdyYXBBc0Z1bmN0aW9u
LCB3aGljaCBpcyB1c2VkIG9ubHkgYnkgQ1VTVE9NX0VMRU1FTlRTCisgICAgICAgIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gdG9GdW5jdGlvbih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4p
OworICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IHRvRnVuY3Rpb24odjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCB2ODo6SXNvbGF0
ZSopOworICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBmcm9tRnVuY3Rpb24o
djg6OkhhbmRsZTx2ODo6T2JqZWN0Pik7CisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9FTEVNRU5U
UykKICAgICB9OwogCiAgICAgaW5saW5lIHZvaWQgVjhET01XcmFwcGVyOjpzZXROYXRpdmVJbmZv
KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciwgV3JhcHBlclR5cGVJbmZvKiB0eXBlLCB2
b2lkKiBvYmplY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhU
TUxDdXN0b21FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SFRNTEN1
c3RvbUVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRiNDNkY2FlMDQyMWI2YjE0Y2NjZmUwMGRlMDQx
OWRkNGZlNWI2ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOEhUTUxDdXN0b21FbGVtZW50LmNwcApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlY4SFRNTEN1c3RvbUVsZW1lbnQuaCIKKworI2luY2x1ZGUgIkN1c3Rv
bUVsZW1lbnRIZWxwZXJzLmgiCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmgiCisj
aW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJWOEN1c3RvbUVsZW1lbnRDb25zdHJ1
Y3Rvci5oIgorI2luY2x1ZGUgIlY4SFRNTFNwYW5FbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKKy8vIEZJWE1FOiBFYWNoIGN1
c3RvbSBlbGVtZW50cyBzaG91bGQgaGF2ZSBpdHMgb3duIEdldFRlbXBsYXRlIG1ldGhvZCBzbyB0
aGF0IGl0IGNhbiBiZSBkZXJpdmVkIGZyb20gZGlmZmVyZW50IHN1cGVyIGVsZW1lbnQuCitXcmFw
cGVyVHlwZUluZm8gVjhIVE1MQ3VzdG9tRWxlbWVudDo6aW5mbyA9IHsgJlY4SFRNTFNwYW5FbGVt
ZW50OjpHZXRUZW1wbGF0ZSwgVjhIVE1MRWxlbWVudDo6ZGVyZWZPYmplY3QsIDAsIDAsIDAsIDAs
ICZWOEhUTUxTcGFuRWxlbWVudDo6aW5mbywgV3JhcHBlclR5cGVPYmplY3RQcm90b3R5cGUgfTsK
Kwordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOEhUTUxDdXN0b21FbGVtZW50OjpjcmVhdGVXcmFw
cGVyKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
Y3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3sKKyAgICBBU1NFUlQoaW1w
bCk7CisKKyAgICBDdXN0b21FbGVtZW50Q29uc3RydWN0b3IqIGNvbnN0cnVjdG9yID0gQ3VzdG9t
RWxlbWVudFJlZ2lzdHJ5Ojpjb25zdHJ1Y3Rvck9mKGltcGwuZ2V0KCkpOworICAgIGlmICghY29u
c3RydWN0b3IpIHsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZXJWYWx1ZSA9
IFdlYkNvcmU6OnRvVjgodG9IVE1MVW5rbm93bkVsZW1lbnQoaW1wbC5nZXQoKSksIGNyZWF0aW9u
Q29udGV4dCwgaXNvbGF0ZSk7CisgICAgICAgIGlmICghd3JhcHBlclZhbHVlLklzRW1wdHkoKSAm
JiB3cmFwcGVyVmFsdWUtPklzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0Pjo6Q2FzdCh3cmFwcGVyVmFsdWUpOworICAgICAgICByZXR1cm4gdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PigpOworICAgIH0KKworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
d3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6Y3JlYXRlV3JhcHBlcihjcmVhdGlvbkNvbnRleHQsICZp
bmZvLCBpbXBsLmdldCgpLCBpc29sYXRlKTsKKyAgICBpZiAod3JhcHBlci5Jc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiB3cmFwcGVyOworCisgICAgLy8gVGhlIGNvbnN0cnVjdG9yIGFuZCByZWdp
c3RlcmVkIGxpZmVjeWNsZSBjYWxsYmFja3Mgc2hvdWxkIGJlIHZpc2libGUgb25seSBmcm9tIG1h
aW4gd29ybGQuCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIG5lZWRlZCBvbmNlIGVh
Y2ggY3VzdG9tIGVsZW1lbnQgaGFzIGl0cyBvd24gRnVuY3Rpb25UZW1wbGF0ZQorICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgxMzgKKyAgICBpZiAoQ3Vz
dG9tRWxlbWVudEhlbHBlcnM6OmlzRmVhdHVyZUFsbG93ZWQoY3JlYXRpb25Db250ZXh0LT5DcmVh
dGlvbkNvbnRleHQoKSkpIHsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZXJW
YWx1ZSA9IFdlYkNvcmU6OnRvVjgoY29uc3RydWN0b3IsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0
ZSk7CisgICAgICAgIGlmICh3cmFwcGVyVmFsdWUuSXNFbXB0eSgpIHx8ICF3cmFwcGVyVmFsdWUt
PklzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pigp
OworICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNvbnN0cnVjdG9yV2FwcGVyID0gdjg6
OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh3cmFwcGVyVmFsdWUpOworICAgICAgICB3cmFwcGVy
LT5TZXRQcm90b3R5cGUoY29uc3RydWN0b3JXYXBwZXItPkdldCh2OFN0cmluZygicHJvdG90eXBl
IiwgaXNvbGF0ZSkpKTsKKyAgICB9CisKKyAgICBWOERPTVdyYXBwZXI6OmFzc29jaWF0ZU9iamVj
dFdpdGhXcmFwcGVyKGltcGwsICZpbmZvLCB3cmFwcGVyLCBpc29sYXRlLCBXcmFwcGVyQ29uZmln
dXJhdGlvbjo6RGVwZW5kZW50KTsKKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKworI2VuZGlmIC8v
IEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SFRNTEN1c3RvbUVsZW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SFRNTEN1c3RvbUVsZW1lbnQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40YmZiZjM5ZmE3MGQzZjZmZjdkMjgwMjc2MmI0OWY0MWVkMjY1MTJjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVudC5o
CkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFY4SFRNTEN1c3RvbUVsZW1lbnRfaAorI2RlZmluZSBW
OEhUTUxDdXN0b21FbGVtZW50X2gKKworI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUg
IlY4RE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIlY4SFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJW
OEhUTUxVbmtub3duRWxlbWVudC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSFRNTEVsZW1lbnQ7CisKKyNpZiBFTkFCTEUoQ1VT
VE9NX0VMRU1FTlRTKQorCitjbGFzcyBWOEhUTUxDdXN0b21FbGVtZW50IHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgV3JhcHBlclR5cGVJbmZvIGluZm87CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gdG9WOChIVE1MRWxlbWVudCosIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRp
b25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSogPSAwKTsK
KyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGVXcmFwcGVyKFBhc3NSZWZQ
dHI8SFRNTEVsZW1lbnQ+LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+LCB2ODo6SXNvbGF0ZSopOwor
fTsKKworaW5saW5lIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhIVE1MQ3VzdG9tRWxlbWVudDo6
dG9WOChIVE1MRWxlbWVudCogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNv
bnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQoreworICAgIGlmIChVTkxJS0VMWSghaW1wbCkp
CisgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHY4TnVsbFdpdGhD
aGVjayhpc29sYXRlKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gRE9N
RGF0YVN0b3JlOjpnZXRXcmFwcGVyKGltcGwsIGlzb2xhdGUpOworICAgIGlmICghd3JhcHBlci5J
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiB3cmFwcGVyOworICAgIHJldHVybiBWOEhUTUxDdXN0
b21FbGVtZW50OjpjcmVhdGVXcmFwcGVyKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7
Cit9CisKKyNlbHNlIC8vIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKK2NsYXNzIFY4SFRNTEN1
c3RvbUVsZW1lbnQgeworcHVibGljOgorICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IHdyYXAoSFRNTEVsZW1lbnQqLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4
dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqID0gMCk7Cit9OworCitp
bmxpbmUgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBIVE1MQ3VzdG9tRWxlbWVudDo6dG9WOChIVE1M
RWxlbWVudCogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4
OjpJc29sYXRlKiBpc29sYXRlKQoreworICAgIHJldHVybiB0b1Y4KHRvSFRNTFVua25vd25FbGVt
ZW50KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworfQorCisjZW5kaWYgLy8gRU5B
QkxFKENVU1RPTV9FTEVNRU5UUykKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gVjhIVE1MQ3VzdG9tRWxlbWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaAppbmRleCA1MDhiZGQzNjI4MDZhNzEwNDZjZDNkNjJm
MDM1YWNlMmIyMjYxYWJjLi4wM2NkNTdmZDg5MGYzMTFlNDI5NTQ1ODBkNDYxYTE2ZjhlYjQ0OGRk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5
TmFtZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlO
YW1lLmgKQEAgLTQ1LDYgKzQ1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIFYoc2NyaXB0
U3RhdGUpIFwKICAgICBWKHNsZWVwRnVuY3Rpb24pIFwKICAgICBWKHN0YXRlKSBcCisgICAgVihh
ZGFwdG9yRnVuY3Rpb25QZWVyKSBcCiAgICAgVih0b1N0cmluZ1N0cmluZykgXAogICAgIFYodHlw
ZWRBcnJheUhpZGRlbkNvcHlNZXRob2QpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvckN1c3RvbS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21FbGVtZW50Q29uc3RydWN0
b3JDdXN0b20uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM0Mzc0ZjY3Njg4MGM5Mjg1NGYyODg5NDZhNjM5MTUx
YTBiM2IyMzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhDdXN0b21FbGVtZW50Q29uc3RydWN0b3JDdXN0b20uY3BwCkBAIC0wLDAgKzEsNTQg
QEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorKiAKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyogbWV0OgorKiAKKyogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKiBkaXN0
cmlidXRpb24uCisqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyogCisqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJWOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oIgorCisjaW5jbHVkZSAiQ3VzdG9t
RWxlbWVudENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAi
VjhIVE1MQ3VzdG9tRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Y4OjpIYW5k
bGU8djg6OlZhbHVlPiBWOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y2FsbEFzRnVuY3Rpb25D
YWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIGlmICghYXJncy5Jc0Nv
bnN0cnVjdENhbGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCJET00gb2JqZWN0
IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4iLCBhcmdzLkdldElz
b2xhdGUoKSk7CisgICAgaWYgKENvbnN0cnVjdG9yTW9kZTo6Y3VycmVudCgpID09IENvbnN0cnVj
dG9yTW9kZTo6V3JhcEV4aXN0aW5nT2JqZWN0KQorICAgICAgICByZXR1cm4gYXJncy5Ib2xkZXIo
KTsKKworICAgIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciogaW1wbCA9IHRvTmF0aXZlKGFyZ3Mu
SG9sZGVyKCkpOworICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudCA9IGltcGwtPmNyZWF0
ZUVsZW1lbnQoKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybiB2OFVuZGVmaW5l
ZCgpOworICAgIHJldHVybiBWOEhUTUxDdXN0b21FbGVtZW50Ojp0b1Y4KGVsZW1lbnQuZ2V0KCks
IGFyZ3MuSG9sZGVyKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRDb25z
dHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9y
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mY2VjMTc1ZWNjOTNjZjg1ZDg2ZGFjODJjNjU1NzQxMzAyODZkMWY3
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRDb25z
dHJ1Y3Rvci5jcHAKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJDdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaCIKKworI2lmIEVOQUJMRShDVVNUT01fRUxFTUVO
VFMpCisKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50SGVscGVycy5oIgorI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCisjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yPiBDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6OmNyZWF0ZShTY3JpcHRTdGF0ZSog
c3RhdGUsIERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTY3JpcHRWYWx1ZSYgcHJvdG90eXBlKQoreworICAg
IFJlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IGNyZWF0ZWQgPSBhZG9wdFJlZihuZXcg
Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKGRvY3VtZW50LCB0YWdOYW1lLCBuYW1lKSk7CisgICAg
aWYgKCFDdXN0b21FbGVtZW50SGVscGVyczo6aW5pdGlhbGl6ZUNvbnN0cnVjdG9yV3JhcHBlcihj
cmVhdGVkLmdldCgpLCBwcm90b3R5cGUsIHN0YXRlKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIGNyZWF0ZWQucmVsZWFzZSgpOworfQorCitDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6
OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvcihEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICA6IG1fZG9jdW1lbnQo
ZG9jdW1lbnQpCisgICAgLCBtX3RhZ05hbWUodGFnTmFtZSkKKyAgICAsIG1fbmFtZShuYW1lKQor
eworfQorCitDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6On5DdXN0b21FbGVtZW50Q29uc3RydWN0
b3IoKQoreworfQorCit2b2lkIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6d2lsbERlc3Ryb3lE
b2N1bWVudCgpCit7CisgICAgbV9kb2N1bWVudCA9IDA7Cit9CisKK1Bhc3NSZWZQdHI8SFRNTEVs
ZW1lbnQ+IEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlRWxlbWVudCgpIGNvbnN0Cit7
CisgICAgaWYgKCFtX2RvY3VtZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gSFRN
TEVsZW1lbnQ6OmNyZWF0ZShtX3RhZ05hbWUsIG1fZG9jdW1lbnQpOworfQorCit9CisKKyNlbmRp
ZiAvLyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3Rv
bUVsZW1lbnRDb25zdHJ1Y3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRlYWM2OTEwOGIyZjZmM2M2ZTVjMWFj
YTVlY2ExYjVjZmQ5Yjk1NjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ3VzdG9t
RWxlbWVudENvbnN0cnVjdG9yX2gKKyNkZWZpbmUgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yX2gK
KworI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKKyNpbmNsdWRlICJRdWFsaWZpZWROYW1l
LmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWlj
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRG9jdW1lbnQ7CitjbGFz
cyBIVE1MRWxlbWVudDsKK2NsYXNzIFNjcmlwdFN0YXRlOworY2xhc3MgU2NyaXB0VmFsdWU7CisK
K2NsYXNzIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciA6IHB1YmxpYyBSZWZDb3VudGVkPEN1c3Rv
bUVsZW1lbnRDb25zdHJ1Y3Rvcj4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEN1
c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gY3JlYXRlKFNjcmlwdFN0YXRlKiwgRG9jdW1lbnQqLCBj
b25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU2NyaXB0VmFsdWUmKTsK
KworICAgIHZpcnR1YWwgfkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvcigpOworCisgICAgRG9jdW1l
bnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudDsgfQorICAgIGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUoKSBjb25zdCB7IHJldHVybiBtX3RhZ05hbWU7IH0KKyAgICBj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKworICAg
IFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnQoKSBjb25zdDsKKyAgICB2b2lk
IHdpbGxEZXN0cm95RG9jdW1lbnQoKTsKKyAgICAKK3ByaXZhdGU6CisgICAgQ3VzdG9tRWxlbWVu
dENvbnN0cnVjdG9yKERvY3VtZW50KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IFN0cmlu
ZyYpOworCisgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CisgICAgUXVhbGlmaWVkTmFtZSBtX3Rh
Z05hbWU7CisgICAgQXRvbWljU3RyaW5nIG1fbmFtZTsKK307CisKK30KKworI2VuZGlmIC8vIEVO
QUJMRShDVVNUT01fRUxFTUVOVFMpCisKKyNlbmRpZiAvLyBDdXN0b21FbGVtZW50Q29uc3RydWN0
b3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1
Y3Rvci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmlk
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi40N2M1MzBmODdkZWFlNjdmYTVmZGExZTEzOWIwNWNiOThhMDczYjBkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1
Y3Rvci5pZGwKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1sKKyAgICBDb25kaXRpb25h
bD1DVVNUT01fRUxFTUVOVFMsCisgICAgVjhFbmFibGVkQXRSdW50aW1lPWN1c3RvbURPTUVsZW1l
bnRzLAorICAgIFY4V3JhcEFzRnVuY3Rpb24sCisgICAgQ3VzdG9tQ2FsbAorXSBpbnRlcmZhY2Ug
Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yIHsKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0
b21FbGVtZW50UmVnaXN0cnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY4M2ZkZDE5ZDJmMTIzNDc5ODliZGMz
MjYzYjhhZjliMjZiZWM2YmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmNwcApAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0
cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50UmVnaXN0cnkuaCIKKworI2lu
Y2x1ZGUgIkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkN1c3RvbUVsZW1l
bnRIZWxwZXJzLmgiCisjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgorI2luY2x1ZGUgIkRvY3VtZW50
LmgiCisjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNp
bmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5
cGUuaD4KKworI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpDdXN0b21FbGVtZW50UmVnaXN0cnkoRG9jdW1l
bnQqIGRvY3VtZW50KQorICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKK3sKK30KKworQ3VzdG9t
RWxlbWVudFJlZ2lzdHJ5Ojp+Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5KCkKK3sKKyAgICBmb3IgKENv
bnN0cnVjdG9yTWFwOjppdGVyYXRvciBpID0gbV9jb25zdHJ1Y3RvcnMuYmVnaW4oKTsgaSAhPSBt
X2NvbnN0cnVjdG9ycy5lbmQoKTsgKytpKQorICAgICAgICBpLT52YWx1ZS0+d2lsbERlc3Ryb3lE
b2N1bWVudCgpOworfQorCitDdXN0b21FbGVtZW50Q29uc3RydWN0b3IqIEN1c3RvbUVsZW1lbnRS
ZWdpc3RyeTo6Y29uc3RydWN0b3JPZihIVE1MRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBDdXN0
b21FbGVtZW50UmVnaXN0cnkqIHNlbGYgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5yZWdpc3RyeSgp
OworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHNlbGYtPmZp
bmQoZWxlbWVudC0+dGFnUU5hbWUoKSk7Cit9CisKK2Jvb2wgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5
Ojppc1ZhbGlkTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCit7CisgICAgc2l6ZV90IGh5
cGhlblBvc2l0aW9uID0gbmFtZS5maW5kKCctJyk7CisgICAgaWYgKGh5cGhlblBvc2l0aW9uID09
IG5vdEZvdW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKFZlY3RvcjxBdG9taWNTdHJpbmc+LCByZXNlcnZlZE5hbWVzLCAoKSk7CisgICAgaWYgKHJl
c2VydmVkTmFtZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIHJlc2VydmVkTmFtZXMuYXBwZW5kKCJh
bm5vdGF0aW9uLXhtbCIpOworICAgICAgICByZXNlcnZlZE5hbWVzLmFwcGVuZCgiY29sb3ItcHJv
ZmlsZSIpOworICAgICAgICByZXNlcnZlZE5hbWVzLmFwcGVuZCgiZm9udC1mYWNlIik7CisgICAg
ICAgIHJlc2VydmVkTmFtZXMuYXBwZW5kKCJmb250LWZhY2Utc3JjIik7CisgICAgICAgIHJlc2Vy
dmVkTmFtZXMuYXBwZW5kKCJmb250LWZhY2UtdXJpIik7CisgICAgICAgIHJlc2VydmVkTmFtZXMu
YXBwZW5kKCJmb250LWZhY2UtZm9ybWF0Iik7CisgICAgICAgIHJlc2VydmVkTmFtZXMuYXBwZW5k
KCJmb250LWZhY2UtbmFtZSIpOworICAgICAgICByZXNlcnZlZE5hbWVzLmFwcGVuZCgibWlzc2lu
Zy1nbHlwaCIpOworICAgIH0KKworICAgIGlmIChXVEY6Om5vdEZvdW5kICE9IHJlc2VydmVkTmFt
ZXMuZmluZChuYW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIERvY3Vt
ZW50Ojppc1ZhbGlkTmFtZShuYW1lLnN0cmluZygpKTsKK30KKworUGFzc1JlZlB0cjxDdXN0b21F
bGVtZW50Q29uc3RydWN0b3I+IEN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6cmVnaXN0ZXJFbGVtZW50
KFNjcmlwdFN0YXRlKiBzdGF0ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBEaWN0
aW9uYXJ5JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIUN1c3RvbUVs
ZW1lbnRIZWxwZXJzOjppc0ZlYXR1cmVBbGxvd2VkKHN0YXRlKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBRdWFsaWZpZWROYW1lIG5ld05hbWUobnVsbEF0b20sIG5hbWUubG93ZXIoKSwgSFRN
TE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSk7CisgICAgaWYgKCFpc1ZhbGlkTmFtZShuZXdOYW1l
LmxvY2FsTmFtZSgpKSkgeworICAgICAgICBlYyA9IElOVkFMSURfQ0hBUkFDVEVSX0VSUjsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgICAgICAKKyAgICBpZiAoZmluZChuZXdOYW1lKSkg
eworICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisKKyAgICBTY3JpcHRWYWx1ZSBwcm90b3R5cGVWYWx1ZTsKKyAgICBpZiAoIW9wdGlvbnMu
Z2V0KCJwcm90b3R5cGUiLCBwcm90b3R5cGVWYWx1ZSkpIHsKKyAgICAgICAgLy8gRklYTUU6IElt
cGxlbWVudCB0aGUgZGVmYXVsdCB2YWx1ZSBoYW5kbGluZy4KKyAgICAgICAgLy8gQ3VycmVudGx5
IGRlZmF1bHQgdmFsdWUgb2YgdGhlICJwcm90b3R5cGUiIHBhcmFtZXRlciwgd2hpY2gKKyAgICAg
ICAgLy8gaXMgSFRNTFNwYW5FbGVtZW50LnByb3RvdHlwZSwgaGFzIGFuIGFtYmlndWl0eSBhYm91
dCBpdHMKKyAgICAgICAgLy8gYmVoYXZpb3IuIFRoZSBzcGVjIHNob3VsZCBiZSBmaXhlZCBiZWZv
cmUgV2ViS2l0IGltcGxlbWVudHMKKyAgICAgICAgLy8gaXQuIGh0dHBzOi8vd3d3LnczLm9yZy9C
dWdzL1B1YmxpYy9zaG93X2J1Zy5jZ2k/aWQ9MjA4MDEKKyAgICAgICAgZWMgPSBJTlZBTElEX1NU
QVRFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKCFDdXN0b21FbGVt
ZW50SGVscGVyczo6aXNWYWxpZFByb3RvdHlwZVBhcmFtZXRlcihwcm90b3R5cGVWYWx1ZSwgc3Rh
dGUpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKworICAgIFJlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IGZyZXNoID0g
Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjpjcmVhdGUoc3RhdGUsIG1fZG9jdW1lbnQsIG5ld05h
bWUsICJIVE1MQ3VzdG9tRWxlbWVudCIsIHByb3RvdHlwZVZhbHVlKTsKKyAgICBpZiAoIWZyZXNo
KSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKyAgICAgICAgCisgICAgbV9jb25zdHJ1Y3RvcnMuYWRkKGZyZXNoLT50YWdOYW1lKCku
aW1wbCgpLCBmcmVzaCk7CisgICAgcmV0dXJuIGZyZXNoOworfQorCitDdXN0b21FbGVtZW50Q29u
c3RydWN0b3IqIEN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6ZmluZChjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lKSBjb25zdAoreworICAgIENvbnN0cnVjdG9yTWFwOjpjb25zdF9pdGVyYXRvciBmb3Vu
ZCA9IG1fY29uc3RydWN0b3JzLmZpbmQobmFtZS5pbXBsKCkpOworICAgIHJldHVybiAoZm91bmQg
IT0gbV9jb25zdHJ1Y3RvcnMuZW5kKCkpID8gZm91bmQtPnZhbHVlLmdldCgpIDogMDsKK30KKwor
UGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpjcmVhdGVFbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0Cit7CisgICAgaWYgKEN1c3RvbUVs
ZW1lbnRDb25zdHJ1Y3RvciogZm91bmQgPSBmaW5kKG5hbWUpKQorICAgICAgICByZXR1cm4gZm91
bmQtPmNyZWF0ZUVsZW1lbnQoKTsKKyAgICByZXR1cm4gMDsKK30KKworfQorCisjZW5kaWYgLy8g
RU5BQkxFKENVU1RPTV9FTEVNRU5UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9D
dXN0b21FbGVtZW50UmVnaXN0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50
UmVnaXN0cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41Zjg1MGNkN2YzMjJiNTczNGM4OTgxZjlkNTNiZjQ2NzYw
ZjczYmVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1l
bnRSZWdpc3RyeS5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICog
My4gTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBj
b250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEN1c3RvbUVsZW1l
bnRSZWdpc3RyeV9oCisjZGVmaW5lIEN1c3RvbUVsZW1lbnRSZWdpc3RyeV9oCisKKyNpZiBFTkFC
TEUoQ1VTVE9NX0VMRU1FTlRTKQorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1
ZGUgIlF1YWxpZmllZE5hbWUuaCIKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUg
IlN1cHBsZW1lbnRhYmxlLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEN1c3RvbUVsZW1l
bnRDb25zdHJ1Y3RvcjsKK2NsYXNzIERpY3Rpb25hcnk7CitjbGFzcyBEb2N1bWVudDsKK2NsYXNz
IEhUTUxFbGVtZW50OworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKK2NsYXNzIFF1YWxp
ZmllZE5hbWU7CisKK2NsYXNzIEN1c3RvbUVsZW1lbnRSZWdpc3RyeSB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5KERvY3VtZW50
Kik7CisgICAgfkN1c3RvbUVsZW1lbnRSZWdpc3RyeSgpOworCisgICAgUGFzc1JlZlB0cjxDdXN0
b21FbGVtZW50Q29uc3RydWN0b3I+IHJlZ2lzdGVyRWxlbWVudChXZWJDb3JlOjpTY3JpcHRTdGF0
ZSosIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgRGljdGlvbmFyeSYgb3B0aW9ucywg
RXhjZXB0aW9uQ29kZSYpOworICAgIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciogZmluZChjb25z
dCBRdWFsaWZpZWROYW1lJikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gY3Jl
YXRlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7CisKKyAgICBzdGF0aWMgQ3Vz
dG9tRWxlbWVudENvbnN0cnVjdG9yKiBjb25zdHJ1Y3Rvck9mKEhUTUxFbGVtZW50Kik7CisKK3By
aXZhdGU6CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJik7
CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8UXVhbGlmaWVkTmFtZTo6UXVhbGlmaWVkTmFtZUltcGwq
LCBSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiA+Q29uc3RydWN0b3JNYXA7CisKKyAg
ICBEb2N1bWVudCogbV9kb2N1bWVudDsKKyAgICBDb25zdHJ1Y3Rvck1hcCBtX2NvbnN0cnVjdG9y
czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDVVNU
T01fRUxFTUVOVFMpCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDRkNjI5NjNj
YTExZTUwOThmMGUxZjc3NzcyZjFhZDg5MWM1ODhkMzcuLjY5MjlkOTU1MDI4YjBhZjZjNjE2NDk0
OTQxN2NjOGNjMWI3ZmRiZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNDYsMTEgKzQ2
LDE0IEBACiAjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCiAjaW5jbHVkZSAiQ29u
dGV4dEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCisjaW5jbHVkZSAiQ3VzdG9t
RWxlbWVudENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Lmgi
CiAjaW5jbHVkZSAiRE9NSW1wbGVtZW50YXRpb24uaCIKICNpbmNsdWRlICJET01OYW1lZEZsb3dD
b2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRE9NU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRE9NV2lu
ZG93LmgiCiAjaW5jbHVkZSAiRGF0ZUNvbXBvbmVudHMuaCIKKyNpbmNsdWRlICJEaWN0aW9uYXJ5
LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRFdmVudFF1ZXVlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRG
cmFnbWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCkBAIC02NzQsNiArNjc3LDEw
IEBAIHZvaWQgRG9jdW1lbnQ6OnJlbW92ZWRMYXN0UmVmKCkKICAgICAgICAgbV9mdWxsU2NyZWVu
RWxlbWVudFN0YWNrLmNsZWFyKCk7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDVVNUT01fRUxFTUVO
VFMpCisgICAgICAgIG1fcmVnaXN0cnkuY2xlYXIoKTsKKyNlbmRpZgorCiAgICAgICAgIGRldGFj
aFBhcnNlcigpOwogCiAgICAgICAgIC8vIHJlbW92ZURldGFjaGVkQ2hpbGRyZW4oKSBkb2Vzbid0
IGFsd2F5cyB1bnJlZ2lzdGVyIElEcywKQEAgLTg0Miw2ICs4NDksMjAgQEAgUGFzc1JlZlB0cjxF
bGVtZW50PiBEb2N1bWVudDo6Y3JlYXRlRWxlbWVudChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUs
IEV4Y2VwdGlvbkMKICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChRdWFsaWZpZWROYW1lKG51bGxB
dG9tLCBuYW1lLCBudWxsQXRvbSksIGZhbHNlKTsKIH0KIAorI2lmIEVOQUJMRShDVVNUT01fRUxF
TUVOVFMpCitQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gRG9jdW1lbnQ6OnJl
Z2lzdGVyRWxlbWVudChXZWJDb3JlOjpTY3JpcHRTdGF0ZSogc3RhdGUsIGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJuIHJlZ2lzdGVyRWxl
bWVudChzdGF0ZSwgbmFtZSwgRGljdGlvbmFyeSgpLCBlYyk7Cit9CisKK1Bhc3NSZWZQdHI8Q3Vz
dG9tRWxlbWVudENvbnN0cnVjdG9yPiBEb2N1bWVudDo6cmVnaXN0ZXJFbGVtZW50KFdlYkNvcmU6
OlNjcmlwdFN0YXRlKiBzdGF0ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBEaWN0
aW9uYXJ5JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIW1fcmVnaXN0
cnkpCisgICAgICAgIG1fcmVnaXN0cnkgPSBhZG9wdFB0cihuZXcgQ3VzdG9tRWxlbWVudFJlZ2lz
dHJ5KHRoaXMpKTsKKyAgICByZXR1cm4gbV9yZWdpc3RyeS0+cmVnaXN0ZXJFbGVtZW50KHN0YXRl
LCBuYW1lLCBvcHRpb25zLCBlYyk7Cit9CisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9FTEVNRU5U
UykKKwogUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBEb2N1bWVudDo6Y3JlYXRlRG9jdW1l
bnRGcmFnbWVudCgpCiB7CiAgICAgcmV0dXJuIERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZShkb2N1
bWVudCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggNzJjODM5OTNiZTA3ZmY4YzI3NjIwMjk5
YWEyMTY0OTZjZjdmNTllNy4uODUwYWE0NmVmNjQzYWM5MDI4ZTdmODUwOTAzNjA4NmRhY2QyZGIy
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTcwLDYgKzcwLDggQEAgY2xhc3MgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDsKIGNsYXNzIENoYXJhY3RlckRhdGE7CiBjbGFzcyBDb21tZW50OwogY2xh
c3MgQ29udGV4dEZlYXR1cmVzOworY2xhc3MgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOworY2xh
c3MgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5OwogY2xhc3MgRE9NSW1wbGVtZW50YXRpb247CiBjbGFz
cyBET01OYW1lZEZsb3dDb2xsZWN0aW9uOwogY2xhc3MgRE9NU2VsZWN0aW9uOwpAQCAtMTE2NSw2
ICsxMTY3LDEzIEBAIHB1YmxpYzoKICAgICBUZXh0QXV0b3NpemVyKiB0ZXh0QXV0b3NpemVyKCkg
eyByZXR1cm4gbV90ZXh0QXV0b3NpemVyLmdldCgpOyB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShD
VVNUT01fRUxFTUVOVFMpCisgICAgUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+
IHJlZ2lzdGVyRWxlbWVudChXZWJDb3JlOjpTY3JpcHRTdGF0ZSosIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yPiByZWdpc3RlckVsZW1lbnQoV2ViQ29yZTo6U2NyaXB0U3RhdGUqLCBjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IERpY3Rpb25hcnkmIG9wdGlvbnMsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+IGNyZWF0ZUN1c3RvbUVsZW1lbnQoY29uc3Qg
QXRvbWljU3RyaW5nJiB0YWdOYW1lKTsKKyAgICBDdXN0b21FbGVtZW50UmVnaXN0cnkqIHJlZ2lz
dHJ5KCkgY29uc3QgeyByZXR1cm4gbV9yZWdpc3RyeS5nZXQoKTsgfQorI2VuZGlmCisKICAgICB2
b2lkIGFkanVzdEZsb2F0UXVhZHNGb3JTY3JvbGxBbmRBYnNvbHV0ZVpvb21BbmRGcmFtZVNjYWxl
KFZlY3RvcjxGbG9hdFF1YWQ+JiwgUmVuZGVyT2JqZWN0Kik7CiAgICAgdm9pZCBhZGp1c3RGbG9h
dFJlY3RGb3JTY3JvbGxBbmRBYnNvbHV0ZVpvb21BbmRGcmFtZVNjYWxlKEZsb2F0UmVjdCYsIFJl
bmRlck9iamVjdCopOwogCkBAIC0xNTQzLDYgKzE1NTIsMTAgQEAgcHJpdmF0ZToKICAgICBPd25Q
dHI8VGV4dEF1dG9zaXplcj4gbV90ZXh0QXV0b3NpemVyOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUo
Q1VTVE9NX0VMRU1FTlRTKQorICAgIE93blB0cjxDdXN0b21FbGVtZW50UmVnaXN0cnk+IG1fcmVn
aXN0cnk7CisjZW5kaWYKKwogICAgIGJvb2wgbV9zY2hlZHVsZWRUYXNrc0FyZVN1c3BlbmRlZDsK
ICAgICAKICAgICBib29sIG1fdmlzdWFsVXBkYXRlc0FsbG93ZWQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtlX25h
bWVzLnBsCmluZGV4IDIwMWY0NWY0NGU4Njg4NzA5NDc0MzNlMzA1ZDY3MTc1ODc4Y2U4M2EuLjM1
YmE5MTRkNDI2OTY0ZWE1MjY4MTBiMGQ0OGYxODY0MDFiMmRhMTEgMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtl
X25hbWVzLnBsCkBAIC0xMTcyLDggKzExNzIsOCBAQCBFTkQKIDsKICAgICB9IGVsc2lmICgkd3Jh
cHBlckZhY3RvcnlUeXBlIGVxICJWOCIpIHsKICAgICAgICAgcHJpbnQgRiA8PEVORAorI2luY2x1
ZGUgIlY4SFRNTEN1c3RvbUVsZW1lbnQuaCIKICNpbmNsdWRlICJWOCRwYXJhbWV0ZXJze25hbWVz
cGFjZX1FbGVtZW50LmgiCi0gICAgICAgIAogI2luY2x1ZGUgPHY4Lmg+CiBFTkQKIDsKQEAgLTEy
NzQsNiArMTI3NCwxMSBAQCBFTkQKICAgICByZXR1cm4gVjhTVkdFbGVtZW50OjpjcmVhdGVXcmFw
cGVyKGVsZW1lbnQsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiBFTkQKIDsKKyAgICAgICAg
fSBlbHNpZiAoJHBhcmFtZXRlcnN7bmFtZXNwYWNlfSBlcSAiSFRNTCIpIHsKKyAgICAgICAgICAg
IHByaW50IEYgPDxFTkQKKyAgICByZXR1cm4gVjhIVE1MQ3VzdG9tRWxlbWVudDo6dG9WOChlbGVt
ZW50LCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworRU5ECis7CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBwcmludCBGIDw8RU5ECiAgICAgcmV0dXJuIHdyYXAodG8kcGFyYW1ldGVy
c3tmYWxsYmFja0ludGVyZmFjZU5hbWV9KGVsZW1lbnQpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xh
dGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaWRsIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaWRsCmluZGV4IDI1ZjBhNWMzOTAzNTEx
NGI1ZGYxOTE3YzI5NTI5MTYwYTliNDdjOTguLjdjMjlmY2I1ZGMxODkyYWFhYzcyZjUyNDAzNjNl
ZTJjMjRkMjNkOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50
LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5pZGwKQEAgLTUzLDYg
KzUzLDExIEBACiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEVsZW1lbnQgYWN0aXZlRWxlbWVudDsK
ICAgICBib29sZWFuIGhhc0ZvY3VzKCk7CiAKKyNpZiBkZWZpbmVkKEVOQUJMRV9DVVNUT01fRUxF
TUVOVFMpICYmIEVOQUJMRV9DVVNUT01fRUxFTUVOVFMKKyAgICBbVjhFbmFibGVkQXRSdW50aW1l
PWN1c3RvbURPTUVsZW1lbnRzLCBDb25kaXRpb25hbD1DVVNUT01fRUxFTUVOVFMsIEltcGxlbWVu
dGVkQXM9cmVnaXN0ZXJFbGVtZW50LCBDYWxsV2l0aD1TY3JpcHRTdGF0ZV0KKyAgICBDdXN0b21F
bGVtZW50Q29uc3RydWN0b3Igd2Via2l0UmVnaXN0ZXIoaW4gRE9NU3RyaW5nIG5hbWUsIGluIFtP
cHRpb25hbF0gRGljdGlvbmFyeSBvcHRpb25zKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyNlbmRp
ZgorCiAgICAgLy8gRGVwcmVjYXRlZCBhdHRyaWJ1dGVzCiAgICAgICAgICAgICAgW1RyZWF0TnVs
bEFzPU51bGxTdHJpbmddIGF0dHJpYnV0ZSBET01TdHJpbmcgYmdDb2xvcjsKICAgICAgICAgICAg
ICBbVHJlYXROdWxsQXM9TnVsbFN0cmluZ10gYXR0cmlidXRlIERPTVN0cmluZyBmZ0NvbG9yOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCmluZGV4IGYzZjlmZDUxOTEyM2M4NGU0MmZi
ODE0MDhmNGY1MTg4Y2I4ZDE3NDcuLjE1MGEwMGYxMTJlODYzYjk5ZDdhNGVmYmYwNDBkNjI0Yjll
ZWE0ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKQEAgLTU0LDYgKzU0LDcg
QEAKICAgICAgICdFTkFCTEVfQ1NTX1RSQU5TRk9STVNfQU5JTUFUSU9OU19VTlBSRUZJWEVEPTAn
LAogICAgICAgJ0VOQUJMRV9DU1NfVkFSSUFCTEVTPTEnLAogICAgICAgJ0VOQUJMRV9DU1NfU1RJ
Q0tZX1BPU0lUSU9OPTEnLAorICAgICAgJ0VOQUJMRV9DVVNUT01fRUxFTUVOVFM9MScsCiAgICAg
ICAnRU5BQkxFX0NVU1RPTV9TQ0hFTUVfSEFORExFUj0wJywKICAgICAgICdFTkFCTEVfREFTSEJP
QVJEX1NVUFBPUlQ9MCcsCiAgICAgICAnRU5BQkxFX0RBVEFfVFJBTlNGRVJfSVRFTVM9MScsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJSdW50aW1lRmVhdHVy
ZXMuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlJ1bnRpbWVGZWF0dXJlcy5o
CmluZGV4IDRhM2FjNDM1OTA1NzE1NTRkZDlmZmU4NGFmYmY2MzBjNzQ1YjczNTYuLmU3NTZjY2Mx
MDAzNTAzOTA1Y2VkNWUyNmI5MWE2ODJmZjM3YTc3NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYlJ1bnRpbWVGZWF0dXJlcy5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYlJ1bnRpbWVGZWF0dXJlcy5oCkBAIC0xMjUsNiArMTI1LDkg
QEAgcHVibGljOgogICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIHZvaWQgZW5hYmxlU2hhZG93RE9N
KGJvb2wpOwogICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIGJvb2wgaXNTaGFkb3dET01FbmFibGVk
KCk7CiAKKyAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyB2b2lkIGVuYWJsZUN1c3RvbURPTUVsZW1l
bnRzKGJvb2wpOworICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIGJvb2wgaXNDdXN0b21ET01FbGVt
ZW50c0VuYWJsZWQoKTsKKwogICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIHZvaWQgZW5hYmxlU3R5
bGVTY29wZWQoYm9vbCk7CiAgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgYm9vbCBpc1N0eWxlU2Nv
cGVkRW5hYmxlZCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJSdW50aW1lRmVhdHVyZXMuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUnVu
dGltZUZlYXR1cmVzLmNwcAppbmRleCBkNWIwY2RjNTRiYmRiMzFkZDEwOTZjMTBlY2JiMTdhOWEx
ZjNkOTQwLi4xYWJmMTU5MTQyNDY2M2FkNjVkOTM5Y2Y4M2ExYjQ1NjM0M2M5YmEwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJSdW50aW1lRmVhdHVyZXMuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlJ1bnRpbWVGZWF0dXJlcy5jcHAKQEAg
LTQ4MSw2ICs0ODEsMjUgQEAgYm9vbCBXZWJSdW50aW1lRmVhdHVyZXM6OmlzU2hhZG93RE9NRW5h
YmxlZCgpCiAjZW5kaWYKIH0KIAordm9pZCBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZUN1c3Rv
bURPTUVsZW1lbnRzKGJvb2wgZW5hYmxlKQoreworI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMp
CisgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0Q3VzdG9tRE9NRWxlbWVudHMoZW5hYmxl
KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGVuYWJsZSk7CisjZW5kaWYKK30KKworYm9vbCBX
ZWJSdW50aW1lRmVhdHVyZXM6OmlzQ3VzdG9tRE9NRWxlbWVudHNFbmFibGVkKCkKK3sKKyNpZiBF
TkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorICAgIHJldHVybiBSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpjdXN0b21ET01FbGVtZW50c0VuYWJsZWQoKTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOwor
I2VuZGlmCit9CisKKwogdm9pZCBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZVN0eWxlU2NvcGVk
KGJvb2wgZW5hYmxlKQogewogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCmRpZmYgLS1naXQgYS9U
b29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNTA2ZTQxMDE0ODNiZDNiMjIx
ZGI4YzVlOTEyNzhhZGFkMjQ0MmRmMS4uMjBkZjRiOWNjNTEwNThmZDBmYWU2YTgzZGQ3NGExNjc5
M2E1MDQ2MyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE1IEBACisyMDEzLTAxLTI3ICBIYWppbWUgTW9ycml0YSAgPG1vcnJpdGFA
Z29vZ2xlLmNvbT4KKworICAgICAgICBbQ3VzdG9tIEVsZW1lbnRzXSBJbXBsZW1lbnQgYmFyZS1i
b25lIGRvY3VtZW50LnJlZ2lzdGVyKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwMDIyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZGVkIGVuYWJsZUN1c3RvbURPTUVsZW1lbnRzIGZsYWcuCisKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwOgorICAgICAgICAo
VGVzdFNoZWxsOjpUZXN0U2hlbGwpOgorCiAyMDEzLTAyLTE0ICBLYXJlbiBHcnVuYmVyZyAgPGth
cmVuZ0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgYWRkaW5nIG15c2VsZiBhcyBhIGNvbW1pdHRl
cgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNw
cCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKaW5kZXggNTBl
ZTZhZjJjOTZhODI1YTBmNjU5Y2RkNTk3MjBjZjBiYjBmNWI5MS4uMGQ2NzQzZjhjNWQwOGVjOTVl
Y2RjNmNlZmE5MzQwZWU2M2NkM2RhNyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFNoZWxsLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0U2hlbGwuY3BwCkBAIC0xNDUsNiArMTQ1LDcgQEAgVGVzdFNoZWxsOjpUZXN0U2hlbGwo
KQogICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlVmlkZW9UcmFjayh0cnVlKTsKICAgICBX
ZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZUdhbWVwYWQodHJ1ZSk7CiAgICAgV2ViUnVudGltZUZl
YXR1cmVzOjplbmFibGVTaGFkb3dET00odHJ1ZSk7CisgICAgV2ViUnVudGltZUZlYXR1cmVzOjpl
bmFibGVDdXN0b21ET01FbGVtZW50cyh0cnVlKTsKICAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVu
YWJsZVN0eWxlU2NvcGVkKHRydWUpOwogICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlU2Ny
aXB0ZWRTcGVlY2godHJ1ZSk7CiAgICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVSZXF1ZXN0
QXV0b2NvbXBsZXRlKHRydWUpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDAwODMzNzY4MGIzZGQwNTY4NjMwYTMzNjM3MzFm
YmEzNjRmNDU3ZTEuLjg2NzhlNzM1MmFjYzVjYTZiMWE1NjBhZTQxYWZiODc3ZTVhMmU2NDMgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMy0wMi0xNCAgSGFqaW1lIE1vcnJpdGEgIDxtb3JyaXRh
QGdvb2dsZS5jb20+CisKKyAgICAgICAgW0N1c3RvbSBFbGVtZW50c10gSW1wbGVtZW50IGJhcmUt
Ym9uZSBkb2N1bWVudC5yZWdpc3RlcigpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMDAyMjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIGZhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1iYXNp
Yy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL2N1c3RvbS9kb2N1bWVu
dC1yZWdpc3Rlci1iYXNpYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9jdXN0b20v
ZG9jdW1lbnQtcmVnaXN0ZXItcmVlbnRyYW50LW51bGwtY29uc3RydWN0b3ItZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVl
bnRyYW50LW51bGwtY29uc3RydWN0b3IuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20v
Y3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFudC1yZXR1cm5pbmctZmFrZS1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rl
ci1yZWVudHJhbnQtcmV0dXJuaW5nLWZha2UuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9k
b20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFudC10aHJvd2luZy1jb25zdHJ1Y3Rv
ci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL2N1c3RvbS9kb2N1bWVu
dC1yZWdpc3Rlci1yZWVudHJhbnQtdGhyb3dpbmctY29uc3RydWN0b3IuaHRtbDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9kb20vY3VzdG9tL3Jlc291cmNlcy9kb2N1bWVudC1yZWdpc3Rlci1mdXp6
LmpzOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9uczoKKwog
MjAxMy0wMi0xNCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZlcnRpbmcgcjE0Mjg2MS4gSGl0IHRlc3RpbmcgaW5zaWRlIG9mIHN0eWxlIHJlY2Fs
YyBpcyBmdW5kYW1lbnRhbGx5IHdyb25nCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLWJhc2ljLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mY2YxYmEzMDgwYTNiYmI5YTI3MTIyY2FkYTFiMTYxNThhOGM3OGI3Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lz
dGVyLWJhc2ljLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQ1IEBACitUZXN0aW5nIGRvY3VtZW50
LnJlZ2lzdGVyKCkgYmFzaWMgYmVoYXZpb3JzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworUEFTUyBkb2N1bWVudC5yZWdpc3RlcignZm9vJywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRl
cnMoKSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJbnZhbGlkQ2hhcmFjdGVyRXJyb3I6IERPTSBF
eGNlcHRpb24gNS4KK1BBU1MgZG9jdW1lbnQucmVnaXN0ZXIoJ3hmb28nLCBjcmVhdGVSZWdpc3Rl
clBhcmFtdGVycygpKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IEludmFsaWRDaGFyYWN0ZXJFcnJv
cjogRE9NIEV4Y2VwdGlvbiA1LgorUEFTUyBkb2N1bWVudC5yZWdpc3RlcignbWlzc2luZy1nbHlw
aCcsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSW52
YWxpZENoYXJhY3RlckVycm9yOiBET00gRXhjZXB0aW9uIDUuCitQQVNTIHR5cGVvZiBmb29Db25z
dHJ1Y3RvciBpcyAnZnVuY3Rpb24nCitQQVNTIGZvb0NvbnN0cnVjdG9yLnByb3RvdHlwZS5fX3By
b3RvX18gaXMgSFRNTFBhcmFncmFwaEVsZW1lbnQucHJvdG90eXBlCitQQVNTIGZvb0NvbnN0cnVj
dG9yLnByb3RvdHlwZS50aGlzSXNQcm90b3R5cGUgaXMgdHJ1ZQorUEFTUyBkb2N1bWVudC5yZWdp
c3RlcigneC1mb28nLCBjcmVhdGVSZWdpc3RlclBhcmFtdGVycygpKSB0aHJldyBleGNlcHRpb24g
RXJyb3I6IEludmFsaWRTdGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDExLgorUEFTUyBkb2N1bWVu
dC5yZWdpc3RlcignWC1GT08nLCBjcmVhdGVSZWdpc3RlclBhcmFtdGVycygpKSB0aHJldyBleGNl
cHRpb24gRXJyb3I6IEludmFsaWRTdGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDExLgorUEFTUyBk
b2N1bWVudC5yZWdpc3RlcigneC1iYWQtYScsIHsgcHJvdG90eXBlOiBIVE1MU3BhbkVsZW1lbnQu
cHJvdG90eXBlIH0pIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSW52YWxpZFN0YXRlRXJyb3I6IERP
TSBFeGNlcHRpb24gMTEuCitQQVNTIGRvY3VtZW50LnJlZ2lzdGVyKCd4LWJhZC1iJywgeyBwcm90
b3R5cGU6IHt9IH0pIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSW52YWxpZFN0YXRlRXJyb3I6IERP
TSBFeGNlcHRpb24gMTEuCitQQVNTIGRvY3VtZW50LnJlZ2lzdGVyKCd4LWJhZC1jJywgeyBwcm90
b3R5cGU6IE9iamVjdC5jcmVhdGUoRG9jdW1lbnQucHJvdG90eXBlKSB9KSB0aHJldyBleGNlcHRp
b24gRXJyb3I6IEludmFsaWRTdGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDExLgorUEFTUyBmb29D
b25zdHJ1Y3RvcigpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IERPTSBvYmplY3QgY29uc3Ry
dWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLi4KK1BBU1MgY3JlYXRlZEZvby5f
X3Byb3RvX18gaXMgZm9vQ29uc3RydWN0b3IucHJvdG90eXBlCitQQVNTIGNyZWF0ZWRGb28uY29u
c3RydWN0b3IgaXMgZm9vQ29uc3RydWN0b3IKK1BBU1MgY3JlYXRlZEZvby50YWdOYW1lIGlzICdY
LUZPTycKK1BBU1MgY3JlYXRlZEZvby50ZXh0Q29udGVudCBpcyAnSGVsbG8nCitQQVNTIGNyZWF0
ZWRGb28ubGFzdENoaWxkIGlzIGNoaWxkRGl2CitQQVNTIHBhcnNlZEZvby5fX3Byb3RvX18gaXMg
Zm9vQ29uc3RydWN0b3IucHJvdG90eXBlCitQQVNTIHBhcnNlZEZvby50YWdOYW1lIGlzICdYLUZP
TycKK1BBU1MgcGFyc2VkRm9vLnNvbWVQcm9wZXJ0eSBpcyBjb250YWluZXIuZmlyc3RDaGlsZC5z
b21lUHJvcGVydHkKK1BBU1MgY3JlYXRlZEJhci50YWdOYW1lIGlzICdYLUJBUicKK1BBU1MgY3Jl
YXRlZEJhei50YWdOYW1lIGlzICdYLUJBWicKK1BBU1MgY3JlYXRlZEJhei50aGlzSXNQcm90b3R5
cGUgaXMgdHJ1ZQorUEFTUyBjcmVhdGVkQmF6LnRoaXNJc0Fsc29Qcm90b3R5cGUgaXMgdHJ1ZQor
UEFTUyBjcmVhdGVkVXBwZXJCYXIuY29uc3RydWN0b3IgaXMgYmFyQ29uc3RydWN0b3IKK1BBU1Mg
Y3JlYXRlZFVwcGVyQmFyLnRhZ05hbWUgaXMgJ1gtQkFSJworUEFTUyBjcmVhdGVkTWl4ZWRCYXIu
Y29uc3RydWN0b3IgaXMgYmFyQ29uc3RydWN0b3IKK1BBU1MgY3JlYXRlZE1peGVkQmFyLnRhZ05h
bWUgaXMgJ1gtQkFSJworUEFTUyBjb250YWluZXIuZmlyc3RDaGlsZC5jb25zdHJ1Y3RvciBpcyBi
YXJDb25zdHJ1Y3RvcgorUEFTUyBjb250YWluZXIuZmlyc3RDaGlsZC50YWdOYW1lIGlzICdYLUJB
UicKK1BBU1MgY29udGFpbmVyLmxhc3RDaGlsZC5jb25zdHJ1Y3RvciBpcyBiYXJDb25zdHJ1Y3Rv
cgorUEFTUyBjb250YWluZXIubGFzdENoaWxkLnRhZ05hbWUgaXMgJ1gtQkFSJworUEFTUyAobmV3
IChkb2N1bWVudC5yZWdpc3RlcigneS1iYXInLCBjcmVhdGVSZWdpc3RlclBhcmFtdGVycygpKSko
KSkudGFnTmFtZSBpcyAnWS1CQVInCitQQVNTIChuZXcgKGRvY3VtZW50LnJlZ2lzdGVyKCd5ei1i
YXInLCBjcmVhdGVSZWdpc3RlclBhcmFtdGVycygpKSkoKSkudGFnTmFtZSBpcyAnWVotQkFSJwor
UEFTUyAobmV3IChkb2N1bWVudC5yZWdpc3RlcigneS16LWJhcicsIGNyZWF0ZVJlZ2lzdGVyUGFy
YW10ZXJzKCkpKSgpKS50YWdOYW1lIGlzICdZLVotQkFSJworUEFTUyAobmV3IChkb2N1bWVudC5y
ZWdpc3RlcigneS0tYmFyJywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSkpKCkpLnRhZ05hbWUg
aXMgJ1ktLUJBUicKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQt
cmVnaXN0ZXItYmFzaWMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVu
dC1yZWdpc3Rlci1iYXNpYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg4ZDg3MTFlZWYyOGE2N2Q0ZWNkMTVk
NTk5ZTY2YTgyOTY3NmIxNzUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMuaHRtbApAQCAtMCwwICsxLDExMiBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYg
aWQ9ImNvbnRhaW5lciI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3RpbmcgZG9j
dW1lbnQucmVnaXN0ZXIoKSBiYXNpYyBiZWhhdmlvcnMuIik7CisKK2lmICh3aW5kb3cudGVzdFJ1
bm5lcikKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKK2RvY3VtZW50LnJlZ2lzdGVyID0g
ZG9jdW1lbnQucmVnaXN0ZXIgfHwgZG9jdW1lbnQud2Via2l0UmVnaXN0ZXI7CisKK2Z1bmN0aW9u
IGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkKK3sKKyAgICByZXR1cm4geworICAgICAgICBwcm90
b3R5cGU6IE9iamVjdC5jcmVhdGUoSFRNTFBhcmFncmFwaEVsZW1lbnQucHJvdG90eXBlLCB7IHRo
aXNJc1Byb3RvdHlwZTogeyB2YWx1ZTogdHJ1ZSB9IH0pCisgICAgfTsKK30KKworLy8gSW52YWxp
ZCBuYW1lcworc2hvdWxkVGhyb3coImRvY3VtZW50LnJlZ2lzdGVyKCdmb28nLCBjcmVhdGVSZWdp
c3RlclBhcmFtdGVycygpKSIsICInRXJyb3I6IEludmFsaWRDaGFyYWN0ZXJFcnJvcjogRE9NIEV4
Y2VwdGlvbiA1JyIpOworc2hvdWxkVGhyb3coImRvY3VtZW50LnJlZ2lzdGVyKCd4Zm9vJywgY3Jl
YXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSkiLCAiJ0Vycm9yOiBJbnZhbGlkQ2hhcmFjdGVyRXJyb3I6
IERPTSBFeGNlcHRpb24gNSciKTsKK3Nob3VsZFRocm93KCJkb2N1bWVudC5yZWdpc3RlcignbWlz
c2luZy1nbHlwaCcsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpIiwgIidFcnJvcjogSW52YWxp
ZENoYXJhY3RlckVycm9yOiBET00gRXhjZXB0aW9uIDUnIik7CisKK3ZhciBmb29Db25zdHJ1Y3Rv
ciA9IGRvY3VtZW50LnJlZ2lzdGVyKCJ4LWZvbyIsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkp
Oworc2hvdWxkQmUoInR5cGVvZiBmb29Db25zdHJ1Y3RvciIsICInZnVuY3Rpb24nIik7CitzaG91
bGRCZSgiZm9vQ29uc3RydWN0b3IucHJvdG90eXBlLl9fcHJvdG9fXyIsICJIVE1MUGFyYWdyYXBo
RWxlbWVudC5wcm90b3R5cGUiKTsKK3Nob3VsZEJlVHJ1ZSgiZm9vQ29uc3RydWN0b3IucHJvdG90
eXBlLnRoaXNJc1Byb3RvdHlwZSIpOworCisvLyBOYW1lIGNvbmZsaWN0cworc2hvdWxkVGhyb3co
ImRvY3VtZW50LnJlZ2lzdGVyKCd4LWZvbycsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpIiwg
IidFcnJvcjogSW52YWxpZFN0YXRlRXJyb3I6IERPTSBFeGNlcHRpb24gMTEnIik7CitzaG91bGRU
aHJvdygiZG9jdW1lbnQucmVnaXN0ZXIoJ1gtRk9PJywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMo
KSkiLCAiJ0Vycm9yOiBJbnZhbGlkU3RhdGVFcnJvcjogRE9NIEV4Y2VwdGlvbiAxMSciKTsKKwor
Ly8gQmFkIHByb3RvdHlwZTogY29uc3RydWN0b3IgcHJvcGVydHkgZXhpc3RzCitzaG91bGRUaHJv
dygiZG9jdW1lbnQucmVnaXN0ZXIoJ3gtYmFkLWEnLCB7IHByb3RvdHlwZTogSFRNTFNwYW5FbGVt
ZW50LnByb3RvdHlwZSB9KSIsICInRXJyb3I6IEludmFsaWRTdGF0ZUVycm9yOiBET00gRXhjZXB0
aW9uIDExJyIpOworLy8gQmFkIHByb3RvdHlwZTogbWlzc2luZyBfX3Byb3RvX18KK3Nob3VsZFRo
cm93KCJkb2N1bWVudC5yZWdpc3RlcigneC1iYWQtYicsIHsgcHJvdG90eXBlOiB7fSB9KSIsICIn
RXJyb3I6IEludmFsaWRTdGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDExJyIpOworLy8gQmFkIHBy
b3RvdHlwZTogd3JvbmcgX19wcm90b19fCitzaG91bGRUaHJvdygiZG9jdW1lbnQucmVnaXN0ZXIo
J3gtYmFkLWMnLCB7IHByb3RvdHlwZTogT2JqZWN0LmNyZWF0ZShEb2N1bWVudC5wcm90b3R5cGUp
IH0pIiwgIidFcnJvcjogSW52YWxpZFN0YXRlRXJyb3I6IERPTSBFeGNlcHRpb24gMTEnIik7CisK
Ky8vIENhbGwgYXMgZnVuY3Rpb24KK3Nob3VsZFRocm93KCJmb29Db25zdHJ1Y3RvcigpIiwgIidU
eXBlRXJyb3I6IERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1
bmN0aW9uLiciKQorCisvLyBDb25zdHJ1Y3RvciBpbml0aWF0ZWQgaW5zdGFudGlhdGlvbgordmFy
IGNyZWF0ZWRGb28gPSBuZXcgZm9vQ29uc3RydWN0b3IoKTsKKworLy8gSlMgYnVpbHQtaW4gcHJv
cGVydGllcworc2hvdWxkQmUoImNyZWF0ZWRGb28uX19wcm90b19fIiwgImZvb0NvbnN0cnVjdG9y
LnByb3RvdHlwZSIpOworc2hvdWxkQmUoImNyZWF0ZWRGb28uY29uc3RydWN0b3IiLCAiZm9vQ29u
c3RydWN0b3IiKTsKKworLy8gTmF0aXZlIGdldHRlcgorc2hvdWxkQmUoImNyZWF0ZWRGb28udGFn
TmFtZSIsICInWC1GT08nIik7CisKKy8vIE5hdGl2ZSBzZXR0ZXIKK2NyZWF0ZWRGb28uaW5uZXJI
VE1MID0gIkhlbGxvIjsKK3Nob3VsZEJlKCJjcmVhdGVkRm9vLnRleHRDb250ZW50IiwgIidIZWxs
byciKTsKKworLy8gTmF0aXZlIG1ldGhvZAordmFyIGNoaWxkRGl2ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiZGl2Iik7CitjcmVhdGVkRm9vLmFwcGVuZENoaWxkKGNoaWxkRGl2KTsKK3Nob3Vs
ZEJlKCJjcmVhdGVkRm9vLmxhc3RDaGlsZCIsICJjaGlsZERpdiIpOworCisvLyBQYXJzZXIgaW5p
dGlhdGVkIGluc3RhbnRpYXRpb24KK3ZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiY29udGFpbmVyIik7Citjb250YWluZXIuaW5uZXJIVE1MID0gIjx4LWZvbz48L3gtZm9v
PiI7CitwYXJzZWRGb28gPSBjb250YWluZXIuZmlyc3RDaGlsZDsKKworc2hvdWxkQmUoInBhcnNl
ZEZvby5fX3Byb3RvX18iLCAiZm9vQ29uc3RydWN0b3IucHJvdG90eXBlIik7CitzaG91bGRCZSgi
cGFyc2VkRm9vLnRhZ05hbWUiLCAiJ1gtRk9PJyIpOworCisvLyBFbnN1cmluZyB0aGUgd3JhcHBl
ciBpcyByZXRhaW5lZAorcGFyc2VkRm9vLnNvbWVQcm9wZXJ0eSA9ICJoZWxsbyI7CitzaG91bGRC
ZSgicGFyc2VkRm9vLnNvbWVQcm9wZXJ0eSIsICJjb250YWluZXIuZmlyc3RDaGlsZC5zb21lUHJv
cGVydHkiKTsKKworLy8gSGF2aW5nIGFub3RoZXIgY29uc3RydWN0b3IKK3ZhciBiYXJDb25zdHJ1
Y3RvciA9IGRvY3VtZW50LnJlZ2lzdGVyKCJ4LWJhciIsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJz
KCkpOwordmFyIGNyZWF0ZWRCYXIgPSBuZXcgYmFyQ29uc3RydWN0b3IoKTsKK3Nob3VsZEJlKCJj
cmVhdGVkQmFyLnRhZ05hbWUiLCAiJ1gtQkFSJyIpOworCisvLyBIYXZpbmcgYSBzdWJjbGFzcwor
dmFyIGJhekNvbnN0cnVjdG9yID0gZG9jdW1lbnQucmVnaXN0ZXIoIngtYmF6IiwgeyBwcm90b3R5
cGU6IE9iamVjdC5jcmVhdGUoZm9vQ29uc3RydWN0b3IucHJvdG90eXBlLCB7IHRoaXNJc0Fsc29Q
cm90b3R5cGU6IHsgdmFsdWU6IHRydWUgfSB9KSB9KTsKK3ZhciBjcmVhdGVkQmF6ID0gbmV3IGJh
ekNvbnN0cnVjdG9yKCk7CitzaG91bGRCZSgiY3JlYXRlZEJhei50YWdOYW1lIiwgIidYLUJBWici
KTsKK3Nob3VsZEJlVHJ1ZSgiY3JlYXRlZEJhei50aGlzSXNQcm90b3R5cGUiKTsKK3Nob3VsZEJl
VHJ1ZSgiY3JlYXRlZEJhei50aGlzSXNBbHNvUHJvdG90eXBlIik7CisKKy8vIFdpdGggaXJyZWd1
bGFyIGNhc2VzCit2YXIgY3JlYXRlZFVwcGVyQmFyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
WC1CQVIiKTsKK3ZhciBjcmVhdGVkTWl4ZWRCYXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJY
LUJhciIpOworc2hvdWxkQmUoImNyZWF0ZWRVcHBlckJhci5jb25zdHJ1Y3RvciIsICJiYXJDb25z
dHJ1Y3RvciIpOworc2hvdWxkQmUoImNyZWF0ZWRVcHBlckJhci50YWdOYW1lIiwgIidYLUJBUici
KTsKK3Nob3VsZEJlKCJjcmVhdGVkTWl4ZWRCYXIuY29uc3RydWN0b3IiLCAiYmFyQ29uc3RydWN0
b3IiKTsKK3Nob3VsZEJlKCJjcmVhdGVkTWl4ZWRCYXIudGFnTmFtZSIsICInWC1CQVInIik7CisK
K2NvbnRhaW5lci5pbm5lckhUTUwgPSAiPFgtQkFSPjwvWC1CQVI+PFgtQmFyPjwvWC1CYXI+IjsK
K3Nob3VsZEJlKCJjb250YWluZXIuZmlyc3RDaGlsZC5jb25zdHJ1Y3RvciIsICJiYXJDb25zdHJ1
Y3RvciIpOworc2hvdWxkQmUoImNvbnRhaW5lci5maXJzdENoaWxkLnRhZ05hbWUiLCAiJ1gtQkFS
JyIpOworc2hvdWxkQmUoImNvbnRhaW5lci5sYXN0Q2hpbGQuY29uc3RydWN0b3IiLCAiYmFyQ29u
c3RydWN0b3IiKTsKK3Nob3VsZEJlKCJjb250YWluZXIubGFzdENoaWxkLnRhZ05hbWUiLCAiJ1gt
QkFSJyIpOworCisvLyBTdHJhbmdlIGJ1dCB2YWxpZCBuYW1lcworc2hvdWxkQmUoIihuZXcgKGRv
Y3VtZW50LnJlZ2lzdGVyKCd5LWJhcicsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpKSgpKS50
YWdOYW1lIiwgIidZLUJBUiciKTsKK3Nob3VsZEJlKCIobmV3IChkb2N1bWVudC5yZWdpc3Rlcign
eXotYmFyJywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSkpKCkpLnRhZ05hbWUiLCAiJ1laLUJB
UiciKTsKK3Nob3VsZEJlKCIobmV3IChkb2N1bWVudC5yZWdpc3RlcigneS16LWJhcicsIGNyZWF0
ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpKSgpKS50YWdOYW1lIiwgIidZLVotQkFSJyIpOworc2hvdWxk
QmUoIihuZXcgKGRvY3VtZW50LnJlZ2lzdGVyKCd5LS1iYXInLCBjcmVhdGVSZWdpc3RlclBhcmFt
dGVycygpKSkoKSkudGFnTmFtZSIsICInWS0tQkFSJyIpOworCis8L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1
bWVudC1yZWdpc3Rlci1yZWVudHJhbnQtbnVsbC1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVlbnRyYW50LW51
bGwtY29uc3RydWN0b3ItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE2NWI1OThlMzVhMzdjYjk5
YjQ0NjQ1MTNlY2U0MGU2MjZjZTNmNzkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVlbnRyYW50LW51bGwtY29uc3RydWN0
b3ItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsOSBAQAorRnV6emluZyBkb2N1bWVudC5yZWdpc3Rl
cigpIHRocm91Z2ggZ2V0dGVycy4gUEFTUyB1bGVzcyBjcmFzaC4KKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1l
bnQtcmVnaXN0ZXItcmVlbnRyYW50LW51bGwtY29uc3RydWN0b3IuaHRtbCBiL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1yZWVudHJhbnQtbnVsbC1jb25zdHJ1
Y3Rvci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgwOGEwMGI2NzExN2FlNWIyODg2OTViNzIwM2YxNzAwNmFj
ZGRjMTYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9j
dW1lbnQtcmVnaXN0ZXItcmVlbnRyYW50LW51bGwtY29uc3RydWN0b3IuaHRtbApAQCAtMCwwICsx
LDIzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
L3Jlc291cmNlcy9kb2N1bWVudC1yZWdpc3Rlci1mdXp6LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPGRpdiBpZD0iY29udGFpbmVyIj48L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlv
bigiRnV6emluZyBkb2N1bWVudC5yZWdpc3RlcigpIHRocm91Z2ggZ2V0dGVycy4gUEFTUyB1bGVz
cyBjcmFzaC4iKTsKKworc2V0dXBPYmplY3RIb29rcyh7CisgICAgcHJvdG90eXBlR2V0OiBmdW5j
dGlvbigpIHsgfSwKKyAgICBwcm90b3R5cGVTZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7IH0sCisgICAg
Y29uc3RydWN0b3JHZXQ6IGZ1bmN0aW9uKCkgeyB9LAorICAgIGNvbnN0cnVjdG9yU2V0OiBmdW5j
dGlvbih2YWx1ZSkgeyB9Cit9KTsKKworZXhlcmNpc2VEb2N1bWVudFJlZ2lzdGVyKCk7Cis8L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1yZWVudHJhbnQtcmV0dXJuaW5nLWZha2UtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVy
LXJlZW50cmFudC1yZXR1cm5pbmctZmFrZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTY1YjU5
OGUzNWEzN2NiOTliNDQ2NDUxM2VjZTQwZTYyNmNlM2Y3OQotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1yZWVudHJhbnQtcmV0
dXJuaW5nLWZha2UtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsOSBAQAorRnV6emluZyBkb2N1bWVu
dC5yZWdpc3RlcigpIHRocm91Z2ggZ2V0dGVycy4gUEFTUyB1bGVzcyBjcmFzaC4KKworT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0
b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVlbnRyYW50LXJldHVybmluZy1mYWtlLmh0bWwgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVlbnRyYW50LXJldHVy
bmluZy1mYWtlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTdlOTBmYjc2ZTM4ZDdjNTQxNmJiYTY3ZjVhNzUy
OTViYjM4ZGZkYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3Rv
bS9kb2N1bWVudC1yZWdpc3Rlci1yZWVudHJhbnQtcmV0dXJuaW5nLWZha2UuaHRtbApAQCAtMCww
ICsxLDI2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuL3Jlc291cmNlcy9kb2N1bWVudC1yZWdpc3Rlci1mdXp6LmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPGRpdiBpZD0iY29udGFpbmVyIj48L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlw
dGlvbigiRnV6emluZyBkb2N1bWVudC5yZWdpc3RlcigpIHRocm91Z2ggZ2V0dGVycy4gUEFTUyB1
bGVzcyBjcmFzaC4iKTsKKwordmFyIGJhZFByb3RvdHlwZSA9IEltYWdlLnByb3RvdHlwZTsKK3Zh
ciBiYWRDb25zdHJ1Y3RvciA9IEltYWdlLnByb3RvdHlwZS5jb25zdHJ1Y3RvcjsKKworc2V0dXBP
YmplY3RIb29rcyh7CisgICAgcHJvdG90eXBlR2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIGJhZFBy
b3RvdHlwZTsgfSwKKyAgICBwcm90b3R5cGVTZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7ICB9LAorICAg
IGNvbnN0cnVjdG9yR2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIGJhZENvbnN0cnVjdG9yOyB9LAor
ICAgIGNvbnN0cnVjdG9yU2V0OiBmdW5jdGlvbih2YWx1ZSkgeyAgfQorfSk7CisKK2V4ZXJjaXNl
RG9jdW1lbnRSZWdpc3RlcigpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVz
b3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVl
bnRyYW50LXRocm93aW5nLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zh
c3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1yZWVudHJhbnQtdGhyb3dpbmctY29uc3Ry
dWN0b3ItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIxZmM5Mjk0MTQ4NmE0N2JhZjdkYzdkZjdm
YjUwY2M1MzM4N2IxOGQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9j
dXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVlbnRyYW50LXRocm93aW5nLWNvbnN0cnVjdG9yLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitGdXp6aW5nIGRvY3VtZW50LnJlZ2lzdGVyKCkg
dGhyb3VnaCBnZXR0ZXJzLiBQQVNTIHVsZXNzIGNyYXNoLgorCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKKworQ29uc3RydWN0b3Igb2JqZWN0IGlzbid0IGNyZWF0ZWQuCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFudC10aHJv
d2luZy1jb25zdHJ1Y3Rvci5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3Vt
ZW50LXJlZ2lzdGVyLXJlZW50cmFudC10aHJvd2luZy1jb25zdHJ1Y3Rvci5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjNiYzI5MGVkNzEzMWJhNjg3ZDk2MDNjZjkyY2NmMzkwMDQ2YWZiMWIKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVl
bnRyYW50LXRocm93aW5nLWNvbnN0cnVjdG9yLmh0bWwKQEAgLTAsMCArMSwyMyBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi9yZXNvdXJjZXMvZG9j
dW1lbnQtcmVnaXN0ZXItZnV6ei5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYg
aWQ9ImNvbnRhaW5lciI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIkZ1enppbmcgZG9j
dW1lbnQucmVnaXN0ZXIoKSB0aHJvdWdoIGdldHRlcnMuIFBBU1MgdWxlc3MgY3Jhc2guIik7CisK
K3NldHVwT2JqZWN0SG9va3MoeworICAgIHByb3RvdHlwZUdldDogZnVuY3Rpb24oKSB7IHRocm93
ICJFcnJvciI7IH0sCisgICAgcHJvdG90eXBlU2V0OiBmdW5jdGlvbih2YWx1ZSkgeyB0aHJvdyAi
RXJyb3IiOyB9LAorICAgIGNvbnN0cnVjdG9yR2V0OiBmdW5jdGlvbigpIHsgdGhyb3cgIkVycm9y
IjsgfSwKKyAgICBjb25zdHJ1Y3RvclNldDogZnVuY3Rpb24odmFsdWUpIHsgdGhyb3cgIkVycm9y
IjsgfQorfSk7CisKK2V4ZXJjaXNlRG9jdW1lbnRSZWdpc3RlcigpOworPC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20v
cmVzb3VyY2VzL2RvY3VtZW50LXJlZ2lzdGVyLWZ1enouanMgYi9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9jdXN0b20vcmVzb3VyY2VzL2RvY3VtZW50LXJlZ2lzdGVyLWZ1enouanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MDNiYmZkYWJiYzgxNWIwM2IyODk3MzkyZTI3MDc0MTczYWQ4NzE1NgotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9yZXNvdXJjZXMvZG9jdW1lbnQtcmVnaXN0
ZXItZnV6ei5qcwpAQCAtMCwwICsxLDQ4IEBACisKK2Z1bmN0aW9uIHNldHVwT2JqZWN0SG9va3Mo
aG9va3MpCit7CisgICAgLy8gV3JhcHBlciBmb3IgdGhlc2Ugb2JqZWN0IHNob3VsZCBiZSBtYXRl
cmlhbGl6ZWQgYmVmb3JlIHNldHRpbmcgaG9va3MuCisgICAgY29uc29sZS5sb2c7CisgICAgZG9j
dW1lbnQud2Via2l0UmVnaXN0ZXIKKyAgICBIVE1MU3BhbkVsZW1lbnQucHJvdG90eXBlOworCisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE9iamVjdC5wcm90b3R5cGUsICJwcm90b3R5cGUiLCB7
CisgICAgICAgIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBob29rcy5wcm90b3R5cGVHZXQoKTsg
fSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gaG9va3MucHJvdG90eXBl
U2V0KHZhbHVlKTsgfQorICAgIH0pOworCisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE9iamVj
dC5wcm90b3R5cGUsICJjb25zdHJ1Y3RvciIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsg
cmV0dXJuIGhvb2tzLmNvbnN0cnVjdG9yR2V0KCk7IH0sCisgICAgICAgIHNldDogZnVuY3Rpb24o
dmFsdWUpIHsgcmV0dXJuIGhvb2tzLmNvbnN0cnVjdG9yU2V0KHZhbHVlKTsgfQorICAgIH0pOwor
CisgICAgcmV0dXJuIGhvb2tzOworfQorCitmdW5jdGlvbiBleGVyY2lzZURvY3VtZW50UmVnaXN0
ZXIoKQoreworICAgIHZhciBteVByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSFRNTFNwYW5FbGVt
ZW50LnByb3RvdHlwZSk7CisgICAgdHJ5IHsKKyAgICAgICAgY29uc3RydWN0b3IgPSBkb2N1bWVu
dC53ZWJraXRSZWdpc3RlcigieC1kby1ub3RoaW5nIiwgeyBwcm90b3R5cGU6IG15UHJvdG90eXBl
IH0pOworICAgIH0gY2F0Y2ggKGUpIHsgfQorCisgICAgdHJ5IHsKKyAgICAgICAgaWYgKCFjb25z
dHJ1Y3RvcikgeworICAgICAgICAgICAgZGVidWcoIkNvbnN0cnVjdG9yIG9iamVjdCBpc24ndCBj
cmVhdGVkLiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGNvbnN0cnVjdG9yLnByb3RvdHlwZSAhPSBteVByb3RvdHlwZSkgeworICAgICAgICAgICAgY29u
c29sZS5sb2coIkZBSUw6IGJhZCBwcm90b3R5cGUiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgIH0KKworICAgICAgICB2YXIgZWxlbWVudCA9IG5ldyBjb25zdHJ1Y3RvcigpOworICAg
ICAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChlbGVt
ZW50LmNvbnN0cnVjdG9yICE9IGNvbnN0cnVjdG9yKSB7CisgICAgICAgICAgICBjb25zb2xlLmxv
ZygiRkFJTDogYmFkIGNvbnN0cnVjdG9yIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICB9CisgICAgfSBjYXRjaCAoZSkgeyBjb25zb2xlLmxvZyhlKTsgfQorfQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucwppbmRleCA5YjhiOWI4NmZmZTZkM2VkNmE3ZTQy
MGE5ZWQ0YzVlY2EyYzNhZTZmLi5jNWRiMmQ1ODkzZWUwMzAxN2NjYjk1NDY4NzcxNWNjNDg1ZGU3
NjdkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9u
cworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucwpAQCAtMTEx
NCw2ICsxMTE0LDkgQEAgd2Via2l0Lm9yZy9iLzc2NDg5IGNvbXBvc2l0aW5nL3dlYmdsL3dlYmds
LXJlZmxlY3Rpb24uaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzc2NDM5
IFsgRGVidWcgXSBmYXN0L2RvbS9zaGFkb3cvY29udGVudC1lbGVtZW50LWFwaS5odG1sIFsgRmFp
bHVyZSBdCiB3ZWJraXQub3JnL2IvNzY0MzkgWyBEZWJ1ZyBdIGZhc3QvZG9tL3NoYWRvdy9jb250
ZW50LWVsZW1lbnQtb3V0c2lkZS1zaGFkb3cuaHRtbCBbIEZhaWx1cmUgXQogCisjIEVOQUJMRShD
VVNUT01fRUxFTUVOVFMpIGlzIGRpc2FibGVkLgorZmFzdC9kb20vY3VzdG9tCisKICMgQ1NTIFZh
cmlhYmxlcyBhcmUgbm90IHlldCBlbmFibGVkLgogd2Via2l0Lm9yZy9iLzg1NTgwIGZhc3QvY3Nz
L3ZhcmlhYmxlcwogd2Via2l0Lm9yZy9iLzg1NTgwIGluc3BlY3Rvci9zdHlsZXMvdmFyaWFibGVz
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189493</attachid>
            <date>2013-02-21 03:02:32 -0800</date>
            <delta_ts>2013-02-21 20:16:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100229-20130221195852.patch</filename>
            <type>text/plain</type>
            <size>94361</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzNTU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzhlMTE2ZGNlN2YxMzQ5
YjVkYzA1MzBjNzFiYjMxZGFlNWMzYTZkOS4uNGVjODcxZWE4YTg3YzdiZTRhMmM5MmZlNGUzYWY2
NTk3MjgxZDFjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MCBAQAorMjAxMy0wMi0yMSAgSGFq
aW1lIE1vcnJpdGEgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgW0N1c3RvbSBFbGVt
ZW50c10gSW1wbGVtZW50IGJhcmUtYm9uZSBkb2N1bWVudC5yZWdpc3RlcigpCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDAyMjkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNoYW5nZSBpbXBsZW1l
bnRzIGEgcHJlZml4ZWQgdmVyc2lvbiBvZiBkb2N1bWVudC5yZWdpc3RlcigpLCB3aXRoIG1pbmlt
YWwgZmVhdHVyZSBzdXBwb3J0LgorICAgICAgICAtIFRoZSBmZWF0dXJlIGlzIGd1YXJkZWQgYnkg
RU5BQkxFKENVU1RPTV9FTEVNRU5UUykgYW5kIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmN1c3Rv
bURPTUVsZW1lbnRzRW5hYmxlZCgpLgorICAgICAgICAtIFRoaXMgYmFyZS1ib25lIHZlcnNpb24g
b25seSByZWNvZ25pemVzICJuYW1lIiBhbmQgInByb3RvdHlwZSIgcGFyYW1ldGVycy4gSXQgZG9l
c24ndCBzdXBwb3J0IGRlZmF1bHQgdmFsdWUgb2YgInByb3RvdHlwZSIgcGFyYW1ldGVyLgorICAg
ICAgICAtIEN1cnJlbnRseSBvbmx5IFY4IGlzIHN1cHBvcnRlZC4gSlNDIGJpbmRpbmcgbmVlZHMg
aXRzIG93biBiaW5kaW5nIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgID0gTWFqb3IgbmV3IGNs
YXNzZXMgdW5kZXIgZG9tLzoKKworICAgICAgICBUaGUgZG9tIG1vZHVsZSBnZXRzIHR3byBuZXcg
Y2xhc3NlczoKKyAgICAgICAgLSBDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6IEEgcmV0dXJuIHZh
bHVlIG9mIGRvY3VtZW50LnJlZ2lzdGVyKCkKKyAgICAgICAgICB3aGljaCBob2xkcyB0aGUgY3Vz
dG9tIGVsZW1lbnQgZGVmaW5pdGlvbi4KKyAgICAgICAgLSBDdXN0b21FbGVtZW50UmVnaXN0cnk6
IEEgY29sbGVjdGlvbiBvZiBDdXN0b21FbGVtZW50Q29uc3RydWN0b3Igb2JqZWN0cy4KKyAgICAg
ICAgICBDdXN0b21FbGVtZW50UmVnaXN0cnkgaW5zdGFuY2UgaXMgY3JlYXRlZCBwZXIgRG9jdW1l
bnQgYW5kIGlzIG93bmVkIGJ5IHRoZSBEb2N1bWVudC4KKworICAgICAgICBDdXN0b21FbGVtZW50
Q29uc3RydWN0b3Iga25vd3MgdGhlIGRlZmluaXRpb24gb2YgZWFjaCBjdXN0b20KKyAgICAgICAg
ZWxlbWVudCwgd2hpY2ggaXMgcmVnaXN0ZXJlZCBieSBkb2N1bWVudC5yZWdpc3RlcigpLiBUaGUg
bmFtZSBhbmQKKyAgICAgICAgb3RoZXIgb3B0aW9ucyBhcmUgaGVsZCBieSB0aGlzIG9iamVjdC4g
Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5IG93bnMgYSBzZXQKKyAgICAgICAgb2YgdGhlIHJlZ2lzdGVy
ZWQgY29uc3RydWN0b3JzLiBUaGUgcmVnaXN0cnkgZ3VhcmFudGVlcyBpbnZhcmlhbnRzCisgICAg
ICAgIGxpa2UgdmFsaWRpdHkgYW5kIHVuaXF1ZW5lc3Mgb2YgdGhlIGVsZW1lbnQgbmFtZXMuCisK
KyAgICAgICAgPSBBIGNoYW5nZSBvbiBtYWtlX25hbWVzLnBsCisKKyAgICAgICAgVGhpcyBjaGFu
Z2UgdHdlYWtzIG1ha2VfbmFtZXMucGwgKG9yIGdlbmVyYXRlZCBIVE1MRWxlbWVudEZhY3Rvcnkp
CisgICAgICAgIHRvIGhvb2sgdGhlIGNyZWF0aW9ucyBvZiB1bmtub3duIGVsZW1lbnRzLiBTb21l
IG9mIGVsZW1lbnQgbmFtZXMKKyAgICAgICAgd2hpY2ggY29tZSB0byB0aGUgZmFsbGJhY2sgcGF0
aCBjYW4gYmUgb25lIG9mIHJlZ2lzdGVyZWQgY3VzdG9tCisgICAgICAgIGVsZW1lbnQuCisKKyAg
ICAgICAgPSBbVjhXcmFwQXNGdW5jdGlvbl0gZXh0ZW5kZWQgYXR0cmlidXRlOgorCisgICAgICAg
IFRoZSBkb2N1bWVudC5yZWdpc3RlcigpIEFQSSByZXR1cm5zIGEgY29uc3RydWN0b3IKKyAgICAg
ICAgZnVuY3Rpb24uIEhvd2V2ZXIsIHRoZSBWOCBiaW5kaW5nIGN1cnJlbnRseSBkb2Vzbid0IHN1
cHBvcnQgaXQuIFRvCisgICAgICAgIG1ha2UgaXQgcG9zc2libGUsIHRoaXMgY2hhbmdlIGludHJv
ZHVjZXMgIlY4V3JhcEFzRnVuY3Rpb24iCisgICAgICAgIGV4dGVuZGVkIGF0dHJpYnV0ZSBmb3Ig
YW5ub3RhdGluZyBDdXN0b21FbGVtZW50Q29uc3RydWN0b3IgSURMCisgICAgICAgIGludGVyZmFj
ZS4KKworICAgICAgICBWOFdyYXBBc0Z1bmN0aW9uIHdyYXBzIHRoZSBhbm5vdGF0ZWQgaW50ZXJm
YWNlIHdpdGggYSBKYXZhU2NyaXB0CisgICAgICAgIGZ1bmN0aW9uLCB3aGljaCBjYWxscyB0aGUg
b3JpZ2luYWwgb2JqZWN0IGFzIGEgZnVuY3Rpb24sIG9yIGFzIGEKKyAgICAgICAgY29uc3RydWN0
b3IgZGVwZW5kcyBvbiB0aGUgY29udGV4dC4KKworICAgICAgICBXaXRoIHRoaXMgd3JhcHBlciBm
dW5jdGlvbiwgdGhlcmUgYXJlIHR3byBsZXZlbHMgb2YgaW5kaXJlY3Rpb24KKyAgICAgICAgYmV0
d2VlbiBuYXRpdmUgQysrIG9iamVjdCBhbmQgYXV0aG9yLXZpc2libGUgSlMgZnVuY3Rpb246CisK
KyAgICAgICAgW0pTIEFkYXB0b3IgRmljdGlvbl0gPC0oaGlkZGVuIHByb3BlcnR5KS0+IFtKUyBX
cmFwcGVyIE9iamVjdF0gLShpbnRlcm5hbCBmaWVsZCktPiBbQysrIE5hdGl2ZSBvYmplY3RdCisK
KyAgICAgICAgVGhlIGNvZGUgZ2VuZXJhdG9yIGdlbmVyYXRlcyB0aGUgYmluZGluZyBjb2RlIHdo
aWNoIGRlYWxzIHdpdGgKKyAgICAgICAgdGhpcyBpbmRpcmVjdGlvbi4gIEFsc28sIHRoZXJlIGlz
IGEgc2V0IG9mIGhlbHBlciBmdW5jdGlvbnMgaW4KKyAgICAgICAgVjhBZGFwdG9yRnVuY3Rpb24u
aC9jcHAgd2hpY2ggdGFrZXMgY2FyZSBvZiB0aGlzIGluZGlyZWN0aW9uLgorICAgICAgICBWOERP
TVdyYXBwZXIuY3BwL2ggd29ya3MgYXMgYSBmYWNhZGUgZm9yIHRoZXNlIEFQSXMgYW5kIGlzIHVz
ZWQgZnJvbQorICAgICAgICB0aGUgZ2VuZXJhdGVkIGNvZGUuCisKKyAgICAgICAgVGhpcyByZWR1
bmRhbmN5IGNvbWVzIGZyb20gbGltaXRhdGlvbnMgb2YgYm90aCBWOCBiaW5kaW5ncyBhbmQgVjgK
KyAgICAgICAgZW1iZWRkaW5nIEFQSS4gU2VlIGJ1ZyAxMDgxMzggZm9yIGRldGFpbHMuCisKKyAg
ICAgICAgPSBWOEhUTUxDdXN0b21FbGVtZW50CisKKyAgICAgICAgVW5saWtlIGJ1aWx0LWluIEhU
TUwgZWxlbWVudHMsIGFueSBjdXN0b20gZWxlbWVudCBoYXMgbm8KKyAgICAgICAgY29ycmVzcG9u
ZGluZyBDKysgY2xhc3MuIEluc3RlYWQsIGRvY3VtZW50LnJlZ2lzdGVyKCkgc2hvdWxkIGFsbG93
CisgICAgICAgIHBhc3NpbmcgYSBwcm90b3R5cGUgb2JqZWN0IGZvciB0aGUgZWxlbWVudHMgYmVp
bmcgcmVnaXN0ZXJlZC4KKworICAgICAgICBWOEhUTUxDdXN0b21FbGVtZW50IGhhbmRsZXMgdGhp
cyBsYWNrIG9mIG5hdGl2ZSBjbGFzcy4gIEl0IGJlaGF2ZXMKKyAgICAgICAgbGlrZSBhIG5hdGl2
ZSBzaWRlIHByb3h5IG9mIG5vbi1uYXRpdmUgSFRNTEVsZW1lbnQgc3ViY2xhc3Nlcy4gIEl0Cisg
ICAgICAgIGNvbm5lY3RzIGVhY2ggY3VzdG9tIGVsZW1lbnQgdG8gYW4gYXBwcm9wcmlhdGUgbmF0
aXZlIGVsZW1lbnQsCisgICAgICAgIHdoaWNoIGlzIEhUTUxFbGVtZW50IGF0IHRoaXMgdGltZS4g
VGhpcyByZXN0cmljdGlvbiB3aWxsIGJlCisgICAgICAgIHJlbGF4ZWQgbGF0ZXIuIFNlZSBCdWcg
MTEwNDM2IGZvciBkZXRhaWxzLgorCisgICAgICAgID0gQ3VzdG9tIERPTSBlbGVtZW50cyBhbmQg
bXVsdGlwbGUgd29ybGRzCisKKyAgICAgICAgSW4gdGhpcyBwYXRjaCwgY3VzdG9tIGVsZW1lbnQg
cmVnaXN0cmF0aW9uIGFuZCBpbnN0YW50aWF0aW9uIGlzIG5vdCBhbGxvd2VkCisgICAgICAgIGlu
IG5vbi1tYWluIHdvcmxkIGFuZCBkb2N1bWVudC5yZWdpc3RlcigpIEFQSSBqdXN0IGZhaWxzIHRo
ZXJlLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRl
c3RzOiBmYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMuaHRtbAorICAgICAg
ICAgICAgICAgZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFudC1udWxs
LWNvbnN0cnVjdG9yLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZG9tL2N1c3RvbS9kb2N1bWVu
dC1yZWdpc3Rlci1yZWVudHJhbnQtcmV0dXJuaW5nLWZha2UuaHRtbAorICAgICAgICAgICAgICAg
ZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFudC10aHJvd2luZy1jb25z
dHJ1Y3Rvci5odG1sCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAq
IFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBiaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVk
RmVhdHVyZXMuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oOgorICAgICAgICAoUnVudGltZUVuYWJsZWRGZWF0dXJlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpjdXN0b21ET01FbGVtZW50c0VuYWJsZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0Q3VzdG9tRE9N
RWxlbWVudHMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBt
OgorICAgICAgICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
SURMQXR0cmlidXRlcy50eHQ6CisgICAgICAgICogYmluZGluZ3MvdjgvQ3VzdG9tRWxlbWVudEhl
bHBlcnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRIZWxwZXJz
Ojppbml0aWFsaXplQ29uc3RydWN0b3JXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6Omhhc05v
QnVpbHRpbkhUTUxFbGVtZW50UHJvdG90eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVs
ZW1lbnRIZWxwZXJzOjppc1ZhbGlkUHJvdG90eXBlUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkN1c3RvbUVsZW1lbnRIZWxwZXJzOjppc0ZlYXR1cmVBbGxvd2VkKToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9DdXN0b21FbGVtZW50SGVscGVycy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oLgorICAgICAgICAoQ3VzdG9t
RWxlbWVudEhlbHBlcnMpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9u
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpWOEFkYXB0b3JGdW5jdGlvbjo6Z2V0VGVt
cGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhBZGFwdG9yRnVuY3Rpb246OmNvbmZpZ3VyZVRl
bXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4QWRhcHRvckZ1bmN0aW9uOjppbnZvY2F0aW9u
Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VjhBZGFwdG9yRnVuY3Rpb246OndyYXApOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmg6IEFkZGVkLgorICAgICAg
ICAoVjhBZGFwdG9yRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6VjhBZGFwdG9yRnVuY3Rp
b246OnVud3JhcCk6CisgICAgICAgIChXZWJDb3JlOjpWOEFkYXB0b3JGdW5jdGlvbjo6Z2V0KToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERPTUNvbmZpZ3VyYXRpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VjhET01Db25maWd1cmF0aW9uOjpjb25maWd1cmVUZW1wbGF0ZSk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9N
V3JhcHBlcjo6dG9GdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OmZy
b21GdW5jdGlvbik6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmg6CisgICAg
ICAgIChWOERPTVdyYXBwZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4SFRNTEN1c3RvbUVs
ZW1lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlY4SFRNTEN1c3RvbUVsZW1lbnQ6
OmNyZWF0ZVdyYXBwZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4SFRNTEN1c3RvbUVsZW1l
bnQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIaWRkZW5Qcm9w
ZXJ0eU5hbWUuaC4KKyAgICAgICAgKFY4SFRNTEN1c3RvbUVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6VjhIVE1MQ3VzdG9tRWxlbWVudDo6dG9WOCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q3VzdG9tRWxlbWVudDo6dG9WOCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhIaWRkZW5Qcm9w
ZXJ0eU5hbWUuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21FbGVtZW50
Q29uc3RydWN0b3JDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9t
RWxlbWVudENvbnN0cnVjdG9yOjpjYWxsQXNGdW5jdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKiBk
b20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaC4KKyAgICAgICAgKFdlYkNvcmU6
OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1
c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6fkN1c3RvbUVsZW1lbnRDb25z
dHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6OmNy
ZWF0ZUVsZW1lbnQpOgorICAgICAgICAqIGRvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIaWRkZW5Qcm9wZXJ0eU5h
bWUuaC4KKyAgICAgICAgKEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6OmRvY3VtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6dGFnTmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6Om5hbWUpOgorICAgICAgICAqIGRvbS9DdXN0b21F
bGVtZW50Q29uc3RydWN0b3IuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBkb20vQ3VzdG9tRWxlbWVu
dFJlZ2lzdHJ5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVn
aXN0cnk6OkN1c3RvbUVsZW1lbnRSZWdpc3RyeSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21F
bGVtZW50UmVnaXN0cnk6On5DdXN0b21FbGVtZW50UmVnaXN0cnkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5Ojpjb25zdHJ1Y3Rvck9mKToKKyAgICAgICAgKFdlYkNv
cmU6OkN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6aXNWYWxpZE5hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpyZWdpc3RlckVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpmaW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkN1
c3RvbUVsZW1lbnRSZWdpc3RyeTo6Y3JlYXRlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpD
dXN0b21FbGVtZW50UmVnaXN0cnk6OmRvY3VtZW50KToKKyAgICAgICAgKiBkb20vQ3VzdG9tRWxl
bWVudFJlZ2lzdHJ5Lmg6IEFkZGVkLgorICAgICAgICAoQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5KToK
KyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OnJlbW92ZWRMYXN0UmVmKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWdpc3RlckVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlZ2lzdHJ5KToKKyAgICAgICAg
KiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKERvY3VtZW50KToKKyAgICAgICAgKiBkb20vbWFr
ZV9uYW1lcy5wbDoKKyAgICAgICAgKHByaW50V3JhcHBlckZhY3RvcnlDcHBGaWxlKToKKyAgICAg
ICAgKiBodG1sL0hUTUxEb2N1bWVudC5pZGw6CisKIDIwMTMtMDItMjAgIFRha2FzaGkgU2FrYW1v
dG8gIDx0YXNha0Bnb29nbGUuY29tPgogCiAgICAgICAgIFtSZWZhY3RvcmluZ10gTWFrZSBtX3N0
YXRlIGFuIG9uLXN0YWNrIG9iamVjdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAwOGM5
M2QzMDE5ZWNlMmRhM2Y3NWQ1ODQ5MzM1OTFhZGY1NmU1MmExLi40MzE2YTJhOGNkODM4ZjRjYmJi
ZWI5ODRjOGM5ZTUwOGU4ZDlmNGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDM5IEBACisyMDEzLTAyLTIxICBIYWppbWUgTW9ycml0YSAgPG1vcnJpdGFAZ29vZ2xlLmNv
bT4KKworICAgICAgICBXSVAKKworICAgICAgICB1cGRhdGVkCisKKyAgICAgICAgTmVlZCBhIHNo
b3J0IGRlc2NyaXB0aW9uIChPT1BTISkuCisgICAgICAgIE5lZWQgdGhlIGJ1ZyBVUkwgKE9PUFMh
KS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZl
YXR1cmVzLmd5cGk6CisgICAgICAgICogcHVibGljL1dlYlJ1bnRpbWVGZWF0dXJlcy5oOgorICAg
ICAgICAoV2ViUnVudGltZUZlYXR1cmVzKToKKyAgICAgICAgKiBzcmMvV2ViUnVudGltZUZlYXR1
cmVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVDdXN0
b21ET01FbGVtZW50cyk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJS
dW50aW1lRmVhdHVyZXM6OmlzQ3VzdG9tRE9NRWxlbWVudHNFbmFibGVkKToKKworMjAxMy0wMS0y
NyAgSGFqaW1lIE1vcnJpdGEgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgW0N1c3Rv
bSBFbGVtZW50c10gSW1wbGVtZW50IGJhcmUtYm9uZSBkb2N1bWVudC5yZWdpc3RlcigpCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDAyMjkKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBlbmFibGVD
dXN0b21ET01FbGVtZW50cyBmbGFnLgorCisgICAgICAgICogZmVhdHVyZXMuZ3lwaToKKyAgICAg
ICAgKiBwdWJsaWMvV2ViUnVudGltZUZlYXR1cmVzLmg6CisgICAgICAgIChXZWJSdW50aW1lRmVh
dHVyZXMpOgorICAgICAgICAqIHNyYy9XZWJSdW50aW1lRmVhdHVyZXMuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZUN1c3RvbURPTUVsZW1lbnRzKToKKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJ1bnRpbWVGZWF0dXJlczo6aXND
dXN0b21ET01FbGVtZW50c0VuYWJsZWQpOgorCiAyMDEzLTAyLTIwICBQYXdlxYIgSGFqZGFuLCBK
ci4gIDxwaGFqZGFuLmpyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBBZGQgZ3lwIG9wdGlvbiB0
byBzd2l0Y2ggRU5BQkxFKFNRTF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtl
CmluZGV4IGIyMmFkZTU3ZjlhNTQ4ODQyNTU1ZjUwYTQxMmY5OWQ2MzM4MjBmYjUuLmY2ZjQxMWRl
ZTc1YzdhODYzZjBhMTRhMTZlNjZmMWEyOTE2ZTcxYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJj
ZXMubWFrZQpAQCAtMjIwLDYgKzIyMCw3IEBAIEJJTkRJTkdfSURMUyA9IFwKICAgICAkKFdlYkNv
cmUpL2RvbS9DbGlwYm9hcmQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2RvbS9Db21tZW50LmlkbCBc
CiAgICAgJChXZWJDb3JlKS9kb20vQ29tcG9zaXRpb25FdmVudC5pZGwgXAorICAgICQoV2ViQ29y
ZSkvZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5pZGwgXAogICAgICQoV2ViQ29yZSkvZG9t
L0N1c3RvbUV2ZW50LmlkbCBcCiAgICAgJChXZWJDb3JlKS9kb20vRE9NQ29yZUV4Y2VwdGlvbi5p
ZGwgXAogICAgICQoV2ViQ29yZSkvZG9tL0RPTUVycm9yLmlkbCBcCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5k
ZXggZjc3NDQ0NTQ1YWIxYjEyOWQwZDkzMGU0M2E0MmY5NTU1ZjlhYWM3Ni4uYWJkNzkxN2YyY2Qx
YmEyMDA5ZjgyN2RiYzVjZmFkZTUxMzgyMWJjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjAwLDYg
KzIwMCw3IEBACiAgICAgICAgICAgICAnZG9tL0NsaXBib2FyZC5pZGwnLAogICAgICAgICAgICAg
J2RvbS9Db21tZW50LmlkbCcsCiAgICAgICAgICAgICAnZG9tL0NvbXBvc2l0aW9uRXZlbnQuaWRs
JywKKyAgICAgICAgICAgICdkb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmlkbCcsCiAgICAg
ICAgICAgICAnZG9tL0N1c3RvbUV2ZW50LmlkbCcsCiAgICAgICAgICAgICAnZG9tL0RPTUNvcmVF
eGNlcHRpb24uaWRsJywKICAgICAgICAgICAgICdkb20vRE9NRXJyb3IuaWRsJywKQEAgLTExOTEs
NiArMTE5Miw4IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvQXJyYXlWYWx1ZS5oJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9CaW5kaW5nU3RhdGUuY3BwJywKICAgICAgICAgICAgICdi
aW5kaW5ncy92OC9CaW5kaW5nU3RhdGUuaCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvQ3Vz
dG9tRWxlbWVudEhlbHBlcnMuY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9DdXN0b21F
bGVtZW50SGVscGVycy5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9ET01EYXRhU3RvcmUu
Y3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaCcsCiAgICAgICAg
ICAgICAnYmluZGluZ3MvdjgvRE9NUmVxdWVzdFN0YXRlLmgnLApAQCAtMTI1OSw2ICsxMjYyLDgg
QEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9TaGFyZWRQZXJzaXN0ZW50LmgnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmNwcCcsCiAgICAgICAg
ICAgICAnYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaCcsCisgICAgICAgICAg
ICAnYmluZGluZ3MvdjgvVjhBZGFwdG9yRnVuY3Rpb24uY3BwJywKKyAgICAgICAgICAgICdiaW5k
aW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9W
OEJpbmRpbmcuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEJpbmRpbmcuaCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhCaW5kaW5nTWFjcm9zLmgnLApAQCAtMTI4MCw2ICsx
Mjg1LDggQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5oJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9WOEdDRm9yQ29udGV4dERpc3Bvc2UuY3BwJywKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9WOEdDRm9yQ29udGV4dERpc3Bvc2UuaCcsCisgICAgICAgICAg
ICAnYmluZGluZ3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVudC5jcHAnLAorICAgICAgICAgICAgJ2Jp
bmRpbmdzL3Y4L1Y4SFRNTEN1c3RvbUVsZW1lbnQuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mv
djgvVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9W
OEhpZGRlblByb3BlcnR5TmFtZS5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEluaXRp
YWxpemVyLmNwcCcsCkBAIC0xMzQwLDYgKzEzNDcsNyBAQAogICAgICAgICAgICAgJ2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOENvbnNvbGVDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92
OC9jdXN0b20vVjhDb29yZGluYXRlc0N1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOENyeXB0b0N1c3RvbS5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvckN1c3RvbS5jcHAnLAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUV2ZW50Q3VzdG9tLmNwcCcsCiAgICAgICAg
ICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFj
ay5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVhQYXRoTlNS
ZXNvbHZlci5jcHAnLApAQCAtMjc3Myw2ICsyNzgxLDEwIEBACiAgICAgICAgICAgICAnZG9tL0Nv
bnRleHRGZWF0dXJlcy5jcHAnLAogICAgICAgICAgICAgJ2RvbS9Db250ZXh0RmVhdHVyZXMuaCcs
CiAgICAgICAgICAgICAnZG9tL0Nyb3NzVGhyZWFkVGFzay5oJywKKyAgICAgICAgICAgICdkb20v
Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmNwcCcsCisgICAgICAgICAgICAnZG9tL0N1c3RvbUVs
ZW1lbnRDb25zdHJ1Y3Rvci5oJywKKyAgICAgICAgICAgICdkb20vQ3VzdG9tRWxlbWVudFJlZ2lz
dHJ5LmNwcCcsCisgICAgICAgICAgICAnZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5oJywKICAg
ICAgICAgICAgICdkb20vQ3VzdG9tRXZlbnQuY3BwJywKICAgICAgICAgICAgICdkb20vQ3VzdG9t
RXZlbnQuaCcsCiAgICAgICAgICAgICAnZG9tL0RPTUFsbEluT25lLmNwcCcsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1
cmVzLmNwcAppbmRleCAyYTJkYTZmZWI0NzcxZjNkMzdkNmQ2MzgzNTk0ZDUyZDUzMjFlNTBmLi5m
NDExNDNlYWQ2ODAzODFlYWM2MjliOGQ1ZjdhMDg4MmE0NDEwMWY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJl
cy5jcHAKQEAgLTE5MCw2ICsxOTAsMTAgQEAgYm9vbCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpp
c1NoYWRvd0RPTUVuYWJsZWQgPSBmYWxzZTsKIGJvb2wgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
aXNBdXRob3JTaGFkb3dET01Gb3JBbnlFbGVtZW50RW5hYmxlZCA9IGZhbHNlOwogI2VuZGlmCiAK
KyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorYm9vbCBSdW50aW1lRW5hYmxlZEZlYXR1cmVz
Ojppc0N1c3RvbURPTUVsZW1lbnRzRW5hYmxlZCA9IGZhbHNlOworI2VuZGlmCisKICNpZiBFTkFC
TEUoU1RZTEVfU0NPUEVEKQogYm9vbCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjppc1N0eWxlU2Nv
cGVkRW5hYmxlZCA9IGZhbHNlOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oCmluZGV4IGNlYzY0MTk1
ZWFjOTEyYzcwNWQyNDNhYjliZGFmNjM5NWZmNTk4NDIuLjI1MzdlOGMzOTdiNThhNGQzNTQzNmUw
MjZiZTI5OTFkODNiMzE1OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dl
bmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oCkBAIC0yMTgsNiArMjE4LDExIEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRBdXRob3JTaGFkb3dET01Gb3JBbnlFbGVtZW50
RW5hYmxlZChib29sIGlzRW5hYmxlZCkgeyBpc0F1dGhvclNoYWRvd0RPTUZvckFueUVsZW1lbnRF
bmFibGVkID0gaXNFbmFibGVkOyB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDVVNUT01fRUxFTUVO
VFMpCisgICAgc3RhdGljIGJvb2wgY3VzdG9tRE9NRWxlbWVudHNFbmFibGVkKCkgeyByZXR1cm4g
aXNDdXN0b21ET01FbGVtZW50c0VuYWJsZWQ7IH0KKyAgICBzdGF0aWMgdm9pZCBzZXRDdXN0b21E
T01FbGVtZW50cyhib29sIGlzRW5hYmxlZCkgeyBpc0N1c3RvbURPTUVsZW1lbnRzRW5hYmxlZCA9
IGlzRW5hYmxlZDsgfQorI2VuZGlmCisKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQogICAgIHN0
YXRpYyBib29sIHN0eWxlU2NvcGVkRW5hYmxlZCgpIHsgcmV0dXJuIGlzU3R5bGVTY29wZWRFbmFi
bGVkOyB9CiAgICAgc3RhdGljIHZvaWQgc2V0U3R5bGVTY29wZWRFbmFibGVkKGJvb2wgaXNFbmFi
bGVkKSB7IGlzU3R5bGVTY29wZWRFbmFibGVkID0gaXNFbmFibGVkOyB9CkBAIC0zNDMsNiArMzQ4
LDEwIEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGJvb2wgaXNBdXRob3JTaGFkb3dET01Gb3JBbnlF
bGVtZW50RW5hYmxlZDsKICNlbmRpZgogCisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKyAg
ICBzdGF0aWMgYm9vbCBpc0N1c3RvbURPTUVsZW1lbnRzRW5hYmxlZDsKKyNlbmRpZgorCiAjaWYg
RU5BQkxFKFNUWUxFX1NDT1BFRCkKICAgICBzdGF0aWMgYm9vbCBpc1N0eWxlU2NvcGVkRW5hYmxl
ZDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JWOC5wbQppbmRleCAyZjRmOGRiMGRmMmMxZGEyZDM4NGYyZjAyZjZkYTM0NDA3ZWI5
Y2FlLi5mYWZmYWM5MGVjMTY5ODJhMTIwMDAzNTM3OGQxZDVjMjQ5MTA2MTAyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAt
MzUyLDEzICszNTIsMjAgQEAgRU5ECiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJmYWxz
ZTtcbiIpOwogICAgIH0KIAorICAgIG15ICRmcm9tRnVuY3Rpb25PcGVuaW5nID0gIiI7CisgICAg
bXkgJGZyb21GdW5jdGlvbkNsb3NpbmcgPSAiIjsKKyAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IlY4V3JhcEFzRnVuY3Rpb24ifSkgeworICAgICAgICAkZnJvbUZ1bmN0
aW9uT3BlbmluZyA9ICJWOERPTVdyYXBwZXI6OmZyb21GdW5jdGlvbigiOworICAgICAgICAkZnJv
bUZ1bmN0aW9uQ2xvc2luZyA9ICIpIjsKKyAgICB9CisKICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCA8PEVORCk7CiAgICAgc3RhdGljIGJvb2wgSGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFs
dWU+LCB2ODo6SXNvbGF0ZSopOwogICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gR2V0UmF3VGVtcGxhdGUodjg6Oklzb2xhdGUqKTsKICAgICBzdGF0aWMgdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdldFRlbXBsYXRlKHY4OjpJc29sYXRl
Kik7CiAgICAgc3RhdGljICR7bmF0aXZlVHlwZX0qIHRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gb2JqZWN0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8JHtu
YXRpdmVUeXBlfSo+KG9iamVjdC0+R2V0QWxpZ25lZFBvaW50ZXJGcm9tSW50ZXJuYWxGaWVsZCh2
OERPTVdyYXBwZXJPYmplY3RJbmRleCkpOworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDwke25hdGl2ZVR5cGV9Kj4oJHtmcm9tRnVuY3Rpb25PcGVuaW5nfW9iamVjdCR7ZnJvbUZ1bmN0
aW9uQ2xvc2luZ30tPkdldEFsaWduZWRQb2ludGVyRnJvbUludGVybmFsRmllbGQodjhET01XcmFw
cGVyT2JqZWN0SW5kZXgpKTsKICAgICB9CiAgICAgc3RhdGljIHZvaWQgZGVyZWZPYmplY3Qodm9p
ZCopOwogICAgIHN0YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKQEAgLTUzOSw2ICs1NDYsOSBA
QCBFTkQKICAgICB9IGVsc2UgewogCiAgICAgICAgIG15ICRjcmVhdGVXcmFwcGVyQ2FsbCA9ICRj
dXN0b21XcmFwID8gIiR7djhJbnRlcmZhY2VOYW1lfTo6d3JhcCIgOiAiJHt2OEludGVyZmFjZU5h
bWV9OjpjcmVhdGVXcmFwcGVyIjsKKyAgICAgICAgbXkgJHJldHVybmluZ1dyYXBwZXIgPSAkaW50
ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVjhXcmFwQXNGdW5jdGlvbiJ9ID8gIlY4RE9N
V3JhcHBlcjo6dG9GdW5jdGlvbih3cmFwcGVyKSIgOiAid3JhcHBlciI7CisgICAgICAgIG15ICRy
ZXR1cm5pbmdDcmVhdGVkV3JhcHBlck9wZW5pbmcgPSAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiVjhXcmFwQXNGdW5jdGlvbiJ9ID8gIlY4RE9NV3JhcHBlcjo6dG9GdW5jdGlvbigi
IDogIiI7CisgICAgICAgIG15ICRyZXR1cm5pbmdDcmVhdGVkV3JhcHBlckNsb3NpbmcgPSAkaW50
ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVjhXcmFwQXNGdW5jdGlvbiJ9ID8gIiwgaW1w
bC0+bmFtZSgpLCBpc29sYXRlKSIgOiAiIjsKIAogICAgICAgICBpZiAoJGN1c3RvbVdyYXApIHsK
ICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKQEAgLTU1Miw3ICs1NjIs
NyBAQCBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKCR7bmF0aXZlVHlwZX0qIGlt
cGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gYwogewogICAgIEFTU0VSVChpbXBsKTsKICAgICBB
U1NFUlQoRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyKGltcGwsIGlzb2xhdGUpLklzRW1wdHkoKSk7
Ci0gICAgcmV0dXJuICRjcmVhdGVXcmFwcGVyQ2FsbChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlz
b2xhdGUpOworICAgIHJldHVybiAke3JldHVybmluZ0NyZWF0ZWRXcmFwcGVyT3BlbmluZ30kY3Jl
YXRlV3JhcHBlckNhbGwoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKSR7cmV0dXJuaW5n
Q3JlYXRlZFdyYXBwZXJDbG9zaW5nfTsKIH0KIEVORAogICAgICAgICB9CkBAIC01NjUsNyArNTc1
LDcgQEAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KCR7bmF0aXZlVHlwZX0qIGlt
cGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3IKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhD
aGVjayhpc29sYXRlKTsKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IERPTURh
dGFTdG9yZTo6Z2V0V3JhcHBlcihpbXBsLCBpc29sYXRlKTsKICAgICBpZiAoIXdyYXBwZXIuSXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAgICAgICAgcmV0dXJuICRyZXR1cm5p
bmdXcmFwcGVyOwogICAgIHJldHVybiB3cmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0
ZSk7CiB9CiAKQEAgLTU3Niw3ICs1ODYsNyBAQCBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHRvVjhGYXN0KCR7bmF0aXZlVHlwZX0qIGltcGwsIGNvbnN0IEhvbGRlckNvbnRhaW5lcgogICAg
ICAgICByZXR1cm4gdjhOdWxsKGNvbnRhaW5lci5HZXRJc29sYXRlKCkpOwogICAgIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IERPTURhdGFTdG9yZTo6Z2V0V3JhcHBlckZhc3QoaW1w
bCwgY29udGFpbmVyLCB3cmFwcGFibGUpOwogICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiB3cmFwcGVyOworICAgICAgICByZXR1cm4gJHJldHVybmluZ1dyYXBwZXI7
CiAgICAgcmV0dXJuIHdyYXAoaW1wbCwgY29udGFpbmVyLkhvbGRlcigpLCBjb250YWluZXIuR2V0
SXNvbGF0ZSgpKTsKIH0KIEVORApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvSURMQXR0cmlidXRlcy50eHQKaW5kZXggYzYzNjQ0ZmJlOTY1MjlkZjc4YTIzODMwYTU2YjY0
MWEyZGJlZGQwNy4uMTg2MTExODE1MDllYzNiNWNjNzRjMGE5ZjMwOGI2YjA1OThjYTM0MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4
dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0
CkBAIC0xMjksMyArMTI5LDQgQEAgVjhNZWFzdXJlQXM9KgogVjhSZWFkT25seQogVjhTa2lwVlRh
YmxlVmFsaWRhdGlvbgogVjhVbmZvcmdlYWJsZQorVjhXcmFwQXNGdW5jdGlvbgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvQ3VzdG9tRWxlbWVudEhlbHBlcnMuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvQ3VzdG9tRWxlbWVudEhlbHBlcnMuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjYxYTIwNjAzYmNkYTBmMDk3ZGFjNGUwMmI4NjY2NWY5MTY2MWI5ODMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9DdXN0b21FbGVtZW50SGVscGVy
cy5jcHAKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3Vz
dG9tRWxlbWVudEhlbHBlcnMuaCIKKworI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgorI2lu
Y2x1ZGUgIlY4Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiVjhIVE1MUGFy
YWdyYXBoRWxlbWVudC5oIgorI2luY2x1ZGUgIlY4SFRNTFNwYW5FbGVtZW50LmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKK2Jvb2wgQ3Vz
dG9tRWxlbWVudEhlbHBlcnM6OmluaXRpYWxpemVDb25zdHJ1Y3RvcldyYXBwZXIoQ3VzdG9tRWxl
bWVudENvbnN0cnVjdG9yKiBjb25zdHJ1Y3RvciwgY29uc3QgU2NyaXB0VmFsdWUmIHByb3RvdHlw
ZSwgU2NyaXB0U3RhdGUqIHN0YXRlKQoreworICAgIEFTU0VSVChpc0ZlYXR1cmVBbGxvd2VkKHN0
YXRlKSk7CisgICAgQVNTRVJUKCFwcm90b3R5cGUudjhWYWx1ZSgpLklzRW1wdHkoKSAmJiBwcm90
b3R5cGUudjhWYWx1ZSgpLT5Jc09iamVjdCgpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
d3JhcHBlclZhbHVlID0gdG9WOChjb25zdHJ1Y3Rvciwgc3RhdGUtPmNvbnRleHQoKS0+R2xvYmFs
KCksIHN0YXRlLT5jb250ZXh0KCktPkdldElzb2xhdGUoKSk7CisgICAgaWYgKHdyYXBwZXJWYWx1
ZS5Jc0VtcHR5KCkgfHwgIXdyYXBwZXJWYWx1ZS0+SXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IHY4OjpIYW5kbGU8
djg6Ok9iamVjdD46OkNhc3Qod3JhcHBlclZhbHVlKTsKKyAgICAvLyAtIE9iamVjdDo6Rm9yY2VT
ZXQoKSBub3IgT2JqZWN0OjpTZXRBY2Nlc3NvciBEb2Vzbid0IHdvcmsgYWdhaW5zdCB0aGUgInBy
b3RvdHlwZSIgcHJvcGVydHkgb2YgZnVuY3Rpb24gb2JqZWN0cy4KKyAgICAvLyAtIFNldCgpLWlu
ZyBoZXJlIGlzIHNhZmUgYmVjYXVzZQorICAgIC8vICAgLSBfX2RlZmluZVNldHRlcl9fIG5vciBf
X2RlZmluZUdldHRlcl9fIHdpdGggInByb3RvdHlwZSIgb3IgImNvbnN0cnVjdG9yIiBwcm9wZXJ0
eSBhbHNvIGRvZXNuJ3Qgd29yayBhZ2FpbnN0IGZ1bmN0aW9uIG9iamVjdHMgYW5kCisgICAgLy8g
ICAtIFVzaW5nIFNldCgpIGlzIG9rYXkgYmVjYXVlcyBlYWNoIGZ1bmN0aW9uIGhhcyAicHJvdG90
eXBlIiBwcm9wZXJ0eSBmcm9tIHN0YXJ0IGFuZCBPYmplY3RzLnByb3RvdHlwZSBjYW5ub3QgaW50
ZXJjZXB0IHRoZSBwcm9wZXJ0eSBhY2Nlc3MuCisgICAgd3JhcHBlci0+U2V0KHY4U3RyaW5nKCJw
cm90b3R5cGUiLCBzdGF0ZS0+Y29udGV4dCgpLT5HZXRJc29sYXRlKCkpLCBwcm90b3R5cGUudjhW
YWx1ZSgpLCB2ODo6UmVhZE9ubHkpOworCisgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBjb25z
dHJ1Y3RvcktleSA9IHY4U3RyaW5nKCJjb25zdHJ1Y3RvciIsIHN0YXRlLT5jb250ZXh0KCktPkdl
dElzb2xhdGUoKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBwcm90b3R5cGVPYmplY3Qg
PSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHByb3RvdHlwZS52OFZhbHVlKCkpOworICAg
IEFTU0VSVCghcHJvdG90eXBlT2JqZWN0LT5IYXNPd25Qcm9wZXJ0eShjb25zdHJ1Y3RvcktleSkp
OworICAgIHByb3RvdHlwZU9iamVjdC0+Rm9yY2VTZXQoY29uc3RydWN0b3JLZXksIHdyYXBwZXIs
IHY4OjpSZWFkT25seSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGhhc05v
QnVpbHRpbkhUTUxFbGVtZW50UHJvdG90eXBlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaHRtbFBy
b3RvdHlwZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNoYWluKQoreworICAgIHdoaWxlICghY2hh
aW4uSXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChjaGFpbiA9PSBodG1sUHJvdG90eXBlKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghY2hhaW4tPklzT2JqZWN0KCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIFRoZSBpbnRlcm5hbCBmaWVsZCBj
b3VudCBpbmRpY2F0ZXMgdGhlIG9iamVjdCBtaWdodCBiZSBhIG5hdGl2ZSBiYWNrZWQgb2JqZWN0
LgorICAgICAgICBpZiAodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChjaGFpbiktPkludGVy
bmFsRmllbGRDb3VudCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjaGFp
biA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoY2hhaW4pLT5HZXRQcm90b3R5cGUoKTsK
KyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQ3VzdG9tRWxlbWVudEhlbHBl
cnM6OmlzVmFsaWRQcm90b3R5cGVQYXJhbWV0ZXIoY29uc3QgU2NyaXB0VmFsdWUmIHByb3RvdHlw
ZSwgU2NyaXB0U3RhdGUqIHN0YXRlKQoreworICAgIGlmIChwcm90b3R5cGUudjhWYWx1ZSgpLklz
RW1wdHkoKSB8fCAhcHJvdG90eXBlLnY4VmFsdWUoKS0+SXNPYmplY3QoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgLy8gZG9jdW1lbnQucmVnaXN0ZXIoKSBzZXRzIHRoZSBjb25zdHJ1
Y3RvciBwcm9wZXJ0eSwgc28gdGhlIHByb3RvdHlwZSBzaG91bGRuJ3QgaGF2ZSBvbmUuCisgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBwcm90b3R5cGVPYmplY3QgPSB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+OjpDYXN0KHByb3RvdHlwZS52OFZhbHVlKCkpOworICAgIGlmIChwcm90b3R5cGVPYmpl
Y3QtPkhhc093blByb3BlcnR5KHY4U3RyaW5nKCJjb25zdHJ1Y3RvciIsIHN0YXRlLT5jb250ZXh0
KCktPkdldElzb2xhdGUoKSkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgVjhQZXJDb250
ZXh0RGF0YSogcGVyQ29udGV4dERhdGEgPSBWOFBlckNvbnRleHREYXRhOjpmcm9tKHN0YXRlLT5j
b250ZXh0KCkpOworICAgIC8vCisgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTA0MzYKKyAgICAvLyAgIGRvY3VtZW50LnJlZ2lzdGVyKCkgc2hv
dWxkIGFsbG93IGFyYml0cmFyeSBIVE1MRWxlbWVudCBzdWJjbGFzc3Nlcy4KKyAgICAvLyAgIEN1
cnJlbnRseSBpdCBzdXBwb3J0cyBjdXN0b20gZWxlbWVudHMgd2hpY2ggYXJlCisgICAgLy8gICAt
IGRpcmVjdCBzdWJjbGFzc2VzIG9mIEhUTUxFbGVtZW50IG9yCisgICAgLy8gICAtIHN1YmNsYXNz
ZXMgb2Ygb3RoZXIgY3VzdG9tIGVsZW1lbnRzCisgICAgLy8KKyAgICB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IGh0bWxDb25zdHJ1Y3RvciA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QocGVy
Q29udGV4dERhdGEtPmNvbnN0cnVjdG9yRm9yVHlwZSgmVjhIVE1MRWxlbWVudDo6aW5mbykpOwor
ICAgIGlmIChodG1sQ29uc3RydWN0b3IuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBodG1sUHJvdG90eXBlID0gdjg6OkhhbmRsZTx2
ODo6T2JqZWN0Pjo6Q2FzdChodG1sQ29uc3RydWN0b3ItPkdldCh2OFN0cmluZygicHJvdG90eXBl
Iiwgc3RhdGUtPmNvbnRleHQoKS0+R2V0SXNvbGF0ZSgpKSkpOworICAgIGlmIChodG1sUHJvdG90
eXBlLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghaGFzTm9CdWls
dGluSFRNTEVsZW1lbnRQcm90b3R5cGUoaHRtbFByb3RvdHlwZSwgcHJvdG90eXBlT2JqZWN0KSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEN1c3Rv
bUVsZW1lbnRIZWxwZXJzOjppc0ZlYXR1cmVBbGxvd2VkKFNjcmlwdFN0YXRlKiBzdGF0ZSkKK3sK
KyAgICByZXR1cm4gaXNGZWF0dXJlQWxsb3dlZChzdGF0ZS0+Y29udGV4dCgpKTsKK30KKworYm9v
bCBDdXN0b21FbGVtZW50SGVscGVyczo6aXNGZWF0dXJlQWxsb3dlZCh2ODo6SGFuZGxlPHY4OjpD
b250ZXh0PiBjb250ZXh0KQoreworICAgIGlmIChET01XcmFwcGVyV29ybGQqIHdvcmxkID0gRE9N
V3JhcHBlcldvcmxkOjpnZXRXb3JsZChjb250ZXh0KSkKKyAgICAgICAgcmV0dXJuIHdvcmxkLT5p
c01haW5Xb3JsZCgpOworICAgIHJldHVybiB0cnVlOworfQorCisKKyNlbmRpZiAvLyBFTkFCTEUo
Q1VTVE9NX0VMRU1FTlRTKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9DdXN0b21FbGVtZW50SGVscGVycy5oIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvQ3VzdG9tRWxlbWVudEhlbHBlcnMuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
OGQxYmNiYzE4OTU2OTVkZGFhYmRhZDBmYmYzZjhiOWQzMWFiYmE1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvQ3VzdG9tRWxlbWVudEhlbHBlcnMuaApAQCAt
MCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBDdXN0b21FbGVtZW50SGVscGVyc19oCisjZGVmaW5lIEN1c3Rv
bUVsZW1lbnRIZWxwZXJzX2gKKworI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRl
ICJTY3JpcHRWYWx1ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBFTkFCTEUoQ1VT
VE9NX0VMRU1FTlRTKQorCitjbGFzcyBDdXN0b21FbGVtZW50Q29uc3RydWN0b3I7CitjbGFzcyBT
Y3JpcHRTdGF0ZTsKKworY2xhc3MgQ3VzdG9tRWxlbWVudEhlbHBlcnMgeworcHVibGljOgorICAg
IHN0YXRpYyBib29sIGluaXRpYWxpemVDb25zdHJ1Y3RvcldyYXBwZXIoQ3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yKiwgY29uc3QgU2NyaXB0VmFsdWUmIHByb3RvdHlwZSwgU2NyaXB0U3RhdGUqKTsK
KyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkUHJvdG90eXBlUGFyYW1ldGVyKGNvbnN0IFNjcmlwdFZh
bHVlJiwgU2NyaXB0U3RhdGUqKTsKKyAgICBzdGF0aWMgYm9vbCBpc0ZlYXR1cmVBbGxvd2VkKFNj
cmlwdFN0YXRlKik7CisKKyAgICBzdGF0aWMgYm9vbCBpc0ZlYXR1cmVBbGxvd2VkKHY4OjpIYW5k
bGU8djg6OkNvbnRleHQ+KTsKK307CisKKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRT
KQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDdXN0b21FbGVtZW50SGVs
cGVyc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFkYXB0b3JG
dW5jdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlv
bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOGY0YmRiNThkZTMxYmM0Zjc2NjEyZGE0ZTIxMzllNTJmZjM2ZDA4
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWRhcHRv
ckZ1bmN0aW9uLmNwcApAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlY4QWRhcHRvckZ1bmN0aW9uLmgiCisKKyNpbmNsdWRlICJWOFBlcklzb2xhdGVEYXRhLmgi
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXcmFwcGVyVHlwZUluZm8gVjhBZGFwdG9yRnVuY3Rp
b246OmluZm8gPSB7IFY4QWRhcHRvckZ1bmN0aW9uOjpnZXRUZW1wbGF0ZSwgMCwgMCwgMCwgMCwg
MCwgMCwgV3JhcHBlclR5cGVPYmplY3RQcm90b3R5cGUgfTsKKwordjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IFY4QWRhcHRvckZ1bmN0aW9uOjpnZXRUZW1wbGF0ZSh2ODo6SXNv
bGF0ZSogaXNvbGF0ZSkKK3sKKyAgICBpZiAoIWlzb2xhdGUpCisgICAgICAgIGlzb2xhdGUgPSB2
ODo6SXNvbGF0ZTo6R2V0Q3VycmVudCgpOworICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBW
OFBlcklzb2xhdGVEYXRhOjpmcm9tKGlzb2xhdGUpOworICAgIFY4UGVySXNvbGF0ZURhdGE6OlRl
bXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQo
JmluZm8pOworICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkK
KyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CisgICAgLy8gVGhlIGxpZmV0aW1lIGlzIG9m
IG5ld1RlbXBsYXRlIGlzIGRlbGVnYXRlZCB0byB0aGUgVGVtcGxhdGVNYXAgdGh1cyB0aGlzIHdv
bid0IGJlIGxlYWtlZC4KKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4g
bmV3VGVtcGxhdGUgPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT46Ok5ldyh2
ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KCkpOworICAgIGRhdGEtPnJhd1RlbXBsYXRlTWFwKCku
YWRkKCZpbmZvLCBjb25maWd1cmVUZW1wbGF0ZShuZXdUZW1wbGF0ZSkpOworICAgIHJldHVybiBu
ZXdUZW1wbGF0ZTsKK30KKwordjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4
QWRhcHRvckZ1bmN0aW9uOjpjb25maWd1cmVUZW1wbGF0ZSh2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gZnVuY3Rpb25UZW1wbGF0ZSkKK3sKKyAgICBmdW5jdGlvblRlbXBsYXRl
LT5TZXRDYWxsSGFuZGxlcigmVjhBZGFwdG9yRnVuY3Rpb246Omludm9jYXRpb25DYWxsYmFjayk7
CisgICAgcmV0dXJuIGZ1bmN0aW9uVGVtcGxhdGU7Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVl
PiBWOEFkYXB0b3JGdW5jdGlvbjo6aW52b2NhdGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVu
dHMmIGFyZ3MpCit7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVkID0gdjg6Okhh
bmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzLkNhbGxlZSgpLT5HZXRIaWRkZW5WYWx1ZShWOEhp
ZGRlblByb3BlcnR5TmFtZTo6YWRhcHRvckZ1bmN0aW9uUGVlcigpKSk7CisgICAgLy8gRklYTUU6
IFRoaXMgY2FuIGJlIGZhc3RlciBpZiB3ZSBjYW4gYWNjZXNzIHVuZGVybHlpbmcgbmF0aXZlIGNh
bGxiYWNrIGRpcmVjdGx5LgorICAgIC8vIFdlIHdvbid0IG5lZWQgdGhpcyBvbmNlIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgxMzggaXMgYWRkcmVzc2VkLgorICAg
IFZlY3Rvcjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiBhcmdBcnJheShhcmdzLkxlbmd0aCgpKTsK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3MuTGVuZ3RoKCk7ICsraSkKKyAgICAgICAgYXJn
QXJyYXkuYXBwZW5kKGFyZ3NbaV0pOworICAgIGlmIChhcmdzLklzQ29uc3RydWN0Q2FsbCgpKQor
ICAgICAgICByZXR1cm4gd3JhcHBlZC0+Q2FsbEFzQ29uc3RydWN0b3IoYXJnQXJyYXkuc2l6ZSgp
LCBhcmdBcnJheS5kYXRhKCkpOworICAgIHJldHVybiB3cmFwcGVkLT5DYWxsQXNGdW5jdGlvbihh
cmdzLlRoaXMoKSwgYXJnQXJyYXkuc2l6ZSgpLCBhcmdBcnJheS5kYXRhKCkpOworfQorCit2ODo6
SGFuZGxlPHY4OjpGdW5jdGlvbj4gVjhBZGFwdG9yRnVuY3Rpb246OndyYXAodjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBvYmplY3QsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgdjg6Oklzb2xhdGUq
IGlzb2xhdGUpCit7CisgICAgaWYgKG9iamVjdC5Jc0VtcHR5KCkgfHwgIW9iamVjdC0+SXNPYmpl
Y3QoKSkKKyAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPigpOworICAgIHY4
OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBhZGFwdG9yID0gdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+
OjpDYXN0KGdldFRlbXBsYXRlKGlzb2xhdGUpLT5HZXRGdW5jdGlvbigpKTsKKyAgICBpZiAoYWRh
cHRvci5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4o
KTsKKyAgICBhZGFwdG9yLT5TZXROYW1lKHY4U3RyaW5nKG5hbWUuc3RyaW5nKCksIGlzb2xhdGUp
KTsKKyAgICBhZGFwdG9yLT5TZXRIaWRkZW5WYWx1ZShWOEhpZGRlblByb3BlcnR5TmFtZTo6YWRh
cHRvckZ1bmN0aW9uUGVlcigpLCBvYmplY3QpOworICAgIG9iamVjdC0+U2V0SGlkZGVuVmFsdWUo
VjhIaWRkZW5Qcm9wZXJ0eU5hbWU6OmFkYXB0b3JGdW5jdGlvblBlZXIoKSwgYWRhcHRvcik7Cisg
ICAgcmV0dXJuIGFkYXB0b3I7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhBZGFwdG9yRnVuY3Rpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lM2Q2YmI1MWY0NDBhNGM3NzI0YWJj
ZTNkZTkzMDY4ZGFlOGMzYTU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhBZGFwdG9yRnVuY3Rpb24uaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBWOEFk
YXB0b3JGdW5jdGlvbl9oCisjZGVmaW5lIFY4QWRhcHRvckZ1bmN0aW9uX2gKKworI2luY2x1ZGUg
IlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4SGlkZGVuUHJvcGVydHlOYW1lLmgiCisjaW5jbHVk
ZSAiV3JhcHBlclR5cGVJbmZvLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworI2lm
IEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8KKy8v
IEZJWE1FKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgxMzgpOgor
Ly8gVjhBZGFwdG9yRnVuY3Rpb24gY2xhc3MgYW5kIFY4V3JhcEFzRnVuY3Rpb24gSURMIGF0dHJp
YnV0ZSBhcmUgbmVlZGVkIGZvciB0d28gcmVhc29uczoKKy8vIC0gMSkgVjggZG9lc24ndCBhbGxv
dyBleHBhbmRpbmcgdGhlIGludGVybmFsIGZpZWxkIG9mIGZ1bmN0aW9uIG9iamVjdHMuIGh0dHBz
Oi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD04MzcKKy8vICAgICAgV2Vi
S2l0IG5lZWQgaXQgdG8gYXNzb2NpYXRlIGVhY2ggd3JhcHBlciB0byBpdHMgYmFja2luZyBDKysg
b2JqZWN0LiBXZSBzdG9yZSBpdCBpbiBhIGhpZGRlbiBwcm9wZXJ0eSBvZiB0aGUgd3JhcHBlZCBv
YmplY3QuCisvLyAtIDIpIEJpbmRpbmcgY29kZWJhc2UgYXNzdW1lcyBldmVyeSB3cmFwcGVyIG9i
amVjdCBpcyBjcmVhdGVkIHRocm91Z2ggT2JqZWN0VGVtcGxhdGU6Ok5ld0luc3RhbmNlKCksIG5v
dCBGdW5jdGlvblRlbXBsYXRlOjpHZXRGdW5jdGlvbigpLgorLy8gT25jZSAxKSBpcyBhZGRyZXNz
c2VkLCB3ZSBjb3VsZCBhdHRhY2sgMikgd2l0aCBpdC4gCisvLworY2xhc3MgVjhBZGFwdG9yRnVu
Y3Rpb24geworcHVibGljOgorICAgIHN0YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKKyAgICBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB1bndyYXAodjg6OkhhbmRsZTx2ODo6RnVuY3Rp
b24+KTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IHdyYXAodjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCB2ODo6SXNvbGF0ZSopOwor
ICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gZ2V0KHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4pOworCisgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
PiBnZXRUZW1wbGF0ZSh2ODo6SXNvbGF0ZSogPSAwKTsKKyAgICBzdGF0aWMgdjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGNvbmZpZ3VyZVRlbXBsYXRlKHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPik7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBpbnZvY2F0aW9uQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYpOworfTsKKworaW5saW5l
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhBZGFwdG9yRnVuY3Rpb246OnVud3JhcCh2ODo6SGFu
ZGxlPHY4OjpGdW5jdGlvbj4gZnVuY3Rpb24pCit7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHdyYXBwZWQgPSBmdW5jdGlvbi0+R2V0SGlkZGVuVmFsdWUoVjhIaWRkZW5Qcm9wZXJ0eU5hbWU6
OmFkYXB0b3JGdW5jdGlvblBlZXIoKSk7CisgICAgQVNTRVJUKCF3cmFwcGVkLklzRW1wdHkoKSk7
CisgICAgQVNTRVJUKHdyYXBwZWQtPklzT2JqZWN0KCkpOworICAgIHJldHVybiB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+OjpDYXN0KHdyYXBwZWQpOworfQorCitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6
RnVuY3Rpb24+IFY4QWRhcHRvckZ1bmN0aW9uOjpnZXQodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBv
YmplY3QpCit7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFkYXB0b3JGdW5jdGlvbiA9IG9i
amVjdC0+R2V0SGlkZGVuVmFsdWUoVjhIaWRkZW5Qcm9wZXJ0eU5hbWU6OmFkYXB0b3JGdW5jdGlv
blBlZXIoKSk7CisgICAgQVNTRVJUKCFhZGFwdG9yRnVuY3Rpb24uSXNFbXB0eSgpKTsKKyAgICBB
U1NFUlQoYWRhcHRvckZ1bmN0aW9uLT5Jc0Z1bmN0aW9uKCkpOworICAgIHJldHVybiB2ODo6SGFu
ZGxlPHY4OjpGdW5jdGlvbj46OkNhc3QoYWRhcHRvckZ1bmN0aW9uKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKyNlbmRp
ZiAvLyBWOEFkYXB0b3JGdW5jdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOERPTUNvbmZpZ3VyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhET01Db25maWd1cmF0aW9uLmNwcAppbmRleCAwYmJhNmZjOTc5ZmNhMjljNmVjYThiODg2
NGEyNDVlYWJkYTU2YjMyLi4yMmE0ZjYwMzg1YTQ4NDNhNjk1OWQzOTU3NTdkZWU1MjE5MzA3MTRj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTUNvbmZpZ3VyYXRp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NQ29uZmlndXJhdGlv
bi5jcHAKQEAgLTMzLDYgKzMzLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjb25zdCBp
bnQgcHJvdG90eXBlSW50ZXJuYWxGaWVsZGNvdW50ID0gMTsKKwogdm9pZCBWOERPTUNvbmZpZ3Vy
YXRpb246OmJhdGNoQ29uZmlndXJlQXR0cmlidXRlcyh2ODo6SGFuZGxlPHY4OjpPYmplY3RUZW1w
bGF0ZT4gaW5zdGFuY2UsIHY4OjpIYW5kbGU8djg6Ok9iamVjdFRlbXBsYXRlPiBwcm90b3R5cGUs
IGNvbnN0IEJhdGNoZWRBdHRyaWJ1dGUqIGF0dHJpYnV0ZXMsIHNpemVfdCBhdHRyaWJ1dGVDb3Vu
dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBh
dHRyaWJ1dGVDb3VudDsgKytpKQpAQCAtNjAsNiArNjIsMTEgQEAgdjg6OkxvY2FsPHY4OjpTaWdu
YXR1cmU+IFY4RE9NQ29uZmlndXJhdGlvbjo6Y29uZmlndXJlVGVtcGxhdGUodjg6OlBlcnNpc3Rl
bnQ8djgKICAgICBmdW5jdGlvbkRlc2NyaXB0b3ItPlNldENsYXNzTmFtZSh2ODo6U3RyaW5nOjpO
ZXdTeW1ib2woaW50ZXJmYWNlTmFtZSkpOwogICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0VGVtcGxh
dGU+IGluc3RhbmNlID0gZnVuY3Rpb25EZXNjcmlwdG9yLT5JbnN0YW5jZVRlbXBsYXRlKCk7CiAg
ICAgaW5zdGFuY2UtPlNldEludGVybmFsRmllbGRDb3VudChmaWVsZENvdW50KTsKKyAgICAvLyBN
YXJrcyB0aGUgcHJvdG90eXBlIG9iamVjdCBhcyBvbmUgb2YgbmF0aXZlLWJhY2tlZCBvYmplY3Rz
LgorICAgIC8vIFRoaXMgaXMgbmVlZGVkIHNpbmNlIGJ1ZyAxMTA0MzYgYXNrcyBXZWJLaXQgdG8g
dGVsbCBuYXRpdmUtaW5pdGlhdGVkIHByb3RvdHlwZXMgZnJvbSBwdXJlLUpTIG9uZXMuCisgICAg
djg6OkxvY2FsPHY4OjpPYmplY3RUZW1wbGF0ZT4gcHJvdG90eXBlID0gZnVuY3Rpb25EZXNjcmlw
dG9yLT5Qcm90b3R5cGVUZW1wbGF0ZSgpOworICAgIHByb3RvdHlwZS0+U2V0SW50ZXJuYWxGaWVs
ZENvdW50KHByb3RvdHlwZUludGVybmFsRmllbGRjb3VudCk7CisKICAgICBpZiAoIXBhcmVudENs
YXNzLklzRW1wdHkoKSkKICAgICAgICAgZnVuY3Rpb25EZXNjcmlwdG9yLT5Jbmhlcml0KHBhcmVu
dENsYXNzKTsKICAgICBpZiAoYXR0cmlidXRlQ291bnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhET01XcmFwcGVyLmNwcAppbmRleCAzNDI3NzhhY2Y3OTQ2YWEwZGNiNGM3ODlhYjBk
YjcwMDliMDRjOGIzLi40ZDhjMjI2ZjNlMjcyZjBlMzU5NjIxZThkNDA2OGMzMTk0YjUzZmI4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAKQEAgLTMxLDYg
KzMxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIK
IAorI2luY2x1ZGUgIlY4QWRhcHRvckZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgi
CiAjaW5jbHVkZSAiVjhET01XaW5kb3cuaCIKICNpbmNsdWRlICJWOEhUTUxDb2xsZWN0aW9uLmgi
CkBAIC0xMzcsNCArMTM4LDI1IEBAIGJvb2wgVjhET01XcmFwcGVyOjppc1dyYXBwZXJPZlR5cGUo
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlLCBXcmFwcGVyVHlwZUluZm8qCiAgICAgcmV0dXJu
IHR5cGVJbmZvID09IHR5cGU7CiB9CiAKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCit2
ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gVjhET01XcmFwcGVyOjp0b0Z1bmN0aW9uKHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBvYmplY3QpCit7CisgICAgcmV0dXJuIFY4QWRhcHRvckZ1bmN0aW9uOjpn
ZXQodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChvYmplY3QpKTsKK30KKwordjg6OkhhbmRs
ZTx2ODo6RnVuY3Rpb24+IFY4RE9NV3JhcHBlcjo6dG9GdW5jdGlvbih2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IG9iamVjdCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCB2ODo6SXNvbGF0ZSogaXNv
bGF0ZSkKK3sKKyAgICByZXR1cm4gVjhBZGFwdG9yRnVuY3Rpb246OndyYXAob2JqZWN0LCBuYW1l
LCBpc29sYXRlKTsKK30KKwordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOERPTVdyYXBwZXI6OmZy
b21GdW5jdGlvbih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkKK3sKKyAgICBpZiAoIW9i
amVjdC0+SXNGdW5jdGlvbigpKQorICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIHJldHVybiBW
OEFkYXB0b3JGdW5jdGlvbjo6dW53cmFwKHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPjo6Q2FzdChv
YmplY3QpKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKIH0gIC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOERPTVdyYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBl
ci5oCmluZGV4IDM5ZGNlNDdmM2Y3NTcyOGRlN2RiMjk3NmY4NzRjYmU3YWIxMmNhYTQuLjE4NDQx
YTllMTJmZWMyZGVlOTg5MjQ5Y2EzODQxZWM1MzZhZGExMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oCkBAIC02Miw2ICs2MiwxMyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICAgICAgc3RhdGljIGJvb2wgaXNET01XcmFwcGVyKHY4OjpIYW5kbGU8djg6
OlZhbHVlPik7CiAgICAgICAgIHN0YXRpYyBib29sIGlzV3JhcHBlck9mVHlwZSh2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4sIFdyYXBwZXJUeXBlSW5mbyopOworCisjaWYgRU5BQkxFKENVU1RPTV9FTEVN
RU5UUykKKyAgICAgICAgLy8gVXNlZCBmb3IgVjhXcmFwQXNGdW5jdGlvbiwgd2hpY2ggaXMgdXNl
ZCBvbmx5IGJ5IENVU1RPTV9FTEVNRU5UUworICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
RnVuY3Rpb24+IHRvRnVuY3Rpb24odjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKKyAgICAgICAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiB0b0Z1bmN0aW9uKHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4sIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgdjg6Oklzb2xhdGUqKTsKKyAgICAgICAg
c3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZnJvbUZ1bmN0aW9uKHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4pOworI2VuZGlmIC8vIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCiAgICAgfTsKIAog
ICAgIGlubGluZSB2b2lkIFY4RE9NV3JhcHBlcjo6c2V0TmF0aXZlSW5mbyh2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IHdyYXBwZXIsIFdyYXBwZXJUeXBlSW5mbyogdHlwZSwgdm9pZCogb2JqZWN0KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jMjU2NWIwNDFjZmZlYmViZDc3N2QxNGUxZjQzMGExYzBmYjU4YjhkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIVE1MQ3VzdG9t
RWxlbWVudC5jcHAKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJWOEhUTUxDdXN0b21FbGVtZW50LmgiCisKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50SGVscGVy
cy5oIgorI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRSZWdpc3RyeS5oIgorI2luY2x1ZGUgIkhUTUxF
bGVtZW50LmgiCisjaW5jbHVkZSAiVjhDdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaCIKKyNpbmNs
dWRlICJWOEhUTUxTcGFuRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBF
TkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCisvLyBGSVhNRTogRWFjaCBjdXN0b20gZWxlbWVudHMg
c2hvdWxkIGhhdmUgaXRzIG93biBHZXRUZW1wbGF0ZSBtZXRob2Qgc28gdGhhdCBpdCBjYW4gYmUg
ZGVyaXZlZCBmcm9tIGRpZmZlcmVudCBzdXBlciBlbGVtZW50LgorV3JhcHBlclR5cGVJbmZvIFY4
SFRNTEN1c3RvbUVsZW1lbnQ6OmluZm8gPSB7ICZWOEhUTUxTcGFuRWxlbWVudDo6R2V0VGVtcGxh
dGUsIFY4SFRNTEVsZW1lbnQ6OmRlcmVmT2JqZWN0LCAwLCAwLCAwLCAwLCAmVjhIVE1MU3BhbkVs
ZW1lbnQ6OmluZm8sIFdyYXBwZXJUeXBlT2JqZWN0UHJvdG90eXBlIH07CisKK3Y4OjpIYW5kbGU8
djg6Ok9iamVjdD4gVjhIVE1MQ3VzdG9tRWxlbWVudDo6Y3JlYXRlV3JhcHBlcihQYXNzUmVmUHRy
PEhUTUxFbGVtZW50PiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4
dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit7CisgICAgQVNTRVJUKGltcGwpOworCisgICAgUmVm
UHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gY29uc3RydWN0b3IgPSBDdXN0b21FbGVtZW50
UmVnaXN0cnk6OmNvbnN0cnVjdG9yT2YoaW1wbC5nZXQoKSk7CisgICAgaWYgKCFjb25zdHJ1Y3Rv
cikgeworICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlclZhbHVlID0gV2ViQ29y
ZTo6dG9WOCh0b0hUTUxVbmtub3duRWxlbWVudChpbXBsLmdldCgpKSwgY3JlYXRpb25Db250ZXh0
LCBpc29sYXRlKTsKKyAgICAgICAgaWYgKCF3cmFwcGVyVmFsdWUuSXNFbXB0eSgpICYmIHdyYXBw
ZXJWYWx1ZS0+SXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+OjpDYXN0KHdyYXBwZXJWYWx1ZSk7CisgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+KCk7CisgICAgfQorCisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVy
ID0gVjhET01XcmFwcGVyOjpjcmVhdGVXcmFwcGVyKGNyZWF0aW9uQ29udGV4dCwgJmluZm8sIGlt
cGwuZ2V0KCksIGlzb2xhdGUpOworICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIHdyYXBwZXI7CisKKyAgICAvLyBUaGUgY29uc3RydWN0b3IgYW5kIHJlZ2lzdGVyZWQg
bGlmZWN5Y2xlIGNhbGxiYWNrcyBzaG91bGQgYmUgdmlzaWJsZSBvbmx5IGZyb20gbWFpbiB3b3Js
ZC4KKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgYmUgbmVlZGVkIG9uY2UgZWFjaCBjdXN0
b20gZWxlbWVudCBoYXMgaXRzIG93biBGdW5jdGlvblRlbXBsYXRlCisgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODEzOAorICAgIGlmIChDdXN0b21FbGVt
ZW50SGVscGVyczo6aXNGZWF0dXJlQWxsb3dlZChjcmVhdGlvbkNvbnRleHQtPkNyZWF0aW9uQ29u
dGV4dCgpKSkgeworICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlclZhbHVlID0g
V2ViQ29yZTo6dG9WOChjb25zdHJ1Y3Rvci5nZXQoKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRl
KTsKKyAgICAgICAgaWYgKHdyYXBwZXJWYWx1ZS5Jc0VtcHR5KCkgfHwgIXdyYXBwZXJWYWx1ZS0+
SXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCk7
CisgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY29uc3RydWN0b3JXYXBwZXIgPSB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHdyYXBwZXJWYWx1ZSk7CisgICAgICAgIHdyYXBwZXIt
PlNldFByb3RvdHlwZShjb25zdHJ1Y3RvcldhcHBlci0+R2V0KHY4U3RyaW5nKCJwcm90b3R5cGUi
LCBpc29sYXRlKSkpOworICAgIH0KKworICAgIFY4RE9NV3JhcHBlcjo6YXNzb2NpYXRlT2JqZWN0
V2l0aFdyYXBwZXIoaW1wbCwgJmluZm8sIHdyYXBwZXIsIGlzb2xhdGUsIFdyYXBwZXJDb25maWd1
cmF0aW9uOjpEZXBlbmRlbnQpOworICAgIHJldHVybiB3cmFwcGVyOworfQorCisjZW5kaWYgLy8g
RU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVudC5oIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVudC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjRiZmJmMzlmYTcwZDNmNmZmN2QyODAyNzYyYjQ5ZjQxZWQyNjUxMmMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50LmgK
QEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgVjhIVE1MQ3VzdG9tRWxlbWVudF9oCisjZGVmaW5lIFY4
SFRNTEN1c3RvbUVsZW1lbnRfaAorCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAi
VjhET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiVjhIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIlY4
SFRNTFVua25vd25FbGVtZW50LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBIVE1MRWxlbWVudDsKKworI2lmIEVOQUJMRShDVVNU
T01fRUxFTUVOVFMpCisKK2NsYXNzIFY4SFRNTEN1c3RvbUVsZW1lbnQgeworcHVibGljOgorICAg
IHN0YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiB0b1Y4KEhUTUxFbGVtZW50Kiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlv
bkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiA9IDApOwor
ICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0ZVdyYXBwZXIoUGFzc1JlZlB0
cjxIVE1MRWxlbWVudD4sIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4sIHY4OjpJc29sYXRlKik7Cit9
OworCitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOEhUTUxDdXN0b21FbGVtZW50Ojp0
b1Y4KEhUTUxFbGVtZW50KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29u
dGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit7CisgICAgaWYgKFVOTElLRUxZKCFpbXBsKSkK
KyAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodjhOdWxsV2l0aENo
ZWNrKGlzb2xhdGUpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBET01E
YXRhU3RvcmU6OmdldFdyYXBwZXIoaW1wbCwgaXNvbGF0ZSk7CisgICAgaWYgKCF3cmFwcGVyLklz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgcmV0dXJuIFY4SFRNTEN1c3Rv
bUVsZW1lbnQ6OmNyZWF0ZVdyYXBwZXIoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsK
K30KKworI2Vsc2UgLy8gRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKworY2xhc3MgVjhIVE1MQ3Vz
dG9tRWxlbWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
d3JhcChIVE1MRWxlbWVudCosIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0
ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSogPSAwKTsKK307CisKK2lu
bGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IEhUTUxDdXN0b21FbGVtZW50Ojp0b1Y4KEhUTUxF
bGVtZW50KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6
Oklzb2xhdGUqIGlzb2xhdGUpCit7CisgICAgcmV0dXJuIHRvVjgodG9IVE1MVW5rbm93bkVsZW1l
bnQoaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7Cit9CisKKyNlbmRpZiAvLyBFTkFC
TEUoQ1VTVE9NX0VMRU1FTlRTKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBWOEhUTUxDdXN0b21FbGVtZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oCmluZGV4IDUwOGJkZDM2MjgwNmE3MTA0NmNkM2Q2MmYw
MzVhY2UyYjIyNjFhYmMuLjAzY2Q1N2ZkODkwZjMxMWU0Mjk1NDU4MGQ0NjFhMTZmOGViNDQ4ZGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlO
YW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIaWRkZW5Qcm9wZXJ0eU5h
bWUuaApAQCAtNDUsNiArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgVihzY3JpcHRT
dGF0ZSkgXAogICAgIFYoc2xlZXBGdW5jdGlvbikgXAogICAgIFYoc3RhdGUpIFwKKyAgICBWKGFk
YXB0b3JGdW5jdGlvblBlZXIpIFwKICAgICBWKHRvU3RyaW5nU3RyaW5nKSBcCiAgICAgVih0eXBl
ZEFycmF5SGlkZGVuQ29weU1ldGhvZCkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yQ3VzdG9tLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rv
ckN1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzQzNzRmNjc2ODgwYzkyODU0ZjI4ODk0NmE2MzkxNTFh
MGIzYjIzNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvckN1c3RvbS5jcHAKQEAgLTAsMCArMSw1NCBA
QAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisqIAorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorKiBtZXQ6CisqIAorKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisqIGRpc3Ry
aWJ1dGlvbi4KKyogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKiAKKyogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlY4Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmgiCisKKyNpbmNsdWRlICJDdXN0b21F
bGVtZW50Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJW
OEhUTUxDdXN0b21FbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IFY4Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjpjYWxsQXNGdW5jdGlvbkNh
bGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgaWYgKCFhcmdzLklzQ29u
c3RydWN0Q2FsbCgpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoIkRPTSBvYmplY3Qg
Y29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLiIsIGFyZ3MuR2V0SXNv
bGF0ZSgpKTsKKyAgICBpZiAoQ29uc3RydWN0b3JNb2RlOjpjdXJyZW50KCkgPT0gQ29uc3RydWN0
b3JNb2RlOjpXcmFwRXhpc3RpbmdPYmplY3QpCisgICAgICAgIHJldHVybiBhcmdzLkhvbGRlcigp
OworCisgICAgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKiBpbXBsID0gdG9OYXRpdmUoYXJncy5I
b2xkZXIoKSk7CisgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50ID0gaW1wbC0+Y3JlYXRl
RWxlbWVudCgpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVk
KCk7CisgICAgcmV0dXJuIFY4SFRNTEN1c3RvbUVsZW1lbnQ6OnRvVjgoZWxlbWVudC5nZXQoKSwg
YXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudENvbnN0
cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3Iu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjYyNDk3MzJhNTM0MThkYjg1ZjYxNTQ5YTY5OTJjYjlhY2EyMTg5Y2MK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudENvbnN0
cnVjdG9yLmNwcApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oIgorCisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5U
UykKKworI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRIZWxwZXJzLmgiCisjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29u
c3RydWN0b3I+IEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlKFNjcmlwdFN0YXRlKiBz
dGF0ZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFNjcmlwdFZhbHVlJiBwcm90b3R5cGUpCit7CisgICAg
UmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gY3JlYXRlZCA9IGFkb3B0UmVmKG5ldyBD
dXN0b21FbGVtZW50Q29uc3RydWN0b3IoZG9jdW1lbnQsIHRhZ05hbWUsIG5hbWUpKTsKKyAgICBp
ZiAoIUN1c3RvbUVsZW1lbnRIZWxwZXJzOjppbml0aWFsaXplQ29uc3RydWN0b3JXcmFwcGVyKGNy
ZWF0ZWQuZ2V0KCksIHByb3RvdHlwZSwgc3RhdGUpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBy
ZXR1cm4gY3JlYXRlZC5yZWxlYXNlKCk7Cit9CisKK0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6
Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgY29uc3QgU3RyaW5nJiBuYW1lKQorICAgIDogQ29udGV4dERlc3Ry
dWN0aW9uT2JzZXJ2ZXIoZG9jdW1lbnQpCisgICAgLCBtX3RhZ05hbWUodGFnTmFtZSkKKyAgICAs
IG1fbmFtZShuYW1lKQoreworfQorCitDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6On5DdXN0b21F
bGVtZW50Q29uc3RydWN0b3IoKQoreworfQorCitQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBDdXN0
b21FbGVtZW50Q29uc3RydWN0b3I6OmNyZWF0ZUVsZW1lbnQoKSBjb25zdAoreworICAgIGlmICgh
ZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIEhUTUxFbGVtZW50Ojpj
cmVhdGUobV90YWdOYW1lLCBkb2N1bWVudCgpKTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxF
KENVU1RPTV9FTEVNRU5UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21F
bGVtZW50Q29uc3RydWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50Q29u
c3RydWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NzhlYjE3MTVjNmE2NTAyYjQ5MWNmZGNkZmExMDM5NjIz
NjRiYmY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1l
bnRDb25zdHJ1Y3Rvci5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEN1c3RvbUVsZW1lbnRDb25z
dHJ1Y3Rvcl9oCisjZGVmaW5lIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcl9oCisKKyNpZiBFTkFC
TEUoQ1VTVE9NX0VMRU1FTlRTKQorCisjaW5jbHVkZSAiQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2
ZXIuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIK
KyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJp
bmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEhU
TUxFbGVtZW50OworY2xhc3MgU2NyaXB0U3RhdGU7CitjbGFzcyBTY3JpcHRWYWx1ZTsKKworY2xh
c3MgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yIDogcHVibGljIFJlZkNvdW50ZWQ8Q3VzdG9tRWxl
bWVudENvbnN0cnVjdG9yPiAsIHB1YmxpYyBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlciB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiBj
cmVhdGUoU2NyaXB0U3RhdGUqLCBEb2N1bWVudCosIGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25z
dCBTdHJpbmcmLCBjb25zdCBTY3JpcHRWYWx1ZSYpOworCisgICAgdmlydHVhbCB+Q3VzdG9tRWxl
bWVudENvbnN0cnVjdG9yKCk7CisKKyAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7IH0K
KyAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKCkgY29uc3QgeyByZXR1cm4gbV90YWdO
YW1lOyB9CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9u
YW1lOyB9CisKKyAgICBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBjcmVhdGVFbGVtZW50KCkgY29u
c3Q7CisgICAgCitwcml2YXRlOgorICAgIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvcihEb2N1bWVu
dCosIGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBTdHJpbmcmKTsKKworICAgIFF1YWxpZmll
ZE5hbWUgbV90YWdOYW1lOworICAgIEF0b21pY1N0cmluZyBtX25hbWU7Cit9OworCit9CisKKyNl
bmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCisjZW5kaWYgLy8gQ3VzdG9tRWxlbWVu
dENvbnN0cnVjdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVt
ZW50Q29uc3RydWN0b3IuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRDb25z
dHJ1Y3Rvci5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDdjNTMwZjg3ZGVhZTY3ZmE1ZmRhMWUxMzliMDVjYjk4
YTA3M2IwZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVt
ZW50Q29uc3RydWN0b3IuaWRsCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitbCisgICAg
Q29uZGl0aW9uYWw9Q1VTVE9NX0VMRU1FTlRTLAorICAgIFY4RW5hYmxlZEF0UnVudGltZT1jdXN0
b21ET01FbGVtZW50cywKKyAgICBWOFdyYXBBc0Z1bmN0aW9uLAorICAgIEN1c3RvbUNhbGwKK10g
aW50ZXJmYWNlIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciB7Cit9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MWYyYWMxZjgxNjgz
MzYwZDc0MDExODdhZDY3ZGJkNzY0MmE4NWM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5jcHAKQEAgLTAsMCArMSwxNzEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5
LmgiCisKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJD
dXN0b21FbGVtZW50SGVscGVycy5oIgorI2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIKKyNpbmNsdWRl
ICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgorI2luY2x1ZGUgPHd0
Zi9BU0NJSUNUeXBlLmg+CisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlNWR05hbWVzLmgi
CisjZW5kaWYKKworI2lmIEVOQUJMRShNQVRITUwpCisjaW5jbHVkZSAiTWF0aE1MTmFtZXMuaCIK
KyNlbmRpZgorCisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitDdXN0b21FbGVtZW50UmVnaXN0cnk6OkN1c3RvbUVsZW1lbnRSZWdpc3RyeShEb2N1
bWVudCogZG9jdW1lbnQpCisgICAgOiBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlcihkb2N1bWVu
dCkKK3sKK30KKworQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Ojp+Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5
KCkKK3sKK30KKworUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IEN1c3RvbUVs
ZW1lbnRSZWdpc3RyeTo6Y29uc3RydWN0b3JPZihIVE1MRWxlbWVudCogZWxlbWVudCkKK3sKKyAg
ICBSZWZQdHI8Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5PiBzZWxmID0gZWxlbWVudC0+ZG9jdW1lbnQo
KS0+cmVnaXN0cnkoKTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiAwOworICAgIHJl
dHVybiBzZWxmLT5maW5kKGVsZW1lbnQtPnRhZ1FOYW1lKCkpOworfQorCitib29sIEN1c3RvbUVs
ZW1lbnRSZWdpc3RyeTo6aXNWYWxpZE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQorewor
ICAgIHNpemVfdCBoeXBoZW5Qb3NpdGlvbiA9IG5hbWUuZmluZCgnLScpOworICAgIGlmIChoeXBo
ZW5Qb3NpdGlvbiA9PSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8QXRvbWljU3RyaW5nPiwgcmVzZXJ2ZWROYW1lcywgKCkp
OworICAgIGlmIChyZXNlcnZlZE5hbWVzLmlzRW1wdHkoKSkgeworI2lmIEVOQUJMRShNQVRITUwp
CisgICAgICAgIHJlc2VydmVkTmFtZXMuYXBwZW5kKE1hdGhNTE5hbWVzOjphbm5vdGF0aW9uX3ht
bFRhZy5sb2NhbE5hbWUoKSk7CisjZW5kaWYKKworI2lmIEVOQUJMRShTVkcpCisgICAgICAgIHJl
c2VydmVkTmFtZXMuYXBwZW5kKFNWR05hbWVzOjpjb2xvcl9wcm9maWxlVGFnLmxvY2FsTmFtZSgp
KTsKKyAgICAgICAgcmVzZXJ2ZWROYW1lcy5hcHBlbmQoU1ZHTmFtZXM6OmZvbnRfZmFjZVRhZy5s
b2NhbE5hbWUoKSk7CisgICAgICAgIHJlc2VydmVkTmFtZXMuYXBwZW5kKFNWR05hbWVzOjpmb250
X2ZhY2Vfc3JjVGFnLmxvY2FsTmFtZSgpKTsKKyAgICAgICAgcmVzZXJ2ZWROYW1lcy5hcHBlbmQo
U1ZHTmFtZXM6OmZvbnRfZmFjZV91cmlUYWcubG9jYWxOYW1lKCkpOworICAgICAgICByZXNlcnZl
ZE5hbWVzLmFwcGVuZChTVkdOYW1lczo6Zm9udF9mYWNlX2Zvcm1hdFRhZy5sb2NhbE5hbWUoKSk7
CisgICAgICAgIHJlc2VydmVkTmFtZXMuYXBwZW5kKFNWR05hbWVzOjpmb250X2ZhY2VfbmFtZVRh
Zy5sb2NhbE5hbWUoKSk7CisgICAgICAgIHJlc2VydmVkTmFtZXMuYXBwZW5kKFNWR05hbWVzOjpt
aXNzaW5nX2dseXBoVGFnLmxvY2FsTmFtZSgpKTsKKyNlbmRpZgorICAgIH0KKworICAgIGlmIChX
VEY6Om5vdEZvdW5kICE9IHJlc2VydmVkTmFtZXMuZmluZChuYW1lKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgcmV0dXJuIERvY3VtZW50Ojppc1ZhbGlkTmFtZShuYW1lLnN0cmluZygp
KTsKK30KKworUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IEN1c3RvbUVsZW1l
bnRSZWdpc3RyeTo6cmVnaXN0ZXJFbGVtZW50KFNjcmlwdFN0YXRlKiBzdGF0ZSwgY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lLCBjb25zdCBEaWN0aW9uYXJ5JiBvcHRpb25zLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBSZWZQdHI8Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5PiBwcm90ZWN0KHRoaXMp
OworCisgICAgaWYgKCFDdXN0b21FbGVtZW50SGVscGVyczo6aXNGZWF0dXJlQWxsb3dlZChzdGF0
ZSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgUXVhbGlmaWVkTmFtZSBuZXdOYW1lKG51bGxB
dG9tLCBuYW1lLmxvd2VyKCksIEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkpOworICAgIGlm
ICghaXNWYWxpZE5hbWUobmV3TmFtZS5sb2NhbE5hbWUoKSkpIHsKKyAgICAgICAgZWMgPSBJTlZB
TElEX0NIQVJBQ1RFUl9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAgICAgCisg
ICAgaWYgKGZpbmQobmV3TmFtZSkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgU2NyaXB0VmFsdWUgcHJvdG90eXBlVmFs
dWU7CisgICAgaWYgKCFvcHRpb25zLmdldCgicHJvdG90eXBlIiwgcHJvdG90eXBlVmFsdWUpKSB7
CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhlIGRlZmF1bHQgdmFsdWUgaGFuZGxpbmcu
CisgICAgICAgIC8vIEN1cnJlbnRseSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAicHJvdG90eXBlIiBw
YXJhbWV0ZXIsIHdoaWNoCisgICAgICAgIC8vIGlzIEhUTUxTcGFuRWxlbWVudC5wcm90b3R5cGUs
IGhhcyBhbiBhbWJpZ3VpdHkgYWJvdXQgaXRzCisgICAgICAgIC8vIGJlaGF2aW9yLiBUaGUgc3Bl
YyBzaG91bGQgYmUgZml4ZWQgYmVmb3JlIFdlYktpdCBpbXBsZW1lbnRzCisgICAgICAgIC8vIGl0
LiBodHRwczovL3d3dy53My5vcmcvQnVncy9QdWJsaWMvc2hvd19idWcuY2dpP2lkPTIwODAxCisg
ICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KworICAgIGlmICghQ3VzdG9tRWxlbWVudEhlbHBlcnM6OmlzVmFsaWRQcm90b3R5cGVQYXJhbWV0
ZXIocHJvdG90eXBlVmFsdWUsIHN0YXRlKSkgeworICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVf
RVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgLy8gQW4gc2NyaXB0IGV4
ZWN1dGlvbiBjb3VsZCBoYXBwZW4gaW4gaXNWYWxpZFByb3RvdHlwZVBhcmFtZXRlcigpLCB3aGlj
aCBraWxscyB0aGUgZG9jdW1lbnQuCisgICAgaWYgKCFkb2N1bWVudCgpKSB7CisgICAgICAgIGVj
ID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJl
ZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IGZyZXNoID0gQ3VzdG9tRWxlbWVudENvbnN0
cnVjdG9yOjpjcmVhdGUoc3RhdGUsIGRvY3VtZW50KCksIG5ld05hbWUsICJIVE1MQ3VzdG9tRWxl
bWVudCIsIHByb3RvdHlwZVZhbHVlKTsKKyAgICBpZiAoIWZyZXNoKSB7CisgICAgICAgIGVjID0g
SU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAgICAgCisg
ICAgbV9jb25zdHJ1Y3RvcnMuYWRkKGZyZXNoLT50YWdOYW1lKCkuaW1wbCgpLCBmcmVzaCk7Cisg
ICAgcmV0dXJuIGZyZXNoOworfQorCitQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rv
cj4gQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpmaW5kKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUp
IGNvbnN0Cit7CisgICAgQ29uc3RydWN0b3JNYXA6OmNvbnN0X2l0ZXJhdG9yIGZvdW5kID0gbV9j
b25zdHJ1Y3RvcnMuZmluZChuYW1lLmltcGwoKSk7CisgICAgcmV0dXJuIChmb3VuZCAhPSBtX2Nv
bnN0cnVjdG9ycy5lbmQoKSkgPyBmb3VuZC0+dmFsdWUgOiAwOworfQorCitQYXNzUmVmUHRyPEhU
TUxFbGVtZW50PiBDdXN0b21FbGVtZW50UmVnaXN0cnk6OmNyZWF0ZUVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKK3sKKyAgICBpZiAoUmVmUHRyPEN1c3RvbUVsZW1lbnRD
b25zdHJ1Y3Rvcj4gZm91bmQgPSBmaW5kKG5hbWUpKQorICAgICAgICByZXR1cm4gZm91bmQtPmNy
ZWF0ZUVsZW1lbnQoKTsKKyAgICByZXR1cm4gMDsKK30KKworaW5saW5lIERvY3VtZW50KiBDdXN0
b21FbGVtZW50UmVnaXN0cnk6OmRvY3VtZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8RG9jdW1lbnQqPihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOworfQorCit9CisKKyNl
bmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3Rv
bUVsZW1lbnRSZWdpc3RyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdiNThjMTM5MDU0ODhjNGJhMzBmMDA5M2M2
YWU2MjlkNzRlMDczNjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3Vz
dG9tRWxlbWVudFJlZ2lzdHJ5LmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRp
b24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ3Vz
dG9tRWxlbWVudFJlZ2lzdHJ5X2gKKyNkZWZpbmUgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5X2gKKwor
I2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKKyNpbmNsdWRlICJDb250ZXh0RGVzdHJ1Y3Rp
b25PYnNlcnZlci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJRdWFs
aWZpZWROYW1lLmgiCisjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlICJTdXBwbGVt
ZW50YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDdXN0b21FbGVtZW50Q29uc3Ry
dWN0b3I7CitjbGFzcyBEaWN0aW9uYXJ5OworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBIVE1MRWxl
bWVudDsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CitjbGFzcyBRdWFsaWZpZWROYW1l
OworCitjbGFzcyBDdXN0b21FbGVtZW50UmVnaXN0cnkgOiBwdWJsaWMgUmVmQ291bnRlZDxDdXN0
b21FbGVtZW50UmVnaXN0cnk+ICwgcHVibGljIENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDdXN0b21FbGVtZW50UmVnaXN0cnkpOyBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBDdXN0b21FbGVtZW50UmVn
aXN0cnkoRG9jdW1lbnQqKTsKKyAgICB+Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5KCk7CisKKyAgICBQ
YXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gcmVnaXN0ZXJFbGVtZW50KFdlYkNv
cmU6OlNjcmlwdFN0YXRlKiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBEaWN0aW9u
YXJ5JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxDdXN0b21FbGVt
ZW50Q29uc3RydWN0b3I+IGZpbmQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OworICAgIFBh
c3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYp
IGNvbnN0OworICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0OworCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiBjb25zdHJ1Y3Rvck9mKEhUTUxFbGVt
ZW50Kik7CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBib29sIGlzVmFsaWROYW1lKGNvbnN0
IEF0b21pY1N0cmluZyYpOworCisgICAgdHlwZWRlZiBIYXNoTWFwPFF1YWxpZmllZE5hbWU6OlF1
YWxpZmllZE5hbWVJbXBsKiwgUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gPkNvbnN0
cnVjdG9yTWFwOworCisgICAgQ29uc3RydWN0b3JNYXAgbV9jb25zdHJ1Y3RvcnM7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRT
KQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCAwMmM5MmExY2I5NDAwNDlmYzBm
OWY1MzM2ODlmNDRjYWJjZDQ2ZDdlLi41NzM0NmE1YmE1NTI1ZDEyMDIzOTE3OTRjNTNmMTI1NTE2
ZDllMjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTQ2LDExICs0NiwxNCBAQAogI2lu
Y2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgogI2luY2x1ZGUgIkNvbnRleHRGZWF0dXJl
cy5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgorI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRDb25z
dHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRSZWdpc3RyeS5oIgogI2luY2x1ZGUg
IkRPTUltcGxlbWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5o
IgogI2luY2x1ZGUgIkRPTVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2lu
Y2x1ZGUgIkRhdGVDb21wb25lbnRzLmgiCisjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgogI2luY2x1
ZGUgIkRvY3VtZW50RXZlbnRRdWV1ZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIK
ICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgpAQCAtNjc0LDYgKzY3NywxMCBAQCB2b2lkIERv
Y3VtZW50OjpyZW1vdmVkTGFzdFJlZigpCiAgICAgICAgIG1fZnVsbFNjcmVlbkVsZW1lbnRTdGFj
ay5jbGVhcigpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorICAgICAg
ICBtX3JlZ2lzdHJ5LmNsZWFyKCk7CisjZW5kaWYKKwogICAgICAgICBkZXRhY2hQYXJzZXIoKTsK
IAogICAgICAgICAvLyByZW1vdmVEZXRhY2hlZENoaWxkcmVuKCkgZG9lc24ndCBhbHdheXMgdW5y
ZWdpc3RlciBJRHMsCkBAIC04NDIsNiArODQ5LDI1IEBAIFBhc3NSZWZQdHI8RWxlbWVudD4gRG9j
dW1lbnQ6OmNyZWF0ZUVsZW1lbnQoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25D
CiAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbmFtZSwg
bnVsbEF0b20pLCBmYWxzZSk7CiB9CiAKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorUGFz
c1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IERvY3VtZW50OjpyZWdpc3RlckVsZW1l
bnQoV2ViQ29yZTo6U2NyaXB0U3RhdGUqIHN0YXRlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiByZWdpc3RlckVsZW1lbnQoc3RhdGUs
IG5hbWUsIERpY3Rpb25hcnkoKSwgZWMpOworfQorCitQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRD
b25zdHJ1Y3Rvcj4gRG9jdW1lbnQ6OnJlZ2lzdGVyRWxlbWVudChXZWJDb3JlOjpTY3JpcHRTdGF0
ZSogc3RhdGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgRGljdGlvbmFyeSYgb3B0
aW9ucywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFtX3JlZ2lzdHJ5KQorICAgICAg
ICBtX3JlZ2lzdHJ5ID0gYWRvcHRSZWYobmV3IEN1c3RvbUVsZW1lbnRSZWdpc3RyeSh0aGlzKSk7
CisgICAgcmV0dXJuIG1fcmVnaXN0cnktPnJlZ2lzdGVyRWxlbWVudChzdGF0ZSwgbmFtZSwgb3B0
aW9ucywgZWMpOworfQorCitQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRSZWdpc3RyeT4gRG9jdW1l
bnQ6OnJlZ2lzdHJ5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZWdpc3RyeTsKK30KKyNlbmRp
ZiAvLyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCiBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IERvY3VtZW50OjpjcmVhdGVEb2N1bWVudEZyYWdtZW50KCkKIHsKICAgICByZXR1cm4gRG9j
dW1lbnRGcmFnbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRl
eCAxMjY0MzhkNzBlZjAxNjFiYzJhZmU4ZmNlYTc2OGE0YmM4NzAzN2FiLi5kOGI5ODYzMjk2OWIx
OWJlMDhhMWI0N2Q2YWY5NDNiZDQwN2I0OGQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtNzEs
NiArNzEsOCBAQCBjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0OwogY2xhc3MgQ2hhcmFjdGVy
RGF0YTsKIGNsYXNzIENvbW1lbnQ7CiBjbGFzcyBDb250ZXh0RmVhdHVyZXM7CitjbGFzcyBDdXN0
b21FbGVtZW50Q29uc3RydWN0b3I7CitjbGFzcyBDdXN0b21FbGVtZW50UmVnaXN0cnk7CiBjbGFz
cyBET01JbXBsZW1lbnRhdGlvbjsKIGNsYXNzIERPTU5hbWVkRmxvd0NvbGxlY3Rpb247CiBjbGFz
cyBET01TZWxlY3Rpb247CkBAIC0xMTY1LDYgKzExNjcsMTIgQEAgcHVibGljOgogICAgIFRleHRB
dXRvc2l6ZXIqIHRleHRBdXRvc2l6ZXIoKSB7IHJldHVybiBtX3RleHRBdXRvc2l6ZXIuZ2V0KCk7
IH0KICNlbmRpZgogCisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKyAgICBQYXNzUmVmUHRy
PEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gcmVnaXN0ZXJFbGVtZW50KFdlYkNvcmU6OlNjcmlw
dFN0YXRlKiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7CisgICAg
UGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IHJlZ2lzdGVyRWxlbWVudChXZWJD
b3JlOjpTY3JpcHRTdGF0ZSosIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgRGljdGlv
bmFyeSYgb3B0aW9ucywgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8Q3VzdG9tRWxl
bWVudFJlZ2lzdHJ5PiByZWdpc3RyeSgpIGNvbnN0OworI2VuZGlmCisKICAgICB2b2lkIGFkanVz
dEZsb2F0UXVhZHNGb3JTY3JvbGxBbmRBYnNvbHV0ZVpvb21BbmRGcmFtZVNjYWxlKFZlY3RvcjxG
bG9hdFF1YWQ+JiwgUmVuZGVyT2JqZWN0Kik7CiAgICAgdm9pZCBhZGp1c3RGbG9hdFJlY3RGb3JT
Y3JvbGxBbmRBYnNvbHV0ZVpvb21BbmRGcmFtZVNjYWxlKEZsb2F0UmVjdCYsIFJlbmRlck9iamVj
dCopOwogCkBAIC0xNTQzLDYgKzE1NTEsMTAgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8VGV4dEF1
dG9zaXplcj4gbV90ZXh0QXV0b3NpemVyOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQ1VTVE9NX0VM
RU1FTlRTKQorICAgIFJlZlB0cjxDdXN0b21FbGVtZW50UmVnaXN0cnk+IG1fcmVnaXN0cnk7Cisj
ZW5kaWYKKwogICAgIGJvb2wgbV9zY2hlZHVsZWRUYXNrc0FyZVN1c3BlbmRlZDsKICAgICAKICAg
ICBib29sIG1fdmlzdWFsVXBkYXRlc0FsbG93ZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vbWFrZV9uYW1lcy5wbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCmlu
ZGV4IDcyMzNlMzI4NGUxMTgxYmFiOWQ4YmRlNzVhMGQ0YTExNmY0NGJlZDIuLjNlMmJlMmM5YjJj
OTI2MzY2MTBlZGY2MjkyZGY0YWUyMjJkZWIxMmUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9tYWtlX25hbWVzLnBsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBs
CkBAIC0xMTcyLDggKzExNzIsOCBAQCBFTkQKIDsKICAgICB9IGVsc2lmICgkd3JhcHBlckZhY3Rv
cnlUeXBlIGVxICJWOCIpIHsKICAgICAgICAgcHJpbnQgRiA8PEVORAorI2luY2x1ZGUgIlY4SFRN
TEN1c3RvbUVsZW1lbnQuaCIKICNpbmNsdWRlICJWOCRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVt
ZW50LmgiCi0gICAgICAgIAogI2luY2x1ZGUgPHY4Lmg+CiBFTkQKIDsKQEAgLTEyNzQsNiArMTI3
NCwxMSBAQCBFTkQKICAgICByZXR1cm4gVjhTVkdFbGVtZW50OjpjcmVhdGVXcmFwcGVyKGVsZW1l
bnQsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiBFTkQKIDsKKyAgICAgICAgfSBlbHNpZiAo
JHBhcmFtZXRlcnN7bmFtZXNwYWNlfSBlcSAiSFRNTCIpIHsKKyAgICAgICAgICAgIHByaW50IEYg
PDxFTkQKKyAgICByZXR1cm4gVjhIVE1MQ3VzdG9tRWxlbWVudDo6dG9WOChlbGVtZW50LCBjcmVh
dGlvbkNvbnRleHQsIGlzb2xhdGUpOworRU5ECis7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBwcmludCBGIDw8RU5ECiAgICAgcmV0dXJuIHdyYXAodG8kcGFyYW1ldGVyc3tmYWxsYmFj
a0ludGVyZmFjZU5hbWV9KGVsZW1lbnQpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaWRsIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaWRsCmluZGV4IDI1ZjBhNWMzOTAzNTExNGI1ZGYxOTE3
YzI5NTI5MTYwYTliNDdjOTguLjdjMjlmY2I1ZGMxODkyYWFhYzcyZjUyNDAzNjNlZTJjMjRkMjNk
OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmlkbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5pZGwKQEAgLTUzLDYgKzUzLDExIEBA
CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEVsZW1lbnQgYWN0aXZlRWxlbWVudDsKICAgICBib29s
ZWFuIGhhc0ZvY3VzKCk7CiAKKyNpZiBkZWZpbmVkKEVOQUJMRV9DVVNUT01fRUxFTUVOVFMpICYm
IEVOQUJMRV9DVVNUT01fRUxFTUVOVFMKKyAgICBbVjhFbmFibGVkQXRSdW50aW1lPWN1c3RvbURP
TUVsZW1lbnRzLCBDb25kaXRpb25hbD1DVVNUT01fRUxFTUVOVFMsIEltcGxlbWVudGVkQXM9cmVn
aXN0ZXJFbGVtZW50LCBDYWxsV2l0aD1TY3JpcHRTdGF0ZV0KKyAgICBDdXN0b21FbGVtZW50Q29u
c3RydWN0b3Igd2Via2l0UmVnaXN0ZXIoaW4gRE9NU3RyaW5nIG5hbWUsIGluIFtPcHRpb25hbF0g
RGljdGlvbmFyeSBvcHRpb25zKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyNlbmRpZgorCiAgICAg
Ly8gRGVwcmVjYXRlZCBhdHRyaWJ1dGVzCiAgICAgICAgICAgICAgW1RyZWF0TnVsbEFzPU51bGxT
dHJpbmddIGF0dHJpYnV0ZSBET01TdHJpbmcgYmdDb2xvcjsKICAgICAgICAgICAgICBbVHJlYXRO
dWxsQXM9TnVsbFN0cmluZ10gYXR0cmlidXRlIERPTVN0cmluZyBmZ0NvbG9yOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9mZWF0dXJlcy5neXBpCmluZGV4IDc3YjJjNzZjNDRhMzJmYTkzMzA0Y2U0YmNkMDdl
MjEwNWZlOWM1NTguLjEyZTkwZmI5ZWI3ZmM4ZDRhMTk4YTk1OGMxNTI3NmQ3MTNmOGViNjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKQEAgLTU0LDYgKzU0LDcgQEAKICAgICAg
ICdFTkFCTEVfQ1NTX1RSQU5TRk9STVNfQU5JTUFUSU9OU19VTlBSRUZJWEVEPTAnLAogICAgICAg
J0VOQUJMRV9DU1NfVkFSSUFCTEVTPTEnLAogICAgICAgJ0VOQUJMRV9DU1NfU1RJQ0tZX1BPU0lU
SU9OPTEnLAorICAgICAgJ0VOQUJMRV9DVVNUT01fRUxFTUVOVFM9MScsCiAgICAgICAnRU5BQkxF
X0NVU1RPTV9TQ0hFTUVfSEFORExFUj0wJywKICAgICAgICdFTkFCTEVfREFTSEJPQVJEX1NVUFBP
UlQ9MCcsCiAgICAgICAnRU5BQkxFX0RBVEFfVFJBTlNGRVJfSVRFTVM9MScsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJSdW50aW1lRmVhdHVyZXMuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlJ1bnRpbWVGZWF0dXJlcy5oCmluZGV4IGUz
OTRkNzVmNGM3YTFiOWUwZDUyYzM5YmI0NjFmZWUxOGNhYjlhMjAuLmEwNTVmMDgyYjcxNWMzMzAy
YjMxZDMwZWY3ZWVmYmQwNDdmNGE1YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYlJ1bnRpbWVGZWF0dXJlcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYlJ1bnRpbWVGZWF0dXJlcy5oCkBAIC0xMjUsNiArMTI1LDkgQEAgcHVibGlj
OgogICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIHZvaWQgZW5hYmxlU2hhZG93RE9NKGJvb2wpOwog
ICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIGJvb2wgaXNTaGFkb3dET01FbmFibGVkKCk7CiAKKyAg
ICBXRUJLSVRfRVhQT1JUIHN0YXRpYyB2b2lkIGVuYWJsZUN1c3RvbURPTUVsZW1lbnRzKGJvb2wp
OworICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIGJvb2wgaXNDdXN0b21ET01FbGVtZW50c0VuYWJs
ZWQoKTsKKwogICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIHZvaWQgZW5hYmxlU3R5bGVTY29wZWQo
Ym9vbCk7CiAgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgYm9vbCBpc1N0eWxlU2NvcGVkRW5hYmxl
ZCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJSdW50aW1l
RmVhdHVyZXMuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUnVudGltZUZlYXR1
cmVzLmNwcAppbmRleCBhMTg0MzRlMjllZjEwMDJjZDMzOThkYjI1ODRmODQ3ZGQ3NDg4OTlhLi41
MWJmZGZhMGI4Mjc4YTA3M2Y0YWE2NmEzOWMyZDRkZGM0YmMzZTMxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJSdW50aW1lRmVhdHVyZXMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlJ1bnRpbWVGZWF0dXJlcy5jcHAKQEAgLTQ4MSw2ICs0
ODEsMjUgQEAgYm9vbCBXZWJSdW50aW1lRmVhdHVyZXM6OmlzU2hhZG93RE9NRW5hYmxlZCgpCiAj
ZW5kaWYKIH0KIAordm9pZCBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZUN1c3RvbURPTUVsZW1l
bnRzKGJvb2wgZW5hYmxlKQoreworI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisgICAgUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2V0Q3VzdG9tRE9NRWxlbWVudHMoZW5hYmxlKTsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKGVuYWJsZSk7CisjZW5kaWYKK30KKworYm9vbCBXZWJSdW50aW1l
RmVhdHVyZXM6OmlzQ3VzdG9tRE9NRWxlbWVudHNFbmFibGVkKCkKK3sKKyNpZiBFTkFCTEUoQ1VT
VE9NX0VMRU1FTlRTKQorICAgIHJldHVybiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpjdXN0b21E
T01FbGVtZW50c0VuYWJsZWQoKTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9
CisKKwogdm9pZCBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZVN0eWxlU2NvcGVkKGJvb2wgZW5h
YmxlKQogewogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFu
Z2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYzQ2YTdlNWQ2NTZjYzBiZGM2ZTJkYmQwNmFl
NGI2YzQzYWRkYTQyYi4uMWJhMTE4N2Q0ZTM2NmFhMGQyMWIwMjgwOGRkNjFlZGIxMGZmYzJlNSAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE1IEBACisyMDEzLTAxLTI3ICBIYWppbWUgTW9ycml0YSAgPG1vcnJpdGFAZ29vZ2xlLmNv
bT4KKworICAgICAgICBbQ3VzdG9tIEVsZW1lbnRzXSBJbXBsZW1lbnQgYmFyZS1ib25lIGRvY3Vt
ZW50LnJlZ2lzdGVyKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEwMDIyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZGVkIGVuYWJsZUN1c3RvbURPTUVsZW1lbnRzIGZsYWcuCisKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwOgorICAgICAgICAoVGVzdFNoZWxs
OjpUZXN0U2hlbGwpOgorCiAyMDEzLTAyLTE0ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBSZXF1ZXN0IFdlYkxheWVyVHJlZVZpZXcg
Zm9yIER1bXBSZW5kZXJUcmVlIHZpYSBleHBsaWNpdCB0ZXN0aW5nIHBhdGgKZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCmluZGV4IGY2ZmNiMjZjNWUzMGZlNzM2
ZmI4OWQzNWY0OGI0NjViZDUwYTJkMjEuLjJkOGYxNDIyNTc3NjExOGY2MjFjYzhjNTA4MmJhZWU4
YTI1NjA4MzQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RT
aGVsbC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNw
cApAQCAtMTQ1LDYgKzE0NSw3IEBAIFRlc3RTaGVsbDo6VGVzdFNoZWxsKCkKICAgICBXZWJSdW50
aW1lRmVhdHVyZXM6OmVuYWJsZVZpZGVvVHJhY2sodHJ1ZSk7CiAgICAgV2ViUnVudGltZUZlYXR1
cmVzOjplbmFibGVHYW1lcGFkKHRydWUpOwogICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxl
U2hhZG93RE9NKHRydWUpOworICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlQ3VzdG9tRE9N
RWxlbWVudHModHJ1ZSk7CiAgICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVTdHlsZVNjb3Bl
ZCh0cnVlKTsKICAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZVNjcmlwdGVkU3BlZWNoKHRy
dWUpOwogICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlUmVxdWVzdEF1dG9jb21wbGV0ZSh0
cnVlKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwppbmRleCBlMWY0MTI4YTJmOTBkNjI5MDIyNmYxNDcyNWM3MmEzMTU2NDJhNzg4Li5i
NTM4Y2M5NDcwZTU4NWU4NWYzZmE3MDJlYmZhNGQ0MTM0NmNmMzhmIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjEgQEAKKzIwMTMtMDItMTQgIEhhamltZSBNb3JyaXRhICA8bW9ycml0YUBnb29nbGUuY29tPgor
CisgICAgICAgIFtDdXN0b20gRWxlbWVudHNdIEltcGxlbWVudCBiYXJlLWJvbmUgZG9jdW1lbnQu
cmVnaXN0ZXIoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTAwMjI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBmYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFz
aWMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lz
dGVyLXJlZW50cmFudC1udWxsLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFudC1udWxsLWNv
bnN0cnVjdG9yLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL2N1c3RvbS9kb2N1bWVu
dC1yZWdpc3Rlci1yZWVudHJhbnQtcmV0dXJuaW5nLWZha2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVlbnRyYW50LXJl
dHVybmluZy1mYWtlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL2N1c3RvbS9kb2N1
bWVudC1yZWdpc3Rlci1yZWVudHJhbnQtdGhyb3dpbmctY29uc3RydWN0b3ItZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVl
bnRyYW50LXRocm93aW5nLWNvbnN0cnVjdG9yLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
ZG9tL2N1c3RvbS9yZXNvdXJjZXMvZG9jdW1lbnQtcmVnaXN0ZXItZnV6ei5qczogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnM6CisKIDIwMTMtMDItMjAgIFRh
a2FzaGkgVG95b3NoaW1hICA8dG95b3NoaW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2
aWV3ZWQgZ2FyZGVuaW5nLCB1cGRhdGUgVGVzdEV4cGVjdGF0aW9ucy4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1iYXNpYy1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFz
aWMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2YjYyMTk0ZDFlMzIwYWE0N2IyMDkzMjhjOTQ1
YzVjOTliYzhmYjUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0
b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNDYgQEAK
K1Rlc3RpbmcgZG9jdW1lbnQucmVnaXN0ZXIoKSBiYXNpYyBiZWhhdmlvcnMuCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGRvY3VtZW50LnJlZ2lzdGVyKCdmb28nLCBjcmVh
dGVSZWdpc3RlclBhcmFtdGVycygpKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IEludmFsaWRDaGFy
YWN0ZXJFcnJvcjogRE9NIEV4Y2VwdGlvbiA1LgorUEFTUyBkb2N1bWVudC5yZWdpc3RlcigneGZv
bycsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSW52
YWxpZENoYXJhY3RlckVycm9yOiBET00gRXhjZXB0aW9uIDUuCitQQVNTIGRvY3VtZW50LnJlZ2lz
dGVyKCdtaXNzaW5nLWdseXBoJywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSkgdGhyZXcgZXhj
ZXB0aW9uIEVycm9yOiBJbnZhbGlkQ2hhcmFjdGVyRXJyb3I6IERPTSBFeGNlcHRpb24gNS4KK1BB
U1MgdHlwZW9mIGZvb0NvbnN0cnVjdG9yIGlzICdmdW5jdGlvbicKK1BBU1MgZm9vQ29uc3RydWN0
b3IucHJvdG90eXBlLl9fcHJvdG9fXyBpcyBIVE1MRWxlbWVudC5wcm90b3R5cGUKK1BBU1MgZm9v
Q29uc3RydWN0b3IucHJvdG90eXBlLnRoaXNJc1Byb3RvdHlwZSBpcyB0cnVlCitQQVNTIGRvY3Vt
ZW50LnJlZ2lzdGVyKCd4LWZvbycsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpIHRocmV3IGV4
Y2VwdGlvbiBFcnJvcjogSW52YWxpZFN0YXRlRXJyb3I6IERPTSBFeGNlcHRpb24gMTEuCitQQVNT
IGRvY3VtZW50LnJlZ2lzdGVyKCdYLUZPTycsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpIHRo
cmV3IGV4Y2VwdGlvbiBFcnJvcjogSW52YWxpZFN0YXRlRXJyb3I6IERPTSBFeGNlcHRpb24gMTEu
CitQQVNTIGRvY3VtZW50LnJlZ2lzdGVyKCd4LWJhZC1hJywgeyBwcm90b3R5cGU6IEhUTUxFbGVt
ZW50LnByb3RvdHlwZSB9KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IEludmFsaWRTdGF0ZUVycm9y
OiBET00gRXhjZXB0aW9uIDExLgorUEFTUyBkb2N1bWVudC5yZWdpc3RlcigneC1iYWQtYicsIHsg
cHJvdG90eXBlOiB7fSB9KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IEludmFsaWRTdGF0ZUVycm9y
OiBET00gRXhjZXB0aW9uIDExLgorUEFTUyBkb2N1bWVudC5yZWdpc3RlcigneC1iYWQtYycsIHsg
cHJvdG90eXBlOiBPYmplY3QuY3JlYXRlKERvY3VtZW50LnByb3RvdHlwZSkgfSkgdGhyZXcgZXhj
ZXB0aW9uIEVycm9yOiBJbnZhbGlkU3RhdGVFcnJvcjogRE9NIEV4Y2VwdGlvbiAxMS4KK1BBU1Mg
ZG9jdW1lbnQucmVnaXN0ZXIoJ3gtYmFkLWQnLCB7IHByb3RvdHlwZTogT2JqZWN0LmNyZWF0ZShI
VE1MU3BhbkVsZW1lbnQucHJvdG90eXBlKSB9KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IEludmFs
aWRTdGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDExLgorUEFTUyBmb29Db25zdHJ1Y3RvcigpIHRo
cmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJl
IGNhbGxlZCBhcyBhIGZ1bmN0aW9uLi4KK1BBU1MgY3JlYXRlZEZvby5fX3Byb3RvX18gaXMgZm9v
Q29uc3RydWN0b3IucHJvdG90eXBlCitQQVNTIGNyZWF0ZWRGb28uY29uc3RydWN0b3IgaXMgZm9v
Q29uc3RydWN0b3IKK1BBU1MgY3JlYXRlZEZvby50YWdOYW1lIGlzICdYLUZPTycKK1BBU1MgY3Jl
YXRlZEZvby50ZXh0Q29udGVudCBpcyAnSGVsbG8nCitQQVNTIGNyZWF0ZWRGb28ubGFzdENoaWxk
IGlzIGNoaWxkRGl2CitQQVNTIHBhcnNlZEZvby5fX3Byb3RvX18gaXMgZm9vQ29uc3RydWN0b3Iu
cHJvdG90eXBlCitQQVNTIHBhcnNlZEZvby50YWdOYW1lIGlzICdYLUZPTycKK1BBU1MgcGFyc2Vk
Rm9vLnNvbWVQcm9wZXJ0eSBpcyBjb250YWluZXIuZmlyc3RDaGlsZC5zb21lUHJvcGVydHkKK1BB
U1MgY3JlYXRlZEJhci50YWdOYW1lIGlzICdYLUJBUicKK1BBU1MgY3JlYXRlZEJhei50YWdOYW1l
IGlzICdYLUJBWicKK1BBU1MgY3JlYXRlZEJhei50aGlzSXNQcm90b3R5cGUgaXMgdHJ1ZQorUEFT
UyBjcmVhdGVkQmF6LnRoaXNJc0Fsc29Qcm90b3R5cGUgaXMgdHJ1ZQorUEFTUyBjcmVhdGVkVXBw
ZXJCYXIuY29uc3RydWN0b3IgaXMgYmFyQ29uc3RydWN0b3IKK1BBU1MgY3JlYXRlZFVwcGVyQmFy
LnRhZ05hbWUgaXMgJ1gtQkFSJworUEFTUyBjcmVhdGVkTWl4ZWRCYXIuY29uc3RydWN0b3IgaXMg
YmFyQ29uc3RydWN0b3IKK1BBU1MgY3JlYXRlZE1peGVkQmFyLnRhZ05hbWUgaXMgJ1gtQkFSJwor
UEFTUyBjb250YWluZXIuZmlyc3RDaGlsZC5jb25zdHJ1Y3RvciBpcyBiYXJDb25zdHJ1Y3Rvcgor
UEFTUyBjb250YWluZXIuZmlyc3RDaGlsZC50YWdOYW1lIGlzICdYLUJBUicKK1BBU1MgY29udGFp
bmVyLmxhc3RDaGlsZC5jb25zdHJ1Y3RvciBpcyBiYXJDb25zdHJ1Y3RvcgorUEFTUyBjb250YWlu
ZXIubGFzdENoaWxkLnRhZ05hbWUgaXMgJ1gtQkFSJworUEFTUyAobmV3IChkb2N1bWVudC5yZWdp
c3RlcigneS1iYXInLCBjcmVhdGVSZWdpc3RlclBhcmFtdGVycygpKSkoKSkudGFnTmFtZSBpcyAn
WS1CQVInCitQQVNTIChuZXcgKGRvY3VtZW50LnJlZ2lzdGVyKCd5ei1iYXInLCBjcmVhdGVSZWdp
c3RlclBhcmFtdGVycygpKSkoKSkudGFnTmFtZSBpcyAnWVotQkFSJworUEFTUyAobmV3IChkb2N1
bWVudC5yZWdpc3RlcigneS16LWJhcicsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpKSgpKS50
YWdOYW1lIGlzICdZLVotQkFSJworUEFTUyAobmV3IChkb2N1bWVudC5yZWdpc3RlcigneS0tYmFy
JywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSkpKCkpLnRhZ05hbWUgaXMgJ1ktLUJBUicKK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1iYXNp
Yy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjEwNTc3OGMyYzEzMmRlMGQxNmE0OTUxOTQ0ZTcxMDc4Nzg2OGUy
ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1l
bnQtcmVnaXN0ZXItYmFzaWMuaHRtbApAQCAtMCwwICsxLDExMyBAQAorPCFET0NUWVBFIGh0bWw+
Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImNvbnRhaW5lciI+
PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3RpbmcgZG9jdW1lbnQucmVnaXN0ZXIo
KSBiYXNpYyBiZWhhdmlvcnMuIik7CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0
UnVubmVyLmR1bXBBc1RleHQoKTsKK2RvY3VtZW50LnJlZ2lzdGVyID0gZG9jdW1lbnQucmVnaXN0
ZXIgfHwgZG9jdW1lbnQud2Via2l0UmVnaXN0ZXI7CisKK2Z1bmN0aW9uIGNyZWF0ZVJlZ2lzdGVy
UGFyYW10ZXJzKCkKK3sKKyAgICByZXR1cm4geworICAgICAgICBwcm90b3R5cGU6IE9iamVjdC5j
cmVhdGUoSFRNTEVsZW1lbnQucHJvdG90eXBlLCB7IHRoaXNJc1Byb3RvdHlwZTogeyB2YWx1ZTog
dHJ1ZSB9IH0pCisgICAgfTsKK30KKworLy8gSW52YWxpZCBuYW1lcworc2hvdWxkVGhyb3coImRv
Y3VtZW50LnJlZ2lzdGVyKCdmb28nLCBjcmVhdGVSZWdpc3RlclBhcmFtdGVycygpKSIsICInRXJy
b3I6IEludmFsaWRDaGFyYWN0ZXJFcnJvcjogRE9NIEV4Y2VwdGlvbiA1JyIpOworc2hvdWxkVGhy
b3coImRvY3VtZW50LnJlZ2lzdGVyKCd4Zm9vJywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSki
LCAiJ0Vycm9yOiBJbnZhbGlkQ2hhcmFjdGVyRXJyb3I6IERPTSBFeGNlcHRpb24gNSciKTsKK3No
b3VsZFRocm93KCJkb2N1bWVudC5yZWdpc3RlcignbWlzc2luZy1nbHlwaCcsIGNyZWF0ZVJlZ2lz
dGVyUGFyYW10ZXJzKCkpIiwgIidFcnJvcjogSW52YWxpZENoYXJhY3RlckVycm9yOiBET00gRXhj
ZXB0aW9uIDUnIik7CisKK3ZhciBmb29Db25zdHJ1Y3RvciA9IGRvY3VtZW50LnJlZ2lzdGVyKCJ4
LWZvbyIsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpOworc2hvdWxkQmUoInR5cGVvZiBmb29D
b25zdHJ1Y3RvciIsICInZnVuY3Rpb24nIik7CitzaG91bGRCZSgiZm9vQ29uc3RydWN0b3IucHJv
dG90eXBlLl9fcHJvdG9fXyIsICJIVE1MRWxlbWVudC5wcm90b3R5cGUiKTsKK3Nob3VsZEJlVHJ1
ZSgiZm9vQ29uc3RydWN0b3IucHJvdG90eXBlLnRoaXNJc1Byb3RvdHlwZSIpOworCisvLyBOYW1l
IGNvbmZsaWN0cworc2hvdWxkVGhyb3coImRvY3VtZW50LnJlZ2lzdGVyKCd4LWZvbycsIGNyZWF0
ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpIiwgIidFcnJvcjogSW52YWxpZFN0YXRlRXJyb3I6IERPTSBF
eGNlcHRpb24gMTEnIik7CitzaG91bGRUaHJvdygiZG9jdW1lbnQucmVnaXN0ZXIoJ1gtRk9PJywg
Y3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSkiLCAiJ0Vycm9yOiBJbnZhbGlkU3RhdGVFcnJvcjog
RE9NIEV4Y2VwdGlvbiAxMSciKTsKKworLy8gQmFkIHByb3RvdHlwZTogY29uc3RydWN0b3IgcHJv
cGVydHkgZXhpc3RzCitzaG91bGRUaHJvdygiZG9jdW1lbnQucmVnaXN0ZXIoJ3gtYmFkLWEnLCB7
IHByb3RvdHlwZTogSFRNTEVsZW1lbnQucHJvdG90eXBlIH0pIiwgIidFcnJvcjogSW52YWxpZFN0
YXRlRXJyb3I6IERPTSBFeGNlcHRpb24gMTEnIik7CisvLyBCYWQgcHJvdG90eXBlOiBtaXNzaW5n
IF9fcHJvdG9fXworc2hvdWxkVGhyb3coImRvY3VtZW50LnJlZ2lzdGVyKCd4LWJhZC1iJywgeyBw
cm90b3R5cGU6IHt9IH0pIiwgIidFcnJvcjogSW52YWxpZFN0YXRlRXJyb3I6IERPTSBFeGNlcHRp
b24gMTEnIik7CisvLyBCYWQgcHJvdG90eXBlOiB3cm9uZyBfX3Byb3RvX18KK3Nob3VsZFRocm93
KCJkb2N1bWVudC5yZWdpc3RlcigneC1iYWQtYycsIHsgcHJvdG90eXBlOiBPYmplY3QuY3JlYXRl
KERvY3VtZW50LnByb3RvdHlwZSkgfSkiLCAiJ0Vycm9yOiBJbnZhbGlkU3RhdGVFcnJvcjogRE9N
IEV4Y2VwdGlvbiAxMSciKTsKKy8vIEJ1ZyAxMTA0MzYgLSBFbGVtZW50cyBvdGhlciB0aGFuIEhU
TUxFbWVtZW50IHNob3VsZCBiZSBhbGxvd2VkIGFzIGEgc3VwZXJjbGFzcy4KK3Nob3VsZFRocm93
KCJkb2N1bWVudC5yZWdpc3RlcigneC1iYWQtZCcsIHsgcHJvdG90eXBlOiBPYmplY3QuY3JlYXRl
KEhUTUxTcGFuRWxlbWVudC5wcm90b3R5cGUpIH0pIiwgIidFcnJvcjogSW52YWxpZFN0YXRlRXJy
b3I6IERPTSBFeGNlcHRpb24gMTEnIik7CisvLyBDYWxsIGFzIGZ1bmN0aW9uCitzaG91bGRUaHJv
dygiZm9vQ29uc3RydWN0b3IoKSIsICInVHlwZUVycm9yOiBET00gb2JqZWN0IGNvbnN0cnVjdG9y
IGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4nIikKKworLy8gQ29uc3RydWN0b3IgaW5p
dGlhdGVkIGluc3RhbnRpYXRpb24KK3ZhciBjcmVhdGVkRm9vID0gbmV3IGZvb0NvbnN0cnVjdG9y
KCk7CisKKy8vIEpTIGJ1aWx0LWluIHByb3BlcnRpZXMKK3Nob3VsZEJlKCJjcmVhdGVkRm9vLl9f
cHJvdG9fXyIsICJmb29Db25zdHJ1Y3Rvci5wcm90b3R5cGUiKTsKK3Nob3VsZEJlKCJjcmVhdGVk
Rm9vLmNvbnN0cnVjdG9yIiwgImZvb0NvbnN0cnVjdG9yIik7CisKKy8vIE5hdGl2ZSBnZXR0ZXIK
K3Nob3VsZEJlKCJjcmVhdGVkRm9vLnRhZ05hbWUiLCAiJ1gtRk9PJyIpOworCisvLyBOYXRpdmUg
c2V0dGVyCitjcmVhdGVkRm9vLmlubmVySFRNTCA9ICJIZWxsbyI7CitzaG91bGRCZSgiY3JlYXRl
ZEZvby50ZXh0Q29udGVudCIsICInSGVsbG8nIik7CisKKy8vIE5hdGl2ZSBtZXRob2QKK3ZhciBj
aGlsZERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworY3JlYXRlZEZvby5hcHBl
bmRDaGlsZChjaGlsZERpdik7CitzaG91bGRCZSgiY3JlYXRlZEZvby5sYXN0Q2hpbGQiLCAiY2hp
bGREaXYiKTsKKworLy8gUGFyc2VyIGluaXRpYXRlZCBpbnN0YW50aWF0aW9uCit2YXIgY29udGFp
bmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRhaW5lciIpOworY29udGFpbmVyLmlu
bmVySFRNTCA9ICI8eC1mb28+PC94LWZvbz4iOworcGFyc2VkRm9vID0gY29udGFpbmVyLmZpcnN0
Q2hpbGQ7CisKK3Nob3VsZEJlKCJwYXJzZWRGb28uX19wcm90b19fIiwgImZvb0NvbnN0cnVjdG9y
LnByb3RvdHlwZSIpOworc2hvdWxkQmUoInBhcnNlZEZvby50YWdOYW1lIiwgIidYLUZPTyciKTsK
KworLy8gRW5zdXJpbmcgdGhlIHdyYXBwZXIgaXMgcmV0YWluZWQKK3BhcnNlZEZvby5zb21lUHJv
cGVydHkgPSAiaGVsbG8iOworc2hvdWxkQmUoInBhcnNlZEZvby5zb21lUHJvcGVydHkiLCAiY29u
dGFpbmVyLmZpcnN0Q2hpbGQuc29tZVByb3BlcnR5Iik7CisKKy8vIEhhdmluZyBhbm90aGVyIGNv
bnN0cnVjdG9yCit2YXIgYmFyQ29uc3RydWN0b3IgPSBkb2N1bWVudC5yZWdpc3RlcigieC1iYXIi
LCBjcmVhdGVSZWdpc3RlclBhcmFtdGVycygpKTsKK3ZhciBjcmVhdGVkQmFyID0gbmV3IGJhckNv
bnN0cnVjdG9yKCk7CitzaG91bGRCZSgiY3JlYXRlZEJhci50YWdOYW1lIiwgIidYLUJBUiciKTsK
KworLy8gSGF2aW5nIGEgc3ViY2xhc3MKK3ZhciBiYXpDb25zdHJ1Y3RvciA9IGRvY3VtZW50LnJl
Z2lzdGVyKCJ4LWJheiIsIHsgcHJvdG90eXBlOiBPYmplY3QuY3JlYXRlKGZvb0NvbnN0cnVjdG9y
LnByb3RvdHlwZSwgeyB0aGlzSXNBbHNvUHJvdG90eXBlOiB7IHZhbHVlOiB0cnVlIH0gfSkgfSk7
Cit2YXIgY3JlYXRlZEJheiA9IG5ldyBiYXpDb25zdHJ1Y3RvcigpOworc2hvdWxkQmUoImNyZWF0
ZWRCYXoudGFnTmFtZSIsICInWC1CQVonIik7CitzaG91bGRCZVRydWUoImNyZWF0ZWRCYXoudGhp
c0lzUHJvdG90eXBlIik7CitzaG91bGRCZVRydWUoImNyZWF0ZWRCYXoudGhpc0lzQWxzb1Byb3Rv
dHlwZSIpOworCisvLyBXaXRoIGlycmVndWxhciBjYXNlcwordmFyIGNyZWF0ZWRVcHBlckJhciA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlgtQkFSIik7Cit2YXIgY3JlYXRlZE1peGVkQmFyID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiWC1CYXIiKTsKK3Nob3VsZEJlKCJjcmVhdGVkVXBwZXJC
YXIuY29uc3RydWN0b3IiLCAiYmFyQ29uc3RydWN0b3IiKTsKK3Nob3VsZEJlKCJjcmVhdGVkVXBw
ZXJCYXIudGFnTmFtZSIsICInWC1CQVInIik7CitzaG91bGRCZSgiY3JlYXRlZE1peGVkQmFyLmNv
bnN0cnVjdG9yIiwgImJhckNvbnN0cnVjdG9yIik7CitzaG91bGRCZSgiY3JlYXRlZE1peGVkQmFy
LnRhZ05hbWUiLCAiJ1gtQkFSJyIpOworCitjb250YWluZXIuaW5uZXJIVE1MID0gIjxYLUJBUj48
L1gtQkFSPjxYLUJhcj48L1gtQmFyPiI7CitzaG91bGRCZSgiY29udGFpbmVyLmZpcnN0Q2hpbGQu
Y29uc3RydWN0b3IiLCAiYmFyQ29uc3RydWN0b3IiKTsKK3Nob3VsZEJlKCJjb250YWluZXIuZmly
c3RDaGlsZC50YWdOYW1lIiwgIidYLUJBUiciKTsKK3Nob3VsZEJlKCJjb250YWluZXIubGFzdENo
aWxkLmNvbnN0cnVjdG9yIiwgImJhckNvbnN0cnVjdG9yIik7CitzaG91bGRCZSgiY29udGFpbmVy
Lmxhc3RDaGlsZC50YWdOYW1lIiwgIidYLUJBUiciKTsKKworLy8gU3RyYW5nZSBidXQgdmFsaWQg
bmFtZXMKK3Nob3VsZEJlKCIobmV3IChkb2N1bWVudC5yZWdpc3RlcigneS1iYXInLCBjcmVhdGVS
ZWdpc3RlclBhcmFtdGVycygpKSkoKSkudGFnTmFtZSIsICInWS1CQVInIik7CitzaG91bGRCZSgi
KG5ldyAoZG9jdW1lbnQucmVnaXN0ZXIoJ3l6LWJhcicsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJz
KCkpKSgpKS50YWdOYW1lIiwgIidZWi1CQVInIik7CitzaG91bGRCZSgiKG5ldyAoZG9jdW1lbnQu
cmVnaXN0ZXIoJ3ktei1iYXInLCBjcmVhdGVSZWdpc3RlclBhcmFtdGVycygpKSkoKSkudGFnTmFt
ZSIsICInWS1aLUJBUiciKTsKK3Nob3VsZEJlKCIobmV3IChkb2N1bWVudC5yZWdpc3RlcigneS0t
YmFyJywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSkpKCkpLnRhZ05hbWUiLCAiJ1ktLUJBUici
KTsKKworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVlbnRyYW50LW51bGwtY29u
c3RydWN0b3ItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3Vt
ZW50LXJlZ2lzdGVyLXJlZW50cmFudC1udWxsLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hNjViNTk4ZTM1YTM3Y2I5OWI0NDY0NTEzZWNlNDBlNjI2Y2UzZjc5Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVy
LXJlZW50cmFudC1udWxsLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDkgQEAK
K0Z1enppbmcgZG9jdW1lbnQucmVnaXN0ZXIoKSB0aHJvdWdoIGdldHRlcnMuIFBBU1MgdWxlc3Mg
Y3Jhc2guCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFudC1udWxsLWNvbnN0
cnVjdG9yLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0
ZXItcmVlbnRyYW50LW51bGwtY29uc3RydWN0b3IuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MDhhMDBiNjcx
MTdhZTViMjg4Njk1YjcyMDNmMTcwMDZhY2RkYzE2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFudC1udWxsLWNv
bnN0cnVjdG9yLmh0bWwKQEAgLTAsMCArMSwyMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi9yZXNvdXJjZXMvZG9jdW1lbnQtcmVnaXN0ZXItZnV6
ei5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImNvbnRhaW5lciI+PC9k
aXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIkZ1enppbmcgZG9jdW1lbnQucmVnaXN0ZXIoKSB0
aHJvdWdoIGdldHRlcnMuIFBBU1MgdWxlc3MgY3Jhc2guIik7CisKK3NldHVwT2JqZWN0SG9va3Mo
eworICAgIHByb3RvdHlwZUdldDogZnVuY3Rpb24oKSB7IH0sCisgICAgcHJvdG90eXBlU2V0OiBm
dW5jdGlvbih2YWx1ZSkgeyB9LAorICAgIGNvbnN0cnVjdG9yR2V0OiBmdW5jdGlvbigpIHsgfSwK
KyAgICBjb25zdHJ1Y3RvclNldDogZnVuY3Rpb24odmFsdWUpIHsgfQorfSk7CisKK2V4ZXJjaXNl
RG9jdW1lbnRSZWdpc3RlcigpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVz
b3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVl
bnRyYW50LXJldHVybmluZy1mYWtlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1yZWVudHJhbnQtcmV0dXJuaW5nLWZha2UtZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmE2NWI1OThlMzVhMzdjYjk5YjQ0NjQ1MTNlY2U0MGU2MjZjZTNm
NzkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1l
bnQtcmVnaXN0ZXItcmVlbnRyYW50LXJldHVybmluZy1mYWtlLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDkgQEAKK0Z1enppbmcgZG9jdW1lbnQucmVnaXN0ZXIoKSB0aHJvdWdoIGdldHRlcnMuIFBB
U1MgdWxlc3MgY3Jhc2guCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFudC1y
ZXR1cm5pbmctZmFrZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50
LXJlZ2lzdGVyLXJlZW50cmFudC1yZXR1cm5pbmctZmFrZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU3ZTkw
ZmI3NmUzOGQ3YzU0MTZiYmE2N2Y1YTc1Mjk1YmIzOGRmZGIKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVlbnRyYW50LXJl
dHVybmluZy1mYWtlLmh0bWwKQEAgLTAsMCArMSwyNiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi9yZXNvdXJjZXMvZG9jdW1lbnQtcmVnaXN0ZXIt
ZnV6ei5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImNvbnRhaW5lciI+
PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIkZ1enppbmcgZG9jdW1lbnQucmVnaXN0ZXIo
KSB0aHJvdWdoIGdldHRlcnMuIFBBU1MgdWxlc3MgY3Jhc2guIik7CisKK3ZhciBiYWRQcm90b3R5
cGUgPSBJbWFnZS5wcm90b3R5cGU7Cit2YXIgYmFkQ29uc3RydWN0b3IgPSBJbWFnZS5wcm90b3R5
cGUuY29uc3RydWN0b3I7CisKK3NldHVwT2JqZWN0SG9va3MoeworICAgIHByb3RvdHlwZUdldDog
ZnVuY3Rpb24oKSB7IHJldHVybiBiYWRQcm90b3R5cGU7IH0sCisgICAgcHJvdG90eXBlU2V0OiBm
dW5jdGlvbih2YWx1ZSkgeyAgfSwKKyAgICBjb25zdHJ1Y3RvckdldDogZnVuY3Rpb24oKSB7IHJl
dHVybiBiYWRDb25zdHJ1Y3RvcjsgfSwKKyAgICBjb25zdHJ1Y3RvclNldDogZnVuY3Rpb24odmFs
dWUpIHsgIH0KK30pOworCitleGVyY2lzZURvY3VtZW50UmVnaXN0ZXIoKTsKKzwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3Vz
dG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFudC10aHJvd2luZy1jb25zdHJ1Y3Rvci1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXIt
cmVlbnRyYW50LXRocm93aW5nLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
MWZjOTI5NDE0ODZhNDdiYWY3ZGM3ZGY3ZmI1MGNjNTMzODdiMThkCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFu
dC10aHJvd2luZy1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMCBAQAorRnV6
emluZyBkb2N1bWVudC5yZWdpc3RlcigpIHRocm91Z2ggZ2V0dGVycy4gUEFTUyB1bGVzcyBjcmFz
aC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK0NvbnN0cnVjdG9yIG9iamVjdCBp
c24ndCBjcmVhdGVkLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVu
dC1yZWdpc3Rlci1yZWVudHJhbnQtdGhyb3dpbmctY29uc3RydWN0b3IuaHRtbCBiL0xheW91dFRl
c3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1yZWVudHJhbnQtdGhyb3dpbmct
Y29uc3RydWN0b3IuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYmMyOTBlZDcxMzFiYTY4N2Q5NjAzY2Y5MmNj
ZjM5MDA0NmFmYjFiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3Vz
dG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFudC10aHJvd2luZy1jb25zdHJ1Y3Rvci5odG1s
CkBAIC0wLDAgKzEsMjMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4vcmVzb3VyY2VzL2RvY3VtZW50LXJlZ2lzdGVyLWZ1enouanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJjb250YWluZXIiPjwvZGl2PgorPHNjcmlwdD4K
K2Rlc2NyaXB0aW9uKCJGdXp6aW5nIGRvY3VtZW50LnJlZ2lzdGVyKCkgdGhyb3VnaCBnZXR0ZXJz
LiBQQVNTIHVsZXNzIGNyYXNoLiIpOworCitzZXR1cE9iamVjdEhvb2tzKHsKKyAgICBwcm90b3R5
cGVHZXQ6IGZ1bmN0aW9uKCkgeyB0aHJvdyAiRXJyb3IiOyB9LAorICAgIHByb3RvdHlwZVNldDog
ZnVuY3Rpb24odmFsdWUpIHsgdGhyb3cgIkVycm9yIjsgfSwKKyAgICBjb25zdHJ1Y3RvckdldDog
ZnVuY3Rpb24oKSB7IHRocm93ICJFcnJvciI7IH0sCisgICAgY29uc3RydWN0b3JTZXQ6IGZ1bmN0
aW9uKHZhbHVlKSB7IHRocm93ICJFcnJvciI7IH0KK30pOworCitleGVyY2lzZURvY3VtZW50UmVn
aXN0ZXIoKTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL3Jlc291cmNlcy9kb2N1bWVudC1yZWdpc3Rlci1mdXp6
LmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL3Jlc291cmNlcy9kb2N1bWVudC1yZWdp
c3Rlci1mdXp6LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAzYmJmZGFiYmM4MTViMDNiMjg5NzM5MmUyNzA3NDE3
M2FkODcxNTYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20v
cmVzb3VyY2VzL2RvY3VtZW50LXJlZ2lzdGVyLWZ1enouanMKQEAgLTAsMCArMSw0OCBAQAorCitm
dW5jdGlvbiBzZXR1cE9iamVjdEhvb2tzKGhvb2tzKQoreworICAgIC8vIFdyYXBwZXIgZm9yIHRo
ZXNlIG9iamVjdCBzaG91bGQgYmUgbWF0ZXJpYWxpemVkIGJlZm9yZSBzZXR0aW5nIGhvb2tzLgor
ICAgIGNvbnNvbGUubG9nOworICAgIGRvY3VtZW50LndlYmtpdFJlZ2lzdGVyCisgICAgSFRNTFNw
YW5FbGVtZW50LnByb3RvdHlwZTsKKworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3Qu
cHJvdG90eXBlLCAicHJvdG90eXBlIiwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1
cm4gaG9va3MucHJvdG90eXBlR2V0KCk7IH0sCisgICAgICAgIHNldDogZnVuY3Rpb24odmFsdWUp
IHsgcmV0dXJuIGhvb2tzLnByb3RvdHlwZVNldCh2YWx1ZSk7IH0KKyAgICB9KTsKKworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QucHJvdG90eXBlLCAiY29uc3RydWN0b3IiLCB7Cisg
ICAgICAgIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBob29rcy5jb25zdHJ1Y3RvckdldCgpOyB9
LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiBob29rcy5jb25zdHJ1Y3Rv
clNldCh2YWx1ZSk7IH0KKyAgICB9KTsKKworICAgIHJldHVybiBob29rczsKK30KKworZnVuY3Rp
b24gZXhlcmNpc2VEb2N1bWVudFJlZ2lzdGVyKCkKK3sKKyAgICB2YXIgbXlQcm90b3R5cGUgPSBP
YmplY3QuY3JlYXRlKEhUTUxTcGFuRWxlbWVudC5wcm90b3R5cGUpOworICAgIHRyeSB7CisgICAg
ICAgIGNvbnN0cnVjdG9yID0gZG9jdW1lbnQud2Via2l0UmVnaXN0ZXIoIngtZG8tbm90aGluZyIs
IHsgcHJvdG90eXBlOiBteVByb3RvdHlwZSB9KTsKKyAgICB9IGNhdGNoIChlKSB7IH0KKworICAg
IHRyeSB7CisgICAgICAgIGlmICghY29uc3RydWN0b3IpIHsKKyAgICAgICAgICAgIGRlYnVnKCJD
b25zdHJ1Y3RvciBvYmplY3QgaXNuJ3QgY3JlYXRlZC4iKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25zdHJ1Y3Rvci5wcm90b3R5cGUgIT0gbXlQcm90
b3R5cGUpIHsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCJGQUlMOiBiYWQgcHJvdG90eXBlIik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICB9CisKKyAgICAgICAgdmFyIGVsZW1lbnQg
PSBuZXcgY29uc3RydWN0b3IoKTsKKyAgICAgICAgaWYgKCFlbGVtZW50KQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBpZiAoZWxlbWVudC5jb25zdHJ1Y3RvciAhPSBjb25zdHJ1Y3Rvcikg
eworICAgICAgICAgICAgY29uc29sZS5sb2coIkZBSUw6IGJhZCBjb25zdHJ1Y3RvciIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgfQorICAgIH0gY2F0Y2ggKGUpIHsgY29uc29sZS5s
b2coZSk7IH0KK30KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhw
ZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKaW5k
ZXggMjI2NmRmMjYwMzNlZTRmM2UzNDA2ZDA5ZTk4YTUxNGQ5Nzg5N2RkNy4uMjY4MjJlNGE1ZGFi
NDcyYjg0OTkwOGJlMTc2NGExZGNiYzMzOTFmMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTExMTgsNiArMTExOCw5IEBAIHdlYmtpdC5vcmcvYi83NjQ4
OSBjb21wb3NpdGluZy93ZWJnbC93ZWJnbC1yZWZsZWN0aW9uLmh0bWwgWyBJbWFnZU9ubHlGYWls
dXJlIF0KIHdlYmtpdC5vcmcvYi83NjQzOSBbIERlYnVnIF0gZmFzdC9kb20vc2hhZG93L2NvbnRl
bnQtZWxlbWVudC1hcGkuaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzc2NDM5IFsgRGVi
dWcgXSBmYXN0L2RvbS9zaGFkb3cvY29udGVudC1lbGVtZW50LW91dHNpZGUtc2hhZG93Lmh0bWwg
WyBGYWlsdXJlIF0KIAorIyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKSBpcyBkaXNhYmxlZC4KK2Zh
c3QvZG9tL2N1c3RvbQorCiAjIENTUyBWYXJpYWJsZXMgYXJlIG5vdCB5ZXQgZW5hYmxlZC4KIHdl
YmtpdC5vcmcvYi84NTU4MCBmYXN0L2Nzcy92YXJpYWJsZXMKIHdlYmtpdC5vcmcvYi84NTU4MCBp
bnNwZWN0b3Ivc3R5bGVzL3ZhcmlhYmxlcwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189666</attachid>
            <date>2013-02-21 20:16:10 -0800</date>
            <delta_ts>2013-02-22 00:25:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100229-20130222131230.patch</filename>
            <type>text/plain</type>
            <size>94511</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzNTU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzhlMTE2ZGNlN2YxMzQ5
YjVkYzA1MzBjNzFiYjMxZGFlNWMzYTZkOS4uZTMxYjllOTlhMzg0NWY3MjIzOGRjMTg0YjkwYTg1
MmIyY2I4YzdkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MCBAQAorMjAxMy0wMi0yMSAgSGFq
aW1lIE1vcnJpdGEgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgW0N1c3RvbSBFbGVt
ZW50c10gSW1wbGVtZW50IGJhcmUtYm9uZSBkb2N1bWVudC5yZWdpc3RlcigpCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDAyMjkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNoYW5nZSBpbXBsZW1l
bnRzIGEgcHJlZml4ZWQgdmVyc2lvbiBvZiBkb2N1bWVudC5yZWdpc3RlcigpLCB3aXRoIG1pbmlt
YWwgZmVhdHVyZSBzdXBwb3J0LgorICAgICAgICAtIFRoZSBmZWF0dXJlIGlzIGd1YXJkZWQgYnkg
RU5BQkxFKENVU1RPTV9FTEVNRU5UUykgYW5kIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmN1c3Rv
bURPTUVsZW1lbnRzRW5hYmxlZCgpLgorICAgICAgICAtIFRoaXMgYmFyZS1ib25lIHZlcnNpb24g
b25seSByZWNvZ25pemVzICJuYW1lIiBhbmQgInByb3RvdHlwZSIgcGFyYW1ldGVycy4gSXQgZG9l
c24ndCBzdXBwb3J0IGRlZmF1bHQgdmFsdWUgb2YgInByb3RvdHlwZSIgcGFyYW1ldGVyLgorICAg
ICAgICAtIEN1cnJlbnRseSBvbmx5IFY4IGlzIHN1cHBvcnRlZC4gSlNDIGJpbmRpbmcgbmVlZHMg
aXRzIG93biBiaW5kaW5nIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgID0gTWFqb3IgbmV3IGNs
YXNzZXMgdW5kZXIgZG9tLzoKKworICAgICAgICBUaGUgZG9tIG1vZHVsZSBnZXRzIHR3byBuZXcg
Y2xhc3NlczoKKyAgICAgICAgLSBDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6IEEgcmV0dXJuIHZh
bHVlIG9mIGRvY3VtZW50LnJlZ2lzdGVyKCkKKyAgICAgICAgICB3aGljaCBob2xkcyB0aGUgY3Vz
dG9tIGVsZW1lbnQgZGVmaW5pdGlvbi4KKyAgICAgICAgLSBDdXN0b21FbGVtZW50UmVnaXN0cnk6
IEEgY29sbGVjdGlvbiBvZiBDdXN0b21FbGVtZW50Q29uc3RydWN0b3Igb2JqZWN0cy4KKyAgICAg
ICAgICBDdXN0b21FbGVtZW50UmVnaXN0cnkgaW5zdGFuY2UgaXMgY3JlYXRlZCBwZXIgRG9jdW1l
bnQgYW5kIGlzIG93bmVkIGJ5IHRoZSBEb2N1bWVudC4KKworICAgICAgICBDdXN0b21FbGVtZW50
Q29uc3RydWN0b3Iga25vd3MgdGhlIGRlZmluaXRpb24gb2YgZWFjaCBjdXN0b20KKyAgICAgICAg
ZWxlbWVudCwgd2hpY2ggaXMgcmVnaXN0ZXJlZCBieSBkb2N1bWVudC5yZWdpc3RlcigpLiBUaGUg
bmFtZSBhbmQKKyAgICAgICAgb3RoZXIgb3B0aW9ucyBhcmUgaGVsZCBieSB0aGlzIG9iamVjdC4g
Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5IG93bnMgYSBzZXQKKyAgICAgICAgb2YgdGhlIHJlZ2lzdGVy
ZWQgY29uc3RydWN0b3JzLiBUaGUgcmVnaXN0cnkgZ3VhcmFudGVlcyBpbnZhcmlhbnRzCisgICAg
ICAgIGxpa2UgdmFsaWRpdHkgYW5kIHVuaXF1ZW5lc3Mgb2YgdGhlIGVsZW1lbnQgbmFtZXMuCisK
KyAgICAgICAgPSBBIGNoYW5nZSBvbiBtYWtlX25hbWVzLnBsCisKKyAgICAgICAgVGhpcyBjaGFu
Z2UgdHdlYWtzIG1ha2VfbmFtZXMucGwgKG9yIGdlbmVyYXRlZCBIVE1MRWxlbWVudEZhY3Rvcnkp
CisgICAgICAgIHRvIGhvb2sgdGhlIGNyZWF0aW9ucyBvZiB1bmtub3duIGVsZW1lbnRzLiBTb21l
IG9mIGVsZW1lbnQgbmFtZXMKKyAgICAgICAgd2hpY2ggY29tZSB0byB0aGUgZmFsbGJhY2sgcGF0
aCBjYW4gYmUgb25lIG9mIHJlZ2lzdGVyZWQgY3VzdG9tCisgICAgICAgIGVsZW1lbnQuCisKKyAg
ICAgICAgPSBbVjhXcmFwQXNGdW5jdGlvbl0gZXh0ZW5kZWQgYXR0cmlidXRlOgorCisgICAgICAg
IFRoZSBkb2N1bWVudC5yZWdpc3RlcigpIEFQSSByZXR1cm5zIGEgY29uc3RydWN0b3IKKyAgICAg
ICAgZnVuY3Rpb24uIEhvd2V2ZXIsIHRoZSBWOCBiaW5kaW5nIGN1cnJlbnRseSBkb2Vzbid0IHN1
cHBvcnQgaXQuIFRvCisgICAgICAgIG1ha2UgaXQgcG9zc2libGUsIHRoaXMgY2hhbmdlIGludHJv
ZHVjZXMgIlY4V3JhcEFzRnVuY3Rpb24iCisgICAgICAgIGV4dGVuZGVkIGF0dHJpYnV0ZSBmb3Ig
YW5ub3RhdGluZyBDdXN0b21FbGVtZW50Q29uc3RydWN0b3IgSURMCisgICAgICAgIGludGVyZmFj
ZS4KKworICAgICAgICBWOFdyYXBBc0Z1bmN0aW9uIHdyYXBzIHRoZSBhbm5vdGF0ZWQgaW50ZXJm
YWNlIHdpdGggYSBKYXZhU2NyaXB0CisgICAgICAgIGZ1bmN0aW9uLCB3aGljaCBjYWxscyB0aGUg
b3JpZ2luYWwgb2JqZWN0IGFzIGEgZnVuY3Rpb24sIG9yIGFzIGEKKyAgICAgICAgY29uc3RydWN0
b3IgZGVwZW5kcyBvbiB0aGUgY29udGV4dC4KKworICAgICAgICBXaXRoIHRoaXMgd3JhcHBlciBm
dW5jdGlvbiwgdGhlcmUgYXJlIHR3byBsZXZlbHMgb2YgaW5kaXJlY3Rpb24KKyAgICAgICAgYmV0
d2VlbiBuYXRpdmUgQysrIG9iamVjdCBhbmQgYXV0aG9yLXZpc2libGUgSlMgZnVuY3Rpb246CisK
KyAgICAgICAgW0pTIEFkYXB0b3IgRmljdGlvbl0gPC0oaGlkZGVuIHByb3BlcnR5KS0+IFtKUyBX
cmFwcGVyIE9iamVjdF0gLShpbnRlcm5hbCBmaWVsZCktPiBbQysrIE5hdGl2ZSBvYmplY3RdCisK
KyAgICAgICAgVGhlIGNvZGUgZ2VuZXJhdG9yIGdlbmVyYXRlcyB0aGUgYmluZGluZyBjb2RlIHdo
aWNoIGRlYWxzIHdpdGgKKyAgICAgICAgdGhpcyBpbmRpcmVjdGlvbi4gIEFsc28sIHRoZXJlIGlz
IGEgc2V0IG9mIGhlbHBlciBmdW5jdGlvbnMgaW4KKyAgICAgICAgVjhBZGFwdG9yRnVuY3Rpb24u
aC9jcHAgd2hpY2ggdGFrZXMgY2FyZSBvZiB0aGlzIGluZGlyZWN0aW9uLgorICAgICAgICBWOERP
TVdyYXBwZXIuY3BwL2ggd29ya3MgYXMgYSBmYWNhZGUgZm9yIHRoZXNlIEFQSXMgYW5kIGlzIHVz
ZWQgZnJvbQorICAgICAgICB0aGUgZ2VuZXJhdGVkIGNvZGUuCisKKyAgICAgICAgVGhpcyByZWR1
bmRhbmN5IGNvbWVzIGZyb20gbGltaXRhdGlvbnMgb2YgYm90aCBWOCBiaW5kaW5ncyBhbmQgVjgK
KyAgICAgICAgZW1iZWRkaW5nIEFQSS4gU2VlIGJ1ZyAxMDgxMzggZm9yIGRldGFpbHMuCisKKyAg
ICAgICAgPSBWOEhUTUxDdXN0b21FbGVtZW50CisKKyAgICAgICAgVW5saWtlIGJ1aWx0LWluIEhU
TUwgZWxlbWVudHMsIGFueSBjdXN0b20gZWxlbWVudCBoYXMgbm8KKyAgICAgICAgY29ycmVzcG9u
ZGluZyBDKysgY2xhc3MuIEluc3RlYWQsIGRvY3VtZW50LnJlZ2lzdGVyKCkgc2hvdWxkIGFsbG93
CisgICAgICAgIHBhc3NpbmcgYSBwcm90b3R5cGUgb2JqZWN0IGZvciB0aGUgZWxlbWVudHMgYmVp
bmcgcmVnaXN0ZXJlZC4KKworICAgICAgICBWOEhUTUxDdXN0b21FbGVtZW50IGhhbmRsZXMgdGhp
cyBsYWNrIG9mIG5hdGl2ZSBjbGFzcy4gIEl0IGJlaGF2ZXMKKyAgICAgICAgbGlrZSBhIG5hdGl2
ZSBzaWRlIHByb3h5IG9mIG5vbi1uYXRpdmUgSFRNTEVsZW1lbnQgc3ViY2xhc3Nlcy4gIEl0Cisg
ICAgICAgIGNvbm5lY3RzIGVhY2ggY3VzdG9tIGVsZW1lbnQgdG8gYW4gYXBwcm9wcmlhdGUgbmF0
aXZlIGVsZW1lbnQsCisgICAgICAgIHdoaWNoIGlzIEhUTUxFbGVtZW50IGF0IHRoaXMgdGltZS4g
VGhpcyByZXN0cmljdGlvbiB3aWxsIGJlCisgICAgICAgIHJlbGF4ZWQgbGF0ZXIuIFNlZSBCdWcg
MTEwNDM2IGZvciBkZXRhaWxzLgorCisgICAgICAgID0gQ3VzdG9tIERPTSBlbGVtZW50cyBhbmQg
bXVsdGlwbGUgd29ybGRzCisKKyAgICAgICAgSW4gdGhpcyBwYXRjaCwgY3VzdG9tIGVsZW1lbnQg
cmVnaXN0cmF0aW9uIGFuZCBpbnN0YW50aWF0aW9uIGlzIG5vdCBhbGxvd2VkCisgICAgICAgIGlu
IG5vbi1tYWluIHdvcmxkIGFuZCBkb2N1bWVudC5yZWdpc3RlcigpIEFQSSBqdXN0IGZhaWxzIHRo
ZXJlLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRl
c3RzOiBmYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMuaHRtbAorICAgICAg
ICAgICAgICAgZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFudC1udWxs
LWNvbnN0cnVjdG9yLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZG9tL2N1c3RvbS9kb2N1bWVu
dC1yZWdpc3Rlci1yZWVudHJhbnQtcmV0dXJuaW5nLWZha2UuaHRtbAorICAgICAgICAgICAgICAg
ZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFudC10aHJvd2luZy1jb25z
dHJ1Y3Rvci5odG1sCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAq
IFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBiaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVk
RmVhdHVyZXMuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oOgorICAgICAgICAoUnVudGltZUVuYWJsZWRGZWF0dXJlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpjdXN0b21ET01FbGVtZW50c0VuYWJsZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0Q3VzdG9tRE9N
RWxlbWVudHMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBt
OgorICAgICAgICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
SURMQXR0cmlidXRlcy50eHQ6CisgICAgICAgICogYmluZGluZ3MvdjgvQ3VzdG9tRWxlbWVudEhl
bHBlcnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRIZWxwZXJz
Ojppbml0aWFsaXplQ29uc3RydWN0b3JXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6Omhhc05v
QnVpbHRpbnNJblByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50SGVs
cGVyczo6aXNWYWxpZFByb3RvdHlwZVBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpDdXN0
b21FbGVtZW50SGVscGVyczo6aXNGZWF0dXJlQWxsb3dlZCk6CisgICAgICAgICogYmluZGluZ3Mv
djgvQ3VzdG9tRWxlbWVudEhlbHBlcnMuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaC4KKyAgICAgICAgKEN1c3RvbUVsZW1lbnRI
ZWxwZXJzKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6VjhBZGFwdG9yRnVuY3Rpb246OmdldFRlbXBsYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlY4QWRhcHRvckZ1bmN0aW9uOjpjb25maWd1cmVUZW1wbGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpWOEFkYXB0b3JGdW5jdGlvbjo6aW52b2NhdGlvbkNhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OlY4QWRhcHRvckZ1bmN0aW9uOjp3cmFwKToKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFY4QWRh
cHRvckZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlY4QWRhcHRvckZ1bmN0aW9uOjp1bndy
YXApOgorICAgICAgICAoV2ViQ29yZTo6VjhBZGFwdG9yRnVuY3Rpb246OmdldCk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvVjhET01Db25maWd1cmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlY4RE9NQ29uZmlndXJhdGlvbjo6Y29uZmlndXJlVGVtcGxhdGUpOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6
OnRvRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpmcm9tRnVuY3Rp
b24pOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oOgorICAgICAgICAoVjhE
T01XcmFwcGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50LmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpWOEhUTUxDdXN0b21FbGVtZW50OjpjcmVhdGVX
cmFwcGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50Lmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1l
LmguCisgICAgICAgIChWOEhUTUxDdXN0b21FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlY4
SFRNTEN1c3RvbUVsZW1lbnQ6OnRvVjgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEN1c3RvbUVs
ZW1lbnQ6OnRvVjgpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1l
Lmg6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tRWxlbWVudENvbnN0cnVj
dG9yQ3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpWOEN1c3RvbUVsZW1lbnRD
b25zdHJ1Y3Rvcjo6Y2FsbEFzRnVuY3Rpb25DYWxsYmFjayk6CisgICAgICAgICogZG9tL0N1c3Rv
bUVsZW1lbnRDb25zdHJ1Y3Rvci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmguCisgICAgICAgIChXZWJDb3JlOjpDdXN0b21F
bGVtZW50Q29uc3RydWN0b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVt
ZW50Q29uc3RydWN0b3I6OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6On5DdXN0b21FbGVtZW50Q29uc3RydWN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjpjcmVhdGVFbGVt
ZW50KToKKyAgICAgICAgKiBkb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmg6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmguCisg
ICAgICAgIChDdXN0b21FbGVtZW50Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vz
dG9tRWxlbWVudENvbnN0cnVjdG9yOjpkb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0
b21FbGVtZW50Q29uc3RydWN0b3I6OnRhZ05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9t
RWxlbWVudENvbnN0cnVjdG9yOjpuYW1lKToKKyAgICAgICAgKiBkb20vQ3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yLmlkbDogQWRkZWQuCisgICAgICAgICogZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3Ry
eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpD
dXN0b21FbGVtZW50UmVnaXN0cnkpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJl
Z2lzdHJ5Ojp+Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3Rv
bUVsZW1lbnRSZWdpc3RyeTo6Y29uc3RydWN0b3JPZik6CisgICAgICAgIChXZWJDb3JlOjpDdXN0
b21FbGVtZW50UmVnaXN0cnk6OmlzVmFsaWROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3Rv
bUVsZW1lbnRSZWdpc3RyeTo6cmVnaXN0ZXJFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkN1
c3RvbUVsZW1lbnRSZWdpc3RyeTo6ZmluZCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVt
ZW50UmVnaXN0cnk6OmNyZWF0ZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxl
bWVudFJlZ2lzdHJ5Ojpkb2N1bWVudCk6CisgICAgICAgICogZG9tL0N1c3RvbUVsZW1lbnRSZWdp
c3RyeS5oOiBBZGRlZC4KKyAgICAgICAgKEN1c3RvbUVsZW1lbnRSZWdpc3RyeSk6CisgICAgICAg
ICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZW1vdmVk
TGFzdFJlZik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVnaXN0ZXJFbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWdpc3RyeSk6CisgICAgICAgICogZG9tL0Rv
Y3VtZW50Lmg6CisgICAgICAgIChEb2N1bWVudCk6CisgICAgICAgICogZG9tL21ha2VfbmFtZXMu
cGw6CisgICAgICAgIChwcmludFdyYXBwZXJGYWN0b3J5Q3BwRmlsZSk6CisgICAgICAgICogaHRt
bC9IVE1MRG9jdW1lbnQuaWRsOgorCiAyMDEzLTAyLTIwICBUYWthc2hpIFNha2Ftb3RvICA8dGFz
YWtAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbUmVmYWN0b3JpbmddIE1ha2UgbV9zdGF0ZSBhbiBv
bi1zdGFjayBvYmplY3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMDhjOTNkMzAxOWVj
ZTJkYTNmNzVkNTg0OTMzNTkxYWRmNTZlNTJhMS4uNDMxNmEyYThjZDgzOGY0Y2JiYmViOTg0Yzhj
OWU1MDhlOGQ5ZjRhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOSBA
QAorMjAxMy0wMi0yMSAgSGFqaW1lIE1vcnJpdGEgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAg
ICAgICAgV0lQCisKKyAgICAgICAgdXBkYXRlZAorCisgICAgICAgIE5lZWQgYSBzaG9ydCBkZXNj
cmlwdGlvbiAoT09QUyEpLgorICAgICAgICBOZWVkIHRoZSBidWcgVVJMIChPT1BTISkuCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmZWF0dXJlcy5n
eXBpOgorICAgICAgICAqIHB1YmxpYy9XZWJSdW50aW1lRmVhdHVyZXMuaDoKKyAgICAgICAgKFdl
YlJ1bnRpbWVGZWF0dXJlcyk6CisgICAgICAgICogc3JjL1dlYlJ1bnRpbWVGZWF0dXJlcy5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlQ3VzdG9tRE9NRWxl
bWVudHMpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUnVudGltZUZl
YXR1cmVzOjppc0N1c3RvbURPTUVsZW1lbnRzRW5hYmxlZCk6CisKKzIwMTMtMDEtMjcgIEhhamlt
ZSBNb3JyaXRhICA8bW9ycml0YUBnb29nbGUuY29tPgorCisgICAgICAgIFtDdXN0b20gRWxlbWVu
dHNdIEltcGxlbWVudCBiYXJlLWJvbmUgZG9jdW1lbnQucmVnaXN0ZXIoKQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwMjI5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgZW5hYmxlQ3VzdG9tRE9N
RWxlbWVudHMgZmxhZy4KKworICAgICAgICAqIGZlYXR1cmVzLmd5cGk6CisgICAgICAgICogcHVi
bGljL1dlYlJ1bnRpbWVGZWF0dXJlcy5oOgorICAgICAgICAoV2ViUnVudGltZUZlYXR1cmVzKToK
KyAgICAgICAgKiBzcmMvV2ViUnVudGltZUZlYXR1cmVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVDdXN0b21ET01FbGVtZW50cyk6CisgICAgICAgIChX
ZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJSdW50aW1lRmVhdHVyZXM6OmlzQ3VzdG9tRE9N
RWxlbWVudHNFbmFibGVkKToKKwogMjAxMy0wMi0yMCAgUGF3ZcWCIEhhamRhbiwgSnIuICA8cGhh
amRhbi5qckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRkIGd5cCBvcHRpb24gdG8gc3dpdGNo
IEVOQUJMRShTUUxfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVk
U291cmNlcy5tYWtlIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCBi
MjJhZGU1N2Y5YTU0ODg0MjU1NWY1MGE0MTJmOTlkNjMzODIwZmI1Li5mNmY0MTFkZWU3NWM3YTg2
M2YwYTE0YTE2ZTY2ZjFhMjkxNmU3MWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9EZXJp
dmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UK
QEAgLTIyMCw2ICsyMjAsNyBAQCBCSU5ESU5HX0lETFMgPSBcCiAgICAgJChXZWJDb3JlKS9kb20v
Q2xpcGJvYXJkLmlkbCBcCiAgICAgJChXZWJDb3JlKS9kb20vQ29tbWVudC5pZGwgXAogICAgICQo
V2ViQ29yZSkvZG9tL0NvbXBvc2l0aW9uRXZlbnQuaWRsIFwKKyAgICAkKFdlYkNvcmUpL2RvbS9D
dXN0b21FbGVtZW50Q29uc3RydWN0b3IuaWRsIFwKICAgICAkKFdlYkNvcmUpL2RvbS9DdXN0b21F
dmVudC5pZGwgXAogICAgICQoV2ViQ29yZSkvZG9tL0RPTUNvcmVFeGNlcHRpb24uaWRsIFwKICAg
ICAkKFdlYkNvcmUpL2RvbS9ET01FcnJvci5pZGwgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGY3NzQ0
NDU0NWFiMWIxMjlkMGQ5MzBlNDNhNDJmOTU1NWY5YWFjNzYuLmFiZDc5MTdmMmNkMWJhMjAwOWY4
MjdkYmM1Y2ZhZGU1MTM4MjFiY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTIwMCw2ICsyMDAsNyBA
QAogICAgICAgICAgICAgJ2RvbS9DbGlwYm9hcmQuaWRsJywKICAgICAgICAgICAgICdkb20vQ29t
bWVudC5pZGwnLAogICAgICAgICAgICAgJ2RvbS9Db21wb3NpdGlvbkV2ZW50LmlkbCcsCisgICAg
ICAgICAgICAnZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5pZGwnLAogICAgICAgICAgICAg
J2RvbS9DdXN0b21FdmVudC5pZGwnLAogICAgICAgICAgICAgJ2RvbS9ET01Db3JlRXhjZXB0aW9u
LmlkbCcsCiAgICAgICAgICAgICAnZG9tL0RPTUVycm9yLmlkbCcsCkBAIC0xMTkxLDYgKzExOTIs
OCBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0FycmF5VmFsdWUuaCcsCiAgICAgICAgICAg
ICAnYmluZGluZ3MvdjgvQmluZGluZ1N0YXRlLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mv
djgvQmluZGluZ1N0YXRlLmgnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0N1c3RvbUVsZW1l
bnRIZWxwZXJzLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvQ3VzdG9tRWxlbWVudEhl
bHBlcnMuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmNwcCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmgnLAogICAgICAgICAgICAgJ2Jp
bmRpbmdzL3Y4L0RPTVJlcXVlc3RTdGF0ZS5oJywKQEAgLTEyNTksNiArMTI2Miw4IEBACiAgICAg
ICAgICAgICAnYmluZGluZ3MvdjgvU2hhcmVkUGVyc2lzdGVudC5oJywKICAgICAgICAgICAgICdi
aW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5jcHAnLAogICAgICAgICAgICAgJ2Jp
bmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmgnLAorICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3Mvdjgv
VjhBZGFwdG9yRnVuY3Rpb24uaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhCaW5kaW5n
LmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgnLAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL3Y4L1Y4QmluZGluZ01hY3Jvcy5oJywKQEAgLTEyODAsNiArMTI4NSw4IEBA
CiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuaCcsCiAgICAgICAgICAg
ICAnYmluZGluZ3MvdjgvVjhHQ0ZvckNvbnRleHREaXNwb3NlLmNwcCcsCiAgICAgICAgICAgICAn
YmluZGluZ3MvdjgvVjhHQ0ZvckNvbnRleHREaXNwb3NlLmgnLAorICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L1Y4SFRNTEN1c3RvbUVsZW1lbnQuY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92
OC9WOEhUTUxDdXN0b21FbGVtZW50LmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4SGlk
ZGVuUHJvcGVydHlOYW1lLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhIaWRkZW5Q
cm9wZXJ0eU5hbWUuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhJbml0aWFsaXplci5j
cHAnLApAQCAtMTM0MCw2ICsxMzQ3LDcgQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0
b20vVjhDb25zb2xlQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q29vcmRpbmF0ZXNDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0
b20vVjhDcnlwdG9DdXN0b20uY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20v
VjhDdXN0b21FbGVtZW50Q29uc3RydWN0b3JDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5k
aW5ncy92OC9jdXN0b20vVjhDdXN0b21FdmVudEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwJywK
ICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21YUGF0aE5TUmVzb2x2ZXIu
Y3BwJywKQEAgLTI3NzMsNiArMjc4MSwxMCBAQAogICAgICAgICAgICAgJ2RvbS9Db250ZXh0RmVh
dHVyZXMuY3BwJywKICAgICAgICAgICAgICdkb20vQ29udGV4dEZlYXR1cmVzLmgnLAogICAgICAg
ICAgICAgJ2RvbS9Dcm9zc1RocmVhZFRhc2suaCcsCisgICAgICAgICAgICAnZG9tL0N1c3RvbUVs
ZW1lbnRDb25zdHJ1Y3Rvci5jcHAnLAorICAgICAgICAgICAgJ2RvbS9DdXN0b21FbGVtZW50Q29u
c3RydWN0b3IuaCcsCisgICAgICAgICAgICAnZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5jcHAn
LAorICAgICAgICAgICAgJ2RvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuaCcsCiAgICAgICAgICAg
ICAnZG9tL0N1c3RvbUV2ZW50LmNwcCcsCiAgICAgICAgICAgICAnZG9tL0N1c3RvbUV2ZW50Lmgn
LAogICAgICAgICAgICAgJ2RvbS9ET01BbGxJbk9uZS5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHAK
aW5kZXggMmEyZGE2ZmViNDc3MWYzZDM3ZDZkNjM4MzU5NGQ1MmQ1MzIxZTUwZi4uZjQxMTQzZWFk
NjgwMzgxZWFjNjI5YjhkNWY3YTA4ODJhNDQxMDFmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwCkBA
IC0xOTAsNiArMTkwLDEwIEBAIGJvb2wgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6aXNTaGFkb3dE
T01FbmFibGVkID0gZmFsc2U7CiBib29sIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmlzQXV0aG9y
U2hhZG93RE9NRm9yQW55RWxlbWVudEVuYWJsZWQgPSBmYWxzZTsKICNlbmRpZgogCisjaWYgRU5B
QkxFKENVU1RPTV9FTEVNRU5UUykKK2Jvb2wgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6aXNDdXN0
b21ET01FbGVtZW50c0VuYWJsZWQgPSBmYWxzZTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFNUWUxF
X1NDT1BFRCkKIGJvb2wgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6aXNTdHlsZVNjb3BlZEVuYWJs
ZWQgPSBmYWxzZTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
Z2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaAppbmRleCBjZWM2NDE5NWVhYzkxMmM3
MDVkMjQzYWI5YmRhZjYzOTVmZjU5ODQyLi4yNTM3ZThjMzk3YjU4YTRkMzU0MzZlMDI2YmUyOTkx
ZDgzYjMxNThhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1
bnRpbWVFbmFibGVkRmVhdHVyZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5l
cmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaApAQCAtMjE4LDYgKzIxOCwxMSBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIHZvaWQgc2V0QXV0aG9yU2hhZG93RE9NRm9yQW55RWxlbWVudEVuYWJsZWQo
Ym9vbCBpc0VuYWJsZWQpIHsgaXNBdXRob3JTaGFkb3dET01Gb3JBbnlFbGVtZW50RW5hYmxlZCA9
IGlzRW5hYmxlZDsgfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorICAg
IHN0YXRpYyBib29sIGN1c3RvbURPTUVsZW1lbnRzRW5hYmxlZCgpIHsgcmV0dXJuIGlzQ3VzdG9t
RE9NRWxlbWVudHNFbmFibGVkOyB9CisgICAgc3RhdGljIHZvaWQgc2V0Q3VzdG9tRE9NRWxlbWVu
dHMoYm9vbCBpc0VuYWJsZWQpIHsgaXNDdXN0b21ET01FbGVtZW50c0VuYWJsZWQgPSBpc0VuYWJs
ZWQ7IH0KKyNlbmRpZgorCiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKICAgICBzdGF0aWMgYm9v
bCBzdHlsZVNjb3BlZEVuYWJsZWQoKSB7IHJldHVybiBpc1N0eWxlU2NvcGVkRW5hYmxlZDsgfQog
ICAgIHN0YXRpYyB2b2lkIHNldFN0eWxlU2NvcGVkRW5hYmxlZChib29sIGlzRW5hYmxlZCkgeyBp
c1N0eWxlU2NvcGVkRW5hYmxlZCA9IGlzRW5hYmxlZDsgfQpAQCAtMzQzLDYgKzM0OCwxMCBAQCBw
cml2YXRlOgogICAgIHN0YXRpYyBib29sIGlzQXV0aG9yU2hhZG93RE9NRm9yQW55RWxlbWVudEVu
YWJsZWQ7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisgICAgc3RhdGlj
IGJvb2wgaXNDdXN0b21ET01FbGVtZW50c0VuYWJsZWQ7CisjZW5kaWYKKwogI2lmIEVOQUJMRShT
VFlMRV9TQ09QRUQpCiAgICAgc3RhdGljIGJvb2wgaXNTdHlsZVNjb3BlZEVuYWJsZWQ7CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvclY4LnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
VjgucG0KaW5kZXggMmY0ZjhkYjBkZjJjMWRhMmQzODRmMmYwMmY2ZGEzNDQwN2ViOWNhZS4uZmFm
ZmFjOTBlYzE2OTgyYTEyMDAwMzUzNzhkMWQ1YzI0OTEwNjEwMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KQEAgLTM1MiwxMyAr
MzUyLDIwIEBAIEVORAogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiZmFsc2U7XG4iKTsK
ICAgICB9CiAKKyAgICBteSAkZnJvbUZ1bmN0aW9uT3BlbmluZyA9ICIiOworICAgIG15ICRmcm9t
RnVuY3Rpb25DbG9zaW5nID0gIiI7CisgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJWOFdyYXBBc0Z1bmN0aW9uIn0pIHsKKyAgICAgICAgJGZyb21GdW5jdGlvbk9wZW5p
bmcgPSAiVjhET01XcmFwcGVyOjpmcm9tRnVuY3Rpb24oIjsKKyAgICAgICAgJGZyb21GdW5jdGlv
bkNsb3NpbmcgPSAiKSI7CisgICAgfQorCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgPDxFTkQp
OwogICAgIHN0YXRpYyBib29sIEhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiwgdjg6
Oklzb2xhdGUqKTsKICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IEdldFJhd1RlbXBsYXRlKHY4OjpJc29sYXRlKik7CiAgICAgc3RhdGljIHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBHZXRUZW1wbGF0ZSh2ODo6SXNvbGF0ZSopOwogICAg
IHN0YXRpYyAke25hdGl2ZVR5cGV9KiB0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9i
amVjdCkKICAgICB7Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCR7bmF0aXZlVHlw
ZX0qPihvYmplY3QtPkdldEFsaWduZWRQb2ludGVyRnJvbUludGVybmFsRmllbGQodjhET01XcmFw
cGVyT2JqZWN0SW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8JHtuYXRp
dmVUeXBlfSo+KCR7ZnJvbUZ1bmN0aW9uT3BlbmluZ31vYmplY3Qke2Zyb21GdW5jdGlvbkNsb3Np
bmd9LT5HZXRBbGlnbmVkUG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9NV3JhcHBlck9iamVj
dEluZGV4KSk7CiAgICAgfQogICAgIHN0YXRpYyB2b2lkIGRlcmVmT2JqZWN0KHZvaWQqKTsKICAg
ICBzdGF0aWMgV3JhcHBlclR5cGVJbmZvIGluZm87CkBAIC01MzksNiArNTQ2LDkgQEAgRU5ECiAg
ICAgfSBlbHNlIHsKIAogICAgICAgICBteSAkY3JlYXRlV3JhcHBlckNhbGwgPSAkY3VzdG9tV3Jh
cCA/ICIke3Y4SW50ZXJmYWNlTmFtZX06OndyYXAiIDogIiR7djhJbnRlcmZhY2VOYW1lfTo6Y3Jl
YXRlV3JhcHBlciI7CisgICAgICAgIG15ICRyZXR1cm5pbmdXcmFwcGVyID0gJGludGVyZmFjZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlY4V3JhcEFzRnVuY3Rpb24ifSA/ICJWOERPTVdyYXBwZXI6
OnRvRnVuY3Rpb24od3JhcHBlcikiIDogIndyYXBwZXIiOworICAgICAgICBteSAkcmV0dXJuaW5n
Q3JlYXRlZFdyYXBwZXJPcGVuaW5nID0gJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IlY4V3JhcEFzRnVuY3Rpb24ifSA/ICJWOERPTVdyYXBwZXI6OnRvRnVuY3Rpb24oIiA6ICIiOwor
ICAgICAgICBteSAkcmV0dXJuaW5nQ3JlYXRlZFdyYXBwZXJDbG9zaW5nID0gJGludGVyZmFjZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlY4V3JhcEFzRnVuY3Rpb24ifSA/ICIsIGltcGwtPm5hbWUo
KSwgaXNvbGF0ZSkiIDogIiI7CiAKICAgICAgICAgaWYgKCRjdXN0b21XcmFwKSB7CiAgICAgICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CkBAIC01NTIsNyArNTYyLDcgQEAgaW5s
aW5lIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcCgke25hdGl2ZVR5cGV9KiBpbXBsLCB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IGMKIHsKICAgICBBU1NFUlQoaW1wbCk7CiAgICAgQVNTRVJUKERP
TURhdGFTdG9yZTo6Z2V0V3JhcHBlcihpbXBsLCBpc29sYXRlKS5Jc0VtcHR5KCkpOwotICAgIHJl
dHVybiAkY3JlYXRlV3JhcHBlckNhbGwoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsK
KyAgICByZXR1cm4gJHtyZXR1cm5pbmdDcmVhdGVkV3JhcHBlck9wZW5pbmd9JGNyZWF0ZVdyYXBw
ZXJDYWxsKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSkke3JldHVybmluZ0NyZWF0ZWRX
cmFwcGVyQ2xvc2luZ307CiB9CiBFTkQKICAgICAgICAgfQpAQCAtNTY1LDcgKzU3NSw3IEBAIGlu
bGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOCgke25hdGl2ZVR5cGV9KiBpbXBsLCB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IGNyCiAgICAgICAgIHJldHVybiB2OE51bGxXaXRoQ2hlY2soaXNv
bGF0ZSk7CiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZXIgPSBET01EYXRhU3RvcmU6
OmdldFdyYXBwZXIoaW1wbCwgaXNvbGF0ZSk7CiAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgICAgIHJldHVybiAkcmV0dXJuaW5nV3JhcHBl
cjsKICAgICByZXR1cm4gd3JhcChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQog
CkBAIC01NzYsNyArNTg2LDcgQEAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFz
dCgke25hdGl2ZVR5cGV9KiBpbXBsLCBjb25zdCBIb2xkZXJDb250YWluZXIKICAgICAgICAgcmV0
dXJuIHY4TnVsbChjb250YWluZXIuR2V0SXNvbGF0ZSgpKTsKICAgICB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IHdyYXBwZXIgPSBET01EYXRhU3RvcmU6OmdldFdyYXBwZXJGYXN0KGltcGwsIGNvbnRh
aW5lciwgd3JhcHBhYmxlKTsKICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gd3JhcHBlcjsKKyAgICAgICAgcmV0dXJuICRyZXR1cm5pbmdXcmFwcGVyOwogICAgIHJl
dHVybiB3cmFwKGltcGwsIGNvbnRhaW5lci5Ib2xkZXIoKSwgY29udGFpbmVyLkdldElzb2xhdGUo
KSk7CiB9CiBFTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
SURMQXR0cmlidXRlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0
dHJpYnV0ZXMudHh0CmluZGV4IGM2MzY0NGZiZTk2NTI5ZGY3OGEyMzgzMGE1NmI2NDFhMmRiZWRk
MDcuLjE4NjExMTgxNTA5ZWMzYjVjYzc0YzBhOWYzMDhiNmIwNTk4Y2EzNDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dApAQCAtMTI5
LDMgKzEyOSw0IEBAIFY4TWVhc3VyZUFzPSoKIFY4UmVhZE9ubHkKIFY4U2tpcFZUYWJsZVZhbGlk
YXRpb24KIFY4VW5mb3JnZWFibGUKK1Y4V3JhcEFzRnVuY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41
NjI1YmJkZmFlM2RjZmE2MDU4MzBlYzlhZjk3ZmQyZTUzNjVjMDE1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvQ3VzdG9tRWxlbWVudEhlbHBlcnMuY3BwCkBA
IC0wLDAgKzEsMTI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkN1c3RvbUVsZW1l
bnRIZWxwZXJzLmgiCisKKyNpbmNsdWRlICJET01XcmFwcGVyV29ybGQuaCIKKyNpbmNsdWRlICJW
OEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIlY4SFRNTFBhcmFncmFwaEVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJWOEhUTUxTcGFuRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCitib29sIEN1c3RvbUVsZW1l
bnRIZWxwZXJzOjppbml0aWFsaXplQ29uc3RydWN0b3JXcmFwcGVyKEN1c3RvbUVsZW1lbnRDb25z
dHJ1Y3RvciogY29uc3RydWN0b3IsIGNvbnN0IFNjcmlwdFZhbHVlJiBwcm90b3R5cGUsIFNjcmlw
dFN0YXRlKiBzdGF0ZSkKK3sKKyAgICBBU1NFUlQoaXNGZWF0dXJlQWxsb3dlZChzdGF0ZSkpOwor
ICAgIEFTU0VSVCghcHJvdG90eXBlLnY4VmFsdWUoKS5Jc0VtcHR5KCkgJiYgcHJvdG90eXBlLnY4
VmFsdWUoKS0+SXNPYmplY3QoKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZXJW
YWx1ZSA9IHRvVjgoY29uc3RydWN0b3IsIHN0YXRlLT5jb250ZXh0KCktPkdsb2JhbCgpLCBzdGF0
ZS0+Y29udGV4dCgpLT5HZXRJc29sYXRlKCkpOworICAgIGlmICh3cmFwcGVyVmFsdWUuSXNFbXB0
eSgpIHx8ICF3cmFwcGVyVmFsdWUtPklzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gd3JhcHBlciA9IHY4OjpIYW5kbGU8djg6OkZ1
bmN0aW9uPjo6Q2FzdCh3cmFwcGVyVmFsdWUpOworICAgIC8vIC0gT2JqZWN0OjpGb3JjZVNldCgp
IG5vciBPYmplY3Q6OlNldEFjY2Vzc29yIERvZXNuJ3Qgd29yayBhZ2FpbnN0IHRoZSAicHJvdG90
eXBlIiBwcm9wZXJ0eSBvZiBmdW5jdGlvbiBvYmplY3RzLgorICAgIC8vIC0gU2V0KCktaW5nIGhl
cmUgaXMgc2FmZSBiZWNhdXNlCisgICAgLy8gICAtIEhvb2tpbmcgT2JqZWN0LnByb3RvdHlwZSdz
IGRlZmluZVByb3BlcnR5KCkgd2l0aCAicHJvdG90eXBlIiBvciAiY29uc3RydWN0b3IiIGFsc28g
ZG9lc24ndCBhZmZlY3Qgb24gdGhlc2UgcHJvcGVydGllcyBvZiBmdW5jdGlvbiBvYmplY3RzIGFu
ZAorICAgIC8vICAgLSBVc2luZyBTZXQoKSBpcyBva2F5IGJlY2F1ZXMgZWFjaCBmdW5jdGlvbiBo
YXMgInByb3RvdHlwZSIgcHJvcGVydHkgZnJvbSBzdGFydCBhbmQgT2JqZWN0cy5wcm90b3R5cGUg
Y2Fubm90IGludGVyY2VwdCB0aGUgcHJvcGVydHkgYWNjZXNzLgorICAgIHY4OjpIYW5kbGU8djg6
OlN0cmluZz4gcHJvdG90eXBlS2V5ID0gdjhTdHJpbmcoInByb3RvdHlwZSIsIHN0YXRlLT5jb250
ZXh0KCktPkdldElzb2xhdGUoKSk7CisgICAgQVNTRVJUKHdyYXBwZXItPkhhc093blByb3BlcnR5
KHByb3RvdHlwZUtleSkpOworICAgIHdyYXBwZXItPlNldChwcm90b3R5cGVLZXksIHByb3RvdHlw
ZS52OFZhbHVlKCksIHY4OjpSZWFkT25seSk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+
IGNvbnN0cnVjdG9yS2V5ID0gdjhTdHJpbmcoImNvbnN0cnVjdG9yIiwgc3RhdGUtPmNvbnRleHQo
KS0+R2V0SXNvbGF0ZSgpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHByb3RvdHlwZU9i
amVjdCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QocHJvdG90eXBlLnY4VmFsdWUoKSk7
CisgICAgQVNTRVJUKCFwcm90b3R5cGVPYmplY3QtPkhhc093blByb3BlcnR5KGNvbnN0cnVjdG9y
S2V5KSk7CisgICAgcHJvdG90eXBlT2JqZWN0LT5Gb3JjZVNldChjb25zdHJ1Y3RvcktleSwgd3Jh
cHBlciwgdjg6OlJlYWRPbmx5KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wg
aGFzTm9CdWlsdGluc0luUHJvdG90eXBlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaHRtbFByb3Rv
dHlwZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNoYWluKQoreworICAgIHdoaWxlICghY2hhaW4u
SXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChjaGFpbiA9PSBodG1sUHJvdG90eXBlKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghY2hhaW4tPklzT2JqZWN0KCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIFRoZSBpbnRlcm5hbCBmaWVsZCBjb3Vu
dCBpbmRpY2F0ZXMgdGhlIG9iamVjdCBtaWdodCBiZSBhIG5hdGl2ZSBiYWNrZWQsIGJ1aWx0LWlu
IG9iamVjdC4KKyAgICAgICAgaWYgKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoY2hhaW4p
LT5JbnRlcm5hbEZpZWxkQ291bnQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgY2hhaW4gPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGNoYWluKS0+R2V0UHJvdG90
eXBlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEN1c3RvbUVsZW1l
bnRIZWxwZXJzOjppc1ZhbGlkUHJvdG90eXBlUGFyYW1ldGVyKGNvbnN0IFNjcmlwdFZhbHVlJiBw
cm90b3R5cGUsIFNjcmlwdFN0YXRlKiBzdGF0ZSkKK3sKKyAgICBpZiAocHJvdG90eXBlLnY4VmFs
dWUoKS5Jc0VtcHR5KCkgfHwgIXByb3RvdHlwZS52OFZhbHVlKCktPklzT2JqZWN0KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIGRvY3VtZW50LnJlZ2lzdGVyKCkgc2V0cyB0aGUg
Y29uc3RydWN0b3IgcHJvcGVydHksIHNvIHRoZSBwcm90b3R5cGUgc2hvdWxkbid0IGhhdmUgb25l
LgorICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gcHJvdG90eXBlT2JqZWN0ID0gdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0Pjo6Q2FzdChwcm90b3R5cGUudjhWYWx1ZSgpKTsKKyAgICBpZiAocHJvdG90
eXBlT2JqZWN0LT5IYXNPd25Qcm9wZXJ0eSh2OFN0cmluZygiY29uc3RydWN0b3IiLCBzdGF0ZS0+
Y29udGV4dCgpLT5HZXRJc29sYXRlKCkpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFY4
UGVyQ29udGV4dERhdGEqIHBlckNvbnRleHREYXRhID0gVjhQZXJDb250ZXh0RGF0YTo6ZnJvbShz
dGF0ZS0+Y29udGV4dCgpKTsKKyAgICAvLworICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwNDM2CisgICAgLy8gICBkb2N1bWVudC5yZWdpc3Rl
cigpIHNob3VsZCBhbGxvdyBhcmJpdHJhcnkgSFRNTEVsZW1lbnQgc3ViY2xhc3NzZXMuCisgICAg
Ly8gICBDdXJyZW50bHkgaXQgc3VwcG9ydHMgY3VzdG9tIGVsZW1lbnRzIHdoaWNoIGFyZQorICAg
IC8vICAgLSBkaXJlY3Qgc3ViY2xhc3NlcyBvZiBIVE1MRWxlbWVudCBvcgorICAgIC8vICAgLSBz
dWJjbGFzc2VzIG9mIG90aGVyIGN1c3RvbSBlbGVtZW50cworICAgIC8vCisgICAgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBodG1sQ29uc3RydWN0b3IgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpD
YXN0KHBlckNvbnRleHREYXRhLT5jb25zdHJ1Y3RvckZvclR5cGUoJlY4SFRNTEVsZW1lbnQ6Omlu
Zm8pKTsKKyAgICBpZiAoaHRtbENvbnN0cnVjdG9yLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaHRtbFByb3RvdHlwZSA9IHY4OjpI
YW5kbGU8djg6Ok9iamVjdD46OkNhc3QoaHRtbENvbnN0cnVjdG9yLT5HZXQodjhTdHJpbmcoInBy
b3RvdHlwZSIsIHN0YXRlLT5jb250ZXh0KCktPkdldElzb2xhdGUoKSkpKTsKKyAgICBpZiAoaHRt
bFByb3RvdHlwZS5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWhh
c05vQnVpbHRpbnNJblByb3RvdHlwZShodG1sUHJvdG90eXBlLCBwcm90b3R5cGVPYmplY3QpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ3VzdG9t
RWxlbWVudEhlbHBlcnM6OmlzRmVhdHVyZUFsbG93ZWQoU2NyaXB0U3RhdGUqIHN0YXRlKQorewor
ICAgIHJldHVybiBpc0ZlYXR1cmVBbGxvd2VkKHN0YXRlLT5jb250ZXh0KCkpOworfQorCitib29s
IEN1c3RvbUVsZW1lbnRIZWxwZXJzOjppc0ZlYXR1cmVBbGxvd2VkKHY4OjpIYW5kbGU8djg6OkNv
bnRleHQ+IGNvbnRleHQpCit7CisgICAgaWYgKERPTVdyYXBwZXJXb3JsZCogd29ybGQgPSBET01X
cmFwcGVyV29ybGQ6OmdldFdvcmxkKGNvbnRleHQpKQorICAgICAgICByZXR1cm4gd29ybGQtPmlz
TWFpbldvcmxkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKworI2VuZGlmIC8vIEVOQUJMRShD
VVNUT01fRUxFTUVOVFMpCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmggYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9DdXN0b21FbGVtZW50SGVscGVycy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA4
ZDFiY2JjMTg5NTY5NWRkYWFiZGFkMGZiZjNmOGI5ZDMxYWJiYTUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9DdXN0b21FbGVtZW50SGVscGVycy5oCkBAIC0w
LDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIEN1c3RvbUVsZW1lbnRIZWxwZXJzX2gKKyNkZWZpbmUgQ3VzdG9t
RWxlbWVudEhlbHBlcnNfaAorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUg
IlNjcmlwdFZhbHVlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIEVOQUJMRShDVVNU
T01fRUxFTUVOVFMpCisKK2NsYXNzIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvcjsKK2NsYXNzIFNj
cmlwdFN0YXRlOworCitjbGFzcyBDdXN0b21FbGVtZW50SGVscGVycyB7CitwdWJsaWM6CisgICAg
c3RhdGljIGJvb2wgaW5pdGlhbGl6ZUNvbnN0cnVjdG9yV3JhcHBlcihDdXN0b21FbGVtZW50Q29u
c3RydWN0b3IqLCBjb25zdCBTY3JpcHRWYWx1ZSYgcHJvdG90eXBlLCBTY3JpcHRTdGF0ZSopOwor
ICAgIHN0YXRpYyBib29sIGlzVmFsaWRQcm90b3R5cGVQYXJhbWV0ZXIoY29uc3QgU2NyaXB0VmFs
dWUmLCBTY3JpcHRTdGF0ZSopOworICAgIHN0YXRpYyBib29sIGlzRmVhdHVyZUFsbG93ZWQoU2Ny
aXB0U3RhdGUqKTsKKworICAgIHN0YXRpYyBib29sIGlzRmVhdHVyZUFsbG93ZWQodjg6OkhhbmRs
ZTx2ODo6Q29udGV4dD4pOworfTsKKworI2VuZGlmIC8vIEVOQUJMRShDVVNUT01fRUxFTUVOVFMp
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEN1c3RvbUVsZW1lbnRIZWxw
ZXJzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWRhcHRvckZ1
bmN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9u
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi44ZjRiZGI1OGRlMzFiYzRmNzY2MTJkYTRlMjEzOWU1MmZmMzZkMDhl
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBZGFwdG9y
RnVuY3Rpb24uY3BwCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiVjhBZGFwdG9yRnVuY3Rpb24uaCIKKworI2luY2x1ZGUgIlY4UGVySXNvbGF0ZURhdGEuaCIK
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dyYXBwZXJUeXBlSW5mbyBWOEFkYXB0b3JGdW5jdGlv
bjo6aW5mbyA9IHsgVjhBZGFwdG9yRnVuY3Rpb246OmdldFRlbXBsYXRlLCAwLCAwLCAwLCAwLCAw
LCAwLCBXcmFwcGVyVHlwZU9iamVjdFByb3RvdHlwZSB9OworCit2ODo6UGVyc2lzdGVudDx2ODo6
RnVuY3Rpb25UZW1wbGF0ZT4gVjhBZGFwdG9yRnVuY3Rpb246OmdldFRlbXBsYXRlKHY4OjpJc29s
YXRlKiBpc29sYXRlKQoreworICAgIGlmICghaXNvbGF0ZSkKKyAgICAgICAgaXNvbGF0ZSA9IHY4
OjpJc29sYXRlOjpHZXRDdXJyZW50KCk7CisgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4
UGVySXNvbGF0ZURhdGE6OmZyb20oaXNvbGF0ZSk7CisgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVt
cGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgm
aW5mbyk7CisgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQor
ICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKKyAgICAvLyBUaGUgbGlmZXRpbWUgaXMgb2Yg
bmV3VGVtcGxhdGUgaXMgZGVsZWdhdGVkIHRvIHRoZSBUZW1wbGF0ZU1hcCB0aHVzIHRoaXMgd29u
J3QgYmUgbGVha2VkLgorICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBu
ZXdUZW1wbGF0ZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3KHY4
OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoKSk7CisgICAgZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5h
ZGQoJmluZm8sIGNvbmZpZ3VyZVRlbXBsYXRlKG5ld1RlbXBsYXRlKSk7CisgICAgcmV0dXJuIG5l
d1RlbXBsYXRlOworfQorCit2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhB
ZGFwdG9yRnVuY3Rpb246OmNvbmZpZ3VyZVRlbXBsYXRlKHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiBmdW5jdGlvblRlbXBsYXRlKQoreworICAgIGZ1bmN0aW9uVGVtcGxhdGUt
PlNldENhbGxIYW5kbGVyKCZWOEFkYXB0b3JGdW5jdGlvbjo6aW52b2NhdGlvbkNhbGxiYWNrKTsK
KyAgICByZXR1cm4gZnVuY3Rpb25UZW1wbGF0ZTsKK30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+
IFY4QWRhcHRvckZ1bmN0aW9uOjppbnZvY2F0aW9uQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50
cyYgYXJncykKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZWQgPSB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3MuQ2FsbGVlKCktPkdldEhpZGRlblZhbHVlKFY4SGlk
ZGVuUHJvcGVydHlOYW1lOjphZGFwdG9yRnVuY3Rpb25QZWVyKCkpKTsKKyAgICAvLyBGSVhNRTog
VGhpcyBjYW4gYmUgZmFzdGVyIGlmIHdlIGNhbiBhY2Nlc3MgdW5kZXJseWluZyBuYXRpdmUgY2Fs
bGJhY2sgZGlyZWN0bHkuCisgICAgLy8gV2Ugd29uJ3QgbmVlZCB0aGlzIG9uY2UgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODEzOCBpcyBhZGRyZXNzZWQuCisgICAg
VmVjdG9yPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+IGFyZ0FycmF5KGFyZ3MuTGVuZ3RoKCkpOwor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5MZW5ndGgoKTsgKytpKQorICAgICAgICBhcmdB
cnJheS5hcHBlbmQoYXJnc1tpXSk7CisgICAgaWYgKGFyZ3MuSXNDb25zdHJ1Y3RDYWxsKCkpCisg
ICAgICAgIHJldHVybiB3cmFwcGVkLT5DYWxsQXNDb25zdHJ1Y3RvcihhcmdBcnJheS5zaXplKCks
IGFyZ0FycmF5LmRhdGEoKSk7CisgICAgcmV0dXJuIHdyYXBwZWQtPkNhbGxBc0Z1bmN0aW9uKGFy
Z3MuVGhpcygpLCBhcmdBcnJheS5zaXplKCksIGFyZ0FycmF5LmRhdGEoKSk7Cit9CisKK3Y4OjpI
YW5kbGU8djg6OkZ1bmN0aW9uPiBWOEFkYXB0b3JGdW5jdGlvbjo6d3JhcCh2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IG9iamVjdCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCB2ODo6SXNvbGF0ZSog
aXNvbGF0ZSkKK3sKKyAgICBpZiAob2JqZWN0LklzRW1wdHkoKSB8fCAhb2JqZWN0LT5Jc09iamVj
dCgpKQorICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+KCk7CisgICAgdjg6
OkhhbmRsZTx2ODo6RnVuY3Rpb24+IGFkYXB0b3IgPSB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj46
OkNhc3QoZ2V0VGVtcGxhdGUoaXNvbGF0ZSktPkdldEZ1bmN0aW9uKCkpOworICAgIGlmIChhZGFw
dG9yLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPigp
OworICAgIGFkYXB0b3ItPlNldE5hbWUodjhTdHJpbmcobmFtZS5zdHJpbmcoKSwgaXNvbGF0ZSkp
OworICAgIGFkYXB0b3ItPlNldEhpZGRlblZhbHVlKFY4SGlkZGVuUHJvcGVydHlOYW1lOjphZGFw
dG9yRnVuY3Rpb25QZWVyKCksIG9iamVjdCk7CisgICAgb2JqZWN0LT5TZXRIaWRkZW5WYWx1ZShW
OEhpZGRlblByb3BlcnR5TmFtZTo6YWRhcHRvckZ1bmN0aW9uUGVlcigpLCBhZGFwdG9yKTsKKyAg
ICByZXR1cm4gYWRhcHRvcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOEFkYXB0b3JGdW5jdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUzZDZiYjUxZjQ0MGE0Yzc3MjRhYmNl
M2RlOTMwNjhkYWU4YzNhNTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFY4QWRh
cHRvckZ1bmN0aW9uX2gKKyNkZWZpbmUgVjhBZGFwdG9yRnVuY3Rpb25faAorCisjaW5jbHVkZSAi
VjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaCIKKyNpbmNsdWRl
ICJXcmFwcGVyVHlwZUluZm8uaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCisjaWYg
RU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLworLy8g
RklYTUUoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODEzOCk6Cisv
LyBWOEFkYXB0b3JGdW5jdGlvbiBjbGFzcyBhbmQgVjhXcmFwQXNGdW5jdGlvbiBJREwgYXR0cmli
dXRlIGFyZSBuZWVkZWQgZm9yIHR3byByZWFzb25zOgorLy8gLSAxKSBWOCBkb2Vzbid0IGFsbG93
IGV4cGFuZGluZyB0aGUgaW50ZXJuYWwgZmllbGQgb2YgZnVuY3Rpb24gb2JqZWN0cy4gaHR0cHM6
Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTgzNworLy8gICAgICBXZWJL
aXQgbmVlZCBpdCB0byBhc3NvY2lhdGUgZWFjaCB3cmFwcGVyIHRvIGl0cyBiYWNraW5nIEMrKyBv
YmplY3QuIFdlIHN0b3JlIGl0IGluIGEgaGlkZGVuIHByb3BlcnR5IG9mIHRoZSB3cmFwcGVkIG9i
amVjdC4KKy8vIC0gMikgQmluZGluZyBjb2RlYmFzZSBhc3N1bWVzIGV2ZXJ5IHdyYXBwZXIgb2Jq
ZWN0IGlzIGNyZWF0ZWQgdGhyb3VnaCBPYmplY3RUZW1wbGF0ZTo6TmV3SW5zdGFuY2UoKSwgbm90
IEZ1bmN0aW9uVGVtcGxhdGU6OkdldEZ1bmN0aW9uKCkuCisvLyBPbmNlIDEpIGlzIGFkZHJlc3Nz
ZWQsIHdlIGNvdWxkIGF0dGFjayAyKSB3aXRoIGl0LiAKKy8vCitjbGFzcyBWOEFkYXB0b3JGdW5j
dGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFdyYXBwZXJUeXBlSW5mbyBpbmZvOworICAgIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHVud3JhcCh2ODo6SGFuZGxlPHY4OjpGdW5jdGlv
bj4pOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gd3JhcCh2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIHY4OjpJc29sYXRlKik7Cisg
ICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBnZXQodjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0Pik7CisKKyAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IGdldFRlbXBsYXRlKHY4OjpJc29sYXRlKiA9IDApOworICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gY29uZmlndXJlVGVtcGxhdGUodjg6OlBlcnNpc3RlbnQ8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+KTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGludm9jYXRpb25DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJik7Cit9OworCitpbmxpbmUg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOEFkYXB0b3JGdW5jdGlvbjo6dW53cmFwKHY4OjpIYW5k
bGU8djg6OkZ1bmN0aW9uPiBmdW5jdGlvbikKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
d3JhcHBlZCA9IGZ1bmN0aW9uLT5HZXRIaWRkZW5WYWx1ZShWOEhpZGRlblByb3BlcnR5TmFtZTo6
YWRhcHRvckZ1bmN0aW9uUGVlcigpKTsKKyAgICBBU1NFUlQoIXdyYXBwZWQuSXNFbXB0eSgpKTsK
KyAgICBBU1NFUlQod3JhcHBlZC0+SXNPYmplY3QoKSk7CisgICAgcmV0dXJuIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD46OkNhc3Qod3JhcHBlZCk7Cit9CisKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpG
dW5jdGlvbj4gVjhBZGFwdG9yRnVuY3Rpb246OmdldCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9i
amVjdCkKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYWRhcHRvckZ1bmN0aW9uID0gb2Jq
ZWN0LT5HZXRIaWRkZW5WYWx1ZShWOEhpZGRlblByb3BlcnR5TmFtZTo6YWRhcHRvckZ1bmN0aW9u
UGVlcigpKTsKKyAgICBBU1NFUlQoIWFkYXB0b3JGdW5jdGlvbi5Jc0VtcHR5KCkpOworICAgIEFT
U0VSVChhZGFwdG9yRnVuY3Rpb24tPklzRnVuY3Rpb24oKSk7CisgICAgcmV0dXJuIHY4OjpIYW5k
bGU8djg6OkZ1bmN0aW9uPjo6Q2FzdChhZGFwdG9yRnVuY3Rpb24pOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorI2VuZGlm
IC8vIFY4QWRhcHRvckZ1bmN0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4RE9NQ29uZmlndXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOERPTUNvbmZpZ3VyYXRpb24uY3BwCmluZGV4IDBiYmE2ZmM5NzlmY2EyOWM2ZWNhOGI4ODY0
YTI0NWVhYmRhNTZiMzIuLjIyYTRmNjAzODVhNDg0M2E2OTU5ZDM5NTc1N2RlZTUyMTkzMDcxNGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NQ29uZmlndXJhdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01Db25maWd1cmF0aW9u
LmNwcApAQCAtMzMsNiArMzMsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NvbnN0IGlu
dCBwcm90b3R5cGVJbnRlcm5hbEZpZWxkY291bnQgPSAxOworCiB2b2lkIFY4RE9NQ29uZmlndXJh
dGlvbjo6YmF0Y2hDb25maWd1cmVBdHRyaWJ1dGVzKHY4OjpIYW5kbGU8djg6Ok9iamVjdFRlbXBs
YXRlPiBpbnN0YW5jZSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0VGVtcGxhdGU+IHByb3RvdHlwZSwg
Y29uc3QgQmF0Y2hlZEF0dHJpYnV0ZSogYXR0cmlidXRlcywgc2l6ZV90IGF0dHJpYnV0ZUNvdW50
LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF0
dHJpYnV0ZUNvdW50OyArK2kpCkBAIC02MCw2ICs2MiwxMSBAQCB2ODo6TG9jYWw8djg6OlNpZ25h
dHVyZT4gVjhET01Db25maWd1cmF0aW9uOjpjb25maWd1cmVUZW1wbGF0ZSh2ODo6UGVyc2lzdGVu
dDx2OAogICAgIGZ1bmN0aW9uRGVzY3JpcHRvci0+U2V0Q2xhc3NOYW1lKHY4OjpTdHJpbmc6Ok5l
d1N5bWJvbChpbnRlcmZhY2VOYW1lKSk7CiAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3RUZW1wbGF0
ZT4gaW5zdGFuY2UgPSBmdW5jdGlvbkRlc2NyaXB0b3ItPkluc3RhbmNlVGVtcGxhdGUoKTsKICAg
ICBpbnN0YW5jZS0+U2V0SW50ZXJuYWxGaWVsZENvdW50KGZpZWxkQ291bnQpOworICAgIC8vIE1h
cmtzIHRoZSBwcm90b3R5cGUgb2JqZWN0IGFzIG9uZSBvZiBuYXRpdmUtYmFja2VkIG9iamVjdHMu
CisgICAgLy8gVGhpcyBpcyBuZWVkZWQgc2luY2UgYnVnIDExMDQzNiBhc2tzIFdlYktpdCB0byB0
ZWxsIG5hdGl2ZS1pbml0aWF0ZWQgcHJvdG90eXBlcyBmcm9tIHB1cmUtSlMgb25lcy4KKyAgICB2
ODo6TG9jYWw8djg6Ok9iamVjdFRlbXBsYXRlPiBwcm90b3R5cGUgPSBmdW5jdGlvbkRlc2NyaXB0
b3ItPlByb3RvdHlwZVRlbXBsYXRlKCk7CisgICAgcHJvdG90eXBlLT5TZXRJbnRlcm5hbEZpZWxk
Q291bnQocHJvdG90eXBlSW50ZXJuYWxGaWVsZGNvdW50KTsKKwogICAgIGlmICghcGFyZW50Q2xh
c3MuSXNFbXB0eSgpKQogICAgICAgICBmdW5jdGlvbkRlc2NyaXB0b3ItPkluaGVyaXQocGFyZW50
Q2xhc3MpOwogICAgIGlmIChhdHRyaWJ1dGVDb3VudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOERPTVdyYXBwZXIuY3BwCmluZGV4IDM0Mjc3OGFjZjc5NDZhYTBkY2I0Yzc4OWFiMGRi
NzAwOWIwNGM4YjMuLjRkOGMyMjZmM2UyNzJmMGUzNTk2MjFlOGQ0MDY4YzMxOTRiNTNmYjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcApAQCAtMzEsNiAr
MzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgog
CisjaW5jbHVkZSAiVjhBZGFwdG9yRnVuY3Rpb24uaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIK
ICNpbmNsdWRlICJWOERPTVdpbmRvdy5oIgogI2luY2x1ZGUgIlY4SFRNTENvbGxlY3Rpb24uaCIK
QEAgLTEzNyw0ICsxMzgsMjUgQEAgYm9vbCBWOERPTVdyYXBwZXI6OmlzV3JhcHBlck9mVHlwZSh2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIFdyYXBwZXJUeXBlSW5mbyoKICAgICByZXR1cm4g
dHlwZUluZm8gPT0gdHlwZTsKIH0KIAorI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKK3Y4
OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBWOERPTVdyYXBwZXI6OnRvRnVuY3Rpb24odjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IG9iamVjdCkKK3sKKyAgICByZXR1cm4gVjhBZGFwdG9yRnVuY3Rpb246Omdl
dCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KG9iamVjdCkpOworfQorCit2ODo6SGFuZGxl
PHY4OjpGdW5jdGlvbj4gVjhET01XcmFwcGVyOjp0b0Z1bmN0aW9uKHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gb2JqZWN0LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIHY4OjpJc29sYXRlKiBpc29s
YXRlKQoreworICAgIHJldHVybiBWOEFkYXB0b3JGdW5jdGlvbjo6d3JhcChvYmplY3QsIG5hbWUs
IGlzb2xhdGUpOworfQorCit2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4RE9NV3JhcHBlcjo6ZnJv
bUZ1bmN0aW9uKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KQoreworICAgIGlmICghb2Jq
ZWN0LT5Jc0Z1bmN0aW9uKCkpCisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgcmV0dXJuIFY4
QWRhcHRvckZ1bmN0aW9uOjp1bndyYXAodjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+OjpDYXN0KG9i
amVjdCkpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKwogfSAgLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4RE9NV3JhcHBlci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVy
LmgKaW5kZXggMzlkY2U0N2YzZjc1NzI4ZGU3ZGIyOTc2Zjg3NGNiZTdhYjEyY2FhNC4uMTg0NDFh
OWUxMmZlYzJkZWU5ODkyNDljYTM4NDFlYzUzNmFkYTEwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKQEAgLTYyLDYgKzYyLDEzIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgICAgICBzdGF0aWMgYm9vbCBpc0RPTVdyYXBwZXIodjg6OkhhbmRsZTx2ODo6
VmFsdWU+KTsKICAgICAgICAgc3RhdGljIGJvb2wgaXNXcmFwcGVyT2ZUeXBlKHY4OjpIYW5kbGU8
djg6OlZhbHVlPiwgV3JhcHBlclR5cGVJbmZvKik7CisKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1F
TlRTKQorICAgICAgICAvLyBVc2VkIGZvciBWOFdyYXBBc0Z1bmN0aW9uLCB3aGljaCBpcyB1c2Vk
IG9ubHkgYnkgQ1VTVE9NX0VMRU1FTlRTCisgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpG
dW5jdGlvbj4gdG9GdW5jdGlvbih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOworICAgICAgICBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IHRvRnVuY3Rpb24odjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCB2ODo6SXNvbGF0ZSopOworICAgICAgICBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBmcm9tRnVuY3Rpb24odjg6OkhhbmRsZTx2ODo6
T2JqZWN0Pik7CisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKICAgICB9OwogCiAg
ICAgaW5saW5lIHZvaWQgVjhET01XcmFwcGVyOjpzZXROYXRpdmVJbmZvKHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gd3JhcHBlciwgV3JhcHBlclR5cGVJbmZvKiB0eXBlLCB2b2lkKiBvYmplY3QpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SFRNTEN1c3RvbUVsZW1lbnQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmMyNTY1YjA0MWNmZmViZWJkNzc3ZDE0ZTFmNDMwYTFjMGZiNThiOGQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhUTUxDdXN0b21F
bGVtZW50LmNwcApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlY4SFRNTEN1c3RvbUVsZW1lbnQuaCIKKworI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRIZWxwZXJz
LmgiCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiSFRNTEVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJWOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oIgorI2luY2x1
ZGUgIlY4SFRNTFNwYW5FbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIEVO
QUJMRShDVVNUT01fRUxFTUVOVFMpCisKKy8vIEZJWE1FOiBFYWNoIGN1c3RvbSBlbGVtZW50cyBz
aG91bGQgaGF2ZSBpdHMgb3duIEdldFRlbXBsYXRlIG1ldGhvZCBzbyB0aGF0IGl0IGNhbiBiZSBk
ZXJpdmVkIGZyb20gZGlmZmVyZW50IHN1cGVyIGVsZW1lbnQuCitXcmFwcGVyVHlwZUluZm8gVjhI
VE1MQ3VzdG9tRWxlbWVudDo6aW5mbyA9IHsgJlY4SFRNTFNwYW5FbGVtZW50OjpHZXRUZW1wbGF0
ZSwgVjhIVE1MRWxlbWVudDo6ZGVyZWZPYmplY3QsIDAsIDAsIDAsIDAsICZWOEhUTUxTcGFuRWxl
bWVudDo6aW5mbywgV3JhcHBlclR5cGVPYmplY3RQcm90b3R5cGUgfTsKKwordjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBWOEhUTUxDdXN0b21FbGVtZW50OjpjcmVhdGVXcmFwcGVyKFBhc3NSZWZQdHI8
SFRNTEVsZW1lbnQ+IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0
LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3sKKyAgICBBU1NFUlQoaW1wbCk7CisKKyAgICBSZWZQ
dHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiBjb25zdHJ1Y3RvciA9IEN1c3RvbUVsZW1lbnRS
ZWdpc3RyeTo6Y29uc3RydWN0b3JPZihpbXBsLmdldCgpKTsKKyAgICBpZiAoIWNvbnN0cnVjdG9y
KSB7CisgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyVmFsdWUgPSBXZWJDb3Jl
Ojp0b1Y4KHRvSFRNTFVua25vd25FbGVtZW50KGltcGwuZ2V0KCkpLCBjcmVhdGlvbkNvbnRleHQs
IGlzb2xhdGUpOworICAgICAgICBpZiAoIXdyYXBwZXJWYWx1ZS5Jc0VtcHR5KCkgJiYgd3JhcHBl
clZhbHVlLT5Jc09iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD46OkNhc3Qod3JhcHBlclZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4oKTsKKyAgICB9CisKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIg
PSBWOERPTVdyYXBwZXI6OmNyZWF0ZVdyYXBwZXIoY3JlYXRpb25Db250ZXh0LCAmaW5mbywgaW1w
bC5nZXQoKSwgaXNvbGF0ZSk7CisgICAgaWYgKHdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gd3JhcHBlcjsKKworICAgIC8vIFRoZSBjb25zdHJ1Y3RvciBhbmQgcmVnaXN0ZXJlZCBs
aWZlY3ljbGUgY2FsbGJhY2tzIHNob3VsZCBiZSB2aXNpYmxlIG9ubHkgZnJvbSBtYWluIHdvcmxk
LgorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZG4ndCBiZSBuZWVkZWQgb25jZSBlYWNoIGN1c3Rv
bSBlbGVtZW50IGhhcyBpdHMgb3duIEZ1bmN0aW9uVGVtcGxhdGUKKyAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4MTM4CisgICAgaWYgKEN1c3RvbUVsZW1l
bnRIZWxwZXJzOjppc0ZlYXR1cmVBbGxvd2VkKGNyZWF0aW9uQ29udGV4dC0+Q3JlYXRpb25Db250
ZXh0KCkpKSB7CisgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyVmFsdWUgPSBX
ZWJDb3JlOjp0b1Y4KGNvbnN0cnVjdG9yLmdldCgpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUp
OworICAgICAgICBpZiAod3JhcHBlclZhbHVlLklzRW1wdHkoKSB8fCAhd3JhcHBlclZhbHVlLT5J
c09iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKTsK
KyAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjb25zdHJ1Y3RvcldhcHBlciA9IHY4OjpI
YW5kbGU8djg6Ok9iamVjdD46OkNhc3Qod3JhcHBlclZhbHVlKTsKKyAgICAgICAgd3JhcHBlci0+
U2V0UHJvdG90eXBlKGNvbnN0cnVjdG9yV2FwcGVyLT5HZXQodjhTdHJpbmcoInByb3RvdHlwZSIs
IGlzb2xhdGUpKSk7CisgICAgfQorCisgICAgVjhET01XcmFwcGVyOjphc3NvY2lhdGVPYmplY3RX
aXRoV3JhcHBlcihpbXBsLCAmaW5mbywgd3JhcHBlciwgaXNvbGF0ZSwgV3JhcHBlckNvbmZpZ3Vy
YXRpb246OkRlcGVuZGVudCk7CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisKKyNlbmRpZiAvLyBF
TkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNGJmYmYzOWZhNzBkM2Y2ZmY3ZDI4MDI3NjJiNDlmNDFlZDI2NTEyYwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SFRNTEN1c3RvbUVsZW1lbnQuaApA
QCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBWOEhUTUxDdXN0b21FbGVtZW50X2gKKyNkZWZpbmUgVjhI
VE1MQ3VzdG9tRWxlbWVudF9oCisKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJW
OERPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJWOEhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhI
VE1MVW5rbm93bkVsZW1lbnQuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEhUTUxFbGVtZW50OworCisjaWYgRU5BQkxFKENVU1RP
TV9FTEVNRU5UUykKKworY2xhc3MgVjhIVE1MQ3VzdG9tRWxlbWVudCB7CitwdWJsaWM6CisgICAg
c3RhdGljIFdyYXBwZXJUeXBlSW5mbyBpbmZvOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IHRvVjgoSFRNTEVsZW1lbnQqLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9u
Q29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqID0gMCk7Cisg
ICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRlV3JhcHBlcihQYXNzUmVmUHRy
PEhUTUxFbGVtZW50Piwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Piwgdjg6Oklzb2xhdGUqKTsKK307
CisKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4SFRNTEN1c3RvbUVsZW1lbnQ6OnRv
VjgoSFRNTEVsZW1lbnQqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250
ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFkoIWltcGwpKQor
ICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh2OE51bGxXaXRoQ2hl
Y2soaXNvbGF0ZSkpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IERPTURh
dGFTdG9yZTo6Z2V0V3JhcHBlcihpbXBsLCBpc29sYXRlKTsKKyAgICBpZiAoIXdyYXBwZXIuSXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAgICByZXR1cm4gVjhIVE1MQ3VzdG9t
RWxlbWVudDo6Y3JlYXRlV3JhcHBlcihpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwor
fQorCisjZWxzZSAvLyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCitjbGFzcyBWOEhUTUxDdXN0
b21FbGVtZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3
cmFwKEhUTUxFbGVtZW50Kiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQg
PSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiA9IDApOworfTsKKworaW5s
aW5lIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gSFRNTEN1c3RvbUVsZW1lbnQ6OnRvVjgoSFRNTEVs
ZW1lbnQqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6
SXNvbGF0ZSogaXNvbGF0ZSkKK3sKKyAgICByZXR1cm4gdG9WOCh0b0hUTUxVbmtub3duRWxlbWVu
dChpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKK30KKworI2VuZGlmIC8vIEVOQUJM
RShDVVNUT01fRUxFTUVOVFMpCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFY4SFRNTEN1c3RvbUVsZW1lbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmgKaW5kZXggNTA4YmRkMzYyODA2YTcxMDQ2Y2QzZDYyZjAz
NWFjZTJiMjI2MWFiYy4uMDNjZDU3ZmQ4OTBmMzExZTQyOTU0NTgwZDQ2MWExNmY4ZWI0NDhkZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIaWRkZW5Qcm9wZXJ0eU5h
bWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFt
ZS5oCkBAIC00NSw2ICs0NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBWKHNjcmlwdFN0
YXRlKSBcCiAgICAgVihzbGVlcEZ1bmN0aW9uKSBcCiAgICAgVihzdGF0ZSkgXAorICAgIFYoYWRh
cHRvckZ1bmN0aW9uUGVlcikgXAogICAgIFYodG9TdHJpbmdTdHJpbmcpIFwKICAgICBWKHR5cGVk
QXJyYXlIaWRkZW5Db3B5TWV0aG9kKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhDdXN0b21FbGVtZW50Q29uc3RydWN0b3JDdXN0b20uY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9y
Q3VzdG9tLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNDM3NGY2NzY4ODBjOTI4NTRmMjg4OTQ2YTYzOTE1MWEw
YjNiMjM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yQ3VzdG9tLmNwcApAQCAtMCwwICsxLDU0IEBA
CisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyogCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisqIG1ldDoKKyogCisqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyogZGlzdHJp
YnV0aW9uLgorKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqIAorKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVjhDdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaCIKKworI2luY2x1ZGUgIkN1c3RvbUVs
ZW1lbnRDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4
SFRNTEN1c3RvbUVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gVjhDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6OmNhbGxBc0Z1bmN0aW9uQ2Fs
bGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBpZiAoIWFyZ3MuSXNDb25z
dHJ1Y3RDYWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigiRE9NIG9iamVjdCBj
b25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uIiwgYXJncy5HZXRJc29s
YXRlKCkpOworICAgIGlmIChDb25zdHJ1Y3Rvck1vZGU6OmN1cnJlbnQoKSA9PSBDb25zdHJ1Y3Rv
ck1vZGU6OldyYXBFeGlzdGluZ09iamVjdCkKKyAgICAgICAgcmV0dXJuIGFyZ3MuSG9sZGVyKCk7
CisKKyAgICBDdXN0b21FbGVtZW50Q29uc3RydWN0b3IqIGltcGwgPSB0b05hdGl2ZShhcmdzLkhv
bGRlcigpKTsKKyAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IGVsZW1lbnQgPSBpbXBsLT5jcmVhdGVF
bGVtZW50KCk7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm4gdjhVbmRlZmluZWQo
KTsKKyAgICByZXR1cm4gVjhIVE1MQ3VzdG9tRWxlbWVudDo6dG9WOChlbGVtZW50LmdldCgpLCBh
cmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50Q29uc3Ry
dWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNjI0OTczMmE1MzQxOGRiODVmNjE1NDlhNjk5MmNiOWFjYTIxODljYwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50Q29uc3Ry
dWN0b3IuY3BwCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmgiCisKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRT
KQorCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudEhlbHBlcnMuaCIKKyNpbmNsdWRlICJEb2N1bWVu
dC5oIgorI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25z
dHJ1Y3Rvcj4gQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjpjcmVhdGUoU2NyaXB0U3RhdGUqIHN0
YXRlLCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU2NyaXB0VmFsdWUmIHByb3RvdHlwZSkKK3sKKyAgICBS
ZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiBjcmVhdGVkID0gYWRvcHRSZWYobmV3IEN1
c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcihkb2N1bWVudCwgdGFnTmFtZSwgbmFtZSkpOworICAgIGlm
ICghQ3VzdG9tRWxlbWVudEhlbHBlcnM6OmluaXRpYWxpemVDb25zdHJ1Y3RvcldyYXBwZXIoY3Jl
YXRlZC5nZXQoKSwgcHJvdG90eXBlLCBzdGF0ZSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJl
dHVybiBjcmVhdGVkLnJlbGVhc2UoKTsKK30KKworQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjpD
dXN0b21FbGVtZW50Q29uc3RydWN0b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgOiBDb250ZXh0RGVzdHJ1
Y3Rpb25PYnNlcnZlcihkb2N1bWVudCkKKyAgICAsIG1fdGFnTmFtZSh0YWdOYW1lKQorICAgICwg
bV9uYW1lKG5hbWUpCit7Cit9CisKK0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6fkN1c3RvbUVs
ZW1lbnRDb25zdHJ1Y3RvcigpCit7Cit9CisKK1Bhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IEN1c3Rv
bUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlRWxlbWVudCgpIGNvbnN0Cit7CisgICAgaWYgKCFk
b2N1bWVudCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gSFRNTEVsZW1lbnQ6OmNy
ZWF0ZShtX3RhZ05hbWUsIGRvY3VtZW50KCkpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUo
Q1VTVE9NX0VMRU1FTlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVs
ZW1lbnRDb25zdHJ1Y3Rvci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRDb25z
dHJ1Y3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU3OGViMTcxNWM2YTY1MDJiNDkxY2ZkY2RmYTEwMzk2MjM2
NGJiZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVu
dENvbnN0cnVjdG9yLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ3VzdG9tRWxlbWVudENvbnN0
cnVjdG9yX2gKKyNkZWZpbmUgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yX2gKKworI2lmIEVOQUJM
RShDVVNUT01fRUxFTUVOVFMpCisKKyNpbmNsdWRlICJDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZl
ci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgor
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmlu
Zy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERvY3VtZW50OworY2xhc3MgSFRN
TEVsZW1lbnQ7CitjbGFzcyBTY3JpcHRTdGF0ZTsKK2NsYXNzIFNjcmlwdFZhbHVlOworCitjbGFz
cyBDdXN0b21FbGVtZW50Q29uc3RydWN0b3IgOiBwdWJsaWMgUmVmQ291bnRlZDxDdXN0b21FbGVt
ZW50Q29uc3RydWN0b3I+ICwgcHVibGljIENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IGNy
ZWF0ZShTY3JpcHRTdGF0ZSosIERvY3VtZW50KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0
IFN0cmluZyYsIGNvbnN0IFNjcmlwdFZhbHVlJik7CisKKyAgICB2aXJ0dWFsIH5DdXN0b21FbGVt
ZW50Q29uc3RydWN0b3IoKTsKKworICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PERvY3VtZW50Kj4obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsgfQor
ICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUoKSBjb25zdCB7IHJldHVybiBtX3RhZ05h
bWU7IH0KKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25h
bWU7IH0KKworICAgIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnQoKSBjb25z
dDsKKyAgICAKK3ByaXZhdGU6CisgICAgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKERvY3VtZW50
KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IFN0cmluZyYpOworCisgICAgUXVhbGlmaWVk
TmFtZSBtX3RhZ05hbWU7CisgICAgQXRvbWljU3RyaW5nIG1fbmFtZTsKK307CisKK30KKworI2Vu
ZGlmIC8vIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKKyNlbmRpZiAvLyBDdXN0b21FbGVtZW50
Q29uc3RydWN0b3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1l
bnRDb25zdHJ1Y3Rvci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudENvbnN0
cnVjdG9yLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40N2M1MzBmODdkZWFlNjdmYTVmZGExZTEzOWIwNWNiOThh
MDczYjBkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1l
bnRDb25zdHJ1Y3Rvci5pZGwKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1sKKyAgICBD
b25kaXRpb25hbD1DVVNUT01fRUxFTUVOVFMsCisgICAgVjhFbmFibGVkQXRSdW50aW1lPWN1c3Rv
bURPTUVsZW1lbnRzLAorICAgIFY4V3JhcEFzRnVuY3Rpb24sCisgICAgQ3VzdG9tQ2FsbAorXSBp
bnRlcmZhY2UgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yIHsKK307CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgxZjJhYzFmODE2ODMz
NjBkNzQwMTE4N2FkNjdkYmQ3NjQyYTg1YzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmNwcApAQCAtMCwwICsxLDE3MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50UmVnaXN0cnku
aCIKKworI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkN1
c3RvbUVsZW1lbnRIZWxwZXJzLmgiCisjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgorI2luY2x1ZGUg
IkRvY3VtZW50LmgiCisjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisjaW5jbHVkZSA8d3Rm
L0FTQ0lJQ1R5cGUuaD4KKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIK
KyNlbmRpZgorCisjaWYgRU5BQkxFKE1BVEhNTCkKKyNpbmNsdWRlICJNYXRoTUxOYW1lcy5oIgor
I2VuZGlmCisKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0N1c3RvbUVsZW1lbnRSZWdpc3RyeTo6Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5KERvY3Vt
ZW50KiBkb2N1bWVudCkKKyAgICA6IENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyKGRvY3VtZW50
KQoreworfQorCitDdXN0b21FbGVtZW50UmVnaXN0cnk6On5DdXN0b21FbGVtZW50UmVnaXN0cnko
KQoreworfQorCitQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gQ3VzdG9tRWxl
bWVudFJlZ2lzdHJ5Ojpjb25zdHJ1Y3Rvck9mKEhUTUxFbGVtZW50KiBlbGVtZW50KQoreworICAg
IFJlZlB0cjxDdXN0b21FbGVtZW50UmVnaXN0cnk+IHNlbGYgPSBlbGVtZW50LT5kb2N1bWVudCgp
LT5yZWdpc3RyeSgpOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIHNlbGYtPmZpbmQoZWxlbWVudC0+dGFnUU5hbWUoKSk7Cit9CisKK2Jvb2wgQ3VzdG9tRWxl
bWVudFJlZ2lzdHJ5Ojppc1ZhbGlkTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCit7Cisg
ICAgc2l6ZV90IGh5cGhlblBvc2l0aW9uID0gbmFtZS5maW5kKCctJyk7CisgICAgaWYgKGh5cGhl
blBvc2l0aW9uID09IG5vdEZvdW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKFZlY3RvcjxBdG9taWNTdHJpbmc+LCByZXNlcnZlZE5hbWVzLCAoKSk7
CisgICAgaWYgKHJlc2VydmVkTmFtZXMuaXNFbXB0eSgpKSB7CisjaWYgRU5BQkxFKE1BVEhNTCkK
KyAgICAgICAgcmVzZXJ2ZWROYW1lcy5hcHBlbmQoTWF0aE1MTmFtZXM6OmFubm90YXRpb25feG1s
VGFnLmxvY2FsTmFtZSgpKTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKFNWRykKKyAgICAgICAgcmVz
ZXJ2ZWROYW1lcy5hcHBlbmQoU1ZHTmFtZXM6OmNvbG9yX3Byb2ZpbGVUYWcubG9jYWxOYW1lKCkp
OworICAgICAgICByZXNlcnZlZE5hbWVzLmFwcGVuZChTVkdOYW1lczo6Zm9udF9mYWNlVGFnLmxv
Y2FsTmFtZSgpKTsKKyAgICAgICAgcmVzZXJ2ZWROYW1lcy5hcHBlbmQoU1ZHTmFtZXM6OmZvbnRf
ZmFjZV9zcmNUYWcubG9jYWxOYW1lKCkpOworICAgICAgICByZXNlcnZlZE5hbWVzLmFwcGVuZChT
VkdOYW1lczo6Zm9udF9mYWNlX3VyaVRhZy5sb2NhbE5hbWUoKSk7CisgICAgICAgIHJlc2VydmVk
TmFtZXMuYXBwZW5kKFNWR05hbWVzOjpmb250X2ZhY2VfZm9ybWF0VGFnLmxvY2FsTmFtZSgpKTsK
KyAgICAgICAgcmVzZXJ2ZWROYW1lcy5hcHBlbmQoU1ZHTmFtZXM6OmZvbnRfZmFjZV9uYW1lVGFn
LmxvY2FsTmFtZSgpKTsKKyAgICAgICAgcmVzZXJ2ZWROYW1lcy5hcHBlbmQoU1ZHTmFtZXM6Om1p
c3NpbmdfZ2x5cGhUYWcubG9jYWxOYW1lKCkpOworI2VuZGlmCisgICAgfQorCisgICAgaWYgKFdU
Rjo6bm90Rm91bmQgIT0gcmVzZXJ2ZWROYW1lcy5maW5kKG5hbWUpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICByZXR1cm4gRG9jdW1lbnQ6OmlzVmFsaWROYW1lKG5hbWUuc3RyaW5nKCkp
OworfQorCitQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gQ3VzdG9tRWxlbWVu
dFJlZ2lzdHJ5OjpyZWdpc3RlckVsZW1lbnQoU2NyaXB0U3RhdGUqIHN0YXRlLCBjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWUsIGNvbnN0IERpY3Rpb25hcnkmIG9wdGlvbnMsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIFJlZlB0cjxDdXN0b21FbGVtZW50UmVnaXN0cnk+IHByb3RlY3QodGhpcyk7
CisKKyAgICBpZiAoIUN1c3RvbUVsZW1lbnRIZWxwZXJzOjppc0ZlYXR1cmVBbGxvd2VkKHN0YXRl
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBRdWFsaWZpZWROYW1lIG5ld05hbWUobnVsbEF0
b20sIG5hbWUubG93ZXIoKSwgSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSk7CisgICAgaWYg
KCFpc1ZhbGlkTmFtZShuZXdOYW1lLmxvY2FsTmFtZSgpKSkgeworICAgICAgICBlYyA9IElOVkFM
SURfQ0hBUkFDVEVSX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgICAgICAKKyAg
ICBpZiAoZmluZChuZXdOYW1lKSkgeworICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBTY3JpcHRWYWx1ZSBwcm90b3R5cGVWYWx1
ZTsKKyAgICBpZiAoIW9wdGlvbnMuZ2V0KCJwcm90b3R5cGUiLCBwcm90b3R5cGVWYWx1ZSkpIHsK
KyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGUgZGVmYXVsdCB2YWx1ZSBoYW5kbGluZy4K
KyAgICAgICAgLy8gQ3VycmVudGx5IGRlZmF1bHQgdmFsdWUgb2YgdGhlICJwcm90b3R5cGUiIHBh
cmFtZXRlciwgd2hpY2gKKyAgICAgICAgLy8gaXMgSFRNTFNwYW5FbGVtZW50LnByb3RvdHlwZSwg
aGFzIGFuIGFtYmlndWl0eSBhYm91dCBpdHMKKyAgICAgICAgLy8gYmVoYXZpb3IuIFRoZSBzcGVj
IHNob3VsZCBiZSBmaXhlZCBiZWZvcmUgV2ViS2l0IGltcGxlbWVudHMKKyAgICAgICAgLy8gaXQu
IGh0dHBzOi8vd3d3LnczLm9yZy9CdWdzL1B1YmxpYy9zaG93X2J1Zy5jZ2k/aWQ9MjA4MDEKKyAg
ICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
CisgICAgaWYgKCFDdXN0b21FbGVtZW50SGVscGVyczo6aXNWYWxpZFByb3RvdHlwZVBhcmFtZXRl
cihwcm90b3R5cGVWYWx1ZSwgc3RhdGUpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9F
UlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICAvLyBBbiBzY3JpcHQgZXhl
Y3V0aW9uIGNvdWxkIGhhcHBlbiBpbiBpc1ZhbGlkUHJvdG90eXBlUGFyYW1ldGVyKCksIHdoaWNo
IGtpbGxzIHRoZSBkb2N1bWVudC4KKyAgICBpZiAoIWRvY3VtZW50KCkpIHsKKyAgICAgICAgZWMg
PSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUmVm
UHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gZnJlc2ggPSBDdXN0b21FbGVtZW50Q29uc3Ry
dWN0b3I6OmNyZWF0ZShzdGF0ZSwgZG9jdW1lbnQoKSwgbmV3TmFtZSwgIkhUTUxDdXN0b21FbGVt
ZW50IiwgcHJvdG90eXBlVmFsdWUpOworICAgIGlmICghZnJlc2gpIHsKKyAgICAgICAgZWMgPSBJ
TlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgICAgICAKKyAg
ICBtX2NvbnN0cnVjdG9ycy5hZGQoZnJlc2gtPnRhZ05hbWUoKS5pbXBsKCksIGZyZXNoKTsKKyAg
ICByZXR1cm4gZnJlc2g7Cit9CisKK1Bhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9y
PiBDdXN0b21FbGVtZW50UmVnaXN0cnk6OmZpbmQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkg
Y29uc3QKK3sKKyAgICBDb25zdHJ1Y3Rvck1hcDo6Y29uc3RfaXRlcmF0b3IgZm91bmQgPSBtX2Nv
bnN0cnVjdG9ycy5maW5kKG5hbWUuaW1wbCgpKTsKKyAgICByZXR1cm4gKGZvdW5kICE9IG1fY29u
c3RydWN0b3JzLmVuZCgpKSA/IGZvdW5kLT52YWx1ZSA6IDA7Cit9CisKK1Bhc3NSZWZQdHI8SFRN
TEVsZW1lbnQ+IEN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6Y3JlYXRlRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiBuYW1lKSBjb25zdAoreworICAgIGlmIChSZWZQdHI8Q3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yPiBmb3VuZCA9IGZpbmQobmFtZSkpCisgICAgICAgIHJldHVybiBmb3VuZC0+Y3Jl
YXRlRWxlbWVudCgpOworICAgIHJldHVybiAwOworfQorCitpbmxpbmUgRG9jdW1lbnQqIEN1c3Rv
bUVsZW1lbnRSZWdpc3RyeTo6ZG9jdW1lbnQoKSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxEb2N1bWVudCo+KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7Cit9CisKK30KKworI2Vu
ZGlmIC8vIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9t
RWxlbWVudFJlZ2lzdHJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2I1OGMxMzkwNTQ4OGM0YmEzMGYwMDkzYzZh
ZTYyOWQ3NGUwNzM2MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0
b21FbGVtZW50UmVnaXN0cnkuaApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlv
bi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDdXN0
b21FbGVtZW50UmVnaXN0cnlfaAorI2RlZmluZSBDdXN0b21FbGVtZW50UmVnaXN0cnlfaAorCisj
aWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKworI2luY2x1ZGUgIkNvbnRleHREZXN0cnVjdGlv
bk9ic2VydmVyLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIlF1YWxp
ZmllZE5hbWUuaCIKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgIlN1cHBsZW1l
bnRhYmxlLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEN1c3RvbUVsZW1lbnRDb25zdHJ1
Y3RvcjsKK2NsYXNzIERpY3Rpb25hcnk7CitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEhUTUxFbGVt
ZW50OworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKK2NsYXNzIFF1YWxpZmllZE5hbWU7
CisKK2NsYXNzIEN1c3RvbUVsZW1lbnRSZWdpc3RyeSA6IHB1YmxpYyBSZWZDb3VudGVkPEN1c3Rv
bUVsZW1lbnRSZWdpc3RyeT4gLCBwdWJsaWMgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIgewor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEN1c3RvbUVsZW1lbnRSZWdpc3RyeSk7IFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IEN1c3RvbUVsZW1lbnRSZWdp
c3RyeShEb2N1bWVudCopOworICAgIH5DdXN0b21FbGVtZW50UmVnaXN0cnkoKTsKKworICAgIFBh
c3NSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiByZWdpc3RlckVsZW1lbnQoV2ViQ29y
ZTo6U2NyaXB0U3RhdGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IERpY3Rpb25h
cnkmIG9wdGlvbnMsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPEN1c3RvbUVsZW1l
bnRDb25zdHJ1Y3Rvcj4gZmluZChjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7CisgICAgUGFz
c1JlZlB0cjxIVE1MRWxlbWVudD4gY3JlYXRlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJikg
Y29uc3Q7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3Q7CisKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IGNvbnN0cnVjdG9yT2YoSFRNTEVsZW1l
bnQqKTsKKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZE5hbWUoY29uc3Qg
QXRvbWljU3RyaW5nJik7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8UXVhbGlmaWVkTmFtZTo6UXVh
bGlmaWVkTmFtZUltcGwqLCBSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiA+Q29uc3Ry
dWN0b3JNYXA7CisKKyAgICBDb25zdHJ1Y3Rvck1hcCBtX2NvbnN0cnVjdG9yczsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDVVNUT01fRUxFTUVOVFMp
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDAyYzkyYTFjYjk0MDA0OWZjMGY5
ZjUzMzY4OWY0NGNhYmNkNDZkN2UuLjU3MzQ2YTViYTU1MjVkMTIwMjM5MTc5NGM1M2YxMjU1MTZk
OWUyNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNDYsMTEgKzQ2LDE0IEBACiAjaW5j
bHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCiAjaW5jbHVkZSAiQ29udGV4dEZlYXR1cmVz
LmgiCiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudENvbnN0
cnVjdG9yLmgiCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAi
RE9NSW1wbGVtZW50YXRpb24uaCIKICNpbmNsdWRlICJET01OYW1lZEZsb3dDb2xsZWN0aW9uLmgi
CiAjaW5jbHVkZSAiRE9NU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5j
bHVkZSAiRGF0ZUNvbXBvbmVudHMuaCIKKyNpbmNsdWRlICJEaWN0aW9uYXJ5LmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnRFdmVudFF1ZXVlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgog
I2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCkBAIC02NzQsNiArNjc3LDEwIEBAIHZvaWQgRG9j
dW1lbnQ6OnJlbW92ZWRMYXN0UmVmKCkKICAgICAgICAgbV9mdWxsU2NyZWVuRWxlbWVudFN0YWNr
LmNsZWFyKCk7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisgICAgICAg
IG1fcmVnaXN0cnkuY2xlYXIoKTsKKyNlbmRpZgorCiAgICAgICAgIGRldGFjaFBhcnNlcigpOwog
CiAgICAgICAgIC8vIHJlbW92ZURldGFjaGVkQ2hpbGRyZW4oKSBkb2Vzbid0IGFsd2F5cyB1bnJl
Z2lzdGVyIElEcywKQEAgLTg0Miw2ICs4NDksMjUgQEAgUGFzc1JlZlB0cjxFbGVtZW50PiBEb2N1
bWVudDo6Y3JlYXRlRWxlbWVudChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkMK
ICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBuYW1lLCBu
dWxsQXRvbSksIGZhbHNlKTsKIH0KIAorI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCitQYXNz
UmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gRG9jdW1lbnQ6OnJlZ2lzdGVyRWxlbWVu
dChXZWJDb3JlOjpTY3JpcHRTdGF0ZSogc3RhdGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJuIHJlZ2lzdGVyRWxlbWVudChzdGF0ZSwg
bmFtZSwgRGljdGlvbmFyeSgpLCBlYyk7Cit9CisKK1Bhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yPiBEb2N1bWVudDo6cmVnaXN0ZXJFbGVtZW50KFdlYkNvcmU6OlNjcmlwdFN0YXRl
KiBzdGF0ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBEaWN0aW9uYXJ5JiBvcHRp
b25zLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIW1fcmVnaXN0cnkpCisgICAgICAg
IG1fcmVnaXN0cnkgPSBhZG9wdFJlZihuZXcgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5KHRoaXMpKTsK
KyAgICByZXR1cm4gbV9yZWdpc3RyeS0+cmVnaXN0ZXJFbGVtZW50KHN0YXRlLCBuYW1lLCBvcHRp
b25zLCBlYyk7Cit9CisKK1Bhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5PiBEb2N1bWVu
dDo6cmVnaXN0cnkoKSBjb25zdAoreworICAgIHJldHVybiBtX3JlZ2lzdHJ5OworfQorI2VuZGlm
IC8vIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gRG9jdW1lbnQ6OmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKQogewogICAgIHJldHVybiBEb2N1
bWVudEZyYWdtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4
IDEyNjQzOGQ3MGVmMDE2MWJjMmFmZThmY2VhNzY4YTRiYzg3MDM3YWIuLmQ4Yjk4NjMyOTY5YjE5
YmUwOGExYjQ3ZDZhZjk0M2JkNDA3YjQ4ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC03MSw2
ICs3MSw4IEBAIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQ7CiBjbGFzcyBDaGFyYWN0ZXJE
YXRhOwogY2xhc3MgQ29tbWVudDsKIGNsYXNzIENvbnRleHRGZWF0dXJlczsKK2NsYXNzIEN1c3Rv
bUVsZW1lbnRDb25zdHJ1Y3RvcjsKK2NsYXNzIEN1c3RvbUVsZW1lbnRSZWdpc3RyeTsKIGNsYXNz
IERPTUltcGxlbWVudGF0aW9uOwogY2xhc3MgRE9NTmFtZWRGbG93Q29sbGVjdGlvbjsKIGNsYXNz
IERPTVNlbGVjdGlvbjsKQEAgLTExNjUsNiArMTE2NywxMiBAQCBwdWJsaWM6CiAgICAgVGV4dEF1
dG9zaXplciogdGV4dEF1dG9zaXplcigpIHsgcmV0dXJuIG1fdGV4dEF1dG9zaXplci5nZXQoKTsg
fQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorICAgIFBhc3NSZWZQdHI8
Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiByZWdpc3RlckVsZW1lbnQoV2ViQ29yZTo6U2NyaXB0
U3RhdGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQ
YXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gcmVnaXN0ZXJFbGVtZW50KFdlYkNv
cmU6OlNjcmlwdFN0YXRlKiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBEaWN0aW9u
YXJ5JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxDdXN0b21FbGVt
ZW50UmVnaXN0cnk+IHJlZ2lzdHJ5KCkgY29uc3Q7CisjZW5kaWYKKwogICAgIHZvaWQgYWRqdXN0
RmxvYXRRdWFkc0ZvclNjcm9sbEFuZEFic29sdXRlWm9vbUFuZEZyYW1lU2NhbGUoVmVjdG9yPEZs
b2F0UXVhZD4mLCBSZW5kZXJPYmplY3QqKTsKICAgICB2b2lkIGFkanVzdEZsb2F0UmVjdEZvclNj
cm9sbEFuZEFic29sdXRlWm9vbUFuZEZyYW1lU2NhbGUoRmxvYXRSZWN0JiwgUmVuZGVyT2JqZWN0
Kik7CiAKQEAgLTE1NDMsNiArMTU1MSwxMCBAQCBwcml2YXRlOgogICAgIE93blB0cjxUZXh0QXV0
b3NpemVyPiBtX3RleHRBdXRvc2l6ZXI7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDVVNUT01fRUxF
TUVOVFMpCisgICAgUmVmUHRyPEN1c3RvbUVsZW1lbnRSZWdpc3RyeT4gbV9yZWdpc3RyeTsKKyNl
bmRpZgorCiAgICAgYm9vbCBtX3NjaGVkdWxlZFRhc2tzQXJlU3VzcGVuZGVkOwogICAgIAogICAg
IGJvb2wgbV92aXN1YWxVcGRhdGVzQWxsb3dlZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9tYWtlX25hbWVzLnBsIGIvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKaW5k
ZXggNzIzM2UzMjg0ZTExODFiYWI5ZDhiZGU3NWEwZDRhMTE2ZjQ0YmVkMi4uM2UyYmUyYzliMmM5
MjYzNjYxMGVkZjYyOTJkZjRhZTIyMmRlYjEyZSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL21ha2VfbmFtZXMucGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwK
QEAgLTExNzIsOCArMTE3Miw4IEBAIEVORAogOwogICAgIH0gZWxzaWYgKCR3cmFwcGVyRmFjdG9y
eVR5cGUgZXEgIlY4IikgewogICAgICAgICBwcmludCBGIDw8RU5ECisjaW5jbHVkZSAiVjhIVE1M
Q3VzdG9tRWxlbWVudC5oIgogI2luY2x1ZGUgIlY4JHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1l
bnQuaCIKLSAgICAgICAgCiAjaW5jbHVkZSA8djguaD4KIEVORAogOwpAQCAtMTI3NCw2ICsxMjc0
LDExIEBAIEVORAogICAgIHJldHVybiBWOFNWR0VsZW1lbnQ6OmNyZWF0ZVdyYXBwZXIoZWxlbWVu
dCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIEVORAogOworICAgICAgICB9IGVsc2lmICgk
cGFyYW1ldGVyc3tuYW1lc3BhY2V9IGVxICJIVE1MIikgeworICAgICAgICAgICAgcHJpbnQgRiA8
PEVORAorICAgIHJldHVybiBWOEhUTUxDdXN0b21FbGVtZW50Ojp0b1Y4KGVsZW1lbnQsIGNyZWF0
aW9uQ29udGV4dCwgaXNvbGF0ZSk7CitFTkQKKzsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIHByaW50IEYgPDxFTkQKICAgICByZXR1cm4gd3JhcCh0byRwYXJhbWV0ZXJze2ZhbGxiYWNr
SW50ZXJmYWNlTmFtZX0oZWxlbWVudCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5pZGwgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxEb2N1bWVudC5pZGwKaW5kZXggMjVmMGE1YzM5MDM1MTE0YjVkZjE5MTdj
Mjk1MjkxNjBhOWI0N2M5OC4uN2MyOWZjYjVkYzE4OTJhYWFjNzJmNTI0MDM2M2VlMmMyNGQyM2Q5
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaWRsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmlkbApAQCAtNTMsNiArNTMsMTEgQEAK
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgRWxlbWVudCBhY3RpdmVFbGVtZW50OwogICAgIGJvb2xl
YW4gaGFzRm9jdXMoKTsKIAorI2lmIGRlZmluZWQoRU5BQkxFX0NVU1RPTV9FTEVNRU5UUykgJiYg
RU5BQkxFX0NVU1RPTV9FTEVNRU5UUworICAgIFtWOEVuYWJsZWRBdFJ1bnRpbWU9Y3VzdG9tRE9N
RWxlbWVudHMsIENvbmRpdGlvbmFsPUNVU1RPTV9FTEVNRU5UUywgSW1wbGVtZW50ZWRBcz1yZWdp
c3RlckVsZW1lbnQsIENhbGxXaXRoPVNjcmlwdFN0YXRlXQorICAgIEN1c3RvbUVsZW1lbnRDb25z
dHJ1Y3RvciB3ZWJraXRSZWdpc3RlcihpbiBET01TdHJpbmcgbmFtZSwgaW4gW09wdGlvbmFsXSBE
aWN0aW9uYXJ5IG9wdGlvbnMpIHJhaXNlcyhET01FeGNlcHRpb24pOworI2VuZGlmCisKICAgICAv
LyBEZXByZWNhdGVkIGF0dHJpYnV0ZXMKICAgICAgICAgICAgICBbVHJlYXROdWxsQXM9TnVsbFN0
cmluZ10gYXR0cmlidXRlIERPTVN0cmluZyBiZ0NvbG9yOwogICAgICAgICAgICAgIFtUcmVhdE51
bGxBcz1OdWxsU3RyaW5nXSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGZnQ29sb3I7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL2ZlYXR1cmVzLmd5cGkKaW5kZXggNzdiMmM3NmM0NGEzMmZhOTMzMDRjZTRiY2QwN2Uy
MTA1ZmU5YzU1OC4uMTJlOTBmYjllYjdmYzhkNGExOThhOTU4YzE1Mjc2ZDcxM2Y4ZWI2MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQpAQCAtNTQsNiArNTQsNyBAQAogICAgICAg
J0VOQUJMRV9DU1NfVFJBTlNGT1JNU19BTklNQVRJT05TX1VOUFJFRklYRUQ9MCcsCiAgICAgICAn
RU5BQkxFX0NTU19WQVJJQUJMRVM9MScsCiAgICAgICAnRU5BQkxFX0NTU19TVElDS1lfUE9TSVRJ
T049MScsCisgICAgICAnRU5BQkxFX0NVU1RPTV9FTEVNRU5UUz0xJywKICAgICAgICdFTkFCTEVf
Q1VTVE9NX1NDSEVNRV9IQU5ETEVSPTAnLAogICAgICAgJ0VOQUJMRV9EQVNIQk9BUkRfU1VQUE9S
VD0wJywKICAgICAgICdFTkFCTEVfREFUQV9UUkFOU0ZFUl9JVEVNUz0xJywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlJ1bnRpbWVGZWF0dXJlcy5oIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUnVudGltZUZlYXR1cmVzLmgKaW5kZXggZTM5
NGQ3NWY0YzdhMWI5ZTBkNTJjMzliYjQ2MWZlZTE4Y2FiOWEyMC4uYTA1NWYwODJiNzE1YzMzMDJi
MzFkMzBlZjdlZWZiZDA0N2Y0YTVjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViUnVudGltZUZlYXR1cmVzLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViUnVudGltZUZlYXR1cmVzLmgKQEAgLTEyNSw2ICsxMjUsOSBAQCBwdWJsaWM6
CiAgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgdm9pZCBlbmFibGVTaGFkb3dET00oYm9vbCk7CiAg
ICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgYm9vbCBpc1NoYWRvd0RPTUVuYWJsZWQoKTsKIAorICAg
IFdFQktJVF9FWFBPUlQgc3RhdGljIHZvaWQgZW5hYmxlQ3VzdG9tRE9NRWxlbWVudHMoYm9vbCk7
CisgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgYm9vbCBpc0N1c3RvbURPTUVsZW1lbnRzRW5hYmxl
ZCgpOworCiAgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgdm9pZCBlbmFibGVTdHlsZVNjb3BlZChi
b29sKTsKICAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBib29sIGlzU3R5bGVTY29wZWRFbmFibGVk
KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlJ1bnRpbWVG
ZWF0dXJlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJSdW50aW1lRmVhdHVy
ZXMuY3BwCmluZGV4IGExODQzNGUyOWVmMTAwMmNkMzM5OGRiMjU4NGY4NDdkZDc0ODg5OWEuLjUx
YmZkZmEwYjgyNzhhMDczZjRhYTY2YTM5YzJkNGRkYzRiYzNlMzEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlJ1bnRpbWVGZWF0dXJlcy5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUnVudGltZUZlYXR1cmVzLmNwcApAQCAtNDgxLDYgKzQ4
MSwyNSBAQCBib29sIFdlYlJ1bnRpbWVGZWF0dXJlczo6aXNTaGFkb3dET01FbmFibGVkKCkKICNl
bmRpZgogfQogCit2b2lkIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlQ3VzdG9tRE9NRWxlbWVu
dHMoYm9vbCBlbmFibGUpCit7CisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKyAgICBSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzZXRDdXN0b21ET01FbGVtZW50cyhlbmFibGUpOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oZW5hYmxlKTsKKyNlbmRpZgorfQorCitib29sIFdlYlJ1bnRpbWVG
ZWF0dXJlczo6aXNDdXN0b21ET01FbGVtZW50c0VuYWJsZWQoKQoreworI2lmIEVOQUJMRShDVVNU
T01fRUxFTUVOVFMpCisgICAgcmV0dXJuIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmN1c3RvbURP
TUVsZW1lbnRzRW5hYmxlZCgpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30K
KworCiB2b2lkIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlU3R5bGVTY29wZWQoYm9vbCBlbmFi
bGUpCiB7CiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5n
ZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBjNDZhN2U1ZDY1NmNjMGJkYzZlMmRiZDA2YWU0
YjZjNDNhZGRhNDJiLi4xYmExMTg3ZDRlMzY2YWEwZDIxYjAyODA4ZGQ2MWVkYjEwZmZjMmU1IDEw
MDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTUgQEAKKzIwMTMtMDEtMjcgIEhhamltZSBNb3JyaXRhICA8bW9ycml0YUBnb29nbGUuY29t
PgorCisgICAgICAgIFtDdXN0b20gRWxlbWVudHNdIEltcGxlbWVudCBiYXJlLWJvbmUgZG9jdW1l
bnQucmVnaXN0ZXIoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTAwMjI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkZWQgZW5hYmxlQ3VzdG9tRE9NRWxlbWVudHMgZmxhZy4KKworICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHA6CisgICAgICAgIChUZXN0U2hlbGw6
OlRlc3RTaGVsbCk6CisKIDIwMTMtMDItMTQgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFJlcXVlc3QgV2ViTGF5ZXJUcmVlVmlldyBm
b3IgRHVtcFJlbmRlclRyZWUgdmlhIGV4cGxpY2l0IHRlc3RpbmcgcGF0aApkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcCBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKaW5kZXggZjZmY2IyNmM1ZTMwZmU3MzZm
Yjg5ZDM1ZjQ4YjQ2NWJkNTBhMmQyMS4uMmQ4ZjE0MjI1Nzc2MTE4ZjYyMWNjOGM1MDgyYmFlZThh
MjU2MDgzNCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNo
ZWxsLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3Bw
CkBAIC0xNDUsNiArMTQ1LDcgQEAgVGVzdFNoZWxsOjpUZXN0U2hlbGwoKQogICAgIFdlYlJ1bnRp
bWVGZWF0dXJlczo6ZW5hYmxlVmlkZW9UcmFjayh0cnVlKTsKICAgICBXZWJSdW50aW1lRmVhdHVy
ZXM6OmVuYWJsZUdhbWVwYWQodHJ1ZSk7CiAgICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVT
aGFkb3dET00odHJ1ZSk7CisgICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVDdXN0b21ET01F
bGVtZW50cyh0cnVlKTsKICAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZVN0eWxlU2NvcGVk
KHRydWUpOwogICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlU2NyaXB0ZWRTcGVlY2godHJ1
ZSk7CiAgICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVSZXF1ZXN0QXV0b2NvbXBsZXRlKHRy
dWUpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IGUxZjQxMjhhMmY5MGQ2MjkwMjI2ZjE0NzI1YzcyYTMxNTY0MmE3ODguLmI1
MzhjYzk0NzBlNTg1ZTg1ZjNmYTcwMmViZmE0ZDQxMzQ2Y2YzOGYgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
MSBAQAorMjAxMy0wMi0xNCAgSGFqaW1lIE1vcnJpdGEgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisK
KyAgICAgICAgW0N1c3RvbSBFbGVtZW50c10gSW1wbGVtZW50IGJhcmUtYm9uZSBkb2N1bWVudC5y
ZWdpc3RlcigpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMDAyMjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIGZhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1iYXNpYy1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1iYXNp
Yy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0
ZXItcmVlbnRyYW50LW51bGwtY29uc3RydWN0b3ItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVlbnRyYW50LW51bGwtY29u
c3RydWN0b3IuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50
LXJlZ2lzdGVyLXJlZW50cmFudC1yZXR1cm5pbmctZmFrZS1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1yZWVudHJhbnQtcmV0
dXJuaW5nLWZha2UuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vY3VzdG9tL2RvY3Vt
ZW50LXJlZ2lzdGVyLXJlZW50cmFudC10aHJvd2luZy1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1yZWVu
dHJhbnQtdGhyb3dpbmctY29uc3RydWN0b3IuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9k
b20vY3VzdG9tL3Jlc291cmNlcy9kb2N1bWVudC1yZWdpc3Rlci1mdXp6LmpzOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9uczoKKwogMjAxMy0wMi0yMCAgVGFr
YXNoaSBUb3lvc2hpbWEgIDx0b3lvc2hpbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCBnYXJkZW5pbmcsIHVwZGF0ZSBUZXN0RXhwZWN0YXRpb25zLgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLWJhc2ljLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1iYXNp
Yy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjZiNjIxOTRkMWUzMjBhYTQ3YjIwOTMyOGM5NDVj
NWM5OWJjOGZiNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3Rv
bS9kb2N1bWVudC1yZWdpc3Rlci1iYXNpYy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw0NiBAQAor
VGVzdGluZyBkb2N1bWVudC5yZWdpc3RlcigpIGJhc2ljIGJlaGF2aW9ycy4KKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgZG9jdW1lbnQucmVnaXN0ZXIoJ2ZvbycsIGNyZWF0
ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSW52YWxpZENoYXJh
Y3RlckVycm9yOiBET00gRXhjZXB0aW9uIDUuCitQQVNTIGRvY3VtZW50LnJlZ2lzdGVyKCd4Zm9v
JywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJbnZh
bGlkQ2hhcmFjdGVyRXJyb3I6IERPTSBFeGNlcHRpb24gNS4KK1BBU1MgZG9jdW1lbnQucmVnaXN0
ZXIoJ21pc3NpbmctZ2x5cGgnLCBjcmVhdGVSZWdpc3RlclBhcmFtdGVycygpKSB0aHJldyBleGNl
cHRpb24gRXJyb3I6IEludmFsaWRDaGFyYWN0ZXJFcnJvcjogRE9NIEV4Y2VwdGlvbiA1LgorUEFT
UyB0eXBlb2YgZm9vQ29uc3RydWN0b3IgaXMgJ2Z1bmN0aW9uJworUEFTUyBmb29Db25zdHJ1Y3Rv
ci5wcm90b3R5cGUuX19wcm90b19fIGlzIEhUTUxFbGVtZW50LnByb3RvdHlwZQorUEFTUyBmb29D
b25zdHJ1Y3Rvci5wcm90b3R5cGUudGhpc0lzUHJvdG90eXBlIGlzIHRydWUKK1BBU1MgZG9jdW1l
bnQucmVnaXN0ZXIoJ3gtZm9vJywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSkgdGhyZXcgZXhj
ZXB0aW9uIEVycm9yOiBJbnZhbGlkU3RhdGVFcnJvcjogRE9NIEV4Y2VwdGlvbiAxMS4KK1BBU1Mg
ZG9jdW1lbnQucmVnaXN0ZXIoJ1gtRk9PJywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSkgdGhy
ZXcgZXhjZXB0aW9uIEVycm9yOiBJbnZhbGlkU3RhdGVFcnJvcjogRE9NIEV4Y2VwdGlvbiAxMS4K
K1BBU1MgZG9jdW1lbnQucmVnaXN0ZXIoJ3gtYmFkLWEnLCB7IHByb3RvdHlwZTogSFRNTEVsZW1l
bnQucHJvdG90eXBlIH0pIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSW52YWxpZFN0YXRlRXJyb3I6
IERPTSBFeGNlcHRpb24gMTEuCitQQVNTIGRvY3VtZW50LnJlZ2lzdGVyKCd4LWJhZC1iJywgeyBw
cm90b3R5cGU6IHt9IH0pIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSW52YWxpZFN0YXRlRXJyb3I6
IERPTSBFeGNlcHRpb24gMTEuCitQQVNTIGRvY3VtZW50LnJlZ2lzdGVyKCd4LWJhZC1jJywgeyBw
cm90b3R5cGU6IE9iamVjdC5jcmVhdGUoRG9jdW1lbnQucHJvdG90eXBlKSB9KSB0aHJldyBleGNl
cHRpb24gRXJyb3I6IEludmFsaWRTdGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDExLgorUEFTUyBk
b2N1bWVudC5yZWdpc3RlcigneC1iYWQtZCcsIHsgcHJvdG90eXBlOiBPYmplY3QuY3JlYXRlKEhU
TUxTcGFuRWxlbWVudC5wcm90b3R5cGUpIH0pIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSW52YWxp
ZFN0YXRlRXJyb3I6IERPTSBFeGNlcHRpb24gMTEuCitQQVNTIGZvb0NvbnN0cnVjdG9yKCkgdGhy
ZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUg
Y2FsbGVkIGFzIGEgZnVuY3Rpb24uLgorUEFTUyBjcmVhdGVkRm9vLl9fcHJvdG9fXyBpcyBmb29D
b25zdHJ1Y3Rvci5wcm90b3R5cGUKK1BBU1MgY3JlYXRlZEZvby5jb25zdHJ1Y3RvciBpcyBmb29D
b25zdHJ1Y3RvcgorUEFTUyBjcmVhdGVkRm9vLnRhZ05hbWUgaXMgJ1gtRk9PJworUEFTUyBjcmVh
dGVkRm9vLnRleHRDb250ZW50IGlzICdIZWxsbycKK1BBU1MgY3JlYXRlZEZvby5sYXN0Q2hpbGQg
aXMgY2hpbGREaXYKK1BBU1MgcGFyc2VkRm9vLl9fcHJvdG9fXyBpcyBmb29Db25zdHJ1Y3Rvci5w
cm90b3R5cGUKK1BBU1MgcGFyc2VkRm9vLnRhZ05hbWUgaXMgJ1gtRk9PJworUEFTUyBwYXJzZWRG
b28uc29tZVByb3BlcnR5IGlzIGNvbnRhaW5lci5maXJzdENoaWxkLnNvbWVQcm9wZXJ0eQorUEFT
UyBjcmVhdGVkQmFyLnRhZ05hbWUgaXMgJ1gtQkFSJworUEFTUyBjcmVhdGVkQmF6LnRhZ05hbWUg
aXMgJ1gtQkFaJworUEFTUyBjcmVhdGVkQmF6LnRoaXNJc1Byb3RvdHlwZSBpcyB0cnVlCitQQVNT
IGNyZWF0ZWRCYXoudGhpc0lzQWxzb1Byb3RvdHlwZSBpcyB0cnVlCitQQVNTIGNyZWF0ZWRVcHBl
ckJhci5jb25zdHJ1Y3RvciBpcyBiYXJDb25zdHJ1Y3RvcgorUEFTUyBjcmVhdGVkVXBwZXJCYXIu
dGFnTmFtZSBpcyAnWC1CQVInCitQQVNTIGNyZWF0ZWRNaXhlZEJhci5jb25zdHJ1Y3RvciBpcyBi
YXJDb25zdHJ1Y3RvcgorUEFTUyBjcmVhdGVkTWl4ZWRCYXIudGFnTmFtZSBpcyAnWC1CQVInCitQ
QVNTIGNvbnRhaW5lci5maXJzdENoaWxkLmNvbnN0cnVjdG9yIGlzIGJhckNvbnN0cnVjdG9yCitQ
QVNTIGNvbnRhaW5lci5maXJzdENoaWxkLnRhZ05hbWUgaXMgJ1gtQkFSJworUEFTUyBjb250YWlu
ZXIubGFzdENoaWxkLmNvbnN0cnVjdG9yIGlzIGJhckNvbnN0cnVjdG9yCitQQVNTIGNvbnRhaW5l
ci5sYXN0Q2hpbGQudGFnTmFtZSBpcyAnWC1CQVInCitQQVNTIChuZXcgKGRvY3VtZW50LnJlZ2lz
dGVyKCd5LWJhcicsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpKSgpKS50YWdOYW1lIGlzICdZ
LUJBUicKK1BBU1MgKG5ldyAoZG9jdW1lbnQucmVnaXN0ZXIoJ3l6LWJhcicsIGNyZWF0ZVJlZ2lz
dGVyUGFyYW10ZXJzKCkpKSgpKS50YWdOYW1lIGlzICdZWi1CQVInCitQQVNTIChuZXcgKGRvY3Vt
ZW50LnJlZ2lzdGVyKCd5LXotYmFyJywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSkpKCkpLnRh
Z05hbWUgaXMgJ1ktWi1CQVInCitQQVNTIChuZXcgKGRvY3VtZW50LnJlZ2lzdGVyKCd5LS1iYXIn
LCBjcmVhdGVSZWdpc3RlclBhcmFtdGVycygpKSkoKSkudGFnTmFtZSBpcyAnWS0tQkFSJworUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1iYXNpYy5o
dG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLWJhc2lj
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMTA1Nzc4YzJjMTMyZGUwZDE2YTQ5NTE5NDRlNzEwNzg3ODY4ZTJk
OAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVu
dC1yZWdpc3Rlci1iYXNpYy5odG1sCkBAIC0wLDAgKzEsMTEzIEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0iY29udGFpbmVyIj48
L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdGluZyBkb2N1bWVudC5yZWdpc3Rlcigp
IGJhc2ljIGJlaGF2aW9ycy4iKTsKKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RS
dW5uZXIuZHVtcEFzVGV4dCgpOworZG9jdW1lbnQucmVnaXN0ZXIgPSBkb2N1bWVudC5yZWdpc3Rl
ciB8fCBkb2N1bWVudC53ZWJraXRSZWdpc3RlcjsKKworZnVuY3Rpb24gY3JlYXRlUmVnaXN0ZXJQ
YXJhbXRlcnMoKQoreworICAgIHJldHVybiB7CisgICAgICAgIHByb3RvdHlwZTogT2JqZWN0LmNy
ZWF0ZShIVE1MRWxlbWVudC5wcm90b3R5cGUsIHsgdGhpc0lzUHJvdG90eXBlOiB7IHZhbHVlOiB0
cnVlIH0gfSkKKyAgICB9OworfQorCisvLyBJbnZhbGlkIG5hbWVzCitzaG91bGRUaHJvdygiZG9j
dW1lbnQucmVnaXN0ZXIoJ2ZvbycsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpIiwgIidFcnJv
cjogSW52YWxpZENoYXJhY3RlckVycm9yOiBET00gRXhjZXB0aW9uIDUnIik7CitzaG91bGRUaHJv
dygiZG9jdW1lbnQucmVnaXN0ZXIoJ3hmb28nLCBjcmVhdGVSZWdpc3RlclBhcmFtdGVycygpKSIs
ICInRXJyb3I6IEludmFsaWRDaGFyYWN0ZXJFcnJvcjogRE9NIEV4Y2VwdGlvbiA1JyIpOworc2hv
dWxkVGhyb3coImRvY3VtZW50LnJlZ2lzdGVyKCdtaXNzaW5nLWdseXBoJywgY3JlYXRlUmVnaXN0
ZXJQYXJhbXRlcnMoKSkiLCAiJ0Vycm9yOiBJbnZhbGlkQ2hhcmFjdGVyRXJyb3I6IERPTSBFeGNl
cHRpb24gNSciKTsKKwordmFyIGZvb0NvbnN0cnVjdG9yID0gZG9jdW1lbnQucmVnaXN0ZXIoIngt
Zm9vIiwgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSk7CitzaG91bGRCZSgidHlwZW9mIGZvb0Nv
bnN0cnVjdG9yIiwgIidmdW5jdGlvbiciKTsKK3Nob3VsZEJlKCJmb29Db25zdHJ1Y3Rvci5wcm90
b3R5cGUuX19wcm90b19fIiwgIkhUTUxFbGVtZW50LnByb3RvdHlwZSIpOworc2hvdWxkQmVUcnVl
KCJmb29Db25zdHJ1Y3Rvci5wcm90b3R5cGUudGhpc0lzUHJvdG90eXBlIik7CisKKy8vIE5hbWUg
Y29uZmxpY3RzCitzaG91bGRUaHJvdygiZG9jdW1lbnQucmVnaXN0ZXIoJ3gtZm9vJywgY3JlYXRl
UmVnaXN0ZXJQYXJhbXRlcnMoKSkiLCAiJ0Vycm9yOiBJbnZhbGlkU3RhdGVFcnJvcjogRE9NIEV4
Y2VwdGlvbiAxMSciKTsKK3Nob3VsZFRocm93KCJkb2N1bWVudC5yZWdpc3RlcignWC1GT08nLCBj
cmVhdGVSZWdpc3RlclBhcmFtdGVycygpKSIsICInRXJyb3I6IEludmFsaWRTdGF0ZUVycm9yOiBE
T00gRXhjZXB0aW9uIDExJyIpOworCisvLyBCYWQgcHJvdG90eXBlOiBjb25zdHJ1Y3RvciBwcm9w
ZXJ0eSBleGlzdHMKK3Nob3VsZFRocm93KCJkb2N1bWVudC5yZWdpc3RlcigneC1iYWQtYScsIHsg
cHJvdG90eXBlOiBIVE1MRWxlbWVudC5wcm90b3R5cGUgfSkiLCAiJ0Vycm9yOiBJbnZhbGlkU3Rh
dGVFcnJvcjogRE9NIEV4Y2VwdGlvbiAxMSciKTsKKy8vIEJhZCBwcm90b3R5cGU6IG1pc3Npbmcg
X19wcm90b19fCitzaG91bGRUaHJvdygiZG9jdW1lbnQucmVnaXN0ZXIoJ3gtYmFkLWInLCB7IHBy
b3RvdHlwZToge30gfSkiLCAiJ0Vycm9yOiBJbnZhbGlkU3RhdGVFcnJvcjogRE9NIEV4Y2VwdGlv
biAxMSciKTsKKy8vIEJhZCBwcm90b3R5cGU6IHdyb25nIF9fcHJvdG9fXworc2hvdWxkVGhyb3co
ImRvY3VtZW50LnJlZ2lzdGVyKCd4LWJhZC1jJywgeyBwcm90b3R5cGU6IE9iamVjdC5jcmVhdGUo
RG9jdW1lbnQucHJvdG90eXBlKSB9KSIsICInRXJyb3I6IEludmFsaWRTdGF0ZUVycm9yOiBET00g
RXhjZXB0aW9uIDExJyIpOworLy8gQnVnIDExMDQzNiAtIEVsZW1lbnRzIG90aGVyIHRoYW4gSFRN
TEVtZW1lbnQgc2hvdWxkIGJlIGFsbG93ZWQgYXMgYSBzdXBlcmNsYXNzLgorc2hvdWxkVGhyb3co
ImRvY3VtZW50LnJlZ2lzdGVyKCd4LWJhZC1kJywgeyBwcm90b3R5cGU6IE9iamVjdC5jcmVhdGUo
SFRNTFNwYW5FbGVtZW50LnByb3RvdHlwZSkgfSkiLCAiJ0Vycm9yOiBJbnZhbGlkU3RhdGVFcnJv
cjogRE9NIEV4Y2VwdGlvbiAxMSciKTsKKy8vIENhbGwgYXMgZnVuY3Rpb24KK3Nob3VsZFRocm93
KCJmb29Db25zdHJ1Y3RvcigpIiwgIidUeXBlRXJyb3I6IERPTSBvYmplY3QgY29uc3RydWN0b3Ig
Y2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLiciKQorCisvLyBDb25zdHJ1Y3RvciBpbml0
aWF0ZWQgaW5zdGFudGlhdGlvbgordmFyIGNyZWF0ZWRGb28gPSBuZXcgZm9vQ29uc3RydWN0b3Io
KTsKKworLy8gSlMgYnVpbHQtaW4gcHJvcGVydGllcworc2hvdWxkQmUoImNyZWF0ZWRGb28uX19w
cm90b19fIiwgImZvb0NvbnN0cnVjdG9yLnByb3RvdHlwZSIpOworc2hvdWxkQmUoImNyZWF0ZWRG
b28uY29uc3RydWN0b3IiLCAiZm9vQ29uc3RydWN0b3IiKTsKKworLy8gTmF0aXZlIGdldHRlcgor
c2hvdWxkQmUoImNyZWF0ZWRGb28udGFnTmFtZSIsICInWC1GT08nIik7CisKKy8vIE5hdGl2ZSBz
ZXR0ZXIKK2NyZWF0ZWRGb28uaW5uZXJIVE1MID0gIkhlbGxvIjsKK3Nob3VsZEJlKCJjcmVhdGVk
Rm9vLnRleHRDb250ZW50IiwgIidIZWxsbyciKTsKKworLy8gTmF0aXZlIG1ldGhvZAordmFyIGNo
aWxkRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CitjcmVhdGVkRm9vLmFwcGVu
ZENoaWxkKGNoaWxkRGl2KTsKK3Nob3VsZEJlKCJjcmVhdGVkRm9vLmxhc3RDaGlsZCIsICJjaGls
ZERpdiIpOworCisvLyBQYXJzZXIgaW5pdGlhdGVkIGluc3RhbnRpYXRpb24KK3ZhciBjb250YWlu
ZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGFpbmVyIik7Citjb250YWluZXIuaW5u
ZXJIVE1MID0gIjx4LWZvbz48L3gtZm9vPiI7CitwYXJzZWRGb28gPSBjb250YWluZXIuZmlyc3RD
aGlsZDsKKworc2hvdWxkQmUoInBhcnNlZEZvby5fX3Byb3RvX18iLCAiZm9vQ29uc3RydWN0b3Iu
cHJvdG90eXBlIik7CitzaG91bGRCZSgicGFyc2VkRm9vLnRhZ05hbWUiLCAiJ1gtRk9PJyIpOwor
CisvLyBFbnN1cmluZyB0aGUgd3JhcHBlciBpcyByZXRhaW5lZAorcGFyc2VkRm9vLnNvbWVQcm9w
ZXJ0eSA9ICJoZWxsbyI7CitzaG91bGRCZSgicGFyc2VkRm9vLnNvbWVQcm9wZXJ0eSIsICJjb250
YWluZXIuZmlyc3RDaGlsZC5zb21lUHJvcGVydHkiKTsKKworLy8gSGF2aW5nIGFub3RoZXIgY29u
c3RydWN0b3IKK3ZhciBiYXJDb25zdHJ1Y3RvciA9IGRvY3VtZW50LnJlZ2lzdGVyKCJ4LWJhciIs
IGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpOwordmFyIGNyZWF0ZWRCYXIgPSBuZXcgYmFyQ29u
c3RydWN0b3IoKTsKK3Nob3VsZEJlKCJjcmVhdGVkQmFyLnRhZ05hbWUiLCAiJ1gtQkFSJyIpOwor
CisvLyBIYXZpbmcgYSBzdWJjbGFzcwordmFyIGJhekNvbnN0cnVjdG9yID0gZG9jdW1lbnQucmVn
aXN0ZXIoIngtYmF6IiwgeyBwcm90b3R5cGU6IE9iamVjdC5jcmVhdGUoZm9vQ29uc3RydWN0b3Iu
cHJvdG90eXBlLCB7IHRoaXNJc0Fsc29Qcm90b3R5cGU6IHsgdmFsdWU6IHRydWUgfSB9KSB9KTsK
K3ZhciBjcmVhdGVkQmF6ID0gbmV3IGJhekNvbnN0cnVjdG9yKCk7CitzaG91bGRCZSgiY3JlYXRl
ZEJhei50YWdOYW1lIiwgIidYLUJBWiciKTsKK3Nob3VsZEJlVHJ1ZSgiY3JlYXRlZEJhei50aGlz
SXNQcm90b3R5cGUiKTsKK3Nob3VsZEJlVHJ1ZSgiY3JlYXRlZEJhei50aGlzSXNBbHNvUHJvdG90
eXBlIik7CisKKy8vIFdpdGggaXJyZWd1bGFyIGNhc2VzCit2YXIgY3JlYXRlZFVwcGVyQmFyID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiWC1CQVIiKTsKK3ZhciBjcmVhdGVkTWl4ZWRCYXIgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJYLUJhciIpOworc2hvdWxkQmUoImNyZWF0ZWRVcHBlckJh
ci5jb25zdHJ1Y3RvciIsICJiYXJDb25zdHJ1Y3RvciIpOworc2hvdWxkQmUoImNyZWF0ZWRVcHBl
ckJhci50YWdOYW1lIiwgIidYLUJBUiciKTsKK3Nob3VsZEJlKCJjcmVhdGVkTWl4ZWRCYXIuY29u
c3RydWN0b3IiLCAiYmFyQ29uc3RydWN0b3IiKTsKK3Nob3VsZEJlKCJjcmVhdGVkTWl4ZWRCYXIu
dGFnTmFtZSIsICInWC1CQVInIik7CisKK2NvbnRhaW5lci5pbm5lckhUTUwgPSAiPFgtQkFSPjwv
WC1CQVI+PFgtQmFyPjwvWC1CYXI+IjsKK3Nob3VsZEJlKCJjb250YWluZXIuZmlyc3RDaGlsZC5j
b25zdHJ1Y3RvciIsICJiYXJDb25zdHJ1Y3RvciIpOworc2hvdWxkQmUoImNvbnRhaW5lci5maXJz
dENoaWxkLnRhZ05hbWUiLCAiJ1gtQkFSJyIpOworc2hvdWxkQmUoImNvbnRhaW5lci5sYXN0Q2hp
bGQuY29uc3RydWN0b3IiLCAiYmFyQ29uc3RydWN0b3IiKTsKK3Nob3VsZEJlKCJjb250YWluZXIu
bGFzdENoaWxkLnRhZ05hbWUiLCAiJ1gtQkFSJyIpOworCisvLyBTdHJhbmdlIGJ1dCB2YWxpZCBu
YW1lcworc2hvdWxkQmUoIihuZXcgKGRvY3VtZW50LnJlZ2lzdGVyKCd5LWJhcicsIGNyZWF0ZVJl
Z2lzdGVyUGFyYW10ZXJzKCkpKSgpKS50YWdOYW1lIiwgIidZLUJBUiciKTsKK3Nob3VsZEJlKCIo
bmV3IChkb2N1bWVudC5yZWdpc3RlcigneXotYmFyJywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMo
KSkpKCkpLnRhZ05hbWUiLCAiJ1laLUJBUiciKTsKK3Nob3VsZEJlKCIobmV3IChkb2N1bWVudC5y
ZWdpc3RlcigneS16LWJhcicsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpKSgpKS50YWdOYW1l
IiwgIidZLVotQkFSJyIpOworc2hvdWxkQmUoIihuZXcgKGRvY3VtZW50LnJlZ2lzdGVyKCd5LS1i
YXInLCBjcmVhdGVSZWdpc3RlclBhcmFtdGVycygpKSkoKSkudGFnTmFtZSIsICInWS0tQkFSJyIp
OworCis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1yZWVudHJhbnQtbnVsbC1jb25z
dHJ1Y3Rvci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1l
bnQtcmVnaXN0ZXItcmVlbnRyYW50LW51bGwtY29uc3RydWN0b3ItZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmE2NWI1OThlMzVhMzdjYjk5YjQ0NjQ1MTNlY2U0MGU2MjZjZTNmNzkKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXIt
cmVlbnRyYW50LW51bGwtY29uc3RydWN0b3ItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsOSBAQAor
RnV6emluZyBkb2N1bWVudC5yZWdpc3RlcigpIHRocm91Z2ggZ2V0dGVycy4gUEFTUyB1bGVzcyBj
cmFzaC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVlbnRyYW50LW51bGwtY29uc3Ry
dWN0b3IuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rl
ci1yZWVudHJhbnQtbnVsbC1jb25zdHJ1Y3Rvci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgwOGEwMGI2NzEx
N2FlNWIyODg2OTViNzIwM2YxNzAwNmFjZGRjMTYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVlbnRyYW50LW51bGwtY29u
c3RydWN0b3IuaHRtbApAQCAtMCwwICsxLDIzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuL3Jlc291cmNlcy9kb2N1bWVudC1yZWdpc3Rlci1mdXp6
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0iY29udGFpbmVyIj48L2Rp
dj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiRnV6emluZyBkb2N1bWVudC5yZWdpc3RlcigpIHRo
cm91Z2ggZ2V0dGVycy4gUEFTUyB1bGVzcyBjcmFzaC4iKTsKKworc2V0dXBPYmplY3RIb29rcyh7
CisgICAgcHJvdG90eXBlR2V0OiBmdW5jdGlvbigpIHsgfSwKKyAgICBwcm90b3R5cGVTZXQ6IGZ1
bmN0aW9uKHZhbHVlKSB7IH0sCisgICAgY29uc3RydWN0b3JHZXQ6IGZ1bmN0aW9uKCkgeyB9LAor
ICAgIGNvbnN0cnVjdG9yU2V0OiBmdW5jdGlvbih2YWx1ZSkgeyB9Cit9KTsKKworZXhlcmNpc2VE
b2N1bWVudFJlZ2lzdGVyKCk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNv
dXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1yZWVu
dHJhbnQtcmV0dXJuaW5nLWZha2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20v
Y3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFudC1yZXR1cm5pbmctZmFrZS1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYTY1YjU5OGUzNWEzN2NiOTliNDQ2NDUxM2VjZTQwZTYyNmNlM2Y3
OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVu
dC1yZWdpc3Rlci1yZWVudHJhbnQtcmV0dXJuaW5nLWZha2UtZXhwZWN0ZWQudHh0CkBAIC0wLDAg
KzEsOSBAQAorRnV6emluZyBkb2N1bWVudC5yZWdpc3RlcigpIHRocm91Z2ggZ2V0dGVycy4gUEFT
UyB1bGVzcyBjcmFzaC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVlbnRyYW50LXJl
dHVybmluZy1mYWtlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQt
cmVnaXN0ZXItcmVlbnRyYW50LXJldHVybmluZy1mYWtlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTdlOTBm
Yjc2ZTM4ZDdjNTQxNmJiYTY3ZjVhNzUyOTViYjM4ZGZkYgotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1yZWVudHJhbnQtcmV0
dXJuaW5nLWZha2UuaHRtbApAQCAtMCwwICsxLDI2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuL3Jlc291cmNlcy9kb2N1bWVudC1yZWdpc3Rlci1m
dXp6LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0iY29udGFpbmVyIj48
L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiRnV6emluZyBkb2N1bWVudC5yZWdpc3Rlcigp
IHRocm91Z2ggZ2V0dGVycy4gUEFTUyB1bGVzcyBjcmFzaC4iKTsKKwordmFyIGJhZFByb3RvdHlw
ZSA9IEltYWdlLnByb3RvdHlwZTsKK3ZhciBiYWRDb25zdHJ1Y3RvciA9IEltYWdlLnByb3RvdHlw
ZS5jb25zdHJ1Y3RvcjsKKworc2V0dXBPYmplY3RIb29rcyh7CisgICAgcHJvdG90eXBlR2V0OiBm
dW5jdGlvbigpIHsgcmV0dXJuIGJhZFByb3RvdHlwZTsgfSwKKyAgICBwcm90b3R5cGVTZXQ6IGZ1
bmN0aW9uKHZhbHVlKSB7ICB9LAorICAgIGNvbnN0cnVjdG9yR2V0OiBmdW5jdGlvbigpIHsgcmV0
dXJuIGJhZENvbnN0cnVjdG9yOyB9LAorICAgIGNvbnN0cnVjdG9yU2V0OiBmdW5jdGlvbih2YWx1
ZSkgeyAgfQorfSk7CisKK2V4ZXJjaXNlRG9jdW1lbnRSZWdpc3RlcigpOworPC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0
b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVlbnRyYW50LXRocm93aW5nLWNvbnN0cnVjdG9yLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1y
ZWVudHJhbnQtdGhyb3dpbmctY29uc3RydWN0b3ItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIx
ZmM5Mjk0MTQ4NmE0N2JhZjdkYzdkZjdmYjUwY2M1MzM4N2IxOGQKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVlbnRyYW50
LXRocm93aW5nLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitGdXp6
aW5nIGRvY3VtZW50LnJlZ2lzdGVyKCkgdGhyb3VnaCBnZXR0ZXJzLiBQQVNTIHVsZXNzIGNyYXNo
LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworQ29uc3RydWN0b3Igb2JqZWN0IGlz
bid0IGNyZWF0ZWQuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50
LXJlZ2lzdGVyLXJlZW50cmFudC10aHJvd2luZy1jb25zdHJ1Y3Rvci5odG1sIGIvTGF5b3V0VGVz
dHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFudC10aHJvd2luZy1j
b25zdHJ1Y3Rvci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiYzI5MGVkNzEzMWJhNjg3ZDk2MDNjZjkyY2Nm
MzkwMDQ2YWZiMWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0
b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVlbnRyYW50LXRocm93aW5nLWNvbnN0cnVjdG9yLmh0bWwK
QEAgLTAsMCArMSwyMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlw
dCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi9yZXNvdXJjZXMvZG9jdW1lbnQtcmVnaXN0ZXItZnV6ei5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImNvbnRhaW5lciI+PC9kaXY+Cis8c2NyaXB0Pgor
ZGVzY3JpcHRpb24oIkZ1enppbmcgZG9jdW1lbnQucmVnaXN0ZXIoKSB0aHJvdWdoIGdldHRlcnMu
IFBBU1MgdWxlc3MgY3Jhc2guIik7CisKK3NldHVwT2JqZWN0SG9va3MoeworICAgIHByb3RvdHlw
ZUdldDogZnVuY3Rpb24oKSB7IHRocm93ICJFcnJvciI7IH0sCisgICAgcHJvdG90eXBlU2V0OiBm
dW5jdGlvbih2YWx1ZSkgeyB0aHJvdyAiRXJyb3IiOyB9LAorICAgIGNvbnN0cnVjdG9yR2V0OiBm
dW5jdGlvbigpIHsgdGhyb3cgIkVycm9yIjsgfSwKKyAgICBjb25zdHJ1Y3RvclNldDogZnVuY3Rp
b24odmFsdWUpIHsgdGhyb3cgIkVycm9yIjsgfQorfSk7CisKK2V4ZXJjaXNlRG9jdW1lbnRSZWdp
c3RlcigpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vcmVzb3VyY2VzL2RvY3VtZW50LXJlZ2lzdGVyLWZ1enou
anMgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vcmVzb3VyY2VzL2RvY3VtZW50LXJlZ2lz
dGVyLWZ1enouanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWQyZDMzNzliZWQ5MjQxZmFiMjA0ZGU1YzE2MzU0Njkx
ZWVlOTVlMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9y
ZXNvdXJjZXMvZG9jdW1lbnQtcmVnaXN0ZXItZnV6ei5qcwpAQCAtMCwwICsxLDQ5IEBACisKK2Z1
bmN0aW9uIHNldHVwT2JqZWN0SG9va3MoaG9va3MpCit7CisgICAgLy8gV3JhcHBlciBmb3IgdGhl
c2Ugb2JqZWN0IHNob3VsZCBiZSBtYXRlcmlhbGl6ZWQgYmVmb3JlIHNldHRpbmcgaG9va3MuCisg
ICAgY29uc29sZS5sb2c7CisgICAgZG9jdW1lbnQud2Via2l0UmVnaXN0ZXIKKyAgICBIVE1MU3Bh
bkVsZW1lbnQucHJvdG90eXBlOworCisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE9iamVjdC5w
cm90b3R5cGUsICJwcm90b3R5cGUiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24oKSB7IHJldHVy
biBob29rcy5wcm90b3R5cGVHZXQoKTsgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkg
eyByZXR1cm4gaG9va3MucHJvdG90eXBlU2V0KHZhbHVlKTsgfQorICAgIH0pOworCisgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KE9iamVjdC5wcm90b3R5cGUsICJjb25zdHJ1Y3RvciIsIHsKKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIGhvb2tzLmNvbnN0cnVjdG9yR2V0KCk7IH0s
CisgICAgICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIGhvb2tzLmNvbnN0cnVjdG9y
U2V0KHZhbHVlKTsgfQorICAgIH0pOworCisgICAgcmV0dXJuIGhvb2tzOworfQorCitmdW5jdGlv
biBleGVyY2lzZURvY3VtZW50UmVnaXN0ZXIoKQoreworICAgIHZhciBteUNvbnN0cnVjdG9yID0g
bnVsbDsKKyAgICB2YXIgbXlQcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEhUTUxFbGVtZW50LnBy
b3RvdHlwZSk7CisgICAgdHJ5IHsKKyAgICAgICAgbXlDb25zdHJ1Y3RvciA9IGRvY3VtZW50Lndl
YmtpdFJlZ2lzdGVyKCJ4LWRvLW5vdGhpbmciLCB7IHByb3RvdHlwZTogbXlQcm90b3R5cGUgfSk7
CisgICAgfSBjYXRjaCAoZSkgeyB9CisKKyAgICB0cnkgeworICAgICAgICBpZiAoIW15Q29uc3Ry
dWN0b3IpIHsKKyAgICAgICAgICAgIGRlYnVnKCJDb25zdHJ1Y3RvciBvYmplY3QgaXNuJ3QgY3Jl
YXRlZC4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICht
eUNvbnN0cnVjdG9yLnByb3RvdHlwZSAhPSBteVByb3RvdHlwZSkgeworICAgICAgICAgICAgY29u
c29sZS5sb2coIkZBSUw6IGJhZCBwcm90b3R5cGUiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgIH0KKworICAgICAgICB2YXIgZWxlbWVudCA9IG5ldyBteUNvbnN0cnVjdG9yKCk7Cisg
ICAgICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGVs
ZW1lbnQuY29uc3RydWN0b3IgIT0gbXlDb25zdHJ1Y3RvcikgeworICAgICAgICAgICAgY29uc29s
ZS5sb2coIkZBSUw6IGJhZCBjb25zdHJ1Y3RvciIpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgfQorICAgIH0gY2F0Y2ggKGUpIHsgY29uc29sZS5sb2coZSk7IH0KK30KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggMjI2NmRmMjYwMzNlZTRmM2Uz
NDA2ZDA5ZTk4YTUxNGQ5Nzg5N2RkNy4uMjY4MjJlNGE1ZGFiNDcyYjg0OTkwOGJlMTc2NGExZGNi
YzMzOTFmMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3Rh
dGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKQEAg
LTExMTgsNiArMTExOCw5IEBAIHdlYmtpdC5vcmcvYi83NjQ4OSBjb21wb3NpdGluZy93ZWJnbC93
ZWJnbC1yZWZsZWN0aW9uLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi83
NjQzOSBbIERlYnVnIF0gZmFzdC9kb20vc2hhZG93L2NvbnRlbnQtZWxlbWVudC1hcGkuaHRtbCBb
IEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzc2NDM5IFsgRGVidWcgXSBmYXN0L2RvbS9zaGFkb3cv
Y29udGVudC1lbGVtZW50LW91dHNpZGUtc2hhZG93Lmh0bWwgWyBGYWlsdXJlIF0KIAorIyBFTkFC
TEUoQ1VTVE9NX0VMRU1FTlRTKSBpcyBkaXNhYmxlZC4KK2Zhc3QvZG9tL2N1c3RvbQorCiAjIENT
UyBWYXJpYWJsZXMgYXJlIG5vdCB5ZXQgZW5hYmxlZC4KIHdlYmtpdC5vcmcvYi84NTU4MCBmYXN0
L2Nzcy92YXJpYWJsZXMKIHdlYmtpdC5vcmcvYi84NTU4MCBpbnNwZWN0b3Ivc3R5bGVzL3Zhcmlh
Ymxlcwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189706</attachid>
            <date>2013-02-22 00:25:31 -0800</date>
            <delta_ts>2013-02-23 02:10:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100229-20130222172150.patch</filename>
            <type>text/plain</type>
            <size>94479</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzNjkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmU5MTk4MWJkNzdmNDIx
YjQyZDkzYWZlNGNiOTM2MWM2NGIwYTgwZS4uNmEwZDQ3MWIyNzc0NDcwZjhjMWEzOWEzYzJlNjVi
MWZmODgzZDNiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MCBAQAorMjAxMy0wMi0yMSAgSGFq
aW1lIE1vcnJpdGEgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgW0N1c3RvbSBFbGVt
ZW50c10gSW1wbGVtZW50IGJhcmUtYm9uZSBkb2N1bWVudC5yZWdpc3RlcigpCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDAyMjkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNoYW5nZSBpbXBsZW1l
bnRzIGEgcHJlZml4ZWQgdmVyc2lvbiBvZiBkb2N1bWVudC5yZWdpc3RlcigpLCB3aXRoIG1pbmlt
YWwgZmVhdHVyZSBzdXBwb3J0LgorICAgICAgICAtIFRoZSBmZWF0dXJlIGlzIGd1YXJkZWQgYnkg
RU5BQkxFKENVU1RPTV9FTEVNRU5UUykgYW5kIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmN1c3Rv
bURPTUVsZW1lbnRzRW5hYmxlZCgpLgorICAgICAgICAtIFRoaXMgYmFyZS1ib25lIHZlcnNpb24g
b25seSByZWNvZ25pemVzICJuYW1lIiBhbmQgInByb3RvdHlwZSIgcGFyYW1ldGVycy4gSXQgZG9l
c24ndCBzdXBwb3J0IGRlZmF1bHQgdmFsdWUgb2YgInByb3RvdHlwZSIgcGFyYW1ldGVyLgorICAg
ICAgICAtIEN1cnJlbnRseSBvbmx5IFY4IGlzIHN1cHBvcnRlZC4gSlNDIGJpbmRpbmcgbmVlZHMg
aXRzIG93biBiaW5kaW5nIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgID0gTWFqb3IgbmV3IGNs
YXNzZXMgdW5kZXIgZG9tLzoKKworICAgICAgICBUaGUgZG9tIG1vZHVsZSBnZXRzIHR3byBuZXcg
Y2xhc3NlczoKKyAgICAgICAgLSBDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6IEEgcmV0dXJuIHZh
bHVlIG9mIGRvY3VtZW50LnJlZ2lzdGVyKCkKKyAgICAgICAgICB3aGljaCBob2xkcyB0aGUgY3Vz
dG9tIGVsZW1lbnQgZGVmaW5pdGlvbi4KKyAgICAgICAgLSBDdXN0b21FbGVtZW50UmVnaXN0cnk6
IEEgY29sbGVjdGlvbiBvZiBDdXN0b21FbGVtZW50Q29uc3RydWN0b3Igb2JqZWN0cy4KKyAgICAg
ICAgICBDdXN0b21FbGVtZW50UmVnaXN0cnkgaW5zdGFuY2UgaXMgY3JlYXRlZCBwZXIgRG9jdW1l
bnQgYW5kIGlzIG93bmVkIGJ5IHRoZSBEb2N1bWVudC4KKworICAgICAgICBDdXN0b21FbGVtZW50
Q29uc3RydWN0b3Iga25vd3MgdGhlIGRlZmluaXRpb24gb2YgZWFjaCBjdXN0b20KKyAgICAgICAg
ZWxlbWVudCwgd2hpY2ggaXMgcmVnaXN0ZXJlZCBieSBkb2N1bWVudC5yZWdpc3RlcigpLiBUaGUg
bmFtZSBhbmQKKyAgICAgICAgb3RoZXIgb3B0aW9ucyBhcmUgaGVsZCBieSB0aGlzIG9iamVjdC4g
Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5IG93bnMgYSBzZXQKKyAgICAgICAgb2YgdGhlIHJlZ2lzdGVy
ZWQgY29uc3RydWN0b3JzLiBUaGUgcmVnaXN0cnkgZ3VhcmFudGVlcyBpbnZhcmlhbnRzCisgICAg
ICAgIGxpa2UgdmFsaWRpdHkgYW5kIHVuaXF1ZW5lc3Mgb2YgdGhlIGVsZW1lbnQgbmFtZXMuCisK
KyAgICAgICAgPSBBIGNoYW5nZSBvbiBtYWtlX25hbWVzLnBsCisKKyAgICAgICAgVGhpcyBjaGFu
Z2UgdHdlYWtzIG1ha2VfbmFtZXMucGwgKG9yIGdlbmVyYXRlZCBIVE1MRWxlbWVudEZhY3Rvcnkp
CisgICAgICAgIHRvIGhvb2sgdGhlIGNyZWF0aW9ucyBvZiB1bmtub3duIGVsZW1lbnRzLiBTb21l
IG9mIGVsZW1lbnQgbmFtZXMKKyAgICAgICAgd2hpY2ggY29tZSB0byB0aGUgZmFsbGJhY2sgcGF0
aCBjYW4gYmUgb25lIG9mIHJlZ2lzdGVyZWQgY3VzdG9tCisgICAgICAgIGVsZW1lbnQuCisKKyAg
ICAgICAgPSBbVjhXcmFwQXNGdW5jdGlvbl0gZXh0ZW5kZWQgYXR0cmlidXRlOgorCisgICAgICAg
IFRoZSBkb2N1bWVudC5yZWdpc3RlcigpIEFQSSByZXR1cm5zIGEgY29uc3RydWN0b3IKKyAgICAg
ICAgZnVuY3Rpb24uIEhvd2V2ZXIsIHRoZSBWOCBiaW5kaW5nIGN1cnJlbnRseSBkb2Vzbid0IHN1
cHBvcnQgaXQuIFRvCisgICAgICAgIG1ha2UgaXQgcG9zc2libGUsIHRoaXMgY2hhbmdlIGludHJv
ZHVjZXMgIlY4V3JhcEFzRnVuY3Rpb24iCisgICAgICAgIGV4dGVuZGVkIGF0dHJpYnV0ZSBmb3Ig
YW5ub3RhdGluZyBDdXN0b21FbGVtZW50Q29uc3RydWN0b3IgSURMCisgICAgICAgIGludGVyZmFj
ZS4KKworICAgICAgICBWOFdyYXBBc0Z1bmN0aW9uIHdyYXBzIHRoZSBhbm5vdGF0ZWQgaW50ZXJm
YWNlIHdpdGggYSBKYXZhU2NyaXB0CisgICAgICAgIGZ1bmN0aW9uLCB3aGljaCBjYWxscyB0aGUg
b3JpZ2luYWwgb2JqZWN0IGFzIGEgZnVuY3Rpb24sIG9yIGFzIGEKKyAgICAgICAgY29uc3RydWN0
b3IgZGVwZW5kcyBvbiB0aGUgY29udGV4dC4KKworICAgICAgICBXaXRoIHRoaXMgd3JhcHBlciBm
dW5jdGlvbiwgdGhlcmUgYXJlIHR3byBsZXZlbHMgb2YgaW5kaXJlY3Rpb24KKyAgICAgICAgYmV0
d2VlbiBuYXRpdmUgQysrIG9iamVjdCBhbmQgYXV0aG9yLXZpc2libGUgSlMgZnVuY3Rpb246CisK
KyAgICAgICAgW0pTIEFkYXB0b3IgRmljdGlvbl0gPC0oaGlkZGVuIHByb3BlcnR5KS0+IFtKUyBX
cmFwcGVyIE9iamVjdF0gLShpbnRlcm5hbCBmaWVsZCktPiBbQysrIE5hdGl2ZSBvYmplY3RdCisK
KyAgICAgICAgVGhlIGNvZGUgZ2VuZXJhdG9yIGdlbmVyYXRlcyB0aGUgYmluZGluZyBjb2RlIHdo
aWNoIGRlYWxzIHdpdGgKKyAgICAgICAgdGhpcyBpbmRpcmVjdGlvbi4gIEFsc28sIHRoZXJlIGlz
IGEgc2V0IG9mIGhlbHBlciBmdW5jdGlvbnMgaW4KKyAgICAgICAgVjhBZGFwdG9yRnVuY3Rpb24u
aC9jcHAgd2hpY2ggdGFrZXMgY2FyZSBvZiB0aGlzIGluZGlyZWN0aW9uLgorICAgICAgICBWOERP
TVdyYXBwZXIuY3BwL2ggd29ya3MgYXMgYSBmYWNhZGUgZm9yIHRoZXNlIEFQSXMgYW5kIGlzIHVz
ZWQgZnJvbQorICAgICAgICB0aGUgZ2VuZXJhdGVkIGNvZGUuCisKKyAgICAgICAgVGhpcyByZWR1
bmRhbmN5IGNvbWVzIGZyb20gbGltaXRhdGlvbnMgb2YgYm90aCBWOCBiaW5kaW5ncyBhbmQgVjgK
KyAgICAgICAgZW1iZWRkaW5nIEFQSS4gU2VlIGJ1ZyAxMDgxMzggZm9yIGRldGFpbHMuCisKKyAg
ICAgICAgPSBWOEhUTUxDdXN0b21FbGVtZW50CisKKyAgICAgICAgVW5saWtlIGJ1aWx0LWluIEhU
TUwgZWxlbWVudHMsIGFueSBjdXN0b20gZWxlbWVudCBoYXMgbm8KKyAgICAgICAgY29ycmVzcG9u
ZGluZyBDKysgY2xhc3MuIEluc3RlYWQsIGRvY3VtZW50LnJlZ2lzdGVyKCkgc2hvdWxkIGFsbG93
CisgICAgICAgIHBhc3NpbmcgYSBwcm90b3R5cGUgb2JqZWN0IGZvciB0aGUgZWxlbWVudHMgYmVp
bmcgcmVnaXN0ZXJlZC4KKworICAgICAgICBWOEhUTUxDdXN0b21FbGVtZW50IGhhbmRsZXMgdGhp
cyBsYWNrIG9mIG5hdGl2ZSBjbGFzcy4gIEl0IGJlaGF2ZXMKKyAgICAgICAgbGlrZSBhIG5hdGl2
ZSBzaWRlIHByb3h5IG9mIG5vbi1uYXRpdmUgSFRNTEVsZW1lbnQgc3ViY2xhc3Nlcy4gIEl0Cisg
ICAgICAgIGNvbm5lY3RzIGVhY2ggY3VzdG9tIGVsZW1lbnQgdG8gYW4gYXBwcm9wcmlhdGUgbmF0
aXZlIGVsZW1lbnQsCisgICAgICAgIHdoaWNoIGlzIEhUTUxFbGVtZW50IGF0IHRoaXMgdGltZS4g
VGhpcyByZXN0cmljdGlvbiB3aWxsIGJlCisgICAgICAgIHJlbGF4ZWQgbGF0ZXIuIFNlZSBCdWcg
MTEwNDM2IGZvciBkZXRhaWxzLgorCisgICAgICAgID0gQ3VzdG9tIERPTSBlbGVtZW50cyBhbmQg
bXVsdGlwbGUgd29ybGRzCisKKyAgICAgICAgSW4gdGhpcyBwYXRjaCwgY3VzdG9tIGVsZW1lbnQg
cmVnaXN0cmF0aW9uIGFuZCBpbnN0YW50aWF0aW9uIGlzIG5vdCBhbGxvd2VkCisgICAgICAgIGlu
IG5vbi1tYWluIHdvcmxkIGFuZCBkb2N1bWVudC5yZWdpc3RlcigpIEFQSSBqdXN0IGZhaWxzIHRo
ZXJlLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRl
c3RzOiBmYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMuaHRtbAorICAgICAg
ICAgICAgICAgZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFudC1udWxs
LWNvbnN0cnVjdG9yLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZG9tL2N1c3RvbS9kb2N1bWVu
dC1yZWdpc3Rlci1yZWVudHJhbnQtcmV0dXJuaW5nLWZha2UuaHRtbAorICAgICAgICAgICAgICAg
ZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFudC10aHJvd2luZy1jb25z
dHJ1Y3Rvci5odG1sCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAq
IFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBiaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVk
RmVhdHVyZXMuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oOgorICAgICAgICAoUnVudGltZUVuYWJsZWRGZWF0dXJlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpjdXN0b21ET01FbGVtZW50c0VuYWJsZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0Q3VzdG9tRE9N
RWxlbWVudHMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBt
OgorICAgICAgICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
SURMQXR0cmlidXRlcy50eHQ6CisgICAgICAgICogYmluZGluZ3MvdjgvQ3VzdG9tRWxlbWVudEhl
bHBlcnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRIZWxwZXJz
Ojppbml0aWFsaXplQ29uc3RydWN0b3JXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6Omhhc05v
QnVpbHRpbnNJblByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50SGVs
cGVyczo6aXNWYWxpZFByb3RvdHlwZVBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpDdXN0
b21FbGVtZW50SGVscGVyczo6aXNGZWF0dXJlQWxsb3dlZCk6CisgICAgICAgICogYmluZGluZ3Mv
djgvQ3VzdG9tRWxlbWVudEhlbHBlcnMuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaC4KKyAgICAgICAgKEN1c3RvbUVsZW1lbnRI
ZWxwZXJzKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6VjhBZGFwdG9yRnVuY3Rpb246OmdldFRlbXBsYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlY4QWRhcHRvckZ1bmN0aW9uOjpjb25maWd1cmVUZW1wbGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpWOEFkYXB0b3JGdW5jdGlvbjo6aW52b2NhdGlvbkNhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OlY4QWRhcHRvckZ1bmN0aW9uOjp3cmFwKToKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFY4QWRh
cHRvckZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlY4QWRhcHRvckZ1bmN0aW9uOjp1bndy
YXApOgorICAgICAgICAoV2ViQ29yZTo6VjhBZGFwdG9yRnVuY3Rpb246OmdldCk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvVjhET01Db25maWd1cmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlY4RE9NQ29uZmlndXJhdGlvbjo6Y29uZmlndXJlVGVtcGxhdGUpOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6
OnRvRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpmcm9tRnVuY3Rp
b24pOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oOgorICAgICAgICAoVjhE
T01XcmFwcGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50LmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpWOEhUTUxDdXN0b21FbGVtZW50OjpjcmVhdGVX
cmFwcGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50Lmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1l
LmguCisgICAgICAgIChWOEhUTUxDdXN0b21FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlY4
SFRNTEN1c3RvbUVsZW1lbnQ6OnRvVjgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEN1c3RvbUVs
ZW1lbnQ6OnRvVjgpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1l
Lmg6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tRWxlbWVudENvbnN0cnVj
dG9yQ3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpWOEN1c3RvbUVsZW1lbnRD
b25zdHJ1Y3Rvcjo6Y2FsbEFzRnVuY3Rpb25DYWxsYmFjayk6CisgICAgICAgICogZG9tL0N1c3Rv
bUVsZW1lbnRDb25zdHJ1Y3Rvci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmguCisgICAgICAgIChXZWJDb3JlOjpDdXN0b21F
bGVtZW50Q29uc3RydWN0b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVt
ZW50Q29uc3RydWN0b3I6OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6On5DdXN0b21FbGVtZW50Q29uc3RydWN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjpjcmVhdGVFbGVt
ZW50KToKKyAgICAgICAgKiBkb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmg6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmguCisg
ICAgICAgIChDdXN0b21FbGVtZW50Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vz
dG9tRWxlbWVudENvbnN0cnVjdG9yOjpkb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0
b21FbGVtZW50Q29uc3RydWN0b3I6OnRhZ05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9t
RWxlbWVudENvbnN0cnVjdG9yOjpuYW1lKToKKyAgICAgICAgKiBkb20vQ3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yLmlkbDogQWRkZWQuCisgICAgICAgICogZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3Ry
eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpD
dXN0b21FbGVtZW50UmVnaXN0cnkpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJl
Z2lzdHJ5Ojp+Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3Rv
bUVsZW1lbnRSZWdpc3RyeTo6Y29uc3RydWN0b3JPZik6CisgICAgICAgIChXZWJDb3JlOjpDdXN0
b21FbGVtZW50UmVnaXN0cnk6OmlzVmFsaWROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3Rv
bUVsZW1lbnRSZWdpc3RyeTo6cmVnaXN0ZXJFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkN1
c3RvbUVsZW1lbnRSZWdpc3RyeTo6ZmluZCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVt
ZW50UmVnaXN0cnk6OmNyZWF0ZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxl
bWVudFJlZ2lzdHJ5Ojpkb2N1bWVudCk6CisgICAgICAgICogZG9tL0N1c3RvbUVsZW1lbnRSZWdp
c3RyeS5oOiBBZGRlZC4KKyAgICAgICAgKEN1c3RvbUVsZW1lbnRSZWdpc3RyeSk6CisgICAgICAg
ICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZW1vdmVk
TGFzdFJlZik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVnaXN0ZXJFbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWdpc3RyeSk6CisgICAgICAgICogZG9tL0Rv
Y3VtZW50Lmg6CisgICAgICAgIChEb2N1bWVudCk6CisgICAgICAgICogZG9tL21ha2VfbmFtZXMu
cGw6CisgICAgICAgIChwcmludFdyYXBwZXJGYWN0b3J5Q3BwRmlsZSk6CisgICAgICAgICogaHRt
bC9IVE1MRG9jdW1lbnQuaWRsOgorCiAyMDEzLTAyLTIxICBQaGlsaXAgUm9nZXJzICA8cGRyQGdv
b2dsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIGRlZXAgY29weSBvZiBJbWFnZUJ1ZmZlciBpbiB0
aWxlZCBTVkcgYmFja2dyb3VuZHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggOTA0MTNl
OGYzMWQ1YTVlODFjM2Q0ZmZmNjk4YzIwYWNmNTA4MTdlYi4uYTllMTNlNDU0MTk0NmFhMTg1ZTc2
MjU1NGFhYTViZWE5Yzc0YTQxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyMCBAQAorMjAxMy0wMi0yMSAgSGFqaW1lIE1vcnJpdGEgIDxtb3JyaXRhQGdvb2dsZS5jb20+
CisKKyAgICAgICAgW0N1c3RvbSBFbGVtZW50c10gSW1wbGVtZW50IGJhcmUtYm9uZSBkb2N1bWVu
dC5yZWdpc3RlcigpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMDAyMjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGRlZCBlbmFibGVDdXN0b21ET01FbGVtZW50cyBmbGFnLgorCisgICAgICAgICogZmVh
dHVyZXMuZ3lwaToKKyAgICAgICAgKiBwdWJsaWMvV2ViUnVudGltZUZlYXR1cmVzLmg6CisgICAg
ICAgIChXZWJSdW50aW1lRmVhdHVyZXMpOgorICAgICAgICAqIHNyYy9XZWJSdW50aW1lRmVhdHVy
ZXMuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZUN1c3Rv
bURPTUVsZW1lbnRzKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJ1
bnRpbWVGZWF0dXJlczo6aXNDdXN0b21ET01FbGVtZW50c0VuYWJsZWQpOgorCiAyMDEzLTAyLTIx
ICBHcnplZ29yeiBDemFqa293c2tpICA8Zy5jemFqa293c2tpQHNhbXN1bmcuY29tPgogCiAgICAg
ICAgIEFsbG93IHRvIHJldHJpZXZlIHRoZSByZXF1ZXN0IGRhdGEgZnJvbSBhYnN0cmFjdCBUZXh0
Q2hlY2tpbmdSZXF1ZXN0IHRvIGJlIGFjY2Vzc2libGUgZm9yIFdLMgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRT
b3VyY2VzLm1ha2UKaW5kZXggYjIyYWRlNTdmOWE1NDg4NDI1NTVmNTBhNDEyZjk5ZDYzMzgyMGZi
NS4uZjZmNDExZGVlNzVjN2E4NjNmMGExNGExNmU2NmYxYTI5MTZlNzFhYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9E
ZXJpdmVkU291cmNlcy5tYWtlCkBAIC0yMjAsNiArMjIwLDcgQEAgQklORElOR19JRExTID0gXAog
ICAgICQoV2ViQ29yZSkvZG9tL0NsaXBib2FyZC5pZGwgXAogICAgICQoV2ViQ29yZSkvZG9tL0Nv
bW1lbnQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2RvbS9Db21wb3NpdGlvbkV2ZW50LmlkbCBcCisg
ICAgJChXZWJDb3JlKS9kb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmlkbCBcCiAgICAgJChX
ZWJDb3JlKS9kb20vQ3VzdG9tRXZlbnQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2RvbS9ET01Db3Jl
RXhjZXB0aW9uLmlkbCBcCiAgICAgJChXZWJDb3JlKS9kb20vRE9NRXJyb3IuaWRsIFwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQppbmRleCAyOGI3OGNhZDI5OTM0ZGZkNzNlZWUzYWVhZmUwZDU1YTBlNTA1MzA0Li5m
YjY5MDcxNjNmNmE5YjMyNzMxMzE3NWZlODUwMmUwNGQ0ZDI4YzE1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CkBAIC0yMDAsNiArMjAwLDcgQEAKICAgICAgICAgICAgICdkb20vQ2xpcGJvYXJkLmlkbCcsCiAg
ICAgICAgICAgICAnZG9tL0NvbW1lbnQuaWRsJywKICAgICAgICAgICAgICdkb20vQ29tcG9zaXRp
b25FdmVudC5pZGwnLAorICAgICAgICAgICAgJ2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3Iu
aWRsJywKICAgICAgICAgICAgICdkb20vQ3VzdG9tRXZlbnQuaWRsJywKICAgICAgICAgICAgICdk
b20vRE9NQ29yZUV4Y2VwdGlvbi5pZGwnLAogICAgICAgICAgICAgJ2RvbS9ET01FcnJvci5pZGwn
LApAQCAtMTE5MSw2ICsxMTkyLDggQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9BcnJheVZh
bHVlLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0JpbmRpbmdTdGF0ZS5jcHAnLAogICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L0JpbmRpbmdTdGF0ZS5oJywKKyAgICAgICAgICAgICdiaW5k
aW5ncy92OC9DdXN0b21FbGVtZW50SGVscGVycy5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdz
L3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0RP
TURhdGFTdG9yZS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5o
JywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9ET01SZXF1ZXN0U3RhdGUuaCcsCkBAIC0xMjU5
LDYgKzEyNjIsOCBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1NoYXJlZFBlcnNpc3RlbnQu
aCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuY3Bw
JywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5oJywK
KyAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5jcHAnLAorICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmgnLAogICAgICAgICAgICAgJ2Jp
bmRpbmdzL3Y4L1Y4QmluZGluZy5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4Qmlu
ZGluZy5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEJpbmRpbmdNYWNyb3MuaCcsCkBA
IC0xMjgwLDYgKzEyODUsOCBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9s
bGVyLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4R0NGb3JDb250ZXh0RGlzcG9zZS5j
cHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4R0NGb3JDb250ZXh0RGlzcG9zZS5oJywK
KyAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50LmNwcCcsCisgICAg
ICAgICAgICAnYmluZGluZ3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVudC5oJywKICAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5jcHAnLAogICAgICAgICAgICAgJ2Jp
bmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdz
L3Y4L1Y4SW5pdGlhbGl6ZXIuY3BwJywKQEAgLTEzNDAsNiArMTM0Nyw3IEBACiAgICAgICAgICAg
ICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q29uc29sZUN1c3RvbS5jcHAnLAogICAgICAgICAgICAg
J2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENvb3JkaW5hdGVzQ3VzdG9tLmNwcCcsCiAgICAgICAgICAg
ICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3J5cHRvQ3VzdG9tLmNwcCcsCisgICAgICAgICAgICAn
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yQ3VzdG9tLmNwcCcs
CiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tRXZlbnRDdXN0b20uY3Bw
JywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxTdGF0ZW1lbnRF
cnJvckNhbGxiYWNrLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3Vz
dG9tWFBhdGhOU1Jlc29sdmVyLmNwcCcsCkBAIC0yNzczLDYgKzI3ODEsMTAgQEAKICAgICAgICAg
ICAgICdkb20vQ29udGV4dEZlYXR1cmVzLmNwcCcsCiAgICAgICAgICAgICAnZG9tL0NvbnRleHRG
ZWF0dXJlcy5oJywKICAgICAgICAgICAgICdkb20vQ3Jvc3NUaHJlYWRUYXNrLmgnLAorICAgICAg
ICAgICAgJ2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuY3BwJywKKyAgICAgICAgICAgICdk
b20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmgnLAorICAgICAgICAgICAgJ2RvbS9DdXN0b21F
bGVtZW50UmVnaXN0cnkuY3BwJywKKyAgICAgICAgICAgICdkb20vQ3VzdG9tRWxlbWVudFJlZ2lz
dHJ5LmgnLAogICAgICAgICAgICAgJ2RvbS9DdXN0b21FdmVudC5jcHAnLAogICAgICAgICAgICAg
J2RvbS9DdXN0b21FdmVudC5oJywKICAgICAgICAgICAgICdkb20vRE9NQWxsSW5PbmUuY3BwJywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJs
ZWRGZWF0dXJlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVF
bmFibGVkRmVhdHVyZXMuY3BwCmluZGV4IDJhMmRhNmZlYjQ3NzFmM2QzN2Q2ZDYzODM1OTRkNTJk
NTMyMWU1MGYuLmY0MTE0M2VhZDY4MDM4MWVhYzYyOWI4ZDVmN2EwODgyYTQ0MTAxZjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0
dXJlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5h
YmxlZEZlYXR1cmVzLmNwcApAQCAtMTkwLDYgKzE5MCwxMCBAQCBib29sIFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OmlzU2hhZG93RE9NRW5hYmxlZCA9IGZhbHNlOwogYm9vbCBSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjppc0F1dGhvclNoYWRvd0RPTUZvckFueUVsZW1lbnRFbmFibGVkID0gZmFsc2U7
CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCitib29sIFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OmlzQ3VzdG9tRE9NRWxlbWVudHNFbmFibGVkID0gZmFsc2U7CisjZW5kaWYK
KwogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCiBib29sIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OmlzU3R5bGVTY29wZWRFbmFibGVkID0gZmFsc2U7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgKaW5k
ZXggY2VjNjQxOTVlYWM5MTJjNzA1ZDI0M2FiOWJkYWY2Mzk1ZmY1OTg0Mi4uMjUzN2U4YzM5N2I1
OGE0ZDM1NDM2ZTAyNmJlMjk5MWQ4M2IzMTU4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgKQEAgLTIxOCw2
ICsyMTgsMTEgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldEF1dGhvclNoYWRvd0RPTUZv
ckFueUVsZW1lbnRFbmFibGVkKGJvb2wgaXNFbmFibGVkKSB7IGlzQXV0aG9yU2hhZG93RE9NRm9y
QW55RWxlbWVudEVuYWJsZWQgPSBpc0VuYWJsZWQ7IH0KICNlbmRpZgogCisjaWYgRU5BQkxFKENV
U1RPTV9FTEVNRU5UUykKKyAgICBzdGF0aWMgYm9vbCBjdXN0b21ET01FbGVtZW50c0VuYWJsZWQo
KSB7IHJldHVybiBpc0N1c3RvbURPTUVsZW1lbnRzRW5hYmxlZDsgfQorICAgIHN0YXRpYyB2b2lk
IHNldEN1c3RvbURPTUVsZW1lbnRzKGJvb2wgaXNFbmFibGVkKSB7IGlzQ3VzdG9tRE9NRWxlbWVu
dHNFbmFibGVkID0gaXNFbmFibGVkOyB9CisjZW5kaWYKKwogI2lmIEVOQUJMRShTVFlMRV9TQ09Q
RUQpCiAgICAgc3RhdGljIGJvb2wgc3R5bGVTY29wZWRFbmFibGVkKCkgeyByZXR1cm4gaXNTdHls
ZVNjb3BlZEVuYWJsZWQ7IH0KICAgICBzdGF0aWMgdm9pZCBzZXRTdHlsZVNjb3BlZEVuYWJsZWQo
Ym9vbCBpc0VuYWJsZWQpIHsgaXNTdHlsZVNjb3BlZEVuYWJsZWQgPSBpc0VuYWJsZWQ7IH0KQEAg
LTM0Myw2ICszNDgsMTAgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCBpc0F1dGhvclNoYWRv
d0RPTUZvckFueUVsZW1lbnRFbmFibGVkOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQ1VTVE9NX0VM
RU1FTlRTKQorICAgIHN0YXRpYyBib29sIGlzQ3VzdG9tRE9NRWxlbWVudHNFbmFibGVkOworI2Vu
ZGlmCisKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQogICAgIHN0YXRpYyBib29sIGlzU3R5bGVT
Y29wZWRFbmFibGVkOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCmluZGV4IDJmNGY4ZGIwZGYyYzFkYTJkMzg0ZjJmMDJm
NmRhMzQ0MDdlYjljYWUuLmZhZmZhYzkwZWMxNjk4MmExMjAwMDM1Mzc4ZDFkNWMyNDkxMDYxMDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtCkBAIC0zNTIsMTMgKzM1MiwyMCBAQCBFTkQKICAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgImZhbHNlO1xuIik7CiAgICAgfQogCisgICAgbXkgJGZyb21GdW5jdGlvbk9wZW5pbmcg
PSAiIjsKKyAgICBteSAkZnJvbUZ1bmN0aW9uQ2xvc2luZyA9ICIiOworICAgIGlmICgkaW50ZXJm
YWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVjhXcmFwQXNGdW5jdGlvbiJ9KSB7CisgICAgICAg
ICRmcm9tRnVuY3Rpb25PcGVuaW5nID0gIlY4RE9NV3JhcHBlcjo6ZnJvbUZ1bmN0aW9uKCI7Cisg
ICAgICAgICRmcm9tRnVuY3Rpb25DbG9zaW5nID0gIikiOworICAgIH0KKwogICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsIDw8RU5EKTsKICAgICBzdGF0aWMgYm9vbCBIYXNJbnN0YW5jZSh2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4sIHY4OjpJc29sYXRlKik7CiAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBHZXRSYXdUZW1wbGF0ZSh2ODo6SXNvbGF0ZSopOwogICAg
IHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0VGVtcGxhdGUo
djg6Oklzb2xhdGUqKTsKICAgICBzdGF0aWMgJHtuYXRpdmVUeXBlfSogdG9OYXRpdmUodjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBvYmplY3QpCiAgICAgewotICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDwke25hdGl2ZVR5cGV9Kj4ob2JqZWN0LT5HZXRBbGlnbmVkUG9pbnRlckZyb21JbnRl
cm5hbEZpZWxkKHY4RE9NV3JhcHBlck9iamVjdEluZGV4KSk7CisgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PCR7bmF0aXZlVHlwZX0qPigke2Zyb21GdW5jdGlvbk9wZW5pbmd9b2JqZWN0
JHtmcm9tRnVuY3Rpb25DbG9zaW5nfS0+R2V0QWxpZ25lZFBvaW50ZXJGcm9tSW50ZXJuYWxGaWVs
ZCh2OERPTVdyYXBwZXJPYmplY3RJbmRleCkpOwogICAgIH0KICAgICBzdGF0aWMgdm9pZCBkZXJl
Zk9iamVjdCh2b2lkKik7CiAgICAgc3RhdGljIFdyYXBwZXJUeXBlSW5mbyBpbmZvOwpAQCAtNTM5
LDYgKzU0Niw5IEBAIEVORAogICAgIH0gZWxzZSB7CiAKICAgICAgICAgbXkgJGNyZWF0ZVdyYXBw
ZXJDYWxsID0gJGN1c3RvbVdyYXAgPyAiJHt2OEludGVyZmFjZU5hbWV9Ojp3cmFwIiA6ICIke3Y4
SW50ZXJmYWNlTmFtZX06OmNyZWF0ZVdyYXBwZXIiOworICAgICAgICBteSAkcmV0dXJuaW5nV3Jh
cHBlciA9ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJWOFdyYXBBc0Z1bmN0aW9u
In0gPyAiVjhET01XcmFwcGVyOjp0b0Z1bmN0aW9uKHdyYXBwZXIpIiA6ICJ3cmFwcGVyIjsKKyAg
ICAgICAgbXkgJHJldHVybmluZ0NyZWF0ZWRXcmFwcGVyT3BlbmluZyA9ICRpbnRlcmZhY2UtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJWOFdyYXBBc0Z1bmN0aW9uIn0gPyAiVjhET01XcmFwcGVyOjp0
b0Z1bmN0aW9uKCIgOiAiIjsKKyAgICAgICAgbXkgJHJldHVybmluZ0NyZWF0ZWRXcmFwcGVyQ2xv
c2luZyA9ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJWOFdyYXBBc0Z1bmN0aW9u
In0gPyAiLCBpbXBsLT5uYW1lKCksIGlzb2xhdGUpIiA6ICIiOwogCiAgICAgICAgIGlmICgkY3Vz
dG9tV3JhcCkgewogICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgPDxFTkQpOwpAQCAt
NTUyLDcgKzU2Miw3IEBAIGlubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoJHtuYXRp
dmVUeXBlfSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjCiB7CiAgICAgQVNTRVJUKGlt
cGwpOwogICAgIEFTU0VSVChET01EYXRhU3RvcmU6OmdldFdyYXBwZXIoaW1wbCwgaXNvbGF0ZSku
SXNFbXB0eSgpKTsKLSAgICByZXR1cm4gJGNyZWF0ZVdyYXBwZXJDYWxsKGltcGwsIGNyZWF0aW9u
Q29udGV4dCwgaXNvbGF0ZSk7CisgICAgcmV0dXJuICR7cmV0dXJuaW5nQ3JlYXRlZFdyYXBwZXJP
cGVuaW5nfSRjcmVhdGVXcmFwcGVyQ2FsbChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUp
JHtyZXR1cm5pbmdDcmVhdGVkV3JhcHBlckNsb3Npbmd9OwogfQogRU5ECiAgICAgICAgIH0KQEAg
LTU2NSw3ICs1NzUsNyBAQCBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoJHtuYXRp
dmVUeXBlfSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcgogICAgICAgICByZXR1cm4g
djhOdWxsV2l0aENoZWNrKGlzb2xhdGUpOwogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFw
cGVyID0gRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyKGltcGwsIGlzb2xhdGUpOwogICAgIGlmICgh
d3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB3cmFwcGVyOworICAgICAgICByZXR1
cm4gJHJldHVybmluZ1dyYXBwZXI7CiAgICAgcmV0dXJuIHdyYXAoaW1wbCwgY3JlYXRpb25Db250
ZXh0LCBpc29sYXRlKTsKIH0KIApAQCAtNTc2LDcgKzU4Niw3IEBAIGlubGluZSB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdG9WOEZhc3QoJHtuYXRpdmVUeXBlfSogaW1wbCwgY29uc3QgSG9sZGVyQ29u
dGFpbmVyCiAgICAgICAgIHJldHVybiB2OE51bGwoY29udGFpbmVyLkdldElzb2xhdGUoKSk7CiAg
ICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpnZXRXcmFw
cGVyRmFzdChpbXBsLCBjb250YWluZXIsIHdyYXBwYWJsZSk7CiAgICAgaWYgKCF3cmFwcGVyLklz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgICAgIHJldHVybiAkcmV0dXJu
aW5nV3JhcHBlcjsKICAgICByZXR1cm4gd3JhcChpbXBsLCBjb250YWluZXIuSG9sZGVyKCksIGNv
bnRhaW5lci5HZXRJc29sYXRlKCkpOwogfQogRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0IGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dAppbmRleCBjNjM2NDRmYmU5NjUyOWRmNzhh
MjM4MzBhNTZiNjQxYTJkYmVkZDA3Li4xODYxMTE4MTUwOWVjM2I1Y2M3NGMwYTlmMzA4YjZiMDU5
OGNhMzQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0
dHJpYnV0ZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0
cmlidXRlcy50eHQKQEAgLTEyOSwzICsxMjksNCBAQCBWOE1lYXN1cmVBcz0qCiBWOFJlYWRPbmx5
CiBWOFNraXBWVGFibGVWYWxpZGF0aW9uCiBWOFVuZm9yZ2VhYmxlCitWOFdyYXBBc0Z1bmN0aW9u
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9DdXN0b21FbGVtZW50SGVs
cGVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9DdXN0b21FbGVtZW50SGVscGVy
cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNTYyNWJiZGZhZTNkY2ZhNjA1ODMwZWM5YWY5N2ZkMmU1MzY1YzAx
NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0N1c3RvbUVs
ZW1lbnRIZWxwZXJzLmNwcApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJDdXN0b21FbGVtZW50SGVscGVycy5oIgorCisjaW5jbHVkZSAiRE9NV3JhcHBlcldv
cmxkLmgiCisjaW5jbHVkZSAiVjhDdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRl
ICJWOEhUTUxQYXJhZ3JhcGhFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhIVE1MU3BhbkVsZW1lbnQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykK
KworYm9vbCBDdXN0b21FbGVtZW50SGVscGVyczo6aW5pdGlhbGl6ZUNvbnN0cnVjdG9yV3JhcHBl
cihDdXN0b21FbGVtZW50Q29uc3RydWN0b3IqIGNvbnN0cnVjdG9yLCBjb25zdCBTY3JpcHRWYWx1
ZSYgcHJvdG90eXBlLCBTY3JpcHRTdGF0ZSogc3RhdGUpCit7CisgICAgQVNTRVJUKGlzRmVhdHVy
ZUFsbG93ZWQoc3RhdGUpKTsKKyAgICBBU1NFUlQoIXByb3RvdHlwZS52OFZhbHVlKCkuSXNFbXB0
eSgpICYmIHByb3RvdHlwZS52OFZhbHVlKCktPklzT2JqZWN0KCkpOworICAgIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB3cmFwcGVyVmFsdWUgPSB0b1Y4KGNvbnN0cnVjdG9yLCBzdGF0ZS0+Y29udGV4
dCgpLT5HbG9iYWwoKSwgc3RhdGUtPmNvbnRleHQoKS0+R2V0SXNvbGF0ZSgpKTsKKyAgICBpZiAo
d3JhcHBlclZhbHVlLklzRW1wdHkoKSB8fCAhd3JhcHBlclZhbHVlLT5Jc09iamVjdCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IHdyYXBwZXIg
PSB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj46OkNhc3Qod3JhcHBlclZhbHVlKTsKKyAgICAvLyAt
IE9iamVjdDo6Rm9yY2VTZXQoKSBub3IgT2JqZWN0OjpTZXRBY2Nlc3NvciBEb2Vzbid0IHdvcmsg
YWdhaW5zdCB0aGUgInByb3RvdHlwZSIgcHJvcGVydHkgb2YgZnVuY3Rpb24gb2JqZWN0cy4KKyAg
ICAvLyAtIFNldCgpLWluZyBoZXJlIGlzIHNhZmUgYmVjYXVzZQorICAgIC8vICAgLSBIb29raW5n
IE9iamVjdC5wcm90b3R5cGUncyBkZWZpbmVQcm9wZXJ0eSgpIHdpdGggInByb3RvdHlwZSIgb3Ig
ImNvbnN0cnVjdG9yIiBhbHNvIGRvZXNuJ3QgYWZmZWN0IG9uIHRoZXNlIHByb3BlcnRpZXMgb2Yg
ZnVuY3Rpb24gb2JqZWN0cyBhbmQKKyAgICAvLyAgIC0gVXNpbmcgU2V0KCkgaXMgb2theSBiZWNh
dWVzIGVhY2ggZnVuY3Rpb24gaGFzICJwcm90b3R5cGUiIHByb3BlcnR5IGZyb20gc3RhcnQgYW5k
IE9iamVjdHMucHJvdG90eXBlIGNhbm5vdCBpbnRlcmNlcHQgdGhlIHByb3BlcnR5IGFjY2Vzcy4K
KyAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHByb3RvdHlwZUtleSA9IHY4U3RyaW5nKCJwcm90
b3R5cGUiLCBzdGF0ZS0+Y29udGV4dCgpLT5HZXRJc29sYXRlKCkpOworICAgIEFTU0VSVCh3cmFw
cGVyLT5IYXNPd25Qcm9wZXJ0eShwcm90b3R5cGVLZXkpKTsKKyAgICB3cmFwcGVyLT5TZXQocHJv
dG90eXBlS2V5LCBwcm90b3R5cGUudjhWYWx1ZSgpLCB2ODo6UmVhZE9ubHkpOworCisgICAgdjg6
OkhhbmRsZTx2ODo6U3RyaW5nPiBjb25zdHJ1Y3RvcktleSA9IHY4U3RyaW5nKCJjb25zdHJ1Y3Rv
ciIsIHN0YXRlLT5jb250ZXh0KCktPkdldElzb2xhdGUoKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBwcm90b3R5cGVPYmplY3QgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHBy
b3RvdHlwZS52OFZhbHVlKCkpOworICAgIEFTU0VSVCghcHJvdG90eXBlT2JqZWN0LT5IYXNPd25Q
cm9wZXJ0eShjb25zdHJ1Y3RvcktleSkpOworICAgIHByb3RvdHlwZU9iamVjdC0+Rm9yY2VTZXQo
Y29uc3RydWN0b3JLZXksIHdyYXBwZXIsIHY4OjpSZWFkT25seSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3N0YXRpYyBib29sIGhhc05vQnVpbHRpbnNJblByb3RvdHlwZSh2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IGh0bWxQcm90b3R5cGUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjaGFpbikKK3sK
KyAgICB3aGlsZSAoIWNoYWluLklzRW1wdHkoKSkgeworICAgICAgICBpZiAoY2hhaW4gPT0gaHRt
bFByb3RvdHlwZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIWNoYWlu
LT5Jc09iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBUaGUg
aW50ZXJuYWwgZmllbGQgY291bnQgaW5kaWNhdGVzIHRoZSBvYmplY3QgbWlnaHQgYmUgYSBuYXRp
dmUgYmFja2VkLCBidWlsdC1pbiBvYmplY3QuCisgICAgICAgIGlmICh2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+OjpDYXN0KGNoYWluKS0+SW50ZXJuYWxGaWVsZENvdW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGNoYWluID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2Fz
dChjaGFpbiktPkdldFByb3RvdHlwZSgpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBDdXN0b21FbGVtZW50SGVscGVyczo6aXNWYWxpZFByb3RvdHlwZVBhcmFtZXRlcihj
b25zdCBTY3JpcHRWYWx1ZSYgcHJvdG90eXBlLCBTY3JpcHRTdGF0ZSogc3RhdGUpCit7CisgICAg
aWYgKHByb3RvdHlwZS52OFZhbHVlKCkuSXNFbXB0eSgpIHx8ICFwcm90b3R5cGUudjhWYWx1ZSgp
LT5Jc09iamVjdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBkb2N1bWVudC5y
ZWdpc3RlcigpIHNldHMgdGhlIGNvbnN0cnVjdG9yIHByb3BlcnR5LCBzbyB0aGUgcHJvdG90eXBl
IHNob3VsZG4ndCBoYXZlIG9uZS4KKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHByb3RvdHlw
ZU9iamVjdCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QocHJvdG90eXBlLnY4VmFsdWUo
KSk7CisgICAgaWYgKHByb3RvdHlwZU9iamVjdC0+SGFzT3duUHJvcGVydHkodjhTdHJpbmcoImNv
bnN0cnVjdG9yIiwgc3RhdGUtPmNvbnRleHQoKS0+R2V0SXNvbGF0ZSgpKSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBWOFBlckNvbnRleHREYXRhKiBwZXJDb250ZXh0RGF0YSA9IFY4UGVy
Q29udGV4dERhdGE6OmZyb20oc3RhdGUtPmNvbnRleHQoKSk7CisgICAgLy8KKyAgICAvLyBGSVhN
RTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDQzNgorICAgIC8v
ICAgZG9jdW1lbnQucmVnaXN0ZXIoKSBzaG91bGQgYWxsb3cgYXJiaXRyYXJ5IEhUTUxFbGVtZW50
IHN1YmNsYXNzc2VzLgorICAgIC8vICAgQ3VycmVudGx5IGl0IHN1cHBvcnRzIGN1c3RvbSBlbGVt
ZW50cyB3aGljaCBhcmUKKyAgICAvLyAgIC0gZGlyZWN0IHN1YmNsYXNzZXMgb2YgSFRNTEVsZW1l
bnQgb3IKKyAgICAvLyAgIC0gc3ViY2xhc3NlcyBvZiBvdGhlciBjdXN0b20gZWxlbWVudHMKKyAg
ICAvLworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaHRtbENvbnN0cnVjdG9yID0gdjg6Okhh
bmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChwZXJDb250ZXh0RGF0YS0+Y29uc3RydWN0b3JGb3JUeXBl
KCZWOEhUTUxFbGVtZW50OjppbmZvKSk7CisgICAgaWYgKGh0bWxDb25zdHJ1Y3Rvci5Jc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGh0
bWxQcm90b3R5cGUgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGh0bWxDb25zdHJ1Y3Rv
ci0+R2V0KHY4U3RyaW5nKCJwcm90b3R5cGUiLCBzdGF0ZS0+Y29udGV4dCgpLT5HZXRJc29sYXRl
KCkpKSk7CisgICAgaWYgKGh0bWxQcm90b3R5cGUuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKCFoYXNOb0J1aWx0aW5zSW5Qcm90b3R5cGUoaHRtbFByb3RvdHlwZSwg
cHJvdG90eXBlT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIEN1c3RvbUVsZW1lbnRIZWxwZXJzOjppc0ZlYXR1cmVBbGxvd2VkKFNjcmlw
dFN0YXRlKiBzdGF0ZSkKK3sKKyAgICByZXR1cm4gaXNGZWF0dXJlQWxsb3dlZChzdGF0ZS0+Y29u
dGV4dCgpKTsKK30KKworYm9vbCBDdXN0b21FbGVtZW50SGVscGVyczo6aXNGZWF0dXJlQWxsb3dl
ZCh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0KQoreworICAgIGlmIChET01XcmFwcGVy
V29ybGQqIHdvcmxkID0gRE9NV3JhcHBlcldvcmxkOjpnZXRXb3JsZChjb250ZXh0KSkKKyAgICAg
ICAgcmV0dXJuIHdvcmxkLT5pc01haW5Xb3JsZCgpOworICAgIHJldHVybiB0cnVlOworfQorCisK
KyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9DdXN0b21FbGVtZW50
SGVscGVycy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvQ3VzdG9tRWxlbWVudEhlbHBl
cnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4wOGQxYmNiYzE4OTU2OTVkZGFhYmRhZDBmYmYzZjhiOWQzMWFiYmE1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvQ3VzdG9tRWxl
bWVudEhlbHBlcnMuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDdXN0b21FbGVtZW50SGVscGVy
c19oCisjZGVmaW5lIEN1c3RvbUVsZW1lbnRIZWxwZXJzX2gKKworI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCitjbGFzcyBDdXN0b21FbGVtZW50Q29u
c3RydWN0b3I7CitjbGFzcyBTY3JpcHRTdGF0ZTsKKworY2xhc3MgQ3VzdG9tRWxlbWVudEhlbHBl
cnMgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVDb25zdHJ1Y3RvcldyYXBw
ZXIoQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKiwgY29uc3QgU2NyaXB0VmFsdWUmIHByb3RvdHlw
ZSwgU2NyaXB0U3RhdGUqKTsKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkUHJvdG90eXBlUGFyYW1l
dGVyKGNvbnN0IFNjcmlwdFZhbHVlJiwgU2NyaXB0U3RhdGUqKTsKKyAgICBzdGF0aWMgYm9vbCBp
c0ZlYXR1cmVBbGxvd2VkKFNjcmlwdFN0YXRlKik7CisKKyAgICBzdGF0aWMgYm9vbCBpc0ZlYXR1
cmVBbGxvd2VkKHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KTsKK307CisKKyNlbmRpZiAvLyBFTkFC
TEUoQ1VTVE9NX0VMRU1FTlRTKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBDdXN0b21FbGVtZW50SGVscGVyc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOEFkYXB0b3JGdW5jdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGY0YmRiNThkZTMxYmM0Zjc2NjEy
ZGE0ZTIxMzllNTJmZjM2ZDA4ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmNwcApAQCAtMCwwICsxLDkxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlY4QWRhcHRvckZ1bmN0aW9uLmgiCisKKyNpbmNsdWRlICJW
OFBlcklzb2xhdGVEYXRhLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgRU5BQkxF
KENVU1RPTV9FTEVNRU5UUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXcmFwcGVyVHlwZUlu
Zm8gVjhBZGFwdG9yRnVuY3Rpb246OmluZm8gPSB7IFY4QWRhcHRvckZ1bmN0aW9uOjpnZXRUZW1w
bGF0ZSwgMCwgMCwgMCwgMCwgMCwgMCwgV3JhcHBlclR5cGVPYmplY3RQcm90b3R5cGUgfTsKKwor
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4QWRhcHRvckZ1bmN0aW9uOjpn
ZXRUZW1wbGF0ZSh2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3sKKyAgICBpZiAoIWlzb2xhdGUpCisg
ICAgICAgIGlzb2xhdGUgPSB2ODo6SXNvbGF0ZTo6R2V0Q3VycmVudCgpOworICAgIFY4UGVySXNv
bGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpmcm9tKGlzb2xhdGUpOworICAgIFY4
UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdU
ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOworICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVt
cGxhdGVNYXAoKS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CisgICAgLy8g
VGhlIGxpZmV0aW1lIGlzIG9mIG5ld1RlbXBsYXRlIGlzIGRlbGVnYXRlZCB0byB0aGUgVGVtcGxh
dGVNYXAgdGh1cyB0aGlzIHdvbid0IGJlIGxlYWtlZC4KKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6
RnVuY3Rpb25UZW1wbGF0ZT4gbmV3VGVtcGxhdGUgPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT46Ok5ldyh2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KCkpOworICAgIGRhdGEt
PnJhd1RlbXBsYXRlTWFwKCkuYWRkKCZpbmZvLCBjb25maWd1cmVUZW1wbGF0ZShuZXdUZW1wbGF0
ZSkpOworICAgIHJldHVybiBuZXdUZW1wbGF0ZTsKK30KKwordjg6OlBlcnNpc3RlbnQ8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+IFY4QWRhcHRvckZ1bmN0aW9uOjpjb25maWd1cmVUZW1wbGF0ZSh2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZnVuY3Rpb25UZW1wbGF0ZSkKK3sKKyAg
ICBmdW5jdGlvblRlbXBsYXRlLT5TZXRDYWxsSGFuZGxlcigmVjhBZGFwdG9yRnVuY3Rpb246Omlu
dm9jYXRpb25DYWxsYmFjayk7CisgICAgcmV0dXJuIGZ1bmN0aW9uVGVtcGxhdGU7Cit9CisKK3Y4
OjpIYW5kbGU8djg6OlZhbHVlPiBWOEFkYXB0b3JGdW5jdGlvbjo6aW52b2NhdGlvbkNhbGxiYWNr
KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiB3cmFwcGVkID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzLkNhbGxlZSgpLT5H
ZXRIaWRkZW5WYWx1ZShWOEhpZGRlblByb3BlcnR5TmFtZTo6YWRhcHRvckZ1bmN0aW9uUGVlcigp
KSk7CisgICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIGZhc3RlciBpZiB3ZSBjYW4gYWNjZXNzIHVu
ZGVybHlpbmcgbmF0aXZlIGNhbGxiYWNrIGRpcmVjdGx5LgorICAgIC8vIFdlIHdvbid0IG5lZWQg
dGhpcyBvbmNlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgxMzgg
aXMgYWRkcmVzc2VkLgorICAgIFZlY3Rvcjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiBhcmdBcnJh
eShhcmdzLkxlbmd0aCgpKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3MuTGVuZ3RoKCk7
ICsraSkKKyAgICAgICAgYXJnQXJyYXkuYXBwZW5kKGFyZ3NbaV0pOworICAgIGlmIChhcmdzLklz
Q29uc3RydWN0Q2FsbCgpKQorICAgICAgICByZXR1cm4gd3JhcHBlZC0+Q2FsbEFzQ29uc3RydWN0
b3IoYXJnQXJyYXkuc2l6ZSgpLCBhcmdBcnJheS5kYXRhKCkpOworICAgIHJldHVybiB3cmFwcGVk
LT5DYWxsQXNGdW5jdGlvbihhcmdzLlRoaXMoKSwgYXJnQXJyYXkuc2l6ZSgpLCBhcmdBcnJheS5k
YXRhKCkpOworfQorCit2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gVjhBZGFwdG9yRnVuY3Rpb246
OndyYXAodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QsIGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit7CisgICAgaWYgKG9iamVjdC5Jc0VtcHR5KCkg
fHwgIW9iamVjdC0+SXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OkZ1
bmN0aW9uPigpOworICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBhZGFwdG9yID0gdjg6Okhh
bmRsZTx2ODo6RnVuY3Rpb24+OjpDYXN0KGdldFRlbXBsYXRlKGlzb2xhdGUpLT5HZXRGdW5jdGlv
bigpKTsKKyAgICBpZiAoYWRhcHRvci5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB2ODo6SGFu
ZGxlPHY4OjpGdW5jdGlvbj4oKTsKKyAgICBhZGFwdG9yLT5TZXROYW1lKHY4U3RyaW5nKG5hbWUu
c3RyaW5nKCksIGlzb2xhdGUpKTsKKyAgICBhZGFwdG9yLT5TZXRIaWRkZW5WYWx1ZShWOEhpZGRl
blByb3BlcnR5TmFtZTo6YWRhcHRvckZ1bmN0aW9uUGVlcigpLCBvYmplY3QpOworICAgIG9iamVj
dC0+U2V0SGlkZGVuVmFsdWUoVjhIaWRkZW5Qcm9wZXJ0eU5hbWU6OmFkYXB0b3JGdW5jdGlvblBl
ZXIoKSwgYWRhcHRvcik7CisgICAgcmV0dXJuIGFkYXB0b3I7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5oIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBZGFwdG9yRnVuY3Rpb24uaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lM2Q2
YmI1MWY0NDBhNGM3NzI0YWJjZTNkZTkzMDY4ZGFlOGMzYTU3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBZGFwdG9yRnVuY3Rpb24uaApAQCAtMCwwICsx
LDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBWOEFkYXB0b3JGdW5jdGlvbl9oCisjZGVmaW5lIFY4QWRhcHRvckZ1bmN0
aW9uX2gKKworI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4SGlkZGVuUHJvcGVy
dHlOYW1lLmgiCisjaW5jbHVkZSAiV3JhcHBlclR5cGVJbmZvLmgiCisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKworI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworLy8KKy8vIEZJWE1FKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDgxMzgpOgorLy8gVjhBZGFwdG9yRnVuY3Rpb24gY2xhc3MgYW5kIFY4V3JhcEFz
RnVuY3Rpb24gSURMIGF0dHJpYnV0ZSBhcmUgbmVlZGVkIGZvciB0d28gcmVhc29uczoKKy8vIC0g
MSkgVjggZG9lc24ndCBhbGxvdyBleHBhbmRpbmcgdGhlIGludGVybmFsIGZpZWxkIG9mIGZ1bmN0
aW9uIG9iamVjdHMuIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9p
ZD04MzcKKy8vICAgICAgV2ViS2l0IG5lZWQgaXQgdG8gYXNzb2NpYXRlIGVhY2ggd3JhcHBlciB0
byBpdHMgYmFja2luZyBDKysgb2JqZWN0LiBXZSBzdG9yZSBpdCBpbiBhIGhpZGRlbiBwcm9wZXJ0
eSBvZiB0aGUgd3JhcHBlZCBvYmplY3QuCisvLyAtIDIpIEJpbmRpbmcgY29kZWJhc2UgYXNzdW1l
cyBldmVyeSB3cmFwcGVyIG9iamVjdCBpcyBjcmVhdGVkIHRocm91Z2ggT2JqZWN0VGVtcGxhdGU6
Ok5ld0luc3RhbmNlKCksIG5vdCBGdW5jdGlvblRlbXBsYXRlOjpHZXRGdW5jdGlvbigpLgorLy8g
T25jZSAxKSBpcyBhZGRyZXNzc2VkLCB3ZSBjb3VsZCBhdHRhY2sgMikgd2l0aCBpdC4gCisvLwor
Y2xhc3MgVjhBZGFwdG9yRnVuY3Rpb24geworcHVibGljOgorICAgIHN0YXRpYyBXcmFwcGVyVHlw
ZUluZm8gaW5mbzsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB1bndyYXAodjg6
OkhhbmRsZTx2ODo6RnVuY3Rpb24+KTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6RnVuY3Rp
b24+IHdyYXAodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
LCB2ODo6SXNvbGF0ZSopOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gZ2V0
KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4pOworCisgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPiBnZXRUZW1wbGF0ZSh2ODo6SXNvbGF0ZSogPSAwKTsKKyAgICBz
dGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGNvbmZpZ3VyZVRlbXBs
YXRlKHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPik7CisgICAgc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBpbnZvY2F0aW9uQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50
cyYpOworfTsKKworaW5saW5lIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhBZGFwdG9yRnVuY3Rp
b246OnVud3JhcCh2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gZnVuY3Rpb24pCit7CisgICAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZWQgPSBmdW5jdGlvbi0+R2V0SGlkZGVuVmFsdWUoVjhI
aWRkZW5Qcm9wZXJ0eU5hbWU6OmFkYXB0b3JGdW5jdGlvblBlZXIoKSk7CisgICAgQVNTRVJUKCF3
cmFwcGVkLklzRW1wdHkoKSk7CisgICAgQVNTRVJUKHdyYXBwZWQtPklzT2JqZWN0KCkpOworICAg
IHJldHVybiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHdyYXBwZWQpOworfQorCitpbmxp
bmUgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IFY4QWRhcHRvckZ1bmN0aW9uOjpnZXQodjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBvYmplY3QpCit7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFk
YXB0b3JGdW5jdGlvbiA9IG9iamVjdC0+R2V0SGlkZGVuVmFsdWUoVjhIaWRkZW5Qcm9wZXJ0eU5h
bWU6OmFkYXB0b3JGdW5jdGlvblBlZXIoKSk7CisgICAgQVNTRVJUKCFhZGFwdG9yRnVuY3Rpb24u
SXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoYWRhcHRvckZ1bmN0aW9uLT5Jc0Z1bmN0aW9uKCkpOwor
ICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj46OkNhc3QoYWRhcHRvckZ1bmN0aW9u
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENVU1RP
TV9FTEVNRU5UUykKKyNlbmRpZiAvLyBWOEFkYXB0b3JGdW5jdGlvbl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTUNvbmZpZ3VyYXRpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01Db25maWd1cmF0aW9uLmNwcAppbmRleCAwYmJhNmZj
OTc5ZmNhMjljNmVjYThiODg2NGEyNDVlYWJkYTU2YjMyLi45MGRmYjQxODAyZGU4MGI3YTY4ZmU3
MjcwZDViYjBhZmI1Mjg0MWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOERPTUNvbmZpZ3VyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4RE9NQ29uZmlndXJhdGlvbi5jcHAKQEAgLTMzLDYgKzMzLDggQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCitjb25zdCBpbnQgcHJvdG90eXBlSW50ZXJuYWxGaWVsZGNvdW50ID0gMTsKKwog
dm9pZCBWOERPTUNvbmZpZ3VyYXRpb246OmJhdGNoQ29uZmlndXJlQXR0cmlidXRlcyh2ODo6SGFu
ZGxlPHY4OjpPYmplY3RUZW1wbGF0ZT4gaW5zdGFuY2UsIHY4OjpIYW5kbGU8djg6Ok9iamVjdFRl
bXBsYXRlPiBwcm90b3R5cGUsIGNvbnN0IEJhdGNoZWRBdHRyaWJ1dGUqIGF0dHJpYnV0ZXMsIHNp
emVfdCBhdHRyaWJ1dGVDb3VudCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBhdHRyaWJ1dGVDb3VudDsgKytpKQpAQCAtNjAsOCArNjIsMTUgQEAg
djg6OkxvY2FsPHY4OjpTaWduYXR1cmU+IFY4RE9NQ29uZmlndXJhdGlvbjo6Y29uZmlndXJlVGVt
cGxhdGUodjg6OlBlcnNpc3RlbnQ8djgKICAgICBmdW5jdGlvbkRlc2NyaXB0b3ItPlNldENsYXNz
TmFtZSh2ODo6U3RyaW5nOjpOZXdTeW1ib2woaW50ZXJmYWNlTmFtZSkpOwogICAgIHY4OjpMb2Nh
bDx2ODo6T2JqZWN0VGVtcGxhdGU+IGluc3RhbmNlID0gZnVuY3Rpb25EZXNjcmlwdG9yLT5JbnN0
YW5jZVRlbXBsYXRlKCk7CiAgICAgaW5zdGFuY2UtPlNldEludGVybmFsRmllbGRDb3VudChmaWVs
ZENvdW50KTsKLSAgICBpZiAoIXBhcmVudENsYXNzLklzRW1wdHkoKSkKKyAgICBpZiAoIXBhcmVu
dENsYXNzLklzRW1wdHkoKSkgewogICAgICAgICBmdW5jdGlvbkRlc2NyaXB0b3ItPkluaGVyaXQo
cGFyZW50Q2xhc3MpOworICAgICAgICAvLyBNYXJrcyB0aGUgcHJvdG90eXBlIG9iamVjdCBhcyBv
bmUgb2YgbmF0aXZlLWJhY2tlZCBvYmplY3RzLgorICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZCBz
aW5jZSBidWcgMTEwNDM2IGFza3MgV2ViS2l0IHRvIHRlbGwgbmF0aXZlLWluaXRpYXRlZCBwcm90
b3R5cGVzIGZyb20gcHVyZS1KUyBvbmVzLgorICAgICAgICAvLyBUaGlzIGRvZXNuJ3QgbWFyayBr
aW5kcyAicm9vdCIgY2xhc3NlcyBsaWtlIE5vZGUsIHdoZXJlIHNldHRpbmcgdGhpcyBjaGFuZ2Vz
IHByb3RvdHlwZSBjaGFpbiBzdHJ1Y3R1cmUuCisgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0
VGVtcGxhdGU+IHByb3RvdHlwZSA9IGZ1bmN0aW9uRGVzY3JpcHRvci0+UHJvdG90eXBlVGVtcGxh
dGUoKTsKKyAgICAgICAgcHJvdG90eXBlLT5TZXRJbnRlcm5hbEZpZWxkQ291bnQocHJvdG90eXBl
SW50ZXJuYWxGaWVsZGNvdW50KTsKKyAgICB9CisKICAgICBpZiAoYXR0cmlidXRlQ291bnQpCiAg
ICAgICAgIGJhdGNoQ29uZmlndXJlQXR0cmlidXRlcyhpbnN0YW5jZSwgZnVuY3Rpb25EZXNjcmlw
dG9yLT5Qcm90b3R5cGVUZW1wbGF0ZSgpLCBhdHRyaWJ1dGVzLCBhdHRyaWJ1dGVDb3VudCwgaXNv
bGF0ZSk7CiAgICAgdjg6OkxvY2FsPHY4OjpTaWduYXR1cmU+IGRlZmF1bHRTaWduYXR1cmUgPSB2
ODo6U2lnbmF0dXJlOjpOZXcoZnVuY3Rpb25EZXNjcmlwdG9yKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCmluZGV4IDM0Mjc3OGFjZjc5NDZhYTBkY2I0Yzc4
OWFiMGRiNzAwOWIwNGM4YjMuLjRkOGMyMjZmM2UyNzJmMGUzNTk2MjFlOGQ0MDY4YzMxOTRiNTNm
YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcApAQCAt
MzEsNiArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlY4RE9NV3JhcHBl
ci5oIgogCisjaW5jbHVkZSAiVjhBZGFwdG9yRnVuY3Rpb24uaCIKICNpbmNsdWRlICJWOEJpbmRp
bmcuaCIKICNpbmNsdWRlICJWOERPTVdpbmRvdy5oIgogI2luY2x1ZGUgIlY4SFRNTENvbGxlY3Rp
b24uaCIKQEAgLTEzNyw0ICsxMzgsMjUgQEAgYm9vbCBWOERPTVdyYXBwZXI6OmlzV3JhcHBlck9m
VHlwZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIFdyYXBwZXJUeXBlSW5mbyoKICAgICBy
ZXR1cm4gdHlwZUluZm8gPT0gdHlwZTsKIH0KIAorI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMp
CisKK3Y4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBWOERPTVdyYXBwZXI6OnRvRnVuY3Rpb24odjg6
OkhhbmRsZTx2ODo6VmFsdWU+IG9iamVjdCkKK3sKKyAgICByZXR1cm4gVjhBZGFwdG9yRnVuY3Rp
b246OmdldCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KG9iamVjdCkpOworfQorCit2ODo6
SGFuZGxlPHY4OjpGdW5jdGlvbj4gVjhET01XcmFwcGVyOjp0b0Z1bmN0aW9uKHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gb2JqZWN0LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIHY4OjpJc29sYXRl
KiBpc29sYXRlKQoreworICAgIHJldHVybiBWOEFkYXB0b3JGdW5jdGlvbjo6d3JhcChvYmplY3Qs
IG5hbWUsIGlzb2xhdGUpOworfQorCit2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4RE9NV3JhcHBl
cjo6ZnJvbUZ1bmN0aW9uKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KQoreworICAgIGlm
ICghb2JqZWN0LT5Jc0Z1bmN0aW9uKCkpCisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgcmV0
dXJuIFY4QWRhcHRvckZ1bmN0aW9uOjp1bndyYXAodjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+OjpD
YXN0KG9iamVjdCkpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKwog
fSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4RE9NV3JhcHBlci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01X
cmFwcGVyLmgKaW5kZXggMzlkY2U0N2YzZjc1NzI4ZGU3ZGIyOTc2Zjg3NGNiZTdhYjEyY2FhNC4u
MTg0NDFhOWUxMmZlYzJkZWU5ODkyNDljYTM4NDFlYzUzNmFkYTEwMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKQEAgLTYyLDYgKzYyLDEzIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgICAgICBzdGF0aWMgYm9vbCBpc0RPTVdyYXBwZXIodjg6OkhhbmRs
ZTx2ODo6VmFsdWU+KTsKICAgICAgICAgc3RhdGljIGJvb2wgaXNXcmFwcGVyT2ZUeXBlKHY4OjpI
YW5kbGU8djg6OlZhbHVlPiwgV3JhcHBlclR5cGVJbmZvKik7CisKKyNpZiBFTkFCTEUoQ1VTVE9N
X0VMRU1FTlRTKQorICAgICAgICAvLyBVc2VkIGZvciBWOFdyYXBBc0Z1bmN0aW9uLCB3aGljaCBp
cyB1c2VkIG9ubHkgYnkgQ1VTVE9NX0VMRU1FTlRTCisgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpGdW5jdGlvbj4gdG9GdW5jdGlvbih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOworICAgICAg
ICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IHRvRnVuY3Rpb24odjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCB2ODo6SXNvbGF0ZSopOworICAg
ICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBmcm9tRnVuY3Rpb24odjg6OkhhbmRs
ZTx2ODo6T2JqZWN0Pik7CisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKICAgICB9
OwogCiAgICAgaW5saW5lIHZvaWQgVjhET01XcmFwcGVyOjpzZXROYXRpdmVJbmZvKHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gd3JhcHBlciwgV3JhcHBlclR5cGVJbmZvKiB0eXBlLCB2b2lkKiBvYmpl
Y3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhUTUxDdXN0b21F
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SFRNTEN1c3RvbUVsZW1l
bnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmJhNTY0ZTNjNDgwYjg2YzVhNTNlNTk4ZGVhNDFhOGQyMTMxYTk5
ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhUTUxD
dXN0b21FbGVtZW50LmNwcApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlY4SFRNTEN1c3RvbUVsZW1lbnQuaCIKKworI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRI
ZWxwZXJzLmgiCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAi
SFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJWOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oIgor
I2luY2x1ZGUgIlY4SFRNTFNwYW5FbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
I2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKKy8vIEZJWE1FOiBFYWNoIGN1c3RvbSBlbGVt
ZW50cyBzaG91bGQgaGF2ZSBpdHMgb3duIEdldFRlbXBsYXRlIG1ldGhvZCBzbyB0aGF0IGl0IGNh
biBiZSBkZXJpdmVkIGZyb20gZGlmZmVyZW50IHN1cGVyIGVsZW1lbnQuCitXcmFwcGVyVHlwZUlu
Zm8gVjhIVE1MQ3VzdG9tRWxlbWVudDo6aW5mbyA9IHsgJlY4SFRNTEVsZW1lbnQ6OkdldFRlbXBs
YXRlLCBWOEhUTUxFbGVtZW50OjpkZXJlZk9iamVjdCwgMCwgVjhIVE1MRWxlbWVudDo6dG9FdmVu
dFRhcmdldCwgMCwgMCwgJlY4SFRNTEVsZW1lbnQ6OmluZm8sIFdyYXBwZXJUeXBlT2JqZWN0UHJv
dG90eXBlIH07CisKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhIVE1MQ3VzdG9tRWxlbWVudDo6
Y3JlYXRlV3JhcHBlcihQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBpbXBsLCB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit7CisgICAg
QVNTRVJUKGltcGwpOworCisgICAgUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gY29u
c3RydWN0b3IgPSBDdXN0b21FbGVtZW50UmVnaXN0cnk6OmNvbnN0cnVjdG9yT2YoaW1wbC5nZXQo
KSk7CisgICAgaWYgKCFjb25zdHJ1Y3RvcikgeworICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gd3JhcHBlclZhbHVlID0gV2ViQ29yZTo6dG9WOCh0b0hUTUxVbmtub3duRWxlbWVudChpbXBs
LmdldCgpKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKKyAgICAgICAgaWYgKCF3cmFwcGVy
VmFsdWUuSXNFbXB0eSgpICYmIHdyYXBwZXJWYWx1ZS0+SXNPYmplY3QoKSkKKyAgICAgICAgICAg
IHJldHVybiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHdyYXBwZXJWYWx1ZSk7CisgICAg
ICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCk7CisgICAgfQorCisgICAgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhET01XcmFwcGVyOjpjcmVhdGVXcmFwcGVyKGNy
ZWF0aW9uQ29udGV4dCwgJmluZm8sIGltcGwuZ2V0KCksIGlzb2xhdGUpOworICAgIGlmICh3cmFw
cGVyLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisKKyAgICAvLyBUaGUgY29u
c3RydWN0b3IgYW5kIHJlZ2lzdGVyZWQgbGlmZWN5Y2xlIGNhbGxiYWNrcyBzaG91bGQgYmUgdmlz
aWJsZSBvbmx5IGZyb20gbWFpbiB3b3JsZC4KKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGRuJ3Qg
YmUgbmVlZGVkIG9uY2UgZWFjaCBjdXN0b20gZWxlbWVudCBoYXMgaXRzIG93biBGdW5jdGlvblRl
bXBsYXRlCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
ODEzOAorICAgIGlmIChDdXN0b21FbGVtZW50SGVscGVyczo6aXNGZWF0dXJlQWxsb3dlZChjcmVh
dGlvbkNvbnRleHQtPkNyZWF0aW9uQ29udGV4dCgpKSkgeworICAgICAgICB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gd3JhcHBlclZhbHVlID0gV2ViQ29yZTo6dG9WOChjb25zdHJ1Y3Rvci5nZXQoKSwg
Y3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKKyAgICAgICAgaWYgKHdyYXBwZXJWYWx1ZS5Jc0Vt
cHR5KCkgfHwgIXdyYXBwZXJWYWx1ZS0+SXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCk7CisgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
Y29uc3RydWN0b3JXYXBwZXIgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHdyYXBwZXJW
YWx1ZSk7CisgICAgICAgIHdyYXBwZXItPlNldFByb3RvdHlwZShjb25zdHJ1Y3RvcldhcHBlci0+
R2V0KHY4U3RyaW5nKCJwcm90b3R5cGUiLCBpc29sYXRlKSkpOworICAgIH0KKworICAgIFY4RE9N
V3JhcHBlcjo6YXNzb2NpYXRlT2JqZWN0V2l0aFdyYXBwZXIoaW1wbCwgJmluZm8sIHdyYXBwZXIs
IGlzb2xhdGUsIFdyYXBwZXJDb25maWd1cmF0aW9uOjpEZXBlbmRlbnQpOworICAgIHJldHVybiB3
cmFwcGVyOworfQorCisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhIVE1MQ3VzdG9tRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIVE1M
Q3VzdG9tRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRiZmJmMzlmYTcwZDNmNmZmN2QyODAyNzYyYjQ5
ZjQxZWQyNjUxMmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOEhUTUxDdXN0b21FbGVtZW50LmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVjhIVE1MQ3Vz
dG9tRWxlbWVudF9oCisjZGVmaW5lIFY4SFRNTEN1c3RvbUVsZW1lbnRfaAorCisjaW5jbHVkZSAi
VjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiVjhIVE1M
RWxlbWVudC5oIgorI2luY2x1ZGUgIlY4SFRNTFVua25vd25FbGVtZW50LmgiCisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBIVE1MRWxl
bWVudDsKKworI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKK2NsYXNzIFY4SFRNTEN1c3Rv
bUVsZW1lbnQgeworcHVibGljOgorICAgIHN0YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKKyAg
ICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB0b1Y4KEhUTUxFbGVtZW50Kiwgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
KCksIHY4OjpJc29sYXRlKiA9IDApOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IGNyZWF0ZVdyYXBwZXIoUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4sIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4sIHY4OjpJc29sYXRlKik7Cit9OworCitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBWOEhUTUxDdXN0b21FbGVtZW50Ojp0b1Y4KEhUTUxFbGVtZW50KiBpbXBsLCB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit7Cisg
ICAgaWYgKFVOTElLRUxZKCFpbXBsKSkKKyAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD46OkNhc3QodjhOdWxsV2l0aENoZWNrKGlzb2xhdGUpKTsKKyAgICB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IHdyYXBwZXIgPSBET01EYXRhU3RvcmU6OmdldFdyYXBwZXIoaW1wbCwgaXNvbGF0
ZSk7CisgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7
CisgICAgcmV0dXJuIFY4SFRNTEN1c3RvbUVsZW1lbnQ6OmNyZWF0ZVdyYXBwZXIoaW1wbCwgY3Jl
YXRpb25Db250ZXh0LCBpc29sYXRlKTsKK30KKworI2Vsc2UgLy8gRU5BQkxFKENVU1RPTV9FTEVN
RU5UUykKKworY2xhc3MgVjhIVE1MQ3VzdG9tRWxlbWVudCB7CitwdWJsaWM6CisgICAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcChIVE1MRWxlbWVudCosIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6
SXNvbGF0ZSogPSAwKTsKK307CisKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IEhUTUxD
dXN0b21FbGVtZW50Ojp0b1Y4KEhUTUxFbGVtZW50KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit7CisgICAgcmV0dXJu
IHRvVjgodG9IVE1MVW5rbm93bkVsZW1lbnQoaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0
ZSk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBWOEhUTUxDdXN0b21FbGVtZW50X2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmggYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oCmluZGV4IDUw
OGJkZDM2MjgwNmE3MTA0NmNkM2Q2MmYwMzVhY2UyYjIyNjFhYmMuLjAzY2Q1N2ZkODkwZjMxMWU0
Mjk1NDU4MGQ0NjFhMTZmOGViNDQ4ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaApAQCAtNDUsNiArNDUsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgVihzY3JpcHRTdGF0ZSkgXAogICAgIFYoc2xlZXBGdW5jdGlvbikgXAog
ICAgIFYoc3RhdGUpIFwKKyAgICBWKGFkYXB0b3JGdW5jdGlvblBlZXIpIFwKICAgICBWKHRvU3Ry
aW5nU3RyaW5nKSBcCiAgICAgVih0eXBlZEFycmF5SGlkZGVuQ29weU1ldGhvZCkKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvckN1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzQzNzRmNjc2
ODgwYzkyODU0ZjI4ODk0NmE2MzkxNTFhMGIzYjIzNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvckN1
c3RvbS5jcHAKQEAgLTAsMCArMSw1NCBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqIAorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorKiBtZXQ6CisqIAorKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisqIGRpc3RyaWJ1dGlvbi4KKyogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
KiAKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9y
LmgiCisKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJW
OEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEhUTUxDdXN0b21FbGVtZW50LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4Q3VzdG9tRWxlbWVudENvbnN0
cnVjdG9yOjpjYWxsQXNGdW5jdGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3Mp
Cit7CisgICAgaWYgKCFhcmdzLklzQ29uc3RydWN0Q2FsbCgpKQorICAgICAgICByZXR1cm4gdGhy
b3dUeXBlRXJyb3IoIkRPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBh
IGZ1bmN0aW9uLiIsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICBpZiAoQ29uc3RydWN0b3JNb2Rl
OjpjdXJyZW50KCkgPT0gQ29uc3RydWN0b3JNb2RlOjpXcmFwRXhpc3RpbmdPYmplY3QpCisgICAg
ICAgIHJldHVybiBhcmdzLkhvbGRlcigpOworCisgICAgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9y
KiBpbXBsID0gdG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CisgICAgUmVmUHRyPEhUTUxFbGVtZW50
PiBlbGVtZW50ID0gaW1wbC0+Y3JlYXRlRWxlbWVudCgpOworICAgIGlmICghZWxlbWVudCkKKyAg
ICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIFY4SFRNTEN1c3RvbUVsZW1l
bnQ6OnRvVjgoZWxlbWVudC5nZXQoKSwgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9D
dXN0b21FbGVtZW50Q29uc3RydWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYyNDk3MzJhNTM0MThkYjg1
ZjYxNTQ5YTY5OTJjYjlhY2EyMTg5Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmNwcApAQCAtMCwwICsxLDcxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oIgorCisj
aWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKworI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRIZWxw
ZXJzLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFz
c1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rv
cjo6Y3JlYXRlKFNjcmlwdFN0YXRlKiBzdGF0ZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFNjcmlwdFZh
bHVlJiBwcm90b3R5cGUpCit7CisgICAgUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4g
Y3JlYXRlZCA9IGFkb3B0UmVmKG5ldyBDdXN0b21FbGVtZW50Q29uc3RydWN0b3IoZG9jdW1lbnQs
IHRhZ05hbWUsIG5hbWUpKTsKKyAgICBpZiAoIUN1c3RvbUVsZW1lbnRIZWxwZXJzOjppbml0aWFs
aXplQ29uc3RydWN0b3JXcmFwcGVyKGNyZWF0ZWQuZ2V0KCksIHByb3RvdHlwZSwgc3RhdGUpKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY3JlYXRlZC5yZWxlYXNlKCk7Cit9CisKK0N1
c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgY29uc3QgU3RyaW5nJiBu
YW1lKQorICAgIDogQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIoZG9jdW1lbnQpCisgICAgLCBt
X3RhZ05hbWUodGFnTmFtZSkKKyAgICAsIG1fbmFtZShuYW1lKQoreworfQorCitDdXN0b21FbGVt
ZW50Q29uc3RydWN0b3I6On5DdXN0b21FbGVtZW50Q29uc3RydWN0b3IoKQoreworfQorCitQYXNz
UmVmUHRyPEhUTUxFbGVtZW50PiBDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6OmNyZWF0ZUVsZW1l
bnQoKSBjb25zdAoreworICAgIGlmICghZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgcmV0dXJuIEhUTUxFbGVtZW50OjpjcmVhdGUobV90YWdOYW1lLCBkb2N1bWVudCgpKTsKK30K
KworfQorCisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NzhlYjE3MTVj
NmE2NTAyYjQ5MWNmZGNkZmExMDM5NjIzNjRiYmY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oCkBAIC0wLDAgKzEsNzQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcl9oCisjZGVmaW5lIEN1c3RvbUVsZW1lbnRD
b25zdHJ1Y3Rvcl9oCisKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCisjaW5jbHVkZSAi
Q29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2lu
Y2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBEb2N1bWVudDsKK2NsYXNzIEhUTUxFbGVtZW50OworY2xhc3MgU2NyaXB0U3RhdGU7Citj
bGFzcyBTY3JpcHRWYWx1ZTsKKworY2xhc3MgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yIDogcHVi
bGljIFJlZkNvdW50ZWQ8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiAsIHB1YmxpYyBDb250ZXh0
RGVzdHJ1Y3Rpb25PYnNlcnZlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q3Vz
dG9tRWxlbWVudENvbnN0cnVjdG9yPiBjcmVhdGUoU2NyaXB0U3RhdGUqLCBEb2N1bWVudCosIGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTY3JpcHRWYWx1ZSYpOwor
CisgICAgdmlydHVhbCB+Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKCk7CisKKyAgICBEb2N1bWVu
dCogZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCk7IH0KKyAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
KCkgY29uc3QgeyByZXR1cm4gbV90YWdOYW1lOyB9CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisKKyAgICBQYXNzUmVmUHRyPEhUTUxFbGVt
ZW50PiBjcmVhdGVFbGVtZW50KCkgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIEN1c3RvbUVs
ZW1lbnRDb25zdHJ1Y3RvcihEb2N1bWVudCosIGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBT
dHJpbmcmKTsKKworICAgIFF1YWxpZmllZE5hbWUgbV90YWdOYW1lOworICAgIEF0b21pY1N0cmlu
ZyBtX25hbWU7Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQor
CisjZW5kaWYgLy8gQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaWRsIGIvU291cmNlL1dlYkNv
cmUvZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDdjNTMwZjg3
ZGVhZTY3ZmE1ZmRhMWUxMzliMDVjYjk4YTA3M2IwZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaWRsCkBAIC0wLDAgKzEsMzEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCitbCisgICAgQ29uZGl0aW9uYWw9Q1VTVE9NX0VMRU1FTlRTLAorICAg
IFY4RW5hYmxlZEF0UnVudGltZT1jdXN0b21ET01FbGVtZW50cywKKyAgICBWOFdyYXBBc0Z1bmN0
aW9uLAorICAgIEN1c3RvbUNhbGwKK10gaW50ZXJmYWNlIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rv
ciB7Cit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWdp
c3RyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44MWYyYWMxZjgxNjgzMzYwZDc0MDExODdhZDY3ZGJkNzY0MmE4NWM4Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5j
cHAKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRv
cnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmgiCisKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50Q29u
c3RydWN0b3IuaCIKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50SGVscGVycy5oIgorI2luY2x1ZGUg
IkRpY3Rpb25hcnkuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkhUTUxFbGVt
ZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oIgorI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CisKKyNpZiBFTkFCTEUoU1ZH
KQorI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjZW5kaWYKKworI2lmIEVOQUJMRShNQVRITUwpCisj
aW5jbHVkZSAiTWF0aE1MTmFtZXMuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxFKENVU1RPTV9FTEVN
RU5UUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDdXN0b21FbGVtZW50UmVnaXN0cnk6OkN1
c3RvbUVsZW1lbnRSZWdpc3RyeShEb2N1bWVudCogZG9jdW1lbnQpCisgICAgOiBDb250ZXh0RGVz
dHJ1Y3Rpb25PYnNlcnZlcihkb2N1bWVudCkKK3sKK30KKworQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5
Ojp+Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5KCkKK3sKK30KKworUGFzc1JlZlB0cjxDdXN0b21FbGVt
ZW50Q29uc3RydWN0b3I+IEN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6Y29uc3RydWN0b3JPZihIVE1M
RWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBSZWZQdHI8Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5PiBz
ZWxmID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+cmVnaXN0cnkoKTsKKyAgICBpZiAoIXNlbGYpCisg
ICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBzZWxmLT5maW5kKGVsZW1lbnQtPnRhZ1FOYW1l
KCkpOworfQorCitib29sIEN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6aXNWYWxpZE5hbWUoY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lKQoreworICAgIHNpemVfdCBoeXBoZW5Qb3NpdGlvbiA9IG5hbWUu
ZmluZCgnLScpOworICAgIGlmIChoeXBoZW5Qb3NpdGlvbiA9PSBub3RGb3VuZCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8QXRvbWljU3Ry
aW5nPiwgcmVzZXJ2ZWROYW1lcywgKCkpOworICAgIGlmIChyZXNlcnZlZE5hbWVzLmlzRW1wdHko
KSkgeworI2lmIEVOQUJMRShNQVRITUwpCisgICAgICAgIHJlc2VydmVkTmFtZXMuYXBwZW5kKE1h
dGhNTE5hbWVzOjphbm5vdGF0aW9uX3htbFRhZy5sb2NhbE5hbWUoKSk7CisjZW5kaWYKKworI2lm
IEVOQUJMRShTVkcpCisgICAgICAgIHJlc2VydmVkTmFtZXMuYXBwZW5kKFNWR05hbWVzOjpjb2xv
cl9wcm9maWxlVGFnLmxvY2FsTmFtZSgpKTsKKyAgICAgICAgcmVzZXJ2ZWROYW1lcy5hcHBlbmQo
U1ZHTmFtZXM6OmZvbnRfZmFjZVRhZy5sb2NhbE5hbWUoKSk7CisgICAgICAgIHJlc2VydmVkTmFt
ZXMuYXBwZW5kKFNWR05hbWVzOjpmb250X2ZhY2Vfc3JjVGFnLmxvY2FsTmFtZSgpKTsKKyAgICAg
ICAgcmVzZXJ2ZWROYW1lcy5hcHBlbmQoU1ZHTmFtZXM6OmZvbnRfZmFjZV91cmlUYWcubG9jYWxO
YW1lKCkpOworICAgICAgICByZXNlcnZlZE5hbWVzLmFwcGVuZChTVkdOYW1lczo6Zm9udF9mYWNl
X2Zvcm1hdFRhZy5sb2NhbE5hbWUoKSk7CisgICAgICAgIHJlc2VydmVkTmFtZXMuYXBwZW5kKFNW
R05hbWVzOjpmb250X2ZhY2VfbmFtZVRhZy5sb2NhbE5hbWUoKSk7CisgICAgICAgIHJlc2VydmVk
TmFtZXMuYXBwZW5kKFNWR05hbWVzOjptaXNzaW5nX2dseXBoVGFnLmxvY2FsTmFtZSgpKTsKKyNl
bmRpZgorICAgIH0KKworICAgIGlmIChXVEY6Om5vdEZvdW5kICE9IHJlc2VydmVkTmFtZXMuZmlu
ZChuYW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIERvY3VtZW50Ojpp
c1ZhbGlkTmFtZShuYW1lLnN0cmluZygpKTsKK30KKworUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50
Q29uc3RydWN0b3I+IEN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6cmVnaXN0ZXJFbGVtZW50KFNjcmlw
dFN0YXRlKiBzdGF0ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBEaWN0aW9uYXJ5
JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBSZWZQdHI8Q3VzdG9tRWxlbWVu
dFJlZ2lzdHJ5PiBwcm90ZWN0KHRoaXMpOworCisgICAgaWYgKCFDdXN0b21FbGVtZW50SGVscGVy
czo6aXNGZWF0dXJlQWxsb3dlZChzdGF0ZSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgUXVh
bGlmaWVkTmFtZSBuZXdOYW1lKG51bGxBdG9tLCBuYW1lLmxvd2VyKCksIEhUTUxOYW1lczo6eGh0
bWxOYW1lc3BhY2VVUkkpOworICAgIGlmICghaXNWYWxpZE5hbWUobmV3TmFtZS5sb2NhbE5hbWUo
KSkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX0NIQVJBQ1RFUl9FUlI7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKyAgICAgICAgCisgICAgaWYgKGZpbmQobmV3TmFtZSkpIHsKKyAgICAgICAg
ZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg
U2NyaXB0VmFsdWUgcHJvdG90eXBlVmFsdWU7CisgICAgaWYgKCFvcHRpb25zLmdldCgicHJvdG90
eXBlIiwgcHJvdG90eXBlVmFsdWUpKSB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhl
IGRlZmF1bHQgdmFsdWUgaGFuZGxpbmcuCisgICAgICAgIC8vIEN1cnJlbnRseSBkZWZhdWx0IHZh
bHVlIG9mIHRoZSAicHJvdG90eXBlIiBwYXJhbWV0ZXIsIHdoaWNoCisgICAgICAgIC8vIGlzIEhU
TUxTcGFuRWxlbWVudC5wcm90b3R5cGUsIGhhcyBhbiBhbWJpZ3VpdHkgYWJvdXQgaXRzCisgICAg
ICAgIC8vIGJlaGF2aW9yLiBUaGUgc3BlYyBzaG91bGQgYmUgZml4ZWQgYmVmb3JlIFdlYktpdCBp
bXBsZW1lbnRzCisgICAgICAgIC8vIGl0LiBodHRwczovL3d3dy53My5vcmcvQnVncy9QdWJsaWMv
c2hvd19idWcuY2dpP2lkPTIwODAxCisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmICghQ3VzdG9tRWxlbWVudEhlbHBlcnM6
OmlzVmFsaWRQcm90b3R5cGVQYXJhbWV0ZXIocHJvdG90eXBlVmFsdWUsIHN0YXRlKSkgeworICAg
ICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cisg
ICAgCisgICAgLy8gQW4gc2NyaXB0IGV4ZWN1dGlvbiBjb3VsZCBoYXBwZW4gaW4gaXNWYWxpZFBy
b3RvdHlwZVBhcmFtZXRlcigpLCB3aGljaCBraWxscyB0aGUgZG9jdW1lbnQuCisgICAgaWYgKCFk
b2N1bWVudCgpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKworICAgIFJlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IGZy
ZXNoID0gQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjpjcmVhdGUoc3RhdGUsIGRvY3VtZW50KCks
IG5ld05hbWUsICJIVE1MQ3VzdG9tRWxlbWVudCIsIHByb3RvdHlwZVZhbHVlKTsKKyAgICBpZiAo
IWZyZXNoKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKyAgICAgICAgCisgICAgbV9jb25zdHJ1Y3RvcnMuYWRkKGZyZXNoLT50YWdO
YW1lKCkuaW1wbCgpLCBmcmVzaCk7CisgICAgcmV0dXJuIGZyZXNoOworfQorCitQYXNzUmVmUHRy
PEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpmaW5kKGNv
bnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0Cit7CisgICAgQ29uc3RydWN0b3JNYXA6OmNv
bnN0X2l0ZXJhdG9yIGZvdW5kID0gbV9jb25zdHJ1Y3RvcnMuZmluZChuYW1lLmltcGwoKSk7Cisg
ICAgcmV0dXJuIChmb3VuZCAhPSBtX2NvbnN0cnVjdG9ycy5lbmQoKSkgPyBmb3VuZC0+dmFsdWUg
OiAwOworfQorCitQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBDdXN0b21FbGVtZW50UmVnaXN0cnk6
OmNyZWF0ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKK3sKKyAgICBp
ZiAoUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gZm91bmQgPSBmaW5kKG5hbWUpKQor
ICAgICAgICByZXR1cm4gZm91bmQtPmNyZWF0ZUVsZW1lbnQoKTsKKyAgICByZXR1cm4gMDsKK30K
KworaW5saW5lIERvY3VtZW50KiBDdXN0b21FbGVtZW50UmVnaXN0cnk6OmRvY3VtZW50KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihtX3NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5oIGIv
U291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdi
NThjMTM5MDU0ODhjNGJhMzBmMDA5M2M2YWU2MjlkNzRlMDczNjEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmgKQEAgLTAsMCArMSw3
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAg
ICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisg
KiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5X2gKKyNkZWZpbmUgQ3Vz
dG9tRWxlbWVudFJlZ2lzdHJ5X2gKKworI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKKyNp
bmNsdWRlICJDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKKyNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCisjaW5jbHVkZSAiU2NyaXB0VmFs
dWUuaCIKKyNpbmNsdWRlICJTdXBwbGVtZW50YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBDdXN0b21FbGVtZW50Q29uc3RydWN0b3I7CitjbGFzcyBEaWN0aW9uYXJ5OworY2xhc3Mg
RG9jdW1lbnQ7CitjbGFzcyBIVE1MRWxlbWVudDsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ7CitjbGFzcyBRdWFsaWZpZWROYW1lOworCitjbGFzcyBDdXN0b21FbGVtZW50UmVnaXN0cnkg
OiBwdWJsaWMgUmVmQ291bnRlZDxDdXN0b21FbGVtZW50UmVnaXN0cnk+ICwgcHVibGljIENvbnRl
eHREZXN0cnVjdGlvbk9ic2VydmVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDdXN0b21F
bGVtZW50UmVnaXN0cnkpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBl
eHBsaWNpdCBDdXN0b21FbGVtZW50UmVnaXN0cnkoRG9jdW1lbnQqKTsKKyAgICB+Q3VzdG9tRWxl
bWVudFJlZ2lzdHJ5KCk7CisKKyAgICBQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rv
cj4gcmVnaXN0ZXJFbGVtZW50KFdlYkNvcmU6OlNjcmlwdFN0YXRlKiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lLCBjb25zdCBEaWN0aW9uYXJ5JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJik7Cisg
ICAgUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IGZpbmQoY29uc3QgUXVhbGlm
aWVkTmFtZSYpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGNyZWF0ZUVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OworICAgIERvY3VtZW50KiBkb2N1bWVudCgp
IGNvbnN0OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9y
PiBjb25zdHJ1Y3Rvck9mKEhUTUxFbGVtZW50Kik7CisgICAgCitwcml2YXRlOgorICAgIHN0YXRp
YyBib29sIGlzVmFsaWROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYpOworCisgICAgdHlwZWRlZiBI
YXNoTWFwPFF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5hbWVJbXBsKiwgUmVmUHRyPEN1c3RvbUVs
ZW1lbnRDb25zdHJ1Y3Rvcj4gPkNvbnN0cnVjdG9yTWFwOworCisgICAgQ29uc3RydWN0b3JNYXAg
bV9jb25zdHJ1Y3RvcnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApp
bmRleCA4MDdiNWE4OTk2ZTg2MDFhZmExOGM1N2NiYzRiMWMzNDY5NTUxYTI5Li5mZjJiNjg0MTE2
ODU0MWY5ZTViY2E5MzU2MDIwMDU0NmNjNWYwYmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
QEAgLTQ2LDExICs0NiwxNCBAQAogI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgog
I2luY2x1ZGUgIkNvbnRleHRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgorI2lu
Y2x1ZGUgIkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkN1c3RvbUVsZW1l
bnRSZWdpc3RyeS5oIgogI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCiAjaW5jbHVkZSAi
RE9NTmFtZWRGbG93Q29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkRPTVNlbGVjdGlvbi5oIgogI2lu
Y2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRhdGVDb21wb25lbnRzLmgiCisjaW5jbHVk
ZSAiRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIkRvY3VtZW50RXZlbnRRdWV1ZS5oIgogI2luY2x1
ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgpAQCAt
Njc0LDYgKzY3NywxMCBAQCB2b2lkIERvY3VtZW50OjpyZW1vdmVkTGFzdFJlZigpCiAgICAgICAg
IG1fZnVsbFNjcmVlbkVsZW1lbnRTdGFjay5jbGVhcigpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUo
Q1VTVE9NX0VMRU1FTlRTKQorICAgICAgICBtX3JlZ2lzdHJ5LmNsZWFyKCk7CisjZW5kaWYKKwog
ICAgICAgICBkZXRhY2hQYXJzZXIoKTsKIAogICAgICAgICAvLyByZW1vdmVEZXRhY2hlZENoaWxk
cmVuKCkgZG9lc24ndCBhbHdheXMgdW5yZWdpc3RlciBJRHMsCkBAIC04NDIsNiArODQ5LDI1IEBA
IFBhc3NSZWZQdHI8RWxlbWVudD4gRG9jdW1lbnQ6OmNyZWF0ZUVsZW1lbnQoY29uc3QgQXRvbWlj
U3RyaW5nJiBuYW1lLCBFeGNlcHRpb25DCiAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoUXVhbGlm
aWVkTmFtZShudWxsQXRvbSwgbmFtZSwgbnVsbEF0b20pLCBmYWxzZSk7CiB9CiAKKyNpZiBFTkFC
TEUoQ1VTVE9NX0VMRU1FTlRTKQorUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+
IERvY3VtZW50OjpyZWdpc3RlckVsZW1lbnQoV2ViQ29yZTo6U2NyaXB0U3RhdGUqIHN0YXRlLCBj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVy
biByZWdpc3RlckVsZW1lbnQoc3RhdGUsIG5hbWUsIERpY3Rpb25hcnkoKSwgZWMpOworfQorCitQ
YXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gRG9jdW1lbnQ6OnJlZ2lzdGVyRWxl
bWVudChXZWJDb3JlOjpTY3JpcHRTdGF0ZSogc3RhdGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZSwgY29uc3QgRGljdGlvbmFyeSYgb3B0aW9ucywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
aWYgKCFtX3JlZ2lzdHJ5KQorICAgICAgICBtX3JlZ2lzdHJ5ID0gYWRvcHRSZWYobmV3IEN1c3Rv
bUVsZW1lbnRSZWdpc3RyeSh0aGlzKSk7CisgICAgcmV0dXJuIG1fcmVnaXN0cnktPnJlZ2lzdGVy
RWxlbWVudChzdGF0ZSwgbmFtZSwgb3B0aW9ucywgZWMpOworfQorCitQYXNzUmVmUHRyPEN1c3Rv
bUVsZW1lbnRSZWdpc3RyeT4gRG9jdW1lbnQ6OnJlZ2lzdHJ5KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9yZWdpc3RyeTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCiBQ
YXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IERvY3VtZW50OjpjcmVhdGVEb2N1bWVudEZyYWdt
ZW50KCkKIHsKICAgICByZXR1cm4gRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAppbmRleCAxMjY0MzhkNzBlZjAxNjFiYzJhZmU4ZmNlYTc2OGE0
YmM4NzAzN2FiLi5kOGI5ODYzMjk2OWIxOWJlMDhhMWI0N2Q2YWY5NDNiZDQwN2I0OGQ4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaApAQCAtNzEsNiArNzEsOCBAQCBjbGFzcyBDYW52YXNSZW5kZXJpbmdD
b250ZXh0OwogY2xhc3MgQ2hhcmFjdGVyRGF0YTsKIGNsYXNzIENvbW1lbnQ7CiBjbGFzcyBDb250
ZXh0RmVhdHVyZXM7CitjbGFzcyBDdXN0b21FbGVtZW50Q29uc3RydWN0b3I7CitjbGFzcyBDdXN0
b21FbGVtZW50UmVnaXN0cnk7CiBjbGFzcyBET01JbXBsZW1lbnRhdGlvbjsKIGNsYXNzIERPTU5h
bWVkRmxvd0NvbGxlY3Rpb247CiBjbGFzcyBET01TZWxlY3Rpb247CkBAIC0xMTY1LDYgKzExNjcs
MTIgQEAgcHVibGljOgogICAgIFRleHRBdXRvc2l6ZXIqIHRleHRBdXRvc2l6ZXIoKSB7IHJldHVy
biBtX3RleHRBdXRvc2l6ZXIuZ2V0KCk7IH0KICNlbmRpZgogCisjaWYgRU5BQkxFKENVU1RPTV9F
TEVNRU5UUykKKyAgICBQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gcmVnaXN0
ZXJFbGVtZW50KFdlYkNvcmU6OlNjcmlwdFN0YXRlKiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
LCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0
b3I+IHJlZ2lzdGVyRWxlbWVudChXZWJDb3JlOjpTY3JpcHRTdGF0ZSosIGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSwgY29uc3QgRGljdGlvbmFyeSYgb3B0aW9ucywgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIFBhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5PiByZWdpc3RyeSgpIGNvbnN0Owor
I2VuZGlmCisKICAgICB2b2lkIGFkanVzdEZsb2F0UXVhZHNGb3JTY3JvbGxBbmRBYnNvbHV0ZVpv
b21BbmRGcmFtZVNjYWxlKFZlY3RvcjxGbG9hdFF1YWQ+JiwgUmVuZGVyT2JqZWN0Kik7CiAgICAg
dm9pZCBhZGp1c3RGbG9hdFJlY3RGb3JTY3JvbGxBbmRBYnNvbHV0ZVpvb21BbmRGcmFtZVNjYWxl
KEZsb2F0UmVjdCYsIFJlbmRlck9iamVjdCopOwogCkBAIC0xNTQzLDYgKzE1NTEsMTAgQEAgcHJp
dmF0ZToKICAgICBPd25QdHI8VGV4dEF1dG9zaXplcj4gbV90ZXh0QXV0b3NpemVyOwogI2VuZGlm
CiAKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorICAgIFJlZlB0cjxDdXN0b21FbGVtZW50
UmVnaXN0cnk+IG1fcmVnaXN0cnk7CisjZW5kaWYKKwogICAgIGJvb2wgbV9zY2hlZHVsZWRUYXNr
c0FyZVN1c3BlbmRlZDsKICAgICAKICAgICBib29sIG1fdmlzdWFsVXBkYXRlc0FsbG93ZWQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9tYWtlX25hbWVzLnBsCmluZGV4IDcyMzNlMzI4NGUxMTgxYmFiOWQ4YmRlNzVhMGQ0
YTExNmY0NGJlZDIuLmM5MTUwZWRlNDczNjAzN2FiMDg2ZWQ3Y2Q1ZjViZjA2MzRiNWUyNDAgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCkBAIC0xMTcyLDggKzExNzIsOSBAQCBFTkQKIDsKICAg
ICB9IGVsc2lmICgkd3JhcHBlckZhY3RvcnlUeXBlIGVxICJWOCIpIHsKICAgICAgICAgcHJpbnQg
RiA8PEVORAorI2luY2x1ZGUgIlY4SFRNTEN1c3RvbUVsZW1lbnQuaCIKICNpbmNsdWRlICJWOCRw
YXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50LmgiCi0gICAgICAgIAorCiAjaW5jbHVkZSA8djgu
aD4KIEVORAogOwpAQCAtMTI3NCw2ICsxMjc1LDExIEBAIEVORAogICAgIHJldHVybiBWOFNWR0Vs
ZW1lbnQ6OmNyZWF0ZVdyYXBwZXIoZWxlbWVudCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsK
IEVORAogOworICAgICAgICB9IGVsc2lmICgkcGFyYW1ldGVyc3tuYW1lc3BhY2V9IGVxICJIVE1M
IikgeworICAgICAgICAgICAgcHJpbnQgRiA8PEVORAorICAgIHJldHVybiBWOEhUTUxDdXN0b21F
bGVtZW50Ojp0b1Y4KGVsZW1lbnQsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CitFTkQKKzsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHByaW50IEYgPDxFTkQKICAgICByZXR1cm4g
d3JhcCh0byRwYXJhbWV0ZXJze2ZhbGxiYWNrSW50ZXJmYWNlTmFtZX0oZWxlbWVudCksIGNyZWF0
aW9uQ29udGV4dCwgaXNvbGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxEb2N1bWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5pZGwKaW5k
ZXggMjVmMGE1YzM5MDM1MTE0YjVkZjE5MTdjMjk1MjkxNjBhOWI0N2M5OC4uN2MyOWZjYjVkYzE4
OTJhYWFjNzJmNTI0MDM2M2VlMmMyNGQyM2Q5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRG9jdW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3Vt
ZW50LmlkbApAQCAtNTMsNiArNTMsMTEgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRWxlbWVu
dCBhY3RpdmVFbGVtZW50OwogICAgIGJvb2xlYW4gaGFzRm9jdXMoKTsKIAorI2lmIGRlZmluZWQo
RU5BQkxFX0NVU1RPTV9FTEVNRU5UUykgJiYgRU5BQkxFX0NVU1RPTV9FTEVNRU5UUworICAgIFtW
OEVuYWJsZWRBdFJ1bnRpbWU9Y3VzdG9tRE9NRWxlbWVudHMsIENvbmRpdGlvbmFsPUNVU1RPTV9F
TEVNRU5UUywgSW1wbGVtZW50ZWRBcz1yZWdpc3RlckVsZW1lbnQsIENhbGxXaXRoPVNjcmlwdFN0
YXRlXQorICAgIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciB3ZWJraXRSZWdpc3RlcihpbiBET01T
dHJpbmcgbmFtZSwgaW4gW09wdGlvbmFsXSBEaWN0aW9uYXJ5IG9wdGlvbnMpIHJhaXNlcyhET01F
eGNlcHRpb24pOworI2VuZGlmCisKICAgICAvLyBEZXByZWNhdGVkIGF0dHJpYnV0ZXMKICAgICAg
ICAgICAgICBbVHJlYXROdWxsQXM9TnVsbFN0cmluZ10gYXR0cmlidXRlIERPTVN0cmluZyBiZ0Nv
bG9yOwogICAgICAgICAgICAgIFtUcmVhdE51bGxBcz1OdWxsU3RyaW5nXSBhdHRyaWJ1dGUgRE9N
U3RyaW5nIGZnQ29sb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1
cmVzLmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKaW5kZXggNzdi
MmM3NmM0NGEzMmZhOTMzMDRjZTRiY2QwN2UyMTA1ZmU5YzU1OC4uMTJlOTBmYjllYjdmYzhkNGEx
OThhOTU4YzE1Mjc2ZDcxM2Y4ZWI2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9mZWF0dXJlcy5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lw
aQpAQCAtNTQsNiArNTQsNyBAQAogICAgICAgJ0VOQUJMRV9DU1NfVFJBTlNGT1JNU19BTklNQVRJ
T05TX1VOUFJFRklYRUQ9MCcsCiAgICAgICAnRU5BQkxFX0NTU19WQVJJQUJMRVM9MScsCiAgICAg
ICAnRU5BQkxFX0NTU19TVElDS1lfUE9TSVRJT049MScsCisgICAgICAnRU5BQkxFX0NVU1RPTV9F
TEVNRU5UUz0xJywKICAgICAgICdFTkFCTEVfQ1VTVE9NX1NDSEVNRV9IQU5ETEVSPTAnLAogICAg
ICAgJ0VOQUJMRV9EQVNIQk9BUkRfU1VQUE9SVD0wJywKICAgICAgICdFTkFCTEVfREFUQV9UUkFO
U0ZFUl9JVEVNUz0xJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYlJ1bnRpbWVGZWF0dXJlcy5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
UnVudGltZUZlYXR1cmVzLmgKaW5kZXggZTM5NGQ3NWY0YzdhMWI5ZTBkNTJjMzliYjQ2MWZlZTE4
Y2FiOWEyMC4uYTA1NWYwODJiNzE1YzMzMDJiMzFkMzBlZjdlZWZiZDA0N2Y0YTVjMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUnVudGltZUZlYXR1cmVzLmgK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUnVudGltZUZlYXR1cmVzLmgK
QEAgLTEyNSw2ICsxMjUsOSBAQCBwdWJsaWM6CiAgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgdm9p
ZCBlbmFibGVTaGFkb3dET00oYm9vbCk7CiAgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgYm9vbCBp
c1NoYWRvd0RPTUVuYWJsZWQoKTsKIAorICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIHZvaWQgZW5h
YmxlQ3VzdG9tRE9NRWxlbWVudHMoYm9vbCk7CisgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgYm9v
bCBpc0N1c3RvbURPTUVsZW1lbnRzRW5hYmxlZCgpOworCiAgICAgV0VCS0lUX0VYUE9SVCBzdGF0
aWMgdm9pZCBlbmFibGVTdHlsZVNjb3BlZChib29sKTsKICAgICBXRUJLSVRfRVhQT1JUIHN0YXRp
YyBib29sIGlzU3R5bGVTY29wZWRFbmFibGVkKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlJ1bnRpbWVGZWF0dXJlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJSdW50aW1lRmVhdHVyZXMuY3BwCmluZGV4IGExODQzNGUyOWVmMTAwMmNk
MzM5OGRiMjU4NGY4NDdkZDc0ODg5OWEuLjUxYmZkZmEwYjgyNzhhMDczZjRhYTY2YTM5YzJkNGRk
YzRiYzNlMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlJ1bnRp
bWVGZWF0dXJlcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUnVudGlt
ZUZlYXR1cmVzLmNwcApAQCAtNDgxLDYgKzQ4MSwyNSBAQCBib29sIFdlYlJ1bnRpbWVGZWF0dXJl
czo6aXNTaGFkb3dET01FbmFibGVkKCkKICNlbmRpZgogfQogCit2b2lkIFdlYlJ1bnRpbWVGZWF0
dXJlczo6ZW5hYmxlQ3VzdG9tRE9NRWxlbWVudHMoYm9vbCBlbmFibGUpCit7CisjaWYgRU5BQkxF
KENVU1RPTV9FTEVNRU5UUykKKyAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzZXRDdXN0b21E
T01FbGVtZW50cyhlbmFibGUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZW5hYmxlKTsKKyNl
bmRpZgorfQorCitib29sIFdlYlJ1bnRpbWVGZWF0dXJlczo6aXNDdXN0b21ET01FbGVtZW50c0Vu
YWJsZWQoKQoreworI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisgICAgcmV0dXJuIFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OmN1c3RvbURPTUVsZW1lbnRzRW5hYmxlZCgpOworI2Vsc2UKKyAg
ICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworCiB2b2lkIFdlYlJ1bnRpbWVGZWF0dXJlczo6
ZW5hYmxlU3R5bGVTY29wZWQoYm9vbCBlbmFibGUpCiB7CiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BF
RCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5
NmExYWM0M2MzNGQ0MzkzMTBmY2FjYjYyMjhiY2EyYWExYTlhZmZkLi43Y2ExYThmMDYzYzIyZDVk
YzQzMjVkNzE0YWUzOTFiYWZjYzJmNzFhIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysr
IGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTMtMDEtMjcgIEhhamltZSBN
b3JyaXRhICA8bW9ycml0YUBnb29nbGUuY29tPgorCisgICAgICAgIFtDdXN0b20gRWxlbWVudHNd
IEltcGxlbWVudCBiYXJlLWJvbmUgZG9jdW1lbnQucmVnaXN0ZXIoKQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwMjI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgZW5hYmxlQ3VzdG9tRE9NRWxl
bWVudHMgZmxhZy4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVs
bC5jcHA6CisgICAgICAgIChUZXN0U2hlbGw6OlRlc3RTaGVsbCk6CisKIDIwMTMtMDItMjEgIERp
cmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBz
dXBwb3J0IHRoZSBsdWNpZCB2ZXJzaW9uIG9mIGZyZWV0eXBlIG9uIHByZWNpc2UgaW4gRFJUCmRp
ZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcAppbmRleCBmNmZjYjI2
YzVlMzBmZTczNmZiODlkMzVmNDhiNDY1YmQ1MGEyZDIxLi4yZDhmMTQyMjU3NzYxMThmNjIxY2M4
YzUwODJiYWVlOGEyNTYwODM0IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0U2hlbGwuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RTaGVsbC5jcHAKQEAgLTE0NSw2ICsxNDUsNyBAQCBUZXN0U2hlbGw6OlRlc3RTaGVsbCgpCiAg
ICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVWaWRlb1RyYWNrKHRydWUpOwogICAgIFdlYlJ1
bnRpbWVGZWF0dXJlczo6ZW5hYmxlR2FtZXBhZCh0cnVlKTsKICAgICBXZWJSdW50aW1lRmVhdHVy
ZXM6OmVuYWJsZVNoYWRvd0RPTSh0cnVlKTsKKyAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJs
ZUN1c3RvbURPTUVsZW1lbnRzKHRydWUpOwogICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxl
U3R5bGVTY29wZWQodHJ1ZSk7CiAgICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVTY3JpcHRl
ZFNwZWVjaCh0cnVlKTsKICAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZVJlcXVlc3RBdXRv
Y29tcGxldGUodHJ1ZSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZmI0MWUxM2NmOTVmZmQ0NjUzMjFhMjcyMTFmY2NkNWJl
ZjY4ZDhmMi4uNTFhY2UwNGIzMjc1MTk3YjAxMjYxODNhOTU0Njg3OTM0MTJkZjNhZiAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDIxIEBACisyMDEzLTAyLTE0ICBIYWppbWUgTW9ycml0YSAgPG1vcnJpdGFAZ29v
Z2xlLmNvbT4KKworICAgICAgICBbQ3VzdG9tIEVsZW1lbnRzXSBJbXBsZW1lbnQgYmFyZS1ib25l
IGRvY3VtZW50LnJlZ2lzdGVyKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwMDIyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLWJhc2ljLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJl
Z2lzdGVyLWJhc2ljLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL2N1c3RvbS9kb2N1
bWVudC1yZWdpc3Rlci1yZWVudHJhbnQtbnVsbC1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1yZWVudHJh
bnQtbnVsbC1jb25zdHJ1Y3Rvci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9jdXN0
b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVlbnRyYW50LXJldHVybmluZy1mYWtlLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJl
ZW50cmFudC1yZXR1cm5pbmctZmFrZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9j
dXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVlbnRyYW50LXRocm93aW5nLWNvbnN0cnVjdG9yLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJl
Z2lzdGVyLXJlZW50cmFudC10aHJvd2luZy1jb25zdHJ1Y3Rvci5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2RvbS9jdXN0b20vcmVzb3VyY2VzL2RvY3VtZW50LXJlZ2lzdGVyLWZ1enouanM6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDEz
LTAyLTIxICBUYWthc2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KIAogICAgICAgICBS
ZW5kZXJUYWJsZTo6cGFpbnRCb3hEZWNvcmF0aW9ucyBzb21ldGltZXMgZHJhd3MgYm94LXNoYWRv
dyB0d2ljZS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVu
dC1yZWdpc3Rlci1iYXNpYy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0
b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2YjYy
MTk0ZDFlMzIwYWE0N2IyMDkzMjhjOTQ1YzVjOTliYzhmYjUKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMtZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsNDYgQEAKK1Rlc3RpbmcgZG9jdW1lbnQucmVnaXN0ZXIoKSBiYXNp
YyBiZWhhdmlvcnMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGRvY3Vt
ZW50LnJlZ2lzdGVyKCdmb28nLCBjcmVhdGVSZWdpc3RlclBhcmFtdGVycygpKSB0aHJldyBleGNl
cHRpb24gRXJyb3I6IEludmFsaWRDaGFyYWN0ZXJFcnJvcjogRE9NIEV4Y2VwdGlvbiA1LgorUEFT
UyBkb2N1bWVudC5yZWdpc3RlcigneGZvbycsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpIHRo
cmV3IGV4Y2VwdGlvbiBFcnJvcjogSW52YWxpZENoYXJhY3RlckVycm9yOiBET00gRXhjZXB0aW9u
IDUuCitQQVNTIGRvY3VtZW50LnJlZ2lzdGVyKCdtaXNzaW5nLWdseXBoJywgY3JlYXRlUmVnaXN0
ZXJQYXJhbXRlcnMoKSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJbnZhbGlkQ2hhcmFjdGVyRXJy
b3I6IERPTSBFeGNlcHRpb24gNS4KK1BBU1MgdHlwZW9mIGZvb0NvbnN0cnVjdG9yIGlzICdmdW5j
dGlvbicKK1BBU1MgZm9vQ29uc3RydWN0b3IucHJvdG90eXBlLl9fcHJvdG9fXyBpcyBIVE1MRWxl
bWVudC5wcm90b3R5cGUKK1BBU1MgZm9vQ29uc3RydWN0b3IucHJvdG90eXBlLnRoaXNJc1Byb3Rv
dHlwZSBpcyB0cnVlCitQQVNTIGRvY3VtZW50LnJlZ2lzdGVyKCd4LWZvbycsIGNyZWF0ZVJlZ2lz
dGVyUGFyYW10ZXJzKCkpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSW52YWxpZFN0YXRlRXJyb3I6
IERPTSBFeGNlcHRpb24gMTEuCitQQVNTIGRvY3VtZW50LnJlZ2lzdGVyKCdYLUZPTycsIGNyZWF0
ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSW52YWxpZFN0YXRl
RXJyb3I6IERPTSBFeGNlcHRpb24gMTEuCitQQVNTIGRvY3VtZW50LnJlZ2lzdGVyKCd4LWJhZC1h
JywgeyBwcm90b3R5cGU6IEhUTUxFbGVtZW50LnByb3RvdHlwZSB9KSB0aHJldyBleGNlcHRpb24g
RXJyb3I6IEludmFsaWRTdGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDExLgorUEFTUyBkb2N1bWVu
dC5yZWdpc3RlcigneC1iYWQtYicsIHsgcHJvdG90eXBlOiB7fSB9KSB0aHJldyBleGNlcHRpb24g
RXJyb3I6IEludmFsaWRTdGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDExLgorUEFTUyBkb2N1bWVu
dC5yZWdpc3RlcigneC1iYWQtYycsIHsgcHJvdG90eXBlOiBPYmplY3QuY3JlYXRlKERvY3VtZW50
LnByb3RvdHlwZSkgfSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJbnZhbGlkU3RhdGVFcnJvcjog
RE9NIEV4Y2VwdGlvbiAxMS4KK1BBU1MgZG9jdW1lbnQucmVnaXN0ZXIoJ3gtYmFkLWQnLCB7IHBy
b3RvdHlwZTogT2JqZWN0LmNyZWF0ZShIVE1MU3BhbkVsZW1lbnQucHJvdG90eXBlKSB9KSB0aHJl
dyBleGNlcHRpb24gRXJyb3I6IEludmFsaWRTdGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDExLgor
UEFTUyBmb29Db25zdHJ1Y3RvcigpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IERPTSBvYmpl
Y3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLi4KK1BBU1MgY3Jl
YXRlZEZvby5fX3Byb3RvX18gaXMgZm9vQ29uc3RydWN0b3IucHJvdG90eXBlCitQQVNTIGNyZWF0
ZWRGb28uY29uc3RydWN0b3IgaXMgZm9vQ29uc3RydWN0b3IKK1BBU1MgY3JlYXRlZEZvby50YWdO
YW1lIGlzICdYLUZPTycKK1BBU1MgY3JlYXRlZEZvby50ZXh0Q29udGVudCBpcyAnSGVsbG8nCitQ
QVNTIGNyZWF0ZWRGb28ubGFzdENoaWxkIGlzIGNoaWxkRGl2CitQQVNTIHBhcnNlZEZvby5fX3By
b3RvX18gaXMgZm9vQ29uc3RydWN0b3IucHJvdG90eXBlCitQQVNTIHBhcnNlZEZvby50YWdOYW1l
IGlzICdYLUZPTycKK1BBU1MgcGFyc2VkRm9vLnNvbWVQcm9wZXJ0eSBpcyBjb250YWluZXIuZmly
c3RDaGlsZC5zb21lUHJvcGVydHkKK1BBU1MgY3JlYXRlZEJhci50YWdOYW1lIGlzICdYLUJBUicK
K1BBU1MgY3JlYXRlZEJhei50YWdOYW1lIGlzICdYLUJBWicKK1BBU1MgY3JlYXRlZEJhei50aGlz
SXNQcm90b3R5cGUgaXMgdHJ1ZQorUEFTUyBjcmVhdGVkQmF6LnRoaXNJc0Fsc29Qcm90b3R5cGUg
aXMgdHJ1ZQorUEFTUyBjcmVhdGVkVXBwZXJCYXIuY29uc3RydWN0b3IgaXMgYmFyQ29uc3RydWN0
b3IKK1BBU1MgY3JlYXRlZFVwcGVyQmFyLnRhZ05hbWUgaXMgJ1gtQkFSJworUEFTUyBjcmVhdGVk
TWl4ZWRCYXIuY29uc3RydWN0b3IgaXMgYmFyQ29uc3RydWN0b3IKK1BBU1MgY3JlYXRlZE1peGVk
QmFyLnRhZ05hbWUgaXMgJ1gtQkFSJworUEFTUyBjb250YWluZXIuZmlyc3RDaGlsZC5jb25zdHJ1
Y3RvciBpcyBiYXJDb25zdHJ1Y3RvcgorUEFTUyBjb250YWluZXIuZmlyc3RDaGlsZC50YWdOYW1l
IGlzICdYLUJBUicKK1BBU1MgY29udGFpbmVyLmxhc3RDaGlsZC5jb25zdHJ1Y3RvciBpcyBiYXJD
b25zdHJ1Y3RvcgorUEFTUyBjb250YWluZXIubGFzdENoaWxkLnRhZ05hbWUgaXMgJ1gtQkFSJwor
UEFTUyAobmV3IChkb2N1bWVudC5yZWdpc3RlcigneS1iYXInLCBjcmVhdGVSZWdpc3RlclBhcmFt
dGVycygpKSkoKSkudGFnTmFtZSBpcyAnWS1CQVInCitQQVNTIChuZXcgKGRvY3VtZW50LnJlZ2lz
dGVyKCd5ei1iYXInLCBjcmVhdGVSZWdpc3RlclBhcmFtdGVycygpKSkoKSkudGFnTmFtZSBpcyAn
WVotQkFSJworUEFTUyAobmV3IChkb2N1bWVudC5yZWdpc3RlcigneS16LWJhcicsIGNyZWF0ZVJl
Z2lzdGVyUGFyYW10ZXJzKCkpKSgpKS50YWdOYW1lIGlzICdZLVotQkFSJworUEFTUyAobmV3IChk
b2N1bWVudC5yZWdpc3RlcigneS0tYmFyJywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSkpKCkp
LnRhZ05hbWUgaXMgJ1ktLUJBUicKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20v
ZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3Rv
bS9kb2N1bWVudC1yZWdpc3Rlci1iYXNpYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEwNTc3OGMyYzEzMmRl
MGQxNmE0OTUxOTQ0ZTcxMDc4Nzg2OGUyZDgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMuaHRtbApAQCAtMCwwICsx
LDExMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxkaXYgaWQ9ImNvbnRhaW5lciI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRl
c3RpbmcgZG9jdW1lbnQucmVnaXN0ZXIoKSBiYXNpYyBiZWhhdmlvcnMuIik7CisKK2lmICh3aW5k
b3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKK2RvY3VtZW50LnJl
Z2lzdGVyID0gZG9jdW1lbnQucmVnaXN0ZXIgfHwgZG9jdW1lbnQud2Via2l0UmVnaXN0ZXI7CisK
K2Z1bmN0aW9uIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkKK3sKKyAgICByZXR1cm4geworICAg
ICAgICBwcm90b3R5cGU6IE9iamVjdC5jcmVhdGUoSFRNTEVsZW1lbnQucHJvdG90eXBlLCB7IHRo
aXNJc1Byb3RvdHlwZTogeyB2YWx1ZTogdHJ1ZSB9IH0pCisgICAgfTsKK30KKworLy8gSW52YWxp
ZCBuYW1lcworc2hvdWxkVGhyb3coImRvY3VtZW50LnJlZ2lzdGVyKCdmb28nLCBjcmVhdGVSZWdp
c3RlclBhcmFtdGVycygpKSIsICInRXJyb3I6IEludmFsaWRDaGFyYWN0ZXJFcnJvcjogRE9NIEV4
Y2VwdGlvbiA1JyIpOworc2hvdWxkVGhyb3coImRvY3VtZW50LnJlZ2lzdGVyKCd4Zm9vJywgY3Jl
YXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSkiLCAiJ0Vycm9yOiBJbnZhbGlkQ2hhcmFjdGVyRXJyb3I6
IERPTSBFeGNlcHRpb24gNSciKTsKK3Nob3VsZFRocm93KCJkb2N1bWVudC5yZWdpc3RlcignbWlz
c2luZy1nbHlwaCcsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpIiwgIidFcnJvcjogSW52YWxp
ZENoYXJhY3RlckVycm9yOiBET00gRXhjZXB0aW9uIDUnIik7CisKK3ZhciBmb29Db25zdHJ1Y3Rv
ciA9IGRvY3VtZW50LnJlZ2lzdGVyKCJ4LWZvbyIsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkp
Oworc2hvdWxkQmUoInR5cGVvZiBmb29Db25zdHJ1Y3RvciIsICInZnVuY3Rpb24nIik7CitzaG91
bGRCZSgiZm9vQ29uc3RydWN0b3IucHJvdG90eXBlLl9fcHJvdG9fXyIsICJIVE1MRWxlbWVudC5w
cm90b3R5cGUiKTsKK3Nob3VsZEJlVHJ1ZSgiZm9vQ29uc3RydWN0b3IucHJvdG90eXBlLnRoaXNJ
c1Byb3RvdHlwZSIpOworCisvLyBOYW1lIGNvbmZsaWN0cworc2hvdWxkVGhyb3coImRvY3VtZW50
LnJlZ2lzdGVyKCd4LWZvbycsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpIiwgIidFcnJvcjog
SW52YWxpZFN0YXRlRXJyb3I6IERPTSBFeGNlcHRpb24gMTEnIik7CitzaG91bGRUaHJvdygiZG9j
dW1lbnQucmVnaXN0ZXIoJ1gtRk9PJywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSkiLCAiJ0Vy
cm9yOiBJbnZhbGlkU3RhdGVFcnJvcjogRE9NIEV4Y2VwdGlvbiAxMSciKTsKKworLy8gQmFkIHBy
b3RvdHlwZTogY29uc3RydWN0b3IgcHJvcGVydHkgZXhpc3RzCitzaG91bGRUaHJvdygiZG9jdW1l
bnQucmVnaXN0ZXIoJ3gtYmFkLWEnLCB7IHByb3RvdHlwZTogSFRNTEVsZW1lbnQucHJvdG90eXBl
IH0pIiwgIidFcnJvcjogSW52YWxpZFN0YXRlRXJyb3I6IERPTSBFeGNlcHRpb24gMTEnIik7Cisv
LyBCYWQgcHJvdG90eXBlOiBtaXNzaW5nIF9fcHJvdG9fXworc2hvdWxkVGhyb3coImRvY3VtZW50
LnJlZ2lzdGVyKCd4LWJhZC1iJywgeyBwcm90b3R5cGU6IHt9IH0pIiwgIidFcnJvcjogSW52YWxp
ZFN0YXRlRXJyb3I6IERPTSBFeGNlcHRpb24gMTEnIik7CisvLyBCYWQgcHJvdG90eXBlOiB3cm9u
ZyBfX3Byb3RvX18KK3Nob3VsZFRocm93KCJkb2N1bWVudC5yZWdpc3RlcigneC1iYWQtYycsIHsg
cHJvdG90eXBlOiBPYmplY3QuY3JlYXRlKERvY3VtZW50LnByb3RvdHlwZSkgfSkiLCAiJ0Vycm9y
OiBJbnZhbGlkU3RhdGVFcnJvcjogRE9NIEV4Y2VwdGlvbiAxMSciKTsKKy8vIEJ1ZyAxMTA0MzYg
LSBFbGVtZW50cyBvdGhlciB0aGFuIEhUTUxFbWVtZW50IHNob3VsZCBiZSBhbGxvd2VkIGFzIGEg
c3VwZXJjbGFzcy4KK3Nob3VsZFRocm93KCJkb2N1bWVudC5yZWdpc3RlcigneC1iYWQtZCcsIHsg
cHJvdG90eXBlOiBPYmplY3QuY3JlYXRlKEhUTUxTcGFuRWxlbWVudC5wcm90b3R5cGUpIH0pIiwg
IidFcnJvcjogSW52YWxpZFN0YXRlRXJyb3I6IERPTSBFeGNlcHRpb24gMTEnIik7CisvLyBDYWxs
IGFzIGZ1bmN0aW9uCitzaG91bGRUaHJvdygiZm9vQ29uc3RydWN0b3IoKSIsICInVHlwZUVycm9y
OiBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4n
IikKKworLy8gQ29uc3RydWN0b3IgaW5pdGlhdGVkIGluc3RhbnRpYXRpb24KK3ZhciBjcmVhdGVk
Rm9vID0gbmV3IGZvb0NvbnN0cnVjdG9yKCk7CisKKy8vIEpTIGJ1aWx0LWluIHByb3BlcnRpZXMK
K3Nob3VsZEJlKCJjcmVhdGVkRm9vLl9fcHJvdG9fXyIsICJmb29Db25zdHJ1Y3Rvci5wcm90b3R5
cGUiKTsKK3Nob3VsZEJlKCJjcmVhdGVkRm9vLmNvbnN0cnVjdG9yIiwgImZvb0NvbnN0cnVjdG9y
Iik7CisKKy8vIE5hdGl2ZSBnZXR0ZXIKK3Nob3VsZEJlKCJjcmVhdGVkRm9vLnRhZ05hbWUiLCAi
J1gtRk9PJyIpOworCisvLyBOYXRpdmUgc2V0dGVyCitjcmVhdGVkRm9vLmlubmVySFRNTCA9ICJI
ZWxsbyI7CitzaG91bGRCZSgiY3JlYXRlZEZvby50ZXh0Q29udGVudCIsICInSGVsbG8nIik7CisK
Ky8vIE5hdGl2ZSBtZXRob2QKK3ZhciBjaGlsZERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpOworY3JlYXRlZEZvby5hcHBlbmRDaGlsZChjaGlsZERpdik7CitzaG91bGRCZSgiY3Jl
YXRlZEZvby5sYXN0Q2hpbGQiLCAiY2hpbGREaXYiKTsKKworLy8gUGFyc2VyIGluaXRpYXRlZCBp
bnN0YW50aWF0aW9uCit2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNv
bnRhaW5lciIpOworY29udGFpbmVyLmlubmVySFRNTCA9ICI8eC1mb28+PC94LWZvbz4iOworcGFy
c2VkRm9vID0gY29udGFpbmVyLmZpcnN0Q2hpbGQ7CisKK3Nob3VsZEJlKCJwYXJzZWRGb28uX19w
cm90b19fIiwgImZvb0NvbnN0cnVjdG9yLnByb3RvdHlwZSIpOworc2hvdWxkQmUoInBhcnNlZEZv
by50YWdOYW1lIiwgIidYLUZPTyciKTsKKworLy8gRW5zdXJpbmcgdGhlIHdyYXBwZXIgaXMgcmV0
YWluZWQKK3BhcnNlZEZvby5zb21lUHJvcGVydHkgPSAiaGVsbG8iOworc2hvdWxkQmUoInBhcnNl
ZEZvby5zb21lUHJvcGVydHkiLCAiY29udGFpbmVyLmZpcnN0Q2hpbGQuc29tZVByb3BlcnR5Iik7
CisKKy8vIEhhdmluZyBhbm90aGVyIGNvbnN0cnVjdG9yCit2YXIgYmFyQ29uc3RydWN0b3IgPSBk
b2N1bWVudC5yZWdpc3RlcigieC1iYXIiLCBjcmVhdGVSZWdpc3RlclBhcmFtdGVycygpKTsKK3Zh
ciBjcmVhdGVkQmFyID0gbmV3IGJhckNvbnN0cnVjdG9yKCk7CitzaG91bGRCZSgiY3JlYXRlZEJh
ci50YWdOYW1lIiwgIidYLUJBUiciKTsKKworLy8gSGF2aW5nIGEgc3ViY2xhc3MKK3ZhciBiYXpD
b25zdHJ1Y3RvciA9IGRvY3VtZW50LnJlZ2lzdGVyKCJ4LWJheiIsIHsgcHJvdG90eXBlOiBPYmpl
Y3QuY3JlYXRlKGZvb0NvbnN0cnVjdG9yLnByb3RvdHlwZSwgeyB0aGlzSXNBbHNvUHJvdG90eXBl
OiB7IHZhbHVlOiB0cnVlIH0gfSkgfSk7Cit2YXIgY3JlYXRlZEJheiA9IG5ldyBiYXpDb25zdHJ1
Y3RvcigpOworc2hvdWxkQmUoImNyZWF0ZWRCYXoudGFnTmFtZSIsICInWC1CQVonIik7CitzaG91
bGRCZVRydWUoImNyZWF0ZWRCYXoudGhpc0lzUHJvdG90eXBlIik7CitzaG91bGRCZVRydWUoImNy
ZWF0ZWRCYXoudGhpc0lzQWxzb1Byb3RvdHlwZSIpOworCisvLyBXaXRoIGlycmVndWxhciBjYXNl
cwordmFyIGNyZWF0ZWRVcHBlckJhciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlgtQkFSIik7
Cit2YXIgY3JlYXRlZE1peGVkQmFyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiWC1CYXIiKTsK
K3Nob3VsZEJlKCJjcmVhdGVkVXBwZXJCYXIuY29uc3RydWN0b3IiLCAiYmFyQ29uc3RydWN0b3Ii
KTsKK3Nob3VsZEJlKCJjcmVhdGVkVXBwZXJCYXIudGFnTmFtZSIsICInWC1CQVInIik7CitzaG91
bGRCZSgiY3JlYXRlZE1peGVkQmFyLmNvbnN0cnVjdG9yIiwgImJhckNvbnN0cnVjdG9yIik7Citz
aG91bGRCZSgiY3JlYXRlZE1peGVkQmFyLnRhZ05hbWUiLCAiJ1gtQkFSJyIpOworCitjb250YWlu
ZXIuaW5uZXJIVE1MID0gIjxYLUJBUj48L1gtQkFSPjxYLUJhcj48L1gtQmFyPiI7CitzaG91bGRC
ZSgiY29udGFpbmVyLmZpcnN0Q2hpbGQuY29uc3RydWN0b3IiLCAiYmFyQ29uc3RydWN0b3IiKTsK
K3Nob3VsZEJlKCJjb250YWluZXIuZmlyc3RDaGlsZC50YWdOYW1lIiwgIidYLUJBUiciKTsKK3No
b3VsZEJlKCJjb250YWluZXIubGFzdENoaWxkLmNvbnN0cnVjdG9yIiwgImJhckNvbnN0cnVjdG9y
Iik7CitzaG91bGRCZSgiY29udGFpbmVyLmxhc3RDaGlsZC50YWdOYW1lIiwgIidYLUJBUiciKTsK
KworLy8gU3RyYW5nZSBidXQgdmFsaWQgbmFtZXMKK3Nob3VsZEJlKCIobmV3IChkb2N1bWVudC5y
ZWdpc3RlcigneS1iYXInLCBjcmVhdGVSZWdpc3RlclBhcmFtdGVycygpKSkoKSkudGFnTmFtZSIs
ICInWS1CQVInIik7CitzaG91bGRCZSgiKG5ldyAoZG9jdW1lbnQucmVnaXN0ZXIoJ3l6LWJhcics
IGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpKSgpKS50YWdOYW1lIiwgIidZWi1CQVInIik7Citz
aG91bGRCZSgiKG5ldyAoZG9jdW1lbnQucmVnaXN0ZXIoJ3ktei1iYXInLCBjcmVhdGVSZWdpc3Rl
clBhcmFtdGVycygpKSkoKSkudGFnTmFtZSIsICInWS1aLUJBUiciKTsKK3Nob3VsZEJlKCIobmV3
IChkb2N1bWVudC5yZWdpc3RlcigneS0tYmFyJywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSkp
KCkpLnRhZ05hbWUiLCAiJ1ktLUJBUiciKTsKKworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVn
aXN0ZXItcmVlbnRyYW50LW51bGwtY29uc3RydWN0b3ItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFudC1udWxsLWNvbnN0
cnVjdG9yLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNjViNTk4ZTM1YTM3Y2I5OWI0NDY0NTEz
ZWNlNDBlNjI2Y2UzZjc5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20v
Y3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFudC1udWxsLWNvbnN0cnVjdG9yLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDkgQEAKK0Z1enppbmcgZG9jdW1lbnQucmVnaXN0ZXIoKSB0aHJv
dWdoIGdldHRlcnMuIFBBU1MgdWxlc3MgY3Jhc2guCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
KwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lz
dGVyLXJlZW50cmFudC1udWxsLWNvbnN0cnVjdG9yLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVlbnRyYW50LW51bGwtY29uc3RydWN0b3IuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44MDhhMDBiNjcxMTdhZTViMjg4Njk1YjcyMDNmMTcwMDZhY2RkYzE2Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJl
Z2lzdGVyLXJlZW50cmFudC1udWxsLWNvbnN0cnVjdG9yLmh0bWwKQEAgLTAsMCArMSwyMyBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi9yZXNvdXJj
ZXMvZG9jdW1lbnQtcmVnaXN0ZXItZnV6ei5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxkaXYgaWQ9ImNvbnRhaW5lciI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIkZ1enpp
bmcgZG9jdW1lbnQucmVnaXN0ZXIoKSB0aHJvdWdoIGdldHRlcnMuIFBBU1MgdWxlc3MgY3Jhc2gu
Iik7CisKK3NldHVwT2JqZWN0SG9va3MoeworICAgIHByb3RvdHlwZUdldDogZnVuY3Rpb24oKSB7
IH0sCisgICAgcHJvdG90eXBlU2V0OiBmdW5jdGlvbih2YWx1ZSkgeyB9LAorICAgIGNvbnN0cnVj
dG9yR2V0OiBmdW5jdGlvbigpIHsgfSwKKyAgICBjb25zdHJ1Y3RvclNldDogZnVuY3Rpb24odmFs
dWUpIHsgfQorfSk7CisKK2V4ZXJjaXNlRG9jdW1lbnRSZWdpc3RlcigpOworPC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0
b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVlbnRyYW50LXJldHVybmluZy1mYWtlLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1yZWVudHJh
bnQtcmV0dXJuaW5nLWZha2UtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE2NWI1OThlMzVhMzdj
Yjk5YjQ0NjQ1MTNlY2U0MGU2MjZjZTNmNzkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVlbnRyYW50LXJldHVybmluZy1m
YWtlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDkgQEAKK0Z1enppbmcgZG9jdW1lbnQucmVnaXN0
ZXIoKSB0aHJvdWdoIGdldHRlcnMuIFBBU1MgdWxlc3MgY3Jhc2guCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3Vt
ZW50LXJlZ2lzdGVyLXJlZW50cmFudC1yZXR1cm5pbmctZmFrZS5odG1sIGIvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFudC1yZXR1cm5pbmctZmFr
ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmU3ZTkwZmI3NmUzOGQ3YzU0MTZiYmE2N2Y1YTc1Mjk1YmIzOGRm
ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1l
bnQtcmVnaXN0ZXItcmVlbnRyYW50LXJldHVybmluZy1mYWtlLmh0bWwKQEAgLTAsMCArMSwyNiBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi9yZXNv
dXJjZXMvZG9jdW1lbnQtcmVnaXN0ZXItZnV6ei5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxkaXYgaWQ9ImNvbnRhaW5lciI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIkZ1
enppbmcgZG9jdW1lbnQucmVnaXN0ZXIoKSB0aHJvdWdoIGdldHRlcnMuIFBBU1MgdWxlc3MgY3Jh
c2guIik7CisKK3ZhciBiYWRQcm90b3R5cGUgPSBJbWFnZS5wcm90b3R5cGU7Cit2YXIgYmFkQ29u
c3RydWN0b3IgPSBJbWFnZS5wcm90b3R5cGUuY29uc3RydWN0b3I7CisKK3NldHVwT2JqZWN0SG9v
a3MoeworICAgIHByb3RvdHlwZUdldDogZnVuY3Rpb24oKSB7IHJldHVybiBiYWRQcm90b3R5cGU7
IH0sCisgICAgcHJvdG90eXBlU2V0OiBmdW5jdGlvbih2YWx1ZSkgeyAgfSwKKyAgICBjb25zdHJ1
Y3RvckdldDogZnVuY3Rpb24oKSB7IHJldHVybiBiYWRDb25zdHJ1Y3RvcjsgfSwKKyAgICBjb25z
dHJ1Y3RvclNldDogZnVuY3Rpb24odmFsdWUpIHsgIH0KK30pOworCitleGVyY2lzZURvY3VtZW50
UmVnaXN0ZXIoKTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFudC10
aHJvd2luZy1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9j
dXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVlbnRyYW50LXRocm93aW5nLWNvbnN0cnVjdG9yLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMWZjOTI5NDE0ODZhNDdiYWY3ZGM3ZGY3ZmI1MGNjNTMz
ODdiMThkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2Rv
Y3VtZW50LXJlZ2lzdGVyLXJlZW50cmFudC10aHJvd2luZy1jb25zdHJ1Y3Rvci1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwxMCBAQAorRnV6emluZyBkb2N1bWVudC5yZWdpc3RlcigpIHRocm91Z2gg
Z2V0dGVycy4gUEFTUyB1bGVzcyBjcmFzaC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK0NvbnN0cnVjdG9yIG9iamVjdCBpc24ndCBjcmVhdGVkLgorUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1yZWVudHJhbnQtdGhyb3dpbmctY29u
c3RydWN0b3IuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdp
c3Rlci1yZWVudHJhbnQtdGhyb3dpbmctY29uc3RydWN0b3IuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYmMy
OTBlZDcxMzFiYTY4N2Q5NjAzY2Y5MmNjZjM5MDA0NmFmYjFiCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFudC10
aHJvd2luZy1jb25zdHJ1Y3Rvci5odG1sCkBAIC0wLDAgKzEsMjMgQEAKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4vcmVzb3VyY2VzL2RvY3VtZW50LXJl
Z2lzdGVyLWZ1enouanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJjb250
YWluZXIiPjwvZGl2PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJGdXp6aW5nIGRvY3VtZW50LnJl
Z2lzdGVyKCkgdGhyb3VnaCBnZXR0ZXJzLiBQQVNTIHVsZXNzIGNyYXNoLiIpOworCitzZXR1cE9i
amVjdEhvb2tzKHsKKyAgICBwcm90b3R5cGVHZXQ6IGZ1bmN0aW9uKCkgeyB0aHJvdyAiRXJyb3Ii
OyB9LAorICAgIHByb3RvdHlwZVNldDogZnVuY3Rpb24odmFsdWUpIHsgdGhyb3cgIkVycm9yIjsg
fSwKKyAgICBjb25zdHJ1Y3RvckdldDogZnVuY3Rpb24oKSB7IHRocm93ICJFcnJvciI7IH0sCisg
ICAgY29uc3RydWN0b3JTZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7IHRocm93ICJFcnJvciI7IH0KK30p
OworCitleGVyY2lzZURvY3VtZW50UmVnaXN0ZXIoKTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL3Jlc291cmNl
cy9kb2N1bWVudC1yZWdpc3Rlci1mdXp6LmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9t
L3Jlc291cmNlcy9kb2N1bWVudC1yZWdpc3Rlci1mdXp6LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVkMmQzMzc5
YmVkOTI0MWZhYjIwNGRlNWMxNjM1NDY5MWVlZTk1ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vcmVzb3VyY2VzL2RvY3VtZW50LXJlZ2lzdGVyLWZ1enou
anMKQEAgLTAsMCArMSw0OSBAQAorCitmdW5jdGlvbiBzZXR1cE9iamVjdEhvb2tzKGhvb2tzKQor
eworICAgIC8vIFdyYXBwZXIgZm9yIHRoZXNlIG9iamVjdCBzaG91bGQgYmUgbWF0ZXJpYWxpemVk
IGJlZm9yZSBzZXR0aW5nIGhvb2tzLgorICAgIGNvbnNvbGUubG9nOworICAgIGRvY3VtZW50Lndl
YmtpdFJlZ2lzdGVyCisgICAgSFRNTFNwYW5FbGVtZW50LnByb3RvdHlwZTsKKworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShPYmplY3QucHJvdG90eXBlLCAicHJvdG90eXBlIiwgeworICAgICAg
ICBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gaG9va3MucHJvdG90eXBlR2V0KCk7IH0sCisgICAg
ICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIGhvb2tzLnByb3RvdHlwZVNldCh2YWx1
ZSk7IH0KKyAgICB9KTsKKworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QucHJvdG90
eXBlLCAiY29uc3RydWN0b3IiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBo
b29rcy5jb25zdHJ1Y3RvckdldCgpOyB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7
IHJldHVybiBob29rcy5jb25zdHJ1Y3RvclNldCh2YWx1ZSk7IH0KKyAgICB9KTsKKworICAgIHJl
dHVybiBob29rczsKK30KKworZnVuY3Rpb24gZXhlcmNpc2VEb2N1bWVudFJlZ2lzdGVyKCkKK3sK
KyAgICB2YXIgbXlDb25zdHJ1Y3RvciA9IG51bGw7CisgICAgdmFyIG15UHJvdG90eXBlID0gT2Jq
ZWN0LmNyZWF0ZShIVE1MRWxlbWVudC5wcm90b3R5cGUpOworICAgIHRyeSB7CisgICAgICAgIG15
Q29uc3RydWN0b3IgPSBkb2N1bWVudC53ZWJraXRSZWdpc3RlcigieC1kby1ub3RoaW5nIiwgeyBw
cm90b3R5cGU6IG15UHJvdG90eXBlIH0pOworICAgIH0gY2F0Y2ggKGUpIHsgfQorCisgICAgdHJ5
IHsKKyAgICAgICAgaWYgKCFteUNvbnN0cnVjdG9yKSB7CisgICAgICAgICAgICBkZWJ1ZygiQ29u
c3RydWN0b3Igb2JqZWN0IGlzbid0IGNyZWF0ZWQuIik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAobXlDb25zdHJ1Y3Rvci5wcm90b3R5cGUgIT0gbXlQcm90
b3R5cGUpIHsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCJGQUlMOiBiYWQgcHJvdG90eXBlIik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICB9CisKKyAgICAgICAgdmFyIGVsZW1lbnQg
PSBuZXcgbXlDb25zdHJ1Y3RvcigpOworICAgICAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGlmIChlbGVtZW50LmNvbnN0cnVjdG9yICE9IG15Q29uc3RydWN0
b3IpIHsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCJGQUlMOiBiYWQgY29uc3RydWN0b3IiKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgIH0KKyAgICB9IGNhdGNoIChlKSB7IGNvbnNv
bGUubG9nKGUpOyB9Cit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVz
dEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25z
CmluZGV4IDJmMTI0ZDE0OTJiYWY1YTdlY2Y1ZDg5MTM0MThiNTVkMTViNTc1ZjkuLjAxY2VmM2E2
NmU1NzU0ZWI0MjIyMzhkYWQ2OWU0NmE5ZWJlN2MxMGMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy9UZXN0RXhwZWN0YXRpb25zCkBAIC0xMTE1LDYgKzExMTUsOSBAQCB3ZWJraXQub3JnL2Iv
NzY0ODkgY29tcG9zaXRpbmcvd2ViZ2wvd2ViZ2wtcmVmbGVjdGlvbi5odG1sIFsgSW1hZ2VPbmx5
RmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvNzY0MzkgWyBEZWJ1ZyBdIGZhc3QvZG9tL3NoYWRvdy9j
b250ZW50LWVsZW1lbnQtYXBpLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi83NjQzOSBb
IERlYnVnIF0gZmFzdC9kb20vc2hhZG93L2NvbnRlbnQtZWxlbWVudC1vdXRzaWRlLXNoYWRvdy5o
dG1sIFsgRmFpbHVyZSBdCiAKKyMgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykgaXMgZGlzYWJsZWQu
CitmYXN0L2RvbS9jdXN0b20KKwogIyBDU1MgVmFyaWFibGVzIGFyZSBub3QgeWV0IGVuYWJsZWQu
CiB3ZWJraXQub3JnL2IvODU1ODAgZmFzdC9jc3MvdmFyaWFibGVzCiB3ZWJraXQub3JnL2IvODU1
ODAgaW5zcGVjdG9yL3N0eWxlcy92YXJpYWJsZXMK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189917</attachid>
            <date>2013-02-23 02:10:25 -0800</date>
            <delta_ts>2013-02-24 01:27:20 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-100229-20130223190643.patch</filename>
            <type>text/plain</type>
            <size>94875</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzODM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2NkMzAzYzJiZTMzZTdh
NTllOGE0OTFhNTAwNmQ3MTBkMDk2N2E4OS4uNjk4Zjg0Njc4NTQ2NzU2Y2NjZmQ0Nzg0NzA3Y2U4
ZjRmNmY1OGE2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MCBAQAorMjAxMy0wMi0yMSAgSGFq
aW1lIE1vcnJpdGEgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgW0N1c3RvbSBFbGVt
ZW50c10gSW1wbGVtZW50IGJhcmUtYm9uZSBkb2N1bWVudC5yZWdpc3RlcigpCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDAyMjkKKworICAgICAgICBS
ZXZpZXdlZCBieSBBZGFtIEJhcnRoLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGltcGxlbWVudHMg
YSBwcmVmaXhlZCB2ZXJzaW9uIG9mIGRvY3VtZW50LnJlZ2lzdGVyKCksIHdpdGggbWluaW1hbCBm
ZWF0dXJlIHN1cHBvcnQuCisgICAgICAgIC0gVGhlIGZlYXR1cmUgaXMgZ3VhcmRlZCBieSBFTkFC
TEUoQ1VTVE9NX0VMRU1FTlRTKSBhbmQgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6Y3VzdG9tRE9N
RWxlbWVudHNFbmFibGVkKCkuCisgICAgICAgIC0gVGhpcyBiYXJlLWJvbmUgdmVyc2lvbiBvbmx5
IHJlY29nbml6ZXMgIm5hbWUiIGFuZCAicHJvdG90eXBlIiBwYXJhbWV0ZXJzLiBJdCBkb2Vzbid0
IHN1cHBvcnQgZGVmYXVsdCB2YWx1ZSBvZiAicHJvdG90eXBlIiBwYXJhbWV0ZXIuCisgICAgICAg
IC0gQ3VycmVudGx5IG9ubHkgVjggaXMgc3VwcG9ydGVkLiBKU0MgYmluZGluZyBuZWVkcyBpdHMg
b3duIGJpbmRpbmcgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgPSBNYWpvciBuZXcgY2xhc3Nl
cyB1bmRlciBkb20vOgorCisgICAgICAgIFRoZSBkb20gbW9kdWxlIGdldHMgdHdvIG5ldyBjbGFz
c2VzOgorICAgICAgICAtIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvcjogQSByZXR1cm4gdmFsdWUg
b2YgZG9jdW1lbnQucmVnaXN0ZXIoKQorICAgICAgICAgIHdoaWNoIGhvbGRzIHRoZSBjdXN0b20g
ZWxlbWVudCBkZWZpbml0aW9uLgorICAgICAgICAtIEN1c3RvbUVsZW1lbnRSZWdpc3RyeTogQSBj
b2xsZWN0aW9uIG9mIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciBvYmplY3RzLgorICAgICAgICAg
IEN1c3RvbUVsZW1lbnRSZWdpc3RyeSBpbnN0YW5jZSBpcyBjcmVhdGVkIHBlciBEb2N1bWVudCBh
bmQgaXMgb3duZWQgYnkgdGhlIERvY3VtZW50LgorCisgICAgICAgIEN1c3RvbUVsZW1lbnRDb25z
dHJ1Y3RvciBrbm93cyB0aGUgZGVmaW5pdGlvbiBvZiBlYWNoIGN1c3RvbQorICAgICAgICBlbGVt
ZW50LCB3aGljaCBpcyByZWdpc3RlcmVkIGJ5IGRvY3VtZW50LnJlZ2lzdGVyKCkuIFRoZSBuYW1l
IGFuZAorICAgICAgICBvdGhlciBvcHRpb25zIGFyZSBoZWxkIGJ5IHRoaXMgb2JqZWN0LiBDdXN0
b21FbGVtZW50UmVnaXN0cnkgb3ducyBhIHNldAorICAgICAgICBvZiB0aGUgcmVnaXN0ZXJlZCBj
b25zdHJ1Y3RvcnMuIFRoZSByZWdpc3RyeSBndWFyYW50ZWVzIGludmFyaWFudHMKKyAgICAgICAg
bGlrZSB2YWxpZGl0eSBhbmQgdW5pcXVlbmVzcyBvZiB0aGUgZWxlbWVudCBuYW1lcy4KKworICAg
ICAgICA9IEEgY2hhbmdlIG9uIG1ha2VfbmFtZXMucGwKKworICAgICAgICBUaGlzIGNoYW5nZSB0
d2Vha3MgbWFrZV9uYW1lcy5wbCAob3IgZ2VuZXJhdGVkIEhUTUxFbGVtZW50RmFjdG9yeSkKKyAg
ICAgICAgdG8gaG9vayB0aGUgY3JlYXRpb25zIG9mIHVua25vd24gZWxlbWVudHMuIFNvbWUgb2Yg
ZWxlbWVudCBuYW1lcworICAgICAgICB3aGljaCBjb21lIHRvIHRoZSBmYWxsYmFjayBwYXRoIGNh
biBiZSBvbmUgb2YgcmVnaXN0ZXJlZCBjdXN0b20KKyAgICAgICAgZWxlbWVudC4KKworICAgICAg
ICA9IFtWOFdyYXBBc0Z1bmN0aW9uXSBleHRlbmRlZCBhdHRyaWJ1dGU6CisKKyAgICAgICAgVGhl
IGRvY3VtZW50LnJlZ2lzdGVyKCkgQVBJIHJldHVybnMgYSBjb25zdHJ1Y3RvcgorICAgICAgICBm
dW5jdGlvbi4gSG93ZXZlciwgdGhlIFY4IGJpbmRpbmcgY3VycmVudGx5IGRvZXNuJ3Qgc3VwcG9y
dCBpdC4gVG8KKyAgICAgICAgbWFrZSBpdCBwb3NzaWJsZSwgdGhpcyBjaGFuZ2UgaW50cm9kdWNl
cyAiVjhXcmFwQXNGdW5jdGlvbiIKKyAgICAgICAgZXh0ZW5kZWQgYXR0cmlidXRlIGZvciBhbm5v
dGF0aW5nIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciBJREwKKyAgICAgICAgaW50ZXJmYWNlLgor
CisgICAgICAgIFY4V3JhcEFzRnVuY3Rpb24gd3JhcHMgdGhlIGFubm90YXRlZCBpbnRlcmZhY2Ug
d2l0aCBhIEphdmFTY3JpcHQKKyAgICAgICAgZnVuY3Rpb24sIHdoaWNoIGNhbGxzIHRoZSBvcmln
aW5hbCBvYmplY3QgYXMgYSBmdW5jdGlvbiwgb3IgYXMgYQorICAgICAgICBjb25zdHJ1Y3RvciBk
ZXBlbmRzIG9uIHRoZSBjb250ZXh0LgorCisgICAgICAgIFdpdGggdGhpcyB3cmFwcGVyIGZ1bmN0
aW9uLCB0aGVyZSBhcmUgdHdvIGxldmVscyBvZiBpbmRpcmVjdGlvbgorICAgICAgICBiZXR3ZWVu
IG5hdGl2ZSBDKysgb2JqZWN0IGFuZCBhdXRob3ItdmlzaWJsZSBKUyBmdW5jdGlvbjoKKworICAg
ICAgICBbSlMgQWRhcHRvciBGdW5jdGlvbl0gPC0oaGlkZGVuIHByb3BlcnR5KS0+IFtKUyBXcmFw
cGVyIE9iamVjdF0gLShpbnRlcm5hbCBmaWVsZCktPiBbQysrIE5hdGl2ZSBvYmplY3RdCisKKyAg
ICAgICAgVGhlIGNvZGUgZ2VuZXJhdG9yIGdlbmVyYXRlcyB0aGUgYmluZGluZyBjb2RlIHdoaWNo
IGRlYWxzIHdpdGgKKyAgICAgICAgdGhpcyBpbmRpcmVjdGlvbi4gIEFsc28sIHRoZXJlIGlzIGEg
c2V0IG9mIGhlbHBlciBmdW5jdGlvbnMgaW4KKyAgICAgICAgVjhBZGFwdG9yRnVuY3Rpb24uaC9j
cHAgd2hpY2ggdGFrZXMgY2FyZSBvZiB0aGlzIGluZGlyZWN0aW9uLgorICAgICAgICBWOERPTVdy
YXBwZXIuY3BwL2ggd29ya3MgYXMgYSBmYWNhZGUgZm9yIHRoZXNlIEFQSXMgYW5kIGlzIHVzZWQg
ZnJvbQorICAgICAgICB0aGUgZ2VuZXJhdGVkIGNvZGUuCisKKyAgICAgICAgVGhpcyByZWR1bmRh
bmN5IGNvbWVzIGZyb20gbGltaXRhdGlvbnMgb2YgYm90aCBWOCBiaW5kaW5ncyBhbmQgVjgKKyAg
ICAgICAgZW1iZWRkaW5nIEFQSS4gU2VlIGJ1ZyAxMDgxMzggZm9yIGRldGFpbHMuCisKKyAgICAg
ICAgPSBWOEhUTUxDdXN0b21FbGVtZW50CisKKyAgICAgICAgVW5saWtlIGJ1aWx0LWluIEhUTUwg
ZWxlbWVudHMsIGFueSBjdXN0b20gZWxlbWVudCBoYXMgbm8KKyAgICAgICAgY29ycmVzcG9uZGlu
ZyBDKysgY2xhc3MuIEluc3RlYWQsIGRvY3VtZW50LnJlZ2lzdGVyKCkgc2hvdWxkIGFsbG93Cisg
ICAgICAgIHBhc3NpbmcgYSBwcm90b3R5cGUgb2JqZWN0IGZvciB0aGUgZWxlbWVudHMgYmVpbmcg
cmVnaXN0ZXJlZC4KKworICAgICAgICBWOEhUTUxDdXN0b21FbGVtZW50IGhhbmRsZXMgdGhpcyBs
YWNrIG9mIG5hdGl2ZSBjbGFzcy4gIEl0IGJlaGF2ZXMKKyAgICAgICAgbGlrZSBhIG5hdGl2ZSBz
aWRlIHByb3h5IG9mIG5vbi1uYXRpdmUgSFRNTEVsZW1lbnQgc3ViY2xhc3Nlcy4gIEl0CisgICAg
ICAgIGNvbm5lY3RzIGVhY2ggY3VzdG9tIGVsZW1lbnQgdG8gYW4gYXBwcm9wcmlhdGUgbmF0aXZl
IGVsZW1lbnQsCisgICAgICAgIHdoaWNoIGlzIEhUTUxFbGVtZW50IGF0IHRoaXMgdGltZS4gVGhp
cyByZXN0cmljdGlvbiB3aWxsIGJlCisgICAgICAgIHJlbGF4ZWQgbGF0ZXIuIFNlZSBCdWcgMTEw
NDM2IGZvciBkZXRhaWxzLgorCisgICAgICAgID0gQ3VzdG9tIERPTSBlbGVtZW50cyBhbmQgbXVs
dGlwbGUgd29ybGRzCisKKyAgICAgICAgSW4gdGhpcyBwYXRjaCwgY3VzdG9tIGVsZW1lbnQgcmVn
aXN0cmF0aW9uIGFuZCBpbnN0YW50aWF0aW9uIGlzIG5vdCBhbGxvd2VkCisgICAgICAgIGluIG5v
bi1tYWluIHdvcmxkIGFuZCBkb2N1bWVudC5yZWdpc3RlcigpIEFQSSBqdXN0IGZhaWxzIHRoZXJl
LgorCisgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCisKKyAgICAgICAgVGVzdHM6IGZh
c3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1iYXNpYy5odG1sCisgICAgICAgICAgICAg
ICBmYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVlbnRyYW50LW51bGwtY29uc3Ry
dWN0b3IuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lz
dGVyLXJlZW50cmFudC1yZXR1cm5pbmctZmFrZS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2Rv
bS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVlbnRyYW50LXRocm93aW5nLWNvbnN0cnVjdG9y
Lmh0bWwKKworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogV2ViQ29y
ZS5neXBpOgorICAgICAgICAqIGJpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJl
cy5jcHA6CisgICAgICAgICogYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVz
Lmg6CisgICAgICAgIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmN1c3RvbURPTUVsZW1lbnRzRW5hYmxlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzZXRDdXN0b21ET01FbGVtZW50
cyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAg
ICAgIChHZW5lcmF0ZUhlYWRlcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRy
aWJ1dGVzLnR4dDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9DdXN0b21FbGVtZW50SGVscGVycy5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudEhlbHBlcnM6OmluaXRp
YWxpemVDb25zdHJ1Y3RvcldyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6aGFzTm9CdWlsdGlu
c0luUHJvdG90eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRIZWxwZXJzOjpp
c1ZhbGlkUHJvdG90eXBlUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1l
bnRIZWxwZXJzOjppc0ZlYXR1cmVBbGxvd2VkKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9DdXN0
b21FbGVtZW50SGVscGVycy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oLgorICAgICAgICAoQ3VzdG9tRWxlbWVudEhlbHBlcnMp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpWOEFkYXB0b3JGdW5jdGlvbjo6Z2V0VGVtcGxhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VjhBZGFwdG9yRnVuY3Rpb246OmNvbmZpZ3VyZVRlbXBsYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlY4QWRhcHRvckZ1bmN0aW9uOjppbnZvY2F0aW9uQ2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6VjhBZGFwdG9yRnVuY3Rpb246OndyYXApOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmg6IEFkZGVkLgorICAgICAgICAoVjhBZGFwdG9yRnVu
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6VjhBZGFwdG9yRnVuY3Rpb246OnVud3JhcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpWOEFkYXB0b3JGdW5jdGlvbjo6Z2V0KToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9WOERPTUNvbmZpZ3VyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhET01D
b25maWd1cmF0aW9uOjpjb25maWd1cmVUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvdjgv
VjhET01XcmFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6dG9GdW5j
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OmZyb21GdW5jdGlvbik6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmg6CisgICAgICAgIChWOERPTVdyYXBw
ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4SFRNTEN1c3RvbUVsZW1lbnQuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlY4SFRNTEN1c3RvbUVsZW1lbnQ6OmNyZWF0ZVdyYXBwZXIp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4SFRNTEN1c3RvbUVsZW1lbnQuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaC4KKyAg
ICAgICAgKFY4SFRNTEN1c3RvbUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6VjhIVE1MQ3Vz
dG9tRWxlbWVudDo6dG9WOCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ3VzdG9tRWxlbWVudDo6
dG9WOCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaDoKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21FbGVtZW50Q29uc3RydWN0b3JDdXN0
b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9tRWxlbWVudENvbnN0cnVj
dG9yOjpjYWxsQXNGdW5jdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKiBkb20vQ3VzdG9tRWxlbWVu
dENvbnN0cnVjdG9yLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaC4KKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRD
b25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRDb25z
dHJ1Y3Rvcjo6Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkN1
c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6fkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6OmNyZWF0ZUVsZW1lbnQpOgor
ICAgICAgICAqIGRvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaC4KKyAgICAgICAg
KEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVt
ZW50Q29uc3RydWN0b3I6OmRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1l
bnRDb25zdHJ1Y3Rvcjo6dGFnTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50
Q29uc3RydWN0b3I6Om5hbWUpOgorICAgICAgICAqIGRvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0
b3IuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBkb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVnaXN0cnk6OkN1c3RvbUVs
ZW1lbnRSZWdpc3RyeSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVnaXN0cnk6
On5DdXN0b21FbGVtZW50UmVnaXN0cnkpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVu
dFJlZ2lzdHJ5Ojpjb25zdHJ1Y3Rvck9mKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1l
bnRSZWdpc3RyeTo6aXNWYWxpZE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVu
dFJlZ2lzdHJ5OjpyZWdpc3RlckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxl
bWVudFJlZ2lzdHJ5OjpmaW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWdp
c3RyeTo6Y3JlYXRlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVn
aXN0cnk6OmRvY3VtZW50KToKKyAgICAgICAgKiBkb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Lmg6
IEFkZGVkLgorICAgICAgICAoQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5KToKKyAgICAgICAgKiBkb20v
RG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlbW92ZWRMYXN0UmVm
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWdpc3RlckVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlZ2lzdHJ5KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQu
aDoKKyAgICAgICAgKERvY3VtZW50KToKKyAgICAgICAgKiBkb20vbWFrZV9uYW1lcy5wbDoKKyAg
ICAgICAgKHByaW50V3JhcHBlckZhY3RvcnlDcHBGaWxlKToKKyAgICAgICAgKiBodG1sL0hUTUxE
b2N1bWVudC5pZGw6CisKIDIwMTMtMDItMjMgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBs
ZS5jb20+CiAKICAgICAgICAgRG9uJ3QgaW5jbHVkZSBSZXNvdXJjZUhhbmRsZS5oIGluIFJlc291
cmNlTG9hZGVyT3B0aW9ucy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGViYWE0NDNk
ZGZiNjgwOTNkZDQyOTAzMDliODljZDc3NGQ0MGQ2NjEuLjgwNzg1NzIyZTMwYzUwNjE3MTI0NTQz
MjdiZGU1ZmJmYWY0NjBmZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjAgQEAKKzIwMTMtMDItMjEgIEhhamltZSBNb3JyaXRhICA8bW9ycml0YUBnb29nbGUuY29tPgor
CisgICAgICAgIFtDdXN0b20gRWxlbWVudHNdIEltcGxlbWVudCBiYXJlLWJvbmUgZG9jdW1lbnQu
cmVnaXN0ZXIoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTAwMjI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KKworICAgICAgICBB
ZGRlZCBlbmFibGVDdXN0b21ET01FbGVtZW50cyBmbGFnLgorCisgICAgICAgICogZmVhdHVyZXMu
Z3lwaToKKyAgICAgICAgKiBwdWJsaWMvV2ViUnVudGltZUZlYXR1cmVzLmg6CisgICAgICAgIChX
ZWJSdW50aW1lRmVhdHVyZXMpOgorICAgICAgICAqIHNyYy9XZWJSdW50aW1lRmVhdHVyZXMuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZUN1c3RvbURPTUVs
ZW1lbnRzKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJ1bnRpbWVG
ZWF0dXJlczo6aXNDdXN0b21ET01FbGVtZW50c0VuYWJsZWQpOgorCiAyMDEzLTAyLTIyICBEYXZp
ZCBEb3J3aW4gIDxkZG9yd2luQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFJl
bW92ZSBjYWxsIHRvIGRldGFjaCBXZWJIZWxwZXJQbHVnaW5JbXBsJ3MgZnJhbWUgc2luY2UgaXQg
aXMgbmV2ZXIgYXR0YWNoZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3Vy
Y2VzLm1ha2UgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IDI0ZWVj
ZjFiMWNjNDY3YWI0YzkyZmMyMzk1ZWE0MzFhZTgzMTRkZjQuLjQ3NmFkOGViZWVhODc0ZDUxMzVm
MWYyMTBmZGNlNjUyYTMyMThiM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRT
b3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAt
MjIwLDYgKzIyMCw3IEBAIEJJTkRJTkdfSURMUyA9IFwKICAgICAkKFdlYkNvcmUpL2RvbS9DbGlw
Ym9hcmQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2RvbS9Db21tZW50LmlkbCBcCiAgICAgJChXZWJD
b3JlKS9kb20vQ29tcG9zaXRpb25FdmVudC5pZGwgXAorICAgICQoV2ViQ29yZSkvZG9tL0N1c3Rv
bUVsZW1lbnRDb25zdHJ1Y3Rvci5pZGwgXAogICAgICQoV2ViQ29yZSkvZG9tL0N1c3RvbUV2ZW50
LmlkbCBcCiAgICAgJChXZWJDb3JlKS9kb20vRE9NQ29yZUV4Y2VwdGlvbi5pZGwgXAogICAgICQo
V2ViQ29yZSkvZG9tL0RPTUVycm9yLmlkbCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMjhiNzhjYWQy
OTkzNGRmZDczZWVlM2FlYWZlMGQ1NWEwZTUwNTMwNC4uZmI2OTA3MTYzZjZhOWIzMjczMTMxNzVm
ZTg1MDJlMDRkNGQyOGMxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjAwLDYgKzIwMCw3IEBACiAg
ICAgICAgICAgICAnZG9tL0NsaXBib2FyZC5pZGwnLAogICAgICAgICAgICAgJ2RvbS9Db21tZW50
LmlkbCcsCiAgICAgICAgICAgICAnZG9tL0NvbXBvc2l0aW9uRXZlbnQuaWRsJywKKyAgICAgICAg
ICAgICdkb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmlkbCcsCiAgICAgICAgICAgICAnZG9t
L0N1c3RvbUV2ZW50LmlkbCcsCiAgICAgICAgICAgICAnZG9tL0RPTUNvcmVFeGNlcHRpb24uaWRs
JywKICAgICAgICAgICAgICdkb20vRE9NRXJyb3IuaWRsJywKQEAgLTExOTEsNiArMTE5Miw4IEBA
CiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvQXJyYXlWYWx1ZS5oJywKICAgICAgICAgICAgICdi
aW5kaW5ncy92OC9CaW5kaW5nU3RhdGUuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9C
aW5kaW5nU3RhdGUuaCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvQ3VzdG9tRWxlbWVudEhl
bHBlcnMuY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9DdXN0b21FbGVtZW50SGVscGVy
cy5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuY3BwJywKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaCcsCiAgICAgICAgICAgICAnYmluZGlu
Z3MvdjgvRE9NUmVxdWVzdFN0YXRlLmgnLApAQCAtMTI1OSw2ICsxMjYyLDggQEAKICAgICAgICAg
ICAgICdiaW5kaW5ncy92OC9TaGFyZWRQZXJzaXN0ZW50LmgnLAogICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmNwcCcsCiAgICAgICAgICAgICAnYmluZGlu
Z3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaCcsCisgICAgICAgICAgICAnYmluZGluZ3Mv
djgvVjhBZGFwdG9yRnVuY3Rpb24uY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEFk
YXB0b3JGdW5jdGlvbi5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEJpbmRpbmcuY3Bw
JywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEJpbmRpbmcuaCcsCiAgICAgICAgICAgICAn
YmluZGluZ3MvdjgvVjhCaW5kaW5nTWFjcm9zLmgnLApAQCAtMTI4MCw2ICsxMjg1LDggQEAKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5oJywKICAgICAgICAgICAgICdi
aW5kaW5ncy92OC9WOEdDRm9yQ29udGV4dERpc3Bvc2UuY3BwJywKICAgICAgICAgICAgICdiaW5k
aW5ncy92OC9WOEdDRm9yQ29udGV4dERpc3Bvc2UuaCcsCisgICAgICAgICAgICAnYmluZGluZ3Mv
djgvVjhIVE1MQ3VzdG9tRWxlbWVudC5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4
SFRNTEN1c3RvbUVsZW1lbnQuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhIaWRkZW5Q
cm9wZXJ0eU5hbWUuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEhpZGRlblByb3Bl
cnR5TmFtZS5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEluaXRpYWxpemVyLmNwcCcs
CkBAIC0xMzQwLDYgKzEzNDcsNyBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OENvbnNvbGVDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhD
b29yZGluYXRlc0N1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OENyeXB0b0N1c3RvbS5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1
c3RvbUVsZW1lbnRDb25zdHJ1Y3RvckN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEN1c3RvbUV2ZW50Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAnLAogICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAn
LApAQCAtMjc3Myw2ICsyNzgxLDEwIEBACiAgICAgICAgICAgICAnZG9tL0NvbnRleHRGZWF0dXJl
cy5jcHAnLAogICAgICAgICAgICAgJ2RvbS9Db250ZXh0RmVhdHVyZXMuaCcsCiAgICAgICAgICAg
ICAnZG9tL0Nyb3NzVGhyZWFkVGFzay5oJywKKyAgICAgICAgICAgICdkb20vQ3VzdG9tRWxlbWVu
dENvbnN0cnVjdG9yLmNwcCcsCisgICAgICAgICAgICAnZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1
Y3Rvci5oJywKKyAgICAgICAgICAgICdkb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmNwcCcsCisg
ICAgICAgICAgICAnZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5oJywKICAgICAgICAgICAgICdk
b20vQ3VzdG9tRXZlbnQuY3BwJywKICAgICAgICAgICAgICdkb20vQ3VzdG9tRXZlbnQuaCcsCiAg
ICAgICAgICAgICAnZG9tL0RPTUFsbEluT25lLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNwcAppbmRl
eCAyYTJkYTZmZWI0NzcxZjNkMzdkNmQ2MzgzNTk0ZDUyZDUzMjFlNTBmLi5mNDExNDNlYWQ2ODAz
ODFlYWM2MjliOGQ1ZjdhMDg4MmE0NDEwMWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHAKQEAgLTE5
MCw2ICsxOTAsMTAgQEAgYm9vbCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjppc1NoYWRvd0RPTUVu
YWJsZWQgPSBmYWxzZTsKIGJvb2wgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6aXNBdXRob3JTaGFk
b3dET01Gb3JBbnlFbGVtZW50RW5hYmxlZCA9IGZhbHNlOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUo
Q1VTVE9NX0VMRU1FTlRTKQorYm9vbCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjppc0N1c3RvbURP
TUVsZW1lbnRzRW5hYmxlZCA9IGZhbHNlOworI2VuZGlmCisKICNpZiBFTkFCTEUoU1RZTEVfU0NP
UEVEKQogYm9vbCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjppc1N0eWxlU2NvcGVkRW5hYmxlZCA9
IGZhbHNlOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5l
cmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dl
bmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oCmluZGV4IGNlYzY0MTk1ZWFjOTEyYzcwNWQy
NDNhYjliZGFmNjM5NWZmNTk4NDIuLjI1MzdlOGMzOTdiNThhNGQzNTQzNmUwMjZiZTI5OTFkODNi
MzE1OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGlt
ZUVuYWJsZWRGZWF0dXJlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMv
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5oCkBAIC0yMTgsNiArMjE4LDExIEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgdm9pZCBzZXRBdXRob3JTaGFkb3dET01Gb3JBbnlFbGVtZW50RW5hYmxlZChib29s
IGlzRW5hYmxlZCkgeyBpc0F1dGhvclNoYWRvd0RPTUZvckFueUVsZW1lbnRFbmFibGVkID0gaXNF
bmFibGVkOyB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisgICAgc3Rh
dGljIGJvb2wgY3VzdG9tRE9NRWxlbWVudHNFbmFibGVkKCkgeyByZXR1cm4gaXNDdXN0b21ET01F
bGVtZW50c0VuYWJsZWQ7IH0KKyAgICBzdGF0aWMgdm9pZCBzZXRDdXN0b21ET01FbGVtZW50cyhi
b29sIGlzRW5hYmxlZCkgeyBpc0N1c3RvbURPTUVsZW1lbnRzRW5hYmxlZCA9IGlzRW5hYmxlZDsg
fQorI2VuZGlmCisKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQogICAgIHN0YXRpYyBib29sIHN0
eWxlU2NvcGVkRW5hYmxlZCgpIHsgcmV0dXJuIGlzU3R5bGVTY29wZWRFbmFibGVkOyB9CiAgICAg
c3RhdGljIHZvaWQgc2V0U3R5bGVTY29wZWRFbmFibGVkKGJvb2wgaXNFbmFibGVkKSB7IGlzU3R5
bGVTY29wZWRFbmFibGVkID0gaXNFbmFibGVkOyB9CkBAIC0zNDMsNiArMzQ4LDEwIEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIGJvb2wgaXNBdXRob3JTaGFkb3dET01Gb3JBbnlFbGVtZW50RW5hYmxl
ZDsKICNlbmRpZgogCisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKyAgICBzdGF0aWMgYm9v
bCBpc0N1c3RvbURPTUVsZW1lbnRzRW5hYmxlZDsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFNUWUxF
X1NDT1BFRCkKICAgICBzdGF0aWMgYm9vbCBpc1N0eWxlU2NvcGVkRW5hYmxlZDsKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
VjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bQppbmRleCBmYmFkZWIwYWJmM2I1OWI0ZWY4M2ZhNjNhZDFhNzg3OTBiZjMwMjhhLi5kM2RjODAy
NjYzNWRjMjBiN2EwZDUzZDFjYjJlZDk0YjYzZWE2ZjRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtMzUyLDEzICszNTIs
MjAgQEAgRU5ECiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJmYWxzZTtcbiIpOwogICAg
IH0KIAorICAgIG15ICRmcm9tRnVuY3Rpb25PcGVuaW5nID0gIiI7CisgICAgbXkgJGZyb21GdW5j
dGlvbkNsb3NpbmcgPSAiIjsKKyAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IlY4V3JhcEFzRnVuY3Rpb24ifSkgeworICAgICAgICAkZnJvbUZ1bmN0aW9uT3BlbmluZyA9
ICJWOERPTVdyYXBwZXI6OmZyb21GdW5jdGlvbigiOworICAgICAgICAkZnJvbUZ1bmN0aW9uQ2xv
c2luZyA9ICIpIjsKKyAgICB9CisKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CiAg
ICAgc3RhdGljIGJvb2wgSGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+LCB2ODo6SXNv
bGF0ZSopOwogICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4g
R2V0UmF3VGVtcGxhdGUodjg6Oklzb2xhdGUqKTsKICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdldFRlbXBsYXRlKHY4OjpJc29sYXRlKik7CiAgICAgc3Rh
dGljICR7bmF0aXZlVHlwZX0qIHRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8JHtuYXRpdmVUeXBlfSo+
KG9iamVjdC0+R2V0QWxpZ25lZFBvaW50ZXJGcm9tSW50ZXJuYWxGaWVsZCh2OERPTVdyYXBwZXJP
YmplY3RJbmRleCkpOworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwke25hdGl2ZVR5
cGV9Kj4oJHtmcm9tRnVuY3Rpb25PcGVuaW5nfW9iamVjdCR7ZnJvbUZ1bmN0aW9uQ2xvc2luZ30t
PkdldEFsaWduZWRQb2ludGVyRnJvbUludGVybmFsRmllbGQodjhET01XcmFwcGVyT2JqZWN0SW5k
ZXgpKTsKICAgICB9CiAgICAgc3RhdGljIHZvaWQgZGVyZWZPYmplY3Qodm9pZCopOwogICAgIHN0
YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKQEAgLTUzOSw2ICs1NDYsOSBAQCBFTkQKICAgICB9
IGVsc2UgewogCiAgICAgICAgIG15ICRjcmVhdGVXcmFwcGVyQ2FsbCA9ICRjdXN0b21XcmFwID8g
IiR7djhJbnRlcmZhY2VOYW1lfTo6d3JhcCIgOiAiJHt2OEludGVyZmFjZU5hbWV9OjpjcmVhdGVX
cmFwcGVyIjsKKyAgICAgICAgbXkgJHJldHVybmluZ1dyYXBwZXIgPSAkaW50ZXJmYWNlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiVjhXcmFwQXNGdW5jdGlvbiJ9ID8gIlY4RE9NV3JhcHBlcjo6dG9G
dW5jdGlvbih3cmFwcGVyKSIgOiAid3JhcHBlciI7CisgICAgICAgIG15ICRyZXR1cm5pbmdDcmVh
dGVkV3JhcHBlck9wZW5pbmcgPSAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVjhX
cmFwQXNGdW5jdGlvbiJ9ID8gIlY4RE9NV3JhcHBlcjo6dG9GdW5jdGlvbigiIDogIiI7CisgICAg
ICAgIG15ICRyZXR1cm5pbmdDcmVhdGVkV3JhcHBlckNsb3NpbmcgPSAkaW50ZXJmYWNlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiVjhXcmFwQXNGdW5jdGlvbiJ9ID8gIiwgaW1wbC0+bmFtZSgpLCBp
c29sYXRlKSIgOiAiIjsKIAogICAgICAgICBpZiAoJGN1c3RvbVdyYXApIHsKICAgICAgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKQEAgLTU1Miw3ICs1NjIsNyBAQCBpbmxpbmUg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKCR7bmF0aXZlVHlwZX0qIGltcGwsIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gYwogewogICAgIEFTU0VSVChpbXBsKTsKICAgICBBU1NFUlQoRE9NRGF0
YVN0b3JlOjpnZXRXcmFwcGVyKGltcGwsIGlzb2xhdGUpLklzRW1wdHkoKSk7Ci0gICAgcmV0dXJu
ICRjcmVhdGVXcmFwcGVyQ2FsbChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworICAg
IHJldHVybiAke3JldHVybmluZ0NyZWF0ZWRXcmFwcGVyT3BlbmluZ30kY3JlYXRlV3JhcHBlckNh
bGwoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKSR7cmV0dXJuaW5nQ3JlYXRlZFdyYXBw
ZXJDbG9zaW5nfTsKIH0KIEVORAogICAgICAgICB9CkBAIC01NjUsNyArNTc1LDcgQEAgaW5saW5l
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KCR7bmF0aXZlVHlwZX0qIGltcGwsIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gY3IKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhpc29sYXRl
KTsKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IERPTURhdGFTdG9yZTo6Z2V0
V3JhcHBlcihpbXBsLCBpc29sYXRlKTsKICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gd3JhcHBlcjsKKyAgICAgICAgcmV0dXJuICRyZXR1cm5pbmdXcmFwcGVyOwog
ICAgIHJldHVybiB3cmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKQEAg
LTU3Niw3ICs1ODYsNyBAQCBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhGYXN0KCR7
bmF0aXZlVHlwZX0qIGltcGwsIGNvbnN0IEhvbGRlckNvbnRhaW5lcgogICAgICAgICByZXR1cm4g
djhOdWxsKGNvbnRhaW5lci5HZXRJc29sYXRlKCkpOwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gd3JhcHBlciA9IERPTURhdGFTdG9yZTo6Z2V0V3JhcHBlckZhc3QoaW1wbCwgY29udGFpbmVy
LCB3cmFwcGFibGUpOwogICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biB3cmFwcGVyOworICAgICAgICByZXR1cm4gJHJldHVybmluZ1dyYXBwZXI7CiAgICAgcmV0dXJu
IHdyYXAoaW1wbCwgY29udGFpbmVyLkhvbGRlcigpLCBjb250YWluZXIuR2V0SXNvbGF0ZSgpKTsK
IH0KIEVORApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExB
dHRyaWJ1dGVzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmli
dXRlcy50eHQKaW5kZXggYzYzNjQ0ZmJlOTY1MjlkZjc4YTIzODMwYTU2YjY0MWEyZGJlZGQwNy4u
MTg2MTExODE1MDllYzNiNWNjNzRjMGE5ZjMwOGI2YjA1OThjYTM0MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0CkBAIC0xMjksMyAr
MTI5LDQgQEAgVjhNZWFzdXJlQXM9KgogVjhSZWFkT25seQogVjhTa2lwVlRhYmxlVmFsaWRhdGlv
bgogVjhVbmZvcmdlYWJsZQorVjhXcmFwQXNGdW5jdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvQ3VzdG9tRWxlbWVudEhlbHBlcnMuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvQ3VzdG9tRWxlbWVudEhlbHBlcnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI1OGI5
MTQ4NjQzOGVhNjY1NjQ0MjdhYzUwMTkxYzViMzg1OWRhNjEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9DdXN0b21FbGVtZW50SGVscGVycy5jcHAKQEAgLTAs
MCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudEhl
bHBlcnMuaCIKKworI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgorI2luY2x1ZGUgIlY4Q3Vz
dG9tRWxlbWVudENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiVjhIVE1MUGFyYWdyYXBoRWxlbWVu
dC5oIgorI2luY2x1ZGUgIlY4SFRNTFNwYW5FbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKK2Jvb2wgQ3VzdG9tRWxlbWVudEhl
bHBlcnM6OmluaXRpYWxpemVDb25zdHJ1Y3RvcldyYXBwZXIoQ3VzdG9tRWxlbWVudENvbnN0cnVj
dG9yKiBjb25zdHJ1Y3RvciwgY29uc3QgU2NyaXB0VmFsdWUmIHByb3RvdHlwZSwgU2NyaXB0U3Rh
dGUqIHN0YXRlKQoreworICAgIEFTU0VSVChpc0ZlYXR1cmVBbGxvd2VkKHN0YXRlKSk7CisgICAg
QVNTRVJUKCFwcm90b3R5cGUudjhWYWx1ZSgpLklzRW1wdHkoKSAmJiBwcm90b3R5cGUudjhWYWx1
ZSgpLT5Jc09iamVjdCgpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlclZhbHVl
ID0gdG9WOChjb25zdHJ1Y3Rvciwgc3RhdGUtPmNvbnRleHQoKS0+R2xvYmFsKCksIHN0YXRlLT5j
b250ZXh0KCktPkdldElzb2xhdGUoKSk7CisgICAgaWYgKHdyYXBwZXJWYWx1ZS5Jc0VtcHR5KCkg
fHwgIXdyYXBwZXJWYWx1ZS0+SXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiB3cmFwcGVyID0gdjg6OkhhbmRsZTx2ODo6RnVuY3Rp
b24+OjpDYXN0KHdyYXBwZXJWYWx1ZSk7CisgICAgLy8gLSBPYmplY3Q6OkZvcmNlU2V0KCkgbm9y
IE9iamVjdDo6U2V0QWNjZXNzb3IgRG9lc24ndCB3b3JrIGFnYWluc3QgdGhlICJwcm90b3R5cGUi
IHByb3BlcnR5IG9mIGZ1bmN0aW9uIG9iamVjdHMuCisgICAgLy8gLSBTZXQoKS1pbmcgaGVyZSBp
cyBzYWZlIGJlY2F1c2UKKyAgICAvLyAgIC0gSG9va2luZyBPYmplY3QucHJvdG90eXBlJ3MgZGVm
aW5lUHJvcGVydHkoKSB3aXRoICJwcm90b3R5cGUiIG9yICJjb25zdHJ1Y3RvciIgYWxzbyBkb2Vz
bid0IGFmZmVjdCBvbiB0aGVzZSBwcm9wZXJ0aWVzIG9mIGZ1bmN0aW9uIG9iamVjdHMgYW5kCisg
ICAgLy8gICAtIFVzaW5nIFNldCgpIGlzIG9rYXkgYmVjYXVlcyBlYWNoIGZ1bmN0aW9uIGhhcyAi
cHJvdG90eXBlIiBwcm9wZXJ0eSBmcm9tIHN0YXJ0IGFuZCBPYmplY3RzLnByb3RvdHlwZSBjYW5u
b3QgaW50ZXJjZXB0IHRoZSBwcm9wZXJ0eSBhY2Nlc3MuCisgICAgdjg6OkhhbmRsZTx2ODo6U3Ry
aW5nPiBwcm90b3R5cGVLZXkgPSB2OFN0cmluZygicHJvdG90eXBlIiwgc3RhdGUtPmNvbnRleHQo
KS0+R2V0SXNvbGF0ZSgpKTsKKyAgICBBU1NFUlQod3JhcHBlci0+SGFzT3duUHJvcGVydHkocHJv
dG90eXBlS2V5KSk7CisgICAgd3JhcHBlci0+U2V0KHByb3RvdHlwZUtleSwgcHJvdG90eXBlLnY4
VmFsdWUoKSwgdjg6OlJlYWRPbmx5KTsKKworICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gY29u
c3RydWN0b3JLZXkgPSB2OFN0cmluZygiY29uc3RydWN0b3IiLCBzdGF0ZS0+Y29udGV4dCgpLT5H
ZXRJc29sYXRlKCkpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gcHJvdG90eXBlT2JqZWN0
ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChwcm90b3R5cGUudjhWYWx1ZSgpKTsKKyAg
ICBBU1NFUlQoIXByb3RvdHlwZU9iamVjdC0+SGFzT3duUHJvcGVydHkoY29uc3RydWN0b3JLZXkp
KTsKKyAgICBwcm90b3R5cGVPYmplY3QtPkZvcmNlU2V0KGNvbnN0cnVjdG9yS2V5LCB3cmFwcGVy
LCB2ODo6UmVhZE9ubHkpOworICAgIHJldHVybiB0cnVlOworfQorCisvLyBTZWUgRklYTUUgb24g
dGhlIGNhbGxlciBzaWRlIGNvbW1lbnQuCitzdGF0aWMgYm9vbCBoYXNOb0J1aWx0aW5zSW5Qcm90
b3R5cGUodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBodG1sUHJvdG90eXBlLCB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gY2hhaW4pCit7CisgICAgd2hpbGUgKCFjaGFpbi5Jc0VtcHR5KCkpIHsKKyAgICAg
ICAgaWYgKGNoYWluID09IGh0bWxQcm90b3R5cGUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgaWYgKCFjaGFpbi0+SXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgLy8gVGhlIGludGVybmFsIGZpZWxkIGNvdW50IGluZGljYXRlcyB0aGUgb2Jq
ZWN0IG1pZ2h0IGJlIGEgbmF0aXZlIGJhY2tlZCwgYnVpbHQtaW4gb2JqZWN0LgorICAgICAgICBp
ZiAodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChjaGFpbiktPkludGVybmFsRmllbGRDb3Vu
dCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjaGFpbiA9IHY4OjpIYW5k
bGU8djg6Ok9iamVjdD46OkNhc3QoY2hhaW4pLT5HZXRQcm90b3R5cGUoKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQ3VzdG9tRWxlbWVudEhlbHBlcnM6OmlzVmFsaWRQ
cm90b3R5cGVQYXJhbWV0ZXIoY29uc3QgU2NyaXB0VmFsdWUmIHByb3RvdHlwZSwgU2NyaXB0U3Rh
dGUqIHN0YXRlKQoreworICAgIGlmIChwcm90b3R5cGUudjhWYWx1ZSgpLklzRW1wdHkoKSB8fCAh
cHJvdG90eXBlLnY4VmFsdWUoKS0+SXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gZG9jdW1lbnQucmVnaXN0ZXIoKSBzZXRzIHRoZSBjb25zdHJ1Y3RvciBwcm9wZXJ0
eSwgc28gdGhlIHByb3RvdHlwZSBzaG91bGRuJ3QgaGF2ZSBvbmUuCisgICAgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBwcm90b3R5cGVPYmplY3QgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0
KHByb3RvdHlwZS52OFZhbHVlKCkpOworICAgIGlmIChwcm90b3R5cGVPYmplY3QtPkhhc093blBy
b3BlcnR5KHY4U3RyaW5nKCJjb25zdHJ1Y3RvciIsIHN0YXRlLT5jb250ZXh0KCktPkdldElzb2xh
dGUoKSkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgVjhQZXJDb250ZXh0RGF0YSogcGVy
Q29udGV4dERhdGEgPSBWOFBlckNvbnRleHREYXRhOjpmcm9tKHN0YXRlLT5jb250ZXh0KCkpOwor
ICAgIC8vCisgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTA0MzYKKyAgICAvLyAgIGRvY3VtZW50LnJlZ2lzdGVyKCkgc2hvdWxkIGFsbG93IGFy
Yml0cmFyeSBIVE1MRWxlbWVudCBzdWJjbGFzc3Nlcy4KKyAgICAvLyAgIEN1cnJlbnRseSBpdCBz
dXBwb3J0cyBjdXN0b20gZWxlbWVudHMgd2hpY2ggYXJlCisgICAgLy8gICAtIGRpcmVjdCBzdWJj
bGFzc2VzIG9mIEhUTUxFbGVtZW50IG9yCisgICAgLy8gICAtIHN1YmNsYXNzZXMgb2Ygb3RoZXIg
Y3VzdG9tIGVsZW1lbnRzCisgICAgLy8KKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGh0bWxD
b25zdHJ1Y3RvciA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QocGVyQ29udGV4dERhdGEt
PmNvbnN0cnVjdG9yRm9yVHlwZSgmVjhIVE1MRWxlbWVudDo6aW5mbykpOworICAgIGlmIChodG1s
Q29uc3RydWN0b3IuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBodG1sUHJvdG90eXBlID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6
Q2FzdChodG1sQ29uc3RydWN0b3ItPkdldCh2OFN0cmluZygicHJvdG90eXBlIiwgc3RhdGUtPmNv
bnRleHQoKS0+R2V0SXNvbGF0ZSgpKSkpOworICAgIGlmIChodG1sUHJvdG90eXBlLklzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghaGFzTm9CdWlsdGluc0luUHJvdG90
eXBlKGh0bWxQcm90b3R5cGUsIHByb3RvdHlwZU9iamVjdCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDdXN0b21FbGVtZW50SGVscGVyczo6aXNG
ZWF0dXJlQWxsb3dlZChTY3JpcHRTdGF0ZSogc3RhdGUpCit7CisgICAgcmV0dXJuIGlzRmVhdHVy
ZUFsbG93ZWQoc3RhdGUtPmNvbnRleHQoKSk7Cit9CisKK2Jvb2wgQ3VzdG9tRWxlbWVudEhlbHBl
cnM6OmlzRmVhdHVyZUFsbG93ZWQodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCkKK3sK
KyAgICBpZiAoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCA9IERPTVdyYXBwZXJXb3JsZDo6Z2V0V29y
bGQoY29udGV4dCkpCisgICAgICAgIHJldHVybiB3b3JsZC0+aXNNYWluV29ybGQoKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworCisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvQ3VzdG9tRWxlbWVudEhlbHBlcnMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDhkMWJjYmMxODk1Njk1ZGRhYWJk
YWQwZmJmM2Y4YjlkMzFhYmJhNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJzLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
Q3VzdG9tRWxlbWVudEhlbHBlcnNfaAorI2RlZmluZSBDdXN0b21FbGVtZW50SGVscGVyc19oCisK
KyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKworY2xh
c3MgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOworY2xhc3MgU2NyaXB0U3RhdGU7CisKK2NsYXNz
IEN1c3RvbUVsZW1lbnRIZWxwZXJzIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFs
aXplQ29uc3RydWN0b3JXcmFwcGVyKEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciosIGNvbnN0IFNj
cmlwdFZhbHVlJiBwcm90b3R5cGUsIFNjcmlwdFN0YXRlKik7CisgICAgc3RhdGljIGJvb2wgaXNW
YWxpZFByb3RvdHlwZVBhcmFtZXRlcihjb25zdCBTY3JpcHRWYWx1ZSYsIFNjcmlwdFN0YXRlKik7
CisgICAgc3RhdGljIGJvb2wgaXNGZWF0dXJlQWxsb3dlZChTY3JpcHRTdGF0ZSopOworCisgICAg
c3RhdGljIGJvb2wgaXNGZWF0dXJlQWxsb3dlZCh2ODo6SGFuZGxlPHY4OjpDb250ZXh0Pik7Cit9
OworCisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gQ3VzdG9tRWxlbWVudEhlbHBlcnNfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBZGFwdG9yRnVuY3Rpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBZGFwdG9yRnVuY3Rpb24uY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJi
YzFkMzI3NGZjN2Q4OWYxZGE2MzRhZGE3NzliYmM2ZTQ2MmVjZGQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5jcHAKQEAgLTAs
MCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWOEFkYXB0b3JGdW5jdGlv
bi5oIgorCisjaW5jbHVkZSAiVjhQZXJJc29sYXRlRGF0YS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworV3JhcHBlclR5cGVJbmZvIFY4QWRhcHRvckZ1bmN0aW9uOjppbmZvID0geyBWOEFkYXB0
b3JGdW5jdGlvbjo6Z2V0VGVtcGxhdGUsIDAsIDAsIDAsIDAsIDAsIDAsIFdyYXBwZXJUeXBlT2Jq
ZWN0UHJvdG90eXBlIH07CisKK3Y4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBW
OEFkYXB0b3JGdW5jdGlvbjo6Z2V0VGVtcGxhdGUodjg6Oklzb2xhdGUqIGlzb2xhdGUpCit7Cisg
ICAgQVNTRVJUKGlzb2xhdGUpOworICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklz
b2xhdGVEYXRhOjpmcm9tKGlzb2xhdGUpOworICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRl
TWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8p
OworICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CisgICAgLy8gVGhlIGxpZmV0aW1lIGlzIG9mIG5ld1Rl
bXBsYXRlIGlzIGRlbGVnYXRlZCB0byB0aGUgVGVtcGxhdGVNYXAgdGh1cyB0aGlzIHdvbid0IGJl
IGxlYWtlZC4KKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gbmV3VGVt
cGxhdGUgPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT46Ok5ldyh2ODo6RnVu
Y3Rpb25UZW1wbGF0ZTo6TmV3KCkpOworICAgIGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuYWRkKCZp
bmZvLCBjb25maWd1cmVUZW1wbGF0ZShuZXdUZW1wbGF0ZSkpOworICAgIHJldHVybiBuZXdUZW1w
bGF0ZTsKK30KKwordjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4QWRhcHRv
ckZ1bmN0aW9uOjpjb25maWd1cmVUZW1wbGF0ZSh2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4gZnVuY3Rpb25UZW1wbGF0ZSkKK3sKKyAgICBmdW5jdGlvblRlbXBsYXRlLT5TZXRD
YWxsSGFuZGxlcigmVjhBZGFwdG9yRnVuY3Rpb246Omludm9jYXRpb25DYWxsYmFjayk7CisgICAg
cmV0dXJuIGZ1bmN0aW9uVGVtcGxhdGU7Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEFk
YXB0b3JGdW5jdGlvbjo6aW52b2NhdGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MpCit7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVkID0gdjg6OkhhbmRsZTx2
ODo6T2JqZWN0Pjo6Q2FzdChhcmdzLkNhbGxlZSgpLT5HZXRIaWRkZW5WYWx1ZShWOEhpZGRlblBy
b3BlcnR5TmFtZTo6YWRhcHRvckZ1bmN0aW9uUGVlcigpKSk7CisgICAgLy8gRklYTUU6IFRoaXMg
Y2FuIGJlIGZhc3RlciBpZiB3ZSBjYW4gYWNjZXNzIHVuZGVybHlpbmcgbmF0aXZlIGNhbGxiYWNr
IGRpcmVjdGx5LgorICAgIC8vIFdlIHdvbid0IG5lZWQgdGhpcyBvbmNlIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgxMzggaXMgYWRkcmVzc2VkLgorICAgIFZlY3Rv
cjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiBhcmdBcnJheShhcmdzLkxlbmd0aCgpKTsKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IGFyZ3MuTGVuZ3RoKCk7ICsraSkKKyAgICAgICAgYXJnQXJyYXku
YXBwZW5kKGFyZ3NbaV0pOworICAgIGlmIChhcmdzLklzQ29uc3RydWN0Q2FsbCgpKQorICAgICAg
ICByZXR1cm4gd3JhcHBlZC0+Q2FsbEFzQ29uc3RydWN0b3IoYXJnQXJyYXkuc2l6ZSgpLCBhcmdB
cnJheS5kYXRhKCkpOworICAgIHJldHVybiB3cmFwcGVkLT5DYWxsQXNGdW5jdGlvbihhcmdzLlRo
aXMoKSwgYXJnQXJyYXkuc2l6ZSgpLCBhcmdBcnJheS5kYXRhKCkpOworfQorCit2ODo6SGFuZGxl
PHY4OjpGdW5jdGlvbj4gVjhBZGFwdG9yRnVuY3Rpb246OndyYXAodjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBvYmplY3QsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgdjg6Oklzb2xhdGUqIGlzb2xh
dGUpCit7CisgICAgaWYgKG9iamVjdC5Jc0VtcHR5KCkgfHwgIW9iamVjdC0+SXNPYmplY3QoKSkK
KyAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPigpOworICAgIHY4OjpIYW5k
bGU8djg6OkZ1bmN0aW9uPiBhZGFwdG9yID0gdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+OjpDYXN0
KGdldFRlbXBsYXRlKGlzb2xhdGUpLT5HZXRGdW5jdGlvbigpKTsKKyAgICBpZiAoYWRhcHRvci5J
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4oKTsKKyAg
ICBhZGFwdG9yLT5TZXROYW1lKHY4U3RyaW5nKG5hbWUuc3RyaW5nKCksIGlzb2xhdGUpKTsKKyAg
ICBhZGFwdG9yLT5TZXRIaWRkZW5WYWx1ZShWOEhpZGRlblByb3BlcnR5TmFtZTo6YWRhcHRvckZ1
bmN0aW9uUGVlcigpLCBvYmplY3QpOworICAgIG9iamVjdC0+U2V0SGlkZGVuVmFsdWUoVjhIaWRk
ZW5Qcm9wZXJ0eU5hbWU6OmFkYXB0b3JGdW5jdGlvblBlZXIoKSwgYWRhcHRvcik7CisgICAgcmV0
dXJuIGFkYXB0b3I7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShDVVNUT01fRUxFTUVOVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOEFkYXB0b3JGdW5jdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhB
ZGFwdG9yRnVuY3Rpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lM2Q2YmI1MWY0NDBhNGM3NzI0YWJjZTNkZTkz
MDY4ZGFlOGMzYTU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhBZGFwdG9yRnVuY3Rpb24uaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBWOEFkYXB0b3JG
dW5jdGlvbl9oCisjZGVmaW5lIFY4QWRhcHRvckZ1bmN0aW9uX2gKKworI2luY2x1ZGUgIlY4Qmlu
ZGluZy5oIgorI2luY2x1ZGUgIlY4SGlkZGVuUHJvcGVydHlOYW1lLmgiCisjaW5jbHVkZSAiV3Jh
cHBlclR5cGVJbmZvLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworI2lmIEVOQUJM
RShDVVNUT01fRUxFTUVOVFMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8KKy8vIEZJWE1F
KGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgxMzgpOgorLy8gVjhB
ZGFwdG9yRnVuY3Rpb24gY2xhc3MgYW5kIFY4V3JhcEFzRnVuY3Rpb24gSURMIGF0dHJpYnV0ZSBh
cmUgbmVlZGVkIGZvciB0d28gcmVhc29uczoKKy8vIC0gMSkgVjggZG9lc24ndCBhbGxvdyBleHBh
bmRpbmcgdGhlIGludGVybmFsIGZpZWxkIG9mIGZ1bmN0aW9uIG9iamVjdHMuIGh0dHBzOi8vY29k
ZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD04MzcKKy8vICAgICAgV2ViS2l0IG5l
ZWQgaXQgdG8gYXNzb2NpYXRlIGVhY2ggd3JhcHBlciB0byBpdHMgYmFja2luZyBDKysgb2JqZWN0
LiBXZSBzdG9yZSBpdCBpbiBhIGhpZGRlbiBwcm9wZXJ0eSBvZiB0aGUgd3JhcHBlZCBvYmplY3Qu
CisvLyAtIDIpIEJpbmRpbmcgY29kZWJhc2UgYXNzdW1lcyBldmVyeSB3cmFwcGVyIG9iamVjdCBp
cyBjcmVhdGVkIHRocm91Z2ggT2JqZWN0VGVtcGxhdGU6Ok5ld0luc3RhbmNlKCksIG5vdCBGdW5j
dGlvblRlbXBsYXRlOjpHZXRGdW5jdGlvbigpLgorLy8gT25jZSAxKSBpcyBhZGRyZXNzc2VkLCB3
ZSBjb3VsZCBhdHRhY2sgMikgd2l0aCBpdC4gCisvLworY2xhc3MgVjhBZGFwdG9yRnVuY3Rpb24g
eworcHVibGljOgorICAgIHN0YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKKyAgICBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB1bndyYXAodjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+KTsK
KyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IHdyYXAodjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCB2ODo6SXNvbGF0ZSopOworICAgIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gZ2V0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4p
OworCisgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBnZXRU
ZW1wbGF0ZSh2ODo6SXNvbGF0ZSogPSAwKTsKKyAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IGNvbmZpZ3VyZVRlbXBsYXRlKHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPik7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBpbnZv
Y2F0aW9uQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYpOworfTsKKworaW5saW5lIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gVjhBZGFwdG9yRnVuY3Rpb246OnVud3JhcCh2ODo6SGFuZGxlPHY4
OjpGdW5jdGlvbj4gZnVuY3Rpb24pCit7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBw
ZWQgPSBmdW5jdGlvbi0+R2V0SGlkZGVuVmFsdWUoVjhIaWRkZW5Qcm9wZXJ0eU5hbWU6OmFkYXB0
b3JGdW5jdGlvblBlZXIoKSk7CisgICAgQVNTRVJUKCF3cmFwcGVkLklzRW1wdHkoKSk7CisgICAg
QVNTRVJUKHdyYXBwZWQtPklzT2JqZWN0KCkpOworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+OjpDYXN0KHdyYXBwZWQpOworfQorCitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6RnVuY3Rp
b24+IFY4QWRhcHRvckZ1bmN0aW9uOjpnZXQodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3Qp
Cit7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFkYXB0b3JGdW5jdGlvbiA9IG9iamVjdC0+
R2V0SGlkZGVuVmFsdWUoVjhIaWRkZW5Qcm9wZXJ0eU5hbWU6OmFkYXB0b3JGdW5jdGlvblBlZXIo
KSk7CisgICAgQVNTRVJUKCFhZGFwdG9yRnVuY3Rpb24uSXNFbXB0eSgpKTsKKyAgICBBU1NFUlQo
YWRhcHRvckZ1bmN0aW9uLT5Jc0Z1bmN0aW9uKCkpOworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4
OjpGdW5jdGlvbj46OkNhc3QoYWRhcHRvckZ1bmN0aW9uKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKyNlbmRpZiAvLyBW
OEFkYXB0b3JGdW5jdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOERPTUNvbmZpZ3VyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhE
T01Db25maWd1cmF0aW9uLmNwcAppbmRleCAwYmJhNmZjOTc5ZmNhMjljNmVjYThiODg2NGEyNDVl
YWJkYTU2YjMyLi45MGRmYjQxODAyZGU4MGI3YTY4ZmU3MjcwZDViYjBhZmI1Mjg0MWMzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTUNvbmZpZ3VyYXRpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NQ29uZmlndXJhdGlvbi5jcHAK
QEAgLTMzLDYgKzMzLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjb25zdCBpbnQgcHJv
dG90eXBlSW50ZXJuYWxGaWVsZGNvdW50ID0gMTsKKwogdm9pZCBWOERPTUNvbmZpZ3VyYXRpb246
OmJhdGNoQ29uZmlndXJlQXR0cmlidXRlcyh2ODo6SGFuZGxlPHY4OjpPYmplY3RUZW1wbGF0ZT4g
aW5zdGFuY2UsIHY4OjpIYW5kbGU8djg6Ok9iamVjdFRlbXBsYXRlPiBwcm90b3R5cGUsIGNvbnN0
IEJhdGNoZWRBdHRyaWJ1dGUqIGF0dHJpYnV0ZXMsIHNpemVfdCBhdHRyaWJ1dGVDb3VudCwgdjg6
Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdHRyaWJ1
dGVDb3VudDsgKytpKQpAQCAtNjAsOCArNjIsMTUgQEAgdjg6OkxvY2FsPHY4OjpTaWduYXR1cmU+
IFY4RE9NQ29uZmlndXJhdGlvbjo6Y29uZmlndXJlVGVtcGxhdGUodjg6OlBlcnNpc3RlbnQ8djgK
ICAgICBmdW5jdGlvbkRlc2NyaXB0b3ItPlNldENsYXNzTmFtZSh2ODo6U3RyaW5nOjpOZXdTeW1i
b2woaW50ZXJmYWNlTmFtZSkpOwogICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0VGVtcGxhdGU+IGlu
c3RhbmNlID0gZnVuY3Rpb25EZXNjcmlwdG9yLT5JbnN0YW5jZVRlbXBsYXRlKCk7CiAgICAgaW5z
dGFuY2UtPlNldEludGVybmFsRmllbGRDb3VudChmaWVsZENvdW50KTsKLSAgICBpZiAoIXBhcmVu
dENsYXNzLklzRW1wdHkoKSkKKyAgICBpZiAoIXBhcmVudENsYXNzLklzRW1wdHkoKSkgewogICAg
ICAgICBmdW5jdGlvbkRlc2NyaXB0b3ItPkluaGVyaXQocGFyZW50Q2xhc3MpOworICAgICAgICAv
LyBNYXJrcyB0aGUgcHJvdG90eXBlIG9iamVjdCBhcyBvbmUgb2YgbmF0aXZlLWJhY2tlZCBvYmpl
Y3RzLgorICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZCBzaW5jZSBidWcgMTEwNDM2IGFza3MgV2Vi
S2l0IHRvIHRlbGwgbmF0aXZlLWluaXRpYXRlZCBwcm90b3R5cGVzIGZyb20gcHVyZS1KUyBvbmVz
LgorICAgICAgICAvLyBUaGlzIGRvZXNuJ3QgbWFyayBraW5kcyAicm9vdCIgY2xhc3NlcyBsaWtl
IE5vZGUsIHdoZXJlIHNldHRpbmcgdGhpcyBjaGFuZ2VzIHByb3RvdHlwZSBjaGFpbiBzdHJ1Y3R1
cmUuCisgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0VGVtcGxhdGU+IHByb3RvdHlwZSA9IGZ1
bmN0aW9uRGVzY3JpcHRvci0+UHJvdG90eXBlVGVtcGxhdGUoKTsKKyAgICAgICAgcHJvdG90eXBl
LT5TZXRJbnRlcm5hbEZpZWxkQ291bnQocHJvdG90eXBlSW50ZXJuYWxGaWVsZGNvdW50KTsKKyAg
ICB9CisKICAgICBpZiAoYXR0cmlidXRlQ291bnQpCiAgICAgICAgIGJhdGNoQ29uZmlndXJlQXR0
cmlidXRlcyhpbnN0YW5jZSwgZnVuY3Rpb25EZXNjcmlwdG9yLT5Qcm90b3R5cGVUZW1wbGF0ZSgp
LCBhdHRyaWJ1dGVzLCBhdHRyaWJ1dGVDb3VudCwgaXNvbGF0ZSk7CiAgICAgdjg6OkxvY2FsPHY4
OjpTaWduYXR1cmU+IGRlZmF1bHRTaWduYXR1cmUgPSB2ODo6U2lnbmF0dXJlOjpOZXcoZnVuY3Rp
b25EZXNjcmlwdG9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
RE9NV3JhcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIu
Y3BwCmluZGV4IDM0Mjc3OGFjZjc5NDZhYTBkY2I0Yzc4OWFiMGRiNzAwOWIwNGM4YjMuLjRkOGMy
MjZmM2UyNzJmMGUzNTk2MjFlOGQ0MDY4YzMxOTRiNTNmYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgogCisjaW5jbHVkZSAiVjhBZGFw
dG9yRnVuY3Rpb24uaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOERPTVdp
bmRvdy5oIgogI2luY2x1ZGUgIlY4SFRNTENvbGxlY3Rpb24uaCIKQEAgLTEzNyw0ICsxMzgsMjUg
QEAgYm9vbCBWOERPTVdyYXBwZXI6OmlzV3JhcHBlck9mVHlwZSh2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdmFsdWUsIFdyYXBwZXJUeXBlSW5mbyoKICAgICByZXR1cm4gdHlwZUluZm8gPT0gdHlwZTsK
IH0KIAorI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKK3Y4OjpIYW5kbGU8djg6OkZ1bmN0
aW9uPiBWOERPTVdyYXBwZXI6OnRvRnVuY3Rpb24odjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9iamVj
dCkKK3sKKyAgICByZXR1cm4gVjhBZGFwdG9yRnVuY3Rpb246OmdldCh2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+OjpDYXN0KG9iamVjdCkpOworfQorCit2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gVjhE
T01XcmFwcGVyOjp0b0Z1bmN0aW9uKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0LCBjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWUsIHY4OjpJc29sYXRlKiBpc29sYXRlKQoreworICAgIHJldHVy
biBWOEFkYXB0b3JGdW5jdGlvbjo6d3JhcChvYmplY3QsIG5hbWUsIGlzb2xhdGUpOworfQorCit2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4RE9NV3JhcHBlcjo6ZnJvbUZ1bmN0aW9uKHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gb2JqZWN0KQoreworICAgIGlmICghb2JqZWN0LT5Jc0Z1bmN0aW9uKCkp
CisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgcmV0dXJuIFY4QWRhcHRvckZ1bmN0aW9uOjp1
bndyYXAodjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+OjpDYXN0KG9iamVjdCkpOworfQorCisjZW5k
aWYgLy8gRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKwogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKaW5kZXggMzlkY2U0N2Yz
Zjc1NzI4ZGU3ZGIyOTc2Zjg3NGNiZTdhYjEyY2FhNC4uMTg0NDFhOWUxMmZlYzJkZWU5ODkyNDlj
YTM4NDFlYzUzNmFkYTEwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhET01XcmFwcGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFw
cGVyLmgKQEAgLTYyLDYgKzYyLDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBz
dGF0aWMgYm9vbCBpc0RPTVdyYXBwZXIodjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKICAgICAgICAg
c3RhdGljIGJvb2wgaXNXcmFwcGVyT2ZUeXBlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiwgV3JhcHBl
clR5cGVJbmZvKik7CisKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorICAgICAgICAvLyBV
c2VkIGZvciBWOFdyYXBBc0Z1bmN0aW9uLCB3aGljaCBpcyB1c2VkIG9ubHkgYnkgQ1VTVE9NX0VM
RU1FTlRTCisgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gdG9GdW5jdGlv
bih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOworICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
RnVuY3Rpb24+IHRvRnVuY3Rpb24odjg6OkhhbmRsZTx2ODo6T2JqZWN0PiwgY29uc3QgQXRvbWlj
U3RyaW5nJiBuYW1lLCB2ODo6SXNvbGF0ZSopOworICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBmcm9tRnVuY3Rpb24odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pik7CisjZW5kaWYg
Ly8gRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKICAgICB9OwogCiAgICAgaW5saW5lIHZvaWQgVjhE
T01XcmFwcGVyOjpzZXROYXRpdmVJbmZvKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciwg
V3JhcHBlclR5cGVJbmZvKiB0eXBlLCB2b2lkKiBvYmplY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4SFRNTEN1c3RvbUVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY0N2Yz
NTk2MzY4Zjc5YTgxMWUxODhlZjJhMDU4NGRiZWE1YTAwMGIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50LmNwcApAQCAtMCww
ICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5U
UykKKworI2luY2x1ZGUgIlY4SFRNTEN1c3RvbUVsZW1lbnQuaCIKKworI2luY2x1ZGUgIkN1c3Rv
bUVsZW1lbnRIZWxwZXJzLmgiCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmgiCisj
aW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJWOEN1c3RvbUVsZW1lbnRDb25zdHJ1
Y3Rvci5oIgorI2luY2x1ZGUgIlY4SFRNTFNwYW5FbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworLy8gRklYTUU6IEVhY2ggY3VzdG9tIGVsZW1lbnRzIHNob3VsZCBoYXZlIGl0cyBv
d24gR2V0VGVtcGxhdGUgbWV0aG9kIHNvIHRoYXQgaXQgY2FuIGJlIGRlcml2ZWQgZnJvbSBkaWZm
ZXJlbnQgc3VwZXIgZWxlbWVudC4KK1dyYXBwZXJUeXBlSW5mbyBWOEhUTUxDdXN0b21FbGVtZW50
OjppbmZvID0geyAmVjhIVE1MRWxlbWVudDo6R2V0VGVtcGxhdGUsIFY4SFRNTEVsZW1lbnQ6OmRl
cmVmT2JqZWN0LCAwLCBWOEhUTUxFbGVtZW50Ojp0b0V2ZW50VGFyZ2V0LCAwLCAwLCAmVjhIVE1M
RWxlbWVudDo6aW5mbywgV3JhcHBlclR5cGVPYmplY3RQcm90b3R5cGUgfTsKKwordjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBWOEhUTUxDdXN0b21FbGVtZW50OjpjcmVhdGVXcmFwcGVyKFBhc3NSZWZQ
dHI8SFRNTEVsZW1lbnQ+IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250
ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3sKKyAgICBBU1NFUlQoaW1wbCk7CisKKyAgICBS
ZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiBjb25zdHJ1Y3RvciA9IEN1c3RvbUVsZW1l
bnRSZWdpc3RyeTo6Y29uc3RydWN0b3JPZihpbXBsLmdldCgpKTsKKyAgICBpZiAoIWNvbnN0cnVj
dG9yKSB7CisgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyVmFsdWUgPSBXZWJD
b3JlOjp0b1Y4KHRvSFRNTFVua25vd25FbGVtZW50KGltcGwuZ2V0KCkpLCBjcmVhdGlvbkNvbnRl
eHQsIGlzb2xhdGUpOworICAgICAgICBpZiAoIXdyYXBwZXJWYWx1ZS5Jc0VtcHR5KCkgJiYgd3Jh
cHBlclZhbHVlLT5Jc09iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD46OkNhc3Qod3JhcHBlclZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4oKTsKKyAgICB9CisKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBw
ZXIgPSBWOERPTVdyYXBwZXI6OmNyZWF0ZVdyYXBwZXIoY3JlYXRpb25Db250ZXh0LCAmaW5mbywg
aW1wbC5nZXQoKSwgaXNvbGF0ZSk7CisgICAgaWYgKHdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gd3JhcHBlcjsKKworICAgIC8vIFRoZSBjb25zdHJ1Y3RvciBhbmQgcmVnaXN0ZXJl
ZCBsaWZlY3ljbGUgY2FsbGJhY2tzIHNob3VsZCBiZSB2aXNpYmxlIG9ubHkgZnJvbSBtYWluIHdv
cmxkLgorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZG4ndCBiZSBuZWVkZWQgb25jZSBlYWNoIGN1
c3RvbSBlbGVtZW50IGhhcyBpdHMgb3duIEZ1bmN0aW9uVGVtcGxhdGUKKyAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4MTM4CisgICAgaWYgKEN1c3RvbUVs
ZW1lbnRIZWxwZXJzOjppc0ZlYXR1cmVBbGxvd2VkKGNyZWF0aW9uQ29udGV4dC0+Q3JlYXRpb25D
b250ZXh0KCkpKSB7CisgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyVmFsdWUg
PSBXZWJDb3JlOjp0b1Y4KGNvbnN0cnVjdG9yLmdldCgpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xh
dGUpOworICAgICAgICBpZiAod3JhcHBlclZhbHVlLklzRW1wdHkoKSB8fCAhd3JhcHBlclZhbHVl
LT5Jc09iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4o
KTsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjb25zdHJ1Y3RvcldhcHBlciA9IHY4
OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qod3JhcHBlclZhbHVlKTsKKyAgICAgICAgd3JhcHBl
ci0+U2V0UHJvdG90eXBlKGNvbnN0cnVjdG9yV2FwcGVyLT5HZXQodjhTdHJpbmcoInByb3RvdHlw
ZSIsIGlzb2xhdGUpKSk7CisgICAgfQorCisgICAgVjhET01XcmFwcGVyOjphc3NvY2lhdGVPYmpl
Y3RXaXRoV3JhcHBlcihpbXBsLCAmaW5mbywgd3JhcHBlciwgaXNvbGF0ZSwgV3JhcHBlckNvbmZp
Z3VyYXRpb246OkRlcGVuZGVudCk7CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZjM4MGEwMTdhZjFlZDA1YzUyY2FhYTNiZDhhZTVkMWI1MTc5N2NhYwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SFRNTEN1c3RvbUVsZW1lbnQu
aApAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBWOEhUTUxDdXN0b21FbGVtZW50X2gKKyNkZWZpbmUg
VjhIVE1MQ3VzdG9tRWxlbWVudF9oCisKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRl
ICJWOERPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJWOEhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAi
VjhIVE1MVW5rbm93bkVsZW1lbnQuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEhUTUxFbGVtZW50OworCisjaWYgRU5BQkxFKENV
U1RPTV9FTEVNRU5UUykKKworY2xhc3MgVjhIVE1MQ3VzdG9tRWxlbWVudCB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFdyYXBwZXJUeXBlSW5mbyBpbmZvOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdG9WOChIVE1MRWxlbWVudCosIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRp
b25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSogPSAwKTsK
KyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKEhUTUxFbGVtZW50Kiwgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7CisKK3By
aXZhdGU6CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRlV3JhcHBlcihQ
YXNzUmVmUHRyPEhUTUxFbGVtZW50Piwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Piwgdjg6Oklzb2xh
dGUqKTsKK307CisKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MQ3VzdG9tRWxl
bWVudDo6dG9WOChIVE1MRWxlbWVudCogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVh
dGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQoreworICAgIGlmIChVTkxJS0VMWSgh
aW1wbCkpCisgICAgICAgIHJldHVybiB2OE51bGxXaXRoQ2hlY2soaXNvbGF0ZSk7CisgICAgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyKGlt
cGwsIGlzb2xhdGUpOworICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biB3cmFwcGVyOworICAgIHJldHVybiBWOEhUTUxDdXN0b21FbGVtZW50Ojp3cmFwKGltcGwsIGNy
ZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7Cit9CisKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IFY4SFRNTEN1c3RvbUVsZW1lbnQ6OndyYXAoSFRNTEVsZW1lbnQqIGltcGwsIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3sK
KyAgICBBU1NFUlQoaW1wbCk7CisgICAgQVNTRVJUKERPTURhdGFTdG9yZTo6Z2V0V3JhcHBlcihp
bXBsLCBpc29sYXRlKS5Jc0VtcHR5KCkpOworICAgIHJldHVybiBWOEhUTUxDdXN0b21FbGVtZW50
OjpjcmVhdGVXcmFwcGVyKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7Cit9CisKKyNl
bHNlIC8vIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKK2NsYXNzIFY4SFRNTEN1c3RvbUVsZW1l
bnQgeworcHVibGljOgorICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoSFRN
TEVsZW1lbnQqLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqID0gMCk7Cit9OworCitpbmxpbmUgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBIVE1MQ3VzdG9tRWxlbWVudDo6d3JhcChIVE1MRWxlbWVudCog
aW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRl
KiBpc29sYXRlKQoreworICAgIHJldHVybiB3cmFwKHRvSFRNTFVua25vd25FbGVtZW50KGltcGwp
LCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKENVU1RP
TV9FTEVNRU5UUykKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVjhIVE1M
Q3VzdG9tRWxlbWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OEhpZGRlblByb3BlcnR5TmFtZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIaWRk
ZW5Qcm9wZXJ0eU5hbWUuaAppbmRleCA1MDhiZGQzNjI4MDZhNzEwNDZjZDNkNjJmMDM1YWNlMmIy
MjYxYWJjLi4wM2NkNTdmZDg5MGYzMTFlNDI5NTQ1ODBkNDYxYTE2ZjhlYjQ0OGRkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmgKQEAg
LTQ1LDYgKzQ1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIFYoc2NyaXB0U3RhdGUpIFwK
ICAgICBWKHNsZWVwRnVuY3Rpb24pIFwKICAgICBWKHN0YXRlKSBcCisgICAgVihhZGFwdG9yRnVu
Y3Rpb25QZWVyKSBcCiAgICAgVih0b1N0cmluZ1N0cmluZykgXAogICAgIFYodHlwZWRBcnJheUhp
ZGRlbkNvcHlNZXRob2QpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvckN1c3RvbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21FbGVtZW50Q29uc3RydWN0b3JDdXN0b20u
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjM0Mzc0ZjY3Njg4MGM5Mjg1NGYyODg5NDZhNjM5MTUxYTBiM2IyMzUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhD
dXN0b21FbGVtZW50Q29uc3RydWN0b3JDdXN0b20uY3BwCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKiAK
KyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyogbWV0OgorKiAKKyogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
Kyogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKiBkaXN0cmlidXRpb24u
CisqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyogCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJW
OEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oIgorCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhIVE1MQ3Vz
dG9tRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Y4OjpIYW5kbGU8djg6OlZh
bHVlPiBWOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y2FsbEFzRnVuY3Rpb25DYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIGlmICghYXJncy5Jc0NvbnN0cnVjdENh
bGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCJET00gb2JqZWN0IGNvbnN0cnVj
dG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4iLCBhcmdzLkdldElzb2xhdGUoKSk7
CisgICAgaWYgKENvbnN0cnVjdG9yTW9kZTo6Y3VycmVudCgpID09IENvbnN0cnVjdG9yTW9kZTo6
V3JhcEV4aXN0aW5nT2JqZWN0KQorICAgICAgICByZXR1cm4gYXJncy5Ib2xkZXIoKTsKKworICAg
IEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciogaW1wbCA9IHRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkp
OworICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudCA9IGltcGwtPmNyZWF0ZUVsZW1lbnQo
KTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOworICAg
IHJldHVybiBWOEhUTUxDdXN0b21FbGVtZW50Ojp0b1Y4KGVsZW1lbnQuZ2V0KCksIGFyZ3MuSG9s
ZGVyKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40OWNjZjllYzdhZGJhNGM3YWFlZjdiNzAwNmMzZjQ1NzRlYjVjYTM1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5j
cHAKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShDVVNU
T01fRUxFTUVOVFMpCisKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaCIKKwor
I2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRIZWxwZXJzLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
KyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0
b3I+IEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlKFNjcmlwdFN0YXRlKiBzdGF0ZSwg
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFNjcmlwdFZhbHVlJiBwcm90b3R5cGUpCit7CisgICAgUmVmUHRy
PEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gY3JlYXRlZCA9IGFkb3B0UmVmKG5ldyBDdXN0b21F
bGVtZW50Q29uc3RydWN0b3IoZG9jdW1lbnQsIHRhZ05hbWUsIG5hbWUpKTsKKyAgICBpZiAoIUN1
c3RvbUVsZW1lbnRIZWxwZXJzOjppbml0aWFsaXplQ29uc3RydWN0b3JXcmFwcGVyKGNyZWF0ZWQu
Z2V0KCksIHByb3RvdHlwZSwgc3RhdGUpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4g
Y3JlYXRlZC5yZWxlYXNlKCk7Cit9CisKK0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Q3VzdG9t
RWxlbWVudENvbnN0cnVjdG9yKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgY29uc3QgU3RyaW5nJiBuYW1lKQorICAgIDogQ29udGV4dERlc3RydWN0aW9u
T2JzZXJ2ZXIoZG9jdW1lbnQpCisgICAgLCBtX3RhZ05hbWUodGFnTmFtZSkKKyAgICAsIG1fbmFt
ZShuYW1lKQoreworfQorCitDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6On5DdXN0b21FbGVtZW50
Q29uc3RydWN0b3IoKQoreworfQorCitQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBDdXN0b21FbGVt
ZW50Q29uc3RydWN0b3I6OmNyZWF0ZUVsZW1lbnQoKSBjb25zdAoreworICAgIGlmICghZG9jdW1l
bnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIEhUTUxFbGVtZW50OjpjcmVhdGUo
bV90YWdOYW1lLCBkb2N1bWVudCgpKTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKENVU1RP
TV9FTEVNRU5UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50
Q29uc3RydWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0
b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi41NzhlYjE3MTVjNmE2NTAyYjQ5MWNmZGNkZmExMDM5NjIzNjRiYmY3
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRDb25z
dHJ1Y3Rvci5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rv
cl9oCisjZGVmaW5lIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcl9oCisKKyNpZiBFTkFCTEUoQ1VT
VE9NX0VMRU1FTlRTKQorCisjaW5jbHVkZSAiQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIuaCIK
KyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKKyNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEhUTUxFbGVt
ZW50OworY2xhc3MgU2NyaXB0U3RhdGU7CitjbGFzcyBTY3JpcHRWYWx1ZTsKKworY2xhc3MgQ3Vz
dG9tRWxlbWVudENvbnN0cnVjdG9yIDogcHVibGljIFJlZkNvdW50ZWQ8Q3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yPiAsIHB1YmxpYyBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlciB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiBjcmVhdGUo
U2NyaXB0U3RhdGUqLCBEb2N1bWVudCosIGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBTdHJp
bmcmLCBjb25zdCBTY3JpcHRWYWx1ZSYpOworCisgICAgdmlydHVhbCB+Q3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yKCk7CisKKyAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxEb2N1bWVudCo+KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7IH0KKyAgICBj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKCkgY29uc3QgeyByZXR1cm4gbV90YWdOYW1lOyB9
CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9
CisKKyAgICBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBjcmVhdGVFbGVtZW50KCkgY29uc3Q7Cisg
ICAgCitwcml2YXRlOgorICAgIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvcihEb2N1bWVudCosIGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBTdHJpbmcmKTsKKworICAgIFF1YWxpZmllZE5hbWUg
bV90YWdOYW1lOworICAgIEF0b21pY1N0cmluZyBtX25hbWU7Cit9OworCit9CisKKyNlbmRpZiAv
LyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCisjZW5kaWYgLy8gQ3VzdG9tRWxlbWVudENvbnN0
cnVjdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50Q29u
c3RydWN0b3IuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rv
ci5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNDdjNTMwZjg3ZGVhZTY3ZmE1ZmRhMWUxMzliMDVjYjk4YTA3M2Iw
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50Q29u
c3RydWN0b3IuaWRsCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitbCisgICAgQ29uZGl0
aW9uYWw9Q1VTVE9NX0VMRU1FTlRTLAorICAgIFY4RW5hYmxlZEF0UnVudGltZT1jdXN0b21ET01F
bGVtZW50cywKKyAgICBWOFdyYXBBc0Z1bmN0aW9uLAorICAgIEN1c3RvbUNhbGwKK10gaW50ZXJm
YWNlIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciB7Cit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zODVlOTViN2U3ZTQ0ZmYxZjJm
MDRlM2EwZGU3YTQ2ZjE3ZTRmOTc2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5jcHAKQEAgLTAsMCArMSwxNzIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAg
ZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCisjaW5j
bHVkZSAiQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmgiCisKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50
Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50SGVscGVycy5oIgorI2luY2x1
ZGUgIkRpY3Rpb25hcnkuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkhUTUxF
bGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJs
ZWRGZWF0dXJlcy5oIgorI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CisKKyNpZiBFTkFCTEUo
U1ZHKQorI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjZW5kaWYKKworI2lmIEVOQUJMRShNQVRITUwp
CisjaW5jbHVkZSAiTWF0aE1MTmFtZXMuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0N1c3RvbUVsZW1lbnRSZWdpc3RyeTo6Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5KERvY3VtZW50
KiBkb2N1bWVudCkKKyAgICA6IENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyKGRvY3VtZW50KQor
eworfQorCitDdXN0b21FbGVtZW50UmVnaXN0cnk6On5DdXN0b21FbGVtZW50UmVnaXN0cnkoKQor
eworfQorCitQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gQ3VzdG9tRWxlbWVu
dFJlZ2lzdHJ5Ojpjb25zdHJ1Y3Rvck9mKEhUTUxFbGVtZW50KiBlbGVtZW50KQoreworICAgIFJl
ZlB0cjxDdXN0b21FbGVtZW50UmVnaXN0cnk+IHNlbGYgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5y
ZWdpc3RyeSgpOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
IHNlbGYtPmZpbmQoZWxlbWVudC0+dGFnUU5hbWUoKSk7Cit9CisKK2Jvb2wgQ3VzdG9tRWxlbWVu
dFJlZ2lzdHJ5Ojppc1ZhbGlkTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCit7CisgICAg
c2l6ZV90IGh5cGhlblBvc2l0aW9uID0gbmFtZS5maW5kKCctJyk7CisgICAgaWYgKGh5cGhlblBv
c2l0aW9uID09IG5vdEZvdW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKFZlY3RvcjxBdG9taWNTdHJpbmc+LCByZXNlcnZlZE5hbWVzLCAoKSk7Cisg
ICAgaWYgKHJlc2VydmVkTmFtZXMuaXNFbXB0eSgpKSB7CisjaWYgRU5BQkxFKE1BVEhNTCkKKyAg
ICAgICAgcmVzZXJ2ZWROYW1lcy5hcHBlbmQoTWF0aE1MTmFtZXM6OmFubm90YXRpb25feG1sVGFn
LmxvY2FsTmFtZSgpKTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKFNWRykKKyAgICAgICAgcmVzZXJ2
ZWROYW1lcy5hcHBlbmQoU1ZHTmFtZXM6OmNvbG9yX3Byb2ZpbGVUYWcubG9jYWxOYW1lKCkpOwor
ICAgICAgICByZXNlcnZlZE5hbWVzLmFwcGVuZChTVkdOYW1lczo6Zm9udF9mYWNlVGFnLmxvY2Fs
TmFtZSgpKTsKKyAgICAgICAgcmVzZXJ2ZWROYW1lcy5hcHBlbmQoU1ZHTmFtZXM6OmZvbnRfZmFj
ZV9zcmNUYWcubG9jYWxOYW1lKCkpOworICAgICAgICByZXNlcnZlZE5hbWVzLmFwcGVuZChTVkdO
YW1lczo6Zm9udF9mYWNlX3VyaVRhZy5sb2NhbE5hbWUoKSk7CisgICAgICAgIHJlc2VydmVkTmFt
ZXMuYXBwZW5kKFNWR05hbWVzOjpmb250X2ZhY2VfZm9ybWF0VGFnLmxvY2FsTmFtZSgpKTsKKyAg
ICAgICAgcmVzZXJ2ZWROYW1lcy5hcHBlbmQoU1ZHTmFtZXM6OmZvbnRfZmFjZV9uYW1lVGFnLmxv
Y2FsTmFtZSgpKTsKKyAgICAgICAgcmVzZXJ2ZWROYW1lcy5hcHBlbmQoU1ZHTmFtZXM6Om1pc3Np
bmdfZ2x5cGhUYWcubG9jYWxOYW1lKCkpOworI2VuZGlmCisgICAgfQorCisgICAgaWYgKG5vdEZv
dW5kICE9IHJlc2VydmVkTmFtZXMuZmluZChuYW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIERvY3VtZW50Ojppc1ZhbGlkTmFtZShuYW1lLnN0cmluZygpKTsKK30KKwor
UGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IEN1c3RvbUVsZW1lbnRSZWdpc3Ry
eTo6cmVnaXN0ZXJFbGVtZW50KFNjcmlwdFN0YXRlKiBzdGF0ZSwgY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lLCBjb25zdCBEaWN0aW9uYXJ5JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBSZWZQdHI8Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5PiBwcm90ZWN0KHRoaXMpOworCisgICAg
aWYgKCFDdXN0b21FbGVtZW50SGVscGVyczo6aXNGZWF0dXJlQWxsb3dlZChzdGF0ZSkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgUXVhbGlmaWVkTmFtZSBuZXdOYW1lKG51bGxBdG9tLCBuYW1l
Lmxvd2VyKCksIEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkpOworICAgIGlmICghaXNWYWxp
ZE5hbWUobmV3TmFtZS5sb2NhbE5hbWUoKSkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX0NIQVJB
Q1RFUl9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAgICAgCisgICAgaWYgKGZp
bmQobmV3TmFtZSkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorCisgICAgU2NyaXB0VmFsdWUgcHJvdG90eXBlVmFsdWU7CisgICAg
aWYgKCFvcHRpb25zLmdldCgicHJvdG90eXBlIiwgcHJvdG90eXBlVmFsdWUpKSB7CisgICAgICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhlIGRlZmF1bHQgdmFsdWUgaGFuZGxpbmcuCisgICAgICAg
IC8vIEN1cnJlbnRseSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAicHJvdG90eXBlIiBwYXJhbWV0ZXIs
IHdoaWNoCisgICAgICAgIC8vIGlzIEhUTUxTcGFuRWxlbWVudC5wcm90b3R5cGUsIGhhcyBhbiBh
bWJpZ3VpdHkgYWJvdXQgaXRzCisgICAgICAgIC8vIGJlaGF2aW9yLiBUaGUgc3BlYyBzaG91bGQg
YmUgZml4ZWQgYmVmb3JlIFdlYktpdCBpbXBsZW1lbnRzCisgICAgICAgIC8vIGl0LiBodHRwczov
L3d3dy53My5vcmcvQnVncy9QdWJsaWMvc2hvd19idWcuY2dpP2lkPTIwODAxCisgICAgICAgIGVj
ID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlm
ICghQ3VzdG9tRWxlbWVudEhlbHBlcnM6OmlzVmFsaWRQcm90b3R5cGVQYXJhbWV0ZXIocHJvdG90
eXBlVmFsdWUsIHN0YXRlKSkgeworICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgLy8gQW4gc2NyaXB0IGV4ZWN1dGlvbiBj
b3VsZCBoYXBwZW4gaW4gaXNWYWxpZFByb3RvdHlwZVBhcmFtZXRlcigpLCB3aGljaCBraWxscyB0
aGUgZG9jdW1lbnQuCisgICAgaWYgKCFkb2N1bWVudCgpKSB7CisgICAgICAgIGVjID0gSU5WQUxJ
RF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJlZlB0cjxDdXN0
b21FbGVtZW50Q29uc3RydWN0b3I+IGNvbnN0cnVjdG9yID0gQ3VzdG9tRWxlbWVudENvbnN0cnVj
dG9yOjpjcmVhdGUoc3RhdGUsIGRvY3VtZW50KCksIG5ld05hbWUsICJIVE1MQ3VzdG9tRWxlbWVu
dCIsIHByb3RvdHlwZVZhbHVlKTsKKyAgICBpZiAoIWNvbnN0cnVjdG9yKSB7CisgICAgICAgIGVj
ID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAgICAg
CisgICAgbV9jb25zdHJ1Y3RvcnMuYWRkKGNvbnN0cnVjdG9yLT50YWdOYW1lKCkuaW1wbCgpLCBj
b25zdHJ1Y3Rvcik7CisgICAgcmV0dXJuIGNvbnN0cnVjdG9yOworfQorCitQYXNzUmVmUHRyPEN1
c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpmaW5kKGNvbnN0
IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0Cit7CisgICAgQ29uc3RydWN0b3JNYXA6OmNvbnN0
X2l0ZXJhdG9yIGZvdW5kID0gbV9jb25zdHJ1Y3RvcnMuZmluZChuYW1lLmltcGwoKSk7CisgICAg
cmV0dXJuIChmb3VuZCAhPSBtX2NvbnN0cnVjdG9ycy5lbmQoKSkgPyBmb3VuZC0+dmFsdWUgOiAw
OworfQorCitQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBDdXN0b21FbGVtZW50UmVnaXN0cnk6OmNy
ZWF0ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKK3sKKyAgICBpZiAo
UmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gZm91bmQgPSBmaW5kKG5hbWUpKQorICAg
ICAgICByZXR1cm4gZm91bmQtPmNyZWF0ZUVsZW1lbnQoKTsKKyAgICByZXR1cm4gMDsKK30KKwor
aW5saW5lIERvY3VtZW50KiBDdXN0b21FbGVtZW50UmVnaXN0cnk6OmRvY3VtZW50KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5oIGIvU291
cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdiNThj
MTM5MDU0ODhjNGJhMzBmMDA5M2M2YWU2MjlkNzRlMDczNjEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmgKQEAgLTAsMCArMSw3OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAg
ICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5X2gKKyNkZWZpbmUgQ3VzdG9t
RWxlbWVudFJlZ2lzdHJ5X2gKKworI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKKyNpbmNs
dWRlICJDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKKyNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCisjaW5jbHVkZSAiU2NyaXB0VmFsdWUu
aCIKKyNpbmNsdWRlICJTdXBwbGVtZW50YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBDdXN0b21FbGVtZW50Q29uc3RydWN0b3I7CitjbGFzcyBEaWN0aW9uYXJ5OworY2xhc3MgRG9j
dW1lbnQ7CitjbGFzcyBIVE1MRWxlbWVudDsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7
CitjbGFzcyBRdWFsaWZpZWROYW1lOworCitjbGFzcyBDdXN0b21FbGVtZW50UmVnaXN0cnkgOiBw
dWJsaWMgUmVmQ291bnRlZDxDdXN0b21FbGVtZW50UmVnaXN0cnk+ICwgcHVibGljIENvbnRleHRE
ZXN0cnVjdGlvbk9ic2VydmVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDdXN0b21FbGVt
ZW50UmVnaXN0cnkpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBleHBs
aWNpdCBDdXN0b21FbGVtZW50UmVnaXN0cnkoRG9jdW1lbnQqKTsKKyAgICB+Q3VzdG9tRWxlbWVu
dFJlZ2lzdHJ5KCk7CisKKyAgICBQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4g
cmVnaXN0ZXJFbGVtZW50KFdlYkNvcmU6OlNjcmlwdFN0YXRlKiwgY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lLCBjb25zdCBEaWN0aW9uYXJ5JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJik7CisgICAg
UGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IGZpbmQoY29uc3QgUXVhbGlmaWVk
TmFtZSYpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OworICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNv
bnN0OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiBj
b25zdHJ1Y3Rvck9mKEhUTUxFbGVtZW50Kik7CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBi
b29sIGlzVmFsaWROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYpOworCisgICAgdHlwZWRlZiBIYXNo
TWFwPFF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5hbWVJbXBsKiwgUmVmUHRyPEN1c3RvbUVsZW1l
bnRDb25zdHJ1Y3Rvcj4gPkNvbnN0cnVjdG9yTWFwOworCisgICAgQ29uc3RydWN0b3JNYXAgbV9j
b25zdHJ1Y3RvcnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRl
eCBkZWJiOTU0YWFmZjk3YTg1YmQ3M2JmZGE2NjI5NmM0YmZhYTk1YzJiLi5jNjMzMWQ5MjRkMDBh
MDMwYWU0NTMyYmUxYzZhODBmN2M1ZmQ0ZGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAg
LTQ2LDExICs0NiwxNCBAQAogI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgogI2lu
Y2x1ZGUgIkNvbnRleHRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgorI2luY2x1
ZGUgIkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRS
ZWdpc3RyeS5oIgogI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiRE9N
TmFtZWRGbG93Q29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkRPTVNlbGVjdGlvbi5oIgogI2luY2x1
ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRhdGVDb21wb25lbnRzLmgiCisjaW5jbHVkZSAi
RGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIkRvY3VtZW50RXZlbnRRdWV1ZS5oIgogI2luY2x1ZGUg
IkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgpAQCAtNjc4
LDYgKzY4MSwxMCBAQCB2b2lkIERvY3VtZW50OjpyZW1vdmVkTGFzdFJlZigpCiAgICAgICAgIG1f
ZnVsbFNjcmVlbkVsZW1lbnRTdGFjay5jbGVhcigpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQ1VT
VE9NX0VMRU1FTlRTKQorICAgICAgICBtX3JlZ2lzdHJ5LmNsZWFyKCk7CisjZW5kaWYKKwogICAg
ICAgICBkZXRhY2hQYXJzZXIoKTsKIAogICAgICAgICAvLyByZW1vdmVEZXRhY2hlZENoaWxkcmVu
KCkgZG9lc24ndCBhbHdheXMgdW5yZWdpc3RlciBJRHMsCkBAIC04NDYsNiArODUzLDI1IEBAIFBh
c3NSZWZQdHI8RWxlbWVudD4gRG9jdW1lbnQ6OmNyZWF0ZUVsZW1lbnQoY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lLCBFeGNlcHRpb25DCiAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoUXVhbGlmaWVk
TmFtZShudWxsQXRvbSwgbmFtZSwgbnVsbEF0b20pLCBmYWxzZSk7CiB9CiAKKyNpZiBFTkFCTEUo
Q1VTVE9NX0VMRU1FTlRTKQorUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IERv
Y3VtZW50OjpyZWdpc3RlckVsZW1lbnQoV2ViQ29yZTo6U2NyaXB0U3RhdGUqIHN0YXRlLCBjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiBy
ZWdpc3RlckVsZW1lbnQoc3RhdGUsIG5hbWUsIERpY3Rpb25hcnkoKSwgZWMpOworfQorCitQYXNz
UmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gRG9jdW1lbnQ6OnJlZ2lzdGVyRWxlbWVu
dChXZWJDb3JlOjpTY3JpcHRTdGF0ZSogc3RhdGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwg
Y29uc3QgRGljdGlvbmFyeSYgb3B0aW9ucywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYg
KCFtX3JlZ2lzdHJ5KQorICAgICAgICBtX3JlZ2lzdHJ5ID0gYWRvcHRSZWYobmV3IEN1c3RvbUVs
ZW1lbnRSZWdpc3RyeSh0aGlzKSk7CisgICAgcmV0dXJuIG1fcmVnaXN0cnktPnJlZ2lzdGVyRWxl
bWVudChzdGF0ZSwgbmFtZSwgb3B0aW9ucywgZWMpOworfQorCitQYXNzUmVmUHRyPEN1c3RvbUVs
ZW1lbnRSZWdpc3RyeT4gRG9jdW1lbnQ6OnJlZ2lzdHJ5KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9yZWdpc3RyeTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCiBQYXNz
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IERvY3VtZW50OjpjcmVhdGVEb2N1bWVudEZyYWdtZW50
KCkKIHsKICAgICByZXR1cm4gRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaAppbmRleCAxMjY0MzhkNzBlZjAxNjFiYzJhZmU4ZmNlYTc2OGE0YmM4
NzAzN2FiLi5kOGI5ODYzMjk2OWIxOWJlMDhhMWI0N2Q2YWY5NDNiZDQwN2I0OGQ4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuaApAQCAtNzEsNiArNzEsOCBAQCBjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250
ZXh0OwogY2xhc3MgQ2hhcmFjdGVyRGF0YTsKIGNsYXNzIENvbW1lbnQ7CiBjbGFzcyBDb250ZXh0
RmVhdHVyZXM7CitjbGFzcyBDdXN0b21FbGVtZW50Q29uc3RydWN0b3I7CitjbGFzcyBDdXN0b21F
bGVtZW50UmVnaXN0cnk7CiBjbGFzcyBET01JbXBsZW1lbnRhdGlvbjsKIGNsYXNzIERPTU5hbWVk
Rmxvd0NvbGxlY3Rpb247CiBjbGFzcyBET01TZWxlY3Rpb247CkBAIC0xMTY1LDYgKzExNjcsMTIg
QEAgcHVibGljOgogICAgIFRleHRBdXRvc2l6ZXIqIHRleHRBdXRvc2l6ZXIoKSB7IHJldHVybiBt
X3RleHRBdXRvc2l6ZXIuZ2V0KCk7IH0KICNlbmRpZgogCisjaWYgRU5BQkxFKENVU1RPTV9FTEVN
RU5UUykKKyAgICBQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gcmVnaXN0ZXJF
bGVtZW50KFdlYkNvcmU6OlNjcmlwdFN0YXRlKiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBF
eGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+
IHJlZ2lzdGVyRWxlbWVudChXZWJDb3JlOjpTY3JpcHRTdGF0ZSosIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZSwgY29uc3QgRGljdGlvbmFyeSYgb3B0aW9ucywgRXhjZXB0aW9uQ29kZSYpOworICAg
IFBhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5PiByZWdpc3RyeSgpIGNvbnN0OworI2Vu
ZGlmCisKICAgICB2b2lkIGFkanVzdEZsb2F0UXVhZHNGb3JTY3JvbGxBbmRBYnNvbHV0ZVpvb21B
bmRGcmFtZVNjYWxlKFZlY3RvcjxGbG9hdFF1YWQ+JiwgUmVuZGVyT2JqZWN0Kik7CiAgICAgdm9p
ZCBhZGp1c3RGbG9hdFJlY3RGb3JTY3JvbGxBbmRBYnNvbHV0ZVpvb21BbmRGcmFtZVNjYWxlKEZs
b2F0UmVjdCYsIFJlbmRlck9iamVjdCopOwogCkBAIC0xNTQzLDYgKzE1NTEsMTAgQEAgcHJpdmF0
ZToKICAgICBPd25QdHI8VGV4dEF1dG9zaXplcj4gbV90ZXh0QXV0b3NpemVyOwogI2VuZGlmCiAK
KyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorICAgIFJlZlB0cjxDdXN0b21FbGVtZW50UmVn
aXN0cnk+IG1fcmVnaXN0cnk7CisjZW5kaWYKKwogICAgIGJvb2wgbV9zY2hlZHVsZWRUYXNrc0Fy
ZVN1c3BlbmRlZDsKICAgICAKICAgICBib29sIG1fdmlzdWFsVXBkYXRlc0FsbG93ZWQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9tYWtlX25hbWVzLnBsCmluZGV4IDcyMzNlMzI4NGUxMTgxYmFiOWQ4YmRlNzVhMGQ0YTEx
NmY0NGJlZDIuLjM0MWVhYzBiZWM1YTE3ZjVmZTJlYTgwOWNkZWNhYTA0ODJmNzRiYjQgMTAwNzU1
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9tYWtlX25hbWVzLnBsCkBAIC0xMTcyLDggKzExNzIsOSBAQCBFTkQKIDsKICAgICB9
IGVsc2lmICgkd3JhcHBlckZhY3RvcnlUeXBlIGVxICJWOCIpIHsKICAgICAgICAgcHJpbnQgRiA8
PEVORAorI2luY2x1ZGUgIlY4SFRNTEN1c3RvbUVsZW1lbnQuaCIKICNpbmNsdWRlICJWOCRwYXJh
bWV0ZXJze25hbWVzcGFjZX1FbGVtZW50LmgiCi0gICAgICAgIAorCiAjaW5jbHVkZSA8djguaD4K
IEVORAogOwpAQCAtMTI3NCw2ICsxMjc1LDExIEBAIEVORAogICAgIHJldHVybiBWOFNWR0VsZW1l
bnQ6OmNyZWF0ZVdyYXBwZXIoZWxlbWVudCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIEVO
RAogOworICAgICAgICB9IGVsc2lmICgkcGFyYW1ldGVyc3tuYW1lc3BhY2V9IGVxICJIVE1MIikg
eworICAgICAgICAgICAgcHJpbnQgRiA8PEVORAorICAgIHJldHVybiBWOEhUTUxDdXN0b21FbGVt
ZW50Ojp3cmFwKGVsZW1lbnQsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CitFTkQKKzsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHByaW50IEYgPDxFTkQKICAgICByZXR1cm4gd3Jh
cCh0byRwYXJhbWV0ZXJze2ZhbGxiYWNrSW50ZXJmYWNlTmFtZX0oZWxlbWVudCksIGNyZWF0aW9u
Q29udGV4dCwgaXNvbGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxE
b2N1bWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5pZGwKaW5kZXgg
MjVmMGE1YzM5MDM1MTE0YjVkZjE5MTdjMjk1MjkxNjBhOWI0N2M5OC4uN2MyOWZjYjVkYzE4OTJh
YWFjNzJmNTI0MDM2M2VlMmMyNGQyM2Q5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRG9jdW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50
LmlkbApAQCAtNTMsNiArNTMsMTEgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRWxlbWVudCBh
Y3RpdmVFbGVtZW50OwogICAgIGJvb2xlYW4gaGFzRm9jdXMoKTsKIAorI2lmIGRlZmluZWQoRU5B
QkxFX0NVU1RPTV9FTEVNRU5UUykgJiYgRU5BQkxFX0NVU1RPTV9FTEVNRU5UUworICAgIFtWOEVu
YWJsZWRBdFJ1bnRpbWU9Y3VzdG9tRE9NRWxlbWVudHMsIENvbmRpdGlvbmFsPUNVU1RPTV9FTEVN
RU5UUywgSW1wbGVtZW50ZWRBcz1yZWdpc3RlckVsZW1lbnQsIENhbGxXaXRoPVNjcmlwdFN0YXRl
XQorICAgIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciB3ZWJraXRSZWdpc3RlcihpbiBET01TdHJp
bmcgbmFtZSwgaW4gW09wdGlvbmFsXSBEaWN0aW9uYXJ5IG9wdGlvbnMpIHJhaXNlcyhET01FeGNl
cHRpb24pOworI2VuZGlmCisKICAgICAvLyBEZXByZWNhdGVkIGF0dHJpYnV0ZXMKICAgICAgICAg
ICAgICBbVHJlYXROdWxsQXM9TnVsbFN0cmluZ10gYXR0cmlidXRlIERPTVN0cmluZyBiZ0NvbG9y
OwogICAgICAgICAgICAgIFtUcmVhdE51bGxBcz1OdWxsU3RyaW5nXSBhdHRyaWJ1dGUgRE9NU3Ry
aW5nIGZnQ29sb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVz
Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKaW5kZXggNzdiMmM3
NmM0NGEzMmZhOTMzMDRjZTRiY2QwN2UyMTA1ZmU5YzU1OC4uMTJlOTBmYjllYjdmYzhkNGExOThh
OTU4YzE1Mjc2ZDcxM2Y4ZWI2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9m
ZWF0dXJlcy5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQpA
QCAtNTQsNiArNTQsNyBAQAogICAgICAgJ0VOQUJMRV9DU1NfVFJBTlNGT1JNU19BTklNQVRJT05T
X1VOUFJFRklYRUQ9MCcsCiAgICAgICAnRU5BQkxFX0NTU19WQVJJQUJMRVM9MScsCiAgICAgICAn
RU5BQkxFX0NTU19TVElDS1lfUE9TSVRJT049MScsCisgICAgICAnRU5BQkxFX0NVU1RPTV9FTEVN
RU5UUz0xJywKICAgICAgICdFTkFCTEVfQ1VTVE9NX1NDSEVNRV9IQU5ETEVSPTAnLAogICAgICAg
J0VOQUJMRV9EQVNIQk9BUkRfU1VQUE9SVD0wJywKICAgICAgICdFTkFCTEVfREFUQV9UUkFOU0ZF
Ul9JVEVNUz0xJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlJ1bnRpbWVGZWF0dXJlcy5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUnVu
dGltZUZlYXR1cmVzLmgKaW5kZXggZTM5NGQ3NWY0YzdhMWI5ZTBkNTJjMzliYjQ2MWZlZTE4Y2Fi
OWEyMC4uYTA1NWYwODJiNzE1YzMzMDJiMzFkMzBlZjdlZWZiZDA0N2Y0YTVjMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUnVudGltZUZlYXR1cmVzLmgKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUnVudGltZUZlYXR1cmVzLmgKQEAg
LTEyNSw2ICsxMjUsOSBAQCBwdWJsaWM6CiAgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgdm9pZCBl
bmFibGVTaGFkb3dET00oYm9vbCk7CiAgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgYm9vbCBpc1No
YWRvd0RPTUVuYWJsZWQoKTsKIAorICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIHZvaWQgZW5hYmxl
Q3VzdG9tRE9NRWxlbWVudHMoYm9vbCk7CisgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgYm9vbCBp
c0N1c3RvbURPTUVsZW1lbnRzRW5hYmxlZCgpOworCiAgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMg
dm9pZCBlbmFibGVTdHlsZVNjb3BlZChib29sKTsKICAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBi
b29sIGlzU3R5bGVTY29wZWRFbmFibGVkKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlJ1bnRpbWVGZWF0dXJlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJSdW50aW1lRmVhdHVyZXMuY3BwCmluZGV4IGExODQzNGUyOWVmMTAwMmNkMzM5
OGRiMjU4NGY4NDdkZDc0ODg5OWEuLjUxYmZkZmEwYjgyNzhhMDczZjRhYTY2YTM5YzJkNGRkYzRi
YzNlMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlJ1bnRpbWVG
ZWF0dXJlcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUnVudGltZUZl
YXR1cmVzLmNwcApAQCAtNDgxLDYgKzQ4MSwyNSBAQCBib29sIFdlYlJ1bnRpbWVGZWF0dXJlczo6
aXNTaGFkb3dET01FbmFibGVkKCkKICNlbmRpZgogfQogCit2b2lkIFdlYlJ1bnRpbWVGZWF0dXJl
czo6ZW5hYmxlQ3VzdG9tRE9NRWxlbWVudHMoYm9vbCBlbmFibGUpCit7CisjaWYgRU5BQkxFKENV
U1RPTV9FTEVNRU5UUykKKyAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzZXRDdXN0b21ET01F
bGVtZW50cyhlbmFibGUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZW5hYmxlKTsKKyNlbmRp
ZgorfQorCitib29sIFdlYlJ1bnRpbWVGZWF0dXJlczo6aXNDdXN0b21ET01FbGVtZW50c0VuYWJs
ZWQoKQoreworI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisgICAgcmV0dXJuIFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OmN1c3RvbURPTUVsZW1lbnRzRW5hYmxlZCgpOworI2Vsc2UKKyAgICBy
ZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworCiB2b2lkIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5h
YmxlU3R5bGVTY29wZWQoYm9vbCBlbmFibGUpCiB7CiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAwNTAw
N2QzYjEzNzNhZjUwYWNhZDI5MWI5NjEzY2Y0M2Y3YTA3YjI0Li4xNzhiZmZjMGZmNGVlOWJmNzQz
OGNlNWJhYmQ4NTc2MGU4NjFmMjRhIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTMtMDEtMjcgIEhhamltZSBNb3Jy
aXRhICA8bW9ycml0YUBnb29nbGUuY29tPgorCisgICAgICAgIFtDdXN0b20gRWxlbWVudHNdIElt
cGxlbWVudCBiYXJlLWJvbmUgZG9jdW1lbnQucmVnaXN0ZXIoKQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwMjI5CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgQWRhbSBCYXJ0aC4KKworICAgICAgICBBZGRlZCBlbmFibGVDdXN0b21ET01FbGVtZW50cyBm
bGFnLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcDoK
KyAgICAgICAgKFRlc3RTaGVsbDo6VGVzdFNoZWxsKToKKwogMjAxMy0wMi0yMyAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBDaHJvbWl1bSBXaW5kb3dzIFBlcmYg
Ym90IGZpeC4gVG9sZXJhdGUgQ1IgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSB0aGF0IGNvbnRhaW5z
IHRoZSB0aW1lc3RhbXAuCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0U2hlbGwuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxs
LmNwcAppbmRleCBmNmZjYjI2YzVlMzBmZTczNmZiODlkMzVmNDhiNDY1YmQ1MGEyZDIxLi4yZDhm
MTQyMjU3NzYxMThmNjIxY2M4YzUwODJiYWVlOGEyNTYwODM0IDEwMDY0NAotLS0gYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKQEAgLTE0NSw2ICsxNDUsNyBAQCBUZXN0U2hl
bGw6OlRlc3RTaGVsbCgpCiAgICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVWaWRlb1RyYWNr
KHRydWUpOwogICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlR2FtZXBhZCh0cnVlKTsKICAg
ICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZVNoYWRvd0RPTSh0cnVlKTsKKyAgICBXZWJSdW50
aW1lRmVhdHVyZXM6OmVuYWJsZUN1c3RvbURPTUVsZW1lbnRzKHRydWUpOwogICAgIFdlYlJ1bnRp
bWVGZWF0dXJlczo6ZW5hYmxlU3R5bGVTY29wZWQodHJ1ZSk7CiAgICAgV2ViUnVudGltZUZlYXR1
cmVzOjplbmFibGVTY3JpcHRlZFNwZWVjaCh0cnVlKTsKICAgICBXZWJSdW50aW1lRmVhdHVyZXM6
OmVuYWJsZVJlcXVlc3RBdXRvY29tcGxldGUodHJ1ZSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMjRjMThiZTNkNTY5Yzhm
MjUwZDdmZTVjZGYyNjI3YjkyZGFkN2NkNS4uNWNmMjQxM2ZkYzRiZmNlNDljZmRmZDAwMTMzNjFl
OTA5MGM2YWNkYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEzLTAyLTE0ICBIYWppbWUgTW9y
cml0YSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBbQ3VzdG9tIEVsZW1lbnRzXSBJ
bXBsZW1lbnQgYmFyZS1ib25lIGRvY3VtZW50LnJlZ2lzdGVyKCkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDIyOQorCisgICAgICAgIFJldmlld2Vk
IGJ5IEFkYW0gQmFydGguCisKKyAgICAgICAgKiBmYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVn
aXN0ZXItYmFzaWMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9jdXN0
b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9k
b20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFudC1udWxsLWNvbnN0cnVjdG9yLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJl
Z2lzdGVyLXJlZW50cmFudC1udWxsLWNvbnN0cnVjdG9yLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1yZWVudHJhbnQtcmV0dXJuaW5nLWZh
a2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9jdXN0b20vZG9jdW1l
bnQtcmVnaXN0ZXItcmVlbnRyYW50LXJldHVybmluZy1mYWtlLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1yZWVudHJhbnQtdGhyb3dpbmct
Y29uc3RydWN0b3ItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9jdXN0
b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVlbnRyYW50LXRocm93aW5nLWNvbnN0cnVjdG9yLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL2N1c3RvbS9yZXNvdXJjZXMvZG9jdW1lbnQtcmVn
aXN0ZXItZnV6ei5qczogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3Rh
dGlvbnM6CisKIDIwMTMtMDItMjMgIEphc29uIEFuZGVyc3NlbiAgPGphbmRlcnNzZW5AZ21haWwu
Y29tPgogCiAgICAgICAgIE1vdmVkIHNldEF1dG9maWxsZWQgZnJvbSBUZXN0UnVubmVyIHRvIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1y
ZWdpc3Rlci1iYXNpYy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20v
ZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2YjYyMTk0
ZDFlMzIwYWE0N2IyMDkzMjhjOTQ1YzVjOTliYzhmYjUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMtZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsNDYgQEAKK1Rlc3RpbmcgZG9jdW1lbnQucmVnaXN0ZXIoKSBiYXNpYyBi
ZWhhdmlvcnMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIg
bWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGRvY3VtZW50
LnJlZ2lzdGVyKCdmb28nLCBjcmVhdGVSZWdpc3RlclBhcmFtdGVycygpKSB0aHJldyBleGNlcHRp
b24gRXJyb3I6IEludmFsaWRDaGFyYWN0ZXJFcnJvcjogRE9NIEV4Y2VwdGlvbiA1LgorUEFTUyBk
b2N1bWVudC5yZWdpc3RlcigneGZvbycsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpIHRocmV3
IGV4Y2VwdGlvbiBFcnJvcjogSW52YWxpZENoYXJhY3RlckVycm9yOiBET00gRXhjZXB0aW9uIDUu
CitQQVNTIGRvY3VtZW50LnJlZ2lzdGVyKCdtaXNzaW5nLWdseXBoJywgY3JlYXRlUmVnaXN0ZXJQ
YXJhbXRlcnMoKSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJbnZhbGlkQ2hhcmFjdGVyRXJyb3I6
IERPTSBFeGNlcHRpb24gNS4KK1BBU1MgdHlwZW9mIGZvb0NvbnN0cnVjdG9yIGlzICdmdW5jdGlv
bicKK1BBU1MgZm9vQ29uc3RydWN0b3IucHJvdG90eXBlLl9fcHJvdG9fXyBpcyBIVE1MRWxlbWVu
dC5wcm90b3R5cGUKK1BBU1MgZm9vQ29uc3RydWN0b3IucHJvdG90eXBlLnRoaXNJc1Byb3RvdHlw
ZSBpcyB0cnVlCitQQVNTIGRvY3VtZW50LnJlZ2lzdGVyKCd4LWZvbycsIGNyZWF0ZVJlZ2lzdGVy
UGFyYW10ZXJzKCkpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSW52YWxpZFN0YXRlRXJyb3I6IERP
TSBFeGNlcHRpb24gMTEuCitQQVNTIGRvY3VtZW50LnJlZ2lzdGVyKCdYLUZPTycsIGNyZWF0ZVJl
Z2lzdGVyUGFyYW10ZXJzKCkpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSW52YWxpZFN0YXRlRXJy
b3I6IERPTSBFeGNlcHRpb24gMTEuCitQQVNTIGRvY3VtZW50LnJlZ2lzdGVyKCd4LWJhZC1hJywg
eyBwcm90b3R5cGU6IEhUTUxFbGVtZW50LnByb3RvdHlwZSB9KSB0aHJldyBleGNlcHRpb24gRXJy
b3I6IEludmFsaWRTdGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDExLgorUEFTUyBkb2N1bWVudC5y
ZWdpc3RlcigneC1iYWQtYicsIHsgcHJvdG90eXBlOiB7fSB9KSB0aHJldyBleGNlcHRpb24gRXJy
b3I6IEludmFsaWRTdGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDExLgorUEFTUyBkb2N1bWVudC5y
ZWdpc3RlcigneC1iYWQtYycsIHsgcHJvdG90eXBlOiBPYmplY3QuY3JlYXRlKERvY3VtZW50LnBy
b3RvdHlwZSkgfSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJbnZhbGlkU3RhdGVFcnJvcjogRE9N
IEV4Y2VwdGlvbiAxMS4KK1BBU1MgZG9jdW1lbnQucmVnaXN0ZXIoJ3gtYmFkLWQnLCB7IHByb3Rv
dHlwZTogT2JqZWN0LmNyZWF0ZShIVE1MU3BhbkVsZW1lbnQucHJvdG90eXBlKSB9KSB0aHJldyBl
eGNlcHRpb24gRXJyb3I6IEludmFsaWRTdGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDExLgorUEFT
UyBmb29Db25zdHJ1Y3RvcigpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IERPTSBvYmplY3Qg
Y29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLi4KK1BBU1MgY3JlYXRl
ZEZvby5fX3Byb3RvX18gaXMgZm9vQ29uc3RydWN0b3IucHJvdG90eXBlCitQQVNTIGNyZWF0ZWRG
b28uY29uc3RydWN0b3IgaXMgZm9vQ29uc3RydWN0b3IKK1BBU1MgY3JlYXRlZEZvby50YWdOYW1l
IGlzICdYLUZPTycKK1BBU1MgY3JlYXRlZEZvby50ZXh0Q29udGVudCBpcyAnSGVsbG8nCitQQVNT
IGNyZWF0ZWRGb28ubGFzdENoaWxkIGlzIGNoaWxkRGl2CitQQVNTIHBhcnNlZEZvby5fX3Byb3Rv
X18gaXMgZm9vQ29uc3RydWN0b3IucHJvdG90eXBlCitQQVNTIHBhcnNlZEZvby50YWdOYW1lIGlz
ICdYLUZPTycKK1BBU1MgcGFyc2VkRm9vLnNvbWVQcm9wZXJ0eSBpcyBjb250YWluZXIuZmlyc3RD
aGlsZC5zb21lUHJvcGVydHkKK1BBU1MgY3JlYXRlZEJhci50YWdOYW1lIGlzICdYLUJBUicKK1BB
U1MgY3JlYXRlZEJhei50YWdOYW1lIGlzICdYLUJBWicKK1BBU1MgY3JlYXRlZEJhei50aGlzSXNQ
cm90b3R5cGUgaXMgdHJ1ZQorUEFTUyBjcmVhdGVkQmF6LnRoaXNJc0Fsc29Qcm90b3R5cGUgaXMg
dHJ1ZQorUEFTUyBjcmVhdGVkVXBwZXJCYXIuY29uc3RydWN0b3IgaXMgYmFyQ29uc3RydWN0b3IK
K1BBU1MgY3JlYXRlZFVwcGVyQmFyLnRhZ05hbWUgaXMgJ1gtQkFSJworUEFTUyBjcmVhdGVkTWl4
ZWRCYXIuY29uc3RydWN0b3IgaXMgYmFyQ29uc3RydWN0b3IKK1BBU1MgY3JlYXRlZE1peGVkQmFy
LnRhZ05hbWUgaXMgJ1gtQkFSJworUEFTUyBjb250YWluZXIuZmlyc3RDaGlsZC5jb25zdHJ1Y3Rv
ciBpcyBiYXJDb25zdHJ1Y3RvcgorUEFTUyBjb250YWluZXIuZmlyc3RDaGlsZC50YWdOYW1lIGlz
ICdYLUJBUicKK1BBU1MgY29udGFpbmVyLmxhc3RDaGlsZC5jb25zdHJ1Y3RvciBpcyBiYXJDb25z
dHJ1Y3RvcgorUEFTUyBjb250YWluZXIubGFzdENoaWxkLnRhZ05hbWUgaXMgJ1gtQkFSJworUEFT
UyAobmV3IChkb2N1bWVudC5yZWdpc3RlcigneS1iYXInLCBjcmVhdGVSZWdpc3RlclBhcmFtdGVy
cygpKSkoKSkudGFnTmFtZSBpcyAnWS1CQVInCitQQVNTIChuZXcgKGRvY3VtZW50LnJlZ2lzdGVy
KCd5ei1iYXInLCBjcmVhdGVSZWdpc3RlclBhcmFtdGVycygpKSkoKSkudGFnTmFtZSBpcyAnWVot
QkFSJworUEFTUyAobmV3IChkb2N1bWVudC5yZWdpc3RlcigneS16LWJhcicsIGNyZWF0ZVJlZ2lz
dGVyUGFyYW10ZXJzKCkpKSgpKS50YWdOYW1lIGlzICdZLVotQkFSJworUEFTUyAobmV3IChkb2N1
bWVudC5yZWdpc3RlcigneS0tYmFyJywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSkpKCkpLnRh
Z05hbWUgaXMgJ1ktLUJBUicKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9j
dW1lbnQtcmVnaXN0ZXItYmFzaWMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9k
b2N1bWVudC1yZWdpc3Rlci1iYXNpYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEwNTc3OGMyYzEzMmRlMGQx
NmE0OTUxOTQ0ZTcxMDc4Nzg2OGUyZDgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMuaHRtbApAQCAtMCwwICsxLDEx
MyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4u
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxkaXYgaWQ9ImNvbnRhaW5lciI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3Rp
bmcgZG9jdW1lbnQucmVnaXN0ZXIoKSBiYXNpYyBiZWhhdmlvcnMuIik7CisKK2lmICh3aW5kb3cu
dGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKK2RvY3VtZW50LnJlZ2lz
dGVyID0gZG9jdW1lbnQucmVnaXN0ZXIgfHwgZG9jdW1lbnQud2Via2l0UmVnaXN0ZXI7CisKK2Z1
bmN0aW9uIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkKK3sKKyAgICByZXR1cm4geworICAgICAg
ICBwcm90b3R5cGU6IE9iamVjdC5jcmVhdGUoSFRNTEVsZW1lbnQucHJvdG90eXBlLCB7IHRoaXNJ
c1Byb3RvdHlwZTogeyB2YWx1ZTogdHJ1ZSB9IH0pCisgICAgfTsKK30KKworLy8gSW52YWxpZCBu
YW1lcworc2hvdWxkVGhyb3coImRvY3VtZW50LnJlZ2lzdGVyKCdmb28nLCBjcmVhdGVSZWdpc3Rl
clBhcmFtdGVycygpKSIsICInRXJyb3I6IEludmFsaWRDaGFyYWN0ZXJFcnJvcjogRE9NIEV4Y2Vw
dGlvbiA1JyIpOworc2hvdWxkVGhyb3coImRvY3VtZW50LnJlZ2lzdGVyKCd4Zm9vJywgY3JlYXRl
UmVnaXN0ZXJQYXJhbXRlcnMoKSkiLCAiJ0Vycm9yOiBJbnZhbGlkQ2hhcmFjdGVyRXJyb3I6IERP
TSBFeGNlcHRpb24gNSciKTsKK3Nob3VsZFRocm93KCJkb2N1bWVudC5yZWdpc3RlcignbWlzc2lu
Zy1nbHlwaCcsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpIiwgIidFcnJvcjogSW52YWxpZENo
YXJhY3RlckVycm9yOiBET00gRXhjZXB0aW9uIDUnIik7CisKK3ZhciBmb29Db25zdHJ1Y3RvciA9
IGRvY3VtZW50LnJlZ2lzdGVyKCJ4LWZvbyIsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpOwor
c2hvdWxkQmUoInR5cGVvZiBmb29Db25zdHJ1Y3RvciIsICInZnVuY3Rpb24nIik7CitzaG91bGRC
ZSgiZm9vQ29uc3RydWN0b3IucHJvdG90eXBlLl9fcHJvdG9fXyIsICJIVE1MRWxlbWVudC5wcm90
b3R5cGUiKTsKK3Nob3VsZEJlVHJ1ZSgiZm9vQ29uc3RydWN0b3IucHJvdG90eXBlLnRoaXNJc1By
b3RvdHlwZSIpOworCisvLyBOYW1lIGNvbmZsaWN0cworc2hvdWxkVGhyb3coImRvY3VtZW50LnJl
Z2lzdGVyKCd4LWZvbycsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpIiwgIidFcnJvcjogSW52
YWxpZFN0YXRlRXJyb3I6IERPTSBFeGNlcHRpb24gMTEnIik7CitzaG91bGRUaHJvdygiZG9jdW1l
bnQucmVnaXN0ZXIoJ1gtRk9PJywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSkiLCAiJ0Vycm9y
OiBJbnZhbGlkU3RhdGVFcnJvcjogRE9NIEV4Y2VwdGlvbiAxMSciKTsKKworLy8gQmFkIHByb3Rv
dHlwZTogY29uc3RydWN0b3IgcHJvcGVydHkgZXhpc3RzCitzaG91bGRUaHJvdygiZG9jdW1lbnQu
cmVnaXN0ZXIoJ3gtYmFkLWEnLCB7IHByb3RvdHlwZTogSFRNTEVsZW1lbnQucHJvdG90eXBlIH0p
IiwgIidFcnJvcjogSW52YWxpZFN0YXRlRXJyb3I6IERPTSBFeGNlcHRpb24gMTEnIik7CisvLyBC
YWQgcHJvdG90eXBlOiBtaXNzaW5nIF9fcHJvdG9fXworc2hvdWxkVGhyb3coImRvY3VtZW50LnJl
Z2lzdGVyKCd4LWJhZC1iJywgeyBwcm90b3R5cGU6IHt9IH0pIiwgIidFcnJvcjogSW52YWxpZFN0
YXRlRXJyb3I6IERPTSBFeGNlcHRpb24gMTEnIik7CisvLyBCYWQgcHJvdG90eXBlOiB3cm9uZyBf
X3Byb3RvX18KK3Nob3VsZFRocm93KCJkb2N1bWVudC5yZWdpc3RlcigneC1iYWQtYycsIHsgcHJv
dG90eXBlOiBPYmplY3QuY3JlYXRlKERvY3VtZW50LnByb3RvdHlwZSkgfSkiLCAiJ0Vycm9yOiBJ
bnZhbGlkU3RhdGVFcnJvcjogRE9NIEV4Y2VwdGlvbiAxMSciKTsKKy8vIEJ1ZyAxMTA0MzYgLSBF
bGVtZW50cyBvdGhlciB0aGFuIEhUTUxFbWVtZW50IHNob3VsZCBiZSBhbGxvd2VkIGFzIGEgc3Vw
ZXJjbGFzcy4KK3Nob3VsZFRocm93KCJkb2N1bWVudC5yZWdpc3RlcigneC1iYWQtZCcsIHsgcHJv
dG90eXBlOiBPYmplY3QuY3JlYXRlKEhUTUxTcGFuRWxlbWVudC5wcm90b3R5cGUpIH0pIiwgIidF
cnJvcjogSW52YWxpZFN0YXRlRXJyb3I6IERPTSBFeGNlcHRpb24gMTEnIik7CisvLyBDYWxsIGFz
IGZ1bmN0aW9uCitzaG91bGRUaHJvdygiZm9vQ29uc3RydWN0b3IoKSIsICInVHlwZUVycm9yOiBE
T00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4nIikK
KworLy8gQ29uc3RydWN0b3IgaW5pdGlhdGVkIGluc3RhbnRpYXRpb24KK3ZhciBjcmVhdGVkRm9v
ID0gbmV3IGZvb0NvbnN0cnVjdG9yKCk7CisKKy8vIEpTIGJ1aWx0LWluIHByb3BlcnRpZXMKK3No
b3VsZEJlKCJjcmVhdGVkRm9vLl9fcHJvdG9fXyIsICJmb29Db25zdHJ1Y3Rvci5wcm90b3R5cGUi
KTsKK3Nob3VsZEJlKCJjcmVhdGVkRm9vLmNvbnN0cnVjdG9yIiwgImZvb0NvbnN0cnVjdG9yIik7
CisKKy8vIE5hdGl2ZSBnZXR0ZXIKK3Nob3VsZEJlKCJjcmVhdGVkRm9vLnRhZ05hbWUiLCAiJ1gt
Rk9PJyIpOworCisvLyBOYXRpdmUgc2V0dGVyCitjcmVhdGVkRm9vLmlubmVySFRNTCA9ICJIZWxs
byI7CitzaG91bGRCZSgiY3JlYXRlZEZvby50ZXh0Q29udGVudCIsICInSGVsbG8nIik7CisKKy8v
IE5hdGl2ZSBtZXRob2QKK3ZhciBjaGlsZERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRp
diIpOworY3JlYXRlZEZvby5hcHBlbmRDaGlsZChjaGlsZERpdik7CitzaG91bGRCZSgiY3JlYXRl
ZEZvby5sYXN0Q2hpbGQiLCAiY2hpbGREaXYiKTsKKworLy8gUGFyc2VyIGluaXRpYXRlZCBpbnN0
YW50aWF0aW9uCit2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRh
aW5lciIpOworY29udGFpbmVyLmlubmVySFRNTCA9ICI8eC1mb28+PC94LWZvbz4iOworcGFyc2Vk
Rm9vID0gY29udGFpbmVyLmZpcnN0Q2hpbGQ7CisKK3Nob3VsZEJlKCJwYXJzZWRGb28uX19wcm90
b19fIiwgImZvb0NvbnN0cnVjdG9yLnByb3RvdHlwZSIpOworc2hvdWxkQmUoInBhcnNlZEZvby50
YWdOYW1lIiwgIidYLUZPTyciKTsKKworLy8gRW5zdXJpbmcgdGhlIHdyYXBwZXIgaXMgcmV0YWlu
ZWQKK3BhcnNlZEZvby5zb21lUHJvcGVydHkgPSAiaGVsbG8iOworc2hvdWxkQmUoInBhcnNlZEZv
by5zb21lUHJvcGVydHkiLCAiY29udGFpbmVyLmZpcnN0Q2hpbGQuc29tZVByb3BlcnR5Iik7CisK
Ky8vIEhhdmluZyBhbm90aGVyIGNvbnN0cnVjdG9yCit2YXIgYmFyQ29uc3RydWN0b3IgPSBkb2N1
bWVudC5yZWdpc3RlcigieC1iYXIiLCBjcmVhdGVSZWdpc3RlclBhcmFtdGVycygpKTsKK3ZhciBj
cmVhdGVkQmFyID0gbmV3IGJhckNvbnN0cnVjdG9yKCk7CitzaG91bGRCZSgiY3JlYXRlZEJhci50
YWdOYW1lIiwgIidYLUJBUiciKTsKKworLy8gSGF2aW5nIGEgc3ViY2xhc3MKK3ZhciBiYXpDb25z
dHJ1Y3RvciA9IGRvY3VtZW50LnJlZ2lzdGVyKCJ4LWJheiIsIHsgcHJvdG90eXBlOiBPYmplY3Qu
Y3JlYXRlKGZvb0NvbnN0cnVjdG9yLnByb3RvdHlwZSwgeyB0aGlzSXNBbHNvUHJvdG90eXBlOiB7
IHZhbHVlOiB0cnVlIH0gfSkgfSk7Cit2YXIgY3JlYXRlZEJheiA9IG5ldyBiYXpDb25zdHJ1Y3Rv
cigpOworc2hvdWxkQmUoImNyZWF0ZWRCYXoudGFnTmFtZSIsICInWC1CQVonIik7CitzaG91bGRC
ZVRydWUoImNyZWF0ZWRCYXoudGhpc0lzUHJvdG90eXBlIik7CitzaG91bGRCZVRydWUoImNyZWF0
ZWRCYXoudGhpc0lzQWxzb1Byb3RvdHlwZSIpOworCisvLyBXaXRoIGlycmVndWxhciBjYXNlcwor
dmFyIGNyZWF0ZWRVcHBlckJhciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlgtQkFSIik7Cit2
YXIgY3JlYXRlZE1peGVkQmFyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiWC1CYXIiKTsKK3No
b3VsZEJlKCJjcmVhdGVkVXBwZXJCYXIuY29uc3RydWN0b3IiLCAiYmFyQ29uc3RydWN0b3IiKTsK
K3Nob3VsZEJlKCJjcmVhdGVkVXBwZXJCYXIudGFnTmFtZSIsICInWC1CQVInIik7CitzaG91bGRC
ZSgiY3JlYXRlZE1peGVkQmFyLmNvbnN0cnVjdG9yIiwgImJhckNvbnN0cnVjdG9yIik7CitzaG91
bGRCZSgiY3JlYXRlZE1peGVkQmFyLnRhZ05hbWUiLCAiJ1gtQkFSJyIpOworCitjb250YWluZXIu
aW5uZXJIVE1MID0gIjxYLUJBUj48L1gtQkFSPjxYLUJhcj48L1gtQmFyPiI7CitzaG91bGRCZSgi
Y29udGFpbmVyLmZpcnN0Q2hpbGQuY29uc3RydWN0b3IiLCAiYmFyQ29uc3RydWN0b3IiKTsKK3No
b3VsZEJlKCJjb250YWluZXIuZmlyc3RDaGlsZC50YWdOYW1lIiwgIidYLUJBUiciKTsKK3Nob3Vs
ZEJlKCJjb250YWluZXIubGFzdENoaWxkLmNvbnN0cnVjdG9yIiwgImJhckNvbnN0cnVjdG9yIik7
CitzaG91bGRCZSgiY29udGFpbmVyLmxhc3RDaGlsZC50YWdOYW1lIiwgIidYLUJBUiciKTsKKwor
Ly8gU3RyYW5nZSBidXQgdmFsaWQgbmFtZXMKK3Nob3VsZEJlKCIobmV3IChkb2N1bWVudC5yZWdp
c3RlcigneS1iYXInLCBjcmVhdGVSZWdpc3RlclBhcmFtdGVycygpKSkoKSkudGFnTmFtZSIsICIn
WS1CQVInIik7CitzaG91bGRCZSgiKG5ldyAoZG9jdW1lbnQucmVnaXN0ZXIoJ3l6LWJhcicsIGNy
ZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpKSgpKS50YWdOYW1lIiwgIidZWi1CQVInIik7CitzaG91
bGRCZSgiKG5ldyAoZG9jdW1lbnQucmVnaXN0ZXIoJ3ktei1iYXInLCBjcmVhdGVSZWdpc3RlclBh
cmFtdGVycygpKSkoKSkudGFnTmFtZSIsICInWS1aLUJBUiciKTsKK3Nob3VsZEJlKCIobmV3IChk
b2N1bWVudC5yZWdpc3RlcigneS0tYmFyJywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSkpKCkp
LnRhZ05hbWUiLCAiJ1ktLUJBUiciKTsKKworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
anMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0
ZXItcmVlbnRyYW50LW51bGwtY29uc3RydWN0b3ItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFudC1udWxsLWNvbnN0cnVj
dG9yLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNjViNTk4ZTM1YTM3Y2I5OWI0NDY0NTEzZWNl
NDBlNjI2Y2UzZjc5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3Vz
dG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFudC1udWxsLWNvbnN0cnVjdG9yLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDkgQEAKK0Z1enppbmcgZG9jdW1lbnQucmVnaXN0ZXIoKSB0aHJvdWdo
IGdldHRlcnMuIFBBU1MgdWxlc3MgY3Jhc2guCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVy
LXJlZW50cmFudC1udWxsLWNvbnN0cnVjdG9yLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9j
dXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVlbnRyYW50LW51bGwtY29uc3RydWN0b3IuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44MDhhMDBiNjcxMTdhZTViMjg4Njk1YjcyMDNmMTcwMDZhY2RkYzE2Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lz
dGVyLXJlZW50cmFudC1udWxsLWNvbnN0cnVjdG9yLmh0bWwKQEAgLTAsMCArMSwyMyBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi9yZXNvdXJjZXMv
ZG9jdW1lbnQtcmVnaXN0ZXItZnV6ei5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxk
aXYgaWQ9ImNvbnRhaW5lciI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIkZ1enppbmcg
ZG9jdW1lbnQucmVnaXN0ZXIoKSB0aHJvdWdoIGdldHRlcnMuIFBBU1MgdWxlc3MgY3Jhc2guIik7
CisKK3NldHVwT2JqZWN0SG9va3MoeworICAgIHByb3RvdHlwZUdldDogZnVuY3Rpb24oKSB7IH0s
CisgICAgcHJvdG90eXBlU2V0OiBmdW5jdGlvbih2YWx1ZSkgeyB9LAorICAgIGNvbnN0cnVjdG9y
R2V0OiBmdW5jdGlvbigpIHsgfSwKKyAgICBjb25zdHJ1Y3RvclNldDogZnVuY3Rpb24odmFsdWUp
IHsgfQorfSk7CisKK2V4ZXJjaXNlRG9jdW1lbnRSZWdpc3RlcigpOworPC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20v
ZG9jdW1lbnQtcmVnaXN0ZXItcmVlbnRyYW50LXJldHVybmluZy1mYWtlLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1yZWVudHJhbnQt
cmV0dXJuaW5nLWZha2UtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE2NWI1OThlMzVhMzdjYjk5
YjQ0NjQ1MTNlY2U0MGU2MjZjZTNmNzkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVlbnRyYW50LXJldHVybmluZy1mYWtl
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDkgQEAKK0Z1enppbmcgZG9jdW1lbnQucmVnaXN0ZXIo
KSB0aHJvdWdoIGdldHRlcnMuIFBBU1MgdWxlc3MgY3Jhc2guCisKK09uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KKworCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50
LXJlZ2lzdGVyLXJlZW50cmFudC1yZXR1cm5pbmctZmFrZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFz
dC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFudC1yZXR1cm5pbmctZmFrZS5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmU3ZTkwZmI3NmUzOGQ3YzU0MTZiYmE2N2Y1YTc1Mjk1YmIzOGRmZGIK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQt
cmVnaXN0ZXItcmVlbnRyYW50LXJldHVybmluZy1mYWtlLmh0bWwKQEAgLTAsMCArMSwyNiBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi9yZXNvdXJj
ZXMvZG9jdW1lbnQtcmVnaXN0ZXItZnV6ei5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxkaXYgaWQ9ImNvbnRhaW5lciI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIkZ1enpp
bmcgZG9jdW1lbnQucmVnaXN0ZXIoKSB0aHJvdWdoIGdldHRlcnMuIFBBU1MgdWxlc3MgY3Jhc2gu
Iik7CisKK3ZhciBiYWRQcm90b3R5cGUgPSBJbWFnZS5wcm90b3R5cGU7Cit2YXIgYmFkQ29uc3Ry
dWN0b3IgPSBJbWFnZS5wcm90b3R5cGUuY29uc3RydWN0b3I7CisKK3NldHVwT2JqZWN0SG9va3Mo
eworICAgIHByb3RvdHlwZUdldDogZnVuY3Rpb24oKSB7IHJldHVybiBiYWRQcm90b3R5cGU7IH0s
CisgICAgcHJvdG90eXBlU2V0OiBmdW5jdGlvbih2YWx1ZSkgeyAgfSwKKyAgICBjb25zdHJ1Y3Rv
ckdldDogZnVuY3Rpb24oKSB7IHJldHVybiBiYWRDb25zdHJ1Y3RvcjsgfSwKKyAgICBjb25zdHJ1
Y3RvclNldDogZnVuY3Rpb24odmFsdWUpIHsgIH0KK30pOworCitleGVyY2lzZURvY3VtZW50UmVn
aXN0ZXIoKTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFudC10aHJv
d2luZy1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0
b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVlbnRyYW50LXRocm93aW5nLWNvbnN0cnVjdG9yLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iMWZjOTI5NDE0ODZhNDdiYWY3ZGM3ZGY3ZmI1MGNjNTMzODdi
MThkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3Vt
ZW50LXJlZ2lzdGVyLXJlZW50cmFudC10aHJvd2luZy1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSwxMCBAQAorRnV6emluZyBkb2N1bWVudC5yZWdpc3RlcigpIHRocm91Z2ggZ2V0
dGVycy4gUEFTUyB1bGVzcyBjcmFzaC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisK
K0NvbnN0cnVjdG9yIG9iamVjdCBpc24ndCBjcmVhdGVkLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1yZWVudHJhbnQtdGhyb3dpbmctY29uc3Ry
dWN0b3IuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rl
ci1yZWVudHJhbnQtdGhyb3dpbmctY29uc3RydWN0b3IuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYmMyOTBl
ZDcxMzFiYTY4N2Q5NjAzY2Y5MmNjZjM5MDA0NmFmYjFiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFudC10aHJv
d2luZy1jb25zdHJ1Y3Rvci5odG1sCkBAIC0wLDAgKzEsMjMgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4vcmVzb3VyY2VzL2RvY3VtZW50LXJlZ2lz
dGVyLWZ1enouanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJjb250YWlu
ZXIiPjwvZGl2PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJGdXp6aW5nIGRvY3VtZW50LnJlZ2lz
dGVyKCkgdGhyb3VnaCBnZXR0ZXJzLiBQQVNTIHVsZXNzIGNyYXNoLiIpOworCitzZXR1cE9iamVj
dEhvb2tzKHsKKyAgICBwcm90b3R5cGVHZXQ6IGZ1bmN0aW9uKCkgeyB0aHJvdyAiRXJyb3IiOyB9
LAorICAgIHByb3RvdHlwZVNldDogZnVuY3Rpb24odmFsdWUpIHsgdGhyb3cgIkVycm9yIjsgfSwK
KyAgICBjb25zdHJ1Y3RvckdldDogZnVuY3Rpb24oKSB7IHRocm93ICJFcnJvciI7IH0sCisgICAg
Y29uc3RydWN0b3JTZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7IHRocm93ICJFcnJvciI7IH0KK30pOwor
CitleGVyY2lzZURvY3VtZW50UmVnaXN0ZXIoKTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL3Jlc291cmNlcy9k
b2N1bWVudC1yZWdpc3Rlci1mdXp6LmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL3Jl
c291cmNlcy9kb2N1bWVudC1yZWdpc3Rlci1mdXp6LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVkMmQzMzc5YmVk
OTI0MWZhYjIwNGRlNWMxNjM1NDY5MWVlZTk1ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9jdXN0b20vcmVzb3VyY2VzL2RvY3VtZW50LXJlZ2lzdGVyLWZ1enouanMK
QEAgLTAsMCArMSw0OSBAQAorCitmdW5jdGlvbiBzZXR1cE9iamVjdEhvb2tzKGhvb2tzKQorewor
ICAgIC8vIFdyYXBwZXIgZm9yIHRoZXNlIG9iamVjdCBzaG91bGQgYmUgbWF0ZXJpYWxpemVkIGJl
Zm9yZSBzZXR0aW5nIGhvb2tzLgorICAgIGNvbnNvbGUubG9nOworICAgIGRvY3VtZW50LndlYmtp
dFJlZ2lzdGVyCisgICAgSFRNTFNwYW5FbGVtZW50LnByb3RvdHlwZTsKKworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShPYmplY3QucHJvdG90eXBlLCAicHJvdG90eXBlIiwgeworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gaG9va3MucHJvdG90eXBlR2V0KCk7IH0sCisgICAgICAg
IHNldDogZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIGhvb2tzLnByb3RvdHlwZVNldCh2YWx1ZSk7
IH0KKyAgICB9KTsKKworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QucHJvdG90eXBl
LCAiY29uc3RydWN0b3IiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBob29r
cy5jb25zdHJ1Y3RvckdldCgpOyB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7IHJl
dHVybiBob29rcy5jb25zdHJ1Y3RvclNldCh2YWx1ZSk7IH0KKyAgICB9KTsKKworICAgIHJldHVy
biBob29rczsKK30KKworZnVuY3Rpb24gZXhlcmNpc2VEb2N1bWVudFJlZ2lzdGVyKCkKK3sKKyAg
ICB2YXIgbXlDb25zdHJ1Y3RvciA9IG51bGw7CisgICAgdmFyIG15UHJvdG90eXBlID0gT2JqZWN0
LmNyZWF0ZShIVE1MRWxlbWVudC5wcm90b3R5cGUpOworICAgIHRyeSB7CisgICAgICAgIG15Q29u
c3RydWN0b3IgPSBkb2N1bWVudC53ZWJraXRSZWdpc3RlcigieC1kby1ub3RoaW5nIiwgeyBwcm90
b3R5cGU6IG15UHJvdG90eXBlIH0pOworICAgIH0gY2F0Y2ggKGUpIHsgfQorCisgICAgdHJ5IHsK
KyAgICAgICAgaWYgKCFteUNvbnN0cnVjdG9yKSB7CisgICAgICAgICAgICBkZWJ1ZygiQ29uc3Ry
dWN0b3Igb2JqZWN0IGlzbid0IGNyZWF0ZWQuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBpZiAobXlDb25zdHJ1Y3Rvci5wcm90b3R5cGUgIT0gbXlQcm90b3R5
cGUpIHsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCJGQUlMOiBiYWQgcHJvdG90eXBlIik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICB9CisKKyAgICAgICAgdmFyIGVsZW1lbnQgPSBu
ZXcgbXlDb25zdHJ1Y3RvcigpOworICAgICAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGlmIChlbGVtZW50LmNvbnN0cnVjdG9yICE9IG15Q29uc3RydWN0b3Ip
IHsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCJGQUlMOiBiYWQgY29uc3RydWN0b3IiKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgIH0KKyAgICB9IGNhdGNoIChlKSB7IGNvbnNvbGUu
bG9nKGUpOyB9Cit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4
cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zCmlu
ZGV4IDgzYjgwYjU5NzQ1YzA5NmVhM2JiNzM0OWM0MTliNWMwMTczZmMxYjAuLjM5NDJiMWE4OTQ3
YjJkOGM0YmQyMDQ4Njk1OGRhMGZmNzhjODdiNmUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy9UZXN0RXhwZWN0YXRpb25zCkBAIC0xMTEyLDYgKzExMTIsOSBAQCB3ZWJraXQub3JnL2IvNzY0
ODkgY29tcG9zaXRpbmcvd2ViZ2wvd2ViZ2wtcmVmbGVjdGlvbi5odG1sIFsgSW1hZ2VPbmx5RmFp
bHVyZSBdCiB3ZWJraXQub3JnL2IvNzY0MzkgWyBEZWJ1ZyBdIGZhc3QvZG9tL3NoYWRvdy9jb250
ZW50LWVsZW1lbnQtYXBpLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi83NjQzOSBbIERl
YnVnIF0gZmFzdC9kb20vc2hhZG93L2NvbnRlbnQtZWxlbWVudC1vdXRzaWRlLXNoYWRvdy5odG1s
IFsgRmFpbHVyZSBdCiAKKyMgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykgaXMgZGlzYWJsZWQuCitm
YXN0L2RvbS9jdXN0b20KKwogIyBDU1MgVmFyaWFibGVzIGFyZSBub3QgeWV0IGVuYWJsZWQuCiB3
ZWJraXQub3JnL2IvODU1ODAgZmFzdC9jc3MvdmFyaWFibGVzCiB3ZWJraXQub3JnL2IvODU1ODAg
aW5zcGVjdG9yL3N0eWxlcy92YXJpYWJsZXMK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189963</attachid>
            <date>2013-02-24 01:27:29 -0800</date>
            <delta_ts>2013-02-24 05:23:32 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-100229-20130224182346.patch</filename>
            <type>text/plain</type>
            <size>94990</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzODYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTMxZDZlNWQ4ODUzNTA5
NWY3ZTY3MjQwNDY3OTBiYmJkMTRlNWI2ZC4uMjFlMDNkODUwNzJhYWRkMDQ0NDZhYWQzNjJlYjE2
MjQ3ZTJiNjhhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MCBAQAorMjAxMy0wMi0yMSAgSGFq
aW1lIE1vcnJpdGEgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgW0N1c3RvbSBFbGVt
ZW50c10gSW1wbGVtZW50IGJhcmUtYm9uZSBkb2N1bWVudC5yZWdpc3RlcigpCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDAyMjkKKworICAgICAgICBS
ZXZpZXdlZCBieSBBZGFtIEJhcnRoLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGltcGxlbWVudHMg
YSBwcmVmaXhlZCB2ZXJzaW9uIG9mIGRvY3VtZW50LnJlZ2lzdGVyKCksIHdpdGggbWluaW1hbCBm
ZWF0dXJlIHN1cHBvcnQuCisgICAgICAgIC0gVGhlIGZlYXR1cmUgaXMgZ3VhcmRlZCBieSBFTkFC
TEUoQ1VTVE9NX0VMRU1FTlRTKSBhbmQgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6Y3VzdG9tRE9N
RWxlbWVudHNFbmFibGVkKCkuCisgICAgICAgIC0gVGhpcyBiYXJlLWJvbmUgdmVyc2lvbiBvbmx5
IHJlY29nbml6ZXMgIm5hbWUiIGFuZCAicHJvdG90eXBlIiBwYXJhbWV0ZXJzLiBJdCBkb2Vzbid0
IHN1cHBvcnQgZGVmYXVsdCB2YWx1ZSBvZiAicHJvdG90eXBlIiBwYXJhbWV0ZXIuCisgICAgICAg
IC0gQ3VycmVudGx5IG9ubHkgVjggaXMgc3VwcG9ydGVkLiBKU0MgYmluZGluZyBuZWVkcyBpdHMg
b3duIGJpbmRpbmcgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgPSBNYWpvciBuZXcgY2xhc3Nl
cyB1bmRlciBkb20vOgorCisgICAgICAgIFRoZSBkb20gbW9kdWxlIGdldHMgdHdvIG5ldyBjbGFz
c2VzOgorICAgICAgICAtIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvcjogQSByZXR1cm4gdmFsdWUg
b2YgZG9jdW1lbnQucmVnaXN0ZXIoKQorICAgICAgICAgIHdoaWNoIGhvbGRzIHRoZSBjdXN0b20g
ZWxlbWVudCBkZWZpbml0aW9uLgorICAgICAgICAtIEN1c3RvbUVsZW1lbnRSZWdpc3RyeTogQSBj
b2xsZWN0aW9uIG9mIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciBvYmplY3RzLgorICAgICAgICAg
IEN1c3RvbUVsZW1lbnRSZWdpc3RyeSBpbnN0YW5jZSBpcyBjcmVhdGVkIHBlciBEb2N1bWVudCBh
bmQgaXMgb3duZWQgYnkgdGhlIERvY3VtZW50LgorCisgICAgICAgIEN1c3RvbUVsZW1lbnRDb25z
dHJ1Y3RvciBrbm93cyB0aGUgZGVmaW5pdGlvbiBvZiBlYWNoIGN1c3RvbQorICAgICAgICBlbGVt
ZW50LCB3aGljaCBpcyByZWdpc3RlcmVkIGJ5IGRvY3VtZW50LnJlZ2lzdGVyKCkuIFRoZSBuYW1l
IGFuZAorICAgICAgICBvdGhlciBvcHRpb25zIGFyZSBoZWxkIGJ5IHRoaXMgb2JqZWN0LiBDdXN0
b21FbGVtZW50UmVnaXN0cnkgb3ducyBhIHNldAorICAgICAgICBvZiB0aGUgcmVnaXN0ZXJlZCBj
b25zdHJ1Y3RvcnMuIFRoZSByZWdpc3RyeSBndWFyYW50ZWVzIGludmFyaWFudHMKKyAgICAgICAg
bGlrZSB2YWxpZGl0eSBhbmQgdW5pcXVlbmVzcyBvZiB0aGUgZWxlbWVudCBuYW1lcy4KKworICAg
ICAgICA9IEEgY2hhbmdlIG9uIG1ha2VfbmFtZXMucGwKKworICAgICAgICBUaGlzIGNoYW5nZSB0
d2Vha3MgbWFrZV9uYW1lcy5wbCAob3IgZ2VuZXJhdGVkIEhUTUxFbGVtZW50RmFjdG9yeSkKKyAg
ICAgICAgdG8gaG9vayB0aGUgY3JlYXRpb25zIG9mIHVua25vd24gZWxlbWVudHMuIFNvbWUgb2Yg
ZWxlbWVudCBuYW1lcworICAgICAgICB3aGljaCBjb21lIHRvIHRoZSBmYWxsYmFjayBwYXRoIGNh
biBiZSBvbmUgb2YgcmVnaXN0ZXJlZCBjdXN0b20KKyAgICAgICAgZWxlbWVudC4KKworICAgICAg
ICA9IFtWOFdyYXBBc0Z1bmN0aW9uXSBleHRlbmRlZCBhdHRyaWJ1dGU6CisKKyAgICAgICAgVGhl
IGRvY3VtZW50LnJlZ2lzdGVyKCkgQVBJIHJldHVybnMgYSBjb25zdHJ1Y3RvcgorICAgICAgICBm
dW5jdGlvbi4gSG93ZXZlciwgdGhlIFY4IGJpbmRpbmcgY3VycmVudGx5IGRvZXNuJ3Qgc3VwcG9y
dCBpdC4gVG8KKyAgICAgICAgbWFrZSBpdCBwb3NzaWJsZSwgdGhpcyBjaGFuZ2UgaW50cm9kdWNl
cyAiVjhXcmFwQXNGdW5jdGlvbiIKKyAgICAgICAgZXh0ZW5kZWQgYXR0cmlidXRlIGZvciBhbm5v
dGF0aW5nIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciBJREwKKyAgICAgICAgaW50ZXJmYWNlLgor
CisgICAgICAgIFY4V3JhcEFzRnVuY3Rpb24gd3JhcHMgdGhlIGFubm90YXRlZCBpbnRlcmZhY2Ug
d2l0aCBhIEphdmFTY3JpcHQKKyAgICAgICAgZnVuY3Rpb24sIHdoaWNoIGNhbGxzIHRoZSBvcmln
aW5hbCBvYmplY3QgYXMgYSBmdW5jdGlvbiwgb3IgYXMgYQorICAgICAgICBjb25zdHJ1Y3RvciBk
ZXBlbmRzIG9uIHRoZSBjb250ZXh0LgorCisgICAgICAgIFdpdGggdGhpcyB3cmFwcGVyIGZ1bmN0
aW9uLCB0aGVyZSBhcmUgdHdvIGxldmVscyBvZiBpbmRpcmVjdGlvbgorICAgICAgICBiZXR3ZWVu
IG5hdGl2ZSBDKysgb2JqZWN0IGFuZCBhdXRob3ItdmlzaWJsZSBKUyBmdW5jdGlvbjoKKworICAg
ICAgICBbSlMgQWRhcHRvciBGdW5jdGlvbl0gPC0oaGlkZGVuIHByb3BlcnR5KS0+IFtKUyBXcmFw
cGVyIE9iamVjdF0gLShpbnRlcm5hbCBmaWVsZCktPiBbQysrIE5hdGl2ZSBvYmplY3RdCisKKyAg
ICAgICAgVGhlIGNvZGUgZ2VuZXJhdG9yIGdlbmVyYXRlcyB0aGUgYmluZGluZyBjb2RlIHdoaWNo
IGRlYWxzIHdpdGgKKyAgICAgICAgdGhpcyBpbmRpcmVjdGlvbi4gIEFsc28sIHRoZXJlIGlzIGEg
c2V0IG9mIGhlbHBlciBmdW5jdGlvbnMgaW4KKyAgICAgICAgVjhBZGFwdG9yRnVuY3Rpb24uaC9j
cHAgd2hpY2ggdGFrZXMgY2FyZSBvZiB0aGlzIGluZGlyZWN0aW9uLgorICAgICAgICBWOERPTVdy
YXBwZXIuY3BwL2ggd29ya3MgYXMgYSBmYWNhZGUgZm9yIHRoZXNlIEFQSXMgYW5kIGlzIHVzZWQg
ZnJvbQorICAgICAgICB0aGUgZ2VuZXJhdGVkIGNvZGUuCisKKyAgICAgICAgVGhpcyByZWR1bmRh
bmN5IGNvbWVzIGZyb20gbGltaXRhdGlvbnMgb2YgYm90aCBWOCBiaW5kaW5ncyBhbmQgVjgKKyAg
ICAgICAgZW1iZWRkaW5nIEFQSS4gU2VlIGJ1ZyAxMDgxMzggZm9yIGRldGFpbHMuCisKKyAgICAg
ICAgPSBWOEhUTUxDdXN0b21FbGVtZW50CisKKyAgICAgICAgVW5saWtlIGJ1aWx0LWluIEhUTUwg
ZWxlbWVudHMsIGFueSBjdXN0b20gZWxlbWVudCBoYXMgbm8KKyAgICAgICAgY29ycmVzcG9uZGlu
ZyBDKysgY2xhc3MuIEluc3RlYWQsIGRvY3VtZW50LnJlZ2lzdGVyKCkgc2hvdWxkIGFsbG93Cisg
ICAgICAgIHBhc3NpbmcgYSBwcm90b3R5cGUgb2JqZWN0IGZvciB0aGUgZWxlbWVudHMgYmVpbmcg
cmVnaXN0ZXJlZC4KKworICAgICAgICBWOEhUTUxDdXN0b21FbGVtZW50IGhhbmRsZXMgdGhpcyBs
YWNrIG9mIG5hdGl2ZSBjbGFzcy4gIEl0IGJlaGF2ZXMKKyAgICAgICAgbGlrZSBhIG5hdGl2ZSBz
aWRlIHByb3h5IG9mIG5vbi1uYXRpdmUgSFRNTEVsZW1lbnQgc3ViY2xhc3Nlcy4gIEl0CisgICAg
ICAgIGNvbm5lY3RzIGVhY2ggY3VzdG9tIGVsZW1lbnQgdG8gYW4gYXBwcm9wcmlhdGUgbmF0aXZl
IGVsZW1lbnQsCisgICAgICAgIHdoaWNoIGlzIEhUTUxFbGVtZW50IGF0IHRoaXMgdGltZS4gVGhp
cyByZXN0cmljdGlvbiB3aWxsIGJlCisgICAgICAgIHJlbGF4ZWQgbGF0ZXIuIFNlZSBCdWcgMTEw
NDM2IGZvciBkZXRhaWxzLgorCisgICAgICAgID0gQ3VzdG9tIERPTSBlbGVtZW50cyBhbmQgbXVs
dGlwbGUgd29ybGRzCisKKyAgICAgICAgSW4gdGhpcyBwYXRjaCwgY3VzdG9tIGVsZW1lbnQgcmVn
aXN0cmF0aW9uIGFuZCBpbnN0YW50aWF0aW9uIGlzIG5vdCBhbGxvd2VkCisgICAgICAgIGluIG5v
bi1tYWluIHdvcmxkIGFuZCBkb2N1bWVudC5yZWdpc3RlcigpIEFQSSBqdXN0IGZhaWxzIHRoZXJl
LgorCisgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCisKKyAgICAgICAgVGVzdHM6IGZh
c3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1iYXNpYy5odG1sCisgICAgICAgICAgICAg
ICBmYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVlbnRyYW50LW51bGwtY29uc3Ry
dWN0b3IuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lz
dGVyLXJlZW50cmFudC1yZXR1cm5pbmctZmFrZS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2Rv
bS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVlbnRyYW50LXRocm93aW5nLWNvbnN0cnVjdG9y
Lmh0bWwKKworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogV2ViQ29y
ZS5neXBpOgorICAgICAgICAqIGJpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJl
cy5jcHA6CisgICAgICAgICogYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVz
Lmg6CisgICAgICAgIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmN1c3RvbURPTUVsZW1lbnRzRW5hYmxlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzZXRDdXN0b21ET01FbGVtZW50
cyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAg
ICAgIChHZW5lcmF0ZUhlYWRlcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRy
aWJ1dGVzLnR4dDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9DdXN0b21FbGVtZW50SGVscGVycy5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudEhlbHBlcnM6OmluaXRp
YWxpemVDb25zdHJ1Y3RvcldyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6aGFzTm9CdWlsdGlu
c0luUHJvdG90eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRIZWxwZXJzOjpp
c1ZhbGlkUHJvdG90eXBlUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1l
bnRIZWxwZXJzOjppc0ZlYXR1cmVBbGxvd2VkKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9DdXN0
b21FbGVtZW50SGVscGVycy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oLgorICAgICAgICAoQ3VzdG9tRWxlbWVudEhlbHBlcnMp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpWOEFkYXB0b3JGdW5jdGlvbjo6Z2V0VGVtcGxhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VjhBZGFwdG9yRnVuY3Rpb246OmNvbmZpZ3VyZVRlbXBsYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlY4QWRhcHRvckZ1bmN0aW9uOjppbnZvY2F0aW9uQ2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6VjhBZGFwdG9yRnVuY3Rpb246OndyYXApOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmg6IEFkZGVkLgorICAgICAgICAoVjhBZGFwdG9yRnVu
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6VjhBZGFwdG9yRnVuY3Rpb246OnVud3JhcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpWOEFkYXB0b3JGdW5jdGlvbjo6Z2V0KToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9WOERPTUNvbmZpZ3VyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhET01D
b25maWd1cmF0aW9uOjpjb25maWd1cmVUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvdjgv
VjhET01XcmFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6dG9GdW5j
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OmZyb21GdW5jdGlvbik6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmg6CisgICAgICAgIChWOERPTVdyYXBw
ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4SFRNTEN1c3RvbUVsZW1lbnQuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlY4SFRNTEN1c3RvbUVsZW1lbnQ6OmNyZWF0ZVdyYXBwZXIp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4SFRNTEN1c3RvbUVsZW1lbnQuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaC4KKyAg
ICAgICAgKFY4SFRNTEN1c3RvbUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6VjhIVE1MQ3Vz
dG9tRWxlbWVudDo6dG9WOCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ3VzdG9tRWxlbWVudDo6
dG9WOCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaDoKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21FbGVtZW50Q29uc3RydWN0b3JDdXN0
b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9tRWxlbWVudENvbnN0cnVj
dG9yOjpjYWxsQXNGdW5jdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKiBkb20vQ3VzdG9tRWxlbWVu
dENvbnN0cnVjdG9yLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaC4KKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRD
b25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRDb25z
dHJ1Y3Rvcjo6Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkN1
c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6fkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50Q29uc3RydWN0b3I6OmNyZWF0ZUVsZW1lbnQpOgor
ICAgICAgICAqIGRvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaC4KKyAgICAgICAg
KEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVt
ZW50Q29uc3RydWN0b3I6OmRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1l
bnRDb25zdHJ1Y3Rvcjo6dGFnTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50
Q29uc3RydWN0b3I6Om5hbWUpOgorICAgICAgICAqIGRvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0
b3IuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBkb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVnaXN0cnk6OkN1c3RvbUVs
ZW1lbnRSZWdpc3RyeSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVnaXN0cnk6
On5DdXN0b21FbGVtZW50UmVnaXN0cnkpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVu
dFJlZ2lzdHJ5Ojpjb25zdHJ1Y3Rvck9mKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1l
bnRSZWdpc3RyeTo6aXNWYWxpZE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVu
dFJlZ2lzdHJ5OjpyZWdpc3RlckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxl
bWVudFJlZ2lzdHJ5OjpmaW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWdp
c3RyeTo6Y3JlYXRlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVn
aXN0cnk6OmRvY3VtZW50KToKKyAgICAgICAgKiBkb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Lmg6
IEFkZGVkLgorICAgICAgICAoQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5KToKKyAgICAgICAgKiBkb20v
RG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlbW92ZWRMYXN0UmVm
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWdpc3RlckVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlZ2lzdHJ5KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQu
aDoKKyAgICAgICAgKERvY3VtZW50KToKKyAgICAgICAgKiBkb20vbWFrZV9uYW1lcy5wbDoKKyAg
ICAgICAgKHByaW50V3JhcHBlckZhY3RvcnlDcHBGaWxlKToKKyAgICAgICAgKiBodG1sL0hUTUxE
b2N1bWVudC5pZGw6CisKIDIwMTMtMDItMjMgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmVzb3VyY2VSZXF1ZXN0QmFzZSB1bm5lY2Vzc2FyaWx5IHVwZGF0
ZXMgd2hlbiBub3RoaW5nIGNoYW5nZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMTdm
N2UxMjY4MzllOTQwYWNkYjczNjQwYWU2YjYzYzY3OTU4MzRlOS4uNGZmN2YxMTRjZjllN2QwZWYx
NmUwN2IzYTMyMjU4YTY4Njg1ZmVlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMCBAQAorMjAxMy0wMi0yMSAgSGFqaW1lIE1vcnJpdGEgIDxtb3JyaXRhQGdvb2dsZS5j
b20+CisKKyAgICAgICAgW0N1c3RvbSBFbGVtZW50c10gSW1wbGVtZW50IGJhcmUtYm9uZSBkb2N1
bWVudC5yZWdpc3RlcigpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDAyMjkKKworICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgorCisgICAg
ICAgIEFkZGVkIGVuYWJsZUN1c3RvbURPTUVsZW1lbnRzIGZsYWcuCisKKyAgICAgICAgKiBmZWF0
dXJlcy5neXBpOgorICAgICAgICAqIHB1YmxpYy9XZWJSdW50aW1lRmVhdHVyZXMuaDoKKyAgICAg
ICAgKFdlYlJ1bnRpbWVGZWF0dXJlcyk6CisgICAgICAgICogc3JjL1dlYlJ1bnRpbWVGZWF0dXJl
cy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlQ3VzdG9t
RE9NRWxlbWVudHMpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUnVu
dGltZUZlYXR1cmVzOjppc0N1c3RvbURPTUVsZW1lbnRzRW5hYmxlZCk6CisKIDIwMTMtMDItMjMg
IE1hcmsgUGlsZ3JpbSAgPHBpbGdyaW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1
bV0gV2ViS2l0Ojppbml0aWFsaXplIHNob3VsZCB0YWtlIGEgUGxhdGZvcm0qIG5vdyB0aGF0IFdl
YktpdFBsYXRmb3JtU3VwcG9ydCBpcyBlbXB0eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
RGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UK
aW5kZXggMjRlZWNmMWIxY2M0NjdhYjRjOTJmYzIzOTVlYTQzMWFlODMxNGRmNC4uNDc2YWQ4ZWJl
ZWE4NzRkNTEzNWYxZjIxMGZkY2U2NTJhMzIxOGIzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNl
cy5tYWtlCkBAIC0yMjAsNiArMjIwLDcgQEAgQklORElOR19JRExTID0gXAogICAgICQoV2ViQ29y
ZSkvZG9tL0NsaXBib2FyZC5pZGwgXAogICAgICQoV2ViQ29yZSkvZG9tL0NvbW1lbnQuaWRsIFwK
ICAgICAkKFdlYkNvcmUpL2RvbS9Db21wb3NpdGlvbkV2ZW50LmlkbCBcCisgICAgJChXZWJDb3Jl
KS9kb20vQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmlkbCBcCiAgICAgJChXZWJDb3JlKS9kb20v
Q3VzdG9tRXZlbnQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2RvbS9ET01Db3JlRXhjZXB0aW9uLmlk
bCBcCiAgICAgJChXZWJDb3JlKS9kb20vRE9NRXJyb3IuaWRsIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRl
eCAyOGI3OGNhZDI5OTM0ZGZkNzNlZWUzYWVhZmUwZDU1YTBlNTA1MzA0Li5mYjY5MDcxNjNmNmE5
YjMyNzMxMzE3NWZlODUwMmUwNGQ0ZDI4YzE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yMDAsNiAr
MjAwLDcgQEAKICAgICAgICAgICAgICdkb20vQ2xpcGJvYXJkLmlkbCcsCiAgICAgICAgICAgICAn
ZG9tL0NvbW1lbnQuaWRsJywKICAgICAgICAgICAgICdkb20vQ29tcG9zaXRpb25FdmVudC5pZGwn
LAorICAgICAgICAgICAgJ2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaWRsJywKICAgICAg
ICAgICAgICdkb20vQ3VzdG9tRXZlbnQuaWRsJywKICAgICAgICAgICAgICdkb20vRE9NQ29yZUV4
Y2VwdGlvbi5pZGwnLAogICAgICAgICAgICAgJ2RvbS9ET01FcnJvci5pZGwnLApAQCAtMTE5MSw2
ICsxMTkyLDggQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9BcnJheVZhbHVlLmgnLAogICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L0JpbmRpbmdTdGF0ZS5jcHAnLAogICAgICAgICAgICAgJ2Jp
bmRpbmdzL3Y4L0JpbmRpbmdTdGF0ZS5oJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9DdXN0
b21FbGVtZW50SGVscGVycy5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0N1c3RvbUVs
ZW1lbnRIZWxwZXJzLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5j
cHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5oJywKICAgICAgICAg
ICAgICdiaW5kaW5ncy92OC9ET01SZXF1ZXN0U3RhdGUuaCcsCkBAIC0xMjU5LDYgKzEyNjIsOCBA
QAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1NoYXJlZFBlcnNpc3RlbnQuaCcsCiAgICAgICAg
ICAgICAnYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuY3BwJywKICAgICAgICAg
ICAgICdiaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5oJywKKyAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5jcHAnLAorICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4
QmluZGluZy5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9WOEJpbmRpbmdNYWNyb3MuaCcsCkBAIC0xMjgwLDYgKzEy
ODUsOCBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmgnLAogICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4R0NGb3JDb250ZXh0RGlzcG9zZS5jcHAnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L1Y4R0NGb3JDb250ZXh0RGlzcG9zZS5oJywKKyAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9WOEhUTUxDdXN0b21FbGVtZW50LmNwcCcsCisgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVudC5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92
OC9WOEhpZGRlblByb3BlcnR5TmFtZS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4
SGlkZGVuUHJvcGVydHlOYW1lLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4SW5pdGlh
bGl6ZXIuY3BwJywKQEAgLTEzNDAsNiArMTM0Nyw3IEBACiAgICAgICAgICAgICAnYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q29uc29sZUN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOENvb3JkaW5hdGVzQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q3J5cHRvQ3VzdG9tLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yQ3VzdG9tLmNwcCcsCiAgICAgICAgICAg
ICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tRXZlbnRDdXN0b20uY3BwJywKICAgICAgICAg
ICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNr
LmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tWFBhdGhOU1Jl
c29sdmVyLmNwcCcsCkBAIC0yNzczLDYgKzI3ODEsMTAgQEAKICAgICAgICAgICAgICdkb20vQ29u
dGV4dEZlYXR1cmVzLmNwcCcsCiAgICAgICAgICAgICAnZG9tL0NvbnRleHRGZWF0dXJlcy5oJywK
ICAgICAgICAgICAgICdkb20vQ3Jvc3NUaHJlYWRUYXNrLmgnLAorICAgICAgICAgICAgJ2RvbS9D
dXN0b21FbGVtZW50Q29uc3RydWN0b3IuY3BwJywKKyAgICAgICAgICAgICdkb20vQ3VzdG9tRWxl
bWVudENvbnN0cnVjdG9yLmgnLAorICAgICAgICAgICAgJ2RvbS9DdXN0b21FbGVtZW50UmVnaXN0
cnkuY3BwJywKKyAgICAgICAgICAgICdkb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmgnLAogICAg
ICAgICAgICAgJ2RvbS9DdXN0b21FdmVudC5jcHAnLAogICAgICAgICAgICAgJ2RvbS9DdXN0b21F
dmVudC5oJywKICAgICAgICAgICAgICdkb20vRE9NQWxsSW5PbmUuY3BwJywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVy
ZXMuY3BwCmluZGV4IDJhMmRhNmZlYjQ3NzFmM2QzN2Q2ZDYzODM1OTRkNTJkNTMyMWU1MGYuLmY0
MTE0M2VhZDY4MDM4MWVhYzYyOWI4ZDVmN2EwODgyYTQ0MTAxZjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVz
LmNwcApAQCAtMTkwLDYgKzE5MCwxMCBAQCBib29sIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6Omlz
U2hhZG93RE9NRW5hYmxlZCA9IGZhbHNlOwogYm9vbCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpp
c0F1dGhvclNoYWRvd0RPTUZvckFueUVsZW1lbnRFbmFibGVkID0gZmFsc2U7CiAjZW5kaWYKIAor
I2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCitib29sIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OmlzQ3VzdG9tRE9NRWxlbWVudHNFbmFibGVkID0gZmFsc2U7CisjZW5kaWYKKwogI2lmIEVOQUJM
RShTVFlMRV9TQ09QRUQpCiBib29sIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmlzU3R5bGVTY29w
ZWRFbmFibGVkID0gZmFsc2U7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgKaW5kZXggY2VjNjQxOTVl
YWM5MTJjNzA1ZDI0M2FiOWJkYWY2Mzk1ZmY1OTg0Mi4uMjUzN2U4YzM5N2I1OGE0ZDM1NDM2ZTAy
NmJlMjk5MWQ4M2IzMTU4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2Vu
ZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgKQEAgLTIxOCw2ICsyMTgsMTEgQEAg
cHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldEF1dGhvclNoYWRvd0RPTUZvckFueUVsZW1lbnRF
bmFibGVkKGJvb2wgaXNFbmFibGVkKSB7IGlzQXV0aG9yU2hhZG93RE9NRm9yQW55RWxlbWVudEVu
YWJsZWQgPSBpc0VuYWJsZWQ7IH0KICNlbmRpZgogCisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5U
UykKKyAgICBzdGF0aWMgYm9vbCBjdXN0b21ET01FbGVtZW50c0VuYWJsZWQoKSB7IHJldHVybiBp
c0N1c3RvbURPTUVsZW1lbnRzRW5hYmxlZDsgfQorICAgIHN0YXRpYyB2b2lkIHNldEN1c3RvbURP
TUVsZW1lbnRzKGJvb2wgaXNFbmFibGVkKSB7IGlzQ3VzdG9tRE9NRWxlbWVudHNFbmFibGVkID0g
aXNFbmFibGVkOyB9CisjZW5kaWYKKwogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCiAgICAgc3Rh
dGljIGJvb2wgc3R5bGVTY29wZWRFbmFibGVkKCkgeyByZXR1cm4gaXNTdHlsZVNjb3BlZEVuYWJs
ZWQ7IH0KICAgICBzdGF0aWMgdm9pZCBzZXRTdHlsZVNjb3BlZEVuYWJsZWQoYm9vbCBpc0VuYWJs
ZWQpIHsgaXNTdHlsZVNjb3BlZEVuYWJsZWQgPSBpc0VuYWJsZWQ7IH0KQEAgLTM0Myw2ICszNDgs
MTAgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCBpc0F1dGhvclNoYWRvd0RPTUZvckFueUVs
ZW1lbnRFbmFibGVkOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorICAg
IHN0YXRpYyBib29sIGlzQ3VzdG9tRE9NRWxlbWVudHNFbmFibGVkOworI2VuZGlmCisKICNpZiBF
TkFCTEUoU1RZTEVfU0NPUEVEKQogICAgIHN0YXRpYyBib29sIGlzU3R5bGVTY29wZWRFbmFibGVk
OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JWOC5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvclY4LnBtCmluZGV4IDQxNGIxN2EyOTJiNTVkMjg2ZGI3ZDNlOTIxZDNhZmNmNjJjZTBi
ODMuLjNiNWNiZjBlYTMxZjI5NTA0YzZhYzQ2MTM0ODRiNWZmZDU2ODJjMzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCkBAIC0z
NTIsMTMgKzM1MiwyMCBAQCBFTkQKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgImZhbHNl
O1xuIik7CiAgICAgfQogCisgICAgbXkgJGZyb21GdW5jdGlvbk9wZW5pbmcgPSAiIjsKKyAgICBt
eSAkZnJvbUZ1bmN0aW9uQ2xvc2luZyA9ICIiOworICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiVjhXcmFwQXNGdW5jdGlvbiJ9KSB7CisgICAgICAgICRmcm9tRnVuY3Rp
b25PcGVuaW5nID0gIlY4RE9NV3JhcHBlcjo6ZnJvbUZ1bmN0aW9uKCI7CisgICAgICAgICRmcm9t
RnVuY3Rpb25DbG9zaW5nID0gIikiOworICAgIH0KKwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
IDw8RU5EKTsKICAgICBzdGF0aWMgYm9vbCBIYXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4sIHY4OjpJc29sYXRlKik7CiAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPiBHZXRSYXdUZW1wbGF0ZSh2ODo6SXNvbGF0ZSopOwogICAgIHN0YXRpYyB2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0VGVtcGxhdGUodjg6Oklzb2xhdGUq
KTsKICAgICBzdGF0aWMgJHtuYXRpdmVUeXBlfSogdG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBvYmplY3QpCiAgICAgewotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwke25h
dGl2ZVR5cGV9Kj4ob2JqZWN0LT5HZXRBbGlnbmVkUG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4
RE9NV3JhcHBlck9iamVjdEluZGV4KSk7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PCR7bmF0aXZlVHlwZX0qPigke2Zyb21GdW5jdGlvbk9wZW5pbmd9b2JqZWN0JHtmcm9tRnVuY3Rp
b25DbG9zaW5nfS0+R2V0QWxpZ25lZFBvaW50ZXJGcm9tSW50ZXJuYWxGaWVsZCh2OERPTVdyYXBw
ZXJPYmplY3RJbmRleCkpOwogICAgIH0KICAgICBzdGF0aWMgdm9pZCBkZXJlZk9iamVjdCh2b2lk
Kik7CiAgICAgc3RhdGljIFdyYXBwZXJUeXBlSW5mbyBpbmZvOwpAQCAtNTM5LDYgKzU0Niw5IEBA
IEVORAogICAgIH0gZWxzZSB7CiAKICAgICAgICAgbXkgJGNyZWF0ZVdyYXBwZXJDYWxsID0gJGN1
c3RvbVdyYXAgPyAiJHt2OEludGVyZmFjZU5hbWV9Ojp3cmFwIiA6ICIke3Y4SW50ZXJmYWNlTmFt
ZX06OmNyZWF0ZVdyYXBwZXIiOworICAgICAgICBteSAkcmV0dXJuaW5nV3JhcHBlciA9ICRpbnRl
cmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJWOFdyYXBBc0Z1bmN0aW9uIn0gPyAiVjhET01X
cmFwcGVyOjp0b0Z1bmN0aW9uKHdyYXBwZXIpIiA6ICJ3cmFwcGVyIjsKKyAgICAgICAgbXkgJHJl
dHVybmluZ0NyZWF0ZWRXcmFwcGVyT3BlbmluZyA9ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJWOFdyYXBBc0Z1bmN0aW9uIn0gPyAiVjhET01XcmFwcGVyOjp0b0Z1bmN0aW9uKCIg
OiAiIjsKKyAgICAgICAgbXkgJHJldHVybmluZ0NyZWF0ZWRXcmFwcGVyQ2xvc2luZyA9ICRpbnRl
cmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJWOFdyYXBBc0Z1bmN0aW9uIn0gPyAiLCBpbXBs
LT5uYW1lKCksIGlzb2xhdGUpIiA6ICIiOwogCiAgICAgICAgIGlmICgkY3VzdG9tV3JhcCkgewog
ICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgPDxFTkQpOwpAQCAtNTUyLDcgKzU2Miw3
IEBAIGlubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoJHtuYXRpdmVUeXBlfSogaW1w
bCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjCiB7CiAgICAgQVNTRVJUKGltcGwpOwogICAgIEFT
U0VSVChET01EYXRhU3RvcmU6OmdldFdyYXBwZXIoaW1wbCwgaXNvbGF0ZSkuSXNFbXB0eSgpKTsK
LSAgICByZXR1cm4gJGNyZWF0ZVdyYXBwZXJDYWxsKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNv
bGF0ZSk7CisgICAgcmV0dXJuICR7cmV0dXJuaW5nQ3JlYXRlZFdyYXBwZXJPcGVuaW5nfSRjcmVh
dGVXcmFwcGVyQ2FsbChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpJHtyZXR1cm5pbmdD
cmVhdGVkV3JhcHBlckNsb3Npbmd9OwogfQogRU5ECiAgICAgICAgIH0KQEAgLTU2NSw3ICs1NzUs
NyBAQCBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoJHtuYXRpdmVUeXBlfSogaW1w
bCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcgogICAgICAgICByZXR1cm4gdjhOdWxsV2l0aENo
ZWNrKGlzb2xhdGUpOwogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyID0gRE9NRGF0
YVN0b3JlOjpnZXRXcmFwcGVyKGltcGwsIGlzb2xhdGUpOwogICAgIGlmICghd3JhcHBlci5Jc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiB3cmFwcGVyOworICAgICAgICByZXR1cm4gJHJldHVybmlu
Z1dyYXBwZXI7CiAgICAgcmV0dXJuIHdyYXAoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRl
KTsKIH0KIApAQCAtNTc2LDcgKzU4Niw3IEBAIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
dG9WOEZhc3QoJHtuYXRpdmVUeXBlfSogaW1wbCwgY29uc3QgSG9sZGVyQ29udGFpbmVyCiAgICAg
ICAgIHJldHVybiB2OE51bGwoY29udGFpbmVyLkdldElzb2xhdGUoKSk7CiAgICAgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyRmFzdChpbXBs
LCBjb250YWluZXIsIHdyYXBwYWJsZSk7CiAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgICAgIHJldHVybiAkcmV0dXJuaW5nV3JhcHBlcjsK
ICAgICByZXR1cm4gd3JhcChpbXBsLCBjb250YWluZXIuSG9sZGVyKCksIGNvbnRhaW5lci5HZXRJ
c29sYXRlKCkpOwogfQogRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9JRExBdHRyaWJ1dGVzLnR4dAppbmRleCBjNjM2NDRmYmU5NjUyOWRmNzhhMjM4MzBhNTZiNjQx
YTJkYmVkZDA3Li4xODYxMTE4MTUwOWVjM2I1Y2M3NGMwYTlmMzA4YjZiMDU5OGNhMzQyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQK
QEAgLTEyOSwzICsxMjksNCBAQCBWOE1lYXN1cmVBcz0qCiBWOFJlYWRPbmx5CiBWOFNraXBWVGFi
bGVWYWxpZGF0aW9uCiBWOFVuZm9yZ2VhYmxlCitWOFdyYXBBc0Z1bmN0aW9uCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9DdXN0b21FbGVtZW50SGVscGVycy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9DdXN0b21FbGVtZW50SGVscGVycy5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMjU4YjkxNDg2NDM4ZWE2NjU2NDQyN2FjNTAxOTFjNWIzODU5ZGE2MQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0N1c3RvbUVsZW1lbnRIZWxwZXJz
LmNwcApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDdXN0
b21FbGVtZW50SGVscGVycy5oIgorCisjaW5jbHVkZSAiRE9NV3JhcHBlcldvcmxkLmgiCisjaW5j
bHVkZSAiVjhDdXN0b21FbGVtZW50Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJWOEhUTUxQYXJh
Z3JhcGhFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhIVE1MU3BhbkVsZW1lbnQuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKworYm9vbCBDdXN0
b21FbGVtZW50SGVscGVyczo6aW5pdGlhbGl6ZUNvbnN0cnVjdG9yV3JhcHBlcihDdXN0b21FbGVt
ZW50Q29uc3RydWN0b3IqIGNvbnN0cnVjdG9yLCBjb25zdCBTY3JpcHRWYWx1ZSYgcHJvdG90eXBl
LCBTY3JpcHRTdGF0ZSogc3RhdGUpCit7CisgICAgQVNTRVJUKGlzRmVhdHVyZUFsbG93ZWQoc3Rh
dGUpKTsKKyAgICBBU1NFUlQoIXByb3RvdHlwZS52OFZhbHVlKCkuSXNFbXB0eSgpICYmIHByb3Rv
dHlwZS52OFZhbHVlKCktPklzT2JqZWN0KCkpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3
cmFwcGVyVmFsdWUgPSB0b1Y4KGNvbnN0cnVjdG9yLCBzdGF0ZS0+Y29udGV4dCgpLT5HbG9iYWwo
KSwgc3RhdGUtPmNvbnRleHQoKS0+R2V0SXNvbGF0ZSgpKTsKKyAgICBpZiAod3JhcHBlclZhbHVl
LklzRW1wdHkoKSB8fCAhd3JhcHBlclZhbHVlLT5Jc09iamVjdCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IHdyYXBwZXIgPSB2ODo6SGFuZGxl
PHY4OjpGdW5jdGlvbj46OkNhc3Qod3JhcHBlclZhbHVlKTsKKyAgICAvLyAtIE9iamVjdDo6Rm9y
Y2VTZXQoKSBub3IgT2JqZWN0OjpTZXRBY2Nlc3NvciBEb2Vzbid0IHdvcmsgYWdhaW5zdCB0aGUg
InByb3RvdHlwZSIgcHJvcGVydHkgb2YgZnVuY3Rpb24gb2JqZWN0cy4KKyAgICAvLyAtIFNldCgp
LWluZyBoZXJlIGlzIHNhZmUgYmVjYXVzZQorICAgIC8vICAgLSBIb29raW5nIE9iamVjdC5wcm90
b3R5cGUncyBkZWZpbmVQcm9wZXJ0eSgpIHdpdGggInByb3RvdHlwZSIgb3IgImNvbnN0cnVjdG9y
IiBhbHNvIGRvZXNuJ3QgYWZmZWN0IG9uIHRoZXNlIHByb3BlcnRpZXMgb2YgZnVuY3Rpb24gb2Jq
ZWN0cyBhbmQKKyAgICAvLyAgIC0gVXNpbmcgU2V0KCkgaXMgb2theSBiZWNhdWVzIGVhY2ggZnVu
Y3Rpb24gaGFzICJwcm90b3R5cGUiIHByb3BlcnR5IGZyb20gc3RhcnQgYW5kIE9iamVjdHMucHJv
dG90eXBlIGNhbm5vdCBpbnRlcmNlcHQgdGhlIHByb3BlcnR5IGFjY2Vzcy4KKyAgICB2ODo6SGFu
ZGxlPHY4OjpTdHJpbmc+IHByb3RvdHlwZUtleSA9IHY4U3RyaW5nKCJwcm90b3R5cGUiLCBzdGF0
ZS0+Y29udGV4dCgpLT5HZXRJc29sYXRlKCkpOworICAgIEFTU0VSVCh3cmFwcGVyLT5IYXNPd25Q
cm9wZXJ0eShwcm90b3R5cGVLZXkpKTsKKyAgICB3cmFwcGVyLT5TZXQocHJvdG90eXBlS2V5LCBw
cm90b3R5cGUudjhWYWx1ZSgpLCB2ODo6UmVhZE9ubHkpOworCisgICAgdjg6OkhhbmRsZTx2ODo6
U3RyaW5nPiBjb25zdHJ1Y3RvcktleSA9IHY4U3RyaW5nKCJjb25zdHJ1Y3RvciIsIHN0YXRlLT5j
b250ZXh0KCktPkdldElzb2xhdGUoKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBwcm90
b3R5cGVPYmplY3QgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHByb3RvdHlwZS52OFZh
bHVlKCkpOworICAgIEFTU0VSVCghcHJvdG90eXBlT2JqZWN0LT5IYXNPd25Qcm9wZXJ0eShjb25z
dHJ1Y3RvcktleSkpOworICAgIHByb3RvdHlwZU9iamVjdC0+Rm9yY2VTZXQoY29uc3RydWN0b3JL
ZXksIHdyYXBwZXIsIHY4OjpSZWFkT25seSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIFNl
ZSBGSVhNRSBvbiB0aGUgY2FsbGVyIHNpZGUgY29tbWVudC4KK3N0YXRpYyBib29sIGhhc05vQnVp
bHRpbnNJblByb3RvdHlwZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGh0bWxQcm90b3R5cGUsIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBjaGFpbikKK3sKKyAgICB3aGlsZSAoIWNoYWluLklzRW1wdHko
KSkgeworICAgICAgICBpZiAoY2hhaW4gPT0gaHRtbFByb3RvdHlwZSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBpZiAoIWNoYWluLT5Jc09iamVjdCgpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAvLyBUaGUgaW50ZXJuYWwgZmllbGQgY291bnQgaW5kaWNh
dGVzIHRoZSBvYmplY3QgbWlnaHQgYmUgYSBuYXRpdmUgYmFja2VkLCBidWlsdC1pbiBvYmplY3Qu
CisgICAgICAgIGlmICh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGNoYWluKS0+SW50ZXJu
YWxGaWVsZENvdW50KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNoYWlu
ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChjaGFpbiktPkdldFByb3RvdHlwZSgpOwor
ICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBDdXN0b21FbGVtZW50SGVscGVy
czo6aXNWYWxpZFByb3RvdHlwZVBhcmFtZXRlcihjb25zdCBTY3JpcHRWYWx1ZSYgcHJvdG90eXBl
LCBTY3JpcHRTdGF0ZSogc3RhdGUpCit7CisgICAgaWYgKHByb3RvdHlwZS52OFZhbHVlKCkuSXNF
bXB0eSgpIHx8ICFwcm90b3R5cGUudjhWYWx1ZSgpLT5Jc09iamVjdCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAvLyBkb2N1bWVudC5yZWdpc3RlcigpIHNldHMgdGhlIGNvbnN0cnVj
dG9yIHByb3BlcnR5LCBzbyB0aGUgcHJvdG90eXBlIHNob3VsZG4ndCBoYXZlIG9uZS4KKyAgICB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHByb3RvdHlwZU9iamVjdCA9IHY4OjpIYW5kbGU8djg6Ok9i
amVjdD46OkNhc3QocHJvdG90eXBlLnY4VmFsdWUoKSk7CisgICAgaWYgKHByb3RvdHlwZU9iamVj
dC0+SGFzT3duUHJvcGVydHkodjhTdHJpbmcoImNvbnN0cnVjdG9yIiwgc3RhdGUtPmNvbnRleHQo
KS0+R2V0SXNvbGF0ZSgpKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBWOFBlckNvbnRl
eHREYXRhKiBwZXJDb250ZXh0RGF0YSA9IFY4UGVyQ29udGV4dERhdGE6OmZyb20oc3RhdGUtPmNv
bnRleHQoKSk7CisgICAgLy8KKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExMDQzNgorICAgIC8vICAgZG9jdW1lbnQucmVnaXN0ZXIoKSBzaG91
bGQgYWxsb3cgYXJiaXRyYXJ5IEhUTUxFbGVtZW50IHN1YmNsYXNzc2VzLgorICAgIC8vICAgQ3Vy
cmVudGx5IGl0IHN1cHBvcnRzIGN1c3RvbSBlbGVtZW50cyB3aGljaCBhcmUKKyAgICAvLyAgIC0g
ZGlyZWN0IHN1YmNsYXNzZXMgb2YgSFRNTEVsZW1lbnQgb3IKKyAgICAvLyAgIC0gc3ViY2xhc3Nl
cyBvZiBvdGhlciBjdXN0b20gZWxlbWVudHMKKyAgICAvLworICAgIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gaHRtbENvbnN0cnVjdG9yID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChwZXJD
b250ZXh0RGF0YS0+Y29uc3RydWN0b3JGb3JUeXBlKCZWOEhUTUxFbGVtZW50OjppbmZvKSk7Cisg
ICAgaWYgKGh0bWxDb25zdHJ1Y3Rvci5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGh0bWxQcm90b3R5cGUgPSB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+OjpDYXN0KGh0bWxDb25zdHJ1Y3Rvci0+R2V0KHY4U3RyaW5nKCJwcm90b3R5cGUi
LCBzdGF0ZS0+Y29udGV4dCgpLT5HZXRJc29sYXRlKCkpKSk7CisgICAgaWYgKGh0bWxQcm90b3R5
cGUuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFoYXNOb0J1aWx0
aW5zSW5Qcm90b3R5cGUoaHRtbFByb3RvdHlwZSwgcHJvdG90eXBlT2JqZWN0KSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEN1c3RvbUVsZW1lbnRI
ZWxwZXJzOjppc0ZlYXR1cmVBbGxvd2VkKFNjcmlwdFN0YXRlKiBzdGF0ZSkKK3sKKyAgICByZXR1
cm4gaXNGZWF0dXJlQWxsb3dlZChzdGF0ZS0+Y29udGV4dCgpKTsKK30KKworYm9vbCBDdXN0b21F
bGVtZW50SGVscGVyczo6aXNGZWF0dXJlQWxsb3dlZCh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBj
b250ZXh0KQoreworICAgIGlmIChET01XcmFwcGVyV29ybGQqIHdvcmxkID0gRE9NV3JhcHBlcldv
cmxkOjpnZXRXb3JsZChjb250ZXh0KSkKKyAgICAgICAgcmV0dXJuIHdvcmxkLT5pc01haW5Xb3Js
ZCgpOworICAgIHJldHVybiB0cnVlOworfQorCisKKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0VM
RU1FTlRTKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9DdXN0b21FbGVtZW50SGVscGVycy5oIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvQ3VzdG9tRWxlbWVudEhlbHBlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wOGQxYmNiYzE4
OTU2OTVkZGFhYmRhZDBmYmYzZjhiOWQzMWFiYmE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvQ3VzdG9tRWxlbWVudEhlbHBlcnMuaApAQCAtMCwwICsxLDU3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBDdXN0b21FbGVtZW50SGVscGVyc19oCisjZGVmaW5lIEN1c3RvbUVsZW1lbnRI
ZWxwZXJzX2gKKworI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJTY3JpcHRW
YWx1ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1F
TlRTKQorCitjbGFzcyBDdXN0b21FbGVtZW50Q29uc3RydWN0b3I7CitjbGFzcyBTY3JpcHRTdGF0
ZTsKKworY2xhc3MgQ3VzdG9tRWxlbWVudEhlbHBlcnMgeworcHVibGljOgorICAgIHN0YXRpYyBi
b29sIGluaXRpYWxpemVDb25zdHJ1Y3RvcldyYXBwZXIoQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9y
KiwgY29uc3QgU2NyaXB0VmFsdWUmIHByb3RvdHlwZSwgU2NyaXB0U3RhdGUqKTsKKyAgICBzdGF0
aWMgYm9vbCBpc1ZhbGlkUHJvdG90eXBlUGFyYW1ldGVyKGNvbnN0IFNjcmlwdFZhbHVlJiwgU2Ny
aXB0U3RhdGUqKTsKKyAgICBzdGF0aWMgYm9vbCBpc0ZlYXR1cmVBbGxvd2VkKFNjcmlwdFN0YXRl
Kik7CisKKyAgICBzdGF0aWMgYm9vbCBpc0ZlYXR1cmVBbGxvd2VkKHY4OjpIYW5kbGU8djg6OkNv
bnRleHQ+KTsKK307CisKKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDdXN0b21FbGVtZW50SGVscGVyc19oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYmJjMWQzMjc0ZmM3ZDg5ZjFkYTYzNGFkYTc3OWJiYzZlNDYyZWNkZAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9u
LmNwcApAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlY4QWRh
cHRvckZ1bmN0aW9uLmgiCisKKyNpbmNsdWRlICJWOFBlcklzb2xhdGVEYXRhLmgiCisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitXcmFwcGVyVHlwZUluZm8gVjhBZGFwdG9yRnVuY3Rpb246OmluZm8g
PSB7IFY4QWRhcHRvckZ1bmN0aW9uOjpnZXRUZW1wbGF0ZSwgMCwgMCwgMCwgMCwgMCwgMCwgV3Jh
cHBlclR5cGVPYmplY3RQcm90b3R5cGUgfTsKKwordjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IFY4QWRhcHRvckZ1bmN0aW9uOjpnZXRUZW1wbGF0ZSh2ODo6SXNvbGF0ZSogaXNv
bGF0ZSkKK3sKKyAgICBBU1NFUlQoaXNvbGF0ZSk7CisgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0
YSA9IFY4UGVySXNvbGF0ZURhdGE6OmZyb20oaXNvbGF0ZSk7CisgICAgVjhQZXJJc29sYXRlRGF0
YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCku
ZmluZCgmaW5mbyk7CisgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVu
ZCgpKQorICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKKyAgICAvLyBUaGUgbGlmZXRpbWUg
aXMgb2YgbmV3VGVtcGxhdGUgaXMgZGVsZWdhdGVkIHRvIHRoZSBUZW1wbGF0ZU1hcCB0aHVzIHRo
aXMgd29uJ3QgYmUgbGVha2VkLgorICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPiBuZXdUZW1wbGF0ZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6
TmV3KHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoKSk7CisgICAgZGF0YS0+cmF3VGVtcGxhdGVN
YXAoKS5hZGQoJmluZm8sIGNvbmZpZ3VyZVRlbXBsYXRlKG5ld1RlbXBsYXRlKSk7CisgICAgcmV0
dXJuIG5ld1RlbXBsYXRlOworfQorCit2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4gVjhBZGFwdG9yRnVuY3Rpb246OmNvbmZpZ3VyZVRlbXBsYXRlKHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPiBmdW5jdGlvblRlbXBsYXRlKQoreworICAgIGZ1bmN0aW9uVGVt
cGxhdGUtPlNldENhbGxIYW5kbGVyKCZWOEFkYXB0b3JGdW5jdGlvbjo6aW52b2NhdGlvbkNhbGxi
YWNrKTsKKyAgICByZXR1cm4gZnVuY3Rpb25UZW1wbGF0ZTsKK30KKwordjg6OkhhbmRsZTx2ODo6
VmFsdWU+IFY4QWRhcHRvckZ1bmN0aW9uOjppbnZvY2F0aW9uQ2FsbGJhY2soY29uc3Qgdjg6OkFy
Z3VtZW50cyYgYXJncykKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZWQgPSB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3MuQ2FsbGVlKCktPkdldEhpZGRlblZhbHVl
KFY4SGlkZGVuUHJvcGVydHlOYW1lOjphZGFwdG9yRnVuY3Rpb25QZWVyKCkpKTsKKyAgICAvLyBG
SVhNRTogVGhpcyBjYW4gYmUgZmFzdGVyIGlmIHdlIGNhbiBhY2Nlc3MgdW5kZXJseWluZyBuYXRp
dmUgY2FsbGJhY2sgZGlyZWN0bHkuCisgICAgLy8gV2Ugd29uJ3QgbmVlZCB0aGlzIG9uY2UgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODEzOCBpcyBhZGRyZXNzZWQu
CisgICAgVmVjdG9yPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+IGFyZ0FycmF5KGFyZ3MuTGVuZ3Ro
KCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5MZW5ndGgoKTsgKytpKQorICAgICAg
ICBhcmdBcnJheS5hcHBlbmQoYXJnc1tpXSk7CisgICAgaWYgKGFyZ3MuSXNDb25zdHJ1Y3RDYWxs
KCkpCisgICAgICAgIHJldHVybiB3cmFwcGVkLT5DYWxsQXNDb25zdHJ1Y3RvcihhcmdBcnJheS5z
aXplKCksIGFyZ0FycmF5LmRhdGEoKSk7CisgICAgcmV0dXJuIHdyYXBwZWQtPkNhbGxBc0Z1bmN0
aW9uKGFyZ3MuVGhpcygpLCBhcmdBcnJheS5zaXplKCksIGFyZ0FycmF5LmRhdGEoKSk7Cit9CisK
K3Y4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBWOEFkYXB0b3JGdW5jdGlvbjo6d3JhcCh2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IG9iamVjdCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCB2ODo6SXNv
bGF0ZSogaXNvbGF0ZSkKK3sKKyAgICBpZiAob2JqZWN0LklzRW1wdHkoKSB8fCAhb2JqZWN0LT5J
c09iamVjdCgpKQorICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+KCk7Cisg
ICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IGFkYXB0b3IgPSB2ODo6SGFuZGxlPHY4OjpGdW5j
dGlvbj46OkNhc3QoZ2V0VGVtcGxhdGUoaXNvbGF0ZSktPkdldEZ1bmN0aW9uKCkpOworICAgIGlm
IChhZGFwdG9yLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OkZ1bmN0
aW9uPigpOworICAgIGFkYXB0b3ItPlNldE5hbWUodjhTdHJpbmcobmFtZS5zdHJpbmcoKSwgaXNv
bGF0ZSkpOworICAgIGFkYXB0b3ItPlNldEhpZGRlblZhbHVlKFY4SGlkZGVuUHJvcGVydHlOYW1l
OjphZGFwdG9yRnVuY3Rpb25QZWVyKCksIG9iamVjdCk7CisgICAgb2JqZWN0LT5TZXRIaWRkZW5W
YWx1ZShWOEhpZGRlblByb3BlcnR5TmFtZTo6YWRhcHRvckZ1bmN0aW9uUGVlcigpLCBhZGFwdG9y
KTsKKyAgICByZXR1cm4gYWRhcHRvcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4QWRhcHRvckZ1bmN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUzZDZiYjUxZjQ0MGE0Yzc3
MjRhYmNlM2RlOTMwNjhkYWU4YzNhNTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOEFkYXB0b3JGdW5jdGlvbi5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFY4QWRhcHRvckZ1bmN0aW9uX2gKKyNkZWZpbmUgVjhBZGFwdG9yRnVuY3Rpb25faAorCisjaW5j
bHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaCIKKyNp
bmNsdWRlICJXcmFwcGVyVHlwZUluZm8uaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgor
CisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisv
LworLy8gRklYTUUoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODEz
OCk6CisvLyBWOEFkYXB0b3JGdW5jdGlvbiBjbGFzcyBhbmQgVjhXcmFwQXNGdW5jdGlvbiBJREwg
YXR0cmlidXRlIGFyZSBuZWVkZWQgZm9yIHR3byByZWFzb25zOgorLy8gLSAxKSBWOCBkb2Vzbid0
IGFsbG93IGV4cGFuZGluZyB0aGUgaW50ZXJuYWwgZmllbGQgb2YgZnVuY3Rpb24gb2JqZWN0cy4g
aHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTgzNworLy8gICAg
ICBXZWJLaXQgbmVlZCBpdCB0byBhc3NvY2lhdGUgZWFjaCB3cmFwcGVyIHRvIGl0cyBiYWNraW5n
IEMrKyBvYmplY3QuIFdlIHN0b3JlIGl0IGluIGEgaGlkZGVuIHByb3BlcnR5IG9mIHRoZSB3cmFw
cGVkIG9iamVjdC4KKy8vIC0gMikgQmluZGluZyBjb2RlYmFzZSBhc3N1bWVzIGV2ZXJ5IHdyYXBw
ZXIgb2JqZWN0IGlzIGNyZWF0ZWQgdGhyb3VnaCBPYmplY3RUZW1wbGF0ZTo6TmV3SW5zdGFuY2Uo
KSwgbm90IEZ1bmN0aW9uVGVtcGxhdGU6OkdldEZ1bmN0aW9uKCkuCisvLyBPbmNlIDEpIGlzIGFk
ZHJlc3NzZWQsIHdlIGNvdWxkIGF0dGFjayAyKSB3aXRoIGl0LiAKKy8vCitjbGFzcyBWOEFkYXB0
b3JGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFdyYXBwZXJUeXBlSW5mbyBpbmZvOwor
ICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHVud3JhcCh2ODo6SGFuZGxlPHY4OjpG
dW5jdGlvbj4pOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gd3JhcCh2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIHY4OjpJc29sYXRl
Kik7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBnZXQodjg6OkhhbmRsZTx2
ODo6T2JqZWN0Pik7CisKKyAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IGdldFRlbXBsYXRlKHY4OjpJc29sYXRlKiA9IDApOworICAgIHN0YXRpYyB2ODo6UGVy
c2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gY29uZmlndXJlVGVtcGxhdGUodjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+KTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IGludm9jYXRpb25DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJik7Cit9OworCitp
bmxpbmUgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOEFkYXB0b3JGdW5jdGlvbjo6dW53cmFwKHY4
OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBmdW5jdGlvbikKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gd3JhcHBlZCA9IGZ1bmN0aW9uLT5HZXRIaWRkZW5WYWx1ZShWOEhpZGRlblByb3BlcnR5
TmFtZTo6YWRhcHRvckZ1bmN0aW9uUGVlcigpKTsKKyAgICBBU1NFUlQoIXdyYXBwZWQuSXNFbXB0
eSgpKTsKKyAgICBBU1NFUlQod3JhcHBlZC0+SXNPYmplY3QoKSk7CisgICAgcmV0dXJuIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD46OkNhc3Qod3JhcHBlZCk7Cit9CisKK2lubGluZSB2ODo6SGFuZGxl
PHY4OjpGdW5jdGlvbj4gVjhBZGFwdG9yRnVuY3Rpb246OmdldCh2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IG9iamVjdCkKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYWRhcHRvckZ1bmN0aW9u
ID0gb2JqZWN0LT5HZXRIaWRkZW5WYWx1ZShWOEhpZGRlblByb3BlcnR5TmFtZTo6YWRhcHRvckZ1
bmN0aW9uUGVlcigpKTsKKyAgICBBU1NFUlQoIWFkYXB0b3JGdW5jdGlvbi5Jc0VtcHR5KCkpOwor
ICAgIEFTU0VSVChhZGFwdG9yRnVuY3Rpb24tPklzRnVuY3Rpb24oKSk7CisgICAgcmV0dXJuIHY4
OjpIYW5kbGU8djg6OkZ1bmN0aW9uPjo6Q2FzdChhZGFwdG9yRnVuY3Rpb24pOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQor
I2VuZGlmIC8vIFY4QWRhcHRvckZ1bmN0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4RE9NQ29uZmlndXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOERPTUNvbmZpZ3VyYXRpb24uY3BwCmluZGV4IDBiYmE2ZmM5NzlmY2EyOWM2ZWNh
OGI4ODY0YTI0NWVhYmRhNTZiMzIuLjkwZGZiNDE4MDJkZTgwYjdhNjhmZTcyNzBkNWJiMGFmYjUy
ODQxYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NQ29uZmln
dXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01Db25maWd1
cmF0aW9uLmNwcApAQCAtMzMsNiArMzMsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2Nv
bnN0IGludCBwcm90b3R5cGVJbnRlcm5hbEZpZWxkY291bnQgPSAxOworCiB2b2lkIFY4RE9NQ29u
ZmlndXJhdGlvbjo6YmF0Y2hDb25maWd1cmVBdHRyaWJ1dGVzKHY4OjpIYW5kbGU8djg6Ok9iamVj
dFRlbXBsYXRlPiBpbnN0YW5jZSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0VGVtcGxhdGU+IHByb3Rv
dHlwZSwgY29uc3QgQmF0Y2hlZEF0dHJpYnV0ZSogYXR0cmlidXRlcywgc2l6ZV90IGF0dHJpYnV0
ZUNvdW50LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGF0dHJpYnV0ZUNvdW50OyArK2kpCkBAIC02MCw4ICs2MiwxNSBAQCB2ODo6TG9jYWw8djg6
OlNpZ25hdHVyZT4gVjhET01Db25maWd1cmF0aW9uOjpjb25maWd1cmVUZW1wbGF0ZSh2ODo6UGVy
c2lzdGVudDx2OAogICAgIGZ1bmN0aW9uRGVzY3JpcHRvci0+U2V0Q2xhc3NOYW1lKHY4OjpTdHJp
bmc6Ok5ld1N5bWJvbChpbnRlcmZhY2VOYW1lKSk7CiAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3RU
ZW1wbGF0ZT4gaW5zdGFuY2UgPSBmdW5jdGlvbkRlc2NyaXB0b3ItPkluc3RhbmNlVGVtcGxhdGUo
KTsKICAgICBpbnN0YW5jZS0+U2V0SW50ZXJuYWxGaWVsZENvdW50KGZpZWxkQ291bnQpOwotICAg
IGlmICghcGFyZW50Q2xhc3MuSXNFbXB0eSgpKQorICAgIGlmICghcGFyZW50Q2xhc3MuSXNFbXB0
eSgpKSB7CiAgICAgICAgIGZ1bmN0aW9uRGVzY3JpcHRvci0+SW5oZXJpdChwYXJlbnRDbGFzcyk7
CisgICAgICAgIC8vIE1hcmtzIHRoZSBwcm90b3R5cGUgb2JqZWN0IGFzIG9uZSBvZiBuYXRpdmUt
YmFja2VkIG9iamVjdHMuCisgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIHNpbmNlIGJ1ZyAxMTA0
MzYgYXNrcyBXZWJLaXQgdG8gdGVsbCBuYXRpdmUtaW5pdGlhdGVkIHByb3RvdHlwZXMgZnJvbSBw
dXJlLUpTIG9uZXMuCisgICAgICAgIC8vIFRoaXMgZG9lc24ndCBtYXJrIGtpbmRzICJyb290IiBj
bGFzc2VzIGxpa2UgTm9kZSwgd2hlcmUgc2V0dGluZyB0aGlzIGNoYW5nZXMgcHJvdG90eXBlIGNo
YWluIHN0cnVjdHVyZS4KKyAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3RUZW1wbGF0ZT4gcHJv
dG90eXBlID0gZnVuY3Rpb25EZXNjcmlwdG9yLT5Qcm90b3R5cGVUZW1wbGF0ZSgpOworICAgICAg
ICBwcm90b3R5cGUtPlNldEludGVybmFsRmllbGRDb3VudChwcm90b3R5cGVJbnRlcm5hbEZpZWxk
Y291bnQpOworICAgIH0KKwogICAgIGlmIChhdHRyaWJ1dGVDb3VudCkKICAgICAgICAgYmF0Y2hD
b25maWd1cmVBdHRyaWJ1dGVzKGluc3RhbmNlLCBmdW5jdGlvbkRlc2NyaXB0b3ItPlByb3RvdHlw
ZVRlbXBsYXRlKCksIGF0dHJpYnV0ZXMsIGF0dHJpYnV0ZUNvdW50LCBpc29sYXRlKTsKICAgICB2
ODo6TG9jYWw8djg6OlNpZ25hdHVyZT4gZGVmYXVsdFNpZ25hdHVyZSA9IHY4OjpTaWduYXR1cmU6
Ok5ldyhmdW5jdGlvbkRlc2NyaXB0b3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
RE9NV3JhcHBlci5jcHAKaW5kZXggMzQyNzc4YWNmNzk0NmFhMGRjYjRjNzg5YWIwZGI3MDA5YjA0
YzhiMy4uNGQ4YzIyNmYzZTI3MmYwZTM1OTYyMWU4ZDQwNjhjMzE5NGI1M2ZiOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCkBAIC0zMSw2ICszMSw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCiAKKyNpbmNs
dWRlICJWOEFkYXB0b3JGdW5jdGlvbi5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1
ZGUgIlY4RE9NV2luZG93LmgiCiAjaW5jbHVkZSAiVjhIVE1MQ29sbGVjdGlvbi5oIgpAQCAtMTM3
LDQgKzEzOCwyNSBAQCBib29sIFY4RE9NV3JhcHBlcjo6aXNXcmFwcGVyT2ZUeXBlKHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB2YWx1ZSwgV3JhcHBlclR5cGVJbmZvKgogICAgIHJldHVybiB0eXBlSW5m
byA9PSB0eXBlOwogfQogCisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKwordjg6OkhhbmRs
ZTx2ODo6RnVuY3Rpb24+IFY4RE9NV3JhcHBlcjo6dG9GdW5jdGlvbih2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gb2JqZWN0KQoreworICAgIHJldHVybiBWOEFkYXB0b3JGdW5jdGlvbjo6Z2V0KHY4OjpI
YW5kbGU8djg6Ok9iamVjdD46OkNhc3Qob2JqZWN0KSk7Cit9CisKK3Y4OjpIYW5kbGU8djg6OkZ1
bmN0aW9uPiBWOERPTVdyYXBwZXI6OnRvRnVuY3Rpb24odjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBv
YmplY3QsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit7
CisgICAgcmV0dXJuIFY4QWRhcHRvckZ1bmN0aW9uOjp3cmFwKG9iamVjdCwgbmFtZSwgaXNvbGF0
ZSk7Cit9CisKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhET01XcmFwcGVyOjpmcm9tRnVuY3Rp
b24odjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QpCit7CisgICAgaWYgKCFvYmplY3QtPklz
RnVuY3Rpb24oKSkKKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICByZXR1cm4gVjhBZGFwdG9y
RnVuY3Rpb246OnVud3JhcCh2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj46OkNhc3Qob2JqZWN0KSk7
Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCiB9ICAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01X
cmFwcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAppbmRl
eCAzOWRjZTQ3ZjNmNzU3MjhkZTdkYjI5NzZmODc0Y2JlN2FiMTJjYWE0Li4xODQ0MWE5ZTEyZmVj
MmRlZTk4OTI0OWNhMzg0MWVjNTM2YWRhMTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOERPTVdyYXBwZXIuaApAQCAtNjIsNiArNjIsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgICAgIHN0YXRpYyBib29sIGlzRE9NV3JhcHBlcih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4p
OwogICAgICAgICBzdGF0aWMgYm9vbCBpc1dyYXBwZXJPZlR5cGUodjg6OkhhbmRsZTx2ODo6VmFs
dWU+LCBXcmFwcGVyVHlwZUluZm8qKTsKKworI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisg
ICAgICAgIC8vIFVzZWQgZm9yIFY4V3JhcEFzRnVuY3Rpb24sIHdoaWNoIGlzIHVzZWQgb25seSBi
eSBDVVNUT01fRUxFTUVOVFMKKyAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9u
PiB0b0Z1bmN0aW9uKHY4OjpIYW5kbGU8djg6OlZhbHVlPik7CisgICAgICAgIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpGdW5jdGlvbj4gdG9GdW5jdGlvbih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+LCBj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIHY4OjpJc29sYXRlKik7CisgICAgICAgIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGZyb21GdW5jdGlvbih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
KTsKKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQogICAgIH07CiAKICAgICBpbmxp
bmUgdm9pZCBWOERPTVdyYXBwZXI6OnNldE5hdGl2ZUluZm8odjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiB3cmFwcGVyLCBXcmFwcGVyVHlwZUluZm8qIHR5cGUsIHZvaWQqIG9iamVjdCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SFRNTEN1c3RvbUVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIVE1MQ3VzdG9tRWxlbWVudC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZjQ3ZjM1OTYzNjhmNzlhODExZTE4OGVmMmEwNTg0ZGJlYTVhMDAwYgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SFRNTEN1c3RvbUVsZW1lbnQu
Y3BwCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoQ1VT
VE9NX0VMRU1FTlRTKQorCisjaW5jbHVkZSAiVjhIVE1MQ3VzdG9tRWxlbWVudC5oIgorCisjaW5j
bHVkZSAiQ3VzdG9tRWxlbWVudEhlbHBlcnMuaCIKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50UmVn
aXN0cnkuaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tRWxl
bWVudENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiVjhIVE1MU3BhbkVsZW1lbnQuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisvLyBGSVhNRTogRWFjaCBjdXN0b20gZWxlbWVudHMgc2hvdWxk
IGhhdmUgaXRzIG93biBHZXRUZW1wbGF0ZSBtZXRob2Qgc28gdGhhdCBpdCBjYW4gYmUgZGVyaXZl
ZCBmcm9tIGRpZmZlcmVudCBzdXBlciBlbGVtZW50LgorV3JhcHBlclR5cGVJbmZvIFY4SFRNTEN1
c3RvbUVsZW1lbnQ6OmluZm8gPSB7ICZWOEhUTUxFbGVtZW50OjpHZXRUZW1wbGF0ZSwgVjhIVE1M
RWxlbWVudDo6ZGVyZWZPYmplY3QsIDAsIFY4SFRNTEVsZW1lbnQ6OnRvRXZlbnRUYXJnZXQsIDAs
IDAsICZWOEhUTUxFbGVtZW50OjppbmZvLCBXcmFwcGVyVHlwZU9iamVjdFByb3RvdHlwZSB9Owor
Cit2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4SFRNTEN1c3RvbUVsZW1lbnQ6OmNyZWF0ZVdyYXBw
ZXIoUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBj
cmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQoreworICAgIEFTU0VSVChpbXBs
KTsKKworICAgIFJlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IGNvbnN0cnVjdG9yID0g
Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5Ojpjb25zdHJ1Y3Rvck9mKGltcGwuZ2V0KCkpOworICAgIGlm
ICghY29uc3RydWN0b3IpIHsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZXJW
YWx1ZSA9IFdlYkNvcmU6OnRvVjgodG9IVE1MVW5rbm93bkVsZW1lbnQoaW1wbC5nZXQoKSksIGNy
ZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgICAgIGlmICghd3JhcHBlclZhbHVlLklzRW1w
dHkoKSAmJiB3cmFwcGVyVmFsdWUtPklzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gdjg6
OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh3cmFwcGVyVmFsdWUpOworICAgICAgICByZXR1cm4g
djg6OkhhbmRsZTx2ODo6T2JqZWN0PigpOworICAgIH0KKworICAgIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6Y3JlYXRlV3JhcHBlcihjcmVhdGlvbkNvbnRl
eHQsICZpbmZvLCBpbXBsLmdldCgpLCBpc29sYXRlKTsKKyAgICBpZiAod3JhcHBlci5Jc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiB3cmFwcGVyOworCisgICAgLy8gVGhlIGNvbnN0cnVjdG9yIGFu
ZCByZWdpc3RlcmVkIGxpZmVjeWNsZSBjYWxsYmFja3Mgc2hvdWxkIGJlIHZpc2libGUgb25seSBm
cm9tIG1haW4gd29ybGQuCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIG5lZWRlZCBv
bmNlIGVhY2ggY3VzdG9tIGVsZW1lbnQgaGFzIGl0cyBvd24gRnVuY3Rpb25UZW1wbGF0ZQorICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgxMzgKKyAgICBp
ZiAoQ3VzdG9tRWxlbWVudEhlbHBlcnM6OmlzRmVhdHVyZUFsbG93ZWQoY3JlYXRpb25Db250ZXh0
LT5DcmVhdGlvbkNvbnRleHQoKSkpIHsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdy
YXBwZXJWYWx1ZSA9IFdlYkNvcmU6OnRvVjgoY29uc3RydWN0b3IuZ2V0KCksIGNyZWF0aW9uQ29u
dGV4dCwgaXNvbGF0ZSk7CisgICAgICAgIGlmICh3cmFwcGVyVmFsdWUuSXNFbXB0eSgpIHx8ICF3
cmFwcGVyVmFsdWUtPklzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PigpOworICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNvbnN0cnVjdG9y
V2FwcGVyID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh3cmFwcGVyVmFsdWUpOworICAg
ICAgICB3cmFwcGVyLT5TZXRQcm90b3R5cGUoY29uc3RydWN0b3JXYXBwZXItPkdldCh2OFN0cmlu
ZygicHJvdG90eXBlIiwgaXNvbGF0ZSkpKTsKKyAgICB9CisKKyAgICBWOERPTVdyYXBwZXI6OmFz
c29jaWF0ZU9iamVjdFdpdGhXcmFwcGVyKGltcGwsICZpbmZvLCB3cmFwcGVyLCBpc29sYXRlLCBX
cmFwcGVyQ29uZmlndXJhdGlvbjo6RGVwZW5kZW50KTsKKyAgICByZXR1cm4gd3JhcHBlcjsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENVU1RPTV9FTEVN
RU5UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SFRNTEN1c3Rv
bUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SFRNTEN1c3RvbUVsZW1l
bnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mMzgwYTAxN2FmMWVkMDVjNTJjYWFhM2JkOGFlNWQxYjUxNzk3Y2Fj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIVE1MQ3Vz
dG9tRWxlbWVudC5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFY4SFRNTEN1c3RvbUVsZW1lbnRf
aAorI2RlZmluZSBWOEhUTUxDdXN0b21FbGVtZW50X2gKKworI2luY2x1ZGUgIlY4QmluZGluZy5o
IgorI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIlY4SFRNTEVsZW1lbnQuaCIK
KyNpbmNsdWRlICJWOEhUTUxVbmtub3duRWxlbWVudC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSFRNTEVsZW1lbnQ7CisKKyNp
ZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCitjbGFzcyBWOEhUTUxDdXN0b21FbGVtZW50IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgV3JhcHBlclR5cGVJbmZvIGluZm87CisgICAgc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEhUTUxFbGVtZW50Kiwgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJc29s
YXRlKiA9IDApOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoSFRNTEVs
ZW1lbnQqLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xh
dGUqKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVh
dGVXcmFwcGVyKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
LCB2ODo6SXNvbGF0ZSopOworfTsKKworaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhU
TUxDdXN0b21FbGVtZW50Ojp0b1Y4KEhUTUxFbGVtZW50KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit7CisgICAgaWYg
KFVOTElLRUxZKCFpbXBsKSkKKyAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhpc29sYXRl
KTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBET01EYXRhU3RvcmU6Omdl
dFdyYXBwZXIoaW1wbCwgaXNvbGF0ZSk7CisgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgcmV0dXJuIFY4SFRNTEN1c3RvbUVsZW1lbnQ6Ondy
YXAoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKK30KKworaW5saW5lIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gVjhIVE1MQ3VzdG9tRWxlbWVudDo6d3JhcChIVE1MRWxlbWVudCogaW1w
bCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBp
c29sYXRlKQoreworICAgIEFTU0VSVChpbXBsKTsKKyAgICBBU1NFUlQoRE9NRGF0YVN0b3JlOjpn
ZXRXcmFwcGVyKGltcGwsIGlzb2xhdGUpLklzRW1wdHkoKSk7CisgICAgcmV0dXJuIFY4SFRNTEN1
c3RvbUVsZW1lbnQ6OmNyZWF0ZVdyYXBwZXIoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRl
KTsKK30KKworI2Vsc2UgLy8gRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKworY2xhc3MgVjhIVE1M
Q3VzdG9tRWxlbWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gd3JhcChIVE1MRWxlbWVudCosIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250
ZXh0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSogPSAwKTsKK307CisK
K2lubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IEhUTUxDdXN0b21FbGVtZW50Ojp3cmFwKEhU
TUxFbGVtZW50KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwg
djg6Oklzb2xhdGUqIGlzb2xhdGUpCit7CisgICAgcmV0dXJuIHdyYXAodG9IVE1MVW5rbm93bkVs
ZW1lbnQoaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7Cit9CisKKyNlbmRpZiAvLyBF
TkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBWOEhUTUxDdXN0b21FbGVtZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oCmluZGV4IDUwOGJkZDM2MjgwNmE3MTA0NmNkM2Q2
MmYwMzVhY2UyYjIyNjFhYmMuLjAzY2Q1N2ZkODkwZjMxMWU0Mjk1NDU4MGQ0NjFhMTZmOGViNDQ4
ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVy
dHlOYW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIaWRkZW5Qcm9wZXJ0
eU5hbWUuaApAQCAtNDUsNiArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgVihzY3Jp
cHRTdGF0ZSkgXAogICAgIFYoc2xlZXBGdW5jdGlvbikgXAogICAgIFYoc3RhdGUpIFwKKyAgICBW
KGFkYXB0b3JGdW5jdGlvblBlZXIpIFwKICAgICBWKHRvU3RyaW5nU3RyaW5nKSBcCiAgICAgVih0
eXBlZEFycmF5SGlkZGVuQ29weU1ldGhvZCkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yQ3VzdG9tLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUVsZW1lbnRDb25zdHJ1
Y3RvckN1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzQzNzRmNjc2ODgwYzkyODU0ZjI4ODk0NmE2Mzkx
NTFhMGIzYjIzNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvckN1c3RvbS5jcHAKQEAgLTAsMCArMSw1
NCBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisqIAorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorKiBtZXQ6CisqIAorKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisqIGRp
c3RyaWJ1dGlvbi4KKyogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKiAKKyogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlY4Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmgiCisKKyNpbmNsdWRlICJDdXN0
b21FbGVtZW50Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRl
ICJWOEhUTUxDdXN0b21FbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFY4Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjpjYWxsQXNGdW5jdGlv
bkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgaWYgKCFhcmdzLklz
Q29uc3RydWN0Q2FsbCgpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoIkRPTSBvYmpl
Y3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLiIsIGFyZ3MuR2V0
SXNvbGF0ZSgpKTsKKyAgICBpZiAoQ29uc3RydWN0b3JNb2RlOjpjdXJyZW50KCkgPT0gQ29uc3Ry
dWN0b3JNb2RlOjpXcmFwRXhpc3RpbmdPYmplY3QpCisgICAgICAgIHJldHVybiBhcmdzLkhvbGRl
cigpOworCisgICAgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKiBpbXBsID0gdG9OYXRpdmUoYXJn
cy5Ib2xkZXIoKSk7CisgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50ID0gaW1wbC0+Y3Jl
YXRlRWxlbWVudCgpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIHY4VW5kZWZp
bmVkKCk7CisgICAgcmV0dXJuIFY4SFRNTEN1c3RvbUVsZW1lbnQ6OnRvVjgoZWxlbWVudC5nZXQo
KSwgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50Q29uc3RydWN0
b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjQ5Y2NmOWVjN2FkYmE0YzdhYWVmN2I3MDA2YzNmNDU3NGViNWNh
MzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yLmNwcApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYg
RU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKworI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRDb25zdHJ1
Y3Rvci5oIgorCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudEhlbHBlcnMuaCIKKyNpbmNsdWRlICJE
b2N1bWVudC5oIgorI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPEN1c3RvbUVsZW1l
bnRDb25zdHJ1Y3Rvcj4gQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yOjpjcmVhdGUoU2NyaXB0U3Rh
dGUqIHN0YXRlLCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU2NyaXB0VmFsdWUmIHByb3RvdHlwZSkKK3sK
KyAgICBSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiBjcmVhdGVkID0gYWRvcHRSZWYo
bmV3IEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcihkb2N1bWVudCwgdGFnTmFtZSwgbmFtZSkpOwor
ICAgIGlmICghQ3VzdG9tRWxlbWVudEhlbHBlcnM6OmluaXRpYWxpemVDb25zdHJ1Y3RvcldyYXBw
ZXIoY3JlYXRlZC5nZXQoKSwgcHJvdG90eXBlLCBzdGF0ZSkpCisgICAgICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBjcmVhdGVkLnJlbGVhc2UoKTsKK30KKworQ3VzdG9tRWxlbWVudENvbnN0cnVj
dG9yOjpDdXN0b21FbGVtZW50Q29uc3RydWN0b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgOiBDb250ZXh0
RGVzdHJ1Y3Rpb25PYnNlcnZlcihkb2N1bWVudCkKKyAgICAsIG1fdGFnTmFtZSh0YWdOYW1lKQor
ICAgICwgbV9uYW1lKG5hbWUpCit7Cit9CisKK0N1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6fkN1
c3RvbUVsZW1lbnRDb25zdHJ1Y3RvcigpCit7Cit9CisKK1Bhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+
IEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlRWxlbWVudCgpIGNvbnN0Cit7CisgICAg
aWYgKCFkb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gSFRNTEVsZW1l
bnQ6OmNyZWF0ZShtX3RhZ05hbWUsIGRvY3VtZW50KCkpOworfQorCit9CisKKyNlbmRpZiAvLyBF
TkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0N1
c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1l
bnRDb25zdHJ1Y3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU3OGViMTcxNWM2YTY1MDJiNDkxY2ZkY2RmYTEw
Mzk2MjM2NGJiZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9t
RWxlbWVudENvbnN0cnVjdG9yLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ3VzdG9tRWxlbWVu
dENvbnN0cnVjdG9yX2gKKyNkZWZpbmUgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yX2gKKworI2lm
IEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKKyNpbmNsdWRlICJDb250ZXh0RGVzdHJ1Y3Rpb25P
YnNlcnZlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiUXVhbGlmaWVkTmFt
ZS5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21p
Y1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERvY3VtZW50OworY2xh
c3MgSFRNTEVsZW1lbnQ7CitjbGFzcyBTY3JpcHRTdGF0ZTsKK2NsYXNzIFNjcmlwdFZhbHVlOwor
CitjbGFzcyBDdXN0b21FbGVtZW50Q29uc3RydWN0b3IgOiBwdWJsaWMgUmVmQ291bnRlZDxDdXN0
b21FbGVtZW50Q29uc3RydWN0b3I+ICwgcHVibGljIENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVy
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0
b3I+IGNyZWF0ZShTY3JpcHRTdGF0ZSosIERvY3VtZW50KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYs
IGNvbnN0IFN0cmluZyYsIGNvbnN0IFNjcmlwdFZhbHVlJik7CisKKyAgICB2aXJ0dWFsIH5DdXN0
b21FbGVtZW50Q29uc3RydWN0b3IoKTsKKworICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PERvY3VtZW50Kj4obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
KTsgfQorICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUoKSBjb25zdCB7IHJldHVybiBt
X3RhZ05hbWU7IH0KKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVy
biBtX25hbWU7IH0KKworICAgIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnQo
KSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKERv
Y3VtZW50KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IFN0cmluZyYpOworCisgICAgUXVh
bGlmaWVkTmFtZSBtX3RhZ05hbWU7CisgICAgQXRvbWljU3RyaW5nIG1fbmFtZTsKK307CisKK30K
KworI2VuZGlmIC8vIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisKKyNlbmRpZiAvLyBDdXN0b21F
bGVtZW50Q29uc3RydWN0b3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0N1c3Rv
bUVsZW1lbnRDb25zdHJ1Y3Rvci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVu
dENvbnN0cnVjdG9yLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40N2M1MzBmODdkZWFlNjdmYTVmZGExZTEzOWIw
NWNiOThhMDczYjBkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3Rv
bUVsZW1lbnRDb25zdHJ1Y3Rvci5pZGwKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1sK
KyAgICBDb25kaXRpb25hbD1DVVNUT01fRUxFTUVOVFMsCisgICAgVjhFbmFibGVkQXRSdW50aW1l
PWN1c3RvbURPTUVsZW1lbnRzLAorICAgIFY4V3JhcEFzRnVuY3Rpb24sCisgICAgQ3VzdG9tQ2Fs
bAorXSBpbnRlcmZhY2UgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yIHsKK307CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM4NWU5NWI3
ZTdlNDRmZjFmMmYwNGUzYTBkZTdhNDZmMTdlNGY5NzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmNwcApAQCAtMCwwICsxLDE3MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAg
ICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShDVVNUT01fRUxFTUVO
VFMpCisKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50UmVnaXN0cnkuaCIKKworI2luY2x1ZGUgIkN1
c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRIZWxwZXJz
LmgiCisjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5j
bHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJS
dW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KKwor
I2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKKyNlbmRpZgorCisjaWYgRU5B
QkxFKE1BVEhNTCkKKyNpbmNsdWRlICJNYXRoTUxOYW1lcy5oIgorI2VuZGlmCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpDdXN0b21FbGVtZW50UmVnaXN0
cnkoRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIo
ZG9jdW1lbnQpCit7Cit9CisKK0N1c3RvbUVsZW1lbnRSZWdpc3RyeTo6fkN1c3RvbUVsZW1lbnRS
ZWdpc3RyeSgpCit7Cit9CisKK1Bhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiBD
dXN0b21FbGVtZW50UmVnaXN0cnk6OmNvbnN0cnVjdG9yT2YoSFRNTEVsZW1lbnQqIGVsZW1lbnQp
Cit7CisgICAgUmVmUHRyPEN1c3RvbUVsZW1lbnRSZWdpc3RyeT4gc2VsZiA9IGVsZW1lbnQtPmRv
Y3VtZW50KCktPnJlZ2lzdHJ5KCk7CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gMDsK
KyAgICByZXR1cm4gc2VsZi0+ZmluZChlbGVtZW50LT50YWdRTmFtZSgpKTsKK30KKworYm9vbCBD
dXN0b21FbGVtZW50UmVnaXN0cnk6OmlzVmFsaWROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZSkKK3sKKyAgICBzaXplX3QgaHlwaGVuUG9zaXRpb24gPSBuYW1lLmZpbmQoJy0nKTsKKyAgICBp
ZiAoaHlwaGVuUG9zaXRpb24gPT0gbm90Rm91bmQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPEF0b21pY1N0cmluZz4sIHJlc2VydmVkTmFt
ZXMsICgpKTsKKyAgICBpZiAocmVzZXJ2ZWROYW1lcy5pc0VtcHR5KCkpIHsKKyNpZiBFTkFCTEUo
TUFUSE1MKQorICAgICAgICByZXNlcnZlZE5hbWVzLmFwcGVuZChNYXRoTUxOYW1lczo6YW5ub3Rh
dGlvbl94bWxUYWcubG9jYWxOYW1lKCkpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoU1ZHKQorICAg
ICAgICByZXNlcnZlZE5hbWVzLmFwcGVuZChTVkdOYW1lczo6Y29sb3JfcHJvZmlsZVRhZy5sb2Nh
bE5hbWUoKSk7CisgICAgICAgIHJlc2VydmVkTmFtZXMuYXBwZW5kKFNWR05hbWVzOjpmb250X2Zh
Y2VUYWcubG9jYWxOYW1lKCkpOworICAgICAgICByZXNlcnZlZE5hbWVzLmFwcGVuZChTVkdOYW1l
czo6Zm9udF9mYWNlX3NyY1RhZy5sb2NhbE5hbWUoKSk7CisgICAgICAgIHJlc2VydmVkTmFtZXMu
YXBwZW5kKFNWR05hbWVzOjpmb250X2ZhY2VfdXJpVGFnLmxvY2FsTmFtZSgpKTsKKyAgICAgICAg
cmVzZXJ2ZWROYW1lcy5hcHBlbmQoU1ZHTmFtZXM6OmZvbnRfZmFjZV9mb3JtYXRUYWcubG9jYWxO
YW1lKCkpOworICAgICAgICByZXNlcnZlZE5hbWVzLmFwcGVuZChTVkdOYW1lczo6Zm9udF9mYWNl
X25hbWVUYWcubG9jYWxOYW1lKCkpOworICAgICAgICByZXNlcnZlZE5hbWVzLmFwcGVuZChTVkdO
YW1lczo6bWlzc2luZ19nbHlwaFRhZy5sb2NhbE5hbWUoKSk7CisjZW5kaWYKKyAgICB9CisKKyAg
ICBpZiAobm90Rm91bmQgIT0gcmVzZXJ2ZWROYW1lcy5maW5kKG5hbWUpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXR1cm4gRG9jdW1lbnQ6OmlzVmFsaWROYW1lKG5hbWUuc3RyaW5n
KCkpOworfQorCitQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gQ3VzdG9tRWxl
bWVudFJlZ2lzdHJ5OjpyZWdpc3RlckVsZW1lbnQoU2NyaXB0U3RhdGUqIHN0YXRlLCBjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IERpY3Rpb25hcnkmIG9wdGlvbnMsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIFJlZlB0cjxDdXN0b21FbGVtZW50UmVnaXN0cnk+IHByb3RlY3QodGhp
cyk7CisKKyAgICBpZiAoIUN1c3RvbUVsZW1lbnRIZWxwZXJzOjppc0ZlYXR1cmVBbGxvd2VkKHN0
YXRlKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBRdWFsaWZpZWROYW1lIG5ld05hbWUobnVs
bEF0b20sIG5hbWUubG93ZXIoKSwgSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSk7CisgICAg
aWYgKCFpc1ZhbGlkTmFtZShuZXdOYW1lLmxvY2FsTmFtZSgpKSkgeworICAgICAgICBlYyA9IElO
VkFMSURfQ0hBUkFDVEVSX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgICAgICAK
KyAgICBpZiAoZmluZChuZXdOYW1lKSkgeworICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJS
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBTY3JpcHRWYWx1ZSBwcm90b3R5cGVW
YWx1ZTsKKyAgICBpZiAoIW9wdGlvbnMuZ2V0KCJwcm90b3R5cGUiLCBwcm90b3R5cGVWYWx1ZSkp
IHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGUgZGVmYXVsdCB2YWx1ZSBoYW5kbGlu
Zy4KKyAgICAgICAgLy8gQ3VycmVudGx5IGRlZmF1bHQgdmFsdWUgb2YgdGhlICJwcm90b3R5cGUi
IHBhcmFtZXRlciwgd2hpY2gKKyAgICAgICAgLy8gaXMgSFRNTFNwYW5FbGVtZW50LnByb3RvdHlw
ZSwgaGFzIGFuIGFtYmlndWl0eSBhYm91dCBpdHMKKyAgICAgICAgLy8gYmVoYXZpb3IuIFRoZSBz
cGVjIHNob3VsZCBiZSBmaXhlZCBiZWZvcmUgV2ViS2l0IGltcGxlbWVudHMKKyAgICAgICAgLy8g
aXQuIGh0dHBzOi8vd3d3LnczLm9yZy9CdWdzL1B1YmxpYy9zaG93X2J1Zy5jZ2k/aWQ9MjA4MDEK
KyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgaWYgKCFDdXN0b21FbGVtZW50SGVscGVyczo6aXNWYWxpZFByb3RvdHlwZVBhcmFt
ZXRlcihwcm90b3R5cGVWYWx1ZSwgc3RhdGUpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFU
RV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICAvLyBBbiBzY3JpcHQg
ZXhlY3V0aW9uIGNvdWxkIGhhcHBlbiBpbiBpc1ZhbGlkUHJvdG90eXBlUGFyYW1ldGVyKCksIHdo
aWNoIGtpbGxzIHRoZSBkb2N1bWVudC4KKyAgICBpZiAoIWRvY3VtZW50KCkpIHsKKyAgICAgICAg
ZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg
UmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gY29uc3RydWN0b3IgPSBDdXN0b21FbGVt
ZW50Q29uc3RydWN0b3I6OmNyZWF0ZShzdGF0ZSwgZG9jdW1lbnQoKSwgbmV3TmFtZSwgIkhUTUxD
dXN0b21FbGVtZW50IiwgcHJvdG90eXBlVmFsdWUpOworICAgIGlmICghY29uc3RydWN0b3IpIHsK
KyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorICAgICAgICAKKyAgICBtX2NvbnN0cnVjdG9ycy5hZGQoY29uc3RydWN0b3ItPnRhZ05hbWUo
KS5pbXBsKCksIGNvbnN0cnVjdG9yKTsKKyAgICByZXR1cm4gY29uc3RydWN0b3I7Cit9CisKK1Bh
c3NSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiBDdXN0b21FbGVtZW50UmVnaXN0cnk6
OmZpbmQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKK3sKKyAgICBDb25zdHJ1Y3Rv
ck1hcDo6Y29uc3RfaXRlcmF0b3IgZm91bmQgPSBtX2NvbnN0cnVjdG9ycy5maW5kKG5hbWUuaW1w
bCgpKTsKKyAgICByZXR1cm4gKGZvdW5kICE9IG1fY29uc3RydWN0b3JzLmVuZCgpKSA/IGZvdW5k
LT52YWx1ZSA6IDA7Cit9CisKK1Bhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IEN1c3RvbUVsZW1lbnRS
ZWdpc3RyeTo6Y3JlYXRlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAor
eworICAgIGlmIChSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiBmb3VuZCA9IGZpbmQo
bmFtZSkpCisgICAgICAgIHJldHVybiBmb3VuZC0+Y3JlYXRlRWxlbWVudCgpOworICAgIHJldHVy
biAwOworfQorCitpbmxpbmUgRG9jdW1lbnQqIEN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6ZG9jdW1l
bnQoKSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCk7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShDVVNUT01fRUxF
TUVOVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlZ2lz
dHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uN2I1OGMxMzkwNTQ4OGM0YmEzMGYwMDkzYzZhZTYyOWQ3NGUwNzM2MQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuaApAQCAt
MCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAg
ICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
IHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDdXN0b21FbGVtZW50UmVnaXN0cnlfaAorI2Rl
ZmluZSBDdXN0b21FbGVtZW50UmVnaXN0cnlfaAorCisjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5U
UykKKworI2luY2x1ZGUgIkNvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyLmgiCisjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKKyNpbmNsdWRlICJT
Y3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgIlN1cHBsZW1lbnRhYmxlLmgiCisjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvcjsKK2NsYXNzIERpY3Rpb25hcnk7
CitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEhUTUxFbGVtZW50OworY2xhc3MgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dDsKK2NsYXNzIFF1YWxpZmllZE5hbWU7CisKK2NsYXNzIEN1c3RvbUVsZW1lbnRS
ZWdpc3RyeSA6IHB1YmxpYyBSZWZDb3VudGVkPEN1c3RvbUVsZW1lbnRSZWdpc3RyeT4gLCBwdWJs
aWMgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEN1c3RvbUVsZW1lbnRSZWdpc3RyeSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIGV4cGxpY2l0IEN1c3RvbUVsZW1lbnRSZWdpc3RyeShEb2N1bWVudCopOworICAgIH5D
dXN0b21FbGVtZW50UmVnaXN0cnkoKTsKKworICAgIFBhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudENv
bnN0cnVjdG9yPiByZWdpc3RlckVsZW1lbnQoV2ViQ29yZTo6U2NyaXB0U3RhdGUqLCBjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IERpY3Rpb25hcnkmIG9wdGlvbnMsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICBQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gZmluZChjb25z
dCBRdWFsaWZpZWROYW1lJikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gY3Jl
YXRlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7CisgICAgRG9jdW1lbnQqIGRv
Y3VtZW50KCkgY29uc3Q7CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29u
c3RydWN0b3I+IGNvbnN0cnVjdG9yT2YoSFRNTEVsZW1lbnQqKTsKKyAgICAKK3ByaXZhdGU6Cisg
ICAgc3RhdGljIGJvb2wgaXNWYWxpZE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJik7CisKKyAgICB0
eXBlZGVmIEhhc2hNYXA8UXVhbGlmaWVkTmFtZTo6UXVhbGlmaWVkTmFtZUltcGwqLCBSZWZQdHI8
Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiA+Q29uc3RydWN0b3JNYXA7CisKKyAgICBDb25zdHJ1
Y3Rvck1hcCBtX2NvbnN0cnVjdG9yczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCmluZGV4IDc4YzFiYzJjNjA5OWE5NzZlYTZjMDViZjc4NDkwYmQwMjEzNTI2MTYuLjli
NmY0NDgyNTU0ZjUzMjZlYjUyMWY4NjQ3NjQxNzBiYzlhNzc4YmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcApAQCAtNDYsMTEgKzQ2LDE0IEBACiAjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9s
aWN5LmgiCiAjaW5jbHVkZSAiQ29udGV4dEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiQ29va2llSmFy
LmgiCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiQ3Vz
dG9tRWxlbWVudFJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiRE9NSW1wbGVtZW50YXRpb24uaCIKICNp
bmNsdWRlICJET01OYW1lZEZsb3dDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRE9NU2VsZWN0aW9u
LmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRGF0ZUNvbXBvbmVudHMuaCIK
KyNpbmNsdWRlICJEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRFdmVudFF1ZXVlLmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVy
LmgiCkBAIC02NjksNiArNjcyLDEwIEBAIHZvaWQgRG9jdW1lbnQ6OmRpc3Bvc2UoKQogCiAgICAg
ZGV0YWNoUGFyc2VyKCk7CiAKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorICAgICAgICBt
X3JlZ2lzdHJ5LmNsZWFyKCk7CisjZW5kaWYKKwogICAgIC8vIHJlbW92ZURldGFjaGVkQ2hpbGRy
ZW4oKSBkb2Vzbid0IGFsd2F5cyB1bnJlZ2lzdGVyIElEcywKICAgICAvLyBzbyB0ZWFyIGRvd24g
c2NvcGUgaW5mb3JtYXRpb24gdXBmcm9udCB0byBhdm9pZCBoYXZpbmcgc3RhbGUgcmVmZXJlbmNl
cyBpbiB0aGUgbWFwLgogICAgIGRlc3Ryb3lUcmVlU2NvcGVEYXRhKCk7CkBAIC04MjMsNiArODMw
LDI1IEBAIFBhc3NSZWZQdHI8RWxlbWVudD4gRG9jdW1lbnQ6OmNyZWF0ZUVsZW1lbnQoY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25DCiAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQo
UXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbmFtZSwgbnVsbEF0b20pLCBmYWxzZSk7CiB9CiAKKyNp
ZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3Ry
dWN0b3I+IERvY3VtZW50OjpyZWdpc3RlckVsZW1lbnQoV2ViQ29yZTo6U2NyaXB0U3RhdGUqIHN0
YXRlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IHJldHVybiByZWdpc3RlckVsZW1lbnQoc3RhdGUsIG5hbWUsIERpY3Rpb25hcnkoKSwgZWMpOwor
fQorCitQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gRG9jdW1lbnQ6OnJlZ2lz
dGVyRWxlbWVudChXZWJDb3JlOjpTY3JpcHRTdGF0ZSogc3RhdGUsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZSwgY29uc3QgRGljdGlvbmFyeSYgb3B0aW9ucywgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgaWYgKCFtX3JlZ2lzdHJ5KQorICAgICAgICBtX3JlZ2lzdHJ5ID0gYWRvcHRSZWYobmV3
IEN1c3RvbUVsZW1lbnRSZWdpc3RyeSh0aGlzKSk7CisgICAgcmV0dXJuIG1fcmVnaXN0cnktPnJl
Z2lzdGVyRWxlbWVudChzdGF0ZSwgbmFtZSwgb3B0aW9ucywgZWMpOworfQorCitQYXNzUmVmUHRy
PEN1c3RvbUVsZW1lbnRSZWdpc3RyeT4gRG9jdW1lbnQ6OnJlZ2lzdHJ5KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9yZWdpc3RyeTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRT
KQorCiBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IERvY3VtZW50OjpjcmVhdGVEb2N1bWVu
dEZyYWdtZW50KCkKIHsKICAgICByZXR1cm4gRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKGRvY3Vt
ZW50KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCA5NjFlNTFhZGExYWJhZGQ4NjlmNDJlY2Y5
MjMyYTAzY2RmMGQzNWRiLi5lYzRjZWM5ZTcyMGE2YTYxNzkyMjY1ZGI1YWZmNmQ2ZWQzMTg5Yzhm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtNzEsNiArNzEsOCBAQCBjbGFzcyBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0OwogY2xhc3MgQ2hhcmFjdGVyRGF0YTsKIGNsYXNzIENvbW1lbnQ7CiBjbGFz
cyBDb250ZXh0RmVhdHVyZXM7CitjbGFzcyBDdXN0b21FbGVtZW50Q29uc3RydWN0b3I7CitjbGFz
cyBDdXN0b21FbGVtZW50UmVnaXN0cnk7CiBjbGFzcyBET01JbXBsZW1lbnRhdGlvbjsKIGNsYXNz
IERPTU5hbWVkRmxvd0NvbGxlY3Rpb247CiBjbGFzcyBET01TZWxlY3Rpb247CkBAIC0xMTQyLDYg
KzExNDQsMTIgQEAgcHVibGljOgogICAgIFRleHRBdXRvc2l6ZXIqIHRleHRBdXRvc2l6ZXIoKSB7
IHJldHVybiBtX3RleHRBdXRvc2l6ZXIuZ2V0KCk7IH0KICNlbmRpZgogCisjaWYgRU5BQkxFKENV
U1RPTV9FTEVNRU5UUykKKyAgICBQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4g
cmVnaXN0ZXJFbGVtZW50KFdlYkNvcmU6OlNjcmlwdFN0YXRlKiwgY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lLCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29u
c3RydWN0b3I+IHJlZ2lzdGVyRWxlbWVudChXZWJDb3JlOjpTY3JpcHRTdGF0ZSosIGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSwgY29uc3QgRGljdGlvbmFyeSYgb3B0aW9ucywgRXhjZXB0aW9uQ29k
ZSYpOworICAgIFBhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5PiByZWdpc3RyeSgpIGNv
bnN0OworI2VuZGlmCisKICAgICB2b2lkIGFkanVzdEZsb2F0UXVhZHNGb3JTY3JvbGxBbmRBYnNv
bHV0ZVpvb21BbmRGcmFtZVNjYWxlKFZlY3RvcjxGbG9hdFF1YWQ+JiwgUmVuZGVyT2JqZWN0Kik7
CiAgICAgdm9pZCBhZGp1c3RGbG9hdFJlY3RGb3JTY3JvbGxBbmRBYnNvbHV0ZVpvb21BbmRGcmFt
ZVNjYWxlKEZsb2F0UmVjdCYsIFJlbmRlck9iamVjdCopOwogCkBAIC0xNTE4LDYgKzE1MjYsMTAg
QEAgcHJpdmF0ZToKICAgICBPd25QdHI8VGV4dEF1dG9zaXplcj4gbV90ZXh0QXV0b3NpemVyOwog
I2VuZGlmCiAKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorICAgIFJlZlB0cjxDdXN0b21F
bGVtZW50UmVnaXN0cnk+IG1fcmVnaXN0cnk7CisjZW5kaWYKKwogICAgIGJvb2wgbV9zY2hlZHVs
ZWRUYXNrc0FyZVN1c3BlbmRlZDsKICAgICAKICAgICBib29sIG1fdmlzdWFsVXBkYXRlc0FsbG93
ZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCmluZGV4IDcyMzNlMzI4NGUxMTgxYmFiOWQ4YmRl
NzVhMGQ0YTExNmY0NGJlZDIuLjM0MWVhYzBiZWM1YTE3ZjVmZTJlYTgwOWNkZWNhYTA0ODJmNzRi
YjQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCkBAIC0xMTcyLDggKzExNzIsOSBAQCBFTkQK
IDsKICAgICB9IGVsc2lmICgkd3JhcHBlckZhY3RvcnlUeXBlIGVxICJWOCIpIHsKICAgICAgICAg
cHJpbnQgRiA8PEVORAorI2luY2x1ZGUgIlY4SFRNTEN1c3RvbUVsZW1lbnQuaCIKICNpbmNsdWRl
ICJWOCRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50LmgiCi0gICAgICAgIAorCiAjaW5jbHVk
ZSA8djguaD4KIEVORAogOwpAQCAtMTI3NCw2ICsxMjc1LDExIEBAIEVORAogICAgIHJldHVybiBW
OFNWR0VsZW1lbnQ6OmNyZWF0ZVdyYXBwZXIoZWxlbWVudCwgY3JlYXRpb25Db250ZXh0LCBpc29s
YXRlKTsKIEVORAogOworICAgICAgICB9IGVsc2lmICgkcGFyYW1ldGVyc3tuYW1lc3BhY2V9IGVx
ICJIVE1MIikgeworICAgICAgICAgICAgcHJpbnQgRiA8PEVORAorICAgIHJldHVybiBWOEhUTUxD
dXN0b21FbGVtZW50Ojp3cmFwKGVsZW1lbnQsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CitF
TkQKKzsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHByaW50IEYgPDxFTkQKICAgICBy
ZXR1cm4gd3JhcCh0byRwYXJhbWV0ZXJze2ZhbGxiYWNrSW50ZXJmYWNlTmFtZX0oZWxlbWVudCks
IGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxEb2N1bWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5p
ZGwKaW5kZXggMjVmMGE1YzM5MDM1MTE0YjVkZjE5MTdjMjk1MjkxNjBhOWI0N2M5OC4uN2MyOWZj
YjVkYzE4OTJhYWFjNzJmNTI0MDM2M2VlMmMyNGQyM2Q5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TERvY3VtZW50LmlkbApAQCAtNTMsNiArNTMsMTEgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUg
RWxlbWVudCBhY3RpdmVFbGVtZW50OwogICAgIGJvb2xlYW4gaGFzRm9jdXMoKTsKIAorI2lmIGRl
ZmluZWQoRU5BQkxFX0NVU1RPTV9FTEVNRU5UUykgJiYgRU5BQkxFX0NVU1RPTV9FTEVNRU5UUwor
ICAgIFtWOEVuYWJsZWRBdFJ1bnRpbWU9Y3VzdG9tRE9NRWxlbWVudHMsIENvbmRpdGlvbmFsPUNV
U1RPTV9FTEVNRU5UUywgSW1wbGVtZW50ZWRBcz1yZWdpc3RlckVsZW1lbnQsIENhbGxXaXRoPVNj
cmlwdFN0YXRlXQorICAgIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciB3ZWJraXRSZWdpc3Rlcihp
biBET01TdHJpbmcgbmFtZSwgaW4gW09wdGlvbmFsXSBEaWN0aW9uYXJ5IG9wdGlvbnMpIHJhaXNl
cyhET01FeGNlcHRpb24pOworI2VuZGlmCisKICAgICAvLyBEZXByZWNhdGVkIGF0dHJpYnV0ZXMK
ICAgICAgICAgICAgICBbVHJlYXROdWxsQXM9TnVsbFN0cmluZ10gYXR0cmlidXRlIERPTVN0cmlu
ZyBiZ0NvbG9yOwogICAgICAgICAgICAgIFtUcmVhdE51bGxBcz1OdWxsU3RyaW5nXSBhdHRyaWJ1
dGUgRE9NU3RyaW5nIGZnQ29sb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L2ZlYXR1cmVzLmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKaW5k
ZXggNzdiMmM3NmM0NGEzMmZhOTMzMDRjZTRiY2QwN2UyMTA1ZmU5YzU1OC4uMTJlOTBmYjllYjdm
YzhkNGExOThhOTU4YzE1Mjc2ZDcxM2Y4ZWI2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9mZWF0dXJlcy5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVy
ZXMuZ3lwaQpAQCAtNTQsNiArNTQsNyBAQAogICAgICAgJ0VOQUJMRV9DU1NfVFJBTlNGT1JNU19B
TklNQVRJT05TX1VOUFJFRklYRUQ9MCcsCiAgICAgICAnRU5BQkxFX0NTU19WQVJJQUJMRVM9MScs
CiAgICAgICAnRU5BQkxFX0NTU19TVElDS1lfUE9TSVRJT049MScsCisgICAgICAnRU5BQkxFX0NV
U1RPTV9FTEVNRU5UUz0xJywKICAgICAgICdFTkFCTEVfQ1VTVE9NX1NDSEVNRV9IQU5ETEVSPTAn
LAogICAgICAgJ0VOQUJMRV9EQVNIQk9BUkRfU1VQUE9SVD0wJywKICAgICAgICdFTkFCTEVfREFU
QV9UUkFOU0ZFUl9JVEVNUz0xJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYlJ1bnRpbWVGZWF0dXJlcy5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViUnVudGltZUZlYXR1cmVzLmgKaW5kZXggZTM5NGQ3NWY0YzdhMWI5ZTBkNTJjMzliYjQ2
MWZlZTE4Y2FiOWEyMC4uYTA1NWYwODJiNzE1YzMzMDJiMzFkMzBlZjdlZWZiZDA0N2Y0YTVjMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUnVudGltZUZlYXR1
cmVzLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUnVudGltZUZlYXR1
cmVzLmgKQEAgLTEyNSw2ICsxMjUsOSBAQCBwdWJsaWM6CiAgICAgV0VCS0lUX0VYUE9SVCBzdGF0
aWMgdm9pZCBlbmFibGVTaGFkb3dET00oYm9vbCk7CiAgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMg
Ym9vbCBpc1NoYWRvd0RPTUVuYWJsZWQoKTsKIAorICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIHZv
aWQgZW5hYmxlQ3VzdG9tRE9NRWxlbWVudHMoYm9vbCk7CisgICAgV0VCS0lUX0VYUE9SVCBzdGF0
aWMgYm9vbCBpc0N1c3RvbURPTUVsZW1lbnRzRW5hYmxlZCgpOworCiAgICAgV0VCS0lUX0VYUE9S
VCBzdGF0aWMgdm9pZCBlbmFibGVTdHlsZVNjb3BlZChib29sKTsKICAgICBXRUJLSVRfRVhQT1JU
IHN0YXRpYyBib29sIGlzU3R5bGVTY29wZWRFbmFibGVkKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlJ1bnRpbWVGZWF0dXJlcy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJSdW50aW1lRmVhdHVyZXMuY3BwCmluZGV4IGExODQzNGUyOWVm
MTAwMmNkMzM5OGRiMjU4NGY4NDdkZDc0ODg5OWEuLjUxYmZkZmEwYjgyNzhhMDczZjRhYTY2YTM5
YzJkNGRkYzRiYzNlMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlJ1bnRpbWVGZWF0dXJlcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
UnVudGltZUZlYXR1cmVzLmNwcApAQCAtNDgxLDYgKzQ4MSwyNSBAQCBib29sIFdlYlJ1bnRpbWVG
ZWF0dXJlczo6aXNTaGFkb3dET01FbmFibGVkKCkKICNlbmRpZgogfQogCit2b2lkIFdlYlJ1bnRp
bWVGZWF0dXJlczo6ZW5hYmxlQ3VzdG9tRE9NRWxlbWVudHMoYm9vbCBlbmFibGUpCit7CisjaWYg
RU5BQkxFKENVU1RPTV9FTEVNRU5UUykKKyAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzZXRD
dXN0b21ET01FbGVtZW50cyhlbmFibGUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZW5hYmxl
KTsKKyNlbmRpZgorfQorCitib29sIFdlYlJ1bnRpbWVGZWF0dXJlczo6aXNDdXN0b21ET01FbGVt
ZW50c0VuYWJsZWQoKQoreworI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCisgICAgcmV0dXJu
IFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmN1c3RvbURPTUVsZW1lbnRzRW5hYmxlZCgpOworI2Vs
c2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworCiB2b2lkIFdlYlJ1bnRpbWVGZWF0
dXJlczo6ZW5hYmxlU3R5bGVTY29wZWQoYm9vbCBlbmFibGUpCiB7CiAjaWYgRU5BQkxFKFNUWUxF
X1NDT1BFRCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwpp
bmRleCAyMTJhYzBhN2FmMjQwMDA1NjJmZWVjNTI0YzM5YjQyMWExNTM2NGM1Li5mYjRlNjZiYTll
ZTI1NTYwNzU0NzNmOWM5YzBhNmYxNmY0NGY1YzM4IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VM
b2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTMtMDEtMjcgIEhh
amltZSBNb3JyaXRhICA8bW9ycml0YUBnb29nbGUuY29tPgorCisgICAgICAgIFtDdXN0b20gRWxl
bWVudHNdIEltcGxlbWVudCBiYXJlLWJvbmUgZG9jdW1lbnQucmVnaXN0ZXIoKQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwMjI5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KKworICAgICAgICBBZGRlZCBlbmFibGVDdXN0b21ET01F
bGVtZW50cyBmbGFnLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNo
ZWxsLmNwcDoKKyAgICAgICAgKFRlc3RTaGVsbDo6VGVzdFNoZWxsKToKKwogMjAxMy0wMi0yMyAg
TWFyayBQaWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVt
XSBEdW1wUmVuZGVyVHJlZSBUZXN0U2hlbGw6OmluaXRpYWxpemUgc2hvdWxkIHRha2UgUGxhdGZv
cm0qIG5vdyB0aGF0IFdlYktpdFBsYXRmb3JtU3VwcG9ydCBpcyBlbXB0eQpkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcCBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKaW5kZXggOTQ3Zjk4MDc2MDc2NzAyOTI1
YmRkNjQ0Y2E1MDAwMGZmYTNmMDM1My4uZDA3YjYzY2Y5NDAwMjliNDhiZWY4MTExNTE2NGVhY2Vk
YTgxZmQwOSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNo
ZWxsLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3Bw
CkBAIC0xNDUsNiArMTQ1LDcgQEAgVGVzdFNoZWxsOjpUZXN0U2hlbGwoKQogICAgIFdlYlJ1bnRp
bWVGZWF0dXJlczo6ZW5hYmxlVmlkZW9UcmFjayh0cnVlKTsKICAgICBXZWJSdW50aW1lRmVhdHVy
ZXM6OmVuYWJsZUdhbWVwYWQodHJ1ZSk7CiAgICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVT
aGFkb3dET00odHJ1ZSk7CisgICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVDdXN0b21ET01F
bGVtZW50cyh0cnVlKTsKICAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZVN0eWxlU2NvcGVk
KHRydWUpOwogICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlU2NyaXB0ZWRTcGVlY2godHJ1
ZSk7CiAgICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVSZXF1ZXN0QXV0b2NvbXBsZXRlKHRy
dWUpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IDBiMDg5NmNkY2I2ZmZjNGI3M2RkMGRjYzc0NjE0NDc5MTc3ZmUxNmUuLjFk
Yjk5NDQzNDI3MjAyOTY0ZTgzYWE4MTk4M2RlY2VmZDg5OGU4ZDAgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
MSBAQAorMjAxMy0wMi0xNCAgSGFqaW1lIE1vcnJpdGEgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisK
KyAgICAgICAgW0N1c3RvbSBFbGVtZW50c10gSW1wbGVtZW50IGJhcmUtYm9uZSBkb2N1bWVudC5y
ZWdpc3RlcigpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMDAyMjkKKworICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgorCisgICAgICAgICog
ZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLWJhc2ljLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLWJhc2ljLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1y
ZWVudHJhbnQtbnVsbC1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1yZWVudHJhbnQtbnVsbC1jb25zdHJ1
Y3Rvci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVn
aXN0ZXItcmVlbnRyYW50LXJldHVybmluZy1mYWtlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFudC1yZXR1cm5p
bmctZmFrZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQt
cmVnaXN0ZXItcmVlbnRyYW50LXRocm93aW5nLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFu
dC10aHJvd2luZy1jb25zdHJ1Y3Rvci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9j
dXN0b20vcmVzb3VyY2VzL2RvY3VtZW50LXJlZ2lzdGVyLWZ1enouanM6IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDEzLTAyLTI0ICBCZW5qYW1p
biBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgdGltZW91dCB0
byB0aGUgQ2hyb21pdW0gZXhwZWN0YXRpb24gb2Ygc3RhdGUtdXJsLXNldHMtbGlua3MtdmlzaXRl
ZC5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQt
cmVnaXN0ZXItYmFzaWMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9t
L2RvY3VtZW50LXJlZ2lzdGVyLWJhc2ljLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNmI2MjE5
NGQxZTMyMGFhNDdiMjA5MzI4Yzk0NWM1Yzk5YmM4ZmI1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLWJhc2ljLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDQ2IEBACitUZXN0aW5nIGRvY3VtZW50LnJlZ2lzdGVyKCkgYmFzaWMg
YmVoYXZpb3JzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBkb2N1bWVu
dC5yZWdpc3RlcignZm9vJywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSkgdGhyZXcgZXhjZXB0
aW9uIEVycm9yOiBJbnZhbGlkQ2hhcmFjdGVyRXJyb3I6IERPTSBFeGNlcHRpb24gNS4KK1BBU1Mg
ZG9jdW1lbnQucmVnaXN0ZXIoJ3hmb28nLCBjcmVhdGVSZWdpc3RlclBhcmFtdGVycygpKSB0aHJl
dyBleGNlcHRpb24gRXJyb3I6IEludmFsaWRDaGFyYWN0ZXJFcnJvcjogRE9NIEV4Y2VwdGlvbiA1
LgorUEFTUyBkb2N1bWVudC5yZWdpc3RlcignbWlzc2luZy1nbHlwaCcsIGNyZWF0ZVJlZ2lzdGVy
UGFyYW10ZXJzKCkpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSW52YWxpZENoYXJhY3RlckVycm9y
OiBET00gRXhjZXB0aW9uIDUuCitQQVNTIHR5cGVvZiBmb29Db25zdHJ1Y3RvciBpcyAnZnVuY3Rp
b24nCitQQVNTIGZvb0NvbnN0cnVjdG9yLnByb3RvdHlwZS5fX3Byb3RvX18gaXMgSFRNTEVsZW1l
bnQucHJvdG90eXBlCitQQVNTIGZvb0NvbnN0cnVjdG9yLnByb3RvdHlwZS50aGlzSXNQcm90b3R5
cGUgaXMgdHJ1ZQorUEFTUyBkb2N1bWVudC5yZWdpc3RlcigneC1mb28nLCBjcmVhdGVSZWdpc3Rl
clBhcmFtdGVycygpKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IEludmFsaWRTdGF0ZUVycm9yOiBE
T00gRXhjZXB0aW9uIDExLgorUEFTUyBkb2N1bWVudC5yZWdpc3RlcignWC1GT08nLCBjcmVhdGVS
ZWdpc3RlclBhcmFtdGVycygpKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IEludmFsaWRTdGF0ZUVy
cm9yOiBET00gRXhjZXB0aW9uIDExLgorUEFTUyBkb2N1bWVudC5yZWdpc3RlcigneC1iYWQtYScs
IHsgcHJvdG90eXBlOiBIVE1MRWxlbWVudC5wcm90b3R5cGUgfSkgdGhyZXcgZXhjZXB0aW9uIEVy
cm9yOiBJbnZhbGlkU3RhdGVFcnJvcjogRE9NIEV4Y2VwdGlvbiAxMS4KK1BBU1MgZG9jdW1lbnQu
cmVnaXN0ZXIoJ3gtYmFkLWInLCB7IHByb3RvdHlwZToge30gfSkgdGhyZXcgZXhjZXB0aW9uIEVy
cm9yOiBJbnZhbGlkU3RhdGVFcnJvcjogRE9NIEV4Y2VwdGlvbiAxMS4KK1BBU1MgZG9jdW1lbnQu
cmVnaXN0ZXIoJ3gtYmFkLWMnLCB7IHByb3RvdHlwZTogT2JqZWN0LmNyZWF0ZShEb2N1bWVudC5w
cm90b3R5cGUpIH0pIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSW52YWxpZFN0YXRlRXJyb3I6IERP
TSBFeGNlcHRpb24gMTEuCitQQVNTIGRvY3VtZW50LnJlZ2lzdGVyKCd4LWJhZC1kJywgeyBwcm90
b3R5cGU6IE9iamVjdC5jcmVhdGUoSFRNTFNwYW5FbGVtZW50LnByb3RvdHlwZSkgfSkgdGhyZXcg
ZXhjZXB0aW9uIEVycm9yOiBJbnZhbGlkU3RhdGVFcnJvcjogRE9NIEV4Y2VwdGlvbiAxMS4KK1BB
U1MgZm9vQ29uc3RydWN0b3IoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBET00gb2JqZWN0
IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4uCitQQVNTIGNyZWF0
ZWRGb28uX19wcm90b19fIGlzIGZvb0NvbnN0cnVjdG9yLnByb3RvdHlwZQorUEFTUyBjcmVhdGVk
Rm9vLmNvbnN0cnVjdG9yIGlzIGZvb0NvbnN0cnVjdG9yCitQQVNTIGNyZWF0ZWRGb28udGFnTmFt
ZSBpcyAnWC1GT08nCitQQVNTIGNyZWF0ZWRGb28udGV4dENvbnRlbnQgaXMgJ0hlbGxvJworUEFT
UyBjcmVhdGVkRm9vLmxhc3RDaGlsZCBpcyBjaGlsZERpdgorUEFTUyBwYXJzZWRGb28uX19wcm90
b19fIGlzIGZvb0NvbnN0cnVjdG9yLnByb3RvdHlwZQorUEFTUyBwYXJzZWRGb28udGFnTmFtZSBp
cyAnWC1GT08nCitQQVNTIHBhcnNlZEZvby5zb21lUHJvcGVydHkgaXMgY29udGFpbmVyLmZpcnN0
Q2hpbGQuc29tZVByb3BlcnR5CitQQVNTIGNyZWF0ZWRCYXIudGFnTmFtZSBpcyAnWC1CQVInCitQ
QVNTIGNyZWF0ZWRCYXoudGFnTmFtZSBpcyAnWC1CQVonCitQQVNTIGNyZWF0ZWRCYXoudGhpc0lz
UHJvdG90eXBlIGlzIHRydWUKK1BBU1MgY3JlYXRlZEJhei50aGlzSXNBbHNvUHJvdG90eXBlIGlz
IHRydWUKK1BBU1MgY3JlYXRlZFVwcGVyQmFyLmNvbnN0cnVjdG9yIGlzIGJhckNvbnN0cnVjdG9y
CitQQVNTIGNyZWF0ZWRVcHBlckJhci50YWdOYW1lIGlzICdYLUJBUicKK1BBU1MgY3JlYXRlZE1p
eGVkQmFyLmNvbnN0cnVjdG9yIGlzIGJhckNvbnN0cnVjdG9yCitQQVNTIGNyZWF0ZWRNaXhlZEJh
ci50YWdOYW1lIGlzICdYLUJBUicKK1BBU1MgY29udGFpbmVyLmZpcnN0Q2hpbGQuY29uc3RydWN0
b3IgaXMgYmFyQ29uc3RydWN0b3IKK1BBU1MgY29udGFpbmVyLmZpcnN0Q2hpbGQudGFnTmFtZSBp
cyAnWC1CQVInCitQQVNTIGNvbnRhaW5lci5sYXN0Q2hpbGQuY29uc3RydWN0b3IgaXMgYmFyQ29u
c3RydWN0b3IKK1BBU1MgY29udGFpbmVyLmxhc3RDaGlsZC50YWdOYW1lIGlzICdYLUJBUicKK1BB
U1MgKG5ldyAoZG9jdW1lbnQucmVnaXN0ZXIoJ3ktYmFyJywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRl
cnMoKSkpKCkpLnRhZ05hbWUgaXMgJ1ktQkFSJworUEFTUyAobmV3IChkb2N1bWVudC5yZWdpc3Rl
cigneXotYmFyJywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSkpKCkpLnRhZ05hbWUgaXMgJ1la
LUJBUicKK1BBU1MgKG5ldyAoZG9jdW1lbnQucmVnaXN0ZXIoJ3ktei1iYXInLCBjcmVhdGVSZWdp
c3RlclBhcmFtdGVycygpKSkoKSkudGFnTmFtZSBpcyAnWS1aLUJBUicKK1BBU1MgKG5ldyAoZG9j
dW1lbnQucmVnaXN0ZXIoJ3ktLWJhcicsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpKSgpKS50
YWdOYW1lIGlzICdZLS1CQVInCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2Rv
Y3VtZW50LXJlZ2lzdGVyLWJhc2ljLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20v
ZG9jdW1lbnQtcmVnaXN0ZXItYmFzaWMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMDU3NzhjMmMxMzJkZTBk
MTZhNDk1MTk0NGU3MTA3ODc4NjhlMmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLWJhc2ljLmh0bWwKQEAgLTAsMCArMSwx
MTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8ZGl2IGlkPSJjb250YWluZXIiPjwvZGl2PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0
aW5nIGRvY3VtZW50LnJlZ2lzdGVyKCkgYmFzaWMgYmVoYXZpb3JzLiIpOworCitpZiAod2luZG93
LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7Citkb2N1bWVudC5yZWdp
c3RlciA9IGRvY3VtZW50LnJlZ2lzdGVyIHx8IGRvY3VtZW50LndlYmtpdFJlZ2lzdGVyOworCitm
dW5jdGlvbiBjcmVhdGVSZWdpc3RlclBhcmFtdGVycygpCit7CisgICAgcmV0dXJuIHsKKyAgICAg
ICAgcHJvdG90eXBlOiBPYmplY3QuY3JlYXRlKEhUTUxFbGVtZW50LnByb3RvdHlwZSwgeyB0aGlz
SXNQcm90b3R5cGU6IHsgdmFsdWU6IHRydWUgfSB9KQorICAgIH07Cit9CisKKy8vIEludmFsaWQg
bmFtZXMKK3Nob3VsZFRocm93KCJkb2N1bWVudC5yZWdpc3RlcignZm9vJywgY3JlYXRlUmVnaXN0
ZXJQYXJhbXRlcnMoKSkiLCAiJ0Vycm9yOiBJbnZhbGlkQ2hhcmFjdGVyRXJyb3I6IERPTSBFeGNl
cHRpb24gNSciKTsKK3Nob3VsZFRocm93KCJkb2N1bWVudC5yZWdpc3RlcigneGZvbycsIGNyZWF0
ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpIiwgIidFcnJvcjogSW52YWxpZENoYXJhY3RlckVycm9yOiBE
T00gRXhjZXB0aW9uIDUnIik7CitzaG91bGRUaHJvdygiZG9jdW1lbnQucmVnaXN0ZXIoJ21pc3Np
bmctZ2x5cGgnLCBjcmVhdGVSZWdpc3RlclBhcmFtdGVycygpKSIsICInRXJyb3I6IEludmFsaWRD
aGFyYWN0ZXJFcnJvcjogRE9NIEV4Y2VwdGlvbiA1JyIpOworCit2YXIgZm9vQ29uc3RydWN0b3Ig
PSBkb2N1bWVudC5yZWdpc3RlcigieC1mb28iLCBjcmVhdGVSZWdpc3RlclBhcmFtdGVycygpKTsK
K3Nob3VsZEJlKCJ0eXBlb2YgZm9vQ29uc3RydWN0b3IiLCAiJ2Z1bmN0aW9uJyIpOworc2hvdWxk
QmUoImZvb0NvbnN0cnVjdG9yLnByb3RvdHlwZS5fX3Byb3RvX18iLCAiSFRNTEVsZW1lbnQucHJv
dG90eXBlIik7CitzaG91bGRCZVRydWUoImZvb0NvbnN0cnVjdG9yLnByb3RvdHlwZS50aGlzSXNQ
cm90b3R5cGUiKTsKKworLy8gTmFtZSBjb25mbGljdHMKK3Nob3VsZFRocm93KCJkb2N1bWVudC5y
ZWdpc3RlcigneC1mb28nLCBjcmVhdGVSZWdpc3RlclBhcmFtdGVycygpKSIsICInRXJyb3I6IElu
dmFsaWRTdGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDExJyIpOworc2hvdWxkVGhyb3coImRvY3Vt
ZW50LnJlZ2lzdGVyKCdYLUZPTycsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpIiwgIidFcnJv
cjogSW52YWxpZFN0YXRlRXJyb3I6IERPTSBFeGNlcHRpb24gMTEnIik7CisKKy8vIEJhZCBwcm90
b3R5cGU6IGNvbnN0cnVjdG9yIHByb3BlcnR5IGV4aXN0cworc2hvdWxkVGhyb3coImRvY3VtZW50
LnJlZ2lzdGVyKCd4LWJhZC1hJywgeyBwcm90b3R5cGU6IEhUTUxFbGVtZW50LnByb3RvdHlwZSB9
KSIsICInRXJyb3I6IEludmFsaWRTdGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDExJyIpOworLy8g
QmFkIHByb3RvdHlwZTogbWlzc2luZyBfX3Byb3RvX18KK3Nob3VsZFRocm93KCJkb2N1bWVudC5y
ZWdpc3RlcigneC1iYWQtYicsIHsgcHJvdG90eXBlOiB7fSB9KSIsICInRXJyb3I6IEludmFsaWRT
dGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDExJyIpOworLy8gQmFkIHByb3RvdHlwZTogd3Jvbmcg
X19wcm90b19fCitzaG91bGRUaHJvdygiZG9jdW1lbnQucmVnaXN0ZXIoJ3gtYmFkLWMnLCB7IHBy
b3RvdHlwZTogT2JqZWN0LmNyZWF0ZShEb2N1bWVudC5wcm90b3R5cGUpIH0pIiwgIidFcnJvcjog
SW52YWxpZFN0YXRlRXJyb3I6IERPTSBFeGNlcHRpb24gMTEnIik7CisvLyBCdWcgMTEwNDM2IC0g
RWxlbWVudHMgb3RoZXIgdGhhbiBIVE1MRW1lbWVudCBzaG91bGQgYmUgYWxsb3dlZCBhcyBhIHN1
cGVyY2xhc3MuCitzaG91bGRUaHJvdygiZG9jdW1lbnQucmVnaXN0ZXIoJ3gtYmFkLWQnLCB7IHBy
b3RvdHlwZTogT2JqZWN0LmNyZWF0ZShIVE1MU3BhbkVsZW1lbnQucHJvdG90eXBlKSB9KSIsICIn
RXJyb3I6IEludmFsaWRTdGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDExJyIpOworLy8gQ2FsbCBh
cyBmdW5jdGlvbgorc2hvdWxkVGhyb3coImZvb0NvbnN0cnVjdG9yKCkiLCAiJ1R5cGVFcnJvcjog
RE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJyIp
CisKKy8vIENvbnN0cnVjdG9yIGluaXRpYXRlZCBpbnN0YW50aWF0aW9uCit2YXIgY3JlYXRlZEZv
byA9IG5ldyBmb29Db25zdHJ1Y3RvcigpOworCisvLyBKUyBidWlsdC1pbiBwcm9wZXJ0aWVzCitz
aG91bGRCZSgiY3JlYXRlZEZvby5fX3Byb3RvX18iLCAiZm9vQ29uc3RydWN0b3IucHJvdG90eXBl
Iik7CitzaG91bGRCZSgiY3JlYXRlZEZvby5jb25zdHJ1Y3RvciIsICJmb29Db25zdHJ1Y3RvciIp
OworCisvLyBOYXRpdmUgZ2V0dGVyCitzaG91bGRCZSgiY3JlYXRlZEZvby50YWdOYW1lIiwgIidY
LUZPTyciKTsKKworLy8gTmF0aXZlIHNldHRlcgorY3JlYXRlZEZvby5pbm5lckhUTUwgPSAiSGVs
bG8iOworc2hvdWxkQmUoImNyZWF0ZWRGb28udGV4dENvbnRlbnQiLCAiJ0hlbGxvJyIpOworCisv
LyBOYXRpdmUgbWV0aG9kCit2YXIgY2hpbGREaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk
aXYiKTsKK2NyZWF0ZWRGb28uYXBwZW5kQ2hpbGQoY2hpbGREaXYpOworc2hvdWxkQmUoImNyZWF0
ZWRGb28ubGFzdENoaWxkIiwgImNoaWxkRGl2Iik7CisKKy8vIFBhcnNlciBpbml0aWF0ZWQgaW5z
dGFudGlhdGlvbgordmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250
YWluZXIiKTsKK2NvbnRhaW5lci5pbm5lckhUTUwgPSAiPHgtZm9vPjwveC1mb28+IjsKK3BhcnNl
ZEZvbyA9IGNvbnRhaW5lci5maXJzdENoaWxkOworCitzaG91bGRCZSgicGFyc2VkRm9vLl9fcHJv
dG9fXyIsICJmb29Db25zdHJ1Y3Rvci5wcm90b3R5cGUiKTsKK3Nob3VsZEJlKCJwYXJzZWRGb28u
dGFnTmFtZSIsICInWC1GT08nIik7CisKKy8vIEVuc3VyaW5nIHRoZSB3cmFwcGVyIGlzIHJldGFp
bmVkCitwYXJzZWRGb28uc29tZVByb3BlcnR5ID0gImhlbGxvIjsKK3Nob3VsZEJlKCJwYXJzZWRG
b28uc29tZVByb3BlcnR5IiwgImNvbnRhaW5lci5maXJzdENoaWxkLnNvbWVQcm9wZXJ0eSIpOwor
CisvLyBIYXZpbmcgYW5vdGhlciBjb25zdHJ1Y3RvcgordmFyIGJhckNvbnN0cnVjdG9yID0gZG9j
dW1lbnQucmVnaXN0ZXIoIngtYmFyIiwgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSk7Cit2YXIg
Y3JlYXRlZEJhciA9IG5ldyBiYXJDb25zdHJ1Y3RvcigpOworc2hvdWxkQmUoImNyZWF0ZWRCYXIu
dGFnTmFtZSIsICInWC1CQVInIik7CisKKy8vIEhhdmluZyBhIHN1YmNsYXNzCit2YXIgYmF6Q29u
c3RydWN0b3IgPSBkb2N1bWVudC5yZWdpc3RlcigieC1iYXoiLCB7IHByb3RvdHlwZTogT2JqZWN0
LmNyZWF0ZShmb29Db25zdHJ1Y3Rvci5wcm90b3R5cGUsIHsgdGhpc0lzQWxzb1Byb3RvdHlwZTog
eyB2YWx1ZTogdHJ1ZSB9IH0pIH0pOwordmFyIGNyZWF0ZWRCYXogPSBuZXcgYmF6Q29uc3RydWN0
b3IoKTsKK3Nob3VsZEJlKCJjcmVhdGVkQmF6LnRhZ05hbWUiLCAiJ1gtQkFaJyIpOworc2hvdWxk
QmVUcnVlKCJjcmVhdGVkQmF6LnRoaXNJc1Byb3RvdHlwZSIpOworc2hvdWxkQmVUcnVlKCJjcmVh
dGVkQmF6LnRoaXNJc0Fsc29Qcm90b3R5cGUiKTsKKworLy8gV2l0aCBpcnJlZ3VsYXIgY2FzZXMK
K3ZhciBjcmVhdGVkVXBwZXJCYXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJYLUJBUiIpOwor
dmFyIGNyZWF0ZWRNaXhlZEJhciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlgtQmFyIik7Citz
aG91bGRCZSgiY3JlYXRlZFVwcGVyQmFyLmNvbnN0cnVjdG9yIiwgImJhckNvbnN0cnVjdG9yIik7
CitzaG91bGRCZSgiY3JlYXRlZFVwcGVyQmFyLnRhZ05hbWUiLCAiJ1gtQkFSJyIpOworc2hvdWxk
QmUoImNyZWF0ZWRNaXhlZEJhci5jb25zdHJ1Y3RvciIsICJiYXJDb25zdHJ1Y3RvciIpOworc2hv
dWxkQmUoImNyZWF0ZWRNaXhlZEJhci50YWdOYW1lIiwgIidYLUJBUiciKTsKKworY29udGFpbmVy
LmlubmVySFRNTCA9ICI8WC1CQVI+PC9YLUJBUj48WC1CYXI+PC9YLUJhcj4iOworc2hvdWxkQmUo
ImNvbnRhaW5lci5maXJzdENoaWxkLmNvbnN0cnVjdG9yIiwgImJhckNvbnN0cnVjdG9yIik7Citz
aG91bGRCZSgiY29udGFpbmVyLmZpcnN0Q2hpbGQudGFnTmFtZSIsICInWC1CQVInIik7CitzaG91
bGRCZSgiY29udGFpbmVyLmxhc3RDaGlsZC5jb25zdHJ1Y3RvciIsICJiYXJDb25zdHJ1Y3RvciIp
Oworc2hvdWxkQmUoImNvbnRhaW5lci5sYXN0Q2hpbGQudGFnTmFtZSIsICInWC1CQVInIik7CisK
Ky8vIFN0cmFuZ2UgYnV0IHZhbGlkIG5hbWVzCitzaG91bGRCZSgiKG5ldyAoZG9jdW1lbnQucmVn
aXN0ZXIoJ3ktYmFyJywgY3JlYXRlUmVnaXN0ZXJQYXJhbXRlcnMoKSkpKCkpLnRhZ05hbWUiLCAi
J1ktQkFSJyIpOworc2hvdWxkQmUoIihuZXcgKGRvY3VtZW50LnJlZ2lzdGVyKCd5ei1iYXInLCBj
cmVhdGVSZWdpc3RlclBhcmFtdGVycygpKSkoKSkudGFnTmFtZSIsICInWVotQkFSJyIpOworc2hv
dWxkQmUoIihuZXcgKGRvY3VtZW50LnJlZ2lzdGVyKCd5LXotYmFyJywgY3JlYXRlUmVnaXN0ZXJQ
YXJhbXRlcnMoKSkpKCkpLnRhZ05hbWUiLCAiJ1ktWi1CQVInIik7CitzaG91bGRCZSgiKG5ldyAo
ZG9jdW1lbnQucmVnaXN0ZXIoJ3ktLWJhcicsIGNyZWF0ZVJlZ2lzdGVyUGFyYW10ZXJzKCkpKSgp
KS50YWdOYW1lIiwgIidZLS1CQVInIik7CisKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4u
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lz
dGVyLXJlZW50cmFudC1udWxsLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1yZWVudHJhbnQtbnVsbC1jb25zdHJ1
Y3Rvci1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTY1YjU5OGUzNWEzN2NiOTliNDQ2NDUxM2Vj
ZTQwZTYyNmNlM2Y3OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1
c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1yZWVudHJhbnQtbnVsbC1jb25zdHJ1Y3Rvci1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSw5IEBACitGdXp6aW5nIGRvY3VtZW50LnJlZ2lzdGVyKCkgdGhyb3Vn
aCBnZXR0ZXJzLiBQQVNTIHVsZXNzIGNyYXNoLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rl
ci1yZWVudHJhbnQtbnVsbC1jb25zdHJ1Y3Rvci5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20v
Y3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFudC1udWxsLWNvbnN0cnVjdG9yLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uODA4YTAwYjY3MTE3YWU1YjI4ODY5NWI3MjAzZjE3MDA2YWNkZGMxNgotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdp
c3Rlci1yZWVudHJhbnQtbnVsbC1jb25zdHJ1Y3Rvci5odG1sCkBAIC0wLDAgKzEsMjMgQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4vcmVzb3VyY2Vz
L2RvY3VtZW50LXJlZ2lzdGVyLWZ1enouanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
ZGl2IGlkPSJjb250YWluZXIiPjwvZGl2PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJGdXp6aW5n
IGRvY3VtZW50LnJlZ2lzdGVyKCkgdGhyb3VnaCBnZXR0ZXJzLiBQQVNTIHVsZXNzIGNyYXNoLiIp
OworCitzZXR1cE9iamVjdEhvb2tzKHsKKyAgICBwcm90b3R5cGVHZXQ6IGZ1bmN0aW9uKCkgeyB9
LAorICAgIHByb3RvdHlwZVNldDogZnVuY3Rpb24odmFsdWUpIHsgfSwKKyAgICBjb25zdHJ1Y3Rv
ckdldDogZnVuY3Rpb24oKSB7IH0sCisgICAgY29uc3RydWN0b3JTZXQ6IGZ1bmN0aW9uKHZhbHVl
KSB7IH0KK30pOworCitleGVyY2lzZURvY3VtZW50UmVnaXN0ZXIoKTsKKzwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9t
L2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFudC1yZXR1cm5pbmctZmFrZS1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVlbnRyYW50
LXJldHVybmluZy1mYWtlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNjViNTk4ZTM1YTM3Y2I5
OWI0NDY0NTEzZWNlNDBlNjI2Y2UzZjc5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFudC1yZXR1cm5pbmctZmFr
ZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw5IEBACitGdXp6aW5nIGRvY3VtZW50LnJlZ2lzdGVy
KCkgdGhyb3VnaCBnZXR0ZXJzLiBQQVNTIHVsZXNzIGNyYXNoLgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVu
dC1yZWdpc3Rlci1yZWVudHJhbnQtcmV0dXJuaW5nLWZha2UuaHRtbCBiL0xheW91dFRlc3RzL2Zh
c3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1yZWVudHJhbnQtcmV0dXJuaW5nLWZha2Uu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lN2U5MGZiNzZlMzhkN2M1NDE2YmJhNjdmNWE3NTI5NWJiMzhkZmRi
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3VzdG9tL2RvY3VtZW50
LXJlZ2lzdGVyLXJlZW50cmFudC1yZXR1cm5pbmctZmFrZS5odG1sCkBAIC0wLDAgKzEsMjYgQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4vcmVzb3Vy
Y2VzL2RvY3VtZW50LXJlZ2lzdGVyLWZ1enouanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8ZGl2IGlkPSJjb250YWluZXIiPjwvZGl2PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJGdXp6
aW5nIGRvY3VtZW50LnJlZ2lzdGVyKCkgdGhyb3VnaCBnZXR0ZXJzLiBQQVNTIHVsZXNzIGNyYXNo
LiIpOworCit2YXIgYmFkUHJvdG90eXBlID0gSW1hZ2UucHJvdG90eXBlOwordmFyIGJhZENvbnN0
cnVjdG9yID0gSW1hZ2UucHJvdG90eXBlLmNvbnN0cnVjdG9yOworCitzZXR1cE9iamVjdEhvb2tz
KHsKKyAgICBwcm90b3R5cGVHZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gYmFkUHJvdG90eXBlOyB9
LAorICAgIHByb3RvdHlwZVNldDogZnVuY3Rpb24odmFsdWUpIHsgIH0sCisgICAgY29uc3RydWN0
b3JHZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gYmFkQ29uc3RydWN0b3I7IH0sCisgICAgY29uc3Ry
dWN0b3JTZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7ICB9Cit9KTsKKworZXhlcmNpc2VEb2N1bWVudFJl
Z2lzdGVyKCk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1yZWVudHJhbnQtdGhy
b3dpbmctY29uc3RydWN0b3ItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vY3Vz
dG9tL2RvY3VtZW50LXJlZ2lzdGVyLXJlZW50cmFudC10aHJvd2luZy1jb25zdHJ1Y3Rvci1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYjFmYzkyOTQxNDg2YTQ3YmFmN2RjN2RmN2ZiNTBjYzUzMzg3
YjE4ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1
bWVudC1yZWdpc3Rlci1yZWVudHJhbnQtdGhyb3dpbmctY29uc3RydWN0b3ItZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsMTAgQEAKK0Z1enppbmcgZG9jdW1lbnQucmVnaXN0ZXIoKSB0aHJvdWdoIGdl
dHRlcnMuIFBBU1MgdWxlc3MgY3Jhc2guCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
CitDb25zdHJ1Y3RvciBvYmplY3QgaXNuJ3QgY3JlYXRlZC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0ZXItcmVlbnRyYW50LXRocm93aW5nLWNvbnN0
cnVjdG9yLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jdXN0b20vZG9jdW1lbnQtcmVnaXN0
ZXItcmVlbnRyYW50LXRocm93aW5nLWNvbnN0cnVjdG9yLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2JjMjkw
ZWQ3MTMxYmE2ODdkOTYwM2NmOTJjY2YzOTAwNDZhZmIxYgotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9kb2N1bWVudC1yZWdpc3Rlci1yZWVudHJhbnQtdGhy
b3dpbmctY29uc3RydWN0b3IuaHRtbApAQCAtMCwwICsxLDIzIEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuL3Jlc291cmNlcy9kb2N1bWVudC1yZWdp
c3Rlci1mdXp6LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0iY29udGFp
bmVyIj48L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiRnV6emluZyBkb2N1bWVudC5yZWdp
c3RlcigpIHRocm91Z2ggZ2V0dGVycy4gUEFTUyB1bGVzcyBjcmFzaC4iKTsKKworc2V0dXBPYmpl
Y3RIb29rcyh7CisgICAgcHJvdG90eXBlR2V0OiBmdW5jdGlvbigpIHsgdGhyb3cgIkVycm9yIjsg
fSwKKyAgICBwcm90b3R5cGVTZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7IHRocm93ICJFcnJvciI7IH0s
CisgICAgY29uc3RydWN0b3JHZXQ6IGZ1bmN0aW9uKCkgeyB0aHJvdyAiRXJyb3IiOyB9LAorICAg
IGNvbnN0cnVjdG9yU2V0OiBmdW5jdGlvbih2YWx1ZSkgeyB0aHJvdyAiRXJyb3IiOyB9Cit9KTsK
KworZXhlcmNpc2VEb2N1bWVudFJlZ2lzdGVyKCk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9yZXNvdXJjZXMv
ZG9jdW1lbnQtcmVnaXN0ZXItZnV6ei5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2N1c3RvbS9y
ZXNvdXJjZXMvZG9jdW1lbnQtcmVnaXN0ZXItZnV6ei5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZDJkMzM3OWJl
ZDkyNDFmYWIyMDRkZTVjMTYzNTQ2OTFlZWU5NWUwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9kb20vY3VzdG9tL3Jlc291cmNlcy9kb2N1bWVudC1yZWdpc3Rlci1mdXp6Lmpz
CkBAIC0wLDAgKzEsNDkgQEAKKworZnVuY3Rpb24gc2V0dXBPYmplY3RIb29rcyhob29rcykKK3sK
KyAgICAvLyBXcmFwcGVyIGZvciB0aGVzZSBvYmplY3Qgc2hvdWxkIGJlIG1hdGVyaWFsaXplZCBi
ZWZvcmUgc2V0dGluZyBob29rcy4KKyAgICBjb25zb2xlLmxvZzsKKyAgICBkb2N1bWVudC53ZWJr
aXRSZWdpc3RlcgorICAgIEhUTUxTcGFuRWxlbWVudC5wcm90b3R5cGU7CisKKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoT2JqZWN0LnByb3RvdHlwZSwgInByb3RvdHlwZSIsIHsKKyAgICAgICAg
Z2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIGhvb2tzLnByb3RvdHlwZUdldCgpOyB9LAorICAgICAg
ICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiBob29rcy5wcm90b3R5cGVTZXQodmFsdWUp
OyB9CisgICAgfSk7CisKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT2JqZWN0LnByb3RvdHlw
ZSwgImNvbnN0cnVjdG9yIiwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gaG9v
a3MuY29uc3RydWN0b3JHZXQoKTsgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkgeyBy
ZXR1cm4gaG9va3MuY29uc3RydWN0b3JTZXQodmFsdWUpOyB9CisgICAgfSk7CisKKyAgICByZXR1
cm4gaG9va3M7Cit9CisKK2Z1bmN0aW9uIGV4ZXJjaXNlRG9jdW1lbnRSZWdpc3RlcigpCit7Cisg
ICAgdmFyIG15Q29uc3RydWN0b3IgPSBudWxsOworICAgIHZhciBteVByb3RvdHlwZSA9IE9iamVj
dC5jcmVhdGUoSFRNTEVsZW1lbnQucHJvdG90eXBlKTsKKyAgICB0cnkgeworICAgICAgICBteUNv
bnN0cnVjdG9yID0gZG9jdW1lbnQud2Via2l0UmVnaXN0ZXIoIngtZG8tbm90aGluZyIsIHsgcHJv
dG90eXBlOiBteVByb3RvdHlwZSB9KTsKKyAgICB9IGNhdGNoIChlKSB7IH0KKworICAgIHRyeSB7
CisgICAgICAgIGlmICghbXlDb25zdHJ1Y3RvcikgeworICAgICAgICAgICAgZGVidWcoIkNvbnN0
cnVjdG9yIG9iamVjdCBpc24ndCBjcmVhdGVkLiIpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKG15Q29uc3RydWN0b3IucHJvdG90eXBlICE9IG15UHJvdG90
eXBlKSB7CisgICAgICAgICAgICBjb25zb2xlLmxvZygiRkFJTDogYmFkIHByb3RvdHlwZSIpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgfQorCisgICAgICAgIHZhciBlbGVtZW50ID0g
bmV3IG15Q29uc3RydWN0b3IoKTsKKyAgICAgICAgaWYgKCFlbGVtZW50KQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBpZiAoZWxlbWVudC5jb25zdHJ1Y3RvciAhPSBteUNvbnN0cnVjdG9y
KSB7CisgICAgICAgICAgICBjb25zb2xlLmxvZygiRkFJTDogYmFkIGNvbnN0cnVjdG9yIik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICB9CisgICAgfSBjYXRjaCAoZSkgeyBjb25zb2xl
LmxvZyhlKTsgfQorfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RF
eHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucwpp
bmRleCA4ZTJlY2E3NDc1NzJkNWY0MTVlMGU3NjA1NWEwZjkxZjA3MmFmZTc4Li41ZmY5MmY3ZjAz
NDM4MjI1N2U5YjhhNTYwZmU1YjQ5ODE0YzI1NDNhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMvVGVzdEV4cGVjdGF0aW9ucwpAQCAtMTExMiw2ICsxMTEyLDkgQEAgd2Via2l0Lm9yZy9iLzc2
NDg5IGNvbXBvc2l0aW5nL3dlYmdsL3dlYmdsLXJlZmxlY3Rpb24uaHRtbCBbIEltYWdlT25seUZh
aWx1cmUgXQogd2Via2l0Lm9yZy9iLzc2NDM5IFsgRGVidWcgXSBmYXN0L2RvbS9zaGFkb3cvY29u
dGVudC1lbGVtZW50LWFwaS5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvNzY0MzkgWyBE
ZWJ1ZyBdIGZhc3QvZG9tL3NoYWRvdy9jb250ZW50LWVsZW1lbnQtb3V0c2lkZS1zaGFkb3cuaHRt
bCBbIEZhaWx1cmUgXQogCisjIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpIGlzIGRpc2FibGVkLgor
ZmFzdC9kb20vY3VzdG9tCisKICMgQ1NTIFZhcmlhYmxlcyBhcmUgbm90IHlldCBlbmFibGVkLgog
d2Via2l0Lm9yZy9iLzg1NTgwIGZhc3QvY3NzL3ZhcmlhYmxlcwogd2Via2l0Lm9yZy9iLzg1NTgw
IGluc3BlY3Rvci9zdHlsZXMvdmFyaWFibGVzCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>