<?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>213185</bug_id>
          
          <creation_ts>2020-06-14 10:49:35 -0700</creation_ts>
          <short_desc>[WPT] html/webappapis/system-state-and-capabilities/the-navigator-object/navigator-pluginarray.html fails due to lack of caching of Plugin objects</short_desc>
          <delta_ts>2020-06-14 19:08:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>annulen</cc>
    
    <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1662501</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-14 10:49:35 -0700</bug_when>
    <thetext>WPT: html/webappapis/system-state-and-capabilities/the-navigator-object/navigator-pluginarray.html fails due to lack of caching of Plugin objects

Test: http://wpt.live/html/webappapis/system-state-and-capabilities/the-navigator-object/navigator-pluginarray.html
Spec: https://html.spec.whatwg.org/multipage/system-state.html#navigatorplugins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662502</commentid>
    <comment_count>1</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-14 10:50:16 -0700</bug_when>
    <thetext>Seems like a good opportunity to overhaul the DOM plugin stuff to simplify / match the spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662504</commentid>
    <comment_count>2</comment_count>
      <attachid>401867</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-14 11:03:09 -0700</bug_when>
    <thetext>Created attachment 401867
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662505</commentid>
    <comment_count>3</comment_count>
      <attachid>401868</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-14 11:46:25 -0700</bug_when>
    <thetext>Created attachment 401868
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662506</commentid>
    <comment_count>4</comment_count>
      <attachid>401869</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-14 11:50:25 -0700</bug_when>
    <thetext>Created attachment 401869
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662513</commentid>
    <comment_count>5</comment_count>
      <attachid>401871</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-14 13:06:25 -0700</bug_when>
    <thetext>Created attachment 401871
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662515</commentid>
    <comment_count>6</comment_count>
      <attachid>401872</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-14 13:18:29 -0700</bug_when>
    <thetext>Created attachment 401872
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662516</commentid>
    <comment_count>7</comment_count>
      <attachid>401872</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-14 13:40:32 -0700</bug_when>
    <thetext>Comment on attachment 401872
Patch

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

&gt; Source/WebCore/ChangeLog:23
&gt; +        [WORK IN PROGRESS]

How is &quot;review?&quot; consistent with this?

&gt; Source/WebCore/loader/SubframeLoader.cpp:178
&gt; +    for (auto&amp; mimeType : page.pluginData().webVisibleMimeTypes()) {
&gt; +        for (auto&amp; mimeTypeExtension : mimeType.extensions) {

I totally would have used the names &quot;type&quot; and &quot;extension&quot;. Big believer in single words and shorter names taking advantage of narrow scope.

&gt; Source/WebCore/page/Navigator.cpp:218
&gt; +    if (publiclyVisiblePlugins.size() &gt; 0) {

Don’t need this if statement. Code below is harmless if size is 0.

&gt; Source/WebCore/page/Navigator.cpp:221
&gt; +            auto domPlugin = DOMPlugin::create(*this, plugin);

I would name this &quot;wrapper&quot;.

&gt; Source/WebCore/page/Navigator.cpp:222
&gt; +            for (auto&amp; domMimeType : domPlugin-&gt;mimeTypes())

I would name this &quot;type&quot;. But also, can you use appendVector or something else like that?

&gt; Source/WebCore/page/Navigator.cpp:227
&gt; +    if (additionalWebVisibilePlugins.size() &gt; 0) {

Ditto.

&gt; Source/WebCore/page/Navigator.cpp:230
&gt; +            auto domPlugin = DOMPlugin::create(*this, plugin);

Ditto.

&gt; Source/WebCore/page/Navigator.cpp:231
&gt; +            for (auto&amp; domMimeType : domPlugin-&gt;mimeTypes())

Ditto.

&gt; Source/WebCore/page/Navigator.h:71
&gt; +    void initializePluginAndMIMETypeArraysIfNeeded();

Don’t really think we need &quot;if needed&quot; in this function name.

&gt; Source/WebCore/plugins/DOMMimeType.cpp:60
&gt; +    return m_enabledPlugin.get();

Surprised that we need &quot;get()&quot;.

&gt; Source/WebCore/plugins/DOMMimeTypeArray.cpp:54
&gt; +    for (auto&amp; mimeType : m_mimeTypes) {

I’d use the name &quot;type&quot;.

&gt; Source/WebCore/plugins/DOMMimeTypeArray.cpp:65
&gt; +    for (auto&amp; mimeType : m_mimeTypes)

Ditto.

&gt; Source/WebCore/plugins/DOMMimeTypeArray.h:37
&gt; +    static Ref&lt;DOMMimeTypeArray&gt; create(Navigator&amp; navigator, Vector&lt;Ref&lt;DOMMimeType&gt;&gt;&amp;&amp; mimeTypes = { }) { return adoptRef(*new DOMMimeTypeArray(navigator, WTFMove(mimeTypes))); }

I think I would use &quot;types&quot;. But also, these kinds of create functions don’t need to be inlined in the header. If the constructor gets inlined in the create function that’s better than the create function getting inlined at the call site, so I suggest putting these in .cpp files.

&gt; Source/WebCore/plugins/DOMMimeTypeArray.h:48
&gt; +    explicit DOMMimeTypeArray(Navigator&amp;, Vector&lt;Ref&lt;DOMMimeType&gt;&gt;&amp;&amp; mimeTypes);

Don’t think we need the name &quot;mimeTypes&quot; here.

&gt; Source/WebCore/plugins/DOMPlugin.cpp:41
&gt; +    m_mimeTypes.reserveInitialCapacity(m_pluginInfo.mimes.size());
&gt; +    for (auto&amp; mimeType : m_pluginInfo.mimes)
&gt; +        m_mimeTypes.uncheckedAppend(DOMMimeType::create(navigator, mimeType, *this));
&gt; +
&gt; +    std::sort(m_mimeTypes.begin(), m_mimeTypes.end(), [](const Ref&lt;DOMMimeType&gt;&amp; a, const Ref&lt;DOMMimeType&gt;&amp; b) {
&gt; +        return codePointCompareLessThan(a-&gt;type(), b-&gt;type());
&gt; +    });

Would slightly prefer this be in a block or function and use construction rather than initialization.

&gt; Source/WebCore/plugins/DOMPlugin.cpp:75
&gt; +    for (auto&amp; mimeType : m_mimeTypes) {

Consider &quot;type&quot;.

&gt; Source/WebCore/plugins/DOMPlugin.cpp:86
&gt; +    for (auto&amp; mimeType : m_mimeTypes)

Consider &quot;type&quot;.

&gt; Source/WebCore/plugins/DOMPlugin.h:36
&gt; +    static Ref&lt;DOMPlugin&gt; create(Navigator&amp; navigator, const PluginInfo&amp; pluginInfo) { return adoptRef(*new DOMPlugin(navigator, pluginInfo)); }

Same thought about &quot;create&quot; function inlining and about naming the argument just &quot;info&quot;.

&gt; Source/WebCore/plugins/DOMPluginArray.cpp:35
&gt; +    , m_publiclyVisiblePlugins(publiclyVisiblePlugins)

Missing WTFMove.

&gt; Source/WebCore/plugins/DOMPluginArray.cpp:36
&gt; +    , m_additionalWebVisibilePlugins(additionalWebVisibilePlugins)

Ditto.

&gt; Source/WebCore/plugins/DOMPluginArray.h:38
&gt; +    static Ref&lt;DOMPluginArray&gt; create(Navigator&amp; navigator, Vector&lt;Ref&lt;DOMPlugin&gt;&gt;&amp;&amp; publiclyVisiblePlugins = { }, Vector&lt;Ref&lt;DOMPlugin&gt;&gt;&amp;&amp; additionalWebVisibilePlugins = { }) { return adoptRef(*new DOMPluginArray(navigator, WTFMove(publiclyVisiblePlugins), WTFMove(additionalWebVisibilePlugins))); }

Same thought about not putting &quot;create&quot; in headers.

&gt; Source/WebCore/plugins/PluginData.cpp:116
&gt; +        for (auto&amp; mime : plugin.mimes)

Maybe &quot;type&quot; instead of &quot;mime&quot;?

&gt; Source/WebCore/plugins/PluginData.cpp:124
&gt; +    for (auto plugin : plugins) {

Maybe auto&amp; instead of auto?

&gt; Source/WebCore/plugins/PluginData.cpp:125
&gt;          for (auto&amp; mime : plugin.mimes) {

Ditto.

&gt; Source/WebCore/plugins/PluginData.cpp:149
&gt; +    if (!m_cachedVisiblePlugins.pluginList)
&gt; +        return false;
&gt; +    return supportsMimeTypeForPlugins(mimeType, allowedPluginTypes, *m_cachedVisiblePlugins.pluginList);

Maybe:

    return list &amp;&amp; ...

Instead? Or I guess could leave it like this so we don’t end up with a long line or a local variable.

&gt; Source/WebCore/plugins/PluginData.cpp:155
&gt; +        for (auto&amp; mime : plugin.mimes) {

Consider the name &quot;type&quot;.

&gt; Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:1660
&gt; +    for (auto&amp; mimeType : pluginData.webVisibleMimeTypes()) {

Consider just &quot;type&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662520</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-14 14:37:52 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #7)
&gt; Comment on attachment 401872 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=401872&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:23
&gt; &gt; +        [WORK IN PROGRESS]
&gt; 
&gt; How is &quot;review?&quot; consistent with this?

:(. Oh no, it wasn&apos;t meant for review quite yet, but I forgot to use webkit-patch post --no-review as I iterated on fixing non-macOS build failures. :(. That said, it&apos;s pretty much done, so I think it&apos;s perfectly acceptable to review. I just want to improve the ChangeLogs and this should also fix some tests, so I want update the results. 

I will also address all the feedback, thanks for taking the time!

&gt; 
&gt; &gt; Source/WebCore/loader/SubframeLoader.cpp:178
&gt; &gt; +    for (auto&amp; mimeType : page.pluginData().webVisibleMimeTypes()) {
&gt; &gt; +        for (auto&amp; mimeTypeExtension : mimeType.extensions) {
&gt; 
&gt; I totally would have used the names &quot;type&quot; and &quot;extension&quot;. Big believer in
&gt; single words and shorter names taking advantage of narrow scope.

Done.

&gt; 
&gt; &gt; Source/WebCore/page/Navigator.cpp:218
&gt; &gt; +    if (publiclyVisiblePlugins.size() &gt; 0) {
&gt; 
&gt; Don’t need this if statement. Code below is harmless if size is 0.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/page/Navigator.cpp:221
&gt; &gt; +            auto domPlugin = DOMPlugin::create(*this, plugin);
&gt; 
&gt; I would name this &quot;wrapper&quot;.

Done.

&gt; 
&gt; &gt; Source/WebCore/page/Navigator.cpp:222
&gt; &gt; +            for (auto&amp; domMimeType : domPlugin-&gt;mimeTypes())
&gt; 
&gt; I would name this &quot;type&quot;. But also, can you use appendVector or something
&gt; else like that?

Yup. Used appendVector. Forgot about that. 

&gt; 
&gt; &gt; Source/WebCore/page/Navigator.cpp:227
&gt; &gt; +    if (additionalWebVisibilePlugins.size() &gt; 0) {
&gt; 
&gt; Ditto.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/page/Navigator.cpp:230
&gt; &gt; +            auto domPlugin = DOMPlugin::create(*this, plugin);
&gt; 
&gt; Ditto.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/page/Navigator.cpp:231
&gt; &gt; +            for (auto&amp; domMimeType : domPlugin-&gt;mimeTypes())
&gt; 
&gt; Ditto.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/page/Navigator.h:71
&gt; &gt; +    void initializePluginAndMIMETypeArraysIfNeeded();
&gt; 
&gt; Don’t really think we need &quot;if needed&quot; in this function name.

Removed.

&gt; 
&gt; &gt; Source/WebCore/plugins/DOMMimeType.cpp:60
&gt; &gt; +    return m_enabledPlugin.get();
&gt; 
&gt; Surprised that we need &quot;get()&quot;.

Not sure we do. Will check.

&gt; 
&gt; &gt; Source/WebCore/plugins/DOMMimeTypeArray.cpp:54
&gt; &gt; +    for (auto&amp; mimeType : m_mimeTypes) {
&gt; 
&gt; I’d use the name &quot;type&quot;.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/plugins/DOMMimeTypeArray.cpp:65
&gt; &gt; +    for (auto&amp; mimeType : m_mimeTypes)
&gt; 
&gt; Ditto.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/plugins/DOMMimeTypeArray.h:37
&gt; &gt; +    static Ref&lt;DOMMimeTypeArray&gt; create(Navigator&amp; navigator, Vector&lt;Ref&lt;DOMMimeType&gt;&gt;&amp;&amp; mimeTypes = { }) { return adoptRef(*new DOMMimeTypeArray(navigator, WTFMove(mimeTypes))); }
&gt; 
&gt; I think I would use &quot;types&quot;. But also, these kinds of create functions don’t
&gt; need to be inlined in the header. If the constructor gets inlined in the
&gt; create function that’s better than the create function getting inlined at
&gt; the call site, so I suggest putting these in .cpp files.

Good call.

&gt; 
&gt; &gt; Source/WebCore/plugins/DOMMimeTypeArray.h:48
&gt; &gt; +    explicit DOMMimeTypeArray(Navigator&amp;, Vector&lt;Ref&lt;DOMMimeType&gt;&gt;&amp;&amp; mimeTypes);
&gt; 
&gt; Don’t think we need the name &quot;mimeTypes&quot; here.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/plugins/DOMPlugin.cpp:41
&gt; &gt; +    m_mimeTypes.reserveInitialCapacity(m_pluginInfo.mimes.size());
&gt; &gt; +    for (auto&amp; mimeType : m_pluginInfo.mimes)
&gt; &gt; +        m_mimeTypes.uncheckedAppend(DOMMimeType::create(navigator, mimeType, *this));
&gt; &gt; +
&gt; &gt; +    std::sort(m_mimeTypes.begin(), m_mimeTypes.end(), [](const Ref&lt;DOMMimeType&gt;&amp; a, const Ref&lt;DOMMimeType&gt;&amp; b) {
&gt; &gt; +        return codePointCompareLessThan(a-&gt;type(), b-&gt;type());
&gt; &gt; +    });
&gt; 
&gt; Would slightly prefer this be in a block or function and use construction
&gt; rather than initialization.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/plugins/DOMPlugin.cpp:75
&gt; &gt; +    for (auto&amp; mimeType : m_mimeTypes) {
&gt; 
&gt; Consider &quot;type&quot;.


Fixed.

&gt; 
&gt; &gt; Source/WebCore/plugins/DOMPlugin.cpp:86
&gt; &gt; +    for (auto&amp; mimeType : m_mimeTypes)
&gt; 
&gt; Consider &quot;type&quot;.

Fixed

&gt; 
&gt; &gt; Source/WebCore/plugins/DOMPlugin.h:36
&gt; &gt; +    static Ref&lt;DOMPlugin&gt; create(Navigator&amp; navigator, const PluginInfo&amp; pluginInfo) { return adoptRef(*new DOMPlugin(navigator, pluginInfo)); }
&gt; 
&gt; Same thought about &quot;create&quot; function inlining and about naming the argument
&gt; just &quot;info&quot;.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/plugins/DOMPluginArray.cpp:35
&gt; &gt; +    , m_publiclyVisiblePlugins(publiclyVisiblePlugins)
&gt; 
&gt; Missing WTFMove.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/plugins/DOMPluginArray.cpp:36
&gt; &gt; +    , m_additionalWebVisibilePlugins(additionalWebVisibilePlugins)
&gt; 
&gt; Ditto.

Fixed.
&gt; 
&gt; &gt; Source/WebCore/plugins/DOMPluginArray.h:38
&gt; &gt; +    static Ref&lt;DOMPluginArray&gt; create(Navigator&amp; navigator, Vector&lt;Ref&lt;DOMPlugin&gt;&gt;&amp;&amp; publiclyVisiblePlugins = { }, Vector&lt;Ref&lt;DOMPlugin&gt;&gt;&amp;&amp; additionalWebVisibilePlugins = { }) { return adoptRef(*new DOMPluginArray(navigator, WTFMove(publiclyVisiblePlugins), WTFMove(additionalWebVisibilePlugins))); }
&gt; 
&gt; Same thought about not putting &quot;create&quot; in headers.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/plugins/PluginData.cpp:116
&gt; &gt; +        for (auto&amp; mime : plugin.mimes)
&gt; 
&gt; Maybe &quot;type&quot; instead of &quot;mime&quot;?


Fixed.

&gt; 
&gt; &gt; Source/WebCore/plugins/PluginData.cpp:124
&gt; &gt; +    for (auto plugin : plugins) {
&gt; 
&gt; Maybe auto&amp; instead of auto?

Fixed.

&gt; 
&gt; &gt; Source/WebCore/plugins/PluginData.cpp:125
&gt; &gt;          for (auto&amp; mime : plugin.mimes) {
&gt; 
&gt; Ditto.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/plugins/PluginData.cpp:149
&gt; &gt; +    if (!m_cachedVisiblePlugins.pluginList)
&gt; &gt; +        return false;
&gt; &gt; +    return supportsMimeTypeForPlugins(mimeType, allowedPluginTypes, *m_cachedVisiblePlugins.pluginList);
&gt; 
&gt; Maybe:
&gt; 
&gt;     return list &amp;&amp; ...
&gt; 
&gt; Instead? Or I guess could leave it like this so we don’t end up with a long
&gt; line or a local variable.
&gt; 
&gt; &gt; Source/WebCore/plugins/PluginData.cpp:155
&gt; &gt; +        for (auto&amp; mime : plugin.mimes) {
&gt; 
&gt; Consider the name &quot;type&quot;.

Fixed.

&gt; 
&gt; &gt; Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:1660
&gt; &gt; +    for (auto&amp; mimeType : pluginData.webVisibleMimeTypes()) {
&gt; 
&gt; Consider just &quot;type&quot;?

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662521</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-14 14:43:12 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #8)
&gt; (In reply to Darin Adler from comment #7)
&gt; &gt; Comment on attachment 401872 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=401872&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/plugins/DOMMimeType.cpp:60
&gt; &gt; &gt; +    return m_enabledPlugin.get();
&gt; &gt; 
&gt; &gt; Surprised that we need &quot;get()&quot;.
&gt; 
&gt; Not sure we do. Will check.
&gt; 

Yeah, it&apos;s needed unfortunately. m_enabledPlugin is a WeakPtr&lt;DOMPlugin&gt; and apparently there is no implicit conversion from WeakPtr to RefPtr. Seems like it would probably be fine add.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662526</commentid>
    <comment_count>10</comment_count>
      <attachid>401874</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-14 16:11:52 -0700</bug_when>
    <thetext>Created attachment 401874
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662527</commentid>
    <comment_count>11</comment_count>
      <attachid>401874</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-14 16:16:13 -0700</bug_when>
    <thetext>Comment on attachment 401874
Patch

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

&gt; Source/WebCore/page/Navigator.cpp:215
&gt; +    Vector&lt;Ref&lt;DOMPlugin&gt;&gt; additionalWebVisibileDOMPlugins;

typo: visibile

&gt; Source/WebCore/page/Navigator.cpp:232
&gt; +    std::sort(publiclyVisibleDOMPlugins.begin(), publiclyVisibleDOMPlugins.end(), [](const Ref&lt;DOMPlugin&gt;&amp; a, const Ref&lt;DOMPlugin&gt;&amp; b) {

Should double check that there is some reason these names can never be duplicated. if they could, we would probably want to use a stable sort, or compare something else as a secondary key.

&gt; Source/WebCore/page/Navigator.cpp:236
&gt; +    std::sort(webVisibileDOMMimeTypes.begin(), webVisibileDOMMimeTypes.end(), [](const Ref&lt;DOMMimeType&gt;&amp; a, const Ref&lt;DOMMimeType&gt;&amp; b) {

Should double check that there is some reason these type strings can never be duplicated. if they could, we would probably want to use a stable sort, or compare something else as a secondary key.

&gt; Source/WebCore/page/Navigator.cpp:241
&gt; +    // named property look up, sort their order is not exposed.

&quot;sort their order&quot; -&gt; &quot;so their order&quot;

&gt; Source/WebCore/plugins/DOMPlugin.cpp:43
&gt; +    std::sort(types.begin(), types.end(), [](const Ref&lt;DOMMimeType&gt;&amp; a, const Ref&lt;DOMMimeType&gt;&amp; b) {

Should double check that there is some reason these type strings can never be duplicated. if they could, we would probably want to use a stable sort, or compare something else as a secondary key.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662533</commentid>
    <comment_count>12</comment_count>
      <attachid>401874</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-14 17:01:15 -0700</bug_when>
    <thetext>Comment on attachment 401874
Patch

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

&gt;&gt; Source/WebCore/page/Navigator.cpp:215
&gt;&gt; +    Vector&lt;Ref&lt;DOMPlugin&gt;&gt; additionalWebVisibileDOMPlugins;
&gt; 
&gt; typo: visibile

Oh man, I did that one a bunch :(. Visi-bile sounds really awful.

&gt;&gt; Source/WebCore/page/Navigator.cpp:232
&gt;&gt; +    std::sort(publiclyVisibleDOMPlugins.begin(), publiclyVisibleDOMPlugins.end(), [](const Ref&lt;DOMPlugin&gt;&amp; a, const Ref&lt;DOMPlugin&gt;&amp; b) {
&gt; 
&gt; Should double check that there is some reason these names can never be duplicated. if they could, we would probably want to use a stable sort, or compare something else as a secondary key.

Hm, that&apos;s an interesting point. The old code did essentially the same sort (see the old PluginData::publiclyVisiblePlugins()), but that doesn&apos;t mean it was safe to do there either. 

Looking through the WebKit code that creates the plugin data, it looks to me like there isn&apos;t anything that ensures that plugins don&apos;t have the same name, but we do guarantee that the bundleIdentifiers are unique, so I will use that as the secondary key.

    std::sort(publiclyVisibleDOMPlugins.begin(), publiclyVisibleDOMPlugins.end(), [](const Ref&lt;DOMPlugin&gt;&amp; a, const Ref&lt;DOMPlugin&gt;&amp; b) {
        if (auto nameComparison = codePointCompare(a-&gt;info().name, b-&gt;info().name))
            return nameComparison &lt; 0;
        return codePointCompareLessThan(a-&gt;info().bundleIdentifier, b-&gt;info().bundleIdentifier);
    });


For the mime types, they are guaranteed to be unique for an individual plugin, but I can&apos;t see anything that would ensure that across plugins. So, for the sort in DOMPlugin&apos;s makeMimeTypes(), we don&apos;t need a secondary key, but for the one Navigator::initializePluginAndMIMETypeArrays() we do. Fortunately, we can use the associated plugin&apos;s bundle identifier for that as well.

    std::sort(webVisibleDOMMimeTypes.begin(), webVisibleDOMMimeTypes.end(), [](const Ref&lt;DOMMimeType&gt;&amp; a, const Ref&lt;DOMMimeType&gt;&amp; b) {
        if (auto typeComparison = codePointCompare(a-&gt;type(), b-&gt;type()))
            return typeComparison &lt; 0;
        return codePointCompareLessThan(a-&gt;enabledPlugin()-&gt;info().bundleIdentifier, b-&gt;enabledPlugin()-&gt;info().bundleIdentifier);
    });</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662535</commentid>
    <comment_count>13</comment_count>
      <attachid>401877</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-14 17:17:55 -0700</bug_when>
    <thetext>Created attachment 401877
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662539</commentid>
    <comment_count>14</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-06-14 19:07:12 -0700</bug_when>
    <thetext>Committed r263017: &lt;https://trac.webkit.org/changeset/263017&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 401877.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662540</commentid>
    <comment_count>15</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-06-14 19:08:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/64347684&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662541</commentid>
    <comment_count>16</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-06-14 19:08:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/64347685&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401867</attachid>
            <date>2020-06-14 11:03:09 -0700</date>
            <delta_ts>2020-06-14 11:46:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213185-20200614110309.patch</filename>
            <type>text/plain</type>
            <size>39856</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzAxMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBACisyMDIwLTA2LTE0ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbV1BUXSBodG1sL3dlYmFwcGFwaXMv
c3lzdGVtLXN0YXRlLWFuZC1jYXBhYmlsaXRpZXMvdGhlLW5hdmlnYXRvci1vYmplY3QvbmF2aWdh
dG9yLXBsdWdpbmFycmF5Lmh0bWwgZmFpbHMgZHVlIHRvIGxhY2sgb2YgY2FjaGluZyBvZiBQbHVn
aW4gb2JqZWN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjEzMTg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgT3ZlcmhhdWwgd2ViIGV4cG9zZWQgcGx1Z2luIEFQSXM6CisgICAgICAgIC0gQWxsIERPTVBs
dWdpbiBhbmQgRE9NTWltZVR5cGVzIGFyZSBub3cgY3JlYXRlZCB0b2dldGhlciAoYWxvbmcgd2l0
aCB0aGUgRE9NUGx1Z2luQXJyYXkgYW5kIAorICAgICAgICAgIERPTU1pbWVUeXBlQXJyYXkpIG9u
IGZpcnN0IGFjY2VzcyBvZiBlaXRoZXIgbmF2aWdhdG9yLnBsdWdpbnMgb3IgbmF2aWdhdG9yLm1p
bWVUeXBlcy4KKyAgICAgICAgLSBET01QbHVnaW5zIGFyZSBjcmVhdGVkIGFuZCBzdG9yZWQgaW4g
dGhlIERPTVBsdWdpbkFycmF5IChmaXhpbmcgdGhlIGluaXRpYWwgbGFjayBvZiBjYWNoaW5nIGlz
c3VlKQorICAgICAgICAtIERPTU1pbWVUeXBlcyBhcmUgY3JlYXRlZCBhbmQgc3RvcmVkIGluIHRo
ZSBET01NaW1lVHlwZUFycmF5LgorICAgICAgICAtIERPTVBsdWdpbnMgaG9sZCBhIHN0cm9uZyBy
ZWZlcmVuY2UgdG8gdGhlaXIgYXNzb2NpYXRlZCBET01NaW1lVHlwZS4gVGhlIERPTU1pbWVUeXBl
IGhhcworICAgICAgICAgIGEgd2VhayByZWZlcmVuY2UgYmFjayB0byB0aGUgRE9NUGx1Z2luLiBU
aGlzIG1lYW5zIGZvciBhIHNpbmdsZSBleGVjdXRhdGlvbiBjb250ZXh0LCB3ZSBvbmx5CisgICAg
ICAgICAgZXZlciBjcmVhdGUgb25lIERPTVBsdWdpbiAvIERPTU1pbWVUeXBlIGZvciBlYWNoIHVu
ZGVybHlpbmcgcGx1Z2luIC8gbWltZXR5cGUuCisgICAgICAgIC0gVXBkYXRlIEdDIHNvIHRoYXQg
RE9NUGx1Z2luIGFuZCBET01NaW1lVHlwZSAoaW4gYWRkaXRpb24gdG8gRE9NUGx1Z2luQXJyYXkg
YW5kIERPTU1pbWVUeXBlQXJyYXkKKyAgICAgICAgICB3aGljaCB3ZXJlIGFscmVhZHkgZG9pbmcg
dGhpcykgdXNlIG5hdmlnYXRvciByZWFjaGFiaWxpdHkgZm9yIHRoZWlyIGxpZmV0aW1lLiBUaGlz
IGlzIGFsbW9zdAorICAgICAgICAgIGNvcnJlY3QsIGV4Y2VwdCBpZiB3ZSBldmVyIGltcGxlbWVu
dCBET01QbHVnaW5BcnJheS5yZWZyZXNoKGZhbHNlKSB0byBtYXRjaCB0aGUgc3BlYywgaW4gd2hp
Y2gKKyAgICAgICAgICBjYXNlIHlvdSBjb3VsZCBlbmQgdXAgd2l0aCBzb21lIERPTVBsdWdpbnMg
YW5kIERPTU1pbWVUeXBlcyB0aGF0IGFyZSBtYXJrZWQgYXMgcmVhY2hhYmxlIHdoZW4KKyAgICAg
ICAgICB0aGV5IHJlYWxseSBhcmUgbm90LCBidXQgb25seSBwbHVnaW5zIHRoYXQgd2VyZSByZW1v
dmVkLiBUaGlzIHNlZW1zIHNvIHVubGlrZWx5IHRvIG1hdHRlciB0aGF0CisgICAgICAgICAgaW1w
bGVtZW50aW5nIGEgbW9yZSBzdHJpY3QgcmVhY2hhYmlsaXR5IGZ1bmN0aW9uIHNlZW1zIGxpa2Ug
dGhlIHdyb25nIHdheSB0byBnby4KKyAgICAgICAgICAKKyAgICAgICAgW1dPUksgSU4gUFJPR1JF
U1NdCisKKyAgICAgICAgKiBsb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6ZmluZFBsdWdpbk1JTUVUeXBlRnJvbVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpsb2dQ
bHVnaW5SZXF1ZXN0KToKKyAgICAgICAgKiBwYWdlL05hdmlnYXRvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpOYXZpZ2F0b3I6OmluaXRpYWxpemVQbHVnaW5BbmRNSU1FVHlwZUFycmF5c0lmTmVl
ZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6cGx1Z2lucyk6CisgICAgICAgIChX
ZWJDb3JlOjpOYXZpZ2F0b3I6Om1pbWVUeXBlcyk6CisgICAgICAgICogcGFnZS9OYXZpZ2F0b3Iu
aDoKKyAgICAgICAgKiBwbHVnaW5zL0RPTU1pbWVUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRPTU1pbWVUeXBlOjpET01NaW1lVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpET01NaW1lVHlw
ZTo6c3VmZml4ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RE9NTWltZVR5cGU6OmVuYWJs
ZWRQbHVnaW4gY29uc3QpOgorICAgICAgICAqIHBsdWdpbnMvRE9NTWltZVR5cGUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTU1pbWVUeXBlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RE9N
TWltZVR5cGU6Om5hdmlnYXRvcik6CisgICAgICAgICogcGx1Z2lucy9ET01NaW1lVHlwZS5pZGw6
CisgICAgICAgICogcGx1Z2lucy9ET01NaW1lVHlwZUFycmF5LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRPTU1pbWVUeXBlQXJyYXk6OkRPTU1pbWVUeXBlQXJyYXkpOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NTWltZVR5cGVBcnJheTo6bGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRP
TU1pbWVUeXBlQXJyYXk6Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RE9NTWltZVR5cGVBcnJh
eTo6bmFtZWRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTU1pbWVUeXBlQXJyYXk6OnN1cHBv
cnRlZFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6RE9NTWltZVR5cGVBcnJheTo6
Z2V0UGx1Z2luRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGx1Z2lucy9ET01NaW1l
VHlwZUFycmF5Lmg6CisgICAgICAgICogcGx1Z2lucy9ET01QbHVnaW4uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RE9NUGx1Z2luOjpET01QbHVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6RE9NUGx1
Z2luOjppdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBsdWdpbjo6bmFtZWRJdGVtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRPTVBsdWdpbjo6c3VwcG9ydGVkUHJvcGVydHlOYW1lcyk6CisgICAg
ICAgICogcGx1Z2lucy9ET01QbHVnaW4uaDoKKyAgICAgICAgKiBwbHVnaW5zL0RPTVBsdWdpbi5p
ZGw6CisgICAgICAgICogcGx1Z2lucy9ET01QbHVnaW5BcnJheS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpET01QbHVnaW5BcnJheTo6RE9NUGx1Z2luQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6
RE9NUGx1Z2luQXJyYXk6Omxlbmd0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpET01QbHVn
aW5BcnJheTo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpET01QbHVnaW5BcnJheTo6bmFtZWRJ
dGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBsdWdpbkFycmF5OjpzdXBwb3J0ZWRQcm9wZXJ0
eU5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBsdWdpbkFycmF5OjpwbHVnaW5EYXRhIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbHVnaW5zL0RPTVBsdWdpbkFycmF5Lmg6CisgICAg
ICAgICogcGx1Z2lucy9QbHVnaW5EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRh
dGE6OmluaXRQbHVnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OnB1YmxpY2x5
VmlzaWJsZVBsdWdpbnNBbmRBZGRpdGlvbmFsV2ViVmlzaWJsZVBsdWdpbnMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6d2ViVmlzaWJsZU1pbWVUeXBlcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpzdXBwb3J0c01pbWVUeXBlRm9yUGx1Z2lucyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5EYXRhOjpzdXBwb3J0c01pbWVUeXBlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpbkRhdGE6OnN1cHBvcnRzV2ViVmlzaWJsZU1pbWVUeXBlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OnN1cHBvcnRzV2ViVmlzaWJsZU1pbWVUeXBlRm9y
VVJMIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OnBsdWdpbkZpbGVGb3JX
ZWJWaXNpYmxlTWltZVR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6
cHVibGljbHlWaXNpYmxlUGx1Z2lucyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5EYXRhOjpnZXRXZWJWaXNpYmxlTWltZXNBbmRQbHVnaW5JbmRpY2VzIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OmdldE1pbWVzQW5kUGx1Z2lu
SW5kaWNlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhOjpn
ZXRNaW1lc0FuZFBsdWdpbkluZGljaWVzRm9yUGx1Z2lucyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhOjpnZXRQbHVnaW5JbmZvRm9yV2ViVmlzaWJsZU1pbWVU
eXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpbkRhdGEuaDoKKwog
MjAyMC0wNi0xNCAgVGV0c3VoYXJ1IE9oemVraSAgPHRldHN1aGFydS5vaHpla2lAZ21haWwuY29t
PgogCiAgICAgICAgIFdpdGhkcmF3IEZpbGVSZWFkZXJTeW5jIGZyb20gU2VydmljZVdvcmtlcgpJ
bmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiAy
NjMwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjMsMzAgKzE2MywyNSBAQCBib29sIEZyYW1lTG9hZGVyOjpTdWJmcmFt
ZUxvYWRlcjo6cmVxdWVzCiAgICAgcmV0dXJuIGxvYWRQbHVnaW4ob3duZXJFbGVtZW50LCB1cmws
IG1pbWVUeXBlLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywgdXNlRmFsbGJhY2spOwogfQogCi1z
dGF0aWMgU3RyaW5nIGZpbmRQbHVnaW5NSU1FVHlwZUZyb21VUkwoUGFnZSogcGFnZSwgY29uc3Qg
U3RyaW5nJiB1cmwpCitzdGF0aWMgU3RyaW5nIGZpbmRQbHVnaW5NSU1FVHlwZUZyb21VUkwoUGFn
ZSYgcGFnZSwgY29uc3QgU3RyaW5nVmlldyYgdXJsKQogewogICAgIGlmICghdXJsKQotICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBzaXplX3QgZG90
SW5kZXggPSB1cmwucmV2ZXJzZUZpbmQoJy4nKTsKICAgICBpZiAoZG90SW5kZXggPT0gbm90Rm91
bmQpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAg
IFN0cmluZyBleHRlbnNpb24gPSB1cmwuc3Vic3RyaW5nKGRvdEluZGV4ICsgMSk7CisgICAgYXV0
byBleHRlbnNpb24gPSB1cmwuc3Vic3RyaW5nKGRvdEluZGV4ICsgMSk7CiAKLSAgICBjb25zdCBQ
bHVnaW5EYXRhJiBwbHVnaW5EYXRhID0gcGFnZS0+cGx1Z2luRGF0YSgpOwotCi0gICAgVmVjdG9y
PE1pbWVDbGFzc0luZm8+IG1pbWVzOwotICAgIFZlY3RvcjxzaXplX3Q+IG1pbWVQbHVnaW5JbmRp
Y2VzOwotICAgIHBsdWdpbkRhdGEuZ2V0V2ViVmlzaWJsZU1pbWVzQW5kUGx1Z2luSW5kaWNlcyht
aW1lcywgbWltZVBsdWdpbkluZGljZXMpOwotICAgIGZvciAoYXV0byYgbWltZSA6IG1pbWVzKSB7
Ci0gICAgICAgIGZvciAoYXV0byYgbWltZUV4dGVuc2lvbiA6IG1pbWUuZXh0ZW5zaW9ucykgewot
ICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZXh0ZW5zaW9uLCBtaW1lRXh0
ZW5zaW9uKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbWltZS50eXBlOworICAgIGZvciAoYXV0
byYgbWltZVR5cGUgOiBwYWdlLnBsdWdpbkRhdGEoKS53ZWJWaXNpYmxlTWltZVR5cGVzKCkpIHsK
KyAgICAgICAgZm9yIChhdXRvJiBtaW1lVHlwZUV4dGVuc2lvbiA6IG1pbWVUeXBlLmV4dGVuc2lv
bnMpIHsKKyAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGV4dGVuc2lvbiwg
bWltZVR5cGVFeHRlbnNpb24pKQorICAgICAgICAgICAgICAgIHJldHVybiBtaW1lVHlwZS50eXBl
OwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiB7
IH07CiB9CiAKIHN0YXRpYyB2b2lkIGxvZ1BsdWdpblJlcXVlc3QoUGFnZSogcGFnZSwgY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgc3VjY2VzcykKQEAgLTE5
Nyw3ICsxOTIsNyBAQCBzdGF0aWMgdm9pZCBsb2dQbHVnaW5SZXF1ZXN0KFBhZ2UqIHBhZ2UsCiAg
ICAgU3RyaW5nIG5ld01JTUVUeXBlID0gbWltZVR5cGU7CiAgICAgaWYgKCFuZXdNSU1FVHlwZSkg
ewogICAgICAgICAvLyBUcnkgdG8gZmlndXJlIG91dCB0aGUgTUlNRSB0eXBlIGZyb20gdGhlIFVS
TCBleHRlbnNpb24uCi0gICAgICAgIG5ld01JTUVUeXBlID0gZmluZFBsdWdpbk1JTUVUeXBlRnJv
bVVSTChwYWdlLCB1cmwpOworICAgICAgICBuZXdNSU1FVHlwZSA9IGZpbmRQbHVnaW5NSU1FVHlw
ZUZyb21VUkwoKnBhZ2UsIHVybCk7CiAgICAgICAgIGlmICghbmV3TUlNRVR5cGUpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNwcAkocmV2
aXNpb24gMjYzMDA3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw5IEBACiAKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNs
dWRlICJDb29raWVKYXIuaCIKKyNpbmNsdWRlICJET01NaW1lVHlwZS5oIgogI2luY2x1ZGUgIkRP
TU1pbWVUeXBlQXJyYXkuaCIKKyNpbmNsdWRlICJET01QbHVnaW4uaCIKICNpbmNsdWRlICJET01Q
bHVnaW5BcnJheS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIK
QEAgLTE5NSwxNCArMTk3LDU0IEBAIHZvaWQgTmF2aWdhdG9yOjpzaG93U2hhcmVEYXRhKEV4Y2Vw
dGlvbk8KICAgICB9KTsKIH0KIAordm9pZCBOYXZpZ2F0b3I6OmluaXRpYWxpemVQbHVnaW5BbmRN
SU1FVHlwZUFycmF5c0lmTmVlZGVkKCkKK3sKKyAgICBpZiAobV9wbHVnaW5zKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBhdXRvKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFt
ZSB8fCAhZnJhbWUtPnBhZ2UoKSkgeworICAgICAgICBtX3BsdWdpbnMgPSBET01QbHVnaW5BcnJh
eTo6Y3JlYXRlKCp0aGlzKTsKKyAgICAgICAgbV9taW1lVHlwZXMgPSBET01NaW1lVHlwZUFycmF5
OjpjcmVhdGUoKnRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBbcHVi
bGljbHlWaXNpYmxlUGx1Z2lucywgYWRkaXRpb25hbFdlYlZpc2liaWxlUGx1Z2luc10gPSBmcmFt
ZS0+cGFnZSgpLT5wbHVnaW5EYXRhKCkucHVibGljbHlWaXNpYmxlUGx1Z2luc0FuZEFkZGl0aW9u
YWxXZWJWaXNpYmxlUGx1Z2lucygpOworCisgICAgVmVjdG9yPFJlZjxET01QbHVnaW4+PiBwdWJs
aWNseVZpc2libGVET01QbHVnaW5zOworICAgIFZlY3RvcjxSZWY8RE9NUGx1Z2luPj4gYWRkaXRp
b25hbFdlYlZpc2liaWxlRE9NUGx1Z2luczsKKyAgICBWZWN0b3I8UmVmPERPTU1pbWVUeXBlPj4g
d2ViVmlzaWJpbGVET01NaW1lVHlwZXM7CisKKyAgICBpZiAocHVibGljbHlWaXNpYmxlUGx1Z2lu
cy5zaXplKCkgPiAwKSB7CisgICAgICAgIGFkZGl0aW9uYWxXZWJWaXNpYmlsZURPTVBsdWdpbnMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwdWJsaWNseVZpc2libGVQbHVnaW5zLnNpemUoKSk7Cisg
ICAgICAgIGZvciAoYXV0byYgcGx1Z2luIDogcHVibGljbHlWaXNpYmxlUGx1Z2lucykgeworICAg
ICAgICAgICAgYXV0byBkb21QbHVnaW4gPSBET01QbHVnaW46OmNyZWF0ZSgqdGhpcywgcGx1Z2lu
KTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgZG9tTWltZVR5cGUgOiBkb21QbHVnaW4tPm1pbWVU
eXBlcygpKQorICAgICAgICAgICAgICAgIHdlYlZpc2liaWxlRE9NTWltZVR5cGVzLmFwcGVuZChk
b21NaW1lVHlwZSk7CisgICAgICAgICAgICBhZGRpdGlvbmFsV2ViVmlzaWJpbGVET01QbHVnaW5z
LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGRvbVBsdWdpbikpOworICAgICAgICB9CisgICAgfQor
ICAgIGlmIChhZGRpdGlvbmFsV2ViVmlzaWJpbGVQbHVnaW5zLnNpemUoKSA+IDApIHsKKyAgICAg
ICAgYWRkaXRpb25hbFdlYlZpc2liaWxlRE9NUGx1Z2lucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KGFkZGl0aW9uYWxXZWJWaXNpYmlsZVBsdWdpbnMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRv
JiBwbHVnaW4gOiBhZGRpdGlvbmFsV2ViVmlzaWJpbGVQbHVnaW5zKSB7CisgICAgICAgICAgICBh
dXRvIGRvbVBsdWdpbiA9IERPTVBsdWdpbjo6Y3JlYXRlKCp0aGlzLCBwbHVnaW4pOworICAgICAg
ICAgICAgZm9yIChhdXRvJiBkb21NaW1lVHlwZSA6IGRvbVBsdWdpbi0+bWltZVR5cGVzKCkpCisg
ICAgICAgICAgICAgICAgd2ViVmlzaWJpbGVET01NaW1lVHlwZXMuYXBwZW5kKGRvbU1pbWVUeXBl
KTsKKyAgICAgICAgICAgIGFkZGl0aW9uYWxXZWJWaXNpYmlsZURPTVBsdWdpbnMudW5jaGVja2Vk
QXBwZW5kKFdURk1vdmUoZG9tUGx1Z2luKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
bV9wbHVnaW5zID0gRE9NUGx1Z2luQXJyYXk6OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShwdWJsaWNs
eVZpc2libGVET01QbHVnaW5zKSwgV1RGTW92ZShhZGRpdGlvbmFsV2ViVmlzaWJpbGVET01QbHVn
aW5zKSk7CisgICAgbV9taW1lVHlwZXMgPSBET01NaW1lVHlwZUFycmF5OjpjcmVhdGUoKnRoaXMs
IFdURk1vdmUod2ViVmlzaWJpbGVET01NaW1lVHlwZXMpKTsKK30KKwogRE9NUGx1Z2luQXJyYXkm
IE5hdmlnYXRvcjo6cGx1Z2lucygpCiB7CiAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgewogICAgICAgICBp
ZiAoYXV0byogZnJhbWUgPSB0aGlzLT5mcmFtZSgpKQogICAgICAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ05hdmlnYXRvckFQSUFjY2Vzc2VkKCpmcmFtZS0+ZG9jdW1l
bnQoKSwgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6TmF2aWdhdG9yQVBJOjpQbHVnaW5zKTsKICAg
ICB9Ci0gICAgaWYgKCFtX3BsdWdpbnMpCi0gICAgICAgIG1fcGx1Z2lucyA9IERPTVBsdWdpbkFy
cmF5OjpjcmVhdGUoKnRoaXMpOworICAgIGluaXRpYWxpemVQbHVnaW5BbmRNSU1FVHlwZUFycmF5
c0lmTmVlZGVkKCk7CiAgICAgcmV0dXJuICptX3BsdWdpbnM7CiB9CiAKQEAgLTIxMiw4ICsyNTQs
NyBAQCBET01NaW1lVHlwZUFycmF5JiBOYXZpZ2F0b3I6Om1pbWVUeXBlcygpCiAgICAgICAgIGlm
IChhdXRvKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCkpCiAgICAgICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nTmF2aWdhdG9yQVBJQWNjZXNzZWQoKmZyYW1lLT5kb2N1bWVu
dCgpLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpOYXZpZ2F0b3JBUEk6Ok1pbWVUeXBlcyk7CiAg
ICAgfQotICAgIGlmICghbV9taW1lVHlwZXMpCi0gICAgICAgIG1fbWltZVR5cGVzID0gRE9NTWlt
ZVR5cGVBcnJheTo6Y3JlYXRlKCp0aGlzKTsKKyAgICBpbml0aWFsaXplUGx1Z2luQW5kTUlNRVR5
cGVBcnJheXNJZk5lZWRlZCgpOwogICAgIHJldHVybiAqbV9taW1lVHlwZXM7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9OYXZpZ2F0b3IuaAkocmV2aXNpb24gMjYzMDA3KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9OYXZpZ2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsOCBAQCBwcml2
YXRlOgogICAgIHZvaWQgc2hvd1NoYXJlRGF0YShFeGNlcHRpb25PcjxTaGFyZURhdGFXaXRoUGFy
c2VkVVJMJj4sIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOwogICAgIGV4cGxpY2l0IE5hdmlnYXRv
cihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRE9NV2luZG93Jik7CiAKKyAgICB2b2lkIGluaXRp
YWxpemVQbHVnaW5BbmRNSU1FVHlwZUFycmF5c0lmTmVlZGVkKCk7CisKICAgICBtdXRhYmxlIFJl
ZlB0cjxTaGFyZURhdGFSZWFkZXI+IG1fbG9hZGVyOwogICAgIG11dGFibGUgYm9vbCBtX2hhc1Bl
bmRpbmdTaGFyZSB7IGZhbHNlIH07CiAgICAgbXV0YWJsZSBSZWZQdHI8RE9NUGx1Z2luQXJyYXk+
IG1fcGx1Z2luczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NTWltZVR5cGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NTWltZVR5cGUuY3BwCShy
ZXZpc2lvbiAyNjMwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTU1pbWVUeXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjAsMjMgKzIwLDE2IEBACiAjaW5jbHVkZSAiRE9NTWltZVR5
cGUuaCIKIAogI2luY2x1ZGUgIkRPTVBsdWdpbi5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5j
bHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGx1Z2lu
RGF0YS5oIgorI2luY2x1ZGUgIk5hdmlnYXRvci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ET01NaW1lVHlwZTo6RE9NTWlt
ZVR5cGUoUmVmUHRyPFBsdWdpbkRhdGE+JiYgcGx1Z2luRGF0YSwgRnJhbWUqIGZyYW1lLCB1bnNp
Z25lZCBpbmRleCkKLSAgICA6IEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlcihmcmFtZSkKLSAgICAs
IG1fcGx1Z2luRGF0YShXVEZNb3ZlKHBsdWdpbkRhdGEpKQorRE9NTWltZVR5cGU6OkRPTU1pbWVU
eXBlKE5hdmlnYXRvciYgbmF2aWdhdG9yLCBjb25zdCBNaW1lQ2xhc3NJbmZvJiBpbmZvLCBET01Q
bHVnaW4mIGVuYWJsZWRQbHVnaW4pCisgICAgOiBtX25hdmlnYXRvcihtYWtlV2Vha1B0cihuYXZp
Z2F0b3IpKQorICAgICwgbV9taW1lQ2xhc3NJbmZvKGluZm8pCisgICAgLCBtX2VuYWJsZWRQbHVn
aW4obWFrZVdlYWtQdHIoZW5hYmxlZFBsdWdpbikpCiB7Ci0gICAgVmVjdG9yPE1pbWVDbGFzc0lu
Zm8+IG1pbWVzOwotICAgIFZlY3RvcjxzaXplX3Q+IG1pbWVQbHVnaW5JbmRpY2VzOwotICAgIG1f
cGx1Z2luRGF0YS0+Z2V0V2ViVmlzaWJsZU1pbWVzQW5kUGx1Z2luSW5kaWNlcyhtaW1lcywgbWlt
ZVBsdWdpbkluZGljZXMpOwotICAgIG1fbWltZUNsYXNzSW5mbyA9IG1pbWVzW2luZGV4XTsKLSAg
ICBtX3BsdWdpbkluZm8gPSBtX3BsdWdpbkRhdGEtPndlYlZpc2libGVQbHVnaW5zKClbbWltZVBs
dWdpbkluZGljZXNbaW5kZXhdXTsKIH0KIAogRE9NTWltZVR5cGU6On5ET01NaW1lVHlwZSgpID0g
ZGVmYXVsdDsKQEAgLTQ4LDEzICs0MSwxMSBAQCBTdHJpbmcgRE9NTWltZVR5cGU6OnR5cGUoKSBj
b25zdAogCiBTdHJpbmcgRE9NTWltZVR5cGU6OnN1ZmZpeGVzKCkgY29uc3QKIHsKLSAgICBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgZXh0ZW5zaW9ucyA9IG1fbWltZUNsYXNzSW5mby5leHRlbnNpb25z
OwotCiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgZXh0ZW5zaW9ucy5zaXplKCk7ICsraSkgeworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9taW1lQ2xhc3NJbmZvLmV4dGVuc2lvbnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKGkp
CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnLCcpOwotICAgICAgICBidWlsZGVyLmFwcGVu
ZChleHRlbnNpb25zW2ldKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQobV9taW1lQ2xhc3NJbmZv
LmV4dGVuc2lvbnNbaV0pOwogICAgIH0KICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwog
fQpAQCAtNjYsMTMgKzU3LDcgQEAgU3RyaW5nIERPTU1pbWVUeXBlOjpkZXNjcmlwdGlvbigpIGNv
bnN0CiAKIFJlZlB0cjxET01QbHVnaW4+IERPTU1pbWVUeXBlOjplbmFibGVkUGx1Z2luKCkgY29u
c3QKIHsKLSAgICBpZiAoIW1fZnJhbWUgfHwgIW1fZnJhbWUtPnBhZ2UoKSB8fCAhbV9mcmFtZS0+
cGFnZSgpLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5hcmVQbHVnaW5zRW5hYmxlZCgpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiBtaW1lczsKLSAg
ICBWZWN0b3I8c2l6ZV90PiBtaW1lUGx1Z2luSW5kaWNlczsKLSAgICBtX3BsdWdpbkRhdGEtPmdl
dFdlYlZpc2libGVNaW1lc0FuZFBsdWdpbkluZGljZXMobWltZXMsIG1pbWVQbHVnaW5JbmRpY2Vz
KTsKLSAgICByZXR1cm4gRE9NUGx1Z2luOjpjcmVhdGUobV9wbHVnaW5EYXRhLmdldCgpLCBtX2Zy
YW1lLCBtX3BsdWdpbkluZm8pOworICAgIHJldHVybiBtX2VuYWJsZWRQbHVnaW4uZ2V0KCk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
RE9NTWltZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTU1p
bWVUeXBlLmgJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9N
TWltZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTksMTggKzE5LDE5IEBACiAKICNwcmFnbWEg
b25jZQogCi0jaW5jbHVkZSAiRnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyLmgiCiAjaW5jbHVkZSAi
UGx1Z2luRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgRE9NUGx1Z2luOworY2xhc3MgTmF2aWdhdG9yOwogCi1jbGFzcyBET01NaW1l
VHlwZSA6IHB1YmxpYyBSZWZDb3VudGVkPERPTU1pbWVUeXBlPiwgcHVibGljIEZyYW1lRGVzdHJ1
Y3Rpb25PYnNlcnZlciB7CitjbGFzcyBET01NaW1lVHlwZSA6IHB1YmxpYyBSZWZDb3VudGVkPERP
TU1pbWVUeXBlPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxET01NaW1lVHlwZT4gY3JlYXRl
KFJlZlB0cjxQbHVnaW5EYXRhPiYmIHBsdWdpbkRhdGEsIEZyYW1lKiBmcmFtZSwgdW5zaWduZWQg
aW5kZXgpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRE9NTWltZVR5cGUoV1RGTW92ZShwbHVnaW5E
YXRhKSwgZnJhbWUsIGluZGV4KSk7IH0KKyAgICBzdGF0aWMgUmVmPERPTU1pbWVUeXBlPiBjcmVh
dGUoTmF2aWdhdG9yJiBuYXZpZ2F0b3IsIGNvbnN0IE1pbWVDbGFzc0luZm8mIGluZm8sIERPTVBs
dWdpbiYgZW5hYmxlZFBsdWdpbikgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBET01NaW1lVHlwZShu
YXZpZ2F0b3IsIGluZm8sIGVuYWJsZWRQbHVnaW4pKTsgfQogICAgIH5ET01NaW1lVHlwZSgpOwog
CiAgICAgU3RyaW5nIHR5cGUoKSBjb25zdDsKQEAgLTM4LDExICszOSwxNCBAQCBwdWJsaWM6CiAg
ICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7CiAgICAgUmVmUHRyPERPTVBsdWdpbj4gZW5h
YmxlZFBsdWdpbigpIGNvbnN0OwogCisgICAgTmF2aWdhdG9yKiBuYXZpZ2F0b3IoKSB7IHJldHVy
biBtX25hdmlnYXRvci5nZXQoKTsgfQorCiBwcml2YXRlOgotICAgIERPTU1pbWVUeXBlKFJlZlB0
cjxQbHVnaW5EYXRhPiYmLCBGcmFtZSosIHVuc2lnbmVkIGluZGV4KTsKKyAgICBET01NaW1lVHlw
ZShOYXZpZ2F0b3ImLCBjb25zdCBNaW1lQ2xhc3NJbmZvJiwgRE9NUGx1Z2luJik7CisKKyAgICBX
ZWFrUHRyPE5hdmlnYXRvcj4gbV9uYXZpZ2F0b3I7CiAgICAgTWltZUNsYXNzSW5mbyBtX21pbWVD
bGFzc0luZm87Ci0gICAgUmVmUHRyPFBsdWdpbkRhdGE+IG1fcGx1Z2luRGF0YTsKLSAgICBQbHVn
aW5JbmZvIG1fcGx1Z2luSW5mbzsKKyAgICBXZWFrUHRyPERPTVBsdWdpbj4gbV9lbmFibGVkUGx1
Z2luOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9ET01NaW1lVHlwZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1
Z2lucy9ET01NaW1lVHlwZS5pZGwJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvRE9NTWltZVR5cGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xOSw3ICsxOSw5IEBA
CiAqLwogCiBbCi0gICAgSW50ZXJmYWNlTmFtZT1NaW1lVHlwZQorICAgIEludGVyZmFjZU5hbWU9
TWltZVR5cGUsCisgICAgR2VuZXJhdGVJc1JlYWNoYWJsZT1SZWFjaGFibGVGcm9tTmF2aWdhdG9y
LAorICAgIEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUKIF0gaW50ZXJmYWNlIERPTU1pbWVUeXBl
IHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHR5cGU7CiAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIERPTVN0cmluZyBzdWZmaXhlczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdp
bnMvRE9NTWltZVR5cGVBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1
Z2lucy9ET01NaW1lVHlwZUFycmF5LmNwcAkocmV2aXNpb24gMjYzMDA3KQorKysgU291cmNlL1dl
YkNvcmUvcGx1Z2lucy9ET01NaW1lVHlwZUFycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAs
MTAgKzIwLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJET01NaW1lVHlwZUFy
cmF5LmgiCiAKLSNpbmNsdWRlICJET01QbHVnaW4uaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2lu
Y2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCisjaW5jbHVkZSAiRE9NTWlt
ZVR5cGUuaCIKKyNpbmNsdWRlICJOYXZpZ2F0b3IuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9j
SW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KIApAQCAtMzEsOCAr
MjksOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1Q
TChET01NaW1lVHlwZUFycmF5KTsKIAotRE9NTWltZVR5cGVBcnJheTo6RE9NTWltZVR5cGVBcnJh
eShOYXZpZ2F0b3ImIG5hdmlnYXRvcikKK0RPTU1pbWVUeXBlQXJyYXk6OkRPTU1pbWVUeXBlQXJy
YXkoTmF2aWdhdG9yJiBuYXZpZ2F0b3IsIFZlY3RvcjxSZWY8RE9NTWltZVR5cGU+PiYmIG1pbWVU
eXBlcykKICAgICA6IG1fbmF2aWdhdG9yKG1ha2VXZWFrUHRyKG5hdmlnYXRvcikpCisgICAgLCBt
X21pbWVUeXBlcyhtaW1lVHlwZXMpCiB7CiB9CiAKQEAgLTQwLDc2ICszOSwzMiBAQCBET01NaW1l
VHlwZUFycmF5Ojp+RE9NTWltZVR5cGVBcnJheSgpID0gCiAKIHVuc2lnbmVkIERPTU1pbWVUeXBl
QXJyYXk6Omxlbmd0aCgpIGNvbnN0CiB7Ci0gICAgUGx1Z2luRGF0YSogZGF0YSA9IGdldFBsdWdp
bkRhdGEoKTsKLSAgICBpZiAoIWRhdGEpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgVmVjdG9y
PE1pbWVDbGFzc0luZm8+IG1pbWVzOwotICAgIFZlY3RvcjxzaXplX3Q+IG1pbWVQbHVnaW5JbmRp
Y2VzOwotICAgIGRhdGEtPmdldFdlYlZpc2libGVNaW1lc0FuZFBsdWdpbkluZGljZXMobWltZXMs
IG1pbWVQbHVnaW5JbmRpY2VzKTsKLSAgICByZXR1cm4gbWltZXMuc2l6ZSgpOworICAgIHJldHVy
biBtX21pbWVUeXBlcy5zaXplKCk7CiB9CiAKIFJlZlB0cjxET01NaW1lVHlwZT4gRE9NTWltZVR5
cGVBcnJheTo6aXRlbSh1bnNpZ25lZCBpbmRleCkKIHsKLSAgICBQbHVnaW5EYXRhKiBkYXRhID0g
Z2V0UGx1Z2luRGF0YSgpOwotICAgIGlmICghZGF0YSkKKyAgICBpZiAoaW5kZXggPj0gbV9taW1l
VHlwZXMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFZlY3RvcjxNaW1l
Q2xhc3NJbmZvPiBtaW1lczsKLSAgICBWZWN0b3I8c2l6ZV90PiBtaW1lUGx1Z2luSW5kaWNlczsK
LSAgICBkYXRhLT5nZXRXZWJWaXNpYmxlTWltZXNBbmRQbHVnaW5JbmRpY2VzKG1pbWVzLCBtaW1l
UGx1Z2luSW5kaWNlcyk7Ci0KLSAgICBpZiAoaW5kZXggPj0gbWltZXMuc2l6ZSgpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gRE9NTWltZVR5cGU6OmNyZWF0ZShkYXRhLCBm
cmFtZSgpLCBpbmRleCk7CisgICAgcmV0dXJuIG1fbWltZVR5cGVzW2luZGV4XS5wdHIoKTsKIH0K
IAogUmVmUHRyPERPTU1pbWVUeXBlPiBET01NaW1lVHlwZUFycmF5OjpuYW1lZEl0ZW0oY29uc3Qg
QXRvbVN0cmluZyYgcHJvcGVydHlOYW1lKQogewotICAgIFBsdWdpbkRhdGEqIGRhdGEgPSBnZXRQ
bHVnaW5EYXRhKCk7Ci0gICAgaWYgKCFkYXRhKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiBtaW1lczsKLSAgICBWZWN0b3I8c2l6ZV90PiBtaW1l
UGx1Z2luSW5kaWNlczsKLSAgICBkYXRhLT5nZXRXZWJWaXNpYmxlTWltZXNBbmRQbHVnaW5JbmRp
Y2VzKG1pbWVzLCBtaW1lUGx1Z2luSW5kaWNlcyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1pbWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtaW1lc1tpXS50eXBlID09IHBy
b3BlcnR5TmFtZSkKLSAgICAgICAgICAgIHJldHVybiBET01NaW1lVHlwZTo6Y3JlYXRlKGRhdGEs
IGZyYW1lKCksIGkpOworICAgIGZvciAoYXV0byYgbWltZVR5cGUgOiBtX21pbWVUeXBlcykgewor
ICAgICAgICBpZiAobWltZVR5cGUtPnR5cGUoKSA9PSBwcm9wZXJ0eU5hbWUpCisgICAgICAgICAg
ICByZXR1cm4gbWltZVR5cGUucHRyKCk7CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQog
CiBWZWN0b3I8QXRvbVN0cmluZz4gRE9NTWltZVR5cGVBcnJheTo6c3VwcG9ydGVkUHJvcGVydHlO
YW1lcygpCiB7Ci0gICAgUGx1Z2luRGF0YSogZGF0YSA9IGdldFBsdWdpbkRhdGEoKTsKLSAgICBp
ZiAoIWRhdGEpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBWZWN0b3I8TWltZUNsYXNzSW5m
bz4gbWltZXM7Ci0gICAgVmVjdG9yPHNpemVfdD4gbWltZVBsdWdpbkluZGljZXM7Ci0gICAgZGF0
YS0+Z2V0V2ViVmlzaWJsZU1pbWVzQW5kUGx1Z2luSW5kaWNlcyhtaW1lcywgbWltZVBsdWdpbklu
ZGljZXMpOwotCiAgICAgVmVjdG9yPEF0b21TdHJpbmc+IHJlc3VsdDsKLSAgICByZXN1bHQucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShtaW1lcy5zaXplKCkpOwotICAgIGZvciAoYXV0byYgaW5mbyA6
IG1pbWVzKQotICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoaW5mby50eXBl
KSk7Ci0KKyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX21pbWVUeXBlcy5zaXpl
KCkpOworICAgIGZvciAoYXV0byYgbWltZVR5cGUgOiBtX21pbWVUeXBlcykKKyAgICAgICAgcmVz
dWx0LnVuY2hlY2tlZEFwcGVuZChtaW1lVHlwZS0+dHlwZSgpKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1QbHVnaW5EYXRhKiBET01NaW1lVHlwZUFycmF5OjpnZXRQbHVnaW5EYXRhKCkgY29u
c3QKLXsKLSAgICBhdXRvKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvKiBwYWdlID0gZnJhbWUtPnBhZ2Uo
KTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJu
ICZwYWdlLT5wbHVnaW5EYXRhKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NTWltZVR5cGVBcnJheS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NTWltZVR5cGVBcnJheS5oCShyZXZpc2lvbiAyNjMw
MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTU1pbWVUeXBlQXJyYXkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjAsMzQgKzIwLDM1IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAi
RE9NTWltZVR5cGUuaCIKLSNpbmNsdWRlICJOYXZpZ2F0b3IuaCIKICNpbmNsdWRlICJTY3JpcHRX
cmFwcGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBQbHVnaW5EYXRhOworY2xhc3MgRE9NTWlt
ZVR5cGU7CitjbGFzcyBOYXZpZ2F0b3I7CiAKIGNsYXNzIERPTU1pbWVUeXBlQXJyYXkgZmluYWwg
OiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgUmVmQ291bnRlZDxET01NaW1lVHlwZUFy
cmF5PiB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChET01NaW1lVHlwZUFycmF5KTsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPERPTU1pbWVUeXBlQXJyYXk+IGNyZWF0ZShOYXZpZ2F0b3Im
IG5hdmlnYXRvcikgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBET01NaW1lVHlwZUFycmF5KG5hdmln
YXRvcikpOyB9CisgICAgc3RhdGljIFJlZjxET01NaW1lVHlwZUFycmF5PiBjcmVhdGUoTmF2aWdh
dG9yJiBuYXZpZ2F0b3IsIFZlY3RvcjxSZWY8RE9NTWltZVR5cGU+PiYmIG1pbWVUeXBlcyA9IHsg
fSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBET01NaW1lVHlwZUFycmF5KG5hdmlnYXRvciwgV1RG
TW92ZShtaW1lVHlwZXMpKSk7IH0KICAgICB+RE9NTWltZVR5cGVBcnJheSgpOwogCiAgICAgdW5z
aWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAgICAgUmVmUHRyPERPTU1pbWVUeXBlPiBpdGVtKHVuc2ln
bmVkIGluZGV4KTsKICAgICBSZWZQdHI8RE9NTWltZVR5cGU+IG5hbWVkSXRlbShjb25zdCBBdG9t
U3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwogICAgIFZlY3RvcjxBdG9tU3RyaW5nPiBzdXBwb3J0ZWRQ
cm9wZXJ0eU5hbWVzKCk7Ci0gICAgCisKICAgICBOYXZpZ2F0b3IqIG5hdmlnYXRvcigpIHsgcmV0
dXJuIG1fbmF2aWdhdG9yLmdldCgpOyB9CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgRE9NTWlt
ZVR5cGVBcnJheShOYXZpZ2F0b3ImKTsKLSAgICBQbHVnaW5EYXRhKiBnZXRQbHVnaW5EYXRhKCkg
Y29uc3Q7Ci0gICAgRnJhbWUqIGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYXZpZ2F0b3IgPyBt
X25hdmlnYXRvci0+ZnJhbWUoKSA6IG51bGxwdHI7IH0KKyAgICBleHBsaWNpdCBET01NaW1lVHlw
ZUFycmF5KE5hdmlnYXRvciYsIFZlY3RvcjxSZWY8RE9NTWltZVR5cGU+PiYmIG1pbWVUeXBlcyk7
CiAgICAgCiAgICAgV2Vha1B0cjxOYXZpZ2F0b3I+IG1fbmF2aWdhdG9yOworICAgIFZlY3RvcjxS
ZWY8RE9NTWltZVR5cGU+PiBtX21pbWVUeXBlczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTVBsdWdpbi5jcHAJKHJldmlzaW9uIDI2MzAw
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTksOCArMTksOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRPTVBs
dWdpbi5oIgogCi0jaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCisj
aW5jbHVkZSAiRE9NTWltZVR5cGUuaCIKKyNpbmNsdWRlICJOYXZpZ2F0b3IuaCIKICNpbmNsdWRl
IDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcu
aD4KIApAQCAtMjgsMTEgKzI4LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRF9JTVBMKERPTVBsdWdpbik7CiAKLURPTVBsdWdpbjo6RE9NUGx1Z2luKFBs
dWdpbkRhdGEqIHBsdWdpbkRhdGEsIEZyYW1lKiBmcmFtZSwgUGx1Z2luSW5mbyBwbHVnaW5JbmZv
KQotICAgIDogRnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyKGZyYW1lKQotICAgICwgbV9wbHVnaW5E
YXRhKHBsdWdpbkRhdGEpCi0gICAgLCBtX3BsdWdpbkluZm8oV1RGTW92ZShwbHVnaW5JbmZvKSkK
LXsKK0RPTVBsdWdpbjo6RE9NUGx1Z2luKE5hdmlnYXRvciYgbmF2aWdhdG9yLCBjb25zdCBQbHVn
aW5JbmZvJiBwbHVnaW5JbmZvKQorICAgIDogbV9uYXZpZ2F0b3IobWFrZVdlYWtQdHIobmF2aWdh
dG9yKSkKKyAgICAsIG1fcGx1Z2luSW5mbyhwbHVnaW5JbmZvKQoreworICAgIG1fbWltZVR5cGVz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9wbHVnaW5JbmZvLm1pbWVzLnNpemUoKSk7CisgICAg
Zm9yIChhdXRvJiBtaW1lVHlwZSA6IG1fcGx1Z2luSW5mby5taW1lcykKKyAgICAgICAgbV9taW1l
VHlwZXMudW5jaGVja2VkQXBwZW5kKERPTU1pbWVUeXBlOjpjcmVhdGUobmF2aWdhdG9yLCBtaW1l
VHlwZSwgKnRoaXMpKTsKKworICAgIHN0ZDo6c29ydChtX21pbWVUeXBlcy5iZWdpbigpLCBtX21p
bWVUeXBlcy5lbmQoKSwgW10oY29uc3QgUmVmPERPTU1pbWVUeXBlPiYgYSwgY29uc3QgUmVmPERP
TU1pbWVUeXBlPiYgYikgeworICAgICAgICByZXR1cm4gY29kZVBvaW50Q29tcGFyZUxlc3NUaGFu
KGEtPnR5cGUoKSwgYi0+dHlwZSgpKTsKKyAgICB9KTsKIH0KIAogRE9NUGx1Z2luOjp+RE9NUGx1
Z2luKCkgPSBkZWZhdWx0OwpAQCAtNTksNDAgKzY1LDI3IEBAIHVuc2lnbmVkIERPTVBsdWdpbjo6
bGVuZ3RoKCkgY29uc3QKIAogUmVmUHRyPERPTU1pbWVUeXBlPiBET01QbHVnaW46Oml0ZW0odW5z
aWduZWQgaW5kZXgpCiB7Ci0gICAgaWYgKGluZGV4ID49IG1fcGx1Z2luSW5mby5taW1lcy5zaXpl
KCkgfHwgIW1fZnJhbWUgfHwgIW1fZnJhbWUtPnBhZ2UoKSkKKyAgICBpZiAoaW5kZXggPj0gbV9t
aW1lVHlwZXMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIE1pbWVDbGFz
c0luZm8gbWltZSA9IG1fcGx1Z2luSW5mby5taW1lc1tpbmRleF07Ci0KLSAgICBWZWN0b3I8TWlt
ZUNsYXNzSW5mbz4gbWltZXM7Ci0gICAgVmVjdG9yPHNpemVfdD4gbWltZVBsdWdpbkluZGljZXM7
Ci0gICAgVmVjdG9yPFBsdWdpbkluZm8+IHBsdWdpbnMgPSBtX3BsdWdpbkRhdGEtPndlYlZpc2li
bGVQbHVnaW5zKCk7Ci0gICAgbV9wbHVnaW5EYXRhLT5nZXRXZWJWaXNpYmxlTWltZXNBbmRQbHVn
aW5JbmRpY2VzKG1pbWVzLCBtaW1lUGx1Z2luSW5kaWNlcyk7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1pbWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtaW1lc1tpXSA9PSBt
aW1lICYmIHBsdWdpbnNbbWltZVBsdWdpbkluZGljZXNbaV1dID09IG1fcGx1Z2luSW5mbykKLSAg
ICAgICAgICAgIHJldHVybiBET01NaW1lVHlwZTo6Y3JlYXRlKG1fcGx1Z2luRGF0YS5nZXQoKSwg
bV9mcmFtZSwgaSk7Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBtX21p
bWVUeXBlc1tpbmRleF0ucHRyKCk7CiB9CiAKIFJlZlB0cjxET01NaW1lVHlwZT4gRE9NUGx1Z2lu
OjpuYW1lZEl0ZW0oY29uc3QgQXRvbVN0cmluZyYgcHJvcGVydHlOYW1lKQogewotICAgIGlmICgh
bV9mcmFtZSB8fCAhbV9mcmFtZS0+cGFnZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiBtaW1lczsKLSAgICBWZWN0b3I8c2l6ZV90PiBtaW1l
UGx1Z2luSW5kaWNlczsKLSAgICBtX3BsdWdpbkRhdGEtPmdldFdlYlZpc2libGVNaW1lc0FuZFBs
dWdpbkluZGljZXMobWltZXMsIG1pbWVQbHVnaW5JbmRpY2VzKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbWltZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGlmIChtaW1lc1tpXS50eXBl
ID09IHByb3BlcnR5TmFtZSkKLSAgICAgICAgICAgIHJldHVybiBET01NaW1lVHlwZTo6Y3JlYXRl
KG1fcGx1Z2luRGF0YS5nZXQoKSwgbV9mcmFtZSwgaSk7CisgICAgZm9yIChhdXRvJiBtaW1lVHlw
ZSA6IG1fbWltZVR5cGVzKSB7CisgICAgICAgIGlmIChtaW1lVHlwZS0+dHlwZSgpID09IHByb3Bl
cnR5TmFtZSkKKyAgICAgICAgICAgIHJldHVybiBtaW1lVHlwZS5wdHIoKTsKKyAgICB9CiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKIFZlY3RvcjxBdG9tU3RyaW5nPiBET01QbHVnaW46OnN1cHBv
cnRlZFByb3BlcnR5TmFtZXMoKQogewotICAgIC8vIEZJWE1FOiBTaG91bGQgYmUgaW1wbGVtZW50
ZWQuCi0gICAgcmV0dXJuIFZlY3RvcjxBdG9tU3RyaW5nPigpOworICAgIFZlY3RvcjxBdG9tU3Ry
aW5nPiByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9taW1lVHlw
ZXMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIG1pbWVUeXBlIDogbV9taW1lVHlwZXMpCisgICAg
ICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQobWltZVR5cGUtPnR5cGUoKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9ET01QbHVnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL0RPTVBsdWdpbi5oCShyZXZpc2lvbiAyNjMwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL0RPTVBsdWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOSwyMSArMTksMjEgQEAKIAogI3By
YWdtYSBvbmNlCiAKLSNpbmNsdWRlICJGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIuaCIKLSNpbmNs
dWRlICJET01NaW1lVHlwZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKICNpbmNsdWRlICJT
Y3JpcHRXcmFwcGFibGUuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWNsYXNzIFBsdWdpbjsKLWNsYXNzIFBsdWdpbkRhdGE7CitjbGFzcyBET01NaW1l
VHlwZTsKK2NsYXNzIE5hdmlnYXRvcjsKIAotY2xhc3MgRE9NUGx1Z2luIGZpbmFsIDogcHVibGlj
IFNjcmlwdFdyYXBwYWJsZSwgcHVibGljIFJlZkNvdW50ZWQ8RE9NUGx1Z2luPiwgcHVibGljIEZy
YW1lRGVzdHJ1Y3Rpb25PYnNlcnZlciB7CitjbGFzcyBET01QbHVnaW4gZmluYWwgOiBwdWJsaWMg
U2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgUmVmQ291bnRlZDxET01QbHVnaW4+LCBwdWJsaWMgQ2Fu
TWFrZVdlYWtQdHI8RE9NUGx1Z2luPiB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChET01Q
bHVnaW4pOwogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RE9NUGx1Z2luPiBjcmVhdGUoUGx1Z2lu
RGF0YSogcGx1Z2luRGF0YSwgRnJhbWUqIGZyYW1lLCBQbHVnaW5JbmZvIHBsdWdpbkluZm8pIHsg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRE9NUGx1Z2luKHBsdWdpbkRhdGEsIGZyYW1lLCBXVEZNb3Zl
KHBsdWdpbkluZm8pKSk7IH0KKyAgICBzdGF0aWMgUmVmPERPTVBsdWdpbj4gY3JlYXRlKE5hdmln
YXRvciYgbmF2aWdhdG9yLCBjb25zdCBQbHVnaW5JbmZvJiBwbHVnaW5JbmZvKSB7IHJldHVybiBh
ZG9wdFJlZigqbmV3IERPTVBsdWdpbihuYXZpZ2F0b3IsIHBsdWdpbkluZm8pKTsgfQogICAgIH5E
T01QbHVnaW4oKTsKIAogICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7CkBAIC00NiwxMCArNDYsMTYg
QEAgcHVibGljOgogICAgIFJlZlB0cjxET01NaW1lVHlwZT4gbmFtZWRJdGVtKGNvbnN0IEF0b21T
dHJpbmcmIHByb3BlcnR5TmFtZSk7CiAgICAgVmVjdG9yPEF0b21TdHJpbmc+IHN1cHBvcnRlZFBy
b3BlcnR5TmFtZXMoKTsKIAorICAgIGNvbnN0IFZlY3RvcjxSZWY8RE9NTWltZVR5cGU+PiYgbWlt
ZVR5cGVzKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVHlwZXM7IH0KKworICAgIE5hdmlnYXRvciog
bmF2aWdhdG9yKCkgeyByZXR1cm4gbV9uYXZpZ2F0b3IuZ2V0KCk7IH0KKwogcHJpdmF0ZToKLSAg
ICBET01QbHVnaW4oUGx1Z2luRGF0YSosIEZyYW1lKiwgUGx1Z2luSW5mbyk7Ci0gICAgUmVmUHRy
PFBsdWdpbkRhdGE+IG1fcGx1Z2luRGF0YTsKKyAgICBET01QbHVnaW4oTmF2aWdhdG9yJiwgY29u
c3QgUGx1Z2luSW5mbyYpOworCisgICAgV2Vha1B0cjxOYXZpZ2F0b3I+IG1fbmF2aWdhdG9yOwog
ICAgIFBsdWdpbkluZm8gbV9wbHVnaW5JbmZvOworICAgIFZlY3RvcjxSZWY8RE9NTWltZVR5cGU+
PiBtX21pbWVUeXBlczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2luLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL0RPTVBsdWdpbi5pZGwJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2luLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjAsNiArMjAs
OCBAQAogCiBbCiAgICAgSW50ZXJmYWNlTmFtZT1QbHVnaW4sCisgICAgR2VuZXJhdGVJc1JlYWNo
YWJsZT1SZWFjaGFibGVGcm9tTmF2aWdhdG9yLAorICAgIEltcGxlbWVudGF0aW9uTGFja3NWVGFi
bGUsCiAgICAgTGVnYWN5VW5lbnVtZXJhYmxlTmFtZWRQcm9wZXJ0aWVzCiBdIGludGVyZmFjZSBE
T01QbHVnaW4gewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2luQXJyYXkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2luQXJyYXkuY3BwCShyZXZpc2lvbiAyNjMw
MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTVBsdWdpbkFycmF5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogCiAjaW5jbHVkZSAiRE9NUGx1Z2luLmgiCiAjaW5j
bHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJOYXZpZ2F0b3IuaCIKICNpbmNsdWRlICJQYWdlLmgi
Ci0jaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVz
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgogCkBAIC0zMSw4ICszMSwxMCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChET01Q
bHVnaW5BcnJheSk7CiAKLURPTVBsdWdpbkFycmF5OjpET01QbHVnaW5BcnJheShOYXZpZ2F0b3Im
IG5hdmlnYXRvcikKK0RPTVBsdWdpbkFycmF5OjpET01QbHVnaW5BcnJheShOYXZpZ2F0b3ImIG5h
dmlnYXRvciwgVmVjdG9yPFJlZjxET01QbHVnaW4+PiYmIHB1YmxpY2x5VmlzaWJsZVBsdWdpbnMs
IFZlY3RvcjxSZWY8RE9NUGx1Z2luPj4mJiBhZGRpdGlvbmFsV2ViVmlzaWJpbGVQbHVnaW5zKQog
ICAgIDogbV9uYXZpZ2F0b3IobWFrZVdlYWtQdHIobmF2aWdhdG9yKSkKKyAgICAsIG1fcHVibGlj
bHlWaXNpYmxlUGx1Z2lucyhwdWJsaWNseVZpc2libGVQbHVnaW5zKQorICAgICwgbV9hZGRpdGlv
bmFsV2ViVmlzaWJpbGVQbHVnaW5zKGFkZGl0aW9uYWxXZWJWaXNpYmlsZVBsdWdpbnMpCiB7CiB9
CiAKQEAgLTQwLDUxICs0MiwzNyBAQCBET01QbHVnaW5BcnJheTo6fkRPTVBsdWdpbkFycmF5KCkg
PSBkZWZhCiAKIHVuc2lnbmVkIERPTVBsdWdpbkFycmF5OjpsZW5ndGgoKSBjb25zdAogewotICAg
IFBsdWdpbkRhdGEqIGRhdGEgPSBwbHVnaW5EYXRhKCk7Ci0gICAgaWYgKCFkYXRhKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIHJldHVybiBkYXRhLT5wdWJsaWNseVZpc2libGVQbHVnaW5zKCku
c2l6ZSgpOworICAgIHJldHVybiBtX3B1YmxpY2x5VmlzaWJsZVBsdWdpbnMuc2l6ZSgpOwogfQog
CiBSZWZQdHI8RE9NUGx1Z2luPiBET01QbHVnaW5BcnJheTo6aXRlbSh1bnNpZ25lZCBpbmRleCkK
IHsKLSAgICBQbHVnaW5EYXRhKiBkYXRhID0gcGx1Z2luRGF0YSgpOwotICAgIGlmICghZGF0YSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBjb25zdCBWZWN0b3I8UGx1Z2luSW5mbz4m
IHBsdWdpbnMgPSBkYXRhLT5wdWJsaWNseVZpc2libGVQbHVnaW5zKCk7Ci0gICAgaWYgKGluZGV4
ID49IHBsdWdpbnMuc2l6ZSgpKQorICAgIGlmIChpbmRleCA+PSBtX3B1YmxpY2x5VmlzaWJsZVBs
dWdpbnMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gRE9NUGx1
Z2luOjpjcmVhdGUoZGF0YSwgZnJhbWUoKSwgcGx1Z2luc1tpbmRleF0pOworICAgIHJldHVybiBt
X3B1YmxpY2x5VmlzaWJsZVBsdWdpbnNbaW5kZXhdLnB0cigpOwogfQogCiBSZWZQdHI8RE9NUGx1
Z2luPiBET01QbHVnaW5BcnJheTo6bmFtZWRJdGVtKGNvbnN0IEF0b21TdHJpbmcmIHByb3BlcnR5
TmFtZSkKIHsKLSAgICBQbHVnaW5EYXRhKiBkYXRhID0gcGx1Z2luRGF0YSgpOwotICAgIGlmICgh
ZGF0YSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgZm9yIChhdXRvJiBwbHVnaW4gOiBt
X3B1YmxpY2x5VmlzaWJsZVBsdWdpbnMpIHsKKyAgICAgICAgaWYgKHBsdWdpbi0+bmFtZSgpID09
IHByb3BlcnR5TmFtZSkKKyAgICAgICAgICAgIHJldHVybiBwbHVnaW4ucHRyKCk7CisgICAgfQog
Ci0gICAgZm9yIChhdXRvJiBwbHVnaW4gOiBkYXRhLT53ZWJWaXNpYmxlUGx1Z2lucygpKSB7Ci0g
ICAgICAgIGlmIChwbHVnaW4ubmFtZSA9PSBwcm9wZXJ0eU5hbWUpCi0gICAgICAgICAgICByZXR1
cm4gRE9NUGx1Z2luOjpjcmVhdGUoZGF0YSwgZnJhbWUoKSwgcGx1Z2luKTsKKyAgICBmb3IgKGF1
dG8mIHBsdWdpbiA6IG1fYWRkaXRpb25hbFdlYlZpc2liaWxlUGx1Z2lucykgeworICAgICAgICBp
ZiAocGx1Z2luLT5uYW1lKCkgPT0gcHJvcGVydHlOYW1lKQorICAgICAgICAgICAgcmV0dXJuIHBs
dWdpbi5wdHIoKTsKICAgICB9CisKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogVmVjdG9yPEF0
b21TdHJpbmc+IERPTVBsdWdpbkFycmF5OjpzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkKIHsKLSAg
ICBQbHVnaW5EYXRhKiBkYXRhID0gcGx1Z2luRGF0YSgpOwotICAgIGlmICghZGF0YSkKLSAgICAg
ICAgcmV0dXJuIHsgfTsKLQotICAgIGNvbnN0IGF1dG8mIHBsdWdpbnMgPSBkYXRhLT5wdWJsaWNs
eVZpc2libGVQbHVnaW5zKCk7Ci0KICAgICBWZWN0b3I8QXRvbVN0cmluZz4gcmVzdWx0OwotICAg
IHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBsdWdpbnMuc2l6ZSgpKTsKLSAgICBmb3Ig
KGF1dG8mIHBsdWdpbiA6IHBsdWdpbnMpCi0gICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQo
cGx1Z2luLm5hbWUpOwotCisgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9wdWJs
aWNseVZpc2libGVQbHVnaW5zLnNpemUoKSk7CisgICAgZm9yIChhdXRvJiBwbHVnaW4gOiBtX3B1
YmxpY2x5VmlzaWJsZVBsdWdpbnMpCisgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQocGx1
Z2luLT5uYW1lKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTEwMCwxNyArODgsNCBA
QCB2b2lkIERPTVBsdWdpbkFycmF5OjpyZWZyZXNoKGJvb2wgcmVsb2FkCiAgICAgUGFnZTo6cmVm
cmVzaFBsdWdpbnMocmVsb2FkUGFnZXMpOwogfQogCi1QbHVnaW5EYXRhKiBET01QbHVnaW5BcnJh
eTo6cGx1Z2luRGF0YSgpIGNvbnN0Ci17Ci0gICAgYXV0byogZnJhbWUgPSB0aGlzLT5mcmFtZSgp
OwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUGFnZSog
cGFnZSA9IGZyYW1lLT5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIHJldHVybiAmcGFnZS0+cGx1Z2luRGF0YSgpOwotfQotCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTVBsdWdpbkFycmF5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01QbHVnaW5BcnJheS5o
CShyZXZpc2lvbiAyNjMwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTVBsdWdpbkFy
cmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDIwICsyMCwyMSBAQAogCiAjcHJhZ21hIG9uY2UK
IAotI2luY2x1ZGUgIkRPTVBsdWdpbi5oIgotI2luY2x1ZGUgIkRPTVdpbmRvd1Byb3BlcnR5Lmgi
Ci0jaW5jbHVkZSAiTmF2aWdhdG9yLmgiCiAjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlLmgiCisj
aW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgUGx1Z2luRGF0YTsKK2NsYXNzIERPTVBsdWdpbjsKK2NsYXNzIE5h
dmlnYXRvcjsKIAogY2xhc3MgRE9NUGx1Z2luQXJyYXkgZmluYWwgOiBwdWJsaWMgU2NyaXB0V3Jh
cHBhYmxlLCBwdWJsaWMgUmVmQ291bnRlZDxET01QbHVnaW5BcnJheT4gewogICAgIFdURl9NQUtF
X0lTT19BTExPQ0FURUQoRE9NUGx1Z2luQXJyYXkpOwogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
RE9NUGx1Z2luQXJyYXk+IGNyZWF0ZShOYXZpZ2F0b3ImIG5hdmlnYXRvcikgeyByZXR1cm4gYWRv
cHRSZWYoKm5ldyBET01QbHVnaW5BcnJheShuYXZpZ2F0b3IpKTsgfQorICAgIHN0YXRpYyBSZWY8
RE9NUGx1Z2luQXJyYXk+IGNyZWF0ZShOYXZpZ2F0b3ImIG5hdmlnYXRvciwgVmVjdG9yPFJlZjxE
T01QbHVnaW4+PiYmIHB1YmxpY2x5VmlzaWJsZVBsdWdpbnMgPSB7IH0sIFZlY3RvcjxSZWY8RE9N
UGx1Z2luPj4mJiBhZGRpdGlvbmFsV2ViVmlzaWJpbGVQbHVnaW5zID0geyB9KSB7IHJldHVybiBh
ZG9wdFJlZigqbmV3IERPTVBsdWdpbkFycmF5KG5hdmlnYXRvciwgV1RGTW92ZShwdWJsaWNseVZp
c2libGVQbHVnaW5zKSwgV1RGTW92ZShhZGRpdGlvbmFsV2ViVmlzaWJpbGVQbHVnaW5zKSkpOyB9
CiAgICAgfkRPTVBsdWdpbkFycmF5KCk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsK
QEAgLTQyLDE2ICs0MywxNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPEF0b21TdHJpbmc+IHN1cHBv
cnRlZFByb3BlcnR5TmFtZXMoKTsKIAogICAgIHZvaWQgcmVmcmVzaChib29sIHJlbG9hZFBhZ2Vz
KTsKLSAgICAKLSAgICBOYXZpZ2F0b3IqIG5hdmlnYXRvcigpIHsgcmV0dXJuIG1fbmF2aWdhdG9y
LmdldCgpOyB9CiAKKyAgICBOYXZpZ2F0b3IqIG5hdmlnYXRvcigpIHsgcmV0dXJuIG1fbmF2aWdh
dG9yLmdldCgpOyB9CisgICAgCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IERPTVBsdWdpbkFycmF5
KE5hdmlnYXRvciYpOworICAgIGV4cGxpY2l0IERPTVBsdWdpbkFycmF5KE5hdmlnYXRvciYsIFZl
Y3RvcjxSZWY8RE9NUGx1Z2luPj4mJiwgVmVjdG9yPFJlZjxET01QbHVnaW4+PiYmKTsKIAotICAg
IFBsdWdpbkRhdGEqIHBsdWdpbkRhdGEoKSBjb25zdDsKICAgICBGcmFtZSogZnJhbWUoKSBjb25z
dCB7IHJldHVybiBtX25hdmlnYXRvciA/IG1fbmF2aWdhdG9yLT5mcmFtZSgpIDogbnVsbHB0cjsg
fQotICAgIAorCiAgICAgV2Vha1B0cjxOYXZpZ2F0b3I+IG1fbmF2aWdhdG9yOworICAgIFZlY3Rv
cjxSZWY8RE9NUGx1Z2luPj4gbV9wdWJsaWNseVZpc2libGVQbHVnaW5zOworICAgIFZlY3RvcjxS
ZWY8RE9NUGx1Z2luPj4gbV9hZGRpdGlvbmFsV2ViVmlzaWJpbGVQbHVnaW5zOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5E
YXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGEu
Y3BwCShyZXZpc2lvbiAyNjMwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRh
dGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiTG9jYWxp
emVkU3RyaW5ncy5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbHVnaW5JbmZvUHJv
dmlkZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC0zOCw2ICszOSwxMiBAQCBQbHVnaW5EYXRhOjpQbHVnaW5EYXRhKFBhZ2UmIHBhZ2Up
CiAgICAgaW5pdFBsdWdpbnMoKTsKIH0KIAordm9pZCBQbHVnaW5EYXRhOjppbml0UGx1Z2lucygp
Cit7CisgICAgQVNTRVJUKG1fcGx1Z2lucy5pc0VtcHR5KCkpOworICAgIG1fcGx1Z2lucyA9IG1f
cGFnZS5wbHVnaW5JbmZvUHJvdmlkZXIoKS5wbHVnaW5JbmZvKG1fcGFnZSwgbV9zdXBwb3J0ZWRQ
bHVnaW5JZGVudGlmaWVycyk7Cit9CisKIGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZvPiYgUGx1Z2lu
RGF0YTo6d2ViVmlzaWJsZVBsdWdpbnMoKSBjb25zdAogewogICAgIGF1dG8gZG9jdW1lbnRVUkwg
PSBtX3BhZ2UubWFpbkZyYW1lKCkuZG9jdW1lbnQoKSA/IG1fcGFnZS5tYWluRnJhbWUoKS5kb2N1
bWVudCgpLT51cmwoKSA6IFVSTCB7IH07CkBAIC04MCwxMjAgKzg3LDc3IEBAIHN0YXRpYyBib29s
IHNob3VsZEJlUHVibGljbHlWaXNpYmxlKGNvbnMKICAgICAgICAgfHwgaXNCdWlsdEluUERGUGx1
Z0luKHBsdWdpbik7CiB9CiAKLVZlY3RvcjxQbHVnaW5JbmZvPiBQbHVnaW5EYXRhOjpwdWJsaWNs
eVZpc2libGVQbHVnaW5zKCkgY29uc3QKK3N0ZDo6cGFpcjxWZWN0b3I8UGx1Z2luSW5mbz4sIFZl
Y3RvcjxQbHVnaW5JbmZvPj4gUGx1Z2luRGF0YTo6cHVibGljbHlWaXNpYmxlUGx1Z2luc0FuZEFk
ZGl0aW9uYWxXZWJWaXNpYmxlUGx1Z2lucygpIGNvbnN0CiB7CiAgICAgYXV0byBwbHVnaW5zID0g
d2ViVmlzaWJsZVBsdWdpbnMoKTsKIAogICAgIGlmIChtX3BhZ2Uuc2hvd0FsbFBsdWdpbnMoKSkK
LSAgICAgICAgcmV0dXJuIHBsdWdpbnM7Ci0gICAgCi0gICAgcGx1Z2lucy5yZW1vdmVBbGxNYXRj
aGluZyhbXShhdXRvJiBwbHVnaW4pIHsKLSAgICAgICAgcmV0dXJuICFzaG91bGRCZVB1YmxpY2x5
VmlzaWJsZShwbHVnaW4pOworICAgICAgICByZXR1cm4geyBwbHVnaW5zLCB7IH0gfTsKKworICAg
IFZlY3RvcjxQbHVnaW5JbmZvPiBhZGRpdGlvbmFsV2ViVmlzaWJsZVBsdWdpbnM7CisgICAgcGx1
Z2lucy5yZW1vdmVBbGxNYXRjaGluZyhbJl0oYXV0byYgcGx1Z2luKSB7CisgICAgICAgIGlmICgh
c2hvdWxkQmVQdWJsaWNseVZpc2libGUocGx1Z2luKSkgeworICAgICAgICAgICAgYWRkaXRpb25h
bFdlYlZpc2libGVQbHVnaW5zLmFwcGVuZChwbHVnaW4pOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0pOwogCiAgICAgc3Rk
Ojpzb3J0KHBsdWdpbnMuYmVnaW4oKSwgcGx1Z2lucy5lbmQoKSwgW10oY29uc3QgUGx1Z2luSW5m
byYgYSwgY29uc3QgUGx1Z2luSW5mbyYgYikgewogICAgICAgICByZXR1cm4gY29kZVBvaW50Q29t
cGFyZUxlc3NUaGFuKGEubmFtZSwgYi5uYW1lKTsKICAgICB9KTsKLSAgICByZXR1cm4gcGx1Z2lu
czsKKyAgICByZXR1cm4geyBwbHVnaW5zLCBhZGRpdGlvbmFsV2ViVmlzaWJsZVBsdWdpbnMgfTsK
IH0KIAotdm9pZCBQbHVnaW5EYXRhOjpnZXRXZWJWaXNpYmxlTWltZXNBbmRQbHVnaW5JbmRpY2Vz
KFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiYgbWltZXMsIFZlY3RvcjxzaXplX3Q+JiBtaW1lUGx1Z2lu
SW5kaWNlcykgY29uc3QKK1ZlY3RvcjxNaW1lQ2xhc3NJbmZvPiBQbHVnaW5EYXRhOjp3ZWJWaXNp
YmxlTWltZVR5cGVzKCkgY29uc3QKIHsKLSAgICBnZXRNaW1lc0FuZFBsdWdpbkluZGljaWVzRm9y
UGx1Z2lucyh3ZWJWaXNpYmxlUGx1Z2lucygpLCBtaW1lcywgbWltZVBsdWdpbkluZGljZXMpOwot
fQotCi12b2lkIFBsdWdpbkRhdGE6OmdldE1pbWVzQW5kUGx1Z2luSW5kaWNlcyhWZWN0b3I8TWlt
ZUNsYXNzSW5mbz4mIG1pbWVzLCBWZWN0b3I8c2l6ZV90PiYgbWltZVBsdWdpbkluZGljZXMpIGNv
bnN0Ci17Ci0gICAgZ2V0TWltZXNBbmRQbHVnaW5JbmRpY2llc0ZvclBsdWdpbnMocGx1Z2lucygp
LCBtaW1lcywgbWltZVBsdWdpbkluZGljZXMpOworICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiBy
ZXN1bHQ7CisgICAgZm9yIChhdXRvJiBwbHVnaW4gOiB3ZWJWaXNpYmxlUGx1Z2lucygpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgbWltZSA6IHBsdWdpbi5taW1lcykKKyAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQobWltZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUGx1
Z2luRGF0YTo6Z2V0TWltZXNBbmRQbHVnaW5JbmRpY2llc0ZvclBsdWdpbnMoY29uc3QgVmVjdG9y
PFBsdWdpbkluZm8+JiBwbHVnaW5zLCBWZWN0b3I8TWltZUNsYXNzSW5mbz4mIG1pbWVzLCBWZWN0
b3I8c2l6ZV90PiYgbWltZVBsdWdpbkluZGljZXMpIGNvbnN0CitzdGF0aWMgYm9vbCBzdXBwb3J0
c01pbWVUeXBlRm9yUGx1Z2lucyhjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBQbHVnaW5E
YXRhOjpBbGxvd2VkUGx1Z2luVHlwZXMgYWxsb3dlZFBsdWdpblR5cGVzLCBjb25zdCBWZWN0b3I8
UGx1Z2luSW5mbz4mIHBsdWdpbnMpCiB7Ci0gICAgQVNTRVJUX0FSRyhtaW1lcywgbWltZXMuaXNF
bXB0eSgpKTsKLSAgICBBU1NFUlRfQVJHKG1pbWVQbHVnaW5JbmRpY2VzLCBtaW1lUGx1Z2luSW5k
aWNlcy5pc0VtcHR5KCkpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBsdWdpbnMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgUGx1Z2luSW5mbyYgcGx1Z2luID0gcGx1Z2lu
c1tpXTsKKyAgICBmb3IgKGF1dG8gcGx1Z2luIDogcGx1Z2lucykgewogICAgICAgICBmb3IgKGF1
dG8mIG1pbWUgOiBwbHVnaW4ubWltZXMpIHsKLSAgICAgICAgICAgIG1pbWVzLmFwcGVuZChtaW1l
KTsKLSAgICAgICAgICAgIG1pbWVQbHVnaW5JbmRpY2VzLmFwcGVuZChpKTsKKyAgICAgICAgICAg
IGlmIChtaW1lLnR5cGUgPT0gbWltZVR5cGUgJiYgKGFsbG93ZWRQbHVnaW5UeXBlcyA9PSBQbHVn
aW5EYXRhOjpBbGxQbHVnaW5zIHx8IHBsdWdpbi5pc0FwcGxpY2F0aW9uUGx1Z2luKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLWJvb2wgUGx1Z2luRGF0YTo6c3VwcG9ydHNXZWJWaXNpYmxlTWltZVR5cGVGb3JV
UkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgQWxsb3dlZFBsdWdpblR5cGVzIGFsbG93
ZWRQbHVnaW5UeXBlcywgY29uc3QgVVJMJiB1cmwpIGNvbnN0Citib29sIFBsdWdpbkRhdGE6OnN1
cHBvcnRzTWltZVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgQWxsb3dlZFBsdWdp
blR5cGVzIGFsbG93ZWRQbHVnaW5UeXBlcykgY29uc3QKIHsKLSAgICBpZiAoIXByb3RvY29sSG9z
dEFuZFBvcnRBcmVFcXVhbChtX2NhY2hlZFZpc2libGVQbHVnaW5zLnBhZ2VVUkwsIHVybCkpCi0g
ICAgICAgIG1fY2FjaGVkVmlzaWJsZVBsdWdpbnMgPSB7IHVybCwgbV9wYWdlLnBsdWdpbkluZm9Q
cm92aWRlcigpLndlYlZpc2libGVQbHVnaW5JbmZvKG1fcGFnZSwgdXJsKSB9OwotICAgIGlmICgh
bV9jYWNoZWRWaXNpYmxlUGx1Z2lucy5wbHVnaW5MaXN0KQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgcmV0dXJuIHN1cHBvcnRzV2ViVmlzaWJsZU1pbWVUeXBlKG1pbWVUeXBlLCBhbGxvd2Vk
UGx1Z2luVHlwZXMsICptX2NhY2hlZFZpc2libGVQbHVnaW5zLnBsdWdpbkxpc3QpOworICAgIHJl
dHVybiBzdXBwb3J0c01pbWVUeXBlRm9yUGx1Z2lucyhtaW1lVHlwZSwgYWxsb3dlZFBsdWdpblR5
cGVzLCBwbHVnaW5zKCkpOwogfQogCiBib29sIFBsdWdpbkRhdGE6OnN1cHBvcnRzV2ViVmlzaWJs
ZU1pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IEFsbG93ZWRQbHVnaW5UeXBl
cyBhbGxvd2VkUGx1Z2luVHlwZXMpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN1cHBvcnRzV2ViVmlz
aWJsZU1pbWVUeXBlKG1pbWVUeXBlLCBhbGxvd2VkUGx1Z2luVHlwZXMsIHdlYlZpc2libGVQbHVn
aW5zKCkpOwotfQotCi1ib29sIFBsdWdpbkRhdGE6OnN1cHBvcnRzV2ViVmlzaWJsZU1pbWVUeXBl
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IEFsbG93ZWRQbHVnaW5UeXBlcyBhbGxvd2Vk
UGx1Z2luVHlwZXMsIGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZvPiYgcGx1Z2lucykgY29uc3QKLXsK
LSAgICBWZWN0b3I8TWltZUNsYXNzSW5mbz4gbWltZXM7Ci0gICAgVmVjdG9yPHNpemVfdD4gbWlt
ZVBsdWdpbkluZGljZXM7Ci0gICAgZ2V0TWltZXNBbmRQbHVnaW5JbmRpY2llc0ZvclBsdWdpbnMo
cGx1Z2lucywgbWltZXMsIG1pbWVQbHVnaW5JbmRpY2VzKTsKLQotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtaW1lcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobWltZXNbaV0udHlw
ZSA9PSBtaW1lVHlwZSAmJiAoYWxsb3dlZFBsdWdpblR5cGVzID09IEFsbFBsdWdpbnMgfHwgcGx1
Z2luc1ttaW1lUGx1Z2luSW5kaWNlc1tpXV0uaXNBcHBsaWNhdGlvblBsdWdpbikpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBz
dXBwb3J0c01pbWVUeXBlRm9yUGx1Z2lucyhtaW1lVHlwZSwgYWxsb3dlZFBsdWdpblR5cGVzLCB3
ZWJWaXNpYmxlUGx1Z2lucygpKTsKIH0KIAotYm9vbCBQbHVnaW5EYXRhOjpnZXRQbHVnaW5JbmZv
Rm9yV2ViVmlzaWJsZU1pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFBsdWdpbkluZm8m
IHBsdWdpbkluZm9SZWYpIGNvbnN0Citib29sIFBsdWdpbkRhdGE6OnN1cHBvcnRzV2ViVmlzaWJs
ZU1pbWVUeXBlRm9yVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IEFsbG93ZWRQbHVn
aW5UeXBlcyBhbGxvd2VkUGx1Z2luVHlwZXMsIGNvbnN0IFVSTCYgdXJsKSBjb25zdAogewotICAg
IFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiBtaW1lczsKLSAgICBWZWN0b3I8c2l6ZV90PiBtaW1lUGx1
Z2luSW5kaWNlczsKLSAgICBjb25zdCBWZWN0b3I8UGx1Z2luSW5mbz4mIHBsdWdpbnMgPSB3ZWJW
aXNpYmxlUGx1Z2lucygpOwotICAgIGdldFdlYlZpc2libGVNaW1lc0FuZFBsdWdpbkluZGljZXMo
bWltZXMsIG1pbWVQbHVnaW5JbmRpY2VzKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtaW1lcy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBNaW1lQ2xhc3NJbmZvJiBpbmZv
ID0gbWltZXNbaV07Ci0KLSAgICAgICAgaWYgKGluZm8udHlwZSA9PSBtaW1lVHlwZSkgewotICAg
ICAgICAgICAgcGx1Z2luSW5mb1JlZiA9IHBsdWdpbnNbbWltZVBsdWdpbkluZGljZXNbaV1dOwot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKCFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwobV9jYWNoZWRWaXNp
YmxlUGx1Z2lucy5wYWdlVVJMLCB1cmwpKQorICAgICAgICBtX2NhY2hlZFZpc2libGVQbHVnaW5z
ID0geyB1cmwsIG1fcGFnZS5wbHVnaW5JbmZvUHJvdmlkZXIoKS53ZWJWaXNpYmxlUGx1Z2luSW5m
byhtX3BhZ2UsIHVybCkgfTsKKyAgICBpZiAoIW1fY2FjaGVkVmlzaWJsZVBsdWdpbnMucGx1Z2lu
TGlzdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBzdXBwb3J0c01pbWVUeXBl
Rm9yUGx1Z2lucyhtaW1lVHlwZSwgYWxsb3dlZFBsdWdpblR5cGVzLCAqbV9jYWNoZWRWaXNpYmxl
UGx1Z2lucy5wbHVnaW5MaXN0KTsKIH0KIAogU3RyaW5nIFBsdWdpbkRhdGE6OnBsdWdpbkZpbGVG
b3JXZWJWaXNpYmxlTWltZVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29uc3QKIHsKLSAg
ICBQbHVnaW5JbmZvIGluZm87Ci0gICAgaWYgKGdldFBsdWdpbkluZm9Gb3JXZWJWaXNpYmxlTWlt
ZVR5cGUobWltZVR5cGUsIGluZm8pKQotICAgICAgICByZXR1cm4gaW5mby5maWxlOwotICAgIHJl
dHVybiBTdHJpbmcoKTsKLX0KLQotYm9vbCBQbHVnaW5EYXRhOjpzdXBwb3J0c01pbWVUeXBlKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IEFsbG93ZWRQbHVnaW5UeXBlcyBhbGxvd2VkUGx1
Z2luVHlwZXMpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPE1pbWVDbGFzc0luZm8+IG1pbWVzOwotICAg
IFZlY3RvcjxzaXplX3Q+IG1pbWVQbHVnaW5JbmRpY2VzOwotICAgIGNvbnN0IFZlY3RvcjxQbHVn
aW5JbmZvPiYgcGx1Z2lucyA9IHRoaXMtPnBsdWdpbnMoKTsKLSAgICBnZXRNaW1lc0FuZFBsdWdp
bkluZGljZXMobWltZXMsIG1pbWVQbHVnaW5JbmRpY2VzKTsKLQotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtaW1lcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobWltZXNbaV0udHlw
ZSA9PSBtaW1lVHlwZSAmJiAoYWxsb3dlZFBsdWdpblR5cGVzID09IEFsbFBsdWdpbnMgfHwgcGx1
Z2luc1ttaW1lUGx1Z2luSW5kaWNlc1tpXV0uaXNBcHBsaWNhdGlvblBsdWdpbikpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBmb3IgKGF1dG8gcGx1Z2luIDogd2ViVmlzaWJsZVBsdWdp
bnMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIG1pbWUgOiBwbHVnaW4ubWltZXMpIHsKKyAgICAg
ICAgICAgIGlmIChtaW1lLnR5cGUgPT0gbWltZVR5cGUpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHBsdWdpbi5maWxlOworICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBQbHVnaW5EYXRhOjppbml0UGx1Z2lucygpCi17Ci0gICAgQVNTRVJUKG1fcGx1Z2lucy5p
c0VtcHR5KCkpOwotCi0gICAgbV9wbHVnaW5zID0gbV9wYWdlLnBsdWdpbkluZm9Qcm92aWRlcigp
LnBsdWdpbkluZm8obV9wYWdlLCBtX3N1cHBvcnRlZFBsdWdpbklkZW50aWZpZXJzKTsKKyAgICBy
ZXR1cm4geyB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL1BsdWdpbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL1BsdWdpbkRhdGEuaAkocmV2aXNpb24gMjYzMDA3KQorKysgU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDggKzIxLDYgQEAKICNw
cmFnbWEgb25jZQogCiAjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KLSNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVVJMLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpA
QCAtMzIsNyArMzAsNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBQYWdlOwotc3Ry
dWN0IFBsdWdpbkluZm87CiAKIGVudW0gY2xhc3MgUGx1Z2luTG9hZENsaWVudFBvbGljeSA6IHVp
bnQ4X3QgewogICAgIC8vIE5vIGNsaWVudC1zcGVjaWZpYyBwbHVnLWluIGxvYWQgcG9saWN5IGhh
cyBiZWVuIGRlZmluZWQuIFRoZSBwbHVnLWluIHNob3VsZCBiZSB2aXNpYmxlIGluIG5hdmlnYXRv
ci5wbHVnaW5zIGFuZCBXZWJLaXQgc2hvdWxkIHN5bmNocm9ub3VzbHkKQEAgLTEwMiwyNyArOTks
MjMgQEAgcHVibGljOgogCiAgICAgY29uc3QgVmVjdG9yPFBsdWdpbkluZm8+JiBwbHVnaW5zKCkg
Y29uc3QgeyByZXR1cm4gbV9wbHVnaW5zOyB9CiAgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgVmVj
dG9yPFBsdWdpbkluZm8+JiB3ZWJWaXNpYmxlUGx1Z2lucygpIGNvbnN0OwotICAgIFZlY3RvcjxQ
bHVnaW5JbmZvPiBwdWJsaWNseVZpc2libGVQbHVnaW5zKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBnZXRXZWJWaXNpYmxlTWltZXNBbmRQbHVnaW5JbmRpY2VzKFZlY3RvcjxNaW1l
Q2xhc3NJbmZvPiYsIFZlY3RvcjxzaXplX3Q+JikgY29uc3Q7CisgICAgc3RkOjpwYWlyPFZlY3Rv
cjxQbHVnaW5JbmZvPiwgVmVjdG9yPFBsdWdpbkluZm8+PiBwdWJsaWNseVZpc2libGVQbHVnaW5z
QW5kQWRkaXRpb25hbFdlYlZpc2libGVQbHVnaW5zKCkgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VY
UE9SVCBWZWN0b3I8TWltZUNsYXNzSW5mbz4gd2ViVmlzaWJsZU1pbWVUeXBlcygpIGNvbnN0Owog
CiAgICAgZW51bSBBbGxvd2VkUGx1Z2luVHlwZXMgewogICAgICAgICBBbGxQbHVnaW5zLAogICAg
ICAgICBPbmx5QXBwbGljYXRpb25QbHVnaW5zCiAgICAgfTsKLQotICAgIFdFQkNPUkVfRVhQT1JU
IGJvb2wgc3VwcG9ydHNXZWJWaXNpYmxlTWltZVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
Y29uc3QgQWxsb3dlZFBsdWdpblR5cGVzKSBjb25zdDsKLSAgICBTdHJpbmcgcGx1Z2luRmlsZUZv
cldlYlZpc2libGVNaW1lVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSBjb25zdDsKLQogICAg
IFdFQkNPUkVfRVhQT1JUIGJvb2wgc3VwcG9ydHNNaW1lVHlwZShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBjb25zdCBBbGxvd2VkUGx1Z2luVHlwZXMpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JU
IGJvb2wgc3VwcG9ydHNXZWJWaXNpYmxlTWltZVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
Y29uc3QgQWxsb3dlZFBsdWdpblR5cGVzKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBib29s
IHN1cHBvcnRzV2ViVmlzaWJsZU1pbWVUeXBlRm9yVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IGNvbnN0IEFsbG93ZWRQbHVnaW5UeXBlcywgY29uc3QgVVJMJikgY29uc3Q7CiAKKyAgICBTdHJp
bmcgcGx1Z2luRmlsZUZvcldlYlZpc2libGVNaW1lVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBQbHVnaW5EYXRhKFBhZ2UmKTsKICAg
ICB2b2lkIGluaXRQbHVnaW5zKCk7Ci0gICAgYm9vbCBnZXRQbHVnaW5JbmZvRm9yV2ViVmlzaWJs
ZU1pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFBsdWdpbkluZm8mKSBjb25zdDsKLSAg
ICB2b2lkIGdldE1pbWVzQW5kUGx1Z2luSW5kaWNlcyhWZWN0b3I8TWltZUNsYXNzSW5mbz4mLCBW
ZWN0b3I8c2l6ZV90PiYpIGNvbnN0OwotICAgIHZvaWQgZ2V0TWltZXNBbmRQbHVnaW5JbmRpY2ll
c0ZvclBsdWdpbnMoY29uc3QgVmVjdG9yPFBsdWdpbkluZm8+JiwgVmVjdG9yPE1pbWVDbGFzc0lu
Zm8+JiwgVmVjdG9yPHNpemVfdD4mKSBjb25zdDsKLSAgICBib29sIHN1cHBvcnRzV2ViVmlzaWJs
ZU1pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IEFsbG93ZWRQbHVnaW5UeXBl
cywgY29uc3QgVmVjdG9yPFBsdWdpbkluZm8+JikgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICBQ
YWdlJiBtX3BhZ2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401868</attachid>
            <date>2020-06-14 11:46:25 -0700</date>
            <delta_ts>2020-06-14 11:50:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213185-20200614114624.patch</filename>
            <type>text/plain</type>
            <size>49064</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzAxMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBACisyMDIwLTA2LTE0ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbV1BUXSBodG1sL3dlYmFwcGFwaXMv
c3lzdGVtLXN0YXRlLWFuZC1jYXBhYmlsaXRpZXMvdGhlLW5hdmlnYXRvci1vYmplY3QvbmF2aWdh
dG9yLXBsdWdpbmFycmF5Lmh0bWwgZmFpbHMgZHVlIHRvIGxhY2sgb2YgY2FjaGluZyBvZiBQbHVn
aW4gb2JqZWN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjEzMTg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgT3ZlcmhhdWwgd2ViIGV4cG9zZWQgcGx1Z2luIEFQSXM6CisgICAgICAgIC0gQWxsIERPTVBs
dWdpbiBhbmQgRE9NTWltZVR5cGVzIGFyZSBub3cgY3JlYXRlZCB0b2dldGhlciAoYWxvbmcgd2l0
aCB0aGUgRE9NUGx1Z2luQXJyYXkgYW5kIAorICAgICAgICAgIERPTU1pbWVUeXBlQXJyYXkpIG9u
IGZpcnN0IGFjY2VzcyBvZiBlaXRoZXIgbmF2aWdhdG9yLnBsdWdpbnMgb3IgbmF2aWdhdG9yLm1p
bWVUeXBlcy4KKyAgICAgICAgLSBET01QbHVnaW5zIGFyZSBjcmVhdGVkIGFuZCBzdG9yZWQgaW4g
dGhlIERPTVBsdWdpbkFycmF5IChmaXhpbmcgdGhlIGluaXRpYWwgbGFjayBvZiBjYWNoaW5nIGlz
c3VlKQorICAgICAgICAtIERPTU1pbWVUeXBlcyBhcmUgY3JlYXRlZCBhbmQgc3RvcmVkIGluIHRo
ZSBET01NaW1lVHlwZUFycmF5LgorICAgICAgICAtIERPTVBsdWdpbnMgaG9sZCBhIHN0cm9uZyBy
ZWZlcmVuY2UgdG8gdGhlaXIgYXNzb2NpYXRlZCBET01NaW1lVHlwZS4gVGhlIERPTU1pbWVUeXBl
IGhhcworICAgICAgICAgIGEgd2VhayByZWZlcmVuY2UgYmFjayB0byB0aGUgRE9NUGx1Z2luLiBU
aGlzIG1lYW5zIGZvciBhIHNpbmdsZSBleGVjdXRhdGlvbiBjb250ZXh0LCB3ZSBvbmx5CisgICAg
ICAgICAgZXZlciBjcmVhdGUgb25lIERPTVBsdWdpbiAvIERPTU1pbWVUeXBlIGZvciBlYWNoIHVu
ZGVybHlpbmcgcGx1Z2luIC8gbWltZXR5cGUuCisgICAgICAgIC0gVXBkYXRlIEdDIHNvIHRoYXQg
RE9NUGx1Z2luIGFuZCBET01NaW1lVHlwZSAoaW4gYWRkaXRpb24gdG8gRE9NUGx1Z2luQXJyYXkg
YW5kIERPTU1pbWVUeXBlQXJyYXkKKyAgICAgICAgICB3aGljaCB3ZXJlIGFscmVhZHkgZG9pbmcg
dGhpcykgdXNlIG5hdmlnYXRvciByZWFjaGFiaWxpdHkgZm9yIHRoZWlyIGxpZmV0aW1lLiBUaGlz
IGlzIGFsbW9zdAorICAgICAgICAgIGNvcnJlY3QsIGV4Y2VwdCBpZiB3ZSBldmVyIGltcGxlbWVu
dCBET01QbHVnaW5BcnJheS5yZWZyZXNoKGZhbHNlKSB0byBtYXRjaCB0aGUgc3BlYywgaW4gd2hp
Y2gKKyAgICAgICAgICBjYXNlIHlvdSBjb3VsZCBlbmQgdXAgd2l0aCBzb21lIERPTVBsdWdpbnMg
YW5kIERPTU1pbWVUeXBlcyB0aGF0IGFyZSBtYXJrZWQgYXMgcmVhY2hhYmxlIHdoZW4KKyAgICAg
ICAgICB0aGV5IHJlYWxseSBhcmUgbm90LCBidXQgb25seSBwbHVnaW5zIHRoYXQgd2VyZSByZW1v
dmVkLiBUaGlzIHNlZW1zIHNvIHVubGlrZWx5IHRvIG1hdHRlciB0aGF0CisgICAgICAgICAgaW1w
bGVtZW50aW5nIGEgbW9yZSBzdHJpY3QgcmVhY2hhYmlsaXR5IGZ1bmN0aW9uIHNlZW1zIGxpa2Ug
dGhlIHdyb25nIHdheSB0byBnby4KKyAgICAgICAgICAKKyAgICAgICAgW1dPUksgSU4gUFJPR1JF
U1NdCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNl
cy1pbnB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGxvYWRl
ci9TdWJmcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5kUGx1Z2luTUlNRVR5
cGVGcm9tVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmxvZ1BsdWdpblJlcXVlc3QpOgorICAgICAg
ICAqIHBhZ2UvTmF2aWdhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6aW5p
dGlhbGl6ZVBsdWdpbkFuZE1JTUVUeXBlQXJyYXlzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6TmF2aWdhdG9yOjpwbHVnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6bWlt
ZVR5cGVzKToKKyAgICAgICAgKiBwYWdlL05hdmlnYXRvci5oOgorICAgICAgICAqIHBhZ2UvTmF2
aWdhdG9yLmlkbDoKKyAgICAgICAgKiBwYWdlL05hdmlnYXRvclBsdWdpbnMuaWRsOiBBZGRlZC4K
KyAgICAgICAgKiBwbHVnaW5zL0RPTU1pbWVUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRP
TU1pbWVUeXBlOjpET01NaW1lVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpET01NaW1lVHlwZTo6
c3VmZml4ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RE9NTWltZVR5cGU6OmVuYWJsZWRQ
bHVnaW4gY29uc3QpOgorICAgICAgICAqIHBsdWdpbnMvRE9NTWltZVR5cGUuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkRPTU1pbWVUeXBlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NTWlt
ZVR5cGU6Om5hdmlnYXRvcik6CisgICAgICAgICogcGx1Z2lucy9ET01NaW1lVHlwZS5pZGw6Cisg
ICAgICAgICogcGx1Z2lucy9ET01NaW1lVHlwZUFycmF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRPTU1pbWVUeXBlQXJyYXk6OkRPTU1pbWVUeXBlQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6
RE9NTWltZVR5cGVBcnJheTo6bGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTU1p
bWVUeXBlQXJyYXk6Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RE9NTWltZVR5cGVBcnJheTo6
bmFtZWRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTU1pbWVUeXBlQXJyYXk6OnN1cHBvcnRl
ZFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6RE9NTWltZVR5cGVBcnJheTo6Z2V0
UGx1Z2luRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGx1Z2lucy9ET01NaW1lVHlw
ZUFycmF5Lmg6CisgICAgICAgICogcGx1Z2lucy9ET01QbHVnaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NUGx1Z2luOjpET01QbHVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6RE9NUGx1Z2lu
OjppdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBsdWdpbjo6bmFtZWRJdGVtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTVBsdWdpbjo6c3VwcG9ydGVkUHJvcGVydHlOYW1lcyk6CisgICAgICAg
ICogcGx1Z2lucy9ET01QbHVnaW4uaDoKKyAgICAgICAgKiBwbHVnaW5zL0RPTVBsdWdpbi5pZGw6
CisgICAgICAgICogcGx1Z2lucy9ET01QbHVnaW5BcnJheS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpET01QbHVnaW5BcnJheTo6RE9NUGx1Z2luQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6RE9N
UGx1Z2luQXJyYXk6Omxlbmd0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpET01QbHVnaW5B
cnJheTo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpET01QbHVnaW5BcnJheTo6bmFtZWRJdGVt
KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBsdWdpbkFycmF5OjpzdXBwb3J0ZWRQcm9wZXJ0eU5h
bWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBsdWdpbkFycmF5OjpwbHVnaW5EYXRhIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbHVnaW5zL0RPTVBsdWdpbkFycmF5Lmg6CisgICAgICAg
ICogcGx1Z2lucy9QbHVnaW5EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6
OmluaXRQbHVnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OnB1YmxpY2x5Vmlz
aWJsZVBsdWdpbnNBbmRBZGRpdGlvbmFsV2ViVmlzaWJsZVBsdWdpbnMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6d2ViVmlzaWJsZU1pbWVUeXBlcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpzdXBwb3J0c01pbWVUeXBlRm9yUGx1Z2lucyk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5EYXRhOjpzdXBwb3J0c01pbWVUeXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpbkRhdGE6OnN1cHBvcnRzV2ViVmlzaWJsZU1pbWVUeXBlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OnN1cHBvcnRzV2ViVmlzaWJsZU1pbWVUeXBlRm9yVVJM
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OnBsdWdpbkZpbGVGb3JXZWJW
aXNpYmxlTWltZVR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6cHVi
bGljbHlWaXNpYmxlUGx1Z2lucyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5EYXRhOjpnZXRXZWJWaXNpYmxlTWltZXNBbmRQbHVnaW5JbmRpY2VzIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OmdldE1pbWVzQW5kUGx1Z2luSW5k
aWNlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhOjpnZXRN
aW1lc0FuZFBsdWdpbkluZGljaWVzRm9yUGx1Z2lucyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5EYXRhOjpnZXRQbHVnaW5JbmZvRm9yV2ViVmlzaWJsZU1pbWVUeXBl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpbkRhdGEuaDoKKwogMjAy
MC0wNi0xNCAgVGV0c3VoYXJ1IE9oemVraSAgPHRldHN1aGFydS5vaHpla2lAZ21haWwuY29tPgog
CiAgICAgICAgIFdpdGhkcmF3IEZpbGVSZWFkZXJTeW5jIGZyb20gU2VydmljZVdvcmtlcgpJbmRl
eDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05NDUsNiArOTQ1LDcgQEAgc2V0KFdl
YkNvcmVfTk9OX1NWR19JRExfRklMRVMKICAgICBwYWdlL05hdmlnYXRvcklELmlkbAogICAgIHBh
Z2UvTmF2aWdhdG9yTGFuZ3VhZ2UuaWRsCiAgICAgcGFnZS9OYXZpZ2F0b3JPbkxpbmUuaWRsCisg
ICAgcGFnZS9OYXZpZ2F0b3JQbHVnaW5zLmlkbAogICAgIHBhZ2UvTmF2aWdhdG9yU2VydmljZVdv
cmtlci5pZGwKICAgICBwYWdlL05hdmlnYXRvclNoYXJlLmlkbAogICAgIHBhZ2UvUGVyZm9ybWFu
Y2UuaWRsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVs
aXN0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0Lnhj
ZmlsZWxpc3QJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3Vy
Y2VzLWlucHV0LnhjZmlsZWxpc3QJKHdvcmtpbmcgY29weSkKQEAgLTkzMyw2ICs5MzMsNyBAQCAk
KFBST0pFQ1RfRElSKS9wYWdlL05hdmlnYXRvcklELmlkbAogJChQUk9KRUNUX0RJUikvcGFnZS9O
YXZpZ2F0b3JJc0xvZ2dlZEluLmlkbAogJChQUk9KRUNUX0RJUikvcGFnZS9OYXZpZ2F0b3JMYW5n
dWFnZS5pZGwKICQoUFJPSkVDVF9ESVIpL3BhZ2UvTmF2aWdhdG9yT25MaW5lLmlkbAorJChQUk9K
RUNUX0RJUikvcGFnZS9OYXZpZ2F0b3JQbHVnaW5zLmlkbAogJChQUk9KRUNUX0RJUikvcGFnZS9O
YXZpZ2F0b3JTZXJ2aWNlV29ya2VyLmlkbAogJChQUk9KRUNUX0RJUikvcGFnZS9OYXZpZ2F0b3JT
aGFyZS5pZGwKICQoUFJPSkVDVF9ESVIpL3BhZ2UvUGVyZm9ybWFuY2UuaWRsCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAkocmV2aXNp
b24gMjYzMDA3KQorKysgU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmls
ZWxpc3QJKHdvcmtpbmcgY29weSkKQEAgLTExNTQsNiArMTE1NCw4IEBAICQoQlVJTFRfUFJPRFVD
VFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWIKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJDb3JlL0pTTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmgKICQoQlVJTFRfUFJPRFVD
VFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTTmF2aWdhdG9yT25MaW5lLmNwcAogJChC
VUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNOYXZpZ2F0b3JPbkxp
bmUuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNOYXZp
Z2F0b3JQbHVnaW5zLmNwcAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvSlNOYXZpZ2F0b3JQbHVnaW5zLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJDb3JlL0pTTmF2aWdhdG9yU2VydmljZVdvcmtlci5jcHAKICQoQlVJTFRfUFJP
RFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTTmF2aWdhdG9yU2VydmljZVdvcmtl
ci5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU05hdmln
YXRvclNoYXJlLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lv
biAyNjMwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5n
IGNvcHkpCkBAIC05NTIsNiArOTUyLDcgQEAgSlNfQklORElOR19JRExTID0gXAogICAgICQoV2Vi
Q29yZSkvcGFnZS9OYXZpZ2F0b3JJc0xvZ2dlZEluLmlkbCBcCiAgICAgJChXZWJDb3JlKS9wYWdl
L05hdmlnYXRvckxhbmd1YWdlLmlkbCBcCiAgICAgJChXZWJDb3JlKS9wYWdlL05hdmlnYXRvck9u
TGluZS5pZGwgXAorICAgICQoV2ViQ29yZSkvcGFnZS9OYXZpZ2F0b3JQbHVnaW5zLmlkbCBcCiAg
ICAgJChXZWJDb3JlKS9wYWdlL05hdmlnYXRvclNlcnZpY2VXb3JrZXIuaWRsIFwKICAgICAkKFdl
YkNvcmUpL3BhZ2UvTmF2aWdhdG9yU2hhcmUuaWRsIFwKICAgICAkKFdlYkNvcmUpL3BhZ2UvUGVy
Zm9ybWFuY2UuaWRsIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtOTg4
Nyw2ICs5ODg3LDcgQEAKIAkJN0FGOUIyMDkxOENGQjVGMjAwQzY0QkVGIC8qIEpTVlRUUmVnaW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVlRUUmVnaW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjlCMjBBMThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZU
VFJlZ2lvbkxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNW
VFRSZWdpb25MaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FGOUIyMEIx
OENGQjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU1ZUVFJlZ2lvbkxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJN0MwMTdDM0QyNDk2OUYxMzAwREMwQzAyIC8qIE5hdmlnYXRvclBsdWdpbnMuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IE5hdmlnYXRvclBsdWdpbnMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QzAyOUM2RDI0OTNDOEY4MDAyNjgyMDQgLyogQ29sb3JUeXBlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b2xvclR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMENFRjI4MUU0QTU0
MkMwMDhERUI4MCAvKiBKU0RPTUNvbnN0cnVjdG9yQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0RPTUNvbnN0cnVjdG9yQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3QzBDRUYyOTFFNEE1NEQzMDA4REVCODAgLyogSlNET01Db25zdHJ1Y3Rvcldp
dGhEb2N1bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUNvbnN0
cnVjdG9yV2l0aERvY3VtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTEx
Miw2ICsyMTExMyw3IEBACiAJCQkJNkI1MDdBMjMyMzRCRjM0MTAwQkU3QzYyIC8qIE5hdmlnYXRv
cklzTG9nZ2VkSW4uaWRsICovLAogCQkJCTdDNUJFQTNCMUU5RUU3NzEwMENDNTE3QiAvKiBOYXZp
Z2F0b3JMYW5ndWFnZS5pZGwgKi8sCiAJCQkJN0M1QkVBM0MxRTlFRTc3MTAwQ0M1MTdCIC8qIE5h
dmlnYXRvck9uTGluZS5pZGwgKi8sCisJCQkJN0MwMTdDM0QyNDk2OUYxMzAwREMwQzAyIC8qIE5h
dmlnYXRvclBsdWdpbnMuaWRsICovLAogCQkJCTUxODJDMjRCMUYzMTNBRTAwMDU5QkE3QyAvKiBO
YXZpZ2F0b3JTZXJ2aWNlV29ya2VyLmlkbCAqLywKIAkJCQkxREM1NTNGRDIxMUJBMTJBMDA0Qjc4
MEUgLyogTmF2aWdhdG9yU2hhcmUuaWRsICovLAogCQkJCTAwMTQ2Mjg4MTAzQ0QxREUwMDBCMjBE
QiAvKiBPcmlnaW5BY2Nlc3NFbnRyeS5jcHAgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvU3ViZnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9TdWJmcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MywzMCArMTYz
LDI1IEBAIGJvb2wgRnJhbWVMb2FkZXI6OlN1YmZyYW1lTG9hZGVyOjpyZXF1ZXMKICAgICByZXR1
cm4gbG9hZFBsdWdpbihvd25lckVsZW1lbnQsIHVybCwgbWltZVR5cGUsIHBhcmFtTmFtZXMsIHBh
cmFtVmFsdWVzLCB1c2VGYWxsYmFjayk7CiB9CiAKLXN0YXRpYyBTdHJpbmcgZmluZFBsdWdpbk1J
TUVUeXBlRnJvbVVSTChQYWdlKiBwYWdlLCBjb25zdCBTdHJpbmcmIHVybCkKK3N0YXRpYyBTdHJp
bmcgZmluZFBsdWdpbk1JTUVUeXBlRnJvbVVSTChQYWdlJiBwYWdlLCBjb25zdCBTdHJpbmdWaWV3
JiB1cmwpCiB7CiAgICAgaWYgKCF1cmwpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKIAogICAgIHNpemVfdCBkb3RJbmRleCA9IHVybC5yZXZlcnNlRmluZCgn
LicpOwogICAgIGlmIChkb3RJbmRleCA9PSBub3RGb3VuZCkKLSAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgU3RyaW5nIGV4dGVuc2lvbiA9IHVybC5z
dWJzdHJpbmcoZG90SW5kZXggKyAxKTsKKyAgICBhdXRvIGV4dGVuc2lvbiA9IHVybC5zdWJzdHJp
bmcoZG90SW5kZXggKyAxKTsKIAotICAgIGNvbnN0IFBsdWdpbkRhdGEmIHBsdWdpbkRhdGEgPSBw
YWdlLT5wbHVnaW5EYXRhKCk7Ci0KLSAgICBWZWN0b3I8TWltZUNsYXNzSW5mbz4gbWltZXM7Ci0g
ICAgVmVjdG9yPHNpemVfdD4gbWltZVBsdWdpbkluZGljZXM7Ci0gICAgcGx1Z2luRGF0YS5nZXRX
ZWJWaXNpYmxlTWltZXNBbmRQbHVnaW5JbmRpY2VzKG1pbWVzLCBtaW1lUGx1Z2luSW5kaWNlcyk7
Ci0gICAgZm9yIChhdXRvJiBtaW1lIDogbWltZXMpIHsKLSAgICAgICAgZm9yIChhdXRvJiBtaW1l
RXh0ZW5zaW9uIDogbWltZS5leHRlbnNpb25zKSB7Ci0gICAgICAgICAgICBpZiAoZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZShleHRlbnNpb24sIG1pbWVFeHRlbnNpb24pKQotICAgICAgICAgICAgICAg
IHJldHVybiBtaW1lLnR5cGU7CisgICAgZm9yIChhdXRvJiBtaW1lVHlwZSA6IHBhZ2UucGx1Z2lu
RGF0YSgpLndlYlZpc2libGVNaW1lVHlwZXMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIG1pbWVU
eXBlRXh0ZW5zaW9uIDogbWltZVR5cGUuZXh0ZW5zaW9ucykgeworICAgICAgICAgICAgaWYgKGVx
dWFsSWdub3JpbmdBU0NJSUNhc2UoZXh0ZW5zaW9uLCBtaW1lVHlwZUV4dGVuc2lvbikpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1pbWVUeXBlLnR5cGU7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogc3RhdGljIHZvaWQgbG9n
UGx1Z2luUmVxdWVzdChQYWdlKiBwYWdlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBT
dHJpbmcmIHVybCwgYm9vbCBzdWNjZXNzKQpAQCAtMTk3LDcgKzE5Miw3IEBAIHN0YXRpYyB2b2lk
IGxvZ1BsdWdpblJlcXVlc3QoUGFnZSogcGFnZSwKICAgICBTdHJpbmcgbmV3TUlNRVR5cGUgPSBt
aW1lVHlwZTsKICAgICBpZiAoIW5ld01JTUVUeXBlKSB7CiAgICAgICAgIC8vIFRyeSB0byBmaWd1
cmUgb3V0IHRoZSBNSU1FIHR5cGUgZnJvbSB0aGUgVVJMIGV4dGVuc2lvbi4KLSAgICAgICAgbmV3
TUlNRVR5cGUgPSBmaW5kUGx1Z2luTUlNRVR5cGVGcm9tVVJMKHBhZ2UsIHVybCk7CisgICAgICAg
IG5ld01JTUVUeXBlID0gZmluZFBsdWdpbk1JTUVUeXBlRnJvbVVSTCgqcGFnZSwgdXJsKTsKICAg
ICAgICAgaWYgKCFuZXdNSU1FVHlwZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCShyZXZpc2lvbiAyNjMwMDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDkg
QEAKIAogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgorI2luY2x1
ZGUgIkRPTU1pbWVUeXBlLmgiCiAjaW5jbHVkZSAiRE9NTWltZVR5cGVBcnJheS5oIgorI2luY2x1
ZGUgIkRPTVBsdWdpbi5oIgogI2luY2x1ZGUgIkRPTVBsdWdpbkFycmF5LmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpAQCAtMTk1LDE0ICsxOTcsNTQgQEAgdm9p
ZCBOYXZpZ2F0b3I6OnNob3dTaGFyZURhdGEoRXhjZXB0aW9uTwogICAgIH0pOwogfQogCit2b2lk
IE5hdmlnYXRvcjo6aW5pdGlhbGl6ZVBsdWdpbkFuZE1JTUVUeXBlQXJyYXlzSWZOZWVkZWQoKQor
eworICAgIGlmIChtX3BsdWdpbnMpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIGZyYW1l
ID0gdGhpcy0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+cGFnZSgpKSB7Cisg
ICAgICAgIG1fcGx1Z2lucyA9IERPTVBsdWdpbkFycmF5OjpjcmVhdGUoKnRoaXMpOworICAgICAg
ICBtX21pbWVUeXBlcyA9IERPTU1pbWVUeXBlQXJyYXk6OmNyZWF0ZSgqdGhpcyk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIFtwdWJsaWNseVZpc2libGVQbHVnaW5zLCBhZGRp
dGlvbmFsV2ViVmlzaWJpbGVQbHVnaW5zXSA9IGZyYW1lLT5wYWdlKCktPnBsdWdpbkRhdGEoKS5w
dWJsaWNseVZpc2libGVQbHVnaW5zQW5kQWRkaXRpb25hbFdlYlZpc2libGVQbHVnaW5zKCk7CisK
KyAgICBWZWN0b3I8UmVmPERPTVBsdWdpbj4+IHB1YmxpY2x5VmlzaWJsZURPTVBsdWdpbnM7Cisg
ICAgVmVjdG9yPFJlZjxET01QbHVnaW4+PiBhZGRpdGlvbmFsV2ViVmlzaWJpbGVET01QbHVnaW5z
OworICAgIFZlY3RvcjxSZWY8RE9NTWltZVR5cGU+PiB3ZWJWaXNpYmlsZURPTU1pbWVUeXBlczsK
KworICAgIGlmIChwdWJsaWNseVZpc2libGVQbHVnaW5zLnNpemUoKSA+IDApIHsKKyAgICAgICAg
YWRkaXRpb25hbFdlYlZpc2liaWxlRE9NUGx1Z2lucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHB1
YmxpY2x5VmlzaWJsZVBsdWdpbnMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiBwbHVnaW4g
OiBwdWJsaWNseVZpc2libGVQbHVnaW5zKSB7CisgICAgICAgICAgICBhdXRvIGRvbVBsdWdpbiA9
IERPTVBsdWdpbjo6Y3JlYXRlKCp0aGlzLCBwbHVnaW4pOworICAgICAgICAgICAgZm9yIChhdXRv
JiBkb21NaW1lVHlwZSA6IGRvbVBsdWdpbi0+bWltZVR5cGVzKCkpCisgICAgICAgICAgICAgICAg
d2ViVmlzaWJpbGVET01NaW1lVHlwZXMuYXBwZW5kKGRvbU1pbWVUeXBlKTsKKyAgICAgICAgICAg
IGFkZGl0aW9uYWxXZWJWaXNpYmlsZURPTVBsdWdpbnMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUo
ZG9tUGx1Z2luKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGFkZGl0aW9uYWxXZWJWaXNp
YmlsZVBsdWdpbnMuc2l6ZSgpID4gMCkgeworICAgICAgICBhZGRpdGlvbmFsV2ViVmlzaWJpbGVE
T01QbHVnaW5zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYWRkaXRpb25hbFdlYlZpc2liaWxlUGx1
Z2lucy5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIHBsdWdpbiA6IGFkZGl0aW9uYWxXZWJW
aXNpYmlsZVBsdWdpbnMpIHsKKyAgICAgICAgICAgIGF1dG8gZG9tUGx1Z2luID0gRE9NUGx1Z2lu
OjpjcmVhdGUoKnRoaXMsIHBsdWdpbik7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGRvbU1pbWVU
eXBlIDogZG9tUGx1Z2luLT5taW1lVHlwZXMoKSkKKyAgICAgICAgICAgICAgICB3ZWJWaXNpYmls
ZURPTU1pbWVUeXBlcy5hcHBlbmQoZG9tTWltZVR5cGUpOworICAgICAgICAgICAgYWRkaXRpb25h
bFdlYlZpc2liaWxlRE9NUGx1Z2lucy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShkb21QbHVnaW4p
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBtX3BsdWdpbnMgPSBET01QbHVnaW5BcnJh
eTo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHB1YmxpY2x5VmlzaWJsZURPTVBsdWdpbnMpLCBXVEZN
b3ZlKGFkZGl0aW9uYWxXZWJWaXNpYmlsZURPTVBsdWdpbnMpKTsKKyAgICBtX21pbWVUeXBlcyA9
IERPTU1pbWVUeXBlQXJyYXk6OmNyZWF0ZSgqdGhpcywgV1RGTW92ZSh3ZWJWaXNpYmlsZURPTU1p
bWVUeXBlcykpOworfQorCiBET01QbHVnaW5BcnJheSYgTmF2aWdhdG9yOjpwbHVnaW5zKCkKIHsK
ICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSB7CiAgICAgICAgIGlmIChhdXRvKiBmcmFtZSA9IHRoaXMtPmZy
YW1lKCkpCiAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nTmF2
aWdhdG9yQVBJQWNjZXNzZWQoKmZyYW1lLT5kb2N1bWVudCgpLCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzOjpOYXZpZ2F0b3JBUEk6OlBsdWdpbnMpOwogICAgIH0KLSAgICBpZiAoIW1fcGx1Z2lucykK
LSAgICAgICAgbV9wbHVnaW5zID0gRE9NUGx1Z2luQXJyYXk6OmNyZWF0ZSgqdGhpcyk7CisgICAg
aW5pdGlhbGl6ZVBsdWdpbkFuZE1JTUVUeXBlQXJyYXlzSWZOZWVkZWQoKTsKICAgICByZXR1cm4g
Km1fcGx1Z2luczsKIH0KIApAQCAtMjEyLDggKzI1NCw3IEBAIERPTU1pbWVUeXBlQXJyYXkmIE5h
dmlnYXRvcjo6bWltZVR5cGVzKCkKICAgICAgICAgaWYgKGF1dG8qIGZyYW1lID0gdGhpcy0+ZnJh
bWUoKSkKICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dOYXZp
Z2F0b3JBUElBY2Nlc3NlZCgqZnJhbWUtPmRvY3VtZW50KCksIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3M6Ok5hdmlnYXRvckFQSTo6TWltZVR5cGVzKTsKICAgICB9Ci0gICAgaWYgKCFtX21pbWVUeXBl
cykKLSAgICAgICAgbV9taW1lVHlwZXMgPSBET01NaW1lVHlwZUFycmF5OjpjcmVhdGUoKnRoaXMp
OworICAgIGluaXRpYWxpemVQbHVnaW5BbmRNSU1FVHlwZUFycmF5c0lmTmVlZGVkKCk7CiAgICAg
cmV0dXJuICptX21pbWVUeXBlczsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9OYXZp
Z2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5oCShy
ZXZpc2lvbiAyNjMwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OCw2ICs2OCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzaG93U2hhcmVE
YXRhKEV4Y2VwdGlvbk9yPFNoYXJlRGF0YVdpdGhQYXJzZWRVUkwmPiwgUmVmPERlZmVycmVkUHJv
bWlzZT4mJik7CiAgICAgZXhwbGljaXQgTmF2aWdhdG9yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBET01XaW5kb3cmKTsKIAorICAgIHZvaWQgaW5pdGlhbGl6ZVBsdWdpbkFuZE1JTUVUeXBlQXJy
YXlzSWZOZWVkZWQoKTsKKwogICAgIG11dGFibGUgUmVmUHRyPFNoYXJlRGF0YVJlYWRlcj4gbV9s
b2FkZXI7CiAgICAgbXV0YWJsZSBib29sIG1faGFzUGVuZGluZ1NoYXJlIHsgZmFsc2UgfTsKICAg
ICBtdXRhYmxlIFJlZlB0cjxET01QbHVnaW5BcnJheT4gbV9wbHVnaW5zOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvTmF2aWdhdG9yLmlkbAkocmV2aXNpb24gMjYzMDA3KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9OYXZpZ2F0b3IuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMCArMjEsNyBAQAogICAg
IEdlbmVyYXRlSXNSZWFjaGFibGU9UmVhY2hhYmxlRnJvbURPTVdpbmRvdywKICAgICBKU0N1c3Rv
bU1hcmtGdW5jdGlvbiwKIF0gaW50ZXJmYWNlIE5hdmlnYXRvciB7Ci0gICAgcmVhZG9ubHkgYXR0
cmlidXRlIERPTVBsdWdpbkFycmF5IHBsdWdpbnM7Ci0gICAgcmVhZG9ubHkgYXR0cmlidXRlIERP
TU1pbWVUeXBlQXJyYXkgbWltZVR5cGVzOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFu
IGNvb2tpZUVuYWJsZWQ7Ci0gICAgYm9vbGVhbiBqYXZhRW5hYmxlZCgpOwogCiAgICAgW0NvbmRp
dGlvbmFsPU5BVklHQVRPUl9TVEFOREFMT05FXSByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBz
dGFuZGFsb25lOwogCkBAIC0zNSw1ICszMiw2IEBAIE5hdmlnYXRvciBpbXBsZW1lbnRzIE5hdmln
YXRvcklEOwogTmF2aWdhdG9yIGltcGxlbWVudHMgTmF2aWdhdG9yTGFuZ3VhZ2U7CiBOYXZpZ2F0
b3IgaW1wbGVtZW50cyBOYXZpZ2F0b3JNYXhUb3VjaFBvaW50czsKIE5hdmlnYXRvciBpbXBsZW1l
bnRzIE5hdmlnYXRvck9uTGluZTsKK05hdmlnYXRvciBpbXBsZW1lbnRzIE5hdmlnYXRvclBsdWdp
bnM7CiBOYXZpZ2F0b3IgaW1wbGVtZW50cyBOYXZpZ2F0b3JTZXJ2aWNlV29ya2VyOwogTmF2aWdh
dG9yIGltcGxlbWVudHMgTmF2aWdhdG9yU2hhcmU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L05hdmlnYXRvclBsdWdpbnMuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
TmF2aWdhdG9yUGx1Z2lucy5pZGwJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9OYXZpZ2F0b3JQbHVnaW5zLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworWworICAgIE5vSW50ZXJmYWNlT2JqZWN0CitdIGludGVyZmFjZSBOYXZpZ2F0
b3JMYW5ndWFnZSB7CisgICAgW1NhbWVPYmplY3RdIHJlYWRvbmx5IGF0dHJpYnV0ZSBQbHVnaW5B
cnJheSBwbHVnaW5zOworICAgIFtTYW1lT2JqZWN0XSByZWFkb25seSBhdHRyaWJ1dGUgTWltZVR5
cGVBcnJheSBtaW1lVHlwZXM7CisgICAgYm9vbGVhbiBqYXZhRW5hYmxlZCgpOworfTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NTWltZVR5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NTWltZVR5cGUuY3BwCShyZXZpc2lvbiAyNjMwMDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTU1pbWVUeXBlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjAsMjMgKzIwLDE2IEBACiAjaW5jbHVkZSAiRE9NTWltZVR5cGUuaCIKIAogI2luY2x1ZGUg
IkRPTVBsdWdpbi5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIu
aCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgorI2luY2x1ZGUg
Ik5hdmlnYXRvci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1ET01NaW1lVHlwZTo6RE9NTWltZVR5cGUoUmVmUHRyPFBsdWdp
bkRhdGE+JiYgcGx1Z2luRGF0YSwgRnJhbWUqIGZyYW1lLCB1bnNpZ25lZCBpbmRleCkKLSAgICA6
IEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlcihmcmFtZSkKLSAgICAsIG1fcGx1Z2luRGF0YShXVEZN
b3ZlKHBsdWdpbkRhdGEpKQorRE9NTWltZVR5cGU6OkRPTU1pbWVUeXBlKE5hdmlnYXRvciYgbmF2
aWdhdG9yLCBjb25zdCBNaW1lQ2xhc3NJbmZvJiBpbmZvLCBET01QbHVnaW4mIGVuYWJsZWRQbHVn
aW4pCisgICAgOiBtX25hdmlnYXRvcihtYWtlV2Vha1B0cihuYXZpZ2F0b3IpKQorICAgICwgbV9t
aW1lQ2xhc3NJbmZvKGluZm8pCisgICAgLCBtX2VuYWJsZWRQbHVnaW4obWFrZVdlYWtQdHIoZW5h
YmxlZFBsdWdpbikpCiB7Ci0gICAgVmVjdG9yPE1pbWVDbGFzc0luZm8+IG1pbWVzOwotICAgIFZl
Y3RvcjxzaXplX3Q+IG1pbWVQbHVnaW5JbmRpY2VzOwotICAgIG1fcGx1Z2luRGF0YS0+Z2V0V2Vi
VmlzaWJsZU1pbWVzQW5kUGx1Z2luSW5kaWNlcyhtaW1lcywgbWltZVBsdWdpbkluZGljZXMpOwot
ICAgIG1fbWltZUNsYXNzSW5mbyA9IG1pbWVzW2luZGV4XTsKLSAgICBtX3BsdWdpbkluZm8gPSBt
X3BsdWdpbkRhdGEtPndlYlZpc2libGVQbHVnaW5zKClbbWltZVBsdWdpbkluZGljZXNbaW5kZXhd
XTsKIH0KIAogRE9NTWltZVR5cGU6On5ET01NaW1lVHlwZSgpID0gZGVmYXVsdDsKQEAgLTQ4LDEz
ICs0MSwxMSBAQCBTdHJpbmcgRE9NTWltZVR5cGU6OnR5cGUoKSBjb25zdAogCiBTdHJpbmcgRE9N
TWltZVR5cGU6OnN1ZmZpeGVzKCkgY29uc3QKIHsKLSAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
ZXh0ZW5zaW9ucyA9IG1fbWltZUNsYXNzSW5mby5leHRlbnNpb25zOwotCiAgICAgU3RyaW5nQnVp
bGRlciBidWlsZGVyOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXpl
KCk7ICsraSkgeworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9taW1lQ2xhc3NJbmZvLmV4
dGVuc2lvbnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKGkpCiAgICAgICAgICAgICBidWls
ZGVyLmFwcGVuZCgnLCcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChleHRlbnNpb25zW2ldKTsK
KyAgICAgICAgYnVpbGRlci5hcHBlbmQobV9taW1lQ2xhc3NJbmZvLmV4dGVuc2lvbnNbaV0pOwog
ICAgIH0KICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogfQpAQCAtNjYsMTMgKzU3LDcg
QEAgU3RyaW5nIERPTU1pbWVUeXBlOjpkZXNjcmlwdGlvbigpIGNvbnN0CiAKIFJlZlB0cjxET01Q
bHVnaW4+IERPTU1pbWVUeXBlOjplbmFibGVkUGx1Z2luKCkgY29uc3QKIHsKLSAgICBpZiAoIW1f
ZnJhbWUgfHwgIW1fZnJhbWUtPnBhZ2UoKSB8fCAhbV9mcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUo
KS5sb2FkZXIoKS5hcmVQbHVnaW5zRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiBtaW1lczsKLSAgICBWZWN0b3I8c2l6ZV90PiBt
aW1lUGx1Z2luSW5kaWNlczsKLSAgICBtX3BsdWdpbkRhdGEtPmdldFdlYlZpc2libGVNaW1lc0Fu
ZFBsdWdpbkluZGljZXMobWltZXMsIG1pbWVQbHVnaW5JbmRpY2VzKTsKLSAgICByZXR1cm4gRE9N
UGx1Z2luOjpjcmVhdGUobV9wbHVnaW5EYXRhLmdldCgpLCBtX2ZyYW1lLCBtX3BsdWdpbkluZm8p
OworICAgIHJldHVybiBtX2VuYWJsZWRQbHVnaW4uZ2V0KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NTWltZVR5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTU1pbWVUeXBlLmgJKHJldmlzaW9u
IDI2MzAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NTWltZVR5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTksMTggKzE5LDE5IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAi
RnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyLmgiCiAjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgogI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRE9NUGx1
Z2luOworY2xhc3MgTmF2aWdhdG9yOwogCi1jbGFzcyBET01NaW1lVHlwZSA6IHB1YmxpYyBSZWZD
b3VudGVkPERPTU1pbWVUeXBlPiwgcHVibGljIEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlciB7Citj
bGFzcyBET01NaW1lVHlwZSA6IHB1YmxpYyBSZWZDb3VudGVkPERPTU1pbWVUeXBlPiB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxET01NaW1lVHlwZT4gY3JlYXRlKFJlZlB0cjxQbHVnaW5EYXRh
PiYmIHBsdWdpbkRhdGEsIEZyYW1lKiBmcmFtZSwgdW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRE9NTWltZVR5cGUoV1RGTW92ZShwbHVnaW5EYXRhKSwgZnJhbWUsIGluZGV4
KSk7IH0KKyAgICBzdGF0aWMgUmVmPERPTU1pbWVUeXBlPiBjcmVhdGUoTmF2aWdhdG9yJiBuYXZp
Z2F0b3IsIGNvbnN0IE1pbWVDbGFzc0luZm8mIGluZm8sIERPTVBsdWdpbiYgZW5hYmxlZFBsdWdp
bikgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBET01NaW1lVHlwZShuYXZpZ2F0b3IsIGluZm8sIGVu
YWJsZWRQbHVnaW4pKTsgfQogICAgIH5ET01NaW1lVHlwZSgpOwogCiAgICAgU3RyaW5nIHR5cGUo
KSBjb25zdDsKQEAgLTM4LDExICszOSwxNCBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGRlc2NyaXB0
aW9uKCkgY29uc3Q7CiAgICAgUmVmUHRyPERPTVBsdWdpbj4gZW5hYmxlZFBsdWdpbigpIGNvbnN0
OwogCisgICAgTmF2aWdhdG9yKiBuYXZpZ2F0b3IoKSB7IHJldHVybiBtX25hdmlnYXRvci5nZXQo
KTsgfQorCiBwcml2YXRlOgotICAgIERPTU1pbWVUeXBlKFJlZlB0cjxQbHVnaW5EYXRhPiYmLCBG
cmFtZSosIHVuc2lnbmVkIGluZGV4KTsKKyAgICBET01NaW1lVHlwZShOYXZpZ2F0b3ImLCBjb25z
dCBNaW1lQ2xhc3NJbmZvJiwgRE9NUGx1Z2luJik7CisKKyAgICBXZWFrUHRyPE5hdmlnYXRvcj4g
bV9uYXZpZ2F0b3I7CiAgICAgTWltZUNsYXNzSW5mbyBtX21pbWVDbGFzc0luZm87Ci0gICAgUmVm
UHRyPFBsdWdpbkRhdGE+IG1fcGx1Z2luRGF0YTsKLSAgICBQbHVnaW5JbmZvIG1fcGx1Z2luSW5m
bzsKKyAgICBXZWFrUHRyPERPTVBsdWdpbj4gbV9lbmFibGVkUGx1Z2luOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01NaW1lVHlw
ZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01NaW1lVHlwZS5p
ZGwJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NTWltZVR5
cGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xOSw3ICsxOSw5IEBACiAqLwogCiBbCi0gICAgSW50
ZXJmYWNlTmFtZT1NaW1lVHlwZQorICAgIEludGVyZmFjZU5hbWU9TWltZVR5cGUsCisgICAgR2Vu
ZXJhdGVJc1JlYWNoYWJsZT1SZWFjaGFibGVGcm9tTmF2aWdhdG9yLAorICAgIEltcGxlbWVudGF0
aW9uTGFja3NWVGFibGUKIF0gaW50ZXJmYWNlIERPTU1pbWVUeXBlIHsKICAgICByZWFkb25seSBh
dHRyaWJ1dGUgRE9NU3RyaW5nIHR5cGU7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmlu
ZyBzdWZmaXhlczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NTWltZVR5cGVBcnJh
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01NaW1lVHlwZUFy
cmF5LmNwcAkocmV2aXNpb24gMjYzMDA3KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01N
aW1lVHlwZUFycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsMTAgKzIwLDggQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJET01NaW1lVHlwZUFycmF5LmgiCiAKLSNpbmNsdWRl
ICJET01QbHVnaW4uaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNp
bmNsdWRlICJQbHVnaW5EYXRhLmgiCisjaW5jbHVkZSAiRE9NTWltZVR5cGUuaCIKKyNpbmNsdWRl
ICJOYXZpZ2F0b3IuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KIApAQCAtMzEsOCArMjksOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChET01NaW1lVHlwZUFycmF5
KTsKIAotRE9NTWltZVR5cGVBcnJheTo6RE9NTWltZVR5cGVBcnJheShOYXZpZ2F0b3ImIG5hdmln
YXRvcikKK0RPTU1pbWVUeXBlQXJyYXk6OkRPTU1pbWVUeXBlQXJyYXkoTmF2aWdhdG9yJiBuYXZp
Z2F0b3IsIFZlY3RvcjxSZWY8RE9NTWltZVR5cGU+PiYmIG1pbWVUeXBlcykKICAgICA6IG1fbmF2
aWdhdG9yKG1ha2VXZWFrUHRyKG5hdmlnYXRvcikpCisgICAgLCBtX21pbWVUeXBlcyhtaW1lVHlw
ZXMpCiB7CiB9CiAKQEAgLTQwLDc2ICszOSwzMiBAQCBET01NaW1lVHlwZUFycmF5Ojp+RE9NTWlt
ZVR5cGVBcnJheSgpID0gCiAKIHVuc2lnbmVkIERPTU1pbWVUeXBlQXJyYXk6Omxlbmd0aCgpIGNv
bnN0CiB7Ci0gICAgUGx1Z2luRGF0YSogZGF0YSA9IGdldFBsdWdpbkRhdGEoKTsKLSAgICBpZiAo
IWRhdGEpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgVmVjdG9yPE1pbWVDbGFzc0luZm8+IG1p
bWVzOwotICAgIFZlY3RvcjxzaXplX3Q+IG1pbWVQbHVnaW5JbmRpY2VzOwotICAgIGRhdGEtPmdl
dFdlYlZpc2libGVNaW1lc0FuZFBsdWdpbkluZGljZXMobWltZXMsIG1pbWVQbHVnaW5JbmRpY2Vz
KTsKLSAgICByZXR1cm4gbWltZXMuc2l6ZSgpOworICAgIHJldHVybiBtX21pbWVUeXBlcy5zaXpl
KCk7CiB9CiAKIFJlZlB0cjxET01NaW1lVHlwZT4gRE9NTWltZVR5cGVBcnJheTo6aXRlbSh1bnNp
Z25lZCBpbmRleCkKIHsKLSAgICBQbHVnaW5EYXRhKiBkYXRhID0gZ2V0UGx1Z2luRGF0YSgpOwot
ICAgIGlmICghZGF0YSkKKyAgICBpZiAoaW5kZXggPj0gbV9taW1lVHlwZXMuc2l6ZSgpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiBtaW1lczsK
LSAgICBWZWN0b3I8c2l6ZV90PiBtaW1lUGx1Z2luSW5kaWNlczsKLSAgICBkYXRhLT5nZXRXZWJW
aXNpYmxlTWltZXNBbmRQbHVnaW5JbmRpY2VzKG1pbWVzLCBtaW1lUGx1Z2luSW5kaWNlcyk7Ci0K
LSAgICBpZiAoaW5kZXggPj0gbWltZXMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICByZXR1cm4gRE9NTWltZVR5cGU6OmNyZWF0ZShkYXRhLCBmcmFtZSgpLCBpbmRleCk7Cisg
ICAgcmV0dXJuIG1fbWltZVR5cGVzW2luZGV4XS5wdHIoKTsKIH0KIAogUmVmUHRyPERPTU1pbWVU
eXBlPiBET01NaW1lVHlwZUFycmF5OjpuYW1lZEl0ZW0oY29uc3QgQXRvbVN0cmluZyYgcHJvcGVy
dHlOYW1lKQogewotICAgIFBsdWdpbkRhdGEqIGRhdGEgPSBnZXRQbHVnaW5EYXRhKCk7Ci0gICAg
aWYgKCFkYXRhKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFZlY3RvcjxNaW1lQ2xh
c3NJbmZvPiBtaW1lczsKLSAgICBWZWN0b3I8c2l6ZV90PiBtaW1lUGx1Z2luSW5kaWNlczsKLSAg
ICBkYXRhLT5nZXRXZWJWaXNpYmxlTWltZXNBbmRQbHVnaW5JbmRpY2VzKG1pbWVzLCBtaW1lUGx1
Z2luSW5kaWNlcyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1pbWVzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIGlmIChtaW1lc1tpXS50eXBlID09IHByb3BlcnR5TmFtZSkKLSAgICAg
ICAgICAgIHJldHVybiBET01NaW1lVHlwZTo6Y3JlYXRlKGRhdGEsIGZyYW1lKCksIGkpOworICAg
IGZvciAoYXV0byYgbWltZVR5cGUgOiBtX21pbWVUeXBlcykgeworICAgICAgICBpZiAobWltZVR5
cGUtPnR5cGUoKSA9PSBwcm9wZXJ0eU5hbWUpCisgICAgICAgICAgICByZXR1cm4gbWltZVR5cGUu
cHRyKCk7CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQogCiBWZWN0b3I8QXRvbVN0cmlu
Zz4gRE9NTWltZVR5cGVBcnJheTo6c3VwcG9ydGVkUHJvcGVydHlOYW1lcygpCiB7Ci0gICAgUGx1
Z2luRGF0YSogZGF0YSA9IGdldFBsdWdpbkRhdGEoKTsKLSAgICBpZiAoIWRhdGEpCi0gICAgICAg
IHJldHVybiB7IH07Ci0KLSAgICBWZWN0b3I8TWltZUNsYXNzSW5mbz4gbWltZXM7Ci0gICAgVmVj
dG9yPHNpemVfdD4gbWltZVBsdWdpbkluZGljZXM7Ci0gICAgZGF0YS0+Z2V0V2ViVmlzaWJsZU1p
bWVzQW5kUGx1Z2luSW5kaWNlcyhtaW1lcywgbWltZVBsdWdpbkluZGljZXMpOwotCiAgICAgVmVj
dG9yPEF0b21TdHJpbmc+IHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShtaW1lcy5zaXplKCkpOwotICAgIGZvciAoYXV0byYgaW5mbyA6IG1pbWVzKQotICAgICAgICBy
ZXN1bHQudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoaW5mby50eXBlKSk7Ci0KKyAgICByZXN1bHQu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX21pbWVUeXBlcy5zaXplKCkpOworICAgIGZvciAoYXV0
byYgbWltZVR5cGUgOiBtX21pbWVUeXBlcykKKyAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVu
ZChtaW1lVHlwZS0+dHlwZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1QbHVnaW5EYXRh
KiBET01NaW1lVHlwZUFycmF5OjpnZXRQbHVnaW5EYXRhKCkgY29uc3QKLXsKLSAgICBhdXRvKiBm
cmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBhdXRvKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2Up
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuICZwYWdlLT5wbHVnaW5EYXRh
KCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvRE9NTWltZVR5cGVBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvRE9NTWltZVR5cGVBcnJheS5oCShyZXZpc2lvbiAyNjMwMDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL0RPTU1pbWVUeXBlQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsMzQg
KzIwLDM1IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiRE9NTWltZVR5cGUuaCIKLSNp
bmNsdWRlICJOYXZpZ2F0b3IuaCIKICNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKKyNpbmNs
dWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBQbHVnaW5EYXRhOworY2xhc3MgRE9NTWltZVR5cGU7CitjbGFzcyBOYXZp
Z2F0b3I7CiAKIGNsYXNzIERPTU1pbWVUeXBlQXJyYXkgZmluYWwgOiBwdWJsaWMgU2NyaXB0V3Jh
cHBhYmxlLCBwdWJsaWMgUmVmQ291bnRlZDxET01NaW1lVHlwZUFycmF5PiB7CiAgICAgV1RGX01B
S0VfSVNPX0FMTE9DQVRFRChET01NaW1lVHlwZUFycmF5KTsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPERPTU1pbWVUeXBlQXJyYXk+IGNyZWF0ZShOYXZpZ2F0b3ImIG5hdmlnYXRvcikgeyByZXR1
cm4gYWRvcHRSZWYoKm5ldyBET01NaW1lVHlwZUFycmF5KG5hdmlnYXRvcikpOyB9CisgICAgc3Rh
dGljIFJlZjxET01NaW1lVHlwZUFycmF5PiBjcmVhdGUoTmF2aWdhdG9yJiBuYXZpZ2F0b3IsIFZl
Y3RvcjxSZWY8RE9NTWltZVR5cGU+PiYmIG1pbWVUeXBlcyA9IHsgfSkgeyByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBET01NaW1lVHlwZUFycmF5KG5hdmlnYXRvciwgV1RGTW92ZShtaW1lVHlwZXMpKSk7
IH0KICAgICB+RE9NTWltZVR5cGVBcnJheSgpOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29u
c3Q7CiAgICAgUmVmUHRyPERPTU1pbWVUeXBlPiBpdGVtKHVuc2lnbmVkIGluZGV4KTsKICAgICBS
ZWZQdHI8RE9NTWltZVR5cGU+IG5hbWVkSXRlbShjb25zdCBBdG9tU3RyaW5nJiBwcm9wZXJ0eU5h
bWUpOwogICAgIFZlY3RvcjxBdG9tU3RyaW5nPiBzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCk7Ci0g
ICAgCisKICAgICBOYXZpZ2F0b3IqIG5hdmlnYXRvcigpIHsgcmV0dXJuIG1fbmF2aWdhdG9yLmdl
dCgpOyB9CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgRE9NTWltZVR5cGVBcnJheShOYXZpZ2F0
b3ImKTsKLSAgICBQbHVnaW5EYXRhKiBnZXRQbHVnaW5EYXRhKCkgY29uc3Q7Ci0gICAgRnJhbWUq
IGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYXZpZ2F0b3IgPyBtX25hdmlnYXRvci0+ZnJhbWUo
KSA6IG51bGxwdHI7IH0KKyAgICBleHBsaWNpdCBET01NaW1lVHlwZUFycmF5KE5hdmlnYXRvciYs
IFZlY3RvcjxSZWY8RE9NTWltZVR5cGU+PiYmIG1pbWVUeXBlcyk7CiAgICAgCiAgICAgV2Vha1B0
cjxOYXZpZ2F0b3I+IG1fbmF2aWdhdG9yOworICAgIFZlY3RvcjxSZWY8RE9NTWltZVR5cGU+PiBt
X21pbWVUeXBlczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL0RPTVBsdWdpbi5jcHAJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsdWdpbnMvRE9NUGx1Z2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTksOCArMTksOCBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRPTVBsdWdpbi5oIgogCi0jaW5jbHVk
ZSAiUGx1Z2luRGF0YS5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRE9NTWltZVR5
cGUuaCIKKyNpbmNsdWRlICJOYXZpZ2F0b3IuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5s
aW5lcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KIApAQCAtMjgsMTEgKzI4
LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBM
KERPTVBsdWdpbik7CiAKLURPTVBsdWdpbjo6RE9NUGx1Z2luKFBsdWdpbkRhdGEqIHBsdWdpbkRh
dGEsIEZyYW1lKiBmcmFtZSwgUGx1Z2luSW5mbyBwbHVnaW5JbmZvKQotICAgIDogRnJhbWVEZXN0
cnVjdGlvbk9ic2VydmVyKGZyYW1lKQotICAgICwgbV9wbHVnaW5EYXRhKHBsdWdpbkRhdGEpCi0g
ICAgLCBtX3BsdWdpbkluZm8oV1RGTW92ZShwbHVnaW5JbmZvKSkKLXsKK0RPTVBsdWdpbjo6RE9N
UGx1Z2luKE5hdmlnYXRvciYgbmF2aWdhdG9yLCBjb25zdCBQbHVnaW5JbmZvJiBwbHVnaW5JbmZv
KQorICAgIDogbV9uYXZpZ2F0b3IobWFrZVdlYWtQdHIobmF2aWdhdG9yKSkKKyAgICAsIG1fcGx1
Z2luSW5mbyhwbHVnaW5JbmZvKQoreworICAgIG1fbWltZVR5cGVzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkobV9wbHVnaW5JbmZvLm1pbWVzLnNpemUoKSk7CisgICAgZm9yIChhdXRvJiBtaW1lVHlw
ZSA6IG1fcGx1Z2luSW5mby5taW1lcykKKyAgICAgICAgbV9taW1lVHlwZXMudW5jaGVja2VkQXBw
ZW5kKERPTU1pbWVUeXBlOjpjcmVhdGUobmF2aWdhdG9yLCBtaW1lVHlwZSwgKnRoaXMpKTsKKwor
ICAgIHN0ZDo6c29ydChtX21pbWVUeXBlcy5iZWdpbigpLCBtX21pbWVUeXBlcy5lbmQoKSwgW10o
Y29uc3QgUmVmPERPTU1pbWVUeXBlPiYgYSwgY29uc3QgUmVmPERPTU1pbWVUeXBlPiYgYikgewor
ICAgICAgICByZXR1cm4gY29kZVBvaW50Q29tcGFyZUxlc3NUaGFuKGEtPnR5cGUoKSwgYi0+dHlw
ZSgpKTsKKyAgICB9KTsKIH0KIAogRE9NUGx1Z2luOjp+RE9NUGx1Z2luKCkgPSBkZWZhdWx0OwpA
QCAtNTksNDAgKzY1LDI3IEBAIHVuc2lnbmVkIERPTVBsdWdpbjo6bGVuZ3RoKCkgY29uc3QKIAog
UmVmUHRyPERPTU1pbWVUeXBlPiBET01QbHVnaW46Oml0ZW0odW5zaWduZWQgaW5kZXgpCiB7Ci0g
ICAgaWYgKGluZGV4ID49IG1fcGx1Z2luSW5mby5taW1lcy5zaXplKCkgfHwgIW1fZnJhbWUgfHwg
IW1fZnJhbWUtPnBhZ2UoKSkKKyAgICBpZiAoaW5kZXggPj0gbV9taW1lVHlwZXMuc2l6ZSgpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIE1pbWVDbGFzc0luZm8gbWltZSA9IG1fcGx1
Z2luSW5mby5taW1lc1tpbmRleF07Ci0KLSAgICBWZWN0b3I8TWltZUNsYXNzSW5mbz4gbWltZXM7
Ci0gICAgVmVjdG9yPHNpemVfdD4gbWltZVBsdWdpbkluZGljZXM7Ci0gICAgVmVjdG9yPFBsdWdp
bkluZm8+IHBsdWdpbnMgPSBtX3BsdWdpbkRhdGEtPndlYlZpc2libGVQbHVnaW5zKCk7Ci0gICAg
bV9wbHVnaW5EYXRhLT5nZXRXZWJWaXNpYmxlTWltZXNBbmRQbHVnaW5JbmRpY2VzKG1pbWVzLCBt
aW1lUGx1Z2luSW5kaWNlcyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1pbWVzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtaW1lc1tpXSA9PSBtaW1lICYmIHBsdWdpbnNbbWlt
ZVBsdWdpbkluZGljZXNbaV1dID09IG1fcGx1Z2luSW5mbykKLSAgICAgICAgICAgIHJldHVybiBE
T01NaW1lVHlwZTo6Y3JlYXRlKG1fcGx1Z2luRGF0YS5nZXQoKSwgbV9mcmFtZSwgaSk7Ci0gICAg
fQotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBtX21pbWVUeXBlc1tpbmRleF0ucHRy
KCk7CiB9CiAKIFJlZlB0cjxET01NaW1lVHlwZT4gRE9NUGx1Z2luOjpuYW1lZEl0ZW0oY29uc3Qg
QXRvbVN0cmluZyYgcHJvcGVydHlOYW1lKQogewotICAgIGlmICghbV9mcmFtZSB8fCAhbV9mcmFt
ZS0+cGFnZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFZlY3RvcjxNaW1lQ2xh
c3NJbmZvPiBtaW1lczsKLSAgICBWZWN0b3I8c2l6ZV90PiBtaW1lUGx1Z2luSW5kaWNlczsKLSAg
ICBtX3BsdWdpbkRhdGEtPmdldFdlYlZpc2libGVNaW1lc0FuZFBsdWdpbkluZGljZXMobWltZXMs
IG1pbWVQbHVnaW5JbmRpY2VzKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWltZXMu
c2l6ZSgpOyArK2kpCi0gICAgICAgIGlmIChtaW1lc1tpXS50eXBlID09IHByb3BlcnR5TmFtZSkK
LSAgICAgICAgICAgIHJldHVybiBET01NaW1lVHlwZTo6Y3JlYXRlKG1fcGx1Z2luRGF0YS5nZXQo
KSwgbV9mcmFtZSwgaSk7CisgICAgZm9yIChhdXRvJiBtaW1lVHlwZSA6IG1fbWltZVR5cGVzKSB7
CisgICAgICAgIGlmIChtaW1lVHlwZS0+dHlwZSgpID09IHByb3BlcnR5TmFtZSkKKyAgICAgICAg
ICAgIHJldHVybiBtaW1lVHlwZS5wdHIoKTsKKyAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9
CiAKIFZlY3RvcjxBdG9tU3RyaW5nPiBET01QbHVnaW46OnN1cHBvcnRlZFByb3BlcnR5TmFtZXMo
KQogewotICAgIC8vIEZJWE1FOiBTaG91bGQgYmUgaW1wbGVtZW50ZWQuCi0gICAgcmV0dXJuIFZl
Y3RvcjxBdG9tU3RyaW5nPigpOworICAgIFZlY3RvcjxBdG9tU3RyaW5nPiByZXN1bHQ7CisgICAg
cmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9taW1lVHlwZXMuc2l6ZSgpKTsKKyAgICBm
b3IgKGF1dG8mIG1pbWVUeXBlIDogbV9taW1lVHlwZXMpCisgICAgICAgIHJlc3VsdC51bmNoZWNr
ZWRBcHBlbmQobWltZVR5cGUtPnR5cGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01QbHVn
aW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTVBsdWdpbi5oCShy
ZXZpc2lvbiAyNjMwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTVBsdWdpbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xOSwyMSArMTksMjEgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNs
dWRlICJGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIuaCIKLSNpbmNsdWRlICJET01NaW1lVHlwZS5o
IgorI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKICNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIK
ICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFBs
dWdpbjsKLWNsYXNzIFBsdWdpbkRhdGE7CitjbGFzcyBET01NaW1lVHlwZTsKK2NsYXNzIE5hdmln
YXRvcjsKIAotY2xhc3MgRE9NUGx1Z2luIGZpbmFsIDogcHVibGljIFNjcmlwdFdyYXBwYWJsZSwg
cHVibGljIFJlZkNvdW50ZWQ8RE9NUGx1Z2luPiwgcHVibGljIEZyYW1lRGVzdHJ1Y3Rpb25PYnNl
cnZlciB7CitjbGFzcyBET01QbHVnaW4gZmluYWwgOiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBw
dWJsaWMgUmVmQ291bnRlZDxET01QbHVnaW4+LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8RE9NUGx1
Z2luPiB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChET01QbHVnaW4pOwogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8RE9NUGx1Z2luPiBjcmVhdGUoUGx1Z2luRGF0YSogcGx1Z2luRGF0YSwg
RnJhbWUqIGZyYW1lLCBQbHVnaW5JbmZvIHBsdWdpbkluZm8pIHsgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRE9NUGx1Z2luKHBsdWdpbkRhdGEsIGZyYW1lLCBXVEZNb3ZlKHBsdWdpbkluZm8pKSk7IH0K
KyAgICBzdGF0aWMgUmVmPERPTVBsdWdpbj4gY3JlYXRlKE5hdmlnYXRvciYgbmF2aWdhdG9yLCBj
b25zdCBQbHVnaW5JbmZvJiBwbHVnaW5JbmZvKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IERPTVBs
dWdpbihuYXZpZ2F0b3IsIHBsdWdpbkluZm8pKTsgfQogICAgIH5ET01QbHVnaW4oKTsKIAogICAg
IFN0cmluZyBuYW1lKCkgY29uc3Q7CkBAIC00NiwxMCArNDYsMTYgQEAgcHVibGljOgogICAgIFJl
ZlB0cjxET01NaW1lVHlwZT4gbmFtZWRJdGVtKGNvbnN0IEF0b21TdHJpbmcmIHByb3BlcnR5TmFt
ZSk7CiAgICAgVmVjdG9yPEF0b21TdHJpbmc+IHN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKTsKIAor
ICAgIGNvbnN0IFZlY3RvcjxSZWY8RE9NTWltZVR5cGU+PiYgbWltZVR5cGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9taW1lVHlwZXM7IH0KKworICAgIE5hdmlnYXRvciogbmF2aWdhdG9yKCkgeyByZXR1
cm4gbV9uYXZpZ2F0b3IuZ2V0KCk7IH0KKwogcHJpdmF0ZToKLSAgICBET01QbHVnaW4oUGx1Z2lu
RGF0YSosIEZyYW1lKiwgUGx1Z2luSW5mbyk7Ci0gICAgUmVmUHRyPFBsdWdpbkRhdGE+IG1fcGx1
Z2luRGF0YTsKKyAgICBET01QbHVnaW4oTmF2aWdhdG9yJiwgY29uc3QgUGx1Z2luSW5mbyYpOwor
CisgICAgV2Vha1B0cjxOYXZpZ2F0b3I+IG1fbmF2aWdhdG9yOwogICAgIFBsdWdpbkluZm8gbV9w
bHVnaW5JbmZvOworICAgIFZlY3RvcjxSZWY8RE9NTWltZVR5cGU+PiBtX21pbWVUeXBlczsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
RE9NUGx1Z2luLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTVBs
dWdpbi5pZGwJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9N
UGx1Z2luLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjAsNiArMjAsOCBAQAogCiBbCiAgICAgSW50
ZXJmYWNlTmFtZT1QbHVnaW4sCisgICAgR2VuZXJhdGVJc1JlYWNoYWJsZT1SZWFjaGFibGVGcm9t
TmF2aWdhdG9yLAorICAgIEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUsCiAgICAgTGVnYWN5VW5l
bnVtZXJhYmxlTmFtZWRQcm9wZXJ0aWVzCiBdIGludGVyZmFjZSBET01QbHVnaW4gewogICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvRE9NUGx1Z2luQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvRE9NUGx1Z2luQXJyYXkuY3BwCShyZXZpc2lvbiAyNjMwMDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL0RPTVBsdWdpbkFycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCAr
MjIsOCBAQAogCiAjaW5jbHVkZSAiRE9NUGx1Z2luLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNp
bmNsdWRlICJOYXZpZ2F0b3IuaCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGx1Z2lu
RGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvQXRvbVN0cmluZy5oPgogCkBAIC0zMSw4ICszMSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChET01QbHVnaW5BcnJheSk7CiAKLURP
TVBsdWdpbkFycmF5OjpET01QbHVnaW5BcnJheShOYXZpZ2F0b3ImIG5hdmlnYXRvcikKK0RPTVBs
dWdpbkFycmF5OjpET01QbHVnaW5BcnJheShOYXZpZ2F0b3ImIG5hdmlnYXRvciwgVmVjdG9yPFJl
ZjxET01QbHVnaW4+PiYmIHB1YmxpY2x5VmlzaWJsZVBsdWdpbnMsIFZlY3RvcjxSZWY8RE9NUGx1
Z2luPj4mJiBhZGRpdGlvbmFsV2ViVmlzaWJpbGVQbHVnaW5zKQogICAgIDogbV9uYXZpZ2F0b3Io
bWFrZVdlYWtQdHIobmF2aWdhdG9yKSkKKyAgICAsIG1fcHVibGljbHlWaXNpYmxlUGx1Z2lucyhw
dWJsaWNseVZpc2libGVQbHVnaW5zKQorICAgICwgbV9hZGRpdGlvbmFsV2ViVmlzaWJpbGVQbHVn
aW5zKGFkZGl0aW9uYWxXZWJWaXNpYmlsZVBsdWdpbnMpCiB7CiB9CiAKQEAgLTQwLDUxICs0Miwz
NyBAQCBET01QbHVnaW5BcnJheTo6fkRPTVBsdWdpbkFycmF5KCkgPSBkZWZhCiAKIHVuc2lnbmVk
IERPTVBsdWdpbkFycmF5OjpsZW5ndGgoKSBjb25zdAogewotICAgIFBsdWdpbkRhdGEqIGRhdGEg
PSBwbHVnaW5EYXRhKCk7Ci0gICAgaWYgKCFkYXRhKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IHJldHVybiBkYXRhLT5wdWJsaWNseVZpc2libGVQbHVnaW5zKCkuc2l6ZSgpOworICAgIHJldHVy
biBtX3B1YmxpY2x5VmlzaWJsZVBsdWdpbnMuc2l6ZSgpOwogfQogCiBSZWZQdHI8RE9NUGx1Z2lu
PiBET01QbHVnaW5BcnJheTo6aXRlbSh1bnNpZ25lZCBpbmRleCkKIHsKLSAgICBQbHVnaW5EYXRh
KiBkYXRhID0gcGx1Z2luRGF0YSgpOwotICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBjb25zdCBWZWN0b3I8UGx1Z2luSW5mbz4mIHBsdWdpbnMgPSBkYXRhLT5w
dWJsaWNseVZpc2libGVQbHVnaW5zKCk7Ci0gICAgaWYgKGluZGV4ID49IHBsdWdpbnMuc2l6ZSgp
KQorICAgIGlmIChpbmRleCA+PSBtX3B1YmxpY2x5VmlzaWJsZVBsdWdpbnMuc2l6ZSgpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gRE9NUGx1Z2luOjpjcmVhdGUoZGF0YSwg
ZnJhbWUoKSwgcGx1Z2luc1tpbmRleF0pOworICAgIHJldHVybiBtX3B1YmxpY2x5VmlzaWJsZVBs
dWdpbnNbaW5kZXhdLnB0cigpOwogfQogCiBSZWZQdHI8RE9NUGx1Z2luPiBET01QbHVnaW5BcnJh
eTo6bmFtZWRJdGVtKGNvbnN0IEF0b21TdHJpbmcmIHByb3BlcnR5TmFtZSkKIHsKLSAgICBQbHVn
aW5EYXRhKiBkYXRhID0gcGx1Z2luRGF0YSgpOwotICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgZm9yIChhdXRvJiBwbHVnaW4gOiBtX3B1YmxpY2x5VmlzaWJsZVBs
dWdpbnMpIHsKKyAgICAgICAgaWYgKHBsdWdpbi0+bmFtZSgpID09IHByb3BlcnR5TmFtZSkKKyAg
ICAgICAgICAgIHJldHVybiBwbHVnaW4ucHRyKCk7CisgICAgfQogCi0gICAgZm9yIChhdXRvJiBw
bHVnaW4gOiBkYXRhLT53ZWJWaXNpYmxlUGx1Z2lucygpKSB7Ci0gICAgICAgIGlmIChwbHVnaW4u
bmFtZSA9PSBwcm9wZXJ0eU5hbWUpCi0gICAgICAgICAgICByZXR1cm4gRE9NUGx1Z2luOjpjcmVh
dGUoZGF0YSwgZnJhbWUoKSwgcGx1Z2luKTsKKyAgICBmb3IgKGF1dG8mIHBsdWdpbiA6IG1fYWRk
aXRpb25hbFdlYlZpc2liaWxlUGx1Z2lucykgeworICAgICAgICBpZiAocGx1Z2luLT5uYW1lKCkg
PT0gcHJvcGVydHlOYW1lKQorICAgICAgICAgICAgcmV0dXJuIHBsdWdpbi5wdHIoKTsKICAgICB9
CisKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogVmVjdG9yPEF0b21TdHJpbmc+IERPTVBsdWdp
bkFycmF5OjpzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkKIHsKLSAgICBQbHVnaW5EYXRhKiBkYXRh
ID0gcGx1Z2luRGF0YSgpOwotICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQot
ICAgIGNvbnN0IGF1dG8mIHBsdWdpbnMgPSBkYXRhLT5wdWJsaWNseVZpc2libGVQbHVnaW5zKCk7
Ci0KICAgICBWZWN0b3I8QXRvbVN0cmluZz4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KHBsdWdpbnMuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIHBsdWdpbiA6IHBs
dWdpbnMpCi0gICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQocGx1Z2luLm5hbWUpOwotCisg
ICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9wdWJsaWNseVZpc2libGVQbHVnaW5z
LnNpemUoKSk7CisgICAgZm9yIChhdXRvJiBwbHVnaW4gOiBtX3B1YmxpY2x5VmlzaWJsZVBsdWdp
bnMpCisgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQocGx1Z2luLT5uYW1lKCkpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTEwMCwxNyArODgsNCBAQCB2b2lkIERPTVBsdWdpbkFy
cmF5OjpyZWZyZXNoKGJvb2wgcmVsb2FkCiAgICAgUGFnZTo6cmVmcmVzaFBsdWdpbnMocmVsb2Fk
UGFnZXMpOwogfQogCi1QbHVnaW5EYXRhKiBET01QbHVnaW5BcnJheTo6cGx1Z2luRGF0YSgpIGNv
bnN0Ci17Ci0gICAgYXV0byogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdl
KCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVy
biAmcGFnZS0+cGx1Z2luRGF0YSgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTVBsdWdpbkFycmF5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01QbHVnaW5BcnJheS5oCShyZXZpc2lvbiAyNjMwMDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTVBsdWdpbkFycmF5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIwLDIwICsyMCwyMSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkRPTVBs
dWdpbi5oIgotI2luY2x1ZGUgIkRPTVdpbmRvd1Byb3BlcnR5LmgiCi0jaW5jbHVkZSAiTmF2aWdh
dG9yLmgiCiAjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlLmgiCisjaW5jbHVkZSA8d3RmL1JlZi5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
I2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3Mg
UGx1Z2luRGF0YTsKK2NsYXNzIERPTVBsdWdpbjsKK2NsYXNzIE5hdmlnYXRvcjsKIAogY2xhc3Mg
RE9NUGx1Z2luQXJyYXkgZmluYWwgOiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgUmVm
Q291bnRlZDxET01QbHVnaW5BcnJheT4gewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoRE9N
UGx1Z2luQXJyYXkpOwogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RE9NUGx1Z2luQXJyYXk+IGNy
ZWF0ZShOYXZpZ2F0b3ImIG5hdmlnYXRvcikgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBET01QbHVn
aW5BcnJheShuYXZpZ2F0b3IpKTsgfQorICAgIHN0YXRpYyBSZWY8RE9NUGx1Z2luQXJyYXk+IGNy
ZWF0ZShOYXZpZ2F0b3ImIG5hdmlnYXRvciwgVmVjdG9yPFJlZjxET01QbHVnaW4+PiYmIHB1Ymxp
Y2x5VmlzaWJsZVBsdWdpbnMgPSB7IH0sIFZlY3RvcjxSZWY8RE9NUGx1Z2luPj4mJiBhZGRpdGlv
bmFsV2ViVmlzaWJpbGVQbHVnaW5zID0geyB9KSB7IHJldHVybiBhZG9wdFJlZigqbmV3IERPTVBs
dWdpbkFycmF5KG5hdmlnYXRvciwgV1RGTW92ZShwdWJsaWNseVZpc2libGVQbHVnaW5zKSwgV1RG
TW92ZShhZGRpdGlvbmFsV2ViVmlzaWJpbGVQbHVnaW5zKSkpOyB9CiAgICAgfkRPTVBsdWdpbkFy
cmF5KCk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKQEAgLTQyLDE2ICs0MywxNyBA
QCBwdWJsaWM6CiAgICAgVmVjdG9yPEF0b21TdHJpbmc+IHN1cHBvcnRlZFByb3BlcnR5TmFtZXMo
KTsKIAogICAgIHZvaWQgcmVmcmVzaChib29sIHJlbG9hZFBhZ2VzKTsKLSAgICAKLSAgICBOYXZp
Z2F0b3IqIG5hdmlnYXRvcigpIHsgcmV0dXJuIG1fbmF2aWdhdG9yLmdldCgpOyB9CiAKKyAgICBO
YXZpZ2F0b3IqIG5hdmlnYXRvcigpIHsgcmV0dXJuIG1fbmF2aWdhdG9yLmdldCgpOyB9CisgICAg
CiBwcml2YXRlOgotICAgIGV4cGxpY2l0IERPTVBsdWdpbkFycmF5KE5hdmlnYXRvciYpOworICAg
IGV4cGxpY2l0IERPTVBsdWdpbkFycmF5KE5hdmlnYXRvciYsIFZlY3RvcjxSZWY8RE9NUGx1Z2lu
Pj4mJiwgVmVjdG9yPFJlZjxET01QbHVnaW4+PiYmKTsKIAotICAgIFBsdWdpbkRhdGEqIHBsdWdp
bkRhdGEoKSBjb25zdDsKICAgICBGcmFtZSogZnJhbWUoKSBjb25zdCB7IHJldHVybiBtX25hdmln
YXRvciA/IG1fbmF2aWdhdG9yLT5mcmFtZSgpIDogbnVsbHB0cjsgfQotICAgIAorCiAgICAgV2Vh
a1B0cjxOYXZpZ2F0b3I+IG1fbmF2aWdhdG9yOworICAgIFZlY3RvcjxSZWY8RE9NUGx1Z2luPj4g
bV9wdWJsaWNseVZpc2libGVQbHVnaW5zOworICAgIFZlY3RvcjxSZWY8RE9NUGx1Z2luPj4gbV9h
ZGRpdGlvbmFsV2ViVmlzaWJpbGVQbHVnaW5zOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGEuY3BwCShyZXZpc2lvbiAyNjMw
MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2lu
Y2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbHVnaW5JbmZvUHJvdmlkZXIuaCIKKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOCw2ICszOSwx
MiBAQCBQbHVnaW5EYXRhOjpQbHVnaW5EYXRhKFBhZ2UmIHBhZ2UpCiAgICAgaW5pdFBsdWdpbnMo
KTsKIH0KIAordm9pZCBQbHVnaW5EYXRhOjppbml0UGx1Z2lucygpCit7CisgICAgQVNTRVJUKG1f
cGx1Z2lucy5pc0VtcHR5KCkpOworICAgIG1fcGx1Z2lucyA9IG1fcGFnZS5wbHVnaW5JbmZvUHJv
dmlkZXIoKS5wbHVnaW5JbmZvKG1fcGFnZSwgbV9zdXBwb3J0ZWRQbHVnaW5JZGVudGlmaWVycyk7
Cit9CisKIGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZvPiYgUGx1Z2luRGF0YTo6d2ViVmlzaWJsZVBs
dWdpbnMoKSBjb25zdAogewogICAgIGF1dG8gZG9jdW1lbnRVUkwgPSBtX3BhZ2UubWFpbkZyYW1l
KCkuZG9jdW1lbnQoKSA/IG1fcGFnZS5tYWluRnJhbWUoKS5kb2N1bWVudCgpLT51cmwoKSA6IFVS
TCB7IH07CkBAIC04MCwxMjAgKzg3LDc3IEBAIHN0YXRpYyBib29sIHNob3VsZEJlUHVibGljbHlW
aXNpYmxlKGNvbnMKICAgICAgICAgfHwgaXNCdWlsdEluUERGUGx1Z0luKHBsdWdpbik7CiB9CiAK
LVZlY3RvcjxQbHVnaW5JbmZvPiBQbHVnaW5EYXRhOjpwdWJsaWNseVZpc2libGVQbHVnaW5zKCkg
Y29uc3QKK3N0ZDo6cGFpcjxWZWN0b3I8UGx1Z2luSW5mbz4sIFZlY3RvcjxQbHVnaW5JbmZvPj4g
UGx1Z2luRGF0YTo6cHVibGljbHlWaXNpYmxlUGx1Z2luc0FuZEFkZGl0aW9uYWxXZWJWaXNpYmxl
UGx1Z2lucygpIGNvbnN0CiB7CiAgICAgYXV0byBwbHVnaW5zID0gd2ViVmlzaWJsZVBsdWdpbnMo
KTsKIAogICAgIGlmIChtX3BhZ2Uuc2hvd0FsbFBsdWdpbnMoKSkKLSAgICAgICAgcmV0dXJuIHBs
dWdpbnM7Ci0gICAgCi0gICAgcGx1Z2lucy5yZW1vdmVBbGxNYXRjaGluZyhbXShhdXRvJiBwbHVn
aW4pIHsKLSAgICAgICAgcmV0dXJuICFzaG91bGRCZVB1YmxpY2x5VmlzaWJsZShwbHVnaW4pOwor
ICAgICAgICByZXR1cm4geyBwbHVnaW5zLCB7IH0gfTsKKworICAgIFZlY3RvcjxQbHVnaW5JbmZv
PiBhZGRpdGlvbmFsV2ViVmlzaWJsZVBsdWdpbnM7CisgICAgcGx1Z2lucy5yZW1vdmVBbGxNYXRj
aGluZyhbJl0oYXV0byYgcGx1Z2luKSB7CisgICAgICAgIGlmICghc2hvdWxkQmVQdWJsaWNseVZp
c2libGUocGx1Z2luKSkgeworICAgICAgICAgICAgYWRkaXRpb25hbFdlYlZpc2libGVQbHVnaW5z
LmFwcGVuZChwbHVnaW4pOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0pOwogCiAgICAgc3RkOjpzb3J0KHBsdWdpbnMuYmVn
aW4oKSwgcGx1Z2lucy5lbmQoKSwgW10oY29uc3QgUGx1Z2luSW5mbyYgYSwgY29uc3QgUGx1Z2lu
SW5mbyYgYikgewogICAgICAgICByZXR1cm4gY29kZVBvaW50Q29tcGFyZUxlc3NUaGFuKGEubmFt
ZSwgYi5uYW1lKTsKICAgICB9KTsKLSAgICByZXR1cm4gcGx1Z2luczsKKyAgICByZXR1cm4geyBw
bHVnaW5zLCBhZGRpdGlvbmFsV2ViVmlzaWJsZVBsdWdpbnMgfTsKIH0KIAotdm9pZCBQbHVnaW5E
YXRhOjpnZXRXZWJWaXNpYmxlTWltZXNBbmRQbHVnaW5JbmRpY2VzKFZlY3RvcjxNaW1lQ2xhc3NJ
bmZvPiYgbWltZXMsIFZlY3RvcjxzaXplX3Q+JiBtaW1lUGx1Z2luSW5kaWNlcykgY29uc3QKK1Zl
Y3RvcjxNaW1lQ2xhc3NJbmZvPiBQbHVnaW5EYXRhOjp3ZWJWaXNpYmxlTWltZVR5cGVzKCkgY29u
c3QKIHsKLSAgICBnZXRNaW1lc0FuZFBsdWdpbkluZGljaWVzRm9yUGx1Z2lucyh3ZWJWaXNpYmxl
UGx1Z2lucygpLCBtaW1lcywgbWltZVBsdWdpbkluZGljZXMpOwotfQotCi12b2lkIFBsdWdpbkRh
dGE6OmdldE1pbWVzQW5kUGx1Z2luSW5kaWNlcyhWZWN0b3I8TWltZUNsYXNzSW5mbz4mIG1pbWVz
LCBWZWN0b3I8c2l6ZV90PiYgbWltZVBsdWdpbkluZGljZXMpIGNvbnN0Ci17Ci0gICAgZ2V0TWlt
ZXNBbmRQbHVnaW5JbmRpY2llc0ZvclBsdWdpbnMocGx1Z2lucygpLCBtaW1lcywgbWltZVBsdWdp
bkluZGljZXMpOworICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiByZXN1bHQ7CisgICAgZm9yIChh
dXRvJiBwbHVnaW4gOiB3ZWJWaXNpYmxlUGx1Z2lucygpKSB7CisgICAgICAgIGZvciAoYXV0byYg
bWltZSA6IHBsdWdpbi5taW1lcykKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobWltZSk7Cisg
ICAgfQorICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUGx1Z2luRGF0YTo6Z2V0TWltZXNB
bmRQbHVnaW5JbmRpY2llc0ZvclBsdWdpbnMoY29uc3QgVmVjdG9yPFBsdWdpbkluZm8+JiBwbHVn
aW5zLCBWZWN0b3I8TWltZUNsYXNzSW5mbz4mIG1pbWVzLCBWZWN0b3I8c2l6ZV90PiYgbWltZVBs
dWdpbkluZGljZXMpIGNvbnN0CitzdGF0aWMgYm9vbCBzdXBwb3J0c01pbWVUeXBlRm9yUGx1Z2lu
cyhjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBQbHVnaW5EYXRhOjpBbGxvd2VkUGx1Z2lu
VHlwZXMgYWxsb3dlZFBsdWdpblR5cGVzLCBjb25zdCBWZWN0b3I8UGx1Z2luSW5mbz4mIHBsdWdp
bnMpCiB7Ci0gICAgQVNTRVJUX0FSRyhtaW1lcywgbWltZXMuaXNFbXB0eSgpKTsKLSAgICBBU1NF
UlRfQVJHKG1pbWVQbHVnaW5JbmRpY2VzLCBtaW1lUGx1Z2luSW5kaWNlcy5pc0VtcHR5KCkpOwot
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBsdWdpbnMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgY29uc3QgUGx1Z2luSW5mbyYgcGx1Z2luID0gcGx1Z2luc1tpXTsKKyAgICBmb3IgKGF1
dG8gcGx1Z2luIDogcGx1Z2lucykgewogICAgICAgICBmb3IgKGF1dG8mIG1pbWUgOiBwbHVnaW4u
bWltZXMpIHsKLSAgICAgICAgICAgIG1pbWVzLmFwcGVuZChtaW1lKTsKLSAgICAgICAgICAgIG1p
bWVQbHVnaW5JbmRpY2VzLmFwcGVuZChpKTsKKyAgICAgICAgICAgIGlmIChtaW1lLnR5cGUgPT0g
bWltZVR5cGUgJiYgKGFsbG93ZWRQbHVnaW5UeXBlcyA9PSBQbHVnaW5EYXRhOjpBbGxQbHVnaW5z
IHx8IHBsdWdpbi5pc0FwcGxpY2F0aW9uUGx1Z2luKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUGx1
Z2luRGF0YTo6c3VwcG9ydHNXZWJWaXNpYmxlTWltZVR5cGVGb3JVUkwoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgY29uc3QgQWxsb3dlZFBsdWdpblR5cGVzIGFsbG93ZWRQbHVnaW5UeXBlcywgY29u
c3QgVVJMJiB1cmwpIGNvbnN0Citib29sIFBsdWdpbkRhdGE6OnN1cHBvcnRzTWltZVR5cGUoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgQWxsb3dlZFBsdWdpblR5cGVzIGFsbG93ZWRQbHVn
aW5UeXBlcykgY29uc3QKIHsKLSAgICBpZiAoIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbCht
X2NhY2hlZFZpc2libGVQbHVnaW5zLnBhZ2VVUkwsIHVybCkpCi0gICAgICAgIG1fY2FjaGVkVmlz
aWJsZVBsdWdpbnMgPSB7IHVybCwgbV9wYWdlLnBsdWdpbkluZm9Qcm92aWRlcigpLndlYlZpc2li
bGVQbHVnaW5JbmZvKG1fcGFnZSwgdXJsKSB9OwotICAgIGlmICghbV9jYWNoZWRWaXNpYmxlUGx1
Z2lucy5wbHVnaW5MaXN0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHN1cHBv
cnRzV2ViVmlzaWJsZU1pbWVUeXBlKG1pbWVUeXBlLCBhbGxvd2VkUGx1Z2luVHlwZXMsICptX2Nh
Y2hlZFZpc2libGVQbHVnaW5zLnBsdWdpbkxpc3QpOworICAgIHJldHVybiBzdXBwb3J0c01pbWVU
eXBlRm9yUGx1Z2lucyhtaW1lVHlwZSwgYWxsb3dlZFBsdWdpblR5cGVzLCBwbHVnaW5zKCkpOwog
fQogCiBib29sIFBsdWdpbkRhdGE6OnN1cHBvcnRzV2ViVmlzaWJsZU1pbWVUeXBlKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIGNvbnN0IEFsbG93ZWRQbHVnaW5UeXBlcyBhbGxvd2VkUGx1Z2luVHlw
ZXMpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN1cHBvcnRzV2ViVmlzaWJsZU1pbWVUeXBlKG1pbWVU
eXBlLCBhbGxvd2VkUGx1Z2luVHlwZXMsIHdlYlZpc2libGVQbHVnaW5zKCkpOwotfQotCi1ib29s
IFBsdWdpbkRhdGE6OnN1cHBvcnRzV2ViVmlzaWJsZU1pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIGNvbnN0IEFsbG93ZWRQbHVnaW5UeXBlcyBhbGxvd2VkUGx1Z2luVHlwZXMsIGNvbnN0
IFZlY3RvcjxQbHVnaW5JbmZvPiYgcGx1Z2lucykgY29uc3QKLXsKLSAgICBWZWN0b3I8TWltZUNs
YXNzSW5mbz4gbWltZXM7Ci0gICAgVmVjdG9yPHNpemVfdD4gbWltZVBsdWdpbkluZGljZXM7Ci0g
ICAgZ2V0TWltZXNBbmRQbHVnaW5JbmRpY2llc0ZvclBsdWdpbnMocGx1Z2lucywgbWltZXMsIG1p
bWVQbHVnaW5JbmRpY2VzKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtaW1lcy5z
aXplKCk7ICsraSkgewotICAgICAgICBpZiAobWltZXNbaV0udHlwZSA9PSBtaW1lVHlwZSAmJiAo
YWxsb3dlZFBsdWdpblR5cGVzID09IEFsbFBsdWdpbnMgfHwgcGx1Z2luc1ttaW1lUGx1Z2luSW5k
aWNlc1tpXV0uaXNBcHBsaWNhdGlvblBsdWdpbikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBzdXBwb3J0c01pbWVUeXBlRm9y
UGx1Z2lucyhtaW1lVHlwZSwgYWxsb3dlZFBsdWdpblR5cGVzLCB3ZWJWaXNpYmxlUGx1Z2lucygp
KTsKIH0KIAotYm9vbCBQbHVnaW5EYXRhOjpnZXRQbHVnaW5JbmZvRm9yV2ViVmlzaWJsZU1pbWVU
eXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFBsdWdpbkluZm8mIHBsdWdpbkluZm9SZWYpIGNv
bnN0Citib29sIFBsdWdpbkRhdGE6OnN1cHBvcnRzV2ViVmlzaWJsZU1pbWVUeXBlRm9yVVJMKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IEFsbG93ZWRQbHVnaW5UeXBlcyBhbGxvd2VkUGx1
Z2luVHlwZXMsIGNvbnN0IFVSTCYgdXJsKSBjb25zdAogewotICAgIFZlY3RvcjxNaW1lQ2xhc3NJ
bmZvPiBtaW1lczsKLSAgICBWZWN0b3I8c2l6ZV90PiBtaW1lUGx1Z2luSW5kaWNlczsKLSAgICBj
b25zdCBWZWN0b3I8UGx1Z2luSW5mbz4mIHBsdWdpbnMgPSB3ZWJWaXNpYmxlUGx1Z2lucygpOwot
ICAgIGdldFdlYlZpc2libGVNaW1lc0FuZFBsdWdpbkluZGljZXMobWltZXMsIG1pbWVQbHVnaW5J
bmRpY2VzKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtaW1lcy5zaXplKCk7ICsr
aSkgewotICAgICAgICBjb25zdCBNaW1lQ2xhc3NJbmZvJiBpbmZvID0gbWltZXNbaV07Ci0KLSAg
ICAgICAgaWYgKGluZm8udHlwZSA9PSBtaW1lVHlwZSkgewotICAgICAgICAgICAgcGx1Z2luSW5m
b1JlZiA9IHBsdWdpbnNbbWltZVBsdWdpbkluZGljZXNbaV1dOwotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFw
cm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwobV9jYWNoZWRWaXNpYmxlUGx1Z2lucy5wYWdlVVJM
LCB1cmwpKQorICAgICAgICBtX2NhY2hlZFZpc2libGVQbHVnaW5zID0geyB1cmwsIG1fcGFnZS5w
bHVnaW5JbmZvUHJvdmlkZXIoKS53ZWJWaXNpYmxlUGx1Z2luSW5mbyhtX3BhZ2UsIHVybCkgfTsK
KyAgICBpZiAoIW1fY2FjaGVkVmlzaWJsZVBsdWdpbnMucGx1Z2luTGlzdCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiBzdXBwb3J0c01pbWVUeXBlRm9yUGx1Z2lucyhtaW1lVHlw
ZSwgYWxsb3dlZFBsdWdpblR5cGVzLCAqbV9jYWNoZWRWaXNpYmxlUGx1Z2lucy5wbHVnaW5MaXN0
KTsKIH0KIAogU3RyaW5nIFBsdWdpbkRhdGE6OnBsdWdpbkZpbGVGb3JXZWJWaXNpYmxlTWltZVR5
cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29uc3QKIHsKLSAgICBQbHVnaW5JbmZvIGluZm87
Ci0gICAgaWYgKGdldFBsdWdpbkluZm9Gb3JXZWJWaXNpYmxlTWltZVR5cGUobWltZVR5cGUsIGlu
Zm8pKQotICAgICAgICByZXR1cm4gaW5mby5maWxlOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0K
LQotYm9vbCBQbHVnaW5EYXRhOjpzdXBwb3J0c01pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIGNvbnN0IEFsbG93ZWRQbHVnaW5UeXBlcyBhbGxvd2VkUGx1Z2luVHlwZXMpIGNvbnN0Ci17
Ci0gICAgVmVjdG9yPE1pbWVDbGFzc0luZm8+IG1pbWVzOwotICAgIFZlY3RvcjxzaXplX3Q+IG1p
bWVQbHVnaW5JbmRpY2VzOwotICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZvPiYgcGx1Z2lucyA9
IHRoaXMtPnBsdWdpbnMoKTsKLSAgICBnZXRNaW1lc0FuZFBsdWdpbkluZGljZXMobWltZXMsIG1p
bWVQbHVnaW5JbmRpY2VzKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtaW1lcy5z
aXplKCk7ICsraSkgewotICAgICAgICBpZiAobWltZXNbaV0udHlwZSA9PSBtaW1lVHlwZSAmJiAo
YWxsb3dlZFBsdWdpblR5cGVzID09IEFsbFBsdWdpbnMgfHwgcGx1Z2luc1ttaW1lUGx1Z2luSW5k
aWNlc1tpXV0uaXNBcHBsaWNhdGlvblBsdWdpbikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBmb3IgKGF1dG8gcGx1Z2luIDogd2ViVmlzaWJsZVBsdWdpbnMoKSkgeworICAgICAgICBm
b3IgKGF1dG8mIG1pbWUgOiBwbHVnaW4ubWltZXMpIHsKKyAgICAgICAgICAgIGlmIChtaW1lLnR5
cGUgPT0gbWltZVR5cGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHBsdWdpbi5maWxlOworICAg
ICAgICB9CiAgICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBQbHVnaW5EYXRhOjpp
bml0UGx1Z2lucygpCi17Ci0gICAgQVNTRVJUKG1fcGx1Z2lucy5pc0VtcHR5KCkpOwotCi0gICAg
bV9wbHVnaW5zID0gbV9wYWdlLnBsdWdpbkluZm9Qcm92aWRlcigpLnBsdWdpbkluZm8obV9wYWdl
LCBtX3N1cHBvcnRlZFBsdWdpbklkZW50aWZpZXJzKTsKKyAgICByZXR1cm4geyB9OwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdp
bkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGEu
aAkocmV2aXNpb24gMjYzMDA3KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRh
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDggKzIxLDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRl
IDx3dGYvVVJMLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMzIsNyArMzAsNiBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBQYWdlOwotc3RydWN0IFBsdWdpbkluZm87CiAK
IGVudW0gY2xhc3MgUGx1Z2luTG9hZENsaWVudFBvbGljeSA6IHVpbnQ4X3QgewogICAgIC8vIE5v
IGNsaWVudC1zcGVjaWZpYyBwbHVnLWluIGxvYWQgcG9saWN5IGhhcyBiZWVuIGRlZmluZWQuIFRo
ZSBwbHVnLWluIHNob3VsZCBiZSB2aXNpYmxlIGluIG5hdmlnYXRvci5wbHVnaW5zIGFuZCBXZWJL
aXQgc2hvdWxkIHN5bmNocm9ub3VzbHkKQEAgLTEwMiwyNyArOTksMjMgQEAgcHVibGljOgogCiAg
ICAgY29uc3QgVmVjdG9yPFBsdWdpbkluZm8+JiBwbHVnaW5zKCkgY29uc3QgeyByZXR1cm4gbV9w
bHVnaW5zOyB9CiAgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgVmVjdG9yPFBsdWdpbkluZm8+JiB3
ZWJWaXNpYmxlUGx1Z2lucygpIGNvbnN0OwotICAgIFZlY3RvcjxQbHVnaW5JbmZvPiBwdWJsaWNs
eVZpc2libGVQbHVnaW5zKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRXZWJW
aXNpYmxlTWltZXNBbmRQbHVnaW5JbmRpY2VzKFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiYsIFZlY3Rv
cjxzaXplX3Q+JikgY29uc3Q7CisgICAgc3RkOjpwYWlyPFZlY3RvcjxQbHVnaW5JbmZvPiwgVmVj
dG9yPFBsdWdpbkluZm8+PiBwdWJsaWNseVZpc2libGVQbHVnaW5zQW5kQWRkaXRpb25hbFdlYlZp
c2libGVQbHVnaW5zKCkgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8TWltZUNs
YXNzSW5mbz4gd2ViVmlzaWJsZU1pbWVUeXBlcygpIGNvbnN0OwogCiAgICAgZW51bSBBbGxvd2Vk
UGx1Z2luVHlwZXMgewogICAgICAgICBBbGxQbHVnaW5zLAogICAgICAgICBPbmx5QXBwbGljYXRp
b25QbHVnaW5zCiAgICAgfTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc3VwcG9ydHNXZWJW
aXNpYmxlTWltZVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgQWxsb3dlZFBsdWdp
blR5cGVzKSBjb25zdDsKLSAgICBTdHJpbmcgcGx1Z2luRmlsZUZvcldlYlZpc2libGVNaW1lVHlw
ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSBjb25zdDsKLQogICAgIFdFQkNPUkVfRVhQT1JUIGJv
b2wgc3VwcG9ydHNNaW1lVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBBbGxvd2Vk
UGx1Z2luVHlwZXMpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc3VwcG9ydHNXZWJW
aXNpYmxlTWltZVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgQWxsb3dlZFBsdWdp
blR5cGVzKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIHN1cHBvcnRzV2ViVmlzaWJs
ZU1pbWVUeXBlRm9yVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IEFsbG93ZWRQbHVn
aW5UeXBlcywgY29uc3QgVVJMJikgY29uc3Q7CiAKKyAgICBTdHJpbmcgcGx1Z2luRmlsZUZvcldl
YlZpc2libGVNaW1lVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSBjb25zdDsKKwogcHJpdmF0
ZToKICAgICBleHBsaWNpdCBQbHVnaW5EYXRhKFBhZ2UmKTsKICAgICB2b2lkIGluaXRQbHVnaW5z
KCk7Ci0gICAgYm9vbCBnZXRQbHVnaW5JbmZvRm9yV2ViVmlzaWJsZU1pbWVUeXBlKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIFBsdWdpbkluZm8mKSBjb25zdDsKLSAgICB2b2lkIGdldE1pbWVzQW5k
UGx1Z2luSW5kaWNlcyhWZWN0b3I8TWltZUNsYXNzSW5mbz4mLCBWZWN0b3I8c2l6ZV90PiYpIGNv
bnN0OwotICAgIHZvaWQgZ2V0TWltZXNBbmRQbHVnaW5JbmRpY2llc0ZvclBsdWdpbnMoY29uc3Qg
VmVjdG9yPFBsdWdpbkluZm8+JiwgVmVjdG9yPE1pbWVDbGFzc0luZm8+JiwgVmVjdG9yPHNpemVf
dD4mKSBjb25zdDsKLSAgICBib29sIHN1cHBvcnRzV2ViVmlzaWJsZU1pbWVUeXBlKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIGNvbnN0IEFsbG93ZWRQbHVnaW5UeXBlcywgY29uc3QgVmVjdG9yPFBs
dWdpbkluZm8+JikgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICBQYWdlJiBtX3BhZ2U7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwkocmV2aXNpb24gMjYzMDEwKQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAyMC0wNi0xNCAgU2FtIFdlaW5pZyAgPHdl
aW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgW1dQVF0gaHRtbC93ZWJhcHBhcGlzL3N5c3RlbS1z
dGF0ZS1hbmQtY2FwYWJpbGl0aWVzL3RoZS1uYXZpZ2F0b3Itb2JqZWN0L25hdmlnYXRvci1wbHVn
aW5hcnJheS5odG1sIGZhaWxzIGR1ZSB0byBsYWNrIG9mIGNhY2hpbmcgb2YgUGx1Z2luIG9iamVj
dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzE4
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OnBsdWdpblN1cHBvcnRzRXh0ZW5zaW9uKToKKwogMjAyMC0wNi0xNCAgQ2FybG9z
IEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW1NPVVBdIERp
c2FibGUgSFNUUyBmb3IgcmVxdWVzdHMgd2hlbiBjb29raWVzIHdpbGwgYmUgYmxvY2tlZCBieSBJ
VFAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFt
ZUxvYWRlckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAkocmV2aXNpb24gMjYzMDA3
KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9h
ZGVyQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY1NywxMSArMTY1Nyw4IEBAIFJlZlB0
cjxXaWRnZXQ+IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmUKIHN0YXRpYyBib29sIHBsdWdpblN1
cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFBsdWdpbkRhdGEmIHBsdWdpbkRhdGEsIGNvbnN0IFN0cmlu
ZyYgZXh0ZW5zaW9uKQogewogICAgIEFTU0VSVChleHRlbnNpb24uY29udmVydFRvQVNDSUlMb3dl
cmNhc2UoKSA9PSBleHRlbnNpb24pOwotICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiBtaW1lczsK
LSAgICBWZWN0b3I8c2l6ZV90PiBtaW1lUGx1Z2luSW5kaWNlczsKLSAgICBwbHVnaW5EYXRhLmdl
dFdlYlZpc2libGVNaW1lc0FuZFBsdWdpbkluZGljZXMobWltZXMsIG1pbWVQbHVnaW5JbmRpY2Vz
KTsKLSAgICBmb3IgKGF1dG8mIG1pbWVDbGFzc0luZm8gOiBtaW1lcykgewotICAgICAgICBpZiAo
bWltZUNsYXNzSW5mby5leHRlbnNpb25zLmNvbnRhaW5zKGV4dGVuc2lvbikpCisgICAgZm9yIChh
dXRvJiBtaW1lVHlwZSA6IHBsdWdpbkRhdGEud2ViVmlzaWJsZU1pbWVUeXBlcygpKSB7CisgICAg
ICAgIGlmIChtaW1lVHlwZS5leHRlbnNpb25zLmNvbnRhaW5zKGV4dGVuc2lvbikpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401869</attachid>
            <date>2020-06-14 11:50:25 -0700</date>
            <delta_ts>2020-06-14 13:06:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213185-20200614115024.patch</filename>
            <type>text/plain</type>
            <size>49069</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzAxMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBACisyMDIwLTA2LTE0ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbV1BUXSBodG1sL3dlYmFwcGFwaXMv
c3lzdGVtLXN0YXRlLWFuZC1jYXBhYmlsaXRpZXMvdGhlLW5hdmlnYXRvci1vYmplY3QvbmF2aWdh
dG9yLXBsdWdpbmFycmF5Lmh0bWwgZmFpbHMgZHVlIHRvIGxhY2sgb2YgY2FjaGluZyBvZiBQbHVn
aW4gb2JqZWN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjEzMTg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgT3ZlcmhhdWwgd2ViIGV4cG9zZWQgcGx1Z2luIEFQSXM6CisgICAgICAgIC0gQWxsIERPTVBs
dWdpbiBhbmQgRE9NTWltZVR5cGVzIGFyZSBub3cgY3JlYXRlZCB0b2dldGhlciAoYWxvbmcgd2l0
aCB0aGUgRE9NUGx1Z2luQXJyYXkgYW5kIAorICAgICAgICAgIERPTU1pbWVUeXBlQXJyYXkpIG9u
IGZpcnN0IGFjY2VzcyBvZiBlaXRoZXIgbmF2aWdhdG9yLnBsdWdpbnMgb3IgbmF2aWdhdG9yLm1p
bWVUeXBlcy4KKyAgICAgICAgLSBET01QbHVnaW5zIGFyZSBjcmVhdGVkIGFuZCBzdG9yZWQgaW4g
dGhlIERPTVBsdWdpbkFycmF5IChmaXhpbmcgdGhlIGluaXRpYWwgbGFjayBvZiBjYWNoaW5nIGlz
c3VlKQorICAgICAgICAtIERPTU1pbWVUeXBlcyBhcmUgY3JlYXRlZCBhbmQgc3RvcmVkIGluIHRo
ZSBET01NaW1lVHlwZUFycmF5LgorICAgICAgICAtIERPTVBsdWdpbnMgaG9sZCBhIHN0cm9uZyBy
ZWZlcmVuY2UgdG8gdGhlaXIgYXNzb2NpYXRlZCBET01NaW1lVHlwZS4gVGhlIERPTU1pbWVUeXBl
IGhhcworICAgICAgICAgIGEgd2VhayByZWZlcmVuY2UgYmFjayB0byB0aGUgRE9NUGx1Z2luLiBU
aGlzIG1lYW5zIGZvciBhIHNpbmdsZSBleGVjdXRhdGlvbiBjb250ZXh0LCB3ZSBvbmx5CisgICAg
ICAgICAgZXZlciBjcmVhdGUgb25lIERPTVBsdWdpbiAvIERPTU1pbWVUeXBlIGZvciBlYWNoIHVu
ZGVybHlpbmcgcGx1Z2luIC8gbWltZXR5cGUuCisgICAgICAgIC0gVXBkYXRlIEdDIHNvIHRoYXQg
RE9NUGx1Z2luIGFuZCBET01NaW1lVHlwZSAoaW4gYWRkaXRpb24gdG8gRE9NUGx1Z2luQXJyYXkg
YW5kIERPTU1pbWVUeXBlQXJyYXkKKyAgICAgICAgICB3aGljaCB3ZXJlIGFscmVhZHkgZG9pbmcg
dGhpcykgdXNlIG5hdmlnYXRvciByZWFjaGFiaWxpdHkgZm9yIHRoZWlyIGxpZmV0aW1lLiBUaGlz
IGlzIGFsbW9zdAorICAgICAgICAgIGNvcnJlY3QsIGV4Y2VwdCBpZiB3ZSBldmVyIGltcGxlbWVu
dCBET01QbHVnaW5BcnJheS5yZWZyZXNoKGZhbHNlKSB0byBtYXRjaCB0aGUgc3BlYywgaW4gd2hp
Y2gKKyAgICAgICAgICBjYXNlIHlvdSBjb3VsZCBlbmQgdXAgd2l0aCBzb21lIERPTVBsdWdpbnMg
YW5kIERPTU1pbWVUeXBlcyB0aGF0IGFyZSBtYXJrZWQgYXMgcmVhY2hhYmxlIHdoZW4KKyAgICAg
ICAgICB0aGV5IHJlYWxseSBhcmUgbm90LCBidXQgb25seSBwbHVnaW5zIHRoYXQgd2VyZSByZW1v
dmVkLiBUaGlzIHNlZW1zIHNvIHVubGlrZWx5IHRvIG1hdHRlciB0aGF0CisgICAgICAgICAgaW1w
bGVtZW50aW5nIGEgbW9yZSBzdHJpY3QgcmVhY2hhYmlsaXR5IGZ1bmN0aW9uIHNlZW1zIGxpa2Ug
dGhlIHdyb25nIHdheSB0byBnby4KKyAgICAgICAgICAKKyAgICAgICAgW1dPUksgSU4gUFJPR1JF
U1NdCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNl
cy1pbnB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGxvYWRl
ci9TdWJmcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5kUGx1Z2luTUlNRVR5
cGVGcm9tVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmxvZ1BsdWdpblJlcXVlc3QpOgorICAgICAg
ICAqIHBhZ2UvTmF2aWdhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6aW5p
dGlhbGl6ZVBsdWdpbkFuZE1JTUVUeXBlQXJyYXlzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6TmF2aWdhdG9yOjpwbHVnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6bWlt
ZVR5cGVzKToKKyAgICAgICAgKiBwYWdlL05hdmlnYXRvci5oOgorICAgICAgICAqIHBhZ2UvTmF2
aWdhdG9yLmlkbDoKKyAgICAgICAgKiBwYWdlL05hdmlnYXRvclBsdWdpbnMuaWRsOiBBZGRlZC4K
KyAgICAgICAgKiBwbHVnaW5zL0RPTU1pbWVUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRP
TU1pbWVUeXBlOjpET01NaW1lVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpET01NaW1lVHlwZTo6
c3VmZml4ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RE9NTWltZVR5cGU6OmVuYWJsZWRQ
bHVnaW4gY29uc3QpOgorICAgICAgICAqIHBsdWdpbnMvRE9NTWltZVR5cGUuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkRPTU1pbWVUeXBlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NTWlt
ZVR5cGU6Om5hdmlnYXRvcik6CisgICAgICAgICogcGx1Z2lucy9ET01NaW1lVHlwZS5pZGw6Cisg
ICAgICAgICogcGx1Z2lucy9ET01NaW1lVHlwZUFycmF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRPTU1pbWVUeXBlQXJyYXk6OkRPTU1pbWVUeXBlQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6
RE9NTWltZVR5cGVBcnJheTo6bGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTU1p
bWVUeXBlQXJyYXk6Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RE9NTWltZVR5cGVBcnJheTo6
bmFtZWRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTU1pbWVUeXBlQXJyYXk6OnN1cHBvcnRl
ZFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6RE9NTWltZVR5cGVBcnJheTo6Z2V0
UGx1Z2luRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGx1Z2lucy9ET01NaW1lVHlw
ZUFycmF5Lmg6CisgICAgICAgICogcGx1Z2lucy9ET01QbHVnaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NUGx1Z2luOjpET01QbHVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6RE9NUGx1Z2lu
OjppdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBsdWdpbjo6bmFtZWRJdGVtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTVBsdWdpbjo6c3VwcG9ydGVkUHJvcGVydHlOYW1lcyk6CisgICAgICAg
ICogcGx1Z2lucy9ET01QbHVnaW4uaDoKKyAgICAgICAgKiBwbHVnaW5zL0RPTVBsdWdpbi5pZGw6
CisgICAgICAgICogcGx1Z2lucy9ET01QbHVnaW5BcnJheS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpET01QbHVnaW5BcnJheTo6RE9NUGx1Z2luQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6RE9N
UGx1Z2luQXJyYXk6Omxlbmd0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpET01QbHVnaW5B
cnJheTo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpET01QbHVnaW5BcnJheTo6bmFtZWRJdGVt
KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBsdWdpbkFycmF5OjpzdXBwb3J0ZWRQcm9wZXJ0eU5h
bWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBsdWdpbkFycmF5OjpwbHVnaW5EYXRhIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbHVnaW5zL0RPTVBsdWdpbkFycmF5Lmg6CisgICAgICAg
ICogcGx1Z2lucy9QbHVnaW5EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6
OmluaXRQbHVnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OnB1YmxpY2x5Vmlz
aWJsZVBsdWdpbnNBbmRBZGRpdGlvbmFsV2ViVmlzaWJsZVBsdWdpbnMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6d2ViVmlzaWJsZU1pbWVUeXBlcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpzdXBwb3J0c01pbWVUeXBlRm9yUGx1Z2lucyk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5EYXRhOjpzdXBwb3J0c01pbWVUeXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpbkRhdGE6OnN1cHBvcnRzV2ViVmlzaWJsZU1pbWVUeXBlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OnN1cHBvcnRzV2ViVmlzaWJsZU1pbWVUeXBlRm9yVVJM
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OnBsdWdpbkZpbGVGb3JXZWJW
aXNpYmxlTWltZVR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6cHVi
bGljbHlWaXNpYmxlUGx1Z2lucyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5EYXRhOjpnZXRXZWJWaXNpYmxlTWltZXNBbmRQbHVnaW5JbmRpY2VzIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OmdldE1pbWVzQW5kUGx1Z2luSW5k
aWNlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhOjpnZXRN
aW1lc0FuZFBsdWdpbkluZGljaWVzRm9yUGx1Z2lucyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5EYXRhOjpnZXRQbHVnaW5JbmZvRm9yV2ViVmlzaWJsZU1pbWVUeXBl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpbkRhdGEuaDoKKwogMjAy
MC0wNi0xNCAgVGV0c3VoYXJ1IE9oemVraSAgPHRldHN1aGFydS5vaHpla2lAZ21haWwuY29tPgog
CiAgICAgICAgIFdpdGhkcmF3IEZpbGVSZWFkZXJTeW5jIGZyb20gU2VydmljZVdvcmtlcgpJbmRl
eDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05NDUsNiArOTQ1LDcgQEAgc2V0KFdl
YkNvcmVfTk9OX1NWR19JRExfRklMRVMKICAgICBwYWdlL05hdmlnYXRvcklELmlkbAogICAgIHBh
Z2UvTmF2aWdhdG9yTGFuZ3VhZ2UuaWRsCiAgICAgcGFnZS9OYXZpZ2F0b3JPbkxpbmUuaWRsCisg
ICAgcGFnZS9OYXZpZ2F0b3JQbHVnaW5zLmlkbAogICAgIHBhZ2UvTmF2aWdhdG9yU2VydmljZVdv
cmtlci5pZGwKICAgICBwYWdlL05hdmlnYXRvclNoYXJlLmlkbAogICAgIHBhZ2UvUGVyZm9ybWFu
Y2UuaWRsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVs
aXN0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0Lnhj
ZmlsZWxpc3QJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3Vy
Y2VzLWlucHV0LnhjZmlsZWxpc3QJKHdvcmtpbmcgY29weSkKQEAgLTkzMyw2ICs5MzMsNyBAQCAk
KFBST0pFQ1RfRElSKS9wYWdlL05hdmlnYXRvcklELmlkbAogJChQUk9KRUNUX0RJUikvcGFnZS9O
YXZpZ2F0b3JJc0xvZ2dlZEluLmlkbAogJChQUk9KRUNUX0RJUikvcGFnZS9OYXZpZ2F0b3JMYW5n
dWFnZS5pZGwKICQoUFJPSkVDVF9ESVIpL3BhZ2UvTmF2aWdhdG9yT25MaW5lLmlkbAorJChQUk9K
RUNUX0RJUikvcGFnZS9OYXZpZ2F0b3JQbHVnaW5zLmlkbAogJChQUk9KRUNUX0RJUikvcGFnZS9O
YXZpZ2F0b3JTZXJ2aWNlV29ya2VyLmlkbAogJChQUk9KRUNUX0RJUikvcGFnZS9OYXZpZ2F0b3JT
aGFyZS5pZGwKICQoUFJPSkVDVF9ESVIpL3BhZ2UvUGVyZm9ybWFuY2UuaWRsCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAkocmV2aXNp
b24gMjYzMDA3KQorKysgU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmls
ZWxpc3QJKHdvcmtpbmcgY29weSkKQEAgLTExNTQsNiArMTE1NCw4IEBAICQoQlVJTFRfUFJPRFVD
VFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWIKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJDb3JlL0pTTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmgKICQoQlVJTFRfUFJPRFVD
VFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTTmF2aWdhdG9yT25MaW5lLmNwcAogJChC
VUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNOYXZpZ2F0b3JPbkxp
bmUuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNOYXZp
Z2F0b3JQbHVnaW5zLmNwcAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvSlNOYXZpZ2F0b3JQbHVnaW5zLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJDb3JlL0pTTmF2aWdhdG9yU2VydmljZVdvcmtlci5jcHAKICQoQlVJTFRfUFJP
RFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTTmF2aWdhdG9yU2VydmljZVdvcmtl
ci5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU05hdmln
YXRvclNoYXJlLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lv
biAyNjMwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5n
IGNvcHkpCkBAIC05NTIsNiArOTUyLDcgQEAgSlNfQklORElOR19JRExTID0gXAogICAgICQoV2Vi
Q29yZSkvcGFnZS9OYXZpZ2F0b3JJc0xvZ2dlZEluLmlkbCBcCiAgICAgJChXZWJDb3JlKS9wYWdl
L05hdmlnYXRvckxhbmd1YWdlLmlkbCBcCiAgICAgJChXZWJDb3JlKS9wYWdlL05hdmlnYXRvck9u
TGluZS5pZGwgXAorICAgICQoV2ViQ29yZSkvcGFnZS9OYXZpZ2F0b3JQbHVnaW5zLmlkbCBcCiAg
ICAgJChXZWJDb3JlKS9wYWdlL05hdmlnYXRvclNlcnZpY2VXb3JrZXIuaWRsIFwKICAgICAkKFdl
YkNvcmUpL3BhZ2UvTmF2aWdhdG9yU2hhcmUuaWRsIFwKICAgICAkKFdlYkNvcmUpL3BhZ2UvUGVy
Zm9ybWFuY2UuaWRsIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtOTg4
Nyw2ICs5ODg3LDcgQEAKIAkJN0FGOUIyMDkxOENGQjVGMjAwQzY0QkVGIC8qIEpTVlRUUmVnaW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVlRUUmVnaW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjlCMjBBMThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZU
VFJlZ2lvbkxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNW
VFRSZWdpb25MaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FGOUIyMEIx
OENGQjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU1ZUVFJlZ2lvbkxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJN0MwMTdDM0QyNDk2OUYxMzAwREMwQzAyIC8qIE5hdmlnYXRvclBsdWdpbnMuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IE5hdmlnYXRvclBsdWdpbnMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QzAyOUM2RDI0OTNDOEY4MDAyNjgyMDQgLyogQ29sb3JUeXBlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b2xvclR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMENFRjI4MUU0QTU0
MkMwMDhERUI4MCAvKiBKU0RPTUNvbnN0cnVjdG9yQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0RPTUNvbnN0cnVjdG9yQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3QzBDRUYyOTFFNEE1NEQzMDA4REVCODAgLyogSlNET01Db25zdHJ1Y3Rvcldp
dGhEb2N1bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUNvbnN0
cnVjdG9yV2l0aERvY3VtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTEx
Miw2ICsyMTExMyw3IEBACiAJCQkJNkI1MDdBMjMyMzRCRjM0MTAwQkU3QzYyIC8qIE5hdmlnYXRv
cklzTG9nZ2VkSW4uaWRsICovLAogCQkJCTdDNUJFQTNCMUU5RUU3NzEwMENDNTE3QiAvKiBOYXZp
Z2F0b3JMYW5ndWFnZS5pZGwgKi8sCiAJCQkJN0M1QkVBM0MxRTlFRTc3MTAwQ0M1MTdCIC8qIE5h
dmlnYXRvck9uTGluZS5pZGwgKi8sCisJCQkJN0MwMTdDM0QyNDk2OUYxMzAwREMwQzAyIC8qIE5h
dmlnYXRvclBsdWdpbnMuaWRsICovLAogCQkJCTUxODJDMjRCMUYzMTNBRTAwMDU5QkE3QyAvKiBO
YXZpZ2F0b3JTZXJ2aWNlV29ya2VyLmlkbCAqLywKIAkJCQkxREM1NTNGRDIxMUJBMTJBMDA0Qjc4
MEUgLyogTmF2aWdhdG9yU2hhcmUuaWRsICovLAogCQkJCTAwMTQ2Mjg4MTAzQ0QxREUwMDBCMjBE
QiAvKiBPcmlnaW5BY2Nlc3NFbnRyeS5jcHAgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvU3ViZnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9TdWJmcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MywzMCArMTYz
LDI1IEBAIGJvb2wgRnJhbWVMb2FkZXI6OlN1YmZyYW1lTG9hZGVyOjpyZXF1ZXMKICAgICByZXR1
cm4gbG9hZFBsdWdpbihvd25lckVsZW1lbnQsIHVybCwgbWltZVR5cGUsIHBhcmFtTmFtZXMsIHBh
cmFtVmFsdWVzLCB1c2VGYWxsYmFjayk7CiB9CiAKLXN0YXRpYyBTdHJpbmcgZmluZFBsdWdpbk1J
TUVUeXBlRnJvbVVSTChQYWdlKiBwYWdlLCBjb25zdCBTdHJpbmcmIHVybCkKK3N0YXRpYyBTdHJp
bmcgZmluZFBsdWdpbk1JTUVUeXBlRnJvbVVSTChQYWdlJiBwYWdlLCBjb25zdCBTdHJpbmdWaWV3
JiB1cmwpCiB7CiAgICAgaWYgKCF1cmwpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKIAogICAgIHNpemVfdCBkb3RJbmRleCA9IHVybC5yZXZlcnNlRmluZCgn
LicpOwogICAgIGlmIChkb3RJbmRleCA9PSBub3RGb3VuZCkKLSAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgU3RyaW5nIGV4dGVuc2lvbiA9IHVybC5z
dWJzdHJpbmcoZG90SW5kZXggKyAxKTsKKyAgICBhdXRvIGV4dGVuc2lvbiA9IHVybC5zdWJzdHJp
bmcoZG90SW5kZXggKyAxKTsKIAotICAgIGNvbnN0IFBsdWdpbkRhdGEmIHBsdWdpbkRhdGEgPSBw
YWdlLT5wbHVnaW5EYXRhKCk7Ci0KLSAgICBWZWN0b3I8TWltZUNsYXNzSW5mbz4gbWltZXM7Ci0g
ICAgVmVjdG9yPHNpemVfdD4gbWltZVBsdWdpbkluZGljZXM7Ci0gICAgcGx1Z2luRGF0YS5nZXRX
ZWJWaXNpYmxlTWltZXNBbmRQbHVnaW5JbmRpY2VzKG1pbWVzLCBtaW1lUGx1Z2luSW5kaWNlcyk7
Ci0gICAgZm9yIChhdXRvJiBtaW1lIDogbWltZXMpIHsKLSAgICAgICAgZm9yIChhdXRvJiBtaW1l
RXh0ZW5zaW9uIDogbWltZS5leHRlbnNpb25zKSB7Ci0gICAgICAgICAgICBpZiAoZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZShleHRlbnNpb24sIG1pbWVFeHRlbnNpb24pKQotICAgICAgICAgICAgICAg
IHJldHVybiBtaW1lLnR5cGU7CisgICAgZm9yIChhdXRvJiBtaW1lVHlwZSA6IHBhZ2UucGx1Z2lu
RGF0YSgpLndlYlZpc2libGVNaW1lVHlwZXMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIG1pbWVU
eXBlRXh0ZW5zaW9uIDogbWltZVR5cGUuZXh0ZW5zaW9ucykgeworICAgICAgICAgICAgaWYgKGVx
dWFsSWdub3JpbmdBU0NJSUNhc2UoZXh0ZW5zaW9uLCBtaW1lVHlwZUV4dGVuc2lvbikpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1pbWVUeXBlLnR5cGU7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogc3RhdGljIHZvaWQgbG9n
UGx1Z2luUmVxdWVzdChQYWdlKiBwYWdlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBT
dHJpbmcmIHVybCwgYm9vbCBzdWNjZXNzKQpAQCAtMTk3LDcgKzE5Miw3IEBAIHN0YXRpYyB2b2lk
IGxvZ1BsdWdpblJlcXVlc3QoUGFnZSogcGFnZSwKICAgICBTdHJpbmcgbmV3TUlNRVR5cGUgPSBt
aW1lVHlwZTsKICAgICBpZiAoIW5ld01JTUVUeXBlKSB7CiAgICAgICAgIC8vIFRyeSB0byBmaWd1
cmUgb3V0IHRoZSBNSU1FIHR5cGUgZnJvbSB0aGUgVVJMIGV4dGVuc2lvbi4KLSAgICAgICAgbmV3
TUlNRVR5cGUgPSBmaW5kUGx1Z2luTUlNRVR5cGVGcm9tVVJMKHBhZ2UsIHVybCk7CisgICAgICAg
IG5ld01JTUVUeXBlID0gZmluZFBsdWdpbk1JTUVUeXBlRnJvbVVSTCgqcGFnZSwgdXJsKTsKICAg
ICAgICAgaWYgKCFuZXdNSU1FVHlwZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCShyZXZpc2lvbiAyNjMwMDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDkg
QEAKIAogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgorI2luY2x1
ZGUgIkRPTU1pbWVUeXBlLmgiCiAjaW5jbHVkZSAiRE9NTWltZVR5cGVBcnJheS5oIgorI2luY2x1
ZGUgIkRPTVBsdWdpbi5oIgogI2luY2x1ZGUgIkRPTVBsdWdpbkFycmF5LmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpAQCAtMTk1LDE0ICsxOTcsNTQgQEAgdm9p
ZCBOYXZpZ2F0b3I6OnNob3dTaGFyZURhdGEoRXhjZXB0aW9uTwogICAgIH0pOwogfQogCit2b2lk
IE5hdmlnYXRvcjo6aW5pdGlhbGl6ZVBsdWdpbkFuZE1JTUVUeXBlQXJyYXlzSWZOZWVkZWQoKQor
eworICAgIGlmIChtX3BsdWdpbnMpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIGZyYW1l
ID0gdGhpcy0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+cGFnZSgpKSB7Cisg
ICAgICAgIG1fcGx1Z2lucyA9IERPTVBsdWdpbkFycmF5OjpjcmVhdGUoKnRoaXMpOworICAgICAg
ICBtX21pbWVUeXBlcyA9IERPTU1pbWVUeXBlQXJyYXk6OmNyZWF0ZSgqdGhpcyk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIFtwdWJsaWNseVZpc2libGVQbHVnaW5zLCBhZGRp
dGlvbmFsV2ViVmlzaWJpbGVQbHVnaW5zXSA9IGZyYW1lLT5wYWdlKCktPnBsdWdpbkRhdGEoKS5w
dWJsaWNseVZpc2libGVQbHVnaW5zQW5kQWRkaXRpb25hbFdlYlZpc2libGVQbHVnaW5zKCk7CisK
KyAgICBWZWN0b3I8UmVmPERPTVBsdWdpbj4+IHB1YmxpY2x5VmlzaWJsZURPTVBsdWdpbnM7Cisg
ICAgVmVjdG9yPFJlZjxET01QbHVnaW4+PiBhZGRpdGlvbmFsV2ViVmlzaWJpbGVET01QbHVnaW5z
OworICAgIFZlY3RvcjxSZWY8RE9NTWltZVR5cGU+PiB3ZWJWaXNpYmlsZURPTU1pbWVUeXBlczsK
KworICAgIGlmIChwdWJsaWNseVZpc2libGVQbHVnaW5zLnNpemUoKSA+IDApIHsKKyAgICAgICAg
YWRkaXRpb25hbFdlYlZpc2liaWxlRE9NUGx1Z2lucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHB1
YmxpY2x5VmlzaWJsZVBsdWdpbnMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiBwbHVnaW4g
OiBwdWJsaWNseVZpc2libGVQbHVnaW5zKSB7CisgICAgICAgICAgICBhdXRvIGRvbVBsdWdpbiA9
IERPTVBsdWdpbjo6Y3JlYXRlKCp0aGlzLCBwbHVnaW4pOworICAgICAgICAgICAgZm9yIChhdXRv
JiBkb21NaW1lVHlwZSA6IGRvbVBsdWdpbi0+bWltZVR5cGVzKCkpCisgICAgICAgICAgICAgICAg
d2ViVmlzaWJpbGVET01NaW1lVHlwZXMuYXBwZW5kKGRvbU1pbWVUeXBlKTsKKyAgICAgICAgICAg
IGFkZGl0aW9uYWxXZWJWaXNpYmlsZURPTVBsdWdpbnMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUo
ZG9tUGx1Z2luKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGFkZGl0aW9uYWxXZWJWaXNp
YmlsZVBsdWdpbnMuc2l6ZSgpID4gMCkgeworICAgICAgICBhZGRpdGlvbmFsV2ViVmlzaWJpbGVE
T01QbHVnaW5zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYWRkaXRpb25hbFdlYlZpc2liaWxlUGx1
Z2lucy5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIHBsdWdpbiA6IGFkZGl0aW9uYWxXZWJW
aXNpYmlsZVBsdWdpbnMpIHsKKyAgICAgICAgICAgIGF1dG8gZG9tUGx1Z2luID0gRE9NUGx1Z2lu
OjpjcmVhdGUoKnRoaXMsIHBsdWdpbik7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGRvbU1pbWVU
eXBlIDogZG9tUGx1Z2luLT5taW1lVHlwZXMoKSkKKyAgICAgICAgICAgICAgICB3ZWJWaXNpYmls
ZURPTU1pbWVUeXBlcy5hcHBlbmQoZG9tTWltZVR5cGUpOworICAgICAgICAgICAgYWRkaXRpb25h
bFdlYlZpc2liaWxlRE9NUGx1Z2lucy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShkb21QbHVnaW4p
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBtX3BsdWdpbnMgPSBET01QbHVnaW5BcnJh
eTo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHB1YmxpY2x5VmlzaWJsZURPTVBsdWdpbnMpLCBXVEZN
b3ZlKGFkZGl0aW9uYWxXZWJWaXNpYmlsZURPTVBsdWdpbnMpKTsKKyAgICBtX21pbWVUeXBlcyA9
IERPTU1pbWVUeXBlQXJyYXk6OmNyZWF0ZSgqdGhpcywgV1RGTW92ZSh3ZWJWaXNpYmlsZURPTU1p
bWVUeXBlcykpOworfQorCiBET01QbHVnaW5BcnJheSYgTmF2aWdhdG9yOjpwbHVnaW5zKCkKIHsK
ICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSB7CiAgICAgICAgIGlmIChhdXRvKiBmcmFtZSA9IHRoaXMtPmZy
YW1lKCkpCiAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nTmF2
aWdhdG9yQVBJQWNjZXNzZWQoKmZyYW1lLT5kb2N1bWVudCgpLCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzOjpOYXZpZ2F0b3JBUEk6OlBsdWdpbnMpOwogICAgIH0KLSAgICBpZiAoIW1fcGx1Z2lucykK
LSAgICAgICAgbV9wbHVnaW5zID0gRE9NUGx1Z2luQXJyYXk6OmNyZWF0ZSgqdGhpcyk7CisgICAg
aW5pdGlhbGl6ZVBsdWdpbkFuZE1JTUVUeXBlQXJyYXlzSWZOZWVkZWQoKTsKICAgICByZXR1cm4g
Km1fcGx1Z2luczsKIH0KIApAQCAtMjEyLDggKzI1NCw3IEBAIERPTU1pbWVUeXBlQXJyYXkmIE5h
dmlnYXRvcjo6bWltZVR5cGVzKCkKICAgICAgICAgaWYgKGF1dG8qIGZyYW1lID0gdGhpcy0+ZnJh
bWUoKSkKICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dOYXZp
Z2F0b3JBUElBY2Nlc3NlZCgqZnJhbWUtPmRvY3VtZW50KCksIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3M6Ok5hdmlnYXRvckFQSTo6TWltZVR5cGVzKTsKICAgICB9Ci0gICAgaWYgKCFtX21pbWVUeXBl
cykKLSAgICAgICAgbV9taW1lVHlwZXMgPSBET01NaW1lVHlwZUFycmF5OjpjcmVhdGUoKnRoaXMp
OworICAgIGluaXRpYWxpemVQbHVnaW5BbmRNSU1FVHlwZUFycmF5c0lmTmVlZGVkKCk7CiAgICAg
cmV0dXJuICptX21pbWVUeXBlczsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9OYXZp
Z2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5oCShy
ZXZpc2lvbiAyNjMwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OCw2ICs2OCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzaG93U2hhcmVE
YXRhKEV4Y2VwdGlvbk9yPFNoYXJlRGF0YVdpdGhQYXJzZWRVUkwmPiwgUmVmPERlZmVycmVkUHJv
bWlzZT4mJik7CiAgICAgZXhwbGljaXQgTmF2aWdhdG9yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBET01XaW5kb3cmKTsKIAorICAgIHZvaWQgaW5pdGlhbGl6ZVBsdWdpbkFuZE1JTUVUeXBlQXJy
YXlzSWZOZWVkZWQoKTsKKwogICAgIG11dGFibGUgUmVmUHRyPFNoYXJlRGF0YVJlYWRlcj4gbV9s
b2FkZXI7CiAgICAgbXV0YWJsZSBib29sIG1faGFzUGVuZGluZ1NoYXJlIHsgZmFsc2UgfTsKICAg
ICBtdXRhYmxlIFJlZlB0cjxET01QbHVnaW5BcnJheT4gbV9wbHVnaW5zOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvTmF2aWdhdG9yLmlkbAkocmV2aXNpb24gMjYzMDA3KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9OYXZpZ2F0b3IuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMCArMjEsNyBAQAogICAg
IEdlbmVyYXRlSXNSZWFjaGFibGU9UmVhY2hhYmxlRnJvbURPTVdpbmRvdywKICAgICBKU0N1c3Rv
bU1hcmtGdW5jdGlvbiwKIF0gaW50ZXJmYWNlIE5hdmlnYXRvciB7Ci0gICAgcmVhZG9ubHkgYXR0
cmlidXRlIERPTVBsdWdpbkFycmF5IHBsdWdpbnM7Ci0gICAgcmVhZG9ubHkgYXR0cmlidXRlIERP
TU1pbWVUeXBlQXJyYXkgbWltZVR5cGVzOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFu
IGNvb2tpZUVuYWJsZWQ7Ci0gICAgYm9vbGVhbiBqYXZhRW5hYmxlZCgpOwogCiAgICAgW0NvbmRp
dGlvbmFsPU5BVklHQVRPUl9TVEFOREFMT05FXSByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBz
dGFuZGFsb25lOwogCkBAIC0zNSw1ICszMiw2IEBAIE5hdmlnYXRvciBpbXBsZW1lbnRzIE5hdmln
YXRvcklEOwogTmF2aWdhdG9yIGltcGxlbWVudHMgTmF2aWdhdG9yTGFuZ3VhZ2U7CiBOYXZpZ2F0
b3IgaW1wbGVtZW50cyBOYXZpZ2F0b3JNYXhUb3VjaFBvaW50czsKIE5hdmlnYXRvciBpbXBsZW1l
bnRzIE5hdmlnYXRvck9uTGluZTsKK05hdmlnYXRvciBpbXBsZW1lbnRzIE5hdmlnYXRvclBsdWdp
bnM7CiBOYXZpZ2F0b3IgaW1wbGVtZW50cyBOYXZpZ2F0b3JTZXJ2aWNlV29ya2VyOwogTmF2aWdh
dG9yIGltcGxlbWVudHMgTmF2aWdhdG9yU2hhcmU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L05hdmlnYXRvclBsdWdpbnMuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
TmF2aWdhdG9yUGx1Z2lucy5pZGwJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9OYXZpZ2F0b3JQbHVnaW5zLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworWworICAgIE5vSW50ZXJmYWNlT2JqZWN0CitdIGludGVyZmFjZSBOYXZpZ2F0
b3JQbHVnaW5zIHsKKyAgICBbU2FtZU9iamVjdF0gcmVhZG9ubHkgYXR0cmlidXRlIERPTVBsdWdp
bkFycmF5IHBsdWdpbnM7CisgICAgW1NhbWVPYmplY3RdIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01N
aW1lVHlwZUFycmF5IG1pbWVUeXBlczsKKyAgICBib29sZWFuIGphdmFFbmFibGVkKCk7Cit9OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01NaW1lVHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01NaW1lVHlwZS5jcHAJKHJldmlzaW9uIDI2MzAw
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NTWltZVR5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMCwyMyArMjAsMTYgQEAKICNpbmNsdWRlICJET01NaW1lVHlwZS5oIgogCiAjaW5j
bHVkZSAiRE9NUGx1Z2luLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxv
YWRlci5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCisjaW5j
bHVkZSAiTmF2aWdhdG9yLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLURPTU1pbWVUeXBlOjpET01NaW1lVHlwZShSZWZQdHI8
UGx1Z2luRGF0YT4mJiBwbHVnaW5EYXRhLCBGcmFtZSogZnJhbWUsIHVuc2lnbmVkIGluZGV4KQot
ICAgIDogRnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyKGZyYW1lKQotICAgICwgbV9wbHVnaW5EYXRh
KFdURk1vdmUocGx1Z2luRGF0YSkpCitET01NaW1lVHlwZTo6RE9NTWltZVR5cGUoTmF2aWdhdG9y
JiBuYXZpZ2F0b3IsIGNvbnN0IE1pbWVDbGFzc0luZm8mIGluZm8sIERPTVBsdWdpbiYgZW5hYmxl
ZFBsdWdpbikKKyAgICA6IG1fbmF2aWdhdG9yKG1ha2VXZWFrUHRyKG5hdmlnYXRvcikpCisgICAg
LCBtX21pbWVDbGFzc0luZm8oaW5mbykKKyAgICAsIG1fZW5hYmxlZFBsdWdpbihtYWtlV2Vha1B0
cihlbmFibGVkUGx1Z2luKSkKIHsKLSAgICBWZWN0b3I8TWltZUNsYXNzSW5mbz4gbWltZXM7Ci0g
ICAgVmVjdG9yPHNpemVfdD4gbWltZVBsdWdpbkluZGljZXM7Ci0gICAgbV9wbHVnaW5EYXRhLT5n
ZXRXZWJWaXNpYmxlTWltZXNBbmRQbHVnaW5JbmRpY2VzKG1pbWVzLCBtaW1lUGx1Z2luSW5kaWNl
cyk7Ci0gICAgbV9taW1lQ2xhc3NJbmZvID0gbWltZXNbaW5kZXhdOwotICAgIG1fcGx1Z2luSW5m
byA9IG1fcGx1Z2luRGF0YS0+d2ViVmlzaWJsZVBsdWdpbnMoKVttaW1lUGx1Z2luSW5kaWNlc1tp
bmRleF1dOwogfQogCiBET01NaW1lVHlwZTo6fkRPTU1pbWVUeXBlKCkgPSBkZWZhdWx0OwpAQCAt
NDgsMTMgKzQxLDExIEBAIFN0cmluZyBET01NaW1lVHlwZTo6dHlwZSgpIGNvbnN0CiAKIFN0cmlu
ZyBET01NaW1lVHlwZTo6c3VmZml4ZXMoKSBjb25zdAogewotICAgIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBleHRlbnNpb25zID0gbV9taW1lQ2xhc3NJbmZvLmV4dGVuc2lvbnM7Ci0KICAgICBTdHJp
bmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBleHRlbnNpb25z
LnNpemUoKTsgKytpKSB7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX21pbWVDbGFzc0lu
Zm8uZXh0ZW5zaW9ucy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAoaSkKICAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCcsJyk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGV4dGVuc2lvbnNb
aV0pOworICAgICAgICBidWlsZGVyLmFwcGVuZChtX21pbWVDbGFzc0luZm8uZXh0ZW5zaW9uc1tp
XSk7CiAgICAgfQogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CkBAIC02NiwxMyAr
NTcsNyBAQCBTdHJpbmcgRE9NTWltZVR5cGU6OmRlc2NyaXB0aW9uKCkgY29uc3QKIAogUmVmUHRy
PERPTVBsdWdpbj4gRE9NTWltZVR5cGU6OmVuYWJsZWRQbHVnaW4oKSBjb25zdAogewotICAgIGlm
ICghbV9mcmFtZSB8fCAhbV9mcmFtZS0+cGFnZSgpIHx8ICFtX2ZyYW1lLT5wYWdlKCktPm1haW5G
cmFtZSgpLmxvYWRlcigpLmFyZVBsdWdpbnNFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgVmVjdG9yPE1pbWVDbGFzc0luZm8+IG1pbWVzOwotICAgIFZlY3RvcjxzaXpl
X3Q+IG1pbWVQbHVnaW5JbmRpY2VzOwotICAgIG1fcGx1Z2luRGF0YS0+Z2V0V2ViVmlzaWJsZU1p
bWVzQW5kUGx1Z2luSW5kaWNlcyhtaW1lcywgbWltZVBsdWdpbkluZGljZXMpOwotICAgIHJldHVy
biBET01QbHVnaW46OmNyZWF0ZShtX3BsdWdpbkRhdGEuZ2V0KCksIG1fZnJhbWUsIG1fcGx1Z2lu
SW5mbyk7CisgICAgcmV0dXJuIG1fZW5hYmxlZFBsdWdpbi5nZXQoKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01NaW1lVHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NTWltZVR5cGUuaAkocmV2
aXNpb24gMjYzMDA3KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01NaW1lVHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xOSwxOCArMTksMTkgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNs
dWRlICJGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJQbHVnaW5EYXRhLmgi
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBE
T01QbHVnaW47CitjbGFzcyBOYXZpZ2F0b3I7CiAKLWNsYXNzIERPTU1pbWVUeXBlIDogcHVibGlj
IFJlZkNvdW50ZWQ8RE9NTWltZVR5cGU+LCBwdWJsaWMgRnJhbWVEZXN0cnVjdGlvbk9ic2VydmVy
IHsKK2NsYXNzIERPTU1pbWVUeXBlIDogcHVibGljIFJlZkNvdW50ZWQ8RE9NTWltZVR5cGU+IHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERPTU1pbWVUeXBlPiBjcmVhdGUoUmVmUHRyPFBsdWdp
bkRhdGE+JiYgcGx1Z2luRGF0YSwgRnJhbWUqIGZyYW1lLCB1bnNpZ25lZCBpbmRleCkgeyByZXR1
cm4gYWRvcHRSZWYoKm5ldyBET01NaW1lVHlwZShXVEZNb3ZlKHBsdWdpbkRhdGEpLCBmcmFtZSwg
aW5kZXgpKTsgfQorICAgIHN0YXRpYyBSZWY8RE9NTWltZVR5cGU+IGNyZWF0ZShOYXZpZ2F0b3Im
IG5hdmlnYXRvciwgY29uc3QgTWltZUNsYXNzSW5mbyYgaW5mbywgRE9NUGx1Z2luJiBlbmFibGVk
UGx1Z2luKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IERPTU1pbWVUeXBlKG5hdmlnYXRvciwgaW5m
bywgZW5hYmxlZFBsdWdpbikpOyB9CiAgICAgfkRPTU1pbWVUeXBlKCk7CiAKICAgICBTdHJpbmcg
dHlwZSgpIGNvbnN0OwpAQCAtMzgsMTEgKzM5LDE0IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgZGVz
Y3JpcHRpb24oKSBjb25zdDsKICAgICBSZWZQdHI8RE9NUGx1Z2luPiBlbmFibGVkUGx1Z2luKCkg
Y29uc3Q7CiAKKyAgICBOYXZpZ2F0b3IqIG5hdmlnYXRvcigpIHsgcmV0dXJuIG1fbmF2aWdhdG9y
LmdldCgpOyB9CisKIHByaXZhdGU6Ci0gICAgRE9NTWltZVR5cGUoUmVmUHRyPFBsdWdpbkRhdGE+
JiYsIEZyYW1lKiwgdW5zaWduZWQgaW5kZXgpOworICAgIERPTU1pbWVUeXBlKE5hdmlnYXRvciYs
IGNvbnN0IE1pbWVDbGFzc0luZm8mLCBET01QbHVnaW4mKTsKKworICAgIFdlYWtQdHI8TmF2aWdh
dG9yPiBtX25hdmlnYXRvcjsKICAgICBNaW1lQ2xhc3NJbmZvIG1fbWltZUNsYXNzSW5mbzsKLSAg
ICBSZWZQdHI8UGx1Z2luRGF0YT4gbV9wbHVnaW5EYXRhOwotICAgIFBsdWdpbkluZm8gbV9wbHVn
aW5JbmZvOworICAgIFdlYWtQdHI8RE9NUGx1Z2luPiBtX2VuYWJsZWRQbHVnaW47CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTU1p
bWVUeXBlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTU1pbWVU
eXBlLmlkbAkocmV2aXNpb24gMjYzMDA3KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01N
aW1lVHlwZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTE5LDcgKzE5LDkgQEAKICovCiAKIFsKLSAg
ICBJbnRlcmZhY2VOYW1lPU1pbWVUeXBlCisgICAgSW50ZXJmYWNlTmFtZT1NaW1lVHlwZSwKKyAg
ICBHZW5lcmF0ZUlzUmVhY2hhYmxlPVJlYWNoYWJsZUZyb21OYXZpZ2F0b3IsCisgICAgSW1wbGVt
ZW50YXRpb25MYWNrc1ZUYWJsZQogXSBpbnRlcmZhY2UgRE9NTWltZVR5cGUgewogICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdHlwZTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9N
U3RyaW5nIHN1ZmZpeGVzOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01NaW1lVHlw
ZUFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTU1pbWVU
eXBlQXJyYXkuY3BwCShyZXZpc2lvbiAyNjMwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L0RPTU1pbWVUeXBlQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxMCArMjAsOCBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRPTU1pbWVUeXBlQXJyYXkuaCIKIAotI2lu
Y2x1ZGUgIkRPTVBsdWdpbi5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiUGFnZS5o
IgotI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKKyNpbmNsdWRlICJET01NaW1lVHlwZS5oIgorI2lu
Y2x1ZGUgIk5hdmlnYXRvci5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgogCkBAIC0zMSw4ICsyOSw5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKERPTU1pbWVUeXBl
QXJyYXkpOwogCi1ET01NaW1lVHlwZUFycmF5OjpET01NaW1lVHlwZUFycmF5KE5hdmlnYXRvciYg
bmF2aWdhdG9yKQorRE9NTWltZVR5cGVBcnJheTo6RE9NTWltZVR5cGVBcnJheShOYXZpZ2F0b3Im
IG5hdmlnYXRvciwgVmVjdG9yPFJlZjxET01NaW1lVHlwZT4+JiYgbWltZVR5cGVzKQogICAgIDog
bV9uYXZpZ2F0b3IobWFrZVdlYWtQdHIobmF2aWdhdG9yKSkKKyAgICAsIG1fbWltZVR5cGVzKG1p
bWVUeXBlcykKIHsKIH0KIApAQCAtNDAsNzYgKzM5LDMyIEBAIERPTU1pbWVUeXBlQXJyYXk6On5E
T01NaW1lVHlwZUFycmF5KCkgPSAKIAogdW5zaWduZWQgRE9NTWltZVR5cGVBcnJheTo6bGVuZ3Ro
KCkgY29uc3QKIHsKLSAgICBQbHVnaW5EYXRhKiBkYXRhID0gZ2V0UGx1Z2luRGF0YSgpOwotICAg
IGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBWZWN0b3I8TWltZUNsYXNzSW5m
bz4gbWltZXM7Ci0gICAgVmVjdG9yPHNpemVfdD4gbWltZVBsdWdpbkluZGljZXM7Ci0gICAgZGF0
YS0+Z2V0V2ViVmlzaWJsZU1pbWVzQW5kUGx1Z2luSW5kaWNlcyhtaW1lcywgbWltZVBsdWdpbklu
ZGljZXMpOwotICAgIHJldHVybiBtaW1lcy5zaXplKCk7CisgICAgcmV0dXJuIG1fbWltZVR5cGVz
LnNpemUoKTsKIH0KIAogUmVmUHRyPERPTU1pbWVUeXBlPiBET01NaW1lVHlwZUFycmF5OjppdGVt
KHVuc2lnbmVkIGluZGV4KQogewotICAgIFBsdWdpbkRhdGEqIGRhdGEgPSBnZXRQbHVnaW5EYXRh
KCk7Ci0gICAgaWYgKCFkYXRhKQorICAgIGlmIChpbmRleCA+PSBtX21pbWVUeXBlcy5zaXplKCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgVmVjdG9yPE1pbWVDbGFzc0luZm8+IG1p
bWVzOwotICAgIFZlY3RvcjxzaXplX3Q+IG1pbWVQbHVnaW5JbmRpY2VzOwotICAgIGRhdGEtPmdl
dFdlYlZpc2libGVNaW1lc0FuZFBsdWdpbkluZGljZXMobWltZXMsIG1pbWVQbHVnaW5JbmRpY2Vz
KTsKLQotICAgIGlmIChpbmRleCA+PSBtaW1lcy5zaXplKCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIHJldHVybiBET01NaW1lVHlwZTo6Y3JlYXRlKGRhdGEsIGZyYW1lKCksIGluZGV4
KTsKKyAgICByZXR1cm4gbV9taW1lVHlwZXNbaW5kZXhdLnB0cigpOwogfQogCiBSZWZQdHI8RE9N
TWltZVR5cGU+IERPTU1pbWVUeXBlQXJyYXk6Om5hbWVkSXRlbShjb25zdCBBdG9tU3RyaW5nJiBw
cm9wZXJ0eU5hbWUpCiB7Ci0gICAgUGx1Z2luRGF0YSogZGF0YSA9IGdldFBsdWdpbkRhdGEoKTsK
LSAgICBpZiAoIWRhdGEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgVmVjdG9yPE1p
bWVDbGFzc0luZm8+IG1pbWVzOwotICAgIFZlY3RvcjxzaXplX3Q+IG1pbWVQbHVnaW5JbmRpY2Vz
OwotICAgIGRhdGEtPmdldFdlYlZpc2libGVNaW1lc0FuZFBsdWdpbkluZGljZXMobWltZXMsIG1p
bWVQbHVnaW5JbmRpY2VzKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWltZXMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1pbWVzW2ldLnR5cGUgPT0gcHJvcGVydHlOYW1lKQot
ICAgICAgICAgICAgcmV0dXJuIERPTU1pbWVUeXBlOjpjcmVhdGUoZGF0YSwgZnJhbWUoKSwgaSk7
CisgICAgZm9yIChhdXRvJiBtaW1lVHlwZSA6IG1fbWltZVR5cGVzKSB7CisgICAgICAgIGlmICht
aW1lVHlwZS0+dHlwZSgpID09IHByb3BlcnR5TmFtZSkKKyAgICAgICAgICAgIHJldHVybiBtaW1l
VHlwZS5wdHIoKTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIFZlY3RvcjxBdG9t
U3RyaW5nPiBET01NaW1lVHlwZUFycmF5OjpzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkKIHsKLSAg
ICBQbHVnaW5EYXRhKiBkYXRhID0gZ2V0UGx1Z2luRGF0YSgpOwotICAgIGlmICghZGF0YSkKLSAg
ICAgICAgcmV0dXJuIHsgfTsKLQotICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiBtaW1lczsKLSAg
ICBWZWN0b3I8c2l6ZV90PiBtaW1lUGx1Z2luSW5kaWNlczsKLSAgICBkYXRhLT5nZXRXZWJWaXNp
YmxlTWltZXNBbmRQbHVnaW5JbmRpY2VzKG1pbWVzLCBtaW1lUGx1Z2luSW5kaWNlcyk7Ci0KICAg
ICBWZWN0b3I8QXRvbVN0cmluZz4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KG1pbWVzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBpbmZvIDogbWltZXMpCi0gICAg
ICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShpbmZvLnR5cGUpKTsKLQorICAgIHJl
c3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fbWltZVR5cGVzLnNpemUoKSk7CisgICAgZm9y
IChhdXRvJiBtaW1lVHlwZSA6IG1fbWltZVR5cGVzKQorICAgICAgICByZXN1bHQudW5jaGVja2Vk
QXBwZW5kKG1pbWVUeXBlLT50eXBlKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVBsdWdp
bkRhdGEqIERPTU1pbWVUeXBlQXJyYXk6OmdldFBsdWdpbkRhdGEoKSBjb25zdAotewotICAgIGF1
dG8qIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIGF1dG8qIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwotICAgIGlmICgh
cGFnZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gJnBhZ2UtPnBsdWdp
bkRhdGEoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9ET01NaW1lVHlwZUFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9ET01NaW1lVHlwZUFycmF5LmgJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvRE9NTWltZVR5cGVBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MCwzNCArMjAsMzUgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJET01NaW1lVHlwZS5o
IgotI2luY2x1ZGUgIk5hdmlnYXRvci5oIgogI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgor
I2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIFBsdWdpbkRhdGE7CitjbGFzcyBET01NaW1lVHlwZTsKK2NsYXNz
IE5hdmlnYXRvcjsKIAogY2xhc3MgRE9NTWltZVR5cGVBcnJheSBmaW5hbCA6IHB1YmxpYyBTY3Jp
cHRXcmFwcGFibGUsIHB1YmxpYyBSZWZDb3VudGVkPERPTU1pbWVUeXBlQXJyYXk+IHsKICAgICBX
VEZfTUFLRV9JU09fQUxMT0NBVEVEKERPTU1pbWVUeXBlQXJyYXkpOwogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8RE9NTWltZVR5cGVBcnJheT4gY3JlYXRlKE5hdmlnYXRvciYgbmF2aWdhdG9yKSB7
IHJldHVybiBhZG9wdFJlZigqbmV3IERPTU1pbWVUeXBlQXJyYXkobmF2aWdhdG9yKSk7IH0KKyAg
ICBzdGF0aWMgUmVmPERPTU1pbWVUeXBlQXJyYXk+IGNyZWF0ZShOYXZpZ2F0b3ImIG5hdmlnYXRv
ciwgVmVjdG9yPFJlZjxET01NaW1lVHlwZT4+JiYgbWltZVR5cGVzID0geyB9KSB7IHJldHVybiBh
ZG9wdFJlZigqbmV3IERPTU1pbWVUeXBlQXJyYXkobmF2aWdhdG9yLCBXVEZNb3ZlKG1pbWVUeXBl
cykpKTsgfQogICAgIH5ET01NaW1lVHlwZUFycmF5KCk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGgo
KSBjb25zdDsKICAgICBSZWZQdHI8RE9NTWltZVR5cGU+IGl0ZW0odW5zaWduZWQgaW5kZXgpOwog
ICAgIFJlZlB0cjxET01NaW1lVHlwZT4gbmFtZWRJdGVtKGNvbnN0IEF0b21TdHJpbmcmIHByb3Bl
cnR5TmFtZSk7CiAgICAgVmVjdG9yPEF0b21TdHJpbmc+IHN1cHBvcnRlZFByb3BlcnR5TmFtZXMo
KTsKLSAgICAKKwogICAgIE5hdmlnYXRvciogbmF2aWdhdG9yKCkgeyByZXR1cm4gbV9uYXZpZ2F0
b3IuZ2V0KCk7IH0KIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBET01NaW1lVHlwZUFycmF5KE5h
dmlnYXRvciYpOwotICAgIFBsdWdpbkRhdGEqIGdldFBsdWdpbkRhdGEoKSBjb25zdDsKLSAgICBG
cmFtZSogZnJhbWUoKSBjb25zdCB7IHJldHVybiBtX25hdmlnYXRvciA/IG1fbmF2aWdhdG9yLT5m
cmFtZSgpIDogbnVsbHB0cjsgfQorICAgIGV4cGxpY2l0IERPTU1pbWVUeXBlQXJyYXkoTmF2aWdh
dG9yJiwgVmVjdG9yPFJlZjxET01NaW1lVHlwZT4+JiYgbWltZVR5cGVzKTsKICAgICAKICAgICBX
ZWFrUHRyPE5hdmlnYXRvcj4gbV9uYXZpZ2F0b3I7CisgICAgVmVjdG9yPFJlZjxET01NaW1lVHlw
ZT4+IG1fbWltZVR5cGVzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01QbHVnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2luLmNwcAkocmV2aXNpb24gMjYzMDA3KQorKysgU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9ET01QbHVnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOSw4ICsx
OSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRE9NUGx1Z2luLmgiCiAKLSNp
bmNsdWRlICJQbHVnaW5EYXRhLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJET01N
aW1lVHlwZS5oIgorI2luY2x1ZGUgIk5hdmlnYXRvci5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgogCkBAIC0yOCwx
MSArMjgsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVE
X0lNUEwoRE9NUGx1Z2luKTsKIAotRE9NUGx1Z2luOjpET01QbHVnaW4oUGx1Z2luRGF0YSogcGx1
Z2luRGF0YSwgRnJhbWUqIGZyYW1lLCBQbHVnaW5JbmZvIHBsdWdpbkluZm8pCi0gICAgOiBGcmFt
ZURlc3RydWN0aW9uT2JzZXJ2ZXIoZnJhbWUpCi0gICAgLCBtX3BsdWdpbkRhdGEocGx1Z2luRGF0
YSkKLSAgICAsIG1fcGx1Z2luSW5mbyhXVEZNb3ZlKHBsdWdpbkluZm8pKQoteworRE9NUGx1Z2lu
OjpET01QbHVnaW4oTmF2aWdhdG9yJiBuYXZpZ2F0b3IsIGNvbnN0IFBsdWdpbkluZm8mIHBsdWdp
bkluZm8pCisgICAgOiBtX25hdmlnYXRvcihtYWtlV2Vha1B0cihuYXZpZ2F0b3IpKQorICAgICwg
bV9wbHVnaW5JbmZvKHBsdWdpbkluZm8pCit7CisgICAgbV9taW1lVHlwZXMucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShtX3BsdWdpbkluZm8ubWltZXMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIG1p
bWVUeXBlIDogbV9wbHVnaW5JbmZvLm1pbWVzKQorICAgICAgICBtX21pbWVUeXBlcy51bmNoZWNr
ZWRBcHBlbmQoRE9NTWltZVR5cGU6OmNyZWF0ZShuYXZpZ2F0b3IsIG1pbWVUeXBlLCAqdGhpcykp
OworCisgICAgc3RkOjpzb3J0KG1fbWltZVR5cGVzLmJlZ2luKCksIG1fbWltZVR5cGVzLmVuZCgp
LCBbXShjb25zdCBSZWY8RE9NTWltZVR5cGU+JiBhLCBjb25zdCBSZWY8RE9NTWltZVR5cGU+JiBi
KSB7CisgICAgICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlTGVzc1RoYW4oYS0+dHlwZSgpLCBi
LT50eXBlKCkpOworICAgIH0pOwogfQogCiBET01QbHVnaW46On5ET01QbHVnaW4oKSA9IGRlZmF1
bHQ7CkBAIC01OSw0MCArNjUsMjcgQEAgdW5zaWduZWQgRE9NUGx1Z2luOjpsZW5ndGgoKSBjb25z
dAogCiBSZWZQdHI8RE9NTWltZVR5cGU+IERPTVBsdWdpbjo6aXRlbSh1bnNpZ25lZCBpbmRleCkK
IHsKLSAgICBpZiAoaW5kZXggPj0gbV9wbHVnaW5JbmZvLm1pbWVzLnNpemUoKSB8fCAhbV9mcmFt
ZSB8fCAhbV9mcmFtZS0+cGFnZSgpKQorICAgIGlmIChpbmRleCA+PSBtX21pbWVUeXBlcy5zaXpl
KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgTWltZUNsYXNzSW5mbyBtaW1lID0g
bV9wbHVnaW5JbmZvLm1pbWVzW2luZGV4XTsKLQotICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiBt
aW1lczsKLSAgICBWZWN0b3I8c2l6ZV90PiBtaW1lUGx1Z2luSW5kaWNlczsKLSAgICBWZWN0b3I8
UGx1Z2luSW5mbz4gcGx1Z2lucyA9IG1fcGx1Z2luRGF0YS0+d2ViVmlzaWJsZVBsdWdpbnMoKTsK
LSAgICBtX3BsdWdpbkRhdGEtPmdldFdlYlZpc2libGVNaW1lc0FuZFBsdWdpbkluZGljZXMobWlt
ZXMsIG1pbWVQbHVnaW5JbmRpY2VzKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWlt
ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1pbWVzW2ldID09IG1pbWUgJiYgcGx1Z2lu
c1ttaW1lUGx1Z2luSW5kaWNlc1tpXV0gPT0gbV9wbHVnaW5JbmZvKQotICAgICAgICAgICAgcmV0
dXJuIERPTU1pbWVUeXBlOjpjcmVhdGUobV9wbHVnaW5EYXRhLmdldCgpLCBtX2ZyYW1lLCBpKTsK
LSAgICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG1fbWltZVR5cGVzW2luZGV4
XS5wdHIoKTsKIH0KIAogUmVmUHRyPERPTU1pbWVUeXBlPiBET01QbHVnaW46Om5hbWVkSXRlbShj
b25zdCBBdG9tU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgaWYgKCFtX2ZyYW1lIHx8ICFt
X2ZyYW1lLT5wYWdlKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgVmVjdG9yPE1p
bWVDbGFzc0luZm8+IG1pbWVzOwotICAgIFZlY3RvcjxzaXplX3Q+IG1pbWVQbHVnaW5JbmRpY2Vz
OwotICAgIG1fcGx1Z2luRGF0YS0+Z2V0V2ViVmlzaWJsZU1pbWVzQW5kUGx1Z2luSW5kaWNlcyht
aW1lcywgbWltZVBsdWdpbkluZGljZXMpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
aW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAgaWYgKG1pbWVzW2ldLnR5cGUgPT0gcHJvcGVydHlO
YW1lKQotICAgICAgICAgICAgcmV0dXJuIERPTU1pbWVUeXBlOjpjcmVhdGUobV9wbHVnaW5EYXRh
LmdldCgpLCBtX2ZyYW1lLCBpKTsKKyAgICBmb3IgKGF1dG8mIG1pbWVUeXBlIDogbV9taW1lVHlw
ZXMpIHsKKyAgICAgICAgaWYgKG1pbWVUeXBlLT50eXBlKCkgPT0gcHJvcGVydHlOYW1lKQorICAg
ICAgICAgICAgcmV0dXJuIG1pbWVUeXBlLnB0cigpOworICAgIH0KICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAogVmVjdG9yPEF0b21TdHJpbmc+IERPTVBsdWdpbjo6c3VwcG9ydGVkUHJvcGVydHlO
YW1lcygpCiB7Ci0gICAgLy8gRklYTUU6IFNob3VsZCBiZSBpbXBsZW1lbnRlZC4KLSAgICByZXR1
cm4gVmVjdG9yPEF0b21TdHJpbmc+KCk7CisgICAgVmVjdG9yPEF0b21TdHJpbmc+IHJlc3VsdDsK
KyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX21pbWVUeXBlcy5zaXplKCkpOwor
ICAgIGZvciAoYXV0byYgbWltZVR5cGUgOiBtX21pbWVUeXBlcykKKyAgICAgICAgcmVzdWx0LnVu
Y2hlY2tlZEFwcGVuZChtaW1lVHlwZS0+dHlwZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RP
TVBsdWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2lu
LmgJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2lu
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5LDIxICsxOSwyMSBAQAogCiAjcHJhZ21hIG9uY2UKIAot
I2luY2x1ZGUgIkZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlci5oIgotI2luY2x1ZGUgIkRPTU1pbWVU
eXBlLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgogI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJs
ZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgUGx1Z2luOwotY2xhc3MgUGx1Z2luRGF0YTsKK2NsYXNzIERPTU1pbWVUeXBlOworY2xhc3Mg
TmF2aWdhdG9yOwogCi1jbGFzcyBET01QbHVnaW4gZmluYWwgOiBwdWJsaWMgU2NyaXB0V3JhcHBh
YmxlLCBwdWJsaWMgUmVmQ291bnRlZDxET01QbHVnaW4+LCBwdWJsaWMgRnJhbWVEZXN0cnVjdGlv
bk9ic2VydmVyIHsKK2NsYXNzIERPTVBsdWdpbiBmaW5hbCA6IHB1YmxpYyBTY3JpcHRXcmFwcGFi
bGUsIHB1YmxpYyBSZWZDb3VudGVkPERPTVBsdWdpbj4sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxE
T01QbHVnaW4+IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKERPTVBsdWdpbik7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxET01QbHVnaW4+IGNyZWF0ZShQbHVnaW5EYXRhKiBwbHVnaW5E
YXRhLCBGcmFtZSogZnJhbWUsIFBsdWdpbkluZm8gcGx1Z2luSW5mbykgeyByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBET01QbHVnaW4ocGx1Z2luRGF0YSwgZnJhbWUsIFdURk1vdmUocGx1Z2luSW5mbykp
KTsgfQorICAgIHN0YXRpYyBSZWY8RE9NUGx1Z2luPiBjcmVhdGUoTmF2aWdhdG9yJiBuYXZpZ2F0
b3IsIGNvbnN0IFBsdWdpbkluZm8mIHBsdWdpbkluZm8pIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RE9NUGx1Z2luKG5hdmlnYXRvciwgcGx1Z2luSW5mbykpOyB9CiAgICAgfkRPTVBsdWdpbigpOwog
CiAgICAgU3RyaW5nIG5hbWUoKSBjb25zdDsKQEAgLTQ2LDEwICs0NiwxNiBAQCBwdWJsaWM6CiAg
ICAgUmVmUHRyPERPTU1pbWVUeXBlPiBuYW1lZEl0ZW0oY29uc3QgQXRvbVN0cmluZyYgcHJvcGVy
dHlOYW1lKTsKICAgICBWZWN0b3I8QXRvbVN0cmluZz4gc3VwcG9ydGVkUHJvcGVydHlOYW1lcygp
OwogCisgICAgY29uc3QgVmVjdG9yPFJlZjxET01NaW1lVHlwZT4+JiBtaW1lVHlwZXMoKSBjb25z
dCB7IHJldHVybiBtX21pbWVUeXBlczsgfQorCisgICAgTmF2aWdhdG9yKiBuYXZpZ2F0b3IoKSB7
IHJldHVybiBtX25hdmlnYXRvci5nZXQoKTsgfQorCiBwcml2YXRlOgotICAgIERPTVBsdWdpbihQ
bHVnaW5EYXRhKiwgRnJhbWUqLCBQbHVnaW5JbmZvKTsKLSAgICBSZWZQdHI8UGx1Z2luRGF0YT4g
bV9wbHVnaW5EYXRhOworICAgIERPTVBsdWdpbihOYXZpZ2F0b3ImLCBjb25zdCBQbHVnaW5JbmZv
Jik7CisKKyAgICBXZWFrUHRyPE5hdmlnYXRvcj4gbV9uYXZpZ2F0b3I7CiAgICAgUGx1Z2luSW5m
byBtX3BsdWdpbkluZm87CisgICAgVmVjdG9yPFJlZjxET01NaW1lVHlwZT4+IG1fbWltZVR5cGVz
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1
Z2lucy9ET01QbHVnaW4uaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
RE9NUGx1Z2luLmlkbAkocmV2aXNpb24gMjYzMDA3KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy9ET01QbHVnaW4uaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw2ICsyMCw4IEBACiAKIFsKICAg
ICBJbnRlcmZhY2VOYW1lPVBsdWdpbiwKKyAgICBHZW5lcmF0ZUlzUmVhY2hhYmxlPVJlYWNoYWJs
ZUZyb21OYXZpZ2F0b3IsCisgICAgSW1wbGVtZW50YXRpb25MYWNrc1ZUYWJsZSwKICAgICBMZWdh
Y3lVbmVudW1lcmFibGVOYW1lZFByb3BlcnRpZXMKIF0gaW50ZXJmYWNlIERPTVBsdWdpbiB7CiAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBuYW1lOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9ET01QbHVnaW5BcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9ET01QbHVnaW5BcnJheS5jcHAJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2luQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Miw4ICsyMiw4IEBACiAKICNpbmNsdWRlICJET01QbHVnaW4uaCIKICNpbmNsdWRlICJGcmFtZS5o
IgorI2luY2x1ZGUgIk5hdmlnYXRvci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQ
bHVnaW5EYXRhLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiAKQEAgLTMxLDggKzMxLDEwIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKERPTVBsdWdpbkFycmF5KTsK
IAotRE9NUGx1Z2luQXJyYXk6OkRPTVBsdWdpbkFycmF5KE5hdmlnYXRvciYgbmF2aWdhdG9yKQor
RE9NUGx1Z2luQXJyYXk6OkRPTVBsdWdpbkFycmF5KE5hdmlnYXRvciYgbmF2aWdhdG9yLCBWZWN0
b3I8UmVmPERPTVBsdWdpbj4+JiYgcHVibGljbHlWaXNpYmxlUGx1Z2lucywgVmVjdG9yPFJlZjxE
T01QbHVnaW4+PiYmIGFkZGl0aW9uYWxXZWJWaXNpYmlsZVBsdWdpbnMpCiAgICAgOiBtX25hdmln
YXRvcihtYWtlV2Vha1B0cihuYXZpZ2F0b3IpKQorICAgICwgbV9wdWJsaWNseVZpc2libGVQbHVn
aW5zKHB1YmxpY2x5VmlzaWJsZVBsdWdpbnMpCisgICAgLCBtX2FkZGl0aW9uYWxXZWJWaXNpYmls
ZVBsdWdpbnMoYWRkaXRpb25hbFdlYlZpc2liaWxlUGx1Z2lucykKIHsKIH0KIApAQCAtNDAsNTEg
KzQyLDM3IEBAIERPTVBsdWdpbkFycmF5Ojp+RE9NUGx1Z2luQXJyYXkoKSA9IGRlZmEKIAogdW5z
aWduZWQgRE9NUGx1Z2luQXJyYXk6Omxlbmd0aCgpIGNvbnN0CiB7Ci0gICAgUGx1Z2luRGF0YSog
ZGF0YSA9IHBsdWdpbkRhdGEoKTsKLSAgICBpZiAoIWRhdGEpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgcmV0dXJuIGRhdGEtPnB1YmxpY2x5VmlzaWJsZVBsdWdpbnMoKS5zaXplKCk7CisgICAg
cmV0dXJuIG1fcHVibGljbHlWaXNpYmxlUGx1Z2lucy5zaXplKCk7CiB9CiAKIFJlZlB0cjxET01Q
bHVnaW4+IERPTVBsdWdpbkFycmF5OjppdGVtKHVuc2lnbmVkIGluZGV4KQogewotICAgIFBsdWdp
bkRhdGEqIGRhdGEgPSBwbHVnaW5EYXRhKCk7Ci0gICAgaWYgKCFkYXRhKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZvPiYgcGx1Z2lucyA9IGRh
dGEtPnB1YmxpY2x5VmlzaWJsZVBsdWdpbnMoKTsKLSAgICBpZiAoaW5kZXggPj0gcGx1Z2lucy5z
aXplKCkpCisgICAgaWYgKGluZGV4ID49IG1fcHVibGljbHlWaXNpYmxlUGx1Z2lucy5zaXplKCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBET01QbHVnaW46OmNyZWF0ZShk
YXRhLCBmcmFtZSgpLCBwbHVnaW5zW2luZGV4XSk7CisgICAgcmV0dXJuIG1fcHVibGljbHlWaXNp
YmxlUGx1Z2luc1tpbmRleF0ucHRyKCk7CiB9CiAKIFJlZlB0cjxET01QbHVnaW4+IERPTVBsdWdp
bkFycmF5OjpuYW1lZEl0ZW0oY29uc3QgQXRvbVN0cmluZyYgcHJvcGVydHlOYW1lKQogewotICAg
IFBsdWdpbkRhdGEqIGRhdGEgPSBwbHVnaW5EYXRhKCk7Ci0gICAgaWYgKCFkYXRhKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICBmb3IgKGF1dG8mIHBsdWdpbiA6IG1fcHVibGljbHlWaXNp
YmxlUGx1Z2lucykgeworICAgICAgICBpZiAocGx1Z2luLT5uYW1lKCkgPT0gcHJvcGVydHlOYW1l
KQorICAgICAgICAgICAgcmV0dXJuIHBsdWdpbi5wdHIoKTsKKyAgICB9CiAKLSAgICBmb3IgKGF1
dG8mIHBsdWdpbiA6IGRhdGEtPndlYlZpc2libGVQbHVnaW5zKCkpIHsKLSAgICAgICAgaWYgKHBs
dWdpbi5uYW1lID09IHByb3BlcnR5TmFtZSkKLSAgICAgICAgICAgIHJldHVybiBET01QbHVnaW46
OmNyZWF0ZShkYXRhLCBmcmFtZSgpLCBwbHVnaW4pOworICAgIGZvciAoYXV0byYgcGx1Z2luIDog
bV9hZGRpdGlvbmFsV2ViVmlzaWJpbGVQbHVnaW5zKSB7CisgICAgICAgIGlmIChwbHVnaW4tPm5h
bWUoKSA9PSBwcm9wZXJ0eU5hbWUpCisgICAgICAgICAgICByZXR1cm4gcGx1Z2luLnB0cigpOwog
ICAgIH0KKwogICAgIHJldHVybiBudWxscHRyOwogfQogCiBWZWN0b3I8QXRvbVN0cmluZz4gRE9N
UGx1Z2luQXJyYXk6OnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKQogewotICAgIFBsdWdpbkRhdGEq
IGRhdGEgPSBwbHVnaW5EYXRhKCk7Ci0gICAgaWYgKCFkYXRhKQotICAgICAgICByZXR1cm4geyB9
OwotCi0gICAgY29uc3QgYXV0byYgcGx1Z2lucyA9IGRhdGEtPnB1YmxpY2x5VmlzaWJsZVBsdWdp
bnMoKTsKLQogICAgIFZlY3RvcjxBdG9tU3RyaW5nPiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkocGx1Z2lucy5zaXplKCkpOwotICAgIGZvciAoYXV0byYgcGx1Z2lu
IDogcGx1Z2lucykKLSAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChwbHVnaW4ubmFtZSk7
Ci0KKyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3B1YmxpY2x5VmlzaWJsZVBs
dWdpbnMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIHBsdWdpbiA6IG1fcHVibGljbHlWaXNpYmxl
UGx1Z2lucykKKyAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChwbHVnaW4tPm5hbWUoKSk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTAwLDE3ICs4OCw0IEBAIHZvaWQgRE9NUGx1
Z2luQXJyYXk6OnJlZnJlc2goYm9vbCByZWxvYWQKICAgICBQYWdlOjpyZWZyZXNoUGx1Z2lucyhy
ZWxvYWRQYWdlcyk7CiB9CiAKLVBsdWdpbkRhdGEqIERPTVBsdWdpbkFycmF5OjpwbHVnaW5EYXRh
KCkgY29uc3QKLXsKLSAgICBhdXRvKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgaWYgKCFm
cmFtZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBQYWdlKiBwYWdlID0gZnJhbWUt
PnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
cmV0dXJuICZwYWdlLT5wbHVnaW5EYXRhKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2luQXJyYXkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTVBsdWdpbkFycmF5LmgJKHJldmlzaW9uIDI2
MzAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2luQXJyYXkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjAsMjAgKzIwLDIxIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAi
RE9NUGx1Z2luLmgiCi0jaW5jbHVkZSAiRE9NV2luZG93UHJvcGVydHkuaCIKLSNpbmNsdWRlICJO
YXZpZ2F0b3IuaCIKICNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKKyNpbmNsdWRlIDx3dGYv
UmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBQbHVnaW5EYXRhOworY2xhc3MgRE9NUGx1Z2luOworY2xhc3MgTmF2aWdhdG9yOwogCiBj
bGFzcyBET01QbHVnaW5BcnJheSBmaW5hbCA6IHB1YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1Ymxp
YyBSZWZDb3VudGVkPERPTVBsdWdpbkFycmF5PiB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRF
RChET01QbHVnaW5BcnJheSk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxET01QbHVnaW5BcnJh
eT4gY3JlYXRlKE5hdmlnYXRvciYgbmF2aWdhdG9yKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IERP
TVBsdWdpbkFycmF5KG5hdmlnYXRvcikpOyB9CisgICAgc3RhdGljIFJlZjxET01QbHVnaW5BcnJh
eT4gY3JlYXRlKE5hdmlnYXRvciYgbmF2aWdhdG9yLCBWZWN0b3I8UmVmPERPTVBsdWdpbj4+JiYg
cHVibGljbHlWaXNpYmxlUGx1Z2lucyA9IHsgfSwgVmVjdG9yPFJlZjxET01QbHVnaW4+PiYmIGFk
ZGl0aW9uYWxXZWJWaXNpYmlsZVBsdWdpbnMgPSB7IH0pIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RE9NUGx1Z2luQXJyYXkobmF2aWdhdG9yLCBXVEZNb3ZlKHB1YmxpY2x5VmlzaWJsZVBsdWdpbnMp
LCBXVEZNb3ZlKGFkZGl0aW9uYWxXZWJWaXNpYmlsZVBsdWdpbnMpKSk7IH0KICAgICB+RE9NUGx1
Z2luQXJyYXkoKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwpAQCAtNDIsMTYgKzQz
LDE3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8QXRvbVN0cmluZz4gc3VwcG9ydGVkUHJvcGVydHlO
YW1lcygpOwogCiAgICAgdm9pZCByZWZyZXNoKGJvb2wgcmVsb2FkUGFnZXMpOwotICAgIAotICAg
IE5hdmlnYXRvciogbmF2aWdhdG9yKCkgeyByZXR1cm4gbV9uYXZpZ2F0b3IuZ2V0KCk7IH0KIAor
ICAgIE5hdmlnYXRvciogbmF2aWdhdG9yKCkgeyByZXR1cm4gbV9uYXZpZ2F0b3IuZ2V0KCk7IH0K
KyAgICAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgRE9NUGx1Z2luQXJyYXkoTmF2aWdhdG9yJik7
CisgICAgZXhwbGljaXQgRE9NUGx1Z2luQXJyYXkoTmF2aWdhdG9yJiwgVmVjdG9yPFJlZjxET01Q
bHVnaW4+PiYmLCBWZWN0b3I8UmVmPERPTVBsdWdpbj4+JiYpOwogCi0gICAgUGx1Z2luRGF0YSog
cGx1Z2luRGF0YSgpIGNvbnN0OwogICAgIEZyYW1lKiBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bmF2aWdhdG9yID8gbV9uYXZpZ2F0b3ItPmZyYW1lKCkgOiBudWxscHRyOyB9Ci0gICAgCisKICAg
ICBXZWFrUHRyPE5hdmlnYXRvcj4gbV9uYXZpZ2F0b3I7CisgICAgVmVjdG9yPFJlZjxET01QbHVn
aW4+PiBtX3B1YmxpY2x5VmlzaWJsZVBsdWdpbnM7CisgICAgVmVjdG9yPFJlZjxET01QbHVnaW4+
PiBtX2FkZGl0aW9uYWxXZWJWaXNpYmlsZVBsdWdpbnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5jcHAJKHJldmlzaW9u
IDI2MzAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgi
CiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBsdWdpbkluZm9Qcm92aWRlci5oIgorI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM4LDYg
KzM5LDEyIEBAIFBsdWdpbkRhdGE6OlBsdWdpbkRhdGEoUGFnZSYgcGFnZSkKICAgICBpbml0UGx1
Z2lucygpOwogfQogCit2b2lkIFBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKCkKK3sKKyAgICBBU1NF
UlQobV9wbHVnaW5zLmlzRW1wdHkoKSk7CisgICAgbV9wbHVnaW5zID0gbV9wYWdlLnBsdWdpbklu
Zm9Qcm92aWRlcigpLnBsdWdpbkluZm8obV9wYWdlLCBtX3N1cHBvcnRlZFBsdWdpbklkZW50aWZp
ZXJzKTsKK30KKwogY29uc3QgVmVjdG9yPFBsdWdpbkluZm8+JiBQbHVnaW5EYXRhOjp3ZWJWaXNp
YmxlUGx1Z2lucygpIGNvbnN0CiB7CiAgICAgYXV0byBkb2N1bWVudFVSTCA9IG1fcGFnZS5tYWlu
RnJhbWUoKS5kb2N1bWVudCgpID8gbV9wYWdlLm1haW5GcmFtZSgpLmRvY3VtZW50KCktPnVybCgp
IDogVVJMIHsgfTsKQEAgLTgwLDEyMCArODcsNzcgQEAgc3RhdGljIGJvb2wgc2hvdWxkQmVQdWJs
aWNseVZpc2libGUoY29ucwogICAgICAgICB8fCBpc0J1aWx0SW5QREZQbHVnSW4ocGx1Z2luKTsK
IH0KIAotVmVjdG9yPFBsdWdpbkluZm8+IFBsdWdpbkRhdGE6OnB1YmxpY2x5VmlzaWJsZVBsdWdp
bnMoKSBjb25zdAorc3RkOjpwYWlyPFZlY3RvcjxQbHVnaW5JbmZvPiwgVmVjdG9yPFBsdWdpbklu
Zm8+PiBQbHVnaW5EYXRhOjpwdWJsaWNseVZpc2libGVQbHVnaW5zQW5kQWRkaXRpb25hbFdlYlZp
c2libGVQbHVnaW5zKCkgY29uc3QKIHsKICAgICBhdXRvIHBsdWdpbnMgPSB3ZWJWaXNpYmxlUGx1
Z2lucygpOwogCiAgICAgaWYgKG1fcGFnZS5zaG93QWxsUGx1Z2lucygpKQotICAgICAgICByZXR1
cm4gcGx1Z2luczsKLSAgICAKLSAgICBwbHVnaW5zLnJlbW92ZUFsbE1hdGNoaW5nKFtdKGF1dG8m
IHBsdWdpbikgewotICAgICAgICByZXR1cm4gIXNob3VsZEJlUHVibGljbHlWaXNpYmxlKHBsdWdp
bik7CisgICAgICAgIHJldHVybiB7IHBsdWdpbnMsIHsgfSB9OworCisgICAgVmVjdG9yPFBsdWdp
bkluZm8+IGFkZGl0aW9uYWxXZWJWaXNpYmxlUGx1Z2luczsKKyAgICBwbHVnaW5zLnJlbW92ZUFs
bE1hdGNoaW5nKFsmXShhdXRvJiBwbHVnaW4pIHsKKyAgICAgICAgaWYgKCFzaG91bGRCZVB1Ymxp
Y2x5VmlzaWJsZShwbHVnaW4pKSB7CisgICAgICAgICAgICBhZGRpdGlvbmFsV2ViVmlzaWJsZVBs
dWdpbnMuYXBwZW5kKHBsdWdpbik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSk7CiAKICAgICBzdGQ6OnNvcnQocGx1Z2lu
cy5iZWdpbigpLCBwbHVnaW5zLmVuZCgpLCBbXShjb25zdCBQbHVnaW5JbmZvJiBhLCBjb25zdCBQ
bHVnaW5JbmZvJiBiKSB7CiAgICAgICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlTGVzc1RoYW4o
YS5uYW1lLCBiLm5hbWUpOwogICAgIH0pOwotICAgIHJldHVybiBwbHVnaW5zOworICAgIHJldHVy
biB7IHBsdWdpbnMsIGFkZGl0aW9uYWxXZWJWaXNpYmxlUGx1Z2lucyB9OwogfQogCi12b2lkIFBs
dWdpbkRhdGE6OmdldFdlYlZpc2libGVNaW1lc0FuZFBsdWdpbkluZGljZXMoVmVjdG9yPE1pbWVD
bGFzc0luZm8+JiBtaW1lcywgVmVjdG9yPHNpemVfdD4mIG1pbWVQbHVnaW5JbmRpY2VzKSBjb25z
dAorVmVjdG9yPE1pbWVDbGFzc0luZm8+IFBsdWdpbkRhdGE6OndlYlZpc2libGVNaW1lVHlwZXMo
KSBjb25zdAogewotICAgIGdldE1pbWVzQW5kUGx1Z2luSW5kaWNpZXNGb3JQbHVnaW5zKHdlYlZp
c2libGVQbHVnaW5zKCksIG1pbWVzLCBtaW1lUGx1Z2luSW5kaWNlcyk7Ci19Ci0KLXZvaWQgUGx1
Z2luRGF0YTo6Z2V0TWltZXNBbmRQbHVnaW5JbmRpY2VzKFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiYg
bWltZXMsIFZlY3RvcjxzaXplX3Q+JiBtaW1lUGx1Z2luSW5kaWNlcykgY29uc3QKLXsKLSAgICBn
ZXRNaW1lc0FuZFBsdWdpbkluZGljaWVzRm9yUGx1Z2lucyhwbHVnaW5zKCksIG1pbWVzLCBtaW1l
UGx1Z2luSW5kaWNlcyk7CisgICAgVmVjdG9yPE1pbWVDbGFzc0luZm8+IHJlc3VsdDsKKyAgICBm
b3IgKGF1dG8mIHBsdWdpbiA6IHdlYlZpc2libGVQbHVnaW5zKCkpIHsKKyAgICAgICAgZm9yIChh
dXRvJiBtaW1lIDogcGx1Z2luLm1pbWVzKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtaW1l
KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBQbHVnaW5EYXRhOjpnZXRN
aW1lc0FuZFBsdWdpbkluZGljaWVzRm9yUGx1Z2lucyhjb25zdCBWZWN0b3I8UGx1Z2luSW5mbz4m
IHBsdWdpbnMsIFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiYgbWltZXMsIFZlY3RvcjxzaXplX3Q+JiBt
aW1lUGx1Z2luSW5kaWNlcykgY29uc3QKK3N0YXRpYyBib29sIHN1cHBvcnRzTWltZVR5cGVGb3JQ
bHVnaW5zKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFBsdWdpbkRhdGE6OkFsbG93ZWRQ
bHVnaW5UeXBlcyBhbGxvd2VkUGx1Z2luVHlwZXMsIGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZvPiYg
cGx1Z2lucykKIHsKLSAgICBBU1NFUlRfQVJHKG1pbWVzLCBtaW1lcy5pc0VtcHR5KCkpOwotICAg
IEFTU0VSVF9BUkcobWltZVBsdWdpbkluZGljZXMsIG1pbWVQbHVnaW5JbmRpY2VzLmlzRW1wdHko
KSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGx1Z2lucy5zaXplKCk7ICsraSkg
ewotICAgICAgICBjb25zdCBQbHVnaW5JbmZvJiBwbHVnaW4gPSBwbHVnaW5zW2ldOworICAgIGZv
ciAoYXV0byBwbHVnaW4gOiBwbHVnaW5zKSB7CiAgICAgICAgIGZvciAoYXV0byYgbWltZSA6IHBs
dWdpbi5taW1lcykgewotICAgICAgICAgICAgbWltZXMuYXBwZW5kKG1pbWUpOwotICAgICAgICAg
ICAgbWltZVBsdWdpbkluZGljZXMuYXBwZW5kKGkpOworICAgICAgICAgICAgaWYgKG1pbWUudHlw
ZSA9PSBtaW1lVHlwZSAmJiAoYWxsb3dlZFBsdWdpblR5cGVzID09IFBsdWdpbkRhdGE6OkFsbFBs
dWdpbnMgfHwgcGx1Z2luLmlzQXBwbGljYXRpb25QbHVnaW4pKQorICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9v
bCBQbHVnaW5EYXRhOjpzdXBwb3J0c1dlYlZpc2libGVNaW1lVHlwZUZvclVSTChjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBjb25zdCBBbGxvd2VkUGx1Z2luVHlwZXMgYWxsb3dlZFBsdWdpblR5cGVz
LCBjb25zdCBVUkwmIHVybCkgY29uc3QKK2Jvb2wgUGx1Z2luRGF0YTo6c3VwcG9ydHNNaW1lVHlw
ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBBbGxvd2VkUGx1Z2luVHlwZXMgYWxsb3dl
ZFBsdWdpblR5cGVzKSBjb25zdAogewotICAgIGlmICghcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVx
dWFsKG1fY2FjaGVkVmlzaWJsZVBsdWdpbnMucGFnZVVSTCwgdXJsKSkKLSAgICAgICAgbV9jYWNo
ZWRWaXNpYmxlUGx1Z2lucyA9IHsgdXJsLCBtX3BhZ2UucGx1Z2luSW5mb1Byb3ZpZGVyKCkud2Vi
VmlzaWJsZVBsdWdpbkluZm8obV9wYWdlLCB1cmwpIH07Ci0gICAgaWYgKCFtX2NhY2hlZFZpc2li
bGVQbHVnaW5zLnBsdWdpbkxpc3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4g
c3VwcG9ydHNXZWJWaXNpYmxlTWltZVR5cGUobWltZVR5cGUsIGFsbG93ZWRQbHVnaW5UeXBlcywg
Km1fY2FjaGVkVmlzaWJsZVBsdWdpbnMucGx1Z2luTGlzdCk7CisgICAgcmV0dXJuIHN1cHBvcnRz
TWltZVR5cGVGb3JQbHVnaW5zKG1pbWVUeXBlLCBhbGxvd2VkUGx1Z2luVHlwZXMsIHBsdWdpbnMo
KSk7CiB9CiAKIGJvb2wgUGx1Z2luRGF0YTo6c3VwcG9ydHNXZWJWaXNpYmxlTWltZVR5cGUoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgQWxsb3dlZFBsdWdpblR5cGVzIGFsbG93ZWRQbHVn
aW5UeXBlcykgY29uc3QKIHsKLSAgICByZXR1cm4gc3VwcG9ydHNXZWJWaXNpYmxlTWltZVR5cGUo
bWltZVR5cGUsIGFsbG93ZWRQbHVnaW5UeXBlcywgd2ViVmlzaWJsZVBsdWdpbnMoKSk7Ci19Ci0K
LWJvb2wgUGx1Z2luRGF0YTo6c3VwcG9ydHNXZWJWaXNpYmxlTWltZVR5cGUoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgY29uc3QgQWxsb3dlZFBsdWdpblR5cGVzIGFsbG93ZWRQbHVnaW5UeXBlcywg
Y29uc3QgVmVjdG9yPFBsdWdpbkluZm8+JiBwbHVnaW5zKSBjb25zdAotewotICAgIFZlY3RvcjxN
aW1lQ2xhc3NJbmZvPiBtaW1lczsKLSAgICBWZWN0b3I8c2l6ZV90PiBtaW1lUGx1Z2luSW5kaWNl
czsKLSAgICBnZXRNaW1lc0FuZFBsdWdpbkluZGljaWVzRm9yUGx1Z2lucyhwbHVnaW5zLCBtaW1l
cywgbWltZVBsdWdpbkluZGljZXMpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1p
bWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtaW1lc1tpXS50eXBlID09IG1pbWVUeXBl
ICYmIChhbGxvd2VkUGx1Z2luVHlwZXMgPT0gQWxsUGx1Z2lucyB8fCBwbHVnaW5zW21pbWVQbHVn
aW5JbmRpY2VzW2ldXS5pc0FwcGxpY2F0aW9uUGx1Z2luKSkKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHN1cHBvcnRzTWltZVR5
cGVGb3JQbHVnaW5zKG1pbWVUeXBlLCBhbGxvd2VkUGx1Z2luVHlwZXMsIHdlYlZpc2libGVQbHVn
aW5zKCkpOwogfQogCi1ib29sIFBsdWdpbkRhdGE6OmdldFBsdWdpbkluZm9Gb3JXZWJWaXNpYmxl
TWltZVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgUGx1Z2luSW5mbyYgcGx1Z2luSW5mb1Jl
ZikgY29uc3QKK2Jvb2wgUGx1Z2luRGF0YTo6c3VwcG9ydHNXZWJWaXNpYmxlTWltZVR5cGVGb3JV
UkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgQWxsb3dlZFBsdWdpblR5cGVzIGFsbG93
ZWRQbHVnaW5UeXBlcywgY29uc3QgVVJMJiB1cmwpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPE1pbWVD
bGFzc0luZm8+IG1pbWVzOwotICAgIFZlY3RvcjxzaXplX3Q+IG1pbWVQbHVnaW5JbmRpY2VzOwot
ICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZvPiYgcGx1Z2lucyA9IHdlYlZpc2libGVQbHVnaW5z
KCk7Ci0gICAgZ2V0V2ViVmlzaWJsZU1pbWVzQW5kUGx1Z2luSW5kaWNlcyhtaW1lcywgbWltZVBs
dWdpbkluZGljZXMpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1pbWVzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IE1pbWVDbGFzc0luZm8mIGluZm8gPSBtaW1lc1tpXTsK
LQotICAgICAgICBpZiAoaW5mby50eXBlID09IG1pbWVUeXBlKSB7Ci0gICAgICAgICAgICBwbHVn
aW5JbmZvUmVmID0gcGx1Z2luc1ttaW1lUGx1Z2luSW5kaWNlc1tpXV07Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChtX2NhY2hlZFZpc2libGVQbHVnaW5zLnBh
Z2VVUkwsIHVybCkpCisgICAgICAgIG1fY2FjaGVkVmlzaWJsZVBsdWdpbnMgPSB7IHVybCwgbV9w
YWdlLnBsdWdpbkluZm9Qcm92aWRlcigpLndlYlZpc2libGVQbHVnaW5JbmZvKG1fcGFnZSwgdXJs
KSB9OworICAgIGlmICghbV9jYWNoZWRWaXNpYmxlUGx1Z2lucy5wbHVnaW5MaXN0KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHN1cHBvcnRzTWltZVR5cGVGb3JQbHVnaW5zKG1p
bWVUeXBlLCBhbGxvd2VkUGx1Z2luVHlwZXMsICptX2NhY2hlZFZpc2libGVQbHVnaW5zLnBsdWdp
bkxpc3QpOwogfQogCiBTdHJpbmcgUGx1Z2luRGF0YTo6cGx1Z2luRmlsZUZvcldlYlZpc2libGVN
aW1lVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSBjb25zdAogewotICAgIFBsdWdpbkluZm8g
aW5mbzsKLSAgICBpZiAoZ2V0UGx1Z2luSW5mb0ZvcldlYlZpc2libGVNaW1lVHlwZShtaW1lVHlw
ZSwgaW5mbykpCi0gICAgICAgIHJldHVybiBpbmZvLmZpbGU7Ci0gICAgcmV0dXJuIFN0cmluZygp
OwotfQotCi1ib29sIFBsdWdpbkRhdGE6OnN1cHBvcnRzTWltZVR5cGUoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgY29uc3QgQWxsb3dlZFBsdWdpblR5cGVzIGFsbG93ZWRQbHVnaW5UeXBlcykgY29u
c3QKLXsKLSAgICBWZWN0b3I8TWltZUNsYXNzSW5mbz4gbWltZXM7Ci0gICAgVmVjdG9yPHNpemVf
dD4gbWltZVBsdWdpbkluZGljZXM7Ci0gICAgY29uc3QgVmVjdG9yPFBsdWdpbkluZm8+JiBwbHVn
aW5zID0gdGhpcy0+cGx1Z2lucygpOwotICAgIGdldE1pbWVzQW5kUGx1Z2luSW5kaWNlcyhtaW1l
cywgbWltZVBsdWdpbkluZGljZXMpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1p
bWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtaW1lc1tpXS50eXBlID09IG1pbWVUeXBl
ICYmIChhbGxvd2VkUGx1Z2luVHlwZXMgPT0gQWxsUGx1Z2lucyB8fCBwbHVnaW5zW21pbWVQbHVn
aW5JbmRpY2VzW2ldXS5pc0FwcGxpY2F0aW9uUGx1Z2luKSkKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgIGZvciAoYXV0byBwbHVnaW4gOiB3ZWJWaXNpYmxlUGx1Z2lucygpKSB7CisgICAg
ICAgIGZvciAoYXV0byYgbWltZSA6IHBsdWdpbi5taW1lcykgeworICAgICAgICAgICAgaWYgKG1p
bWUudHlwZSA9PSBtaW1lVHlwZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcGx1Z2luLmZpbGU7
CisgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFBsdWdpbkRh
dGE6OmluaXRQbHVnaW5zKCkKLXsKLSAgICBBU1NFUlQobV9wbHVnaW5zLmlzRW1wdHkoKSk7Ci0K
LSAgICBtX3BsdWdpbnMgPSBtX3BhZ2UucGx1Z2luSW5mb1Byb3ZpZGVyKCkucGx1Z2luSW5mbyht
X3BhZ2UsIG1fc3VwcG9ydGVkUGx1Z2luSWRlbnRpZmllcnMpOworICAgIHJldHVybiB7IH07CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
UGx1Z2luRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
RGF0YS5oCShyZXZpc2lvbiAyNjMwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdp
bkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsOCArMjEsNiBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0j
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9VUkwuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0zMiw3ICszMCw2
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBhZ2U7Ci1zdHJ1Y3QgUGx1Z2luSW5m
bzsKIAogZW51bSBjbGFzcyBQbHVnaW5Mb2FkQ2xpZW50UG9saWN5IDogdWludDhfdCB7CiAgICAg
Ly8gTm8gY2xpZW50LXNwZWNpZmljIHBsdWctaW4gbG9hZCBwb2xpY3kgaGFzIGJlZW4gZGVmaW5l
ZC4gVGhlIHBsdWctaW4gc2hvdWxkIGJlIHZpc2libGUgaW4gbmF2aWdhdG9yLnBsdWdpbnMgYW5k
IFdlYktpdCBzaG91bGQgc3luY2hyb25vdXNseQpAQCAtMTAyLDI3ICs5OSwyMyBAQCBwdWJsaWM6
CiAKICAgICBjb25zdCBWZWN0b3I8UGx1Z2luSW5mbz4mIHBsdWdpbnMoKSBjb25zdCB7IHJldHVy
biBtX3BsdWdpbnM7IH0KICAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBWZWN0b3I8UGx1Z2luSW5m
bz4mIHdlYlZpc2libGVQbHVnaW5zKCkgY29uc3Q7Ci0gICAgVmVjdG9yPFBsdWdpbkluZm8+IHB1
YmxpY2x5VmlzaWJsZVBsdWdpbnMoKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdl
dFdlYlZpc2libGVNaW1lc0FuZFBsdWdpbkluZGljZXMoVmVjdG9yPE1pbWVDbGFzc0luZm8+Jiwg
VmVjdG9yPHNpemVfdD4mKSBjb25zdDsKKyAgICBzdGQ6OnBhaXI8VmVjdG9yPFBsdWdpbkluZm8+
LCBWZWN0b3I8UGx1Z2luSW5mbz4+IHB1YmxpY2x5VmlzaWJsZVBsdWdpbnNBbmRBZGRpdGlvbmFs
V2ViVmlzaWJsZVBsdWdpbnMoKSBjb25zdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxN
aW1lQ2xhc3NJbmZvPiB3ZWJWaXNpYmxlTWltZVR5cGVzKCkgY29uc3Q7CiAKICAgICBlbnVtIEFs
bG93ZWRQbHVnaW5UeXBlcyB7CiAgICAgICAgIEFsbFBsdWdpbnMsCiAgICAgICAgIE9ubHlBcHBs
aWNhdGlvblBsdWdpbnMKICAgICB9OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzdXBwb3J0
c1dlYlZpc2libGVNaW1lVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBBbGxvd2Vk
UGx1Z2luVHlwZXMpIGNvbnN0OwotICAgIFN0cmluZyBwbHVnaW5GaWxlRm9yV2ViVmlzaWJsZU1p
bWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0OwotCiAgICAgV0VCQ09SRV9FWFBP
UlQgYm9vbCBzdXBwb3J0c01pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IEFs
bG93ZWRQbHVnaW5UeXBlcykgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzdXBwb3J0
c1dlYlZpc2libGVNaW1lVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBBbGxvd2Vk
UGx1Z2luVHlwZXMpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc3VwcG9ydHNXZWJW
aXNpYmxlTWltZVR5cGVGb3JVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgQWxsb3dl
ZFBsdWdpblR5cGVzLCBjb25zdCBVUkwmKSBjb25zdDsKIAorICAgIFN0cmluZyBwbHVnaW5GaWxl
Rm9yV2ViVmlzaWJsZU1pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0OworCiBw
cml2YXRlOgogICAgIGV4cGxpY2l0IFBsdWdpbkRhdGEoUGFnZSYpOwogICAgIHZvaWQgaW5pdFBs
dWdpbnMoKTsKLSAgICBib29sIGdldFBsdWdpbkluZm9Gb3JXZWJWaXNpYmxlTWltZVR5cGUoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgUGx1Z2luSW5mbyYpIGNvbnN0OwotICAgIHZvaWQgZ2V0TWlt
ZXNBbmRQbHVnaW5JbmRpY2VzKFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiYsIFZlY3RvcjxzaXplX3Q+
JikgY29uc3Q7Ci0gICAgdm9pZCBnZXRNaW1lc0FuZFBsdWdpbkluZGljaWVzRm9yUGx1Z2lucyhj
b25zdCBWZWN0b3I8UGx1Z2luSW5mbz4mLCBWZWN0b3I8TWltZUNsYXNzSW5mbz4mLCBWZWN0b3I8
c2l6ZV90PiYpIGNvbnN0OwotICAgIGJvb2wgc3VwcG9ydHNXZWJWaXNpYmxlTWltZVR5cGUoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgQWxsb3dlZFBsdWdpblR5cGVzLCBjb25zdCBWZWN0
b3I8UGx1Z2luSW5mbz4mKSBjb25zdDsKIAogcHJvdGVjdGVkOgogICAgIFBhZ2UmIG1fcGFnZTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjMwMTApCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA2LTE0ICBTYW0gV2Vpbmln
ICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbV1BUXSBodG1sL3dlYmFwcGFwaXMvc3lz
dGVtLXN0YXRlLWFuZC1jYXBhYmlsaXRpZXMvdGhlLW5hdmlnYXRvci1vYmplY3QvbmF2aWdhdG9y
LXBsdWdpbmFycmF5Lmh0bWwgZmFpbHMgZHVlIHRvIGxhY2sgb2YgY2FjaGluZyBvZiBQbHVnaW4g
b2JqZWN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjEzMTg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6cGx1Z2luU3VwcG9ydHNFeHRlbnNpb24pOgorCiAyMDIwLTA2LTE0ICBD
YXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbU09V
UF0gRGlzYWJsZSBIU1RTIGZvciByZXF1ZXN0cyB3aGVuIGNvb2tpZXMgd2lsbCBiZSBibG9ja2Vk
IGJ5IElUUApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkZyYW1lTG9hZGVyQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCShyZXZpc2lvbiAy
NjMwMDcpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJh
bWVMb2FkZXJDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjU3LDExICsxNjU3LDggQEAg
UmVmUHRyPFdpZGdldD4gV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNyZQogc3RhdGljIGJvb2wgcGx1
Z2luU3VwcG9ydHNFeHRlbnNpb24oY29uc3QgUGx1Z2luRGF0YSYgcGx1Z2luRGF0YSwgY29uc3Qg
U3RyaW5nJiBleHRlbnNpb24pCiB7CiAgICAgQVNTRVJUKGV4dGVuc2lvbi5jb252ZXJ0VG9BU0NJ
SUxvd2VyY2FzZSgpID09IGV4dGVuc2lvbik7Ci0gICAgVmVjdG9yPE1pbWVDbGFzc0luZm8+IG1p
bWVzOwotICAgIFZlY3RvcjxzaXplX3Q+IG1pbWVQbHVnaW5JbmRpY2VzOwotICAgIHBsdWdpbkRh
dGEuZ2V0V2ViVmlzaWJsZU1pbWVzQW5kUGx1Z2luSW5kaWNlcyhtaW1lcywgbWltZVBsdWdpbklu
ZGljZXMpOwotICAgIGZvciAoYXV0byYgbWltZUNsYXNzSW5mbyA6IG1pbWVzKSB7Ci0gICAgICAg
IGlmIChtaW1lQ2xhc3NJbmZvLmV4dGVuc2lvbnMuY29udGFpbnMoZXh0ZW5zaW9uKSkKKyAgICBm
b3IgKGF1dG8mIG1pbWVUeXBlIDogcGx1Z2luRGF0YS53ZWJWaXNpYmxlTWltZVR5cGVzKCkpIHsK
KyAgICAgICAgaWYgKG1pbWVUeXBlLmV4dGVuc2lvbnMuY29udGFpbnMoZXh0ZW5zaW9uKSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401871</attachid>
            <date>2020-06-14 13:06:25 -0700</date>
            <delta_ts>2020-06-14 13:18:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213185-20200614130624.patch</filename>
            <type>text/plain</type>
            <size>49469</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzAxMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBACisyMDIwLTA2LTE0ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbV1BUXSBodG1sL3dlYmFwcGFwaXMv
c3lzdGVtLXN0YXRlLWFuZC1jYXBhYmlsaXRpZXMvdGhlLW5hdmlnYXRvci1vYmplY3QvbmF2aWdh
dG9yLXBsdWdpbmFycmF5Lmh0bWwgZmFpbHMgZHVlIHRvIGxhY2sgb2YgY2FjaGluZyBvZiBQbHVn
aW4gb2JqZWN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjEzMTg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgT3ZlcmhhdWwgd2ViIGV4cG9zZWQgcGx1Z2luIEFQSXM6CisgICAgICAgIC0gQWxsIERPTVBs
dWdpbiBhbmQgRE9NTWltZVR5cGVzIGFyZSBub3cgY3JlYXRlZCB0b2dldGhlciAoYWxvbmcgd2l0
aCB0aGUgRE9NUGx1Z2luQXJyYXkgYW5kIAorICAgICAgICAgIERPTU1pbWVUeXBlQXJyYXkpIG9u
IGZpcnN0IGFjY2VzcyBvZiBlaXRoZXIgbmF2aWdhdG9yLnBsdWdpbnMgb3IgbmF2aWdhdG9yLm1p
bWVUeXBlcy4KKyAgICAgICAgLSBET01QbHVnaW5zIGFyZSBjcmVhdGVkIGFuZCBzdG9yZWQgaW4g
dGhlIERPTVBsdWdpbkFycmF5IChmaXhpbmcgdGhlIGluaXRpYWwgbGFjayBvZiBjYWNoaW5nIGlz
c3VlKQorICAgICAgICAtIERPTU1pbWVUeXBlcyBhcmUgY3JlYXRlZCBhbmQgc3RvcmVkIGluIHRo
ZSBET01NaW1lVHlwZUFycmF5LgorICAgICAgICAtIERPTVBsdWdpbnMgaG9sZCBhIHN0cm9uZyBy
ZWZlcmVuY2UgdG8gdGhlaXIgYXNzb2NpYXRlZCBET01NaW1lVHlwZS4gVGhlIERPTU1pbWVUeXBl
IGhhcworICAgICAgICAgIGEgd2VhayByZWZlcmVuY2UgYmFjayB0byB0aGUgRE9NUGx1Z2luLiBU
aGlzIG1lYW5zIGZvciBhIHNpbmdsZSBleGVjdXRhdGlvbiBjb250ZXh0LCB3ZSBvbmx5CisgICAg
ICAgICAgZXZlciBjcmVhdGUgb25lIERPTVBsdWdpbiAvIERPTU1pbWVUeXBlIGZvciBlYWNoIHVu
ZGVybHlpbmcgcGx1Z2luIC8gbWltZXR5cGUuCisgICAgICAgIC0gVXBkYXRlIEdDIHNvIHRoYXQg
RE9NUGx1Z2luIGFuZCBET01NaW1lVHlwZSAoaW4gYWRkaXRpb24gdG8gRE9NUGx1Z2luQXJyYXkg
YW5kIERPTU1pbWVUeXBlQXJyYXkKKyAgICAgICAgICB3aGljaCB3ZXJlIGFscmVhZHkgZG9pbmcg
dGhpcykgdXNlIG5hdmlnYXRvciByZWFjaGFiaWxpdHkgZm9yIHRoZWlyIGxpZmV0aW1lLiBUaGlz
IGlzIGFsbW9zdAorICAgICAgICAgIGNvcnJlY3QsIGV4Y2VwdCBpZiB3ZSBldmVyIGltcGxlbWVu
dCBET01QbHVnaW5BcnJheS5yZWZyZXNoKGZhbHNlKSB0byBtYXRjaCB0aGUgc3BlYywgaW4gd2hp
Y2gKKyAgICAgICAgICBjYXNlIHlvdSBjb3VsZCBlbmQgdXAgd2l0aCBzb21lIERPTVBsdWdpbnMg
YW5kIERPTU1pbWVUeXBlcyB0aGF0IGFyZSBtYXJrZWQgYXMgcmVhY2hhYmxlIHdoZW4KKyAgICAg
ICAgICB0aGV5IHJlYWxseSBhcmUgbm90LCBidXQgb25seSBwbHVnaW5zIHRoYXQgd2VyZSByZW1v
dmVkLiBUaGlzIHNlZW1zIHNvIHVubGlrZWx5IHRvIG1hdHRlciB0aGF0CisgICAgICAgICAgaW1w
bGVtZW50aW5nIGEgbW9yZSBzdHJpY3QgcmVhY2hhYmlsaXR5IGZ1bmN0aW9uIHNlZW1zIGxpa2Ug
dGhlIHdyb25nIHdheSB0byBnby4KKyAgICAgICAgICAKKyAgICAgICAgW1dPUksgSU4gUFJPR1JF
U1NdCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNl
cy1pbnB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGxvYWRl
ci9TdWJmcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5kUGx1Z2luTUlNRVR5
cGVGcm9tVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmxvZ1BsdWdpblJlcXVlc3QpOgorICAgICAg
ICAqIHBhZ2UvTmF2aWdhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6aW5p
dGlhbGl6ZVBsdWdpbkFuZE1JTUVUeXBlQXJyYXlzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6TmF2aWdhdG9yOjpwbHVnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6bWlt
ZVR5cGVzKToKKyAgICAgICAgKiBwYWdlL05hdmlnYXRvci5oOgorICAgICAgICAqIHBhZ2UvTmF2
aWdhdG9yLmlkbDoKKyAgICAgICAgKiBwYWdlL05hdmlnYXRvclBsdWdpbnMuaWRsOiBBZGRlZC4K
KyAgICAgICAgKiBwbHVnaW5zL0RPTU1pbWVUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRP
TU1pbWVUeXBlOjpET01NaW1lVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpET01NaW1lVHlwZTo6
c3VmZml4ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RE9NTWltZVR5cGU6OmVuYWJsZWRQ
bHVnaW4gY29uc3QpOgorICAgICAgICAqIHBsdWdpbnMvRE9NTWltZVR5cGUuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkRPTU1pbWVUeXBlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NTWlt
ZVR5cGU6Om5hdmlnYXRvcik6CisgICAgICAgICogcGx1Z2lucy9ET01NaW1lVHlwZS5pZGw6Cisg
ICAgICAgICogcGx1Z2lucy9ET01NaW1lVHlwZUFycmF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRPTU1pbWVUeXBlQXJyYXk6OkRPTU1pbWVUeXBlQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6
RE9NTWltZVR5cGVBcnJheTo6bGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTU1p
bWVUeXBlQXJyYXk6Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RE9NTWltZVR5cGVBcnJheTo6
bmFtZWRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTU1pbWVUeXBlQXJyYXk6OnN1cHBvcnRl
ZFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6RE9NTWltZVR5cGVBcnJheTo6Z2V0
UGx1Z2luRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGx1Z2lucy9ET01NaW1lVHlw
ZUFycmF5Lmg6CisgICAgICAgICogcGx1Z2lucy9ET01QbHVnaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NUGx1Z2luOjpET01QbHVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6RE9NUGx1Z2lu
OjppdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBsdWdpbjo6bmFtZWRJdGVtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTVBsdWdpbjo6c3VwcG9ydGVkUHJvcGVydHlOYW1lcyk6CisgICAgICAg
ICogcGx1Z2lucy9ET01QbHVnaW4uaDoKKyAgICAgICAgKiBwbHVnaW5zL0RPTVBsdWdpbi5pZGw6
CisgICAgICAgICogcGx1Z2lucy9ET01QbHVnaW5BcnJheS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpET01QbHVnaW5BcnJheTo6RE9NUGx1Z2luQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6RE9N
UGx1Z2luQXJyYXk6Omxlbmd0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpET01QbHVnaW5B
cnJheTo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpET01QbHVnaW5BcnJheTo6bmFtZWRJdGVt
KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBsdWdpbkFycmF5OjpzdXBwb3J0ZWRQcm9wZXJ0eU5h
bWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBsdWdpbkFycmF5OjpwbHVnaW5EYXRhIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbHVnaW5zL0RPTVBsdWdpbkFycmF5Lmg6CisgICAgICAg
ICogcGx1Z2lucy9QbHVnaW5EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6
OmluaXRQbHVnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OnB1YmxpY2x5Vmlz
aWJsZVBsdWdpbnNBbmRBZGRpdGlvbmFsV2ViVmlzaWJsZVBsdWdpbnMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6d2ViVmlzaWJsZU1pbWVUeXBlcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpzdXBwb3J0c01pbWVUeXBlRm9yUGx1Z2lucyk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5EYXRhOjpzdXBwb3J0c01pbWVUeXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpbkRhdGE6OnN1cHBvcnRzV2ViVmlzaWJsZU1pbWVUeXBlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OnN1cHBvcnRzV2ViVmlzaWJsZU1pbWVUeXBlRm9yVVJM
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OnBsdWdpbkZpbGVGb3JXZWJW
aXNpYmxlTWltZVR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6cHVi
bGljbHlWaXNpYmxlUGx1Z2lucyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5EYXRhOjpnZXRXZWJWaXNpYmxlTWltZXNBbmRQbHVnaW5JbmRpY2VzIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OmdldE1pbWVzQW5kUGx1Z2luSW5k
aWNlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhOjpnZXRN
aW1lc0FuZFBsdWdpbkluZGljaWVzRm9yUGx1Z2lucyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5EYXRhOjpnZXRQbHVnaW5JbmZvRm9yV2ViVmlzaWJsZU1pbWVUeXBl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpbkRhdGEuaDoKKwogMjAy
MC0wNi0xNCAgVGV0c3VoYXJ1IE9oemVraSAgPHRldHN1aGFydS5vaHpla2lAZ21haWwuY29tPgog
CiAgICAgICAgIFdpdGhkcmF3IEZpbGVSZWFkZXJTeW5jIGZyb20gU2VydmljZVdvcmtlcgpJbmRl
eDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05NDUsNiArOTQ1LDcgQEAgc2V0KFdl
YkNvcmVfTk9OX1NWR19JRExfRklMRVMKICAgICBwYWdlL05hdmlnYXRvcklELmlkbAogICAgIHBh
Z2UvTmF2aWdhdG9yTGFuZ3VhZ2UuaWRsCiAgICAgcGFnZS9OYXZpZ2F0b3JPbkxpbmUuaWRsCisg
ICAgcGFnZS9OYXZpZ2F0b3JQbHVnaW5zLmlkbAogICAgIHBhZ2UvTmF2aWdhdG9yU2VydmljZVdv
cmtlci5pZGwKICAgICBwYWdlL05hdmlnYXRvclNoYXJlLmlkbAogICAgIHBhZ2UvUGVyZm9ybWFu
Y2UuaWRsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVs
aXN0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0Lnhj
ZmlsZWxpc3QJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3Vy
Y2VzLWlucHV0LnhjZmlsZWxpc3QJKHdvcmtpbmcgY29weSkKQEAgLTkzMyw2ICs5MzMsNyBAQCAk
KFBST0pFQ1RfRElSKS9wYWdlL05hdmlnYXRvcklELmlkbAogJChQUk9KRUNUX0RJUikvcGFnZS9O
YXZpZ2F0b3JJc0xvZ2dlZEluLmlkbAogJChQUk9KRUNUX0RJUikvcGFnZS9OYXZpZ2F0b3JMYW5n
dWFnZS5pZGwKICQoUFJPSkVDVF9ESVIpL3BhZ2UvTmF2aWdhdG9yT25MaW5lLmlkbAorJChQUk9K
RUNUX0RJUikvcGFnZS9OYXZpZ2F0b3JQbHVnaW5zLmlkbAogJChQUk9KRUNUX0RJUikvcGFnZS9O
YXZpZ2F0b3JTZXJ2aWNlV29ya2VyLmlkbAogJChQUk9KRUNUX0RJUikvcGFnZS9OYXZpZ2F0b3JT
aGFyZS5pZGwKICQoUFJPSkVDVF9ESVIpL3BhZ2UvUGVyZm9ybWFuY2UuaWRsCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAkocmV2aXNp
b24gMjYzMDA3KQorKysgU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmls
ZWxpc3QJKHdvcmtpbmcgY29weSkKQEAgLTExNTQsNiArMTE1NCw4IEBAICQoQlVJTFRfUFJPRFVD
VFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWIKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJDb3JlL0pTTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmgKICQoQlVJTFRfUFJPRFVD
VFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTTmF2aWdhdG9yT25MaW5lLmNwcAogJChC
VUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNOYXZpZ2F0b3JPbkxp
bmUuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNOYXZp
Z2F0b3JQbHVnaW5zLmNwcAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvSlNOYXZpZ2F0b3JQbHVnaW5zLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJDb3JlL0pTTmF2aWdhdG9yU2VydmljZVdvcmtlci5jcHAKICQoQlVJTFRfUFJP
RFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTTmF2aWdhdG9yU2VydmljZVdvcmtl
ci5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU05hdmln
YXRvclNoYXJlLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lv
biAyNjMwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5n
IGNvcHkpCkBAIC05NTIsNiArOTUyLDcgQEAgSlNfQklORElOR19JRExTID0gXAogICAgICQoV2Vi
Q29yZSkvcGFnZS9OYXZpZ2F0b3JJc0xvZ2dlZEluLmlkbCBcCiAgICAgJChXZWJDb3JlKS9wYWdl
L05hdmlnYXRvckxhbmd1YWdlLmlkbCBcCiAgICAgJChXZWJDb3JlKS9wYWdlL05hdmlnYXRvck9u
TGluZS5pZGwgXAorICAgICQoV2ViQ29yZSkvcGFnZS9OYXZpZ2F0b3JQbHVnaW5zLmlkbCBcCiAg
ICAgJChXZWJDb3JlKS9wYWdlL05hdmlnYXRvclNlcnZpY2VXb3JrZXIuaWRsIFwKICAgICAkKFdl
YkNvcmUpL3BhZ2UvTmF2aWdhdG9yU2hhcmUuaWRsIFwKICAgICAkKFdlYkNvcmUpL3BhZ2UvUGVy
Zm9ybWFuY2UuaWRsIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtOTg4
Nyw2ICs5ODg3LDcgQEAKIAkJN0FGOUIyMDkxOENGQjVGMjAwQzY0QkVGIC8qIEpTVlRUUmVnaW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVlRUUmVnaW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjlCMjBBMThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZU
VFJlZ2lvbkxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNW
VFRSZWdpb25MaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FGOUIyMEIx
OENGQjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU1ZUVFJlZ2lvbkxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJN0MwMTdDM0QyNDk2OUYxMzAwREMwQzAyIC8qIE5hdmlnYXRvclBsdWdpbnMuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IE5hdmlnYXRvclBsdWdpbnMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QzAyOUM2RDI0OTNDOEY4MDAyNjgyMDQgLyogQ29sb3JUeXBlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b2xvclR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMENFRjI4MUU0QTU0
MkMwMDhERUI4MCAvKiBKU0RPTUNvbnN0cnVjdG9yQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0RPTUNvbnN0cnVjdG9yQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3QzBDRUYyOTFFNEE1NEQzMDA4REVCODAgLyogSlNET01Db25zdHJ1Y3Rvcldp
dGhEb2N1bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUNvbnN0
cnVjdG9yV2l0aERvY3VtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTEx
Miw2ICsyMTExMyw3IEBACiAJCQkJNkI1MDdBMjMyMzRCRjM0MTAwQkU3QzYyIC8qIE5hdmlnYXRv
cklzTG9nZ2VkSW4uaWRsICovLAogCQkJCTdDNUJFQTNCMUU5RUU3NzEwMENDNTE3QiAvKiBOYXZp
Z2F0b3JMYW5ndWFnZS5pZGwgKi8sCiAJCQkJN0M1QkVBM0MxRTlFRTc3MTAwQ0M1MTdCIC8qIE5h
dmlnYXRvck9uTGluZS5pZGwgKi8sCisJCQkJN0MwMTdDM0QyNDk2OUYxMzAwREMwQzAyIC8qIE5h
dmlnYXRvclBsdWdpbnMuaWRsICovLAogCQkJCTUxODJDMjRCMUYzMTNBRTAwMDU5QkE3QyAvKiBO
YXZpZ2F0b3JTZXJ2aWNlV29ya2VyLmlkbCAqLywKIAkJCQkxREM1NTNGRDIxMUJBMTJBMDA0Qjc4
MEUgLyogTmF2aWdhdG9yU2hhcmUuaWRsICovLAogCQkJCTAwMTQ2Mjg4MTAzQ0QxREUwMDBCMjBE
QiAvKiBPcmlnaW5BY2Nlc3NFbnRyeS5jcHAgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvU3ViZnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9TdWJmcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MywzMCArMTYz
LDI1IEBAIGJvb2wgRnJhbWVMb2FkZXI6OlN1YmZyYW1lTG9hZGVyOjpyZXF1ZXMKICAgICByZXR1
cm4gbG9hZFBsdWdpbihvd25lckVsZW1lbnQsIHVybCwgbWltZVR5cGUsIHBhcmFtTmFtZXMsIHBh
cmFtVmFsdWVzLCB1c2VGYWxsYmFjayk7CiB9CiAKLXN0YXRpYyBTdHJpbmcgZmluZFBsdWdpbk1J
TUVUeXBlRnJvbVVSTChQYWdlKiBwYWdlLCBjb25zdCBTdHJpbmcmIHVybCkKK3N0YXRpYyBTdHJp
bmcgZmluZFBsdWdpbk1JTUVUeXBlRnJvbVVSTChQYWdlJiBwYWdlLCBjb25zdCBTdHJpbmdWaWV3
JiB1cmwpCiB7CiAgICAgaWYgKCF1cmwpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKIAogICAgIHNpemVfdCBkb3RJbmRleCA9IHVybC5yZXZlcnNlRmluZCgn
LicpOwogICAgIGlmIChkb3RJbmRleCA9PSBub3RGb3VuZCkKLSAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgU3RyaW5nIGV4dGVuc2lvbiA9IHVybC5z
dWJzdHJpbmcoZG90SW5kZXggKyAxKTsKKyAgICBhdXRvIGV4dGVuc2lvbiA9IHVybC5zdWJzdHJp
bmcoZG90SW5kZXggKyAxKTsKIAotICAgIGNvbnN0IFBsdWdpbkRhdGEmIHBsdWdpbkRhdGEgPSBw
YWdlLT5wbHVnaW5EYXRhKCk7Ci0KLSAgICBWZWN0b3I8TWltZUNsYXNzSW5mbz4gbWltZXM7Ci0g
ICAgVmVjdG9yPHNpemVfdD4gbWltZVBsdWdpbkluZGljZXM7Ci0gICAgcGx1Z2luRGF0YS5nZXRX
ZWJWaXNpYmxlTWltZXNBbmRQbHVnaW5JbmRpY2VzKG1pbWVzLCBtaW1lUGx1Z2luSW5kaWNlcyk7
Ci0gICAgZm9yIChhdXRvJiBtaW1lIDogbWltZXMpIHsKLSAgICAgICAgZm9yIChhdXRvJiBtaW1l
RXh0ZW5zaW9uIDogbWltZS5leHRlbnNpb25zKSB7Ci0gICAgICAgICAgICBpZiAoZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZShleHRlbnNpb24sIG1pbWVFeHRlbnNpb24pKQotICAgICAgICAgICAgICAg
IHJldHVybiBtaW1lLnR5cGU7CisgICAgZm9yIChhdXRvJiBtaW1lVHlwZSA6IHBhZ2UucGx1Z2lu
RGF0YSgpLndlYlZpc2libGVNaW1lVHlwZXMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIG1pbWVU
eXBlRXh0ZW5zaW9uIDogbWltZVR5cGUuZXh0ZW5zaW9ucykgeworICAgICAgICAgICAgaWYgKGVx
dWFsSWdub3JpbmdBU0NJSUNhc2UoZXh0ZW5zaW9uLCBtaW1lVHlwZUV4dGVuc2lvbikpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1pbWVUeXBlLnR5cGU7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogc3RhdGljIHZvaWQgbG9n
UGx1Z2luUmVxdWVzdChQYWdlKiBwYWdlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBT
dHJpbmcmIHVybCwgYm9vbCBzdWNjZXNzKQpAQCAtMTk3LDcgKzE5Miw3IEBAIHN0YXRpYyB2b2lk
IGxvZ1BsdWdpblJlcXVlc3QoUGFnZSogcGFnZSwKICAgICBTdHJpbmcgbmV3TUlNRVR5cGUgPSBt
aW1lVHlwZTsKICAgICBpZiAoIW5ld01JTUVUeXBlKSB7CiAgICAgICAgIC8vIFRyeSB0byBmaWd1
cmUgb3V0IHRoZSBNSU1FIHR5cGUgZnJvbSB0aGUgVVJMIGV4dGVuc2lvbi4KLSAgICAgICAgbmV3
TUlNRVR5cGUgPSBmaW5kUGx1Z2luTUlNRVR5cGVGcm9tVVJMKHBhZ2UsIHVybCk7CisgICAgICAg
IG5ld01JTUVUeXBlID0gZmluZFBsdWdpbk1JTUVUeXBlRnJvbVVSTCgqcGFnZSwgdXJsKTsKICAg
ICAgICAgaWYgKCFuZXdNSU1FVHlwZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCShyZXZpc2lvbiAyNjMwMDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDkg
QEAKIAogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgorI2luY2x1
ZGUgIkRPTU1pbWVUeXBlLmgiCiAjaW5jbHVkZSAiRE9NTWltZVR5cGVBcnJheS5oIgorI2luY2x1
ZGUgIkRPTVBsdWdpbi5oIgogI2luY2x1ZGUgIkRPTVBsdWdpbkFycmF5LmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpAQCAtMTk1LDE0ICsxOTcsNTQgQEAgdm9p
ZCBOYXZpZ2F0b3I6OnNob3dTaGFyZURhdGEoRXhjZXB0aW9uTwogICAgIH0pOwogfQogCit2b2lk
IE5hdmlnYXRvcjo6aW5pdGlhbGl6ZVBsdWdpbkFuZE1JTUVUeXBlQXJyYXlzSWZOZWVkZWQoKQor
eworICAgIGlmIChtX3BsdWdpbnMpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIGZyYW1l
ID0gdGhpcy0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+cGFnZSgpKSB7Cisg
ICAgICAgIG1fcGx1Z2lucyA9IERPTVBsdWdpbkFycmF5OjpjcmVhdGUoKnRoaXMpOworICAgICAg
ICBtX21pbWVUeXBlcyA9IERPTU1pbWVUeXBlQXJyYXk6OmNyZWF0ZSgqdGhpcyk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIFtwdWJsaWNseVZpc2libGVQbHVnaW5zLCBhZGRp
dGlvbmFsV2ViVmlzaWJpbGVQbHVnaW5zXSA9IGZyYW1lLT5wYWdlKCktPnBsdWdpbkRhdGEoKS5w
dWJsaWNseVZpc2libGVQbHVnaW5zQW5kQWRkaXRpb25hbFdlYlZpc2libGVQbHVnaW5zKCk7CisK
KyAgICBWZWN0b3I8UmVmPERPTVBsdWdpbj4+IHB1YmxpY2x5VmlzaWJsZURPTVBsdWdpbnM7Cisg
ICAgVmVjdG9yPFJlZjxET01QbHVnaW4+PiBhZGRpdGlvbmFsV2ViVmlzaWJpbGVET01QbHVnaW5z
OworICAgIFZlY3RvcjxSZWY8RE9NTWltZVR5cGU+PiB3ZWJWaXNpYmlsZURPTU1pbWVUeXBlczsK
KworICAgIGlmIChwdWJsaWNseVZpc2libGVQbHVnaW5zLnNpemUoKSA+IDApIHsKKyAgICAgICAg
YWRkaXRpb25hbFdlYlZpc2liaWxlRE9NUGx1Z2lucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHB1
YmxpY2x5VmlzaWJsZVBsdWdpbnMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiBwbHVnaW4g
OiBwdWJsaWNseVZpc2libGVQbHVnaW5zKSB7CisgICAgICAgICAgICBhdXRvIGRvbVBsdWdpbiA9
IERPTVBsdWdpbjo6Y3JlYXRlKCp0aGlzLCBwbHVnaW4pOworICAgICAgICAgICAgZm9yIChhdXRv
JiBkb21NaW1lVHlwZSA6IGRvbVBsdWdpbi0+bWltZVR5cGVzKCkpCisgICAgICAgICAgICAgICAg
d2ViVmlzaWJpbGVET01NaW1lVHlwZXMuYXBwZW5kKGRvbU1pbWVUeXBlKTsKKyAgICAgICAgICAg
IGFkZGl0aW9uYWxXZWJWaXNpYmlsZURPTVBsdWdpbnMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUo
ZG9tUGx1Z2luKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGFkZGl0aW9uYWxXZWJWaXNp
YmlsZVBsdWdpbnMuc2l6ZSgpID4gMCkgeworICAgICAgICBhZGRpdGlvbmFsV2ViVmlzaWJpbGVE
T01QbHVnaW5zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYWRkaXRpb25hbFdlYlZpc2liaWxlUGx1
Z2lucy5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIHBsdWdpbiA6IGFkZGl0aW9uYWxXZWJW
aXNpYmlsZVBsdWdpbnMpIHsKKyAgICAgICAgICAgIGF1dG8gZG9tUGx1Z2luID0gRE9NUGx1Z2lu
OjpjcmVhdGUoKnRoaXMsIHBsdWdpbik7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGRvbU1pbWVU
eXBlIDogZG9tUGx1Z2luLT5taW1lVHlwZXMoKSkKKyAgICAgICAgICAgICAgICB3ZWJWaXNpYmls
ZURPTU1pbWVUeXBlcy5hcHBlbmQoZG9tTWltZVR5cGUpOworICAgICAgICAgICAgYWRkaXRpb25h
bFdlYlZpc2liaWxlRE9NUGx1Z2lucy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShkb21QbHVnaW4p
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBtX3BsdWdpbnMgPSBET01QbHVnaW5BcnJh
eTo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHB1YmxpY2x5VmlzaWJsZURPTVBsdWdpbnMpLCBXVEZN
b3ZlKGFkZGl0aW9uYWxXZWJWaXNpYmlsZURPTVBsdWdpbnMpKTsKKyAgICBtX21pbWVUeXBlcyA9
IERPTU1pbWVUeXBlQXJyYXk6OmNyZWF0ZSgqdGhpcywgV1RGTW92ZSh3ZWJWaXNpYmlsZURPTU1p
bWVUeXBlcykpOworfQorCiBET01QbHVnaW5BcnJheSYgTmF2aWdhdG9yOjpwbHVnaW5zKCkKIHsK
ICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSB7CiAgICAgICAgIGlmIChhdXRvKiBmcmFtZSA9IHRoaXMtPmZy
YW1lKCkpCiAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nTmF2
aWdhdG9yQVBJQWNjZXNzZWQoKmZyYW1lLT5kb2N1bWVudCgpLCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzOjpOYXZpZ2F0b3JBUEk6OlBsdWdpbnMpOwogICAgIH0KLSAgICBpZiAoIW1fcGx1Z2lucykK
LSAgICAgICAgbV9wbHVnaW5zID0gRE9NUGx1Z2luQXJyYXk6OmNyZWF0ZSgqdGhpcyk7CisgICAg
aW5pdGlhbGl6ZVBsdWdpbkFuZE1JTUVUeXBlQXJyYXlzSWZOZWVkZWQoKTsKICAgICByZXR1cm4g
Km1fcGx1Z2luczsKIH0KIApAQCAtMjEyLDggKzI1NCw3IEBAIERPTU1pbWVUeXBlQXJyYXkmIE5h
dmlnYXRvcjo6bWltZVR5cGVzKCkKICAgICAgICAgaWYgKGF1dG8qIGZyYW1lID0gdGhpcy0+ZnJh
bWUoKSkKICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dOYXZp
Z2F0b3JBUElBY2Nlc3NlZCgqZnJhbWUtPmRvY3VtZW50KCksIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3M6Ok5hdmlnYXRvckFQSTo6TWltZVR5cGVzKTsKICAgICB9Ci0gICAgaWYgKCFtX21pbWVUeXBl
cykKLSAgICAgICAgbV9taW1lVHlwZXMgPSBET01NaW1lVHlwZUFycmF5OjpjcmVhdGUoKnRoaXMp
OworICAgIGluaXRpYWxpemVQbHVnaW5BbmRNSU1FVHlwZUFycmF5c0lmTmVlZGVkKCk7CiAgICAg
cmV0dXJuICptX21pbWVUeXBlczsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9OYXZp
Z2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5oCShy
ZXZpc2lvbiAyNjMwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OCw2ICs2OCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzaG93U2hhcmVE
YXRhKEV4Y2VwdGlvbk9yPFNoYXJlRGF0YVdpdGhQYXJzZWRVUkwmPiwgUmVmPERlZmVycmVkUHJv
bWlzZT4mJik7CiAgICAgZXhwbGljaXQgTmF2aWdhdG9yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBET01XaW5kb3cmKTsKIAorICAgIHZvaWQgaW5pdGlhbGl6ZVBsdWdpbkFuZE1JTUVUeXBlQXJy
YXlzSWZOZWVkZWQoKTsKKwogICAgIG11dGFibGUgUmVmUHRyPFNoYXJlRGF0YVJlYWRlcj4gbV9s
b2FkZXI7CiAgICAgbXV0YWJsZSBib29sIG1faGFzUGVuZGluZ1NoYXJlIHsgZmFsc2UgfTsKICAg
ICBtdXRhYmxlIFJlZlB0cjxET01QbHVnaW5BcnJheT4gbV9wbHVnaW5zOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvTmF2aWdhdG9yLmlkbAkocmV2aXNpb24gMjYzMDA3KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9OYXZpZ2F0b3IuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMCArMjEsNyBAQAogICAg
IEdlbmVyYXRlSXNSZWFjaGFibGU9UmVhY2hhYmxlRnJvbURPTVdpbmRvdywKICAgICBKU0N1c3Rv
bU1hcmtGdW5jdGlvbiwKIF0gaW50ZXJmYWNlIE5hdmlnYXRvciB7Ci0gICAgcmVhZG9ubHkgYXR0
cmlidXRlIERPTVBsdWdpbkFycmF5IHBsdWdpbnM7Ci0gICAgcmVhZG9ubHkgYXR0cmlidXRlIERP
TU1pbWVUeXBlQXJyYXkgbWltZVR5cGVzOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFu
IGNvb2tpZUVuYWJsZWQ7Ci0gICAgYm9vbGVhbiBqYXZhRW5hYmxlZCgpOwogCiAgICAgW0NvbmRp
dGlvbmFsPU5BVklHQVRPUl9TVEFOREFMT05FXSByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBz
dGFuZGFsb25lOwogCkBAIC0zNSw1ICszMiw2IEBAIE5hdmlnYXRvciBpbXBsZW1lbnRzIE5hdmln
YXRvcklEOwogTmF2aWdhdG9yIGltcGxlbWVudHMgTmF2aWdhdG9yTGFuZ3VhZ2U7CiBOYXZpZ2F0
b3IgaW1wbGVtZW50cyBOYXZpZ2F0b3JNYXhUb3VjaFBvaW50czsKIE5hdmlnYXRvciBpbXBsZW1l
bnRzIE5hdmlnYXRvck9uTGluZTsKK05hdmlnYXRvciBpbXBsZW1lbnRzIE5hdmlnYXRvclBsdWdp
bnM7CiBOYXZpZ2F0b3IgaW1wbGVtZW50cyBOYXZpZ2F0b3JTZXJ2aWNlV29ya2VyOwogTmF2aWdh
dG9yIGltcGxlbWVudHMgTmF2aWdhdG9yU2hhcmU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L05hdmlnYXRvclBsdWdpbnMuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
TmF2aWdhdG9yUGx1Z2lucy5pZGwJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9OYXZpZ2F0b3JQbHVnaW5zLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworWworICAgIE5vSW50ZXJmYWNlT2JqZWN0CitdIGludGVyZmFjZSBOYXZpZ2F0
b3JQbHVnaW5zIHsKKyAgICBbU2FtZU9iamVjdF0gcmVhZG9ubHkgYXR0cmlidXRlIERPTVBsdWdp
bkFycmF5IHBsdWdpbnM7CisgICAgW1NhbWVPYmplY3RdIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01N
aW1lVHlwZUFycmF5IG1pbWVUeXBlczsKKyAgICBib29sZWFuIGphdmFFbmFibGVkKCk7Cit9OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01NaW1lVHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01NaW1lVHlwZS5jcHAJKHJldmlzaW9uIDI2MzAw
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NTWltZVR5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMCwyMyArMjAsMTYgQEAKICNpbmNsdWRlICJET01NaW1lVHlwZS5oIgogCiAjaW5j
bHVkZSAiRE9NUGx1Z2luLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxv
YWRlci5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCisjaW5j
bHVkZSAiTmF2aWdhdG9yLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLURPTU1pbWVUeXBlOjpET01NaW1lVHlwZShSZWZQdHI8
UGx1Z2luRGF0YT4mJiBwbHVnaW5EYXRhLCBGcmFtZSogZnJhbWUsIHVuc2lnbmVkIGluZGV4KQot
ICAgIDogRnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyKGZyYW1lKQotICAgICwgbV9wbHVnaW5EYXRh
KFdURk1vdmUocGx1Z2luRGF0YSkpCitET01NaW1lVHlwZTo6RE9NTWltZVR5cGUoTmF2aWdhdG9y
JiBuYXZpZ2F0b3IsIGNvbnN0IE1pbWVDbGFzc0luZm8mIGluZm8sIERPTVBsdWdpbiYgZW5hYmxl
ZFBsdWdpbikKKyAgICA6IG1fbmF2aWdhdG9yKG1ha2VXZWFrUHRyKG5hdmlnYXRvcikpCisgICAg
LCBtX21pbWVDbGFzc0luZm8oaW5mbykKKyAgICAsIG1fZW5hYmxlZFBsdWdpbihtYWtlV2Vha1B0
cihlbmFibGVkUGx1Z2luKSkKIHsKLSAgICBWZWN0b3I8TWltZUNsYXNzSW5mbz4gbWltZXM7Ci0g
ICAgVmVjdG9yPHNpemVfdD4gbWltZVBsdWdpbkluZGljZXM7Ci0gICAgbV9wbHVnaW5EYXRhLT5n
ZXRXZWJWaXNpYmxlTWltZXNBbmRQbHVnaW5JbmRpY2VzKG1pbWVzLCBtaW1lUGx1Z2luSW5kaWNl
cyk7Ci0gICAgbV9taW1lQ2xhc3NJbmZvID0gbWltZXNbaW5kZXhdOwotICAgIG1fcGx1Z2luSW5m
byA9IG1fcGx1Z2luRGF0YS0+d2ViVmlzaWJsZVBsdWdpbnMoKVttaW1lUGx1Z2luSW5kaWNlc1tp
bmRleF1dOwogfQogCiBET01NaW1lVHlwZTo6fkRPTU1pbWVUeXBlKCkgPSBkZWZhdWx0OwpAQCAt
NDgsMTMgKzQxLDExIEBAIFN0cmluZyBET01NaW1lVHlwZTo6dHlwZSgpIGNvbnN0CiAKIFN0cmlu
ZyBET01NaW1lVHlwZTo6c3VmZml4ZXMoKSBjb25zdAogewotICAgIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBleHRlbnNpb25zID0gbV9taW1lQ2xhc3NJbmZvLmV4dGVuc2lvbnM7Ci0KICAgICBTdHJp
bmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBleHRlbnNpb25z
LnNpemUoKTsgKytpKSB7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX21pbWVDbGFzc0lu
Zm8uZXh0ZW5zaW9ucy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAoaSkKICAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCcsJyk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGV4dGVuc2lvbnNb
aV0pOworICAgICAgICBidWlsZGVyLmFwcGVuZChtX21pbWVDbGFzc0luZm8uZXh0ZW5zaW9uc1tp
XSk7CiAgICAgfQogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CkBAIC02NiwxMyAr
NTcsNyBAQCBTdHJpbmcgRE9NTWltZVR5cGU6OmRlc2NyaXB0aW9uKCkgY29uc3QKIAogUmVmUHRy
PERPTVBsdWdpbj4gRE9NTWltZVR5cGU6OmVuYWJsZWRQbHVnaW4oKSBjb25zdAogewotICAgIGlm
ICghbV9mcmFtZSB8fCAhbV9mcmFtZS0+cGFnZSgpIHx8ICFtX2ZyYW1lLT5wYWdlKCktPm1haW5G
cmFtZSgpLmxvYWRlcigpLmFyZVBsdWdpbnNFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgVmVjdG9yPE1pbWVDbGFzc0luZm8+IG1pbWVzOwotICAgIFZlY3RvcjxzaXpl
X3Q+IG1pbWVQbHVnaW5JbmRpY2VzOwotICAgIG1fcGx1Z2luRGF0YS0+Z2V0V2ViVmlzaWJsZU1p
bWVzQW5kUGx1Z2luSW5kaWNlcyhtaW1lcywgbWltZVBsdWdpbkluZGljZXMpOwotICAgIHJldHVy
biBET01QbHVnaW46OmNyZWF0ZShtX3BsdWdpbkRhdGEuZ2V0KCksIG1fZnJhbWUsIG1fcGx1Z2lu
SW5mbyk7CisgICAgcmV0dXJuIG1fZW5hYmxlZFBsdWdpbi5nZXQoKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01NaW1lVHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NTWltZVR5cGUuaAkocmV2
aXNpb24gMjYzMDA3KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01NaW1lVHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xOSwxOCArMTksMTkgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNs
dWRlICJGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJQbHVnaW5EYXRhLmgi
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBE
T01QbHVnaW47CitjbGFzcyBOYXZpZ2F0b3I7CiAKLWNsYXNzIERPTU1pbWVUeXBlIDogcHVibGlj
IFJlZkNvdW50ZWQ8RE9NTWltZVR5cGU+LCBwdWJsaWMgRnJhbWVEZXN0cnVjdGlvbk9ic2VydmVy
IHsKK2NsYXNzIERPTU1pbWVUeXBlIDogcHVibGljIFJlZkNvdW50ZWQ8RE9NTWltZVR5cGU+IHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERPTU1pbWVUeXBlPiBjcmVhdGUoUmVmUHRyPFBsdWdp
bkRhdGE+JiYgcGx1Z2luRGF0YSwgRnJhbWUqIGZyYW1lLCB1bnNpZ25lZCBpbmRleCkgeyByZXR1
cm4gYWRvcHRSZWYoKm5ldyBET01NaW1lVHlwZShXVEZNb3ZlKHBsdWdpbkRhdGEpLCBmcmFtZSwg
aW5kZXgpKTsgfQorICAgIHN0YXRpYyBSZWY8RE9NTWltZVR5cGU+IGNyZWF0ZShOYXZpZ2F0b3Im
IG5hdmlnYXRvciwgY29uc3QgTWltZUNsYXNzSW5mbyYgaW5mbywgRE9NUGx1Z2luJiBlbmFibGVk
UGx1Z2luKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IERPTU1pbWVUeXBlKG5hdmlnYXRvciwgaW5m
bywgZW5hYmxlZFBsdWdpbikpOyB9CiAgICAgfkRPTU1pbWVUeXBlKCk7CiAKICAgICBTdHJpbmcg
dHlwZSgpIGNvbnN0OwpAQCAtMzgsMTEgKzM5LDE0IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgZGVz
Y3JpcHRpb24oKSBjb25zdDsKICAgICBSZWZQdHI8RE9NUGx1Z2luPiBlbmFibGVkUGx1Z2luKCkg
Y29uc3Q7CiAKKyAgICBOYXZpZ2F0b3IqIG5hdmlnYXRvcigpIHsgcmV0dXJuIG1fbmF2aWdhdG9y
LmdldCgpOyB9CisKIHByaXZhdGU6Ci0gICAgRE9NTWltZVR5cGUoUmVmUHRyPFBsdWdpbkRhdGE+
JiYsIEZyYW1lKiwgdW5zaWduZWQgaW5kZXgpOworICAgIERPTU1pbWVUeXBlKE5hdmlnYXRvciYs
IGNvbnN0IE1pbWVDbGFzc0luZm8mLCBET01QbHVnaW4mKTsKKworICAgIFdlYWtQdHI8TmF2aWdh
dG9yPiBtX25hdmlnYXRvcjsKICAgICBNaW1lQ2xhc3NJbmZvIG1fbWltZUNsYXNzSW5mbzsKLSAg
ICBSZWZQdHI8UGx1Z2luRGF0YT4gbV9wbHVnaW5EYXRhOwotICAgIFBsdWdpbkluZm8gbV9wbHVn
aW5JbmZvOworICAgIFdlYWtQdHI8RE9NUGx1Z2luPiBtX2VuYWJsZWRQbHVnaW47CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTU1p
bWVUeXBlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTU1pbWVU
eXBlLmlkbAkocmV2aXNpb24gMjYzMDA3KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01N
aW1lVHlwZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTE5LDcgKzE5LDkgQEAKICovCiAKIFsKLSAg
ICBJbnRlcmZhY2VOYW1lPU1pbWVUeXBlCisgICAgSW50ZXJmYWNlTmFtZT1NaW1lVHlwZSwKKyAg
ICBHZW5lcmF0ZUlzUmVhY2hhYmxlPVJlYWNoYWJsZUZyb21OYXZpZ2F0b3IsCisgICAgSW1wbGVt
ZW50YXRpb25MYWNrc1ZUYWJsZQogXSBpbnRlcmZhY2UgRE9NTWltZVR5cGUgewogICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdHlwZTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9N
U3RyaW5nIHN1ZmZpeGVzOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01NaW1lVHlw
ZUFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTU1pbWVU
eXBlQXJyYXkuY3BwCShyZXZpc2lvbiAyNjMwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L0RPTU1pbWVUeXBlQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxMCArMjAsOCBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRPTU1pbWVUeXBlQXJyYXkuaCIKIAotI2lu
Y2x1ZGUgIkRPTVBsdWdpbi5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiUGFnZS5o
IgotI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKKyNpbmNsdWRlICJET01NaW1lVHlwZS5oIgorI2lu
Y2x1ZGUgIk5hdmlnYXRvci5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgogCkBAIC0zMSw4ICsyOSw5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKERPTU1pbWVUeXBl
QXJyYXkpOwogCi1ET01NaW1lVHlwZUFycmF5OjpET01NaW1lVHlwZUFycmF5KE5hdmlnYXRvciYg
bmF2aWdhdG9yKQorRE9NTWltZVR5cGVBcnJheTo6RE9NTWltZVR5cGVBcnJheShOYXZpZ2F0b3Im
IG5hdmlnYXRvciwgVmVjdG9yPFJlZjxET01NaW1lVHlwZT4+JiYgbWltZVR5cGVzKQogICAgIDog
bV9uYXZpZ2F0b3IobWFrZVdlYWtQdHIobmF2aWdhdG9yKSkKKyAgICAsIG1fbWltZVR5cGVzKG1p
bWVUeXBlcykKIHsKIH0KIApAQCAtNDAsNzYgKzM5LDMyIEBAIERPTU1pbWVUeXBlQXJyYXk6On5E
T01NaW1lVHlwZUFycmF5KCkgPSAKIAogdW5zaWduZWQgRE9NTWltZVR5cGVBcnJheTo6bGVuZ3Ro
KCkgY29uc3QKIHsKLSAgICBQbHVnaW5EYXRhKiBkYXRhID0gZ2V0UGx1Z2luRGF0YSgpOwotICAg
IGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBWZWN0b3I8TWltZUNsYXNzSW5m
bz4gbWltZXM7Ci0gICAgVmVjdG9yPHNpemVfdD4gbWltZVBsdWdpbkluZGljZXM7Ci0gICAgZGF0
YS0+Z2V0V2ViVmlzaWJsZU1pbWVzQW5kUGx1Z2luSW5kaWNlcyhtaW1lcywgbWltZVBsdWdpbklu
ZGljZXMpOwotICAgIHJldHVybiBtaW1lcy5zaXplKCk7CisgICAgcmV0dXJuIG1fbWltZVR5cGVz
LnNpemUoKTsKIH0KIAogUmVmUHRyPERPTU1pbWVUeXBlPiBET01NaW1lVHlwZUFycmF5OjppdGVt
KHVuc2lnbmVkIGluZGV4KQogewotICAgIFBsdWdpbkRhdGEqIGRhdGEgPSBnZXRQbHVnaW5EYXRh
KCk7Ci0gICAgaWYgKCFkYXRhKQorICAgIGlmIChpbmRleCA+PSBtX21pbWVUeXBlcy5zaXplKCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgVmVjdG9yPE1pbWVDbGFzc0luZm8+IG1p
bWVzOwotICAgIFZlY3RvcjxzaXplX3Q+IG1pbWVQbHVnaW5JbmRpY2VzOwotICAgIGRhdGEtPmdl
dFdlYlZpc2libGVNaW1lc0FuZFBsdWdpbkluZGljZXMobWltZXMsIG1pbWVQbHVnaW5JbmRpY2Vz
KTsKLQotICAgIGlmIChpbmRleCA+PSBtaW1lcy5zaXplKCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIHJldHVybiBET01NaW1lVHlwZTo6Y3JlYXRlKGRhdGEsIGZyYW1lKCksIGluZGV4
KTsKKyAgICByZXR1cm4gbV9taW1lVHlwZXNbaW5kZXhdLnB0cigpOwogfQogCiBSZWZQdHI8RE9N
TWltZVR5cGU+IERPTU1pbWVUeXBlQXJyYXk6Om5hbWVkSXRlbShjb25zdCBBdG9tU3RyaW5nJiBw
cm9wZXJ0eU5hbWUpCiB7Ci0gICAgUGx1Z2luRGF0YSogZGF0YSA9IGdldFBsdWdpbkRhdGEoKTsK
LSAgICBpZiAoIWRhdGEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgVmVjdG9yPE1p
bWVDbGFzc0luZm8+IG1pbWVzOwotICAgIFZlY3RvcjxzaXplX3Q+IG1pbWVQbHVnaW5JbmRpY2Vz
OwotICAgIGRhdGEtPmdldFdlYlZpc2libGVNaW1lc0FuZFBsdWdpbkluZGljZXMobWltZXMsIG1p
bWVQbHVnaW5JbmRpY2VzKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWltZXMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1pbWVzW2ldLnR5cGUgPT0gcHJvcGVydHlOYW1lKQot
ICAgICAgICAgICAgcmV0dXJuIERPTU1pbWVUeXBlOjpjcmVhdGUoZGF0YSwgZnJhbWUoKSwgaSk7
CisgICAgZm9yIChhdXRvJiBtaW1lVHlwZSA6IG1fbWltZVR5cGVzKSB7CisgICAgICAgIGlmICht
aW1lVHlwZS0+dHlwZSgpID09IHByb3BlcnR5TmFtZSkKKyAgICAgICAgICAgIHJldHVybiBtaW1l
VHlwZS5wdHIoKTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIFZlY3RvcjxBdG9t
U3RyaW5nPiBET01NaW1lVHlwZUFycmF5OjpzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkKIHsKLSAg
ICBQbHVnaW5EYXRhKiBkYXRhID0gZ2V0UGx1Z2luRGF0YSgpOwotICAgIGlmICghZGF0YSkKLSAg
ICAgICAgcmV0dXJuIHsgfTsKLQotICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiBtaW1lczsKLSAg
ICBWZWN0b3I8c2l6ZV90PiBtaW1lUGx1Z2luSW5kaWNlczsKLSAgICBkYXRhLT5nZXRXZWJWaXNp
YmxlTWltZXNBbmRQbHVnaW5JbmRpY2VzKG1pbWVzLCBtaW1lUGx1Z2luSW5kaWNlcyk7Ci0KICAg
ICBWZWN0b3I8QXRvbVN0cmluZz4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KG1pbWVzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBpbmZvIDogbWltZXMpCi0gICAg
ICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShpbmZvLnR5cGUpKTsKLQorICAgIHJl
c3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fbWltZVR5cGVzLnNpemUoKSk7CisgICAgZm9y
IChhdXRvJiBtaW1lVHlwZSA6IG1fbWltZVR5cGVzKQorICAgICAgICByZXN1bHQudW5jaGVja2Vk
QXBwZW5kKG1pbWVUeXBlLT50eXBlKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVBsdWdp
bkRhdGEqIERPTU1pbWVUeXBlQXJyYXk6OmdldFBsdWdpbkRhdGEoKSBjb25zdAotewotICAgIGF1
dG8qIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIGF1dG8qIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwotICAgIGlmICgh
cGFnZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gJnBhZ2UtPnBsdWdp
bkRhdGEoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9ET01NaW1lVHlwZUFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9ET01NaW1lVHlwZUFycmF5LmgJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvRE9NTWltZVR5cGVBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MCwzNCArMjAsMzUgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJET01NaW1lVHlwZS5o
IgotI2luY2x1ZGUgIk5hdmlnYXRvci5oIgogI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgor
I2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIFBsdWdpbkRhdGE7CitjbGFzcyBET01NaW1lVHlwZTsKK2NsYXNz
IE5hdmlnYXRvcjsKIAogY2xhc3MgRE9NTWltZVR5cGVBcnJheSBmaW5hbCA6IHB1YmxpYyBTY3Jp
cHRXcmFwcGFibGUsIHB1YmxpYyBSZWZDb3VudGVkPERPTU1pbWVUeXBlQXJyYXk+IHsKICAgICBX
VEZfTUFLRV9JU09fQUxMT0NBVEVEKERPTU1pbWVUeXBlQXJyYXkpOwogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8RE9NTWltZVR5cGVBcnJheT4gY3JlYXRlKE5hdmlnYXRvciYgbmF2aWdhdG9yKSB7
IHJldHVybiBhZG9wdFJlZigqbmV3IERPTU1pbWVUeXBlQXJyYXkobmF2aWdhdG9yKSk7IH0KKyAg
ICBzdGF0aWMgUmVmPERPTU1pbWVUeXBlQXJyYXk+IGNyZWF0ZShOYXZpZ2F0b3ImIG5hdmlnYXRv
ciwgVmVjdG9yPFJlZjxET01NaW1lVHlwZT4+JiYgbWltZVR5cGVzID0geyB9KSB7IHJldHVybiBh
ZG9wdFJlZigqbmV3IERPTU1pbWVUeXBlQXJyYXkobmF2aWdhdG9yLCBXVEZNb3ZlKG1pbWVUeXBl
cykpKTsgfQogICAgIH5ET01NaW1lVHlwZUFycmF5KCk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGgo
KSBjb25zdDsKICAgICBSZWZQdHI8RE9NTWltZVR5cGU+IGl0ZW0odW5zaWduZWQgaW5kZXgpOwog
ICAgIFJlZlB0cjxET01NaW1lVHlwZT4gbmFtZWRJdGVtKGNvbnN0IEF0b21TdHJpbmcmIHByb3Bl
cnR5TmFtZSk7CiAgICAgVmVjdG9yPEF0b21TdHJpbmc+IHN1cHBvcnRlZFByb3BlcnR5TmFtZXMo
KTsKLSAgICAKKwogICAgIE5hdmlnYXRvciogbmF2aWdhdG9yKCkgeyByZXR1cm4gbV9uYXZpZ2F0
b3IuZ2V0KCk7IH0KIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBET01NaW1lVHlwZUFycmF5KE5h
dmlnYXRvciYpOwotICAgIFBsdWdpbkRhdGEqIGdldFBsdWdpbkRhdGEoKSBjb25zdDsKLSAgICBG
cmFtZSogZnJhbWUoKSBjb25zdCB7IHJldHVybiBtX25hdmlnYXRvciA/IG1fbmF2aWdhdG9yLT5m
cmFtZSgpIDogbnVsbHB0cjsgfQorICAgIGV4cGxpY2l0IERPTU1pbWVUeXBlQXJyYXkoTmF2aWdh
dG9yJiwgVmVjdG9yPFJlZjxET01NaW1lVHlwZT4+JiYgbWltZVR5cGVzKTsKICAgICAKICAgICBX
ZWFrUHRyPE5hdmlnYXRvcj4gbV9uYXZpZ2F0b3I7CisgICAgVmVjdG9yPFJlZjxET01NaW1lVHlw
ZT4+IG1fbWltZVR5cGVzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01QbHVnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2luLmNwcAkocmV2aXNpb24gMjYzMDA3KQorKysgU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9ET01QbHVnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOSw4ICsx
OSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRE9NUGx1Z2luLmgiCiAKLSNp
bmNsdWRlICJQbHVnaW5EYXRhLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJET01N
aW1lVHlwZS5oIgorI2luY2x1ZGUgIk5hdmlnYXRvci5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgogCkBAIC0yOCwx
MSArMjgsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVE
X0lNUEwoRE9NUGx1Z2luKTsKIAotRE9NUGx1Z2luOjpET01QbHVnaW4oUGx1Z2luRGF0YSogcGx1
Z2luRGF0YSwgRnJhbWUqIGZyYW1lLCBQbHVnaW5JbmZvIHBsdWdpbkluZm8pCi0gICAgOiBGcmFt
ZURlc3RydWN0aW9uT2JzZXJ2ZXIoZnJhbWUpCi0gICAgLCBtX3BsdWdpbkRhdGEocGx1Z2luRGF0
YSkKLSAgICAsIG1fcGx1Z2luSW5mbyhXVEZNb3ZlKHBsdWdpbkluZm8pKQoteworRE9NUGx1Z2lu
OjpET01QbHVnaW4oTmF2aWdhdG9yJiBuYXZpZ2F0b3IsIGNvbnN0IFBsdWdpbkluZm8mIHBsdWdp
bkluZm8pCisgICAgOiBtX25hdmlnYXRvcihtYWtlV2Vha1B0cihuYXZpZ2F0b3IpKQorICAgICwg
bV9wbHVnaW5JbmZvKHBsdWdpbkluZm8pCit7CisgICAgbV9taW1lVHlwZXMucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShtX3BsdWdpbkluZm8ubWltZXMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIG1p
bWVUeXBlIDogbV9wbHVnaW5JbmZvLm1pbWVzKQorICAgICAgICBtX21pbWVUeXBlcy51bmNoZWNr
ZWRBcHBlbmQoRE9NTWltZVR5cGU6OmNyZWF0ZShuYXZpZ2F0b3IsIG1pbWVUeXBlLCAqdGhpcykp
OworCisgICAgc3RkOjpzb3J0KG1fbWltZVR5cGVzLmJlZ2luKCksIG1fbWltZVR5cGVzLmVuZCgp
LCBbXShjb25zdCBSZWY8RE9NTWltZVR5cGU+JiBhLCBjb25zdCBSZWY8RE9NTWltZVR5cGU+JiBi
KSB7CisgICAgICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlTGVzc1RoYW4oYS0+dHlwZSgpLCBi
LT50eXBlKCkpOworICAgIH0pOwogfQogCiBET01QbHVnaW46On5ET01QbHVnaW4oKSA9IGRlZmF1
bHQ7CkBAIC01OSw0MCArNjUsMjcgQEAgdW5zaWduZWQgRE9NUGx1Z2luOjpsZW5ndGgoKSBjb25z
dAogCiBSZWZQdHI8RE9NTWltZVR5cGU+IERPTVBsdWdpbjo6aXRlbSh1bnNpZ25lZCBpbmRleCkK
IHsKLSAgICBpZiAoaW5kZXggPj0gbV9wbHVnaW5JbmZvLm1pbWVzLnNpemUoKSB8fCAhbV9mcmFt
ZSB8fCAhbV9mcmFtZS0+cGFnZSgpKQorICAgIGlmIChpbmRleCA+PSBtX21pbWVUeXBlcy5zaXpl
KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgTWltZUNsYXNzSW5mbyBtaW1lID0g
bV9wbHVnaW5JbmZvLm1pbWVzW2luZGV4XTsKLQotICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiBt
aW1lczsKLSAgICBWZWN0b3I8c2l6ZV90PiBtaW1lUGx1Z2luSW5kaWNlczsKLSAgICBWZWN0b3I8
UGx1Z2luSW5mbz4gcGx1Z2lucyA9IG1fcGx1Z2luRGF0YS0+d2ViVmlzaWJsZVBsdWdpbnMoKTsK
LSAgICBtX3BsdWdpbkRhdGEtPmdldFdlYlZpc2libGVNaW1lc0FuZFBsdWdpbkluZGljZXMobWlt
ZXMsIG1pbWVQbHVnaW5JbmRpY2VzKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWlt
ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1pbWVzW2ldID09IG1pbWUgJiYgcGx1Z2lu
c1ttaW1lUGx1Z2luSW5kaWNlc1tpXV0gPT0gbV9wbHVnaW5JbmZvKQotICAgICAgICAgICAgcmV0
dXJuIERPTU1pbWVUeXBlOjpjcmVhdGUobV9wbHVnaW5EYXRhLmdldCgpLCBtX2ZyYW1lLCBpKTsK
LSAgICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG1fbWltZVR5cGVzW2luZGV4
XS5wdHIoKTsKIH0KIAogUmVmUHRyPERPTU1pbWVUeXBlPiBET01QbHVnaW46Om5hbWVkSXRlbShj
b25zdCBBdG9tU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgaWYgKCFtX2ZyYW1lIHx8ICFt
X2ZyYW1lLT5wYWdlKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgVmVjdG9yPE1p
bWVDbGFzc0luZm8+IG1pbWVzOwotICAgIFZlY3RvcjxzaXplX3Q+IG1pbWVQbHVnaW5JbmRpY2Vz
OwotICAgIG1fcGx1Z2luRGF0YS0+Z2V0V2ViVmlzaWJsZU1pbWVzQW5kUGx1Z2luSW5kaWNlcyht
aW1lcywgbWltZVBsdWdpbkluZGljZXMpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
aW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAgaWYgKG1pbWVzW2ldLnR5cGUgPT0gcHJvcGVydHlO
YW1lKQotICAgICAgICAgICAgcmV0dXJuIERPTU1pbWVUeXBlOjpjcmVhdGUobV9wbHVnaW5EYXRh
LmdldCgpLCBtX2ZyYW1lLCBpKTsKKyAgICBmb3IgKGF1dG8mIG1pbWVUeXBlIDogbV9taW1lVHlw
ZXMpIHsKKyAgICAgICAgaWYgKG1pbWVUeXBlLT50eXBlKCkgPT0gcHJvcGVydHlOYW1lKQorICAg
ICAgICAgICAgcmV0dXJuIG1pbWVUeXBlLnB0cigpOworICAgIH0KICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAogVmVjdG9yPEF0b21TdHJpbmc+IERPTVBsdWdpbjo6c3VwcG9ydGVkUHJvcGVydHlO
YW1lcygpCiB7Ci0gICAgLy8gRklYTUU6IFNob3VsZCBiZSBpbXBsZW1lbnRlZC4KLSAgICByZXR1
cm4gVmVjdG9yPEF0b21TdHJpbmc+KCk7CisgICAgVmVjdG9yPEF0b21TdHJpbmc+IHJlc3VsdDsK
KyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX21pbWVUeXBlcy5zaXplKCkpOwor
ICAgIGZvciAoYXV0byYgbWltZVR5cGUgOiBtX21pbWVUeXBlcykKKyAgICAgICAgcmVzdWx0LnVu
Y2hlY2tlZEFwcGVuZChtaW1lVHlwZS0+dHlwZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RP
TVBsdWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2lu
LmgJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2lu
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5LDIxICsxOSwyMSBAQAogCiAjcHJhZ21hIG9uY2UKIAot
I2luY2x1ZGUgIkZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlci5oIgotI2luY2x1ZGUgIkRPTU1pbWVU
eXBlLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgogI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJs
ZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgUGx1Z2luOwotY2xhc3MgUGx1Z2luRGF0YTsKK2NsYXNzIERPTU1pbWVUeXBlOworY2xhc3Mg
TmF2aWdhdG9yOwogCi1jbGFzcyBET01QbHVnaW4gZmluYWwgOiBwdWJsaWMgU2NyaXB0V3JhcHBh
YmxlLCBwdWJsaWMgUmVmQ291bnRlZDxET01QbHVnaW4+LCBwdWJsaWMgRnJhbWVEZXN0cnVjdGlv
bk9ic2VydmVyIHsKK2NsYXNzIERPTVBsdWdpbiBmaW5hbCA6IHB1YmxpYyBTY3JpcHRXcmFwcGFi
bGUsIHB1YmxpYyBSZWZDb3VudGVkPERPTVBsdWdpbj4sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxE
T01QbHVnaW4+IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKERPTVBsdWdpbik7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxET01QbHVnaW4+IGNyZWF0ZShQbHVnaW5EYXRhKiBwbHVnaW5E
YXRhLCBGcmFtZSogZnJhbWUsIFBsdWdpbkluZm8gcGx1Z2luSW5mbykgeyByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBET01QbHVnaW4ocGx1Z2luRGF0YSwgZnJhbWUsIFdURk1vdmUocGx1Z2luSW5mbykp
KTsgfQorICAgIHN0YXRpYyBSZWY8RE9NUGx1Z2luPiBjcmVhdGUoTmF2aWdhdG9yJiBuYXZpZ2F0
b3IsIGNvbnN0IFBsdWdpbkluZm8mIHBsdWdpbkluZm8pIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RE9NUGx1Z2luKG5hdmlnYXRvciwgcGx1Z2luSW5mbykpOyB9CiAgICAgfkRPTVBsdWdpbigpOwog
CiAgICAgU3RyaW5nIG5hbWUoKSBjb25zdDsKQEAgLTQ2LDEwICs0NiwxNiBAQCBwdWJsaWM6CiAg
ICAgUmVmUHRyPERPTU1pbWVUeXBlPiBuYW1lZEl0ZW0oY29uc3QgQXRvbVN0cmluZyYgcHJvcGVy
dHlOYW1lKTsKICAgICBWZWN0b3I8QXRvbVN0cmluZz4gc3VwcG9ydGVkUHJvcGVydHlOYW1lcygp
OwogCisgICAgY29uc3QgVmVjdG9yPFJlZjxET01NaW1lVHlwZT4+JiBtaW1lVHlwZXMoKSBjb25z
dCB7IHJldHVybiBtX21pbWVUeXBlczsgfQorCisgICAgTmF2aWdhdG9yKiBuYXZpZ2F0b3IoKSB7
IHJldHVybiBtX25hdmlnYXRvci5nZXQoKTsgfQorCiBwcml2YXRlOgotICAgIERPTVBsdWdpbihQ
bHVnaW5EYXRhKiwgRnJhbWUqLCBQbHVnaW5JbmZvKTsKLSAgICBSZWZQdHI8UGx1Z2luRGF0YT4g
bV9wbHVnaW5EYXRhOworICAgIERPTVBsdWdpbihOYXZpZ2F0b3ImLCBjb25zdCBQbHVnaW5JbmZv
Jik7CisKKyAgICBXZWFrUHRyPE5hdmlnYXRvcj4gbV9uYXZpZ2F0b3I7CiAgICAgUGx1Z2luSW5m
byBtX3BsdWdpbkluZm87CisgICAgVmVjdG9yPFJlZjxET01NaW1lVHlwZT4+IG1fbWltZVR5cGVz
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1
Z2lucy9ET01QbHVnaW4uaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
RE9NUGx1Z2luLmlkbAkocmV2aXNpb24gMjYzMDA3KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy9ET01QbHVnaW4uaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw2ICsyMCw4IEBACiAKIFsKICAg
ICBJbnRlcmZhY2VOYW1lPVBsdWdpbiwKKyAgICBHZW5lcmF0ZUlzUmVhY2hhYmxlPVJlYWNoYWJs
ZUZyb21OYXZpZ2F0b3IsCisgICAgSW1wbGVtZW50YXRpb25MYWNrc1ZUYWJsZSwKICAgICBMZWdh
Y3lVbmVudW1lcmFibGVOYW1lZFByb3BlcnRpZXMKIF0gaW50ZXJmYWNlIERPTVBsdWdpbiB7CiAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBuYW1lOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9ET01QbHVnaW5BcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9ET01QbHVnaW5BcnJheS5jcHAJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2luQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Miw4ICsyMiw4IEBACiAKICNpbmNsdWRlICJET01QbHVnaW4uaCIKICNpbmNsdWRlICJGcmFtZS5o
IgorI2luY2x1ZGUgIk5hdmlnYXRvci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQ
bHVnaW5EYXRhLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiAKQEAgLTMxLDggKzMxLDEwIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKERPTVBsdWdpbkFycmF5KTsK
IAotRE9NUGx1Z2luQXJyYXk6OkRPTVBsdWdpbkFycmF5KE5hdmlnYXRvciYgbmF2aWdhdG9yKQor
RE9NUGx1Z2luQXJyYXk6OkRPTVBsdWdpbkFycmF5KE5hdmlnYXRvciYgbmF2aWdhdG9yLCBWZWN0
b3I8UmVmPERPTVBsdWdpbj4+JiYgcHVibGljbHlWaXNpYmxlUGx1Z2lucywgVmVjdG9yPFJlZjxE
T01QbHVnaW4+PiYmIGFkZGl0aW9uYWxXZWJWaXNpYmlsZVBsdWdpbnMpCiAgICAgOiBtX25hdmln
YXRvcihtYWtlV2Vha1B0cihuYXZpZ2F0b3IpKQorICAgICwgbV9wdWJsaWNseVZpc2libGVQbHVn
aW5zKHB1YmxpY2x5VmlzaWJsZVBsdWdpbnMpCisgICAgLCBtX2FkZGl0aW9uYWxXZWJWaXNpYmls
ZVBsdWdpbnMoYWRkaXRpb25hbFdlYlZpc2liaWxlUGx1Z2lucykKIHsKIH0KIApAQCAtNDAsNTEg
KzQyLDM3IEBAIERPTVBsdWdpbkFycmF5Ojp+RE9NUGx1Z2luQXJyYXkoKSA9IGRlZmEKIAogdW5z
aWduZWQgRE9NUGx1Z2luQXJyYXk6Omxlbmd0aCgpIGNvbnN0CiB7Ci0gICAgUGx1Z2luRGF0YSog
ZGF0YSA9IHBsdWdpbkRhdGEoKTsKLSAgICBpZiAoIWRhdGEpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgcmV0dXJuIGRhdGEtPnB1YmxpY2x5VmlzaWJsZVBsdWdpbnMoKS5zaXplKCk7CisgICAg
cmV0dXJuIG1fcHVibGljbHlWaXNpYmxlUGx1Z2lucy5zaXplKCk7CiB9CiAKIFJlZlB0cjxET01Q
bHVnaW4+IERPTVBsdWdpbkFycmF5OjppdGVtKHVuc2lnbmVkIGluZGV4KQogewotICAgIFBsdWdp
bkRhdGEqIGRhdGEgPSBwbHVnaW5EYXRhKCk7Ci0gICAgaWYgKCFkYXRhKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZvPiYgcGx1Z2lucyA9IGRh
dGEtPnB1YmxpY2x5VmlzaWJsZVBsdWdpbnMoKTsKLSAgICBpZiAoaW5kZXggPj0gcGx1Z2lucy5z
aXplKCkpCisgICAgaWYgKGluZGV4ID49IG1fcHVibGljbHlWaXNpYmxlUGx1Z2lucy5zaXplKCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBET01QbHVnaW46OmNyZWF0ZShk
YXRhLCBmcmFtZSgpLCBwbHVnaW5zW2luZGV4XSk7CisgICAgcmV0dXJuIG1fcHVibGljbHlWaXNp
YmxlUGx1Z2luc1tpbmRleF0ucHRyKCk7CiB9CiAKIFJlZlB0cjxET01QbHVnaW4+IERPTVBsdWdp
bkFycmF5OjpuYW1lZEl0ZW0oY29uc3QgQXRvbVN0cmluZyYgcHJvcGVydHlOYW1lKQogewotICAg
IFBsdWdpbkRhdGEqIGRhdGEgPSBwbHVnaW5EYXRhKCk7Ci0gICAgaWYgKCFkYXRhKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICBmb3IgKGF1dG8mIHBsdWdpbiA6IG1fcHVibGljbHlWaXNp
YmxlUGx1Z2lucykgeworICAgICAgICBpZiAocGx1Z2luLT5uYW1lKCkgPT0gcHJvcGVydHlOYW1l
KQorICAgICAgICAgICAgcmV0dXJuIHBsdWdpbi5wdHIoKTsKKyAgICB9CiAKLSAgICBmb3IgKGF1
dG8mIHBsdWdpbiA6IGRhdGEtPndlYlZpc2libGVQbHVnaW5zKCkpIHsKLSAgICAgICAgaWYgKHBs
dWdpbi5uYW1lID09IHByb3BlcnR5TmFtZSkKLSAgICAgICAgICAgIHJldHVybiBET01QbHVnaW46
OmNyZWF0ZShkYXRhLCBmcmFtZSgpLCBwbHVnaW4pOworICAgIGZvciAoYXV0byYgcGx1Z2luIDog
bV9hZGRpdGlvbmFsV2ViVmlzaWJpbGVQbHVnaW5zKSB7CisgICAgICAgIGlmIChwbHVnaW4tPm5h
bWUoKSA9PSBwcm9wZXJ0eU5hbWUpCisgICAgICAgICAgICByZXR1cm4gcGx1Z2luLnB0cigpOwog
ICAgIH0KKwogICAgIHJldHVybiBudWxscHRyOwogfQogCiBWZWN0b3I8QXRvbVN0cmluZz4gRE9N
UGx1Z2luQXJyYXk6OnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKQogewotICAgIFBsdWdpbkRhdGEq
IGRhdGEgPSBwbHVnaW5EYXRhKCk7Ci0gICAgaWYgKCFkYXRhKQotICAgICAgICByZXR1cm4geyB9
OwotCi0gICAgY29uc3QgYXV0byYgcGx1Z2lucyA9IGRhdGEtPnB1YmxpY2x5VmlzaWJsZVBsdWdp
bnMoKTsKLQogICAgIFZlY3RvcjxBdG9tU3RyaW5nPiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkocGx1Z2lucy5zaXplKCkpOwotICAgIGZvciAoYXV0byYgcGx1Z2lu
IDogcGx1Z2lucykKLSAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChwbHVnaW4ubmFtZSk7
Ci0KKyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3B1YmxpY2x5VmlzaWJsZVBs
dWdpbnMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIHBsdWdpbiA6IG1fcHVibGljbHlWaXNpYmxl
UGx1Z2lucykKKyAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChwbHVnaW4tPm5hbWUoKSk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTAwLDE3ICs4OCw0IEBAIHZvaWQgRE9NUGx1
Z2luQXJyYXk6OnJlZnJlc2goYm9vbCByZWxvYWQKICAgICBQYWdlOjpyZWZyZXNoUGx1Z2lucyhy
ZWxvYWRQYWdlcyk7CiB9CiAKLVBsdWdpbkRhdGEqIERPTVBsdWdpbkFycmF5OjpwbHVnaW5EYXRh
KCkgY29uc3QKLXsKLSAgICBhdXRvKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgaWYgKCFm
cmFtZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBQYWdlKiBwYWdlID0gZnJhbWUt
PnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
cmV0dXJuICZwYWdlLT5wbHVnaW5EYXRhKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2luQXJyYXkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTVBsdWdpbkFycmF5LmgJKHJldmlzaW9uIDI2
MzAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2luQXJyYXkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjAsMjAgKzIwLDIxIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAi
RE9NUGx1Z2luLmgiCi0jaW5jbHVkZSAiRE9NV2luZG93UHJvcGVydHkuaCIKLSNpbmNsdWRlICJO
YXZpZ2F0b3IuaCIKICNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKKyNpbmNsdWRlIDx3dGYv
UmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBQbHVnaW5EYXRhOworY2xhc3MgRE9NUGx1Z2luOworY2xhc3MgTmF2aWdhdG9yOwogCiBj
bGFzcyBET01QbHVnaW5BcnJheSBmaW5hbCA6IHB1YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1Ymxp
YyBSZWZDb3VudGVkPERPTVBsdWdpbkFycmF5PiB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRF
RChET01QbHVnaW5BcnJheSk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxET01QbHVnaW5BcnJh
eT4gY3JlYXRlKE5hdmlnYXRvciYgbmF2aWdhdG9yKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IERP
TVBsdWdpbkFycmF5KG5hdmlnYXRvcikpOyB9CisgICAgc3RhdGljIFJlZjxET01QbHVnaW5BcnJh
eT4gY3JlYXRlKE5hdmlnYXRvciYgbmF2aWdhdG9yLCBWZWN0b3I8UmVmPERPTVBsdWdpbj4+JiYg
cHVibGljbHlWaXNpYmxlUGx1Z2lucyA9IHsgfSwgVmVjdG9yPFJlZjxET01QbHVnaW4+PiYmIGFk
ZGl0aW9uYWxXZWJWaXNpYmlsZVBsdWdpbnMgPSB7IH0pIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RE9NUGx1Z2luQXJyYXkobmF2aWdhdG9yLCBXVEZNb3ZlKHB1YmxpY2x5VmlzaWJsZVBsdWdpbnMp
LCBXVEZNb3ZlKGFkZGl0aW9uYWxXZWJWaXNpYmlsZVBsdWdpbnMpKSk7IH0KICAgICB+RE9NUGx1
Z2luQXJyYXkoKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwpAQCAtNDIsMTYgKzQz
LDE3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8QXRvbVN0cmluZz4gc3VwcG9ydGVkUHJvcGVydHlO
YW1lcygpOwogCiAgICAgdm9pZCByZWZyZXNoKGJvb2wgcmVsb2FkUGFnZXMpOwotICAgIAotICAg
IE5hdmlnYXRvciogbmF2aWdhdG9yKCkgeyByZXR1cm4gbV9uYXZpZ2F0b3IuZ2V0KCk7IH0KIAor
ICAgIE5hdmlnYXRvciogbmF2aWdhdG9yKCkgeyByZXR1cm4gbV9uYXZpZ2F0b3IuZ2V0KCk7IH0K
KyAgICAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgRE9NUGx1Z2luQXJyYXkoTmF2aWdhdG9yJik7
CisgICAgZXhwbGljaXQgRE9NUGx1Z2luQXJyYXkoTmF2aWdhdG9yJiwgVmVjdG9yPFJlZjxET01Q
bHVnaW4+PiYmLCBWZWN0b3I8UmVmPERPTVBsdWdpbj4+JiYpOwogCi0gICAgUGx1Z2luRGF0YSog
cGx1Z2luRGF0YSgpIGNvbnN0OwogICAgIEZyYW1lKiBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bmF2aWdhdG9yID8gbV9uYXZpZ2F0b3ItPmZyYW1lKCkgOiBudWxscHRyOyB9Ci0gICAgCisKICAg
ICBXZWFrUHRyPE5hdmlnYXRvcj4gbV9uYXZpZ2F0b3I7CisgICAgVmVjdG9yPFJlZjxET01QbHVn
aW4+PiBtX3B1YmxpY2x5VmlzaWJsZVBsdWdpbnM7CisgICAgVmVjdG9yPFJlZjxET01QbHVnaW4+
PiBtX2FkZGl0aW9uYWxXZWJWaXNpYmlsZVBsdWdpbnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5jcHAJKHJldmlzaW9u
IDI2MzAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgi
CiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBsdWdpbkluZm9Qcm92aWRlci5oIgorI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM4LDYg
KzM5LDEyIEBAIFBsdWdpbkRhdGE6OlBsdWdpbkRhdGEoUGFnZSYgcGFnZSkKICAgICBpbml0UGx1
Z2lucygpOwogfQogCit2b2lkIFBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKCkKK3sKKyAgICBBU1NF
UlQobV9wbHVnaW5zLmlzRW1wdHkoKSk7CisgICAgbV9wbHVnaW5zID0gbV9wYWdlLnBsdWdpbklu
Zm9Qcm92aWRlcigpLnBsdWdpbkluZm8obV9wYWdlLCBtX3N1cHBvcnRlZFBsdWdpbklkZW50aWZp
ZXJzKTsKK30KKwogY29uc3QgVmVjdG9yPFBsdWdpbkluZm8+JiBQbHVnaW5EYXRhOjp3ZWJWaXNp
YmxlUGx1Z2lucygpIGNvbnN0CiB7CiAgICAgYXV0byBkb2N1bWVudFVSTCA9IG1fcGFnZS5tYWlu
RnJhbWUoKS5kb2N1bWVudCgpID8gbV9wYWdlLm1haW5GcmFtZSgpLmRvY3VtZW50KCktPnVybCgp
IDogVVJMIHsgfTsKQEAgLTgwLDEyMCArODcsNzcgQEAgc3RhdGljIGJvb2wgc2hvdWxkQmVQdWJs
aWNseVZpc2libGUoY29ucwogICAgICAgICB8fCBpc0J1aWx0SW5QREZQbHVnSW4ocGx1Z2luKTsK
IH0KIAotVmVjdG9yPFBsdWdpbkluZm8+IFBsdWdpbkRhdGE6OnB1YmxpY2x5VmlzaWJsZVBsdWdp
bnMoKSBjb25zdAorc3RkOjpwYWlyPFZlY3RvcjxQbHVnaW5JbmZvPiwgVmVjdG9yPFBsdWdpbklu
Zm8+PiBQbHVnaW5EYXRhOjpwdWJsaWNseVZpc2libGVQbHVnaW5zQW5kQWRkaXRpb25hbFdlYlZp
c2libGVQbHVnaW5zKCkgY29uc3QKIHsKICAgICBhdXRvIHBsdWdpbnMgPSB3ZWJWaXNpYmxlUGx1
Z2lucygpOwogCiAgICAgaWYgKG1fcGFnZS5zaG93QWxsUGx1Z2lucygpKQotICAgICAgICByZXR1
cm4gcGx1Z2luczsKLSAgICAKLSAgICBwbHVnaW5zLnJlbW92ZUFsbE1hdGNoaW5nKFtdKGF1dG8m
IHBsdWdpbikgewotICAgICAgICByZXR1cm4gIXNob3VsZEJlUHVibGljbHlWaXNpYmxlKHBsdWdp
bik7CisgICAgICAgIHJldHVybiB7IHBsdWdpbnMsIHsgfSB9OworCisgICAgVmVjdG9yPFBsdWdp
bkluZm8+IGFkZGl0aW9uYWxXZWJWaXNpYmxlUGx1Z2luczsKKyAgICBwbHVnaW5zLnJlbW92ZUFs
bE1hdGNoaW5nKFsmXShhdXRvJiBwbHVnaW4pIHsKKyAgICAgICAgaWYgKCFzaG91bGRCZVB1Ymxp
Y2x5VmlzaWJsZShwbHVnaW4pKSB7CisgICAgICAgICAgICBhZGRpdGlvbmFsV2ViVmlzaWJsZVBs
dWdpbnMuYXBwZW5kKHBsdWdpbik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSk7CiAKICAgICBzdGQ6OnNvcnQocGx1Z2lu
cy5iZWdpbigpLCBwbHVnaW5zLmVuZCgpLCBbXShjb25zdCBQbHVnaW5JbmZvJiBhLCBjb25zdCBQ
bHVnaW5JbmZvJiBiKSB7CiAgICAgICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlTGVzc1RoYW4o
YS5uYW1lLCBiLm5hbWUpOwogICAgIH0pOwotICAgIHJldHVybiBwbHVnaW5zOworICAgIHJldHVy
biB7IHBsdWdpbnMsIGFkZGl0aW9uYWxXZWJWaXNpYmxlUGx1Z2lucyB9OwogfQogCi12b2lkIFBs
dWdpbkRhdGE6OmdldFdlYlZpc2libGVNaW1lc0FuZFBsdWdpbkluZGljZXMoVmVjdG9yPE1pbWVD
bGFzc0luZm8+JiBtaW1lcywgVmVjdG9yPHNpemVfdD4mIG1pbWVQbHVnaW5JbmRpY2VzKSBjb25z
dAorVmVjdG9yPE1pbWVDbGFzc0luZm8+IFBsdWdpbkRhdGE6OndlYlZpc2libGVNaW1lVHlwZXMo
KSBjb25zdAogewotICAgIGdldE1pbWVzQW5kUGx1Z2luSW5kaWNpZXNGb3JQbHVnaW5zKHdlYlZp
c2libGVQbHVnaW5zKCksIG1pbWVzLCBtaW1lUGx1Z2luSW5kaWNlcyk7Ci19Ci0KLXZvaWQgUGx1
Z2luRGF0YTo6Z2V0TWltZXNBbmRQbHVnaW5JbmRpY2VzKFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiYg
bWltZXMsIFZlY3RvcjxzaXplX3Q+JiBtaW1lUGx1Z2luSW5kaWNlcykgY29uc3QKLXsKLSAgICBn
ZXRNaW1lc0FuZFBsdWdpbkluZGljaWVzRm9yUGx1Z2lucyhwbHVnaW5zKCksIG1pbWVzLCBtaW1l
UGx1Z2luSW5kaWNlcyk7CisgICAgVmVjdG9yPE1pbWVDbGFzc0luZm8+IHJlc3VsdDsKKyAgICBm
b3IgKGF1dG8mIHBsdWdpbiA6IHdlYlZpc2libGVQbHVnaW5zKCkpIHsKKyAgICAgICAgZm9yIChh
dXRvJiBtaW1lIDogcGx1Z2luLm1pbWVzKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtaW1l
KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBQbHVnaW5EYXRhOjpnZXRN
aW1lc0FuZFBsdWdpbkluZGljaWVzRm9yUGx1Z2lucyhjb25zdCBWZWN0b3I8UGx1Z2luSW5mbz4m
IHBsdWdpbnMsIFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiYgbWltZXMsIFZlY3RvcjxzaXplX3Q+JiBt
aW1lUGx1Z2luSW5kaWNlcykgY29uc3QKK3N0YXRpYyBib29sIHN1cHBvcnRzTWltZVR5cGVGb3JQ
bHVnaW5zKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFBsdWdpbkRhdGE6OkFsbG93ZWRQ
bHVnaW5UeXBlcyBhbGxvd2VkUGx1Z2luVHlwZXMsIGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZvPiYg
cGx1Z2lucykKIHsKLSAgICBBU1NFUlRfQVJHKG1pbWVzLCBtaW1lcy5pc0VtcHR5KCkpOwotICAg
IEFTU0VSVF9BUkcobWltZVBsdWdpbkluZGljZXMsIG1pbWVQbHVnaW5JbmRpY2VzLmlzRW1wdHko
KSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGx1Z2lucy5zaXplKCk7ICsraSkg
ewotICAgICAgICBjb25zdCBQbHVnaW5JbmZvJiBwbHVnaW4gPSBwbHVnaW5zW2ldOworICAgIGZv
ciAoYXV0byBwbHVnaW4gOiBwbHVnaW5zKSB7CiAgICAgICAgIGZvciAoYXV0byYgbWltZSA6IHBs
dWdpbi5taW1lcykgewotICAgICAgICAgICAgbWltZXMuYXBwZW5kKG1pbWUpOwotICAgICAgICAg
ICAgbWltZVBsdWdpbkluZGljZXMuYXBwZW5kKGkpOworICAgICAgICAgICAgaWYgKG1pbWUudHlw
ZSA9PSBtaW1lVHlwZSAmJiAoYWxsb3dlZFBsdWdpblR5cGVzID09IFBsdWdpbkRhdGE6OkFsbFBs
dWdpbnMgfHwgcGx1Z2luLmlzQXBwbGljYXRpb25QbHVnaW4pKQorICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9v
bCBQbHVnaW5EYXRhOjpzdXBwb3J0c1dlYlZpc2libGVNaW1lVHlwZUZvclVSTChjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBjb25zdCBBbGxvd2VkUGx1Z2luVHlwZXMgYWxsb3dlZFBsdWdpblR5cGVz
LCBjb25zdCBVUkwmIHVybCkgY29uc3QKK2Jvb2wgUGx1Z2luRGF0YTo6c3VwcG9ydHNNaW1lVHlw
ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBBbGxvd2VkUGx1Z2luVHlwZXMgYWxsb3dl
ZFBsdWdpblR5cGVzKSBjb25zdAogewotICAgIGlmICghcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVx
dWFsKG1fY2FjaGVkVmlzaWJsZVBsdWdpbnMucGFnZVVSTCwgdXJsKSkKLSAgICAgICAgbV9jYWNo
ZWRWaXNpYmxlUGx1Z2lucyA9IHsgdXJsLCBtX3BhZ2UucGx1Z2luSW5mb1Byb3ZpZGVyKCkud2Vi
VmlzaWJsZVBsdWdpbkluZm8obV9wYWdlLCB1cmwpIH07Ci0gICAgaWYgKCFtX2NhY2hlZFZpc2li
bGVQbHVnaW5zLnBsdWdpbkxpc3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4g
c3VwcG9ydHNXZWJWaXNpYmxlTWltZVR5cGUobWltZVR5cGUsIGFsbG93ZWRQbHVnaW5UeXBlcywg
Km1fY2FjaGVkVmlzaWJsZVBsdWdpbnMucGx1Z2luTGlzdCk7CisgICAgcmV0dXJuIHN1cHBvcnRz
TWltZVR5cGVGb3JQbHVnaW5zKG1pbWVUeXBlLCBhbGxvd2VkUGx1Z2luVHlwZXMsIHBsdWdpbnMo
KSk7CiB9CiAKIGJvb2wgUGx1Z2luRGF0YTo6c3VwcG9ydHNXZWJWaXNpYmxlTWltZVR5cGUoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgQWxsb3dlZFBsdWdpblR5cGVzIGFsbG93ZWRQbHVn
aW5UeXBlcykgY29uc3QKIHsKLSAgICByZXR1cm4gc3VwcG9ydHNXZWJWaXNpYmxlTWltZVR5cGUo
bWltZVR5cGUsIGFsbG93ZWRQbHVnaW5UeXBlcywgd2ViVmlzaWJsZVBsdWdpbnMoKSk7Ci19Ci0K
LWJvb2wgUGx1Z2luRGF0YTo6c3VwcG9ydHNXZWJWaXNpYmxlTWltZVR5cGUoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgY29uc3QgQWxsb3dlZFBsdWdpblR5cGVzIGFsbG93ZWRQbHVnaW5UeXBlcywg
Y29uc3QgVmVjdG9yPFBsdWdpbkluZm8+JiBwbHVnaW5zKSBjb25zdAotewotICAgIFZlY3RvcjxN
aW1lQ2xhc3NJbmZvPiBtaW1lczsKLSAgICBWZWN0b3I8c2l6ZV90PiBtaW1lUGx1Z2luSW5kaWNl
czsKLSAgICBnZXRNaW1lc0FuZFBsdWdpbkluZGljaWVzRm9yUGx1Z2lucyhwbHVnaW5zLCBtaW1l
cywgbWltZVBsdWdpbkluZGljZXMpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1p
bWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtaW1lc1tpXS50eXBlID09IG1pbWVUeXBl
ICYmIChhbGxvd2VkUGx1Z2luVHlwZXMgPT0gQWxsUGx1Z2lucyB8fCBwbHVnaW5zW21pbWVQbHVn
aW5JbmRpY2VzW2ldXS5pc0FwcGxpY2F0aW9uUGx1Z2luKSkKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHN1cHBvcnRzTWltZVR5
cGVGb3JQbHVnaW5zKG1pbWVUeXBlLCBhbGxvd2VkUGx1Z2luVHlwZXMsIHdlYlZpc2libGVQbHVn
aW5zKCkpOwogfQogCi1ib29sIFBsdWdpbkRhdGE6OmdldFBsdWdpbkluZm9Gb3JXZWJWaXNpYmxl
TWltZVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgUGx1Z2luSW5mbyYgcGx1Z2luSW5mb1Jl
ZikgY29uc3QKK2Jvb2wgUGx1Z2luRGF0YTo6c3VwcG9ydHNXZWJWaXNpYmxlTWltZVR5cGVGb3JV
UkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgQWxsb3dlZFBsdWdpblR5cGVzIGFsbG93
ZWRQbHVnaW5UeXBlcywgY29uc3QgVVJMJiB1cmwpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPE1pbWVD
bGFzc0luZm8+IG1pbWVzOwotICAgIFZlY3RvcjxzaXplX3Q+IG1pbWVQbHVnaW5JbmRpY2VzOwot
ICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZvPiYgcGx1Z2lucyA9IHdlYlZpc2libGVQbHVnaW5z
KCk7Ci0gICAgZ2V0V2ViVmlzaWJsZU1pbWVzQW5kUGx1Z2luSW5kaWNlcyhtaW1lcywgbWltZVBs
dWdpbkluZGljZXMpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1pbWVzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IE1pbWVDbGFzc0luZm8mIGluZm8gPSBtaW1lc1tpXTsK
LQotICAgICAgICBpZiAoaW5mby50eXBlID09IG1pbWVUeXBlKSB7Ci0gICAgICAgICAgICBwbHVn
aW5JbmZvUmVmID0gcGx1Z2luc1ttaW1lUGx1Z2luSW5kaWNlc1tpXV07Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChtX2NhY2hlZFZpc2libGVQbHVnaW5zLnBh
Z2VVUkwsIHVybCkpCisgICAgICAgIG1fY2FjaGVkVmlzaWJsZVBsdWdpbnMgPSB7IHVybCwgbV9w
YWdlLnBsdWdpbkluZm9Qcm92aWRlcigpLndlYlZpc2libGVQbHVnaW5JbmZvKG1fcGFnZSwgdXJs
KSB9OworICAgIGlmICghbV9jYWNoZWRWaXNpYmxlUGx1Z2lucy5wbHVnaW5MaXN0KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHN1cHBvcnRzTWltZVR5cGVGb3JQbHVnaW5zKG1p
bWVUeXBlLCBhbGxvd2VkUGx1Z2luVHlwZXMsICptX2NhY2hlZFZpc2libGVQbHVnaW5zLnBsdWdp
bkxpc3QpOwogfQogCiBTdHJpbmcgUGx1Z2luRGF0YTo6cGx1Z2luRmlsZUZvcldlYlZpc2libGVN
aW1lVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSBjb25zdAogewotICAgIFBsdWdpbkluZm8g
aW5mbzsKLSAgICBpZiAoZ2V0UGx1Z2luSW5mb0ZvcldlYlZpc2libGVNaW1lVHlwZShtaW1lVHlw
ZSwgaW5mbykpCi0gICAgICAgIHJldHVybiBpbmZvLmZpbGU7Ci0gICAgcmV0dXJuIFN0cmluZygp
OwotfQotCi1ib29sIFBsdWdpbkRhdGE6OnN1cHBvcnRzTWltZVR5cGUoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgY29uc3QgQWxsb3dlZFBsdWdpblR5cGVzIGFsbG93ZWRQbHVnaW5UeXBlcykgY29u
c3QKLXsKLSAgICBWZWN0b3I8TWltZUNsYXNzSW5mbz4gbWltZXM7Ci0gICAgVmVjdG9yPHNpemVf
dD4gbWltZVBsdWdpbkluZGljZXM7Ci0gICAgY29uc3QgVmVjdG9yPFBsdWdpbkluZm8+JiBwbHVn
aW5zID0gdGhpcy0+cGx1Z2lucygpOwotICAgIGdldE1pbWVzQW5kUGx1Z2luSW5kaWNlcyhtaW1l
cywgbWltZVBsdWdpbkluZGljZXMpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1p
bWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtaW1lc1tpXS50eXBlID09IG1pbWVUeXBl
ICYmIChhbGxvd2VkUGx1Z2luVHlwZXMgPT0gQWxsUGx1Z2lucyB8fCBwbHVnaW5zW21pbWVQbHVn
aW5JbmRpY2VzW2ldXS5pc0FwcGxpY2F0aW9uUGx1Z2luKSkKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgIGZvciAoYXV0byBwbHVnaW4gOiB3ZWJWaXNpYmxlUGx1Z2lucygpKSB7CisgICAg
ICAgIGZvciAoYXV0byYgbWltZSA6IHBsdWdpbi5taW1lcykgeworICAgICAgICAgICAgaWYgKG1p
bWUudHlwZSA9PSBtaW1lVHlwZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcGx1Z2luLmZpbGU7
CisgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFBsdWdpbkRh
dGE6OmluaXRQbHVnaW5zKCkKLXsKLSAgICBBU1NFUlQobV9wbHVnaW5zLmlzRW1wdHkoKSk7Ci0K
LSAgICBtX3BsdWdpbnMgPSBtX3BhZ2UucGx1Z2luSW5mb1Byb3ZpZGVyKCkucGx1Z2luSW5mbyht
X3BhZ2UsIG1fc3VwcG9ydGVkUGx1Z2luSWRlbnRpZmllcnMpOworICAgIHJldHVybiB7IH07CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
UGx1Z2luRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
RGF0YS5oCShyZXZpc2lvbiAyNjMwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdp
bkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsOCArMjEsNiBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0j
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9VUkwuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0zMiw3ICszMCw2
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBhZ2U7Ci1zdHJ1Y3QgUGx1Z2luSW5m
bzsKIAogZW51bSBjbGFzcyBQbHVnaW5Mb2FkQ2xpZW50UG9saWN5IDogdWludDhfdCB7CiAgICAg
Ly8gTm8gY2xpZW50LXNwZWNpZmljIHBsdWctaW4gbG9hZCBwb2xpY3kgaGFzIGJlZW4gZGVmaW5l
ZC4gVGhlIHBsdWctaW4gc2hvdWxkIGJlIHZpc2libGUgaW4gbmF2aWdhdG9yLnBsdWdpbnMgYW5k
IFdlYktpdCBzaG91bGQgc3luY2hyb25vdXNseQpAQCAtMTAyLDI3ICs5OSwyMyBAQCBwdWJsaWM6
CiAKICAgICBjb25zdCBWZWN0b3I8UGx1Z2luSW5mbz4mIHBsdWdpbnMoKSBjb25zdCB7IHJldHVy
biBtX3BsdWdpbnM7IH0KICAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBWZWN0b3I8UGx1Z2luSW5m
bz4mIHdlYlZpc2libGVQbHVnaW5zKCkgY29uc3Q7Ci0gICAgVmVjdG9yPFBsdWdpbkluZm8+IHB1
YmxpY2x5VmlzaWJsZVBsdWdpbnMoKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdl
dFdlYlZpc2libGVNaW1lc0FuZFBsdWdpbkluZGljZXMoVmVjdG9yPE1pbWVDbGFzc0luZm8+Jiwg
VmVjdG9yPHNpemVfdD4mKSBjb25zdDsKKyAgICBzdGQ6OnBhaXI8VmVjdG9yPFBsdWdpbkluZm8+
LCBWZWN0b3I8UGx1Z2luSW5mbz4+IHB1YmxpY2x5VmlzaWJsZVBsdWdpbnNBbmRBZGRpdGlvbmFs
V2ViVmlzaWJsZVBsdWdpbnMoKSBjb25zdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxN
aW1lQ2xhc3NJbmZvPiB3ZWJWaXNpYmxlTWltZVR5cGVzKCkgY29uc3Q7CiAKICAgICBlbnVtIEFs
bG93ZWRQbHVnaW5UeXBlcyB7CiAgICAgICAgIEFsbFBsdWdpbnMsCiAgICAgICAgIE9ubHlBcHBs
aWNhdGlvblBsdWdpbnMKICAgICB9OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzdXBwb3J0
c1dlYlZpc2libGVNaW1lVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBBbGxvd2Vk
UGx1Z2luVHlwZXMpIGNvbnN0OwotICAgIFN0cmluZyBwbHVnaW5GaWxlRm9yV2ViVmlzaWJsZU1p
bWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0OwotCiAgICAgV0VCQ09SRV9FWFBP
UlQgYm9vbCBzdXBwb3J0c01pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IEFs
bG93ZWRQbHVnaW5UeXBlcykgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzdXBwb3J0
c1dlYlZpc2libGVNaW1lVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBBbGxvd2Vk
UGx1Z2luVHlwZXMpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc3VwcG9ydHNXZWJW
aXNpYmxlTWltZVR5cGVGb3JVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgQWxsb3dl
ZFBsdWdpblR5cGVzLCBjb25zdCBVUkwmKSBjb25zdDsKIAorICAgIFN0cmluZyBwbHVnaW5GaWxl
Rm9yV2ViVmlzaWJsZU1pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0OworCiBw
cml2YXRlOgogICAgIGV4cGxpY2l0IFBsdWdpbkRhdGEoUGFnZSYpOwogICAgIHZvaWQgaW5pdFBs
dWdpbnMoKTsKLSAgICBib29sIGdldFBsdWdpbkluZm9Gb3JXZWJWaXNpYmxlTWltZVR5cGUoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgUGx1Z2luSW5mbyYpIGNvbnN0OwotICAgIHZvaWQgZ2V0TWlt
ZXNBbmRQbHVnaW5JbmRpY2VzKFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiYsIFZlY3RvcjxzaXplX3Q+
JikgY29uc3Q7Ci0gICAgdm9pZCBnZXRNaW1lc0FuZFBsdWdpbkluZGljaWVzRm9yUGx1Z2lucyhj
b25zdCBWZWN0b3I8UGx1Z2luSW5mbz4mLCBWZWN0b3I8TWltZUNsYXNzSW5mbz4mLCBWZWN0b3I8
c2l6ZV90PiYpIGNvbnN0OwotICAgIGJvb2wgc3VwcG9ydHNXZWJWaXNpYmxlTWltZVR5cGUoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgQWxsb3dlZFBsdWdpblR5cGVzLCBjb25zdCBWZWN0
b3I8UGx1Z2luSW5mbz4mKSBjb25zdDsKIAogcHJvdGVjdGVkOgogICAgIFBhZ2UmIG1fcGFnZTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjMwMTApCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA2LTE0ICBTYW0gV2Vpbmln
ICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbV1BUXSBodG1sL3dlYmFwcGFwaXMvc3lz
dGVtLXN0YXRlLWFuZC1jYXBhYmlsaXRpZXMvdGhlLW5hdmlnYXRvci1vYmplY3QvbmF2aWdhdG9y
LXBsdWdpbmFycmF5Lmh0bWwgZmFpbHMgZHVlIHRvIGxhY2sgb2YgY2FjaGluZyBvZiBQbHVnaW4g
b2JqZWN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjEzMTg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6cGx1Z2luU3VwcG9ydHNFeHRlbnNpb24pOgorCiAyMDIwLTA2LTE0ICBD
YXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbU09V
UF0gRGlzYWJsZSBIU1RTIGZvciByZXF1ZXN0cyB3aGVuIGNvb2tpZXMgd2lsbCBiZSBibG9ja2Vk
IGJ5IElUUApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5JbmZv
U3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QbHVnaW5zL1Bs
dWdpbkluZm9TdG9yZS5oCShyZXZpc2lvbiAyNjMwMDcpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9QbHVnaW5zL1BsdWdpbkluZm9TdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBACiAjaW5jbHVkZSAiUGx1Z2luTW9kdWxlSW5mby5oIgogCiAjaW5jbHVkZSA8V2ViQ29y
ZS9QbHVnaW5EYXRhLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAkocmV2aXNpb24g
MjYzMDA3KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZy
YW1lTG9hZGVyQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY1NywxMSArMTY1Nyw4IEBA
IFJlZlB0cjxXaWRnZXQ+IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmUKIHN0YXRpYyBib29sIHBs
dWdpblN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFBsdWdpbkRhdGEmIHBsdWdpbkRhdGEsIGNvbnN0
IFN0cmluZyYgZXh0ZW5zaW9uKQogewogICAgIEFTU0VSVChleHRlbnNpb24uY29udmVydFRvQVND
SUlMb3dlcmNhc2UoKSA9PSBleHRlbnNpb24pOwotICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiBt
aW1lczsKLSAgICBWZWN0b3I8c2l6ZV90PiBtaW1lUGx1Z2luSW5kaWNlczsKLSAgICBwbHVnaW5E
YXRhLmdldFdlYlZpc2libGVNaW1lc0FuZFBsdWdpbkluZGljZXMobWltZXMsIG1pbWVQbHVnaW5J
bmRpY2VzKTsKLSAgICBmb3IgKGF1dG8mIG1pbWVDbGFzc0luZm8gOiBtaW1lcykgewotICAgICAg
ICBpZiAobWltZUNsYXNzSW5mby5leHRlbnNpb25zLmNvbnRhaW5zKGV4dGVuc2lvbikpCisgICAg
Zm9yIChhdXRvJiBtaW1lVHlwZSA6IHBsdWdpbkRhdGEud2ViVmlzaWJsZU1pbWVUeXBlcygpKSB7
CisgICAgICAgIGlmIChtaW1lVHlwZS5leHRlbnNpb25zLmNvbnRhaW5zKGV4dGVuc2lvbikpCiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401872</attachid>
            <date>2020-06-14 13:18:29 -0700</date>
            <delta_ts>2020-06-14 16:11:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213185-20200614131828.patch</filename>
            <type>text/plain</type>
            <size>49443</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzAxMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBACisyMDIwLTA2LTE0ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbV1BUXSBodG1sL3dlYmFwcGFwaXMv
c3lzdGVtLXN0YXRlLWFuZC1jYXBhYmlsaXRpZXMvdGhlLW5hdmlnYXRvci1vYmplY3QvbmF2aWdh
dG9yLXBsdWdpbmFycmF5Lmh0bWwgZmFpbHMgZHVlIHRvIGxhY2sgb2YgY2FjaGluZyBvZiBQbHVn
aW4gb2JqZWN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjEzMTg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgT3ZlcmhhdWwgd2ViIGV4cG9zZWQgcGx1Z2luIEFQSXM6CisgICAgICAgIC0gQWxsIERPTVBs
dWdpbiBhbmQgRE9NTWltZVR5cGVzIGFyZSBub3cgY3JlYXRlZCB0b2dldGhlciAoYWxvbmcgd2l0
aCB0aGUgRE9NUGx1Z2luQXJyYXkgYW5kIAorICAgICAgICAgIERPTU1pbWVUeXBlQXJyYXkpIG9u
IGZpcnN0IGFjY2VzcyBvZiBlaXRoZXIgbmF2aWdhdG9yLnBsdWdpbnMgb3IgbmF2aWdhdG9yLm1p
bWVUeXBlcy4KKyAgICAgICAgLSBET01QbHVnaW5zIGFyZSBjcmVhdGVkIGFuZCBzdG9yZWQgaW4g
dGhlIERPTVBsdWdpbkFycmF5IChmaXhpbmcgdGhlIGluaXRpYWwgbGFjayBvZiBjYWNoaW5nIGlz
c3VlKQorICAgICAgICAtIERPTU1pbWVUeXBlcyBhcmUgY3JlYXRlZCBhbmQgc3RvcmVkIGluIHRo
ZSBET01NaW1lVHlwZUFycmF5LgorICAgICAgICAtIERPTVBsdWdpbnMgaG9sZCBhIHN0cm9uZyBy
ZWZlcmVuY2UgdG8gdGhlaXIgYXNzb2NpYXRlZCBET01NaW1lVHlwZS4gVGhlIERPTU1pbWVUeXBl
IGhhcworICAgICAgICAgIGEgd2VhayByZWZlcmVuY2UgYmFjayB0byB0aGUgRE9NUGx1Z2luLiBU
aGlzIG1lYW5zIGZvciBhIHNpbmdsZSBleGVjdXRhdGlvbiBjb250ZXh0LCB3ZSBvbmx5CisgICAg
ICAgICAgZXZlciBjcmVhdGUgb25lIERPTVBsdWdpbiAvIERPTU1pbWVUeXBlIGZvciBlYWNoIHVu
ZGVybHlpbmcgcGx1Z2luIC8gbWltZXR5cGUuCisgICAgICAgIC0gVXBkYXRlIEdDIHNvIHRoYXQg
RE9NUGx1Z2luIGFuZCBET01NaW1lVHlwZSAoaW4gYWRkaXRpb24gdG8gRE9NUGx1Z2luQXJyYXkg
YW5kIERPTU1pbWVUeXBlQXJyYXkKKyAgICAgICAgICB3aGljaCB3ZXJlIGFscmVhZHkgZG9pbmcg
dGhpcykgdXNlIG5hdmlnYXRvciByZWFjaGFiaWxpdHkgZm9yIHRoZWlyIGxpZmV0aW1lLiBUaGlz
IGlzIGFsbW9zdAorICAgICAgICAgIGNvcnJlY3QsIGV4Y2VwdCBpZiB3ZSBldmVyIGltcGxlbWVu
dCBET01QbHVnaW5BcnJheS5yZWZyZXNoKGZhbHNlKSB0byBtYXRjaCB0aGUgc3BlYywgaW4gd2hp
Y2gKKyAgICAgICAgICBjYXNlIHlvdSBjb3VsZCBlbmQgdXAgd2l0aCBzb21lIERPTVBsdWdpbnMg
YW5kIERPTU1pbWVUeXBlcyB0aGF0IGFyZSBtYXJrZWQgYXMgcmVhY2hhYmxlIHdoZW4KKyAgICAg
ICAgICB0aGV5IHJlYWxseSBhcmUgbm90LCBidXQgb25seSBwbHVnaW5zIHRoYXQgd2VyZSByZW1v
dmVkLiBUaGlzIHNlZW1zIHNvIHVubGlrZWx5IHRvIG1hdHRlciB0aGF0CisgICAgICAgICAgaW1w
bGVtZW50aW5nIGEgbW9yZSBzdHJpY3QgcmVhY2hhYmlsaXR5IGZ1bmN0aW9uIHNlZW1zIGxpa2Ug
dGhlIHdyb25nIHdheSB0byBnby4KKyAgICAgICAgICAKKyAgICAgICAgW1dPUksgSU4gUFJPR1JF
U1NdCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNl
cy1pbnB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGxvYWRl
ci9TdWJmcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5kUGx1Z2luTUlNRVR5
cGVGcm9tVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmxvZ1BsdWdpblJlcXVlc3QpOgorICAgICAg
ICAqIHBhZ2UvTmF2aWdhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6aW5p
dGlhbGl6ZVBsdWdpbkFuZE1JTUVUeXBlQXJyYXlzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6TmF2aWdhdG9yOjpwbHVnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6bWlt
ZVR5cGVzKToKKyAgICAgICAgKiBwYWdlL05hdmlnYXRvci5oOgorICAgICAgICAqIHBhZ2UvTmF2
aWdhdG9yLmlkbDoKKyAgICAgICAgKiBwYWdlL05hdmlnYXRvclBsdWdpbnMuaWRsOiBBZGRlZC4K
KyAgICAgICAgKiBwbHVnaW5zL0RPTU1pbWVUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRP
TU1pbWVUeXBlOjpET01NaW1lVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpET01NaW1lVHlwZTo6
c3VmZml4ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RE9NTWltZVR5cGU6OmVuYWJsZWRQ
bHVnaW4gY29uc3QpOgorICAgICAgICAqIHBsdWdpbnMvRE9NTWltZVR5cGUuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkRPTU1pbWVUeXBlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NTWlt
ZVR5cGU6Om5hdmlnYXRvcik6CisgICAgICAgICogcGx1Z2lucy9ET01NaW1lVHlwZS5pZGw6Cisg
ICAgICAgICogcGx1Z2lucy9ET01NaW1lVHlwZUFycmF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRPTU1pbWVUeXBlQXJyYXk6OkRPTU1pbWVUeXBlQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6
RE9NTWltZVR5cGVBcnJheTo6bGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTU1p
bWVUeXBlQXJyYXk6Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RE9NTWltZVR5cGVBcnJheTo6
bmFtZWRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTU1pbWVUeXBlQXJyYXk6OnN1cHBvcnRl
ZFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6RE9NTWltZVR5cGVBcnJheTo6Z2V0
UGx1Z2luRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGx1Z2lucy9ET01NaW1lVHlw
ZUFycmF5Lmg6CisgICAgICAgICogcGx1Z2lucy9ET01QbHVnaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NUGx1Z2luOjpET01QbHVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6RE9NUGx1Z2lu
OjppdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBsdWdpbjo6bmFtZWRJdGVtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTVBsdWdpbjo6c3VwcG9ydGVkUHJvcGVydHlOYW1lcyk6CisgICAgICAg
ICogcGx1Z2lucy9ET01QbHVnaW4uaDoKKyAgICAgICAgKiBwbHVnaW5zL0RPTVBsdWdpbi5pZGw6
CisgICAgICAgICogcGx1Z2lucy9ET01QbHVnaW5BcnJheS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpET01QbHVnaW5BcnJheTo6RE9NUGx1Z2luQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6RE9N
UGx1Z2luQXJyYXk6Omxlbmd0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpET01QbHVnaW5B
cnJheTo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpET01QbHVnaW5BcnJheTo6bmFtZWRJdGVt
KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBsdWdpbkFycmF5OjpzdXBwb3J0ZWRQcm9wZXJ0eU5h
bWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBsdWdpbkFycmF5OjpwbHVnaW5EYXRhIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbHVnaW5zL0RPTVBsdWdpbkFycmF5Lmg6CisgICAgICAg
ICogcGx1Z2lucy9QbHVnaW5EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6
OmluaXRQbHVnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OnB1YmxpY2x5Vmlz
aWJsZVBsdWdpbnNBbmRBZGRpdGlvbmFsV2ViVmlzaWJsZVBsdWdpbnMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6d2ViVmlzaWJsZU1pbWVUeXBlcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpzdXBwb3J0c01pbWVUeXBlRm9yUGx1Z2lucyk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5EYXRhOjpzdXBwb3J0c01pbWVUeXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpbkRhdGE6OnN1cHBvcnRzV2ViVmlzaWJsZU1pbWVUeXBlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OnN1cHBvcnRzV2ViVmlzaWJsZU1pbWVUeXBlRm9yVVJM
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OnBsdWdpbkZpbGVGb3JXZWJW
aXNpYmxlTWltZVR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6cHVi
bGljbHlWaXNpYmxlUGx1Z2lucyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5EYXRhOjpnZXRXZWJWaXNpYmxlTWltZXNBbmRQbHVnaW5JbmRpY2VzIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OmdldE1pbWVzQW5kUGx1Z2luSW5k
aWNlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhOjpnZXRN
aW1lc0FuZFBsdWdpbkluZGljaWVzRm9yUGx1Z2lucyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5EYXRhOjpnZXRQbHVnaW5JbmZvRm9yV2ViVmlzaWJsZU1pbWVUeXBl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpbkRhdGEuaDoKKwogMjAy
MC0wNi0xNCAgVGV0c3VoYXJ1IE9oemVraSAgPHRldHN1aGFydS5vaHpla2lAZ21haWwuY29tPgog
CiAgICAgICAgIFdpdGhkcmF3IEZpbGVSZWFkZXJTeW5jIGZyb20gU2VydmljZVdvcmtlcgpJbmRl
eDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05NDUsNiArOTQ1LDcgQEAgc2V0KFdl
YkNvcmVfTk9OX1NWR19JRExfRklMRVMKICAgICBwYWdlL05hdmlnYXRvcklELmlkbAogICAgIHBh
Z2UvTmF2aWdhdG9yTGFuZ3VhZ2UuaWRsCiAgICAgcGFnZS9OYXZpZ2F0b3JPbkxpbmUuaWRsCisg
ICAgcGFnZS9OYXZpZ2F0b3JQbHVnaW5zLmlkbAogICAgIHBhZ2UvTmF2aWdhdG9yU2VydmljZVdv
cmtlci5pZGwKICAgICBwYWdlL05hdmlnYXRvclNoYXJlLmlkbAogICAgIHBhZ2UvUGVyZm9ybWFu
Y2UuaWRsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVs
aXN0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0Lnhj
ZmlsZWxpc3QJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3Vy
Y2VzLWlucHV0LnhjZmlsZWxpc3QJKHdvcmtpbmcgY29weSkKQEAgLTkzMyw2ICs5MzMsNyBAQCAk
KFBST0pFQ1RfRElSKS9wYWdlL05hdmlnYXRvcklELmlkbAogJChQUk9KRUNUX0RJUikvcGFnZS9O
YXZpZ2F0b3JJc0xvZ2dlZEluLmlkbAogJChQUk9KRUNUX0RJUikvcGFnZS9OYXZpZ2F0b3JMYW5n
dWFnZS5pZGwKICQoUFJPSkVDVF9ESVIpL3BhZ2UvTmF2aWdhdG9yT25MaW5lLmlkbAorJChQUk9K
RUNUX0RJUikvcGFnZS9OYXZpZ2F0b3JQbHVnaW5zLmlkbAogJChQUk9KRUNUX0RJUikvcGFnZS9O
YXZpZ2F0b3JTZXJ2aWNlV29ya2VyLmlkbAogJChQUk9KRUNUX0RJUikvcGFnZS9OYXZpZ2F0b3JT
aGFyZS5pZGwKICQoUFJPSkVDVF9ESVIpL3BhZ2UvUGVyZm9ybWFuY2UuaWRsCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAkocmV2aXNp
b24gMjYzMDA3KQorKysgU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmls
ZWxpc3QJKHdvcmtpbmcgY29weSkKQEAgLTExNTQsNiArMTE1NCw4IEBAICQoQlVJTFRfUFJPRFVD
VFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWIKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJDb3JlL0pTTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmgKICQoQlVJTFRfUFJPRFVD
VFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTTmF2aWdhdG9yT25MaW5lLmNwcAogJChC
VUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNOYXZpZ2F0b3JPbkxp
bmUuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNOYXZp
Z2F0b3JQbHVnaW5zLmNwcAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvSlNOYXZpZ2F0b3JQbHVnaW5zLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJDb3JlL0pTTmF2aWdhdG9yU2VydmljZVdvcmtlci5jcHAKICQoQlVJTFRfUFJP
RFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTTmF2aWdhdG9yU2VydmljZVdvcmtl
ci5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU05hdmln
YXRvclNoYXJlLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lv
biAyNjMwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5n
IGNvcHkpCkBAIC05NTIsNiArOTUyLDcgQEAgSlNfQklORElOR19JRExTID0gXAogICAgICQoV2Vi
Q29yZSkvcGFnZS9OYXZpZ2F0b3JJc0xvZ2dlZEluLmlkbCBcCiAgICAgJChXZWJDb3JlKS9wYWdl
L05hdmlnYXRvckxhbmd1YWdlLmlkbCBcCiAgICAgJChXZWJDb3JlKS9wYWdlL05hdmlnYXRvck9u
TGluZS5pZGwgXAorICAgICQoV2ViQ29yZSkvcGFnZS9OYXZpZ2F0b3JQbHVnaW5zLmlkbCBcCiAg
ICAgJChXZWJDb3JlKS9wYWdlL05hdmlnYXRvclNlcnZpY2VXb3JrZXIuaWRsIFwKICAgICAkKFdl
YkNvcmUpL3BhZ2UvTmF2aWdhdG9yU2hhcmUuaWRsIFwKICAgICAkKFdlYkNvcmUpL3BhZ2UvUGVy
Zm9ybWFuY2UuaWRsIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtOTg4
Nyw2ICs5ODg3LDcgQEAKIAkJN0FGOUIyMDkxOENGQjVGMjAwQzY0QkVGIC8qIEpTVlRUUmVnaW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVlRUUmVnaW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjlCMjBBMThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZU
VFJlZ2lvbkxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNW
VFRSZWdpb25MaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FGOUIyMEIx
OENGQjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU1ZUVFJlZ2lvbkxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJN0MwMTdDM0QyNDk2OUYxMzAwREMwQzAyIC8qIE5hdmlnYXRvclBsdWdpbnMuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IE5hdmlnYXRvclBsdWdpbnMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QzAyOUM2RDI0OTNDOEY4MDAyNjgyMDQgLyogQ29sb3JUeXBlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b2xvclR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMENFRjI4MUU0QTU0
MkMwMDhERUI4MCAvKiBKU0RPTUNvbnN0cnVjdG9yQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0RPTUNvbnN0cnVjdG9yQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3QzBDRUYyOTFFNEE1NEQzMDA4REVCODAgLyogSlNET01Db25zdHJ1Y3Rvcldp
dGhEb2N1bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUNvbnN0
cnVjdG9yV2l0aERvY3VtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTEx
Miw2ICsyMTExMyw3IEBACiAJCQkJNkI1MDdBMjMyMzRCRjM0MTAwQkU3QzYyIC8qIE5hdmlnYXRv
cklzTG9nZ2VkSW4uaWRsICovLAogCQkJCTdDNUJFQTNCMUU5RUU3NzEwMENDNTE3QiAvKiBOYXZp
Z2F0b3JMYW5ndWFnZS5pZGwgKi8sCiAJCQkJN0M1QkVBM0MxRTlFRTc3MTAwQ0M1MTdCIC8qIE5h
dmlnYXRvck9uTGluZS5pZGwgKi8sCisJCQkJN0MwMTdDM0QyNDk2OUYxMzAwREMwQzAyIC8qIE5h
dmlnYXRvclBsdWdpbnMuaWRsICovLAogCQkJCTUxODJDMjRCMUYzMTNBRTAwMDU5QkE3QyAvKiBO
YXZpZ2F0b3JTZXJ2aWNlV29ya2VyLmlkbCAqLywKIAkJCQkxREM1NTNGRDIxMUJBMTJBMDA0Qjc4
MEUgLyogTmF2aWdhdG9yU2hhcmUuaWRsICovLAogCQkJCTAwMTQ2Mjg4MTAzQ0QxREUwMDBCMjBE
QiAvKiBPcmlnaW5BY2Nlc3NFbnRyeS5jcHAgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvU3ViZnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9TdWJmcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MywzMCArMTYz
LDI1IEBAIGJvb2wgRnJhbWVMb2FkZXI6OlN1YmZyYW1lTG9hZGVyOjpyZXF1ZXMKICAgICByZXR1
cm4gbG9hZFBsdWdpbihvd25lckVsZW1lbnQsIHVybCwgbWltZVR5cGUsIHBhcmFtTmFtZXMsIHBh
cmFtVmFsdWVzLCB1c2VGYWxsYmFjayk7CiB9CiAKLXN0YXRpYyBTdHJpbmcgZmluZFBsdWdpbk1J
TUVUeXBlRnJvbVVSTChQYWdlKiBwYWdlLCBjb25zdCBTdHJpbmcmIHVybCkKK3N0YXRpYyBTdHJp
bmcgZmluZFBsdWdpbk1JTUVUeXBlRnJvbVVSTChQYWdlJiBwYWdlLCBjb25zdCBTdHJpbmdWaWV3
JiB1cmwpCiB7CiAgICAgaWYgKCF1cmwpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKIAogICAgIHNpemVfdCBkb3RJbmRleCA9IHVybC5yZXZlcnNlRmluZCgn
LicpOwogICAgIGlmIChkb3RJbmRleCA9PSBub3RGb3VuZCkKLSAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgU3RyaW5nIGV4dGVuc2lvbiA9IHVybC5z
dWJzdHJpbmcoZG90SW5kZXggKyAxKTsKKyAgICBhdXRvIGV4dGVuc2lvbiA9IHVybC5zdWJzdHJp
bmcoZG90SW5kZXggKyAxKTsKIAotICAgIGNvbnN0IFBsdWdpbkRhdGEmIHBsdWdpbkRhdGEgPSBw
YWdlLT5wbHVnaW5EYXRhKCk7Ci0KLSAgICBWZWN0b3I8TWltZUNsYXNzSW5mbz4gbWltZXM7Ci0g
ICAgVmVjdG9yPHNpemVfdD4gbWltZVBsdWdpbkluZGljZXM7Ci0gICAgcGx1Z2luRGF0YS5nZXRX
ZWJWaXNpYmxlTWltZXNBbmRQbHVnaW5JbmRpY2VzKG1pbWVzLCBtaW1lUGx1Z2luSW5kaWNlcyk7
Ci0gICAgZm9yIChhdXRvJiBtaW1lIDogbWltZXMpIHsKLSAgICAgICAgZm9yIChhdXRvJiBtaW1l
RXh0ZW5zaW9uIDogbWltZS5leHRlbnNpb25zKSB7Ci0gICAgICAgICAgICBpZiAoZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZShleHRlbnNpb24sIG1pbWVFeHRlbnNpb24pKQotICAgICAgICAgICAgICAg
IHJldHVybiBtaW1lLnR5cGU7CisgICAgZm9yIChhdXRvJiBtaW1lVHlwZSA6IHBhZ2UucGx1Z2lu
RGF0YSgpLndlYlZpc2libGVNaW1lVHlwZXMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIG1pbWVU
eXBlRXh0ZW5zaW9uIDogbWltZVR5cGUuZXh0ZW5zaW9ucykgeworICAgICAgICAgICAgaWYgKGVx
dWFsSWdub3JpbmdBU0NJSUNhc2UoZXh0ZW5zaW9uLCBtaW1lVHlwZUV4dGVuc2lvbikpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1pbWVUeXBlLnR5cGU7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogc3RhdGljIHZvaWQgbG9n
UGx1Z2luUmVxdWVzdChQYWdlKiBwYWdlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBT
dHJpbmcmIHVybCwgYm9vbCBzdWNjZXNzKQpAQCAtMTk3LDcgKzE5Miw3IEBAIHN0YXRpYyB2b2lk
IGxvZ1BsdWdpblJlcXVlc3QoUGFnZSogcGFnZSwKICAgICBTdHJpbmcgbmV3TUlNRVR5cGUgPSBt
aW1lVHlwZTsKICAgICBpZiAoIW5ld01JTUVUeXBlKSB7CiAgICAgICAgIC8vIFRyeSB0byBmaWd1
cmUgb3V0IHRoZSBNSU1FIHR5cGUgZnJvbSB0aGUgVVJMIGV4dGVuc2lvbi4KLSAgICAgICAgbmV3
TUlNRVR5cGUgPSBmaW5kUGx1Z2luTUlNRVR5cGVGcm9tVVJMKHBhZ2UsIHVybCk7CisgICAgICAg
IG5ld01JTUVUeXBlID0gZmluZFBsdWdpbk1JTUVUeXBlRnJvbVVSTCgqcGFnZSwgdXJsKTsKICAg
ICAgICAgaWYgKCFuZXdNSU1FVHlwZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCShyZXZpc2lvbiAyNjMwMDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDkg
QEAKIAogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgorI2luY2x1
ZGUgIkRPTU1pbWVUeXBlLmgiCiAjaW5jbHVkZSAiRE9NTWltZVR5cGVBcnJheS5oIgorI2luY2x1
ZGUgIkRPTVBsdWdpbi5oIgogI2luY2x1ZGUgIkRPTVBsdWdpbkFycmF5LmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpAQCAtMTk1LDE0ICsxOTcsNTQgQEAgdm9p
ZCBOYXZpZ2F0b3I6OnNob3dTaGFyZURhdGEoRXhjZXB0aW9uTwogICAgIH0pOwogfQogCit2b2lk
IE5hdmlnYXRvcjo6aW5pdGlhbGl6ZVBsdWdpbkFuZE1JTUVUeXBlQXJyYXlzSWZOZWVkZWQoKQor
eworICAgIGlmIChtX3BsdWdpbnMpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIGZyYW1l
ID0gdGhpcy0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+cGFnZSgpKSB7Cisg
ICAgICAgIG1fcGx1Z2lucyA9IERPTVBsdWdpbkFycmF5OjpjcmVhdGUoKnRoaXMpOworICAgICAg
ICBtX21pbWVUeXBlcyA9IERPTU1pbWVUeXBlQXJyYXk6OmNyZWF0ZSgqdGhpcyk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIFtwdWJsaWNseVZpc2libGVQbHVnaW5zLCBhZGRp
dGlvbmFsV2ViVmlzaWJpbGVQbHVnaW5zXSA9IGZyYW1lLT5wYWdlKCktPnBsdWdpbkRhdGEoKS5w
dWJsaWNseVZpc2libGVQbHVnaW5zQW5kQWRkaXRpb25hbFdlYlZpc2libGVQbHVnaW5zKCk7CisK
KyAgICBWZWN0b3I8UmVmPERPTVBsdWdpbj4+IHB1YmxpY2x5VmlzaWJsZURPTVBsdWdpbnM7Cisg
ICAgVmVjdG9yPFJlZjxET01QbHVnaW4+PiBhZGRpdGlvbmFsV2ViVmlzaWJpbGVET01QbHVnaW5z
OworICAgIFZlY3RvcjxSZWY8RE9NTWltZVR5cGU+PiB3ZWJWaXNpYmlsZURPTU1pbWVUeXBlczsK
KworICAgIGlmIChwdWJsaWNseVZpc2libGVQbHVnaW5zLnNpemUoKSA+IDApIHsKKyAgICAgICAg
YWRkaXRpb25hbFdlYlZpc2liaWxlRE9NUGx1Z2lucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHB1
YmxpY2x5VmlzaWJsZVBsdWdpbnMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiBwbHVnaW4g
OiBwdWJsaWNseVZpc2libGVQbHVnaW5zKSB7CisgICAgICAgICAgICBhdXRvIGRvbVBsdWdpbiA9
IERPTVBsdWdpbjo6Y3JlYXRlKCp0aGlzLCBwbHVnaW4pOworICAgICAgICAgICAgZm9yIChhdXRv
JiBkb21NaW1lVHlwZSA6IGRvbVBsdWdpbi0+bWltZVR5cGVzKCkpCisgICAgICAgICAgICAgICAg
d2ViVmlzaWJpbGVET01NaW1lVHlwZXMuYXBwZW5kKGRvbU1pbWVUeXBlKTsKKyAgICAgICAgICAg
IGFkZGl0aW9uYWxXZWJWaXNpYmlsZURPTVBsdWdpbnMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUo
ZG9tUGx1Z2luKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGFkZGl0aW9uYWxXZWJWaXNp
YmlsZVBsdWdpbnMuc2l6ZSgpID4gMCkgeworICAgICAgICBhZGRpdGlvbmFsV2ViVmlzaWJpbGVE
T01QbHVnaW5zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYWRkaXRpb25hbFdlYlZpc2liaWxlUGx1
Z2lucy5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIHBsdWdpbiA6IGFkZGl0aW9uYWxXZWJW
aXNpYmlsZVBsdWdpbnMpIHsKKyAgICAgICAgICAgIGF1dG8gZG9tUGx1Z2luID0gRE9NUGx1Z2lu
OjpjcmVhdGUoKnRoaXMsIHBsdWdpbik7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGRvbU1pbWVU
eXBlIDogZG9tUGx1Z2luLT5taW1lVHlwZXMoKSkKKyAgICAgICAgICAgICAgICB3ZWJWaXNpYmls
ZURPTU1pbWVUeXBlcy5hcHBlbmQoZG9tTWltZVR5cGUpOworICAgICAgICAgICAgYWRkaXRpb25h
bFdlYlZpc2liaWxlRE9NUGx1Z2lucy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShkb21QbHVnaW4p
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBtX3BsdWdpbnMgPSBET01QbHVnaW5BcnJh
eTo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHB1YmxpY2x5VmlzaWJsZURPTVBsdWdpbnMpLCBXVEZN
b3ZlKGFkZGl0aW9uYWxXZWJWaXNpYmlsZURPTVBsdWdpbnMpKTsKKyAgICBtX21pbWVUeXBlcyA9
IERPTU1pbWVUeXBlQXJyYXk6OmNyZWF0ZSgqdGhpcywgV1RGTW92ZSh3ZWJWaXNpYmlsZURPTU1p
bWVUeXBlcykpOworfQorCiBET01QbHVnaW5BcnJheSYgTmF2aWdhdG9yOjpwbHVnaW5zKCkKIHsK
ICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSB7CiAgICAgICAgIGlmIChhdXRvKiBmcmFtZSA9IHRoaXMtPmZy
YW1lKCkpCiAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nTmF2
aWdhdG9yQVBJQWNjZXNzZWQoKmZyYW1lLT5kb2N1bWVudCgpLCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzOjpOYXZpZ2F0b3JBUEk6OlBsdWdpbnMpOwogICAgIH0KLSAgICBpZiAoIW1fcGx1Z2lucykK
LSAgICAgICAgbV9wbHVnaW5zID0gRE9NUGx1Z2luQXJyYXk6OmNyZWF0ZSgqdGhpcyk7CisgICAg
aW5pdGlhbGl6ZVBsdWdpbkFuZE1JTUVUeXBlQXJyYXlzSWZOZWVkZWQoKTsKICAgICByZXR1cm4g
Km1fcGx1Z2luczsKIH0KIApAQCAtMjEyLDggKzI1NCw3IEBAIERPTU1pbWVUeXBlQXJyYXkmIE5h
dmlnYXRvcjo6bWltZVR5cGVzKCkKICAgICAgICAgaWYgKGF1dG8qIGZyYW1lID0gdGhpcy0+ZnJh
bWUoKSkKICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dOYXZp
Z2F0b3JBUElBY2Nlc3NlZCgqZnJhbWUtPmRvY3VtZW50KCksIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3M6Ok5hdmlnYXRvckFQSTo6TWltZVR5cGVzKTsKICAgICB9Ci0gICAgaWYgKCFtX21pbWVUeXBl
cykKLSAgICAgICAgbV9taW1lVHlwZXMgPSBET01NaW1lVHlwZUFycmF5OjpjcmVhdGUoKnRoaXMp
OworICAgIGluaXRpYWxpemVQbHVnaW5BbmRNSU1FVHlwZUFycmF5c0lmTmVlZGVkKCk7CiAgICAg
cmV0dXJuICptX21pbWVUeXBlczsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9OYXZp
Z2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5oCShy
ZXZpc2lvbiAyNjMwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OCw2ICs2OCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzaG93U2hhcmVE
YXRhKEV4Y2VwdGlvbk9yPFNoYXJlRGF0YVdpdGhQYXJzZWRVUkwmPiwgUmVmPERlZmVycmVkUHJv
bWlzZT4mJik7CiAgICAgZXhwbGljaXQgTmF2aWdhdG9yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBET01XaW5kb3cmKTsKIAorICAgIHZvaWQgaW5pdGlhbGl6ZVBsdWdpbkFuZE1JTUVUeXBlQXJy
YXlzSWZOZWVkZWQoKTsKKwogICAgIG11dGFibGUgUmVmUHRyPFNoYXJlRGF0YVJlYWRlcj4gbV9s
b2FkZXI7CiAgICAgbXV0YWJsZSBib29sIG1faGFzUGVuZGluZ1NoYXJlIHsgZmFsc2UgfTsKICAg
ICBtdXRhYmxlIFJlZlB0cjxET01QbHVnaW5BcnJheT4gbV9wbHVnaW5zOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvTmF2aWdhdG9yLmlkbAkocmV2aXNpb24gMjYzMDA3KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9OYXZpZ2F0b3IuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMCArMjEsNyBAQAogICAg
IEdlbmVyYXRlSXNSZWFjaGFibGU9UmVhY2hhYmxlRnJvbURPTVdpbmRvdywKICAgICBKU0N1c3Rv
bU1hcmtGdW5jdGlvbiwKIF0gaW50ZXJmYWNlIE5hdmlnYXRvciB7Ci0gICAgcmVhZG9ubHkgYXR0
cmlidXRlIERPTVBsdWdpbkFycmF5IHBsdWdpbnM7Ci0gICAgcmVhZG9ubHkgYXR0cmlidXRlIERP
TU1pbWVUeXBlQXJyYXkgbWltZVR5cGVzOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFu
IGNvb2tpZUVuYWJsZWQ7Ci0gICAgYm9vbGVhbiBqYXZhRW5hYmxlZCgpOwogCiAgICAgW0NvbmRp
dGlvbmFsPU5BVklHQVRPUl9TVEFOREFMT05FXSByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBz
dGFuZGFsb25lOwogCkBAIC0zNSw1ICszMiw2IEBAIE5hdmlnYXRvciBpbXBsZW1lbnRzIE5hdmln
YXRvcklEOwogTmF2aWdhdG9yIGltcGxlbWVudHMgTmF2aWdhdG9yTGFuZ3VhZ2U7CiBOYXZpZ2F0
b3IgaW1wbGVtZW50cyBOYXZpZ2F0b3JNYXhUb3VjaFBvaW50czsKIE5hdmlnYXRvciBpbXBsZW1l
bnRzIE5hdmlnYXRvck9uTGluZTsKK05hdmlnYXRvciBpbXBsZW1lbnRzIE5hdmlnYXRvclBsdWdp
bnM7CiBOYXZpZ2F0b3IgaW1wbGVtZW50cyBOYXZpZ2F0b3JTZXJ2aWNlV29ya2VyOwogTmF2aWdh
dG9yIGltcGxlbWVudHMgTmF2aWdhdG9yU2hhcmU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L05hdmlnYXRvclBsdWdpbnMuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
TmF2aWdhdG9yUGx1Z2lucy5pZGwJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9OYXZpZ2F0b3JQbHVnaW5zLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworWworICAgIE5vSW50ZXJmYWNlT2JqZWN0CitdIGludGVyZmFjZSBOYXZpZ2F0
b3JQbHVnaW5zIHsKKyAgICBbU2FtZU9iamVjdF0gcmVhZG9ubHkgYXR0cmlidXRlIERPTVBsdWdp
bkFycmF5IHBsdWdpbnM7CisgICAgW1NhbWVPYmplY3RdIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01N
aW1lVHlwZUFycmF5IG1pbWVUeXBlczsKKyAgICBib29sZWFuIGphdmFFbmFibGVkKCk7Cit9OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01NaW1lVHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01NaW1lVHlwZS5jcHAJKHJldmlzaW9uIDI2MzAw
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NTWltZVR5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMCwyMyArMjAsMTYgQEAKICNpbmNsdWRlICJET01NaW1lVHlwZS5oIgogCiAjaW5j
bHVkZSAiRE9NUGx1Z2luLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxv
YWRlci5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCisjaW5j
bHVkZSAiTmF2aWdhdG9yLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLURPTU1pbWVUeXBlOjpET01NaW1lVHlwZShSZWZQdHI8
UGx1Z2luRGF0YT4mJiBwbHVnaW5EYXRhLCBGcmFtZSogZnJhbWUsIHVuc2lnbmVkIGluZGV4KQot
ICAgIDogRnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyKGZyYW1lKQotICAgICwgbV9wbHVnaW5EYXRh
KFdURk1vdmUocGx1Z2luRGF0YSkpCitET01NaW1lVHlwZTo6RE9NTWltZVR5cGUoTmF2aWdhdG9y
JiBuYXZpZ2F0b3IsIGNvbnN0IE1pbWVDbGFzc0luZm8mIGluZm8sIERPTVBsdWdpbiYgZW5hYmxl
ZFBsdWdpbikKKyAgICA6IG1fbmF2aWdhdG9yKG1ha2VXZWFrUHRyKG5hdmlnYXRvcikpCisgICAg
LCBtX21pbWVDbGFzc0luZm8oaW5mbykKKyAgICAsIG1fZW5hYmxlZFBsdWdpbihtYWtlV2Vha1B0
cihlbmFibGVkUGx1Z2luKSkKIHsKLSAgICBWZWN0b3I8TWltZUNsYXNzSW5mbz4gbWltZXM7Ci0g
ICAgVmVjdG9yPHNpemVfdD4gbWltZVBsdWdpbkluZGljZXM7Ci0gICAgbV9wbHVnaW5EYXRhLT5n
ZXRXZWJWaXNpYmxlTWltZXNBbmRQbHVnaW5JbmRpY2VzKG1pbWVzLCBtaW1lUGx1Z2luSW5kaWNl
cyk7Ci0gICAgbV9taW1lQ2xhc3NJbmZvID0gbWltZXNbaW5kZXhdOwotICAgIG1fcGx1Z2luSW5m
byA9IG1fcGx1Z2luRGF0YS0+d2ViVmlzaWJsZVBsdWdpbnMoKVttaW1lUGx1Z2luSW5kaWNlc1tp
bmRleF1dOwogfQogCiBET01NaW1lVHlwZTo6fkRPTU1pbWVUeXBlKCkgPSBkZWZhdWx0OwpAQCAt
NDgsMTMgKzQxLDExIEBAIFN0cmluZyBET01NaW1lVHlwZTo6dHlwZSgpIGNvbnN0CiAKIFN0cmlu
ZyBET01NaW1lVHlwZTo6c3VmZml4ZXMoKSBjb25zdAogewotICAgIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBleHRlbnNpb25zID0gbV9taW1lQ2xhc3NJbmZvLmV4dGVuc2lvbnM7Ci0KICAgICBTdHJp
bmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBleHRlbnNpb25z
LnNpemUoKTsgKytpKSB7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX21pbWVDbGFzc0lu
Zm8uZXh0ZW5zaW9ucy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAoaSkKICAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCcsJyk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGV4dGVuc2lvbnNb
aV0pOworICAgICAgICBidWlsZGVyLmFwcGVuZChtX21pbWVDbGFzc0luZm8uZXh0ZW5zaW9uc1tp
XSk7CiAgICAgfQogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CkBAIC02NiwxMyAr
NTcsNyBAQCBTdHJpbmcgRE9NTWltZVR5cGU6OmRlc2NyaXB0aW9uKCkgY29uc3QKIAogUmVmUHRy
PERPTVBsdWdpbj4gRE9NTWltZVR5cGU6OmVuYWJsZWRQbHVnaW4oKSBjb25zdAogewotICAgIGlm
ICghbV9mcmFtZSB8fCAhbV9mcmFtZS0+cGFnZSgpIHx8ICFtX2ZyYW1lLT5wYWdlKCktPm1haW5G
cmFtZSgpLmxvYWRlcigpLmFyZVBsdWdpbnNFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgVmVjdG9yPE1pbWVDbGFzc0luZm8+IG1pbWVzOwotICAgIFZlY3RvcjxzaXpl
X3Q+IG1pbWVQbHVnaW5JbmRpY2VzOwotICAgIG1fcGx1Z2luRGF0YS0+Z2V0V2ViVmlzaWJsZU1p
bWVzQW5kUGx1Z2luSW5kaWNlcyhtaW1lcywgbWltZVBsdWdpbkluZGljZXMpOwotICAgIHJldHVy
biBET01QbHVnaW46OmNyZWF0ZShtX3BsdWdpbkRhdGEuZ2V0KCksIG1fZnJhbWUsIG1fcGx1Z2lu
SW5mbyk7CisgICAgcmV0dXJuIG1fZW5hYmxlZFBsdWdpbi5nZXQoKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01NaW1lVHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NTWltZVR5cGUuaAkocmV2
aXNpb24gMjYzMDA3KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01NaW1lVHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xOSwxOCArMTksMTkgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNs
dWRlICJGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJQbHVnaW5EYXRhLmgi
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBE
T01QbHVnaW47CitjbGFzcyBOYXZpZ2F0b3I7CiAKLWNsYXNzIERPTU1pbWVUeXBlIDogcHVibGlj
IFJlZkNvdW50ZWQ8RE9NTWltZVR5cGU+LCBwdWJsaWMgRnJhbWVEZXN0cnVjdGlvbk9ic2VydmVy
IHsKK2NsYXNzIERPTU1pbWVUeXBlIDogcHVibGljIFJlZkNvdW50ZWQ8RE9NTWltZVR5cGU+IHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERPTU1pbWVUeXBlPiBjcmVhdGUoUmVmUHRyPFBsdWdp
bkRhdGE+JiYgcGx1Z2luRGF0YSwgRnJhbWUqIGZyYW1lLCB1bnNpZ25lZCBpbmRleCkgeyByZXR1
cm4gYWRvcHRSZWYoKm5ldyBET01NaW1lVHlwZShXVEZNb3ZlKHBsdWdpbkRhdGEpLCBmcmFtZSwg
aW5kZXgpKTsgfQorICAgIHN0YXRpYyBSZWY8RE9NTWltZVR5cGU+IGNyZWF0ZShOYXZpZ2F0b3Im
IG5hdmlnYXRvciwgY29uc3QgTWltZUNsYXNzSW5mbyYgaW5mbywgRE9NUGx1Z2luJiBlbmFibGVk
UGx1Z2luKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IERPTU1pbWVUeXBlKG5hdmlnYXRvciwgaW5m
bywgZW5hYmxlZFBsdWdpbikpOyB9CiAgICAgfkRPTU1pbWVUeXBlKCk7CiAKICAgICBTdHJpbmcg
dHlwZSgpIGNvbnN0OwpAQCAtMzgsMTEgKzM5LDE0IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgZGVz
Y3JpcHRpb24oKSBjb25zdDsKICAgICBSZWZQdHI8RE9NUGx1Z2luPiBlbmFibGVkUGx1Z2luKCkg
Y29uc3Q7CiAKKyAgICBOYXZpZ2F0b3IqIG5hdmlnYXRvcigpIHsgcmV0dXJuIG1fbmF2aWdhdG9y
LmdldCgpOyB9CisKIHByaXZhdGU6Ci0gICAgRE9NTWltZVR5cGUoUmVmUHRyPFBsdWdpbkRhdGE+
JiYsIEZyYW1lKiwgdW5zaWduZWQgaW5kZXgpOworICAgIERPTU1pbWVUeXBlKE5hdmlnYXRvciYs
IGNvbnN0IE1pbWVDbGFzc0luZm8mLCBET01QbHVnaW4mKTsKKworICAgIFdlYWtQdHI8TmF2aWdh
dG9yPiBtX25hdmlnYXRvcjsKICAgICBNaW1lQ2xhc3NJbmZvIG1fbWltZUNsYXNzSW5mbzsKLSAg
ICBSZWZQdHI8UGx1Z2luRGF0YT4gbV9wbHVnaW5EYXRhOwotICAgIFBsdWdpbkluZm8gbV9wbHVn
aW5JbmZvOworICAgIFdlYWtQdHI8RE9NUGx1Z2luPiBtX2VuYWJsZWRQbHVnaW47CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTU1p
bWVUeXBlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTU1pbWVU
eXBlLmlkbAkocmV2aXNpb24gMjYzMDA3KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01N
aW1lVHlwZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTE5LDcgKzE5LDkgQEAKICovCiAKIFsKLSAg
ICBJbnRlcmZhY2VOYW1lPU1pbWVUeXBlCisgICAgSW50ZXJmYWNlTmFtZT1NaW1lVHlwZSwKKyAg
ICBHZW5lcmF0ZUlzUmVhY2hhYmxlPVJlYWNoYWJsZUZyb21OYXZpZ2F0b3IsCisgICAgSW1wbGVt
ZW50YXRpb25MYWNrc1ZUYWJsZQogXSBpbnRlcmZhY2UgRE9NTWltZVR5cGUgewogICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdHlwZTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9N
U3RyaW5nIHN1ZmZpeGVzOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01NaW1lVHlw
ZUFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTU1pbWVU
eXBlQXJyYXkuY3BwCShyZXZpc2lvbiAyNjMwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L0RPTU1pbWVUeXBlQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxMCArMjAsOCBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRPTU1pbWVUeXBlQXJyYXkuaCIKIAotI2lu
Y2x1ZGUgIkRPTVBsdWdpbi5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiUGFnZS5o
IgotI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKKyNpbmNsdWRlICJET01NaW1lVHlwZS5oIgorI2lu
Y2x1ZGUgIk5hdmlnYXRvci5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgogCkBAIC0zMSw4ICsyOSw5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKERPTU1pbWVUeXBl
QXJyYXkpOwogCi1ET01NaW1lVHlwZUFycmF5OjpET01NaW1lVHlwZUFycmF5KE5hdmlnYXRvciYg
bmF2aWdhdG9yKQorRE9NTWltZVR5cGVBcnJheTo6RE9NTWltZVR5cGVBcnJheShOYXZpZ2F0b3Im
IG5hdmlnYXRvciwgVmVjdG9yPFJlZjxET01NaW1lVHlwZT4+JiYgbWltZVR5cGVzKQogICAgIDog
bV9uYXZpZ2F0b3IobWFrZVdlYWtQdHIobmF2aWdhdG9yKSkKKyAgICAsIG1fbWltZVR5cGVzKG1p
bWVUeXBlcykKIHsKIH0KIApAQCAtNDAsNzYgKzM5LDMyIEBAIERPTU1pbWVUeXBlQXJyYXk6On5E
T01NaW1lVHlwZUFycmF5KCkgPSAKIAogdW5zaWduZWQgRE9NTWltZVR5cGVBcnJheTo6bGVuZ3Ro
KCkgY29uc3QKIHsKLSAgICBQbHVnaW5EYXRhKiBkYXRhID0gZ2V0UGx1Z2luRGF0YSgpOwotICAg
IGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBWZWN0b3I8TWltZUNsYXNzSW5m
bz4gbWltZXM7Ci0gICAgVmVjdG9yPHNpemVfdD4gbWltZVBsdWdpbkluZGljZXM7Ci0gICAgZGF0
YS0+Z2V0V2ViVmlzaWJsZU1pbWVzQW5kUGx1Z2luSW5kaWNlcyhtaW1lcywgbWltZVBsdWdpbklu
ZGljZXMpOwotICAgIHJldHVybiBtaW1lcy5zaXplKCk7CisgICAgcmV0dXJuIG1fbWltZVR5cGVz
LnNpemUoKTsKIH0KIAogUmVmUHRyPERPTU1pbWVUeXBlPiBET01NaW1lVHlwZUFycmF5OjppdGVt
KHVuc2lnbmVkIGluZGV4KQogewotICAgIFBsdWdpbkRhdGEqIGRhdGEgPSBnZXRQbHVnaW5EYXRh
KCk7Ci0gICAgaWYgKCFkYXRhKQorICAgIGlmIChpbmRleCA+PSBtX21pbWVUeXBlcy5zaXplKCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgVmVjdG9yPE1pbWVDbGFzc0luZm8+IG1p
bWVzOwotICAgIFZlY3RvcjxzaXplX3Q+IG1pbWVQbHVnaW5JbmRpY2VzOwotICAgIGRhdGEtPmdl
dFdlYlZpc2libGVNaW1lc0FuZFBsdWdpbkluZGljZXMobWltZXMsIG1pbWVQbHVnaW5JbmRpY2Vz
KTsKLQotICAgIGlmIChpbmRleCA+PSBtaW1lcy5zaXplKCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIHJldHVybiBET01NaW1lVHlwZTo6Y3JlYXRlKGRhdGEsIGZyYW1lKCksIGluZGV4
KTsKKyAgICByZXR1cm4gbV9taW1lVHlwZXNbaW5kZXhdLnB0cigpOwogfQogCiBSZWZQdHI8RE9N
TWltZVR5cGU+IERPTU1pbWVUeXBlQXJyYXk6Om5hbWVkSXRlbShjb25zdCBBdG9tU3RyaW5nJiBw
cm9wZXJ0eU5hbWUpCiB7Ci0gICAgUGx1Z2luRGF0YSogZGF0YSA9IGdldFBsdWdpbkRhdGEoKTsK
LSAgICBpZiAoIWRhdGEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgVmVjdG9yPE1p
bWVDbGFzc0luZm8+IG1pbWVzOwotICAgIFZlY3RvcjxzaXplX3Q+IG1pbWVQbHVnaW5JbmRpY2Vz
OwotICAgIGRhdGEtPmdldFdlYlZpc2libGVNaW1lc0FuZFBsdWdpbkluZGljZXMobWltZXMsIG1p
bWVQbHVnaW5JbmRpY2VzKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWltZXMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1pbWVzW2ldLnR5cGUgPT0gcHJvcGVydHlOYW1lKQot
ICAgICAgICAgICAgcmV0dXJuIERPTU1pbWVUeXBlOjpjcmVhdGUoZGF0YSwgZnJhbWUoKSwgaSk7
CisgICAgZm9yIChhdXRvJiBtaW1lVHlwZSA6IG1fbWltZVR5cGVzKSB7CisgICAgICAgIGlmICht
aW1lVHlwZS0+dHlwZSgpID09IHByb3BlcnR5TmFtZSkKKyAgICAgICAgICAgIHJldHVybiBtaW1l
VHlwZS5wdHIoKTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIFZlY3RvcjxBdG9t
U3RyaW5nPiBET01NaW1lVHlwZUFycmF5OjpzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkKIHsKLSAg
ICBQbHVnaW5EYXRhKiBkYXRhID0gZ2V0UGx1Z2luRGF0YSgpOwotICAgIGlmICghZGF0YSkKLSAg
ICAgICAgcmV0dXJuIHsgfTsKLQotICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiBtaW1lczsKLSAg
ICBWZWN0b3I8c2l6ZV90PiBtaW1lUGx1Z2luSW5kaWNlczsKLSAgICBkYXRhLT5nZXRXZWJWaXNp
YmxlTWltZXNBbmRQbHVnaW5JbmRpY2VzKG1pbWVzLCBtaW1lUGx1Z2luSW5kaWNlcyk7Ci0KICAg
ICBWZWN0b3I8QXRvbVN0cmluZz4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KG1pbWVzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBpbmZvIDogbWltZXMpCi0gICAg
ICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShpbmZvLnR5cGUpKTsKLQorICAgIHJl
c3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fbWltZVR5cGVzLnNpemUoKSk7CisgICAgZm9y
IChhdXRvJiBtaW1lVHlwZSA6IG1fbWltZVR5cGVzKQorICAgICAgICByZXN1bHQudW5jaGVja2Vk
QXBwZW5kKG1pbWVUeXBlLT50eXBlKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVBsdWdp
bkRhdGEqIERPTU1pbWVUeXBlQXJyYXk6OmdldFBsdWdpbkRhdGEoKSBjb25zdAotewotICAgIGF1
dG8qIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIGF1dG8qIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwotICAgIGlmICgh
cGFnZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gJnBhZ2UtPnBsdWdp
bkRhdGEoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9ET01NaW1lVHlwZUFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9ET01NaW1lVHlwZUFycmF5LmgJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvRE9NTWltZVR5cGVBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MCwzNCArMjAsMzUgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJET01NaW1lVHlwZS5o
IgotI2luY2x1ZGUgIk5hdmlnYXRvci5oIgogI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgor
I2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIFBsdWdpbkRhdGE7CitjbGFzcyBET01NaW1lVHlwZTsKK2NsYXNz
IE5hdmlnYXRvcjsKIAogY2xhc3MgRE9NTWltZVR5cGVBcnJheSBmaW5hbCA6IHB1YmxpYyBTY3Jp
cHRXcmFwcGFibGUsIHB1YmxpYyBSZWZDb3VudGVkPERPTU1pbWVUeXBlQXJyYXk+IHsKICAgICBX
VEZfTUFLRV9JU09fQUxMT0NBVEVEKERPTU1pbWVUeXBlQXJyYXkpOwogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8RE9NTWltZVR5cGVBcnJheT4gY3JlYXRlKE5hdmlnYXRvciYgbmF2aWdhdG9yKSB7
IHJldHVybiBhZG9wdFJlZigqbmV3IERPTU1pbWVUeXBlQXJyYXkobmF2aWdhdG9yKSk7IH0KKyAg
ICBzdGF0aWMgUmVmPERPTU1pbWVUeXBlQXJyYXk+IGNyZWF0ZShOYXZpZ2F0b3ImIG5hdmlnYXRv
ciwgVmVjdG9yPFJlZjxET01NaW1lVHlwZT4+JiYgbWltZVR5cGVzID0geyB9KSB7IHJldHVybiBh
ZG9wdFJlZigqbmV3IERPTU1pbWVUeXBlQXJyYXkobmF2aWdhdG9yLCBXVEZNb3ZlKG1pbWVUeXBl
cykpKTsgfQogICAgIH5ET01NaW1lVHlwZUFycmF5KCk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGgo
KSBjb25zdDsKICAgICBSZWZQdHI8RE9NTWltZVR5cGU+IGl0ZW0odW5zaWduZWQgaW5kZXgpOwog
ICAgIFJlZlB0cjxET01NaW1lVHlwZT4gbmFtZWRJdGVtKGNvbnN0IEF0b21TdHJpbmcmIHByb3Bl
cnR5TmFtZSk7CiAgICAgVmVjdG9yPEF0b21TdHJpbmc+IHN1cHBvcnRlZFByb3BlcnR5TmFtZXMo
KTsKLSAgICAKKwogICAgIE5hdmlnYXRvciogbmF2aWdhdG9yKCkgeyByZXR1cm4gbV9uYXZpZ2F0
b3IuZ2V0KCk7IH0KIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBET01NaW1lVHlwZUFycmF5KE5h
dmlnYXRvciYpOwotICAgIFBsdWdpbkRhdGEqIGdldFBsdWdpbkRhdGEoKSBjb25zdDsKLSAgICBG
cmFtZSogZnJhbWUoKSBjb25zdCB7IHJldHVybiBtX25hdmlnYXRvciA/IG1fbmF2aWdhdG9yLT5m
cmFtZSgpIDogbnVsbHB0cjsgfQorICAgIGV4cGxpY2l0IERPTU1pbWVUeXBlQXJyYXkoTmF2aWdh
dG9yJiwgVmVjdG9yPFJlZjxET01NaW1lVHlwZT4+JiYgbWltZVR5cGVzKTsKICAgICAKICAgICBX
ZWFrUHRyPE5hdmlnYXRvcj4gbV9uYXZpZ2F0b3I7CisgICAgVmVjdG9yPFJlZjxET01NaW1lVHlw
ZT4+IG1fbWltZVR5cGVzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01QbHVnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2luLmNwcAkocmV2aXNpb24gMjYzMDA3KQorKysgU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9ET01QbHVnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOSw4ICsx
OSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRE9NUGx1Z2luLmgiCiAKLSNp
bmNsdWRlICJQbHVnaW5EYXRhLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJET01N
aW1lVHlwZS5oIgorI2luY2x1ZGUgIk5hdmlnYXRvci5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgogCkBAIC0yOCwx
MSArMjgsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVE
X0lNUEwoRE9NUGx1Z2luKTsKIAotRE9NUGx1Z2luOjpET01QbHVnaW4oUGx1Z2luRGF0YSogcGx1
Z2luRGF0YSwgRnJhbWUqIGZyYW1lLCBQbHVnaW5JbmZvIHBsdWdpbkluZm8pCi0gICAgOiBGcmFt
ZURlc3RydWN0aW9uT2JzZXJ2ZXIoZnJhbWUpCi0gICAgLCBtX3BsdWdpbkRhdGEocGx1Z2luRGF0
YSkKLSAgICAsIG1fcGx1Z2luSW5mbyhXVEZNb3ZlKHBsdWdpbkluZm8pKQoteworRE9NUGx1Z2lu
OjpET01QbHVnaW4oTmF2aWdhdG9yJiBuYXZpZ2F0b3IsIGNvbnN0IFBsdWdpbkluZm8mIHBsdWdp
bkluZm8pCisgICAgOiBtX25hdmlnYXRvcihtYWtlV2Vha1B0cihuYXZpZ2F0b3IpKQorICAgICwg
bV9wbHVnaW5JbmZvKHBsdWdpbkluZm8pCit7CisgICAgbV9taW1lVHlwZXMucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShtX3BsdWdpbkluZm8ubWltZXMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIG1p
bWVUeXBlIDogbV9wbHVnaW5JbmZvLm1pbWVzKQorICAgICAgICBtX21pbWVUeXBlcy51bmNoZWNr
ZWRBcHBlbmQoRE9NTWltZVR5cGU6OmNyZWF0ZShuYXZpZ2F0b3IsIG1pbWVUeXBlLCAqdGhpcykp
OworCisgICAgc3RkOjpzb3J0KG1fbWltZVR5cGVzLmJlZ2luKCksIG1fbWltZVR5cGVzLmVuZCgp
LCBbXShjb25zdCBSZWY8RE9NTWltZVR5cGU+JiBhLCBjb25zdCBSZWY8RE9NTWltZVR5cGU+JiBi
KSB7CisgICAgICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlTGVzc1RoYW4oYS0+dHlwZSgpLCBi
LT50eXBlKCkpOworICAgIH0pOwogfQogCiBET01QbHVnaW46On5ET01QbHVnaW4oKSA9IGRlZmF1
bHQ7CkBAIC01OSw0MCArNjUsMjcgQEAgdW5zaWduZWQgRE9NUGx1Z2luOjpsZW5ndGgoKSBjb25z
dAogCiBSZWZQdHI8RE9NTWltZVR5cGU+IERPTVBsdWdpbjo6aXRlbSh1bnNpZ25lZCBpbmRleCkK
IHsKLSAgICBpZiAoaW5kZXggPj0gbV9wbHVnaW5JbmZvLm1pbWVzLnNpemUoKSB8fCAhbV9mcmFt
ZSB8fCAhbV9mcmFtZS0+cGFnZSgpKQorICAgIGlmIChpbmRleCA+PSBtX21pbWVUeXBlcy5zaXpl
KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgTWltZUNsYXNzSW5mbyBtaW1lID0g
bV9wbHVnaW5JbmZvLm1pbWVzW2luZGV4XTsKLQotICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiBt
aW1lczsKLSAgICBWZWN0b3I8c2l6ZV90PiBtaW1lUGx1Z2luSW5kaWNlczsKLSAgICBWZWN0b3I8
UGx1Z2luSW5mbz4gcGx1Z2lucyA9IG1fcGx1Z2luRGF0YS0+d2ViVmlzaWJsZVBsdWdpbnMoKTsK
LSAgICBtX3BsdWdpbkRhdGEtPmdldFdlYlZpc2libGVNaW1lc0FuZFBsdWdpbkluZGljZXMobWlt
ZXMsIG1pbWVQbHVnaW5JbmRpY2VzKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWlt
ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1pbWVzW2ldID09IG1pbWUgJiYgcGx1Z2lu
c1ttaW1lUGx1Z2luSW5kaWNlc1tpXV0gPT0gbV9wbHVnaW5JbmZvKQotICAgICAgICAgICAgcmV0
dXJuIERPTU1pbWVUeXBlOjpjcmVhdGUobV9wbHVnaW5EYXRhLmdldCgpLCBtX2ZyYW1lLCBpKTsK
LSAgICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG1fbWltZVR5cGVzW2luZGV4
XS5wdHIoKTsKIH0KIAogUmVmUHRyPERPTU1pbWVUeXBlPiBET01QbHVnaW46Om5hbWVkSXRlbShj
b25zdCBBdG9tU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgaWYgKCFtX2ZyYW1lIHx8ICFt
X2ZyYW1lLT5wYWdlKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgVmVjdG9yPE1p
bWVDbGFzc0luZm8+IG1pbWVzOwotICAgIFZlY3RvcjxzaXplX3Q+IG1pbWVQbHVnaW5JbmRpY2Vz
OwotICAgIG1fcGx1Z2luRGF0YS0+Z2V0V2ViVmlzaWJsZU1pbWVzQW5kUGx1Z2luSW5kaWNlcyht
aW1lcywgbWltZVBsdWdpbkluZGljZXMpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
aW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAgaWYgKG1pbWVzW2ldLnR5cGUgPT0gcHJvcGVydHlO
YW1lKQotICAgICAgICAgICAgcmV0dXJuIERPTU1pbWVUeXBlOjpjcmVhdGUobV9wbHVnaW5EYXRh
LmdldCgpLCBtX2ZyYW1lLCBpKTsKKyAgICBmb3IgKGF1dG8mIG1pbWVUeXBlIDogbV9taW1lVHlw
ZXMpIHsKKyAgICAgICAgaWYgKG1pbWVUeXBlLT50eXBlKCkgPT0gcHJvcGVydHlOYW1lKQorICAg
ICAgICAgICAgcmV0dXJuIG1pbWVUeXBlLnB0cigpOworICAgIH0KICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAogVmVjdG9yPEF0b21TdHJpbmc+IERPTVBsdWdpbjo6c3VwcG9ydGVkUHJvcGVydHlO
YW1lcygpCiB7Ci0gICAgLy8gRklYTUU6IFNob3VsZCBiZSBpbXBsZW1lbnRlZC4KLSAgICByZXR1
cm4gVmVjdG9yPEF0b21TdHJpbmc+KCk7CisgICAgVmVjdG9yPEF0b21TdHJpbmc+IHJlc3VsdDsK
KyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX21pbWVUeXBlcy5zaXplKCkpOwor
ICAgIGZvciAoYXV0byYgbWltZVR5cGUgOiBtX21pbWVUeXBlcykKKyAgICAgICAgcmVzdWx0LnVu
Y2hlY2tlZEFwcGVuZChtaW1lVHlwZS0+dHlwZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RP
TVBsdWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2lu
LmgJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2lu
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5LDIxICsxOSwyMSBAQAogCiAjcHJhZ21hIG9uY2UKIAot
I2luY2x1ZGUgIkZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlci5oIgotI2luY2x1ZGUgIkRPTU1pbWVU
eXBlLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgogI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJs
ZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgUGx1Z2luOwotY2xhc3MgUGx1Z2luRGF0YTsKK2NsYXNzIERPTU1pbWVUeXBlOworY2xhc3Mg
TmF2aWdhdG9yOwogCi1jbGFzcyBET01QbHVnaW4gZmluYWwgOiBwdWJsaWMgU2NyaXB0V3JhcHBh
YmxlLCBwdWJsaWMgUmVmQ291bnRlZDxET01QbHVnaW4+LCBwdWJsaWMgRnJhbWVEZXN0cnVjdGlv
bk9ic2VydmVyIHsKK2NsYXNzIERPTVBsdWdpbiBmaW5hbCA6IHB1YmxpYyBTY3JpcHRXcmFwcGFi
bGUsIHB1YmxpYyBSZWZDb3VudGVkPERPTVBsdWdpbj4sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxE
T01QbHVnaW4+IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKERPTVBsdWdpbik7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxET01QbHVnaW4+IGNyZWF0ZShQbHVnaW5EYXRhKiBwbHVnaW5E
YXRhLCBGcmFtZSogZnJhbWUsIFBsdWdpbkluZm8gcGx1Z2luSW5mbykgeyByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBET01QbHVnaW4ocGx1Z2luRGF0YSwgZnJhbWUsIFdURk1vdmUocGx1Z2luSW5mbykp
KTsgfQorICAgIHN0YXRpYyBSZWY8RE9NUGx1Z2luPiBjcmVhdGUoTmF2aWdhdG9yJiBuYXZpZ2F0
b3IsIGNvbnN0IFBsdWdpbkluZm8mIHBsdWdpbkluZm8pIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RE9NUGx1Z2luKG5hdmlnYXRvciwgcGx1Z2luSW5mbykpOyB9CiAgICAgfkRPTVBsdWdpbigpOwog
CiAgICAgU3RyaW5nIG5hbWUoKSBjb25zdDsKQEAgLTQ2LDEwICs0NiwxNiBAQCBwdWJsaWM6CiAg
ICAgUmVmUHRyPERPTU1pbWVUeXBlPiBuYW1lZEl0ZW0oY29uc3QgQXRvbVN0cmluZyYgcHJvcGVy
dHlOYW1lKTsKICAgICBWZWN0b3I8QXRvbVN0cmluZz4gc3VwcG9ydGVkUHJvcGVydHlOYW1lcygp
OwogCisgICAgY29uc3QgVmVjdG9yPFJlZjxET01NaW1lVHlwZT4+JiBtaW1lVHlwZXMoKSBjb25z
dCB7IHJldHVybiBtX21pbWVUeXBlczsgfQorCisgICAgTmF2aWdhdG9yKiBuYXZpZ2F0b3IoKSB7
IHJldHVybiBtX25hdmlnYXRvci5nZXQoKTsgfQorCiBwcml2YXRlOgotICAgIERPTVBsdWdpbihQ
bHVnaW5EYXRhKiwgRnJhbWUqLCBQbHVnaW5JbmZvKTsKLSAgICBSZWZQdHI8UGx1Z2luRGF0YT4g
bV9wbHVnaW5EYXRhOworICAgIERPTVBsdWdpbihOYXZpZ2F0b3ImLCBjb25zdCBQbHVnaW5JbmZv
Jik7CisKKyAgICBXZWFrUHRyPE5hdmlnYXRvcj4gbV9uYXZpZ2F0b3I7CiAgICAgUGx1Z2luSW5m
byBtX3BsdWdpbkluZm87CisgICAgVmVjdG9yPFJlZjxET01NaW1lVHlwZT4+IG1fbWltZVR5cGVz
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1
Z2lucy9ET01QbHVnaW4uaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
RE9NUGx1Z2luLmlkbAkocmV2aXNpb24gMjYzMDA3KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy9ET01QbHVnaW4uaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw2ICsyMCw4IEBACiAKIFsKICAg
ICBJbnRlcmZhY2VOYW1lPVBsdWdpbiwKKyAgICBHZW5lcmF0ZUlzUmVhY2hhYmxlPVJlYWNoYWJs
ZUZyb21OYXZpZ2F0b3IsCisgICAgSW1wbGVtZW50YXRpb25MYWNrc1ZUYWJsZSwKICAgICBMZWdh
Y3lVbmVudW1lcmFibGVOYW1lZFByb3BlcnRpZXMKIF0gaW50ZXJmYWNlIERPTVBsdWdpbiB7CiAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBuYW1lOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9ET01QbHVnaW5BcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9ET01QbHVnaW5BcnJheS5jcHAJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2luQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Myw3ICsyMyw2IEBACiAjaW5jbHVkZSAiRE9NUGx1Z2luLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgogI2luY2x1ZGUgPHd0
Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgog
CkBAIC0zMSw4ICszMCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdURl9NQUtFX0lTT19B
TExPQ0FURURfSU1QTChET01QbHVnaW5BcnJheSk7CiAKLURPTVBsdWdpbkFycmF5OjpET01QbHVn
aW5BcnJheShOYXZpZ2F0b3ImIG5hdmlnYXRvcikKK0RPTVBsdWdpbkFycmF5OjpET01QbHVnaW5B
cnJheShOYXZpZ2F0b3ImIG5hdmlnYXRvciwgVmVjdG9yPFJlZjxET01QbHVnaW4+PiYmIHB1Ymxp
Y2x5VmlzaWJsZVBsdWdpbnMsIFZlY3RvcjxSZWY8RE9NUGx1Z2luPj4mJiBhZGRpdGlvbmFsV2Vi
VmlzaWJpbGVQbHVnaW5zKQogICAgIDogbV9uYXZpZ2F0b3IobWFrZVdlYWtQdHIobmF2aWdhdG9y
KSkKKyAgICAsIG1fcHVibGljbHlWaXNpYmxlUGx1Z2lucyhwdWJsaWNseVZpc2libGVQbHVnaW5z
KQorICAgICwgbV9hZGRpdGlvbmFsV2ViVmlzaWJpbGVQbHVnaW5zKGFkZGl0aW9uYWxXZWJWaXNp
YmlsZVBsdWdpbnMpCiB7CiB9CiAKQEAgLTQwLDUxICs0MSwzNyBAQCBET01QbHVnaW5BcnJheTo6
fkRPTVBsdWdpbkFycmF5KCkgPSBkZWZhCiAKIHVuc2lnbmVkIERPTVBsdWdpbkFycmF5OjpsZW5n
dGgoKSBjb25zdAogewotICAgIFBsdWdpbkRhdGEqIGRhdGEgPSBwbHVnaW5EYXRhKCk7Ci0gICAg
aWYgKCFkYXRhKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBkYXRhLT5wdWJsaWNs
eVZpc2libGVQbHVnaW5zKCkuc2l6ZSgpOworICAgIHJldHVybiBtX3B1YmxpY2x5VmlzaWJsZVBs
dWdpbnMuc2l6ZSgpOwogfQogCiBSZWZQdHI8RE9NUGx1Z2luPiBET01QbHVnaW5BcnJheTo6aXRl
bSh1bnNpZ25lZCBpbmRleCkKIHsKLSAgICBQbHVnaW5EYXRhKiBkYXRhID0gcGx1Z2luRGF0YSgp
OwotICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBjb25zdCBW
ZWN0b3I8UGx1Z2luSW5mbz4mIHBsdWdpbnMgPSBkYXRhLT5wdWJsaWNseVZpc2libGVQbHVnaW5z
KCk7Ci0gICAgaWYgKGluZGV4ID49IHBsdWdpbnMuc2l6ZSgpKQorICAgIGlmIChpbmRleCA+PSBt
X3B1YmxpY2x5VmlzaWJsZVBsdWdpbnMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICByZXR1cm4gRE9NUGx1Z2luOjpjcmVhdGUoZGF0YSwgZnJhbWUoKSwgcGx1Z2luc1tpbmRl
eF0pOworICAgIHJldHVybiBtX3B1YmxpY2x5VmlzaWJsZVBsdWdpbnNbaW5kZXhdLnB0cigpOwog
fQogCiBSZWZQdHI8RE9NUGx1Z2luPiBET01QbHVnaW5BcnJheTo6bmFtZWRJdGVtKGNvbnN0IEF0
b21TdHJpbmcmIHByb3BlcnR5TmFtZSkKIHsKLSAgICBQbHVnaW5EYXRhKiBkYXRhID0gcGx1Z2lu
RGF0YSgpOwotICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgZm9y
IChhdXRvJiBwbHVnaW4gOiBtX3B1YmxpY2x5VmlzaWJsZVBsdWdpbnMpIHsKKyAgICAgICAgaWYg
KHBsdWdpbi0+bmFtZSgpID09IHByb3BlcnR5TmFtZSkKKyAgICAgICAgICAgIHJldHVybiBwbHVn
aW4ucHRyKCk7CisgICAgfQogCi0gICAgZm9yIChhdXRvJiBwbHVnaW4gOiBkYXRhLT53ZWJWaXNp
YmxlUGx1Z2lucygpKSB7Ci0gICAgICAgIGlmIChwbHVnaW4ubmFtZSA9PSBwcm9wZXJ0eU5hbWUp
Ci0gICAgICAgICAgICByZXR1cm4gRE9NUGx1Z2luOjpjcmVhdGUoZGF0YSwgZnJhbWUoKSwgcGx1
Z2luKTsKKyAgICBmb3IgKGF1dG8mIHBsdWdpbiA6IG1fYWRkaXRpb25hbFdlYlZpc2liaWxlUGx1
Z2lucykgeworICAgICAgICBpZiAocGx1Z2luLT5uYW1lKCkgPT0gcHJvcGVydHlOYW1lKQorICAg
ICAgICAgICAgcmV0dXJuIHBsdWdpbi5wdHIoKTsKICAgICB9CisKICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAogVmVjdG9yPEF0b21TdHJpbmc+IERPTVBsdWdpbkFycmF5OjpzdXBwb3J0ZWRQcm9w
ZXJ0eU5hbWVzKCkKIHsKLSAgICBQbHVnaW5EYXRhKiBkYXRhID0gcGx1Z2luRGF0YSgpOwotICAg
IGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGNvbnN0IGF1dG8mIHBsdWdp
bnMgPSBkYXRhLT5wdWJsaWNseVZpc2libGVQbHVnaW5zKCk7Ci0KICAgICBWZWN0b3I8QXRvbVN0
cmluZz4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBsdWdpbnMu
c2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIHBsdWdpbiA6IHBsdWdpbnMpCi0gICAgICAgIHJlc3Vs
dC51bmNoZWNrZWRBcHBlbmQocGx1Z2luLm5hbWUpOwotCisgICAgcmVzdWx0LnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkobV9wdWJsaWNseVZpc2libGVQbHVnaW5zLnNpemUoKSk7CisgICAgZm9yIChh
dXRvJiBwbHVnaW4gOiBtX3B1YmxpY2x5VmlzaWJsZVBsdWdpbnMpCisgICAgICAgIHJlc3VsdC51
bmNoZWNrZWRBcHBlbmQocGx1Z2luLT5uYW1lKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
QEAgLTEwMCwxNyArODcsNCBAQCB2b2lkIERPTVBsdWdpbkFycmF5OjpyZWZyZXNoKGJvb2wgcmVs
b2FkCiAgICAgUGFnZTo6cmVmcmVzaFBsdWdpbnMocmVsb2FkUGFnZXMpOwogfQogCi1QbHVnaW5E
YXRhKiBET01QbHVnaW5BcnJheTo6cGx1Z2luRGF0YSgpIGNvbnN0Ci17Ci0gICAgYXV0byogZnJh
bWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiAmcGFnZS0+cGx1Z2luRGF0YSgp
OwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL0RPTVBsdWdpbkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy9ET01QbHVnaW5BcnJheS5oCShyZXZpc2lvbiAyNjMwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL0RPTVBsdWdpbkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDIwICsyMCwyMiBA
QAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkRPTVBsdWdpbi5oIgotI2luY2x1ZGUgIkRP
TVdpbmRvd1Byb3BlcnR5LmgiCiAjaW5jbHVkZSAiTmF2aWdhdG9yLmgiCiAjaW5jbHVkZSAiU2Ny
aXB0V3JhcHBhYmxlLmgiCisjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRy
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUGx1Z2luRGF0YTsKK2NsYXNzIERP
TVBsdWdpbjsKK2NsYXNzIE5hdmlnYXRvcjsKIAogY2xhc3MgRE9NUGx1Z2luQXJyYXkgZmluYWwg
OiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgUmVmQ291bnRlZDxET01QbHVnaW5BcnJh
eT4gewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoRE9NUGx1Z2luQXJyYXkpOwogcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8RE9NUGx1Z2luQXJyYXk+IGNyZWF0ZShOYXZpZ2F0b3ImIG5hdmln
YXRvcikgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBET01QbHVnaW5BcnJheShuYXZpZ2F0b3IpKTsg
fQorICAgIHN0YXRpYyBSZWY8RE9NUGx1Z2luQXJyYXk+IGNyZWF0ZShOYXZpZ2F0b3ImIG5hdmln
YXRvciwgVmVjdG9yPFJlZjxET01QbHVnaW4+PiYmIHB1YmxpY2x5VmlzaWJsZVBsdWdpbnMgPSB7
IH0sIFZlY3RvcjxSZWY8RE9NUGx1Z2luPj4mJiBhZGRpdGlvbmFsV2ViVmlzaWJpbGVQbHVnaW5z
ID0geyB9KSB7IHJldHVybiBhZG9wdFJlZigqbmV3IERPTVBsdWdpbkFycmF5KG5hdmlnYXRvciwg
V1RGTW92ZShwdWJsaWNseVZpc2libGVQbHVnaW5zKSwgV1RGTW92ZShhZGRpdGlvbmFsV2ViVmlz
aWJpbGVQbHVnaW5zKSkpOyB9CiAgICAgfkRPTVBsdWdpbkFycmF5KCk7CiAKICAgICB1bnNpZ25l
ZCBsZW5ndGgoKSBjb25zdDsKQEAgLTQyLDE2ICs0NCwxNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9y
PEF0b21TdHJpbmc+IHN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKTsKIAogICAgIHZvaWQgcmVmcmVz
aChib29sIHJlbG9hZFBhZ2VzKTsKLSAgICAKLSAgICBOYXZpZ2F0b3IqIG5hdmlnYXRvcigpIHsg
cmV0dXJuIG1fbmF2aWdhdG9yLmdldCgpOyB9CiAKKyAgICBOYXZpZ2F0b3IqIG5hdmlnYXRvcigp
IHsgcmV0dXJuIG1fbmF2aWdhdG9yLmdldCgpOyB9CisgICAgCiBwcml2YXRlOgotICAgIGV4cGxp
Y2l0IERPTVBsdWdpbkFycmF5KE5hdmlnYXRvciYpOworICAgIGV4cGxpY2l0IERPTVBsdWdpbkFy
cmF5KE5hdmlnYXRvciYsIFZlY3RvcjxSZWY8RE9NUGx1Z2luPj4mJiwgVmVjdG9yPFJlZjxET01Q
bHVnaW4+PiYmKTsKIAotICAgIFBsdWdpbkRhdGEqIHBsdWdpbkRhdGEoKSBjb25zdDsKICAgICBG
cmFtZSogZnJhbWUoKSBjb25zdCB7IHJldHVybiBtX25hdmlnYXRvciA/IG1fbmF2aWdhdG9yLT5m
cmFtZSgpIDogbnVsbHB0cjsgfQotICAgIAorCiAgICAgV2Vha1B0cjxOYXZpZ2F0b3I+IG1fbmF2
aWdhdG9yOworICAgIFZlY3RvcjxSZWY8RE9NUGx1Z2luPj4gbV9wdWJsaWNseVZpc2libGVQbHVn
aW5zOworICAgIFZlY3RvcjxSZWY8RE9NUGx1Z2luPj4gbV9hZGRpdGlvbmFsV2ViVmlzaWJpbGVQ
bHVnaW5zOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9QbHVnaW5EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL1BsdWdpbkRhdGEuY3BwCShyZXZpc2lvbiAyNjMwMDcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpbkRhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBA
CiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNs
dWRlICJQbHVnaW5JbmZvUHJvdmlkZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOCw2ICszOSwxMiBAQCBQbHVnaW5EYXRhOjpQbHVn
aW5EYXRhKFBhZ2UmIHBhZ2UpCiAgICAgaW5pdFBsdWdpbnMoKTsKIH0KIAordm9pZCBQbHVnaW5E
YXRhOjppbml0UGx1Z2lucygpCit7CisgICAgQVNTRVJUKG1fcGx1Z2lucy5pc0VtcHR5KCkpOwor
ICAgIG1fcGx1Z2lucyA9IG1fcGFnZS5wbHVnaW5JbmZvUHJvdmlkZXIoKS5wbHVnaW5JbmZvKG1f
cGFnZSwgbV9zdXBwb3J0ZWRQbHVnaW5JZGVudGlmaWVycyk7Cit9CisKIGNvbnN0IFZlY3RvcjxQ
bHVnaW5JbmZvPiYgUGx1Z2luRGF0YTo6d2ViVmlzaWJsZVBsdWdpbnMoKSBjb25zdAogewogICAg
IGF1dG8gZG9jdW1lbnRVUkwgPSBtX3BhZ2UubWFpbkZyYW1lKCkuZG9jdW1lbnQoKSA/IG1fcGFn
ZS5tYWluRnJhbWUoKS5kb2N1bWVudCgpLT51cmwoKSA6IFVSTCB7IH07CkBAIC04MCwxMjAgKzg3
LDc3IEBAIHN0YXRpYyBib29sIHNob3VsZEJlUHVibGljbHlWaXNpYmxlKGNvbnMKICAgICAgICAg
fHwgaXNCdWlsdEluUERGUGx1Z0luKHBsdWdpbik7CiB9CiAKLVZlY3RvcjxQbHVnaW5JbmZvPiBQ
bHVnaW5EYXRhOjpwdWJsaWNseVZpc2libGVQbHVnaW5zKCkgY29uc3QKK3N0ZDo6cGFpcjxWZWN0
b3I8UGx1Z2luSW5mbz4sIFZlY3RvcjxQbHVnaW5JbmZvPj4gUGx1Z2luRGF0YTo6cHVibGljbHlW
aXNpYmxlUGx1Z2luc0FuZEFkZGl0aW9uYWxXZWJWaXNpYmxlUGx1Z2lucygpIGNvbnN0CiB7CiAg
ICAgYXV0byBwbHVnaW5zID0gd2ViVmlzaWJsZVBsdWdpbnMoKTsKIAogICAgIGlmIChtX3BhZ2Uu
c2hvd0FsbFBsdWdpbnMoKSkKLSAgICAgICAgcmV0dXJuIHBsdWdpbnM7Ci0gICAgCi0gICAgcGx1
Z2lucy5yZW1vdmVBbGxNYXRjaGluZyhbXShhdXRvJiBwbHVnaW4pIHsKLSAgICAgICAgcmV0dXJu
ICFzaG91bGRCZVB1YmxpY2x5VmlzaWJsZShwbHVnaW4pOworICAgICAgICByZXR1cm4geyBwbHVn
aW5zLCB7IH0gfTsKKworICAgIFZlY3RvcjxQbHVnaW5JbmZvPiBhZGRpdGlvbmFsV2ViVmlzaWJs
ZVBsdWdpbnM7CisgICAgcGx1Z2lucy5yZW1vdmVBbGxNYXRjaGluZyhbJl0oYXV0byYgcGx1Z2lu
KSB7CisgICAgICAgIGlmICghc2hvdWxkQmVQdWJsaWNseVZpc2libGUocGx1Z2luKSkgeworICAg
ICAgICAgICAgYWRkaXRpb25hbFdlYlZpc2libGVQbHVnaW5zLmFwcGVuZChwbHVnaW4pOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0pOwogCiAgICAgc3RkOjpzb3J0KHBsdWdpbnMuYmVnaW4oKSwgcGx1Z2lucy5lbmQoKSwg
W10oY29uc3QgUGx1Z2luSW5mbyYgYSwgY29uc3QgUGx1Z2luSW5mbyYgYikgewogICAgICAgICBy
ZXR1cm4gY29kZVBvaW50Q29tcGFyZUxlc3NUaGFuKGEubmFtZSwgYi5uYW1lKTsKICAgICB9KTsK
LSAgICByZXR1cm4gcGx1Z2luczsKKyAgICByZXR1cm4geyBwbHVnaW5zLCBhZGRpdGlvbmFsV2Vi
VmlzaWJsZVBsdWdpbnMgfTsKIH0KIAotdm9pZCBQbHVnaW5EYXRhOjpnZXRXZWJWaXNpYmxlTWlt
ZXNBbmRQbHVnaW5JbmRpY2VzKFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiYgbWltZXMsIFZlY3Rvcjxz
aXplX3Q+JiBtaW1lUGx1Z2luSW5kaWNlcykgY29uc3QKK1ZlY3RvcjxNaW1lQ2xhc3NJbmZvPiBQ
bHVnaW5EYXRhOjp3ZWJWaXNpYmxlTWltZVR5cGVzKCkgY29uc3QKIHsKLSAgICBnZXRNaW1lc0Fu
ZFBsdWdpbkluZGljaWVzRm9yUGx1Z2lucyh3ZWJWaXNpYmxlUGx1Z2lucygpLCBtaW1lcywgbWlt
ZVBsdWdpbkluZGljZXMpOwotfQotCi12b2lkIFBsdWdpbkRhdGE6OmdldE1pbWVzQW5kUGx1Z2lu
SW5kaWNlcyhWZWN0b3I8TWltZUNsYXNzSW5mbz4mIG1pbWVzLCBWZWN0b3I8c2l6ZV90PiYgbWlt
ZVBsdWdpbkluZGljZXMpIGNvbnN0Ci17Ci0gICAgZ2V0TWltZXNBbmRQbHVnaW5JbmRpY2llc0Zv
clBsdWdpbnMocGx1Z2lucygpLCBtaW1lcywgbWltZVBsdWdpbkluZGljZXMpOworICAgIFZlY3Rv
cjxNaW1lQ2xhc3NJbmZvPiByZXN1bHQ7CisgICAgZm9yIChhdXRvJiBwbHVnaW4gOiB3ZWJWaXNp
YmxlUGx1Z2lucygpKSB7CisgICAgICAgIGZvciAoYXV0byYgbWltZSA6IHBsdWdpbi5taW1lcykK
KyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobWltZSk7CisgICAgfQorICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXZvaWQgUGx1Z2luRGF0YTo6Z2V0TWltZXNBbmRQbHVnaW5JbmRpY2llc0ZvclBs
dWdpbnMoY29uc3QgVmVjdG9yPFBsdWdpbkluZm8+JiBwbHVnaW5zLCBWZWN0b3I8TWltZUNsYXNz
SW5mbz4mIG1pbWVzLCBWZWN0b3I8c2l6ZV90PiYgbWltZVBsdWdpbkluZGljZXMpIGNvbnN0Citz
dGF0aWMgYm9vbCBzdXBwb3J0c01pbWVUeXBlRm9yUGx1Z2lucyhjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBjb25zdCBQbHVnaW5EYXRhOjpBbGxvd2VkUGx1Z2luVHlwZXMgYWxsb3dlZFBsdWdpblR5
cGVzLCBjb25zdCBWZWN0b3I8UGx1Z2luSW5mbz4mIHBsdWdpbnMpCiB7Ci0gICAgQVNTRVJUX0FS
RyhtaW1lcywgbWltZXMuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlRfQVJHKG1pbWVQbHVnaW5JbmRp
Y2VzLCBtaW1lUGx1Z2luSW5kaWNlcy5pc0VtcHR5KCkpOwotCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHBsdWdpbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgUGx1Z2luSW5m
byYgcGx1Z2luID0gcGx1Z2luc1tpXTsKKyAgICBmb3IgKGF1dG8gcGx1Z2luIDogcGx1Z2lucykg
ewogICAgICAgICBmb3IgKGF1dG8mIG1pbWUgOiBwbHVnaW4ubWltZXMpIHsKLSAgICAgICAgICAg
IG1pbWVzLmFwcGVuZChtaW1lKTsKLSAgICAgICAgICAgIG1pbWVQbHVnaW5JbmRpY2VzLmFwcGVu
ZChpKTsKKyAgICAgICAgICAgIGlmIChtaW1lLnR5cGUgPT0gbWltZVR5cGUgJiYgKGFsbG93ZWRQ
bHVnaW5UeXBlcyA9PSBQbHVnaW5EYXRhOjpBbGxQbHVnaW5zIHx8IHBsdWdpbi5pc0FwcGxpY2F0
aW9uUGx1Z2luKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAg
IH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUGx1Z2luRGF0YTo6c3VwcG9ydHNXZWJW
aXNpYmxlTWltZVR5cGVGb3JVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgQWxsb3dl
ZFBsdWdpblR5cGVzIGFsbG93ZWRQbHVnaW5UeXBlcywgY29uc3QgVVJMJiB1cmwpIGNvbnN0Citi
b29sIFBsdWdpbkRhdGE6OnN1cHBvcnRzTWltZVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
Y29uc3QgQWxsb3dlZFBsdWdpblR5cGVzIGFsbG93ZWRQbHVnaW5UeXBlcykgY29uc3QKIHsKLSAg
ICBpZiAoIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChtX2NhY2hlZFZpc2libGVQbHVnaW5z
LnBhZ2VVUkwsIHVybCkpCi0gICAgICAgIG1fY2FjaGVkVmlzaWJsZVBsdWdpbnMgPSB7IHVybCwg
bV9wYWdlLnBsdWdpbkluZm9Qcm92aWRlcigpLndlYlZpc2libGVQbHVnaW5JbmZvKG1fcGFnZSwg
dXJsKSB9OwotICAgIGlmICghbV9jYWNoZWRWaXNpYmxlUGx1Z2lucy5wbHVnaW5MaXN0KQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHN1cHBvcnRzV2ViVmlzaWJsZU1pbWVUeXBl
KG1pbWVUeXBlLCBhbGxvd2VkUGx1Z2luVHlwZXMsICptX2NhY2hlZFZpc2libGVQbHVnaW5zLnBs
dWdpbkxpc3QpOworICAgIHJldHVybiBzdXBwb3J0c01pbWVUeXBlRm9yUGx1Z2lucyhtaW1lVHlw
ZSwgYWxsb3dlZFBsdWdpblR5cGVzLCBwbHVnaW5zKCkpOwogfQogCiBib29sIFBsdWdpbkRhdGE6
OnN1cHBvcnRzV2ViVmlzaWJsZU1pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0
IEFsbG93ZWRQbHVnaW5UeXBlcyBhbGxvd2VkUGx1Z2luVHlwZXMpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIHN1cHBvcnRzV2ViVmlzaWJsZU1pbWVUeXBlKG1pbWVUeXBlLCBhbGxvd2VkUGx1Z2luVHlw
ZXMsIHdlYlZpc2libGVQbHVnaW5zKCkpOwotfQotCi1ib29sIFBsdWdpbkRhdGE6OnN1cHBvcnRz
V2ViVmlzaWJsZU1pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IEFsbG93ZWRQ
bHVnaW5UeXBlcyBhbGxvd2VkUGx1Z2luVHlwZXMsIGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZvPiYg
cGx1Z2lucykgY29uc3QKLXsKLSAgICBWZWN0b3I8TWltZUNsYXNzSW5mbz4gbWltZXM7Ci0gICAg
VmVjdG9yPHNpemVfdD4gbWltZVBsdWdpbkluZGljZXM7Ci0gICAgZ2V0TWltZXNBbmRQbHVnaW5J
bmRpY2llc0ZvclBsdWdpbnMocGx1Z2lucywgbWltZXMsIG1pbWVQbHVnaW5JbmRpY2VzKTsKLQot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtaW1lcy5zaXplKCk7ICsraSkgewotICAgICAg
ICBpZiAobWltZXNbaV0udHlwZSA9PSBtaW1lVHlwZSAmJiAoYWxsb3dlZFBsdWdpblR5cGVzID09
IEFsbFBsdWdpbnMgfHwgcGx1Z2luc1ttaW1lUGx1Z2luSW5kaWNlc1tpXV0uaXNBcHBsaWNhdGlv
blBsdWdpbikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBzdXBwb3J0c01pbWVUeXBlRm9yUGx1Z2lucyhtaW1lVHlwZSwgYWxs
b3dlZFBsdWdpblR5cGVzLCB3ZWJWaXNpYmxlUGx1Z2lucygpKTsKIH0KIAotYm9vbCBQbHVnaW5E
YXRhOjpnZXRQbHVnaW5JbmZvRm9yV2ViVmlzaWJsZU1pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIFBsdWdpbkluZm8mIHBsdWdpbkluZm9SZWYpIGNvbnN0Citib29sIFBsdWdpbkRhdGE6
OnN1cHBvcnRzV2ViVmlzaWJsZU1pbWVUeXBlRm9yVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IGNvbnN0IEFsbG93ZWRQbHVnaW5UeXBlcyBhbGxvd2VkUGx1Z2luVHlwZXMsIGNvbnN0IFVSTCYg
dXJsKSBjb25zdAogewotICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiBtaW1lczsKLSAgICBWZWN0
b3I8c2l6ZV90PiBtaW1lUGx1Z2luSW5kaWNlczsKLSAgICBjb25zdCBWZWN0b3I8UGx1Z2luSW5m
bz4mIHBsdWdpbnMgPSB3ZWJWaXNpYmxlUGx1Z2lucygpOwotICAgIGdldFdlYlZpc2libGVNaW1l
c0FuZFBsdWdpbkluZGljZXMobWltZXMsIG1pbWVQbHVnaW5JbmRpY2VzKTsKLQotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtaW1lcy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBN
aW1lQ2xhc3NJbmZvJiBpbmZvID0gbWltZXNbaV07Ci0KLSAgICAgICAgaWYgKGluZm8udHlwZSA9
PSBtaW1lVHlwZSkgewotICAgICAgICAgICAgcGx1Z2luSW5mb1JlZiA9IHBsdWdpbnNbbWltZVBs
dWdpbkluZGljZXNbaV1dOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFwcm90b2NvbEhvc3RBbmRQb3J0QXJl
RXF1YWwobV9jYWNoZWRWaXNpYmxlUGx1Z2lucy5wYWdlVVJMLCB1cmwpKQorICAgICAgICBtX2Nh
Y2hlZFZpc2libGVQbHVnaW5zID0geyB1cmwsIG1fcGFnZS5wbHVnaW5JbmZvUHJvdmlkZXIoKS53
ZWJWaXNpYmxlUGx1Z2luSW5mbyhtX3BhZ2UsIHVybCkgfTsKKyAgICBpZiAoIW1fY2FjaGVkVmlz
aWJsZVBsdWdpbnMucGx1Z2luTGlzdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biBzdXBwb3J0c01pbWVUeXBlRm9yUGx1Z2lucyhtaW1lVHlwZSwgYWxsb3dlZFBsdWdpblR5cGVz
LCAqbV9jYWNoZWRWaXNpYmxlUGx1Z2lucy5wbHVnaW5MaXN0KTsKIH0KIAogU3RyaW5nIFBsdWdp
bkRhdGE6OnBsdWdpbkZpbGVGb3JXZWJWaXNpYmxlTWltZVR5cGUoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSkgY29uc3QKIHsKLSAgICBQbHVnaW5JbmZvIGluZm87Ci0gICAgaWYgKGdldFBsdWdpbklu
Zm9Gb3JXZWJWaXNpYmxlTWltZVR5cGUobWltZVR5cGUsIGluZm8pKQotICAgICAgICByZXR1cm4g
aW5mby5maWxlOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotYm9vbCBQbHVnaW5EYXRhOjpz
dXBwb3J0c01pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IEFsbG93ZWRQbHVn
aW5UeXBlcyBhbGxvd2VkUGx1Z2luVHlwZXMpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPE1pbWVDbGFz
c0luZm8+IG1pbWVzOwotICAgIFZlY3RvcjxzaXplX3Q+IG1pbWVQbHVnaW5JbmRpY2VzOwotICAg
IGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZvPiYgcGx1Z2lucyA9IHRoaXMtPnBsdWdpbnMoKTsKLSAg
ICBnZXRNaW1lc0FuZFBsdWdpbkluZGljZXMobWltZXMsIG1pbWVQbHVnaW5JbmRpY2VzKTsKLQot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtaW1lcy5zaXplKCk7ICsraSkgewotICAgICAg
ICBpZiAobWltZXNbaV0udHlwZSA9PSBtaW1lVHlwZSAmJiAoYWxsb3dlZFBsdWdpblR5cGVzID09
IEFsbFBsdWdpbnMgfHwgcGx1Z2luc1ttaW1lUGx1Z2luSW5kaWNlc1tpXV0uaXNBcHBsaWNhdGlv
blBsdWdpbikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBmb3IgKGF1dG8gcGx1Z2lu
IDogd2ViVmlzaWJsZVBsdWdpbnMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIG1pbWUgOiBwbHVn
aW4ubWltZXMpIHsKKyAgICAgICAgICAgIGlmIChtaW1lLnR5cGUgPT0gbWltZVR5cGUpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHBsdWdpbi5maWxlOworICAgICAgICB9CiAgICAgfQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotdm9pZCBQbHVnaW5EYXRhOjppbml0UGx1Z2lucygpCi17Ci0gICAg
QVNTRVJUKG1fcGx1Z2lucy5pc0VtcHR5KCkpOwotCi0gICAgbV9wbHVnaW5zID0gbV9wYWdlLnBs
dWdpbkluZm9Qcm92aWRlcigpLnBsdWdpbkluZm8obV9wYWdlLCBtX3N1cHBvcnRlZFBsdWdpbklk
ZW50aWZpZXJzKTsKKyAgICByZXR1cm4geyB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGEuaAkocmV2aXNpb24gMjYzMDA3KQor
KysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIxLDggKzIxLDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMu
aD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVVJMLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMzIsNyArMzAsNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBQYWdlOwotc3RydWN0IFBsdWdpbkluZm87CiAKIGVudW0gY2xhc3MgUGx1Z2luTG9h
ZENsaWVudFBvbGljeSA6IHVpbnQ4X3QgewogICAgIC8vIE5vIGNsaWVudC1zcGVjaWZpYyBwbHVn
LWluIGxvYWQgcG9saWN5IGhhcyBiZWVuIGRlZmluZWQuIFRoZSBwbHVnLWluIHNob3VsZCBiZSB2
aXNpYmxlIGluIG5hdmlnYXRvci5wbHVnaW5zIGFuZCBXZWJLaXQgc2hvdWxkIHN5bmNocm9ub3Vz
bHkKQEAgLTEwMiwyNyArOTksMjMgQEAgcHVibGljOgogCiAgICAgY29uc3QgVmVjdG9yPFBsdWdp
bkluZm8+JiBwbHVnaW5zKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW5zOyB9CiAgICAgV0VCQ09S
RV9FWFBPUlQgY29uc3QgVmVjdG9yPFBsdWdpbkluZm8+JiB3ZWJWaXNpYmxlUGx1Z2lucygpIGNv
bnN0OwotICAgIFZlY3RvcjxQbHVnaW5JbmZvPiBwdWJsaWNseVZpc2libGVQbHVnaW5zKCkgY29u
c3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRXZWJWaXNpYmxlTWltZXNBbmRQbHVnaW5J
bmRpY2VzKFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiYsIFZlY3RvcjxzaXplX3Q+JikgY29uc3Q7Cisg
ICAgc3RkOjpwYWlyPFZlY3RvcjxQbHVnaW5JbmZvPiwgVmVjdG9yPFBsdWdpbkluZm8+PiBwdWJs
aWNseVZpc2libGVQbHVnaW5zQW5kQWRkaXRpb25hbFdlYlZpc2libGVQbHVnaW5zKCkgY29uc3Q7
CisKKyAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8TWltZUNsYXNzSW5mbz4gd2ViVmlzaWJsZU1p
bWVUeXBlcygpIGNvbnN0OwogCiAgICAgZW51bSBBbGxvd2VkUGx1Z2luVHlwZXMgewogICAgICAg
ICBBbGxQbHVnaW5zLAogICAgICAgICBPbmx5QXBwbGljYXRpb25QbHVnaW5zCiAgICAgfTsKLQot
ICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc3VwcG9ydHNXZWJWaXNpYmxlTWltZVR5cGUoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgQWxsb3dlZFBsdWdpblR5cGVzKSBjb25zdDsKLSAgICBT
dHJpbmcgcGx1Z2luRmlsZUZvcldlYlZpc2libGVNaW1lVHlwZShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlKSBjb25zdDsKLQogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc3VwcG9ydHNNaW1lVHlwZShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBBbGxvd2VkUGx1Z2luVHlwZXMpIGNvbnN0Owor
ICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc3VwcG9ydHNXZWJWaXNpYmxlTWltZVR5cGUoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgQWxsb3dlZFBsdWdpblR5cGVzKSBjb25zdDsKICAgICBX
RUJDT1JFX0VYUE9SVCBib29sIHN1cHBvcnRzV2ViVmlzaWJsZU1pbWVUeXBlRm9yVVJMKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IEFsbG93ZWRQbHVnaW5UeXBlcywgY29uc3QgVVJMJikg
Y29uc3Q7CiAKKyAgICBTdHJpbmcgcGx1Z2luRmlsZUZvcldlYlZpc2libGVNaW1lVHlwZShjb25z
dCBTdHJpbmcmIG1pbWVUeXBlKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBQbHVn
aW5EYXRhKFBhZ2UmKTsKICAgICB2b2lkIGluaXRQbHVnaW5zKCk7Ci0gICAgYm9vbCBnZXRQbHVn
aW5JbmZvRm9yV2ViVmlzaWJsZU1pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFBsdWdp
bkluZm8mKSBjb25zdDsKLSAgICB2b2lkIGdldE1pbWVzQW5kUGx1Z2luSW5kaWNlcyhWZWN0b3I8
TWltZUNsYXNzSW5mbz4mLCBWZWN0b3I8c2l6ZV90PiYpIGNvbnN0OwotICAgIHZvaWQgZ2V0TWlt
ZXNBbmRQbHVnaW5JbmRpY2llc0ZvclBsdWdpbnMoY29uc3QgVmVjdG9yPFBsdWdpbkluZm8+Jiwg
VmVjdG9yPE1pbWVDbGFzc0luZm8+JiwgVmVjdG9yPHNpemVfdD4mKSBjb25zdDsKLSAgICBib29s
IHN1cHBvcnRzV2ViVmlzaWJsZU1pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0
IEFsbG93ZWRQbHVnaW5UeXBlcywgY29uc3QgVmVjdG9yPFBsdWdpbkluZm8+JikgY29uc3Q7CiAK
IHByb3RlY3RlZDoKICAgICBQYWdlJiBtX3BhZ2U7CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjYz
MDEwKQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxMyBAQAorMjAyMC0wNi0xNCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAg
ICAgICAgW1dQVF0gaHRtbC93ZWJhcHBhcGlzL3N5c3RlbS1zdGF0ZS1hbmQtY2FwYWJpbGl0aWVz
L3RoZS1uYXZpZ2F0b3Itb2JqZWN0L25hdmlnYXRvci1wbHVnaW5hcnJheS5odG1sIGZhaWxzIGR1
ZSB0byBsYWNrIG9mIGNhY2hpbmcgb2YgUGx1Z2luIG9iamVjdHMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzE4NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OnBsdWdpblN1cHBv
cnRzRXh0ZW5zaW9uKToKKwogMjAyMC0wNi0xNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2Fy
Y2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW1NPVVBdIERpc2FibGUgSFNUUyBmb3IgcmVxdWVz
dHMgd2hlbiBjb29raWVzIHdpbGwgYmUgYmxvY2tlZCBieSBJVFAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUuaAkocmV2aXNpb24g
MjYzMDA3KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5JbmZvU3Rv
cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIlBsdWdpbk1v
ZHVsZUluZm8uaCIKIAogI2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2luRGF0YS5oPgorI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJG
cmFtZUxvYWRlckNsaWVudC5jcHAJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2NTcsMTEgKzE2NTcsOCBAQCBSZWZQdHI8V2lkZ2V0PiBXZWJGcmFtZUxv
YWRlckNsaWVudDo6Y3JlCiBzdGF0aWMgYm9vbCBwbHVnaW5TdXBwb3J0c0V4dGVuc2lvbihjb25z
dCBQbHVnaW5EYXRhJiBwbHVnaW5EYXRhLCBjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikKIHsKICAg
ICBBU1NFUlQoZXh0ZW5zaW9uLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkgPT0gZXh0ZW5zaW9u
KTsKLSAgICBWZWN0b3I8TWltZUNsYXNzSW5mbz4gbWltZXM7Ci0gICAgVmVjdG9yPHNpemVfdD4g
bWltZVBsdWdpbkluZGljZXM7Ci0gICAgcGx1Z2luRGF0YS5nZXRXZWJWaXNpYmxlTWltZXNBbmRQ
bHVnaW5JbmRpY2VzKG1pbWVzLCBtaW1lUGx1Z2luSW5kaWNlcyk7Ci0gICAgZm9yIChhdXRvJiBt
aW1lQ2xhc3NJbmZvIDogbWltZXMpIHsKLSAgICAgICAgaWYgKG1pbWVDbGFzc0luZm8uZXh0ZW5z
aW9ucy5jb250YWlucyhleHRlbnNpb24pKQorICAgIGZvciAoYXV0byYgbWltZVR5cGUgOiBwbHVn
aW5EYXRhLndlYlZpc2libGVNaW1lVHlwZXMoKSkgeworICAgICAgICBpZiAobWltZVR5cGUuZXh0
ZW5zaW9ucy5jb250YWlucyhleHRlbnNpb24pKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIHJldHVybiBmYWxzZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401874</attachid>
            <date>2020-06-14 16:11:52 -0700</date>
            <delta_ts>2020-06-14 17:17:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213185-20200614161151.patch</filename>
            <type>text/plain</type>
            <size>64737</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzAxMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBAQAorMjAyMC0wNi0xNCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgW1dQVF0gaHRtbC93ZWJhcHBhcGlz
L3N5c3RlbS1zdGF0ZS1hbmQtY2FwYWJpbGl0aWVzL3RoZS1uYXZpZ2F0b3Itb2JqZWN0L25hdmln
YXRvci1wbHVnaW5hcnJheS5odG1sIGZhaWxzIGR1ZSB0byBsYWNrIG9mIGNhY2hpbmcgb2YgUGx1
Z2luIG9iamVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxMzE4NQorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAg
IFRlc3RzOgorICAgICAgICAtIFVwZGF0ZXMgcmVzdWx0cyBmb3Igd2ViLXBsYXRmb3JtLXRlc3Rz
L2h0bWwvd2ViYXBwYXBpcy9zeXN0ZW0tc3RhdGUtYW5kLWNhcGFiaWxpdGllcy90aGUtbmF2aWdh
dG9yLW9iamVjdC9uYXZpZ2F0b3ItcGx1Z2luYXJyYXkuaHRtbAorICAgICAgICAgIHdoaWNoIG5v
dyBwYXNzZXMuCisgICAgICAgIC0gU3BsaXRzIHVwIGh0dHAvdGVzdHMvcGx1Z2lucy9wbHVnaW4t
amF2YXNjcmlwdC1hY2Nlc3MuaHRtbCwgYWRkaW5nIAorICAgICAgICAgIGh0dHAvdGVzdHMvcGx1
Z2lucy9wbHVnaW4tamF2YXNjcmlwdC1hY2Nlc3MtYWxsb3ctYWxsLXBsdWdpbnMuaHRtbAorICAg
ICAgICAgIHdoaWNoIHRlc3RzIHRoZSBpbnRlcm5hbHMuc2V0U2hvd0FsbFBsdWdpbnModHJ1ZSkg
Y2FzZS4gVGhpcyB3YXMKKyAgICAgICAgICByZXF1aXJlZCBub3cgdGhhdCB0aGUgcGx1Z2luIGFu
ZCBtaW1ldHlwZSBhcnJheXMgYXJlIGltbXV0YWJsZSBhZnRlcgorICAgICAgICAgIGNyZWF0aW9u
LgorCisgICAgICAgIE92ZXJoYXVsIHdlYiBleHBvc2VkIHBsdWdpbiBBUElzOgorICAgICAgICAt
IEFsbCBET01QbHVnaW4gYW5kIERPTU1pbWVUeXBlcyBhcmUgbm93IGNyZWF0ZWQgdG9nZXRoZXIg
KGFsb25nIHdpdGggdGhlIERPTVBsdWdpbkFycmF5IGFuZCAKKyAgICAgICAgICBET01NaW1lVHlw
ZUFycmF5KSBvbiBmaXJzdCBhY2Nlc3Mgb2YgZWl0aGVyIG5hdmlnYXRvci5wbHVnaW5zIG9yIG5h
dmlnYXRvci5taW1lVHlwZXMuCisgICAgICAgIC0gRE9NUGx1Z2lucyBhcmUgY3JlYXRlZCBhbmQg
c3RvcmVkIGluIHRoZSBET01QbHVnaW5BcnJheSAoZml4aW5nIHRoZSBpbml0aWFsIGxhY2sgb2Yg
Y2FjaGluZyBpc3N1ZSkKKyAgICAgICAgLSBET01NaW1lVHlwZXMgYXJlIGNyZWF0ZWQgYW5kIHN0
b3JlZCBpbiB0aGUgRE9NTWltZVR5cGVBcnJheS4KKyAgICAgICAgLSBET01QbHVnaW5zIGhvbGQg
YSBzdHJvbmcgcmVmZXJlbmNlIHRvIHRoZWlyIGFzc29jaWF0ZWQgRE9NTWltZVR5cGUuIFRoZSBE
T01NaW1lVHlwZSBoYXMKKyAgICAgICAgICBhIHdlYWsgcmVmZXJlbmNlIGJhY2sgdG8gdGhlIERP
TVBsdWdpbi4gVGhpcyBtZWFucyBmb3IgYSBzaW5nbGUgZXhlY3V0YXRpb24gY29udGV4dCwgd2Ug
b25seQorICAgICAgICAgIGV2ZXIgY3JlYXRlIG9uZSBET01QbHVnaW4gLyBET01NaW1lVHlwZSBm
b3IgZWFjaCB1bmRlcmx5aW5nIHBsdWdpbiAvIG1pbWV0eXBlLgorICAgICAgICAtIFVwZGF0ZSBH
QyBzbyB0aGF0IERPTVBsdWdpbiBhbmQgRE9NTWltZVR5cGUgKGluIGFkZGl0aW9uIHRvIERPTVBs
dWdpbkFycmF5IGFuZCBET01NaW1lVHlwZUFycmF5CisgICAgICAgICAgd2hpY2ggd2VyZSBhbHJl
YWR5IGRvaW5nIHRoaXMpIHVzZSBuYXZpZ2F0b3IgcmVhY2hhYmlsaXR5IGZvciB0aGVpciBsaWZl
dGltZS4gVGhpcyBpcyBhbG1vc3QKKyAgICAgICAgICBjb3JyZWN0LCBleGNlcHQgaWYgd2UgZXZl
ciBpbXBsZW1lbnQgRE9NUGx1Z2luQXJyYXkucmVmcmVzaChmYWxzZSkgdG8gbWF0Y2ggdGhlIHNw
ZWMsIGluIHdoaWNoCisgICAgICAgICAgY2FzZSB5b3UgY291bGQgZW5kIHVwIHdpdGggc29tZSBE
T01QbHVnaW5zIGFuZCBET01NaW1lVHlwZXMgdGhhdCBhcmUgbWFya2VkIGFzIHJlYWNoYWJsZSB3
aGVuCisgICAgICAgICAgdGhleSByZWFsbHkgYXJlIG5vdCwgYnV0IG9ubHkgcGx1Z2lucyB0aGF0
IHdlcmUgcmVtb3ZlZC4gVGhpcyBzZWVtcyBzbyB1bmxpa2VseSB0byBtYXR0ZXIgdGhhdAorICAg
ICAgICAgIGltcGxlbWVudGluZyBhIG1vcmUgc3RyaWN0IHJlYWNoYWJpbGl0eSBmdW5jdGlvbiBz
ZWVtcyBsaWtlIHRoZSB3cm9uZyB3YXkgdG8gZ28uCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAq
IERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICBBZGQgTmF2aWdhdG9yUGx1Z2lucy5pZGwKKworICAgICAgICAq
IGxvYWRlci9TdWJmcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5kUGx1Z2lu
TUlNRVR5cGVGcm9tVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmxvZ1BsdWdpblJlcXVlc3QpOgor
ICAgICAgICBTaW1wbGlmeSBhbmQgY2xlYW51cCBjb2RlIG1ha2luZyB1c2Ugb2YgdGhlIG5ldyB3
ZWJWaXNpYmxlTWltZVR5cGVzKCkgcmF0aGVyIHRoYW4gdGhlCisgICAgICAgIGNsdW5reSBnZXRX
ZWJWaXNpYmxlTWltZXNBbmRQbHVnaW5JbmRpY2VzKCkuCisKKyAgICAgICAgKiBwYWdlL05hdmln
YXRvci5jcHA6CisgICAgICAgICogcGFnZS9OYXZpZ2F0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6
Ok5hdmlnYXRvcjo6aW5pdGlhbGl6ZVBsdWdpbkFuZE1JTUVUeXBlQXJyYXlzKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5hdmlnYXRvcjo6cGx1Z2lucyk6CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0
b3I6Om1pbWVUeXBlcyk6CisgICAgICAgIEZ1bGx5IGluaXRpYWxpemUgTmF2aWdhdG9yLnBsdWdp
bnMvbWltZVR5cGVzIG9uIGZpcnN0IGFjY2VzcyBvZiBlaXRoZXIsIGZvbGxvd2luZworICAgICAg
ICB0aGUgc3BlY2lmaWVkIGJlaGF2aW9yIHRoYXQgdGhleSBzaG91bGQgbm90IGNoYW5nZSBhZnRl
ciBpbml0aWFsIGFjY2VzcyBmb3IgYSBzY3JpcHQKKyAgICAgICAgZXhlY3V0aW9uIGNvbnRleHQu
IFRoaXMgYWxzbyBlbnN1cmVzIHdlIGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgd3JhcHBlcnMgZm9y
IHRoZXNlCisgICAgICAgIG9iamVjdHMgb24gbXVsdGlwbGUgYWNjZXNzZXMsIHNvbWV0aGluZyB0
aGUgc3BlYyBtYW5kYXRlcyBidXQgd2UgZmFpbGVkIHRvIGRvIHByaW9yLgorICAgICAgICBJbiBh
ZGRpdGlvbiwgd2Ugbm93IGNvcnJlY3RseSBzb3J0IHRoZSBwbHVnaW5zIGJ5IG5hbWUgYW5kIG1p
bWVUeXBlcyBieSB0eXBlLCBhbHNvIGFzCisgICAgICAgIHNwZWNpZmllZC4KKworICAgICAgICAq
IHBhZ2UvTmF2aWdhdG9yLmlkbDoKKyAgICAgICAgKiBwYWdlL05hdmlnYXRvclBsdWdpbnMuaWRs
OiBBZGRlZC4KKyAgICAgICAgU3BsaXQgTmF2aWdhdG9yUGx1Z2lucyBvdXQgb2YgTmF2aWdhdG9y
LmlkbCBhcyBzcGVjaWZpZWQuIE5vIGZ1bmN0aW9uYWwgY2hhbmdlIGJ1dAorICAgICAgICBtYWtl
cyB0aGluZ3MgbmljZXIgd2hlbiB3ZSBtYXRjaCB0aGUgc3BlYyBjbG9zZXIuCisKKyAgICAgICAg
KiBwbHVnaW5zL0RPTU1pbWVUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTU1pbWVUeXBl
OjpET01NaW1lVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpET01NaW1lVHlwZTo6c3VmZml4ZXMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RE9NTWltZVR5cGU6OmVuYWJsZWRQbHVnaW4gY29u
c3QpOgorICAgICAgICAqIHBsdWdpbnMvRE9NTWltZVR5cGUuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkRPTU1pbWVUeXBlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NTWltZVR5cGU6Om5h
dmlnYXRvcik6CisgICAgICAgICogcGx1Z2lucy9ET01NaW1lVHlwZS5pZGw6CisgICAgICAgICog
cGx1Z2lucy9ET01NaW1lVHlwZUFycmF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTU1pbWVU
eXBlQXJyYXk6OkRPTU1pbWVUeXBlQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6RE9NTWltZVR5
cGVBcnJheTo6bGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTU1pbWVUeXBlQXJy
YXk6Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RE9NTWltZVR5cGVBcnJheTo6bmFtZWRJdGVt
KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTU1pbWVUeXBlQXJyYXk6OnN1cHBvcnRlZFByb3BlcnR5
TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6RE9NTWltZVR5cGVBcnJheTo6Z2V0UGx1Z2luRGF0
YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGx1Z2lucy9ET01NaW1lVHlwZUFycmF5Lmg6
CisgICAgICAgICogcGx1Z2lucy9ET01QbHVnaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9N
UGx1Z2luOjpET01QbHVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6RE9NUGx1Z2luOjppdGVtKToK
KyAgICAgICAgKFdlYkNvcmU6OkRPTVBsdWdpbjo6bmFtZWRJdGVtKToKKyAgICAgICAgKFdlYkNv
cmU6OkRPTVBsdWdpbjo6c3VwcG9ydGVkUHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcGx1Z2lu
cy9ET01QbHVnaW4uaDoKKyAgICAgICAgKiBwbHVnaW5zL0RPTVBsdWdpbi5pZGw6CisgICAgICAg
ICogcGx1Z2lucy9ET01QbHVnaW5BcnJheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01QbHVn
aW5BcnJheTo6RE9NUGx1Z2luQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6RE9NUGx1Z2luQXJy
YXk6Omxlbmd0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpET01QbHVnaW5BcnJheTo6aXRl
bSk6CisgICAgICAgIChXZWJDb3JlOjpET01QbHVnaW5BcnJheTo6bmFtZWRJdGVtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTVBsdWdpbkFycmF5OjpzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRPTVBsdWdpbkFycmF5OjpwbHVnaW5EYXRhIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBwbHVnaW5zL0RPTVBsdWdpbkFycmF5Lmg6CisgICAgICAgIFJhdGhlciB0
aGFuIGR5bmFtaWNhbGx5IGFjY2Vzc2luZyBwbHVnaW4gaW5mb3JtYXRpb24gdGhyb3VnaCBQYWdl
CisgICAgICAgIG9uIGVhY2ggaW50ZXJhY3Rpb24gd2l0aCB0aGUgRE9NIHBsdWdpbiBvYmplY3Rz
LCB3ZSBub3cgZnVsbHkgaW5pdGlhbGl6ZQorICAgICAgICB0aGVtIG9uIGNyZWF0aW9uLCBhbGxv
d2luZyBmb3IgY29ycmVjdCB3cmFwcGVyIGNhY2hpbmcgYW5kIGJlaGF2aW9yIGlmCisgICAgICAg
IHBsdWdpbnMgYXJlIGFkZGVkIC8gcmVtb3ZlZCAoZS5nLiB0aGUgYXJyYXlzIHNob3VsZCBub3Qg
Y2hhbmdlKS4KKyAgICAgICAgCisgICAgICAgICogcGx1Z2lucy9QbHVnaW5EYXRhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpbkRhdGE6OnB1YmxpY2x5VmlzaWJsZVBsdWdpbnNBbmRBZGRpdGlvbmFsV2ViVmlz
aWJsZVBsdWdpbnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6d2ViVmlz
aWJsZU1pbWVUeXBlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpzdXBwb3J0c01pbWVUeXBl
Rm9yUGx1Z2lucyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhOjpzdXBwb3J0c01pbWVU
eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OnN1cHBvcnRzV2ViVmlz
aWJsZU1pbWVUeXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OnN1cHBv
cnRzV2ViVmlzaWJsZU1pbWVUeXBlRm9yVVJMIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpbkRhdGE6OnBsdWdpbkZpbGVGb3JXZWJWaXNpYmxlTWltZVR5cGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6cHVibGljbHlWaXNpYmxlUGx1Z2lucyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhOjpnZXRXZWJWaXNpYmxlTWltZXNB
bmRQbHVnaW5JbmRpY2VzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
bkRhdGE6OmdldE1pbWVzQW5kUGx1Z2luSW5kaWNlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5EYXRhOjpnZXRNaW1lc0FuZFBsdWdpbkluZGljaWVzRm9yUGx1Z2lu
cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhOjpnZXRQbHVn
aW5JbmZvRm9yV2ViVmlzaWJsZU1pbWVUeXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bHVnaW5zL1BsdWdpbkRhdGEuaDoKKyAgICAgICAgU2ltcGxpZnkgaW50ZXJmYWNlIGJ5IHJlbW92
aW5nIG91dCBwYXJhbWV0ZXIgYmFzZWQgZ2V0V2ViVmlzaWJsZU1pbWVzQW5kUGx1Z2luSW5kaWNl
cworICAgICAgICAoYW5kIGhlbHBlcnMpIGFuZCBhZGRpbmcgbW9yZSBzdHJhaWd0d29yZCBhbHRl
cm5hdGl2ZXMuIGdldFdlYlZpc2libGVNaW1lc0FuZFBsdWdpbkluZGljZXMKKyAgICAgICAgd2Fz
IHVzZWZ1bCBmb3IgdGhlIG9sZCBET00gcGx1Z2luIG1vZGVsLCBidXQgbm93IHRoYXQgdGhlIGFy
cmF5cyBhcmUgaW5pdGlhbGl6ZWQgYWxsIAorICAgICAgICB0b2dldGhlciwgaXQgbm8gbG9uZ2Vy
IHByb3ZpZGVzIGFuIG9wdGltaXphdGlvbi4gSW5zdGVhZCwgYWxsIGNhbGxlcnMgcmVhbGx5IGp1
c3Qgd2FudAorICAgICAgICBhIGVpdGhlciBhIGxpc3Qgb2YgTWltZUNsYXNzSW5mb3Mgb3IgdG8g
a25vdyBpZiBvbmUgaXMgc3VwcG9ydGVkIHVuZGVyIGEgc3BlY2lmaWMgc2NlbmFyaW8sCisgICAg
ICAgIHNvIHdlIG5vdyBqdXN0IGV4cG9zZSB0aGF0LgorCiAyMDIwLTA2LTE0ICBUZXRzdWhhcnUg
T2h6ZWtpICA8dGV0c3VoYXJ1Lm9oemVraUBnbWFpbC5jb20+CiAKICAgICAgICAgV2l0aGRyYXcg
RmlsZVJlYWRlclN5bmMgZnJvbSBTZXJ2aWNlV29ya2VyCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAkocmV2aXNpb24gMjYzMDA3KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTk0NSw2ICs5NDUsNyBAQCBzZXQoV2ViQ29yZV9OT05fU1ZHX0lETF9G
SUxFUwogICAgIHBhZ2UvTmF2aWdhdG9ySUQuaWRsCiAgICAgcGFnZS9OYXZpZ2F0b3JMYW5ndWFn
ZS5pZGwKICAgICBwYWdlL05hdmlnYXRvck9uTGluZS5pZGwKKyAgICBwYWdlL05hdmlnYXRvclBs
dWdpbnMuaWRsCiAgICAgcGFnZS9OYXZpZ2F0b3JTZXJ2aWNlV29ya2VyLmlkbAogICAgIHBhZ2Uv
TmF2aWdhdG9yU2hhcmUuaWRsCiAgICAgcGFnZS9QZXJmb3JtYW5jZS5pZGwKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAkocmV2aXNpb24g
MjYzMDA3KQorKysgU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlz
dAkod29ya2luZyBjb3B5KQpAQCAtOTMzLDYgKzkzMyw3IEBAICQoUFJPSkVDVF9ESVIpL3BhZ2Uv
TmF2aWdhdG9ySUQuaWRsCiAkKFBST0pFQ1RfRElSKS9wYWdlL05hdmlnYXRvcklzTG9nZ2VkSW4u
aWRsCiAkKFBST0pFQ1RfRElSKS9wYWdlL05hdmlnYXRvckxhbmd1YWdlLmlkbAogJChQUk9KRUNU
X0RJUikvcGFnZS9OYXZpZ2F0b3JPbkxpbmUuaWRsCiskKFBST0pFQ1RfRElSKS9wYWdlL05hdmln
YXRvclBsdWdpbnMuaWRsCiAkKFBST0pFQ1RfRElSKS9wYWdlL05hdmlnYXRvclNlcnZpY2VXb3Jr
ZXIuaWRsCiAkKFBST0pFQ1RfRElSKS9wYWdlL05hdmlnYXRvclNoYXJlLmlkbAogJChQUk9KRUNU
X0RJUikvcGFnZS9QZXJmb3JtYW5jZS5pZGwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRT
b3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Rl
cml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CShyZXZpc2lvbiAyNjMwMDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAkod29ya2luZyBjb3B5
KQpAQCAtMTE1NCw2ICsxMTU0LDggQEAgJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYgogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNO
YXZpZ2F0b3JNZWRpYURldmljZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSlNOYXZpZ2F0b3JPbkxpbmUuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU05hdmlnYXRvck9uTGluZS5oCiskKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU05hdmlnYXRvclBsdWdpbnMuY3BwCisk
KEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU05hdmlnYXRvclBs
dWdpbnMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNO
YXZpZ2F0b3JTZXJ2aWNlV29ya2VyLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvSlNOYXZpZ2F0b3JTZXJ2aWNlV29ya2VyLmgKICQoQlVJTFRfUFJPRFVD
VFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTTmF2aWdhdG9yU2hhcmUuY3BwCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJj
ZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkKQEAgLTk1Miw2ICs5
NTIsNyBAQCBKU19CSU5ESU5HX0lETFMgPSBcCiAgICAgJChXZWJDb3JlKS9wYWdlL05hdmlnYXRv
cklzTG9nZ2VkSW4uaWRsIFwKICAgICAkKFdlYkNvcmUpL3BhZ2UvTmF2aWdhdG9yTGFuZ3VhZ2Uu
aWRsIFwKICAgICAkKFdlYkNvcmUpL3BhZ2UvTmF2aWdhdG9yT25MaW5lLmlkbCBcCisgICAgJChX
ZWJDb3JlKS9wYWdlL05hdmlnYXRvclBsdWdpbnMuaWRsIFwKICAgICAkKFdlYkNvcmUpL3BhZ2Uv
TmF2aWdhdG9yU2VydmljZVdvcmtlci5pZGwgXAogICAgICQoV2ViQ29yZSkvcGFnZS9OYXZpZ2F0
b3JTaGFyZS5pZGwgXAogICAgICQoV2ViQ29yZSkvcGFnZS9QZXJmb3JtYW5jZS5pZGwgXApJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjYzMDA3KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05ODg3LDYgKzk4ODcsNyBAQAogCQk3
QUY5QjIwOTE4Q0ZCNUYyMDBDNjRCRUYgLyogSlNWVFRSZWdpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNWVFRSZWdpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0FGOUIyMEExOENGQjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1ZUVFJlZ2lvbkxpc3QuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUY5QjIwQjE4Q0ZCNUYzMDBDNjRCRUYgLyog
SlNWVFRSZWdpb25MaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVlRU
UmVnaW9uTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzAxN0MzRDI0OTY5
RjEzMDBEQzBDMDIgLyogTmF2aWdhdG9yUGx1Z2lucy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTmF2aWdhdG9yUGx1Z2lu
cy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMDI5QzZEMjQ5M0M4RjgwMDI2
ODIwNCAvKiBDb2xvclR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbG9yVHlwZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MwQ0VGMjgxRTRBNTQyQzAwOERFQjgwIC8qIEpTRE9N
Q29uc3RydWN0b3JCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9N
Q29uc3RydWN0b3JCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMENFRjI5
MUU0QTU0RDMwMDhERUI4MCAvKiBKU0RPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxMTEyLDYgKzIxMTEzLDcgQEAKIAkJ
CQk2QjUwN0EyMzIzNEJGMzQxMDBCRTdDNjIgLyogTmF2aWdhdG9ySXNMb2dnZWRJbi5pZGwgKi8s
CiAJCQkJN0M1QkVBM0IxRTlFRTc3MTAwQ0M1MTdCIC8qIE5hdmlnYXRvckxhbmd1YWdlLmlkbCAq
LywKIAkJCQk3QzVCRUEzQzFFOUVFNzcxMDBDQzUxN0IgLyogTmF2aWdhdG9yT25MaW5lLmlkbCAq
LywKKwkJCQk3QzAxN0MzRDI0OTY5RjEzMDBEQzBDMDIgLyogTmF2aWdhdG9yUGx1Z2lucy5pZGwg
Ki8sCiAJCQkJNTE4MkMyNEIxRjMxM0FFMDAwNTlCQTdDIC8qIE5hdmlnYXRvclNlcnZpY2VXb3Jr
ZXIuaWRsICovLAogCQkJCTFEQzU1M0ZEMjExQkExMkEwMDRCNzgwRSAvKiBOYXZpZ2F0b3JTaGFy
ZS5pZGwgKi8sCiAJCQkJMDAxNDYyODgxMDNDRDFERTAwMEIyMERCIC8qIE9yaWdpbkFjY2Vzc0Vu
dHJ5LmNwcCAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNw
cAkocmV2aXNpb24gMjYzMDA3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9h
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDMwICsxNjMsMjUgQEAgYm9vbCBGcmFtZUxv
YWRlcjo6U3ViZnJhbWVMb2FkZXI6OnJlcXVlcwogICAgIHJldHVybiBsb2FkUGx1Z2luKG93bmVy
RWxlbWVudCwgdXJsLCBtaW1lVHlwZSwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsIHVzZUZhbGxi
YWNrKTsKIH0KIAotc3RhdGljIFN0cmluZyBmaW5kUGx1Z2luTUlNRVR5cGVGcm9tVVJMKFBhZ2Uq
IHBhZ2UsIGNvbnN0IFN0cmluZyYgdXJsKQorc3RhdGljIFN0cmluZyBmaW5kUGx1Z2luTUlNRVR5
cGVGcm9tVVJMKFBhZ2UmIHBhZ2UsIGNvbnN0IFN0cmluZ1ZpZXcmIHVybCkKIHsKICAgICBpZiAo
IXVybCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICByZXR1cm4geyB9OwogCiAg
ICAgc2l6ZV90IGRvdEluZGV4ID0gdXJsLnJldmVyc2VGaW5kKCcuJyk7CiAgICAgaWYgKGRvdElu
ZGV4ID09IG5vdEZvdW5kKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIHJldHVy
biB7IH07CiAKLSAgICBTdHJpbmcgZXh0ZW5zaW9uID0gdXJsLnN1YnN0cmluZyhkb3RJbmRleCAr
IDEpOworICAgIGF1dG8gZXh0ZW5zaW9uRnJvbVVSTCA9IHVybC5zdWJzdHJpbmcoZG90SW5kZXgg
KyAxKTsKIAotICAgIGNvbnN0IFBsdWdpbkRhdGEmIHBsdWdpbkRhdGEgPSBwYWdlLT5wbHVnaW5E
YXRhKCk7Ci0KLSAgICBWZWN0b3I8TWltZUNsYXNzSW5mbz4gbWltZXM7Ci0gICAgVmVjdG9yPHNp
emVfdD4gbWltZVBsdWdpbkluZGljZXM7Ci0gICAgcGx1Z2luRGF0YS5nZXRXZWJWaXNpYmxlTWlt
ZXNBbmRQbHVnaW5JbmRpY2VzKG1pbWVzLCBtaW1lUGx1Z2luSW5kaWNlcyk7Ci0gICAgZm9yIChh
dXRvJiBtaW1lIDogbWltZXMpIHsKLSAgICAgICAgZm9yIChhdXRvJiBtaW1lRXh0ZW5zaW9uIDog
bWltZS5leHRlbnNpb25zKSB7Ci0gICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2Fz
ZShleHRlbnNpb24sIG1pbWVFeHRlbnNpb24pKQotICAgICAgICAgICAgICAgIHJldHVybiBtaW1l
LnR5cGU7CisgICAgZm9yIChhdXRvJiB0eXBlIDogcGFnZS5wbHVnaW5EYXRhKCkud2ViVmlzaWJs
ZU1pbWVUeXBlcygpKSB7CisgICAgICAgIGZvciAoYXV0byYgZXh0ZW5zaW9uIDogdHlwZS5leHRl
bnNpb25zKSB7CisgICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShleHRlbnNp
b25Gcm9tVVJMLCBleHRlbnNpb24pKQorICAgICAgICAgICAgICAgIHJldHVybiB0eXBlLnR5cGU7
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIHsg
fTsKIH0KIAogc3RhdGljIHZvaWQgbG9nUGx1Z2luUmVxdWVzdChQYWdlKiBwYWdlLCBjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBzdWNjZXNzKQpAQCAtMTk3
LDcgKzE5Miw3IEBAIHN0YXRpYyB2b2lkIGxvZ1BsdWdpblJlcXVlc3QoUGFnZSogcGFnZSwKICAg
ICBTdHJpbmcgbmV3TUlNRVR5cGUgPSBtaW1lVHlwZTsKICAgICBpZiAoIW5ld01JTUVUeXBlKSB7
CiAgICAgICAgIC8vIFRyeSB0byBmaWd1cmUgb3V0IHRoZSBNSU1FIHR5cGUgZnJvbSB0aGUgVVJM
IGV4dGVuc2lvbi4KLSAgICAgICAgbmV3TUlNRVR5cGUgPSBmaW5kUGx1Z2luTUlNRVR5cGVGcm9t
VVJMKHBhZ2UsIHVybCk7CisgICAgICAgIG5ld01JTUVUeXBlID0gZmluZFBsdWdpbk1JTUVUeXBl
RnJvbVVSTCgqcGFnZSwgdXJsKTsKICAgICAgICAgaWYgKCFuZXdNSU1FVHlwZSkKICAgICAgICAg
ICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCShyZXZp
c2lvbiAyNjMwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDcgKzI1LDkgQEAKIAogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1
ZGUgIkNvb2tpZUphci5oIgorI2luY2x1ZGUgIkRPTU1pbWVUeXBlLmgiCiAjaW5jbHVkZSAiRE9N
TWltZVR5cGVBcnJheS5oIgorI2luY2x1ZGUgIkRPTVBsdWdpbi5oIgogI2luY2x1ZGUgIkRPTVBs
dWdpbkFycmF5LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpA
QCAtMTk1LDE0ICsxOTcsNjAgQEAgdm9pZCBOYXZpZ2F0b3I6OnNob3dTaGFyZURhdGEoRXhjZXB0
aW9uTwogICAgIH0pOwogfQogCit2b2lkIE5hdmlnYXRvcjo6aW5pdGlhbGl6ZVBsdWdpbkFuZE1J
TUVUeXBlQXJyYXlzKCkKK3sKKyAgICBpZiAobV9wbHVnaW5zKQorICAgICAgICByZXR1cm47CisK
KyAgICBhdXRvKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSB8fCAhZnJh
bWUtPnBhZ2UoKSkgeworICAgICAgICBtX3BsdWdpbnMgPSBET01QbHVnaW5BcnJheTo6Y3JlYXRl
KCp0aGlzKTsKKyAgICAgICAgbV9taW1lVHlwZXMgPSBET01NaW1lVHlwZUFycmF5OjpjcmVhdGUo
KnRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBbcHVibGljbHlWaXNp
YmxlUGx1Z2lucywgYWRkaXRpb25hbFdlYlZpc2liaWxlUGx1Z2luc10gPSBmcmFtZS0+cGFnZSgp
LT5wbHVnaW5EYXRhKCkucHVibGljbHlWaXNpYmxlUGx1Z2luc0FuZEFkZGl0aW9uYWxXZWJWaXNp
YmxlUGx1Z2lucygpOworCisgICAgVmVjdG9yPFJlZjxET01QbHVnaW4+PiBwdWJsaWNseVZpc2li
bGVET01QbHVnaW5zOworICAgIFZlY3RvcjxSZWY8RE9NUGx1Z2luPj4gYWRkaXRpb25hbFdlYlZp
c2liaWxlRE9NUGx1Z2luczsKKyAgICBWZWN0b3I8UmVmPERPTU1pbWVUeXBlPj4gd2ViVmlzaWJp
bGVET01NaW1lVHlwZXM7CisKKyAgICBwdWJsaWNseVZpc2libGVET01QbHVnaW5zLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkocHVibGljbHlWaXNpYmxlUGx1Z2lucy5zaXplKCkpOworICAgIGZvciAo
YXV0byYgcGx1Z2luIDogcHVibGljbHlWaXNpYmxlUGx1Z2lucykgeworICAgICAgICBhdXRvIHdy
YXBwZXIgPSBET01QbHVnaW46OmNyZWF0ZSgqdGhpcywgcGx1Z2luKTsKKyAgICAgICAgd2ViVmlz
aWJpbGVET01NaW1lVHlwZXMuYXBwZW5kVmVjdG9yKHdyYXBwZXItPm1pbWVUeXBlcygpKTsKKyAg
ICAgICAgcHVibGljbHlWaXNpYmxlRE9NUGx1Z2lucy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZSh3
cmFwcGVyKSk7CisgICAgfQorCisgICAgYWRkaXRpb25hbFdlYlZpc2liaWxlRE9NUGx1Z2lucy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFkZGl0aW9uYWxXZWJWaXNpYmlsZVBsdWdpbnMuc2l6ZSgp
KTsKKyAgICBmb3IgKGF1dG8mIHBsdWdpbiA6IGFkZGl0aW9uYWxXZWJWaXNpYmlsZVBsdWdpbnMp
IHsKKyAgICAgICAgYXV0byB3cmFwcGVyID0gRE9NUGx1Z2luOjpjcmVhdGUoKnRoaXMsIHBsdWdp
bik7CisgICAgICAgIHdlYlZpc2liaWxlRE9NTWltZVR5cGVzLmFwcGVuZFZlY3Rvcih3cmFwcGVy
LT5taW1lVHlwZXMoKSk7CisgICAgICAgIGFkZGl0aW9uYWxXZWJWaXNpYmlsZURPTVBsdWdpbnMu
dW5jaGVja2VkQXBwZW5kKFdURk1vdmUod3JhcHBlcikpOworICAgIH0KKworICAgIHN0ZDo6c29y
dChwdWJsaWNseVZpc2libGVET01QbHVnaW5zLmJlZ2luKCksIHB1YmxpY2x5VmlzaWJsZURPTVBs
dWdpbnMuZW5kKCksIFtdKGNvbnN0IFJlZjxET01QbHVnaW4+JiBhLCBjb25zdCBSZWY8RE9NUGx1
Z2luPiYgYikgeworICAgICAgICByZXR1cm4gY29kZVBvaW50Q29tcGFyZUxlc3NUaGFuKGEtPm5h
bWUoKSwgYi0+bmFtZSgpKTsKKyAgICB9KTsKKworICAgIHN0ZDo6c29ydCh3ZWJWaXNpYmlsZURP
TU1pbWVUeXBlcy5iZWdpbigpLCB3ZWJWaXNpYmlsZURPTU1pbWVUeXBlcy5lbmQoKSwgW10oY29u
c3QgUmVmPERPTU1pbWVUeXBlPiYgYSwgY29uc3QgUmVmPERPTU1pbWVUeXBlPiYgYikgeworICAg
ICAgICByZXR1cm4gY29kZVBvaW50Q29tcGFyZUxlc3NUaGFuKGEtPnR5cGUoKSwgYi0+dHlwZSgp
KTsKKyAgICB9KTsKKworICAgIC8vIE5PVEU6IEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gc29ydCBh
ZGRpdGlvbmFsV2ViVmlzaWJpbGVET01QbHVnaW5zLCBhcyB0aGV5IGFyZSBvbmx5IGFjY2Vzc2li
bGUgdmlhCisgICAgLy8gbmFtZWQgcHJvcGVydHkgbG9vayB1cCwgc29ydCB0aGVpciBvcmRlciBp
cyBub3QgZXhwb3NlZC4KKworICAgIG1fcGx1Z2lucyA9IERPTVBsdWdpbkFycmF5OjpjcmVhdGUo
KnRoaXMsIFdURk1vdmUocHVibGljbHlWaXNpYmxlRE9NUGx1Z2lucyksIFdURk1vdmUoYWRkaXRp
b25hbFdlYlZpc2liaWxlRE9NUGx1Z2lucykpOworICAgIG1fbWltZVR5cGVzID0gRE9NTWltZVR5
cGVBcnJheTo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHdlYlZpc2liaWxlRE9NTWltZVR5cGVzKSk7
Cit9CisKIERPTVBsdWdpbkFycmF5JiBOYXZpZ2F0b3I6OnBsdWdpbnMoKQogewogICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkKICAg
ICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dOYXZpZ2F0b3JBUElB
Y2Nlc3NlZCgqZnJhbWUtPmRvY3VtZW50KCksIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6Ok5hdmln
YXRvckFQSTo6UGx1Z2lucyk7CiAgICAgfQotICAgIGlmICghbV9wbHVnaW5zKQotICAgICAgICBt
X3BsdWdpbnMgPSBET01QbHVnaW5BcnJheTo6Y3JlYXRlKCp0aGlzKTsKKyAgICBpbml0aWFsaXpl
UGx1Z2luQW5kTUlNRVR5cGVBcnJheXMoKTsKICAgICByZXR1cm4gKm1fcGx1Z2luczsKIH0KIApA
QCAtMjEyLDggKzI2MCw3IEBAIERPTU1pbWVUeXBlQXJyYXkmIE5hdmlnYXRvcjo6bWltZVR5cGVz
KCkKICAgICAgICAgaWYgKGF1dG8qIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkKICAgICAgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dOYXZpZ2F0b3JBUElBY2Nlc3NlZCgq
ZnJhbWUtPmRvY3VtZW50KCksIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6Ok5hdmlnYXRvckFQSTo6
TWltZVR5cGVzKTsKICAgICB9Ci0gICAgaWYgKCFtX21pbWVUeXBlcykKLSAgICAgICAgbV9taW1l
VHlwZXMgPSBET01NaW1lVHlwZUFycmF5OjpjcmVhdGUoKnRoaXMpOworICAgIGluaXRpYWxpemVQ
bHVnaW5BbmRNSU1FVHlwZUFycmF5cygpOwogICAgIHJldHVybiAqbV9taW1lVHlwZXM7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuaAkocmV2aXNpb24gMjYzMDA3KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsOCBA
QCBwcml2YXRlOgogICAgIHZvaWQgc2hvd1NoYXJlRGF0YShFeGNlcHRpb25PcjxTaGFyZURhdGFX
aXRoUGFyc2VkVVJMJj4sIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOwogICAgIGV4cGxpY2l0IE5h
dmlnYXRvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRE9NV2luZG93Jik7CiAKKyAgICB2b2lk
IGluaXRpYWxpemVQbHVnaW5BbmRNSU1FVHlwZUFycmF5cygpOworCiAgICAgbXV0YWJsZSBSZWZQ
dHI8U2hhcmVEYXRhUmVhZGVyPiBtX2xvYWRlcjsKICAgICBtdXRhYmxlIGJvb2wgbV9oYXNQZW5k
aW5nU2hhcmUgeyBmYWxzZSB9OwogICAgIG11dGFibGUgUmVmUHRyPERPTVBsdWdpbkFycmF5PiBt
X3BsdWdpbnM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuaWRsCShyZXZpc2lvbiAyNjMw
MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTIxLDEwICsyMSw3IEBACiAgICAgR2VuZXJhdGVJc1JlYWNoYWJsZT1SZWFjaGFibGVGcm9t
RE9NV2luZG93LAogICAgIEpTQ3VzdG9tTWFya0Z1bmN0aW9uLAogXSBpbnRlcmZhY2UgTmF2aWdh
dG9yIHsKLSAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NUGx1Z2luQXJyYXkgcGx1Z2luczsKLSAg
ICByZWFkb25seSBhdHRyaWJ1dGUgRE9NTWltZVR5cGVBcnJheSBtaW1lVHlwZXM7CiAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gY29va2llRW5hYmxlZDsKLSAgICBib29sZWFuIGphdmFF
bmFibGVkKCk7CiAKICAgICBbQ29uZGl0aW9uYWw9TkFWSUdBVE9SX1NUQU5EQUxPTkVdIHJlYWRv
bmx5IGF0dHJpYnV0ZSBib29sZWFuIHN0YW5kYWxvbmU7CiAKQEAgLTM1LDUgKzMyLDYgQEAgTmF2
aWdhdG9yIGltcGxlbWVudHMgTmF2aWdhdG9ySUQ7CiBOYXZpZ2F0b3IgaW1wbGVtZW50cyBOYXZp
Z2F0b3JMYW5ndWFnZTsKIE5hdmlnYXRvciBpbXBsZW1lbnRzIE5hdmlnYXRvck1heFRvdWNoUG9p
bnRzOwogTmF2aWdhdG9yIGltcGxlbWVudHMgTmF2aWdhdG9yT25MaW5lOworTmF2aWdhdG9yIGlt
cGxlbWVudHMgTmF2aWdhdG9yUGx1Z2luczsKIE5hdmlnYXRvciBpbXBsZW1lbnRzIE5hdmlnYXRv
clNlcnZpY2VXb3JrZXI7CiBOYXZpZ2F0b3IgaW1wbGVtZW50cyBOYXZpZ2F0b3JTaGFyZTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yUGx1Z2lucy5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3JQbHVnaW5zLmlkbAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvclBsdWdpbnMuaWRsCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitbCisgICAgTm9JbnRlcmZhY2VPYmpl
Y3QKK10gaW50ZXJmYWNlIE5hdmlnYXRvclBsdWdpbnMgeworICAgIFtTYW1lT2JqZWN0XSByZWFk
b25seSBhdHRyaWJ1dGUgRE9NUGx1Z2luQXJyYXkgcGx1Z2luczsKKyAgICBbU2FtZU9iamVjdF0g
cmVhZG9ubHkgYXR0cmlidXRlIERPTU1pbWVUeXBlQXJyYXkgbWltZVR5cGVzOworICAgIGJvb2xl
YW4gamF2YUVuYWJsZWQoKTsKK307CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTU1p
bWVUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTU1pbWVU
eXBlLmNwcAkocmV2aXNpb24gMjYzMDA3KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01N
aW1lVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDU5ICsyMCw0OSBAQAogI2luY2x1ZGUg
IkRPTU1pbWVUeXBlLmgiCiAKICNpbmNsdWRlICJET01QbHVnaW4uaCIKLSNpbmNsdWRlICJGcmFt
ZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1
ZGUgIlBsdWdpbkRhdGEuaCIKKyNpbmNsdWRlICJOYXZpZ2F0b3IuaCIKICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRE9NTWltZVR5
cGU6OkRPTU1pbWVUeXBlKFJlZlB0cjxQbHVnaW5EYXRhPiYmIHBsdWdpbkRhdGEsIEZyYW1lKiBm
cmFtZSwgdW5zaWduZWQgaW5kZXgpCi0gICAgOiBGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIoZnJh
bWUpCi0gICAgLCBtX3BsdWdpbkRhdGEoV1RGTW92ZShwbHVnaW5EYXRhKSkKLXsKLSAgICBWZWN0
b3I8TWltZUNsYXNzSW5mbz4gbWltZXM7Ci0gICAgVmVjdG9yPHNpemVfdD4gbWltZVBsdWdpbklu
ZGljZXM7Ci0gICAgbV9wbHVnaW5EYXRhLT5nZXRXZWJWaXNpYmxlTWltZXNBbmRQbHVnaW5JbmRp
Y2VzKG1pbWVzLCBtaW1lUGx1Z2luSW5kaWNlcyk7Ci0gICAgbV9taW1lQ2xhc3NJbmZvID0gbWlt
ZXNbaW5kZXhdOwotICAgIG1fcGx1Z2luSW5mbyA9IG1fcGx1Z2luRGF0YS0+d2ViVmlzaWJsZVBs
dWdpbnMoKVttaW1lUGx1Z2luSW5kaWNlc1tpbmRleF1dOworUmVmPERPTU1pbWVUeXBlPiBET01N
aW1lVHlwZTo6Y3JlYXRlKE5hdmlnYXRvciYgbmF2aWdhdG9yLCBjb25zdCBNaW1lQ2xhc3NJbmZv
JiBpbmZvLCBET01QbHVnaW4mIGVuYWJsZWRQbHVnaW4pCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRE9NTWltZVR5cGUobmF2aWdhdG9yLCBpbmZvLCBlbmFibGVkUGx1Z2luKSk7Cit9CisK
K0RPTU1pbWVUeXBlOjpET01NaW1lVHlwZShOYXZpZ2F0b3ImIG5hdmlnYXRvciwgY29uc3QgTWlt
ZUNsYXNzSW5mbyYgaW5mbywgRE9NUGx1Z2luJiBlbmFibGVkUGx1Z2luKQorICAgIDogbV9uYXZp
Z2F0b3IobWFrZVdlYWtQdHIobmF2aWdhdG9yKSkKKyAgICAsIG1faW5mbyhpbmZvKQorICAgICwg
bV9lbmFibGVkUGx1Z2luKG1ha2VXZWFrUHRyKGVuYWJsZWRQbHVnaW4pKQorewogfQogCiBET01N
aW1lVHlwZTo6fkRPTU1pbWVUeXBlKCkgPSBkZWZhdWx0OwogCiBTdHJpbmcgRE9NTWltZVR5cGU6
OnR5cGUoKSBjb25zdAogewotICAgIHJldHVybiBtX21pbWVDbGFzc0luZm8udHlwZTsKKyAgICBy
ZXR1cm4gbV9pbmZvLnR5cGU7CiB9CiAKIFN0cmluZyBET01NaW1lVHlwZTo6c3VmZml4ZXMoKSBj
b25zdAogewotICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBleHRlbnNpb25zID0gbV9taW1lQ2xh
c3NJbmZvLmV4dGVuc2lvbnM7Ci0KICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgKytpKSB7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2luZm8uZXh0ZW5zaW9ucy5zaXplKCk7ICsraSkgewogICAgICAg
ICBpZiAoaSkKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcsJyk7Ci0gICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKGV4dGVuc2lvbnNbaV0pOworICAgICAgICBidWlsZGVyLmFwcGVuZChtX2luZm8u
ZXh0ZW5zaW9uc1tpXSk7CiAgICAgfQogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9
CiAKIFN0cmluZyBET01NaW1lVHlwZTo6ZGVzY3JpcHRpb24oKSBjb25zdAogewotICAgIHJldHVy
biBtX21pbWVDbGFzc0luZm8uZGVzYzsKKyAgICByZXR1cm4gbV9pbmZvLmRlc2M7CiB9CiAKIFJl
ZlB0cjxET01QbHVnaW4+IERPTU1pbWVUeXBlOjplbmFibGVkUGx1Z2luKCkgY29uc3QKIHsKLSAg
ICBpZiAoIW1fZnJhbWUgfHwgIW1fZnJhbWUtPnBhZ2UoKSB8fCAhbV9mcmFtZS0+cGFnZSgpLT5t
YWluRnJhbWUoKS5sb2FkZXIoKS5hcmVQbHVnaW5zRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiBtaW1lczsKLSAgICBWZWN0b3I8
c2l6ZV90PiBtaW1lUGx1Z2luSW5kaWNlczsKLSAgICBtX3BsdWdpbkRhdGEtPmdldFdlYlZpc2li
bGVNaW1lc0FuZFBsdWdpbkluZGljZXMobWltZXMsIG1pbWVQbHVnaW5JbmRpY2VzKTsKLSAgICBy
ZXR1cm4gRE9NUGx1Z2luOjpjcmVhdGUobV9wbHVnaW5EYXRhLmdldCgpLCBtX2ZyYW1lLCBtX3Bs
dWdpbkluZm8pOworICAgIHJldHVybiBtX2VuYWJsZWRQbHVnaW4uZ2V0KCk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NTWltZVR5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTU1pbWVUeXBlLmgJ
KHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NTWltZVR5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTksMTggKzE5LDE5IEBACiAKICNwcmFnbWEgb25jZQogCi0j
aW5jbHVkZSAiRnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyLmgiCiAjaW5jbHVkZSAiUGx1Z2luRGF0
YS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgRE9NUGx1Z2luOworY2xhc3MgTmF2aWdhdG9yOwogCi1jbGFzcyBET01NaW1lVHlwZSA6IHB1
YmxpYyBSZWZDb3VudGVkPERPTU1pbWVUeXBlPiwgcHVibGljIEZyYW1lRGVzdHJ1Y3Rpb25PYnNl
cnZlciB7CitjbGFzcyBET01NaW1lVHlwZSA6IHB1YmxpYyBSZWZDb3VudGVkPERPTU1pbWVUeXBl
PiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxET01NaW1lVHlwZT4gY3JlYXRlKFJlZlB0cjxQ
bHVnaW5EYXRhPiYmIHBsdWdpbkRhdGEsIEZyYW1lKiBmcmFtZSwgdW5zaWduZWQgaW5kZXgpIHsg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRE9NTWltZVR5cGUoV1RGTW92ZShwbHVnaW5EYXRhKSwgZnJh
bWUsIGluZGV4KSk7IH0KKyAgICBzdGF0aWMgUmVmPERPTU1pbWVUeXBlPiBjcmVhdGUoTmF2aWdh
dG9yJiwgY29uc3QgTWltZUNsYXNzSW5mbyYsIERPTVBsdWdpbiYpOwogICAgIH5ET01NaW1lVHlw
ZSgpOwogCiAgICAgU3RyaW5nIHR5cGUoKSBjb25zdDsKQEAgLTM4LDExICszOSwxNCBAQCBwdWJs
aWM6CiAgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7CiAgICAgUmVmUHRyPERPTVBsdWdp
bj4gZW5hYmxlZFBsdWdpbigpIGNvbnN0OwogCisgICAgTmF2aWdhdG9yKiBuYXZpZ2F0b3IoKSB7
IHJldHVybiBtX25hdmlnYXRvci5nZXQoKTsgfQorCiBwcml2YXRlOgotICAgIERPTU1pbWVUeXBl
KFJlZlB0cjxQbHVnaW5EYXRhPiYmLCBGcmFtZSosIHVuc2lnbmVkIGluZGV4KTsKLSAgICBNaW1l
Q2xhc3NJbmZvIG1fbWltZUNsYXNzSW5mbzsKLSAgICBSZWZQdHI8UGx1Z2luRGF0YT4gbV9wbHVn
aW5EYXRhOwotICAgIFBsdWdpbkluZm8gbV9wbHVnaW5JbmZvOworICAgIERPTU1pbWVUeXBlKE5h
dmlnYXRvciYsIGNvbnN0IE1pbWVDbGFzc0luZm8mLCBET01QbHVnaW4mKTsKKworICAgIFdlYWtQ
dHI8TmF2aWdhdG9yPiBtX25hdmlnYXRvcjsKKyAgICBNaW1lQ2xhc3NJbmZvIG1faW5mbzsKKyAg
ICBXZWFrUHRyPERPTVBsdWdpbj4gbV9lbmFibGVkUGx1Z2luOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01NaW1lVHlwZS5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01NaW1lVHlwZS5pZGwJKHJl
dmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NTWltZVR5cGUuaWRs
CSh3b3JraW5nIGNvcHkpCkBAIC0xOSw3ICsxOSw5IEBACiAqLwogCiBbCi0gICAgSW50ZXJmYWNl
TmFtZT1NaW1lVHlwZQorICAgIEludGVyZmFjZU5hbWU9TWltZVR5cGUsCisgICAgR2VuZXJhdGVJ
c1JlYWNoYWJsZT1SZWFjaGFibGVGcm9tTmF2aWdhdG9yLAorICAgIEltcGxlbWVudGF0aW9uTGFj
a3NWVGFibGUKIF0gaW50ZXJmYWNlIERPTU1pbWVUeXBlIHsKICAgICByZWFkb25seSBhdHRyaWJ1
dGUgRE9NU3RyaW5nIHR5cGU7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBzdWZm
aXhlczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NTWltZVR5cGVBcnJheS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01NaW1lVHlwZUFycmF5LmNw
cAkocmV2aXNpb24gMjYzMDA3KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01NaW1lVHlw
ZUFycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsMTAgKzIwLDggQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJET01NaW1lVHlwZUFycmF5LmgiCiAKLSNpbmNsdWRlICJET01Q
bHVnaW4uaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRl
ICJQbHVnaW5EYXRhLmgiCisjaW5jbHVkZSAiRE9NTWltZVR5cGUuaCIKKyNpbmNsdWRlICJOYXZp
Z2F0b3IuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L0F0b21TdHJpbmcuaD4KIApAQCAtMzEsOCArMjksMTQgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoRE9NTWltZVR5cGVBcnJheSk7CiAK
LURPTU1pbWVUeXBlQXJyYXk6OkRPTU1pbWVUeXBlQXJyYXkoTmF2aWdhdG9yJiBuYXZpZ2F0b3Ip
CitSZWY8RE9NTWltZVR5cGVBcnJheT4gRE9NTWltZVR5cGVBcnJheTo6Y3JlYXRlKE5hdmlnYXRv
ciYgbmF2aWdhdG9yLCBWZWN0b3I8UmVmPERPTU1pbWVUeXBlPj4mJiB0eXBlcykKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBET01NaW1lVHlwZUFycmF5KG5hdmlnYXRvciwgV1RGTW92ZSh0
eXBlcykpKTsKK30KKworRE9NTWltZVR5cGVBcnJheTo6RE9NTWltZVR5cGVBcnJheShOYXZpZ2F0
b3ImIG5hdmlnYXRvciwgVmVjdG9yPFJlZjxET01NaW1lVHlwZT4+JiYgdHlwZXMpCiAgICAgOiBt
X25hdmlnYXRvcihtYWtlV2Vha1B0cihuYXZpZ2F0b3IpKQorICAgICwgbV90eXBlcyhXVEZNb3Zl
KHR5cGVzKSkKIHsKIH0KIApAQCAtNDAsNzYgKzQ0LDMyIEBAIERPTU1pbWVUeXBlQXJyYXk6On5E
T01NaW1lVHlwZUFycmF5KCkgPSAKIAogdW5zaWduZWQgRE9NTWltZVR5cGVBcnJheTo6bGVuZ3Ro
KCkgY29uc3QKIHsKLSAgICBQbHVnaW5EYXRhKiBkYXRhID0gZ2V0UGx1Z2luRGF0YSgpOwotICAg
IGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBWZWN0b3I8TWltZUNsYXNzSW5m
bz4gbWltZXM7Ci0gICAgVmVjdG9yPHNpemVfdD4gbWltZVBsdWdpbkluZGljZXM7Ci0gICAgZGF0
YS0+Z2V0V2ViVmlzaWJsZU1pbWVzQW5kUGx1Z2luSW5kaWNlcyhtaW1lcywgbWltZVBsdWdpbklu
ZGljZXMpOwotICAgIHJldHVybiBtaW1lcy5zaXplKCk7CisgICAgcmV0dXJuIG1fdHlwZXMuc2l6
ZSgpOwogfQogCiBSZWZQdHI8RE9NTWltZVR5cGU+IERPTU1pbWVUeXBlQXJyYXk6Oml0ZW0odW5z
aWduZWQgaW5kZXgpCiB7Ci0gICAgUGx1Z2luRGF0YSogZGF0YSA9IGdldFBsdWdpbkRhdGEoKTsK
LSAgICBpZiAoIWRhdGEpCisgICAgaWYgKGluZGV4ID49IG1fdHlwZXMuc2l6ZSgpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiBtaW1lczsKLSAg
ICBWZWN0b3I8c2l6ZV90PiBtaW1lUGx1Z2luSW5kaWNlczsKLSAgICBkYXRhLT5nZXRXZWJWaXNp
YmxlTWltZXNBbmRQbHVnaW5JbmRpY2VzKG1pbWVzLCBtaW1lUGx1Z2luSW5kaWNlcyk7Ci0KLSAg
ICBpZiAoaW5kZXggPj0gbWltZXMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICByZXR1cm4gRE9NTWltZVR5cGU6OmNyZWF0ZShkYXRhLCBmcmFtZSgpLCBpbmRleCk7CisgICAg
cmV0dXJuIG1fdHlwZXNbaW5kZXhdLnB0cigpOwogfQogCiBSZWZQdHI8RE9NTWltZVR5cGU+IERP
TU1pbWVUeXBlQXJyYXk6Om5hbWVkSXRlbShjb25zdCBBdG9tU3RyaW5nJiBwcm9wZXJ0eU5hbWUp
CiB7Ci0gICAgUGx1Z2luRGF0YSogZGF0YSA9IGdldFBsdWdpbkRhdGEoKTsKLSAgICBpZiAoIWRh
dGEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgVmVjdG9yPE1pbWVDbGFzc0luZm8+
IG1pbWVzOwotICAgIFZlY3RvcjxzaXplX3Q+IG1pbWVQbHVnaW5JbmRpY2VzOwotICAgIGRhdGEt
PmdldFdlYlZpc2libGVNaW1lc0FuZFBsdWdpbkluZGljZXMobWltZXMsIG1pbWVQbHVnaW5JbmRp
Y2VzKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWltZXMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgaWYgKG1pbWVzW2ldLnR5cGUgPT0gcHJvcGVydHlOYW1lKQotICAgICAgICAgICAg
cmV0dXJuIERPTU1pbWVUeXBlOjpjcmVhdGUoZGF0YSwgZnJhbWUoKSwgaSk7CisgICAgZm9yIChh
dXRvJiB0eXBlIDogbV90eXBlcykgeworICAgICAgICBpZiAodHlwZS0+dHlwZSgpID09IHByb3Bl
cnR5TmFtZSkKKyAgICAgICAgICAgIHJldHVybiB0eXBlLnB0cigpOwogICAgIH0KICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAogVmVjdG9yPEF0b21TdHJpbmc+IERPTU1pbWVUeXBlQXJyYXk6OnN1
cHBvcnRlZFByb3BlcnR5TmFtZXMoKQogewotICAgIFBsdWdpbkRhdGEqIGRhdGEgPSBnZXRQbHVn
aW5EYXRhKCk7Ci0gICAgaWYgKCFkYXRhKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgVmVj
dG9yPE1pbWVDbGFzc0luZm8+IG1pbWVzOwotICAgIFZlY3RvcjxzaXplX3Q+IG1pbWVQbHVnaW5J
bmRpY2VzOwotICAgIGRhdGEtPmdldFdlYlZpc2libGVNaW1lc0FuZFBsdWdpbkluZGljZXMobWlt
ZXMsIG1pbWVQbHVnaW5JbmRpY2VzKTsKLQogICAgIFZlY3RvcjxBdG9tU3RyaW5nPiByZXN1bHQ7
Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobWltZXMuc2l6ZSgpKTsKLSAgICBm
b3IgKGF1dG8mIGluZm8gOiBtaW1lcykKLSAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChX
VEZNb3ZlKGluZm8udHlwZSkpOwotCisgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bV90eXBlcy5zaXplKCkpOworICAgIGZvciAoYXV0byYgdHlwZSA6IG1fdHlwZXMpCisgICAgICAg
IHJlc3VsdC51bmNoZWNrZWRBcHBlbmQodHlwZS0+dHlwZSgpKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1QbHVnaW5EYXRhKiBET01NaW1lVHlwZUFycmF5OjpnZXRQbHVnaW5EYXRhKCkgY29u
c3QKLXsKLSAgICBhdXRvKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvKiBwYWdlID0gZnJhbWUtPnBhZ2Uo
KTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJu
ICZwYWdlLT5wbHVnaW5EYXRhKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NTWltZVR5cGVBcnJheS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NTWltZVR5cGVBcnJheS5oCShyZXZpc2lvbiAyNjMw
MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTU1pbWVUeXBlQXJyYXkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjAsMzQgKzIwLDM1IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAi
RE9NTWltZVR5cGUuaCIKLSNpbmNsdWRlICJOYXZpZ2F0b3IuaCIKICNpbmNsdWRlICJTY3JpcHRX
cmFwcGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBQbHVnaW5EYXRhOworY2xhc3MgRE9NTWlt
ZVR5cGU7CitjbGFzcyBOYXZpZ2F0b3I7CiAKIGNsYXNzIERPTU1pbWVUeXBlQXJyYXkgZmluYWwg
OiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgUmVmQ291bnRlZDxET01NaW1lVHlwZUFy
cmF5PiB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChET01NaW1lVHlwZUFycmF5KTsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPERPTU1pbWVUeXBlQXJyYXk+IGNyZWF0ZShOYXZpZ2F0b3Im
IG5hdmlnYXRvcikgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBET01NaW1lVHlwZUFycmF5KG5hdmln
YXRvcikpOyB9CisgICAgc3RhdGljIFJlZjxET01NaW1lVHlwZUFycmF5PiBjcmVhdGUoTmF2aWdh
dG9yJiwgVmVjdG9yPFJlZjxET01NaW1lVHlwZT4+JiYgPSB7IH0pOwogICAgIH5ET01NaW1lVHlw
ZUFycmF5KCk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKICAgICBSZWZQdHI8RE9N
TWltZVR5cGU+IGl0ZW0odW5zaWduZWQgaW5kZXgpOwogICAgIFJlZlB0cjxET01NaW1lVHlwZT4g
bmFtZWRJdGVtKGNvbnN0IEF0b21TdHJpbmcmIHByb3BlcnR5TmFtZSk7CiAgICAgVmVjdG9yPEF0
b21TdHJpbmc+IHN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKTsKLSAgICAKKwogICAgIE5hdmlnYXRv
ciogbmF2aWdhdG9yKCkgeyByZXR1cm4gbV9uYXZpZ2F0b3IuZ2V0KCk7IH0KIAogcHJpdmF0ZToK
LSAgICBleHBsaWNpdCBET01NaW1lVHlwZUFycmF5KE5hdmlnYXRvciYpOwotICAgIFBsdWdpbkRh
dGEqIGdldFBsdWdpbkRhdGEoKSBjb25zdDsKLSAgICBGcmFtZSogZnJhbWUoKSBjb25zdCB7IHJl
dHVybiBtX25hdmlnYXRvciA/IG1fbmF2aWdhdG9yLT5mcmFtZSgpIDogbnVsbHB0cjsgfQorICAg
IGV4cGxpY2l0IERPTU1pbWVUeXBlQXJyYXkoTmF2aWdhdG9yJiwgVmVjdG9yPFJlZjxET01NaW1l
VHlwZT4+JiYpOwogICAgIAogICAgIFdlYWtQdHI8TmF2aWdhdG9yPiBtX25hdmlnYXRvcjsKKyAg
ICBWZWN0b3I8UmVmPERPTU1pbWVUeXBlPj4gbV90eXBlczsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2luLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTVBsdWdpbi5jcHAJKHJldmlzaW9u
IDI2MzAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2luLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTksOCArMTksOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkRPTVBsdWdpbi5oIgogCi0jaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgotI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiRE9NTWltZVR5cGUuaCIKKyNpbmNsdWRlICJOYXZpZ2F0b3IuaCIKICNp
bmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21T
dHJpbmcuaD4KIApAQCAtMjgsMTAgKzI4LDI5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RG
X01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKERPTVBsdWdpbik7CiAKLURPTVBsdWdpbjo6RE9NUGx1
Z2luKFBsdWdpbkRhdGEqIHBsdWdpbkRhdGEsIEZyYW1lKiBmcmFtZSwgUGx1Z2luSW5mbyBwbHVn
aW5JbmZvKQotICAgIDogRnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyKGZyYW1lKQotICAgICwgbV9w
bHVnaW5EYXRhKHBsdWdpbkRhdGEpCi0gICAgLCBtX3BsdWdpbkluZm8oV1RGTW92ZShwbHVnaW5J
bmZvKSkKK1JlZjxET01QbHVnaW4+IERPTVBsdWdpbjo6Y3JlYXRlKE5hdmlnYXRvciYgbmF2aWdh
dG9yLCBjb25zdCBQbHVnaW5JbmZvJiBpbmZvKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IERPTVBsdWdpbihuYXZpZ2F0b3IsIGluZm8pKTsKK30KKworc3RhdGljIFZlY3RvcjxSZWY8RE9N
TWltZVR5cGU+PiBtYWtlTWltZVR5cGVzKE5hdmlnYXRvciYgbmF2aWdhdG9yLCBjb25zdCBQbHVn
aW5JbmZvJiBpbmZvLCBET01QbHVnaW4mIHNlbGYpCit7CisgICAgVmVjdG9yPFJlZjxET01NaW1l
VHlwZT4+IHR5cGVzOworICAgIHR5cGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoaW5mby5taW1l
cy5zaXplKCkpOworICAgIGZvciAoYXV0byYgdHlwZSA6IGluZm8ubWltZXMpCisgICAgICAgIHR5
cGVzLnVuY2hlY2tlZEFwcGVuZChET01NaW1lVHlwZTo6Y3JlYXRlKG5hdmlnYXRvciwgdHlwZSwg
c2VsZikpOworCisgICAgc3RkOjpzb3J0KHR5cGVzLmJlZ2luKCksIHR5cGVzLmVuZCgpLCBbXShj
b25zdCBSZWY8RE9NTWltZVR5cGU+JiBhLCBjb25zdCBSZWY8RE9NTWltZVR5cGU+JiBiKSB7Cisg
ICAgICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlTGVzc1RoYW4oYS0+dHlwZSgpLCBiLT50eXBl
KCkpOworICAgIH0pOworCisgICAgcmV0dXJuIHR5cGVzOworfQorCitET01QbHVnaW46OkRPTVBs
dWdpbihOYXZpZ2F0b3ImIG5hdmlnYXRvciwgY29uc3QgUGx1Z2luSW5mbyYgaW5mbykKKyAgICA6
IG1fbmF2aWdhdG9yKG1ha2VXZWFrUHRyKG5hdmlnYXRvcikpCisgICAgLCBtX2luZm8oaW5mbykK
KyAgICAsIG1fbWltZVR5cGVzKG1ha2VNaW1lVHlwZXMobmF2aWdhdG9yLCBpbmZvLCAqdGhpcykp
CiB7CiB9CiAKQEAgLTM5LDYwICs1OCw0NyBAQCBET01QbHVnaW46On5ET01QbHVnaW4oKSA9IGRl
ZmF1bHQ7CiAKIFN0cmluZyBET01QbHVnaW46Om5hbWUoKSBjb25zdAogewotICAgIHJldHVybiBt
X3BsdWdpbkluZm8ubmFtZTsKKyAgICByZXR1cm4gbV9pbmZvLm5hbWU7CiB9CiAKIFN0cmluZyBE
T01QbHVnaW46OmZpbGVuYW1lKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9wbHVnaW5JbmZvLmZp
bGU7CisgICAgcmV0dXJuIG1faW5mby5maWxlOwogfQogCiBTdHJpbmcgRE9NUGx1Z2luOjpkZXNj
cmlwdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcGx1Z2luSW5mby5kZXNjOworICAgIHJl
dHVybiBtX2luZm8uZGVzYzsKIH0KIAogdW5zaWduZWQgRE9NUGx1Z2luOjpsZW5ndGgoKSBjb25z
dAogewotICAgIHJldHVybiBtX3BsdWdpbkluZm8ubWltZXMuc2l6ZSgpOworICAgIHJldHVybiBt
X21pbWVUeXBlcy5zaXplKCk7CiB9CiAKIFJlZlB0cjxET01NaW1lVHlwZT4gRE9NUGx1Z2luOjpp
dGVtKHVuc2lnbmVkIGluZGV4KQogewotICAgIGlmIChpbmRleCA+PSBtX3BsdWdpbkluZm8ubWlt
ZXMuc2l6ZSgpIHx8ICFtX2ZyYW1lIHx8ICFtX2ZyYW1lLT5wYWdlKCkpCisgICAgaWYgKGluZGV4
ID49IG1fbWltZVR5cGVzLnNpemUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBN
aW1lQ2xhc3NJbmZvIG1pbWUgPSBtX3BsdWdpbkluZm8ubWltZXNbaW5kZXhdOwotCi0gICAgVmVj
dG9yPE1pbWVDbGFzc0luZm8+IG1pbWVzOwotICAgIFZlY3RvcjxzaXplX3Q+IG1pbWVQbHVnaW5J
bmRpY2VzOwotICAgIFZlY3RvcjxQbHVnaW5JbmZvPiBwbHVnaW5zID0gbV9wbHVnaW5EYXRhLT53
ZWJWaXNpYmxlUGx1Z2lucygpOwotICAgIG1fcGx1Z2luRGF0YS0+Z2V0V2ViVmlzaWJsZU1pbWVz
QW5kUGx1Z2luSW5kaWNlcyhtaW1lcywgbWltZVBsdWdpbkluZGljZXMpOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtaW1lcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobWltZXNb
aV0gPT0gbWltZSAmJiBwbHVnaW5zW21pbWVQbHVnaW5JbmRpY2VzW2ldXSA9PSBtX3BsdWdpbklu
Zm8pCi0gICAgICAgICAgICByZXR1cm4gRE9NTWltZVR5cGU6OmNyZWF0ZShtX3BsdWdpbkRhdGEu
Z2V0KCksIG1fZnJhbWUsIGkpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1
cm4gbV9taW1lVHlwZXNbaW5kZXhdLnB0cigpOwogfQogCiBSZWZQdHI8RE9NTWltZVR5cGU+IERP
TVBsdWdpbjo6bmFtZWRJdGVtKGNvbnN0IEF0b21TdHJpbmcmIHByb3BlcnR5TmFtZSkKIHsKLSAg
ICBpZiAoIW1fZnJhbWUgfHwgIW1fZnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBWZWN0b3I8TWltZUNsYXNzSW5mbz4gbWltZXM7Ci0gICAgVmVjdG9yPHNpemVf
dD4gbWltZVBsdWdpbkluZGljZXM7Ci0gICAgbV9wbHVnaW5EYXRhLT5nZXRXZWJWaXNpYmxlTWlt
ZXNBbmRQbHVnaW5JbmRpY2VzKG1pbWVzLCBtaW1lUGx1Z2luSW5kaWNlcyk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1pbWVzLnNpemUoKTsgKytpKQotICAgICAgICBpZiAobWltZXNb
aV0udHlwZSA9PSBwcm9wZXJ0eU5hbWUpCi0gICAgICAgICAgICByZXR1cm4gRE9NTWltZVR5cGU6
OmNyZWF0ZShtX3BsdWdpbkRhdGEuZ2V0KCksIG1fZnJhbWUsIGkpOworICAgIGZvciAoYXV0byYg
dHlwZSA6IG1fbWltZVR5cGVzKSB7CisgICAgICAgIGlmICh0eXBlLT50eXBlKCkgPT0gcHJvcGVy
dHlOYW1lKQorICAgICAgICAgICAgcmV0dXJuIHR5cGUucHRyKCk7CisgICAgfQogICAgIHJldHVy
biBudWxscHRyOwogfQogCiBWZWN0b3I8QXRvbVN0cmluZz4gRE9NUGx1Z2luOjpzdXBwb3J0ZWRQ
cm9wZXJ0eU5hbWVzKCkKIHsKLSAgICAvLyBGSVhNRTogU2hvdWxkIGJlIGltcGxlbWVudGVkLgot
ICAgIHJldHVybiBWZWN0b3I8QXRvbVN0cmluZz4oKTsKKyAgICBWZWN0b3I8QXRvbVN0cmluZz4g
cmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fbWltZVR5cGVzLnNp
emUoKSk7CisgICAgZm9yIChhdXRvJiB0eXBlIDogbV9taW1lVHlwZXMpCisgICAgICAgIHJlc3Vs
dC51bmNoZWNrZWRBcHBlbmQodHlwZS0+dHlwZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RP
TVBsdWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2lu
LmgJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2lu
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5LDIxICsxOSwyMSBAQAogCiAjcHJhZ21hIG9uY2UKIAot
I2luY2x1ZGUgIkZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlci5oIgotI2luY2x1ZGUgIkRPTU1pbWVU
eXBlLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgogI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJs
ZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgUGx1Z2luOwotY2xhc3MgUGx1Z2luRGF0YTsKK2NsYXNzIERPTU1pbWVUeXBlOworY2xhc3Mg
TmF2aWdhdG9yOwogCi1jbGFzcyBET01QbHVnaW4gZmluYWwgOiBwdWJsaWMgU2NyaXB0V3JhcHBh
YmxlLCBwdWJsaWMgUmVmQ291bnRlZDxET01QbHVnaW4+LCBwdWJsaWMgRnJhbWVEZXN0cnVjdGlv
bk9ic2VydmVyIHsKK2NsYXNzIERPTVBsdWdpbiBmaW5hbCA6IHB1YmxpYyBTY3JpcHRXcmFwcGFi
bGUsIHB1YmxpYyBSZWZDb3VudGVkPERPTVBsdWdpbj4sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxE
T01QbHVnaW4+IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKERPTVBsdWdpbik7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxET01QbHVnaW4+IGNyZWF0ZShQbHVnaW5EYXRhKiBwbHVnaW5E
YXRhLCBGcmFtZSogZnJhbWUsIFBsdWdpbkluZm8gcGx1Z2luSW5mbykgeyByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBET01QbHVnaW4ocGx1Z2luRGF0YSwgZnJhbWUsIFdURk1vdmUocGx1Z2luSW5mbykp
KTsgfQorICAgIHN0YXRpYyBSZWY8RE9NUGx1Z2luPiBjcmVhdGUoTmF2aWdhdG9yJiwgY29uc3Qg
UGx1Z2luSW5mbyYpOwogICAgIH5ET01QbHVnaW4oKTsKIAogICAgIFN0cmluZyBuYW1lKCkgY29u
c3Q7CkBAIC00NiwxMCArNDYsMTYgQEAgcHVibGljOgogICAgIFJlZlB0cjxET01NaW1lVHlwZT4g
bmFtZWRJdGVtKGNvbnN0IEF0b21TdHJpbmcmIHByb3BlcnR5TmFtZSk7CiAgICAgVmVjdG9yPEF0
b21TdHJpbmc+IHN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKTsKIAorICAgIGNvbnN0IFZlY3RvcjxS
ZWY8RE9NTWltZVR5cGU+PiYgbWltZVR5cGVzKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVHlwZXM7
IH0KKworICAgIE5hdmlnYXRvciogbmF2aWdhdG9yKCkgeyByZXR1cm4gbV9uYXZpZ2F0b3IuZ2V0
KCk7IH0KKwogcHJpdmF0ZToKLSAgICBET01QbHVnaW4oUGx1Z2luRGF0YSosIEZyYW1lKiwgUGx1
Z2luSW5mbyk7Ci0gICAgUmVmUHRyPFBsdWdpbkRhdGE+IG1fcGx1Z2luRGF0YTsKLSAgICBQbHVn
aW5JbmZvIG1fcGx1Z2luSW5mbzsKKyAgICBET01QbHVnaW4oTmF2aWdhdG9yJiwgY29uc3QgUGx1
Z2luSW5mbyYpOworCisgICAgV2Vha1B0cjxOYXZpZ2F0b3I+IG1fbmF2aWdhdG9yOworICAgIFBs
dWdpbkluZm8gbV9pbmZvOworICAgIFZlY3RvcjxSZWY8RE9NTWltZVR5cGU+PiBtX21pbWVUeXBl
czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvRE9NUGx1Z2luLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L0RPTVBsdWdpbi5pZGwJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdp
bnMvRE9NUGx1Z2luLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjAsNiArMjAsOCBAQAogCiBbCiAg
ICAgSW50ZXJmYWNlTmFtZT1QbHVnaW4sCisgICAgR2VuZXJhdGVJc1JlYWNoYWJsZT1SZWFjaGFi
bGVGcm9tTmF2aWdhdG9yLAorICAgIEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUsCiAgICAgTGVn
YWN5VW5lbnVtZXJhYmxlTmFtZWRQcm9wZXJ0aWVzCiBdIGludGVyZmFjZSBET01QbHVnaW4gewog
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsdWdpbnMvRE9NUGx1Z2luQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsdWdpbnMvRE9NUGx1Z2luQXJyYXkuY3BwCShyZXZpc2lvbiAyNjMwMDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL0RPTVBsdWdpbkFycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjMsNyArMjMsNiBAQAogI2luY2x1ZGUgIkRPTVBsdWdpbi5oIgogI2luY2x1ZGUgIkZyYW1lLmgi
CiAjaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKICNpbmNsdWRlIDx3
dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4K
IApAQCAtMzEsOCArMzAsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXVEZfTUFLRV9JU09f
QUxMT0NBVEVEX0lNUEwoRE9NUGx1Z2luQXJyYXkpOwogCi1ET01QbHVnaW5BcnJheTo6RE9NUGx1
Z2luQXJyYXkoTmF2aWdhdG9yJiBuYXZpZ2F0b3IpCitSZWY8RE9NUGx1Z2luQXJyYXk+IERPTVBs
dWdpbkFycmF5OjpjcmVhdGUoTmF2aWdhdG9yJiBuYXZpZ2F0b3IsIFZlY3RvcjxSZWY8RE9NUGx1
Z2luPj4mJiBwdWJsaWNseVZpc2libGVQbHVnaW5zLCBWZWN0b3I8UmVmPERPTVBsdWdpbj4+JiYg
YWRkaXRpb25hbFdlYlZpc2liaWxlUGx1Z2lucykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBET01QbHVnaW5BcnJheShuYXZpZ2F0b3IsIFdURk1vdmUocHVibGljbHlWaXNpYmxlUGx1Z2lu
cyksIFdURk1vdmUoYWRkaXRpb25hbFdlYlZpc2liaWxlUGx1Z2lucykpKTsKK30KKworRE9NUGx1
Z2luQXJyYXk6OkRPTVBsdWdpbkFycmF5KE5hdmlnYXRvciYgbmF2aWdhdG9yLCBWZWN0b3I8UmVm
PERPTVBsdWdpbj4+JiYgcHVibGljbHlWaXNpYmxlUGx1Z2lucywgVmVjdG9yPFJlZjxET01QbHVn
aW4+PiYmIGFkZGl0aW9uYWxXZWJWaXNpYmlsZVBsdWdpbnMpCiAgICAgOiBtX25hdmlnYXRvciht
YWtlV2Vha1B0cihuYXZpZ2F0b3IpKQorICAgICwgbV9wdWJsaWNseVZpc2libGVQbHVnaW5zKFdU
Rk1vdmUocHVibGljbHlWaXNpYmxlUGx1Z2lucykpCisgICAgLCBtX2FkZGl0aW9uYWxXZWJWaXNp
YmlsZVBsdWdpbnMoV1RGTW92ZShhZGRpdGlvbmFsV2ViVmlzaWJpbGVQbHVnaW5zKSkKIHsKIH0K
IApAQCAtNDAsNTcgKzQ2LDQ2IEBAIERPTVBsdWdpbkFycmF5Ojp+RE9NUGx1Z2luQXJyYXkoKSA9
IGRlZmEKIAogdW5zaWduZWQgRE9NUGx1Z2luQXJyYXk6Omxlbmd0aCgpIGNvbnN0CiB7Ci0gICAg
UGx1Z2luRGF0YSogZGF0YSA9IHBsdWdpbkRhdGEoKTsKLSAgICBpZiAoIWRhdGEpCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgcmV0dXJuIGRhdGEtPnB1YmxpY2x5VmlzaWJsZVBsdWdpbnMoKS5z
aXplKCk7CisgICAgcmV0dXJuIG1fcHVibGljbHlWaXNpYmxlUGx1Z2lucy5zaXplKCk7CiB9CiAK
IFJlZlB0cjxET01QbHVnaW4+IERPTVBsdWdpbkFycmF5OjppdGVtKHVuc2lnbmVkIGluZGV4KQog
ewotICAgIFBsdWdpbkRhdGEqIGRhdGEgPSBwbHVnaW5EYXRhKCk7Ci0gICAgaWYgKCFkYXRhKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZvPiYg
cGx1Z2lucyA9IGRhdGEtPnB1YmxpY2x5VmlzaWJsZVBsdWdpbnMoKTsKLSAgICBpZiAoaW5kZXgg
Pj0gcGx1Z2lucy5zaXplKCkpCisgICAgaWYgKGluZGV4ID49IG1fcHVibGljbHlWaXNpYmxlUGx1
Z2lucy5zaXplKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBET01QbHVn
aW46OmNyZWF0ZShkYXRhLCBmcmFtZSgpLCBwbHVnaW5zW2luZGV4XSk7CisgICAgcmV0dXJuIG1f
cHVibGljbHlWaXNpYmxlUGx1Z2luc1tpbmRleF0ucHRyKCk7CiB9CiAKIFJlZlB0cjxET01QbHVn
aW4+IERPTVBsdWdpbkFycmF5OjpuYW1lZEl0ZW0oY29uc3QgQXRvbVN0cmluZyYgcHJvcGVydHlO
YW1lKQogewotICAgIFBsdWdpbkRhdGEqIGRhdGEgPSBwbHVnaW5EYXRhKCk7Ci0gICAgaWYgKCFk
YXRhKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBmb3IgKGF1dG8mIHBsdWdpbiA6IG1f
cHVibGljbHlWaXNpYmxlUGx1Z2lucykgeworICAgICAgICBpZiAocGx1Z2luLT5uYW1lKCkgPT0g
cHJvcGVydHlOYW1lKQorICAgICAgICAgICAgcmV0dXJuIHBsdWdpbi5wdHIoKTsKKyAgICB9CiAK
LSAgICBmb3IgKGF1dG8mIHBsdWdpbiA6IGRhdGEtPndlYlZpc2libGVQbHVnaW5zKCkpIHsKLSAg
ICAgICAgaWYgKHBsdWdpbi5uYW1lID09IHByb3BlcnR5TmFtZSkKLSAgICAgICAgICAgIHJldHVy
biBET01QbHVnaW46OmNyZWF0ZShkYXRhLCBmcmFtZSgpLCBwbHVnaW4pOworICAgIGZvciAoYXV0
byYgcGx1Z2luIDogbV9hZGRpdGlvbmFsV2ViVmlzaWJpbGVQbHVnaW5zKSB7CisgICAgICAgIGlm
IChwbHVnaW4tPm5hbWUoKSA9PSBwcm9wZXJ0eU5hbWUpCisgICAgICAgICAgICByZXR1cm4gcGx1
Z2luLnB0cigpOwogICAgIH0KKwogICAgIHJldHVybiBudWxscHRyOwogfQogCiBWZWN0b3I8QXRv
bVN0cmluZz4gRE9NUGx1Z2luQXJyYXk6OnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKQogewotICAg
IFBsdWdpbkRhdGEqIGRhdGEgPSBwbHVnaW5EYXRhKCk7Ci0gICAgaWYgKCFkYXRhKQotICAgICAg
ICByZXR1cm4geyB9OwotCi0gICAgY29uc3QgYXV0byYgcGx1Z2lucyA9IGRhdGEtPnB1YmxpY2x5
VmlzaWJsZVBsdWdpbnMoKTsKLQogICAgIFZlY3RvcjxBdG9tU3RyaW5nPiByZXN1bHQ7Ci0gICAg
cmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocGx1Z2lucy5zaXplKCkpOwotICAgIGZvciAo
YXV0byYgcGx1Z2luIDogcGx1Z2lucykKLSAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChw
bHVnaW4ubmFtZSk7Ci0KKyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3B1Ymxp
Y2x5VmlzaWJsZVBsdWdpbnMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIHBsdWdpbiA6IG1fcHVi
bGljbHlWaXNpYmxlUGx1Z2lucykKKyAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChwbHVn
aW4tPm5hbWUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdm9pZCBET01QbHVnaW5BcnJh
eTo6cmVmcmVzaChib29sIHJlbG9hZFBhZ2VzKQogewotICAgIGF1dG8qIGZyYW1lID0gdGhpcy0+
ZnJhbWUoKTsKKyAgICBpZiAoIW1fbmF2aWdhdG9yKQorICAgICAgICByZXR1cm47CisKKyAgICBh
dXRvKiBmcmFtZSA9IG1fbmF2aWdhdG9yLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAg
ICAgIHJldHVybjsKIApAQCAtMTAwLDE3ICs5NSw0IEBAIHZvaWQgRE9NUGx1Z2luQXJyYXk6OnJl
ZnJlc2goYm9vbCByZWxvYWQKICAgICBQYWdlOjpyZWZyZXNoUGx1Z2lucyhyZWxvYWRQYWdlcyk7
CiB9CiAKLVBsdWdpbkRhdGEqIERPTVBsdWdpbkFycmF5OjpwbHVnaW5EYXRhKCkgY29uc3QKLXsK
LSAgICBhdXRvKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKLSAg
ICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuICZwYWdl
LT5wbHVnaW5EYXRhKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2luQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL0RPTVBsdWdpbkFycmF5LmgJKHJldmlzaW9uIDI2MzAwNykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2luQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAt
MjAsMjAgKzIwLDIyIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiRE9NUGx1Z2luLmgi
Ci0jaW5jbHVkZSAiRE9NV2luZG93UHJvcGVydHkuaCIKICNpbmNsdWRlICJOYXZpZ2F0b3IuaCIK
ICNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVk
ZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBQbHVnaW5E
YXRhOworY2xhc3MgRE9NUGx1Z2luOworY2xhc3MgTmF2aWdhdG9yOwogCiBjbGFzcyBET01QbHVn
aW5BcnJheSBmaW5hbCA6IHB1YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1YmxpYyBSZWZDb3VudGVk
PERPTVBsdWdpbkFycmF5PiB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChET01QbHVnaW5B
cnJheSk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxET01QbHVnaW5BcnJheT4gY3JlYXRlKE5h
dmlnYXRvciYgbmF2aWdhdG9yKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IERPTVBsdWdpbkFycmF5
KG5hdmlnYXRvcikpOyB9CisgICAgc3RhdGljIFJlZjxET01QbHVnaW5BcnJheT4gY3JlYXRlKE5h
dmlnYXRvciYsIFZlY3RvcjxSZWY8RE9NUGx1Z2luPj4mJiA9IHsgfSwgVmVjdG9yPFJlZjxET01Q
bHVnaW4+PiYmID0geyB9KTsKICAgICB+RE9NUGx1Z2luQXJyYXkoKTsKIAogICAgIHVuc2lnbmVk
IGxlbmd0aCgpIGNvbnN0OwpAQCAtNDIsMTYgKzQ0LDE2IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8
QXRvbVN0cmluZz4gc3VwcG9ydGVkUHJvcGVydHlOYW1lcygpOwogCiAgICAgdm9pZCByZWZyZXNo
KGJvb2wgcmVsb2FkUGFnZXMpOwotICAgIAotICAgIE5hdmlnYXRvciogbmF2aWdhdG9yKCkgeyBy
ZXR1cm4gbV9uYXZpZ2F0b3IuZ2V0KCk7IH0KIAorICAgIE5hdmlnYXRvciogbmF2aWdhdG9yKCkg
eyByZXR1cm4gbV9uYXZpZ2F0b3IuZ2V0KCk7IH0KKyAgICAKIHByaXZhdGU6Ci0gICAgZXhwbGlj
aXQgRE9NUGx1Z2luQXJyYXkoTmF2aWdhdG9yJik7CisgICAgZXhwbGljaXQgRE9NUGx1Z2luQXJy
YXkoTmF2aWdhdG9yJiwgVmVjdG9yPFJlZjxET01QbHVnaW4+PiYmLCBWZWN0b3I8UmVmPERPTVBs
dWdpbj4+JiYpOworCiAKLSAgICBQbHVnaW5EYXRhKiBwbHVnaW5EYXRhKCkgY29uc3Q7Ci0gICAg
RnJhbWUqIGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYXZpZ2F0b3IgPyBtX25hdmlnYXRvci0+
ZnJhbWUoKSA6IG51bGxwdHI7IH0KLSAgICAKICAgICBXZWFrUHRyPE5hdmlnYXRvcj4gbV9uYXZp
Z2F0b3I7CisgICAgVmVjdG9yPFJlZjxET01QbHVnaW4+PiBtX3B1YmxpY2x5VmlzaWJsZVBsdWdp
bnM7CisgICAgVmVjdG9yPFJlZjxET01QbHVnaW4+PiBtX2FkZGl0aW9uYWxXZWJWaXNpYmlsZVBs
dWdpbnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpbkRhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvUGx1Z2luRGF0YS5jcHAJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1
ZGUgIlBsdWdpbkluZm9Qcm92aWRlci5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM4LDYgKzM5LDEyIEBAIFBsdWdpbkRhdGE6OlBsdWdp
bkRhdGEoUGFnZSYgcGFnZSkKICAgICBpbml0UGx1Z2lucygpOwogfQogCit2b2lkIFBsdWdpbkRh
dGE6OmluaXRQbHVnaW5zKCkKK3sKKyAgICBBU1NFUlQobV9wbHVnaW5zLmlzRW1wdHkoKSk7Cisg
ICAgbV9wbHVnaW5zID0gbV9wYWdlLnBsdWdpbkluZm9Qcm92aWRlcigpLnBsdWdpbkluZm8obV9w
YWdlLCBtX3N1cHBvcnRlZFBsdWdpbklkZW50aWZpZXJzKTsKK30KKwogY29uc3QgVmVjdG9yPFBs
dWdpbkluZm8+JiBQbHVnaW5EYXRhOjp3ZWJWaXNpYmxlUGx1Z2lucygpIGNvbnN0CiB7CiAgICAg
YXV0byBkb2N1bWVudFVSTCA9IG1fcGFnZS5tYWluRnJhbWUoKS5kb2N1bWVudCgpID8gbV9wYWdl
Lm1haW5GcmFtZSgpLmRvY3VtZW50KCktPnVybCgpIDogVVJMIHsgfTsKQEAgLTgwLDEyMCArODcs
NzIgQEAgc3RhdGljIGJvb2wgc2hvdWxkQmVQdWJsaWNseVZpc2libGUoY29ucwogICAgICAgICB8
fCBpc0J1aWx0SW5QREZQbHVnSW4ocGx1Z2luKTsKIH0KIAotVmVjdG9yPFBsdWdpbkluZm8+IFBs
dWdpbkRhdGE6OnB1YmxpY2x5VmlzaWJsZVBsdWdpbnMoKSBjb25zdAorc3RkOjpwYWlyPFZlY3Rv
cjxQbHVnaW5JbmZvPiwgVmVjdG9yPFBsdWdpbkluZm8+PiBQbHVnaW5EYXRhOjpwdWJsaWNseVZp
c2libGVQbHVnaW5zQW5kQWRkaXRpb25hbFdlYlZpc2libGVQbHVnaW5zKCkgY29uc3QKIHsKICAg
ICBhdXRvIHBsdWdpbnMgPSB3ZWJWaXNpYmxlUGx1Z2lucygpOwogCiAgICAgaWYgKG1fcGFnZS5z
aG93QWxsUGx1Z2lucygpKQotICAgICAgICByZXR1cm4gcGx1Z2luczsKLSAgICAKLSAgICBwbHVn
aW5zLnJlbW92ZUFsbE1hdGNoaW5nKFtdKGF1dG8mIHBsdWdpbikgewotICAgICAgICByZXR1cm4g
IXNob3VsZEJlUHVibGljbHlWaXNpYmxlKHBsdWdpbik7Ci0gICAgfSk7CisgICAgICAgIHJldHVy
biB7IHBsdWdpbnMsIHsgfSB9OwogCi0gICAgc3RkOjpzb3J0KHBsdWdpbnMuYmVnaW4oKSwgcGx1
Z2lucy5lbmQoKSwgW10oY29uc3QgUGx1Z2luSW5mbyYgYSwgY29uc3QgUGx1Z2luSW5mbyYgYikg
ewotICAgICAgICByZXR1cm4gY29kZVBvaW50Q29tcGFyZUxlc3NUaGFuKGEubmFtZSwgYi5uYW1l
KTsKKyAgICBWZWN0b3I8UGx1Z2luSW5mbz4gYWRkaXRpb25hbFdlYlZpc2libGVQbHVnaW5zOwor
ICAgIHBsdWdpbnMucmVtb3ZlQWxsTWF0Y2hpbmcoWyZdKGF1dG8mIHBsdWdpbikgeworICAgICAg
ICBpZiAoIXNob3VsZEJlUHVibGljbHlWaXNpYmxlKHBsdWdpbikpIHsKKyAgICAgICAgICAgIGFk
ZGl0aW9uYWxXZWJWaXNpYmxlUGx1Z2lucy5hcHBlbmQocGx1Z2luKTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9KTsKLSAg
ICByZXR1cm4gcGx1Z2luczsKLX0KIAotdm9pZCBQbHVnaW5EYXRhOjpnZXRXZWJWaXNpYmxlTWlt
ZXNBbmRQbHVnaW5JbmRpY2VzKFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiYgbWltZXMsIFZlY3Rvcjxz
aXplX3Q+JiBtaW1lUGx1Z2luSW5kaWNlcykgY29uc3QKLXsKLSAgICBnZXRNaW1lc0FuZFBsdWdp
bkluZGljaWVzRm9yUGx1Z2lucyh3ZWJWaXNpYmxlUGx1Z2lucygpLCBtaW1lcywgbWltZVBsdWdp
bkluZGljZXMpOworICAgIHJldHVybiB7IHBsdWdpbnMsIGFkZGl0aW9uYWxXZWJWaXNpYmxlUGx1
Z2lucyB9OwogfQogCi12b2lkIFBsdWdpbkRhdGE6OmdldE1pbWVzQW5kUGx1Z2luSW5kaWNlcyhW
ZWN0b3I8TWltZUNsYXNzSW5mbz4mIG1pbWVzLCBWZWN0b3I8c2l6ZV90PiYgbWltZVBsdWdpbklu
ZGljZXMpIGNvbnN0CitWZWN0b3I8TWltZUNsYXNzSW5mbz4gUGx1Z2luRGF0YTo6d2ViVmlzaWJs
ZU1pbWVUeXBlcygpIGNvbnN0CiB7Ci0gICAgZ2V0TWltZXNBbmRQbHVnaW5JbmRpY2llc0ZvclBs
dWdpbnMocGx1Z2lucygpLCBtaW1lcywgbWltZVBsdWdpbkluZGljZXMpOworICAgIFZlY3RvcjxN
aW1lQ2xhc3NJbmZvPiByZXN1bHQ7CisgICAgZm9yIChhdXRvJiBwbHVnaW4gOiB3ZWJWaXNpYmxl
UGx1Z2lucygpKQorICAgICAgICByZXN1bHQuYXBwZW5kVmVjdG9yKHBsdWdpbi5taW1lcyk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBQbHVnaW5EYXRhOjpnZXRNaW1lc0FuZFBsdWdp
bkluZGljaWVzRm9yUGx1Z2lucyhjb25zdCBWZWN0b3I8UGx1Z2luSW5mbz4mIHBsdWdpbnMsIFZl
Y3RvcjxNaW1lQ2xhc3NJbmZvPiYgbWltZXMsIFZlY3RvcjxzaXplX3Q+JiBtaW1lUGx1Z2luSW5k
aWNlcykgY29uc3QKK3N0YXRpYyBib29sIHN1cHBvcnRzTWltZVR5cGVGb3JQbHVnaW5zKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFBsdWdpbkRhdGE6OkFsbG93ZWRQbHVnaW5UeXBlcyBh
bGxvd2VkUGx1Z2luVHlwZXMsIGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZvPiYgcGx1Z2lucykKIHsK
LSAgICBBU1NFUlRfQVJHKG1pbWVzLCBtaW1lcy5pc0VtcHR5KCkpOwotICAgIEFTU0VSVF9BUkco
bWltZVBsdWdpbkluZGljZXMsIG1pbWVQbHVnaW5JbmRpY2VzLmlzRW1wdHkoKSk7Ci0KLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGx1Z2lucy5zaXplKCk7ICsraSkgewotICAgICAgICBj
b25zdCBQbHVnaW5JbmZvJiBwbHVnaW4gPSBwbHVnaW5zW2ldOwotICAgICAgICBmb3IgKGF1dG8m
IG1pbWUgOiBwbHVnaW4ubWltZXMpIHsKLSAgICAgICAgICAgIG1pbWVzLmFwcGVuZChtaW1lKTsK
LSAgICAgICAgICAgIG1pbWVQbHVnaW5JbmRpY2VzLmFwcGVuZChpKTsKKyAgICBmb3IgKGF1dG8m
IHBsdWdpbiA6IHBsdWdpbnMpIHsKKyAgICAgICAgZm9yIChhdXRvJiB0eXBlIDogcGx1Z2luLm1p
bWVzKSB7CisgICAgICAgICAgICBpZiAodHlwZS50eXBlID09IG1pbWVUeXBlICYmIChhbGxvd2Vk
UGx1Z2luVHlwZXMgPT0gUGx1Z2luRGF0YTo6QWxsUGx1Z2lucyB8fCBwbHVnaW4uaXNBcHBsaWNh
dGlvblBsdWdpbikpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFBsdWdpbkRhdGE6OnN1cHBvcnRzV2Vi
VmlzaWJsZU1pbWVUeXBlRm9yVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IEFsbG93
ZWRQbHVnaW5UeXBlcyBhbGxvd2VkUGx1Z2luVHlwZXMsIGNvbnN0IFVSTCYgdXJsKSBjb25zdAor
Ym9vbCBQbHVnaW5EYXRhOjpzdXBwb3J0c01pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IGNvbnN0IEFsbG93ZWRQbHVnaW5UeXBlcyBhbGxvd2VkUGx1Z2luVHlwZXMpIGNvbnN0CiB7Ci0g
ICAgaWYgKCFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwobV9jYWNoZWRWaXNpYmxlUGx1Z2lu
cy5wYWdlVVJMLCB1cmwpKQotICAgICAgICBtX2NhY2hlZFZpc2libGVQbHVnaW5zID0geyB1cmws
IG1fcGFnZS5wbHVnaW5JbmZvUHJvdmlkZXIoKS53ZWJWaXNpYmxlUGx1Z2luSW5mbyhtX3BhZ2Us
IHVybCkgfTsKLSAgICBpZiAoIW1fY2FjaGVkVmlzaWJsZVBsdWdpbnMucGx1Z2luTGlzdCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBzdXBwb3J0c1dlYlZpc2libGVNaW1lVHlw
ZShtaW1lVHlwZSwgYWxsb3dlZFBsdWdpblR5cGVzLCAqbV9jYWNoZWRWaXNpYmxlUGx1Z2lucy5w
bHVnaW5MaXN0KTsKKyAgICByZXR1cm4gc3VwcG9ydHNNaW1lVHlwZUZvclBsdWdpbnMobWltZVR5
cGUsIGFsbG93ZWRQbHVnaW5UeXBlcywgcGx1Z2lucygpKTsKIH0KIAogYm9vbCBQbHVnaW5EYXRh
OjpzdXBwb3J0c1dlYlZpc2libGVNaW1lVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25z
dCBBbGxvd2VkUGx1Z2luVHlwZXMgYWxsb3dlZFBsdWdpblR5cGVzKSBjb25zdAogewotICAgIHJl
dHVybiBzdXBwb3J0c1dlYlZpc2libGVNaW1lVHlwZShtaW1lVHlwZSwgYWxsb3dlZFBsdWdpblR5
cGVzLCB3ZWJWaXNpYmxlUGx1Z2lucygpKTsKLX0KLQotYm9vbCBQbHVnaW5EYXRhOjpzdXBwb3J0
c1dlYlZpc2libGVNaW1lVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBBbGxvd2Vk
UGx1Z2luVHlwZXMgYWxsb3dlZFBsdWdpblR5cGVzLCBjb25zdCBWZWN0b3I8UGx1Z2luSW5mbz4m
IHBsdWdpbnMpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPE1pbWVDbGFzc0luZm8+IG1pbWVzOwotICAg
IFZlY3RvcjxzaXplX3Q+IG1pbWVQbHVnaW5JbmRpY2VzOwotICAgIGdldE1pbWVzQW5kUGx1Z2lu
SW5kaWNpZXNGb3JQbHVnaW5zKHBsdWdpbnMsIG1pbWVzLCBtaW1lUGx1Z2luSW5kaWNlcyk7Ci0K
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWltZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgaWYgKG1pbWVzW2ldLnR5cGUgPT0gbWltZVR5cGUgJiYgKGFsbG93ZWRQbHVnaW5UeXBlcyA9
PSBBbGxQbHVnaW5zIHx8IHBsdWdpbnNbbWltZVBsdWdpbkluZGljZXNbaV1dLmlzQXBwbGljYXRp
b25QbHVnaW4pKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gc3VwcG9ydHNNaW1lVHlwZUZvclBsdWdpbnMobWltZVR5cGUsIGFs
bG93ZWRQbHVnaW5UeXBlcywgd2ViVmlzaWJsZVBsdWdpbnMoKSk7CiB9CiAKLWJvb2wgUGx1Z2lu
RGF0YTo6Z2V0UGx1Z2luSW5mb0ZvcldlYlZpc2libGVNaW1lVHlwZShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBQbHVnaW5JbmZvJiBwbHVnaW5JbmZvUmVmKSBjb25zdAorYm9vbCBQbHVnaW5EYXRh
OjpzdXBwb3J0c1dlYlZpc2libGVNaW1lVHlwZUZvclVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBjb25zdCBBbGxvd2VkUGx1Z2luVHlwZXMgYWxsb3dlZFBsdWdpblR5cGVzLCBjb25zdCBVUkwm
IHVybCkgY29uc3QKIHsKLSAgICBWZWN0b3I8TWltZUNsYXNzSW5mbz4gbWltZXM7Ci0gICAgVmVj
dG9yPHNpemVfdD4gbWltZVBsdWdpbkluZGljZXM7Ci0gICAgY29uc3QgVmVjdG9yPFBsdWdpbklu
Zm8+JiBwbHVnaW5zID0gd2ViVmlzaWJsZVBsdWdpbnMoKTsKLSAgICBnZXRXZWJWaXNpYmxlTWlt
ZXNBbmRQbHVnaW5JbmRpY2VzKG1pbWVzLCBtaW1lUGx1Z2luSW5kaWNlcyk7Ci0KLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbWltZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3Qg
TWltZUNsYXNzSW5mbyYgaW5mbyA9IG1pbWVzW2ldOwotCi0gICAgICAgIGlmIChpbmZvLnR5cGUg
PT0gbWltZVR5cGUpIHsKLSAgICAgICAgICAgIHBsdWdpbkluZm9SZWYgPSBwbHVnaW5zW21pbWVQ
bHVnaW5JbmRpY2VzW2ldXTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghcHJvdG9jb2xIb3N0QW5kUG9ydEFy
ZUVxdWFsKG1fY2FjaGVkVmlzaWJsZVBsdWdpbnMucGFnZVVSTCwgdXJsKSkKKyAgICAgICAgbV9j
YWNoZWRWaXNpYmxlUGx1Z2lucyA9IHsgdXJsLCBtX3BhZ2UucGx1Z2luSW5mb1Byb3ZpZGVyKCku
d2ViVmlzaWJsZVBsdWdpbkluZm8obV9wYWdlLCB1cmwpIH07CisgICAgaWYgKCFtX2NhY2hlZFZp
c2libGVQbHVnaW5zLnBsdWdpbkxpc3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gc3VwcG9ydHNNaW1lVHlwZUZvclBsdWdpbnMobWltZVR5cGUsIGFsbG93ZWRQbHVnaW5UeXBl
cywgKm1fY2FjaGVkVmlzaWJsZVBsdWdpbnMucGx1Z2luTGlzdCk7CiB9CiAKIFN0cmluZyBQbHVn
aW5EYXRhOjpwbHVnaW5GaWxlRm9yV2ViVmlzaWJsZU1pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUpIGNvbnN0CiB7Ci0gICAgUGx1Z2luSW5mbyBpbmZvOwotICAgIGlmIChnZXRQbHVnaW5J
bmZvRm9yV2ViVmlzaWJsZU1pbWVUeXBlKG1pbWVUeXBlLCBpbmZvKSkKLSAgICAgICAgcmV0dXJu
IGluZm8uZmlsZTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLWJvb2wgUGx1Z2luRGF0YTo6
c3VwcG9ydHNNaW1lVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBBbGxvd2VkUGx1
Z2luVHlwZXMgYWxsb3dlZFBsdWdpblR5cGVzKSBjb25zdAotewotICAgIFZlY3RvcjxNaW1lQ2xh
c3NJbmZvPiBtaW1lczsKLSAgICBWZWN0b3I8c2l6ZV90PiBtaW1lUGx1Z2luSW5kaWNlczsKLSAg
ICBjb25zdCBWZWN0b3I8UGx1Z2luSW5mbz4mIHBsdWdpbnMgPSB0aGlzLT5wbHVnaW5zKCk7Ci0g
ICAgZ2V0TWltZXNBbmRQbHVnaW5JbmRpY2VzKG1pbWVzLCBtaW1lUGx1Z2luSW5kaWNlcyk7Ci0K
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWltZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgaWYgKG1pbWVzW2ldLnR5cGUgPT0gbWltZVR5cGUgJiYgKGFsbG93ZWRQbHVnaW5UeXBlcyA9
PSBBbGxQbHVnaW5zIHx8IHBsdWdpbnNbbWltZVBsdWdpbkluZGljZXNbaV1dLmlzQXBwbGljYXRp
b25QbHVnaW4pKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZm9yIChhdXRvJiBwbHVn
aW4gOiB3ZWJWaXNpYmxlUGx1Z2lucygpKSB7CisgICAgICAgIGZvciAoYXV0byYgdHlwZSA6IHBs
dWdpbi5taW1lcykgeworICAgICAgICAgICAgaWYgKHR5cGUudHlwZSA9PSBtaW1lVHlwZSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcGx1Z2luLmZpbGU7CisgICAgICAgIH0KICAgICB9Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKCkKLXsKLSAg
ICBBU1NFUlQobV9wbHVnaW5zLmlzRW1wdHkoKSk7Ci0KLSAgICBtX3BsdWdpbnMgPSBtX3BhZ2Uu
cGx1Z2luSW5mb1Byb3ZpZGVyKCkucGx1Z2luSW5mbyhtX3BhZ2UsIG1fc3VwcG9ydGVkUGx1Z2lu
SWRlbnRpZmllcnMpOworICAgIHJldHVybiB7IH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5oCShyZXZpc2lvbiAyNjMwMDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGEuaAkod29ya2luZyBjb3B5KQpA
QCAtMjEsOCArMjEsNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0
cy5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9VUkwuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0zMiw3ICszMCw2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIFBhZ2U7Ci1zdHJ1Y3QgUGx1Z2luSW5mbzsKIAogZW51bSBjbGFzcyBQbHVnaW5M
b2FkQ2xpZW50UG9saWN5IDogdWludDhfdCB7CiAgICAgLy8gTm8gY2xpZW50LXNwZWNpZmljIHBs
dWctaW4gbG9hZCBwb2xpY3kgaGFzIGJlZW4gZGVmaW5lZC4gVGhlIHBsdWctaW4gc2hvdWxkIGJl
IHZpc2libGUgaW4gbmF2aWdhdG9yLnBsdWdpbnMgYW5kIFdlYktpdCBzaG91bGQgc3luY2hyb25v
dXNseQpAQCAtMTAyLDI3ICs5OSwyMyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBWZWN0b3I8UGx1
Z2luSW5mbz4mIHBsdWdpbnMoKSBjb25zdCB7IHJldHVybiBtX3BsdWdpbnM7IH0KICAgICBXRUJD
T1JFX0VYUE9SVCBjb25zdCBWZWN0b3I8UGx1Z2luSW5mbz4mIHdlYlZpc2libGVQbHVnaW5zKCkg
Y29uc3Q7Ci0gICAgVmVjdG9yPFBsdWdpbkluZm8+IHB1YmxpY2x5VmlzaWJsZVBsdWdpbnMoKSBj
b25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdldFdlYlZpc2libGVNaW1lc0FuZFBsdWdp
bkluZGljZXMoVmVjdG9yPE1pbWVDbGFzc0luZm8+JiwgVmVjdG9yPHNpemVfdD4mKSBjb25zdDsK
KyAgICBzdGQ6OnBhaXI8VmVjdG9yPFBsdWdpbkluZm8+LCBWZWN0b3I8UGx1Z2luSW5mbz4+IHB1
YmxpY2x5VmlzaWJsZVBsdWdpbnNBbmRBZGRpdGlvbmFsV2ViVmlzaWJsZVBsdWdpbnMoKSBjb25z
dDsKKworICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiB3ZWJWaXNpYmxl
TWltZVR5cGVzKCkgY29uc3Q7CiAKICAgICBlbnVtIEFsbG93ZWRQbHVnaW5UeXBlcyB7CiAgICAg
ICAgIEFsbFBsdWdpbnMsCiAgICAgICAgIE9ubHlBcHBsaWNhdGlvblBsdWdpbnMKICAgICB9Owot
Ci0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzdXBwb3J0c1dlYlZpc2libGVNaW1lVHlwZShjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBBbGxvd2VkUGx1Z2luVHlwZXMpIGNvbnN0OwotICAg
IFN0cmluZyBwbHVnaW5GaWxlRm9yV2ViVmlzaWJsZU1pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUpIGNvbnN0OwotCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzdXBwb3J0c01pbWVUeXBl
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IEFsbG93ZWRQbHVnaW5UeXBlcykgY29uc3Q7
CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzdXBwb3J0c1dlYlZpc2libGVNaW1lVHlwZShjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBBbGxvd2VkUGx1Z2luVHlwZXMpIGNvbnN0OwogICAg
IFdFQkNPUkVfRVhQT1JUIGJvb2wgc3VwcG9ydHNXZWJWaXNpYmxlTWltZVR5cGVGb3JVUkwoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgQWxsb3dlZFBsdWdpblR5cGVzLCBjb25zdCBVUkwm
KSBjb25zdDsKIAorICAgIFN0cmluZyBwbHVnaW5GaWxlRm9yV2ViVmlzaWJsZU1pbWVUeXBlKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0OworCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFBs
dWdpbkRhdGEoUGFnZSYpOwogICAgIHZvaWQgaW5pdFBsdWdpbnMoKTsKLSAgICBib29sIGdldFBs
dWdpbkluZm9Gb3JXZWJWaXNpYmxlTWltZVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgUGx1
Z2luSW5mbyYpIGNvbnN0OwotICAgIHZvaWQgZ2V0TWltZXNBbmRQbHVnaW5JbmRpY2VzKFZlY3Rv
cjxNaW1lQ2xhc3NJbmZvPiYsIFZlY3RvcjxzaXplX3Q+JikgY29uc3Q7Ci0gICAgdm9pZCBnZXRN
aW1lc0FuZFBsdWdpbkluZGljaWVzRm9yUGx1Z2lucyhjb25zdCBWZWN0b3I8UGx1Z2luSW5mbz4m
LCBWZWN0b3I8TWltZUNsYXNzSW5mbz4mLCBWZWN0b3I8c2l6ZV90PiYpIGNvbnN0OwotICAgIGJv
b2wgc3VwcG9ydHNXZWJWaXNpYmxlTWltZVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29u
c3QgQWxsb3dlZFBsdWdpblR5cGVzLCBjb25zdCBWZWN0b3I8UGx1Z2luSW5mbz4mKSBjb25zdDsK
IAogcHJvdGVjdGVkOgogICAgIFBhZ2UmIG1fcGFnZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
NjMwMTMpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE4IEBACisyMDIwLTA2LTE0ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBbV1BUXSBodG1sL3dlYmFwcGFwaXMvc3lzdGVtLXN0YXRlLWFuZC1jYXBhYmlsaXRp
ZXMvdGhlLW5hdmlnYXRvci1vYmplY3QvbmF2aWdhdG9yLXBsdWdpbmFycmF5Lmh0bWwgZmFpbHMg
ZHVlIHRvIGxhY2sgb2YgY2FjaGluZyBvZiBQbHVnaW4gb2JqZWN0cworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzMTg1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5J
bmZvU3RvcmUuaDoKKyAgICAgICAgQWRkIG1pc3NpbmcgI2luY2x1ZGUgdGhhdCBpcyBub3cgbmVl
ZGVkIGR1ZSB0byBwcnVuaW5nIG9mIHVubmVjZXNzYXJ5ICNpbmNsdWRlcworICAgICAgICBpbiBX
ZWJDb3JlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxv
YWRlckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OnBsdWdpblN1cHBvcnRzRXh0ZW5zaW9u
KToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgd2ViVmlzaWJsZU1pbWVUeXBlcygpIHJhdGhl
ciB0aGFuIHRoZSBjbHVua3kgZ2V0V2ViVmlzaWJsZU1pbWVzQW5kUGx1Z2luSW5kaWNlcygpLgor
CiAyMDIwLTA2LTE0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4K
IAogICAgICAgICBbU09VUF0gRGlzYWJsZSBIU1RTIGZvciByZXF1ZXN0cyB3aGVuIGNvb2tpZXMg
d2lsbCBiZSBibG9ja2VkIGJ5IElUUApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGx1
Z2lucy9QbHVnaW5JbmZvU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9QbHVnaW5zL1BsdWdpbkluZm9TdG9yZS5oCShyZXZpc2lvbiAyNjMwMDcpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbkluZm9TdG9yZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiUGx1Z2luTW9kdWxlSW5mby5oIgogCiAj
aW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5EYXRhLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
IAogbmFtZXNwYWNlIFdlYktpdCB7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50
LmNwcAkocmV2aXNpb24gMjYzMDA3KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY1
NywxMSArMTY1Nyw4IEBAIFJlZlB0cjxXaWRnZXQ+IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmUK
IHN0YXRpYyBib29sIHBsdWdpblN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFBsdWdpbkRhdGEmIHBs
dWdpbkRhdGEsIGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKQogewogICAgIEFTU0VSVChleHRlbnNp
b24uY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSA9PSBleHRlbnNpb24pOwotICAgIFZlY3RvcjxN
aW1lQ2xhc3NJbmZvPiBtaW1lczsKLSAgICBWZWN0b3I8c2l6ZV90PiBtaW1lUGx1Z2luSW5kaWNl
czsKLSAgICBwbHVnaW5EYXRhLmdldFdlYlZpc2libGVNaW1lc0FuZFBsdWdpbkluZGljZXMobWlt
ZXMsIG1pbWVQbHVnaW5JbmRpY2VzKTsKLSAgICBmb3IgKGF1dG8mIG1pbWVDbGFzc0luZm8gOiBt
aW1lcykgewotICAgICAgICBpZiAobWltZUNsYXNzSW5mby5leHRlbnNpb25zLmNvbnRhaW5zKGV4
dGVuc2lvbikpCisgICAgZm9yIChhdXRvJiB0eXBlIDogcGx1Z2luRGF0YS53ZWJWaXNpYmxlTWlt
ZVR5cGVzKCkpIHsKKyAgICAgICAgaWYgKHR5cGUuZXh0ZW5zaW9ucy5jb250YWlucyhleHRlbnNp
b24pKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsK
SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDI2MzAxMykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDIwLTA2LTE0ICBTYW0gV2VpbmlnICA8d2Vp
bmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbV1BUXSBodG1sL3dlYmFwcGFwaXMvc3lzdGVtLXN0
YXRlLWFuZC1jYXBhYmlsaXRpZXMvdGhlLW5hdmlnYXRvci1vYmplY3QvbmF2aWdhdG9yLXBsdWdp
bmFycmF5Lmh0bWwgZmFpbHMgZHVlIHRvIGxhY2sgb2YgY2FjaGluZyBvZiBQbHVnaW4gb2JqZWN0
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzMTg1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgKiBodHRwL3Rl
c3RzL3BsdWdpbnMvcGx1Z2luLWphdmFzY3JpcHQtYWNjZXNzLWFsbG93LWFsbC1wbHVnaW5zLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9wbHVnaW5zL3BsdWdpbi1q
YXZhc2NyaXB0LWFjY2Vzcy1hbGxvdy1hbGwtcGx1Z2lucy5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBodHRwL3Rlc3RzL3BsdWdpbnMvcGx1Z2luLWphdmFzY3JpcHQtYWNjZXNzLWV4cGVjdGVkLnR4
dDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3BsdWdpbnMvcGx1Z2luLWphdmFzY3JpcHQtYWNjZXNz
Lmh0bWw6CisgICAgICAgIFNwbGl0IG91dCBpbnRlcm5hbHMuc2V0U2hvd0FsbFBsdWdpbnModHJ1
ZSkgcGFydCBvZiBwbHVnaW4tamF2YXNjcmlwdC1hY2Nlc3MuaHRtbCB0bworICAgICAgICBhbGxv
dyB0aGUgdGVzdCB0byBjb250aW51ZSB3b3JraW5nIG5vdyB0aGF0IG5hdmlnYXRvci5wbHVnaW5z
IGlzIGltbXV0YWJsZSBhZnRlciAKKyAgICAgICAgYWNjZXNzaW5nIGl0LgorICAgICAgICAKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMtd2sxL1Rlc3RFeHBlY3RhdGlvbnM6CisgICAgICAgIFJlbW92
ZSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvd2ViYXBwYXBpcy9zeXN0ZW0t
c3RhdGUtYW5kLWNhcGFiaWxpdGllcy90aGUtbmF2aWdhdG9yLW9iamVjdC9uYXZpZ2F0b3ItcGx1
Z2luYXJyYXkuaHRtbAorICAgICAgICBmcm9tIFRlc3RFeHBlY3RhdGlvbnMgbm93IHRoYXQgaXQg
cGFzc2VzIGFsbCB0aGUgdGltZS4KKwogMjAyMC0wNi0xNCAgRnVqaWkgSGlyb25vcmkgIDxIaXJv
bm9yaS5GdWppaUBzb255LmNvbT4KIAogICAgICAgICBbQXBwbGVXaW5dIFVucmV2aWV3ZWQgdGVz
dCBnYXJkZW5pbmcKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvcGx1Z2lucy9wbHVnaW4t
amF2YXNjcmlwdC1hY2Nlc3MtYWxsb3ctYWxsLXBsdWdpbnMtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvcGx1Z2lucy9wbHVnaW4tamF2YXNjcmlwdC1h
Y2Nlc3MtYWxsb3ctYWxsLXBsdWdpbnMtZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkKKysrIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvcGx1Z2lucy9wbHVnaW4tamF2YXNjcmlwdC1hY2Nlc3MtYWxs
b3ctYWxsLXBsdWdpbnMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAg
QEAKK1Rlc3Q6IENvbmZpcm0gdGhlIHBsdWdpbiBpcyBwcmVzZW50LgorCitOYW1lOiBXZWJLaXQg
VGVzdCBQbHVnSW4KKworRGVzY3JpcHRpb246IFNpbXBsZSBOZXRzY2FwZSBwbHVnLWluIHRoYXQg
aGFuZGxlcyB0ZXN0IGNvbnRlbnQgZm9yIFdlYktpdAorCitGaWxlbmFtZTogVGVzdE5ldHNjYXBl
UGx1Z0luLnBsdWdpbgorCitNaW1lIFR5cGVzOgorCitUeXBlOiBhcHBsaWNhdGlvbi94LXdlYmtp
dC10ZXN0LW5ldHNjYXBlCisKK0Rlc2NyaXB0aW9uOiB0ZXN0IG5ldHNjYXBlIGNvbnRlbnQKKwor
U3VmZml4ZXM6IHRlc3RuZXRzY2FwZQorCisKK1BsdWdpbi5pdGVtKCkgd29ya3MuCisKK1BsdWdp
bi5uYW1lZEl0ZW0oKSB3b3Jrcy4KKworVHlwZTogaW1hZ2UvcG5nCisKK0Rlc2NyaXB0aW9uOiBQ
TkcgaW1hZ2UKKworU3VmZml4ZXM6IHBuZworCisKK1BsdWdpbi5pdGVtKCkgd29ya3MuCisKK1Bs
dWdpbi5uYW1lZEl0ZW0oKSB3b3Jrcy4KKworUGx1Z2luQXJyYXkuaXRlbSgpIHdvcmtzLgorCitQ
bHVnaW5BcnJheS5uYW1lZEl0ZW0oKSB3b3Jrcy4KKworUEFTUyEgKEZvdW5kIHRoZSBuZXRzY2Fw
ZSB0ZXN0IHBsdWdpbiBvbiBhIG5vbi1sb2NhbCBmaWxlISkKKworQXBwbGUgQ29ubmVjdCBQbHVn
LWluCisKK1dlYkV4NjQgR2VuZXJhbCBQbHVnaW4gQ29udGFpbmVyCisKK1dlYktpdCBUZXN0IFBs
dWdJbgorCitXZWJLaXQgYnVpbHQtaW4gUERGCisKK21pbWVzCithcHBsaWNhdGlvbi9wZGYKKwor
YXBwbGljYXRpb24vcG9zdHNjcmlwdAorCithcHBsaWNhdGlvbi93ZWJ4LWdwYy1wbHVnaW42NAor
CithcHBsaWNhdGlvbi94LXNua3AKKworYXBwbGljYXRpb24veC13ZWJraXQtdGVzdC1uZXRzY2Fw
ZQorCitpbWFnZS9wbmcKKwordGV4dC9wZGYKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMv
cGx1Z2lucy9wbHVnaW4tamF2YXNjcmlwdC1hY2Nlc3MtYWxsb3ctYWxsLXBsdWdpbnMuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3BsdWdpbnMvcGx1Z2luLWphdmFz
Y3JpcHQtYWNjZXNzLWFsbG93LWFsbC1wbHVnaW5zLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9wbHVnaW5zL3BsdWdpbi1qYXZhc2NyaXB0LWFjY2Vzcy1hbGxv
dy1hbGwtcGx1Z2lucy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKzxodG1s
PgorPGhlYWQ+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0
ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorICAgIDx0aXRsZT5JbnN0YWxsZWQgUGx1Zy1pbnM8
L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL3gtamF2
YXNjcmlwdCI+CitmdW5jdGlvbiBjaGVja0ZvclRlc3RQbHVnaW4oKSB7CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBuYXZpZ2F0b3IucGx1Z2lucy5sZW5ndGg7IGkrKykgeworICAgICAgICB2YXIg
cGx1Z2luID0gbmF2aWdhdG9yLnBsdWdpbnNbaV07CisKKyAgICAgICAgLy8gV2UgY2FuIG9ubHkg
Z3VhcmFudGVlIHRoYXQgdGhlIFRlc3QgUGx1Z0luIGlzIGluc3RhbGxlZC4KKyAgICAgICAgaWYg
KHBsdWdpbi5uYW1lICE9ICJXZWJLaXQgVGVzdCBQbHVnSW4iKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgZG9jdW1lbnQud3JpdGVsbigiPHA+TmFtZTogIiArIHBsdWdpbi5uYW1l
ICsgIjxcL3A+Iik7CisgICAgICAgIGRvY3VtZW50LndyaXRlbG4oIjxwPkRlc2NyaXB0aW9uOiAi
ICsgcGx1Z2luLmRlc2NyaXB0aW9uICsgIjxcL3A+Iik7CisgICAgICAgIGRvY3VtZW50LndyaXRl
bG4oIjxwPkZpbGVuYW1lOiAiICsgcGx1Z2luLmZpbGVuYW1lICsgIjxcL3A+Iik7CisKKyAgICAg
ICAgZG9jdW1lbnQud3JpdGVsbigiPHA+TWltZSBUeXBlczo8XC9wPiIpOworICAgICAgICBmb3Ig
KHZhciBtaSA9IDA7IG1pICE9IHBsdWdpbi5sZW5ndGg7ICsrbWkpIHsKKyAgICAgICAgICAgIGRv
Y3VtZW50LndyaXRlbG4oIjxwPlR5cGU6ICIgKyBwbHVnaW5bbWldLnR5cGUgKyAiPFwvcD4iKTsK
KyAgICAgICAgICAgIGRvY3VtZW50LndyaXRlbG4oIjxwPkRlc2NyaXB0aW9uOiAiICsgcGx1Z2lu
W21pXS5kZXNjcmlwdGlvbiArICI8XC9wPiIpOworICAgICAgICAgICAgZG9jdW1lbnQud3JpdGVs
bigiPHA+U3VmZml4ZXM6ICIgKyBwbHVnaW5bbWldLnN1ZmZpeGVzICsgIjxcL3A+Iik7CisgICAg
ICAgICAgICBkb2N1bWVudC53cml0ZWxuKCI8YnI+Iik7CisKKyAgICAgICAgICAgIGlmIChwbHVn
aW4uaXRlbShtaSkudHlwZSA9PSBwbHVnaW5bbWldLnR5cGUpCisgICAgICAgICAgICAgICAgZG9j
dW1lbnQud3JpdGVsbigiPHA+UGx1Z2luLml0ZW0oKSB3b3Jrcy48XC9wPiIpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGRvY3VtZW50LndyaXRlbG4oIjxwPkZBSUwuIFBsdWdp
bi5pdGVtKCkgZG9lcyBub3Qgd29yay48XC9wPiIpOworCisgICAgICAgICAgICBpZiAocGx1Z2lu
Lm5hbWVkSXRlbShwbHVnaW5bbWldLnR5cGUpLnR5cGUgPT0gcGx1Z2luW21pXS50eXBlKQorICAg
ICAgICAgICAgICAgIGRvY3VtZW50LndyaXRlbG4oIjxwPlBsdWdpbi5uYW1lZEl0ZW0oKSB3b3Jr
cy48XC9wPiIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRvY3VtZW50Lndy
aXRlbG4oIjxwPkZBSUwuIFBsdWdpbi5uYW1lZEl0ZW0oKSBkb2VzIG5vdCB3b3JrLjxcL3A+Iik7
CisgICAgICAgIH0KKworICAgICAgICBpZiAobmF2aWdhdG9yLnBsdWdpbnMuaXRlbShpKS5uYW1l
ID09IHBsdWdpbi5uYW1lKQorICAgICAgICAgICAgZG9jdW1lbnQud3JpdGVsbigiPHA+UGx1Z2lu
QXJyYXkuaXRlbSgpIHdvcmtzLjxcL3A+Iik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRv
Y3VtZW50LndyaXRlbG4oIjxwPkZBSUwuIFBsdWdpbkFycmF5Lml0ZW0oKSBkb2VzIG5vdCB3b3Jr
LjxcL3A+Iik7CisKKyAgICAgICAgaWYgKG5hdmlnYXRvci5wbHVnaW5zLm5hbWVkSXRlbShwbHVn
aW4ubmFtZSkubmFtZSA9PSBwbHVnaW4ubmFtZSkKKyAgICAgICAgICAgIGRvY3VtZW50LndyaXRl
bG4oIjxwPlBsdWdpbkFycmF5Lm5hbWVkSXRlbSgpIHdvcmtzLjxcL3A+Iik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGRvY3VtZW50LndyaXRlbG4oIjxwPkZBSUwuIFBsdWdpbkFycmF5Lm5h
bWVkSXRlbSgpIGRvZXMgbm90IHdvcmsuPFwvcD4iKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisgICAKK2lmICh3aW5kb3cudGVzdFJ1bm5l
cikKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKQorCisvLyBBY3RpdmF0ZSBvdXIgZGVidWdn
aW5nIGNvZGUgdG8gc2hvdyBhbGwgcGx1Z2lucyB0byBjb25maXJtIHdlIGRvIGhhdmUgdGhlIHRl
c3QgcGx1Z2luLgorICBkb2N1bWVudC53cml0ZWxuKCI8cD5UZXN0OiBDb25maXJtIHRoZSBwbHVn
aW4gaXMgcHJlc2VudC48XC9wPiIpOworaWYgKHdpbmRvdy5pbnRlcm5hbHMpCisgICAgaW50ZXJu
YWxzLnNldFNob3dBbGxQbHVnaW5zKHRydWUpOworCitpZiAoY2hlY2tGb3JUZXN0UGx1Z2luKCkp
CisgICAgZG9jdW1lbnQud3JpdGVsbigiPHA+UEFTUyEgIChGb3VuZCB0aGUgbmV0c2NhcGUgdGVz
dCBwbHVnaW4gb24gYSBub24tbG9jYWwgZmlsZSEpPFwvcD4iKTsKK2Vsc2UKKyAgICBkb2N1bWVu
dC53cml0ZWxuKCI8cD5GQUlMVVJFISAgKENvdWxkIG5vdCBmaW5kIG5ldHNjYXBlIHRlc3QgcGx1
Z2luIG9uIGEgbm9uLWxvY2FsIGZpbGUhKTxcL3A+Iik7CisKKzwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9wbHVnaW5zL3BsdWdpbi1qYXZh
c2NyaXB0LWFjY2Vzcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9wbHVnaW5zL3BsdWdpbi1qYXZhc2NyaXB0LWFjY2Vzcy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDI2MzAxMykKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvcGx1Z2lucy9wbHVnaW4t
amF2YXNjcmlwdC1hY2Nlc3MtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQxICsx
LDMgQEAKLVRlc3QgMTogQSBub24tbG9jYWwgZmlsZSBzaG91bGQgbm90IGJlIGFibGUgdG8gaXRl
cmF0ZSBvdmVyIHRoZSBwbHVnaW5zLgorVGVzdDogQSBub24tbG9jYWwgZmlsZSBzaG91bGQgbm90
IGJlIGFibGUgdG8gaXRlcmF0ZSBvdmVyIHRoZSBwbHVnaW5zLgogCiBQQVNTISAoQ291bGQgbm90
IGZpbmQgdGhlIG5ldHNjYXBlIHRlc3QgcGx1Z2luIG9uIGEgbm9uLWxvY2FsIGZpbGUhKQotCi1U
ZXN0IDI6IENvbmZpcm0gdGhlIHBsdWdpbiBpcyBwcmVzZW50LgotCi1OYW1lOiBXZWJLaXQgVGVz
dCBQbHVnSW4KLQotRGVzY3JpcHRpb246IFNpbXBsZSBOZXRzY2FwZSBwbHVnLWluIHRoYXQgaGFu
ZGxlcyB0ZXN0IGNvbnRlbnQgZm9yIFdlYktpdAotCi1GaWxlbmFtZTogVGVzdE5ldHNjYXBlUGx1
Z0luLnBsdWdpbgotCi1NaW1lIFR5cGVzOgotCi1UeXBlOiBhcHBsaWNhdGlvbi94LXdlYmtpdC10
ZXN0LW5ldHNjYXBlCi0KLURlc2NyaXB0aW9uOiB0ZXN0IG5ldHNjYXBlIGNvbnRlbnQKLQotU3Vm
Zml4ZXM6IHRlc3RuZXRzY2FwZQotCi0KLVBsdWdpbi5pdGVtKCkgd29ya3MuCi0KLVBsdWdpbi5u
YW1lZEl0ZW0oKSB3b3Jrcy4KLQotVHlwZTogaW1hZ2UvcG5nCi0KLURlc2NyaXB0aW9uOiBQTkcg
aW1hZ2UKLQotU3VmZml4ZXM6IHBuZwotCi0KLVBsdWdpbi5pdGVtKCkgd29ya3MuCi0KLVBsdWdp
bi5uYW1lZEl0ZW0oKSB3b3Jrcy4KLQotUGx1Z2luQXJyYXkuaXRlbSgpIHdvcmtzLgotCi1QbHVn
aW5BcnJheS5uYW1lZEl0ZW0oKSB3b3Jrcy4KLQotUEFTUyEgKEZvdW5kIHRoZSBuZXRzY2FwZSB0
ZXN0IHBsdWdpbiBvbiBhIG5vbi1sb2NhbCBmaWxlISkKSW5kZXg6IExheW91dFRlc3RzL2h0dHAv
dGVzdHMvcGx1Z2lucy9wbHVnaW4tamF2YXNjcmlwdC1hY2Nlc3MuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3BsdWdpbnMvcGx1Z2luLWphdmFzY3JpcHQtYWNjZXNz
Lmh0bWwJKHJldmlzaW9uIDI2MzAxMykKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvcGx1Z2lu
cy9wbHVnaW4tamF2YXNjcmlwdC1hY2Nlc3MuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNTcsMjEg
KzU3LDEyIEBAIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKIG5hdmlnYXRvci5wbHVnaW5zLnJlZnJl
c2goZmFsc2UpOyAvLyBTdXBwb3NlZGx5IGhlbHBzIGlmIG5ldyBwbHVnLWlucyB3ZXJlIGFkZGVk
LgogCiAvLyBBIG5vbi1sb2NhbCBmaWxlIHNob3VsZCBub3QgYmUgYWxsb3dlZCB0byBpdGVyYXRl
IG92ZXIgdGhlIGluc3RhbGxlZCBwbHVnaW5zLgotZG9jdW1lbnQud3JpdGVsbigiPHA+VGVzdCAx
OiBBIG5vbi1sb2NhbCBmaWxlIHNob3VsZCBub3QgYmUgYWJsZSB0byBpdGVyYXRlIG92ZXIgdGhl
IHBsdWdpbnMuPFwvcD4iKTsKK2RvY3VtZW50LndyaXRlbG4oIjxwPlRlc3Q6IEEgbm9uLWxvY2Fs
IGZpbGUgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGl0ZXJhdGUgb3ZlciB0aGUgcGx1Z2lucy48XC9w
PiIpOwogaWYgKGNoZWNrRm9yVGVzdFBsdWdpbigpKQogICAgIGRvY3VtZW50LndyaXRlbG4oIjxw
PkZBSUxVUkUhICAoRm91bmQgdGhlIG5ldHNjYXBlIHRlc3QgcGx1Z2luIG9uIGEgbm9uLWxvY2Fs
IGZpbGUhKTxcL3A+Iik7CiBlbHNlCiAgICAgZG9jdW1lbnQud3JpdGVsbigiPHA+UEFTUyEgIChD
b3VsZCBub3QgZmluZCB0aGUgbmV0c2NhcGUgdGVzdCBwbHVnaW4gb24gYSBub24tbG9jYWwgZmls
ZSEpPFwvcD4iKTsKIAotLy8gQWN0aXZhdGUgb3VyIGRlYnVnZ2luZyBjb2RlIHRvIHNob3cgYWxs
IHBsdWdpbnMgdG8gY29uZmlybSB3ZSBkbyBoYXZlIHRoZSB0ZXN0IHBsdWdpbi4KLWRvY3VtZW50
LndyaXRlbG4oIjxwPlRlc3QgMjogQ29uZmlybSB0aGUgcGx1Z2luIGlzIHByZXNlbnQuPFwvcD4i
KTsKLWlmICh3aW5kb3cuaW50ZXJuYWxzKQotICAgIGludGVybmFscy5zZXRTaG93QWxsUGx1Z2lu
cyh0cnVlKTsKLQotaWYgKGNoZWNrRm9yVGVzdFBsdWdpbigpKQotICAgIGRvY3VtZW50LndyaXRl
bG4oIjxwPlBBU1MhICAoRm91bmQgdGhlIG5ldHNjYXBlIHRlc3QgcGx1Z2luIG9uIGEgbm9uLWxv
Y2FsIGZpbGUhKTxcL3A+Iik7Ci1lbHNlCi0gICAgZG9jdW1lbnQud3JpdGVsbigiPHA+RkFJTFVS
RSEgIChDb3VsZCBub3QgZmluZCBuZXRzY2FwZSB0ZXN0IHBsdWdpbiBvbiBhIG5vbi1sb2NhbCBm
aWxlISk8XC9wPiIpOwogPC9zY3JpcHQ+CiA8L2JvZHk+CiA8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2lt
cG9ydGVkL3czYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzAxMykKKysrIExheW91dFRlc3RzL2lt
cG9ydGVkL3czYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAy
MC0wNi0xNCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgW1dQVF0g
aHRtbC93ZWJhcHBhcGlzL3N5c3RlbS1zdGF0ZS1hbmQtY2FwYWJpbGl0aWVzL3RoZS1uYXZpZ2F0
b3Itb2JqZWN0L25hdmlnYXRvci1wbHVnaW5hcnJheS5odG1sIGZhaWxzIGR1ZSB0byBsYWNrIG9m
IGNhY2hpbmcgb2YgUGx1Z2luIG9iamVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxMzE4NQorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyLgorCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvd2ViYXBwYXBpcy9zeXN0
ZW0tc3RhdGUtYW5kLWNhcGFiaWxpdGllcy90aGUtbmF2aWdhdG9yLW9iamVjdC9uYXZpZ2F0b3It
cGx1Z2luYXJyYXktZXhwZWN0ZWQudHh0OgorICAgICAgICBVcGRhdGUgcmVzdWx0cyBub3cgdGhh
dCB0aGlzIHRlc3QgcGFzc2VzLgorCiAyMDIwLTA2LTE0ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFw
cGxlLmNvbT4KIAogICAgICAgICBbV1BUXSB3ZWJzb2NrZXRzL0Nsb3NlLXJlYXNvbi11bnBhaXJl
ZC1zdXJyb2dhdGVzLmFueS5odG1sIGZhaWxzIGR1ZSB0byBmYWlsdXJlIHRvIGNvbnZlcnQgdW5w
YWlyZWQgc3Vycm9nYXRlcyB0byByZXBsYWNlbWVudCBjaGFyYWN0ZXIgZm9yIGNsb3NlIHJlYXNv
bgpJbmRleDogTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1s
L3dlYmFwcGFwaXMvc3lzdGVtLXN0YXRlLWFuZC1jYXBhYmlsaXRpZXMvdGhlLW5hdmlnYXRvci1v
YmplY3QvbmF2aWdhdG9yLXBsdWdpbmFycmF5LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvd2ViYXBwYXBp
cy9zeXN0ZW0tc3RhdGUtYW5kLWNhcGFiaWxpdGllcy90aGUtbmF2aWdhdG9yLW9iamVjdC9uYXZp
Z2F0b3ItcGx1Z2luYXJyYXktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyNjMwMTMpCisrKyBMYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvd2ViYXBwYXBpcy9z
eXN0ZW0tc3RhdGUtYW5kLWNhcGFiaWxpdGllcy90aGUtbmF2aWdhdG9yLW9iamVjdC9uYXZpZ2F0
b3ItcGx1Z2luYXJyYXktZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogCiBQQVNTIFRlc3RzIHRoYXQgbmFtZWQgcHJvcGVydGllcyBhcmUgbm90IGVudW1lcmFibGUg
aW4gbmF2aWdhdG9yLnBsdWdpbnMgYW5kIG5hdmlnYXRvci5taW1lVHlwZXMgCi1GQUlMIFRlc3Rz
IHRoYXQgbmF2aWdhdG9yLnBsdWdpbnMgYW5kIG5hdmlnYXRvci5taW1lVHlwZXMgcmV0dXJucyB0
aGUgc2FtZSBvYmplY3Qgd2hlbiBxdWVyaWVkIG11bHRpcGxlIHRpbWVzLiBhc3NlcnRfZXF1YWxz
OiBleHBlY3RlZCBvYmplY3QgIltvYmplY3QgUGx1Z2luXSIgYnV0IGdvdCBvYmplY3QgIltvYmpl
Y3QgUGx1Z2luXSIKK1BBU1MgVGVzdHMgdGhhdCBuYXZpZ2F0b3IucGx1Z2lucyBhbmQgbmF2aWdh
dG9yLm1pbWVUeXBlcyByZXR1cm5zIHRoZSBzYW1lIG9iamVjdCB3aGVuIHF1ZXJpZWQgbXVsdGlw
bGUgdGltZXMuIAogUEFTUyBUZXN0cyB0aGF0IG5hdmlnYXRvci5wbHVnaW5zIGFuZCBuYXZpZ2F0
b3IubWltZVR5cGVzIGRvZXMgbm90IHJldHVybiB0aGUgc2FtZSBvYmplY3Qgb24gZGlmZmVyZW50
IGZyYW1lcy4gCi1GQUlMIFRlc3RzIHRoYXQgbmF2aWdhdG9yLnBsdWdpbnMgYW5kIG5hdmlnYXRv
ci5taW1lVHlwZXMgcmV0dXJucyBwbHVnaW5zIHNvcnRlZCBpbiBhbHBoYWJldGljYWwgb3JkZXIg
YnkgcGx1Z2luIG5hbWUuIGFzc2VydF9sZXNzX3RoYW5fZXF1YWw6IGV4cGVjdGVkIGEgbnVtYmVy
IGxlc3MgdGhhbiBvciBlcXVhbCB0byAwIGJ1dCBnb3QgMQorUEFTUyBUZXN0cyB0aGF0IG5hdmln
YXRvci5wbHVnaW5zIGFuZCBuYXZpZ2F0b3IubWltZVR5cGVzIHJldHVybnMgcGx1Z2lucyBzb3J0
ZWQgaW4gYWxwaGFiZXRpY2FsIG9yZGVyIGJ5IHBsdWdpbiBuYW1lLiAKIApJbmRleDogTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvVGVzdEV4cGVjdGF0aW9ucwkocmV2aXNpb24gMjYz
MDEzKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zCSh3
b3JraW5nIGNvcHkpCkBAIC00ODIsNyArNDgyLDYgQEAgd2Via2l0Lm9yZy9iLzE1NjA4NCBhY2Nl
c3NpYmlsaXR5L21hYy92aQogd2Via2l0Lm9yZy9iLzE3MjIyMiBpbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL25vdGlmaWNhdGlvbnMvZXZlbnQtb25jbG9zZS5odG1sIFsgU2tpcCBdCiAK
IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9icm93c2Vycy9oaXN0b3J5L3Ro
ZS1oaXN0b3J5LWludGVyZmFjZS9oaXN0b3J5X2dvX25vX2FyZ3VtZW50Lmh0bWwgWyBQYXNzIEZh
aWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3dlYmFwcGFwaXMv
c3lzdGVtLXN0YXRlLWFuZC1jYXBhYmlsaXRpZXMvdGhlLW5hdmlnYXRvci1vYmplY3QvbmF2aWdh
dG9yLXBsdWdpbmFycmF5Lmh0bWwgWyBQYXNzIEZhaWx1cmUgXQogaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9odG1sL2Jyb3dzZXJzL2hpc3RvcnkvdGhlLWhpc3RvcnktaW50ZXJmYWNl
L2hpc3RvcnlfZ29fdG9fdXJpLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQogCiAjIE5ld2x5IGltcG9y
dGVkIFdQVCB0ZXN0cyB0aGF0IGFyZSBmbGFreSBvbmx5IG9uIFdLMS4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401877</attachid>
            <date>2020-06-14 17:17:55 -0700</date>
            <delta_ts>2020-06-14 19:07:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213185-20200614171754.patch</filename>
            <type>text/plain</type>
            <size>66402</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzAxMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBAQAorMjAyMC0wNi0xNCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgW1dQVF0gaHRtbC93ZWJhcHBhcGlz
L3N5c3RlbS1zdGF0ZS1hbmQtY2FwYWJpbGl0aWVzL3RoZS1uYXZpZ2F0b3Itb2JqZWN0L25hdmln
YXRvci1wbHVnaW5hcnJheS5odG1sIGZhaWxzIGR1ZSB0byBsYWNrIG9mIGNhY2hpbmcgb2YgUGx1
Z2luIG9iamVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxMzE4NQorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAg
IFRlc3RzOgorICAgICAgICAtIFVwZGF0ZXMgcmVzdWx0cyBmb3Igd2ViLXBsYXRmb3JtLXRlc3Rz
L2h0bWwvd2ViYXBwYXBpcy9zeXN0ZW0tc3RhdGUtYW5kLWNhcGFiaWxpdGllcy90aGUtbmF2aWdh
dG9yLW9iamVjdC9uYXZpZ2F0b3ItcGx1Z2luYXJyYXkuaHRtbAorICAgICAgICAgIHdoaWNoIG5v
dyBwYXNzZXMuCisgICAgICAgIC0gU3BsaXRzIHVwIGh0dHAvdGVzdHMvcGx1Z2lucy9wbHVnaW4t
amF2YXNjcmlwdC1hY2Nlc3MuaHRtbCwgYWRkaW5nIAorICAgICAgICAgIGh0dHAvdGVzdHMvcGx1
Z2lucy9wbHVnaW4tamF2YXNjcmlwdC1hY2Nlc3MtYWxsb3ctYWxsLXBsdWdpbnMuaHRtbAorICAg
ICAgICAgIHdoaWNoIHRlc3RzIHRoZSBpbnRlcm5hbHMuc2V0U2hvd0FsbFBsdWdpbnModHJ1ZSkg
Y2FzZS4gVGhpcyB3YXMKKyAgICAgICAgICByZXF1aXJlZCBub3cgdGhhdCB0aGUgcGx1Z2luIGFu
ZCBtaW1ldHlwZSBhcnJheXMgYXJlIGltbXV0YWJsZSBhZnRlcgorICAgICAgICAgIGNyZWF0aW9u
LgorCisgICAgICAgIE92ZXJoYXVsIHdlYiBleHBvc2VkIHBsdWdpbiBBUElzOgorICAgICAgICAt
IEFsbCBET01QbHVnaW4gYW5kIERPTU1pbWVUeXBlcyBhcmUgbm93IGNyZWF0ZWQgdG9nZXRoZXIg
KGFsb25nIHdpdGggdGhlIERPTVBsdWdpbkFycmF5IGFuZCAKKyAgICAgICAgICBET01NaW1lVHlw
ZUFycmF5KSBvbiBmaXJzdCBhY2Nlc3Mgb2YgZWl0aGVyIG5hdmlnYXRvci5wbHVnaW5zIG9yIG5h
dmlnYXRvci5taW1lVHlwZXMuCisgICAgICAgIC0gRE9NUGx1Z2lucyBhcmUgY3JlYXRlZCBhbmQg
c3RvcmVkIGluIHRoZSBET01QbHVnaW5BcnJheSAoZml4aW5nIHRoZSBpbml0aWFsIGxhY2sgb2Yg
Y2FjaGluZyBpc3N1ZSkKKyAgICAgICAgLSBET01NaW1lVHlwZXMgYXJlIGNyZWF0ZWQgYW5kIHN0
b3JlZCBpbiB0aGUgRE9NTWltZVR5cGVBcnJheS4KKyAgICAgICAgLSBET01QbHVnaW5zIGhvbGQg
YSBzdHJvbmcgcmVmZXJlbmNlIHRvIHRoZWlyIGFzc29jaWF0ZWQgRE9NTWltZVR5cGUuIFRoZSBE
T01NaW1lVHlwZSBoYXMKKyAgICAgICAgICBhIHdlYWsgcmVmZXJlbmNlIGJhY2sgdG8gdGhlIERP
TVBsdWdpbi4gVGhpcyBtZWFucyBmb3IgYSBzaW5nbGUgZXhlY3V0YXRpb24gY29udGV4dCwgd2Ug
b25seQorICAgICAgICAgIGV2ZXIgY3JlYXRlIG9uZSBET01QbHVnaW4gLyBET01NaW1lVHlwZSBm
b3IgZWFjaCB1bmRlcmx5aW5nIHBsdWdpbiAvIG1pbWV0eXBlLgorICAgICAgICAtIFVwZGF0ZSBH
QyBzbyB0aGF0IERPTVBsdWdpbiBhbmQgRE9NTWltZVR5cGUgKGluIGFkZGl0aW9uIHRvIERPTVBs
dWdpbkFycmF5IGFuZCBET01NaW1lVHlwZUFycmF5CisgICAgICAgICAgd2hpY2ggd2VyZSBhbHJl
YWR5IGRvaW5nIHRoaXMpIHVzZSBuYXZpZ2F0b3IgcmVhY2hhYmlsaXR5IGZvciB0aGVpciBsaWZl
dGltZS4gVGhpcyBpcyBhbG1vc3QKKyAgICAgICAgICBjb3JyZWN0LCBleGNlcHQgaWYgd2UgZXZl
ciBpbXBsZW1lbnQgRE9NUGx1Z2luQXJyYXkucmVmcmVzaChmYWxzZSkgdG8gbWF0Y2ggdGhlIHNw
ZWMsIGluIHdoaWNoCisgICAgICAgICAgY2FzZSB5b3UgY291bGQgZW5kIHVwIHdpdGggc29tZSBE
T01QbHVnaW5zIGFuZCBET01NaW1lVHlwZXMgdGhhdCBhcmUgbWFya2VkIGFzIHJlYWNoYWJsZSB3
aGVuCisgICAgICAgICAgdGhleSByZWFsbHkgYXJlIG5vdCwgYnV0IG9ubHkgcGx1Z2lucyB0aGF0
IHdlcmUgcmVtb3ZlZC4gVGhpcyBzZWVtcyBzbyB1bmxpa2VseSB0byBtYXR0ZXIgdGhhdAorICAg
ICAgICAgIGltcGxlbWVudGluZyBhIG1vcmUgc3RyaWN0IHJlYWNoYWJpbGl0eSBmdW5jdGlvbiBz
ZWVtcyBsaWtlIHRoZSB3cm9uZyB3YXkgdG8gZ28uCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAq
IERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICBBZGQgTmF2aWdhdG9yUGx1Z2lucy5pZGwKKworICAgICAgICAq
IGxvYWRlci9TdWJmcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5kUGx1Z2lu
TUlNRVR5cGVGcm9tVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmxvZ1BsdWdpblJlcXVlc3QpOgor
ICAgICAgICBTaW1wbGlmeSBhbmQgY2xlYW51cCBjb2RlIG1ha2luZyB1c2Ugb2YgdGhlIG5ldyB3
ZWJWaXNpYmxlTWltZVR5cGVzKCkgcmF0aGVyIHRoYW4gdGhlCisgICAgICAgIGNsdW5reSBnZXRX
ZWJWaXNpYmxlTWltZXNBbmRQbHVnaW5JbmRpY2VzKCkuCisKKyAgICAgICAgKiBwYWdlL05hdmln
YXRvci5jcHA6CisgICAgICAgICogcGFnZS9OYXZpZ2F0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6
Ok5hdmlnYXRvcjo6aW5pdGlhbGl6ZVBsdWdpbkFuZE1JTUVUeXBlQXJyYXlzKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5hdmlnYXRvcjo6cGx1Z2lucyk6CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0
b3I6Om1pbWVUeXBlcyk6CisgICAgICAgIEZ1bGx5IGluaXRpYWxpemUgTmF2aWdhdG9yLnBsdWdp
bnMvbWltZVR5cGVzIG9uIGZpcnN0IGFjY2VzcyBvZiBlaXRoZXIsIGZvbGxvd2luZworICAgICAg
ICB0aGUgc3BlY2lmaWVkIGJlaGF2aW9yIHRoYXQgdGhleSBzaG91bGQgbm90IGNoYW5nZSBhZnRl
ciBpbml0aWFsIGFjY2VzcyBmb3IgYSBzY3JpcHQKKyAgICAgICAgZXhlY3V0aW9uIGNvbnRleHQu
IFRoaXMgYWxzbyBlbnN1cmVzIHdlIGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgd3JhcHBlcnMgZm9y
IHRoZXNlCisgICAgICAgIG9iamVjdHMgb24gbXVsdGlwbGUgYWNjZXNzZXMsIHNvbWV0aGluZyB0
aGUgc3BlYyBtYW5kYXRlcyBidXQgd2UgZmFpbGVkIHRvIGRvIHByaW9yLgorICAgICAgICBJbiBh
ZGRpdGlvbiwgd2Ugbm93IGNvcnJlY3RseSBzb3J0IHRoZSBwbHVnaW5zIGJ5IG5hbWUgYW5kIG1p
bWVUeXBlcyBieSB0eXBlLCBhbHNvIGFzCisgICAgICAgIHNwZWNpZmllZC4KKworICAgICAgICAq
IHBhZ2UvTmF2aWdhdG9yLmlkbDoKKyAgICAgICAgKiBwYWdlL05hdmlnYXRvclBsdWdpbnMuaWRs
OiBBZGRlZC4KKyAgICAgICAgU3BsaXQgTmF2aWdhdG9yUGx1Z2lucyBvdXQgb2YgTmF2aWdhdG9y
LmlkbCBhcyBzcGVjaWZpZWQuIE5vIGZ1bmN0aW9uYWwgY2hhbmdlIGJ1dAorICAgICAgICBtYWtl
cyB0aGluZ3MgbmljZXIgd2hlbiB3ZSBtYXRjaCB0aGUgc3BlYyBjbG9zZXIuCisKKyAgICAgICAg
KiBwbHVnaW5zL0RPTU1pbWVUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTU1pbWVUeXBl
OjpET01NaW1lVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpET01NaW1lVHlwZTo6c3VmZml4ZXMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RE9NTWltZVR5cGU6OmVuYWJsZWRQbHVnaW4gY29u
c3QpOgorICAgICAgICAqIHBsdWdpbnMvRE9NTWltZVR5cGUuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkRPTU1pbWVUeXBlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NTWltZVR5cGU6Om5h
dmlnYXRvcik6CisgICAgICAgICogcGx1Z2lucy9ET01NaW1lVHlwZS5pZGw6CisgICAgICAgICog
cGx1Z2lucy9ET01NaW1lVHlwZUFycmF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTU1pbWVU
eXBlQXJyYXk6OkRPTU1pbWVUeXBlQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6RE9NTWltZVR5
cGVBcnJheTo6bGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTU1pbWVUeXBlQXJy
YXk6Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RE9NTWltZVR5cGVBcnJheTo6bmFtZWRJdGVt
KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTU1pbWVUeXBlQXJyYXk6OnN1cHBvcnRlZFByb3BlcnR5
TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6RE9NTWltZVR5cGVBcnJheTo6Z2V0UGx1Z2luRGF0
YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGx1Z2lucy9ET01NaW1lVHlwZUFycmF5Lmg6
CisgICAgICAgICogcGx1Z2lucy9ET01QbHVnaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9N
UGx1Z2luOjpET01QbHVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6RE9NUGx1Z2luOjppdGVtKToK
KyAgICAgICAgKFdlYkNvcmU6OkRPTVBsdWdpbjo6bmFtZWRJdGVtKToKKyAgICAgICAgKFdlYkNv
cmU6OkRPTVBsdWdpbjo6c3VwcG9ydGVkUHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcGx1Z2lu
cy9ET01QbHVnaW4uaDoKKyAgICAgICAgKiBwbHVnaW5zL0RPTVBsdWdpbi5pZGw6CisgICAgICAg
ICogcGx1Z2lucy9ET01QbHVnaW5BcnJheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01QbHVn
aW5BcnJheTo6RE9NUGx1Z2luQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6RE9NUGx1Z2luQXJy
YXk6Omxlbmd0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpET01QbHVnaW5BcnJheTo6aXRl
bSk6CisgICAgICAgIChXZWJDb3JlOjpET01QbHVnaW5BcnJheTo6bmFtZWRJdGVtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTVBsdWdpbkFycmF5OjpzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRPTVBsdWdpbkFycmF5OjpwbHVnaW5EYXRhIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBwbHVnaW5zL0RPTVBsdWdpbkFycmF5Lmg6CisgICAgICAgIFJhdGhlciB0
aGFuIGR5bmFtaWNhbGx5IGFjY2Vzc2luZyBwbHVnaW4gaW5mb3JtYXRpb24gdGhyb3VnaCBQYWdl
CisgICAgICAgIG9uIGVhY2ggaW50ZXJhY3Rpb24gd2l0aCB0aGUgRE9NIHBsdWdpbiBvYmplY3Rz
LCB3ZSBub3cgZnVsbHkgaW5pdGlhbGl6ZQorICAgICAgICB0aGVtIG9uIGNyZWF0aW9uLCBhbGxv
d2luZyBmb3IgY29ycmVjdCB3cmFwcGVyIGNhY2hpbmcgYW5kIGJlaGF2aW9yIGlmCisgICAgICAg
IHBsdWdpbnMgYXJlIGFkZGVkIC8gcmVtb3ZlZCAoZS5nLiB0aGUgYXJyYXlzIHNob3VsZCBub3Qg
Y2hhbmdlKS4KKyAgICAgICAgCisgICAgICAgICogcGx1Z2lucy9QbHVnaW5EYXRhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpbkRhdGE6OnB1YmxpY2x5VmlzaWJsZVBsdWdpbnNBbmRBZGRpdGlvbmFsV2ViVmlz
aWJsZVBsdWdpbnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6d2ViVmlz
aWJsZU1pbWVUeXBlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpzdXBwb3J0c01pbWVUeXBl
Rm9yUGx1Z2lucyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhOjpzdXBwb3J0c01pbWVU
eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OnN1cHBvcnRzV2ViVmlz
aWJsZU1pbWVUeXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OnN1cHBv
cnRzV2ViVmlzaWJsZU1pbWVUeXBlRm9yVVJMIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpbkRhdGE6OnBsdWdpbkZpbGVGb3JXZWJWaXNpYmxlTWltZVR5cGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6cHVibGljbHlWaXNpYmxlUGx1Z2lucyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhOjpnZXRXZWJWaXNpYmxlTWltZXNB
bmRQbHVnaW5JbmRpY2VzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
bkRhdGE6OmdldE1pbWVzQW5kUGx1Z2luSW5kaWNlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5EYXRhOjpnZXRNaW1lc0FuZFBsdWdpbkluZGljaWVzRm9yUGx1Z2lu
cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhOjpnZXRQbHVn
aW5JbmZvRm9yV2ViVmlzaWJsZU1pbWVUeXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bHVnaW5zL1BsdWdpbkRhdGEuaDoKKyAgICAgICAgU2ltcGxpZnkgaW50ZXJmYWNlIGJ5IHJlbW92
aW5nIG91dCBwYXJhbWV0ZXIgYmFzZWQgZ2V0V2ViVmlzaWJsZU1pbWVzQW5kUGx1Z2luSW5kaWNl
cworICAgICAgICAoYW5kIGhlbHBlcnMpIGFuZCBhZGRpbmcgbW9yZSBzdHJhaWd0d29yZCBhbHRl
cm5hdGl2ZXMuIGdldFdlYlZpc2libGVNaW1lc0FuZFBsdWdpbkluZGljZXMKKyAgICAgICAgd2Fz
IHVzZWZ1bCBmb3IgdGhlIG9sZCBET00gcGx1Z2luIG1vZGVsLCBidXQgbm93IHRoYXQgdGhlIGFy
cmF5cyBhcmUgaW5pdGlhbGl6ZWQgYWxsIAorICAgICAgICB0b2dldGhlciwgaXQgbm8gbG9uZ2Vy
IHByb3ZpZGVzIGFuIG9wdGltaXphdGlvbi4gSW5zdGVhZCwgYWxsIGNhbGxlcnMgcmVhbGx5IGp1
c3Qgd2FudAorICAgICAgICBhIGVpdGhlciBhIGxpc3Qgb2YgTWltZUNsYXNzSW5mb3Mgb3IgdG8g
a25vdyBpZiBvbmUgaXMgc3VwcG9ydGVkIHVuZGVyIGEgc3BlY2lmaWMgc2NlbmFyaW8sCisgICAg
ICAgIHNvIHdlIG5vdyBqdXN0IGV4cG9zZSB0aGF0LgorCiAyMDIwLTA2LTE0ICBUZXRzdWhhcnUg
T2h6ZWtpICA8dGV0c3VoYXJ1Lm9oemVraUBnbWFpbC5jb20+CiAKICAgICAgICAgV2l0aGRyYXcg
RmlsZVJlYWRlclN5bmMgZnJvbSBTZXJ2aWNlV29ya2VyCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAkocmV2aXNpb24gMjYzMDA3KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTk0NSw2ICs5NDUsNyBAQCBzZXQoV2ViQ29yZV9OT05fU1ZHX0lETF9G
SUxFUwogICAgIHBhZ2UvTmF2aWdhdG9ySUQuaWRsCiAgICAgcGFnZS9OYXZpZ2F0b3JMYW5ndWFn
ZS5pZGwKICAgICBwYWdlL05hdmlnYXRvck9uTGluZS5pZGwKKyAgICBwYWdlL05hdmlnYXRvclBs
dWdpbnMuaWRsCiAgICAgcGFnZS9OYXZpZ2F0b3JTZXJ2aWNlV29ya2VyLmlkbAogICAgIHBhZ2Uv
TmF2aWdhdG9yU2hhcmUuaWRsCiAgICAgcGFnZS9QZXJmb3JtYW5jZS5pZGwKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAkocmV2aXNpb24g
MjYzMDA3KQorKysgU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlz
dAkod29ya2luZyBjb3B5KQpAQCAtOTMzLDYgKzkzMyw3IEBAICQoUFJPSkVDVF9ESVIpL3BhZ2Uv
TmF2aWdhdG9ySUQuaWRsCiAkKFBST0pFQ1RfRElSKS9wYWdlL05hdmlnYXRvcklzTG9nZ2VkSW4u
aWRsCiAkKFBST0pFQ1RfRElSKS9wYWdlL05hdmlnYXRvckxhbmd1YWdlLmlkbAogJChQUk9KRUNU
X0RJUikvcGFnZS9OYXZpZ2F0b3JPbkxpbmUuaWRsCiskKFBST0pFQ1RfRElSKS9wYWdlL05hdmln
YXRvclBsdWdpbnMuaWRsCiAkKFBST0pFQ1RfRElSKS9wYWdlL05hdmlnYXRvclNlcnZpY2VXb3Jr
ZXIuaWRsCiAkKFBST0pFQ1RfRElSKS9wYWdlL05hdmlnYXRvclNoYXJlLmlkbAogJChQUk9KRUNU
X0RJUikvcGFnZS9QZXJmb3JtYW5jZS5pZGwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRT
b3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Rl
cml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CShyZXZpc2lvbiAyNjMwMDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAkod29ya2luZyBjb3B5
KQpAQCAtMTE1NCw2ICsxMTU0LDggQEAgJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYgogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNO
YXZpZ2F0b3JNZWRpYURldmljZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSlNOYXZpZ2F0b3JPbkxpbmUuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU05hdmlnYXRvck9uTGluZS5oCiskKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU05hdmlnYXRvclBsdWdpbnMuY3BwCisk
KEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU05hdmlnYXRvclBs
dWdpbnMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNO
YXZpZ2F0b3JTZXJ2aWNlV29ya2VyLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvSlNOYXZpZ2F0b3JTZXJ2aWNlV29ya2VyLmgKICQoQlVJTFRfUFJPRFVD
VFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTTmF2aWdhdG9yU2hhcmUuY3BwCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJj
ZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkKQEAgLTk1Miw2ICs5
NTIsNyBAQCBKU19CSU5ESU5HX0lETFMgPSBcCiAgICAgJChXZWJDb3JlKS9wYWdlL05hdmlnYXRv
cklzTG9nZ2VkSW4uaWRsIFwKICAgICAkKFdlYkNvcmUpL3BhZ2UvTmF2aWdhdG9yTGFuZ3VhZ2Uu
aWRsIFwKICAgICAkKFdlYkNvcmUpL3BhZ2UvTmF2aWdhdG9yT25MaW5lLmlkbCBcCisgICAgJChX
ZWJDb3JlKS9wYWdlL05hdmlnYXRvclBsdWdpbnMuaWRsIFwKICAgICAkKFdlYkNvcmUpL3BhZ2Uv
TmF2aWdhdG9yU2VydmljZVdvcmtlci5pZGwgXAogICAgICQoV2ViQ29yZSkvcGFnZS9OYXZpZ2F0
b3JTaGFyZS5pZGwgXAogICAgICQoV2ViQ29yZSkvcGFnZS9QZXJmb3JtYW5jZS5pZGwgXApJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjYzMDA3KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05ODg3LDYgKzk4ODcsNyBAQAogCQk3
QUY5QjIwOTE4Q0ZCNUYyMDBDNjRCRUYgLyogSlNWVFRSZWdpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNWVFRSZWdpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0FGOUIyMEExOENGQjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1ZUVFJlZ2lvbkxpc3QuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUY5QjIwQjE4Q0ZCNUYzMDBDNjRCRUYgLyog
SlNWVFRSZWdpb25MaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVlRU
UmVnaW9uTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzAxN0MzRDI0OTY5
RjEzMDBEQzBDMDIgLyogTmF2aWdhdG9yUGx1Z2lucy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTmF2aWdhdG9yUGx1Z2lu
cy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMDI5QzZEMjQ5M0M4RjgwMDI2
ODIwNCAvKiBDb2xvclR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbG9yVHlwZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MwQ0VGMjgxRTRBNTQyQzAwOERFQjgwIC8qIEpTRE9N
Q29uc3RydWN0b3JCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9N
Q29uc3RydWN0b3JCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMENFRjI5
MUU0QTU0RDMwMDhERUI4MCAvKiBKU0RPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxMTEyLDYgKzIxMTEzLDcgQEAKIAkJ
CQk2QjUwN0EyMzIzNEJGMzQxMDBCRTdDNjIgLyogTmF2aWdhdG9ySXNMb2dnZWRJbi5pZGwgKi8s
CiAJCQkJN0M1QkVBM0IxRTlFRTc3MTAwQ0M1MTdCIC8qIE5hdmlnYXRvckxhbmd1YWdlLmlkbCAq
LywKIAkJCQk3QzVCRUEzQzFFOUVFNzcxMDBDQzUxN0IgLyogTmF2aWdhdG9yT25MaW5lLmlkbCAq
LywKKwkJCQk3QzAxN0MzRDI0OTY5RjEzMDBEQzBDMDIgLyogTmF2aWdhdG9yUGx1Z2lucy5pZGwg
Ki8sCiAJCQkJNTE4MkMyNEIxRjMxM0FFMDAwNTlCQTdDIC8qIE5hdmlnYXRvclNlcnZpY2VXb3Jr
ZXIuaWRsICovLAogCQkJCTFEQzU1M0ZEMjExQkExMkEwMDRCNzgwRSAvKiBOYXZpZ2F0b3JTaGFy
ZS5pZGwgKi8sCiAJCQkJMDAxNDYyODgxMDNDRDFERTAwMEIyMERCIC8qIE9yaWdpbkFjY2Vzc0Vu
dHJ5LmNwcCAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNw
cAkocmV2aXNpb24gMjYzMDA3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9h
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDMwICsxNjMsMjUgQEAgYm9vbCBGcmFtZUxv
YWRlcjo6U3ViZnJhbWVMb2FkZXI6OnJlcXVlcwogICAgIHJldHVybiBsb2FkUGx1Z2luKG93bmVy
RWxlbWVudCwgdXJsLCBtaW1lVHlwZSwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsIHVzZUZhbGxi
YWNrKTsKIH0KIAotc3RhdGljIFN0cmluZyBmaW5kUGx1Z2luTUlNRVR5cGVGcm9tVVJMKFBhZ2Uq
IHBhZ2UsIGNvbnN0IFN0cmluZyYgdXJsKQorc3RhdGljIFN0cmluZyBmaW5kUGx1Z2luTUlNRVR5
cGVGcm9tVVJMKFBhZ2UmIHBhZ2UsIGNvbnN0IFN0cmluZ1ZpZXcmIHVybCkKIHsKICAgICBpZiAo
IXVybCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICByZXR1cm4geyB9OwogCiAg
ICAgc2l6ZV90IGRvdEluZGV4ID0gdXJsLnJldmVyc2VGaW5kKCcuJyk7CiAgICAgaWYgKGRvdElu
ZGV4ID09IG5vdEZvdW5kKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIHJldHVy
biB7IH07CiAKLSAgICBTdHJpbmcgZXh0ZW5zaW9uID0gdXJsLnN1YnN0cmluZyhkb3RJbmRleCAr
IDEpOworICAgIGF1dG8gZXh0ZW5zaW9uRnJvbVVSTCA9IHVybC5zdWJzdHJpbmcoZG90SW5kZXgg
KyAxKTsKIAotICAgIGNvbnN0IFBsdWdpbkRhdGEmIHBsdWdpbkRhdGEgPSBwYWdlLT5wbHVnaW5E
YXRhKCk7Ci0KLSAgICBWZWN0b3I8TWltZUNsYXNzSW5mbz4gbWltZXM7Ci0gICAgVmVjdG9yPHNp
emVfdD4gbWltZVBsdWdpbkluZGljZXM7Ci0gICAgcGx1Z2luRGF0YS5nZXRXZWJWaXNpYmxlTWlt
ZXNBbmRQbHVnaW5JbmRpY2VzKG1pbWVzLCBtaW1lUGx1Z2luSW5kaWNlcyk7Ci0gICAgZm9yIChh
dXRvJiBtaW1lIDogbWltZXMpIHsKLSAgICAgICAgZm9yIChhdXRvJiBtaW1lRXh0ZW5zaW9uIDog
bWltZS5leHRlbnNpb25zKSB7Ci0gICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2Fz
ZShleHRlbnNpb24sIG1pbWVFeHRlbnNpb24pKQotICAgICAgICAgICAgICAgIHJldHVybiBtaW1l
LnR5cGU7CisgICAgZm9yIChhdXRvJiB0eXBlIDogcGFnZS5wbHVnaW5EYXRhKCkud2ViVmlzaWJs
ZU1pbWVUeXBlcygpKSB7CisgICAgICAgIGZvciAoYXV0byYgZXh0ZW5zaW9uIDogdHlwZS5leHRl
bnNpb25zKSB7CisgICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShleHRlbnNp
b25Gcm9tVVJMLCBleHRlbnNpb24pKQorICAgICAgICAgICAgICAgIHJldHVybiB0eXBlLnR5cGU7
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIHsg
fTsKIH0KIAogc3RhdGljIHZvaWQgbG9nUGx1Z2luUmVxdWVzdChQYWdlKiBwYWdlLCBjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBzdWNjZXNzKQpAQCAtMTk3
LDcgKzE5Miw3IEBAIHN0YXRpYyB2b2lkIGxvZ1BsdWdpblJlcXVlc3QoUGFnZSogcGFnZSwKICAg
ICBTdHJpbmcgbmV3TUlNRVR5cGUgPSBtaW1lVHlwZTsKICAgICBpZiAoIW5ld01JTUVUeXBlKSB7
CiAgICAgICAgIC8vIFRyeSB0byBmaWd1cmUgb3V0IHRoZSBNSU1FIHR5cGUgZnJvbSB0aGUgVVJM
IGV4dGVuc2lvbi4KLSAgICAgICAgbmV3TUlNRVR5cGUgPSBmaW5kUGx1Z2luTUlNRVR5cGVGcm9t
VVJMKHBhZ2UsIHVybCk7CisgICAgICAgIG5ld01JTUVUeXBlID0gZmluZFBsdWdpbk1JTUVUeXBl
RnJvbVVSTCgqcGFnZSwgdXJsKTsKICAgICAgICAgaWYgKCFuZXdNSU1FVHlwZSkKICAgICAgICAg
ICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCShyZXZp
c2lvbiAyNjMwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDcgKzI1LDkgQEAKIAogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1
ZGUgIkNvb2tpZUphci5oIgorI2luY2x1ZGUgIkRPTU1pbWVUeXBlLmgiCiAjaW5jbHVkZSAiRE9N
TWltZVR5cGVBcnJheS5oIgorI2luY2x1ZGUgIkRPTVBsdWdpbi5oIgogI2luY2x1ZGUgIkRPTVBs
dWdpbkFycmF5LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpA
QCAtMTk1LDE0ICsxOTcsNjQgQEAgdm9pZCBOYXZpZ2F0b3I6OnNob3dTaGFyZURhdGEoRXhjZXB0
aW9uTwogICAgIH0pOwogfQogCit2b2lkIE5hdmlnYXRvcjo6aW5pdGlhbGl6ZVBsdWdpbkFuZE1p
bWVUeXBlQXJyYXlzKCkKK3sKKyAgICBpZiAobV9wbHVnaW5zKQorICAgICAgICByZXR1cm47CisK
KyAgICBhdXRvKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSB8fCAhZnJh
bWUtPnBhZ2UoKSkgeworICAgICAgICBtX3BsdWdpbnMgPSBET01QbHVnaW5BcnJheTo6Y3JlYXRl
KCp0aGlzKTsKKyAgICAgICAgbV9taW1lVHlwZXMgPSBET01NaW1lVHlwZUFycmF5OjpjcmVhdGUo
KnRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBbcHVibGljbHlWaXNp
YmxlUGx1Z2lucywgYWRkaXRpb25hbFdlYlZpc2libGVQbHVnaW5zXSA9IGZyYW1lLT5wYWdlKCkt
PnBsdWdpbkRhdGEoKS5wdWJsaWNseVZpc2libGVQbHVnaW5zQW5kQWRkaXRpb25hbFdlYlZpc2li
bGVQbHVnaW5zKCk7CisKKyAgICBWZWN0b3I8UmVmPERPTVBsdWdpbj4+IHB1YmxpY2x5VmlzaWJs
ZURPTVBsdWdpbnM7CisgICAgVmVjdG9yPFJlZjxET01QbHVnaW4+PiBhZGRpdGlvbmFsV2ViVmlz
aWJsZURPTVBsdWdpbnM7CisgICAgVmVjdG9yPFJlZjxET01NaW1lVHlwZT4+IHdlYlZpc2libGVE
T01NaW1lVHlwZXM7CisKKyAgICBwdWJsaWNseVZpc2libGVET01QbHVnaW5zLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkocHVibGljbHlWaXNpYmxlUGx1Z2lucy5zaXplKCkpOworICAgIGZvciAoYXV0
byYgcGx1Z2luIDogcHVibGljbHlWaXNpYmxlUGx1Z2lucykgeworICAgICAgICBhdXRvIHdyYXBw
ZXIgPSBET01QbHVnaW46OmNyZWF0ZSgqdGhpcywgcGx1Z2luKTsKKyAgICAgICAgd2ViVmlzaWJs
ZURPTU1pbWVUeXBlcy5hcHBlbmRWZWN0b3Iod3JhcHBlci0+bWltZVR5cGVzKCkpOworICAgICAg
ICBwdWJsaWNseVZpc2libGVET01QbHVnaW5zLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKHdyYXBw
ZXIpKTsKKyAgICB9CisKKyAgICBhZGRpdGlvbmFsV2ViVmlzaWJsZURPTVBsdWdpbnMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShhZGRpdGlvbmFsV2ViVmlzaWJsZVBsdWdpbnMuc2l6ZSgpKTsKKyAg
ICBmb3IgKGF1dG8mIHBsdWdpbiA6IGFkZGl0aW9uYWxXZWJWaXNpYmxlUGx1Z2lucykgeworICAg
ICAgICBhdXRvIHdyYXBwZXIgPSBET01QbHVnaW46OmNyZWF0ZSgqdGhpcywgcGx1Z2luKTsKKyAg
ICAgICAgd2ViVmlzaWJsZURPTU1pbWVUeXBlcy5hcHBlbmRWZWN0b3Iod3JhcHBlci0+bWltZVR5
cGVzKCkpOworICAgICAgICBhZGRpdGlvbmFsV2ViVmlzaWJsZURPTVBsdWdpbnMudW5jaGVja2Vk
QXBwZW5kKFdURk1vdmUod3JhcHBlcikpOworICAgIH0KKworICAgIHN0ZDo6c29ydChwdWJsaWNs
eVZpc2libGVET01QbHVnaW5zLmJlZ2luKCksIHB1YmxpY2x5VmlzaWJsZURPTVBsdWdpbnMuZW5k
KCksIFtdKGNvbnN0IFJlZjxET01QbHVnaW4+JiBhLCBjb25zdCBSZWY8RE9NUGx1Z2luPiYgYikg
eworICAgICAgICBpZiAoYXV0byBuYW1lQ29tcGFyaXNvbiA9IGNvZGVQb2ludENvbXBhcmUoYS0+
aW5mbygpLm5hbWUsIGItPmluZm8oKS5uYW1lKSkKKyAgICAgICAgICAgIHJldHVybiBuYW1lQ29t
cGFyaXNvbiA8IDA7CisgICAgICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlTGVzc1RoYW4oYS0+
aW5mbygpLmJ1bmRsZUlkZW50aWZpZXIsIGItPmluZm8oKS5idW5kbGVJZGVudGlmaWVyKTsKKyAg
ICB9KTsKKworICAgIHN0ZDo6c29ydCh3ZWJWaXNpYmxlRE9NTWltZVR5cGVzLmJlZ2luKCksIHdl
YlZpc2libGVET01NaW1lVHlwZXMuZW5kKCksIFtdKGNvbnN0IFJlZjxET01NaW1lVHlwZT4mIGEs
IGNvbnN0IFJlZjxET01NaW1lVHlwZT4mIGIpIHsKKyAgICAgICAgaWYgKGF1dG8gdHlwZUNvbXBh
cmlzb24gPSBjb2RlUG9pbnRDb21wYXJlKGEtPnR5cGUoKSwgYi0+dHlwZSgpKSkKKyAgICAgICAg
ICAgIHJldHVybiB0eXBlQ29tcGFyaXNvbiA8IDA7CisgICAgICAgIHJldHVybiBjb2RlUG9pbnRD
b21wYXJlTGVzc1RoYW4oYS0+ZW5hYmxlZFBsdWdpbigpLT5pbmZvKCkuYnVuZGxlSWRlbnRpZmll
ciwgYi0+ZW5hYmxlZFBsdWdpbigpLT5pbmZvKCkuYnVuZGxlSWRlbnRpZmllcik7CisgICAgfSk7
CisKKyAgICAvLyBOT1RFOiBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIHNvcnQgYWRkaXRpb25hbFdl
YlZpc2libGVET01QbHVnaW5zLCBhcyB0aGV5IGFyZSBvbmx5IGFjY2Vzc2libGUgdmlhCisgICAg
Ly8gbmFtZWQgcHJvcGVydHkgbG9vayB1cCwgc28gdGhlaXIgb3JkZXIgaXMgbm90IGV4cG9zZWQu
CisKKyAgICBtX3BsdWdpbnMgPSBET01QbHVnaW5BcnJheTo6Y3JlYXRlKCp0aGlzLCBXVEZNb3Zl
KHB1YmxpY2x5VmlzaWJsZURPTVBsdWdpbnMpLCBXVEZNb3ZlKGFkZGl0aW9uYWxXZWJWaXNpYmxl
RE9NUGx1Z2lucykpOworICAgIG1fbWltZVR5cGVzID0gRE9NTWltZVR5cGVBcnJheTo6Y3JlYXRl
KCp0aGlzLCBXVEZNb3ZlKHdlYlZpc2libGVET01NaW1lVHlwZXMpKTsKK30KKwogRE9NUGx1Z2lu
QXJyYXkmIE5hdmlnYXRvcjo6cGx1Z2lucygpCiB7CiAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgewogICAg
ICAgICBpZiAoYXV0byogZnJhbWUgPSB0aGlzLT5mcmFtZSgpKQogICAgICAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ05hdmlnYXRvckFQSUFjY2Vzc2VkKCpmcmFtZS0+
ZG9jdW1lbnQoKSwgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6TmF2aWdhdG9yQVBJOjpQbHVnaW5z
KTsKICAgICB9Ci0gICAgaWYgKCFtX3BsdWdpbnMpCi0gICAgICAgIG1fcGx1Z2lucyA9IERPTVBs
dWdpbkFycmF5OjpjcmVhdGUoKnRoaXMpOworICAgIGluaXRpYWxpemVQbHVnaW5BbmRNaW1lVHlw
ZUFycmF5cygpOwogICAgIHJldHVybiAqbV9wbHVnaW5zOwogfQogCkBAIC0yMTIsOCArMjY0LDcg
QEAgRE9NTWltZVR5cGVBcnJheSYgTmF2aWdhdG9yOjptaW1lVHlwZXMoKQogICAgICAgICBpZiAo
YXV0byogZnJhbWUgPSB0aGlzLT5mcmFtZSgpKQogICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ05hdmlnYXRvckFQSUFjY2Vzc2VkKCpmcmFtZS0+ZG9jdW1lbnQo
KSwgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6TmF2aWdhdG9yQVBJOjpNaW1lVHlwZXMpOwogICAg
IH0KLSAgICBpZiAoIW1fbWltZVR5cGVzKQotICAgICAgICBtX21pbWVUeXBlcyA9IERPTU1pbWVU
eXBlQXJyYXk6OmNyZWF0ZSgqdGhpcyk7CisgICAgaW5pdGlhbGl6ZVBsdWdpbkFuZE1pbWVUeXBl
QXJyYXlzKCk7CiAgICAgcmV0dXJuICptX21pbWVUeXBlczsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9OYXZpZ2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L05hdmlnYXRvci5oCShyZXZpc2lvbiAyNjMwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL05h
dmlnYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw4IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBzaG93U2hhcmVEYXRhKEV4Y2VwdGlvbk9yPFNoYXJlRGF0YVdpdGhQYXJzZWRVUkwmPiwg
UmVmPERlZmVycmVkUHJvbWlzZT4mJik7CiAgICAgZXhwbGljaXQgTmF2aWdhdG9yKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBET01XaW5kb3cmKTsKIAorICAgIHZvaWQgaW5pdGlhbGl6ZVBsdWdp
bkFuZE1pbWVUeXBlQXJyYXlzKCk7CisKICAgICBtdXRhYmxlIFJlZlB0cjxTaGFyZURhdGFSZWFk
ZXI+IG1fbG9hZGVyOwogICAgIG11dGFibGUgYm9vbCBtX2hhc1BlbmRpbmdTaGFyZSB7IGZhbHNl
IH07CiAgICAgbXV0YWJsZSBSZWZQdHI8RE9NUGx1Z2luQXJyYXk+IG1fcGx1Z2luczsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmlkbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL05hdmlnYXRvci5pZGwJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTAgKzIxLDcg
QEAKICAgICBHZW5lcmF0ZUlzUmVhY2hhYmxlPVJlYWNoYWJsZUZyb21ET01XaW5kb3csCiAgICAg
SlNDdXN0b21NYXJrRnVuY3Rpb24sCiBdIGludGVyZmFjZSBOYXZpZ2F0b3IgewotICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBET01QbHVnaW5BcnJheSBwbHVnaW5zOwotICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBET01NaW1lVHlwZUFycmF5IG1pbWVUeXBlczsKICAgICByZWFkb25seSBhdHRyaWJ1dGUg
Ym9vbGVhbiBjb29raWVFbmFibGVkOwotICAgIGJvb2xlYW4gamF2YUVuYWJsZWQoKTsKIAogICAg
IFtDb25kaXRpb25hbD1OQVZJR0FUT1JfU1RBTkRBTE9ORV0gcmVhZG9ubHkgYXR0cmlidXRlIGJv
b2xlYW4gc3RhbmRhbG9uZTsKIApAQCAtMzUsNSArMzIsNiBAQCBOYXZpZ2F0b3IgaW1wbGVtZW50
cyBOYXZpZ2F0b3JJRDsKIE5hdmlnYXRvciBpbXBsZW1lbnRzIE5hdmlnYXRvckxhbmd1YWdlOwog
TmF2aWdhdG9yIGltcGxlbWVudHMgTmF2aWdhdG9yTWF4VG91Y2hQb2ludHM7CiBOYXZpZ2F0b3Ig
aW1wbGVtZW50cyBOYXZpZ2F0b3JPbkxpbmU7CitOYXZpZ2F0b3IgaW1wbGVtZW50cyBOYXZpZ2F0
b3JQbHVnaW5zOwogTmF2aWdhdG9yIGltcGxlbWVudHMgTmF2aWdhdG9yU2VydmljZVdvcmtlcjsK
IE5hdmlnYXRvciBpbXBsZW1lbnRzIE5hdmlnYXRvclNoYXJlOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9OYXZpZ2F0b3JQbHVnaW5zLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL05hdmlnYXRvclBsdWdpbnMuaWRsCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvTmF2aWdhdG9yUGx1Z2lucy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKK1sKKyAgICBOb0ludGVyZmFjZU9iamVjdAorXSBpbnRlcmZhY2Ug
TmF2aWdhdG9yUGx1Z2lucyB7CisgICAgW1NhbWVPYmplY3RdIHJlYWRvbmx5IGF0dHJpYnV0ZSBE
T01QbHVnaW5BcnJheSBwbHVnaW5zOworICAgIFtTYW1lT2JqZWN0XSByZWFkb25seSBhdHRyaWJ1
dGUgRE9NTWltZVR5cGVBcnJheSBtaW1lVHlwZXM7CisgICAgYm9vbGVhbiBqYXZhRW5hYmxlZCgp
OworfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NTWltZVR5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NTWltZVR5cGUuY3BwCShyZXZpc2lv
biAyNjMwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTU1pbWVUeXBlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjAsNTkgKzIwLDQ5IEBACiAjaW5jbHVkZSAiRE9NTWltZVR5cGUuaCIK
IAogI2luY2x1ZGUgIkRPTVBsdWdpbi5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAi
RnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGx1Z2luRGF0YS5o
IgorI2luY2x1ZGUgIk5hdmlnYXRvci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ET01NaW1lVHlwZTo6RE9NTWltZVR5cGUo
UmVmUHRyPFBsdWdpbkRhdGE+JiYgcGx1Z2luRGF0YSwgRnJhbWUqIGZyYW1lLCB1bnNpZ25lZCBp
bmRleCkKLSAgICA6IEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlcihmcmFtZSkKLSAgICAsIG1fcGx1
Z2luRGF0YShXVEZNb3ZlKHBsdWdpbkRhdGEpKQotewotICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZv
PiBtaW1lczsKLSAgICBWZWN0b3I8c2l6ZV90PiBtaW1lUGx1Z2luSW5kaWNlczsKLSAgICBtX3Bs
dWdpbkRhdGEtPmdldFdlYlZpc2libGVNaW1lc0FuZFBsdWdpbkluZGljZXMobWltZXMsIG1pbWVQ
bHVnaW5JbmRpY2VzKTsKLSAgICBtX21pbWVDbGFzc0luZm8gPSBtaW1lc1tpbmRleF07Ci0gICAg
bV9wbHVnaW5JbmZvID0gbV9wbHVnaW5EYXRhLT53ZWJWaXNpYmxlUGx1Z2lucygpW21pbWVQbHVn
aW5JbmRpY2VzW2luZGV4XV07CitSZWY8RE9NTWltZVR5cGU+IERPTU1pbWVUeXBlOjpjcmVhdGUo
TmF2aWdhdG9yJiBuYXZpZ2F0b3IsIGNvbnN0IE1pbWVDbGFzc0luZm8mIGluZm8sIERPTVBsdWdp
biYgZW5hYmxlZFBsdWdpbikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBET01NaW1lVHlw
ZShuYXZpZ2F0b3IsIGluZm8sIGVuYWJsZWRQbHVnaW4pKTsKK30KKworRE9NTWltZVR5cGU6OkRP
TU1pbWVUeXBlKE5hdmlnYXRvciYgbmF2aWdhdG9yLCBjb25zdCBNaW1lQ2xhc3NJbmZvJiBpbmZv
LCBET01QbHVnaW4mIGVuYWJsZWRQbHVnaW4pCisgICAgOiBtX25hdmlnYXRvcihtYWtlV2Vha1B0
cihuYXZpZ2F0b3IpKQorICAgICwgbV9pbmZvKGluZm8pCisgICAgLCBtX2VuYWJsZWRQbHVnaW4o
bWFrZVdlYWtQdHIoZW5hYmxlZFBsdWdpbikpCit7CiB9CiAKIERPTU1pbWVUeXBlOjp+RE9NTWlt
ZVR5cGUoKSA9IGRlZmF1bHQ7CiAKIFN0cmluZyBET01NaW1lVHlwZTo6dHlwZSgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1fbWltZUNsYXNzSW5mby50eXBlOworICAgIHJldHVybiBtX2luZm8udHlw
ZTsKIH0KIAogU3RyaW5nIERPTU1pbWVUeXBlOjpzdWZmaXhlcygpIGNvbnN0CiB7Ci0gICAgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGV4dGVuc2lvbnMgPSBtX21pbWVDbGFzc0luZm8uZXh0ZW5zaW9u
czsKLQogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1faW5mby5leHRlbnNpb25zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmIChpKQogICAgICAg
ICAgICAgYnVpbGRlci5hcHBlbmQoJywnKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoZXh0ZW5z
aW9uc1tpXSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKG1faW5mby5leHRlbnNpb25zW2ldKTsK
ICAgICB9CiAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAogU3RyaW5nIERPTU1p
bWVUeXBlOjpkZXNjcmlwdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fbWltZUNsYXNzSW5m
by5kZXNjOworICAgIHJldHVybiBtX2luZm8uZGVzYzsKIH0KIAogUmVmUHRyPERPTVBsdWdpbj4g
RE9NTWltZVR5cGU6OmVuYWJsZWRQbHVnaW4oKSBjb25zdAogewotICAgIGlmICghbV9mcmFtZSB8
fCAhbV9mcmFtZS0+cGFnZSgpIHx8ICFtX2ZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpLmxvYWRl
cigpLmFyZVBsdWdpbnNFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
VmVjdG9yPE1pbWVDbGFzc0luZm8+IG1pbWVzOwotICAgIFZlY3RvcjxzaXplX3Q+IG1pbWVQbHVn
aW5JbmRpY2VzOwotICAgIG1fcGx1Z2luRGF0YS0+Z2V0V2ViVmlzaWJsZU1pbWVzQW5kUGx1Z2lu
SW5kaWNlcyhtaW1lcywgbWltZVBsdWdpbkluZGljZXMpOwotICAgIHJldHVybiBET01QbHVnaW46
OmNyZWF0ZShtX3BsdWdpbkRhdGEuZ2V0KCksIG1fZnJhbWUsIG1fcGx1Z2luSW5mbyk7CisgICAg
cmV0dXJuIG1fZW5hYmxlZFBsdWdpbi5nZXQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01NaW1lVHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NTWltZVR5cGUuaAkocmV2aXNpb24gMjYzMDA3
KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01NaW1lVHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xOSwxOCArMTksMTkgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJGcmFtZURl
c3RydWN0aW9uT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBET01QbHVnaW47Citj
bGFzcyBOYXZpZ2F0b3I7CiAKLWNsYXNzIERPTU1pbWVUeXBlIDogcHVibGljIFJlZkNvdW50ZWQ8
RE9NTWltZVR5cGU+LCBwdWJsaWMgRnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyIHsKK2NsYXNzIERP
TU1pbWVUeXBlIDogcHVibGljIFJlZkNvdW50ZWQ8RE9NTWltZVR5cGU+IHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPERPTU1pbWVUeXBlPiBjcmVhdGUoUmVmUHRyPFBsdWdpbkRhdGE+JiYgcGx1
Z2luRGF0YSwgRnJhbWUqIGZyYW1lLCB1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gYWRvcHRSZWYo
Km5ldyBET01NaW1lVHlwZShXVEZNb3ZlKHBsdWdpbkRhdGEpLCBmcmFtZSwgaW5kZXgpKTsgfQor
ICAgIHN0YXRpYyBSZWY8RE9NTWltZVR5cGU+IGNyZWF0ZShOYXZpZ2F0b3ImLCBjb25zdCBNaW1l
Q2xhc3NJbmZvJiwgRE9NUGx1Z2luJik7CiAgICAgfkRPTU1pbWVUeXBlKCk7CiAKICAgICBTdHJp
bmcgdHlwZSgpIGNvbnN0OwpAQCAtMzgsMTEgKzM5LDE0IEBAIHB1YmxpYzoKICAgICBTdHJpbmcg
ZGVzY3JpcHRpb24oKSBjb25zdDsKICAgICBSZWZQdHI8RE9NUGx1Z2luPiBlbmFibGVkUGx1Z2lu
KCkgY29uc3Q7CiAKKyAgICBOYXZpZ2F0b3IqIG5hdmlnYXRvcigpIHsgcmV0dXJuIG1fbmF2aWdh
dG9yLmdldCgpOyB9CisKIHByaXZhdGU6Ci0gICAgRE9NTWltZVR5cGUoUmVmUHRyPFBsdWdpbkRh
dGE+JiYsIEZyYW1lKiwgdW5zaWduZWQgaW5kZXgpOwotICAgIE1pbWVDbGFzc0luZm8gbV9taW1l
Q2xhc3NJbmZvOwotICAgIFJlZlB0cjxQbHVnaW5EYXRhPiBtX3BsdWdpbkRhdGE7Ci0gICAgUGx1
Z2luSW5mbyBtX3BsdWdpbkluZm87CisgICAgRE9NTWltZVR5cGUoTmF2aWdhdG9yJiwgY29uc3Qg
TWltZUNsYXNzSW5mbyYsIERPTVBsdWdpbiYpOworCisgICAgV2Vha1B0cjxOYXZpZ2F0b3I+IG1f
bmF2aWdhdG9yOworICAgIE1pbWVDbGFzc0luZm8gbV9pbmZvOworICAgIFdlYWtQdHI8RE9NUGx1
Z2luPiBtX2VuYWJsZWRQbHVnaW47CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTU1pbWVUeXBlLmlkbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTU1pbWVUeXBlLmlkbAkocmV2aXNpb24gMjYzMDA3KQor
KysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01NaW1lVHlwZS5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTE5LDcgKzE5LDkgQEAKICovCiAKIFsKLSAgICBJbnRlcmZhY2VOYW1lPU1pbWVUeXBlCisg
ICAgSW50ZXJmYWNlTmFtZT1NaW1lVHlwZSwKKyAgICBHZW5lcmF0ZUlzUmVhY2hhYmxlPVJlYWNo
YWJsZUZyb21OYXZpZ2F0b3IsCisgICAgSW1wbGVtZW50YXRpb25MYWNrc1ZUYWJsZQogXSBpbnRl
cmZhY2UgRE9NTWltZVR5cGUgewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdHlw
ZTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHN1ZmZpeGVzOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01NaW1lVHlwZUFycmF5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTU1pbWVUeXBlQXJyYXkuY3BwCShyZXZpc2lvbiAyNjMw
MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTU1pbWVUeXBlQXJyYXkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMCwxMCArMjAsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkRPTU1pbWVUeXBlQXJyYXkuaCIKIAotI2luY2x1ZGUgIkRPTVBsdWdpbi5oIgotI2luY2x1
ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIK
KyNpbmNsdWRlICJET01NaW1lVHlwZS5oIgorI2luY2x1ZGUgIk5hdmlnYXRvci5oIgogI2luY2x1
ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmlu
Zy5oPgogCkBAIC0zMSw4ICsyOSwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdURl9NQUtF
X0lTT19BTExPQ0FURURfSU1QTChET01NaW1lVHlwZUFycmF5KTsKIAotRE9NTWltZVR5cGVBcnJh
eTo6RE9NTWltZVR5cGVBcnJheShOYXZpZ2F0b3ImIG5hdmlnYXRvcikKK1JlZjxET01NaW1lVHlw
ZUFycmF5PiBET01NaW1lVHlwZUFycmF5OjpjcmVhdGUoTmF2aWdhdG9yJiBuYXZpZ2F0b3IsIFZl
Y3RvcjxSZWY8RE9NTWltZVR5cGU+PiYmIHR5cGVzKQoreworICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IERPTU1pbWVUeXBlQXJyYXkobmF2aWdhdG9yLCBXVEZNb3ZlKHR5cGVzKSkpOworfQorCitE
T01NaW1lVHlwZUFycmF5OjpET01NaW1lVHlwZUFycmF5KE5hdmlnYXRvciYgbmF2aWdhdG9yLCBW
ZWN0b3I8UmVmPERPTU1pbWVUeXBlPj4mJiB0eXBlcykKICAgICA6IG1fbmF2aWdhdG9yKG1ha2VX
ZWFrUHRyKG5hdmlnYXRvcikpCisgICAgLCBtX3R5cGVzKFdURk1vdmUodHlwZXMpKQogewogfQog
CkBAIC00MCw3NiArNDQsMzIgQEAgRE9NTWltZVR5cGVBcnJheTo6fkRPTU1pbWVUeXBlQXJyYXko
KSA9IAogCiB1bnNpZ25lZCBET01NaW1lVHlwZUFycmF5OjpsZW5ndGgoKSBjb25zdAogewotICAg
IFBsdWdpbkRhdGEqIGRhdGEgPSBnZXRQbHVnaW5EYXRhKCk7Ci0gICAgaWYgKCFkYXRhKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiBtaW1lczsKLSAgICBW
ZWN0b3I8c2l6ZV90PiBtaW1lUGx1Z2luSW5kaWNlczsKLSAgICBkYXRhLT5nZXRXZWJWaXNpYmxl
TWltZXNBbmRQbHVnaW5JbmRpY2VzKG1pbWVzLCBtaW1lUGx1Z2luSW5kaWNlcyk7Ci0gICAgcmV0
dXJuIG1pbWVzLnNpemUoKTsKKyAgICByZXR1cm4gbV90eXBlcy5zaXplKCk7CiB9CiAKIFJlZlB0
cjxET01NaW1lVHlwZT4gRE9NTWltZVR5cGVBcnJheTo6aXRlbSh1bnNpZ25lZCBpbmRleCkKIHsK
LSAgICBQbHVnaW5EYXRhKiBkYXRhID0gZ2V0UGx1Z2luRGF0YSgpOwotICAgIGlmICghZGF0YSkK
KyAgICBpZiAoaW5kZXggPj0gbV90eXBlcy5zaXplKCkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgVmVjdG9yPE1pbWVDbGFzc0luZm8+IG1pbWVzOwotICAgIFZlY3RvcjxzaXplX3Q+
IG1pbWVQbHVnaW5JbmRpY2VzOwotICAgIGRhdGEtPmdldFdlYlZpc2libGVNaW1lc0FuZFBsdWdp
bkluZGljZXMobWltZXMsIG1pbWVQbHVnaW5JbmRpY2VzKTsKLQotICAgIGlmIChpbmRleCA+PSBt
aW1lcy5zaXplKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBET01NaW1l
VHlwZTo6Y3JlYXRlKGRhdGEsIGZyYW1lKCksIGluZGV4KTsKKyAgICByZXR1cm4gbV90eXBlc1tp
bmRleF0ucHRyKCk7CiB9CiAKIFJlZlB0cjxET01NaW1lVHlwZT4gRE9NTWltZVR5cGVBcnJheTo6
bmFtZWRJdGVtKGNvbnN0IEF0b21TdHJpbmcmIHByb3BlcnR5TmFtZSkKIHsKLSAgICBQbHVnaW5E
YXRhKiBkYXRhID0gZ2V0UGx1Z2luRGF0YSgpOwotICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBWZWN0b3I8TWltZUNsYXNzSW5mbz4gbWltZXM7Ci0gICAgVmVj
dG9yPHNpemVfdD4gbWltZVBsdWdpbkluZGljZXM7Ci0gICAgZGF0YS0+Z2V0V2ViVmlzaWJsZU1p
bWVzQW5kUGx1Z2luSW5kaWNlcyhtaW1lcywgbWltZVBsdWdpbkluZGljZXMpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtaW1lcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobWlt
ZXNbaV0udHlwZSA9PSBwcm9wZXJ0eU5hbWUpCi0gICAgICAgICAgICByZXR1cm4gRE9NTWltZVR5
cGU6OmNyZWF0ZShkYXRhLCBmcmFtZSgpLCBpKTsKKyAgICBmb3IgKGF1dG8mIHR5cGUgOiBtX3R5
cGVzKSB7CisgICAgICAgIGlmICh0eXBlLT50eXBlKCkgPT0gcHJvcGVydHlOYW1lKQorICAgICAg
ICAgICAgcmV0dXJuIHR5cGUucHRyKCk7CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQog
CiBWZWN0b3I8QXRvbVN0cmluZz4gRE9NTWltZVR5cGVBcnJheTo6c3VwcG9ydGVkUHJvcGVydHlO
YW1lcygpCiB7Ci0gICAgUGx1Z2luRGF0YSogZGF0YSA9IGdldFBsdWdpbkRhdGEoKTsKLSAgICBp
ZiAoIWRhdGEpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBWZWN0b3I8TWltZUNsYXNzSW5m
bz4gbWltZXM7Ci0gICAgVmVjdG9yPHNpemVfdD4gbWltZVBsdWdpbkluZGljZXM7Ci0gICAgZGF0
YS0+Z2V0V2ViVmlzaWJsZU1pbWVzQW5kUGx1Z2luSW5kaWNlcyhtaW1lcywgbWltZVBsdWdpbklu
ZGljZXMpOwotCiAgICAgVmVjdG9yPEF0b21TdHJpbmc+IHJlc3VsdDsKLSAgICByZXN1bHQucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShtaW1lcy5zaXplKCkpOwotICAgIGZvciAoYXV0byYgaW5mbyA6
IG1pbWVzKQotICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoaW5mby50eXBl
KSk7Ci0KKyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3R5cGVzLnNpemUoKSk7
CisgICAgZm9yIChhdXRvJiB0eXBlIDogbV90eXBlcykKKyAgICAgICAgcmVzdWx0LnVuY2hlY2tl
ZEFwcGVuZCh0eXBlLT50eXBlKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVBsdWdpbkRh
dGEqIERPTU1pbWVUeXBlQXJyYXk6OmdldFBsdWdpbkRhdGEoKSBjb25zdAotewotICAgIGF1dG8q
IGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIGF1dG8qIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwotICAgIGlmICghcGFn
ZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gJnBhZ2UtPnBsdWdpbkRh
dGEoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9ET01NaW1lVHlwZUFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9ET01NaW1lVHlwZUFycmF5LmgJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvRE9NTWltZVR5cGVBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwz
NCArMjAsMzUgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJET01NaW1lVHlwZS5oIgot
I2luY2x1ZGUgIk5hdmlnYXRvci5oIgogI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgorI2lu
Y2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWNsYXNzIFBsdWdpbkRhdGE7CitjbGFzcyBET01NaW1lVHlwZTsKK2NsYXNzIE5h
dmlnYXRvcjsKIAogY2xhc3MgRE9NTWltZVR5cGVBcnJheSBmaW5hbCA6IHB1YmxpYyBTY3JpcHRX
cmFwcGFibGUsIHB1YmxpYyBSZWZDb3VudGVkPERPTU1pbWVUeXBlQXJyYXk+IHsKICAgICBXVEZf
TUFLRV9JU09fQUxMT0NBVEVEKERPTU1pbWVUeXBlQXJyYXkpOwogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8RE9NTWltZVR5cGVBcnJheT4gY3JlYXRlKE5hdmlnYXRvciYgbmF2aWdhdG9yKSB7IHJl
dHVybiBhZG9wdFJlZigqbmV3IERPTU1pbWVUeXBlQXJyYXkobmF2aWdhdG9yKSk7IH0KKyAgICBz
dGF0aWMgUmVmPERPTU1pbWVUeXBlQXJyYXk+IGNyZWF0ZShOYXZpZ2F0b3ImLCBWZWN0b3I8UmVm
PERPTU1pbWVUeXBlPj4mJiA9IHsgfSk7CiAgICAgfkRPTU1pbWVUeXBlQXJyYXkoKTsKIAogICAg
IHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwogICAgIFJlZlB0cjxET01NaW1lVHlwZT4gaXRlbSh1
bnNpZ25lZCBpbmRleCk7CiAgICAgUmVmUHRyPERPTU1pbWVUeXBlPiBuYW1lZEl0ZW0oY29uc3Qg
QXRvbVN0cmluZyYgcHJvcGVydHlOYW1lKTsKICAgICBWZWN0b3I8QXRvbVN0cmluZz4gc3VwcG9y
dGVkUHJvcGVydHlOYW1lcygpOwotICAgIAorCiAgICAgTmF2aWdhdG9yKiBuYXZpZ2F0b3IoKSB7
IHJldHVybiBtX25hdmlnYXRvci5nZXQoKTsgfQogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IERP
TU1pbWVUeXBlQXJyYXkoTmF2aWdhdG9yJik7Ci0gICAgUGx1Z2luRGF0YSogZ2V0UGx1Z2luRGF0
YSgpIGNvbnN0OwotICAgIEZyYW1lKiBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmF2aWdhdG9y
ID8gbV9uYXZpZ2F0b3ItPmZyYW1lKCkgOiBudWxscHRyOyB9CisgICAgZXhwbGljaXQgRE9NTWlt
ZVR5cGVBcnJheShOYXZpZ2F0b3ImLCBWZWN0b3I8UmVmPERPTU1pbWVUeXBlPj4mJik7CiAgICAg
CiAgICAgV2Vha1B0cjxOYXZpZ2F0b3I+IG1fbmF2aWdhdG9yOworICAgIFZlY3RvcjxSZWY8RE9N
TWltZVR5cGU+PiBtX3R5cGVzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01QbHVnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2luLmNwcAkocmV2aXNpb24gMjYzMDA3KQorKysgU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01QbHVnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOSw4
ICsxOSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRE9NUGx1Z2luLmgiCiAK
LSNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJE
T01NaW1lVHlwZS5oIgorI2luY2x1ZGUgIk5hdmlnYXRvci5oIgogI2luY2x1ZGUgPHd0Zi9Jc29N
YWxsb2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgogCkBAIC0y
OCwxMCArMjgsMjkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXVEZfTUFLRV9JU09fQUxMT0NB
VEVEX0lNUEwoRE9NUGx1Z2luKTsKIAotRE9NUGx1Z2luOjpET01QbHVnaW4oUGx1Z2luRGF0YSog
cGx1Z2luRGF0YSwgRnJhbWUqIGZyYW1lLCBQbHVnaW5JbmZvIHBsdWdpbkluZm8pCi0gICAgOiBG
cmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIoZnJhbWUpCi0gICAgLCBtX3BsdWdpbkRhdGEocGx1Z2lu
RGF0YSkKLSAgICAsIG1fcGx1Z2luSW5mbyhXVEZNb3ZlKHBsdWdpbkluZm8pKQorUmVmPERPTVBs
dWdpbj4gRE9NUGx1Z2luOjpjcmVhdGUoTmF2aWdhdG9yJiBuYXZpZ2F0b3IsIGNvbnN0IFBsdWdp
bkluZm8mIGluZm8pCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRE9NUGx1Z2luKG5hdmln
YXRvciwgaW5mbykpOworfQorCitzdGF0aWMgVmVjdG9yPFJlZjxET01NaW1lVHlwZT4+IG1ha2VN
aW1lVHlwZXMoTmF2aWdhdG9yJiBuYXZpZ2F0b3IsIGNvbnN0IFBsdWdpbkluZm8mIGluZm8sIERP
TVBsdWdpbiYgc2VsZikKK3sKKyAgICBWZWN0b3I8UmVmPERPTU1pbWVUeXBlPj4gdHlwZXM7Cisg
ICAgdHlwZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShpbmZvLm1pbWVzLnNpemUoKSk7CisgICAg
Zm9yIChhdXRvJiB0eXBlIDogaW5mby5taW1lcykKKyAgICAgICAgdHlwZXMudW5jaGVja2VkQXBw
ZW5kKERPTU1pbWVUeXBlOjpjcmVhdGUobmF2aWdhdG9yLCB0eXBlLCBzZWxmKSk7CisKKyAgICBz
dGQ6OnNvcnQodHlwZXMuYmVnaW4oKSwgdHlwZXMuZW5kKCksIFtdKGNvbnN0IFJlZjxET01NaW1l
VHlwZT4mIGEsIGNvbnN0IFJlZjxET01NaW1lVHlwZT4mIGIpIHsKKyAgICAgICAgcmV0dXJuIGNv
ZGVQb2ludENvbXBhcmVMZXNzVGhhbihhLT50eXBlKCksIGItPnR5cGUoKSk7CisgICAgfSk7CisK
KyAgICByZXR1cm4gdHlwZXM7Cit9CisKK0RPTVBsdWdpbjo6RE9NUGx1Z2luKE5hdmlnYXRvciYg
bmF2aWdhdG9yLCBjb25zdCBQbHVnaW5JbmZvJiBpbmZvKQorICAgIDogbV9uYXZpZ2F0b3IobWFr
ZVdlYWtQdHIobmF2aWdhdG9yKSkKKyAgICAsIG1faW5mbyhpbmZvKQorICAgICwgbV9taW1lVHlw
ZXMobWFrZU1pbWVUeXBlcyhuYXZpZ2F0b3IsIGluZm8sICp0aGlzKSkKIHsKIH0KIApAQCAtMzks
NjAgKzU4LDQ3IEBAIERPTVBsdWdpbjo6fkRPTVBsdWdpbigpID0gZGVmYXVsdDsKIAogU3RyaW5n
IERPTVBsdWdpbjo6bmFtZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcGx1Z2luSW5mby5uYW1l
OworICAgIHJldHVybiBtX2luZm8ubmFtZTsKIH0KIAogU3RyaW5nIERPTVBsdWdpbjo6ZmlsZW5h
bWUoKSBjb25zdAogewotICAgIHJldHVybiBtX3BsdWdpbkluZm8uZmlsZTsKKyAgICByZXR1cm4g
bV9pbmZvLmZpbGU7CiB9CiAKIFN0cmluZyBET01QbHVnaW46OmRlc2NyaXB0aW9uKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9wbHVnaW5JbmZvLmRlc2M7CisgICAgcmV0dXJuIG1faW5mby5kZXNj
OwogfQogCiB1bnNpZ25lZCBET01QbHVnaW46Omxlbmd0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1fcGx1Z2luSW5mby5taW1lcy5zaXplKCk7CisgICAgcmV0dXJuIG1fbWltZVR5cGVzLnNpemUo
KTsKIH0KIAogUmVmUHRyPERPTU1pbWVUeXBlPiBET01QbHVnaW46Oml0ZW0odW5zaWduZWQgaW5k
ZXgpCiB7Ci0gICAgaWYgKGluZGV4ID49IG1fcGx1Z2luSW5mby5taW1lcy5zaXplKCkgfHwgIW1f
ZnJhbWUgfHwgIW1fZnJhbWUtPnBhZ2UoKSkKKyAgICBpZiAoaW5kZXggPj0gbV9taW1lVHlwZXMu
c2l6ZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIE1pbWVDbGFzc0luZm8gbWlt
ZSA9IG1fcGx1Z2luSW5mby5taW1lc1tpbmRleF07Ci0KLSAgICBWZWN0b3I8TWltZUNsYXNzSW5m
bz4gbWltZXM7Ci0gICAgVmVjdG9yPHNpemVfdD4gbWltZVBsdWdpbkluZGljZXM7Ci0gICAgVmVj
dG9yPFBsdWdpbkluZm8+IHBsdWdpbnMgPSBtX3BsdWdpbkRhdGEtPndlYlZpc2libGVQbHVnaW5z
KCk7Ci0gICAgbV9wbHVnaW5EYXRhLT5nZXRXZWJWaXNpYmxlTWltZXNBbmRQbHVnaW5JbmRpY2Vz
KG1pbWVzLCBtaW1lUGx1Z2luSW5kaWNlcyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1pbWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtaW1lc1tpXSA9PSBtaW1lICYmIHBs
dWdpbnNbbWltZVBsdWdpbkluZGljZXNbaV1dID09IG1fcGx1Z2luSW5mbykKLSAgICAgICAgICAg
IHJldHVybiBET01NaW1lVHlwZTo6Y3JlYXRlKG1fcGx1Z2luRGF0YS5nZXQoKSwgbV9mcmFtZSwg
aSk7Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBtX21pbWVUeXBlc1tp
bmRleF0ucHRyKCk7CiB9CiAKIFJlZlB0cjxET01NaW1lVHlwZT4gRE9NUGx1Z2luOjpuYW1lZEl0
ZW0oY29uc3QgQXRvbVN0cmluZyYgcHJvcGVydHlOYW1lKQogewotICAgIGlmICghbV9mcmFtZSB8
fCAhbV9mcmFtZS0+cGFnZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFZlY3Rv
cjxNaW1lQ2xhc3NJbmZvPiBtaW1lczsKLSAgICBWZWN0b3I8c2l6ZV90PiBtaW1lUGx1Z2luSW5k
aWNlczsKLSAgICBtX3BsdWdpbkRhdGEtPmdldFdlYlZpc2libGVNaW1lc0FuZFBsdWdpbkluZGlj
ZXMobWltZXMsIG1pbWVQbHVnaW5JbmRpY2VzKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbWltZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGlmIChtaW1lc1tpXS50eXBlID09IHByb3Bl
cnR5TmFtZSkKLSAgICAgICAgICAgIHJldHVybiBET01NaW1lVHlwZTo6Y3JlYXRlKG1fcGx1Z2lu
RGF0YS5nZXQoKSwgbV9mcmFtZSwgaSk7CisgICAgZm9yIChhdXRvJiB0eXBlIDogbV9taW1lVHlw
ZXMpIHsKKyAgICAgICAgaWYgKHR5cGUtPnR5cGUoKSA9PSBwcm9wZXJ0eU5hbWUpCisgICAgICAg
ICAgICByZXR1cm4gdHlwZS5wdHIoKTsKKyAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAK
IFZlY3RvcjxBdG9tU3RyaW5nPiBET01QbHVnaW46OnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKQog
ewotICAgIC8vIEZJWE1FOiBTaG91bGQgYmUgaW1wbGVtZW50ZWQuCi0gICAgcmV0dXJuIFZlY3Rv
cjxBdG9tU3RyaW5nPigpOworICAgIFZlY3RvcjxBdG9tU3RyaW5nPiByZXN1bHQ7CisgICAgcmVz
dWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9taW1lVHlwZXMuc2l6ZSgpKTsKKyAgICBmb3Ig
KGF1dG8mIHR5cGUgOiBtX21pbWVUeXBlcykKKyAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVu
ZCh0eXBlLT50eXBlKCkpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2luLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01QbHVnaW4uaAkocmV2aXNpb24gMjYz
MDA3KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01QbHVnaW4uaAkod29ya2luZyBjb3B5
KQpAQCAtMTksMjMgKzE5LDI1IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiRnJhbWVE
ZXN0cnVjdGlvbk9ic2VydmVyLmgiCi0jaW5jbHVkZSAiRE9NTWltZVR5cGUuaCIKKyNpbmNsdWRl
ICJQbHVnaW5EYXRhLmgiCiAjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlLmgiCiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBQbHVnaW47Ci1jbGFz
cyBQbHVnaW5EYXRhOworY2xhc3MgRE9NTWltZVR5cGU7CitjbGFzcyBOYXZpZ2F0b3I7CiAKLWNs
YXNzIERPTVBsdWdpbiBmaW5hbCA6IHB1YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1YmxpYyBSZWZD
b3VudGVkPERPTVBsdWdpbj4sIHB1YmxpYyBGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIgeworY2xh
c3MgRE9NUGx1Z2luIGZpbmFsIDogcHVibGljIFNjcmlwdFdyYXBwYWJsZSwgcHVibGljIFJlZkNv
dW50ZWQ8RE9NUGx1Z2luPiwgcHVibGljIENhbk1ha2VXZWFrUHRyPERPTVBsdWdpbj4gewogICAg
IFdURl9NQUtFX0lTT19BTExPQ0FURUQoRE9NUGx1Z2luKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPERPTVBsdWdpbj4gY3JlYXRlKFBsdWdpbkRhdGEqIHBsdWdpbkRhdGEsIEZyYW1lKiBmcmFt
ZSwgUGx1Z2luSW5mbyBwbHVnaW5JbmZvKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IERPTVBsdWdp
bihwbHVnaW5EYXRhLCBmcmFtZSwgV1RGTW92ZShwbHVnaW5JbmZvKSkpOyB9CisgICAgc3RhdGlj
IFJlZjxET01QbHVnaW4+IGNyZWF0ZShOYXZpZ2F0b3ImLCBjb25zdCBQbHVnaW5JbmZvJik7CiAg
ICAgfkRPTVBsdWdpbigpOwogCisgICAgY29uc3QgUGx1Z2luSW5mbyYgaW5mbygpIGNvbnN0IHsg
cmV0dXJuIG1faW5mbzsgfQorCiAgICAgU3RyaW5nIG5hbWUoKSBjb25zdDsKICAgICBTdHJpbmcg
ZmlsZW5hbWUoKSBjb25zdDsKICAgICBTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdDsKQEAgLTQ2
LDEwICs0OCwxNiBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPERPTU1pbWVUeXBlPiBuYW1lZEl0ZW0o
Y29uc3QgQXRvbVN0cmluZyYgcHJvcGVydHlOYW1lKTsKICAgICBWZWN0b3I8QXRvbVN0cmluZz4g
c3VwcG9ydGVkUHJvcGVydHlOYW1lcygpOwogCisgICAgY29uc3QgVmVjdG9yPFJlZjxET01NaW1l
VHlwZT4+JiBtaW1lVHlwZXMoKSBjb25zdCB7IHJldHVybiBtX21pbWVUeXBlczsgfQorCisgICAg
TmF2aWdhdG9yKiBuYXZpZ2F0b3IoKSB7IHJldHVybiBtX25hdmlnYXRvci5nZXQoKTsgfQorCiBw
cml2YXRlOgotICAgIERPTVBsdWdpbihQbHVnaW5EYXRhKiwgRnJhbWUqLCBQbHVnaW5JbmZvKTsK
LSAgICBSZWZQdHI8UGx1Z2luRGF0YT4gbV9wbHVnaW5EYXRhOwotICAgIFBsdWdpbkluZm8gbV9w
bHVnaW5JbmZvOworICAgIERPTVBsdWdpbihOYXZpZ2F0b3ImLCBjb25zdCBQbHVnaW5JbmZvJik7
CisKKyAgICBXZWFrUHRyPE5hdmlnYXRvcj4gbV9uYXZpZ2F0b3I7CisgICAgUGx1Z2luSW5mbyBt
X2luZm87CisgICAgVmVjdG9yPFJlZjxET01NaW1lVHlwZT4+IG1fbWltZVR5cGVzOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01Q
bHVnaW4uaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2lu
LmlkbAkocmV2aXNpb24gMjYzMDA3KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01QbHVn
aW4uaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw2ICsyMCw4IEBACiAKIFsKICAgICBJbnRlcmZh
Y2VOYW1lPVBsdWdpbiwKKyAgICBHZW5lcmF0ZUlzUmVhY2hhYmxlPVJlYWNoYWJsZUZyb21OYXZp
Z2F0b3IsCisgICAgSW1wbGVtZW50YXRpb25MYWNrc1ZUYWJsZSwKICAgICBMZWdhY3lVbmVudW1l
cmFibGVOYW1lZFByb3BlcnRpZXMKIF0gaW50ZXJmYWNlIERPTVBsdWdpbiB7CiAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIERPTVN0cmluZyBuYW1lOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy9ET01QbHVnaW5BcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy9ET01QbHVnaW5BcnJheS5jcHAJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvRE9NUGx1Z2luQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw2
IEBACiAjaW5jbHVkZSAiRE9NUGx1Z2luLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRl
ICJQYWdlLmgiCi0jaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgogCkBAIC0zMSw4
ICszMCwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURf
SU1QTChET01QbHVnaW5BcnJheSk7CiAKLURPTVBsdWdpbkFycmF5OjpET01QbHVnaW5BcnJheShO
YXZpZ2F0b3ImIG5hdmlnYXRvcikKK1JlZjxET01QbHVnaW5BcnJheT4gRE9NUGx1Z2luQXJyYXk6
OmNyZWF0ZShOYXZpZ2F0b3ImIG5hdmlnYXRvciwgVmVjdG9yPFJlZjxET01QbHVnaW4+PiYmIHB1
YmxpY2x5VmlzaWJsZVBsdWdpbnMsIFZlY3RvcjxSZWY8RE9NUGx1Z2luPj4mJiBhZGRpdGlvbmFs
V2ViVmlzaWJpbGVQbHVnaW5zKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERPTVBsdWdp
bkFycmF5KG5hdmlnYXRvciwgV1RGTW92ZShwdWJsaWNseVZpc2libGVQbHVnaW5zKSwgV1RGTW92
ZShhZGRpdGlvbmFsV2ViVmlzaWJpbGVQbHVnaW5zKSkpOworfQorCitET01QbHVnaW5BcnJheTo6
RE9NUGx1Z2luQXJyYXkoTmF2aWdhdG9yJiBuYXZpZ2F0b3IsIFZlY3RvcjxSZWY8RE9NUGx1Z2lu
Pj4mJiBwdWJsaWNseVZpc2libGVQbHVnaW5zLCBWZWN0b3I8UmVmPERPTVBsdWdpbj4+JiYgYWRk
aXRpb25hbFdlYlZpc2liaWxlUGx1Z2lucykKICAgICA6IG1fbmF2aWdhdG9yKG1ha2VXZWFrUHRy
KG5hdmlnYXRvcikpCisgICAgLCBtX3B1YmxpY2x5VmlzaWJsZVBsdWdpbnMoV1RGTW92ZShwdWJs
aWNseVZpc2libGVQbHVnaW5zKSkKKyAgICAsIG1fYWRkaXRpb25hbFdlYlZpc2liaWxlUGx1Z2lu
cyhXVEZNb3ZlKGFkZGl0aW9uYWxXZWJWaXNpYmlsZVBsdWdpbnMpKQogewogfQogCkBAIC00MCw1
NyArNDYsNDYgQEAgRE9NUGx1Z2luQXJyYXk6On5ET01QbHVnaW5BcnJheSgpID0gZGVmYQogCiB1
bnNpZ25lZCBET01QbHVnaW5BcnJheTo6bGVuZ3RoKCkgY29uc3QKIHsKLSAgICBQbHVnaW5EYXRh
KiBkYXRhID0gcGx1Z2luRGF0YSgpOwotICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICByZXR1cm4gZGF0YS0+cHVibGljbHlWaXNpYmxlUGx1Z2lucygpLnNpemUoKTsKKyAg
ICByZXR1cm4gbV9wdWJsaWNseVZpc2libGVQbHVnaW5zLnNpemUoKTsKIH0KIAogUmVmUHRyPERP
TVBsdWdpbj4gRE9NUGx1Z2luQXJyYXk6Oml0ZW0odW5zaWduZWQgaW5kZXgpCiB7Ci0gICAgUGx1
Z2luRGF0YSogZGF0YSA9IHBsdWdpbkRhdGEoKTsKLSAgICBpZiAoIWRhdGEpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgY29uc3QgVmVjdG9yPFBsdWdpbkluZm8+JiBwbHVnaW5zID0g
ZGF0YS0+cHVibGljbHlWaXNpYmxlUGx1Z2lucygpOwotICAgIGlmIChpbmRleCA+PSBwbHVnaW5z
LnNpemUoKSkKKyAgICBpZiAoaW5kZXggPj0gbV9wdWJsaWNseVZpc2libGVQbHVnaW5zLnNpemUo
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIERPTVBsdWdpbjo6Y3JlYXRl
KGRhdGEsIGZyYW1lKCksIHBsdWdpbnNbaW5kZXhdKTsKKyAgICByZXR1cm4gbV9wdWJsaWNseVZp
c2libGVQbHVnaW5zW2luZGV4XS5wdHIoKTsKIH0KIAogUmVmUHRyPERPTVBsdWdpbj4gRE9NUGx1
Z2luQXJyYXk6Om5hbWVkSXRlbShjb25zdCBBdG9tU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiB7Ci0g
ICAgUGx1Z2luRGF0YSogZGF0YSA9IHBsdWdpbkRhdGEoKTsKLSAgICBpZiAoIWRhdGEpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIGZvciAoYXV0byYgcGx1Z2luIDogbV9wdWJsaWNseVZp
c2libGVQbHVnaW5zKSB7CisgICAgICAgIGlmIChwbHVnaW4tPm5hbWUoKSA9PSBwcm9wZXJ0eU5h
bWUpCisgICAgICAgICAgICByZXR1cm4gcGx1Z2luLnB0cigpOworICAgIH0KIAotICAgIGZvciAo
YXV0byYgcGx1Z2luIDogZGF0YS0+d2ViVmlzaWJsZVBsdWdpbnMoKSkgewotICAgICAgICBpZiAo
cGx1Z2luLm5hbWUgPT0gcHJvcGVydHlOYW1lKQotICAgICAgICAgICAgcmV0dXJuIERPTVBsdWdp
bjo6Y3JlYXRlKGRhdGEsIGZyYW1lKCksIHBsdWdpbik7CisgICAgZm9yIChhdXRvJiBwbHVnaW4g
OiBtX2FkZGl0aW9uYWxXZWJWaXNpYmlsZVBsdWdpbnMpIHsKKyAgICAgICAgaWYgKHBsdWdpbi0+
bmFtZSgpID09IHByb3BlcnR5TmFtZSkKKyAgICAgICAgICAgIHJldHVybiBwbHVnaW4ucHRyKCk7
CiAgICAgfQorCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIFZlY3RvcjxBdG9tU3RyaW5nPiBE
T01QbHVnaW5BcnJheTo6c3VwcG9ydGVkUHJvcGVydHlOYW1lcygpCiB7Ci0gICAgUGx1Z2luRGF0
YSogZGF0YSA9IHBsdWdpbkRhdGEoKTsKLSAgICBpZiAoIWRhdGEpCi0gICAgICAgIHJldHVybiB7
IH07Ci0KLSAgICBjb25zdCBhdXRvJiBwbHVnaW5zID0gZGF0YS0+cHVibGljbHlWaXNpYmxlUGx1
Z2lucygpOwotCiAgICAgVmVjdG9yPEF0b21TdHJpbmc+IHJlc3VsdDsKLSAgICByZXN1bHQucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShwbHVnaW5zLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBwbHVn
aW4gOiBwbHVnaW5zKQotICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKHBsdWdpbi5uYW1l
KTsKLQorICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fcHVibGljbHlWaXNpYmxl
UGx1Z2lucy5zaXplKCkpOworICAgIGZvciAoYXV0byYgcGx1Z2luIDogbV9wdWJsaWNseVZpc2li
bGVQbHVnaW5zKQorICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKHBsdWdpbi0+bmFtZSgp
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiB2b2lkIERPTVBsdWdpbkFycmF5OjpyZWZyZXNo
KGJvb2wgcmVsb2FkUGFnZXMpCiB7Ci0gICAgYXV0byogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwor
ICAgIGlmICghbV9uYXZpZ2F0b3IpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIGZyYW1l
ID0gbV9uYXZpZ2F0b3ItPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJu
OwogCkBAIC0xMDAsMTcgKzk1LDQgQEAgdm9pZCBET01QbHVnaW5BcnJheTo6cmVmcmVzaChib29s
IHJlbG9hZAogICAgIFBhZ2U6OnJlZnJlc2hQbHVnaW5zKHJlbG9hZFBhZ2VzKTsKIH0KIAotUGx1
Z2luRGF0YSogRE9NUGx1Z2luQXJyYXk6OnBsdWdpbkRhdGEoKSBjb25zdAotewotICAgIGF1dG8q
IGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwotICAgIGlmICghcGFn
ZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gJnBhZ2UtPnBsdWdpbkRh
dGEoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9ET01QbHVnaW5BcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvRE9NUGx1Z2luQXJyYXkuaAkocmV2aXNpb24gMjYzMDA3KQorKysgU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9ET01QbHVnaW5BcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwyMCArMjAs
MjIgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJET01QbHVnaW4uaCIKLSNpbmNsdWRl
ICJET01XaW5kb3dQcm9wZXJ0eS5oIgogI2luY2x1ZGUgIk5hdmlnYXRvci5oIgogI2luY2x1ZGUg
IlNjcmlwdFdyYXBwYWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvV2Vh
a1B0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFBsdWdpbkRhdGE7CitjbGFz
cyBET01QbHVnaW47CitjbGFzcyBOYXZpZ2F0b3I7CiAKIGNsYXNzIERPTVBsdWdpbkFycmF5IGZp
bmFsIDogcHVibGljIFNjcmlwdFdyYXBwYWJsZSwgcHVibGljIFJlZkNvdW50ZWQ8RE9NUGx1Z2lu
QXJyYXk+IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKERPTVBsdWdpbkFycmF5KTsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPERPTVBsdWdpbkFycmF5PiBjcmVhdGUoTmF2aWdhdG9yJiBu
YXZpZ2F0b3IpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRE9NUGx1Z2luQXJyYXkobmF2aWdhdG9y
KSk7IH0KKyAgICBzdGF0aWMgUmVmPERPTVBsdWdpbkFycmF5PiBjcmVhdGUoTmF2aWdhdG9yJiwg
VmVjdG9yPFJlZjxET01QbHVnaW4+PiYmID0geyB9LCBWZWN0b3I8UmVmPERPTVBsdWdpbj4+JiYg
PSB7IH0pOwogICAgIH5ET01QbHVnaW5BcnJheSgpOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoKCkg
Y29uc3Q7CkBAIC00MiwxNiArNDQsMTYgQEAgcHVibGljOgogICAgIFZlY3RvcjxBdG9tU3RyaW5n
PiBzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCk7CiAKICAgICB2b2lkIHJlZnJlc2goYm9vbCByZWxv
YWRQYWdlcyk7Ci0gICAgCi0gICAgTmF2aWdhdG9yKiBuYXZpZ2F0b3IoKSB7IHJldHVybiBtX25h
dmlnYXRvci5nZXQoKTsgfQogCisgICAgTmF2aWdhdG9yKiBuYXZpZ2F0b3IoKSB7IHJldHVybiBt
X25hdmlnYXRvci5nZXQoKTsgfQorICAgIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBET01QbHVn
aW5BcnJheShOYXZpZ2F0b3ImKTsKKyAgICBleHBsaWNpdCBET01QbHVnaW5BcnJheShOYXZpZ2F0
b3ImLCBWZWN0b3I8UmVmPERPTVBsdWdpbj4+JiYsIFZlY3RvcjxSZWY8RE9NUGx1Z2luPj4mJik7
CisKIAotICAgIFBsdWdpbkRhdGEqIHBsdWdpbkRhdGEoKSBjb25zdDsKLSAgICBGcmFtZSogZnJh
bWUoKSBjb25zdCB7IHJldHVybiBtX25hdmlnYXRvciA/IG1fbmF2aWdhdG9yLT5mcmFtZSgpIDog
bnVsbHB0cjsgfQotICAgIAogICAgIFdlYWtQdHI8TmF2aWdhdG9yPiBtX25hdmlnYXRvcjsKKyAg
ICBWZWN0b3I8UmVmPERPTVBsdWdpbj4+IG1fcHVibGljbHlWaXNpYmxlUGx1Z2luczsKKyAgICBW
ZWN0b3I8UmVmPERPTVBsdWdpbj4+IG1fYWRkaXRpb25hbFdlYlZpc2liaWxlUGx1Z2luczsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
UGx1Z2luRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVn
aW5EYXRhLmNwcAkocmV2aXNpb24gMjYzMDA3KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUg
IkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGx1Z2lu
SW5mb1Byb3ZpZGVyLmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtMzgsNiArMzksMTIgQEAgUGx1Z2luRGF0YTo6UGx1Z2luRGF0YShQYWdl
JiBwYWdlKQogICAgIGluaXRQbHVnaW5zKCk7CiB9CiAKK3ZvaWQgUGx1Z2luRGF0YTo6aW5pdFBs
dWdpbnMoKQoreworICAgIEFTU0VSVChtX3BsdWdpbnMuaXNFbXB0eSgpKTsKKyAgICBtX3BsdWdp
bnMgPSBtX3BhZ2UucGx1Z2luSW5mb1Byb3ZpZGVyKCkucGx1Z2luSW5mbyhtX3BhZ2UsIG1fc3Vw
cG9ydGVkUGx1Z2luSWRlbnRpZmllcnMpOworfQorCiBjb25zdCBWZWN0b3I8UGx1Z2luSW5mbz4m
IFBsdWdpbkRhdGE6OndlYlZpc2libGVQbHVnaW5zKCkgY29uc3QKIHsKICAgICBhdXRvIGRvY3Vt
ZW50VVJMID0gbV9wYWdlLm1haW5GcmFtZSgpLmRvY3VtZW50KCkgPyBtX3BhZ2UubWFpbkZyYW1l
KCkuZG9jdW1lbnQoKS0+dXJsKCkgOiBVUkwgeyB9OwpAQCAtODAsMTIwICs4Nyw3MiBAQCBzdGF0
aWMgYm9vbCBzaG91bGRCZVB1YmxpY2x5VmlzaWJsZShjb25zCiAgICAgICAgIHx8IGlzQnVpbHRJ
blBERlBsdWdJbihwbHVnaW4pOwogfQogCi1WZWN0b3I8UGx1Z2luSW5mbz4gUGx1Z2luRGF0YTo6
cHVibGljbHlWaXNpYmxlUGx1Z2lucygpIGNvbnN0CitzdGQ6OnBhaXI8VmVjdG9yPFBsdWdpbklu
Zm8+LCBWZWN0b3I8UGx1Z2luSW5mbz4+IFBsdWdpbkRhdGE6OnB1YmxpY2x5VmlzaWJsZVBsdWdp
bnNBbmRBZGRpdGlvbmFsV2ViVmlzaWJsZVBsdWdpbnMoKSBjb25zdAogewogICAgIGF1dG8gcGx1
Z2lucyA9IHdlYlZpc2libGVQbHVnaW5zKCk7CiAKICAgICBpZiAobV9wYWdlLnNob3dBbGxQbHVn
aW5zKCkpCi0gICAgICAgIHJldHVybiBwbHVnaW5zOwotICAgIAotICAgIHBsdWdpbnMucmVtb3Zl
QWxsTWF0Y2hpbmcoW10oYXV0byYgcGx1Z2luKSB7Ci0gICAgICAgIHJldHVybiAhc2hvdWxkQmVQ
dWJsaWNseVZpc2libGUocGx1Z2luKTsKLSAgICB9KTsKKyAgICAgICAgcmV0dXJuIHsgcGx1Z2lu
cywgeyB9IH07CiAKLSAgICBzdGQ6OnNvcnQocGx1Z2lucy5iZWdpbigpLCBwbHVnaW5zLmVuZCgp
LCBbXShjb25zdCBQbHVnaW5JbmZvJiBhLCBjb25zdCBQbHVnaW5JbmZvJiBiKSB7Ci0gICAgICAg
IHJldHVybiBjb2RlUG9pbnRDb21wYXJlTGVzc1RoYW4oYS5uYW1lLCBiLm5hbWUpOworICAgIFZl
Y3RvcjxQbHVnaW5JbmZvPiBhZGRpdGlvbmFsV2ViVmlzaWJsZVBsdWdpbnM7CisgICAgcGx1Z2lu
cy5yZW1vdmVBbGxNYXRjaGluZyhbJl0oYXV0byYgcGx1Z2luKSB7CisgICAgICAgIGlmICghc2hv
dWxkQmVQdWJsaWNseVZpc2libGUocGx1Z2luKSkgeworICAgICAgICAgICAgYWRkaXRpb25hbFdl
YlZpc2libGVQbHVnaW5zLmFwcGVuZChwbHVnaW4pOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0pOwotICAgIHJldHVybiBw
bHVnaW5zOwotfQogCi12b2lkIFBsdWdpbkRhdGE6OmdldFdlYlZpc2libGVNaW1lc0FuZFBsdWdp
bkluZGljZXMoVmVjdG9yPE1pbWVDbGFzc0luZm8+JiBtaW1lcywgVmVjdG9yPHNpemVfdD4mIG1p
bWVQbHVnaW5JbmRpY2VzKSBjb25zdAotewotICAgIGdldE1pbWVzQW5kUGx1Z2luSW5kaWNpZXNG
b3JQbHVnaW5zKHdlYlZpc2libGVQbHVnaW5zKCksIG1pbWVzLCBtaW1lUGx1Z2luSW5kaWNlcyk7
CisgICAgcmV0dXJuIHsgcGx1Z2lucywgYWRkaXRpb25hbFdlYlZpc2libGVQbHVnaW5zIH07CiB9
CiAKLXZvaWQgUGx1Z2luRGF0YTo6Z2V0TWltZXNBbmRQbHVnaW5JbmRpY2VzKFZlY3RvcjxNaW1l
Q2xhc3NJbmZvPiYgbWltZXMsIFZlY3RvcjxzaXplX3Q+JiBtaW1lUGx1Z2luSW5kaWNlcykgY29u
c3QKK1ZlY3RvcjxNaW1lQ2xhc3NJbmZvPiBQbHVnaW5EYXRhOjp3ZWJWaXNpYmxlTWltZVR5cGVz
KCkgY29uc3QKIHsKLSAgICBnZXRNaW1lc0FuZFBsdWdpbkluZGljaWVzRm9yUGx1Z2lucyhwbHVn
aW5zKCksIG1pbWVzLCBtaW1lUGx1Z2luSW5kaWNlcyk7CisgICAgVmVjdG9yPE1pbWVDbGFzc0lu
Zm8+IHJlc3VsdDsKKyAgICBmb3IgKGF1dG8mIHBsdWdpbiA6IHdlYlZpc2libGVQbHVnaW5zKCkp
CisgICAgICAgIHJlc3VsdC5hcHBlbmRWZWN0b3IocGx1Z2luLm1pbWVzKTsKKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCi12b2lkIFBsdWdpbkRhdGE6OmdldE1pbWVzQW5kUGx1Z2luSW5kaWNpZXNG
b3JQbHVnaW5zKGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZvPiYgcGx1Z2lucywgVmVjdG9yPE1pbWVD
bGFzc0luZm8+JiBtaW1lcywgVmVjdG9yPHNpemVfdD4mIG1pbWVQbHVnaW5JbmRpY2VzKSBjb25z
dAorc3RhdGljIGJvb2wgc3VwcG9ydHNNaW1lVHlwZUZvclBsdWdpbnMoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgY29uc3QgUGx1Z2luRGF0YTo6QWxsb3dlZFBsdWdpblR5cGVzIGFsbG93ZWRQbHVn
aW5UeXBlcywgY29uc3QgVmVjdG9yPFBsdWdpbkluZm8+JiBwbHVnaW5zKQogewotICAgIEFTU0VS
VF9BUkcobWltZXMsIG1pbWVzLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUX0FSRyhtaW1lUGx1Z2lu
SW5kaWNlcywgbWltZVBsdWdpbkluZGljZXMuaXNFbXB0eSgpKTsKLQotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBwbHVnaW5zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFBsdWdp
bkluZm8mIHBsdWdpbiA9IHBsdWdpbnNbaV07Ci0gICAgICAgIGZvciAoYXV0byYgbWltZSA6IHBs
dWdpbi5taW1lcykgewotICAgICAgICAgICAgbWltZXMuYXBwZW5kKG1pbWUpOwotICAgICAgICAg
ICAgbWltZVBsdWdpbkluZGljZXMuYXBwZW5kKGkpOworICAgIGZvciAoYXV0byYgcGx1Z2luIDog
cGx1Z2lucykgeworICAgICAgICBmb3IgKGF1dG8mIHR5cGUgOiBwbHVnaW4ubWltZXMpIHsKKyAg
ICAgICAgICAgIGlmICh0eXBlLnR5cGUgPT0gbWltZVR5cGUgJiYgKGFsbG93ZWRQbHVnaW5UeXBl
cyA9PSBQbHVnaW5EYXRhOjpBbGxQbHVnaW5zIHx8IHBsdWdpbi5pc0FwcGxpY2F0aW9uUGx1Z2lu
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KKyAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUGx1Z2luRGF0YTo6c3VwcG9ydHNXZWJWaXNpYmxlTWlt
ZVR5cGVGb3JVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgQWxsb3dlZFBsdWdpblR5
cGVzIGFsbG93ZWRQbHVnaW5UeXBlcywgY29uc3QgVVJMJiB1cmwpIGNvbnN0Citib29sIFBsdWdp
bkRhdGE6OnN1cHBvcnRzTWltZVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgQWxs
b3dlZFBsdWdpblR5cGVzIGFsbG93ZWRQbHVnaW5UeXBlcykgY29uc3QKIHsKLSAgICBpZiAoIXBy
b3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChtX2NhY2hlZFZpc2libGVQbHVnaW5zLnBhZ2VVUkws
IHVybCkpCi0gICAgICAgIG1fY2FjaGVkVmlzaWJsZVBsdWdpbnMgPSB7IHVybCwgbV9wYWdlLnBs
dWdpbkluZm9Qcm92aWRlcigpLndlYlZpc2libGVQbHVnaW5JbmZvKG1fcGFnZSwgdXJsKSB9Owot
ICAgIGlmICghbV9jYWNoZWRWaXNpYmxlUGx1Z2lucy5wbHVnaW5MaXN0KQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHN1cHBvcnRzV2ViVmlzaWJsZU1pbWVUeXBlKG1pbWVUeXBl
LCBhbGxvd2VkUGx1Z2luVHlwZXMsICptX2NhY2hlZFZpc2libGVQbHVnaW5zLnBsdWdpbkxpc3Qp
OworICAgIHJldHVybiBzdXBwb3J0c01pbWVUeXBlRm9yUGx1Z2lucyhtaW1lVHlwZSwgYWxsb3dl
ZFBsdWdpblR5cGVzLCBwbHVnaW5zKCkpOwogfQogCiBib29sIFBsdWdpbkRhdGE6OnN1cHBvcnRz
V2ViVmlzaWJsZU1pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IEFsbG93ZWRQ
bHVnaW5UeXBlcyBhbGxvd2VkUGx1Z2luVHlwZXMpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN1cHBv
cnRzV2ViVmlzaWJsZU1pbWVUeXBlKG1pbWVUeXBlLCBhbGxvd2VkUGx1Z2luVHlwZXMsIHdlYlZp
c2libGVQbHVnaW5zKCkpOwotfQotCi1ib29sIFBsdWdpbkRhdGE6OnN1cHBvcnRzV2ViVmlzaWJs
ZU1pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IEFsbG93ZWRQbHVnaW5UeXBl
cyBhbGxvd2VkUGx1Z2luVHlwZXMsIGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZvPiYgcGx1Z2lucykg
Y29uc3QKLXsKLSAgICBWZWN0b3I8TWltZUNsYXNzSW5mbz4gbWltZXM7Ci0gICAgVmVjdG9yPHNp
emVfdD4gbWltZVBsdWdpbkluZGljZXM7Ci0gICAgZ2V0TWltZXNBbmRQbHVnaW5JbmRpY2llc0Zv
clBsdWdpbnMocGx1Z2lucywgbWltZXMsIG1pbWVQbHVnaW5JbmRpY2VzKTsKLQotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtaW1lcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobWlt
ZXNbaV0udHlwZSA9PSBtaW1lVHlwZSAmJiAoYWxsb3dlZFBsdWdpblR5cGVzID09IEFsbFBsdWdp
bnMgfHwgcGx1Z2luc1ttaW1lUGx1Z2luSW5kaWNlc1tpXV0uaXNBcHBsaWNhdGlvblBsdWdpbikp
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiBzdXBwb3J0c01pbWVUeXBlRm9yUGx1Z2lucyhtaW1lVHlwZSwgYWxsb3dlZFBsdWdp
blR5cGVzLCB3ZWJWaXNpYmxlUGx1Z2lucygpKTsKIH0KIAotYm9vbCBQbHVnaW5EYXRhOjpnZXRQ
bHVnaW5JbmZvRm9yV2ViVmlzaWJsZU1pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFBs
dWdpbkluZm8mIHBsdWdpbkluZm9SZWYpIGNvbnN0Citib29sIFBsdWdpbkRhdGE6OnN1cHBvcnRz
V2ViVmlzaWJsZU1pbWVUeXBlRm9yVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IEFs
bG93ZWRQbHVnaW5UeXBlcyBhbGxvd2VkUGx1Z2luVHlwZXMsIGNvbnN0IFVSTCYgdXJsKSBjb25z
dAogewotICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiBtaW1lczsKLSAgICBWZWN0b3I8c2l6ZV90
PiBtaW1lUGx1Z2luSW5kaWNlczsKLSAgICBjb25zdCBWZWN0b3I8UGx1Z2luSW5mbz4mIHBsdWdp
bnMgPSB3ZWJWaXNpYmxlUGx1Z2lucygpOwotICAgIGdldFdlYlZpc2libGVNaW1lc0FuZFBsdWdp
bkluZGljZXMobWltZXMsIG1pbWVQbHVnaW5JbmRpY2VzKTsKLQotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtaW1lcy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBNaW1lQ2xhc3NJ
bmZvJiBpbmZvID0gbWltZXNbaV07Ci0KLSAgICAgICAgaWYgKGluZm8udHlwZSA9PSBtaW1lVHlw
ZSkgewotICAgICAgICAgICAgcGx1Z2luSW5mb1JlZiA9IHBsdWdpbnNbbWltZVBsdWdpbkluZGlj
ZXNbaV1dOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwobV9j
YWNoZWRWaXNpYmxlUGx1Z2lucy5wYWdlVVJMLCB1cmwpKQorICAgICAgICBtX2NhY2hlZFZpc2li
bGVQbHVnaW5zID0geyB1cmwsIG1fcGFnZS5wbHVnaW5JbmZvUHJvdmlkZXIoKS53ZWJWaXNpYmxl
UGx1Z2luSW5mbyhtX3BhZ2UsIHVybCkgfTsKKyAgICBpZiAoIW1fY2FjaGVkVmlzaWJsZVBsdWdp
bnMucGx1Z2luTGlzdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBzdXBwb3J0
c01pbWVUeXBlRm9yUGx1Z2lucyhtaW1lVHlwZSwgYWxsb3dlZFBsdWdpblR5cGVzLCAqbV9jYWNo
ZWRWaXNpYmxlUGx1Z2lucy5wbHVnaW5MaXN0KTsKIH0KIAogU3RyaW5nIFBsdWdpbkRhdGE6OnBs
dWdpbkZpbGVGb3JXZWJWaXNpYmxlTWltZVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29u
c3QKIHsKLSAgICBQbHVnaW5JbmZvIGluZm87Ci0gICAgaWYgKGdldFBsdWdpbkluZm9Gb3JXZWJW
aXNpYmxlTWltZVR5cGUobWltZVR5cGUsIGluZm8pKQotICAgICAgICByZXR1cm4gaW5mby5maWxl
OwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotYm9vbCBQbHVnaW5EYXRhOjpzdXBwb3J0c01p
bWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IEFsbG93ZWRQbHVnaW5UeXBlcyBh
bGxvd2VkUGx1Z2luVHlwZXMpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPE1pbWVDbGFzc0luZm8+IG1p
bWVzOwotICAgIFZlY3RvcjxzaXplX3Q+IG1pbWVQbHVnaW5JbmRpY2VzOwotICAgIGNvbnN0IFZl
Y3RvcjxQbHVnaW5JbmZvPiYgcGx1Z2lucyA9IHRoaXMtPnBsdWdpbnMoKTsKLSAgICBnZXRNaW1l
c0FuZFBsdWdpbkluZGljZXMobWltZXMsIG1pbWVQbHVnaW5JbmRpY2VzKTsKLQotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtaW1lcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobWlt
ZXNbaV0udHlwZSA9PSBtaW1lVHlwZSAmJiAoYWxsb3dlZFBsdWdpblR5cGVzID09IEFsbFBsdWdp
bnMgfHwgcGx1Z2luc1ttaW1lUGx1Z2luSW5kaWNlc1tpXV0uaXNBcHBsaWNhdGlvblBsdWdpbikp
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBmb3IgKGF1dG8mIHBsdWdpbiA6IHdlYlZp
c2libGVQbHVnaW5zKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiB0eXBlIDogcGx1Z2luLm1pbWVz
KSB7CisgICAgICAgICAgICBpZiAodHlwZS50eXBlID09IG1pbWVUeXBlKQorICAgICAgICAgICAg
ICAgIHJldHVybiBwbHVnaW4uZmlsZTsKKyAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLXZvaWQgUGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMoKQotewotICAgIEFTU0VSVCht
X3BsdWdpbnMuaXNFbXB0eSgpKTsKLQotICAgIG1fcGx1Z2lucyA9IG1fcGFnZS5wbHVnaW5JbmZv
UHJvdmlkZXIoKS5wbHVnaW5JbmZvKG1fcGFnZSwgbV9zdXBwb3J0ZWRQbHVnaW5JZGVudGlmaWVy
cyk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhLmgJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw4ICsy
MSw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+Ci0jaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KQEAgLTMyLDcgKzMwLDYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
UGFnZTsKLXN0cnVjdCBQbHVnaW5JbmZvOwogCiBlbnVtIGNsYXNzIFBsdWdpbkxvYWRDbGllbnRQ
b2xpY3kgOiB1aW50OF90IHsKICAgICAvLyBObyBjbGllbnQtc3BlY2lmaWMgcGx1Zy1pbiBsb2Fk
IHBvbGljeSBoYXMgYmVlbiBkZWZpbmVkLiBUaGUgcGx1Zy1pbiBzaG91bGQgYmUgdmlzaWJsZSBp
biBuYXZpZ2F0b3IucGx1Z2lucyBhbmQgV2ViS2l0IHNob3VsZCBzeW5jaHJvbm91c2x5CkBAIC0x
MDIsMjcgKzk5LDIzIEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZvPiYg
cGx1Z2lucygpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luczsgfQogICAgIFdFQkNPUkVfRVhQT1JU
IGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZvPiYgd2ViVmlzaWJsZVBsdWdpbnMoKSBjb25zdDsKLSAg
ICBWZWN0b3I8UGx1Z2luSW5mbz4gcHVibGljbHlWaXNpYmxlUGx1Z2lucygpIGNvbnN0OwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0V2ViVmlzaWJsZU1pbWVzQW5kUGx1Z2luSW5kaWNlcyhW
ZWN0b3I8TWltZUNsYXNzSW5mbz4mLCBWZWN0b3I8c2l6ZV90PiYpIGNvbnN0OworICAgIHN0ZDo6
cGFpcjxWZWN0b3I8UGx1Z2luSW5mbz4sIFZlY3RvcjxQbHVnaW5JbmZvPj4gcHVibGljbHlWaXNp
YmxlUGx1Z2luc0FuZEFkZGl0aW9uYWxXZWJWaXNpYmxlUGx1Z2lucygpIGNvbnN0OworCisgICAg
V0VCQ09SRV9FWFBPUlQgVmVjdG9yPE1pbWVDbGFzc0luZm8+IHdlYlZpc2libGVNaW1lVHlwZXMo
KSBjb25zdDsKIAogICAgIGVudW0gQWxsb3dlZFBsdWdpblR5cGVzIHsKICAgICAgICAgQWxsUGx1
Z2lucywKICAgICAgICAgT25seUFwcGxpY2F0aW9uUGx1Z2lucwogICAgIH07Ci0KLSAgICBXRUJD
T1JFX0VYUE9SVCBib29sIHN1cHBvcnRzV2ViVmlzaWJsZU1pbWVUeXBlKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIGNvbnN0IEFsbG93ZWRQbHVnaW5UeXBlcykgY29uc3Q7Ci0gICAgU3RyaW5nIHBs
dWdpbkZpbGVGb3JXZWJWaXNpYmxlTWltZVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29u
c3Q7Ci0KICAgICBXRUJDT1JFX0VYUE9SVCBib29sIHN1cHBvcnRzTWltZVR5cGUoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgY29uc3QgQWxsb3dlZFBsdWdpblR5cGVzKSBjb25zdDsKKyAgICBXRUJD
T1JFX0VYUE9SVCBib29sIHN1cHBvcnRzV2ViVmlzaWJsZU1pbWVUeXBlKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIGNvbnN0IEFsbG93ZWRQbHVnaW5UeXBlcykgY29uc3Q7CiAgICAgV0VCQ09SRV9F
WFBPUlQgYm9vbCBzdXBwb3J0c1dlYlZpc2libGVNaW1lVHlwZUZvclVSTChjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBjb25zdCBBbGxvd2VkUGx1Z2luVHlwZXMsIGNvbnN0IFVSTCYpIGNvbnN0Owog
CisgICAgU3RyaW5nIHBsdWdpbkZpbGVGb3JXZWJWaXNpYmxlTWltZVR5cGUoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSkgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgUGx1Z2luRGF0YShQ
YWdlJik7CiAgICAgdm9pZCBpbml0UGx1Z2lucygpOwotICAgIGJvb2wgZ2V0UGx1Z2luSW5mb0Zv
cldlYlZpc2libGVNaW1lVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBQbHVnaW5JbmZvJikg
Y29uc3Q7Ci0gICAgdm9pZCBnZXRNaW1lc0FuZFBsdWdpbkluZGljZXMoVmVjdG9yPE1pbWVDbGFz
c0luZm8+JiwgVmVjdG9yPHNpemVfdD4mKSBjb25zdDsKLSAgICB2b2lkIGdldE1pbWVzQW5kUGx1
Z2luSW5kaWNpZXNGb3JQbHVnaW5zKGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZvPiYsIFZlY3RvcjxN
aW1lQ2xhc3NJbmZvPiYsIFZlY3RvcjxzaXplX3Q+JikgY29uc3Q7Ci0gICAgYm9vbCBzdXBwb3J0
c1dlYlZpc2libGVNaW1lVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBBbGxvd2Vk
UGx1Z2luVHlwZXMsIGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZvPiYpIGNvbnN0OwogCiBwcm90ZWN0
ZWQ6CiAgICAgUGFnZSYgbV9wYWdlOwpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzAxMykKKysr
IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAK
KzIwMjAtMDYtMTQgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFtX
UFRdIGh0bWwvd2ViYXBwYXBpcy9zeXN0ZW0tc3RhdGUtYW5kLWNhcGFiaWxpdGllcy90aGUtbmF2
aWdhdG9yLW9iamVjdC9uYXZpZ2F0b3ItcGx1Z2luYXJyYXkuaHRtbCBmYWlscyBkdWUgdG8gbGFj
ayBvZiBjYWNoaW5nIG9mIFBsdWdpbiBvYmplY3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTMxODUKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJp
biBBZGxlci4KKworICAgICAgICAqIFVJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbkluZm9TdG9yZS5o
OgorICAgICAgICBBZGQgbWlzc2luZyAjaW5jbHVkZSB0aGF0IGlzIG5vdyBuZWVkZWQgZHVlIHRv
IHBydW5pbmcgb2YgdW5uZWNlc3NhcnkgI2luY2x1ZGVzCisgICAgICAgIGluIFdlYkNvcmUuCisK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6cGx1Z2luU3VwcG9ydHNFeHRlbnNpb24pOgorICAgICAg
ICBVcGRhdGUgdG8gdXNlIG5ldyB3ZWJWaXNpYmxlTWltZVR5cGVzKCkgcmF0aGVyIHRoYW4gdGhl
IGNsdW5reSBnZXRXZWJWaXNpYmxlTWltZXNBbmRQbHVnaW5JbmRpY2VzKCkuCisKIDIwMjAtMDYt
MTQgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAg
IFtTT1VQXSBEaXNhYmxlIEhTVFMgZm9yIHJlcXVlc3RzIHdoZW4gY29va2llcyB3aWxsIGJlIGJs
b2NrZWQgYnkgSVRQCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
bkluZm9TdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BsdWdp
bnMvUGx1Z2luSW5mb1N0b3JlLmgJKHJldmlzaW9uIDI2MzAwNykKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDYgKzMwLDcgQEAKICNpbmNsdWRlICJQbHVnaW5Nb2R1bGVJbmZvLmgiCiAKICNpbmNsdWRlIDxX
ZWJDb3JlL1BsdWdpbkRhdGEuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCShyZXZp
c2lvbiAyNjMwMDcpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjU3LDExICsxNjU3
LDggQEAgUmVmUHRyPFdpZGdldD4gV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNyZQogc3RhdGljIGJv
b2wgcGx1Z2luU3VwcG9ydHNFeHRlbnNpb24oY29uc3QgUGx1Z2luRGF0YSYgcGx1Z2luRGF0YSwg
Y29uc3QgU3RyaW5nJiBleHRlbnNpb24pCiB7CiAgICAgQVNTRVJUKGV4dGVuc2lvbi5jb252ZXJ0
VG9BU0NJSUxvd2VyY2FzZSgpID09IGV4dGVuc2lvbik7Ci0gICAgVmVjdG9yPE1pbWVDbGFzc0lu
Zm8+IG1pbWVzOwotICAgIFZlY3RvcjxzaXplX3Q+IG1pbWVQbHVnaW5JbmRpY2VzOwotICAgIHBs
dWdpbkRhdGEuZ2V0V2ViVmlzaWJsZU1pbWVzQW5kUGx1Z2luSW5kaWNlcyhtaW1lcywgbWltZVBs
dWdpbkluZGljZXMpOwotICAgIGZvciAoYXV0byYgbWltZUNsYXNzSW5mbyA6IG1pbWVzKSB7Ci0g
ICAgICAgIGlmIChtaW1lQ2xhc3NJbmZvLmV4dGVuc2lvbnMuY29udGFpbnMoZXh0ZW5zaW9uKSkK
KyAgICBmb3IgKGF1dG8mIHR5cGUgOiBwbHVnaW5EYXRhLndlYlZpc2libGVNaW1lVHlwZXMoKSkg
eworICAgICAgICBpZiAodHlwZS5leHRlbnNpb25zLmNvbnRhaW5zKGV4dGVuc2lvbikpCiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwko
cmV2aXNpb24gMjYzMDEzKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjMgQEAKKzIwMjAtMDYtMTQgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUu
Y29tPgorCisgICAgICAgIFtXUFRdIGh0bWwvd2ViYXBwYXBpcy9zeXN0ZW0tc3RhdGUtYW5kLWNh
cGFiaWxpdGllcy90aGUtbmF2aWdhdG9yLW9iamVjdC9uYXZpZ2F0b3ItcGx1Z2luYXJyYXkuaHRt
bCBmYWlscyBkdWUgdG8gbGFjayBvZiBjYWNoaW5nIG9mIFBsdWdpbiBvYmplY3RzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTMxODUKKworICAgICAg
ICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICAqIGh0dHAvdGVzdHMvcGx1Z2lu
cy9wbHVnaW4tamF2YXNjcmlwdC1hY2Nlc3MtYWxsb3ctYWxsLXBsdWdpbnMtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3BsdWdpbnMvcGx1Z2luLWphdmFzY3JpcHQt
YWNjZXNzLWFsbG93LWFsbC1wbHVnaW5zLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVz
dHMvcGx1Z2lucy9wbHVnaW4tamF2YXNjcmlwdC1hY2Nlc3MtZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIGh0dHAvdGVzdHMvcGx1Z2lucy9wbHVnaW4tamF2YXNjcmlwdC1hY2Nlc3MuaHRtbDoKKyAg
ICAgICAgU3BsaXQgb3V0IGludGVybmFscy5zZXRTaG93QWxsUGx1Z2lucyh0cnVlKSBwYXJ0IG9m
IHBsdWdpbi1qYXZhc2NyaXB0LWFjY2Vzcy5odG1sIHRvCisgICAgICAgIGFsbG93IHRoZSB0ZXN0
IHRvIGNvbnRpbnVlIHdvcmtpbmcgbm93IHRoYXQgbmF2aWdhdG9yLnBsdWdpbnMgaXMgaW1tdXRh
YmxlIGFmdGVyIAorICAgICAgICBhY2Nlc3NpbmcgaXQuCisgICAgICAgIAorICAgICAgICAqIHBs
YXRmb3JtL21hYy13azEvVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMt
d2sxL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC93ZWJhcHBhcGlzL3N5c3Rl
bS1zdGF0ZS1hbmQtY2FwYWJpbGl0aWVzL3RoZS1uYXZpZ2F0b3Itb2JqZWN0L25hdmlnYXRvci1w
bHVnaW5hcnJheS1leHBlY3RlZC50eHQ6IFJlbW92ZWQuCisgICAgICAgIFJlbW92ZSBpbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvd2ViYXBwYXBpcy9zeXN0ZW0tc3RhdGUtYW5k
LWNhcGFiaWxpdGllcy90aGUtbmF2aWdhdG9yLW9iamVjdC9uYXZpZ2F0b3ItcGx1Z2luYXJyYXku
aHRtbAorICAgICAgICBmcm9tIFRlc3RFeHBlY3RhdGlvbnMgbm93IHRoYXQgaXQgcGFzc2VzIGFs
bCB0aGUgdGltZS4KKwogMjAyMC0wNi0xNCAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWpp
aUBzb255LmNvbT4KIAogICAgICAgICBbQXBwbGVXaW5dIFVucmV2aWV3ZWQgdGVzdCBnYXJkZW5p
bmcKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvcGx1Z2lucy9wbHVnaW4tamF2YXNjcmlw
dC1hY2Nlc3MtYWxsb3ctYWxsLXBsdWdpbnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvcGx1Z2lucy9wbHVnaW4tamF2YXNjcmlwdC1hY2Nlc3MtYWxs
b3ctYWxsLXBsdWdpbnMtZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvcGx1Z2lucy9wbHVnaW4tamF2YXNjcmlwdC1hY2Nlc3MtYWxsb3ctYWxsLXBs
dWdpbnMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAKK1Rlc3Q6
IENvbmZpcm0gdGhlIHBsdWdpbiBpcyBwcmVzZW50LgorCitOYW1lOiBXZWJLaXQgVGVzdCBQbHVn
SW4KKworRGVzY3JpcHRpb246IFNpbXBsZSBOZXRzY2FwZSBwbHVnLWluIHRoYXQgaGFuZGxlcyB0
ZXN0IGNvbnRlbnQgZm9yIFdlYktpdAorCitGaWxlbmFtZTogVGVzdE5ldHNjYXBlUGx1Z0luLnBs
dWdpbgorCitNaW1lIFR5cGVzOgorCitUeXBlOiBhcHBsaWNhdGlvbi94LXdlYmtpdC10ZXN0LW5l
dHNjYXBlCisKK0Rlc2NyaXB0aW9uOiB0ZXN0IG5ldHNjYXBlIGNvbnRlbnQKKworU3VmZml4ZXM6
IHRlc3RuZXRzY2FwZQorCisKK1BsdWdpbi5pdGVtKCkgd29ya3MuCisKK1BsdWdpbi5uYW1lZEl0
ZW0oKSB3b3Jrcy4KKworVHlwZTogaW1hZ2UvcG5nCisKK0Rlc2NyaXB0aW9uOiBQTkcgaW1hZ2UK
KworU3VmZml4ZXM6IHBuZworCisKK1BsdWdpbi5pdGVtKCkgd29ya3MuCisKK1BsdWdpbi5uYW1l
ZEl0ZW0oKSB3b3Jrcy4KKworUGx1Z2luQXJyYXkuaXRlbSgpIHdvcmtzLgorCitQbHVnaW5BcnJh
eS5uYW1lZEl0ZW0oKSB3b3Jrcy4KKworUEFTUyEgKEZvdW5kIHRoZSBuZXRzY2FwZSB0ZXN0IHBs
dWdpbiBvbiBhIG5vbi1sb2NhbCBmaWxlISkKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMv
cGx1Z2lucy9wbHVnaW4tamF2YXNjcmlwdC1hY2Nlc3MtYWxsb3ctYWxsLXBsdWdpbnMuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3BsdWdpbnMvcGx1Z2luLWphdmFz
Y3JpcHQtYWNjZXNzLWFsbG93LWFsbC1wbHVnaW5zLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9wbHVnaW5zL3BsdWdpbi1qYXZhc2NyaXB0LWFjY2Vzcy1hbGxv
dy1hbGwtcGx1Z2lucy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKzxodG1s
PgorPGhlYWQ+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0
ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorICAgIDx0aXRsZT5JbnN0YWxsZWQgUGx1Zy1pbnM8
L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL3gtamF2
YXNjcmlwdCI+CitmdW5jdGlvbiBjaGVja0ZvclRlc3RQbHVnaW4oKSB7CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBuYXZpZ2F0b3IucGx1Z2lucy5sZW5ndGg7IGkrKykgeworICAgICAgICB2YXIg
cGx1Z2luID0gbmF2aWdhdG9yLnBsdWdpbnNbaV07CisKKyAgICAgICAgLy8gV2UgY2FuIG9ubHkg
Z3VhcmFudGVlIHRoYXQgdGhlIFRlc3QgUGx1Z0luIGlzIGluc3RhbGxlZC4KKyAgICAgICAgaWYg
KHBsdWdpbi5uYW1lICE9ICJXZWJLaXQgVGVzdCBQbHVnSW4iKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgZG9jdW1lbnQud3JpdGVsbigiPHA+TmFtZTogIiArIHBsdWdpbi5uYW1l
ICsgIjxcL3A+Iik7CisgICAgICAgIGRvY3VtZW50LndyaXRlbG4oIjxwPkRlc2NyaXB0aW9uOiAi
ICsgcGx1Z2luLmRlc2NyaXB0aW9uICsgIjxcL3A+Iik7CisgICAgICAgIGRvY3VtZW50LndyaXRl
bG4oIjxwPkZpbGVuYW1lOiAiICsgcGx1Z2luLmZpbGVuYW1lICsgIjxcL3A+Iik7CisKKyAgICAg
ICAgZG9jdW1lbnQud3JpdGVsbigiPHA+TWltZSBUeXBlczo8XC9wPiIpOworICAgICAgICBmb3Ig
KHZhciBtaSA9IDA7IG1pICE9IHBsdWdpbi5sZW5ndGg7ICsrbWkpIHsKKyAgICAgICAgICAgIGRv
Y3VtZW50LndyaXRlbG4oIjxwPlR5cGU6ICIgKyBwbHVnaW5bbWldLnR5cGUgKyAiPFwvcD4iKTsK
KyAgICAgICAgICAgIGRvY3VtZW50LndyaXRlbG4oIjxwPkRlc2NyaXB0aW9uOiAiICsgcGx1Z2lu
W21pXS5kZXNjcmlwdGlvbiArICI8XC9wPiIpOworICAgICAgICAgICAgZG9jdW1lbnQud3JpdGVs
bigiPHA+U3VmZml4ZXM6ICIgKyBwbHVnaW5bbWldLnN1ZmZpeGVzICsgIjxcL3A+Iik7CisgICAg
ICAgICAgICBkb2N1bWVudC53cml0ZWxuKCI8YnI+Iik7CisKKyAgICAgICAgICAgIGlmIChwbHVn
aW4uaXRlbShtaSkudHlwZSA9PSBwbHVnaW5bbWldLnR5cGUpCisgICAgICAgICAgICAgICAgZG9j
dW1lbnQud3JpdGVsbigiPHA+UGx1Z2luLml0ZW0oKSB3b3Jrcy48XC9wPiIpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGRvY3VtZW50LndyaXRlbG4oIjxwPkZBSUwuIFBsdWdp
bi5pdGVtKCkgZG9lcyBub3Qgd29yay48XC9wPiIpOworCisgICAgICAgICAgICBpZiAocGx1Z2lu
Lm5hbWVkSXRlbShwbHVnaW5bbWldLnR5cGUpLnR5cGUgPT0gcGx1Z2luW21pXS50eXBlKQorICAg
ICAgICAgICAgICAgIGRvY3VtZW50LndyaXRlbG4oIjxwPlBsdWdpbi5uYW1lZEl0ZW0oKSB3b3Jr
cy48XC9wPiIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRvY3VtZW50Lndy
aXRlbG4oIjxwPkZBSUwuIFBsdWdpbi5uYW1lZEl0ZW0oKSBkb2VzIG5vdCB3b3JrLjxcL3A+Iik7
CisgICAgICAgIH0KKworICAgICAgICBpZiAobmF2aWdhdG9yLnBsdWdpbnMuaXRlbShpKS5uYW1l
ID09IHBsdWdpbi5uYW1lKQorICAgICAgICAgICAgZG9jdW1lbnQud3JpdGVsbigiPHA+UGx1Z2lu
QXJyYXkuaXRlbSgpIHdvcmtzLjxcL3A+Iik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRv
Y3VtZW50LndyaXRlbG4oIjxwPkZBSUwuIFBsdWdpbkFycmF5Lml0ZW0oKSBkb2VzIG5vdCB3b3Jr
LjxcL3A+Iik7CisKKyAgICAgICAgaWYgKG5hdmlnYXRvci5wbHVnaW5zLm5hbWVkSXRlbShwbHVn
aW4ubmFtZSkubmFtZSA9PSBwbHVnaW4ubmFtZSkKKyAgICAgICAgICAgIGRvY3VtZW50LndyaXRl
bG4oIjxwPlBsdWdpbkFycmF5Lm5hbWVkSXRlbSgpIHdvcmtzLjxcL3A+Iik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGRvY3VtZW50LndyaXRlbG4oIjxwPkZBSUwuIFBsdWdpbkFycmF5Lm5h
bWVkSXRlbSgpIGRvZXMgbm90IHdvcmsuPFwvcD4iKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisgICAKK2lmICh3aW5kb3cudGVzdFJ1bm5l
cikKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKQorCisvLyBBY3RpdmF0ZSBvdXIgZGVidWdn
aW5nIGNvZGUgdG8gc2hvdyBhbGwgcGx1Z2lucyB0byBjb25maXJtIHdlIGRvIGhhdmUgdGhlIHRl
c3QgcGx1Z2luLgorICBkb2N1bWVudC53cml0ZWxuKCI8cD5UZXN0OiBDb25maXJtIHRoZSBwbHVn
aW4gaXMgcHJlc2VudC48XC9wPiIpOworaWYgKHdpbmRvdy5pbnRlcm5hbHMpCisgICAgaW50ZXJu
YWxzLnNldFNob3dBbGxQbHVnaW5zKHRydWUpOworCitpZiAoY2hlY2tGb3JUZXN0UGx1Z2luKCkp
CisgICAgZG9jdW1lbnQud3JpdGVsbigiPHA+UEFTUyEgIChGb3VuZCB0aGUgbmV0c2NhcGUgdGVz
dCBwbHVnaW4gb24gYSBub24tbG9jYWwgZmlsZSEpPFwvcD4iKTsKK2Vsc2UKKyAgICBkb2N1bWVu
dC53cml0ZWxuKCI8cD5GQUlMVVJFISAgKENvdWxkIG5vdCBmaW5kIG5ldHNjYXBlIHRlc3QgcGx1
Z2luIG9uIGEgbm9uLWxvY2FsIGZpbGUhKTxcL3A+Iik7CisKKzwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9wbHVnaW5zL3BsdWdpbi1qYXZh
c2NyaXB0LWFjY2Vzcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9wbHVnaW5zL3BsdWdpbi1qYXZhc2NyaXB0LWFjY2Vzcy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDI2MzAxMykKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvcGx1Z2lucy9wbHVnaW4t
amF2YXNjcmlwdC1hY2Nlc3MtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQxICsx
LDMgQEAKLVRlc3QgMTogQSBub24tbG9jYWwgZmlsZSBzaG91bGQgbm90IGJlIGFibGUgdG8gaXRl
cmF0ZSBvdmVyIHRoZSBwbHVnaW5zLgorVGVzdDogQSBub24tbG9jYWwgZmlsZSBzaG91bGQgbm90
IGJlIGFibGUgdG8gaXRlcmF0ZSBvdmVyIHRoZSBwbHVnaW5zLgogCiBQQVNTISAoQ291bGQgbm90
IGZpbmQgdGhlIG5ldHNjYXBlIHRlc3QgcGx1Z2luIG9uIGEgbm9uLWxvY2FsIGZpbGUhKQotCi1U
ZXN0IDI6IENvbmZpcm0gdGhlIHBsdWdpbiBpcyBwcmVzZW50LgotCi1OYW1lOiBXZWJLaXQgVGVz
dCBQbHVnSW4KLQotRGVzY3JpcHRpb246IFNpbXBsZSBOZXRzY2FwZSBwbHVnLWluIHRoYXQgaGFu
ZGxlcyB0ZXN0IGNvbnRlbnQgZm9yIFdlYktpdAotCi1GaWxlbmFtZTogVGVzdE5ldHNjYXBlUGx1
Z0luLnBsdWdpbgotCi1NaW1lIFR5cGVzOgotCi1UeXBlOiBhcHBsaWNhdGlvbi94LXdlYmtpdC10
ZXN0LW5ldHNjYXBlCi0KLURlc2NyaXB0aW9uOiB0ZXN0IG5ldHNjYXBlIGNvbnRlbnQKLQotU3Vm
Zml4ZXM6IHRlc3RuZXRzY2FwZQotCi0KLVBsdWdpbi5pdGVtKCkgd29ya3MuCi0KLVBsdWdpbi5u
YW1lZEl0ZW0oKSB3b3Jrcy4KLQotVHlwZTogaW1hZ2UvcG5nCi0KLURlc2NyaXB0aW9uOiBQTkcg
aW1hZ2UKLQotU3VmZml4ZXM6IHBuZwotCi0KLVBsdWdpbi5pdGVtKCkgd29ya3MuCi0KLVBsdWdp
bi5uYW1lZEl0ZW0oKSB3b3Jrcy4KLQotUGx1Z2luQXJyYXkuaXRlbSgpIHdvcmtzLgotCi1QbHVn
aW5BcnJheS5uYW1lZEl0ZW0oKSB3b3Jrcy4KLQotUEFTUyEgKEZvdW5kIHRoZSBuZXRzY2FwZSB0
ZXN0IHBsdWdpbiBvbiBhIG5vbi1sb2NhbCBmaWxlISkKSW5kZXg6IExheW91dFRlc3RzL2h0dHAv
dGVzdHMvcGx1Z2lucy9wbHVnaW4tamF2YXNjcmlwdC1hY2Nlc3MuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3BsdWdpbnMvcGx1Z2luLWphdmFzY3JpcHQtYWNjZXNz
Lmh0bWwJKHJldmlzaW9uIDI2MzAxMykKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvcGx1Z2lu
cy9wbHVnaW4tamF2YXNjcmlwdC1hY2Nlc3MuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNTcsMjEg
KzU3LDEyIEBAIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKIG5hdmlnYXRvci5wbHVnaW5zLnJlZnJl
c2goZmFsc2UpOyAvLyBTdXBwb3NlZGx5IGhlbHBzIGlmIG5ldyBwbHVnLWlucyB3ZXJlIGFkZGVk
LgogCiAvLyBBIG5vbi1sb2NhbCBmaWxlIHNob3VsZCBub3QgYmUgYWxsb3dlZCB0byBpdGVyYXRl
IG92ZXIgdGhlIGluc3RhbGxlZCBwbHVnaW5zLgotZG9jdW1lbnQud3JpdGVsbigiPHA+VGVzdCAx
OiBBIG5vbi1sb2NhbCBmaWxlIHNob3VsZCBub3QgYmUgYWJsZSB0byBpdGVyYXRlIG92ZXIgdGhl
IHBsdWdpbnMuPFwvcD4iKTsKK2RvY3VtZW50LndyaXRlbG4oIjxwPlRlc3Q6IEEgbm9uLWxvY2Fs
IGZpbGUgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGl0ZXJhdGUgb3ZlciB0aGUgcGx1Z2lucy48XC9w
PiIpOwogaWYgKGNoZWNrRm9yVGVzdFBsdWdpbigpKQogICAgIGRvY3VtZW50LndyaXRlbG4oIjxw
PkZBSUxVUkUhICAoRm91bmQgdGhlIG5ldHNjYXBlIHRlc3QgcGx1Z2luIG9uIGEgbm9uLWxvY2Fs
IGZpbGUhKTxcL3A+Iik7CiBlbHNlCiAgICAgZG9jdW1lbnQud3JpdGVsbigiPHA+UEFTUyEgIChD
b3VsZCBub3QgZmluZCB0aGUgbmV0c2NhcGUgdGVzdCBwbHVnaW4gb24gYSBub24tbG9jYWwgZmls
ZSEpPFwvcD4iKTsKIAotLy8gQWN0aXZhdGUgb3VyIGRlYnVnZ2luZyBjb2RlIHRvIHNob3cgYWxs
IHBsdWdpbnMgdG8gY29uZmlybSB3ZSBkbyBoYXZlIHRoZSB0ZXN0IHBsdWdpbi4KLWRvY3VtZW50
LndyaXRlbG4oIjxwPlRlc3QgMjogQ29uZmlybSB0aGUgcGx1Z2luIGlzIHByZXNlbnQuPFwvcD4i
KTsKLWlmICh3aW5kb3cuaW50ZXJuYWxzKQotICAgIGludGVybmFscy5zZXRTaG93QWxsUGx1Z2lu
cyh0cnVlKTsKLQotaWYgKGNoZWNrRm9yVGVzdFBsdWdpbigpKQotICAgIGRvY3VtZW50LndyaXRl
bG4oIjxwPlBBU1MhICAoRm91bmQgdGhlIG5ldHNjYXBlIHRlc3QgcGx1Z2luIG9uIGEgbm9uLWxv
Y2FsIGZpbGUhKTxcL3A+Iik7Ci1lbHNlCi0gICAgZG9jdW1lbnQud3JpdGVsbigiPHA+RkFJTFVS
RSEgIChDb3VsZCBub3QgZmluZCBuZXRzY2FwZSB0ZXN0IHBsdWdpbiBvbiBhIG5vbi1sb2NhbCBm
aWxlISk8XC9wPiIpOwogPC9zY3JpcHQ+CiA8L2JvZHk+CiA8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2lt
cG9ydGVkL3czYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzAxNSkKKysrIExheW91dFRlc3RzL2lt
cG9ydGVkL3czYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAy
MC0wNi0xNCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgW1dQVF0g
aHRtbC93ZWJhcHBhcGlzL3N5c3RlbS1zdGF0ZS1hbmQtY2FwYWJpbGl0aWVzL3RoZS1uYXZpZ2F0
b3Itb2JqZWN0L25hdmlnYXRvci1wbHVnaW5hcnJheS5odG1sIGZhaWxzIGR1ZSB0byBsYWNrIG9m
IGNhY2hpbmcgb2YgUGx1Z2luIG9iamVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxMzE4NQorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyLgorCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvd2ViYXBwYXBpcy9zeXN0
ZW0tc3RhdGUtYW5kLWNhcGFiaWxpdGllcy90aGUtbmF2aWdhdG9yLW9iamVjdC9uYXZpZ2F0b3It
cGx1Z2luYXJyYXktZXhwZWN0ZWQudHh0OgorICAgICAgICBVcGRhdGUgcmVzdWx0cyBub3cgdGhh
dCB0aGlzIHRlc3QgcGFzc2VzLgorCiAyMDIwLTA2LTE0ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFw
cGxlLmNvbT4KIAogICAgICAgICBbV1BUXSB3ZWJzb2NrZXRzL0Nsb3NlLXJlYXNvbi11bnBhaXJl
ZC1zdXJyb2dhdGVzLmFueS5odG1sIGZhaWxzIGR1ZSB0byBmYWlsdXJlIHRvIGNvbnZlcnQgdW5w
YWlyZWQgc3Vycm9nYXRlcyB0byByZXBsYWNlbWVudCBjaGFyYWN0ZXIgZm9yIGNsb3NlIHJlYXNv
bgpJbmRleDogTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1s
L3dlYmFwcGFwaXMvc3lzdGVtLXN0YXRlLWFuZC1jYXBhYmlsaXRpZXMvdGhlLW5hdmlnYXRvci1v
YmplY3QvbmF2aWdhdG9yLXBsdWdpbmFycmF5LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvd2ViYXBwYXBp
cy9zeXN0ZW0tc3RhdGUtYW5kLWNhcGFiaWxpdGllcy90aGUtbmF2aWdhdG9yLW9iamVjdC9uYXZp
Z2F0b3ItcGx1Z2luYXJyYXktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyNjMwMTMpCisrKyBMYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvd2ViYXBwYXBpcy9z
eXN0ZW0tc3RhdGUtYW5kLWNhcGFiaWxpdGllcy90aGUtbmF2aWdhdG9yLW9iamVjdC9uYXZpZ2F0
b3ItcGx1Z2luYXJyYXktZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogCiBQQVNTIFRlc3RzIHRoYXQgbmFtZWQgcHJvcGVydGllcyBhcmUgbm90IGVudW1lcmFibGUg
aW4gbmF2aWdhdG9yLnBsdWdpbnMgYW5kIG5hdmlnYXRvci5taW1lVHlwZXMgCi1GQUlMIFRlc3Rz
IHRoYXQgbmF2aWdhdG9yLnBsdWdpbnMgYW5kIG5hdmlnYXRvci5taW1lVHlwZXMgcmV0dXJucyB0
aGUgc2FtZSBvYmplY3Qgd2hlbiBxdWVyaWVkIG11bHRpcGxlIHRpbWVzLiBhc3NlcnRfZXF1YWxz
OiBleHBlY3RlZCBvYmplY3QgIltvYmplY3QgUGx1Z2luXSIgYnV0IGdvdCBvYmplY3QgIltvYmpl
Y3QgUGx1Z2luXSIKK1BBU1MgVGVzdHMgdGhhdCBuYXZpZ2F0b3IucGx1Z2lucyBhbmQgbmF2aWdh
dG9yLm1pbWVUeXBlcyByZXR1cm5zIHRoZSBzYW1lIG9iamVjdCB3aGVuIHF1ZXJpZWQgbXVsdGlw
bGUgdGltZXMuIAogUEFTUyBUZXN0cyB0aGF0IG5hdmlnYXRvci5wbHVnaW5zIGFuZCBuYXZpZ2F0
b3IubWltZVR5cGVzIGRvZXMgbm90IHJldHVybiB0aGUgc2FtZSBvYmplY3Qgb24gZGlmZmVyZW50
IGZyYW1lcy4gCi1GQUlMIFRlc3RzIHRoYXQgbmF2aWdhdG9yLnBsdWdpbnMgYW5kIG5hdmlnYXRv
ci5taW1lVHlwZXMgcmV0dXJucyBwbHVnaW5zIHNvcnRlZCBpbiBhbHBoYWJldGljYWwgb3JkZXIg
YnkgcGx1Z2luIG5hbWUuIGFzc2VydF9sZXNzX3RoYW5fZXF1YWw6IGV4cGVjdGVkIGEgbnVtYmVy
IGxlc3MgdGhhbiBvciBlcXVhbCB0byAwIGJ1dCBnb3QgMQorUEFTUyBUZXN0cyB0aGF0IG5hdmln
YXRvci5wbHVnaW5zIGFuZCBuYXZpZ2F0b3IubWltZVR5cGVzIHJldHVybnMgcGx1Z2lucyBzb3J0
ZWQgaW4gYWxwaGFiZXRpY2FsIG9yZGVyIGJ5IHBsdWdpbiBuYW1lLiAKIApJbmRleDogTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvVGVzdEV4cGVjdGF0aW9ucwkocmV2aXNpb24gMjYz
MDEzKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zCSh3
b3JraW5nIGNvcHkpCkBAIC00ODIsNyArNDgyLDYgQEAgd2Via2l0Lm9yZy9iLzE1NjA4NCBhY2Nl
c3NpYmlsaXR5L21hYy92aQogd2Via2l0Lm9yZy9iLzE3MjIyMiBpbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL25vdGlmaWNhdGlvbnMvZXZlbnQtb25jbG9zZS5odG1sIFsgU2tpcCBdCiAK
IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9icm93c2Vycy9oaXN0b3J5L3Ro
ZS1oaXN0b3J5LWludGVyZmFjZS9oaXN0b3J5X2dvX25vX2FyZ3VtZW50Lmh0bWwgWyBQYXNzIEZh
aWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3dlYmFwcGFwaXMv
c3lzdGVtLXN0YXRlLWFuZC1jYXBhYmlsaXRpZXMvdGhlLW5hdmlnYXRvci1vYmplY3QvbmF2aWdh
dG9yLXBsdWdpbmFycmF5Lmh0bWwgWyBQYXNzIEZhaWx1cmUgXQogaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9odG1sL2Jyb3dzZXJzL2hpc3RvcnkvdGhlLWhpc3RvcnktaW50ZXJmYWNl
L2hpc3RvcnlfZ29fdG9fdXJpLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQogCiAjIE5ld2x5IGltcG9y
dGVkIFdQVCB0ZXN0cyB0aGF0IGFyZSBmbGFreSBvbmx5IG9uIFdLMS4KSW5kZXg6IExheW91dFRl
c3RzL3BsYXRmb3JtL21hYy13azEvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1s
L3dlYmFwcGFwaXMvc3lzdGVtLXN0YXRlLWFuZC1jYXBhYmlsaXRpZXMvdGhlLW5hdmlnYXRvci1v
YmplY3QvbmF2aWdhdG9yLXBsdWdpbmFycmF5LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvaHRtbC93ZWJhcHBhcGlzL3N5c3RlbS1zdGF0ZS1hbmQtY2FwYWJpbGl0aWVzL3RoZS1uYXZp
Z2F0b3Itb2JqZWN0L25hdmlnYXRvci1wbHVnaW5hcnJheS1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDI2MzAxMykKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9odG1sL3dlYmFwcGFwaXMvc3lzdGVtLXN0YXRlLWFuZC1jYXBhYmls
aXRpZXMvdGhlLW5hdmlnYXRvci1vYmplY3QvbmF2aWdhdG9yLXBsdWdpbmFycmF5LWV4cGVjdGVk
LnR4dAkobm9uZXhpc3RlbnQpCkBAIC0xLDYgKzAsMCBAQAotCi1GQUlMIFRlc3RzIHRoYXQgbmFt
ZWQgcHJvcGVydGllcyBhcmUgbm90IGVudW1lcmFibGUgaW4gbmF2aWdhdG9yLnBsdWdpbnMgYW5k
IG5hdmlnYXRvci5taW1lVHlwZXMgYXNzZXJ0X2luX2FycmF5OiB2YWx1ZSAiYXBwbGljYXRpb24v
eC13ZWJraXQtdGVzdC1uZXRzY2FwZSIgbm90IGluIGFycmF5IFsiMCIsICIxIiwgIjIiLCAiMyJd
Ci1GQUlMIFRlc3RzIHRoYXQgbmF2aWdhdG9yLnBsdWdpbnMgYW5kIG5hdmlnYXRvci5taW1lVHlw
ZXMgcmV0dXJucyB0aGUgc2FtZSBvYmplY3Qgd2hlbiBxdWVyaWVkIG11bHRpcGxlIHRpbWVzLiBh
c3NlcnRfZXF1YWxzOiBleHBlY3RlZCBvYmplY3QgIltvYmplY3QgTWltZVR5cGVdIiBidXQgZ290
IG9iamVjdCAiW29iamVjdCBNaW1lVHlwZV0iCi1QQVNTIFRlc3RzIHRoYXQgbmF2aWdhdG9yLnBs
dWdpbnMgYW5kIG5hdmlnYXRvci5taW1lVHlwZXMgZG9lcyBub3QgcmV0dXJuIHRoZSBzYW1lIG9i
amVjdCBvbiBkaWZmZXJlbnQgZnJhbWVzLiAKLUZBSUwgVGVzdHMgdGhhdCBuYXZpZ2F0b3IucGx1
Z2lucyBhbmQgbmF2aWdhdG9yLm1pbWVUeXBlcyByZXR1cm5zIHBsdWdpbnMgc29ydGVkIGluIGFs
cGhhYmV0aWNhbCBvcmRlciBieSBwbHVnaW4gbmFtZS4gYXNzZXJ0X2xlc3NfdGhhbl9lcXVhbDog
ZXhwZWN0ZWQgYSBudW1iZXIgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDAgYnV0IGdvdCAxCi0K
</data>

          </attachment>
      

    </bug>

</bugzilla>