<?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>202704</bug_id>
          
          <creation_ts>2019-10-08 13:36:51 -0700</creation_ts>
          <short_desc>Web Inspector: notify inspector when provisional page is created, committed and destroyed</short_desc>
          <delta_ts>2019-11-07 09:53:59 -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>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>203262</dependson>
          <blocked>202219</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yury Semikhatsky">yurys</reporter>
          <assigned_to name="Yury Semikhatsky">yurys</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tsavell</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1577918</commentid>
    <comment_count>0</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2019-10-08 13:36:51 -0700</bug_when>
    <thetext>This is first step to attaching to provisional pages early during process swap on navigation (PSON). New (provisional) target should be created for provisional pages so that inspector front-end can start inspecting it earlier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1577970</commentid>
    <comment_count>1</comment_count>
      <attachid>380469</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2019-10-08 15:03:50 -0700</bug_when>
    <thetext>Created attachment 380469
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1577971</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-10-08 15:04:25 -0700</bug_when>
    <thetext>This patch modifies the inspector protocol. Please ensure that any frontend changes appropriately use feature checks for new protocol features.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578019</commentid>
    <comment_count>3</comment_count>
      <attachid>380480</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2019-10-08 16:57:45 -0700</bug_when>
    <thetext>Created attachment 380480
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578316</commentid>
    <comment_count>4</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2019-10-09 11:43:17 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=379967&amp;action=review

&gt;&gt;&gt;&gt;&gt;&gt;&gt; Source/WebKit/WebProcess/WebPage/WebPageInspectorTargetFrontendChannel.h:41
&gt;&gt;&gt;&gt;&gt;&gt;&gt; +    ~WebPageInspectorTargetFrontendChannel() override = default;
&gt;&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt;&gt; `virtual ~WebPageInspectorTargetFrontendChannel() = default;`
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; Why? It overrides virtual destructor in its superclass.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; We have never done this anywhere in WebKit.  It&apos;s also a bit weird, because this doesn&apos;t &quot;technically&quot; override the destructor, as the super class&apos; destructor will still get called.
&gt;&gt;&gt; 
&gt;&gt;&gt; Well, overriding method in general is free to call super class&apos;s implementation I don&apos;t see any issues with that.
&gt;&gt;&gt; 
&gt;&gt;&gt; Here is an excerpt from the WebKit style guide (https://webkit.org/code-style-guidelines/#override-methods) which clearly says that overriding methods should be annotated as either override or final:
&gt;&gt;&gt;  &quot;All subclasses of that class must either specify the override keyword when overriding the virtual method or the final keyword when overriding the virtual method and requiring that no further subclasses can override it.&quot;
&gt;&gt;&gt; 
&gt;&gt;&gt; I believe the reason there is still a lot of code that violates the rule is that they predate c++11 usage in WebKit and nobody bothered updating them. Maybe worth bringing this up on webkit-dev. Annotating the destructor with override protects against a nasty error when super destructor accidentally not not marked as virtual but the clients try to destroy the object using its superclass interface.
&gt;&gt; 
&gt;&gt; That may be the case, but for now I&apos;d ask you to use `virtual`, as it seems like that&apos;s what we use everywhere else in WebKit.  Personally, I would also argue that constructors and destructors are considered a different &quot;type&quot; of method than other member functions, so that affects my stance on this too.  Feel free to broach the subject on webkit-dev.
&gt; 
&gt; Raised this on webkit-dev, let&apos;s discuss there and I&apos;ll update the patch to follow the conclusion.

Would be nice if you posted your arguments over there. I don&apos;t see enough interest from the community in fixing this, I also don&apos;t want this to be a blocker, so changing to
 virtual ~WebPageInspectorTargetFrontendChannel() = default;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578318</commentid>
    <comment_count>5</comment_count>
      <attachid>380548</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2019-10-09 11:45:44 -0700</bug_when>
    <thetext>Created attachment 380548
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578320</commentid>
    <comment_count>6</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2019-10-09 11:47:27 -0700</bug_when>
    <thetext>(In reply to Yury Semikhatsky from comment #5)
&gt; Created attachment 380548 [details]
&gt; Patch

Fixed compilation error on Apple platforms:

/Volumes/Data/worker/macOS-High-Sierra-Release-Build-EWS/build/Source/WebKit/UIProcess/API/APIWebAuthenticationPanel.cpp:41:7: error: no matching constructor for initialization of &apos;WTF::String&apos;
    : m_rpId(rpId)
      ^      ~~~~

Unrelated to this patch but somehow triggered through transitive dependencies and unified build I believe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1579334</commentid>
    <comment_count>7</comment_count>
      <attachid>380469</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-10-11 17:26:53 -0700</bug_when>
    <thetext>Comment on attachment 380469
Patch

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

This is looking really good!  I&apos;d like to read it over again to make sure I&apos;m really understanding it, but I think we&apos;re basically there (minus the build failures) :)

&gt; Source/JavaScriptCore/inspector/InspectorTarget.h:51
&gt; +    virtual String previousTargetID() const { return String(); }

Style: we normally use &quot;Id&quot;, not &quot;ID&quot;

&gt; Source/JavaScriptCore/inspector/agents/InspectorTargetAgent.cpp:106
&gt; +        result-&gt;setPreviousTargetId(target.previousTargetID());

We should only bother sending this to the frontend when the frontend actually needs it, which is in `Target.event.didCommitProvisionalTarget`.  Otherwise, we&apos;re wasting bandwidth.

I know we discussed this in &lt;https://webkit.org/b/202219&gt;, but I&apos;d prefer you keep it as a parameter on `Target.event.didCommitProvisionalTarget` so it&apos;s clearer where it&apos;s actually used, rather than an optional parameter that may always be set.

&gt; Source/JavaScriptCore/inspector/agents/InspectorTargetAgent.cpp:146
&gt; +    targetInfo-&gt;setPreviousTargetId(oldTargetID);

Will `oldTargetId` ever be different from `target.previousTargetID()`?  You&apos;re overriding the call to `setPreviousTargetId` in `buildTargetInfoObject`, which is odd.

&gt; Source/WebCore/inspector/InspectorController.cpp:347
&gt;  void InspectorController::setIsUnderTest(bool value)

I thought you were going to move this to &apos;InspectorController.h&apos;?

&gt; Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js:144
&gt; +        this._provisionalTargetIds.delete(targetInfo.targetId);

NIT: I&apos;d move this above the `targetCreated` call so we can add a `console.assert(!this._provisionalTargetIds.has(targetInfo.targetId));` inside `targetCreated`

&gt; Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js:297
&gt; +            if (WI.quickConsole)
&gt; +                WI.quickConsole.initializeMainExecutionContextPathComponent();

This is a layering violation.  `WI.quickConsole` is a view object, whereas this is in the model/controller layer.  Also, this won&apos;t exist for tests, so we probably should avoid even making references to it.

Thinking more about this, given how much these functions touch other managers and global state, perhaps it was better to keep it inside &apos;Main.js&apos; and just duplicate it inside &apos;Test.js&apos;.  I&apos;m fine with either approach (minus the layering violation), so I&apos;ll leave the choice up to you.

&gt; Source/WebInspectorUI/UserInterface/Protocol/Target.js:208
&gt; +    isDestroyed()

Style: we can make this into a one-line getter
```
    get isDestroyed() { return this._isDestroyed; }
```

&gt; Source/WebInspectorUI/UserInterface/Protocol/TargetObserver.js:29
&gt; +    constructor()

This isn&apos;t needed

&gt; Source/WebKit/UIProcess/InspectorTargetProxy.cpp:100
&gt; +    return !!m_provisionalPage;

You should be able to drop the `!!`.

&gt; Source/WebKit/UIProcess/InspectorTargetProxy.cpp:103
&gt; +String InspectorTargetProxy::previousTargetID() const

So if I understand correctly, the `provisionalPageProxy.webPageID()` is the &quot;current&quot; target, and the `provisionalPageProxy.page().webPageID()` is the &quot;previous&quot; target?  As I mentioned earlier (InspectorTargetAgent.cpp:145), will this ever be different than the `oldTargetId` that&apos;s given to `InspectorTargetAgent::didCommitProvisionalTarget`?

&gt; Source/WebKit/UIProcess/WebPageInspectorController.cpp:44
&gt; +static String getTargetID(const ProvisionalPageProxy&amp; provisionalPage)

This is only used twice, so I think we should just inline this in both places.  It&apos;s fairly straightforward anyways.

&gt; Source/WebKit/UIProcess/WebPageInspectorController.cpp:-46
&gt; -    auto targetAgent = makeUnique&lt;WebPageInspectorTargetAgent&gt;(m_frontendRouter.get(), m_backendDispatcher.get());

I think we can delay the creation of `m_targetAgent` until inside `WebPageInspectorController::init`.  It&apos;s probably not that big of a difference since we create the `WebPageInspectorController` in the same function as we call `WebPageInspectorController::init `, but it can&apos;t hurt.

&gt; Source/WebKit/UIProcess/WebPageInspectorController.cpp:191
&gt; +    // FIXME: do not destroy targets that belong to the committed page.

Please make a bug for this and include it&apos;s URL here

&gt; LayoutTests/http/tests/inspector/target/target-events-for-provisional-page.html:18
&gt; +            TargetAgent.dispatcher = new Proxy(TargetAgent.dispatcher, {

I&apos;m a bit confused as to why you can&apos;t use a protocol test for this.  It seems like all you really need to do is check the event payloads, and not necessarily do much else.  Can you explain why we can&apos;t use a protocol test?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1579336</commentid>
    <comment_count>8</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-10-11 17:27:42 -0700</bug_when>
    <thetext>(In reply to Devin Rousso from comment #7)
&gt; This is looking really good!  I&apos;d like to read it over again to make sure I&apos;m really understanding it, but I think we&apos;re basically there (minus the build failures) :)
I think I was looking at an outdated run, because there are no more build failures :P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1579708</commentid>
    <comment_count>9</comment_count>
      <attachid>380469</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2019-10-14 11:16:30 -0700</bug_when>
    <thetext>Comment on attachment 380469
Patch

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

&gt;&gt; Source/JavaScriptCore/inspector/InspectorTarget.h:51
&gt;&gt; +    virtual String previousTargetID() const { return String(); }
&gt; 
&gt; Style: we normally use &quot;Id&quot;, not &quot;ID&quot;

From WebKit style guide (https://webkit.org/code-style-guidelines/#names-basic): &quot;Capitalize the first letter, including all letters in an acronym&quot;. Look for ID in WebPageProxy for example. I believe there is some divergence from that rule in front-end code where &apos;Id&apos; is used more often but in C++ the rule is unambiguous.

&gt;&gt; Source/JavaScriptCore/inspector/agents/InspectorTargetAgent.cpp:106
&gt;&gt; +        result-&gt;setPreviousTargetId(target.previousTargetID());
&gt; 
&gt; We should only bother sending this to the frontend when the frontend actually needs it, which is in `Target.event.didCommitProvisionalTarget`.  Otherwise, we&apos;re wasting bandwidth.
&gt; 
&gt; I know we discussed this in &lt;https://webkit.org/b/202219&gt;, but I&apos;d prefer you keep it as a parameter on `Target.event.didCommitProvisionalTarget` so it&apos;s clearer where it&apos;s actually used, rather than an optional parameter that may always be set.

This event is sent only once per target life cycle events, it won&apos;t save you anything. If bandwidth is a concern there are better ways to improve it than doing premature optimizations.

The reason I want to have it here is that once client attaches to the backend and requests all existing targets it will have to learn which of the targets are provisional and for what parent pages. So this data structure actually describes current state of a target. Or do you suggest I add them as a separate parameter to each of targetCreated and didCommitProvisionalTarget be events? What are we saving then?

&gt;&gt; Source/JavaScriptCore/inspector/agents/InspectorTargetAgent.cpp:146
&gt;&gt; +    targetInfo-&gt;setPreviousTargetId(oldTargetID);
&gt; 
&gt; Will `oldTargetId` ever be different from `target.previousTargetID()`?  You&apos;re overriding the call to `setPreviousTargetId` in `buildTargetInfoObject`, which is odd.

By this time target.previousTargetID has already been cleared as the target is committed. Alternatively, we could store a copy of previousTargetID after the commit. I didn&apos;t quite like that but if you think it&apos;d be better I can ad InspectedTargetProxy::m_previousTargetID. I&apos;m open to suggestions.

&gt;&gt; Source/WebCore/inspector/InspectorController.cpp:347
&gt;&gt;  void InspectorController::setIsUnderTest(bool value)
&gt; 
&gt; I thought you were going to move this to &apos;InspectorController.h&apos;?

Hmm, in my local state it is in the header. Probably I haven&apos;t uploaded the most recent version. Done.

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js:144
&gt;&gt; +        this._provisionalTargetIds.delete(targetInfo.targetId);
&gt; 
&gt; NIT: I&apos;d move this above the `targetCreated` call so we can add a `console.assert(!this._provisionalTargetIds.has(targetInfo.targetId));` inside `targetCreated`

Done.

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js:297
&gt;&gt; +                WI.quickConsole.initializeMainExecutionContextPathComponent();
&gt; 
&gt; This is a layering violation.  `WI.quickConsole` is a view object, whereas this is in the model/controller layer.  Also, this won&apos;t exist for tests, so we probably should avoid even making references to it.
&gt; 
&gt; Thinking more about this, given how much these functions touch other managers and global state, perhaps it was better to keep it inside &apos;Main.js&apos; and just duplicate it inside &apos;Test.js&apos;.  I&apos;m fine with either approach (minus the layering violation), so I&apos;ll leave the choice up to you.

Done. Moved the code to a listener in QuickConsole. I think it&apos;s a positive change to reduce code duplication between the Test.js and Main.js. As a next step these methods can be turned into listeners of the target manager. I&apos;d much rather do it in a separate change to keep this one focused on the primary goal.

&gt;&gt; Source/WebInspectorUI/UserInterface/Protocol/Target.js:208
&gt;&gt; +    isDestroyed()
&gt; 
&gt; Style: we can make this into a one-line getter
&gt; ```
&gt;     get isDestroyed() { return this._isDestroyed; }
&gt; ```

Done.

&gt;&gt; Source/WebInspectorUI/UserInterface/Protocol/TargetObserver.js:29
&gt;&gt; +    constructor()
&gt; 
&gt; This isn&apos;t needed

Removed.

&gt;&gt; Source/WebKit/UIProcess/InspectorTargetProxy.cpp:100
&gt;&gt; +    return !!m_provisionalPage;
&gt; 
&gt; You should be able to drop the `!!`.

bool() operator on WeakPtr is explicit, so it&apos;d cause compilation error.

&gt;&gt; Source/WebKit/UIProcess/InspectorTargetProxy.cpp:103
&gt;&gt; +String InspectorTargetProxy::previousTargetID() const
&gt; 
&gt; So if I understand correctly, the `provisionalPageProxy.webPageID()` is the &quot;current&quot; target, and the `provisionalPageProxy.page().webPageID()` is the &quot;previous&quot; target?  As I mentioned earlier (InspectorTargetAgent.cpp:145), will this ever be different than the `oldTargetId` that&apos;s given to `InspectorTargetAgent::didCommitProvisionalTarget`?

After commit provisional page becomes current page and the old page id is overwritten.

&gt;&gt; Source/WebKit/UIProcess/WebPageInspectorController.cpp:44
&gt;&gt; +static String getTargetID(const ProvisionalPageProxy&amp; provisionalPage)
&gt; 
&gt; This is only used twice, so I think we should just inline this in both places.  It&apos;s fairly straightforward anyways.

In addition to reducing code duplication it makes the call sites much shorter and more readable so I&apos;d rather leave it this way.

&gt;&gt; Source/WebKit/UIProcess/WebPageInspectorController.cpp:-46
&gt;&gt; -    auto targetAgent = makeUnique&lt;WebPageInspectorTargetAgent&gt;(m_frontendRouter.get(), m_backendDispatcher.get());
&gt; 
&gt; I think we can delay the creation of `m_targetAgent` until inside `WebPageInspectorController::init`.  It&apos;s probably not that big of a difference since we create the `WebPageInspectorController` in the same function as we call `WebPageInspectorController::init `, but it can&apos;t hurt.

Done.

&gt;&gt; Source/WebKit/UIProcess/WebPageInspectorController.cpp:191
&gt;&gt; +    // FIXME: do not destroy targets that belong to the committed page.
&gt; 
&gt; Please make a bug for this and include it&apos;s URL here

Filed webtkit.org/b/202937

&gt;&gt; LayoutTests/http/tests/inspector/target/target-events-for-provisional-page.html:18
&gt;&gt; +            TargetAgent.dispatcher = new Proxy(TargetAgent.dispatcher, {
&gt; 
&gt; I&apos;m a bit confused as to why you can&apos;t use a protocol test for this.  It seems like all you really need to do is check the event payloads, and not necessarily do much else.  Can you explain why we can&apos;t use a protocol test?

Protocol tests use a shortcut when connecting to the inspected page: they are opened in a dummy front-end page (openDummyInspectorFrontend) and all messages are routed directly between the two pages.
From the inspected page to front-end via window.postMessage and via
InspectorFrontendClientLocal::sendMessageToBackend in the reverse direction.
These messages don&apos;t utilize Target domain at all and my goal is to test Target domain.


This is why I say it&apos;d be nice to get rid of the dummy inspector front-end altogether and host protocol tests&apos; front-end in the same inspector window as inspector UI tests. It would route all messages through the UIProcess and its target agent in case of WK2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1579709</commentid>
    <comment_count>10</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2019-10-14 11:16:34 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=380469&amp;action=review

&gt;&gt; Source/JavaScriptCore/inspector/InspectorTarget.h:51
&gt;&gt; +    virtual String previousTargetID() const { return String(); }
&gt; 
&gt; Style: we normally use &quot;Id&quot;, not &quot;ID&quot;

From WebKit style guide (https://webkit.org/code-style-guidelines/#names-basic): &quot;Capitalize the first letter, including all letters in an acronym&quot;. Look for ID in WebPageProxy for example. I believe there is some divergence from that rule in front-end code where &apos;Id&apos; is used more often but in C++ the rule is unambiguous.

&gt;&gt; Source/JavaScriptCore/inspector/agents/InspectorTargetAgent.cpp:106
&gt;&gt; +        result-&gt;setPreviousTargetId(target.previousTargetID());
&gt; 
&gt; We should only bother sending this to the frontend when the frontend actually needs it, which is in `Target.event.didCommitProvisionalTarget`.  Otherwise, we&apos;re wasting bandwidth.
&gt; 
&gt; I know we discussed this in &lt;https://webkit.org/b/202219&gt;, but I&apos;d prefer you keep it as a parameter on `Target.event.didCommitProvisionalTarget` so it&apos;s clearer where it&apos;s actually used, rather than an optional parameter that may always be set.

This event is sent only once per target life cycle events, it won&apos;t save you anything. If bandwidth is a concern there are better ways to improve it than doing premature optimizations.

The reason I want to have it here is that once client attaches to the backend and requests all existing targets it will have to learn which of the targets are provisional and for what parent pages. So this data structure actually describes current state of a target. Or do you suggest I add them as a separate parameter to each of targetCreated and didCommitProvisionalTarget be events? What are we saving then?

&gt;&gt; Source/JavaScriptCore/inspector/agents/InspectorTargetAgent.cpp:146
&gt;&gt; +    targetInfo-&gt;setPreviousTargetId(oldTargetID);
&gt; 
&gt; Will `oldTargetId` ever be different from `target.previousTargetID()`?  You&apos;re overriding the call to `setPreviousTargetId` in `buildTargetInfoObject`, which is odd.

By this time target.previousTargetID has already been cleared as the target is committed. Alternatively, we could store a copy of previousTargetID after the commit. I didn&apos;t quite like that but if you think it&apos;d be better I can ad InspectedTargetProxy::m_previousTargetID. I&apos;m open to suggestions.

&gt;&gt; Source/WebCore/inspector/InspectorController.cpp:347
&gt;&gt;  void InspectorController::setIsUnderTest(bool value)
&gt; 
&gt; I thought you were going to move this to &apos;InspectorController.h&apos;?

Hmm, in my local state it is in the header. Probably I haven&apos;t uploaded the most recent version. Done.

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js:144
&gt;&gt; +        this._provisionalTargetIds.delete(targetInfo.targetId);
&gt; 
&gt; NIT: I&apos;d move this above the `targetCreated` call so we can add a `console.assert(!this._provisionalTargetIds.has(targetInfo.targetId));` inside `targetCreated`

Done.

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js:297
&gt;&gt; +                WI.quickConsole.initializeMainExecutionContextPathComponent();
&gt; 
&gt; This is a layering violation.  `WI.quickConsole` is a view object, whereas this is in the model/controller layer.  Also, this won&apos;t exist for tests, so we probably should avoid even making references to it.
&gt; 
&gt; Thinking more about this, given how much these functions touch other managers and global state, perhaps it was better to keep it inside &apos;Main.js&apos; and just duplicate it inside &apos;Test.js&apos;.  I&apos;m fine with either approach (minus the layering violation), so I&apos;ll leave the choice up to you.

Done. Moved the code to a listener in QuickConsole. I think it&apos;s a positive change to reduce code duplication between the Test.js and Main.js. As a next step these methods can be turned into listeners of the target manager. I&apos;d much rather do it in a separate change to keep this one focused on the primary goal.

&gt;&gt; Source/WebInspectorUI/UserInterface/Protocol/Target.js:208
&gt;&gt; +    isDestroyed()
&gt; 
&gt; Style: we can make this into a one-line getter
&gt; ```
&gt;     get isDestroyed() { return this._isDestroyed; }
&gt; ```

Done.

&gt;&gt; Source/WebInspectorUI/UserInterface/Protocol/TargetObserver.js:29
&gt;&gt; +    constructor()
&gt; 
&gt; This isn&apos;t needed

Removed.

&gt;&gt; Source/WebKit/UIProcess/InspectorTargetProxy.cpp:100
&gt;&gt; +    return !!m_provisionalPage;
&gt; 
&gt; You should be able to drop the `!!`.

bool() operator on WeakPtr is explicit, so it&apos;d cause compilation error.

&gt;&gt; Source/WebKit/UIProcess/InspectorTargetProxy.cpp:103
&gt;&gt; +String InspectorTargetProxy::previousTargetID() const
&gt; 
&gt; So if I understand correctly, the `provisionalPageProxy.webPageID()` is the &quot;current&quot; target, and the `provisionalPageProxy.page().webPageID()` is the &quot;previous&quot; target?  As I mentioned earlier (InspectorTargetAgent.cpp:145), will this ever be different than the `oldTargetId` that&apos;s given to `InspectorTargetAgent::didCommitProvisionalTarget`?

After commit provisional page becomes current page and the old page id is overwritten.

&gt;&gt; Source/WebKit/UIProcess/WebPageInspectorController.cpp:44
&gt;&gt; +static String getTargetID(const ProvisionalPageProxy&amp; provisionalPage)
&gt; 
&gt; This is only used twice, so I think we should just inline this in both places.  It&apos;s fairly straightforward anyways.

In addition to reducing code duplication it makes the call sites much shorter and more readable so I&apos;d rather leave it this way.

&gt;&gt; Source/WebKit/UIProcess/WebPageInspectorController.cpp:-46
&gt;&gt; -    auto targetAgent = makeUnique&lt;WebPageInspectorTargetAgent&gt;(m_frontendRouter.get(), m_backendDispatcher.get());
&gt; 
&gt; I think we can delay the creation of `m_targetAgent` until inside `WebPageInspectorController::init`.  It&apos;s probably not that big of a difference since we create the `WebPageInspectorController` in the same function as we call `WebPageInspectorController::init `, but it can&apos;t hurt.

Done.

&gt;&gt; Source/WebKit/UIProcess/WebPageInspectorController.cpp:191
&gt;&gt; +    // FIXME: do not destroy targets that belong to the committed page.
&gt; 
&gt; Please make a bug for this and include it&apos;s URL here

Filed webtkit.org/b/202937

&gt;&gt; LayoutTests/http/tests/inspector/target/target-events-for-provisional-page.html:18
&gt;&gt; +            TargetAgent.dispatcher = new Proxy(TargetAgent.dispatcher, {
&gt; 
&gt; I&apos;m a bit confused as to why you can&apos;t use a protocol test for this.  It seems like all you really need to do is check the event payloads, and not necessarily do much else.  Can you explain why we can&apos;t use a protocol test?

Protocol tests use a shortcut when connecting to the inspected page: they are opened in a dummy front-end page (openDummyInspectorFrontend) and all messages are routed directly between the two pages.
From the inspected page to front-end via window.postMessage and via
InspectorFrontendClientLocal::sendMessageToBackend in the reverse direction.
These messages don&apos;t utilize Target domain at all and my goal is to test Target domain.


This is why I say it&apos;d be nice to get rid of the dummy inspector front-end altogether and host protocol tests&apos; front-end in the same inspector window as inspector UI tests. It would route all messages through the UIProcess and its target agent in case of WK2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1579712</commentid>
    <comment_count>11</comment_count>
      <attachid>380898</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2019-10-14 11:17:34 -0700</bug_when>
    <thetext>Created attachment 380898
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1579748</commentid>
    <comment_count>12</comment_count>
      <attachid>380469</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-10-14 12:51:51 -0700</bug_when>
    <thetext>Comment on attachment 380469
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/inspector/agents/InspectorTargetAgent.cpp:106
&gt;&gt;&gt; +        result-&gt;setPreviousTargetId(target.previousTargetID());
&gt;&gt; 
&gt;&gt; We should only bother sending this to the frontend when the frontend actually needs it, which is in `Target.event.didCommitProvisionalTarget`.  Otherwise, we&apos;re wasting bandwidth.
&gt;&gt; 
&gt;&gt; I know we discussed this in &lt;https://webkit.org/b/202219&gt;, but I&apos;d prefer you keep it as a parameter on `Target.event.didCommitProvisionalTarget` so it&apos;s clearer where it&apos;s actually used, rather than an optional parameter that may always be set.
&gt; 
&gt; This event is sent only once per target life cycle events, it won&apos;t save you anything. If bandwidth is a concern there are better ways to improve it than doing premature optimizations.
&gt; 
&gt; The reason I want to have it here is that once client attaches to the backend and requests all existing targets it will have to learn which of the targets are provisional and for what parent pages. So this data structure actually describes current state of a target. Or do you suggest I add them as a separate parameter to each of targetCreated and didCommitProvisionalTarget be events? What are we saving then?

I was referring specifically to `previousTargetId`.  I completely agree that we should have `isProvisional` be part of `Target.TargetInfo`.  Unless you have future plans for it (which I am unaware of), it looks like the only time `previousTargetId` is ever used is when we&apos;re committing a provisional target, so in your example of needing to get the current state of all targets when Web Inspector connects, it wouldn&apos;t be needed as nothing is being &quot;committed&quot; during that initial broadcast.

This isn&apos;t a &quot;premature optimization&quot; so much as it&apos;s a code cleanliness.  We should strive to keep things as localized and concise as possible.

&gt;&gt;&gt; Source/JavaScriptCore/inspector/agents/InspectorTargetAgent.cpp:146
&gt;&gt;&gt; +    targetInfo-&gt;setPreviousTargetId(oldTargetID);
&gt;&gt; 
&gt;&gt; Will `oldTargetId` ever be different from `target.previousTargetID()`?  You&apos;re overriding the call to `setPreviousTargetId` in `buildTargetInfoObject`, which is odd.
&gt; 
&gt; By this time target.previousTargetID has already been cleared as the target is committed. Alternatively, we could store a copy of previousTargetID after the commit. I didn&apos;t quite like that but if you think it&apos;d be better I can ad InspectedTargetProxy::m_previousTargetID. I&apos;m open to suggestions.

If it&apos;s been cleared by this point then we shouldn&apos;t even be using it at all.  I&apos;m fine with passing in the `oldTargetID` to this function, I just don&apos;t want to see two different calls to `setPreviousTargetId` one after the other.

&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js:297
&gt;&gt;&gt; +                WI.quickConsole.initializeMainExecutionContextPathComponent();
&gt;&gt; 
&gt;&gt; This is a layering violation.  `WI.quickConsole` is a view object, whereas this is in the model/controller layer.  Also, this won&apos;t exist for tests, so we probably should avoid even making references to it.
&gt;&gt; 
&gt;&gt; Thinking more about this, given how much these functions touch other managers and global state, perhaps it was better to keep it inside &apos;Main.js&apos; and just duplicate it inside &apos;Test.js&apos;.  I&apos;m fine with either approach (minus the layering violation), so I&apos;ll leave the choice up to you.
&gt; 
&gt; Done. Moved the code to a listener in QuickConsole. I think it&apos;s a positive change to reduce code duplication between the Test.js and Main.js. As a next step these methods can be turned into listeners of the target manager. I&apos;d much rather do it in a separate change to keep this one focused on the primary goal.

Nice!  One thing to keep in mind here is that `WI.Object`&apos;s event listeners are fired in the order that they&apos;re added.  We _should_ avoid any situation where that ordering matters, but there may be some subtle bugs as a result of this.

&gt;&gt;&gt; LayoutTests/http/tests/inspector/target/target-events-for-provisional-page.html:18
&gt;&gt;&gt; +            TargetAgent.dispatcher = new Proxy(TargetAgent.dispatcher, {
&gt;&gt; 
&gt;&gt; I&apos;m a bit confused as to why you can&apos;t use a protocol test for this.  It seems like all you really need to do is check the event payloads, and not necessarily do much else.  Can you explain why we can&apos;t use a protocol test?
&gt; 
&gt; Protocol tests use a shortcut when connecting to the inspected page: they are opened in a dummy front-end page (openDummyInspectorFrontend) and all messages are routed directly between the two pages.
&gt; From the inspected page to front-end via window.postMessage and via
&gt; InspectorFrontendClientLocal::sendMessageToBackend in the reverse direction.
&gt; These messages don&apos;t utilize Target domain at all and my goal is to test Target domain.
&gt; 
&gt; 
&gt; This is why I say it&apos;d be nice to get rid of the dummy inspector front-end altogether and host protocol tests&apos; front-end in the same inspector window as inspector UI tests. It would route all messages through the UIProcess and its target agent in case of WK2.

Aaahhh, right the dummy frontend.  We should get rid of that at some point.

My concern with this approach is that you&apos;re only modifying the Target dispatcher for the main target, not every target.  This was why I&apos;d suggested modifying `WI.TargetManager` in previous reviews, as that _would_ handle every target, and not require the use of a `Proxy` or any other &quot;hacky&quot; behavior.  I&apos;d rather have a more comprehensive test that handles _all_ target messages, instead of just for the main target (I realize that we won&apos;t have a Target domain for any other target, but the principle of the test should be to get as much coverage, now and in the future, as possible).

Regardless, what you have here is valid, so I&apos;m not disagreeing with the concept of the test, or even what it&apos;s testing, just how it goes about doing that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1579886</commentid>
    <comment_count>13</comment_count>
      <attachid>380469</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2019-10-14 16:24:59 -0700</bug_when>
    <thetext>Comment on attachment 380469
Patch

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

&gt;&gt;&gt;&gt; Source/JavaScriptCore/inspector/agents/InspectorTargetAgent.cpp:106
&gt;&gt;&gt;&gt; +        result-&gt;setPreviousTargetId(target.previousTargetID());
&gt;&gt;&gt; 
&gt;&gt;&gt; We should only bother sending this to the frontend when the frontend actually needs it, which is in `Target.event.didCommitProvisionalTarget`.  Otherwise, we&apos;re wasting bandwidth.
&gt;&gt;&gt; 
&gt;&gt;&gt; I know we discussed this in &lt;https://webkit.org/b/202219&gt;, but I&apos;d prefer you keep it as a parameter on `Target.event.didCommitProvisionalTarget` so it&apos;s clearer where it&apos;s actually used, rather than an optional parameter that may always be set.
&gt;&gt; 
&gt;&gt; This event is sent only once per target life cycle events, it won&apos;t save you anything. If bandwidth is a concern there are better ways to improve it than doing premature optimizations.
&gt;&gt; 
&gt;&gt; The reason I want to have it here is that once client attaches to the backend and requests all existing targets it will have to learn which of the targets are provisional and for what parent pages. So this data structure actually describes current state of a target. Or do you suggest I add them as a separate parameter to each of targetCreated and didCommitProvisionalTarget be events? What are we saving then?
&gt; 
&gt; I was referring specifically to `previousTargetId`.  I completely agree that we should have `isProvisional` be part of `Target.TargetInfo`.  Unless you have future plans for it (which I am unaware of), it looks like the only time `previousTargetId` is ever used is when we&apos;re committing a provisional target, so in your example of needing to get the current state of all targets when Web Inspector connects, it wouldn&apos;t be needed as nothing is being &quot;committed&quot; during that initial broadcast.
&gt; 
&gt; This isn&apos;t a &quot;premature optimization&quot; so much as it&apos;s a code cleanliness.  We should strive to keep things as localized and concise as possible.

Consider the world where target domain is per inspected App rather than per tab as we discussed some time ago on irc. In that case the client would connect to the browser, receive all target events and then be able to pick and choose which of them to inspect. In that world if the client observes targetCreated event for a provisional target it has to know whether it&apos;s a navigation in one of the pages it&apos;s currently inspecting or it&apos;s irrelevant and safe to ignore. Without previousTargetId it would have to conservatively assume that each provisional target could be relevant to the inspected pages. This becomes even more important if you may have more than one provisional target for a page because of e.g. preloads.

previousTargetId could be passed a separate parameter in didCommitProvisionalTarget for now but then it means we&apos;d have to add it to targetCreated event later and overall the result IMO is worse because we&apos;d end up passing the information separately from TargetInfo in each instance.

Please let me know what you think about this. If you feel like it&apos;s better to add it later I will change the code to pass old target id as a separate parameter in didCommitProvisionalTarget.

&gt;&gt;&gt;&gt; Source/JavaScriptCore/inspector/agents/InspectorTargetAgent.cpp:146
&gt;&gt;&gt;&gt; +    targetInfo-&gt;setPreviousTargetId(oldTargetID);
&gt;&gt;&gt; 
&gt;&gt;&gt; Will `oldTargetId` ever be different from `target.previousTargetID()`?  You&apos;re overriding the call to `setPreviousTargetId` in `buildTargetInfoObject`, which is odd.
&gt;&gt; 
&gt;&gt; By this time target.previousTargetID has already been cleared as the target is committed. Alternatively, we could store a copy of previousTargetID after the commit. I didn&apos;t quite like that but if you think it&apos;d be better I can ad InspectedTargetProxy::m_previousTargetID. I&apos;m open to suggestions.
&gt; 
&gt; If it&apos;s been cleared by this point then we shouldn&apos;t even be using it at all.  I&apos;m fine with passing in the `oldTargetID` to this function, I just don&apos;t want to see two different calls to `setPreviousTargetId` one after the other.

oldTargetID is only set if the target is not provisional, I moved the logic inside the buildTargetInfoObject.

&gt;&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js:297
&gt;&gt;&gt;&gt; +                WI.quickConsole.initializeMainExecutionContextPathComponent();
&gt;&gt;&gt; 
&gt;&gt;&gt; This is a layering violation.  `WI.quickConsole` is a view object, whereas this is in the model/controller layer.  Also, this won&apos;t exist for tests, so we probably should avoid even making references to it.
&gt;&gt;&gt; 
&gt;&gt;&gt; Thinking more about this, given how much these functions touch other managers and global state, perhaps it was better to keep it inside &apos;Main.js&apos; and just duplicate it inside &apos;Test.js&apos;.  I&apos;m fine with either approach (minus the layering violation), so I&apos;ll leave the choice up to you.
&gt;&gt; 
&gt;&gt; Done. Moved the code to a listener in QuickConsole. I think it&apos;s a positive change to reduce code duplication between the Test.js and Main.js. As a next step these methods can be turned into listeners of the target manager. I&apos;d much rather do it in a separate change to keep this one focused on the primary goal.
&gt; 
&gt; Nice!  One thing to keep in mind here is that `WI.Object`&apos;s event listeners are fired in the order that they&apos;re added.  We _should_ avoid any situation where that ordering matters, but there may be some subtle bugs as a result of this.

At first glance initializeMainExecutionContextPathComponent() doesn&apos;t depend on runtimeManager.activeExecutionContex, am I missing something?

Do you have a concrete suggestion how to improve the code or current approach is fine? Please clarify.

&gt;&gt;&gt;&gt; LayoutTests/http/tests/inspector/target/target-events-for-provisional-page.html:18
&gt;&gt;&gt;&gt; +            TargetAgent.dispatcher = new Proxy(TargetAgent.dispatcher, {
&gt;&gt;&gt; 
&gt;&gt;&gt; I&apos;m a bit confused as to why you can&apos;t use a protocol test for this.  It seems like all you really need to do is check the event payloads, and not necessarily do much else.  Can you explain why we can&apos;t use a protocol test?
&gt;&gt; 
&gt;&gt; Protocol tests use a shortcut when connecting to the inspected page: they are opened in a dummy front-end page (openDummyInspectorFrontend) and all messages are routed directly between the two pages.
&gt;&gt; From the inspected page to front-end via window.postMessage and via
&gt;&gt; InspectorFrontendClientLocal::sendMessageToBackend in the reverse direction.
&gt;&gt; These messages don&apos;t utilize Target domain at all and my goal is to test Target domain.
&gt;&gt; 
&gt;&gt; 
&gt;&gt; This is why I say it&apos;d be nice to get rid of the dummy inspector front-end altogether and host protocol tests&apos; front-end in the same inspector window as inspector UI tests. It would route all messages through the UIProcess and its target agent in case of WK2.
&gt; 
&gt; Aaahhh, right the dummy frontend.  We should get rid of that at some point.
&gt; 
&gt; My concern with this approach is that you&apos;re only modifying the Target dispatcher for the main target, not every target.  This was why I&apos;d suggested modifying `WI.TargetManager` in previous reviews, as that _would_ handle every target, and not require the use of a `Proxy` or any other &quot;hacky&quot; behavior.  I&apos;d rather have a more comprehensive test that handles _all_ target messages, instead of just for the main target (I realize that we won&apos;t have a Target domain for any other target, but the principle of the test should be to get as much coverage, now and in the future, as possible).
&gt; 
&gt; Regardless, what you have here is valid, so I&apos;m not disagreeing with the concept of the test, or even what it&apos;s testing, just how it goes about doing that.

I&apos;ve added events on TargetManager for each of the protocol events as you suggested. Tried to replace TargetManaget with a test subclass but it didn&apos;t quite work: first of all we&apos;d have to copy current state of existing instance TargetManager, then it may already be added as a listener to some objects. Having explicit events looks cleaner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1579887</commentid>
    <comment_count>14</comment_count>
      <attachid>380930</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2019-10-14 16:25:44 -0700</bug_when>
    <thetext>Created attachment 380930
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1581290</commentid>
    <comment_count>15</comment_count>
      <attachid>380469</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-10-17 21:26:24 -0700</bug_when>
    <thetext>Comment on attachment 380469
Patch

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

Now that &lt;https://webkit.org/b/200384&gt; has landed, this patch will need a rebase.  Sorry I couldn&apos;t get to reviewing this again sooner :(

&gt;&gt;&gt;&gt;&gt; Source/JavaScriptCore/inspector/agents/InspectorTargetAgent.cpp:106
&gt;&gt;&gt;&gt;&gt; +        result-&gt;setPreviousTargetId(target.previousTargetID());
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; We should only bother sending this to the frontend when the frontend actually needs it, which is in `Target.event.didCommitProvisionalTarget`.  Otherwise, we&apos;re wasting bandwidth.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; I know we discussed this in &lt;https://webkit.org/b/202219&gt;, but I&apos;d prefer you keep it as a parameter on `Target.event.didCommitProvisionalTarget` so it&apos;s clearer where it&apos;s actually used, rather than an optional parameter that may always be set.
&gt;&gt;&gt; 
&gt;&gt;&gt; This event is sent only once per target life cycle events, it won&apos;t save you anything. If bandwidth is a concern there are better ways to improve it than doing premature optimizations.
&gt;&gt;&gt; 
&gt;&gt;&gt; The reason I want to have it here is that once client attaches to the backend and requests all existing targets it will have to learn which of the targets are provisional and for what parent pages. So this data structure actually describes current state of a target. Or do you suggest I add them as a separate parameter to each of targetCreated and didCommitProvisionalTarget be events? What are we saving then?
&gt;&gt; 
&gt;&gt; I was referring specifically to `previousTargetId`.  I completely agree that we should have `isProvisional` be part of `Target.TargetInfo`.  Unless you have future plans for it (which I am unaware of), it looks like the only time `previousTargetId` is ever used is when we&apos;re committing a provisional target, so in your example of needing to get the current state of all targets when Web Inspector connects, it wouldn&apos;t be needed as nothing is being &quot;committed&quot; during that initial broadcast.
&gt;&gt; 
&gt;&gt; This isn&apos;t a &quot;premature optimization&quot; so much as it&apos;s a code cleanliness.  We should strive to keep things as localized and concise as possible.
&gt; 
&gt; Consider the world where target domain is per inspected App rather than per tab as we discussed some time ago on irc. In that case the client would connect to the browser, receive all target events and then be able to pick and choose which of them to inspect. In that world if the client observes targetCreated event for a provisional target it has to know whether it&apos;s a navigation in one of the pages it&apos;s currently inspecting or it&apos;s irrelevant and safe to ignore. Without previousTargetId it would have to conservatively assume that each provisional target could be relevant to the inspected pages. This becomes even more important if you may have more than one provisional target for a page because of e.g. preloads.
&gt; 
&gt; previousTargetId could be passed a separate parameter in didCommitProvisionalTarget for now but then it means we&apos;d have to add it to targetCreated event later and overall the result IMO is worse because we&apos;d end up passing the information separately from TargetInfo in each instance.
&gt; 
&gt; Please let me know what you think about this. If you feel like it&apos;s better to add it later I will change the code to pass old target id as a separate parameter in didCommitProvisionalTarget.

As we discussed on IRC, this is not the direction we&apos;d like to take Web Inspector.  If you want to connect to a browser, there should be a separate `Browser` domain, preferably behind a build flag.  The `Target` domain is meant for inspecting a single web page (and any associated targets).

Furthermore, what you&apos;re describing seems more to me like a `parentTargetId` or `relatedTargetId`, not `previousTargetId`.  I&apos;d be fine having a `relatedTargetId` as part of `Target.TargetInfo`, but not `previousTargetId` as the only time that the `targetId`  should be &quot;moved&quot; to the `previousTargetId` is when we&apos;re transitioning a provisional target, which is why it should be a second parameter to the event, not a generalized item that could be part of every `Target.TargetInfo`.

&gt;&gt;&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js:297
&gt;&gt;&gt;&gt;&gt; +                WI.quickConsole.initializeMainExecutionContextPathComponent();
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; This is a layering violation.  `WI.quickConsole` is a view object, whereas this is in the model/controller layer.  Also, this won&apos;t exist for tests, so we probably should avoid even making references to it.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Thinking more about this, given how much these functions touch other managers and global state, perhaps it was better to keep it inside &apos;Main.js&apos; and just duplicate it inside &apos;Test.js&apos;.  I&apos;m fine with either approach (minus the layering violation), so I&apos;ll leave the choice up to you.
&gt;&gt;&gt; 
&gt;&gt;&gt; Done. Moved the code to a listener in QuickConsole. I think it&apos;s a positive change to reduce code duplication between the Test.js and Main.js. As a next step these methods can be turned into listeners of the target manager. I&apos;d much rather do it in a separate change to keep this one focused on the primary goal.
&gt;&gt; 
&gt;&gt; Nice!  One thing to keep in mind here is that `WI.Object`&apos;s event listeners are fired in the order that they&apos;re added.  We _should_ avoid any situation where that ordering matters, but there may be some subtle bugs as a result of this.
&gt; 
&gt; At first glance initializeMainExecutionContextPathComponent() doesn&apos;t depend on runtimeManager.activeExecutionContex, am I missing something?
&gt; 
&gt; Do you have a concrete suggestion how to improve the code or current approach is fine? Please clarify.

I was making a more general comment, not necessarily specific to this situation.  If you created an entirely new event, there will be no problem (especially since our event listeners fire synchronously).  If you&apos;re using an existing event, there _may_ be issues with the ordering as I mentioned, but I&apos;m not saying there are for sure as I&apos;d have to look.  Ideally, the order in which event listeners are fired shouldn&apos;t matter (excluding `stopPropagation`), but reality isn&apos;t always ideal :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1581899</commentid>
    <comment_count>16</comment_count>
      <attachid>380469</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2019-10-21 11:12:32 -0700</bug_when>
    <thetext>Comment on attachment 380469
Patch

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

&gt;&gt;&gt;&gt;&gt;&gt; Source/JavaScriptCore/inspector/agents/InspectorTargetAgent.cpp:106
&gt;&gt;&gt;&gt;&gt;&gt; +        result-&gt;setPreviousTargetId(target.previousTargetID());
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; We should only bother sending this to the frontend when the frontend actually needs it, which is in `Target.event.didCommitProvisionalTarget`.  Otherwise, we&apos;re wasting bandwidth.
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; I know we discussed this in &lt;https://webkit.org/b/202219&gt;, but I&apos;d prefer you keep it as a parameter on `Target.event.didCommitProvisionalTarget` so it&apos;s clearer where it&apos;s actually used, rather than an optional parameter that may always be set.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; This event is sent only once per target life cycle events, it won&apos;t save you anything. If bandwidth is a concern there are better ways to improve it than doing premature optimizations.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; The reason I want to have it here is that once client attaches to the backend and requests all existing targets it will have to learn which of the targets are provisional and for what parent pages. So this data structure actually describes current state of a target. Or do you suggest I add them as a separate parameter to each of targetCreated and didCommitProvisionalTarget be events? What are we saving then?
&gt;&gt;&gt; 
&gt;&gt;&gt; I was referring specifically to `previousTargetId`.  I completely agree that we should have `isProvisional` be part of `Target.TargetInfo`.  Unless you have future plans for it (which I am unaware of), it looks like the only time `previousTargetId` is ever used is when we&apos;re committing a provisional target, so in your example of needing to get the current state of all targets when Web Inspector connects, it wouldn&apos;t be needed as nothing is being &quot;committed&quot; during that initial broadcast.
&gt;&gt;&gt; 
&gt;&gt;&gt; This isn&apos;t a &quot;premature optimization&quot; so much as it&apos;s a code cleanliness.  We should strive to keep things as localized and concise as possible.
&gt;&gt; 
&gt;&gt; Consider the world where target domain is per inspected App rather than per tab as we discussed some time ago on irc. In that case the client would connect to the browser, receive all target events and then be able to pick and choose which of them to inspect. In that world if the client observes targetCreated event for a provisional target it has to know whether it&apos;s a navigation in one of the pages it&apos;s currently inspecting or it&apos;s irrelevant and safe to ignore. Without previousTargetId it would have to conservatively assume that each provisional target could be relevant to the inspected pages. This becomes even more important if you may have more than one provisional target for a page because of e.g. preloads.
&gt;&gt; 
&gt;&gt; previousTargetId could be passed a separate parameter in didCommitProvisionalTarget for now but then it means we&apos;d have to add it to targetCreated event later and overall the result IMO is worse because we&apos;d end up passing the information separately from TargetInfo in each instance.
&gt;&gt; 
&gt;&gt; Please let me know what you think about this. If you feel like it&apos;s better to add it later I will change the code to pass old target id as a separate parameter in didCommitProvisionalTarget.
&gt; 
&gt; As we discussed on IRC, this is not the direction we&apos;d like to take Web Inspector.  If you want to connect to a browser, there should be a separate `Browser` domain, preferably behind a build flag.  The `Target` domain is meant for inspecting a single web page (and any associated targets).
&gt; 
&gt; Furthermore, what you&apos;re describing seems more to me like a `parentTargetId` or `relatedTargetId`, not `previousTargetId`.  I&apos;d be fine having a `relatedTargetId` as part of `Target.TargetInfo`, but not `previousTargetId` as the only time that the `targetId`  should be &quot;moved&quot; to the `previousTargetId` is when we&apos;re transitioning a provisional target, which is why it should be a second parameter to the event, not a generalized item that could be part of every `Target.TargetInfo`.

Done.

&gt;&gt;&gt;&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js:297
&gt;&gt;&gt;&gt;&gt;&gt; +                WI.quickConsole.initializeMainExecutionContextPathComponent();
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; This is a layering violation.  `WI.quickConsole` is a view object, whereas this is in the model/controller layer.  Also, this won&apos;t exist for tests, so we probably should avoid even making references to it.
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; Thinking more about this, given how much these functions touch other managers and global state, perhaps it was better to keep it inside &apos;Main.js&apos; and just duplicate it inside &apos;Test.js&apos;.  I&apos;m fine with either approach (minus the layering violation), so I&apos;ll leave the choice up to you.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Done. Moved the code to a listener in QuickConsole. I think it&apos;s a positive change to reduce code duplication between the Test.js and Main.js. As a next step these methods can be turned into listeners of the target manager. I&apos;d much rather do it in a separate change to keep this one focused on the primary goal.
&gt;&gt;&gt; 
&gt;&gt;&gt; Nice!  One thing to keep in mind here is that `WI.Object`&apos;s event listeners are fired in the order that they&apos;re added.  We _should_ avoid any situation where that ordering matters, but there may be some subtle bugs as a result of this.
&gt;&gt; 
&gt;&gt; At first glance initializeMainExecutionContextPathComponent() doesn&apos;t depend on runtimeManager.activeExecutionContex, am I missing something?
&gt;&gt; 
&gt;&gt; Do you have a concrete suggestion how to improve the code or current approach is fine? Please clarify.
&gt; 
&gt; I was making a more general comment, not necessarily specific to this situation.  If you created an entirely new event, there will be no problem (especially since our event listeners fire synchronously).  If you&apos;re using an existing event, there _may_ be issues with the ordering as I mentioned, but I&apos;m not saying there are for sure as I&apos;d have to look.  Ideally, the order in which event listeners are fired shouldn&apos;t matter (excluding `stopPropagation`), but reality isn&apos;t always ideal :(

OK, let me know if you are concerned about some particular flow and we can rearrange the code, TransitionPageTarget in this case seems safe to me.

Also if listeners order matters they&apos;d better be delegates with predictable invocation sequence. In this particular case we don&apos;t rely on the order in which the notification listeners are called.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1581901</commentid>
    <comment_count>17</comment_count>
      <attachid>381421</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2019-10-21 11:14:28 -0700</bug_when>
    <thetext>Created attachment 381421
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1582177</commentid>
    <comment_count>18</comment_count>
      <attachid>381421</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-10-21 17:53:59 -0700</bug_when>
    <thetext>Comment on attachment 381421
Patch

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

r=me, awesome work!

&gt; Source/JavaScriptCore/inspector/agents/InspectorTargetAgent.cpp:135
&gt; +    m_frontendDispatcher-&gt;didCommitProvisionalTarget(oldTargetID, buildTargetInfoObject(*target));

Would we ever expect the `type` to change?  If not, couldn&apos;t we simplify this to just send the `oldTargetID` and `newTargetID` and have the frontend reuse the same `WI.Target` by changing it&apos;s `_identifier`?

&gt; Source/JavaScriptCore/inspector/protocol/Target.json:13
&gt; +                { &quot;name&quot;: &quot;isProvisional&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;Whether this is a provisional page target.&quot; }

This doesn&apos;t explain what a &quot;provisional&quot; target is.  I&apos;d expect some explanation of what that is.

&gt; Source/JavaScriptCore/inspector/protocol/Target.json:43
&gt; +                { &quot;name&quot;: &quot;previousTargetId&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;ID of the target committed target is swapped with.&quot; },

This is an awkward sentence description.  Please rephrase it.

&gt; Source/JavaScriptCore/inspector/protocol/Target.json:44
&gt; +                { &quot;name&quot;: &quot;targetInfo&quot;, &quot;$ref&quot;: &quot;TargetInfo&quot;, &quot;description&quot;: &quot;Committed target info.&quot; }

These types of descriptions aren&apos;t very useful.  I&apos;d either add more information or remove it.

&gt; Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js:125
&gt; +        this.dispatchEventToListeners(WI.TargetManager.Event.TargetCreated, {targetInfo});

Rather than pass the `targetInfo`, can we instead pass the new `WI.Target`?  That way, we could use it in non-test code as well (if needed).  We could pass `isProvisional` as a separate argument in the object since it&apos;s not saved on `WI.Target`.

NIT: you can drop the `WI` from `WI.TargetManager` since it&apos;s in the same class.

&gt; Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js:131
&gt; +        this._provisionalTargetIds.delete(targetInfo.targetId);

We should assert that it was previously in the `Set`

&gt; Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js:133
&gt; +        this._swappedTargetIds.add(previousTargetId);

We should assert that it wasn&apos;t already in the `Set`

&gt; Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js:135
&gt; +        this.dispatchEventToListeners(WI.TargetManager.Event.DidCommitProvisionalTarget, {previousTargetId, targetInfo});

Ditto (125)

&gt; Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js:142
&gt; +        this.dispatchEventToListeners(WI.TargetManager.Event.TargetDestroyed, {targetId});

To test even more correctness, we could keep a copy of the `WI.Target` and pass it in here instead of `targetId` so the test can confirm that `isDestroyed` is the right value.

Although we may not always have a `WI.Target`, such as in the case of `didCommitProvisionalTarget`, so maybe not.

&gt; Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js:145
&gt; +    _targetCreated(parentTarget, targetInfo)

We should name this function and `_targetDestroyed` to be more active instead of looking/sounding like an event listener callback:
 - `_targetCreated` =&gt; `_createTarget` (merging with the existing `_createTarget`)
 - `_targetDestroyed` =&gt; `_destroyTarget`
This way, it also won&apos;t be as confusing trying to differentiate between `targetCreated` and `_targetCreated`.

Also, this function and `_destroyTarget` should be moved into the `// Private` section below.

&gt; Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js:152
&gt; +        console.assert(!this._provisionalTargetIds.has(targetInfo.targetId));

I would actually move this assertion before the `if`, because we wouldn&apos;t want the same provisional `targetId` to be added twice.

&gt; Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js:168
&gt; +            return;
&gt;          let target = this._targets.get(targetId);

Style: missing newline

&gt; Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js:177
&gt; +            return;
&gt;          let target = this._targets.get(targetId);

Style: missing newline

&gt; Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js:310
&gt; +    // Events below are triggered only by corresponding protocol events.

This comment isn&apos;t really necessary.

&gt; Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js:313
&gt; +    TargetCreated: Symbol(&quot;target-manager-target-created&quot;),
&gt; +    DidCommitProvisionalTarget: Symbol(&quot;target-manager-provisional-target-committed&quot;),
&gt; +    TargetDestroyed: Symbol(&quot;target-manager-target-detroyed&quot;),

NIT: I know that the other events are `Symbol`, but we really don&apos;t need to do that, so please just make these strings.

&gt; Source/WebInspectorUI/UserInterface/Protocol/Connection.js:324
&gt; +            // Command may be sent after target is already destroyed on backend,
&gt; +            // ignore such errors.

We can simplify this to be on one line
```
    // Ignore errors if the target was destroyed after the command was dispatched.
```

&gt; Source/WebInspectorUI/UserInterface/Protocol/Target.js:165
&gt; +    destroy() { this._isDestroyed = true; }

Style: we only put functions onto a single line if they&apos;re simple getters.  Since this is a function, please put the body on separate lines and move it to be below all of the rest of the getters (I&apos;d put this between `addScript` and `hasDomain`).

&gt; Source/WebInspectorUI/UserInterface/Views/QuickConsole.js:115
&gt; +    _pageTargetTransisioned()

Typo: `_pageTargetTransisioned` =&gt; `_pageTargetTransitioned`

&gt; Source/WebKit/UIProcess/API/APIWebAuthenticationPanel.cpp:37
&gt; +Ref&lt;WebAuthenticationPanel&gt; WebAuthenticationPanel::create(const AuthenticatorManager&amp; manager, const WTF::String&amp; rpId)

This should definitely be in a separate change.  Also, I think the more &quot;correct&quot; solution would be to add an `#include &lt;wtf/text/WTFString.h&gt;` in the .cpp and `#include &lt;wtf/Forward.h&gt;` in the .h

&gt; Source/WebKit/UIProcess/WebPageInspectorController.cpp:191
&gt; +    // FIXME(webkit.org/b/202937): do not destroy targets that belong to the committed page.

NIT: our usual style is `// FIXME: &lt;https://webkit.org/b/202937&gt; do not destroy targets that belong to the committed page`

&gt; Source/WebKit/WebKit.xcodeproj/project.pbxproj:6271
&gt; +				37B47E2C1D64DB76005F4EFF /* objcSPI.h */,

Where did this come from?

&gt; Source/WebKit/WebKit.xcodeproj/project.pbxproj:-9412
&gt; -				7AA746D523593D8100095050 /* SecItemSPI.h in Headers */,

Ditto (6271)

&gt; LayoutTests/http/tests/inspector/target/target-events-for-provisional-page.html:21
&gt; +                let targetInfo = event.data.targetInfo;

NIT: you can destructure this as `let {targetInfo} = event.data;` as you do below

&gt; LayoutTests/http/tests/inspector/target/target-events-for-provisional-page.html:35
&gt; +                let targetId = event.data.targetId;

Ditto (21)

&gt; LayoutTests/http/tests/inspector/target/target-events-for-provisional-page.html:39
&gt; +                // Wait for page reload event to avoid race between test results flushing and the test completion.
&gt; +                reloadPromise.then(resolve);

Nice catch!

NIT: I&apos;d add a newline before the comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1582895</commentid>
    <comment_count>19</comment_count>
      <attachid>381421</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2019-10-23 11:11:45 -0700</bug_when>
    <thetext>Comment on attachment 381421
Patch

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

&gt;&gt; Source/JavaScriptCore/inspector/agents/InspectorTargetAgent.cpp:135
&gt;&gt; +    m_frontendDispatcher-&gt;didCommitProvisionalTarget(oldTargetID, buildTargetInfoObject(*target));
&gt; 
&gt; Would we ever expect the `type` to change?  If not, couldn&apos;t we simplify this to just send the `oldTargetID` and `newTargetID` and have the frontend reuse the same `WI.Target` by changing it&apos;s `_identifier`?

Currently I can&apos;t think of any cases where the type would have to change. Changed the event to pass newTargetId instead and reusing TargetInfo from preceding targetCreated events.

I don&apos;t want to reuse WI.Target instance though as in the next step we&apos;ll want to have agents talking to the provisional page before it is committed.

&gt;&gt; Source/JavaScriptCore/inspector/protocol/Target.json:13
&gt;&gt; +                { &quot;name&quot;: &quot;isProvisional&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;Whether this is a provisional page target.&quot; }
&gt; 
&gt; This doesn&apos;t explain what a &quot;provisional&quot; target is.  I&apos;d expect some explanation of what that is.

Done.

&gt;&gt; Source/JavaScriptCore/inspector/protocol/Target.json:43
&gt;&gt; +                { &quot;name&quot;: &quot;previousTargetId&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;ID of the target committed target is swapped with.&quot; },
&gt; 
&gt; This is an awkward sentence description.  Please rephrase it.

Done.

&gt;&gt; Source/JavaScriptCore/inspector/protocol/Target.json:44
&gt;&gt; +                { &quot;name&quot;: &quot;targetInfo&quot;, &quot;$ref&quot;: &quot;TargetInfo&quot;, &quot;description&quot;: &quot;Committed target info.&quot; }
&gt; 
&gt; These types of descriptions aren&apos;t very useful.  I&apos;d either add more information or remove it.

Changed this to newTargetId instead.

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js:125
&gt;&gt; +        this.dispatchEventToListeners(WI.TargetManager.Event.TargetCreated, {targetInfo});
&gt; 
&gt; Rather than pass the `targetInfo`, can we instead pass the new `WI.Target`?  That way, we could use it in non-test code as well (if needed).  We could pass `isProvisional` as a separate argument in the object since it&apos;s not saved on `WI.Target`.
&gt; 
&gt; NIT: you can drop the `WI` from `WI.TargetManager` since it&apos;s in the same class.

We don&apos;t create WI.Target for provisional pages yet so there is nothing to pass for them at the moment. We can change the event arguments later depending on the use cases we have.


As for WI.TargetManager. prefix, I don&apos;t think we can drop it even being in the same class, reference resolution would fail.

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js:131
&gt;&gt; +        this._provisionalTargetIds.delete(targetInfo.targetId);
&gt; 
&gt; We should assert that it was previously in the `Set`

Done.

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js:133
&gt;&gt; +        this._swappedTargetIds.add(previousTargetId);
&gt; 
&gt; We should assert that it wasn&apos;t already in the `Set`

Done.

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js:135
&gt;&gt; +        this.dispatchEventToListeners(WI.TargetManager.Event.DidCommitProvisionalTarget, {previousTargetId, targetInfo});
&gt; 
&gt; Ditto (125)

It wouldn&apos;t work. See above.

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js:142
&gt;&gt; +        this.dispatchEventToListeners(WI.TargetManager.Event.TargetDestroyed, {targetId});
&gt; 
&gt; To test even more correctness, we could keep a copy of the `WI.Target` and pass it in here instead of `targetId` so the test can confirm that `isDestroyed` is the right value.
&gt; 
&gt; Although we may not always have a `WI.Target`, such as in the case of `didCommitProvisionalTarget`, so maybe not.

Yeah, the problem with it is that sometimes we don&apos;t have target instance here.

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js:145
&gt;&gt; +    _targetCreated(parentTarget, targetInfo)
&gt; 
&gt; We should name this function and `_targetDestroyed` to be more active instead of looking/sounding like an event listener callback:
&gt;  - `_targetCreated` =&gt; `_createTarget` (merging with the existing `_createTarget`)
&gt;  - `_targetDestroyed` =&gt; `_destroyTarget`
&gt; This way, it also won&apos;t be as confusing trying to differentiate between `targetCreated` and `_targetCreated`.
&gt; 
&gt; Also, this function and `_destroyTarget` should be moved into the `// Private` section below.

Good point. Done.

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js:152
&gt;&gt; +        console.assert(!this._provisionalTargetIds.has(targetInfo.targetId));
&gt; 
&gt; I would actually move this assertion before the `if`, because we wouldn&apos;t want the same provisional `targetId` to be added twice.

Good point. Done.

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js:168
&gt;&gt;          let target = this._targets.get(targetId);
&gt; 
&gt; Style: missing newline

Done.

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js:177
&gt;&gt;          let target = this._targets.get(targetId);
&gt; 
&gt; Style: missing newline

Done.

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js:310
&gt;&gt; +    // Events below are triggered only by corresponding protocol events.
&gt; 
&gt; This comment isn&apos;t really necessary.

Removed.

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js:313
&gt;&gt; +    TargetDestroyed: Symbol(&quot;target-manager-target-detroyed&quot;),
&gt; 
&gt; NIT: I know that the other events are `Symbol`, but we really don&apos;t need to do that, so please just make these strings.

Removed. I&apos;m curious what&apos;s the rationale for not using symbols, can you elaborate?

Also should we change other event names in WI.TargetManager.Event to be strings for consistency?

One advantage of symbols that I see is that it forces clients to use the named constants rather than raw event names when adding listeners.

&gt;&gt; Source/WebInspectorUI/UserInterface/Protocol/Connection.js:324
&gt;&gt; +            // ignore such errors.
&gt; 
&gt; We can simplify this to be on one line
&gt; ```
&gt;     // Ignore errors if the target was destroyed after the command was dispatched.
&gt; ```

Done.

&gt;&gt; Source/WebInspectorUI/UserInterface/Protocol/Target.js:165
&gt;&gt; +    destroy() { this._isDestroyed = true; }
&gt; 
&gt; Style: we only put functions onto a single line if they&apos;re simple getters.  Since this is a function, please put the body on separate lines and move it to be below all of the rest of the getters (I&apos;d put this between `addScript` and `hasDomain`).

Done.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/QuickConsole.js:115
&gt;&gt; +    _pageTargetTransisioned()
&gt; 
&gt; Typo: `_pageTargetTransisioned` =&gt; `_pageTargetTransitioned`

Done.

&gt;&gt; Source/WebKit/UIProcess/API/APIWebAuthenticationPanel.cpp:37
&gt;&gt; +Ref&lt;WebAuthenticationPanel&gt; WebAuthenticationPanel::create(const AuthenticatorManager&amp; manager, const WTF::String&amp; rpId)
&gt; 
&gt; This should definitely be in a separate change.  Also, I think the more &quot;correct&quot; solution would be to add an `#include &lt;wtf/text/WTFString.h&gt;` in the .cpp and `#include &lt;wtf/Forward.h&gt;` in the .h

It is part of this change because otherwise WebKit would fail to compile and it builds fine without my change (so it&apos;d make less sense in isolation).  The error is a consequence of WebKit C++ relying on transitive includes.

In this case `#include &lt;wtf/Forward.h&gt;` cannot be used in the header because there is a member of type WTF::String in the class. The compiler needs to know full declaration of the string class for the declaration of WebAuthenticationPanel.

&gt;&gt; Source/WebKit/UIProcess/WebPageInspectorController.cpp:191
&gt;&gt; +    // FIXME(webkit.org/b/202937): do not destroy targets that belong to the committed page.
&gt; 
&gt; NIT: our usual style is `// FIXME: &lt;https://webkit.org/b/202937&gt; do not destroy targets that belong to the committed page`

Done.

&gt;&gt; Source/WebKit/WebKit.xcodeproj/project.pbxproj:6271
&gt;&gt; +				37B47E2C1D64DB76005F4EFF /* objcSPI.h */,
&gt; 
&gt; Where did this come from?

Dunno. Current diff with master doesn&apos;t have this change.

&gt;&gt; Source/WebKit/WebKit.xcodeproj/project.pbxproj:-9412
&gt;&gt; -				7AA746D523593D8100095050 /* SecItemSPI.h in Headers */,
&gt; 
&gt; Ditto (6271)

Reverted.Done.

&gt;&gt; LayoutTests/http/tests/inspector/target/target-events-for-provisional-page.html:21
&gt;&gt; +                let targetInfo = event.data.targetInfo;
&gt; 
&gt; NIT: you can destructure this as `let {targetInfo} = event.data;` as you do below

Done.

&gt;&gt; LayoutTests/http/tests/inspector/target/target-events-for-provisional-page.html:35
&gt;&gt; +                let targetId = event.data.targetId;
&gt; 
&gt; Ditto (21)

Done.

&gt;&gt; LayoutTests/http/tests/inspector/target/target-events-for-provisional-page.html:39
&gt;&gt; +                reloadPromise.then(resolve);
&gt; 
&gt; Nice catch!
&gt; 
&gt; NIT: I&apos;d add a newline before the comment.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1582899</commentid>
    <comment_count>20</comment_count>
      <attachid>381701</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2019-10-23 11:12:55 -0700</bug_when>
    <thetext>Created attachment 381701
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1582901</commentid>
    <comment_count>21</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2019-10-23 11:15:40 -0700</bug_when>
    <thetext>(In reply to Yury Semikhatsky from comment #20)
&gt; Created attachment 381701 [details]
&gt; Patch for landing

I&apos;ll wait for https://webkit.org/b/203262 to land before committing this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1582912</commentid>
    <comment_count>22</comment_count>
      <attachid>381421</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-10-23 11:29:28 -0700</bug_when>
    <thetext>Comment on attachment 381421
Patch

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

&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js:313
&gt;&gt;&gt; +    TargetDestroyed: Symbol(&quot;target-manager-target-detroyed&quot;),
&gt;&gt; 
&gt;&gt; NIT: I know that the other events are `Symbol`, but we really don&apos;t need to do that, so please just make these strings.
&gt; 
&gt; Removed. I&apos;m curious what&apos;s the rationale for not using symbols, can you elaborate?
&gt; 
&gt; Also should we change other event names in WI.TargetManager.Event to be strings for consistency?
&gt; 
&gt; One advantage of symbols that I see is that it forces clients to use the named constants rather than raw event names when adding listeners.

There&apos;s no real need to add the extra overhead of constructing a `Symbol`, especially since all of these are evaluated when Web Inspector first opens.  We already force clients to use the named constants through our (informal) style guide, so there&apos;s no real benefit there either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1582979</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-23 13:14:59 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 381701:

media/modern-media-controls/compact-media-controls/compact-media-controls-constructor.html bug 193587 (author: graouts@apple.com)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1582980</commentid>
    <comment_count>24</comment_count>
      <attachid>381701</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-23 13:16:08 -0700</bug_when>
    <thetext>Comment on attachment 381701
Patch for landing

Clearing flags on attachment: 381701

Committed r251494: &lt;https://trac.webkit.org/changeset/251494&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1582981</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-23 13:16:11 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1582983</commentid>
    <comment_count>26</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-10-23 13:17:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/56551422&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1587211</commentid>
    <comment_count>27</comment_count>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2019-11-04 16:01:25 -0800</bug_when>
    <thetext>The new test http/tests/inspector/target/target-events-for-provisional-page.html

added in https://trac.webkit.org/changeset/251494/webkit

is a flakey failure: https://results.webkit.org/?suite=layout-tests&amp;test=http%2Ftests%2Finspector%2Ftarget%2Ftarget-events-for-provisional-page.html

Diff:
--- /Volumes/Data/slave/mojave-release-tests-wk2/build/layout-test-results/http/tests/inspector/target/target-events-for-provisional-page-expected.txt
+++ /Volumes/Data/slave/mojave-release-tests-wk2/build/layout-test-results/http/tests/inspector/target/target-events-for-provisional-page-actual.txt
@@ -6,11 +6,5 @@
 
 == Running test suite: Target.PSON
 -- Running test case: ProvisionalPageTarget
-PASS: Should receive targetCreated event.
-PASS: Target should be provisional.
-PASS: Should receive didCommitProvisionalTarget event.
-PASS: Previous target should be the current one.
-PASS: Committed target should match provisional target.
-PASS: Should receive targetDestroyed event.
-PASS: Destroyed target should be previous target.
+!! TIMEOUT: took longer than 10000ms</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588262</commentid>
    <comment_count>28</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2019-11-07 09:53:59 -0800</bug_when>
    <thetext>(In reply to Truitt Savell from comment #27)
&gt; The new test
&gt; http/tests/inspector/target/target-events-for-provisional-page.html
&gt; 
&gt; added in https://trac.webkit.org/changeset/251494/webkit
&gt; 
&gt; is a flakey failure:
&gt; https://results.webkit.org/?suite=layout-
&gt; tests&amp;test=http%2Ftests%2Finspector%2Ftarget%2Ftarget-events-for-provisional-
&gt; page.html
&gt; 
&gt; Diff:
&gt; ---
&gt; /Volumes/Data/slave/mojave-release-tests-wk2/build/layout-test-results/http/
&gt; tests/inspector/target/target-events-for-provisional-page-expected.txt
&gt; +++
&gt; /Volumes/Data/slave/mojave-release-tests-wk2/build/layout-test-results/http/
&gt; tests/inspector/target/target-events-for-provisional-page-actual.txt
&gt; @@ -6,11 +6,5 @@
&gt;  
&gt;  == Running test suite: Target.PSON
&gt;  -- Running test case: ProvisionalPageTarget
&gt; -PASS: Should receive targetCreated event.
&gt; -PASS: Target should be provisional.
&gt; -PASS: Should receive didCommitProvisionalTarget event.
&gt; -PASS: Previous target should be the current one.
&gt; -PASS: Committed target should match provisional target.
&gt; -PASS: Should receive targetDestroyed event.
&gt; -PASS: Destroyed target should be previous target.
&gt; +!! TIMEOUT: took longer than 10000ms

Filed https://bugs.webkit.org/show_bug.cgi?id=203965 for tracking this. Looks like one of the previous tests disables PSON in the inspected page.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380469</attachid>
            <date>2019-10-08 15:03:50 -0700</date>
            <delta_ts>2019-10-08 16:57:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202704-20191008150349.patch</filename>
            <type>text/plain</type>
            <size>81262</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwODUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
NTUyMGI1MzJlMmFjYWVjM2RjMDg3NTQxOGI4ZWJhNzI3ZDM3ZTYwLi4yODM1MzhlNzViNTQwZDdj
ZTExMjI1YzZjY2M3MTcyZDA2MTAxM2U1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOCBAQAorMjAxOS0wOS0yNyAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBub3RpZnkgaW5zcGVjdG9yIHdoZW4gcHJv
dmlzaW9uYWwgcGFnZSBpcyBjcmVhdGVkLCBjb21taXR0ZWQgYW5kIGRlc3Ryb3llZAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyNzA0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yVGFyZ2V0Lmg6IGNoYW5nZWQgSW5zcGVjdG9yVGFyZ2V0IHRvIG5vdCByZXF1aXJlIEZy
b250ZW5kQ2hhbm5lbCBhcworICAgICAgICBhbGwgbWVzc2FnZXMgYXJlIHJvdXRlZCBieSBtZWFu
cyBvZiB0aGUgb3duaW5nIEluc3BlY3RvclRhcmdldEFnZW50LgorICAgICAgICAqIGluc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JUYXJnZXRBZ2VudDo6SW5zcGVjdG9yVGFyZ2V0QWdlbnQpOgorICAgICAgICAoSW5z
cGVjdG9yOjpidWlsZFRhcmdldEluZm9PYmplY3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JUYXJnZXRBZ2VudDo6dGFyZ2V0Q3JlYXRlZCk6CisgICAgICAgIChJbnNwZWN0b3I6Oklu
c3BlY3RvclRhcmdldEFnZW50Ojp0YXJnZXREZXN0cm95ZWQpOgorICAgICAgICAoSW5zcGVjdG9y
OjpJbnNwZWN0b3JUYXJnZXRBZ2VudDo6ZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQpOiB0aGlz
IG1ldGhvZCBpcyB1c2VkIHRvCisgICAgICAgIG5vdGlmeSBmcm9udGVuZCB0aGF0IGNvcnJlc3Bv
bmRpbmcgcHJvdmlzaW9uYWwgdGFyZ2V0IGhhcyBjb21taXR0ZWQgYW5kIHJlcGxhY2VkIHByZXZp
b3VzCisgICAgICAgIHRhcmdldC4KKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0
QWdlbnQ6OmNvbm5lY3Rpb25UeXBlIGNvbnN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVj
dG9yVGFyZ2V0QWdlbnQ6OmNvbm5lY3RUb1RhcmdldHMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JUYXJnZXRBZ2VudDo6ZGlzY29ubmVjdEZyb21UYXJnZXRzKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50Lmg6CisgICAgICAgICogaW5zcGVj
dG9yL3Byb3RvY29sL1RhcmdldC5qc29uOiBleHRlbmRlZCBUYXJnZXRJbmZvIHdpdGggcHJvdmlz
aW9uYWwgcGFnZSBkZXRhaWxzIGFuZAorICAgICAgICBhZGRlZCBldmVudCB3aGljaCBpcyBmaXJl
ZCB3aGVuIHByb3Zpc2lvbmFsIHBhZ2UgZ2V0cyBjb21taXR0ZWQuIElmIHByb3Zpc2lvbmFsCisg
ICAgICAgIGxvYWQgZmFpbHMgdGhlcmUgd2lsbCBiZSB0YXJnZXREZXN0cm95ZWQgZXZlbnQgd2l0
aG91dCBjb3JyZXNwb25kaW5nIGNvbW1pdC4KKwogMjAxOS0xMC0wOCAgWXVzdWtlIFN1enVraSAg
PHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIEZUTCB2bUNhbGwgc2hvdWxkIGNo
ZWNrICMgb2YgYXJndW1lbnRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTI3N2QzNDQyODNkNmFjNTBlN2RmMzdh
MDA4YWYyZDE1NGE2NzQyZi4uY2QyMDY1YjAxMmUxZTIwNDk3NDRjYjA5YmU0MTk0NDM4MjNmNTNm
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE5LTEwLTAxICBZdXJ5IFNlbWlraGF0
c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IG5vdGlm
eSBpbnNwZWN0b3Igd2hlbiBwcm92aXNpb25hbCBwYWdlIGlzIGNyZWF0ZWQsIGNvbW1pdHRlZCBh
bmQgZGVzdHJveWVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDI3MDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUZXN0OiBodHRwL3Rlc3RzL2luc3BlY3Rvci90YXJnZXQvdGFyZ2V0LWV2ZW50cy1mb3It
cHJvaXNpb25hbC1wYWdlLmh0bWwKKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNldElz
VW5kZXJUZXN0KTogVGhpcyBtZXRob2QgbWF5IGJlIGNhbGxlZCBzZXZlcmFsIHRpbWVzCisgICAg
ICAgIHdoZW4gcmVsb2FkaW5nIGluc3BlY3RlZCBwYWdlIHdpdGggb3BlbmVkIGZyb250ZW5kIHNv
IHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlcmUgYXJlIG5vCisgICAgICAgIGNvbm5lY3RlZCBmcm9u
dGVuZHMgd2hlbiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSB0ZXN0cyBkb2Vzbid0IGhvbGQg
YW55bW9yZS4KKwogMjAxOS0xMC0wOCAgeW91ZW5uIGZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+
CiAKICAgICAgICAgTWVkaWFTdHJlYW1UcmFjayBzaG91bGQgYmUgYSBQbGF0Zm9ybU1lZGlhU2Vz
c2lvbkNsaWVudCBpbnN0ZWFkIG9mIE1lZGlhU3RyZWFtCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwpp
bmRleCAwMDI1NTkyYTBiNjc3MTBlOGZhN2IwODM0MzRhYTkxNDMzMzllYzk3Li5lN2UzZjY0MGZh
NDU4OTk1Njc0OTI5MjQ5N2RjOGY2MGVlMWJkYzNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw2MSBAQAorMjAxOS0wOS0yNyAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBub3RpZnkgaW5zcGVjdG9yIHdo
ZW4gcHJvdmlzaW9uYWwgcGFnZSBpcyBjcmVhdGVkLCBjb21taXR0ZWQgYW5kIGRlc3Ryb3llZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyNzA0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlZCBm
cm9udGVuZCBjb2RlIHRvIHVuZGVyc3RhbmQgcHJvdmlzaW9uYWwgdGFyZ2V0cy4gRm9yIG5vdyB0
aGVyZSBhcmUKKyAgICAgICAgbm8gY2hhbmdlcyBmcm9udGVuZCBiZWhhdmlvciwgaXQgd2lsbCB3
YWl0IGZvciB0aGUgcHJvdmlzaW9uYWwgdGFyZ2V0IHRvIGNvbW1pdAorICAgICAgICBhbmQgd2ls
bCBub3Qgc2VuZCBhbnkgY29tbWFuZHMgdG8gaXQgYmVmb3JlIHRoYXQuCisKKyAgICAgICAgKiBV
c2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qczogTW92ZWQgYSBidW5jaCBvZiBtZXRob2RzIHNoYXJl
ZCBiZXR3ZWVuIE1haW4uanMgYW5kIFRlc3QuanMKKyAgICAgICAgdG8gVGFyZ2V0TWFuYWdlci5q
cyB0byBrZWVwIHRoZW0gaW4gc3luYy4KKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xs
ZXJzL1RhcmdldE1hbmFnZXIuanM6CisgICAgICAgIChXSS5UYXJnZXRNYW5hZ2VyKToKKyAgICAg
ICAgKFdJLlRhcmdldE1hbmFnZXIucHJvdG90eXBlLnJlbW92ZVRhcmdldCk6CisgICAgICAgIChX
SS5UYXJnZXRNYW5hZ2VyLnByb3RvdHlwZS5jcmVhdGVNdWx0aXBsZXhpbmdCYWNrZW5kVGFyZ2V0
KToKKyAgICAgICAgKFdJLlRhcmdldE1hbmFnZXIucHJvdG90eXBlLmNyZWF0ZURpcmVjdEJhY2tl
bmRUYXJnZXQpOgorICAgICAgICAoV0kuVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUudGFyZ2V0Q3Jl
YXRlZCk6CisgICAgICAgIChXSS5UYXJnZXRNYW5hZ2VyLnByb3RvdHlwZS5kaWRDb21taXRQcm92
aXNpb25hbFRhcmdldCk6CisgICAgICAgIChXSS5UYXJnZXRNYW5hZ2VyLnByb3RvdHlwZS50YXJn
ZXREZXN0cm95ZWQpOgorICAgICAgICAoV0kuVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUuZGlzcGF0
Y2hNZXNzYWdlRnJvbVRhcmdldCk6CisgICAgICAgIChXSS5UYXJnZXRNYW5hZ2VyLnByb3RvdHlw
ZS5fY2hlY2tBbmRIYW5kbGVQYWdlVGFyZ2V0VHJhbnNpdGlvbik6CisgICAgICAgIChXSS5UYXJn
ZXRNYW5hZ2VyLnByb3RvdHlwZS5fY2hlY2tBbmRIYW5kbGVQYWdlVGFyZ2V0VGVybWluYXRpb24p
OgorICAgICAgICAoV0kuVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUuX2luaXRpYWxpemVCYWNrZW5k
VGFyZ2V0KToKKyAgICAgICAgKFdJLlRhcmdldE1hbmFnZXIucHJvdG90eXBlLl9pbml0aWFsaXpl
UGFnZVRhcmdldCk6CisgICAgICAgIChXSS5UYXJnZXRNYW5hZ2VyLnByb3RvdHlwZS5fdHJhbnNp
dGlvblBhZ2VUYXJnZXQpOgorICAgICAgICAoV0kuVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUuX3Rl
cm1pbmF0ZVBhZ2VUYXJnZXQpOgorICAgICAgICAoV0kuVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUu
X3Jlc2V0TWFpbkV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV0kuVGFyZ2V0TWFuYWdlci5w
cm90b3R5cGUuX3JlZGlyZWN0R2xvYmFsQWdlbnRzVG9Db25uZWN0aW9uKToKKyAgICAgICAgKiBV
c2VySW50ZXJmYWNlL1Byb3RvY29sL0Nvbm5lY3Rpb24uanM6CisgICAgICAgIChJbnNwZWN0b3JC
YWNrZW5kLldvcmtlckNvbm5lY3Rpb24uc2VuZE1lc3NhZ2VUb0JhY2tlbmQpOgorICAgICAgICAo
SW5zcGVjdG9yQmFja2VuZC5Xb3JrZXJDb25uZWN0aW9uKToKKyAgICAgICAgKEluc3BlY3RvckJh
Y2tlbmQuVGFyZ2V0Q29ubmVjdGlvbi5zZW5kTWVzc2FnZVRvQmFja2VuZCk6CisgICAgICAgIChJ
bnNwZWN0b3JCYWNrZW5kLlRhcmdldENvbm5lY3Rpb24pOgorICAgICAgICAqIFVzZXJJbnRlcmZh
Y2UvUHJvdG9jb2wvVGFyZ2V0LmpzOgorICAgICAgICAoV0kuVGFyZ2V0LnByb3RvdHlwZS5kZXN0
cm95KTogTWFyayB0YXJnZXQgYXMgZGVzdHJveWVkIHRvIGRpc3Rpbmd1aXNoIGV4cGVjdGVkIGNv
bW1hbmQgZXJyb3JzIGZyb20KKyAgICAgICAgZ2VudWluZSBmYWlsdXJlcy4KKworICAgICAgICAo
V0kuVGFyZ2V0LnByb3RvdHlwZS5pc0Rlc3Ryb3llZCk6CisgICAgICAgICogVXNlckludGVyZmFj
ZS9Qcm90b2NvbC9UYXJnZXRPYnNlcnZlci5qczogU2luY2UgdGhlIGZyb250LWVuZCBkb2Vzbid0
CisgICAgICAgIHNlbmQgY29tbWFuZHMgdG8gdGhlIHByb3Zpc2lvbmFsIHRhcmdldHMgeWV0LCBp
dCBoYXMgdG8gaWdub3JlIGFsbCBhY3Rpdml0aWVzCisgICAgICAgIHJlbGF0ZWQgdG8gcHJvdmlz
aW9uYWwgcGFnZXMuIEZvciB0aGF0IHJlYXNvbiB3ZSBuZWVkIHR3byBzZXRzIHRvIGtlZXAgdHJh
Y2sgb2YKKyAgICAgICAgLSBwcm92aXNpb25hbCBwYWdlcyB0aGF0IHdlcmUgZGVzdHJveWVkIGFu
ZCBuZXZlciBjb21taXR0ZWQKKyAgICAgICAgLSBvbGQgcGFnZXMgd2hpY2ggd2VyZSByZXBsYWNl
ZCBieSBjb21taXR0ZWQgcGFnZSBhbmQgZm9yIHdoaWNoIGZvbGxvd2luZyB0YXJnZXREZXN0cm95
ZWQKKyAgICAgICAgZXZlbnQgc2hvdWxkIGJlIGlnbm9yZWQKKyAgICAgICAgQmV0dGVyIHN1cHBv
cnQgZm9yIHByb3Zpc2lvbmFsIHRhcmdldHMgd2lsbCBiZSBhZGRlZCB0byBmcm9udGVuZCBpbiBh
IHNlcGFyYXRlIGNoYW5nZS4KKyAgICAgICAgKFdJLlRhcmdldE9ic2VydmVyKToKKyAgICAgICAg
KFdJLlRhcmdldE9ic2VydmVyLnByb3RvdHlwZS50YXJnZXRDcmVhdGVkKToKKyAgICAgICAgKFdJ
LlRhcmdldE9ic2VydmVyLnByb3RvdHlwZS5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldCk6IEZv
ciBub3cgY29udmVydCB0aGUgZXZlbnQgaW50byBhIHN1YnNlcXVlbmNlCisgICAgICAgIG9mIHRh
cmdldERlc3Ryb3llZC90YXJnZXRDcmVhdGVkIGV2ZW50cyB3aGljaCBtYXRjaGVzIHByZXZpb3Vz
IGJlaGF2aW9yLgorCisgICAgICAgIChXSS5UYXJnZXRPYnNlcnZlci5wcm90b3R5cGUudGFyZ2V0
RGVzdHJveWVkKToKKyAgICAgICAgKFdJLlRhcmdldE9ic2VydmVyLnByb3RvdHlwZS5kaXNwYXRj
aE1lc3NhZ2VGcm9tVGFyZ2V0KToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Rlc3QvVGVzdC5q
czoKKyAgICAgICAgKFdJLnRyYW5zaXRpb25QYWdlVGFyZ2V0KToKKyAgICAgICAgKFdJLnRlcm1p
bmF0ZVBhZ2VUYXJnZXQpOgorCiAyMDE5LTEwLTA3ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFw
cGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBTZXR0aW5nczogZW5hYmxlIHRoZSBp
bWFnZSB0cmFuc3BhcmVuY3kgZ3JpZCBieSBkZWZhdWx0IGFuZCBjcmVhdGUgYSBjaGVja2JveCBm
b3IgaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKaW5kZXggNWY0NGZiODE4MzhhOTdlMTdjMGI1NjEyNDE4MjMzNWZlMTU5Yzc5
ZS4uZmRkOTk3OWExMmVkOTk2YzY3YzM2MzU1MGRlZjQ3OTA3YWMxZDNiZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAg
LTEsMyArMSw3NyBAQAorMjAxOS0wOS0yNyAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBub3RpZnkgaW5zcGVjdG9yIHdoZW4g
cHJvdmlzaW9uYWwgcGFnZSBpcyBjcmVhdGVkLCBjb21taXR0ZWQgYW5kIGRlc3Ryb3llZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyNzA0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGFyZ2V0LnRhcmdl
dENyZWF0ZWQgZXZlbnQgaXMgbm93IGdlbmVyYXRlZCBmb3IgcHJvdmlzaW9uYWwgcGFnZXMgYXMg
d2VsbCBhcyBmb3IgcmVndWxhcgorICAgICAgICBvbmVzLiBUaGlzIGlzIHRoZSBmaXJzdCBzdGVw
IHRvd2FyZCByZWF0dGFjaGluZyBpbnNwZWN0b3IgZWFybGllciBkdXJpbmcgUFNPTi4gSW4gdGhl
IGZ1dHVyZQorICAgICAgICBpZiBkZWJ1Z2dpbmcgaXMgaW4gcHJvZ3Jlc3MgdGhlIHByb3Zpc2lv
bmFsIHRhcmdldCAocGFnZSkgd2lsbCBiZSBwYXVzZWQgdW50aWwgYSBzaWduYWwgZnJvbQorICAg
ICAgICBpbnNwZWN0b3IgZnJvbnRlbmQuIFRoaXMgd2lsbCBlbmFibGUgdGhlIGZyb250ZW5kIGNv
bmZpZ3VyZSBhbGwgYWdlbnRzIGJlZm9yZSBuYXZpZ2F0aW9uIHN0YXJ0cy4KKworICAgICAgICAq
IFNvdXJjZXMudHh0OgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3JUYXJnZXRQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvclRhcmdldFByb3h5OjpjcmVhdGUpOgorICAg
ICAgICAoV2ViS2l0OjpJbnNwZWN0b3JUYXJnZXRQcm94eTo6Y29ubmVjdCk6CisgICAgICAgIChX
ZWJLaXQ6Okluc3BlY3RvclRhcmdldFByb3h5OjpkaXNjb25uZWN0KToKKyAgICAgICAgKFdlYktp
dDo6SW5zcGVjdG9yVGFyZ2V0UHJveHk6OnNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKToKKyAg
ICAgICAgKFdlYktpdDo6SW5zcGVjdG9yVGFyZ2V0UHJveHk6OmRpZENvbW1pdFByb3Zpc2lvbmFs
VGFyZ2V0KToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yVGFyZ2V0UHJveHk6OmlzUHJvdmlz
aW9uYWwgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JUYXJnZXRQcm94eTo6cHJl
dmlvdXNUYXJnZXRJRCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3RvclRhcmdl
dFByb3h5Lmg6IFRhcmdldCBwcm94eSBjYW4gc3RhcnQgYXMgYSBwcm92aXNpb25hbCB0YXJnZXQg
KHdpdGggYSBwb2ludGVyIHRvCisgICAgICAgIFByb3Zpc2lvbmFsUGFnZVByb3h5KSBhbmQgbGF0
ZXIgZWl0aGVyIGJlIGNvbW1pdHRlZCBvciBkZXN0cm95ZWQuCisKKyAgICAgICAgKiBVSVByb2Nl
c3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpQcm92aXNpb25h
bFBhZ2VQcm94eTo6UHJvdmlzaW9uYWxQYWdlUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpQcm92
aXNpb25hbFBhZ2VQcm94eTo6flByb3Zpc2lvbmFsUGFnZVByb3h5KToKKyAgICAgICAgKFdlYktp
dDo6UHJvdmlzaW9uYWxQYWdlUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlKTogRm9yd2FyZCBpbnNw
ZWN0b3IgbWVzc2FnZXMgdG8gcGFyZW50IHBhZ2UncyBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxl
ci4KKyAgICAgICAgU2luY2UgZWFjaCBXZWJQYWdlIGhhcyBhIHVuaXF1ZSBpZGVudGlmaWVyIHRo
ZSB0YXJnZXQgaWRzIHdpbGwgYmUgZ2xvYmFsbHkgdW5pcXVlIGFuZCB0aGVyZSBpcyBubyByaXNr
IG9mIGNvbGxpc2lvbnMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJv
eHkuaDoKKyAgICAgICAgKFdlYktpdDo6UHJvdmlzaW9uYWxQYWdlUHJveHk6OnBhZ2UgY29uc3Qp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OmdldFRhcmdldElEKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUlu
c3BlY3RvckNvbnRyb2xsZXI6OldlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmNsZWFyVGFyZ2V0cyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpjcmVhdGVJbnNwZWN0b3JU
YXJnZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGVz
dHJveUluc3BlY3RvclRhcmdldCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VJbnNwZWN0b3JD
b250cm9sbGVyOjpkaWRDcmVhdGVQcm92aXNpb25hbFBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkRGVzdHJveVByb3Zpc2lvbmFsUGFnZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDb21taXRQcm92
aXNpb25hbFBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxl
cjo6YWRkVGFyZ2V0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvckNvbnRy
b2xsZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50
LmNwcDogUmVtb3ZlZC4gTWVyZ2VkIHRoaXMgYWdlbnQgaW50byBJbnNwZWN0b3JUYXJnZXRBZ2Vu
dC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50Lmg6IFJl
bW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6Om1fcmVzZXRSZWNlbnRDcmFzaENvdW50VGltZXIpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlUHJveHk6OmZpbmlzaEF0dGFjaGluZ1RvV2ViUHJvY2Vzcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6Y29tbWl0UHJvdmlzaW9uYWxQYWdlKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViUGFnZVByb3h5Lmg6IE1vdmVkIHRoZSB0YXJnZXQgbWFuYWdlbWVudCBsb2dpYyBp
bnRvIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLgorICAgICAgICBXZWJQYWdlUHJveHkvUHJv
dmlzaW9uYWxQYWdlUHJveHkgYXJlIGV4cGVjdGVkIHRvIG5vdGlmaXkgaXQgYWJvdXQga2V5IGxp
ZmVjeWNsZSBldmVudHMgYW5kIGFsc28KKyAgICAgICAgZm9yd2FyZCB0byBpdCBtZXNzYWdlcyBm
cm9tIGluc3BlY3RvciBpbiB0aGUgaW5zcGVjdGVkIFdlYlByb2Nlc3MuIEhvdyBpdCB0cmFuc2xh
dGVzIHRvIFRhcmdldAorICAgICAgICBldmVudHMgaXMgaW5zcGVjdG9yJ3MgYnVzaW5lc3MuCisK
KyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OmlkZW50aWZpZXIgY29uc3QpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojpjb25uZWN0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZUluc3BlY3RvclRhcmdldDo6ZGlzY29ubmVjdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OnRvVGFyZ2V0SUQpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Lmg6IE1hZGUgdGhlIHRhcmdldCBv
d24gZnJvbnRlbmQgY2hhbm5lbCBpbnN0YW5jZSBhcyBpdCdzIHRoZQorICAgICAgICBvbmx5IHBs
YWNlIHdoZXJlIHRoZSBwYWdlIHNwZWNpZmljIGNoYW5uZWwgaXMgdXNlZC4KKworICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpyZW1v
dmVUYXJnZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJv
bGxlcjo6Y29ubmVjdEluc3BlY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VJbnNwZWN0
b3JUYXJnZXRDb250cm9sbGVyOjpkaXNjb25uZWN0SW5zcGVjdG9yKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuaDoKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hh
bm5lbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVu
ZENoYW5uZWw6OldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsOjpzZW5kTWVz
c2FnZVRvRnJvbnRlbmQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmg6IFRoZSBjaGFubmVsJ3MgbGlmZXRpbWUgaXMg
bWFuYWdlZCBieSBvd25pbmcKKyAgICAgICAgdGFyZ2V0LiBObyBuZWVkIHRvIHJlZmVyZW5jZSBj
b3VudCBpdC4KKwogMjAxOS0xMC0wOCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+
CiAKICAgICAgICAgU2VydmljZSBXb3JrZXIgRmV0Y2ggZXZlbnRzIHNob3VsZCB0aW1lIG91dC4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGFy
Z2V0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRhcmdldC5o
CmluZGV4IDllZGFhMWY0MjA5NWYwNjJmNDVhODEwM2ZhMjc0YjUxNWI2MmYxOGIuLmE2OTQzNzcy
MDQ2ZmFjOTdjMGY5NTE4ZjI4NDg3ZWI5NTg5YTI2ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGFyZ2V0LmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUYXJnZXQuaApAQCAtNDcsOSArNDcsMTIgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgU3RyaW5nIGlkZW50aWZpZXIoKSBjb25zdCA9IDA7CiAgICAg
dmlydHVhbCBJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUoKSBjb25zdCA9IDA7CiAKKyAgICB2aXJ0
dWFsIGJvb2wgaXNQcm92aXNpb25hbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCBTdHJpbmcgcHJldmlvdXNUYXJnZXRJRCgpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygpOyB9
CisKICAgICAvLyBDb25uZWN0aW9uIG1hbmFnZW1lbnQuCi0gICAgdmlydHVhbCB2b2lkIGNvbm5l
Y3QoRnJvbnRlbmRDaGFubmVsJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0KEZy
b250ZW5kQ2hhbm5lbCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29ubmVjdChGcm9udGVuZENo
YW5uZWw6OkNvbm5lY3Rpb25UeXBlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpc2Nvbm5lY3Qo
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0
IFN0cmluZyYpID0gMDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmNwcAppbmRleCBj
NmM2YmY4MDZlMmUyNmIxNTRiZjljYTcyYzBjY2FlOTRmNTAzY2FhLi5jMzBhMDI5MmEwYjdjYWVi
OTY1YjFlMjAwYTY4YjgwZGFhOGVmMjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3Bw
CkBAIC0zMiw2ICszMiw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBJbnNwZWN0b3JUYXJn
ZXRBZ2VudDo6SW5zcGVjdG9yVGFyZ2V0QWdlbnQoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91
dGVyLCBCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIpCiAgICAgOiBJbnNwZWN0
b3JBZ2VudEJhc2UoIlRhcmdldCJfcykKKyAgICAsIG1fcm91dGVyKGZyb250ZW5kUm91dGVyKQog
ICAgICwgbV9mcm9udGVuZERpc3BhdGNoZXIobWFrZVVuaXF1ZTxUYXJnZXRGcm9udGVuZERpc3Bh
dGNoZXI+KGZyb250ZW5kUm91dGVyKSkKICAgICAsIG1fYmFja2VuZERpc3BhdGNoZXIoVGFyZ2V0
QmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShiYWNrZW5kRGlzcGF0Y2hlciwgdGhpcykpCiB7CkBA
IC05NiwxMCArOTcsMTUgQEAgc3RhdGljIFByb3RvY29sOjpUYXJnZXQ6OlRhcmdldEluZm86OlR5
cGUgdGFyZ2V0VHlwZVRvUHJvdG9jb2xUeXBlKEluc3BlY3RvclRhcmcKIAogc3RhdGljIFJlZjxQ
cm90b2NvbDo6VGFyZ2V0OjpUYXJnZXRJbmZvPiBidWlsZFRhcmdldEluZm9PYmplY3QoY29uc3Qg
SW5zcGVjdG9yVGFyZ2V0JiB0YXJnZXQpCiB7Ci0gICAgcmV0dXJuIFByb3RvY29sOjpUYXJnZXQ6
OlRhcmdldEluZm86OmNyZWF0ZSgpCisgICAgYXV0byByZXN1bHQgPSBQcm90b2NvbDo6VGFyZ2V0
OjpUYXJnZXRJbmZvOjpjcmVhdGUoKQogICAgICAgICAuc2V0VGFyZ2V0SWQodGFyZ2V0LmlkZW50
aWZpZXIoKSkKICAgICAgICAgLnNldFR5cGUodGFyZ2V0VHlwZVRvUHJvdG9jb2xUeXBlKHRhcmdl
dC50eXBlKCkpKQogICAgICAgICAucmVsZWFzZSgpOworICAgIGlmICh0YXJnZXQuaXNQcm92aXNp
b25hbCgpKSB7CisgICAgICAgIHJlc3VsdC0+c2V0SXNQcm92aXNpb25hbCh0cnVlKTsKKyAgICAg
ICAgcmVzdWx0LT5zZXRQcmV2aW91c1RhcmdldElkKHRhcmdldC5wcmV2aW91c1RhcmdldElEKCkp
OworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB2b2lkIEluc3BlY3RvclRhcmdldEFn
ZW50Ojp0YXJnZXRDcmVhdGVkKEluc3BlY3RvclRhcmdldCYgdGFyZ2V0KQpAQCAtMTEwLDcgKzEx
Niw3IEBAIHZvaWQgSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OnRhcmdldENyZWF0ZWQoSW5zcGVjdG9y
VGFyZ2V0JiB0YXJnZXQpCiAgICAgaWYgKCFtX2lzQ29ubmVjdGVkKQogICAgICAgICByZXR1cm47
CiAKLSAgICB0YXJnZXQuY29ubmVjdChmcm9udGVuZENoYW5uZWwoKSk7CisgICAgdGFyZ2V0LmNv
bm5lY3QoY29ubmVjdGlvblR5cGUoKSk7CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+dGFy
Z2V0Q3JlYXRlZChidWlsZFRhcmdldEluZm9PYmplY3QodGFyZ2V0KSk7CiB9CkBAIC0xMjIsMjcg
KzEyOCw0MiBAQCB2b2lkIEluc3BlY3RvclRhcmdldEFnZW50Ojp0YXJnZXREZXN0cm95ZWQoSW5z
cGVjdG9yVGFyZ2V0JiB0YXJnZXQpCiAgICAgaWYgKCFtX2lzQ29ubmVjdGVkKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICB0YXJnZXQuZGlzY29ubmVjdChmcm9udGVuZENoYW5uZWwoKSk7CisgICAg
dGFyZ2V0LmRpc2Nvbm5lY3QoKTsKIAogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT50YXJnZXRE
ZXN0cm95ZWQodGFyZ2V0LmlkZW50aWZpZXIoKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGFyZ2V0
QWdlbnQ6OmNvbm5lY3RUb1RhcmdldHMoKQordm9pZCBJbnNwZWN0b3JUYXJnZXRBZ2VudDo6ZGlk
Q29tbWl0UHJvdmlzaW9uYWxUYXJnZXQoY29uc3QgU3RyaW5nJiBvbGRUYXJnZXRJRCwgY29uc3Qg
U3RyaW5nJiBjb21taXR0ZWRUYXJnZXRJRCkKK3sKKyAgICBpZiAoIW1faXNDb25uZWN0ZWQpCisg
ICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIHRhcmdldCA9IG1fdGFyZ2V0cy5nZXQoY29tbWl0
dGVkVGFyZ2V0SUQpOworICAgIGlmICghdGFyZ2V0KQorICAgICAgICByZXR1cm47CisKKyAgICBh
dXRvIHRhcmdldEluZm8gPSBidWlsZFRhcmdldEluZm9PYmplY3QoKnRhcmdldCk7CisgICAgdGFy
Z2V0SW5mby0+c2V0UHJldmlvdXNUYXJnZXRJZChvbGRUYXJnZXRJRCk7CisgICAgbV9mcm9udGVu
ZERpc3BhdGNoZXItPmRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0KFdURk1vdmUodGFyZ2V0SW5m
bykpOworfQorCitGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlIEluc3BlY3RvclRhcmdl
dEFnZW50Ojpjb25uZWN0aW9uVHlwZSgpIGNvbnN0CiB7Ci0gICAgYXV0byYgY2hhbm5lbCA9IGZy
b250ZW5kQ2hhbm5lbCgpOworICAgIHJldHVybiBtX3JvdXRlci5oYXNMb2NhbEZyb250ZW5kKCkg
PyBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGU6OkxvY2FsIDogSW5z
cGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlOjpSZW1vdGU7Cit9CiAKK3Zv
aWQgSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OmNvbm5lY3RUb1RhcmdldHMoKQorewogICAgIGZvciAo
SW5zcGVjdG9yVGFyZ2V0KiB0YXJnZXQgOiBtX3RhcmdldHMudmFsdWVzKCkpIHsKLSAgICAgICAg
dGFyZ2V0LT5jb25uZWN0KGNoYW5uZWwpOworICAgICAgICB0YXJnZXQtPmNvbm5lY3QoY29ubmVj
dGlvblR5cGUoKSk7CiAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT50YXJnZXRDcmVhdGVk
KGJ1aWxkVGFyZ2V0SW5mb09iamVjdCgqdGFyZ2V0KSk7CiAgICAgfQogfQogCiB2b2lkIEluc3Bl
Y3RvclRhcmdldEFnZW50OjpkaXNjb25uZWN0RnJvbVRhcmdldHMoKQogewotICAgIGF1dG8mIGNo
YW5uZWwgPSBmcm9udGVuZENoYW5uZWwoKTsKLQogICAgIGZvciAoSW5zcGVjdG9yVGFyZ2V0KiB0
YXJnZXQgOiBtX3RhcmdldHMudmFsdWVzKCkpCi0gICAgICAgIHRhcmdldC0+ZGlzY29ubmVjdChj
aGFubmVsKTsKKyAgICAgICAgdGFyZ2V0LT5kaXNjb25uZWN0KCk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmgKaW5kZXggMDBmYzNiMDIxNzM0
NGJlNGNkZmY3OTExYzIxMzcxOGM1Yjk1Y2VlMy4uYTQ1YjgzMjg5YmQ1OGE0NjE0ODI4NjNlZGQ1
MGEyMjY4NTRiMDg4MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oCkBAIC0yNyw2ICsyNyw3
IEBACiAKICNpbmNsdWRlICJJbnNwZWN0b3JBZ2VudEJhc2UuaCIKICNpbmNsdWRlICJJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KIApAQCAtNDAsNiArNDEsNyBAQCBjbGFzcyBKU19FWFBPUlRfUFJJ
VkFURSBJbnNwZWN0b3JUYXJnZXRBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1
YmxpYwogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvclRhcmdldEFnZW50KTsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKKyAgICBJbnNwZWN0b3JUYXJnZXRB
Z2VudChGcm9udGVuZFJvdXRlciYsIEJhY2tlbmREaXNwYXRjaGVyJik7CiAgICAgdmlydHVhbCB+
SW5zcGVjdG9yVGFyZ2V0QWdlbnQoKTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50QmFzZQpAQCAt
NTMsMTkgKzU1LDE4IEBAIHB1YmxpYzoKICAgICAvLyBUYXJnZXQgbGlmZWN5Y2xlLgogICAgIHZv
aWQgdGFyZ2V0Q3JlYXRlZChJbnNwZWN0b3JUYXJnZXQmKTsKICAgICB2b2lkIHRhcmdldERlc3Ry
b3llZChJbnNwZWN0b3JUYXJnZXQmKTsKKyAgICB2b2lkIGRpZENvbW1pdFByb3Zpc2lvbmFsVGFy
Z2V0KGNvbnN0IFN0cmluZyYgb2xkVGFyZ2V0SUQsIGNvbnN0IFN0cmluZyYgY29tbWl0dGVkVGFy
Z2V0SUQpOwogCiAgICAgLy8gVGFyZ2V0IG1lc3NhZ2VzLgogICAgIHZvaWQgc2VuZE1lc3NhZ2VG
cm9tVGFyZ2V0VG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpOwogCi1wcm90ZWN0ZWQ6Ci0gICAgSW5zcGVjdG9yVGFyZ2V0QWdlbnQoRnJvbnRl
bmRSb3V0ZXImLCBCYWNrZW5kRGlzcGF0Y2hlciYpOwotCi0gICAgdmlydHVhbCBGcm9udGVuZENo
YW5uZWwmIGZyb250ZW5kQ2hhbm5lbCgpID0gMDsKLQogcHJpdmF0ZToKKyAgICAvLyBGcm9udGVu
ZENoYW5uZWwKKyAgICBGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlIGNvbm5lY3Rpb25U
eXBlKCkgY29uc3Q7CiAgICAgdm9pZCBjb25uZWN0VG9UYXJnZXRzKCk7CiAgICAgdm9pZCBkaXNj
b25uZWN0RnJvbVRhcmdldHMoKTsKIAorICAgIEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXImIG1f
cm91dGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxUYXJnZXRGcm9udGVuZERpc3BhdGNoZXI+IG1f
ZnJvbnRlbmREaXNwYXRjaGVyOwogICAgIFJlZjxUYXJnZXRCYWNrZW5kRGlzcGF0Y2hlcj4gbV9i
YWNrZW5kRGlzcGF0Y2hlcjsKICAgICBIYXNoTWFwPFN0cmluZywgSW5zcGVjdG9yVGFyZ2V0Kj4g
bV90YXJnZXRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9w
cm90b2NvbC9UYXJnZXQuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJv
dG9jb2wvVGFyZ2V0Lmpzb24KaW5kZXggNjFhZDI2OWQ5NWUxOGZkNTlkYTU1YzdjM2VmN2Q1ZDE0
YWQxMzJkYS4uNjI2OTc5Nzk4OGMyMjZjMmY3MmMzMWMzODM3M2NkODQ4ZTMxNjM3NCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9UYXJnZXQuanNv
bgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1RhcmdldC5q
c29uCkBAIC04LDcgKzgsOSBAQAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRlc2NyaXB0
aW9uIG9mIGEgdGFyZ2V0LiIsCiAgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKICAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInRhcmdldElkIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0
aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgdGFyZ2V0LiIgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInR5cGUiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiamF2YXNj
cmlwdCIsICJwYWdlIiwgIndvcmtlciIsICJzZXJ2aWNld29ya2VyIl0gfQorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAidHlwZSIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJqYXZhc2Ny
aXB0IiwgInBhZ2UiLCAid29ya2VyIiwgInNlcnZpY2V3b3JrZXIiXSB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiaXNQcm92aXNpb25hbCIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9u
YWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiV2hldGhlciB0aGlzIGlzIGEgcHJvdmlzaW9uYWwg
cGFnZSB0YXJnZXQuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJldmlvdXNUYXJn
ZXRJZCIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6
ICJGb3IgYSBwcm92aXNpb25hbCB0YXJnZXQgcmVwcmVzZW5zIElEIG9mIHRoZSB0YXJnZXQgaXQg
aXMgc3dhcHBlZCB3aXRoIHdoZW4gY29tbWl0dGVkLiIgfQogICAgICAgICAgICAgXQogICAgICAg
ICB9CiAgICAgXSwKQEAgLTM5LDYgKzQxLDEyIEBACiAgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJ0YXJnZXRJZCIsICJ0eXBlIjogInN0cmluZyIgfQogICAgICAgICAgICAgXQogICAgICAgICB9
LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJkaWRDb21taXRQcm92aXNpb25hbFRh
cmdldCIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInRhcmdldEluZm8iLCAiJHJlZiI6ICJUYXJnZXRJbmZvIiwgImRlc2NyaXB0aW9uIjog
IkNvbW1pdHRlZCB0YXJnZXQgaW5mby4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKICAg
ICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAiZGlzcGF0Y2hNZXNzYWdlRnJvbVRhcmdldCIs
CiAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCAyYzY3YjcyNDQ4MzFmNjA1ZjA4ZGY0
MTI1ZjIxY2VlYzcxYzkwY2E5Li5kZTU0MmU5NTMyYzFhZmY2YWJhOWU3NTcyMDQ2ZWFhMjlkYTdk
MDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuY3BwCkBAIC0zNDYsMTMgKzM0Niw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2hv
dygpCiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0SXNVbmRlclRlc3QoYm9vbCB2YWx1
ZSkKIHsKLSAgICBpZiAodmFsdWUgPT0gbV9pc1VuZGVyVGVzdCkKLSAgICAgICAgcmV0dXJuOwot
CiAgICAgbV9pc1VuZGVyVGVzdCA9IHZhbHVlOwotCi0gICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzI2
NzY4NjI4PiBUcnkgdG8gY2F0Y2ggc3VzcGljaW91cyBzY2VuYXJpb3Mgd2hlcmUgd2UgbWF5IGhh
dmUgYSBkYW5nbGluZyBmcm9udGVuZCB3aGlsZSBydW5uaW5nIHRlc3RzLgotICAgIFJFTEVBU0Vf
QVNTRVJUKCFtX2lzVW5kZXJUZXN0IHx8ICFtX2Zyb250ZW5kUm91dGVyLT5oYXNGcm9udGVuZHMo
KSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZXZhbHVhdGVGb3JUZXN0SW5Gcm9u
dGVuZChjb25zdCBTdHJpbmcmIHNjcmlwdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcwppbmRleCBmMjQ2MTYyOTZlNDc4ZDI5NjM5ZWYyM2Qx
MTdkOGQyNzZlMGYzZWE4Li4zNzIzOGUzYTE4NTA1MWEyMDgxZTYwZTA4MzFiODJmODE2NjQ4ZjI1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01h
aW4uanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWlu
LmpzCkBAIC0xNzksODUgKzE3OSw2IEBAIFdJLmxvYWRlZCA9IGZ1bmN0aW9uKCkKICAgICB9CiB9
OwogCi1XSS5pbml0aWFsaXplQmFja2VuZFRhcmdldCA9IGZ1bmN0aW9uKHRhcmdldCkKLXsKLSAg
ICBjb25zb2xlLmFzc2VydCghV0kubWFpblRhcmdldCk7Ci0KLSAgICBXSS5iYWNrZW5kVGFyZ2V0
ID0gdGFyZ2V0OwotCi0gICAgV0kucmVzZXRNYWluRXhlY3V0aW9uQ29udGV4dCgpOwotCi0gICAg
V0kuX3RhcmdldHNBdmFpbGFibGVQcm9taXNlLnJlc29sdmUoKTsKLX07Ci0KLVdJLmluaXRpYWxp
emVQYWdlVGFyZ2V0ID0gZnVuY3Rpb24odGFyZ2V0KQotewotICAgIGNvbnNvbGUuYXNzZXJ0KFdJ
LnNoYXJlZEFwcC5kZWJ1Z2dhYmxlVHlwZSA9PT0gV0kuRGVidWdnYWJsZVR5cGUuV2ViKTsKLSAg
ICBjb25zb2xlLmFzc2VydCh0YXJnZXQudHlwZSA9PT0gV0kuVGFyZ2V0LlR5cGUuUGFnZSB8fCB0
YXJnZXQgaW5zdGFuY2VvZiBXSS5EaXJlY3RCYWNrZW5kVGFyZ2V0KTsKLQotICAgIFdJLnBhZ2VU
YXJnZXQgPSB0YXJnZXQ7Ci0KLSAgICBXSS5yZWRpcmVjdEdsb2JhbEFnZW50c1RvQ29ubmVjdGlv
bihXSS5wYWdlVGFyZ2V0LmNvbm5lY3Rpb24pOwotCi0gICAgV0kucmVzZXRNYWluRXhlY3V0aW9u
Q29udGV4dCgpOwotfTsKLQotV0kudHJhbnNpdGlvblBhZ2VUYXJnZXQgPSBmdW5jdGlvbih0YXJn
ZXQpCi17Ci0gICAgY29uc29sZS5hc3NlcnQoIVdJLnBhZ2VUYXJnZXQpOwotICAgIGNvbnNvbGUu
YXNzZXJ0KFdJLnNoYXJlZEFwcC5kZWJ1Z2dhYmxlVHlwZSA9PT0gV0kuRGVidWdnYWJsZVR5cGUu
V2ViKTsKLSAgICBjb25zb2xlLmFzc2VydCh0YXJnZXQudHlwZSA9PT0gV0kuVGFyZ2V0LlR5cGUu
UGFnZSk7Ci0KLSAgICBXSS5wYWdlVGFyZ2V0ID0gdGFyZ2V0OwotCi0gICAgV0kucmVkaXJlY3RH
bG9iYWxBZ2VudHNUb0Nvbm5lY3Rpb24oV0kucGFnZVRhcmdldC5jb25uZWN0aW9uKTsKLQotICAg
IFdJLnJlc2V0TWFpbkV4ZWN1dGlvbkNvbnRleHQoKTsKLQotICAgIC8vIEFjdGlvbnMgdG8gdHJh
bnNpdGlvbiB0aGUgcGFnZSB0YXJnZXQuCi0gICAgV0kubm90aWZpY2F0aW9ucy5kaXNwYXRjaEV2
ZW50VG9MaXN0ZW5lcnMoV0kuTm90aWZpY2F0aW9uLlRyYW5zaXRpb25QYWdlVGFyZ2V0KTsKLSAg
ICBXSS5kb21NYW5hZ2VyLnRyYW5zaXRpb25QYWdlVGFyZ2V0KCk7Ci0gICAgV0kubmV0d29ya01h
bmFnZXIudHJhbnNpdGlvblBhZ2VUYXJnZXQoKTsKLSAgICBXSS50aW1lbGluZU1hbmFnZXIudHJh
bnNpdGlvblBhZ2VUYXJnZXQoKTsKLX07Ci0KLVdJLnRlcm1pbmF0ZVBhZ2VUYXJnZXQgPSBmdW5j
dGlvbih0YXJnZXQpCi17Ci0gICAgY29uc29sZS5hc3NlcnQoV0kucGFnZVRhcmdldCk7Ci0gICAg
Y29uc29sZS5hc3NlcnQoV0kucGFnZVRhcmdldCA9PT0gdGFyZ2V0KTsKLSAgICBjb25zb2xlLmFz
c2VydChXSS5zaGFyZWRBcHAuZGVidWdnYWJsZVR5cGUgPT09IFdJLkRlYnVnZ2FibGVUeXBlLldl
Yik7Ci0KLSAgICAvLyBSZW1vdmUgYW55IFdvcmtlciB0YXJnZXRzIGFzc29jaWF0ZWQgd2l0aCB0
aGlzIHBhZ2UuCi0gICAgbGV0IHdvcmtlclRhcmdldHMgPSBXSS50YXJnZXRzLmZpbHRlcigoeCkg
PT4geC50eXBlID09PSBXSS5UYXJnZXQuVHlwZS5Xb3JrZXIpOwotICAgIGZvciAobGV0IHdvcmtl
clRhcmdldCBvZiB3b3JrZXJUYXJnZXRzKQotICAgICAgICBXSS53b3JrZXJNYW5hZ2VyLndvcmtl
clRlcm1pbmF0ZWQod29ya2VyVGFyZ2V0LmlkZW50aWZpZXIpOwotCi0gICAgV0kucGFnZVRhcmdl
dCA9IG51bGw7Ci0KLSAgICBXSS5yZWRpcmVjdEdsb2JhbEFnZW50c1RvQ29ubmVjdGlvbihXSS5i
YWNrZW5kQ29ubmVjdGlvbik7Ci19OwotCi1XSS5yZXNldE1haW5FeGVjdXRpb25Db250ZXh0ID0g
ZnVuY3Rpb24oKQotewotICAgIGlmIChXSS5tYWluVGFyZ2V0IGluc3RhbmNlb2YgV0kuTXVsdGlw
bGV4aW5nQmFja2VuZFRhcmdldCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKFdJLm1haW5U
YXJnZXQuZXhlY3V0aW9uQ29udGV4dCkgewotICAgICAgICBXSS5ydW50aW1lTWFuYWdlci5hY3Rp
dmVFeGVjdXRpb25Db250ZXh0ID0gV0kubWFpblRhcmdldC5leGVjdXRpb25Db250ZXh0OwotICAg
ICAgICBpZiAoV0kucXVpY2tDb25zb2xlKQotICAgICAgICAgICAgV0kucXVpY2tDb25zb2xlLmlu
aXRpYWxpemVNYWluRXhlY3V0aW9uQ29udGV4dFBhdGhDb21wb25lbnQoKTsKLSAgICB9Ci19Owot
Ci1XSS5yZWRpcmVjdEdsb2JhbEFnZW50c1RvQ29ubmVjdGlvbiA9IGZ1bmN0aW9uKGNvbm5lY3Rp
b24pCi17Ci0gICAgLy8gVGhpcyBtYWtlcyBnbG9iYWwgd2luZG93LkZvb0FnZW50IGRpc3BhdGNo
IHRvIHRoZSBhY3RpdmUgcGFnZSB0YXJnZXQuCi0gICAgZm9yIChsZXQgW2RvbWFpbiwgYWdlbnRd
IG9mIE9iamVjdC5lbnRyaWVzKEluc3BlY3RvckJhY2tlbmQuX2FnZW50cykpIHsKLSAgICAgICAg
aWYgKGRvbWFpbiAhPT0gIlRhcmdldCIpCi0gICAgICAgICAgICBhZ2VudC5jb25uZWN0aW9uID0g
Y29ubmVjdGlvbjsKLSAgICB9Ci19OwotCiBXSS5jb250ZW50TG9hZGVkID0gZnVuY3Rpb24oKQog
ewogICAgIC8vIElmIHRoZXJlIHdhcyBhbiB1bmNhdWdodCBleGNlcHRpb24gZWFybGllciBkdXJp
bmcgbG9hZGluZywgdGhlbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvQ29udHJvbGxlcnMvVGFyZ2V0TWFuYWdlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1RhcmdldE1hbmFnZXIuanMKaW5kZXggYTlm
YTRkZTBlODNhNmI2NzE3MzRiOGFlNmEzMGM4OGQzNWFjN2IxOC4uYjE1ODZjMTU2YTA2ZWYzMjJi
YzM4MTk5NThlNzdjZmMzMjNkNGQ5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvVGFyZ2V0TWFuYWdlci5qcworKysgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9UYXJnZXRNYW5hZ2VyLmpz
CkBAIC0zMyw2ICszMyw5IEBAIFdJLlRhcmdldE1hbmFnZXIgPSBjbGFzcyBUYXJnZXRNYW5hZ2Vy
IGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIHRoaXMuX2NhY2hlZFRhcmdldHNMaXN0ID0gbnVs
bDsKICAgICAgICAgdGhpcy5fc2VlblBhZ2VUYXJnZXQgPSBmYWxzZTsKICAgICAgICAgdGhpcy5f
dHJhbnNpdGlvblRpbWVvdXRJZGVudGlmaWVyID0gdW5kZWZpbmVkOworCisgICAgICAgIHRoaXMu
X3Byb3Zpc2lvbmFsVGFyZ2V0SWRzID0gbmV3IFNldDsKKyAgICAgICAgdGhpcy5fc3dhcHBlZFRh
cmdldElkcyA9IG5ldyBTZXQ7CiAgICAgfQogCiAgICAgLy8gUHVibGljCkBAIC04MCw2ICs4Myw3
IEBAIFdJLlRhcmdldE1hbmFnZXIgPSBjbGFzcyBUYXJnZXRNYW5hZ2VyIGV4dGVuZHMgV0kuT2Jq
ZWN0CiAKICAgICAgICAgdGhpcy5fY2FjaGVkVGFyZ2V0c0xpc3QgPSBudWxsOwogICAgICAgICB0
aGlzLl90YXJnZXRzLmRlbGV0ZSh0YXJnZXQuaWRlbnRpZmllcik7CisgICAgICAgIHRhcmdldC5k
ZXN0cm95KCk7CiAKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV0kuVGFy
Z2V0TWFuYWdlci5FdmVudC5UYXJnZXRSZW1vdmVkLCB7dGFyZ2V0fSk7CiAgICAgfQpAQCAtODks
NyArOTMsNyBAQCBXSS5UYXJnZXRNYW5hZ2VyID0gY2xhc3MgVGFyZ2V0TWFuYWdlciBleHRlbmRz
IFdJLk9iamVjdAogICAgICAgICBsZXQgdGFyZ2V0ID0gbmV3IFdJLk11bHRpcGxleGluZ0JhY2tl
bmRUYXJnZXQ7CiAgICAgICAgIHRhcmdldC5pbml0aWFsaXplKCk7CiAKLSAgICAgICAgV0kuaW5p
dGlhbGl6ZUJhY2tlbmRUYXJnZXQodGFyZ2V0KTsKKyAgICAgICAgdGhpcy5faW5pdGlhbGl6ZUJh
Y2tlbmRUYXJnZXQodGFyZ2V0KTsKIAogICAgICAgICAvLyBBZGQgdGhlIHRhcmdldCB3aXRob3V0
IGRpc3BhdGNoaW5nIGFuIGV2ZW50LgogICAgICAgICB0aGlzLl90YXJnZXRzLnNldCh0YXJnZXQu
aWRlbnRpZmllciwgdGFyZ2V0KTsKQEAgLTEwMCwxMCArMTA0LDEwIEBAIFdJLlRhcmdldE1hbmFn
ZXIgPSBjbGFzcyBUYXJnZXRNYW5hZ2VyIGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIGxldCB0
YXJnZXQgPSBuZXcgV0kuRGlyZWN0QmFja2VuZFRhcmdldDsKICAgICAgICAgdGFyZ2V0LmluaXRp
YWxpemUoKTsKIAotICAgICAgICBXSS5pbml0aWFsaXplQmFja2VuZFRhcmdldCh0YXJnZXQpOwor
ICAgICAgICB0aGlzLl9pbml0aWFsaXplQmFja2VuZFRhcmdldCh0YXJnZXQpOwogCiAgICAgICAg
IGlmIChXSS5zaGFyZWRBcHAuZGVidWdnYWJsZVR5cGUgPT09IFdJLkRlYnVnZ2FibGVUeXBlLldl
YikKLSAgICAgICAgICAgIFdJLmluaXRpYWxpemVQYWdlVGFyZ2V0KHRhcmdldCk7CisgICAgICAg
ICAgICB0aGlzLl9pbml0aWFsaXplUGFnZVRhcmdldCh0YXJnZXQpOwogCiAgICAgICAgIHRoaXMu
YWRkVGFyZ2V0KHRhcmdldCk7CiAgICAgfQpAQCAtMTEyLDYgKzExNiwxMiBAQCBXSS5UYXJnZXRN
YW5hZ2VyID0gY2xhc3MgVGFyZ2V0TWFuYWdlciBleHRlbmRzIFdJLk9iamVjdAogCiAgICAgdGFy
Z2V0Q3JlYXRlZCh0YXJnZXRJbmZvKQogICAgIHsKKyAgICAgICAgLy8gQ09NUEFUSUJJTElUWSAo
aU9TIDEzLjApOiBgVGFyZ2V0LlRhcmdldEluZm8uaXNQcm92aXNpb25hbGAgZGlkIG5vdCBleGlz
dCB5ZXQuCisgICAgICAgIGlmICh0YXJnZXRJbmZvLmlzUHJvdmlzaW9uYWwpIHsKKyAgICAgICAg
ICAgIHRoaXMuX3Byb3Zpc2lvbmFsVGFyZ2V0SWRzLmFkZCh0YXJnZXRJbmZvLnRhcmdldElkKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIC8vIEZJWE1FOiBFbGlt
aW5hdGUgdGhpcyBvbmNlIHRoZSBsb2NhbCBpbnNwZWN0b3IgaXMgY29uZmlndXJlZCB0byB1c2UK
ICAgICAgICAgLy8gdGhlIE11bHRpcGxleGluZyBjb2RlIHBhdGguIFRoZW4gd2UgY2FuIHBlcmZv
cm0gdGhpcyBpbW1lZGlhdGVseQogICAgICAgICAvLyBpbiBgV0kubG9hZGVkYCBpZiBhIFRhcmdl
dEFnZW50IGV4aXN0cy4KQEAgLTEyNiw4ICsxMzYsMjEgQEAgV0kuVGFyZ2V0TWFuYWdlciA9IGNs
YXNzIFRhcmdldE1hbmFnZXIgZXh0ZW5kcyBXSS5PYmplY3QKICAgICAgICAgdGhpcy5hZGRUYXJn
ZXQodGFyZ2V0KTsKICAgICB9CiAKKyAgICBkaWRDb21taXRQcm92aXNpb25hbFRhcmdldCh0YXJn
ZXRJbmZvKQorICAgIHsKKyAgICAgICAgdGhpcy50YXJnZXREZXN0cm95ZWQodGFyZ2V0SW5mby5w
cmV2aW91c1RhcmdldElkKTsKKyAgICAgICAgdGhpcy50YXJnZXRDcmVhdGVkKHRhcmdldEluZm8p
OworICAgICAgICB0aGlzLl9zd2FwcGVkVGFyZ2V0SWRzLmFkZCh0YXJnZXRJbmZvLnByZXZpb3Vz
VGFyZ2V0SWQpOworICAgICAgICB0aGlzLl9wcm92aXNpb25hbFRhcmdldElkcy5kZWxldGUodGFy
Z2V0SW5mby50YXJnZXRJZCk7CisKKyAgICB9CisKICAgICB0YXJnZXREZXN0cm95ZWQodGFyZ2V0
SWQpCiAgICAgeworICAgICAgICBpZiAodGhpcy5fcHJvdmlzaW9uYWxUYXJnZXRJZHMuZGVsZXRl
KHRhcmdldElkKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKHRoaXMuX3N3YXBw
ZWRUYXJnZXRJZHMuZGVsZXRlKHRhcmdldElkKSkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgbGV0IHRhcmdldCA9IHRoaXMuX3RhcmdldHMuZ2V0KHRhcmdldElkKTsKICAgICAgICAgdGhp
cy5fY2hlY2tBbmRIYW5kbGVQYWdlVGFyZ2V0VGVybWluYXRpb24odGFyZ2V0KTsKICAgICAgICAg
dGhpcy5yZW1vdmVUYXJnZXQodGFyZ2V0KTsKQEAgLTEzNSw2ICsxNTgsOCBAQCBXSS5UYXJnZXRN
YW5hZ2VyID0gY2xhc3MgVGFyZ2V0TWFuYWdlciBleHRlbmRzIFdJLk9iamVjdAogCiAgICAgZGlz
cGF0Y2hNZXNzYWdlRnJvbVRhcmdldCh0YXJnZXRJZCwgbWVzc2FnZSkKICAgICB7CisgICAgICAg
IGlmICh0aGlzLl9wcm92aXNpb25hbFRhcmdldElkcy5oYXModGFyZ2V0SWQpKQorICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBsZXQgdGFyZ2V0ID0gdGhpcy5fdGFyZ2V0cy5nZXQodGFyZ2V0
SWQpOwogICAgICAgICBjb25zb2xlLmFzc2VydCh0YXJnZXQpOwogICAgICAgICBpZiAoIXRhcmdl
dCkKQEAgLTE3MSwxMiArMTk2LDEyIEBAIFdJLlRhcmdldE1hbmFnZXIgPSBjbGFzcyBUYXJnZXRN
YW5hZ2VyIGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIC8vIEZpcnN0IHBhZ2UgdGFyZ2V0Lgog
ICAgICAgICBpZiAoIVdJLnBhZ2VUYXJnZXQgJiYgIXRoaXMuX3NlZW5QYWdlVGFyZ2V0KSB7CiAg
ICAgICAgICAgICB0aGlzLl9zZWVuUGFnZVRhcmdldCA9IHRydWU7Ci0gICAgICAgICAgICBXSS5p
bml0aWFsaXplUGFnZVRhcmdldCh0YXJnZXQpOworICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6
ZVBhZ2VUYXJnZXQodGFyZ2V0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAg
ICAgICAgIC8vIFRyYW5zaXRpb25pbmcgcGFnZSB0YXJnZXQuCi0gICAgICAgIFdJLnRyYW5zaXRp
b25QYWdlVGFyZ2V0KHRhcmdldCk7CisgICAgICAgIHRoaXMuX3RyYW5zaXRpb25QYWdlVGFyZ2V0
KHRhcmdldCk7CiAgICAgfQogCiAgICAgX2NoZWNrQW5kSGFuZGxlUGFnZVRhcmdldFRlcm1pbmF0
aW9uKHRhcmdldCkKQEAgLTE4OCw3ICsyMTMsNyBAQCBXSS5UYXJnZXRNYW5hZ2VyID0gY2xhc3Mg
VGFyZ2V0TWFuYWdlciBleHRlbmRzIFdJLk9iamVjdAogICAgICAgICBjb25zb2xlLmFzc2VydCh0
aGlzLl9zZWVuUGFnZVRhcmdldCk7CiAKICAgICAgICAgLy8gVGVybWluYXRpbmcgdGhlIHBhZ2Ug
dGFyZ2V0LgotICAgICAgICBXSS50ZXJtaW5hdGVQYWdlVGFyZ2V0KHRhcmdldCk7CisgICAgICAg
IHRoaXMuX3Rlcm1pbmF0ZVBhZ2VUYXJnZXQodGFyZ2V0KTsKIAogICAgICAgICAvLyBFbnN1cmUg
d2UgdHJhbnNpdGlvbiBpbiBhIHJlYXNvbmFibGUgYW1vdW50IG9mIHRpbWUsIG90aGVyd2lzZSBj
bG9zZS4KICAgICAgICAgY29uc3QgdGltZVRvVHJhbnNpdGlvbiA9IDIwMDA7CkBAIC0yMDIsNiAr
MjI3LDg1IEBAIFdJLlRhcmdldE1hbmFnZXIgPSBjbGFzcyBUYXJnZXRNYW5hZ2VyIGV4dGVuZHMg
V0kuT2JqZWN0CiAgICAgICAgICAgICBXSS5jbG9zZSgpOwogICAgICAgICB9LCB0aW1lVG9UcmFu
c2l0aW9uKTsKICAgICB9CisKKyAgICBfaW5pdGlhbGl6ZUJhY2tlbmRUYXJnZXQodGFyZ2V0KQor
ICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoIVdJLm1haW5UYXJnZXQpOworCisgICAgICAg
IFdJLmJhY2tlbmRUYXJnZXQgPSB0YXJnZXQ7CisKKyAgICAgICAgdGhpcy5fcmVzZXRNYWluRXhl
Y3V0aW9uQ29udGV4dCgpOworCisgICAgICAgIFdJLl90YXJnZXRzQXZhaWxhYmxlUHJvbWlzZS5y
ZXNvbHZlKCk7CisgICAgfQorCisgICAgX2luaXRpYWxpemVQYWdlVGFyZ2V0KHRhcmdldCkKKyAg
ICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KFdJLnNoYXJlZEFwcC5kZWJ1Z2dhYmxlVHlwZSA9
PT0gV0kuRGVidWdnYWJsZVR5cGUuV2ViKTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQodGFyZ2V0
LnR5cGUgPT09IFdJLlRhcmdldC5UeXBlLlBhZ2UgfHwgdGFyZ2V0IGluc3RhbmNlb2YgV0kuRGly
ZWN0QmFja2VuZFRhcmdldCk7CisKKyAgICAgICAgV0kucGFnZVRhcmdldCA9IHRhcmdldDsKKwor
ICAgICAgICB0aGlzLl9yZWRpcmVjdEdsb2JhbEFnZW50c1RvQ29ubmVjdGlvbihXSS5wYWdlVGFy
Z2V0LmNvbm5lY3Rpb24pOworCisgICAgICAgIHRoaXMuX3Jlc2V0TWFpbkV4ZWN1dGlvbkNvbnRl
eHQoKTsKKyAgICB9CisKKyAgICBfdHJhbnNpdGlvblBhZ2VUYXJnZXQodGFyZ2V0KQorICAgIHsK
KyAgICAgICAgY29uc29sZS5hc3NlcnQoIVdJLnBhZ2VUYXJnZXQpOworICAgICAgICBjb25zb2xl
LmFzc2VydChXSS5zaGFyZWRBcHAuZGVidWdnYWJsZVR5cGUgPT09IFdJLkRlYnVnZ2FibGVUeXBl
LldlYik7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRhcmdldC50eXBlID09PSBXSS5UYXJnZXQu
VHlwZS5QYWdlKTsKKworICAgICAgICBXSS5wYWdlVGFyZ2V0ID0gdGFyZ2V0OworCisgICAgICAg
IHRoaXMuX3JlZGlyZWN0R2xvYmFsQWdlbnRzVG9Db25uZWN0aW9uKFdJLnBhZ2VUYXJnZXQuY29u
bmVjdGlvbik7CisKKyAgICAgICAgdGhpcy5fcmVzZXRNYWluRXhlY3V0aW9uQ29udGV4dCgpOwor
CisgICAgICAgIC8vIEFjdGlvbnMgdG8gdHJhbnNpdGlvbiB0aGUgcGFnZSB0YXJnZXQuCisgICAg
ICAgIFdJLm5vdGlmaWNhdGlvbnMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdJLk5vdGlmaWNh
dGlvbi5UcmFuc2l0aW9uUGFnZVRhcmdldCk7CisgICAgICAgIFdJLmRvbU1hbmFnZXIudHJhbnNp
dGlvblBhZ2VUYXJnZXQoKTsKKyAgICAgICAgV0kubmV0d29ya01hbmFnZXIudHJhbnNpdGlvblBh
Z2VUYXJnZXQoKTsKKyAgICAgICAgV0kudGltZWxpbmVNYW5hZ2VyLnRyYW5zaXRpb25QYWdlVGFy
Z2V0KCk7CisgICAgfQorCisgICAgX3Rlcm1pbmF0ZVBhZ2VUYXJnZXQodGFyZ2V0KQorICAgIHsK
KyAgICAgICAgY29uc29sZS5hc3NlcnQoV0kucGFnZVRhcmdldCk7CisgICAgICAgIGNvbnNvbGUu
YXNzZXJ0KFdJLnBhZ2VUYXJnZXQgPT09IHRhcmdldCk7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0
KFdJLnNoYXJlZEFwcC5kZWJ1Z2dhYmxlVHlwZSA9PT0gV0kuRGVidWdnYWJsZVR5cGUuV2ViKTsK
KworICAgICAgICAvLyBSZW1vdmUgYW55IFdvcmtlciB0YXJnZXRzIGFzc29jaWF0ZWQgd2l0aCB0
aGlzIHBhZ2UuCisgICAgICAgIGxldCB3b3JrZXJUYXJnZXRzID0gV0kudGFyZ2V0cy5maWx0ZXIo
KHgpID0+IHgudHlwZSA9PT0gV0kuVGFyZ2V0LlR5cGUuV29ya2VyKTsKKyAgICAgICAgZm9yIChs
ZXQgd29ya2VyVGFyZ2V0IG9mIHdvcmtlclRhcmdldHMpCisgICAgICAgICAgICBXSS53b3JrZXJN
YW5hZ2VyLndvcmtlclRlcm1pbmF0ZWQod29ya2VyVGFyZ2V0LmlkZW50aWZpZXIpOworCisgICAg
ICAgIFdJLnBhZ2VUYXJnZXQgPSBudWxsOworCisgICAgICAgIHRoaXMuX3JlZGlyZWN0R2xvYmFs
QWdlbnRzVG9Db25uZWN0aW9uKFdJLmJhY2tlbmRDb25uZWN0aW9uKTsKKyAgICB9CisKKyAgICBf
cmVzZXRNYWluRXhlY3V0aW9uQ29udGV4dCgpCisgICAgeworICAgICAgICBpZiAoV0kubWFpblRh
cmdldCBpbnN0YW5jZW9mIFdJLk11bHRpcGxleGluZ0JhY2tlbmRUYXJnZXQpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgaWYgKFdJLm1haW5UYXJnZXQuZXhlY3V0aW9uQ29udGV4dCkg
eworICAgICAgICAgICAgV0kucnVudGltZU1hbmFnZXIuYWN0aXZlRXhlY3V0aW9uQ29udGV4dCA9
IFdJLm1haW5UYXJnZXQuZXhlY3V0aW9uQ29udGV4dDsKKyAgICAgICAgICAgIGlmIChXSS5xdWlj
a0NvbnNvbGUpCisgICAgICAgICAgICAgICAgV0kucXVpY2tDb25zb2xlLmluaXRpYWxpemVNYWlu
RXhlY3V0aW9uQ29udGV4dFBhdGhDb21wb25lbnQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IF9yZWRpcmVjdEdsb2JhbEFnZW50c1RvQ29ubmVjdGlvbihjb25uZWN0aW9uKQorICAgIHsKKyAg
ICAgICAgLy8gVGhpcyBtYWtlcyBnbG9iYWwgd2luZG93LkZvb0FnZW50IGRpc3BhdGNoIHRvIHRo
ZSBhY3RpdmUgcGFnZSB0YXJnZXQuCisgICAgICAgIGZvciAobGV0IFtkb21haW4sIGFnZW50XSBv
ZiBPYmplY3QuZW50cmllcyhJbnNwZWN0b3JCYWNrZW5kLl9hZ2VudHMpKSB7CisgICAgICAgICAg
ICBpZiAoZG9tYWluICE9PSAiVGFyZ2V0IikKKyAgICAgICAgICAgICAgICBhZ2VudC5jb25uZWN0
aW9uID0gY29ubmVjdGlvbjsKKyAgICAgICAgfQorICAgIH07CiB9OwogCiBXSS5UYXJnZXRNYW5h
Z2VyLkV2ZW50ID0gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvUHJvdG9jb2wvQ29ubmVjdGlvbi5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL1Byb3RvY29sL0Nvbm5lY3Rpb24uanMKaW5kZXggYjI3Mzc4N2YzYjM1OTk1NzFk
MGMwZTk4MjAzMTFlZDU0OTM2YjNmNi4uYWVkNDZjZjI0ZWU5ZDAwMjhlMTc4MDVjOGVjODA4YTMz
M2YwM2I5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
UHJvdG9jb2wvQ29ubmVjdGlvbi5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9Qcm90b2NvbC9Db25uZWN0aW9uLmpzCkBAIC0zMDgsOCArMzA4LDEyIEBAIEluc3Bl
Y3RvckJhY2tlbmQuV29ya2VyQ29ubmVjdGlvbiA9IGNsYXNzIEluc3BlY3RvckJhY2tlbmRXb3Jr
ZXJDb25uZWN0aW9uIGV4dGVuCiAKICAgICBzZW5kTWVzc2FnZVRvQmFja2VuZChtZXNzYWdlKQog
ICAgIHsKLSAgICAgICAgLy8gSWdub3JlIGVycm9ycyBpZiBhIHdvcmtlciB3ZW50IGF3YXkgcXVp
Y2tseS4KLSAgICAgICAgV29ya2VyQWdlbnQuc2VuZE1lc3NhZ2VUb1dvcmtlcih0aGlzLl93b3Jr
ZXJJZCwgbWVzc2FnZSkuY2F0Y2goZnVuY3Rpb24oKXt9KTsKKyAgICAgICAgV29ya2VyQWdlbnQu
c2VuZE1lc3NhZ2VUb1dvcmtlcih0aGlzLl93b3JrZXJJZCwgbWVzc2FnZSkuY2F0Y2goKGVycm9y
KSA9PiB7CisgICAgICAgICAgICAvLyBJZ25vcmUgZXJyb3JzIGlmIGEgd29ya2VyIHdlbnQgYXdh
eSBxdWlja2x5LgorICAgICAgICAgICAgaWYgKHRoaXMudGFyZ2V0LmlzRGVzdHJveWVkKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgV0kucmVwb3J0SW50ZXJuYWxFcnJv
cihlcnJvcik7CisgICAgICAgIH0pOwogICAgIH0KIH07CiAKQEAgLTMzMiw3ICszMzYsMTMgQEAg
SW5zcGVjdG9yQmFja2VuZC5UYXJnZXRDb25uZWN0aW9uID0gY2xhc3MgSW5zcGVjdG9yQmFja2Vu
ZFRhcmdldENvbm5lY3Rpb24gZXh0ZW4KIAogICAgIHNlbmRNZXNzYWdlVG9CYWNrZW5kKG1lc3Nh
Z2UpCiAgICAgewotICAgICAgICBUYXJnZXRBZ2VudC5zZW5kTWVzc2FnZVRvVGFyZ2V0KHRoaXMu
X3RhcmdldElkLCBtZXNzYWdlKTsKKyAgICAgICAgVGFyZ2V0QWdlbnQuc2VuZE1lc3NhZ2VUb1Rh
cmdldCh0aGlzLl90YXJnZXRJZCwgbWVzc2FnZSkuY2F0Y2goKGVycm9yKSA9PiB7CisgICAgICAg
ICAgICAvLyBDb21tYW5kIG1heSBiZSBzZW50IGFmdGVyIHRhcmdldCBpcyBhbHJlYWR5IGRlc3Ry
b3llZCBvbiBiYWNrZW5kLAorICAgICAgICAgICAgLy8gaWdub3JlIHN1Y2ggZXJyb3JzLgorICAg
ICAgICAgICAgaWYgKHRoaXMudGFyZ2V0LmlzRGVzdHJveWVkKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgV0kucmVwb3J0SW50ZXJuYWxFcnJvcihlcnJvcik7CisgICAg
ICAgIH0pOwogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL1Byb3RvY29sL1RhcmdldC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL1Byb3RvY29sL1RhcmdldC5qcwppbmRleCAyMDMzNDEwYTZiNTMzNThlYjdj
YTkyNTEzMTc1ZDMxMmFhZDFhNDQ4Li5hOTM4MjBjMDk2M2NjYWU0ZmQ3YjhhOGJhNzc2NDhiY2My
YmMwYjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Q
cm90b2NvbC9UYXJnZXQuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvUHJvdG9jb2wvVGFyZ2V0LmpzCkBAIC0yMDAsNiArMjAwLDE2IEBAIFdJLlRhcmdldCA9IGNs
YXNzIFRhcmdldCBleHRlbmRzIFdJLk9iamVjdAogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRU
b0xpc3RlbmVycyhXSS5UYXJnZXQuRXZlbnQuU2NyaXB0QWRkZWQsIHtzY3JpcHR9KTsKICAgICB9
CiAKKyAgICBkZXN0cm95KCkKKyAgICB7CisgICAgICAgIHRoaXMuX2lzRGVzdHJveWVkID0gdHJ1
ZTsKKyAgICB9CisKKyAgICBpc0Rlc3Ryb3llZCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhp
cy5faXNEZXN0cm95ZWQ7CisgICAgfQorCiAgICAgLy8gUHJpdmF0ZQogCiAgICAgX3N1cHBvcnRl
ZERvbWFpbnNGb3JUYXJnZXRUeXBlKHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Qcm90b2NvbC9UYXJnZXRPYnNlcnZlci5qcyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL1RhcmdldE9ic2VydmVyLmpzCmlu
ZGV4IDMxYjZmY2ZjMTg2OWVkMTM4NzgxZTEwNzFkZDE5YjU0N2MwOWNiZjQuLmMzNGU4YWE3ZjM0
ZGMyMjY1MWU3ZjFhYzAwOTdjYzYxZjBiZmQ5N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL1RhcmdldE9ic2VydmVyLmpzCisrKyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL1RhcmdldE9ic2VydmVy
LmpzCkBAIC0yNiwxMiArMjYsMjAgQEAKIFdJLlRhcmdldE9ic2VydmVyID0gY2xhc3MgVGFyZ2V0
T2JzZXJ2ZXIKIHsKICAgICAvLyBFdmVudHMgZGVmaW5lZCBieSB0aGUgIlRhcmdldCIgZG9tYWlu
LgorICAgIGNvbnN0cnVjdG9yKCkKKyAgICB7CisgICAgfQogCiAgICAgdGFyZ2V0Q3JlYXRlZCh0
YXJnZXRJbmZvKQogICAgIHsKICAgICAgICAgV0kudGFyZ2V0TWFuYWdlci50YXJnZXRDcmVhdGVk
KHRhcmdldEluZm8pOwogICAgIH0KIAorICAgIGRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0KHRh
cmdldEluZm8pCisgICAgeworICAgICAgICBXSS50YXJnZXRNYW5hZ2VyLmRpZENvbW1pdFByb3Zp
c2lvbmFsVGFyZ2V0KHRhcmdldEluZm8pOworICAgIH0KKwogICAgIHRhcmdldERlc3Ryb3llZCh0
YXJnZXRJZCkKICAgICB7CiAgICAgICAgIFdJLnRhcmdldE1hbmFnZXIudGFyZ2V0RGVzdHJveWVk
KHRhcmdldElkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1Rlc3QvVGVzdC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Rl
c3QvVGVzdC5qcwppbmRleCA3NTcwOGEwMGM5NTgxNzI3ZWUwZjRjMzg1MzQzYTRmMjQ0YjIzZDM1
Li5lNWM4ZWExYjY4ZTYwNDk1OWQ4ZWY3N2U4ZjhmOTNlNjU5NmVjODE4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9UZXN0L1Rlc3QuanMKKysrIGIvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVGVzdC9UZXN0LmpzCkBAIC04Niw1MiAr
ODYsNiBAQCBXSS5sb2FkZWQgPSBmdW5jdGlvbigpCiAgICAgfSk7CiB9OwogCi1XSS5pbml0aWFs
aXplQmFja2VuZFRhcmdldCA9IGZ1bmN0aW9uKHRhcmdldCkKLXsKLSAgICBXSS5iYWNrZW5kVGFy
Z2V0ID0gdGFyZ2V0OwotCi0gICAgV0kucmVzZXRNYWluRXhlY3V0aW9uQ29udGV4dCgpOwotCi0g
ICAgV0kuX3RhcmdldHNBdmFpbGFibGVQcm9taXNlLnJlc29sdmUoKTsKLX07Ci0KLVdJLmluaXRp
YWxpemVQYWdlVGFyZ2V0ID0gZnVuY3Rpb24odGFyZ2V0KQotewotICAgIFdJLnBhZ2VUYXJnZXQg
PSB0YXJnZXQ7Ci0KLSAgICBXSS5yZWRpcmVjdEdsb2JhbEFnZW50c1RvQ29ubmVjdGlvbihXSS5w
YWdlVGFyZ2V0LmNvbm5lY3Rpb24pOwotCi0gICAgV0kucmVzZXRNYWluRXhlY3V0aW9uQ29udGV4
dCgpOwotfTsKLQotV0kudHJhbnNpdGlvblBhZ2VUYXJnZXQgPSBmdW5jdGlvbih0YXJnZXQpCi17
Ci0gICAgY29uc29sZS5lcnJvcigiV0kudHJhbnNpdGlvblBhZ2VUYXJnZXQgc2hvdWxkIG5vdCBi
ZSByZWFjaGVkIGluIHRlc3RzLiIpOwotfTsKLQotV0kudGVybWluYXRlUGFnZVRhcmdldCA9IGZ1
bmN0aW9uKHRhcmdldCkKLXsKLSAgICBjb25zb2xlLmVycm9yKCJXSS50ZXJtaW5hdGVQYWdlVGFy
Z2V0IHNob3VsZCBub3QgYmUgcmVhY2hlZCBpbiB0ZXN0cy4iKTsKLX07Ci0KLVdJLnJlc2V0TWFp
bkV4ZWN1dGlvbkNvbnRleHQgPSBmdW5jdGlvbigpCi17Ci0gICAgaWYgKFdJLm1haW5UYXJnZXQg
aW5zdGFuY2VvZiBXSS5NdWx0aXBsZXhpbmdCYWNrZW5kVGFyZ2V0KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoV0kubWFpblRhcmdldC5leGVjdXRpb25Db250ZXh0KQotICAgICAgICBXSS5y
dW50aW1lTWFuYWdlci5hY3RpdmVFeGVjdXRpb25Db250ZXh0ID0gV0kubWFpblRhcmdldC5leGVj
dXRpb25Db250ZXh0OwotfTsKLQotV0kucmVkaXJlY3RHbG9iYWxBZ2VudHNUb0Nvbm5lY3Rpb24g
PSBmdW5jdGlvbihjb25uZWN0aW9uKQotewotICAgIC8vIFRoaXMgbWFrZXMgZ2xvYmFsIHdpbmRv
dy5Gb29BZ2VudCBkaXNwYXRjaCB0byB0aGUgYWN0aXZlIHBhZ2UgdGFyZ2V0LgotICAgIGZvciAo
bGV0IFtkb21haW4sIGFnZW50XSBvZiBPYmplY3QuZW50cmllcyhJbnNwZWN0b3JCYWNrZW5kLl9h
Z2VudHMpKSB7Ci0gICAgICAgIGlmIChkb21haW4gIT09ICJUYXJnZXQiKQotICAgICAgICAgICAg
YWdlbnQuY29ubmVjdGlvbiA9IGNvbm5lY3Rpb247Ci0gICAgfQotfTsKLQogV0kuY29udGVudExv
YWRlZCA9IGZ1bmN0aW9uKCkKIHsKICAgICAvLyBUaGluZ3MgdGhhdCB3b3VsZCBub3JtYWxseSBn
ZXQgY2FsbGVkIGJ5IHRoZSBVSSwgdGhhdCB3ZSBzdGlsbCB3YW50IHRvIGRvIGluIHRlc3RzLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291
cmNlcy50eHQKaW5kZXggMzczZDY1NWYxMGFmOGIzODAzNWI5NmJhYzdkOGYyOTUyYjBhNjhiYS4u
MmZhZmMwMmE2ODkzNTBhNWUwMjU5ODc1YTEwZTRjODZmYjQ2YTBiZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CkBA
IC0yODgsNyArMjg4LDYgQEAgVUlQcm9jZXNzL1dlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVu
dC5jcHAKIFVJUHJvY2Vzcy9XZWJQYWdlR3JvdXAuY3BwCiBVSVByb2Nlc3MvV2ViUGFnZUluamVj
dGVkQnVuZGxlQ2xpZW50LmNwcAogVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVy
LmNwcAotVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRBZ2VudC5jcHAKIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCiBVSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5LmNwcAogVUlQ
cm9jZXNzL1dlYlByZWZlcmVuY2VzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvSW5zcGVjdG9yVGFyZ2V0UHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yVGFyZ2V0UHJveHkuY3BwCmluZGV4IDYxYjhmMzZlZmE3NTFmMWM4OGQ5MmJhMWFk
Y2QxNWVjYTYxNDU4MjIuLjFlYzk5N2JhODIzOTYwY2I2NGIyMmE0YTM2ZGE5ZjQzZjViMzBhM2Qg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3RvclRhcmdldFByb3h5
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3JUYXJnZXRQcm94eS5j
cHAKQEAgLTI2LDcgKzI2LDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JUYXJnZXRQcm94eS5oIgogCisjaW5jbHVkZSAiUHJvdmlzaW9uYWxQYWdlUHJveHkuaCIK
ICNpbmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRh
cmdldC5oIgogI2luY2x1ZGUgIldlYlBhZ2VNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlBhZ2VQ
cm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgpAQCAtMzUsOSArMzcsMTYgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiAKIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKLVJlZjxJ
bnNwZWN0b3JUYXJnZXRQcm94eT4gSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNyZWF0ZShXZWJQYWdl
UHJveHkmIHBhZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9y
VGFyZ2V0VHlwZSB0eXBlKQorc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvclRhcmdldFByb3h5PiBJ
bnNwZWN0b3JUYXJnZXRQcm94eTo6Y3JlYXRlKFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgU3Ry
aW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUpCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yVGFyZ2V0UHJveHkocGFnZSwgdGFyZ2V0
SWQsIHR5cGUpKTsKKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxJbnNwZWN0b3JUYXJnZXRQcm94eT4o
cGFnZSwgdGFyZ2V0SWQsIHR5cGUpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFy
Z2V0UHJveHk+IEluc3BlY3RvclRhcmdldFByb3h5OjpjcmVhdGUoUHJvdmlzaW9uYWxQYWdlUHJv
eHkmIHByb3Zpc2lvbmFsUGFnZSwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUpCit7CisgICAgYXV0byB0YXJnZXQgPSBJbnNwZWN0b3JU
YXJnZXRQcm94eTo6Y3JlYXRlKHByb3Zpc2lvbmFsUGFnZS5wYWdlKCksIHRhcmdldElkLCB0eXBl
KTsKKyAgICB0YXJnZXQtPm1fcHJvdmlzaW9uYWxQYWdlID0gbWFrZVdlYWtQdHIocHJvdmlzaW9u
YWxQYWdlKTsKKyAgICByZXR1cm4gdGFyZ2V0OwogfQogCiBJbnNwZWN0b3JUYXJnZXRQcm94eTo6
SW5zcGVjdG9yVGFyZ2V0UHJveHkoV2ViUGFnZVByb3h5JiBwYWdlLCBjb25zdCBTdHJpbmcmIHRh
cmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUgdHlwZSkKQEAgLTQ3LDIyICs1
Niw1NiBAQCBJbnNwZWN0b3JUYXJnZXRQcm94eTo6SW5zcGVjdG9yVGFyZ2V0UHJveHkoV2ViUGFn
ZVByb3h5JiBwYWdlLCBjb25zdCBTdHJpbmcmIHRhcgogewogfQogCi12b2lkIEluc3BlY3RvclRh
cmdldFByb3h5Ojpjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJiBjaGFubmVsKQor
dm9pZCBJbnNwZWN0b3JUYXJnZXRQcm94eTo6Y29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hh
bm5lbDo6Q29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUpCiB7CisgICAgaWYgKG1fcHJvdmlz
aW9uYWxQYWdlKSB7CisgICAgICAgIG1fcHJvdmlzaW9uYWxQYWdlLT5wcm9jZXNzKCkuc2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6Q29ubmVjdEluc3BlY3RvcihpZGVudGlmaWVyKCksIGNvbm5lY3Rp
b25UeXBlKSwgbV9wcm92aXNpb25hbFBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKwogICAgIGlmIChtX3BhZ2UuaGFzUnVubmluZ1Byb2Nlc3MoKSkKLSAgICAgICAg
bV9wYWdlLnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDb25uZWN0SW5zcGVjdG9y
KGlkZW50aWZpZXIoKSwgY2hhbm5lbC5jb25uZWN0aW9uVHlwZSgpKSwgbV9wYWdlLndlYlBhZ2VJ
RCgpKTsKKyAgICAgICAgbV9wYWdlLnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpD
b25uZWN0SW5zcGVjdG9yKGlkZW50aWZpZXIoKSwgY29ubmVjdGlvblR5cGUpLCBtX3BhZ2Uud2Vi
UGFnZUlEKCkpOwogfQogCi12b2lkIEluc3BlY3RvclRhcmdldFByb3h5OjpkaXNjb25uZWN0KElu
c3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJikKK3ZvaWQgSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmRp
c2Nvbm5lY3QoKQogeworICAgIGlmIChtX3Byb3Zpc2lvbmFsUGFnZSkgeworICAgICAgICBtX3By
b3Zpc2lvbmFsUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpc2Nvbm5l
Y3RJbnNwZWN0b3IoaWRlbnRpZmllcigpKSwgbV9wcm92aXNpb25hbFBhZ2UtPndlYlBhZ2VJRCgp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChtX3BhZ2UuaGFzUnVubmluZ1By
b2Nlc3MoKSkKICAgICAgICAgbV9wYWdlLnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpEaXNjb25uZWN0SW5zcGVjdG9yKGlkZW50aWZpZXIoKSksIG1fcGFnZS53ZWJQYWdlSUQoKSk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yVGFyZ2V0UHJveHk6OnNlbmRNZXNzYWdlVG9UYXJnZXRCYWNr
ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKKyAgICBpZiAobV9wcm92aXNpb25hbFBhZ2Up
IHsKKyAgICAgICAgbV9wcm92aXNpb25hbFBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpTZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChpZGVudGlmaWVyKCksIG1lc3NhZ2Up
LCBtX3Byb3Zpc2lvbmFsUGFnZS0+d2ViUGFnZUlEKCkpOworICAgICAgICByZXR1cm47CisgICAg
fQorCiAgICAgaWYgKG1fcGFnZS5oYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICBtX3BhZ2Uu
cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNlbmRNZXNzYWdlVG9UYXJnZXRCYWNr
ZW5kKGlkZW50aWZpZXIoKSwgbWVzc2FnZSksIG1fcGFnZS53ZWJQYWdlSUQoKSk7CiB9CiAKK3Zv
aWQgSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0KCkKK3sK
KyAgICBBU1NFUlQoaXNQcm92aXNpb25hbCgpKTsKKyAgICBtX3Byb3Zpc2lvbmFsUGFnZSA9IG51
bGxwdHI7Cit9CisKK2Jvb2wgSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmlzUHJvdmlzaW9uYWwoKSBj
b25zdAoreworICAgIHJldHVybiAhIW1fcHJvdmlzaW9uYWxQYWdlOworfQorCitTdHJpbmcgSW5z
cGVjdG9yVGFyZ2V0UHJveHk6OnByZXZpb3VzVGFyZ2V0SUQoKSBjb25zdAoreworICAgIGlmICht
X3R5cGUgIT0gSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlOjpQYWdlIHx8ICFpc1Byb3Zp
c2lvbmFsKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIHJldHVybiBXZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0Ojp0b1RhcmdldElEKG1fcGFnZS53ZWJQYWdlSUQoKSk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yVGFyZ2V0UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rv
clRhcmdldFByb3h5LmgKaW5kZXggZDM4MmIwMjY1MDljODM5NTE5OWFiZGQ0OTVhZjZhMmE1MWFm
OTI3Yy4uNDNmNjhmYjAwNTljNTVmMmY3ZDNhOGEyZTNmMTFhZDExODMzYWM3OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yVGFyZ2V0UHJveHkuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3JUYXJnZXRQcm94eS5oCkBAIC0yNyw2ICsy
Nyw3IEBACiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JUYXJnZXQuaD4KICNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtMzUsMjUgKzM2LDMxIEBAIGNsYXNzIFdlYlBhZ2VQcm94
eTsKIC8vIE5PVEU6IFRoaXMgVUlQcm9jZXNzIHNpZGUgSW5zcGVjdG9yVGFyZ2V0IGRvZXNuJ3Qg
Y2FyZSBhYm91dCB0aGUgZnJvbnRlbmQgY2hhbm5lbCwgc2luY2UKIC8vIGFueSB0YXJnZXQgLT4g
ZnJvbnRlbmQgbWVzc2FnZXMgd2lsbCBiZSByb3V0ZWQgdG8gdGhlIFdlYlBhZ2VQcm94eSB3aXRo
IGEgdGFyZ2V0SWQuCiAKLWNsYXNzIEluc3BlY3RvclRhcmdldFByb3h5IGZpbmFsIDogcHVibGlj
IEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0LCBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JU
YXJnZXRQcm94eT4geworY2xhc3MgSW5zcGVjdG9yVGFyZ2V0UHJveHkgZmluYWwgOiBwdWJsaWMg
SW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvclRhcmdldFByb3h5KTsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPEluc3BlY3RvclRhcmdldFByb3h5PiBjcmVhdGUoV2ViUGFnZVBy
b3h5JiwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRU
eXBlKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvclRhcmdldFByb3h5PiBj
cmVhdGUoV2ViUGFnZVByb3h5JiwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JUYXJnZXRUeXBlKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rv
clRhcmdldFByb3h5PiBjcmVhdGUoUHJvdmlzaW9uYWxQYWdlUHJveHkmLCBjb25zdCBTdHJpbmcm
IHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUpOwogICAgIEluc3BlY3Rv
clRhcmdldFByb3h5KFdlYlBhZ2VQcm94eSYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSk7CiAgICAgfkluc3BlY3RvclRhcmdldFByb3h5KCkg
PSBkZWZhdWx0OwogCiAgICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBTdHJpbmcgaWRlbnRpZmllcigpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQogCi0gICAgdm9pZCBjb25uZWN0KElu
c3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJik7Ci0gICAgdm9pZCBkaXNjb25uZWN0KEluc3BlY3Rv
cjo6RnJvbnRlbmRDaGFubmVsJik7Ci0gICAgdm9pZCBzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2Vu
ZChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0KCk7
CisgICAgYm9vbCBpc1Byb3Zpc2lvbmFsKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHBy
ZXZpb3VzVGFyZ2V0SUQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZvaWQgY29ubmVjdChJbnNw
ZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUpIG92ZXJyaWRlOworICAgIHZv
aWQgZGlzY29ubmVjdCgpIG92ZXJyaWRlOworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1RhcmdldEJh
Y2tlbmQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgV2ViUGFnZVBy
b3h5JiBtX3BhZ2U7CiAgICAgU3RyaW5nIG1faWRlbnRpZmllcjsKICAgICBJbnNwZWN0b3I6Oklu
c3BlY3RvclRhcmdldFR5cGUgbV90eXBlOworICAgIFdlYWtQdHI8UHJvdmlzaW9uYWxQYWdlUHJv
eHk+IG1fcHJvdmlzaW9uYWxQYWdlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5jcHAKaW5kZXgg
YTJhMDlkYzQ5MjVkZjQyZTU0ODQ0NTBiZWY0Nzk3OGMwMzk3ZjllNS4uOTA5ZDQ5YWQ4OTI1ODIx
ODI3OWM5NTEzYjMwNTE3ZmI2MzA1MWIyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5LmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUg
IldlYkVycm9ycy5oIgogI2luY2x1ZGUgIldlYk5hdmlnYXRpb25EYXRhU3RvcmUuaCIKICNpbmNs
dWRlICJXZWJOYXZpZ2F0aW9uU3RhdGUuaCIKKyNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIldlYlBhZ2VNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlBh
Z2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCkBAIC04NCw2ICs4
NSw4IEBAIFByb3Zpc2lvbmFsUGFnZVByb3h5OjpQcm92aXNpb25hbFBhZ2VQcm94eShXZWJQYWdl
UHJveHkmIHBhZ2UsIFJlZjxXZWJQcm9jZXNzUHJvCiAgICAgfQogCiAgICAgaW5pdGlhbGl6ZVdl
YlBhZ2UoKTsKKworICAgIG1fcGFnZS5pbnNwZWN0b3JDb250cm9sbGVyKCkuZGlkQ3JlYXRlUHJv
dmlzaW9uYWxQYWdlKCp0aGlzKTsKIH0KIAogUHJvdmlzaW9uYWxQYWdlUHJveHk6On5Qcm92aXNp
b25hbFBhZ2VQcm94eSgpCkBAIC05Myw2ICs5Niw4IEBAIFByb3Zpc2lvbmFsUGFnZVByb3h5Ojp+
UHJvdmlzaW9uYWxQYWdlUHJveHkoKQogICAgIGlmIChtX3dhc0NvbW1pdHRlZCkKICAgICAgICAg
cmV0dXJuOwogCisgICAgbV9wYWdlLmluc3BlY3RvckNvbnRyb2xsZXIoKS53aWxsRGVzdHJveVBy
b3Zpc2lvbmFsUGFnZSgqdGhpcyk7CisKICAgICBpZiAoJm1fcHJvY2Vzcy0+d2Vic2l0ZURhdGFT
dG9yZSgpICE9ICZtX3BhZ2Uud2Vic2l0ZURhdGFTdG9yZSgpKQogICAgICAgICBtX3Byb2Nlc3Mt
PnByb2Nlc3NQb29sKCkucGFnZUVuZFVzaW5nV2Vic2l0ZURhdGFTdG9yZShtX3BhZ2UuaWRlbnRp
ZmllcigpLCBtX3Byb2Nlc3MtPndlYnNpdGVEYXRhU3RvcmUoKSk7CiAKQEAgLTM5MSw2ICszOTYs
OSBAQCB2b2lkIFByb3Zpc2lvbmFsUGFnZVByb3h5OjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RAogICAgICAgICB8fCBkZWNvZGVyLm1lc3NhZ2VO
YW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkU3RhcnRMb2FkRm9yUXVpY2tMb29r
RG9jdW1lbnRJbk1haW5GcmFtZTo6bmFtZSgpCiAgICAgICAgIHx8IGRlY29kZXIubWVzc2FnZU5h
bWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaW5pc2hMb2FkRm9yUXVpY2tMb29r
RG9jdW1lbnRJbk1haW5GcmFtZTo6bmFtZSgpCiAjZW5kaWYKKyAgICAgICAgfHwgZGVjb2Rlci5t
ZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNyZWF0ZUluc3BlY3RvclRh
cmdldDo6bmFtZSgpCisgICAgICAgIHx8IGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpEZXN0cm95SW5zcGVjdG9yVGFyZ2V0OjpuYW1lKCkKKyAgICAgICAg
fHwgZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNlbmRN
ZXNzYWdlVG9JbnNwZWN0b3JGcm9udGVuZDo6bmFtZSgpCiAgICAgICAgICkKICAgICB7CiAgICAg
ICAgIG1fcGFnZS5kaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5LmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5oCmluZGV4IDE3NTIx
NTA0NzQ4YmZiNmYyMDYzY2UxNGNhNDVmZDFjYzcxODNlY2IuLmJlZTgxYmMwYmQ5ZDcxYjRhNjhk
ZjRmOGI5ZTQ3MzZiZDI5YThjZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1Byb3Zpc2lvbmFsUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUHJv
dmlzaW9uYWxQYWdlUHJveHkuaApAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgUHJvdmlz
aW9uYWxQYWdlUHJveHkoV2ViUGFnZVByb3h5JiwgUmVmPFdlYlByb2Nlc3NQcm94eT4mJiwgc3Rk
Ojp1bmlxdWVfcHRyPFN1c3BlbmRlZFBhZ2VQcm94eT4sIHVpbnQ2NF90IG5hdmlnYXRpb25JRCwg
Ym9vbCBpc1NlcnZlclJlZGlyZWN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBQ
cm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50KTsKICAgICB+UHJvdmlzaW9uYWxQYWdlUHJveHko
KTsKIAotICAgIFdlYlBhZ2VQcm94eSYgcGFnZSgpIHsgcmV0dXJuIG1fcGFnZTsgfQorICAgIFdl
YlBhZ2VQcm94eSYgcGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZTsgfQogICAgIFdlYkNvcmU6
OlBhZ2VJZGVudGlmaWVyIHdlYlBhZ2VJRCgpIGNvbnN0IHsgcmV0dXJuIG1fd2ViUGFnZUlEOyB9
CiAgICAgV2ViRnJhbWVQcm94eSogbWFpbkZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9tYWluRnJh
bWUuZ2V0KCk7IH0KICAgICBXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MoKSB7IHJldHVybiBtX3By
b2Nlc3MuZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBh
Z2VJbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBh
Z2VJbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCBiZGE1OWNkODA1MTU3NjQ2YjMwOGQyZmQy
MzZmM2QxMTgyNzFlMGI2Li4yZDljNTgwMjBiMWIxNGE4YmFkZGRjMTNmNWY3NWVmZGMwNjA3Zjgx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZUluc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwCkBAIC0yNiwzMCArMjYsNDQgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oIgogCisjaW5jbHVkZSAiUHJv
dmlzaW9uYWxQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCi0jaW5jbHVk
ZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50LmgiCisjaW5jbHVkZSAiV2ViUGFnZUluc3Bl
Y3RvclRhcmdldC5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckFnZW50QmFzZS5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JUYXJnZXRBZ2VudC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCitzdGF0aWMgU3RyaW5n
IGdldFRhcmdldElEKGNvbnN0IFByb3Zpc2lvbmFsUGFnZVByb3h5JiBwcm92aXNpb25hbFBhZ2Up
Cit7CisgICAgcmV0dXJuIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OnRvVGFyZ2V0SUQocHJvdmlz
aW9uYWxQYWdlLndlYlBhZ2VJRCgpKTsKK30KKwogV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6
OldlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyKFdlYlBhZ2VQcm94eSYgcGFnZSkKICAgICA6IG1f
cGFnZShwYWdlKQogICAgICwgbV9mcm9udGVuZFJvdXRlcihGcm9udGVuZFJvdXRlcjo6Y3JlYXRl
KCkpCiAgICAgLCBtX2JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUo
bV9mcm9udGVuZFJvdXRlci5jb3B5UmVmKCkpKQogewotICAgIGF1dG8gdGFyZ2V0QWdlbnQgPSBt
YWtlVW5pcXVlPFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRBZ2VudD4obV9mcm9udGVuZFJvdXRlci5n
ZXQoKSwgbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKSk7CisgICAgYXV0byB0YXJnZXRBZ2VudCA9
IG1ha2VVbmlxdWU8SW5zcGVjdG9yVGFyZ2V0QWdlbnQ+KG1fZnJvbnRlbmRSb3V0ZXIuZ2V0KCks
IG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCkpOwogCiAgICAgbV90YXJnZXRBZ2VudCA9IHRhcmdl
dEFnZW50LmdldCgpOwogCiAgICAgbV9hZ2VudHMuYXBwZW5kKFdURk1vdmUodGFyZ2V0QWdlbnQp
KTsKIH0KIAordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5pdCgpCit7CisgICAg
U3RyaW5nIHBhZ2VUYXJnZXRJZCA9IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OnRvVGFyZ2V0SUQo
bV9wYWdlLndlYlBhZ2VJRCgpKTsKKyAgICBjcmVhdGVJbnNwZWN0b3JUYXJnZXQocGFnZVRhcmdl
dElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGU6OlBhZ2UpOworfQorCiB2b2lkIFdl
YlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpwYWdlQ2xvc2VkKCkKIHsKICAgICBkaXNjb25uZWN0
QWxsRnJvbnRlbmRzKCk7CkBAIC0xMzQsMzcgKzE0OCw1NyBAQCB2b2lkIFdlYlBhZ2VJbnNwZWN0
b3JDb250cm9sbGVyOjpzZXRJbmRpY2F0aW5nKGJvb2wgaW5kaWNhdGluZykKIH0KICNlbmRpZgog
Ci12b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpjbGVhclRhcmdldHMoKQordm9pZCBX
ZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6Y3JlYXRlSW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0
cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQogewot
ICAgIGZvciAoYXV0byYgdGFyZ2V0IDogbV90YXJnZXRzKQotICAgICAgICBtX3RhcmdldEFnZW50
LT50YXJnZXREZXN0cm95ZWQoKnRhcmdldC5nZXQoKSk7Ci0KLSAgICBtX3RhcmdldHMuY2xlYXIo
KTsKKyAgICBhZGRUYXJnZXQoSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNyZWF0ZShtX3BhZ2UsIHRh
cmdldElkLCB0eXBlKSk7CiB9CiAKLXZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmNy
ZWF0ZUluc3BlY3RvclRhcmdldChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Oklu
c3BlY3RvclRhcmdldFR5cGUgdHlwZSkKK3ZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6
OmRlc3Ryb3lJbnNwZWN0b3JUYXJnZXQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCkKIHsKLSAgICBh
dXRvIHRhcmdldCA9IEluc3BlY3RvclRhcmdldFByb3h5OjpjcmVhdGUobV9wYWdlLCB0YXJnZXRJ
ZCwgdHlwZSk7Ci0gICAgbV90YXJnZXRzLmFwcGVuZCh0YXJnZXQuY29weVJlZigpKTsKKyAgICBh
dXRvIGl0ID0gbV90YXJnZXRzLmZpbmQodGFyZ2V0SWQpOworICAgIGlmIChpdCA9PSBtX3Rhcmdl
dHMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX3RhcmdldEFnZW50LT50YXJnZXREZXN0
cm95ZWQoKml0LT52YWx1ZSk7CisgICAgbV90YXJnZXRzLnJlbW92ZShpdCk7Cit9CiAKLSAgICBt
X3RhcmdldEFnZW50LT50YXJnZXRDcmVhdGVkKHRhcmdldC5nZXQoKSk7Cit2b2lkIFdlYlBhZ2VJ
bnNwZWN0b3JDb250cm9sbGVyOjpzZW5kTWVzc2FnZVRvSW5zcGVjdG9yRnJvbnRlbmQoY29uc3Qg
U3RyaW5nJiB0YXJnZXRJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIG1fdGFyZ2V0
QWdlbnQtPnNlbmRNZXNzYWdlRnJvbVRhcmdldFRvRnJvbnRlbmQodGFyZ2V0SWQsIG1lc3NhZ2Up
OwogfQogCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpkZXN0cm95SW5zcGVjdG9y
VGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250
cm9sbGVyOjpkaWRDcmVhdGVQcm92aXNpb25hbFBhZ2UoUHJvdmlzaW9uYWxQYWdlUHJveHkmIHBy
b3Zpc2lvbmFsUGFnZSkKIHsKLSAgICBhdXRvIHBvc2l0aW9uID0gbV90YXJnZXRzLmZpbmRNYXRj
aGluZyhbJl0oY29uc3QgYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS0+aWRlbnRpZmllcigpID09
IHRhcmdldElkOyB9KTsKLSAgICBpZiAocG9zaXRpb24gPT0gbm90Rm91bmQpCi0gICAgICAgIHJl
dHVybjsKKyAgICBhZGRUYXJnZXQoSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNyZWF0ZShwcm92aXNp
b25hbFBhZ2UsIGdldFRhcmdldElEKHByb3Zpc2lvbmFsUGFnZSksIEluc3BlY3Rvcjo6SW5zcGVj
dG9yVGFyZ2V0VHlwZTo6UGFnZSkpOworfQogCi0gICAgYXV0byYgdGFyZ2V0ID0gbV90YXJnZXRz
W3Bvc2l0aW9uXTsKLSAgICBtX3RhcmdldEFnZW50LT50YXJnZXREZXN0cm95ZWQoKnRhcmdldC5n
ZXQoKSk7Cit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsRGVzdHJveVByb3Zp
c2lvbmFsUGFnZShjb25zdCBQcm92aXNpb25hbFBhZ2VQcm94eSYgcHJvdmlzaW9uYWxQYWdlKQor
eworICAgIGRlc3Ryb3lJbnNwZWN0b3JUYXJnZXQoZ2V0VGFyZ2V0SUQocHJvdmlzaW9uYWxQYWdl
KSk7Cit9CiAKLSAgICBtX3RhcmdldHMucmVtb3ZlKHBvc2l0aW9uKTsKK3ZvaWQgV2ViUGFnZUlu
c3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdFByb3Zpc2lvbmFsUGFnZShXZWJDb3JlOjpQYWdl
SWRlbnRpZmllciBvbGRXZWJQYWdlSUQsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIG5ld1dlYlBh
Z2VJRCkKK3sKKyAgICBTdHJpbmcgb2xkSUQgPSBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojp0b1Rh
cmdldElEKG9sZFdlYlBhZ2VJRCk7CisgICAgU3RyaW5nIG5ld0lEID0gV2ViUGFnZUluc3BlY3Rv
clRhcmdldDo6dG9UYXJnZXRJRChuZXdXZWJQYWdlSUQpOworICAgIGF1dG8gbmV3VGFyZ2V0ID0g
bV90YXJnZXRzLnRha2UobmV3SUQpOworICAgIEFTU0VSVChuZXdUYXJnZXQpOworICAgIG5ld1Rh
cmdldC0+ZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQoKTsKKyAgICBtX3RhcmdldEFnZW50LT5k
aWRDb21taXRQcm92aXNpb25hbFRhcmdldChvbGRJRCwgbmV3SUQpOworCisgICAgLy8gV2UndmUg
ZGlzY29ubmVjdGVkIGZyb20gdGhlIG9sZCBwYWdlIGFuZCB3aWxsIG5vdCByZWNlaXZlIGFueSBt
ZXNzYWdlIGZyb20gaXQsIHNvCisgICAgLy8gd2UgZGVzdHJveSBldmVyeXRoaW5nIGJ1dCB0aGUg
bmV3IHRhcmdldCBoZXJlLgorICAgIC8vIEZJWE1FOiBkbyBub3QgZGVzdHJveSB0YXJnZXRzIHRo
YXQgYmVsb25nIHRvIHRoZSBjb21taXR0ZWQgcGFnZS4KKyAgICBmb3IgKGF1dG8mIHRhcmdldCA6
IG1fdGFyZ2V0cy52YWx1ZXMoKSkKKyAgICAgICAgbV90YXJnZXRBZ2VudC0+dGFyZ2V0RGVzdHJv
eWVkKCp0YXJnZXQpOworICAgIG1fdGFyZ2V0cy5jbGVhcigpOworICAgIG1fdGFyZ2V0cy5zZXQo
bmV3VGFyZ2V0LT5pZGVudGlmaWVyKCksIFdURk1vdmUobmV3VGFyZ2V0KSk7CiB9CiAKLXZvaWQg
V2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OnNlbmRNZXNzYWdlVG9JbnNwZWN0b3JGcm9udGVu
ZChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit2b2lkIFdl
YlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjphZGRUYXJnZXQoc3RkOjp1bmlxdWVfcHRyPEluc3Bl
Y3RvclRhcmdldFByb3h5PiYmIHRhcmdldCkKIHsKLSAgICBtX3RhcmdldEFnZW50LT5zZW5kTWVz
c2FnZUZyb21UYXJnZXRUb0Zyb250ZW5kKHRhcmdldElkLCBtZXNzYWdlKTsKKyAgICBtX3Rhcmdl
dEFnZW50LT50YXJnZXRDcmVhdGVkKCp0YXJnZXQpOworICAgIG1fdGFyZ2V0cy5zZXQodGFyZ2V0
LT5pZGVudGlmaWVyKCksIFdURk1vdmUodGFyZ2V0KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZUluc3BlY3Rv
ckNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JD
b250cm9sbGVyLmgKaW5kZXggMGNhZjZhMWMyNzkyMDQzZDNiZTA1NzFhMjhmZGIxZTE0MTk3YTYx
MS4uYTcwZGNlNzViZGVlMDdjMjMyYjhiYTM1ZGZjYzA4ZDE2MWI2MDcxZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oCkBA
IC00Niw2ICs0Niw3IEBAIGNsYXNzIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyIHsKIHB1Ymxp
YzoKICAgICBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcihXZWJQYWdlUHJveHkmKTsKIAorICAg
IHZvaWQgaW5pdCgpOwogICAgIHZvaWQgcGFnZUNsb3NlZCgpOwogCiAgICAgYm9vbCBoYXNMb2Nh
bEZyb250ZW5kKCkgY29uc3Q7CkBAIC02MCwxOCArNjEsMjMgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0SW5kaWNhdGluZyhib29sKTsKICNlbmRpZgogCi0gICAgdm9pZCBjbGVhclRhcmdldHMoKTsK
ICAgICB2b2lkIGNyZWF0ZUluc3BlY3RvclRhcmdldChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJ
bnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUpOwogICAgIHZvaWQgZGVzdHJveUluc3BlY3Rv
clRhcmdldChjb25zdCBTdHJpbmcmIHRhcmdldElkKTsKICAgICB2b2lkIHNlbmRNZXNzYWdlVG9J
bnNwZWN0b3JGcm9udGVuZChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpOwogCisgICAgdm9pZCBkaWRDcmVhdGVQcm92aXNpb25hbFBhZ2UoUHJvdmlzaW9uYWxQ
YWdlUHJveHkmKTsKKyAgICB2b2lkIHdpbGxEZXN0cm95UHJvdmlzaW9uYWxQYWdlKGNvbnN0IFBy
b3Zpc2lvbmFsUGFnZVByb3h5Jik7CisgICAgdm9pZCBkaWRDb21taXRQcm92aXNpb25hbFBhZ2Uo
V2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgb2xkV2ViUGFnZUlELCBXZWJDb3JlOjpQYWdlSWRlbnRp
ZmllciBuZXdXZWJQYWdlSUQpOworCiBwcml2YXRlOgorICAgIHZvaWQgYWRkVGFyZ2V0KHN0ZDo6
dW5pcXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQcm94eT4mJik7CisKICAgICBXZWJQYWdlUHJveHkm
IG1fcGFnZTsKICAgICBSZWY8SW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlcj4gbV9mcm9udGVuZFJv
dXRlcjsKICAgICBSZWY8SW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlz
cGF0Y2hlcjsKICAgICBJbnNwZWN0b3I6OkFnZW50UmVnaXN0cnkgbV9hZ2VudHM7CiAgICAgSW5z
cGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRBZ2VudCogbV90YXJnZXRBZ2VudDsKLSAgICBWZWN0b3I8
UmVmUHRyPEluc3BlY3RvclRhcmdldFByb3h5Pj4gbV90YXJnZXRzOworICAgIEhhc2hNYXA8U3Ry
aW5nLCBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJveHk+PiBtX3RhcmdldHM7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBiYTAwMWMwOGQwMmY3ZWQ2YzAwODU2NmY3YWY4OWEzODFjZGVkMjE1Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRBZ2VudC5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSw1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JU
YXJnZXRBZ2VudC5oIgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViUGFnZUluc3BlY3RvclRh
cmdldEFnZW50OjpXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQoSW5zcGVjdG9yOjpGcm9udGVu
ZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIsIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXImIGJh
Y2tlbmREaXNwYXRjaGVyKQotICAgIDogSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRBZ2VudChm
cm9udGVuZFJvdXRlciwgYmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBtX3JvdXRlcihmcm9udGVu
ZFJvdXRlcikKLXsKLX0KLQotV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50Ojp+V2ViUGFnZUlu
c3BlY3RvclRhcmdldEFnZW50KCkgPSBkZWZhdWx0OwotCi1JbnNwZWN0b3I6OkZyb250ZW5kQ2hh
bm5lbCYgV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50Ojpmcm9udGVuZENoYW5uZWwoKQotewot
ICAgIHJldHVybiAqdGhpczsKLX0KLQotSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5l
Y3Rpb25UeXBlIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRBZ2VudDo6Y29ubmVjdGlvblR5cGUoKSBj
b25zdAotewotICAgIHJldHVybiBtX3JvdXRlci5oYXNMb2NhbEZyb250ZW5kKCkgPyBJbnNwZWN0
b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGU6OkxvY2FsIDogSW5zcGVjdG9yOjpG
cm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlOjpSZW1vdGU7Ci19Ci0KLXZvaWQgV2ViUGFn
ZUluc3BlY3RvclRhcmdldEFnZW50OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5n
JikKLXsKLSAgICAvLyBJbnRlbnRpb25hbGx5IGlnbm9yZWQsIHRoaXMgY2hhbm5lbCBpcyBub3Qg
YWN0dWFsbHkgdXNlZCB0byBzZW5kIG1lc3NhZ2VzLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRBZ2VudC5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDk2M2Y5YzNjY2NlYTU0ODdhNGNlMjkzZWM1ZTA4M2E4Y2M4YjUxNTQuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50LmgKKysrIC9kZXYvbnVsbApA
QCAtMSw0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JUYXJn
ZXRBZ2VudC5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZUluc3BlY3Rv
clRhcmdldEFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0QWdl
bnQsIHB1YmxpYyBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCB7Ci1wdWJsaWM6Ci0gICAgV2Vi
UGFnZUluc3BlY3RvclRhcmdldEFnZW50KEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXImLCBJbnNw
ZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyJik7Ci0gICAgdmlydHVhbCB+V2ViUGFnZUluc3BlY3Rv
clRhcmdldEFnZW50KCk7Ci0KLSAgICAvLyBJbnNwZWN0b3JUYXJnZXRBZ2VudAotICAgIEluc3Bl
Y3Rvcjo6RnJvbnRlbmRDaGFubmVsJiBmcm9udGVuZENoYW5uZWwoKTsKLQotICAgIC8vIEZyb250
ZW5kQ2hhbm5lbAotICAgIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlw
ZSBjb25uZWN0aW9uVHlwZSgpIGNvbnN0OwotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KGNvbnN0IFN0cmluZyYpOwotCi1wcml2YXRlOgotICAgIEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0
ZXImIG1fcm91dGVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCAwNDE4MmI5OGNhMjA3ZmMyMmE3NGRlMTkx
MDY3ZDU4NTU2YmI4NDZhLi40NTEwMWIxMzhkMTEzNzYzOTk3ZDlmMzNhNTVlNWEyZmFlMzE2Mzk1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTQ5MSw4ICs0
OTEsNyBAQCBXZWJQYWdlUHJveHk6OldlYlBhZ2VQcm94eShQYWdlQ2xpZW50JiBwYWdlQ2xpZW50
LCBXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MsIFJlZgogICAgIG1faW5zcGVjdG9yRGVidWdnYWJs
ZS0+c2V0UmVtb3RlRGVidWdnaW5nQWxsb3dlZCh0cnVlKTsKICAgICBtX2luc3BlY3RvckRlYnVn
Z2FibGUtPmluaXQoKTsKICNlbmRpZgotCi0gICAgY3JlYXRlSW5zcGVjdG9yVGFyZ2V0cygpOwor
ICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5pdCgpOwogfQogCiBXZWJQYWdlUHJveHk6On5X
ZWJQYWdlUHJveHkoKQpAQCAtODQyLDkgKzg0MSw2IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpmaW5p
c2hBdHRhY2hpbmdUb1dlYlByb2Nlc3MoUHJvY2Vzc0xhdW5jaFJlYXNvbiByZWFzb24pCiAgICAg
cmVtb3RlSW5zcGVjdG9ySW5mb3JtYXRpb25EaWRDaGFuZ2UoKTsKICNlbmRpZgogCi0gICAgY2xl
YXJJbnNwZWN0b3JUYXJnZXRzKCk7Ci0gICAgY3JlYXRlSW5zcGVjdG9yVGFyZ2V0cygpOwotCiAg
ICAgcGFnZUNsaWVudCgpLmRpZFJlbGF1bmNoUHJvY2VzcygpOwogICAgIG1fcGFnZUxvYWRTdGF0
ZS5kaWRTd2FwV2ViUHJvY2Vzc2VzKCk7CiAgICAgaWYgKHJlYXNvbiAhPSBQcm9jZXNzTGF1bmNo
UmVhc29uOjpJbml0aWFsUHJvY2VzcykKQEAgLTE2MjgsMTcgKzE2MjQsNiBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6cmVtb3RlSW5zcGVjdG9ySW5mb3JtYXRpb25EaWRDaGFuZ2UoKQogfQogI2VuZGlm
CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpjbGVhckluc3BlY3RvclRhcmdldHMoKQotewotICAgIG1f
aW5zcGVjdG9yQ29udHJvbGxlci0+Y2xlYXJUYXJnZXRzKCk7Ci19Ci0KLXZvaWQgV2ViUGFnZVBy
b3h5OjpjcmVhdGVJbnNwZWN0b3JUYXJnZXRzKCkKLXsKLSAgICBTdHJpbmcgcGFnZVRhcmdldElk
ID0gbWFrZVN0cmluZygicGFnZS0iLCBtX3dlYlBhZ2VJRC50b1VJbnQ2NCgpKTsKLSAgICBtX2lu
c3BlY3RvckNvbnRyb2xsZXItPmNyZWF0ZUluc3BlY3RvclRhcmdldChwYWdlVGFyZ2V0SWQsIElu
c3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZTo6UGFnZSk7Ci19Ci0KIHZvaWQgV2ViUGFnZVBy
b3h5OjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgT3B0aW9uYWw8Q29sb3I+JiBjb2xvcikKIHsK
ICAgICBpZiAobV9iYWNrZ3JvdW5kQ29sb3IgPT0gY29sb3IpCkBAIC0yOTk3LDYgKzI5ODIsNyBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6Y29tbWl0UHJvdmlzaW9uYWxQYWdlKEZyYW1lSWRlbnRpZmll
ciBmcmFtZUlELCB1aW50NjRfdCBuYXZpZwogICAgIGlmICghZGlkU3VzcGVuZFByZXZpb3VzUGFn
ZSkKICAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDbG9zZSgpLCBt
X3dlYlBhZ2VJRCk7CiAKKyAgICBjb25zdCBhdXRvIG9sZFdlYlBhZ2VJRCA9IG1fd2ViUGFnZUlE
OwogICAgIHN3YXBUb1dlYlByb2Nlc3MobV9wcm92aXNpb25hbFBhZ2UtPnByb2Nlc3MoKSwgbV9w
cm92aXNpb25hbFBhZ2UtPndlYlBhZ2VJRCgpLCBtX3Byb3Zpc2lvbmFsUGFnZS0+dGFrZURyYXdp
bmdBcmVhKCksIG1fcHJvdmlzaW9uYWxQYWdlLT5tYWluRnJhbWUoKSk7CiAKICNpZiBQTEFURk9S
TShDT0NPQSkKQEAgLTMwMDcsNiArMjk5Myw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpjb21taXRQ
cm92aXNpb25hbFBhZ2UoRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIHVpbnQ2NF90IG5hdmlnCiAK
ICAgICBkaWRDb21taXRMb2FkRm9yRnJhbWUoZnJhbWVJRCwgbmF2aWdhdGlvbklELCBtaW1lVHlw
ZSwgZnJhbWVIYXNDdXN0b21Db250ZW50UHJvdmlkZXIsIGZyYW1lTG9hZFR5cGUsIGNlcnRpZmlj
YXRlSW5mbywgY29udGFpbnNQbHVnaW5Eb2N1bWVudCwgZm9yY2VkSGFzSW5zZWN1cmVDb250ZW50
LCB1c2VyRGF0YSk7CiAKKyAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRpZENvbW1pdFByb3Zp
c2lvbmFsUGFnZShvbGRXZWJQYWdlSUQsIG1fd2ViUGFnZUlEKTsKICAgICBtX3Byb3Zpc2lvbmFs
UGFnZSA9IG51bGxwdHI7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgK
aW5kZXggYTQxNjk3Y2Q1MWViYzlhZDIzNWM3NWE1ZjMxZjNiNmJkYWU4ODAxMy4uMjdhMDRjY2Zi
ZmU0OTY0MTAzMjZkNjY0NTBjM2U5NTRhMDVlYjQ4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmgKQEAgLTIwNjIsOSArMjA2Miw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lk
IHN0b3BBbGxVUkxTY2hlbWVUYXNrcyhXZWJQcm9jZXNzUHJveHkqID0gbnVsbHB0cik7CiAKLSAg
ICB2b2lkIGNsZWFySW5zcGVjdG9yVGFyZ2V0cygpOwotICAgIHZvaWQgY3JlYXRlSW5zcGVjdG9y
VGFyZ2V0cygpOwotCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKICAgICB2b2lkIHJl
Z2lzdGVyQXR0YWNobWVudElkZW50aWZpZXJGcm9tRGF0YShjb25zdCBTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIGNvbnRlbnRUeXBlLCBjb25zdCBTdHJpbmcmIHByZWZlcnJlZEZpbGVOYW1lLCBjb25z
dCBJUEM6OkRhdGFSZWZlcmVuY2UmKTsKICAgICB2b2lkIHJlZ2lzdGVyQXR0YWNobWVudElkZW50
aWZpZXJGcm9tRmlsZVBhdGgoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlw
ZSwgY29uc3QgU3RyaW5nJiBmaWxlUGF0aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkYWFhMTdlYjZiY2IyNjY0ODY0NDg0NTVjYTYx
ZWJiNGUyZGM4ZDdlLi4xM2JjN2M0ZjU0MmI5Nzg4MjQ2MDhiMjA0OTVjOTRhZWIyMzYyYzY4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTEzNjgsNyArMTM2OCw2IEBACiAJCUE1NDNFMzA3MjE1QUQxMzcwMDI3OUNEOSAvKiBXZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTQzRTMwNTIxNUFEMTJEMDAyNzlDRDkgLyogV2ViUGFn
ZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5oICovOyB9OwogCQlBNTQzRTMwQzIxNUM4
QThEMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU0M0UzMDgyMTVDOEE4MzAwMjc5Q0Q5IC8q
IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCAqLzsgfTsKIAkJQTU0M0UzMEQyMTVDOEE5MDAwMjc5
Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTQzRTMwQjIxNUM4QTg0MDAyNzlDRDkg
LyogV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuaCAqLzsgfTsKLQkJQTU0M0UzMTAy
MTVEOENFNjAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRBZ2VudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU0M0UzMEUyMTVEOENFMjAw
Mjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRBZ2VudC5oICovOyB9OwogCQlBNTVCQTgx
MDFCQTEzMTdFMDA3Q0QzM0QgLyogX1dLUmVtb3RlV2ViSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1NUJBODBD
MUJBMTJCRTEwMDdDRDMzRCAvKiBfV0tSZW1vdGVXZWJJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE1NUJB
ODE3MUJBMjNFMTIwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JVSS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU1QkE4MTMxQkEyM0UwNTAwN0NE
MzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclVJLmggKi87IH07CiAJCUE1NUJBODFGMUJBMjVCMjcw
MDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU1QkE4MTkxQkEyNUIxRTAwN0NEMzNEIC8qIFJl
bW90ZVdlYkluc3BlY3RvclByb3h5LmggKi87IH07CkBAIC00MTEyLDggKzQxMTEsNiBAQAogCQlB
NTQzRTMwOTIxNUM4QTgzMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xs
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xs
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTQzRTMwQTIxNUM4QTg0MDAy
NzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QTU0M0UzMEIyMTVDOEE4NDAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9s
bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE1NDNFMzBFMjE1RDhDRTIwMDI3OUNEOSAv
KiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGFnZUlu
c3BlY3RvclRhcmdldEFnZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE1NDNF
MzBGMjE1RDhDRTIwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTU1QkE4MEMxQkExMkJFMTAwN0NEMzNEIC8qIF9XS1Jl
bW90ZVdlYkluc3BlY3RvclZpZXdDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IF9XS1JlbW90ZVdlYkluc3BlY3RvclZpZXdDb250cm9sbGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1NUJBODBEMUJBMTJCRTEwMDdDRDMzRCAvKiBfV0tSZW1v
dGVXZWJJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IF9XS1JlbW90ZVdlYkluc3BlY3RvclZpZXdDb250cm9sbGVyLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTVCQTgxMjFCQTIzRTA1MDA3Q0QzM0QgLyog
UmVtb3RlV2ViSW5zcGVjdG9yVUkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUmVtb3RlV2ViSW5zcGVjdG9yVUkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNzg5Myw4ICs3ODkwLDYgQEAKIAkJCQkyRDlFQTMwRTFBOTZDQkZGMDAyRDI4MDcgLyog
V2ViUGFnZUluamVjdGVkQnVuZGxlQ2xpZW50LmggKi8sCiAJCQkJQTUxM0Y1M0YyMTU0QTVDRDAw
NjYyODQxIC8qIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmNwcCAqLywKIAkJCQlBNTEzRjUz
RTIxNTRBNUNDMDA2NjI4NDEgLyogV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaCAqLywKLQkJ
CQlBNTQzRTMwRjIxNUQ4Q0UyMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50
LmNwcCAqLywKLQkJCQlBNTQzRTMwRTIxNUQ4Q0UyMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3Rv
clRhcmdldEFnZW50LmggKi8sCiAJCQkJQkMxMTFCMEIxMTJGNUU0RjAwMzM3QkFCIC8qIFdlYlBh
Z2VQcm94eS5jcHAgKi8sCiAJCQkJQkMwMzJEQ0IxMEY0Mzg5RjAwNThDMTVBIC8qIFdlYlBhZ2VQ
cm94eS5oICovLAogCQkJCUJDQkQzOEZBMTI1QkFCOUEwMEQyQzI5RiAvKiBXZWJQYWdlUHJveHku
bWVzc2FnZXMuaW4gKi8sCkBAIC05OTc5LDcgKzk5NzQsNiBAQAogCQkJCTJEOUVBMzBGMUE5NkNC
RkYwMDJEMjgwNyAvKiBXZWJQYWdlSW5qZWN0ZWRCdW5kbGVDbGllbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE1MTNGNTQwMjE1NEE1RDcwMDY2Mjg0MSAvKiBXZWJQYWdlSW5zcGVjdG9yQ29udHJv
bGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU0M0UzMEMyMTVDOEE4RDAwMjc5Q0Q5IC8qIFdl
YlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCBpbiBIZWFkZXJzICovLAotCQkJCUE1NDNFMzEwMjE1RDhD
RTYwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE1NDNFMzBEMjE1QzhBOTAwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU0M0UzMDcyMTVBRDEzNzAwMjc5Q0Q5
IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaCBpbiBIZWFkZXJzICov
LAogCQkJCUMwQ0U3MkExMTI0N0U3MUQwMEJDMEVDNCAvKiBXZWJQYWdlTWVzc2FnZXMuaCBpbiBI
ZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZUluc3BlY3RvclRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcAppbmRleCA1NmIwZDUyZWM1OTU3Y2M3M2Ex
M2YwNjdlYjNjZGEwMzJkZTIxNzU4Li5hNzBmNmZkNTIwOTZhNWRjYTkwMWVhNzBhMzc1NWYxNGQ2
YjRhMGZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1
ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCIKIAogI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNp
bmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmgiCiAjaW5jbHVk
ZSA8V2ViQ29yZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdl
Lmg+CiAKQEAgLTQxLDE5ICs0MiwyNSBAQCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0OjpXZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0KFdlYlBhZ2UmIHBhZ2UpCiAKIFN0cmluZyBXZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0OjppZGVudGlmaWVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbWFrZVN0cmluZygicGFn
ZS0iLCBtX3BhZ2UuaWRlbnRpZmllcigpLnRvVUludDY0KCkpOworICAgIHJldHVybiB0b1Rhcmdl
dElEKG1fcGFnZS5pZGVudGlmaWVyKCkpOwogfQogCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXQ6OmNvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwmIGNoYW5uZWwpCit2b2lkIFdl
YlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OmNvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6
OkNvbm5lY3Rpb25UeXBlIGNvbm5lY3Rpb25UeXBlKQogeworICAgIGlmIChtX2NoYW5uZWwpCisg
ICAgICAgIHJldHVybjsKKyAgICBtX2NoYW5uZWwgPSBtYWtlVW5pcXVlPFdlYlBhZ2VJbnNwZWN0
b3JUYXJnZXRGcm9udGVuZENoYW5uZWw+KG1fcGFnZSwgaWRlbnRpZmllcigpLCBjb25uZWN0aW9u
VHlwZSk7CiAgICAgaWYgKG1fcGFnZS5jb3JlUGFnZSgpKQotICAgICAgICBtX3BhZ2UuY29yZVBh
Z2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmNvbm5lY3RGcm9udGVuZChjaGFubmVsKTsKKyAg
ICAgICAgbV9wYWdlLmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5jb25uZWN0RnJv
bnRlbmQoKm1fY2hhbm5lbCk7CiB9CiAKLXZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldDo6ZGlz
Y29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYgY2hhbm5lbCkKK3ZvaWQgV2ViUGFn
ZUluc3BlY3RvclRhcmdldDo6ZGlzY29ubmVjdCgpCiB7CisgICAgaWYgKCFtX2NoYW5uZWwpCisg
ICAgICAgIHJldHVybjsKICAgICBpZiAobV9wYWdlLmNvcmVQYWdlKCkpCi0gICAgICAgIG1fcGFn
ZS5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZGlzY29ubmVjdEZyb250ZW5kKGNo
YW5uZWwpOworICAgICAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigp
LmRpc2Nvbm5lY3RGcm9udGVuZCgqbV9jaGFubmVsKTsKKyAgICBtX2NoYW5uZWwucmVzZXQoKTsK
IH0KIAogdm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0OjpzZW5kTWVzc2FnZVRvVGFyZ2V0QmFj
a2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCkBAIC02Miw0ICs2OSwxMCBAQCB2b2lkIFdlYlBh
Z2VJbnNwZWN0b3JUYXJnZXQ6OnNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKICAgICAgICAgbV9wYWdlLmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xs
ZXIoKS5kaXNwYXRjaE1lc3NhZ2VGcm9tRnJvbnRlbmQobWVzc2FnZSk7CiB9CiAKK1N0cmluZyBX
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojp0b1RhcmdldElEKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVy
IHBhZ2VJRCkKK3sKKyAgICByZXR1cm4gbWFrZVN0cmluZygicGFnZS0iLCBwYWdlSUQudG9VSW50
NjQoKSk7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmggYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmgKaW5k
ZXggYjcwZTMxYzhiODc3MGM0YmYxZWNiNDU4OGViZjI2NzViM2I5ZjQ2NC4uNmNiZDdmYWQ1ZmY5
MWFmZDg1OGRhMzQ2YWRiZmVlZDY0MjRiMGIyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaApAQCAtMjYs
MjkgKzI2LDM0IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvclRhcmdldC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZUlkZW50aWZpZXIuaD4KICNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNz
IFdlYlBhZ2U7CitjbGFzcyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsOwog
CiBjbGFzcyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6
SW5zcGVjdG9yVGFyZ2V0IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0KTsKIHB1YmxpYzoKLSAgICBX
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0KFdlYlBhZ2UmKTsKKyAgICBleHBsaWNpdCBXZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0KFdlYlBhZ2UmKTsKICAgICB+V2ViUGFnZUluc3BlY3RvclRhcmdldCgpID0g
ZGVmYXVsdDsKIAogICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlOjpQYWdlOyB9
CiAKICAgICBTdHJpbmcgaWRlbnRpZmllcigpIGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBjb25u
ZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJik7Ci0gICAgdm9pZCBkaXNjb25uZWN0KElu
c3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJik7Ci0gICAgdm9pZCBzZW5kTWVzc2FnZVRvVGFyZ2V0
QmFja2VuZChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGNvbm5lY3QoSW5zcGVjdG9yOjpGcm9u
dGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpc2Nvbm5l
Y3QoKSBvdmVycmlkZTsKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0
IFN0cmluZyYpIG92ZXJyaWRlOworCisgICAgc3RhdGljIFN0cmluZyB0b1RhcmdldElEKFdlYkNv
cmU6OlBhZ2VJZGVudGlmaWVyKTsKIAogcHJpdmF0ZToKICAgICBXZWJQYWdlJiBtX3BhZ2U7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw+
IG1fY2hhbm5lbDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRy
b2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3Bl
Y3RvclRhcmdldENvbnRyb2xsZXIuY3BwCmluZGV4IDUyNTQ4OTY3M2Q2NmEyZTRhN2ZkMzJmMzY0
ODUzNGNlM2VkZWVjNDcuLmNkYTRmMWU4ZDNjNTc1MzYxNjJhYTM5MGVkNzRiNjgxYzg5MTM0MGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5jcHAKQEAgLTU4LDcgKzU4
LDYgQEAgdm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6cmVtb3ZlVGFyZ2V0
KEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0JgogICAgIG1fcGFnZS5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OkRlc3Ryb3lJbnNwZWN0b3JUYXJnZXQodGFyZ2V0LmlkZW50aWZpZXIoKSkp
OwogCiAgICAgbV90YXJnZXRzLnJlbW92ZSh0YXJnZXQuaWRlbnRpZmllcigpKTsKLSAgICBtX3Rh
cmdldEZyb250ZW5kQ2hhbm5lbHMucmVtb3ZlKHRhcmdldC5pZGVudGlmaWVyKCkpOwogfQogCiB2
b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpjb25uZWN0SW5zcGVjdG9yKGNv
bnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0
aW9uVHlwZSBjb25uZWN0aW9uVHlwZSkKQEAgLTY3LDEzICs2Niw3IEBAIHZvaWQgV2ViUGFnZUlu
c3BlY3RvclRhcmdldENvbnRyb2xsZXI6OmNvbm5lY3RJbnNwZWN0b3IoY29uc3QgU3RyaW5nJiB0
YXJnZXRJZCwKICAgICBpZiAoIXRhcmdldCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRy
PFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw+IGNoYW5uZWwgPSBtX3Rhcmdl
dEZyb250ZW5kQ2hhbm5lbHMuZ2V0KHRhcmdldElkKTsKLSAgICBpZiAoIWNoYW5uZWwpIHsKLSAg
ICAgICAgY2hhbm5lbCA9IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw6OmNy
ZWF0ZSgqdGhpcywgdGFyZ2V0SWQsIGNvbm5lY3Rpb25UeXBlKTsKLSAgICAgICAgbV90YXJnZXRG
cm9udGVuZENoYW5uZWxzLnNldCh0YXJnZXQtPmlkZW50aWZpZXIoKSwgY2hhbm5lbCk7Ci0gICAg
fQotCi0gICAgdGFyZ2V0LT5jb25uZWN0KCpjaGFubmVsLmdldCgpKTsKKyAgICB0YXJnZXQtPmNv
bm5lY3QoY29ubmVjdGlvblR5cGUpOwogfQogCiB2b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRD
b250cm9sbGVyOjpkaXNjb25uZWN0SW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpCkBA
IC04MiwxMSArNzUsNyBAQCB2b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpk
aXNjb25uZWN0SW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgdGFyZ2V0SQogICAgIGlmICghdGFyZ2V0
KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8V2ViUGFnZUluc3BlY3RvclRhcmdldEZy
b250ZW5kQ2hhbm5lbD4gY2hhbm5lbCA9IG1fdGFyZ2V0RnJvbnRlbmRDaGFubmVscy50YWtlKHRh
cmdldElkKTsKLSAgICBpZiAoIWNoYW5uZWwpCi0gICAgICAgIHJldHVybjsKLQotICAgIHRhcmdl
dC0+ZGlzY29ubmVjdCgqY2hhbm5lbC5nZXQoKSk7CisgICAgdGFyZ2V0LT5kaXNjb25uZWN0KCk7
CiB9CiAKIHZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6OnNlbmRNZXNzYWdl
VG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSkKQEAgLTk4LDkgKzg3LDQgQEAgdm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJv
bGxlcjo6c2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoY29uc3QgU3RyaW5nJgogICAgIHRhcmdl
dC0+c2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQobWVzc2FnZSk7CiB9CiAKLXZvaWQgV2ViUGFn
ZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6OnNlbmRNZXNzYWdlVG9UYXJnZXRGcm9udGVuZChj
b25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgbV9w
YWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2VuZE1lc3NhZ2VUb0luc3BlY3RvckZy
b250ZW5kKHRhcmdldElkLCBtZXNzYWdlKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3Bl
Y3RvclRhcmdldENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmgKaW5kZXggM2U5MmI3YTlkYTllNTYw
OWU2MDE2NjM5YzA5YjczY2I1OTZmOGFmNS4uN2M5MzFkYWQxYzk4MDBmMDNkNzNkNGE3Y2EyNTg4
ZGQwMjhhOGYyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oCkBAIC0y
Niw3ICsyNiw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JU
YXJnZXQuaCIKLSNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVs
LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIApAQCAtNTAsMTMgKzQ5LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbm5lY3RJbnNw
ZWN0b3IoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6
OkNvbm5lY3Rpb25UeXBlKTsKICAgICB2b2lkIGRpc2Nvbm5lY3RJbnNwZWN0b3IoY29uc3QgU3Ry
aW5nJiB0YXJnZXRJZCk7CiAgICAgdm9pZCBzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25z
dCBTdHJpbmcmIHRhcmdldElkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIHZvaWQgc2Vu
ZE1lc3NhZ2VUb1RhcmdldEZyb250ZW5kKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSk7CiAKIHByaXZhdGU6CiAgICAgV2ViUGFnZSYgbV9wYWdlOwogICAgIFdl
YlBhZ2VJbnNwZWN0b3JUYXJnZXQgbV9wYWdlVGFyZ2V0OwogICAgIEhhc2hNYXA8U3RyaW5nLCBJ
bnNwZWN0b3I6Okluc3BlY3RvclRhcmdldCo+IG1fdGFyZ2V0czsKLSAgICBIYXNoTWFwPFN0cmlu
ZywgUmVmUHRyPFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw+PiBtX3Rhcmdl
dEZyb250ZW5kQ2hhbm5lbHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRGcm9udGVuZENoYW5uZWwuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5jcHAKaW5kZXggOGQ3ODgwNzgy
YTI5YjE3MGNlNjVhZmM3MDM3N2Q4YmQ1MDY5NDM1OC4uZTFiNWY3MTM3MzNhMDk1MjUyMTIyZjBh
MzgwMWY4MmM4YzYwZDNmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250
ZW5kQ2hhbm5lbC5jcHAKQEAgLTI2LDE3ICsyNiwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaCIKIAotI2lu
Y2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiV2Vi
UGFnZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCi1SZWY8V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbD4gV2Vi
UGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbDo6Y3JlYXRlKFdlYlBhZ2VJbnNwZWN0
b3JUYXJnZXRDb250cm9sbGVyJiB0YXJnZXRDb250cm9sbGVyLCBjb25zdCBTdHJpbmcmIHRhcmdl
dElkLCBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUgY29ubmVjdGlv
blR5cGUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViUGFnZUluc3BlY3RvclRhcmdl
dEZyb250ZW5kQ2hhbm5lbCh0YXJnZXRDb250cm9sbGVyLCB0YXJnZXRJZCwgY29ubmVjdGlvblR5
cGUpKTsKLX0KLQotV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbDo6V2ViUGFn
ZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbChXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29u
dHJvbGxlciYgdGFyZ2V0Q29udHJvbGxlciwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVj
dG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlIGNvbm5lY3Rpb25UeXBlKQotICAg
IDogbV90YXJnZXRDb250cm9sbGVyKHRhcmdldENvbnRyb2xsZXIpCitXZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0RnJvbnRlbmRDaGFubmVsOjpXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFu
bmVsKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6RnJv
bnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSkKKyAgICA6IG1fcGFn
ZShwYWdlKQogICAgICwgbV90YXJnZXRJZCh0YXJnZXRJZCkKICAgICAsIG1fY29ubmVjdGlvblR5
cGUoY29ubmVjdGlvblR5cGUpCiB7CkBAIC00NCw3ICs0MCw3IEBAIFdlYlBhZ2VJbnNwZWN0b3JU
YXJnZXRGcm9udGVuZENoYW5uZWw6OldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5u
ZWwoV2ViCiAKIHZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbDo6c2Vu
ZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICBtX3Rhcmdl
dENvbnRyb2xsZXIuc2VuZE1lc3NhZ2VUb1RhcmdldEZyb250ZW5kKG1fdGFyZ2V0SWQsIG1lc3Nh
Z2UpOworICAgIG1fcGFnZS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNlbmRNZXNzYWdl
VG9JbnNwZWN0b3JGcm9udGVuZChtX3RhcmdldElkLCBtZXNzYWdlKSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5l
bC5oCmluZGV4IDc2YWY2MmE5N2JlZjQ4OGI2NDRlNWQ2MThkNDM5ZWM5YTQyZjIyZGEuLjk3NjA5
OGRhNGQ3YmU1NjNmMWI5MzExMjYxOTdlNDJmMDhkMWNjMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENo
YW5uZWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmgKQEAgLTMxLDIyICszMSwyMCBAQAogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI7
CitjbGFzcyBXZWJQYWdlOwogCi1jbGFzcyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRD
aGFubmVsIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViUGFnZUluc3BlY3RvclRhcmdldEZy
b250ZW5kQ2hhbm5lbD4sIHB1YmxpYyBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCB7CitjbGFz
cyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsIGZpbmFsIDogcHVibGljIElu
c3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRD
aGFubmVsKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRG
cm9udGVuZENoYW5uZWw+IGNyZWF0ZShXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlciYs
IGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25u
ZWN0aW9uVHlwZSk7Ci0gICAgdmlydHVhbCB+V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5k
Q2hhbm5lbCgpID0gZGVmYXVsdDsKKyAgICBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRD
aGFubmVsKFdlYlBhZ2UmLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6OkZyb250
ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUpOworICAgIH5XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
RnJvbnRlbmRDaGFubmVsKCkgb3ZlcnJpZGUgPSBkZWZhdWx0OwogCiBwcml2YXRlOgotICAgIFdl
YlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwoV2ViUGFnZUluc3BlY3RvclRhcmdl
dENvbnRyb2xsZXImLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6OkZyb250ZW5k
Q2hhbm5lbDo6Q29ubmVjdGlvblR5cGUpOwotCiAgICAgQ29ubmVjdGlvblR5cGUgY29ubmVjdGlv
blR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Nvbm5lY3Rpb25UeXBlOyB9CiAgICAg
dm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVycmlk
ZTsKIAotcHJpdmF0ZToKLSAgICBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlciYgbV90
YXJnZXRDb250cm9sbGVyOworICAgIFdlYlBhZ2UmIG1fcGFnZTsKICAgICBTdHJpbmcgbV90YXJn
ZXRJZDsKICAgICBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUgbV9j
b25uZWN0aW9uVHlwZSB7IEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlw
ZTo6UmVtb3RlIH07CiB9OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGI0YTI5NTUwZGI5MjlkNmZjZmMxZThhNzcxOWZhMjRl
NjQyNDE2MDMuLmQwYWIyNjNhN2ZiMjhjOGI5ZjA3Njg0NjliNTBlMmNlZjYwNzdhZTcgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxOCBAQAorMjAxOS0xMC0wMSAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBub3RpZnkgaW5zcGVjdG9yIHdo
ZW4gcHJvdmlzaW9uYWwgcGFnZSBpcyBjcmVhdGVkLCBjb21taXR0ZWQgYW5kIGRlc3Ryb3llZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyNzA0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgbmV3
IHRlc3QgZm9yIFRhcmdldCBldmVudHMgZHVyaW5nIFBTT04uIEl0IGlzIG9ubHkgZW5hYmxlZCBv
biBXZWJLaXQyIGFzIHRoZXJlIGlzCisgICAgICAgIG5vIFRhcmdldCBhZ2VudCBpbiBXZWJLaXQx
LgorCisgICAgICAgICogVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBodHRwL3Rlc3RzL2lu
c3BlY3Rvci90YXJnZXQvdGFyZ2V0LWV2ZW50cy1mb3ItcHJvdmlzaW9uYWwtcGFnZS1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvaW5zcGVjdG9yL3RhcmdldC90YXJn
ZXQtZXZlbnRzLWZvci1wcm92aXNpb25hbC1wYWdlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDE5LTEwLTA4ICB5b3Vlbm4gZmFibGV0
ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBNZWRpYVN0cmVhbVRyYWNrIHNob3VsZCBi
ZSBhIFBsYXRmb3JtTWVkaWFTZXNzaW9uQ2xpZW50IGluc3RlYWQgb2YgTWVkaWFTdHJlYW0KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9UZXN0
RXhwZWN0YXRpb25zCmluZGV4IDAxZmM5ZTIxMjY5ZTZhYmM1YjVmNTMyMTcxMDdlM2Q4NDJlYTAz
ZDguLmE5MTM1MDFmYjIxZmE2M2MwOGEyNmY4MTJkZmU3NzUzODU2MDk5MDQgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvVGVzdEV4cGVj
dGF0aW9ucwpAQCAtOTEyLDYgKzkxMiw5IEBAIHdlYmtpdC5vcmcvYi8xNjE5NTEgWyBEZWJ1ZyBd
IGluc3BlY3Rvci9kZWJ1Z2dlci9wYXVzZWQtc2NvcGVzLmh0bWwgWyBTa2lwIF0KIGluc3BlY3Rv
ci9kZWJ1Z2dlci9ldmFsdWF0ZU9uQ2FsbEZyYW1lLWVtdWxhdGVVc2VyR2VzdHVyZS11c2VySXNJ
bnRlcmFjdGluZy5odG1sIFsgU2tpcCBdCiBpbnNwZWN0b3IvcnVudGltZS9ldmFsdWF0ZS1lbXVs
YXRlVXNlckdlc3R1cmUtdXNlcklzSW50ZXJhY3RpbmcuaHRtbCBbIFNraXAgXQogCisjIFRhcmdl
dCBkb21haW4gaXMgb25seSBwcmVzZW50IGluIFdLMi4KK2h0dHAvdGVzdHMvaW5zcGVjdG9yL3Rh
cmdldCBbIFNraXAgXQorCiAjIFRoZXNlIGNvbmZvcm1hbmNlIHRlc3RzIGFyZSBubyBsb25nZXIg
aW4gc3luYyB3aXRoIHRoZSBsYXRlc3Qgc3BlY2lmaWNhdGlvbgogIyBhbmQgZXhwZWN0IGNvbXBh
cmVEb2N1bWVudFBvc2l0aW9uKCkgdG8gcmV0dXJuOgogIyBET0NVTUVOVF9QT1NJVElPTl9JTVBM
RU1FTlRBVElPTl9TUEVDSUZJQyB8IERPQ1VNRU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RFRApkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvdGFyZ2V0L3RhcmdldC1l
dmVudHMtZm9yLXByb3Zpc2lvbmFsLXBhZ2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9pbnNwZWN0b3IvdGFyZ2V0L3RhcmdldC1ldmVudHMtZm9yLXByb3Zpc2lvbmFsLXBh
Z2UtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQzMTc0N2I3NGQxMTA1MTJjNjg2YTlmZDdjMTRl
YTlhM2M4OGRjN2YKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2lu
c3BlY3Rvci90YXJnZXQvdGFyZ2V0LWV2ZW50cy1mb3ItcHJvdmlzaW9uYWwtcGFnZS1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSwxOSBAQAorVGVzdCB0aGF0IGNyb3NzIGRvbWFpbiBuYXZpZ2F0aW9u
IHJlc3VsdHMgaW4gdGhlIGZvbGxvd2luZyBzZXF1ZW5jZSBvZiBldmVudHMgaW4gVGFyZ2V0IGRv
bWFpbjogCisxLiBUYXJnZXQudGFyZ2V0Q3JlYXRlZCBmb3IgcHJvdmlzaW9uYWwgcGFnZS4gCisy
LiBUYXJnZXQuZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQgd2hlbiBwcm92aXNpb25hbCBsb2Fk
IGlzIGNvbW1pdHRlZC4gCiszLiBUYXJnZXQudGFyZ2V0RGVzdHJveWVkIGZvciB0aGUgb2xkIHRh
cmdldCBhZnRlciB0aGUgbmF2aWdhdGlvbiByZXF1ZXN0IGlzIGNvbW1pdHRlZC4KKworUEFTUzog
U2hvdWxkIHJlY2VpdmUgdGFyZ2V0RGVzdHJveWVkIGV2ZW50LgorUEFTUzogRGVzdHJveWVkIHRh
cmdldCBzaG91bGQgYmUgcHJldmlvdXMgdGFyZ2V0LgorCis9PSBSdW5uaW5nIHRlc3Qgc3VpdGU6
IFRhcmdldC5QU09OCistLSBSdW5uaW5nIHRlc3QgY2FzZTogUHJvdmlzaW9uYWxQYWdlVGFyZ2V0
CitQQVNTOiBTaG91bGQgcmVjZWl2ZSB0YXJnZXRDcmVhdGVkIGV2ZW50LgorUEFTUzogVGFyZ2V0
IHNob3VsZCBiZSBwcm92aXNpb25hbC4KK1BBU1M6IFByZXZpb3VzIHRhcmdldCBpZCBzaG91bGQg
YmUgaWQgb2YgdGhlIGN1cnJlbnQgdGFyZ2V0LgorUEFTUzogU2hvdWxkIHJlY2VpdmUgZGlkQ29t
bWl0UHJvdmlzaW9uYWxUYXJnZXQgZXZlbnQuCitQQVNTOiBQcmV2aW91cyB0YXJnZXQgc2hvdWxk
IGJlIHRoZSBjdXJyZW50IG9uZS4KK1BBU1M6IENvbW1pdHRlZCB0YXJnZXQgc2hvdWxkIG1hdGNo
IHByb3Zpc2lvbmFsIHRhcmdldC4KK1BBU1M6IFNob3VsZCByZWNlaXZlIHRhcmdldERlc3Ryb3ll
ZCBldmVudC4KK1BBU1M6IERlc3Ryb3llZCB0YXJnZXQgc2hvdWxkIGJlIHByZXZpb3VzIHRhcmdl
dC4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvdGFyZ2V0
L3RhcmdldC1ldmVudHMtZm9yLXByb3Zpc2lvbmFsLXBhZ2UuaHRtbCBiL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvaW5zcGVjdG9yL3RhcmdldC90YXJnZXQtZXZlbnRzLWZvci1wcm92aXNpb25hbC1w
YWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOTM3YzFmNjkzMTkzZjQ5ZTE1MGE5YjdhMWU5NzQ2MTdmZjc4
NDRjMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9y
L3RhcmdldC90YXJnZXQtZXZlbnRzLWZvci1wcm92aXNpb25hbC1wYWdlLmh0bWwKQEAgLTAsMCAr
MSw2MyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgY2hhcnNldD0i
dXRmLTgiPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9pbnNwZWN0b3ItdGVzdC5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0PgorZnVuY3Rpb24gdGVzdCgpCit7CisgICAgbGV0IHN1aXRlID0gSW5z
cGVjdG9yVGVzdC5jcmVhdGVBc3luY1N1aXRlKCJUYXJnZXQuUFNPTiIpOworCisgICAgc3VpdGUu
YWRkVGVzdENhc2UoeworICAgICAgICBuYW1lOiAiUHJvdmlzaW9uYWxQYWdlVGFyZ2V0IiwKKyAg
ICAgICAgZGVzY3JpcHRpb246ICJDaGVjayB0aGF0IGEgbmV3IHRhcmdldCB3aWxsIGJlIGNyZWF0
ZWQgZm9yIHByb3Zpc2lvbmFsIHBhZ2UuIiwKKyAgICAgICAgdGVzdChyZXNvbHZlLCByZWplY3Qp
IHsKKyAgICAgICAgICAgIGNvbnN0IG1haW5UYXJnZXRJZCA9IFdJLm1haW5UYXJnZXQuaWRlbnRp
ZmllcjsKKyAgICAgICAgICAgIGxldCBuZXdUYXJnZXRJZDsKKyAgICAgICAgICAgIEluc3BlY3Rv
clRlc3QuYXNzZXJ0KG1haW5UYXJnZXRJZCk7CisgICAgICAgICAgICBUYXJnZXRBZ2VudC5kaXNw
YXRjaGVyID0gbmV3IFByb3h5KFRhcmdldEFnZW50LmRpc3BhdGNoZXIsIHsKKyAgICAgICAgICAg
ICAgICBnZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcikgeworICAgICAgICAgICAgICAgICAgICBp
ZiAocHJvcCA9PT0gInRhcmdldENyZWF0ZWQiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gKHRhcmdldEluZm8pID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdU
YXJnZXRJZCA9IHRhcmdldEluZm8udGFyZ2V0SWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSW5zcGVjdG9yVGVzdC5wYXNzKGBTaG91bGQgcmVjZWl2ZSAke3Byb3B9IGV2ZW50LmApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0VHJ1ZSh0YXJn
ZXRJbmZvLmlzUHJvdmlzaW9uYWwsICJUYXJnZXQgc2hvdWxkIGJlIHByb3Zpc2lvbmFsLiIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0RXF1YWwodGFy
Z2V0SW5mby5wcmV2aW91c1RhcmdldElkLCBtYWluVGFyZ2V0SWQsICJQcmV2aW91cyB0YXJnZXQg
aWQgc2hvdWxkIGJlIGlkIG9mIHRoZSBjdXJyZW50IHRhcmdldC4iKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0W3Byb3BdLmNhbGwocmVjZWl2ZXIsIHRhcmdldElu
Zm8pOworICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0gImRpZENvbW1pdFByb3Zpc2lvbmFsVGFy
Z2V0IikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0YXJnZXRJbmZvKSA9PiB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5wYXNzKGBTaG91bGQg
cmVjZWl2ZSAke3Byb3B9IGV2ZW50LmApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIElu
c3BlY3RvclRlc3QuZXhwZWN0RXF1YWwodGFyZ2V0SW5mby5wcmV2aW91c1RhcmdldElkLCBtYWlu
VGFyZ2V0SWQsICJQcmV2aW91cyB0YXJnZXQgc2hvdWxkIGJlIHRoZSBjdXJyZW50IG9uZS4iKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdEVxdWFsKHRh
cmdldEluZm8udGFyZ2V0SWQsIG5ld1RhcmdldElkLCAiQ29tbWl0dGVkIHRhcmdldCBzaG91bGQg
bWF0Y2ggcHJvdmlzaW9uYWwgdGFyZ2V0LiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0YXJnZXRbcHJvcF0uY2FsbChyZWNlaXZlciwgdGFyZ2V0SW5mbyk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGlmIChwcm9wID09PSAidGFyZ2V0RGVzdHJveWVkIikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuICh0YXJnZXRJZCkgPT4geworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEluc3BlY3RvclRlc3QucGFzcyhgU2hvdWxkIHJlY2VpdmUgJHtwcm9wfSBldmVudC5gKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdEVxdWFsKHRh
cmdldElkLCBtYWluVGFyZ2V0SWQsICJEZXN0cm95ZWQgdGFyZ2V0IHNob3VsZCBiZSBwcmV2aW91
cyB0YXJnZXQuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRbcHJvcF0uY2FsbChyZWNlaXZl
ciwgdGFyZ2V0SWQpOworICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0W3Byb3BdOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgUnVudGltZUFnZW50LmV2
YWx1YXRlKCJsb2NhdGlvbi5ob3N0bmFtZT0nbG9jYWxob3N0JyIpOworICAgICAgICB9CisgICAg
fSk7CisKKyAgICBzdWl0ZS5ydW5UZXN0Q2FzZXNBbmRGaW5pc2goKTsKK30KKzwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorPHA+VGVzdCB0aGF0IGNyb3NzIGRv
bWFpbiBuYXZpZ2F0aW9uIHJlc3VsdHMgaW4gdGhlIGZvbGxvd2luZyBzZXF1ZW5jZSBvZiBldmVu
dHMgaW4gVGFyZ2V0IGRvbWFpbjoKKzxicj4xLiBUYXJnZXQudGFyZ2V0Q3JlYXRlZCBmb3IgcHJv
dmlzaW9uYWwgcGFnZS4KKzxicj4yLiBUYXJnZXQuZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQg
d2hlbiBwcm92aXNpb25hbCBsb2FkIGlzIGNvbW1pdHRlZC4KKzxicj4zLiBUYXJnZXQudGFyZ2V0
RGVzdHJveWVkIGZvciB0aGUgb2xkIHRhcmdldCBhZnRlciB0aGUgbmF2aWdhdGlvbiByZXF1ZXN0
IGlzIGNvbW1pdHRlZC4KKzwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggMDJkNjg5ODFiNTdlMWZjZTA5MDMyMmJmZjNl
NGMyMDNhZDQ5MmE4Ny4uN2Q0ZmI2NjA1MmY2YmQ5Mzc5NWEyZDEyMDU1MjFkMGUyNmNkYWM3MyAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMKKysr
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTc2NCw2ICs3
NjQsOSBAQCBodHRwL3Rlc3RzL2FkQ2xpY2tBdHRyaWJ1dGlvbiBbIFBhc3MgXQogaW5zcGVjdG9y
L2RlYnVnZ2VyL2V2YWx1YXRlT25DYWxsRnJhbWUtZW11bGF0ZVVzZXJHZXN0dXJlLXVzZXJJc0lu
dGVyYWN0aW5nLmh0bWwgWyBQYXNzIF0KIGluc3BlY3Rvci9ydW50aW1lL2V2YWx1YXRlLWVtdWxh
dGVVc2VyR2VzdHVyZS11c2VySXNJbnRlcmFjdGluZy5odG1sIFsgUGFzcyBdCiAKKyMgVGFyZ2V0
IGRvbWFpbiBpcyBvbmx5IHByZXNlbnQgaW4gV2ViS2l0Mi4KK2h0dHAvdGVzdHMvaW5zcGVjdG9y
L3RhcmdldCBbIFBhc3MgXQorCiAjIyMgRU5EIE9GICg1KSBQcm9ncmVzc2lvbnMsIGV4cGVjdGVk
IHN1Y2Nlc3NlcyB0aGF0IGFyZSBleHBlY3RlZCBmYWlsdXJlcyBpbiBXZWJLaXQxLgogIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380480</attachid>
            <date>2019-10-08 16:57:45 -0700</date>
            <delta_ts>2019-10-09 11:45:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202704-20191008165745.patch</filename>
            <type>text/plain</type>
            <size>82155</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwODY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
ZWJlNTEzN2E5YWU3Zjg3OGM0NmVlNzFkNzA2YzliNmFiYWYwMjE0Li5kZjBkNWI4MjFmNzkwODY5
ZDhjMzFhN2Y4NzAzZDNkNmMxN2JhNmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOCBAQAorMjAxOS0wOS0yNyAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBub3RpZnkgaW5zcGVjdG9yIHdoZW4gcHJv
dmlzaW9uYWwgcGFnZSBpcyBjcmVhdGVkLCBjb21taXR0ZWQgYW5kIGRlc3Ryb3llZAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyNzA0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yVGFyZ2V0Lmg6IGNoYW5nZWQgSW5zcGVjdG9yVGFyZ2V0IHRvIG5vdCByZXF1aXJlIEZy
b250ZW5kQ2hhbm5lbCBhcworICAgICAgICBhbGwgbWVzc2FnZXMgYXJlIHJvdXRlZCBieSBtZWFu
cyBvZiB0aGUgb3duaW5nIEluc3BlY3RvclRhcmdldEFnZW50LgorICAgICAgICAqIGluc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JUYXJnZXRBZ2VudDo6SW5zcGVjdG9yVGFyZ2V0QWdlbnQpOgorICAgICAgICAoSW5z
cGVjdG9yOjpidWlsZFRhcmdldEluZm9PYmplY3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JUYXJnZXRBZ2VudDo6dGFyZ2V0Q3JlYXRlZCk6CisgICAgICAgIChJbnNwZWN0b3I6Oklu
c3BlY3RvclRhcmdldEFnZW50Ojp0YXJnZXREZXN0cm95ZWQpOgorICAgICAgICAoSW5zcGVjdG9y
OjpJbnNwZWN0b3JUYXJnZXRBZ2VudDo6ZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQpOiB0aGlz
IG1ldGhvZCBpcyB1c2VkIHRvCisgICAgICAgIG5vdGlmeSBmcm9udGVuZCB0aGF0IGNvcnJlc3Bv
bmRpbmcgcHJvdmlzaW9uYWwgdGFyZ2V0IGhhcyBjb21taXR0ZWQgYW5kIHJlcGxhY2VkIHByZXZp
b3VzCisgICAgICAgIHRhcmdldC4KKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0
QWdlbnQ6OmNvbm5lY3Rpb25UeXBlIGNvbnN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVj
dG9yVGFyZ2V0QWdlbnQ6OmNvbm5lY3RUb1RhcmdldHMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JUYXJnZXRBZ2VudDo6ZGlzY29ubmVjdEZyb21UYXJnZXRzKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50Lmg6CisgICAgICAgICogaW5zcGVj
dG9yL3Byb3RvY29sL1RhcmdldC5qc29uOiBleHRlbmRlZCBUYXJnZXRJbmZvIHdpdGggcHJvdmlz
aW9uYWwgcGFnZSBkZXRhaWxzIGFuZAorICAgICAgICBhZGRlZCBldmVudCB3aGljaCBpcyBmaXJl
ZCB3aGVuIHByb3Zpc2lvbmFsIHBhZ2UgZ2V0cyBjb21taXR0ZWQuIElmIHByb3Zpc2lvbmFsCisg
ICAgICAgIGxvYWQgZmFpbHMgdGhlcmUgd2lsbCBiZSB0YXJnZXREZXN0cm95ZWQgZXZlbnQgd2l0
aG91dCBjb3JyZXNwb25kaW5nIGNvbW1pdC4KKwogMjAxOS0xMC0wOCAgQWxleGV5IFNodmF5a2Eg
IDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CiAKICAgICAgICAgSlNPTi5wYXJzZSBpbmNvcnJlY3Rs
eSBoYW5kbGVzIGFycmF5IHByb3hpZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhNjE2NmU5YmI1MzQzMzUyYjgy
OGZlMzkxNTY1Zjk2ZjljMDU2NDJlLi5jMWVjOTg4NTAwNzliZmU4OTc5NjUxYjQwYjM2MTYzZGRm
MTc0YTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTktMTAtMDEgIFl1cnkgU2Vt
aWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjog
bm90aWZ5IGluc3BlY3RvciB3aGVuIHByb3Zpc2lvbmFsIHBhZ2UgaXMgY3JlYXRlZCwgY29tbWl0
dGVkIGFuZCBkZXN0cm95ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwMjcwNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRlc3Q6IGh0dHAvdGVzdHMvaW5zcGVjdG9yL3RhcmdldC90YXJnZXQtZXZlbnRz
LWZvci1wcm9pc2lvbmFsLXBhZ2UuaHRtbAorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6
c2V0SXNVbmRlclRlc3QpOiBUaGlzIG1ldGhvZCBtYXkgYmUgY2FsbGVkIHNldmVyYWwgdGltZXMK
KyAgICAgICAgd2hlbiByZWxvYWRpbmcgaW5zcGVjdGVkIHBhZ2Ugd2l0aCBvcGVuZWQgZnJvbnRl
bmQgc28gdGhlIGFzc3VtcHRpb24gdGhhdCB0aGVyZSBhcmUgbm8KKyAgICAgICAgY29ubmVjdGVk
IGZyb250ZW5kcyB3aGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmcm9tIHRlc3RzIGRvZXNuJ3Qg
aG9sZCBhbnltb3JlLgorCiAyMDE5LTEwLTA4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFw
cGxlLmNvbT4KIAogICAgICAgICBDb3B5aW5nIHdoaXRlIHRleHQgZnJvbSBkYXJrIG1vZGUgV2Vi
S2l0IGFwcHMgYW5kIHBhc3RpbmcgaW4gYSBsaWdodCBtb2RlIGFwcCByZXN1bHRzIGluIHdoaXRl
IChpbnZpc2libGUpIHRleHQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCAzYTZjNWY3NThj
N2U0NmFkYjM2NTVmN2M0NmIxMjVkMGQ1MTQyZjkxLi40MTM2NmIxMzc5YjE5NWZmYjY0M2U4ZmEx
ZTE0MzExYzI0ZGQ1NDJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MSBA
QAorMjAxOS0wOS0yNyAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBub3RpZnkgaW5zcGVjdG9yIHdoZW4gcHJvdmlzaW9uYWwg
cGFnZSBpcyBjcmVhdGVkLCBjb21taXR0ZWQgYW5kIGRlc3Ryb3llZAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyNzA0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlZCBmcm9udGVuZCBjb2RlIHRv
IHVuZGVyc3RhbmQgcHJvdmlzaW9uYWwgdGFyZ2V0cy4gRm9yIG5vdyB0aGVyZSBhcmUKKyAgICAg
ICAgbm8gY2hhbmdlcyBmcm9udGVuZCBiZWhhdmlvciwgaXQgd2lsbCB3YWl0IGZvciB0aGUgcHJv
dmlzaW9uYWwgdGFyZ2V0IHRvIGNvbW1pdAorICAgICAgICBhbmQgd2lsbCBub3Qgc2VuZCBhbnkg
Y29tbWFuZHMgdG8gaXQgYmVmb3JlIHRoYXQuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Jh
c2UvTWFpbi5qczogTW92ZWQgYSBidW5jaCBvZiBtZXRob2RzIHNoYXJlZCBiZXR3ZWVuIE1haW4u
anMgYW5kIFRlc3QuanMKKyAgICAgICAgdG8gVGFyZ2V0TWFuYWdlci5qcyB0byBrZWVwIHRoZW0g
aW4gc3luYy4KKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1RhcmdldE1hbmFn
ZXIuanM6CisgICAgICAgIChXSS5UYXJnZXRNYW5hZ2VyKToKKyAgICAgICAgKFdJLlRhcmdldE1h
bmFnZXIucHJvdG90eXBlLnJlbW92ZVRhcmdldCk6CisgICAgICAgIChXSS5UYXJnZXRNYW5hZ2Vy
LnByb3RvdHlwZS5jcmVhdGVNdWx0aXBsZXhpbmdCYWNrZW5kVGFyZ2V0KToKKyAgICAgICAgKFdJ
LlRhcmdldE1hbmFnZXIucHJvdG90eXBlLmNyZWF0ZURpcmVjdEJhY2tlbmRUYXJnZXQpOgorICAg
ICAgICAoV0kuVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUudGFyZ2V0Q3JlYXRlZCk6CisgICAgICAg
IChXSS5UYXJnZXRNYW5hZ2VyLnByb3RvdHlwZS5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldCk6
CisgICAgICAgIChXSS5UYXJnZXRNYW5hZ2VyLnByb3RvdHlwZS50YXJnZXREZXN0cm95ZWQpOgor
ICAgICAgICAoV0kuVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUuZGlzcGF0Y2hNZXNzYWdlRnJvbVRh
cmdldCk6CisgICAgICAgIChXSS5UYXJnZXRNYW5hZ2VyLnByb3RvdHlwZS5fY2hlY2tBbmRIYW5k
bGVQYWdlVGFyZ2V0VHJhbnNpdGlvbik6CisgICAgICAgIChXSS5UYXJnZXRNYW5hZ2VyLnByb3Rv
dHlwZS5fY2hlY2tBbmRIYW5kbGVQYWdlVGFyZ2V0VGVybWluYXRpb24pOgorICAgICAgICAoV0ku
VGFyZ2V0TWFuYWdlci5wcm90b3R5cGUuX2luaXRpYWxpemVCYWNrZW5kVGFyZ2V0KToKKyAgICAg
ICAgKFdJLlRhcmdldE1hbmFnZXIucHJvdG90eXBlLl9pbml0aWFsaXplUGFnZVRhcmdldCk6Cisg
ICAgICAgIChXSS5UYXJnZXRNYW5hZ2VyLnByb3RvdHlwZS5fdHJhbnNpdGlvblBhZ2VUYXJnZXQp
OgorICAgICAgICAoV0kuVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUuX3Rlcm1pbmF0ZVBhZ2VUYXJn
ZXQpOgorICAgICAgICAoV0kuVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUuX3Jlc2V0TWFpbkV4ZWN1
dGlvbkNvbnRleHQpOgorICAgICAgICAoV0kuVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUuX3JlZGly
ZWN0R2xvYmFsQWdlbnRzVG9Db25uZWN0aW9uKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1By
b3RvY29sL0Nvbm5lY3Rpb24uanM6CisgICAgICAgIChJbnNwZWN0b3JCYWNrZW5kLldvcmtlckNv
bm5lY3Rpb24uc2VuZE1lc3NhZ2VUb0JhY2tlbmQpOgorICAgICAgICAoSW5zcGVjdG9yQmFja2Vu
ZC5Xb3JrZXJDb25uZWN0aW9uKToKKyAgICAgICAgKEluc3BlY3RvckJhY2tlbmQuVGFyZ2V0Q29u
bmVjdGlvbi5zZW5kTWVzc2FnZVRvQmFja2VuZCk6CisgICAgICAgIChJbnNwZWN0b3JCYWNrZW5k
LlRhcmdldENvbm5lY3Rpb24pOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUHJvdG9jb2wvVGFy
Z2V0LmpzOgorICAgICAgICAoV0kuVGFyZ2V0LnByb3RvdHlwZS5kZXN0cm95KTogTWFyayB0YXJn
ZXQgYXMgZGVzdHJveWVkIHRvIGRpc3Rpbmd1aXNoIGV4cGVjdGVkIGNvbW1hbmQgZXJyb3JzIGZy
b20KKyAgICAgICAgZ2VudWluZSBmYWlsdXJlcy4KKworICAgICAgICAoV0kuVGFyZ2V0LnByb3Rv
dHlwZS5pc0Rlc3Ryb3llZCk6CisgICAgICAgICogVXNlckludGVyZmFjZS9Qcm90b2NvbC9UYXJn
ZXRPYnNlcnZlci5qczogU2luY2UgdGhlIGZyb250LWVuZCBkb2Vzbid0CisgICAgICAgIHNlbmQg
Y29tbWFuZHMgdG8gdGhlIHByb3Zpc2lvbmFsIHRhcmdldHMgeWV0LCBpdCBoYXMgdG8gaWdub3Jl
IGFsbCBhY3Rpdml0aWVzCisgICAgICAgIHJlbGF0ZWQgdG8gcHJvdmlzaW9uYWwgcGFnZXMuIEZv
ciB0aGF0IHJlYXNvbiB3ZSBuZWVkIHR3byBzZXRzIHRvIGtlZXAgdHJhY2sgb2YKKyAgICAgICAg
LSBwcm92aXNpb25hbCBwYWdlcyB0aGF0IHdlcmUgZGVzdHJveWVkIGFuZCBuZXZlciBjb21taXR0
ZWQKKyAgICAgICAgLSBvbGQgcGFnZXMgd2hpY2ggd2VyZSByZXBsYWNlZCBieSBjb21taXR0ZWQg
cGFnZSBhbmQgZm9yIHdoaWNoIGZvbGxvd2luZyB0YXJnZXREZXN0cm95ZWQKKyAgICAgICAgZXZl
bnQgc2hvdWxkIGJlIGlnbm9yZWQKKyAgICAgICAgQmV0dGVyIHN1cHBvcnQgZm9yIHByb3Zpc2lv
bmFsIHRhcmdldHMgd2lsbCBiZSBhZGRlZCB0byBmcm9udGVuZCBpbiBhIHNlcGFyYXRlIGNoYW5n
ZS4KKyAgICAgICAgKFdJLlRhcmdldE9ic2VydmVyKToKKyAgICAgICAgKFdJLlRhcmdldE9ic2Vy
dmVyLnByb3RvdHlwZS50YXJnZXRDcmVhdGVkKToKKyAgICAgICAgKFdJLlRhcmdldE9ic2VydmVy
LnByb3RvdHlwZS5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldCk6IEZvciBub3cgY29udmVydCB0
aGUgZXZlbnQgaW50byBhIHN1YnNlcXVlbmNlCisgICAgICAgIG9mIHRhcmdldERlc3Ryb3llZC90
YXJnZXRDcmVhdGVkIGV2ZW50cyB3aGljaCBtYXRjaGVzIHByZXZpb3VzIGJlaGF2aW9yLgorCisg
ICAgICAgIChXSS5UYXJnZXRPYnNlcnZlci5wcm90b3R5cGUudGFyZ2V0RGVzdHJveWVkKToKKyAg
ICAgICAgKFdJLlRhcmdldE9ic2VydmVyLnByb3RvdHlwZS5kaXNwYXRjaE1lc3NhZ2VGcm9tVGFy
Z2V0KToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Rlc3QvVGVzdC5qczoKKyAgICAgICAgKFdJ
LnRyYW5zaXRpb25QYWdlVGFyZ2V0KToKKyAgICAgICAgKFdJLnRlcm1pbmF0ZVBhZ2VUYXJnZXQp
OgorCiAyMDE5LTEwLTA4ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBDYW52YXM6IG1ha2UgaXQgbW9yZSBvYnZpb3VzIHRoYXQgdGhl
IGNhcmRzIGluIHRoZSBvdmVydmlldyBhcmUgY2xpY2thYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGQ1NDY3ODlk
ODY5MjcxYWI5MzQxMWQ3N2ExMWQxMzk0NTk2OThkNWUuLjY4Y2JiYTQxZjRiYzA3YTRiYjE4NjUx
NmQxZDAyOGExOTQ3ZGRiMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzcgQEAKKzIwMTktMDktMjcg
IFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIElu
c3BlY3Rvcjogbm90aWZ5IGluc3BlY3RvciB3aGVuIHByb3Zpc2lvbmFsIHBhZ2UgaXMgY3JlYXRl
ZCwgY29tbWl0dGVkIGFuZCBkZXN0cm95ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwMjcwNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRhcmdldC50YXJnZXRDcmVhdGVkIGV2ZW50IGlzIG5vdyBnZW5l
cmF0ZWQgZm9yIHByb3Zpc2lvbmFsIHBhZ2VzIGFzIHdlbGwgYXMgZm9yIHJlZ3VsYXIKKyAgICAg
ICAgb25lcy4gVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCB0b3dhcmQgcmVhdHRhY2hpbmcgaW5zcGVj
dG9yIGVhcmxpZXIgZHVyaW5nIFBTT04uIEluIHRoZSBmdXR1cmUKKyAgICAgICAgaWYgZGVidWdn
aW5nIGlzIGluIHByb2dyZXNzIHRoZSBwcm92aXNpb25hbCB0YXJnZXQgKHBhZ2UpIHdpbGwgYmUg
cGF1c2VkIHVudGlsIGEgc2lnbmFsIGZyb20KKyAgICAgICAgaW5zcGVjdG9yIGZyb250ZW5kLiBU
aGlzIHdpbGwgZW5hYmxlIHRoZSBmcm9udGVuZCBjb25maWd1cmUgYWxsIGFnZW50cyBiZWZvcmUg
bmF2aWdhdGlvbiBzdGFydHMuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvSW5zcGVjdG9yVGFyZ2V0UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbnNw
ZWN0b3JUYXJnZXRQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yVGFy
Z2V0UHJveHk6OmNvbm5lY3QpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JUYXJnZXRQcm94
eTo6ZGlzY29ubmVjdCk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvclRhcmdldFByb3h5Ojpz
ZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvclRh
cmdldFByb3h5OjpkaWRDb21taXRQcm92aXNpb25hbFRhcmdldCk6CisgICAgICAgIChXZWJLaXQ6
Okluc3BlY3RvclRhcmdldFByb3h5Ojppc1Byb3Zpc2lvbmFsIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6SW5zcGVjdG9yVGFyZ2V0UHJveHk6OnByZXZpb3VzVGFyZ2V0SUQgY29uc3QpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3JUYXJnZXRQcm94eS5oOiBUYXJnZXQgcHJveHkgY2Fu
IHN0YXJ0IGFzIGEgcHJvdmlzaW9uYWwgdGFyZ2V0ICh3aXRoIGEgcG9pbnRlciB0bworICAgICAg
ICBQcm92aXNpb25hbFBhZ2VQcm94eSkgYW5kIGxhdGVyIGVpdGhlciBiZSBjb21taXR0ZWQgb3Ig
ZGVzdHJveWVkLgorCisgICAgICAgICogVUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6UHJvdmlzaW9uYWxQYWdlUHJveHk6OlByb3Zpc2lvbmFsUGFn
ZVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UHJvdmlzaW9uYWxQYWdlUHJveHk6On5Qcm92aXNp
b25hbFBhZ2VQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlByb3Zpc2lvbmFsUGFnZVByb3h5Ojpk
aWRSZWNlaXZlTWVzc2FnZSk6IEZvcndhcmQgaW5zcGVjdG9yIG1lc3NhZ2VzIHRvIHBhcmVudCBw
YWdlJ3MgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuCisgICAgICAgIFNpbmNlIGVhY2ggV2Vi
UGFnZSBoYXMgYSB1bmlxdWUgaWRlbnRpZmllciB0aGUgdGFyZ2V0IGlkcyB3aWxsIGJlIGdsb2Jh
bGx5IHVuaXF1ZSBhbmQgdGhlcmUgaXMgbm8gcmlzayBvZiBjb2xsaXNpb25zLgorCisgICAgICAg
ICogVUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OlBy
b3Zpc2lvbmFsUGFnZVByb3h5OjpwYWdlIGNvbnN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZUluc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpnZXRUYXJnZXRJ
RCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpXZWJQYWdl
SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VJbnNwZWN0b3JD
b250cm9sbGVyOjpjbGVhclRhcmdldHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlSW5zcGVj
dG9yQ29udHJvbGxlcjo6Y3JlYXRlSW5zcGVjdG9yVGFyZ2V0KToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmRlc3Ryb3lJbnNwZWN0b3JUYXJnZXQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ3JlYXRlUHJvdmlz
aW9uYWxQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6
OmRpZERlc3Ryb3lQcm92aXNpb25hbFBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlSW5z
cGVjdG9yQ29udHJvbGxlcjo6ZGlkQ29tbWl0UHJvdmlzaW9uYWxQYWdlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmFkZFRhcmdldCk6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRBZ2VudC5jcHA6IFJlbW92ZWQuIE1lcmdlZCB0aGlz
IGFnZW50IGludG8gSW5zcGVjdG9yVGFyZ2V0QWdlbnQuCisgICAgICAgICogVUlQcm9jZXNzL1dl
YlBhZ2VJbnNwZWN0b3JUYXJnZXRBZ2VudC5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjptX3Jlc2V0UmVjZW50Q3Jhc2hD
b3VudFRpbWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpmaW5pc2hBdHRhY2hp
bmdUb1dlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNvbW1pdFBy
b3Zpc2lvbmFsUGFnZSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOiBNb3Zl
ZCB0aGUgdGFyZ2V0IG1hbmFnZW1lbnQgbG9naWMgaW50byBXZWJQYWdlSW5zcGVjdG9yQ29udHJv
bGxlci4KKyAgICAgICAgV2ViUGFnZVByb3h5L1Byb3Zpc2lvbmFsUGFnZVByb3h5IGFyZSBleHBl
Y3RlZCB0byBub3RpZml5IGl0IGFib3V0IGtleSBsaWZlY3ljbGUgZXZlbnRzIGFuZCBhbHNvCisg
ICAgICAgIGZvcndhcmQgdG8gaXQgbWVzc2FnZXMgZnJvbSBpbnNwZWN0b3IgaW4gdGhlIGluc3Bl
Y3RlZCBXZWJQcm9jZXNzLiBIb3cgaXQgdHJhbnNsYXRlcyB0byBUYXJnZXQKKyAgICAgICAgZXZl
bnRzIGlzIGluc3BlY3RvcidzIGJ1c2luZXNzLgorCisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0OjppZGVudGlmaWVyIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUluc3BlY3Rv
clRhcmdldDo6Y29ubmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXQ6OmRpc2Nvbm5lY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
Ojp0b1RhcmdldElEKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3Bl
Y3RvclRhcmdldC5oOiBNYWRlIHRoZSB0YXJnZXQgb3duIGZyb250ZW5kIGNoYW5uZWwgaW5zdGFu
Y2UgYXMgaXQncyB0aGUKKyAgICAgICAgb25seSBwbGFjZSB3aGVyZSB0aGUgcGFnZSBzcGVjaWZp
YyBjaGFubmVsIGlzIHVzZWQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6cmVtb3ZlVGFyZ2V0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6OmNvbm5lY3RJbnNwZWN0b3IpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6ZGlzY29u
bmVjdEluc3BlY3Rvcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXRDb250cm9sbGVyLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsOjpXZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0RnJvbnRlbmRDaGFubmVsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUluc3BlY3Rv
clRhcmdldEZyb250ZW5kQ2hhbm5lbDo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5l
bC5oOiBUaGUgY2hhbm5lbCdzIGxpZmV0aW1lIGlzIG1hbmFnZWQgYnkgb3duaW5nCisgICAgICAg
IHRhcmdldC4gTm8gbmVlZCB0byByZWZlcmVuY2UgY291bnQgaXQuCisKIDIwMTktMTAtMDggIEth
dGUgQ2hlbmV5ICA8a2F0aGVyaW5lX2NoZW5leUBhcHBsZS5jb20+CiAKICAgICAgICAgSW1wbGVt
ZW50IFRlbGVtZXRyeSBhbmQgRHVtcGluZyBSb3V0aW5lcyBmb3IgU1FMaXRlIGJhY2tlbmQgKDE5
NTA4OCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yVGFyZ2V0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRh
cmdldC5oCmluZGV4IDllZGFhMWY0MjA5NWYwNjJmNDVhODEwM2ZhMjc0YjUxNWI2MmYxOGIuLmE2
OTQzNzcyMDQ2ZmFjOTdjMGY5NTE4ZjI4NDg3ZWI5NTg5YTI2ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGFyZ2V0LmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUYXJnZXQuaApAQCAtNDcsOSArNDcs
MTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU3RyaW5nIGlkZW50aWZpZXIoKSBjb25zdCA9IDA7
CiAgICAgdmlydHVhbCBJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUoKSBjb25zdCA9IDA7CiAKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNQcm92aXNpb25hbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgdmlydHVhbCBTdHJpbmcgcHJldmlvdXNUYXJnZXRJRCgpIGNvbnN0IHsgcmV0dXJuIFN0cmlu
ZygpOyB9CisKICAgICAvLyBDb25uZWN0aW9uIG1hbmFnZW1lbnQuCi0gICAgdmlydHVhbCB2b2lk
IGNvbm5lY3QoRnJvbnRlbmRDaGFubmVsJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaXNjb25u
ZWN0KEZyb250ZW5kQ2hhbm5lbCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29ubmVjdChGcm9u
dGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpc2Nv
bm5lY3QoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5k
KGNvbnN0IFN0cmluZyYpID0gMDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmNwcApp
bmRleCBjNmM2YmY4MDZlMmUyNmIxNTRiZjljYTcyYzBjY2FlOTRmNTAzY2FhLi5jMzBhMDI5MmEw
YjdjYWViOTY1YjFlMjAwYTY4YjgwZGFhOGVmMjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdl
bnQuY3BwCkBAIC0zMiw2ICszMiw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBJbnNwZWN0
b3JUYXJnZXRBZ2VudDo6SW5zcGVjdG9yVGFyZ2V0QWdlbnQoRnJvbnRlbmRSb3V0ZXImIGZyb250
ZW5kUm91dGVyLCBCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIpCiAgICAgOiBJ
bnNwZWN0b3JBZ2VudEJhc2UoIlRhcmdldCJfcykKKyAgICAsIG1fcm91dGVyKGZyb250ZW5kUm91
dGVyKQogICAgICwgbV9mcm9udGVuZERpc3BhdGNoZXIobWFrZVVuaXF1ZTxUYXJnZXRGcm9udGVu
ZERpc3BhdGNoZXI+KGZyb250ZW5kUm91dGVyKSkKICAgICAsIG1fYmFja2VuZERpc3BhdGNoZXIo
VGFyZ2V0QmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShiYWNrZW5kRGlzcGF0Y2hlciwgdGhpcykp
CiB7CkBAIC05NiwxMCArOTcsMTUgQEAgc3RhdGljIFByb3RvY29sOjpUYXJnZXQ6OlRhcmdldElu
Zm86OlR5cGUgdGFyZ2V0VHlwZVRvUHJvdG9jb2xUeXBlKEluc3BlY3RvclRhcmcKIAogc3RhdGlj
IFJlZjxQcm90b2NvbDo6VGFyZ2V0OjpUYXJnZXRJbmZvPiBidWlsZFRhcmdldEluZm9PYmplY3Qo
Y29uc3QgSW5zcGVjdG9yVGFyZ2V0JiB0YXJnZXQpCiB7Ci0gICAgcmV0dXJuIFByb3RvY29sOjpU
YXJnZXQ6OlRhcmdldEluZm86OmNyZWF0ZSgpCisgICAgYXV0byByZXN1bHQgPSBQcm90b2NvbDo6
VGFyZ2V0OjpUYXJnZXRJbmZvOjpjcmVhdGUoKQogICAgICAgICAuc2V0VGFyZ2V0SWQodGFyZ2V0
LmlkZW50aWZpZXIoKSkKICAgICAgICAgLnNldFR5cGUodGFyZ2V0VHlwZVRvUHJvdG9jb2xUeXBl
KHRhcmdldC50eXBlKCkpKQogICAgICAgICAucmVsZWFzZSgpOworICAgIGlmICh0YXJnZXQuaXNQ
cm92aXNpb25hbCgpKSB7CisgICAgICAgIHJlc3VsdC0+c2V0SXNQcm92aXNpb25hbCh0cnVlKTsK
KyAgICAgICAgcmVzdWx0LT5zZXRQcmV2aW91c1RhcmdldElkKHRhcmdldC5wcmV2aW91c1Rhcmdl
dElEKCkpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB2b2lkIEluc3BlY3RvclRh
cmdldEFnZW50Ojp0YXJnZXRDcmVhdGVkKEluc3BlY3RvclRhcmdldCYgdGFyZ2V0KQpAQCAtMTEw
LDcgKzExNiw3IEBAIHZvaWQgSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OnRhcmdldENyZWF0ZWQoSW5z
cGVjdG9yVGFyZ2V0JiB0YXJnZXQpCiAgICAgaWYgKCFtX2lzQ29ubmVjdGVkKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICB0YXJnZXQuY29ubmVjdChmcm9udGVuZENoYW5uZWwoKSk7CisgICAgdGFy
Z2V0LmNvbm5lY3QoY29ubmVjdGlvblR5cGUoKSk7CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hl
ci0+dGFyZ2V0Q3JlYXRlZChidWlsZFRhcmdldEluZm9PYmplY3QodGFyZ2V0KSk7CiB9CkBAIC0x
MjIsMjcgKzEyOCw0MiBAQCB2b2lkIEluc3BlY3RvclRhcmdldEFnZW50Ojp0YXJnZXREZXN0cm95
ZWQoSW5zcGVjdG9yVGFyZ2V0JiB0YXJnZXQpCiAgICAgaWYgKCFtX2lzQ29ubmVjdGVkKQogICAg
ICAgICByZXR1cm47CiAKLSAgICB0YXJnZXQuZGlzY29ubmVjdChmcm9udGVuZENoYW5uZWwoKSk7
CisgICAgdGFyZ2V0LmRpc2Nvbm5lY3QoKTsKIAogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT50
YXJnZXREZXN0cm95ZWQodGFyZ2V0LmlkZW50aWZpZXIoKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
VGFyZ2V0QWdlbnQ6OmNvbm5lY3RUb1RhcmdldHMoKQordm9pZCBJbnNwZWN0b3JUYXJnZXRBZ2Vu
dDo6ZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQoY29uc3QgU3RyaW5nJiBvbGRUYXJnZXRJRCwg
Y29uc3QgU3RyaW5nJiBjb21taXR0ZWRUYXJnZXRJRCkKK3sKKyAgICBpZiAoIW1faXNDb25uZWN0
ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIHRhcmdldCA9IG1fdGFyZ2V0cy5nZXQo
Y29tbWl0dGVkVGFyZ2V0SUQpOworICAgIGlmICghdGFyZ2V0KQorICAgICAgICByZXR1cm47CisK
KyAgICBhdXRvIHRhcmdldEluZm8gPSBidWlsZFRhcmdldEluZm9PYmplY3QoKnRhcmdldCk7Cisg
ICAgdGFyZ2V0SW5mby0+c2V0UHJldmlvdXNUYXJnZXRJZChvbGRUYXJnZXRJRCk7CisgICAgbV9m
cm9udGVuZERpc3BhdGNoZXItPmRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0KFdURk1vdmUodGFy
Z2V0SW5mbykpOworfQorCitGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlIEluc3BlY3Rv
clRhcmdldEFnZW50Ojpjb25uZWN0aW9uVHlwZSgpIGNvbnN0CiB7Ci0gICAgYXV0byYgY2hhbm5l
bCA9IGZyb250ZW5kQ2hhbm5lbCgpOworICAgIHJldHVybiBtX3JvdXRlci5oYXNMb2NhbEZyb250
ZW5kKCkgPyBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGU6OkxvY2Fs
IDogSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlOjpSZW1vdGU7Cit9
CiAKK3ZvaWQgSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OmNvbm5lY3RUb1RhcmdldHMoKQorewogICAg
IGZvciAoSW5zcGVjdG9yVGFyZ2V0KiB0YXJnZXQgOiBtX3RhcmdldHMudmFsdWVzKCkpIHsKLSAg
ICAgICAgdGFyZ2V0LT5jb25uZWN0KGNoYW5uZWwpOworICAgICAgICB0YXJnZXQtPmNvbm5lY3Qo
Y29ubmVjdGlvblR5cGUoKSk7CiAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT50YXJnZXRD
cmVhdGVkKGJ1aWxkVGFyZ2V0SW5mb09iamVjdCgqdGFyZ2V0KSk7CiAgICAgfQogfQogCiB2b2lk
IEluc3BlY3RvclRhcmdldEFnZW50OjpkaXNjb25uZWN0RnJvbVRhcmdldHMoKQogewotICAgIGF1
dG8mIGNoYW5uZWwgPSBmcm9udGVuZENoYW5uZWwoKTsKLQogICAgIGZvciAoSW5zcGVjdG9yVGFy
Z2V0KiB0YXJnZXQgOiBtX3RhcmdldHMudmFsdWVzKCkpCi0gICAgICAgIHRhcmdldC0+ZGlzY29u
bmVjdChjaGFubmVsKTsKKyAgICAgICAgdGFyZ2V0LT5kaXNjb25uZWN0KCk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmgKaW5kZXggMDBmYzNi
MDIxNzM0NGJlNGNkZmY3OTExYzIxMzcxOGM1Yjk1Y2VlMy4uYTQ1YjgzMjg5YmQ1OGE0NjE0ODI4
NjNlZGQ1MGEyMjY4NTRiMDg4MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oCkBAIC0yNyw2
ICsyNyw3IEBACiAKICNpbmNsdWRlICJJbnNwZWN0b3JBZ2VudEJhc2UuaCIKICNpbmNsdWRlICJJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIApAQCAtNDAsNiArNDEsNyBAQCBjbGFzcyBKU19FWFBP
UlRfUFJJVkFURSBJbnNwZWN0b3JUYXJnZXRBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJh
c2UsIHB1YmxpYwogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvclRhcmdldEFnZW50
KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKKyAgICBJbnNwZWN0b3JU
YXJnZXRBZ2VudChGcm9udGVuZFJvdXRlciYsIEJhY2tlbmREaXNwYXRjaGVyJik7CiAgICAgdmly
dHVhbCB+SW5zcGVjdG9yVGFyZ2V0QWdlbnQoKTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50QmFz
ZQpAQCAtNTMsMTkgKzU1LDE4IEBAIHB1YmxpYzoKICAgICAvLyBUYXJnZXQgbGlmZWN5Y2xlLgog
ICAgIHZvaWQgdGFyZ2V0Q3JlYXRlZChJbnNwZWN0b3JUYXJnZXQmKTsKICAgICB2b2lkIHRhcmdl
dERlc3Ryb3llZChJbnNwZWN0b3JUYXJnZXQmKTsKKyAgICB2b2lkIGRpZENvbW1pdFByb3Zpc2lv
bmFsVGFyZ2V0KGNvbnN0IFN0cmluZyYgb2xkVGFyZ2V0SUQsIGNvbnN0IFN0cmluZyYgY29tbWl0
dGVkVGFyZ2V0SUQpOwogCiAgICAgLy8gVGFyZ2V0IG1lc3NhZ2VzLgogICAgIHZvaWQgc2VuZE1l
c3NhZ2VGcm9tVGFyZ2V0VG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpOwogCi1wcm90ZWN0ZWQ6Ci0gICAgSW5zcGVjdG9yVGFyZ2V0QWdlbnQo
RnJvbnRlbmRSb3V0ZXImLCBCYWNrZW5kRGlzcGF0Y2hlciYpOwotCi0gICAgdmlydHVhbCBGcm9u
dGVuZENoYW5uZWwmIGZyb250ZW5kQ2hhbm5lbCgpID0gMDsKLQogcHJpdmF0ZToKKyAgICAvLyBG
cm9udGVuZENoYW5uZWwKKyAgICBGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlIGNvbm5l
Y3Rpb25UeXBlKCkgY29uc3Q7CiAgICAgdm9pZCBjb25uZWN0VG9UYXJnZXRzKCk7CiAgICAgdm9p
ZCBkaXNjb25uZWN0RnJvbVRhcmdldHMoKTsKIAorICAgIEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0
ZXImIG1fcm91dGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxUYXJnZXRGcm9udGVuZERpc3BhdGNo
ZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOwogICAgIFJlZjxUYXJnZXRCYWNrZW5kRGlzcGF0Y2hl
cj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKICAgICBIYXNoTWFwPFN0cmluZywgSW5zcGVjdG9yVGFy
Z2V0Kj4gbV90YXJnZXRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9wcm90b2NvbC9UYXJnZXQuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvcHJvdG9jb2wvVGFyZ2V0Lmpzb24KaW5kZXggNjFhZDI2OWQ5NWUxOGZkNTlkYTU1YzdjM2Vm
N2Q1ZDE0YWQxMzJkYS4uNjI2OTc5Nzk4OGMyMjZjMmY3MmMzMWMzODM3M2NkODQ4ZTMxNjM3NCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9UYXJn
ZXQuanNvbgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1Rh
cmdldC5qc29uCkBAIC04LDcgKzgsOSBAQAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRl
c2NyaXB0aW9uIG9mIGEgdGFyZ2V0LiIsCiAgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKICAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInRhcmdldElkIiwgInR5cGUiOiAic3RyaW5nIiwgImRl
c2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgdGFyZ2V0LiIgfSwKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInR5cGUiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsi
amF2YXNjcmlwdCIsICJwYWdlIiwgIndvcmtlciIsICJzZXJ2aWNld29ya2VyIl0gfQorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAidHlwZSIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJq
YXZhc2NyaXB0IiwgInBhZ2UiLCAid29ya2VyIiwgInNlcnZpY2V3b3JrZXIiXSB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiaXNQcm92aXNpb25hbCIsICJ0eXBlIjogImJvb2xlYW4iLCAi
b3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiV2hldGhlciB0aGlzIGlzIGEgcHJvdmlz
aW9uYWwgcGFnZSB0YXJnZXQuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJldmlv
dXNUYXJnZXRJZCIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlw
dGlvbiI6ICJGb3IgYSBwcm92aXNpb25hbCB0YXJnZXQgcmVwcmVzZW5zIElEIG9mIHRoZSB0YXJn
ZXQgaXQgaXMgc3dhcHBlZCB3aXRoIHdoZW4gY29tbWl0dGVkLiIgfQogICAgICAgICAgICAgXQog
ICAgICAgICB9CiAgICAgXSwKQEAgLTM5LDYgKzQxLDEyIEBACiAgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJ0YXJnZXRJZCIsICJ0eXBlIjogInN0cmluZyIgfQogICAgICAgICAgICAgXQogICAg
ICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJkaWRDb21taXRQcm92aXNp
b25hbFRhcmdldCIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInRhcmdldEluZm8iLCAiJHJlZiI6ICJUYXJnZXRJbmZvIiwgImRlc2NyaXB0
aW9uIjogIkNvbW1pdHRlZCB0YXJnZXQgaW5mby4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAg
fSwKICAgICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAiZGlzcGF0Y2hNZXNzYWdlRnJvbVRh
cmdldCIsCiAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCAyYzY3YjcyNDQ4MzFmNjA1
ZjA4ZGY0MTI1ZjIxY2VlYzcxYzkwY2E5Li5lYTVlOTM1NTgwZGZiMGY1Nzc3OWFkOGJhMGRhNTdi
NWM3MDUzMTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuY3BwCkBAIC0zNDQsMTcgKzM0NCw2IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6c2hvdygpCiAgICAgICAgIGNvbm5lY3RGcm9udGVuZCgqZnJvbnRlbmRDaGFubmVsKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJc1VuZGVyVGVzdChib29sIHZhbHVlKQot
ewotICAgIGlmICh2YWx1ZSA9PSBtX2lzVW5kZXJUZXN0KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2lzVW5kZXJUZXN0ID0gdmFsdWU7Ci0KLSAgICAvLyA8cmRhcjovL3Byb2JsZW0vMjY3Njg2
Mjg+IFRyeSB0byBjYXRjaCBzdXNwaWNpb3VzIHNjZW5hcmlvcyB3aGVyZSB3ZSBtYXkgaGF2ZSBh
IGRhbmdsaW5nIGZyb250ZW5kIHdoaWxlIHJ1bm5pbmcgdGVzdHMuCi0gICAgUkVMRUFTRV9BU1NF
UlQoIW1faXNVbmRlclRlc3QgfHwgIW1fZnJvbnRlbmRSb3V0ZXItPmhhc0Zyb250ZW5kcygpKTsK
LX0KLQogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5k
KGNvbnN0IFN0cmluZyYgc2NyaXB0KQogewogICAgIGVuc3VyZUluc3BlY3RvckFnZW50KCkuZXZh
bHVhdGVGb3JUZXN0SW5Gcm9udGVuZChzY3JpcHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggNGJlYTQzMjYzZGE3MDM3ZjE4ODY1OTY2
MmRhOGRiZjZkODMxNTk2ZC4uMWFhYjk4MDVhMWQ0ZWM3NTlkYTVkNGFlMGMzNDQyNTQyNGM1NjQw
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5o
CkBAIC0xMDEsNyArMTAxLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGlk
Q29tcG9zaXRlKEZyYW1lJik7CiAKICAgICBib29sIGlzVW5kZXJUZXN0KCkgY29uc3QgeyByZXR1
cm4gbV9pc1VuZGVyVGVzdDsgfQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SXNVbmRlclRl
c3QoYm9vbCk7CisgICAgdm9pZCBzZXRJc1VuZGVyVGVzdChib29sIGlzVW5kZXJUZXN0KSB7IG1f
aXNVbmRlclRlc3QgPSBpc1VuZGVyVGVzdDsgfQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZXZh
bHVhdGVGb3JUZXN0SW5Gcm9udGVuZChjb25zdCBTdHJpbmcmIHNjcmlwdCk7CiAKICAgICBJbnNw
ZWN0b3JDbGllbnQqIGluc3BlY3RvckNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9y
Q2xpZW50OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9CYXNlL01haW4uanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNl
L01haW4uanMKaW5kZXggZjI0NjE2Mjk2ZTQ3OGQyOTYzOWVmMjNkMTE3ZDhkMjc2ZTBmM2VhOC4u
MzcyMzhlM2ExODUwNTFhMjA4MWU2MGUwODMxYjgyZjgxNjY0OGYyNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzCisrKyBiL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcwpAQCAtMTc5LDg1ICsx
NzksNiBAQCBXSS5sb2FkZWQgPSBmdW5jdGlvbigpCiAgICAgfQogfTsKIAotV0kuaW5pdGlhbGl6
ZUJhY2tlbmRUYXJnZXQgPSBmdW5jdGlvbih0YXJnZXQpCi17Ci0gICAgY29uc29sZS5hc3NlcnQo
IVdJLm1haW5UYXJnZXQpOwotCi0gICAgV0kuYmFja2VuZFRhcmdldCA9IHRhcmdldDsKLQotICAg
IFdJLnJlc2V0TWFpbkV4ZWN1dGlvbkNvbnRleHQoKTsKLQotICAgIFdJLl90YXJnZXRzQXZhaWxh
YmxlUHJvbWlzZS5yZXNvbHZlKCk7Ci19OwotCi1XSS5pbml0aWFsaXplUGFnZVRhcmdldCA9IGZ1
bmN0aW9uKHRhcmdldCkKLXsKLSAgICBjb25zb2xlLmFzc2VydChXSS5zaGFyZWRBcHAuZGVidWdn
YWJsZVR5cGUgPT09IFdJLkRlYnVnZ2FibGVUeXBlLldlYik7Ci0gICAgY29uc29sZS5hc3NlcnQo
dGFyZ2V0LnR5cGUgPT09IFdJLlRhcmdldC5UeXBlLlBhZ2UgfHwgdGFyZ2V0IGluc3RhbmNlb2Yg
V0kuRGlyZWN0QmFja2VuZFRhcmdldCk7Ci0KLSAgICBXSS5wYWdlVGFyZ2V0ID0gdGFyZ2V0Owot
Ci0gICAgV0kucmVkaXJlY3RHbG9iYWxBZ2VudHNUb0Nvbm5lY3Rpb24oV0kucGFnZVRhcmdldC5j
b25uZWN0aW9uKTsKLQotICAgIFdJLnJlc2V0TWFpbkV4ZWN1dGlvbkNvbnRleHQoKTsKLX07Ci0K
LVdJLnRyYW5zaXRpb25QYWdlVGFyZ2V0ID0gZnVuY3Rpb24odGFyZ2V0KQotewotICAgIGNvbnNv
bGUuYXNzZXJ0KCFXSS5wYWdlVGFyZ2V0KTsKLSAgICBjb25zb2xlLmFzc2VydChXSS5zaGFyZWRB
cHAuZGVidWdnYWJsZVR5cGUgPT09IFdJLkRlYnVnZ2FibGVUeXBlLldlYik7Ci0gICAgY29uc29s
ZS5hc3NlcnQodGFyZ2V0LnR5cGUgPT09IFdJLlRhcmdldC5UeXBlLlBhZ2UpOwotCi0gICAgV0ku
cGFnZVRhcmdldCA9IHRhcmdldDsKLQotICAgIFdJLnJlZGlyZWN0R2xvYmFsQWdlbnRzVG9Db25u
ZWN0aW9uKFdJLnBhZ2VUYXJnZXQuY29ubmVjdGlvbik7Ci0KLSAgICBXSS5yZXNldE1haW5FeGVj
dXRpb25Db250ZXh0KCk7Ci0KLSAgICAvLyBBY3Rpb25zIHRvIHRyYW5zaXRpb24gdGhlIHBhZ2Ug
dGFyZ2V0LgotICAgIFdJLm5vdGlmaWNhdGlvbnMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdJ
Lk5vdGlmaWNhdGlvbi5UcmFuc2l0aW9uUGFnZVRhcmdldCk7Ci0gICAgV0kuZG9tTWFuYWdlci50
cmFuc2l0aW9uUGFnZVRhcmdldCgpOwotICAgIFdJLm5ldHdvcmtNYW5hZ2VyLnRyYW5zaXRpb25Q
YWdlVGFyZ2V0KCk7Ci0gICAgV0kudGltZWxpbmVNYW5hZ2VyLnRyYW5zaXRpb25QYWdlVGFyZ2V0
KCk7Ci19OwotCi1XSS50ZXJtaW5hdGVQYWdlVGFyZ2V0ID0gZnVuY3Rpb24odGFyZ2V0KQotewot
ICAgIGNvbnNvbGUuYXNzZXJ0KFdJLnBhZ2VUYXJnZXQpOwotICAgIGNvbnNvbGUuYXNzZXJ0KFdJ
LnBhZ2VUYXJnZXQgPT09IHRhcmdldCk7Ci0gICAgY29uc29sZS5hc3NlcnQoV0kuc2hhcmVkQXBw
LmRlYnVnZ2FibGVUeXBlID09PSBXSS5EZWJ1Z2dhYmxlVHlwZS5XZWIpOwotCi0gICAgLy8gUmVt
b3ZlIGFueSBXb3JrZXIgdGFyZ2V0cyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYWdlLgotICAgIGxl
dCB3b3JrZXJUYXJnZXRzID0gV0kudGFyZ2V0cy5maWx0ZXIoKHgpID0+IHgudHlwZSA9PT0gV0ku
VGFyZ2V0LlR5cGUuV29ya2VyKTsKLSAgICBmb3IgKGxldCB3b3JrZXJUYXJnZXQgb2Ygd29ya2Vy
VGFyZ2V0cykKLSAgICAgICAgV0kud29ya2VyTWFuYWdlci53b3JrZXJUZXJtaW5hdGVkKHdvcmtl
clRhcmdldC5pZGVudGlmaWVyKTsKLQotICAgIFdJLnBhZ2VUYXJnZXQgPSBudWxsOwotCi0gICAg
V0kucmVkaXJlY3RHbG9iYWxBZ2VudHNUb0Nvbm5lY3Rpb24oV0kuYmFja2VuZENvbm5lY3Rpb24p
OwotfTsKLQotV0kucmVzZXRNYWluRXhlY3V0aW9uQ29udGV4dCA9IGZ1bmN0aW9uKCkKLXsKLSAg
ICBpZiAoV0kubWFpblRhcmdldCBpbnN0YW5jZW9mIFdJLk11bHRpcGxleGluZ0JhY2tlbmRUYXJn
ZXQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChXSS5tYWluVGFyZ2V0LmV4ZWN1dGlvbkNv
bnRleHQpIHsKLSAgICAgICAgV0kucnVudGltZU1hbmFnZXIuYWN0aXZlRXhlY3V0aW9uQ29udGV4
dCA9IFdJLm1haW5UYXJnZXQuZXhlY3V0aW9uQ29udGV4dDsKLSAgICAgICAgaWYgKFdJLnF1aWNr
Q29uc29sZSkKLSAgICAgICAgICAgIFdJLnF1aWNrQ29uc29sZS5pbml0aWFsaXplTWFpbkV4ZWN1
dGlvbkNvbnRleHRQYXRoQ29tcG9uZW50KCk7Ci0gICAgfQotfTsKLQotV0kucmVkaXJlY3RHbG9i
YWxBZ2VudHNUb0Nvbm5lY3Rpb24gPSBmdW5jdGlvbihjb25uZWN0aW9uKQotewotICAgIC8vIFRo
aXMgbWFrZXMgZ2xvYmFsIHdpbmRvdy5Gb29BZ2VudCBkaXNwYXRjaCB0byB0aGUgYWN0aXZlIHBh
Z2UgdGFyZ2V0LgotICAgIGZvciAobGV0IFtkb21haW4sIGFnZW50XSBvZiBPYmplY3QuZW50cmll
cyhJbnNwZWN0b3JCYWNrZW5kLl9hZ2VudHMpKSB7Ci0gICAgICAgIGlmIChkb21haW4gIT09ICJU
YXJnZXQiKQotICAgICAgICAgICAgYWdlbnQuY29ubmVjdGlvbiA9IGNvbm5lY3Rpb247Ci0gICAg
fQotfTsKLQogV0kuY29udGVudExvYWRlZCA9IGZ1bmN0aW9uKCkKIHsKICAgICAvLyBJZiB0aGVy
ZSB3YXMgYW4gdW5jYXVnaHQgZXhjZXB0aW9uIGVhcmxpZXIgZHVyaW5nIGxvYWRpbmcsIHRoZW4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xs
ZXJzL1RhcmdldE1hbmFnZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9Db250cm9sbGVycy9UYXJnZXRNYW5hZ2VyLmpzCmluZGV4IGE5ZmE0ZGUwZTgzYTZiNjcxNzM0
YjhhZTZhMzBjODhkMzVhYzdiMTguLmIxNTg2YzE1NmEwNmVmMzIyYmMzODE5OTU4ZTc3Y2ZjMzIz
ZDRkOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Nv
bnRyb2xsZXJzL1RhcmdldE1hbmFnZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvVGFyZ2V0TWFuYWdlci5qcwpAQCAtMzMsNiArMzMsOSBA
QCBXSS5UYXJnZXRNYW5hZ2VyID0gY2xhc3MgVGFyZ2V0TWFuYWdlciBleHRlbmRzIFdJLk9iamVj
dAogICAgICAgICB0aGlzLl9jYWNoZWRUYXJnZXRzTGlzdCA9IG51bGw7CiAgICAgICAgIHRoaXMu
X3NlZW5QYWdlVGFyZ2V0ID0gZmFsc2U7CiAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25UaW1lb3V0
SWRlbnRpZmllciA9IHVuZGVmaW5lZDsKKworICAgICAgICB0aGlzLl9wcm92aXNpb25hbFRhcmdl
dElkcyA9IG5ldyBTZXQ7CisgICAgICAgIHRoaXMuX3N3YXBwZWRUYXJnZXRJZHMgPSBuZXcgU2V0
OwogICAgIH0KIAogICAgIC8vIFB1YmxpYwpAQCAtODAsNiArODMsNyBAQCBXSS5UYXJnZXRNYW5h
Z2VyID0gY2xhc3MgVGFyZ2V0TWFuYWdlciBleHRlbmRzIFdJLk9iamVjdAogCiAgICAgICAgIHRo
aXMuX2NhY2hlZFRhcmdldHNMaXN0ID0gbnVsbDsKICAgICAgICAgdGhpcy5fdGFyZ2V0cy5kZWxl
dGUodGFyZ2V0LmlkZW50aWZpZXIpOworICAgICAgICB0YXJnZXQuZGVzdHJveSgpOwogCiAgICAg
ICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdJLlRhcmdldE1hbmFnZXIuRXZlbnQu
VGFyZ2V0UmVtb3ZlZCwge3RhcmdldH0pOwogICAgIH0KQEAgLTg5LDcgKzkzLDcgQEAgV0kuVGFy
Z2V0TWFuYWdlciA9IGNsYXNzIFRhcmdldE1hbmFnZXIgZXh0ZW5kcyBXSS5PYmplY3QKICAgICAg
ICAgbGV0IHRhcmdldCA9IG5ldyBXSS5NdWx0aXBsZXhpbmdCYWNrZW5kVGFyZ2V0OwogICAgICAg
ICB0YXJnZXQuaW5pdGlhbGl6ZSgpOwogCi0gICAgICAgIFdJLmluaXRpYWxpemVCYWNrZW5kVGFy
Z2V0KHRhcmdldCk7CisgICAgICAgIHRoaXMuX2luaXRpYWxpemVCYWNrZW5kVGFyZ2V0KHRhcmdl
dCk7CiAKICAgICAgICAgLy8gQWRkIHRoZSB0YXJnZXQgd2l0aG91dCBkaXNwYXRjaGluZyBhbiBl
dmVudC4KICAgICAgICAgdGhpcy5fdGFyZ2V0cy5zZXQodGFyZ2V0LmlkZW50aWZpZXIsIHRhcmdl
dCk7CkBAIC0xMDAsMTAgKzEwNCwxMCBAQCBXSS5UYXJnZXRNYW5hZ2VyID0gY2xhc3MgVGFyZ2V0
TWFuYWdlciBleHRlbmRzIFdJLk9iamVjdAogICAgICAgICBsZXQgdGFyZ2V0ID0gbmV3IFdJLkRp
cmVjdEJhY2tlbmRUYXJnZXQ7CiAgICAgICAgIHRhcmdldC5pbml0aWFsaXplKCk7CiAKLSAgICAg
ICAgV0kuaW5pdGlhbGl6ZUJhY2tlbmRUYXJnZXQodGFyZ2V0KTsKKyAgICAgICAgdGhpcy5faW5p
dGlhbGl6ZUJhY2tlbmRUYXJnZXQodGFyZ2V0KTsKIAogICAgICAgICBpZiAoV0kuc2hhcmVkQXBw
LmRlYnVnZ2FibGVUeXBlID09PSBXSS5EZWJ1Z2dhYmxlVHlwZS5XZWIpCi0gICAgICAgICAgICBX
SS5pbml0aWFsaXplUGFnZVRhcmdldCh0YXJnZXQpOworICAgICAgICAgICAgdGhpcy5faW5pdGlh
bGl6ZVBhZ2VUYXJnZXQodGFyZ2V0KTsKIAogICAgICAgICB0aGlzLmFkZFRhcmdldCh0YXJnZXQp
OwogICAgIH0KQEAgLTExMiw2ICsxMTYsMTIgQEAgV0kuVGFyZ2V0TWFuYWdlciA9IGNsYXNzIFRh
cmdldE1hbmFnZXIgZXh0ZW5kcyBXSS5PYmplY3QKIAogICAgIHRhcmdldENyZWF0ZWQodGFyZ2V0
SW5mbykKICAgICB7CisgICAgICAgIC8vIENPTVBBVElCSUxJVFkgKGlPUyAxMy4wKTogYFRhcmdl
dC5UYXJnZXRJbmZvLmlzUHJvdmlzaW9uYWxgIGRpZCBub3QgZXhpc3QgeWV0LgorICAgICAgICBp
ZiAodGFyZ2V0SW5mby5pc1Byb3Zpc2lvbmFsKSB7CisgICAgICAgICAgICB0aGlzLl9wcm92aXNp
b25hbFRhcmdldElkcy5hZGQodGFyZ2V0SW5mby50YXJnZXRJZCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKwogICAgICAgICAvLyBGSVhNRTogRWxpbWluYXRlIHRoaXMgb25jZSB0
aGUgbG9jYWwgaW5zcGVjdG9yIGlzIGNvbmZpZ3VyZWQgdG8gdXNlCiAgICAgICAgIC8vIHRoZSBN
dWx0aXBsZXhpbmcgY29kZSBwYXRoLiBUaGVuIHdlIGNhbiBwZXJmb3JtIHRoaXMgaW1tZWRpYXRl
bHkKICAgICAgICAgLy8gaW4gYFdJLmxvYWRlZGAgaWYgYSBUYXJnZXRBZ2VudCBleGlzdHMuCkBA
IC0xMjYsOCArMTM2LDIxIEBAIFdJLlRhcmdldE1hbmFnZXIgPSBjbGFzcyBUYXJnZXRNYW5hZ2Vy
IGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIHRoaXMuYWRkVGFyZ2V0KHRhcmdldCk7CiAgICAg
fQogCisgICAgZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQodGFyZ2V0SW5mbykKKyAgICB7Cisg
ICAgICAgIHRoaXMudGFyZ2V0RGVzdHJveWVkKHRhcmdldEluZm8ucHJldmlvdXNUYXJnZXRJZCk7
CisgICAgICAgIHRoaXMudGFyZ2V0Q3JlYXRlZCh0YXJnZXRJbmZvKTsKKyAgICAgICAgdGhpcy5f
c3dhcHBlZFRhcmdldElkcy5hZGQodGFyZ2V0SW5mby5wcmV2aW91c1RhcmdldElkKTsKKyAgICAg
ICAgdGhpcy5fcHJvdmlzaW9uYWxUYXJnZXRJZHMuZGVsZXRlKHRhcmdldEluZm8udGFyZ2V0SWQp
OworCisgICAgfQorCiAgICAgdGFyZ2V0RGVzdHJveWVkKHRhcmdldElkKQogICAgIHsKKyAgICAg
ICAgaWYgKHRoaXMuX3Byb3Zpc2lvbmFsVGFyZ2V0SWRzLmRlbGV0ZSh0YXJnZXRJZCkpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGlmICh0aGlzLl9zd2FwcGVkVGFyZ2V0SWRzLmRlbGV0
ZSh0YXJnZXRJZCkpCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGxldCB0YXJnZXQgPSB0
aGlzLl90YXJnZXRzLmdldCh0YXJnZXRJZCk7CiAgICAgICAgIHRoaXMuX2NoZWNrQW5kSGFuZGxl
UGFnZVRhcmdldFRlcm1pbmF0aW9uKHRhcmdldCk7CiAgICAgICAgIHRoaXMucmVtb3ZlVGFyZ2V0
KHRhcmdldCk7CkBAIC0xMzUsNiArMTU4LDggQEAgV0kuVGFyZ2V0TWFuYWdlciA9IGNsYXNzIFRh
cmdldE1hbmFnZXIgZXh0ZW5kcyBXSS5PYmplY3QKIAogICAgIGRpc3BhdGNoTWVzc2FnZUZyb21U
YXJnZXQodGFyZ2V0SWQsIG1lc3NhZ2UpCiAgICAgeworICAgICAgICBpZiAodGhpcy5fcHJvdmlz
aW9uYWxUYXJnZXRJZHMuaGFzKHRhcmdldElkKSkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgbGV0IHRhcmdldCA9IHRoaXMuX3RhcmdldHMuZ2V0KHRhcmdldElkKTsKICAgICAgICAgY29u
c29sZS5hc3NlcnQodGFyZ2V0KTsKICAgICAgICAgaWYgKCF0YXJnZXQpCkBAIC0xNzEsMTIgKzE5
NiwxMiBAQCBXSS5UYXJnZXRNYW5hZ2VyID0gY2xhc3MgVGFyZ2V0TWFuYWdlciBleHRlbmRzIFdJ
Lk9iamVjdAogICAgICAgICAvLyBGaXJzdCBwYWdlIHRhcmdldC4KICAgICAgICAgaWYgKCFXSS5w
YWdlVGFyZ2V0ICYmICF0aGlzLl9zZWVuUGFnZVRhcmdldCkgewogICAgICAgICAgICAgdGhpcy5f
c2VlblBhZ2VUYXJnZXQgPSB0cnVlOwotICAgICAgICAgICAgV0kuaW5pdGlhbGl6ZVBhZ2VUYXJn
ZXQodGFyZ2V0KTsKKyAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpemVQYWdlVGFyZ2V0KHRhcmdl
dCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUcmFuc2l0
aW9uaW5nIHBhZ2UgdGFyZ2V0LgotICAgICAgICBXSS50cmFuc2l0aW9uUGFnZVRhcmdldCh0YXJn
ZXQpOworICAgICAgICB0aGlzLl90cmFuc2l0aW9uUGFnZVRhcmdldCh0YXJnZXQpOwogICAgIH0K
IAogICAgIF9jaGVja0FuZEhhbmRsZVBhZ2VUYXJnZXRUZXJtaW5hdGlvbih0YXJnZXQpCkBAIC0x
ODgsNyArMjEzLDcgQEAgV0kuVGFyZ2V0TWFuYWdlciA9IGNsYXNzIFRhcmdldE1hbmFnZXIgZXh0
ZW5kcyBXSS5PYmplY3QKICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fc2VlblBhZ2VUYXJn
ZXQpOwogCiAgICAgICAgIC8vIFRlcm1pbmF0aW5nIHRoZSBwYWdlIHRhcmdldC4KLSAgICAgICAg
V0kudGVybWluYXRlUGFnZVRhcmdldCh0YXJnZXQpOworICAgICAgICB0aGlzLl90ZXJtaW5hdGVQ
YWdlVGFyZ2V0KHRhcmdldCk7CiAKICAgICAgICAgLy8gRW5zdXJlIHdlIHRyYW5zaXRpb24gaW4g
YSByZWFzb25hYmxlIGFtb3VudCBvZiB0aW1lLCBvdGhlcndpc2UgY2xvc2UuCiAgICAgICAgIGNv
bnN0IHRpbWVUb1RyYW5zaXRpb24gPSAyMDAwOwpAQCAtMjAyLDYgKzIyNyw4NSBAQCBXSS5UYXJn
ZXRNYW5hZ2VyID0gY2xhc3MgVGFyZ2V0TWFuYWdlciBleHRlbmRzIFdJLk9iamVjdAogICAgICAg
ICAgICAgV0kuY2xvc2UoKTsKICAgICAgICAgfSwgdGltZVRvVHJhbnNpdGlvbik7CiAgICAgfQor
CisgICAgX2luaXRpYWxpemVCYWNrZW5kVGFyZ2V0KHRhcmdldCkKKyAgICB7CisgICAgICAgIGNv
bnNvbGUuYXNzZXJ0KCFXSS5tYWluVGFyZ2V0KTsKKworICAgICAgICBXSS5iYWNrZW5kVGFyZ2V0
ID0gdGFyZ2V0OworCisgICAgICAgIHRoaXMuX3Jlc2V0TWFpbkV4ZWN1dGlvbkNvbnRleHQoKTsK
KworICAgICAgICBXSS5fdGFyZ2V0c0F2YWlsYWJsZVByb21pc2UucmVzb2x2ZSgpOworICAgIH0K
KworICAgIF9pbml0aWFsaXplUGFnZVRhcmdldCh0YXJnZXQpCisgICAgeworICAgICAgICBjb25z
b2xlLmFzc2VydChXSS5zaGFyZWRBcHAuZGVidWdnYWJsZVR5cGUgPT09IFdJLkRlYnVnZ2FibGVU
eXBlLldlYik7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRhcmdldC50eXBlID09PSBXSS5UYXJn
ZXQuVHlwZS5QYWdlIHx8IHRhcmdldCBpbnN0YW5jZW9mIFdJLkRpcmVjdEJhY2tlbmRUYXJnZXQp
OworCisgICAgICAgIFdJLnBhZ2VUYXJnZXQgPSB0YXJnZXQ7CisKKyAgICAgICAgdGhpcy5fcmVk
aXJlY3RHbG9iYWxBZ2VudHNUb0Nvbm5lY3Rpb24oV0kucGFnZVRhcmdldC5jb25uZWN0aW9uKTsK
KworICAgICAgICB0aGlzLl9yZXNldE1haW5FeGVjdXRpb25Db250ZXh0KCk7CisgICAgfQorCisg
ICAgX3RyYW5zaXRpb25QYWdlVGFyZ2V0KHRhcmdldCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUu
YXNzZXJ0KCFXSS5wYWdlVGFyZ2V0KTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoV0kuc2hhcmVk
QXBwLmRlYnVnZ2FibGVUeXBlID09PSBXSS5EZWJ1Z2dhYmxlVHlwZS5XZWIpOworICAgICAgICBj
b25zb2xlLmFzc2VydCh0YXJnZXQudHlwZSA9PT0gV0kuVGFyZ2V0LlR5cGUuUGFnZSk7CisKKyAg
ICAgICAgV0kucGFnZVRhcmdldCA9IHRhcmdldDsKKworICAgICAgICB0aGlzLl9yZWRpcmVjdEds
b2JhbEFnZW50c1RvQ29ubmVjdGlvbihXSS5wYWdlVGFyZ2V0LmNvbm5lY3Rpb24pOworCisgICAg
ICAgIHRoaXMuX3Jlc2V0TWFpbkV4ZWN1dGlvbkNvbnRleHQoKTsKKworICAgICAgICAvLyBBY3Rp
b25zIHRvIHRyYW5zaXRpb24gdGhlIHBhZ2UgdGFyZ2V0LgorICAgICAgICBXSS5ub3RpZmljYXRp
b25zLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXSS5Ob3RpZmljYXRpb24uVHJhbnNpdGlvblBh
Z2VUYXJnZXQpOworICAgICAgICBXSS5kb21NYW5hZ2VyLnRyYW5zaXRpb25QYWdlVGFyZ2V0KCk7
CisgICAgICAgIFdJLm5ldHdvcmtNYW5hZ2VyLnRyYW5zaXRpb25QYWdlVGFyZ2V0KCk7CisgICAg
ICAgIFdJLnRpbWVsaW5lTWFuYWdlci50cmFuc2l0aW9uUGFnZVRhcmdldCgpOworICAgIH0KKwor
ICAgIF90ZXJtaW5hdGVQYWdlVGFyZ2V0KHRhcmdldCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUu
YXNzZXJ0KFdJLnBhZ2VUYXJnZXQpOworICAgICAgICBjb25zb2xlLmFzc2VydChXSS5wYWdlVGFy
Z2V0ID09PSB0YXJnZXQpOworICAgICAgICBjb25zb2xlLmFzc2VydChXSS5zaGFyZWRBcHAuZGVi
dWdnYWJsZVR5cGUgPT09IFdJLkRlYnVnZ2FibGVUeXBlLldlYik7CisKKyAgICAgICAgLy8gUmVt
b3ZlIGFueSBXb3JrZXIgdGFyZ2V0cyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYWdlLgorICAgICAg
ICBsZXQgd29ya2VyVGFyZ2V0cyA9IFdJLnRhcmdldHMuZmlsdGVyKCh4KSA9PiB4LnR5cGUgPT09
IFdJLlRhcmdldC5UeXBlLldvcmtlcik7CisgICAgICAgIGZvciAobGV0IHdvcmtlclRhcmdldCBv
ZiB3b3JrZXJUYXJnZXRzKQorICAgICAgICAgICAgV0kud29ya2VyTWFuYWdlci53b3JrZXJUZXJt
aW5hdGVkKHdvcmtlclRhcmdldC5pZGVudGlmaWVyKTsKKworICAgICAgICBXSS5wYWdlVGFyZ2V0
ID0gbnVsbDsKKworICAgICAgICB0aGlzLl9yZWRpcmVjdEdsb2JhbEFnZW50c1RvQ29ubmVjdGlv
bihXSS5iYWNrZW5kQ29ubmVjdGlvbik7CisgICAgfQorCisgICAgX3Jlc2V0TWFpbkV4ZWN1dGlv
bkNvbnRleHQoKQorICAgIHsKKyAgICAgICAgaWYgKFdJLm1haW5UYXJnZXQgaW5zdGFuY2VvZiBX
SS5NdWx0aXBsZXhpbmdCYWNrZW5kVGFyZ2V0KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGlmIChXSS5tYWluVGFyZ2V0LmV4ZWN1dGlvbkNvbnRleHQpIHsKKyAgICAgICAgICAgIFdJ
LnJ1bnRpbWVNYW5hZ2VyLmFjdGl2ZUV4ZWN1dGlvbkNvbnRleHQgPSBXSS5tYWluVGFyZ2V0LmV4
ZWN1dGlvbkNvbnRleHQ7CisgICAgICAgICAgICBpZiAoV0kucXVpY2tDb25zb2xlKQorICAgICAg
ICAgICAgICAgIFdJLnF1aWNrQ29uc29sZS5pbml0aWFsaXplTWFpbkV4ZWN1dGlvbkNvbnRleHRQ
YXRoQ29tcG9uZW50KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBfcmVkaXJlY3RHbG9iYWxB
Z2VudHNUb0Nvbm5lY3Rpb24oY29ubmVjdGlvbikKKyAgICB7CisgICAgICAgIC8vIFRoaXMgbWFr
ZXMgZ2xvYmFsIHdpbmRvdy5Gb29BZ2VudCBkaXNwYXRjaCB0byB0aGUgYWN0aXZlIHBhZ2UgdGFy
Z2V0LgorICAgICAgICBmb3IgKGxldCBbZG9tYWluLCBhZ2VudF0gb2YgT2JqZWN0LmVudHJpZXMo
SW5zcGVjdG9yQmFja2VuZC5fYWdlbnRzKSkgeworICAgICAgICAgICAgaWYgKGRvbWFpbiAhPT0g
IlRhcmdldCIpCisgICAgICAgICAgICAgICAgYWdlbnQuY29ubmVjdGlvbiA9IGNvbm5lY3Rpb247
CisgICAgICAgIH0KKyAgICB9OwogfTsKIAogV0kuVGFyZ2V0TWFuYWdlci5FdmVudCA9IHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL0Nv
bm5lY3Rpb24uanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Qcm90b2Nv
bC9Db25uZWN0aW9uLmpzCmluZGV4IGIyNzM3ODdmM2IzNTk5NTcxZDBjMGU5ODIwMzExZWQ1NDkz
NmIzZjYuLmFlZDQ2Y2YyNGVlOWQwMDI4ZTE3ODA1YzhlYzgwOGEzMzNmMDNiOTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL0Nvbm5lY3Rp
b24uanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wv
Q29ubmVjdGlvbi5qcwpAQCAtMzA4LDggKzMwOCwxMiBAQCBJbnNwZWN0b3JCYWNrZW5kLldvcmtl
ckNvbm5lY3Rpb24gPSBjbGFzcyBJbnNwZWN0b3JCYWNrZW5kV29ya2VyQ29ubmVjdGlvbiBleHRl
bgogCiAgICAgc2VuZE1lc3NhZ2VUb0JhY2tlbmQobWVzc2FnZSkKICAgICB7Ci0gICAgICAgIC8v
IElnbm9yZSBlcnJvcnMgaWYgYSB3b3JrZXIgd2VudCBhd2F5IHF1aWNrbHkuCi0gICAgICAgIFdv
cmtlckFnZW50LnNlbmRNZXNzYWdlVG9Xb3JrZXIodGhpcy5fd29ya2VySWQsIG1lc3NhZ2UpLmNh
dGNoKGZ1bmN0aW9uKCl7fSk7CisgICAgICAgIFdvcmtlckFnZW50LnNlbmRNZXNzYWdlVG9Xb3Jr
ZXIodGhpcy5fd29ya2VySWQsIG1lc3NhZ2UpLmNhdGNoKChlcnJvcikgPT4geworICAgICAgICAg
ICAgLy8gSWdub3JlIGVycm9ycyBpZiBhIHdvcmtlciB3ZW50IGF3YXkgcXVpY2tseS4KKyAgICAg
ICAgICAgIGlmICh0aGlzLnRhcmdldC5pc0Rlc3Ryb3llZCgpKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIFdJLnJlcG9ydEludGVybmFsRXJyb3IoZXJyb3IpOworICAgICAg
ICB9KTsKICAgICB9CiB9OwogCkBAIC0zMzIsNyArMzM2LDEzIEBAIEluc3BlY3RvckJhY2tlbmQu
VGFyZ2V0Q29ubmVjdGlvbiA9IGNsYXNzIEluc3BlY3RvckJhY2tlbmRUYXJnZXRDb25uZWN0aW9u
IGV4dGVuCiAKICAgICBzZW5kTWVzc2FnZVRvQmFja2VuZChtZXNzYWdlKQogICAgIHsKLSAgICAg
ICAgVGFyZ2V0QWdlbnQuc2VuZE1lc3NhZ2VUb1RhcmdldCh0aGlzLl90YXJnZXRJZCwgbWVzc2Fn
ZSk7CisgICAgICAgIFRhcmdldEFnZW50LnNlbmRNZXNzYWdlVG9UYXJnZXQodGhpcy5fdGFyZ2V0
SWQsIG1lc3NhZ2UpLmNhdGNoKChlcnJvcikgPT4geworICAgICAgICAgICAgLy8gQ29tbWFuZCBt
YXkgYmUgc2VudCBhZnRlciB0YXJnZXQgaXMgYWxyZWFkeSBkZXN0cm95ZWQgb24gYmFja2VuZCwK
KyAgICAgICAgICAgIC8vIGlnbm9yZSBzdWNoIGVycm9ycy4KKyAgICAgICAgICAgIGlmICh0aGlz
LnRhcmdldC5pc0Rlc3Ryb3llZCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIFdJLnJlcG9ydEludGVybmFsRXJyb3IoZXJyb3IpOworICAgICAgICB9KTsKICAgICB9CiB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Qcm90
b2NvbC9UYXJnZXQuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Qcm90
b2NvbC9UYXJnZXQuanMKaW5kZXggMjAzMzQxMGE2YjUzMzU4ZWI3Y2E5MjUxMzE3NWQzMTJhYWQx
YTQ0OC4uYTkzODIwYzA5NjNjY2FlNGZkN2I4YThiYTc3NjQ4YmNjMmJjMGIxYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wvVGFyZ2V0Lmpz
CisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL1Rhcmdl
dC5qcwpAQCAtMjAwLDYgKzIwMCwxNiBAQCBXSS5UYXJnZXQgPSBjbGFzcyBUYXJnZXQgZXh0ZW5k
cyBXSS5PYmplY3QKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV0kuVGFy
Z2V0LkV2ZW50LlNjcmlwdEFkZGVkLCB7c2NyaXB0fSk7CiAgICAgfQogCisgICAgZGVzdHJveSgp
CisgICAgeworICAgICAgICB0aGlzLl9pc0Rlc3Ryb3llZCA9IHRydWU7CisgICAgfQorCisgICAg
aXNEZXN0cm95ZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2lzRGVzdHJveWVkOwor
ICAgIH0KKwogICAgIC8vIFByaXZhdGUKIAogICAgIF9zdXBwb3J0ZWREb21haW5zRm9yVGFyZ2V0
VHlwZSh0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvUHJvdG9jb2wvVGFyZ2V0T2JzZXJ2ZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9Qcm90b2NvbC9UYXJnZXRPYnNlcnZlci5qcwppbmRleCAzMWI2ZmNmYzE4Njll
ZDEzODc4MWUxMDcxZGQxOWI1NDdjMDljYmY0Li5jMzRlOGFhN2YzNGRjMjI2NTFlN2YxYWMwMDk3
Y2M2MWYwYmZkOTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9Qcm90b2NvbC9UYXJnZXRPYnNlcnZlci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Qcm90b2NvbC9UYXJnZXRPYnNlcnZlci5qcwpAQCAtMjYsMTIgKzI2
LDIwIEBACiBXSS5UYXJnZXRPYnNlcnZlciA9IGNsYXNzIFRhcmdldE9ic2VydmVyCiB7CiAgICAg
Ly8gRXZlbnRzIGRlZmluZWQgYnkgdGhlICJUYXJnZXQiIGRvbWFpbi4KKyAgICBjb25zdHJ1Y3Rv
cigpCisgICAgeworICAgIH0KIAogICAgIHRhcmdldENyZWF0ZWQodGFyZ2V0SW5mbykKICAgICB7
CiAgICAgICAgIFdJLnRhcmdldE1hbmFnZXIudGFyZ2V0Q3JlYXRlZCh0YXJnZXRJbmZvKTsKICAg
ICB9CiAKKyAgICBkaWRDb21taXRQcm92aXNpb25hbFRhcmdldCh0YXJnZXRJbmZvKQorICAgIHsK
KyAgICAgICAgV0kudGFyZ2V0TWFuYWdlci5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldCh0YXJn
ZXRJbmZvKTsKKyAgICB9CisKICAgICB0YXJnZXREZXN0cm95ZWQodGFyZ2V0SWQpCiAgICAgewog
ICAgICAgICBXSS50YXJnZXRNYW5hZ2VyLnRhcmdldERlc3Ryb3llZCh0YXJnZXRJZCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9UZXN0L1Rlc3QuanMg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9UZXN0L1Rlc3QuanMKaW5kZXgg
NzU3MDhhMDBjOTU4MTcyN2VlMGY0YzM4NTM0M2E0ZjI0NGIyM2QzNS4uZTVjOGVhMWI2OGU2MDQ5
NTlkOGVmNzdlOGY4ZjkzZTY1OTZlYzgxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVGVzdC9UZXN0LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1Rlc3QvVGVzdC5qcwpAQCAtODYsNTIgKzg2LDYgQEAgV0kubG9hZGVk
ID0gZnVuY3Rpb24oKQogICAgIH0pOwogfTsKIAotV0kuaW5pdGlhbGl6ZUJhY2tlbmRUYXJnZXQg
PSBmdW5jdGlvbih0YXJnZXQpCi17Ci0gICAgV0kuYmFja2VuZFRhcmdldCA9IHRhcmdldDsKLQot
ICAgIFdJLnJlc2V0TWFpbkV4ZWN1dGlvbkNvbnRleHQoKTsKLQotICAgIFdJLl90YXJnZXRzQXZh
aWxhYmxlUHJvbWlzZS5yZXNvbHZlKCk7Ci19OwotCi1XSS5pbml0aWFsaXplUGFnZVRhcmdldCA9
IGZ1bmN0aW9uKHRhcmdldCkKLXsKLSAgICBXSS5wYWdlVGFyZ2V0ID0gdGFyZ2V0OwotCi0gICAg
V0kucmVkaXJlY3RHbG9iYWxBZ2VudHNUb0Nvbm5lY3Rpb24oV0kucGFnZVRhcmdldC5jb25uZWN0
aW9uKTsKLQotICAgIFdJLnJlc2V0TWFpbkV4ZWN1dGlvbkNvbnRleHQoKTsKLX07Ci0KLVdJLnRy
YW5zaXRpb25QYWdlVGFyZ2V0ID0gZnVuY3Rpb24odGFyZ2V0KQotewotICAgIGNvbnNvbGUuZXJy
b3IoIldJLnRyYW5zaXRpb25QYWdlVGFyZ2V0IHNob3VsZCBub3QgYmUgcmVhY2hlZCBpbiB0ZXN0
cy4iKTsKLX07Ci0KLVdJLnRlcm1pbmF0ZVBhZ2VUYXJnZXQgPSBmdW5jdGlvbih0YXJnZXQpCi17
Ci0gICAgY29uc29sZS5lcnJvcigiV0kudGVybWluYXRlUGFnZVRhcmdldCBzaG91bGQgbm90IGJl
IHJlYWNoZWQgaW4gdGVzdHMuIik7Ci19OwotCi1XSS5yZXNldE1haW5FeGVjdXRpb25Db250ZXh0
ID0gZnVuY3Rpb24oKQotewotICAgIGlmIChXSS5tYWluVGFyZ2V0IGluc3RhbmNlb2YgV0kuTXVs
dGlwbGV4aW5nQmFja2VuZFRhcmdldCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKFdJLm1h
aW5UYXJnZXQuZXhlY3V0aW9uQ29udGV4dCkKLSAgICAgICAgV0kucnVudGltZU1hbmFnZXIuYWN0
aXZlRXhlY3V0aW9uQ29udGV4dCA9IFdJLm1haW5UYXJnZXQuZXhlY3V0aW9uQ29udGV4dDsKLX07
Ci0KLVdJLnJlZGlyZWN0R2xvYmFsQWdlbnRzVG9Db25uZWN0aW9uID0gZnVuY3Rpb24oY29ubmVj
dGlvbikKLXsKLSAgICAvLyBUaGlzIG1ha2VzIGdsb2JhbCB3aW5kb3cuRm9vQWdlbnQgZGlzcGF0
Y2ggdG8gdGhlIGFjdGl2ZSBwYWdlIHRhcmdldC4KLSAgICBmb3IgKGxldCBbZG9tYWluLCBhZ2Vu
dF0gb2YgT2JqZWN0LmVudHJpZXMoSW5zcGVjdG9yQmFja2VuZC5fYWdlbnRzKSkgewotICAgICAg
ICBpZiAoZG9tYWluICE9PSAiVGFyZ2V0IikKLSAgICAgICAgICAgIGFnZW50LmNvbm5lY3Rpb24g
PSBjb25uZWN0aW9uOwotICAgIH0KLX07Ci0KIFdJLmNvbnRlbnRMb2FkZWQgPSBmdW5jdGlvbigp
CiB7CiAgICAgLy8gVGhpbmdzIHRoYXQgd291bGQgbm9ybWFsbHkgZ2V0IGNhbGxlZCBieSB0aGUg
VUksIHRoYXQgd2Ugc3RpbGwgd2FudCB0byBkbyBpbiB0ZXN0cy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CmluZGV4IDM3
M2Q2NTVmMTBhZjhiMzgwMzViOTZiYWM3ZDhmMjk1MmIwYTY4YmEuLjJmYWZjMDJhNjg5MzUwYTVl
MDI1OTg3NWExMGU0Yzg2ZmI0NmEwYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNl
cy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApAQCAtMjg4LDcgKzI4OCw2IEBA
IFVJUHJvY2Vzcy9XZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuY3BwCiBVSVByb2Nlc3Mv
V2ViUGFnZUdyb3VwLmNwcAogVUlQcm9jZXNzL1dlYlBhZ2VJbmplY3RlZEJ1bmRsZUNsaWVudC5j
cHAKIFVJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKLVVJUHJvY2Vzcy9X
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwCiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cAogVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5jcHAKIFVJUHJvY2Vzcy9XZWJQcmVmZXJl
bmNlcy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3RvclRh
cmdldFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3RvclRhcmdldFBy
b3h5LmNwcAppbmRleCA2MWI4ZjM2ZWZhNzUxZjFjODhkOTJiYTFhZGNkMTVlY2E2MTQ1ODIyLi4x
ZWM5OTdiYTgyMzk2MGNiNjRiMjJhNGEzNmRhOWY0M2Y1YjMwYTNkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3JUYXJnZXRQcm94eS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yVGFyZ2V0UHJveHkuY3BwCkBAIC0yNiw3ICsyNiw5
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVGFyZ2V0UHJveHku
aCIKIAorI2luY2x1ZGUgIlByb3Zpc2lvbmFsUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViRnJh
bWVQcm94eS5oIgorI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCIKICNpbmNsdWRl
ICJXZWJQYWdlTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRl
ICJXZWJQcm9jZXNzUHJveHkuaCIKQEAgLTM1LDkgKzM3LDE2IEBAIG5hbWVzcGFjZSBXZWJLaXQg
ewogCiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCi1SZWY8SW5zcGVjdG9yVGFyZ2V0UHJv
eHk+IEluc3BlY3RvclRhcmdldFByb3h5OjpjcmVhdGUoV2ViUGFnZVByb3h5JiBwYWdlLCBjb25z
dCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUgdHlwZSkK
K3N0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQcm94eT4gSW5zcGVjdG9yVGFyZ2V0UHJv
eHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIElu
c3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQogewotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEluc3BlY3RvclRhcmdldFByb3h5KHBhZ2UsIHRhcmdldElkLCB0eXBlKSk7CisgICAg
cmV0dXJuIG1ha2VVbmlxdWU8SW5zcGVjdG9yVGFyZ2V0UHJveHk+KHBhZ2UsIHRhcmdldElkLCB0
eXBlKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvclRhcmdldFByb3h5PiBJbnNwZWN0
b3JUYXJnZXRQcm94eTo6Y3JlYXRlKFByb3Zpc2lvbmFsUGFnZVByb3h5JiBwcm92aXNpb25hbFBh
Z2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlw
ZSB0eXBlKQoreworICAgIGF1dG8gdGFyZ2V0ID0gSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNyZWF0
ZShwcm92aXNpb25hbFBhZ2UucGFnZSgpLCB0YXJnZXRJZCwgdHlwZSk7CisgICAgdGFyZ2V0LT5t
X3Byb3Zpc2lvbmFsUGFnZSA9IG1ha2VXZWFrUHRyKHByb3Zpc2lvbmFsUGFnZSk7CisgICAgcmV0
dXJuIHRhcmdldDsKIH0KIAogSW5zcGVjdG9yVGFyZ2V0UHJveHk6Okluc3BlY3RvclRhcmdldFBy
b3h5KFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9y
OjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUpCkBAIC00NywyMiArNTYsNTYgQEAgSW5zcGVjdG9y
VGFyZ2V0UHJveHk6Okluc3BlY3RvclRhcmdldFByb3h5KFdlYlBhZ2VQcm94eSYgcGFnZSwgY29u
c3QgU3RyaW5nJiB0YXIKIHsKIH0KIAotdm9pZCBJbnNwZWN0b3JUYXJnZXRQcm94eTo6Y29ubmVj
dChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYgY2hhbm5lbCkKK3ZvaWQgSW5zcGVjdG9yVGFy
Z2V0UHJveHk6OmNvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25U
eXBlIGNvbm5lY3Rpb25UeXBlKQogeworICAgIGlmIChtX3Byb3Zpc2lvbmFsUGFnZSkgeworICAg
ICAgICBtX3Byb3Zpc2lvbmFsUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OkNvbm5lY3RJbnNwZWN0b3IoaWRlbnRpZmllcigpLCBjb25uZWN0aW9uVHlwZSksIG1fcHJvdmlz
aW9uYWxQYWdlLT53ZWJQYWdlSUQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBp
ZiAobV9wYWdlLmhhc1J1bm5pbmdQcm9jZXNzKCkpCi0gICAgICAgIG1fcGFnZS5wcm9jZXNzKCku
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q29ubmVjdEluc3BlY3RvcihpZGVudGlmaWVyKCksIGNo
YW5uZWwuY29ubmVjdGlvblR5cGUoKSksIG1fcGFnZS53ZWJQYWdlSUQoKSk7CisgICAgICAgIG1f
cGFnZS5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q29ubmVjdEluc3BlY3Rvcihp
ZGVudGlmaWVyKCksIGNvbm5lY3Rpb25UeXBlKSwgbV9wYWdlLndlYlBhZ2VJRCgpKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JUYXJnZXRQcm94eTo6ZGlzY29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5k
Q2hhbm5lbCYpCit2b2lkIEluc3BlY3RvclRhcmdldFByb3h5OjpkaXNjb25uZWN0KCkKIHsKKyAg
ICBpZiAobV9wcm92aXNpb25hbFBhZ2UpIHsKKyAgICAgICAgbV9wcm92aXNpb25hbFBhZ2UtPnBy
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaXNjb25uZWN0SW5zcGVjdG9yKGlkZW50
aWZpZXIoKSksIG1fcHJvdmlzaW9uYWxQYWdlLT53ZWJQYWdlSUQoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKICAgICBpZiAobV9wYWdlLmhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAg
IG1fcGFnZS5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlzY29ubmVjdEluc3Bl
Y3RvcihpZGVudGlmaWVyKCkpLCBtX3BhZ2Uud2ViUGFnZUlEKCkpOwogfQogCiB2b2lkIEluc3Bl
Y3RvclRhcmdldFByb3h5OjpzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpCiB7CisgICAgaWYgKG1fcHJvdmlzaW9uYWxQYWdlKSB7CisgICAgICAgIG1fcHJv
dmlzaW9uYWxQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2VuZE1lc3Nh
Z2VUb1RhcmdldEJhY2tlbmQoaWRlbnRpZmllcigpLCBtZXNzYWdlKSwgbV9wcm92aXNpb25hbFBh
Z2UtPndlYlBhZ2VJRCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChtX3Bh
Z2UuaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgbV9wYWdlLnByb2Nlc3MoKS5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpTZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChpZGVudGlmaWVyKCks
IG1lc3NhZ2UpLCBtX3BhZ2Uud2ViUGFnZUlEKCkpOwogfQogCit2b2lkIEluc3BlY3RvclRhcmdl
dFByb3h5OjpkaWRDb21taXRQcm92aXNpb25hbFRhcmdldCgpCit7CisgICAgQVNTRVJUKGlzUHJv
dmlzaW9uYWwoKSk7CisgICAgbV9wcm92aXNpb25hbFBhZ2UgPSBudWxscHRyOworfQorCitib29s
IEluc3BlY3RvclRhcmdldFByb3h5Ojppc1Byb3Zpc2lvbmFsKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gISFtX3Byb3Zpc2lvbmFsUGFnZTsKK30KKworU3RyaW5nIEluc3BlY3RvclRhcmdldFByb3h5
OjpwcmV2aW91c1RhcmdldElEKCkgY29uc3QKK3sKKyAgICBpZiAobV90eXBlICE9IEluc3BlY3Rv
cjo6SW5zcGVjdG9yVGFyZ2V0VHlwZTo6UGFnZSB8fCAhaXNQcm92aXNpb25hbCgpKQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICByZXR1cm4gV2ViUGFnZUluc3BlY3RvclRhcmdldDo6
dG9UYXJnZXRJRChtX3BhZ2Uud2ViUGFnZUlEKCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3RvclRhcmdldFBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3JUYXJnZXRQcm94eS5oCmlu
ZGV4IGQzODJiMDI2NTA5YzgzOTUxOTlhYmRkNDk1YWY2YTJhNTFhZjkyN2MuLjQzZjY4ZmIwMDU5
YzU1ZjJmN2QzYThhMmUzZjExYWQxMTgzM2FjNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0luc3BlY3RvclRhcmdldFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvSW5zcGVjdG9yVGFyZ2V0UHJveHkuaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVGFyZ2V0Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKQEAgLTM1LDI1ICszNiwzMSBAQCBjbGFzcyBXZWJQYWdlUHJveHk7CiAvLyBOT1RFOiBUaGlz
IFVJUHJvY2VzcyBzaWRlIEluc3BlY3RvclRhcmdldCBkb2Vzbid0IGNhcmUgYWJvdXQgdGhlIGZy
b250ZW5kIGNoYW5uZWwsIHNpbmNlCiAvLyBhbnkgdGFyZ2V0IC0+IGZyb250ZW5kIG1lc3NhZ2Vz
IHdpbGwgYmUgcm91dGVkIHRvIHRoZSBXZWJQYWdlUHJveHkgd2l0aCBhIHRhcmdldElkLgogCi1j
bGFzcyBJbnNwZWN0b3JUYXJnZXRQcm94eSBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3Bl
Y3RvclRhcmdldCwgcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yVGFyZ2V0UHJveHk+IHsKK2Ns
YXNzIEluc3BlY3RvclRhcmdldFByb3h5IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVj
dG9yVGFyZ2V0IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShJbnNwZWN0b3JUYXJnZXRQcm94eSk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxJbnNwZWN0b3JUYXJnZXRQcm94eT4gY3JlYXRlKFdlYlBhZ2VQcm94eSYsIGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSk7CisgICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQcm94eT4gY3JlYXRlKFdlYlBhZ2VQcm94
eSYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlw
ZSk7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQcm94eT4gY3Jl
YXRlKFByb3Zpc2lvbmFsUGFnZVByb3h5JiwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVj
dG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlKTsKICAgICBJbnNwZWN0b3JUYXJnZXRQcm94eShXZWJQ
YWdlUHJveHkmLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRh
cmdldFR5cGUpOwogICAgIH5JbnNwZWN0b3JUYXJnZXRQcm94eSgpID0gZGVmYXVsdDsKIAogICAg
IEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gbV90eXBlOyB9CiAgICAgU3RyaW5nIGlkZW50aWZpZXIoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX2lkZW50aWZpZXI7IH0KIAotICAgIHZvaWQgY29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5k
Q2hhbm5lbCYpOwotICAgIHZvaWQgZGlzY29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5l
bCYpOwotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoY29uc3QgU3RyaW5nJik7
CisgICAgdm9pZCBkaWRDb21taXRQcm92aXNpb25hbFRhcmdldCgpOworICAgIGJvb2wgaXNQcm92
aXNpb25hbCgpIGNvbnN0IG92ZXJyaWRlOworICAgIFN0cmluZyBwcmV2aW91c1RhcmdldElEKCkg
Y29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGNvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENo
YW5uZWw6OkNvbm5lY3Rpb25UeXBlKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpc2Nvbm5lY3QoKSBv
dmVycmlkZTsKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmlu
ZyYpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIFdlYlBhZ2VQcm94eSYgbV9wYWdlOwogICAg
IFN0cmluZyBtX2lkZW50aWZpZXI7CiAgICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBl
IG1fdHlwZTsKKyAgICBXZWFrUHRyPFByb3Zpc2lvbmFsUGFnZVByb3h5PiBtX3Byb3Zpc2lvbmFs
UGFnZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuY3BwCmluZGV4IGEyYTA5ZGM0OTI1ZGY0MmU1
NDg0NDUwYmVmNDc5NzhjMDM5N2Y5ZTUuLjkwOWQ0OWFkODkyNTgyMTgyNzljOTUxM2IzMDUxN2Zi
NjMwNTFiMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Byb3Zpc2lvbmFs
UGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Qcm92aXNpb25hbFBh
Z2VQcm94eS5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJXZWJFcnJvcnMuaCIKICNp
bmNsdWRlICJXZWJOYXZpZ2F0aW9uRGF0YVN0b3JlLmgiCiAjaW5jbHVkZSAiV2ViTmF2aWdhdGlv
blN0YXRlLmgiCisjaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJXZWJQYWdlTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNs
dWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgpAQCAtODQsNiArODUsOCBAQCBQcm92aXNpb25h
bFBhZ2VQcm94eTo6UHJvdmlzaW9uYWxQYWdlUHJveHkoV2ViUGFnZVByb3h5JiBwYWdlLCBSZWY8
V2ViUHJvY2Vzc1BybwogICAgIH0KIAogICAgIGluaXRpYWxpemVXZWJQYWdlKCk7CisKKyAgICBt
X3BhZ2UuaW5zcGVjdG9yQ29udHJvbGxlcigpLmRpZENyZWF0ZVByb3Zpc2lvbmFsUGFnZSgqdGhp
cyk7CiB9CiAKIFByb3Zpc2lvbmFsUGFnZVByb3h5Ojp+UHJvdmlzaW9uYWxQYWdlUHJveHkoKQpA
QCAtOTMsNiArOTYsOCBAQCBQcm92aXNpb25hbFBhZ2VQcm94eTo6flByb3Zpc2lvbmFsUGFnZVBy
b3h5KCkKICAgICBpZiAobV93YXNDb21taXR0ZWQpCiAgICAgICAgIHJldHVybjsKIAorICAgIG1f
cGFnZS5pbnNwZWN0b3JDb250cm9sbGVyKCkud2lsbERlc3Ryb3lQcm92aXNpb25hbFBhZ2UoKnRo
aXMpOworCiAgICAgaWYgKCZtX3Byb2Nlc3MtPndlYnNpdGVEYXRhU3RvcmUoKSAhPSAmbV9wYWdl
LndlYnNpdGVEYXRhU3RvcmUoKSkKICAgICAgICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnBh
Z2VFbmRVc2luZ1dlYnNpdGVEYXRhU3RvcmUobV9wYWdlLmlkZW50aWZpZXIoKSwgbV9wcm9jZXNz
LT53ZWJzaXRlRGF0YVN0b3JlKCkpOwogCkBAIC0zOTEsNiArMzk2LDkgQEAgdm9pZCBQcm92aXNp
b25hbFBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0
aW9uLCBJUEM6OkQKICAgICAgICAgfHwgZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkRpZFN0YXJ0TG9hZEZvclF1aWNrTG9va0RvY3VtZW50SW5NYWluRnJh
bWU6Om5hbWUoKQogICAgICAgICB8fCBkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6RGlkRmluaXNoTG9hZEZvclF1aWNrTG9va0RvY3VtZW50SW5NYWluRnJh
bWU6Om5hbWUoKQogI2VuZGlmCisgICAgICAgIHx8IGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDcmVhdGVJbnNwZWN0b3JUYXJnZXQ6Om5hbWUoKQorICAg
ICAgICB8fCBkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
RGVzdHJveUluc3BlY3RvclRhcmdldDo6bmFtZSgpCisgICAgICAgIHx8IGRlY29kZXIubWVzc2Fn
ZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZW5kTWVzc2FnZVRvSW5zcGVjdG9y
RnJvbnRlbmQ6Om5hbWUoKQogICAgICAgICApCiAgICAgewogICAgICAgICBtX3BhZ2UuZGlkUmVj
ZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuaAppbmRleCAxNzUyMTUwNDc0OGJmYjZmMjA2M2Nl
MTRjYTQ1ZmQxY2M3MTgzZWNiLi5iZWU4MWJjMGJkOWQ3MWI0YTY4ZGY0ZjhiOWU0NzM2YmQyOWE4
Y2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQ
cm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5
LmgKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIFByb3Zpc2lvbmFsUGFnZVByb3h5KFdl
YlBhZ2VQcm94eSYsIFJlZjxXZWJQcm9jZXNzUHJveHk+JiYsIHN0ZDo6dW5pcXVlX3B0cjxTdXNw
ZW5kZWRQYWdlUHJveHk+LCB1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIGJvb2wgaXNTZXJ2ZXJSZWRp
cmVjdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgUHJvY2Vzc1N3YXBSZXF1ZXN0
ZWRCeUNsaWVudCk7CiAgICAgflByb3Zpc2lvbmFsUGFnZVByb3h5KCk7CiAKLSAgICBXZWJQYWdl
UHJveHkmIHBhZ2UoKSB7IHJldHVybiBtX3BhZ2U7IH0KKyAgICBXZWJQYWdlUHJveHkmIHBhZ2Uo
KSBjb25zdCB7IHJldHVybiBtX3BhZ2U7IH0KICAgICBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciB3
ZWJQYWdlSUQoKSBjb25zdCB7IHJldHVybiBtX3dlYlBhZ2VJRDsgfQogICAgIFdlYkZyYW1lUHJv
eHkqIG1haW5GcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFpbkZyYW1lLmdldCgpOyB9CiAgICAg
V2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKCkgeyByZXR1cm4gbV9wcm9jZXNzLmdldCgpOyB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29udHJv
bGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29udHJv
bGxlci5jcHAKaW5kZXggYmRhNTljZDgwNTE1NzY0NmIzMDhkMmZkMjM2ZjNkMTE4MjcxZTBiNi4u
MmQ5YzU4MDIwYjFiMTRhOGJhZGRkYzEzZjVmNzVlZmRjMDYwN2Y4MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmNwcApA
QCAtMjYsMzAgKzI2LDQ0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViUGFn
ZUluc3BlY3RvckNvbnRyb2xsZXIuaCIKIAorI2luY2x1ZGUgIlByb3Zpc2lvbmFsUGFnZVByb3h5
LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVQcm94eS5oIgotI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0
b3JUYXJnZXRBZ2VudC5oIgorI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCIKICNp
bmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JBZ2VudEJhc2UuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVycy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVGFyZ2V0QWdlbnQu
aD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIAorc3RhdGljIFN0cmluZyBnZXRUYXJnZXRJRChjb25z
dCBQcm92aXNpb25hbFBhZ2VQcm94eSYgcHJvdmlzaW9uYWxQYWdlKQoreworICAgIHJldHVybiBX
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojp0b1RhcmdldElEKHByb3Zpc2lvbmFsUGFnZS53ZWJQYWdl
SUQoKSk7Cit9CisKIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpXZWJQYWdlSW5zcGVjdG9y
Q29udHJvbGxlcihXZWJQYWdlUHJveHkmIHBhZ2UpCiAgICAgOiBtX3BhZ2UocGFnZSkKICAgICAs
IG1fZnJvbnRlbmRSb3V0ZXIoRnJvbnRlbmRSb3V0ZXI6OmNyZWF0ZSgpKQogICAgICwgbV9iYWNr
ZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKG1fZnJvbnRlbmRSb3V0ZXIu
Y29weVJlZigpKSkKIHsKLSAgICBhdXRvIHRhcmdldEFnZW50ID0gbWFrZVVuaXF1ZTxXZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0QWdlbnQ+KG1fZnJvbnRlbmRSb3V0ZXIuZ2V0KCksIG1fYmFja2VuZERp
c3BhdGNoZXIuZ2V0KCkpOworICAgIGF1dG8gdGFyZ2V0QWdlbnQgPSBtYWtlVW5pcXVlPEluc3Bl
Y3RvclRhcmdldEFnZW50PihtX2Zyb250ZW5kUm91dGVyLmdldCgpLCBtX2JhY2tlbmREaXNwYXRj
aGVyLmdldCgpKTsKIAogICAgIG1fdGFyZ2V0QWdlbnQgPSB0YXJnZXRBZ2VudC5nZXQoKTsKIAog
ICAgIG1fYWdlbnRzLmFwcGVuZChXVEZNb3ZlKHRhcmdldEFnZW50KSk7CiB9CiAKK3ZvaWQgV2Vi
UGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmluaXQoKQoreworICAgIFN0cmluZyBwYWdlVGFyZ2V0
SWQgPSBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojp0b1RhcmdldElEKG1fcGFnZS53ZWJQYWdlSUQo
KSk7CisgICAgY3JlYXRlSW5zcGVjdG9yVGFyZ2V0KHBhZ2VUYXJnZXRJZCwgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JUYXJnZXRUeXBlOjpQYWdlKTsKK30KKwogdm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29u
dHJvbGxlcjo6cGFnZUNsb3NlZCgpCiB7CiAgICAgZGlzY29ubmVjdEFsbEZyb250ZW5kcygpOwpA
QCAtMTM0LDM3ICsxNDgsNTcgQEAgdm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0
SW5kaWNhdGluZyhib29sIGluZGljYXRpbmcpCiB9CiAjZW5kaWYKIAotdm9pZCBXZWJQYWdlSW5z
cGVjdG9yQ29udHJvbGxlcjo6Y2xlYXJUYXJnZXRzKCkKK3ZvaWQgV2ViUGFnZUluc3BlY3RvckNv
bnRyb2xsZXI6OmNyZWF0ZUluc3BlY3RvclRhcmdldChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJ
bnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUgdHlwZSkKIHsKLSAgICBmb3IgKGF1dG8mIHRh
cmdldCA6IG1fdGFyZ2V0cykKLSAgICAgICAgbV90YXJnZXRBZ2VudC0+dGFyZ2V0RGVzdHJveWVk
KCp0YXJnZXQuZ2V0KCkpOwotCi0gICAgbV90YXJnZXRzLmNsZWFyKCk7CisgICAgYWRkVGFyZ2V0
KEluc3BlY3RvclRhcmdldFByb3h5OjpjcmVhdGUobV9wYWdlLCB0YXJnZXRJZCwgdHlwZSkpOwog
fQogCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpjcmVhdGVJbnNwZWN0b3JUYXJn
ZXQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBl
IHR5cGUpCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpkZXN0cm95SW5zcGVjdG9y
VGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpCiB7Ci0gICAgYXV0byB0YXJnZXQgPSBJbnNw
ZWN0b3JUYXJnZXRQcm94eTo6Y3JlYXRlKG1fcGFnZSwgdGFyZ2V0SWQsIHR5cGUpOwotICAgIG1f
dGFyZ2V0cy5hcHBlbmQodGFyZ2V0LmNvcHlSZWYoKSk7CisgICAgYXV0byBpdCA9IG1fdGFyZ2V0
cy5maW5kKHRhcmdldElkKTsKKyAgICBpZiAoaXQgPT0gbV90YXJnZXRzLmVuZCgpKQorICAgICAg
ICByZXR1cm47CisgICAgbV90YXJnZXRBZ2VudC0+dGFyZ2V0RGVzdHJveWVkKCppdC0+dmFsdWUp
OworICAgIG1fdGFyZ2V0cy5yZW1vdmUoaXQpOworfQogCi0gICAgbV90YXJnZXRBZ2VudC0+dGFy
Z2V0Q3JlYXRlZCh0YXJnZXQuZ2V0KCkpOwordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxl
cjo6c2VuZE1lc3NhZ2VUb0luc3BlY3RvckZyb250ZW5kKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQs
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBtX3RhcmdldEFnZW50LT5zZW5kTWVzc2Fn
ZUZyb21UYXJnZXRUb0Zyb250ZW5kKHRhcmdldElkLCBtZXNzYWdlKTsKIH0KIAotdm9pZCBXZWJQ
YWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGVzdHJveUluc3BlY3RvclRhcmdldChjb25zdCBTdHJp
bmcmIHRhcmdldElkKQordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ3JlYXRl
UHJvdmlzaW9uYWxQYWdlKFByb3Zpc2lvbmFsUGFnZVByb3h5JiBwcm92aXNpb25hbFBhZ2UpCiB7
Ci0gICAgYXV0byBwb3NpdGlvbiA9IG1fdGFyZ2V0cy5maW5kTWF0Y2hpbmcoWyZdKGNvbnN0IGF1
dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0tPmlkZW50aWZpZXIoKSA9PSB0YXJnZXRJZDsgfSk7Ci0g
ICAgaWYgKHBvc2l0aW9uID09IG5vdEZvdW5kKQotICAgICAgICByZXR1cm47CisgICAgYWRkVGFy
Z2V0KEluc3BlY3RvclRhcmdldFByb3h5OjpjcmVhdGUocHJvdmlzaW9uYWxQYWdlLCBnZXRUYXJn
ZXRJRChwcm92aXNpb25hbFBhZ2UpLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGU6OlBh
Z2UpKTsKK30KIAotICAgIGF1dG8mIHRhcmdldCA9IG1fdGFyZ2V0c1twb3NpdGlvbl07Ci0gICAg
bV90YXJnZXRBZ2VudC0+dGFyZ2V0RGVzdHJveWVkKCp0YXJnZXQuZ2V0KCkpOwordm9pZCBXZWJQ
YWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbERlc3Ryb3lQcm92aXNpb25hbFBhZ2UoY29uc3Qg
UHJvdmlzaW9uYWxQYWdlUHJveHkmIHByb3Zpc2lvbmFsUGFnZSkKK3sKKyAgICBkZXN0cm95SW5z
cGVjdG9yVGFyZ2V0KGdldFRhcmdldElEKHByb3Zpc2lvbmFsUGFnZSkpOworfQogCi0gICAgbV90
YXJnZXRzLnJlbW92ZShwb3NpdGlvbik7Cit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVy
OjpkaWRDb21taXRQcm92aXNpb25hbFBhZ2UoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgb2xkV2Vi
UGFnZUlELCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBuZXdXZWJQYWdlSUQpCit7CisgICAgU3Ry
aW5nIG9sZElEID0gV2ViUGFnZUluc3BlY3RvclRhcmdldDo6dG9UYXJnZXRJRChvbGRXZWJQYWdl
SUQpOworICAgIFN0cmluZyBuZXdJRCA9IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OnRvVGFyZ2V0
SUQobmV3V2ViUGFnZUlEKTsKKyAgICBhdXRvIG5ld1RhcmdldCA9IG1fdGFyZ2V0cy50YWtlKG5l
d0lEKTsKKyAgICBBU1NFUlQobmV3VGFyZ2V0KTsKKyAgICBuZXdUYXJnZXQtPmRpZENvbW1pdFBy
b3Zpc2lvbmFsVGFyZ2V0KCk7CisgICAgbV90YXJnZXRBZ2VudC0+ZGlkQ29tbWl0UHJvdmlzaW9u
YWxUYXJnZXQob2xkSUQsIG5ld0lEKTsKKworICAgIC8vIFdlJ3ZlIGRpc2Nvbm5lY3RlZCBmcm9t
IHRoZSBvbGQgcGFnZSBhbmQgd2lsbCBub3QgcmVjZWl2ZSBhbnkgbWVzc2FnZSBmcm9tIGl0LCBz
bworICAgIC8vIHdlIGRlc3Ryb3kgZXZlcnl0aGluZyBidXQgdGhlIG5ldyB0YXJnZXQgaGVyZS4K
KyAgICAvLyBGSVhNRTogZG8gbm90IGRlc3Ryb3kgdGFyZ2V0cyB0aGF0IGJlbG9uZyB0byB0aGUg
Y29tbWl0dGVkIHBhZ2UuCisgICAgZm9yIChhdXRvJiB0YXJnZXQgOiBtX3RhcmdldHMudmFsdWVz
KCkpCisgICAgICAgIG1fdGFyZ2V0QWdlbnQtPnRhcmdldERlc3Ryb3llZCgqdGFyZ2V0KTsKKyAg
ICBtX3RhcmdldHMuY2xlYXIoKTsKKyAgICBtX3RhcmdldHMuc2V0KG5ld1RhcmdldC0+aWRlbnRp
ZmllcigpLCBXVEZNb3ZlKG5ld1RhcmdldCkpOwogfQogCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JD
b250cm9sbGVyOjpzZW5kTWVzc2FnZVRvSW5zcGVjdG9yRnJvbnRlbmQoY29uc3QgU3RyaW5nJiB0
YXJnZXRJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29u
dHJvbGxlcjo6YWRkVGFyZ2V0KHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQcm94eT4m
JiB0YXJnZXQpCiB7Ci0gICAgbV90YXJnZXRBZ2VudC0+c2VuZE1lc3NhZ2VGcm9tVGFyZ2V0VG9G
cm9udGVuZCh0YXJnZXRJZCwgbWVzc2FnZSk7CisgICAgbV90YXJnZXRBZ2VudC0+dGFyZ2V0Q3Jl
YXRlZCgqdGFyZ2V0KTsKKyAgICBtX3RhcmdldHMuc2V0KHRhcmdldC0+aWRlbnRpZmllcigpLCBX
VEZNb3ZlKHRhcmdldCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4
IDBjYWY2YTFjMjc5MjA0M2QzYmUwNTcxYTI4ZmRiMWUxNDE5N2E2MTEuLmE3MGRjZTc1YmRlZTA3
YzIzMmI4YmEzNWRmY2MwOGQxNjFiNjA3MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtNDYsNiArNDYsNyBAQCBj
bGFzcyBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlciB7CiBwdWJsaWM6CiAgICAgV2ViUGFnZUlu
c3BlY3RvckNvbnRyb2xsZXIoV2ViUGFnZVByb3h5Jik7CiAKKyAgICB2b2lkIGluaXQoKTsKICAg
ICB2b2lkIHBhZ2VDbG9zZWQoKTsKIAogICAgIGJvb2wgaGFzTG9jYWxGcm9udGVuZCgpIGNvbnN0
OwpAQCAtNjAsMTggKzYxLDIzIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEluZGljYXRpbmcoYm9v
bCk7CiAjZW5kaWYKIAotICAgIHZvaWQgY2xlYXJUYXJnZXRzKCk7CiAgICAgdm9pZCBjcmVhdGVJ
bnNwZWN0b3JUYXJnZXQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0
b3JUYXJnZXRUeXBlKTsKICAgICB2b2lkIGRlc3Ryb3lJbnNwZWN0b3JUYXJnZXQoY29uc3QgU3Ry
aW5nJiB0YXJnZXRJZCk7CiAgICAgdm9pZCBzZW5kTWVzc2FnZVRvSW5zcGVjdG9yRnJvbnRlbmQo
Y29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKIAorICAgIHZv
aWQgZGlkQ3JlYXRlUHJvdmlzaW9uYWxQYWdlKFByb3Zpc2lvbmFsUGFnZVByb3h5Jik7CisgICAg
dm9pZCB3aWxsRGVzdHJveVByb3Zpc2lvbmFsUGFnZShjb25zdCBQcm92aXNpb25hbFBhZ2VQcm94
eSYpOworICAgIHZvaWQgZGlkQ29tbWl0UHJvdmlzaW9uYWxQYWdlKFdlYkNvcmU6OlBhZ2VJZGVu
dGlmaWVyIG9sZFdlYlBhZ2VJRCwgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgbmV3V2ViUGFnZUlE
KTsKKwogcHJpdmF0ZToKKyAgICB2b2lkIGFkZFRhcmdldChzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVj
dG9yVGFyZ2V0UHJveHk+JiYpOworCiAgICAgV2ViUGFnZVByb3h5JiBtX3BhZ2U7CiAgICAgUmVm
PEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXI+IG1fZnJvbnRlbmRSb3V0ZXI7CiAgICAgUmVmPElu
c3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiAgICAgSW5z
cGVjdG9yOjpBZ2VudFJlZ2lzdHJ5IG1fYWdlbnRzOwogICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9y
VGFyZ2V0QWdlbnQqIG1fdGFyZ2V0QWdlbnQ7Ci0gICAgVmVjdG9yPFJlZlB0cjxJbnNwZWN0b3JU
YXJnZXRQcm94eT4+IG1fdGFyZ2V0czsKKyAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVf
cHRyPEluc3BlY3RvclRhcmdldFByb3h5Pj4gbV90YXJnZXRzOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0QWdlbnQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZUlu
c3BlY3RvclRhcmdldEFnZW50LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmEw
MDFjMDhkMDJmN2VkNmMwMDg1NjZmN2FmODlhMzgxY2RlZDIxNS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaCIKLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRBZ2VudDo6V2ViUGFn
ZUluc3BlY3RvclRhcmdldEFnZW50KEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXImIGZyb250ZW5k
Um91dGVyLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlcikK
LSAgICA6IEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0QWdlbnQoZnJvbnRlbmRSb3V0ZXIsIGJh
Y2tlbmREaXNwYXRjaGVyKQotICAgICwgbV9yb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpCi17Ci19Ci0K
LVdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRBZ2VudDo6fldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRBZ2Vu
dCgpID0gZGVmYXVsdDsKLQotSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwmIFdlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXRBZ2VudDo6ZnJvbnRlbmRDaGFubmVsKCkKLXsKLSAgICByZXR1cm4gKnRoaXM7
Ci19Ci0KLUluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSBXZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OmNvbm5lY3Rpb25UeXBlKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9yb3V0ZXIuaGFzTG9jYWxGcm9udGVuZCgpID8gSW5zcGVjdG9yOjpGcm9udGVuZENoYW5u
ZWw6OkNvbm5lY3Rpb25UeXBlOjpMb2NhbCA6IEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpD
b25uZWN0aW9uVHlwZTo6UmVtb3RlOwotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRB
Z2VudDo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYpCi17Ci0gICAgLy8gSW50
ZW50aW9uYWxseSBpZ25vcmVkLCB0aGlzIGNoYW5uZWwgaXMgbm90IGFjdHVhbGx5IHVzZWQgdG8g
c2VuZCBtZXNzYWdlcy4KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0QWdlbnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXRBZ2VudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjNm
OWMzY2NjZWE1NDg3YTRjZTI5M2VjNWUwODNhOGNjOGI1MTU0Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBh
Z2VJbnNwZWN0b3JUYXJnZXRBZ2VudC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25j
ZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaD4KLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRBZ2VudCBmaW5h
bCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldEFnZW50LCBwdWJsaWMgSW5zcGVj
dG9yOjpGcm9udGVuZENoYW5uZWwgewotcHVibGljOgotICAgIFdlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRBZ2VudChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyJiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlz
cGF0Y2hlciYpOwotICAgIHZpcnR1YWwgfldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRBZ2VudCgpOwot
Ci0gICAgLy8gSW5zcGVjdG9yVGFyZ2V0QWdlbnQKLSAgICBJbnNwZWN0b3I6OkZyb250ZW5kQ2hh
bm5lbCYgZnJvbnRlbmRDaGFubmVsKCk7Ci0KLSAgICAvLyBGcm9udGVuZENoYW5uZWwKLSAgICBJ
bnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUo
KSBjb25zdDsKLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmKTsK
LQotcHJpdmF0ZToKLSAgICBJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyJiBtX3JvdXRlcjsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHAKaW5kZXggMDQxODJiOThjYTIwN2ZjMjJhNzRkZTE5MTA2N2Q1ODU1NmJiODQ2YS4u
NDUxMDFiMTM4ZDExMzc2Mzk5N2Q5ZjMzYTU1ZTVhMmZhZTMxNjM5NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC00OTEsOCArNDkxLDcgQEAgV2ViUGFnZVBy
b3h5OjpXZWJQYWdlUHJveHkoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwgV2ViUHJvY2Vzc1Byb3h5
JiBwcm9jZXNzLCBSZWYKICAgICBtX2luc3BlY3RvckRlYnVnZ2FibGUtPnNldFJlbW90ZURlYnVn
Z2luZ0FsbG93ZWQodHJ1ZSk7CiAgICAgbV9pbnNwZWN0b3JEZWJ1Z2dhYmxlLT5pbml0KCk7CiAj
ZW5kaWYKLQotICAgIGNyZWF0ZUluc3BlY3RvclRhcmdldHMoKTsKKyAgICBtX2luc3BlY3RvckNv
bnRyb2xsZXItPmluaXQoKTsKIH0KIAogV2ViUGFnZVByb3h5Ojp+V2ViUGFnZVByb3h5KCkKQEAg
LTg0Miw5ICs4NDEsNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZmluaXNoQXR0YWNoaW5nVG9XZWJQ
cm9jZXNzKFByb2Nlc3NMYXVuY2hSZWFzb24gcmVhc29uKQogICAgIHJlbW90ZUluc3BlY3Rvcklu
Zm9ybWF0aW9uRGlkQ2hhbmdlKCk7CiAjZW5kaWYKIAotICAgIGNsZWFySW5zcGVjdG9yVGFyZ2V0
cygpOwotICAgIGNyZWF0ZUluc3BlY3RvclRhcmdldHMoKTsKLQogICAgIHBhZ2VDbGllbnQoKS5k
aWRSZWxhdW5jaFByb2Nlc3MoKTsKICAgICBtX3BhZ2VMb2FkU3RhdGUuZGlkU3dhcFdlYlByb2Nl
c3NlcygpOwogICAgIGlmIChyZWFzb24gIT0gUHJvY2Vzc0xhdW5jaFJlYXNvbjo6SW5pdGlhbFBy
b2Nlc3MpCkBAIC0xNjI4LDE3ICsxNjI0LDYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlbW90ZUlu
c3BlY3RvckluZm9ybWF0aW9uRGlkQ2hhbmdlKCkKIH0KICNlbmRpZgogCi12b2lkIFdlYlBhZ2VQ
cm94eTo6Y2xlYXJJbnNwZWN0b3JUYXJnZXRzKCkKLXsKLSAgICBtX2luc3BlY3RvckNvbnRyb2xs
ZXItPmNsZWFyVGFyZ2V0cygpOwotfQotCi12b2lkIFdlYlBhZ2VQcm94eTo6Y3JlYXRlSW5zcGVj
dG9yVGFyZ2V0cygpCi17Ci0gICAgU3RyaW5nIHBhZ2VUYXJnZXRJZCA9IG1ha2VTdHJpbmcoInBh
Z2UtIiwgbV93ZWJQYWdlSUQudG9VSW50NjQoKSk7Ci0gICAgbV9pbnNwZWN0b3JDb250cm9sbGVy
LT5jcmVhdGVJbnNwZWN0b3JUYXJnZXQocGFnZVRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3Rv
clRhcmdldFR5cGU6OlBhZ2UpOwotfQotCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QmFja2dyb3Vu
ZENvbG9yKGNvbnN0IE9wdGlvbmFsPENvbG9yPiYgY29sb3IpCiB7CiAgICAgaWYgKG1fYmFja2dy
b3VuZENvbG9yID09IGNvbG9yKQpAQCAtMjk5Nyw2ICsyOTgyLDcgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OmNvbW1pdFByb3Zpc2lvbmFsUGFnZShGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgdWludDY0
X3QgbmF2aWcKICAgICBpZiAoIWRpZFN1c3BlbmRQcmV2aW91c1BhZ2UpCiAgICAgICAgIG1fcHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q2xvc2UoKSwgbV93ZWJQYWdlSUQpOwogCisg
ICAgY29uc3QgYXV0byBvbGRXZWJQYWdlSUQgPSBtX3dlYlBhZ2VJRDsKICAgICBzd2FwVG9XZWJQ
cm9jZXNzKG1fcHJvdmlzaW9uYWxQYWdlLT5wcm9jZXNzKCksIG1fcHJvdmlzaW9uYWxQYWdlLT53
ZWJQYWdlSUQoKSwgbV9wcm92aXNpb25hbFBhZ2UtPnRha2VEcmF3aW5nQXJlYSgpLCBtX3Byb3Zp
c2lvbmFsUGFnZS0+bWFpbkZyYW1lKCkpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC0zMDA3
LDYgKzI5OTMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Y29tbWl0UHJvdmlzaW9uYWxQYWdlKEZy
YW1lSWRlbnRpZmllciBmcmFtZUlELCB1aW50NjRfdCBuYXZpZwogCiAgICAgZGlkQ29tbWl0TG9h
ZEZvckZyYW1lKGZyYW1lSUQsIG5hdmlnYXRpb25JRCwgbWltZVR5cGUsIGZyYW1lSGFzQ3VzdG9t
Q29udGVudFByb3ZpZGVyLCBmcmFtZUxvYWRUeXBlLCBjZXJ0aWZpY2F0ZUluZm8sIGNvbnRhaW5z
UGx1Z2luRG9jdW1lbnQsIGZvcmNlZEhhc0luc2VjdXJlQ29udGVudCwgdXNlckRhdGEpOwogCisg
ICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kaWRDb21taXRQcm92aXNpb25hbFBhZ2Uob2xkV2Vi
UGFnZUlELCBtX3dlYlBhZ2VJRCk7CiAgICAgbV9wcm92aXNpb25hbFBhZ2UgPSBudWxscHRyOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IGE0MTY5N2NkNTFl
YmM5YWQyMzVjNzVhNWYzMWYzYjZiZGFlODgwMTMuLjI3YTA0Y2NmYmZlNDk2NDEwMzI2ZDY2NDUw
YzNlOTU0YTA1ZWI0ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBA
IC0yMDYyLDkgKzIwNjIsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzdG9wQWxsVVJMU2NoZW1l
VGFza3MoV2ViUHJvY2Vzc1Byb3h5KiA9IG51bGxwdHIpOwogCi0gICAgdm9pZCBjbGVhckluc3Bl
Y3RvclRhcmdldHMoKTsKLSAgICB2b2lkIGNyZWF0ZUluc3BlY3RvclRhcmdldHMoKTsKLQogI2lm
IEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCiAgICAgdm9pZCByZWdpc3RlckF0dGFjaG1lbnRJ
ZGVudGlmaWVyRnJvbURhdGEoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlw
ZSwgY29uc3QgU3RyaW5nJiBwcmVmZXJyZWRGaWxlTmFtZSwgY29uc3QgSVBDOjpEYXRhUmVmZXJl
bmNlJik7CiAgICAgdm9pZCByZWdpc3RlckF0dGFjaG1lbnRJZGVudGlmaWVyRnJvbUZpbGVQYXRo
KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUsIGNvbnN0IFN0cmluZyYg
ZmlsZVBhdGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggZGFhYTE3ZWI2YmNiMjY2NDg2NDQ4NDU1Y2E2MWViYjRlMmRjOGQ3ZS4uMTNi
YzdjNGY1NDJiOTc4ODI0NjA4YjIwNDk1Yzk0YWViMjM2MmM2OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMzY4LDcgKzEzNjgsNiBA
QAogCQlBNTQzRTMwNzIxNUFEMTM3MDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldEZy
b250ZW5kQ2hhbm5lbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTU0M0UzMDUyMTVBRDEyRDAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRG
cm9udGVuZENoYW5uZWwuaCAqLzsgfTsKIAkJQTU0M0UzMEMyMTVDOEE4RDAwMjc5Q0Q5IC8qIFdl
YlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE1NDNFMzA4MjE1QzhBODMwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0LmggKi87IH07CiAJCUE1NDNFMzBEMjE1QzhBOTAwMDI3OUNEOSAvKiBXZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTU0M0UzMEIyMTVDOEE4NDAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0
b3JUYXJnZXRDb250cm9sbGVyLmggKi87IH07Ci0JCUE1NDNFMzEwMjE1RDhDRTYwMDI3OUNEOSAv
KiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1NDNFMzBFMjE1RDhDRTIwMDI3OUNEOSAvKiBXZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0QWdlbnQuaCAqLzsgfTsKIAkJQTU1QkE4MTAxQkExMzE3RTAwN0NEMzNE
IC8qIF9XS1JlbW90ZVdlYkluc3BlY3RvclZpZXdDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTVCQTgwQzFCQTEyQkUxMDA3Q0QzM0Qg
LyogX1dLUmVtb3RlV2ViSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNTVCQTgxNzFCQTIzRTEyMDA3Q0Qz
M0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yVUkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE1NUJBODEzMUJBMjNFMDUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJ
bnNwZWN0b3JVSS5oICovOyB9OwogCQlBNTVCQTgxRjFCQTI1QjI3MDA3Q0QzM0QgLyogUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE1NUJBODE5MUJBMjVCMUUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eS5oICovOyB9OwpAQCAtNDExMiw4ICs0MTExLDYgQEAKIAkJQTU0M0UzMDkyMTVDOEE4MzAw
Mjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTU0M0UzMEEyMTVDOEE4NDAwMjc5Q0Q5IC8qIFdlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUGFnZUluc3BlY3RvclRh
cmdldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1NDNFMzBCMjE1QzhBODQw
MDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlBNTQzRTMwRTIxNUQ4Q0UyMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3Rv
clRhcmdldEFnZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRBZ2Vu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNTQzRTMwRjIxNUQ4Q0UyMDAyNzlD
RDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRBZ2VudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE1NUJBODBDMUJBMTJCRTEwMDdDRDMzRCAvKiBfV0tSZW1vdGVXZWJJbnNwZWN0b3JW
aWV3Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tSZW1v
dGVXZWJJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBNTVCQTgwRDFCQTEyQkUxMDA3Q0QzM0QgLyogX1dLUmVtb3RlV2ViSW5zcGVjdG9yVmll
d0NvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBf
V0tSZW1vdGVXZWJJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTU1QkE4MTIxQkEyM0UwNTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3Rv
clVJLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZVdlYklu
c3BlY3RvclVJLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc4OTMsOCArNzg5
MCw2IEBACiAJCQkJMkQ5RUEzMEUxQTk2Q0JGRjAwMkQyODA3IC8qIFdlYlBhZ2VJbmplY3RlZEJ1
bmRsZUNsaWVudC5oICovLAogCQkJCUE1MTNGNTNGMjE1NEE1Q0QwMDY2Mjg0MSAvKiBXZWJQYWdl
SW5zcGVjdG9yQ29udHJvbGxlci5jcHAgKi8sCiAJCQkJQTUxM0Y1M0UyMTU0QTVDQzAwNjYyODQx
IC8qIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmggKi8sCi0JCQkJQTU0M0UzMEYyMTVEOENF
MjAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRBZ2VudC5jcHAgKi8sCi0JCQkJQTU0
M0UzMEUyMTVEOENFMjAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRBZ2VudC5oICov
LAogCQkJCUJDMTExQjBCMTEyRjVFNEYwMDMzN0JBQiAvKiBXZWJQYWdlUHJveHkuY3BwICovLAog
CQkJCUJDMDMyRENCMTBGNDM4OUYwMDU4QzE1QSAvKiBXZWJQYWdlUHJveHkuaCAqLywKIAkJCQlC
Q0JEMzhGQTEyNUJBQjlBMDBEMkMyOUYgLyogV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluICovLApA
QCAtOTk3OSw3ICs5OTc0LDYgQEAKIAkJCQkyRDlFQTMwRjFBOTZDQkZGMDAyRDI4MDcgLyogV2Vi
UGFnZUluamVjdGVkQnVuZGxlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTEzRjU0MDIx
NTRBNUQ3MDA2NjI4NDEgLyogV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE1NDNFMzBDMjE1QzhBOEQwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0LmggaW4gSGVhZGVycyAqLywKLQkJCQlBNTQzRTMxMDIxNUQ4Q0U2MDAyNzlDRDkgLyogV2Vi
UGFnZUluc3BlY3RvclRhcmdldEFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTQzRTMwRDIx
NUM4QTkwMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE1NDNFMzA3MjE1QUQxMzcwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMENFNzJBMTEy
NDdFNzFEMDBCQzBFQzQgLyogV2ViUGFnZU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JU
YXJnZXQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3Bl
Y3RvclRhcmdldC5jcHAKaW5kZXggNTZiMGQ1MmVjNTk1N2NjNzNhMTNmMDY3ZWIzY2RhMDMyZGUy
MTc1OC4uYTcwZjZmZDUyMDk2YTVkY2E5MDFlYTcwYTM3NTVmMTRkNmI0YTBmZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdl
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3Bl
Y3RvclRhcmdldC5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJXZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0LmgiCiAKICNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSAiV2ViUGFnZUlu
c3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVj
dG9yQ29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgogCkBAIC00MSwxOSAr
NDIsMjUgQEAgV2ViUGFnZUluc3BlY3RvclRhcmdldDo6V2ViUGFnZUluc3BlY3RvclRhcmdldChX
ZWJQYWdlJiBwYWdlKQogCiBTdHJpbmcgV2ViUGFnZUluc3BlY3RvclRhcmdldDo6aWRlbnRpZmll
cigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoInBhZ2UtIiwgbV9wYWdlLmlkZW50
aWZpZXIoKS50b1VJbnQ2NCgpKTsKKyAgICByZXR1cm4gdG9UYXJnZXRJRChtX3BhZ2UuaWRlbnRp
ZmllcigpKTsKIH0KIAotdm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojpjb25uZWN0KEluc3Bl
Y3Rvcjo6RnJvbnRlbmRDaGFubmVsJiBjaGFubmVsKQordm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0Ojpjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSBj
b25uZWN0aW9uVHlwZSkKIHsKKyAgICBpZiAobV9jaGFubmVsKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9jaGFubmVsID0gbWFrZVVuaXF1ZTxXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRD
aGFubmVsPihtX3BhZ2UsIGlkZW50aWZpZXIoKSwgY29ubmVjdGlvblR5cGUpOwogICAgIGlmICht
X3BhZ2UuY29yZVBhZ2UoKSkKLSAgICAgICAgbV9wYWdlLmNvcmVQYWdlKCktPmluc3BlY3RvckNv
bnRyb2xsZXIoKS5jb25uZWN0RnJvbnRlbmQoY2hhbm5lbCk7CisgICAgICAgIG1fcGFnZS5jb3Jl
UGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuY29ubmVjdEZyb250ZW5kKCptX2NoYW5uZWwp
OwogfQogCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OmRpc2Nvbm5lY3QoSW5zcGVjdG9y
OjpGcm9udGVuZENoYW5uZWwmIGNoYW5uZWwpCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6
OmRpc2Nvbm5lY3QoKQogeworICAgIGlmICghbV9jaGFubmVsKQorICAgICAgICByZXR1cm47CiAg
ICAgaWYgKG1fcGFnZS5jb3JlUGFnZSgpKQotICAgICAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpLmRpc2Nvbm5lY3RGcm9udGVuZChjaGFubmVsKTsKKyAgICAgICAg
bV9wYWdlLmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5kaXNjb25uZWN0RnJvbnRl
bmQoKm1fY2hhbm5lbCk7CisgICAgbV9jaGFubmVsLnJlc2V0KCk7CiB9CiAKIHZvaWQgV2ViUGFn
ZUluc3BlY3RvclRhcmdldDo6c2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoY29uc3QgU3RyaW5n
JiBtZXNzYWdlKQpAQCAtNjIsNCArNjksMTAgQEAgdm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
OjpzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAgICAg
ICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZGlzcGF0Y2hNZXNz
YWdlRnJvbUZyb250ZW5kKG1lc3NhZ2UpOwogfQogCitTdHJpbmcgV2ViUGFnZUluc3BlY3RvclRh
cmdldDo6dG9UYXJnZXRJRChXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBwYWdlSUQpCit7CisgICAg
cmV0dXJuIG1ha2VTdHJpbmcoInBhZ2UtIiwgcGFnZUlELnRvVUludDY0KCkpOworfQorCisKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldC5oCmluZGV4IGI3MGUzMWM4Yjg3NzBj
NGJmMWVjYjQ1ODhlYmYyNjc1YjNiOWY0NjQuLjZjYmQ3ZmFkNWZmOTFhZmQ4NThkYTM0NmFkYmZl
ZWQ2NDI0YjBiMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmgKQEAgLTI2LDI5ICsyNiwzNCBAQAogI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JUYXJnZXQuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VJZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJQYWdlOworY2xhc3Mg
V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbDsKIAogY2xhc3MgV2ViUGFnZUlu
c3BlY3RvclRhcmdldCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldCB7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
V2ViUGFnZUluc3BlY3RvclRhcmdldCk7CiBwdWJsaWM6Ci0gICAgV2ViUGFnZUluc3BlY3RvclRh
cmdldChXZWJQYWdlJik7CisgICAgZXhwbGljaXQgV2ViUGFnZUluc3BlY3RvclRhcmdldChXZWJQ
YWdlJik7CiAgICAgfldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQoKSA9IGRlZmF1bHQ7CiAKICAgICBJ
bnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZTo6UGFnZTsgfQogCiAgICAgU3RyaW5nIGlk
ZW50aWZpZXIoKSBjb25zdCBmaW5hbDsKIAotICAgIHZvaWQgY29ubmVjdChJbnNwZWN0b3I6OkZy
b250ZW5kQ2hhbm5lbCYpOwotICAgIHZvaWQgZGlzY29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5k
Q2hhbm5lbCYpOwotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoY29uc3QgU3Ry
aW5nJik7CisgICAgdm9pZCBjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25u
ZWN0aW9uVHlwZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaXNjb25uZWN0KCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmKSBvdmVycmlk
ZTsKKworICAgIHN0YXRpYyBTdHJpbmcgdG9UYXJnZXRJRChXZWJDb3JlOjpQYWdlSWRlbnRpZmll
cik7CiAKIHByaXZhdGU6CiAgICAgV2ViUGFnZSYgbV9wYWdlOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsPiBtX2NoYW5uZWw7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9s
bGVyLmNwcAppbmRleCA1MjU0ODk2NzNkNjZhMmU0YTdmZDMyZjM2NDg1MzRjZTNlZGVlYzQ3Li5j
ZGE0ZjFlOGQzYzU3NTM2MTYyYWEzOTBlZDc0YjY4MWM4OTEzNDBlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJv
bGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUlu
c3BlY3RvclRhcmdldENvbnRyb2xsZXIuY3BwCkBAIC01OCw3ICs1OCw2IEBAIHZvaWQgV2ViUGFn
ZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6OnJlbW92ZVRhcmdldChJbnNwZWN0b3I6Okluc3Bl
Y3RvclRhcmdldCYKICAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEZXN0
cm95SW5zcGVjdG9yVGFyZ2V0KHRhcmdldC5pZGVudGlmaWVyKCkpKTsKIAogICAgIG1fdGFyZ2V0
cy5yZW1vdmUodGFyZ2V0LmlkZW50aWZpZXIoKSk7Ci0gICAgbV90YXJnZXRGcm9udGVuZENoYW5u
ZWxzLnJlbW92ZSh0YXJnZXQuaWRlbnRpZmllcigpKTsKIH0KIAogdm9pZCBXZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0Q29udHJvbGxlcjo6Y29ubmVjdEluc3BlY3Rvcihjb25zdCBTdHJpbmcmIHRhcmdl
dElkLCBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUgY29ubmVjdGlv
blR5cGUpCkBAIC02NywxMyArNjYsNyBAQCB2b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250
cm9sbGVyOjpjb25uZWN0SW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsCiAgICAgaWYg
KCF0YXJnZXQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxXZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0RnJvbnRlbmRDaGFubmVsPiBjaGFubmVsID0gbV90YXJnZXRGcm9udGVuZENoYW5uZWxz
LmdldCh0YXJnZXRJZCk7Ci0gICAgaWYgKCFjaGFubmVsKSB7Ci0gICAgICAgIGNoYW5uZWwgPSBX
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsOjpjcmVhdGUoKnRoaXMsIHRhcmdl
dElkLCBjb25uZWN0aW9uVHlwZSk7Ci0gICAgICAgIG1fdGFyZ2V0RnJvbnRlbmRDaGFubmVscy5z
ZXQodGFyZ2V0LT5pZGVudGlmaWVyKCksIGNoYW5uZWwpOwotICAgIH0KLQotICAgIHRhcmdldC0+
Y29ubmVjdCgqY2hhbm5lbC5nZXQoKSk7CisgICAgdGFyZ2V0LT5jb25uZWN0KGNvbm5lY3Rpb25U
eXBlKTsKIH0KIAogdm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6ZGlzY29u
bmVjdEluc3BlY3Rvcihjb25zdCBTdHJpbmcmIHRhcmdldElkKQpAQCAtODIsMTEgKzc1LDcgQEAg
dm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6ZGlzY29ubmVjdEluc3BlY3Rv
cihjb25zdCBTdHJpbmcmIHRhcmdldEkKICAgICBpZiAoIXRhcmdldCkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgUmVmUHRyPFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw+IGNo
YW5uZWwgPSBtX3RhcmdldEZyb250ZW5kQ2hhbm5lbHMudGFrZSh0YXJnZXRJZCk7Ci0gICAgaWYg
KCFjaGFubmVsKQotICAgICAgICByZXR1cm47Ci0KLSAgICB0YXJnZXQtPmRpc2Nvbm5lY3QoKmNo
YW5uZWwuZ2V0KCkpOworICAgIHRhcmdldC0+ZGlzY29ubmVjdCgpOwogfQogCiB2b2lkIFdlYlBh
Z2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChj
b25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCkBAIC05OCw5ICs4
Nyw0IEBAIHZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6OnNlbmRNZXNzYWdl
VG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYKICAgICB0YXJnZXQtPnNlbmRNZXNzYWdlVG9U
YXJnZXRCYWNrZW5kKG1lc3NhZ2UpOwogfQogCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRD
b250cm9sbGVyOjpzZW5kTWVzc2FnZVRvVGFyZ2V0RnJvbnRlbmQoY29uc3QgU3RyaW5nJiB0YXJn
ZXRJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIG1fcGFnZS5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OlNlbmRNZXNzYWdlVG9JbnNwZWN0b3JGcm9udGVuZCh0YXJnZXRJZCwg
bWVzc2FnZSkpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9s
bGVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0Q29udHJvbGxlci5oCmluZGV4IDNlOTJiN2E5ZGE5ZTU2MDllNjAxNjYzOWMwOWI3M2Ni
NTk2ZjhhZjUuLjdjOTMxZGFkMWM5ODAwZjAzZDczZDRhN2NhMjU4OGRkMDI4YThmMjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JU
YXJnZXRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuaApAQCAtMjYsNyArMjYsNiBAQAogI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmgiCi0jaW5jbHVk
ZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5oIgogI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTUwLDEz
ICs0OSwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb25uZWN0SW5zcGVjdG9yKGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSk7
CiAgICAgdm9pZCBkaXNjb25uZWN0SW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpOwog
ICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoY29uc3QgU3RyaW5nJiB0YXJnZXRJ
ZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9UYXJnZXRG
cm9udGVuZChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwog
CiBwcml2YXRlOgogICAgIFdlYlBhZ2UmIG1fcGFnZTsKICAgICBXZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0IG1fcGFnZVRhcmdldDsKICAgICBIYXNoTWFwPFN0cmluZywgSW5zcGVjdG9yOjpJbnNwZWN0
b3JUYXJnZXQqPiBtX3RhcmdldHM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxXZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsPj4gbV90YXJnZXRGcm9udGVuZENoYW5uZWxz
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVs
LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JU
YXJnZXRGcm9udGVuZENoYW5uZWwuY3BwCmluZGV4IDhkNzg4MDc4MmEyOWIxNzBjZTY1YWZjNzAz
NzdkOGJkNTA2OTQzNTguLmUxYjVmNzEzNzMzYTA5NTI1MjEyMmYwYTM4MDFmODJjOGM2MGQzZjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuY3BwCkBA
IC0yNiwxNyArMjYsMTMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmgiCiAKLSNpbmNsdWRlICJXZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRl
ICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotUmVmPFdl
YlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw+IFdlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRGcm9udGVuZENoYW5uZWw6OmNyZWF0ZShXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxl
ciYgdGFyZ2V0Q29udHJvbGxlciwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpG
cm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlIGNvbm5lY3Rpb25UeXBlKQotewotICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwo
dGFyZ2V0Q29udHJvbGxlciwgdGFyZ2V0SWQsIGNvbm5lY3Rpb25UeXBlKSk7Ci19Ci0KLVdlYlBh
Z2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw6OldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRG
cm9udGVuZENoYW5uZWwoV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXImIHRhcmdldENv
bnRyb2xsZXIsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFu
bmVsOjpDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSkKLSAgICA6IG1fdGFyZ2V0Q29udHJv
bGxlcih0YXJnZXRDb250cm9sbGVyKQorV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hh
bm5lbDo6V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbChXZWJQYWdlJiBwYWdl
LCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29u
bmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUpCisgICAgOiBtX3BhZ2UocGFnZSkKICAgICAsIG1f
dGFyZ2V0SWQodGFyZ2V0SWQpCiAgICAgLCBtX2Nvbm5lY3Rpb25UeXBlKGNvbm5lY3Rpb25UeXBl
KQogewpAQCAtNDQsNyArNDAsNyBAQCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFu
bmVsOjpXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsKFdlYgogCiB2b2lkIFdl
YlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw6OnNlbmRNZXNzYWdlVG9Gcm9udGVu
ZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgbV90YXJnZXRDb250cm9sbGVyLnNlbmRN
ZXNzYWdlVG9UYXJnZXRGcm9udGVuZChtX3RhcmdldElkLCBtZXNzYWdlKTsKKyAgICBtX3BhZ2Uu
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZW5kTWVzc2FnZVRvSW5zcGVjdG9yRnJvbnRl
bmQobV90YXJnZXRJZCwgbWVzc2FnZSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0
b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaAppbmRleCA3NmFmNjJh
OTdiZWY0ODhiNjQ0ZTVkNjE4ZDQzOWVjOWE0MmYyMmRhLi45NzYwOThkYTRkN2JlNTYzZjFiOTMx
MTI2MTk3ZTQyZjA4ZDFjYzE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmgKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250
ZW5kQ2hhbm5lbC5oCkBAIC0zMSwyMiArMzEsMjAgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAK
LWNsYXNzIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOworY2xhc3MgV2ViUGFnZTsK
IAotY2xhc3MgV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbCBmaW5hbCA6IHB1
YmxpYyBSZWZDb3VudGVkPFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw+LCBw
dWJsaWMgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwgeworY2xhc3MgV2ViUGFnZUluc3BlY3Rv
clRhcmdldEZyb250ZW5kQ2hhbm5lbCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6OkZyb250ZW5k
Q2hhbm5lbCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbCk7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsPiBj
cmVhdGUoV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXImLCBjb25zdCBTdHJpbmcmIHRh
cmdldElkLCBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUpOwotICAg
IHZpcnR1YWwgfldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwoKSA9IGRlZmF1
bHQ7CisgICAgV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbChXZWJQYWdlJiwg
Y29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5l
Y3Rpb25UeXBlKTsKKyAgICB+V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbCgp
IG92ZXJyaWRlID0gZGVmYXVsdDsKIAogcHJpdmF0ZToKLSAgICBXZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0RnJvbnRlbmRDaGFubmVsKFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyJiwgY29u
c3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rp
b25UeXBlKTsKLQogICAgIENvbm5lY3Rpb25UeXBlIGNvbm5lY3Rpb25UeXBlKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9jb25uZWN0aW9uVHlwZTsgfQogICAgIHZvaWQgc2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgb3ZlcnJpZGU7CiAKLXByaXZhdGU6Ci0g
ICAgV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXImIG1fdGFyZ2V0Q29udHJvbGxlcjsK
KyAgICBXZWJQYWdlJiBtX3BhZ2U7CiAgICAgU3RyaW5nIG1fdGFyZ2V0SWQ7CiAgICAgSW5zcGVj
dG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlIG1fY29ubmVjdGlvblR5cGUgeyBJ
bnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGU6OlJlbW90ZSB9OwogfTsK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxOGZkZTNkN2E1MDhhYTZlMTdlNGNhYWY3ZjZiN2EwYmU2NWFhZDNjLi41ZDkxMTYx
NTg1NmRmYjE3ZjNiODU0OTcxMmVjMjY5MDZiOWFmMWM1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAK
KzIwMTktMTAtMDEgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgV2ViIEluc3BlY3Rvcjogbm90aWZ5IGluc3BlY3RvciB3aGVuIHByb3Zpc2lvbmFsIHBh
Z2UgaXMgY3JlYXRlZCwgY29tbWl0dGVkIGFuZCBkZXN0cm95ZWQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjcwNAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIG5ldyB0ZXN0IGZvciBUYXJnZXQg
ZXZlbnRzIGR1cmluZyBQU09OLiBJdCBpcyBvbmx5IGVuYWJsZWQgb24gV2ViS2l0MiBhcyB0aGVy
ZSBpcworICAgICAgICBubyBUYXJnZXQgYWdlbnQgaW4gV2ViS2l0MS4KKworICAgICAgICAqIFRl
c3RFeHBlY3RhdGlvbnM6CisgICAgICAgICogaHR0cC90ZXN0cy9pbnNwZWN0b3IvdGFyZ2V0L3Rh
cmdldC1ldmVudHMtZm9yLXByb3Zpc2lvbmFsLXBhZ2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rvci90YXJnZXQvdGFyZ2V0LWV2ZW50cy1mb3ItcHJv
dmlzaW9uYWwtcGFnZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93azIvVGVzdEV4
cGVjdGF0aW9uczoKKwogMjAxOS0xMC0wOCAgS2F0ZSBDaGVuZXkgIDxrYXRoZXJpbmVfY2hlbmV5
QGFwcGxlLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQgVGVsZW1ldHJ5IGFuZCBEdW1waW5nIFJv
dXRpbmVzIGZvciBTUUxpdGUgYmFja2VuZCAoMTk1MDg4KQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXgg
MDFmYzllMjEyNjllNmFiYzViNWY1MzIxNzEwN2UzZDg0MmVhMDNkOC4uYTkxMzUwMWZiMjFmYTYz
YzA4YTI2ZjgxMmRmZTc3NTM4NTYwOTkwNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvVGVzdEV4
cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCkBAIC05MTIsNiAr
OTEyLDkgQEAgd2Via2l0Lm9yZy9iLzE2MTk1MSBbIERlYnVnIF0gaW5zcGVjdG9yL2RlYnVnZ2Vy
L3BhdXNlZC1zY29wZXMuaHRtbCBbIFNraXAgXQogaW5zcGVjdG9yL2RlYnVnZ2VyL2V2YWx1YXRl
T25DYWxsRnJhbWUtZW11bGF0ZVVzZXJHZXN0dXJlLXVzZXJJc0ludGVyYWN0aW5nLmh0bWwgWyBT
a2lwIF0KIGluc3BlY3Rvci9ydW50aW1lL2V2YWx1YXRlLWVtdWxhdGVVc2VyR2VzdHVyZS11c2Vy
SXNJbnRlcmFjdGluZy5odG1sIFsgU2tpcCBdCiAKKyMgVGFyZ2V0IGRvbWFpbiBpcyBvbmx5IHBy
ZXNlbnQgaW4gV0syLgoraHR0cC90ZXN0cy9pbnNwZWN0b3IvdGFyZ2V0IFsgU2tpcCBdCisKICMg
VGhlc2UgY29uZm9ybWFuY2UgdGVzdHMgYXJlIG5vIGxvbmdlciBpbiBzeW5jIHdpdGggdGhlIGxh
dGVzdCBzcGVjaWZpY2F0aW9uCiAjIGFuZCBleHBlY3QgY29tcGFyZURvY3VtZW50UG9zaXRpb24o
KSB0byByZXR1cm46CiAjIERPQ1VNRU5UX1BPU0lUSU9OX0lNUExFTUVOVEFUSU9OX1NQRUNJRklD
IHwgRE9DVU1FTlRfUE9TSVRJT05fRElTQ09OTkVDVEVECmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2luc3BlY3Rvci90YXJnZXQvdGFyZ2V0LWV2ZW50cy1mb3ItcHJvdmlzaW9u
YWwtcGFnZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci90
YXJnZXQvdGFyZ2V0LWV2ZW50cy1mb3ItcHJvdmlzaW9uYWwtcGFnZS1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNDMxNzQ3Yjc0ZDExMDUxMmM2ODZhOWZkN2MxNGVhOWEzYzg4ZGM3ZgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL3RhcmdldC90YXJn
ZXQtZXZlbnRzLWZvci1wcm92aXNpb25hbC1wYWdlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE5
IEBACitUZXN0IHRoYXQgY3Jvc3MgZG9tYWluIG5hdmlnYXRpb24gcmVzdWx0cyBpbiB0aGUgZm9s
bG93aW5nIHNlcXVlbmNlIG9mIGV2ZW50cyBpbiBUYXJnZXQgZG9tYWluOiAKKzEuIFRhcmdldC50
YXJnZXRDcmVhdGVkIGZvciBwcm92aXNpb25hbCBwYWdlLiAKKzIuIFRhcmdldC5kaWRDb21taXRQ
cm92aXNpb25hbFRhcmdldCB3aGVuIHByb3Zpc2lvbmFsIGxvYWQgaXMgY29tbWl0dGVkLiAKKzMu
IFRhcmdldC50YXJnZXREZXN0cm95ZWQgZm9yIHRoZSBvbGQgdGFyZ2V0IGFmdGVyIHRoZSBuYXZp
Z2F0aW9uIHJlcXVlc3QgaXMgY29tbWl0dGVkLgorCitQQVNTOiBTaG91bGQgcmVjZWl2ZSB0YXJn
ZXREZXN0cm95ZWQgZXZlbnQuCitQQVNTOiBEZXN0cm95ZWQgdGFyZ2V0IHNob3VsZCBiZSBwcmV2
aW91cyB0YXJnZXQuCisKKz09IFJ1bm5pbmcgdGVzdCBzdWl0ZTogVGFyZ2V0LlBTT04KKy0tIFJ1
bm5pbmcgdGVzdCBjYXNlOiBQcm92aXNpb25hbFBhZ2VUYXJnZXQKK1BBU1M6IFNob3VsZCByZWNl
aXZlIHRhcmdldENyZWF0ZWQgZXZlbnQuCitQQVNTOiBUYXJnZXQgc2hvdWxkIGJlIHByb3Zpc2lv
bmFsLgorUEFTUzogUHJldmlvdXMgdGFyZ2V0IGlkIHNob3VsZCBiZSBpZCBvZiB0aGUgY3VycmVu
dCB0YXJnZXQuCitQQVNTOiBTaG91bGQgcmVjZWl2ZSBkaWRDb21taXRQcm92aXNpb25hbFRhcmdl
dCBldmVudC4KK1BBU1M6IFByZXZpb3VzIHRhcmdldCBzaG91bGQgYmUgdGhlIGN1cnJlbnQgb25l
LgorUEFTUzogQ29tbWl0dGVkIHRhcmdldCBzaG91bGQgbWF0Y2ggcHJvdmlzaW9uYWwgdGFyZ2V0
LgorUEFTUzogU2hvdWxkIHJlY2VpdmUgdGFyZ2V0RGVzdHJveWVkIGV2ZW50LgorUEFTUzogRGVz
dHJveWVkIHRhcmdldCBzaG91bGQgYmUgcHJldmlvdXMgdGFyZ2V0LgorCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci90YXJnZXQvdGFyZ2V0LWV2ZW50cy1mb3It
cHJvdmlzaW9uYWwtcGFnZS5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3Iv
dGFyZ2V0L3RhcmdldC1ldmVudHMtZm9yLXByb3Zpc2lvbmFsLXBhZ2UuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45MzdjMWY2OTMxOTNmNDllMTUwYTliN2ExZTk3NDYxN2ZmNzg0NGMzCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvdGFyZ2V0L3RhcmdldC1ldmVu
dHMtZm9yLXByb3Zpc2lvbmFsLXBhZ2UuaHRtbApAQCAtMCwwICsxLDYzIEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cis8c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citm
dW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBsZXQgc3VpdGUgPSBJbnNwZWN0b3JUZXN0LmNyZWF0ZUFz
eW5jU3VpdGUoIlRhcmdldC5QU09OIik7CisKKyAgICBzdWl0ZS5hZGRUZXN0Q2FzZSh7CisgICAg
ICAgIG5hbWU6ICJQcm92aXNpb25hbFBhZ2VUYXJnZXQiLAorICAgICAgICBkZXNjcmlwdGlvbjog
IkNoZWNrIHRoYXQgYSBuZXcgdGFyZ2V0IHdpbGwgYmUgY3JlYXRlZCBmb3IgcHJvdmlzaW9uYWwg
cGFnZS4iLAorICAgICAgICB0ZXN0KHJlc29sdmUsIHJlamVjdCkgeworICAgICAgICAgICAgY29u
c3QgbWFpblRhcmdldElkID0gV0kubWFpblRhcmdldC5pZGVudGlmaWVyOworICAgICAgICAgICAg
bGV0IG5ld1RhcmdldElkOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobWFpblRh
cmdldElkKTsKKyAgICAgICAgICAgIFRhcmdldEFnZW50LmRpc3BhdGNoZXIgPSBuZXcgUHJveHko
VGFyZ2V0QWdlbnQuZGlzcGF0Y2hlciwgeworICAgICAgICAgICAgICAgIGdldCh0YXJnZXQsIHBy
b3AsIHJlY2VpdmVyKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wID09PSAidGFyZ2V0
Q3JlYXRlZCIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAodGFyZ2V0SW5mbykg
PT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1RhcmdldElkID0gdGFyZ2V0SW5m
by50YXJnZXRJZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LnBh
c3MoYFNob3VsZCByZWNlaXZlICR7cHJvcH0gZXZlbnQuYCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSW5zcGVjdG9yVGVzdC5leHBlY3RUcnVlKHRhcmdldEluZm8uaXNQcm92aXNpb25h
bCwgIlRhcmdldCBzaG91bGQgYmUgcHJvdmlzaW9uYWwuIik7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSW5zcGVjdG9yVGVzdC5leHBlY3RFcXVhbCh0YXJnZXRJbmZvLnByZXZpb3VzVGFy
Z2V0SWQsIG1haW5UYXJnZXRJZCwgIlByZXZpb3VzIHRhcmdldCBpZCBzaG91bGQgYmUgaWQgb2Yg
dGhlIGN1cnJlbnQgdGFyZ2V0LiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0YXJnZXRbcHJvcF0uY2FsbChyZWNlaXZlciwgdGFyZ2V0SW5mbyk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGlmIChwcm9wID09PSAiZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQiKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gKHRhcmdldEluZm8pID0+IHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBJbnNwZWN0b3JUZXN0LnBhc3MoYFNob3VsZCByZWNlaXZlICR7cHJvcH0gZXZl
bnQuYCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5leHBlY3RF
cXVhbCh0YXJnZXRJbmZvLnByZXZpb3VzVGFyZ2V0SWQsIG1haW5UYXJnZXRJZCwgIlByZXZpb3Vz
IHRhcmdldCBzaG91bGQgYmUgdGhlIGN1cnJlbnQgb25lLiIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0RXF1YWwodGFyZ2V0SW5mby50YXJnZXRJZCwg
bmV3VGFyZ2V0SWQsICJDb21taXR0ZWQgdGFyZ2V0IHNob3VsZCBtYXRjaCBwcm92aXNpb25hbCB0
YXJnZXQuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldFtwcm9w
XS5jYWxsKHJlY2VpdmVyLCB0YXJnZXRJbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHByb3AgPT09
ICJ0YXJnZXREZXN0cm95ZWQiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRh
cmdldElkKSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5w
YXNzKGBTaG91bGQgcmVjZWl2ZSAke3Byb3B9IGV2ZW50LmApOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0RXF1YWwodGFyZ2V0SWQsIG1haW5UYXJnZXRJ
ZCwgIkRlc3Ryb3llZCB0YXJnZXQgc2hvdWxkIGJlIHByZXZpb3VzIHRhcmdldC4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRhcmdldFtwcm9wXS5jYWxsKHJlY2VpdmVyLCB0YXJnZXRJZCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0YXJnZXRbcHJvcF07CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICBSdW50aW1lQWdlbnQuZXZhbHVhdGUoImxvY2F0aW9uLmhv
c3RuYW1lPSdsb2NhbGhvc3QnIik7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIHN1aXRlLnJ1
blRlc3RDYXNlc0FuZEZpbmlzaCgpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxv
YWQ9InJ1blRlc3QoKSI+Cis8cD5UZXN0IHRoYXQgY3Jvc3MgZG9tYWluIG5hdmlnYXRpb24gcmVz
dWx0cyBpbiB0aGUgZm9sbG93aW5nIHNlcXVlbmNlIG9mIGV2ZW50cyBpbiBUYXJnZXQgZG9tYWlu
OgorPGJyPjEuIFRhcmdldC50YXJnZXRDcmVhdGVkIGZvciBwcm92aXNpb25hbCBwYWdlLgorPGJy
PjIuIFRhcmdldC5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldCB3aGVuIHByb3Zpc2lvbmFsIGxv
YWQgaXMgY29tbWl0dGVkLgorPGJyPjMuIFRhcmdldC50YXJnZXREZXN0cm95ZWQgZm9yIHRoZSBv
bGQgdGFyZ2V0IGFmdGVyIHRoZSBuYXZpZ2F0aW9uIHJlcXVlc3QgaXMgY29tbWl0dGVkLgorPC9w
PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2sy
L1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0
aW9ucwppbmRleCAwMmQ2ODk4MWI1N2UxZmNlMDkwMzIyYmZmM2U0YzIwM2FkNDkyYTg3Li43ZDRm
YjY2MDUyZjZiZDkzNzk1YTJkMTIwNTUyMWQwZTI2Y2RhYzczIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9ucwpAQCAtNzY0LDYgKzc2NCw5IEBAIGh0dHAvdGVzdHMv
YWRDbGlja0F0dHJpYnV0aW9uIFsgUGFzcyBdCiBpbnNwZWN0b3IvZGVidWdnZXIvZXZhbHVhdGVP
bkNhbGxGcmFtZS1lbXVsYXRlVXNlckdlc3R1cmUtdXNlcklzSW50ZXJhY3RpbmcuaHRtbCBbIFBh
c3MgXQogaW5zcGVjdG9yL3J1bnRpbWUvZXZhbHVhdGUtZW11bGF0ZVVzZXJHZXN0dXJlLXVzZXJJ
c0ludGVyYWN0aW5nLmh0bWwgWyBQYXNzIF0KIAorIyBUYXJnZXQgZG9tYWluIGlzIG9ubHkgcHJl
c2VudCBpbiBXZWJLaXQyLgoraHR0cC90ZXN0cy9pbnNwZWN0b3IvdGFyZ2V0IFsgUGFzcyBdCisK
ICMjIyBFTkQgT0YgKDUpIFByb2dyZXNzaW9ucywgZXhwZWN0ZWQgc3VjY2Vzc2VzIHRoYXQgYXJl
IGV4cGVjdGVkIGZhaWx1cmVzIGluIFdlYktpdDEuCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380548</attachid>
            <date>2019-10-09 11:45:44 -0700</date>
            <delta_ts>2019-10-14 11:17:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202704-20191009114544.patch</filename>
            <type>text/plain</type>
            <size>84302</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwODY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
ZWJlNTEzN2E5YWU3Zjg3OGM0NmVlNzFkNzA2YzliNmFiYWYwMjE0Li5kZjBkNWI4MjFmNzkwODY5
ZDhjMzFhN2Y4NzAzZDNkNmMxN2JhNmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOCBAQAorMjAxOS0wOS0yNyAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBub3RpZnkgaW5zcGVjdG9yIHdoZW4gcHJv
dmlzaW9uYWwgcGFnZSBpcyBjcmVhdGVkLCBjb21taXR0ZWQgYW5kIGRlc3Ryb3llZAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyNzA0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yVGFyZ2V0Lmg6IGNoYW5nZWQgSW5zcGVjdG9yVGFyZ2V0IHRvIG5vdCByZXF1aXJlIEZy
b250ZW5kQ2hhbm5lbCBhcworICAgICAgICBhbGwgbWVzc2FnZXMgYXJlIHJvdXRlZCBieSBtZWFu
cyBvZiB0aGUgb3duaW5nIEluc3BlY3RvclRhcmdldEFnZW50LgorICAgICAgICAqIGluc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JUYXJnZXRBZ2VudDo6SW5zcGVjdG9yVGFyZ2V0QWdlbnQpOgorICAgICAgICAoSW5z
cGVjdG9yOjpidWlsZFRhcmdldEluZm9PYmplY3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JUYXJnZXRBZ2VudDo6dGFyZ2V0Q3JlYXRlZCk6CisgICAgICAgIChJbnNwZWN0b3I6Oklu
c3BlY3RvclRhcmdldEFnZW50Ojp0YXJnZXREZXN0cm95ZWQpOgorICAgICAgICAoSW5zcGVjdG9y
OjpJbnNwZWN0b3JUYXJnZXRBZ2VudDo6ZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQpOiB0aGlz
IG1ldGhvZCBpcyB1c2VkIHRvCisgICAgICAgIG5vdGlmeSBmcm9udGVuZCB0aGF0IGNvcnJlc3Bv
bmRpbmcgcHJvdmlzaW9uYWwgdGFyZ2V0IGhhcyBjb21taXR0ZWQgYW5kIHJlcGxhY2VkIHByZXZp
b3VzCisgICAgICAgIHRhcmdldC4KKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0
QWdlbnQ6OmNvbm5lY3Rpb25UeXBlIGNvbnN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVj
dG9yVGFyZ2V0QWdlbnQ6OmNvbm5lY3RUb1RhcmdldHMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JUYXJnZXRBZ2VudDo6ZGlzY29ubmVjdEZyb21UYXJnZXRzKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50Lmg6CisgICAgICAgICogaW5zcGVj
dG9yL3Byb3RvY29sL1RhcmdldC5qc29uOiBleHRlbmRlZCBUYXJnZXRJbmZvIHdpdGggcHJvdmlz
aW9uYWwgcGFnZSBkZXRhaWxzIGFuZAorICAgICAgICBhZGRlZCBldmVudCB3aGljaCBpcyBmaXJl
ZCB3aGVuIHByb3Zpc2lvbmFsIHBhZ2UgZ2V0cyBjb21taXR0ZWQuIElmIHByb3Zpc2lvbmFsCisg
ICAgICAgIGxvYWQgZmFpbHMgdGhlcmUgd2lsbCBiZSB0YXJnZXREZXN0cm95ZWQgZXZlbnQgd2l0
aG91dCBjb3JyZXNwb25kaW5nIGNvbW1pdC4KKwogMjAxOS0xMC0wOCAgQWxleGV5IFNodmF5a2Eg
IDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CiAKICAgICAgICAgSlNPTi5wYXJzZSBpbmNvcnJlY3Rs
eSBoYW5kbGVzIGFycmF5IHByb3hpZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhNjE2NmU5YmI1MzQzMzUyYjgy
OGZlMzkxNTY1Zjk2ZjljMDU2NDJlLi5jMWVjOTg4NTAwNzliZmU4OTc5NjUxYjQwYjM2MTYzZGRm
MTc0YTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTktMTAtMDEgIFl1cnkgU2Vt
aWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjog
bm90aWZ5IGluc3BlY3RvciB3aGVuIHByb3Zpc2lvbmFsIHBhZ2UgaXMgY3JlYXRlZCwgY29tbWl0
dGVkIGFuZCBkZXN0cm95ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwMjcwNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRlc3Q6IGh0dHAvdGVzdHMvaW5zcGVjdG9yL3RhcmdldC90YXJnZXQtZXZlbnRz
LWZvci1wcm9pc2lvbmFsLXBhZ2UuaHRtbAorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6
c2V0SXNVbmRlclRlc3QpOiBUaGlzIG1ldGhvZCBtYXkgYmUgY2FsbGVkIHNldmVyYWwgdGltZXMK
KyAgICAgICAgd2hlbiByZWxvYWRpbmcgaW5zcGVjdGVkIHBhZ2Ugd2l0aCBvcGVuZWQgZnJvbnRl
bmQgc28gdGhlIGFzc3VtcHRpb24gdGhhdCB0aGVyZSBhcmUgbm8KKyAgICAgICAgY29ubmVjdGVk
IGZyb250ZW5kcyB3aGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmcm9tIHRlc3RzIGRvZXNuJ3Qg
aG9sZCBhbnltb3JlLgorCiAyMDE5LTEwLTA4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFw
cGxlLmNvbT4KIAogICAgICAgICBDb3B5aW5nIHdoaXRlIHRleHQgZnJvbSBkYXJrIG1vZGUgV2Vi
S2l0IGFwcHMgYW5kIHBhc3RpbmcgaW4gYSBsaWdodCBtb2RlIGFwcCByZXN1bHRzIGluIHdoaXRl
IChpbnZpc2libGUpIHRleHQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCAzYTZjNWY3NThj
N2U0NmFkYjM2NTVmN2M0NmIxMjVkMGQ1MTQyZjkxLi40MTM2NmIxMzc5YjE5NWZmYjY0M2U4ZmEx
ZTE0MzExYzI0ZGQ1NDJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MSBA
QAorMjAxOS0wOS0yNyAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBub3RpZnkgaW5zcGVjdG9yIHdoZW4gcHJvdmlzaW9uYWwg
cGFnZSBpcyBjcmVhdGVkLCBjb21taXR0ZWQgYW5kIGRlc3Ryb3llZAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyNzA0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlZCBmcm9udGVuZCBjb2RlIHRv
IHVuZGVyc3RhbmQgcHJvdmlzaW9uYWwgdGFyZ2V0cy4gRm9yIG5vdyB0aGVyZSBhcmUKKyAgICAg
ICAgbm8gY2hhbmdlcyBmcm9udGVuZCBiZWhhdmlvciwgaXQgd2lsbCB3YWl0IGZvciB0aGUgcHJv
dmlzaW9uYWwgdGFyZ2V0IHRvIGNvbW1pdAorICAgICAgICBhbmQgd2lsbCBub3Qgc2VuZCBhbnkg
Y29tbWFuZHMgdG8gaXQgYmVmb3JlIHRoYXQuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Jh
c2UvTWFpbi5qczogTW92ZWQgYSBidW5jaCBvZiBtZXRob2RzIHNoYXJlZCBiZXR3ZWVuIE1haW4u
anMgYW5kIFRlc3QuanMKKyAgICAgICAgdG8gVGFyZ2V0TWFuYWdlci5qcyB0byBrZWVwIHRoZW0g
aW4gc3luYy4KKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1RhcmdldE1hbmFn
ZXIuanM6CisgICAgICAgIChXSS5UYXJnZXRNYW5hZ2VyKToKKyAgICAgICAgKFdJLlRhcmdldE1h
bmFnZXIucHJvdG90eXBlLnJlbW92ZVRhcmdldCk6CisgICAgICAgIChXSS5UYXJnZXRNYW5hZ2Vy
LnByb3RvdHlwZS5jcmVhdGVNdWx0aXBsZXhpbmdCYWNrZW5kVGFyZ2V0KToKKyAgICAgICAgKFdJ
LlRhcmdldE1hbmFnZXIucHJvdG90eXBlLmNyZWF0ZURpcmVjdEJhY2tlbmRUYXJnZXQpOgorICAg
ICAgICAoV0kuVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUudGFyZ2V0Q3JlYXRlZCk6CisgICAgICAg
IChXSS5UYXJnZXRNYW5hZ2VyLnByb3RvdHlwZS5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldCk6
CisgICAgICAgIChXSS5UYXJnZXRNYW5hZ2VyLnByb3RvdHlwZS50YXJnZXREZXN0cm95ZWQpOgor
ICAgICAgICAoV0kuVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUuZGlzcGF0Y2hNZXNzYWdlRnJvbVRh
cmdldCk6CisgICAgICAgIChXSS5UYXJnZXRNYW5hZ2VyLnByb3RvdHlwZS5fY2hlY2tBbmRIYW5k
bGVQYWdlVGFyZ2V0VHJhbnNpdGlvbik6CisgICAgICAgIChXSS5UYXJnZXRNYW5hZ2VyLnByb3Rv
dHlwZS5fY2hlY2tBbmRIYW5kbGVQYWdlVGFyZ2V0VGVybWluYXRpb24pOgorICAgICAgICAoV0ku
VGFyZ2V0TWFuYWdlci5wcm90b3R5cGUuX2luaXRpYWxpemVCYWNrZW5kVGFyZ2V0KToKKyAgICAg
ICAgKFdJLlRhcmdldE1hbmFnZXIucHJvdG90eXBlLl9pbml0aWFsaXplUGFnZVRhcmdldCk6Cisg
ICAgICAgIChXSS5UYXJnZXRNYW5hZ2VyLnByb3RvdHlwZS5fdHJhbnNpdGlvblBhZ2VUYXJnZXQp
OgorICAgICAgICAoV0kuVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUuX3Rlcm1pbmF0ZVBhZ2VUYXJn
ZXQpOgorICAgICAgICAoV0kuVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUuX3Jlc2V0TWFpbkV4ZWN1
dGlvbkNvbnRleHQpOgorICAgICAgICAoV0kuVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUuX3JlZGly
ZWN0R2xvYmFsQWdlbnRzVG9Db25uZWN0aW9uKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1By
b3RvY29sL0Nvbm5lY3Rpb24uanM6CisgICAgICAgIChJbnNwZWN0b3JCYWNrZW5kLldvcmtlckNv
bm5lY3Rpb24uc2VuZE1lc3NhZ2VUb0JhY2tlbmQpOgorICAgICAgICAoSW5zcGVjdG9yQmFja2Vu
ZC5Xb3JrZXJDb25uZWN0aW9uKToKKyAgICAgICAgKEluc3BlY3RvckJhY2tlbmQuVGFyZ2V0Q29u
bmVjdGlvbi5zZW5kTWVzc2FnZVRvQmFja2VuZCk6CisgICAgICAgIChJbnNwZWN0b3JCYWNrZW5k
LlRhcmdldENvbm5lY3Rpb24pOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUHJvdG9jb2wvVGFy
Z2V0LmpzOgorICAgICAgICAoV0kuVGFyZ2V0LnByb3RvdHlwZS5kZXN0cm95KTogTWFyayB0YXJn
ZXQgYXMgZGVzdHJveWVkIHRvIGRpc3Rpbmd1aXNoIGV4cGVjdGVkIGNvbW1hbmQgZXJyb3JzIGZy
b20KKyAgICAgICAgZ2VudWluZSBmYWlsdXJlcy4KKworICAgICAgICAoV0kuVGFyZ2V0LnByb3Rv
dHlwZS5pc0Rlc3Ryb3llZCk6CisgICAgICAgICogVXNlckludGVyZmFjZS9Qcm90b2NvbC9UYXJn
ZXRPYnNlcnZlci5qczogU2luY2UgdGhlIGZyb250LWVuZCBkb2Vzbid0CisgICAgICAgIHNlbmQg
Y29tbWFuZHMgdG8gdGhlIHByb3Zpc2lvbmFsIHRhcmdldHMgeWV0LCBpdCBoYXMgdG8gaWdub3Jl
IGFsbCBhY3Rpdml0aWVzCisgICAgICAgIHJlbGF0ZWQgdG8gcHJvdmlzaW9uYWwgcGFnZXMuIEZv
ciB0aGF0IHJlYXNvbiB3ZSBuZWVkIHR3byBzZXRzIHRvIGtlZXAgdHJhY2sgb2YKKyAgICAgICAg
LSBwcm92aXNpb25hbCBwYWdlcyB0aGF0IHdlcmUgZGVzdHJveWVkIGFuZCBuZXZlciBjb21taXR0
ZWQKKyAgICAgICAgLSBvbGQgcGFnZXMgd2hpY2ggd2VyZSByZXBsYWNlZCBieSBjb21taXR0ZWQg
cGFnZSBhbmQgZm9yIHdoaWNoIGZvbGxvd2luZyB0YXJnZXREZXN0cm95ZWQKKyAgICAgICAgZXZl
bnQgc2hvdWxkIGJlIGlnbm9yZWQKKyAgICAgICAgQmV0dGVyIHN1cHBvcnQgZm9yIHByb3Zpc2lv
bmFsIHRhcmdldHMgd2lsbCBiZSBhZGRlZCB0byBmcm9udGVuZCBpbiBhIHNlcGFyYXRlIGNoYW5n
ZS4KKyAgICAgICAgKFdJLlRhcmdldE9ic2VydmVyKToKKyAgICAgICAgKFdJLlRhcmdldE9ic2Vy
dmVyLnByb3RvdHlwZS50YXJnZXRDcmVhdGVkKToKKyAgICAgICAgKFdJLlRhcmdldE9ic2VydmVy
LnByb3RvdHlwZS5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldCk6IEZvciBub3cgY29udmVydCB0
aGUgZXZlbnQgaW50byBhIHN1YnNlcXVlbmNlCisgICAgICAgIG9mIHRhcmdldERlc3Ryb3llZC90
YXJnZXRDcmVhdGVkIGV2ZW50cyB3aGljaCBtYXRjaGVzIHByZXZpb3VzIGJlaGF2aW9yLgorCisg
ICAgICAgIChXSS5UYXJnZXRPYnNlcnZlci5wcm90b3R5cGUudGFyZ2V0RGVzdHJveWVkKToKKyAg
ICAgICAgKFdJLlRhcmdldE9ic2VydmVyLnByb3RvdHlwZS5kaXNwYXRjaE1lc3NhZ2VGcm9tVGFy
Z2V0KToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Rlc3QvVGVzdC5qczoKKyAgICAgICAgKFdJ
LnRyYW5zaXRpb25QYWdlVGFyZ2V0KToKKyAgICAgICAgKFdJLnRlcm1pbmF0ZVBhZ2VUYXJnZXQp
OgorCiAyMDE5LTEwLTA4ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBDYW52YXM6IG1ha2UgaXQgbW9yZSBvYnZpb3VzIHRoYXQgdGhl
IGNhcmRzIGluIHRoZSBvdmVydmlldyBhcmUgY2xpY2thYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGQ1NDY3ODlk
ODY5MjcxYWI5MzQxMWQ3N2ExMWQxMzk0NTk2OThkNWUuLjAwZTRmNzk2ZGY4ZjlkNzVjNGVlYjVk
ZjQwOWU3M2MyM2FkM2E5OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODIgQEAKKzIwMTktMDktMjcg
IFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIElu
c3BlY3Rvcjogbm90aWZ5IGluc3BlY3RvciB3aGVuIHByb3Zpc2lvbmFsIHBhZ2UgaXMgY3JlYXRl
ZCwgY29tbWl0dGVkIGFuZCBkZXN0cm95ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwMjcwNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRhcmdldC50YXJnZXRDcmVhdGVkIGV2ZW50IGlzIG5vdyBnZW5l
cmF0ZWQgZm9yIHByb3Zpc2lvbmFsIHBhZ2VzIGFzIHdlbGwgYXMgZm9yIHJlZ3VsYXIKKyAgICAg
ICAgb25lcy4gVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCB0b3dhcmQgcmVhdHRhY2hpbmcgaW5zcGVj
dG9yIGVhcmxpZXIgZHVyaW5nIFBTT04uIEluIHRoZSBmdXR1cmUKKyAgICAgICAgaWYgZGVidWdn
aW5nIGlzIGluIHByb2dyZXNzIHRoZSBwcm92aXNpb25hbCB0YXJnZXQgKHBhZ2UpIHdpbGwgYmUg
cGF1c2VkIHVudGlsIGEgc2lnbmFsIGZyb20KKyAgICAgICAgaW5zcGVjdG9yIGZyb250ZW5kLiBU
aGlzIHdpbGwgZW5hYmxlIHRoZSBmcm9udGVuZCBjb25maWd1cmUgYWxsIGFnZW50cyBiZWZvcmUg
bmF2aWdhdGlvbiBzdGFydHMuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuY3BwOgorICAgICAgICAoQVBJ
OjpXZWJBdXRoZW50aWNhdGlvblBhbmVsOjpXZWJBdXRoZW50aWNhdGlvblBhbmVsKTogQWRkZWQg
ZXhwbGljaXQgbmFtZXNwYWNlIHNwZWNpZmllcgorICAgICAgICB0byB0aGUgY29uc3RydWN0b3In
cyBhcmd1bWVudCBhcyBvdGhlcndpc2UgY29tcGlsYXRpb24gZmFpbHMgZHVlIHRvIGNvbmZsaWN0
IGJldHdlZW4gQVBJOjpTdHJpbmcKKyAgICAgICAgYW5kIFdURjo6U3RyaW5nLgorCisgICAgICAg
ICogVUlQcm9jZXNzL0luc3BlY3RvclRhcmdldFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
SW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3Rv
clRhcmdldFByb3h5Ojpjb25uZWN0KToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yVGFyZ2V0
UHJveHk6OmRpc2Nvbm5lY3QpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JUYXJnZXRQcm94
eTo6c2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0
b3JUYXJnZXRQcm94eTo6ZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQpOgorICAgICAgICAoV2Vi
S2l0OjpJbnNwZWN0b3JUYXJnZXRQcm94eTo6aXNQcm92aXNpb25hbCBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6Okluc3BlY3RvclRhcmdldFByb3h5OjpwcmV2aW91c1RhcmdldElEIGNvbnN0KToK
KyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yVGFyZ2V0UHJveHkuaDogVGFyZ2V0IHByb3h5
IGNhbiBzdGFydCBhcyBhIHByb3Zpc2lvbmFsIHRhcmdldCAod2l0aCBhIHBvaW50ZXIgdG8KKyAg
ICAgICAgUHJvdmlzaW9uYWxQYWdlUHJveHkpIGFuZCBsYXRlciBlaXRoZXIgYmUgY29tbWl0dGVk
IG9yIGRlc3Ryb3llZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94
eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlByb3Zpc2lvbmFsUGFnZVByb3h5OjpQcm92aXNpb25h
bFBhZ2VQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlByb3Zpc2lvbmFsUGFnZVByb3h5Ojp+UHJv
dmlzaW9uYWxQYWdlUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpQcm92aXNpb25hbFBhZ2VQcm94
eTo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOiBGb3J3YXJkIGluc3BlY3RvciBtZXNzYWdlcyB0byBwYXJl
bnQgcGFnZSdzIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLgorICAgICAgICBTaW5jZSBlYWNo
IFdlYlBhZ2UgaGFzIGEgdW5pcXVlIGlkZW50aWZpZXIgdGhlIHRhcmdldCBpZHMgd2lsbCBiZSBn
bG9iYWxseSB1bmlxdWUgYW5kIHRoZXJlIGlzIG5vIHJpc2sgb2YgY29sbGlzaW9ucy4KKworICAg
ICAgICAqIFVJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5oOgorICAgICAgICAoV2ViS2l0
OjpQcm92aXNpb25hbFBhZ2VQcm94eTo6cGFnZSBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Z2V0VGFy
Z2V0SUQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6V2Vi
UGFnZUluc3BlY3RvckNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlSW5zcGVj
dG9yQ29udHJvbGxlcjo6Y2xlYXJUYXJnZXRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUlu
c3BlY3RvckNvbnRyb2xsZXI6OmNyZWF0ZUluc3BlY3RvclRhcmdldCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpkZXN0cm95SW5zcGVjdG9yVGFyZ2V0KToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENyZWF0ZVBy
b3Zpc2lvbmFsUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VJbnNwZWN0b3JDb250cm9s
bGVyOjpkaWREZXN0cm95UHJvdmlzaW9uYWxQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZUluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdFByb3Zpc2lvbmFsUGFnZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjphZGRUYXJnZXQpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwOiBSZW1vdmVkLiBNZXJnZWQg
dGhpcyBhZ2VudCBpbnRvIEluc3BlY3RvclRhcmdldEFnZW50LgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6bV9yZXNldFJlY2VudENy
YXNoQ291bnRUaW1lcik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZmluaXNoQXR0
YWNoaW5nVG9XZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpjb21t
aXRQcm92aXNpb25hbFBhZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDog
TW92ZWQgdGhlIHRhcmdldCBtYW5hZ2VtZW50IGxvZ2ljIGludG8gV2ViUGFnZUluc3BlY3RvckNv
bnRyb2xsZXIuCisgICAgICAgIFdlYlBhZ2VQcm94eS9Qcm92aXNpb25hbFBhZ2VQcm94eSBhcmUg
ZXhwZWN0ZWQgdG8gbm90aWZpeSBpdCBhYm91dCBrZXkgbGlmZWN5Y2xlIGV2ZW50cyBhbmQgYWxz
bworICAgICAgICBmb3J3YXJkIHRvIGl0IG1lc3NhZ2VzIGZyb20gaW5zcGVjdG9yIGluIHRoZSBp
bnNwZWN0ZWQgV2ViUHJvY2Vzcy4gSG93IGl0IHRyYW5zbGF0ZXMgdG8gVGFyZ2V0CisgICAgICAg
IGV2ZW50cyBpcyBpbnNwZWN0b3IncyBidXNpbmVzcy4KKworICAgICAgICAqIFdlYktpdC54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUluc3BlY3Rv
clRhcmdldDo6aWRlbnRpZmllciBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXQ6OmNvbm5lY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0OjpkaXNjb25uZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUluc3BlY3RvclRh
cmdldDo6dG9UYXJnZXRJRCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXQuaDogTWFkZSB0aGUgdGFyZ2V0IG93biBmcm9udGVuZCBjaGFubmVsIGlu
c3RhbmNlIGFzIGl0J3MgdGhlCisgICAgICAgIG9ubHkgcGxhY2Ugd2hlcmUgdGhlIHBhZ2Ugc3Bl
Y2lmaWMgY2hhbm5lbCBpcyB1c2VkLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6OnJlbW92ZVRhcmdldCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpjb25uZWN0SW5zcGVjdG9y
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6OmRp
c2Nvbm5lY3RJbnNwZWN0b3IpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbDo6V2ViUGFnZUluc3Bl
Y3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZCk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENo
YW5uZWwuaDogVGhlIGNoYW5uZWwncyBsaWZldGltZSBpcyBtYW5hZ2VkIGJ5IG93bmluZworICAg
ICAgICB0YXJnZXQuIE5vIG5lZWQgdG8gcmVmZXJlbmNlIGNvdW50IGl0LgorCiAyMDE5LTEwLTA4
ICBLYXRlIENoZW5leSAgPGthdGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgogCiAgICAgICAgIElt
cGxlbWVudCBUZWxlbWV0cnkgYW5kIER1bXBpbmcgUm91dGluZXMgZm9yIFNRTGl0ZSBiYWNrZW5k
ICgxOTUwODgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclRhcmdldC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JUYXJnZXQuaAppbmRleCA5ZWRhYTFmNDIwOTVmMDYyZjQ1YTgxMDNmYTI3NGI1MTViNjJmMThi
Li5hNjk0Mzc3MjA0NmZhYzk3YzBmOTUxOGYyODQ4N2ViOTU4OWEyNmYyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRhcmdldC5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGFyZ2V0LmgKQEAgLTQ3LDkg
KzQ3LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN0cmluZyBpZGVudGlmaWVyKCkgY29uc3Qg
PSAwOwogICAgIHZpcnR1YWwgSW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKCkgY29uc3QgPSAwOwog
CisgICAgdmlydHVhbCBib29sIGlzUHJvdmlzaW9uYWwoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQorICAgIHZpcnR1YWwgU3RyaW5nIHByZXZpb3VzVGFyZ2V0SUQoKSBjb25zdCB7IHJldHVybiBT
dHJpbmcoKTsgfQorCiAgICAgLy8gQ29ubmVjdGlvbiBtYW5hZ2VtZW50LgotICAgIHZpcnR1YWwg
dm9pZCBjb25uZWN0KEZyb250ZW5kQ2hhbm5lbCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlz
Y29ubmVjdChGcm9udGVuZENoYW5uZWwmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNvbm5lY3Qo
RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBk
aXNjb25uZWN0KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZW5kTWVzc2FnZVRvVGFyZ2V0QmFj
a2VuZChjb25zdCBTdHJpbmcmKSA9IDA7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5j
cHAKaW5kZXggYzZjNmJmODA2ZTJlMjZiMTU0YmY5Y2E3MmMwY2NhZTk0ZjUwM2NhYS4uYzMwYTAy
OTJhMGI3Y2FlYjk2NWIxZTIwMGE2OGI4MGRhYThlZjI1YyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdl
dEFnZW50LmNwcApAQCAtMzIsNiArMzIsNyBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogSW5z
cGVjdG9yVGFyZ2V0QWdlbnQ6Okluc3BlY3RvclRhcmdldEFnZW50KEZyb250ZW5kUm91dGVyJiBm
cm9udGVuZFJvdXRlciwgQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyKQogICAg
IDogSW5zcGVjdG9yQWdlbnRCYXNlKCJUYXJnZXQiX3MpCisgICAgLCBtX3JvdXRlcihmcm9udGVu
ZFJvdXRlcikKICAgICAsIG1fZnJvbnRlbmREaXNwYXRjaGVyKG1ha2VVbmlxdWU8VGFyZ2V0RnJv
bnRlbmREaXNwYXRjaGVyPihmcm9udGVuZFJvdXRlcikpCiAgICAgLCBtX2JhY2tlbmREaXNwYXRj
aGVyKFRhcmdldEJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoYmFja2VuZERpc3BhdGNoZXIsIHRo
aXMpKQogewpAQCAtOTYsMTAgKzk3LDE1IEBAIHN0YXRpYyBQcm90b2NvbDo6VGFyZ2V0OjpUYXJn
ZXRJbmZvOjpUeXBlIHRhcmdldFR5cGVUb1Byb3RvY29sVHlwZShJbnNwZWN0b3JUYXJnCiAKIHN0
YXRpYyBSZWY8UHJvdG9jb2w6OlRhcmdldDo6VGFyZ2V0SW5mbz4gYnVpbGRUYXJnZXRJbmZvT2Jq
ZWN0KGNvbnN0IEluc3BlY3RvclRhcmdldCYgdGFyZ2V0KQogewotICAgIHJldHVybiBQcm90b2Nv
bDo6VGFyZ2V0OjpUYXJnZXRJbmZvOjpjcmVhdGUoKQorICAgIGF1dG8gcmVzdWx0ID0gUHJvdG9j
b2w6OlRhcmdldDo6VGFyZ2V0SW5mbzo6Y3JlYXRlKCkKICAgICAgICAgLnNldFRhcmdldElkKHRh
cmdldC5pZGVudGlmaWVyKCkpCiAgICAgICAgIC5zZXRUeXBlKHRhcmdldFR5cGVUb1Byb3RvY29s
VHlwZSh0YXJnZXQudHlwZSgpKSkKICAgICAgICAgLnJlbGVhc2UoKTsKKyAgICBpZiAodGFyZ2V0
LmlzUHJvdmlzaW9uYWwoKSkgeworICAgICAgICByZXN1bHQtPnNldElzUHJvdmlzaW9uYWwodHJ1
ZSk7CisgICAgICAgIHJlc3VsdC0+c2V0UHJldmlvdXNUYXJnZXRJZCh0YXJnZXQucHJldmlvdXNU
YXJnZXRJRCgpKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdm9pZCBJbnNwZWN0
b3JUYXJnZXRBZ2VudDo6dGFyZ2V0Q3JlYXRlZChJbnNwZWN0b3JUYXJnZXQmIHRhcmdldCkKQEAg
LTExMCw3ICsxMTYsNyBAQCB2b2lkIEluc3BlY3RvclRhcmdldEFnZW50Ojp0YXJnZXRDcmVhdGVk
KEluc3BlY3RvclRhcmdldCYgdGFyZ2V0KQogICAgIGlmICghbV9pc0Nvbm5lY3RlZCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgdGFyZ2V0LmNvbm5lY3QoZnJvbnRlbmRDaGFubmVsKCkpOworICAg
IHRhcmdldC5jb25uZWN0KGNvbm5lY3Rpb25UeXBlKCkpOwogCiAgICAgbV9mcm9udGVuZERpc3Bh
dGNoZXItPnRhcmdldENyZWF0ZWQoYnVpbGRUYXJnZXRJbmZvT2JqZWN0KHRhcmdldCkpOwogfQpA
QCAtMTIyLDI3ICsxMjgsNDIgQEAgdm9pZCBJbnNwZWN0b3JUYXJnZXRBZ2VudDo6dGFyZ2V0RGVz
dHJveWVkKEluc3BlY3RvclRhcmdldCYgdGFyZ2V0KQogICAgIGlmICghbV9pc0Nvbm5lY3RlZCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgdGFyZ2V0LmRpc2Nvbm5lY3QoZnJvbnRlbmRDaGFubmVs
KCkpOworICAgIHRhcmdldC5kaXNjb25uZWN0KCk7CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hl
ci0+dGFyZ2V0RGVzdHJveWVkKHRhcmdldC5pZGVudGlmaWVyKCkpOwogfQogCi12b2lkIEluc3Bl
Y3RvclRhcmdldEFnZW50Ojpjb25uZWN0VG9UYXJnZXRzKCkKK3ZvaWQgSW5zcGVjdG9yVGFyZ2V0
QWdlbnQ6OmRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0KGNvbnN0IFN0cmluZyYgb2xkVGFyZ2V0
SUQsIGNvbnN0IFN0cmluZyYgY29tbWl0dGVkVGFyZ2V0SUQpCit7CisgICAgaWYgKCFtX2lzQ29u
bmVjdGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvKiB0YXJnZXQgPSBtX3RhcmdldHMu
Z2V0KGNvbW1pdHRlZFRhcmdldElEKTsKKyAgICBpZiAoIXRhcmdldCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgYXV0byB0YXJnZXRJbmZvID0gYnVpbGRUYXJnZXRJbmZvT2JqZWN0KCp0YXJnZXQp
OworICAgIHRhcmdldEluZm8tPnNldFByZXZpb3VzVGFyZ2V0SWQob2xkVGFyZ2V0SUQpOworICAg
IG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldChXVEZNb3Zl
KHRhcmdldEluZm8pKTsKK30KKworRnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSBJbnNw
ZWN0b3JUYXJnZXRBZ2VudDo6Y29ubmVjdGlvblR5cGUoKSBjb25zdAogewotICAgIGF1dG8mIGNo
YW5uZWwgPSBmcm9udGVuZENoYW5uZWwoKTsKKyAgICByZXR1cm4gbV9yb3V0ZXIuaGFzTG9jYWxG
cm9udGVuZCgpID8gSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlOjpM
b2NhbCA6IEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZTo6UmVtb3Rl
OworfQogCit2b2lkIEluc3BlY3RvclRhcmdldEFnZW50Ojpjb25uZWN0VG9UYXJnZXRzKCkKK3sK
ICAgICBmb3IgKEluc3BlY3RvclRhcmdldCogdGFyZ2V0IDogbV90YXJnZXRzLnZhbHVlcygpKSB7
Ci0gICAgICAgIHRhcmdldC0+Y29ubmVjdChjaGFubmVsKTsKKyAgICAgICAgdGFyZ2V0LT5jb25u
ZWN0KGNvbm5lY3Rpb25UeXBlKCkpOwogICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+dGFy
Z2V0Q3JlYXRlZChidWlsZFRhcmdldEluZm9PYmplY3QoKnRhcmdldCkpOwogICAgIH0KIH0KIAog
dm9pZCBJbnNwZWN0b3JUYXJnZXRBZ2VudDo6ZGlzY29ubmVjdEZyb21UYXJnZXRzKCkKIHsKLSAg
ICBhdXRvJiBjaGFubmVsID0gZnJvbnRlbmRDaGFubmVsKCk7Ci0KICAgICBmb3IgKEluc3BlY3Rv
clRhcmdldCogdGFyZ2V0IDogbV90YXJnZXRzLnZhbHVlcygpKQotICAgICAgICB0YXJnZXQtPmRp
c2Nvbm5lY3QoY2hhbm5lbCk7CisgICAgICAgIHRhcmdldC0+ZGlzY29ubmVjdCgpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oCmluZGV4IDAw
ZmMzYjAyMTczNDRiZTRjZGZmNzkxMWMyMTM3MThjNWI5NWNlZTMuLmE0NWI4MzI4OWJkNThhNDYx
NDgyODYzZWRkNTBhMjI2ODU0YjA4ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaApAQCAt
MjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiSW5zcGVjdG9yQWdlbnRCYXNlLmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmREaXNwYXRjaGVycy5o
IgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKQEAgLTQwLDYgKzQxLDcgQEAgY2xhc3MgSlNf
RVhQT1JUX1BSSVZBVEUgSW5zcGVjdG9yVGFyZ2V0QWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yQWdl
bnRCYXNlLCBwdWJsaWMKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JUYXJnZXRB
Z2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CisgICAgSW5zcGVj
dG9yVGFyZ2V0QWdlbnQoRnJvbnRlbmRSb3V0ZXImLCBCYWNrZW5kRGlzcGF0Y2hlciYpOwogICAg
IHZpcnR1YWwgfkluc3BlY3RvclRhcmdldEFnZW50KCk7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2Vu
dEJhc2UKQEAgLTUzLDE5ICs1NSwxOCBAQCBwdWJsaWM6CiAgICAgLy8gVGFyZ2V0IGxpZmVjeWNs
ZS4KICAgICB2b2lkIHRhcmdldENyZWF0ZWQoSW5zcGVjdG9yVGFyZ2V0Jik7CiAgICAgdm9pZCB0
YXJnZXREZXN0cm95ZWQoSW5zcGVjdG9yVGFyZ2V0Jik7CisgICAgdm9pZCBkaWRDb21taXRQcm92
aXNpb25hbFRhcmdldChjb25zdCBTdHJpbmcmIG9sZFRhcmdldElELCBjb25zdCBTdHJpbmcmIGNv
bW1pdHRlZFRhcmdldElEKTsKIAogICAgIC8vIFRhcmdldCBtZXNzYWdlcy4KICAgICB2b2lkIHNl
bmRNZXNzYWdlRnJvbVRhcmdldFRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlKTsKIAotcHJvdGVjdGVkOgotICAgIEluc3BlY3RvclRhcmdldEFn
ZW50KEZyb250ZW5kUm91dGVyJiwgQmFja2VuZERpc3BhdGNoZXImKTsKLQotICAgIHZpcnR1YWwg
RnJvbnRlbmRDaGFubmVsJiBmcm9udGVuZENoYW5uZWwoKSA9IDA7Ci0KIHByaXZhdGU6CisgICAg
Ly8gRnJvbnRlbmRDaGFubmVsCisgICAgRnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSBj
b25uZWN0aW9uVHlwZSgpIGNvbnN0OwogICAgIHZvaWQgY29ubmVjdFRvVGFyZ2V0cygpOwogICAg
IHZvaWQgZGlzY29ubmVjdEZyb21UYXJnZXRzKCk7CiAKKyAgICBJbnNwZWN0b3I6OkZyb250ZW5k
Um91dGVyJiBtX3JvdXRlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGFyZ2V0RnJvbnRlbmREaXNw
YXRjaGVyPiBtX2Zyb250ZW5kRGlzcGF0Y2hlcjsKICAgICBSZWY8VGFyZ2V0QmFja2VuZERpc3Bh
dGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiAgICAgSGFzaE1hcDxTdHJpbmcsIEluc3BlY3Rv
clRhcmdldCo+IG1fdGFyZ2V0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvcHJvdG9jb2wvVGFyZ2V0Lmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3Byb3RvY29sL1RhcmdldC5qc29uCmluZGV4IDYxYWQyNjlkOTVlMThmZDU5ZGE1NWM3
YzNlZjdkNWQxNGFkMTMyZGEuLjYyNjk3OTc5ODhjMjI2YzJmNzJjMzFjMzgzNzNjZDg0OGUzMTYz
NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wv
VGFyZ2V0Lmpzb24KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2Nv
bC9UYXJnZXQuanNvbgpAQCAtOCw3ICs4LDkgQEAKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJEZXNjcmlwdGlvbiBvZiBhIHRhcmdldC4iLAogICAgICAgICAgICAgInByb3BlcnRpZXMiOiBb
CiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0YXJnZXRJZCIsICJ0eXBlIjogInN0cmluZyIs
ICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHRhcmdldC4iIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0eXBlIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0i
OiBbImphdmFzY3JpcHQiLCAicGFnZSIsICJ3b3JrZXIiLCAic2VydmljZXdvcmtlciJdIH0KKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInR5cGUiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6
IFsiamF2YXNjcmlwdCIsICJwYWdlIiwgIndvcmtlciIsICJzZXJ2aWNld29ya2VyIl0gfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImlzUHJvdmlzaW9uYWwiLCAidHlwZSI6ICJib29sZWFu
IiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIldoZXRoZXIgdGhpcyBpcyBhIHBy
b3Zpc2lvbmFsIHBhZ2UgdGFyZ2V0LiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBy
ZXZpb3VzVGFyZ2V0SWQiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVz
Y3JpcHRpb24iOiAiRm9yIGEgcHJvdmlzaW9uYWwgdGFyZ2V0IHJlcHJlc2VucyBJRCBvZiB0aGUg
dGFyZ2V0IGl0IGlzIHN3YXBwZWQgd2l0aCB3aGVuIGNvbW1pdHRlZC4iIH0KICAgICAgICAgICAg
IF0KICAgICAgICAgfQogICAgIF0sCkBAIC0zOSw2ICs0MSwxMiBAQAogICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAidGFyZ2V0SWQiLCAidHlwZSI6ICJzdHJpbmciIH0KICAgICAgICAgICAgIF0K
ICAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZGlkQ29tbWl0UHJv
dmlzaW9uYWxUYXJnZXQiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJ0YXJnZXRJbmZvIiwgIiRyZWYiOiAiVGFyZ2V0SW5mbyIsICJkZXNj
cmlwdGlvbiI6ICJDb21taXR0ZWQgdGFyZ2V0IGluZm8uIiB9CisgICAgICAgICAgICBdCisgICAg
ICAgIH0sCiAgICAgICAgIHsKICAgICAgICAgICAgICJuYW1lIjogImRpc3BhdGNoTWVzc2FnZUZy
b21UYXJnZXQiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggMmM2N2I3MjQ0ODMx
ZjYwNWYwOGRmNDEyNWYyMWNlZWM3MWM5MGNhOS4uZWE1ZTkzNTU4MGRmYjBmNTc3NzlhZDhiYTBk
YTU3YjVjNzA1MzE3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmNwcApAQCAtMzQ0LDE3ICszNDQsNiBAQCB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OnNob3coKQogICAgICAgICBjb25uZWN0RnJvbnRlbmQoKmZyb250ZW5kQ2hhbm5lbCk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0SXNVbmRlclRlc3QoYm9vbCB2YWx1
ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gbV9pc1VuZGVyVGVzdCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9pc1VuZGVyVGVzdCA9IHZhbHVlOwotCi0gICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzI2
NzY4NjI4PiBUcnkgdG8gY2F0Y2ggc3VzcGljaW91cyBzY2VuYXJpb3Mgd2hlcmUgd2UgbWF5IGhh
dmUgYSBkYW5nbGluZyBmcm9udGVuZCB3aGlsZSBydW5uaW5nIHRlc3RzLgotICAgIFJFTEVBU0Vf
QVNTRVJUKCFtX2lzVW5kZXJUZXN0IHx8ICFtX2Zyb250ZW5kUm91dGVyLT5oYXNGcm9udGVuZHMo
KSk7Ci19Ci0KIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZXZhbHVhdGVGb3JUZXN0SW5Gcm9u
dGVuZChjb25zdCBTdHJpbmcmIHNjcmlwdCkKIHsKICAgICBlbnN1cmVJbnNwZWN0b3JBZ2VudCgp
LmV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQoc2NyaXB0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IDRiZWE0MzI2M2RhNzAzN2YxODg2
NTk2NjJkYThkYmY2ZDgzMTU5NmQuLjFhYWI5ODA1YTFkNGVjNzU5ZGE1ZDRhZTBjMzQ0MjU0MjRj
NTY0MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuaApAQCAtMTAxLDcgKzEwMSw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGRpZENvbXBvc2l0ZShGcmFtZSYpOwogCiAgICAgYm9vbCBpc1VuZGVyVGVzdCgpIGNvbnN0IHsg
cmV0dXJuIG1faXNVbmRlclRlc3Q7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldElzVW5k
ZXJUZXN0KGJvb2wpOworICAgIHZvaWQgc2V0SXNVbmRlclRlc3QoYm9vbCBpc1VuZGVyVGVzdCkg
eyBtX2lzVW5kZXJUZXN0ID0gaXNVbmRlclRlc3Q7IH0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBzY3JpcHQpOwogCiAgICAg
SW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2luc3Bl
Y3RvckNsaWVudDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQmFzZS9NYWluLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
QmFzZS9NYWluLmpzCmluZGV4IGYyNDYxNjI5NmU0NzhkMjk2MzllZjIzZDExN2Q4ZDI3NmUwZjNl
YTguLjM3MjM4ZTNhMTg1MDUxYTIwODFlNjBlMDgzMWI4MmY4MTY2NDhmMjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcworKysgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01haW4uanMKQEAgLTE3OSw4
NSArMTc5LDYgQEAgV0kubG9hZGVkID0gZnVuY3Rpb24oKQogICAgIH0KIH07CiAKLVdJLmluaXRp
YWxpemVCYWNrZW5kVGFyZ2V0ID0gZnVuY3Rpb24odGFyZ2V0KQotewotICAgIGNvbnNvbGUuYXNz
ZXJ0KCFXSS5tYWluVGFyZ2V0KTsKLQotICAgIFdJLmJhY2tlbmRUYXJnZXQgPSB0YXJnZXQ7Ci0K
LSAgICBXSS5yZXNldE1haW5FeGVjdXRpb25Db250ZXh0KCk7Ci0KLSAgICBXSS5fdGFyZ2V0c0F2
YWlsYWJsZVByb21pc2UucmVzb2x2ZSgpOwotfTsKLQotV0kuaW5pdGlhbGl6ZVBhZ2VUYXJnZXQg
PSBmdW5jdGlvbih0YXJnZXQpCi17Ci0gICAgY29uc29sZS5hc3NlcnQoV0kuc2hhcmVkQXBwLmRl
YnVnZ2FibGVUeXBlID09PSBXSS5EZWJ1Z2dhYmxlVHlwZS5XZWIpOwotICAgIGNvbnNvbGUuYXNz
ZXJ0KHRhcmdldC50eXBlID09PSBXSS5UYXJnZXQuVHlwZS5QYWdlIHx8IHRhcmdldCBpbnN0YW5j
ZW9mIFdJLkRpcmVjdEJhY2tlbmRUYXJnZXQpOwotCi0gICAgV0kucGFnZVRhcmdldCA9IHRhcmdl
dDsKLQotICAgIFdJLnJlZGlyZWN0R2xvYmFsQWdlbnRzVG9Db25uZWN0aW9uKFdJLnBhZ2VUYXJn
ZXQuY29ubmVjdGlvbik7Ci0KLSAgICBXSS5yZXNldE1haW5FeGVjdXRpb25Db250ZXh0KCk7Ci19
OwotCi1XSS50cmFuc2l0aW9uUGFnZVRhcmdldCA9IGZ1bmN0aW9uKHRhcmdldCkKLXsKLSAgICBj
b25zb2xlLmFzc2VydCghV0kucGFnZVRhcmdldCk7Ci0gICAgY29uc29sZS5hc3NlcnQoV0kuc2hh
cmVkQXBwLmRlYnVnZ2FibGVUeXBlID09PSBXSS5EZWJ1Z2dhYmxlVHlwZS5XZWIpOwotICAgIGNv
bnNvbGUuYXNzZXJ0KHRhcmdldC50eXBlID09PSBXSS5UYXJnZXQuVHlwZS5QYWdlKTsKLQotICAg
IFdJLnBhZ2VUYXJnZXQgPSB0YXJnZXQ7Ci0KLSAgICBXSS5yZWRpcmVjdEdsb2JhbEFnZW50c1Rv
Q29ubmVjdGlvbihXSS5wYWdlVGFyZ2V0LmNvbm5lY3Rpb24pOwotCi0gICAgV0kucmVzZXRNYWlu
RXhlY3V0aW9uQ29udGV4dCgpOwotCi0gICAgLy8gQWN0aW9ucyB0byB0cmFuc2l0aW9uIHRoZSBw
YWdlIHRhcmdldC4KLSAgICBXSS5ub3RpZmljYXRpb25zLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVy
cyhXSS5Ob3RpZmljYXRpb24uVHJhbnNpdGlvblBhZ2VUYXJnZXQpOwotICAgIFdJLmRvbU1hbmFn
ZXIudHJhbnNpdGlvblBhZ2VUYXJnZXQoKTsKLSAgICBXSS5uZXR3b3JrTWFuYWdlci50cmFuc2l0
aW9uUGFnZVRhcmdldCgpOwotICAgIFdJLnRpbWVsaW5lTWFuYWdlci50cmFuc2l0aW9uUGFnZVRh
cmdldCgpOwotfTsKLQotV0kudGVybWluYXRlUGFnZVRhcmdldCA9IGZ1bmN0aW9uKHRhcmdldCkK
LXsKLSAgICBjb25zb2xlLmFzc2VydChXSS5wYWdlVGFyZ2V0KTsKLSAgICBjb25zb2xlLmFzc2Vy
dChXSS5wYWdlVGFyZ2V0ID09PSB0YXJnZXQpOwotICAgIGNvbnNvbGUuYXNzZXJ0KFdJLnNoYXJl
ZEFwcC5kZWJ1Z2dhYmxlVHlwZSA9PT0gV0kuRGVidWdnYWJsZVR5cGUuV2ViKTsKLQotICAgIC8v
IFJlbW92ZSBhbnkgV29ya2VyIHRhcmdldHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGFnZS4KLSAg
ICBsZXQgd29ya2VyVGFyZ2V0cyA9IFdJLnRhcmdldHMuZmlsdGVyKCh4KSA9PiB4LnR5cGUgPT09
IFdJLlRhcmdldC5UeXBlLldvcmtlcik7Ci0gICAgZm9yIChsZXQgd29ya2VyVGFyZ2V0IG9mIHdv
cmtlclRhcmdldHMpCi0gICAgICAgIFdJLndvcmtlck1hbmFnZXIud29ya2VyVGVybWluYXRlZCh3
b3JrZXJUYXJnZXQuaWRlbnRpZmllcik7Ci0KLSAgICBXSS5wYWdlVGFyZ2V0ID0gbnVsbDsKLQot
ICAgIFdJLnJlZGlyZWN0R2xvYmFsQWdlbnRzVG9Db25uZWN0aW9uKFdJLmJhY2tlbmRDb25uZWN0
aW9uKTsKLX07Ci0KLVdJLnJlc2V0TWFpbkV4ZWN1dGlvbkNvbnRleHQgPSBmdW5jdGlvbigpCi17
Ci0gICAgaWYgKFdJLm1haW5UYXJnZXQgaW5zdGFuY2VvZiBXSS5NdWx0aXBsZXhpbmdCYWNrZW5k
VGFyZ2V0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoV0kubWFpblRhcmdldC5leGVjdXRp
b25Db250ZXh0KSB7Ci0gICAgICAgIFdJLnJ1bnRpbWVNYW5hZ2VyLmFjdGl2ZUV4ZWN1dGlvbkNv
bnRleHQgPSBXSS5tYWluVGFyZ2V0LmV4ZWN1dGlvbkNvbnRleHQ7Ci0gICAgICAgIGlmIChXSS5x
dWlja0NvbnNvbGUpCi0gICAgICAgICAgICBXSS5xdWlja0NvbnNvbGUuaW5pdGlhbGl6ZU1haW5F
eGVjdXRpb25Db250ZXh0UGF0aENvbXBvbmVudCgpOwotICAgIH0KLX07Ci0KLVdJLnJlZGlyZWN0
R2xvYmFsQWdlbnRzVG9Db25uZWN0aW9uID0gZnVuY3Rpb24oY29ubmVjdGlvbikKLXsKLSAgICAv
LyBUaGlzIG1ha2VzIGdsb2JhbCB3aW5kb3cuRm9vQWdlbnQgZGlzcGF0Y2ggdG8gdGhlIGFjdGl2
ZSBwYWdlIHRhcmdldC4KLSAgICBmb3IgKGxldCBbZG9tYWluLCBhZ2VudF0gb2YgT2JqZWN0LmVu
dHJpZXMoSW5zcGVjdG9yQmFja2VuZC5fYWdlbnRzKSkgewotICAgICAgICBpZiAoZG9tYWluICE9
PSAiVGFyZ2V0IikKLSAgICAgICAgICAgIGFnZW50LmNvbm5lY3Rpb24gPSBjb25uZWN0aW9uOwot
ICAgIH0KLX07Ci0KIFdJLmNvbnRlbnRMb2FkZWQgPSBmdW5jdGlvbigpCiB7CiAgICAgLy8gSWYg
dGhlcmUgd2FzIGFuIHVuY2F1Z2h0IGV4Y2VwdGlvbiBlYXJsaWVyIGR1cmluZyBsb2FkaW5nLCB0
aGVuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250
cm9sbGVycy9UYXJnZXRNYW5hZ2VyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQ29udHJvbGxlcnMvVGFyZ2V0TWFuYWdlci5qcwppbmRleCBhOWZhNGRlMGU4M2E2YjY3
MTczNGI4YWU2YTMwYzg4ZDM1YWM3YjE4Li5iMTU4NmMxNTZhMDZlZjMyMmJjMzgxOTk1OGU3N2Nm
YzMyM2Q0ZDlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9Db250cm9sbGVycy9UYXJnZXRNYW5hZ2VyLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1RhcmdldE1hbmFnZXIuanMKQEAgLTMzLDYgKzMz
LDkgQEAgV0kuVGFyZ2V0TWFuYWdlciA9IGNsYXNzIFRhcmdldE1hbmFnZXIgZXh0ZW5kcyBXSS5P
YmplY3QKICAgICAgICAgdGhpcy5fY2FjaGVkVGFyZ2V0c0xpc3QgPSBudWxsOwogICAgICAgICB0
aGlzLl9zZWVuUGFnZVRhcmdldCA9IGZhbHNlOwogICAgICAgICB0aGlzLl90cmFuc2l0aW9uVGlt
ZW91dElkZW50aWZpZXIgPSB1bmRlZmluZWQ7CisKKyAgICAgICAgdGhpcy5fcHJvdmlzaW9uYWxU
YXJnZXRJZHMgPSBuZXcgU2V0OworICAgICAgICB0aGlzLl9zd2FwcGVkVGFyZ2V0SWRzID0gbmV3
IFNldDsKICAgICB9CiAKICAgICAvLyBQdWJsaWMKQEAgLTgwLDYgKzgzLDcgQEAgV0kuVGFyZ2V0
TWFuYWdlciA9IGNsYXNzIFRhcmdldE1hbmFnZXIgZXh0ZW5kcyBXSS5PYmplY3QKIAogICAgICAg
ICB0aGlzLl9jYWNoZWRUYXJnZXRzTGlzdCA9IG51bGw7CiAgICAgICAgIHRoaXMuX3RhcmdldHMu
ZGVsZXRlKHRhcmdldC5pZGVudGlmaWVyKTsKKyAgICAgICAgdGFyZ2V0LmRlc3Ryb3koKTsKIAog
ICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXSS5UYXJnZXRNYW5hZ2VyLkV2
ZW50LlRhcmdldFJlbW92ZWQsIHt0YXJnZXR9KTsKICAgICB9CkBAIC04OSw3ICs5Myw3IEBAIFdJ
LlRhcmdldE1hbmFnZXIgPSBjbGFzcyBUYXJnZXRNYW5hZ2VyIGV4dGVuZHMgV0kuT2JqZWN0CiAg
ICAgICAgIGxldCB0YXJnZXQgPSBuZXcgV0kuTXVsdGlwbGV4aW5nQmFja2VuZFRhcmdldDsKICAg
ICAgICAgdGFyZ2V0LmluaXRpYWxpemUoKTsKIAotICAgICAgICBXSS5pbml0aWFsaXplQmFja2Vu
ZFRhcmdldCh0YXJnZXQpOworICAgICAgICB0aGlzLl9pbml0aWFsaXplQmFja2VuZFRhcmdldCh0
YXJnZXQpOwogCiAgICAgICAgIC8vIEFkZCB0aGUgdGFyZ2V0IHdpdGhvdXQgZGlzcGF0Y2hpbmcg
YW4gZXZlbnQuCiAgICAgICAgIHRoaXMuX3RhcmdldHMuc2V0KHRhcmdldC5pZGVudGlmaWVyLCB0
YXJnZXQpOwpAQCAtMTAwLDEwICsxMDQsMTAgQEAgV0kuVGFyZ2V0TWFuYWdlciA9IGNsYXNzIFRh
cmdldE1hbmFnZXIgZXh0ZW5kcyBXSS5PYmplY3QKICAgICAgICAgbGV0IHRhcmdldCA9IG5ldyBX
SS5EaXJlY3RCYWNrZW5kVGFyZ2V0OwogICAgICAgICB0YXJnZXQuaW5pdGlhbGl6ZSgpOwogCi0g
ICAgICAgIFdJLmluaXRpYWxpemVCYWNrZW5kVGFyZ2V0KHRhcmdldCk7CisgICAgICAgIHRoaXMu
X2luaXRpYWxpemVCYWNrZW5kVGFyZ2V0KHRhcmdldCk7CiAKICAgICAgICAgaWYgKFdJLnNoYXJl
ZEFwcC5kZWJ1Z2dhYmxlVHlwZSA9PT0gV0kuRGVidWdnYWJsZVR5cGUuV2ViKQotICAgICAgICAg
ICAgV0kuaW5pdGlhbGl6ZVBhZ2VUYXJnZXQodGFyZ2V0KTsKKyAgICAgICAgICAgIHRoaXMuX2lu
aXRpYWxpemVQYWdlVGFyZ2V0KHRhcmdldCk7CiAKICAgICAgICAgdGhpcy5hZGRUYXJnZXQodGFy
Z2V0KTsKICAgICB9CkBAIC0xMTIsNiArMTE2LDEyIEBAIFdJLlRhcmdldE1hbmFnZXIgPSBjbGFz
cyBUYXJnZXRNYW5hZ2VyIGV4dGVuZHMgV0kuT2JqZWN0CiAKICAgICB0YXJnZXRDcmVhdGVkKHRh
cmdldEluZm8pCiAgICAgeworICAgICAgICAvLyBDT01QQVRJQklMSVRZIChpT1MgMTMuMCk6IGBU
YXJnZXQuVGFyZ2V0SW5mby5pc1Byb3Zpc2lvbmFsYCBkaWQgbm90IGV4aXN0IHlldC4KKyAgICAg
ICAgaWYgKHRhcmdldEluZm8uaXNQcm92aXNpb25hbCkgeworICAgICAgICAgICAgdGhpcy5fcHJv
dmlzaW9uYWxUYXJnZXRJZHMuYWRkKHRhcmdldEluZm8udGFyZ2V0SWQpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgLy8gRklYTUU6IEVsaW1pbmF0ZSB0aGlzIG9u
Y2UgdGhlIGxvY2FsIGluc3BlY3RvciBpcyBjb25maWd1cmVkIHRvIHVzZQogICAgICAgICAvLyB0
aGUgTXVsdGlwbGV4aW5nIGNvZGUgcGF0aC4gVGhlbiB3ZSBjYW4gcGVyZm9ybSB0aGlzIGltbWVk
aWF0ZWx5CiAgICAgICAgIC8vIGluIGBXSS5sb2FkZWRgIGlmIGEgVGFyZ2V0QWdlbnQgZXhpc3Rz
LgpAQCAtMTI2LDggKzEzNiwyMSBAQCBXSS5UYXJnZXRNYW5hZ2VyID0gY2xhc3MgVGFyZ2V0TWFu
YWdlciBleHRlbmRzIFdJLk9iamVjdAogICAgICAgICB0aGlzLmFkZFRhcmdldCh0YXJnZXQpOwog
ICAgIH0KIAorICAgIGRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0KHRhcmdldEluZm8pCisgICAg
eworICAgICAgICB0aGlzLnRhcmdldERlc3Ryb3llZCh0YXJnZXRJbmZvLnByZXZpb3VzVGFyZ2V0
SWQpOworICAgICAgICB0aGlzLnRhcmdldENyZWF0ZWQodGFyZ2V0SW5mbyk7CisgICAgICAgIHRo
aXMuX3N3YXBwZWRUYXJnZXRJZHMuYWRkKHRhcmdldEluZm8ucHJldmlvdXNUYXJnZXRJZCk7Cisg
ICAgICAgIHRoaXMuX3Byb3Zpc2lvbmFsVGFyZ2V0SWRzLmRlbGV0ZSh0YXJnZXRJbmZvLnRhcmdl
dElkKTsKKworICAgIH0KKwogICAgIHRhcmdldERlc3Ryb3llZCh0YXJnZXRJZCkKICAgICB7Cisg
ICAgICAgIGlmICh0aGlzLl9wcm92aXNpb25hbFRhcmdldElkcy5kZWxldGUodGFyZ2V0SWQpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAodGhpcy5fc3dhcHBlZFRhcmdldElkcy5k
ZWxldGUodGFyZ2V0SWQpKQorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBsZXQgdGFyZ2V0
ID0gdGhpcy5fdGFyZ2V0cy5nZXQodGFyZ2V0SWQpOwogICAgICAgICB0aGlzLl9jaGVja0FuZEhh
bmRsZVBhZ2VUYXJnZXRUZXJtaW5hdGlvbih0YXJnZXQpOwogICAgICAgICB0aGlzLnJlbW92ZVRh
cmdldCh0YXJnZXQpOwpAQCAtMTM1LDYgKzE1OCw4IEBAIFdJLlRhcmdldE1hbmFnZXIgPSBjbGFz
cyBUYXJnZXRNYW5hZ2VyIGV4dGVuZHMgV0kuT2JqZWN0CiAKICAgICBkaXNwYXRjaE1lc3NhZ2VG
cm9tVGFyZ2V0KHRhcmdldElkLCBtZXNzYWdlKQogICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX3By
b3Zpc2lvbmFsVGFyZ2V0SWRzLmhhcyh0YXJnZXRJZCkpCisgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIGxldCB0YXJnZXQgPSB0aGlzLl90YXJnZXRzLmdldCh0YXJnZXRJZCk7CiAgICAgICAg
IGNvbnNvbGUuYXNzZXJ0KHRhcmdldCk7CiAgICAgICAgIGlmICghdGFyZ2V0KQpAQCAtMTcxLDEy
ICsxOTYsMTIgQEAgV0kuVGFyZ2V0TWFuYWdlciA9IGNsYXNzIFRhcmdldE1hbmFnZXIgZXh0ZW5k
cyBXSS5PYmplY3QKICAgICAgICAgLy8gRmlyc3QgcGFnZSB0YXJnZXQuCiAgICAgICAgIGlmICgh
V0kucGFnZVRhcmdldCAmJiAhdGhpcy5fc2VlblBhZ2VUYXJnZXQpIHsKICAgICAgICAgICAgIHRo
aXMuX3NlZW5QYWdlVGFyZ2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgIFdJLmluaXRpYWxpemVQYWdl
VGFyZ2V0KHRhcmdldCk7CisgICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplUGFnZVRhcmdldCh0
YXJnZXQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgLy8gVHJh
bnNpdGlvbmluZyBwYWdlIHRhcmdldC4KLSAgICAgICAgV0kudHJhbnNpdGlvblBhZ2VUYXJnZXQo
dGFyZ2V0KTsKKyAgICAgICAgdGhpcy5fdHJhbnNpdGlvblBhZ2VUYXJnZXQodGFyZ2V0KTsKICAg
ICB9CiAKICAgICBfY2hlY2tBbmRIYW5kbGVQYWdlVGFyZ2V0VGVybWluYXRpb24odGFyZ2V0KQpA
QCAtMTg4LDcgKzIxMyw3IEBAIFdJLlRhcmdldE1hbmFnZXIgPSBjbGFzcyBUYXJnZXRNYW5hZ2Vy
IGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX3NlZW5QYWdl
VGFyZ2V0KTsKIAogICAgICAgICAvLyBUZXJtaW5hdGluZyB0aGUgcGFnZSB0YXJnZXQuCi0gICAg
ICAgIFdJLnRlcm1pbmF0ZVBhZ2VUYXJnZXQodGFyZ2V0KTsKKyAgICAgICAgdGhpcy5fdGVybWlu
YXRlUGFnZVRhcmdldCh0YXJnZXQpOwogCiAgICAgICAgIC8vIEVuc3VyZSB3ZSB0cmFuc2l0aW9u
IGluIGEgcmVhc29uYWJsZSBhbW91bnQgb2YgdGltZSwgb3RoZXJ3aXNlIGNsb3NlLgogICAgICAg
ICBjb25zdCB0aW1lVG9UcmFuc2l0aW9uID0gMjAwMDsKQEAgLTIwMiw2ICsyMjcsODUgQEAgV0ku
VGFyZ2V0TWFuYWdlciA9IGNsYXNzIFRhcmdldE1hbmFnZXIgZXh0ZW5kcyBXSS5PYmplY3QKICAg
ICAgICAgICAgIFdJLmNsb3NlKCk7CiAgICAgICAgIH0sIHRpbWVUb1RyYW5zaXRpb24pOwogICAg
IH0KKworICAgIF9pbml0aWFsaXplQmFja2VuZFRhcmdldCh0YXJnZXQpCisgICAgeworICAgICAg
ICBjb25zb2xlLmFzc2VydCghV0kubWFpblRhcmdldCk7CisKKyAgICAgICAgV0kuYmFja2VuZFRh
cmdldCA9IHRhcmdldDsKKworICAgICAgICB0aGlzLl9yZXNldE1haW5FeGVjdXRpb25Db250ZXh0
KCk7CisKKyAgICAgICAgV0kuX3RhcmdldHNBdmFpbGFibGVQcm9taXNlLnJlc29sdmUoKTsKKyAg
ICB9CisKKyAgICBfaW5pdGlhbGl6ZVBhZ2VUYXJnZXQodGFyZ2V0KQorICAgIHsKKyAgICAgICAg
Y29uc29sZS5hc3NlcnQoV0kuc2hhcmVkQXBwLmRlYnVnZ2FibGVUeXBlID09PSBXSS5EZWJ1Z2dh
YmxlVHlwZS5XZWIpOworICAgICAgICBjb25zb2xlLmFzc2VydCh0YXJnZXQudHlwZSA9PT0gV0ku
VGFyZ2V0LlR5cGUuUGFnZSB8fCB0YXJnZXQgaW5zdGFuY2VvZiBXSS5EaXJlY3RCYWNrZW5kVGFy
Z2V0KTsKKworICAgICAgICBXSS5wYWdlVGFyZ2V0ID0gdGFyZ2V0OworCisgICAgICAgIHRoaXMu
X3JlZGlyZWN0R2xvYmFsQWdlbnRzVG9Db25uZWN0aW9uKFdJLnBhZ2VUYXJnZXQuY29ubmVjdGlv
bik7CisKKyAgICAgICAgdGhpcy5fcmVzZXRNYWluRXhlY3V0aW9uQ29udGV4dCgpOworICAgIH0K
KworICAgIF90cmFuc2l0aW9uUGFnZVRhcmdldCh0YXJnZXQpCisgICAgeworICAgICAgICBjb25z
b2xlLmFzc2VydCghV0kucGFnZVRhcmdldCk7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KFdJLnNo
YXJlZEFwcC5kZWJ1Z2dhYmxlVHlwZSA9PT0gV0kuRGVidWdnYWJsZVR5cGUuV2ViKTsKKyAgICAg
ICAgY29uc29sZS5hc3NlcnQodGFyZ2V0LnR5cGUgPT09IFdJLlRhcmdldC5UeXBlLlBhZ2UpOwor
CisgICAgICAgIFdJLnBhZ2VUYXJnZXQgPSB0YXJnZXQ7CisKKyAgICAgICAgdGhpcy5fcmVkaXJl
Y3RHbG9iYWxBZ2VudHNUb0Nvbm5lY3Rpb24oV0kucGFnZVRhcmdldC5jb25uZWN0aW9uKTsKKwor
ICAgICAgICB0aGlzLl9yZXNldE1haW5FeGVjdXRpb25Db250ZXh0KCk7CisKKyAgICAgICAgLy8g
QWN0aW9ucyB0byB0cmFuc2l0aW9uIHRoZSBwYWdlIHRhcmdldC4KKyAgICAgICAgV0kubm90aWZp
Y2F0aW9ucy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV0kuTm90aWZpY2F0aW9uLlRyYW5zaXRp
b25QYWdlVGFyZ2V0KTsKKyAgICAgICAgV0kuZG9tTWFuYWdlci50cmFuc2l0aW9uUGFnZVRhcmdl
dCgpOworICAgICAgICBXSS5uZXR3b3JrTWFuYWdlci50cmFuc2l0aW9uUGFnZVRhcmdldCgpOwor
ICAgICAgICBXSS50aW1lbGluZU1hbmFnZXIudHJhbnNpdGlvblBhZ2VUYXJnZXQoKTsKKyAgICB9
CisKKyAgICBfdGVybWluYXRlUGFnZVRhcmdldCh0YXJnZXQpCisgICAgeworICAgICAgICBjb25z
b2xlLmFzc2VydChXSS5wYWdlVGFyZ2V0KTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoV0kucGFn
ZVRhcmdldCA9PT0gdGFyZ2V0KTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoV0kuc2hhcmVkQXBw
LmRlYnVnZ2FibGVUeXBlID09PSBXSS5EZWJ1Z2dhYmxlVHlwZS5XZWIpOworCisgICAgICAgIC8v
IFJlbW92ZSBhbnkgV29ya2VyIHRhcmdldHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGFnZS4KKyAg
ICAgICAgbGV0IHdvcmtlclRhcmdldHMgPSBXSS50YXJnZXRzLmZpbHRlcigoeCkgPT4geC50eXBl
ID09PSBXSS5UYXJnZXQuVHlwZS5Xb3JrZXIpOworICAgICAgICBmb3IgKGxldCB3b3JrZXJUYXJn
ZXQgb2Ygd29ya2VyVGFyZ2V0cykKKyAgICAgICAgICAgIFdJLndvcmtlck1hbmFnZXIud29ya2Vy
VGVybWluYXRlZCh3b3JrZXJUYXJnZXQuaWRlbnRpZmllcik7CisKKyAgICAgICAgV0kucGFnZVRh
cmdldCA9IG51bGw7CisKKyAgICAgICAgdGhpcy5fcmVkaXJlY3RHbG9iYWxBZ2VudHNUb0Nvbm5l
Y3Rpb24oV0kuYmFja2VuZENvbm5lY3Rpb24pOworICAgIH0KKworICAgIF9yZXNldE1haW5FeGVj
dXRpb25Db250ZXh0KCkKKyAgICB7CisgICAgICAgIGlmIChXSS5tYWluVGFyZ2V0IGluc3RhbmNl
b2YgV0kuTXVsdGlwbGV4aW5nQmFja2VuZFRhcmdldCkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBpZiAoV0kubWFpblRhcmdldC5leGVjdXRpb25Db250ZXh0KSB7CisgICAgICAgICAg
ICBXSS5ydW50aW1lTWFuYWdlci5hY3RpdmVFeGVjdXRpb25Db250ZXh0ID0gV0kubWFpblRhcmdl
dC5leGVjdXRpb25Db250ZXh0OworICAgICAgICAgICAgaWYgKFdJLnF1aWNrQ29uc29sZSkKKyAg
ICAgICAgICAgICAgICBXSS5xdWlja0NvbnNvbGUuaW5pdGlhbGl6ZU1haW5FeGVjdXRpb25Db250
ZXh0UGF0aENvbXBvbmVudCgpOworICAgICAgICB9CisgICAgfQorCisgICAgX3JlZGlyZWN0R2xv
YmFsQWdlbnRzVG9Db25uZWN0aW9uKGNvbm5lY3Rpb24pCisgICAgeworICAgICAgICAvLyBUaGlz
IG1ha2VzIGdsb2JhbCB3aW5kb3cuRm9vQWdlbnQgZGlzcGF0Y2ggdG8gdGhlIGFjdGl2ZSBwYWdl
IHRhcmdldC4KKyAgICAgICAgZm9yIChsZXQgW2RvbWFpbiwgYWdlbnRdIG9mIE9iamVjdC5lbnRy
aWVzKEluc3BlY3RvckJhY2tlbmQuX2FnZW50cykpIHsKKyAgICAgICAgICAgIGlmIChkb21haW4g
IT09ICJUYXJnZXQiKQorICAgICAgICAgICAgICAgIGFnZW50LmNvbm5lY3Rpb24gPSBjb25uZWN0
aW9uOworICAgICAgICB9CisgICAgfTsKIH07CiAKIFdJLlRhcmdldE1hbmFnZXIuRXZlbnQgPSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Qcm90b2Nv
bC9Db25uZWN0aW9uLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvUHJv
dG9jb2wvQ29ubmVjdGlvbi5qcwppbmRleCBiMjczNzg3ZjNiMzU5OTU3MWQwYzBlOTgyMDMxMWVk
NTQ5MzZiM2Y2Li5hZWQ0NmNmMjRlZTlkMDAyOGUxNzgwNWM4ZWM4MDhhMzMzZjAzYjk3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Qcm90b2NvbC9Db25u
ZWN0aW9uLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3Rv
Y29sL0Nvbm5lY3Rpb24uanMKQEAgLTMwOCw4ICszMDgsMTIgQEAgSW5zcGVjdG9yQmFja2VuZC5X
b3JrZXJDb25uZWN0aW9uID0gY2xhc3MgSW5zcGVjdG9yQmFja2VuZFdvcmtlckNvbm5lY3Rpb24g
ZXh0ZW4KIAogICAgIHNlbmRNZXNzYWdlVG9CYWNrZW5kKG1lc3NhZ2UpCiAgICAgewotICAgICAg
ICAvLyBJZ25vcmUgZXJyb3JzIGlmIGEgd29ya2VyIHdlbnQgYXdheSBxdWlja2x5LgotICAgICAg
ICBXb3JrZXJBZ2VudC5zZW5kTWVzc2FnZVRvV29ya2VyKHRoaXMuX3dvcmtlcklkLCBtZXNzYWdl
KS5jYXRjaChmdW5jdGlvbigpe30pOworICAgICAgICBXb3JrZXJBZ2VudC5zZW5kTWVzc2FnZVRv
V29ya2VyKHRoaXMuX3dvcmtlcklkLCBtZXNzYWdlKS5jYXRjaCgoZXJyb3IpID0+IHsKKyAgICAg
ICAgICAgIC8vIElnbm9yZSBlcnJvcnMgaWYgYSB3b3JrZXIgd2VudCBhd2F5IHF1aWNrbHkuCisg
ICAgICAgICAgICBpZiAodGhpcy50YXJnZXQuaXNEZXN0cm95ZWQoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICBXSS5yZXBvcnRJbnRlcm5hbEVycm9yKGVycm9yKTsKKyAg
ICAgICAgfSk7CiAgICAgfQogfTsKIApAQCAtMzMyLDcgKzMzNiwxMyBAQCBJbnNwZWN0b3JCYWNr
ZW5kLlRhcmdldENvbm5lY3Rpb24gPSBjbGFzcyBJbnNwZWN0b3JCYWNrZW5kVGFyZ2V0Q29ubmVj
dGlvbiBleHRlbgogCiAgICAgc2VuZE1lc3NhZ2VUb0JhY2tlbmQobWVzc2FnZSkKICAgICB7Ci0g
ICAgICAgIFRhcmdldEFnZW50LnNlbmRNZXNzYWdlVG9UYXJnZXQodGhpcy5fdGFyZ2V0SWQsIG1l
c3NhZ2UpOworICAgICAgICBUYXJnZXRBZ2VudC5zZW5kTWVzc2FnZVRvVGFyZ2V0KHRoaXMuX3Rh
cmdldElkLCBtZXNzYWdlKS5jYXRjaCgoZXJyb3IpID0+IHsKKyAgICAgICAgICAgIC8vIENvbW1h
bmQgbWF5IGJlIHNlbnQgYWZ0ZXIgdGFyZ2V0IGlzIGFscmVhZHkgZGVzdHJveWVkIG9uIGJhY2tl
bmQsCisgICAgICAgICAgICAvLyBpZ25vcmUgc3VjaCBlcnJvcnMuCisgICAgICAgICAgICBpZiAo
dGhpcy50YXJnZXQuaXNEZXN0cm95ZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICBXSS5yZXBvcnRJbnRlcm5hbEVycm9yKGVycm9yKTsKKyAgICAgICAgfSk7CiAgICAg
fQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
UHJvdG9jb2wvVGFyZ2V0LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
UHJvdG9jb2wvVGFyZ2V0LmpzCmluZGV4IDIwMzM0MTBhNmI1MzM1OGViN2NhOTI1MTMxNzVkMzEy
YWFkMWE0NDguLmE5MzgyMGMwOTYzY2NhZTRmZDdiOGE4YmE3NzY0OGJjYzJiYzBiMWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL1Rhcmdl
dC5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Qcm90b2NvbC9U
YXJnZXQuanMKQEAgLTIwMCw2ICsyMDAsMTYgQEAgV0kuVGFyZ2V0ID0gY2xhc3MgVGFyZ2V0IGV4
dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdJ
LlRhcmdldC5FdmVudC5TY3JpcHRBZGRlZCwge3NjcmlwdH0pOwogICAgIH0KIAorICAgIGRlc3Ry
b3koKQorICAgIHsKKyAgICAgICAgdGhpcy5faXNEZXN0cm95ZWQgPSB0cnVlOworICAgIH0KKwor
ICAgIGlzRGVzdHJveWVkKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9pc0Rlc3Ryb3ll
ZDsKKyAgICB9CisKICAgICAvLyBQcml2YXRlCiAKICAgICBfc3VwcG9ydGVkRG9tYWluc0ZvclRh
cmdldFR5cGUodHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL1Byb3RvY29sL1RhcmdldE9ic2VydmVyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wvVGFyZ2V0T2JzZXJ2ZXIuanMKaW5kZXggMzFiNmZjZmMx
ODY5ZWQxMzg3ODFlMTA3MWRkMTliNTQ3YzA5Y2JmNC4uYzM0ZThhYTdmMzRkYzIyNjUxZTdmMWFj
MDA5N2NjNjFmMGJmZDk3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvUHJvdG9jb2wvVGFyZ2V0T2JzZXJ2ZXIuanMKKysrIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wvVGFyZ2V0T2JzZXJ2ZXIuanMKQEAgLTI2LDEy
ICsyNiwyMCBAQAogV0kuVGFyZ2V0T2JzZXJ2ZXIgPSBjbGFzcyBUYXJnZXRPYnNlcnZlcgogewog
ICAgIC8vIEV2ZW50cyBkZWZpbmVkIGJ5IHRoZSAiVGFyZ2V0IiBkb21haW4uCisgICAgY29uc3Ry
dWN0b3IoKQorICAgIHsKKyAgICB9CiAKICAgICB0YXJnZXRDcmVhdGVkKHRhcmdldEluZm8pCiAg
ICAgewogICAgICAgICBXSS50YXJnZXRNYW5hZ2VyLnRhcmdldENyZWF0ZWQodGFyZ2V0SW5mbyk7
CiAgICAgfQogCisgICAgZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQodGFyZ2V0SW5mbykKKyAg
ICB7CisgICAgICAgIFdJLnRhcmdldE1hbmFnZXIuZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQo
dGFyZ2V0SW5mbyk7CisgICAgfQorCiAgICAgdGFyZ2V0RGVzdHJveWVkKHRhcmdldElkKQogICAg
IHsKICAgICAgICAgV0kudGFyZ2V0TWFuYWdlci50YXJnZXREZXN0cm95ZWQodGFyZ2V0SWQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVGVzdC9UZXN0
LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVGVzdC9UZXN0LmpzCmlu
ZGV4IDc1NzA4YTAwYzk1ODE3MjdlZTBmNGMzODUzNDNhNGYyNDRiMjNkMzUuLmU1YzhlYTFiNjhl
NjA0OTU5ZDhlZjc3ZThmOGY5M2U2NTk2ZWM4MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Rlc3QvVGVzdC5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9UZXN0L1Rlc3QuanMKQEAgLTg2LDUyICs4Niw2IEBAIFdJLmxv
YWRlZCA9IGZ1bmN0aW9uKCkKICAgICB9KTsKIH07CiAKLVdJLmluaXRpYWxpemVCYWNrZW5kVGFy
Z2V0ID0gZnVuY3Rpb24odGFyZ2V0KQotewotICAgIFdJLmJhY2tlbmRUYXJnZXQgPSB0YXJnZXQ7
Ci0KLSAgICBXSS5yZXNldE1haW5FeGVjdXRpb25Db250ZXh0KCk7Ci0KLSAgICBXSS5fdGFyZ2V0
c0F2YWlsYWJsZVByb21pc2UucmVzb2x2ZSgpOwotfTsKLQotV0kuaW5pdGlhbGl6ZVBhZ2VUYXJn
ZXQgPSBmdW5jdGlvbih0YXJnZXQpCi17Ci0gICAgV0kucGFnZVRhcmdldCA9IHRhcmdldDsKLQot
ICAgIFdJLnJlZGlyZWN0R2xvYmFsQWdlbnRzVG9Db25uZWN0aW9uKFdJLnBhZ2VUYXJnZXQuY29u
bmVjdGlvbik7Ci0KLSAgICBXSS5yZXNldE1haW5FeGVjdXRpb25Db250ZXh0KCk7Ci19OwotCi1X
SS50cmFuc2l0aW9uUGFnZVRhcmdldCA9IGZ1bmN0aW9uKHRhcmdldCkKLXsKLSAgICBjb25zb2xl
LmVycm9yKCJXSS50cmFuc2l0aW9uUGFnZVRhcmdldCBzaG91bGQgbm90IGJlIHJlYWNoZWQgaW4g
dGVzdHMuIik7Ci19OwotCi1XSS50ZXJtaW5hdGVQYWdlVGFyZ2V0ID0gZnVuY3Rpb24odGFyZ2V0
KQotewotICAgIGNvbnNvbGUuZXJyb3IoIldJLnRlcm1pbmF0ZVBhZ2VUYXJnZXQgc2hvdWxkIG5v
dCBiZSByZWFjaGVkIGluIHRlc3RzLiIpOwotfTsKLQotV0kucmVzZXRNYWluRXhlY3V0aW9uQ29u
dGV4dCA9IGZ1bmN0aW9uKCkKLXsKLSAgICBpZiAoV0kubWFpblRhcmdldCBpbnN0YW5jZW9mIFdJ
Lk11bHRpcGxleGluZ0JhY2tlbmRUYXJnZXQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChX
SS5tYWluVGFyZ2V0LmV4ZWN1dGlvbkNvbnRleHQpCi0gICAgICAgIFdJLnJ1bnRpbWVNYW5hZ2Vy
LmFjdGl2ZUV4ZWN1dGlvbkNvbnRleHQgPSBXSS5tYWluVGFyZ2V0LmV4ZWN1dGlvbkNvbnRleHQ7
Ci19OwotCi1XSS5yZWRpcmVjdEdsb2JhbEFnZW50c1RvQ29ubmVjdGlvbiA9IGZ1bmN0aW9uKGNv
bm5lY3Rpb24pCi17Ci0gICAgLy8gVGhpcyBtYWtlcyBnbG9iYWwgd2luZG93LkZvb0FnZW50IGRp
c3BhdGNoIHRvIHRoZSBhY3RpdmUgcGFnZSB0YXJnZXQuCi0gICAgZm9yIChsZXQgW2RvbWFpbiwg
YWdlbnRdIG9mIE9iamVjdC5lbnRyaWVzKEluc3BlY3RvckJhY2tlbmQuX2FnZW50cykpIHsKLSAg
ICAgICAgaWYgKGRvbWFpbiAhPT0gIlRhcmdldCIpCi0gICAgICAgICAgICBhZ2VudC5jb25uZWN0
aW9uID0gY29ubmVjdGlvbjsKLSAgICB9Ci19OwotCiBXSS5jb250ZW50TG9hZGVkID0gZnVuY3Rp
b24oKQogewogICAgIC8vIFRoaW5ncyB0aGF0IHdvdWxkIG5vcm1hbGx5IGdldCBjYWxsZWQgYnkg
dGhlIFVJLCB0aGF0IHdlIHN0aWxsIHdhbnQgdG8gZG8gaW4gdGVzdHMuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAppbmRl
eCAzNzNkNjU1ZjEwYWY4YjM4MDM1Yjk2YmFjN2Q4ZjI5NTJiMGE2OGJhLi4yZmFmYzAyYTY4OTM1
MGE1ZTAyNTk4NzVhMTBlNGM4NmZiNDZhMGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1Nv
dXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKQEAgLTI4OCw3ICsyODgs
NiBAQCBVSVByb2Nlc3MvV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmNwcAogVUlQcm9j
ZXNzL1dlYlBhZ2VHcm91cC5jcHAKIFVJUHJvY2Vzcy9XZWJQYWdlSW5qZWN0ZWRCdW5kbGVDbGll
bnQuY3BwCiBVSVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuY3BwCi1VSVByb2Nl
c3MvV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50LmNwcAogVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHAKIFVJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkuY3BwCiBVSVByb2Nlc3MvV2ViUHJl
ZmVyZW5jZXMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJ
V2ViQXV0aGVudGljYXRpb25QYW5lbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
QVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5jcHAKaW5kZXggMDBkMmQxYTI0YzIxYzI5ZTI5NzU4
ZmIyZmZiYjVhYWNmNTdmM2JiZi4uY2UwYzJjMDFjZGIxMzg3OWMyOWVjYWE3MmQ1Y2Y2N2FlNWU0
MzhjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhl
bnRpY2F0aW9uUGFuZWwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElX
ZWJBdXRoZW50aWNhdGlvblBhbmVsLmNwcApAQCAtMzIsMTIgKzMyLDEyIEBACiAKIG5hbWVzcGFj
ZSBBUEkgewogCi1SZWY8V2ViQXV0aGVudGljYXRpb25QYW5lbD4gV2ViQXV0aGVudGljYXRpb25Q
YW5lbDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgcnBJZCkKK1JlZjxXZWJBdXRoZW50aWNhdGlvblBh
bmVsPiBXZWJBdXRoZW50aWNhdGlvblBhbmVsOjpjcmVhdGUoY29uc3QgV1RGOjpTdHJpbmcmIHJw
SWQpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViQXV0aGVudGljYXRpb25QYW5lbChy
cElkKSk7CiB9CiAKLVdlYkF1dGhlbnRpY2F0aW9uUGFuZWw6OldlYkF1dGhlbnRpY2F0aW9uUGFu
ZWwoY29uc3QgU3RyaW5nJiBycElkKQorV2ViQXV0aGVudGljYXRpb25QYW5lbDo6V2ViQXV0aGVu
dGljYXRpb25QYW5lbChjb25zdCBXVEY6OlN0cmluZyYgcnBJZCkKICAgICA6IG1fcnBJZChycElk
KQogICAgICwgbV9jbGllbnQoV1RGOjptYWtlVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFu
ZWxDbGllbnQ+KCkpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
QVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuaAppbmRleCA3NTA0ODg2YzA0YzAzM2FhMjZkMjVk
OGYxMzUwM2Q1ZjlmOTc1ODJmLi5jZDZlMjA3MTJhMjAxZWYyODg1Y2QxNzVlZTI3Mzg1N2RmZjU3
NDYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVu
dGljYXRpb25QYW5lbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJB
dXRoZW50aWNhdGlvblBhbmVsLmgKQEAgLTM4LDcgKzM4LDcgQEAgY2xhc3MgV2ViQXV0aGVudGlj
YXRpb25QYW5lbENsaWVudDsKIAogY2xhc3MgV2ViQXV0aGVudGljYXRpb25QYW5lbCBmaW5hbCA6
IHB1YmxpYyBPYmplY3RJbXBsPE9iamVjdDo6VHlwZTo6V2ViQXV0aGVudGljYXRpb25QYW5lbD4s
IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxXZWJBdXRoZW50aWNhdGlvblBhbmVsPiB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxXZWJBdXRoZW50aWNhdGlvblBhbmVsPiBjcmVhdGUoY29uc3QgU3Ry
aW5nJiBycElkKTsKKyAgICBzdGF0aWMgUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWw+IGNyZWF0
ZShjb25zdCBXVEY6OlN0cmluZyYgcnBJZCk7CiAgICAgfldlYkF1dGhlbnRpY2F0aW9uUGFuZWwo
KTsKIAogICAgIFdURjo6U3RyaW5nIHJwSWQoKSBjb25zdCB7IHJldHVybiBtX3JwSWQ7IH0KQEAg
LTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q2xpZW50KFVuaXF1ZVJlZjxXZWJB
dXRoZW50aWNhdGlvblBhbmVsQ2xpZW50PiYmKTsKIAogcHJpdmF0ZToKLSAgICBXZWJBdXRoZW50
aWNhdGlvblBhbmVsKGNvbnN0IFN0cmluZyYgcnBJZCk7CisgICAgV2ViQXV0aGVudGljYXRpb25Q
YW5lbChjb25zdCBXVEY6OlN0cmluZyYgcnBJZCk7CiAKICAgICBXVEY6OlN0cmluZyBtX3JwSWQ7
CiAgICAgVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+IG1fY2xpZW50Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yVGFyZ2V0UHJveHku
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yVGFyZ2V0UHJveHkuY3BwCmlu
ZGV4IDYxYjhmMzZlZmE3NTFmMWM4OGQ5MmJhMWFkY2QxNWVjYTYxNDU4MjIuLjFlYzk5N2JhODIz
OTYwY2I2NGIyMmE0YTM2ZGE5ZjQzZjViMzBhM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0luc3BlY3RvclRhcmdldFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9JbnNwZWN0b3JUYXJnZXRQcm94eS5jcHAKQEAgLTI2LDcgKzI2LDkgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JUYXJnZXRQcm94eS5oIgogCisjaW5j
bHVkZSAiUHJvdmlzaW9uYWxQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJGcmFtZVByb3h5Lmgi
CisjaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldC5oIgogI2luY2x1ZGUgIldlYlBhZ2VN
ZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nl
c3NQcm94eS5oIgpAQCAtMzUsOSArMzcsMTYgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHVzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKLVJlZjxJbnNwZWN0b3JUYXJnZXRQcm94eT4gSW5zcGVj
dG9yVGFyZ2V0UHJveHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IFN0cmluZyYg
dGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQorc3RkOjp1bmlx
dWVfcHRyPEluc3BlY3RvclRhcmdldFByb3h5PiBJbnNwZWN0b3JUYXJnZXRQcm94eTo6Y3JlYXRl
KFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5z
cGVjdG9yVGFyZ2V0UHJveHkocGFnZSwgdGFyZ2V0SWQsIHR5cGUpKTsKKyAgICByZXR1cm4gbWFr
ZVVuaXF1ZTxJbnNwZWN0b3JUYXJnZXRQcm94eT4ocGFnZSwgdGFyZ2V0SWQsIHR5cGUpOworfQor
CitzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJveHk+IEluc3BlY3RvclRhcmdldFBy
b3h5OjpjcmVhdGUoUHJvdmlzaW9uYWxQYWdlUHJveHkmIHByb3Zpc2lvbmFsUGFnZSwgY29uc3Qg
U3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUpCit7
CisgICAgYXV0byB0YXJnZXQgPSBJbnNwZWN0b3JUYXJnZXRQcm94eTo6Y3JlYXRlKHByb3Zpc2lv
bmFsUGFnZS5wYWdlKCksIHRhcmdldElkLCB0eXBlKTsKKyAgICB0YXJnZXQtPm1fcHJvdmlzaW9u
YWxQYWdlID0gbWFrZVdlYWtQdHIocHJvdmlzaW9uYWxQYWdlKTsKKyAgICByZXR1cm4gdGFyZ2V0
OwogfQogCiBJbnNwZWN0b3JUYXJnZXRQcm94eTo6SW5zcGVjdG9yVGFyZ2V0UHJveHkoV2ViUGFn
ZVByb3h5JiBwYWdlLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3Rv
clRhcmdldFR5cGUgdHlwZSkKQEAgLTQ3LDIyICs1Niw1NiBAQCBJbnNwZWN0b3JUYXJnZXRQcm94
eTo6SW5zcGVjdG9yVGFyZ2V0UHJveHkoV2ViUGFnZVByb3h5JiBwYWdlLCBjb25zdCBTdHJpbmcm
IHRhcgogewogfQogCi12b2lkIEluc3BlY3RvclRhcmdldFByb3h5Ojpjb25uZWN0KEluc3BlY3Rv
cjo6RnJvbnRlbmRDaGFubmVsJiBjaGFubmVsKQordm9pZCBJbnNwZWN0b3JUYXJnZXRQcm94eTo6
Y29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUgY29ubmVj
dGlvblR5cGUpCiB7CisgICAgaWYgKG1fcHJvdmlzaW9uYWxQYWdlKSB7CisgICAgICAgIG1fcHJv
dmlzaW9uYWxQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q29ubmVjdElu
c3BlY3RvcihpZGVudGlmaWVyKCksIGNvbm5lY3Rpb25UeXBlKSwgbV9wcm92aXNpb25hbFBhZ2Ut
PndlYlBhZ2VJRCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChtX3BhZ2Uu
aGFzUnVubmluZ1Byb2Nlc3MoKSkKLSAgICAgICAgbV9wYWdlLnByb2Nlc3MoKS5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpDb25uZWN0SW5zcGVjdG9yKGlkZW50aWZpZXIoKSwgY2hhbm5lbC5jb25u
ZWN0aW9uVHlwZSgpKSwgbV9wYWdlLndlYlBhZ2VJRCgpKTsKKyAgICAgICAgbV9wYWdlLnByb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDb25uZWN0SW5zcGVjdG9yKGlkZW50aWZpZXIo
KSwgY29ubmVjdGlvblR5cGUpLCBtX3BhZ2Uud2ViUGFnZUlEKCkpOwogfQogCi12b2lkIEluc3Bl
Y3RvclRhcmdldFByb3h5OjpkaXNjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJikK
K3ZvaWQgSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmRpc2Nvbm5lY3QoKQogeworICAgIGlmIChtX3By
b3Zpc2lvbmFsUGFnZSkgeworICAgICAgICBtX3Byb3Zpc2lvbmFsUGFnZS0+cHJvY2VzcygpLnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpc2Nvbm5lY3RJbnNwZWN0b3IoaWRlbnRpZmllcigpKSwg
bV9wcm92aXNpb25hbFBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KwogICAgIGlmIChtX3BhZ2UuaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgbV9wYWdlLnBy
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaXNjb25uZWN0SW5zcGVjdG9yKGlkZW50
aWZpZXIoKSksIG1fcGFnZS53ZWJQYWdlSUQoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yVGFyZ2V0
UHJveHk6OnNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
IHsKKyAgICBpZiAobV9wcm92aXNpb25hbFBhZ2UpIHsKKyAgICAgICAgbV9wcm92aXNpb25hbFBh
Z2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZW5kTWVzc2FnZVRvVGFyZ2V0
QmFja2VuZChpZGVudGlmaWVyKCksIG1lc3NhZ2UpLCBtX3Byb3Zpc2lvbmFsUGFnZS0+d2ViUGFn
ZUlEKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKG1fcGFnZS5oYXNSdW5u
aW5nUHJvY2VzcygpKQogICAgICAgICBtX3BhZ2UucHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OlNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGlkZW50aWZpZXIoKSwgbWVzc2FnZSks
IG1fcGFnZS53ZWJQYWdlSUQoKSk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmRp
ZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0KCkKK3sKKyAgICBBU1NFUlQoaXNQcm92aXNpb25hbCgp
KTsKKyAgICBtX3Byb3Zpc2lvbmFsUGFnZSA9IG51bGxwdHI7Cit9CisKK2Jvb2wgSW5zcGVjdG9y
VGFyZ2V0UHJveHk6OmlzUHJvdmlzaW9uYWwoKSBjb25zdAoreworICAgIHJldHVybiAhIW1fcHJv
dmlzaW9uYWxQYWdlOworfQorCitTdHJpbmcgSW5zcGVjdG9yVGFyZ2V0UHJveHk6OnByZXZpb3Vz
VGFyZ2V0SUQoKSBjb25zdAoreworICAgIGlmIChtX3R5cGUgIT0gSW5zcGVjdG9yOjpJbnNwZWN0
b3JUYXJnZXRUeXBlOjpQYWdlIHx8ICFpc1Byb3Zpc2lvbmFsKCkpCisgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKKworICAgIHJldHVybiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojp0b1RhcmdldElE
KG1fcGFnZS53ZWJQYWdlSUQoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yVGFyZ2V0UHJveHkuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3RvclRhcmdldFByb3h5LmgKaW5kZXggZDM4MmIw
MjY1MDljODM5NTE5OWFiZGQ0OTVhZjZhMmE1MWFmOTI3Yy4uNDNmNjhmYjAwNTljNTVmMmY3ZDNh
OGEyZTNmMTFhZDExODMzYWM3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yVGFyZ2V0UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNw
ZWN0b3JUYXJnZXRQcm94eS5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JUYXJnZXQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
KyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtMzUs
MjUgKzM2LDMxIEBAIGNsYXNzIFdlYlBhZ2VQcm94eTsKIC8vIE5PVEU6IFRoaXMgVUlQcm9jZXNz
IHNpZGUgSW5zcGVjdG9yVGFyZ2V0IGRvZXNuJ3QgY2FyZSBhYm91dCB0aGUgZnJvbnRlbmQgY2hh
bm5lbCwgc2luY2UKIC8vIGFueSB0YXJnZXQgLT4gZnJvbnRlbmQgbWVzc2FnZXMgd2lsbCBiZSBy
b3V0ZWQgdG8gdGhlIFdlYlBhZ2VQcm94eSB3aXRoIGEgdGFyZ2V0SWQuCiAKLWNsYXNzIEluc3Bl
Y3RvclRhcmdldFByb3h5IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0
LCBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JUYXJnZXRQcm94eT4geworY2xhc3MgSW5zcGVj
dG9yVGFyZ2V0UHJveHkgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXQg
ewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEluc3BlY3RvclRhcmdldFByb3h5KTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEluc3BlY3Rv
clRhcmdldFByb3h5PiBjcmVhdGUoV2ViUGFnZVByb3h5JiwgY29uc3QgU3RyaW5nJiB0YXJnZXRJ
ZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPEluc3BlY3RvclRhcmdldFByb3h5PiBjcmVhdGUoV2ViUGFnZVByb3h5JiwgY29uc3Qg
U3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlKTsKKyAgICBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvclRhcmdldFByb3h5PiBjcmVhdGUoUHJvdmlz
aW9uYWxQYWdlUHJveHkmLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3Bl
Y3RvclRhcmdldFR5cGUpOwogICAgIEluc3BlY3RvclRhcmdldFByb3h5KFdlYlBhZ2VQcm94eSYs
IGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSk7
CiAgICAgfkluc3BlY3RvclRhcmdldFByb3h5KCkgPSBkZWZhdWx0OwogCiAgICAgSW5zcGVjdG9y
OjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3R5cGU7
IH0KICAgICBTdHJpbmcgaWRlbnRpZmllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faWRlbnRp
ZmllcjsgfQogCi0gICAgdm9pZCBjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJik7
Ci0gICAgdm9pZCBkaXNjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJik7Ci0gICAg
dm9pZCBzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lk
IGRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0KCk7CisgICAgYm9vbCBpc1Byb3Zpc2lvbmFsKCkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHByZXZpb3VzVGFyZ2V0SUQoKSBjb25zdCBvdmVy
cmlkZTsKKworICAgIHZvaWQgY29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29u
bmVjdGlvblR5cGUpIG92ZXJyaWRlOworICAgIHZvaWQgZGlzY29ubmVjdCgpIG92ZXJyaWRlOwor
ICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoY29uc3QgU3RyaW5nJikgb3ZlcnJp
ZGU7CiAKIHByaXZhdGU6CiAgICAgV2ViUGFnZVByb3h5JiBtX3BhZ2U7CiAgICAgU3RyaW5nIG1f
aWRlbnRpZmllcjsKICAgICBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUgbV90eXBlOwor
ICAgIFdlYWtQdHI8UHJvdmlzaW9uYWxQYWdlUHJveHk+IG1fcHJvdmlzaW9uYWxQYWdlOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Q
cm92aXNpb25hbFBhZ2VQcm94eS5jcHAKaW5kZXggYTJhMDlkYzQ5MjVkZjQyZTU0ODQ0NTBiZWY0
Nzk3OGMwMzk3ZjllNS4uOTA5ZDQ5YWQ4OTI1ODIxODI3OWM5NTEzYjMwNTE3ZmI2MzA1MWIyOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5LmNw
cApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIldlYkVycm9ycy5oIgogI2luY2x1ZGUgIldl
Yk5hdmlnYXRpb25EYXRhU3RvcmUuaCIKICNpbmNsdWRlICJXZWJOYXZpZ2F0aW9uU3RhdGUuaCIK
KyNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIldlYlBh
Z2VNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlBh
Z2VQcm94eU1lc3NhZ2VzLmgiCkBAIC04NCw2ICs4NSw4IEBAIFByb3Zpc2lvbmFsUGFnZVByb3h5
OjpQcm92aXNpb25hbFBhZ2VQcm94eShXZWJQYWdlUHJveHkmIHBhZ2UsIFJlZjxXZWJQcm9jZXNz
UHJvCiAgICAgfQogCiAgICAgaW5pdGlhbGl6ZVdlYlBhZ2UoKTsKKworICAgIG1fcGFnZS5pbnNw
ZWN0b3JDb250cm9sbGVyKCkuZGlkQ3JlYXRlUHJvdmlzaW9uYWxQYWdlKCp0aGlzKTsKIH0KIAog
UHJvdmlzaW9uYWxQYWdlUHJveHk6On5Qcm92aXNpb25hbFBhZ2VQcm94eSgpCkBAIC05Myw2ICs5
Niw4IEBAIFByb3Zpc2lvbmFsUGFnZVByb3h5Ojp+UHJvdmlzaW9uYWxQYWdlUHJveHkoKQogICAg
IGlmIChtX3dhc0NvbW1pdHRlZCkKICAgICAgICAgcmV0dXJuOwogCisgICAgbV9wYWdlLmluc3Bl
Y3RvckNvbnRyb2xsZXIoKS53aWxsRGVzdHJveVByb3Zpc2lvbmFsUGFnZSgqdGhpcyk7CisKICAg
ICBpZiAoJm1fcHJvY2Vzcy0+d2Vic2l0ZURhdGFTdG9yZSgpICE9ICZtX3BhZ2Uud2Vic2l0ZURh
dGFTdG9yZSgpKQogICAgICAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkucGFnZUVuZFVzaW5n
V2Vic2l0ZURhdGFTdG9yZShtX3BhZ2UuaWRlbnRpZmllcigpLCBtX3Byb2Nlc3MtPndlYnNpdGVE
YXRhU3RvcmUoKSk7CiAKQEAgLTM5MSw2ICszOTYsOSBAQCB2b2lkIFByb3Zpc2lvbmFsUGFnZVBy
b3h5OjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6
RAogICAgICAgICB8fCBkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6RGlkU3RhcnRMb2FkRm9yUXVpY2tMb29rRG9jdW1lbnRJbk1haW5GcmFtZTo6bmFtZSgp
CiAgICAgICAgIHx8IGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpEaWRGaW5pc2hMb2FkRm9yUXVpY2tMb29rRG9jdW1lbnRJbk1haW5GcmFtZTo6bmFtZSgp
CiAjZW5kaWYKKyAgICAgICAgfHwgZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OkNyZWF0ZUluc3BlY3RvclRhcmdldDo6bmFtZSgpCisgICAgICAgIHx8IGRl
Y29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEZXN0cm95SW5z
cGVjdG9yVGFyZ2V0OjpuYW1lKCkKKyAgICAgICAgfHwgZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09
IE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNlbmRNZXNzYWdlVG9JbnNwZWN0b3JGcm9udGVuZDo6
bmFtZSgpCiAgICAgICAgICkKICAgICB7CiAgICAgICAgIG1fcGFnZS5kaWRSZWNlaXZlTWVzc2Fn
ZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Qcm92
aXNpb25hbFBhZ2VQcm94eS5oCmluZGV4IDE3NTIxNTA0NzQ4YmZiNmYyMDYzY2UxNGNhNDVmZDFj
YzcxODNlY2IuLmJlZTgxYmMwYmQ5ZDcxYjRhNjhkZjRmOGI5ZTQ3MzZiZDI5YThjZmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5LmgKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuaApAQCAtNjQs
NyArNjQsNyBAQCBwdWJsaWM6CiAgICAgUHJvdmlzaW9uYWxQYWdlUHJveHkoV2ViUGFnZVByb3h5
JiwgUmVmPFdlYlByb2Nlc3NQcm94eT4mJiwgc3RkOjp1bmlxdWVfcHRyPFN1c3BlbmRlZFBhZ2VQ
cm94eT4sIHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgYm9vbCBpc1NlcnZlclJlZGlyZWN0LCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50
KTsKICAgICB+UHJvdmlzaW9uYWxQYWdlUHJveHkoKTsKIAotICAgIFdlYlBhZ2VQcm94eSYgcGFn
ZSgpIHsgcmV0dXJuIG1fcGFnZTsgfQorICAgIFdlYlBhZ2VQcm94eSYgcGFnZSgpIGNvbnN0IHsg
cmV0dXJuIG1fcGFnZTsgfQogICAgIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIHdlYlBhZ2VJRCgp
IGNvbnN0IHsgcmV0dXJuIG1fd2ViUGFnZUlEOyB9CiAgICAgV2ViRnJhbWVQcm94eSogbWFpbkZy
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9tYWluRnJhbWUuZ2V0KCk7IH0KICAgICBXZWJQcm9jZXNz
UHJveHkmIHByb2Nlc3MoKSB7IHJldHVybiBtX3Byb2Nlc3MuZ2V0KCk7IH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmNwcCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmNwcApp
bmRleCBiZGE1OWNkODA1MTU3NjQ2YjMwOGQyZmQyMzZmM2QxMTgyNzFlMGI2Li4yZDljNTgwMjBi
MWIxNGE4YmFkZGRjMTNmNWY3NWVmZGMwNjA3ZjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0yNiwzMCAr
MjYsNDQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9y
Q29udHJvbGxlci5oIgogCisjaW5jbHVkZSAiUHJvdmlzaW9uYWxQYWdlUHJveHkuaCIKICNpbmNs
dWRlICJXZWJGcmFtZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldEFn
ZW50LmgiCisjaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldC5oIgogI2luY2x1ZGUgIldl
YlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFnZW50QmFz
ZS5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJz
Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oPgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiB1c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOwogCitzdGF0aWMgU3RyaW5nIGdldFRhcmdldElEKGNvbnN0IFByb3Zpc2lv
bmFsUGFnZVByb3h5JiBwcm92aXNpb25hbFBhZ2UpCit7CisgICAgcmV0dXJuIFdlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXQ6OnRvVGFyZ2V0SUQocHJvdmlzaW9uYWxQYWdlLndlYlBhZ2VJRCgpKTsKK30K
KwogV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OldlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVy
KFdlYlBhZ2VQcm94eSYgcGFnZSkKICAgICA6IG1fcGFnZShwYWdlKQogICAgICwgbV9mcm9udGVu
ZFJvdXRlcihGcm9udGVuZFJvdXRlcjo6Y3JlYXRlKCkpCiAgICAgLCBtX2JhY2tlbmREaXNwYXRj
aGVyKEJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUobV9mcm9udGVuZFJvdXRlci5jb3B5UmVmKCkp
KQogewotICAgIGF1dG8gdGFyZ2V0QWdlbnQgPSBtYWtlVW5pcXVlPFdlYlBhZ2VJbnNwZWN0b3JU
YXJnZXRBZ2VudD4obV9mcm9udGVuZFJvdXRlci5nZXQoKSwgbV9iYWNrZW5kRGlzcGF0Y2hlci5n
ZXQoKSk7CisgICAgYXV0byB0YXJnZXRBZ2VudCA9IG1ha2VVbmlxdWU8SW5zcGVjdG9yVGFyZ2V0
QWdlbnQ+KG1fZnJvbnRlbmRSb3V0ZXIuZ2V0KCksIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCkp
OwogCiAgICAgbV90YXJnZXRBZ2VudCA9IHRhcmdldEFnZW50LmdldCgpOwogCiAgICAgbV9hZ2Vu
dHMuYXBwZW5kKFdURk1vdmUodGFyZ2V0QWdlbnQpKTsKIH0KIAordm9pZCBXZWJQYWdlSW5zcGVj
dG9yQ29udHJvbGxlcjo6aW5pdCgpCit7CisgICAgU3RyaW5nIHBhZ2VUYXJnZXRJZCA9IFdlYlBh
Z2VJbnNwZWN0b3JUYXJnZXQ6OnRvVGFyZ2V0SUQobV9wYWdlLndlYlBhZ2VJRCgpKTsKKyAgICBj
cmVhdGVJbnNwZWN0b3JUYXJnZXQocGFnZVRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRh
cmdldFR5cGU6OlBhZ2UpOworfQorCiB2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpw
YWdlQ2xvc2VkKCkKIHsKICAgICBkaXNjb25uZWN0QWxsRnJvbnRlbmRzKCk7CkBAIC0xMzQsMzcg
KzE0OCw1NyBAQCB2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbmRpY2F0aW5n
KGJvb2wgaW5kaWNhdGluZykKIH0KICNlbmRpZgogCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250
cm9sbGVyOjpjbGVhclRhcmdldHMoKQordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6
Y3JlYXRlSW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6
SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQogewotICAgIGZvciAoYXV0byYgdGFyZ2V0IDogbV90
YXJnZXRzKQotICAgICAgICBtX3RhcmdldEFnZW50LT50YXJnZXREZXN0cm95ZWQoKnRhcmdldC5n
ZXQoKSk7Ci0KLSAgICBtX3RhcmdldHMuY2xlYXIoKTsKKyAgICBhZGRUYXJnZXQoSW5zcGVjdG9y
VGFyZ2V0UHJveHk6OmNyZWF0ZShtX3BhZ2UsIHRhcmdldElkLCB0eXBlKSk7CiB9CiAKLXZvaWQg
V2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmNyZWF0ZUluc3BlY3RvclRhcmdldChjb25zdCBT
dHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUgdHlwZSkKK3Zv
aWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmRlc3Ryb3lJbnNwZWN0b3JUYXJnZXQoY29u
c3QgU3RyaW5nJiB0YXJnZXRJZCkKIHsKLSAgICBhdXRvIHRhcmdldCA9IEluc3BlY3RvclRhcmdl
dFByb3h5OjpjcmVhdGUobV9wYWdlLCB0YXJnZXRJZCwgdHlwZSk7Ci0gICAgbV90YXJnZXRzLmFw
cGVuZCh0YXJnZXQuY29weVJlZigpKTsKKyAgICBhdXRvIGl0ID0gbV90YXJnZXRzLmZpbmQodGFy
Z2V0SWQpOworICAgIGlmIChpdCA9PSBtX3RhcmdldHMuZW5kKCkpCisgICAgICAgIHJldHVybjsK
KyAgICBtX3RhcmdldEFnZW50LT50YXJnZXREZXN0cm95ZWQoKml0LT52YWx1ZSk7CisgICAgbV90
YXJnZXRzLnJlbW92ZShpdCk7Cit9CiAKLSAgICBtX3RhcmdldEFnZW50LT50YXJnZXRDcmVhdGVk
KHRhcmdldC5nZXQoKSk7Cit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpzZW5kTWVz
c2FnZVRvSW5zcGVjdG9yRnJvbnRlbmQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKQoreworICAgIG1fdGFyZ2V0QWdlbnQtPnNlbmRNZXNzYWdlRnJvbVRhcmdl
dFRvRnJvbnRlbmQodGFyZ2V0SWQsIG1lc3NhZ2UpOwogfQogCi12b2lkIFdlYlBhZ2VJbnNwZWN0
b3JDb250cm9sbGVyOjpkZXN0cm95SW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0
SWQpCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDcmVhdGVQcm92aXNpb25h
bFBhZ2UoUHJvdmlzaW9uYWxQYWdlUHJveHkmIHByb3Zpc2lvbmFsUGFnZSkKIHsKLSAgICBhdXRv
IHBvc2l0aW9uID0gbV90YXJnZXRzLmZpbmRNYXRjaGluZyhbJl0oY29uc3QgYXV0byYgaXRlbSkg
eyByZXR1cm4gaXRlbS0+aWRlbnRpZmllcigpID09IHRhcmdldElkOyB9KTsKLSAgICBpZiAocG9z
aXRpb24gPT0gbm90Rm91bmQpCi0gICAgICAgIHJldHVybjsKKyAgICBhZGRUYXJnZXQoSW5zcGVj
dG9yVGFyZ2V0UHJveHk6OmNyZWF0ZShwcm92aXNpb25hbFBhZ2UsIGdldFRhcmdldElEKHByb3Zp
c2lvbmFsUGFnZSksIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZTo6UGFnZSkpOworfQog
Ci0gICAgYXV0byYgdGFyZ2V0ID0gbV90YXJnZXRzW3Bvc2l0aW9uXTsKLSAgICBtX3RhcmdldEFn
ZW50LT50YXJnZXREZXN0cm95ZWQoKnRhcmdldC5nZXQoKSk7Cit2b2lkIFdlYlBhZ2VJbnNwZWN0
b3JDb250cm9sbGVyOjp3aWxsRGVzdHJveVByb3Zpc2lvbmFsUGFnZShjb25zdCBQcm92aXNpb25h
bFBhZ2VQcm94eSYgcHJvdmlzaW9uYWxQYWdlKQoreworICAgIGRlc3Ryb3lJbnNwZWN0b3JUYXJn
ZXQoZ2V0VGFyZ2V0SUQocHJvdmlzaW9uYWxQYWdlKSk7Cit9CiAKLSAgICBtX3RhcmdldHMucmVt
b3ZlKHBvc2l0aW9uKTsKK3ZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1p
dFByb3Zpc2lvbmFsUGFnZShXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBvbGRXZWJQYWdlSUQsIFdl
YkNvcmU6OlBhZ2VJZGVudGlmaWVyIG5ld1dlYlBhZ2VJRCkKK3sKKyAgICBTdHJpbmcgb2xkSUQg
PSBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojp0b1RhcmdldElEKG9sZFdlYlBhZ2VJRCk7CisgICAg
U3RyaW5nIG5ld0lEID0gV2ViUGFnZUluc3BlY3RvclRhcmdldDo6dG9UYXJnZXRJRChuZXdXZWJQ
YWdlSUQpOworICAgIGF1dG8gbmV3VGFyZ2V0ID0gbV90YXJnZXRzLnRha2UobmV3SUQpOworICAg
IEFTU0VSVChuZXdUYXJnZXQpOworICAgIG5ld1RhcmdldC0+ZGlkQ29tbWl0UHJvdmlzaW9uYWxU
YXJnZXQoKTsKKyAgICBtX3RhcmdldEFnZW50LT5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldChv
bGRJRCwgbmV3SUQpOworCisgICAgLy8gV2UndmUgZGlzY29ubmVjdGVkIGZyb20gdGhlIG9sZCBw
YWdlIGFuZCB3aWxsIG5vdCByZWNlaXZlIGFueSBtZXNzYWdlIGZyb20gaXQsIHNvCisgICAgLy8g
d2UgZGVzdHJveSBldmVyeXRoaW5nIGJ1dCB0aGUgbmV3IHRhcmdldCBoZXJlLgorICAgIC8vIEZJ
WE1FOiBkbyBub3QgZGVzdHJveSB0YXJnZXRzIHRoYXQgYmVsb25nIHRvIHRoZSBjb21taXR0ZWQg
cGFnZS4KKyAgICBmb3IgKGF1dG8mIHRhcmdldCA6IG1fdGFyZ2V0cy52YWx1ZXMoKSkKKyAgICAg
ICAgbV90YXJnZXRBZ2VudC0+dGFyZ2V0RGVzdHJveWVkKCp0YXJnZXQpOworICAgIG1fdGFyZ2V0
cy5jbGVhcigpOworICAgIG1fdGFyZ2V0cy5zZXQobmV3VGFyZ2V0LT5pZGVudGlmaWVyKCksIFdU
Rk1vdmUobmV3VGFyZ2V0KSk7CiB9CiAKLXZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6
OnNlbmRNZXNzYWdlVG9JbnNwZWN0b3JGcm9udGVuZChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjph
ZGRUYXJnZXQoc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvclRhcmdldFByb3h5PiYmIHRhcmdldCkK
IHsKLSAgICBtX3RhcmdldEFnZW50LT5zZW5kTWVzc2FnZUZyb21UYXJnZXRUb0Zyb250ZW5kKHRh
cmdldElkLCBtZXNzYWdlKTsKKyAgICBtX3RhcmdldEFnZW50LT50YXJnZXRDcmVhdGVkKCp0YXJn
ZXQpOworICAgIG1fdGFyZ2V0cy5zZXQodGFyZ2V0LT5pZGVudGlmaWVyKCksIFdURk1vdmUodGFy
Z2V0KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggMGNhZjZhMWMy
NzkyMDQzZDNiZTA1NzFhMjhmZGIxZTE0MTk3YTYxMS4uYTcwZGNlNzViZGVlMDdjMjMyYjhiYTM1
ZGZjYzA4ZDE2MWI2MDcxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC00Niw2ICs0Niw3IEBAIGNsYXNzIFdlYlBh
Z2VJbnNwZWN0b3JDb250cm9sbGVyIHsKIHB1YmxpYzoKICAgICBXZWJQYWdlSW5zcGVjdG9yQ29u
dHJvbGxlcihXZWJQYWdlUHJveHkmKTsKIAorICAgIHZvaWQgaW5pdCgpOwogICAgIHZvaWQgcGFn
ZUNsb3NlZCgpOwogCiAgICAgYm9vbCBoYXNMb2NhbEZyb250ZW5kKCkgY29uc3Q7CkBAIC02MCwx
OCArNjEsMjMgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SW5kaWNhdGluZyhib29sKTsKICNlbmRp
ZgogCi0gICAgdm9pZCBjbGVhclRhcmdldHMoKTsKICAgICB2b2lkIGNyZWF0ZUluc3BlY3RvclRh
cmdldChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5
cGUpOwogICAgIHZvaWQgZGVzdHJveUluc3BlY3RvclRhcmdldChjb25zdCBTdHJpbmcmIHRhcmdl
dElkKTsKICAgICB2b2lkIHNlbmRNZXNzYWdlVG9JbnNwZWN0b3JGcm9udGVuZChjb25zdCBTdHJp
bmcmIHRhcmdldElkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwogCisgICAgdm9pZCBkaWRDcmVh
dGVQcm92aXNpb25hbFBhZ2UoUHJvdmlzaW9uYWxQYWdlUHJveHkmKTsKKyAgICB2b2lkIHdpbGxE
ZXN0cm95UHJvdmlzaW9uYWxQYWdlKGNvbnN0IFByb3Zpc2lvbmFsUGFnZVByb3h5Jik7CisgICAg
dm9pZCBkaWRDb21taXRQcm92aXNpb25hbFBhZ2UoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgb2xk
V2ViUGFnZUlELCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBuZXdXZWJQYWdlSUQpOworCiBwcml2
YXRlOgorICAgIHZvaWQgYWRkVGFyZ2V0KHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQ
cm94eT4mJik7CisKICAgICBXZWJQYWdlUHJveHkmIG1fcGFnZTsKICAgICBSZWY8SW5zcGVjdG9y
OjpGcm9udGVuZFJvdXRlcj4gbV9mcm9udGVuZFJvdXRlcjsKICAgICBSZWY8SW5zcGVjdG9yOjpC
YWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKICAgICBJbnNwZWN0b3I6OkFn
ZW50UmVnaXN0cnkgbV9hZ2VudHM7CiAgICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRBZ2Vu
dCogbV90YXJnZXRBZ2VudDsKLSAgICBWZWN0b3I8UmVmUHRyPEluc3BlY3RvclRhcmdldFByb3h5
Pj4gbV90YXJnZXRzOworICAgIEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVj
dG9yVGFyZ2V0UHJveHk+PiBtX3RhcmdldHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0QWdlbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTAwMWMwOGQwMmY3
ZWQ2YzAwODU2NmY3YWY4OWEzODFjZGVkMjE1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0
b3JUYXJnZXRBZ2VudC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRBZ2VudC5oIgotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50OjpXZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0QWdlbnQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIsIElu
c3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyKQotICAgIDogSW5z
cGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRBZ2VudChmcm9udGVuZFJvdXRlciwgYmFja2VuZERpc3Bh
dGNoZXIpCi0gICAgLCBtX3JvdXRlcihmcm9udGVuZFJvdXRlcikKLXsKLX0KLQotV2ViUGFnZUlu
c3BlY3RvclRhcmdldEFnZW50Ojp+V2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50KCkgPSBkZWZh
dWx0OwotCi1JbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYgV2ViUGFnZUluc3BlY3RvclRhcmdl
dEFnZW50Ojpmcm9udGVuZENoYW5uZWwoKQotewotICAgIHJldHVybiAqdGhpczsKLX0KLQotSW5z
cGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlIFdlYlBhZ2VJbnNwZWN0b3JU
YXJnZXRBZ2VudDo6Y29ubmVjdGlvblR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBtX3JvdXRl
ci5oYXNMb2NhbEZyb250ZW5kKCkgPyBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVj
dGlvblR5cGU6OkxvY2FsIDogSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25U
eXBlOjpSZW1vdGU7Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50OjpzZW5k
TWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJikKLXsKLSAgICAvLyBJbnRlbnRpb25hbGx5
IGlnbm9yZWQsIHRoaXMgY2hhbm5lbCBpcyBub3QgYWN0dWFsbHkgdXNlZCB0byBzZW5kIG1lc3Nh
Z2VzLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JU
YXJnZXRBZ2VudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvclRh
cmdldEFnZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2M2Y5YzNjY2NlYTU0
ODdhNGNlMjkzZWM1ZTA4M2E4Y2M4YjUxNTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZUluc3BlY3Rv
clRhcmdldEFnZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oPgotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotY2xhc3MgV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50IGZpbmFsIDogcHVibGlj
IEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0QWdlbnQsIHB1YmxpYyBJbnNwZWN0b3I6OkZyb250
ZW5kQ2hhbm5lbCB7Ci1wdWJsaWM6Ci0gICAgV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50KElu
c3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXImLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyJik7
Ci0gICAgdmlydHVhbCB+V2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50KCk7Ci0KLSAgICAvLyBJ
bnNwZWN0b3JUYXJnZXRBZ2VudAotICAgIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJiBmcm9u
dGVuZENoYW5uZWwoKTsKLQotICAgIC8vIEZyb250ZW5kQ2hhbm5lbAotICAgIEluc3BlY3Rvcjo6
RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSgpIGNvbnN0Owot
ICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYpOwotCi1wcml2YXRl
OgotICAgIEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXImIG1fcm91dGVyOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApp
bmRleCAwNDE4MmI5OGNhMjA3ZmMyMmE3NGRlMTkxMDY3ZDU4NTU2YmI4NDZhLi40NTEwMWIxMzhk
MTEzNzYzOTk3ZDlmMzNhNTVlNWEyZmFlMzE2Mzk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHAKQEAgLTQ5MSw4ICs0OTEsNyBAQCBXZWJQYWdlUHJveHk6OldlYlBh
Z2VQcm94eShQYWdlQ2xpZW50JiBwYWdlQ2xpZW50LCBXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3Ms
IFJlZgogICAgIG1faW5zcGVjdG9yRGVidWdnYWJsZS0+c2V0UmVtb3RlRGVidWdnaW5nQWxsb3dl
ZCh0cnVlKTsKICAgICBtX2luc3BlY3RvckRlYnVnZ2FibGUtPmluaXQoKTsKICNlbmRpZgotCi0g
ICAgY3JlYXRlSW5zcGVjdG9yVGFyZ2V0cygpOworICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+
aW5pdCgpOwogfQogCiBXZWJQYWdlUHJveHk6On5XZWJQYWdlUHJveHkoKQpAQCAtODQyLDkgKzg0
MSw2IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpmaW5pc2hBdHRhY2hpbmdUb1dlYlByb2Nlc3MoUHJv
Y2Vzc0xhdW5jaFJlYXNvbiByZWFzb24pCiAgICAgcmVtb3RlSW5zcGVjdG9ySW5mb3JtYXRpb25E
aWRDaGFuZ2UoKTsKICNlbmRpZgogCi0gICAgY2xlYXJJbnNwZWN0b3JUYXJnZXRzKCk7Ci0gICAg
Y3JlYXRlSW5zcGVjdG9yVGFyZ2V0cygpOwotCiAgICAgcGFnZUNsaWVudCgpLmRpZFJlbGF1bmNo
UHJvY2VzcygpOwogICAgIG1fcGFnZUxvYWRTdGF0ZS5kaWRTd2FwV2ViUHJvY2Vzc2VzKCk7CiAg
ICAgaWYgKHJlYXNvbiAhPSBQcm9jZXNzTGF1bmNoUmVhc29uOjpJbml0aWFsUHJvY2VzcykKQEAg
LTE2MjgsMTcgKzE2MjQsNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVtb3RlSW5zcGVjdG9ySW5m
b3JtYXRpb25EaWRDaGFuZ2UoKQogfQogI2VuZGlmCiAKLXZvaWQgV2ViUGFnZVByb3h5OjpjbGVh
ckluc3BlY3RvclRhcmdldHMoKQotewotICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+Y2xlYXJU
YXJnZXRzKCk7Ci19Ci0KLXZvaWQgV2ViUGFnZVByb3h5OjpjcmVhdGVJbnNwZWN0b3JUYXJnZXRz
KCkKLXsKLSAgICBTdHJpbmcgcGFnZVRhcmdldElkID0gbWFrZVN0cmluZygicGFnZS0iLCBtX3dl
YlBhZ2VJRC50b1VJbnQ2NCgpKTsKLSAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmNyZWF0ZUlu
c3BlY3RvclRhcmdldChwYWdlVGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlw
ZTo6UGFnZSk7Ci19Ci0KIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29u
c3QgT3B0aW9uYWw8Q29sb3I+JiBjb2xvcikKIHsKICAgICBpZiAobV9iYWNrZ3JvdW5kQ29sb3Ig
PT0gY29sb3IpCkBAIC0yOTk3LDYgKzI5ODIsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Y29tbWl0
UHJvdmlzaW9uYWxQYWdlKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCB1aW50NjRfdCBuYXZpZwog
ICAgIGlmICghZGlkU3VzcGVuZFByZXZpb3VzUGFnZSkKICAgICAgICAgbV9wcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpDbG9zZSgpLCBtX3dlYlBhZ2VJRCk7CiAKKyAgICBjb25zdCBh
dXRvIG9sZFdlYlBhZ2VJRCA9IG1fd2ViUGFnZUlEOwogICAgIHN3YXBUb1dlYlByb2Nlc3MobV9w
cm92aXNpb25hbFBhZ2UtPnByb2Nlc3MoKSwgbV9wcm92aXNpb25hbFBhZ2UtPndlYlBhZ2VJRCgp
LCBtX3Byb3Zpc2lvbmFsUGFnZS0+dGFrZURyYXdpbmdBcmVhKCksIG1fcHJvdmlzaW9uYWxQYWdl
LT5tYWluRnJhbWUoKSk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKQEAgLTMwMDcsNiArMjk5Myw3
IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpjb21taXRQcm92aXNpb25hbFBhZ2UoRnJhbWVJZGVudGlm
aWVyIGZyYW1lSUQsIHVpbnQ2NF90IG5hdmlnCiAKICAgICBkaWRDb21taXRMb2FkRm9yRnJhbWUo
ZnJhbWVJRCwgbmF2aWdhdGlvbklELCBtaW1lVHlwZSwgZnJhbWVIYXNDdXN0b21Db250ZW50UHJv
dmlkZXIsIGZyYW1lTG9hZFR5cGUsIGNlcnRpZmljYXRlSW5mbywgY29udGFpbnNQbHVnaW5Eb2N1
bWVudCwgZm9yY2VkSGFzSW5zZWN1cmVDb250ZW50LCB1c2VyRGF0YSk7CiAKKyAgICBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPmRpZENvbW1pdFByb3Zpc2lvbmFsUGFnZShvbGRXZWJQYWdlSUQsIG1f
d2ViUGFnZUlEKTsKICAgICBtX3Byb3Zpc2lvbmFsUGFnZSA9IG51bGxwdHI7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggYTQxNjk3Y2Q1MWViYzlhZDIzNWM3
NWE1ZjMxZjNiNmJkYWU4ODAxMy4uMjdhMDRjY2ZiZmU0OTY0MTAzMjZkNjY0NTBjM2U5NTRhMDVl
YjQ4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTIwNjIsOSAr
MjA2Miw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHN0b3BBbGxVUkxTY2hlbWVUYXNrcyhXZWJQ
cm9jZXNzUHJveHkqID0gbnVsbHB0cik7CiAKLSAgICB2b2lkIGNsZWFySW5zcGVjdG9yVGFyZ2V0
cygpOwotICAgIHZvaWQgY3JlYXRlSW5zcGVjdG9yVGFyZ2V0cygpOwotCiAjaWYgRU5BQkxFKEFU
VEFDSE1FTlRfRUxFTUVOVCkKICAgICB2b2lkIHJlZ2lzdGVyQXR0YWNobWVudElkZW50aWZpZXJG
cm9tRGF0YShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlLCBjb25zdCBT
dHJpbmcmIHByZWZlcnJlZEZpbGVOYW1lLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKTsKICAg
ICB2b2lkIHJlZ2lzdGVyQXR0YWNobWVudElkZW50aWZpZXJGcm9tRmlsZVBhdGgoY29uc3QgU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSwgY29uc3QgU3RyaW5nJiBmaWxlUGF0aCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCBkYWFhMTdlYjZiY2IyNjY0ODY0NDg0NTVjYTYxZWJiNGUyZGM4ZDdlLi4xM2JjN2M0ZjU0MmI5
Nzg4MjQ2MDhiMjA0OTVjOTRhZWIyMzYyYzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzNjgsNyArMTM2OCw2IEBACiAJCUE1NDNF
MzA3MjE1QUQxMzcwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFu
bmVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTQz
RTMwNTIxNUFEMTJEMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hh
bm5lbC5oICovOyB9OwogCQlBNTQzRTMwQzIxNUM4QThEMDAyNzlDRDkgLyogV2ViUGFnZUluc3Bl
Y3RvclRhcmdldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTU0M0UzMDgyMTVDOEE4MzAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCAq
LzsgfTsKIAkJQTU0M0UzMEQyMTVDOEE5MDAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBNTQzRTMwQjIxNUM4QTg0MDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldENv
bnRyb2xsZXIuaCAqLzsgfTsKLQkJQTU0M0UzMTAyMTVEOENFNjAwMjc5Q0Q5IC8qIFdlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXRBZ2VudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTU0M0UzMEUyMTVEOENFMjAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JU
YXJnZXRBZ2VudC5oICovOyB9OwogCQlBNTVCQTgxMDFCQTEzMTdFMDA3Q0QzM0QgLyogX1dLUmVt
b3RlV2ViSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1NUJBODBDMUJBMTJCRTEwMDdDRDMzRCAvKiBfV0tSZW1v
dGVXZWJJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE1NUJBODE3MUJBMjNFMTIwMDdDRDMzRCAvKiBSZW1v
dGVXZWJJbnNwZWN0b3JVSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTU1QkE4MTMxQkEyM0UwNTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclVJ
LmggKi87IH07CiAJCUE1NUJBODFGMUJBMjVCMjcwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTU1QkE4MTkxQkEyNUIxRTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclByb3h5LmggKi87
IH07CkBAIC00MTEyLDggKzQxMTEsNiBAQAogCQlBNTQzRTMwOTIxNUM4QTgzMDAyNzlDRDkgLyog
V2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBNTQzRTMwQTIxNUM4QTg0MDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRh
cmdldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTU0M0UzMEIyMTVDOEE4NDAwMjc5Q0Q5IC8q
IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBh
Z2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUE1NDNFMzBFMjE1RDhDRTIwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdl
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE1NDNFMzBGMjE1RDhDRTIwMDI3OUNEOSAvKiBXZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUGFnZUlu
c3BlY3RvclRhcmdldEFnZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTU1
QkE4MEMxQkExMkJFMTAwN0NEMzNEIC8qIF9XS1JlbW90ZVdlYkluc3BlY3RvclZpZXdDb250cm9s
bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1JlbW90ZVdlYkluc3Bl
Y3RvclZpZXdDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1NUJB
ODBEMUJBMTJCRTEwMDdDRDMzRCAvKiBfV0tSZW1vdGVXZWJJbnNwZWN0b3JWaWV3Q29udHJvbGxl
ci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IF9XS1JlbW90ZVdl
Ykluc3BlY3RvclZpZXdDb250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBNTVCQTgxMjFCQTIzRTA1MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yVUkuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlV2ViSW5zcGVjdG9yVUku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzg5Myw4ICs3ODkwLDYgQEAKIAkJ
CQkyRDlFQTMwRTFBOTZDQkZGMDAyRDI4MDcgLyogV2ViUGFnZUluamVjdGVkQnVuZGxlQ2xpZW50
LmggKi8sCiAJCQkJQTUxM0Y1M0YyMTU0QTVDRDAwNjYyODQxIC8qIFdlYlBhZ2VJbnNwZWN0b3JD
b250cm9sbGVyLmNwcCAqLywKIAkJCQlBNTEzRjUzRTIxNTRBNUNDMDA2NjI4NDEgLyogV2ViUGFn
ZUluc3BlY3RvckNvbnRyb2xsZXIuaCAqLywKLQkJCQlBNTQzRTMwRjIxNUQ4Q0UyMDAyNzlDRDkg
LyogV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50LmNwcCAqLywKLQkJCQlBNTQzRTMwRTIxNUQ4
Q0UyMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50LmggKi8sCiAJCQkJQkMx
MTFCMEIxMTJGNUU0RjAwMzM3QkFCIC8qIFdlYlBhZ2VQcm94eS5jcHAgKi8sCiAJCQkJQkMwMzJE
Q0IxMEY0Mzg5RjAwNThDMTVBIC8qIFdlYlBhZ2VQcm94eS5oICovLAogCQkJCUJDQkQzOEZBMTI1
QkFCOUEwMEQyQzI5RiAvKiBXZWJQYWdlUHJveHkubWVzc2FnZXMuaW4gKi8sCkBAIC05OTc5LDcg
Kzk5NzQsNiBAQAogCQkJCTJEOUVBMzBGMUE5NkNCRkYwMDJEMjgwNyAvKiBXZWJQYWdlSW5qZWN0
ZWRCdW5kbGVDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MTNGNTQwMjE1NEE1RDcwMDY2
Mjg0MSAvKiBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTU0M0UzMEMyMTVDOEE4RDAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCBpbiBI
ZWFkZXJzICovLAotCQkJCUE1NDNFMzEwMjE1RDhDRTYwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0QWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1NDNFMzBEMjE1QzhBOTAwMDI3
OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTU0M0UzMDcyMTVBRDEzNzAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRG
cm9udGVuZENoYW5uZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUMwQ0U3MkExMTI0N0U3MUQwMEJD
MEVDNCAvKiBXZWJQYWdlTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
LmNwcAppbmRleCA1NmIwZDUyZWM1OTU3Y2M3M2ExM2YwNjdlYjNjZGEwMzJkZTIxNzU4Li5hNzBm
NmZkNTIwOTZhNWRjYTkwMWVhNzBhMzc1NWYxNGQ2YjRhMGZkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
LmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQu
aCIKIAogI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0RnJvbnRlbmRDaGFubmVsLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDb250cm9s
bGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CiAKQEAgLTQxLDE5ICs0MiwyNSBAQCBX
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0OjpXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0KFdlYlBhZ2UmIHBh
Z2UpCiAKIFN0cmluZyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0OjppZGVudGlmaWVyKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbWFrZVN0cmluZygicGFnZS0iLCBtX3BhZ2UuaWRlbnRpZmllcigpLnRv
VUludDY0KCkpOworICAgIHJldHVybiB0b1RhcmdldElEKG1fcGFnZS5pZGVudGlmaWVyKCkpOwog
fQogCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OmNvbm5lY3QoSW5zcGVjdG9yOjpGcm9u
dGVuZENoYW5uZWwmIGNoYW5uZWwpCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OmNvbm5l
Y3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlIGNvbm5lY3Rpb25U
eXBlKQogeworICAgIGlmIChtX2NoYW5uZWwpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NoYW5u
ZWwgPSBtYWtlVW5pcXVlPFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw+KG1f
cGFnZSwgaWRlbnRpZmllcigpLCBjb25uZWN0aW9uVHlwZSk7CiAgICAgaWYgKG1fcGFnZS5jb3Jl
UGFnZSgpKQotICAgICAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigp
LmNvbm5lY3RGcm9udGVuZChjaGFubmVsKTsKKyAgICAgICAgbV9wYWdlLmNvcmVQYWdlKCktPmlu
c3BlY3RvckNvbnRyb2xsZXIoKS5jb25uZWN0RnJvbnRlbmQoKm1fY2hhbm5lbCk7CiB9CiAKLXZv
aWQgV2ViUGFnZUluc3BlY3RvclRhcmdldDo6ZGlzY29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5k
Q2hhbm5lbCYgY2hhbm5lbCkKK3ZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldDo6ZGlzY29ubmVj
dCgpCiB7CisgICAgaWYgKCFtX2NoYW5uZWwpCisgICAgICAgIHJldHVybjsKICAgICBpZiAobV9w
YWdlLmNvcmVQYWdlKCkpCi0gICAgICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250
cm9sbGVyKCkuZGlzY29ubmVjdEZyb250ZW5kKGNoYW5uZWwpOworICAgICAgICBtX3BhZ2UuY29y
ZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmRpc2Nvbm5lY3RGcm9udGVuZCgqbV9jaGFu
bmVsKTsKKyAgICBtX2NoYW5uZWwucmVzZXQoKTsKIH0KIAogdm9pZCBXZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0OjpzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
CkBAIC02Miw0ICs2OSwxMCBAQCB2b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OnNlbmRNZXNz
YWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKICAgICAgICAgbV9wYWdl
LmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5kaXNwYXRjaE1lc3NhZ2VGcm9tRnJv
bnRlbmQobWVzc2FnZSk7CiB9CiAKK1N0cmluZyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojp0b1Rh
cmdldElEKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIHBhZ2VJRCkKK3sKKyAgICByZXR1cm4gbWFr
ZVN0cmluZygicGFnZS0iLCBwYWdlSUQudG9VSW50NjQoKSk7Cit9CisKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmgKaW5kZXggYjcwZTMxYzhiODc3MGM0YmYxZWNiNDU4
OGViZjI2NzViM2I5ZjQ2NC4uNmNiZDdmYWQ1ZmY5MWFmZDg1OGRhMzQ2YWRiZmVlZDY0MjRiMGIy
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUlu
c3BlY3RvclRhcmdldC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2VJbnNwZWN0b3JUYXJnZXQuaApAQCAtMjYsMjkgKzI2LDM0IEBACiAjcHJhZ21hIG9uY2UK
IAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclRhcmdldC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvUGFnZUlkZW50aWZpZXIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
IAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlBhZ2U7CitjbGFzcyBXZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsOwogCiBjbGFzcyBXZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0IHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0KTsKIHB1YmxpYzoKLSAgICBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0KFdlYlBh
Z2UmKTsKKyAgICBleHBsaWNpdCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0KFdlYlBhZ2UmKTsKICAg
ICB+V2ViUGFnZUluc3BlY3RvclRhcmdldCgpID0gZGVmYXVsdDsKIAogICAgIEluc3BlY3Rvcjo6
SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gSW5zcGVjdG9y
OjpJbnNwZWN0b3JUYXJnZXRUeXBlOjpQYWdlOyB9CiAKICAgICBTdHJpbmcgaWRlbnRpZmllcigp
IGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFu
bmVsJik7Ci0gICAgdm9pZCBkaXNjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJik7
Ci0gICAgdm9pZCBzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmKTsKKyAg
ICB2b2lkIGNvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBl
KSBvdmVycmlkZTsKKyAgICB2b2lkIGRpc2Nvbm5lY3QoKSBvdmVycmlkZTsKKyAgICB2b2lkIHNl
bmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworCisgICAg
c3RhdGljIFN0cmluZyB0b1RhcmdldElEKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyKTsKIAogcHJp
dmF0ZToKICAgICBXZWJQYWdlJiBtX3BhZ2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw+IG1fY2hhbm5lbDsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuY3BwCmlu
ZGV4IDUyNTQ4OTY3M2Q2NmEyZTRhN2ZkMzJmMzY0ODUzNGNlM2VkZWVjNDcuLmNkYTRmMWU4ZDNj
NTc1MzYxNjJhYTM5MGVkNzRiNjgxYzg5MTM0MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0Q29udHJvbGxlci5jcHAKQEAgLTU4LDcgKzU4LDYgQEAgdm9pZCBXZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0Q29udHJvbGxlcjo6cmVtb3ZlVGFyZ2V0KEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0
JgogICAgIG1fcGFnZS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRlc3Ryb3lJbnNwZWN0
b3JUYXJnZXQodGFyZ2V0LmlkZW50aWZpZXIoKSkpOwogCiAgICAgbV90YXJnZXRzLnJlbW92ZSh0
YXJnZXQuaWRlbnRpZmllcigpKTsKLSAgICBtX3RhcmdldEZyb250ZW5kQ2hhbm5lbHMucmVtb3Zl
KHRhcmdldC5pZGVudGlmaWVyKCkpOwogfQogCiB2b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRD
b250cm9sbGVyOjpjb25uZWN0SW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3Bl
Y3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSkKQEAg
LTY3LDEzICs2Niw3IEBAIHZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6OmNv
bm5lY3RJbnNwZWN0b3IoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwKICAgICBpZiAoIXRhcmdldCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9u
dGVuZENoYW5uZWw+IGNoYW5uZWwgPSBtX3RhcmdldEZyb250ZW5kQ2hhbm5lbHMuZ2V0KHRhcmdl
dElkKTsKLSAgICBpZiAoIWNoYW5uZWwpIHsKLSAgICAgICAgY2hhbm5lbCA9IFdlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw6OmNyZWF0ZSgqdGhpcywgdGFyZ2V0SWQsIGNvbm5l
Y3Rpb25UeXBlKTsKLSAgICAgICAgbV90YXJnZXRGcm9udGVuZENoYW5uZWxzLnNldCh0YXJnZXQt
PmlkZW50aWZpZXIoKSwgY2hhbm5lbCk7Ci0gICAgfQotCi0gICAgdGFyZ2V0LT5jb25uZWN0KCpj
aGFubmVsLmdldCgpKTsKKyAgICB0YXJnZXQtPmNvbm5lY3QoY29ubmVjdGlvblR5cGUpOwogfQog
CiB2b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpkaXNjb25uZWN0SW5zcGVj
dG9yKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpCkBAIC04MiwxMSArNzUsNyBAQCB2b2lkIFdlYlBh
Z2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpkaXNjb25uZWN0SW5zcGVjdG9yKGNvbnN0IFN0
cmluZyYgdGFyZ2V0SQogICAgIGlmICghdGFyZ2V0KQogICAgICAgICByZXR1cm47CiAKLSAgICBS
ZWZQdHI8V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbD4gY2hhbm5lbCA9IG1f
dGFyZ2V0RnJvbnRlbmRDaGFubmVscy50YWtlKHRhcmdldElkKTsKLSAgICBpZiAoIWNoYW5uZWwp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHRhcmdldC0+ZGlzY29ubmVjdCgqY2hhbm5lbC5nZXQo
KSk7CisgICAgdGFyZ2V0LT5kaXNjb25uZWN0KCk7CiB9CiAKIHZvaWQgV2ViUGFnZUluc3BlY3Rv
clRhcmdldENvbnRyb2xsZXI6OnNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKQEAgLTk4LDkgKzg3LDQgQEAgdm9p
ZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6c2VuZE1lc3NhZ2VUb1RhcmdldEJh
Y2tlbmQoY29uc3QgU3RyaW5nJgogICAgIHRhcmdldC0+c2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tl
bmQobWVzc2FnZSk7CiB9CiAKLXZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6
OnNlbmRNZXNzYWdlVG9UYXJnZXRGcm9udGVuZChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6U2VuZE1lc3NhZ2VUb0luc3BlY3RvckZyb250ZW5kKHRhcmdldElkLCBtZXNzYWdlKSk7
Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuaCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250
cm9sbGVyLmgKaW5kZXggM2U5MmI3YTlkYTllNTYwOWU2MDE2NjM5YzA5YjczY2I1OTZmOGFmNS4u
N2M5MzFkYWQxYzk4MDBmMDNkNzNkNGE3Y2EyNTg4ZGQwMjhhOGYyNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRy
b2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oCkBAIC0yNiw3ICsyNiw2IEBACiAjcHJhZ21hIG9uY2UK
IAogI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCIKLSNpbmNsdWRlICJXZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNTAsMTMgKzQ5LDExIEBA
IHB1YmxpYzoKICAgICB2b2lkIGNvbm5lY3RJbnNwZWN0b3IoY29uc3QgU3RyaW5nJiB0YXJnZXRJ
ZCwgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlKTsKICAgICB2b2lk
IGRpc2Nvbm5lY3RJbnNwZWN0b3IoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCk7CiAgICAgdm9pZCBz
ZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpOwotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1RhcmdldEZyb250ZW5kKGNv
bnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CiAKIHByaXZhdGU6
CiAgICAgV2ViUGFnZSYgbV9wYWdlOwogICAgIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQgbV9wYWdl
VGFyZ2V0OwogICAgIEhhc2hNYXA8U3RyaW5nLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldCo+
IG1fdGFyZ2V0czsKLSAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFdlYlBhZ2VJbnNwZWN0b3JU
YXJnZXRGcm9udGVuZENoYW5uZWw+PiBtX3RhcmdldEZyb250ZW5kQ2hhbm5lbHM7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250
ZW5kQ2hhbm5lbC5jcHAKaW5kZXggOGQ3ODgwNzgyYTI5YjE3MGNlNjVhZmM3MDM3N2Q4YmQ1MDY5
NDM1OC4uZTFiNWY3MTM3MzNhMDk1MjUyMTIyZjBhMzgwMWY4MmM4YzYwZDNmNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdl
dEZyb250ZW5kQ2hhbm5lbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5jcHAKQEAgLTI2LDE3ICsy
NiwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JU
YXJnZXRGcm9udGVuZENoYW5uZWwuaCIKIAotI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VQ
cm94eU1lc3NhZ2VzLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1SZWY8V2ViUGFnZUluc3Bl
Y3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbD4gV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5k
Q2hhbm5lbDo6Y3JlYXRlKFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyJiB0YXJnZXRD
b250cm9sbGVyLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6OkZyb250ZW5kQ2hh
bm5lbDo6Q29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUpCi17Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbCh0YXJnZXRDb250
cm9sbGVyLCB0YXJnZXRJZCwgY29ubmVjdGlvblR5cGUpKTsKLX0KLQotV2ViUGFnZUluc3BlY3Rv
clRhcmdldEZyb250ZW5kQ2hhbm5lbDo6V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hh
bm5lbChXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlciYgdGFyZ2V0Q29udHJvbGxlciwg
Y29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5l
Y3Rpb25UeXBlIGNvbm5lY3Rpb25UeXBlKQotICAgIDogbV90YXJnZXRDb250cm9sbGVyKHRhcmdl
dENvbnRyb2xsZXIpCitXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsOjpXZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0IFN0
cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlw
ZSBjb25uZWN0aW9uVHlwZSkKKyAgICA6IG1fcGFnZShwYWdlKQogICAgICwgbV90YXJnZXRJZCh0
YXJnZXRJZCkKICAgICAsIG1fY29ubmVjdGlvblR5cGUoY29ubmVjdGlvblR5cGUpCiB7CkBAIC00
NCw3ICs0MCw3IEBAIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw6OldlYlBh
Z2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwoV2ViCiAKIHZvaWQgV2ViUGFnZUluc3Bl
Y3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbDo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0
cmluZyYgbWVzc2FnZSkKIHsKLSAgICBtX3RhcmdldENvbnRyb2xsZXIuc2VuZE1lc3NhZ2VUb1Rh
cmdldEZyb250ZW5kKG1fdGFyZ2V0SWQsIG1lc3NhZ2UpOworICAgIG1fcGFnZS5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OlNlbmRNZXNzYWdlVG9JbnNwZWN0b3JGcm9udGVuZChtX3Rhcmdl
dElkLCBtZXNzYWdlKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldEZy
b250ZW5kQ2hhbm5lbC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5oCmluZGV4IDc2YWY2MmE5N2JlZjQ4OGI2
NDRlNWQ2MThkNDM5ZWM5YTQyZjIyZGEuLjgxODRhYzViZGEyODkzODJhZWIyY2Y1MDE2OWM1OTU2
N2Q0Y2QyZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVs
LmgKQEAgLTMxLDIyICszMSwyMCBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgV2Vi
UGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI7CitjbGFzcyBXZWJQYWdlOwogCi1jbGFzcyBX
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsIGZpbmFsIDogcHVibGljIFJlZkNv
dW50ZWQ8V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbD4sIHB1YmxpYyBJbnNw
ZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCB7CitjbGFzcyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJv
bnRlbmRDaGFubmVsIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsIHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShX
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsKTsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw+IGNyZWF0ZShXZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlciYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIElu
c3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSk7CisgICAgV2ViUGFnZUlu
c3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbChXZWJQYWdlJiwgY29uc3QgU3RyaW5nJiB0YXJn
ZXRJZCwgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlKTsKICAgICB2
aXJ0dWFsIH5XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsKCkgPSBkZWZhdWx0
OwogCiBwcml2YXRlOgotICAgIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwo
V2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXImLCBjb25zdCBTdHJpbmcmIHRhcmdldElk
LCBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUpOwotCiAgICAgQ29u
bmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Nv
bm5lY3Rpb25UeXBlOyB9CiAgICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKSBvdmVycmlkZTsKIAotcHJpdmF0ZToKLSAgICBXZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0Q29udHJvbGxlciYgbV90YXJnZXRDb250cm9sbGVyOworICAgIFdlYlBhZ2UmIG1fcGFn
ZTsKICAgICBTdHJpbmcgbV90YXJnZXRJZDsKICAgICBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5l
bDo6Q29ubmVjdGlvblR5cGUgbV9jb25uZWN0aW9uVHlwZSB7IEluc3BlY3Rvcjo6RnJvbnRlbmRD
aGFubmVsOjpDb25uZWN0aW9uVHlwZTo6UmVtb3RlIH07CiB9OwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDE4ZmRlM2Q3YTUw
OGFhNmUxN2U0Y2FhZjdmNmI3YTBiZTY1YWFkM2MuLjVkOTExNjE1ODU2ZGZiMTdmM2I4NTQ5NzEy
ZWMyNjkwNmI5YWYxYzUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxOS0xMC0wMSAgWXVyeSBT
ZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBub3RpZnkgaW5zcGVjdG9yIHdoZW4gcHJvdmlzaW9uYWwgcGFnZSBpcyBjcmVhdGVkLCBjb21t
aXR0ZWQgYW5kIGRlc3Ryb3llZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjAyNzA0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkZWQgbmV3IHRlc3QgZm9yIFRhcmdldCBldmVudHMgZHVyaW5nIFBTT04u
IEl0IGlzIG9ubHkgZW5hYmxlZCBvbiBXZWJLaXQyIGFzIHRoZXJlIGlzCisgICAgICAgIG5vIFRh
cmdldCBhZ2VudCBpbiBXZWJLaXQxLgorCisgICAgICAgICogVGVzdEV4cGVjdGF0aW9uczoKKyAg
ICAgICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rvci90YXJnZXQvdGFyZ2V0LWV2ZW50cy1mb3ItcHJv
dmlzaW9uYWwtcGFnZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMv
aW5zcGVjdG9yL3RhcmdldC90YXJnZXQtZXZlbnRzLWZvci1wcm92aXNpb25hbC1wYWdlLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDE5
LTEwLTA4ICBLYXRlIENoZW5leSAgPGthdGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgogCiAgICAg
ICAgIEltcGxlbWVudCBUZWxlbWV0cnkgYW5kIER1bXBpbmcgUm91dGluZXMgZm9yIFNRTGl0ZSBi
YWNrZW5kICgxOTUwODgpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25z
IGIvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucwppbmRleCAwMWZjOWUyMTI2OWU2YWJjNWI1
ZjUzMjE3MTA3ZTNkODQyZWEwM2Q4Li5hOTEzNTAxZmIyMWZhNjNjMDhhMjZmODEyZGZlNzc1Mzg1
NjA5OTA0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xh
eW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTkxMiw2ICs5MTIsOSBAQCB3ZWJraXQub3Jn
L2IvMTYxOTUxIFsgRGVidWcgXSBpbnNwZWN0b3IvZGVidWdnZXIvcGF1c2VkLXNjb3Blcy5odG1s
IFsgU2tpcCBdCiBpbnNwZWN0b3IvZGVidWdnZXIvZXZhbHVhdGVPbkNhbGxGcmFtZS1lbXVsYXRl
VXNlckdlc3R1cmUtdXNlcklzSW50ZXJhY3RpbmcuaHRtbCBbIFNraXAgXQogaW5zcGVjdG9yL3J1
bnRpbWUvZXZhbHVhdGUtZW11bGF0ZVVzZXJHZXN0dXJlLXVzZXJJc0ludGVyYWN0aW5nLmh0bWwg
WyBTa2lwIF0KIAorIyBUYXJnZXQgZG9tYWluIGlzIG9ubHkgcHJlc2VudCBpbiBXSzIuCitodHRw
L3Rlc3RzL2luc3BlY3Rvci90YXJnZXQgWyBTa2lwIF0KKwogIyBUaGVzZSBjb25mb3JtYW5jZSB0
ZXN0cyBhcmUgbm8gbG9uZ2VyIGluIHN5bmMgd2l0aCB0aGUgbGF0ZXN0IHNwZWNpZmljYXRpb24K
ICMgYW5kIGV4cGVjdCBjb21wYXJlRG9jdW1lbnRQb3NpdGlvbigpIHRvIHJldHVybjoKICMgRE9D
VU1FTlRfUE9TSVRJT05fSU1QTEVNRU5UQVRJT05fU1BFQ0lGSUMgfCBET0NVTUVOVF9QT1NJVElP
Tl9ESVNDT05ORUNURUQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVj
dG9yL3RhcmdldC90YXJnZXQtZXZlbnRzLWZvci1wcm92aXNpb25hbC1wYWdlLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL3RhcmdldC90YXJnZXQtZXZlbnRz
LWZvci1wcm92aXNpb25hbC1wYWdlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MzE3NDdiNzRk
MTEwNTEyYzY4NmE5ZmQ3YzE0ZWE5YTNjODhkYzdmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvdGFyZ2V0L3RhcmdldC1ldmVudHMtZm9yLXByb3Zp
c2lvbmFsLXBhZ2UtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTkgQEAKK1Rlc3QgdGhhdCBjcm9z
cyBkb21haW4gbmF2aWdhdGlvbiByZXN1bHRzIGluIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2Ugb2Yg
ZXZlbnRzIGluIFRhcmdldCBkb21haW46IAorMS4gVGFyZ2V0LnRhcmdldENyZWF0ZWQgZm9yIHBy
b3Zpc2lvbmFsIHBhZ2UuIAorMi4gVGFyZ2V0LmRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0IHdo
ZW4gcHJvdmlzaW9uYWwgbG9hZCBpcyBjb21taXR0ZWQuIAorMy4gVGFyZ2V0LnRhcmdldERlc3Ry
b3llZCBmb3IgdGhlIG9sZCB0YXJnZXQgYWZ0ZXIgdGhlIG5hdmlnYXRpb24gcmVxdWVzdCBpcyBj
b21taXR0ZWQuCisKK1BBU1M6IFNob3VsZCByZWNlaXZlIHRhcmdldERlc3Ryb3llZCBldmVudC4K
K1BBU1M6IERlc3Ryb3llZCB0YXJnZXQgc2hvdWxkIGJlIHByZXZpb3VzIHRhcmdldC4KKworPT0g
UnVubmluZyB0ZXN0IHN1aXRlOiBUYXJnZXQuUFNPTgorLS0gUnVubmluZyB0ZXN0IGNhc2U6IFBy
b3Zpc2lvbmFsUGFnZVRhcmdldAorUEFTUzogU2hvdWxkIHJlY2VpdmUgdGFyZ2V0Q3JlYXRlZCBl
dmVudC4KK1BBU1M6IFRhcmdldCBzaG91bGQgYmUgcHJvdmlzaW9uYWwuCitQQVNTOiBQcmV2aW91
cyB0YXJnZXQgaWQgc2hvdWxkIGJlIGlkIG9mIHRoZSBjdXJyZW50IHRhcmdldC4KK1BBU1M6IFNo
b3VsZCByZWNlaXZlIGRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0IGV2ZW50LgorUEFTUzogUHJl
dmlvdXMgdGFyZ2V0IHNob3VsZCBiZSB0aGUgY3VycmVudCBvbmUuCitQQVNTOiBDb21taXR0ZWQg
dGFyZ2V0IHNob3VsZCBtYXRjaCBwcm92aXNpb25hbCB0YXJnZXQuCitQQVNTOiBTaG91bGQgcmVj
ZWl2ZSB0YXJnZXREZXN0cm95ZWQgZXZlbnQuCitQQVNTOiBEZXN0cm95ZWQgdGFyZ2V0IHNob3Vs
ZCBiZSBwcmV2aW91cyB0YXJnZXQuCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvaW5zcGVjdG9yL3RhcmdldC90YXJnZXQtZXZlbnRzLWZvci1wcm92aXNpb25hbC1wYWdlLmh0
bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci90YXJnZXQvdGFyZ2V0LWV2ZW50
cy1mb3ItcHJvdmlzaW9uYWwtcGFnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkzN2MxZjY5MzE5M2Y0OWUx
NTBhOWI3YTFlOTc0NjE3ZmY3ODQ0YzMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2luc3BlY3Rvci90YXJnZXQvdGFyZ2V0LWV2ZW50cy1mb3ItcHJvdmlzaW9uYWwt
cGFnZS5odG1sCkBAIC0wLDAgKzEsNjMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVh
ZD4KKzxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvaW5z
cGVjdG9yLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2Z1bmN0aW9uIHRlc3QoKQorewor
ICAgIGxldCBzdWl0ZSA9IEluc3BlY3RvclRlc3QuY3JlYXRlQXN5bmNTdWl0ZSgiVGFyZ2V0LlBT
T04iKTsKKworICAgIHN1aXRlLmFkZFRlc3RDYXNlKHsKKyAgICAgICAgbmFtZTogIlByb3Zpc2lv
bmFsUGFnZVRhcmdldCIsCisgICAgICAgIGRlc2NyaXB0aW9uOiAiQ2hlY2sgdGhhdCBhIG5ldyB0
YXJnZXQgd2lsbCBiZSBjcmVhdGVkIGZvciBwcm92aXNpb25hbCBwYWdlLiIsCisgICAgICAgIHRl
c3QocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICAgICAgICBjb25zdCBtYWluVGFyZ2V0SWQgPSBX
SS5tYWluVGFyZ2V0LmlkZW50aWZpZXI7CisgICAgICAgICAgICBsZXQgbmV3VGFyZ2V0SWQ7Cisg
ICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChtYWluVGFyZ2V0SWQpOworICAgICAgICAg
ICAgVGFyZ2V0QWdlbnQuZGlzcGF0Y2hlciA9IG5ldyBQcm94eShUYXJnZXRBZ2VudC5kaXNwYXRj
aGVyLCB7CisgICAgICAgICAgICAgICAgZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHByb3AgPT09ICJ0YXJnZXRDcmVhdGVkIikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuICh0YXJnZXRJbmZvKSA9PiB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmV3VGFyZ2V0SWQgPSB0YXJnZXRJbmZvLnRhcmdldElkOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QucGFzcyhgU2hvdWxkIHJlY2VpdmUg
JHtwcm9wfSBldmVudC5gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JU
ZXN0LmV4cGVjdFRydWUodGFyZ2V0SW5mby5pc1Byb3Zpc2lvbmFsLCAiVGFyZ2V0IHNob3VsZCBi
ZSBwcm92aXNpb25hbC4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JU
ZXN0LmV4cGVjdEVxdWFsKHRhcmdldEluZm8ucHJldmlvdXNUYXJnZXRJZCwgbWFpblRhcmdldElk
LCAiUHJldmlvdXMgdGFyZ2V0IGlkIHNob3VsZCBiZSBpZCBvZiB0aGUgY3VycmVudCB0YXJnZXQu
Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldFtwcm9wXS5jYWxs
KHJlY2VpdmVyLCB0YXJnZXRJbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHByb3AgPT09ICJkaWRD
b21taXRQcm92aXNpb25hbFRhcmdldCIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAodGFyZ2V0SW5mbykgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3BlY3Rv
clRlc3QucGFzcyhgU2hvdWxkIHJlY2VpdmUgJHtwcm9wfSBldmVudC5gKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdEVxdWFsKHRhcmdldEluZm8ucHJl
dmlvdXNUYXJnZXRJZCwgbWFpblRhcmdldElkLCAiUHJldmlvdXMgdGFyZ2V0IHNob3VsZCBiZSB0
aGUgY3VycmVudCBvbmUuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9y
VGVzdC5leHBlY3RFcXVhbCh0YXJnZXRJbmZvLnRhcmdldElkLCBuZXdUYXJnZXRJZCwgIkNvbW1p
dHRlZCB0YXJnZXQgc2hvdWxkIG1hdGNoIHByb3Zpc2lvbmFsIHRhcmdldC4iKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0W3Byb3BdLmNhbGwocmVjZWl2ZXIsIHRh
cmdldEluZm8pOworICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0gInRhcmdldERlc3Ryb3llZCIp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAodGFyZ2V0SWQpID0+IHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LnBhc3MoYFNob3VsZCByZWNlaXZl
ICR7cHJvcH0gZXZlbnQuYCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9y
VGVzdC5leHBlY3RFcXVhbCh0YXJnZXRJZCwgbWFpblRhcmdldElkLCAiRGVzdHJveWVkIHRhcmdl
dCBzaG91bGQgYmUgcHJldmlvdXMgdGFyZ2V0LiIpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc29sdmUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0
W3Byb3BdLmNhbGwocmVjZWl2ZXIsIHRhcmdldElkKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRh
cmdldFtwcm9wXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIFJ1bnRpbWVBZ2VudC5ldmFsdWF0ZSgibG9jYXRpb24uaG9zdG5hbWU9J2xvY2FsaG9zdCci
KTsKKyAgICAgICAgfQorICAgIH0pOworCisgICAgc3VpdGUucnVuVGVzdENhc2VzQW5kRmluaXNo
KCk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKzxw
PlRlc3QgdGhhdCBjcm9zcyBkb21haW4gbmF2aWdhdGlvbiByZXN1bHRzIGluIHRoZSBmb2xsb3dp
bmcgc2VxdWVuY2Ugb2YgZXZlbnRzIGluIFRhcmdldCBkb21haW46Cis8YnI+MS4gVGFyZ2V0LnRh
cmdldENyZWF0ZWQgZm9yIHByb3Zpc2lvbmFsIHBhZ2UuCis8YnI+Mi4gVGFyZ2V0LmRpZENvbW1p
dFByb3Zpc2lvbmFsVGFyZ2V0IHdoZW4gcHJvdmlzaW9uYWwgbG9hZCBpcyBjb21taXR0ZWQuCis8
YnI+My4gVGFyZ2V0LnRhcmdldERlc3Ryb3llZCBmb3IgdGhlIG9sZCB0YXJnZXQgYWZ0ZXIgdGhl
IG5hdmlnYXRpb24gcmVxdWVzdCBpcyBjb21taXR0ZWQuCis8L3A+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9ucyBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDAyZDY4OTgx
YjU3ZTFmY2UwOTAzMjJiZmYzZTRjMjAzYWQ0OTJhODcuLjdkNGZiNjYwNTJmNmJkOTM3OTVhMmQx
MjA1NTIxZDBlMjZjZGFjNzMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3drMi9U
ZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3drMi9UZXN0RXhwZWN0
YXRpb25zCkBAIC03NjQsNiArNzY0LDkgQEAgaHR0cC90ZXN0cy9hZENsaWNrQXR0cmlidXRpb24g
WyBQYXNzIF0KIGluc3BlY3Rvci9kZWJ1Z2dlci9ldmFsdWF0ZU9uQ2FsbEZyYW1lLWVtdWxhdGVV
c2VyR2VzdHVyZS11c2VySXNJbnRlcmFjdGluZy5odG1sIFsgUGFzcyBdCiBpbnNwZWN0b3IvcnVu
dGltZS9ldmFsdWF0ZS1lbXVsYXRlVXNlckdlc3R1cmUtdXNlcklzSW50ZXJhY3RpbmcuaHRtbCBb
IFBhc3MgXQogCisjIFRhcmdldCBkb21haW4gaXMgb25seSBwcmVzZW50IGluIFdlYktpdDIuCito
dHRwL3Rlc3RzL2luc3BlY3Rvci90YXJnZXQgWyBQYXNzIF0KKwogIyMjIEVORCBPRiAoNSkgUHJv
Z3Jlc3Npb25zLCBleHBlY3RlZCBzdWNjZXNzZXMgdGhhdCBhcmUgZXhwZWN0ZWQgZmFpbHVyZXMg
aW4gV2ViS2l0MS4KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380898</attachid>
            <date>2019-10-14 11:17:34 -0700</date>
            <delta_ts>2019-10-14 16:25:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202704-20191014111733.patch</filename>
            <type>text/plain</type>
            <size>85932</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUxMDc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
ZTgyODY1NjJiYzk5NDNlNmRmMWJhMDY1OTM1NDE0NDE3ODU5OTI0Li44YTJlNjAyYTRjMDQyYmY5
MDI0MTkyYzUzN2I4NGMzMjgxYWFiY2MxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOCBAQAorMjAxOS0wOS0yNyAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBub3RpZnkgaW5zcGVjdG9yIHdoZW4gcHJv
dmlzaW9uYWwgcGFnZSBpcyBjcmVhdGVkLCBjb21taXR0ZWQgYW5kIGRlc3Ryb3llZAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyNzA0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yVGFyZ2V0Lmg6IGNoYW5nZWQgSW5zcGVjdG9yVGFyZ2V0IHRvIG5vdCByZXF1aXJlIEZy
b250ZW5kQ2hhbm5lbCBhcworICAgICAgICBhbGwgbWVzc2FnZXMgYXJlIHJvdXRlZCBieSBtZWFu
cyBvZiB0aGUgb3duaW5nIEluc3BlY3RvclRhcmdldEFnZW50LgorICAgICAgICAqIGluc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JUYXJnZXRBZ2VudDo6SW5zcGVjdG9yVGFyZ2V0QWdlbnQpOgorICAgICAgICAoSW5z
cGVjdG9yOjpidWlsZFRhcmdldEluZm9PYmplY3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JUYXJnZXRBZ2VudDo6dGFyZ2V0Q3JlYXRlZCk6CisgICAgICAgIChJbnNwZWN0b3I6Oklu
c3BlY3RvclRhcmdldEFnZW50Ojp0YXJnZXREZXN0cm95ZWQpOgorICAgICAgICAoSW5zcGVjdG9y
OjpJbnNwZWN0b3JUYXJnZXRBZ2VudDo6ZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQpOiB0aGlz
IG1ldGhvZCBpcyB1c2VkIHRvCisgICAgICAgIG5vdGlmeSBmcm9udGVuZCB0aGF0IGNvcnJlc3Bv
bmRpbmcgcHJvdmlzaW9uYWwgdGFyZ2V0IGhhcyBjb21taXR0ZWQgYW5kIHJlcGxhY2VkIHByZXZp
b3VzCisgICAgICAgIHRhcmdldC4KKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0
QWdlbnQ6OmNvbm5lY3Rpb25UeXBlIGNvbnN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVj
dG9yVGFyZ2V0QWdlbnQ6OmNvbm5lY3RUb1RhcmdldHMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JUYXJnZXRBZ2VudDo6ZGlzY29ubmVjdEZyb21UYXJnZXRzKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50Lmg6CisgICAgICAgICogaW5zcGVj
dG9yL3Byb3RvY29sL1RhcmdldC5qc29uOiBleHRlbmRlZCBUYXJnZXRJbmZvIHdpdGggcHJvdmlz
aW9uYWwgcGFnZSBkZXRhaWxzIGFuZAorICAgICAgICBhZGRlZCBldmVudCB3aGljaCBpcyBmaXJl
ZCB3aGVuIHByb3Zpc2lvbmFsIHBhZ2UgZ2V0cyBjb21taXR0ZWQuIElmIHByb3Zpc2lvbmFsCisg
ICAgICAgIGxvYWQgZmFpbHMgdGhlcmUgd2lsbCBiZSB0YXJnZXREZXN0cm95ZWQgZXZlbnQgd2l0
aG91dCBjb3JyZXNwb25kaW5nIGNvbW1pdC4KKwogMjAxOS0xMC0xMSAgRGV2aW4gUm91c3NvICA8
ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogRGVidWdnZXI6IHN1
cHBvcnQgcGF0dGVybiBibGFja2JveGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGVhZDRjODg4ODM1YjlhMWNl
ZDExODUxNTVlMjVmM2NlNzRlY2Q0YWUuLjdlZTgxZTMyM2U0MzQ4MmQ1Yjg2YjZjZjI4NGVmNjM5
YjU1ZWM2OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxOS0xMC0wMSAgWXVyeSBT
ZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBub3RpZnkgaW5zcGVjdG9yIHdoZW4gcHJvdmlzaW9uYWwgcGFnZSBpcyBjcmVhdGVkLCBjb21t
aXR0ZWQgYW5kIGRlc3Ryb3llZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjAyNzA0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy9pbnNwZWN0b3IvdGFyZ2V0L3RhcmdldC1ldmVu
dHMtZm9yLXByb2lzaW9uYWwtcGFnZS5odG1sCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpzZXRJc1VuZGVyVGVzdCk6IFRoaXMgbWV0aG9kIG1heSBiZSBjYWxsZWQgc2V2ZXJhbCB0aW1l
cworICAgICAgICB3aGVuIHJlbG9hZGluZyBpbnNwZWN0ZWQgcGFnZSB3aXRoIG9wZW5lZCBmcm9u
dGVuZCBzbyB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZXJlIGFyZSBubworICAgICAgICBjb25uZWN0
ZWQgZnJvbnRlbmRzIHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkIGZyb20gdGVzdHMgZG9lc24n
dCBob2xkIGFueW1vcmUuCisKIDIwMTktMTAtMTQgIFRydWl0dCBTYXZlbGwgIDx0c2F2ZWxsQGFw
cGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjUxMDQ1LgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9DaGFuZ2VMb2cKaW5kZXggMWU1N2ZiYWM1ZjFhNDAyODMyYjY4NzVmZjU3NWUyZjhi
YTQwZDk2Yy4uYTBjNTIwZGFkMGQ5NDkwODUxNGUzYzM4ZjNiMDNmYWQ1NDM4OWI2NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjEgQEAKKzIwMTktMDktMjcgIFl1cnkgU2Vt
aWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjog
bm90aWZ5IGluc3BlY3RvciB3aGVuIHByb3Zpc2lvbmFsIHBhZ2UgaXMgY3JlYXRlZCwgY29tbWl0
dGVkIGFuZCBkZXN0cm95ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwMjcwNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFVwZGF0ZWQgZnJvbnRlbmQgY29kZSB0byB1bmRlcnN0YW5kIHByb3Zpc2lvbmFs
IHRhcmdldHMuIEZvciBub3cgdGhlcmUgYXJlCisgICAgICAgIG5vIGNoYW5nZXMgZnJvbnRlbmQg
YmVoYXZpb3IsIGl0IHdpbGwgd2FpdCBmb3IgdGhlIHByb3Zpc2lvbmFsIHRhcmdldCB0byBjb21t
aXQKKyAgICAgICAgYW5kIHdpbGwgbm90IHNlbmQgYW55IGNvbW1hbmRzIHRvIGl0IGJlZm9yZSB0
aGF0LgorCisgICAgICAgICogVXNlckludGVyZmFjZS9CYXNlL01haW4uanM6IE1vdmVkIGEgYnVu
Y2ggb2YgbWV0aG9kcyBzaGFyZWQgYmV0d2VlbiBNYWluLmpzIGFuZCBUZXN0LmpzCisgICAgICAg
IHRvIFRhcmdldE1hbmFnZXIuanMgdG8ga2VlcCB0aGVtIGluIHN5bmMuCisgICAgICAgICogVXNl
ckludGVyZmFjZS9Db250cm9sbGVycy9UYXJnZXRNYW5hZ2VyLmpzOgorICAgICAgICAoV0kuVGFy
Z2V0TWFuYWdlcik6CisgICAgICAgIChXSS5UYXJnZXRNYW5hZ2VyLnByb3RvdHlwZS5yZW1vdmVU
YXJnZXQpOgorICAgICAgICAoV0kuVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUuY3JlYXRlTXVsdGlw
bGV4aW5nQmFja2VuZFRhcmdldCk6CisgICAgICAgIChXSS5UYXJnZXRNYW5hZ2VyLnByb3RvdHlw
ZS5jcmVhdGVEaXJlY3RCYWNrZW5kVGFyZ2V0KToKKyAgICAgICAgKFdJLlRhcmdldE1hbmFnZXIu
cHJvdG90eXBlLnRhcmdldENyZWF0ZWQpOgorICAgICAgICAoV0kuVGFyZ2V0TWFuYWdlci5wcm90
b3R5cGUuZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQpOgorICAgICAgICAoV0kuVGFyZ2V0TWFu
YWdlci5wcm90b3R5cGUudGFyZ2V0RGVzdHJveWVkKToKKyAgICAgICAgKFdJLlRhcmdldE1hbmFn
ZXIucHJvdG90eXBlLmRpc3BhdGNoTWVzc2FnZUZyb21UYXJnZXQpOgorICAgICAgICAoV0kuVGFy
Z2V0TWFuYWdlci5wcm90b3R5cGUuX2NoZWNrQW5kSGFuZGxlUGFnZVRhcmdldFRyYW5zaXRpb24p
OgorICAgICAgICAoV0kuVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUuX2NoZWNrQW5kSGFuZGxlUGFn
ZVRhcmdldFRlcm1pbmF0aW9uKToKKyAgICAgICAgKFdJLlRhcmdldE1hbmFnZXIucHJvdG90eXBl
Ll9pbml0aWFsaXplQmFja2VuZFRhcmdldCk6CisgICAgICAgIChXSS5UYXJnZXRNYW5hZ2VyLnBy
b3RvdHlwZS5faW5pdGlhbGl6ZVBhZ2VUYXJnZXQpOgorICAgICAgICAoV0kuVGFyZ2V0TWFuYWdl
ci5wcm90b3R5cGUuX3RyYW5zaXRpb25QYWdlVGFyZ2V0KToKKyAgICAgICAgKFdJLlRhcmdldE1h
bmFnZXIucHJvdG90eXBlLl90ZXJtaW5hdGVQYWdlVGFyZ2V0KToKKyAgICAgICAgKFdJLlRhcmdl
dE1hbmFnZXIucHJvdG90eXBlLl9yZXNldE1haW5FeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAg
KFdJLlRhcmdldE1hbmFnZXIucHJvdG90eXBlLl9yZWRpcmVjdEdsb2JhbEFnZW50c1RvQ29ubmVj
dGlvbik6CisgICAgICAgICogVXNlckludGVyZmFjZS9Qcm90b2NvbC9Db25uZWN0aW9uLmpzOgor
ICAgICAgICAoSW5zcGVjdG9yQmFja2VuZC5Xb3JrZXJDb25uZWN0aW9uLnNlbmRNZXNzYWdlVG9C
YWNrZW5kKToKKyAgICAgICAgKEluc3BlY3RvckJhY2tlbmQuV29ya2VyQ29ubmVjdGlvbik6Cisg
ICAgICAgIChJbnNwZWN0b3JCYWNrZW5kLlRhcmdldENvbm5lY3Rpb24uc2VuZE1lc3NhZ2VUb0Jh
Y2tlbmQpOgorICAgICAgICAoSW5zcGVjdG9yQmFja2VuZC5UYXJnZXRDb25uZWN0aW9uKToKKyAg
ICAgICAgKiBVc2VySW50ZXJmYWNlL1Byb3RvY29sL1RhcmdldC5qczoKKyAgICAgICAgKFdJLlRh
cmdldC5wcm90b3R5cGUuZGVzdHJveSk6IE1hcmsgdGFyZ2V0IGFzIGRlc3Ryb3llZCB0byBkaXN0
aW5ndWlzaCBleHBlY3RlZCBjb21tYW5kIGVycm9ycyBmcm9tCisgICAgICAgIGdlbnVpbmUgZmFp
bHVyZXMuCisKKyAgICAgICAgKFdJLlRhcmdldC5wcm90b3R5cGUuaXNEZXN0cm95ZWQpOgorICAg
ICAgICAqIFVzZXJJbnRlcmZhY2UvUHJvdG9jb2wvVGFyZ2V0T2JzZXJ2ZXIuanM6IFNpbmNlIHRo
ZSBmcm9udC1lbmQgZG9lc24ndAorICAgICAgICBzZW5kIGNvbW1hbmRzIHRvIHRoZSBwcm92aXNp
b25hbCB0YXJnZXRzIHlldCwgaXQgaGFzIHRvIGlnbm9yZSBhbGwgYWN0aXZpdGllcworICAgICAg
ICByZWxhdGVkIHRvIHByb3Zpc2lvbmFsIHBhZ2VzLiBGb3IgdGhhdCByZWFzb24gd2UgbmVlZCB0
d28gc2V0cyB0byBrZWVwIHRyYWNrIG9mCisgICAgICAgIC0gcHJvdmlzaW9uYWwgcGFnZXMgdGhh
dCB3ZXJlIGRlc3Ryb3llZCBhbmQgbmV2ZXIgY29tbWl0dGVkCisgICAgICAgIC0gb2xkIHBhZ2Vz
IHdoaWNoIHdlcmUgcmVwbGFjZWQgYnkgY29tbWl0dGVkIHBhZ2UgYW5kIGZvciB3aGljaCBmb2xs
b3dpbmcgdGFyZ2V0RGVzdHJveWVkCisgICAgICAgIGV2ZW50IHNob3VsZCBiZSBpZ25vcmVkCisg
ICAgICAgIEJldHRlciBzdXBwb3J0IGZvciBwcm92aXNpb25hbCB0YXJnZXRzIHdpbGwgYmUgYWRk
ZWQgdG8gZnJvbnRlbmQgaW4gYSBzZXBhcmF0ZSBjaGFuZ2UuCisgICAgICAgIChXSS5UYXJnZXRP
YnNlcnZlcik6CisgICAgICAgIChXSS5UYXJnZXRPYnNlcnZlci5wcm90b3R5cGUudGFyZ2V0Q3Jl
YXRlZCk6CisgICAgICAgIChXSS5UYXJnZXRPYnNlcnZlci5wcm90b3R5cGUuZGlkQ29tbWl0UHJv
dmlzaW9uYWxUYXJnZXQpOiBGb3Igbm93IGNvbnZlcnQgdGhlIGV2ZW50IGludG8gYSBzdWJzZXF1
ZW5jZQorICAgICAgICBvZiB0YXJnZXREZXN0cm95ZWQvdGFyZ2V0Q3JlYXRlZCBldmVudHMgd2hp
Y2ggbWF0Y2hlcyBwcmV2aW91cyBiZWhhdmlvci4KKworICAgICAgICAoV0kuVGFyZ2V0T2JzZXJ2
ZXIucHJvdG90eXBlLnRhcmdldERlc3Ryb3llZCk6CisgICAgICAgIChXSS5UYXJnZXRPYnNlcnZl
ci5wcm90b3R5cGUuZGlzcGF0Y2hNZXNzYWdlRnJvbVRhcmdldCk6CisgICAgICAgICogVXNlcklu
dGVyZmFjZS9UZXN0L1Rlc3QuanM6CisgICAgICAgIChXSS50cmFuc2l0aW9uUGFnZVRhcmdldCk6
CisgICAgICAgIChXSS50ZXJtaW5hdGVQYWdlVGFyZ2V0KToKKwogMjAxOS0xMC0xMSAgRGV2aW4g
Um91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogRGVi
dWdnZXI6IHN1cHBvcnQgcGF0dGVybiBibGFja2JveGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA2YzBjNmQyNDNk
ZTBmMThhOGJhOGQ3NGFiZDUxNDQxYzUzYjk0MmI2Li5jN2U3ZTE0MTUxMjAxYWQ3Zjg0ODhlYTE2
MGRmZDdhNzUyMjQwYmI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDE5LTA5LTI3ICBZ
dXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IG5vdGlmeSBpbnNwZWN0b3Igd2hlbiBwcm92aXNpb25hbCBwYWdlIGlzIGNyZWF0ZWQs
IGNvbW1pdHRlZCBhbmQgZGVzdHJveWVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDI3MDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUYXJnZXQudGFyZ2V0Q3JlYXRlZCBldmVudCBpcyBub3cgZ2VuZXJh
dGVkIGZvciBwcm92aXNpb25hbCBwYWdlcyBhcyB3ZWxsIGFzIGZvciByZWd1bGFyCisgICAgICAg
IG9uZXMuIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgdG93YXJkIHJlYXR0YWNoaW5nIGluc3BlY3Rv
ciBlYXJsaWVyIGR1cmluZyBQU09OLiBJbiB0aGUgZnV0dXJlCisgICAgICAgIGlmIGRlYnVnZ2lu
ZyBpcyBpbiBwcm9ncmVzcyB0aGUgcHJvdmlzaW9uYWwgdGFyZ2V0IChwYWdlKSB3aWxsIGJlIHBh
dXNlZCB1bnRpbCBhIHNpZ25hbCBmcm9tCisgICAgICAgIGluc3BlY3RvciBmcm9udGVuZC4gVGhp
cyB3aWxsIGVuYWJsZSB0aGUgZnJvbnRlbmQgY29uZmlndXJlIGFsbCBhZ2VudHMgYmVmb3JlIG5h
dmlnYXRpb24gc3RhcnRzLgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmNwcDoKKyAgICAgICAgKEFQSTo6
V2ViQXV0aGVudGljYXRpb25QYW5lbDo6V2ViQXV0aGVudGljYXRpb25QYW5lbCk6IEFkZGVkIGV4
cGxpY2l0IG5hbWVzcGFjZSBzcGVjaWZpZXIKKyAgICAgICAgdG8gdGhlIGNvbnN0cnVjdG9yJ3Mg
YXJndW1lbnQgYXMgb3RoZXJ3aXNlIGNvbXBpbGF0aW9uIGZhaWxzIGR1ZSB0byBjb25mbGljdCBi
ZXR3ZWVuIEFQSTo6U3RyaW5nCisgICAgICAgIGFuZCBXVEY6OlN0cmluZy4KKworICAgICAgICAq
IFVJUHJvY2Vzcy9JbnNwZWN0b3JUYXJnZXRQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oklu
c3BlY3RvclRhcmdldFByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JU
YXJnZXRQcm94eTo6Y29ubmVjdCk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvclRhcmdldFBy
b3h5OjpkaXNjb25uZWN0KToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yVGFyZ2V0UHJveHk6
OnNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9y
VGFyZ2V0UHJveHk6OmRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0KToKKyAgICAgICAgKFdlYktp
dDo6SW5zcGVjdG9yVGFyZ2V0UHJveHk6OmlzUHJvdmlzaW9uYWwgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpJbnNwZWN0b3JUYXJnZXRQcm94eTo6cHJldmlvdXNUYXJnZXRJRCBjb25zdCk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0luc3BlY3RvclRhcmdldFByb3h5Lmg6IFRhcmdldCBwcm94eSBj
YW4gc3RhcnQgYXMgYSBwcm92aXNpb25hbCB0YXJnZXQgKHdpdGggYSBwb2ludGVyIHRvCisgICAg
ICAgIFByb3Zpc2lvbmFsUGFnZVByb3h5KSBhbmQgbGF0ZXIgZWl0aGVyIGJlIGNvbW1pdHRlZCBv
ciBkZXN0cm95ZWQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHku
Y3BwOgorICAgICAgICAoV2ViS2l0OjpQcm92aXNpb25hbFBhZ2VQcm94eTo6UHJvdmlzaW9uYWxQ
YWdlUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpQcm92aXNpb25hbFBhZ2VQcm94eTo6flByb3Zp
c2lvbmFsUGFnZVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UHJvdmlzaW9uYWxQYWdlUHJveHk6
OmRpZFJlY2VpdmVNZXNzYWdlKTogRm9yd2FyZCBpbnNwZWN0b3IgbWVzc2FnZXMgdG8gcGFyZW50
IHBhZ2UncyBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci4KKyAgICAgICAgU2luY2UgZWFjaCBX
ZWJQYWdlIGhhcyBhIHVuaXF1ZSBpZGVudGlmaWVyIHRoZSB0YXJnZXQgaWRzIHdpbGwgYmUgZ2xv
YmFsbHkgdW5pcXVlIGFuZCB0aGVyZSBpcyBubyByaXNrIG9mIGNvbGxpc2lvbnMuCisKKyAgICAg
ICAgKiBVSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6
UHJvdmlzaW9uYWxQYWdlUHJveHk6OnBhZ2UgY29uc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OmdldFRhcmdl
dElEKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OldlYlBh
Z2VJbnNwZWN0b3JDb250cm9sbGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUluc3BlY3Rv
ckNvbnRyb2xsZXI6OmNsZWFyVGFyZ2V0cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VJbnNw
ZWN0b3JDb250cm9sbGVyOjpjcmVhdGVJbnNwZWN0b3JUYXJnZXQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGVzdHJveUluc3BlY3RvclRhcmdldCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDcmVhdGVQcm92
aXNpb25hbFBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxl
cjo6ZGlkRGVzdHJveVByb3Zpc2lvbmFsUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VJ
bnNwZWN0b3JDb250cm9sbGVyOjpkaWRDb21taXRQcm92aXNpb25hbFBhZ2UpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkVGFyZ2V0KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50LmNwcDogUmVtb3ZlZC4gTWVyZ2VkIHRo
aXMgYWdlbnQgaW50byBJbnNwZWN0b3JUYXJnZXRBZ2VudC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50Lmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Om1fcmVzZXRSZWNlbnRDcmFz
aENvdW50VGltZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmZpbmlzaEF0dGFj
aGluZ1RvV2ViUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y29tbWl0
UHJvdmlzaW9uYWxQYWdlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6IE1v
dmVkIHRoZSB0YXJnZXQgbWFuYWdlbWVudCBsb2dpYyBpbnRvIFdlYlBhZ2VJbnNwZWN0b3JDb250
cm9sbGVyLgorICAgICAgICBXZWJQYWdlUHJveHkvUHJvdmlzaW9uYWxQYWdlUHJveHkgYXJlIGV4
cGVjdGVkIHRvIG5vdGlmaXkgaXQgYWJvdXQga2V5IGxpZmVjeWNsZSBldmVudHMgYW5kIGFsc28K
KyAgICAgICAgZm9yd2FyZCB0byBpdCBtZXNzYWdlcyBmcm9tIGluc3BlY3RvciBpbiB0aGUgaW5z
cGVjdGVkIFdlYlByb2Nlc3MuIEhvdyBpdCB0cmFuc2xhdGVzIHRvIFRhcmdldAorICAgICAgICBl
dmVudHMgaXMgaW5zcGVjdG9yJ3MgYnVzaW5lc3MuCisKKyAgICAgICAgKiBXZWJLaXQueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZUluc3BlY3RvclRhcmdldC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VJbnNwZWN0b3JU
YXJnZXQ6OmlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0Ojpjb25uZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUluc3BlY3RvclRh
cmdldDo6ZGlzY29ubmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXQ6OnRvVGFyZ2V0SUQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0Lmg6IE1hZGUgdGhlIHRhcmdldCBvd24gZnJvbnRlbmQgY2hhbm5lbCBpbnN0
YW5jZSBhcyBpdCdzIHRoZQorICAgICAgICBvbmx5IHBsYWNlIHdoZXJlIHRoZSBwYWdlIHNwZWNp
ZmljIGNoYW5uZWwgaXMgdXNlZC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpyZW1vdmVUYXJnZXQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6Y29ubmVjdEluc3BlY3Rvcik6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpkaXNj
b25uZWN0SW5zcGVjdG9yKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUlu
c3BlY3RvclRhcmdldENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw6OldlYlBhZ2VJbnNwZWN0
b3JUYXJnZXRGcm9udGVuZENoYW5uZWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsOjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFu
bmVsLmg6IFRoZSBjaGFubmVsJ3MgbGlmZXRpbWUgaXMgbWFuYWdlZCBieSBvd25pbmcKKyAgICAg
ICAgdGFyZ2V0LiBObyBuZWVkIHRvIHJlZmVyZW5jZSBjb3VudCBpdC4KKwogMjAxOS0xMC0xNCAg
VHJ1aXR0IFNhdmVsbCAgPHRzYXZlbGxAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHIyNTEwNDUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclRhcmdldC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JUYXJnZXQuaAppbmRleCA5ZWRhYTFmNDIwOTVmMDYyZjQ1YTgxMDNmYTI3
NGI1MTViNjJmMThiLi5hNjk0Mzc3MjA0NmZhYzk3YzBmOTUxOGYyODQ4N2ViOTU4OWEyNmYyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRhcmdl
dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGFyZ2V0
LmgKQEAgLTQ3LDkgKzQ3LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN0cmluZyBpZGVudGlm
aWVyKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgSW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKCkg
Y29uc3QgPSAwOwogCisgICAgdmlydHVhbCBib29sIGlzUHJvdmlzaW9uYWwoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIHByZXZpb3VzVGFyZ2V0SUQoKSBjb25z
dCB7IHJldHVybiBTdHJpbmcoKTsgfQorCiAgICAgLy8gQ29ubmVjdGlvbiBtYW5hZ2VtZW50Lgot
ICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0KEZyb250ZW5kQ2hhbm5lbCYpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgZGlzY29ubmVjdChGcm9udGVuZENoYW5uZWwmKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGNvbm5lY3QoRnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBkaXNjb25uZWN0KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZW5kTWVzc2Fn
ZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmKSA9IDA7CiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2Vu
dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JU
YXJnZXRBZ2VudC5jcHAKaW5kZXggYzZjNmJmODA2ZTJlMjZiMTU0YmY5Y2E3MmMwY2NhZTk0ZjUw
M2NhYS4uYzMwYTAyOTJhMGI3Y2FlYjk2NWIxZTIwMGE2OGI4MGRhYThlZjI1YyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvclRhcmdldEFnZW50LmNwcApAQCAtMzIsNiArMzIsNyBAQCBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKIAogSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6Okluc3BlY3RvclRhcmdldEFnZW50KEZyb250
ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlciwgQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNw
YXRjaGVyKQogICAgIDogSW5zcGVjdG9yQWdlbnRCYXNlKCJUYXJnZXQiX3MpCisgICAgLCBtX3Jv
dXRlcihmcm9udGVuZFJvdXRlcikKICAgICAsIG1fZnJvbnRlbmREaXNwYXRjaGVyKG1ha2VVbmlx
dWU8VGFyZ2V0RnJvbnRlbmREaXNwYXRjaGVyPihmcm9udGVuZFJvdXRlcikpCiAgICAgLCBtX2Jh
Y2tlbmREaXNwYXRjaGVyKFRhcmdldEJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoYmFja2VuZERp
c3BhdGNoZXIsIHRoaXMpKQogewpAQCAtOTYsMTAgKzk3LDE1IEBAIHN0YXRpYyBQcm90b2NvbDo6
VGFyZ2V0OjpUYXJnZXRJbmZvOjpUeXBlIHRhcmdldFR5cGVUb1Byb3RvY29sVHlwZShJbnNwZWN0
b3JUYXJnCiAKIHN0YXRpYyBSZWY8UHJvdG9jb2w6OlRhcmdldDo6VGFyZ2V0SW5mbz4gYnVpbGRU
YXJnZXRJbmZvT2JqZWN0KGNvbnN0IEluc3BlY3RvclRhcmdldCYgdGFyZ2V0KQogewotICAgIHJl
dHVybiBQcm90b2NvbDo6VGFyZ2V0OjpUYXJnZXRJbmZvOjpjcmVhdGUoKQorICAgIGF1dG8gcmVz
dWx0ID0gUHJvdG9jb2w6OlRhcmdldDo6VGFyZ2V0SW5mbzo6Y3JlYXRlKCkKICAgICAgICAgLnNl
dFRhcmdldElkKHRhcmdldC5pZGVudGlmaWVyKCkpCiAgICAgICAgIC5zZXRUeXBlKHRhcmdldFR5
cGVUb1Byb3RvY29sVHlwZSh0YXJnZXQudHlwZSgpKSkKICAgICAgICAgLnJlbGVhc2UoKTsKKyAg
ICBpZiAodGFyZ2V0LmlzUHJvdmlzaW9uYWwoKSkgeworICAgICAgICByZXN1bHQtPnNldElzUHJv
dmlzaW9uYWwodHJ1ZSk7CisgICAgICAgIHJlc3VsdC0+c2V0UHJldmlvdXNUYXJnZXRJZCh0YXJn
ZXQucHJldmlvdXNUYXJnZXRJRCgpKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAog
dm9pZCBJbnNwZWN0b3JUYXJnZXRBZ2VudDo6dGFyZ2V0Q3JlYXRlZChJbnNwZWN0b3JUYXJnZXQm
IHRhcmdldCkKQEAgLTExMCw3ICsxMTYsNyBAQCB2b2lkIEluc3BlY3RvclRhcmdldEFnZW50Ojp0
YXJnZXRDcmVhdGVkKEluc3BlY3RvclRhcmdldCYgdGFyZ2V0KQogICAgIGlmICghbV9pc0Nvbm5l
Y3RlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdGFyZ2V0LmNvbm5lY3QoZnJvbnRlbmRDaGFu
bmVsKCkpOworICAgIHRhcmdldC5jb25uZWN0KGNvbm5lY3Rpb25UeXBlKCkpOwogCiAgICAgbV9m
cm9udGVuZERpc3BhdGNoZXItPnRhcmdldENyZWF0ZWQoYnVpbGRUYXJnZXRJbmZvT2JqZWN0KHRh
cmdldCkpOwogfQpAQCAtMTIyLDI3ICsxMjgsNDIgQEAgdm9pZCBJbnNwZWN0b3JUYXJnZXRBZ2Vu
dDo6dGFyZ2V0RGVzdHJveWVkKEluc3BlY3RvclRhcmdldCYgdGFyZ2V0KQogICAgIGlmICghbV9p
c0Nvbm5lY3RlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdGFyZ2V0LmRpc2Nvbm5lY3QoZnJv
bnRlbmRDaGFubmVsKCkpOworICAgIHRhcmdldC5kaXNjb25uZWN0KCk7CiAKICAgICBtX2Zyb250
ZW5kRGlzcGF0Y2hlci0+dGFyZ2V0RGVzdHJveWVkKHRhcmdldC5pZGVudGlmaWVyKCkpOwogfQog
Ci12b2lkIEluc3BlY3RvclRhcmdldEFnZW50Ojpjb25uZWN0VG9UYXJnZXRzKCkKK3ZvaWQgSW5z
cGVjdG9yVGFyZ2V0QWdlbnQ6OmRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0KGNvbnN0IFN0cmlu
ZyYgb2xkVGFyZ2V0SUQsIGNvbnN0IFN0cmluZyYgY29tbWl0dGVkVGFyZ2V0SUQpCit7CisgICAg
aWYgKCFtX2lzQ29ubmVjdGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvKiB0YXJnZXQg
PSBtX3RhcmdldHMuZ2V0KGNvbW1pdHRlZFRhcmdldElEKTsKKyAgICBpZiAoIXRhcmdldCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgYXV0byB0YXJnZXRJbmZvID0gYnVpbGRUYXJnZXRJbmZvT2Jq
ZWN0KCp0YXJnZXQpOworICAgIHRhcmdldEluZm8tPnNldFByZXZpb3VzVGFyZ2V0SWQob2xkVGFy
Z2V0SUQpOworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kaWRDb21taXRQcm92aXNpb25hbFRh
cmdldChXVEZNb3ZlKHRhcmdldEluZm8pKTsKK30KKworRnJvbnRlbmRDaGFubmVsOjpDb25uZWN0
aW9uVHlwZSBJbnNwZWN0b3JUYXJnZXRBZ2VudDo6Y29ubmVjdGlvblR5cGUoKSBjb25zdAogewot
ICAgIGF1dG8mIGNoYW5uZWwgPSBmcm9udGVuZENoYW5uZWwoKTsKKyAgICByZXR1cm4gbV9yb3V0
ZXIuaGFzTG9jYWxGcm9udGVuZCgpID8gSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5l
Y3Rpb25UeXBlOjpMb2NhbCA6IEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9u
VHlwZTo6UmVtb3RlOworfQogCit2b2lkIEluc3BlY3RvclRhcmdldEFnZW50Ojpjb25uZWN0VG9U
YXJnZXRzKCkKK3sKICAgICBmb3IgKEluc3BlY3RvclRhcmdldCogdGFyZ2V0IDogbV90YXJnZXRz
LnZhbHVlcygpKSB7Ci0gICAgICAgIHRhcmdldC0+Y29ubmVjdChjaGFubmVsKTsKKyAgICAgICAg
dGFyZ2V0LT5jb25uZWN0KGNvbm5lY3Rpb25UeXBlKCkpOwogICAgICAgICBtX2Zyb250ZW5kRGlz
cGF0Y2hlci0+dGFyZ2V0Q3JlYXRlZChidWlsZFRhcmdldEluZm9PYmplY3QoKnRhcmdldCkpOwog
ICAgIH0KIH0KIAogdm9pZCBJbnNwZWN0b3JUYXJnZXRBZ2VudDo6ZGlzY29ubmVjdEZyb21UYXJn
ZXRzKCkKIHsKLSAgICBhdXRvJiBjaGFubmVsID0gZnJvbnRlbmRDaGFubmVsKCk7Ci0KICAgICBm
b3IgKEluc3BlY3RvclRhcmdldCogdGFyZ2V0IDogbV90YXJnZXRzLnZhbHVlcygpKQotICAgICAg
ICB0YXJnZXQtPmRpc2Nvbm5lY3QoY2hhbm5lbCk7CisgICAgICAgIHRhcmdldC0+ZGlzY29ubmVj
dCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2Vu
dC5oCmluZGV4IDMxMmViNjAwYWI4ZWI0M2EwYWU3NDc4ZmMxYjcwODRkMDU0NmRjN2QuLmNlOTFl
ODNlYWRmZjJjOGY1YjEwYzE0Zjc3ODQ5MDM3NjA1ZGFiYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0
QWdlbnQuaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiSW5zcGVjdG9yQWdlbnRCYXNl
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW5jbHVkZSAi
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRE
aXNwYXRjaGVycy5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKQEAgLTQwLDYgKzQxLDcg
QEAgY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgSW5zcGVjdG9yVGFyZ2V0QWdlbnQgOiBwdWJsaWMg
SW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNw
ZWN0b3JUYXJnZXRBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
CisgICAgSW5zcGVjdG9yVGFyZ2V0QWdlbnQoRnJvbnRlbmRSb3V0ZXImLCBCYWNrZW5kRGlzcGF0
Y2hlciYpOwogICAgIH5JbnNwZWN0b3JUYXJnZXRBZ2VudCgpIG92ZXJyaWRlOwogCiAgICAgLy8g
SW5zcGVjdG9yQWdlbnRCYXNlCkBAIC01MywxOSArNTUsMTggQEAgcHVibGljOgogICAgIC8vIFRh
cmdldCBsaWZlY3ljbGUuCiAgICAgdm9pZCB0YXJnZXRDcmVhdGVkKEluc3BlY3RvclRhcmdldCYp
OwogICAgIHZvaWQgdGFyZ2V0RGVzdHJveWVkKEluc3BlY3RvclRhcmdldCYpOworICAgIHZvaWQg
ZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQoY29uc3QgU3RyaW5nJiBvbGRUYXJnZXRJRCwgY29u
c3QgU3RyaW5nJiBjb21taXR0ZWRUYXJnZXRJRCk7CiAKICAgICAvLyBUYXJnZXQgbWVzc2FnZXMu
CiAgICAgdm9pZCBzZW5kTWVzc2FnZUZyb21UYXJnZXRUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYg
dGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CiAKLXByb3RlY3RlZDoKLSAgICBJbnNw
ZWN0b3JUYXJnZXRBZ2VudChGcm9udGVuZFJvdXRlciYsIEJhY2tlbmREaXNwYXRjaGVyJik7Ci0K
LSAgICB2aXJ0dWFsIEZyb250ZW5kQ2hhbm5lbCYgZnJvbnRlbmRDaGFubmVsKCkgPSAwOwotCiBw
cml2YXRlOgorICAgIC8vIEZyb250ZW5kQ2hhbm5lbAorICAgIEZyb250ZW5kQ2hhbm5lbDo6Q29u
bmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUoKSBjb25zdDsKICAgICB2b2lkIGNvbm5lY3RUb1Rh
cmdldHMoKTsKICAgICB2b2lkIGRpc2Nvbm5lY3RGcm9tVGFyZ2V0cygpOwogCisgICAgSW5zcGVj
dG9yOjpGcm9udGVuZFJvdXRlciYgbV9yb3V0ZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFRhcmdl
dEZyb250ZW5kRGlzcGF0Y2hlcj4gbV9mcm9udGVuZERpc3BhdGNoZXI7CiAgICAgUmVmPFRhcmdl
dEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwogICAgIEhhc2hNYXA8U3Ry
aW5nLCBJbnNwZWN0b3JUYXJnZXQqPiBtX3RhcmdldHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1RhcmdldC5qc29uIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9UYXJnZXQuanNvbgppbmRleCA2MWFkMjY5ZDk1
ZTE4ZmQ1OWRhNTVjN2MzZWY3ZDVkMTRhZDEzMmRhLi42MjY5Nzk3OTg4YzIyNmMyZjcyYzMxYzM4
MzczY2Q4NDhlMzE2Mzc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3Byb3RvY29sL1RhcmdldC5qc29uCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvcHJvdG9jb2wvVGFyZ2V0Lmpzb24KQEAgLTgsNyArOCw5IEBACiAgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiRGVzY3JpcHRpb24gb2YgYSB0YXJnZXQuIiwKICAgICAgICAgICAgICJw
cm9wZXJ0aWVzIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGFyZ2V0SWQiLCAidHlw
ZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSB0
YXJnZXQuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidHlwZSIsICJ0eXBlIjogInN0
cmluZyIsICJlbnVtIjogWyJqYXZhc2NyaXB0IiwgInBhZ2UiLCAid29ya2VyIiwgInNlcnZpY2V3
b3JrZXIiXSB9CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0eXBlIiwgInR5cGUiOiAic3Ry
aW5nIiwgImVudW0iOiBbImphdmFzY3JpcHQiLCAicGFnZSIsICJ3b3JrZXIiLCAic2VydmljZXdv
cmtlciJdIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpc1Byb3Zpc2lvbmFsIiwgInR5
cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJXaGV0aGVy
IHRoaXMgaXMgYSBwcm92aXNpb25hbCBwYWdlIHRhcmdldC4iIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJwcmV2aW91c1RhcmdldElkIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFs
IjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIkZvciBhIHByb3Zpc2lvbmFsIHRhcmdldCByZXByZXNl
bnMgSUQgb2YgdGhlIHRhcmdldCBpdCBpcyBzd2FwcGVkIHdpdGggd2hlbiBjb21taXR0ZWQuIiB9
CiAgICAgICAgICAgICBdCiAgICAgICAgIH0KICAgICBdLApAQCAtMzksNiArNDEsMTIgQEAKICAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInRhcmdldElkIiwgInR5cGUiOiAic3RyaW5nIiB9CiAg
ICAgICAgICAgICBdCiAgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjog
ImRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0IiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjog
WworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGFyZ2V0SW5mbyIsICIkcmVmIjogIlRhcmdl
dEluZm8iLCAiZGVzY3JpcHRpb24iOiAiQ29tbWl0dGVkIHRhcmdldCBpbmZvLiIgfQorICAgICAg
ICAgICAgXQorICAgICAgICB9LAogICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJkaXNw
YXRjaE1lc3NhZ2VGcm9tVGFyZ2V0IiwKICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4
IDJjNjdiNzI0NDgzMWY2MDVmMDhkZjQxMjVmMjFjZWVjNzFjOTBjYTkuLmVhNWU5MzU1ODBkZmIw
ZjU3Nzc5YWQ4YmEwZGE1N2I1YzcwNTMxN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTM0NCwxNyArMzQ0LDYgQEAgdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpzaG93KCkKICAgICAgICAgY29ubmVjdEZyb250ZW5kKCpmcm9u
dGVuZENoYW5uZWwpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldElzVW5kZXJU
ZXN0KGJvb2wgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09IG1faXNVbmRlclRlc3QpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1faXNVbmRlclRlc3QgPSB2YWx1ZTsKLQotICAgIC8vIDxyZGFy
Oi8vcHJvYmxlbS8yNjc2ODYyOD4gVHJ5IHRvIGNhdGNoIHN1c3BpY2lvdXMgc2NlbmFyaW9zIHdo
ZXJlIHdlIG1heSBoYXZlIGEgZGFuZ2xpbmcgZnJvbnRlbmQgd2hpbGUgcnVubmluZyB0ZXN0cy4K
LSAgICBSRUxFQVNFX0FTU0VSVCghbV9pc1VuZGVyVGVzdCB8fCAhbV9mcm9udGVuZFJvdXRlci0+
aGFzRnJvbnRlbmRzKCkpOwotfQotCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmV2YWx1YXRl
Rm9yVGVzdEluRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBzY3JpcHQpCiB7CiAgICAgZW5zdXJlSW5z
cGVjdG9yQWdlbnQoKS5ldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKHNjcmlwdCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCA1MTg2ZDU3
MDE3M2RkOTExZWU0NTFlYmJiZmIyMmIxM2FlZWY1NzU5Li45MGMyM2Q1NmQyZDg1YjcwMDBkYmU0
YzQ3YWM1NGUwNjc5MGI3NWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmgKQEAgLTEwMSw3ICsxMDEsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBkaWRDb21wb3NpdGUoRnJhbWUmKTsKIAogICAgIGJvb2wgaXNVbmRlclRl
c3QoKSBjb25zdCB7IHJldHVybiBtX2lzVW5kZXJUZXN0OyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRJc1VuZGVyVGVzdChib29sKTsKKyAgICB2b2lkIHNldElzVW5kZXJUZXN0KGJvb2wg
aXNVbmRlclRlc3QpIHsgbV9pc1VuZGVyVGVzdCA9IGlzVW5kZXJUZXN0OyB9CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGNvbnN0IFN0cmluZyYgc2Ny
aXB0KTsKIAogICAgIEluc3BlY3RvckNsaWVudCogaW5zcGVjdG9yQ2xpZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9pbnNwZWN0b3JDbGllbnQ7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcwppbmRleCA2ZmIzNTdmMGY2ZGMyMWRkMjhmZTg4NDMz
MzE5MDY4ODdiMDQ5YWE0Li40NDEyNzdjYWVmNTliNWRhNmJmNTExZWFhMjk0MmE5ZWI1MGNlMWNm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01h
aW4uanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWlu
LmpzCkBAIC0xNzgsODUgKzE3OCw2IEBAIFdJLmxvYWRlZCA9IGZ1bmN0aW9uKCkKICAgICB9CiB9
OwogCi1XSS5pbml0aWFsaXplQmFja2VuZFRhcmdldCA9IGZ1bmN0aW9uKHRhcmdldCkKLXsKLSAg
ICBjb25zb2xlLmFzc2VydCghV0kubWFpblRhcmdldCk7Ci0KLSAgICBXSS5iYWNrZW5kVGFyZ2V0
ID0gdGFyZ2V0OwotCi0gICAgV0kucmVzZXRNYWluRXhlY3V0aW9uQ29udGV4dCgpOwotCi0gICAg
V0kuX3RhcmdldHNBdmFpbGFibGVQcm9taXNlLnJlc29sdmUoKTsKLX07Ci0KLVdJLmluaXRpYWxp
emVQYWdlVGFyZ2V0ID0gZnVuY3Rpb24odGFyZ2V0KQotewotICAgIGNvbnNvbGUuYXNzZXJ0KFdJ
LnNoYXJlZEFwcC5kZWJ1Z2dhYmxlVHlwZSA9PT0gV0kuRGVidWdnYWJsZVR5cGUuV2ViKTsKLSAg
ICBjb25zb2xlLmFzc2VydCh0YXJnZXQudHlwZSA9PT0gV0kuVGFyZ2V0LlR5cGUuUGFnZSB8fCB0
YXJnZXQgaW5zdGFuY2VvZiBXSS5EaXJlY3RCYWNrZW5kVGFyZ2V0KTsKLQotICAgIFdJLnBhZ2VU
YXJnZXQgPSB0YXJnZXQ7Ci0KLSAgICBXSS5yZWRpcmVjdEdsb2JhbEFnZW50c1RvQ29ubmVjdGlv
bihXSS5wYWdlVGFyZ2V0LmNvbm5lY3Rpb24pOwotCi0gICAgV0kucmVzZXRNYWluRXhlY3V0aW9u
Q29udGV4dCgpOwotfTsKLQotV0kudHJhbnNpdGlvblBhZ2VUYXJnZXQgPSBmdW5jdGlvbih0YXJn
ZXQpCi17Ci0gICAgY29uc29sZS5hc3NlcnQoIVdJLnBhZ2VUYXJnZXQpOwotICAgIGNvbnNvbGUu
YXNzZXJ0KFdJLnNoYXJlZEFwcC5kZWJ1Z2dhYmxlVHlwZSA9PT0gV0kuRGVidWdnYWJsZVR5cGUu
V2ViKTsKLSAgICBjb25zb2xlLmFzc2VydCh0YXJnZXQudHlwZSA9PT0gV0kuVGFyZ2V0LlR5cGUu
UGFnZSk7Ci0KLSAgICBXSS5wYWdlVGFyZ2V0ID0gdGFyZ2V0OwotCi0gICAgV0kucmVkaXJlY3RH
bG9iYWxBZ2VudHNUb0Nvbm5lY3Rpb24oV0kucGFnZVRhcmdldC5jb25uZWN0aW9uKTsKLQotICAg
IFdJLnJlc2V0TWFpbkV4ZWN1dGlvbkNvbnRleHQoKTsKLQotICAgIC8vIEFjdGlvbnMgdG8gdHJh
bnNpdGlvbiB0aGUgcGFnZSB0YXJnZXQuCi0gICAgV0kubm90aWZpY2F0aW9ucy5kaXNwYXRjaEV2
ZW50VG9MaXN0ZW5lcnMoV0kuTm90aWZpY2F0aW9uLlRyYW5zaXRpb25QYWdlVGFyZ2V0KTsKLSAg
ICBXSS5kb21NYW5hZ2VyLnRyYW5zaXRpb25QYWdlVGFyZ2V0KCk7Ci0gICAgV0kubmV0d29ya01h
bmFnZXIudHJhbnNpdGlvblBhZ2VUYXJnZXQoKTsKLSAgICBXSS50aW1lbGluZU1hbmFnZXIudHJh
bnNpdGlvblBhZ2VUYXJnZXQoKTsKLX07Ci0KLVdJLnRlcm1pbmF0ZVBhZ2VUYXJnZXQgPSBmdW5j
dGlvbih0YXJnZXQpCi17Ci0gICAgY29uc29sZS5hc3NlcnQoV0kucGFnZVRhcmdldCk7Ci0gICAg
Y29uc29sZS5hc3NlcnQoV0kucGFnZVRhcmdldCA9PT0gdGFyZ2V0KTsKLSAgICBjb25zb2xlLmFz
c2VydChXSS5zaGFyZWRBcHAuZGVidWdnYWJsZVR5cGUgPT09IFdJLkRlYnVnZ2FibGVUeXBlLldl
Yik7Ci0KLSAgICAvLyBSZW1vdmUgYW55IFdvcmtlciB0YXJnZXRzIGFzc29jaWF0ZWQgd2l0aCB0
aGlzIHBhZ2UuCi0gICAgbGV0IHdvcmtlclRhcmdldHMgPSBXSS50YXJnZXRzLmZpbHRlcigoeCkg
PT4geC50eXBlID09PSBXSS5UYXJnZXQuVHlwZS5Xb3JrZXIpOwotICAgIGZvciAobGV0IHdvcmtl
clRhcmdldCBvZiB3b3JrZXJUYXJnZXRzKQotICAgICAgICBXSS53b3JrZXJNYW5hZ2VyLndvcmtl
clRlcm1pbmF0ZWQod29ya2VyVGFyZ2V0LmlkZW50aWZpZXIpOwotCi0gICAgV0kucGFnZVRhcmdl
dCA9IG51bGw7Ci0KLSAgICBXSS5yZWRpcmVjdEdsb2JhbEFnZW50c1RvQ29ubmVjdGlvbihXSS5i
YWNrZW5kQ29ubmVjdGlvbik7Ci19OwotCi1XSS5yZXNldE1haW5FeGVjdXRpb25Db250ZXh0ID0g
ZnVuY3Rpb24oKQotewotICAgIGlmIChXSS5tYWluVGFyZ2V0IGluc3RhbmNlb2YgV0kuTXVsdGlw
bGV4aW5nQmFja2VuZFRhcmdldCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKFdJLm1haW5U
YXJnZXQuZXhlY3V0aW9uQ29udGV4dCkgewotICAgICAgICBXSS5ydW50aW1lTWFuYWdlci5hY3Rp
dmVFeGVjdXRpb25Db250ZXh0ID0gV0kubWFpblRhcmdldC5leGVjdXRpb25Db250ZXh0OwotICAg
ICAgICBpZiAoV0kucXVpY2tDb25zb2xlKQotICAgICAgICAgICAgV0kucXVpY2tDb25zb2xlLmlu
aXRpYWxpemVNYWluRXhlY3V0aW9uQ29udGV4dFBhdGhDb21wb25lbnQoKTsKLSAgICB9Ci19Owot
Ci1XSS5yZWRpcmVjdEdsb2JhbEFnZW50c1RvQ29ubmVjdGlvbiA9IGZ1bmN0aW9uKGNvbm5lY3Rp
b24pCi17Ci0gICAgLy8gVGhpcyBtYWtlcyBnbG9iYWwgd2luZG93LkZvb0FnZW50IGRpc3BhdGNo
IHRvIHRoZSBhY3RpdmUgcGFnZSB0YXJnZXQuCi0gICAgZm9yIChsZXQgW2RvbWFpbiwgYWdlbnRd
IG9mIE9iamVjdC5lbnRyaWVzKEluc3BlY3RvckJhY2tlbmQuX2FnZW50cykpIHsKLSAgICAgICAg
aWYgKGRvbWFpbiAhPT0gIlRhcmdldCIpCi0gICAgICAgICAgICBhZ2VudC5jb25uZWN0aW9uID0g
Y29ubmVjdGlvbjsKLSAgICB9Ci19OwotCiBXSS5jb250ZW50TG9hZGVkID0gZnVuY3Rpb24oKQog
ewogICAgIC8vIElmIHRoZXJlIHdhcyBhbiB1bmNhdWdodCBleGNlcHRpb24gZWFybGllciBkdXJp
bmcgbG9hZGluZywgdGhlbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvQ29udHJvbGxlcnMvVGFyZ2V0TWFuYWdlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1RhcmdldE1hbmFnZXIuanMKaW5kZXggYTlm
YTRkZTBlODNhNmI2NzE3MzRiOGFlNmEzMGM4OGQzNWFjN2IxOC4uNTBkYjljYmM4MWI1N2I2MTY1
MmNkNjRjNmJjNTk0OTUzNmIwYjBkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvVGFyZ2V0TWFuYWdlci5qcworKysgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9UYXJnZXRNYW5hZ2VyLmpz
CkBAIC0zMyw2ICszMyw5IEBAIFdJLlRhcmdldE1hbmFnZXIgPSBjbGFzcyBUYXJnZXRNYW5hZ2Vy
IGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIHRoaXMuX2NhY2hlZFRhcmdldHNMaXN0ID0gbnVs
bDsKICAgICAgICAgdGhpcy5fc2VlblBhZ2VUYXJnZXQgPSBmYWxzZTsKICAgICAgICAgdGhpcy5f
dHJhbnNpdGlvblRpbWVvdXRJZGVudGlmaWVyID0gdW5kZWZpbmVkOworCisgICAgICAgIHRoaXMu
X3Byb3Zpc2lvbmFsVGFyZ2V0SWRzID0gbmV3IFNldDsKKyAgICAgICAgdGhpcy5fc3dhcHBlZFRh
cmdldElkcyA9IG5ldyBTZXQ7CiAgICAgfQogCiAgICAgLy8gUHVibGljCkBAIC04MCw2ICs4Myw3
IEBAIFdJLlRhcmdldE1hbmFnZXIgPSBjbGFzcyBUYXJnZXRNYW5hZ2VyIGV4dGVuZHMgV0kuT2Jq
ZWN0CiAKICAgICAgICAgdGhpcy5fY2FjaGVkVGFyZ2V0c0xpc3QgPSBudWxsOwogICAgICAgICB0
aGlzLl90YXJnZXRzLmRlbGV0ZSh0YXJnZXQuaWRlbnRpZmllcik7CisgICAgICAgIHRhcmdldC5k
ZXN0cm95KCk7CiAKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV0kuVGFy
Z2V0TWFuYWdlci5FdmVudC5UYXJnZXRSZW1vdmVkLCB7dGFyZ2V0fSk7CiAgICAgfQpAQCAtODks
NyArOTMsNyBAQCBXSS5UYXJnZXRNYW5hZ2VyID0gY2xhc3MgVGFyZ2V0TWFuYWdlciBleHRlbmRz
IFdJLk9iamVjdAogICAgICAgICBsZXQgdGFyZ2V0ID0gbmV3IFdJLk11bHRpcGxleGluZ0JhY2tl
bmRUYXJnZXQ7CiAgICAgICAgIHRhcmdldC5pbml0aWFsaXplKCk7CiAKLSAgICAgICAgV0kuaW5p
dGlhbGl6ZUJhY2tlbmRUYXJnZXQodGFyZ2V0KTsKKyAgICAgICAgdGhpcy5faW5pdGlhbGl6ZUJh
Y2tlbmRUYXJnZXQodGFyZ2V0KTsKIAogICAgICAgICAvLyBBZGQgdGhlIHRhcmdldCB3aXRob3V0
IGRpc3BhdGNoaW5nIGFuIGV2ZW50LgogICAgICAgICB0aGlzLl90YXJnZXRzLnNldCh0YXJnZXQu
aWRlbnRpZmllciwgdGFyZ2V0KTsKQEAgLTEwMCwxMCArMTA0LDEwIEBAIFdJLlRhcmdldE1hbmFn
ZXIgPSBjbGFzcyBUYXJnZXRNYW5hZ2VyIGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIGxldCB0
YXJnZXQgPSBuZXcgV0kuRGlyZWN0QmFja2VuZFRhcmdldDsKICAgICAgICAgdGFyZ2V0LmluaXRp
YWxpemUoKTsKIAotICAgICAgICBXSS5pbml0aWFsaXplQmFja2VuZFRhcmdldCh0YXJnZXQpOwor
ICAgICAgICB0aGlzLl9pbml0aWFsaXplQmFja2VuZFRhcmdldCh0YXJnZXQpOwogCiAgICAgICAg
IGlmIChXSS5zaGFyZWRBcHAuZGVidWdnYWJsZVR5cGUgPT09IFdJLkRlYnVnZ2FibGVUeXBlLldl
YikKLSAgICAgICAgICAgIFdJLmluaXRpYWxpemVQYWdlVGFyZ2V0KHRhcmdldCk7CisgICAgICAg
ICAgICB0aGlzLl9pbml0aWFsaXplUGFnZVRhcmdldCh0YXJnZXQpOwogCiAgICAgICAgIHRoaXMu
YWRkVGFyZ2V0KHRhcmdldCk7CiAgICAgfQpAQCAtMTEyLDYgKzExNiwxMyBAQCBXSS5UYXJnZXRN
YW5hZ2VyID0gY2xhc3MgVGFyZ2V0TWFuYWdlciBleHRlbmRzIFdJLk9iamVjdAogCiAgICAgdGFy
Z2V0Q3JlYXRlZCh0YXJnZXRJbmZvKQogICAgIHsKKyAgICAgICAgLy8gQ09NUEFUSUJJTElUWSAo
aU9TIDEzLjApOiBgVGFyZ2V0LlRhcmdldEluZm8uaXNQcm92aXNpb25hbGAgZGlkIG5vdCBleGlz
dCB5ZXQuCisgICAgICAgIGlmICh0YXJnZXRJbmZvLmlzUHJvdmlzaW9uYWwpIHsKKyAgICAgICAg
ICAgIHRoaXMuX3Byb3Zpc2lvbmFsVGFyZ2V0SWRzLmFkZCh0YXJnZXRJbmZvLnRhcmdldElkKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjb25zb2xlLmFzc2VydCgh
dGhpcy5fcHJvdmlzaW9uYWxUYXJnZXRJZHMuaGFzKHRhcmdldEluZm8udGFyZ2V0SWQpKTsKKwog
ICAgICAgICAvLyBGSVhNRTogRWxpbWluYXRlIHRoaXMgb25jZSB0aGUgbG9jYWwgaW5zcGVjdG9y
IGlzIGNvbmZpZ3VyZWQgdG8gdXNlCiAgICAgICAgIC8vIHRoZSBNdWx0aXBsZXhpbmcgY29kZSBw
YXRoLiBUaGVuIHdlIGNhbiBwZXJmb3JtIHRoaXMgaW1tZWRpYXRlbHkKICAgICAgICAgLy8gaW4g
YFdJLmxvYWRlZGAgaWYgYSBUYXJnZXRBZ2VudCBleGlzdHMuCkBAIC0xMjYsOCArMTM3LDIxIEBA
IFdJLlRhcmdldE1hbmFnZXIgPSBjbGFzcyBUYXJnZXRNYW5hZ2VyIGV4dGVuZHMgV0kuT2JqZWN0
CiAgICAgICAgIHRoaXMuYWRkVGFyZ2V0KHRhcmdldCk7CiAgICAgfQogCisgICAgZGlkQ29tbWl0
UHJvdmlzaW9uYWxUYXJnZXQodGFyZ2V0SW5mbykKKyAgICB7CisgICAgICAgIHRoaXMudGFyZ2V0
RGVzdHJveWVkKHRhcmdldEluZm8ucHJldmlvdXNUYXJnZXRJZCk7CisgICAgICAgIHRoaXMuX3By
b3Zpc2lvbmFsVGFyZ2V0SWRzLmRlbGV0ZSh0YXJnZXRJbmZvLnRhcmdldElkKTsKKyAgICAgICAg
dGhpcy50YXJnZXRDcmVhdGVkKHRhcmdldEluZm8pOworICAgICAgICB0aGlzLl9zd2FwcGVkVGFy
Z2V0SWRzLmFkZCh0YXJnZXRJbmZvLnByZXZpb3VzVGFyZ2V0SWQpOworCisgICAgfQorCiAgICAg
dGFyZ2V0RGVzdHJveWVkKHRhcmdldElkKQogICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX3Byb3Zp
c2lvbmFsVGFyZ2V0SWRzLmRlbGV0ZSh0YXJnZXRJZCkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGlmICh0aGlzLl9zd2FwcGVkVGFyZ2V0SWRzLmRlbGV0ZSh0YXJnZXRJZCkpCisgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIGxldCB0YXJnZXQgPSB0aGlzLl90YXJnZXRzLmdldCh0
YXJnZXRJZCk7CiAgICAgICAgIHRoaXMuX2NoZWNrQW5kSGFuZGxlUGFnZVRhcmdldFRlcm1pbmF0
aW9uKHRhcmdldCk7CiAgICAgICAgIHRoaXMucmVtb3ZlVGFyZ2V0KHRhcmdldCk7CkBAIC0xMzUs
NiArMTU5LDggQEAgV0kuVGFyZ2V0TWFuYWdlciA9IGNsYXNzIFRhcmdldE1hbmFnZXIgZXh0ZW5k
cyBXSS5PYmplY3QKIAogICAgIGRpc3BhdGNoTWVzc2FnZUZyb21UYXJnZXQodGFyZ2V0SWQsIG1l
c3NhZ2UpCiAgICAgeworICAgICAgICBpZiAodGhpcy5fcHJvdmlzaW9uYWxUYXJnZXRJZHMuaGFz
KHRhcmdldElkKSkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbGV0IHRhcmdldCA9IHRo
aXMuX3RhcmdldHMuZ2V0KHRhcmdldElkKTsKICAgICAgICAgY29uc29sZS5hc3NlcnQodGFyZ2V0
KTsKICAgICAgICAgaWYgKCF0YXJnZXQpCkBAIC0xNzEsMTIgKzE5NywxMiBAQCBXSS5UYXJnZXRN
YW5hZ2VyID0gY2xhc3MgVGFyZ2V0TWFuYWdlciBleHRlbmRzIFdJLk9iamVjdAogICAgICAgICAv
LyBGaXJzdCBwYWdlIHRhcmdldC4KICAgICAgICAgaWYgKCFXSS5wYWdlVGFyZ2V0ICYmICF0aGlz
Ll9zZWVuUGFnZVRhcmdldCkgewogICAgICAgICAgICAgdGhpcy5fc2VlblBhZ2VUYXJnZXQgPSB0
cnVlOwotICAgICAgICAgICAgV0kuaW5pdGlhbGl6ZVBhZ2VUYXJnZXQodGFyZ2V0KTsKKyAgICAg
ICAgICAgIHRoaXMuX2luaXRpYWxpemVQYWdlVGFyZ2V0KHRhcmdldCk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUcmFuc2l0aW9uaW5nIHBhZ2UgdGFyZ2V0
LgotICAgICAgICBXSS50cmFuc2l0aW9uUGFnZVRhcmdldCh0YXJnZXQpOworICAgICAgICB0aGlz
Ll90cmFuc2l0aW9uUGFnZVRhcmdldCh0YXJnZXQpOwogICAgIH0KIAogICAgIF9jaGVja0FuZEhh
bmRsZVBhZ2VUYXJnZXRUZXJtaW5hdGlvbih0YXJnZXQpCkBAIC0xODgsNyArMjE0LDcgQEAgV0ku
VGFyZ2V0TWFuYWdlciA9IGNsYXNzIFRhcmdldE1hbmFnZXIgZXh0ZW5kcyBXSS5PYmplY3QKICAg
ICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fc2VlblBhZ2VUYXJnZXQpOwogCiAgICAgICAgIC8v
IFRlcm1pbmF0aW5nIHRoZSBwYWdlIHRhcmdldC4KLSAgICAgICAgV0kudGVybWluYXRlUGFnZVRh
cmdldCh0YXJnZXQpOworICAgICAgICB0aGlzLl90ZXJtaW5hdGVQYWdlVGFyZ2V0KHRhcmdldCk7
CiAKICAgICAgICAgLy8gRW5zdXJlIHdlIHRyYW5zaXRpb24gaW4gYSByZWFzb25hYmxlIGFtb3Vu
dCBvZiB0aW1lLCBvdGhlcndpc2UgY2xvc2UuCiAgICAgICAgIGNvbnN0IHRpbWVUb1RyYW5zaXRp
b24gPSAyMDAwOwpAQCAtMjAyLDYgKzIyOCw4MiBAQCBXSS5UYXJnZXRNYW5hZ2VyID0gY2xhc3Mg
VGFyZ2V0TWFuYWdlciBleHRlbmRzIFdJLk9iamVjdAogICAgICAgICAgICAgV0kuY2xvc2UoKTsK
ICAgICAgICAgfSwgdGltZVRvVHJhbnNpdGlvbik7CiAgICAgfQorCisgICAgX2luaXRpYWxpemVC
YWNrZW5kVGFyZ2V0KHRhcmdldCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCFXSS5t
YWluVGFyZ2V0KTsKKworICAgICAgICBXSS5iYWNrZW5kVGFyZ2V0ID0gdGFyZ2V0OworCisgICAg
ICAgIHRoaXMuX3Jlc2V0TWFpbkV4ZWN1dGlvbkNvbnRleHQoKTsKKworICAgICAgICBXSS5fdGFy
Z2V0c0F2YWlsYWJsZVByb21pc2UucmVzb2x2ZSgpOworICAgIH0KKworICAgIF9pbml0aWFsaXpl
UGFnZVRhcmdldCh0YXJnZXQpCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydChXSS5zaGFy
ZWRBcHAuZGVidWdnYWJsZVR5cGUgPT09IFdJLkRlYnVnZ2FibGVUeXBlLldlYik7CisgICAgICAg
IGNvbnNvbGUuYXNzZXJ0KHRhcmdldC50eXBlID09PSBXSS5UYXJnZXQuVHlwZS5QYWdlIHx8IHRh
cmdldCBpbnN0YW5jZW9mIFdJLkRpcmVjdEJhY2tlbmRUYXJnZXQpOworCisgICAgICAgIFdJLnBh
Z2VUYXJnZXQgPSB0YXJnZXQ7CisKKyAgICAgICAgdGhpcy5fcmVkaXJlY3RHbG9iYWxBZ2VudHNU
b0Nvbm5lY3Rpb24oV0kucGFnZVRhcmdldC5jb25uZWN0aW9uKTsKKworICAgICAgICB0aGlzLl9y
ZXNldE1haW5FeGVjdXRpb25Db250ZXh0KCk7CisgICAgfQorCisgICAgX3RyYW5zaXRpb25QYWdl
VGFyZ2V0KHRhcmdldCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCFXSS5wYWdlVGFy
Z2V0KTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoV0kuc2hhcmVkQXBwLmRlYnVnZ2FibGVUeXBl
ID09PSBXSS5EZWJ1Z2dhYmxlVHlwZS5XZWIpOworICAgICAgICBjb25zb2xlLmFzc2VydCh0YXJn
ZXQudHlwZSA9PT0gV0kuVGFyZ2V0LlR5cGUuUGFnZSk7CisKKyAgICAgICAgV0kucGFnZVRhcmdl
dCA9IHRhcmdldDsKKworICAgICAgICB0aGlzLl9yZWRpcmVjdEdsb2JhbEFnZW50c1RvQ29ubmVj
dGlvbihXSS5wYWdlVGFyZ2V0LmNvbm5lY3Rpb24pOworCisgICAgICAgIHRoaXMuX3Jlc2V0TWFp
bkV4ZWN1dGlvbkNvbnRleHQoKTsKKworICAgICAgICAvLyBBY3Rpb25zIHRvIHRyYW5zaXRpb24g
dGhlIHBhZ2UgdGFyZ2V0LgorICAgICAgICBXSS5ub3RpZmljYXRpb25zLmRpc3BhdGNoRXZlbnRU
b0xpc3RlbmVycyhXSS5Ob3RpZmljYXRpb24uVHJhbnNpdGlvblBhZ2VUYXJnZXQpOworICAgICAg
ICBXSS5kb21NYW5hZ2VyLnRyYW5zaXRpb25QYWdlVGFyZ2V0KCk7CisgICAgICAgIFdJLm5ldHdv
cmtNYW5hZ2VyLnRyYW5zaXRpb25QYWdlVGFyZ2V0KCk7CisgICAgICAgIFdJLnRpbWVsaW5lTWFu
YWdlci50cmFuc2l0aW9uUGFnZVRhcmdldCgpOworICAgIH0KKworICAgIF90ZXJtaW5hdGVQYWdl
VGFyZ2V0KHRhcmdldCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KFdJLnBhZ2VUYXJn
ZXQpOworICAgICAgICBjb25zb2xlLmFzc2VydChXSS5wYWdlVGFyZ2V0ID09PSB0YXJnZXQpOwor
ICAgICAgICBjb25zb2xlLmFzc2VydChXSS5zaGFyZWRBcHAuZGVidWdnYWJsZVR5cGUgPT09IFdJ
LkRlYnVnZ2FibGVUeXBlLldlYik7CisKKyAgICAgICAgLy8gUmVtb3ZlIGFueSBXb3JrZXIgdGFy
Z2V0cyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYWdlLgorICAgICAgICBsZXQgd29ya2VyVGFyZ2V0
cyA9IFdJLnRhcmdldHMuZmlsdGVyKCh4KSA9PiB4LnR5cGUgPT09IFdJLlRhcmdldC5UeXBlLldv
cmtlcik7CisgICAgICAgIGZvciAobGV0IHdvcmtlclRhcmdldCBvZiB3b3JrZXJUYXJnZXRzKQor
ICAgICAgICAgICAgV0kud29ya2VyTWFuYWdlci53b3JrZXJUZXJtaW5hdGVkKHdvcmtlclRhcmdl
dC5pZGVudGlmaWVyKTsKKworICAgICAgICBXSS5wYWdlVGFyZ2V0ID0gbnVsbDsKKworICAgICAg
ICB0aGlzLl9yZWRpcmVjdEdsb2JhbEFnZW50c1RvQ29ubmVjdGlvbihXSS5iYWNrZW5kQ29ubmVj
dGlvbik7CisgICAgfQorCisgICAgX3Jlc2V0TWFpbkV4ZWN1dGlvbkNvbnRleHQoKQorICAgIHsK
KyAgICAgICAgaWYgKFdJLm1haW5UYXJnZXQgaW5zdGFuY2VvZiBXSS5NdWx0aXBsZXhpbmdCYWNr
ZW5kVGFyZ2V0KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChXSS5tYWluVGFy
Z2V0LmV4ZWN1dGlvbkNvbnRleHQpCisgICAgICAgICAgICBXSS5ydW50aW1lTWFuYWdlci5hY3Rp
dmVFeGVjdXRpb25Db250ZXh0ID0gV0kubWFpblRhcmdldC5leGVjdXRpb25Db250ZXh0OworICAg
IH0KKworICAgIF9yZWRpcmVjdEdsb2JhbEFnZW50c1RvQ29ubmVjdGlvbihjb25uZWN0aW9uKQor
ICAgIHsKKyAgICAgICAgLy8gVGhpcyBtYWtlcyBnbG9iYWwgd2luZG93LkZvb0FnZW50IGRpc3Bh
dGNoIHRvIHRoZSBhY3RpdmUgcGFnZSB0YXJnZXQuCisgICAgICAgIGZvciAobGV0IFtkb21haW4s
IGFnZW50XSBvZiBPYmplY3QuZW50cmllcyhJbnNwZWN0b3JCYWNrZW5kLl9hZ2VudHMpKSB7Cisg
ICAgICAgICAgICBpZiAoZG9tYWluICE9PSAiVGFyZ2V0IikKKyAgICAgICAgICAgICAgICBhZ2Vu
dC5jb25uZWN0aW9uID0gY29ubmVjdGlvbjsKKyAgICAgICAgfQorICAgIH07CiB9OwogCiBXSS5U
YXJnZXRNYW5hZ2VyLkV2ZW50ID0gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wvQ29ubmVjdGlvbi5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL0Nvbm5lY3Rpb24uanMKaW5kZXggYjI3Mzc4N2Yz
YjM1OTk1NzFkMGMwZTk4MjAzMTFlZDU0OTM2YjNmNi4uNWU1YjRjNDg1YzlmYTAzYzE0MmY1NmZh
YjNjZTM4ODVmNjliNDgyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvUHJvdG9jb2wvQ29ubmVjdGlvbi5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Qcm90b2NvbC9Db25uZWN0aW9uLmpzCkBAIC0zMDgsOCArMzA4LDEy
IEBAIEluc3BlY3RvckJhY2tlbmQuV29ya2VyQ29ubmVjdGlvbiA9IGNsYXNzIEluc3BlY3RvckJh
Y2tlbmRXb3JrZXJDb25uZWN0aW9uIGV4dGVuCiAKICAgICBzZW5kTWVzc2FnZVRvQmFja2VuZCht
ZXNzYWdlKQogICAgIHsKLSAgICAgICAgLy8gSWdub3JlIGVycm9ycyBpZiBhIHdvcmtlciB3ZW50
IGF3YXkgcXVpY2tseS4KLSAgICAgICAgV29ya2VyQWdlbnQuc2VuZE1lc3NhZ2VUb1dvcmtlcih0
aGlzLl93b3JrZXJJZCwgbWVzc2FnZSkuY2F0Y2goZnVuY3Rpb24oKXt9KTsKKyAgICAgICAgV29y
a2VyQWdlbnQuc2VuZE1lc3NhZ2VUb1dvcmtlcih0aGlzLl93b3JrZXJJZCwgbWVzc2FnZSkuY2F0
Y2goKGVycm9yKSA9PiB7CisgICAgICAgICAgICAvLyBJZ25vcmUgZXJyb3JzIGlmIGEgd29ya2Vy
IHdlbnQgYXdheSBxdWlja2x5LgorICAgICAgICAgICAgaWYgKHRoaXMudGFyZ2V0LmlzRGVzdHJv
eWVkKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIFdJLnJlcG9ydEludGVy
bmFsRXJyb3IoZXJyb3IpOworICAgICAgICB9KTsKICAgICB9CiB9OwogCkBAIC0zMzIsNyArMzM2
LDEzIEBAIEluc3BlY3RvckJhY2tlbmQuVGFyZ2V0Q29ubmVjdGlvbiA9IGNsYXNzIEluc3BlY3Rv
ckJhY2tlbmRUYXJnZXRDb25uZWN0aW9uIGV4dGVuCiAKICAgICBzZW5kTWVzc2FnZVRvQmFja2Vu
ZChtZXNzYWdlKQogICAgIHsKLSAgICAgICAgVGFyZ2V0QWdlbnQuc2VuZE1lc3NhZ2VUb1Rhcmdl
dCh0aGlzLl90YXJnZXRJZCwgbWVzc2FnZSk7CisgICAgICAgIFRhcmdldEFnZW50LnNlbmRNZXNz
YWdlVG9UYXJnZXQodGhpcy5fdGFyZ2V0SWQsIG1lc3NhZ2UpLmNhdGNoKChlcnJvcikgPT4gewor
ICAgICAgICAgICAgLy8gQ29tbWFuZCBtYXkgYmUgc2VudCBhZnRlciB0YXJnZXQgaXMgYWxyZWFk
eSBkZXN0cm95ZWQgb24gYmFja2VuZCwKKyAgICAgICAgICAgIC8vIGlnbm9yZSBzdWNoIGVycm9y
cy4KKyAgICAgICAgICAgIGlmICh0aGlzLnRhcmdldC5pc0Rlc3Ryb3llZCkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICBXSS5yZXBvcnRJbnRlcm5hbEVycm9yKGVycm9yKTsK
KyAgICAgICAgfSk7CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wvVGFyZ2V0LmpzIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wvVGFyZ2V0LmpzCmluZGV4IDIwMzM0MTBhNmI1MzM1
OGViN2NhOTI1MTMxNzVkMzEyYWFkMWE0NDguLjEyNmFmYTlkMmM5OGRjNWYxNmEyNjdhNjUyMjJi
ZjI0NGVmYzE1ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1Byb3RvY29sL1RhcmdldC5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9Qcm90b2NvbC9UYXJnZXQuanMKQEAgLTIwMCw2ICsyMDAsMTAgQEAgV0kuVGFyZ2V0
ID0gY2xhc3MgVGFyZ2V0IGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hF
dmVudFRvTGlzdGVuZXJzKFdJLlRhcmdldC5FdmVudC5TY3JpcHRBZGRlZCwge3NjcmlwdH0pOwog
ICAgIH0KIAorICAgIGRlc3Ryb3koKSB7IHRoaXMuX2lzRGVzdHJveWVkID0gdHJ1ZTsgfQorCisg
ICAgZ2V0IGlzRGVzdHJveWVkKCkgeyByZXR1cm4gdGhpcy5faXNEZXN0cm95ZWQ7IH0KKwogICAg
IC8vIFByaXZhdGUKIAogICAgIF9zdXBwb3J0ZWREb21haW5zRm9yVGFyZ2V0VHlwZSh0eXBlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wv
VGFyZ2V0T2JzZXJ2ZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Q
cm90b2NvbC9UYXJnZXRPYnNlcnZlci5qcwppbmRleCAzMWI2ZmNmYzE4NjllZDEzODc4MWUxMDcx
ZGQxOWI1NDdjMDljYmY0Li4xMmFhOGI0ODYzMjYwNjc0ZWM3NmZlODI4YzE3MDk1MjI5MDFlNDdh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Qcm90b2Nv
bC9UYXJnZXRPYnNlcnZlci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9Qcm90b2NvbC9UYXJnZXRPYnNlcnZlci5qcwpAQCAtMzIsNiArMzIsMTEgQEAgV0kuVGFy
Z2V0T2JzZXJ2ZXIgPSBjbGFzcyBUYXJnZXRPYnNlcnZlcgogICAgICAgICBXSS50YXJnZXRNYW5h
Z2VyLnRhcmdldENyZWF0ZWQodGFyZ2V0SW5mbyk7CiAgICAgfQogCisgICAgZGlkQ29tbWl0UHJv
dmlzaW9uYWxUYXJnZXQodGFyZ2V0SW5mbykKKyAgICB7CisgICAgICAgIFdJLnRhcmdldE1hbmFn
ZXIuZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQodGFyZ2V0SW5mbyk7CisgICAgfQorCiAgICAg
dGFyZ2V0RGVzdHJveWVkKHRhcmdldElkKQogICAgIHsKICAgICAgICAgV0kudGFyZ2V0TWFuYWdl
ci50YXJnZXREZXN0cm95ZWQodGFyZ2V0SWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvVGVzdC9UZXN0LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvVGVzdC9UZXN0LmpzCmluZGV4IDc1NzA4YTAwYzk1ODE3MjdlZTBmNGMz
ODUzNDNhNGYyNDRiMjNkMzUuLmU1YzhlYTFiNjhlNjA0OTU5ZDhlZjc3ZThmOGY5M2U2NTk2ZWM4
MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Rlc3Qv
VGVzdC5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9UZXN0L1Rl
c3QuanMKQEAgLTg2LDUyICs4Niw2IEBAIFdJLmxvYWRlZCA9IGZ1bmN0aW9uKCkKICAgICB9KTsK
IH07CiAKLVdJLmluaXRpYWxpemVCYWNrZW5kVGFyZ2V0ID0gZnVuY3Rpb24odGFyZ2V0KQotewot
ICAgIFdJLmJhY2tlbmRUYXJnZXQgPSB0YXJnZXQ7Ci0KLSAgICBXSS5yZXNldE1haW5FeGVjdXRp
b25Db250ZXh0KCk7Ci0KLSAgICBXSS5fdGFyZ2V0c0F2YWlsYWJsZVByb21pc2UucmVzb2x2ZSgp
OwotfTsKLQotV0kuaW5pdGlhbGl6ZVBhZ2VUYXJnZXQgPSBmdW5jdGlvbih0YXJnZXQpCi17Ci0g
ICAgV0kucGFnZVRhcmdldCA9IHRhcmdldDsKLQotICAgIFdJLnJlZGlyZWN0R2xvYmFsQWdlbnRz
VG9Db25uZWN0aW9uKFdJLnBhZ2VUYXJnZXQuY29ubmVjdGlvbik7Ci0KLSAgICBXSS5yZXNldE1h
aW5FeGVjdXRpb25Db250ZXh0KCk7Ci19OwotCi1XSS50cmFuc2l0aW9uUGFnZVRhcmdldCA9IGZ1
bmN0aW9uKHRhcmdldCkKLXsKLSAgICBjb25zb2xlLmVycm9yKCJXSS50cmFuc2l0aW9uUGFnZVRh
cmdldCBzaG91bGQgbm90IGJlIHJlYWNoZWQgaW4gdGVzdHMuIik7Ci19OwotCi1XSS50ZXJtaW5h
dGVQYWdlVGFyZ2V0ID0gZnVuY3Rpb24odGFyZ2V0KQotewotICAgIGNvbnNvbGUuZXJyb3IoIldJ
LnRlcm1pbmF0ZVBhZ2VUYXJnZXQgc2hvdWxkIG5vdCBiZSByZWFjaGVkIGluIHRlc3RzLiIpOwot
fTsKLQotV0kucmVzZXRNYWluRXhlY3V0aW9uQ29udGV4dCA9IGZ1bmN0aW9uKCkKLXsKLSAgICBp
ZiAoV0kubWFpblRhcmdldCBpbnN0YW5jZW9mIFdJLk11bHRpcGxleGluZ0JhY2tlbmRUYXJnZXQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChXSS5tYWluVGFyZ2V0LmV4ZWN1dGlvbkNvbnRl
eHQpCi0gICAgICAgIFdJLnJ1bnRpbWVNYW5hZ2VyLmFjdGl2ZUV4ZWN1dGlvbkNvbnRleHQgPSBX
SS5tYWluVGFyZ2V0LmV4ZWN1dGlvbkNvbnRleHQ7Ci19OwotCi1XSS5yZWRpcmVjdEdsb2JhbEFn
ZW50c1RvQ29ubmVjdGlvbiA9IGZ1bmN0aW9uKGNvbm5lY3Rpb24pCi17Ci0gICAgLy8gVGhpcyBt
YWtlcyBnbG9iYWwgd2luZG93LkZvb0FnZW50IGRpc3BhdGNoIHRvIHRoZSBhY3RpdmUgcGFnZSB0
YXJnZXQuCi0gICAgZm9yIChsZXQgW2RvbWFpbiwgYWdlbnRdIG9mIE9iamVjdC5lbnRyaWVzKElu
c3BlY3RvckJhY2tlbmQuX2FnZW50cykpIHsKLSAgICAgICAgaWYgKGRvbWFpbiAhPT0gIlRhcmdl
dCIpCi0gICAgICAgICAgICBhZ2VudC5jb25uZWN0aW9uID0gY29ubmVjdGlvbjsKLSAgICB9Ci19
OwotCiBXSS5jb250ZW50TG9hZGVkID0gZnVuY3Rpb24oKQogewogICAgIC8vIFRoaW5ncyB0aGF0
IHdvdWxkIG5vcm1hbGx5IGdldCBjYWxsZWQgYnkgdGhlIFVJLCB0aGF0IHdlIHN0aWxsIHdhbnQg
dG8gZG8gaW4gdGVzdHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9WaWV3cy9RdWlja0NvbnNvbGUuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9WaWV3cy9RdWlja0NvbnNvbGUuanMKaW5kZXggNmNmNmQyNzU1ZGJlZmI1YTg2
M2ZiNTkzZTU0MDU4ZWQ0MDlmNzIyOS4uNTE4ODc1YTMyNDVjNWNjNjY5NDY3ZWM0YmNkMDc0ZmZm
NjBhZTM0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Vmlld3MvUXVpY2tDb25zb2xlLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL1ZpZXdzL1F1aWNrQ29uc29sZS5qcwpAQCAtNjksNyArNjksNyBAQCBXSS5RdWlja0Nv
bnNvbGUgPSBjbGFzcyBRdWlja0NvbnNvbGUgZXh0ZW5kcyBXSS5WaWV3CiAgICAgICAgIHRoaXMu
X2V4ZWN1dGlvbkNvbnRleHRTZWxlY3RvckRpdmlkZXIgPSBuZXcgV0kuRGl2aWRlck5hdmlnYXRp
b25JdGVtOwogICAgICAgICB0aGlzLl9uYXZpZ2F0aW9uQmFyLmFkZE5hdmlnYXRpb25JdGVtKHRo
aXMuX2V4ZWN1dGlvbkNvbnRleHRTZWxlY3RvckRpdmlkZXIpOwogCi0gICAgICAgIHRoaXMuaW5p
dGlhbGl6ZU1haW5FeGVjdXRpb25Db250ZXh0UGF0aENvbXBvbmVudCgpOworICAgICAgICB0aGlz
Ll9pbml0aWFsaXplTWFpbkV4ZWN1dGlvbkNvbnRleHRQYXRoQ29tcG9uZW50KCk7CiAKICAgICAg
ICAgV0kuc2V0dGluZ3MuY29uc29sZVNhdmVkUmVzdWx0QWxpYXMuYWRkRXZlbnRMaXN0ZW5lcihX
SS5TZXR0aW5nLkV2ZW50LkNoYW5nZWQsIHRoaXMuX3VwZGF0ZUF1dG9tYXRpY0V4ZWN1dGlvbkNv
bnRleHRQYXRoQ29tcG9uZW50VG9vbHRpcCwgdGhpcyk7CiAKQEAgLTgyLDYgKzgyLDcgQEAgV0ku
UXVpY2tDb25zb2xlID0gY2xhc3MgUXVpY2tDb25zb2xlIGV4dGVuZHMgV0kuVmlldwogICAgICAg
ICBXSS5kZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5EZWJ1Z2dlck1hbmFnZXIu
RXZlbnQuQWN0aXZlQ2FsbEZyYW1lRGlkQ2hhbmdlLCB0aGlzLl9kZWJ1Z2dlckFjdGl2ZUNhbGxG
cmFtZURpZENoYW5nZSwgdGhpcyk7CiAKICAgICAgICAgV0kucnVudGltZU1hbmFnZXIuYWRkRXZl
bnRMaXN0ZW5lcihXSS5SdW50aW1lTWFuYWdlci5FdmVudC5BY3RpdmVFeGVjdXRpb25Db250ZXh0
Q2hhbmdlZCwgdGhpcy5fYWN0aXZlRXhlY3V0aW9uQ29udGV4dENoYW5nZWQsIHRoaXMpOworICAg
ICAgICBXSS5ub3RpZmljYXRpb25zLmFkZEV2ZW50TGlzdGVuZXIoV0kuTm90aWZpY2F0aW9uLlRy
YW5zaXRpb25QYWdlVGFyZ2V0LCB0aGlzLl9wYWdlVGFyZ2V0VHJhbnNpc2lvbmVkLCB0aGlzKTsK
IAogICAgICAgICBXSS50YXJnZXRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV0kuVGFyZ2V0TWFu
YWdlci5FdmVudC5UYXJnZXRBZGRlZCwgdGhpcy5fdGFyZ2V0QWRkZWQsIHRoaXMpOwogICAgICAg
ICBXSS50YXJnZXRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV0kuVGFyZ2V0TWFuYWdlci5FdmVu
dC5UYXJnZXRSZW1vdmVkLCB0aGlzLl90YXJnZXRSZW1vdmVkLCB0aGlzKTsKQEAgLTExMSw3ICsx
MTIsMTQgQEAgV0kuUXVpY2tDb25zb2xlID0gY2xhc3MgUXVpY2tDb25zb2xlIGV4dGVuZHMgV0ku
VmlldwogICAgICAgICBzdXBlci5jbG9zZWQoKTsKICAgICB9CiAKLSAgICBpbml0aWFsaXplTWFp
bkV4ZWN1dGlvbkNvbnRleHRQYXRoQ29tcG9uZW50KCkKKyAgICBfcGFnZVRhcmdldFRyYW5zaXNp
b25lZCgpCisgICAgeworICAgICAgICBpZiAoV0kubWFpblRhcmdldCBpbnN0YW5jZW9mIFdJLk11
bHRpcGxleGluZ0JhY2tlbmRUYXJnZXQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRo
aXMuX2luaXRpYWxpemVNYWluRXhlY3V0aW9uQ29udGV4dFBhdGhDb21wb25lbnQoKTsKKyAgICB9
CisKKyAgICBfaW5pdGlhbGl6ZU1haW5FeGVjdXRpb25Db250ZXh0UGF0aENvbXBvbmVudCgpCiAg
ICAgewogICAgICAgICBpZiAoIVdJLm1haW5UYXJnZXQgfHwgIVdJLm1haW5UYXJnZXQuZXhlY3V0
aW9uQ29udGV4dCkKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CmluZGV4IGQ3ZDg5OTFl
ZDZjZWU5ODdmMzJjNTg0YjBkZTNmYTgwY2MwZjkwOTAuLmI5ZmIzNTRjNjFkMWEzMDk2NmJjZTUy
NjFmYmNkMmQzNzI2OWJjZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQK
KysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApAQCAtMjg5LDcgKzI4OSw2IEBAIFVJUHJv
Y2Vzcy9XZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuY3BwCiBVSVByb2Nlc3MvV2ViUGFn
ZUdyb3VwLmNwcAogVUlQcm9jZXNzL1dlYlBhZ2VJbmplY3RlZEJ1bmRsZUNsaWVudC5jcHAKIFVJ
UHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKLVVJUHJvY2Vzcy9XZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwCiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAogVUlQ
cm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5jcHAKIFVJUHJvY2Vzcy9XZWJQcmVmZXJlbmNlcy5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJBdXRoZW50
aWNhdGlvblBhbmVsLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJBdXRo
ZW50aWNhdGlvblBhbmVsLmNwcAppbmRleCAwMGQyZDFhMjRjMjFjMjllMjk3NThmYjJmZmJiNWFh
Y2Y1N2YzYmJmLi5jZTBjMmMwMWNkYjEzODc5YzI5ZWNhYTcyZDVjZjY3YWU1ZTQzOGM1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25Q
YW5lbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRp
Y2F0aW9uUGFuZWwuY3BwCkBAIC0zMiwxMiArMzIsMTIgQEAKIAogbmFtZXNwYWNlIEFQSSB7CiAK
LVJlZjxXZWJBdXRoZW50aWNhdGlvblBhbmVsPiBXZWJBdXRoZW50aWNhdGlvblBhbmVsOjpjcmVh
dGUoY29uc3QgU3RyaW5nJiBycElkKQorUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWw+IFdlYkF1
dGhlbnRpY2F0aW9uUGFuZWw6OmNyZWF0ZShjb25zdCBXVEY6OlN0cmluZyYgcnBJZCkKIHsKICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJBdXRoZW50aWNhdGlvblBhbmVsKHJwSWQpKTsKIH0K
IAotV2ViQXV0aGVudGljYXRpb25QYW5lbDo6V2ViQXV0aGVudGljYXRpb25QYW5lbChjb25zdCBT
dHJpbmcmIHJwSWQpCitXZWJBdXRoZW50aWNhdGlvblBhbmVsOjpXZWJBdXRoZW50aWNhdGlvblBh
bmVsKGNvbnN0IFdURjo6U3RyaW5nJiBycElkKQogICAgIDogbV9ycElkKHJwSWQpCiAgICAgLCBt
X2NsaWVudChXVEY6Om1ha2VVbmlxdWVSZWY8V2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVudD4o
KSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJBdXRo
ZW50aWNhdGlvblBhbmVsLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0
aGVudGljYXRpb25QYW5lbC5oCmluZGV4IDc1MDQ4ODZjMDRjMDMzYWEyNmQyNWQ4ZjEzNTAzZDVm
OWY5NzU4MmYuLmNkNmUyMDcxMmEyMDFlZjI4ODVjZDE3NWVlMjczODU3ZGZmNTc0NjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBh
bmVsLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0
aW9uUGFuZWwuaApAQCAtMzgsNyArMzgsNyBAQCBjbGFzcyBXZWJBdXRoZW50aWNhdGlvblBhbmVs
Q2xpZW50OwogCiBjbGFzcyBXZWJBdXRoZW50aWNhdGlvblBhbmVsIGZpbmFsIDogcHVibGljIE9i
amVjdEltcGw8T2JqZWN0OjpUeXBlOjpXZWJBdXRoZW50aWNhdGlvblBhbmVsPiwgcHVibGljIENh
bk1ha2VXZWFrUHRyPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWw+IHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWw+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHJwSWQp
OworICAgIHN0YXRpYyBSZWY8V2ViQXV0aGVudGljYXRpb25QYW5lbD4gY3JlYXRlKGNvbnN0IFdU
Rjo6U3RyaW5nJiBycElkKTsKICAgICB+V2ViQXV0aGVudGljYXRpb25QYW5lbCgpOwogCiAgICAg
V1RGOjpTdHJpbmcgcnBJZCgpIGNvbnN0IHsgcmV0dXJuIG1fcnBJZDsgfQpAQCAtNDcsNyArNDcs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDbGllbnQoVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0
aW9uUGFuZWxDbGllbnQ+JiYpOwogCiBwcml2YXRlOgotICAgIFdlYkF1dGhlbnRpY2F0aW9uUGFu
ZWwoY29uc3QgU3RyaW5nJiBycElkKTsKKyAgICBXZWJBdXRoZW50aWNhdGlvblBhbmVsKGNvbnN0
IFdURjo6U3RyaW5nJiBycElkKTsKIAogICAgIFdURjo6U3RyaW5nIG1fcnBJZDsKICAgICBVbmlx
dWVSZWY8V2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVudD4gbV9jbGllbnQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3JUYXJnZXRQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3JUYXJnZXRQcm94eS5jcHAKaW5kZXggNjFiOGYz
NmVmYTc1MWYxYzg4ZDkyYmExYWRjZDE1ZWNhNjE0NTgyMi4uMWVjOTk3YmE4MjM5NjBjYjY0YjIy
YTRhMzZkYTlmNDNmNWIzMGEzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yVGFyZ2V0UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3RvclRhcmdldFByb3h5LmNwcApAQCAtMjYsNyArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkluc3BlY3RvclRhcmdldFByb3h5LmgiCiAKKyNpbmNsdWRlICJQcm92
aXNpb25hbFBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYkZyYW1lUHJveHkuaCIKKyNpbmNsdWRl
ICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmgiCiAjaW5jbHVkZSAiV2ViUGFnZU1lc3NhZ2VzLmgi
CiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5Lmgi
CkBAIC0zNSw5ICszNywxNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKIAotUmVmPEluc3BlY3RvclRhcmdldFByb3h5PiBJbnNwZWN0b3JUYXJnZXRQ
cm94eTo6Y3JlYXRlKFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwg
SW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUpCitzdGQ6OnVuaXF1ZV9wdHI8SW5z
cGVjdG9yVGFyZ2V0UHJveHk+IEluc3BlY3RvclRhcmdldFByb3h5OjpjcmVhdGUoV2ViUGFnZVBy
b3h5JiBwYWdlLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRh
cmdldFR5cGUgdHlwZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JUYXJn
ZXRQcm94eShwYWdlLCB0YXJnZXRJZCwgdHlwZSkpOworICAgIHJldHVybiBtYWtlVW5pcXVlPElu
c3BlY3RvclRhcmdldFByb3h5PihwYWdlLCB0YXJnZXRJZCwgdHlwZSk7Cit9CisKK3N0ZDo6dW5p
cXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQcm94eT4gSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNyZWF0
ZShQcm92aXNpb25hbFBhZ2VQcm94eSYgcHJvdmlzaW9uYWxQYWdlLCBjb25zdCBTdHJpbmcmIHRh
cmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUgdHlwZSkKK3sKKyAgICBhdXRv
IHRhcmdldCA9IEluc3BlY3RvclRhcmdldFByb3h5OjpjcmVhdGUocHJvdmlzaW9uYWxQYWdlLnBh
Z2UoKSwgdGFyZ2V0SWQsIHR5cGUpOworICAgIHRhcmdldC0+bV9wcm92aXNpb25hbFBhZ2UgPSBt
YWtlV2Vha1B0cihwcm92aXNpb25hbFBhZ2UpOworICAgIHJldHVybiB0YXJnZXQ7CiB9CiAKIElu
c3BlY3RvclRhcmdldFByb3h5OjpJbnNwZWN0b3JUYXJnZXRQcm94eShXZWJQYWdlUHJveHkmIHBh
Z2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlw
ZSB0eXBlKQpAQCAtNDcsMjIgKzU2LDU2IEBAIEluc3BlY3RvclRhcmdldFByb3h5OjpJbnNwZWN0
b3JUYXJnZXRQcm94eShXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IFN0cmluZyYgdGFyCiB7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVu
ZENoYW5uZWwmIGNoYW5uZWwpCit2b2lkIEluc3BlY3RvclRhcmdldFByb3h5Ojpjb25uZWN0KElu
c3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSkK
IHsKKyAgICBpZiAobV9wcm92aXNpb25hbFBhZ2UpIHsKKyAgICAgICAgbV9wcm92aXNpb25hbFBh
Z2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDb25uZWN0SW5zcGVjdG9yKGlk
ZW50aWZpZXIoKSwgY29ubmVjdGlvblR5cGUpLCBtX3Byb3Zpc2lvbmFsUGFnZS0+d2ViUGFnZUlE
KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKG1fcGFnZS5oYXNSdW5uaW5n
UHJvY2VzcygpKQotICAgICAgICBtX3BhZ2UucHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OkNvbm5lY3RJbnNwZWN0b3IoaWRlbnRpZmllcigpLCBjaGFubmVsLmNvbm5lY3Rpb25UeXBl
KCkpLCBtX3BhZ2Uud2ViUGFnZUlEKCkpOworICAgICAgICBtX3BhZ2UucHJvY2VzcygpLnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OkNvbm5lY3RJbnNwZWN0b3IoaWRlbnRpZmllcigpLCBjb25uZWN0
aW9uVHlwZSksIG1fcGFnZS53ZWJQYWdlSUQoKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGFyZ2V0
UHJveHk6OmRpc2Nvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwmKQordm9pZCBJbnNw
ZWN0b3JUYXJnZXRQcm94eTo6ZGlzY29ubmVjdCgpCiB7CisgICAgaWYgKG1fcHJvdmlzaW9uYWxQ
YWdlKSB7CisgICAgICAgIG1fcHJvdmlzaW9uYWxQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6RGlzY29ubmVjdEluc3BlY3RvcihpZGVudGlmaWVyKCkpLCBtX3Byb3Zpc2lv
bmFsUGFnZS0+d2ViUGFnZUlEKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYg
KG1fcGFnZS5oYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICBtX3BhZ2UucHJvY2VzcygpLnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpc2Nvbm5lY3RJbnNwZWN0b3IoaWRlbnRpZmllcigpKSwg
bV9wYWdlLndlYlBhZ2VJRCgpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JUYXJnZXRQcm94eTo6c2Vu
ZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogeworICAgIGlm
IChtX3Byb3Zpc2lvbmFsUGFnZSkgeworICAgICAgICBtX3Byb3Zpc2lvbmFsUGFnZS0+cHJvY2Vz
cygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGlk
ZW50aWZpZXIoKSwgbWVzc2FnZSksIG1fcHJvdmlzaW9uYWxQYWdlLT53ZWJQYWdlSUQoKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAobV9wYWdlLmhhc1J1bm5pbmdQcm9jZXNz
KCkpCiAgICAgICAgIG1fcGFnZS5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2Vu
ZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoaWRlbnRpZmllcigpLCBtZXNzYWdlKSwgbV9wYWdlLndl
YlBhZ2VJRCgpKTsKIH0KIAordm9pZCBJbnNwZWN0b3JUYXJnZXRQcm94eTo6ZGlkQ29tbWl0UHJv
dmlzaW9uYWxUYXJnZXQoKQoreworICAgIEFTU0VSVChpc1Byb3Zpc2lvbmFsKCkpOworICAgIG1f
cHJvdmlzaW9uYWxQYWdlID0gbnVsbHB0cjsKK30KKworYm9vbCBJbnNwZWN0b3JUYXJnZXRQcm94
eTo6aXNQcm92aXNpb25hbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhbV9wcm92aXNpb25hbFBh
Z2U7Cit9CisKK1N0cmluZyBJbnNwZWN0b3JUYXJnZXRQcm94eTo6cHJldmlvdXNUYXJnZXRJRCgp
IGNvbnN0Cit7CisgICAgaWYgKG1fdHlwZSAhPSBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5
cGU6OlBhZ2UgfHwgIWlzUHJvdmlzaW9uYWwoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwor
CisgICAgcmV0dXJuIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OnRvVGFyZ2V0SUQobV9wYWdlLndl
YlBhZ2VJRCgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3JUYXJnZXRQcm94eS5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvSW5zcGVjdG9yVGFyZ2V0UHJveHkuaAppbmRleCBkMzgyYjAyNjUwOWM4Mzk1
MTk5YWJkZDQ5NWFmNmEyYTUxYWY5MjdjLi40M2Y2OGZiMDA1OWM1NWYyZjdkM2E4YTJlM2YxMWFk
MTE4MzNhYzc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3JU
YXJnZXRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3RvclRhcmdl
dFByb3h5LmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvclRhcmdldC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUg
PHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC0zNSwyNSArMzYsMzEg
QEAgY2xhc3MgV2ViUGFnZVByb3h5OwogLy8gTk9URTogVGhpcyBVSVByb2Nlc3Mgc2lkZSBJbnNw
ZWN0b3JUYXJnZXQgZG9lc24ndCBjYXJlIGFib3V0IHRoZSBmcm9udGVuZCBjaGFubmVsLCBzaW5j
ZQogLy8gYW55IHRhcmdldCAtPiBmcm9udGVuZCBtZXNzYWdlcyB3aWxsIGJlIHJvdXRlZCB0byB0
aGUgV2ViUGFnZVByb3h5IHdpdGggYSB0YXJnZXRJZC4KIAotY2xhc3MgSW5zcGVjdG9yVGFyZ2V0
UHJveHkgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXQsIHB1YmxpYyBS
ZWZDb3VudGVkPEluc3BlY3RvclRhcmdldFByb3h5PiB7CitjbGFzcyBJbnNwZWN0b3JUYXJnZXRQ
cm94eSBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldCB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9y
VGFyZ2V0UHJveHkpOwogcHVibGljOgotICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yVGFyZ2V0UHJv
eHk+IGNyZWF0ZShXZWJQYWdlUHJveHkmLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0
b3I6Okluc3BlY3RvclRhcmdldFR5cGUpOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW5z
cGVjdG9yVGFyZ2V0UHJveHk+IGNyZWF0ZShXZWJQYWdlUHJveHkmLCBjb25zdCBTdHJpbmcmIHRh
cmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUpOworICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJveHk+IGNyZWF0ZShQcm92aXNpb25hbFBhZ2VQ
cm94eSYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0
VHlwZSk7CiAgICAgSW5zcGVjdG9yVGFyZ2V0UHJveHkoV2ViUGFnZVByb3h5JiwgY29uc3QgU3Ry
aW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlKTsKICAgICB+SW5z
cGVjdG9yVGFyZ2V0UHJveHkoKSA9IGRlZmF1bHQ7CiAKICAgICBJbnNwZWN0b3I6Okluc3BlY3Rv
clRhcmdldFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIFN0
cmluZyBpZGVudGlmaWVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CiAK
LSAgICB2b2lkIGNvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwmKTsKLSAgICB2b2lk
IGRpc2Nvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwmKTsKLSAgICB2b2lkIHNlbmRN
ZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgZGlkQ29tbWl0
UHJvdmlzaW9uYWxUYXJnZXQoKTsKKyAgICBib29sIGlzUHJvdmlzaW9uYWwoKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBTdHJpbmcgcHJldmlvdXNUYXJnZXRJRCgpIGNvbnN0IG92ZXJyaWRlOworCisg
ICAgdm9pZCBjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlw
ZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaXNjb25uZWN0KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBz
ZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKIAogcHJp
dmF0ZToKICAgICBXZWJQYWdlUHJveHkmIG1fcGFnZTsKICAgICBTdHJpbmcgbV9pZGVudGlmaWVy
OwogICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSBtX3R5cGU7CisgICAgV2Vha1B0
cjxQcm92aXNpb25hbFBhZ2VQcm94eT4gbV9wcm92aXNpb25hbFBhZ2U7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Byb3Zp
c2lvbmFsUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Byb3Zpc2lvbmFs
UGFnZVByb3h5LmNwcAppbmRleCBlOThlYzBlYTQ4MDk0ODBiM2E3ZTQ3ODk2NTEzYzQ4MGM0OGNi
Nzc4Li40YzZkZGMxMjdlZmNlYWFjMzdlNjNhNWYyZDYwN2Y0NWZhN2FjN2Y3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuY3BwCkBAIC0zNyw2
ICszNyw3IEBACiAjaW5jbHVkZSAiV2ViRXJyb3JzLmgiCiAjaW5jbHVkZSAiV2ViTmF2aWdhdGlv
bkRhdGFTdG9yZS5oIgogI2luY2x1ZGUgIldlYk5hdmlnYXRpb25TdGF0ZS5oIgorI2luY2x1ZGUg
IldlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2ViUGFnZU1lc3NhZ2Vz
LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVz
c2FnZXMuaCIKQEAgLTg0LDExICs4NSwxNSBAQCBQcm92aXNpb25hbFBhZ2VQcm94eTo6UHJvdmlz
aW9uYWxQYWdlUHJveHkoV2ViUGFnZVByb3h5JiBwYWdlLCBSZWY8V2ViUHJvY2Vzc1BybwogICAg
IH0KIAogICAgIGluaXRpYWxpemVXZWJQYWdlKCk7CisKKyAgICBtX3BhZ2UuaW5zcGVjdG9yQ29u
dHJvbGxlcigpLmRpZENyZWF0ZVByb3Zpc2lvbmFsUGFnZSgqdGhpcyk7CiB9CiAKIFByb3Zpc2lv
bmFsUGFnZVByb3h5Ojp+UHJvdmlzaW9uYWxQYWdlUHJveHkoKQogewogICAgIGlmICghbV93YXND
b21taXR0ZWQpIHsKKyAgICAgICAgbV9wYWdlLmluc3BlY3RvckNvbnRyb2xsZXIoKS53aWxsRGVz
dHJveVByb3Zpc2lvbmFsUGFnZSgqdGhpcyk7CisKICAgICAgICAgaWYgKCZtX3Byb2Nlc3MtPndl
YnNpdGVEYXRhU3RvcmUoKSAhPSAmbV9wYWdlLndlYnNpdGVEYXRhU3RvcmUoKSkKICAgICAgICAg
ICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5wYWdlRW5kVXNpbmdXZWJzaXRlRGF0YVN0b3Jl
KG1fcGFnZS5pZGVudGlmaWVyKCksIG1fcHJvY2Vzcy0+d2Vic2l0ZURhdGFTdG9yZSgpKTsKIApA
QCAtMzg2LDYgKzM5MSw5IEBAIHZvaWQgUHJvdmlzaW9uYWxQYWdlUHJveHk6OmRpZFJlY2VpdmVN
ZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpECiAgICAgICAgIHx8IGRl
Y29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRTdGFydExv
YWRGb3JRdWlja0xvb2tEb2N1bWVudEluTWFpbkZyYW1lOjpuYW1lKCkKICAgICAgICAgfHwgZGVj
b2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZpbmlzaExv
YWRGb3JRdWlja0xvb2tEb2N1bWVudEluTWFpbkZyYW1lOjpuYW1lKCkKICNlbmRpZgorICAgICAg
ICB8fCBkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Q3Jl
YXRlSW5zcGVjdG9yVGFyZ2V0OjpuYW1lKCkKKyAgICAgICAgfHwgZGVjb2Rlci5tZXNzYWdlTmFt
ZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRlc3Ryb3lJbnNwZWN0b3JUYXJnZXQ6Om5h
bWUoKQorICAgICAgICB8fCBkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6U2VuZE1lc3NhZ2VUb0luc3BlY3RvckZyb250ZW5kOjpuYW1lKCkKICAgICAgICAg
KQogICAgIHsKICAgICAgICAgbV9wYWdlLmRpZFJlY2VpdmVNZXNzYWdlKGNvbm5lY3Rpb24sIGRl
Y29kZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUHJvdmlzaW9uYWxQ
YWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5
LmgKaW5kZXggMTc1MjE1MDQ3NDhiZmI2ZjIwNjNjZTE0Y2E0NWZkMWNjNzE4M2VjYi4uYmVlODFi
YzBiZDlkNzFiNGE2OGRmNGY4YjllNDczNmJkMjlhOGNmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5oCkBAIC02NCw3ICs2NCw3IEBAIHB1Ymxp
YzoKICAgICBQcm92aXNpb25hbFBhZ2VQcm94eShXZWJQYWdlUHJveHkmLCBSZWY8V2ViUHJvY2Vz
c1Byb3h5PiYmLCBzdGQ6OnVuaXF1ZV9wdHI8U3VzcGVuZGVkUGFnZVByb3h5PiwgdWludDY0X3Qg
bmF2aWdhdGlvbklELCBib29sIGlzU2VydmVyUmVkaXJlY3QsIGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYsIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQpOwogICAgIH5Qcm92aXNp
b25hbFBhZ2VQcm94eSgpOwogCi0gICAgV2ViUGFnZVByb3h5JiBwYWdlKCkgeyByZXR1cm4gbV9w
YWdlOyB9CisgICAgV2ViUGFnZVByb3h5JiBwYWdlKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlOyB9
CiAgICAgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgd2ViUGFnZUlEKCkgY29uc3QgeyByZXR1cm4g
bV93ZWJQYWdlSUQ7IH0KICAgICBXZWJGcmFtZVByb3h5KiBtYWluRnJhbWUoKSBjb25zdCB7IHJl
dHVybiBtX21haW5GcmFtZS5nZXQoKTsgfQogICAgIFdlYlByb2Nlc3NQcm94eSYgcHJvY2Vzcygp
IHsgcmV0dXJuIG1fcHJvY2Vzcy5nZXQoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IGJkYTU5Y2Q4MDUx
NTc2NDZiMzA4ZDJmZDIzNmYzZDExODI3MWUwYjYuLmMyNmY1MGM5ZDQ4YjFlNjRhODMzNGM0ZWQ1
ZmEwMDgzNzA0NWFjNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBh
Z2VJbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTI2LDMwICsyNiw0NCBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAK
KyNpbmNsdWRlICJQcm92aXNpb25hbFBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYkZyYW1lUHJv
eHkuaCIKLSNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaCIKKyNpbmNsdWRl
ICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWdlbnRCYXNlLmg+CiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvclRhcmdldEFnZW50Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAK
K3N0YXRpYyBTdHJpbmcgZ2V0VGFyZ2V0SUQoY29uc3QgUHJvdmlzaW9uYWxQYWdlUHJveHkmIHBy
b3Zpc2lvbmFsUGFnZSkKK3sKKyAgICByZXR1cm4gV2ViUGFnZUluc3BlY3RvclRhcmdldDo6dG9U
YXJnZXRJRChwcm92aXNpb25hbFBhZ2Uud2ViUGFnZUlEKCkpOworfQorCiBXZWJQYWdlSW5zcGVj
dG9yQ29udHJvbGxlcjo6V2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIoV2ViUGFnZVByb3h5JiBw
YWdlKQogICAgIDogbV9wYWdlKHBhZ2UpCiAgICAgLCBtX2Zyb250ZW5kUm91dGVyKEZyb250ZW5k
Um91dGVyOjpjcmVhdGUoKSkKICAgICAsIG1fYmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3Bh
dGNoZXI6OmNyZWF0ZShtX2Zyb250ZW5kUm91dGVyLmNvcHlSZWYoKSkpCiB7Ci0gICAgYXV0byB0
YXJnZXRBZ2VudCA9IG1ha2VVbmlxdWU8V2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50PihtX2Zy
b250ZW5kUm91dGVyLmdldCgpLCBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpKTsKKyAgICBhdXRv
IHRhcmdldEFnZW50ID0gbWFrZVVuaXF1ZTxJbnNwZWN0b3JUYXJnZXRBZ2VudD4obV9mcm9udGVu
ZFJvdXRlci5nZXQoKSwgbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKSk7CiAKICAgICBtX3Rhcmdl
dEFnZW50ID0gdGFyZ2V0QWdlbnQuZ2V0KCk7CiAKICAgICBtX2FnZW50cy5hcHBlbmQoV1RGTW92
ZSh0YXJnZXRBZ2VudCkpOwogfQogCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpp
bml0KCkKK3sKKyAgICBTdHJpbmcgcGFnZVRhcmdldElkID0gV2ViUGFnZUluc3BlY3RvclRhcmdl
dDo6dG9UYXJnZXRJRChtX3BhZ2Uud2ViUGFnZUlEKCkpOworICAgIGNyZWF0ZUluc3BlY3RvclRh
cmdldChwYWdlVGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZTo6UGFnZSk7
Cit9CisKIHZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OnBhZ2VDbG9zZWQoKQogewog
ICAgIGRpc2Nvbm5lY3RBbGxGcm9udGVuZHMoKTsKQEAgLTEzNCwzNyArMTQ4LDU3IEBAIHZvaWQg
V2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OnNldEluZGljYXRpbmcoYm9vbCBpbmRpY2F0aW5n
KQogfQogI2VuZGlmCiAKLXZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmNsZWFyVGFy
Z2V0cygpCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpjcmVhdGVJbnNwZWN0b3JU
YXJnZXQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRU
eXBlIHR5cGUpCiB7Ci0gICAgZm9yIChhdXRvJiB0YXJnZXQgOiBtX3RhcmdldHMpCi0gICAgICAg
IG1fdGFyZ2V0QWdlbnQtPnRhcmdldERlc3Ryb3llZCgqdGFyZ2V0LmdldCgpKTsKLQotICAgIG1f
dGFyZ2V0cy5jbGVhcigpOworICAgIGFkZFRhcmdldChJbnNwZWN0b3JUYXJnZXRQcm94eTo6Y3Jl
YXRlKG1fcGFnZSwgdGFyZ2V0SWQsIHR5cGUpKTsKIH0KIAotdm9pZCBXZWJQYWdlSW5zcGVjdG9y
Q29udHJvbGxlcjo6Y3JlYXRlSW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQs
IEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQordm9pZCBXZWJQYWdlSW5zcGVj
dG9yQ29udHJvbGxlcjo6ZGVzdHJveUluc3BlY3RvclRhcmdldChjb25zdCBTdHJpbmcmIHRhcmdl
dElkKQogewotICAgIGF1dG8gdGFyZ2V0ID0gSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNyZWF0ZSht
X3BhZ2UsIHRhcmdldElkLCB0eXBlKTsKLSAgICBtX3RhcmdldHMuYXBwZW5kKHRhcmdldC5jb3B5
UmVmKCkpOworICAgIGF1dG8gaXQgPSBtX3RhcmdldHMuZmluZCh0YXJnZXRJZCk7CisgICAgaWYg
KGl0ID09IG1fdGFyZ2V0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fdGFyZ2V0QWdl
bnQtPnRhcmdldERlc3Ryb3llZCgqaXQtPnZhbHVlKTsKKyAgICBtX3RhcmdldHMucmVtb3ZlKGl0
KTsKK30KIAotICAgIG1fdGFyZ2V0QWdlbnQtPnRhcmdldENyZWF0ZWQodGFyZ2V0LmdldCgpKTsK
K3ZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OnNlbmRNZXNzYWdlVG9JbnNwZWN0b3JG
cm9udGVuZChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7
CisgICAgbV90YXJnZXRBZ2VudC0+c2VuZE1lc3NhZ2VGcm9tVGFyZ2V0VG9Gcm9udGVuZCh0YXJn
ZXRJZCwgbWVzc2FnZSk7CiB9CiAKLXZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmRl
c3Ryb3lJbnNwZWN0b3JUYXJnZXQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCkKK3ZvaWQgV2ViUGFn
ZUluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENyZWF0ZVByb3Zpc2lvbmFsUGFnZShQcm92aXNpb25h
bFBhZ2VQcm94eSYgcHJvdmlzaW9uYWxQYWdlKQogewotICAgIGF1dG8gcG9zaXRpb24gPSBtX3Rh
cmdldHMuZmluZE1hdGNoaW5nKFsmXShjb25zdCBhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLT5p
ZGVudGlmaWVyKCkgPT0gdGFyZ2V0SWQ7IH0pOwotICAgIGlmIChwb3NpdGlvbiA9PSBub3RGb3Vu
ZCkKLSAgICAgICAgcmV0dXJuOworICAgIGFkZFRhcmdldChJbnNwZWN0b3JUYXJnZXRQcm94eTo6
Y3JlYXRlKHByb3Zpc2lvbmFsUGFnZSwgZ2V0VGFyZ2V0SUQocHJvdmlzaW9uYWxQYWdlKSwgSW5z
cGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlOjpQYWdlKSk7Cit9CiAKLSAgICBhdXRvJiB0YXJn
ZXQgPSBtX3RhcmdldHNbcG9zaXRpb25dOwotICAgIG1fdGFyZ2V0QWdlbnQtPnRhcmdldERlc3Ry
b3llZCgqdGFyZ2V0LmdldCgpKTsKK3ZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6Ondp
bGxEZXN0cm95UHJvdmlzaW9uYWxQYWdlKGNvbnN0IFByb3Zpc2lvbmFsUGFnZVByb3h5JiBwcm92
aXNpb25hbFBhZ2UpCit7CisgICAgZGVzdHJveUluc3BlY3RvclRhcmdldChnZXRUYXJnZXRJRChw
cm92aXNpb25hbFBhZ2UpKTsKK30KIAotICAgIG1fdGFyZ2V0cy5yZW1vdmUocG9zaXRpb24pOwor
dm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ29tbWl0UHJvdmlzaW9uYWxQYWdl
KFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIG9sZFdlYlBhZ2VJRCwgV2ViQ29yZTo6UGFnZUlkZW50
aWZpZXIgbmV3V2ViUGFnZUlEKQoreworICAgIFN0cmluZyBvbGRJRCA9IFdlYlBhZ2VJbnNwZWN0
b3JUYXJnZXQ6OnRvVGFyZ2V0SUQob2xkV2ViUGFnZUlEKTsKKyAgICBTdHJpbmcgbmV3SUQgPSBX
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojp0b1RhcmdldElEKG5ld1dlYlBhZ2VJRCk7CisgICAgYXV0
byBuZXdUYXJnZXQgPSBtX3RhcmdldHMudGFrZShuZXdJRCk7CisgICAgQVNTRVJUKG5ld1Rhcmdl
dCk7CisgICAgbmV3VGFyZ2V0LT5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldCgpOworICAgIG1f
dGFyZ2V0QWdlbnQtPmRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0KG9sZElELCBuZXdJRCk7CisK
KyAgICAvLyBXZSd2ZSBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgb2xkIHBhZ2UgYW5kIHdpbGwgbm90
IHJlY2VpdmUgYW55IG1lc3NhZ2UgZnJvbSBpdCwgc28KKyAgICAvLyB3ZSBkZXN0cm95IGV2ZXJ5
dGhpbmcgYnV0IHRoZSBuZXcgdGFyZ2V0IGhlcmUuCisgICAgLy8gRklYTUUod2Via2l0Lm9yZy9i
LzIwMjkzNyk6IGRvIG5vdCBkZXN0cm95IHRhcmdldHMgdGhhdCBiZWxvbmcgdG8gdGhlIGNvbW1p
dHRlZCBwYWdlLgorICAgIGZvciAoYXV0byYgdGFyZ2V0IDogbV90YXJnZXRzLnZhbHVlcygpKQor
ICAgICAgICBtX3RhcmdldEFnZW50LT50YXJnZXREZXN0cm95ZWQoKnRhcmdldCk7CisgICAgbV90
YXJnZXRzLmNsZWFyKCk7CisgICAgbV90YXJnZXRzLnNldChuZXdUYXJnZXQtPmlkZW50aWZpZXIo
KSwgV1RGTW92ZShuZXdUYXJnZXQpKTsKIH0KIAotdm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJv
bGxlcjo6c2VuZE1lc3NhZ2VUb0luc3BlY3RvckZyb250ZW5kKGNvbnN0IFN0cmluZyYgdGFyZ2V0
SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3ZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xs
ZXI6OmFkZFRhcmdldChzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJveHk+JiYgdGFy
Z2V0KQogewotICAgIG1fdGFyZ2V0QWdlbnQtPnNlbmRNZXNzYWdlRnJvbVRhcmdldFRvRnJvbnRl
bmQodGFyZ2V0SWQsIG1lc3NhZ2UpOworICAgIG1fdGFyZ2V0QWdlbnQtPnRhcmdldENyZWF0ZWQo
KnRhcmdldCk7CisgICAgbV90YXJnZXRzLnNldCh0YXJnZXQtPmlkZW50aWZpZXIoKSwgV1RGTW92
ZSh0YXJnZXQpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCAwY2Fm
NmExYzI3OTIwNDNkM2JlMDU3MWEyOGZkYjFlMTQxOTdhNjExLi5hNzBkY2U3NWJkZWUwN2MyMzJi
OGJhMzVkZmNjMDhkMTYxYjYwNzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTQ2LDYgKzQ2LDcgQEAgY2xhc3Mg
V2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIgewogcHVibGljOgogICAgIFdlYlBhZ2VJbnNwZWN0
b3JDb250cm9sbGVyKFdlYlBhZ2VQcm94eSYpOwogCisgICAgdm9pZCBpbml0KCk7CiAgICAgdm9p
ZCBwYWdlQ2xvc2VkKCk7CiAKICAgICBib29sIGhhc0xvY2FsRnJvbnRlbmQoKSBjb25zdDsKQEAg
LTYwLDE4ICs2MSwyMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJbmRpY2F0aW5nKGJvb2wpOwog
I2VuZGlmCiAKLSAgICB2b2lkIGNsZWFyVGFyZ2V0cygpOwogICAgIHZvaWQgY3JlYXRlSW5zcGVj
dG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFy
Z2V0VHlwZSk7CiAgICAgdm9pZCBkZXN0cm95SW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYg
dGFyZ2V0SWQpOwogICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0luc3BlY3RvckZyb250ZW5kKGNvbnN0
IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CiAKKyAgICB2b2lkIGRp
ZENyZWF0ZVByb3Zpc2lvbmFsUGFnZShQcm92aXNpb25hbFBhZ2VQcm94eSYpOworICAgIHZvaWQg
d2lsbERlc3Ryb3lQcm92aXNpb25hbFBhZ2UoY29uc3QgUHJvdmlzaW9uYWxQYWdlUHJveHkmKTsK
KyAgICB2b2lkIGRpZENvbW1pdFByb3Zpc2lvbmFsUGFnZShXZWJDb3JlOjpQYWdlSWRlbnRpZmll
ciBvbGRXZWJQYWdlSUQsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIG5ld1dlYlBhZ2VJRCk7CisK
IHByaXZhdGU6CisgICAgdm9pZCBhZGRUYXJnZXQoc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvclRh
cmdldFByb3h5PiYmKTsKKwogICAgIFdlYlBhZ2VQcm94eSYgbV9wYWdlOwogICAgIFJlZjxJbnNw
ZWN0b3I6OkZyb250ZW5kUm91dGVyPiBtX2Zyb250ZW5kUm91dGVyOwogICAgIFJlZjxJbnNwZWN0
b3I6OkJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwogICAgIEluc3BlY3Rv
cjo6QWdlbnRSZWdpc3RyeSBtX2FnZW50czsKICAgICBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdl
dEFnZW50KiBtX3RhcmdldEFnZW50OwotICAgIFZlY3RvcjxSZWZQdHI8SW5zcGVjdG9yVGFyZ2V0
UHJveHk+PiBtX3RhcmdldHM7CisgICAgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxJ
bnNwZWN0b3JUYXJnZXRQcm94eT4+IG1fdGFyZ2V0czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZUluc3BlY3Rv
clRhcmdldEFnZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0
b3JUYXJnZXRBZ2VudC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMDAxYzA4
ZDAyZjdlZDZjMDA4NTY2ZjdhZjg5YTM4MWNkZWQyMTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZUlu
c3BlY3RvclRhcmdldEFnZW50LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50LmgiCi0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OldlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXRBZ2VudChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRl
ciwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIpCi0gICAg
OiBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldEFnZW50KGZyb250ZW5kUm91dGVyLCBiYWNrZW5k
RGlzcGF0Y2hlcikKLSAgICAsIG1fcm91dGVyKGZyb250ZW5kUm91dGVyKQotewotfQotCi1XZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6On5XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQoKSA9
IGRlZmF1bHQ7Ci0KLUluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJiBXZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0QWdlbnQ6OmZyb250ZW5kQ2hhbm5lbCgpCi17Ci0gICAgcmV0dXJuICp0aGlzOwotfQot
Ci1JbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUgV2ViUGFnZUluc3Bl
Y3RvclRhcmdldEFnZW50Ojpjb25uZWN0aW9uVHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
cm91dGVyLmhhc0xvY2FsRnJvbnRlbmQoKSA/IEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpD
b25uZWN0aW9uVHlwZTo6TG9jYWwgOiBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVj
dGlvblR5cGU6OlJlbW90ZTsKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6
OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmKQotewotICAgIC8vIEludGVudGlv
bmFsbHkgaWdub3JlZCwgdGhpcyBjaGFubmVsIGlzIG5vdCBhY3R1YWxseSB1c2VkIHRvIHNlbmQg
bWVzc2FnZXMuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZUluc3Bl
Y3RvclRhcmdldEFnZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0QWdlbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTYzZjljM2Nj
Y2VhNTQ4N2E0Y2UyOTNlYzVlMDgzYThjYzhiNTE1NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0QWdlbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclRhcmdldEFnZW50Lmg+Ci0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi1jbGFzcyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQgZmluYWwgOiBw
dWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRBZ2VudCwgcHVibGljIEluc3BlY3Rvcjo6
RnJvbnRlbmRDaGFubmVsIHsKLXB1YmxpYzoKLSAgICBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdl
bnQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciYsIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNo
ZXImKTsKLSAgICB2aXJ0dWFsIH5XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQoKTsKLQotICAg
IC8vIEluc3BlY3RvclRhcmdldEFnZW50Ci0gICAgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwm
IGZyb250ZW5kQ2hhbm5lbCgpOwotCi0gICAgLy8gRnJvbnRlbmRDaGFubmVsCi0gICAgSW5zcGVj
dG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlIGNvbm5lY3Rpb25UeXBlKCkgY29u
c3Q7Ci0gICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJik7Ci0KLXBy
aXZhdGU6Ci0gICAgSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciYgbV9yb3V0ZXI7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwCmluZGV4IDgyZTJjNGY3YmUxODFjZTIzZGQ1NTk4N2Q4Mzk5MDA2YTlkMzVkNDEuLmExMGI5
ZmRiMGU4OGU3NTI3MzkwYzZkYmFjNDAzZWE1MzI4NWNlMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtNDkyLDggKzQ5Miw3IEBAIFdlYlBhZ2VQcm94eTo6
V2ViUGFnZVByb3h5KFBhZ2VDbGllbnQmIHBhZ2VDbGllbnQsIFdlYlByb2Nlc3NQcm94eSYgcHJv
Y2VzcywgUmVmCiAgICAgbV9pbnNwZWN0b3JEZWJ1Z2dhYmxlLT5zZXRSZW1vdGVEZWJ1Z2dpbmdB
bGxvd2VkKHRydWUpOwogICAgIG1faW5zcGVjdG9yRGVidWdnYWJsZS0+aW5pdCgpOwogI2VuZGlm
Ci0KLSAgICBjcmVhdGVJbnNwZWN0b3JUYXJnZXRzKCk7CisgICAgbV9pbnNwZWN0b3JDb250cm9s
bGVyLT5pbml0KCk7CiB9CiAKIFdlYlBhZ2VQcm94eTo6fldlYlBhZ2VQcm94eSgpCkBAIC04NjIs
OSArODYxLDYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmZpbmlzaEF0dGFjaGluZ1RvV2ViUHJvY2Vz
cyhQcm9jZXNzTGF1bmNoUmVhc29uIHJlYXNvbikKICAgICByZW1vdGVJbnNwZWN0b3JJbmZvcm1h
dGlvbkRpZENoYW5nZSgpOwogI2VuZGlmCiAKLSAgICBjbGVhckluc3BlY3RvclRhcmdldHMoKTsK
LSAgICBjcmVhdGVJbnNwZWN0b3JUYXJnZXRzKCk7Ci0KICAgICBwYWdlQ2xpZW50KCkuZGlkUmVs
YXVuY2hQcm9jZXNzKCk7CiAgICAgbV9wYWdlTG9hZFN0YXRlLmRpZFN3YXBXZWJQcm9jZXNzZXMo
KTsKICAgICBpZiAocmVhc29uICE9IFByb2Nlc3NMYXVuY2hSZWFzb246OkluaXRpYWxQcm9jZXNz
KQpAQCAtMTY0OCwxNyArMTY0NCw2IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZW1vdGVJbnNwZWN0
b3JJbmZvcm1hdGlvbkRpZENoYW5nZSgpCiB9CiAjZW5kaWYKIAotdm9pZCBXZWJQYWdlUHJveHk6
OmNsZWFySW5zcGVjdG9yVGFyZ2V0cygpCi17Ci0gICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5j
bGVhclRhcmdldHMoKTsKLX0KLQotdm9pZCBXZWJQYWdlUHJveHk6OmNyZWF0ZUluc3BlY3RvclRh
cmdldHMoKQotewotICAgIFN0cmluZyBwYWdlVGFyZ2V0SWQgPSBtYWtlU3RyaW5nKCJwYWdlLSIs
IG1fd2ViUGFnZUlELnRvVUludDY0KCkpOwotICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+Y3Jl
YXRlSW5zcGVjdG9yVGFyZ2V0KHBhZ2VUYXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJn
ZXRUeXBlOjpQYWdlKTsKLX0KLQogdm9pZCBXZWJQYWdlUHJveHk6OnNldEJhY2tncm91bmRDb2xv
cihjb25zdCBPcHRpb25hbDxDb2xvcj4mIGNvbG9yKQogewogICAgIGlmIChtX2JhY2tncm91bmRD
b2xvciA9PSBjb2xvcikKQEAgLTMwMjAsNiArMzAwNSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpj
b21taXRQcm92aXNpb25hbFBhZ2UoRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIHVpbnQ2NF90IG5h
dmlnCiAgICAgaWYgKCFkaWRTdXNwZW5kUHJldmlvdXNQYWdlKQogICAgICAgICBtX3Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNsb3NlKCksIG1fd2ViUGFnZUlEKTsKIAorICAgIGNv
bnN0IGF1dG8gb2xkV2ViUGFnZUlEID0gbV93ZWJQYWdlSUQ7CiAgICAgc3dhcFRvV2ViUHJvY2Vz
cyhtX3Byb3Zpc2lvbmFsUGFnZS0+cHJvY2VzcygpLCBtX3Byb3Zpc2lvbmFsUGFnZS0+d2ViUGFn
ZUlEKCksIG1fcHJvdmlzaW9uYWxQYWdlLT50YWtlRHJhd2luZ0FyZWEoKSwgbV9wcm92aXNpb25h
bFBhZ2UtPm1haW5GcmFtZSgpKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQpAQCAtMzAzMCw2ICsz
MDE2LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNvbW1pdFByb3Zpc2lvbmFsUGFnZShGcmFtZUlk
ZW50aWZpZXIgZnJhbWVJRCwgdWludDY0X3QgbmF2aWcKIAogICAgIGRpZENvbW1pdExvYWRGb3JG
cmFtZShmcmFtZUlELCBuYXZpZ2F0aW9uSUQsIG1pbWVUeXBlLCBmcmFtZUhhc0N1c3RvbUNvbnRl
bnRQcm92aWRlciwgZnJhbWVMb2FkVHlwZSwgY2VydGlmaWNhdGVJbmZvLCBjb250YWluc1BsdWdp
bkRvY3VtZW50LCBmb3JjZWRIYXNJbnNlY3VyZUNvbnRlbnQsIHVzZXJEYXRhKTsKIAorICAgIG1f
aW5zcGVjdG9yQ29udHJvbGxlci0+ZGlkQ29tbWl0UHJvdmlzaW9uYWxQYWdlKG9sZFdlYlBhZ2VJ
RCwgbV93ZWJQYWdlSUQpOwogICAgIG1fcHJvdmlzaW9uYWxQYWdlID0gbnVsbHB0cjsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCBhNjk0ODhkZTY3NmQ4Y2Y3
YWJmMjBhMjZkMTc1NDMwMjY4ZDliZWVhLi4wMWI4YmFlNzYyMGU0NTEwMDhiNjE4Mzg1NDJlM2Rk
MmZlZDdlMjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtMjA3
MSw5ICsyMDcxLDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc3RvcEFsbFVSTFNjaGVtZVRhc2tz
KFdlYlByb2Nlc3NQcm94eSogPSBudWxscHRyKTsKIAotICAgIHZvaWQgY2xlYXJJbnNwZWN0b3JU
YXJnZXRzKCk7Ci0gICAgdm9pZCBjcmVhdGVJbnNwZWN0b3JUYXJnZXRzKCk7Ci0KICNpZiBFTkFC
TEUoQVRUQUNITUVOVF9FTEVNRU5UKQogICAgIHZvaWQgcmVnaXN0ZXJBdHRhY2htZW50SWRlbnRp
ZmllckZyb21EYXRhKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUsIGNv
bnN0IFN0cmluZyYgcHJlZmVycmVkRmlsZU5hbWUsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYp
OwogICAgIHZvaWQgcmVnaXN0ZXJBdHRhY2htZW50SWRlbnRpZmllckZyb21GaWxlUGF0aChjb25z
dCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlLCBjb25zdCBTdHJpbmcmIGZpbGVQ
YXRoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IGRhMjE3NDEwNDI3NDk1YmQzOGI1ZWM3Zjg3ODA3YTdkMzk3MzNhOWMuLmMxYTRiYzI5
MDEzZWY3Yjc2OTliMjdmNzllYTY2MzFlYWFkMTVkNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTM2Nyw3ICsxMzY3LDYgQEAKIAkJ
QTU0M0UzMDcyMTVBRDEzNzAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVu
ZENoYW5uZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE1NDNFMzA1MjE1QUQxMkQwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRl
bmRDaGFubmVsLmggKi87IH07CiAJCUE1NDNFMzBDMjE1QzhBOEQwMDI3OUNEOSAvKiBXZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBNTQzRTMwODIxNUM4QTgzMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdl
dC5oICovOyB9OwogCQlBNTQzRTMwRDIxNUM4QTkwMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3Rv
clRhcmdldENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE1NDNFMzBCMjE1QzhBODQwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0Q29udHJvbGxlci5oICovOyB9OwotCQlBNTQzRTMxMDIxNUQ4Q0U2MDAyNzlDRDkgLyogV2Vi
UGFnZUluc3BlY3RvclRhcmdldEFnZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBNTQzRTMwRTIxNUQ4Q0UyMDAyNzlDRDkgLyogV2ViUGFnZUluc3Bl
Y3RvclRhcmdldEFnZW50LmggKi87IH07CiAJCUE1NUJBODEwMUJBMTMxN0UwMDdDRDMzRCAvKiBf
V0tSZW1vdGVXZWJJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU1QkE4MEMxQkExMkJFMTAwN0NEMzNEIC8qIF9X
S1JlbW90ZVdlYkluc3BlY3RvclZpZXdDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTU1QkE4MTcxQkEyM0UxMjAwN0NEMzNEIC8q
IFJlbW90ZVdlYkluc3BlY3RvclVJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBNTVCQTgxMzFCQTIzRTA1MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVj
dG9yVUkuaCAqLzsgfTsKIAkJQTU1QkE4MUYxQkEyNUIyNzAwN0NEMzNEIC8qIFJlbW90ZVdlYklu
c3BlY3RvclByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBNTVCQTgxOTFCQTI1QjFFMDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHku
aCAqLzsgfTsKQEAgLTQxMTIsOCArNDExMSw2IEBACiAJCUE1NDNFMzA5MjE1QzhBODMwMDI3OUNE
OSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUE1NDNFMzBBMjE1QzhBODQwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTQzRTMwQjIxNUM4QTg0MDAyNzlD
RDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQTU0M0UzMEUyMTVEOENFMjAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTU0M0UzMEYyMTVEOENFMjAwMjc5Q0Q5IC8q
IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRBZ2VudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBNTVCQTgwQzFCQTEyQkUxMDA3Q0QzM0QgLyogX1dLUmVtb3RlV2ViSW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLUmVtb3RlV2Vi
SW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QTU1QkE4MEQxQkExMkJFMTAwN0NEMzNEIC8qIF9XS1JlbW90ZVdlYkluc3BlY3RvclZpZXdDb250
cm9sbGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLUmVt
b3RlV2ViSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE1NUJBODEyMUJBMjNFMDUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JVSS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVXZWJJbnNwZWN0
b3JVSS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03ODk0LDggKzc4OTEsNiBA
QAogCQkJCTJEOUVBMzBFMUE5NkNCRkYwMDJEMjgwNyAvKiBXZWJQYWdlSW5qZWN0ZWRCdW5kbGVD
bGllbnQuaCAqLywKIAkJCQlBNTEzRjUzRjIxNTRBNUNEMDA2NjI4NDEgLyogV2ViUGFnZUluc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwICovLAogCQkJCUE1MTNGNTNFMjE1NEE1Q0MwMDY2Mjg0MSAvKiBX
ZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oICovLAotCQkJCUE1NDNFMzBGMjE1RDhDRTIwMDI3
OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwICovLAotCQkJCUE1NDNFMzBF
MjE1RDhDRTIwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaCAqLywKIAkJ
CQlCQzExMUIwQjExMkY1RTRGMDAzMzdCQUIgLyogV2ViUGFnZVByb3h5LmNwcCAqLywKIAkJCQlC
QzAzMkRDQjEwRjQzODlGMDA1OEMxNUEgLyogV2ViUGFnZVByb3h5LmggKi8sCiAJCQkJQkNCRDM4
RkExMjVCQUI5QTAwRDJDMjlGIC8qIFdlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiAqLywKQEAgLTk5
NzksNyArOTk3NCw2IEBACiAJCQkJMkQ5RUEzMEYxQTk2Q0JGRjAwMkQyODA3IC8qIFdlYlBhZ2VJ
bmplY3RlZEJ1bmRsZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUxM0Y1NDAyMTU0QTVE
NzAwNjYyODQxIC8qIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNTQzRTMwQzIxNUM4QThEMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldC5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJQTU0M0UzMTAyMTVEOENFNjAwMjc5Q0Q5IC8qIFdlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXRBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU0M0UzMEQyMTVDOEE5
MDAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNTQzRTMwNzIxNUFEMTM3MDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRh
cmdldEZyb250ZW5kQ2hhbm5lbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzBDRTcyQTExMjQ3RTcx
RDAwQkMwRUM0IC8qIFdlYlBhZ2VNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JU
YXJnZXQuY3BwCmluZGV4IDU2YjBkNTJlYzU5NTdjYzczYTEzZjA2N2ViM2NkYTAzMmRlMjE3NTgu
LmE3MGY2ZmQ1MjA5NmE1ZGNhOTAxZWE3MGEzNzU1ZjE0ZDZiNGEwZmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JU
YXJnZXQuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRh
cmdldC5oIgogCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0
b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckNv
bnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KIApAQCAtNDEsMTkgKzQyLDI1
IEBAIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQoV2ViUGFn
ZSYgcGFnZSkKIAogU3RyaW5nIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OmlkZW50aWZpZXIoKSBj
b25zdAogewotICAgIHJldHVybiBtYWtlU3RyaW5nKCJwYWdlLSIsIG1fcGFnZS5pZGVudGlmaWVy
KCkudG9VSW50NjQoKSk7CisgICAgcmV0dXJuIHRvVGFyZ2V0SUQobV9wYWdlLmlkZW50aWZpZXIo
KSk7CiB9CiAKLXZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldDo6Y29ubmVjdChJbnNwZWN0b3I6
OkZyb250ZW5kQ2hhbm5lbCYgY2hhbm5lbCkKK3ZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldDo6
Y29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUgY29ubmVj
dGlvblR5cGUpCiB7CisgICAgaWYgKG1fY2hhbm5lbCkKKyAgICAgICAgcmV0dXJuOworICAgIG1f
Y2hhbm5lbCA9IG1ha2VVbmlxdWU8V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5l
bD4obV9wYWdlLCBpZGVudGlmaWVyKCksIGNvbm5lY3Rpb25UeXBlKTsKICAgICBpZiAobV9wYWdl
LmNvcmVQYWdlKCkpCi0gICAgICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9s
bGVyKCkuY29ubmVjdEZyb250ZW5kKGNoYW5uZWwpOworICAgICAgICBtX3BhZ2UuY29yZVBhZ2Uo
KS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmNvbm5lY3RGcm9udGVuZCgqbV9jaGFubmVsKTsKIH0K
IAotdm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0OjpkaXNjb25uZWN0KEluc3BlY3Rvcjo6RnJv
bnRlbmRDaGFubmVsJiBjaGFubmVsKQordm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0OjpkaXNj
b25uZWN0KCkKIHsKKyAgICBpZiAoIW1fY2hhbm5lbCkKKyAgICAgICAgcmV0dXJuOwogICAgIGlm
IChtX3BhZ2UuY29yZVBhZ2UoKSkKLSAgICAgICAgbV9wYWdlLmNvcmVQYWdlKCktPmluc3BlY3Rv
ckNvbnRyb2xsZXIoKS5kaXNjb25uZWN0RnJvbnRlbmQoY2hhbm5lbCk7CisgICAgICAgIG1fcGFn
ZS5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZGlzY29ubmVjdEZyb250ZW5kKCpt
X2NoYW5uZWwpOworICAgIG1fY2hhbm5lbC5yZXNldCgpOwogfQogCiB2b2lkIFdlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXQ6OnNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVz
c2FnZSkKQEAgLTYyLDQgKzY5LDEwIEBAIHZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldDo6c2Vu
ZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogICAgICAgICBt
X3BhZ2UuY29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmRpc3BhdGNoTWVzc2FnZUZy
b21Gcm9udGVuZChtZXNzYWdlKTsKIH0KIAorU3RyaW5nIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6
OnRvVGFyZ2V0SUQoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgcGFnZUlEKQoreworICAgIHJldHVy
biBtYWtlU3RyaW5nKCJwYWdlLSIsIHBhZ2VJRC50b1VJbnQ2NCgpKTsKK30KKworCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaAppbmRleCBiNzBlMzFjOGI4NzcwYzRiZjFl
Y2I0NTg4ZWJmMjY3NWIzYjlmNDY0Li42Y2JkN2ZhZDVmZjkxYWZkODU4ZGEzNDZhZGJmZWVkNjQy
NGIwYjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZUluc3BlY3RvclRhcmdldC5oCkBAIC0yNiwyOSArMjYsMzQgQEAKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVGFyZ2V0Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9QYWdlSWRlbnRpZmllci5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViUGFnZTsKK2NsYXNzIFdlYlBh
Z2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw7CiAKIGNsYXNzIFdlYlBhZ2VJbnNwZWN0
b3JUYXJnZXQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXQgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYlBh
Z2VJbnNwZWN0b3JUYXJnZXQpOwogcHVibGljOgotICAgIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQo
V2ViUGFnZSYpOworICAgIGV4cGxpY2l0IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQoV2ViUGFnZSYp
OwogICAgIH5XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0KCkgPSBkZWZhdWx0OwogCiAgICAgSW5zcGVj
dG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBJbnNw
ZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGU6OlBhZ2U7IH0KIAogICAgIFN0cmluZyBpZGVudGlm
aWVyKCkgY29uc3QgZmluYWw7CiAKLSAgICB2b2lkIGNvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVu
ZENoYW5uZWwmKTsKLSAgICB2b2lkIGRpc2Nvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5u
ZWwmKTsKLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYp
OworICAgIHZvaWQgY29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlv
blR5cGUpIG92ZXJyaWRlOworICAgIHZvaWQgZGlzY29ubmVjdCgpIG92ZXJyaWRlOworICAgIHZv
aWQgc2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CisK
KyAgICBzdGF0aWMgU3RyaW5nIHRvVGFyZ2V0SUQoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIpOwog
CiBwcml2YXRlOgogICAgIFdlYlBhZ2UmIG1fcGFnZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
UGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbD4gbV9jaGFubmVsOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5j
cHAKaW5kZXggNTI1NDg5NjczZDY2YTJlNGE3ZmQzMmYzNjQ4NTM0Y2UzZWRlZWM0Ny4uY2RhNGYx
ZThkM2M1NzUzNjE2MmFhMzkwZWQ3NGI2ODFjODkxMzQwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0
b3JUYXJnZXRDb250cm9sbGVyLmNwcApAQCAtNTgsNyArNTgsNiBAQCB2b2lkIFdlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXRDb250cm9sbGVyOjpyZW1vdmVUYXJnZXQoSW5zcGVjdG9yOjpJbnNwZWN0b3JU
YXJnZXQmCiAgICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGVzdHJveUlu
c3BlY3RvclRhcmdldCh0YXJnZXQuaWRlbnRpZmllcigpKSk7CiAKICAgICBtX3RhcmdldHMucmVt
b3ZlKHRhcmdldC5pZGVudGlmaWVyKCkpOwotICAgIG1fdGFyZ2V0RnJvbnRlbmRDaGFubmVscy5y
ZW1vdmUodGFyZ2V0LmlkZW50aWZpZXIoKSk7CiB9CiAKIHZvaWQgV2ViUGFnZUluc3BlY3RvclRh
cmdldENvbnRyb2xsZXI6OmNvbm5lY3RJbnNwZWN0b3IoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwg
SW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlIGNvbm5lY3Rpb25UeXBl
KQpAQCAtNjcsMTMgKzY2LDcgQEAgdm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxl
cjo6Y29ubmVjdEluc3BlY3Rvcihjb25zdCBTdHJpbmcmIHRhcmdldElkLAogICAgIGlmICghdGFy
Z2V0KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8V2ViUGFnZUluc3BlY3RvclRhcmdl
dEZyb250ZW5kQ2hhbm5lbD4gY2hhbm5lbCA9IG1fdGFyZ2V0RnJvbnRlbmRDaGFubmVscy5nZXQo
dGFyZ2V0SWQpOwotICAgIGlmICghY2hhbm5lbCkgewotICAgICAgICBjaGFubmVsID0gV2ViUGFn
ZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbDo6Y3JlYXRlKCp0aGlzLCB0YXJnZXRJZCwg
Y29ubmVjdGlvblR5cGUpOwotICAgICAgICBtX3RhcmdldEZyb250ZW5kQ2hhbm5lbHMuc2V0KHRh
cmdldC0+aWRlbnRpZmllcigpLCBjaGFubmVsKTsKLSAgICB9Ci0KLSAgICB0YXJnZXQtPmNvbm5l
Y3QoKmNoYW5uZWwuZ2V0KCkpOworICAgIHRhcmdldC0+Y29ubmVjdChjb25uZWN0aW9uVHlwZSk7
CiB9CiAKIHZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6OmRpc2Nvbm5lY3RJ
bnNwZWN0b3IoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCkKQEAgLTgyLDExICs3NSw3IEBAIHZvaWQg
V2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6OmRpc2Nvbm5lY3RJbnNwZWN0b3IoY29u
c3QgU3RyaW5nJiB0YXJnZXRJCiAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFJlZlB0cjxXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsPiBjaGFubmVs
ID0gbV90YXJnZXRGcm9udGVuZENoYW5uZWxzLnRha2UodGFyZ2V0SWQpOwotICAgIGlmICghY2hh
bm5lbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdGFyZ2V0LT5kaXNjb25uZWN0KCpjaGFubmVs
LmdldCgpKTsKKyAgICB0YXJnZXQtPmRpc2Nvbm5lY3QoKTsKIH0KIAogdm9pZCBXZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6c2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoY29uc3Qg
U3RyaW5nJiB0YXJnZXRJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQpAQCAtOTgsOSArODcsNCBA
QCB2b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpzZW5kTWVzc2FnZVRvVGFy
Z2V0QmFja2VuZChjb25zdCBTdHJpbmcmCiAgICAgdGFyZ2V0LT5zZW5kTWVzc2FnZVRvVGFyZ2V0
QmFja2VuZChtZXNzYWdlKTsKIH0KIAotdm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJv
bGxlcjo6c2VuZE1lc3NhZ2VUb1RhcmdldEZyb250ZW5kKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQs
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpTZW5kTWVzc2FnZVRvSW5zcGVjdG9yRnJvbnRlbmQodGFyZ2V0SWQsIG1lc3Nh
Z2UpKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5o
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdl
dENvbnRyb2xsZXIuaAppbmRleCAzZTkyYjdhOWRhOWU1NjA5ZTYwMTY2MzljMDliNzNjYjU5NmY4
YWY1Li43YzkzMWRhZDFjOTgwMGYwM2Q3M2Q0YTdjYTI1ODhkZDAyOGE4ZjI0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmgKQEAgLTI2LDcgKzI2LDYgQEAKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldC5oIgotI2luY2x1ZGUgIldl
YlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaCIKICNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC01MCwxMyArNDks
MTEgQEAgcHVibGljOgogICAgIHZvaWQgY29ubmVjdEluc3BlY3Rvcihjb25zdCBTdHJpbmcmIHRh
cmdldElkLCBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUpOwogICAg
IHZvaWQgZGlzY29ubmVjdEluc3BlY3Rvcihjb25zdCBTdHJpbmcmIHRhcmdldElkKTsKICAgICB2
b2lkIHNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0gICAgdm9pZCBzZW5kTWVzc2FnZVRvVGFyZ2V0RnJvbnRl
bmQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKIAogcHJp
dmF0ZToKICAgICBXZWJQYWdlJiBtX3BhZ2U7CiAgICAgV2ViUGFnZUluc3BlY3RvclRhcmdldCBt
X3BhZ2VUYXJnZXQ7CiAgICAgSGFzaE1hcDxTdHJpbmcsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFy
Z2V0Kj4gbV90YXJnZXRzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8V2ViUGFnZUluc3Bl
Y3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbD4+IG1fdGFyZ2V0RnJvbnRlbmRDaGFubmVsczsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
RnJvbnRlbmRDaGFubmVsLmNwcAppbmRleCA4ZDc4ODA3ODJhMjliMTcwY2U2NWFmYzcwMzc3ZDhi
ZDUwNjk0MzU4Li5lMWI1ZjcxMzczM2EwOTUyNTIxMjJmMGEzODAxZjgyYzhjNjBkM2Y2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0RnJvbnRlbmRDaGFubmVsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmNwcApAQCAtMjYs
MTcgKzI2LDEzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViUGFnZUluc3Bl
Y3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5oIgogCi0jaW5jbHVkZSAiV2ViUGFnZUluc3BlY3Rv
clRhcmdldENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSAiV2Vi
UGFnZVByb3h5TWVzc2FnZXMuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVJlZjxXZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsPiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJv
bnRlbmRDaGFubmVsOjpjcmVhdGUoV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXImIHRh
cmdldENvbnRyb2xsZXIsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6RnJvbnRl
bmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSkKLXsKLSAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsKHRhcmdl
dENvbnRyb2xsZXIsIHRhcmdldElkLCBjb25uZWN0aW9uVHlwZSkpOwotfQotCi1XZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsOjpXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRl
bmRDaGFubmVsKFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyJiB0YXJnZXRDb250cm9s
bGVyLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6
Q29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUpCi0gICAgOiBtX3RhcmdldENvbnRyb2xsZXIo
dGFyZ2V0Q29udHJvbGxlcikKK1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw6
OldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwoV2ViUGFnZSYgcGFnZSwgY29u
c3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rp
b25UeXBlIGNvbm5lY3Rpb25UeXBlKQorICAgIDogbV9wYWdlKHBhZ2UpCiAgICAgLCBtX3Rhcmdl
dElkKHRhcmdldElkKQogICAgICwgbV9jb25uZWN0aW9uVHlwZShjb25uZWN0aW9uVHlwZSkKIHsK
QEAgLTQ0LDcgKzQwLDcgQEAgV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbDo6
V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbChXZWIKIAogdm9pZCBXZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsOjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29u
c3QgU3RyaW5nJiBtZXNzYWdlKQogewotICAgIG1fdGFyZ2V0Q29udHJvbGxlci5zZW5kTWVzc2Fn
ZVRvVGFyZ2V0RnJvbnRlbmQobV90YXJnZXRJZCwgbWVzc2FnZSk7CisgICAgbV9wYWdlLnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2VuZE1lc3NhZ2VUb0luc3BlY3RvckZyb250ZW5kKG1f
dGFyZ2V0SWQsIG1lc3NhZ2UpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0RnJvbnRlbmRDaGFubmVsLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmgKaW5kZXggNzZhZjYyYTk3YmVm
NDg4YjY0NGU1ZDYxOGQ0MzllYzlhNDJmMjJkYS4uODE4NGFjNWJkYTI4OTM4MmFlYjJjZjUwMTY5
YzU5NTY3ZDRjZDJlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENo
YW5uZWwuaApAQCAtMzEsMjIgKzMxLDIwIEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFz
cyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjsKK2NsYXNzIFdlYlBhZ2U7CiAKLWNs
YXNzIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwgZmluYWwgOiBwdWJsaWMg
UmVmQ291bnRlZDxXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsPiwgcHVibGlj
IEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsIHsKK2NsYXNzIFdlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRGcm9udGVuZENoYW5uZWwgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5u
ZWwgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwpOwogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbD4gY3JlYXRl
KFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyJiwgY29uc3QgU3RyaW5nJiB0YXJnZXRJ
ZCwgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlKTsKKyAgICBXZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsKFdlYlBhZ2UmLCBjb25zdCBTdHJpbmcm
IHRhcmdldElkLCBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUpOwog
ICAgIHZpcnR1YWwgfldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwoKSA9IGRl
ZmF1bHQ7CiAKIHByaXZhdGU6Ci0gICAgV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hh
bm5lbChXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlciYsIGNvbnN0IFN0cmluZyYgdGFy
Z2V0SWQsIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSk7Ci0KICAg
ICBDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IG1fY29ubmVjdGlvblR5cGU7IH0KICAgICB2b2lkIHNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpIG92ZXJyaWRlOwogCi1wcml2YXRlOgotICAgIFdlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXRDb250cm9sbGVyJiBtX3RhcmdldENvbnRyb2xsZXI7CisgICAgV2ViUGFnZSYg
bV9wYWdlOwogICAgIFN0cmluZyBtX3RhcmdldElkOwogICAgIEluc3BlY3Rvcjo6RnJvbnRlbmRD
aGFubmVsOjpDb25uZWN0aW9uVHlwZSBtX2Nvbm5lY3Rpb25UeXBlIHsgSW5zcGVjdG9yOjpGcm9u
dGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlOjpSZW1vdGUgfTsKIH07CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZGNmNGJm
YTdhZjEyNjNmMzdhYmUxZjQ5OTQxYWEyMDhkNjU4ZmExMy4uZjUyZmNlNGQzYjQ1YzU3ZTk4MmIw
NzUzNTExY2JiZWU2YjU1ZDkwYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE5LTEwLTAxICBZ
dXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IG5vdGlmeSBpbnNwZWN0b3Igd2hlbiBwcm92aXNpb25hbCBwYWdlIGlzIGNyZWF0ZWQs
IGNvbW1pdHRlZCBhbmQgZGVzdHJveWVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDI3MDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRlZCBuZXcgdGVzdCBmb3IgVGFyZ2V0IGV2ZW50cyBkdXJpbmcg
UFNPTi4gSXQgaXMgb25seSBlbmFibGVkIG9uIFdlYktpdDIgYXMgdGhlcmUgaXMKKyAgICAgICAg
bm8gVGFyZ2V0IGFnZW50IGluIFdlYktpdDEuCisKKyAgICAgICAgKiBUZXN0RXhwZWN0YXRpb25z
OgorICAgICAgICAqIGh0dHAvdGVzdHMvaW5zcGVjdG9yL3RhcmdldC90YXJnZXQtZXZlbnRzLWZv
ci1wcm92aXNpb25hbC1wYWdlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90
ZXN0cy9pbnNwZWN0b3IvdGFyZ2V0L3RhcmdldC1ldmVudHMtZm9yLXByb3Zpc2lvbmFsLXBhZ2Uu
aHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnM6CisK
IDIwMTktMTAtMTQgIFJvYiBCdWlzICA8cmJ1aXNAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXBs
YWNlIHJlZnRlc3Qgc2NyaXB0cy1oZWlnaHQuaHRtbCB3aXRoIHNjcmlwdCB0ZXN0cwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL1Rlc3RFeHBl
Y3RhdGlvbnMKaW5kZXggNjExNzUyNjNmNDRhZjY4NTNjNTQxNTM5N2Q1ZDdiMDdlMTA0ZDYxNS4u
YzA0YTg4NGMxODhlMDMwZjZlN2M5YjU4OThhNWFiNmU5MzAwZTAxZSAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRp
b25zCkBAIC05MTIsNiArOTEyLDkgQEAgd2Via2l0Lm9yZy9iLzE2MTk1MSBbIERlYnVnIF0gaW5z
cGVjdG9yL2RlYnVnZ2VyL3BhdXNlZC1zY29wZXMuaHRtbCBbIFNraXAgXQogaW5zcGVjdG9yL2Rl
YnVnZ2VyL2V2YWx1YXRlT25DYWxsRnJhbWUtZW11bGF0ZVVzZXJHZXN0dXJlLXVzZXJJc0ludGVy
YWN0aW5nLmh0bWwgWyBTa2lwIF0KIGluc3BlY3Rvci9ydW50aW1lL2V2YWx1YXRlLWVtdWxhdGVV
c2VyR2VzdHVyZS11c2VySXNJbnRlcmFjdGluZy5odG1sIFsgU2tpcCBdCiAKKyMgVGFyZ2V0IGRv
bWFpbiBpcyBvbmx5IHByZXNlbnQgaW4gV0syLgoraHR0cC90ZXN0cy9pbnNwZWN0b3IvdGFyZ2V0
IFsgU2tpcCBdCisKICMgVGhlc2UgY29uZm9ybWFuY2UgdGVzdHMgYXJlIG5vIGxvbmdlciBpbiBz
eW5jIHdpdGggdGhlIGxhdGVzdCBzcGVjaWZpY2F0aW9uCiAjIGFuZCBleHBlY3QgY29tcGFyZURv
Y3VtZW50UG9zaXRpb24oKSB0byByZXR1cm46CiAjIERPQ1VNRU5UX1BPU0lUSU9OX0lNUExFTUVO
VEFUSU9OX1NQRUNJRklDIHwgRE9DVU1FTlRfUE9TSVRJT05fRElTQ09OTkVDVEVECmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci90YXJnZXQvdGFyZ2V0LWV2ZW50
cy1mb3ItcHJvdmlzaW9uYWwtcGFnZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2luc3BlY3Rvci90YXJnZXQvdGFyZ2V0LWV2ZW50cy1mb3ItcHJvdmlzaW9uYWwtcGFnZS1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDMxNzQ3Yjc0ZDExMDUxMmM2ODZhOWZkN2MxNGVhOWEz
Yzg4ZGM3ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVj
dG9yL3RhcmdldC90YXJnZXQtZXZlbnRzLWZvci1wcm92aXNpb25hbC1wYWdlLWV4cGVjdGVkLnR4
dApAQCAtMCwwICsxLDE5IEBACitUZXN0IHRoYXQgY3Jvc3MgZG9tYWluIG5hdmlnYXRpb24gcmVz
dWx0cyBpbiB0aGUgZm9sbG93aW5nIHNlcXVlbmNlIG9mIGV2ZW50cyBpbiBUYXJnZXQgZG9tYWlu
OiAKKzEuIFRhcmdldC50YXJnZXRDcmVhdGVkIGZvciBwcm92aXNpb25hbCBwYWdlLiAKKzIuIFRh
cmdldC5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldCB3aGVuIHByb3Zpc2lvbmFsIGxvYWQgaXMg
Y29tbWl0dGVkLiAKKzMuIFRhcmdldC50YXJnZXREZXN0cm95ZWQgZm9yIHRoZSBvbGQgdGFyZ2V0
IGFmdGVyIHRoZSBuYXZpZ2F0aW9uIHJlcXVlc3QgaXMgY29tbWl0dGVkLgorCitQQVNTOiBTaG91
bGQgcmVjZWl2ZSB0YXJnZXREZXN0cm95ZWQgZXZlbnQuCitQQVNTOiBEZXN0cm95ZWQgdGFyZ2V0
IHNob3VsZCBiZSBwcmV2aW91cyB0YXJnZXQuCisKKz09IFJ1bm5pbmcgdGVzdCBzdWl0ZTogVGFy
Z2V0LlBTT04KKy0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBQcm92aXNpb25hbFBhZ2VUYXJnZXQKK1BB
U1M6IFNob3VsZCByZWNlaXZlIHRhcmdldENyZWF0ZWQgZXZlbnQuCitQQVNTOiBUYXJnZXQgc2hv
dWxkIGJlIHByb3Zpc2lvbmFsLgorUEFTUzogUHJldmlvdXMgdGFyZ2V0IGlkIHNob3VsZCBiZSBp
ZCBvZiB0aGUgY3VycmVudCB0YXJnZXQuCitQQVNTOiBTaG91bGQgcmVjZWl2ZSBkaWRDb21taXRQ
cm92aXNpb25hbFRhcmdldCBldmVudC4KK1BBU1M6IFByZXZpb3VzIHRhcmdldCBzaG91bGQgYmUg
dGhlIGN1cnJlbnQgb25lLgorUEFTUzogQ29tbWl0dGVkIHRhcmdldCBzaG91bGQgbWF0Y2ggcHJv
dmlzaW9uYWwgdGFyZ2V0LgorUEFTUzogU2hvdWxkIHJlY2VpdmUgdGFyZ2V0RGVzdHJveWVkIGV2
ZW50LgorUEFTUzogRGVzdHJveWVkIHRhcmdldCBzaG91bGQgYmUgcHJldmlvdXMgdGFyZ2V0Lgor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci90YXJnZXQvdGFy
Z2V0LWV2ZW50cy1mb3ItcHJvdmlzaW9uYWwtcGFnZS5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9pbnNwZWN0b3IvdGFyZ2V0L3RhcmdldC1ldmVudHMtZm9yLXByb3Zpc2lvbmFsLXBhZ2Uu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45MzdjMWY2OTMxOTNmNDllMTUwYTliN2ExZTk3NDYxN2ZmNzg0NGMz
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvdGFy
Z2V0L3RhcmdldC1ldmVudHMtZm9yLXByb3Zpc2lvbmFsLXBhZ2UuaHRtbApAQCAtMCwwICsxLDYz
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSJ1dGYt
OCI+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2luc3BlY3Rvci10ZXN0LmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQ+CitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBsZXQgc3VpdGUgPSBJbnNwZWN0
b3JUZXN0LmNyZWF0ZUFzeW5jU3VpdGUoIlRhcmdldC5QU09OIik7CisKKyAgICBzdWl0ZS5hZGRU
ZXN0Q2FzZSh7CisgICAgICAgIG5hbWU6ICJQcm92aXNpb25hbFBhZ2VUYXJnZXQiLAorICAgICAg
ICBkZXNjcmlwdGlvbjogIkNoZWNrIHRoYXQgYSBuZXcgdGFyZ2V0IHdpbGwgYmUgY3JlYXRlZCBm
b3IgcHJvdmlzaW9uYWwgcGFnZS4iLAorICAgICAgICB0ZXN0KHJlc29sdmUsIHJlamVjdCkgewor
ICAgICAgICAgICAgY29uc3QgbWFpblRhcmdldElkID0gV0kubWFpblRhcmdldC5pZGVudGlmaWVy
OworICAgICAgICAgICAgbGV0IG5ld1RhcmdldElkOworICAgICAgICAgICAgSW5zcGVjdG9yVGVz
dC5hc3NlcnQobWFpblRhcmdldElkKTsKKyAgICAgICAgICAgIFRhcmdldEFnZW50LmRpc3BhdGNo
ZXIgPSBuZXcgUHJveHkoVGFyZ2V0QWdlbnQuZGlzcGF0Y2hlciwgeworICAgICAgICAgICAgICAg
IGdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChw
cm9wID09PSAidGFyZ2V0Q3JlYXRlZCIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAodGFyZ2V0SW5mbykgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Rhcmdl
dElkID0gdGFyZ2V0SW5mby50YXJnZXRJZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ
bnNwZWN0b3JUZXN0LnBhc3MoYFNob3VsZCByZWNlaXZlICR7cHJvcH0gZXZlbnQuYCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5leHBlY3RUcnVlKHRhcmdldElu
Zm8uaXNQcm92aXNpb25hbCwgIlRhcmdldCBzaG91bGQgYmUgcHJvdmlzaW9uYWwuIik7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5leHBlY3RFcXVhbCh0YXJnZXRJ
bmZvLnByZXZpb3VzVGFyZ2V0SWQsIG1haW5UYXJnZXRJZCwgIlByZXZpb3VzIHRhcmdldCBpZCBz
aG91bGQgYmUgaWQgb2YgdGhlIGN1cnJlbnQgdGFyZ2V0LiIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0YXJnZXRbcHJvcF0uY2FsbChyZWNlaXZlciwgdGFyZ2V0SW5mbyk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGlmIChwcm9wID09PSAiZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQi
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRhcmdldEluZm8pID0+IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LnBhc3MoYFNob3VsZCByZWNl
aXZlICR7cHJvcH0gZXZlbnQuYCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zcGVj
dG9yVGVzdC5leHBlY3RFcXVhbCh0YXJnZXRJbmZvLnByZXZpb3VzVGFyZ2V0SWQsIG1haW5UYXJn
ZXRJZCwgIlByZXZpb3VzIHRhcmdldCBzaG91bGQgYmUgdGhlIGN1cnJlbnQgb25lLiIpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0RXF1YWwodGFyZ2V0
SW5mby50YXJnZXRJZCwgbmV3VGFyZ2V0SWQsICJDb21taXR0ZWQgdGFyZ2V0IHNob3VsZCBtYXRj
aCBwcm92aXNpb25hbCB0YXJnZXQuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRhcmdldFtwcm9wXS5jYWxsKHJlY2VpdmVyLCB0YXJnZXRJbmZvKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHByb3AgPT09ICJ0YXJnZXREZXN0cm95ZWQiKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gKHRhcmdldElkKSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SW5zcGVjdG9yVGVzdC5wYXNzKGBTaG91bGQgcmVjZWl2ZSAke3Byb3B9IGV2ZW50LmApOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0RXF1YWwodGFyZ2V0
SWQsIG1haW5UYXJnZXRJZCwgIkRlc3Ryb3llZCB0YXJnZXQgc2hvdWxkIGJlIHByZXZpb3VzIHRh
cmdldC4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldFtwcm9wXS5jYWxsKHJlY2VpdmVyLCB0
YXJnZXRJZCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRbcHJvcF07CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBSdW50aW1lQWdlbnQuZXZhbHVh
dGUoImxvY2F0aW9uLmhvc3RuYW1lPSdsb2NhbGhvc3QnIik7CisgICAgICAgIH0KKyAgICB9KTsK
KworICAgIHN1aXRlLnJ1blRlc3RDYXNlc0FuZEZpbmlzaCgpOworfQorPC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+Cis8cD5UZXN0IHRoYXQgY3Jvc3MgZG9tYWlu
IG5hdmlnYXRpb24gcmVzdWx0cyBpbiB0aGUgZm9sbG93aW5nIHNlcXVlbmNlIG9mIGV2ZW50cyBp
biBUYXJnZXQgZG9tYWluOgorPGJyPjEuIFRhcmdldC50YXJnZXRDcmVhdGVkIGZvciBwcm92aXNp
b25hbCBwYWdlLgorPGJyPjIuIFRhcmdldC5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldCB3aGVu
IHByb3Zpc2lvbmFsIGxvYWQgaXMgY29tbWl0dGVkLgorPGJyPjMuIFRhcmdldC50YXJnZXREZXN0
cm95ZWQgZm9yIHRoZSBvbGQgdGFyZ2V0IGFmdGVyIHRoZSBuYXZpZ2F0aW9uIHJlcXVlc3QgaXMg
Y29tbWl0dGVkLgorPC9wPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93
azIvVGVzdEV4cGVjdGF0aW9ucwppbmRleCAwMmQ2ODk4MWI1N2UxZmNlMDkwMzIyYmZmM2U0YzIw
M2FkNDkyYTg3Li43ZDRmYjY2MDUyZjZiZDkzNzk1YTJkMTIwNTUyMWQwZTI2Y2RhYzczIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9ucworKysgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9ucwpAQCAtNzY0LDYgKzc2NCw5
IEBAIGh0dHAvdGVzdHMvYWRDbGlja0F0dHJpYnV0aW9uIFsgUGFzcyBdCiBpbnNwZWN0b3IvZGVi
dWdnZXIvZXZhbHVhdGVPbkNhbGxGcmFtZS1lbXVsYXRlVXNlckdlc3R1cmUtdXNlcklzSW50ZXJh
Y3RpbmcuaHRtbCBbIFBhc3MgXQogaW5zcGVjdG9yL3J1bnRpbWUvZXZhbHVhdGUtZW11bGF0ZVVz
ZXJHZXN0dXJlLXVzZXJJc0ludGVyYWN0aW5nLmh0bWwgWyBQYXNzIF0KIAorIyBUYXJnZXQgZG9t
YWluIGlzIG9ubHkgcHJlc2VudCBpbiBXZWJLaXQyLgoraHR0cC90ZXN0cy9pbnNwZWN0b3IvdGFy
Z2V0IFsgUGFzcyBdCisKICMjIyBFTkQgT0YgKDUpIFByb2dyZXNzaW9ucywgZXhwZWN0ZWQgc3Vj
Y2Vzc2VzIHRoYXQgYXJlIGV4cGVjdGVkIGZhaWx1cmVzIGluIFdlYktpdDEuCiAjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380930</attachid>
            <date>2019-10-14 16:25:44 -0700</date>
            <delta_ts>2019-10-21 11:14:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202704-20191014162543.patch</filename>
            <type>text/plain</type>
            <size>86804</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUxMTAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
ZWIyMTU4ODU5MmNiMjcwNWQ2YzYyOTIzMTdjNGJiNWZkZTIwYmNhLi5hZTYzMTZkZDQzYTBkNTQ2
NWQzM2M5YzVmNzBiMjdlOTY4Mjk5MDMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOCBAQAorMjAxOS0wOS0yNyAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBub3RpZnkgaW5zcGVjdG9yIHdoZW4gcHJv
dmlzaW9uYWwgcGFnZSBpcyBjcmVhdGVkLCBjb21taXR0ZWQgYW5kIGRlc3Ryb3llZAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyNzA0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yVGFyZ2V0Lmg6IGNoYW5nZWQgSW5zcGVjdG9yVGFyZ2V0IHRvIG5vdCByZXF1aXJlIEZy
b250ZW5kQ2hhbm5lbCBhcworICAgICAgICBhbGwgbWVzc2FnZXMgYXJlIHJvdXRlZCBieSBtZWFu
cyBvZiB0aGUgb3duaW5nIEluc3BlY3RvclRhcmdldEFnZW50LgorICAgICAgICAqIGluc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JUYXJnZXRBZ2VudDo6SW5zcGVjdG9yVGFyZ2V0QWdlbnQpOgorICAgICAgICAoSW5z
cGVjdG9yOjpidWlsZFRhcmdldEluZm9PYmplY3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JUYXJnZXRBZ2VudDo6dGFyZ2V0Q3JlYXRlZCk6CisgICAgICAgIChJbnNwZWN0b3I6Oklu
c3BlY3RvclRhcmdldEFnZW50Ojp0YXJnZXREZXN0cm95ZWQpOgorICAgICAgICAoSW5zcGVjdG9y
OjpJbnNwZWN0b3JUYXJnZXRBZ2VudDo6ZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQpOiB0aGlz
IG1ldGhvZCBpcyB1c2VkIHRvCisgICAgICAgIG5vdGlmeSBmcm9udGVuZCB0aGF0IGNvcnJlc3Bv
bmRpbmcgcHJvdmlzaW9uYWwgdGFyZ2V0IGhhcyBjb21taXR0ZWQgYW5kIHJlcGxhY2VkIHByZXZp
b3VzCisgICAgICAgIHRhcmdldC4KKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0
QWdlbnQ6OmNvbm5lY3Rpb25UeXBlIGNvbnN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVj
dG9yVGFyZ2V0QWdlbnQ6OmNvbm5lY3RUb1RhcmdldHMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JUYXJnZXRBZ2VudDo6ZGlzY29ubmVjdEZyb21UYXJnZXRzKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50Lmg6CisgICAgICAgICogaW5zcGVj
dG9yL3Byb3RvY29sL1RhcmdldC5qc29uOiBleHRlbmRlZCBUYXJnZXRJbmZvIHdpdGggcHJvdmlz
aW9uYWwgcGFnZSBkZXRhaWxzIGFuZAorICAgICAgICBhZGRlZCBldmVudCB3aGljaCBpcyBmaXJl
ZCB3aGVuIHByb3Zpc2lvbmFsIHBhZ2UgZ2V0cyBjb21taXR0ZWQuIElmIHByb3Zpc2lvbmFsCisg
ICAgICAgIGxvYWQgZmFpbHMgdGhlcmUgd2lsbCBiZSB0YXJnZXREZXN0cm95ZWQgZXZlbnQgd2l0
aG91dCBjb3JyZXNwb25kaW5nIGNvbW1pdC4KKwogMjAxOS0xMC0xNCAgUm9iaW4gTW9yaXNzZXQg
IDxybW9yaXNzZXRAYXBwbGUuY29tPgogCiAgICAgICAgIFNwbGl0IEFyaXRoUHJvZmlsZSBpbnRv
IGEgVW5hcnkgYW5kIGEgQmluYXJ5IHZlcnNpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxY2JjODhlYTBhZjBj
YTVhMmRjYWVhNzlkNDI0OTU2YTFlYTZkYTdiLi5jZjU0ZjRmYzQ0ZGU0ZGQ4ZTA3MTY1MzMxNmY5
NmY2ZmVmMTAyMDNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTktMTAtMDEgIFl1
cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3Rvcjogbm90aWZ5IGluc3BlY3RvciB3aGVuIHByb3Zpc2lvbmFsIHBhZ2UgaXMgY3JlYXRlZCwg
Y29tbWl0dGVkIGFuZCBkZXN0cm95ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwMjcwNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRlc3Q6IGh0dHAvdGVzdHMvaW5zcGVjdG9yL3RhcmdldC90YXJnZXQt
ZXZlbnRzLWZvci1wcm9pc2lvbmFsLXBhZ2UuaHRtbAorCisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6c2V0SXNVbmRlclRlc3QpOiBUaGlzIG1ldGhvZCBtYXkgYmUgY2FsbGVkIHNldmVyYWwg
dGltZXMKKyAgICAgICAgd2hlbiByZWxvYWRpbmcgaW5zcGVjdGVkIHBhZ2Ugd2l0aCBvcGVuZWQg
ZnJvbnRlbmQgc28gdGhlIGFzc3VtcHRpb24gdGhhdCB0aGVyZSBhcmUgbm8KKyAgICAgICAgY29u
bmVjdGVkIGZyb250ZW5kcyB3aGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmcm9tIHRlc3RzIGRv
ZXNuJ3QgaG9sZCBhbnltb3JlLgorCiAyMDE5LTEwLTE0ICBXZW5zb24gSHNpZWggIDx3ZW5zb25f
aHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFtDbGlwYm9hcmQgQVBJXSBTdXBwb3J0IHdyaXRp
bmcgbXVsdGlwbGUgUGFzdGVib2FyZEN1c3RvbURhdGEgd2l0aCBTaGFyZWRCdWZmZXJzIHRvIHRo
ZSBwYXN0ZWJvYXJkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCAxZTU3ZmJhYzVmMWE0MDI4
MzJiNjg3NWZmNTc1ZTJmOGJhNDBkOTZjLi5hMGM1MjBkYWQwZDk0OTA4NTE0ZTNjMzhmM2IwM2Zh
ZDU0Mzg5YjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MSBAQAorMjAx
OS0wOS0yNyAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBXZWIgSW5zcGVjdG9yOiBub3RpZnkgaW5zcGVjdG9yIHdoZW4gcHJvdmlzaW9uYWwgcGFnZSBp
cyBjcmVhdGVkLCBjb21taXR0ZWQgYW5kIGRlc3Ryb3llZAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyNzA0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlZCBmcm9udGVuZCBjb2RlIHRvIHVuZGVy
c3RhbmQgcHJvdmlzaW9uYWwgdGFyZ2V0cy4gRm9yIG5vdyB0aGVyZSBhcmUKKyAgICAgICAgbm8g
Y2hhbmdlcyBmcm9udGVuZCBiZWhhdmlvciwgaXQgd2lsbCB3YWl0IGZvciB0aGUgcHJvdmlzaW9u
YWwgdGFyZ2V0IHRvIGNvbW1pdAorICAgICAgICBhbmQgd2lsbCBub3Qgc2VuZCBhbnkgY29tbWFu
ZHMgdG8gaXQgYmVmb3JlIHRoYXQuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Jhc2UvTWFp
bi5qczogTW92ZWQgYSBidW5jaCBvZiBtZXRob2RzIHNoYXJlZCBiZXR3ZWVuIE1haW4uanMgYW5k
IFRlc3QuanMKKyAgICAgICAgdG8gVGFyZ2V0TWFuYWdlci5qcyB0byBrZWVwIHRoZW0gaW4gc3lu
Yy4KKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1RhcmdldE1hbmFnZXIuanM6
CisgICAgICAgIChXSS5UYXJnZXRNYW5hZ2VyKToKKyAgICAgICAgKFdJLlRhcmdldE1hbmFnZXIu
cHJvdG90eXBlLnJlbW92ZVRhcmdldCk6CisgICAgICAgIChXSS5UYXJnZXRNYW5hZ2VyLnByb3Rv
dHlwZS5jcmVhdGVNdWx0aXBsZXhpbmdCYWNrZW5kVGFyZ2V0KToKKyAgICAgICAgKFdJLlRhcmdl
dE1hbmFnZXIucHJvdG90eXBlLmNyZWF0ZURpcmVjdEJhY2tlbmRUYXJnZXQpOgorICAgICAgICAo
V0kuVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUudGFyZ2V0Q3JlYXRlZCk6CisgICAgICAgIChXSS5U
YXJnZXRNYW5hZ2VyLnByb3RvdHlwZS5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldCk6CisgICAg
ICAgIChXSS5UYXJnZXRNYW5hZ2VyLnByb3RvdHlwZS50YXJnZXREZXN0cm95ZWQpOgorICAgICAg
ICAoV0kuVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUuZGlzcGF0Y2hNZXNzYWdlRnJvbVRhcmdldCk6
CisgICAgICAgIChXSS5UYXJnZXRNYW5hZ2VyLnByb3RvdHlwZS5fY2hlY2tBbmRIYW5kbGVQYWdl
VGFyZ2V0VHJhbnNpdGlvbik6CisgICAgICAgIChXSS5UYXJnZXRNYW5hZ2VyLnByb3RvdHlwZS5f
Y2hlY2tBbmRIYW5kbGVQYWdlVGFyZ2V0VGVybWluYXRpb24pOgorICAgICAgICAoV0kuVGFyZ2V0
TWFuYWdlci5wcm90b3R5cGUuX2luaXRpYWxpemVCYWNrZW5kVGFyZ2V0KToKKyAgICAgICAgKFdJ
LlRhcmdldE1hbmFnZXIucHJvdG90eXBlLl9pbml0aWFsaXplUGFnZVRhcmdldCk6CisgICAgICAg
IChXSS5UYXJnZXRNYW5hZ2VyLnByb3RvdHlwZS5fdHJhbnNpdGlvblBhZ2VUYXJnZXQpOgorICAg
ICAgICAoV0kuVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUuX3Rlcm1pbmF0ZVBhZ2VUYXJnZXQpOgor
ICAgICAgICAoV0kuVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUuX3Jlc2V0TWFpbkV4ZWN1dGlvbkNv
bnRleHQpOgorICAgICAgICAoV0kuVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUuX3JlZGlyZWN0R2xv
YmFsQWdlbnRzVG9Db25uZWN0aW9uKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Byb3RvY29s
L0Nvbm5lY3Rpb24uanM6CisgICAgICAgIChJbnNwZWN0b3JCYWNrZW5kLldvcmtlckNvbm5lY3Rp
b24uc2VuZE1lc3NhZ2VUb0JhY2tlbmQpOgorICAgICAgICAoSW5zcGVjdG9yQmFja2VuZC5Xb3Jr
ZXJDb25uZWN0aW9uKToKKyAgICAgICAgKEluc3BlY3RvckJhY2tlbmQuVGFyZ2V0Q29ubmVjdGlv
bi5zZW5kTWVzc2FnZVRvQmFja2VuZCk6CisgICAgICAgIChJbnNwZWN0b3JCYWNrZW5kLlRhcmdl
dENvbm5lY3Rpb24pOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUHJvdG9jb2wvVGFyZ2V0Lmpz
OgorICAgICAgICAoV0kuVGFyZ2V0LnByb3RvdHlwZS5kZXN0cm95KTogTWFyayB0YXJnZXQgYXMg
ZGVzdHJveWVkIHRvIGRpc3Rpbmd1aXNoIGV4cGVjdGVkIGNvbW1hbmQgZXJyb3JzIGZyb20KKyAg
ICAgICAgZ2VudWluZSBmYWlsdXJlcy4KKworICAgICAgICAoV0kuVGFyZ2V0LnByb3RvdHlwZS5p
c0Rlc3Ryb3llZCk6CisgICAgICAgICogVXNlckludGVyZmFjZS9Qcm90b2NvbC9UYXJnZXRPYnNl
cnZlci5qczogU2luY2UgdGhlIGZyb250LWVuZCBkb2Vzbid0CisgICAgICAgIHNlbmQgY29tbWFu
ZHMgdG8gdGhlIHByb3Zpc2lvbmFsIHRhcmdldHMgeWV0LCBpdCBoYXMgdG8gaWdub3JlIGFsbCBh
Y3Rpdml0aWVzCisgICAgICAgIHJlbGF0ZWQgdG8gcHJvdmlzaW9uYWwgcGFnZXMuIEZvciB0aGF0
IHJlYXNvbiB3ZSBuZWVkIHR3byBzZXRzIHRvIGtlZXAgdHJhY2sgb2YKKyAgICAgICAgLSBwcm92
aXNpb25hbCBwYWdlcyB0aGF0IHdlcmUgZGVzdHJveWVkIGFuZCBuZXZlciBjb21taXR0ZWQKKyAg
ICAgICAgLSBvbGQgcGFnZXMgd2hpY2ggd2VyZSByZXBsYWNlZCBieSBjb21taXR0ZWQgcGFnZSBh
bmQgZm9yIHdoaWNoIGZvbGxvd2luZyB0YXJnZXREZXN0cm95ZWQKKyAgICAgICAgZXZlbnQgc2hv
dWxkIGJlIGlnbm9yZWQKKyAgICAgICAgQmV0dGVyIHN1cHBvcnQgZm9yIHByb3Zpc2lvbmFsIHRh
cmdldHMgd2lsbCBiZSBhZGRlZCB0byBmcm9udGVuZCBpbiBhIHNlcGFyYXRlIGNoYW5nZS4KKyAg
ICAgICAgKFdJLlRhcmdldE9ic2VydmVyKToKKyAgICAgICAgKFdJLlRhcmdldE9ic2VydmVyLnBy
b3RvdHlwZS50YXJnZXRDcmVhdGVkKToKKyAgICAgICAgKFdJLlRhcmdldE9ic2VydmVyLnByb3Rv
dHlwZS5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldCk6IEZvciBub3cgY29udmVydCB0aGUgZXZl
bnQgaW50byBhIHN1YnNlcXVlbmNlCisgICAgICAgIG9mIHRhcmdldERlc3Ryb3llZC90YXJnZXRD
cmVhdGVkIGV2ZW50cyB3aGljaCBtYXRjaGVzIHByZXZpb3VzIGJlaGF2aW9yLgorCisgICAgICAg
IChXSS5UYXJnZXRPYnNlcnZlci5wcm90b3R5cGUudGFyZ2V0RGVzdHJveWVkKToKKyAgICAgICAg
KFdJLlRhcmdldE9ic2VydmVyLnByb3RvdHlwZS5kaXNwYXRjaE1lc3NhZ2VGcm9tVGFyZ2V0KToK
KyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Rlc3QvVGVzdC5qczoKKyAgICAgICAgKFdJLnRyYW5z
aXRpb25QYWdlVGFyZ2V0KToKKyAgICAgICAgKFdJLnRlcm1pbmF0ZVBhZ2VUYXJnZXQpOgorCiAy
MDE5LTEwLTExICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBX
ZWIgSW5zcGVjdG9yOiBEZWJ1Z2dlcjogc3VwcG9ydCBwYXR0ZXJuIGJsYWNrYm94aW5nCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CmluZGV4IGE4M2ZhOGU1NmM1NzhiODgwYTJiNTFmZmJjM2ZhOTdkMjI3ZTRiMDYuLjI2OGM1NGM1
MTY1NzMyYWYyOGY4MGZiOWYyNjFjOGQ5ZDFlMTFjN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODIg
QEAKKzIwMTktMDktMjcgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgV2ViIEluc3BlY3Rvcjogbm90aWZ5IGluc3BlY3RvciB3aGVuIHByb3Zpc2lvbmFs
IHBhZ2UgaXMgY3JlYXRlZCwgY29tbWl0dGVkIGFuZCBkZXN0cm95ZWQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjcwNAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRhcmdldC50YXJnZXRDcmVhdGVkIGV2
ZW50IGlzIG5vdyBnZW5lcmF0ZWQgZm9yIHByb3Zpc2lvbmFsIHBhZ2VzIGFzIHdlbGwgYXMgZm9y
IHJlZ3VsYXIKKyAgICAgICAgb25lcy4gVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCB0b3dhcmQgcmVh
dHRhY2hpbmcgaW5zcGVjdG9yIGVhcmxpZXIgZHVyaW5nIFBTT04uIEluIHRoZSBmdXR1cmUKKyAg
ICAgICAgaWYgZGVidWdnaW5nIGlzIGluIHByb2dyZXNzIHRoZSBwcm92aXNpb25hbCB0YXJnZXQg
KHBhZ2UpIHdpbGwgYmUgcGF1c2VkIHVudGlsIGEgc2lnbmFsIGZyb20KKyAgICAgICAgaW5zcGVj
dG9yIGZyb250ZW5kLiBUaGlzIHdpbGwgZW5hYmxlIHRoZSBmcm9udGVuZCBjb25maWd1cmUgYWxs
IGFnZW50cyBiZWZvcmUgbmF2aWdhdGlvbiBzdGFydHMuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4
dDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuY3Bw
OgorICAgICAgICAoQVBJOjpXZWJBdXRoZW50aWNhdGlvblBhbmVsOjpXZWJBdXRoZW50aWNhdGlv
blBhbmVsKTogQWRkZWQgZXhwbGljaXQgbmFtZXNwYWNlIHNwZWNpZmllcgorICAgICAgICB0byB0
aGUgY29uc3RydWN0b3IncyBhcmd1bWVudCBhcyBvdGhlcndpc2UgY29tcGlsYXRpb24gZmFpbHMg
ZHVlIHRvIGNvbmZsaWN0IGJldHdlZW4gQVBJOjpTdHJpbmcKKyAgICAgICAgYW5kIFdURjo6U3Ry
aW5nLgorCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3RvclRhcmdldFByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6SW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6Okluc3BlY3RvclRhcmdldFByb3h5Ojpjb25uZWN0KToKKyAgICAgICAgKFdlYktpdDo6
SW5zcGVjdG9yVGFyZ2V0UHJveHk6OmRpc2Nvbm5lY3QpOgorICAgICAgICAoV2ViS2l0OjpJbnNw
ZWN0b3JUYXJnZXRQcm94eTo6c2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQpOgorICAgICAgICAo
V2ViS2l0OjpJbnNwZWN0b3JUYXJnZXRQcm94eTo6ZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQp
OgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JUYXJnZXRQcm94eTo6aXNQcm92aXNpb25hbCBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvclRhcmdldFByb3h5OjpwcmV2aW91c1Rh
cmdldElEIGNvbnN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yVGFyZ2V0UHJveHku
aDogVGFyZ2V0IHByb3h5IGNhbiBzdGFydCBhcyBhIHByb3Zpc2lvbmFsIHRhcmdldCAod2l0aCBh
IHBvaW50ZXIgdG8KKyAgICAgICAgUHJvdmlzaW9uYWxQYWdlUHJveHkpIGFuZCBsYXRlciBlaXRo
ZXIgYmUgY29tbWl0dGVkIG9yIGRlc3Ryb3llZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9Qcm92
aXNpb25hbFBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlByb3Zpc2lvbmFsUGFnZVBy
b3h5OjpQcm92aXNpb25hbFBhZ2VQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlByb3Zpc2lvbmFs
UGFnZVByb3h5Ojp+UHJvdmlzaW9uYWxQYWdlUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpQcm92
aXNpb25hbFBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOiBGb3J3YXJkIGluc3BlY3RvciBt
ZXNzYWdlcyB0byBwYXJlbnQgcGFnZSdzIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLgorICAg
ICAgICBTaW5jZSBlYWNoIFdlYlBhZ2UgaGFzIGEgdW5pcXVlIGlkZW50aWZpZXIgdGhlIHRhcmdl
dCBpZHMgd2lsbCBiZSBnbG9iYWxseSB1bmlxdWUgYW5kIHRoZXJlIGlzIG5vIHJpc2sgb2YgY29s
bGlzaW9ucy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5oOgor
ICAgICAgICAoV2ViS2l0OjpQcm92aXNpb25hbFBhZ2VQcm94eTo6cGFnZSBjb25zdCk6CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6Z2V0VGFyZ2V0SUQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlSW5zcGVjdG9y
Q29udHJvbGxlcjo6V2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6Y2xlYXJUYXJnZXRzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmNyZWF0ZUluc3BlY3RvclRhcmdldCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpkZXN0cm95SW5z
cGVjdG9yVGFyZ2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUluc3BlY3RvckNvbnRyb2xs
ZXI6OmRpZENyZWF0ZVByb3Zpc2lvbmFsUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VJ
bnNwZWN0b3JDb250cm9sbGVyOjpkaWREZXN0cm95UHJvdmlzaW9uYWxQYWdlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdFByb3Zpc2lvbmFs
UGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjphZGRU
YXJnZXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwOiBS
ZW1vdmVkLiBNZXJnZWQgdGhpcyBhZ2VudCBpbnRvIEluc3BlY3RvclRhcmdldEFnZW50LgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
bV9yZXNldFJlY2VudENyYXNoQ291bnRUaW1lcik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6ZmluaXNoQXR0YWNoaW5nVG9XZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5Ojpjb21taXRQcm92aXNpb25hbFBhZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaDogTW92ZWQgdGhlIHRhcmdldCBtYW5hZ2VtZW50IGxvZ2ljIGludG8gV2Vi
UGFnZUluc3BlY3RvckNvbnRyb2xsZXIuCisgICAgICAgIFdlYlBhZ2VQcm94eS9Qcm92aXNpb25h
bFBhZ2VQcm94eSBhcmUgZXhwZWN0ZWQgdG8gbm90aWZpeSBpdCBhYm91dCBrZXkgbGlmZWN5Y2xl
IGV2ZW50cyBhbmQgYWxzbworICAgICAgICBmb3J3YXJkIHRvIGl0IG1lc3NhZ2VzIGZyb20gaW5z
cGVjdG9yIGluIHRoZSBpbnNwZWN0ZWQgV2ViUHJvY2Vzcy4gSG93IGl0IHRyYW5zbGF0ZXMgdG8g
VGFyZ2V0CisgICAgICAgIGV2ZW50cyBpcyBpbnNwZWN0b3IncyBidXNpbmVzcy4KKworICAgICAg
ICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZUluc3BlY3RvclRhcmdldDo6aWRlbnRpZmllciBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OmNvbm5lY3QpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0OjpkaXNjb25uZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZUluc3BlY3RvclRhcmdldDo6dG9UYXJnZXRJRCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaDogTWFkZSB0aGUgdGFyZ2V0IG93biBmcm9u
dGVuZCBjaGFubmVsIGluc3RhbmNlIGFzIGl0J3MgdGhlCisgICAgICAgIG9ubHkgcGxhY2Ugd2hl
cmUgdGhlIHBhZ2Ugc3BlY2lmaWMgY2hhbm5lbCBpcyB1c2VkLgorCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6OnJlbW92ZVRhcmdl
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpj
b25uZWN0SW5zcGVjdG9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUluc3BlY3RvclRhcmdl
dENvbnRyb2xsZXI6OmRpc2Nvbm5lY3RJbnNwZWN0b3IpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5l
bDo6V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw6OnNlbmRNZXNzYWdlVG9G
cm9udGVuZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JU
YXJnZXRGcm9udGVuZENoYW5uZWwuaDogVGhlIGNoYW5uZWwncyBsaWZldGltZSBpcyBtYW5hZ2Vk
IGJ5IG93bmluZworICAgICAgICB0YXJnZXQuIE5vIG5lZWQgdG8gcmVmZXJlbmNlIGNvdW50IGl0
LgorCiAyMDE5LTEwLTE0ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgog
CiAgICAgICAgIFtDbGlwYm9hcmQgQVBJXSBTdXBwb3J0IHdyaXRpbmcgbXVsdGlwbGUgUGFzdGVi
b2FyZEN1c3RvbURhdGEgd2l0aCBTaGFyZWRCdWZmZXJzIHRvIHRoZSBwYXN0ZWJvYXJkCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRhcmdldC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUYXJnZXQuaAppbmRl
eCA5ZWRhYTFmNDIwOTVmMDYyZjQ1YTgxMDNmYTI3NGI1MTViNjJmMThiLi5hNjk0Mzc3MjA0NmZh
Yzk3YzBmOTUxOGYyODQ4N2ViOTU4OWEyNmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRhcmdldC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGFyZ2V0LmgKQEAgLTQ3LDkgKzQ3LDEyIEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIFN0cmluZyBpZGVudGlmaWVyKCkgY29uc3QgPSAwOwogICAgIHZpcnR1
YWwgSW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKCkgY29uc3QgPSAwOwogCisgICAgdmlydHVhbCBi
b29sIGlzUHJvdmlzaW9uYWwoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwg
U3RyaW5nIHByZXZpb3VzVGFyZ2V0SUQoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfQorCiAg
ICAgLy8gQ29ubmVjdGlvbiBtYW5hZ2VtZW50LgotICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0KEZy
b250ZW5kQ2hhbm5lbCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdChGcm9udGVu
ZENoYW5uZWwmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNvbm5lY3QoRnJvbnRlbmRDaGFubmVs
OjpDb25uZWN0aW9uVHlwZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0KCkgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJp
bmcmKSA9IDA7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5jcHAKaW5kZXggYzZjNmJm
ODA2ZTJlMjZiMTU0YmY5Y2E3MmMwY2NhZTk0ZjUwM2NhYS4uZDAyYjhkYmQ5NmUxNDY2YzYzMWVh
MTYyOTMxMTVjMWZiY2FmZmMyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmNwcApAQCAt
MzIsNiArMzIsNyBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogSW5zcGVjdG9yVGFyZ2V0QWdl
bnQ6Okluc3BlY3RvclRhcmdldEFnZW50KEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlciwg
QmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyKQogICAgIDogSW5zcGVjdG9yQWdl
bnRCYXNlKCJUYXJnZXQiX3MpCisgICAgLCBtX3JvdXRlcihmcm9udGVuZFJvdXRlcikKICAgICAs
IG1fZnJvbnRlbmREaXNwYXRjaGVyKG1ha2VVbmlxdWU8VGFyZ2V0RnJvbnRlbmREaXNwYXRjaGVy
Pihmcm9udGVuZFJvdXRlcikpCiAgICAgLCBtX2JhY2tlbmREaXNwYXRjaGVyKFRhcmdldEJhY2tl
bmREaXNwYXRjaGVyOjpjcmVhdGUoYmFja2VuZERpc3BhdGNoZXIsIHRoaXMpKQogewpAQCAtOTQs
MTIgKzk1LDE4IEBAIHN0YXRpYyBQcm90b2NvbDo6VGFyZ2V0OjpUYXJnZXRJbmZvOjpUeXBlIHRh
cmdldFR5cGVUb1Byb3RvY29sVHlwZShJbnNwZWN0b3JUYXJnCiAgICAgcmV0dXJuIFByb3RvY29s
OjpUYXJnZXQ6OlRhcmdldEluZm86OlR5cGU6OkphdmFTY3JpcHQ7CiB9CiAKLXN0YXRpYyBSZWY8
UHJvdG9jb2w6OlRhcmdldDo6VGFyZ2V0SW5mbz4gYnVpbGRUYXJnZXRJbmZvT2JqZWN0KGNvbnN0
IEluc3BlY3RvclRhcmdldCYgdGFyZ2V0KQorc3RhdGljIFJlZjxQcm90b2NvbDo6VGFyZ2V0OjpU
YXJnZXRJbmZvPiBidWlsZFRhcmdldEluZm9PYmplY3QoY29uc3QgSW5zcGVjdG9yVGFyZ2V0JiB0
YXJnZXQsIGNvbnN0IFN0cmluZyYgcHJldmlvdXNUYXJnZXRJREZvckNvbW1pdHRlZFBhZ2UgPSBT
dHJpbmcoKSkKIHsKLSAgICByZXR1cm4gUHJvdG9jb2w6OlRhcmdldDo6VGFyZ2V0SW5mbzo6Y3Jl
YXRlKCkKKyAgICBhdXRvIHJlc3VsdCA9IFByb3RvY29sOjpUYXJnZXQ6OlRhcmdldEluZm86OmNy
ZWF0ZSgpCiAgICAgICAgIC5zZXRUYXJnZXRJZCh0YXJnZXQuaWRlbnRpZmllcigpKQogICAgICAg
ICAuc2V0VHlwZSh0YXJnZXRUeXBlVG9Qcm90b2NvbFR5cGUodGFyZ2V0LnR5cGUoKSkpCiAgICAg
ICAgIC5yZWxlYXNlKCk7CisgICAgaWYgKHRhcmdldC5pc1Byb3Zpc2lvbmFsKCkpIHsKKyAgICAg
ICAgcmVzdWx0LT5zZXRJc1Byb3Zpc2lvbmFsKHRydWUpOworICAgICAgICByZXN1bHQtPnNldFBy
ZXZpb3VzVGFyZ2V0SWQodGFyZ2V0LnByZXZpb3VzVGFyZ2V0SUQoKSk7CisgICAgfSBlbHNlIGlm
ICghcHJldmlvdXNUYXJnZXRJREZvckNvbW1pdHRlZFBhZ2UuaXNFbXB0eSgpKQorICAgICAgICBy
ZXN1bHQtPnNldFByZXZpb3VzVGFyZ2V0SWQocHJldmlvdXNUYXJnZXRJREZvckNvbW1pdHRlZFBh
Z2UpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6
OnRhcmdldENyZWF0ZWQoSW5zcGVjdG9yVGFyZ2V0JiB0YXJnZXQpCkBAIC0xMTAsNyArMTE3LDcg
QEAgdm9pZCBJbnNwZWN0b3JUYXJnZXRBZ2VudDo6dGFyZ2V0Q3JlYXRlZChJbnNwZWN0b3JUYXJn
ZXQmIHRhcmdldCkKICAgICBpZiAoIW1faXNDb25uZWN0ZWQpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIHRhcmdldC5jb25uZWN0KGZyb250ZW5kQ2hhbm5lbCgpKTsKKyAgICB0YXJnZXQuY29ubmVj
dChjb25uZWN0aW9uVHlwZSgpKTsKIAogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT50YXJnZXRD
cmVhdGVkKGJ1aWxkVGFyZ2V0SW5mb09iamVjdCh0YXJnZXQpKTsKIH0KQEAgLTEyMiwyNyArMTI5
LDQyIEBAIHZvaWQgSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OnRhcmdldERlc3Ryb3llZChJbnNwZWN0
b3JUYXJnZXQmIHRhcmdldCkKICAgICBpZiAoIW1faXNDb25uZWN0ZWQpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIHRhcmdldC5kaXNjb25uZWN0KGZyb250ZW5kQ2hhbm5lbCgpKTsKKyAgICB0YXJn
ZXQuZGlzY29ubmVjdCgpOwogCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRhcmdldERlc3Ry
b3llZCh0YXJnZXQuaWRlbnRpZmllcigpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUYXJnZXRBZ2Vu
dDo6Y29ubmVjdFRvVGFyZ2V0cygpCit2b2lkIEluc3BlY3RvclRhcmdldEFnZW50OjpkaWRDb21t
aXRQcm92aXNpb25hbFRhcmdldChjb25zdCBTdHJpbmcmIG9sZFRhcmdldElELCBjb25zdCBTdHJp
bmcmIGNvbW1pdHRlZFRhcmdldElEKQogewotICAgIGF1dG8mIGNoYW5uZWwgPSBmcm9udGVuZENo
YW5uZWwoKTsKKyAgICBpZiAoIW1faXNDb25uZWN0ZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IGF1dG8qIHRhcmdldCA9IG1fdGFyZ2V0cy5nZXQoY29tbWl0dGVkVGFyZ2V0SUQpOworICAgIGlm
ICghdGFyZ2V0KQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHRhcmdldEluZm8gPSBidWls
ZFRhcmdldEluZm9PYmplY3QoKnRhcmdldCk7CisgICAgdGFyZ2V0SW5mby0+c2V0UHJldmlvdXNU
YXJnZXRJZChvbGRUYXJnZXRJRCk7CisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRpZENvbW1p
dFByb3Zpc2lvbmFsVGFyZ2V0KFdURk1vdmUodGFyZ2V0SW5mbykpOworfQogCitGcm9udGVuZENo
YW5uZWw6OkNvbm5lY3Rpb25UeXBlIEluc3BlY3RvclRhcmdldEFnZW50Ojpjb25uZWN0aW9uVHlw
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcm91dGVyLmhhc0xvY2FsRnJvbnRlbmQoKSA/IElu
c3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZTo6TG9jYWwgOiBJbnNwZWN0
b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGU6OlJlbW90ZTsKK30KKwordm9pZCBJ
bnNwZWN0b3JUYXJnZXRBZ2VudDo6Y29ubmVjdFRvVGFyZ2V0cygpCit7CiAgICAgZm9yIChJbnNw
ZWN0b3JUYXJnZXQqIHRhcmdldCA6IG1fdGFyZ2V0cy52YWx1ZXMoKSkgewotICAgICAgICB0YXJn
ZXQtPmNvbm5lY3QoY2hhbm5lbCk7CisgICAgICAgIHRhcmdldC0+Y29ubmVjdChjb25uZWN0aW9u
VHlwZSgpKTsKICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRhcmdldENyZWF0ZWQoYnVp
bGRUYXJnZXRJbmZvT2JqZWN0KCp0YXJnZXQpKTsKICAgICB9CiB9CiAKIHZvaWQgSW5zcGVjdG9y
VGFyZ2V0QWdlbnQ6OmRpc2Nvbm5lY3RGcm9tVGFyZ2V0cygpCiB7Ci0gICAgYXV0byYgY2hhbm5l
bCA9IGZyb250ZW5kQ2hhbm5lbCgpOwotCiAgICAgZm9yIChJbnNwZWN0b3JUYXJnZXQqIHRhcmdl
dCA6IG1fdGFyZ2V0cy52YWx1ZXMoKSkKLSAgICAgICAgdGFyZ2V0LT5kaXNjb25uZWN0KGNoYW5u
ZWwpOworICAgICAgICB0YXJnZXQtPmRpc2Nvbm5lY3QoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaAppbmRleCAzMTJlYjYwMGFiOGViNDNh
MGFlNzQ3OGZjMWI3MDg0ZDA1NDZkYzdkLi5jZTkxZTgzZWFkZmYyYzhmNWIxMGMxNGY3Nzg0OTAz
NzYwNWRhYmJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmgKQEAgLTI3LDYgKzI3LDcgQEAK
IAogI2luY2x1ZGUgIkluc3BlY3RvckFnZW50QmFzZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVycy5oIgorI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5o
IgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogCkBAIC00MCw2ICs0MSw3IEBAIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRF
IEluc3BlY3RvclRhcmdldEFnZW50IDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGlj
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yVGFyZ2V0QWdlbnQpOwogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgorICAgIEluc3BlY3RvclRhcmdldEFnZW50
KEZyb250ZW5kUm91dGVyJiwgQmFja2VuZERpc3BhdGNoZXImKTsKICAgICB+SW5zcGVjdG9yVGFy
Z2V0QWdlbnQoKSBvdmVycmlkZTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50QmFzZQpAQCAtNTMs
MTkgKzU1LDE4IEBAIHB1YmxpYzoKICAgICAvLyBUYXJnZXQgbGlmZWN5Y2xlLgogICAgIHZvaWQg
dGFyZ2V0Q3JlYXRlZChJbnNwZWN0b3JUYXJnZXQmKTsKICAgICB2b2lkIHRhcmdldERlc3Ryb3ll
ZChJbnNwZWN0b3JUYXJnZXQmKTsKKyAgICB2b2lkIGRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0
KGNvbnN0IFN0cmluZyYgb2xkVGFyZ2V0SUQsIGNvbnN0IFN0cmluZyYgY29tbWl0dGVkVGFyZ2V0
SUQpOwogCiAgICAgLy8gVGFyZ2V0IG1lc3NhZ2VzLgogICAgIHZvaWQgc2VuZE1lc3NhZ2VGcm9t
VGFyZ2V0VG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpOwogCi1wcm90ZWN0ZWQ6Ci0gICAgSW5zcGVjdG9yVGFyZ2V0QWdlbnQoRnJvbnRlbmRS
b3V0ZXImLCBCYWNrZW5kRGlzcGF0Y2hlciYpOwotCi0gICAgdmlydHVhbCBGcm9udGVuZENoYW5u
ZWwmIGZyb250ZW5kQ2hhbm5lbCgpID0gMDsKLQogcHJpdmF0ZToKKyAgICAvLyBGcm9udGVuZENo
YW5uZWwKKyAgICBGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlIGNvbm5lY3Rpb25UeXBl
KCkgY29uc3Q7CiAgICAgdm9pZCBjb25uZWN0VG9UYXJnZXRzKCk7CiAgICAgdm9pZCBkaXNjb25u
ZWN0RnJvbVRhcmdldHMoKTsKIAorICAgIEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXImIG1fcm91
dGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxUYXJnZXRGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJv
bnRlbmREaXNwYXRjaGVyOwogICAgIFJlZjxUYXJnZXRCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNr
ZW5kRGlzcGF0Y2hlcjsKICAgICBIYXNoTWFwPFN0cmluZywgSW5zcGVjdG9yVGFyZ2V0Kj4gbV90
YXJnZXRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90
b2NvbC9UYXJnZXQuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9j
b2wvVGFyZ2V0Lmpzb24KaW5kZXggNjFhZDI2OWQ5NWUxOGZkNTlkYTU1YzdjM2VmN2Q1ZDE0YWQx
MzJkYS4uNjI2OTc5Nzk4OGMyMjZjMmY3MmMzMWMzODM3M2NkODQ4ZTMxNjM3NCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9UYXJnZXQuanNvbgor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1RhcmdldC5qc29u
CkBAIC04LDcgKzgsOSBAQAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRlc2NyaXB0aW9u
IG9mIGEgdGFyZ2V0LiIsCiAgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKICAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInRhcmdldElkIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9u
IjogIlVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgdGFyZ2V0LiIgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInR5cGUiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiamF2YXNjcmlw
dCIsICJwYWdlIiwgIndvcmtlciIsICJzZXJ2aWNld29ya2VyIl0gfQorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAidHlwZSIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJqYXZhc2NyaXB0
IiwgInBhZ2UiLCAid29ya2VyIiwgInNlcnZpY2V3b3JrZXIiXSB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiaXNQcm92aXNpb25hbCIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwi
OiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiV2hldGhlciB0aGlzIGlzIGEgcHJvdmlzaW9uYWwgcGFn
ZSB0YXJnZXQuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJldmlvdXNUYXJnZXRJ
ZCIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJG
b3IgYSBwcm92aXNpb25hbCB0YXJnZXQgcmVwcmVzZW5zIElEIG9mIHRoZSB0YXJnZXQgaXQgaXMg
c3dhcHBlZCB3aXRoIHdoZW4gY29tbWl0dGVkLiIgfQogICAgICAgICAgICAgXQogICAgICAgICB9
CiAgICAgXSwKQEAgLTM5LDYgKzQxLDEyIEBACiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0
YXJnZXRJZCIsICJ0eXBlIjogInN0cmluZyIgfQogICAgICAgICAgICAgXQogICAgICAgICB9LAor
ICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJkaWRDb21taXRQcm92aXNpb25hbFRhcmdl
dCIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInRhcmdldEluZm8iLCAiJHJlZiI6ICJUYXJnZXRJbmZvIiwgImRlc2NyaXB0aW9uIjogIkNv
bW1pdHRlZCB0YXJnZXQgaW5mby4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKICAgICAg
ICAgewogICAgICAgICAgICAgIm5hbWUiOiAiZGlzcGF0Y2hNZXNzYWdlRnJvbVRhcmdldCIsCiAg
ICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCAyYzY3YjcyNDQ4MzFmNjA1ZjA4ZGY0MTI1
ZjIxY2VlYzcxYzkwY2E5Li5lYTVlOTM1NTgwZGZiMGY1Nzc3OWFkOGJhMGRhNTdiNWM3MDUzMTdm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
Y3BwCkBAIC0zNDQsMTcgKzM0NCw2IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvdygp
CiAgICAgICAgIGNvbm5lY3RGcm9udGVuZCgqZnJvbnRlbmRDaGFubmVsKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpzZXRJc1VuZGVyVGVzdChib29sIHZhbHVlKQotewotICAgIGlm
ICh2YWx1ZSA9PSBtX2lzVW5kZXJUZXN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2lzVW5k
ZXJUZXN0ID0gdmFsdWU7Ci0KLSAgICAvLyA8cmRhcjovL3Byb2JsZW0vMjY3Njg2Mjg+IFRyeSB0
byBjYXRjaCBzdXNwaWNpb3VzIHNjZW5hcmlvcyB3aGVyZSB3ZSBtYXkgaGF2ZSBhIGRhbmdsaW5n
IGZyb250ZW5kIHdoaWxlIHJ1bm5pbmcgdGVzdHMuCi0gICAgUkVMRUFTRV9BU1NFUlQoIW1faXNV
bmRlclRlc3QgfHwgIW1fZnJvbnRlbmRSb3V0ZXItPmhhc0Zyb250ZW5kcygpKTsKLX0KLQogdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGNvbnN0IFN0
cmluZyYgc2NyaXB0KQogewogICAgIGVuc3VyZUluc3BlY3RvckFnZW50KCkuZXZhbHVhdGVGb3JU
ZXN0SW5Gcm9udGVuZChzY3JpcHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmgKaW5kZXggNTE4NmQ1NzAxNzNkZDkxMWVlNDUxZWJiYmZiMjJiMTNh
ZWVmNTc1OS4uOTBjMjNkNTZkMmQ4NWI3MDAwZGJlNGM0N2FjNTRlMDY3OTBiNzVkMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC0xMDEs
NyArMTAxLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGlkQ29tcG9zaXRl
KEZyYW1lJik7CiAKICAgICBib29sIGlzVW5kZXJUZXN0KCkgY29uc3QgeyByZXR1cm4gbV9pc1Vu
ZGVyVGVzdDsgfQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SXNVbmRlclRlc3QoYm9vbCk7
CisgICAgdm9pZCBzZXRJc1VuZGVyVGVzdChib29sIGlzVW5kZXJUZXN0KSB7IG1faXNVbmRlclRl
c3QgPSBpc1VuZGVyVGVzdDsgfQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZXZhbHVhdGVGb3JU
ZXN0SW5Gcm9udGVuZChjb25zdCBTdHJpbmcmIHNjcmlwdCk7CiAKICAgICBJbnNwZWN0b3JDbGll
bnQqIGluc3BlY3RvckNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yQ2xpZW50OyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01h
aW4uanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01haW4uanMK
aW5kZXggNmZiMzU3ZjBmNmRjMjFkZDI4ZmU4ODQzMzMxOTA2ODg3YjA0OWFhNC4uNDQxMjc3Y2Fl
ZjU5YjVkYTZiZjUxMWVhYTI5NDJhOWViNTBjZTFjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcwpAQCAtMTc4LDg1ICsxNzgsNiBAQCBX
SS5sb2FkZWQgPSBmdW5jdGlvbigpCiAgICAgfQogfTsKIAotV0kuaW5pdGlhbGl6ZUJhY2tlbmRU
YXJnZXQgPSBmdW5jdGlvbih0YXJnZXQpCi17Ci0gICAgY29uc29sZS5hc3NlcnQoIVdJLm1haW5U
YXJnZXQpOwotCi0gICAgV0kuYmFja2VuZFRhcmdldCA9IHRhcmdldDsKLQotICAgIFdJLnJlc2V0
TWFpbkV4ZWN1dGlvbkNvbnRleHQoKTsKLQotICAgIFdJLl90YXJnZXRzQXZhaWxhYmxlUHJvbWlz
ZS5yZXNvbHZlKCk7Ci19OwotCi1XSS5pbml0aWFsaXplUGFnZVRhcmdldCA9IGZ1bmN0aW9uKHRh
cmdldCkKLXsKLSAgICBjb25zb2xlLmFzc2VydChXSS5zaGFyZWRBcHAuZGVidWdnYWJsZVR5cGUg
PT09IFdJLkRlYnVnZ2FibGVUeXBlLldlYik7Ci0gICAgY29uc29sZS5hc3NlcnQodGFyZ2V0LnR5
cGUgPT09IFdJLlRhcmdldC5UeXBlLlBhZ2UgfHwgdGFyZ2V0IGluc3RhbmNlb2YgV0kuRGlyZWN0
QmFja2VuZFRhcmdldCk7Ci0KLSAgICBXSS5wYWdlVGFyZ2V0ID0gdGFyZ2V0OwotCi0gICAgV0ku
cmVkaXJlY3RHbG9iYWxBZ2VudHNUb0Nvbm5lY3Rpb24oV0kucGFnZVRhcmdldC5jb25uZWN0aW9u
KTsKLQotICAgIFdJLnJlc2V0TWFpbkV4ZWN1dGlvbkNvbnRleHQoKTsKLX07Ci0KLVdJLnRyYW5z
aXRpb25QYWdlVGFyZ2V0ID0gZnVuY3Rpb24odGFyZ2V0KQotewotICAgIGNvbnNvbGUuYXNzZXJ0
KCFXSS5wYWdlVGFyZ2V0KTsKLSAgICBjb25zb2xlLmFzc2VydChXSS5zaGFyZWRBcHAuZGVidWdn
YWJsZVR5cGUgPT09IFdJLkRlYnVnZ2FibGVUeXBlLldlYik7Ci0gICAgY29uc29sZS5hc3NlcnQo
dGFyZ2V0LnR5cGUgPT09IFdJLlRhcmdldC5UeXBlLlBhZ2UpOwotCi0gICAgV0kucGFnZVRhcmdl
dCA9IHRhcmdldDsKLQotICAgIFdJLnJlZGlyZWN0R2xvYmFsQWdlbnRzVG9Db25uZWN0aW9uKFdJ
LnBhZ2VUYXJnZXQuY29ubmVjdGlvbik7Ci0KLSAgICBXSS5yZXNldE1haW5FeGVjdXRpb25Db250
ZXh0KCk7Ci0KLSAgICAvLyBBY3Rpb25zIHRvIHRyYW5zaXRpb24gdGhlIHBhZ2UgdGFyZ2V0Lgot
ICAgIFdJLm5vdGlmaWNhdGlvbnMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdJLk5vdGlmaWNh
dGlvbi5UcmFuc2l0aW9uUGFnZVRhcmdldCk7Ci0gICAgV0kuZG9tTWFuYWdlci50cmFuc2l0aW9u
UGFnZVRhcmdldCgpOwotICAgIFdJLm5ldHdvcmtNYW5hZ2VyLnRyYW5zaXRpb25QYWdlVGFyZ2V0
KCk7Ci0gICAgV0kudGltZWxpbmVNYW5hZ2VyLnRyYW5zaXRpb25QYWdlVGFyZ2V0KCk7Ci19Owot
Ci1XSS50ZXJtaW5hdGVQYWdlVGFyZ2V0ID0gZnVuY3Rpb24odGFyZ2V0KQotewotICAgIGNvbnNv
bGUuYXNzZXJ0KFdJLnBhZ2VUYXJnZXQpOwotICAgIGNvbnNvbGUuYXNzZXJ0KFdJLnBhZ2VUYXJn
ZXQgPT09IHRhcmdldCk7Ci0gICAgY29uc29sZS5hc3NlcnQoV0kuc2hhcmVkQXBwLmRlYnVnZ2Fi
bGVUeXBlID09PSBXSS5EZWJ1Z2dhYmxlVHlwZS5XZWIpOwotCi0gICAgLy8gUmVtb3ZlIGFueSBX
b3JrZXIgdGFyZ2V0cyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYWdlLgotICAgIGxldCB3b3JrZXJU
YXJnZXRzID0gV0kudGFyZ2V0cy5maWx0ZXIoKHgpID0+IHgudHlwZSA9PT0gV0kuVGFyZ2V0LlR5
cGUuV29ya2VyKTsKLSAgICBmb3IgKGxldCB3b3JrZXJUYXJnZXQgb2Ygd29ya2VyVGFyZ2V0cykK
LSAgICAgICAgV0kud29ya2VyTWFuYWdlci53b3JrZXJUZXJtaW5hdGVkKHdvcmtlclRhcmdldC5p
ZGVudGlmaWVyKTsKLQotICAgIFdJLnBhZ2VUYXJnZXQgPSBudWxsOwotCi0gICAgV0kucmVkaXJl
Y3RHbG9iYWxBZ2VudHNUb0Nvbm5lY3Rpb24oV0kuYmFja2VuZENvbm5lY3Rpb24pOwotfTsKLQot
V0kucmVzZXRNYWluRXhlY3V0aW9uQ29udGV4dCA9IGZ1bmN0aW9uKCkKLXsKLSAgICBpZiAoV0ku
bWFpblRhcmdldCBpbnN0YW5jZW9mIFdJLk11bHRpcGxleGluZ0JhY2tlbmRUYXJnZXQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChXSS5tYWluVGFyZ2V0LmV4ZWN1dGlvbkNvbnRleHQpIHsK
LSAgICAgICAgV0kucnVudGltZU1hbmFnZXIuYWN0aXZlRXhlY3V0aW9uQ29udGV4dCA9IFdJLm1h
aW5UYXJnZXQuZXhlY3V0aW9uQ29udGV4dDsKLSAgICAgICAgaWYgKFdJLnF1aWNrQ29uc29sZSkK
LSAgICAgICAgICAgIFdJLnF1aWNrQ29uc29sZS5pbml0aWFsaXplTWFpbkV4ZWN1dGlvbkNvbnRl
eHRQYXRoQ29tcG9uZW50KCk7Ci0gICAgfQotfTsKLQotV0kucmVkaXJlY3RHbG9iYWxBZ2VudHNU
b0Nvbm5lY3Rpb24gPSBmdW5jdGlvbihjb25uZWN0aW9uKQotewotICAgIC8vIFRoaXMgbWFrZXMg
Z2xvYmFsIHdpbmRvdy5Gb29BZ2VudCBkaXNwYXRjaCB0byB0aGUgYWN0aXZlIHBhZ2UgdGFyZ2V0
LgotICAgIGZvciAobGV0IFtkb21haW4sIGFnZW50XSBvZiBPYmplY3QuZW50cmllcyhJbnNwZWN0
b3JCYWNrZW5kLl9hZ2VudHMpKSB7Ci0gICAgICAgIGlmIChkb21haW4gIT09ICJUYXJnZXQiKQot
ICAgICAgICAgICAgYWdlbnQuY29ubmVjdGlvbiA9IGNvbm5lY3Rpb247Ci0gICAgfQotfTsKLQog
V0kuY29udGVudExvYWRlZCA9IGZ1bmN0aW9uKCkKIHsKICAgICAvLyBJZiB0aGVyZSB3YXMgYW4g
dW5jYXVnaHQgZXhjZXB0aW9uIGVhcmxpZXIgZHVyaW5nIGxvYWRpbmcsIHRoZW4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1Rhcmdl
dE1hbmFnZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9s
bGVycy9UYXJnZXRNYW5hZ2VyLmpzCmluZGV4IGE5ZmE0ZGUwZTgzYTZiNjcxNzM0YjhhZTZhMzBj
ODhkMzVhYzdiMTguLjEyZTE5MWE2MGI0NmI1YmVlNmYzNjI5OTg2NjVmNGZhNWM0YmE0ODAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJz
L1RhcmdldE1hbmFnZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvQ29udHJvbGxlcnMvVGFyZ2V0TWFuYWdlci5qcwpAQCAtMzMsNiArMzMsOSBAQCBXSS5UYXJn
ZXRNYW5hZ2VyID0gY2xhc3MgVGFyZ2V0TWFuYWdlciBleHRlbmRzIFdJLk9iamVjdAogICAgICAg
ICB0aGlzLl9jYWNoZWRUYXJnZXRzTGlzdCA9IG51bGw7CiAgICAgICAgIHRoaXMuX3NlZW5QYWdl
VGFyZ2V0ID0gZmFsc2U7CiAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25UaW1lb3V0SWRlbnRpZmll
ciA9IHVuZGVmaW5lZDsKKworICAgICAgICB0aGlzLl9wcm92aXNpb25hbFRhcmdldElkcyA9IG5l
dyBTZXQ7CisgICAgICAgIHRoaXMuX3N3YXBwZWRUYXJnZXRJZHMgPSBuZXcgU2V0OwogICAgIH0K
IAogICAgIC8vIFB1YmxpYwpAQCAtODAsNiArODMsNyBAQCBXSS5UYXJnZXRNYW5hZ2VyID0gY2xh
c3MgVGFyZ2V0TWFuYWdlciBleHRlbmRzIFdJLk9iamVjdAogCiAgICAgICAgIHRoaXMuX2NhY2hl
ZFRhcmdldHNMaXN0ID0gbnVsbDsKICAgICAgICAgdGhpcy5fdGFyZ2V0cy5kZWxldGUodGFyZ2V0
LmlkZW50aWZpZXIpOworICAgICAgICB0YXJnZXQuZGVzdHJveSgpOwogCiAgICAgICAgIHRoaXMu
ZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdJLlRhcmdldE1hbmFnZXIuRXZlbnQuVGFyZ2V0UmVt
b3ZlZCwge3RhcmdldH0pOwogICAgIH0KQEAgLTg5LDcgKzkzLDcgQEAgV0kuVGFyZ2V0TWFuYWdl
ciA9IGNsYXNzIFRhcmdldE1hbmFnZXIgZXh0ZW5kcyBXSS5PYmplY3QKICAgICAgICAgbGV0IHRh
cmdldCA9IG5ldyBXSS5NdWx0aXBsZXhpbmdCYWNrZW5kVGFyZ2V0OwogICAgICAgICB0YXJnZXQu
aW5pdGlhbGl6ZSgpOwogCi0gICAgICAgIFdJLmluaXRpYWxpemVCYWNrZW5kVGFyZ2V0KHRhcmdl
dCk7CisgICAgICAgIHRoaXMuX2luaXRpYWxpemVCYWNrZW5kVGFyZ2V0KHRhcmdldCk7CiAKICAg
ICAgICAgLy8gQWRkIHRoZSB0YXJnZXQgd2l0aG91dCBkaXNwYXRjaGluZyBhbiBldmVudC4KICAg
ICAgICAgdGhpcy5fdGFyZ2V0cy5zZXQodGFyZ2V0LmlkZW50aWZpZXIsIHRhcmdldCk7CkBAIC0x
MDAsMTAgKzEwNCwxMCBAQCBXSS5UYXJnZXRNYW5hZ2VyID0gY2xhc3MgVGFyZ2V0TWFuYWdlciBl
eHRlbmRzIFdJLk9iamVjdAogICAgICAgICBsZXQgdGFyZ2V0ID0gbmV3IFdJLkRpcmVjdEJhY2tl
bmRUYXJnZXQ7CiAgICAgICAgIHRhcmdldC5pbml0aWFsaXplKCk7CiAKLSAgICAgICAgV0kuaW5p
dGlhbGl6ZUJhY2tlbmRUYXJnZXQodGFyZ2V0KTsKKyAgICAgICAgdGhpcy5faW5pdGlhbGl6ZUJh
Y2tlbmRUYXJnZXQodGFyZ2V0KTsKIAogICAgICAgICBpZiAoV0kuc2hhcmVkQXBwLmRlYnVnZ2Fi
bGVUeXBlID09PSBXSS5EZWJ1Z2dhYmxlVHlwZS5XZWIpCi0gICAgICAgICAgICBXSS5pbml0aWFs
aXplUGFnZVRhcmdldCh0YXJnZXQpOworICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZVBhZ2VU
YXJnZXQodGFyZ2V0KTsKIAogICAgICAgICB0aGlzLmFkZFRhcmdldCh0YXJnZXQpOwogICAgIH0K
QEAgLTExMiw2ICsxMTYsMzUgQEAgV0kuVGFyZ2V0TWFuYWdlciA9IGNsYXNzIFRhcmdldE1hbmFn
ZXIgZXh0ZW5kcyBXSS5PYmplY3QKIAogICAgIHRhcmdldENyZWF0ZWQodGFyZ2V0SW5mbykKICAg
ICB7CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdJLlRhcmdldE1hbmFn
ZXIuRXZlbnQuVGFyZ2V0Q3JlYXRlZCwge3RhcmdldEluZm99KTsKKyAgICAgICAgdGhpcy5fdGFy
Z2V0Q3JlYXRlZCh0YXJnZXRJbmZvKTsKKyAgICB9CisKKyAgICBkaWRDb21taXRQcm92aXNpb25h
bFRhcmdldCh0YXJnZXRJbmZvKQorICAgIHsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9M
aXN0ZW5lcnMoV0kuVGFyZ2V0TWFuYWdlci5FdmVudC5EaWRDb21taXRQcm92aXNpb25hbFRhcmdl
dCwge3RhcmdldEluZm99KTsKKworICAgICAgICB0aGlzLl90YXJnZXREZXN0cm95ZWQodGFyZ2V0
SW5mby5wcmV2aW91c1RhcmdldElkKTsKKyAgICAgICAgdGhpcy5fcHJvdmlzaW9uYWxUYXJnZXRJ
ZHMuZGVsZXRlKHRhcmdldEluZm8udGFyZ2V0SWQpOworICAgICAgICB0aGlzLl90YXJnZXRDcmVh
dGVkKHRhcmdldEluZm8pOworICAgICAgICB0aGlzLl9zd2FwcGVkVGFyZ2V0SWRzLmFkZCh0YXJn
ZXRJbmZvLnByZXZpb3VzVGFyZ2V0SWQpOworICAgIH0KKworICAgIHRhcmdldERlc3Ryb3llZCh0
YXJnZXRJZCkKKyAgICB7CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdJ
LlRhcmdldE1hbmFnZXIuRXZlbnQuVGFyZ2V0RGVzdHJveWVkLCB7dGFyZ2V0SWR9KTsKKyAgICAg
ICAgdGhpcy5fdGFyZ2V0RGVzdHJveWVkKHRhcmdldElkKTsKKyAgICB9CisKKyAgICBfdGFyZ2V0
Q3JlYXRlZCh0YXJnZXRJbmZvKQorICAgIHsKKyAgICAgICAgLy8gQ09NUEFUSUJJTElUWSAoaU9T
IDEzLjApOiBgVGFyZ2V0LlRhcmdldEluZm8uaXNQcm92aXNpb25hbGAgZGlkIG5vdCBleGlzdCB5
ZXQuCisgICAgICAgIGlmICh0YXJnZXRJbmZvLmlzUHJvdmlzaW9uYWwpIHsKKyAgICAgICAgICAg
IHRoaXMuX3Byb3Zpc2lvbmFsVGFyZ2V0SWRzLmFkZCh0YXJnZXRJbmZvLnRhcmdldElkKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjb25zb2xlLmFzc2VydCghdGhp
cy5fcHJvdmlzaW9uYWxUYXJnZXRJZHMuaGFzKHRhcmdldEluZm8udGFyZ2V0SWQpKTsKKwogICAg
ICAgICAvLyBGSVhNRTogRWxpbWluYXRlIHRoaXMgb25jZSB0aGUgbG9jYWwgaW5zcGVjdG9yIGlz
IGNvbmZpZ3VyZWQgdG8gdXNlCiAgICAgICAgIC8vIHRoZSBNdWx0aXBsZXhpbmcgY29kZSBwYXRo
LiBUaGVuIHdlIGNhbiBwZXJmb3JtIHRoaXMgaW1tZWRpYXRlbHkKICAgICAgICAgLy8gaW4gYFdJ
LmxvYWRlZGAgaWYgYSBUYXJnZXRBZ2VudCBleGlzdHMuCkBAIC0xMjYsOCArMTU5LDEyIEBAIFdJ
LlRhcmdldE1hbmFnZXIgPSBjbGFzcyBUYXJnZXRNYW5hZ2VyIGV4dGVuZHMgV0kuT2JqZWN0CiAg
ICAgICAgIHRoaXMuYWRkVGFyZ2V0KHRhcmdldCk7CiAgICAgfQogCi0gICAgdGFyZ2V0RGVzdHJv
eWVkKHRhcmdldElkKQorICAgIF90YXJnZXREZXN0cm95ZWQodGFyZ2V0SWQpCiAgICAgeworICAg
ICAgICBpZiAodGhpcy5fcHJvdmlzaW9uYWxUYXJnZXRJZHMuZGVsZXRlKHRhcmdldElkKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKHRoaXMuX3N3YXBwZWRUYXJnZXRJZHMuZGVs
ZXRlKHRhcmdldElkKSkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbGV0IHRhcmdldCA9
IHRoaXMuX3RhcmdldHMuZ2V0KHRhcmdldElkKTsKICAgICAgICAgdGhpcy5fY2hlY2tBbmRIYW5k
bGVQYWdlVGFyZ2V0VGVybWluYXRpb24odGFyZ2V0KTsKICAgICAgICAgdGhpcy5yZW1vdmVUYXJn
ZXQodGFyZ2V0KTsKQEAgLTEzNSw2ICsxNzIsOCBAQCBXSS5UYXJnZXRNYW5hZ2VyID0gY2xhc3Mg
VGFyZ2V0TWFuYWdlciBleHRlbmRzIFdJLk9iamVjdAogCiAgICAgZGlzcGF0Y2hNZXNzYWdlRnJv
bVRhcmdldCh0YXJnZXRJZCwgbWVzc2FnZSkKICAgICB7CisgICAgICAgIGlmICh0aGlzLl9wcm92
aXNpb25hbFRhcmdldElkcy5oYXModGFyZ2V0SWQpKQorICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICBsZXQgdGFyZ2V0ID0gdGhpcy5fdGFyZ2V0cy5nZXQodGFyZ2V0SWQpOwogICAgICAgICBj
b25zb2xlLmFzc2VydCh0YXJnZXQpOwogICAgICAgICBpZiAoIXRhcmdldCkKQEAgLTE3MSwxMiAr
MjEwLDEyIEBAIFdJLlRhcmdldE1hbmFnZXIgPSBjbGFzcyBUYXJnZXRNYW5hZ2VyIGV4dGVuZHMg
V0kuT2JqZWN0CiAgICAgICAgIC8vIEZpcnN0IHBhZ2UgdGFyZ2V0LgogICAgICAgICBpZiAoIVdJ
LnBhZ2VUYXJnZXQgJiYgIXRoaXMuX3NlZW5QYWdlVGFyZ2V0KSB7CiAgICAgICAgICAgICB0aGlz
Ll9zZWVuUGFnZVRhcmdldCA9IHRydWU7Ci0gICAgICAgICAgICBXSS5pbml0aWFsaXplUGFnZVRh
cmdldCh0YXJnZXQpOworICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZVBhZ2VUYXJnZXQodGFy
Z2V0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRyYW5z
aXRpb25pbmcgcGFnZSB0YXJnZXQuCi0gICAgICAgIFdJLnRyYW5zaXRpb25QYWdlVGFyZ2V0KHRh
cmdldCk7CisgICAgICAgIHRoaXMuX3RyYW5zaXRpb25QYWdlVGFyZ2V0KHRhcmdldCk7CiAgICAg
fQogCiAgICAgX2NoZWNrQW5kSGFuZGxlUGFnZVRhcmdldFRlcm1pbmF0aW9uKHRhcmdldCkKQEAg
LTE4OCw3ICsyMjcsNyBAQCBXSS5UYXJnZXRNYW5hZ2VyID0gY2xhc3MgVGFyZ2V0TWFuYWdlciBl
eHRlbmRzIFdJLk9iamVjdAogICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9zZWVuUGFnZVRh
cmdldCk7CiAKICAgICAgICAgLy8gVGVybWluYXRpbmcgdGhlIHBhZ2UgdGFyZ2V0LgotICAgICAg
ICBXSS50ZXJtaW5hdGVQYWdlVGFyZ2V0KHRhcmdldCk7CisgICAgICAgIHRoaXMuX3Rlcm1pbmF0
ZVBhZ2VUYXJnZXQodGFyZ2V0KTsKIAogICAgICAgICAvLyBFbnN1cmUgd2UgdHJhbnNpdGlvbiBp
biBhIHJlYXNvbmFibGUgYW1vdW50IG9mIHRpbWUsIG90aGVyd2lzZSBjbG9zZS4KICAgICAgICAg
Y29uc3QgdGltZVRvVHJhbnNpdGlvbiA9IDIwMDA7CkBAIC0yMDIsOSArMjQxLDg4IEBAIFdJLlRh
cmdldE1hbmFnZXIgPSBjbGFzcyBUYXJnZXRNYW5hZ2VyIGV4dGVuZHMgV0kuT2JqZWN0CiAgICAg
ICAgICAgICBXSS5jbG9zZSgpOwogICAgICAgICB9LCB0aW1lVG9UcmFuc2l0aW9uKTsKICAgICB9
CisKKyAgICBfaW5pdGlhbGl6ZUJhY2tlbmRUYXJnZXQodGFyZ2V0KQorICAgIHsKKyAgICAgICAg
Y29uc29sZS5hc3NlcnQoIVdJLm1haW5UYXJnZXQpOworCisgICAgICAgIFdJLmJhY2tlbmRUYXJn
ZXQgPSB0YXJnZXQ7CisKKyAgICAgICAgdGhpcy5fcmVzZXRNYWluRXhlY3V0aW9uQ29udGV4dCgp
OworCisgICAgICAgIFdJLl90YXJnZXRzQXZhaWxhYmxlUHJvbWlzZS5yZXNvbHZlKCk7CisgICAg
fQorCisgICAgX2luaXRpYWxpemVQYWdlVGFyZ2V0KHRhcmdldCkKKyAgICB7CisgICAgICAgIGNv
bnNvbGUuYXNzZXJ0KFdJLnNoYXJlZEFwcC5kZWJ1Z2dhYmxlVHlwZSA9PT0gV0kuRGVidWdnYWJs
ZVR5cGUuV2ViKTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQodGFyZ2V0LnR5cGUgPT09IFdJLlRh
cmdldC5UeXBlLlBhZ2UgfHwgdGFyZ2V0IGluc3RhbmNlb2YgV0kuRGlyZWN0QmFja2VuZFRhcmdl
dCk7CisKKyAgICAgICAgV0kucGFnZVRhcmdldCA9IHRhcmdldDsKKworICAgICAgICB0aGlzLl9y
ZWRpcmVjdEdsb2JhbEFnZW50c1RvQ29ubmVjdGlvbihXSS5wYWdlVGFyZ2V0LmNvbm5lY3Rpb24p
OworCisgICAgICAgIHRoaXMuX3Jlc2V0TWFpbkV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICB9CisK
KyAgICBfdHJhbnNpdGlvblBhZ2VUYXJnZXQodGFyZ2V0KQorICAgIHsKKyAgICAgICAgY29uc29s
ZS5hc3NlcnQoIVdJLnBhZ2VUYXJnZXQpOworICAgICAgICBjb25zb2xlLmFzc2VydChXSS5zaGFy
ZWRBcHAuZGVidWdnYWJsZVR5cGUgPT09IFdJLkRlYnVnZ2FibGVUeXBlLldlYik7CisgICAgICAg
IGNvbnNvbGUuYXNzZXJ0KHRhcmdldC50eXBlID09PSBXSS5UYXJnZXQuVHlwZS5QYWdlKTsKKwor
ICAgICAgICBXSS5wYWdlVGFyZ2V0ID0gdGFyZ2V0OworCisgICAgICAgIHRoaXMuX3JlZGlyZWN0
R2xvYmFsQWdlbnRzVG9Db25uZWN0aW9uKFdJLnBhZ2VUYXJnZXQuY29ubmVjdGlvbik7CisKKyAg
ICAgICAgdGhpcy5fcmVzZXRNYWluRXhlY3V0aW9uQ29udGV4dCgpOworCisgICAgICAgIC8vIEFj
dGlvbnMgdG8gdHJhbnNpdGlvbiB0aGUgcGFnZSB0YXJnZXQuCisgICAgICAgIFdJLm5vdGlmaWNh
dGlvbnMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdJLk5vdGlmaWNhdGlvbi5UcmFuc2l0aW9u
UGFnZVRhcmdldCk7CisgICAgICAgIFdJLmRvbU1hbmFnZXIudHJhbnNpdGlvblBhZ2VUYXJnZXQo
KTsKKyAgICAgICAgV0kubmV0d29ya01hbmFnZXIudHJhbnNpdGlvblBhZ2VUYXJnZXQoKTsKKyAg
ICAgICAgV0kudGltZWxpbmVNYW5hZ2VyLnRyYW5zaXRpb25QYWdlVGFyZ2V0KCk7CisgICAgfQor
CisgICAgX3Rlcm1pbmF0ZVBhZ2VUYXJnZXQodGFyZ2V0KQorICAgIHsKKyAgICAgICAgY29uc29s
ZS5hc3NlcnQoV0kucGFnZVRhcmdldCk7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KFdJLnBhZ2VU
YXJnZXQgPT09IHRhcmdldCk7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KFdJLnNoYXJlZEFwcC5k
ZWJ1Z2dhYmxlVHlwZSA9PT0gV0kuRGVidWdnYWJsZVR5cGUuV2ViKTsKKworICAgICAgICAvLyBS
ZW1vdmUgYW55IFdvcmtlciB0YXJnZXRzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhZ2UuCisgICAg
ICAgIGxldCB3b3JrZXJUYXJnZXRzID0gV0kudGFyZ2V0cy5maWx0ZXIoKHgpID0+IHgudHlwZSA9
PT0gV0kuVGFyZ2V0LlR5cGUuV29ya2VyKTsKKyAgICAgICAgZm9yIChsZXQgd29ya2VyVGFyZ2V0
IG9mIHdvcmtlclRhcmdldHMpCisgICAgICAgICAgICBXSS53b3JrZXJNYW5hZ2VyLndvcmtlclRl
cm1pbmF0ZWQod29ya2VyVGFyZ2V0LmlkZW50aWZpZXIpOworCisgICAgICAgIFdJLnBhZ2VUYXJn
ZXQgPSBudWxsOworCisgICAgICAgIHRoaXMuX3JlZGlyZWN0R2xvYmFsQWdlbnRzVG9Db25uZWN0
aW9uKFdJLmJhY2tlbmRDb25uZWN0aW9uKTsKKyAgICB9CisKKyAgICBfcmVzZXRNYWluRXhlY3V0
aW9uQ29udGV4dCgpCisgICAgeworICAgICAgICBpZiAoV0kubWFpblRhcmdldCBpbnN0YW5jZW9m
IFdJLk11bHRpcGxleGluZ0JhY2tlbmRUYXJnZXQpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgaWYgKFdJLm1haW5UYXJnZXQuZXhlY3V0aW9uQ29udGV4dCkKKyAgICAgICAgICAgIFdJ
LnJ1bnRpbWVNYW5hZ2VyLmFjdGl2ZUV4ZWN1dGlvbkNvbnRleHQgPSBXSS5tYWluVGFyZ2V0LmV4
ZWN1dGlvbkNvbnRleHQ7CisgICAgfQorCisgICAgX3JlZGlyZWN0R2xvYmFsQWdlbnRzVG9Db25u
ZWN0aW9uKGNvbm5lY3Rpb24pCisgICAgeworICAgICAgICAvLyBUaGlzIG1ha2VzIGdsb2JhbCB3
aW5kb3cuRm9vQWdlbnQgZGlzcGF0Y2ggdG8gdGhlIGFjdGl2ZSBwYWdlIHRhcmdldC4KKyAgICAg
ICAgZm9yIChsZXQgW2RvbWFpbiwgYWdlbnRdIG9mIE9iamVjdC5lbnRyaWVzKEluc3BlY3RvckJh
Y2tlbmQuX2FnZW50cykpIHsKKyAgICAgICAgICAgIGlmIChkb21haW4gIT09ICJUYXJnZXQiKQor
ICAgICAgICAgICAgICAgIGFnZW50LmNvbm5lY3Rpb24gPSBjb25uZWN0aW9uOworICAgICAgICB9
CisgICAgfTsKIH07CiAKIFdJLlRhcmdldE1hbmFnZXIuRXZlbnQgPSB7CiAgICAgVGFyZ2V0QWRk
ZWQ6IFN5bWJvbCgidGFyZ2V0LW1hbmFnZXItdGFyZ2V0LWFkZGVkIiksCiAgICAgVGFyZ2V0UmVt
b3ZlZDogU3ltYm9sKCJ0YXJnZXQtbWFuYWdlci10YXJnZXQtcmVtb3ZlZCIpLAorICAgIFRhcmdl
dENyZWF0ZWQ6IFN5bWJvbCgidGFyZ2V0LW1hbmFnZXItdGFyZ2V0LWNyZWF0ZWQiKSwKKyAgICBE
aWRDb21taXRQcm92aXNpb25hbFRhcmdldDogU3ltYm9sKCJ0YXJnZXQtbWFuYWdlci1wcm92aXNp
b25hbC10YXJnZXQtY29tbWl0dGVkIiksCisgICAgVGFyZ2V0RGVzdHJveWVkOiBTeW1ib2woInRh
cmdldC1tYW5hZ2VyLXRhcmdldC1kZXRyb3llZCIpLAogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL0Nvbm5lY3Rpb24uanMgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Qcm90b2NvbC9Db25uZWN0aW9uLmpzCmlu
ZGV4IGIyNzM3ODdmM2IzNTk5NTcxZDBjMGU5ODIwMzExZWQ1NDkzNmIzZjYuLjVlNWI0YzQ4NWM5
ZmEwM2MxNDJmNTZmYWIzY2UzODg1ZjY5YjQ4MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL0Nvbm5lY3Rpb24uanMKKysrIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wvQ29ubmVjdGlvbi5qcwpAQCAt
MzA4LDggKzMwOCwxMiBAQCBJbnNwZWN0b3JCYWNrZW5kLldvcmtlckNvbm5lY3Rpb24gPSBjbGFz
cyBJbnNwZWN0b3JCYWNrZW5kV29ya2VyQ29ubmVjdGlvbiBleHRlbgogCiAgICAgc2VuZE1lc3Nh
Z2VUb0JhY2tlbmQobWVzc2FnZSkKICAgICB7Ci0gICAgICAgIC8vIElnbm9yZSBlcnJvcnMgaWYg
YSB3b3JrZXIgd2VudCBhd2F5IHF1aWNrbHkuCi0gICAgICAgIFdvcmtlckFnZW50LnNlbmRNZXNz
YWdlVG9Xb3JrZXIodGhpcy5fd29ya2VySWQsIG1lc3NhZ2UpLmNhdGNoKGZ1bmN0aW9uKCl7fSk7
CisgICAgICAgIFdvcmtlckFnZW50LnNlbmRNZXNzYWdlVG9Xb3JrZXIodGhpcy5fd29ya2VySWQs
IG1lc3NhZ2UpLmNhdGNoKChlcnJvcikgPT4geworICAgICAgICAgICAgLy8gSWdub3JlIGVycm9y
cyBpZiBhIHdvcmtlciB3ZW50IGF3YXkgcXVpY2tseS4KKyAgICAgICAgICAgIGlmICh0aGlzLnRh
cmdldC5pc0Rlc3Ryb3llZCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBX
SS5yZXBvcnRJbnRlcm5hbEVycm9yKGVycm9yKTsKKyAgICAgICAgfSk7CiAgICAgfQogfTsKIApA
QCAtMzMyLDcgKzMzNiwxMyBAQCBJbnNwZWN0b3JCYWNrZW5kLlRhcmdldENvbm5lY3Rpb24gPSBj
bGFzcyBJbnNwZWN0b3JCYWNrZW5kVGFyZ2V0Q29ubmVjdGlvbiBleHRlbgogCiAgICAgc2VuZE1l
c3NhZ2VUb0JhY2tlbmQobWVzc2FnZSkKICAgICB7Ci0gICAgICAgIFRhcmdldEFnZW50LnNlbmRN
ZXNzYWdlVG9UYXJnZXQodGhpcy5fdGFyZ2V0SWQsIG1lc3NhZ2UpOworICAgICAgICBUYXJnZXRB
Z2VudC5zZW5kTWVzc2FnZVRvVGFyZ2V0KHRoaXMuX3RhcmdldElkLCBtZXNzYWdlKS5jYXRjaCgo
ZXJyb3IpID0+IHsKKyAgICAgICAgICAgIC8vIENvbW1hbmQgbWF5IGJlIHNlbnQgYWZ0ZXIgdGFy
Z2V0IGlzIGFscmVhZHkgZGVzdHJveWVkIG9uIGJhY2tlbmQsCisgICAgICAgICAgICAvLyBpZ25v
cmUgc3VjaCBlcnJvcnMuCisgICAgICAgICAgICBpZiAodGhpcy50YXJnZXQuaXNEZXN0cm95ZWQp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgV0kucmVwb3J0SW50ZXJuYWxF
cnJvcihlcnJvcik7CisgICAgICAgIH0pOwogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL1RhcmdldC5qcyBiL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL1RhcmdldC5qcwppbmRleCAy
MDMzNDEwYTZiNTMzNThlYjdjYTkyNTEzMTc1ZDMxMmFhZDFhNDQ4Li4xMjZhZmE5ZDJjOThkYzVm
MTZhMjY3YTY1MjIyYmYyNDRlZmMxNWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Qcm90b2NvbC9UYXJnZXQuanMKKysrIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wvVGFyZ2V0LmpzCkBAIC0yMDAsNiArMjAwLDEw
IEBAIFdJLlRhcmdldCA9IGNsYXNzIFRhcmdldCBleHRlbmRzIFdJLk9iamVjdAogICAgICAgICB0
aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXSS5UYXJnZXQuRXZlbnQuU2NyaXB0QWRkZWQs
IHtzY3JpcHR9KTsKICAgICB9CiAKKyAgICBkZXN0cm95KCkgeyB0aGlzLl9pc0Rlc3Ryb3llZCA9
IHRydWU7IH0KKworICAgIGdldCBpc0Rlc3Ryb3llZCgpIHsgcmV0dXJuIHRoaXMuX2lzRGVzdHJv
eWVkOyB9CisKICAgICAvLyBQcml2YXRlCiAKICAgICBfc3VwcG9ydGVkRG9tYWluc0ZvclRhcmdl
dFR5cGUodHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1Byb3RvY29sL1RhcmdldE9ic2VydmVyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvUHJvdG9jb2wvVGFyZ2V0T2JzZXJ2ZXIuanMKaW5kZXggMzFiNmZjZmMxODY5
ZWQxMzg3ODFlMTA3MWRkMTliNTQ3YzA5Y2JmNC4uMTJhYThiNDg2MzI2MDY3NGVjNzZmZTgyOGMx
NzA5NTIyOTAxZTQ3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvUHJvdG9jb2wvVGFyZ2V0T2JzZXJ2ZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wvVGFyZ2V0T2JzZXJ2ZXIuanMKQEAgLTMyLDYgKzMy
LDExIEBAIFdJLlRhcmdldE9ic2VydmVyID0gY2xhc3MgVGFyZ2V0T2JzZXJ2ZXIKICAgICAgICAg
V0kudGFyZ2V0TWFuYWdlci50YXJnZXRDcmVhdGVkKHRhcmdldEluZm8pOwogICAgIH0KIAorICAg
IGRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0KHRhcmdldEluZm8pCisgICAgeworICAgICAgICBX
SS50YXJnZXRNYW5hZ2VyLmRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0KHRhcmdldEluZm8pOwor
ICAgIH0KKwogICAgIHRhcmdldERlc3Ryb3llZCh0YXJnZXRJZCkKICAgICB7CiAgICAgICAgIFdJ
LnRhcmdldE1hbmFnZXIudGFyZ2V0RGVzdHJveWVkKHRhcmdldElkKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Rlc3QvVGVzdC5qcyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Rlc3QvVGVzdC5qcwppbmRleCA3NTcwOGEwMGM5
NTgxNzI3ZWUwZjRjMzg1MzQzYTRmMjQ0YjIzZDM1Li5lNWM4ZWExYjY4ZTYwNDk1OWQ4ZWY3N2U4
ZjhmOTNlNjU5NmVjODE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9UZXN0L1Rlc3QuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvVGVzdC9UZXN0LmpzCkBAIC04Niw1MiArODYsNiBAQCBXSS5sb2FkZWQgPSBmdW5jdGlv
bigpCiAgICAgfSk7CiB9OwogCi1XSS5pbml0aWFsaXplQmFja2VuZFRhcmdldCA9IGZ1bmN0aW9u
KHRhcmdldCkKLXsKLSAgICBXSS5iYWNrZW5kVGFyZ2V0ID0gdGFyZ2V0OwotCi0gICAgV0kucmVz
ZXRNYWluRXhlY3V0aW9uQ29udGV4dCgpOwotCi0gICAgV0kuX3RhcmdldHNBdmFpbGFibGVQcm9t
aXNlLnJlc29sdmUoKTsKLX07Ci0KLVdJLmluaXRpYWxpemVQYWdlVGFyZ2V0ID0gZnVuY3Rpb24o
dGFyZ2V0KQotewotICAgIFdJLnBhZ2VUYXJnZXQgPSB0YXJnZXQ7Ci0KLSAgICBXSS5yZWRpcmVj
dEdsb2JhbEFnZW50c1RvQ29ubmVjdGlvbihXSS5wYWdlVGFyZ2V0LmNvbm5lY3Rpb24pOwotCi0g
ICAgV0kucmVzZXRNYWluRXhlY3V0aW9uQ29udGV4dCgpOwotfTsKLQotV0kudHJhbnNpdGlvblBh
Z2VUYXJnZXQgPSBmdW5jdGlvbih0YXJnZXQpCi17Ci0gICAgY29uc29sZS5lcnJvcigiV0kudHJh
bnNpdGlvblBhZ2VUYXJnZXQgc2hvdWxkIG5vdCBiZSByZWFjaGVkIGluIHRlc3RzLiIpOwotfTsK
LQotV0kudGVybWluYXRlUGFnZVRhcmdldCA9IGZ1bmN0aW9uKHRhcmdldCkKLXsKLSAgICBjb25z
b2xlLmVycm9yKCJXSS50ZXJtaW5hdGVQYWdlVGFyZ2V0IHNob3VsZCBub3QgYmUgcmVhY2hlZCBp
biB0ZXN0cy4iKTsKLX07Ci0KLVdJLnJlc2V0TWFpbkV4ZWN1dGlvbkNvbnRleHQgPSBmdW5jdGlv
bigpCi17Ci0gICAgaWYgKFdJLm1haW5UYXJnZXQgaW5zdGFuY2VvZiBXSS5NdWx0aXBsZXhpbmdC
YWNrZW5kVGFyZ2V0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoV0kubWFpblRhcmdldC5l
eGVjdXRpb25Db250ZXh0KQotICAgICAgICBXSS5ydW50aW1lTWFuYWdlci5hY3RpdmVFeGVjdXRp
b25Db250ZXh0ID0gV0kubWFpblRhcmdldC5leGVjdXRpb25Db250ZXh0OwotfTsKLQotV0kucmVk
aXJlY3RHbG9iYWxBZ2VudHNUb0Nvbm5lY3Rpb24gPSBmdW5jdGlvbihjb25uZWN0aW9uKQotewot
ICAgIC8vIFRoaXMgbWFrZXMgZ2xvYmFsIHdpbmRvdy5Gb29BZ2VudCBkaXNwYXRjaCB0byB0aGUg
YWN0aXZlIHBhZ2UgdGFyZ2V0LgotICAgIGZvciAobGV0IFtkb21haW4sIGFnZW50XSBvZiBPYmpl
Y3QuZW50cmllcyhJbnNwZWN0b3JCYWNrZW5kLl9hZ2VudHMpKSB7Ci0gICAgICAgIGlmIChkb21h
aW4gIT09ICJUYXJnZXQiKQotICAgICAgICAgICAgYWdlbnQuY29ubmVjdGlvbiA9IGNvbm5lY3Rp
b247Ci0gICAgfQotfTsKLQogV0kuY29udGVudExvYWRlZCA9IGZ1bmN0aW9uKCkKIHsKICAgICAv
LyBUaGluZ3MgdGhhdCB3b3VsZCBub3JtYWxseSBnZXQgY2FsbGVkIGJ5IHRoZSBVSSwgdGhhdCB3
ZSBzdGlsbCB3YW50IHRvIGRvIGluIHRlc3RzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvUXVpY2tDb25zb2xlLmpzIGIvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvUXVpY2tDb25zb2xlLmpzCmluZGV4IDZjZjZk
Mjc1NWRiZWZiNWE4NjNmYjU5M2U1NDA1OGVkNDA5ZjcyMjkuLjUxODg3NWEzMjQ1YzVjYzY2OTQ2
N2VjNGJjZDA3NGZmZjYwYWUzNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL1ZpZXdzL1F1aWNrQ29uc29sZS5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9RdWlja0NvbnNvbGUuanMKQEAgLTY5LDcgKzY5LDcg
QEAgV0kuUXVpY2tDb25zb2xlID0gY2xhc3MgUXVpY2tDb25zb2xlIGV4dGVuZHMgV0kuVmlldwog
ICAgICAgICB0aGlzLl9leGVjdXRpb25Db250ZXh0U2VsZWN0b3JEaXZpZGVyID0gbmV3IFdJLkRp
dmlkZXJOYXZpZ2F0aW9uSXRlbTsKICAgICAgICAgdGhpcy5fbmF2aWdhdGlvbkJhci5hZGROYXZp
Z2F0aW9uSXRlbSh0aGlzLl9leGVjdXRpb25Db250ZXh0U2VsZWN0b3JEaXZpZGVyKTsKIAotICAg
ICAgICB0aGlzLmluaXRpYWxpemVNYWluRXhlY3V0aW9uQ29udGV4dFBhdGhDb21wb25lbnQoKTsK
KyAgICAgICAgdGhpcy5faW5pdGlhbGl6ZU1haW5FeGVjdXRpb25Db250ZXh0UGF0aENvbXBvbmVu
dCgpOwogCiAgICAgICAgIFdJLnNldHRpbmdzLmNvbnNvbGVTYXZlZFJlc3VsdEFsaWFzLmFkZEV2
ZW50TGlzdGVuZXIoV0kuU2V0dGluZy5FdmVudC5DaGFuZ2VkLCB0aGlzLl91cGRhdGVBdXRvbWF0
aWNFeGVjdXRpb25Db250ZXh0UGF0aENvbXBvbmVudFRvb2x0aXAsIHRoaXMpOwogCkBAIC04Miw2
ICs4Miw3IEBAIFdJLlF1aWNrQ29uc29sZSA9IGNsYXNzIFF1aWNrQ29uc29sZSBleHRlbmRzIFdJ
LlZpZXcKICAgICAgICAgV0kuZGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV0kuRGVi
dWdnZXJNYW5hZ2VyLkV2ZW50LkFjdGl2ZUNhbGxGcmFtZURpZENoYW5nZSwgdGhpcy5fZGVidWdn
ZXJBY3RpdmVDYWxsRnJhbWVEaWRDaGFuZ2UsIHRoaXMpOwogCiAgICAgICAgIFdJLnJ1bnRpbWVN
YW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV0kuUnVudGltZU1hbmFnZXIuRXZlbnQuQWN0aXZlRXhl
Y3V0aW9uQ29udGV4dENoYW5nZWQsIHRoaXMuX2FjdGl2ZUV4ZWN1dGlvbkNvbnRleHRDaGFuZ2Vk
LCB0aGlzKTsKKyAgICAgICAgV0kubm90aWZpY2F0aW9ucy5hZGRFdmVudExpc3RlbmVyKFdJLk5v
dGlmaWNhdGlvbi5UcmFuc2l0aW9uUGFnZVRhcmdldCwgdGhpcy5fcGFnZVRhcmdldFRyYW5zaXNp
b25lZCwgdGhpcyk7CiAKICAgICAgICAgV0kudGFyZ2V0TWFuYWdlci5hZGRFdmVudExpc3RlbmVy
KFdJLlRhcmdldE1hbmFnZXIuRXZlbnQuVGFyZ2V0QWRkZWQsIHRoaXMuX3RhcmdldEFkZGVkLCB0
aGlzKTsKICAgICAgICAgV0kudGFyZ2V0TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdJLlRhcmdl
dE1hbmFnZXIuRXZlbnQuVGFyZ2V0UmVtb3ZlZCwgdGhpcy5fdGFyZ2V0UmVtb3ZlZCwgdGhpcyk7
CkBAIC0xMTEsNyArMTEyLDE0IEBAIFdJLlF1aWNrQ29uc29sZSA9IGNsYXNzIFF1aWNrQ29uc29s
ZSBleHRlbmRzIFdJLlZpZXcKICAgICAgICAgc3VwZXIuY2xvc2VkKCk7CiAgICAgfQogCi0gICAg
aW5pdGlhbGl6ZU1haW5FeGVjdXRpb25Db250ZXh0UGF0aENvbXBvbmVudCgpCisgICAgX3BhZ2VU
YXJnZXRUcmFuc2lzaW9uZWQoKQorICAgIHsKKyAgICAgICAgaWYgKFdJLm1haW5UYXJnZXQgaW5z
dGFuY2VvZiBXSS5NdWx0aXBsZXhpbmdCYWNrZW5kVGFyZ2V0KQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB0aGlzLl9pbml0aWFsaXplTWFpbkV4ZWN1dGlvbkNvbnRleHRQYXRoQ29tcG9u
ZW50KCk7CisgICAgfQorCisgICAgX2luaXRpYWxpemVNYWluRXhlY3V0aW9uQ29udGV4dFBhdGhD
b21wb25lbnQoKQogICAgIHsKICAgICAgICAgaWYgKCFXSS5tYWluVGFyZ2V0IHx8ICFXSS5tYWlu
VGFyZ2V0LmV4ZWN1dGlvbkNvbnRleHQpCiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApp
bmRleCBkN2Q4OTkxZWQ2Y2VlOTg3ZjMyYzU4NGIwZGUzZmE4MGNjMGY5MDkwLi5iOWZiMzU0YzYx
ZDFhMzA5NjZiY2U1MjYxZmJjZDJkMzcyNjliY2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKQEAgLTI4OSw3ICsy
ODksNiBAQCBVSVByb2Nlc3MvV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmNwcAogVUlQ
cm9jZXNzL1dlYlBhZ2VHcm91cC5jcHAKIFVJUHJvY2Vzcy9XZWJQYWdlSW5qZWN0ZWRCdW5kbGVD
bGllbnQuY3BwCiBVSVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuY3BwCi1VSVBy
b2Nlc3MvV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50LmNwcAogVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHAKIFVJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkuY3BwCiBVSVByb2Nlc3MvV2Vi
UHJlZmVyZW5jZXMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
QVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5jcHAKaW5kZXggMDBkMmQxYTI0YzIxYzI5ZTI5
NzU4ZmIyZmZiYjVhYWNmNTdmM2JiZi4uY2UwYzJjMDFjZGIxMzg3OWMyOWVjYWE3MmQ1Y2Y2N2Fl
NWU0MzhjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1
dGhlbnRpY2F0aW9uUGFuZWwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9B
UElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmNwcApAQCAtMzIsMTIgKzMyLDEyIEBACiAKIG5hbWVz
cGFjZSBBUEkgewogCi1SZWY8V2ViQXV0aGVudGljYXRpb25QYW5lbD4gV2ViQXV0aGVudGljYXRp
b25QYW5lbDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgcnBJZCkKK1JlZjxXZWJBdXRoZW50aWNhdGlv
blBhbmVsPiBXZWJBdXRoZW50aWNhdGlvblBhbmVsOjpjcmVhdGUoY29uc3QgV1RGOjpTdHJpbmcm
IHJwSWQpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViQXV0aGVudGljYXRpb25QYW5l
bChycElkKSk7CiB9CiAKLVdlYkF1dGhlbnRpY2F0aW9uUGFuZWw6OldlYkF1dGhlbnRpY2F0aW9u
UGFuZWwoY29uc3QgU3RyaW5nJiBycElkKQorV2ViQXV0aGVudGljYXRpb25QYW5lbDo6V2ViQXV0
aGVudGljYXRpb25QYW5lbChjb25zdCBXVEY6OlN0cmluZyYgcnBJZCkKICAgICA6IG1fcnBJZChy
cElkKQogICAgICwgbV9jbGllbnQoV1RGOjptYWtlVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0aW9u
UGFuZWxDbGllbnQ+KCkpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuaAppbmRleCA3NTA0ODg2YzA0YzAzM2FhMjZk
MjVkOGYxMzUwM2Q1ZjlmOTc1ODJmLi5jZDZlMjA3MTJhMjAxZWYyODg1Y2QxNzVlZTI3Mzg1N2Rm
ZjU3NDYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0
aGVudGljYXRpb25QYW5lbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElX
ZWJBdXRoZW50aWNhdGlvblBhbmVsLmgKQEAgLTM4LDcgKzM4LDcgQEAgY2xhc3MgV2ViQXV0aGVu
dGljYXRpb25QYW5lbENsaWVudDsKIAogY2xhc3MgV2ViQXV0aGVudGljYXRpb25QYW5lbCBmaW5h
bCA6IHB1YmxpYyBPYmplY3RJbXBsPE9iamVjdDo6VHlwZTo6V2ViQXV0aGVudGljYXRpb25QYW5l
bD4sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxXZWJBdXRoZW50aWNhdGlvblBhbmVsPiB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxXZWJBdXRoZW50aWNhdGlvblBhbmVsPiBjcmVhdGUoY29uc3Qg
U3RyaW5nJiBycElkKTsKKyAgICBzdGF0aWMgUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWw+IGNy
ZWF0ZShjb25zdCBXVEY6OlN0cmluZyYgcnBJZCk7CiAgICAgfldlYkF1dGhlbnRpY2F0aW9uUGFu
ZWwoKTsKIAogICAgIFdURjo6U3RyaW5nIHJwSWQoKSBjb25zdCB7IHJldHVybiBtX3JwSWQ7IH0K
QEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q2xpZW50KFVuaXF1ZVJlZjxX
ZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50PiYmKTsKIAogcHJpdmF0ZToKLSAgICBXZWJBdXRo
ZW50aWNhdGlvblBhbmVsKGNvbnN0IFN0cmluZyYgcnBJZCk7CisgICAgV2ViQXV0aGVudGljYXRp
b25QYW5lbChjb25zdCBXVEY6OlN0cmluZyYgcnBJZCk7CiAKICAgICBXVEY6OlN0cmluZyBtX3Jw
SWQ7CiAgICAgVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+IG1fY2xpZW50
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yVGFyZ2V0UHJv
eHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yVGFyZ2V0UHJveHkuY3Bw
CmluZGV4IDYxYjhmMzZlZmE3NTFmMWM4OGQ5MmJhMWFkY2QxNWVjYTYxNDU4MjIuLjFlYzk5N2Jh
ODIzOTYwY2I2NGIyMmE0YTM2ZGE5ZjQzZjViMzBhM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0luc3BlY3RvclRhcmdldFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3JUYXJnZXRQcm94eS5jcHAKQEAgLTI2LDcgKzI2LDkgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JUYXJnZXRQcm94eS5oIgogCisj
aW5jbHVkZSAiUHJvdmlzaW9uYWxQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJGcmFtZVByb3h5
LmgiCisjaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldC5oIgogI2luY2x1ZGUgIldlYlBh
Z2VNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlBy
b2Nlc3NQcm94eS5oIgpAQCAtMzUsOSArMzcsMTYgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKLVJlZjxJbnNwZWN0b3JUYXJnZXRQcm94eT4gSW5z
cGVjdG9yVGFyZ2V0UHJveHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQorc3RkOjp1
bmlxdWVfcHRyPEluc3BlY3RvclRhcmdldFByb3h5PiBJbnNwZWN0b3JUYXJnZXRQcm94eTo6Y3Jl
YXRlKFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9y
OjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
SW5zcGVjdG9yVGFyZ2V0UHJveHkocGFnZSwgdGFyZ2V0SWQsIHR5cGUpKTsKKyAgICByZXR1cm4g
bWFrZVVuaXF1ZTxJbnNwZWN0b3JUYXJnZXRQcm94eT4ocGFnZSwgdGFyZ2V0SWQsIHR5cGUpOwor
fQorCitzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJveHk+IEluc3BlY3RvclRhcmdl
dFByb3h5OjpjcmVhdGUoUHJvdmlzaW9uYWxQYWdlUHJveHkmIHByb3Zpc2lvbmFsUGFnZSwgY29u
c3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUp
Cit7CisgICAgYXV0byB0YXJnZXQgPSBJbnNwZWN0b3JUYXJnZXRQcm94eTo6Y3JlYXRlKHByb3Zp
c2lvbmFsUGFnZS5wYWdlKCksIHRhcmdldElkLCB0eXBlKTsKKyAgICB0YXJnZXQtPm1fcHJvdmlz
aW9uYWxQYWdlID0gbWFrZVdlYWtQdHIocHJvdmlzaW9uYWxQYWdlKTsKKyAgICByZXR1cm4gdGFy
Z2V0OwogfQogCiBJbnNwZWN0b3JUYXJnZXRQcm94eTo6SW5zcGVjdG9yVGFyZ2V0UHJveHkoV2Vi
UGFnZVByb3h5JiBwYWdlLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3Bl
Y3RvclRhcmdldFR5cGUgdHlwZSkKQEAgLTQ3LDIyICs1Niw1NiBAQCBJbnNwZWN0b3JUYXJnZXRQ
cm94eTo6SW5zcGVjdG9yVGFyZ2V0UHJveHkoV2ViUGFnZVByb3h5JiBwYWdlLCBjb25zdCBTdHJp
bmcmIHRhcgogewogfQogCi12b2lkIEluc3BlY3RvclRhcmdldFByb3h5Ojpjb25uZWN0KEluc3Bl
Y3Rvcjo6RnJvbnRlbmRDaGFubmVsJiBjaGFubmVsKQordm9pZCBJbnNwZWN0b3JUYXJnZXRQcm94
eTo6Y29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUgY29u
bmVjdGlvblR5cGUpCiB7CisgICAgaWYgKG1fcHJvdmlzaW9uYWxQYWdlKSB7CisgICAgICAgIG1f
cHJvdmlzaW9uYWxQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q29ubmVj
dEluc3BlY3RvcihpZGVudGlmaWVyKCksIGNvbm5lY3Rpb25UeXBlKSwgbV9wcm92aXNpb25hbFBh
Z2UtPndlYlBhZ2VJRCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChtX3Bh
Z2UuaGFzUnVubmluZ1Byb2Nlc3MoKSkKLSAgICAgICAgbV9wYWdlLnByb2Nlc3MoKS5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpDb25uZWN0SW5zcGVjdG9yKGlkZW50aWZpZXIoKSwgY2hhbm5lbC5j
b25uZWN0aW9uVHlwZSgpKSwgbV9wYWdlLndlYlBhZ2VJRCgpKTsKKyAgICAgICAgbV9wYWdlLnBy
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDb25uZWN0SW5zcGVjdG9yKGlkZW50aWZp
ZXIoKSwgY29ubmVjdGlvblR5cGUpLCBtX3BhZ2Uud2ViUGFnZUlEKCkpOwogfQogCi12b2lkIElu
c3BlY3RvclRhcmdldFByb3h5OjpkaXNjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVs
JikKK3ZvaWQgSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmRpc2Nvbm5lY3QoKQogeworICAgIGlmICht
X3Byb3Zpc2lvbmFsUGFnZSkgeworICAgICAgICBtX3Byb3Zpc2lvbmFsUGFnZS0+cHJvY2Vzcygp
LnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpc2Nvbm5lY3RJbnNwZWN0b3IoaWRlbnRpZmllcigp
KSwgbV9wcm92aXNpb25hbFBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKwogICAgIGlmIChtX3BhZ2UuaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgbV9wYWdl
LnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaXNjb25uZWN0SW5zcGVjdG9yKGlk
ZW50aWZpZXIoKSksIG1fcGFnZS53ZWJQYWdlSUQoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yVGFy
Z2V0UHJveHk6OnNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkKIHsKKyAgICBpZiAobV9wcm92aXNpb25hbFBhZ2UpIHsKKyAgICAgICAgbV9wcm92aXNpb25h
bFBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZW5kTWVzc2FnZVRvVGFy
Z2V0QmFja2VuZChpZGVudGlmaWVyKCksIG1lc3NhZ2UpLCBtX3Byb3Zpc2lvbmFsUGFnZS0+d2Vi
UGFnZUlEKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKG1fcGFnZS5oYXNS
dW5uaW5nUHJvY2VzcygpKQogICAgICAgICBtX3BhZ2UucHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OlNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGlkZW50aWZpZXIoKSwgbWVzc2Fn
ZSksIG1fcGFnZS53ZWJQYWdlSUQoKSk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yVGFyZ2V0UHJveHk6
OmRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0KCkKK3sKKyAgICBBU1NFUlQoaXNQcm92aXNpb25h
bCgpKTsKKyAgICBtX3Byb3Zpc2lvbmFsUGFnZSA9IG51bGxwdHI7Cit9CisKK2Jvb2wgSW5zcGVj
dG9yVGFyZ2V0UHJveHk6OmlzUHJvdmlzaW9uYWwoKSBjb25zdAoreworICAgIHJldHVybiAhIW1f
cHJvdmlzaW9uYWxQYWdlOworfQorCitTdHJpbmcgSW5zcGVjdG9yVGFyZ2V0UHJveHk6OnByZXZp
b3VzVGFyZ2V0SUQoKSBjb25zdAoreworICAgIGlmIChtX3R5cGUgIT0gSW5zcGVjdG9yOjpJbnNw
ZWN0b3JUYXJnZXRUeXBlOjpQYWdlIHx8ICFpc1Byb3Zpc2lvbmFsKCkpCisgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKKworICAgIHJldHVybiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojp0b1Rhcmdl
dElEKG1fcGFnZS53ZWJQYWdlSUQoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yVGFyZ2V0UHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3RvclRhcmdldFByb3h5LmgKaW5kZXggZDM4
MmIwMjY1MDljODM5NTE5OWFiZGQ0OTVhZjZhMmE1MWFmOTI3Yy4uNDNmNjhmYjAwNTljNTVmMmY3
ZDNhOGEyZTNmMTFhZDExODMzYWM3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yVGFyZ2V0UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3JUYXJnZXRQcm94eS5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JUYXJnZXQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAt
MzUsMjUgKzM2LDMxIEBAIGNsYXNzIFdlYlBhZ2VQcm94eTsKIC8vIE5PVEU6IFRoaXMgVUlQcm9j
ZXNzIHNpZGUgSW5zcGVjdG9yVGFyZ2V0IGRvZXNuJ3QgY2FyZSBhYm91dCB0aGUgZnJvbnRlbmQg
Y2hhbm5lbCwgc2luY2UKIC8vIGFueSB0YXJnZXQgLT4gZnJvbnRlbmQgbWVzc2FnZXMgd2lsbCBi
ZSByb3V0ZWQgdG8gdGhlIFdlYlBhZ2VQcm94eSB3aXRoIGEgdGFyZ2V0SWQuCiAKLWNsYXNzIElu
c3BlY3RvclRhcmdldFByb3h5IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFy
Z2V0LCBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JUYXJnZXRQcm94eT4geworY2xhc3MgSW5z
cGVjdG9yVGFyZ2V0UHJveHkgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJn
ZXQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEluc3BlY3RvclRhcmdldFByb3h5KTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEluc3Bl
Y3RvclRhcmdldFByb3h5PiBjcmVhdGUoV2ViUGFnZVByb3h5JiwgY29uc3QgU3RyaW5nJiB0YXJn
ZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlKTsKKyAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPEluc3BlY3RvclRhcmdldFByb3h5PiBjcmVhdGUoV2ViUGFnZVByb3h5JiwgY29u
c3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlKTsKKyAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvclRhcmdldFByb3h5PiBjcmVhdGUoUHJv
dmlzaW9uYWxQYWdlUHJveHkmLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Oklu
c3BlY3RvclRhcmdldFR5cGUpOwogICAgIEluc3BlY3RvclRhcmdldFByb3h5KFdlYlBhZ2VQcm94
eSYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlw
ZSk7CiAgICAgfkluc3BlY3RvclRhcmdldFByb3h5KCkgPSBkZWZhdWx0OwogCiAgICAgSW5zcGVj
dG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3R5
cGU7IH0KICAgICBTdHJpbmcgaWRlbnRpZmllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faWRl
bnRpZmllcjsgfQogCi0gICAgdm9pZCBjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVs
Jik7Ci0gICAgdm9pZCBkaXNjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJik7Ci0g
ICAgdm9pZCBzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmKTsKKyAgICB2
b2lkIGRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0KCk7CisgICAgYm9vbCBpc1Byb3Zpc2lvbmFs
KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHByZXZpb3VzVGFyZ2V0SUQoKSBjb25zdCBv
dmVycmlkZTsKKworICAgIHZvaWQgY29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6
Q29ubmVjdGlvblR5cGUpIG92ZXJyaWRlOworICAgIHZvaWQgZGlzY29ubmVjdCgpIG92ZXJyaWRl
OworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoY29uc3QgU3RyaW5nJikgb3Zl
cnJpZGU7CiAKIHByaXZhdGU6CiAgICAgV2ViUGFnZVByb3h5JiBtX3BhZ2U7CiAgICAgU3RyaW5n
IG1faWRlbnRpZmllcjsKICAgICBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUgbV90eXBl
OworICAgIFdlYWtQdHI8UHJvdmlzaW9uYWxQYWdlUHJveHk+IG1fcHJvdmlzaW9uYWxQYWdlOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Qcm92aXNpb25hbFBhZ2VQcm94eS5jcHAKaW5kZXggZTk4ZWMwZWE0ODA5NDgwYjNhN2U0Nzg5
NjUxM2M0ODBjNDhjYjc3OC4uNGM2ZGRjMTI3ZWZjZWFhYzM3ZTYzYTVmMmQ2MDdmNDVmYTdhYzdm
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJv
eHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5
LmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIldlYkVycm9ycy5oIgogI2luY2x1ZGUg
IldlYk5hdmlnYXRpb25EYXRhU3RvcmUuaCIKICNpbmNsdWRlICJXZWJOYXZpZ2F0aW9uU3RhdGUu
aCIKKyNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIldl
YlBhZ2VNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldl
YlBhZ2VQcm94eU1lc3NhZ2VzLmgiCkBAIC04NCwxMSArODUsMTUgQEAgUHJvdmlzaW9uYWxQYWdl
UHJveHk6OlByb3Zpc2lvbmFsUGFnZVByb3h5KFdlYlBhZ2VQcm94eSYgcGFnZSwgUmVmPFdlYlBy
b2Nlc3NQcm8KICAgICB9CiAKICAgICBpbml0aWFsaXplV2ViUGFnZSgpOworCisgICAgbV9wYWdl
Lmluc3BlY3RvckNvbnRyb2xsZXIoKS5kaWRDcmVhdGVQcm92aXNpb25hbFBhZ2UoKnRoaXMpOwog
fQogCiBQcm92aXNpb25hbFBhZ2VQcm94eTo6flByb3Zpc2lvbmFsUGFnZVByb3h5KCkKIHsKICAg
ICBpZiAoIW1fd2FzQ29tbWl0dGVkKSB7CisgICAgICAgIG1fcGFnZS5pbnNwZWN0b3JDb250cm9s
bGVyKCkud2lsbERlc3Ryb3lQcm92aXNpb25hbFBhZ2UoKnRoaXMpOworCiAgICAgICAgIGlmICgm
bV9wcm9jZXNzLT53ZWJzaXRlRGF0YVN0b3JlKCkgIT0gJm1fcGFnZS53ZWJzaXRlRGF0YVN0b3Jl
KCkpCiAgICAgICAgICAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkucGFnZUVuZFVzaW5nV2Vi
c2l0ZURhdGFTdG9yZShtX3BhZ2UuaWRlbnRpZmllcigpLCBtX3Byb2Nlc3MtPndlYnNpdGVEYXRh
U3RvcmUoKSk7CiAKQEAgLTM4Niw2ICszOTEsOSBAQCB2b2lkIFByb3Zpc2lvbmFsUGFnZVByb3h5
OjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RAog
ICAgICAgICB8fCBkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6RGlkU3RhcnRMb2FkRm9yUXVpY2tMb29rRG9jdW1lbnRJbk1haW5GcmFtZTo6bmFtZSgpCiAg
ICAgICAgIHx8IGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpEaWRGaW5pc2hMb2FkRm9yUXVpY2tMb29rRG9jdW1lbnRJbk1haW5GcmFtZTo6bmFtZSgpCiAj
ZW5kaWYKKyAgICAgICAgfHwgZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OkNyZWF0ZUluc3BlY3RvclRhcmdldDo6bmFtZSgpCisgICAgICAgIHx8IGRlY29k
ZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEZXN0cm95SW5zcGVj
dG9yVGFyZ2V0OjpuYW1lKCkKKyAgICAgICAgfHwgZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNlbmRNZXNzYWdlVG9JbnNwZWN0b3JGcm9udGVuZDo6bmFt
ZSgpCiAgICAgICAgICkKICAgICB7CiAgICAgICAgIG1fcGFnZS5kaWRSZWNlaXZlTWVzc2FnZShj
b25uZWN0aW9uLCBkZWNvZGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1Byb3Zpc2lvbmFsUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Qcm92aXNp
b25hbFBhZ2VQcm94eS5oCmluZGV4IDE3NTIxNTA0NzQ4YmZiNmYyMDYzY2UxNGNhNDVmZDFjYzcx
ODNlY2IuLmJlZTgxYmMwYmQ5ZDcxYjRhNjhkZjRmOGI5ZTQ3MzZiZDI5YThjZmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5LmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuaApAQCAtNjQsNyAr
NjQsNyBAQCBwdWJsaWM6CiAgICAgUHJvdmlzaW9uYWxQYWdlUHJveHkoV2ViUGFnZVByb3h5Jiwg
UmVmPFdlYlByb2Nlc3NQcm94eT4mJiwgc3RkOjp1bmlxdWVfcHRyPFN1c3BlbmRlZFBhZ2VQcm94
eT4sIHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgYm9vbCBpc1NlcnZlclJlZGlyZWN0LCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50KTsK
ICAgICB+UHJvdmlzaW9uYWxQYWdlUHJveHkoKTsKIAotICAgIFdlYlBhZ2VQcm94eSYgcGFnZSgp
IHsgcmV0dXJuIG1fcGFnZTsgfQorICAgIFdlYlBhZ2VQcm94eSYgcGFnZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcGFnZTsgfQogICAgIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIHdlYlBhZ2VJRCgpIGNv
bnN0IHsgcmV0dXJuIG1fd2ViUGFnZUlEOyB9CiAgICAgV2ViRnJhbWVQcm94eSogbWFpbkZyYW1l
KCkgY29uc3QgeyByZXR1cm4gbV9tYWluRnJhbWUuZ2V0KCk7IH0KICAgICBXZWJQcm9jZXNzUHJv
eHkmIHByb2Nlc3MoKSB7IHJldHVybiBtX3Byb2Nlc3MuZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRl
eCBiZGE1OWNkODA1MTU3NjQ2YjMwOGQyZmQyMzZmM2QxMTgyNzFlMGI2Li5jMjZmNTBjOWQ0OGIx
ZTY0YTgzMzRjNGVkNWZhMDA4MzcwNDVhYzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0yNiwzMCArMjYs
NDQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yQ29u
dHJvbGxlci5oIgogCisjaW5jbHVkZSAiUHJvdmlzaW9uYWxQYWdlUHJveHkuaCIKICNpbmNsdWRl
ICJXZWJGcmFtZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50
LmgiCisjaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldC5oIgogI2luY2x1ZGUgIldlYlBh
Z2VQcm94eS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFnZW50QmFzZS5o
PgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oPgorI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiB1c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOwogCitzdGF0aWMgU3RyaW5nIGdldFRhcmdldElEKGNvbnN0IFByb3Zpc2lvbmFs
UGFnZVByb3h5JiBwcm92aXNpb25hbFBhZ2UpCit7CisgICAgcmV0dXJuIFdlYlBhZ2VJbnNwZWN0
b3JUYXJnZXQ6OnRvVGFyZ2V0SUQocHJvdmlzaW9uYWxQYWdlLndlYlBhZ2VJRCgpKTsKK30KKwog
V2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OldlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyKFdl
YlBhZ2VQcm94eSYgcGFnZSkKICAgICA6IG1fcGFnZShwYWdlKQogICAgICwgbV9mcm9udGVuZFJv
dXRlcihGcm9udGVuZFJvdXRlcjo6Y3JlYXRlKCkpCiAgICAgLCBtX2JhY2tlbmREaXNwYXRjaGVy
KEJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUobV9mcm9udGVuZFJvdXRlci5jb3B5UmVmKCkpKQog
ewotICAgIGF1dG8gdGFyZ2V0QWdlbnQgPSBtYWtlVW5pcXVlPFdlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRBZ2VudD4obV9mcm9udGVuZFJvdXRlci5nZXQoKSwgbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQo
KSk7CisgICAgYXV0byB0YXJnZXRBZ2VudCA9IG1ha2VVbmlxdWU8SW5zcGVjdG9yVGFyZ2V0QWdl
bnQ+KG1fZnJvbnRlbmRSb3V0ZXIuZ2V0KCksIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCkpOwog
CiAgICAgbV90YXJnZXRBZ2VudCA9IHRhcmdldEFnZW50LmdldCgpOwogCiAgICAgbV9hZ2VudHMu
YXBwZW5kKFdURk1vdmUodGFyZ2V0QWdlbnQpKTsKIH0KIAordm9pZCBXZWJQYWdlSW5zcGVjdG9y
Q29udHJvbGxlcjo6aW5pdCgpCit7CisgICAgU3RyaW5nIHBhZ2VUYXJnZXRJZCA9IFdlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXQ6OnRvVGFyZ2V0SUQobV9wYWdlLndlYlBhZ2VJRCgpKTsKKyAgICBjcmVh
dGVJbnNwZWN0b3JUYXJnZXQocGFnZVRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdl
dFR5cGU6OlBhZ2UpOworfQorCiB2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpwYWdl
Q2xvc2VkKCkKIHsKICAgICBkaXNjb25uZWN0QWxsRnJvbnRlbmRzKCk7CkBAIC0xMzQsMzcgKzE0
OCw1NyBAQCB2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbmRpY2F0aW5nKGJv
b2wgaW5kaWNhdGluZykKIH0KICNlbmRpZgogCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9s
bGVyOjpjbGVhclRhcmdldHMoKQordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6Y3Jl
YXRlSW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5z
cGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQogewotICAgIGZvciAoYXV0byYgdGFyZ2V0IDogbV90YXJn
ZXRzKQotICAgICAgICBtX3RhcmdldEFnZW50LT50YXJnZXREZXN0cm95ZWQoKnRhcmdldC5nZXQo
KSk7Ci0KLSAgICBtX3RhcmdldHMuY2xlYXIoKTsKKyAgICBhZGRUYXJnZXQoSW5zcGVjdG9yVGFy
Z2V0UHJveHk6OmNyZWF0ZShtX3BhZ2UsIHRhcmdldElkLCB0eXBlKSk7CiB9CiAKLXZvaWQgV2Vi
UGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmNyZWF0ZUluc3BlY3RvclRhcmdldChjb25zdCBTdHJp
bmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUgdHlwZSkKK3ZvaWQg
V2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmRlc3Ryb3lJbnNwZWN0b3JUYXJnZXQoY29uc3Qg
U3RyaW5nJiB0YXJnZXRJZCkKIHsKLSAgICBhdXRvIHRhcmdldCA9IEluc3BlY3RvclRhcmdldFBy
b3h5OjpjcmVhdGUobV9wYWdlLCB0YXJnZXRJZCwgdHlwZSk7Ci0gICAgbV90YXJnZXRzLmFwcGVu
ZCh0YXJnZXQuY29weVJlZigpKTsKKyAgICBhdXRvIGl0ID0gbV90YXJnZXRzLmZpbmQodGFyZ2V0
SWQpOworICAgIGlmIChpdCA9PSBtX3RhcmdldHMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX3RhcmdldEFnZW50LT50YXJnZXREZXN0cm95ZWQoKml0LT52YWx1ZSk7CisgICAgbV90YXJn
ZXRzLnJlbW92ZShpdCk7Cit9CiAKLSAgICBtX3RhcmdldEFnZW50LT50YXJnZXRDcmVhdGVkKHRh
cmdldC5nZXQoKSk7Cit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpzZW5kTWVzc2Fn
ZVRvSW5zcGVjdG9yRnJvbnRlbmQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlKQoreworICAgIG1fdGFyZ2V0QWdlbnQtPnNlbmRNZXNzYWdlRnJvbVRhcmdldFRv
RnJvbnRlbmQodGFyZ2V0SWQsIG1lc3NhZ2UpOwogfQogCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JD
b250cm9sbGVyOjpkZXN0cm95SW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQp
Cit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDcmVhdGVQcm92aXNpb25hbFBh
Z2UoUHJvdmlzaW9uYWxQYWdlUHJveHkmIHByb3Zpc2lvbmFsUGFnZSkKIHsKLSAgICBhdXRvIHBv
c2l0aW9uID0gbV90YXJnZXRzLmZpbmRNYXRjaGluZyhbJl0oY29uc3QgYXV0byYgaXRlbSkgeyBy
ZXR1cm4gaXRlbS0+aWRlbnRpZmllcigpID09IHRhcmdldElkOyB9KTsKLSAgICBpZiAocG9zaXRp
b24gPT0gbm90Rm91bmQpCi0gICAgICAgIHJldHVybjsKKyAgICBhZGRUYXJnZXQoSW5zcGVjdG9y
VGFyZ2V0UHJveHk6OmNyZWF0ZShwcm92aXNpb25hbFBhZ2UsIGdldFRhcmdldElEKHByb3Zpc2lv
bmFsUGFnZSksIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZTo6UGFnZSkpOworfQogCi0g
ICAgYXV0byYgdGFyZ2V0ID0gbV90YXJnZXRzW3Bvc2l0aW9uXTsKLSAgICBtX3RhcmdldEFnZW50
LT50YXJnZXREZXN0cm95ZWQoKnRhcmdldC5nZXQoKSk7Cit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JD
b250cm9sbGVyOjp3aWxsRGVzdHJveVByb3Zpc2lvbmFsUGFnZShjb25zdCBQcm92aXNpb25hbFBh
Z2VQcm94eSYgcHJvdmlzaW9uYWxQYWdlKQoreworICAgIGRlc3Ryb3lJbnNwZWN0b3JUYXJnZXQo
Z2V0VGFyZ2V0SUQocHJvdmlzaW9uYWxQYWdlKSk7Cit9CiAKLSAgICBtX3RhcmdldHMucmVtb3Zl
KHBvc2l0aW9uKTsKK3ZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdFBy
b3Zpc2lvbmFsUGFnZShXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBvbGRXZWJQYWdlSUQsIFdlYkNv
cmU6OlBhZ2VJZGVudGlmaWVyIG5ld1dlYlBhZ2VJRCkKK3sKKyAgICBTdHJpbmcgb2xkSUQgPSBX
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojp0b1RhcmdldElEKG9sZFdlYlBhZ2VJRCk7CisgICAgU3Ry
aW5nIG5ld0lEID0gV2ViUGFnZUluc3BlY3RvclRhcmdldDo6dG9UYXJnZXRJRChuZXdXZWJQYWdl
SUQpOworICAgIGF1dG8gbmV3VGFyZ2V0ID0gbV90YXJnZXRzLnRha2UobmV3SUQpOworICAgIEFT
U0VSVChuZXdUYXJnZXQpOworICAgIG5ld1RhcmdldC0+ZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJn
ZXQoKTsKKyAgICBtX3RhcmdldEFnZW50LT5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldChvbGRJ
RCwgbmV3SUQpOworCisgICAgLy8gV2UndmUgZGlzY29ubmVjdGVkIGZyb20gdGhlIG9sZCBwYWdl
IGFuZCB3aWxsIG5vdCByZWNlaXZlIGFueSBtZXNzYWdlIGZyb20gaXQsIHNvCisgICAgLy8gd2Ug
ZGVzdHJveSBldmVyeXRoaW5nIGJ1dCB0aGUgbmV3IHRhcmdldCBoZXJlLgorICAgIC8vIEZJWE1F
KHdlYmtpdC5vcmcvYi8yMDI5MzcpOiBkbyBub3QgZGVzdHJveSB0YXJnZXRzIHRoYXQgYmVsb25n
IHRvIHRoZSBjb21taXR0ZWQgcGFnZS4KKyAgICBmb3IgKGF1dG8mIHRhcmdldCA6IG1fdGFyZ2V0
cy52YWx1ZXMoKSkKKyAgICAgICAgbV90YXJnZXRBZ2VudC0+dGFyZ2V0RGVzdHJveWVkKCp0YXJn
ZXQpOworICAgIG1fdGFyZ2V0cy5jbGVhcigpOworICAgIG1fdGFyZ2V0cy5zZXQobmV3VGFyZ2V0
LT5pZGVudGlmaWVyKCksIFdURk1vdmUobmV3VGFyZ2V0KSk7CiB9CiAKLXZvaWQgV2ViUGFnZUlu
c3BlY3RvckNvbnRyb2xsZXI6OnNlbmRNZXNzYWdlVG9JbnNwZWN0b3JGcm9udGVuZChjb25zdCBT
dHJpbmcmIHRhcmdldElkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit2b2lkIFdlYlBhZ2VJbnNw
ZWN0b3JDb250cm9sbGVyOjphZGRUYXJnZXQoc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvclRhcmdl
dFByb3h5PiYmIHRhcmdldCkKIHsKLSAgICBtX3RhcmdldEFnZW50LT5zZW5kTWVzc2FnZUZyb21U
YXJnZXRUb0Zyb250ZW5kKHRhcmdldElkLCBtZXNzYWdlKTsKKyAgICBtX3RhcmdldEFnZW50LT50
YXJnZXRDcmVhdGVkKCp0YXJnZXQpOworICAgIG1fdGFyZ2V0cy5zZXQodGFyZ2V0LT5pZGVudGlm
aWVyKCksIFdURk1vdmUodGFyZ2V0KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xs
ZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVy
LmgKaW5kZXggMGNhZjZhMWMyNzkyMDQzZDNiZTA1NzFhMjhmZGIxZTE0MTk3YTYxMS4uYTcwZGNl
NzViZGVlMDdjMjMyYjhiYTM1ZGZjYzA4ZDE2MWI2MDcxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC00Niw2ICs0
Niw3IEBAIGNsYXNzIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyIHsKIHB1YmxpYzoKICAgICBX
ZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcihXZWJQYWdlUHJveHkmKTsKIAorICAgIHZvaWQgaW5p
dCgpOwogICAgIHZvaWQgcGFnZUNsb3NlZCgpOwogCiAgICAgYm9vbCBoYXNMb2NhbEZyb250ZW5k
KCkgY29uc3Q7CkBAIC02MCwxOCArNjEsMjMgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SW5kaWNh
dGluZyhib29sKTsKICNlbmRpZgogCi0gICAgdm9pZCBjbGVhclRhcmdldHMoKTsKICAgICB2b2lk
IGNyZWF0ZUluc3BlY3RvclRhcmdldChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6
Okluc3BlY3RvclRhcmdldFR5cGUpOwogICAgIHZvaWQgZGVzdHJveUluc3BlY3RvclRhcmdldChj
b25zdCBTdHJpbmcmIHRhcmdldElkKTsKICAgICB2b2lkIHNlbmRNZXNzYWdlVG9JbnNwZWN0b3JG
cm9udGVuZChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwog
CisgICAgdm9pZCBkaWRDcmVhdGVQcm92aXNpb25hbFBhZ2UoUHJvdmlzaW9uYWxQYWdlUHJveHkm
KTsKKyAgICB2b2lkIHdpbGxEZXN0cm95UHJvdmlzaW9uYWxQYWdlKGNvbnN0IFByb3Zpc2lvbmFs
UGFnZVByb3h5Jik7CisgICAgdm9pZCBkaWRDb21taXRQcm92aXNpb25hbFBhZ2UoV2ViQ29yZTo6
UGFnZUlkZW50aWZpZXIgb2xkV2ViUGFnZUlELCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBuZXdX
ZWJQYWdlSUQpOworCiBwcml2YXRlOgorICAgIHZvaWQgYWRkVGFyZ2V0KHN0ZDo6dW5pcXVlX3B0
cjxJbnNwZWN0b3JUYXJnZXRQcm94eT4mJik7CisKICAgICBXZWJQYWdlUHJveHkmIG1fcGFnZTsK
ICAgICBSZWY8SW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlcj4gbV9mcm9udGVuZFJvdXRlcjsKICAg
ICBSZWY8SW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsK
ICAgICBJbnNwZWN0b3I6OkFnZW50UmVnaXN0cnkgbV9hZ2VudHM7CiAgICAgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JUYXJnZXRBZ2VudCogbV90YXJnZXRBZ2VudDsKLSAgICBWZWN0b3I8UmVmUHRyPElu
c3BlY3RvclRhcmdldFByb3h5Pj4gbV90YXJnZXRzOworICAgIEhhc2hNYXA8U3RyaW5nLCBzdGQ6
OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJveHk+PiBtX3RhcmdldHM7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VJbnNwZWN0b3JUYXJnZXRBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBiYTAwMWMwOGQwMmY3ZWQ2YzAwODU2NmY3YWY4OWEzODFjZGVkMjE1Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRBZ2VudC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1
NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRBZ2Vu
dC5oIgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50
OjpXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciYg
ZnJvbnRlbmRSb3V0ZXIsIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNw
YXRjaGVyKQotICAgIDogSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRBZ2VudChmcm9udGVuZFJv
dXRlciwgYmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBtX3JvdXRlcihmcm9udGVuZFJvdXRlcikK
LXsKLX0KLQotV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50Ojp+V2ViUGFnZUluc3BlY3RvclRh
cmdldEFnZW50KCkgPSBkZWZhdWx0OwotCi1JbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYgV2Vi
UGFnZUluc3BlY3RvclRhcmdldEFnZW50Ojpmcm9udGVuZENoYW5uZWwoKQotewotICAgIHJldHVy
biAqdGhpczsKLX0KLQotSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBl
IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRBZ2VudDo6Y29ubmVjdGlvblR5cGUoKSBjb25zdAotewot
ICAgIHJldHVybiBtX3JvdXRlci5oYXNMb2NhbEZyb250ZW5kKCkgPyBJbnNwZWN0b3I6OkZyb250
ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGU6OkxvY2FsIDogSW5zcGVjdG9yOjpGcm9udGVuZENo
YW5uZWw6OkNvbm5lY3Rpb25UeXBlOjpSZW1vdGU7Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3Rv
clRhcmdldEFnZW50OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJikKLXsKLSAg
ICAvLyBJbnRlbnRpb25hbGx5IGlnbm9yZWQsIHRoaXMgY2hhbm5lbCBpcyBub3QgYWN0dWFsbHkg
dXNlZCB0byBzZW5kIG1lc3NhZ2VzLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRBZ2VudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDk2M2Y5YzNjY2NlYTU0ODdhNGNlMjkzZWM1ZTA4M2E4Y2M4YjUxNTQuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JUYXJnZXRBZ2VudC5o
PgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZUluc3BlY3RvclRhcmdldEFn
ZW50IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0QWdlbnQsIHB1Ymxp
YyBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCB7Ci1wdWJsaWM6Ci0gICAgV2ViUGFnZUluc3Bl
Y3RvclRhcmdldEFnZW50KEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXImLCBJbnNwZWN0b3I6OkJh
Y2tlbmREaXNwYXRjaGVyJik7Ci0gICAgdmlydHVhbCB+V2ViUGFnZUluc3BlY3RvclRhcmdldEFn
ZW50KCk7Ci0KLSAgICAvLyBJbnNwZWN0b3JUYXJnZXRBZ2VudAotICAgIEluc3BlY3Rvcjo6RnJv
bnRlbmRDaGFubmVsJiBmcm9udGVuZENoYW5uZWwoKTsKLQotICAgIC8vIEZyb250ZW5kQ2hhbm5l
bAotICAgIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSBjb25uZWN0
aW9uVHlwZSgpIGNvbnN0OwotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0
cmluZyYpOwotCi1wcml2YXRlOgotICAgIEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXImIG1fcm91
dGVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcAppbmRleCAwMTUyZjZjNjJlOWU0NTM4OTYxNDZiNzRmZDcyMzNkYTI1
NzU0MjA1Li4xOTY3NzNlMDNmMjIyMzk3MTZmMDk0ZTkwZjRmYjEzZGM5ZDgwOWViIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTQ5Miw4ICs0OTIsNyBAQCBX
ZWJQYWdlUHJveHk6OldlYlBhZ2VQcm94eShQYWdlQ2xpZW50JiBwYWdlQ2xpZW50LCBXZWJQcm9j
ZXNzUHJveHkmIHByb2Nlc3MsIFJlZgogICAgIG1faW5zcGVjdG9yRGVidWdnYWJsZS0+c2V0UmVt
b3RlRGVidWdnaW5nQWxsb3dlZCh0cnVlKTsKICAgICBtX2luc3BlY3RvckRlYnVnZ2FibGUtPmlu
aXQoKTsKICNlbmRpZgotCi0gICAgY3JlYXRlSW5zcGVjdG9yVGFyZ2V0cygpOworICAgIG1faW5z
cGVjdG9yQ29udHJvbGxlci0+aW5pdCgpOwogfQogCiBXZWJQYWdlUHJveHk6On5XZWJQYWdlUHJv
eHkoKQpAQCAtODYyLDkgKzg2MSw2IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpmaW5pc2hBdHRhY2hp
bmdUb1dlYlByb2Nlc3MoUHJvY2Vzc0xhdW5jaFJlYXNvbiByZWFzb24pCiAgICAgcmVtb3RlSW5z
cGVjdG9ySW5mb3JtYXRpb25EaWRDaGFuZ2UoKTsKICNlbmRpZgogCi0gICAgY2xlYXJJbnNwZWN0
b3JUYXJnZXRzKCk7Ci0gICAgY3JlYXRlSW5zcGVjdG9yVGFyZ2V0cygpOwotCiAgICAgcGFnZUNs
aWVudCgpLmRpZFJlbGF1bmNoUHJvY2VzcygpOwogICAgIG1fcGFnZUxvYWRTdGF0ZS5kaWRTd2Fw
V2ViUHJvY2Vzc2VzKCk7CiAgICAgaWYgKHJlYXNvbiAhPSBQcm9jZXNzTGF1bmNoUmVhc29uOjpJ
bml0aWFsUHJvY2VzcykKQEAgLTE2NjcsMTcgKzE2NjMsNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
cmVtb3RlSW5zcGVjdG9ySW5mb3JtYXRpb25EaWRDaGFuZ2UoKQogfQogI2VuZGlmCiAKLXZvaWQg
V2ViUGFnZVByb3h5OjpjbGVhckluc3BlY3RvclRhcmdldHMoKQotewotICAgIG1faW5zcGVjdG9y
Q29udHJvbGxlci0+Y2xlYXJUYXJnZXRzKCk7Ci19Ci0KLXZvaWQgV2ViUGFnZVByb3h5OjpjcmVh
dGVJbnNwZWN0b3JUYXJnZXRzKCkKLXsKLSAgICBTdHJpbmcgcGFnZVRhcmdldElkID0gbWFrZVN0
cmluZygicGFnZS0iLCBtX3dlYlBhZ2VJRC50b1VJbnQ2NCgpKTsKLSAgICBtX2luc3BlY3RvckNv
bnRyb2xsZXItPmNyZWF0ZUluc3BlY3RvclRhcmdldChwYWdlVGFyZ2V0SWQsIEluc3BlY3Rvcjo6
SW5zcGVjdG9yVGFyZ2V0VHlwZTo6UGFnZSk7Ci19Ci0KIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRC
YWNrZ3JvdW5kQ29sb3IoY29uc3QgT3B0aW9uYWw8Q29sb3I+JiBjb2xvcikKIHsKICAgICBpZiAo
bV9iYWNrZ3JvdW5kQ29sb3IgPT0gY29sb3IpCkBAIC0zMDM5LDYgKzMwMjQsNyBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6Y29tbWl0UHJvdmlzaW9uYWxQYWdlKEZyYW1lSWRlbnRpZmllciBmcmFtZUlE
LCB1aW50NjRfdCBuYXZpZwogICAgIGlmICghZGlkU3VzcGVuZFByZXZpb3VzUGFnZSkKICAgICAg
ICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDbG9zZSgpLCBtX3dlYlBhZ2VJ
RCk7CiAKKyAgICBjb25zdCBhdXRvIG9sZFdlYlBhZ2VJRCA9IG1fd2ViUGFnZUlEOwogICAgIHN3
YXBUb1dlYlByb2Nlc3MobV9wcm92aXNpb25hbFBhZ2UtPnByb2Nlc3MoKSwgbV9wcm92aXNpb25h
bFBhZ2UtPndlYlBhZ2VJRCgpLCBtX3Byb3Zpc2lvbmFsUGFnZS0+dGFrZURyYXdpbmdBcmVhKCks
IG1fcHJvdmlzaW9uYWxQYWdlLT5tYWluRnJhbWUoKSk7CiAKICNpZiBQTEFURk9STShDT0NPQSkK
QEAgLTMwNDksNiArMzAzNSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpjb21taXRQcm92aXNpb25h
bFBhZ2UoRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIHVpbnQ2NF90IG5hdmlnCiAKICAgICBkaWRD
b21taXRMb2FkRm9yRnJhbWUoZnJhbWVJRCwgbmF2aWdhdGlvbklELCBtaW1lVHlwZSwgZnJhbWVI
YXNDdXN0b21Db250ZW50UHJvdmlkZXIsIGZyYW1lTG9hZFR5cGUsIGNlcnRpZmljYXRlSW5mbywg
Y29udGFpbnNQbHVnaW5Eb2N1bWVudCwgZm9yY2VkSGFzSW5zZWN1cmVDb250ZW50LCB1c2VyRGF0
YSk7CiAKKyAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRpZENvbW1pdFByb3Zpc2lvbmFsUGFn
ZShvbGRXZWJQYWdlSUQsIG1fd2ViUGFnZUlEKTsKICAgICBtX3Byb3Zpc2lvbmFsUGFnZSA9IG51
bGxwdHI7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggYTY5
NDg4ZGU2NzZkOGNmN2FiZjIwYTI2ZDE3NTQzMDI2OGQ5YmVlYS4uMDFiOGJhZTc2MjBlNDUxMDA4
YjYxODM4NTQyZTNkZDJmZWQ3ZTI5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmgKQEAgLTIwNzEsOSArMjA3MSw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHN0b3BBbGxV
UkxTY2hlbWVUYXNrcyhXZWJQcm9jZXNzUHJveHkqID0gbnVsbHB0cik7CiAKLSAgICB2b2lkIGNs
ZWFySW5zcGVjdG9yVGFyZ2V0cygpOwotICAgIHZvaWQgY3JlYXRlSW5zcGVjdG9yVGFyZ2V0cygp
OwotCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKICAgICB2b2lkIHJlZ2lzdGVyQXR0
YWNobWVudElkZW50aWZpZXJGcm9tRGF0YShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNv
bnRlbnRUeXBlLCBjb25zdCBTdHJpbmcmIHByZWZlcnJlZEZpbGVOYW1lLCBjb25zdCBJUEM6OkRh
dGFSZWZlcmVuY2UmKTsKICAgICB2b2lkIHJlZ2lzdGVyQXR0YWNobWVudElkZW50aWZpZXJGcm9t
RmlsZVBhdGgoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSwgY29uc3Qg
U3RyaW5nJiBmaWxlUGF0aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCBmMmJiNTczNmY4MWRhODU5YmE4ZWU2OTYyNjcyODM4ZDg0YmNk
OWU2Li5hNTlkYjk5YzI0MTk3MDBiMDY4ZmQyZmU3NWE5N2U1M2M2MWMzMGIxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzNjcsNyAr
MTM2Nyw2IEBACiAJCUE1NDNFMzA3MjE1QUQxMzcwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0RnJvbnRlbmRDaGFubmVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBNTQzRTMwNTIxNUFEMTJEMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3Rv
clRhcmdldEZyb250ZW5kQ2hhbm5lbC5oICovOyB9OwogCQlBNTQzRTMwQzIxNUM4QThEMDAyNzlD
RDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTU0M0UzMDgyMTVDOEE4MzAwMjc5Q0Q5IC8qIFdlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXQuaCAqLzsgfTsKIAkJQTU0M0UzMEQyMTVDOEE5MDAwMjc5Q0Q5IC8qIFdl
YlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTQzRTMwQjIxNUM4QTg0MDAyNzlDRDkgLyogV2ViUGFn
ZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuaCAqLzsgfTsKLQkJQTU0M0UzMTAyMTVEOENFNjAw
Mjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRBZ2VudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU0M0UzMEUyMTVEOENFMjAwMjc5Q0Q5IC8q
IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRBZ2VudC5oICovOyB9OwogCQlBNTVCQTgxMDFCQTEzMTdF
MDA3Q0QzM0QgLyogX1dLUmVtb3RlV2ViSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1NUJBODBDMUJBMTJCRTEw
MDdDRDMzRCAvKiBfV0tSZW1vdGVXZWJJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE1NUJBODE3MUJBMjNF
MTIwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JVSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU1QkE4MTMxQkEyM0UwNTAwN0NEMzNEIC8qIFJl
bW90ZVdlYkluc3BlY3RvclVJLmggKi87IH07CiAJCUE1NUJBODFGMUJBMjVCMjcwMDdDRDMzRCAv
KiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTU1QkE4MTkxQkEyNUIxRTAwN0NEMzNEIC8qIFJlbW90ZVdlYklu
c3BlY3RvclByb3h5LmggKi87IH07CkBAIC00MTE0LDggKzQxMTMsNiBAQAogCQlBNTQzRTMwOTIx
NUM4QTgzMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTQzRTMwQTIxNUM4QTg0MDAyNzlDRDkgLyog
V2ViUGFnZUluc3BlY3RvclRhcmdldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTU0M0UzMEIy
MTVDOEE4NDAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE1NDNFMzBFMjE1RDhDRTIwMDI3OUNEOSAvKiBXZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0QWdlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGFnZUluc3BlY3RvclRh
cmdldEFnZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE1NDNFMzBGMjE1RDhD
RTIwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTU1QkE4MEMxQkExMkJFMTAwN0NEMzNEIC8qIF9XS1JlbW90ZVdlYklu
c3BlY3RvclZpZXdDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IF9XS1JlbW90ZVdlYkluc3BlY3RvclZpZXdDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE1NUJBODBEMUJBMTJCRTEwMDdDRDMzRCAvKiBfV0tSZW1vdGVXZWJJbnNw
ZWN0b3JWaWV3Q29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IF9XS1JlbW90ZVdlYkluc3BlY3RvclZpZXdDb250cm9sbGVyLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBNTVCQTgxMjFCQTIzRTA1MDA3Q0QzM0QgLyogUmVtb3RlV2Vi
SW5zcGVjdG9yVUkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVt
b3RlV2ViSW5zcGVjdG9yVUkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzg5
OCw4ICs3ODk1LDYgQEAKIAkJCQkyRDlFQTMwRTFBOTZDQkZGMDAyRDI4MDcgLyogV2ViUGFnZUlu
amVjdGVkQnVuZGxlQ2xpZW50LmggKi8sCiAJCQkJQTUxM0Y1M0YyMTU0QTVDRDAwNjYyODQxIC8q
IFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmNwcCAqLywKIAkJCQlBNTEzRjUzRTIxNTRBNUND
MDA2NjI4NDEgLyogV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaCAqLywKLQkJCQlBNTQzRTMw
RjIxNUQ4Q0UyMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50LmNwcCAqLywK
LQkJCQlBNTQzRTMwRTIxNUQ4Q0UyMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldEFn
ZW50LmggKi8sCiAJCQkJQkMxMTFCMEIxMTJGNUU0RjAwMzM3QkFCIC8qIFdlYlBhZ2VQcm94eS5j
cHAgKi8sCiAJCQkJQkMwMzJEQ0IxMEY0Mzg5RjAwNThDMTVBIC8qIFdlYlBhZ2VQcm94eS5oICov
LAogCQkJCUJDQkQzOEZBMTI1QkFCOUEwMEQyQzI5RiAvKiBXZWJQYWdlUHJveHkubWVzc2FnZXMu
aW4gKi8sCkBAIC05OTgzLDcgKzk5NzgsNiBAQAogCQkJCTJEOUVBMzBGMUE5NkNCRkYwMDJEMjgw
NyAvKiBXZWJQYWdlSW5qZWN0ZWRCdW5kbGVDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
MTNGNTQwMjE1NEE1RDcwMDY2Mjg0MSAvKiBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTU0M0UzMEMyMTVDOEE4RDAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXQuaCBpbiBIZWFkZXJzICovLAotCQkJCUE1NDNFMzEwMjE1RDhDRTYwMDI3OUNE
OSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
NDNFMzBEMjE1QzhBOTAwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU0M0UzMDcyMTVBRDEzNzAwMjc5Q0Q5IC8qIFdlYlBh
Z2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUMw
Q0U3MkExMTI0N0U3MUQwMEJDMEVDNCAvKiBXZWJQYWdlTWVzc2FnZXMuaCBpbiBIZWFkZXJzICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUlu
c3BlY3RvclRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0LmNwcAppbmRleCA1NmIwZDUyZWM1OTU3Y2M3M2ExM2YwNjdlYjNj
ZGEwMzJkZTIxNzU4Li5hNzBmNmZkNTIwOTZhNWRjYTkwMWVhNzBhMzc1NWYxNGQ2YjRhMGZkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0LmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIldlYlBh
Z2VJbnNwZWN0b3JUYXJnZXQuaCIKIAogI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlICJX
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmgiCiAjaW5jbHVkZSA8V2ViQ29y
ZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CiAKQEAg
LTQxLDE5ICs0MiwyNSBAQCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0OjpXZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0KFdlYlBhZ2UmIHBhZ2UpCiAKIFN0cmluZyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojpp
ZGVudGlmaWVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbWFrZVN0cmluZygicGFnZS0iLCBtX3Bh
Z2UuaWRlbnRpZmllcigpLnRvVUludDY0KCkpOworICAgIHJldHVybiB0b1RhcmdldElEKG1fcGFn
ZS5pZGVudGlmaWVyKCkpOwogfQogCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OmNvbm5l
Y3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwmIGNoYW5uZWwpCit2b2lkIFdlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXQ6OmNvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rp
b25UeXBlIGNvbm5lY3Rpb25UeXBlKQogeworICAgIGlmIChtX2NoYW5uZWwpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2NoYW5uZWwgPSBtYWtlVW5pcXVlPFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRG
cm9udGVuZENoYW5uZWw+KG1fcGFnZSwgaWRlbnRpZmllcigpLCBjb25uZWN0aW9uVHlwZSk7CiAg
ICAgaWYgKG1fcGFnZS5jb3JlUGFnZSgpKQotICAgICAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpLmNvbm5lY3RGcm9udGVuZChjaGFubmVsKTsKKyAgICAgICAgbV9w
YWdlLmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5jb25uZWN0RnJvbnRlbmQoKm1f
Y2hhbm5lbCk7CiB9CiAKLXZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldDo6ZGlzY29ubmVjdChJ
bnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYgY2hhbm5lbCkKK3ZvaWQgV2ViUGFnZUluc3BlY3Rv
clRhcmdldDo6ZGlzY29ubmVjdCgpCiB7CisgICAgaWYgKCFtX2NoYW5uZWwpCisgICAgICAgIHJl
dHVybjsKICAgICBpZiAobV9wYWdlLmNvcmVQYWdlKCkpCi0gICAgICAgIG1fcGFnZS5jb3JlUGFn
ZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZGlzY29ubmVjdEZyb250ZW5kKGNoYW5uZWwpOwor
ICAgICAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmRpc2Nvbm5l
Y3RGcm9udGVuZCgqbV9jaGFubmVsKTsKKyAgICBtX2NoYW5uZWwucmVzZXQoKTsKIH0KIAogdm9p
ZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0OjpzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCkBAIC02Miw0ICs2OSwxMCBAQCB2b2lkIFdlYlBhZ2VJbnNwZWN0
b3JUYXJnZXQ6OnNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkKICAgICAgICAgbV9wYWdlLmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5kaXNw
YXRjaE1lc3NhZ2VGcm9tRnJvbnRlbmQobWVzc2FnZSk7CiB9CiAKK1N0cmluZyBXZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0Ojp0b1RhcmdldElEKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIHBhZ2VJRCkK
K3sKKyAgICByZXR1cm4gbWFrZVN0cmluZygicGFnZS0iLCBwYWdlSUQudG9VSW50NjQoKSk7Cit9
CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmggYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmgKaW5kZXggYjcwZTMx
YzhiODc3MGM0YmYxZWNiNDU4OGViZjI2NzViM2I5ZjQ2NC4uNmNiZDdmYWQ1ZmY5MWFmZDg1OGRh
MzQ2YWRiZmVlZDY0MjRiMGIyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaApAQCAtMjYsMjkgKzI2LDM0
IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclRh
cmdldC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZUlkZW50aWZpZXIuaD4KICNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlBhZ2U7
CitjbGFzcyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsOwogCiBjbGFzcyBX
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9y
VGFyZ2V0IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0KTsKIHB1YmxpYzoKLSAgICBXZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0KFdlYlBhZ2UmKTsKKyAgICBleHBsaWNpdCBXZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0KFdlYlBhZ2UmKTsKICAgICB+V2ViUGFnZUluc3BlY3RvclRhcmdldCgpID0gZGVmYXVsdDsK
IAogICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlOjpQYWdlOyB9CiAKICAgICBT
dHJpbmcgaWRlbnRpZmllcigpIGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBjb25uZWN0KEluc3Bl
Y3Rvcjo6RnJvbnRlbmRDaGFubmVsJik7Ci0gICAgdm9pZCBkaXNjb25uZWN0KEluc3BlY3Rvcjo6
RnJvbnRlbmRDaGFubmVsJik7Ci0gICAgdm9pZCBzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChj
b25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGNvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5u
ZWw6OkNvbm5lY3Rpb25UeXBlKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpc2Nvbm5lY3QoKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYp
IG92ZXJyaWRlOworCisgICAgc3RhdGljIFN0cmluZyB0b1RhcmdldElEKFdlYkNvcmU6OlBhZ2VJ
ZGVudGlmaWVyKTsKIAogcHJpdmF0ZToKICAgICBXZWJQYWdlJiBtX3BhZ2U7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw+IG1fY2hhbm5l
bDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdl
dENvbnRyb2xsZXIuY3BwCmluZGV4IDUyNTQ4OTY3M2Q2NmEyZTRhN2ZkMzJmMzY0ODUzNGNlM2Vk
ZWVjNDcuLmNkYTRmMWU4ZDNjNTc1MzYxNjJhYTM5MGVkNzRiNjgxYzg5MTM0MGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5jcHAKQEAgLTU4LDcgKzU4LDYgQEAgdm9p
ZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6cmVtb3ZlVGFyZ2V0KEluc3BlY3Rv
cjo6SW5zcGVjdG9yVGFyZ2V0JgogICAgIG1fcGFnZS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkRlc3Ryb3lJbnNwZWN0b3JUYXJnZXQodGFyZ2V0LmlkZW50aWZpZXIoKSkpOwogCiAgICAg
bV90YXJnZXRzLnJlbW92ZSh0YXJnZXQuaWRlbnRpZmllcigpKTsKLSAgICBtX3RhcmdldEZyb250
ZW5kQ2hhbm5lbHMucmVtb3ZlKHRhcmdldC5pZGVudGlmaWVyKCkpOwogfQogCiB2b2lkIFdlYlBh
Z2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpjb25uZWN0SW5zcGVjdG9yKGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSBj
b25uZWN0aW9uVHlwZSkKQEAgLTY3LDEzICs2Niw3IEBAIHZvaWQgV2ViUGFnZUluc3BlY3RvclRh
cmdldENvbnRyb2xsZXI6OmNvbm5lY3RJbnNwZWN0b3IoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwK
ICAgICBpZiAoIXRhcmdldCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPFdlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw+IGNoYW5uZWwgPSBtX3RhcmdldEZyb250ZW5k
Q2hhbm5lbHMuZ2V0KHRhcmdldElkKTsKLSAgICBpZiAoIWNoYW5uZWwpIHsKLSAgICAgICAgY2hh
bm5lbCA9IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw6OmNyZWF0ZSgqdGhp
cywgdGFyZ2V0SWQsIGNvbm5lY3Rpb25UeXBlKTsKLSAgICAgICAgbV90YXJnZXRGcm9udGVuZENo
YW5uZWxzLnNldCh0YXJnZXQtPmlkZW50aWZpZXIoKSwgY2hhbm5lbCk7Ci0gICAgfQotCi0gICAg
dGFyZ2V0LT5jb25uZWN0KCpjaGFubmVsLmdldCgpKTsKKyAgICB0YXJnZXQtPmNvbm5lY3QoY29u
bmVjdGlvblR5cGUpOwogfQogCiB2b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVy
OjpkaXNjb25uZWN0SW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpCkBAIC04MiwxMSAr
NzUsNyBAQCB2b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpkaXNjb25uZWN0
SW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgdGFyZ2V0SQogICAgIGlmICghdGFyZ2V0KQogICAgICAg
ICByZXR1cm47CiAKLSAgICBSZWZQdHI8V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hh
bm5lbD4gY2hhbm5lbCA9IG1fdGFyZ2V0RnJvbnRlbmRDaGFubmVscy50YWtlKHRhcmdldElkKTsK
LSAgICBpZiAoIWNoYW5uZWwpCi0gICAgICAgIHJldHVybjsKLQotICAgIHRhcmdldC0+ZGlzY29u
bmVjdCgqY2hhbm5lbC5nZXQoKSk7CisgICAgdGFyZ2V0LT5kaXNjb25uZWN0KCk7CiB9CiAKIHZv
aWQgV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6OnNlbmRNZXNzYWdlVG9UYXJnZXRC
YWNrZW5kKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKQEAg
LTk4LDkgKzg3LDQgQEAgdm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6c2Vu
ZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoY29uc3QgU3RyaW5nJgogICAgIHRhcmdldC0+c2VuZE1l
c3NhZ2VUb1RhcmdldEJhY2tlbmQobWVzc2FnZSk7CiB9CiAKLXZvaWQgV2ViUGFnZUluc3BlY3Rv
clRhcmdldENvbnRyb2xsZXI6OnNlbmRNZXNzYWdlVG9UYXJnZXRGcm9udGVuZChjb25zdCBTdHJp
bmcmIHRhcmdldElkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgbV9wYWdlLnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2VuZE1lc3NhZ2VUb0luc3BlY3RvckZyb250ZW5kKHRh
cmdldElkLCBtZXNzYWdlKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdl
dENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmgKaW5kZXggM2U5MmI3YTlkYTllNTYwOWU2MDE2NjM5
YzA5YjczY2I1OTZmOGFmNS4uN2M5MzFkYWQxYzk4MDBmMDNkNzNkNGE3Y2EyNTg4ZGQwMjhhOGYy
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUlu
c3BlY3RvclRhcmdldENvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oCkBAIC0yNiw3ICsyNiw2
IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCIK
LSNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmgiCiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApA
QCAtNTAsMTMgKzQ5LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbm5lY3RJbnNwZWN0b3IoY29u
c3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rp
b25UeXBlKTsKICAgICB2b2lkIGRpc2Nvbm5lY3RJbnNwZWN0b3IoY29uc3QgU3RyaW5nJiB0YXJn
ZXRJZCk7CiAgICAgdm9pZCBzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcm
IHRhcmdldElkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIHZvaWQgc2VuZE1lc3NhZ2VU
b1RhcmdldEZyb250ZW5kKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSk7CiAKIHByaXZhdGU6CiAgICAgV2ViUGFnZSYgbV9wYWdlOwogICAgIFdlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXQgbV9wYWdlVGFyZ2V0OwogICAgIEhhc2hNYXA8U3RyaW5nLCBJbnNwZWN0b3I6
Okluc3BlY3RvclRhcmdldCo+IG1fdGFyZ2V0czsKLSAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRy
PFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw+PiBtX3RhcmdldEZyb250ZW5k
Q2hhbm5lbHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVu
ZENoYW5uZWwuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUlu
c3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5jcHAKaW5kZXggOGQ3ODgwNzgyYTI5YjE3MGNl
NjVhZmM3MDM3N2Q4YmQ1MDY5NDM1OC4uZTFiNWY3MTM3MzNhMDk1MjUyMTIyZjBhMzgwMWY4MmM4
YzYwZDNmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5l
bC5jcHAKQEAgLTI2LDE3ICsyNiwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaCIKIAotI2luY2x1ZGUgIldl
YlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiV2ViUGFnZS5oIgor
I2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewog
Ci1SZWY8V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbD4gV2ViUGFnZUluc3Bl
Y3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbDo6Y3JlYXRlKFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRD
b250cm9sbGVyJiB0YXJnZXRDb250cm9sbGVyLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNw
ZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUpCi17
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5k
Q2hhbm5lbCh0YXJnZXRDb250cm9sbGVyLCB0YXJnZXRJZCwgY29ubmVjdGlvblR5cGUpKTsKLX0K
LQotV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbDo6V2ViUGFnZUluc3BlY3Rv
clRhcmdldEZyb250ZW5kQ2hhbm5lbChXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlciYg
dGFyZ2V0Q29udHJvbGxlciwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpGcm9u
dGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlIGNvbm5lY3Rpb25UeXBlKQotICAgIDogbV90YXJn
ZXRDb250cm9sbGVyKHRhcmdldENvbnRyb2xsZXIpCitXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJv
bnRlbmRDaGFubmVsOjpXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsKFdlYlBh
Z2UmIHBhZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFu
bmVsOjpDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSkKKyAgICA6IG1fcGFnZShwYWdlKQog
ICAgICwgbV90YXJnZXRJZCh0YXJnZXRJZCkKICAgICAsIG1fY29ubmVjdGlvblR5cGUoY29ubmVj
dGlvblR5cGUpCiB7CkBAIC00NCw3ICs0MCw3IEBAIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9u
dGVuZENoYW5uZWw6OldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwoV2ViCiAK
IHZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbDo6c2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICBtX3RhcmdldENvbnRyb2xs
ZXIuc2VuZE1lc3NhZ2VUb1RhcmdldEZyb250ZW5kKG1fdGFyZ2V0SWQsIG1lc3NhZ2UpOworICAg
IG1fcGFnZS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNlbmRNZXNzYWdlVG9JbnNwZWN0
b3JGcm9udGVuZChtX3RhcmdldElkLCBtZXNzYWdlKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5oCmluZGV4
IDc2YWY2MmE5N2JlZjQ4OGI2NDRlNWQ2MThkNDM5ZWM5YTQyZjIyZGEuLjgxODRhYzViZGEyODkz
ODJhZWIyY2Y1MDE2OWM1OTU2N2Q0Y2QyZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0RnJvbnRlbmRDaGFubmVsLmgKQEAgLTMxLDIyICszMSwyMCBAQAogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAotY2xhc3MgV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI7CitjbGFzcyBX
ZWJQYWdlOwogCi1jbGFzcyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsIGZp
bmFsIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hh
bm5lbD4sIHB1YmxpYyBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCB7CitjbGFzcyBXZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6
RnJvbnRlbmRDaGFubmVsIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsKTsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENo
YW5uZWw+IGNyZWF0ZShXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlciYsIGNvbnN0IFN0
cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlw
ZSk7CisgICAgV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbChXZWJQYWdlJiwg
Y29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5l
Y3Rpb25UeXBlKTsKICAgICB2aXJ0dWFsIH5XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRD
aGFubmVsKCkgPSBkZWZhdWx0OwogCiBwcml2YXRlOgotICAgIFdlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRGcm9udGVuZENoYW5uZWwoV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXImLCBjb25z
dCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlv
blR5cGUpOwotCiAgICAgQ29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX2Nvbm5lY3Rpb25UeXBlOyB9CiAgICAgdm9pZCBzZW5kTWVzc2FnZVRv
RnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVycmlkZTsKIAotcHJpdmF0ZToKLSAg
ICBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlciYgbV90YXJnZXRDb250cm9sbGVyOwor
ICAgIFdlYlBhZ2UmIG1fcGFnZTsKICAgICBTdHJpbmcgbV90YXJnZXRJZDsKICAgICBJbnNwZWN0
b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUgbV9jb25uZWN0aW9uVHlwZSB7IElu
c3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZTo6UmVtb3RlIH07CiB9Owpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CmluZGV4IGUzNWY0NTBjNzAyNTA2MjllZWM2MzYzYTQ0M2RjZWViODE4NWQzNjEuLjY3ODZmZjAw
Yzk2MmNlMjE0YzEzY2FmN2YyNTQwYWZiZDAzZGQ2YzQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAor
MjAxOS0xMC0wMSAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBub3RpZnkgaW5zcGVjdG9yIHdoZW4gcHJvdmlzaW9uYWwgcGFn
ZSBpcyBjcmVhdGVkLCBjb21taXR0ZWQgYW5kIGRlc3Ryb3llZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyNzA0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgbmV3IHRlc3QgZm9yIFRhcmdldCBl
dmVudHMgZHVyaW5nIFBTT04uIEl0IGlzIG9ubHkgZW5hYmxlZCBvbiBXZWJLaXQyIGFzIHRoZXJl
IGlzCisgICAgICAgIG5vIFRhcmdldCBhZ2VudCBpbiBXZWJLaXQxLgorCisgICAgICAgICogVGVz
dEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rvci90YXJnZXQvdGFy
Z2V0LWV2ZW50cy1mb3ItcHJvdmlzaW9uYWwtcGFnZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGh0dHAvdGVzdHMvaW5zcGVjdG9yL3RhcmdldC90YXJnZXQtZXZlbnRzLWZvci1wcm92
aXNpb25hbC1wYWdlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3drMi9UZXN0RXhw
ZWN0YXRpb25zOgorCiAyMDE5LTEwLTE0ICBUcnVpdHQgU2F2ZWxsICA8dHNhdmVsbEBhcHBsZS5j
b20+CiAKICAgICAgICAgTWFzcyBNYXJraW5nIGZhaWxpbmcgdGVzdHMgb24gV2luZG93cwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL1Rlc3RF
eHBlY3RhdGlvbnMKaW5kZXggNjExNzUyNjNmNDRhZjY4NTNjNTQxNTM5N2Q1ZDdiMDdlMTA0ZDYx
NS4uYzA0YTg4NGMxODhlMDMwZjZlN2M5YjU4OThhNWFiNmU5MzAwZTAxZSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0
YXRpb25zCkBAIC05MTIsNiArOTEyLDkgQEAgd2Via2l0Lm9yZy9iLzE2MTk1MSBbIERlYnVnIF0g
aW5zcGVjdG9yL2RlYnVnZ2VyL3BhdXNlZC1zY29wZXMuaHRtbCBbIFNraXAgXQogaW5zcGVjdG9y
L2RlYnVnZ2VyL2V2YWx1YXRlT25DYWxsRnJhbWUtZW11bGF0ZVVzZXJHZXN0dXJlLXVzZXJJc0lu
dGVyYWN0aW5nLmh0bWwgWyBTa2lwIF0KIGluc3BlY3Rvci9ydW50aW1lL2V2YWx1YXRlLWVtdWxh
dGVVc2VyR2VzdHVyZS11c2VySXNJbnRlcmFjdGluZy5odG1sIFsgU2tpcCBdCiAKKyMgVGFyZ2V0
IGRvbWFpbiBpcyBvbmx5IHByZXNlbnQgaW4gV0syLgoraHR0cC90ZXN0cy9pbnNwZWN0b3IvdGFy
Z2V0IFsgU2tpcCBdCisKICMgVGhlc2UgY29uZm9ybWFuY2UgdGVzdHMgYXJlIG5vIGxvbmdlciBp
biBzeW5jIHdpdGggdGhlIGxhdGVzdCBzcGVjaWZpY2F0aW9uCiAjIGFuZCBleHBlY3QgY29tcGFy
ZURvY3VtZW50UG9zaXRpb24oKSB0byByZXR1cm46CiAjIERPQ1VNRU5UX1BPU0lUSU9OX0lNUExF
TUVOVEFUSU9OX1NQRUNJRklDIHwgRE9DVU1FTlRfUE9TSVRJT05fRElTQ09OTkVDVEVECmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci90YXJnZXQvdGFyZ2V0LWV2
ZW50cy1mb3ItcHJvdmlzaW9uYWwtcGFnZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2luc3BlY3Rvci90YXJnZXQvdGFyZ2V0LWV2ZW50cy1mb3ItcHJvdmlzaW9uYWwtcGFn
ZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDMxNzQ3Yjc0ZDExMDUxMmM2ODZhOWZkN2MxNGVh
OWEzYzg4ZGM3ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5z
cGVjdG9yL3RhcmdldC90YXJnZXQtZXZlbnRzLWZvci1wcm92aXNpb25hbC1wYWdlLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDE5IEBACitUZXN0IHRoYXQgY3Jvc3MgZG9tYWluIG5hdmlnYXRpb24g
cmVzdWx0cyBpbiB0aGUgZm9sbG93aW5nIHNlcXVlbmNlIG9mIGV2ZW50cyBpbiBUYXJnZXQgZG9t
YWluOiAKKzEuIFRhcmdldC50YXJnZXRDcmVhdGVkIGZvciBwcm92aXNpb25hbCBwYWdlLiAKKzIu
IFRhcmdldC5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldCB3aGVuIHByb3Zpc2lvbmFsIGxvYWQg
aXMgY29tbWl0dGVkLiAKKzMuIFRhcmdldC50YXJnZXREZXN0cm95ZWQgZm9yIHRoZSBvbGQgdGFy
Z2V0IGFmdGVyIHRoZSBuYXZpZ2F0aW9uIHJlcXVlc3QgaXMgY29tbWl0dGVkLgorCitQQVNTOiBT
aG91bGQgcmVjZWl2ZSB0YXJnZXREZXN0cm95ZWQgZXZlbnQuCitQQVNTOiBEZXN0cm95ZWQgdGFy
Z2V0IHNob3VsZCBiZSBwcmV2aW91cyB0YXJnZXQuCisKKz09IFJ1bm5pbmcgdGVzdCBzdWl0ZTog
VGFyZ2V0LlBTT04KKy0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBQcm92aXNpb25hbFBhZ2VUYXJnZXQK
K1BBU1M6IFNob3VsZCByZWNlaXZlIHRhcmdldENyZWF0ZWQgZXZlbnQuCitQQVNTOiBUYXJnZXQg
c2hvdWxkIGJlIHByb3Zpc2lvbmFsLgorUEFTUzogUHJldmlvdXMgdGFyZ2V0IGlkIHNob3VsZCBi
ZSBpZCBvZiB0aGUgY3VycmVudCB0YXJnZXQuCitQQVNTOiBTaG91bGQgcmVjZWl2ZSBkaWRDb21t
aXRQcm92aXNpb25hbFRhcmdldCBldmVudC4KK1BBU1M6IFByZXZpb3VzIHRhcmdldCBzaG91bGQg
YmUgdGhlIGN1cnJlbnQgb25lLgorUEFTUzogQ29tbWl0dGVkIHRhcmdldCBzaG91bGQgbWF0Y2gg
cHJvdmlzaW9uYWwgdGFyZ2V0LgorUEFTUzogU2hvdWxkIHJlY2VpdmUgdGFyZ2V0RGVzdHJveWVk
IGV2ZW50LgorUEFTUzogRGVzdHJveWVkIHRhcmdldCBzaG91bGQgYmUgcHJldmlvdXMgdGFyZ2V0
LgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci90YXJnZXQv
dGFyZ2V0LWV2ZW50cy1mb3ItcHJvdmlzaW9uYWwtcGFnZS5odG1sIGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9pbnNwZWN0b3IvdGFyZ2V0L3RhcmdldC1ldmVudHMtZm9yLXByb3Zpc2lvbmFsLXBh
Z2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45YzhmM2U3ZTMwZGZkNzM2N2M4N2UxYzU2OGU0N2UzYTYyN2Q2
ZmNkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3Iv
dGFyZ2V0L3RhcmdldC1ldmVudHMtZm9yLXByb3Zpc2lvbmFsLXBhZ2UuaHRtbApAQCAtMCwwICsx
LDU2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSJ1
dGYtOCI+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2luc3BlY3Rvci10ZXN0LmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQ+CitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBsZXQgc3VpdGUgPSBJbnNw
ZWN0b3JUZXN0LmNyZWF0ZUFzeW5jU3VpdGUoIlRhcmdldC5QU09OIik7CisKKyAgICBzdWl0ZS5h
ZGRUZXN0Q2FzZSh7CisgICAgICAgIG5hbWU6ICJQcm92aXNpb25hbFBhZ2VUYXJnZXQiLAorICAg
ICAgICBkZXNjcmlwdGlvbjogIkNoZWNrIHRoYXQgYSBuZXcgdGFyZ2V0IHdpbGwgYmUgY3JlYXRl
ZCBmb3IgcHJvdmlzaW9uYWwgcGFnZS4iLAorICAgICAgICB0ZXN0KHJlc29sdmUsIHJlamVjdCkg
eworICAgICAgICAgICAgY29uc3QgbWFpblRhcmdldElkID0gV0kubWFpblRhcmdldC5pZGVudGlm
aWVyOworICAgICAgICAgICAgbGV0IG5ld1RhcmdldElkOworICAgICAgICAgICAgSW5zcGVjdG9y
VGVzdC5hc3NlcnQobWFpblRhcmdldElkKTsKKworICAgICAgICAgICAgV0kudGFyZ2V0TWFuYWdl
ci5hZGRFdmVudExpc3RlbmVyKFdJLlRhcmdldE1hbmFnZXIuRXZlbnQuVGFyZ2V0Q3JlYXRlZCwg
KGV2ZW50KSA9PiB7CisgICAgICAgICAgICAgICAgbGV0IHRhcmdldEluZm8gPSBldmVudC5kYXRh
LnRhcmdldEluZm87CisgICAgICAgICAgICAgICAgbmV3VGFyZ2V0SWQgPSB0YXJnZXRJbmZvLnRh
cmdldElkOworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QucGFzcyhgU2hvdWxkIHJlY2Vp
dmUgdGFyZ2V0Q3JlYXRlZCBldmVudC5gKTsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0
LmV4cGVjdFRydWUodGFyZ2V0SW5mby5pc1Byb3Zpc2lvbmFsLCAiVGFyZ2V0IHNob3VsZCBiZSBw
cm92aXNpb25hbC4iKTsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdEVxdWFs
KHRhcmdldEluZm8ucHJldmlvdXNUYXJnZXRJZCwgbWFpblRhcmdldElkLCAiUHJldmlvdXMgdGFy
Z2V0IGlkIHNob3VsZCBiZSBpZCBvZiB0aGUgY3VycmVudCB0YXJnZXQuIik7CisgICAgICAgICAg
ICB9KTsKKworICAgICAgICAgICAgV0kudGFyZ2V0TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdJ
LlRhcmdldE1hbmFnZXIuRXZlbnQuRGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQsIChldmVudCkg
PT4geworICAgICAgICAgICAgICAgIGxldCB0YXJnZXRJbmZvID0gZXZlbnQuZGF0YS50YXJnZXRJ
bmZvOworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QucGFzcyhgU2hvdWxkIHJlY2VpdmUg
ZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQgZXZlbnQuYCk7CisgICAgICAgICAgICAgICAgSW5z
cGVjdG9yVGVzdC5leHBlY3RFcXVhbCh0YXJnZXRJbmZvLnByZXZpb3VzVGFyZ2V0SWQsIG1haW5U
YXJnZXRJZCwgIlByZXZpb3VzIHRhcmdldCBzaG91bGQgYmUgdGhlIGN1cnJlbnQgb25lLiIpOwor
ICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0RXF1YWwodGFyZ2V0SW5mby50YXJn
ZXRJZCwgbmV3VGFyZ2V0SWQsICJDb21taXR0ZWQgdGFyZ2V0IHNob3VsZCBtYXRjaCBwcm92aXNp
b25hbCB0YXJnZXQuIik7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgV0kudGFyZ2V0
TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdJLlRhcmdldE1hbmFnZXIuRXZlbnQuVGFyZ2V0RGVz
dHJveWVkLCAoZXZlbnQpID0+eworICAgICAgICAgICAgICAgIGxldCB0YXJnZXRJZCA9IGV2ZW50
LmRhdGEudGFyZ2V0SWQ7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5wYXNzKGBTaG91
bGQgcmVjZWl2ZSB0YXJnZXREZXN0cm95ZWQgZXZlbnQuYCk7CisgICAgICAgICAgICAgICAgSW5z
cGVjdG9yVGVzdC5leHBlY3RFcXVhbCh0YXJnZXRJZCwgbWFpblRhcmdldElkLCAiRGVzdHJveWVk
IHRhcmdldCBzaG91bGQgYmUgcHJldmlvdXMgdGFyZ2V0LiIpOworICAgICAgICAgICAgICAgIHJl
c29sdmUoKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBXSS5tYWluVGFyZ2V0LlJ1
bnRpbWVBZ2VudC5ldmFsdWF0ZSgibG9jYXRpb24uaG9zdG5hbWU9J2xvY2FsaG9zdCciKTsKKyAg
ICAgICAgfQorICAgIH0pOworCisgICAgc3VpdGUucnVuVGVzdENhc2VzQW5kRmluaXNoKCk7Cit9
Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKzxwPlRlc3Qg
dGhhdCBjcm9zcyBkb21haW4gbmF2aWdhdGlvbiByZXN1bHRzIGluIHRoZSBmb2xsb3dpbmcgc2Vx
dWVuY2Ugb2YgZXZlbnRzIGluIFRhcmdldCBkb21haW46Cis8YnI+MS4gVGFyZ2V0LnRhcmdldENy
ZWF0ZWQgZm9yIHByb3Zpc2lvbmFsIHBhZ2UuCis8YnI+Mi4gVGFyZ2V0LmRpZENvbW1pdFByb3Zp
c2lvbmFsVGFyZ2V0IHdoZW4gcHJvdmlzaW9uYWwgbG9hZCBpcyBjb21taXR0ZWQuCis8YnI+My4g
VGFyZ2V0LnRhcmdldERlc3Ryb3llZCBmb3IgdGhlIG9sZCB0YXJnZXQgYWZ0ZXIgdGhlIG5hdmln
YXRpb24gcmVxdWVzdCBpcyBjb21taXR0ZWQuCis8L3A+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDAyZDY4OTgxYjU3ZTFm
Y2UwOTAzMjJiZmYzZTRjMjAzYWQ0OTJhODcuLjdkNGZiNjYwNTJmNmJkOTM3OTVhMmQxMjA1NTIx
ZDBlMjZjZGFjNzMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3drMi9UZXN0RXhw
ZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25z
CkBAIC03NjQsNiArNzY0LDkgQEAgaHR0cC90ZXN0cy9hZENsaWNrQXR0cmlidXRpb24gWyBQYXNz
IF0KIGluc3BlY3Rvci9kZWJ1Z2dlci9ldmFsdWF0ZU9uQ2FsbEZyYW1lLWVtdWxhdGVVc2VyR2Vz
dHVyZS11c2VySXNJbnRlcmFjdGluZy5odG1sIFsgUGFzcyBdCiBpbnNwZWN0b3IvcnVudGltZS9l
dmFsdWF0ZS1lbXVsYXRlVXNlckdlc3R1cmUtdXNlcklzSW50ZXJhY3RpbmcuaHRtbCBbIFBhc3Mg
XQogCisjIFRhcmdldCBkb21haW4gaXMgb25seSBwcmVzZW50IGluIFdlYktpdDIuCitodHRwL3Rl
c3RzL2luc3BlY3Rvci90YXJnZXQgWyBQYXNzIF0KKwogIyMjIEVORCBPRiAoNSkgUHJvZ3Jlc3Np
b25zLCBleHBlY3RlZCBzdWNjZXNzZXMgdGhhdCBhcmUgZXhwZWN0ZWQgZmFpbHVyZXMgaW4gV2Vi
S2l0MS4KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381421</attachid>
            <date>2019-10-21 11:14:28 -0700</date>
            <delta_ts>2019-10-23 11:12:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202704-20191021111427.patch</filename>
            <type>text/plain</type>
            <size>87388</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUxMzY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
NTNmM2JjYzJhNjhiNzVjZDUwNDJkNTFhYzc1MDQ5OGY0Nzc0YTBjLi4xNTdmOWJlNzYwYjAzNmZj
ZDY0YTA3ZWQ0ODU0MTY1NzgwNjU4MzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOCBAQAorMjAxOS0wOS0yNyAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBub3RpZnkgaW5zcGVjdG9yIHdoZW4gcHJv
dmlzaW9uYWwgcGFnZSBpcyBjcmVhdGVkLCBjb21taXR0ZWQgYW5kIGRlc3Ryb3llZAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyNzA0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yVGFyZ2V0Lmg6IGNoYW5nZWQgSW5zcGVjdG9yVGFyZ2V0IHRvIG5vdCByZXF1aXJlIEZy
b250ZW5kQ2hhbm5lbCBhcworICAgICAgICBhbGwgbWVzc2FnZXMgYXJlIHJvdXRlZCBieSBtZWFu
cyBvZiB0aGUgb3duaW5nIEluc3BlY3RvclRhcmdldEFnZW50LgorICAgICAgICAqIGluc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JUYXJnZXRBZ2VudDo6SW5zcGVjdG9yVGFyZ2V0QWdlbnQpOgorICAgICAgICAoSW5z
cGVjdG9yOjpidWlsZFRhcmdldEluZm9PYmplY3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JUYXJnZXRBZ2VudDo6dGFyZ2V0Q3JlYXRlZCk6CisgICAgICAgIChJbnNwZWN0b3I6Oklu
c3BlY3RvclRhcmdldEFnZW50Ojp0YXJnZXREZXN0cm95ZWQpOgorICAgICAgICAoSW5zcGVjdG9y
OjpJbnNwZWN0b3JUYXJnZXRBZ2VudDo6ZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQpOiB0aGlz
IG1ldGhvZCBpcyB1c2VkIHRvCisgICAgICAgIG5vdGlmeSBmcm9udGVuZCB0aGF0IGNvcnJlc3Bv
bmRpbmcgcHJvdmlzaW9uYWwgdGFyZ2V0IGhhcyBjb21taXR0ZWQgYW5kIHJlcGxhY2VkIHByZXZp
b3VzCisgICAgICAgIHRhcmdldC4KKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0
QWdlbnQ6OmNvbm5lY3Rpb25UeXBlIGNvbnN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVj
dG9yVGFyZ2V0QWdlbnQ6OmNvbm5lY3RUb1RhcmdldHMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JUYXJnZXRBZ2VudDo6ZGlzY29ubmVjdEZyb21UYXJnZXRzKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50Lmg6CisgICAgICAgICogaW5zcGVj
dG9yL3Byb3RvY29sL1RhcmdldC5qc29uOiBleHRlbmRlZCBUYXJnZXRJbmZvIHdpdGggcHJvdmlz
aW9uYWwgcGFnZSBkZXRhaWxzIGFuZAorICAgICAgICBhZGRlZCBldmVudCB3aGljaCBpcyBmaXJl
ZCB3aGVuIHByb3Zpc2lvbmFsIHBhZ2UgZ2V0cyBjb21taXR0ZWQuIElmIHByb3Zpc2lvbmFsCisg
ICAgICAgIGxvYWQgZmFpbHMgdGhlcmUgd2lsbCBiZSB0YXJnZXREZXN0cm95ZWQgZXZlbnQgd2l0
aG91dCBjb3JyZXNwb25kaW5nIGNvbW1pdC4KKwogMjAxOS0xMC0xOCAgWXVzdWtlIFN1enVraSAg
PHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIERGRzo6Q29tbW9uRGF0YSBtb2Rp
ZmljYXRpb24gYnkgREZHIHJlYWxseUFkZCBzaG91bGQgYmUgZ3VhcmRlZCBieSBDb2RlQmxvY2sn
cyBsb2NrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggYjE0MzNlMzY5NmViNGRmMTk2OThjZWMwZWYwM2FjZTllZTNm
YzVlZC4uMjdiNmM1OTg5NmViZWJjODNkNTY3NmZmY2MwY2MxZjQ4N2QwYjYyNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE3IEBACisyMDE5LTEwLTAxICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IG5vdGlmeSBpbnNwZWN0b3Ig
d2hlbiBwcm92aXNpb25hbCBwYWdlIGlzIGNyZWF0ZWQsIGNvbW1pdHRlZCBhbmQgZGVzdHJveWVk
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDI3MDQK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBo
dHRwL3Rlc3RzL2luc3BlY3Rvci90YXJnZXQvdGFyZ2V0LWV2ZW50cy1mb3ItcHJvaXNpb25hbC1w
YWdlLmh0bWwKKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNldElzVW5kZXJUZXN0KTog
VGhpcyBtZXRob2QgbWF5IGJlIGNhbGxlZCBzZXZlcmFsIHRpbWVzCisgICAgICAgIHdoZW4gcmVs
b2FkaW5nIGluc3BlY3RlZCBwYWdlIHdpdGggb3BlbmVkIGZyb250ZW5kIHNvIHRoZSBhc3N1bXB0
aW9uIHRoYXQgdGhlcmUgYXJlIG5vCisgICAgICAgIGNvbm5lY3RlZCBmcm9udGVuZHMgd2hlbiB0
aGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSB0ZXN0cyBkb2Vzbid0IGhvbGQgYW55bW9yZS4KKwog
MjAxOS0xMC0yMSAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAg
ICAgICBDbGVhbiB1cCBzb21lIGluY2x1ZGVzIHRvIGltcHJvdmUgV2ViS2l0MiBidWlsZCBzcGVl
ZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKaW5kZXggZmVlZmEzMGM2YTZjZWI3ZGFlN2UzODIxN2Zk
NmQzOGEwZTczZmMwZi4uYThlYjVjOGUxYzZmNmM2ZjBhYWJlZWEyNDEzMTkyNTcxODY5OWQ5ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjEgQEAKKzIwMTktMDktMjcgIFl1
cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3Rvcjogbm90aWZ5IGluc3BlY3RvciB3aGVuIHByb3Zpc2lvbmFsIHBhZ2UgaXMgY3JlYXRlZCwg
Y29tbWl0dGVkIGFuZCBkZXN0cm95ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwMjcwNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFVwZGF0ZWQgZnJvbnRlbmQgY29kZSB0byB1bmRlcnN0YW5kIHByb3Zp
c2lvbmFsIHRhcmdldHMuIEZvciBub3cgdGhlcmUgYXJlCisgICAgICAgIG5vIGNoYW5nZXMgZnJv
bnRlbmQgYmVoYXZpb3IsIGl0IHdpbGwgd2FpdCBmb3IgdGhlIHByb3Zpc2lvbmFsIHRhcmdldCB0
byBjb21taXQKKyAgICAgICAgYW5kIHdpbGwgbm90IHNlbmQgYW55IGNvbW1hbmRzIHRvIGl0IGJl
Zm9yZSB0aGF0LgorCisgICAgICAgICogVXNlckludGVyZmFjZS9CYXNlL01haW4uanM6IE1vdmVk
IGEgYnVuY2ggb2YgbWV0aG9kcyBzaGFyZWQgYmV0d2VlbiBNYWluLmpzIGFuZCBUZXN0LmpzCisg
ICAgICAgIHRvIFRhcmdldE1hbmFnZXIuanMgdG8ga2VlcCB0aGVtIGluIHN5bmMuCisgICAgICAg
ICogVXNlckludGVyZmFjZS9Db250cm9sbGVycy9UYXJnZXRNYW5hZ2VyLmpzOgorICAgICAgICAo
V0kuVGFyZ2V0TWFuYWdlcik6CisgICAgICAgIChXSS5UYXJnZXRNYW5hZ2VyLnByb3RvdHlwZS5y
ZW1vdmVUYXJnZXQpOgorICAgICAgICAoV0kuVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUuY3JlYXRl
TXVsdGlwbGV4aW5nQmFja2VuZFRhcmdldCk6CisgICAgICAgIChXSS5UYXJnZXRNYW5hZ2VyLnBy
b3RvdHlwZS5jcmVhdGVEaXJlY3RCYWNrZW5kVGFyZ2V0KToKKyAgICAgICAgKFdJLlRhcmdldE1h
bmFnZXIucHJvdG90eXBlLnRhcmdldENyZWF0ZWQpOgorICAgICAgICAoV0kuVGFyZ2V0TWFuYWdl
ci5wcm90b3R5cGUuZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQpOgorICAgICAgICAoV0kuVGFy
Z2V0TWFuYWdlci5wcm90b3R5cGUudGFyZ2V0RGVzdHJveWVkKToKKyAgICAgICAgKFdJLlRhcmdl
dE1hbmFnZXIucHJvdG90eXBlLmRpc3BhdGNoTWVzc2FnZUZyb21UYXJnZXQpOgorICAgICAgICAo
V0kuVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUuX2NoZWNrQW5kSGFuZGxlUGFnZVRhcmdldFRyYW5z
aXRpb24pOgorICAgICAgICAoV0kuVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUuX2NoZWNrQW5kSGFu
ZGxlUGFnZVRhcmdldFRlcm1pbmF0aW9uKToKKyAgICAgICAgKFdJLlRhcmdldE1hbmFnZXIucHJv
dG90eXBlLl9pbml0aWFsaXplQmFja2VuZFRhcmdldCk6CisgICAgICAgIChXSS5UYXJnZXRNYW5h
Z2VyLnByb3RvdHlwZS5faW5pdGlhbGl6ZVBhZ2VUYXJnZXQpOgorICAgICAgICAoV0kuVGFyZ2V0
TWFuYWdlci5wcm90b3R5cGUuX3RyYW5zaXRpb25QYWdlVGFyZ2V0KToKKyAgICAgICAgKFdJLlRh
cmdldE1hbmFnZXIucHJvdG90eXBlLl90ZXJtaW5hdGVQYWdlVGFyZ2V0KToKKyAgICAgICAgKFdJ
LlRhcmdldE1hbmFnZXIucHJvdG90eXBlLl9yZXNldE1haW5FeGVjdXRpb25Db250ZXh0KToKKyAg
ICAgICAgKFdJLlRhcmdldE1hbmFnZXIucHJvdG90eXBlLl9yZWRpcmVjdEdsb2JhbEFnZW50c1Rv
Q29ubmVjdGlvbik6CisgICAgICAgICogVXNlckludGVyZmFjZS9Qcm90b2NvbC9Db25uZWN0aW9u
LmpzOgorICAgICAgICAoSW5zcGVjdG9yQmFja2VuZC5Xb3JrZXJDb25uZWN0aW9uLnNlbmRNZXNz
YWdlVG9CYWNrZW5kKToKKyAgICAgICAgKEluc3BlY3RvckJhY2tlbmQuV29ya2VyQ29ubmVjdGlv
bik6CisgICAgICAgIChJbnNwZWN0b3JCYWNrZW5kLlRhcmdldENvbm5lY3Rpb24uc2VuZE1lc3Nh
Z2VUb0JhY2tlbmQpOgorICAgICAgICAoSW5zcGVjdG9yQmFja2VuZC5UYXJnZXRDb25uZWN0aW9u
KToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Byb3RvY29sL1RhcmdldC5qczoKKyAgICAgICAg
KFdJLlRhcmdldC5wcm90b3R5cGUuZGVzdHJveSk6IE1hcmsgdGFyZ2V0IGFzIGRlc3Ryb3llZCB0
byBkaXN0aW5ndWlzaCBleHBlY3RlZCBjb21tYW5kIGVycm9ycyBmcm9tCisgICAgICAgIGdlbnVp
bmUgZmFpbHVyZXMuCisKKyAgICAgICAgKFdJLlRhcmdldC5wcm90b3R5cGUuaXNEZXN0cm95ZWQp
OgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUHJvdG9jb2wvVGFyZ2V0T2JzZXJ2ZXIuanM6IFNp
bmNlIHRoZSBmcm9udC1lbmQgZG9lc24ndAorICAgICAgICBzZW5kIGNvbW1hbmRzIHRvIHRoZSBw
cm92aXNpb25hbCB0YXJnZXRzIHlldCwgaXQgaGFzIHRvIGlnbm9yZSBhbGwgYWN0aXZpdGllcwor
ICAgICAgICByZWxhdGVkIHRvIHByb3Zpc2lvbmFsIHBhZ2VzLiBGb3IgdGhhdCByZWFzb24gd2Ug
bmVlZCB0d28gc2V0cyB0byBrZWVwIHRyYWNrIG9mCisgICAgICAgIC0gcHJvdmlzaW9uYWwgcGFn
ZXMgdGhhdCB3ZXJlIGRlc3Ryb3llZCBhbmQgbmV2ZXIgY29tbWl0dGVkCisgICAgICAgIC0gb2xk
IHBhZ2VzIHdoaWNoIHdlcmUgcmVwbGFjZWQgYnkgY29tbWl0dGVkIHBhZ2UgYW5kIGZvciB3aGlj
aCBmb2xsb3dpbmcgdGFyZ2V0RGVzdHJveWVkCisgICAgICAgIGV2ZW50IHNob3VsZCBiZSBpZ25v
cmVkCisgICAgICAgIEJldHRlciBzdXBwb3J0IGZvciBwcm92aXNpb25hbCB0YXJnZXRzIHdpbGwg
YmUgYWRkZWQgdG8gZnJvbnRlbmQgaW4gYSBzZXBhcmF0ZSBjaGFuZ2UuCisgICAgICAgIChXSS5U
YXJnZXRPYnNlcnZlcik6CisgICAgICAgIChXSS5UYXJnZXRPYnNlcnZlci5wcm90b3R5cGUudGFy
Z2V0Q3JlYXRlZCk6CisgICAgICAgIChXSS5UYXJnZXRPYnNlcnZlci5wcm90b3R5cGUuZGlkQ29t
bWl0UHJvdmlzaW9uYWxUYXJnZXQpOiBGb3Igbm93IGNvbnZlcnQgdGhlIGV2ZW50IGludG8gYSBz
dWJzZXF1ZW5jZQorICAgICAgICBvZiB0YXJnZXREZXN0cm95ZWQvdGFyZ2V0Q3JlYXRlZCBldmVu
dHMgd2hpY2ggbWF0Y2hlcyBwcmV2aW91cyBiZWhhdmlvci4KKworICAgICAgICAoV0kuVGFyZ2V0
T2JzZXJ2ZXIucHJvdG90eXBlLnRhcmdldERlc3Ryb3llZCk6CisgICAgICAgIChXSS5UYXJnZXRP
YnNlcnZlci5wcm90b3R5cGUuZGlzcGF0Y2hNZXNzYWdlRnJvbVRhcmdldCk6CisgICAgICAgICog
VXNlckludGVyZmFjZS9UZXN0L1Rlc3QuanM6CisgICAgICAgIChXSS50cmFuc2l0aW9uUGFnZVRh
cmdldCk6CisgICAgICAgIChXSS50ZXJtaW5hdGVQYWdlVGFyZ2V0KToKKwogMjAxOS0xMC0xOCAg
RGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3Rv
cjogRWxlbWVudHM6IGFsbG93IFdlYktpdCBlbmdpbmVlcnMgdG8gZWRpdCBVc2VyQWdlbnQgc2hh
ZG93IHRyZWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGY5OWJmMDljN2ZmY2E4MTEwN2RjMWZhNDcxZDJlYTBkNDM2
M2ExMzEuLjQ1MGJiZDliYzRjZjc2NDUxYTAwMTI5MjkzMGEwNDlhNGJiMWRkN2EgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsODIgQEAKKzIwMTktMDktMjcgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjogbm90aWZ5IGluc3BlY3RvciB3
aGVuIHByb3Zpc2lvbmFsIHBhZ2UgaXMgY3JlYXRlZCwgY29tbWl0dGVkIGFuZCBkZXN0cm95ZWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjcwNAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRhcmdldC50
YXJnZXRDcmVhdGVkIGV2ZW50IGlzIG5vdyBnZW5lcmF0ZWQgZm9yIHByb3Zpc2lvbmFsIHBhZ2Vz
IGFzIHdlbGwgYXMgZm9yIHJlZ3VsYXIKKyAgICAgICAgb25lcy4gVGhpcyBpcyB0aGUgZmlyc3Qg
c3RlcCB0b3dhcmQgcmVhdHRhY2hpbmcgaW5zcGVjdG9yIGVhcmxpZXIgZHVyaW5nIFBTT04uIElu
IHRoZSBmdXR1cmUKKyAgICAgICAgaWYgZGVidWdnaW5nIGlzIGluIHByb2dyZXNzIHRoZSBwcm92
aXNpb25hbCB0YXJnZXQgKHBhZ2UpIHdpbGwgYmUgcGF1c2VkIHVudGlsIGEgc2lnbmFsIGZyb20K
KyAgICAgICAgaW5zcGVjdG9yIGZyb250ZW5kLiBUaGlzIHdpbGwgZW5hYmxlIHRoZSBmcm9udGVu
ZCBjb25maWd1cmUgYWxsIGFnZW50cyBiZWZvcmUgbmF2aWdhdGlvbiBzdGFydHMuCisKKyAgICAg
ICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRp
Y2F0aW9uUGFuZWwuY3BwOgorICAgICAgICAoQVBJOjpXZWJBdXRoZW50aWNhdGlvblBhbmVsOjpX
ZWJBdXRoZW50aWNhdGlvblBhbmVsKTogQWRkZWQgZXhwbGljaXQgbmFtZXNwYWNlIHNwZWNpZmll
cgorICAgICAgICB0byB0aGUgY29uc3RydWN0b3IncyBhcmd1bWVudCBhcyBvdGhlcndpc2UgY29t
cGlsYXRpb24gZmFpbHMgZHVlIHRvIGNvbmZsaWN0IGJldHdlZW4gQVBJOjpTdHJpbmcKKyAgICAg
ICAgYW5kIFdURjo6U3RyaW5nLgorCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3RvclRhcmdl
dFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvclRhcmdldFByb3h5Ojpjb25uZWN0KToKKyAg
ICAgICAgKFdlYktpdDo6SW5zcGVjdG9yVGFyZ2V0UHJveHk6OmRpc2Nvbm5lY3QpOgorICAgICAg
ICAoV2ViS2l0OjpJbnNwZWN0b3JUYXJnZXRQcm94eTo6c2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tl
bmQpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JUYXJnZXRQcm94eTo6ZGlkQ29tbWl0UHJv
dmlzaW9uYWxUYXJnZXQpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JUYXJnZXRQcm94eTo6
aXNQcm92aXNpb25hbCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvclRhcmdldFBy
b3h5OjpwcmV2aW91c1RhcmdldElEIGNvbnN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVj
dG9yVGFyZ2V0UHJveHkuaDogVGFyZ2V0IHByb3h5IGNhbiBzdGFydCBhcyBhIHByb3Zpc2lvbmFs
IHRhcmdldCAod2l0aCBhIHBvaW50ZXIgdG8KKyAgICAgICAgUHJvdmlzaW9uYWxQYWdlUHJveHkp
IGFuZCBsYXRlciBlaXRoZXIgYmUgY29tbWl0dGVkIG9yIGRlc3Ryb3llZC4KKworICAgICAgICAq
IFVJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBy
b3Zpc2lvbmFsUGFnZVByb3h5OjpQcm92aXNpb25hbFBhZ2VQcm94eSk6CisgICAgICAgIChXZWJL
aXQ6OlByb3Zpc2lvbmFsUGFnZVByb3h5Ojp+UHJvdmlzaW9uYWxQYWdlUHJveHkpOgorICAgICAg
ICAoV2ViS2l0OjpQcm92aXNpb25hbFBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOiBGb3J3
YXJkIGluc3BlY3RvciBtZXNzYWdlcyB0byBwYXJlbnQgcGFnZSdzIFdlYlBhZ2VJbnNwZWN0b3JD
b250cm9sbGVyLgorICAgICAgICBTaW5jZSBlYWNoIFdlYlBhZ2UgaGFzIGEgdW5pcXVlIGlkZW50
aWZpZXIgdGhlIHRhcmdldCBpZHMgd2lsbCBiZSBnbG9iYWxseSB1bmlxdWUgYW5kIHRoZXJlIGlz
IG5vIHJpc2sgb2YgY29sbGlzaW9ucy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9Qcm92aXNpb25h
bFBhZ2VQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpQcm92aXNpb25hbFBhZ2VQcm94eTo6cGFn
ZSBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Z2V0VGFyZ2V0SUQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6V2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6Y2xlYXJUYXJnZXRz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmNyZWF0ZUlu
c3BlY3RvclRhcmdldCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VJbnNwZWN0b3JDb250cm9s
bGVyOjpkZXN0cm95SW5zcGVjdG9yVGFyZ2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUlu
c3BlY3RvckNvbnRyb2xsZXI6OmRpZENyZWF0ZVByb3Zpc2lvbmFsUGFnZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpkaWREZXN0cm95UHJvdmlzaW9uYWxQ
YWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENv
bW1pdFByb3Zpc2lvbmFsUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VJbnNwZWN0b3JD
b250cm9sbGVyOjphZGRUYXJnZXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlSW5zcGVj
dG9yQ29udHJvbGxlci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0QWdlbnQuY3BwOiBSZW1vdmVkLiBNZXJnZWQgdGhpcyBhZ2VudCBpbnRvIEluc3BlY3RvclRh
cmdldEFnZW50LgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdl
bnQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6bV9yZXNldFJlY2VudENyYXNoQ291bnRUaW1lcik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZmluaXNoQXR0YWNoaW5nVG9XZWJQcm9jZXNzKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpjb21taXRQcm92aXNpb25hbFBhZ2UpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDogTW92ZWQgdGhlIHRhcmdldCBtYW5hZ2VtZW50
IGxvZ2ljIGludG8gV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuCisgICAgICAgIFdlYlBhZ2VQ
cm94eS9Qcm92aXNpb25hbFBhZ2VQcm94eSBhcmUgZXhwZWN0ZWQgdG8gbm90aWZpeSBpdCBhYm91
dCBrZXkgbGlmZWN5Y2xlIGV2ZW50cyBhbmQgYWxzbworICAgICAgICBmb3J3YXJkIHRvIGl0IG1l
c3NhZ2VzIGZyb20gaW5zcGVjdG9yIGluIHRoZSBpbnNwZWN0ZWQgV2ViUHJvY2Vzcy4gSG93IGl0
IHRyYW5zbGF0ZXMgdG8gVGFyZ2V0CisgICAgICAgIGV2ZW50cyBpcyBpbnNwZWN0b3IncyBidXNp
bmVzcy4KKworICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZUluc3BlY3RvclRhcmdldDo6aWRlbnRpZmllciBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OmNvbm5lY3QpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0OjpkaXNjb25uZWN0KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZUluc3BlY3RvclRhcmdldDo6dG9UYXJnZXRJRCk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaDogTWFkZSB0aGUg
dGFyZ2V0IG93biBmcm9udGVuZCBjaGFubmVsIGluc3RhbmNlIGFzIGl0J3MgdGhlCisgICAgICAg
IG9ubHkgcGxhY2Ugd2hlcmUgdGhlIHBhZ2Ugc3BlY2lmaWMgY2hhbm5lbCBpcyB1c2VkLgorCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9s
bGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xs
ZXI6OnJlbW92ZVRhcmdldCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRDb250cm9sbGVyOjpjb25uZWN0SW5zcGVjdG9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6OmRpc2Nvbm5lY3RJbnNwZWN0b3IpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5o
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJv
bnRlbmRDaGFubmVsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUluc3BlY3RvclRhcmdl
dEZyb250ZW5kQ2hhbm5lbDo6V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw6
OnNlbmRNZXNzYWdlVG9Gcm9udGVuZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaDogVGhlIGNoYW5uZWwncyBsaWZl
dGltZSBpcyBtYW5hZ2VkIGJ5IG93bmluZworICAgICAgICB0YXJnZXQuIE5vIG5lZWQgdG8gcmVm
ZXJlbmNlIGNvdW50IGl0LgorCiAyMDE5LTEwLTIxICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNn
YXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBPYmplY3RzIGNhdGVnb3J5IGluIGVt
b2ppIHBpY2tlciBpcyBlbXB0eQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JUYXJnZXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yVGFyZ2V0LmgKaW5kZXggYmUxMWNlMzM4YTNlYzZlODcwNWZlMjAwNGJiNjk0
OGM1YTYyNWY1OS4uYTlmMDRiOGEwYzlhZmFlZWE0ZmU4YzBhNGQwN2Q4MjMwYTljMzU2MCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUYXJnZXQu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRhcmdldC5o
CkBAIC00Niw5ICs0NiwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTdHJpbmcgaWRlbnRpZmll
cigpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEluc3BlY3RvclRhcmdldFR5cGUgdHlwZSgpIGNv
bnN0ID0gMDsKIAorICAgIHZpcnR1YWwgYm9vbCBpc1Byb3Zpc2lvbmFsKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKwogICAgIC8vIENvbm5lY3Rpb24gbWFuYWdlbWVudC4KLSAgICB2aXJ0dWFs
IHZvaWQgY29ubmVjdChGcm9udGVuZENoYW5uZWwmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRp
c2Nvbm5lY3QoRnJvbnRlbmRDaGFubmVsJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0
KEZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlzY29ubmVjdCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2VuZE1lc3NhZ2VUb1RhcmdldEJh
Y2tlbmQoY29uc3QgU3RyaW5nJikgPSAwOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQu
Y3BwCmluZGV4IGM4MDk2MDY0YmFkZjllZmE4ODg2NjBmYTY0NjkzN2JkMDljMTE4M2YuLmRlZDQ2
ODE4OTczNWI5MWIzNDk5OTEwNzI0NTkyZjdiMTczMjRiMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJn
ZXRBZ2VudC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIElu
c3BlY3RvclRhcmdldEFnZW50OjpJbnNwZWN0b3JUYXJnZXRBZ2VudChGcm9udGVuZFJvdXRlciYg
ZnJvbnRlbmRSb3V0ZXIsIEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlcikKICAg
ICA6IEluc3BlY3RvckFnZW50QmFzZSgiVGFyZ2V0Il9zKQorICAgICwgbV9yb3V0ZXIoZnJvbnRl
bmRSb3V0ZXIpCiAgICAgLCBtX2Zyb250ZW5kRGlzcGF0Y2hlcihtYWtlVW5pcXVlPFRhcmdldEZy
b250ZW5kRGlzcGF0Y2hlcj4oZnJvbnRlbmRSb3V0ZXIpKQogICAgICwgbV9iYWNrZW5kRGlzcGF0
Y2hlcihUYXJnZXRCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGJhY2tlbmREaXNwYXRjaGVyLCB0
aGlzKSkKIHsKQEAgLTg4LDEwICs4OSwxMyBAQCBzdGF0aWMgUHJvdG9jb2w6OlRhcmdldDo6VGFy
Z2V0SW5mbzo6VHlwZSB0YXJnZXRUeXBlVG9Qcm90b2NvbFR5cGUoSW5zcGVjdG9yVGFyZwogCiBz
dGF0aWMgUmVmPFByb3RvY29sOjpUYXJnZXQ6OlRhcmdldEluZm8+IGJ1aWxkVGFyZ2V0SW5mb09i
amVjdChjb25zdCBJbnNwZWN0b3JUYXJnZXQmIHRhcmdldCkKIHsKLSAgICByZXR1cm4gUHJvdG9j
b2w6OlRhcmdldDo6VGFyZ2V0SW5mbzo6Y3JlYXRlKCkKKyAgICBhdXRvIHJlc3VsdCA9IFByb3Rv
Y29sOjpUYXJnZXQ6OlRhcmdldEluZm86OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRUYXJnZXRJZCh0
YXJnZXQuaWRlbnRpZmllcigpKQogICAgICAgICAuc2V0VHlwZSh0YXJnZXRUeXBlVG9Qcm90b2Nv
bFR5cGUodGFyZ2V0LnR5cGUoKSkpCiAgICAgICAgIC5yZWxlYXNlKCk7CisgICAgaWYgKHRhcmdl
dC5pc1Byb3Zpc2lvbmFsKCkpCisgICAgICAgIHJlc3VsdC0+c2V0SXNQcm92aXNpb25hbCh0cnVl
KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB2b2lkIEluc3BlY3RvclRhcmdldEFnZW50Ojp0
YXJnZXRDcmVhdGVkKEluc3BlY3RvclRhcmdldCYgdGFyZ2V0KQpAQCAtMTAyLDcgKzEwNiw3IEBA
IHZvaWQgSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OnRhcmdldENyZWF0ZWQoSW5zcGVjdG9yVGFyZ2V0
JiB0YXJnZXQpCiAgICAgaWYgKCFtX2lzQ29ubmVjdGVkKQogICAgICAgICByZXR1cm47CiAKLSAg
ICB0YXJnZXQuY29ubmVjdChmcm9udGVuZENoYW5uZWwoKSk7CisgICAgdGFyZ2V0LmNvbm5lY3Qo
Y29ubmVjdGlvblR5cGUoKSk7CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+dGFyZ2V0Q3Jl
YXRlZChidWlsZFRhcmdldEluZm9PYmplY3QodGFyZ2V0KSk7CiB9CkBAIC0xMTQsMjcgKzExOCw0
MCBAQCB2b2lkIEluc3BlY3RvclRhcmdldEFnZW50Ojp0YXJnZXREZXN0cm95ZWQoSW5zcGVjdG9y
VGFyZ2V0JiB0YXJnZXQpCiAgICAgaWYgKCFtX2lzQ29ubmVjdGVkKQogICAgICAgICByZXR1cm47
CiAKLSAgICB0YXJnZXQuZGlzY29ubmVjdChmcm9udGVuZENoYW5uZWwoKSk7CisgICAgdGFyZ2V0
LmRpc2Nvbm5lY3QoKTsKIAogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT50YXJnZXREZXN0cm95
ZWQodGFyZ2V0LmlkZW50aWZpZXIoKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6
OmNvbm5lY3RUb1RhcmdldHMoKQordm9pZCBJbnNwZWN0b3JUYXJnZXRBZ2VudDo6ZGlkQ29tbWl0
UHJvdmlzaW9uYWxUYXJnZXQoY29uc3QgU3RyaW5nJiBvbGRUYXJnZXRJRCwgY29uc3QgU3RyaW5n
JiBjb21taXR0ZWRUYXJnZXRJRCkKIHsKLSAgICBhdXRvJiBjaGFubmVsID0gZnJvbnRlbmRDaGFu
bmVsKCk7CisgICAgaWYgKCFtX2lzQ29ubmVjdGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBh
dXRvKiB0YXJnZXQgPSBtX3RhcmdldHMuZ2V0KGNvbW1pdHRlZFRhcmdldElEKTsKKyAgICBpZiAo
IXRhcmdldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRp
ZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0KG9sZFRhcmdldElELCBidWlsZFRhcmdldEluZm9PYmpl
Y3QoKnRhcmdldCkpOworfQogCitGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlIEluc3Bl
Y3RvclRhcmdldEFnZW50Ojpjb25uZWN0aW9uVHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
cm91dGVyLmhhc0xvY2FsRnJvbnRlbmQoKSA/IEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpD
b25uZWN0aW9uVHlwZTo6TG9jYWwgOiBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVj
dGlvblR5cGU6OlJlbW90ZTsKK30KKwordm9pZCBJbnNwZWN0b3JUYXJnZXRBZ2VudDo6Y29ubmVj
dFRvVGFyZ2V0cygpCit7CiAgICAgZm9yIChJbnNwZWN0b3JUYXJnZXQqIHRhcmdldCA6IG1fdGFy
Z2V0cy52YWx1ZXMoKSkgewotICAgICAgICB0YXJnZXQtPmNvbm5lY3QoY2hhbm5lbCk7CisgICAg
ICAgIHRhcmdldC0+Y29ubmVjdChjb25uZWN0aW9uVHlwZSgpKTsKICAgICAgICAgbV9mcm9udGVu
ZERpc3BhdGNoZXItPnRhcmdldENyZWF0ZWQoYnVpbGRUYXJnZXRJbmZvT2JqZWN0KCp0YXJnZXQp
KTsKICAgICB9CiB9CiAKIHZvaWQgSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OmRpc2Nvbm5lY3RGcm9t
VGFyZ2V0cygpCiB7Ci0gICAgYXV0byYgY2hhbm5lbCA9IGZyb250ZW5kQ2hhbm5lbCgpOwotCiAg
ICAgZm9yIChJbnNwZWN0b3JUYXJnZXQqIHRhcmdldCA6IG1fdGFyZ2V0cy52YWx1ZXMoKSkKLSAg
ICAgICAgdGFyZ2V0LT5kaXNjb25uZWN0KGNoYW5uZWwpOworICAgICAgICB0YXJnZXQtPmRpc2Nv
bm5lY3QoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0
QWdlbnQuaAppbmRleCAwYjFhMDRlY2NlODc5ZDViYzYwZjQ4MGZmNDllOTBkMzk4MjMyNDViLi4z
OGNiMzE4OTg2YjMxYzRkZWQxOWJhOWJlYWU3ODU1ZDJiNTRjMjNhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRh
cmdldEFnZW50LmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkluc3BlY3RvckFnZW50
QmFzZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oIgorI2luY2x1
ZGUgIkluc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250
ZW5kRGlzcGF0Y2hlcnMuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCkBAIC00MCw2ICs0
MSw3IEBAIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEluc3BlY3RvclRhcmdldEFnZW50IDogcHVi
bGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljCiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
SW5zcGVjdG9yVGFyZ2V0QWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgorICAgIEluc3BlY3RvclRhcmdldEFnZW50KEZyb250ZW5kUm91dGVyJiwgQmFja2VuZERp
c3BhdGNoZXImKTsKICAgICB+SW5zcGVjdG9yVGFyZ2V0QWdlbnQoKSBvdmVycmlkZTsKIAogICAg
IC8vIEluc3BlY3RvckFnZW50QmFzZQpAQCAtNTIsMTkgKzU0LDE4IEBAIHB1YmxpYzoKICAgICAv
LyBUYXJnZXQgbGlmZWN5Y2xlLgogICAgIHZvaWQgdGFyZ2V0Q3JlYXRlZChJbnNwZWN0b3JUYXJn
ZXQmKTsKICAgICB2b2lkIHRhcmdldERlc3Ryb3llZChJbnNwZWN0b3JUYXJnZXQmKTsKKyAgICB2
b2lkIGRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0KGNvbnN0IFN0cmluZyYgb2xkVGFyZ2V0SUQs
IGNvbnN0IFN0cmluZyYgY29tbWl0dGVkVGFyZ2V0SUQpOwogCiAgICAgLy8gVGFyZ2V0IG1lc3Nh
Z2VzLgogICAgIHZvaWQgc2VuZE1lc3NhZ2VGcm9tVGFyZ2V0VG9Gcm9udGVuZChjb25zdCBTdHJp
bmcmIHRhcmdldElkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwogCi1wcm90ZWN0ZWQ6Ci0gICAg
SW5zcGVjdG9yVGFyZ2V0QWdlbnQoRnJvbnRlbmRSb3V0ZXImLCBCYWNrZW5kRGlzcGF0Y2hlciYp
OwotCi0gICAgdmlydHVhbCBGcm9udGVuZENoYW5uZWwmIGZyb250ZW5kQ2hhbm5lbCgpID0gMDsK
LQogcHJpdmF0ZToKKyAgICAvLyBGcm9udGVuZENoYW5uZWwKKyAgICBGcm9udGVuZENoYW5uZWw6
OkNvbm5lY3Rpb25UeXBlIGNvbm5lY3Rpb25UeXBlKCkgY29uc3Q7CiAgICAgdm9pZCBjb25uZWN0
VG9UYXJnZXRzKCk7CiAgICAgdm9pZCBkaXNjb25uZWN0RnJvbVRhcmdldHMoKTsKIAorICAgIElu
c3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXImIG1fcm91dGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxU
YXJnZXRGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOwogICAgIFJlZjxU
YXJnZXRCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKICAgICBIYXNoTWFw
PFN0cmluZywgSW5zcGVjdG9yVGFyZ2V0Kj4gbV90YXJnZXRzOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9UYXJnZXQuanNvbiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvVGFyZ2V0Lmpzb24KaW5kZXggMzk0ZmVk
ZGMyZjA1Y2NmYWUxZDQ0NGI1YWJjZTY3ZTk4MmVhZjA4NS4uMmU1NjIzMDc1OTA0ODg2ZWZjMjgw
MTg1YTM1MDhlY2IzMzM5YTlmNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9wcm90b2NvbC9UYXJnZXQuanNvbgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3Byb3RvY29sL1RhcmdldC5qc29uCkBAIC05LDcgKzksOCBAQAogICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogIkRlc2NyaXB0aW9uIG9mIGEgdGFyZ2V0LiIsCiAgICAgICAgICAg
ICAicHJvcGVydGllcyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRhcmdldElkIiwg
InR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIGZvciB0
aGUgdGFyZ2V0LiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInR5cGUiLCAidHlwZSI6
ICJzdHJpbmciLCAiZW51bSI6IFsicGFnZSIsICJzZXJ2aWNlLXdvcmtlciIsICJ3b3JrZXIiXSB9
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0eXBlIiwgInR5cGUiOiAic3RyaW5nIiwgImVu
dW0iOiBbInBhZ2UiLCAic2VydmljZS13b3JrZXIiLCAid29ya2VyIl0gfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImlzUHJvdmlzaW9uYWwiLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlv
bmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIldoZXRoZXIgdGhpcyBpcyBhIHByb3Zpc2lvbmFs
IHBhZ2UgdGFyZ2V0LiIgfQogICAgICAgICAgICAgXQogICAgICAgICB9CiAgICAgXSwKQEAgLTM2
LDYgKzM3LDEzIEBACiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0YXJnZXRJZCIsICJ0eXBl
IjogInN0cmluZyIgfQogICAgICAgICAgICAgXQogICAgICAgICB9LAorICAgICAgICB7CisgICAg
ICAgICAgICAibmFtZSI6ICJkaWRDb21taXRQcm92aXNpb25hbFRhcmdldCIsCisgICAgICAgICAg
ICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByZXZpb3VzVGFy
Z2V0SWQiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiSUQgb2YgdGhlIHRhcmdl
dCBjb21taXR0ZWQgdGFyZ2V0IGlzIHN3YXBwZWQgd2l0aC4iIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJ0YXJnZXRJbmZvIiwgIiRyZWYiOiAiVGFyZ2V0SW5mbyIsICJkZXNjcmlwdGlv
biI6ICJDb21taXR0ZWQgdGFyZ2V0IGluZm8uIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0s
CiAgICAgICAgIHsKICAgICAgICAgICAgICJuYW1lIjogImRpc3BhdGNoTWVzc2FnZUZyb21UYXJn
ZXQiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggMmM2N2I3MjQ0ODMxZjYwNWYw
OGRmNDEyNWYyMWNlZWM3MWM5MGNhOS4uZWE1ZTkzNTU4MGRmYjBmNTc3NzlhZDhiYTBkYTU3YjVj
NzA1MzE3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmNwcApAQCAtMzQ0LDE3ICszNDQsNiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OnNob3coKQogICAgICAgICBjb25uZWN0RnJvbnRlbmQoKmZyb250ZW5kQ2hhbm5lbCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0SXNVbmRlclRlc3QoYm9vbCB2YWx1ZSkKLXsK
LSAgICBpZiAodmFsdWUgPT0gbV9pc1VuZGVyVGVzdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9pc1VuZGVyVGVzdCA9IHZhbHVlOwotCi0gICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzI2NzY4NjI4
PiBUcnkgdG8gY2F0Y2ggc3VzcGljaW91cyBzY2VuYXJpb3Mgd2hlcmUgd2UgbWF5IGhhdmUgYSBk
YW5nbGluZyBmcm9udGVuZCB3aGlsZSBydW5uaW5nIHRlc3RzLgotICAgIFJFTEVBU0VfQVNTRVJU
KCFtX2lzVW5kZXJUZXN0IHx8ICFtX2Zyb250ZW5kUm91dGVyLT5oYXNGcm9udGVuZHMoKSk7Ci19
Ci0KIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChj
b25zdCBTdHJpbmcmIHNjcmlwdCkKIHsKICAgICBlbnN1cmVJbnNwZWN0b3JBZ2VudCgpLmV2YWx1
YXRlRm9yVGVzdEluRnJvbnRlbmQoc2NyaXB0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IDUxODZkNTcwMTczZGQ5MTFlZTQ1MWViYmJm
YjIyYjEzYWVlZjU3NTkuLjkwYzIzZDU2ZDJkODViNzAwMGRiZTRjNDdhYzU0ZTA2NzkwYjc1ZDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApA
QCAtMTAxLDcgKzEwMSw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRpZENv
bXBvc2l0ZShGcmFtZSYpOwogCiAgICAgYm9vbCBpc1VuZGVyVGVzdCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNVbmRlclRlc3Q7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldElzVW5kZXJUZXN0
KGJvb2wpOworICAgIHZvaWQgc2V0SXNVbmRlclRlc3QoYm9vbCBpc1VuZGVyVGVzdCkgeyBtX2lz
VW5kZXJUZXN0ID0gaXNVbmRlclRlc3Q7IH0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV2YWx1
YXRlRm9yVGVzdEluRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBzY3JpcHQpOwogCiAgICAgSW5zcGVj
dG9yQ2xpZW50KiBpbnNwZWN0b3JDbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvckNs
aWVudDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
QmFzZS9NYWluLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9N
YWluLmpzCmluZGV4IDQwNzBmYmUxNjgyZjg2YTVlMTg2YjMyYjhkMDU5MmM1ZGYwNWZlZjIuLjFh
YmY4OWVhNDI1NGU0ZWFhNjU0ZjJmYjY2MDViMGI4M2RkN2MxM2YgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcworKysgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01haW4uanMKQEAgLTE4Myw3MCArMTgz
LDYgQEAgV0kubG9hZGVkID0gZnVuY3Rpb24oKQogICAgICAgICBXSS50YXJnZXRNYW5hZ2VyLmNy
ZWF0ZURpcmVjdEJhY2tlbmRUYXJnZXQoKTsKIH07CiAKLVdJLmluaXRpYWxpemVCYWNrZW5kVGFy
Z2V0ID0gZnVuY3Rpb24odGFyZ2V0KQotewotICAgIGNvbnNvbGUuYXNzZXJ0KCFXSS5tYWluVGFy
Z2V0KTsKLQotICAgIFdJLmJhY2tlbmRUYXJnZXQgPSB0YXJnZXQ7Ci0KLSAgICBXSS5yZXNldE1h
aW5FeGVjdXRpb25Db250ZXh0KCk7Ci0KLSAgICBXSS5fdGFyZ2V0c0F2YWlsYWJsZVByb21pc2Uu
cmVzb2x2ZSgpOwotfTsKLQotV0kuaW5pdGlhbGl6ZVBhZ2VUYXJnZXQgPSBmdW5jdGlvbih0YXJn
ZXQpCi17Ci0gICAgY29uc29sZS5hc3NlcnQoV0kuc2hhcmVkQXBwLmlzV2ViRGVidWdnYWJsZSgp
KTsKLSAgICBjb25zb2xlLmFzc2VydCh0YXJnZXQudHlwZSA9PT0gV0kuVGFyZ2V0VHlwZS5QYWdl
IHx8IHRhcmdldCBpbnN0YW5jZW9mIFdJLkRpcmVjdEJhY2tlbmRUYXJnZXQpOwotCi0gICAgV0ku
cGFnZVRhcmdldCA9IHRhcmdldDsKLQotICAgIFdJLnJlc2V0TWFpbkV4ZWN1dGlvbkNvbnRleHQo
KTsKLX07Ci0KLVdJLnRyYW5zaXRpb25QYWdlVGFyZ2V0ID0gZnVuY3Rpb24odGFyZ2V0KQotewot
ICAgIGNvbnNvbGUuYXNzZXJ0KCFXSS5wYWdlVGFyZ2V0KTsKLSAgICBjb25zb2xlLmFzc2VydChX
SS5zaGFyZWRBcHAuZGVidWdnYWJsZVR5cGUgPT09IFdJLkRlYnVnZ2FibGVUeXBlLldlYlBhZ2Up
OwotICAgIGNvbnNvbGUuYXNzZXJ0KHRhcmdldC50eXBlID09PSBXSS5UYXJnZXRUeXBlLlBhZ2Up
OwotCi0gICAgV0kucGFnZVRhcmdldCA9IHRhcmdldDsKLQotICAgIFdJLnJlc2V0TWFpbkV4ZWN1
dGlvbkNvbnRleHQoKTsKLQotICAgIC8vIEFjdGlvbnMgdG8gdHJhbnNpdGlvbiB0aGUgcGFnZSB0
YXJnZXQuCi0gICAgV0kubm90aWZpY2F0aW9ucy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV0ku
Tm90aWZpY2F0aW9uLlRyYW5zaXRpb25QYWdlVGFyZ2V0KTsKLSAgICBXSS5kb21NYW5hZ2VyLnRy
YW5zaXRpb25QYWdlVGFyZ2V0KCk7Ci0gICAgV0kubmV0d29ya01hbmFnZXIudHJhbnNpdGlvblBh
Z2VUYXJnZXQoKTsKLSAgICBXSS50aW1lbGluZU1hbmFnZXIudHJhbnNpdGlvblBhZ2VUYXJnZXQo
KTsKLX07Ci0KLVdJLnRlcm1pbmF0ZVBhZ2VUYXJnZXQgPSBmdW5jdGlvbih0YXJnZXQpCi17Ci0g
ICAgY29uc29sZS5hc3NlcnQoV0kucGFnZVRhcmdldCk7Ci0gICAgY29uc29sZS5hc3NlcnQoV0ku
cGFnZVRhcmdldCA9PT0gdGFyZ2V0KTsKLSAgICBjb25zb2xlLmFzc2VydChXSS5zaGFyZWRBcHAu
ZGVidWdnYWJsZVR5cGUgPT09IFdJLkRlYnVnZ2FibGVUeXBlLldlYlBhZ2UpOwotCi0gICAgLy8g
UmVtb3ZlIGFueSBXb3JrZXIgdGFyZ2V0cyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYWdlLgotICAg
IGxldCB3b3JrZXJUYXJnZXRzID0gV0kudGFyZ2V0cy5maWx0ZXIoKHgpID0+IHgudHlwZSA9PT0g
V0kuVGFyZ2V0VHlwZS5Xb3JrZXIpOwotICAgIGZvciAobGV0IHdvcmtlclRhcmdldCBvZiB3b3Jr
ZXJUYXJnZXRzKQotICAgICAgICBXSS53b3JrZXJNYW5hZ2VyLndvcmtlclRlcm1pbmF0ZWQod29y
a2VyVGFyZ2V0LmlkZW50aWZpZXIpOwotCi0gICAgV0kucGFnZVRhcmdldCA9IG51bGw7Ci19Owot
Ci1XSS5yZXNldE1haW5FeGVjdXRpb25Db250ZXh0ID0gZnVuY3Rpb24oKQotewotICAgIGlmIChX
SS5tYWluVGFyZ2V0IGluc3RhbmNlb2YgV0kuTXVsdGlwbGV4aW5nQmFja2VuZFRhcmdldCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKFdJLm1haW5UYXJnZXQuZXhlY3V0aW9uQ29udGV4dCkg
ewotICAgICAgICBXSS5ydW50aW1lTWFuYWdlci5hY3RpdmVFeGVjdXRpb25Db250ZXh0ID0gV0ku
bWFpblRhcmdldC5leGVjdXRpb25Db250ZXh0OwotICAgICAgICBpZiAoV0kucXVpY2tDb25zb2xl
KQotICAgICAgICAgICAgV0kucXVpY2tDb25zb2xlLmluaXRpYWxpemVNYWluRXhlY3V0aW9uQ29u
dGV4dFBhdGhDb21wb25lbnQoKTsKLSAgICB9Ci19OwotCiBXSS5jb250ZW50TG9hZGVkID0gZnVu
Y3Rpb24oKQogewogICAgIC8vIElmIHRoZXJlIHdhcyBhbiB1bmNhdWdodCBleGNlcHRpb24gZWFy
bGllciBkdXJpbmcgbG9hZGluZywgdGhlbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvVGFyZ2V0TWFuYWdlci5qcyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1RhcmdldE1hbmFnZXIuanMK
aW5kZXggYzI0NGYzODVjMGE1ZmZmOTNmODljOGFiMDZiNWFjYWEyOTc0ZTI2NC4uYmE3YWY4YzY0
YzE3MTBlNzU2ZDRjY2Y1MjEyY2NlMWM3NzBhZDQ0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvVGFyZ2V0TWFuYWdlci5qcworKysg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9UYXJnZXRN
YW5hZ2VyLmpzCkBAIC0zMyw2ICszMyw5IEBAIFdJLlRhcmdldE1hbmFnZXIgPSBjbGFzcyBUYXJn
ZXRNYW5hZ2VyIGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIHRoaXMuX2NhY2hlZFRhcmdldHNM
aXN0ID0gbnVsbDsKICAgICAgICAgdGhpcy5fc2VlblBhZ2VUYXJnZXQgPSBmYWxzZTsKICAgICAg
ICAgdGhpcy5fdHJhbnNpdGlvblRpbWVvdXRJZGVudGlmaWVyID0gdW5kZWZpbmVkOworCisgICAg
ICAgIHRoaXMuX3Byb3Zpc2lvbmFsVGFyZ2V0SWRzID0gbmV3IFNldDsKKyAgICAgICAgdGhpcy5f
c3dhcHBlZFRhcmdldElkcyA9IG5ldyBTZXQ7CiAgICAgfQogCiAgICAgLy8gUHVibGljCkBAIC04
MCw2ICs4Myw3IEBAIFdJLlRhcmdldE1hbmFnZXIgPSBjbGFzcyBUYXJnZXRNYW5hZ2VyIGV4dGVu
ZHMgV0kuT2JqZWN0CiAKICAgICAgICAgdGhpcy5fY2FjaGVkVGFyZ2V0c0xpc3QgPSBudWxsOwog
ICAgICAgICB0aGlzLl90YXJnZXRzLmRlbGV0ZSh0YXJnZXQuaWRlbnRpZmllcik7CisgICAgICAg
IHRhcmdldC5kZXN0cm95KCk7CiAKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5l
cnMoV0kuVGFyZ2V0TWFuYWdlci5FdmVudC5UYXJnZXRSZW1vdmVkLCB7dGFyZ2V0fSk7CiAgICAg
fQpAQCAtOTEsNyArOTUsNyBAQCBXSS5UYXJnZXRNYW5hZ2VyID0gY2xhc3MgVGFyZ2V0TWFuYWdl
ciBleHRlbmRzIFdJLk9iamVjdAogICAgICAgICBsZXQgdGFyZ2V0ID0gbmV3IFdJLk11bHRpcGxl
eGluZ0JhY2tlbmRUYXJnZXQ7CiAgICAgICAgIHRhcmdldC5pbml0aWFsaXplKCk7CiAKLSAgICAg
ICAgV0kuaW5pdGlhbGl6ZUJhY2tlbmRUYXJnZXQodGFyZ2V0KTsKKyAgICAgICAgdGhpcy5faW5p
dGlhbGl6ZUJhY2tlbmRUYXJnZXQodGFyZ2V0KTsKIAogICAgICAgICAvLyBBZGQgdGhlIHRhcmdl
dCB3aXRob3V0IGRpc3BhdGNoaW5nIGFuIGV2ZW50LgogICAgICAgICB0aGlzLl90YXJnZXRzLnNl
dCh0YXJnZXQuaWRlbnRpZmllciwgdGFyZ2V0KTsKQEAgLTEwNCwxOSArMTA4LDUwIEBAIFdJLlRh
cmdldE1hbmFnZXIgPSBjbGFzcyBUYXJnZXRNYW5hZ2VyIGV4dGVuZHMgV0kuT2JqZWN0CiAgICAg
ICAgIGxldCB0YXJnZXQgPSBuZXcgV0kuRGlyZWN0QmFja2VuZFRhcmdldDsKICAgICAgICAgdGFy
Z2V0LmluaXRpYWxpemUoKTsKIAotICAgICAgICBXSS5pbml0aWFsaXplQmFja2VuZFRhcmdldCh0
YXJnZXQpOworICAgICAgICB0aGlzLl9pbml0aWFsaXplQmFja2VuZFRhcmdldCh0YXJnZXQpOwog
CiAgICAgICAgIGlmIChXSS5zaGFyZWRBcHAuZGVidWdnYWJsZVR5cGUgPT09IFdJLkRlYnVnZ2Fi
bGVUeXBlLlBhZ2UpCi0gICAgICAgICAgICBXSS5pbml0aWFsaXplUGFnZVRhcmdldCh0YXJnZXQp
OworICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZVBhZ2VUYXJnZXQodGFyZ2V0KTsKIAogICAg
ICAgICB0aGlzLmFkZFRhcmdldCh0YXJnZXQpOwogICAgIH0KIAogICAgIC8vIFRhcmdldE9ic2Vy
dmVyCiAKLSAgICB0YXJnZXRDcmVhdGVkKHRhcmdldCwgdGFyZ2V0SW5mbykKKyAgICB0YXJnZXRD
cmVhdGVkKHBhcmVudFRhcmdldCwgdGFyZ2V0SW5mbykKKyAgICB7CisgICAgICAgIHRoaXMuX3Rh
cmdldENyZWF0ZWQocGFyZW50VGFyZ2V0LCB0YXJnZXRJbmZvKTsKKworICAgICAgICB0aGlzLmRp
c3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXSS5UYXJnZXRNYW5hZ2VyLkV2ZW50LlRhcmdldENyZWF0
ZWQsIHt0YXJnZXRJbmZvfSk7CisgICAgfQorCisgICAgZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJn
ZXQocGFyZW50VGFyZ2V0LCBwcmV2aW91c1RhcmdldElkLCB0YXJnZXRJbmZvKQorICAgIHsKKyAg
ICAgICAgdGhpcy5fdGFyZ2V0RGVzdHJveWVkKHByZXZpb3VzVGFyZ2V0SWQpOworICAgICAgICB0
aGlzLl9wcm92aXNpb25hbFRhcmdldElkcy5kZWxldGUodGFyZ2V0SW5mby50YXJnZXRJZCk7Cisg
ICAgICAgIHRoaXMuX3RhcmdldENyZWF0ZWQocGFyZW50VGFyZ2V0LCB0YXJnZXRJbmZvKTsKKyAg
ICAgICAgdGhpcy5fc3dhcHBlZFRhcmdldElkcy5hZGQocHJldmlvdXNUYXJnZXRJZCk7CisKKyAg
ICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV0kuVGFyZ2V0TWFuYWdlci5FdmVu
dC5EaWRDb21taXRQcm92aXNpb25hbFRhcmdldCwge3ByZXZpb3VzVGFyZ2V0SWQsIHRhcmdldElu
Zm99KTsKKyAgICB9CisKKyAgICB0YXJnZXREZXN0cm95ZWQodGFyZ2V0SWQpCisgICAgeworICAg
ICAgICB0aGlzLl90YXJnZXREZXN0cm95ZWQodGFyZ2V0SWQpOworCisgICAgICAgIHRoaXMuZGlz
cGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdJLlRhcmdldE1hbmFnZXIuRXZlbnQuVGFyZ2V0RGVzdHJv
eWVkLCB7dGFyZ2V0SWR9KTsKKyAgICB9CisKKyAgICBfdGFyZ2V0Q3JlYXRlZChwYXJlbnRUYXJn
ZXQsIHRhcmdldEluZm8pCiAgICAgewotICAgICAgICBsZXQgY29ubmVjdGlvbiA9IG5ldyBJbnNw
ZWN0b3JCYWNrZW5kLlRhcmdldENvbm5lY3Rpb24odGFyZ2V0LCB0YXJnZXRJbmZvLnRhcmdldElk
KTsKKyAgICAgICAgLy8gQ09NUEFUSUJJTElUWSAoaU9TIDEzLjApOiBgVGFyZ2V0LlRhcmdldElu
Zm8uaXNQcm92aXNpb25hbGAgZGlkIG5vdCBleGlzdCB5ZXQuCisgICAgICAgIGlmICh0YXJnZXRJ
bmZvLmlzUHJvdmlzaW9uYWwpIHsKKyAgICAgICAgICAgIHRoaXMuX3Byb3Zpc2lvbmFsVGFyZ2V0
SWRzLmFkZCh0YXJnZXRJbmZvLnRhcmdldElkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBjb25zb2xlLmFzc2VydCghdGhpcy5fcHJvdmlzaW9uYWxUYXJnZXRJZHMu
aGFzKHRhcmdldEluZm8udGFyZ2V0SWQpKTsKKworICAgICAgICBsZXQgY29ubmVjdGlvbiA9IG5l
dyBJbnNwZWN0b3JCYWNrZW5kLlRhcmdldENvbm5lY3Rpb24ocGFyZW50VGFyZ2V0LCB0YXJnZXRJ
bmZvLnRhcmdldElkKTsKICAgICAgICAgbGV0IHN1YlRhcmdldCA9IHRoaXMuX2NyZWF0ZVRhcmdl
dCh0YXJnZXRJbmZvLCBjb25uZWN0aW9uKTsKICAgICAgICAgdGhpcy5fY2hlY2tBbmRIYW5kbGVQ
YWdlVGFyZ2V0VHJhbnNpdGlvbihzdWJUYXJnZXQpOwogICAgICAgICBzdWJUYXJnZXQuaW5pdGlh
bGl6ZSgpOwpAQCAtMTI0LDggKzE1OSwxMiBAQCBXSS5UYXJnZXRNYW5hZ2VyID0gY2xhc3MgVGFy
Z2V0TWFuYWdlciBleHRlbmRzIFdJLk9iamVjdAogICAgICAgICB0aGlzLmFkZFRhcmdldChzdWJU
YXJnZXQpOwogICAgIH0KIAotICAgIHRhcmdldERlc3Ryb3llZCh0YXJnZXRJZCkKKyAgICBfdGFy
Z2V0RGVzdHJveWVkKHRhcmdldElkKQogICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX3Byb3Zpc2lv
bmFsVGFyZ2V0SWRzLmRlbGV0ZSh0YXJnZXRJZCkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGlmICh0aGlzLl9zd2FwcGVkVGFyZ2V0SWRzLmRlbGV0ZSh0YXJnZXRJZCkpCisgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIGxldCB0YXJnZXQgPSB0aGlzLl90YXJnZXRzLmdldCh0YXJn
ZXRJZCk7CiAgICAgICAgIHRoaXMuX2NoZWNrQW5kSGFuZGxlUGFnZVRhcmdldFRlcm1pbmF0aW9u
KHRhcmdldCk7CiAgICAgICAgIHRoaXMucmVtb3ZlVGFyZ2V0KHRhcmdldCk7CkBAIC0xMzMsNiAr
MTcyLDggQEAgV0kuVGFyZ2V0TWFuYWdlciA9IGNsYXNzIFRhcmdldE1hbmFnZXIgZXh0ZW5kcyBX
SS5PYmplY3QKIAogICAgIGRpc3BhdGNoTWVzc2FnZUZyb21UYXJnZXQodGFyZ2V0SWQsIG1lc3Nh
Z2UpCiAgICAgeworICAgICAgICBpZiAodGhpcy5fcHJvdmlzaW9uYWxUYXJnZXRJZHMuaGFzKHRh
cmdldElkKSkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbGV0IHRhcmdldCA9IHRoaXMu
X3RhcmdldHMuZ2V0KHRhcmdldElkKTsKICAgICAgICAgY29uc29sZS5hc3NlcnQodGFyZ2V0KTsK
ICAgICAgICAgaWYgKCF0YXJnZXQpCkBAIC0xNjgsMTIgKzIwOSwxMiBAQCBXSS5UYXJnZXRNYW5h
Z2VyID0gY2xhc3MgVGFyZ2V0TWFuYWdlciBleHRlbmRzIFdJLk9iamVjdAogICAgICAgICAvLyBG
aXJzdCBwYWdlIHRhcmdldC4KICAgICAgICAgaWYgKCFXSS5wYWdlVGFyZ2V0ICYmICF0aGlzLl9z
ZWVuUGFnZVRhcmdldCkgewogICAgICAgICAgICAgdGhpcy5fc2VlblBhZ2VUYXJnZXQgPSB0cnVl
OwotICAgICAgICAgICAgV0kuaW5pdGlhbGl6ZVBhZ2VUYXJnZXQodGFyZ2V0KTsKKyAgICAgICAg
ICAgIHRoaXMuX2luaXRpYWxpemVQYWdlVGFyZ2V0KHRhcmdldCk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUcmFuc2l0aW9uaW5nIHBhZ2UgdGFyZ2V0Lgot
ICAgICAgICBXSS50cmFuc2l0aW9uUGFnZVRhcmdldCh0YXJnZXQpOworICAgICAgICB0aGlzLl90
cmFuc2l0aW9uUGFnZVRhcmdldCh0YXJnZXQpOwogICAgIH0KIAogICAgIF9jaGVja0FuZEhhbmRs
ZVBhZ2VUYXJnZXRUZXJtaW5hdGlvbih0YXJnZXQpCkBAIC0xODUsNyArMjI2LDcgQEAgV0kuVGFy
Z2V0TWFuYWdlciA9IGNsYXNzIFRhcmdldE1hbmFnZXIgZXh0ZW5kcyBXSS5PYmplY3QKICAgICAg
ICAgY29uc29sZS5hc3NlcnQodGhpcy5fc2VlblBhZ2VUYXJnZXQpOwogCiAgICAgICAgIC8vIFRl
cm1pbmF0aW5nIHRoZSBwYWdlIHRhcmdldC4KLSAgICAgICAgV0kudGVybWluYXRlUGFnZVRhcmdl
dCh0YXJnZXQpOworICAgICAgICB0aGlzLl90ZXJtaW5hdGVQYWdlVGFyZ2V0KHRhcmdldCk7CiAK
ICAgICAgICAgLy8gRW5zdXJlIHdlIHRyYW5zaXRpb24gaW4gYSByZWFzb25hYmxlIGFtb3VudCBv
ZiB0aW1lLCBvdGhlcndpc2UgY2xvc2UuCiAgICAgICAgIGNvbnN0IHRpbWVUb1RyYW5zaXRpb24g
PSAyMDAwOwpAQCAtMTk5LDkgKzI0MCw3NSBAQCBXSS5UYXJnZXRNYW5hZ2VyID0gY2xhc3MgVGFy
Z2V0TWFuYWdlciBleHRlbmRzIFdJLk9iamVjdAogICAgICAgICAgICAgV0kuY2xvc2UoKTsKICAg
ICAgICAgfSwgdGltZVRvVHJhbnNpdGlvbik7CiAgICAgfQorCisgICAgX2luaXRpYWxpemVCYWNr
ZW5kVGFyZ2V0KHRhcmdldCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCFXSS5tYWlu
VGFyZ2V0KTsKKworICAgICAgICBXSS5iYWNrZW5kVGFyZ2V0ID0gdGFyZ2V0OworCisgICAgICAg
IHRoaXMuX3Jlc2V0TWFpbkV4ZWN1dGlvbkNvbnRleHQoKTsKKworICAgICAgICBXSS5fdGFyZ2V0
c0F2YWlsYWJsZVByb21pc2UucmVzb2x2ZSgpOworICAgIH0KKworICAgIF9pbml0aWFsaXplUGFn
ZVRhcmdldCh0YXJnZXQpCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydChXSS5zaGFyZWRB
cHAuaXNXZWJEZWJ1Z2dhYmxlKCkpOworICAgICAgICBjb25zb2xlLmFzc2VydCh0YXJnZXQudHlw
ZSA9PT0gV0kuVGFyZ2V0VHlwZS5QYWdlIHx8IHRhcmdldCBpbnN0YW5jZW9mIFdJLkRpcmVjdEJh
Y2tlbmRUYXJnZXQpOworCisgICAgICAgIFdJLnBhZ2VUYXJnZXQgPSB0YXJnZXQ7CisKKyAgICAg
ICAgdGhpcy5fcmVzZXRNYWluRXhlY3V0aW9uQ29udGV4dCgpOworICAgIH0KKworICAgIF90cmFu
c2l0aW9uUGFnZVRhcmdldCh0YXJnZXQpCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydCgh
V0kucGFnZVRhcmdldCk7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KFdJLnNoYXJlZEFwcC5kZWJ1
Z2dhYmxlVHlwZSA9PT0gV0kuRGVidWdnYWJsZVR5cGUuV2ViUGFnZSk7CisgICAgICAgIGNvbnNv
bGUuYXNzZXJ0KHRhcmdldC50eXBlID09PSBXSS5UYXJnZXRUeXBlLlBhZ2UpOworCisgICAgICAg
IFdJLnBhZ2VUYXJnZXQgPSB0YXJnZXQ7CisKKyAgICAgICAgdGhpcy5fcmVzZXRNYWluRXhlY3V0
aW9uQ29udGV4dCgpOworCisgICAgICAgIC8vIEFjdGlvbnMgdG8gdHJhbnNpdGlvbiB0aGUgcGFn
ZSB0YXJnZXQuCisgICAgICAgIFdJLm5vdGlmaWNhdGlvbnMuZGlzcGF0Y2hFdmVudFRvTGlzdGVu
ZXJzKFdJLk5vdGlmaWNhdGlvbi5UcmFuc2l0aW9uUGFnZVRhcmdldCk7CisgICAgICAgIFdJLmRv
bU1hbmFnZXIudHJhbnNpdGlvblBhZ2VUYXJnZXQoKTsKKyAgICAgICAgV0kubmV0d29ya01hbmFn
ZXIudHJhbnNpdGlvblBhZ2VUYXJnZXQoKTsKKyAgICAgICAgV0kudGltZWxpbmVNYW5hZ2VyLnRy
YW5zaXRpb25QYWdlVGFyZ2V0KCk7CisgICAgfQorCisgICAgX3Rlcm1pbmF0ZVBhZ2VUYXJnZXQo
dGFyZ2V0KQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoV0kucGFnZVRhcmdldCk7Cisg
ICAgICAgIGNvbnNvbGUuYXNzZXJ0KFdJLnBhZ2VUYXJnZXQgPT09IHRhcmdldCk7CisgICAgICAg
IGNvbnNvbGUuYXNzZXJ0KFdJLnNoYXJlZEFwcC5kZWJ1Z2dhYmxlVHlwZSA9PT0gV0kuRGVidWdn
YWJsZVR5cGUuV2ViUGFnZSk7CisKKyAgICAgICAgLy8gUmVtb3ZlIGFueSBXb3JrZXIgdGFyZ2V0
cyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYWdlLgorICAgICAgICBsZXQgd29ya2VyVGFyZ2V0cyA9
IFdJLnRhcmdldHMuZmlsdGVyKCh4KSA9PiB4LnR5cGUgPT09IFdJLlRhcmdldFR5cGUuV29ya2Vy
KTsKKyAgICAgICAgZm9yIChsZXQgd29ya2VyVGFyZ2V0IG9mIHdvcmtlclRhcmdldHMpCisgICAg
ICAgICAgICBXSS53b3JrZXJNYW5hZ2VyLndvcmtlclRlcm1pbmF0ZWQod29ya2VyVGFyZ2V0Lmlk
ZW50aWZpZXIpOworCisgICAgICAgIFdJLnBhZ2VUYXJnZXQgPSBudWxsOworICAgIH0KKworICAg
IF9yZXNldE1haW5FeGVjdXRpb25Db250ZXh0KCkKKyAgICB7CisgICAgICAgIGlmIChXSS5tYWlu
VGFyZ2V0IGluc3RhbmNlb2YgV0kuTXVsdGlwbGV4aW5nQmFja2VuZFRhcmdldCkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBpZiAoV0kubWFpblRhcmdldC5leGVjdXRpb25Db250ZXh0
KQorICAgICAgICAgICAgV0kucnVudGltZU1hbmFnZXIuYWN0aXZlRXhlY3V0aW9uQ29udGV4dCA9
IFdJLm1haW5UYXJnZXQuZXhlY3V0aW9uQ29udGV4dDsKKyAgICB9CiB9OwogCiBXSS5UYXJnZXRN
YW5hZ2VyLkV2ZW50ID0gewogICAgIFRhcmdldEFkZGVkOiBTeW1ib2woInRhcmdldC1tYW5hZ2Vy
LXRhcmdldC1hZGRlZCIpLAogICAgIFRhcmdldFJlbW92ZWQ6IFN5bWJvbCgidGFyZ2V0LW1hbmFn
ZXItdGFyZ2V0LXJlbW92ZWQiKSwKKworICAgIC8vIEV2ZW50cyBiZWxvdyBhcmUgdHJpZ2dlcmVk
IG9ubHkgYnkgY29ycmVzcG9uZGluZyBwcm90b2NvbCBldmVudHMuCisgICAgVGFyZ2V0Q3JlYXRl
ZDogU3ltYm9sKCJ0YXJnZXQtbWFuYWdlci10YXJnZXQtY3JlYXRlZCIpLAorICAgIERpZENvbW1p
dFByb3Zpc2lvbmFsVGFyZ2V0OiBTeW1ib2woInRhcmdldC1tYW5hZ2VyLXByb3Zpc2lvbmFsLXRh
cmdldC1jb21taXR0ZWQiKSwKKyAgICBUYXJnZXREZXN0cm95ZWQ6IFN5bWJvbCgidGFyZ2V0LW1h
bmFnZXItdGFyZ2V0LWRldHJveWVkIiksCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wvQ29ubmVjdGlvbi5qcyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL0Nvbm5lY3Rpb24uanMKaW5kZXggNzFj
MjA2YmI2OTlmYjEwN2FkNGE2MTVhZTMzZGYyNWQ1MTZkNTZjMi4uMzI5ZGEzY2U2NDRlMjcyODBh
Yzc2OWFhZDIwM2M5ZWI1MGVkYjVhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wvQ29ubmVjdGlvbi5qcworKysgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9Qcm90b2NvbC9Db25uZWN0aW9uLmpzCkBAIC0yOTYsOCAr
Mjk2LDEyIEBAIEluc3BlY3RvckJhY2tlbmQuV29ya2VyQ29ubmVjdGlvbiA9IGNsYXNzIEluc3Bl
Y3RvckJhY2tlbmRXb3JrZXJDb25uZWN0aW9uIGV4dGVuCiAKICAgICBzZW5kTWVzc2FnZVRvQmFj
a2VuZChtZXNzYWdlKQogICAgIHsKLSAgICAgICAgLy8gSWdub3JlIGVycm9ycyBpZiBhIHdvcmtl
ciB3ZW50IGF3YXkgcXVpY2tseS4KLSAgICAgICAgdGhpcy5fcGFyZW50VGFyZ2V0LldvcmtlckFn
ZW50LnNlbmRNZXNzYWdlVG9Xb3JrZXIodGhpcy5fd29ya2VySWQsIG1lc3NhZ2UpLmNhdGNoKGZ1
bmN0aW9uKCl7fSk7CisgICAgICAgIHRoaXMuX3BhcmVudFRhcmdldC5Xb3JrZXJBZ2VudC5zZW5k
TWVzc2FnZVRvV29ya2VyKHRoaXMuX3dvcmtlcklkLCBtZXNzYWdlKS5jYXRjaCgoZXJyb3IpID0+
IHsKKyAgICAgICAgICAgIC8vIElnbm9yZSBlcnJvcnMgaWYgYSB3b3JrZXIgd2VudCBhd2F5IHF1
aWNrbHkuCisgICAgICAgICAgICBpZiAodGhpcy50YXJnZXQuaXNEZXN0cm95ZWQpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgV0kucmVwb3J0SW50ZXJuYWxFcnJvcihlcnJv
cik7CisgICAgICAgIH0pOwogICAgIH0KIH07CiAKQEAgLTMxNSw3ICszMTksMTMgQEAgSW5zcGVj
dG9yQmFja2VuZC5UYXJnZXRDb25uZWN0aW9uID0gY2xhc3MgSW5zcGVjdG9yQmFja2VuZFRhcmdl
dENvbm5lY3Rpb24gZXh0ZW4KIAogICAgIHNlbmRNZXNzYWdlVG9CYWNrZW5kKG1lc3NhZ2UpCiAg
ICAgewotICAgICAgICB0aGlzLl9wYXJlbnRUYXJnZXQuVGFyZ2V0QWdlbnQuc2VuZE1lc3NhZ2VU
b1RhcmdldCh0aGlzLl90YXJnZXRJZCwgbWVzc2FnZSk7CisgICAgICAgIHRoaXMuX3BhcmVudFRh
cmdldC5UYXJnZXRBZ2VudC5zZW5kTWVzc2FnZVRvVGFyZ2V0KHRoaXMuX3RhcmdldElkLCBtZXNz
YWdlKS5jYXRjaCgoZXJyb3IpID0+IHsKKyAgICAgICAgICAgIC8vIENvbW1hbmQgbWF5IGJlIHNl
bnQgYWZ0ZXIgdGFyZ2V0IGlzIGFscmVhZHkgZGVzdHJveWVkIG9uIGJhY2tlbmQsCisgICAgICAg
ICAgICAvLyBpZ25vcmUgc3VjaCBlcnJvcnMuCisgICAgICAgICAgICBpZiAodGhpcy50YXJnZXQu
aXNEZXN0cm95ZWQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgV0kucmVw
b3J0SW50ZXJuYWxFcnJvcihlcnJvcik7CisgICAgICAgIH0pOwogICAgIH0KIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL1Rhcmdl
dC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL1Rhcmdl
dC5qcwppbmRleCA2NzcwNzllODFlMzE0OWI5ZGY1ZTNiYmI5ODVlYjMyMjc0MzBhNTk0Li5mZjRl
NWNmZWQ0MmE4YjM3NDA0NWVmMzg3MjY2ZWQyMWI0NjAxZmFkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Qcm90b2NvbC9UYXJnZXQuanMKKysrIGIvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wvVGFyZ2V0LmpzCkBAIC0x
NjIsNiArMTYyLDkgQEAgV0kuVGFyZ2V0ID0gY2xhc3MgVGFyZ2V0IGV4dGVuZHMgV0kuT2JqZWN0
CiAgICAgZ2V0IHJlc291cmNlQ29sbGVjdGlvbigpIHsgcmV0dXJuIHRoaXMuX3Jlc291cmNlQ29s
bGVjdGlvbjsgfQogICAgIGdldCBleHRyYVNjcmlwdENvbGxlY3Rpb24oKSB7IHJldHVybiB0aGlz
Ll9leHRyYVNjcmlwdENvbGxlY3Rpb247IH0KIAorICAgIGRlc3Ryb3koKSB7IHRoaXMuX2lzRGVz
dHJveWVkID0gdHJ1ZTsgfQorICAgIGdldCBpc0Rlc3Ryb3llZCgpIHsgcmV0dXJuIHRoaXMuX2lz
RGVzdHJveWVkOyB9CisKICAgICBnZXQgZGlzcGxheU5hbWUoKSB7IHJldHVybiB0aGlzLl9uYW1l
OyB9CiAKICAgICBnZXQgbWFpblJlc291cmNlKCkKQEAgLTIwMiwxMCArMjA1LDkgQEAgV0kuVGFy
Z2V0ID0gY2xhc3MgVGFyZ2V0IGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgaGFzRG9tYWluKGRvbWFp
bk5hbWUpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCghZG9tYWluTmFtZS5pbmNsdWRl
cygiLiIpICYmICFkb21haW5OYW1lLmVuZHNXaXRoKCJBZ2VudCIpKTsKLQogICAgICAgICByZXR1
cm4gZG9tYWluTmFtZSBpbiB0aGlzLl9hZ2VudHM7CiAgICAgfQotCisgICAgCiAgICAgaGFzQ29t
bWFuZChxdWFsaWZpZWROYW1lLCBwYXJhbWV0ZXJOYW1lKQogICAgIHsKICAgICAgICAgY29uc29s
ZS5hc3NlcnQocXVhbGlmaWVkTmFtZS5pbmNsdWRlcygiLiIpICYmICFxdWFsaWZpZWROYW1lLmlu
Y2x1ZGVzKCJBZ2VudC4iKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9Qcm90b2NvbC9UYXJnZXRPYnNlcnZlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL1RhcmdldE9ic2VydmVyLmpzCmluZGV4IDhlYjEy
MDU5ZWVhNTEyOGFmMDQ4NzQ0NTA4NmVkYmRjNGU3MzcwMzguLjE5MzI5OGMwZGY5Y2E5YTQyNDc1
NzkwOTZmYjcwNGVmZjRlZmU0YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL1Byb3RvY29sL1RhcmdldE9ic2VydmVyLmpzCisrKyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL1RhcmdldE9ic2VydmVyLmpzCkBAIC0z
Miw2ICszMiwxMSBAQCBXSS5UYXJnZXRPYnNlcnZlciA9IGNsYXNzIFRhcmdldE9ic2VydmVyIGV4
dGVuZHMgSW5zcGVjdG9yQmFja2VuZC5EaXNwYXRjaGVyCiAgICAgICAgIFdJLnRhcmdldE1hbmFn
ZXIudGFyZ2V0Q3JlYXRlZCh0aGlzLl90YXJnZXQsIHRhcmdldEluZm8pOwogICAgIH0KIAorICAg
IGRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0KHByZXZpb3VzVGFyZ2V0SWQsIHRhcmdldEluZm8p
CisgICAgeworICAgICAgICBXSS50YXJnZXRNYW5hZ2VyLmRpZENvbW1pdFByb3Zpc2lvbmFsVGFy
Z2V0KHRoaXMuX3RhcmdldCwgcHJldmlvdXNUYXJnZXRJZCwgdGFyZ2V0SW5mbyk7CisgICAgfQor
CiAgICAgdGFyZ2V0RGVzdHJveWVkKHRhcmdldElkKQogICAgIHsKICAgICAgICAgV0kudGFyZ2V0
TWFuYWdlci50YXJnZXREZXN0cm95ZWQodGFyZ2V0SWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVGVzdC9UZXN0LmpzIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvVGVzdC9UZXN0LmpzCmluZGV4IGIzMThkZGQ1MWEzN2ZhMWM0
N2U5YzVmMWU0YjdhN2Q5NmM4OWQxODEuLjJhYThjZDhjOWI3YzdjYTBjNmJmMTUyNzE0MmJmYzcw
MWIzOTNjZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1Rlc3QvVGVzdC5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9U
ZXN0L1Rlc3QuanMKQEAgLTg1LDQxICs4NSw2IEBAIFdJLmxvYWRlZCA9IGZ1bmN0aW9uKCkKICAg
ICAgICAgV0kudGFyZ2V0TWFuYWdlci5jcmVhdGVEaXJlY3RCYWNrZW5kVGFyZ2V0KCk7CiB9Owog
Ci1XSS5pbml0aWFsaXplQmFja2VuZFRhcmdldCA9IGZ1bmN0aW9uKHRhcmdldCkKLXsKLSAgICBX
SS5iYWNrZW5kVGFyZ2V0ID0gdGFyZ2V0OwotCi0gICAgV0kucmVzZXRNYWluRXhlY3V0aW9uQ29u
dGV4dCgpOwotCi0gICAgV0kuX3RhcmdldHNBdmFpbGFibGVQcm9taXNlLnJlc29sdmUoKTsKLX07
Ci0KLVdJLmluaXRpYWxpemVQYWdlVGFyZ2V0ID0gZnVuY3Rpb24odGFyZ2V0KQotewotICAgIFdJ
LnBhZ2VUYXJnZXQgPSB0YXJnZXQ7Ci0KLSAgICBXSS5yZXNldE1haW5FeGVjdXRpb25Db250ZXh0
KCk7Ci19OwotCi1XSS50cmFuc2l0aW9uUGFnZVRhcmdldCA9IGZ1bmN0aW9uKHRhcmdldCkKLXsK
LSAgICBjb25zb2xlLmVycm9yKCJXSS50cmFuc2l0aW9uUGFnZVRhcmdldCBzaG91bGQgbm90IGJl
IHJlYWNoZWQgaW4gdGVzdHMuIik7Ci19OwotCi1XSS50ZXJtaW5hdGVQYWdlVGFyZ2V0ID0gZnVu
Y3Rpb24odGFyZ2V0KQotewotICAgIGNvbnNvbGUuZXJyb3IoIldJLnRlcm1pbmF0ZVBhZ2VUYXJn
ZXQgc2hvdWxkIG5vdCBiZSByZWFjaGVkIGluIHRlc3RzLiIpOwotfTsKLQotV0kucmVzZXRNYWlu
RXhlY3V0aW9uQ29udGV4dCA9IGZ1bmN0aW9uKCkKLXsKLSAgICBpZiAoV0kubWFpblRhcmdldCBp
bnN0YW5jZW9mIFdJLk11bHRpcGxleGluZ0JhY2tlbmRUYXJnZXQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChXSS5tYWluVGFyZ2V0LmV4ZWN1dGlvbkNvbnRleHQpCi0gICAgICAgIFdJLnJ1
bnRpbWVNYW5hZ2VyLmFjdGl2ZUV4ZWN1dGlvbkNvbnRleHQgPSBXSS5tYWluVGFyZ2V0LmV4ZWN1
dGlvbkNvbnRleHQ7Ci19OwotCiBXSS5jb250ZW50TG9hZGVkID0gZnVuY3Rpb24oKQogewogICAg
IC8vIFRoaW5ncyB0aGF0IHdvdWxkIG5vcm1hbGx5IGdldCBjYWxsZWQgYnkgdGhlIFVJLCB0aGF0
IHdlIHN0aWxsIHdhbnQgdG8gZG8gaW4gdGVzdHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9RdWlja0NvbnNvbGUuanMgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9RdWlja0NvbnNvbGUuanMKaW5kZXggMTc5
N2FiZmIzYjJkYWExOGMyNTM0ZTIwZDhhNmIyYTIxOTVkODQ3YS4uMzYyNjU1ODI1NjNhYTA5NWY2
YjUxOTQ3MmE4MDAwZTVmYjM3YWYyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvVmlld3MvUXVpY2tDb25zb2xlLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1F1aWNrQ29uc29sZS5qcwpAQCAtNjksNyArNjks
NyBAQCBXSS5RdWlja0NvbnNvbGUgPSBjbGFzcyBRdWlja0NvbnNvbGUgZXh0ZW5kcyBXSS5WaWV3
CiAgICAgICAgIHRoaXMuX2V4ZWN1dGlvbkNvbnRleHRTZWxlY3RvckRpdmlkZXIgPSBuZXcgV0ku
RGl2aWRlck5hdmlnYXRpb25JdGVtOwogICAgICAgICB0aGlzLl9uYXZpZ2F0aW9uQmFyLmFkZE5h
dmlnYXRpb25JdGVtKHRoaXMuX2V4ZWN1dGlvbkNvbnRleHRTZWxlY3RvckRpdmlkZXIpOwogCi0g
ICAgICAgIHRoaXMuaW5pdGlhbGl6ZU1haW5FeGVjdXRpb25Db250ZXh0UGF0aENvbXBvbmVudCgp
OworICAgICAgICB0aGlzLl9pbml0aWFsaXplTWFpbkV4ZWN1dGlvbkNvbnRleHRQYXRoQ29tcG9u
ZW50KCk7CiAKICAgICAgICAgV0kuc2V0dGluZ3MuY29uc29sZVNhdmVkUmVzdWx0QWxpYXMuYWRk
RXZlbnRMaXN0ZW5lcihXSS5TZXR0aW5nLkV2ZW50LkNoYW5nZWQsIHRoaXMuX3VwZGF0ZUF1dG9t
YXRpY0V4ZWN1dGlvbkNvbnRleHRQYXRoQ29tcG9uZW50VG9vbHRpcCwgdGhpcyk7CiAKQEAgLTgy
LDYgKzgyLDcgQEAgV0kuUXVpY2tDb25zb2xlID0gY2xhc3MgUXVpY2tDb25zb2xlIGV4dGVuZHMg
V0kuVmlldwogICAgICAgICBXSS5kZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5E
ZWJ1Z2dlck1hbmFnZXIuRXZlbnQuQWN0aXZlQ2FsbEZyYW1lRGlkQ2hhbmdlLCB0aGlzLl9kZWJ1
Z2dlckFjdGl2ZUNhbGxGcmFtZURpZENoYW5nZSwgdGhpcyk7CiAKICAgICAgICAgV0kucnVudGlt
ZU1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5SdW50aW1lTWFuYWdlci5FdmVudC5BY3RpdmVF
eGVjdXRpb25Db250ZXh0Q2hhbmdlZCwgdGhpcy5fYWN0aXZlRXhlY3V0aW9uQ29udGV4dENoYW5n
ZWQsIHRoaXMpOworICAgICAgICBXSS5ub3RpZmljYXRpb25zLmFkZEV2ZW50TGlzdGVuZXIoV0ku
Tm90aWZpY2F0aW9uLlRyYW5zaXRpb25QYWdlVGFyZ2V0LCB0aGlzLl9wYWdlVGFyZ2V0VHJhbnNp
c2lvbmVkLCB0aGlzKTsKIAogICAgICAgICBXSS50YXJnZXRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVu
ZXIoV0kuVGFyZ2V0TWFuYWdlci5FdmVudC5UYXJnZXRBZGRlZCwgdGhpcy5fdGFyZ2V0QWRkZWQs
IHRoaXMpOwogICAgICAgICBXSS50YXJnZXRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV0kuVGFy
Z2V0TWFuYWdlci5FdmVudC5UYXJnZXRSZW1vdmVkLCB0aGlzLl90YXJnZXRSZW1vdmVkLCB0aGlz
KTsKQEAgLTExMSw3ICsxMTIsMTQgQEAgV0kuUXVpY2tDb25zb2xlID0gY2xhc3MgUXVpY2tDb25z
b2xlIGV4dGVuZHMgV0kuVmlldwogICAgICAgICBzdXBlci5jbG9zZWQoKTsKICAgICB9CiAKLSAg
ICBpbml0aWFsaXplTWFpbkV4ZWN1dGlvbkNvbnRleHRQYXRoQ29tcG9uZW50KCkKKyAgICBfcGFn
ZVRhcmdldFRyYW5zaXNpb25lZCgpCisgICAgeworICAgICAgICBpZiAoV0kubWFpblRhcmdldCBp
bnN0YW5jZW9mIFdJLk11bHRpcGxleGluZ0JhY2tlbmRUYXJnZXQpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIHRoaXMuX2luaXRpYWxpemVNYWluRXhlY3V0aW9uQ29udGV4dFBhdGhDb21w
b25lbnQoKTsKKyAgICB9CisKKyAgICBfaW5pdGlhbGl6ZU1haW5FeGVjdXRpb25Db250ZXh0UGF0
aENvbXBvbmVudCgpCiAgICAgewogICAgICAgICBpZiAoIVdJLm1haW5UYXJnZXQgfHwgV0kubWFp
blRhcmdldCBpbnN0YW5jZW9mIFdJLk11bHRpcGxleGluZ0JhY2tlbmRUYXJnZXQpCiAgICAgICAg
ICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0IGIvU291
cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAppbmRleCAzMWVlMTE4OTAyNTU3NTc1MTc2MTAwNjgyMzli
MTYyYTA2ZmYwN2VmLi5mNjdlMzgwMmUxZTFiNDExOGNhMjczNjkwMTk0ZTFlOGQ5MGYxNTczIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQv
U291cmNlcy50eHQKQEAgLTI5MCw3ICsyOTAsNiBAQCBVSVByb2Nlc3MvV2ViUGFnZURpYWdub3N0
aWNMb2dnaW5nQ2xpZW50LmNwcAogVUlQcm9jZXNzL1dlYlBhZ2VHcm91cC5jcHAKIFVJUHJvY2Vz
cy9XZWJQYWdlSW5qZWN0ZWRCdW5kbGVDbGllbnQuY3BwCiBVSVByb2Nlc3MvV2ViUGFnZUluc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwCi1VSVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50
LmNwcAogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKIFVJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJk
UHJveHkuY3BwCiBVSVByb2Nlc3MvV2ViUHJlZmVyZW5jZXMuY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5jcHAK
aW5kZXggODdhMmYwNjU4M2RlMjEwNjZkMTVjNTI1M2VmMjI0MTMwNmY1MjM0Yy4uYTVjMGUzMDMw
Y2Q1YTI5YTI4YzRlZGQ4MjM1NWVkZjc0MmFiZjFhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmNwcApAQCAt
MzQsMTIgKzM0LDEyIEBACiBuYW1lc3BhY2UgQVBJIHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7
CiAKLVJlZjxXZWJBdXRoZW50aWNhdGlvblBhbmVsPiBXZWJBdXRoZW50aWNhdGlvblBhbmVsOjpj
cmVhdGUoY29uc3QgQXV0aGVudGljYXRvck1hbmFnZXImIG1hbmFnZXIsIGNvbnN0IFN0cmluZyYg
cnBJZCkKK1JlZjxXZWJBdXRoZW50aWNhdGlvblBhbmVsPiBXZWJBdXRoZW50aWNhdGlvblBhbmVs
OjpjcmVhdGUoY29uc3QgQXV0aGVudGljYXRvck1hbmFnZXImIG1hbmFnZXIsIGNvbnN0IFdURjo6
U3RyaW5nJiBycElkKQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkF1dGhlbnRpY2F0
aW9uUGFuZWwobWFuYWdlciwgcnBJZCkpOwogfQogCi1XZWJBdXRoZW50aWNhdGlvblBhbmVsOjpX
ZWJBdXRoZW50aWNhdGlvblBhbmVsKGNvbnN0IEF1dGhlbnRpY2F0b3JNYW5hZ2VyJiBtYW5hZ2Vy
LCBjb25zdCBTdHJpbmcmIHJwSWQpCitXZWJBdXRoZW50aWNhdGlvblBhbmVsOjpXZWJBdXRoZW50
aWNhdGlvblBhbmVsKGNvbnN0IEF1dGhlbnRpY2F0b3JNYW5hZ2VyJiBtYW5hZ2VyLCBjb25zdCBX
VEY6OlN0cmluZyYgcnBJZCkKICAgICA6IG1fbWFuYWdlcihtYWtlV2Vha1B0cihtYW5hZ2VyKSkK
ICAgICAsIG1fcnBJZChycElkKQogICAgICwgbV9jbGllbnQoV1RGOjptYWtlVW5pcXVlUmVmPFdl
YkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuaAppbmRleCA3OGU3ZWU5
NTY4ZmJjMTAyM2YwYWY4MWQxZjdhM2EyZWJjZjZlMzZiLi5jM2Y0MDNmOGM2Y2MyMzNjMWM2MmVm
Zjg5YjFhZWQ3YjcwNmY2N2Q3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmgKQEAgLTQyLDcgKzQyLDcgQEAgY2xh
c3MgV2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVudDsKIAogY2xhc3MgV2ViQXV0aGVudGljYXRp
b25QYW5lbCBmaW5hbCA6IHB1YmxpYyBPYmplY3RJbXBsPE9iamVjdDo6VHlwZTo6V2ViQXV0aGVu
dGljYXRpb25QYW5lbD4sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxXZWJBdXRoZW50aWNhdGlvblBh
bmVsPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJBdXRoZW50aWNhdGlvblBhbmVsPiBj
cmVhdGUoY29uc3QgV2ViS2l0OjpBdXRoZW50aWNhdG9yTWFuYWdlciYsIGNvbnN0IFN0cmluZyYg
cnBJZCk7CisgICAgc3RhdGljIFJlZjxXZWJBdXRoZW50aWNhdGlvblBhbmVsPiBjcmVhdGUoY29u
c3QgV2ViS2l0OjpBdXRoZW50aWNhdG9yTWFuYWdlciYsIGNvbnN0IFdURjo6U3RyaW5nJiBycElk
KTsKICAgICB+V2ViQXV0aGVudGljYXRpb25QYW5lbCgpOwogCiAgICAgV1RGOjpTdHJpbmcgcnBJ
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fcnBJZDsgfQpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRDbGllbnQoVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+
JiYpOwogCiBwcml2YXRlOgotICAgIFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwoY29uc3QgV2ViS2l0
OjpBdXRoZW50aWNhdG9yTWFuYWdlciYsIGNvbnN0IFN0cmluZyYgcnBJZCk7CisgICAgV2ViQXV0
aGVudGljYXRpb25QYW5lbChjb25zdCBXZWJLaXQ6OkF1dGhlbnRpY2F0b3JNYW5hZ2VyJiwgY29u
c3QgV1RGOjpTdHJpbmcmIHJwSWQpOwogCiAgICAgV2Vha1B0cjxXZWJLaXQ6OkF1dGhlbnRpY2F0
b3JNYW5hZ2VyPiBtX21hbmFnZXI7CiAgICAgV1RGOjpTdHJpbmcgbV9ycElkOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yVGFyZ2V0UHJveHkuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yVGFyZ2V0UHJveHkuY3BwCmluZGV4IDYxYjhm
MzZlZmE3NTFmMWM4OGQ5MmJhMWFkY2QxNWVjYTYxNDU4MjIuLjFiMzdjMWVkNDM5NWExN2M1ODNi
YTJkNzg2MjE5YzkwYzc0NDAxNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0luc3BlY3RvclRhcmdldFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3JUYXJnZXRQcm94eS5jcHAKQEAgLTI2LDcgKzI2LDkgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JUYXJnZXRQcm94eS5oIgogCisjaW5jbHVkZSAiUHJv
dmlzaW9uYWxQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCisjaW5jbHVk
ZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldC5oIgogI2luY2x1ZGUgIldlYlBhZ2VNZXNzYWdlcy5o
IgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5o
IgpAQCAtMzUsOSArMzcsMTYgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHVzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7CiAKLVJlZjxJbnNwZWN0b3JUYXJnZXRQcm94eT4gSW5zcGVjdG9yVGFyZ2V0
UHJveHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQs
IEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQorc3RkOjp1bmlxdWVfcHRyPElu
c3BlY3RvclRhcmdldFByb3h5PiBJbnNwZWN0b3JUYXJnZXRQcm94eTo6Y3JlYXRlKFdlYlBhZ2VQ
cm94eSYgcGFnZSwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JU
YXJnZXRUeXBlIHR5cGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yVGFy
Z2V0UHJveHkocGFnZSwgdGFyZ2V0SWQsIHR5cGUpKTsKKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxJ
bnNwZWN0b3JUYXJnZXRQcm94eT4ocGFnZSwgdGFyZ2V0SWQsIHR5cGUpOworfQorCitzdGQ6OnVu
aXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJveHk+IEluc3BlY3RvclRhcmdldFByb3h5OjpjcmVh
dGUoUHJvdmlzaW9uYWxQYWdlUHJveHkmIHByb3Zpc2lvbmFsUGFnZSwgY29uc3QgU3RyaW5nJiB0
YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUpCit7CisgICAgYXV0
byB0YXJnZXQgPSBJbnNwZWN0b3JUYXJnZXRQcm94eTo6Y3JlYXRlKHByb3Zpc2lvbmFsUGFnZS5w
YWdlKCksIHRhcmdldElkLCB0eXBlKTsKKyAgICB0YXJnZXQtPm1fcHJvdmlzaW9uYWxQYWdlID0g
bWFrZVdlYWtQdHIocHJvdmlzaW9uYWxQYWdlKTsKKyAgICByZXR1cm4gdGFyZ2V0OwogfQogCiBJ
bnNwZWN0b3JUYXJnZXRQcm94eTo6SW5zcGVjdG9yVGFyZ2V0UHJveHkoV2ViUGFnZVByb3h5JiBw
YWdlLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5
cGUgdHlwZSkKQEAgLTQ3LDIyICs1Niw0OCBAQCBJbnNwZWN0b3JUYXJnZXRQcm94eTo6SW5zcGVj
dG9yVGFyZ2V0UHJveHkoV2ViUGFnZVByb3h5JiBwYWdlLCBjb25zdCBTdHJpbmcmIHRhcgogewog
fQogCi12b2lkIEluc3BlY3RvclRhcmdldFByb3h5Ojpjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRl
bmRDaGFubmVsJiBjaGFubmVsKQordm9pZCBJbnNwZWN0b3JUYXJnZXRQcm94eTo6Y29ubmVjdChJ
bnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUp
CiB7CisgICAgaWYgKG1fcHJvdmlzaW9uYWxQYWdlKSB7CisgICAgICAgIG1fcHJvdmlzaW9uYWxQ
YWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q29ubmVjdEluc3BlY3Rvcihp
ZGVudGlmaWVyKCksIGNvbm5lY3Rpb25UeXBlKSwgbV9wcm92aXNpb25hbFBhZ2UtPndlYlBhZ2VJ
RCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChtX3BhZ2UuaGFzUnVubmlu
Z1Byb2Nlc3MoKSkKLSAgICAgICAgbV9wYWdlLnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpDb25uZWN0SW5zcGVjdG9yKGlkZW50aWZpZXIoKSwgY2hhbm5lbC5jb25uZWN0aW9uVHlw
ZSgpKSwgbV9wYWdlLndlYlBhZ2VJRCgpKTsKKyAgICAgICAgbV9wYWdlLnByb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpDb25uZWN0SW5zcGVjdG9yKGlkZW50aWZpZXIoKSwgY29ubmVj
dGlvblR5cGUpLCBtX3BhZ2Uud2ViUGFnZUlEKCkpOwogfQogCi12b2lkIEluc3BlY3RvclRhcmdl
dFByb3h5OjpkaXNjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJikKK3ZvaWQgSW5z
cGVjdG9yVGFyZ2V0UHJveHk6OmRpc2Nvbm5lY3QoKQogeworICAgIGlmIChtX3Byb3Zpc2lvbmFs
UGFnZSkgeworICAgICAgICBtX3Byb3Zpc2lvbmFsUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OkRpc2Nvbm5lY3RJbnNwZWN0b3IoaWRlbnRpZmllcigpKSwgbV9wcm92aXNp
b25hbFBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlm
IChtX3BhZ2UuaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgbV9wYWdlLnByb2Nlc3MoKS5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaXNjb25uZWN0SW5zcGVjdG9yKGlkZW50aWZpZXIoKSks
IG1fcGFnZS53ZWJQYWdlSUQoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yVGFyZ2V0UHJveHk6OnNl
bmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKKyAgICBp
ZiAobV9wcm92aXNpb25hbFBhZ2UpIHsKKyAgICAgICAgbV9wcm92aXNpb25hbFBhZ2UtPnByb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChp
ZGVudGlmaWVyKCksIG1lc3NhZ2UpLCBtX3Byb3Zpc2lvbmFsUGFnZS0+d2ViUGFnZUlEKCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKG1fcGFnZS5oYXNSdW5uaW5nUHJvY2Vz
cygpKQogICAgICAgICBtX3BhZ2UucHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNl
bmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGlkZW50aWZpZXIoKSwgbWVzc2FnZSksIG1fcGFnZS53
ZWJQYWdlSUQoKSk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmRpZENvbW1pdFBy
b3Zpc2lvbmFsVGFyZ2V0KCkKK3sKKyAgICBBU1NFUlQoaXNQcm92aXNpb25hbCgpKTsKKyAgICBt
X3Byb3Zpc2lvbmFsUGFnZSA9IG51bGxwdHI7Cit9CisKK2Jvb2wgSW5zcGVjdG9yVGFyZ2V0UHJv
eHk6OmlzUHJvdmlzaW9uYWwoKSBjb25zdAoreworICAgIHJldHVybiAhIW1fcHJvdmlzaW9uYWxQ
YWdlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0luc3BlY3RvclRhcmdldFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9JbnNwZWN0b3JUYXJnZXRQcm94eS5oCmluZGV4IGQzODJiMDI2NTA5YzgzOTUxOTlhYmRk
NDk1YWY2YTJhNTFhZjkyN2MuLmRjMzBhMDZiMmI5MDU4MTZjMGUwYzBlODYzNTYzOTU3NTNlNjVj
YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3RvclRhcmdldFBy
b3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yVGFyZ2V0UHJveHku
aApAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
VGFyZ2V0Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1dl
YWtQdHIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTM1LDI1ICszNiwzMCBAQCBjbGFz
cyBXZWJQYWdlUHJveHk7CiAvLyBOT1RFOiBUaGlzIFVJUHJvY2VzcyBzaWRlIEluc3BlY3RvclRh
cmdldCBkb2Vzbid0IGNhcmUgYWJvdXQgdGhlIGZyb250ZW5kIGNoYW5uZWwsIHNpbmNlCiAvLyBh
bnkgdGFyZ2V0IC0+IGZyb250ZW5kIG1lc3NhZ2VzIHdpbGwgYmUgcm91dGVkIHRvIHRoZSBXZWJQ
YWdlUHJveHkgd2l0aCBhIHRhcmdldElkLgogCi1jbGFzcyBJbnNwZWN0b3JUYXJnZXRQcm94eSBm
aW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldCwgcHVibGljIFJlZkNvdW50
ZWQ8SW5zcGVjdG9yVGFyZ2V0UHJveHk+IHsKK2NsYXNzIEluc3BlY3RvclRhcmdldFByb3h5IGZp
bmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0IHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JUYXJnZXRQ
cm94eSk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJbnNwZWN0b3JUYXJnZXRQcm94eT4gY3Jl
YXRlKFdlYlBhZ2VQcm94eSYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5z
cGVjdG9yVGFyZ2V0VHlwZSk7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JU
YXJnZXRQcm94eT4gY3JlYXRlKFdlYlBhZ2VQcm94eSYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQs
IEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSk7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxJbnNwZWN0b3JUYXJnZXRQcm94eT4gY3JlYXRlKFByb3Zpc2lvbmFsUGFnZVByb3h5Jiwg
Y29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlKTsK
ICAgICBJbnNwZWN0b3JUYXJnZXRQcm94eShXZWJQYWdlUHJveHkmLCBjb25zdCBTdHJpbmcmIHRh
cmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUpOwogICAgIH5JbnNwZWN0b3JU
YXJnZXRQcm94eSgpID0gZGVmYXVsdDsKIAogICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0
VHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV90eXBlOyB9CiAgICAgU3RyaW5nIGlk
ZW50aWZpZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KIAotICAgIHZv
aWQgY29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYpOwotICAgIHZvaWQgZGlzY29u
bmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYpOwotICAgIHZvaWQgc2VuZE1lc3NhZ2VU
b1RhcmdldEJhY2tlbmQoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBkaWRDb21taXRQcm92aXNp
b25hbFRhcmdldCgpOworICAgIGJvb2wgaXNQcm92aXNpb25hbCgpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgdm9pZCBjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9u
VHlwZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaXNjb25uZWN0KCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKIAog
cHJpdmF0ZToKICAgICBXZWJQYWdlUHJveHkmIG1fcGFnZTsKICAgICBTdHJpbmcgbV9pZGVudGlm
aWVyOwogICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSBtX3R5cGU7CisgICAgV2Vh
a1B0cjxQcm92aXNpb25hbFBhZ2VQcm94eT4gbV9wcm92aXNpb25hbFBhZ2U7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1By
b3Zpc2lvbmFsUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Byb3Zpc2lv
bmFsUGFnZVByb3h5LmNwcAppbmRleCA4YjBiNDMwYzQxZmVhYTU5ZTRkMDUyZmIyZDc1MmYyYjI0
Y2ViMjBiLi44Y2NlYjA5ZmQyYTgzMzM3MWFjNzVjZTQwYWUyNGIxNjBmZmRiNjNkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuY3BwCkBAIC0z
OCw2ICszOCw3IEBACiAjaW5jbHVkZSAiV2ViRXJyb3JzLmgiCiAjaW5jbHVkZSAiV2ViTmF2aWdh
dGlvbkRhdGFTdG9yZS5oIgogI2luY2x1ZGUgIldlYk5hdmlnYXRpb25TdGF0ZS5oIgorI2luY2x1
ZGUgIldlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2ViUGFnZU1lc3Nh
Z2VzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5
TWVzc2FnZXMuaCIKQEAgLTg1LDExICs4NiwxNSBAQCBQcm92aXNpb25hbFBhZ2VQcm94eTo6UHJv
dmlzaW9uYWxQYWdlUHJveHkoV2ViUGFnZVByb3h5JiBwYWdlLCBSZWY8V2ViUHJvY2Vzc1Bybwog
ICAgIH0KIAogICAgIGluaXRpYWxpemVXZWJQYWdlKCk7CisKKyAgICBtX3BhZ2UuaW5zcGVjdG9y
Q29udHJvbGxlcigpLmRpZENyZWF0ZVByb3Zpc2lvbmFsUGFnZSgqdGhpcyk7CiB9CiAKIFByb3Zp
c2lvbmFsUGFnZVByb3h5Ojp+UHJvdmlzaW9uYWxQYWdlUHJveHkoKQogewogICAgIGlmICghbV93
YXNDb21taXR0ZWQpIHsKKyAgICAgICAgbV9wYWdlLmluc3BlY3RvckNvbnRyb2xsZXIoKS53aWxs
RGVzdHJveVByb3Zpc2lvbmFsUGFnZSgqdGhpcyk7CisKICAgICAgICAgaWYgKCZtX3Byb2Nlc3Mt
PndlYnNpdGVEYXRhU3RvcmUoKSAhPSAmbV9wYWdlLndlYnNpdGVEYXRhU3RvcmUoKSkKICAgICAg
ICAgICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5wYWdlRW5kVXNpbmdXZWJzaXRlRGF0YVN0
b3JlKG1fcGFnZS5pZGVudGlmaWVyKCksIG1fcHJvY2Vzcy0+d2Vic2l0ZURhdGFTdG9yZSgpKTsK
IApAQCAtMzg3LDYgKzM5Miw5IEBAIHZvaWQgUHJvdmlzaW9uYWxQYWdlUHJveHk6OmRpZFJlY2Vp
dmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpECiAgICAgICAgIHx8
IGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRTdGFy
dExvYWRGb3JRdWlja0xvb2tEb2N1bWVudEluTWFpbkZyYW1lOjpuYW1lKCkKICAgICAgICAgfHwg
ZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZpbmlz
aExvYWRGb3JRdWlja0xvb2tEb2N1bWVudEluTWFpbkZyYW1lOjpuYW1lKCkKICNlbmRpZgorICAg
ICAgICB8fCBkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
Q3JlYXRlSW5zcGVjdG9yVGFyZ2V0OjpuYW1lKCkKKyAgICAgICAgfHwgZGVjb2Rlci5tZXNzYWdl
TmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRlc3Ryb3lJbnNwZWN0b3JUYXJnZXQ6
Om5hbWUoKQorICAgICAgICB8fCBkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6U2VuZE1lc3NhZ2VUb0luc3BlY3RvckZyb250ZW5kOjpuYW1lKCkKICAgICAg
ICAgKQogICAgIHsKICAgICAgICAgbV9wYWdlLmRpZFJlY2VpdmVNZXNzYWdlKGNvbm5lY3Rpb24s
IGRlY29kZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUHJvdmlzaW9u
YWxQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVBy
b3h5LmgKaW5kZXggMTc1MjE1MDQ3NDhiZmI2ZjIwNjNjZTE0Y2E0NWZkMWNjNzE4M2VjYi4uYmVl
ODFiYzBiZDlkNzFiNGE2OGRmNGY4YjllNDczNmJkMjlhOGNmYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5oCkBAIC02NCw3ICs2NCw3IEBAIHB1
YmxpYzoKICAgICBQcm92aXNpb25hbFBhZ2VQcm94eShXZWJQYWdlUHJveHkmLCBSZWY8V2ViUHJv
Y2Vzc1Byb3h5PiYmLCBzdGQ6OnVuaXF1ZV9wdHI8U3VzcGVuZGVkUGFnZVByb3h5PiwgdWludDY0
X3QgbmF2aWdhdGlvbklELCBib29sIGlzU2VydmVyUmVkaXJlY3QsIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYsIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQpOwogICAgIH5Qcm92
aXNpb25hbFBhZ2VQcm94eSgpOwogCi0gICAgV2ViUGFnZVByb3h5JiBwYWdlKCkgeyByZXR1cm4g
bV9wYWdlOyB9CisgICAgV2ViUGFnZVByb3h5JiBwYWdlKCkgY29uc3QgeyByZXR1cm4gbV9wYWdl
OyB9CiAgICAgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgd2ViUGFnZUlEKCkgY29uc3QgeyByZXR1
cm4gbV93ZWJQYWdlSUQ7IH0KICAgICBXZWJGcmFtZVByb3h5KiBtYWluRnJhbWUoKSBjb25zdCB7
IHJldHVybiBtX21haW5GcmFtZS5nZXQoKTsgfQogICAgIFdlYlByb2Nlc3NQcm94eSYgcHJvY2Vz
cygpIHsgcmV0dXJuIG1fcHJvY2Vzcy5nZXQoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IGJkYTU5Y2Q4
MDUxNTc2NDZiMzA4ZDJmZDIzNmYzZDExODI3MWUwYjYuLmMyNmY1MGM5ZDQ4YjFlNjRhODMzNGM0
ZWQ1ZmEwMDgzNzA0NWFjNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTI2LDMwICsyNiw0NCBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmgi
CiAKKyNpbmNsdWRlICJQcm92aXNpb25hbFBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYkZyYW1l
UHJveHkuaCIKLSNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaCIKKyNpbmNs
dWRlICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5Lmgi
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWdlbnRCYXNlLmg+CiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvclRhcmdldEFnZW50Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
CiAKK3N0YXRpYyBTdHJpbmcgZ2V0VGFyZ2V0SUQoY29uc3QgUHJvdmlzaW9uYWxQYWdlUHJveHkm
IHByb3Zpc2lvbmFsUGFnZSkKK3sKKyAgICByZXR1cm4gV2ViUGFnZUluc3BlY3RvclRhcmdldDo6
dG9UYXJnZXRJRChwcm92aXNpb25hbFBhZ2Uud2ViUGFnZUlEKCkpOworfQorCiBXZWJQYWdlSW5z
cGVjdG9yQ29udHJvbGxlcjo6V2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIoV2ViUGFnZVByb3h5
JiBwYWdlKQogICAgIDogbV9wYWdlKHBhZ2UpCiAgICAgLCBtX2Zyb250ZW5kUm91dGVyKEZyb250
ZW5kUm91dGVyOjpjcmVhdGUoKSkKICAgICAsIG1fYmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERp
c3BhdGNoZXI6OmNyZWF0ZShtX2Zyb250ZW5kUm91dGVyLmNvcHlSZWYoKSkpCiB7Ci0gICAgYXV0
byB0YXJnZXRBZ2VudCA9IG1ha2VVbmlxdWU8V2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50Piht
X2Zyb250ZW5kUm91dGVyLmdldCgpLCBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpKTsKKyAgICBh
dXRvIHRhcmdldEFnZW50ID0gbWFrZVVuaXF1ZTxJbnNwZWN0b3JUYXJnZXRBZ2VudD4obV9mcm9u
dGVuZFJvdXRlci5nZXQoKSwgbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKSk7CiAKICAgICBtX3Rh
cmdldEFnZW50ID0gdGFyZ2V0QWdlbnQuZ2V0KCk7CiAKICAgICBtX2FnZW50cy5hcHBlbmQoV1RG
TW92ZSh0YXJnZXRBZ2VudCkpOwogfQogCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVy
Ojppbml0KCkKK3sKKyAgICBTdHJpbmcgcGFnZVRhcmdldElkID0gV2ViUGFnZUluc3BlY3RvclRh
cmdldDo6dG9UYXJnZXRJRChtX3BhZ2Uud2ViUGFnZUlEKCkpOworICAgIGNyZWF0ZUluc3BlY3Rv
clRhcmdldChwYWdlVGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZTo6UGFn
ZSk7Cit9CisKIHZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OnBhZ2VDbG9zZWQoKQog
ewogICAgIGRpc2Nvbm5lY3RBbGxGcm9udGVuZHMoKTsKQEAgLTEzNCwzNyArMTQ4LDU3IEBAIHZv
aWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OnNldEluZGljYXRpbmcoYm9vbCBpbmRpY2F0
aW5nKQogfQogI2VuZGlmCiAKLXZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmNsZWFy
VGFyZ2V0cygpCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpjcmVhdGVJbnNwZWN0
b3JUYXJnZXQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJn
ZXRUeXBlIHR5cGUpCiB7Ci0gICAgZm9yIChhdXRvJiB0YXJnZXQgOiBtX3RhcmdldHMpCi0gICAg
ICAgIG1fdGFyZ2V0QWdlbnQtPnRhcmdldERlc3Ryb3llZCgqdGFyZ2V0LmdldCgpKTsKLQotICAg
IG1fdGFyZ2V0cy5jbGVhcigpOworICAgIGFkZFRhcmdldChJbnNwZWN0b3JUYXJnZXRQcm94eTo6
Y3JlYXRlKG1fcGFnZSwgdGFyZ2V0SWQsIHR5cGUpKTsKIH0KIAotdm9pZCBXZWJQYWdlSW5zcGVj
dG9yQ29udHJvbGxlcjo6Y3JlYXRlSW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0
SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQordm9pZCBXZWJQYWdlSW5z
cGVjdG9yQ29udHJvbGxlcjo6ZGVzdHJveUluc3BlY3RvclRhcmdldChjb25zdCBTdHJpbmcmIHRh
cmdldElkKQogewotICAgIGF1dG8gdGFyZ2V0ID0gSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNyZWF0
ZShtX3BhZ2UsIHRhcmdldElkLCB0eXBlKTsKLSAgICBtX3RhcmdldHMuYXBwZW5kKHRhcmdldC5j
b3B5UmVmKCkpOworICAgIGF1dG8gaXQgPSBtX3RhcmdldHMuZmluZCh0YXJnZXRJZCk7CisgICAg
aWYgKGl0ID09IG1fdGFyZ2V0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fdGFyZ2V0
QWdlbnQtPnRhcmdldERlc3Ryb3llZCgqaXQtPnZhbHVlKTsKKyAgICBtX3RhcmdldHMucmVtb3Zl
KGl0KTsKK30KIAotICAgIG1fdGFyZ2V0QWdlbnQtPnRhcmdldENyZWF0ZWQodGFyZ2V0LmdldCgp
KTsKK3ZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OnNlbmRNZXNzYWdlVG9JbnNwZWN0
b3JGcm9udGVuZChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
Cit7CisgICAgbV90YXJnZXRBZ2VudC0+c2VuZE1lc3NhZ2VGcm9tVGFyZ2V0VG9Gcm9udGVuZCh0
YXJnZXRJZCwgbWVzc2FnZSk7CiB9CiAKLXZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6
OmRlc3Ryb3lJbnNwZWN0b3JUYXJnZXQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCkKK3ZvaWQgV2Vi
UGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENyZWF0ZVByb3Zpc2lvbmFsUGFnZShQcm92aXNp
b25hbFBhZ2VQcm94eSYgcHJvdmlzaW9uYWxQYWdlKQogewotICAgIGF1dG8gcG9zaXRpb24gPSBt
X3RhcmdldHMuZmluZE1hdGNoaW5nKFsmXShjb25zdCBhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVt
LT5pZGVudGlmaWVyKCkgPT0gdGFyZ2V0SWQ7IH0pOwotICAgIGlmIChwb3NpdGlvbiA9PSBub3RG
b3VuZCkKLSAgICAgICAgcmV0dXJuOworICAgIGFkZFRhcmdldChJbnNwZWN0b3JUYXJnZXRQcm94
eTo6Y3JlYXRlKHByb3Zpc2lvbmFsUGFnZSwgZ2V0VGFyZ2V0SUQocHJvdmlzaW9uYWxQYWdlKSwg
SW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlOjpQYWdlKSk7Cit9CiAKLSAgICBhdXRvJiB0
YXJnZXQgPSBtX3RhcmdldHNbcG9zaXRpb25dOwotICAgIG1fdGFyZ2V0QWdlbnQtPnRhcmdldERl
c3Ryb3llZCgqdGFyZ2V0LmdldCgpKTsKK3ZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6
OndpbGxEZXN0cm95UHJvdmlzaW9uYWxQYWdlKGNvbnN0IFByb3Zpc2lvbmFsUGFnZVByb3h5JiBw
cm92aXNpb25hbFBhZ2UpCit7CisgICAgZGVzdHJveUluc3BlY3RvclRhcmdldChnZXRUYXJnZXRJ
RChwcm92aXNpb25hbFBhZ2UpKTsKK30KIAotICAgIG1fdGFyZ2V0cy5yZW1vdmUocG9zaXRpb24p
Owordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ29tbWl0UHJvdmlzaW9uYWxQ
YWdlKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIG9sZFdlYlBhZ2VJRCwgV2ViQ29yZTo6UGFnZUlk
ZW50aWZpZXIgbmV3V2ViUGFnZUlEKQoreworICAgIFN0cmluZyBvbGRJRCA9IFdlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXQ6OnRvVGFyZ2V0SUQob2xkV2ViUGFnZUlEKTsKKyAgICBTdHJpbmcgbmV3SUQg
PSBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojp0b1RhcmdldElEKG5ld1dlYlBhZ2VJRCk7CisgICAg
YXV0byBuZXdUYXJnZXQgPSBtX3RhcmdldHMudGFrZShuZXdJRCk7CisgICAgQVNTRVJUKG5ld1Rh
cmdldCk7CisgICAgbmV3VGFyZ2V0LT5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldCgpOworICAg
IG1fdGFyZ2V0QWdlbnQtPmRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0KG9sZElELCBuZXdJRCk7
CisKKyAgICAvLyBXZSd2ZSBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgb2xkIHBhZ2UgYW5kIHdpbGwg
bm90IHJlY2VpdmUgYW55IG1lc3NhZ2UgZnJvbSBpdCwgc28KKyAgICAvLyB3ZSBkZXN0cm95IGV2
ZXJ5dGhpbmcgYnV0IHRoZSBuZXcgdGFyZ2V0IGhlcmUuCisgICAgLy8gRklYTUUod2Via2l0Lm9y
Zy9iLzIwMjkzNyk6IGRvIG5vdCBkZXN0cm95IHRhcmdldHMgdGhhdCBiZWxvbmcgdG8gdGhlIGNv
bW1pdHRlZCBwYWdlLgorICAgIGZvciAoYXV0byYgdGFyZ2V0IDogbV90YXJnZXRzLnZhbHVlcygp
KQorICAgICAgICBtX3RhcmdldEFnZW50LT50YXJnZXREZXN0cm95ZWQoKnRhcmdldCk7CisgICAg
bV90YXJnZXRzLmNsZWFyKCk7CisgICAgbV90YXJnZXRzLnNldChuZXdUYXJnZXQtPmlkZW50aWZp
ZXIoKSwgV1RGTW92ZShuZXdUYXJnZXQpKTsKIH0KIAotdm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29u
dHJvbGxlcjo6c2VuZE1lc3NhZ2VUb0luc3BlY3RvckZyb250ZW5kKGNvbnN0IFN0cmluZyYgdGFy
Z2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3ZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRy
b2xsZXI6OmFkZFRhcmdldChzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJveHk+JiYg
dGFyZ2V0KQogewotICAgIG1fdGFyZ2V0QWdlbnQtPnNlbmRNZXNzYWdlRnJvbVRhcmdldFRvRnJv
bnRlbmQodGFyZ2V0SWQsIG1lc3NhZ2UpOworICAgIG1fdGFyZ2V0QWdlbnQtPnRhcmdldENyZWF0
ZWQoKnRhcmdldCk7CisgICAgbV90YXJnZXRzLnNldCh0YXJnZXQtPmlkZW50aWZpZXIoKSwgV1RG
TW92ZSh0YXJnZXQpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCAw
Y2FmNmExYzI3OTIwNDNkM2JlMDU3MWEyOGZkYjFlMTQxOTdhNjExLi5hNzBkY2U3NWJkZWUwN2My
MzJiOGJhMzVkZmNjMDhkMTYxYjYwNzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTQ2LDYgKzQ2LDcgQEAgY2xh
c3MgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIgewogcHVibGljOgogICAgIFdlYlBhZ2VJbnNw
ZWN0b3JDb250cm9sbGVyKFdlYlBhZ2VQcm94eSYpOwogCisgICAgdm9pZCBpbml0KCk7CiAgICAg
dm9pZCBwYWdlQ2xvc2VkKCk7CiAKICAgICBib29sIGhhc0xvY2FsRnJvbnRlbmQoKSBjb25zdDsK
QEAgLTYwLDE4ICs2MSwyMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJbmRpY2F0aW5nKGJvb2wp
OwogI2VuZGlmCiAKLSAgICB2b2lkIGNsZWFyVGFyZ2V0cygpOwogICAgIHZvaWQgY3JlYXRlSW5z
cGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9y
VGFyZ2V0VHlwZSk7CiAgICAgdm9pZCBkZXN0cm95SW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0SWQpOwogICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0luc3BlY3RvckZyb250ZW5kKGNv
bnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CiAKKyAgICB2b2lk
IGRpZENyZWF0ZVByb3Zpc2lvbmFsUGFnZShQcm92aXNpb25hbFBhZ2VQcm94eSYpOworICAgIHZv
aWQgd2lsbERlc3Ryb3lQcm92aXNpb25hbFBhZ2UoY29uc3QgUHJvdmlzaW9uYWxQYWdlUHJveHkm
KTsKKyAgICB2b2lkIGRpZENvbW1pdFByb3Zpc2lvbmFsUGFnZShXZWJDb3JlOjpQYWdlSWRlbnRp
ZmllciBvbGRXZWJQYWdlSUQsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIG5ld1dlYlBhZ2VJRCk7
CisKIHByaXZhdGU6CisgICAgdm9pZCBhZGRUYXJnZXQoc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rv
clRhcmdldFByb3h5PiYmKTsKKwogICAgIFdlYlBhZ2VQcm94eSYgbV9wYWdlOwogICAgIFJlZjxJ
bnNwZWN0b3I6OkZyb250ZW5kUm91dGVyPiBtX2Zyb250ZW5kUm91dGVyOwogICAgIFJlZjxJbnNw
ZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwogICAgIEluc3Bl
Y3Rvcjo6QWdlbnRSZWdpc3RyeSBtX2FnZW50czsKICAgICBJbnNwZWN0b3I6Okluc3BlY3RvclRh
cmdldEFnZW50KiBtX3RhcmdldEFnZW50OwotICAgIFZlY3RvcjxSZWZQdHI8SW5zcGVjdG9yVGFy
Z2V0UHJveHk+PiBtX3RhcmdldHM7CisgICAgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6dW5pcXVlX3B0
cjxJbnNwZWN0b3JUYXJnZXRQcm94eT4+IG1fdGFyZ2V0czsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZUluc3Bl
Y3RvclRhcmdldEFnZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXRBZ2VudC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMDAx
YzA4ZDAyZjdlZDZjMDA4NTY2ZjdhZjg5YTM4MWNkZWQyMTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFn
ZUluc3BlY3RvclRhcmdldEFnZW50LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50LmgiCi0KLW5h
bWVzcGFjZSBXZWJLaXQgewotCi1XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OldlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXRBZ2VudChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJv
dXRlciwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIpCi0g
ICAgOiBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldEFnZW50KGZyb250ZW5kUm91dGVyLCBiYWNr
ZW5kRGlzcGF0Y2hlcikKLSAgICAsIG1fcm91dGVyKGZyb250ZW5kUm91dGVyKQotewotfQotCi1X
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6On5XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQo
KSA9IGRlZmF1bHQ7Ci0KLUluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJiBXZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0QWdlbnQ6OmZyb250ZW5kQ2hhbm5lbCgpCi17Ci0gICAgcmV0dXJuICp0aGlzOwot
fQotCi1JbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUgV2ViUGFnZUlu
c3BlY3RvclRhcmdldEFnZW50Ojpjb25uZWN0aW9uVHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fcm91dGVyLmhhc0xvY2FsRnJvbnRlbmQoKSA/IEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVs
OjpDb25uZWN0aW9uVHlwZTo6TG9jYWwgOiBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29u
bmVjdGlvblR5cGU6OlJlbW90ZTsKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdl
bnQ6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmKQotewotICAgIC8vIEludGVu
dGlvbmFsbHkgaWdub3JlZCwgdGhpcyBjaGFubmVsIGlzIG5vdCBhY3R1YWxseSB1c2VkIHRvIHNl
bmQgbWVzc2FnZXMuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZUlu
c3BlY3RvclRhcmdldEFnZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0QWdlbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTYzZjlj
M2NjY2VhNTQ4N2E0Y2UyOTNlYzVlMDgzYThjYzhiNTE1NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0QWdlbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclRhcmdldEFnZW50Lmg+Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQgZmluYWwg
OiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRBZ2VudCwgcHVibGljIEluc3BlY3Rv
cjo6RnJvbnRlbmRDaGFubmVsIHsKLXB1YmxpYzoKLSAgICBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
QWdlbnQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciYsIEluc3BlY3Rvcjo6QmFja2VuZERpc3Bh
dGNoZXImKTsKLSAgICB2aXJ0dWFsIH5XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQoKTsKLQot
ICAgIC8vIEluc3BlY3RvclRhcmdldEFnZW50Ci0gICAgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5u
ZWwmIGZyb250ZW5kQ2hhbm5lbCgpOwotCi0gICAgLy8gRnJvbnRlbmRDaGFubmVsCi0gICAgSW5z
cGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlIGNvbm5lY3Rpb25UeXBlKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJik7Ci0K
LXByaXZhdGU6Ci0gICAgSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciYgbV9yb3V0ZXI7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwCmluZGV4IGNlYmQxMWZiMDAyZWFjNmM2ZjljYTFjZmVhMTQ4MDRhYmQ0ODMwMDguLjMz
OTI1YjUyNDBhMGI0ZTI5MTAyYTJjZDRlZWQyYzdhODk0OGQ3ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtNDkzLDggKzQ5Myw3IEBAIFdlYlBhZ2VQcm94
eTo6V2ViUGFnZVByb3h5KFBhZ2VDbGllbnQmIHBhZ2VDbGllbnQsIFdlYlByb2Nlc3NQcm94eSYg
cHJvY2VzcywgUmVmCiAgICAgbV9pbnNwZWN0b3JEZWJ1Z2dhYmxlLT5zZXRSZW1vdGVEZWJ1Z2dp
bmdBbGxvd2VkKHRydWUpOwogICAgIG1faW5zcGVjdG9yRGVidWdnYWJsZS0+aW5pdCgpOwogI2Vu
ZGlmCi0KLSAgICBjcmVhdGVJbnNwZWN0b3JUYXJnZXRzKCk7CisgICAgbV9pbnNwZWN0b3JDb250
cm9sbGVyLT5pbml0KCk7CiB9CiAKIFdlYlBhZ2VQcm94eTo6fldlYlBhZ2VQcm94eSgpCkBAIC04
NjMsOSArODYyLDYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmZpbmlzaEF0dGFjaGluZ1RvV2ViUHJv
Y2VzcyhQcm9jZXNzTGF1bmNoUmVhc29uIHJlYXNvbikKICAgICByZW1vdGVJbnNwZWN0b3JJbmZv
cm1hdGlvbkRpZENoYW5nZSgpOwogI2VuZGlmCiAKLSAgICBjbGVhckluc3BlY3RvclRhcmdldHMo
KTsKLSAgICBjcmVhdGVJbnNwZWN0b3JUYXJnZXRzKCk7Ci0KICAgICBwYWdlQ2xpZW50KCkuZGlk
UmVsYXVuY2hQcm9jZXNzKCk7CiAgICAgbV9wYWdlTG9hZFN0YXRlLmRpZFN3YXBXZWJQcm9jZXNz
ZXMoKTsKICAgICBpZiAocmVhc29uICE9IFByb2Nlc3NMYXVuY2hSZWFzb246OkluaXRpYWxQcm9j
ZXNzKQpAQCAtMTY2OCwxNyArMTY2NCw2IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZW1vdGVJbnNw
ZWN0b3JJbmZvcm1hdGlvbkRpZENoYW5nZSgpCiB9CiAjZW5kaWYKIAotdm9pZCBXZWJQYWdlUHJv
eHk6OmNsZWFySW5zcGVjdG9yVGFyZ2V0cygpCi17Ci0gICAgbV9pbnNwZWN0b3JDb250cm9sbGVy
LT5jbGVhclRhcmdldHMoKTsKLX0KLQotdm9pZCBXZWJQYWdlUHJveHk6OmNyZWF0ZUluc3BlY3Rv
clRhcmdldHMoKQotewotICAgIFN0cmluZyBwYWdlVGFyZ2V0SWQgPSBtYWtlU3RyaW5nKCJwYWdl
LSIsIG1fd2ViUGFnZUlELnRvVUludDY0KCkpOwotICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+
Y3JlYXRlSW5zcGVjdG9yVGFyZ2V0KHBhZ2VUYXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JU
YXJnZXRUeXBlOjpQYWdlKTsKLX0KLQogdm9pZCBXZWJQYWdlUHJveHk6OnNldEJhY2tncm91bmRD
b2xvcihjb25zdCBPcHRpb25hbDxDb2xvcj4mIGNvbG9yKQogewogICAgIGlmIChtX2JhY2tncm91
bmRDb2xvciA9PSBjb2xvcikKQEAgLTMwNDIsNiArMzAyNyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5
Ojpjb21taXRQcm92aXNpb25hbFBhZ2UoRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIHVpbnQ2NF90
IG5hdmlnCiAgICAgaWYgKCFkaWRTdXNwZW5kUHJldmlvdXNQYWdlKQogICAgICAgICBtX3Byb2Nl
c3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNsb3NlKCksIG1fd2ViUGFnZUlEKTsKIAorICAg
IGNvbnN0IGF1dG8gb2xkV2ViUGFnZUlEID0gbV93ZWJQYWdlSUQ7CiAgICAgc3dhcFRvV2ViUHJv
Y2VzcyhtX3Byb3Zpc2lvbmFsUGFnZS0+cHJvY2VzcygpLCBtX3Byb3Zpc2lvbmFsUGFnZS0+d2Vi
UGFnZUlEKCksIG1fcHJvdmlzaW9uYWxQYWdlLT50YWtlRHJhd2luZ0FyZWEoKSwgbV9wcm92aXNp
b25hbFBhZ2UtPm1haW5GcmFtZSgpKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQpAQCAtMzA1Miw2
ICszMDM4LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNvbW1pdFByb3Zpc2lvbmFsUGFnZShGcmFt
ZUlkZW50aWZpZXIgZnJhbWVJRCwgdWludDY0X3QgbmF2aWcKIAogICAgIGRpZENvbW1pdExvYWRG
b3JGcmFtZShmcmFtZUlELCBuYXZpZ2F0aW9uSUQsIG1pbWVUeXBlLCBmcmFtZUhhc0N1c3RvbUNv
bnRlbnRQcm92aWRlciwgZnJhbWVMb2FkVHlwZSwgY2VydGlmaWNhdGVJbmZvLCBjb250YWluc1Bs
dWdpbkRvY3VtZW50LCBmb3JjZWRIYXNJbnNlY3VyZUNvbnRlbnQsIHVzZXJEYXRhKTsKIAorICAg
IG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZGlkQ29tbWl0UHJvdmlzaW9uYWxQYWdlKG9sZFdlYlBh
Z2VJRCwgbV93ZWJQYWdlSUQpOwogICAgIG1fcHJvdmlzaW9uYWxQYWdlID0gbnVsbHB0cjsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCBjNmE0ZmRjZmEzNWVj
YjU0MTI5YTk3YjQ1MDg4YTJmYzEwNDczNGVkLi44MjIyNGViMzhjYjdlYzQ4MDY2NzQwNDA3Njgx
ZDY4ZGZlYzZiNDc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAt
MjA3Miw5ICsyMDcyLDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc3RvcEFsbFVSTFNjaGVtZVRh
c2tzKFdlYlByb2Nlc3NQcm94eSogPSBudWxscHRyKTsKIAotICAgIHZvaWQgY2xlYXJJbnNwZWN0
b3JUYXJnZXRzKCk7Ci0gICAgdm9pZCBjcmVhdGVJbnNwZWN0b3JUYXJnZXRzKCk7Ci0KICNpZiBF
TkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQogICAgIHZvaWQgcmVnaXN0ZXJBdHRhY2htZW50SWRl
bnRpZmllckZyb21EYXRhKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUs
IGNvbnN0IFN0cmluZyYgcHJlZmVycmVkRmlsZU5hbWUsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5j
ZSYpOwogICAgIHZvaWQgcmVnaXN0ZXJBdHRhY2htZW50SWRlbnRpZmllckZyb21GaWxlUGF0aChj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlLCBjb25zdCBTdHJpbmcmIGZp
bGVQYXRoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IGNjMmUxMGRkMTljOWRjMWI3MmM1MmQzMTA5YzBmNTVhNmQ3MjZiNmIuLjk4Yzhl
OGQwM2E0Zjc2NzFiZTAwZDQyNzM1YzA3ZDA0YWFjNGExMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktp
dC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTM2OCw3ICsxMzY4LDYgQEAK
IAkJQTU0M0UzMDcyMTVBRDEzNzAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9u
dGVuZENoYW5uZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE1NDNFMzA1MjE1QUQxMkQwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJv
bnRlbmRDaGFubmVsLmggKi87IH07CiAJCUE1NDNFMzBDMjE1QzhBOEQwMDI3OUNEOSAvKiBXZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBNTQzRTMwODIxNUM4QTgzMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRh
cmdldC5oICovOyB9OwogCQlBNTQzRTMwRDIxNUM4QTkwMDAyNzlDRDkgLyogV2ViUGFnZUluc3Bl
Y3RvclRhcmdldENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE1NDNFMzBCMjE1QzhBODQwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0Q29udHJvbGxlci5oICovOyB9OwotCQlBNTQzRTMxMDIxNUQ4Q0U2MDAyNzlDRDkgLyog
V2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBNTQzRTMwRTIxNUQ4Q0UyMDAyNzlDRDkgLyogV2ViUGFnZUlu
c3BlY3RvclRhcmdldEFnZW50LmggKi87IH07CiAJCUE1NUJBODEwMUJBMTMxN0UwMDdDRDMzRCAv
KiBfV0tSZW1vdGVXZWJJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU1QkE4MEMxQkExMkJFMTAwN0NEMzNEIC8q
IF9XS1JlbW90ZVdlYkluc3BlY3RvclZpZXdDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTU1QkE4MTcxQkEyM0UxMjAwN0NEMzNE
IC8qIFJlbW90ZVdlYkluc3BlY3RvclVJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBNTVCQTgxMzFCQTIzRTA1MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5z
cGVjdG9yVUkuaCAqLzsgfTsKIAkJQTU1QkE4MUYxQkEyNUIyNzAwN0NEMzNEIC8qIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBNTVCQTgxOTFCQTI1QjFFMDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHkuaCAqLzsgfTsKQEAgLTQxMTgsOCArNDExNyw2IEBACiAJCUE1NDNFMzA5MjE1QzhBODMwMDI3
OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE1NDNFMzBBMjE1QzhBODQwMDI3OUNEOSAvKiBXZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTQzRTMwQjIxNUM4QTg0MDAy
NzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQTU0M0UzMEUyMTVEOENFMjAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JU
YXJnZXRBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTU0M0UzMEYyMTVEOENFMjAwMjc5Q0Q5
IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRBZ2VudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBNTVCQTgwQzFCQTEyQkUxMDA3Q0QzM0QgLyogX1dLUmVtb3RlV2ViSW5zcGVjdG9yVmll
d0NvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLUmVtb3Rl
V2ViSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTU1QkE4MEQxQkExMkJFMTAwN0NEMzNEIC8qIF9XS1JlbW90ZVdlYkluc3BlY3RvclZpZXdD
b250cm9sbGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dL
UmVtb3RlV2ViSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE1NUJBODEyMUJBMjNFMDUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JV
SS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVXZWJJbnNw
ZWN0b3JVSS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MjcxLDkgKzYyNjgs
OSBAQAogCQkJCTJEQUFEQThFMjI5OEMyMTAwMEUzNkIwQyAvKiBEZXZpY2VNYW5hZ2VtZW50U1BJ
LmggKi8sCiAJCQkJNTdCODI2NDAyMzA0RUIzRTAwQjcyRUIwIC8qIE5lYXJGaWVsZFNQSS5oICov
LAogCQkJCTM3NTRENTQ0MUIzQTI5RkQwMDNBNEM3RiAvKiBOU0ludm9jYXRpb25TUEkuaCAqLywK
KwkJCQkzN0I0N0UyQzFENjREQjc2MDA1RjRFRkYgLyogb2JqY1NQSS5oICovLAogCQkJCTBFOTdE
NzRDMjAwRThGRjMwMEJGNjY0MyAvKiBTYWZlQnJvd3NpbmdTUEkuaCAqLywKIAkJCQk3QUE3NDZE
NDIzNTkzMDg0MDAwOTUwNTAgLyogU2VjSXRlbVNQSS5oICovLAotCQkJCTM3QjQ3RTJDMUQ2NERC
NzYwMDVGNEVGRiAvKiBvYmpjU1BJLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IENvY29hOwogCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTc5MDUsOCArNzkwMiw2IEBACiAJCQkJMkQ5RUEz
MEUxQTk2Q0JGRjAwMkQyODA3IC8qIFdlYlBhZ2VJbmplY3RlZEJ1bmRsZUNsaWVudC5oICovLAog
CQkJCUE1MTNGNTNGMjE1NEE1Q0QwMDY2Mjg0MSAvKiBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxl
ci5jcHAgKi8sCiAJCQkJQTUxM0Y1M0UyMTU0QTVDQzAwNjYyODQxIC8qIFdlYlBhZ2VJbnNwZWN0
b3JDb250cm9sbGVyLmggKi8sCi0JCQkJQTU0M0UzMEYyMTVEOENFMjAwMjc5Q0Q5IC8qIFdlYlBh
Z2VJbnNwZWN0b3JUYXJnZXRBZ2VudC5jcHAgKi8sCi0JCQkJQTU0M0UzMEUyMTVEOENFMjAwMjc5
Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRBZ2VudC5oICovLAogCQkJCUJDMTExQjBCMTEy
RjVFNEYwMDMzN0JBQiAvKiBXZWJQYWdlUHJveHkuY3BwICovLAogCQkJCUJDMDMyRENCMTBGNDM4
OUYwMDU4QzE1QSAvKiBXZWJQYWdlUHJveHkuaCAqLywKIAkJCQlCQ0JEMzhGQTEyNUJBQjlBMDBE
MkMyOUYgLyogV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluICovLApAQCAtOTQwOSw3ICs5NDA0LDYg
QEAKIAkJCQkxQUZERTY2MjE5NTRFOUIxMDBDNDhGRkEgLyogQVBJU2Vzc2lvblN0YXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQTRENjY0ODE4QTJEOTFBMDBEODJFMjEgLyogQVBJVUlDbGllbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDREI4NkMxMTIwMEZCOTcwMDcyNTRCRSAvKiBBUElVUkwu
aCBpbiBIZWFkZXJzICovLAotCQkJCTdBQTc0NkQ1MjM1OTNEODEwMDA5NTA1MCAvKiBTZWNJdGVt
U1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0UyMzE1RDEyMkMzMENBMDBENUMzNUEgLyogQVBJ
VVJMUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM5MEExRDIxMjJERDU1RTAwQ0M4QzUw
IC8qIEFQSVVSTFJlc3BvbnNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNjExM0UyNTEyNkNFMTgy
MDA1N0QwQTcgLyogQVBJVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKQEAg
LTk3NzksNiArOTc3Myw3IEBACiAJCQkJNTExRjhBN0IxMzhCNDYwOTAwQTk1RjQ0IC8qIFNlY0l0
ZW1TaGltTGlicmFyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE4RTY5MEMxNjlCNTYzRjAwOUI2
NjcwIC8qIFNlY0l0ZW1TaGltUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxOEU2OTE4MTY5
QjY2N0IwMDlCNjY3MCAvKiBTZWNJdGVtU2hpbVByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICov
LAorCQkJCTdBQTc0NkQ1MjM1OTNEODEwMDA5NTA1MCAvKiBTZWNJdGVtU1BJLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1NzBBQjhGMzIwQUUzQkQ3MDBCOEJFODcgLyogU2VjS2V5UHJveHlTdG9yZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTE0RDlGNTcxOTExOUQzNTAwMDA2M0E3IC8qIFNlcnZpY2Vz
Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFGREU2NUExOTU0QTQyQjAwQzQ4RkZB
IC8qIFNlc3Npb25TdGF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05OTkyLDcgKzk5ODcsNiBAQAog
CQkJCTJEOUVBMzBGMUE5NkNCRkYwMDJEMjgwNyAvKiBXZWJQYWdlSW5qZWN0ZWRCdW5kbGVDbGll
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MTNGNTQwMjE1NEE1RDcwMDY2Mjg0MSAvKiBXZWJQ
YWdlSW5zcGVjdG9yQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU0M0UzMEMyMTVD
OEE4RDAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCBpbiBIZWFkZXJzICovLAot
CQkJCUE1NDNFMzEwMjE1RDhDRTYwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdl
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1NDNFMzBEMjE1QzhBOTAwMDI3OUNEOSAvKiBXZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU0M0Uz
MDcyMTVBRDEzNzAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5u
ZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUMwQ0U3MkExMTI0N0U3MUQwMEJDMEVDNCAvKiBXZWJQ
YWdlTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcAppbmRleCA1
NmIwZDUyZWM1OTU3Y2M3M2ExM2YwNjdlYjNjZGEwMzJkZTIxNzU4Li5hNzBmNmZkNTIwOTZhNWRj
YTkwMWVhNzBhMzc1NWYxNGQ2YjRhMGZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcApAQCAtMjcs
NiArMjcsNyBAQAogI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCIKIAogI2luY2x1
ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRD
aGFubmVsLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9QYWdlLmg+CiAKQEAgLTQxLDE5ICs0MiwyNSBAQCBXZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0OjpXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0KFdlYlBhZ2UmIHBhZ2UpCiAKIFN0cmlu
ZyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0OjppZGVudGlmaWVyKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbWFrZVN0cmluZygicGFnZS0iLCBtX3BhZ2UuaWRlbnRpZmllcigpLnRvVUludDY0KCkpOwor
ICAgIHJldHVybiB0b1RhcmdldElEKG1fcGFnZS5pZGVudGlmaWVyKCkpOwogfQogCi12b2lkIFdl
YlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OmNvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwm
IGNoYW5uZWwpCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OmNvbm5lY3QoSW5zcGVjdG9y
OjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlIGNvbm5lY3Rpb25UeXBlKQogeworICAg
IGlmIChtX2NoYW5uZWwpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NoYW5uZWwgPSBtYWtlVW5p
cXVlPFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw+KG1fcGFnZSwgaWRlbnRp
ZmllcigpLCBjb25uZWN0aW9uVHlwZSk7CiAgICAgaWYgKG1fcGFnZS5jb3JlUGFnZSgpKQotICAg
ICAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmNvbm5lY3RGcm9u
dGVuZChjaGFubmVsKTsKKyAgICAgICAgbV9wYWdlLmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRy
b2xsZXIoKS5jb25uZWN0RnJvbnRlbmQoKm1fY2hhbm5lbCk7CiB9CiAKLXZvaWQgV2ViUGFnZUlu
c3BlY3RvclRhcmdldDo6ZGlzY29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYgY2hh
bm5lbCkKK3ZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldDo6ZGlzY29ubmVjdCgpCiB7CisgICAg
aWYgKCFtX2NoYW5uZWwpCisgICAgICAgIHJldHVybjsKICAgICBpZiAobV9wYWdlLmNvcmVQYWdl
KCkpCi0gICAgICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZGlz
Y29ubmVjdEZyb250ZW5kKGNoYW5uZWwpOworICAgICAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpLmRpc2Nvbm5lY3RGcm9udGVuZCgqbV9jaGFubmVsKTsKKyAgICBt
X2NoYW5uZWwucmVzZXQoKTsKIH0KIAogdm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0OjpzZW5k
TWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCkBAIC02Miw0ICs2
OSwxMCBAQCB2b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OnNlbmRNZXNzYWdlVG9UYXJnZXRC
YWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKICAgICAgICAgbV9wYWdlLmNvcmVQYWdlKCkt
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS5kaXNwYXRjaE1lc3NhZ2VGcm9tRnJvbnRlbmQobWVzc2Fn
ZSk7CiB9CiAKK1N0cmluZyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojp0b1RhcmdldElEKFdlYkNv
cmU6OlBhZ2VJZGVudGlmaWVyIHBhZ2VJRCkKK3sKKyAgICByZXR1cm4gbWFrZVN0cmluZygicGFn
ZS0iLCBwYWdlSUQudG9VSW50NjQoKSk7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0LmgKaW5kZXggYjcwZTMxYzhiODc3MGM0YmYxZWNiNDU4OGViZjI2NzViM2I5
ZjQ2NC4uNmNiZDdmYWQ1ZmY5MWFmZDg1OGRhMzQ2YWRiZmVlZDY0MjRiMGIyYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdl
dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0
b3JUYXJnZXQuaApAQCAtMjYsMjkgKzI2LDM0IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclRhcmdldC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFn
ZUlkZW50aWZpZXIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNl
IFdlYktpdCB7CiAKIGNsYXNzIFdlYlBhZ2U7CitjbGFzcyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
RnJvbnRlbmRDaGFubmVsOwogCiBjbGFzcyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0IGZpbmFsIDog
cHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0IHsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
KTsKIHB1YmxpYzoKLSAgICBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0KFdlYlBhZ2UmKTsKKyAgICBl
eHBsaWNpdCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0KFdlYlBhZ2UmKTsKICAgICB+V2ViUGFnZUlu
c3BlY3RvclRhcmdldCgpID0gZGVmYXVsdDsKIAogICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFy
Z2V0VHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gSW5zcGVjdG9yOjpJbnNwZWN0b3JU
YXJnZXRUeXBlOjpQYWdlOyB9CiAKICAgICBTdHJpbmcgaWRlbnRpZmllcigpIGNvbnN0IGZpbmFs
OwogCi0gICAgdm9pZCBjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJik7Ci0gICAg
dm9pZCBkaXNjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJik7Ci0gICAgdm9pZCBz
ZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGNvbm5l
Y3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlKSBvdmVycmlkZTsK
KyAgICB2b2lkIGRpc2Nvbm5lY3QoKSBvdmVycmlkZTsKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9U
YXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworCisgICAgc3RhdGljIFN0cmlu
ZyB0b1RhcmdldElEKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyKTsKIAogcHJpdmF0ZToKICAgICBX
ZWJQYWdlJiBtX3BhZ2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRGcm9udGVuZENoYW5uZWw+IG1fY2hhbm5lbDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUlu
c3BlY3RvclRhcmdldENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuY3BwCmluZGV4IDUyNTQ4OTY3
M2Q2NmEyZTRhN2ZkMzJmMzY0ODUzNGNlM2VkZWVjNDcuLmNkYTRmMWU4ZDNjNTc1MzYxNjJhYTM5
MGVkNzRiNjgxYzg5MTM0MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxl
ci5jcHAKQEAgLTU4LDcgKzU4LDYgQEAgdm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJv
bGxlcjo6cmVtb3ZlVGFyZ2V0KEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0JgogICAgIG1fcGFn
ZS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRlc3Ryb3lJbnNwZWN0b3JUYXJnZXQodGFy
Z2V0LmlkZW50aWZpZXIoKSkpOwogCiAgICAgbV90YXJnZXRzLnJlbW92ZSh0YXJnZXQuaWRlbnRp
ZmllcigpKTsKLSAgICBtX3RhcmdldEZyb250ZW5kQ2hhbm5lbHMucmVtb3ZlKHRhcmdldC5pZGVu
dGlmaWVyKCkpOwogfQogCiB2b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpj
b25uZWN0SW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6RnJvbnRl
bmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSkKQEAgLTY3LDEzICs2Niw3
IEBAIHZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6OmNvbm5lY3RJbnNwZWN0
b3IoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwKICAgICBpZiAoIXRhcmdldCkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgUmVmUHRyPFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw+
IGNoYW5uZWwgPSBtX3RhcmdldEZyb250ZW5kQ2hhbm5lbHMuZ2V0KHRhcmdldElkKTsKLSAgICBp
ZiAoIWNoYW5uZWwpIHsKLSAgICAgICAgY2hhbm5lbCA9IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRG
cm9udGVuZENoYW5uZWw6OmNyZWF0ZSgqdGhpcywgdGFyZ2V0SWQsIGNvbm5lY3Rpb25UeXBlKTsK
LSAgICAgICAgbV90YXJnZXRGcm9udGVuZENoYW5uZWxzLnNldCh0YXJnZXQtPmlkZW50aWZpZXIo
KSwgY2hhbm5lbCk7Ci0gICAgfQotCi0gICAgdGFyZ2V0LT5jb25uZWN0KCpjaGFubmVsLmdldCgp
KTsKKyAgICB0YXJnZXQtPmNvbm5lY3QoY29ubmVjdGlvblR5cGUpOwogfQogCiB2b2lkIFdlYlBh
Z2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpkaXNjb25uZWN0SW5zcGVjdG9yKGNvbnN0IFN0
cmluZyYgdGFyZ2V0SWQpCkBAIC04MiwxMSArNzUsNyBAQCB2b2lkIFdlYlBhZ2VJbnNwZWN0b3JU
YXJnZXRDb250cm9sbGVyOjpkaXNjb25uZWN0SW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgdGFyZ2V0
SQogICAgIGlmICghdGFyZ2V0KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8V2ViUGFn
ZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbD4gY2hhbm5lbCA9IG1fdGFyZ2V0RnJvbnRl
bmRDaGFubmVscy50YWtlKHRhcmdldElkKTsKLSAgICBpZiAoIWNoYW5uZWwpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHRhcmdldC0+ZGlzY29ubmVjdCgqY2hhbm5lbC5nZXQoKSk7CisgICAgdGFy
Z2V0LT5kaXNjb25uZWN0KCk7CiB9CiAKIHZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRy
b2xsZXI6OnNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQs
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKQEAgLTk4LDkgKzg3LDQgQEAgdm9pZCBXZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6c2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoY29uc3Qg
U3RyaW5nJgogICAgIHRhcmdldC0+c2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQobWVzc2FnZSk7
CiB9CiAKLXZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6OnNlbmRNZXNzYWdl
VG9UYXJnZXRGcm9udGVuZChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpCi17Ci0gICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2VuZE1l
c3NhZ2VUb0luc3BlY3RvckZyb250ZW5kKHRhcmdldElkLCBtZXNzYWdlKSk7Ci19Ci0KIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmgKaW5k
ZXggM2U5MmI3YTlkYTllNTYwOWU2MDE2NjM5YzA5YjczY2I1OTZmOGFmNS4uN2M5MzFkYWQxYzk4
MDBmMDNkNzNkNGE3Y2EyNTg4ZGQwMjhhOGYyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
Q29udHJvbGxlci5oCkBAIC0yNiw3ICsyNiw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
IldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCIKLSNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0RnJvbnRlbmRDaGFubmVsLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNTAsMTMgKzQ5LDExIEBAIHB1YmxpYzoKICAg
ICB2b2lkIGNvbm5lY3RJbnNwZWN0b3IoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9y
OjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlKTsKICAgICB2b2lkIGRpc2Nvbm5lY3RJ
bnNwZWN0b3IoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCk7CiAgICAgdm9pZCBzZW5kTWVzc2FnZVRv
VGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpOwotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1RhcmdldEZyb250ZW5kKGNvbnN0IFN0cmluZyYg
dGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CiAKIHByaXZhdGU6CiAgICAgV2ViUGFn
ZSYgbV9wYWdlOwogICAgIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQgbV9wYWdlVGFyZ2V0OwogICAg
IEhhc2hNYXA8U3RyaW5nLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldCo+IG1fdGFyZ2V0czsK
LSAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVu
ZENoYW5uZWw+PiBtX3RhcmdldEZyb250ZW5kQ2hhbm5lbHM7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5j
cHAKaW5kZXggOGQ3ODgwNzgyYTI5YjE3MGNlNjVhZmM3MDM3N2Q4YmQ1MDY5NDM1OC4uZTFiNWY3
MTM3MzNhMDk1MjUyMTIyZjBhMzgwMWY4MmM4YzYwZDNmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hh
bm5lbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUlu
c3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5jcHAKQEAgLTI2LDE3ICsyNiwxMyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVu
ZENoYW5uZWwuaCIKIAotI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVy
LmgiCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2Vz
LmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1SZWY8V2ViUGFnZUluc3BlY3RvclRhcmdldEZy
b250ZW5kQ2hhbm5lbD4gV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbDo6Y3Jl
YXRlKFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyJiB0YXJnZXRDb250cm9sbGVyLCBj
b25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVj
dGlvblR5cGUgY29ubmVjdGlvblR5cGUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2Vi
UGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbCh0YXJnZXRDb250cm9sbGVyLCB0YXJn
ZXRJZCwgY29ubmVjdGlvblR5cGUpKTsKLX0KLQotV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250
ZW5kQ2hhbm5lbDo6V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbChXZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlciYgdGFyZ2V0Q29udHJvbGxlciwgY29uc3QgU3RyaW5n
JiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlIGNv
bm5lY3Rpb25UeXBlKQotICAgIDogbV90YXJnZXRDb250cm9sbGVyKHRhcmdldENvbnRyb2xsZXIp
CitXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsOjpXZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0RnJvbnRlbmRDaGFubmVsKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0
SWQsIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9u
VHlwZSkKKyAgICA6IG1fcGFnZShwYWdlKQogICAgICwgbV90YXJnZXRJZCh0YXJnZXRJZCkKICAg
ICAsIG1fY29ubmVjdGlvblR5cGUoY29ubmVjdGlvblR5cGUpCiB7CkBAIC00NCw3ICs0MCw3IEBA
IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw6OldlYlBhZ2VJbnNwZWN0b3JU
YXJnZXRGcm9udGVuZENoYW5uZWwoV2ViCiAKIHZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldEZy
b250ZW5kQ2hhbm5lbDo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkKIHsKLSAgICBtX3RhcmdldENvbnRyb2xsZXIuc2VuZE1lc3NhZ2VUb1RhcmdldEZyb250ZW5k
KG1fdGFyZ2V0SWQsIG1lc3NhZ2UpOworICAgIG1fcGFnZS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OlNlbmRNZXNzYWdlVG9JbnNwZWN0b3JGcm9udGVuZChtX3RhcmdldElkLCBtZXNzYWdl
KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5l
bC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRh
cmdldEZyb250ZW5kQ2hhbm5lbC5oCmluZGV4IDc2YWY2MmE5N2JlZjQ4OGI2NDRlNWQ2MThkNDM5
ZWM5YTQyZjIyZGEuLjgxODRhYzViZGEyODkzODJhZWIyY2Y1MDE2OWM1OTU2N2Q0Y2QyZTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0
b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmgKQEAgLTMxLDIy
ICszMSwyMCBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgV2ViUGFnZUluc3BlY3Rv
clRhcmdldENvbnRyb2xsZXI7CitjbGFzcyBXZWJQYWdlOwogCi1jbGFzcyBXZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViUGFn
ZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbD4sIHB1YmxpYyBJbnNwZWN0b3I6OkZyb250
ZW5kQ2hhbm5lbCB7CitjbGFzcyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVs
IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsIHsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlBh
Z2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw+IGNyZWF0ZShXZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0Q29udHJvbGxlciYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6RnJv
bnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSk7CisgICAgV2ViUGFnZUluc3BlY3RvclRhcmdl
dEZyb250ZW5kQ2hhbm5lbChXZWJQYWdlJiwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVj
dG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlKTsKICAgICB2aXJ0dWFsIH5XZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsKCkgPSBkZWZhdWx0OwogCiBwcml2YXRl
OgotICAgIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwoV2ViUGFnZUluc3Bl
Y3RvclRhcmdldENvbnRyb2xsZXImLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6
OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUpOwotCiAgICAgQ29ubmVjdGlvblR5cGUg
Y29ubmVjdGlvblR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Nvbm5lY3Rpb25UeXBl
OyB9CiAgICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdl
KSBvdmVycmlkZTsKIAotcHJpdmF0ZToKLSAgICBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJv
bGxlciYgbV90YXJnZXRDb250cm9sbGVyOworICAgIFdlYlBhZ2UmIG1fcGFnZTsKICAgICBTdHJp
bmcgbV90YXJnZXRJZDsKICAgICBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlv
blR5cGUgbV9jb25uZWN0aW9uVHlwZSB7IEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25u
ZWN0aW9uVHlwZTo6UmVtb3RlIH07CiB9OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDg4ZDU4OTBjYzQ4MDcxZDRlMTBmY2M3
Zjc1Yjc1YmFjMGFkMmNiZTIuLmFjZTY0NjVmOTc4OWExZjg4YzdhOTRiODZlYzFmM2M1OTgyODgz
M2YgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxOS0xMC0wMSAgWXVyeSBTZW1pa2hhdHNreSAg
PHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBub3RpZnkgaW5z
cGVjdG9yIHdoZW4gcHJvdmlzaW9uYWwgcGFnZSBpcyBjcmVhdGVkLCBjb21taXR0ZWQgYW5kIGRl
c3Ryb3llZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjAyNzA0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkZWQgbmV3IHRlc3QgZm9yIFRhcmdldCBldmVudHMgZHVyaW5nIFBTT04uIEl0IGlzIG9ubHkg
ZW5hYmxlZCBvbiBXZWJLaXQyIGFzIHRoZXJlIGlzCisgICAgICAgIG5vIFRhcmdldCBhZ2VudCBp
biBXZWJLaXQxLgorCisgICAgICAgICogVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBodHRw
L3Rlc3RzL2luc3BlY3Rvci90YXJnZXQvdGFyZ2V0LWV2ZW50cy1mb3ItcHJvdmlzaW9uYWwtcGFn
ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvaW5zcGVjdG9yL3Rh
cmdldC90YXJnZXQtZXZlbnRzLWZvci1wcm92aXNpb25hbC1wYWdlLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDE5LTEwLTE5ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIEZsYWt5IFRlc3Q6IGZhc3Qv
ZXZlbnRzL3Jlc2l6ZS1zdWJmcmFtZS1pbi1yZW5kZXJpbmctdXBkYXRlLmh0bWwKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0
YXRpb25zCmluZGV4IDMzYmJhNDRiMjNjYzJjOGRlYTJjZDI5NmZmMzYxMjExOGZiMjEzN2MuLmMx
OGUzMGRkNzY0ZjZkNzg1ZGU5ZmZjN2RmMmNmYWE3OTI0ZjYyMTUgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9u
cwpAQCAtOTE3LDYgKzkxNyw5IEBAIHdlYmtpdC5vcmcvYi8xNjE5NTEgWyBEZWJ1ZyBdIGluc3Bl
Y3Rvci9kZWJ1Z2dlci9wYXVzZWQtc2NvcGVzLmh0bWwgWyBTa2lwIF0KIGluc3BlY3Rvci9kZWJ1
Z2dlci9ldmFsdWF0ZU9uQ2FsbEZyYW1lLWVtdWxhdGVVc2VyR2VzdHVyZS11c2VySXNJbnRlcmFj
dGluZy5odG1sIFsgU2tpcCBdCiBpbnNwZWN0b3IvcnVudGltZS9ldmFsdWF0ZS1lbXVsYXRlVXNl
ckdlc3R1cmUtdXNlcklzSW50ZXJhY3RpbmcuaHRtbCBbIFNraXAgXQogCisjIFRhcmdldCBkb21h
aW4gaXMgb25seSBwcmVzZW50IGluIFdLMi4KK2h0dHAvdGVzdHMvaW5zcGVjdG9yL3RhcmdldCBb
IFNraXAgXQorCiAjIFRoZXNlIGNvbmZvcm1hbmNlIHRlc3RzIGFyZSBubyBsb25nZXIgaW4gc3lu
YyB3aXRoIHRoZSBsYXRlc3Qgc3BlY2lmaWNhdGlvbgogIyBhbmQgZXhwZWN0IGNvbXBhcmVEb2N1
bWVudFBvc2l0aW9uKCkgdG8gcmV0dXJuOgogIyBET0NVTUVOVF9QT1NJVElPTl9JTVBMRU1FTlRB
VElPTl9TUEVDSUZJQyB8IERPQ1VNRU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RFRApkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvdGFyZ2V0L3RhcmdldC1ldmVudHMt
Zm9yLXByb3Zpc2lvbmFsLXBhZ2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9pbnNwZWN0b3IvdGFyZ2V0L3RhcmdldC1ldmVudHMtZm9yLXByb3Zpc2lvbmFsLXBhZ2UtZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmViY2IyMGU4MTkwOTgwOTM4M2Y2MDJkZGYwMjRjMWU2NGQ0
ZGY0NDUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rv
ci90YXJnZXQvdGFyZ2V0LWV2ZW50cy1mb3ItcHJvdmlzaW9uYWwtcGFnZS1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSwyMSBAQAorVGVzdCB0aGF0IGNyb3NzIGRvbWFpbiBuYXZpZ2F0aW9uIHJlc3Vs
dHMgaW4gdGhlIGZvbGxvd2luZyBzZXF1ZW5jZSBvZiBldmVudHMgaW4gVGFyZ2V0IGRvbWFpbjog
CisxLiBUYXJnZXQudGFyZ2V0Q3JlYXRlZCBmb3IgcHJvdmlzaW9uYWwgcGFnZS4gCisyLiBUYXJn
ZXQuZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQgd2hlbiBwcm92aXNpb25hbCBsb2FkIGlzIGNv
bW1pdHRlZC4gCiszLiBUYXJnZXQudGFyZ2V0RGVzdHJveWVkIGZvciB0aGUgb2xkIHRhcmdldCBh
ZnRlciB0aGUgbmF2aWdhdGlvbiByZXF1ZXN0IGlzIGNvbW1pdHRlZC4KKworUEFTUzogU2hvdWxk
IHJlY2VpdmUgZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQgZXZlbnQuCitQQVNTOiBQcmV2aW91
cyB0YXJnZXQgc2hvdWxkIGJlIHRoZSBjdXJyZW50IG9uZS4KK1BBU1M6IENvbW1pdHRlZCB0YXJn
ZXQgc2hvdWxkIG1hdGNoIHByb3Zpc2lvbmFsIHRhcmdldC4KK1BBU1M6IFNob3VsZCByZWNlaXZl
IHRhcmdldERlc3Ryb3llZCBldmVudC4KK1BBU1M6IERlc3Ryb3llZCB0YXJnZXQgc2hvdWxkIGJl
IHByZXZpb3VzIHRhcmdldC4KKworPT0gUnVubmluZyB0ZXN0IHN1aXRlOiBUYXJnZXQuUFNPTgor
LS0gUnVubmluZyB0ZXN0IGNhc2U6IFByb3Zpc2lvbmFsUGFnZVRhcmdldAorUEFTUzogU2hvdWxk
IHJlY2VpdmUgdGFyZ2V0Q3JlYXRlZCBldmVudC4KK1BBU1M6IFRhcmdldCBzaG91bGQgYmUgcHJv
dmlzaW9uYWwuCitQQVNTOiBTaG91bGQgcmVjZWl2ZSBkaWRDb21taXRQcm92aXNpb25hbFRhcmdl
dCBldmVudC4KK1BBU1M6IFByZXZpb3VzIHRhcmdldCBzaG91bGQgYmUgdGhlIGN1cnJlbnQgb25l
LgorUEFTUzogQ29tbWl0dGVkIHRhcmdldCBzaG91bGQgbWF0Y2ggcHJvdmlzaW9uYWwgdGFyZ2V0
LgorUEFTUzogU2hvdWxkIHJlY2VpdmUgdGFyZ2V0RGVzdHJveWVkIGV2ZW50LgorUEFTUzogRGVz
dHJveWVkIHRhcmdldCBzaG91bGQgYmUgcHJldmlvdXMgdGFyZ2V0LgorCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci90YXJnZXQvdGFyZ2V0LWV2ZW50cy1mb3It
cHJvdmlzaW9uYWwtcGFnZS5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3Iv
dGFyZ2V0L3RhcmdldC1ldmVudHMtZm9yLXByb3Zpc2lvbmFsLXBhZ2UuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mZjgxNGE1ZWU2MWM5ZTAxZjdmNjJmNzIyYjM2MzQ3NGI4MTZhMGYyCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvdGFyZ2V0L3RhcmdldC1ldmVu
dHMtZm9yLXByb3Zpc2lvbmFsLXBhZ2UuaHRtbApAQCAtMCwwICsxLDU3IEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cis8c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citm
dW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBsZXQgc3VpdGUgPSBJbnNwZWN0b3JUZXN0LmNyZWF0ZUFz
eW5jU3VpdGUoIlRhcmdldC5QU09OIik7CisKKyAgICBzdWl0ZS5hZGRUZXN0Q2FzZSh7CisgICAg
ICAgIG5hbWU6ICJQcm92aXNpb25hbFBhZ2VUYXJnZXQiLAorICAgICAgICBkZXNjcmlwdGlvbjog
IkNoZWNrIHRoYXQgYSBuZXcgdGFyZ2V0IHdpbGwgYmUgY3JlYXRlZCBmb3IgcHJvdmlzaW9uYWwg
cGFnZS4iLAorICAgICAgICB0ZXN0KHJlc29sdmUsIHJlamVjdCkgeworICAgICAgICAgICAgY29u
c3QgbWFpblRhcmdldElkID0gV0kubWFpblRhcmdldC5pZGVudGlmaWVyOworICAgICAgICAgICAg
bGV0IG5ld1RhcmdldElkOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobWFpblRh
cmdldElkKTsKKyAgICAgICAgICAgIGxldCByZWxvYWRQcm9taXNlID0gSW5zcGVjdG9yVGVzdC5h
d2FpdEV2ZW50KEZyb250ZW5kVGVzdEhhcm5lc3MuRXZlbnQuVGVzdFBhZ2VEaWRMb2FkKTsKKwor
ICAgICAgICAgICAgV0kudGFyZ2V0TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdJLlRhcmdldE1h
bmFnZXIuRXZlbnQuVGFyZ2V0Q3JlYXRlZCwgKGV2ZW50KSA9PiB7CisgICAgICAgICAgICAgICAg
bGV0IHRhcmdldEluZm8gPSBldmVudC5kYXRhLnRhcmdldEluZm87CisgICAgICAgICAgICAgICAg
bmV3VGFyZ2V0SWQgPSB0YXJnZXRJbmZvLnRhcmdldElkOworICAgICAgICAgICAgICAgIEluc3Bl
Y3RvclRlc3QucGFzcyhgU2hvdWxkIHJlY2VpdmUgdGFyZ2V0Q3JlYXRlZCBldmVudC5gKTsKKyAg
ICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdFRydWUodGFyZ2V0SW5mby5pc1Byb3Zp
c2lvbmFsLCAiVGFyZ2V0IHNob3VsZCBiZSBwcm92aXNpb25hbC4iKTsKKyAgICAgICAgICAgIH0p
OworCisgICAgICAgICAgICBXSS50YXJnZXRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV0kuVGFy
Z2V0TWFuYWdlci5FdmVudC5EaWRDb21taXRQcm92aXNpb25hbFRhcmdldCwgKGV2ZW50KSA9PiB7
CisgICAgICAgICAgICAgICAgbGV0IHtwcmV2aW91c1RhcmdldElkLCB0YXJnZXRJbmZvfSA9IGV2
ZW50LmRhdGE7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5wYXNzKGBTaG91bGQgcmVj
ZWl2ZSBkaWRDb21taXRQcm92aXNpb25hbFRhcmdldCBldmVudC5gKTsKKyAgICAgICAgICAgICAg
ICBJbnNwZWN0b3JUZXN0LmV4cGVjdEVxdWFsKHByZXZpb3VzVGFyZ2V0SWQsIG1haW5UYXJnZXRJ
ZCwgIlByZXZpb3VzIHRhcmdldCBzaG91bGQgYmUgdGhlIGN1cnJlbnQgb25lLiIpOworICAgICAg
ICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0RXF1YWwodGFyZ2V0SW5mby50YXJnZXRJZCwg
bmV3VGFyZ2V0SWQsICJDb21taXR0ZWQgdGFyZ2V0IHNob3VsZCBtYXRjaCBwcm92aXNpb25hbCB0
YXJnZXQuIik7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgV0kudGFyZ2V0TWFuYWdl
ci5hZGRFdmVudExpc3RlbmVyKFdJLlRhcmdldE1hbmFnZXIuRXZlbnQuVGFyZ2V0RGVzdHJveWVk
LCAoZXZlbnQpID0+eworICAgICAgICAgICAgICAgIGxldCB0YXJnZXRJZCA9IGV2ZW50LmRhdGEu
dGFyZ2V0SWQ7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5wYXNzKGBTaG91bGQgcmVj
ZWl2ZSB0YXJnZXREZXN0cm95ZWQgZXZlbnQuYCk7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9y
VGVzdC5leHBlY3RFcXVhbCh0YXJnZXRJZCwgbWFpblRhcmdldElkLCAiRGVzdHJveWVkIHRhcmdl
dCBzaG91bGQgYmUgcHJldmlvdXMgdGFyZ2V0LiIpOworICAgICAgICAgICAgICAgIC8vIFdhaXQg
Zm9yIHBhZ2UgcmVsb2FkIGV2ZW50IHRvIGF2b2lkIHJhY2UgYmV0d2VlbiB0ZXN0IHJlc3VsdHMg
Zmx1c2hpbmcgYW5kIHRoZSB0ZXN0IGNvbXBsZXRpb24uCisgICAgICAgICAgICAgICAgcmVsb2Fk
UHJvbWlzZS50aGVuKHJlc29sdmUpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIFdJ
Lm1haW5UYXJnZXQuUnVudGltZUFnZW50LmV2YWx1YXRlKCJsb2NhdGlvbi5ob3N0bmFtZT0nbG9j
YWxob3N0JyIpOworICAgICAgICB9CisgICAgfSk7CisKKyAgICBzdWl0ZS5ydW5UZXN0Q2FzZXNB
bmRGaW5pc2goKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0
KCkiPgorPHA+VGVzdCB0aGF0IGNyb3NzIGRvbWFpbiBuYXZpZ2F0aW9uIHJlc3VsdHMgaW4gdGhl
IGZvbGxvd2luZyBzZXF1ZW5jZSBvZiBldmVudHMgaW4gVGFyZ2V0IGRvbWFpbjoKKzxicj4xLiBU
YXJnZXQudGFyZ2V0Q3JlYXRlZCBmb3IgcHJvdmlzaW9uYWwgcGFnZS4KKzxicj4yLiBUYXJnZXQu
ZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQgd2hlbiBwcm92aXNpb25hbCBsb2FkIGlzIGNvbW1p
dHRlZC4KKzxicj4zLiBUYXJnZXQudGFyZ2V0RGVzdHJveWVkIGZvciB0aGUgb2xkIHRhcmdldCBh
ZnRlciB0aGUgbmF2aWdhdGlvbiByZXF1ZXN0IGlzIGNvbW1pdHRlZC4KKzwvcD4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3drMi9UZXN0RXhwZWN0
YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXgg
MDJkNjg5ODFiNTdlMWZjZTA5MDMyMmJmZjNlNGMyMDNhZDQ5MmE4Ny4uN2Q0ZmI2NjA1MmY2YmQ5
Mzc5NWEyZDEyMDU1MjFkMGUyNmNkYWM3MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rl
c3RFeHBlY3RhdGlvbnMKQEAgLTc2NCw2ICs3NjQsOSBAQCBodHRwL3Rlc3RzL2FkQ2xpY2tBdHRy
aWJ1dGlvbiBbIFBhc3MgXQogaW5zcGVjdG9yL2RlYnVnZ2VyL2V2YWx1YXRlT25DYWxsRnJhbWUt
ZW11bGF0ZVVzZXJHZXN0dXJlLXVzZXJJc0ludGVyYWN0aW5nLmh0bWwgWyBQYXNzIF0KIGluc3Bl
Y3Rvci9ydW50aW1lL2V2YWx1YXRlLWVtdWxhdGVVc2VyR2VzdHVyZS11c2VySXNJbnRlcmFjdGlu
Zy5odG1sIFsgUGFzcyBdCiAKKyMgVGFyZ2V0IGRvbWFpbiBpcyBvbmx5IHByZXNlbnQgaW4gV2Vi
S2l0Mi4KK2h0dHAvdGVzdHMvaW5zcGVjdG9yL3RhcmdldCBbIFBhc3MgXQorCiAjIyMgRU5EIE9G
ICg1KSBQcm9ncmVzc2lvbnMsIGV4cGVjdGVkIHN1Y2Nlc3NlcyB0aGF0IGFyZSBleHBlY3RlZCBm
YWlsdXJlcyBpbiBXZWJLaXQxLgogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381701</attachid>
            <date>2019-10-23 11:12:55 -0700</date>
            <delta_ts>2019-10-23 13:16:08 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-202704-20191023111254.patch</filename>
            <type>text/plain</type>
            <size>86159</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUxNDc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NGRlNDY1NTY3ZmE4N2NkMmNiOWEyMTEzMjJjZTllY2E1OGNlOWZkLi5hNDU0NzQwYzg2ZGU0YzI1
ZmRiNmJjNTYwZjg1YzBlOTk1OWIyNGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOCBAQAorMjAxOS0wOS0yNyAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBub3RpZnkgaW5zcGVjdG9yIHdoZW4gcHJv
dmlzaW9uYWwgcGFnZSBpcyBjcmVhdGVkLCBjb21taXR0ZWQgYW5kIGRlc3Ryb3llZAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyNzA0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgRGV2aW4gUm91c3NvLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvclRhcmdldC5oOiBjaGFuZ2VkIEluc3BlY3RvclRhcmdldCB0byBub3QgcmVxdWlyZSBGcm9u
dGVuZENoYW5uZWwgYXMKKyAgICAgICAgYWxsIG1lc3NhZ2VzIGFyZSByb3V0ZWQgYnkgbWVhbnMg
b2YgdGhlIG93bmluZyBJbnNwZWN0b3JUYXJnZXRBZ2VudC4KKyAgICAgICAgKiBpbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5z
cGVjdG9yVGFyZ2V0QWdlbnQ6Okluc3BlY3RvclRhcmdldEFnZW50KToKKyAgICAgICAgKEluc3Bl
Y3Rvcjo6YnVpbGRUYXJnZXRJbmZvT2JqZWN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVj
dG9yVGFyZ2V0QWdlbnQ6OnRhcmdldENyZWF0ZWQpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JUYXJnZXRBZ2VudDo6dGFyZ2V0RGVzdHJveWVkKToKKyAgICAgICAgKEluc3BlY3Rvcjo6
SW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OmRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0KTogdGhpcyBt
ZXRob2QgaXMgdXNlZCB0bworICAgICAgICBub3RpZnkgZnJvbnRlbmQgdGhhdCBjb3JyZXNwb25k
aW5nIHByb3Zpc2lvbmFsIHRhcmdldCBoYXMgY29tbWl0dGVkIGFuZCByZXBsYWNlZCBwcmV2aW91
cworICAgICAgICB0YXJnZXQuCisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldEFn
ZW50Ojpjb25uZWN0aW9uVHlwZSBjb25zdCk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3Rv
clRhcmdldEFnZW50Ojpjb25uZWN0VG9UYXJnZXRzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5z
cGVjdG9yVGFyZ2V0QWdlbnQ6OmRpc2Nvbm5lY3RGcm9tVGFyZ2V0cyk6CisgICAgICAgICogaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rv
ci9wcm90b2NvbC9UYXJnZXQuanNvbjogZXh0ZW5kZWQgVGFyZ2V0SW5mbyB3aXRoIHByb3Zpc2lv
bmFsIHBhZ2UgZGV0YWlscyBhbmQKKyAgICAgICAgYWRkZWQgZXZlbnQgd2hpY2ggaXMgZmlyZWQg
d2hlbiBwcm92aXNpb25hbCBwYWdlIGdldHMgY29tbWl0dGVkLiBJZiBwcm92aXNpb25hbAorICAg
ICAgICBsb2FkIGZhaWxzIHRoZXJlIHdpbGwgYmUgdGFyZ2V0RGVzdHJveWVkIGV2ZW50IHdpdGhv
dXQgY29ycmVzcG9uZGluZyBjb21taXQuCisKIDIwMTktMTAtMjIgIFl1c3VrZSBTdXp1a2kgIDx5
c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIGBKU0dsb2JhbE9iamVjdCpgIHRocmVh
ZGluZyBjaGFuZ2UgbW9yZSBzdGFiaWxpemVkIGJ5IGFkZGluZyB0ZXN0cyBhbmQgYXNzZXJ0aW9u
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IDJjMTFlMWZmNTIyMzFlOGNhZjczMDkzMDNhNjkwNGEwNzUyYmJkYzUu
LjBlZWVmYWJjY2U1MmM5OTAwOWJiYzM4YWExMTE5MjM0OTZjZGViYWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNyBAQAorMjAxOS0xMC0wMSAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBub3RpZnkgaW5zcGVjdG9yIHdoZW4g
cHJvdmlzaW9uYWwgcGFnZSBpcyBjcmVhdGVkLCBjb21taXR0ZWQgYW5kIGRlc3Ryb3llZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyNzA0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgRGV2aW4gUm91c3NvLgorCisgICAgICAgIFRlc3Q6IGh0dHAvdGVz
dHMvaW5zcGVjdG9yL3RhcmdldC90YXJnZXQtZXZlbnRzLWZvci1wcm9pc2lvbmFsLXBhZ2UuaHRt
bAorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0SXNVbmRlclRlc3QpOiBUaGlzIG1l
dGhvZCBtYXkgYmUgY2FsbGVkIHNldmVyYWwgdGltZXMKKyAgICAgICAgd2hlbiByZWxvYWRpbmcg
aW5zcGVjdGVkIHBhZ2Ugd2l0aCBvcGVuZWQgZnJvbnRlbmQgc28gdGhlIGFzc3VtcHRpb24gdGhh
dCB0aGVyZSBhcmUgbm8KKyAgICAgICAgY29ubmVjdGVkIGZyb250ZW5kcyB3aGVuIHRoaXMgbWV0
aG9kIGlzIGNhbGxlZCBmcm9tIHRlc3RzIGRvZXNuJ3QgaG9sZCBhbnltb3JlLgorCiAyMDE5LTEw
LTIzICB5b3Vlbm4gZmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUg
TmF2aWdhdG9yQmFzZTo6c2VydmljZVdvcmtlcklmRXhpc3RzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxv
ZwppbmRleCA4ZDkyZDdlYzQ1YjZlMzkyYTRhNjg2YzQ4Nzk4ZTE2YTY2NWYyYTJjLi4xZmY2OGFj
MmMxZTEwMjcwMTQ4ZjFmZTM4MWI4ZWUzYTkzNWVkMjQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw2MSBAQAorMjAxOS0wOS0yNyAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlz
QGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBub3RpZnkgaW5zcGVjdG9y
IHdoZW4gcHJvdmlzaW9uYWwgcGFnZSBpcyBjcmVhdGVkLCBjb21taXR0ZWQgYW5kIGRlc3Ryb3ll
ZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyNzA0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGV2aW4gUm91c3NvLgorCisgICAgICAgIFVwZGF0ZWQg
ZnJvbnRlbmQgY29kZSB0byB1bmRlcnN0YW5kIHByb3Zpc2lvbmFsIHRhcmdldHMuIEZvciBub3cg
dGhlcmUgYXJlCisgICAgICAgIG5vIGNoYW5nZXMgZnJvbnRlbmQgYmVoYXZpb3IsIGl0IHdpbGwg
d2FpdCBmb3IgdGhlIHByb3Zpc2lvbmFsIHRhcmdldCB0byBjb21taXQKKyAgICAgICAgYW5kIHdp
bGwgbm90IHNlbmQgYW55IGNvbW1hbmRzIHRvIGl0IGJlZm9yZSB0aGF0LgorCisgICAgICAgICog
VXNlckludGVyZmFjZS9CYXNlL01haW4uanM6IE1vdmVkIGEgYnVuY2ggb2YgbWV0aG9kcyBzaGFy
ZWQgYmV0d2VlbiBNYWluLmpzIGFuZCBUZXN0LmpzCisgICAgICAgIHRvIFRhcmdldE1hbmFnZXIu
anMgdG8ga2VlcCB0aGVtIGluIHN5bmMuCisgICAgICAgICogVXNlckludGVyZmFjZS9Db250cm9s
bGVycy9UYXJnZXRNYW5hZ2VyLmpzOgorICAgICAgICAoV0kuVGFyZ2V0TWFuYWdlcik6CisgICAg
ICAgIChXSS5UYXJnZXRNYW5hZ2VyLnByb3RvdHlwZS5yZW1vdmVUYXJnZXQpOgorICAgICAgICAo
V0kuVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUuY3JlYXRlTXVsdGlwbGV4aW5nQmFja2VuZFRhcmdl
dCk6CisgICAgICAgIChXSS5UYXJnZXRNYW5hZ2VyLnByb3RvdHlwZS5jcmVhdGVEaXJlY3RCYWNr
ZW5kVGFyZ2V0KToKKyAgICAgICAgKFdJLlRhcmdldE1hbmFnZXIucHJvdG90eXBlLnRhcmdldENy
ZWF0ZWQpOgorICAgICAgICAoV0kuVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUuZGlkQ29tbWl0UHJv
dmlzaW9uYWxUYXJnZXQpOgorICAgICAgICAoV0kuVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUudGFy
Z2V0RGVzdHJveWVkKToKKyAgICAgICAgKFdJLlRhcmdldE1hbmFnZXIucHJvdG90eXBlLmRpc3Bh
dGNoTWVzc2FnZUZyb21UYXJnZXQpOgorICAgICAgICAoV0kuVGFyZ2V0TWFuYWdlci5wcm90b3R5
cGUuX2NoZWNrQW5kSGFuZGxlUGFnZVRhcmdldFRyYW5zaXRpb24pOgorICAgICAgICAoV0kuVGFy
Z2V0TWFuYWdlci5wcm90b3R5cGUuX2NoZWNrQW5kSGFuZGxlUGFnZVRhcmdldFRlcm1pbmF0aW9u
KToKKyAgICAgICAgKFdJLlRhcmdldE1hbmFnZXIucHJvdG90eXBlLl9pbml0aWFsaXplQmFja2Vu
ZFRhcmdldCk6CisgICAgICAgIChXSS5UYXJnZXRNYW5hZ2VyLnByb3RvdHlwZS5faW5pdGlhbGl6
ZVBhZ2VUYXJnZXQpOgorICAgICAgICAoV0kuVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUuX3RyYW5z
aXRpb25QYWdlVGFyZ2V0KToKKyAgICAgICAgKFdJLlRhcmdldE1hbmFnZXIucHJvdG90eXBlLl90
ZXJtaW5hdGVQYWdlVGFyZ2V0KToKKyAgICAgICAgKFdJLlRhcmdldE1hbmFnZXIucHJvdG90eXBl
Ll9yZXNldE1haW5FeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKFdJLlRhcmdldE1hbmFnZXIu
cHJvdG90eXBlLl9yZWRpcmVjdEdsb2JhbEFnZW50c1RvQ29ubmVjdGlvbik6CisgICAgICAgICog
VXNlckludGVyZmFjZS9Qcm90b2NvbC9Db25uZWN0aW9uLmpzOgorICAgICAgICAoSW5zcGVjdG9y
QmFja2VuZC5Xb3JrZXJDb25uZWN0aW9uLnNlbmRNZXNzYWdlVG9CYWNrZW5kKToKKyAgICAgICAg
KEluc3BlY3RvckJhY2tlbmQuV29ya2VyQ29ubmVjdGlvbik6CisgICAgICAgIChJbnNwZWN0b3JC
YWNrZW5kLlRhcmdldENvbm5lY3Rpb24uc2VuZE1lc3NhZ2VUb0JhY2tlbmQpOgorICAgICAgICAo
SW5zcGVjdG9yQmFja2VuZC5UYXJnZXRDb25uZWN0aW9uKToKKyAgICAgICAgKiBVc2VySW50ZXJm
YWNlL1Byb3RvY29sL1RhcmdldC5qczoKKyAgICAgICAgKFdJLlRhcmdldC5wcm90b3R5cGUuZGVz
dHJveSk6IE1hcmsgdGFyZ2V0IGFzIGRlc3Ryb3llZCB0byBkaXN0aW5ndWlzaCBleHBlY3RlZCBj
b21tYW5kIGVycm9ycyBmcm9tCisgICAgICAgIGdlbnVpbmUgZmFpbHVyZXMuCisKKyAgICAgICAg
KFdJLlRhcmdldC5wcm90b3R5cGUuaXNEZXN0cm95ZWQpOgorICAgICAgICAqIFVzZXJJbnRlcmZh
Y2UvUHJvdG9jb2wvVGFyZ2V0T2JzZXJ2ZXIuanM6IFNpbmNlIHRoZSBmcm9udC1lbmQgZG9lc24n
dAorICAgICAgICBzZW5kIGNvbW1hbmRzIHRvIHRoZSBwcm92aXNpb25hbCB0YXJnZXRzIHlldCwg
aXQgaGFzIHRvIGlnbm9yZSBhbGwgYWN0aXZpdGllcworICAgICAgICByZWxhdGVkIHRvIHByb3Zp
c2lvbmFsIHBhZ2VzLiBGb3IgdGhhdCByZWFzb24gd2UgbmVlZCB0d28gc2V0cyB0byBrZWVwIHRy
YWNrIG9mCisgICAgICAgIC0gcHJvdmlzaW9uYWwgcGFnZXMgdGhhdCB3ZXJlIGRlc3Ryb3llZCBh
bmQgbmV2ZXIgY29tbWl0dGVkCisgICAgICAgIC0gb2xkIHBhZ2VzIHdoaWNoIHdlcmUgcmVwbGFj
ZWQgYnkgY29tbWl0dGVkIHBhZ2UgYW5kIGZvciB3aGljaCBmb2xsb3dpbmcgdGFyZ2V0RGVzdHJv
eWVkCisgICAgICAgIGV2ZW50IHNob3VsZCBiZSBpZ25vcmVkCisgICAgICAgIEJldHRlciBzdXBw
b3J0IGZvciBwcm92aXNpb25hbCB0YXJnZXRzIHdpbGwgYmUgYWRkZWQgdG8gZnJvbnRlbmQgaW4g
YSBzZXBhcmF0ZSBjaGFuZ2UuCisgICAgICAgIChXSS5UYXJnZXRPYnNlcnZlcik6CisgICAgICAg
IChXSS5UYXJnZXRPYnNlcnZlci5wcm90b3R5cGUudGFyZ2V0Q3JlYXRlZCk6CisgICAgICAgIChX
SS5UYXJnZXRPYnNlcnZlci5wcm90b3R5cGUuZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQpOiBG
b3Igbm93IGNvbnZlcnQgdGhlIGV2ZW50IGludG8gYSBzdWJzZXF1ZW5jZQorICAgICAgICBvZiB0
YXJnZXREZXN0cm95ZWQvdGFyZ2V0Q3JlYXRlZCBldmVudHMgd2hpY2ggbWF0Y2hlcyBwcmV2aW91
cyBiZWhhdmlvci4KKworICAgICAgICAoV0kuVGFyZ2V0T2JzZXJ2ZXIucHJvdG90eXBlLnRhcmdl
dERlc3Ryb3llZCk6CisgICAgICAgIChXSS5UYXJnZXRPYnNlcnZlci5wcm90b3R5cGUuZGlzcGF0
Y2hNZXNzYWdlRnJvbVRhcmdldCk6CisgICAgICAgICogVXNlckludGVyZmFjZS9UZXN0L1Rlc3Qu
anM6CisgICAgICAgIChXSS50cmFuc2l0aW9uUGFnZVRhcmdldCk6CisgICAgICAgIChXSS50ZXJt
aW5hdGVQYWdlVGFyZ2V0KToKKwogMjAxOS0xMC0yMiAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0Bh
cHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogU291cmNlczoga2VlcCB0aGUgZnVu
Y3Rpb24vb2JqZWN0IG5hbWUgc3RpY2t5IGluIHRoZSBvYmplY3QgcHJldmlldyBwb3BvdmVyCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCmluZGV4IGM3NDUwODk0YzVlN2Y2MjdiMjhmMDNmNTYzYjZiYTcxZDk3MzRkMTEuLmMwMTI2
MWYzZTU4YjExNjVkY2FjMzcyYmVjNGI2MTVjYWY2NjRhMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
ODIgQEAKKzIwMTktMDktMjcgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjogbm90aWZ5IGluc3BlY3RvciB3aGVuIHByb3Zpc2lv
bmFsIHBhZ2UgaXMgY3JlYXRlZCwgY29tbWl0dGVkIGFuZCBkZXN0cm95ZWQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjcwNAorCisgICAgICAgIFJl
dmlld2VkIGJ5IERldmluIFJvdXNzby4KKworICAgICAgICBUYXJnZXQudGFyZ2V0Q3JlYXRlZCBl
dmVudCBpcyBub3cgZ2VuZXJhdGVkIGZvciBwcm92aXNpb25hbCBwYWdlcyBhcyB3ZWxsIGFzIGZv
ciByZWd1bGFyCisgICAgICAgIG9uZXMuIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgdG93YXJkIHJl
YXR0YWNoaW5nIGluc3BlY3RvciBlYXJsaWVyIGR1cmluZyBQU09OLiBJbiB0aGUgZnV0dXJlCisg
ICAgICAgIGlmIGRlYnVnZ2luZyBpcyBpbiBwcm9ncmVzcyB0aGUgcHJvdmlzaW9uYWwgdGFyZ2V0
IChwYWdlKSB3aWxsIGJlIHBhdXNlZCB1bnRpbCBhIHNpZ25hbCBmcm9tCisgICAgICAgIGluc3Bl
Y3RvciBmcm9udGVuZC4gVGhpcyB3aWxsIGVuYWJsZSB0aGUgZnJvbnRlbmQgY29uZmlndXJlIGFs
bCBhZ2VudHMgYmVmb3JlIG5hdmlnYXRpb24gc3RhcnRzLgorCisgICAgICAgICogU291cmNlcy50
eHQ6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmNw
cDoKKyAgICAgICAgKEFQSTo6V2ViQXV0aGVudGljYXRpb25QYW5lbDo6V2ViQXV0aGVudGljYXRp
b25QYW5lbCk6IEFkZGVkIGV4cGxpY2l0IG5hbWVzcGFjZSBzcGVjaWZpZXIKKyAgICAgICAgdG8g
dGhlIGNvbnN0cnVjdG9yJ3MgYXJndW1lbnQgYXMgb3RoZXJ3aXNlIGNvbXBpbGF0aW9uIGZhaWxz
IGR1ZSB0byBjb25mbGljdCBiZXR3ZWVuIEFQSTo6U3RyaW5nCisgICAgICAgIGFuZCBXVEY6OlN0
cmluZy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3JUYXJnZXRQcm94eS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6Okluc3BlY3RvclRhcmdldFByb3h5OjpjcmVhdGUpOgorICAgICAgICAo
V2ViS2l0OjpJbnNwZWN0b3JUYXJnZXRQcm94eTo6Y29ubmVjdCk6CisgICAgICAgIChXZWJLaXQ6
Okluc3BlY3RvclRhcmdldFByb3h5OjpkaXNjb25uZWN0KToKKyAgICAgICAgKFdlYktpdDo6SW5z
cGVjdG9yVGFyZ2V0UHJveHk6OnNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKToKKyAgICAgICAg
KFdlYktpdDo6SW5zcGVjdG9yVGFyZ2V0UHJveHk6OmRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0
KToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yVGFyZ2V0UHJveHk6OmlzUHJvdmlzaW9uYWwg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JUYXJnZXRQcm94eTo6cHJldmlvdXNU
YXJnZXRJRCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3RvclRhcmdldFByb3h5
Lmg6IFRhcmdldCBwcm94eSBjYW4gc3RhcnQgYXMgYSBwcm92aXNpb25hbCB0YXJnZXQgKHdpdGgg
YSBwb2ludGVyIHRvCisgICAgICAgIFByb3Zpc2lvbmFsUGFnZVByb3h5KSBhbmQgbGF0ZXIgZWl0
aGVyIGJlIGNvbW1pdHRlZCBvciBkZXN0cm95ZWQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvUHJv
dmlzaW9uYWxQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpQcm92aXNpb25hbFBhZ2VQ
cm94eTo6UHJvdmlzaW9uYWxQYWdlUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpQcm92aXNpb25h
bFBhZ2VQcm94eTo6flByb3Zpc2lvbmFsUGFnZVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UHJv
dmlzaW9uYWxQYWdlUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlKTogRm9yd2FyZCBpbnNwZWN0b3Ig
bWVzc2FnZXMgdG8gcGFyZW50IHBhZ2UncyBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci4KKyAg
ICAgICAgU2luY2UgZWFjaCBXZWJQYWdlIGhhcyBhIHVuaXF1ZSBpZGVudGlmaWVyIHRoZSB0YXJn
ZXQgaWRzIHdpbGwgYmUgZ2xvYmFsbHkgdW5pcXVlIGFuZCB0aGVyZSBpcyBubyByaXNrIG9mIGNv
bGxpc2lvbnMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuaDoK
KyAgICAgICAgKFdlYktpdDo6UHJvdmlzaW9uYWxQYWdlUHJveHk6OnBhZ2UgY29uc3QpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAg
IChXZWJLaXQ6OmdldFRhcmdldElEKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUluc3BlY3Rv
ckNvbnRyb2xsZXI6OldlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmNsZWFyVGFyZ2V0cyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpjcmVhdGVJbnNwZWN0b3JUYXJnZXQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGVzdHJveUlu
c3BlY3RvclRhcmdldCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VJbnNwZWN0b3JDb250cm9s
bGVyOjpkaWRDcmVhdGVQcm92aXNpb25hbFBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkRGVzdHJveVByb3Zpc2lvbmFsUGFnZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDb21taXRQcm92aXNpb25h
bFBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRk
VGFyZ2V0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50LmNwcDog
UmVtb3ZlZC4gTWVyZ2VkIHRoaXMgYWdlbnQgaW50byBJbnNwZWN0b3JUYXJnZXRBZ2VudC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50Lmg6IFJlbW92ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6
Om1fcmVzZXRSZWNlbnRDcmFzaENvdW50VGltZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OmZpbmlzaEF0dGFjaGluZ1RvV2ViUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6Y29tbWl0UHJvdmlzaW9uYWxQYWdlKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lmg6IE1vdmVkIHRoZSB0YXJnZXQgbWFuYWdlbWVudCBsb2dpYyBpbnRvIFdl
YlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLgorICAgICAgICBXZWJQYWdlUHJveHkvUHJvdmlzaW9u
YWxQYWdlUHJveHkgYXJlIGV4cGVjdGVkIHRvIG5vdGlmaXkgaXQgYWJvdXQga2V5IGxpZmVjeWNs
ZSBldmVudHMgYW5kIGFsc28KKyAgICAgICAgZm9yd2FyZCB0byBpdCBtZXNzYWdlcyBmcm9tIGlu
c3BlY3RvciBpbiB0aGUgaW5zcGVjdGVkIFdlYlByb2Nlc3MuIEhvdyBpdCB0cmFuc2xhdGVzIHRv
IFRhcmdldAorICAgICAgICBldmVudHMgaXMgaW5zcGVjdG9yJ3MgYnVzaW5lc3MuCisKKyAgICAg
ICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OmlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojpjb25uZWN0KToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZUluc3BlY3RvclRhcmdldDo6ZGlzY29ubmVjdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OnRvVGFyZ2V0SUQpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Lmg6IE1hZGUgdGhlIHRhcmdldCBvd24gZnJv
bnRlbmQgY2hhbm5lbCBpbnN0YW5jZSBhcyBpdCdzIHRoZQorICAgICAgICBvbmx5IHBsYWNlIHdo
ZXJlIHRoZSBwYWdlIHNwZWNpZmljIGNoYW5uZWwgaXMgdXNlZC4KKworICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpyZW1vdmVUYXJn
ZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6
Y29ubmVjdEluc3BlY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRDb250cm9sbGVyOjpkaXNjb25uZWN0SW5zcGVjdG9yKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5u
ZWw6OldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsOjpzZW5kTWVzc2FnZVRv
RnJvbnRlbmQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0RnJvbnRlbmRDaGFubmVsLmg6IFRoZSBjaGFubmVsJ3MgbGlmZXRpbWUgaXMgbWFuYWdl
ZCBieSBvd25pbmcKKyAgICAgICAgdGFyZ2V0LiBObyBuZWVkIHRvIHJlZmVyZW5jZSBjb3VudCBp
dC4KKwogMjAxOS0xMC0yMiAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNv
bT4KIAogICAgICAgICBVbnJldmlld2VkIGJ1aWxkIGZpeCBmb3Igbm9uLXVuaWZpZWQgc291cmNl
IGJ1aWxkcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JUYXJnZXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
VGFyZ2V0LmgKaW5kZXggYmUxMWNlMzM4YTNlYzZlODcwNWZlMjAwNGJiNjk0OGM1YTYyNWY1OS4u
YTlmMDRiOGEwYzlhZmFlZWE0ZmU4YzBhNGQwN2Q4MjMwYTljMzU2MCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUYXJnZXQuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRhcmdldC5oCkBAIC00Niw5ICs0
NiwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTdHJpbmcgaWRlbnRpZmllcigpIGNvbnN0ID0g
MDsKICAgICB2aXJ0dWFsIEluc3BlY3RvclRhcmdldFR5cGUgdHlwZSgpIGNvbnN0ID0gMDsKIAor
ICAgIHZpcnR1YWwgYm9vbCBpc1Byb3Zpc2lvbmFsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
KwogICAgIC8vIENvbm5lY3Rpb24gbWFuYWdlbWVudC4KLSAgICB2aXJ0dWFsIHZvaWQgY29ubmVj
dChGcm9udGVuZENoYW5uZWwmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpc2Nvbm5lY3QoRnJv
bnRlbmRDaGFubmVsJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0KEZyb250ZW5kQ2hh
bm5lbDo6Q29ubmVjdGlvblR5cGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdCgp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoY29uc3Qg
U3RyaW5nJikgPSAwOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwCmluZGV4IGM4
MDk2MDY0YmFkZjllZmE4ODg2NjBmYTY0NjkzN2JkMDljMTE4M2YuLjExNzcwOTBmYzE4NjIzZWY1
MDFjOWFkNGMzMzg5YmMyZGE5MTA3MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5jcHAK
QEAgLTMyLDYgKzMyLDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIEluc3BlY3RvclRhcmdl
dEFnZW50OjpJbnNwZWN0b3JUYXJnZXRBZ2VudChGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0
ZXIsIEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlcikKICAgICA6IEluc3BlY3Rv
ckFnZW50QmFzZSgiVGFyZ2V0Il9zKQorICAgICwgbV9yb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpCiAg
ICAgLCBtX2Zyb250ZW5kRGlzcGF0Y2hlcihtYWtlVW5pcXVlPFRhcmdldEZyb250ZW5kRGlzcGF0
Y2hlcj4oZnJvbnRlbmRSb3V0ZXIpKQogICAgICwgbV9iYWNrZW5kRGlzcGF0Y2hlcihUYXJnZXRC
YWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGJhY2tlbmREaXNwYXRjaGVyLCB0aGlzKSkKIHsKQEAg
LTg4LDEwICs4OSwxMyBAQCBzdGF0aWMgUHJvdG9jb2w6OlRhcmdldDo6VGFyZ2V0SW5mbzo6VHlw
ZSB0YXJnZXRUeXBlVG9Qcm90b2NvbFR5cGUoSW5zcGVjdG9yVGFyZwogCiBzdGF0aWMgUmVmPFBy
b3RvY29sOjpUYXJnZXQ6OlRhcmdldEluZm8+IGJ1aWxkVGFyZ2V0SW5mb09iamVjdChjb25zdCBJ
bnNwZWN0b3JUYXJnZXQmIHRhcmdldCkKIHsKLSAgICByZXR1cm4gUHJvdG9jb2w6OlRhcmdldDo6
VGFyZ2V0SW5mbzo6Y3JlYXRlKCkKKyAgICBhdXRvIHJlc3VsdCA9IFByb3RvY29sOjpUYXJnZXQ6
OlRhcmdldEluZm86OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRUYXJnZXRJZCh0YXJnZXQuaWRlbnRp
ZmllcigpKQogICAgICAgICAuc2V0VHlwZSh0YXJnZXRUeXBlVG9Qcm90b2NvbFR5cGUodGFyZ2V0
LnR5cGUoKSkpCiAgICAgICAgIC5yZWxlYXNlKCk7CisgICAgaWYgKHRhcmdldC5pc1Byb3Zpc2lv
bmFsKCkpCisgICAgICAgIHJlc3VsdC0+c2V0SXNQcm92aXNpb25hbCh0cnVlKTsKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCiB2b2lkIEluc3BlY3RvclRhcmdldEFnZW50Ojp0YXJnZXRDcmVhdGVk
KEluc3BlY3RvclRhcmdldCYgdGFyZ2V0KQpAQCAtMTAyLDcgKzEwNiw3IEBAIHZvaWQgSW5zcGVj
dG9yVGFyZ2V0QWdlbnQ6OnRhcmdldENyZWF0ZWQoSW5zcGVjdG9yVGFyZ2V0JiB0YXJnZXQpCiAg
ICAgaWYgKCFtX2lzQ29ubmVjdGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICB0YXJnZXQuY29u
bmVjdChmcm9udGVuZENoYW5uZWwoKSk7CisgICAgdGFyZ2V0LmNvbm5lY3QoY29ubmVjdGlvblR5
cGUoKSk7CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+dGFyZ2V0Q3JlYXRlZChidWlsZFRh
cmdldEluZm9PYmplY3QodGFyZ2V0KSk7CiB9CkBAIC0xMTQsMjcgKzExOCw0MCBAQCB2b2lkIElu
c3BlY3RvclRhcmdldEFnZW50Ojp0YXJnZXREZXN0cm95ZWQoSW5zcGVjdG9yVGFyZ2V0JiB0YXJn
ZXQpCiAgICAgaWYgKCFtX2lzQ29ubmVjdGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICB0YXJn
ZXQuZGlzY29ubmVjdChmcm9udGVuZENoYW5uZWwoKSk7CisgICAgdGFyZ2V0LmRpc2Nvbm5lY3Qo
KTsKIAogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT50YXJnZXREZXN0cm95ZWQodGFyZ2V0Lmlk
ZW50aWZpZXIoKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OmNvbm5lY3RUb1Rh
cmdldHMoKQordm9pZCBJbnNwZWN0b3JUYXJnZXRBZ2VudDo6ZGlkQ29tbWl0UHJvdmlzaW9uYWxU
YXJnZXQoY29uc3QgU3RyaW5nJiBvbGRUYXJnZXRJRCwgY29uc3QgU3RyaW5nJiBjb21taXR0ZWRU
YXJnZXRJRCkKIHsKLSAgICBhdXRvJiBjaGFubmVsID0gZnJvbnRlbmRDaGFubmVsKCk7CisgICAg
aWYgKCFtX2lzQ29ubmVjdGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvKiB0YXJnZXQg
PSBtX3RhcmdldHMuZ2V0KGNvbW1pdHRlZFRhcmdldElEKTsKKyAgICBpZiAoIXRhcmdldCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRpZENvbW1pdFByb3Zp
c2lvbmFsVGFyZ2V0KG9sZFRhcmdldElELCBjb21taXR0ZWRUYXJnZXRJRCk7Cit9CiAKK0Zyb250
ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUgSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OmNvbm5lY3Rp
b25UeXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yb3V0ZXIuaGFzTG9jYWxGcm9udGVuZCgp
ID8gSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlOjpMb2NhbCA6IElu
c3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZTo6UmVtb3RlOworfQorCit2
b2lkIEluc3BlY3RvclRhcmdldEFnZW50Ojpjb25uZWN0VG9UYXJnZXRzKCkKK3sKICAgICBmb3Ig
KEluc3BlY3RvclRhcmdldCogdGFyZ2V0IDogbV90YXJnZXRzLnZhbHVlcygpKSB7Ci0gICAgICAg
IHRhcmdldC0+Y29ubmVjdChjaGFubmVsKTsKKyAgICAgICAgdGFyZ2V0LT5jb25uZWN0KGNvbm5l
Y3Rpb25UeXBlKCkpOwogICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+dGFyZ2V0Q3JlYXRl
ZChidWlsZFRhcmdldEluZm9PYmplY3QoKnRhcmdldCkpOwogICAgIH0KIH0KIAogdm9pZCBJbnNw
ZWN0b3JUYXJnZXRBZ2VudDo6ZGlzY29ubmVjdEZyb21UYXJnZXRzKCkKIHsKLSAgICBhdXRvJiBj
aGFubmVsID0gZnJvbnRlbmRDaGFubmVsKCk7Ci0KICAgICBmb3IgKEluc3BlY3RvclRhcmdldCog
dGFyZ2V0IDogbV90YXJnZXRzLnZhbHVlcygpKQotICAgICAgICB0YXJnZXQtPmRpc2Nvbm5lY3Qo
Y2hhbm5lbCk7CisgICAgICAgIHRhcmdldC0+ZGlzY29ubmVjdCgpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oCmluZGV4IDBiMWEwNGVjY2U4
NzlkNWJjNjBmNDgwZmY0OWU5MGQzOTgyMzI0NWIuLjM4Y2IzMTg5ODZiMzFjNGRlZDE5YmE5YmVh
ZTc4NTVkMmI1NGMyM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaApAQCAtMjcsNiArMjcs
NyBAQAogCiAjaW5jbHVkZSAiSW5zcGVjdG9yQWdlbnRCYXNlLmgiCiAjaW5jbHVkZSAiSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmREaXNwYXRjaGVycy5oIgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKQEAgLTQwLDYgKzQxLDcgQEAgY2xhc3MgSlNfRVhQT1JUX1BS
SVZBVEUgSW5zcGVjdG9yVGFyZ2V0QWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBw
dWJsaWMKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JUYXJnZXRBZ2VudCk7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CisgICAgSW5zcGVjdG9yVGFyZ2V0
QWdlbnQoRnJvbnRlbmRSb3V0ZXImLCBCYWNrZW5kRGlzcGF0Y2hlciYpOwogICAgIH5JbnNwZWN0
b3JUYXJnZXRBZ2VudCgpIG92ZXJyaWRlOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCkBA
IC01MiwxOSArNTQsMTggQEAgcHVibGljOgogICAgIC8vIFRhcmdldCBsaWZlY3ljbGUuCiAgICAg
dm9pZCB0YXJnZXRDcmVhdGVkKEluc3BlY3RvclRhcmdldCYpOwogICAgIHZvaWQgdGFyZ2V0RGVz
dHJveWVkKEluc3BlY3RvclRhcmdldCYpOworICAgIHZvaWQgZGlkQ29tbWl0UHJvdmlzaW9uYWxU
YXJnZXQoY29uc3QgU3RyaW5nJiBvbGRUYXJnZXRJRCwgY29uc3QgU3RyaW5nJiBjb21taXR0ZWRU
YXJnZXRJRCk7CiAKICAgICAvLyBUYXJnZXQgbWVzc2FnZXMuCiAgICAgdm9pZCBzZW5kTWVzc2Fn
ZUZyb21UYXJnZXRUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSk7CiAKLXByb3RlY3RlZDoKLSAgICBJbnNwZWN0b3JUYXJnZXRBZ2VudChGcm9u
dGVuZFJvdXRlciYsIEJhY2tlbmREaXNwYXRjaGVyJik7Ci0KLSAgICB2aXJ0dWFsIEZyb250ZW5k
Q2hhbm5lbCYgZnJvbnRlbmRDaGFubmVsKCkgPSAwOwotCiBwcml2YXRlOgorICAgIC8vIEZyb250
ZW5kQ2hhbm5lbAorICAgIEZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUgY29ubmVjdGlv
blR5cGUoKSBjb25zdDsKICAgICB2b2lkIGNvbm5lY3RUb1RhcmdldHMoKTsKICAgICB2b2lkIGRp
c2Nvbm5lY3RGcm9tVGFyZ2V0cygpOwogCisgICAgSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciYg
bV9yb3V0ZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFRhcmdldEZyb250ZW5kRGlzcGF0Y2hlcj4g
bV9mcm9udGVuZERpc3BhdGNoZXI7CiAgICAgUmVmPFRhcmdldEJhY2tlbmREaXNwYXRjaGVyPiBt
X2JhY2tlbmREaXNwYXRjaGVyOwogICAgIEhhc2hNYXA8U3RyaW5nLCBJbnNwZWN0b3JUYXJnZXQq
PiBtX3RhcmdldHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3Byb3RvY29sL1RhcmdldC5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9w
cm90b2NvbC9UYXJnZXQuanNvbgppbmRleCAzOTRmZWRkYzJmMDVjY2ZhZTFkNDQ0YjVhYmNlNjdl
OTgyZWFmMDg1Li4yNDBjZDQyZTY3ZTMyNTBlNDM0YzBiZjZmOWQxNjE2ODUwNWE4YzIyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1RhcmdldC5q
c29uCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvVGFyZ2V0
Lmpzb24KQEAgLTksNyArOSw4IEBACiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGVzY3Jp
cHRpb24gb2YgYSB0YXJnZXQuIiwKICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwogICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAidGFyZ2V0SWQiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3Jp
cHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSB0YXJnZXQuIiB9LAotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAidHlwZSIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJwYWdl
IiwgInNlcnZpY2Utd29ya2VyIiwgIndvcmtlciJdIH0KKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInR5cGUiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsicGFnZSIsICJzZXJ2aWNlLXdv
cmtlciIsICJ3b3JrZXIiXSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaXNQcm92aXNp
b25hbCIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24i
OiAiVHJ1ZSB2YWx1ZSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIGEgcHJvdmlzaW9uYWwgcGFnZSB0
YXJnZXQgaS5lLiBTdWNoIHRhcmdldCBtYXkgYmUgY3JlYXRlZCB3aGVuIGN1cnJlbnQgcGFnZSBz
dGFydHMgY3Jvc3Mtb3JpZ2luIG5hdmlnYXRpb24uIEV2ZW50dWFsbHkgZWFjaCBwcm92aXNpb25h
bCB0YXJnZXQgaXMgZWl0aGVyIGNvbW1pdHRlZCBhbmQgc3dhcHMgd2l0aCB0aGUgY3VycmVudCB0
YXJnZXQgb3IgZ2V0cyBkZXN0cm95ZWQsIGUuZy4gaW4gY2FzZSBvZiBsb2FkIHJlcXVlc3QgZmFp
bHVyZS4iIH0KICAgICAgICAgICAgIF0KICAgICAgICAgfQogICAgIF0sCkBAIC0zNiw2ICszNywx
NCBAQAogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGFyZ2V0SWQiLCAidHlwZSI6ICJzdHJp
bmciIH0KICAgICAgICAgICAgIF0KICAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAg
Im5hbWUiOiAiZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQiLAorICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogIlRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiBwcm92aXNpb25hbCBsb2FkIGlzIGNv
bW1pdHRlZC4gUHJvdmlzaW9uYWwgdGFyZ2V0IHN3YXBzIHdpdGggdGhlIGN1cnJlbnQgdGFyZ2V0
LiIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogIm9sZFRhcmdldElkIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIklEIG9m
IHRoZSBvbGQgdGFyZ2V0IHRoYXQgaXMgc3dhcHBlZCB3aXRoIHRoZSBjb21taXR0ZWQgb25lLiIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5ld1RhcmdldElkIiwgInR5cGUiOiAic3Ry
aW5nIiwgImRlc2NyaXB0aW9uIjogIklEIG9mIHRoZSBjb21taXR0ZWQgdGFyZ2V0LiIgfQorICAg
ICAgICAgICAgXQorICAgICAgICB9LAogICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJk
aXNwYXRjaE1lc3NhZ2VGcm9tVGFyZ2V0IiwKICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmlu
ZGV4IDRjMDRmYmIxMGJmYWRhMzg0NjJkOGI0MjJjOGQzNWI0MTIwM2JiNTUuLjgxMDkzZDMzZTZi
ODAyMzc1NTRjMzI1MTNlYTk2OGNkOTFlYjMwM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTM0NCwxNyArMzQ0LDYgQEAgdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzaG93KCkKICAgICAgICAgY29ubmVjdEZyb250ZW5kKCpm
cm9udGVuZENoYW5uZWwpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldElzVW5k
ZXJUZXN0KGJvb2wgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09IG1faXNVbmRlclRlc3QpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1faXNVbmRlclRlc3QgPSB2YWx1ZTsKLQotICAgIC8vIDxy
ZGFyOi8vcHJvYmxlbS8yNjc2ODYyOD4gVHJ5IHRvIGNhdGNoIHN1c3BpY2lvdXMgc2NlbmFyaW9z
IHdoZXJlIHdlIG1heSBoYXZlIGEgZGFuZ2xpbmcgZnJvbnRlbmQgd2hpbGUgcnVubmluZyB0ZXN0
cy4KLSAgICBSRUxFQVNFX0FTU0VSVCghbV9pc1VuZGVyVGVzdCB8fCAhbV9mcm9udGVuZFJvdXRl
ci0+aGFzRnJvbnRlbmRzKCkpOwotfQotCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmV2YWx1
YXRlRm9yVGVzdEluRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBzY3JpcHQpCiB7CiAgICAgZW5zdXJl
SW5zcGVjdG9yQWdlbnQoKS5ldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKHNjcmlwdCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCBlNjM4
OGFjMDVjOWYxMTA4ZWNkNmM5Mjc0M2U3MDRhNTNiYjM1ZmQ2Li5jZDQ0OTdjOWNkZjdlM2RjN2Zl
ODlmZmRiZjE4OGQ0N2YyYWFhMDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTEwMSw3ICsxMDEsNyBAQCBwdWJsaWM6CiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBkaWRDb21wb3NpdGUoRnJhbWUmKTsKIAogICAgIGJvb2wgaXNVbmRl
clRlc3QoKSBjb25zdCB7IHJldHVybiBtX2lzVW5kZXJUZXN0OyB9Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRJc1VuZGVyVGVzdChib29sKTsKKyAgICB2b2lkIHNldElzVW5kZXJUZXN0KGJv
b2wgaXNVbmRlclRlc3QpIHsgbV9pc1VuZGVyVGVzdCA9IGlzVW5kZXJUZXN0OyB9CiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGNvbnN0IFN0cmluZyYg
c2NyaXB0KTsKIAogICAgIEluc3BlY3RvckNsaWVudCogaW5zcGVjdG9yQ2xpZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9pbnNwZWN0b3JDbGllbnQ7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcwppbmRleCBiOGIzYTdhMmQzNjhmMWJkM2Y4NTE1
NDljODNhNGM5NjJkOTVlZmJjLi42ZmI0OWM0N2EyYjdjYzVhNzhlMmNkNjdlYTFiZDcxYzllM2Q2
NWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNl
L01haW4uanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9N
YWluLmpzCkBAIC0xODMsNzAgKzE4Myw2IEBAIFdJLmxvYWRlZCA9IGZ1bmN0aW9uKCkKICAgICAg
ICAgV0kudGFyZ2V0TWFuYWdlci5jcmVhdGVEaXJlY3RCYWNrZW5kVGFyZ2V0KCk7CiB9OwogCi1X
SS5pbml0aWFsaXplQmFja2VuZFRhcmdldCA9IGZ1bmN0aW9uKHRhcmdldCkKLXsKLSAgICBjb25z
b2xlLmFzc2VydCghV0kubWFpblRhcmdldCk7Ci0KLSAgICBXSS5iYWNrZW5kVGFyZ2V0ID0gdGFy
Z2V0OwotCi0gICAgV0kucmVzZXRNYWluRXhlY3V0aW9uQ29udGV4dCgpOwotCi0gICAgV0kuX3Rh
cmdldHNBdmFpbGFibGVQcm9taXNlLnJlc29sdmUoKTsKLX07Ci0KLVdJLmluaXRpYWxpemVQYWdl
VGFyZ2V0ID0gZnVuY3Rpb24odGFyZ2V0KQotewotICAgIGNvbnNvbGUuYXNzZXJ0KFdJLnNoYXJl
ZEFwcC5pc1dlYkRlYnVnZ2FibGUoKSk7Ci0gICAgY29uc29sZS5hc3NlcnQodGFyZ2V0LnR5cGUg
PT09IFdJLlRhcmdldFR5cGUuUGFnZSB8fCB0YXJnZXQgaW5zdGFuY2VvZiBXSS5EaXJlY3RCYWNr
ZW5kVGFyZ2V0KTsKLQotICAgIFdJLnBhZ2VUYXJnZXQgPSB0YXJnZXQ7Ci0KLSAgICBXSS5yZXNl
dE1haW5FeGVjdXRpb25Db250ZXh0KCk7Ci19OwotCi1XSS50cmFuc2l0aW9uUGFnZVRhcmdldCA9
IGZ1bmN0aW9uKHRhcmdldCkKLXsKLSAgICBjb25zb2xlLmFzc2VydCghV0kucGFnZVRhcmdldCk7
Ci0gICAgY29uc29sZS5hc3NlcnQoV0kuc2hhcmVkQXBwLmRlYnVnZ2FibGVUeXBlID09PSBXSS5E
ZWJ1Z2dhYmxlVHlwZS5XZWJQYWdlKTsKLSAgICBjb25zb2xlLmFzc2VydCh0YXJnZXQudHlwZSA9
PT0gV0kuVGFyZ2V0VHlwZS5QYWdlKTsKLQotICAgIFdJLnBhZ2VUYXJnZXQgPSB0YXJnZXQ7Ci0K
LSAgICBXSS5yZXNldE1haW5FeGVjdXRpb25Db250ZXh0KCk7Ci0KLSAgICAvLyBBY3Rpb25zIHRv
IHRyYW5zaXRpb24gdGhlIHBhZ2UgdGFyZ2V0LgotICAgIFdJLm5vdGlmaWNhdGlvbnMuZGlzcGF0
Y2hFdmVudFRvTGlzdGVuZXJzKFdJLk5vdGlmaWNhdGlvbi5UcmFuc2l0aW9uUGFnZVRhcmdldCk7
Ci0gICAgV0kuZG9tTWFuYWdlci50cmFuc2l0aW9uUGFnZVRhcmdldCgpOwotICAgIFdJLm5ldHdv
cmtNYW5hZ2VyLnRyYW5zaXRpb25QYWdlVGFyZ2V0KCk7Ci0gICAgV0kudGltZWxpbmVNYW5hZ2Vy
LnRyYW5zaXRpb25QYWdlVGFyZ2V0KCk7Ci19OwotCi1XSS50ZXJtaW5hdGVQYWdlVGFyZ2V0ID0g
ZnVuY3Rpb24odGFyZ2V0KQotewotICAgIGNvbnNvbGUuYXNzZXJ0KFdJLnBhZ2VUYXJnZXQpOwot
ICAgIGNvbnNvbGUuYXNzZXJ0KFdJLnBhZ2VUYXJnZXQgPT09IHRhcmdldCk7Ci0gICAgY29uc29s
ZS5hc3NlcnQoV0kuc2hhcmVkQXBwLmRlYnVnZ2FibGVUeXBlID09PSBXSS5EZWJ1Z2dhYmxlVHlw
ZS5XZWJQYWdlKTsKLQotICAgIC8vIFJlbW92ZSBhbnkgV29ya2VyIHRhcmdldHMgYXNzb2NpYXRl
ZCB3aXRoIHRoaXMgcGFnZS4KLSAgICBsZXQgd29ya2VyVGFyZ2V0cyA9IFdJLnRhcmdldHMuZmls
dGVyKCh4KSA9PiB4LnR5cGUgPT09IFdJLlRhcmdldFR5cGUuV29ya2VyKTsKLSAgICBmb3IgKGxl
dCB3b3JrZXJUYXJnZXQgb2Ygd29ya2VyVGFyZ2V0cykKLSAgICAgICAgV0kud29ya2VyTWFuYWdl
ci53b3JrZXJUZXJtaW5hdGVkKHdvcmtlclRhcmdldC5pZGVudGlmaWVyKTsKLQotICAgIFdJLnBh
Z2VUYXJnZXQgPSBudWxsOwotfTsKLQotV0kucmVzZXRNYWluRXhlY3V0aW9uQ29udGV4dCA9IGZ1
bmN0aW9uKCkKLXsKLSAgICBpZiAoV0kubWFpblRhcmdldCBpbnN0YW5jZW9mIFdJLk11bHRpcGxl
eGluZ0JhY2tlbmRUYXJnZXQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChXSS5tYWluVGFy
Z2V0LmV4ZWN1dGlvbkNvbnRleHQpIHsKLSAgICAgICAgV0kucnVudGltZU1hbmFnZXIuYWN0aXZl
RXhlY3V0aW9uQ29udGV4dCA9IFdJLm1haW5UYXJnZXQuZXhlY3V0aW9uQ29udGV4dDsKLSAgICAg
ICAgaWYgKFdJLnF1aWNrQ29uc29sZSkKLSAgICAgICAgICAgIFdJLnF1aWNrQ29uc29sZS5pbml0
aWFsaXplTWFpbkV4ZWN1dGlvbkNvbnRleHRQYXRoQ29tcG9uZW50KCk7Ci0gICAgfQotfTsKLQog
V0kuY29udGVudExvYWRlZCA9IGZ1bmN0aW9uKCkKIHsKICAgICAvLyBJZiB0aGVyZSB3YXMgYW4g
dW5jYXVnaHQgZXhjZXB0aW9uIGVhcmxpZXIgZHVyaW5nIGxvYWRpbmcsIHRoZW4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1Rhcmdl
dE1hbmFnZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9s
bGVycy9UYXJnZXRNYW5hZ2VyLmpzCmluZGV4IGMyNDRmMzg1YzBhNWZmZjkzZjg5YzhhYjA2YjVh
Y2FhMjk3NGUyNjQuLmJkNzI5NzllMGNlYjkwZTFmNTdkZGRjOWJiMjAxYzlhN2U0OWUwYWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJz
L1RhcmdldE1hbmFnZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvQ29udHJvbGxlcnMvVGFyZ2V0TWFuYWdlci5qcwpAQCAtMzMsNiArMzMsOSBAQCBXSS5UYXJn
ZXRNYW5hZ2VyID0gY2xhc3MgVGFyZ2V0TWFuYWdlciBleHRlbmRzIFdJLk9iamVjdAogICAgICAg
ICB0aGlzLl9jYWNoZWRUYXJnZXRzTGlzdCA9IG51bGw7CiAgICAgICAgIHRoaXMuX3NlZW5QYWdl
VGFyZ2V0ID0gZmFsc2U7CiAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25UaW1lb3V0SWRlbnRpZmll
ciA9IHVuZGVmaW5lZDsKKworICAgICAgICB0aGlzLl9wcm92aXNpb25hbFRhcmdldEluZm9zID0g
bmV3IE1hcDsKKyAgICAgICAgdGhpcy5fc3dhcHBlZFRhcmdldElkcyA9IG5ldyBTZXQ7CiAgICAg
fQogCiAgICAgLy8gUHVibGljCkBAIC04MCw2ICs4Myw3IEBAIFdJLlRhcmdldE1hbmFnZXIgPSBj
bGFzcyBUYXJnZXRNYW5hZ2VyIGV4dGVuZHMgV0kuT2JqZWN0CiAKICAgICAgICAgdGhpcy5fY2Fj
aGVkVGFyZ2V0c0xpc3QgPSBudWxsOwogICAgICAgICB0aGlzLl90YXJnZXRzLmRlbGV0ZSh0YXJn
ZXQuaWRlbnRpZmllcik7CisgICAgICAgIHRhcmdldC5kZXN0cm95KCk7CiAKICAgICAgICAgdGhp
cy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV0kuVGFyZ2V0TWFuYWdlci5FdmVudC5UYXJnZXRS
ZW1vdmVkLCB7dGFyZ2V0fSk7CiAgICAgfQpAQCAtOTEsNyArOTUsNyBAQCBXSS5UYXJnZXRNYW5h
Z2VyID0gY2xhc3MgVGFyZ2V0TWFuYWdlciBleHRlbmRzIFdJLk9iamVjdAogICAgICAgICBsZXQg
dGFyZ2V0ID0gbmV3IFdJLk11bHRpcGxleGluZ0JhY2tlbmRUYXJnZXQ7CiAgICAgICAgIHRhcmdl
dC5pbml0aWFsaXplKCk7CiAKLSAgICAgICAgV0kuaW5pdGlhbGl6ZUJhY2tlbmRUYXJnZXQodGFy
Z2V0KTsKKyAgICAgICAgdGhpcy5faW5pdGlhbGl6ZUJhY2tlbmRUYXJnZXQodGFyZ2V0KTsKIAog
ICAgICAgICAvLyBBZGQgdGhlIHRhcmdldCB3aXRob3V0IGRpc3BhdGNoaW5nIGFuIGV2ZW50Lgog
ICAgICAgICB0aGlzLl90YXJnZXRzLnNldCh0YXJnZXQuaWRlbnRpZmllciwgdGFyZ2V0KTsKQEAg
LTEwNCwxOSArMTA4LDU1IEBAIFdJLlRhcmdldE1hbmFnZXIgPSBjbGFzcyBUYXJnZXRNYW5hZ2Vy
IGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIGxldCB0YXJnZXQgPSBuZXcgV0kuRGlyZWN0QmFj
a2VuZFRhcmdldDsKICAgICAgICAgdGFyZ2V0LmluaXRpYWxpemUoKTsKIAotICAgICAgICBXSS5p
bml0aWFsaXplQmFja2VuZFRhcmdldCh0YXJnZXQpOworICAgICAgICB0aGlzLl9pbml0aWFsaXpl
QmFja2VuZFRhcmdldCh0YXJnZXQpOwogCiAgICAgICAgIGlmIChXSS5zaGFyZWRBcHAuZGVidWdn
YWJsZVR5cGUgPT09IFdJLkRlYnVnZ2FibGVUeXBlLlBhZ2UpCi0gICAgICAgICAgICBXSS5pbml0
aWFsaXplUGFnZVRhcmdldCh0YXJnZXQpOworICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZVBh
Z2VUYXJnZXQodGFyZ2V0KTsKIAogICAgICAgICB0aGlzLmFkZFRhcmdldCh0YXJnZXQpOwogICAg
IH0KIAogICAgIC8vIFRhcmdldE9ic2VydmVyCiAKLSAgICB0YXJnZXRDcmVhdGVkKHRhcmdldCwg
dGFyZ2V0SW5mbykKKyAgICB0YXJnZXRDcmVhdGVkKHBhcmVudFRhcmdldCwgdGFyZ2V0SW5mbykK
KyAgICB7CisgICAgICAgIHRoaXMuX3RhcmdldENyZWF0ZWQocGFyZW50VGFyZ2V0LCB0YXJnZXRJ
bmZvKTsKKworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXSS5UYXJnZXRN
YW5hZ2VyLkV2ZW50LlRhcmdldENyZWF0ZWQsIHt0YXJnZXRJbmZvfSk7CisgICAgfQorCisgICAg
ZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQocGFyZW50VGFyZ2V0LCBwcmV2aW91c1RhcmdldElk
LCBuZXdUYXJnZXRJZCkKKyAgICB7CisgICAgICAgIHRoaXMuX3RhcmdldERlc3Ryb3llZChwcmV2
aW91c1RhcmdldElkKTsKKyAgICAgICAgbGV0IHRhcmdldEluZm8gPSB0aGlzLl9wcm92aXNpb25h
bFRhcmdldEluZm9zLmdldChuZXdUYXJnZXRJZCk7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRh
cmdldEluZm8pOworICAgICAgICB0YXJnZXRJbmZvLmlzUHJvdmlzaW9uYWwgPSBmYWxzZTsKKyAg
ICAgICAgdGhpcy5fcHJvdmlzaW9uYWxUYXJnZXRJbmZvcy5kZWxldGUobmV3VGFyZ2V0SWQpOwor
ICAgICAgICB0aGlzLl90YXJnZXRDcmVhdGVkKHBhcmVudFRhcmdldCwgdGFyZ2V0SW5mbyk7Cisg
ICAgICAgIGNvbnNvbGUuYXNzZXJ0KCF0aGlzLl9zd2FwcGVkVGFyZ2V0SWRzLmhhcyhwcmV2aW91
c1RhcmdldElkKSk7CisgICAgICAgIHRoaXMuX3N3YXBwZWRUYXJnZXRJZHMuYWRkKHByZXZpb3Vz
VGFyZ2V0SWQpOworCisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdJLlRh
cmdldE1hbmFnZXIuRXZlbnQuRGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQsIHtwcmV2aW91c1Rh
cmdldElkLCB0YXJnZXRJbmZvfSk7CisgICAgfQorCisgICAgdGFyZ2V0RGVzdHJveWVkKHRhcmdl
dElkKQogICAgIHsKLSAgICAgICAgbGV0IGNvbm5lY3Rpb24gPSBuZXcgSW5zcGVjdG9yQmFja2Vu
ZC5UYXJnZXRDb25uZWN0aW9uKHRhcmdldCwgdGFyZ2V0SW5mby50YXJnZXRJZCk7CisgICAgICAg
IHRoaXMuX3RhcmdldERlc3Ryb3llZCh0YXJnZXRJZCk7CisKKyAgICAgICAgdGhpcy5kaXNwYXRj
aEV2ZW50VG9MaXN0ZW5lcnMoV0kuVGFyZ2V0TWFuYWdlci5FdmVudC5UYXJnZXREZXN0cm95ZWQs
IHt0YXJnZXRJZH0pOworICAgIH0KKworICAgIF90YXJnZXRDcmVhdGVkKHBhcmVudFRhcmdldCwg
dGFyZ2V0SW5mbykKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCF0aGlzLl9wcm92aXNp
b25hbFRhcmdldEluZm9zLmhhcyh0YXJnZXRJbmZvLnRhcmdldElkKSk7CisKKyAgICAgICAgLy8g
Q09NUEFUSUJJTElUWSAoaU9TIDEzLjApOiBgVGFyZ2V0LlRhcmdldEluZm8uaXNQcm92aXNpb25h
bGAgZGlkIG5vdCBleGlzdCB5ZXQuCisgICAgICAgIGlmICh0YXJnZXRJbmZvLmlzUHJvdmlzaW9u
YWwpIHsKKyAgICAgICAgICAgIHRoaXMuX3Byb3Zpc2lvbmFsVGFyZ2V0SW5mb3Muc2V0KHRhcmdl
dEluZm8udGFyZ2V0SWQsIHRhcmdldEluZm8pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgbGV0IGNvbm5lY3Rpb24gPSBuZXcgSW5zcGVjdG9yQmFja2VuZC5UYXJn
ZXRDb25uZWN0aW9uKHBhcmVudFRhcmdldCwgdGFyZ2V0SW5mby50YXJnZXRJZCk7CiAgICAgICAg
IGxldCBzdWJUYXJnZXQgPSB0aGlzLl9jcmVhdGVUYXJnZXQodGFyZ2V0SW5mbywgY29ubmVjdGlv
bik7CiAgICAgICAgIHRoaXMuX2NoZWNrQW5kSGFuZGxlUGFnZVRhcmdldFRyYW5zaXRpb24oc3Vi
VGFyZ2V0KTsKICAgICAgICAgc3ViVGFyZ2V0LmluaXRpYWxpemUoKTsKQEAgLTEyNCw4ICsxNjQs
MTQgQEAgV0kuVGFyZ2V0TWFuYWdlciA9IGNsYXNzIFRhcmdldE1hbmFnZXIgZXh0ZW5kcyBXSS5P
YmplY3QKICAgICAgICAgdGhpcy5hZGRUYXJnZXQoc3ViVGFyZ2V0KTsKICAgICB9CiAKLSAgICB0
YXJnZXREZXN0cm95ZWQodGFyZ2V0SWQpCisgICAgX3RhcmdldERlc3Ryb3llZCh0YXJnZXRJZCkK
ICAgICB7CisgICAgICAgIGlmICh0aGlzLl9wcm92aXNpb25hbFRhcmdldEluZm9zLmRlbGV0ZSh0
YXJnZXRJZCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHRoaXMuX3N3YXBw
ZWRUYXJnZXRJZHMuZGVsZXRlKHRhcmdldElkKSkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAg
ICAgICBsZXQgdGFyZ2V0ID0gdGhpcy5fdGFyZ2V0cy5nZXQodGFyZ2V0SWQpOwogICAgICAgICB0
aGlzLl9jaGVja0FuZEhhbmRsZVBhZ2VUYXJnZXRUZXJtaW5hdGlvbih0YXJnZXQpOwogICAgICAg
ICB0aGlzLnJlbW92ZVRhcmdldCh0YXJnZXQpOwpAQCAtMTMzLDYgKzE3OSw5IEBAIFdJLlRhcmdl
dE1hbmFnZXIgPSBjbGFzcyBUYXJnZXRNYW5hZ2VyIGV4dGVuZHMgV0kuT2JqZWN0CiAKICAgICBk
aXNwYXRjaE1lc3NhZ2VGcm9tVGFyZ2V0KHRhcmdldElkLCBtZXNzYWdlKQogICAgIHsKKyAgICAg
ICAgaWYgKHRoaXMuX3Byb3Zpc2lvbmFsVGFyZ2V0SW5mb3MuaGFzKHRhcmdldElkKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKwogICAgICAgICBsZXQgdGFyZ2V0ID0gdGhpcy5fdGFyZ2V0cy5nZXQo
dGFyZ2V0SWQpOwogICAgICAgICBjb25zb2xlLmFzc2VydCh0YXJnZXQpOwogICAgICAgICBpZiAo
IXRhcmdldCkKQEAgLTE2OCwxMiArMjE3LDEyIEBAIFdJLlRhcmdldE1hbmFnZXIgPSBjbGFzcyBU
YXJnZXRNYW5hZ2VyIGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIC8vIEZpcnN0IHBhZ2UgdGFy
Z2V0LgogICAgICAgICBpZiAoIVdJLnBhZ2VUYXJnZXQgJiYgIXRoaXMuX3NlZW5QYWdlVGFyZ2V0
KSB7CiAgICAgICAgICAgICB0aGlzLl9zZWVuUGFnZVRhcmdldCA9IHRydWU7Ci0gICAgICAgICAg
ICBXSS5pbml0aWFsaXplUGFnZVRhcmdldCh0YXJnZXQpOworICAgICAgICAgICAgdGhpcy5faW5p
dGlhbGl6ZVBhZ2VUYXJnZXQodGFyZ2V0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCiAgICAgICAgIC8vIFRyYW5zaXRpb25pbmcgcGFnZSB0YXJnZXQuCi0gICAgICAgIFdJLnRy
YW5zaXRpb25QYWdlVGFyZ2V0KHRhcmdldCk7CisgICAgICAgIHRoaXMuX3RyYW5zaXRpb25QYWdl
VGFyZ2V0KHRhcmdldCk7CiAgICAgfQogCiAgICAgX2NoZWNrQW5kSGFuZGxlUGFnZVRhcmdldFRl
cm1pbmF0aW9uKHRhcmdldCkKQEAgLTE4NSw3ICsyMzQsNyBAQCBXSS5UYXJnZXRNYW5hZ2VyID0g
Y2xhc3MgVGFyZ2V0TWFuYWdlciBleHRlbmRzIFdJLk9iamVjdAogICAgICAgICBjb25zb2xlLmFz
c2VydCh0aGlzLl9zZWVuUGFnZVRhcmdldCk7CiAKICAgICAgICAgLy8gVGVybWluYXRpbmcgdGhl
IHBhZ2UgdGFyZ2V0LgotICAgICAgICBXSS50ZXJtaW5hdGVQYWdlVGFyZ2V0KHRhcmdldCk7Cisg
ICAgICAgIHRoaXMuX3Rlcm1pbmF0ZVBhZ2VUYXJnZXQodGFyZ2V0KTsKIAogICAgICAgICAvLyBF
bnN1cmUgd2UgdHJhbnNpdGlvbiBpbiBhIHJlYXNvbmFibGUgYW1vdW50IG9mIHRpbWUsIG90aGVy
d2lzZSBjbG9zZS4KICAgICAgICAgY29uc3QgdGltZVRvVHJhbnNpdGlvbiA9IDIwMDA7CkBAIC0x
OTksOSArMjQ4LDc0IEBAIFdJLlRhcmdldE1hbmFnZXIgPSBjbGFzcyBUYXJnZXRNYW5hZ2VyIGV4
dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgICAgICBXSS5jbG9zZSgpOwogICAgICAgICB9LCB0aW1l
VG9UcmFuc2l0aW9uKTsKICAgICB9CisKKyAgICBfaW5pdGlhbGl6ZUJhY2tlbmRUYXJnZXQodGFy
Z2V0KQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoIVdJLm1haW5UYXJnZXQpOworCisg
ICAgICAgIFdJLmJhY2tlbmRUYXJnZXQgPSB0YXJnZXQ7CisKKyAgICAgICAgdGhpcy5fcmVzZXRN
YWluRXhlY3V0aW9uQ29udGV4dCgpOworCisgICAgICAgIFdJLl90YXJnZXRzQXZhaWxhYmxlUHJv
bWlzZS5yZXNvbHZlKCk7CisgICAgfQorCisgICAgX2luaXRpYWxpemVQYWdlVGFyZ2V0KHRhcmdl
dCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KFdJLnNoYXJlZEFwcC5pc1dlYkRlYnVn
Z2FibGUoKSk7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRhcmdldC50eXBlID09PSBXSS5UYXJn
ZXRUeXBlLlBhZ2UgfHwgdGFyZ2V0IGluc3RhbmNlb2YgV0kuRGlyZWN0QmFja2VuZFRhcmdldCk7
CisKKyAgICAgICAgV0kucGFnZVRhcmdldCA9IHRhcmdldDsKKworICAgICAgICB0aGlzLl9yZXNl
dE1haW5FeGVjdXRpb25Db250ZXh0KCk7CisgICAgfQorCisgICAgX3RyYW5zaXRpb25QYWdlVGFy
Z2V0KHRhcmdldCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCFXSS5wYWdlVGFyZ2V0
KTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoV0kuc2hhcmVkQXBwLmRlYnVnZ2FibGVUeXBlID09
PSBXSS5EZWJ1Z2dhYmxlVHlwZS5XZWJQYWdlKTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQodGFy
Z2V0LnR5cGUgPT09IFdJLlRhcmdldFR5cGUuUGFnZSk7CisKKyAgICAgICAgV0kucGFnZVRhcmdl
dCA9IHRhcmdldDsKKworICAgICAgICB0aGlzLl9yZXNldE1haW5FeGVjdXRpb25Db250ZXh0KCk7
CisKKyAgICAgICAgLy8gQWN0aW9ucyB0byB0cmFuc2l0aW9uIHRoZSBwYWdlIHRhcmdldC4KKyAg
ICAgICAgV0kubm90aWZpY2F0aW9ucy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV0kuTm90aWZp
Y2F0aW9uLlRyYW5zaXRpb25QYWdlVGFyZ2V0KTsKKyAgICAgICAgV0kuZG9tTWFuYWdlci50cmFu
c2l0aW9uUGFnZVRhcmdldCgpOworICAgICAgICBXSS5uZXR3b3JrTWFuYWdlci50cmFuc2l0aW9u
UGFnZVRhcmdldCgpOworICAgICAgICBXSS50aW1lbGluZU1hbmFnZXIudHJhbnNpdGlvblBhZ2VU
YXJnZXQoKTsKKyAgICB9CisKKyAgICBfdGVybWluYXRlUGFnZVRhcmdldCh0YXJnZXQpCisgICAg
eworICAgICAgICBjb25zb2xlLmFzc2VydChXSS5wYWdlVGFyZ2V0KTsKKyAgICAgICAgY29uc29s
ZS5hc3NlcnQoV0kucGFnZVRhcmdldCA9PT0gdGFyZ2V0KTsKKyAgICAgICAgY29uc29sZS5hc3Nl
cnQoV0kuc2hhcmVkQXBwLmRlYnVnZ2FibGVUeXBlID09PSBXSS5EZWJ1Z2dhYmxlVHlwZS5XZWJQ
YWdlKTsKKworICAgICAgICAvLyBSZW1vdmUgYW55IFdvcmtlciB0YXJnZXRzIGFzc29jaWF0ZWQg
d2l0aCB0aGlzIHBhZ2UuCisgICAgICAgIGxldCB3b3JrZXJUYXJnZXRzID0gV0kudGFyZ2V0cy5m
aWx0ZXIoKHgpID0+IHgudHlwZSA9PT0gV0kuVGFyZ2V0VHlwZS5Xb3JrZXIpOworICAgICAgICBm
b3IgKGxldCB3b3JrZXJUYXJnZXQgb2Ygd29ya2VyVGFyZ2V0cykKKyAgICAgICAgICAgIFdJLndv
cmtlck1hbmFnZXIud29ya2VyVGVybWluYXRlZCh3b3JrZXJUYXJnZXQuaWRlbnRpZmllcik7CisK
KyAgICAgICAgV0kucGFnZVRhcmdldCA9IG51bGw7CisgICAgfQorCisgICAgX3Jlc2V0TWFpbkV4
ZWN1dGlvbkNvbnRleHQoKQorICAgIHsKKyAgICAgICAgaWYgKFdJLm1haW5UYXJnZXQgaW5zdGFu
Y2VvZiBXSS5NdWx0aXBsZXhpbmdCYWNrZW5kVGFyZ2V0KQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIGlmIChXSS5tYWluVGFyZ2V0LmV4ZWN1dGlvbkNvbnRleHQpCisgICAgICAgICAg
ICBXSS5ydW50aW1lTWFuYWdlci5hY3RpdmVFeGVjdXRpb25Db250ZXh0ID0gV0kubWFpblRhcmdl
dC5leGVjdXRpb25Db250ZXh0OworICAgIH0KIH07CiAKIFdJLlRhcmdldE1hbmFnZXIuRXZlbnQg
PSB7CiAgICAgVGFyZ2V0QWRkZWQ6IFN5bWJvbCgidGFyZ2V0LW1hbmFnZXItdGFyZ2V0LWFkZGVk
IiksCiAgICAgVGFyZ2V0UmVtb3ZlZDogU3ltYm9sKCJ0YXJnZXQtbWFuYWdlci10YXJnZXQtcmVt
b3ZlZCIpLAorCisgICAgVGFyZ2V0Q3JlYXRlZDogInRhcmdldC1tYW5hZ2VyLXRhcmdldC1jcmVh
dGVkIiwKKyAgICBEaWRDb21taXRQcm92aXNpb25hbFRhcmdldDogInRhcmdldC1tYW5hZ2VyLXBy
b3Zpc2lvbmFsLXRhcmdldC1jb21taXR0ZWQiLAorICAgIFRhcmdldERlc3Ryb3llZDogInRhcmdl
dC1tYW5hZ2VyLXRhcmdldC1kZXRyb3llZCIsCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wvQ29ubmVjdGlvbi5qcyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL0Nvbm5lY3Rpb24uanMKaW5kZXgg
NzFjMjA2YmI2OTlmYjEwN2FkNGE2MTVhZTMzZGYyNWQ1MTZkNTZjMi4uZjI1OGM1NzlhMDI5ZGNm
YTI2NzU4YWU4MTgwOGRkZTEyZDQwMDk0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wvQ29ubmVjdGlvbi5qcworKysgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Qcm90b2NvbC9Db25uZWN0aW9uLmpzCkBAIC0yOTYs
OCArMjk2LDEyIEBAIEluc3BlY3RvckJhY2tlbmQuV29ya2VyQ29ubmVjdGlvbiA9IGNsYXNzIElu
c3BlY3RvckJhY2tlbmRXb3JrZXJDb25uZWN0aW9uIGV4dGVuCiAKICAgICBzZW5kTWVzc2FnZVRv
QmFja2VuZChtZXNzYWdlKQogICAgIHsKLSAgICAgICAgLy8gSWdub3JlIGVycm9ycyBpZiBhIHdv
cmtlciB3ZW50IGF3YXkgcXVpY2tseS4KLSAgICAgICAgdGhpcy5fcGFyZW50VGFyZ2V0Lldvcmtl
ckFnZW50LnNlbmRNZXNzYWdlVG9Xb3JrZXIodGhpcy5fd29ya2VySWQsIG1lc3NhZ2UpLmNhdGNo
KGZ1bmN0aW9uKCl7fSk7CisgICAgICAgIHRoaXMuX3BhcmVudFRhcmdldC5Xb3JrZXJBZ2VudC5z
ZW5kTWVzc2FnZVRvV29ya2VyKHRoaXMuX3dvcmtlcklkLCBtZXNzYWdlKS5jYXRjaCgoZXJyb3Ip
ID0+IHsKKyAgICAgICAgICAgIC8vIElnbm9yZSBlcnJvcnMgaWYgYSB3b3JrZXIgd2VudCBhd2F5
IHF1aWNrbHkuCisgICAgICAgICAgICBpZiAodGhpcy50YXJnZXQuaXNEZXN0cm95ZWQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgV0kucmVwb3J0SW50ZXJuYWxFcnJvcihl
cnJvcik7CisgICAgICAgIH0pOwogICAgIH0KIH07CiAKQEAgLTMxNSw3ICszMTksMTIgQEAgSW5z
cGVjdG9yQmFja2VuZC5UYXJnZXRDb25uZWN0aW9uID0gY2xhc3MgSW5zcGVjdG9yQmFja2VuZFRh
cmdldENvbm5lY3Rpb24gZXh0ZW4KIAogICAgIHNlbmRNZXNzYWdlVG9CYWNrZW5kKG1lc3NhZ2Up
CiAgICAgewotICAgICAgICB0aGlzLl9wYXJlbnRUYXJnZXQuVGFyZ2V0QWdlbnQuc2VuZE1lc3Nh
Z2VUb1RhcmdldCh0aGlzLl90YXJnZXRJZCwgbWVzc2FnZSk7CisgICAgICAgIHRoaXMuX3BhcmVu
dFRhcmdldC5UYXJnZXRBZ2VudC5zZW5kTWVzc2FnZVRvVGFyZ2V0KHRoaXMuX3RhcmdldElkLCBt
ZXNzYWdlKS5jYXRjaCgoZXJyb3IpID0+IHsKKyAgICAgICAgICAgIC8vIElnbm9yZSBlcnJvcnMg
aWYgdGhlIHRhcmdldCB3YXMgZGVzdHJveWVkIGFmdGVyIHRoZSBjb21tYW5kIHdhcyBkaXNwYXRj
aGVkLgorICAgICAgICAgICAgaWYgKHRoaXMudGFyZ2V0LmlzRGVzdHJveWVkKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIFdJLnJlcG9ydEludGVybmFsRXJyb3IoZXJyb3Ip
OworICAgICAgICB9KTsKICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Qcm90b2NvbC9UYXJnZXQuanMgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Qcm90b2NvbC9UYXJnZXQuanMKaW5kZXggNjc3MDc5ZTgxZTMx
NDliOWRmNWUzYmJiOTg1ZWIzMjI3NDMwYTU5NC4uYjVmYzQxYmEwOWViZWVjZGQyNjVhMDNiMmI0
MDFhZDU4YzhlYjg3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvUHJvdG9jb2wvVGFyZ2V0LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL1Byb3RvY29sL1RhcmdldC5qcwpAQCAtMTYyLDYgKzE2Miw4IEBAIFdJLlRhcmdl
dCA9IGNsYXNzIFRhcmdldCBleHRlbmRzIFdJLk9iamVjdAogICAgIGdldCByZXNvdXJjZUNvbGxl
Y3Rpb24oKSB7IHJldHVybiB0aGlzLl9yZXNvdXJjZUNvbGxlY3Rpb247IH0KICAgICBnZXQgZXh0
cmFTY3JpcHRDb2xsZWN0aW9uKCkgeyByZXR1cm4gdGhpcy5fZXh0cmFTY3JpcHRDb2xsZWN0aW9u
OyB9CiAKKyAgICBnZXQgaXNEZXN0cm95ZWQoKSB7IHJldHVybiB0aGlzLl9pc0Rlc3Ryb3llZDsg
fQorCiAgICAgZ2V0IGRpc3BsYXlOYW1lKCkgeyByZXR1cm4gdGhpcy5fbmFtZTsgfQogCiAgICAg
Z2V0IG1haW5SZXNvdXJjZSgpCkBAIC0xOTksMTAgKzIwMSwxNCBAQCBXSS5UYXJnZXQgPSBjbGFz
cyBUYXJnZXQgZXh0ZW5kcyBXSS5PYmplY3QKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9M
aXN0ZW5lcnMoV0kuVGFyZ2V0LkV2ZW50LlNjcmlwdEFkZGVkLCB7c2NyaXB0fSk7CiAgICAgfQog
CisgICAgZGVzdHJveSgpCisgICAgeworICAgICAgICB0aGlzLl9pc0Rlc3Ryb3llZCA9IHRydWU7
CisgICAgfQorCiAgICAgaGFzRG9tYWluKGRvbWFpbk5hbWUpCiAgICAgewogICAgICAgICBjb25z
b2xlLmFzc2VydCghZG9tYWluTmFtZS5pbmNsdWRlcygiLiIpICYmICFkb21haW5OYW1lLmVuZHNX
aXRoKCJBZ2VudCIpKTsKLQogICAgICAgICByZXR1cm4gZG9tYWluTmFtZSBpbiB0aGlzLl9hZ2Vu
dHM7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9Qcm90b2NvbC9UYXJnZXRPYnNlcnZlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL1Byb3RvY29sL1RhcmdldE9ic2VydmVyLmpzCmluZGV4IDhlYjEyMDU5ZWVh
NTEyOGFmMDQ4NzQ0NTA4NmVkYmRjNGU3MzcwMzguLjA4YWVlOWQwOGJmNTA2ZGE3YTRlOTgyZDcy
OGJkMTk5ZDU3ZjIyNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL1Byb3RvY29sL1RhcmdldE9ic2VydmVyLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL1RhcmdldE9ic2VydmVyLmpzCkBAIC0zMiw2ICsz
MiwxMSBAQCBXSS5UYXJnZXRPYnNlcnZlciA9IGNsYXNzIFRhcmdldE9ic2VydmVyIGV4dGVuZHMg
SW5zcGVjdG9yQmFja2VuZC5EaXNwYXRjaGVyCiAgICAgICAgIFdJLnRhcmdldE1hbmFnZXIudGFy
Z2V0Q3JlYXRlZCh0aGlzLl90YXJnZXQsIHRhcmdldEluZm8pOwogICAgIH0KIAorICAgIGRpZENv
bW1pdFByb3Zpc2lvbmFsVGFyZ2V0KG9sZFRhcmdldElkLCBuZXdUYXJnZXRJZCkKKyAgICB7Cisg
ICAgICAgIFdJLnRhcmdldE1hbmFnZXIuZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQodGhpcy5f
dGFyZ2V0LCBvbGRUYXJnZXRJZCwgbmV3VGFyZ2V0SWQpOworICAgIH0KKwogICAgIHRhcmdldERl
c3Ryb3llZCh0YXJnZXRJZCkKICAgICB7CiAgICAgICAgIFdJLnRhcmdldE1hbmFnZXIudGFyZ2V0
RGVzdHJveWVkKHRhcmdldElkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL1Rlc3QvVGVzdC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL1Rlc3QvVGVzdC5qcwppbmRleCBjMjM0MjIwMjRhNmE5NTM3ZDE0NmZhM2FlYTEyZGMz
YTIxM2U1N2JkLi44ZWVhZDU1NjM1YTE0MjZiYjgzMjJlZmY3ZWQ4OGFmNzUwOGRhMDlmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9UZXN0L1Rlc3QuanMK
KysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVGVzdC9UZXN0LmpzCkBA
IC04NSw0MSArODUsNiBAQCBXSS5sb2FkZWQgPSBmdW5jdGlvbigpCiAgICAgICAgIFdJLnRhcmdl
dE1hbmFnZXIuY3JlYXRlRGlyZWN0QmFja2VuZFRhcmdldCgpOwogfTsKIAotV0kuaW5pdGlhbGl6
ZUJhY2tlbmRUYXJnZXQgPSBmdW5jdGlvbih0YXJnZXQpCi17Ci0gICAgV0kuYmFja2VuZFRhcmdl
dCA9IHRhcmdldDsKLQotICAgIFdJLnJlc2V0TWFpbkV4ZWN1dGlvbkNvbnRleHQoKTsKLQotICAg
IFdJLl90YXJnZXRzQXZhaWxhYmxlUHJvbWlzZS5yZXNvbHZlKCk7Ci19OwotCi1XSS5pbml0aWFs
aXplUGFnZVRhcmdldCA9IGZ1bmN0aW9uKHRhcmdldCkKLXsKLSAgICBXSS5wYWdlVGFyZ2V0ID0g
dGFyZ2V0OwotCi0gICAgV0kucmVzZXRNYWluRXhlY3V0aW9uQ29udGV4dCgpOwotfTsKLQotV0ku
dHJhbnNpdGlvblBhZ2VUYXJnZXQgPSBmdW5jdGlvbih0YXJnZXQpCi17Ci0gICAgY29uc29sZS5l
cnJvcigiV0kudHJhbnNpdGlvblBhZ2VUYXJnZXQgc2hvdWxkIG5vdCBiZSByZWFjaGVkIGluIHRl
c3RzLiIpOwotfTsKLQotV0kudGVybWluYXRlUGFnZVRhcmdldCA9IGZ1bmN0aW9uKHRhcmdldCkK
LXsKLSAgICBjb25zb2xlLmVycm9yKCJXSS50ZXJtaW5hdGVQYWdlVGFyZ2V0IHNob3VsZCBub3Qg
YmUgcmVhY2hlZCBpbiB0ZXN0cy4iKTsKLX07Ci0KLVdJLnJlc2V0TWFpbkV4ZWN1dGlvbkNvbnRl
eHQgPSBmdW5jdGlvbigpCi17Ci0gICAgaWYgKFdJLm1haW5UYXJnZXQgaW5zdGFuY2VvZiBXSS5N
dWx0aXBsZXhpbmdCYWNrZW5kVGFyZ2V0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoV0ku
bWFpblRhcmdldC5leGVjdXRpb25Db250ZXh0KQotICAgICAgICBXSS5ydW50aW1lTWFuYWdlci5h
Y3RpdmVFeGVjdXRpb25Db250ZXh0ID0gV0kubWFpblRhcmdldC5leGVjdXRpb25Db250ZXh0Owot
fTsKLQogV0kuY29udGVudExvYWRlZCA9IGZ1bmN0aW9uKCkKIHsKICAgICAvLyBUaGluZ3MgdGhh
dCB3b3VsZCBub3JtYWxseSBnZXQgY2FsbGVkIGJ5IHRoZSBVSSwgdGhhdCB3ZSBzdGlsbCB3YW50
IHRvIGRvIGluIHRlc3RzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvUXVpY2tDb25zb2xlLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvVmlld3MvUXVpY2tDb25zb2xlLmpzCmluZGV4IDE3OTdhYmZiM2IyZGFhMThj
MjUzNGUyMGQ4YTZiMmEyMTk1ZDg0N2EuLmEyZjk4MzZiZTRlYmU2Y2ExMGVlNDhkOGMzM2E2MGQ5
OGVmNTY4NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1ZpZXdzL1F1aWNrQ29uc29sZS5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9WaWV3cy9RdWlja0NvbnNvbGUuanMKQEAgLTY5LDcgKzY5LDcgQEAgV0kuUXVpY2tD
b25zb2xlID0gY2xhc3MgUXVpY2tDb25zb2xlIGV4dGVuZHMgV0kuVmlldwogICAgICAgICB0aGlz
Ll9leGVjdXRpb25Db250ZXh0U2VsZWN0b3JEaXZpZGVyID0gbmV3IFdJLkRpdmlkZXJOYXZpZ2F0
aW9uSXRlbTsKICAgICAgICAgdGhpcy5fbmF2aWdhdGlvbkJhci5hZGROYXZpZ2F0aW9uSXRlbSh0
aGlzLl9leGVjdXRpb25Db250ZXh0U2VsZWN0b3JEaXZpZGVyKTsKIAotICAgICAgICB0aGlzLmlu
aXRpYWxpemVNYWluRXhlY3V0aW9uQ29udGV4dFBhdGhDb21wb25lbnQoKTsKKyAgICAgICAgdGhp
cy5faW5pdGlhbGl6ZU1haW5FeGVjdXRpb25Db250ZXh0UGF0aENvbXBvbmVudCgpOwogCiAgICAg
ICAgIFdJLnNldHRpbmdzLmNvbnNvbGVTYXZlZFJlc3VsdEFsaWFzLmFkZEV2ZW50TGlzdGVuZXIo
V0kuU2V0dGluZy5FdmVudC5DaGFuZ2VkLCB0aGlzLl91cGRhdGVBdXRvbWF0aWNFeGVjdXRpb25D
b250ZXh0UGF0aENvbXBvbmVudFRvb2x0aXAsIHRoaXMpOwogCkBAIC04Miw2ICs4Miw3IEBAIFdJ
LlF1aWNrQ29uc29sZSA9IGNsYXNzIFF1aWNrQ29uc29sZSBleHRlbmRzIFdJLlZpZXcKICAgICAg
ICAgV0kuZGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV0kuRGVidWdnZXJNYW5hZ2Vy
LkV2ZW50LkFjdGl2ZUNhbGxGcmFtZURpZENoYW5nZSwgdGhpcy5fZGVidWdnZXJBY3RpdmVDYWxs
RnJhbWVEaWRDaGFuZ2UsIHRoaXMpOwogCiAgICAgICAgIFdJLnJ1bnRpbWVNYW5hZ2VyLmFkZEV2
ZW50TGlzdGVuZXIoV0kuUnVudGltZU1hbmFnZXIuRXZlbnQuQWN0aXZlRXhlY3V0aW9uQ29udGV4
dENoYW5nZWQsIHRoaXMuX2FjdGl2ZUV4ZWN1dGlvbkNvbnRleHRDaGFuZ2VkLCB0aGlzKTsKKyAg
ICAgICAgV0kubm90aWZpY2F0aW9ucy5hZGRFdmVudExpc3RlbmVyKFdJLk5vdGlmaWNhdGlvbi5U
cmFuc2l0aW9uUGFnZVRhcmdldCwgdGhpcy5fcGFnZVRhcmdldFRyYW5zaXRpb25lZCwgdGhpcyk7
CiAKICAgICAgICAgV0kudGFyZ2V0TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdJLlRhcmdldE1h
bmFnZXIuRXZlbnQuVGFyZ2V0QWRkZWQsIHRoaXMuX3RhcmdldEFkZGVkLCB0aGlzKTsKICAgICAg
ICAgV0kudGFyZ2V0TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdJLlRhcmdldE1hbmFnZXIuRXZl
bnQuVGFyZ2V0UmVtb3ZlZCwgdGhpcy5fdGFyZ2V0UmVtb3ZlZCwgdGhpcyk7CkBAIC0xMTEsNyAr
MTEyLDE0IEBAIFdJLlF1aWNrQ29uc29sZSA9IGNsYXNzIFF1aWNrQ29uc29sZSBleHRlbmRzIFdJ
LlZpZXcKICAgICAgICAgc3VwZXIuY2xvc2VkKCk7CiAgICAgfQogCi0gICAgaW5pdGlhbGl6ZU1h
aW5FeGVjdXRpb25Db250ZXh0UGF0aENvbXBvbmVudCgpCisgICAgX3BhZ2VUYXJnZXRUcmFuc2l0
aW9uZWQoKQorICAgIHsKKyAgICAgICAgaWYgKFdJLm1haW5UYXJnZXQgaW5zdGFuY2VvZiBXSS5N
dWx0aXBsZXhpbmdCYWNrZW5kVGFyZ2V0KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0
aGlzLl9pbml0aWFsaXplTWFpbkV4ZWN1dGlvbkNvbnRleHRQYXRoQ29tcG9uZW50KCk7CisgICAg
fQorCisgICAgX2luaXRpYWxpemVNYWluRXhlY3V0aW9uQ29udGV4dFBhdGhDb21wb25lbnQoKQog
ICAgIHsKICAgICAgICAgaWYgKCFXSS5tYWluVGFyZ2V0IHx8IFdJLm1haW5UYXJnZXQgaW5zdGFu
Y2VvZiBXSS5NdWx0aXBsZXhpbmdCYWNrZW5kVGFyZ2V0KQogICAgICAgICAgICAgcmV0dXJuOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291
cmNlcy50eHQKaW5kZXggMTY3NTI3NTBmZTUxYzYwNGIwZTE4ZWIyYWQ0MmE4ZmI0Y2ZmOWI5OS4u
ZDJhMzFjYzBlNGUyN2IzYzg1MmI5ZTRlNTlmM2IwY2JlNjExOWJjMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CkBA
IC0yODksNyArMjg5LDYgQEAgVUlQcm9jZXNzL1dlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVu
dC5jcHAKIFVJUHJvY2Vzcy9XZWJQYWdlR3JvdXAuY3BwCiBVSVByb2Nlc3MvV2ViUGFnZUluamVj
dGVkQnVuZGxlQ2xpZW50LmNwcAogVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVy
LmNwcAotVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRBZ2VudC5jcHAKIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCiBVSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5LmNwcAogVUlQ
cm9jZXNzL1dlYlByZWZlcmVuY2VzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuY3BwCmluZGV4IDg3YTJmMDY1
ODNkZTIxMDY2ZDE1YzUyNTNlZjIyNDEzMDZmNTIzNGMuLmE1YzBlMzAzMGNkNWEyOWEyOGM0ZWRk
ODIzNTVlZGY3NDJhYmYxYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5jcHAKQEAgLTM0LDEyICszNCwxMiBA
QAogbmFtZXNwYWNlIEFQSSB7CiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCi1SZWY8V2ViQXV0
aGVudGljYXRpb25QYW5lbD4gV2ViQXV0aGVudGljYXRpb25QYW5lbDo6Y3JlYXRlKGNvbnN0IEF1
dGhlbnRpY2F0b3JNYW5hZ2VyJiBtYW5hZ2VyLCBjb25zdCBTdHJpbmcmIHJwSWQpCitSZWY8V2Vi
QXV0aGVudGljYXRpb25QYW5lbD4gV2ViQXV0aGVudGljYXRpb25QYW5lbDo6Y3JlYXRlKGNvbnN0
IEF1dGhlbnRpY2F0b3JNYW5hZ2VyJiBtYW5hZ2VyLCBjb25zdCBXVEY6OlN0cmluZyYgcnBJZCkK
IHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJBdXRoZW50aWNhdGlvblBhbmVsKG1hbmFn
ZXIsIHJwSWQpKTsKIH0KIAotV2ViQXV0aGVudGljYXRpb25QYW5lbDo6V2ViQXV0aGVudGljYXRp
b25QYW5lbChjb25zdCBBdXRoZW50aWNhdG9yTWFuYWdlciYgbWFuYWdlciwgY29uc3QgU3RyaW5n
JiBycElkKQorV2ViQXV0aGVudGljYXRpb25QYW5lbDo6V2ViQXV0aGVudGljYXRpb25QYW5lbChj
b25zdCBBdXRoZW50aWNhdG9yTWFuYWdlciYgbWFuYWdlciwgY29uc3QgV1RGOjpTdHJpbmcmIHJw
SWQpCiAgICAgOiBtX21hbmFnZXIobWFrZVdlYWtQdHIobWFuYWdlcikpCiAgICAgLCBtX3JwSWQo
cnBJZCkKICAgICAsIG1fY2xpZW50KFdURjo6bWFrZVVuaXF1ZVJlZjxXZWJBdXRoZW50aWNhdGlv
blBhbmVsQ2xpZW50PigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmgKaW5kZXggNzhlN2VlOTU2OGZiYzEwMjNmMGFm
ODFkMWY3YTNhMmViY2Y2ZTM2Yi4uYzNmNDAzZjhjNmNjMjMzYzFjNjJlZmY4OWIxYWVkN2I3MDZm
NjdkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhl
bnRpY2F0aW9uUGFuZWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2Vi
QXV0aGVudGljYXRpb25QYW5lbC5oCkBAIC00Miw3ICs0Miw3IEBAIGNsYXNzIFdlYkF1dGhlbnRp
Y2F0aW9uUGFuZWxDbGllbnQ7CiAKIGNsYXNzIFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwgZmluYWwg
OiBwdWJsaWMgT2JqZWN0SW1wbDxPYmplY3Q6OlR5cGU6OldlYkF1dGhlbnRpY2F0aW9uUGFuZWw+
LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8V2ViQXV0aGVudGljYXRpb25QYW5lbD4gewogcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8V2ViQXV0aGVudGljYXRpb25QYW5lbD4gY3JlYXRlKGNvbnN0IFdl
YktpdDo6QXV0aGVudGljYXRvck1hbmFnZXImLCBjb25zdCBTdHJpbmcmIHJwSWQpOworICAgIHN0
YXRpYyBSZWY8V2ViQXV0aGVudGljYXRpb25QYW5lbD4gY3JlYXRlKGNvbnN0IFdlYktpdDo6QXV0
aGVudGljYXRvck1hbmFnZXImLCBjb25zdCBXVEY6OlN0cmluZyYgcnBJZCk7CiAgICAgfldlYkF1
dGhlbnRpY2F0aW9uUGFuZWwoKTsKIAogICAgIFdURjo6U3RyaW5nIHJwSWQoKSBjb25zdCB7IHJl
dHVybiBtX3JwSWQ7IH0KQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q2xp
ZW50KFVuaXF1ZVJlZjxXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50PiYmKTsKIAogcHJpdmF0
ZToKLSAgICBXZWJBdXRoZW50aWNhdGlvblBhbmVsKGNvbnN0IFdlYktpdDo6QXV0aGVudGljYXRv
ck1hbmFnZXImLCBjb25zdCBTdHJpbmcmIHJwSWQpOworICAgIFdlYkF1dGhlbnRpY2F0aW9uUGFu
ZWwoY29uc3QgV2ViS2l0OjpBdXRoZW50aWNhdG9yTWFuYWdlciYsIGNvbnN0IFdURjo6U3RyaW5n
JiBycElkKTsKIAogICAgIFdlYWtQdHI8V2ViS2l0OjpBdXRoZW50aWNhdG9yTWFuYWdlcj4gbV9t
YW5hZ2VyOwogICAgIFdURjo6U3RyaW5nIG1fcnBJZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0luc3BlY3RvclRhcmdldFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3RvclRhcmdldFByb3h5LmNwcAppbmRleCA2MWI4ZjM2ZWZhNzUxZjFjODhk
OTJiYTFhZGNkMTVlY2E2MTQ1ODIyLi4xYjM3YzFlZDQzOTVhMTdjNTgzYmEyZDc4NjIxOWM5MGM3
NDQwMTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3JUYXJn
ZXRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yVGFyZ2V0
UHJveHkuY3BwCkBAIC0yNiw3ICsyNiw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yVGFyZ2V0UHJveHkuaCIKIAorI2luY2x1ZGUgIlByb3Zpc2lvbmFsUGFnZVBy
b3h5LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVQcm94eS5oIgorI2luY2x1ZGUgIldlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXQuaCIKICNpbmNsdWRlICJXZWJQYWdlTWVzc2FnZXMuaCIKICNpbmNsdWRlICJX
ZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKQEAgLTM1LDkgKzM3
LDE2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwog
Ci1SZWY8SW5zcGVjdG9yVGFyZ2V0UHJveHk+IEluc3BlY3RvclRhcmdldFByb3h5OjpjcmVhdGUo
V2ViUGFnZVByb3h5JiBwYWdlLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Oklu
c3BlY3RvclRhcmdldFR5cGUgdHlwZSkKK3N0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQ
cm94eT4gSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmIHBhZ2UsIGNv
bnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBl
KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluc3BlY3RvclRhcmdldFByb3h5KHBhZ2Us
IHRhcmdldElkLCB0eXBlKSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8SW5zcGVjdG9yVGFyZ2V0
UHJveHk+KHBhZ2UsIHRhcmdldElkLCB0eXBlKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEluc3Bl
Y3RvclRhcmdldFByb3h5PiBJbnNwZWN0b3JUYXJnZXRQcm94eTo6Y3JlYXRlKFByb3Zpc2lvbmFs
UGFnZVByb3h5JiBwcm92aXNpb25hbFBhZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQoreworICAgIGF1dG8gdGFyZ2V0ID0gSW5z
cGVjdG9yVGFyZ2V0UHJveHk6OmNyZWF0ZShwcm92aXNpb25hbFBhZ2UucGFnZSgpLCB0YXJnZXRJ
ZCwgdHlwZSk7CisgICAgdGFyZ2V0LT5tX3Byb3Zpc2lvbmFsUGFnZSA9IG1ha2VXZWFrUHRyKHBy
b3Zpc2lvbmFsUGFnZSk7CisgICAgcmV0dXJuIHRhcmdldDsKIH0KIAogSW5zcGVjdG9yVGFyZ2V0
UHJveHk6Okluc3BlY3RvclRhcmdldFByb3h5KFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgU3Ry
aW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUpCkBAIC00
NywyMiArNTYsNDggQEAgSW5zcGVjdG9yVGFyZ2V0UHJveHk6Okluc3BlY3RvclRhcmdldFByb3h5
KFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgU3RyaW5nJiB0YXIKIHsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JUYXJnZXRQcm94eTo6Y29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYgY2hh
bm5lbCkKK3ZvaWQgSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNvbm5lY3QoSW5zcGVjdG9yOjpGcm9u
dGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlIGNvbm5lY3Rpb25UeXBlKQogeworICAgIGlmICht
X3Byb3Zpc2lvbmFsUGFnZSkgeworICAgICAgICBtX3Byb3Zpc2lvbmFsUGFnZS0+cHJvY2Vzcygp
LnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNvbm5lY3RJbnNwZWN0b3IoaWRlbnRpZmllcigpLCBj
b25uZWN0aW9uVHlwZSksIG1fcHJvdmlzaW9uYWxQYWdlLT53ZWJQYWdlSUQoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKICAgICBpZiAobV9wYWdlLmhhc1J1bm5pbmdQcm9jZXNzKCkpCi0g
ICAgICAgIG1fcGFnZS5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q29ubmVjdElu
c3BlY3RvcihpZGVudGlmaWVyKCksIGNoYW5uZWwuY29ubmVjdGlvblR5cGUoKSksIG1fcGFnZS53
ZWJQYWdlSUQoKSk7CisgICAgICAgIG1fcGFnZS5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6Q29ubmVjdEluc3BlY3RvcihpZGVudGlmaWVyKCksIGNvbm5lY3Rpb25UeXBlKSwgbV9w
YWdlLndlYlBhZ2VJRCgpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUYXJnZXRQcm94eTo6ZGlzY29u
bmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYpCit2b2lkIEluc3BlY3RvclRhcmdldFBy
b3h5OjpkaXNjb25uZWN0KCkKIHsKKyAgICBpZiAobV9wcm92aXNpb25hbFBhZ2UpIHsKKyAgICAg
ICAgbV9wcm92aXNpb25hbFBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpE
aXNjb25uZWN0SW5zcGVjdG9yKGlkZW50aWZpZXIoKSksIG1fcHJvdmlzaW9uYWxQYWdlLT53ZWJQ
YWdlSUQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAobV9wYWdlLmhhc1J1
bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIG1fcGFnZS5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6RGlzY29ubmVjdEluc3BlY3RvcihpZGVudGlmaWVyKCkpLCBtX3BhZ2Uud2ViUGFn
ZUlEKCkpOwogfQogCiB2b2lkIEluc3BlY3RvclRhcmdldFByb3h5OjpzZW5kTWVzc2FnZVRvVGFy
Z2V0QmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7CisgICAgaWYgKG1fcHJvdmlzaW9u
YWxQYWdlKSB7CisgICAgICAgIG1fcHJvdmlzaW9uYWxQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6U2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoaWRlbnRpZmllcigpLCBt
ZXNzYWdlKSwgbV9wcm92aXNpb25hbFBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKwogICAgIGlmIChtX3BhZ2UuaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAg
bV9wYWdlLnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZW5kTWVzc2FnZVRvVGFy
Z2V0QmFja2VuZChpZGVudGlmaWVyKCksIG1lc3NhZ2UpLCBtX3BhZ2Uud2ViUGFnZUlEKCkpOwog
fQogCit2b2lkIEluc3BlY3RvclRhcmdldFByb3h5OjpkaWRDb21taXRQcm92aXNpb25hbFRhcmdl
dCgpCit7CisgICAgQVNTRVJUKGlzUHJvdmlzaW9uYWwoKSk7CisgICAgbV9wcm92aXNpb25hbFBh
Z2UgPSBudWxscHRyOworfQorCitib29sIEluc3BlY3RvclRhcmdldFByb3h5Ojppc1Byb3Zpc2lv
bmFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gISFtX3Byb3Zpc2lvbmFsUGFnZTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3JUYXJnZXRQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
VGFyZ2V0UHJveHkuaAppbmRleCBkMzgyYjAyNjUwOWM4Mzk1MTk5YWJkZDQ5NWFmNmEyYTUxYWY5
MjdjLi5kYzMwYTA2YjJiOTA1ODE2YzBlMGMwZTg2MzU2Mzk1NzUzZTY1Y2E1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3JUYXJnZXRQcm94eS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3RvclRhcmdldFByb3h5LmgKQEAgLTI3LDYgKzI3
LDcgQEAKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclRhcmdldC5oPgogI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCkBAIC0zNSwyNSArMzYsMzAgQEAgY2xhc3MgV2ViUGFnZVByb3h5
OwogLy8gTk9URTogVGhpcyBVSVByb2Nlc3Mgc2lkZSBJbnNwZWN0b3JUYXJnZXQgZG9lc24ndCBj
YXJlIGFib3V0IHRoZSBmcm9udGVuZCBjaGFubmVsLCBzaW5jZQogLy8gYW55IHRhcmdldCAtPiBm
cm9udGVuZCBtZXNzYWdlcyB3aWxsIGJlIHJvdXRlZCB0byB0aGUgV2ViUGFnZVByb3h5IHdpdGgg
YSB0YXJnZXRJZC4KIAotY2xhc3MgSW5zcGVjdG9yVGFyZ2V0UHJveHkgZmluYWwgOiBwdWJsaWMg
SW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXQsIHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvclRh
cmdldFByb3h5PiB7CitjbGFzcyBJbnNwZWN0b3JUYXJnZXRQcm94eSBmaW5hbCA6IHB1YmxpYyBJ
bnNwZWN0b3I6Okluc3BlY3RvclRhcmdldCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yVGFyZ2V0UHJveHkpOwogcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yVGFyZ2V0UHJveHk+IGNyZWF0ZShXZWJQYWdlUHJv
eHkmLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5
cGUpOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJveHk+IGNy
ZWF0ZShXZWJQYWdlUHJveHkmLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Oklu
c3BlY3RvclRhcmdldFR5cGUpOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9y
VGFyZ2V0UHJveHk+IGNyZWF0ZShQcm92aXNpb25hbFBhZ2VQcm94eSYsIGNvbnN0IFN0cmluZyYg
dGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSk7CiAgICAgSW5zcGVjdG9y
VGFyZ2V0UHJveHkoV2ViUGFnZVByb3h5JiwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVj
dG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlKTsKICAgICB+SW5zcGVjdG9yVGFyZ2V0UHJveHkoKSA9
IGRlZmF1bHQ7CiAKICAgICBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUgdHlwZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIFN0cmluZyBpZGVudGlmaWVyKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CiAKLSAgICB2b2lkIGNvbm5lY3QoSW5z
cGVjdG9yOjpGcm9udGVuZENoYW5uZWwmKTsKLSAgICB2b2lkIGRpc2Nvbm5lY3QoSW5zcGVjdG9y
OjpGcm9udGVuZENoYW5uZWwmKTsKLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5k
KGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQoKTsK
KyAgICBib29sIGlzUHJvdmlzaW9uYWwoKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZvaWQgY29u
bmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUpIG92ZXJyaWRl
OworICAgIHZvaWQgZGlzY29ubmVjdCgpIG92ZXJyaWRlOworICAgIHZvaWQgc2VuZE1lc3NhZ2VU
b1RhcmdldEJhY2tlbmQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAg
V2ViUGFnZVByb3h5JiBtX3BhZ2U7CiAgICAgU3RyaW5nIG1faWRlbnRpZmllcjsKICAgICBJbnNw
ZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUgbV90eXBlOworICAgIFdlYWtQdHI8UHJvdmlzaW9u
YWxQYWdlUHJveHk+IG1fcHJvdmlzaW9uYWxQYWdlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5j
cHAKaW5kZXggOGIwYjQzMGM0MWZlYWE1OWU0ZDA1MmZiMmQ3NTJmMmIyNGNlYjIwYi4uOGNjZWIw
OWZkMmE4MzMzNzFhYzc1Y2U0MGFlMjRiMTYwZmZkYjYzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5LmNwcApAQCAtMzgsNiArMzgsNyBAQAog
I2luY2x1ZGUgIldlYkVycm9ycy5oIgogI2luY2x1ZGUgIldlYk5hdmlnYXRpb25EYXRhU3RvcmUu
aCIKICNpbmNsdWRlICJXZWJOYXZpZ2F0aW9uU3RhdGUuaCIKKyNpbmNsdWRlICJXZWJQYWdlSW5z
cGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIldlYlBhZ2VNZXNzYWdlcy5oIgogI2luY2x1
ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCkBA
IC04NSwxMSArODYsMTUgQEAgUHJvdmlzaW9uYWxQYWdlUHJveHk6OlByb3Zpc2lvbmFsUGFnZVBy
b3h5KFdlYlBhZ2VQcm94eSYgcGFnZSwgUmVmPFdlYlByb2Nlc3NQcm8KICAgICB9CiAKICAgICBp
bml0aWFsaXplV2ViUGFnZSgpOworCisgICAgbV9wYWdlLmluc3BlY3RvckNvbnRyb2xsZXIoKS5k
aWRDcmVhdGVQcm92aXNpb25hbFBhZ2UoKnRoaXMpOwogfQogCiBQcm92aXNpb25hbFBhZ2VQcm94
eTo6flByb3Zpc2lvbmFsUGFnZVByb3h5KCkKIHsKICAgICBpZiAoIW1fd2FzQ29tbWl0dGVkKSB7
CisgICAgICAgIG1fcGFnZS5pbnNwZWN0b3JDb250cm9sbGVyKCkud2lsbERlc3Ryb3lQcm92aXNp
b25hbFBhZ2UoKnRoaXMpOworCiAgICAgICAgIGlmICgmbV9wcm9jZXNzLT53ZWJzaXRlRGF0YVN0
b3JlKCkgIT0gJm1fcGFnZS53ZWJzaXRlRGF0YVN0b3JlKCkpCiAgICAgICAgICAgICBtX3Byb2Nl
c3MtPnByb2Nlc3NQb29sKCkucGFnZUVuZFVzaW5nV2Vic2l0ZURhdGFTdG9yZShtX3BhZ2UuaWRl
bnRpZmllcigpLCBtX3Byb2Nlc3MtPndlYnNpdGVEYXRhU3RvcmUoKSk7CiAKQEAgLTM4Nyw2ICsz
OTIsOSBAQCB2b2lkIFByb3Zpc2lvbmFsUGFnZVByb3h5OjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RAogICAgICAgICB8fCBkZWNvZGVyLm1lc3Nh
Z2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkU3RhcnRMb2FkRm9yUXVpY2tM
b29rRG9jdW1lbnRJbk1haW5GcmFtZTo6bmFtZSgpCiAgICAgICAgIHx8IGRlY29kZXIubWVzc2Fn
ZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaW5pc2hMb2FkRm9yUXVpY2tM
b29rRG9jdW1lbnRJbk1haW5GcmFtZTo6bmFtZSgpCiAjZW5kaWYKKyAgICAgICAgfHwgZGVjb2Rl
ci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNyZWF0ZUluc3BlY3Rv
clRhcmdldDo6bmFtZSgpCisgICAgICAgIHx8IGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpEZXN0cm95SW5zcGVjdG9yVGFyZ2V0OjpuYW1lKCkKKyAgICAg
ICAgfHwgZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNl
bmRNZXNzYWdlVG9JbnNwZWN0b3JGcm9udGVuZDo6bmFtZSgpCiAgICAgICAgICkKICAgICB7CiAg
ICAgICAgIG1fcGFnZS5kaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5Lmgg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5oCmluZGV4IDZk
OTM3OWM2MmUwYjdmMjUxMDI4ODI0MTE3YzBmODQzNmI4NDYwZGUuLjYzNGZiNzVlODczOGUxNGU0
MjdkOTc4YmM4ZGVmZjY0NTEyZjFlZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
UHJvdmlzaW9uYWxQYWdlUHJveHkuaApAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgUHJv
dmlzaW9uYWxQYWdlUHJveHkoV2ViUGFnZVByb3h5JiwgUmVmPFdlYlByb2Nlc3NQcm94eT4mJiwg
c3RkOjp1bmlxdWVfcHRyPFN1c3BlbmRlZFBhZ2VQcm94eT4sIHVpbnQ2NF90IG5hdmlnYXRpb25J
RCwgYm9vbCBpc1NlcnZlclJlZGlyZWN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
LCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50KTsKICAgICB+UHJvdmlzaW9uYWxQYWdlUHJv
eHkoKTsKIAotICAgIFdlYlBhZ2VQcm94eSYgcGFnZSgpIHsgcmV0dXJuIG1fcGFnZTsgfQorICAg
IFdlYlBhZ2VQcm94eSYgcGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZTsgfQogICAgIFdlYkNv
cmU6OlBhZ2VJZGVudGlmaWVyIHdlYlBhZ2VJRCgpIGNvbnN0IHsgcmV0dXJuIG1fd2ViUGFnZUlE
OyB9CiAgICAgV2ViRnJhbWVQcm94eSogbWFpbkZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9tYWlu
RnJhbWUuZ2V0KCk7IH0KICAgICBXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MoKSB7IHJldHVybiBt
X3Byb2Nlc3MuZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCBiZGE1OWNkODA1MTU3NjQ2YjMwOGQy
ZmQyMzZmM2QxMTgyNzFlMGI2Li5iOWE5NDY5YWI1OTEzNmY5ZTlhMzczNmJmZGIwZTlkNTI5YzBm
YmNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9y
Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZUluc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwCkBAIC0yNiwzMCArMjYsNDQgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oIgogCisjaW5jbHVkZSAi
UHJvdmlzaW9uYWxQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCi0jaW5j
bHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50LmgiCisjaW5jbHVkZSAiV2ViUGFnZUlu
c3BlY3RvclRhcmdldC5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckFnZW50QmFzZS5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JUYXJnZXRBZ2VudC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogCiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCitzdGF0aWMgU3Ry
aW5nIGdldFRhcmdldElEKGNvbnN0IFByb3Zpc2lvbmFsUGFnZVByb3h5JiBwcm92aXNpb25hbFBh
Z2UpCit7CisgICAgcmV0dXJuIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OnRvVGFyZ2V0SUQocHJv
dmlzaW9uYWxQYWdlLndlYlBhZ2VJRCgpKTsKK30KKwogV2ViUGFnZUluc3BlY3RvckNvbnRyb2xs
ZXI6OldlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyKFdlYlBhZ2VQcm94eSYgcGFnZSkKICAgICA6
IG1fcGFnZShwYWdlKQogICAgICwgbV9mcm9udGVuZFJvdXRlcihGcm9udGVuZFJvdXRlcjo6Y3Jl
YXRlKCkpCiAgICAgLCBtX2JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyOjpjcmVh
dGUobV9mcm9udGVuZFJvdXRlci5jb3B5UmVmKCkpKQogewotICAgIGF1dG8gdGFyZ2V0QWdlbnQg
PSBtYWtlVW5pcXVlPFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRBZ2VudD4obV9mcm9udGVuZFJvdXRl
ci5nZXQoKSwgbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKSk7CisgICAgYXV0byB0YXJnZXRBZ2Vu
dCA9IG1ha2VVbmlxdWU8SW5zcGVjdG9yVGFyZ2V0QWdlbnQ+KG1fZnJvbnRlbmRSb3V0ZXIuZ2V0
KCksIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCkpOwogCiAgICAgbV90YXJnZXRBZ2VudCA9IHRh
cmdldEFnZW50LmdldCgpOwogCiAgICAgbV9hZ2VudHMuYXBwZW5kKFdURk1vdmUodGFyZ2V0QWdl
bnQpKTsKIH0KIAordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5pdCgpCit7Cisg
ICAgU3RyaW5nIHBhZ2VUYXJnZXRJZCA9IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OnRvVGFyZ2V0
SUQobV9wYWdlLndlYlBhZ2VJRCgpKTsKKyAgICBjcmVhdGVJbnNwZWN0b3JUYXJnZXQocGFnZVRh
cmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGU6OlBhZ2UpOworfQorCiB2b2lk
IFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpwYWdlQ2xvc2VkKCkKIHsKICAgICBkaXNjb25u
ZWN0QWxsRnJvbnRlbmRzKCk7CkBAIC0xMzQsMzcgKzE0OCw1NyBAQCB2b2lkIFdlYlBhZ2VJbnNw
ZWN0b3JDb250cm9sbGVyOjpzZXRJbmRpY2F0aW5nKGJvb2wgaW5kaWNhdGluZykKIH0KICNlbmRp
ZgogCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpjbGVhclRhcmdldHMoKQordm9p
ZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6Y3JlYXRlSW5zcGVjdG9yVGFyZ2V0KGNvbnN0
IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQog
ewotICAgIGZvciAoYXV0byYgdGFyZ2V0IDogbV90YXJnZXRzKQotICAgICAgICBtX3RhcmdldEFn
ZW50LT50YXJnZXREZXN0cm95ZWQoKnRhcmdldC5nZXQoKSk7Ci0KLSAgICBtX3RhcmdldHMuY2xl
YXIoKTsKKyAgICBhZGRUYXJnZXQoSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNyZWF0ZShtX3BhZ2Us
IHRhcmdldElkLCB0eXBlKSk7CiB9CiAKLXZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6
OmNyZWF0ZUluc3BlY3RvclRhcmdldChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6
Okluc3BlY3RvclRhcmdldFR5cGUgdHlwZSkKK3ZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xs
ZXI6OmRlc3Ryb3lJbnNwZWN0b3JUYXJnZXQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCkKIHsKLSAg
ICBhdXRvIHRhcmdldCA9IEluc3BlY3RvclRhcmdldFByb3h5OjpjcmVhdGUobV9wYWdlLCB0YXJn
ZXRJZCwgdHlwZSk7Ci0gICAgbV90YXJnZXRzLmFwcGVuZCh0YXJnZXQuY29weVJlZigpKTsKKyAg
ICBhdXRvIGl0ID0gbV90YXJnZXRzLmZpbmQodGFyZ2V0SWQpOworICAgIGlmIChpdCA9PSBtX3Rh
cmdldHMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX3RhcmdldEFnZW50LT50YXJnZXRE
ZXN0cm95ZWQoKml0LT52YWx1ZSk7CisgICAgbV90YXJnZXRzLnJlbW92ZShpdCk7Cit9CiAKLSAg
ICBtX3RhcmdldEFnZW50LT50YXJnZXRDcmVhdGVkKHRhcmdldC5nZXQoKSk7Cit2b2lkIFdlYlBh
Z2VJbnNwZWN0b3JDb250cm9sbGVyOjpzZW5kTWVzc2FnZVRvSW5zcGVjdG9yRnJvbnRlbmQoY29u
c3QgU3RyaW5nJiB0YXJnZXRJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIG1fdGFy
Z2V0QWdlbnQtPnNlbmRNZXNzYWdlRnJvbVRhcmdldFRvRnJvbnRlbmQodGFyZ2V0SWQsIG1lc3Nh
Z2UpOwogfQogCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpkZXN0cm95SW5zcGVj
dG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JD
b250cm9sbGVyOjpkaWRDcmVhdGVQcm92aXNpb25hbFBhZ2UoUHJvdmlzaW9uYWxQYWdlUHJveHkm
IHByb3Zpc2lvbmFsUGFnZSkKIHsKLSAgICBhdXRvIHBvc2l0aW9uID0gbV90YXJnZXRzLmZpbmRN
YXRjaGluZyhbJl0oY29uc3QgYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS0+aWRlbnRpZmllcigp
ID09IHRhcmdldElkOyB9KTsKLSAgICBpZiAocG9zaXRpb24gPT0gbm90Rm91bmQpCi0gICAgICAg
IHJldHVybjsKKyAgICBhZGRUYXJnZXQoSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNyZWF0ZShwcm92
aXNpb25hbFBhZ2UsIGdldFRhcmdldElEKHByb3Zpc2lvbmFsUGFnZSksIEluc3BlY3Rvcjo6SW5z
cGVjdG9yVGFyZ2V0VHlwZTo6UGFnZSkpOworfQogCi0gICAgYXV0byYgdGFyZ2V0ID0gbV90YXJn
ZXRzW3Bvc2l0aW9uXTsKLSAgICBtX3RhcmdldEFnZW50LT50YXJnZXREZXN0cm95ZWQoKnRhcmdl
dC5nZXQoKSk7Cit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsRGVzdHJveVBy
b3Zpc2lvbmFsUGFnZShjb25zdCBQcm92aXNpb25hbFBhZ2VQcm94eSYgcHJvdmlzaW9uYWxQYWdl
KQoreworICAgIGRlc3Ryb3lJbnNwZWN0b3JUYXJnZXQoZ2V0VGFyZ2V0SUQocHJvdmlzaW9uYWxQ
YWdlKSk7Cit9CiAKLSAgICBtX3RhcmdldHMucmVtb3ZlKHBvc2l0aW9uKTsKK3ZvaWQgV2ViUGFn
ZUluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdFByb3Zpc2lvbmFsUGFnZShXZWJDb3JlOjpQ
YWdlSWRlbnRpZmllciBvbGRXZWJQYWdlSUQsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIG5ld1dl
YlBhZ2VJRCkKK3sKKyAgICBTdHJpbmcgb2xkSUQgPSBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojp0
b1RhcmdldElEKG9sZFdlYlBhZ2VJRCk7CisgICAgU3RyaW5nIG5ld0lEID0gV2ViUGFnZUluc3Bl
Y3RvclRhcmdldDo6dG9UYXJnZXRJRChuZXdXZWJQYWdlSUQpOworICAgIGF1dG8gbmV3VGFyZ2V0
ID0gbV90YXJnZXRzLnRha2UobmV3SUQpOworICAgIEFTU0VSVChuZXdUYXJnZXQpOworICAgIG5l
d1RhcmdldC0+ZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQoKTsKKyAgICBtX3RhcmdldEFnZW50
LT5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldChvbGRJRCwgbmV3SUQpOworCisgICAgLy8gV2Un
dmUgZGlzY29ubmVjdGVkIGZyb20gdGhlIG9sZCBwYWdlIGFuZCB3aWxsIG5vdCByZWNlaXZlIGFu
eSBtZXNzYWdlIGZyb20gaXQsIHNvCisgICAgLy8gd2UgZGVzdHJveSBldmVyeXRoaW5nIGJ1dCB0
aGUgbmV3IHRhcmdldCBoZXJlLgorICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2Iv
MjAyOTM3PiBkbyBub3QgZGVzdHJveSB0YXJnZXRzIHRoYXQgYmVsb25nIHRvIHRoZSBjb21taXR0
ZWQgcGFnZS4KKyAgICBmb3IgKGF1dG8mIHRhcmdldCA6IG1fdGFyZ2V0cy52YWx1ZXMoKSkKKyAg
ICAgICAgbV90YXJnZXRBZ2VudC0+dGFyZ2V0RGVzdHJveWVkKCp0YXJnZXQpOworICAgIG1fdGFy
Z2V0cy5jbGVhcigpOworICAgIG1fdGFyZ2V0cy5zZXQobmV3VGFyZ2V0LT5pZGVudGlmaWVyKCks
IFdURk1vdmUobmV3VGFyZ2V0KSk7CiB9CiAKLXZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xs
ZXI6OnNlbmRNZXNzYWdlVG9JbnNwZWN0b3JGcm9udGVuZChjb25zdCBTdHJpbmcmIHRhcmdldElk
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVy
OjphZGRUYXJnZXQoc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvclRhcmdldFByb3h5PiYmIHRhcmdl
dCkKIHsKLSAgICBtX3RhcmdldEFnZW50LT5zZW5kTWVzc2FnZUZyb21UYXJnZXRUb0Zyb250ZW5k
KHRhcmdldElkLCBtZXNzYWdlKTsKKyAgICBtX3RhcmdldEFnZW50LT50YXJnZXRDcmVhdGVkKCp0
YXJnZXQpOworICAgIG1fdGFyZ2V0cy5zZXQodGFyZ2V0LT5pZGVudGlmaWVyKCksIFdURk1vdmUo
dGFyZ2V0KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggMGNhZjZh
MWMyNzkyMDQzZDNiZTA1NzFhMjhmZGIxZTE0MTk3YTYxMS4uYTcwZGNlNzViZGVlMDdjMjMyYjhi
YTM1ZGZjYzA4ZDE2MWI2MDcxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC00Niw2ICs0Niw3IEBAIGNsYXNzIFdl
YlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyIHsKIHB1YmxpYzoKICAgICBXZWJQYWdlSW5zcGVjdG9y
Q29udHJvbGxlcihXZWJQYWdlUHJveHkmKTsKIAorICAgIHZvaWQgaW5pdCgpOwogICAgIHZvaWQg
cGFnZUNsb3NlZCgpOwogCiAgICAgYm9vbCBoYXNMb2NhbEZyb250ZW5kKCkgY29uc3Q7CkBAIC02
MCwxOCArNjEsMjMgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SW5kaWNhdGluZyhib29sKTsKICNl
bmRpZgogCi0gICAgdm9pZCBjbGVhclRhcmdldHMoKTsKICAgICB2b2lkIGNyZWF0ZUluc3BlY3Rv
clRhcmdldChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdl
dFR5cGUpOwogICAgIHZvaWQgZGVzdHJveUluc3BlY3RvclRhcmdldChjb25zdCBTdHJpbmcmIHRh
cmdldElkKTsKICAgICB2b2lkIHNlbmRNZXNzYWdlVG9JbnNwZWN0b3JGcm9udGVuZChjb25zdCBT
dHJpbmcmIHRhcmdldElkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwogCisgICAgdm9pZCBkaWRD
cmVhdGVQcm92aXNpb25hbFBhZ2UoUHJvdmlzaW9uYWxQYWdlUHJveHkmKTsKKyAgICB2b2lkIHdp
bGxEZXN0cm95UHJvdmlzaW9uYWxQYWdlKGNvbnN0IFByb3Zpc2lvbmFsUGFnZVByb3h5Jik7Cisg
ICAgdm9pZCBkaWRDb21taXRQcm92aXNpb25hbFBhZ2UoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIg
b2xkV2ViUGFnZUlELCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBuZXdXZWJQYWdlSUQpOworCiBw
cml2YXRlOgorICAgIHZvaWQgYWRkVGFyZ2V0KHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JUYXJn
ZXRQcm94eT4mJik7CisKICAgICBXZWJQYWdlUHJveHkmIG1fcGFnZTsKICAgICBSZWY8SW5zcGVj
dG9yOjpGcm9udGVuZFJvdXRlcj4gbV9mcm9udGVuZFJvdXRlcjsKICAgICBSZWY8SW5zcGVjdG9y
OjpCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKICAgICBJbnNwZWN0b3I6
OkFnZW50UmVnaXN0cnkgbV9hZ2VudHM7CiAgICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRB
Z2VudCogbV90YXJnZXRBZ2VudDsKLSAgICBWZWN0b3I8UmVmUHRyPEluc3BlY3RvclRhcmdldFBy
b3h5Pj4gbV90YXJnZXRzOworICAgIEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8SW5z
cGVjdG9yVGFyZ2V0UHJveHk+PiBtX3RhcmdldHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JU
YXJnZXRBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0QWdlbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTAwMWMwOGQw
MmY3ZWQ2YzAwODU2NmY3YWY4OWEzODFjZGVkMjE1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXRBZ2VudC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRBZ2VudC5oIgotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50OjpXZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0QWdlbnQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIs
IEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyKQotICAgIDog
SW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRBZ2VudChmcm9udGVuZFJvdXRlciwgYmFja2VuZERp
c3BhdGNoZXIpCi0gICAgLCBtX3JvdXRlcihmcm9udGVuZFJvdXRlcikKLXsKLX0KLQotV2ViUGFn
ZUluc3BlY3RvclRhcmdldEFnZW50Ojp+V2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50KCkgPSBk
ZWZhdWx0OwotCi1JbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYgV2ViUGFnZUluc3BlY3RvclRh
cmdldEFnZW50Ojpmcm9udGVuZENoYW5uZWwoKQotewotICAgIHJldHVybiAqdGhpczsKLX0KLQot
SW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlIFdlYlBhZ2VJbnNwZWN0
b3JUYXJnZXRBZ2VudDo6Y29ubmVjdGlvblR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBtX3Jv
dXRlci5oYXNMb2NhbEZyb250ZW5kKCkgPyBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29u
bmVjdGlvblR5cGU6OkxvY2FsIDogSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rp
b25UeXBlOjpSZW1vdGU7Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50Ojpz
ZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJikKLXsKLSAgICAvLyBJbnRlbnRpb25h
bGx5IGlnbm9yZWQsIHRoaXMgY2hhbm5lbCBpcyBub3QgYWN0dWFsbHkgdXNlZCB0byBzZW5kIG1l
c3NhZ2VzLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0
b3JUYXJnZXRBZ2VudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZUluc3BlY3Rv
clRhcmdldEFnZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2M2Y5YzNjY2Nl
YTU0ODdhNGNlMjkzZWM1ZTA4M2E4Y2M4YjUxNTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZUluc3Bl
Y3RvclRhcmdldEFnZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oPgotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50IGZpbmFsIDogcHVi
bGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0QWdlbnQsIHB1YmxpYyBJbnNwZWN0b3I6OkZy
b250ZW5kQ2hhbm5lbCB7Ci1wdWJsaWM6Ci0gICAgV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50
KEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXImLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVy
Jik7Ci0gICAgdmlydHVhbCB+V2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50KCk7Ci0KLSAgICAv
LyBJbnNwZWN0b3JUYXJnZXRBZ2VudAotICAgIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJiBm
cm9udGVuZENoYW5uZWwoKTsKLQotICAgIC8vIEZyb250ZW5kQ2hhbm5lbAotICAgIEluc3BlY3Rv
cjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSgpIGNvbnN0
OwotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYpOwotCi1wcml2
YXRlOgotICAgIEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXImIG1fcm91dGVyOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cAppbmRleCAzNWY0OWZmMmJjOWM2NzIyNTE3MDQ4NWM5N2QzYzljNzBkMjgwMWY2Li4zYmRmMmUz
ODgzNzMyYTczN2Q3YzJkM2QyZjRhNjNiOTMzM2VmODg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTQ5Miw4ICs0OTIsNyBAQCBXZWJQYWdlUHJveHk6Oldl
YlBhZ2VQcm94eShQYWdlQ2xpZW50JiBwYWdlQ2xpZW50LCBXZWJQcm9jZXNzUHJveHkmIHByb2Nl
c3MsIFJlZgogICAgIG1faW5zcGVjdG9yRGVidWdnYWJsZS0+c2V0UmVtb3RlRGVidWdnaW5nQWxs
b3dlZCh0cnVlKTsKICAgICBtX2luc3BlY3RvckRlYnVnZ2FibGUtPmluaXQoKTsKICNlbmRpZgot
Ci0gICAgY3JlYXRlSW5zcGVjdG9yVGFyZ2V0cygpOworICAgIG1faW5zcGVjdG9yQ29udHJvbGxl
ci0+aW5pdCgpOwogfQogCiBXZWJQYWdlUHJveHk6On5XZWJQYWdlUHJveHkoKQpAQCAtODYyLDkg
Kzg2MSw2IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpmaW5pc2hBdHRhY2hpbmdUb1dlYlByb2Nlc3Mo
UHJvY2Vzc0xhdW5jaFJlYXNvbiByZWFzb24pCiAgICAgcmVtb3RlSW5zcGVjdG9ySW5mb3JtYXRp
b25EaWRDaGFuZ2UoKTsKICNlbmRpZgogCi0gICAgY2xlYXJJbnNwZWN0b3JUYXJnZXRzKCk7Ci0g
ICAgY3JlYXRlSW5zcGVjdG9yVGFyZ2V0cygpOwotCiAgICAgcGFnZUNsaWVudCgpLmRpZFJlbGF1
bmNoUHJvY2VzcygpOwogICAgIG1fcGFnZUxvYWRTdGF0ZS5kaWRTd2FwV2ViUHJvY2Vzc2VzKCk7
CiAgICAgaWYgKHJlYXNvbiAhPSBQcm9jZXNzTGF1bmNoUmVhc29uOjpJbml0aWFsUHJvY2VzcykK
QEAgLTE2NjcsMTcgKzE2NjMsNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVtb3RlSW5zcGVjdG9y
SW5mb3JtYXRpb25EaWRDaGFuZ2UoKQogfQogI2VuZGlmCiAKLXZvaWQgV2ViUGFnZVByb3h5Ojpj
bGVhckluc3BlY3RvclRhcmdldHMoKQotewotICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+Y2xl
YXJUYXJnZXRzKCk7Ci19Ci0KLXZvaWQgV2ViUGFnZVByb3h5OjpjcmVhdGVJbnNwZWN0b3JUYXJn
ZXRzKCkKLXsKLSAgICBTdHJpbmcgcGFnZVRhcmdldElkID0gbWFrZVN0cmluZygicGFnZS0iLCBt
X3dlYlBhZ2VJRC50b1VJbnQ2NCgpKTsKLSAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmNyZWF0
ZUluc3BlY3RvclRhcmdldChwYWdlVGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0
VHlwZTo6UGFnZSk7Ci19Ci0KIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRCYWNrZ3JvdW5kQ29sb3Io
Y29uc3QgT3B0aW9uYWw8Q29sb3I+JiBjb2xvcikKIHsKICAgICBpZiAobV9iYWNrZ3JvdW5kQ29s
b3IgPT0gY29sb3IpCkBAIC0zMDQxLDYgKzMwMjYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Y29t
bWl0UHJvdmlzaW9uYWxQYWdlKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCB1aW50NjRfdCBuYXZp
ZwogICAgIGlmICghZGlkU3VzcGVuZFByZXZpb3VzUGFnZSkKICAgICAgICAgbV9wcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDbG9zZSgpLCBtX3dlYlBhZ2VJRCk7CiAKKyAgICBjb25z
dCBhdXRvIG9sZFdlYlBhZ2VJRCA9IG1fd2ViUGFnZUlEOwogICAgIHN3YXBUb1dlYlByb2Nlc3Mo
bV9wcm92aXNpb25hbFBhZ2UtPnByb2Nlc3MoKSwgbV9wcm92aXNpb25hbFBhZ2UtPndlYlBhZ2VJ
RCgpLCBtX3Byb3Zpc2lvbmFsUGFnZS0+dGFrZURyYXdpbmdBcmVhKCksIG1fcHJvdmlzaW9uYWxQ
YWdlLT5tYWluRnJhbWUoKSk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKQEAgLTMwNTEsNiArMzAz
Nyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpjb21taXRQcm92aXNpb25hbFBhZ2UoRnJhbWVJZGVu
dGlmaWVyIGZyYW1lSUQsIHVpbnQ2NF90IG5hdmlnCiAKICAgICBkaWRDb21taXRMb2FkRm9yRnJh
bWUoZnJhbWVJRCwgbmF2aWdhdGlvbklELCBtaW1lVHlwZSwgZnJhbWVIYXNDdXN0b21Db250ZW50
UHJvdmlkZXIsIGZyYW1lTG9hZFR5cGUsIGNlcnRpZmljYXRlSW5mbywgY29udGFpbnNQbHVnaW5E
b2N1bWVudCwgZm9yY2VkSGFzSW5zZWN1cmVDb250ZW50LCB1c2VyRGF0YSk7CiAKKyAgICBtX2lu
c3BlY3RvckNvbnRyb2xsZXItPmRpZENvbW1pdFByb3Zpc2lvbmFsUGFnZShvbGRXZWJQYWdlSUQs
IG1fd2ViUGFnZUlEKTsKICAgICBtX3Byb3Zpc2lvbmFsUGFnZSA9IG51bGxwdHI7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggNDU4MTdkN2FkZWZkNGI3Yzkw
NDIwMjkxMmZjYmJjZDhiNzQ4YTk2Ny4uYTVhMzQ1NGIzZGFkNzNmODk5ZDU5ZjI1ODhjNGJmOGY1
ODMzZjQxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTIwOTIs
OSArMjA5Miw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHN0b3BBbGxVUkxTY2hlbWVUYXNrcyhX
ZWJQcm9jZXNzUHJveHkqID0gbnVsbHB0cik7CiAKLSAgICB2b2lkIGNsZWFySW5zcGVjdG9yVGFy
Z2V0cygpOwotICAgIHZvaWQgY3JlYXRlSW5zcGVjdG9yVGFyZ2V0cygpOwotCiAjaWYgRU5BQkxF
KEFUVEFDSE1FTlRfRUxFTUVOVCkKICAgICB2b2lkIHJlZ2lzdGVyQXR0YWNobWVudElkZW50aWZp
ZXJGcm9tRGF0YShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlLCBjb25z
dCBTdHJpbmcmIHByZWZlcnJlZEZpbGVOYW1lLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKTsK
ICAgICB2b2lkIHJlZ2lzdGVyQXR0YWNobWVudElkZW50aWZpZXJGcm9tRmlsZVBhdGgoY29uc3Qg
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSwgY29uc3QgU3RyaW5nJiBmaWxlUGF0
aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBkNDI0ZmMxNDk1ZDU4OWI0ZWI0ODljY2EyMWJmYzhlNzMyYzk2ZjZmLi4yYmJkZTljMjBj
ZGJkNzc2ZTY0ZTc2NTI5ODJkNTI1MDdlMWIxMDMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzNjcsNyArMTM2Nyw2IEBACiAJCUE1
NDNFMzA3MjE1QUQxMzcwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRD
aGFubmVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
NTQzRTMwNTIxNUFEMTJEMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5k
Q2hhbm5lbC5oICovOyB9OwogCQlBNTQzRTMwQzIxNUM4QThEMDAyNzlDRDkgLyogV2ViUGFnZUlu
c3BlY3RvclRhcmdldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTU0M0UzMDgyMTVDOEE4MzAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQu
aCAqLzsgfTsKIAkJQTU0M0UzMEQyMTVDOEE5MDAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JU
YXJnZXRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBNTQzRTMwQjIxNUM4QTg0MDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdl
dENvbnRyb2xsZXIuaCAqLzsgfTsKLQkJQTU0M0UzMTAyMTVEOENFNjAwMjc5Q0Q5IC8qIFdlYlBh
Z2VJbnNwZWN0b3JUYXJnZXRBZ2VudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTU0M0UzMEUyMTVEOENFMjAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0
b3JUYXJnZXRBZ2VudC5oICovOyB9OwogCQlBNTVCQTgxMDFCQTEzMTdFMDA3Q0QzM0QgLyogX1dL
UmVtb3RlV2ViSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1NUJBODBDMUJBMTJCRTEwMDdDRDMzRCAvKiBfV0tS
ZW1vdGVXZWJJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE1NUJBODE3MUJBMjNFMTIwMDdDRDMzRCAvKiBS
ZW1vdGVXZWJJbnNwZWN0b3JVSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTU1QkE4MTMxQkEyM0UwNTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3Rv
clVJLmggKi87IH07CiAJCUE1NUJBODFGMUJBMjVCMjcwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTU1QkE4MTkxQkEyNUIxRTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Lmgg
Ki87IH07CkBAIC00MTE1LDggKzQxMTQsNiBAQAogCQlBNTQzRTMwOTIxNUM4QTgzMDAyNzlDRDkg
LyogV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBNTQzRTMwQTIxNUM4QTg0MDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3Rv
clRhcmdldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTU0M0UzMEIyMTVDOEE4NDAwMjc5Q0Q5
IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUE1NDNFMzBFMjE1RDhDRTIwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
QWdlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE1NDNFMzBGMjE1RDhDRTIwMDI3OUNEOSAvKiBX
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUGFn
ZUluc3BlY3RvclRhcmdldEFnZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QTU1QkE4MEMxQkExMkJFMTAwN0NEMzNEIC8qIF9XS1JlbW90ZVdlYkluc3BlY3RvclZpZXdDb250
cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1JlbW90ZVdlYklu
c3BlY3RvclZpZXdDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1
NUJBODBEMUJBMTJCRTEwMDdDRDMzRCAvKiBfV0tSZW1vdGVXZWJJbnNwZWN0b3JWaWV3Q29udHJv
bGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IF9XS1JlbW90
ZVdlYkluc3BlY3RvclZpZXdDb250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBNTVCQTgxMjFCQTIzRTA1MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yVUkuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlV2ViSW5zcGVjdG9y
VUkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzg5OSw4ICs3ODk2LDYgQEAK
IAkJCQkyRDlFQTMwRTFBOTZDQkZGMDAyRDI4MDcgLyogV2ViUGFnZUluamVjdGVkQnVuZGxlQ2xp
ZW50LmggKi8sCiAJCQkJQTUxM0Y1M0YyMTU0QTVDRDAwNjYyODQxIC8qIFdlYlBhZ2VJbnNwZWN0
b3JDb250cm9sbGVyLmNwcCAqLywKIAkJCQlBNTEzRjUzRTIxNTRBNUNDMDA2NjI4NDEgLyogV2Vi
UGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaCAqLywKLQkJCQlBNTQzRTMwRjIxNUQ4Q0UyMDAyNzlD
RDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50LmNwcCAqLywKLQkJCQlBNTQzRTMwRTIx
NUQ4Q0UyMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldEFnZW50LmggKi8sCiAJCQkJ
QkMxMTFCMEIxMTJGNUU0RjAwMzM3QkFCIC8qIFdlYlBhZ2VQcm94eS5jcHAgKi8sCiAJCQkJQkMw
MzJEQ0IxMEY0Mzg5RjAwNThDMTVBIC8qIFdlYlBhZ2VQcm94eS5oICovLAogCQkJCUJDQkQzOEZB
MTI1QkFCOUEwMEQyQzI5RiAvKiBXZWJQYWdlUHJveHkubWVzc2FnZXMuaW4gKi8sCkBAIC05OTg0
LDcgKzk5NzksNiBAQAogCQkJCTJEOUVBMzBGMUE5NkNCRkYwMDJEMjgwNyAvKiBXZWJQYWdlSW5q
ZWN0ZWRCdW5kbGVDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MTNGNTQwMjE1NEE1RDcw
MDY2Mjg0MSAvKiBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTU0M0UzMEMyMTVDOEE4RDAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCBp
biBIZWFkZXJzICovLAotCQkJCUE1NDNFMzEwMjE1RDhDRTYwMDI3OUNEOSAvKiBXZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0QWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1NDNFMzBEMjE1QzhBOTAw
MDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTU0M0UzMDcyMTVBRDEzNzAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRGcm9udGVuZENoYW5uZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUMwQ0U3MkExMTI0N0U3MUQw
MEJDMEVDNCAvKiBXZWJQYWdlTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0LmNwcAppbmRleCA1NmIwZDUyZWM1OTU3Y2M3M2ExM2YwNjdlYjNjZGEwMzJkZTIxNzU4Li5h
NzBmNmZkNTIwOTZhNWRjYTkwMWVhNzBhMzc1NWYxNGQ2YjRhMGZkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0LmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXQuaCIKIAogI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0RnJvbnRlbmRDaGFubmVsLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDb250
cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CiAKQEAgLTQxLDE5ICs0MiwyNSBA
QCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0OjpXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0KFdlYlBhZ2Um
IHBhZ2UpCiAKIFN0cmluZyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0OjppZGVudGlmaWVyKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbWFrZVN0cmluZygicGFnZS0iLCBtX3BhZ2UuaWRlbnRpZmllcigp
LnRvVUludDY0KCkpOworICAgIHJldHVybiB0b1RhcmdldElEKG1fcGFnZS5pZGVudGlmaWVyKCkp
OwogfQogCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OmNvbm5lY3QoSW5zcGVjdG9yOjpG
cm9udGVuZENoYW5uZWwmIGNoYW5uZWwpCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OmNv
bm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlIGNvbm5lY3Rp
b25UeXBlKQogeworICAgIGlmIChtX2NoYW5uZWwpCisgICAgICAgIHJldHVybjsKKyAgICBtX2No
YW5uZWwgPSBtYWtlVW5pcXVlPFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw+
KG1fcGFnZSwgaWRlbnRpZmllcigpLCBjb25uZWN0aW9uVHlwZSk7CiAgICAgaWYgKG1fcGFnZS5j
b3JlUGFnZSgpKQotICAgICAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxl
cigpLmNvbm5lY3RGcm9udGVuZChjaGFubmVsKTsKKyAgICAgICAgbV9wYWdlLmNvcmVQYWdlKCkt
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS5jb25uZWN0RnJvbnRlbmQoKm1fY2hhbm5lbCk7CiB9CiAK
LXZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldDo6ZGlzY29ubmVjdChJbnNwZWN0b3I6OkZyb250
ZW5kQ2hhbm5lbCYgY2hhbm5lbCkKK3ZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldDo6ZGlzY29u
bmVjdCgpCiB7CisgICAgaWYgKCFtX2NoYW5uZWwpCisgICAgICAgIHJldHVybjsKICAgICBpZiAo
bV9wYWdlLmNvcmVQYWdlKCkpCi0gICAgICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5pbnNwZWN0b3JD
b250cm9sbGVyKCkuZGlzY29ubmVjdEZyb250ZW5kKGNoYW5uZWwpOworICAgICAgICBtX3BhZ2Uu
Y29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmRpc2Nvbm5lY3RGcm9udGVuZCgqbV9j
aGFubmVsKTsKKyAgICBtX2NoYW5uZWwucmVzZXQoKTsKIH0KIAogdm9pZCBXZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0OjpzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpCkBAIC02Miw0ICs2OSwxMCBAQCB2b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OnNlbmRN
ZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKICAgICAgICAgbV9w
YWdlLmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5kaXNwYXRjaE1lc3NhZ2VGcm9t
RnJvbnRlbmQobWVzc2FnZSk7CiB9CiAKK1N0cmluZyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojp0
b1RhcmdldElEKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIHBhZ2VJRCkKK3sKKyAgICByZXR1cm4g
bWFrZVN0cmluZygicGFnZS0iLCBwYWdlSUQudG9VSW50NjQoKSk7Cit9CisKKwogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmgKaW5kZXggYjcwZTMxYzhiODc3MGM0YmYxZWNi
NDU4OGViZjI2NzViM2I5ZjQ2NC4uNmNiZDdmYWQ1ZmY5MWFmZDg1OGRhMzQ2YWRiZmVlZDY0MjRi
MGIyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZUluc3BlY3RvclRhcmdldC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaApAQCAtMjYsMjkgKzI2LDM0IEBACiAjcHJhZ21hIG9u
Y2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclRhcmdldC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvUGFnZUlkZW50aWZpZXIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlBhZ2U7CitjbGFzcyBXZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsOwogCiBjbGFzcyBXZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0IHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0KTsKIHB1YmxpYzoKLSAgICBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0KFdl
YlBhZ2UmKTsKKyAgICBleHBsaWNpdCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0KFdlYlBhZ2UmKTsK
ICAgICB+V2ViUGFnZUluc3BlY3RvclRhcmdldCgpID0gZGVmYXVsdDsKIAogICAgIEluc3BlY3Rv
cjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gSW5zcGVj
dG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlOjpQYWdlOyB9CiAKICAgICBTdHJpbmcgaWRlbnRpZmll
cigpIGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRD
aGFubmVsJik7Ci0gICAgdm9pZCBkaXNjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVs
Jik7Ci0gICAgdm9pZCBzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmKTsK
KyAgICB2b2lkIGNvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25U
eXBlKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpc2Nvbm5lY3QoKSBvdmVycmlkZTsKKyAgICB2b2lk
IHNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworCisg
ICAgc3RhdGljIFN0cmluZyB0b1RhcmdldElEKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyKTsKIAog
cHJpdmF0ZToKICAgICBXZWJQYWdlJiBtX3BhZ2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYlBh
Z2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw+IG1fY2hhbm5lbDsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuY3Bw
CmluZGV4IDUyNTQ4OTY3M2Q2NmEyZTRhN2ZkMzJmMzY0ODUzNGNlM2VkZWVjNDcuLmNkYTRmMWU4
ZDNjNTc1MzYxNjJhYTM5MGVkNzRiNjgxYzg5MTM0MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0Q29udHJvbGxlci5jcHAKQEAgLTU4LDcgKzU4LDYgQEAgdm9pZCBXZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0Q29udHJvbGxlcjo6cmVtb3ZlVGFyZ2V0KEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFy
Z2V0JgogICAgIG1fcGFnZS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRlc3Ryb3lJbnNw
ZWN0b3JUYXJnZXQodGFyZ2V0LmlkZW50aWZpZXIoKSkpOwogCiAgICAgbV90YXJnZXRzLnJlbW92
ZSh0YXJnZXQuaWRlbnRpZmllcigpKTsKLSAgICBtX3RhcmdldEZyb250ZW5kQ2hhbm5lbHMucmVt
b3ZlKHRhcmdldC5pZGVudGlmaWVyKCkpOwogfQogCiB2b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRDb250cm9sbGVyOjpjb25uZWN0SW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIElu
c3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSkK
QEAgLTY3LDEzICs2Niw3IEBAIHZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6
OmNvbm5lY3RJbnNwZWN0b3IoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwKICAgICBpZiAoIXRhcmdl
dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRG
cm9udGVuZENoYW5uZWw+IGNoYW5uZWwgPSBtX3RhcmdldEZyb250ZW5kQ2hhbm5lbHMuZ2V0KHRh
cmdldElkKTsKLSAgICBpZiAoIWNoYW5uZWwpIHsKLSAgICAgICAgY2hhbm5lbCA9IFdlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw6OmNyZWF0ZSgqdGhpcywgdGFyZ2V0SWQsIGNv
bm5lY3Rpb25UeXBlKTsKLSAgICAgICAgbV90YXJnZXRGcm9udGVuZENoYW5uZWxzLnNldCh0YXJn
ZXQtPmlkZW50aWZpZXIoKSwgY2hhbm5lbCk7Ci0gICAgfQotCi0gICAgdGFyZ2V0LT5jb25uZWN0
KCpjaGFubmVsLmdldCgpKTsKKyAgICB0YXJnZXQtPmNvbm5lY3QoY29ubmVjdGlvblR5cGUpOwog
fQogCiB2b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpkaXNjb25uZWN0SW5z
cGVjdG9yKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpCkBAIC04MiwxMSArNzUsNyBAQCB2b2lkIFdl
YlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpkaXNjb25uZWN0SW5zcGVjdG9yKGNvbnN0
IFN0cmluZyYgdGFyZ2V0SQogICAgIGlmICghdGFyZ2V0KQogICAgICAgICByZXR1cm47CiAKLSAg
ICBSZWZQdHI8V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbD4gY2hhbm5lbCA9
IG1fdGFyZ2V0RnJvbnRlbmRDaGFubmVscy50YWtlKHRhcmdldElkKTsKLSAgICBpZiAoIWNoYW5u
ZWwpCi0gICAgICAgIHJldHVybjsKLQotICAgIHRhcmdldC0+ZGlzY29ubmVjdCgqY2hhbm5lbC5n
ZXQoKSk7CisgICAgdGFyZ2V0LT5kaXNjb25uZWN0KCk7CiB9CiAKIHZvaWQgV2ViUGFnZUluc3Bl
Y3RvclRhcmdldENvbnRyb2xsZXI6OnNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0
cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKQEAgLTk4LDkgKzg3LDQgQEAg
dm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6c2VuZE1lc3NhZ2VUb1Rhcmdl
dEJhY2tlbmQoY29uc3QgU3RyaW5nJgogICAgIHRhcmdldC0+c2VuZE1lc3NhZ2VUb1RhcmdldEJh
Y2tlbmQobWVzc2FnZSk7CiB9CiAKLXZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xs
ZXI6OnNlbmRNZXNzYWdlVG9UYXJnZXRGcm9udGVuZChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6U2VuZE1lc3NhZ2VUb0luc3BlY3RvckZyb250ZW5kKHRhcmdldElkLCBtZXNzYWdl
KSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRD
b250cm9sbGVyLmgKaW5kZXggM2U5MmI3YTlkYTllNTYwOWU2MDE2NjM5YzA5YjczY2I1OTZmOGFm
NS4uN2M5MzFkYWQxYzk4MDBmMDNkNzNkNGE3Y2EyNTg4ZGQwMjhhOGYyNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldENv
bnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oCkBAIC0yNiw3ICsyNiw2IEBACiAjcHJhZ21hIG9u
Y2UKIAogI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCIKLSNpbmNsdWRlICJXZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNTAsMTMgKzQ5LDEx
IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbm5lY3RJbnNwZWN0b3IoY29uc3QgU3RyaW5nJiB0YXJn
ZXRJZCwgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlKTsKICAgICB2
b2lkIGRpc2Nvbm5lY3RJbnNwZWN0b3IoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCk7CiAgICAgdm9p
ZCBzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1RhcmdldEZyb250ZW5k
KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CiAKIHByaXZh
dGU6CiAgICAgV2ViUGFnZSYgbV9wYWdlOwogICAgIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQgbV9w
YWdlVGFyZ2V0OwogICAgIEhhc2hNYXA8U3RyaW5nLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdl
dCo+IG1fdGFyZ2V0czsKLSAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFdlYlBhZ2VJbnNwZWN0
b3JUYXJnZXRGcm9udGVuZENoYW5uZWw+PiBtX3RhcmdldEZyb250ZW5kQ2hhbm5lbHM7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldEZy
b250ZW5kQ2hhbm5lbC5jcHAKaW5kZXggOGQ3ODgwNzgyYTI5YjE3MGNlNjVhZmM3MDM3N2Q4YmQ1
MDY5NDM1OC4uZTFiNWY3MTM3MzNhMDk1MjUyMTIyZjBhMzgwMWY4MmM4YzYwZDNmNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRh
cmdldEZyb250ZW5kQ2hhbm5lbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5jcHAKQEAgLTI2LDE3
ICsyNiwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0
b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaCIKIAotI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JU
YXJnZXRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgIldlYlBh
Z2VQcm94eU1lc3NhZ2VzLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1SZWY8V2ViUGFnZUlu
c3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbD4gV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250
ZW5kQ2hhbm5lbDo6Y3JlYXRlKFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyJiB0YXJn
ZXRDb250cm9sbGVyLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6OkZyb250ZW5k
Q2hhbm5lbDo6Q29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUpCi17Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbCh0YXJnZXRD
b250cm9sbGVyLCB0YXJnZXRJZCwgY29ubmVjdGlvblR5cGUpKTsKLX0KLQotV2ViUGFnZUluc3Bl
Y3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbDo6V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5k
Q2hhbm5lbChXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlciYgdGFyZ2V0Q29udHJvbGxl
ciwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNv
bm5lY3Rpb25UeXBlIGNvbm5lY3Rpb25UeXBlKQotICAgIDogbV90YXJnZXRDb250cm9sbGVyKHRh
cmdldENvbnRyb2xsZXIpCitXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsOjpX
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0
IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9u
VHlwZSBjb25uZWN0aW9uVHlwZSkKKyAgICA6IG1fcGFnZShwYWdlKQogICAgICwgbV90YXJnZXRJ
ZCh0YXJnZXRJZCkKICAgICAsIG1fY29ubmVjdGlvblR5cGUoY29ubmVjdGlvblR5cGUpCiB7CkBA
IC00NCw3ICs0MCw3IEBAIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw6Oldl
YlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwoV2ViCiAKIHZvaWQgV2ViUGFnZUlu
c3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbDo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICBtX3RhcmdldENvbnRyb2xsZXIuc2VuZE1lc3NhZ2VU
b1RhcmdldEZyb250ZW5kKG1fdGFyZ2V0SWQsIG1lc3NhZ2UpOworICAgIG1fcGFnZS5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNlbmRNZXNzYWdlVG9JbnNwZWN0b3JGcm9udGVuZChtX3Rh
cmdldElkLCBtZXNzYWdlKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdl
dEZyb250ZW5kQ2hhbm5lbC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5oCmluZGV4IDc2YWY2MmE5N2JlZjQ4
OGI2NDRlNWQ2MThkNDM5ZWM5YTQyZjIyZGEuLjgxODRhYzViZGEyODkzODJhZWIyY2Y1MDE2OWM1
OTU2N2Q0Y2QyZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFu
bmVsLmgKQEAgLTMxLDIyICszMSwyMCBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3Mg
V2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI7CitjbGFzcyBXZWJQYWdlOwogCi1jbGFz
cyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsIGZpbmFsIDogcHVibGljIFJl
ZkNvdW50ZWQ8V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbD4sIHB1YmxpYyBJ
bnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCB7CitjbGFzcyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
RnJvbnRlbmRDaGFubmVsIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVs
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsKTsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw+IGNyZWF0ZShX
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlciYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQs
IEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSk7CisgICAgV2ViUGFn
ZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbChXZWJQYWdlJiwgY29uc3QgU3RyaW5nJiB0
YXJnZXRJZCwgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlKTsKICAg
ICB2aXJ0dWFsIH5XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsKCkgPSBkZWZh
dWx0OwogCiBwcml2YXRlOgotICAgIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5u
ZWwoV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXImLCBjb25zdCBTdHJpbmcmIHRhcmdl
dElkLCBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUpOwotCiAgICAg
Q29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X2Nvbm5lY3Rpb25UeXBlOyB9CiAgICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKSBvdmVycmlkZTsKIAotcHJpdmF0ZToKLSAgICBXZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0Q29udHJvbGxlciYgbV90YXJnZXRDb250cm9sbGVyOworICAgIFdlYlBhZ2UmIG1f
cGFnZTsKICAgICBTdHJpbmcgbV90YXJnZXRJZDsKICAgICBJbnNwZWN0b3I6OkZyb250ZW5kQ2hh
bm5lbDo6Q29ubmVjdGlvblR5cGUgbV9jb25uZWN0aW9uVHlwZSB7IEluc3BlY3Rvcjo6RnJvbnRl
bmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZTo6UmVtb3RlIH07CiB9OwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGEyZGMyMDc3
NWQzN2EzMzdkZmQ5MzEwYjkzYjdhYjBhMWJlNmNiYjguLmFkMmMzZjE4MGFiNmNkNDg4M2U3MjE4
YjE5MjkzNTk3OGMwZmZkMTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxOS0xMC0wMSAgWXVy
eSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5zcGVj
dG9yOiBub3RpZnkgaW5zcGVjdG9yIHdoZW4gcHJvdmlzaW9uYWwgcGFnZSBpcyBjcmVhdGVkLCBj
b21taXR0ZWQgYW5kIGRlc3Ryb3llZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjAyNzA0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGV2aW4gUm91c3Nv
LgorCisgICAgICAgIEFkZGVkIG5ldyB0ZXN0IGZvciBUYXJnZXQgZXZlbnRzIGR1cmluZyBQU09O
LiBJdCBpcyBvbmx5IGVuYWJsZWQgb24gV2ViS2l0MiBhcyB0aGVyZSBpcworICAgICAgICBubyBU
YXJnZXQgYWdlbnQgaW4gV2ViS2l0MS4KKworICAgICAgICAqIFRlc3RFeHBlY3RhdGlvbnM6Cisg
ICAgICAgICogaHR0cC90ZXN0cy9pbnNwZWN0b3IvdGFyZ2V0L3RhcmdldC1ldmVudHMtZm9yLXBy
b3Zpc2lvbmFsLXBhZ2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3Rz
L2luc3BlY3Rvci90YXJnZXQvdGFyZ2V0LWV2ZW50cy1mb3ItcHJvdmlzaW9uYWwtcGFnZS5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9uczoKKwogMjAx
OS0xMC0yMiAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAg
ICB3cHQvY3NzL2Nzcy1pbWFnZXMvZ3JhZGllbnQvY29sb3Itc3RvcHMtcGFyc2luZy5odG1sIGZh
aWxzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVz
dHMvVGVzdEV4cGVjdGF0aW9ucwppbmRleCBiOTkxMDRmZjI4OWY1NzAzYzc3YzMxMjViMTQwNzI2
N2Y0MDRkMjA5Li43MWY4YWU1MjljOTM4NTczZmNiMDQ4NDBjNzkxMTRiZGQyMzc0MDg1IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL1Rl
c3RFeHBlY3RhdGlvbnMKQEAgLTkxNSw2ICs5MTUsOSBAQCB3ZWJraXQub3JnL2IvMTYxOTUxIFsg
RGVidWcgXSBpbnNwZWN0b3IvZGVidWdnZXIvcGF1c2VkLXNjb3Blcy5odG1sIFsgU2tpcCBdCiBp
bnNwZWN0b3IvZGVidWdnZXIvZXZhbHVhdGVPbkNhbGxGcmFtZS1lbXVsYXRlVXNlckdlc3R1cmUt
dXNlcklzSW50ZXJhY3RpbmcuaHRtbCBbIFNraXAgXQogaW5zcGVjdG9yL3J1bnRpbWUvZXZhbHVh
dGUtZW11bGF0ZVVzZXJHZXN0dXJlLXVzZXJJc0ludGVyYWN0aW5nLmh0bWwgWyBTa2lwIF0KIAor
IyBUYXJnZXQgZG9tYWluIGlzIG9ubHkgcHJlc2VudCBpbiBXSzIuCitodHRwL3Rlc3RzL2luc3Bl
Y3Rvci90YXJnZXQgWyBTa2lwIF0KKwogIyBUaGVzZSBjb25mb3JtYW5jZSB0ZXN0cyBhcmUgbm8g
bG9uZ2VyIGluIHN5bmMgd2l0aCB0aGUgbGF0ZXN0IHNwZWNpZmljYXRpb24KICMgYW5kIGV4cGVj
dCBjb21wYXJlRG9jdW1lbnRQb3NpdGlvbigpIHRvIHJldHVybjoKICMgRE9DVU1FTlRfUE9TSVRJ
T05fSU1QTEVNRU5UQVRJT05fU1BFQ0lGSUMgfCBET0NVTUVOVF9QT1NJVElPTl9ESVNDT05ORUNU
RUQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL3RhcmdldC90
YXJnZXQtZXZlbnRzLWZvci1wcm92aXNpb25hbC1wYWdlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL3RhcmdldC90YXJnZXQtZXZlbnRzLWZvci1wcm92aXNp
b25hbC1wYWdlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZGVmN2UwYmIzNDRkZTMyZDZkNTVj
NzgyYTk4ZjIxNjMwOTlmODdkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9pbnNwZWN0b3IvdGFyZ2V0L3RhcmdldC1ldmVudHMtZm9yLXByb3Zpc2lvbmFsLXBhZ2Ut
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTYgQEAKK1Rlc3QgdGhhdCBjcm9zcyBkb21haW4gbmF2
aWdhdGlvbiByZXN1bHRzIGluIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2Ugb2YgZXZlbnRzIGluIFRh
cmdldCBkb21haW46IAorMS4gVGFyZ2V0LnRhcmdldENyZWF0ZWQgZm9yIHByb3Zpc2lvbmFsIHBh
Z2UuIAorMi4gVGFyZ2V0LmRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0IHdoZW4gcHJvdmlzaW9u
YWwgbG9hZCBpcyBjb21taXR0ZWQuIAorMy4gVGFyZ2V0LnRhcmdldERlc3Ryb3llZCBmb3IgdGhl
IG9sZCB0YXJnZXQgYWZ0ZXIgdGhlIG5hdmlnYXRpb24gcmVxdWVzdCBpcyBjb21taXR0ZWQuCisK
KworPT0gUnVubmluZyB0ZXN0IHN1aXRlOiBUYXJnZXQuUFNPTgorLS0gUnVubmluZyB0ZXN0IGNh
c2U6IFByb3Zpc2lvbmFsUGFnZVRhcmdldAorUEFTUzogU2hvdWxkIHJlY2VpdmUgdGFyZ2V0Q3Jl
YXRlZCBldmVudC4KK1BBU1M6IFRhcmdldCBzaG91bGQgYmUgcHJvdmlzaW9uYWwuCitQQVNTOiBT
aG91bGQgcmVjZWl2ZSBkaWRDb21taXRQcm92aXNpb25hbFRhcmdldCBldmVudC4KK1BBU1M6IFBy
ZXZpb3VzIHRhcmdldCBzaG91bGQgYmUgdGhlIGN1cnJlbnQgb25lLgorUEFTUzogQ29tbWl0dGVk
IHRhcmdldCBzaG91bGQgbWF0Y2ggcHJvdmlzaW9uYWwgdGFyZ2V0LgorUEFTUzogU2hvdWxkIHJl
Y2VpdmUgdGFyZ2V0RGVzdHJveWVkIGV2ZW50LgorUEFTUzogRGVzdHJveWVkIHRhcmdldCBzaG91
bGQgYmUgcHJldmlvdXMgdGFyZ2V0LgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2luc3BlY3Rvci90YXJnZXQvdGFyZ2V0LWV2ZW50cy1mb3ItcHJvdmlzaW9uYWwtcGFnZS5o
dG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvdGFyZ2V0L3RhcmdldC1ldmVu
dHMtZm9yLXByb3Zpc2lvbmFsLXBhZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNzM5NTEzOTM2NzQ0ZTU1
NmVjMTEyYmRkNTJhYTFkOGU2NDk0YTkxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9pbnNwZWN0b3IvdGFyZ2V0L3RhcmdldC1ldmVudHMtZm9yLXByb3Zpc2lvbmFs
LXBhZ2UuaHRtbApAQCAtMCwwICsxLDU4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+Cis8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2lu
c3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitmdW5jdGlvbiB0ZXN0KCkKK3sK
KyAgICBsZXQgc3VpdGUgPSBJbnNwZWN0b3JUZXN0LmNyZWF0ZUFzeW5jU3VpdGUoIlRhcmdldC5Q
U09OIik7CisKKyAgICBzdWl0ZS5hZGRUZXN0Q2FzZSh7CisgICAgICAgIG5hbWU6ICJQcm92aXNp
b25hbFBhZ2VUYXJnZXQiLAorICAgICAgICBkZXNjcmlwdGlvbjogIkNoZWNrIHRoYXQgYSBuZXcg
dGFyZ2V0IHdpbGwgYmUgY3JlYXRlZCBmb3IgcHJvdmlzaW9uYWwgcGFnZS4iLAorICAgICAgICB0
ZXN0KHJlc29sdmUsIHJlamVjdCkgeworICAgICAgICAgICAgY29uc3QgbWFpblRhcmdldElkID0g
V0kubWFpblRhcmdldC5pZGVudGlmaWVyOworICAgICAgICAgICAgbGV0IG5ld1RhcmdldElkOwor
ICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobWFpblRhcmdldElkKTsKKyAgICAgICAg
ICAgIGxldCByZWxvYWRQcm9taXNlID0gSW5zcGVjdG9yVGVzdC5hd2FpdEV2ZW50KEZyb250ZW5k
VGVzdEhhcm5lc3MuRXZlbnQuVGVzdFBhZ2VEaWRMb2FkKTsKKworICAgICAgICAgICAgV0kudGFy
Z2V0TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdJLlRhcmdldE1hbmFnZXIuRXZlbnQuVGFyZ2V0
Q3JlYXRlZCwgKGV2ZW50KSA9PiB7CisgICAgICAgICAgICAgICAgbGV0IHt0YXJnZXRJbmZvfSA9
IGV2ZW50LmRhdGE7CisgICAgICAgICAgICAgICAgbmV3VGFyZ2V0SWQgPSB0YXJnZXRJbmZvLnRh
cmdldElkOworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QucGFzcyhgU2hvdWxkIHJlY2Vp
dmUgdGFyZ2V0Q3JlYXRlZCBldmVudC5gKTsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0
LmV4cGVjdFRydWUodGFyZ2V0SW5mby5pc1Byb3Zpc2lvbmFsLCAiVGFyZ2V0IHNob3VsZCBiZSBw
cm92aXNpb25hbC4iKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBXSS50YXJnZXRN
YW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV0kuVGFyZ2V0TWFuYWdlci5FdmVudC5EaWRDb21taXRQ
cm92aXNpb25hbFRhcmdldCwgKGV2ZW50KSA9PiB7CisgICAgICAgICAgICAgICAgbGV0IHtwcmV2
aW91c1RhcmdldElkLCB0YXJnZXRJbmZvfSA9IGV2ZW50LmRhdGE7CisgICAgICAgICAgICAgICAg
SW5zcGVjdG9yVGVzdC5wYXNzKGBTaG91bGQgcmVjZWl2ZSBkaWRDb21taXRQcm92aXNpb25hbFRh
cmdldCBldmVudC5gKTsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdEVxdWFs
KHByZXZpb3VzVGFyZ2V0SWQsIG1haW5UYXJnZXRJZCwgIlByZXZpb3VzIHRhcmdldCBzaG91bGQg
YmUgdGhlIGN1cnJlbnQgb25lLiIpOworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhw
ZWN0RXF1YWwodGFyZ2V0SW5mby50YXJnZXRJZCwgbmV3VGFyZ2V0SWQsICJDb21taXR0ZWQgdGFy
Z2V0IHNob3VsZCBtYXRjaCBwcm92aXNpb25hbCB0YXJnZXQuIik7CisgICAgICAgICAgICB9KTsK
KworICAgICAgICAgICAgV0kudGFyZ2V0TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdJLlRhcmdl
dE1hbmFnZXIuRXZlbnQuVGFyZ2V0RGVzdHJveWVkLCAoZXZlbnQpID0+eworICAgICAgICAgICAg
ICAgIGxldCB7dGFyZ2V0SWR9ID0gZXZlbnQuZGF0YTsKKyAgICAgICAgICAgICAgICBJbnNwZWN0
b3JUZXN0LnBhc3MoYFNob3VsZCByZWNlaXZlIHRhcmdldERlc3Ryb3llZCBldmVudC5gKTsKKyAg
ICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdEVxdWFsKHRhcmdldElkLCBtYWluVGFy
Z2V0SWQsICJEZXN0cm95ZWQgdGFyZ2V0IHNob3VsZCBiZSBwcmV2aW91cyB0YXJnZXQuIik7CisK
KyAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciBwYWdlIHJlbG9hZCBldmVudCB0byBhdm9pZCBy
YWNlIGJldHdlZW4gdGVzdCByZXN1bHRzIGZsdXNoaW5nIGFuZCB0aGUgdGVzdCBjb21wbGV0aW9u
LgorICAgICAgICAgICAgICAgIHJlbG9hZFByb21pc2UudGhlbihyZXNvbHZlKTsKKyAgICAgICAg
ICAgIH0pOworCisgICAgICAgICAgICBXSS5tYWluVGFyZ2V0LlJ1bnRpbWVBZ2VudC5ldmFsdWF0
ZSgibG9jYXRpb24uaG9zdG5hbWU9J2xvY2FsaG9zdCciKTsKKyAgICAgICAgfQorICAgIH0pOwor
CisgICAgc3VpdGUucnVuVGVzdENhc2VzQW5kRmluaXNoKCk7Cit9Cis8L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKzxwPlRlc3QgdGhhdCBjcm9zcyBkb21haW4g
bmF2aWdhdGlvbiByZXN1bHRzIGluIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2Ugb2YgZXZlbnRzIGlu
IFRhcmdldCBkb21haW46Cis8YnI+MS4gVGFyZ2V0LnRhcmdldENyZWF0ZWQgZm9yIHByb3Zpc2lv
bmFsIHBhZ2UuCis8YnI+Mi4gVGFyZ2V0LmRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0IHdoZW4g
cHJvdmlzaW9uYWwgbG9hZCBpcyBjb21taXR0ZWQuCis8YnI+My4gVGFyZ2V0LnRhcmdldERlc3Ry
b3llZCBmb3IgdGhlIG9sZCB0YXJnZXQgYWZ0ZXIgdGhlIG5hdmlnYXRpb24gcmVxdWVzdCBpcyBj
b21taXR0ZWQuCis8L3A+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dr
Mi9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDAyZDY4OTgxYjU3ZTFmY2UwOTAzMjJiZmYzZTRjMjAz
YWQ0OTJhODcuLjdkNGZiNjYwNTJmNmJkOTM3OTVhMmQxMjA1NTIxZDBlMjZjZGFjNzMgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zCkBAIC03NjQsNiArNzY0LDkg
QEAgaHR0cC90ZXN0cy9hZENsaWNrQXR0cmlidXRpb24gWyBQYXNzIF0KIGluc3BlY3Rvci9kZWJ1
Z2dlci9ldmFsdWF0ZU9uQ2FsbEZyYW1lLWVtdWxhdGVVc2VyR2VzdHVyZS11c2VySXNJbnRlcmFj
dGluZy5odG1sIFsgUGFzcyBdCiBpbnNwZWN0b3IvcnVudGltZS9ldmFsdWF0ZS1lbXVsYXRlVXNl
ckdlc3R1cmUtdXNlcklzSW50ZXJhY3RpbmcuaHRtbCBbIFBhc3MgXQogCisjIFRhcmdldCBkb21h
aW4gaXMgb25seSBwcmVzZW50IGluIFdlYktpdDIuCitodHRwL3Rlc3RzL2luc3BlY3Rvci90YXJn
ZXQgWyBQYXNzIF0KKwogIyMjIEVORCBPRiAoNSkgUHJvZ3Jlc3Npb25zLCBleHBlY3RlZCBzdWNj
ZXNzZXMgdGhhdCBhcmUgZXhwZWN0ZWQgZmFpbHVyZXMgaW4gV2ViS2l0MS4KICMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>