<?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>179701</bug_id>
          
          <creation_ts>2017-11-14 16:02:17 -0800</creation_ts>
          <short_desc>Add a base class for HTMLCanvasElement and OffscreenCanvas</short_desc>
          <delta_ts>2017-11-23 11:10:30 -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>Canvas</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dean Jackson">dino</reporter>
          <assigned_to name="Dean Jackson">dino</assigned_to>
          <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>graouts</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>joepeck</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1371619</commentid>
    <comment_count>0</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2017-11-14 16:02:17 -0800</bug_when>
    <thetext>Add a base class for HTMLCanvasElement and OffscreenCanvas</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1371620</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-11-14 16:03:09 -0800</bug_when>
    <thetext>&lt;rdar://problem/35545195&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1371636</commentid>
    <comment_count>2</comment_count>
      <attachid>326938</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2017-11-14 16:23:26 -0800</bug_when>
    <thetext>Created attachment 326938
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1371657</commentid>
    <comment_count>3</comment_count>
      <attachid>326938</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-11-14 16:45:43 -0800</bug_when>
    <thetext>Comment on attachment 326938
Patch

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

&gt; Source/WebCore/html/CanvasBase.h:29
&gt; +#include &quot;IntSize.h&quot;
&gt; +#include &quot;ScriptExecutionContext.h&quot;

These can probably be forward declared.

&gt; Source/WebCore/html/CanvasBase.h:40
&gt; +public:
&gt; +
&gt; +    virtual ~CanvasBase() = default;

Extra newline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1372731</commentid>
    <comment_count>4</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2017-11-16 11:21:44 -0800</bug_when>
    <thetext>Committed r224929: &lt;https://trac.webkit.org/changeset/224929&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373627</commentid>
    <comment_count>5</comment_count>
      <attachid>326938</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-11-18 19:41:31 -0800</bug_when>
    <thetext>Comment on attachment 326938
Patch

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

&gt; Source/WebCore/html/CanvasBase.h:45
&gt; +    HTMLCanvasElement* asHTMLCanvasElement();

I would suggest removing this function, and just having callers use is&lt;HTMLCanvasElement&gt; and downcast&lt;HTMLCanvasElement&gt; as needed. I don’t know many callers who want to get null when it’s the wrong type.

I just made this change to EventTarget, removing the toNode function and converting callers to use is&lt;Node&gt; and downcast&lt;Node&gt; instead.

&gt; Source/WebCore/html/HTMLCanvasElement.h:86
&gt; +    unsigned width() const override { return size().width(); }
&gt; +    unsigned height() const override { return size().height(); }

final

&gt; Source/WebCore/html/HTMLCanvasElement.h:91
&gt; +    const IntSize&amp; size() const override { return m_size; }

final

&gt; Source/WebCore/html/HTMLCanvasElement.h:93
&gt; +    void setSize(const IntSize&amp; newSize) override

final

&gt; Source/WebCore/html/HTMLCanvasElement.h:104
&gt; +    bool isHTMLCanvasElement() const override { return true; }

final and private

&gt; Source/WebCore/html/HTMLCanvasElement.h:156
&gt; +    SecurityOrigin* securityOrigin() const override;

final

&gt; Source/WebCore/html/OffscreenCanvas.h:50
&gt; +class OffscreenCanvas : public RefCounted&lt;OffscreenCanvas&gt;, public CanvasBase, public EventTargetWithInlineData {

Can this be final?

&gt; Source/WebCore/html/OffscreenCanvas.h:67
&gt; +    unsigned width() const override;

final

&gt; Source/WebCore/html/OffscreenCanvas.h:69
&gt; +    unsigned height() const override;

final

&gt; Source/WebCore/html/OffscreenCanvas.h:72
&gt; +    const IntSize&amp; size() const override;

final

&gt; Source/WebCore/html/OffscreenCanvas.h:73
&gt; +    void setSize(const IntSize&amp;) override;

final

&gt; Source/WebCore/html/OffscreenCanvas.h:75
&gt; +    bool isOffscreenCanvas() const override { return true; }

final, also should be private

Generally I suggest considering making some of the virtual function overrides private if they only need to be called on the base class.

&gt; Source/WebCore/html/OffscreenCanvas.h:91
&gt; +    ScriptExecutionContext* scriptExecutionContext() const override { return CanvasBase::scriptExecutionContext(); }

final

&gt; Source/WebCore/html/canvas/CanvasRenderingContext.cpp:72
&gt; +void CanvasRenderingContext::ref()
&gt; +{
&gt; +    if (m_canvas.isHTMLCanvasElement()) {
&gt; +        auto* htmlCanvas = static_cast&lt;HTMLCanvasElement*&gt;(&amp;m_canvas);
&gt; +        htmlCanvas-&gt;ref();
&gt; +        return;
&gt; +    }
&gt; +    if (is&lt;OffscreenCanvas&gt;(m_canvas)) {
&gt; +        auto* offscreenCanvas = static_cast&lt;OffscreenCanvas*&gt;(&amp;m_canvas);
&gt; +        offscreenCanvas-&gt;ref();
&gt; +        return;
&gt; +    }
&gt; +}
&gt; +
&gt; +void CanvasRenderingContext::deref()
&gt; +{
&gt; +    if (m_canvas.isHTMLCanvasElement()) {
&gt; +        auto* htmlCanvas = static_cast&lt;HTMLCanvasElement*&gt;(&amp;m_canvas);
&gt; +        htmlCanvas-&gt;deref();
&gt; +        return;
&gt; +    }
&gt; +    if (is&lt;OffscreenCanvas&gt;(m_canvas)) {
&gt; +        auto* offscreenCanvas = static_cast&lt;OffscreenCanvas*&gt;(&amp;m_canvas);
&gt; +        offscreenCanvas-&gt;deref();
&gt; +        return;
&gt; +    }
&gt; +}

A better pattern is to have a virtual ref/deref function in CanvasBase. EventTarget has an example of this: see refEventTarget/derefEventTarget.

Then these functions would just be m_canvas.ref() and m_canvas.deref().

&gt; Source/WebCore/html/canvas/CanvasRenderingContext.h:52
&gt; +    CanvasBase&amp; canvasBase() const { return m_canvas; }

I don’t understand why this function is named canvasBase() instead of canvas().

&gt; Source/WebCore/html/canvas/CanvasRenderingContext.h:73
&gt; +    CanvasRenderingContext(CanvasBase&amp;);

Should be explicit too.

&gt; Source/WebCore/html/canvas/CanvasRenderingContext2D.h:79
&gt; +    HTMLCanvasElement&amp; canvas() const { return static_cast&lt;HTMLCanvasElement&amp;&gt;(canvasBase()); }

Should use downcast, not static_cast.

&gt; Source/WebCore/html/canvas/ImageBitmapRenderingContext.h:51
&gt; +    HTMLCanvasElement* canvas() const;

I think this should return a reference and code should be structured so this is called only when it’s know to be the correct type.

&gt; Source/WebCore/html/canvas/WebGLRenderingContextBase.h:120
&gt; +    HTMLCanvasElement* canvas();

Same comment as elsewhere. I don’t think all these conversions from reference to pointer are a good idea. If we need checks for the type then we might need multiple functions, but I don’t think we should use pointers and null for this.

&gt; Source/WebCore/html/canvas/WebGPURenderingContext.h:55
&gt; +    HTMLCanvasElement* canvas() const;

Ditto.

&gt; Source/WebCore/inspector/InspectorInstrumentation.h:1240
&gt; +    auto* canvasElement = canvasRenderingContext.canvasBase().asHTMLCanvasElement();
&gt; +    if (canvasElement) {

Better to write this with is/downcast.

&gt; Source/WebCore/inspector/InspectorInstrumentation.h:1258
&gt; +    if (auto* canvasElement = context.canvas()) {

Ditto, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374303</commentid>
    <comment_count>6</comment_count>
      <attachid>326938</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2017-11-22 15:50:02 -0800</bug_when>
    <thetext>Comment on attachment 326938
Patch

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

&gt;&gt; Source/WebCore/html/CanvasBase.h:45
&gt;&gt; +    HTMLCanvasElement* asHTMLCanvasElement();
&gt; 
&gt; I would suggest removing this function, and just having callers use is&lt;HTMLCanvasElement&gt; and downcast&lt;HTMLCanvasElement&gt; as needed. I don’t know many callers who want to get null when it’s the wrong type.
&gt; 
&gt; I just made this change to EventTarget, removing the toNode function and converting callers to use is&lt;Node&gt; and downcast&lt;Node&gt; instead.

Done. With Darin&apos;s help over email, I had to add custom type traits to HTMLCanvasElement, so that is&lt;&gt; and downcast&lt;&gt; could be used - they needed to accept a CanvasBase reference.

&gt;&gt; Source/WebCore/html/HTMLCanvasElement.h:86
&gt;&gt; +    unsigned height() const override { return size().height(); }
&gt; 
&gt; final

Done. As were all the other similar comments.

&gt;&gt; Source/WebCore/html/canvas/CanvasRenderingContext.cpp:72
&gt;&gt; +}
&gt; 
&gt; A better pattern is to have a virtual ref/deref function in CanvasBase. EventTarget has an example of this: see refEventTarget/derefEventTarget.
&gt; 
&gt; Then these functions would just be m_canvas.ref() and m_canvas.deref().

Done, although they had to be refCanvasBase() and derefCanvasBase(), since HTMLCanvasElement already has a ref/deref via Node.

&gt;&gt; Source/WebCore/html/canvas/CanvasRenderingContext.h:52
&gt;&gt; +    CanvasBase&amp; canvasBase() const { return m_canvas; }
&gt; 
&gt; I don’t understand why this function is named canvasBase() instead of canvas().

This is because the Web-exposed interfaces which derive from this each have canvas() accessors that don&apos;t all return the same type. e.g. a CanvasRenderingContext2D always returns an HTMLCanvasElement, but a OffscreenCanvasRenderingContext returns a Variant&lt;HTMLCanvasElement, OffscreenCanvas&gt;.

So I could change all the IDL implementedAs, or just this one function.

&gt;&gt; Source/WebCore/html/canvas/CanvasRenderingContext.h:73
&gt;&gt; +    CanvasRenderingContext(CanvasBase&amp;);
&gt; 
&gt; Should be explicit too.

Done.

&gt;&gt; Source/WebCore/html/canvas/CanvasRenderingContext2D.h:79
&gt;&gt; +    HTMLCanvasElement&amp; canvas() const { return static_cast&lt;HTMLCanvasElement&amp;&gt;(canvasBase()); }
&gt; 
&gt; Should use downcast, not static_cast.

Done.

&gt;&gt; Source/WebCore/html/canvas/ImageBitmapRenderingContext.h:51
&gt;&gt; +    HTMLCanvasElement* canvas() const;
&gt; 
&gt; I think this should return a reference and code should be structured so this is called only when it’s know to be the correct type.

I&apos;ve left this as is for the moment, but I&apos;ll fix it in a subsequent patch (when other context types can return different canvas instances from canvas()).

&gt;&gt; Source/WebCore/html/canvas/WebGLRenderingContextBase.h:120
&gt;&gt; +    HTMLCanvasElement* canvas();
&gt; 
&gt; Same comment as elsewhere. I don’t think all these conversions from reference to pointer are a good idea. If we need checks for the type then we might need multiple functions, but I don’t think we should use pointers and null for this.

OK.

&gt;&gt; Source/WebCore/inspector/InspectorInstrumentation.h:1240
&gt;&gt; +    if (canvasElement) {
&gt; 
&gt; Better to write this with is/downcast.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374435</commentid>
    <comment_count>7</comment_count>
      <attachid>326938</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-11-23 09:24:16 -0800</bug_when>
    <thetext>Comment on attachment 326938
Patch

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

&gt;&gt;&gt; Source/WebCore/html/canvas/CanvasRenderingContext.h:52
&gt;&gt;&gt; +    CanvasBase&amp; canvasBase() const { return m_canvas; }
&gt;&gt; 
&gt;&gt; I don’t understand why this function is named canvasBase() instead of canvas().
&gt; 
&gt; This is because the Web-exposed interfaces which derive from this each have canvas() accessors that don&apos;t all return the same type. e.g. a CanvasRenderingContext2D always returns an HTMLCanvasElement, but a OffscreenCanvasRenderingContext returns a Variant&lt;HTMLCanvasElement, OffscreenCanvas&gt;.
&gt; 
&gt; So I could change all the IDL implementedAs, or just this one function.

The one in CanvasRenderingContext2D is no problem, since we can override with a canvas function that returns a HTMLCanvasElement&amp; and everything would come out clean.

But I can see how overriding to return a Variant would be messy. One way to handle that is to use [ImplementedAs=canvasForBinding] for the thing that returns the Variant. Or maybe &quot;canvasForBindings&quot;, pretending that we care about more languages than just JavaScript.

It’s not critical, but I think it might be slightly nicer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374436</commentid>
    <comment_count>8</comment_count>
      <attachid>326938</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-11-23 09:25:45 -0800</bug_when>
    <thetext>Comment on attachment 326938
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/html/canvas/CanvasRenderingContext.h:52
&gt;&gt;&gt;&gt; +    CanvasBase&amp; canvasBase() const { return m_canvas; }
&gt;&gt;&gt; 
&gt;&gt;&gt; I don’t understand why this function is named canvasBase() instead of canvas().
&gt;&gt; 
&gt;&gt; This is because the Web-exposed interfaces which derive from this each have canvas() accessors that don&apos;t all return the same type. e.g. a CanvasRenderingContext2D always returns an HTMLCanvasElement, but a OffscreenCanvasRenderingContext returns a Variant&lt;HTMLCanvasElement, OffscreenCanvas&gt;.
&gt;&gt; 
&gt;&gt; So I could change all the IDL implementedAs, or just this one function.
&gt; 
&gt; The one in CanvasRenderingContext2D is no problem, since we can override with a canvas function that returns a HTMLCanvasElement&amp; and everything would come out clean.
&gt; 
&gt; But I can see how overriding to return a Variant would be messy. One way to handle that is to use [ImplementedAs=canvasForBinding] for the thing that returns the Variant. Or maybe &quot;canvasForBindings&quot;, pretending that we care about more languages than just JavaScript.
&gt; 
&gt; It’s not critical, but I think it might be slightly nicer.

Note that when I say &quot;override&quot; I am not suggesting making the function virtual or using the &quot;override&quot; keyword. Just overriding the inherited function with a different one with the same name, which is not that uncommon a C++ idiom, particularly overriding to make the class of a return value more specific.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374454</commentid>
    <comment_count>9</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2017-11-23 11:08:54 -0800</bug_when>
    <thetext>First post-review commit is https://trac.webkit.org/changeset/225119/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374455</commentid>
    <comment_count>10</comment_count>
      <attachid>326938</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2017-11-23 11:10:30 -0800</bug_when>
    <thetext>Comment on attachment 326938
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/WebCore/html/canvas/CanvasRenderingContext.h:52
&gt;&gt;&gt;&gt;&gt; +    CanvasBase&amp; canvasBase() const { return m_canvas; }
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; I don’t understand why this function is named canvasBase() instead of canvas().
&gt;&gt;&gt; 
&gt;&gt;&gt; This is because the Web-exposed interfaces which derive from this each have canvas() accessors that don&apos;t all return the same type. e.g. a CanvasRenderingContext2D always returns an HTMLCanvasElement, but a OffscreenCanvasRenderingContext returns a Variant&lt;HTMLCanvasElement, OffscreenCanvas&gt;.
&gt;&gt;&gt; 
&gt;&gt;&gt; So I could change all the IDL implementedAs, or just this one function.
&gt;&gt; 
&gt;&gt; The one in CanvasRenderingContext2D is no problem, since we can override with a canvas function that returns a HTMLCanvasElement&amp; and everything would come out clean.
&gt;&gt; 
&gt;&gt; But I can see how overriding to return a Variant would be messy. One way to handle that is to use [ImplementedAs=canvasForBinding] for the thing that returns the Variant. Or maybe &quot;canvasForBindings&quot;, pretending that we care about more languages than just JavaScript.
&gt;&gt; 
&gt;&gt; It’s not critical, but I think it might be slightly nicer.
&gt; 
&gt; Note that when I say &quot;override&quot; I am not suggesting making the function virtual or using the &quot;override&quot; keyword. Just overriding the inherited function with a different one with the same name, which is not that uncommon a C++ idiom, particularly overriding to make the class of a return value more specific.

Sure. I had started down that path but decided to hold off in the original patch. I&apos;ll do it now as a follow-up (or as I actually change the return type in WebGLRenderingContext, which is the first one to require a variant).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326938</attachid>
            <date>2017-11-14 16:23:26 -0800</date>
            <delta_ts>2017-11-14 16:45:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179701-20171115112322.patch</filename>
            <type>text/plain</type>
            <size>71879</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI0ODYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWZhNmJlNGRjOGZjZDI2
NjYzNWZjZTZiNWQ5YTAzM2JkYzExYjYxMS4uZmVjZjg0NzJiY2M0NGY2ZDc0N2NlNTVlZWJlZWUz
MWIxNjI4MTI5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzOCBAQAorMjAxNy0xMS0xNCAgRGVh
biBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGEgYmFzZSBjbGFzcyBm
b3IgSFRNTENhbnZhc0VsZW1lbnQgYW5kIE9mZnNjcmVlbkNhbnZhcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5NzAxCisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS8zNTU0NTE5NT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBJbiBvcmRlciBmb3IgT2Zmc2NyZWVuQ2FudmFzIHRvIGJlIGFibGUgdG8gY3Jl
YXRlIGEgV2ViR0xSZW5kZXJpbmdDb250ZXh0LAorICAgICAgICB0aGVyZSBuZWVkcyB0byBiZSBh
IHNoYXJlZCBiYXNlIGNsYXNzIHdpdGggSFRNTENhbnZhc0VsZW1lbnQuIEFkZCBzdWNoIGEKKyAg
ICAgICAgY2xhc3MgY2FsbGVkIENhbnZhc0Jhc2UuCisKKyAgICAgICAgVGhlcmUgaXMgYSBsb3Qg
b2YgcG90ZW50aWFsIGZvciBmdW5jdGlvbmFsaXR5IHRvIG1vdmUgaW50byB0aGUgYmFzZSBjbGFz
cywgYnV0CisgICAgICAgIHVuZm9ydHVuYXRlbHkgSFRNTENhbnZhc0VsZW1lbnQgaXMgYSBiaXQg
bWVzc3kuIEl0IGltcGxlbWVudHMgYSBsb3Qgb2YgdGhlIDJkCisgICAgICAgIHJlbmRlcmluZyBj
b250ZXh0IGZ1bmN0aW9uYWxpdHksIGFuZCBhbHNvIG1hbnkgY29uc3QgZnVuY3Rpb25zIHRoYXQg
YWN0dWFsbHkKKyAgICAgICAgY2F1c2UgY2hhbmdlcy4gVGh1cywgdGhpbmdzIGxpa2UgdGhlIGNh
bnZhcyBzaXplIGhhdmUgdG8gcmVtYWluIGluIHRoZSBzdWJjbGFzc2VzCisgICAgICAgIGZvciBu
b3cuCisKKyAgICAgICAgVGhlIGV4aXN0ZW5jZSBvZiB0aGUgbmV3IGJhc2UgY2xhc3MgbWVhbnQg
dGhlIGNhbnZhcygpIGFjY2Vzc29yIGluIENhbnZhc1JlbmRlcmluZ0NvbnRleHQKKyAgICAgICAg
aGFkIHRvIG1vdmUgb3V0IGludG8gdGhlIHN1YmNsYXNzZXMsIGFuZCBkbyB0aGUgY29ycmVjdCBj
YXN0aW5nLiBFdmVudHVhbGx5LCBhdCBsZWFzdAorICAgICAgICBmb3IgV2ViR0xSZW5kZXJpbmdD
b250ZXh0LCB0aGlzIHdpbGwgaGF2ZSBhIGNoYW5nZSBpbiBiZWhhdmlvdXIsIGJ1dCBmb3Igbm93
IHdlIG9ubHkKKyAgICAgICAgZXZlciB1c2UgSFRNTENhbnZhc0VsZW1lbnRzLCBzbyBtb3N0IG9m
IHRoZXNlIGNoYW5nZXMgYXJlIGp1c3QgZm9yIHRoZSBzYWtlIG9mCisgICAgICAgIGNvbXBpbGF0
aW9uLgorCisgICAgICAgIE5vIGJlaGF2aW91ciBjaGFuZ2UgLSBjb3ZlcmVkIGJ5IGV4aXN0aW5n
IHRlc3RzLgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvQ2FudmFzQmFzZS5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0dQVUJhc2VkQ2FudmFzUmVuZGVy
aW5nQ29udGV4dC5oLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6Q2FudmFzQmFzZSk6
IE5ldyBiYXNlIGNsYXNzLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6YXNIVE1MQ2Fu
dmFzRWxlbWVudCk6IENhc3RzIHRvIGFuIEhUTUxDYW52YXNFbGVtZW50Kiwgd2hpY2ggbWFueSBv
ZiB0aGUKKyAgICAgICAgcmVuZGVyaW5nIGNvbnRleHQgY29kZSB1c2VzLgorICAgICAgICAqIGh0
bWwvQ2FudmFzQmFzZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9H
UFVCYXNlZENhbnZhc1JlbmRlcmluZ0NvbnRleHQuaC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c0Jhc2U6OmlzSFRNTENhbnZhc0VsZW1lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzQmFzZTo6aXNPZmZzY3JlZW5DYW52YXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzQmFzZTo6c2V0T3JpZ2luQ2xlYW4pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6
c2V0T3JpZ2luVGFpbnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjpvcmlnaW5D
bGVhbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjpzZWN1cml0eU9yaWdp
biBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjpzY3JpcHRFeGVjdXRpb25D
b250ZXh0IGNvbnN0KToKKworICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwOiBV
c2UgdGhlIGJhc2UgY2xhc3MgbWV0aG9kcyB3aGVyZSBwb3NzaWJsZS4KKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxDYW52YXNFbGVtZW50OjpIVE1MQ2FudmFzRWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6dG9EYXRhVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDYW52YXNFbGVtZW50Ojp0b0Jsb2IpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0Vs
ZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KTogQmUgZXhwbGljdCBhcyB0bworICAgICAg
ICB3aGljaCBvZiB0aGUgZGVyaXZlZCBjbGFzc2VzIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBt
ZXRob2Qgd2UgYXJlIGNhbGxpbmcuCisKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50
Lmg6IFVzZSB0aGUgYmFzZSBjbGFzcywgbWFyayBhIGZldyB0aGluZ3MgYXMgdmlydHVhbCwKKyAg
ICAgICAgYW5kIHJlbW92ZSB0aGUgcGFydHMgdGhhdCBhcmUgbm93IGluIENhbnZhc0Jhc2UuCisK
KyAgICAgICAgKiBodG1sL09mZnNjcmVlbkNhbnZhcy5jcHA6IFVzZSB0aGUgYmFzZSBjbGFzcy4K
KyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6T2Zmc2NyZWVuQ2FudmFzKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6c2l6ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnNldFNpemUpOgorICAgICAgICAqIGh0bWwvT2Zmc2Ny
ZWVuQ2FudmFzLmg6CisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQ6OkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDo6cmVmKTogQ2FsbCB0aGUgY29ycmVjdCByZWYvZGVyZWYgZnVuY3Rpb25zLCBkZXBlbmRp
bmcKKyAgICAgICAgb24gdGhlIGJhc2UgY2xhc3MgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQ6OmRlcmVmKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQ6OndvdWxkVGFpbnRPcmlnaW4pOiBXZSBubyBsb25nZXIgaGF2ZSBhIGNh
bnZhcygpIG1ldGhvZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQ6
OmNoZWNrT3JpZ2luKToKKworICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQ6OmNhbnZh
c0Jhc2UgY29uc3QpOiBBZGQgdGhpcyBhY2Nlc3NvciB0byB0aGUgYmFzZSBjYW52YXMgb2JqZWN0
CisgICAgICAgIHRvIHJlcGxhY2UgdGhlIGNhbnZhcygpIGNhbGwuCisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0OjpjaGVja09yaWdpbik6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0OjpyZWYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDo6ZGVyZWYpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDo6Y2FudmFzIGNvbnN0KTogRGVsZXRlZC4KKwor
ICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6IFVzZSB0
aGUgYmFzZSBjbGFzcy4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9HUFVCYXNlZENh
bnZhc1JlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdQVUJhc2VkQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDo6R1BVQmFzZWRDYW52YXNSZW5kZXJpbmdDb250ZXh0KToKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpJbWFnZUJpdG1hcFJlbmRl
cmluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250
ZXh0OjpjYW52YXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXBSZW5kZXJp
bmdDb250ZXh0OjpzZXRPdXRwdXRCaXRtYXApOgorICAgICAgICAqIGh0bWwvY2FudmFzL0ltYWdl
Qml0bWFwUmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1BsYWNlaG9s
ZGVyUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGFjZWhvbGRlclJl
bmRlcmluZ0NvbnRleHQ6OlBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dCk6CisgICAgICAgICog
aHRtbC9jYW52YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpXZWJHTDJSZW5kZXJpbmdDb250ZXh0KToKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb250ZXh0KToKKworICAgICAgICAqIGh0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAqIGh0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6Y3JlYXRlKTogQXNzdW1lIHRoYXQgd2UncmUgc3RpbGwgZ2V0
dGluZyBhbiBIVE1MQ2FudmFzRWxlbWVudCwKKyAgICAgICAgYnV0IHByb3RlY3Qgc29tZSBvZiB0
aGUgbG9naWMganVzdCBpbiBjYXNlIHdlIGRvbid0LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjYW52YXMpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y2hlY2tGb3JDb250ZXh0TG9zc0hh
bmRsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnJl
Z2lzdGVyV2l0aFdlYkdMU3RhdGVUcmFja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnNldHVwRmxhZ3MpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6YWRkQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVySWZOZWNl
c3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVt
b3ZlQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6Om1hcmtDb250ZXh0Q2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjptYXJrQ29udGV4dENoYW5nZWRBbmROb3Rp
ZnlDYW52YXNPYnNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZXNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNvbXBpbGVTaGFkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aXNDb250ZXh0TG9zdE9yUGVuZGluZyk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZWFkUGl4ZWxz
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Omxvc2VDb250
ZXh0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpw
cmludFRvQ29uc29sZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpkaXNwYXRjaENvbnRleHRMb3N0RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6bWF5YmVSZXN0b3JlQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkaXNwYXRjaENvbnRleHRDaGFuZ2VkRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y2xhbXBl
ZENhbnZhc1NpemUpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmlkbDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHUFVSZW5kZXJpbmdDb250ZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdQVVJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHUFVSZW5kZXJpbmdDb250ZXh0OjpXZWJHUFVSZW5kZXJpbmdDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdQVVJlbmRlcmluZ0NvbnRleHQ6OmNhbnZhcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHUFVSZW5kZXJpbmdDb250ZXh0OjpjbGFtcGVk
Q2FudmFzU2l6ZSBjb25zdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR1BVUmVuZGVyaW5n
Q29udGV4dC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24u
aDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cmVjb3JkQ2Fu
dmFzQWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkRW5hYmxlRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkQ3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OndpbGxEZWxldGVQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aXNTaGFkZXJQcm9ncmFtRGlzYWJsZWQpOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlY29yZENhbnZhc0FjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlkRW5hYmxlRXh0ZW5zaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRDcmVhdGVQcm9ncmFt
KToKKwogMjAxNy0xMS0xNCAgTWljaGFlbCBDYXRhbnphcm8gIDxtY2F0YW56YXJvQGlnYWxpYS5j
b20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgZml4IENNYWtlIGRlYnVnIGJ1aWxkcyBhZnRlciBy
MjI0NzA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDYzMjlhMDhlMjAzMDliNGM3ODNiOGI0ZjhmZDAwMDZm
ZGQ2NjExZGEuLjlmNzAyNzBmMWFiMDMyMjNmZmIyMTdlOGE4OTQ4MjQ0ZjQ0Njg5ZTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CkBAIC04ODksNiArODg5LDcgQEAgaHRtbC9CYXNlQ2xpY2thYmxlV2l0aEtleUlu
cHV0VHlwZS5jcHAKIGh0bWwvQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlLmNwcAogaHRtbC9CYXNl
VGV4dElucHV0VHlwZS5jcHAKIGh0bWwvQnV0dG9uSW5wdXRUeXBlLmNwcAoraHRtbC9DYW52YXNC
YXNlLmNwcAogaHRtbC9DaGVja2JveElucHV0VHlwZS5jcHAKIGh0bWwvQ29sb3JJbnB1dFR5cGUu
Y3BwCiBodG1sL0RPTUZvcm1EYXRhLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDJlMzQyODM5ZDRlNzBlMDg0ZTE1Mjc4ZjE2
Y2M4NTIyNWQ4YjU5YTAuLmZhMWRkYTJjODRmNDZiYzY0Y2ZlN2MyMzRiZDRjMTVmMTE1ZWE3YWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTgxNSw2ICs4MTUsNyBAQAogCQkzMTI4Q0E2QjE0NzMzMTYzMDA3NEM3MkEgLyogTm90
aWZpY2F0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzEyOENBNkExNDczMzE2MzAwNzRDNzJBIC8qIE5vdGlmaWNhdGlvbkNvbnRy
b2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkzMTJDMEM0MTE0NkRDNkNDMDAxNkM5MTEgLyogTm90aWZpY2F0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMzNGNzA0RjBGQjQ5Q0EyMDA4RTEy
QTYgLyogTm90aWZpY2F0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMzEzMTNGNjYxNDQzQjM1RjAwNkUyQTkwIC8qIEZpbHRlckVmZmVjdFJl
bmRlcmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
MTMxM0Y2NDE0NDNCMzVFMDA2RTJBOTAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCAqLzsgfTsK
KwkJMzEzMTcxNTYxRkIwNzlFNTAwOEQ5MUZDIC8qIENhbnZhc0Jhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMzE3MTU0MUZCMDc5RDEwMDhEOTFG
QyAvKiBDYW52YXNCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMzEzNTkxMDYxRTdEREM3MzAwRjMwNjMwIC8qIFJUQ0ljZUNvbm5lY3Rpb25T
dGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEz
NTkxMDAxRTdEREM2MDAwRjMwNjMwIC8qIFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZS5oICovOyB9Owog
CQkzMTM1OTEwNzFFN0REQzczMDBGMzA2MzAgLyogUlRDSWNlR2F0aGVyaW5nU3RhdGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMzU5MTAxMUU3RERD
NjAwMEYzMDYzMCAvKiBSVENJY2VHYXRoZXJpbmdTdGF0ZS5oICovOyB9OwogCQkzMTM1OTEwODFF
N0REQzczMDBGMzA2MzAgLyogUlRDSWNlVHJhbnNwb3J0UG9saWN5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTM1OTEwMjFFN0REQzYwMDBGMzA2MzAg
LyogUlRDSWNlVHJhbnNwb3J0UG9saWN5LmggKi87IH07CkBAIC02NDc0LDYgKzY0NzUsOCBAQAog
CQkzMTI4Q0E2QTE0NzMzMTYzMDA3NEM3MkEgLyogTm90aWZpY2F0aW9uQ29udHJvbGxlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb3RpZmljYXRpb25Db250cm9sbGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMzEzRjYzMTQ0M0IzNUUwMDZFMkE5MCAv
KiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTMxMzEzRjY0MTQ0M0IzNUUwMDZFMkE5MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJFZmZlY3RSZW5kZXJlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTMxNzE1NDFGQjA3OUQxMDA4RDkxRkMg
LyogQ2FudmFzQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYW52YXNC
YXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMzE3MTU3MUZCMDk2OUUwMDhE
OTFGQyAvKiBDYW52YXNCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENhbnZhc0Jhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTM1OTEw
MDFFN0REQzYwMDBGMzA2MzAgLyogUlRDSWNlQ29ubmVjdGlvblN0YXRlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzMTM1OTEwMTFFN0REQzYwMDBGMzA2MzAgLyogUlRDSWNlR2F0
aGVyaW5nU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUlRDSWNlR2F0
aGVyaW5nU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEzNTkxMDIxRTdE
REM2MDAwRjMwNjMwIC8qIFJUQ0ljZVRyYW5zcG9ydFBvbGljeS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSVENJY2VUcmFuc3BvcnRQb2xpY3kuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE5NDQ2LDYgKzE5NDQ5LDggQEAKIAkJCQlGNTVCM0Q3QjEyNTFGMTJE
MDAzRUYyNjkgLyogQnV0dG9uSW5wdXRUeXBlLmNwcCAqLywKIAkJCQlGNTVCM0Q3QzEyNTFGMTJE
MDAzRUYyNjkgLyogQnV0dG9uSW5wdXRUeXBlLmggKi8sCiAJCQkJODMwMDMwRjcxQjdEMzk4ODAw
RUQzQUFDIC8qIENhY2hlZEhUTUxDb2xsZWN0aW9uLmggKi8sCisJCQkJMzEzMTcxNTcxRkIwOTY5
RTAwOEQ5MUZDIC8qIENhbnZhc0Jhc2UuY3BwICovLAorCQkJCTMxMzE3MTU0MUZCMDc5RDEwMDhE
OTFGQyAvKiBDYW52YXNCYXNlLmggKi8sCiAJCQkJRjU1QjNEN0QxMjUxRjEyRDAwM0VGMjY5IC8q
IENoZWNrYm94SW5wdXRUeXBlLmNwcCAqLywKIAkJCQlGNTVCM0Q3RTEyNTFGMTJEMDAzRUYyNjkg
LyogQ2hlY2tib3hJbnB1dFR5cGUuaCAqLywKIAkJCQk0NkVCRUEwMTFCN0Q0RDVEMDBCRTQ5NDEg
LyogQ29sbGVjdGlvblRyYXZlcnNhbC5oICovLApAQCAtMjYxODcsNiArMjYxOTIsNyBAQAogCQkJ
CTdDMUU4RDAxMUVEMEMyREEwMEIxRDk4MyAvKiBDYWxsYmFja1Jlc3VsdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTUyMDc2MDUxRjI2NzVGRTAwN0QyQUFCIC8qIENhbGxUcmFjZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTk1MjA3NjA2MUYyNjc1RkUwMDdEMkFBQiAvKiBDYWxsVHJhY2VyVHlwZXMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTMxMzE3MTU2MUZCMDc5RTUwMDhEOTFGQyAvKiBDYW52YXNC
YXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTVDREFGNTFFNkI4RjhCMDA0RjExRUUgLyogQ2Fu
dmFzQ2FwdHVyZU1lZGlhU3RyZWFtVHJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTdDMTkzQkJC
MUY1RTBFRUQwMDg4RjNFNiAvKiBDYW52YXNEaXJlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTdDMTkzQkJDMUY1RTBFRUQwMDg4RjNFNiAvKiBDYW52YXNGaWxsUnVsZS5oIGluIEhlYWRlcnMg
Ki8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0NhbnZhc0Jhc2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNWFlNzZhZmI1YzE1
NzEzNDZjNjRhOTgyODg3Yjg5ZjA0OTU3MjExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9DYW52YXNCYXNlLmNwcApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJDYW52YXNCYXNlLmgiCisKKyNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NhbnZhc0Jhc2U6OkNhbnZhc0Jhc2UoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKKyAgICA6IG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dChzY3JpcHRFeGVjdXRpb25Db250ZXh0KQoreworfQorCitIVE1MQ2FudmFz
RWxlbWVudCogQ2FudmFzQmFzZTo6YXNIVE1MQ2FudmFzRWxlbWVudCgpCit7CisgICAgaWYgKCFp
c0hUTUxDYW52YXNFbGVtZW50KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KHRoaXMpOworfQorCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0NhbnZhc0Jhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvQ2FudmFzQmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI5ZTI5NmZkOWU2ZTQ5MTM2YmNlZjkwOTA2OTdh
MDI3YzQ2MzY1NWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0NhbnZh
c0Jhc2UuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2lu
Y2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlIDx3dGYvVHlwZUNhc3Rz
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSFRNTENhbnZhc0VsZW1lbnQ7Citj
bGFzcyBTZWN1cml0eU9yaWdpbjsKKworY2xhc3MgQ2FudmFzQmFzZSB7CitwdWJsaWM6CisKKyAg
ICB2aXJ0dWFsIH5DYW52YXNCYXNlKCkgPSBkZWZhdWx0OworCisgICAgdmlydHVhbCBib29sIGlz
SFRNTENhbnZhc0VsZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBpc09mZnNjcmVlbkNhbnZhcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBI
VE1MQ2FudmFzRWxlbWVudCogYXNIVE1MQ2FudmFzRWxlbWVudCgpOworCisgICAgdmlydHVhbCB1
bnNpZ25lZCB3aWR0aCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGhlaWdodCgp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0IEludFNpemUmIHNpemUoKSBjb25zdCAgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUmKSA9IDA7CisKKyAgICB2
b2lkIHNldE9yaWdpbkNsZWFuKCkgeyBtX29yaWdpbkNsZWFuID0gdHJ1ZTsgfQorICAgIHZvaWQg
c2V0T3JpZ2luVGFpbnRlZCgpIHsgbV9vcmlnaW5DbGVhbiA9IGZhbHNlOyB9CisgICAgYm9vbCBv
cmlnaW5DbGVhbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luQ2xlYW47IH0KKworICAgIHZpcnR1
YWwgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0
cjsgfQorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSBjb25zdCB7IHJldHVybiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7IH0KKworcHJvdGVjdGVk
OgorICAgIENhbnZhc0Jhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworCitwcml2YXRlOgor
ICAgIGJvb2wgbV9vcmlnaW5DbGVhbiB7IHRydWUgfTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DQU5WQVMoVG9WYWx1ZVR5cGVO
YW1lLCBwcmVkaWNhdGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oVG9WYWx1ZVR5
cGVOYW1lKSBcCitzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6Q2FudmFzQmFzZSYg
Y2FudmFzKSB7IHJldHVybiBjYW52YXMucHJlZGljYXRlOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKaW5k
ZXggY2VlYTU2ZjIxMTg1YWNlMWE5YzA3M2Y5MWQ4YjkzYTFjYjg2OGZjOS4uODhkYjliYTEyNGNm
MGRlOTlmZTUxYjQwOWIyYjhhOGVmZTY0YzhjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5jcHAKQEAgLTExMSw2ICsxMTEsNyBAQCBzdGF0aWMgc2l6ZV90IGFjdGl2
ZVBpeGVsTWVtb3J5ID0gMDsKIAogSFRNTENhbnZhc0VsZW1lbnQ6OkhUTUxDYW52YXNFbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50JiBkb2N1bWVudCkKICAgICA6
IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQorICAgICwgQ2FudmFzQmFzZSgmZG9jdW1l
bnQpCiAgICAgLCBtX3NpemUoZGVmYXVsdFdpZHRoLCBkZWZhdWx0SGVpZ2h0KQogewogICAgIEFT
U0VSVChoYXNUYWdOYW1lKGNhbnZhc1RhZykpOwpAQCAtNzIwLDcgKzcyMSw3IEBAIHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eUZyb21KU1ZhbHVlKEpTQzo6SlNWYWx1ZSBxdWFs
aXR5VmFsdWUpCiAKIEV4Y2VwdGlvbk9yPFVuY2FjaGVkU3RyaW5nPiBIVE1MQ2FudmFzRWxlbWVu
dDo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIEpTQzo6SlNWYWx1ZSBxdWFsaXR5
VmFsdWUpCiB7Ci0gICAgaWYgKCFtX29yaWdpbkNsZWFuKQorICAgIGlmICghb3JpZ2luQ2xlYW4o
KSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNlY3VyaXR5RXJyb3IgfTsKIAogICAgIGlm
IChtX3NpemUuaXNFbXB0eSgpIHx8ICFidWZmZXIoKSkKQEAgLTc0Nyw3ICs3NDgsNyBAQCBFeGNl
cHRpb25PcjxVbmNhY2hlZFN0cmluZz4gSFRNTENhbnZhc0VsZW1lbnQ6OnRvRGF0YVVSTChjb25z
dCBTdHJpbmcmIG1pbWVUeXBlKQogCiBFeGNlcHRpb25Pcjx2b2lkPiBIVE1MQ2FudmFzRWxlbWVu
dDo6dG9CbG9iKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFJlZjxCbG9iQ2FsbGJh
Y2s+JiYgY2FsbGJhY2ssIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIEpTQzo6SlNWYWx1ZSBxdWFs
aXR5VmFsdWUpCiB7Ci0gICAgaWYgKCFtX29yaWdpbkNsZWFuKQorICAgIGlmICghb3JpZ2luQ2xl
YW4oKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNlY3VyaXR5RXJyb3IgfTsKIAogICAg
IGlmIChtX3NpemUuaXNFbXB0eSgpIHx8ICFidWZmZXIoKSkgewpAQCAtOTU1LDggKzk1Niw4IEBA
IHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVyKCkgY29uc3QKICAgICBt
X2ltYWdlQnVmZmVyLT5jb250ZXh0KCkuc2V0U3Ryb2tlVGhpY2tuZXNzKDEpOwogICAgIG1fY29u
dGV4dFN0YXRlU2F2ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXI+KG1faW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7CiAKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBs
b2NrKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+dm0oKSk7Ci0gICAgc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLT52bSgpLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQobWVtb3J5Q29z
dCgpKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKEhUTUxFbGVtZW50OjpzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPnZtKCkpOworICAgIEhUTUxFbGVtZW50OjpzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPnZtKCkuaGVhcC5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChtZW1vcnlDb3N0
KCkpOwogCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxF
KEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBpZiAobV9jb250ZXh0ICYmIG1fY29udGV4dC0+
aXMyZCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVt
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKaW5kZXggYjRl
MmUyY2YxNmNiZTI0MTUxOTEyYmRjNjQxZjhiZmNkYTE5MDgxMy4uNTk5NzZkZjkzNjlkNGYwYTJi
M2YwMTJkYTA0MjU2MDliNGQzNzAzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQ2FudmFzRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuaApAQCAtMjcsNiArMjcsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNh
bnZhc0Jhc2UuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dFNldHRpbmdzLmgiCkBA
IC03MSw3ICs3Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2FudmFzRGVzdHJveWVk
KEhUTUxDYW52YXNFbGVtZW50JikgPSAwOwogfTsKIAotY2xhc3MgSFRNTENhbnZhc0VsZW1lbnQg
ZmluYWwgOiBwdWJsaWMgSFRNTEVsZW1lbnQgeworY2xhc3MgSFRNTENhbnZhc0VsZW1lbnQgZmlu
YWwgOiBwdWJsaWMgSFRNTEVsZW1lbnQsIHB1YmxpYyBDYW52YXNCYXNlIHsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgUmVmPEhUTUxDYW52YXNFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsKICAgICBz
dGF0aWMgUmVmPEhUTUxDYW52YXNFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50Jik7CkBAIC04MSwxNSArODIsMTUgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3Zl
T2JzZXJ2ZXIoQ2FudmFzT2JzZXJ2ZXImKTsKICAgICBIYXNoU2V0PEVsZW1lbnQqPiBjc3NDYW52
YXNDbGllbnRzKCkgY29uc3Q7CiAKLSAgICB1bnNpZ25lZCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJu
IHNpemUoKS53aWR0aCgpOyB9Ci0gICAgdW5zaWduZWQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4g
c2l6ZSgpLmhlaWdodCgpOyB9CisgICAgdW5zaWduZWQgd2lkdGgoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBzaXplKCkud2lkdGgoKTsgfQorICAgIHVuc2lnbmVkIGhlaWdodCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHNpemUoKS5oZWlnaHQoKTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQg
RXhjZXB0aW9uT3I8dm9pZD4gc2V0V2lkdGgodW5zaWduZWQpOwogICAgIFdFQkNPUkVfRVhQT1JU
IEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEhlaWdodCh1bnNpZ25lZCk7CiAKLSAgICBjb25zdCBJbnRT
aXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgY29uc3QgSW50U2l6ZSYg
c2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc2l6ZTsgfQogCi0gICAgdm9pZCBzZXRT
aXplKGNvbnN0IEludFNpemUmIG5ld1NpemUpCisgICAgdm9pZCBzZXRTaXplKGNvbnN0IEludFNp
emUmIG5ld1NpemUpIG92ZXJyaWRlCiAgICAgeyAKICAgICAgICAgaWYgKG5ld1NpemUgPT0gc2l6
ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTAwLDYgKzEwMSw4IEBAIHB1YmxpYzoKICAg
ICAgICAgcmVzZXQoKTsKICAgICB9CiAKKyAgICBib29sIGlzSFRNTENhbnZhc0VsZW1lbnQoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKICAgICBFeGNlcHRpb25PcjxzdGQ6Om9w
dGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+PiBnZXRDb250ZXh0KEpTQzo6RXhlY1N0YXRlJiwgY29u
c3QgU3RyaW5nJiBjb250ZXh0SWQsIFZlY3RvcjxKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+PiYm
IGFyZ3VtZW50cyk7CiAKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBnZXRDb250ZXh0KGNv
bnN0IFN0cmluZyYpOwpAQCAtMTUwLDEwICsxNTMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYWtl
UHJlc2VudGF0aW9uQ29weSgpOwogICAgIHZvaWQgY2xlYXJQcmVzZW50YXRpb25Db3B5KCk7CiAK
LSAgICBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSBjb25zdDsKLSAgICB2b2lkIHNl
dE9yaWdpbkNsZWFuKCkgeyBtX29yaWdpbkNsZWFuID0gdHJ1ZTsgfQotICAgIHZvaWQgc2V0T3Jp
Z2luVGFpbnRlZCgpIHsgbV9vcmlnaW5DbGVhbiA9IGZhbHNlOyB9Ci0gICAgYm9vbCBvcmlnaW5D
bGVhbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luQ2xlYW47IH0KKyAgICBTZWN1cml0eU9yaWdp
biogc2VjdXJpdHlPcmlnaW4oKSBjb25zdCBvdmVycmlkZTsKIAogICAgIEFmZmluZVRyYW5zZm9y
bSBiYXNlVHJhbnNmb3JtKCkgY29uc3Q7CiAKQEAgLTIwMiw3ICsyMDIsNiBAQCBwcml2YXRlOgog
ICAgIEZsb2F0UmVjdCBtX2RpcnR5UmVjdDsKICAgICBtdXRhYmxlIEludFNpemUgbV9zaXplOwog
Ci0gICAgYm9vbCBtX29yaWdpbkNsZWFuIHsgdHJ1ZSB9OwogICAgIGJvb2wgbV9pZ25vcmVSZXNl
dCB7IGZhbHNlIH07CiAKICAgICBib29sIG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyB7IGZhbHNl
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAKaW5kZXggYWM3Yzk3MGJl
NmNlNWFlOTAzN2RmYzk1ZWZlNWM4ZDEyMDU3MDkzMy4uOGRkNWQ3ZmY0OTFmMWE4ODA4Yzk0NmNj
NTcwYTZmMzJmZmY3MGVmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3Jl
ZW5DYW52YXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNw
cApAQCAtMzcsOCArMzcsOCBAQCBSZWY8T2Zmc2NyZWVuQ2FudmFzPiBPZmZzY3JlZW5DYW52YXM6
OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCB1bgogfQogCiBPZmZzY3Jl
ZW5DYW52YXM6Ok9mZnNjcmVlbkNhbnZhcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0
LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQotICAgIDogbV9zaXplKHdpZHRoLCBo
ZWlnaHQpCi0gICAgLCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoY29udGV4dCkKKyAgICA6IENh
bnZhc0Jhc2UoJmNvbnRleHQpCisgICAgLCBtX3NpemUod2lkdGgsIGhlaWdodCkKIHsKIH0KIApA
QCAtNjQsNiArNjQsMTYgQEAgdm9pZCBPZmZzY3JlZW5DYW52YXM6OnNldEhlaWdodCh1bnNpZ25l
ZCBuZXdIZWlnaHQpCiAgICAgcmV0dXJuIG1fc2l6ZS5zZXRIZWlnaHQobmV3SGVpZ2h0KTsKIH0K
IAorY29uc3QgSW50U2l6ZSYgT2Zmc2NyZWVuQ2FudmFzOjpzaXplKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9zaXplOworfQorCit2b2lkIE9mZnNjcmVlbkNhbnZhczo6c2V0U2l6ZShjb25zdCBJ
bnRTaXplJiBuZXdTaXplKQoreworICAgIG1fc2l6ZSA9IG5ld1NpemU7Cit9CisKICNpZiBFTkFC
TEUoV0VCR0wpCiBFeGNlcHRpb25PcjxSZWZQdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0Pj4gT2Zm
c2NyZWVuQ2FudmFzOjpnZXRDb250ZXh0KEpTQzo6RXhlY1N0YXRlJiwgUmVuZGVyaW5nQ29udGV4
dFR5cGUgY29udGV4dFR5cGUsIFZlY3RvcjxKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+PiYmIGFy
Z3VtZW50cykKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2Fu
dmFzLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5oCmluZGV4IDA1M2Zj
ZDM1NmMxOWVmZjVkZGY0MTVjOGUzMmM2YmRmZWZkYjYwYjQuLmJlOTI4MmU5ZTY2M2RjMmMyYzkw
NDdjZmRlMTY3MDE4ODc5NTI2MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zm
c2NyZWVuQ2FudmFzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMu
aApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNhbnZhc0Jh
c2UuaCIKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgi
CiAjaW5jbHVkZSAiSW50U2l6ZS5oIgpAQCAtNDYsNyArNDcsNyBAQCBjbGFzcyBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ7CiAvLyBSZWZQdHI8T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
PgogLy8gPjsKIAotY2xhc3MgT2Zmc2NyZWVuQ2FudmFzIDogcHVibGljIFJlZkNvdW50ZWQ8T2Zm
c2NyZWVuQ2FudmFzPiwgcHVibGljIEV2ZW50VGFyZ2V0V2l0aElubGluZURhdGEgeworY2xhc3Mg
T2Zmc2NyZWVuQ2FudmFzIDogcHVibGljIFJlZkNvdW50ZWQ8T2Zmc2NyZWVuQ2FudmFzPiwgcHVi
bGljIENhbnZhc0Jhc2UsIHB1YmxpYyBFdmVudFRhcmdldFdpdGhJbmxpbmVEYXRhIHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKIApAQCAtNjMsMTEgKzY0LDE2IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgUmVmPE9mZnNjcmVlbkNhbnZhcz4gY3JlYXRlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmLCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsKICAgICB+T2Zm
c2NyZWVuQ2FudmFzKCk7CiAKLSAgICB1bnNpZ25lZCB3aWR0aCgpIGNvbnN0OworICAgIHVuc2ln
bmVkIHdpZHRoKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRXaWR0aCh1bnNpZ25lZCk7
Ci0gICAgdW5zaWduZWQgaGVpZ2h0KCkgY29uc3Q7CisgICAgdW5zaWduZWQgaGVpZ2h0KCkgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRIZWlnaHQodW5zaWduZWQpOwogCisgICAgY29uc3Qg
SW50U2l6ZSYgc2l6ZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgc2V0U2l6ZShjb25zdCBJ
bnRTaXplJikgb3ZlcnJpZGU7CisKKyAgICBib29sIGlzT2Zmc2NyZWVuQ2FudmFzKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCiAjaWYgRU5BQkxFKFdFQkdMKQogICAgIC8vIEZJ
WE1FOiBTaG91bGQgYmUgb3B0aW9uYWw8T2Zmc2NyZWVuUmVuZGVyaW5nQ29udGV4dD4gZnJvbSBh
Ym92ZS4KICAgICBFeGNlcHRpb25PcjxSZWZQdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0Pj4gZ2V0
Q29udGV4dChKU0M6OkV4ZWNTdGF0ZSYsIFJlbmRlcmluZ0NvbnRleHRUeXBlLCBWZWN0b3I8SlND
OjpTdHJvbmc8SlNDOjpVbmtub3duPj4mJiBhcmd1bWVudHMpOwpAQCAtODIsMTQgKzg4LDE1IEBA
IHByaXZhdGU6CiAKICAgICBPZmZzY3JlZW5DYW52YXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpOwogCi0gICAgLy8gRXZlbnRUYXJnZXRX
aXRoSW5saW5lRGF0YS4KLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gJm1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dDsgfQorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBDYW52YXNCYXNlOjpzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7IH0KKwogICAgIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNl
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gT2Zmc2NyZWVuQ2FudmFzRXZlbnRUYXJnZXRJbnRlcmZh
Y2VUeXBlOyB9CiAgICAgdm9pZCByZWZFdmVudFRhcmdldCgpIGZpbmFsIHsgcmVmKCk7IH0KICAg
ICB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSBmaW5hbCB7IGRlcmVmKCk7IH0KIAogICAgIEludFNp
emUgbV9zaXplOwotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dDsKIH07CiAKIH0KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DQU5WQVMoV2ViQ29y
ZTo6T2Zmc2NyZWVuQ2FudmFzLCBpc09mZnNjcmVlbkNhbnZhcygpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCAw
M2ExYTY1Mjc3ODk2MDRkNTQ2ZDYxMDJkNzljOTI5Nzk1MDUxMDAyLi5lYWQwMjcwNmZhZjlmZTIx
ZDYyOTg1NmE3YTQ5MjZjYzFlMjU2MjNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtMzIsMzMgKzMyLDYyIEBA
CiAjaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5j
bHVkZSAiSW1hZ2VCaXRtYXAuaCIKKyNpbmNsdWRlICJPZmZzY3JlZW5DYW52YXMuaCIKICNpbmNs
dWRlICJVUkwuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUNhbnZhc1JlbmRlcmluZ0NvbnRleHQ6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQo
SFRNTENhbnZhc0VsZW1lbnQmIGNhbnZhcykKK0NhbnZhc1JlbmRlcmluZ0NvbnRleHQ6OkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYgY2FudmFzKQogICAgIDogbV9jYW52YXMoY2Fu
dmFzKQogewogfQogCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQ6OnJlZigpCit7CisgICAg
aWYgKG1fY2FudmFzLmlzSFRNTENhbnZhc0VsZW1lbnQoKSkgeworICAgICAgICBhdXRvKiBodG1s
Q2FudmFzID0gc3RhdGljX2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPigmbV9jYW52YXMpOworICAg
ICAgICBodG1sQ2FudmFzLT5yZWYoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAo
aXM8T2Zmc2NyZWVuQ2FudmFzPihtX2NhbnZhcykpIHsKKyAgICAgICAgYXV0byogb2Zmc2NyZWVu
Q2FudmFzID0gc3RhdGljX2Nhc3Q8T2Zmc2NyZWVuQ2FudmFzKj4oJm1fY2FudmFzKTsKKyAgICAg
ICAgb2Zmc2NyZWVuQ2FudmFzLT5yZWYoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwor
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0OjpkZXJlZigpCit7CisgICAgaWYgKG1fY2FudmFz
LmlzSFRNTENhbnZhc0VsZW1lbnQoKSkgeworICAgICAgICBhdXRvKiBodG1sQ2FudmFzID0gc3Rh
dGljX2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPigmbV9jYW52YXMpOworICAgICAgICBodG1sQ2Fu
dmFzLT5kZXJlZigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChpczxPZmZzY3Jl
ZW5DYW52YXM+KG1fY2FudmFzKSkgeworICAgICAgICBhdXRvKiBvZmZzY3JlZW5DYW52YXMgPSBz
dGF0aWNfY2FzdDxPZmZzY3JlZW5DYW52YXMqPigmbV9jYW52YXMpOworICAgICAgICBvZmZzY3Jl
ZW5DYW52YXMtPmRlcmVmKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKIGJvb2wgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDo6d291bGRUYWludE9yaWdpbihjb25zdCBDYW52YXNQYXR0ZXJu
KiBwYXR0ZXJuKQogewotICAgIGlmIChjYW52YXMoKS5vcmlnaW5DbGVhbigpICYmIHBhdHRlcm4g
JiYgIXBhdHRlcm4tPm9yaWdpbkNsZWFuKCkpCisgICAgaWYgKG1fY2FudmFzLm9yaWdpbkNsZWFu
KCkgJiYgcGF0dGVybiAmJiAhcGF0dGVybi0+b3JpZ2luQ2xlYW4oKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQ6OndvdWxkVGFpbnRPcmlnaW4oY29uc3QgSFRNTENhbnZhc0VsZW1lbnQqIHNvdXJjZUNhbnZh
cykKIHsKLSAgICBpZiAoY2FudmFzKCkub3JpZ2luQ2xlYW4oKSAmJiBzb3VyY2VDYW52YXMgJiYg
IXNvdXJjZUNhbnZhcy0+b3JpZ2luQ2xlYW4oKSkKKyAgICBpZiAobV9jYW52YXMub3JpZ2luQ2xl
YW4oKSAmJiBzb3VyY2VDYW52YXMgJiYgIXNvdXJjZUNhbnZhcy0+b3JpZ2luQ2xlYW4oKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQ6OndvdWxkVGFpbnRPcmlnaW4oY29uc3QgSFRNTEltYWdlRWxlbWVudCog
ZWxlbWVudCkKIHsKLSAgICBpZiAoIWVsZW1lbnQgfHwgIWNhbnZhcygpLm9yaWdpbkNsZWFuKCkp
CisgICAgaWYgKCFlbGVtZW50IHx8ICFtX2NhbnZhcy5vcmlnaW5DbGVhbigpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBhdXRvKiBjYWNoZWRJbWFnZSA9IGVsZW1lbnQtPmNhY2hlZElt
YWdlKCk7CkBAIC03NSw5ICsxMDQsOSBAQCBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQ6Ondv
dWxkVGFpbnRPcmlnaW4oY29uc3QgSFRNTEltYWdlRWxlbWVudCogZWxlbWVudCkKICAgICBpZiAo
IWNhY2hlZEltYWdlLT5pc0NPUlNTYW1lT3JpZ2luKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwog
Ci0gICAgQVNTRVJUKGNhbnZhcygpLnNlY3VyaXR5T3JpZ2luKCkpOworICAgIEFTU0VSVChtX2Nh
bnZhcy5zZWN1cml0eU9yaWdpbigpKTsKICAgICBBU1NFUlQoY2FjaGVkSW1hZ2UtPm9yaWdpbigp
KTsKLSAgICBBU1NFUlQoY2FudmFzKCkuc2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSA9PSBj
YWNoZWRJbWFnZS0+b3JpZ2luKCktPnRvU3RyaW5nKCkpOworICAgIEFTU0VSVChtX2NhbnZhcy5z
ZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpID09IGNhY2hlZEltYWdlLT5vcmlnaW4oKS0+dG9T
dHJpbmcoKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC04OCw3ICsxMTcsNyBAQCBib29s
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQ6OndvdWxkVGFpbnRPcmlnaW4oY29uc3QgSFRNTFZpZGVv
RWxlbWVudCogdmlkZW8pCiAgICAgLy8gdG8gdGVzdCB0aGUgZmluYWxVUkwuIFBsZWFzZSBiZSBj
YXJlZnVsIHdoZW4gZml4aW5nIHRoaXMgaXNzdWUgbm90IHRvCiAgICAgLy8gbWFrZSBjdXJyZW50
U3JjIGJlIHRoZSBmaW5hbCBVUkwgYmVjYXVzZSB0aGVuIHRoZQogICAgIC8vIEhUTUxNZWRpYUVs
ZW1lbnQuY3VycmVudFNyYyBET00gQVBJIHdvdWxkIGxlYWsgcmVkaXJlY3QgZGVzdGluYXRpb25z
IQotICAgIGlmICghdmlkZW8gfHwgIWNhbnZhcygpLm9yaWdpbkNsZWFuKCkpCisgICAgaWYgKCF2
aWRlbyB8fCAhbV9jYW52YXMub3JpZ2luQ2xlYW4oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgaWYgKCF2aWRlby0+aGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSkKQEAgLTEwNiw3ICsx
MzUsNyBAQCBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQ6OndvdWxkVGFpbnRPcmlnaW4oY29u
c3QgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8pCiAKIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDo6d291bGRUYWludE9yaWdpbihjb25zdCBJbWFnZUJpdG1hcCogaW1hZ2VCaXRtYXApCiB7Ci0g
ICAgaWYgKCFpbWFnZUJpdG1hcCB8fCAhY2FudmFzKCkub3JpZ2luQ2xlYW4oKSkKKyAgICBpZiAo
IWltYWdlQml0bWFwIHx8ICFtX2NhbnZhcy5vcmlnaW5DbGVhbigpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICByZXR1cm4gIWltYWdlQml0bWFwLT5vcmlnaW5DbGVhbigpOwpAQCAtMTE0
LDE5ICsxNDMsMTkgQEAgYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0Ojp3b3VsZFRhaW50T3Jp
Z2luKGNvbnN0IEltYWdlQml0bWFwKiBpbWFnZUJpdG1hcCkKIAogYm9vbCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0Ojp3b3VsZFRhaW50T3JpZ2luKGNvbnN0IFVSTCYgdXJsKQogewotICAgIGlmICgh
Y2FudmFzKCkub3JpZ2luQ2xlYW4oKSkKKyAgICBpZiAoIW1fY2FudmFzLm9yaWdpbkNsZWFuKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICh1cmwucHJvdG9jb2xJc0RhdGEoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuICFjYW52YXMoKS5zZWN1cml0eU9y
aWdpbigpLT5jYW5SZXF1ZXN0KHVybCk7CisgICAgcmV0dXJuICFtX2NhbnZhcy5zZWN1cml0eU9y
aWdpbigpLT5jYW5SZXF1ZXN0KHVybCk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDo6Y2hlY2tPcmlnaW4oY29uc3QgVVJMJiB1cmwpCiB7CiAgICAgaWYgKHdvdWxkVGFpbnRPcmln
aW4odXJsKSkKLSAgICAgICAgY2FudmFzKCkuc2V0T3JpZ2luVGFpbnRlZCgpOworICAgICAgICBt
X2NhbnZhcy5zZXRPcmlnaW5UYWludGVkKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQuaAppbmRleCBhYzcwNGM5Mjg1NjdkODI1NzgyN2Y3NzIzMTZkNjI5NzBhMDk2NGUwLi5iYjA5
NTQ5NTE2MWIzYzFlMjQwMDkxNjQ4Y2JkYmU5ODE2Nzg3MDdmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oCkBAIC00Niw5ICs0
NiwxMCBAQCBjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0IDogcHVibGljIFNjcmlwdFdyYXBw
YWJsZSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+Q2FudmFzUmVuZGVyaW5nQ29udGV4dCgpID0g
ZGVmYXVsdDsKIAotICAgIHZvaWQgcmVmKCkgeyBtX2NhbnZhcy5yZWYoKTsgfQotICAgIHZvaWQg
ZGVyZWYoKSB7IG1fY2FudmFzLmRlcmVmKCk7IH0KLSAgICBIVE1MQ2FudmFzRWxlbWVudCYgY2Fu
dmFzKCkgY29uc3QgeyByZXR1cm4gbV9jYW52YXM7IH0KKyAgICB2b2lkIHJlZigpOworICAgIHZv
aWQgZGVyZWYoKTsKKworICAgIENhbnZhc0Jhc2UmIGNhbnZhc0Jhc2UoKSBjb25zdCB7IHJldHVy
biBtX2NhbnZhczsgfQogCiAgICAgdmlydHVhbCBib29sIGlzMmQoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1dlYkdMMSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENhbGxUcmFjaW5nQWN0
aXZlKGJvb2wgY2FsbFRyYWNpbmdBY3RpdmUpIHsgbV9jYWxsVHJhY2luZ0FjdGl2ZSA9IGNhbGxU
cmFjaW5nQWN0aXZlOyB9CiAKIHByb3RlY3RlZDoKLSAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0
KEhUTUxDYW52YXNFbGVtZW50Jik7CisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dChDYW52YXNC
YXNlJik7CiAgICAgYm9vbCB3b3VsZFRhaW50T3JpZ2luKGNvbnN0IENhbnZhc1BhdHRlcm4qKTsK
ICAgICBib29sIHdvdWxkVGFpbnRPcmlnaW4oY29uc3QgSFRNTENhbnZhc0VsZW1lbnQqKTsKICAg
ICBib29sIHdvdWxkVGFpbnRPcmlnaW4oY29uc3QgSFRNTEltYWdlRWxlbWVudCopOwpAQCAtODAs
MTQgKzgxLDE0IEBAIHByb3RlY3RlZDoKICAgICB0ZW1wbGF0ZTxjbGFzcyBUPiB2b2lkIGNoZWNr
T3JpZ2luKGNvbnN0IFQqIGFyZykKICAgICB7CiAgICAgICAgIGlmICh3b3VsZFRhaW50T3JpZ2lu
KGFyZykpCi0gICAgICAgICAgICBjYW52YXMoKS5zZXRPcmlnaW5UYWludGVkKCk7CisgICAgICAg
ICAgICBtX2NhbnZhcy5zZXRPcmlnaW5UYWludGVkKCk7CiAgICAgfQogICAgIHZvaWQgY2hlY2tP
cmlnaW4oY29uc3QgVVJMJik7CiAKICAgICBib29sIG1fY2FsbFRyYWNpbmdBY3RpdmUgeyBmYWxz
ZSB9OwogCiBwcml2YXRlOgotICAgIEhUTUxDYW52YXNFbGVtZW50JiBtX2NhbnZhczsKKyAgICBD
YW52YXNCYXNlJiBtX2NhbnZhczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuY3BwCmluZGV4IDI5NmFkZjJhNzkyZTViNzgwYzNkYTcxYzc4ZTZjYjFlYjE4NDZlOGQuLjA1
YWJlZGM3NWMwZWVjNWUwMjc1ZDI2ZGM3NTI4YmVlNTkyMTI2ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcApA
QCAtMTMxLDcgKzEzMSw3IEBAIHByaXZhdGU6CiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
KiBtX2NhbnZhc0NvbnRleHQ7CiB9OwogCi1DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRChIVE1MQ2FudmFzRWxlbWVudCYgY2FudmFzLCBib29sIHVzZXND
U1NDb21wYXRpYmlsaXR5UGFyc2VNb2RlLCBib29sIHVzZXNEYXNoYm9hcmRDb21wYXRpYmlsaXR5
TW9kZSkKK0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
KENhbnZhc0Jhc2UmIGNhbnZhcywgYm9vbCB1c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9kZSwg
Ym9vbCB1c2VzRGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUpCiAgICAgOiBDYW52YXNSZW5kZXJp
bmdDb250ZXh0KGNhbnZhcykKICAgICAsIG1fc3RhdGVTdGFjaygxKQogICAgICwgbV91c2VzQ1NT
Q29tcGF0aWJpbGl0eVBhcnNlTW9kZSh1c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9kZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmgKaW5kZXggY2E5MzE1NjNhNjY0YmRlZjM5MGYzZWRjYTEzYjRmNzk3MTZhZDM1Zi4uZmQ4
MTVhYjRlMDIzNjRiMjY4MzkyNGY0Nzg5ZTZhZGY2N2VmMzIxYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKQEAgLTUw
LDEyICs1MCwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENhbnZhc0Jhc2U7
CiBjbGFzcyBDYW52YXNHcmFkaWVudDsKIGNsYXNzIENhbnZhc1BhdHRlcm47CiBjbGFzcyBET01N
YXRyaXg7CiBjbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBI
VE1MQ2FudmFzRWxlbWVudDsKIGNsYXNzIEhUTUxJbWFnZUVsZW1lbnQ7CiBjbGFzcyBIVE1MVmlk
ZW9FbGVtZW50OwogY2xhc3MgSW1hZ2VCaXRtYXA7CkBAIC03Myw5ICs3MywxMSBAQCB1c2luZyBD
YW52YXNJbWFnZVNvdXJjZSA9IFZhcmlhbnQ8UmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+LCBSZWZQ
dHI8SFRNTENhbnZhc0VsZQogCiBjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgZmluYWwg
OiBwdWJsaWMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCwgcHVibGljIENhbnZhc1BhdGggewogcHVi
bGljOgotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRChIVE1MQ2FudmFzRWxlbWVudCYsIGJv
b2wgdXNlc0NTU0NvbXBhdGliaWxpdHlQYXJzZU1vZGUsIGJvb2wgdXNlc0Rhc2hib2FyZENvbXBh
dGliaWxpdHlNb2RlKTsKKyAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQoQ2FudmFzQmFzZSYs
IGJvb2wgdXNlc0NTU0NvbXBhdGliaWxpdHlQYXJzZU1vZGUsIGJvb2wgdXNlc0Rhc2hib2FyZENv
bXBhdGliaWxpdHlNb2RlKTsKICAgICB2aXJ0dWFsIH5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQo
KTsKIAorICAgIEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXMoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCY+KGNhbnZhc0Jhc2UoKSk7IH0KKwogICAgIGZsb2F0
IGxpbmVXaWR0aCgpIGNvbnN0OwogICAgIHZvaWQgc2V0TGluZVdpZHRoKGZsb2F0KTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvR1BVQmFzZWRDYW52YXNSZW5kZXJp
bmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9HUFVCYXNlZENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQuaAppbmRleCA0ODVmZjgwMTViMzQzZDE3NzdlMjhkNzhhZTkxN2NiODUy
MTQzZTU5Li5kODcxNDBlZjliNDBkMTNjNDg0NmM4NGQwMWNjYjIyMzc5MjBjNDIyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9HUFVCYXNlZENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9HUFVCYXNlZENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQuaApAQCAtNDksOSArNDksOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIG1hcmtMYXllckNvbXBvc2l0ZWQoKSA9IDA7CiAKIHByb3RlY3RlZDoKLSAgICBHUFVCYXNl
ZENhbnZhc1JlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQmIGNhbnZhcykKKyAgICBH
UFVCYXNlZENhbnZhc1JlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYgY2FudmFzKQogICAgICAg
ICA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQoY2FudmFzKQotICAgICAgICAsIEFjdGl2ZURPTU9i
amVjdCgmY2FudmFzLmRvY3VtZW50KCkpCisgICAgICAgICwgQWN0aXZlRE9NT2JqZWN0KGNhbnZh
cy5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCiAgICAgewogICAgIH0KIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250
ZXh0LmNwcAppbmRleCBlNmNhOTY3NzNlNDdmZmI2NTE1ZDRmMTZlNGIxM2U5YWUxYmJlY2ZlLi5h
Njc2YjczODRhYjc5NDliZjU2ZDBkOThmYmQ2MWQxN2ZkYjUyZjk4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4
dC5jcHAKQEAgLTM3LDcgKzM3LDcgQEAgc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVy
aW5nTW9kZSA9IEFjY2VsZXJhdGVkOwogc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVy
aW5nTW9kZSA9IFVuYWNjZWxlcmF0ZWQ7CiAjZW5kaWYKIAotSW1hZ2VCaXRtYXBSZW5kZXJpbmdD
b250ZXh0OjpJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQmIGNh
bnZhcywgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0U2V0dGluZ3MmJiBzZXR0aW5ncykKK0lt
YWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dDo6SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0KENh
bnZhc0Jhc2UmIGNhbnZhcywgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0U2V0dGluZ3MmJiBz
ZXR0aW5ncykKICAgICA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQoY2FudmFzKQogICAgICwgbV9z
ZXR0aW5ncyhXVEZNb3ZlKHNldHRpbmdzKSkKIHsKQEAgLTQ2LDYgKzQ2LDExIEBAIEltYWdlQml0
bWFwUmVuZGVyaW5nQ29udGV4dDo6SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52
YXNFbGVtZW50JiBjYW52CiAKIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dDo6fkltYWdlQml0
bWFwUmVuZGVyaW5nQ29udGV4dCgpID0gZGVmYXVsdDsKIAorSFRNTENhbnZhc0VsZW1lbnQqIElt
YWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dDo6Y2FudmFzKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
Y2FudmFzQmFzZSgpLmFzSFRNTENhbnZhc0VsZW1lbnQoKTsKK30KKwogYm9vbCBJbWFnZUJpdG1h
cFJlbmRlcmluZ0NvbnRleHQ6OmlzQWNjZWxlcmF0ZWQoKSBjb25zdAogewogICAgIHJldHVybiBi
dWZmZXJSZW5kZXJpbmdNb2RlID09IEFjY2VsZXJhdGVkOwpAQCAtNzMsMTEgKzc4LDExIEBAIHZv
aWQgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpzZXRPdXRwdXRCaXRtYXAoUmVmUHRyPElt
YWdlQml0bWFwPiBpbWFnZUJpdG1hCiAgICAgICAgIC8vIG9ubHkgcmVhc29uIEkgY2FuIHRoaW5r
IG9mIGlzIHRvRGF0YVVSTCgpLCBidXQgdGhhdCBkb2Vzbid0IHNlZW0gbGlrZQogICAgICAgICAv
LyBhIGdvb2QgZW5vdWdoIGFyZ3VtZW50IHRvIHdhc3RlIG1lbW9yeS4KIAotICAgICAgICBjYW52
YXMoKS5zZXRJbWFnZUJ1ZmZlckFuZE1hcmtEaXJ0eShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEZsb2F0
U2l6ZShjYW52YXMoKS53aWR0aCgpLCBjYW52YXMoKS5oZWlnaHQoKSksIGJ1ZmZlclJlbmRlcmlu
Z01vZGUpKTsKKyAgICAgICAgY2FudmFzKCktPnNldEltYWdlQnVmZmVyQW5kTWFya0RpcnR5KElt
YWdlQnVmZmVyOjpjcmVhdGUoRmxvYXRTaXplKGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+
aGVpZ2h0KCkpLCBidWZmZXJSZW5kZXJpbmdNb2RlKSk7CiAKICAgICAgICAgLy8gMS40LiBTZXQg
dGhlIG91dHB1dCBiaXRtYXAncyBvcmlnaW4tY2xlYW4gZmxhZyB0byB0cnVlLgogCi0gICAgICAg
IGNhbnZhcygpLnNldE9yaWdpbkNsZWFuKCk7CisgICAgICAgIGNhbnZhcygpLT5zZXRPcmlnaW5D
bGVhbigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC05MywxMCArOTgsMTAgQEAgdm9p
ZCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OnNldE91dHB1dEJpdG1hcChSZWZQdHI8SW1h
Z2VCaXRtYXA+IGltYWdlQml0bWEKICAgICAvLyAgICAgIGJpdG1hcCBkYXRhIHRvIGJlIHJlZmVy
ZW5jZWQgYnkgY29udGV4dCdzIG91dHB1dCBiaXRtYXAuCiAKICAgICBpZiAoaW1hZ2VCaXRtYXAt
Pm9yaWdpbkNsZWFuKCkpCi0gICAgICAgIGNhbnZhcygpLnNldE9yaWdpbkNsZWFuKCk7CisgICAg
ICAgIGNhbnZhcygpLT5zZXRPcmlnaW5DbGVhbigpOwogICAgIGVsc2UKLSAgICAgICAgY2FudmFz
KCkuc2V0T3JpZ2luVGFpbnRlZCgpOwotICAgIGNhbnZhcygpLnNldEltYWdlQnVmZmVyQW5kTWFy
a0RpcnR5KGltYWdlQml0bWFwLT50cmFuc2Zlck93bmVyc2hpcEFuZENsb3NlKCkpOworICAgICAg
ICBjYW52YXMoKS0+c2V0T3JpZ2luVGFpbnRlZCgpOworICAgIGNhbnZhcygpLT5zZXRJbWFnZUJ1
ZmZlckFuZE1hcmtEaXJ0eShpbWFnZUJpdG1hcC0+dHJhbnNmZXJPd25lcnNoaXBBbmRDbG9zZSgp
KTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Ojp0
cmFuc2ZlckZyb21JbWFnZUJpdG1hcChSZWZQdHI8SW1hZ2VCaXRtYXA+IGltYWdlQml0bWFwKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJp
bmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRl
cmluZ0NvbnRleHQuaAppbmRleCA2MzAyMThjZjMwOGNjNTQzNTllZWJjYTVhYjk0NThiOWI0ZWJl
MjBhLi42ODg3YmMwMWRmMTRkMTBhY2VkZmViODM4YzZkODA1OGE4YmJiMDA0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0Nv
bnRleHQuaApAQCAtNDUsOSArNDUsMTEgQEAgcHVibGljOgogICAgICAgICBCbGFuawogICAgIH07
CiAKLSAgICBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQmLCBJ
bWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncyYmKTsKKyAgICBJbWFnZUJpdG1hcFJl
bmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYsIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dFNl
dHRpbmdzJiYpOwogICAgIH5JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQoKTsKIAorICAgIEhU
TUxDYW52YXNFbGVtZW50KiBjYW52YXMoKSBjb25zdDsKKwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+
IHRyYW5zZmVyRnJvbUltYWdlQml0bWFwKFJlZlB0cjxJbWFnZUJpdG1hcD4pOwogCiAgICAgQml0
bWFwTW9kZSBiaXRtYXBNb2RlKCkgeyByZXR1cm4gbV9iaXRtYXBNb2RlOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250
ZXh0LmNwcAppbmRleCBmMTZhMTY3NmQ2MTgyNzM4Y2Q2YmE3MGY3ZGI2NTIzNmMzYTk1ZjRiLi5h
M2NiYzMxMjVlNTQ1NTI3ZmI4ZmQ0MTJhY2ZlNmRjMjFkMGZlYzA4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4
dC5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QbGFjZWhv
bGRlclJlbmRlcmluZ0NvbnRleHQ6OlBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dChIVE1MQ2Fu
dmFzRWxlbWVudCYgY2FudmFzKQorUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0OjpQbGFjZWhv
bGRlclJlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYgY2FudmFzKQogICAgIDogQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dChjYW52YXMpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dC5oCmluZGV4IGE0YWM3NWU0
OTRhMmE3ZTY4ZDU4M2UzM2JmNmI0NTJhNDk5NDYzYzguLmUwZThhMTFlMDkyZTYxZmNjZWQ4Yzlk
NjNjOTdhNzc3ZWE2Y2Q3ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dC5oCkBAIC0zMSw3ICszMSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0IGZp
bmFsIDogcHVibGljIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgewogcHVibGljOgotICAgIFBsYWNl
aG9sZGVyUmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxlbWVudCYpOworICAgIFBsYWNlaG9s
ZGVyUmVuZGVyaW5nQ29udGV4dChDYW52YXNCYXNlJik7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBp
c1BsYWNlaG9sZGVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRl
eCA4ZWNiZmEyY2RiZTA5NDQyMzUwNjcyOWQ2MjllYWRjNmVhY2E0YjA4Li5iOTY5MzI1ZjQ4ODM2
NjNhOTAxMGFjZDAzMWVmYmFmMmI5ZDE5Y2IxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtNjAsMTMgKzYwLDEz
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6V2Vi
R0wyUmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxlbWVudCYgcGFzc2VkQ2FudmFzLCBHcmFw
aGljc0NvbnRleHQzREF0dHJpYnV0ZXMgYXR0cmlidXRlcykKLSAgICA6IFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UocGFzc2VkQ2FudmFzLCBhdHRyaWJ1dGVzKQorV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dDo6V2ViR0wyUmVuZGVyaW5nQ29udGV4dChDYW52YXNCYXNlJiBjYW52YXMsIEdyYXBoaWNz
Q29udGV4dDNEQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQorICAgIDogV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZShjYW52YXMsIGF0dHJpYnV0ZXMpCiB7CiB9CiAKLVdlYkdMMlJlbmRlcmluZ0NvbnRl
eHQ6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQmIHBhc3NlZENhbnZh
cywgUmVmPEdyYXBoaWNzQ29udGV4dDNEPiYmIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dDNEQXR0
cmlidXRlcyBhdHRyaWJ1dGVzKQotICAgIDogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZShwYXNz
ZWRDYW52YXMsIFdURk1vdmUoY29udGV4dCksIGF0dHJpYnV0ZXMpCitXZWJHTDJSZW5kZXJpbmdD
b250ZXh0OjpXZWJHTDJSZW5kZXJpbmdDb250ZXh0KENhbnZhc0Jhc2UmIGNhbnZhcywgUmVmPEdy
YXBoaWNzQ29udGV4dDNEPiYmIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyBh
dHRyaWJ1dGVzKQorICAgIDogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZShjYW52YXMsIFdURk1v
dmUoY29udGV4dCksIGF0dHJpYnV0ZXMpCiB7CiAgICAgaW5pdGlhbGl6ZVNoYWRlckV4dGVuc2lv
bnMoKTsKICAgICBpbml0aWFsaXplVmVydGV4QXJyYXlPYmplY3RzKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgKaW5kZXggYWJm
YWY3ZGFmYTVhODM3ZGViY2M5Y2RkNjU0ZjdmN2I4YmJlZTJhNC4uZDMzMzdkYTZkYTcwZWE0ODE0
YjYzZDM1ZDllNWFkYTRjMjRmZmU0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaApAQCAtMzksOCArMzksOCBAQCBjbGFzcyBX
ZWJHTFZlcnRleEFycmF5T2JqZWN0OwogCiBjbGFzcyBXZWJHTDJSZW5kZXJpbmdDb250ZXh0IGZp
bmFsIDogcHVibGljIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UgewogcHVibGljOgotICAgIFdl
YkdMMlJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQmLCBXZWJHTENvbnRleHRBdHRy
aWJ1dGVzKTsKLSAgICBXZWJHTDJSZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52YXNFbGVtZW50Jiwg
UmVmPEdyYXBoaWNzQ29udGV4dDNEPiYmLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzKTsKKyAgICBX
ZWJHTDJSZW5kZXJpbmdDb250ZXh0KENhbnZhc0Jhc2UmLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVz
KTsKKyAgICBXZWJHTDJSZW5kZXJpbmdDb250ZXh0KENhbnZhc0Jhc2UmLCBSZWY8R3JhcGhpY3ND
b250ZXh0M0Q+JiYsIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMpOwogCiAgICAgLy8gQnVmZmVyIG9i
amVjdHMKICAgICB1c2luZyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJEYXRhOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5jcHAKaW5kZXggNmIwMWUxNDY5ZDZjODViZTBjMjE1MjgwYTE0ZmEzODQ1NjE0NThhNS4uZjRm
OTQ4ZWNiOTNkMzUwNjQzZTE1YmZiYzRlMWU0MThhNjRmOTk0YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC02Niwx
MyArNjYsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1XZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxlbWVudCYgcGFzc2VkQ2FudmFz
LCBHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMgYXR0cmlidXRlcykKLSAgICA6IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UocGFzc2VkQ2FudmFzLCBhdHRyaWJ1dGVzKQorV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYgY2FudmFzLCBHcmFw
aGljc0NvbnRleHQzREF0dHJpYnV0ZXMgYXR0cmlidXRlcykKKyAgICA6IFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UoY2FudmFzLCBhdHRyaWJ1dGVzKQogewogfQogCi1XZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxlbWVudCYgcGFzc2VkQ2Fu
dmFzLCBSZWY8R3JhcGhpY3NDb250ZXh0M0Q+JiYgY29udGV4dCwgR3JhcGhpY3NDb250ZXh0M0RB
dHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCi0gICAgOiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKHBh
c3NlZENhbnZhcywgV1RGTW92ZShjb250ZXh0KSwgYXR0cmlidXRlcykKK1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb250ZXh0KENhbnZhc0Jhc2UmIGNhbnZhcywgUmVmPEdy
YXBoaWNzQ29udGV4dDNEPiYmIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyBh
dHRyaWJ1dGVzKQorICAgIDogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZShjYW52YXMsIFdURk1v
dmUoY29udGV4dCksIGF0dHJpYnV0ZXMpCiB7CiAgICAgaW5pdGlhbGl6ZVZlcnRleEFycmF5T2Jq
ZWN0cygpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuaAppbmRleCBkNzE4ZTBhYzQ0MzdmNGI5Yzc5Yzk0Yzk0Y2RkODQ2NGMzMDAw
OGNmLi4yNDBlMDc5YmZkNzE3ZWNkYWIyNDA3OTZhYWRiZjA0ODgwMTFjNTExIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaApAQCAt
MzMsOCArMzMsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFdlYkdMUmVuZGVyaW5n
Q29udGV4dCBmaW5hbCA6IHB1YmxpYyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlIHsKIHB1Ymxp
YzoKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQmLCBHcmFwaGlj
c0NvbnRleHQzREF0dHJpYnV0ZXMpOwotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dChIVE1MQ2Fu
dmFzRWxlbWVudCYsIFJlZjxHcmFwaGljc0NvbnRleHQzRD4mJiwgR3JhcGhpY3NDb250ZXh0M0RB
dHRyaWJ1dGVzKTsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYsIEdyYXBo
aWNzQ29udGV4dDNEQXR0cmlidXRlcyk7CisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KENhbnZh
c0Jhc2UmLCBSZWY8R3JhcGhpY3NDb250ZXh0M0Q+JiYsIEdyYXBoaWNzQ29udGV4dDNEQXR0cmli
dXRlcyk7CiAKICAgICBib29sIGlzV2ViR0wxKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UuY3BwCmluZGV4IGU2OTJjMjdkZTM5ODRiMGMwMjgyN2U2MmIzMWUyMzRl
YTc5MTFkZDEuLjMwM2VlYWM5ODAxZGNhOGVkYTliNjE5ZGJmZTkwMmFmNzM3ZGVmMDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UuY3BwCkBAIC0zNjEsNyArMzYxLDcgQEAgc3RhdGljIGJvb2wgaXNIaWdoUGVyZm9y
bWFuY2VDb250ZXh0KGNvbnN0IFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4mIGNvbnRleHQpCiAg
ICAgcmV0dXJuIGNvbnRleHQtPnBvd2VyUHJlZmVyZW5jZVVzZWRGb3JDcmVhdGlvbigpID09IFdl
YkdMUG93ZXJQcmVmZXJlbmNlOjpIaWdoUGVyZm9ybWFuY2U7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0
cjxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpj
cmVhdGUoSFRNTENhbnZhc0VsZW1lbnQmIGNhbnZhcywgV2ViR0xDb250ZXh0QXR0cmlidXRlcyYg
YXR0cmlidXRlcywgY29uc3QgU3RyaW5nJiB0eXBlKQorc3RkOjp1bmlxdWVfcHRyPFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZShDYW52
YXNCYXNlJiBjYW52YXMsIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMsIGNvbnN0
IFN0cmluZyYgdHlwZSkKIHsKICNpZiBFTkFCTEUoV0VCR0wyKQogICAgIGlmICh0eXBlID09ICJ3
ZWJnbDIiICYmICFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkdM
MkVuYWJsZWQoKSkKQEAgLTM3MCw1MiArMzcwLDYyIEBAIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGUoSFRN
CiAgICAgVU5VU0VEX1BBUkFNKHR5cGUpOwogI2VuZGlmCiAKLSAgICBEb2N1bWVudCYgZG9jdW1l
bnQgPSBjYW52YXMuZG9jdW1lbnQoKTsKLSAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gZG9jdW1l
bnQuZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIC8vIFRoZSBGcmFtZUxvYWRlckNsaWVudCBtaWdodCBibG9jayBjcmVhdGlvbiBvZiBhIG5l
dyBXZWJHTCBjb250ZXh0IGRlc3BpdGUgdGhlIHBhZ2Ugc2V0dGluZ3M7IGluCi0gICAgLy8gcGFy
dGljdWxhciwgaWYgV2ViR0wgY29udGV4dHMgd2VyZSBsb3N0IG9uZSBvciBtb3JlIHRpbWVzIHZp
YSB0aGUgR0xfQVJCX3JvYnVzdG5lc3MgZXh0ZW5zaW9uLgotICAgIGlmICghZnJhbWUtPmxvYWRl
cigpLmNsaWVudCgpLmFsbG93V2ViR0woZnJhbWUtPnNldHRpbmdzKCkud2ViR0xFbmFibGVkKCkp
KSB7Ci0gICAgICAgIGNhbnZhcy5kaXNwYXRjaEV2ZW50KFdlYkdMQ29udGV4dEV2ZW50OjpjcmVh
dGUoZXZlbnROYW1lcygpLndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3JFdmVudCwgZmFsc2UsIHRy
dWUsICJXZWIgcGFnZSB3YXMgbm90IGFsbG93ZWQgdG8gY3JlYXRlIGEgV2ViR0wgY29udGV4dC4i
KSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQogICAgIGJvb2wgaXNQZW5kaW5n
UG9saWN5UmVzb2x1dGlvbiA9IGZhbHNlOwotICAgIERvY3VtZW50JiB0b3BEb2N1bWVudCA9IGRv
Y3VtZW50LnRvcERvY3VtZW50KCk7Ci0gICAgUGFnZSogcGFnZSA9IHRvcERvY3VtZW50LnBhZ2Uo
KTsKLSAgICBib29sIGZvcmNpbmdQZW5kaW5nUG9saWN5ID0gZnJhbWUtPnNldHRpbmdzKCkuaXNG
b3JjZVBlbmRpbmdXZWJHTFBvbGljeSgpOworICAgIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cgPSBu
dWxscHRyOwogCi0gICAgaWYgKGZvcmNpbmdQZW5kaW5nUG9saWN5IHx8IChwYWdlICYmICF0b3BE
b2N1bWVudC51cmwoKS5pc0xvY2FsRmlsZSgpKSkgewotICAgICAgICBXZWJHTExvYWRQb2xpY3kg
cG9saWN5ID0gZm9yY2luZ1BlbmRpbmdQb2xpY3kgPyBXZWJHTFBlbmRpbmdDcmVhdGlvbiA6IHBh
Z2UtPm1haW5GcmFtZSgpLmxvYWRlcigpLmNsaWVudCgpLndlYkdMUG9saWN5Rm9yVVJMKHRvcERv
Y3VtZW50LnVybCgpKTsKKyAgICBhdXRvKiBjYW52YXNFbGVtZW50ID0gY2FudmFzLmFzSFRNTENh
bnZhc0VsZW1lbnQoKTsKIAotICAgICAgICBpZiAocG9saWN5ID09IFdlYkdMQmxvY2tDcmVhdGlv
bikgewotICAgICAgICAgICAgTE9HKFdlYkdMLCAiVGhlIHBvbGljeSBmb3IgdGhpcyBVUkwgKCVz
KSBpcyB0byBibG9jayBXZWJHTC4iLCB0b3BEb2N1bWVudC51cmwoKS5ob3N0KCkudXRmOCgpLmRh
dGEoKSk7CisgICAgaWYgKGNhbnZhc0VsZW1lbnQpIHsKKyAgICAgICAgRG9jdW1lbnQmIGRvY3Vt
ZW50ID0gY2FudmFzRWxlbWVudC0+ZG9jdW1lbnQoKTsKKyAgICAgICAgUmVmUHRyPEZyYW1lPiBm
cmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7CisgICAgICAgIGlmICghZnJhbWUpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICAvLyBUaGUgRnJhbWVMb2FkZXJDbGllbnQgbWln
aHQgYmxvY2sgY3JlYXRpb24gb2YgYSBuZXcgV2ViR0wgY29udGV4dCBkZXNwaXRlIHRoZSBwYWdl
IHNldHRpbmdzOyBpbgorICAgICAgICAvLyBwYXJ0aWN1bGFyLCBpZiBXZWJHTCBjb250ZXh0cyB3
ZXJlIGxvc3Qgb25lIG9yIG1vcmUgdGltZXMgdmlhIHRoZSBHTF9BUkJfcm9idXN0bmVzcyBleHRl
bnNpb24uCisgICAgICAgIGlmICghZnJhbWUtPmxvYWRlcigpLmNsaWVudCgpLmFsbG93V2ViR0wo
ZnJhbWUtPnNldHRpbmdzKCkud2ViR0xFbmFibGVkKCkpKSB7CisgICAgICAgICAgICBjYW52YXNF
bGVtZW50LT5kaXNwYXRjaEV2ZW50KFdlYkdMQ29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1l
cygpLndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3JFdmVudCwgZmFsc2UsIHRydWUsICJXZWIgcGFn
ZSB3YXMgbm90IGFsbG93ZWQgdG8gY3JlYXRlIGEgV2ViR0wgY29udGV4dC4iKSk7CiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChwb2xpY3kgPT0g
V2ViR0xQZW5kaW5nQ3JlYXRpb24pIHsKLSAgICAgICAgICAgIExPRyhXZWJHTCwgIldlYkdMIHBv
bGljeSBpcyBwZW5kaW5nLiBNYXkgbmVlZCB0byBiZSByZXNvbHZlZCBsYXRlci4iKTsKLSAgICAg
ICAgICAgIGlzUGVuZGluZ1BvbGljeVJlc29sdXRpb24gPSB0cnVlOworICAgICAgICBEb2N1bWVu
dCYgdG9wRG9jdW1lbnQgPSBkb2N1bWVudC50b3BEb2N1bWVudCgpOworICAgICAgICBQYWdlKiBw
YWdlID0gdG9wRG9jdW1lbnQucGFnZSgpOworICAgICAgICBib29sIGZvcmNpbmdQZW5kaW5nUG9s
aWN5ID0gZnJhbWUtPnNldHRpbmdzKCkuaXNGb3JjZVBlbmRpbmdXZWJHTFBvbGljeSgpOworCisg
ICAgICAgIGlmIChmb3JjaW5nUGVuZGluZ1BvbGljeSB8fCAocGFnZSAmJiAhdG9wRG9jdW1lbnQu
dXJsKCkuaXNMb2NhbEZpbGUoKSkpIHsKKyAgICAgICAgICAgIFdlYkdMTG9hZFBvbGljeSBwb2xp
Y3kgPSBmb3JjaW5nUGVuZGluZ1BvbGljeSA/IFdlYkdMUGVuZGluZ0NyZWF0aW9uIDogcGFnZS0+
bWFpbkZyYW1lKCkubG9hZGVyKCkuY2xpZW50KCkud2ViR0xQb2xpY3lGb3JVUkwodG9wRG9jdW1l
bnQudXJsKCkpOworCisgICAgICAgICAgICBpZiAocG9saWN5ID09IFdlYkdMQmxvY2tDcmVhdGlv
bikgeworICAgICAgICAgICAgICAgIExPRyhXZWJHTCwgIlRoZSBwb2xpY3kgZm9yIHRoaXMgVVJM
ICglcykgaXMgdG8gYmxvY2sgV2ViR0wuIiwgdG9wRG9jdW1lbnQudXJsKCkuaG9zdCgpLnV0Zjgo
KS5kYXRhKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAocG9saWN5ID09IFdlYkdMUGVuZGluZ0NyZWF0aW9uKSB7Cisg
ICAgICAgICAgICAgICAgTE9HKFdlYkdMLCAiV2ViR0wgcG9saWN5IGlzIHBlbmRpbmcuIE1heSBu
ZWVkIHRvIGJlIHJlc29sdmVkIGxhdGVyLiIpOworICAgICAgICAgICAgICAgIGlzUGVuZGluZ1Bv
bGljeVJlc29sdXRpb24gPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGZyYW1lLT5zZXR0aW5ncygpLmZvcmNlU29mdHdhcmVXZWJHTFJlbmRlcmluZygpKQor
ICAgICAgICAgICAgYXR0cmlidXRlcy5mb3JjZVNvZnR3YXJlUmVuZGVyZXIgPSB0cnVlOworCisg
ICAgICAgIGlmIChmcmFtZS0+c2V0dGluZ3MoKS5mb3JjZVdlYkdMVXNlc0xvd1Bvd2VyKCkpIHsK
KyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLnBvd2VyUHJlZmVyZW5jZSA9PSBHcmFwaGljc0Nv
bnRleHQzRFBvd2VyUHJlZmVyZW5jZTo6SGlnaFBlcmZvcm1hbmNlKQorICAgICAgICAgICAgICAg
IExPRyhXZWJHTCwgIk92ZXJyaWRpbmcgcG93ZXJQcmVmZXJlbmNlIGZyb20gaGlnaC1wZXJmb3Jt
YW5jZSB0byBsb3ctcG93ZXIuIik7CisgICAgICAgICAgICBhdHRyaWJ1dGVzLnBvd2VyUHJlZmVy
ZW5jZSA9IEdyYXBoaWNzQ29udGV4dDNEUG93ZXJQcmVmZXJlbmNlOjpMb3dQb3dlcjsKICAgICAg
ICAgfQorCisgICAgICAgIGlmIChwYWdlKQorICAgICAgICAgICAgYXR0cmlidXRlcy5kZXZpY2VQ
aXhlbFJhdGlvID0gcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKKworICAgICAgICBob3N0V2lu
ZG93ID0gZG9jdW1lbnQudmlldygpLT5yb290KCktPmhvc3RXaW5kb3coKTsKICAgICB9CiAKICAg
ICBhdHRyaWJ1dGVzLm5vRXh0ZW5zaW9ucyA9IHRydWU7CiAgICAgYXR0cmlidXRlcy5zaGFyZVJl
c291cmNlcyA9IGZhbHNlOwogCi0gICAgaWYgKGZyYW1lLT5zZXR0aW5ncygpLmZvcmNlU29mdHdh
cmVXZWJHTFJlbmRlcmluZygpKQotICAgICAgICBhdHRyaWJ1dGVzLmZvcmNlU29mdHdhcmVSZW5k
ZXJlciA9IHRydWU7Ci0KICAgICBhdHRyaWJ1dGVzLmluaXRpYWxQb3dlclByZWZlcmVuY2UgPSBh
dHRyaWJ1dGVzLnBvd2VyUHJlZmVyZW5jZTsKLSAgICBpZiAoZnJhbWUtPnNldHRpbmdzKCkuZm9y
Y2VXZWJHTFVzZXNMb3dQb3dlcigpKSB7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzLnBvd2VyUHJl
ZmVyZW5jZSA9PSBHcmFwaGljc0NvbnRleHQzRFBvd2VyUHJlZmVyZW5jZTo6SGlnaFBlcmZvcm1h
bmNlKQotICAgICAgICAgICAgTE9HKFdlYkdMLCAiT3ZlcnJpZGluZyBwb3dlclByZWZlcmVuY2Ug
ZnJvbSBoaWdoLXBlcmZvcm1hbmNlIHRvIGxvdy1wb3dlci4iKTsKLSAgICAgICAgYXR0cmlidXRl
cy5wb3dlclByZWZlcmVuY2UgPSBHcmFwaGljc0NvbnRleHQzRFBvd2VyUHJlZmVyZW5jZTo6TG93
UG93ZXI7Ci0gICAgfQogCi0gICAgaWYgKHBhZ2UpCi0gICAgICAgIGF0dHJpYnV0ZXMuZGV2aWNl
UGl4ZWxSYXRpbyA9IHBhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCk7CiAKICNpZiBFTkFCTEUoV0VC
R0wyKQogICAgIGlmICh0eXBlID09ICJ3ZWJnbDIiKQpAQCAtNDM1LDkgKzQ0NSwxMCBAQCBzdGQ6
OnVuaXF1ZV9wdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4gV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6Y3JlYXRlKEhUTQogICAgICAgICByZXR1cm4gcmVuZGVyaW5nQ29udGV4dDsKICAg
ICB9CiAKLSAgICBhdXRvIGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKGF0dHJp
YnV0ZXMsIGRvY3VtZW50LnZpZXcoKS0+cm9vdCgpLT5ob3N0V2luZG93KCkpOworICAgIGF1dG8g
Y29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoYXR0cmlidXRlcywgaG9zdFdpbmRv
dyk7CiAgICAgaWYgKCFjb250ZXh0IHx8ICFjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkg
ewotICAgICAgICBjYW52YXMuZGlzcGF0Y2hFdmVudChXZWJHTENvbnRleHRFdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRjcmVhdGlvbmVycm9yRXZlbnQsIGZhbHNlLCB0cnVl
LCAiQ291bGQgbm90IGNyZWF0ZSBhIFdlYkdMIGNvbnRleHQuIikpOworICAgICAgICBpZiAoY2Fu
dmFzRWxlbWVudCkKKyAgICAgICAgICAgIGNhbnZhc0VsZW1lbnQtPmRpc3BhdGNoRXZlbnQoV2Vi
R0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0Y3JlYXRpb25l
cnJvckV2ZW50LCBmYWxzZSwgdHJ1ZSwgIkNvdWxkIG5vdCBjcmVhdGUgYSBXZWJHTCBjb250ZXh0
LiIpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCkBAIC00NjQsOCArNDc1LDgg
QEAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+IFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmNyZWF0ZShIVE0KICAgICByZXR1cm4gcmVuZGVyaW5nQ29udGV4dDsK
IH0KIAotV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZShIVE1MQ2FudmFzRWxlbWVudCYgcGFzc2VkQ2FudmFzLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVz
IGF0dHJpYnV0ZXMpCi0gICAgOiBHUFVCYXNlZENhbnZhc1JlbmRlcmluZ0NvbnRleHQocGFzc2Vk
Q2FudmFzKQorV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZShDYW52YXNCYXNlJiBjYW52YXMsIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgYXR0cmlidXRl
cykKKyAgICA6IEdQVUJhc2VkQ2FudmFzUmVuZGVyaW5nQ29udGV4dChjYW52YXMpCiAgICAgLCBt
X2Rpc3BhdGNoQ29udGV4dExvc3RFdmVudFRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6ZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50KQogICAgICwgbV9yZXN0b3JlVGltZXIo
KnRoaXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjptYXliZVJlc3RvcmVDb250ZXh0KQog
ICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCkBAIC00NzcsOCArNDg4LDggQEAgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZShIVE1MQ2FudmFz
RWxlbWVudCYgcGFzc2VkQ2EKICAgICBtX2NoZWNrRm9yQ29udGV4dExvc3NIYW5kbGluZ1RpbWVy
LnN0YXJ0T25lU2hvdChjaGVja0NvbnRleHRMb3NzSGFuZGxpbmdEZWxheSk7CiB9CiAKLVdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UoSFRNTENhbnZh
c0VsZW1lbnQmIHBhc3NlZENhbnZhcywgUmVmPEdyYXBoaWNzQ29udGV4dDNEPiYmIGNvbnRleHQs
IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgYXR0cmlidXRlcykKLSAgICA6IEdQVUJhc2VkQ2FudmFz
UmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMpCitXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKENhbnZhc0Jhc2UmIGNhbnZhcywgUmVmPEdyYXBo
aWNzQ29udGV4dDNEPiYmIGNvbnRleHQsIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgYXR0cmlidXRl
cykKKyAgICA6IEdQVUJhc2VkQ2FudmFzUmVuZGVyaW5nQ29udGV4dChjYW52YXMpCiAgICAgLCBt
X2NvbnRleHQoV1RGTW92ZShjb250ZXh0KSkKICAgICAsIG1fZGlzcGF0Y2hDb250ZXh0TG9zdEV2
ZW50VGltZXIoKnRoaXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkaXNwYXRjaENvbnRl
eHRMb3N0RXZlbnQpCiAgICAgLCBtX3Jlc3RvcmVUaW1lcigqdGhpcywgJldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6Om1heWJlUmVzdG9yZUNvbnRleHQpCkBAIC01MDIsMjQgKzUxMywyOSBAQCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKEhUTUxD
YW52YXNFbGVtZW50JiBwYXNzZWRDYQogICAgIGFkZEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZl
cklmTmVjZXNzYXJ5KCk7CiB9CiAKK0hUTUxDYW52YXNFbGVtZW50KiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpjYW52YXMoKQoreworICAgIHJldHVybiBjYW52YXNCYXNlKCkuYXNIVE1MQ2Fu
dmFzRWxlbWVudCgpOworfQorCiAvLyBXZSBjaGVjayBmb3IgY29udGV4dCBsb3NzIGhhbmRsaW5n
IGFmdGVyIGEgZmV3IHNlY29uZHMgdG8gZ2l2ZSB0aGUgSlMgYSBjaGFuY2UgdG8gcmVnaXN0ZXIg
dGhlIGV2ZW50IGxpc3RlbmVycwogLy8gYW5kIHRvIGRpc2NhcmQgdGVtcG9yYXJ5IEdMIGNvbnRl
eHRzIChlLmcuIGZlYXR1cmUgZGV0ZWN0aW9uKS4KIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6Y2hlY2tGb3JDb250ZXh0TG9zc0hhbmRsaW5nKCkKIHsKLSAgICBpZiAoIWNhbnZhcygp
LnJlbmRlcmVyKCkpCisgICAgaWYgKCFjYW52YXMoKS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYXV0byogcGFnZSA9IGNhbnZhcygpLmRvY3VtZW50KCkucGFnZSgpOworICAg
IGF1dG8qIHBhZ2UgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKS5wYWdlKCk7CiAgICAgaWYgKCFwYWdl
KQogICAgICAgICByZXR1cm47CiAKLSAgICBib29sIGhhbmRsZXNDb250ZXh0TG9zcyA9IGNhbnZh
cygpLmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRsb3N0RXZlbnQp
ICYmIGNhbnZhcygpLmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRy
ZXN0b3JlZEV2ZW50KTsKKyAgICBib29sIGhhbmRsZXNDb250ZXh0TG9zcyA9IGNhbnZhcygpLT5o
YXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0bG9zdEV2ZW50KSAmJiBj
YW52YXMoKS0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLndlYmdsY29udGV4dHJlc3Rv
cmVkRXZlbnQpOwogICAgIHBhZ2UtPmRpYWdub3N0aWNMb2dnaW5nQ2xpZW50KCkubG9nRGlhZ25v
c3RpY01lc3NhZ2UoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpwYWdlSGFuZGxlc1dlYkdMQ29udGV4
dExvc3NLZXkoKSwgaGFuZGxlc0NvbnRleHRMb3NzID8gRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjp5
ZXNLZXkoKSA6IERpYWdub3N0aWNMb2dnaW5nS2V5czo6bm9LZXkoKSwgU2hvdWxkU2FtcGxlOjpO
byk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVnaXN0ZXJXaXRoV2Vi
R0xTdGF0ZVRyYWNrZXIoKQogewotICAgIGF1dG8qIHBhZ2UgPSBjYW52YXMoKS5kb2N1bWVudCgp
LnBhZ2UoKTsKKyAgICBhdXRvKiBwYWdlID0gY2FudmFzKCktPmRvY3VtZW50KCkucGFnZSgpOwog
ICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC02MDgsNyArNjI0LDcgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzZXR1cEZsYWdzKCkKIHsKICAgICBBU1NFUlQo
bV9jb250ZXh0KTsKIAotICAgIGlmIChQYWdlKiBwYWdlID0gY2FudmFzKCkuZG9jdW1lbnQoKS5w
YWdlKCkpCisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKS5wYWdlKCkp
CiAgICAgICAgIG1fc3ludGhlc2l6ZWRFcnJvcnNUb0NvbnNvbGUgPSBwYWdlLT5zZXR0aW5ncygp
LndlYkdMRXJyb3JzVG9Db25zb2xlRW5hYmxlZCgpOwogCiAgICAgbV9pc0dMRVMyQ29tcGxpYW50
ID0gbV9jb250ZXh0LT5pc0dMRVMyQ29tcGxpYW50KCk7CkBAIC02MzUsNyArNjUxLDcgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphZGRBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2
ZXJJZk5lY2Vzc2FyeSgpCiAgICAgaWYgKCFpc0hpZ2hQZXJmb3JtYW5jZUNvbnRleHQobV9jb250
ZXh0KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byogcGFnZSA9IGNhbnZhcygpLmRvY3Vt
ZW50KCkucGFnZSgpOworICAgIGF1dG8qIHBhZ2UgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKS5wYWdl
KCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTY0OSw3ICs2NjUsNyBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmFkZEFjdGl2aXR5U3RhdGVDaGFuZ2VP
YnNlcnZlcklmTmVjZXNzYXJ5KCkKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpy
ZW1vdmVBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIoKQogewotICAgIGlmIChhdXRvKiBwYWdl
ID0gY2FudmFzKCkuZG9jdW1lbnQoKS5wYWdlKCkpCisgICAgaWYgKGF1dG8qIHBhZ2UgPSBjYW52
YXMoKS0+ZG9jdW1lbnQoKS5wYWdlKCkpCiAgICAgICAgIHBhZ2UtPnJlbW92ZUFjdGl2aXR5U3Rh
dGVDaGFuZ2VPYnNlcnZlcigqdGhpcyk7CiB9CiAKQEAgLTcwMiwxNSArNzE4LDE1IEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6bWFya0NvbnRleHRDaGFuZ2VkKCkKICAgICBtX2Nv
bnRleHQtPm1hcmtDb250ZXh0Q2hhbmdlZCgpOwogCiAgICAgbV9sYXllckNsZWFyZWQgPSBmYWxz
ZTsKLSAgICBSZW5kZXJCb3gqIHJlbmRlckJveCA9IGNhbnZhcygpLnJlbmRlckJveCgpOworICAg
IFJlbmRlckJveCogcmVuZGVyQm94ID0gY2FudmFzKCktPnJlbmRlckJveCgpOwogICAgIGlmIChp
c0FjY2VsZXJhdGVkKCkgJiYgcmVuZGVyQm94ICYmIHJlbmRlckJveC0+aGFzQWNjZWxlcmF0ZWRD
b21wb3NpdGluZygpKSB7CiAgICAgICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSB0cnVlOwotICAg
ICAgICBjYW52YXMoKS5jbGVhckNvcGllZEltYWdlKCk7CisgICAgICAgIGNhbnZhcygpLT5jbGVh
ckNvcGllZEltYWdlKCk7CiAgICAgICAgIHJlbmRlckJveC0+Y29udGVudENoYW5nZWQoQ2FudmFz
Q2hhbmdlZCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCFtX21hcmtlZENhbnZhc0RpcnR5
KSB7CiAgICAgICAgICAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gdHJ1ZTsKLSAgICAgICAgICAg
IGNhbnZhcygpLmRpZERyYXcoRmxvYXRSZWN0KEZsb2F0UG9pbnQoMCwgMCksIGNsYW1wZWRDYW52
YXNTaXplKCkpKTsKKyAgICAgICAgICAgIGNhbnZhcygpLT5kaWREcmF3KEZsb2F0UmVjdChGbG9h
dFBvaW50KDAsIDApLCBjbGFtcGVkQ2FudmFzU2l6ZSgpKSk7CiAgICAgICAgIH0KICAgICB9CiB9
CkBAIC03MjEsOSArNzM3LDkgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjptYXJr
Q29udGV4dENoYW5nZWRBbmROb3RpZnlDYW52YXNPYnNlcnZlcigpCiAgICAgaWYgKCFpc0FjY2Vs
ZXJhdGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBSZW5kZXJCb3gqIHJlbmRlckJv
eCA9IGNhbnZhcygpLnJlbmRlckJveCgpOworICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gY2Fu
dmFzKCktPnJlbmRlckJveCgpOwogICAgIGlmIChyZW5kZXJCb3ggJiYgcmVuZGVyQm94LT5oYXNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpCi0gICAgICAgIGNhbnZhcygpLm5vdGlmeU9ic2VydmVy
c0NhbnZhc0NoYW5nZWQoRmxvYXRSZWN0KEZsb2F0UG9pbnQoMCwgMCksIGNsYW1wZWRDYW52YXNT
aXplKCkpKTsKKyAgICAgICAgY2FudmFzKCktPm5vdGlmeU9ic2VydmVyc0NhbnZhc0NoYW5nZWQo
RmxvYXRSZWN0KEZsb2F0UG9pbnQoMCwgMCksIGNsYW1wZWRDYW52YXNTaXplKCkpKTsKIH0KIAog
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjbGVhcklmQ29tcG9zaXRlZChHQzNEYml0
ZmllbGQgbWFzaykKQEAgLTgwNSwyNiArODIxLDI2IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKQogICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChjYW52YXMoKS5k
b2N1bWVudCgpLnByaW50aW5nKCkpCi0gICAgICAgIGNhbnZhcygpLmNsZWFyUHJlc2VudGF0aW9u
Q29weSgpOworICAgIGlmIChjYW52YXMoKS0+ZG9jdW1lbnQoKS5wcmludGluZygpKQorICAgICAg
ICBjYW52YXMoKS0+Y2xlYXJQcmVzZW50YXRpb25Db3B5KCk7CiAKICAgICAvLyBVbnRpbCB0aGUg
Y2FudmFzIGlzIHdyaXR0ZW4gdG8gYnkgdGhlIGFwcGxpY2F0aW9uLCB0aGUgY2xlYXIgdGhhdAog
ICAgIC8vIGhhcHBlbmVkIGFmdGVyIGl0IHdhcyBjb21wb3NpdGVkIHNob3VsZCBiZSBpZ25vcmVk
IGJ5IHRoZSBjb21wb3NpdG9yLgogICAgIGlmIChtX2NvbnRleHQtPmxheWVyQ29tcG9zaXRlZCgp
ICYmICFtX2F0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyKSB7Ci0gICAgICAgIG1fY29u
dGV4dC0+cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKGNhbnZhcygpLmJ1ZmZlcigpKTsK
KyAgICAgICAgbV9jb250ZXh0LT5wYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoY2FudmFz
KCktPmJ1ZmZlcigpKTsKIAotICAgICAgICBjYW52YXMoKS5tYWtlUHJlc2VudGF0aW9uQ29weSgp
OworICAgICAgICBjYW52YXMoKS0+bWFrZVByZXNlbnRhdGlvbkNvcHkoKTsKICAgICB9IGVsc2UK
LSAgICAgICAgY2FudmFzKCkuY2xlYXJQcmVzZW50YXRpb25Db3B5KCk7CisgICAgICAgIGNhbnZh
cygpLT5jbGVhclByZXNlbnRhdGlvbkNvcHkoKTsKICAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwog
CiAgICAgaWYgKCFtX21hcmtlZENhbnZhc0RpcnR5ICYmICFtX2xheWVyQ2xlYXJlZCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgY2FudmFzKCkuY2xlYXJDb3BpZWRJbWFnZSgpOworICAgIGNhbnZh
cygpLT5jbGVhckNvcGllZEltYWdlKCk7CiAgICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IGZhbHNl
OwogCi0gICAgbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhjYW52YXMo
KS5idWZmZXIoKSk7CisgICAgbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZh
cyhjYW52YXMoKS0+YnVmZmVyKCkpOwogfQogCiBSZWZQdHI8SW1hZ2VEYXRhPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCkBAIC04
NTQsNyArODcwLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZXNoYXBlKGlu
dCB3aWR0aCwgaW50IGhlaWdodCkKICAgICBoZWlnaHQgPSBjbGFtcChoZWlnaHQsIDEsIG1heEhl
aWdodCk7CiAKICAgICBpZiAobV9uZWVkc1VwZGF0ZSkgewotICAgICAgICBSZW5kZXJCb3gqIHJl
bmRlckJveCA9IGNhbnZhcygpLnJlbmRlckJveCgpOworICAgICAgICBSZW5kZXJCb3gqIHJlbmRl
ckJveCA9IGNhbnZhcygpLT5yZW5kZXJCb3goKTsKICAgICAgICAgaWYgKHJlbmRlckJveCAmJiBy
ZW5kZXJCb3gtPmhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkKICAgICAgICAgICAgIHJlbmRl
ckJveC0+Y29udGVudENoYW5nZWQoQ2FudmFzQ2hhbmdlZCk7CiAgICAgICAgIG1fbmVlZHNVcGRh
dGUgPSBmYWxzZTsKQEAgLTEzMTQsNyArMTMzMCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6Y29tcGlsZVNoYWRlcihXZWJHTFNoYWRlciogc2hhZGVyKQogICAgICAgICBWZWN0
b3I8U3RyaW5nPiBlcnJvcnM7CiAgICAgICAgIGdldFNoYWRlckluZm9Mb2coc2hhZGVyKS5zcGxp
dCgiXG4iLCBlcnJvcnMpOwogICAgICAgICBmb3IgKFN0cmluZyYgZXJyb3IgOiBlcnJvcnMpCi0g
ICAgICAgICAgICBjYW52YXMoKS5kb2N1bWVudCgpLmFkZENvbnNvbGVNZXNzYWdlKHN0ZDo6bWFr
ZV91bmlxdWU8SW5zcGVjdG9yOjpDb25zb2xlTWVzc2FnZT4oTWVzc2FnZVNvdXJjZTo6UmVuZGVy
aW5nLCBNZXNzYWdlVHlwZTo6TG9nLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAiV2ViR0w6ICIgKyBl
cnJvciwgc3RhY2tUcmFjZS5jb3B5UmVmKCkpKTsKKyAgICAgICAgICAgIGNhbnZhcygpLT5kb2N1
bWVudCgpLmFkZENvbnNvbGVNZXNzYWdlKHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9yOjpDb25z
b2xlTWVzc2FnZT4oTWVzc2FnZVNvdXJjZTo6UmVuZGVyaW5nLCBNZXNzYWdlVHlwZTo6TG9nLCBN
ZXNzYWdlTGV2ZWw6OkVycm9yLCAiV2ViR0w6ICIgKyBlcnJvciwgc3RhY2tUcmFjZS5jb3B5UmVm
KCkpKTsKICAgICB9CiB9CiAKQEAgLTI3OTEsNyArMjgwNyw3IEBAIGJvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6aXNDb250ZXh0TG9zdE9yUGVuZGluZygpCiB7CiAgICAgaWYgKG1faXNQ
ZW5kaW5nUG9saWN5UmVzb2x1dGlvbiAmJiAhbV9oYXNSZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0aW9u
KSB7CiAgICAgICAgIExPRyhXZWJHTCwgIkNvbnRleHQgaXMgYmVpbmcgdXNlZC4gQXR0ZW1wdCB0
byByZXNvbHZlIHRoZSBwb2xpY3kuIik7Ci0gICAgICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGNh
bnZhcygpLmRvY3VtZW50KCkudG9wRG9jdW1lbnQoKTsKKyAgICAgICAgRG9jdW1lbnQmIGRvY3Vt
ZW50ID0gY2FudmFzKCktPmRvY3VtZW50KCkudG9wRG9jdW1lbnQoKTsKICAgICAgICAgUGFnZSog
cGFnZSA9IGRvY3VtZW50LnBhZ2UoKTsKICAgICAgICAgaWYgKHBhZ2UgJiYgIWRvY3VtZW50LnVy
bCgpLmlzTG9jYWxGaWxlKCkpCiAgICAgICAgICAgICBwYWdlLT5tYWluRnJhbWUoKS5sb2FkZXIo
KS5jbGllbnQoKS5yZXNvbHZlV2ViR0xQb2xpY3lGb3JVUkwoZG9jdW1lbnQudXJsKCkpOwpAQCAt
MzExNiw3ICszMTMyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZWFkUGl4
ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgKICAgICAgICAgcmV0dXJu
OwogICAgIC8vIER1ZSB0byBXZWJHTCdzIHNhbWUtb3JpZ2luIHJlc3RyaWN0aW9ucywgaXQgaXMg
bm90IHBvc3NpYmxlIHRvCiAgICAgLy8gdGFpbnQgdGhlIG9yaWdpbiB1c2luZyB0aGUgV2ViR0wg
QVBJLgotICAgIEFTU0VSVChjYW52YXMoKS5vcmlnaW5DbGVhbigpKTsKKyAgICBBU1NFUlQoY2Fu
dmFzKCktPm9yaWdpbkNsZWFuKCkpOwogCiAgICAgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQgPSAw
OwogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykgewpAQCAtNDY5MCw3ICs0NzA2LDcgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpsb3NlQ29udGV4dEltcGwoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6TG9zdEMKICAgICBpZiAobW9kZSA9PSBSZWFsTG9zdENvbnRleHQp
IHsKICAgICAgICAgLy8gSW5mb3JtIHRoZSBlbWJlZGRlciB0aGF0IGEgbG9zdCBjb250ZXh0IHdh
cyByZWNlaXZlZC4gSW4gcmVzcG9uc2UsIHRoZSBlbWJlZGRlciBtaWdodAogICAgICAgICAvLyBk
ZWNpZGUgdG8gdGFrZSBhY3Rpb24gc3VjaCBhcyBhc2tpbmcgdGhlIHVzZXIgZm9yIHBlcm1pc3Np
b24gdG8gdXNlIFdlYkdMIGFnYWluLgotICAgICAgICBpZiAoUmVmUHRyPEZyYW1lPiBmcmFtZSA9
IGNhbnZhcygpLmRvY3VtZW50KCkuZnJhbWUoKSkKKyAgICAgICAgaWYgKFJlZlB0cjxGcmFtZT4g
ZnJhbWUgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpKQogICAgICAgICAgICAgZnJhbWUt
PmxvYWRlcigpLmNsaWVudCgpLmRpZExvc2VXZWJHTENvbnRleHQobV9jb250ZXh0LT5nZXRFeHRl
bnNpb25zKCkuZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpKTsKICAgICB9CiAKQEAgLTUzMTQs
NyArNTMzMCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cHJpbnRUb0NvbnNv
bGUoTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmCiAgICAgfSBlbHNlCiAgICAgICAg
IGNvbnNvbGVNZXNzYWdlID0gc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3I6OkNvbnNvbGVNZXNz
YWdlPihNZXNzYWdlU291cmNlOjpSZW5kZXJpbmcsIE1lc3NhZ2VUeXBlOjpMb2csIGxldmVsLCBt
ZXNzYWdlKTsKIAotICAgIGNhbnZhcygpLmRvY3VtZW50KCkuYWRkQ29uc29sZU1lc3NhZ2UoV1RG
TW92ZShjb25zb2xlTWVzc2FnZSkpOworICAgIGNhbnZhcygpLT5kb2N1bWVudCgpLmFkZENvbnNv
bGVNZXNzYWdlKFdURk1vdmUoY29uc29sZU1lc3NhZ2UpKTsKIAogICAgIC0tbV9udW1HTEVycm9y
c1RvQ29uc29sZUFsbG93ZWQ7CiAgICAgaWYgKCFtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dl
ZCkKQEAgLTU2NjAsNyArNTY3Niw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
cmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24oKQogdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpkaXNwYXRjaENvbnRleHRMb3N0RXZlbnQoKQogewogICAgIFJl
ZjxXZWJHTENvbnRleHRFdmVudD4gZXZlbnQgPSBXZWJHTENvbnRleHRFdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRsb3N0RXZlbnQsIGZhbHNlLCB0cnVlLCBlbXB0eVN0cmlu
ZygpKTsKLSAgICBjYW52YXMoKS5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKKyAgICBjYW52YXMoKS0+
ZGlzcGF0Y2hFdmVudChldmVudCk7CiAgICAgbV9yZXN0b3JlQWxsb3dlZCA9IGV2ZW50LT5kZWZh
dWx0UHJldmVudGVkKCk7CiAgICAgaWYgKG1fY29udGV4dExvc3RNb2RlID09IFJlYWxMb3N0Q29u
dGV4dCAmJiBtX3Jlc3RvcmVBbGxvd2VkKQogICAgICAgICBtX3Jlc3RvcmVUaW1lci5zdGFydE9u
ZVNob3QoMF9zKTsKQEAgLTU3MDgsNyArNTcyNCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6bWF5YmVSZXN0b3JlQ29udGV4dCgpCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAot
ICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBjYW52YXMoKS5kb2N1bWVudCgpLmZyYW1lKCk7Cisg
ICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IGNhbnZhcygpLT5kb2N1bWVudCgpLmZyYW1lKCk7CiAg
ICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC01NzQxLDEyICs1NzU3LDEyIEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6bWF5YmVSZXN0b3JlQ29udGV4dCgpCiAg
ICAgc2V0dXBGbGFncygpOwogICAgIGluaXRpYWxpemVOZXdDb250ZXh0KCk7CiAgICAgaW5pdGlh
bGl6ZVZlcnRleEFycmF5T2JqZWN0cygpOwotICAgIGNhbnZhcygpLmRpc3BhdGNoRXZlbnQoV2Vi
R0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0cmVzdG9yZWRF
dmVudCwgZmFsc2UsIHRydWUsIGVtcHR5U3RyaW5nKCkpKTsKKyAgICBjYW52YXMoKS0+ZGlzcGF0
Y2hFdmVudChXZWJHTENvbnRleHRFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRl
eHRyZXN0b3JlZEV2ZW50LCBmYWxzZSwgdHJ1ZSwgZW1wdHlTdHJpbmcoKSkpOwogfQogCiB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRpc3BhdGNoQ29udGV4dENoYW5nZWRFdmVudCgp
CiB7Ci0gICAgY2FudmFzKCkuZGlzcGF0Y2hFdmVudChXZWJHTENvbnRleHRFdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRjaGFuZ2VkRXZlbnQsIGZhbHNlLCB0cnVlLCBlbXB0
eVN0cmluZygpKSk7CisgICAgY2FudmFzKCktPmRpc3BhdGNoRXZlbnQoV2ViR0xDb250ZXh0RXZl
bnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0Y2hhbmdlZEV2ZW50LCBmYWxzZSwg
dHJ1ZSwgZW1wdHlTdHJpbmcoKSkpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnNpbXVsYXRlQ29udGV4dENoYW5nZWQoKQpAQCAtNTg1Niw4ICs1ODcyLDggQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjplbmFibGVPckRpc2FibGUoR0MzRGVudW0gY2FwYWJp
bGl0eSwgYm9vbCBlbmFibGUKIAogSW50U2l6ZSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpj
bGFtcGVkQ2FudmFzU2l6ZSgpCiB7Ci0gICAgcmV0dXJuIEludFNpemUoY2xhbXAoY2FudmFzKCku
d2lkdGgoKSwgMSwgbV9tYXhWaWV3cG9ydERpbXNbMF0pLAotICAgICAgICBjbGFtcChjYW52YXMo
KS5oZWlnaHQoKSwgMSwgbV9tYXhWaWV3cG9ydERpbXNbMV0pKTsKKyAgICByZXR1cm4gSW50U2l6
ZShjbGFtcChjYW52YXMoKS0+d2lkdGgoKSwgMSwgbV9tYXhWaWV3cG9ydERpbXNbMF0pLAorICAg
ICAgICBjbGFtcChjYW52YXMoKS0+aGVpZ2h0KCksIDEsIG1fbWF4Vmlld3BvcnREaW1zWzFdKSk7
CiB9CiAKIEdDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0TWF4RHJhd0J1ZmZl
cnMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5oCmluZGV4IDBlOWM2MjE3MDlmMWEzMGE4MzJhMmM4NDU0NmM0ZWRlY2Yy
ODBiOTYuLjBjZmFhNTJkODkzNTU5NTZiOGY3Y2Q0MWYzODUzOGE5MWEyMDRmZmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlLmgKQEAgLTExNCw5ICsxMTQsMTEgQEAgaW5saW5lIGJvb2wgY2xpcDJEKEdDM0RpbnQgeCwg
R0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCiAKIGNsYXNzIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UgOiBwdWJsaWMgR1BVQmFzZWRDYW52YXNSZW5kZXJpbmdD
b250ZXh0LCBwcml2YXRlIEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlciB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPiBjcmVh
dGUoSFRNTENhbnZhc0VsZW1lbnQmLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzJiwgY29uc3QgU3Ry
aW5nJik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlPiBjcmVhdGUoQ2FudmFzQmFzZSYsIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMmLCBjb25zdCBT
dHJpbmcmKTsKICAgICB2aXJ0dWFsIH5XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKCk7CiAKKyAg
ICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzKCk7CisKICAgICBpbnQgZHJhd2luZ0J1ZmZlcldp
ZHRoKCkgY29uc3Q7CiAgICAgaW50IGRyYXdpbmdCdWZmZXJIZWlnaHQoKSBjb25zdDsKIApAQCAt
Mzc2LDggKzM3OCw4IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEZhaWxO
ZXh0R1BVU3RhdHVzQ2hlY2soKTsKIAogcHJvdGVjdGVkOgotICAgIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UoSFRNTENhbnZhc0VsZW1lbnQmLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzKTsKLSAg
ICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKEhUTUxDYW52YXNFbGVtZW50JiwgUmVmPEdyYXBo
aWNzQ29udGV4dDNEPiYmLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzKTsKKyAgICBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlKENhbnZhc0Jhc2UmLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzKTsKKyAg
ICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKENhbnZhc0Jhc2UmLCBSZWY8R3JhcGhpY3NDb250
ZXh0M0Q+JiYsIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMpOwogCiAgICAgZnJpZW5kIGNsYXNzIFdl
YkdMRHJhd0J1ZmZlcnM7CiAgICAgZnJpZW5kIGNsYXNzIFdlYkdMRnJhbWVidWZmZXI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuaWRsCmluZGV4IGM3Y2EyNWQ4YzVmNGVmMTIwYmI5MDdmMWE3OTdlYmFmMWE5MWNkNDIu
LjdlN2U0MWYzMjEyMTBjMTVhYTQyYzMwMGVlYjFkYWIxNTAxN2Y1YmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaWRsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uu
aWRsCkBAIC01OCw3ICs1OCw2IEBAIHR5cGVkZWYgKEltYWdlRGF0YSBvciBIVE1MSW1hZ2VFbGVt
ZW50IG9yIEhUTUxDYW52YXNFbGVtZW50KSBUZXhJbWFnZVNvdXJjZTsKICAgICBFeHBvcnRNYWNy
bz1XRUJDT1JFX0VYUE9SVCwKIF0gaW50ZXJmYWNlIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Ug
ewogCi0gICAgLy8gYmFjay1yZWZlcmVuY2UgdG8gdGhlIGNhbnZhcwogICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBIVE1MQ2FudmFzRWxlbWVudCBjYW52YXM7CiAKICAgICAvKiBDbGVhckJ1ZmZlck1h
c2sgKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdQVVJlbmRl
cmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR1BVUmVuZGVy
aW5nQ29udGV4dC5jcHAKaW5kZXggNDljNzk2MDM2ZDBiNzRmMWJmODQ4Nzk4NTQ3ZjdmZTMxNWE1
Mzk3NS4uYzA3MzUyMmY1ZjcwYzljYjlkNWQ1MGE0YzlhOTQ1YTFlNGY2YTkxNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR1BVUmVuZGVyaW5nQ29udGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR1BVUmVuZGVyaW5nQ29udGV4dC5j
cHAKQEAgLTcxLDcgKzcxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RhdGljIGNvbnN0IGlu
dCBrTWF4VGV4dHVyZVNpemUgPSA0MDk2OwogCiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJHUFVSZW5k
ZXJpbmdDb250ZXh0PiBXZWJHUFVSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoSFRNTENhbnZhc0Vs
ZW1lbnQmIGNhbnZhcykKK3N0ZDo6dW5pcXVlX3B0cjxXZWJHUFVSZW5kZXJpbmdDb250ZXh0PiBX
ZWJHUFVSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFzKQogewogICAg
IFJlZlB0cjxHUFVEZXZpY2U+IGRldmljZShHUFVEZXZpY2U6OmNyZWF0ZSgpKTsKIApAQCAtODcs
MTMgKzg3LDE4IEBAIHN0ZDo6dW5pcXVlX3B0cjxXZWJHUFVSZW5kZXJpbmdDb250ZXh0PiBXZWJH
UFVSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoSFRNTENhbnZhCiAgICAgcmV0dXJuIHJlbmRlcmlu
Z0NvbnRleHQ7CiB9CiAKLVdlYkdQVVJlbmRlcmluZ0NvbnRleHQ6OldlYkdQVVJlbmRlcmluZ0Nv
bnRleHQoSFRNTENhbnZhc0VsZW1lbnQmIGNhbnZhcywgUmVmPEdQVURldmljZT4mJiBkZXZpY2Up
CitXZWJHUFVSZW5kZXJpbmdDb250ZXh0OjpXZWJHUFVSZW5kZXJpbmdDb250ZXh0KENhbnZhc0Jh
c2UmIGNhbnZhcywgUmVmPEdQVURldmljZT4mJiBkZXZpY2UpCiAgICAgOiBHUFVCYXNlZENhbnZh
c1JlbmRlcmluZ0NvbnRleHQoY2FudmFzKQogICAgICwgbV9kZXZpY2UoV1RGTW92ZShkZXZpY2Up
KQogewogICAgIGluaXRpYWxpemVOZXdDb250ZXh0KCk7CiB9CiAKK0hUTUxDYW52YXNFbGVtZW50
KiBXZWJHUFVSZW5kZXJpbmdDb250ZXh0OjpjYW52YXMoKSBjb25zdAoreworICAgIHJldHVybiBj
YW52YXNCYXNlKCkuYXNIVE1MQ2FudmFzRWxlbWVudCgpOworfQorCiB2b2lkIFdlYkdQVVJlbmRl
cmluZ0NvbnRleHQ6OmluaXRpYWxpemVOZXdDb250ZXh0KCkKIHsKICAgICAvLyBGSVhNRTogV2Vi
R1BVIC0gTWF5YmUgd2Ugc2hvdWxkIHJlc2V0IGEgYnVuY2ggb2Ygc3R1ZmYgaGVyZS4KQEAgLTEw
NCw4ICsxMDksOCBAQCB2b2lkIFdlYkdQVVJlbmRlcmluZ0NvbnRleHQ6OmluaXRpYWxpemVOZXdD
b250ZXh0KCkKIAogSW50U2l6ZSBXZWJHUFVSZW5kZXJpbmdDb250ZXh0OjpjbGFtcGVkQ2FudmFz
U2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEludFNpemUoY2xhbXAoY2FudmFzKCkud2lkdGgo
KSwgMSwga01heFRleHR1cmVTaXplKSwKLSAgICAgICAgY2xhbXAoY2FudmFzKCkuaGVpZ2h0KCks
IDEsIGtNYXhUZXh0dXJlU2l6ZSkpOworICAgIHJldHVybiBJbnRTaXplKGNsYW1wKGNhbnZhcygp
LT53aWR0aCgpLCAxLCBrTWF4VGV4dHVyZVNpemUpLAorICAgICAgICBjbGFtcChjYW52YXMoKS0+
aGVpZ2h0KCksIDEsIGtNYXhUZXh0dXJlU2l6ZSkpOwogfQogCiBib29sIFdlYkdQVVJlbmRlcmlu
Z0NvbnRleHQ6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHUFVSZW5kZXJpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHUFVSZW5kZXJpbmdDb250ZXh0LmgKaW5kZXggOWRlOGEzYTFl
N2Q3MjNmMjM3MTNkZTIyODdmYjE0NWY3MjQ0ZTA3YS4uMThkM2M0MTIwN2YxMWQ2M2U4NTdjNTRi
NTc2OTYyODg4MmUzZjYxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR1BVUmVuZGVyaW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdQVVJlbmRlcmluZ0NvbnRleHQuaApAQCAtNTAsNyArNTAsOSBAQCBjbGFzcyBXZWJHUFVU
ZXh0dXJlRGVzY3JpcHRvcjsKIAogY2xhc3MgV2ViR1BVUmVuZGVyaW5nQ29udGV4dCA6IHB1Ymxp
YyBHUFVCYXNlZENhbnZhc1JlbmRlcmluZ0NvbnRleHQgewogcHVibGljOgotICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8V2ViR1BVUmVuZGVyaW5nQ29udGV4dD4gY3JlYXRlKEhUTUxDYW52YXNF
bGVtZW50Jik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxXZWJHUFVSZW5kZXJpbmdDb250
ZXh0PiBjcmVhdGUoQ2FudmFzQmFzZSYpOworCisgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZh
cygpIGNvbnN0OwogCiAgICAgYm9vbCBpc1dlYkdQVSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRy
dWU7IH0KIApAQCAtOTEsNyArOTMsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBpbml0aWFsaXpl
TmV3Q29udGV4dCgpOwogCiBwcml2YXRlOgotICAgIFdlYkdQVVJlbmRlcmluZ0NvbnRleHQoSFRN
TENhbnZhc0VsZW1lbnQmLCBSZWY8R1BVRGV2aWNlPiYmKTsKKyAgICBXZWJHUFVSZW5kZXJpbmdD
b250ZXh0KENhbnZhc0Jhc2UmLCBSZWY8R1BVRGV2aWNlPiYmKTsKIAogICAgIFJlZlB0cjxHUFVE
ZXZpY2U+IG1fZGV2aWNlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaAppbmRleCBmODQ2YjBhZDVlODVhMzk5YmFiNzQyZDhh
NTQ5Y2Y2MjBjNmQ4OWUxLi45MjNlOWZjN2QzZGYyZDUyOGY4MTIyZDFjYTI0YTViOGRhMDRiN2M5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1l
bnRhdGlvbi5oCkBAIC0xMjM2LDggKzEyMzYsMTEgQEAgaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRDaGFuZ2VDYW52YXNNZW1vcnkoSFRNTENhbnZhc0VsZW1lbnQmIGMK
IGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cmVjb3JkQ2FudmFzQWN0aW9u
KENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNhbnZhc1JlbmRlcmluZ0NvbnRleHQsIGNvbnN0IFN0
cmluZyYgbmFtZSwgVmVjdG9yPFJlY29yZENhbnZhc0FjdGlvblZhcmlhbnQ+JiYgcGFyYW1ldGVy
cykKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAo
SW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdB
Z2VudHNGb3JEb2N1bWVudCgmY2FudmFzUmVuZGVyaW5nQ29udGV4dC5jYW52YXMoKS5kb2N1bWVu
dCgpKSkKLSAgICAgICAgcmVjb3JkQ2FudmFzQWN0aW9uSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50
cywgY2FudmFzUmVuZGVyaW5nQ29udGV4dCwgbmFtZSwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Cisg
ICAgYXV0byogY2FudmFzRWxlbWVudCA9IGNhbnZhc1JlbmRlcmluZ0NvbnRleHQuY2FudmFzQmFz
ZSgpLmFzSFRNTENhbnZhc0VsZW1lbnQoKTsKKyAgICBpZiAoY2FudmFzRWxlbWVudCkgeworICAg
ICAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3Ry
dW1lbnRpbmdBZ2VudHNGb3JEb2N1bWVudCgmY2FudmFzRWxlbWVudC0+ZG9jdW1lbnQoKSkpCisg
ICAgICAgICAgICByZWNvcmRDYW52YXNBY3Rpb25JbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBj
YW52YXNSZW5kZXJpbmdDb250ZXh0LCBuYW1lLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICB9
CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRmluaXNoUmVj
b3JkaW5nQ2FudmFzRnJhbWUoSFRNTENhbnZhc0VsZW1lbnQmIGNhbnZhc0VsZW1lbnQsIGJvb2wg
Zm9yY2VEaXNwYXRjaCkKQEAgLTEyNTEsMjcgKzEyNTQsMzYgQEAgaW5saW5lIHZvaWQgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRGaW5pc2hSZWNvcmRpbmdDYW52YXNGcmFtZShIVE1MQ2Fu
dmFzRWwKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRW5hYmxlRXh0
ZW5zaW9uKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYg
ZXh0ZW5zaW9uKQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwot
ICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1
bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KGNvbnRleHQuY2FudmFzKCkuZG9jdW1lbnQoKSkpCi0g
ICAgICAgIGRpZEVuYWJsZUV4dGVuc2lvbkltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGNvbnRl
eHQsIGV4dGVuc2lvbik7CisKKyAgICBpZiAoYXV0byogY2FudmFzRWxlbWVudCA9IGNvbnRleHQu
Y2FudmFzKCkpIHsKKyAgICAgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRp
bmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRG9jdW1lbnQoY2FudmFzRWxlbWVudC0+
ZG9jdW1lbnQoKSkpCisgICAgICAgICAgICBkaWRFbmFibGVFeHRlbnNpb25JbXBsKCppbnN0cnVt
ZW50aW5nQWdlbnRzLCBjb250ZXh0LCBleHRlbnNpb24pOworICAgIH0KIH0KIAogaW5saW5lIHZv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDcmVhdGVQcm9ncmFtKFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UmIGNvbnRleHQsIFdlYkdMUHJvZ3JhbSYgcHJvZ3JhbSkKIHsKLSAgICBp
ZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRp
bmdBZ2VudHNGb3JEb2N1bWVudChjb250ZXh0LmNhbnZhcygpLmRvY3VtZW50KCkpKQotICAgICAg
ICBkaWRDcmVhdGVQcm9ncmFtSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgY29udGV4dCwgcHJv
Z3JhbSk7CisgICAgaWYgKGF1dG8qIGNhbnZhc0VsZW1lbnQgPSBjb250ZXh0LmNhbnZhcygpKSB7
CisgICAgICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0g
aW5zdHJ1bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KGNhbnZhc0VsZW1lbnQtPmRvY3VtZW50KCkp
KQorICAgICAgICAgICAgZGlkQ3JlYXRlUHJvZ3JhbUltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMs
IGNvbnRleHQsIHByb2dyYW0pOworICAgIH0KIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjp3aWxsRGVsZXRlUHJvZ3JhbShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
JiBjb250ZXh0LCBXZWJHTFByb2dyYW0mIHByb2dyYW0pCiB7Ci0gICAgaWYgKEluc3RydW1lbnRp
bmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRG9j
dW1lbnQoY29udGV4dC5jYW52YXMoKS5kb2N1bWVudCgpKSkKLSAgICAgICAgd2lsbERlbGV0ZVBy
b2dyYW1JbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBwcm9ncmFtKTsKKyAgICBpZiAoYXV0byog
Y2FudmFzRWxlbWVudCA9IGNvbnRleHQuY2FudmFzKCkpIHsKKyAgICAgICAgaWYgKEluc3RydW1l
bnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9y
RG9jdW1lbnQoY2FudmFzRWxlbWVudC0+ZG9jdW1lbnQoKSkpCisgICAgICAgICAgICB3aWxsRGVs
ZXRlUHJvZ3JhbUltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIHByb2dyYW0pOworICAgIH0KIH0K
IAogaW5saW5lIGJvb2wgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppc1NoYWRlclByb2dyYW1E
aXNhYmxlZChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0LCBXZWJHTFByb2dyYW0m
IHByb2dyYW0pCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKGZhbHNlKTsKLSAg
ICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1l
bnRpbmdBZ2VudHNGb3JEb2N1bWVudChjb250ZXh0LmNhbnZhcygpLmRvY3VtZW50KCkpKQotICAg
ICAgICByZXR1cm4gaXNTaGFkZXJQcm9ncmFtRGlzYWJsZWRJbXBsKCppbnN0cnVtZW50aW5nQWdl
bnRzLCBwcm9ncmFtKTsKKyAgICBpZiAoYXV0byogY2FudmFzRWxlbWVudCA9IGNvbnRleHQuY2Fu
dmFzKCkpIHsKKyAgICAgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdB
Z2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRG9jdW1lbnQoY2FudmFzRWxlbWVudC0+ZG9j
dW1lbnQoKSkpCisgICAgICAgICAgICByZXR1cm4gaXNTaGFkZXJQcm9ncmFtRGlzYWJsZWRJbXBs
KCppbnN0cnVtZW50aW5nQWdlbnRzLCBwcm9ncmFtKTsKKyAgICB9CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckNhbnZhc0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwCmluZGV4IGQxN2Y1NmNhMDBlMjE2YTRhZjU4Njc3
NWZhYTQ5NTQzMmYzN2FmODUuLjQ4ODlmYjM0ZjVhYjc1MzMyNmUwNDM1YjZmNDExN2Q2MzgxODE1
MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
Q2FudmFzQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yQ2FudmFzQWdlbnQuY3BwCkBAIC00MjUsOSArNDI1LDExIEBAIHZvaWQgSW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OmRpZENoYW5nZUNhbnZhc01lbW9yeShIVE1MQ2FudmFzRWxlbWVudCYgY2Fu
dmFzRWxlbWVuCiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlY29yZENhbnZhc0FjdGlv
bihDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjYW52YXNSZW5kZXJpbmdDb250ZXh0LCBjb25zdCBT
dHJpbmcmIG5hbWUsIFZlY3RvcjxSZWNvcmRDYW52YXNBY3Rpb25WYXJpYW50PiYmIHBhcmFtZXRl
cnMpCiB7Ci0gICAgSFRNTENhbnZhc0VsZW1lbnQmIGNhbnZhc0VsZW1lbnQgPSBjYW52YXNSZW5k
ZXJpbmdDb250ZXh0LmNhbnZhcygpOworICAgIGF1dG8qIGNhbnZhc0VsZW1lbnQgPSBjYW52YXNS
ZW5kZXJpbmdDb250ZXh0LmNhbnZhc0Jhc2UoKS5hc0hUTUxDYW52YXNFbGVtZW50KCk7CisgICAg
aWYgKCFjYW52YXNFbGVtZW50KQorICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvKiBpbnNwZWN0
b3JDYW52YXMgPSBmaW5kSW5zcGVjdG9yQ2FudmFzKGNhbnZhc0VsZW1lbnQpOworICAgIGF1dG8q
IGluc3BlY3RvckNhbnZhcyA9IGZpbmRJbnNwZWN0b3JDYW52YXMoKmNhbnZhc0VsZW1lbnQpOwog
ICAgIEFTU0VSVChpbnNwZWN0b3JDYW52YXMpOwogICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKQog
ICAgICAgICByZXR1cm47CkBAIC00NDIsNyArNDQ0LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNB
Z2VudDo6cmVjb3JkQ2FudmFzQWN0aW9uKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNhbnZhc1Jl
bmQKICAgICAgICAgbV9jYW52YXNSZWNvcmRpbmdUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKIAog
ICAgIGlmICghaW5zcGVjdG9yQ2FudmFzLT5oYXNCdWZmZXJTcGFjZSgpKQotICAgICAgICBkaWRG
aW5pc2hSZWNvcmRpbmdDYW52YXNGcmFtZShjYW52YXNFbGVtZW50LCB0cnVlKTsKKyAgICAgICAg
ZGlkRmluaXNoUmVjb3JkaW5nQ2FudmFzRnJhbWUoKmNhbnZhc0VsZW1lbnQsIHRydWUpOwogfQog
CiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpjYW52YXNEZXN0cm95ZWQoSFRNTENhbnZhc0Vs
ZW1lbnQmIGNhbnZhc0VsZW1lbnQpCkBAIC01MjUsNyArNTI3LDcgQEAgdm9pZCBJbnNwZWN0b3JD
YW52YXNBZ2VudDo6ZGlkRmluaXNoUmVjb3JkaW5nQ2FudmFzRnJhbWUoSFRNTENhbnZhc0VsZW1l
bnQmIGNhbnYKICNpZiBFTkFCTEUoV0VCR0wpCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojpk
aWRFbmFibGVFeHRlbnNpb24oV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCwgY29u
c3QgU3RyaW5nJiBleHRlbnNpb24pCiB7Ci0gICAgYXV0byogaW5zcGVjdG9yQ2FudmFzID0gZmlu
ZEluc3BlY3RvckNhbnZhcyhjb250ZXh0LmNhbnZhcygpKTsKKyAgICBhdXRvKiBpbnNwZWN0b3JD
YW52YXMgPSBmaW5kSW5zcGVjdG9yQ2FudmFzKCpjb250ZXh0LmNhbnZhcygpKTsKICAgICBpZiAo
IWluc3BlY3RvckNhbnZhcykKICAgICAgICAgcmV0dXJuOwogCkBAIC01MzQsNyArNTM2LDcgQEAg
dm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlkRW5hYmxlRXh0ZW5zaW9uKFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UmIGNvbnRleHQKIAogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlk
Q3JlYXRlUHJvZ3JhbShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0LCBXZWJHTFBy
b2dyYW0mIHByb2dyYW0pCiB7Ci0gICAgYXV0byogaW5zcGVjdG9yQ2FudmFzID0gZmluZEluc3Bl
Y3RvckNhbnZhcyhjb250ZXh0LmNhbnZhcygpKTsKKyAgICBhdXRvKiBpbnNwZWN0b3JDYW52YXMg
PSBmaW5kSW5zcGVjdG9yQ2FudmFzKCpjb250ZXh0LmNhbnZhcygpKTsKICAgICBBU1NFUlQoaW5z
cGVjdG9yQ2FudmFzKTsKICAgICBpZiAoIWluc3BlY3RvckNhbnZhcykKICAgICAgICAgcmV0dXJu
Owo=
</data>
<flag name="review"
          id="346196"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>