<?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>224733</bug_id>
          
          <creation_ts>2021-04-18 12:24:38 -0700</creation_ts>
          <short_desc>Refactor sorted array mapping machinery in LocaleToScriptMapping.cpp for reuse elsewhere</short_desc>
          <delta_ts>2021-04-23 02:50:08 -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>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>alecflett</cc>
    
    <cc>annulen</cc>
    
    <cc>beidson</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>joepeck</cc>
    
    <cc>jsbell</cc>
    
    <cc>keith_miller</cc>
    
    <cc>lingcherd_ho</cc>
    
    <cc>macpherson</cc>
    
    <cc>mark.lam</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>msaboff</cc>
    
    <cc>philipj</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>tommyw</cc>
    
    <cc>toyoshim</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
    
    <cc>yutak</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1751634</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-18 12:24:38 -0700</bug_when>
    <thetext>Refactor sorted array mapping machinery in LocaleToScriptMapping.cpp for reuse elsewhere</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751635</commentid>
    <comment_count>1</comment_count>
      <attachid>426382</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-18 12:30:27 -0700</bug_when>
    <thetext>Created attachment 426382
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751637</commentid>
    <comment_count>2</comment_count>
      <attachid>426382</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-18 12:45:48 -0700</bug_when>
    <thetext>Comment on attachment 426382
Patch

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

&gt; Source/WebCore/platform/text/LocaleToScriptMapping.cpp:231
&gt; +    static const SortedArrayMap map { scriptNameCodeList };

Can we make it constexpr? This map becomes runtime constructed one so that this cannot be used in multithreaded case without call_once and LazyMeverDestroyed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751640</commentid>
    <comment_count>3</comment_count>
      <attachid>426382</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-18 13:18:54 -0700</bug_when>
    <thetext>Comment on attachment 426382
Patch

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

&gt;&gt; Source/WebCore/platform/text/LocaleToScriptMapping.cpp:231
&gt;&gt; +    static const SortedArrayMap map { scriptNameCodeList };
&gt; 
&gt; Can we make it constexpr? This map becomes runtime constructed one so that this cannot be used in multithreaded case without call_once and LazyMeverDestroyed.

That might be difficult:

1) I don’t think I can use references or pointers in constexpr code, but maybe I can figure it out.

2) We want to run one-time code to check the sorting and uniqueness of keys in the map in debug builds when this is constructed. Not sure I can do that in a constexpr constructor.

Your point about making sure it’s thread-safe is a good one. I am looking for a good solution. Would appreciate your advice if you have ideas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751641</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-18 13:46:22 -0700</bug_when>
    <thetext>Maybe I can make it constexpr with the array as a deduced template argument? If I could, then I could use call_once in the constructor to do the one-time sorted checking. But I don’t think template arguments can be arrays of such complex types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751644</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-18 14:09:21 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #3)
&gt; 2) We want to run one-time code to check the sorting and uniqueness of keys
&gt; in the map in debug builds when this is constructed. Not sure I can do that
&gt; in a constexpr constructor.

C++20 has constexpr std::is_sorted; we could check the sorting at compile time if we had that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751646</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-18 14:09:50 -0700</bug_when>
    <thetext>Hope that wouldn&apos;t make us compile too slowly, but it would be nice!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751649</commentid>
    <comment_count>7</comment_count>
      <attachid>426385</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-18 15:22:54 -0700</bug_when>
    <thetext>Created attachment 426385
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751650</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-18 15:24:40 -0700</bug_when>
    <thetext>New version of the patch solves the thread safety problem by not using globals for SortedArrayMap objects, which are simple adapters. Still probably doesn&apos;t have includes right for non-unified builds. Also used this in one place in WebKit as a test for wider applicability.

Backed off using KeyValuePair. Even though the member names are much nicer, std::pair handles generic programming much better, and it would be considerable work to fix KeyValuePair to remedy those problems.

Yusuke, hoping for more feedback from you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751652</commentid>
    <comment_count>9</comment_count>
      <attachid>426386</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-18 15:31:39 -0700</bug_when>
    <thetext>Created attachment 426386
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751653</commentid>
    <comment_count>10</comment_count>
      <attachid>426387</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-18 16:15:59 -0700</bug_when>
    <thetext>Created attachment 426387
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751654</commentid>
    <comment_count>11</comment_count>
      <attachid>426388</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-18 16:25:47 -0700</bug_when>
    <thetext>Created attachment 426388
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751679</commentid>
    <comment_count>12</comment_count>
      <attachid>426382</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-18 23:08:44 -0700</bug_when>
    <thetext>Comment on attachment 426382
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/text/LocaleToScriptMapping.cpp:231
&gt;&gt;&gt; +    static const SortedArrayMap map { scriptNameCodeList };
&gt;&gt; 
&gt;&gt; Can we make it constexpr? This map becomes runtime constructed one so that this cannot be used in multithreaded case without call_once and LazyMeverDestroyed.
&gt; 
&gt; That might be difficult:
&gt; 
&gt; 1) I don’t think I can use references or pointers in constexpr code, but maybe I can figure it out.
&gt; 
&gt; 2) We want to run one-time code to check the sorting and uniqueness of keys in the map in debug builds when this is constructed. Not sure I can do that in a constexpr constructor.
&gt; 
&gt; Your point about making sure it’s thread-safe is a good one. I am looking for a good solution. Would appreciate your advice if you have ideas.

1) We can use references in constexpr!
2) If we construct it in constexpr, then it is called only at compile-time, and one time per map since we are putting it in cpp file.

I&apos;ve tried making it constexpr by implementing adjacent_find and is_sorted for constexpr (since it becomes constexpr only after C++20 unfortunately. But I think adding an implementation for this debug purpose would be nice since the function is fairly small).
And I&apos;ve ensured that this can be a constexpr :)
I think this is really nice: it becomes compile-error when the conditions are not met :D

There are several notes.

1. After C++17, lambda can be a constexpr! So we can use lambda in constexpr freely :D
2. After C++17, std::begin and std::end are constexpr so we can use it too!


   75 template&lt;typename Iterator, typename Predicate&gt;
   76 constexpr Iterator adjacentFindConstexpr(Iterator begin, Iterator end, Predicate predicate)
   77 {
   78     if (begin == end)
   79         return end;
   80     auto current = begin;
   81     auto previous = current;
   82     ++current;
   83     while (current != end) {
   84         if (predicate(*previous, *current))
   85             return previous;
   86         previous = current;
   87         ++current;
   88     }
   89     return end;
   90 }
   91
   92 template&lt;typename Iterator, typename Predicate&gt;
   93 constexpr bool isSortedConstexpr(Iterator begin, Iterator end, Predicate predicate)
   94 {
   95     return adjacentFindConstexpr(begin, end, [&amp;](auto&amp; a, auto&amp; b) {
   96         return !predicate(a, b);
   97     }) == end;
   98 }
   99
  100 template&lt;typename ArrayType&gt;
  101 constexpr SortedArrayMap&lt;ArrayType&gt;::SortedArrayMap(const ArrayType&amp; array)
  102     : m_array { array }
  103 {
  104     ASSERT_UNDER_CONSTEXPR_CONTEXT(isSortedConstexpr(std::begin(array), std::end(array), [] (auto&amp; a, auto b) {
  105         return a.first &lt; b.first;
  106     }));
  107     ASSERT_UNDER_CONSTEXPR_CONTEXT(adjacentFindConstexpr(std::begin(array), std::end(array), [] (auto&amp; a, auto&amp; b) {
  108         return a.first == b.first;
  109     }) == std::end(array));
  110 }

And using it via,

   39 static constexpr std::pair&lt;unsigned, unsigned&gt; test[] = {
   40     { 0, 0 },
   41     { 1, 1 },
   42 };
   43
   44 static constexpr SortedArrayMap mapping { test };

This completely works! L44 does not specify array type in SortedArrayMap&lt;XXX&gt;&apos;s XXX place since we can leverage C++17 template type deduction!
This avoids writing array-size explicitly, so everything works well without specifying size etc...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751681</commentid>
    <comment_count>13</comment_count>
      <attachid>426382</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-18 23:11:28 -0700</bug_when>
    <thetext>Comment on attachment 426382
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/text/LocaleToScriptMapping.cpp:231
&gt;&gt;&gt;&gt; +    static const SortedArrayMap map { scriptNameCodeList };
&gt;&gt;&gt; 
&gt;&gt;&gt; Can we make it constexpr? This map becomes runtime constructed one so that this cannot be used in multithreaded case without call_once and LazyMeverDestroyed.
&gt;&gt; 
&gt;&gt; That might be difficult:
&gt;&gt; 
&gt;&gt; 1) I don’t think I can use references or pointers in constexpr code, but maybe I can figure it out.
&gt;&gt; 
&gt;&gt; 2) We want to run one-time code to check the sorting and uniqueness of keys in the map in debug builds when this is constructed. Not sure I can do that in a constexpr constructor.
&gt;&gt; 
&gt;&gt; Your point about making sure it’s thread-safe is a good one. I am looking for a good solution. Would appreciate your advice if you have ideas.
&gt; 
&gt; 1) We can use references in constexpr!
&gt; 2) If we construct it in constexpr, then it is called only at compile-time, and one time per map since we are putting it in cpp file.
&gt; 
&gt; I&apos;ve tried making it constexpr by implementing adjacent_find and is_sorted for constexpr (since it becomes constexpr only after C++20 unfortunately. But I think adding an implementation for this debug purpose would be nice since the function is fairly small).
&gt; And I&apos;ve ensured that this can be a constexpr :)
&gt; I think this is really nice: it becomes compile-error when the conditions are not met :D
&gt; 
&gt; There are several notes.
&gt; 
&gt; 1. After C++17, lambda can be a constexpr! So we can use lambda in constexpr freely :D
&gt; 2. After C++17, std::begin and std::end are constexpr so we can use it too!
&gt; 
&gt; 
&gt;    75 template&lt;typename Iterator, typename Predicate&gt;
&gt;    76 constexpr Iterator adjacentFindConstexpr(Iterator begin, Iterator end, Predicate predicate)
&gt;    77 {
&gt;    78     if (begin == end)
&gt;    79         return end;
&gt;    80     auto current = begin;
&gt;    81     auto previous = current;
&gt;    82     ++current;
&gt;    83     while (current != end) {
&gt;    84         if (predicate(*previous, *current))
&gt;    85             return previous;
&gt;    86         previous = current;
&gt;    87         ++current;
&gt;    88     }
&gt;    89     return end;
&gt;    90 }
&gt;    91
&gt;    92 template&lt;typename Iterator, typename Predicate&gt;
&gt;    93 constexpr bool isSortedConstexpr(Iterator begin, Iterator end, Predicate predicate)
&gt;    94 {
&gt;    95     return adjacentFindConstexpr(begin, end, [&amp;](auto&amp; a, auto&amp; b) {
&gt;    96         return !predicate(a, b);
&gt;    97     }) == end;
&gt;    98 }
&gt;    99
&gt;   100 template&lt;typename ArrayType&gt;
&gt;   101 constexpr SortedArrayMap&lt;ArrayType&gt;::SortedArrayMap(const ArrayType&amp; array)
&gt;   102     : m_array { array }
&gt;   103 {
&gt;   104     ASSERT_UNDER_CONSTEXPR_CONTEXT(isSortedConstexpr(std::begin(array), std::end(array), [] (auto&amp; a, auto b) {
&gt;   105         return a.first &lt; b.first;
&gt;   106     }));
&gt;   107     ASSERT_UNDER_CONSTEXPR_CONTEXT(adjacentFindConstexpr(std::begin(array), std::end(array), [] (auto&amp; a, auto&amp; b) {
&gt;   108         return a.first == b.first;
&gt;   109     }) == std::end(array));
&gt;   110 }
&gt; 
&gt; And using it via,
&gt; 
&gt;    39 static constexpr std::pair&lt;unsigned, unsigned&gt; test[] = {
&gt;    40     { 0, 0 },
&gt;    41     { 1, 1 },
&gt;    42 };
&gt;    43
&gt;    44 static constexpr SortedArrayMap mapping { test };
&gt; 
&gt; This completely works! L44 does not specify array type in SortedArrayMap&lt;XXX&gt;&apos;s XXX place since we can leverage C++17 template type deduction!
&gt; This avoids writing array-size explicitly, so everything works well without specifying size etc...

And if we use something like,

   39 static constexpr std::pair&lt;unsigned, unsigned&gt; test[] = {
   40     { 1, 0 },
   41     { 1, 1 },
   42 };
   43
   44 static constexpr SortedArrayMap mapping { test };

We can get awesome compile-error since this doesn&apos;t meet sorted array&apos;s ASSERT_UNDER_CONSTEXPR_CONTEXT.

/Volumes/Data/OpenSource/Source/WTF/wtf/SortedArrayMap.cpp:44:33: error: constexpr variable &apos;mapping&apos; must be initialized by a constant expression
static constexpr SortedArrayMap mapping { test };
                                ^~~~~~~~~~~~~~~~
In file included from /Volumes/Data/OpenSource/Source/WTF/wtf/SortedArrayMap.cpp:28:
/Volumes/Data/OpenSource/Source/WTF/wtf/SortedArrayMap.h:104:5: note: non-constexpr function &apos;WTFReportAssertionFailure&apos; cannot be used in a constant expression
    ASSERT_UNDER_CONSTEXPR_CONTEXT(isSortedConstexpr(std::begin(array), std::end(array), [] (auto&amp; a, auto b) {
    ^
In file included from /Volumes/Data/OpenSource/Source/WTF/wtf/SortedArrayMap.cpp:27:
In file included from /Volumes/Data/OpenSource/Source/WTF/config.h:31:
In file included from /Volumes/Data/OpenSource/WebKitBuild/Debug/usr/local/include/wtf/FastMalloc.h:26:
In file included from /Volumes/Data/OpenSource/WebKitBuild/Debug/usr/local/include/wtf/StdLibExtras.h:32:
/Volumes/Data/OpenSource/WebKitBuild/Debug/usr/local/include/wtf/Assertions.h:354:9: note: expanded from macro &apos;ASSERT_UNDER_CONSTEXPR_CONTEXT&apos;
        WTFReportAssertionFailure(__FILE__, __LINE__, WTF_PRETTY_FUNCTION, #assertion); \
        ^
/Volumes/Data/OpenSource/Source/WTF/wtf/SortedArrayMap.cpp:44:33: note: in call to &apos;SortedArrayMap(test)&apos;
static constexpr SortedArrayMap mapping { test };
                                ^
In file included from /Volumes/Data/OpenSource/Source/WTF/wtf/SortedArrayMap.cpp:27:
In file included from /Volumes/Data/OpenSource/Source/WTF/config.h:31:
In file included from /Volumes/Data/OpenSource/WebKitBuild/Debug/usr/local/include/wtf/FastMalloc.h:26:
In file included from /Volumes/Data/OpenSource/WebKitBuild/Debug/usr/local/include/wtf/StdLibExtras.h:32:
/Volumes/Data/OpenSource/WebKitBuild/Debug/usr/local/include/wtf/Assertions.h:204:25: note: declared here
WTF_EXPORT_PRIVATE void WTFReportAssertionFailure(const char* file, int line, const char* function, const char* assertion);
                        ^
1 error generated.
** BUILD FAILED **</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751815</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-19 09:24:54 -0700</bug_when>
    <thetext>Thanks for the encouragement, and for the constexpr implementations of is_sorted and adjacent_find.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751840</commentid>
    <comment_count>15</comment_count>
      <attachid>426438</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-19 10:02:38 -0700</bug_when>
    <thetext>Created attachment 426438
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751986</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-19 14:46:14 -0700</bug_when>
    <thetext>Yusuke, took all your suggestions and now this seems ready to go! Would you be willing to review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751991</commentid>
    <comment_count>17</comment_count>
      <attachid>426438</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-19 14:56:27 -0700</bug_when>
    <thetext>Comment on attachment 426438
Patch

r=me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1752252</commentid>
    <comment_count>18</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-20 07:48:14 -0700</bug_when>
    <thetext>Committed r276303 (236785@main): &lt;https://commits.webkit.org/236785@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753524</commentid>
    <comment_count>19</comment_count>
    <who name="Ling Ho">lingcherd_ho</who>
    <bug_when>2021-04-23 02:50:08 -0700</bug_when>
    <thetext>rdar://76898173</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426382</attachid>
            <date>2021-04-18 12:30:27 -0700</date>
            <delta_ts>2021-04-18 15:22:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224733-20210418123027.patch</filename>
            <type>text/plain</type>
            <size>17660</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2MjI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDYyMGZkYzY1YmE3Yzg5YWIzYzg0Mzc0
ZDE1NzI3ZjQyOTcyZmY4MDUuLjFmZWI2MjhmMmNiYjRhZTQ2MzFhMWY0MDIzMmNmNjJmNjA0NzFh
MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjEtMDQtMTggIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIHNvcnRlZCBhcnJheSBtYXBwaW5nIG1hY2hp
bmVyeSBpbiBMb2NhbGVUb1NjcmlwdE1hcHBpbmcuY3BwIGZvciByZXVzZSBlbHNld2hlcmUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDczMworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6IEFkZGVkIFNvcnRlZEFycmF5TWFwLmguCisgICAgICAgICog
d3RmL0NNYWtlTGlzdHMudHh0OiBEaXR0by4KKworICAgICAgICAqIHd0Zi9LZXlWYWx1ZVBhaXIu
aDogTWFkZSBldmVyeXRoaW5nIGNvbnN0ZXhwci4gQWRkZWQgZGVkdWN0aW9uIGd1aWRlIHRvIHJl
cGxhY2UKKyAgICAgICAgdGhlIG1ha2VLZXlWYWx1ZVBhaXIgZnVuY3Rpb24gYW5kIHJlbW92ZWQg
dGhhdCBmdW5jdGlvbi4KKworICAgICAgICAqIHd0Zi9Tb3J0ZWRBcnJheU1hcC5oOiBBZGRlZC4g
QnVpbGRzIG9uIHRoZSBpZGlvbSBpbiBMb2NhbFRvU2NyaXB0TWFwcGluZywgYW5kIHRvIGJlCisg
ICAgICAgIGdlbmVyaWMgdXNlcyB0aGUgS2V5VmFsdWVQYWlyIHN0cnVjdHVyZSB0ZW1wbGF0ZSBp
bnN0ZWFkIG9mIGN1c3RvbSBzdHJ1Y3R1cmVzLiBBbHNvIGRvZXMKKyAgICAgICAgdGhlIGlzX3Nv
cnRlZCBhc3NlcnRpb24gb25seSBvbmNlIHJhdGhlciB0aGFuIGV2ZXJ5IHRpbWUsIGFuZCBhc3Nl
cnRzIHRoYXQgbm8gdHdvIGl0ZW1zCisgICAgICAgIGluIHRoZSBhcnJheSBoYXZlIGVxdWFsIGtl
eXMuCisKIDIwMjEtMDQtMTcgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAg
ICAgIE1vdmUgUnVudGltZUVuYWJsZWRGZWF0dXJlcyB0byBTZXR0aW5ncyAoUGFydCAxKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGE0ZWJlNTUyMjg0N2QwY2Q1YmIwMDdjY2IzZjliZDkyMmRjYzY2ZGYuLjNlOTAz
ZGJjZGYwZmI3NmIyMjgxMDU5NzYyMDlmMzg5ODA4YzI3NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyMSBAQAorMjAyMS0wNC0xOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmVmYWN0b3Igc29ydGVkIGFycmF5IG1hcHBpbmcgbWFjaGluZXJ5IGluIExvY2FsZVRv
U2NyaXB0TWFwcGluZy5jcHAgZm9yIHJldXNlIGVsc2V3aGVyZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0NzMzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBodG1sL0RPTUZvcm1EYXRhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRPTUZvcm1EYXRhOjpJdGVyYXRvcjo6bmV4dCk6IFVzZSBLZXlWYWx1
ZVBhaXIgd2l0aCBkZWR1Y3Rpb24gZ3VpZGUgaW5zdGVhZCBvZgorICAgICAgICB0aGUgbWFrZUtl
eVZhbHVlUGFpciBmdW5jdGlvbi4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvTG9jYWxlVG9T
Y3JpcHRNYXBwaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcmlwdE5hbWVUb0NvZGUpOiBS
ZWZhY3RvciB0byB1c2UgU29ydGVkQXJyYXlNYXAuIEFsc28gY2hhbmdlZCB0byB0YWtlIFN0cmlu
Z1ZpZXcuCisgICAgICAgIChXZWJDb3JlOjpsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0
aW9uKTogRGl0dG8uIEN1dCBkb3duIG9uIG1lbW9yeSBhbGxvY2F0aW9uIGJ5IHVzaW5nCisgICAg
ICAgIFN0cmluZ1ZpZXcgaW5zdGVhZCBvZiBTdHJpbmcgd2hpbGUgbG9vcGluZyB0aHJvdWdoIHN1
YnN0cmluZ3MuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGlu
Zy5oOiBDaGFuZ2VkIHNjcmlwdE5hbWVUb0NvZGUgdG8gdGFrZSBTdHJpbmdWaWV3LgorCiAyMDIx
LTA0LTE4ICBDYXRoaWUgQ2hlbiAgPGNhdGhpZWNoZW5AaWdhbGlhLmNvbT4KIAogICAgICAgICBU
aGUgaW1wbGljaXQgYXNwZWN0LXJhdGlvIGZyb20gd2lkdGggYW5kIGhlaWdodCBhdHRyaWJ1dGVz
IHdpdGggZmxvYXQgdmFsdWUgaXMgbm90IGFjY3VyYXRlIGVub3VnaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNjczYTllNmRmOWIyNmFlMjNiZTkyZWU4ZDA3
OTM1NGFmYzExZWE5Ni4uMjgzNjMyZGJjZTJkMzE0YjgwZTExNWU1NTk3OWQ2YmQ4ZjQ3ZmI3YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00ODcsNiArNDg3
LDcgQEAKIAkJODNGMkJBREUxQ0Y5NTI0RTAwM0U5OUMzIC8qIEZ1bmN0aW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTgzRkJBOTMxMTlERjQ1OTcwMEYzMEFEQiAvKiBUeXBlQ2FzdHMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZUNhc3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTg2RjQ2RjVGMUEyODQwRUUwMENDQkYyMiAvKiBSZWZDb3VudGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZkNvdW50ZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJOTMxNTZDOEQyNjJDOTgyMjAwRUFFMjdCIC8qIFNvcnRlZEFycmF5
TWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvcnRlZEFycmF5TWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTkzMjQxNjU3MjQzQkMyRTUwMDMyRkFBRSAvKiBWZWN0b3JDb2NvYS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBWZWN0b3JDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5MzNENjMxOTFGQ0I2QUI5MDAzMkVDRDYgLyogU3RyaW5nSGFzaGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ0hhc2hlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5Mzg0QjczRTIwREVBMjg0MDA1QjczQjIgLyogQ0ZYUENCcmlkZ2VTUEkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ0ZYUENCcmlkZ2VTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTEyNDQsNiArMTI0NSw3IEBACiAJCQkJMEZBNkYzOTIyMENDNzNBMjAwQTAzRENEIC8q
IFNtYWxsUHRyU2V0LmNwcCAqLywKIAkJCQk3OTM2RDZBOTFDOTlGOEFFMDAwRDFBRUQgLyogU21h
bGxQdHJTZXQuaCAqLywKIAkJCQlBMzBENDEyRDFGMERFMTNGMDBCNzE5NTQgLyogU29mdExpbmtp
bmcuaCAqLywKKwkJCQk5MzE1NkM4RDI2MkM5ODIyMDBFQUUyN0IgLyogU29ydGVkQXJyYXlNYXAu
aCAqLywKIAkJCQk3OTAzOEUwNTIyNEIwNUE3MDA0QzA3MzggLyogU3Bhbm5pbmdUcmVlLmggKi8s
CiAJCQkJQThBNDczMEQxNTFBODI1QjAwNDEyM0ZGIC8qIFNwZWN0cnVtLmggKi8sCiAJCQkJQThB
NDczMEUxNTFBODI1QjAwNDEyM0ZGIC8qIFN0YWNrQm91bmRzLmNwcCAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0
cy50eHQKaW5kZXggYTMwNTllOWJiZjZmY2UyMDIxNzFmYzQyNzBiZDE5NDhjOTQyMjlhYS4uZmM2
YTJmMDk0ZDExMTZhY2ViMDM2ZTc3ZDA5MmY1ZTA5YTA5OTQyOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50
eHQKQEAgLTIzNiw2ICsyMzYsNyBAQCBzZXQoV1RGX1BVQkxJQ19IRUFERVJTCiAgICAgU2l4Q2hh
cmFjdGVySGFzaC5oCiAgICAgU21hbGxQdHJTZXQuaAogICAgIFNvZnRMaW5raW5nLmgKKyAgICBT
b3J0ZWRBcnJheU1hcC5oCiAgICAgU3Bhbm5pbmdUcmVlLmgKICAgICBTcGVjdHJ1bS5oCiAgICAg
U3RhY2tCb3VuZHMuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvS2V5VmFsdWVQYWlyLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9LZXlWYWx1ZVBhaXIuaAppbmRleCBiMWMyYmMzNjgzNWRlNmQwYmQ0
MTE3OTM1Yjk1ZDJhMDJjYWIwOGUyLi5jOTYzNWUwN2I0ZTMzYjY1OTEyMmJiMDBiNmNjYWJlZmYx
NjZmZjI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9LZXlWYWx1ZVBhaXIuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9LZXlWYWx1ZVBhaXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwzNCArMjksMjggQEAKIAogbmFtZXNwYWNl
IFdURiB7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleVR5cGVBcmcsIHR5cGVuYW1lIFZhbHVlVHlw
ZUFyZz4KLXN0cnVjdCBLZXlWYWx1ZVBhaXIgewordGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZUFy
Z3VtZW50LCB0eXBlbmFtZSBWYWx1ZVR5cGVBcmd1bWVudD4gc3RydWN0IEtleVZhbHVlUGFpciB7
CiAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwogCi0gICAgdXNpbmcgS2V5VHlw
ZSA9IEtleVR5cGVBcmc7Ci0gICAgdXNpbmcgVmFsdWVUeXBlID0gVmFsdWVUeXBlQXJnOworICAg
IHVzaW5nIEtleVR5cGUgPSBLZXlUeXBlQXJndW1lbnQ7CisgICAgdXNpbmcgVmFsdWVUeXBlID0g
VmFsdWVUeXBlQXJndW1lbnQ7CiAKLSAgICBLZXlWYWx1ZVBhaXIoKQotICAgIHsKLSAgICB9Cisg
ICAgS2V5VmFsdWVQYWlyKCkgPSBkZWZhdWx0OwogCi0gICAgS2V5VmFsdWVQYWlyKEtleVR5cGVB
cmcmJiBrZXksIFZhbHVlVHlwZUFyZyYmIHZhbHVlKQorICAgIGNvbnN0ZXhwciBLZXlWYWx1ZVBh
aXIoS2V5VHlwZSYmIGtleSwgVmFsdWVUeXBlJiYgdmFsdWUpCiAgICAgICAgIDoga2V5KFdURk1v
dmUoa2V5KSkKICAgICAgICAgLCB2YWx1ZShXVEZNb3ZlKHZhbHVlKSkKICAgICB7CiAgICAgfQog
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4KLSAgICBLZXlWYWx1ZVBhaXIo
SyYmIGtleSwgViYmIHZhbHVlKQotICAgICAgICA6IGtleShzdGQ6OmZvcndhcmQ8Sz4oa2V5KSkK
LSAgICAgICAgLCB2YWx1ZShzdGQ6OmZvcndhcmQ8Vj4odmFsdWUpKQorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE90aGVyS2V5VHlwZSwgdHlwZW5hbWUgT3RoZXJWYWx1ZVR5cGU+IGNvbnN0ZXhwciBL
ZXlWYWx1ZVBhaXIoT3RoZXJLZXlUeXBlJiYga2V5LCBPdGhlclZhbHVlVHlwZSYmIHZhbHVlKQor
ICAgICAgICA6IGtleShzdGQ6OmZvcndhcmQ8T3RoZXJLZXlUeXBlPihrZXkpKQorICAgICAgICAs
IHZhbHVlKHN0ZDo6Zm9yd2FyZDxPdGhlclZhbHVlVHlwZT4odmFsdWUpKQogICAgIHsKICAgICB9
CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4KLSAgICBLZXlWYWx1ZVBh
aXIoS2V5VmFsdWVQYWlyPEssIFY+JiYgb3RoZXIpCi0gICAgICAgIDoga2V5KHN0ZDo6Zm9yd2Fy
ZDxLPihvdGhlci5rZXkpKQotICAgICAgICAsIHZhbHVlKHN0ZDo6Zm9yd2FyZDxWPihvdGhlci52
YWx1ZSkpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJLZXlUeXBlLCB0eXBlbmFtZSBPdGhl
clZhbHVlVHlwZT4gY29uc3RleHByIEtleVZhbHVlUGFpcihLZXlWYWx1ZVBhaXI8T3RoZXJLZXlU
eXBlLCBPdGhlclZhbHVlVHlwZT4mJiBvdGhlcikKKyAgICAgICAgOiBLZXlWYWx1ZVBhaXIoc3Rk
Ojpmb3J3YXJkPE90aGVyS2V5VHlwZT4ob3RoZXIua2V5KSwgc3RkOjpmb3J3YXJkPE90aGVyVmFs
dWVUeXBlPihvdGhlci52YWx1ZSkpCiAgICAgewogICAgIH0KIApAQCAtNjQsMTEgKzU4LDcgQEAg
c3RydWN0IEtleVZhbHVlUGFpciB7CiAgICAgVmFsdWVUeXBlIHZhbHVlIHsgfTsKIH07CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+Ci1pbmxpbmUgS2V5VmFsdWVQYWlyPHR5cGVu
YW1lIHN0ZDo6ZGVjYXk8Sz46OnR5cGUsIHR5cGVuYW1lIHN0ZDo6ZGVjYXk8Vj46OnR5cGU+IG1h
a2VLZXlWYWx1ZVBhaXIoSyYmIGtleSwgViYmIHZhbHVlKQotewotICAgIHJldHVybiBLZXlWYWx1
ZVBhaXI8dHlwZW5hbWUgc3RkOjpkZWNheTxLPjo6dHlwZSwgdHlwZW5hbWUgc3RkOjpkZWNheTxW
Pjo6dHlwZT4geyBzdGQ6OmZvcndhcmQ8Sz4oa2V5KSwgc3RkOjpmb3J3YXJkPFY+KHZhbHVlKSB9
OwotfQordGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgVmFsdWVUeXBlPiBLZXlW
YWx1ZVBhaXIoS2V5VHlwZSwgVmFsdWVUeXBlKSAtPiBLZXlWYWx1ZVBhaXI8S2V5VHlwZSwgVmFs
dWVUeXBlPjsKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Tb3J0ZWRBcnJheU1h
cC5oIGIvU291cmNlL1dURi93dGYvU29ydGVkQXJyYXlNYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNzJkNzFm
MzBmNTAyOThhYWNlNDg5ZDQxY2I3NzAwMzQ1NzAyZTA1Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dURi93dGYvU29ydGVkQXJyYXlNYXAuaApAQCAtMCwwICsxLDg1IEBACisvKgorCitDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBB
TlkKK0VYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworKi8K
KworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXVEYgeworCisvLyBTb3J0ZWRBcnJheU1hcCBp
cyBhIG1hcCBsaWtlIEhhc2hNYXAsIGJ1dCBpdCdzIHJlYWQtb25seS4KKy8vIEl0IHVzZXMgbXVj
aCBsZXNzIG1lbW9yeSB0aGFuIEhhc2hNYXAuCisvLyBJdCB1c2VlcyBiaW5hcnkgc2VhcmNoIGlu
c3RlYWQgb2YgaGFzaGluZywgc28gY2FuIGJlIG91dHBlcmZvcm1lZCBieSBIYXNoTWFwIGZvciB2
ZXJ5IGxhcmdlIGFycmF5cy4KKy8vIFRoZSBhcnJheSBlbGVtZW50cyBzaG91bGQgYmUgS2V5VmFs
dWVQYWlyLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBcnJheVR5cGU+IGNsYXNzIFNvcnRlZEFycmF5
TWFwIHsKK3B1YmxpYzoKKyAgICB1c2luZyBFbGVtZW50VHlwZSA9IHR5cGVuYW1lIHN0ZDo6cmVt
b3ZlX2V4dGVudF90PEFycmF5VHlwZT47CisgICAgdXNpbmcgVmFsdWVUeXBlID0gdHlwZW5hbWUg
RWxlbWVudFR5cGU6OlZhbHVlVHlwZTsKKworICAgIFNvcnRlZEFycmF5TWFwKGNvbnN0IEFycmF5
VHlwZSYpOworCisgICAgLy8gRklYTUU6IFRvIG1hdGNoIEhhc2hNYXAgaW50ZXJmYWNlIGJldHRl
ciwgY291bGQgZ2V0IHRoZSBkZWZhdWx0IHZhbHVlIGZyb20gdHJhaXRzLgorICAgIHRlbXBsYXRl
PFZhbHVlVHlwZSBkZWZhdWx0VmFsdWUsIHR5cGVuYW1lIEtleUFyZ3VtZW50PiBWYWx1ZVR5cGUg
Z2V0KGNvbnN0IEtleUFyZ3VtZW50JikgY29uc3Q7CisKKyAgICAvLyBGSVhNRTogU2hvdWxkIGFk
ZCBhIGZ1bmN0aW9uIGxpa2UgdGhpcyB0byBIYXNoTWFwIHNvIHRoZSB0d28ga2luZHMgb2YgbWFw
cyBhcmUgbW9yZSBpbnRlcmNoYW5nYWJsZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmd1
bWVudD4gY29uc3QgVmFsdWVUeXBlKiB0cnlHZXQoY29uc3QgS2V5QXJndW1lbnQmKSBjb25zdDsK
KworcHJpdmF0ZToKKyAgICBjb25zdCBBcnJheVR5cGUmIG1fYXJyYXk7Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBBcnJheVR5cGU+IFNvcnRlZEFycmF5TWFwPEFycmF5VHlwZT46OlNvcnRlZEFy
cmF5TWFwKGNvbnN0IEFycmF5VHlwZSYgYXJyYXkpCisgICAgOiBtX2FycmF5IHsgYXJyYXkgfQor
eworICAgIEFTU0VSVChzdGQ6OmlzX3NvcnRlZChzdGQ6OmJlZ2luKG1fYXJyYXkpLCBzdGQ6OmVu
ZChtX2FycmF5KSwgW10gKGF1dG8mIGEsIGF1dG8gYikgeworICAgICAgICByZXR1cm4gYS5rZXkg
PCBiLmtleTsKKyAgICB9KSk7CisgICAgQVNTRVJUKHN0ZDo6YWRqYWNlbnRfZmluZChzdGQ6OmJl
Z2luKG1fYXJyYXkpLCBzdGQ6OmVuZChtX2FycmF5KSwgW10gKGF1dG8mIGEsIGF1dG8mIGIpIHsK
KyAgICAgICAgcmV0dXJuIGEua2V5ID09IGIua2V5OworICAgIH0pID09IHN0ZDo6ZW5kKG1fYXJy
YXkpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQXJyYXlUeXBlPiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXlBcmd1bWVudD4gYXV0byBTb3J0ZWRBcnJheU1hcDxBcnJheVR5cGU+Ojp0cnlHZXQoY29u
c3QgS2V5QXJndW1lbnQmIGtleSkgY29uc3QgLT4gY29uc3QgVmFsdWVUeXBlKgoreworICAgIGF1
dG8gcGFyc2VkS2V5ID0gRWxlbWVudFR5cGU6OktleVR5cGU6OnBhcnNlKGtleSk7CisgICAgaWYg
KCFwYXJzZWRLZXkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgZW5oYW5jZSB0cnlCaW5hcnlTZWFyY2ggc28gaXQgY2FuIGRlZHVjZSBFbGVtZW50VHlw
ZS4KKyAgICAvLyBGSVhNRTogSWYgdGhlIGFycmF5J3Mgc2l6ZSBpcyBzbWFsbCBlbm91Z2gsIHNo
b3VsZCBkbyBsaW5lYXIgc2VhcmNoIHNpbmNlIGl0IGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gYmlu
YXJ5IHNlYXJjaC4KKyAgICBhdXRvIGVsZW1lbnQgPSB0cnlCaW5hcnlTZWFyY2g8RWxlbWVudFR5
cGU+KG1fYXJyYXksIHN0ZDo6c2l6ZShtX2FycmF5KSwgKnBhcnNlZEtleSwgW10gKGF1dG8qIGVs
ZW1lbnQpIHsKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmtleTsKKyAgICB9KTsKKyAgICByZXR1
cm4gZWxlbWVudCA/ICZlbGVtZW50LT52YWx1ZSA6IG51bGxwdHI7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEFycmF5VHlwZT4gdGVtcGxhdGU8dHlwZW5hbWUgU29ydGVkQXJyYXlNYXA8QXJyYXlU
eXBlPjo6VmFsdWVUeXBlIGRlZmF1bHRWYWx1ZSwgdHlwZW5hbWUgS2V5QXJndW1lbnQ+IGF1dG8g
U29ydGVkQXJyYXlNYXA8QXJyYXlUeXBlPjo6Z2V0KGNvbnN0IEtleUFyZ3VtZW50JiBrZXkpIGNv
bnN0IC0+IFZhbHVlVHlwZQoreworICAgIGF1dG8gcmVzdWx0ID0gdHJ5R2V0KGtleSk7CisgICAg
cmV0dXJuIHJlc3VsdCA/ICpyZXN1bHQgOiBkZWZhdWx0VmFsdWU7Cit9CisKK30KKwordXNpbmcg
V1RGOjpTb3J0ZWRBcnJheU1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRE9N
Rm9ybURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9ET01Gb3JtRGF0YS5jcHAKaW5kZXgg
ODRmNzkzOTIxZjQzZjVhNmM3NjcwMmJlYjIyZTlmY2U0N2JhMTgzNC4uNjkzYTI0NTNlMTZiYjEw
ZWVhMmZhYTJmNmViODM3YTlhMjY0ODBjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9ET01Gb3JtRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9ET01Gb3JtRGF0YS5j
cHAKQEAgLTE2Miw3ICsxNjIsNyBAQCBPcHRpb25hbDxLZXlWYWx1ZVBhaXI8U3RyaW5nLCBET01G
b3JtRGF0YTo6Rm9ybURhdGFFbnRyeVZhbHVlPj4gRE9NRm9ybURhdGE6Okl0ZQogICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgYXV0byYgaXRlbSA9IGl0ZW1zW21faW5kZXgrK107
Ci0gICAgcmV0dXJuIG1ha2VLZXlWYWx1ZVBhaXIoaXRlbS5uYW1lLCBpdGVtLmRhdGEpOworICAg
IHJldHVybiBLZXlWYWx1ZVBhaXIgeyBpdGVtLm5hbWUsIGl0ZW0uZGF0YSB9OwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZy5jcHAKaW5kZXggYWYwNGQ1MzAzMGZlY2JjZmI4NWVh
NDU5NWNjOTFmMmU0ZTBlOWE0Ny4uYmY3YTQ5YmQwMTA0NTIwOGU0NGQxNzY2NmMwNDczOGM0OWM1
MjU5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1Nj
cmlwdE1hcHBpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxl
VG9TY3JpcHRNYXBwaW5nLmNwcApAQCAtMzIsOSArMzIsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkxvY2FsZVRvU2NyaXB0TWFwcGluZy5oIgogCi0jaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL1NvcnRlZEFycmF5TWFwLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTAxLDYgKzk5LDcgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gbGhzLm1fdmFsdWUgPj0gcmhzLm1fdmFsdWU7CiAgICAgfQogCisKICAgICBjb25zdGV4
cHIgU3RvcmFnZUludGVnZXIgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CiAKIHBy
aXZhdGU6CkBAIC0xMTIsMTkgKzExMSwxNCBAQCBwcml2YXRlOgogICAgIFN0b3JhZ2VJbnRlZ2Vy
IG1fdmFsdWUgeyAwIH07CiB9OwogCi11c2luZyBTY3JpcHROYW1lID0gUGFja2VkQVNDSUlMb3dl
ckNvZGVzPHVpbnQzMl90PjsKLXN0cnVjdCBTY3JpcHROYW1lQ29kZSB7Ci0gICAgU2NyaXB0TmFt
ZSBuYW1lOwotICAgIFVTY3JpcHRDb2RlIGNvZGU7Ci19OwotCi1VU2NyaXB0Q29kZSBzY3JpcHRO
YW1lVG9Db2RlKGNvbnN0IFN0cmluZyYgc2NyaXB0TmFtZSkKK1VTY3JpcHRDb2RlIHNjcmlwdE5h
bWVUb0NvZGUoU3RyaW5nVmlldyBzY3JpcHROYW1lKQogewogICAgIC8vIFRoaXMgZ2VuZXJhbGx5
IG1hcHMgYW4gSVNPIDE1OTI0IHNjcmlwdCBjb2RlIHRvIGl0cyBVU2NyaXB0Q29kZSwgYnV0IGNl
cnRhaW4gZmFtaWxpZXMgb2Ygc2NyaXB0IGNvZGVzIGFyZQogICAgIC8vIHRyZWF0ZWQgYXMgYSBz
aW5nbGUgc2NyaXB0IGZvciBhc3NpZ25pbmcgYSBwZXItc2NyaXB0IGZvbnQgaW4gU2V0dGluZ3Mu
IEZvciBleGFtcGxlLCAiaGlyYSIgaXMgbWFwcGVkIHRvCiAgICAgLy8gVVNDUklQVF9LQVRBS0FO
QV9PUl9ISVJBR0FOQSBpbnN0ZWFkIG9mIFVTQ1JJUFRfSElSQUdBTkEsIHNpbmNlIHdlIHdhbnQg
YWxsIEphcGFuZXNlIHNjcmlwdHMgdG8gYmUgcmVuZGVyZWQKICAgICAvLyB1c2luZyB0aGUgc2Ft
ZSBmb250IHNldHRpbmcuCi0gICAgc3RhdGljIGNvbnN0ZXhwciBTY3JpcHROYW1lQ29kZSBzY3Jp
cHROYW1lQ29kZUxpc3RbXSA9IHsKKyAgICB1c2luZyBTY3JpcHROYW1lID0gUGFja2VkQVNDSUlM
b3dlckNvZGVzPHVpbnQzMl90PjsKKyAgICBzdGF0aWMgY29uc3RleHByIEtleVZhbHVlUGFpcjxT
Y3JpcHROYW1lLCBVU2NyaXB0Q29kZT4gc2NyaXB0TmFtZUNvZGVMaXN0W10gPSB7CiAgICAgICAg
IHsgImFyYWIiLCBVU0NSSVBUX0FSQUJJQyB9LAogICAgICAgICB7ICJhcm1uIiwgVVNDUklQVF9B
Uk1FTklBTiB9LAogICAgICAgICB7ICJiYWxpIiwgVVNDUklQVF9CQUxJTkVTRSB9LApAQCAtMjMy
LDM4ICsyMjYsMTYgQEAgVVNjcmlwdENvZGUgc2NyaXB0TmFtZVRvQ29kZShjb25zdCBTdHJpbmcm
IHNjcmlwdE5hbWUpCiAgICAgICAgIHsgInp5eXkiLCBVU0NSSVBUX0NPTU1PTiB9LAogICAgICAg
ICB7ICJ6enp6IiwgVVNDUklQVF9VTktOT1dOIH0sCiAgICAgfTsKLQogICAgIHN0YXRpY19hc3Nl
cnQoU2NyaXB0TmFtZSgiYXJhYiIpLnZhbHVlKCkgPT0gMHg2MTcyNjE2MlUpOwogICAgIHN0YXRp
Y19hc3NlcnQoU2NyaXB0TmFtZSgienp6eiIpLnZhbHVlKCkgPT0gMHg3YTdhN2E3YVUpOwotCi0g
ICAgQVNTRVJUKAotICAgICAgICBzdGQ6OmlzX3NvcnRlZChzdGQ6OmJlZ2luKHNjcmlwdE5hbWVD
b2RlTGlzdCksIHN0ZDo6ZW5kKHNjcmlwdE5hbWVDb2RlTGlzdCksCi0gICAgICAgICAgICBbXShj
b25zdCBTY3JpcHROYW1lQ29kZSYgYSwgY29uc3QgU2NyaXB0TmFtZUNvZGUmIGIpIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gYS5uYW1lIDwgYi5uYW1lOwotICAgICAgICAgICAgfSkpOwotCi0g
ICAgYXV0byBuYW1lID0gU2NyaXB0TmFtZTo6cGFyc2Uoc2NyaXB0TmFtZSk7Ci0gICAgaWYgKCFu
YW1lKQotICAgICAgICByZXR1cm4gVVNDUklQVF9JTlZBTElEX0NPREU7Ci0KLSAgICBhdXRvKiBl
bGVtZW50ID0gdHJ5QmluYXJ5U2VhcmNoPFNjcmlwdE5hbWVDb2RlPihzY3JpcHROYW1lQ29kZUxp
c3QsIHN0ZDo6c2l6ZShzY3JpcHROYW1lQ29kZUxpc3QpLCBuYW1lLnZhbHVlKCksCi0gICAgICAg
IFtdKGNvbnN0IFNjcmlwdE5hbWVDb2RlKiBzY3JpcHROYW1lQ29kZSkgewotICAgICAgICAgICAg
cmV0dXJuIHNjcmlwdE5hbWVDb2RlLT5uYW1lOwotICAgICAgICB9KTsKLSAgICBpZiAoZWxlbWVu
dCkKLSAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmNvZGU7Ci0gICAgcmV0dXJuIFVTQ1JJUFRfSU5W
QUxJRF9DT0RFOworICAgIHN0YXRpYyBjb25zdCBTb3J0ZWRBcnJheU1hcCBtYXAgeyBzY3JpcHRO
YW1lQ29kZUxpc3QgfTsKKyAgICByZXR1cm4gbWFwLmdldDxVU0NSSVBUX0lOVkFMSURfQ09ERT4o
c2NyaXB0TmFtZSk7CiB9CiAKLXVzaW5nIExvY2FsZU5hbWUgPSBQYWNrZWRBU0NJSUxvd2VyQ29k
ZXM8dWludDY0X3Q+Owotc3RydWN0IExvY2FsZVNjcmlwdCB7Ci0gICAgTG9jYWxlTmFtZSBsb2Nh
bGU7Ci0gICAgVVNjcmlwdENvZGUgc2NyaXB0OwotfTsKLQogVVNjcmlwdENvZGUgbG9jYWxlVG9T
Y3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihjb25zdCBTdHJpbmcmIGxvY2FsZSkKIHsKLSAgICBz
dGF0aWMgY29uc3RleHByIExvY2FsZVNjcmlwdCBsb2NhbGVTY3JpcHRMaXN0W10gPSB7CisgICAg
dXNpbmcgTG9jYWxlTmFtZSA9IFBhY2tlZEFTQ0lJTG93ZXJDb2Rlczx1aW50NjRfdD47CisgICAg
c3RhdGljIGNvbnN0ZXhwciBLZXlWYWx1ZVBhaXI8TG9jYWxlTmFtZSwgVVNjcmlwdENvZGU+IGxv
Y2FsZVNjcmlwdExpc3RbXSA9IHsKICAgICAgICAgeyAiYWEiLCBVU0NSSVBUX0xBVElOIH0sCiAg
ICAgICAgIHsgImFiIiwgVVNDUklQVF9DWVJJTExJQyB9LAogICAgICAgICB7ICJhZHkiLCBVU0NS
SVBUX0NZUklMTElDIH0sCkBAIC00NjMsMzUgKzQzNSwxNCBAQCBVU2NyaXB0Q29kZSBsb2NhbGVU
b1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9uKGNvbnN0IFN0cmluZyYgbG9jYWxlKQogICAgICAg
ICB7ICJ6aF90dyIsIFVTQ1JJUFRfVFJBRElUSU9OQUxfSEFOIH0sCiAgICAgICAgIHsgInp1Iiwg
VVNDUklQVF9MQVRJTiB9LAogICAgIH07Ci0KICAgICBzdGF0aWNfYXNzZXJ0KExvY2FsZU5hbWUo
ImFhIikudmFsdWUoKSA9PSAweDYxNjEwMDAwMDAwMDAwMDBVTEwpOwogICAgIHN0YXRpY19hc3Nl
cnQoTG9jYWxlTmFtZSgiemhfdHciKS52YWx1ZSgpID09IDB4N2E2ODVmNzQ3NzAwMDAwMFVMTCk7
Ci0KLSAgICBBU1NFUlQoCi0gICAgICAgIHN0ZDo6aXNfc29ydGVkKHN0ZDo6YmVnaW4obG9jYWxl
U2NyaXB0TGlzdCksIHN0ZDo6ZW5kKGxvY2FsZVNjcmlwdExpc3QpLAotICAgICAgICAgICAgW10o
Y29uc3QgTG9jYWxlU2NyaXB0JiBhLCBjb25zdCBMb2NhbGVTY3JpcHQmIGIpIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gYS5sb2NhbGUgPCBiLmxvY2FsZTsKLSAgICAgICAgICAgIH0pKTsKLQot
ICAgIGF1dG8gdHJ5RmluZFNjcmlwdENvZGUgPSBbJl0gKGNvbnN0IFN0cmluZyYgc3RyaW5nKSAt
PiBPcHRpb25hbDxVU2NyaXB0Q29kZT4gewotICAgICAgICBhdXRvIGxvY2FsZU5hbWUgPSBMb2Nh
bGVOYW1lOjpwYXJzZShzdHJpbmcpOwotICAgICAgICBpZiAoIWxvY2FsZU5hbWUpCi0gICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgICAgIGF1dG8qIGVsZW1lbnQgPSB0cnlC
aW5hcnlTZWFyY2g8TG9jYWxlU2NyaXB0Pihsb2NhbGVTY3JpcHRMaXN0LCBzdGQ6OnNpemUobG9j
YWxlU2NyaXB0TGlzdCksIGxvY2FsZU5hbWUudmFsdWUoKSwKLSAgICAgICAgICAgIFtdKGNvbnN0
IExvY2FsZVNjcmlwdCogbG9jYWxlU2NyaXB0KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxv
Y2FsZVNjcmlwdC0+bG9jYWxlOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIGlmIChlbGVtZW50
KQotICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQtPnNjcmlwdDsKLSAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLSAgICB9OwotCi0gICAgU3RyaW5nIGNhbm9uaWNhbExvY2FsZSA9IGxvY2Fs
ZTsKLSAgICBjYW5vbmljYWxMb2NhbGUucmVwbGFjZSgnLScsICdfJyk7Ci0gICAgd2hpbGUgKCFj
YW5vbmljYWxMb2NhbGUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmIChhdXRvIHNjcmlwdENvZGUg
PSB0cnlGaW5kU2NyaXB0Q29kZShjYW5vbmljYWxMb2NhbGUpKQotICAgICAgICAgICAgcmV0dXJu
IHNjcmlwdENvZGUudmFsdWUoKTsKKyAgICBzdGF0aWMgY29uc3QgU29ydGVkQXJyYXlNYXAgbWFw
IHsgbG9jYWxlU2NyaXB0TGlzdCB9OworICAgIFN0cmluZyBjYW5vbmljYWxMb2NhbGVTdHJpbmcg
PSBsb2NhbGU7CisgICAgY2Fub25pY2FsTG9jYWxlU3RyaW5nLnJlcGxhY2UoJy0nLCAnXycpOwor
ICAgIGZvciAoU3RyaW5nVmlldyBjYW5vbmljYWxMb2NhbGUgPSBjYW5vbmljYWxMb2NhbGVTdHJp
bmc7ICFjYW5vbmljYWxMb2NhbGUuaXNFbXB0eSgpOyApIHsKKyAgICAgICAgaWYgKGF1dG8gc2Ny
aXB0Q29kZSA9IG1hcC50cnlHZXQoY2Fub25pY2FsTG9jYWxlKSkKKyAgICAgICAgICAgIHJldHVy
biAqc2NyaXB0Q29kZTsKICAgICAgICAgYXV0byB1bmRlcnNjb3JlUG9zaXRpb24gPSBjYW5vbmlj
YWxMb2NhbGUucmV2ZXJzZUZpbmQoJ18nKTsKICAgICAgICAgaWYgKHVuZGVyc2NvcmVQb3NpdGlv
biA9PSBub3RGb3VuZCkKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmcuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmgKaW5kZXggNzMwMDZkMjM1
NzZhNWM2ODhjYmI3OWI5MzkyNWQ2YWI3ODNjYjcwZS4uMTRhZjZhNTdmYzMyZGNmZjI5ZjA5YjBl
ZjYxZjJmNDg1YzM2OGY0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZy5oCkBAIC0yOCw4ICsyOCw3IEBACiAgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKLSNpZm5kZWYgTG9jYWxlVG9TY3JpcHRNYXBwaW5nX2gKLSNkZWZpbmUgTG9j
YWxlVG9TY3JpcHRNYXBwaW5nX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8dW5pY29kZS91
c2NyaXB0Lmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTM3LDggKzM2LDYgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogVVNjcmlwdENvZGUgbG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9u
dFNlbGVjdGlvbihjb25zdCBTdHJpbmcmKTsKLVdFQkNPUkVfRVhQT1JUIFVTY3JpcHRDb2RlIHNj
cmlwdE5hbWVUb0NvZGUoY29uc3QgU3RyaW5nJik7CitXRUJDT1JFX0VYUE9SVCBVU2NyaXB0Q29k
ZSBzY3JpcHROYW1lVG9Db2RlKFN0cmluZ1ZpZXcpOwogCiB9Ci0KLSNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426385</attachid>
            <date>2021-04-18 15:22:54 -0700</date>
            <delta_ts>2021-04-18 16:51:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224733-20210418152253.patch</filename>
            <type>text/plain</type>
            <size>23087</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2MjI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
NTdjMjBhZjA5MzFiYWZkMjY3NmEyMDhlYjM5YjJmYjQ5NGU4NjdjLi5hYzNhNWJiMGQ2N2ViNWFm
M2ZlNzEwZmEwNTdlMmI3OTBmZDQyYTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAyMS0wNC0xOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmVmYWN0b3Igc29ydGVkIGFycmF5IG1hcHBpbmcgbWFjaGluZXJ5IGluIExvY2Fs
ZVRvU2NyaXB0TWFwcGluZy5jcHAgZm9yIHJldXNlIGVsc2V3aGVyZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0NzMzCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvcmVtb3RlL1JlbW90
ZUluc3BlY3Rvci5oOiBSZW1vdmVkIGRlY2xhcmF0aW9uIGZvciBhIG1lbWJlciBmdW5jdGlvbiB0
aGF0IGlzCisgICAgICAgIG5ldmVyIGRlZmluZWQgb3IgdXNlZC4KKwogMjAyMS0wNC0xOCAgWXVz
dWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGJ1
aWxkIGZpeApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0No
YW5nZUxvZwppbmRleCA2MjBmZGM2NWJhN2M4OWFiM2M4NDM3NGQxNTcyN2Y0Mjk3MmZmODA1Li41
YTlkOTgxMDhkZjhlM2M5NzZmOTdlMTRmYTIwOWM4ZGE2ZGUwZDg2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIx
IEBACisyMDIxLTA0LTE4ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZWZhY3RvciBzb3J0ZWQgYXJyYXkgbWFwcGluZyBtYWNoaW5lcnkgaW4gTG9jYWxlVG9TY3Jp
cHRNYXBwaW5nLmNwcCBmb3IgcmV1c2UgZWxzZXdoZXJlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjQ3MzMKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OiBBZGRlZCBTb3J0ZWRBcnJheU1hcC5oLgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDog
RGl0dG8uCisKKyAgICAgICAgKiB3dGYvU29ydGVkQXJyYXlNYXAuaDogQWRkZWQuIEJ1aWxkcyBv
biB0aGUgaWRpb20gaW4gTG9jYWxUb1NjcmlwdE1hcHBpbmcsIGFuZCB0byBiZQorICAgICAgICBn
ZW5lcmljIHVzZXMgc3RkOjpwYWlyIGluc3RlYWQgb2YgY3VzdG9tIHN0cnVjdHVyZXMuIEFsc28g
YXNzZXJ0cyB0aGF0IG5vIHR3byBpdGVtcworICAgICAgICBpbiB0aGUgYXJyYXkgaGF2ZSBlcXVh
bCBrZXlzLiBJbmNsdWRlcyB0aGUgQ29tcGFyYWJsZUFTQ0lJTGl0ZXJhbCBzdHJ1Y3R1cmUgdGhh
dCBjYW4KKyAgICAgICAgYmUgdXNlZCB0byBtYWtlIG1hcHMgdGhhdCBhcmUga2V5ZWQgYnkgY2Fz
ZS1zZW5zaXRpdmUgQVNDSUkgc3RyaW5ncy4KKworICAgICAgICAqIHd0Zi9TdGRMaWJFeHRyYXMu
aDoKKyAgICAgICAgKFdURjo6YmluYXJ5U2VhcmNoSW1wbCk6IFVzZSBhdXRvIGluIG9uZSBwbGFj
ZSB0byBtYWtlIHRoaXMgYSBiaXQgbW9yZSBnZW5lcmljLgorCiAyMDIxLTA0LTE3ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXMgdG8gU2V0dGluZ3MgKFBhcnQgMSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhNGViZTU1MjI4NDdkMGNk
NWJiMDA3Y2NiM2Y5YmQ5MjJkY2M2NmRmLi40NzEzYzhhZTAyMGZlNzI1NzJhZWYxMDgzYmJiMzI5
N2I4NDc2M2UxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjEtMDQtMTggIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIHNvcnRlZCBhcnJh
eSBtYXBwaW5nIG1hY2hpbmVyeSBpbiBMb2NhbGVUb1NjcmlwdE1hcHBpbmcuY3BwIGZvciByZXVz
ZSBlbHNld2hlcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyNDczMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogcGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6c2NyaXB0TmFtZVRvQ29kZSk6IFJlZmFjdG9yIHRvIHVzZSBTb3J0ZWRBcnJheU1h
cC4gQWxzbyBjaGFuZ2VkIHRvIHRha2UgU3RyaW5nVmlldy4KKyAgICAgICAgKFdlYkNvcmU6Omxv
Y2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24pOiBEaXR0by4gQ3V0IGRvd24gb24gbWVt
b3J5IGFsbG9jYXRpb24gYnkgdXNpbmcKKyAgICAgICAgU3RyaW5nVmlldyBpbnN0ZWFkIG9mIFN0
cmluZyB3aGlsZSBsb29waW5nIHRocm91Z2ggc3Vic3RyaW5ncy4KKworICAgICAgICAqIHBsYXRm
b3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmg6IENoYW5nZWQgc2NyaXB0TmFtZVRvQ29k
ZSB0byB0YWtlIFN0cmluZ1ZpZXcuCisKIDIwMjEtMDQtMTggIENhdGhpZSBDaGVuICA8Y2F0aGll
Y2hlbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFRoZSBpbXBsaWNpdCBhc3BlY3QtcmF0aW8gZnJv
bSB3aWR0aCBhbmQgaGVpZ2h0IGF0dHJpYnV0ZXMgd2l0aCBmbG9hdCB2YWx1ZSBpcyBub3QgYWNj
dXJhdGUgZW5vdWdoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGYzYWM4MTBiMzU0MmZkM2Q1YzVjOTc5OTg1ZTAzMDgz
MzYwMmU3YjkuLmI1Y2ZkOGVhZGQ1NmY3NGJmMGNmMjE0NjEwMmQ5YzA4YTgwNDYxM2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjEtMDQtMTggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIHNvcnRlZCBhcnJheSBtYXBwaW5nIG1hY2hpbmVy
eSBpbiBMb2NhbGVUb1NjcmlwdE1hcHBpbmcuY3BwIGZvciByZXVzZSBlbHNld2hlcmUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDczMworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTmV0d29ya1Byb2Nl
c3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmg6IFJlbW92ZWQgdW51c2VkIGluY2x1
ZGUgb2YgSGFzaE1hcC5oLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZVN1YnJlc291cmNlc0VudHJ5Lmg6IERpdHRvLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVTZWxlY3Rv
ckV4Y2VwdGlvbk1hcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OmNvbW1hbmROYW1lRm9y
U2VsZWN0b3JOYW1lKTogVXNlIFNvcnRlZEFycmF5TWFwIGluc3RlYWQgb2YgSGFzaE1hcC4KKwog
MjAyMS0wNC0xOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVw
ZGF0ZSBMaWJXZWJSVENDb2RlY3NQcm94eSB0byB1c2UgYSBMb2NrCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUluc3BlY3Rvci5oCmlu
ZGV4IGEwNzFkYjEzZWJiMjVkMjJkZGYwMDEyOWVkYTAxNTE2YWI2YTdmMjIuLjViZDBjOTk2ZTA4
YzdlOTdiNjI0NGY3MTk2MDgwYWNhMTI4MWQzMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUluc3BlY3Rvci5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUluc3BlY3Rvci5oCkBAIC0yMjgs
NyArMjI4LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlY2VpdmVkQXV0b21hdGlvblNlc3Npb25S
ZXF1ZXN0TWVzc2FnZShOU0RpY3Rpb25hcnkgKnVzZXJJbmZvKTsKICNlbmRpZgogI2lmIFVTRShJ
TlNQRUNUT1JfU09DS0VUX1NFUlZFUikKLSAgICBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+
JiBkaXNwYXRjaE1hcCgpIGZpbmFsOwogICAgIHZvaWQgZGlkQ2xvc2UoUmVtb3RlSW5zcGVjdG9y
U29ja2V0RW5kcG9pbnQmLCBDb25uZWN0aW9uSUQpIGZpbmFsOwogCiAgICAgdm9pZCBzZW5kV2Vi
SW5zcGVjdG9yRXZlbnQoY29uc3QgU3RyaW5nJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCA2NzNhOWU2ZGY5YjI2YWUyM2JlOTJlZThkMDc5MzU0YWZjMTFl
YTk2Li4yODM2MzJkYmNlMmQzMTRiODBlMTE1ZTU1OTc5ZDZiZDhmNDdmYjdhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
VEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ4Nyw2ICs0ODcsNyBAQAogCQk4
M0YyQkFERTFDRjk1MjRFMDAzRTk5QzMgLyogRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
ODNGQkE5MzExOURGNDU5NzAwRjMwQURCIC8qIFR5cGVDYXN0cy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBUeXBlQ2FzdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJODZGNDZGNUYxQTI4NDBFRTAwQ0NCRjIyIC8qIFJlZkNvdW50ZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVmQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk5MzE1NkM4RDI2MkM5ODIyMDBFQUUyN0IgLyogU29ydGVkQXJyYXlNYXAuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU29ydGVkQXJyYXlNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTMyNDE2NTcyNDNCQzJFNTAwMzJGQUFFIC8qIFZlY3RvckNvY29hLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFZlY3RvckNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzM0Q2MzE5
MUZDQjZBQjkwMDMyRUNENiAvKiBTdHJpbmdIYXNoZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3RyaW5nSGFzaGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTkzODRCNzNFMjBERUEyODQwMDVCNzNCMiAvKiBDRlhQQ0JyaWRnZVNQSS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDRlhQQ0JyaWRnZVNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI0
NCw2ICsxMjQ1LDcgQEAKIAkJCQkwRkE2RjM5MjIwQ0M3M0EyMDBBMDNEQ0QgLyogU21hbGxQdHJT
ZXQuY3BwICovLAogCQkJCTc5MzZENkE5MUM5OUY4QUUwMDBEMUFFRCAvKiBTbWFsbFB0clNldC5o
ICovLAogCQkJCUEzMEQ0MTJEMUYwREUxM0YwMEI3MTk1NCAvKiBTb2Z0TGlua2luZy5oICovLAor
CQkJCTkzMTU2QzhEMjYyQzk4MjIwMEVBRTI3QiAvKiBTb3J0ZWRBcnJheU1hcC5oICovLAogCQkJ
CTc5MDM4RTA1MjI0QjA1QTcwMDRDMDczOCAvKiBTcGFubmluZ1RyZWUuaCAqLywKIAkJCQlBOEE0
NzMwRDE1MUE4MjVCMDA0MTIzRkYgLyogU3BlY3RydW0uaCAqLywKIAkJCQlBOEE0NzMwRTE1MUE4
MjVCMDA0MTIzRkYgLyogU3RhY2tCb3VuZHMuY3BwICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAppbmRl
eCBhMzA1OWU5YmJmNmZjZTIwMjE3MWZjNDI3MGJkMTk0OGM5NDIyOWFhLi5mYzZhMmYwOTRkMTEx
NmFjZWIwMzZlNzdkMDkyZjVlMDlhMDk5NDI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9D
TWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dApAQCAtMjM2
LDYgKzIzNiw3IEBAIHNldChXVEZfUFVCTElDX0hFQURFUlMKICAgICBTaXhDaGFyYWN0ZXJIYXNo
LmgKICAgICBTbWFsbFB0clNldC5oCiAgICAgU29mdExpbmtpbmcuaAorICAgIFNvcnRlZEFycmF5
TWFwLmgKICAgICBTcGFubmluZ1RyZWUuaAogICAgIFNwZWN0cnVtLmgKICAgICBTdGFja0JvdW5k
cy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Tb3J0ZWRBcnJheU1hcC5oIGIvU291cmNl
L1dURi93dGYvU29ydGVkQXJyYXlNYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44Yzc2NzRhZjI4NDNiZmM2MTIw
MjZjNjY0MWY5YzJiMzY4Yzc3ZTA5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYv
U29ydGVkQXJyYXlNYXAuaApAQCAtMCwwICsxLDEzNCBAQAorLyoKKworQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKK2FyZSBtZXQ6CisxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCitFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKK0RJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KK0FO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyovCisKKyNwcmFnbWEg
b25jZQorCituYW1lc3BhY2UgV1RGIHsKKworLy8gU29ydGVkQXJyYXlNYXAgaXMgYSBtYXAgbGlr
ZSBIYXNoTWFwLCBidXQgaXQncyByZWFkLW9ubHkuCisvLyBJdCB1c2VzIG11Y2ggbGVzcyBtZW1v
cnkgdGhhbiBIYXNoTWFwLgorLy8gSXQgdXNlZXMgYmluYXJ5IHNlYXJjaCBpbnN0ZWFkIG9mIGhh
c2hpbmcsIHNvIGNhbiBiZSBvdXRwZXJmb3JtZWQgYnkgSGFzaE1hcCBmb3IgdmVyeSBsYXJnZSBh
cnJheXMuCisvLyBUaGUgYXJyYXkgZWxlbWVudHMgc2hvdWxkIGJlIHN0ZDo6cGFpci4KKwordGVt
cGxhdGU8dHlwZW5hbWUgQXJyYXlUeXBlPiBjbGFzcyBTb3J0ZWRBcnJheU1hcCB7CitwdWJsaWM6
CisgICAgdXNpbmcgRWxlbWVudFR5cGUgPSB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9leHRlbnRfdDxB
cnJheVR5cGU+OworICAgIHVzaW5nIFZhbHVlVHlwZSA9IHR5cGVuYW1lIEVsZW1lbnRUeXBlOjpz
ZWNvbmRfdHlwZTsKKworICAgIFNvcnRlZEFycmF5TWFwKGNvbnN0IEFycmF5VHlwZSYpOworCisg
ICAgLy8gRklYTUU6IFRvIG1hdGNoIEhhc2hNYXAgaW50ZXJmYWNlIGJldHRlciwgd291bGQgYmUg
bmljZSB0byBnZXQgdGhlIGRlZmF1bHQgdmFsdWUgZnJvbSB0cmFpdHMuCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgS2V5QXJndW1lbnQ+IFZhbHVlVHlwZSBnZXQoY29uc3QgS2V5QXJndW1lbnQmLCBj
b25zdCBWYWx1ZVR5cGUmIGRlZmF1bHRWYWx1ZSA9IHsgfSkgY29uc3Q7CisKKyAgICAvLyBGSVhN
RTogU2hvdWxkIGFkZCBhIGZ1bmN0aW9uIGxpa2UgdGhpcyB0byBIYXNoTWFwIHNvIHRoZSB0d28g
a2luZHMgb2YgbWFwcyBhcmUgbW9yZSBpbnRlcmNoYW5nYWJsZS4KKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXlBcmd1bWVudD4gY29uc3QgVmFsdWVUeXBlKiB0cnlHZXQoY29uc3QgS2V5QXJndW1l
bnQmKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBjb25zdCBBcnJheVR5cGUmIG1fYXJyYXk7Cit9
OworCitzdHJ1Y3QgQ29tcGFyYWJsZVN0cmluZ1ZpZXcgeworICAgIFN0cmluZ1ZpZXcgc3RyaW5n
OworfTsKKworc3RydWN0IENvbXBhcmFibGVBU0NJSUxpdGVyYWwgeworICAgIGNvbnN0IGNoYXIq
IGxpdGVyYWw7CisgICAgdGVtcGxhdGU8c3RkOjpzaXplX3Qgc2l6ZT4gY29uc3RleHByIENvbXBh
cmFibGVBU0NJSUxpdGVyYWwoY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW3NpemVdKSA6IGxpdGVy
YWwgeyBjaGFyYWN0ZXJzIH0geyB9CisgICAgc3RhdGljIE9wdGlvbmFsPENvbXBhcmFibGVTdHJp
bmdWaWV3PiBwYXJzZShTdHJpbmdWaWV3IHN0cmluZykgeyByZXR1cm4geyB7IHN0cmluZyB9IH07
IH0KK307CisKK2Jvb2wgb3BlcmF0b3I9PShDb21wYXJhYmxlQVNDSUlMaXRlcmFsLCBDb21wYXJh
YmxlQVNDSUlMaXRlcmFsKTsKK2Jvb2wgb3BlcmF0b3I8KENvbXBhcmFibGVBU0NJSUxpdGVyYWws
IENvbXBhcmFibGVBU0NJSUxpdGVyYWwpOworYm9vbCBvcGVyYXRvcj09KENvbXBhcmFibGVTdHJp
bmdWaWV3LCBDb21wYXJhYmxlQVNDSUlMaXRlcmFsKTsKK2Jvb2wgb3BlcmF0b3I8KENvbXBhcmFi
bGVTdHJpbmdWaWV3LCBDb21wYXJhYmxlQVNDSUlMaXRlcmFsKTsKK2Jvb2wgb3BlcmF0b3IhPShD
b21wYXJhYmxlU3RyaW5nVmlldywgQ29tcGFyYWJsZUFTQ0lJTGl0ZXJhbCk7Citib29sIG9wZXJh
dG9yPT0oQ29tcGFyYWJsZUFTQ0lJTGl0ZXJhbCwgQ29tcGFyYWJsZVN0cmluZ1ZpZXcpOworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBBcnJheVR5cGU+IFNvcnRlZEFycmF5TWFwPEFycmF5VHlwZT46OlNv
cnRlZEFycmF5TWFwKGNvbnN0IEFycmF5VHlwZSYgYXJyYXkpCisgICAgOiBtX2FycmF5IHsgYXJy
YXkgfQoreworICAgIC8vIEZJWE1FOiBTaG91bGQgZG8gdGhlc2UgYXNzZXJ0aW9ucyBvbmx5IG9u
Y2U7IHdvdWxkIHJlcXVpcmUgc29tZSBraW5kIG9mIG5vbi1jb25zdGV4cHIgZ2xvYmFsIHN0YXRl
IHRvIHRyYWNrIHdoaWNoIGFycmF5cyB3ZXJlIGFscmVhZHkgY2hlY2tlZC4KKyAgICBBU1NFUlQo
c3RkOjppc19zb3J0ZWQoc3RkOjpiZWdpbihtX2FycmF5KSwgc3RkOjplbmQobV9hcnJheSksIFtd
IChhdXRvJiBhLCBhdXRvIGIpIHsKKyAgICAgICAgcmV0dXJuIGEuZmlyc3QgPCBiLmZpcnN0Owor
ICAgIH0pKTsKKyAgICBBU1NFUlQoc3RkOjphZGphY2VudF9maW5kKHN0ZDo6YmVnaW4obV9hcnJh
eSksIHN0ZDo6ZW5kKG1fYXJyYXkpLCBbXSAoYXV0byYgYSwgYXV0byYgYikgeworICAgICAgICBy
ZXR1cm4gYS5maXJzdCA9PSBiLmZpcnN0OworICAgIH0pID09IHN0ZDo6ZW5kKG1fYXJyYXkpKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgQXJyYXlUeXBlPiB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlB
cmd1bWVudD4gaW5saW5lIGF1dG8gU29ydGVkQXJyYXlNYXA8QXJyYXlUeXBlPjo6dHJ5R2V0KGNv
bnN0IEtleUFyZ3VtZW50JiBrZXkpIGNvbnN0IC0+IGNvbnN0IFZhbHVlVHlwZSoKK3sKKyAgICBh
dXRvIHBhcnNlZEtleSA9IEVsZW1lbnRUeXBlOjpmaXJzdF90eXBlOjpwYXJzZShrZXkpOworICAg
IGlmICghcGFyc2VkS2V5KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIGVuaGFuY2UgdHJ5QmluYXJ5U2VhcmNoIHNvIGl0IGNhbiBkZWR1Y2UgRWxlbWVu
dFR5cGUuCisgICAgLy8gRklYTUU6IElmIHRoZSBhcnJheSdzIHNpemUgaXMgc21hbGwgZW5vdWdo
LCBzaG91bGQgZG8gbGluZWFyIHNlYXJjaCBzaW5jZSBpdCBpcyBtb3JlIGVmZmljaWVudCB0aGFu
IGJpbmFyeSBzZWFyY2guCisgICAgYXV0byBlbGVtZW50ID0gdHJ5QmluYXJ5U2VhcmNoPEVsZW1l
bnRUeXBlPihtX2FycmF5LCBzdGQ6OnNpemUobV9hcnJheSksICpwYXJzZWRLZXksIFtdIChhdXRv
KiBlbGVtZW50KSB7CisgICAgICAgIHJldHVybiBlbGVtZW50LT5maXJzdDsKKyAgICB9KTsKKyAg
ICByZXR1cm4gZWxlbWVudCA/ICZlbGVtZW50LT5zZWNvbmQgOiBudWxscHRyOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBBcnJheVR5cGU+IHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZ3VtZW50PiBp
bmxpbmUgYXV0byBTb3J0ZWRBcnJheU1hcDxBcnJheVR5cGU+OjpnZXQoY29uc3QgS2V5QXJndW1l
bnQmIGtleSwgY29uc3QgVmFsdWVUeXBlJiBkZWZhdWx0VmFsdWUpIGNvbnN0IC0+IFZhbHVlVHlw
ZQoreworICAgIGF1dG8gcmVzdWx0ID0gdHJ5R2V0KGtleSk7CisgICAgcmV0dXJuIHJlc3VsdCA/
ICpyZXN1bHQgOiBkZWZhdWx0VmFsdWU7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oQ29t
cGFyYWJsZUFTQ0lJTGl0ZXJhbCBhLCBDb21wYXJhYmxlQVNDSUlMaXRlcmFsIGIpCit7CisgICAg
cmV0dXJuICFzdGQ6OnN0cmNtcChhLmxpdGVyYWwsIGIubGl0ZXJhbCk7Cit9CisKK2lubGluZSBi
b29sIG9wZXJhdG9yPChDb21wYXJhYmxlQVNDSUlMaXRlcmFsIGEsIENvbXBhcmFibGVBU0NJSUxp
dGVyYWwgYikKK3sKKyAgICByZXR1cm4gc3RkOjpzdHJjbXAoYS5saXRlcmFsLCBiLmxpdGVyYWwp
IDwgMDsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShDb21wYXJhYmxlU3RyaW5nVmlldyBh
LCBDb21wYXJhYmxlQVNDSUlMaXRlcmFsIGIpCit7CisgICAgcmV0dXJuIGEuc3RyaW5nID09IGIu
bGl0ZXJhbDsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I8KENvbXBhcmFibGVTdHJpbmdWaWV3
IGEsIENvbXBhcmFibGVBU0NJSUxpdGVyYWwgYikKK3sKKyAgICByZXR1cm4gY29kZVBvaW50Q29t
cGFyZShhLnN0cmluZywgYi5saXRlcmFsKSA8IDA7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9y
IT0oQ29tcGFyYWJsZVN0cmluZ1ZpZXcgYSwgQ29tcGFyYWJsZUFTQ0lJTGl0ZXJhbCBiKQorewor
ICAgIHJldHVybiAhKGEgPT0gYik7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oQ29tcGFy
YWJsZUFTQ0lJTGl0ZXJhbCBhLCBDb21wYXJhYmxlU3RyaW5nVmlldyBiKQoreworICAgIHJldHVy
biBiID09IGE7Cit9CisKK30KKwordXNpbmcgV1RGOjpDb21wYXJhYmxlQVNDSUlMaXRlcmFsOwor
dXNpbmcgV1RGOjpTb3J0ZWRBcnJheU1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1N0
ZExpYkV4dHJhcy5oIGIvU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgKaW5kZXggMTlkNTQ5
NDVkMTBhZjJhZjAyYjNjMjNjNGM3Y2RiYjhkZDQ0OTEwYi4uMzFkNGE2ODAxN2E0ZWE5YzAyMmE2
NjIzYjQxZjQ2MzZjN2VkZWZlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU3RkTGliRXh0
cmFzLmgKKysrIGIvU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgKQEAgLTIwNiw3ICsyMDYs
NyBAQCBpbmxpbmUgQXJyYXlFbGVtZW50VHlwZSogYmluYXJ5U2VhcmNoSW1wbChBcnJheVR5cGUm
IGFycmF5LCBzaXplX3Qgc2l6ZSwgS2V5VHlwZQogICAgIHNpemVfdCBvZmZzZXQgPSAwOwogICAg
IHdoaWxlIChzaXplID4gMSkgewogICAgICAgICBzaXplX3QgcG9zID0gKHNpemUgLSAxKSA+PiAx
OwotICAgICAgICBLZXlUeXBlIHZhbCA9IGV4dHJhY3RLZXkoJmFycmF5W29mZnNldCArIHBvc10p
OworICAgICAgICBhdXRvIHZhbCA9IGV4dHJhY3RLZXkoJmFycmF5W29mZnNldCArIHBvc10pOwog
ICAgICAgICAKICAgICAgICAgaWYgKHZhbCA9PSBrZXkpCiAgICAgICAgICAgICByZXR1cm4gJmFy
cmF5W29mZnNldCArIHBvc107CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZy5jcHAKaW5kZXggYWYwNGQ1MzAzMGZlY2JjZmI4NWVh
NDU5NWNjOTFmMmU0ZTBlOWE0Ny4uODJlZjU4NGFhYTJkMzhkNDI3ODY2NzEzMzljZWFkMzhkOTgy
MTA0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1Nj
cmlwdE1hcHBpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxl
VG9TY3JpcHRNYXBwaW5nLmNwcApAQCAtMzIsMTIgKzMyLDExIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmgiCiAKLSNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvU29ydGVkQXJyYXlNYXAuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCisvLyBGSVhNRTogQ29uc2lkZXIgbW92aW5nIGFsb25nc2lk
ZSBDb21wYXJhYmxlQVNDSUlMaXRlcmFsIGFuZCByZW5hbWluZy4gTWF5YmUgdG8gQ29tcGFyYWJs
ZVBhY2tlZExvd2VyY2FzZUFTQ0lJTGl0ZXJhbD8gKEV2ZW4gdGhhdCBuYW1lIGRvZXNuJ3QgbWFr
ZSBjbGVhciBjb21wYXJpc29uIGlzIEFTQ0lJIGNhc2UgaW5zZW5zaXRpdmUuKQogdGVtcGxhdGU8
dHlwZW5hbWUgU3RvcmFnZUludGVnZXI+CiBjbGFzcyBQYWNrZWRBU0NJSUxvd2VyQ29kZXMgewog
cHVibGljOgpAQCAtMTEyLDE5ICsxMTEsMTQgQEAgcHJpdmF0ZToKICAgICBTdG9yYWdlSW50ZWdl
ciBtX3ZhbHVlIHsgMCB9OwogfTsKIAotdXNpbmcgU2NyaXB0TmFtZSA9IFBhY2tlZEFTQ0lJTG93
ZXJDb2Rlczx1aW50MzJfdD47Ci1zdHJ1Y3QgU2NyaXB0TmFtZUNvZGUgewotICAgIFNjcmlwdE5h
bWUgbmFtZTsKLSAgICBVU2NyaXB0Q29kZSBjb2RlOwotfTsKLQotVVNjcmlwdENvZGUgc2NyaXB0
TmFtZVRvQ29kZShjb25zdCBTdHJpbmcmIHNjcmlwdE5hbWUpCitVU2NyaXB0Q29kZSBzY3JpcHRO
YW1lVG9Db2RlKFN0cmluZ1ZpZXcgc2NyaXB0TmFtZSkKIHsKICAgICAvLyBUaGlzIGdlbmVyYWxs
eSBtYXBzIGFuIElTTyAxNTkyNCBzY3JpcHQgY29kZSB0byBpdHMgVVNjcmlwdENvZGUsIGJ1dCBj
ZXJ0YWluIGZhbWlsaWVzIG9mIHNjcmlwdCBjb2RlcyBhcmUKICAgICAvLyB0cmVhdGVkIGFzIGEg
c2luZ2xlIHNjcmlwdCBmb3IgYXNzaWduaW5nIGEgcGVyLXNjcmlwdCBmb250IGluIFNldHRpbmdz
LiBGb3IgZXhhbXBsZSwgImhpcmEiIGlzIG1hcHBlZCB0bwogICAgIC8vIFVTQ1JJUFRfS0FUQUtB
TkFfT1JfSElSQUdBTkEgaW5zdGVhZCBvZiBVU0NSSVBUX0hJUkFHQU5BLCBzaW5jZSB3ZSB3YW50
IGFsbCBKYXBhbmVzZSBzY3JpcHRzIHRvIGJlIHJlbmRlcmVkCiAgICAgLy8gdXNpbmcgdGhlIHNh
bWUgZm9udCBzZXR0aW5nLgotICAgIHN0YXRpYyBjb25zdGV4cHIgU2NyaXB0TmFtZUNvZGUgc2Ny
aXB0TmFtZUNvZGVMaXN0W10gPSB7CisgICAgdXNpbmcgU2NyaXB0TmFtZSA9IFBhY2tlZEFTQ0lJ
TG93ZXJDb2Rlczx1aW50MzJfdD47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OnBhaXI8U2Ny
aXB0TmFtZSwgVVNjcmlwdENvZGU+IHNjcmlwdE5hbWVDb2RlTGlzdFtdID0gewogICAgICAgICB7
ICJhcmFiIiwgVVNDUklQVF9BUkFCSUMgfSwKICAgICAgICAgeyAiYXJtbiIsIFVTQ1JJUFRfQVJN
RU5JQU4gfSwKICAgICAgICAgeyAiYmFsaSIsIFVTQ1JJUFRfQkFMSU5FU0UgfSwKQEAgLTIzMiwz
OCArMjI2LDE2IEBAIFVTY3JpcHRDb2RlIHNjcmlwdE5hbWVUb0NvZGUoY29uc3QgU3RyaW5nJiBz
Y3JpcHROYW1lKQogICAgICAgICB7ICJ6eXl5IiwgVVNDUklQVF9DT01NT04gfSwKICAgICAgICAg
eyAienp6eiIsIFVTQ1JJUFRfVU5LTk9XTiB9LAogICAgIH07Ci0KICAgICBzdGF0aWNfYXNzZXJ0
KFNjcmlwdE5hbWUoImFyYWIiKS52YWx1ZSgpID09IDB4NjE3MjYxNjJVKTsKICAgICBzdGF0aWNf
YXNzZXJ0KFNjcmlwdE5hbWUoInp6enoiKS52YWx1ZSgpID09IDB4N2E3YTdhN2FVKTsKLQotICAg
IEFTU0VSVCgKLSAgICAgICAgc3RkOjppc19zb3J0ZWQoc3RkOjpiZWdpbihzY3JpcHROYW1lQ29k
ZUxpc3QpLCBzdGQ6OmVuZChzY3JpcHROYW1lQ29kZUxpc3QpLAotICAgICAgICAgICAgW10oY29u
c3QgU2NyaXB0TmFtZUNvZGUmIGEsIGNvbnN0IFNjcmlwdE5hbWVDb2RlJiBiKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGEubmFtZSA8IGIubmFtZTsKLSAgICAgICAgICAgIH0pKTsKLQotICAg
IGF1dG8gbmFtZSA9IFNjcmlwdE5hbWU6OnBhcnNlKHNjcmlwdE5hbWUpOwotICAgIGlmICghbmFt
ZSkKLSAgICAgICAgcmV0dXJuIFVTQ1JJUFRfSU5WQUxJRF9DT0RFOwotCi0gICAgYXV0byogZWxl
bWVudCA9IHRyeUJpbmFyeVNlYXJjaDxTY3JpcHROYW1lQ29kZT4oc2NyaXB0TmFtZUNvZGVMaXN0
LCBzdGQ6OnNpemUoc2NyaXB0TmFtZUNvZGVMaXN0KSwgbmFtZS52YWx1ZSgpLAotICAgICAgICBb
XShjb25zdCBTY3JpcHROYW1lQ29kZSogc2NyaXB0TmFtZUNvZGUpIHsKLSAgICAgICAgICAgIHJl
dHVybiBzY3JpcHROYW1lQ29kZS0+bmFtZTsKLSAgICAgICAgfSk7Ci0gICAgaWYgKGVsZW1lbnQp
Ci0gICAgICAgIHJldHVybiBlbGVtZW50LT5jb2RlOwotICAgIHJldHVybiBVU0NSSVBUX0lOVkFM
SURfQ09ERTsKKyAgICBTb3J0ZWRBcnJheU1hcCBtYXAgeyBzY3JpcHROYW1lQ29kZUxpc3QgfTsK
KyAgICByZXR1cm4gbWFwLmdldChzY3JpcHROYW1lLCBVU0NSSVBUX0lOVkFMSURfQ09ERSk7CiB9
CiAKLXVzaW5nIExvY2FsZU5hbWUgPSBQYWNrZWRBU0NJSUxvd2VyQ29kZXM8dWludDY0X3Q+Owot
c3RydWN0IExvY2FsZVNjcmlwdCB7Ci0gICAgTG9jYWxlTmFtZSBsb2NhbGU7Ci0gICAgVVNjcmlw
dENvZGUgc2NyaXB0OwotfTsKLQogVVNjcmlwdENvZGUgbG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9u
dFNlbGVjdGlvbihjb25zdCBTdHJpbmcmIGxvY2FsZSkKIHsKLSAgICBzdGF0aWMgY29uc3RleHBy
IExvY2FsZVNjcmlwdCBsb2NhbGVTY3JpcHRMaXN0W10gPSB7CisgICAgdXNpbmcgTG9jYWxlTmFt
ZSA9IFBhY2tlZEFTQ0lJTG93ZXJDb2Rlczx1aW50NjRfdD47CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBzdGQ6OnBhaXI8TG9jYWxlTmFtZSwgVVNjcmlwdENvZGU+IGxvY2FsZVNjcmlwdExpc3RbXSA9
IHsKICAgICAgICAgeyAiYWEiLCBVU0NSSVBUX0xBVElOIH0sCiAgICAgICAgIHsgImFiIiwgVVND
UklQVF9DWVJJTExJQyB9LAogICAgICAgICB7ICJhZHkiLCBVU0NSSVBUX0NZUklMTElDIH0sCkBA
IC00NjMsMzUgKzQzNSwxNCBAQCBVU2NyaXB0Q29kZSBsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250
U2VsZWN0aW9uKGNvbnN0IFN0cmluZyYgbG9jYWxlKQogICAgICAgICB7ICJ6aF90dyIsIFVTQ1JJ
UFRfVFJBRElUSU9OQUxfSEFOIH0sCiAgICAgICAgIHsgInp1IiwgVVNDUklQVF9MQVRJTiB9LAog
ICAgIH07Ci0KICAgICBzdGF0aWNfYXNzZXJ0KExvY2FsZU5hbWUoImFhIikudmFsdWUoKSA9PSAw
eDYxNjEwMDAwMDAwMDAwMDBVTEwpOwogICAgIHN0YXRpY19hc3NlcnQoTG9jYWxlTmFtZSgiemhf
dHciKS52YWx1ZSgpID09IDB4N2E2ODVmNzQ3NzAwMDAwMFVMTCk7Ci0KLSAgICBBU1NFUlQoCi0g
ICAgICAgIHN0ZDo6aXNfc29ydGVkKHN0ZDo6YmVnaW4obG9jYWxlU2NyaXB0TGlzdCksIHN0ZDo6
ZW5kKGxvY2FsZVNjcmlwdExpc3QpLAotICAgICAgICAgICAgW10oY29uc3QgTG9jYWxlU2NyaXB0
JiBhLCBjb25zdCBMb2NhbGVTY3JpcHQmIGIpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYS5s
b2NhbGUgPCBiLmxvY2FsZTsKLSAgICAgICAgICAgIH0pKTsKLQotICAgIGF1dG8gdHJ5RmluZFNj
cmlwdENvZGUgPSBbJl0gKGNvbnN0IFN0cmluZyYgc3RyaW5nKSAtPiBPcHRpb25hbDxVU2NyaXB0
Q29kZT4gewotICAgICAgICBhdXRvIGxvY2FsZU5hbWUgPSBMb2NhbGVOYW1lOjpwYXJzZShzdHJp
bmcpOwotICAgICAgICBpZiAoIWxvY2FsZU5hbWUpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotCi0gICAgICAgIGF1dG8qIGVsZW1lbnQgPSB0cnlCaW5hcnlTZWFyY2g8TG9jYWxl
U2NyaXB0Pihsb2NhbGVTY3JpcHRMaXN0LCBzdGQ6OnNpemUobG9jYWxlU2NyaXB0TGlzdCksIGxv
Y2FsZU5hbWUudmFsdWUoKSwKLSAgICAgICAgICAgIFtdKGNvbnN0IExvY2FsZVNjcmlwdCogbG9j
YWxlU2NyaXB0KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZVNjcmlwdC0+bG9jYWxl
OwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIGlmIChlbGVtZW50KQotICAgICAgICAgICAgcmV0
dXJuIGVsZW1lbnQtPnNjcmlwdDsKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICB9
OwotCi0gICAgU3RyaW5nIGNhbm9uaWNhbExvY2FsZSA9IGxvY2FsZTsKLSAgICBjYW5vbmljYWxM
b2NhbGUucmVwbGFjZSgnLScsICdfJyk7Ci0gICAgd2hpbGUgKCFjYW5vbmljYWxMb2NhbGUuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIGlmIChhdXRvIHNjcmlwdENvZGUgPSB0cnlGaW5kU2NyaXB0Q29k
ZShjYW5vbmljYWxMb2NhbGUpKQotICAgICAgICAgICAgcmV0dXJuIHNjcmlwdENvZGUudmFsdWUo
KTsKKyAgICBTb3J0ZWRBcnJheU1hcCBtYXAgeyBsb2NhbGVTY3JpcHRMaXN0IH07CisgICAgU3Ry
aW5nIGNhbm9uaWNhbExvY2FsZVN0cmluZyA9IGxvY2FsZTsKKyAgICBjYW5vbmljYWxMb2NhbGVT
dHJpbmcucmVwbGFjZSgnLScsICdfJyk7CisgICAgZm9yIChTdHJpbmdWaWV3IGNhbm9uaWNhbExv
Y2FsZSA9IGNhbm9uaWNhbExvY2FsZVN0cmluZzsgIWNhbm9uaWNhbExvY2FsZS5pc0VtcHR5KCk7
ICkgeworICAgICAgICBpZiAoYXV0byBzY3JpcHRDb2RlID0gbWFwLnRyeUdldChjYW5vbmljYWxM
b2NhbGUpKQorICAgICAgICAgICAgcmV0dXJuICpzY3JpcHRDb2RlOwogICAgICAgICBhdXRvIHVu
ZGVyc2NvcmVQb3NpdGlvbiA9IGNhbm9uaWNhbExvY2FsZS5yZXZlcnNlRmluZCgnXycpOwogICAg
ICAgICBpZiAodW5kZXJzY29yZVBvc2l0aW9uID09IG5vdEZvdW5kKQogICAgICAgICAgICAgYnJl
YWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2Ny
aXB0TWFwcGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1Njcmlw
dE1hcHBpbmcuaAppbmRleCA3MzAwNmQyMzU3NmE1YzY4OGNiYjc5YjkzOTI1ZDZhYjc4M2NiNzBl
Li4xNGFmNmE1N2ZjMzJkY2ZmMjlmMDliMGVmNjFmMmY0ODVjMzY4ZjQyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmgKQEAg
LTI4LDggKzI4LDcgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBMb2NhbGVUb1Nj
cmlwdE1hcHBpbmdfaAotI2RlZmluZSBMb2NhbGVUb1NjcmlwdE1hcHBpbmdfaAorI3ByYWdtYSBv
bmNlCiAKICNpbmNsdWRlIDx1bmljb2RlL3VzY3JpcHQuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgpAQCAtMzcsOCArMzYsNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBVU2NyaXB0Q29k
ZSBsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9uKGNvbnN0IFN0cmluZyYpOwotV0VC
Q09SRV9FWFBPUlQgVVNjcmlwdENvZGUgc2NyaXB0TmFtZVRvQ29kZShjb25zdCBTdHJpbmcmKTsK
K1dFQkNPUkVfRVhQT1JUIFVTY3JpcHRDb2RlIHNjcmlwdE5hbWVUb0NvZGUoU3RyaW5nVmlldyk7
CiAKIH0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXIuaAppbmRleCBiYTE3YzgyN2U5
M2MxMTJmYjMxZjBiNTliZDk0NDI5Mzg2NjU3YmE0Li5kYTQxNTdiZjg2YWE0ZDZlMDJhZjk2ZmU5
MzE0MWU2OGY5MWFlYzk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmgKQEAgLTM0LDcgKzM0
LDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+CiAjaW5jbHVkZSA8cGFsL1Nlc3Npb25J
RC5oPgogI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgotI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvV2Vh
a1B0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNF
bnRyeS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVT
dWJyZXNvdXJjZXNFbnRyeS5oCmluZGV4IGQ0NDk1MDQ0NjNmZmUwZDk5ZGJlY2FhNDQ3N2IwNTNh
YzZjNTc1NjQuLjM3N2QzMzc5OWY3YmI1ZGNlNmNlNWI5MDZhMzdlNTI0OGU1MDkxYTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3Vi
cmVzb3VyY2VzRW50cnkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmgKQEAgLTI5LDcgKzI5LDYgQEAKIAogI2lu
Y2x1ZGUgIk5ldHdvcmtDYWNoZVN0b3JhZ2UuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNl
UmVxdWVzdC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1VSTC5o
PgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggMWU4ZjU1ZmQwYzg0MDBjMmVhZTQwOGM1
YWI2OTI1ZTFmMjc5MDRmNy4uNjBmMjIwOWE2OTBmNWJlZmQyNGFkNmRiYjc3ZjdhZWEwYTIwODYz
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBh
Z2VNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBh
Z2VNYWMubW0KQEAgLTk1LDYgKzk1LDcgQEAKICNpbXBvcnQgPHBhbC9zcGkvY29jb2EvTlNBY2Nl
c3NpYmlsaXR5U1BJLmg+CiAjaW1wb3J0IDxwYWwvc3BpL21hYy9OU0FwcGxpY2F0aW9uU1BJLmg+
CiAjaW1wb3J0IDx3dGYvU2V0Rm9yU2NvcGUuaD4KKyNpbXBvcnQgPHd0Zi9Tb3J0ZWRBcnJheU1h
cC5oPgogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKICNpbXBvcnQgPFdl
YkNvcmUvTWVkaWFQbGF5YmFja1RhcmdldENvY29hLmg+CkBAIC0yMDcsMzIgKzIwOCwyMiBAQCBi
b29sIFdlYlBhZ2U6OnNob3VsZFVzZVBERlBsdWdpbihjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBl
LCBTdHJpbmdWaWV3IHBhdGgpIGNvbgogICAgICAgICAgICAgICAgICYmIChwYXRoLmVuZHNXaXRo
SWdub3JpbmdBU0NJSUNhc2UoIi5wZGYiKSB8fCBwYXRoLmVuZHNXaXRoSWdub3JpbmdBU0NJSUNh
c2UoIi5wcyIpKSkpOwogfQogCi10eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IFNlbGVj
dG9yTmFtZU1hcDsKLQotLy8gTWFwIHNlbGVjdG9ycyBpbnRvIEVkaXRvciBjb21tYW5kIG5hbWVz
LgotLy8gVGhpcyBpcyBub3QgbmVlZGVkIGZvciBhbnkgc2VsZWN0b3JzIHRoYXQgaGF2ZSB0aGUg
c2FtZSBuYW1lIGFzIHRoZSBFZGl0b3IgY29tbWFuZC4KLXN0YXRpYyBjb25zdCBTZWxlY3Rvck5h
bWVNYXAqIGNyZWF0ZVNlbGVjdG9yRXhjZXB0aW9uTWFwKCkKLXsKLSAgICBTZWxlY3Rvck5hbWVN
YXAqIG1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjsKLQotICAgIG1hcC0+YWRkKCJp
bnNlcnROZXdsaW5lSWdub3JpbmdGaWVsZEVkaXRvcjoiLCAiSW5zZXJ0TmV3bGluZSIpOwotICAg
IG1hcC0+YWRkKCJpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3I6IiwgIkluc2VydE5ld2xpbmUiKTsK
LSAgICBtYXAtPmFkZCgiaW5zZXJ0VGFiSWdub3JpbmdGaWVsZEVkaXRvcjoiLCAiSW5zZXJ0VGFi
Iik7Ci0gICAgbWFwLT5hZGQoInBhZ2VEb3duOiIsICJNb3ZlUGFnZURvd24iKTsKLSAgICBtYXAt
PmFkZCgicGFnZURvd25BbmRNb2RpZnlTZWxlY3Rpb246IiwgIk1vdmVQYWdlRG93bkFuZE1vZGlm
eVNlbGVjdGlvbiIpOwotICAgIG1hcC0+YWRkKCJwYWdlVXA6IiwgIk1vdmVQYWdlVXAiKTsKLSAg
ICBtYXAtPmFkZCgicGFnZVVwQW5kTW9kaWZ5U2VsZWN0aW9uOiIsICJNb3ZlUGFnZVVwQW5kTW9k
aWZ5U2VsZWN0aW9uIik7Ci0KLSAgICByZXR1cm4gbWFwOwotfQotCiBzdGF0aWMgU3RyaW5nIGNv
bW1hbmROYW1lRm9yU2VsZWN0b3JOYW1lKGNvbnN0IFN0cmluZyYgc2VsZWN0b3JOYW1lKQogewot
ICAgIC8vIENoZWNrIHRoZSBleGNlcHRpb24gbWFwIGZpcnN0LgotICAgIHN0YXRpYyBjb25zdCBT
ZWxlY3Rvck5hbWVNYXAqIGV4Y2VwdGlvbk1hcCA9IGNyZWF0ZVNlbGVjdG9yRXhjZXB0aW9uTWFw
KCk7Ci0gICAgU2VsZWN0b3JOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGV4Y2VwdGlvbk1h
cC0+ZmluZChzZWxlY3Rvck5hbWUpOwotICAgIGlmIChpdCAhPSBleGNlcHRpb25NYXAtPmVuZCgp
KQotICAgICAgICByZXR1cm4gaXQtPnZhbHVlOworICAgIC8vIE1hcCBzZWxlY3RvcnMgaW50byBF
ZGl0b3IgY29tbWFuZCBuYW1lcy4KKyAgICAvLyBUaGlzIGlzIG5vdCBuZWVkZWQgZm9yIGFueSBz
ZWxlY3RvcnMgdGhhdCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgdGhlIEVkaXRvciBjb21tYW5kLgor
ICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjpwYWlyPENvbXBhcmFibGVBU0NJSUxpdGVyYWwsIEFT
Q0lJTGl0ZXJhbD4gc2VsZWN0b3JFeGNlcHRpb25zW10gPSB7CisgICAgICAgIHsgImluc2VydE5l
d2xpbmVJZ25vcmluZ0ZpZWxkRWRpdG9yOiIsICJJbnNlcnROZXdsaW5lIl9zIH0sCisgICAgICAg
IHsgImluc2VydFBhcmFncmFwaFNlcGFyYXRvcjoiLCAiSW5zZXJ0TmV3bGluZSJfcyB9LAorICAg
ICAgICB7ICJpbnNlcnRUYWJJZ25vcmluZ0ZpZWxkRWRpdG9yOiIsICJJbnNlcnRUYWIiX3MgfSwK
KyAgICAgICAgeyAicGFnZURvd246IiwgIk1vdmVQYWdlRG93biJfcyB9LAorICAgICAgICB7ICJw
YWdlRG93bkFuZE1vZGlmeVNlbGVjdGlvbjoiLCAiTW92ZVBhZ2VEb3duQW5kTW9kaWZ5U2VsZWN0
aW9uIl9zIH0sCisgICAgICAgIHsgInBhZ2VVcDoiLCAiTW92ZVBhZ2VVcCJfcyB9LAorICAgICAg
ICB7ICJwYWdlVXBBbmRNb2RpZnlTZWxlY3Rpb246IiwgIk1vdmVQYWdlVXBBbmRNb2RpZnlTZWxl
Y3Rpb24iX3MgfSwKKyAgICB9OworICAgIFNvcnRlZEFycmF5TWFwIG1hcCB7IHNlbGVjdG9yRXhj
ZXB0aW9ucyB9OworICAgIGlmIChhdXRvIGNvbW1hbmROYW1lID0gbWFwLnRyeUdldChzZWxlY3Rv
ck5hbWUpKQorICAgICAgICByZXR1cm4gKmNvbW1hbmROYW1lOwogCiAgICAgLy8gUmVtb3ZlIHRo
ZSB0cmFpbGluZyBjb2xvbi4KICAgICAvLyBObyBuZWVkIHRvIGNhcGl0YWxpemUgdGhlIGNvbW1h
bmQgbmFtZSBzaW5jZSBFZGl0b3IgY29tbWFuZCBuYW1lcyBhcmUgbm90IGNhc2Ugc2Vuc2l0aXZl
Lgo=
</data>
<flag name="commit-queue"
          id="446657"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426386</attachid>
            <date>2021-04-18 15:31:39 -0700</date>
            <delta_ts>2021-04-18 16:18:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224733-20210418153138.patch</filename>
            <type>text/plain</type>
            <size>21691</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2MjI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDYyMGZkYzY1YmE3Yzg5YWIzYzg0Mzc0
ZDE1NzI3ZjQyOTcyZmY4MDUuLjVhOWQ5ODEwOGRmOGUzYzk3NmY5N2UxNGZhMjA5YzhkYTZkZTBk
ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjEtMDQtMTggIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIHNvcnRlZCBhcnJheSBtYXBwaW5nIG1hY2hp
bmVyeSBpbiBMb2NhbGVUb1NjcmlwdE1hcHBpbmcuY3BwIGZvciByZXVzZSBlbHNld2hlcmUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDczMworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6IEFkZGVkIFNvcnRlZEFycmF5TWFwLmguCisgICAgICAgICog
d3RmL0NNYWtlTGlzdHMudHh0OiBEaXR0by4KKworICAgICAgICAqIHd0Zi9Tb3J0ZWRBcnJheU1h
cC5oOiBBZGRlZC4gQnVpbGRzIG9uIHRoZSBpZGlvbSBpbiBMb2NhbFRvU2NyaXB0TWFwcGluZywg
YW5kIHRvIGJlCisgICAgICAgIGdlbmVyaWMgdXNlcyBzdGQ6OnBhaXIgaW5zdGVhZCBvZiBjdXN0
b20gc3RydWN0dXJlcy4gQWxzbyBhc3NlcnRzIHRoYXQgbm8gdHdvIGl0ZW1zCisgICAgICAgIGlu
IHRoZSBhcnJheSBoYXZlIGVxdWFsIGtleXMuIEluY2x1ZGVzIHRoZSBDb21wYXJhYmxlQVNDSUlM
aXRlcmFsIHN0cnVjdHVyZSB0aGF0IGNhbgorICAgICAgICBiZSB1c2VkIHRvIG1ha2UgbWFwcyB0
aGF0IGFyZSBrZXllZCBieSBjYXNlLXNlbnNpdGl2ZSBBU0NJSSBzdHJpbmdzLgorCisgICAgICAg
ICogd3RmL1N0ZExpYkV4dHJhcy5oOgorICAgICAgICAoV1RGOjpiaW5hcnlTZWFyY2hJbXBsKTog
VXNlIGF1dG8gaW4gb25lIHBsYWNlIHRvIG1ha2UgdGhpcyBhIGJpdCBtb3JlIGdlbmVyaWMuCisK
IDIwMjEtMDQtMTcgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIE1v
dmUgUnVudGltZUVuYWJsZWRGZWF0dXJlcyB0byBTZXR0aW5ncyAoUGFydCAxKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IGE0ZWJlNTUyMjg0N2QwY2Q1YmIwMDdjY2IzZjliZDkyMmRjYzY2ZGYuLjQ3MTNjOGFlMDIw
ZmU3MjU3MmFlZjEwODNiYmIzMjk3Yjg0NzYzZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBA
QAorMjAyMS0wNC0xOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAg
UmVmYWN0b3Igc29ydGVkIGFycmF5IG1hcHBpbmcgbWFjaGluZXJ5IGluIExvY2FsZVRvU2NyaXB0
TWFwcGluZy5jcHAgZm9yIHJldXNlIGVsc2V3aGVyZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0NzMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFw
cGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzY3JpcHROYW1lVG9Db2RlKTogUmVmYWN0b3Ig
dG8gdXNlIFNvcnRlZEFycmF5TWFwLiBBbHNvIGNoYW5nZWQgdG8gdGFrZSBTdHJpbmdWaWV3Lgor
ICAgICAgICAoV2ViQ29yZTo6bG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbik6IERp
dHRvLiBDdXQgZG93biBvbiBtZW1vcnkgYWxsb2NhdGlvbiBieSB1c2luZworICAgICAgICBTdHJp
bmdWaWV3IGluc3RlYWQgb2YgU3RyaW5nIHdoaWxlIGxvb3BpbmcgdGhyb3VnaCBzdWJzdHJpbmdz
LgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmcuaDogQ2hh
bmdlZCBzY3JpcHROYW1lVG9Db2RlIHRvIHRha2UgU3RyaW5nVmlldy4KKwogMjAyMS0wNC0xOCAg
Q2F0aGllIENoZW4gIDxjYXRoaWVjaGVuQGlnYWxpYS5jb20+CiAKICAgICAgICAgVGhlIGltcGxp
Y2l0IGFzcGVjdC1yYXRpbyBmcm9tIHdpZHRoIGFuZCBoZWlnaHQgYXR0cmlidXRlcyB3aXRoIGZs
b2F0IHZhbHVlIGlzIG5vdCBhY2N1cmF0ZSBlbm91Z2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZjNhYzgxMGIzNTQy
ZmQzZDVjNWM5Nzk5ODVlMDMwODMzNjAyZTdiOS4uYjVjZmQ4ZWFkZDU2Zjc0YmYwY2YyMTQ2MTAy
ZDljMDhhODA0NjEzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMS0wNC0xOCAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3Igc29ydGVkIGFy
cmF5IG1hcHBpbmcgbWFjaGluZXJ5IGluIExvY2FsZVRvU2NyaXB0TWFwcGluZy5jcHAgZm9yIHJl
dXNlIGVsc2V3aGVyZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjI0NzMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXIuaDog
UmVtb3ZlZCB1bnVzZWQgaW5jbHVkZSBvZiBIYXNoTWFwLmguCisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuaDogRGl0dG8uCisKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIChX
ZWJLaXQ6OmNyZWF0ZVNlbGVjdG9yRXhjZXB0aW9uTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6Y29tbWFuZE5hbWVGb3JTZWxlY3Rvck5hbWUpOiBVc2UgU29ydGVkQXJyYXlNYXAgaW5z
dGVhZCBvZiBIYXNoTWFwLgorCiAyMDIxLTA0LTE4ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBs
ZS5jb20+CiAKICAgICAgICAgVXBkYXRlIExpYldlYlJUQ0NvZGVjc1Byb3h5IHRvIHVzZSBhIExv
Y2sKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDY3M2E5ZTZk
ZjliMjZhZTIzYmU5MmVlOGQwNzkzNTRhZmMxMWVhOTYuLjI4MzYzMmRiY2UyZDMxNGI4MGUxMTVl
NTU5NzlkNmJkOGY0N2ZiN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtNDg3LDYgKzQ4Nyw3IEBACiAJCTgzRjJCQURFMUNGOTUyNEUwMDNFOTlDMyAvKiBG
dW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGdW5jdGlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4M0ZCQTkzMTE5REY0NTk3MDBGMzBBREIgLyog
VHlwZUNhc3RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVDYXN0cy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkY0NkY1RjFBMjg0MEVFMDBDQ0JGMjIg
LyogUmVmQ291bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWZDb3Vu
dGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzMTU2QzhEMjYyQzk4MjIwMEVB
RTI3QiAvKiBTb3J0ZWRBcnJheU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3J0ZWRBcnJheU1hcC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzI0MTY1NzI0M0JDMkU1MDAzMkZBQUUg
LyogVmVjdG9yQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmVjdG9yQ29jb2EuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMzRDYzMTkxRkNCNkFCOTAwMzJFQ0Q2IC8qIFN0cmluZ0hh
c2hlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdIYXNoZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM4NEI3M0UyMERFQTI4NDAwNUI3M0IyIC8q
IENGWFBDQnJpZGdlU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENGWFBDQnJpZGdlU1BJLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjQ0LDYgKzEyNDUsNyBAQAogCQkJCTBGQTZGMzky
MjBDQzczQTIwMEEwM0RDRCAvKiBTbWFsbFB0clNldC5jcHAgKi8sCiAJCQkJNzkzNkQ2QTkxQzk5
RjhBRTAwMEQxQUVEIC8qIFNtYWxsUHRyU2V0LmggKi8sCiAJCQkJQTMwRDQxMkQxRjBERTEzRjAw
QjcxOTU0IC8qIFNvZnRMaW5raW5nLmggKi8sCisJCQkJOTMxNTZDOEQyNjJDOTgyMjAwRUFFMjdC
IC8qIFNvcnRlZEFycmF5TWFwLmggKi8sCiAJCQkJNzkwMzhFMDUyMjRCMDVBNzAwNEMwNzM4IC8q
IFNwYW5uaW5nVHJlZS5oICovLAogCQkJCUE4QTQ3MzBEMTUxQTgyNUIwMDQxMjNGRiAvKiBTcGVj
dHJ1bS5oICovLAogCQkJCUE4QTQ3MzBFMTUxQTgyNUIwMDQxMjNGRiAvKiBTdGFja0JvdW5kcy5j
cHAgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IGEzMDU5ZTliYmY2ZmNlMjAyMTcxZmM0Mjcw
YmQxOTQ4Yzk0MjI5YWEuLmZjNmEyZjA5NGQxMTE2YWNlYjAzNmU3N2QwOTJmNWUwOWEwOTk0Mjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9X
VEYvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC0yMzYsNiArMjM2LDcgQEAgc2V0KFdURl9QVUJMSUNf
SEVBREVSUwogICAgIFNpeENoYXJhY3Rlckhhc2guaAogICAgIFNtYWxsUHRyU2V0LmgKICAgICBT
b2Z0TGlua2luZy5oCisgICAgU29ydGVkQXJyYXlNYXAuaAogICAgIFNwYW5uaW5nVHJlZS5oCiAg
ICAgU3BlY3RydW0uaAogICAgIFN0YWNrQm91bmRzLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1NvcnRlZEFycmF5TWFwLmggYi9Tb3VyY2UvV1RGL3d0Zi9Tb3J0ZWRBcnJheU1hcC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjhjNzY3NGFmMjg0M2JmYzYxMjAyNmM2NjQxZjljMmIzNjhjNzdlMDkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Tb3J0ZWRBcnJheU1hcC5oCkBAIC0wLDAgKzEs
MTM0IEBACisvKgorCitDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKzIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKK0VYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXVEYgeworCisv
LyBTb3J0ZWRBcnJheU1hcCBpcyBhIG1hcCBsaWtlIEhhc2hNYXAsIGJ1dCBpdCdzIHJlYWQtb25s
eS4KKy8vIEl0IHVzZXMgbXVjaCBsZXNzIG1lbW9yeSB0aGFuIEhhc2hNYXAuCisvLyBJdCB1c2Vl
cyBiaW5hcnkgc2VhcmNoIGluc3RlYWQgb2YgaGFzaGluZywgc28gY2FuIGJlIG91dHBlcmZvcm1l
ZCBieSBIYXNoTWFwIGZvciB2ZXJ5IGxhcmdlIGFycmF5cy4KKy8vIFRoZSBhcnJheSBlbGVtZW50
cyBzaG91bGQgYmUgc3RkOjpwYWlyLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBcnJheVR5cGU+IGNs
YXNzIFNvcnRlZEFycmF5TWFwIHsKK3B1YmxpYzoKKyAgICB1c2luZyBFbGVtZW50VHlwZSA9IHR5
cGVuYW1lIHN0ZDo6cmVtb3ZlX2V4dGVudF90PEFycmF5VHlwZT47CisgICAgdXNpbmcgVmFsdWVU
eXBlID0gdHlwZW5hbWUgRWxlbWVudFR5cGU6OnNlY29uZF90eXBlOworCisgICAgU29ydGVkQXJy
YXlNYXAoY29uc3QgQXJyYXlUeXBlJik7CisKKyAgICAvLyBGSVhNRTogVG8gbWF0Y2ggSGFzaE1h
cCBpbnRlcmZhY2UgYmV0dGVyLCB3b3VsZCBiZSBuaWNlIHRvIGdldCB0aGUgZGVmYXVsdCB2YWx1
ZSBmcm9tIHRyYWl0cy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmd1bWVudD4gVmFsdWVU
eXBlIGdldChjb25zdCBLZXlBcmd1bWVudCYsIGNvbnN0IFZhbHVlVHlwZSYgZGVmYXVsdFZhbHVl
ID0geyB9KSBjb25zdDsKKworICAgIC8vIEZJWE1FOiBTaG91bGQgYWRkIGEgZnVuY3Rpb24gbGlr
ZSB0aGlzIHRvIEhhc2hNYXAgc28gdGhlIHR3byBraW5kcyBvZiBtYXBzIGFyZSBtb3JlIGludGVy
Y2hhbmdhYmxlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZ3VtZW50PiBjb25zdCBWYWx1
ZVR5cGUqIHRyeUdldChjb25zdCBLZXlBcmd1bWVudCYpIGNvbnN0OworCitwcml2YXRlOgorICAg
IGNvbnN0IEFycmF5VHlwZSYgbV9hcnJheTsKK307CisKK3N0cnVjdCBDb21wYXJhYmxlU3RyaW5n
VmlldyB7CisgICAgU3RyaW5nVmlldyBzdHJpbmc7Cit9OworCitzdHJ1Y3QgQ29tcGFyYWJsZUFT
Q0lJTGl0ZXJhbCB7CisgICAgY29uc3QgY2hhciogbGl0ZXJhbDsKKyAgICB0ZW1wbGF0ZTxzdGQ6
OnNpemVfdCBzaXplPiBjb25zdGV4cHIgQ29tcGFyYWJsZUFTQ0lJTGl0ZXJhbChjb25zdCBjaGFy
ICgmY2hhcmFjdGVycylbc2l6ZV0pIDogbGl0ZXJhbCB7IGNoYXJhY3RlcnMgfSB7IH0KKyAgICBz
dGF0aWMgT3B0aW9uYWw8Q29tcGFyYWJsZVN0cmluZ1ZpZXc+IHBhcnNlKFN0cmluZ1ZpZXcgc3Ry
aW5nKSB7IHJldHVybiB7IHsgc3RyaW5nIH0gfTsgfQorfTsKKworYm9vbCBvcGVyYXRvcj09KENv
bXBhcmFibGVBU0NJSUxpdGVyYWwsIENvbXBhcmFibGVBU0NJSUxpdGVyYWwpOworYm9vbCBvcGVy
YXRvcjwoQ29tcGFyYWJsZUFTQ0lJTGl0ZXJhbCwgQ29tcGFyYWJsZUFTQ0lJTGl0ZXJhbCk7Citi
b29sIG9wZXJhdG9yPT0oQ29tcGFyYWJsZVN0cmluZ1ZpZXcsIENvbXBhcmFibGVBU0NJSUxpdGVy
YWwpOworYm9vbCBvcGVyYXRvcjwoQ29tcGFyYWJsZVN0cmluZ1ZpZXcsIENvbXBhcmFibGVBU0NJ
SUxpdGVyYWwpOworYm9vbCBvcGVyYXRvciE9KENvbXBhcmFibGVTdHJpbmdWaWV3LCBDb21wYXJh
YmxlQVNDSUlMaXRlcmFsKTsKK2Jvb2wgb3BlcmF0b3I9PShDb21wYXJhYmxlQVNDSUlMaXRlcmFs
LCBDb21wYXJhYmxlU3RyaW5nVmlldyk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFycmF5VHlwZT4g
U29ydGVkQXJyYXlNYXA8QXJyYXlUeXBlPjo6U29ydGVkQXJyYXlNYXAoY29uc3QgQXJyYXlUeXBl
JiBhcnJheSkKKyAgICA6IG1fYXJyYXkgeyBhcnJheSB9Cit7CisgICAgLy8gRklYTUU6IFNob3Vs
ZCBkbyB0aGVzZSBhc3NlcnRpb25zIG9ubHkgb25jZTsgd291bGQgcmVxdWlyZSBzb21lIGtpbmQg
b2Ygbm9uLWNvbnN0ZXhwciBnbG9iYWwgc3RhdGUgdG8gdHJhY2sgd2hpY2ggYXJyYXlzIHdlcmUg
YWxyZWFkeSBjaGVja2VkLgorICAgIEFTU0VSVChzdGQ6OmlzX3NvcnRlZChzdGQ6OmJlZ2luKG1f
YXJyYXkpLCBzdGQ6OmVuZChtX2FycmF5KSwgW10gKGF1dG8mIGEsIGF1dG8gYikgeworICAgICAg
ICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7CisgICAgfSkpOworICAgIEFTU0VSVChzdGQ6OmFk
amFjZW50X2ZpbmQoc3RkOjpiZWdpbihtX2FycmF5KSwgc3RkOjplbmQobV9hcnJheSksIFtdIChh
dXRvJiBhLCBhdXRvJiBiKSB7CisgICAgICAgIHJldHVybiBhLmZpcnN0ID09IGIuZmlyc3Q7Cisg
ICAgfSkgPT0gc3RkOjplbmQobV9hcnJheSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBcnJh
eVR5cGU+IHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZ3VtZW50PiBpbmxpbmUgYXV0byBTb3J0ZWRB
cnJheU1hcDxBcnJheVR5cGU+Ojp0cnlHZXQoY29uc3QgS2V5QXJndW1lbnQmIGtleSkgY29uc3Qg
LT4gY29uc3QgVmFsdWVUeXBlKgoreworICAgIGF1dG8gcGFyc2VkS2V5ID0gRWxlbWVudFR5cGU6
OmZpcnN0X3R5cGU6OnBhcnNlKGtleSk7CisgICAgaWYgKCFwYXJzZWRLZXkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZW5oYW5jZSB0cnlCaW5hcnlT
ZWFyY2ggc28gaXQgY2FuIGRlZHVjZSBFbGVtZW50VHlwZS4KKyAgICAvLyBGSVhNRTogSWYgdGhl
IGFycmF5J3Mgc2l6ZSBpcyBzbWFsbCBlbm91Z2gsIHNob3VsZCBkbyBsaW5lYXIgc2VhcmNoIHNp
bmNlIGl0IGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gYmluYXJ5IHNlYXJjaC4KKyAgICBhdXRvIGVs
ZW1lbnQgPSB0cnlCaW5hcnlTZWFyY2g8RWxlbWVudFR5cGU+KG1fYXJyYXksIHN0ZDo6c2l6ZSht
X2FycmF5KSwgKnBhcnNlZEtleSwgW10gKGF1dG8qIGVsZW1lbnQpIHsKKyAgICAgICAgcmV0dXJu
IGVsZW1lbnQtPmZpcnN0OworICAgIH0pOworICAgIHJldHVybiBlbGVtZW50ID8gJmVsZW1lbnQt
PnNlY29uZCA6IG51bGxwdHI7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFycmF5VHlwZT4gdGVt
cGxhdGU8dHlwZW5hbWUgS2V5QXJndW1lbnQ+IGlubGluZSBhdXRvIFNvcnRlZEFycmF5TWFwPEFy
cmF5VHlwZT46OmdldChjb25zdCBLZXlBcmd1bWVudCYga2V5LCBjb25zdCBWYWx1ZVR5cGUmIGRl
ZmF1bHRWYWx1ZSkgY29uc3QgLT4gVmFsdWVUeXBlCit7CisgICAgYXV0byByZXN1bHQgPSB0cnlH
ZXQoa2V5KTsKKyAgICByZXR1cm4gcmVzdWx0ID8gKnJlc3VsdCA6IGRlZmF1bHRWYWx1ZTsKK30K
KworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShDb21wYXJhYmxlQVNDSUlMaXRlcmFsIGEsIENvbXBh
cmFibGVBU0NJSUxpdGVyYWwgYikKK3sKKyAgICByZXR1cm4gIXN0ZDo6c3RyY21wKGEubGl0ZXJh
bCwgYi5saXRlcmFsKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I8KENvbXBhcmFibGVBU0NJ
SUxpdGVyYWwgYSwgQ29tcGFyYWJsZUFTQ0lJTGl0ZXJhbCBiKQoreworICAgIHJldHVybiBzdGQ6
OnN0cmNtcChhLmxpdGVyYWwsIGIubGl0ZXJhbCkgPCAwOworfQorCitpbmxpbmUgYm9vbCBvcGVy
YXRvcj09KENvbXBhcmFibGVTdHJpbmdWaWV3IGEsIENvbXBhcmFibGVBU0NJSUxpdGVyYWwgYikK
K3sKKyAgICByZXR1cm4gYS5zdHJpbmcgPT0gYi5saXRlcmFsOworfQorCitpbmxpbmUgYm9vbCBv
cGVyYXRvcjwoQ29tcGFyYWJsZVN0cmluZ1ZpZXcgYSwgQ29tcGFyYWJsZUFTQ0lJTGl0ZXJhbCBi
KQoreworICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlKGEuc3RyaW5nLCBiLmxpdGVyYWwpIDwg
MDsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShDb21wYXJhYmxlU3RyaW5nVmlldyBhLCBD
b21wYXJhYmxlQVNDSUlMaXRlcmFsIGIpCit7CisgICAgcmV0dXJuICEoYSA9PSBiKTsKK30KKwor
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShDb21wYXJhYmxlQVNDSUlMaXRlcmFsIGEsIENvbXBhcmFi
bGVTdHJpbmdWaWV3IGIpCit7CisgICAgcmV0dXJuIGIgPT0gYTsKK30KKworfQorCit1c2luZyBX
VEY6OkNvbXBhcmFibGVBU0NJSUxpdGVyYWw7Cit1c2luZyBXVEY6OlNvcnRlZEFycmF5TWFwOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmggYi9Tb3VyY2UvV1RGL3d0
Zi9TdGRMaWJFeHRyYXMuaAppbmRleCAxOWQ1NDk0NWQxMGFmMmFmMDJiM2MyM2M0YzdjZGJiOGRk
NDQ5MTBiLi4zMWQ0YTY4MDE3YTRlYTljMDIyYTY2MjNiNDFmNDYzNmM3ZWRlZmU3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9T
dGRMaWJFeHRyYXMuaApAQCAtMjA2LDcgKzIwNiw3IEBAIGlubGluZSBBcnJheUVsZW1lbnRUeXBl
KiBiaW5hcnlTZWFyY2hJbXBsKEFycmF5VHlwZSYgYXJyYXksIHNpemVfdCBzaXplLCBLZXlUeXBl
CiAgICAgc2l6ZV90IG9mZnNldCA9IDA7CiAgICAgd2hpbGUgKHNpemUgPiAxKSB7CiAgICAgICAg
IHNpemVfdCBwb3MgPSAoc2l6ZSAtIDEpID4+IDE7Ci0gICAgICAgIEtleVR5cGUgdmFsID0gZXh0
cmFjdEtleSgmYXJyYXlbb2Zmc2V0ICsgcG9zXSk7CisgICAgICAgIGF1dG8gdmFsID0gZXh0cmFj
dEtleSgmYXJyYXlbb2Zmc2V0ICsgcG9zXSk7CiAgICAgICAgIAogICAgICAgICBpZiAodmFsID09
IGtleSkKICAgICAgICAgICAgIHJldHVybiAmYXJyYXlbb2Zmc2V0ICsgcG9zXTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmNw
cAppbmRleCBhZjA0ZDUzMDMwZmVjYmNmYjg1ZWE0NTk1Y2M5MWYyZTRlMGU5YTQ3Li44MmVmNTg0
YWFhMmQzOGQ0Mjc4NjY3MTMzOWNlYWQzOGQ5ODIxMDQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmcuY3BwCkBAIC0zMiwx
MiArMzIsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJMb2NhbGVUb1Njcmlw
dE1hcHBpbmcuaCIKIAotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorI2luY2x1
ZGUgPHd0Zi9Tb3J0ZWRBcnJheU1hcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIEZJ
WE1FOiBDb25zaWRlciBtb3ZpbmcgYWxvbmdzaWRlIENvbXBhcmFibGVBU0NJSUxpdGVyYWwgYW5k
IHJlbmFtaW5nLiBNYXliZSB0byBDb21wYXJhYmxlUGFja2VkTG93ZXJjYXNlQVNDSUlMaXRlcmFs
PyAoRXZlbiB0aGF0IG5hbWUgZG9lc24ndCBtYWtlIGNsZWFyIGNvbXBhcmlzb24gaXMgQVNDSUkg
Y2FzZSBpbnNlbnNpdGl2ZS4pCiB0ZW1wbGF0ZTx0eXBlbmFtZSBTdG9yYWdlSW50ZWdlcj4KIGNs
YXNzIFBhY2tlZEFTQ0lJTG93ZXJDb2RlcyB7CiBwdWJsaWM6CkBAIC0xMTIsMTkgKzExMSwxNCBA
QCBwcml2YXRlOgogICAgIFN0b3JhZ2VJbnRlZ2VyIG1fdmFsdWUgeyAwIH07CiB9OwogCi11c2lu
ZyBTY3JpcHROYW1lID0gUGFja2VkQVNDSUlMb3dlckNvZGVzPHVpbnQzMl90PjsKLXN0cnVjdCBT
Y3JpcHROYW1lQ29kZSB7Ci0gICAgU2NyaXB0TmFtZSBuYW1lOwotICAgIFVTY3JpcHRDb2RlIGNv
ZGU7Ci19OwotCi1VU2NyaXB0Q29kZSBzY3JpcHROYW1lVG9Db2RlKGNvbnN0IFN0cmluZyYgc2Ny
aXB0TmFtZSkKK1VTY3JpcHRDb2RlIHNjcmlwdE5hbWVUb0NvZGUoU3RyaW5nVmlldyBzY3JpcHRO
YW1lKQogewogICAgIC8vIFRoaXMgZ2VuZXJhbGx5IG1hcHMgYW4gSVNPIDE1OTI0IHNjcmlwdCBj
b2RlIHRvIGl0cyBVU2NyaXB0Q29kZSwgYnV0IGNlcnRhaW4gZmFtaWxpZXMgb2Ygc2NyaXB0IGNv
ZGVzIGFyZQogICAgIC8vIHRyZWF0ZWQgYXMgYSBzaW5nbGUgc2NyaXB0IGZvciBhc3NpZ25pbmcg
YSBwZXItc2NyaXB0IGZvbnQgaW4gU2V0dGluZ3MuIEZvciBleGFtcGxlLCAiaGlyYSIgaXMgbWFw
cGVkIHRvCiAgICAgLy8gVVNDUklQVF9LQVRBS0FOQV9PUl9ISVJBR0FOQSBpbnN0ZWFkIG9mIFVT
Q1JJUFRfSElSQUdBTkEsIHNpbmNlIHdlIHdhbnQgYWxsIEphcGFuZXNlIHNjcmlwdHMgdG8gYmUg
cmVuZGVyZWQKICAgICAvLyB1c2luZyB0aGUgc2FtZSBmb250IHNldHRpbmcuCi0gICAgc3RhdGlj
IGNvbnN0ZXhwciBTY3JpcHROYW1lQ29kZSBzY3JpcHROYW1lQ29kZUxpc3RbXSA9IHsKKyAgICB1
c2luZyBTY3JpcHROYW1lID0gUGFja2VkQVNDSUlMb3dlckNvZGVzPHVpbnQzMl90PjsKKyAgICBz
dGF0aWMgY29uc3RleHByIHN0ZDo6cGFpcjxTY3JpcHROYW1lLCBVU2NyaXB0Q29kZT4gc2NyaXB0
TmFtZUNvZGVMaXN0W10gPSB7CiAgICAgICAgIHsgImFyYWIiLCBVU0NSSVBUX0FSQUJJQyB9LAog
ICAgICAgICB7ICJhcm1uIiwgVVNDUklQVF9BUk1FTklBTiB9LAogICAgICAgICB7ICJiYWxpIiwg
VVNDUklQVF9CQUxJTkVTRSB9LApAQCAtMjMyLDM4ICsyMjYsMTYgQEAgVVNjcmlwdENvZGUgc2Ny
aXB0TmFtZVRvQ29kZShjb25zdCBTdHJpbmcmIHNjcmlwdE5hbWUpCiAgICAgICAgIHsgInp5eXki
LCBVU0NSSVBUX0NPTU1PTiB9LAogICAgICAgICB7ICJ6enp6IiwgVVNDUklQVF9VTktOT1dOIH0s
CiAgICAgfTsKLQogICAgIHN0YXRpY19hc3NlcnQoU2NyaXB0TmFtZSgiYXJhYiIpLnZhbHVlKCkg
PT0gMHg2MTcyNjE2MlUpOwogICAgIHN0YXRpY19hc3NlcnQoU2NyaXB0TmFtZSgienp6eiIpLnZh
bHVlKCkgPT0gMHg3YTdhN2E3YVUpOwotCi0gICAgQVNTRVJUKAotICAgICAgICBzdGQ6OmlzX3Nv
cnRlZChzdGQ6OmJlZ2luKHNjcmlwdE5hbWVDb2RlTGlzdCksIHN0ZDo6ZW5kKHNjcmlwdE5hbWVD
b2RlTGlzdCksCi0gICAgICAgICAgICBbXShjb25zdCBTY3JpcHROYW1lQ29kZSYgYSwgY29uc3Qg
U2NyaXB0TmFtZUNvZGUmIGIpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lIDwgYi5u
YW1lOwotICAgICAgICAgICAgfSkpOwotCi0gICAgYXV0byBuYW1lID0gU2NyaXB0TmFtZTo6cGFy
c2Uoc2NyaXB0TmFtZSk7Ci0gICAgaWYgKCFuYW1lKQotICAgICAgICByZXR1cm4gVVNDUklQVF9J
TlZBTElEX0NPREU7Ci0KLSAgICBhdXRvKiBlbGVtZW50ID0gdHJ5QmluYXJ5U2VhcmNoPFNjcmlw
dE5hbWVDb2RlPihzY3JpcHROYW1lQ29kZUxpc3QsIHN0ZDo6c2l6ZShzY3JpcHROYW1lQ29kZUxp
c3QpLCBuYW1lLnZhbHVlKCksCi0gICAgICAgIFtdKGNvbnN0IFNjcmlwdE5hbWVDb2RlKiBzY3Jp
cHROYW1lQ29kZSkgewotICAgICAgICAgICAgcmV0dXJuIHNjcmlwdE5hbWVDb2RlLT5uYW1lOwot
ICAgICAgICB9KTsKLSAgICBpZiAoZWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmNv
ZGU7Ci0gICAgcmV0dXJuIFVTQ1JJUFRfSU5WQUxJRF9DT0RFOworICAgIFNvcnRlZEFycmF5TWFw
IG1hcCB7IHNjcmlwdE5hbWVDb2RlTGlzdCB9OworICAgIHJldHVybiBtYXAuZ2V0KHNjcmlwdE5h
bWUsIFVTQ1JJUFRfSU5WQUxJRF9DT0RFKTsKIH0KIAotdXNpbmcgTG9jYWxlTmFtZSA9IFBhY2tl
ZEFTQ0lJTG93ZXJDb2Rlczx1aW50NjRfdD47Ci1zdHJ1Y3QgTG9jYWxlU2NyaXB0IHsKLSAgICBM
b2NhbGVOYW1lIGxvY2FsZTsKLSAgICBVU2NyaXB0Q29kZSBzY3JpcHQ7Ci19OwotCiBVU2NyaXB0
Q29kZSBsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9uKGNvbnN0IFN0cmluZyYgbG9j
YWxlKQogewotICAgIHN0YXRpYyBjb25zdGV4cHIgTG9jYWxlU2NyaXB0IGxvY2FsZVNjcmlwdExp
c3RbXSA9IHsKKyAgICB1c2luZyBMb2NhbGVOYW1lID0gUGFja2VkQVNDSUlMb3dlckNvZGVzPHVp
bnQ2NF90PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6cGFpcjxMb2NhbGVOYW1lLCBVU2Ny
aXB0Q29kZT4gbG9jYWxlU2NyaXB0TGlzdFtdID0gewogICAgICAgICB7ICJhYSIsIFVTQ1JJUFRf
TEFUSU4gfSwKICAgICAgICAgeyAiYWIiLCBVU0NSSVBUX0NZUklMTElDIH0sCiAgICAgICAgIHsg
ImFkeSIsIFVTQ1JJUFRfQ1lSSUxMSUMgfSwKQEAgLTQ2MywzNSArNDM1LDE0IEBAIFVTY3JpcHRD
b2RlIGxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24oY29uc3QgU3RyaW5nJiBsb2Nh
bGUpCiAgICAgICAgIHsgInpoX3R3IiwgVVNDUklQVF9UUkFESVRJT05BTF9IQU4gfSwKICAgICAg
ICAgeyAienUiLCBVU0NSSVBUX0xBVElOIH0sCiAgICAgfTsKLQogICAgIHN0YXRpY19hc3NlcnQo
TG9jYWxlTmFtZSgiYWEiKS52YWx1ZSgpID09IDB4NjE2MTAwMDAwMDAwMDAwMFVMTCk7CiAgICAg
c3RhdGljX2Fzc2VydChMb2NhbGVOYW1lKCJ6aF90dyIpLnZhbHVlKCkgPT0gMHg3YTY4NWY3NDc3
MDAwMDAwVUxMKTsKLQotICAgIEFTU0VSVCgKLSAgICAgICAgc3RkOjppc19zb3J0ZWQoc3RkOjpi
ZWdpbihsb2NhbGVTY3JpcHRMaXN0KSwgc3RkOjplbmQobG9jYWxlU2NyaXB0TGlzdCksCi0gICAg
ICAgICAgICBbXShjb25zdCBMb2NhbGVTY3JpcHQmIGEsIGNvbnN0IExvY2FsZVNjcmlwdCYgYikg
ewotICAgICAgICAgICAgICAgIHJldHVybiBhLmxvY2FsZSA8IGIubG9jYWxlOwotICAgICAgICAg
ICAgfSkpOwotCi0gICAgYXV0byB0cnlGaW5kU2NyaXB0Q29kZSA9IFsmXSAoY29uc3QgU3RyaW5n
JiBzdHJpbmcpIC0+IE9wdGlvbmFsPFVTY3JpcHRDb2RlPiB7Ci0gICAgICAgIGF1dG8gbG9jYWxl
TmFtZSA9IExvY2FsZU5hbWU6OnBhcnNlKHN0cmluZyk7Ci0gICAgICAgIGlmICghbG9jYWxlTmFt
ZSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICAgICAgYXV0byogZWxl
bWVudCA9IHRyeUJpbmFyeVNlYXJjaDxMb2NhbGVTY3JpcHQ+KGxvY2FsZVNjcmlwdExpc3QsIHN0
ZDo6c2l6ZShsb2NhbGVTY3JpcHRMaXN0KSwgbG9jYWxlTmFtZS52YWx1ZSgpLAotICAgICAgICAg
ICAgW10oY29uc3QgTG9jYWxlU2NyaXB0KiBsb2NhbGVTY3JpcHQpIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gbG9jYWxlU2NyaXB0LT5sb2NhbGU7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAg
aWYgKGVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gZWxlbWVudC0+c2NyaXB0OwotICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIH07Ci0KLSAgICBTdHJpbmcgY2Fub25pY2FsTG9j
YWxlID0gbG9jYWxlOwotICAgIGNhbm9uaWNhbExvY2FsZS5yZXBsYWNlKCctJywgJ18nKTsKLSAg
ICB3aGlsZSAoIWNhbm9uaWNhbExvY2FsZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKGF1dG8g
c2NyaXB0Q29kZSA9IHRyeUZpbmRTY3JpcHRDb2RlKGNhbm9uaWNhbExvY2FsZSkpCi0gICAgICAg
ICAgICByZXR1cm4gc2NyaXB0Q29kZS52YWx1ZSgpOworICAgIFNvcnRlZEFycmF5TWFwIG1hcCB7
IGxvY2FsZVNjcmlwdExpc3QgfTsKKyAgICBTdHJpbmcgY2Fub25pY2FsTG9jYWxlU3RyaW5nID0g
bG9jYWxlOworICAgIGNhbm9uaWNhbExvY2FsZVN0cmluZy5yZXBsYWNlKCctJywgJ18nKTsKKyAg
ICBmb3IgKFN0cmluZ1ZpZXcgY2Fub25pY2FsTG9jYWxlID0gY2Fub25pY2FsTG9jYWxlU3RyaW5n
OyAhY2Fub25pY2FsTG9jYWxlLmlzRW1wdHkoKTsgKSB7CisgICAgICAgIGlmIChhdXRvIHNjcmlw
dENvZGUgPSBtYXAudHJ5R2V0KGNhbm9uaWNhbExvY2FsZSkpCisgICAgICAgICAgICByZXR1cm4g
KnNjcmlwdENvZGU7CiAgICAgICAgIGF1dG8gdW5kZXJzY29yZVBvc2l0aW9uID0gY2Fub25pY2Fs
TG9jYWxlLnJldmVyc2VGaW5kKCdfJyk7CiAgICAgICAgIGlmICh1bmRlcnNjb3JlUG9zaXRpb24g
PT0gbm90Rm91bmQpCiAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZy5oCmluZGV4IDczMDA2ZDIzNTc2
YTVjNjg4Y2JiNzliOTM5MjVkNmFiNzgzY2I3MGUuLjE0YWY2YTU3ZmMzMmRjZmYyOWYwOWIwZWY2
MWYyZjQ4NWMzNjhmNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
TG9jYWxlVG9TY3JpcHRNYXBwaW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmcuaApAQCAtMjgsOCArMjgsNyBAQAogICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KICAqLwogCi0jaWZuZGVmIExvY2FsZVRvU2NyaXB0TWFwcGluZ19oCi0jZGVmaW5lIExvY2Fs
ZVRvU2NyaXB0TWFwcGluZ19oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHVuaWNvZGUvdXNj
cmlwdC5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC0zNyw4ICszNiw2IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIFVTY3JpcHRDb2RlIGxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRT
ZWxlY3Rpb24oY29uc3QgU3RyaW5nJik7Ci1XRUJDT1JFX0VYUE9SVCBVU2NyaXB0Q29kZSBzY3Jp
cHROYW1lVG9Db2RlKGNvbnN0IFN0cmluZyYpOworV0VCQ09SRV9FWFBPUlQgVVNjcmlwdENvZGUg
c2NyaXB0TmFtZVRvQ29kZShTdHJpbmdWaWV3KTsKIAogfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5h
Z2VyLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVt
ZW50TWFuYWdlci5oCmluZGV4IGJhMTdjODI3ZTkzYzExMmZiMzFmMGI1OWJkOTQ0MjkzODY2NTdi
YTQuLmRhNDE1N2JmODZhYTRkNmUwMmFmOTZmZTkzMTQxZTY4ZjkxYWVjOTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5h
Z2VyLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFz
dXJlbWVudE1hbmFnZXIuaApAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvVGlt
ZXIuaD4KICNpbmNsdWRlIDxwYWwvU2Vzc2lvbklELmg+CiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRp
b25IYW5kbGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmggYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmgKaW5kZXggZDQ0
OTUwNDQ2M2ZmZTBkOTlkYmVjYWE0NDc3YjA1M2FjNmM1NzU2NC4uMzc3ZDMzNzk5ZjdiYjVkY2U2
Y2U1YjkwNmEzN2U1MjQ4ZTUwOTFhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50
cnkuaApAQCAtMjksNyArMjksNiBAQAogCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlU3RvcmFnZS5o
IgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+Ci0jaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvVVJMLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMu
bW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQpp
bmRleCAxZThmNTVmZDBjODQwMGMyZWFlNDA4YzVhYjY5MjVlMWYyNzkwNGY3Li42MGYyMjA5YTY5
MGY1YmVmZDI0YWQ2ZGJiNzdmN2FlYTBhMjA4NjM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQpAQCAtOTUsNiArOTUsNyBAQAog
I2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9OU0FjY2Vzc2liaWxpdHlTUEkuaD4KICNpbXBvcnQgPHBh
bC9zcGkvbWFjL05TQXBwbGljYXRpb25TUEkuaD4KICNpbXBvcnQgPHd0Zi9TZXRGb3JTY29wZS5o
PgorI2ltcG9ydCA8d3RmL1NvcnRlZEFycmF5TWFwLmg+CiAKICNpZiBFTkFCTEUoV0lSRUxFU1Nf
UExBWUJBQ0tfVEFSR0VUKQogI2ltcG9ydCA8V2ViQ29yZS9NZWRpYVBsYXliYWNrVGFyZ2V0Q29j
b2EuaD4KQEAgLTIwNywzMiArMjA4LDIyIEBAIGJvb2wgV2ViUGFnZTo6c2hvdWxkVXNlUERGUGx1
Z2luKGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUsIFN0cmluZ1ZpZXcgcGF0aCkgY29uCiAgICAg
ICAgICAgICAgICAgJiYgKHBhdGguZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgiLnBkZiIpIHx8
IHBhdGguZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgiLnBzIikpKSk7CiB9CiAKLXR5cGVkZWYg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gU2VsZWN0b3JOYW1lTWFwOwotCi0vLyBNYXAgc2VsZWN0
b3JzIGludG8gRWRpdG9yIGNvbW1hbmQgbmFtZXMuCi0vLyBUaGlzIGlzIG5vdCBuZWVkZWQgZm9y
IGFueSBzZWxlY3RvcnMgdGhhdCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgdGhlIEVkaXRvciBjb21t
YW5kLgotc3RhdGljIGNvbnN0IFNlbGVjdG9yTmFtZU1hcCogY3JlYXRlU2VsZWN0b3JFeGNlcHRp
b25NYXAoKQotewotICAgIFNlbGVjdG9yTmFtZU1hcCogbWFwID0gbmV3IEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+OwotCi0gICAgbWFwLT5hZGQoImluc2VydE5ld2xpbmVJZ25vcmluZ0ZpZWxkRWRp
dG9yOiIsICJJbnNlcnROZXdsaW5lIik7Ci0gICAgbWFwLT5hZGQoImluc2VydFBhcmFncmFwaFNl
cGFyYXRvcjoiLCAiSW5zZXJ0TmV3bGluZSIpOwotICAgIG1hcC0+YWRkKCJpbnNlcnRUYWJJZ25v
cmluZ0ZpZWxkRWRpdG9yOiIsICJJbnNlcnRUYWIiKTsKLSAgICBtYXAtPmFkZCgicGFnZURvd246
IiwgIk1vdmVQYWdlRG93biIpOwotICAgIG1hcC0+YWRkKCJwYWdlRG93bkFuZE1vZGlmeVNlbGVj
dGlvbjoiLCAiTW92ZVBhZ2VEb3duQW5kTW9kaWZ5U2VsZWN0aW9uIik7Ci0gICAgbWFwLT5hZGQo
InBhZ2VVcDoiLCAiTW92ZVBhZ2VVcCIpOwotICAgIG1hcC0+YWRkKCJwYWdlVXBBbmRNb2RpZnlT
ZWxlY3Rpb246IiwgIk1vdmVQYWdlVXBBbmRNb2RpZnlTZWxlY3Rpb24iKTsKLQotICAgIHJldHVy
biBtYXA7Ci19Ci0KIHN0YXRpYyBTdHJpbmcgY29tbWFuZE5hbWVGb3JTZWxlY3Rvck5hbWUoY29u
c3QgU3RyaW5nJiBzZWxlY3Rvck5hbWUpCiB7Ci0gICAgLy8gQ2hlY2sgdGhlIGV4Y2VwdGlvbiBt
YXAgZmlyc3QuCi0gICAgc3RhdGljIGNvbnN0IFNlbGVjdG9yTmFtZU1hcCogZXhjZXB0aW9uTWFw
ID0gY3JlYXRlU2VsZWN0b3JFeGNlcHRpb25NYXAoKTsKLSAgICBTZWxlY3Rvck5hbWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gZXhjZXB0aW9uTWFwLT5maW5kKHNlbGVjdG9yTmFtZSk7Ci0gICAg
aWYgKGl0ICE9IGV4Y2VwdGlvbk1hcC0+ZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+dmFsdWU7
CisgICAgLy8gTWFwIHNlbGVjdG9ycyBpbnRvIEVkaXRvciBjb21tYW5kIG5hbWVzLgorICAgIC8v
IFRoaXMgaXMgbm90IG5lZWRlZCBmb3IgYW55IHNlbGVjdG9ycyB0aGF0IGhhdmUgdGhlIHNhbWUg
bmFtZSBhcyB0aGUgRWRpdG9yIGNvbW1hbmQuCisgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OnBh
aXI8Q29tcGFyYWJsZUFTQ0lJTGl0ZXJhbCwgQVNDSUlMaXRlcmFsPiBzZWxlY3RvckV4Y2VwdGlv
bnNbXSA9IHsKKyAgICAgICAgeyAiaW5zZXJ0TmV3bGluZUlnbm9yaW5nRmllbGRFZGl0b3I6Iiwg
Ikluc2VydE5ld2xpbmUiX3MgfSwKKyAgICAgICAgeyAiaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9y
OiIsICJJbnNlcnROZXdsaW5lIl9zIH0sCisgICAgICAgIHsgImluc2VydFRhYklnbm9yaW5nRmll
bGRFZGl0b3I6IiwgIkluc2VydFRhYiJfcyB9LAorICAgICAgICB7ICJwYWdlRG93bjoiLCAiTW92
ZVBhZ2VEb3duIl9zIH0sCisgICAgICAgIHsgInBhZ2VEb3duQW5kTW9kaWZ5U2VsZWN0aW9uOiIs
ICJNb3ZlUGFnZURvd25BbmRNb2RpZnlTZWxlY3Rpb24iX3MgfSwKKyAgICAgICAgeyAicGFnZVVw
OiIsICJNb3ZlUGFnZVVwIl9zIH0sCisgICAgICAgIHsgInBhZ2VVcEFuZE1vZGlmeVNlbGVjdGlv
bjoiLCAiTW92ZVBhZ2VVcEFuZE1vZGlmeVNlbGVjdGlvbiJfcyB9LAorICAgIH07CisgICAgU29y
dGVkQXJyYXlNYXAgbWFwIHsgc2VsZWN0b3JFeGNlcHRpb25zIH07CisgICAgaWYgKGF1dG8gY29t
bWFuZE5hbWUgPSBtYXAudHJ5R2V0KHNlbGVjdG9yTmFtZSkpCisgICAgICAgIHJldHVybiAqY29t
bWFuZE5hbWU7CiAKICAgICAvLyBSZW1vdmUgdGhlIHRyYWlsaW5nIGNvbG9uLgogICAgIC8vIE5v
IG5lZWQgdG8gY2FwaXRhbGl6ZSB0aGUgY29tbWFuZCBuYW1lIHNpbmNlIEVkaXRvciBjb21tYW5k
IG5hbWVzIGFyZSBub3QgY2FzZSBzZW5zaXRpdmUuCg==
</data>
<flag name="commit-queue"
          id="446655"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426387</attachid>
            <date>2021-04-18 16:15:59 -0700</date>
            <delta_ts>2021-04-18 16:41:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224733-20210418161559.patch</filename>
            <type>text/plain</type>
            <size>26922</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2MjI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDYyMGZkYzY1YmE3Yzg5YWIzYzg0Mzc0
ZDE1NzI3ZjQyOTcyZmY4MDUuLmRhNDViMjZiY2Y3ZTZiNjIzMTBlMTE3MzYzNzlhNTVmMjFjMmI5
MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMjEtMDQtMTggIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIHNvcnRlZCBhcnJheSBtYXBwaW5nIG1hY2hp
bmVyeSBpbiBMb2NhbGVUb1NjcmlwdE1hcHBpbmcuY3BwIGZvciByZXVzZSBlbHNld2hlcmUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDczMworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6IEFkZGVkIFNvcnRlZEFycmF5TWFwLmNwcC9oLgorICAgICAg
ICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDogRGl0dG8uCisKKyAgICAgICAgKiB3dGYvU29ydGVkQXJy
YXlNYXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvU29ydGVkQXJyYXlNYXAuaDogQWRkZWQu
IEJ1aWxkcyBvbiB0aGUgaWRpb20gaW4gTG9jYWxUb1NjcmlwdE1hcHBpbmcsIGFuZCB0byBiZQor
ICAgICAgICBnZW5lcmljIHVzZXMgc3RkOjpwYWlyIGluc3RlYWQgb2YgY3VzdG9tIHN0cnVjdHVy
ZXMuIEFsc28gYXNzZXJ0cyB0aGF0IG5vIHR3byBpdGVtcworICAgICAgICBpbiB0aGUgYXJyYXkg
aGF2ZSBlcXVhbCBrZXlzLiBJbmNsdWRlcyB0aGUgQ29tcGFyYWJsZUFTQ0lJTGl0ZXJhbCBzdHJ1
Y3R1cmUgdGhhdCBjYW4KKyAgICAgICAgYmUgdXNlZCB0byBtYWtlIG1hcHMgdGhhdCBhcmUga2V5
ZWQgYnkgY2FzZS1zZW5zaXRpdmUgQVNDSUkgc3RyaW5ncy4KKworICAgICAgICAqIHd0Zi9TdGRM
aWJFeHRyYXMuaDoKKyAgICAgICAgKFdURjo6YmluYXJ5U2VhcmNoSW1wbCk6IFVzZSBhdXRvIGlu
IG9uZSBwbGFjZSB0byBtYWtlIHRoaXMgYSBiaXQgbW9yZSBnZW5lcmljLgorCiAyMDIxLTA0LTE3
ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXMgdG8gU2V0dGluZ3MgKFBhcnQgMSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhNGViZTU1
MjI4NDdkMGNkNWJiMDA3Y2NiM2Y5YmQ5MjJkY2M2NmRmLi40NzEzYzhhZTAyMGZlNzI1NzJhZWYx
MDgzYmJiMzI5N2I4NDc2M2UxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjEtMDQt
MTggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIHNv
cnRlZCBhcnJheSBtYXBwaW5nIG1hY2hpbmVyeSBpbiBMb2NhbGVUb1NjcmlwdE1hcHBpbmcuY3Bw
IGZvciByZXVzZSBlbHNld2hlcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyNDczMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6c2NyaXB0TmFtZVRvQ29kZSk6IFJlZmFjdG9yIHRvIHVzZSBTb3J0
ZWRBcnJheU1hcC4gQWxzbyBjaGFuZ2VkIHRvIHRha2UgU3RyaW5nVmlldy4KKyAgICAgICAgKFdl
YkNvcmU6OmxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24pOiBEaXR0by4gQ3V0IGRv
d24gb24gbWVtb3J5IGFsbG9jYXRpb24gYnkgdXNpbmcKKyAgICAgICAgU3RyaW5nVmlldyBpbnN0
ZWFkIG9mIFN0cmluZyB3aGlsZSBsb29waW5nIHRocm91Z2ggc3Vic3RyaW5ncy4KKworICAgICAg
ICAqIHBsYXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmg6IENoYW5nZWQgc2NyaXB0
TmFtZVRvQ29kZSB0byB0YWtlIFN0cmluZ1ZpZXcuCisKIDIwMjEtMDQtMTggIENhdGhpZSBDaGVu
ICA8Y2F0aGllY2hlbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFRoZSBpbXBsaWNpdCBhc3BlY3Qt
cmF0aW8gZnJvbSB3aWR0aCBhbmQgaGVpZ2h0IGF0dHJpYnV0ZXMgd2l0aCBmbG9hdCB2YWx1ZSBp
cyBub3QgYWNjdXJhdGUgZW5vdWdoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGYzYWM4MTBiMzU0MmZkM2Q1YzVjOTc5
OTg1ZTAzMDgzMzYwMmU3YjkuLmI1Y2ZkOGVhZGQ1NmY3NGJmMGNmMjE0NjEwMmQ5YzA4YTgwNDYx
M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjEtMDQtMTggIERhcmluIEFkbGVyICA8
ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIHNvcnRlZCBhcnJheSBtYXBwaW5n
IG1hY2hpbmVyeSBpbiBMb2NhbGVUb1NjcmlwdE1hcHBpbmcuY3BwIGZvciByZXVzZSBlbHNld2hl
cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDcz
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmg6IFJlbW92ZWQgdW51
c2VkIGluY2x1ZGUgb2YgSGFzaE1hcC5oLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5Lmg6IERpdHRvLgorCisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpjcmVh
dGVTZWxlY3RvckV4Y2VwdGlvbk1hcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OmNvbW1h
bmROYW1lRm9yU2VsZWN0b3JOYW1lKTogVXNlIFNvcnRlZEFycmF5TWFwIGluc3RlYWQgb2YgSGFz
aE1hcC4KKwogMjAyMS0wNC0xOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAg
ICAgICAgIFVwZGF0ZSBMaWJXZWJSVENDb2RlY3NQcm94eSB0byB1c2UgYSBMb2NrCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dU
Ri9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2NzNhOWU2ZGY5YjI2YWUyM2Jl
OTJlZThkMDc5MzU0YWZjMTFlYTk2Li45Yjk5YWRjYWNkMDViNTEyZTBmOGJmNzhhY2I4MjYxMjMx
MzAyNmI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTk4
LDYgKzk4LDcgQEAKIAkJODM0OEJBMEUyMUZCQzBENTAwRkQzMDU0IC8qIE9iamVjdElkZW50aWZp
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM0
OEJBMEQyMUZCQzBENDAwRkQzMDU0IC8qIE9iamVjdElkZW50aWZpZXIuY3BwICovOyB9OwogCQk5
MzkzNEJEMzE4QTFFOEMzMDBEMEQ2QTEgLyogU3RyaW5nVmlld0NvY29hLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM5MzRCRDIxOEExRThDMzAwRDBE
NkExIC8qIFN0cmluZ1ZpZXdDb2NvYS5tbSAqLzsgfTsKIAkJOTM5MzRCRDUxOEExRjE2OTAwRDBE
NkExIC8qIFN0cmluZ1ZpZXdDRi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5MzkzNEJENDE4QTFGMTY5MDBEMEQ2QTEgLyogU3RyaW5nVmlld0NGLmNw
cCAqLzsgfTsKKwkJOTM5RTREMTkyNjJDRjJEMzAwNzEzMUY1IC8qIFNvcnRlZEFycmF5TWFwLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzOUU0RDE4
MjYyQ0YyQ0MwMDcxMzFGNSAvKiBTb3J0ZWRBcnJheU1hcC5jcHAgKi87IH07CiAJCTkzQjVCNDRF
MjIxM0Q2MTYwMDRCN0FBNyAvKiBIZXhOdW1iZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNUI0NEQyMjEzRDYxNjAwNEI3QUE3IC8qIEhleE51
bWJlci5jcHAgKi87IH07CiAJCTkzQjVCNDUxMjIxNzFFRUEwMDRCN0FBNyAvKiBMb2dnZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNUI0NTAy
MjE3MUVFOTAwNEI3QUE3IC8qIExvZ2dlci5jcHAgKi87IH07CiAJCTkzRjE5OTNFMTlENzk1OEQw
MEMyMzkwQiAvKiBTdHJpbmdWaWV3LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzRjE5OTNEMTlENzk1OEQwMEMyMzkwQiAvKiBTdHJpbmdWaWV3LmNw
cCAqLzsgfTsKQEAgLTQ4NywxMSArNDg4LDEzIEBACiAJCTgzRjJCQURFMUNGOTUyNEUwMDNFOTlD
MyAvKiBGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGdW5jdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4M0ZCQTkzMTE5REY0NTk3MDBGMzBB
REIgLyogVHlwZUNhc3RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVD
YXN0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkY0NkY1RjFBMjg0MEVFMDBD
Q0JGMjIgLyogUmVmQ291bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZWZDb3VudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzMTU2QzhEMjYyQzk4
MjIwMEVBRTI3QiAvKiBTb3J0ZWRBcnJheU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3J0ZWRBcnJh
eU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzI0MTY1NzI0M0JDMkU1MDAz
MkZBQUUgLyogVmVjdG9yQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmVjdG9yQ29jb2EuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMzRDYzMTkxRkNCNkFCOTAwMzJFQ0Q2IC8qIFN0
cmluZ0hhc2hlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdIYXNo
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM4NEI3M0UyMERFQTI4NDAwNUI3
M0IyIC8qIENGWFBDQnJpZGdlU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENGWFBDQnJpZGdlU1BJLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzOTM0QkQyMThBMUU4QzMwMEQwRDZBMSAv
KiBTdHJpbmdWaWV3Q29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBTdHJpbmdWaWV3Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkz
OTM0QkQ0MThBMUYxNjkwMEQwRDZBMSAvKiBTdHJpbmdWaWV3Q0YuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RyaW5nVmlld0NGLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJOTM5RTREMTgyNjJDRjJDQzAwNzEzMUY1IC8qIFNvcnRlZEFycmF5TWFw
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvcnRlZEFycmF5TWFwLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOTNBQzkxQTcxODk0MkZDNDAwMjQ0OTM5IC8qIExDaGFyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExDaGFyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTkzQjVCNDREMjIxM0Q2MTYwMDRCN0FBNyAvKiBIZXhOdW1iZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGV4TnVtYmVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNCNUI0NTAyMjE3MUVFOTAwNEI3QUE3IC8qIExvZ2dl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb2dnZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI0NCw2ICsxMjQ3LDggQEAKIAkJCQkwRkE2
RjM5MjIwQ0M3M0EyMDBBMDNEQ0QgLyogU21hbGxQdHJTZXQuY3BwICovLAogCQkJCTc5MzZENkE5
MUM5OUY4QUUwMDBEMUFFRCAvKiBTbWFsbFB0clNldC5oICovLAogCQkJCUEzMEQ0MTJEMUYwREUx
M0YwMEI3MTk1NCAvKiBTb2Z0TGlua2luZy5oICovLAorCQkJCTkzOUU0RDE4MjYyQ0YyQ0MwMDcx
MzFGNSAvKiBTb3J0ZWRBcnJheU1hcC5jcHAgKi8sCisJCQkJOTMxNTZDOEQyNjJDOTgyMjAwRUFF
MjdCIC8qIFNvcnRlZEFycmF5TWFwLmggKi8sCiAJCQkJNzkwMzhFMDUyMjRCMDVBNzAwNEMwNzM4
IC8qIFNwYW5uaW5nVHJlZS5oICovLAogCQkJCUE4QTQ3MzBEMTUxQTgyNUIwMDQxMjNGRiAvKiBT
cGVjdHJ1bS5oICovLAogCQkJCUE4QTQ3MzBFMTUxQTgyNUIwMDQxMjNGRiAvKiBTdGFja0JvdW5k
cy5jcHAgKi8sCkBAIC0xNzU2LDYgKzE3NjEsNyBAQAogCQkJCUE3NDg3NDUyMTdBMEJEQUUwMEZB
MDRDQiAvKiBTaXhDaGFyYWN0ZXJIYXNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDI1
MTUxQTgyNUIwMDQxMjNGRiAvKiBTaXplTGltaXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
QTZGMzkzMjBDQzczQTMwMEEwM0RDRCAvKiBTbWFsbFB0clNldC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk5MzlFNEQxOTI2MkNGMkQzMDA3MTMxRjUgLyogU29ydGVkQXJyYXlNYXAuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQThBNDc0MjcxNTFBODI1QjAwNDEyM0ZGIC8qIFN0YWNrQm91bmRzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUZFRUE0REY5MjE2RDdCRTQwMEFDMDYwMiAvKiBTdGFja1Bv
aW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkVEQUNEM0QxNjMwRjgzRjAwQzY5NjM0IC8q
IFN0YWNrU3RhdHMuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IGEz
MDU5ZTliYmY2ZmNlMjAyMTcxZmM0MjcwYmQxOTQ4Yzk0MjI5YWEuLmE5YjU5MGUzZDQyYWEwMjYz
YTY4YmViMmFlYzYxNTUwYWFiNWFlMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtl
TGlzdHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC0yMzYsNiAr
MjM2LDcgQEAgc2V0KFdURl9QVUJMSUNfSEVBREVSUwogICAgIFNpeENoYXJhY3Rlckhhc2guaAog
ICAgIFNtYWxsUHRyU2V0LmgKICAgICBTb2Z0TGlua2luZy5oCisgICAgU29ydGVkQXJyYXlNYXAu
aAogICAgIFNwYW5uaW5nVHJlZS5oCiAgICAgU3BlY3RydW0uaAogICAgIFN0YWNrQm91bmRzLmgK
QEAgLTQzOSw2ICs0NDAsNyBAQCBzZXQoV1RGX1NPVVJDRVMKICAgICBTZWNvbmRzLmNwcAogICAg
IFNlZ21lbnRlZFZlY3Rvci5jcHAKICAgICBTaXhDaGFyYWN0ZXJIYXNoLmNwcAorICAgIFNvcnRl
ZEFycmF5TWFwLmNwcAogICAgIFNtYWxsUHRyU2V0LmNwcAogICAgIFN0YWNrQm91bmRzLmNwcAog
ICAgIFN0YWNrUG9pbnRlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1NvcnRlZEFy
cmF5TWFwLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1NvcnRlZEFycmF5TWFwLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42NGUxNjNkY2NkOWNmMTYzOWFiNGY1OGQ2YzdmMTM4MDUzOWQ5Y2ZkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dURi93dGYvU29ydGVkQXJyYXlNYXAuY3BwCkBAIC0wLDAgKzEsNDkgQEAK
Ky8qCisKK0NvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQorRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCitESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
K1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU29ydGVkQXJyYXlN
YXAuaCIKKworI2lmIEFTU0VSVF9FTkFCTEVECisKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgor
I2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgorI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2UgV1RGIHsKKworYm9vbCBzaG91bGRQ
ZXJmb3JtT25lVGltZUNoZWNrKHZvaWQqIGdsb2JhbE9iamVjdEFkZHJlc3MpCit7CisgICAgc3Rh
dGljIExvY2sgbG9jazsKKyAgICBhdXRvIGxvY2tIb2xkZXIgPSBob2xkTG9jayhsb2NrKTsKKyAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDx2b2lkKj4+IGNoZWNrZWRPYmplY3RzOwor
ICAgIHJldHVybiBjaGVja2VkT2JqZWN0cy5nZXQoKS5hZGQoZ2xvYmFsT2JqZWN0QWRkcmVzcyku
aXNOZXdFbnRyeTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L1NvcnRlZEFycmF5TWFwLmggYi9Tb3VyY2UvV1RGL3d0Zi9Tb3J0ZWRBcnJheU1hcC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjY1ZWNjMjY0MjRiMTc5NmY4OTIwOTUzYTIwMmVjMmI4ZjlkYzY5ZmYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Tb3J0ZWRBcnJheU1hcC5oCkBAIC0wLDAgKzEsMTQy
IEBACisvKgorCitDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKzIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKK0VYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
K0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdWaWV3Lmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBTb3J0ZWRBcnJheU1hcCBpcyBhIG1h
cCBsaWtlIEhhc2hNYXAsIGJ1dCBpdCdzIHJlYWQtb25seS4gSXQgdXNlcyBtdWNoIGxlc3MgbWVt
b3J5IHRoYW4gSGFzaE1hcC4KKy8vIEl0IHVzZXMgYmluYXJ5IHNlYXJjaCBpbnN0ZWFkIG9mIGhh
c2hpbmcsIHNvIGNhbiBiZSBvdXRwZXJmb3JtZWQgYnkgSGFzaE1hcCBmb3IgdmVyeSBsYXJnZSBh
cnJheXMuCisvLyBUaGUgZWxlbWVudHMgb2YgdGhlIGFycmF5IHBhc3NlZCB0byB0aGUgY29uc3Ry
dWN0b3Igc2hvdWxkIGJlIHN0ZDo6cGFpciwgd2l0aCBrZXlzIGZpcnN0IGFuZCB2YWx1ZXMgc2Vj
b25kLgorLy8gVGhlIGFycmF5IHNob3VsZCB0eXBpY2FsbHkgYmUgYSBnbG9iYWwgY29uc3RhbnQg
ZXhwcmVzc2lvbi4gVGhlIFNvcnRlZEFycmF5TWFwIG9iamVjdCBpdHNlbGYgaXMKKy8vIG5lYXJs
eSBmcmVlIHRvIGNyZWF0ZSBhbmQgZGVzdHJveSBhbmQgc28gdHlwaWNhbGx5IGRvZXMgbm90IG5l
ZWQgdG8gYmUgYSBnbG9iYWwuCisKK3RlbXBsYXRlPHR5cGVuYW1lIEFycmF5VHlwZT4gY2xhc3Mg
U29ydGVkQXJyYXlNYXAgeworcHVibGljOgorICAgIHVzaW5nIEVsZW1lbnRUeXBlID0gdHlwZW5h
bWUgc3RkOjpyZW1vdmVfZXh0ZW50X3Q8QXJyYXlUeXBlPjsKKyAgICB1c2luZyBWYWx1ZVR5cGUg
PSB0eXBlbmFtZSBFbGVtZW50VHlwZTo6c2Vjb25kX3R5cGU7CisKKyAgICBTb3J0ZWRBcnJheU1h
cChjb25zdCBBcnJheVR5cGUmKTsKKworICAgIC8vIEZJWE1FOiBUbyBtYXRjaCBIYXNoTWFwIGlu
dGVyZmFjZSBiZXR0ZXIsIHdvdWxkIGJlIG5pY2UgdG8gZ2V0IHRoZSBkZWZhdWx0IHZhbHVlIGZy
b20gdHJhaXRzLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZ3VtZW50PiBWYWx1ZVR5cGUg
Z2V0KGNvbnN0IEtleUFyZ3VtZW50JiwgY29uc3QgVmFsdWVUeXBlJiBkZWZhdWx0VmFsdWUgPSB7
IH0pIGNvbnN0OworCisgICAgLy8gRklYTUU6IFNob3VsZCBhZGQgYSBmdW5jdGlvbiBsaWtlIHRo
aXMgdG8gSGFzaE1hcCBzbyB0aGUgdHdvIGtpbmRzIG9mIG1hcHMgYXJlIG1vcmUgaW50ZXJjaGFu
Z2FibGUuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJndW1lbnQ+IGNvbnN0IFZhbHVlVHlw
ZSogdHJ5R2V0KGNvbnN0IEtleUFyZ3VtZW50JikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgY29u
c3QgQXJyYXlUeXBlJiBtX2FycmF5OworfTsKKworc3RydWN0IENvbXBhcmFibGVTdHJpbmdWaWV3
IHsKKyAgICBTdHJpbmdWaWV3IHN0cmluZzsKK307CisKK3N0cnVjdCBDb21wYXJhYmxlQVNDSUlM
aXRlcmFsIHsKKyAgICBjb25zdCBjaGFyKiBsaXRlcmFsOworICAgIHRlbXBsYXRlPHN0ZDo6c2l6
ZV90IHNpemU+IGNvbnN0ZXhwciBDb21wYXJhYmxlQVNDSUlMaXRlcmFsKGNvbnN0IGNoYXIgKCZj
aGFyYWN0ZXJzKVtzaXplXSkgOiBsaXRlcmFsIHsgY2hhcmFjdGVycyB9IHsgfQorICAgIHN0YXRp
YyBPcHRpb25hbDxDb21wYXJhYmxlU3RyaW5nVmlldz4gcGFyc2UoU3RyaW5nVmlldyBzdHJpbmcp
IHsgcmV0dXJuIHsgeyBzdHJpbmcgfSB9OyB9Cit9OworCitib29sIG9wZXJhdG9yPT0oQ29tcGFy
YWJsZUFTQ0lJTGl0ZXJhbCwgQ29tcGFyYWJsZUFTQ0lJTGl0ZXJhbCk7Citib29sIG9wZXJhdG9y
PChDb21wYXJhYmxlQVNDSUlMaXRlcmFsLCBDb21wYXJhYmxlQVNDSUlMaXRlcmFsKTsKK2Jvb2wg
b3BlcmF0b3I9PShDb21wYXJhYmxlU3RyaW5nVmlldywgQ29tcGFyYWJsZUFTQ0lJTGl0ZXJhbCk7
Citib29sIG9wZXJhdG9yPChDb21wYXJhYmxlU3RyaW5nVmlldywgQ29tcGFyYWJsZUFTQ0lJTGl0
ZXJhbCk7Citib29sIG9wZXJhdG9yIT0oQ29tcGFyYWJsZVN0cmluZ1ZpZXcsIENvbXBhcmFibGVB
U0NJSUxpdGVyYWwpOworYm9vbCBvcGVyYXRvcj09KENvbXBhcmFibGVBU0NJSUxpdGVyYWwsIENv
bXBhcmFibGVTdHJpbmdWaWV3KTsKKworV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgc2hvdWxkUGVy
Zm9ybU9uZVRpbWVDaGVjayh2b2lkKiBnbG9iYWxPYmplY3RBZGRyZXNzKTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgQXJyYXlUeXBlPiBTb3J0ZWRBcnJheU1hcDxBcnJheVR5cGU+OjpTb3J0ZWRBcnJh
eU1hcChjb25zdCBBcnJheVR5cGUmIGFycmF5KQorICAgIDogbV9hcnJheSB7IGFycmF5IH0KK3sK
KyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIGlmIChzaG91bGRQZXJmb3JtT25lVGltZUNoZWNrKCZh
cnJheSkpIHsKKyAgICAgICAgQVNTRVJUKHN0ZDo6aXNfc29ydGVkKHN0ZDo6YmVnaW4obV9hcnJh
eSksIHN0ZDo6ZW5kKG1fYXJyYXkpLCBbXSAoYXV0byYgYSwgYXV0byBiKSB7CisgICAgICAgICAg
ICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3Q7CisgICAgICAgIH0pKTsKKyAgICAgICAgQVNTRVJU
KHN0ZDo6YWRqYWNlbnRfZmluZChzdGQ6OmJlZ2luKG1fYXJyYXkpLCBzdGQ6OmVuZChtX2FycmF5
KSwgW10gKGF1dG8mIGEsIGF1dG8mIGIpIHsKKyAgICAgICAgICAgIHJldHVybiBhLmZpcnN0ID09
IGIuZmlyc3Q7CisgICAgICAgIH0pID09IHN0ZDo6ZW5kKG1fYXJyYXkpKTsKKyAgICB9CisjZW5k
aWYKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQXJyYXlUeXBlPiB0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXlBcmd1bWVudD4gaW5saW5lIGF1dG8gU29ydGVkQXJyYXlNYXA8QXJyYXlUeXBlPjo6dHJ5R2V0
KGNvbnN0IEtleUFyZ3VtZW50JiBrZXkpIGNvbnN0IC0+IGNvbnN0IFZhbHVlVHlwZSoKK3sKKyAg
ICBhdXRvIHBhcnNlZEtleSA9IEVsZW1lbnRUeXBlOjpmaXJzdF90eXBlOjpwYXJzZShrZXkpOwor
ICAgIGlmICghcGFyc2VkS2V5KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGVuaGFuY2UgdHJ5QmluYXJ5U2VhcmNoIHNvIGl0IGNhbiBkZWR1Y2UgRWxl
bWVudFR5cGUuCisgICAgLy8gRklYTUU6IElmIHRoZSBhcnJheSdzIHNpemUgaXMgc21hbGwgZW5v
dWdoLCBzaG91bGQgZG8gbGluZWFyIHNlYXJjaCBzaW5jZSBpdCBpcyBtb3JlIGVmZmljaWVudCB0
aGFuIGJpbmFyeSBzZWFyY2guCisgICAgYXV0byBlbGVtZW50ID0gdHJ5QmluYXJ5U2VhcmNoPEVs
ZW1lbnRUeXBlPihtX2FycmF5LCBzdGQ6OnNpemUobV9hcnJheSksICpwYXJzZWRLZXksIFtdIChh
dXRvKiBlbGVtZW50KSB7CisgICAgICAgIHJldHVybiBlbGVtZW50LT5maXJzdDsKKyAgICB9KTsK
KyAgICByZXR1cm4gZWxlbWVudCA/ICZlbGVtZW50LT5zZWNvbmQgOiBudWxscHRyOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBBcnJheVR5cGU+IHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZ3VtZW50
PiBpbmxpbmUgYXV0byBTb3J0ZWRBcnJheU1hcDxBcnJheVR5cGU+OjpnZXQoY29uc3QgS2V5QXJn
dW1lbnQmIGtleSwgY29uc3QgVmFsdWVUeXBlJiBkZWZhdWx0VmFsdWUpIGNvbnN0IC0+IFZhbHVl
VHlwZQoreworICAgIGF1dG8gcmVzdWx0ID0gdHJ5R2V0KGtleSk7CisgICAgcmV0dXJuIHJlc3Vs
dCA/ICpyZXN1bHQgOiBkZWZhdWx0VmFsdWU7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0o
Q29tcGFyYWJsZUFTQ0lJTGl0ZXJhbCBhLCBDb21wYXJhYmxlQVNDSUlMaXRlcmFsIGIpCit7Cisg
ICAgcmV0dXJuICFzdGQ6OnN0cmNtcChhLmxpdGVyYWwsIGIubGl0ZXJhbCk7Cit9CisKK2lubGlu
ZSBib29sIG9wZXJhdG9yPChDb21wYXJhYmxlQVNDSUlMaXRlcmFsIGEsIENvbXBhcmFibGVBU0NJ
SUxpdGVyYWwgYikKK3sKKyAgICByZXR1cm4gc3RkOjpzdHJjbXAoYS5saXRlcmFsLCBiLmxpdGVy
YWwpIDwgMDsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShDb21wYXJhYmxlU3RyaW5nVmll
dyBhLCBDb21wYXJhYmxlQVNDSUlMaXRlcmFsIGIpCit7CisgICAgcmV0dXJuIGEuc3RyaW5nID09
IGIubGl0ZXJhbDsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I8KENvbXBhcmFibGVTdHJpbmdW
aWV3IGEsIENvbXBhcmFibGVBU0NJSUxpdGVyYWwgYikKK3sKKyAgICByZXR1cm4gY29kZVBvaW50
Q29tcGFyZShhLnN0cmluZywgYi5saXRlcmFsKSA8IDA7Cit9CisKK2lubGluZSBib29sIG9wZXJh
dG9yIT0oQ29tcGFyYWJsZVN0cmluZ1ZpZXcgYSwgQ29tcGFyYWJsZUFTQ0lJTGl0ZXJhbCBiKQor
eworICAgIHJldHVybiAhKGEgPT0gYik7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oQ29t
cGFyYWJsZUFTQ0lJTGl0ZXJhbCBhLCBDb21wYXJhYmxlU3RyaW5nVmlldyBiKQoreworICAgIHJl
dHVybiBiID09IGE7Cit9CisKK30KKwordXNpbmcgV1RGOjpDb21wYXJhYmxlQVNDSUlMaXRlcmFs
OwordXNpbmcgV1RGOjpTb3J0ZWRBcnJheU1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L1N0ZExpYkV4dHJhcy5oIGIvU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgKaW5kZXggMTlk
NTQ5NDVkMTBhZjJhZjAyYjNjMjNjNGM3Y2RiYjhkZDQ0OTEwYi4uMzFkNGE2ODAxN2E0ZWE5YzAy
MmE2NjIzYjQxZjQ2MzZjN2VkZWZlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU3RkTGli
RXh0cmFzLmgKKysrIGIvU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgKQEAgLTIwNiw3ICsy
MDYsNyBAQCBpbmxpbmUgQXJyYXlFbGVtZW50VHlwZSogYmluYXJ5U2VhcmNoSW1wbChBcnJheVR5
cGUmIGFycmF5LCBzaXplX3Qgc2l6ZSwgS2V5VHlwZQogICAgIHNpemVfdCBvZmZzZXQgPSAwOwog
ICAgIHdoaWxlIChzaXplID4gMSkgewogICAgICAgICBzaXplX3QgcG9zID0gKHNpemUgLSAxKSA+
PiAxOwotICAgICAgICBLZXlUeXBlIHZhbCA9IGV4dHJhY3RLZXkoJmFycmF5W29mZnNldCArIHBv
c10pOworICAgICAgICBhdXRvIHZhbCA9IGV4dHJhY3RLZXkoJmFycmF5W29mZnNldCArIHBvc10p
OwogICAgICAgICAKICAgICAgICAgaWYgKHZhbCA9PSBrZXkpCiAgICAgICAgICAgICByZXR1cm4g
JmFycmF5W29mZnNldCArIHBvc107CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZy5jcHAKaW5kZXggYWYwNGQ1MzAzMGZlY2JjZmI4
NWVhNDU5NWNjOTFmMmU0ZTBlOWE0Ny4uYzcxZmU5M2JkMjg4MzY4YTZkNGYxNzVmNTg1YmRjODg2
ODliNmViNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVU
b1NjcmlwdE1hcHBpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9j
YWxlVG9TY3JpcHRNYXBwaW5nLmNwcApAQCAtMzIsMTIgKzMyLDEzIEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmgiCiAKLSNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNs
dWRlIDx3dGYvU29ydGVkQXJyYXlNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisvLyBGSVhNRTogQ29uc2lkZXIgbW92aW5nIGFs
b25nc2lkZSBDb21wYXJhYmxlQVNDSUlMaXRlcmFsIGFuZCBnaXZpbmcgYW4gZXZlbiBiZXR0ZXIg
bmFtZS4KIHRlbXBsYXRlPHR5cGVuYW1lIFN0b3JhZ2VJbnRlZ2VyPgogY2xhc3MgUGFja2VkQVND
SUlMb3dlckNvZGVzIHsKIHB1YmxpYzoKQEAgLTExMiwxOSArMTEzLDE0IEBAIHByaXZhdGU6CiAg
ICAgU3RvcmFnZUludGVnZXIgbV92YWx1ZSB7IDAgfTsKIH07CiAKLXVzaW5nIFNjcmlwdE5hbWUg
PSBQYWNrZWRBU0NJSUxvd2VyQ29kZXM8dWludDMyX3Q+Owotc3RydWN0IFNjcmlwdE5hbWVDb2Rl
IHsKLSAgICBTY3JpcHROYW1lIG5hbWU7Ci0gICAgVVNjcmlwdENvZGUgY29kZTsKLX07Ci0KLVVT
Y3JpcHRDb2RlIHNjcmlwdE5hbWVUb0NvZGUoY29uc3QgU3RyaW5nJiBzY3JpcHROYW1lKQorVVNj
cmlwdENvZGUgc2NyaXB0TmFtZVRvQ29kZShTdHJpbmdWaWV3IHNjcmlwdE5hbWUpCiB7CiAgICAg
Ly8gVGhpcyBnZW5lcmFsbHkgbWFwcyBhbiBJU08gMTU5MjQgc2NyaXB0IGNvZGUgdG8gaXRzIFVT
Y3JpcHRDb2RlLCBidXQgY2VydGFpbiBmYW1pbGllcyBvZiBzY3JpcHQgY29kZXMgYXJlCiAgICAg
Ly8gdHJlYXRlZCBhcyBhIHNpbmdsZSBzY3JpcHQgZm9yIGFzc2lnbmluZyBhIHBlci1zY3JpcHQg
Zm9udCBpbiBTZXR0aW5ncy4gRm9yIGV4YW1wbGUsICJoaXJhIiBpcyBtYXBwZWQgdG8KICAgICAv
LyBVU0NSSVBUX0tBVEFLQU5BX09SX0hJUkFHQU5BIGluc3RlYWQgb2YgVVNDUklQVF9ISVJBR0FO
QSwgc2luY2Ugd2Ugd2FudCBhbGwgSmFwYW5lc2Ugc2NyaXB0cyB0byBiZSByZW5kZXJlZAogICAg
IC8vIHVzaW5nIHRoZSBzYW1lIGZvbnQgc2V0dGluZy4KLSAgICBzdGF0aWMgY29uc3RleHByIFNj
cmlwdE5hbWVDb2RlIHNjcmlwdE5hbWVDb2RlTGlzdFtdID0geworICAgIHVzaW5nIFNjcmlwdE5h
bWUgPSBQYWNrZWRBU0NJSUxvd2VyQ29kZXM8dWludDMyX3Q+OworICAgIHN0YXRpYyBjb25zdGV4
cHIgc3RkOjpwYWlyPFNjcmlwdE5hbWUsIFVTY3JpcHRDb2RlPiBzY3JpcHROYW1lQ29kZUxpc3Rb
XSA9IHsKICAgICAgICAgeyAiYXJhYiIsIFVTQ1JJUFRfQVJBQklDIH0sCiAgICAgICAgIHsgImFy
bW4iLCBVU0NSSVBUX0FSTUVOSUFOIH0sCiAgICAgICAgIHsgImJhbGkiLCBVU0NSSVBUX0JBTElO
RVNFIH0sCkBAIC0yMzIsMzggKzIyOCwxNiBAQCBVU2NyaXB0Q29kZSBzY3JpcHROYW1lVG9Db2Rl
KGNvbnN0IFN0cmluZyYgc2NyaXB0TmFtZSkKICAgICAgICAgeyAienl5eSIsIFVTQ1JJUFRfQ09N
TU9OIH0sCiAgICAgICAgIHsgInp6enoiLCBVU0NSSVBUX1VOS05PV04gfSwKICAgICB9OwotCiAg
ICAgc3RhdGljX2Fzc2VydChTY3JpcHROYW1lKCJhcmFiIikudmFsdWUoKSA9PSAweDYxNzI2MTYy
VSk7CiAgICAgc3RhdGljX2Fzc2VydChTY3JpcHROYW1lKCJ6enp6IikudmFsdWUoKSA9PSAweDdh
N2E3YTdhVSk7Ci0KLSAgICBBU1NFUlQoCi0gICAgICAgIHN0ZDo6aXNfc29ydGVkKHN0ZDo6YmVn
aW4oc2NyaXB0TmFtZUNvZGVMaXN0KSwgc3RkOjplbmQoc2NyaXB0TmFtZUNvZGVMaXN0KSwKLSAg
ICAgICAgICAgIFtdKGNvbnN0IFNjcmlwdE5hbWVDb2RlJiBhLCBjb25zdCBTY3JpcHROYW1lQ29k
ZSYgYikgewotICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUgPCBiLm5hbWU7Ci0gICAgICAg
ICAgICB9KSk7Ci0KLSAgICBhdXRvIG5hbWUgPSBTY3JpcHROYW1lOjpwYXJzZShzY3JpcHROYW1l
KTsKLSAgICBpZiAoIW5hbWUpCi0gICAgICAgIHJldHVybiBVU0NSSVBUX0lOVkFMSURfQ09ERTsK
LQotICAgIGF1dG8qIGVsZW1lbnQgPSB0cnlCaW5hcnlTZWFyY2g8U2NyaXB0TmFtZUNvZGU+KHNj
cmlwdE5hbWVDb2RlTGlzdCwgc3RkOjpzaXplKHNjcmlwdE5hbWVDb2RlTGlzdCksIG5hbWUudmFs
dWUoKSwKLSAgICAgICAgW10oY29uc3QgU2NyaXB0TmFtZUNvZGUqIHNjcmlwdE5hbWVDb2RlKSB7
Ci0gICAgICAgICAgICByZXR1cm4gc2NyaXB0TmFtZUNvZGUtPm5hbWU7Ci0gICAgICAgIH0pOwot
ICAgIGlmIChlbGVtZW50KQotICAgICAgICByZXR1cm4gZWxlbWVudC0+Y29kZTsKLSAgICByZXR1
cm4gVVNDUklQVF9JTlZBTElEX0NPREU7CisgICAgU29ydGVkQXJyYXlNYXAgbWFwIHsgc2NyaXB0
TmFtZUNvZGVMaXN0IH07CisgICAgcmV0dXJuIG1hcC5nZXQoc2NyaXB0TmFtZSwgVVNDUklQVF9J
TlZBTElEX0NPREUpOwogfQogCi11c2luZyBMb2NhbGVOYW1lID0gUGFja2VkQVNDSUlMb3dlckNv
ZGVzPHVpbnQ2NF90PjsKLXN0cnVjdCBMb2NhbGVTY3JpcHQgewotICAgIExvY2FsZU5hbWUgbG9j
YWxlOwotICAgIFVTY3JpcHRDb2RlIHNjcmlwdDsKLX07Ci0KIFVTY3JpcHRDb2RlIGxvY2FsZVRv
U2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24oY29uc3QgU3RyaW5nJiBsb2NhbGUpCiB7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBMb2NhbGVTY3JpcHQgbG9jYWxlU2NyaXB0TGlzdFtdID0geworICAg
IHVzaW5nIExvY2FsZU5hbWUgPSBQYWNrZWRBU0NJSUxvd2VyQ29kZXM8dWludDY0X3Q+OworICAg
IHN0YXRpYyBjb25zdGV4cHIgc3RkOjpwYWlyPExvY2FsZU5hbWUsIFVTY3JpcHRDb2RlPiBsb2Nh
bGVTY3JpcHRMaXN0W10gPSB7CiAgICAgICAgIHsgImFhIiwgVVNDUklQVF9MQVRJTiB9LAogICAg
ICAgICB7ICJhYiIsIFVTQ1JJUFRfQ1lSSUxMSUMgfSwKICAgICAgICAgeyAiYWR5IiwgVVNDUklQ
VF9DWVJJTExJQyB9LApAQCAtNDYzLDM1ICs0MzcsMTQgQEAgVVNjcmlwdENvZGUgbG9jYWxlVG9T
Y3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihjb25zdCBTdHJpbmcmIGxvY2FsZSkKICAgICAgICAg
eyAiemhfdHciLCBVU0NSSVBUX1RSQURJVElPTkFMX0hBTiB9LAogICAgICAgICB7ICJ6dSIsIFVT
Q1JJUFRfTEFUSU4gfSwKICAgICB9OwotCiAgICAgc3RhdGljX2Fzc2VydChMb2NhbGVOYW1lKCJh
YSIpLnZhbHVlKCkgPT0gMHg2MTYxMDAwMDAwMDAwMDAwVUxMKTsKICAgICBzdGF0aWNfYXNzZXJ0
KExvY2FsZU5hbWUoInpoX3R3IikudmFsdWUoKSA9PSAweDdhNjg1Zjc0NzcwMDAwMDBVTEwpOwot
Ci0gICAgQVNTRVJUKAotICAgICAgICBzdGQ6OmlzX3NvcnRlZChzdGQ6OmJlZ2luKGxvY2FsZVNj
cmlwdExpc3QpLCBzdGQ6OmVuZChsb2NhbGVTY3JpcHRMaXN0KSwKLSAgICAgICAgICAgIFtdKGNv
bnN0IExvY2FsZVNjcmlwdCYgYSwgY29uc3QgTG9jYWxlU2NyaXB0JiBiKSB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGEubG9jYWxlIDwgYi5sb2NhbGU7Ci0gICAgICAgICAgICB9KSk7Ci0KLSAg
ICBhdXRvIHRyeUZpbmRTY3JpcHRDb2RlID0gWyZdIChjb25zdCBTdHJpbmcmIHN0cmluZykgLT4g
T3B0aW9uYWw8VVNjcmlwdENvZGU+IHsKLSAgICAgICAgYXV0byBsb2NhbGVOYW1lID0gTG9jYWxl
TmFtZTo6cGFyc2Uoc3RyaW5nKTsKLSAgICAgICAgaWYgKCFsb2NhbGVOYW1lKQotICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgICAgICBhdXRvKiBlbGVtZW50ID0gdHJ5Qmlu
YXJ5U2VhcmNoPExvY2FsZVNjcmlwdD4obG9jYWxlU2NyaXB0TGlzdCwgc3RkOjpzaXplKGxvY2Fs
ZVNjcmlwdExpc3QpLCBsb2NhbGVOYW1lLnZhbHVlKCksCi0gICAgICAgICAgICBbXShjb25zdCBM
b2NhbGVTY3JpcHQqIGxvY2FsZVNjcmlwdCkgewotICAgICAgICAgICAgICAgIHJldHVybiBsb2Nh
bGVTY3JpcHQtPmxvY2FsZTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICBpZiAoZWxlbWVudCkK
LSAgICAgICAgICAgIHJldHVybiBlbGVtZW50LT5zY3JpcHQ7Ci0gICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci0gICAgfTsKLQotICAgIFN0cmluZyBjYW5vbmljYWxMb2NhbGUgPSBsb2NhbGU7
Ci0gICAgY2Fub25pY2FsTG9jYWxlLnJlcGxhY2UoJy0nLCAnXycpOwotICAgIHdoaWxlICghY2Fu
b25pY2FsTG9jYWxlLmlzRW1wdHkoKSkgewotICAgICAgICBpZiAoYXV0byBzY3JpcHRDb2RlID0g
dHJ5RmluZFNjcmlwdENvZGUoY2Fub25pY2FsTG9jYWxlKSkKLSAgICAgICAgICAgIHJldHVybiBz
Y3JpcHRDb2RlLnZhbHVlKCk7CisgICAgU29ydGVkQXJyYXlNYXAgbWFwIHsgbG9jYWxlU2NyaXB0
TGlzdCB9OworICAgIFN0cmluZyBjYW5vbmljYWxMb2NhbGVTdHJpbmcgPSBsb2NhbGU7CisgICAg
Y2Fub25pY2FsTG9jYWxlU3RyaW5nLnJlcGxhY2UoJy0nLCAnXycpOworICAgIGZvciAoU3RyaW5n
VmlldyBjYW5vbmljYWxMb2NhbGUgPSBjYW5vbmljYWxMb2NhbGVTdHJpbmc7ICFjYW5vbmljYWxM
b2NhbGUuaXNFbXB0eSgpOyApIHsKKyAgICAgICAgaWYgKGF1dG8gc2NyaXB0Q29kZSA9IG1hcC50
cnlHZXQoY2Fub25pY2FsTG9jYWxlKSkKKyAgICAgICAgICAgIHJldHVybiAqc2NyaXB0Q29kZTsK
ICAgICAgICAgYXV0byB1bmRlcnNjb3JlUG9zaXRpb24gPSBjYW5vbmljYWxMb2NhbGUucmV2ZXJz
ZUZpbmQoJ18nKTsKICAgICAgICAgaWYgKHVuZGVyc2NvcmVQb3NpdGlvbiA9PSBub3RGb3VuZCkK
ICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmgKaW5kZXggNzMwMDZkMjM1NzZhNWM2ODhjYmI3OWI5
MzkyNWQ2YWI3ODNjYjcwZS4uMTRhZjZhNTdmYzMyZGNmZjI5ZjA5YjBlZjYxZjJmNDg1YzM2OGY0
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1Njcmlw
dE1hcHBpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2Ny
aXB0TWFwcGluZy5oCkBAIC0yOCw4ICsyOCw3IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNp
Zm5kZWYgTG9jYWxlVG9TY3JpcHRNYXBwaW5nX2gKLSNkZWZpbmUgTG9jYWxlVG9TY3JpcHRNYXBw
aW5nX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8dW5pY29kZS91c2NyaXB0Lmg+CiAjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTM3LDggKzM2LDYgQEAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogVVNjcmlwdENvZGUgbG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihjb25z
dCBTdHJpbmcmKTsKLVdFQkNPUkVfRVhQT1JUIFVTY3JpcHRDb2RlIHNjcmlwdE5hbWVUb0NvZGUo
Y29uc3QgU3RyaW5nJik7CitXRUJDT1JFX0VYUE9SVCBVU2NyaXB0Q29kZSBzY3JpcHROYW1lVG9D
b2RlKFN0cmluZ1ZpZXcpOwogCiB9Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXIuaCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmgK
aW5kZXggYmExN2M4MjdlOTNjMTEyZmIzMWYwYjU5YmQ5NDQyOTM4NjY1N2JhNC4uZGE0MTU3YmY4
NmFhNGQ2ZTAyYWY5NmZlOTMxNDFlNjhmOTFhZWM5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXIuaAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdl
ci5oCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgogI2luY2x1
ZGUgPHBhbC9TZXNzaW9uSUQuaD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4K
LSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAj
aW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlU3VicmVzb3VyY2VzRW50cnkuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuaAppbmRleCBkNDQ5NTA0NDYzZmZlMGQ5
OWRiZWNhYTQ0NzdiMDUzYWM2YzU3NTY0Li4zNzdkMzM3OTlmN2JiNWRjZTZjZTViOTA2YTM3ZTUy
NDhlNTA5MWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5oCkBAIC0yOSw3
ICsyOSw2IEBACiAKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVTdG9yYWdlLmgiCiAjaW5jbHVkZSA8
V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9VUkwuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbSBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCmluZGV4IDFlOGY1NWZk
MGM4NDAwYzJlYWU0MDhjNWFiNjkyNWUxZjI3OTA0ZjcuLjYwZjIyMDlhNjkwZjViZWZkMjRhZDZk
YmI3N2Y3YWVhMGEyMDg2MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBAIC05NSw2ICs5NSw3IEBACiAjaW1wb3J0IDxwYWwv
c3BpL2NvY29hL05TQWNjZXNzaWJpbGl0eVNQSS5oPgogI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNB
cHBsaWNhdGlvblNQSS5oPgogI2ltcG9ydCA8d3RmL1NldEZvclNjb3BlLmg+CisjaW1wb3J0IDx3
dGYvU29ydGVkQXJyYXlNYXAuaD4KIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJH
RVQpCiAjaW1wb3J0IDxXZWJDb3JlL01lZGlhUGxheWJhY2tUYXJnZXRDb2NvYS5oPgpAQCAtMjA3
LDMyICsyMDgsMjIgQEAgYm9vbCBXZWJQYWdlOjpzaG91bGRVc2VQREZQbHVnaW4oY29uc3QgU3Ry
aW5nJiBjb250ZW50VHlwZSwgU3RyaW5nVmlldyBwYXRoKSBjb24KICAgICAgICAgICAgICAgICAm
JiAocGF0aC5lbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCIucGRmIikgfHwgcGF0aC5lbmRzV2l0
aElnbm9yaW5nQVNDSUlDYXNlKCIucHMiKSkpKTsKIH0KIAotdHlwZWRlZiBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiBTZWxlY3Rvck5hbWVNYXA7Ci0KLS8vIE1hcCBzZWxlY3RvcnMgaW50byBFZGl0
b3IgY29tbWFuZCBuYW1lcy4KLS8vIFRoaXMgaXMgbm90IG5lZWRlZCBmb3IgYW55IHNlbGVjdG9y
cyB0aGF0IGhhdmUgdGhlIHNhbWUgbmFtZSBhcyB0aGUgRWRpdG9yIGNvbW1hbmQuCi1zdGF0aWMg
Y29uc3QgU2VsZWN0b3JOYW1lTWFwKiBjcmVhdGVTZWxlY3RvckV4Y2VwdGlvbk1hcCgpCi17Ci0g
ICAgU2VsZWN0b3JOYW1lTWFwKiBtYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz47Ci0K
LSAgICBtYXAtPmFkZCgiaW5zZXJ0TmV3bGluZUlnbm9yaW5nRmllbGRFZGl0b3I6IiwgIkluc2Vy
dE5ld2xpbmUiKTsKLSAgICBtYXAtPmFkZCgiaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yOiIsICJJ
bnNlcnROZXdsaW5lIik7Ci0gICAgbWFwLT5hZGQoImluc2VydFRhYklnbm9yaW5nRmllbGRFZGl0
b3I6IiwgIkluc2VydFRhYiIpOwotICAgIG1hcC0+YWRkKCJwYWdlRG93bjoiLCAiTW92ZVBhZ2VE
b3duIik7Ci0gICAgbWFwLT5hZGQoInBhZ2VEb3duQW5kTW9kaWZ5U2VsZWN0aW9uOiIsICJNb3Zl
UGFnZURvd25BbmRNb2RpZnlTZWxlY3Rpb24iKTsKLSAgICBtYXAtPmFkZCgicGFnZVVwOiIsICJN
b3ZlUGFnZVVwIik7Ci0gICAgbWFwLT5hZGQoInBhZ2VVcEFuZE1vZGlmeVNlbGVjdGlvbjoiLCAi
TW92ZVBhZ2VVcEFuZE1vZGlmeVNlbGVjdGlvbiIpOwotCi0gICAgcmV0dXJuIG1hcDsKLX0KLQog
c3RhdGljIFN0cmluZyBjb21tYW5kTmFtZUZvclNlbGVjdG9yTmFtZShjb25zdCBTdHJpbmcmIHNl
bGVjdG9yTmFtZSkKIHsKLSAgICAvLyBDaGVjayB0aGUgZXhjZXB0aW9uIG1hcCBmaXJzdC4KLSAg
ICBzdGF0aWMgY29uc3QgU2VsZWN0b3JOYW1lTWFwKiBleGNlcHRpb25NYXAgPSBjcmVhdGVTZWxl
Y3RvckV4Y2VwdGlvbk1hcCgpOwotICAgIFNlbGVjdG9yTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBleGNlcHRpb25NYXAtPmZpbmQoc2VsZWN0b3JOYW1lKTsKLSAgICBpZiAoaXQgIT0gZXhj
ZXB0aW9uTWFwLT5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKKyAgICAvLyBNYXAg
c2VsZWN0b3JzIGludG8gRWRpdG9yIGNvbW1hbmQgbmFtZXMuCisgICAgLy8gVGhpcyBpcyBub3Qg
bmVlZGVkIGZvciBhbnkgc2VsZWN0b3JzIHRoYXQgaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIHRoZSBF
ZGl0b3IgY29tbWFuZC4KKyAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6cGFpcjxDb21wYXJhYmxl
QVNDSUlMaXRlcmFsLCBBU0NJSUxpdGVyYWw+IHNlbGVjdG9yRXhjZXB0aW9uc1tdID0geworICAg
ICAgICB7ICJpbnNlcnROZXdsaW5lSWdub3JpbmdGaWVsZEVkaXRvcjoiLCAiSW5zZXJ0TmV3bGlu
ZSJfcyB9LAorICAgICAgICB7ICJpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3I6IiwgIkluc2VydE5l
d2xpbmUiX3MgfSwKKyAgICAgICAgeyAiaW5zZXJ0VGFiSWdub3JpbmdGaWVsZEVkaXRvcjoiLCAi
SW5zZXJ0VGFiIl9zIH0sCisgICAgICAgIHsgInBhZ2VEb3duOiIsICJNb3ZlUGFnZURvd24iX3Mg
fSwKKyAgICAgICAgeyAicGFnZURvd25BbmRNb2RpZnlTZWxlY3Rpb246IiwgIk1vdmVQYWdlRG93
bkFuZE1vZGlmeVNlbGVjdGlvbiJfcyB9LAorICAgICAgICB7ICJwYWdlVXA6IiwgIk1vdmVQYWdl
VXAiX3MgfSwKKyAgICAgICAgeyAicGFnZVVwQW5kTW9kaWZ5U2VsZWN0aW9uOiIsICJNb3ZlUGFn
ZVVwQW5kTW9kaWZ5U2VsZWN0aW9uIl9zIH0sCisgICAgfTsKKyAgICBTb3J0ZWRBcnJheU1hcCBt
YXAgeyBzZWxlY3RvckV4Y2VwdGlvbnMgfTsKKyAgICBpZiAoYXV0byBjb21tYW5kTmFtZSA9IG1h
cC50cnlHZXQoc2VsZWN0b3JOYW1lKSkKKyAgICAgICAgcmV0dXJuICpjb21tYW5kTmFtZTsKIAog
ICAgIC8vIFJlbW92ZSB0aGUgdHJhaWxpbmcgY29sb24uCiAgICAgLy8gTm8gbmVlZCB0byBjYXBp
dGFsaXplIHRoZSBjb21tYW5kIG5hbWUgc2luY2UgRWRpdG9yIGNvbW1hbmQgbmFtZXMgYXJlIG5v
dCBjYXNlIHNlbnNpdGl2ZS4K
</data>
<flag name="commit-queue"
          id="446656"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426388</attachid>
            <date>2021-04-18 16:25:47 -0700</date>
            <delta_ts>2021-04-19 10:02:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224733-20210418162546.patch</filename>
            <type>text/plain</type>
            <size>26930</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2MjI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDYyMGZkYzY1YmE3Yzg5YWIzYzg0Mzc0
ZDE1NzI3ZjQyOTcyZmY4MDUuLmRhNDViMjZiY2Y3ZTZiNjIzMTBlMTE3MzYzNzlhNTVmMjFjMmI5
MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMjEtMDQtMTggIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIHNvcnRlZCBhcnJheSBtYXBwaW5nIG1hY2hp
bmVyeSBpbiBMb2NhbGVUb1NjcmlwdE1hcHBpbmcuY3BwIGZvciByZXVzZSBlbHNld2hlcmUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDczMworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6IEFkZGVkIFNvcnRlZEFycmF5TWFwLmNwcC9oLgorICAgICAg
ICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDogRGl0dG8uCisKKyAgICAgICAgKiB3dGYvU29ydGVkQXJy
YXlNYXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvU29ydGVkQXJyYXlNYXAuaDogQWRkZWQu
IEJ1aWxkcyBvbiB0aGUgaWRpb20gaW4gTG9jYWxUb1NjcmlwdE1hcHBpbmcsIGFuZCB0byBiZQor
ICAgICAgICBnZW5lcmljIHVzZXMgc3RkOjpwYWlyIGluc3RlYWQgb2YgY3VzdG9tIHN0cnVjdHVy
ZXMuIEFsc28gYXNzZXJ0cyB0aGF0IG5vIHR3byBpdGVtcworICAgICAgICBpbiB0aGUgYXJyYXkg
aGF2ZSBlcXVhbCBrZXlzLiBJbmNsdWRlcyB0aGUgQ29tcGFyYWJsZUFTQ0lJTGl0ZXJhbCBzdHJ1
Y3R1cmUgdGhhdCBjYW4KKyAgICAgICAgYmUgdXNlZCB0byBtYWtlIG1hcHMgdGhhdCBhcmUga2V5
ZWQgYnkgY2FzZS1zZW5zaXRpdmUgQVNDSUkgc3RyaW5ncy4KKworICAgICAgICAqIHd0Zi9TdGRM
aWJFeHRyYXMuaDoKKyAgICAgICAgKFdURjo6YmluYXJ5U2VhcmNoSW1wbCk6IFVzZSBhdXRvIGlu
IG9uZSBwbGFjZSB0byBtYWtlIHRoaXMgYSBiaXQgbW9yZSBnZW5lcmljLgorCiAyMDIxLTA0LTE3
ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXMgdG8gU2V0dGluZ3MgKFBhcnQgMSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhNGViZTU1
MjI4NDdkMGNkNWJiMDA3Y2NiM2Y5YmQ5MjJkY2M2NmRmLi40NzEzYzhhZTAyMGZlNzI1NzJhZWYx
MDgzYmJiMzI5N2I4NDc2M2UxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjEtMDQt
MTggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIHNv
cnRlZCBhcnJheSBtYXBwaW5nIG1hY2hpbmVyeSBpbiBMb2NhbGVUb1NjcmlwdE1hcHBpbmcuY3Bw
IGZvciByZXVzZSBlbHNld2hlcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyNDczMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6c2NyaXB0TmFtZVRvQ29kZSk6IFJlZmFjdG9yIHRvIHVzZSBTb3J0
ZWRBcnJheU1hcC4gQWxzbyBjaGFuZ2VkIHRvIHRha2UgU3RyaW5nVmlldy4KKyAgICAgICAgKFdl
YkNvcmU6OmxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24pOiBEaXR0by4gQ3V0IGRv
d24gb24gbWVtb3J5IGFsbG9jYXRpb24gYnkgdXNpbmcKKyAgICAgICAgU3RyaW5nVmlldyBpbnN0
ZWFkIG9mIFN0cmluZyB3aGlsZSBsb29waW5nIHRocm91Z2ggc3Vic3RyaW5ncy4KKworICAgICAg
ICAqIHBsYXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmg6IENoYW5nZWQgc2NyaXB0
TmFtZVRvQ29kZSB0byB0YWtlIFN0cmluZ1ZpZXcuCisKIDIwMjEtMDQtMTggIENhdGhpZSBDaGVu
ICA8Y2F0aGllY2hlbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFRoZSBpbXBsaWNpdCBhc3BlY3Qt
cmF0aW8gZnJvbSB3aWR0aCBhbmQgaGVpZ2h0IGF0dHJpYnV0ZXMgd2l0aCBmbG9hdCB2YWx1ZSBp
cyBub3QgYWNjdXJhdGUgZW5vdWdoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGYzYWM4MTBiMzU0MmZkM2Q1YzVjOTc5
OTg1ZTAzMDgzMzYwMmU3YjkuLmI1Y2ZkOGVhZGQ1NmY3NGJmMGNmMjE0NjEwMmQ5YzA4YTgwNDYx
M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjEtMDQtMTggIERhcmluIEFkbGVyICA8
ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIHNvcnRlZCBhcnJheSBtYXBwaW5n
IG1hY2hpbmVyeSBpbiBMb2NhbGVUb1NjcmlwdE1hcHBpbmcuY3BwIGZvciByZXVzZSBlbHNld2hl
cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDcz
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmg6IFJlbW92ZWQgdW51
c2VkIGluY2x1ZGUgb2YgSGFzaE1hcC5oLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5Lmg6IERpdHRvLgorCisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpjcmVh
dGVTZWxlY3RvckV4Y2VwdGlvbk1hcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OmNvbW1h
bmROYW1lRm9yU2VsZWN0b3JOYW1lKTogVXNlIFNvcnRlZEFycmF5TWFwIGluc3RlYWQgb2YgSGFz
aE1hcC4KKwogMjAyMS0wNC0xOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAg
ICAgICAgIFVwZGF0ZSBMaWJXZWJSVENDb2RlY3NQcm94eSB0byB1c2UgYSBMb2NrCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dU
Ri9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2NzNhOWU2ZGY5YjI2YWUyM2Jl
OTJlZThkMDc5MzU0YWZjMTFlYTk2Li45Yjk5YWRjYWNkMDViNTEyZTBmOGJmNzhhY2I4MjYxMjMx
MzAyNmI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTk4
LDYgKzk4LDcgQEAKIAkJODM0OEJBMEUyMUZCQzBENTAwRkQzMDU0IC8qIE9iamVjdElkZW50aWZp
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM0
OEJBMEQyMUZCQzBENDAwRkQzMDU0IC8qIE9iamVjdElkZW50aWZpZXIuY3BwICovOyB9OwogCQk5
MzkzNEJEMzE4QTFFOEMzMDBEMEQ2QTEgLyogU3RyaW5nVmlld0NvY29hLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM5MzRCRDIxOEExRThDMzAwRDBE
NkExIC8qIFN0cmluZ1ZpZXdDb2NvYS5tbSAqLzsgfTsKIAkJOTM5MzRCRDUxOEExRjE2OTAwRDBE
NkExIC8qIFN0cmluZ1ZpZXdDRi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5MzkzNEJENDE4QTFGMTY5MDBEMEQ2QTEgLyogU3RyaW5nVmlld0NGLmNw
cCAqLzsgfTsKKwkJOTM5RTREMTkyNjJDRjJEMzAwNzEzMUY1IC8qIFNvcnRlZEFycmF5TWFwLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzOUU0RDE4
MjYyQ0YyQ0MwMDcxMzFGNSAvKiBTb3J0ZWRBcnJheU1hcC5jcHAgKi87IH07CiAJCTkzQjVCNDRF
MjIxM0Q2MTYwMDRCN0FBNyAvKiBIZXhOdW1iZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNUI0NEQyMjEzRDYxNjAwNEI3QUE3IC8qIEhleE51
bWJlci5jcHAgKi87IH07CiAJCTkzQjVCNDUxMjIxNzFFRUEwMDRCN0FBNyAvKiBMb2dnZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNUI0NTAy
MjE3MUVFOTAwNEI3QUE3IC8qIExvZ2dlci5jcHAgKi87IH07CiAJCTkzRjE5OTNFMTlENzk1OEQw
MEMyMzkwQiAvKiBTdHJpbmdWaWV3LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzRjE5OTNEMTlENzk1OEQwMEMyMzkwQiAvKiBTdHJpbmdWaWV3LmNw
cCAqLzsgfTsKQEAgLTQ4NywxMSArNDg4LDEzIEBACiAJCTgzRjJCQURFMUNGOTUyNEUwMDNFOTlD
MyAvKiBGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGdW5jdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4M0ZCQTkzMTE5REY0NTk3MDBGMzBB
REIgLyogVHlwZUNhc3RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVD
YXN0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkY0NkY1RjFBMjg0MEVFMDBD
Q0JGMjIgLyogUmVmQ291bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZWZDb3VudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzMTU2QzhEMjYyQzk4
MjIwMEVBRTI3QiAvKiBTb3J0ZWRBcnJheU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3J0ZWRBcnJh
eU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzI0MTY1NzI0M0JDMkU1MDAz
MkZBQUUgLyogVmVjdG9yQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmVjdG9yQ29jb2EuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMzRDYzMTkxRkNCNkFCOTAwMzJFQ0Q2IC8qIFN0
cmluZ0hhc2hlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdIYXNo
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM4NEI3M0UyMERFQTI4NDAwNUI3
M0IyIC8qIENGWFBDQnJpZGdlU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENGWFBDQnJpZGdlU1BJLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzOTM0QkQyMThBMUU4QzMwMEQwRDZBMSAv
KiBTdHJpbmdWaWV3Q29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBTdHJpbmdWaWV3Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkz
OTM0QkQ0MThBMUYxNjkwMEQwRDZBMSAvKiBTdHJpbmdWaWV3Q0YuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RyaW5nVmlld0NGLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJOTM5RTREMTgyNjJDRjJDQzAwNzEzMUY1IC8qIFNvcnRlZEFycmF5TWFw
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvcnRlZEFycmF5TWFwLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOTNBQzkxQTcxODk0MkZDNDAwMjQ0OTM5IC8qIExDaGFyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExDaGFyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTkzQjVCNDREMjIxM0Q2MTYwMDRCN0FBNyAvKiBIZXhOdW1iZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGV4TnVtYmVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNCNUI0NTAyMjE3MUVFOTAwNEI3QUE3IC8qIExvZ2dl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb2dnZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI0NCw2ICsxMjQ3LDggQEAKIAkJCQkwRkE2
RjM5MjIwQ0M3M0EyMDBBMDNEQ0QgLyogU21hbGxQdHJTZXQuY3BwICovLAogCQkJCTc5MzZENkE5
MUM5OUY4QUUwMDBEMUFFRCAvKiBTbWFsbFB0clNldC5oICovLAogCQkJCUEzMEQ0MTJEMUYwREUx
M0YwMEI3MTk1NCAvKiBTb2Z0TGlua2luZy5oICovLAorCQkJCTkzOUU0RDE4MjYyQ0YyQ0MwMDcx
MzFGNSAvKiBTb3J0ZWRBcnJheU1hcC5jcHAgKi8sCisJCQkJOTMxNTZDOEQyNjJDOTgyMjAwRUFF
MjdCIC8qIFNvcnRlZEFycmF5TWFwLmggKi8sCiAJCQkJNzkwMzhFMDUyMjRCMDVBNzAwNEMwNzM4
IC8qIFNwYW5uaW5nVHJlZS5oICovLAogCQkJCUE4QTQ3MzBEMTUxQTgyNUIwMDQxMjNGRiAvKiBT
cGVjdHJ1bS5oICovLAogCQkJCUE4QTQ3MzBFMTUxQTgyNUIwMDQxMjNGRiAvKiBTdGFja0JvdW5k
cy5jcHAgKi8sCkBAIC0xNzU2LDYgKzE3NjEsNyBAQAogCQkJCUE3NDg3NDUyMTdBMEJEQUUwMEZB
MDRDQiAvKiBTaXhDaGFyYWN0ZXJIYXNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDI1
MTUxQTgyNUIwMDQxMjNGRiAvKiBTaXplTGltaXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
QTZGMzkzMjBDQzczQTMwMEEwM0RDRCAvKiBTbWFsbFB0clNldC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk5MzlFNEQxOTI2MkNGMkQzMDA3MTMxRjUgLyogU29ydGVkQXJyYXlNYXAuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQThBNDc0MjcxNTFBODI1QjAwNDEyM0ZGIC8qIFN0YWNrQm91bmRzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUZFRUE0REY5MjE2RDdCRTQwMEFDMDYwMiAvKiBTdGFja1Bv
aW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkVEQUNEM0QxNjMwRjgzRjAwQzY5NjM0IC8q
IFN0YWNrU3RhdHMuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IGEz
MDU5ZTliYmY2ZmNlMjAyMTcxZmM0MjcwYmQxOTQ4Yzk0MjI5YWEuLmE5YjU5MGUzZDQyYWEwMjYz
YTY4YmViMmFlYzYxNTUwYWFiNWFlMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtl
TGlzdHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC0yMzYsNiAr
MjM2LDcgQEAgc2V0KFdURl9QVUJMSUNfSEVBREVSUwogICAgIFNpeENoYXJhY3Rlckhhc2guaAog
ICAgIFNtYWxsUHRyU2V0LmgKICAgICBTb2Z0TGlua2luZy5oCisgICAgU29ydGVkQXJyYXlNYXAu
aAogICAgIFNwYW5uaW5nVHJlZS5oCiAgICAgU3BlY3RydW0uaAogICAgIFN0YWNrQm91bmRzLmgK
QEAgLTQzOSw2ICs0NDAsNyBAQCBzZXQoV1RGX1NPVVJDRVMKICAgICBTZWNvbmRzLmNwcAogICAg
IFNlZ21lbnRlZFZlY3Rvci5jcHAKICAgICBTaXhDaGFyYWN0ZXJIYXNoLmNwcAorICAgIFNvcnRl
ZEFycmF5TWFwLmNwcAogICAgIFNtYWxsUHRyU2V0LmNwcAogICAgIFN0YWNrQm91bmRzLmNwcAog
ICAgIFN0YWNrUG9pbnRlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1NvcnRlZEFy
cmF5TWFwLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1NvcnRlZEFycmF5TWFwLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45M2JkYzM3NzM5MzU1ZWM5MjcxYTEyNWI0ZTQxOTliMTExYTZkMGY2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dURi93dGYvU29ydGVkQXJyYXlNYXAuY3BwCkBAIC0wLDAgKzEsNDkgQEAK
Ky8qCisKK0NvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQorRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCitESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
K1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU29ydGVkQXJyYXlN
YXAuaCIKKworI2lmIEFTU0VSVF9FTkFCTEVECisKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgor
I2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgorI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2UgV1RGIHsKKworYm9vbCBzaG91bGRQ
ZXJmb3JtT25lVGltZUNoZWNrKGNvbnN0IHZvaWQqIGdsb2JhbE9iamVjdEFkZHJlc3MpCit7Cisg
ICAgc3RhdGljIExvY2sgbG9jazsKKyAgICBhdXRvIGxvY2tIb2xkZXIgPSBob2xkTG9jayhsb2Nr
KTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxjb25zdCB2b2lkKj4+IGNoZWNr
ZWRPYmplY3RzOworICAgIHJldHVybiBjaGVja2VkT2JqZWN0cy5nZXQoKS5hZGQoZ2xvYmFsT2Jq
ZWN0QWRkcmVzcykuaXNOZXdFbnRyeTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL1NvcnRlZEFycmF5TWFwLmggYi9Tb3VyY2UvV1RGL3d0Zi9Tb3J0ZWRBcnJh
eU1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjI5OWFhNTc2ODA3NzZmNDg0NzNkZWM3OTIzOWFjYWRlNDE4Mzk4
NDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Tb3J0ZWRBcnJheU1hcC5oCkBA
IC0wLDAgKzEsMTQyIEBACisvKgorCitDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKzIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKK0VYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBTb3J0ZWRBcnJh
eU1hcCBpcyBhIG1hcCBsaWtlIEhhc2hNYXAsIGJ1dCBpdCdzIHJlYWQtb25seS4gSXQgdXNlcyBt
dWNoIGxlc3MgbWVtb3J5IHRoYW4gSGFzaE1hcC4KKy8vIEl0IHVzZXMgYmluYXJ5IHNlYXJjaCBp
bnN0ZWFkIG9mIGhhc2hpbmcsIHNvIGNhbiBiZSBvdXRwZXJmb3JtZWQgYnkgSGFzaE1hcCBmb3Ig
dmVyeSBsYXJnZSBhcnJheXMuCisvLyBUaGUgZWxlbWVudHMgb2YgdGhlIGFycmF5IHBhc3NlZCB0
byB0aGUgY29uc3RydWN0b3Igc2hvdWxkIGJlIHN0ZDo6cGFpciwgd2l0aCBrZXlzIGZpcnN0IGFu
ZCB2YWx1ZXMgc2Vjb25kLgorLy8gVGhlIGFycmF5IHNob3VsZCB0eXBpY2FsbHkgYmUgYSBnbG9i
YWwgY29uc3RhbnQgZXhwcmVzc2lvbi4gVGhlIFNvcnRlZEFycmF5TWFwIG9iamVjdCBpdHNlbGYg
aXMKKy8vIG5lYXJseSBmcmVlIHRvIGNyZWF0ZSBhbmQgZGVzdHJveSBhbmQgc28gdHlwaWNhbGx5
IGRvZXMgbm90IG5lZWQgdG8gYmUgYSBnbG9iYWwuCisKK3RlbXBsYXRlPHR5cGVuYW1lIEFycmF5
VHlwZT4gY2xhc3MgU29ydGVkQXJyYXlNYXAgeworcHVibGljOgorICAgIHVzaW5nIEVsZW1lbnRU
eXBlID0gdHlwZW5hbWUgc3RkOjpyZW1vdmVfZXh0ZW50X3Q8QXJyYXlUeXBlPjsKKyAgICB1c2lu
ZyBWYWx1ZVR5cGUgPSB0eXBlbmFtZSBFbGVtZW50VHlwZTo6c2Vjb25kX3R5cGU7CisKKyAgICBT
b3J0ZWRBcnJheU1hcChjb25zdCBBcnJheVR5cGUmKTsKKworICAgIC8vIEZJWE1FOiBUbyBtYXRj
aCBIYXNoTWFwIGludGVyZmFjZSBiZXR0ZXIsIHdvdWxkIGJlIG5pY2UgdG8gZ2V0IHRoZSBkZWZh
dWx0IHZhbHVlIGZyb20gdHJhaXRzLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZ3VtZW50
PiBWYWx1ZVR5cGUgZ2V0KGNvbnN0IEtleUFyZ3VtZW50JiwgY29uc3QgVmFsdWVUeXBlJiBkZWZh
dWx0VmFsdWUgPSB7IH0pIGNvbnN0OworCisgICAgLy8gRklYTUU6IFNob3VsZCBhZGQgYSBmdW5j
dGlvbiBsaWtlIHRoaXMgdG8gSGFzaE1hcCBzbyB0aGUgdHdvIGtpbmRzIG9mIG1hcHMgYXJlIG1v
cmUgaW50ZXJjaGFuZ2FibGUuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJndW1lbnQ+IGNv
bnN0IFZhbHVlVHlwZSogdHJ5R2V0KGNvbnN0IEtleUFyZ3VtZW50JikgY29uc3Q7CisKK3ByaXZh
dGU6CisgICAgY29uc3QgQXJyYXlUeXBlJiBtX2FycmF5OworfTsKKworc3RydWN0IENvbXBhcmFi
bGVTdHJpbmdWaWV3IHsKKyAgICBTdHJpbmdWaWV3IHN0cmluZzsKK307CisKK3N0cnVjdCBDb21w
YXJhYmxlQVNDSUlMaXRlcmFsIHsKKyAgICBjb25zdCBjaGFyKiBsaXRlcmFsOworICAgIHRlbXBs
YXRlPHN0ZDo6c2l6ZV90IHNpemU+IGNvbnN0ZXhwciBDb21wYXJhYmxlQVNDSUlMaXRlcmFsKGNv
bnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtzaXplXSkgOiBsaXRlcmFsIHsgY2hhcmFjdGVycyB9IHsg
fQorICAgIHN0YXRpYyBPcHRpb25hbDxDb21wYXJhYmxlU3RyaW5nVmlldz4gcGFyc2UoU3RyaW5n
VmlldyBzdHJpbmcpIHsgcmV0dXJuIHsgeyBzdHJpbmcgfSB9OyB9Cit9OworCitib29sIG9wZXJh
dG9yPT0oQ29tcGFyYWJsZUFTQ0lJTGl0ZXJhbCwgQ29tcGFyYWJsZUFTQ0lJTGl0ZXJhbCk7Citi
b29sIG9wZXJhdG9yPChDb21wYXJhYmxlQVNDSUlMaXRlcmFsLCBDb21wYXJhYmxlQVNDSUlMaXRl
cmFsKTsKK2Jvb2wgb3BlcmF0b3I9PShDb21wYXJhYmxlU3RyaW5nVmlldywgQ29tcGFyYWJsZUFT
Q0lJTGl0ZXJhbCk7Citib29sIG9wZXJhdG9yPChDb21wYXJhYmxlU3RyaW5nVmlldywgQ29tcGFy
YWJsZUFTQ0lJTGl0ZXJhbCk7Citib29sIG9wZXJhdG9yIT0oQ29tcGFyYWJsZVN0cmluZ1ZpZXcs
IENvbXBhcmFibGVBU0NJSUxpdGVyYWwpOworYm9vbCBvcGVyYXRvcj09KENvbXBhcmFibGVBU0NJ
SUxpdGVyYWwsIENvbXBhcmFibGVTdHJpbmdWaWV3KTsKKworV1RGX0VYUE9SVF9QUklWQVRFIGJv
b2wgc2hvdWxkUGVyZm9ybU9uZVRpbWVDaGVjayhjb25zdCB2b2lkKiBnbG9iYWxPYmplY3RBZGRy
ZXNzKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQXJyYXlUeXBlPiBTb3J0ZWRBcnJheU1hcDxBcnJh
eVR5cGU+OjpTb3J0ZWRBcnJheU1hcChjb25zdCBBcnJheVR5cGUmIGFycmF5KQorICAgIDogbV9h
cnJheSB7IGFycmF5IH0KK3sKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIGlmIChzaG91bGRQZXJm
b3JtT25lVGltZUNoZWNrKCZhcnJheSkpIHsKKyAgICAgICAgQVNTRVJUKHN0ZDo6aXNfc29ydGVk
KHN0ZDo6YmVnaW4oYXJyYXkpLCBzdGQ6OmVuZChhcnJheSksIFtdIChhdXRvJiBhLCBhdXRvIGIp
IHsKKyAgICAgICAgICAgIHJldHVybiBhLmZpcnN0IDwgYi5maXJzdDsKKyAgICAgICAgfSkpOwor
ICAgICAgICBBU1NFUlQoc3RkOjphZGphY2VudF9maW5kKHN0ZDo6YmVnaW4oYXJyYXkpLCBzdGQ6
OmVuZChhcnJheSksIFtdIChhdXRvJiBhLCBhdXRvJiBiKSB7CisgICAgICAgICAgICByZXR1cm4g
YS5maXJzdCA9PSBiLmZpcnN0OworICAgICAgICB9KSA9PSBzdGQ6OmVuZChhcnJheSkpOworICAg
IH0KKyNlbmRpZgorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBcnJheVR5cGU+IHRlbXBsYXRlPHR5
cGVuYW1lIEtleUFyZ3VtZW50PiBpbmxpbmUgYXV0byBTb3J0ZWRBcnJheU1hcDxBcnJheVR5cGU+
Ojp0cnlHZXQoY29uc3QgS2V5QXJndW1lbnQmIGtleSkgY29uc3QgLT4gY29uc3QgVmFsdWVUeXBl
KgoreworICAgIGF1dG8gcGFyc2VkS2V5ID0gRWxlbWVudFR5cGU6OmZpcnN0X3R5cGU6OnBhcnNl
KGtleSk7CisgICAgaWYgKCFwYXJzZWRLZXkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgZW5oYW5jZSB0cnlCaW5hcnlTZWFyY2ggc28gaXQgY2FuIGRl
ZHVjZSBFbGVtZW50VHlwZS4KKyAgICAvLyBGSVhNRTogSWYgdGhlIGFycmF5J3Mgc2l6ZSBpcyBz
bWFsbCBlbm91Z2gsIHNob3VsZCBkbyBsaW5lYXIgc2VhcmNoIHNpbmNlIGl0IGlzIG1vcmUgZWZm
aWNpZW50IHRoYW4gYmluYXJ5IHNlYXJjaC4KKyAgICBhdXRvIGVsZW1lbnQgPSB0cnlCaW5hcnlT
ZWFyY2g8RWxlbWVudFR5cGU+KG1fYXJyYXksIHN0ZDo6c2l6ZShtX2FycmF5KSwgKnBhcnNlZEtl
eSwgW10gKGF1dG8qIGVsZW1lbnQpIHsKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmZpcnN0Owor
ICAgIH0pOworICAgIHJldHVybiBlbGVtZW50ID8gJmVsZW1lbnQtPnNlY29uZCA6IG51bGxwdHI7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFycmF5VHlwZT4gdGVtcGxhdGU8dHlwZW5hbWUgS2V5
QXJndW1lbnQ+IGlubGluZSBhdXRvIFNvcnRlZEFycmF5TWFwPEFycmF5VHlwZT46OmdldChjb25z
dCBLZXlBcmd1bWVudCYga2V5LCBjb25zdCBWYWx1ZVR5cGUmIGRlZmF1bHRWYWx1ZSkgY29uc3Qg
LT4gVmFsdWVUeXBlCit7CisgICAgYXV0byByZXN1bHQgPSB0cnlHZXQoa2V5KTsKKyAgICByZXR1
cm4gcmVzdWx0ID8gKnJlc3VsdCA6IGRlZmF1bHRWYWx1ZTsKK30KKworaW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShDb21wYXJhYmxlQVNDSUlMaXRlcmFsIGEsIENvbXBhcmFibGVBU0NJSUxpdGVyYWwg
YikKK3sKKyAgICByZXR1cm4gIXN0ZDo6c3RyY21wKGEubGl0ZXJhbCwgYi5saXRlcmFsKTsKK30K
KworaW5saW5lIGJvb2wgb3BlcmF0b3I8KENvbXBhcmFibGVBU0NJSUxpdGVyYWwgYSwgQ29tcGFy
YWJsZUFTQ0lJTGl0ZXJhbCBiKQoreworICAgIHJldHVybiBzdGQ6OnN0cmNtcChhLmxpdGVyYWws
IGIubGl0ZXJhbCkgPCAwOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KENvbXBhcmFibGVT
dHJpbmdWaWV3IGEsIENvbXBhcmFibGVBU0NJSUxpdGVyYWwgYikKK3sKKyAgICByZXR1cm4gYS5z
dHJpbmcgPT0gYi5saXRlcmFsOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcjwoQ29tcGFyYWJs
ZVN0cmluZ1ZpZXcgYSwgQ29tcGFyYWJsZUFTQ0lJTGl0ZXJhbCBiKQoreworICAgIHJldHVybiBj
b2RlUG9pbnRDb21wYXJlKGEuc3RyaW5nLCBiLmxpdGVyYWwpIDwgMDsKK30KKworaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShDb21wYXJhYmxlU3RyaW5nVmlldyBhLCBDb21wYXJhYmxlQVNDSUlMaXRl
cmFsIGIpCit7CisgICAgcmV0dXJuICEoYSA9PSBiKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShDb21wYXJhYmxlQVNDSUlMaXRlcmFsIGEsIENvbXBhcmFibGVTdHJpbmdWaWV3IGIpCit7
CisgICAgcmV0dXJuIGIgPT0gYTsKK30KKworfQorCit1c2luZyBXVEY6OkNvbXBhcmFibGVBU0NJ
SUxpdGVyYWw7Cit1c2luZyBXVEY6OlNvcnRlZEFycmF5TWFwOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvU3RkTGliRXh0cmFzLmggYi9Tb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaApp
bmRleCAxOWQ1NDk0NWQxMGFmMmFmMDJiM2MyM2M0YzdjZGJiOGRkNDQ5MTBiLi4zMWQ0YTY4MDE3
YTRlYTljMDIyYTY2MjNiNDFmNDYzNmM3ZWRlZmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9TdGRMaWJFeHRyYXMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaApAQCAt
MjA2LDcgKzIwNiw3IEBAIGlubGluZSBBcnJheUVsZW1lbnRUeXBlKiBiaW5hcnlTZWFyY2hJbXBs
KEFycmF5VHlwZSYgYXJyYXksIHNpemVfdCBzaXplLCBLZXlUeXBlCiAgICAgc2l6ZV90IG9mZnNl
dCA9IDA7CiAgICAgd2hpbGUgKHNpemUgPiAxKSB7CiAgICAgICAgIHNpemVfdCBwb3MgPSAoc2l6
ZSAtIDEpID4+IDE7Ci0gICAgICAgIEtleVR5cGUgdmFsID0gZXh0cmFjdEtleSgmYXJyYXlbb2Zm
c2V0ICsgcG9zXSk7CisgICAgICAgIGF1dG8gdmFsID0gZXh0cmFjdEtleSgmYXJyYXlbb2Zmc2V0
ICsgcG9zXSk7CiAgICAgICAgIAogICAgICAgICBpZiAodmFsID09IGtleSkKICAgICAgICAgICAg
IHJldHVybiAmYXJyYXlbb2Zmc2V0ICsgcG9zXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmNwcAppbmRleCBhZjA0ZDUzMDMw
ZmVjYmNmYjg1ZWE0NTk1Y2M5MWYyZTRlMGU5YTQ3Li5jNzFmZTkzYmQyODgzNjhhNmQ0ZjE3NWY1
ODViZGM4ODY4OWI2ZWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L0xvY2FsZVRvU2NyaXB0TWFwcGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmcuY3BwCkBAIC0zMiwxMiArMzIsMTMgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJMb2NhbGVUb1NjcmlwdE1hcHBpbmcuaCIKIAotI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgorI2luY2x1ZGUgPHd0Zi9Tb3J0ZWRBcnJheU1hcC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIEZJWE1FOiBDb25zaWRlciBt
b3ZpbmcgYWxvbmdzaWRlIENvbXBhcmFibGVBU0NJSUxpdGVyYWwgYW5kIGdpdmluZyBhbiBldmVu
IGJldHRlciBuYW1lLgogdGVtcGxhdGU8dHlwZW5hbWUgU3RvcmFnZUludGVnZXI+CiBjbGFzcyBQ
YWNrZWRBU0NJSUxvd2VyQ29kZXMgewogcHVibGljOgpAQCAtMTEyLDE5ICsxMTMsMTQgQEAgcHJp
dmF0ZToKICAgICBTdG9yYWdlSW50ZWdlciBtX3ZhbHVlIHsgMCB9OwogfTsKIAotdXNpbmcgU2Ny
aXB0TmFtZSA9IFBhY2tlZEFTQ0lJTG93ZXJDb2Rlczx1aW50MzJfdD47Ci1zdHJ1Y3QgU2NyaXB0
TmFtZUNvZGUgewotICAgIFNjcmlwdE5hbWUgbmFtZTsKLSAgICBVU2NyaXB0Q29kZSBjb2RlOwot
fTsKLQotVVNjcmlwdENvZGUgc2NyaXB0TmFtZVRvQ29kZShjb25zdCBTdHJpbmcmIHNjcmlwdE5h
bWUpCitVU2NyaXB0Q29kZSBzY3JpcHROYW1lVG9Db2RlKFN0cmluZ1ZpZXcgc2NyaXB0TmFtZSkK
IHsKICAgICAvLyBUaGlzIGdlbmVyYWxseSBtYXBzIGFuIElTTyAxNTkyNCBzY3JpcHQgY29kZSB0
byBpdHMgVVNjcmlwdENvZGUsIGJ1dCBjZXJ0YWluIGZhbWlsaWVzIG9mIHNjcmlwdCBjb2RlcyBh
cmUKICAgICAvLyB0cmVhdGVkIGFzIGEgc2luZ2xlIHNjcmlwdCBmb3IgYXNzaWduaW5nIGEgcGVy
LXNjcmlwdCBmb250IGluIFNldHRpbmdzLiBGb3IgZXhhbXBsZSwgImhpcmEiIGlzIG1hcHBlZCB0
bwogICAgIC8vIFVTQ1JJUFRfS0FUQUtBTkFfT1JfSElSQUdBTkEgaW5zdGVhZCBvZiBVU0NSSVBU
X0hJUkFHQU5BLCBzaW5jZSB3ZSB3YW50IGFsbCBKYXBhbmVzZSBzY3JpcHRzIHRvIGJlIHJlbmRl
cmVkCiAgICAgLy8gdXNpbmcgdGhlIHNhbWUgZm9udCBzZXR0aW5nLgotICAgIHN0YXRpYyBjb25z
dGV4cHIgU2NyaXB0TmFtZUNvZGUgc2NyaXB0TmFtZUNvZGVMaXN0W10gPSB7CisgICAgdXNpbmcg
U2NyaXB0TmFtZSA9IFBhY2tlZEFTQ0lJTG93ZXJDb2Rlczx1aW50MzJfdD47CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBzdGQ6OnBhaXI8U2NyaXB0TmFtZSwgVVNjcmlwdENvZGU+IHNjcmlwdE5hbWVD
b2RlTGlzdFtdID0gewogICAgICAgICB7ICJhcmFiIiwgVVNDUklQVF9BUkFCSUMgfSwKICAgICAg
ICAgeyAiYXJtbiIsIFVTQ1JJUFRfQVJNRU5JQU4gfSwKICAgICAgICAgeyAiYmFsaSIsIFVTQ1JJ
UFRfQkFMSU5FU0UgfSwKQEAgLTIzMiwzOCArMjI4LDE2IEBAIFVTY3JpcHRDb2RlIHNjcmlwdE5h
bWVUb0NvZGUoY29uc3QgU3RyaW5nJiBzY3JpcHROYW1lKQogICAgICAgICB7ICJ6eXl5IiwgVVND
UklQVF9DT01NT04gfSwKICAgICAgICAgeyAienp6eiIsIFVTQ1JJUFRfVU5LTk9XTiB9LAogICAg
IH07Ci0KICAgICBzdGF0aWNfYXNzZXJ0KFNjcmlwdE5hbWUoImFyYWIiKS52YWx1ZSgpID09IDB4
NjE3MjYxNjJVKTsKICAgICBzdGF0aWNfYXNzZXJ0KFNjcmlwdE5hbWUoInp6enoiKS52YWx1ZSgp
ID09IDB4N2E3YTdhN2FVKTsKLQotICAgIEFTU0VSVCgKLSAgICAgICAgc3RkOjppc19zb3J0ZWQo
c3RkOjpiZWdpbihzY3JpcHROYW1lQ29kZUxpc3QpLCBzdGQ6OmVuZChzY3JpcHROYW1lQ29kZUxp
c3QpLAotICAgICAgICAgICAgW10oY29uc3QgU2NyaXB0TmFtZUNvZGUmIGEsIGNvbnN0IFNjcmlw
dE5hbWVDb2RlJiBiKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZSA8IGIubmFtZTsK
LSAgICAgICAgICAgIH0pKTsKLQotICAgIGF1dG8gbmFtZSA9IFNjcmlwdE5hbWU6OnBhcnNlKHNj
cmlwdE5hbWUpOwotICAgIGlmICghbmFtZSkKLSAgICAgICAgcmV0dXJuIFVTQ1JJUFRfSU5WQUxJ
RF9DT0RFOwotCi0gICAgYXV0byogZWxlbWVudCA9IHRyeUJpbmFyeVNlYXJjaDxTY3JpcHROYW1l
Q29kZT4oc2NyaXB0TmFtZUNvZGVMaXN0LCBzdGQ6OnNpemUoc2NyaXB0TmFtZUNvZGVMaXN0KSwg
bmFtZS52YWx1ZSgpLAotICAgICAgICBbXShjb25zdCBTY3JpcHROYW1lQ29kZSogc2NyaXB0TmFt
ZUNvZGUpIHsKLSAgICAgICAgICAgIHJldHVybiBzY3JpcHROYW1lQ29kZS0+bmFtZTsKLSAgICAg
ICAgfSk7Ci0gICAgaWYgKGVsZW1lbnQpCi0gICAgICAgIHJldHVybiBlbGVtZW50LT5jb2RlOwot
ICAgIHJldHVybiBVU0NSSVBUX0lOVkFMSURfQ09ERTsKKyAgICBTb3J0ZWRBcnJheU1hcCBtYXAg
eyBzY3JpcHROYW1lQ29kZUxpc3QgfTsKKyAgICByZXR1cm4gbWFwLmdldChzY3JpcHROYW1lLCBV
U0NSSVBUX0lOVkFMSURfQ09ERSk7CiB9CiAKLXVzaW5nIExvY2FsZU5hbWUgPSBQYWNrZWRBU0NJ
SUxvd2VyQ29kZXM8dWludDY0X3Q+Owotc3RydWN0IExvY2FsZVNjcmlwdCB7Ci0gICAgTG9jYWxl
TmFtZSBsb2NhbGU7Ci0gICAgVVNjcmlwdENvZGUgc2NyaXB0OwotfTsKLQogVVNjcmlwdENvZGUg
bG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihjb25zdCBTdHJpbmcmIGxvY2FsZSkK
IHsKLSAgICBzdGF0aWMgY29uc3RleHByIExvY2FsZVNjcmlwdCBsb2NhbGVTY3JpcHRMaXN0W10g
PSB7CisgICAgdXNpbmcgTG9jYWxlTmFtZSA9IFBhY2tlZEFTQ0lJTG93ZXJDb2Rlczx1aW50NjRf
dD47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OnBhaXI8TG9jYWxlTmFtZSwgVVNjcmlwdENv
ZGU+IGxvY2FsZVNjcmlwdExpc3RbXSA9IHsKICAgICAgICAgeyAiYWEiLCBVU0NSSVBUX0xBVElO
IH0sCiAgICAgICAgIHsgImFiIiwgVVNDUklQVF9DWVJJTExJQyB9LAogICAgICAgICB7ICJhZHki
LCBVU0NSSVBUX0NZUklMTElDIH0sCkBAIC00NjMsMzUgKzQzNywxNCBAQCBVU2NyaXB0Q29kZSBs
b2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9uKGNvbnN0IFN0cmluZyYgbG9jYWxlKQog
ICAgICAgICB7ICJ6aF90dyIsIFVTQ1JJUFRfVFJBRElUSU9OQUxfSEFOIH0sCiAgICAgICAgIHsg
Inp1IiwgVVNDUklQVF9MQVRJTiB9LAogICAgIH07Ci0KICAgICBzdGF0aWNfYXNzZXJ0KExvY2Fs
ZU5hbWUoImFhIikudmFsdWUoKSA9PSAweDYxNjEwMDAwMDAwMDAwMDBVTEwpOwogICAgIHN0YXRp
Y19hc3NlcnQoTG9jYWxlTmFtZSgiemhfdHciKS52YWx1ZSgpID09IDB4N2E2ODVmNzQ3NzAwMDAw
MFVMTCk7Ci0KLSAgICBBU1NFUlQoCi0gICAgICAgIHN0ZDo6aXNfc29ydGVkKHN0ZDo6YmVnaW4o
bG9jYWxlU2NyaXB0TGlzdCksIHN0ZDo6ZW5kKGxvY2FsZVNjcmlwdExpc3QpLAotICAgICAgICAg
ICAgW10oY29uc3QgTG9jYWxlU2NyaXB0JiBhLCBjb25zdCBMb2NhbGVTY3JpcHQmIGIpIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gYS5sb2NhbGUgPCBiLmxvY2FsZTsKLSAgICAgICAgICAgIH0p
KTsKLQotICAgIGF1dG8gdHJ5RmluZFNjcmlwdENvZGUgPSBbJl0gKGNvbnN0IFN0cmluZyYgc3Ry
aW5nKSAtPiBPcHRpb25hbDxVU2NyaXB0Q29kZT4gewotICAgICAgICBhdXRvIGxvY2FsZU5hbWUg
PSBMb2NhbGVOYW1lOjpwYXJzZShzdHJpbmcpOwotICAgICAgICBpZiAoIWxvY2FsZU5hbWUpCi0g
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgICAgIGF1dG8qIGVsZW1lbnQg
PSB0cnlCaW5hcnlTZWFyY2g8TG9jYWxlU2NyaXB0Pihsb2NhbGVTY3JpcHRMaXN0LCBzdGQ6OnNp
emUobG9jYWxlU2NyaXB0TGlzdCksIGxvY2FsZU5hbWUudmFsdWUoKSwKLSAgICAgICAgICAgIFtd
KGNvbnN0IExvY2FsZVNjcmlwdCogbG9jYWxlU2NyaXB0KSB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGxvY2FsZVNjcmlwdC0+bG9jYWxlOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIGlmIChl
bGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQtPnNjcmlwdDsKLSAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLSAgICB9OwotCi0gICAgU3RyaW5nIGNhbm9uaWNhbExvY2FsZSA9
IGxvY2FsZTsKLSAgICBjYW5vbmljYWxMb2NhbGUucmVwbGFjZSgnLScsICdfJyk7Ci0gICAgd2hp
bGUgKCFjYW5vbmljYWxMb2NhbGUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmIChhdXRvIHNjcmlw
dENvZGUgPSB0cnlGaW5kU2NyaXB0Q29kZShjYW5vbmljYWxMb2NhbGUpKQotICAgICAgICAgICAg
cmV0dXJuIHNjcmlwdENvZGUudmFsdWUoKTsKKyAgICBTb3J0ZWRBcnJheU1hcCBtYXAgeyBsb2Nh
bGVTY3JpcHRMaXN0IH07CisgICAgU3RyaW5nIGNhbm9uaWNhbExvY2FsZVN0cmluZyA9IGxvY2Fs
ZTsKKyAgICBjYW5vbmljYWxMb2NhbGVTdHJpbmcucmVwbGFjZSgnLScsICdfJyk7CisgICAgZm9y
IChTdHJpbmdWaWV3IGNhbm9uaWNhbExvY2FsZSA9IGNhbm9uaWNhbExvY2FsZVN0cmluZzsgIWNh
bm9uaWNhbExvY2FsZS5pc0VtcHR5KCk7ICkgeworICAgICAgICBpZiAoYXV0byBzY3JpcHRDb2Rl
ID0gbWFwLnRyeUdldChjYW5vbmljYWxMb2NhbGUpKQorICAgICAgICAgICAgcmV0dXJuICpzY3Jp
cHRDb2RlOwogICAgICAgICBhdXRvIHVuZGVyc2NvcmVQb3NpdGlvbiA9IGNhbm9uaWNhbExvY2Fs
ZS5yZXZlcnNlRmluZCgnXycpOwogICAgICAgICBpZiAodW5kZXJzY29yZVBvc2l0aW9uID09IG5v
dEZvdW5kKQogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmcuaAppbmRleCA3MzAwNmQyMzU3NmE1YzY4
OGNiYjc5YjkzOTI1ZDZhYjc4M2NiNzBlLi4xNGFmNmE1N2ZjMzJkY2ZmMjlmMDliMGVmNjFmMmY0
ODVjMzY4ZjQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2Fs
ZVRvU2NyaXB0TWFwcGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9j
YWxlVG9TY3JpcHRNYXBwaW5nLmgKQEAgLTI4LDggKzI4LDcgQEAKICAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
Ki8KIAotI2lmbmRlZiBMb2NhbGVUb1NjcmlwdE1hcHBpbmdfaAotI2RlZmluZSBMb2NhbGVUb1Nj
cmlwdE1hcHBpbmdfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx1bmljb2RlL3VzY3JpcHQu
aD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtMzcsOCArMzYsNiBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBVU2NyaXB0Q29kZSBsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0
aW9uKGNvbnN0IFN0cmluZyYpOwotV0VCQ09SRV9FWFBPUlQgVVNjcmlwdENvZGUgc2NyaXB0TmFt
ZVRvQ29kZShjb25zdCBTdHJpbmcmKTsKK1dFQkNPUkVfRVhQT1JUIFVTY3JpcHRDb2RlIHNjcmlw
dE5hbWVUb0NvZGUoU3RyaW5nVmlldyk7CiAKIH0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5o
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1h
bmFnZXIuaAppbmRleCBiYTE3YzgyN2U5M2MxMTJmYjMxZjBiNTliZDk0NDI5Mzg2NjU3YmE0Li5k
YTQxNTdiZjg2YWE0ZDZlMDJhZjk2ZmU5MzE0MWU2OGY5MWFlYzk4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnRNYW5hZ2VyLmgKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+
CiAjaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFu
ZGxlci5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5oCmluZGV4IGQ0NDk1MDQ0
NjNmZmUwZDk5ZGJlY2FhNDQ3N2IwNTNhYzZjNTc1NjQuLjM3N2QzMzc5OWY3YmI1ZGNlNmNlNWI5
MDZhMzdlNTI0OGU1MDkxYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmgK
QEAgLTI5LDcgKzI5LDYgQEAKIAogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZVN0b3JhZ2UuaCIKICNp
bmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXgg
MWU4ZjU1ZmQwYzg0MDBjMmVhZTQwOGM1YWI2OTI1ZTFmMjc5MDRmNy4uNjBmMjIwOWE2OTBmNWJl
ZmQyNGFkNmRiYjc3ZjdhZWEwYTIwODYzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTk1LDYgKzk1LDcgQEAKICNpbXBv
cnQgPHBhbC9zcGkvY29jb2EvTlNBY2Nlc3NpYmlsaXR5U1BJLmg+CiAjaW1wb3J0IDxwYWwvc3Bp
L21hYy9OU0FwcGxpY2F0aW9uU1BJLmg+CiAjaW1wb3J0IDx3dGYvU2V0Rm9yU2NvcGUuaD4KKyNp
bXBvcnQgPHd0Zi9Tb3J0ZWRBcnJheU1hcC5oPgogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlC
QUNLX1RBUkdFVCkKICNpbXBvcnQgPFdlYkNvcmUvTWVkaWFQbGF5YmFja1RhcmdldENvY29hLmg+
CkBAIC0yMDcsMzIgKzIwOCwyMiBAQCBib29sIFdlYlBhZ2U6OnNob3VsZFVzZVBERlBsdWdpbihj
b25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlLCBTdHJpbmdWaWV3IHBhdGgpIGNvbgogICAgICAgICAg
ICAgICAgICYmIChwYXRoLmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoIi5wZGYiKSB8fCBwYXRo
LmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoIi5wcyIpKSkpOwogfQogCi10eXBlZGVmIEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+IFNlbGVjdG9yTmFtZU1hcDsKLQotLy8gTWFwIHNlbGVjdG9ycyBp
bnRvIEVkaXRvciBjb21tYW5kIG5hbWVzLgotLy8gVGhpcyBpcyBub3QgbmVlZGVkIGZvciBhbnkg
c2VsZWN0b3JzIHRoYXQgaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIHRoZSBFZGl0b3IgY29tbWFuZC4K
LXN0YXRpYyBjb25zdCBTZWxlY3Rvck5hbWVNYXAqIGNyZWF0ZVNlbGVjdG9yRXhjZXB0aW9uTWFw
KCkKLXsKLSAgICBTZWxlY3Rvck5hbWVNYXAqIG1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPjsKLQotICAgIG1hcC0+YWRkKCJpbnNlcnROZXdsaW5lSWdub3JpbmdGaWVsZEVkaXRvcjoi
LCAiSW5zZXJ0TmV3bGluZSIpOwotICAgIG1hcC0+YWRkKCJpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0
b3I6IiwgIkluc2VydE5ld2xpbmUiKTsKLSAgICBtYXAtPmFkZCgiaW5zZXJ0VGFiSWdub3JpbmdG
aWVsZEVkaXRvcjoiLCAiSW5zZXJ0VGFiIik7Ci0gICAgbWFwLT5hZGQoInBhZ2VEb3duOiIsICJN
b3ZlUGFnZURvd24iKTsKLSAgICBtYXAtPmFkZCgicGFnZURvd25BbmRNb2RpZnlTZWxlY3Rpb246
IiwgIk1vdmVQYWdlRG93bkFuZE1vZGlmeVNlbGVjdGlvbiIpOwotICAgIG1hcC0+YWRkKCJwYWdl
VXA6IiwgIk1vdmVQYWdlVXAiKTsKLSAgICBtYXAtPmFkZCgicGFnZVVwQW5kTW9kaWZ5U2VsZWN0
aW9uOiIsICJNb3ZlUGFnZVVwQW5kTW9kaWZ5U2VsZWN0aW9uIik7Ci0KLSAgICByZXR1cm4gbWFw
OwotfQotCiBzdGF0aWMgU3RyaW5nIGNvbW1hbmROYW1lRm9yU2VsZWN0b3JOYW1lKGNvbnN0IFN0
cmluZyYgc2VsZWN0b3JOYW1lKQogewotICAgIC8vIENoZWNrIHRoZSBleGNlcHRpb24gbWFwIGZp
cnN0LgotICAgIHN0YXRpYyBjb25zdCBTZWxlY3Rvck5hbWVNYXAqIGV4Y2VwdGlvbk1hcCA9IGNy
ZWF0ZVNlbGVjdG9yRXhjZXB0aW9uTWFwKCk7Ci0gICAgU2VsZWN0b3JOYW1lTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IGV4Y2VwdGlvbk1hcC0+ZmluZChzZWxlY3Rvck5hbWUpOwotICAgIGlmIChp
dCAhPSBleGNlcHRpb25NYXAtPmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnZhbHVlOworICAg
IC8vIE1hcCBzZWxlY3RvcnMgaW50byBFZGl0b3IgY29tbWFuZCBuYW1lcy4KKyAgICAvLyBUaGlz
IGlzIG5vdCBuZWVkZWQgZm9yIGFueSBzZWxlY3RvcnMgdGhhdCBoYXZlIHRoZSBzYW1lIG5hbWUg
YXMgdGhlIEVkaXRvciBjb21tYW5kLgorICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjpwYWlyPENv
bXBhcmFibGVBU0NJSUxpdGVyYWwsIEFTQ0lJTGl0ZXJhbD4gc2VsZWN0b3JFeGNlcHRpb25zW10g
PSB7CisgICAgICAgIHsgImluc2VydE5ld2xpbmVJZ25vcmluZ0ZpZWxkRWRpdG9yOiIsICJJbnNl
cnROZXdsaW5lIl9zIH0sCisgICAgICAgIHsgImluc2VydFBhcmFncmFwaFNlcGFyYXRvcjoiLCAi
SW5zZXJ0TmV3bGluZSJfcyB9LAorICAgICAgICB7ICJpbnNlcnRUYWJJZ25vcmluZ0ZpZWxkRWRp
dG9yOiIsICJJbnNlcnRUYWIiX3MgfSwKKyAgICAgICAgeyAicGFnZURvd246IiwgIk1vdmVQYWdl
RG93biJfcyB9LAorICAgICAgICB7ICJwYWdlRG93bkFuZE1vZGlmeVNlbGVjdGlvbjoiLCAiTW92
ZVBhZ2VEb3duQW5kTW9kaWZ5U2VsZWN0aW9uIl9zIH0sCisgICAgICAgIHsgInBhZ2VVcDoiLCAi
TW92ZVBhZ2VVcCJfcyB9LAorICAgICAgICB7ICJwYWdlVXBBbmRNb2RpZnlTZWxlY3Rpb246Iiwg
Ik1vdmVQYWdlVXBBbmRNb2RpZnlTZWxlY3Rpb24iX3MgfSwKKyAgICB9OworICAgIFNvcnRlZEFy
cmF5TWFwIG1hcCB7IHNlbGVjdG9yRXhjZXB0aW9ucyB9OworICAgIGlmIChhdXRvIGNvbW1hbmRO
YW1lID0gbWFwLnRyeUdldChzZWxlY3Rvck5hbWUpKQorICAgICAgICByZXR1cm4gKmNvbW1hbmRO
YW1lOwogCiAgICAgLy8gUmVtb3ZlIHRoZSB0cmFpbGluZyBjb2xvbi4KICAgICAvLyBObyBuZWVk
IHRvIGNhcGl0YWxpemUgdGhlIGNvbW1hbmQgbmFtZSBzaW5jZSBFZGl0b3IgY29tbWFuZCBuYW1l
cyBhcmUgbm90IGNhc2Ugc2Vuc2l0aXZlLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426438</attachid>
            <date>2021-04-19 10:02:38 -0700</date>
            <delta_ts>2021-04-19 14:56:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224733-20210419100237.patch</filename>
            <type>text/plain</type>
            <size>31073</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2MjU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDFlNmYxMWJmNzc2Y2E2ZGZkNzgwMzNi
NzA4MGNmYmE2NmY1MDFhMDkuLmExYjJmMjQxNjMwZDQ4NTE2ZTE3ZjY1YjY4NTlhNDk1YTliNGM0
ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjEtMDQtMTkgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIHNvcnRlZCBhcnJheSBtYXBwaW5nIG1hY2hp
bmVyeSBpbiBMb2NhbGVUb1NjcmlwdE1hcHBpbmcuY3BwIGZvciByZXVzZSBlbHNld2hlcmUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDczMworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6IEFkZGVkIFNvcnRlZEFycmF5TWFwLmguCisgICAgICAgICog
d3RmL0NNYWtlTGlzdHMudHh0OiBEaXR0by4KKworICAgICAgICAqIHd0Zi9Tb3J0ZWRBcnJheU1h
cC5oOiBBZGRlZC4gQnVpbGRzIG9uIHRoZSBpZGlvbSBpbiBMb2NhbFRvU2NyaXB0TWFwcGluZywg
YW5kIHRvIGJlCisgICAgICAgIGdlbmVyaWMgdXNlcyBzdGQ6OnBhaXIgaW5zdGVhZCBvZiBjdXN0
b20gc3RydWN0dXJlcy4gSW5jbHVkZXMgdGhlIENvbXBhcmFibGVBU0NJSUxpdGVyYWwKKyAgICAg
ICAgc3RydWN0dXJlIGZvciBtYXBzIHRoYXQgYXJlIGtleWVkIGJ5IGNhc2Utc2Vuc2l0aXZlIEFT
Q0lJIHN0cmluZ3MuCisKKyAgICAgICAgKiB3dGYvU3RkTGliRXh0cmFzLmg6CisgICAgICAgIChX
VEY6OmJpbmFyeVNlYXJjaEltcGwpOiBVc2UgYXV0byBpbiBvbmUgcGxhY2UgdG8gbWFrZSB0aGlz
IGEgYml0IG1vcmUgZ2VuZXJpYy4KKwogMjAyMS0wNC0xOSAgS2ltbW8gS2lubnVuZW4gIDxra2lu
bnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEVuYWJsZSAtV3RocmVhZC1zYWZldHksIGFkZCBh
dHRyaWJ1dGVzIHRvIGN1c3RvbSBsb2NrIGNsYXNzZXMsIGFuZCBwcm92aWRlIG1hY3JvcyB0byBk
ZWNsYXJlIGd1YXJkcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGE0MDQwNzMwOWUwOGQyMmYxNjk3MzcxNGQzNWIy
ZmU3NWM2YTIyODUuLmZiMjc1NDJjMjcxZTM5NzBhNjU0Y2RiOWE2YWNhNTFhNzU3YTU3YzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAyMS0wNC0xOSAgRGFyaW4gQWRsZXIgIDxkYXJp
bkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3Igc29ydGVkIGFycmF5IG1hcHBpbmcgbWFj
aGluZXJ5IGluIExvY2FsZVRvU2NyaXB0TWFwcGluZy5jcHAgZm9yIHJldXNlIGVsc2V3aGVyZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0NzMzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyLmg6IFJlbW92ZWQgdW5uZWVk
ZWQgaW5jbHVkZXMuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENSdHBTRnJhbWVU
cmFuc2Zvcm1lci5oOiBEaXR0by4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2xpYndl
YnJ0Yy9MaWJXZWJSVENQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaDogRGl0dG8uCisgICAgICAgICog
TW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JDbGllbnQuaDogRGl0dG8u
CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwOiBEaXR0
by4KKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RGVmbGF0ZXIuY3BwOiBE
aXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9JRExUeXBlcy5oOiBEaXR0by4KKyAgICAgICAgKiBi
cmlkZ2UvanNjL0JyaWRnZUpTQy5oOiBEaXR0by4KKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9u
cy9ERkFOb2RlLmg6IERpdHRvLgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL05GQVRvREZB
LmNwcDogRGl0dG8uCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvVGVybS5oOiBEaXR0by4K
KyAgICAgICAgKiBjc3MvdHlwZWRvbS9TdHlsZVByb3BlcnR5TWFwLmg6IERpdHRvLgorICAgICAg
ICAqIGNzcy90eXBlZG9tL1N0eWxlUHJvcGVydHlNYXBSZWFkT25seS5jcHA6IERpdHRvLgorICAg
ICAgICAqIGNzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcDogRGl0dG8uCisKKyAgICAgICAgKiBw
bGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpzY3JpcHROYW1lVG9Db2RlKTogUmVmYWN0b3IgdG8gdXNlIFNvcnRlZEFycmF5TWFwLiBBbHNv
IGNoYW5nZWQgdG8gdGFrZSBTdHJpbmdWaWV3LgorICAgICAgICAoV2ViQ29yZTo6bG9jYWxlVG9T
Y3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbik6IERpdHRvLiBDdXQgZG93biBvbiBtZW1vcnkgYWxs
b2NhdGlvbiBieSB1c2luZworICAgICAgICBTdHJpbmdWaWV3IGluc3RlYWQgb2YgU3RyaW5nIHdo
aWxlIGxvb3BpbmcgdGhyb3VnaCBzdWJzdHJpbmdzLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4
dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmcuaDogQ2hhbmdlZCBzY3JpcHROYW1lVG9Db2RlIHRvIHRh
a2UgU3RyaW5nVmlldy4KKwogMjAyMS0wNC0xOSAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFtMRkNdIFRoZSBsYXlvdXQgY29udGFpbm1lbnQgYm94IGVzdGFibGlz
aGVzIGFuIGFic29sdXRlIHBvc2l0aW9uaW5nIGNvbnRhaW5pbmcgYmxvY2sgYW5kIGEgZml4ZWQg
cG9zaXRpb25pbmcgY29udGFpbmluZyBibG9jawpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA0NDc3MzI1MzQ0YzU3Nzhk
YzY0NTBkNWNkODQ4OGY1NGM0YmYwZDkxLi5jMjQwZmFhOTBkOTEyNjBkMWZkODA0M2JkMjIzYjJm
NzAwNjUzNTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIxLTA0LTE5ICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZWZhY3RvciBzb3J0ZWQgYXJyYXkg
bWFwcGluZyBtYWNoaW5lcnkgaW4gTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmNwcCBmb3IgcmV1c2Ug
ZWxzZXdoZXJlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjQ3MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5oOiBSZW1v
dmVkIHVudXNlZCBpbmNsdWRlIG9mIEhhc2hNYXAuaC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5oOiBEaXR0by4KKworICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktp
dDo6Y3JlYXRlU2VsZWN0b3JFeGNlcHRpb25NYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
Ojpjb21tYW5kTmFtZUZvclNlbGVjdG9yTmFtZSk6IFVzZSBTb3J0ZWRBcnJheU1hcCBpbnN0ZWFk
IG9mIEhhc2hNYXAuCisKIDIwMjEtMDQtMTkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNv
bT4KIAogICAgICAgICBBZGQgbW9yZSBHUFVQcm9jZXNzIHJlbGVhc2UgbG9nZ2luZyB0byBmYWNp
bGl0YXRlIGRlYnVnZ2luZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggMDdhNDcyMDliZmI1ZDEyNmE2OWM0OTNiMmQ3YzA1NGYzYTY1NWRkYi4uMjNjYTU1NmVj
MTJiNTdjMjFhYjVmM2UyMGUyZTg2ODgxYmY4YTAwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9X
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC00ODksNiArNDg5LDcgQEAKIAkJODNGMkJBREUxQ0Y5NTI0
RTAwM0U5OUMzIC8qIEZ1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzRkJBOTMxMTlERjQ1
OTcwMEYzMEFEQiAvKiBUeXBlQ2FzdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVHlwZUNhc3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2RjQ2RjVGMUEy
ODQwRUUwMENDQkYyMiAvKiBSZWZDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlZkNvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTMxNTZD
OEQyNjJDOTgyMjAwRUFFMjdCIC8qIFNvcnRlZEFycmF5TWFwLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNv
cnRlZEFycmF5TWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMjQxNjU3MjQz
QkMyRTUwMDMyRkFBRSAvKiBWZWN0b3JDb2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWZWN0b3JDb2Nv
YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzNENjMxOTFGQ0I2QUI5MDAzMkVD
RDYgLyogU3RyaW5nSGFzaGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0
cmluZ0hhc2hlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5Mzg0QjczRTIwREVB
Mjg0MDA1QjczQjIgLyogQ0ZYUENCcmlkZ2VTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0ZYUENCcmlk
Z2VTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNDcsNiArMTI0OCw3IEBA
CiAJCQkJMEZBNkYzOTIyMENDNzNBMjAwQTAzRENEIC8qIFNtYWxsUHRyU2V0LmNwcCAqLywKIAkJ
CQk3OTM2RDZBOTFDOTlGOEFFMDAwRDFBRUQgLyogU21hbGxQdHJTZXQuaCAqLywKIAkJCQlBMzBE
NDEyRDFGMERFMTNGMDBCNzE5NTQgLyogU29mdExpbmtpbmcuaCAqLywKKwkJCQk5MzE1NkM4RDI2
MkM5ODIyMDBFQUUyN0IgLyogU29ydGVkQXJyYXlNYXAuaCAqLywKIAkJCQk3OTAzOEUwNTIyNEIw
NUE3MDA0QzA3MzggLyogU3Bhbm5pbmdUcmVlLmggKi8sCiAJCQkJQThBNDczMEQxNTFBODI1QjAw
NDEyM0ZGIC8qIFNwZWN0cnVtLmggKi8sCiAJCQkJQThBNDczMEUxNTFBODI1QjAwNDEyM0ZGIC8q
IFN0YWNrQm91bmRzLmNwcCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlz
dHMudHh0IGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKaW5kZXggYmU5YTMyNjRhZTg2
M2M5NzUyZDk5OTQ2YzQ4N2U3MjM5NDE2ODdmOC4uMzgxMWE1OWIwODI2YTI0NGZkODhiMTlkMGIz
NDkzMjkyZmZhMzA3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQK
KysrIGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKQEAgLTIzNyw2ICsyMzcsNyBAQCBz
ZXQoV1RGX1BVQkxJQ19IRUFERVJTCiAgICAgU2l4Q2hhcmFjdGVySGFzaC5oCiAgICAgU21hbGxQ
dHJTZXQuaAogICAgIFNvZnRMaW5raW5nLmgKKyAgICBTb3J0ZWRBcnJheU1hcC5oCiAgICAgU3Bh
bm5pbmdUcmVlLmgKICAgICBTcGVjdHJ1bS5oCiAgICAgU3RhY2tCb3VuZHMuaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvU29ydGVkQXJyYXlNYXAuaCBiL1NvdXJjZS9XVEYvd3RmL1NvcnRl
ZEFycmF5TWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWRlNDkyNTg2NTUzODQ3M2RjZjMzNWJjNmQ5NTVlMDM4
YWRhNzEyZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1NvcnRlZEFycmF5TWFw
LmgKQEAgLTAsMCArMSwxNjAgQEAKKy8qCisKK0NvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0Ogor
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCitESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIFNvcnRl
ZEFycmF5TWFwIGlzIGEgbWFwIGxpa2UgSGFzaE1hcCwgYnV0IGl0J3MgcmVhZC1vbmx5LiBJdCB1
c2VzIG11Y2ggbGVzcyBtZW1vcnkgdGhhbiBIYXNoTWFwLgorLy8gSXQgdXNlcyBiaW5hcnkgc2Vh
cmNoIGluc3RlYWQgb2YgaGFzaGluZywgc28gY2FuIGJlIG91dHBlcmZvcm1lZCBieSBIYXNoTWFw
IGZvciB2ZXJ5IGxhcmdlIGFycmF5cy4KKy8vIFRoZSBlbGVtZW50cyBvZiB0aGUgYXJyYXkgcGFz
c2VkIHRvIHRoZSBjb25zdHJ1Y3RvciBzaG91bGQgYmUgc3RkOjpwYWlyLCB3aXRoIGtleXMgZmly
c3QgYW5kIHZhbHVlcyBzZWNvbmQuCisvLyBUaGUgYXJyYXkgc2hvdWxkIHR5cGljYWxseSBiZSBh
IGdsb2JhbCBjb25zdGFudCBleHByZXNzaW9uLiBUaGUgU29ydGVkQXJyYXlNYXAgb2JqZWN0IGl0
c2VsZiBpcworLy8gbmVhcmx5IGZyZWUgdG8gY3JlYXRlIGFuZCBkZXN0cm95IGFuZCBzbyB0eXBp
Y2FsbHkgZG9lcyBub3QgbmVlZCB0byBiZSBhIGdsb2JhbC4KKwordGVtcGxhdGU8dHlwZW5hbWUg
QXJyYXlUeXBlPiBjbGFzcyBTb3J0ZWRBcnJheU1hcCB7CitwdWJsaWM6CisgICAgdXNpbmcgRWxl
bWVudFR5cGUgPSB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9leHRlbnRfdDxBcnJheVR5cGU+OworICAg
IHVzaW5nIFZhbHVlVHlwZSA9IHR5cGVuYW1lIEVsZW1lbnRUeXBlOjpzZWNvbmRfdHlwZTsKKwor
ICAgIGNvbnN0ZXhwciBTb3J0ZWRBcnJheU1hcChjb25zdCBBcnJheVR5cGUmKTsKKworICAgIC8v
IEZJWE1FOiBUbyBtYXRjaCBIYXNoTWFwIGludGVyZmFjZSBiZXR0ZXIsIHdvdWxkIGJlIG5pY2Ug
dG8gZ2V0IHRoZSBkZWZhdWx0IHZhbHVlIGZyb20gdHJhaXRzLgorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEtleUFyZ3VtZW50PiBWYWx1ZVR5cGUgZ2V0KGNvbnN0IEtleUFyZ3VtZW50JiwgY29uc3Qg
VmFsdWVUeXBlJiBkZWZhdWx0VmFsdWUgPSB7IH0pIGNvbnN0OworCisgICAgLy8gRklYTUU6IFNo
b3VsZCBhZGQgYSBmdW5jdGlvbiBsaWtlIHRoaXMgdG8gSGFzaE1hcCBzbyB0aGUgdHdvIGtpbmRz
IG9mIG1hcHMgYXJlIG1vcmUgaW50ZXJjaGFuZ2FibGUuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
S2V5QXJndW1lbnQ+IGNvbnN0IFZhbHVlVHlwZSogdHJ5R2V0KGNvbnN0IEtleUFyZ3VtZW50Jikg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgY29uc3QgQXJyYXlUeXBlJiBtX2FycmF5OworfTsKKwor
c3RydWN0IENvbXBhcmFibGVTdHJpbmdWaWV3IHsKKyAgICBTdHJpbmdWaWV3IHN0cmluZzsKK307
CisKK3N0cnVjdCBDb21wYXJhYmxlQVNDSUlMaXRlcmFsIHsKKyAgICBjb25zdCBjaGFyKiBsaXRl
cmFsOworICAgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IHNpemU+IGNvbnN0ZXhwciBDb21wYXJhYmxl
QVNDSUlMaXRlcmFsKGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtzaXplXSkgOiBsaXRlcmFsIHsg
Y2hhcmFjdGVycyB9IHsgfQorICAgIHN0YXRpYyBPcHRpb25hbDxDb21wYXJhYmxlU3RyaW5nVmll
dz4gcGFyc2UoU3RyaW5nVmlldyBzdHJpbmcpIHsgcmV0dXJuIHsgeyBzdHJpbmcgfSB9OyB9Cit9
OworCitjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KENvbXBhcmFibGVBU0NJSUxpdGVyYWwsIENv
bXBhcmFibGVBU0NJSUxpdGVyYWwpOworY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KENvbXBhcmFi
bGVBU0NJSUxpdGVyYWwsIENvbXBhcmFibGVBU0NJSUxpdGVyYWwpOworCitib29sIG9wZXJhdG9y
PT0oQ29tcGFyYWJsZVN0cmluZ1ZpZXcsIENvbXBhcmFibGVBU0NJSUxpdGVyYWwpOworYm9vbCBv
cGVyYXRvcjwoQ29tcGFyYWJsZVN0cmluZ1ZpZXcsIENvbXBhcmFibGVBU0NJSUxpdGVyYWwpOwor
Ym9vbCBvcGVyYXRvciE9KENvbXBhcmFibGVTdHJpbmdWaWV3LCBDb21wYXJhYmxlQVNDSUlMaXRl
cmFsKTsKK2Jvb2wgb3BlcmF0b3I9PShDb21wYXJhYmxlQVNDSUlMaXRlcmFsLCBDb21wYXJhYmxl
U3RyaW5nVmlldyk7CisKK1dURl9FWFBPUlRfUFJJVkFURSBib29sIHNob3VsZFBlcmZvcm1PbmVU
aW1lQ2hlY2soY29uc3Qgdm9pZCogZ2xvYmFsT2JqZWN0QWRkcmVzcyk7CisKKy8vIEZJWE1FOiBV
c2Ugc3RkOjppc19zb3J0ZWQgaW5zdGVhZCBvZiB0aGlzIGFuZCByZW1vdmUgaXQsIG9uY2Ugd2Ug
cmVxdWlyZSBDKysyMC4KK3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBQcmVk
aWNhdGU+IGNvbnN0ZXhwciBib29sIGlzU29ydGVkQ29uc3RFeHByKEl0ZXJhdG9yIGJlZ2luLCBJ
dGVyYXRvciBlbmQsIFByZWRpY2F0ZSBwcmVkaWNhdGUpCit7CisgICAgaWYgKGJlZ2luID09IGVu
ZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgYXV0byBjdXJyZW50ID0gYmVnaW47CisgICAg
YXV0byBwcmV2aW91cyA9IGN1cnJlbnQ7CisgICAgd2hpbGUgKCsrY3VycmVudCAhPSBlbmQpIHsK
KyAgICAgICAgaWYgKCFwcmVkaWNhdGUoKnByZXZpb3VzLCAqY3VycmVudCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHByZXZpb3VzID0gY3VycmVudDsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFycmF5VHlwZT4gY29uc3RleHBy
IFNvcnRlZEFycmF5TWFwPEFycmF5VHlwZT46OlNvcnRlZEFycmF5TWFwKGNvbnN0IEFycmF5VHlw
ZSYgYXJyYXkpCisgICAgOiBtX2FycmF5IHsgYXJyYXkgfQoreworICAgIEFTU0VSVF9VTkRFUl9D
T05TVEVYUFJfQ09OVEVYVChpc1NvcnRlZENvbnN0RXhwcihzdGQ6OmJlZ2luKGFycmF5KSwgc3Rk
OjplbmQoYXJyYXkpLCBbXSAoYXV0byYgYSwgYXV0byBiKSB7CisgICAgICAgIHJldHVybiBhLmZp
cnN0IDwgYi5maXJzdDsKKyAgICB9KSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFycmF5VHlw
ZT4gdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJndW1lbnQ+IGlubGluZSBhdXRvIFNvcnRlZEFycmF5
TWFwPEFycmF5VHlwZT46OnRyeUdldChjb25zdCBLZXlBcmd1bWVudCYga2V5KSBjb25zdCAtPiBj
b25zdCBWYWx1ZVR5cGUqCit7CisgICAgYXV0byBwYXJzZWRLZXkgPSBFbGVtZW50VHlwZTo6Zmly
c3RfdHlwZTo6cGFyc2Uoa2V5KTsKKyAgICBpZiAoIXBhcnNlZEtleSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBlbmhhbmNlIHRyeUJpbmFyeVNlYXJj
aCBzbyBpdCBjYW4gZGVkdWNlIEVsZW1lbnRUeXBlLgorICAgIC8vIEZJWE1FOiBJZiB0aGUgYXJy
YXkncyBzaXplIGlzIHNtYWxsIGVub3VnaCwgc2hvdWxkIGRvIGxpbmVhciBzZWFyY2ggc2luY2Ug
aXQgaXMgbW9yZSBlZmZpY2llbnQgdGhhbiBiaW5hcnkgc2VhcmNoLgorICAgIGF1dG8gZWxlbWVu
dCA9IHRyeUJpbmFyeVNlYXJjaDxFbGVtZW50VHlwZT4obV9hcnJheSwgc3RkOjpzaXplKG1fYXJy
YXkpLCAqcGFyc2VkS2V5LCBbXSAoYXV0byogZWxlbWVudCkgeworICAgICAgICByZXR1cm4gZWxl
bWVudC0+Zmlyc3Q7CisgICAgfSk7CisgICAgcmV0dXJuIGVsZW1lbnQgPyAmZWxlbWVudC0+c2Vj
b25kIDogbnVsbHB0cjsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQXJyYXlUeXBlPiB0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXlBcmd1bWVudD4gaW5saW5lIGF1dG8gU29ydGVkQXJyYXlNYXA8QXJyYXlU
eXBlPjo6Z2V0KGNvbnN0IEtleUFyZ3VtZW50JiBrZXksIGNvbnN0IFZhbHVlVHlwZSYgZGVmYXVs
dFZhbHVlKSBjb25zdCAtPiBWYWx1ZVR5cGUKK3sKKyAgICBhdXRvIHJlc3VsdCA9IHRyeUdldChr
ZXkpOworICAgIHJldHVybiByZXN1bHQgPyAqcmVzdWx0IDogZGVmYXVsdFZhbHVlOworfQorCitj
b25zdGV4cHIgaW50IHN0cmNtcENvbnN0RXhwcihjb25zdCBjaGFyKiBhLCBjb25zdCBjaGFyKiBi
KQoreworICAgIHdoaWxlICgqYSA9PSAqYiAmJiAqYSAmJiAqYikgeworICAgICAgICArK2E7Cisg
ICAgICAgICsrYjsKKyAgICB9CisgICAgcmV0dXJuICphID09ICpiID8gMCA6ICphIDwgKmIgPyAt
MSA6IDE7Cit9CisKK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oQ29tcGFyYWJsZUFTQ0lJTGl0
ZXJhbCBhLCBDb21wYXJhYmxlQVNDSUlMaXRlcmFsIGIpCit7CisgICAgcmV0dXJuICFzdHJjbXBD
b25zdEV4cHIoYS5saXRlcmFsLCBiLmxpdGVyYWwpOworfQorCitjb25zdGV4cHIgYm9vbCBvcGVy
YXRvcjwoQ29tcGFyYWJsZUFTQ0lJTGl0ZXJhbCBhLCBDb21wYXJhYmxlQVNDSUlMaXRlcmFsIGIp
Cit7CisgICAgcmV0dXJuIHN0cmNtcENvbnN0RXhwcihhLmxpdGVyYWwsIGIubGl0ZXJhbCkgPCAw
OworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KENvbXBhcmFibGVTdHJpbmdWaWV3IGEsIENv
bXBhcmFibGVBU0NJSUxpdGVyYWwgYikKK3sKKyAgICByZXR1cm4gYS5zdHJpbmcgPT0gYi5saXRl
cmFsOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcjwoQ29tcGFyYWJsZVN0cmluZ1ZpZXcgYSwg
Q29tcGFyYWJsZUFTQ0lJTGl0ZXJhbCBiKQoreworICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJl
KGEuc3RyaW5nLCBiLmxpdGVyYWwpIDwgMDsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShD
b21wYXJhYmxlU3RyaW5nVmlldyBhLCBDb21wYXJhYmxlQVNDSUlMaXRlcmFsIGIpCit7CisgICAg
cmV0dXJuICEoYSA9PSBiKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShDb21wYXJhYmxl
QVNDSUlMaXRlcmFsIGEsIENvbXBhcmFibGVTdHJpbmdWaWV3IGIpCit7CisgICAgcmV0dXJuIGIg
PT0gYTsKK30KKworfQorCit1c2luZyBXVEY6OkNvbXBhcmFibGVBU0NJSUxpdGVyYWw7Cit1c2lu
ZyBXVEY6OlNvcnRlZEFycmF5TWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvU3RkTGli
RXh0cmFzLmggYi9Tb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAppbmRleCAxOWQ1NDk0NWQx
MGFmMmFmMDJiM2MyM2M0YzdjZGJiOGRkNDQ5MTBiLi4zMWQ0YTY4MDE3YTRlYTljMDIyYTY2MjNi
NDFmNDYzNmM3ZWRlZmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaApAQCAtMjA2LDcgKzIwNiw3IEBA
IGlubGluZSBBcnJheUVsZW1lbnRUeXBlKiBiaW5hcnlTZWFyY2hJbXBsKEFycmF5VHlwZSYgYXJy
YXksIHNpemVfdCBzaXplLCBLZXlUeXBlCiAgICAgc2l6ZV90IG9mZnNldCA9IDA7CiAgICAgd2hp
bGUgKHNpemUgPiAxKSB7CiAgICAgICAgIHNpemVfdCBwb3MgPSAoc2l6ZSAtIDEpID4+IDE7Ci0g
ICAgICAgIEtleVR5cGUgdmFsID0gZXh0cmFjdEtleSgmYXJyYXlbb2Zmc2V0ICsgcG9zXSk7Cisg
ICAgICAgIGF1dG8gdmFsID0gZXh0cmFjdEtleSgmYXJyYXlbb2Zmc2V0ICsgcG9zXSk7CiAgICAg
ICAgIAogICAgICAgICBpZiAodmFsID09IGtleSkKICAgICAgICAgICAgIHJldHVybiAmYXJyYXlb
b2Zmc2V0ICsgcG9zXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuaAppbmRleCBkZGU0Nzc3
NGJhZWEzY2M0ODBlY2JhZmRlMmEzZTBjOGMyYTQ4YzA2Li42YmRiNTBmODY0MzhlMjk2NWI1MGQw
OGNiOWYyNGY3MmNjM2Q3ZmI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlci5oCkBAIC0y
OSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiSURCQ29ubmVjdGlvblRvU2VydmVyRGVsZWdhdGUuaCIK
ICNpbmNsdWRlICJJREJSZXNvdXJjZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlIDx3dGYvRnVuY3Rp
b24uaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNp
bmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENSdHBTRnJhbWVUcmFuc2Zvcm1lci5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENSdHBTRnJhbWVUcmFuc2Zvcm1l
ci5oCmluZGV4IGJkMDg4NjBkYzRlZDc4ZDA0ZGMwODg1ZTI3NzEwYjJjYmFlMmI4OTguLjE0OTk5
NDBkMDVhMjEzZDIzOTk4ZGUzYjZjZTM0ZjE0OTliNDAxMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUnRwU0ZyYW1lVHJhbnNmb3JtZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1J0cFNGcmFtZVRyYW5zZm9y
bWVyLmgKQEAgLTI5LDcgKzI5LDYgQEAKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCiAjaW5j
bHVkZSAiUlRDUnRwVHJhbnNmb3JtQmFja2VuZC5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50
ZWQuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9s
aWJ3ZWJydGMvTGliV2ViUlRDUGVlckNvbm5lY3Rpb25CYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQuaAppbmRleCBmZWM2OGY2MTZlZDBmZDNiMmQyMTQyNjA2ZGFjNzQ3Y2RiMGVhYTIwLi5i
ZjMwODNhN2VhOGE3YTc3OWRkY2I3NjdhNjM5OGJkNDE1MzhkNGYwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENQZWVyQ29u
bmVjdGlvbkJhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L2xpYndlYnJ0Yy9MaWJXZWJSVENQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaApAQCAtMjgsNyArMjgs
NiBAQAogCiAjaW5jbHVkZSAiUGVlckNvbm5lY3Rpb25CYWNrZW5kLmgiCiAjaW5jbHVkZSAiUmVh
bHRpbWVNZWRpYVNvdXJjZS5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFj
ZSB3ZWJydGMgewogY2xhc3MgSWNlQ2FuZGlkYXRlSW50ZXJmYWNlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JDbGll
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vQXV0aGVudGljYXRvckNvb3Jk
aW5hdG9yQ2xpZW50LmgKaW5kZXggODU5NDFkNDQ1M2M1MmE1YjY3Y2RmMmMwZGQzMDJkZGUwZDlh
MDg4MC4uYWZmMGM2YWYxY2NhOGNkYjc2N2JiZmE3ZTEzNDgwZTQ1Yzg0M2VhYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9BdXRoZW50aWNhdG9yQ29vcmRpbmF0
b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL0F1dGhlbnRp
Y2F0b3JDb29yZGluYXRvckNsaWVudC5oCkBAIC0yOSw3ICsyOSw2IEBACiAKICNpbmNsdWRlICJF
eGNlcHRpb25EYXRhLmgiCiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tl
dHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tl
dHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAKaW5kZXggNzcwY2MyZDE4MDRmYWI1OTZlOTAxZmFmM2I1
OGU1ODE4YzYzMzgzMi4uYWZkNzQwYTFlYzEwYTY0NGRlNTc2YmU0ZmE4NDQ0OGY3MjU3ZDMyNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldENo
YW5uZWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2Nr
ZXRDaGFubmVsLmNwcApAQCAtNTUsOSArNTUsNyBAQAogI2luY2x1ZGUgIldlYlNvY2tldEhhbmRz
aGFrZS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FycmF5QnVmZmVyLmg+CiAjaW5jbHVk
ZSA8d3RmL0Zhc3RNYWxsb2MuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxhdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2Vic29ja2V0cy9XZWJTb2NrZXREZWZsYXRlci5jcHAKaW5kZXggM2UyYzljZDdmMzUzYjMx
OWFkZDI4NDJlMWQ5YmY5ZDc3MTMyN2I3NC4uMTRhYjgwOTViMjVjZjEzOTRjMDg0OWEwYjE4Nzgx
NzRjNDU3MzNhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRz
L1dlYlNvY2tldERlZmxhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNv
Y2tldHMvV2ViU29ja2V0RGVmbGF0ZXIuY3BwCkBAIC0zMywxMCArMzMsNyBAQAogCiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogI2lu
Y2x1ZGUgPHpsaWIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvSURMVHlwZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL0lE
TFR5cGVzLmgKaW5kZXggYjEwNWEyNGJjNWEwNWRmYmZlZDY2YTgxNWFjYzMxZTNmOWJmYzEzNi4u
YzU0MTk4MTVhZDExNThkZDYwMTAxOTBmM2U4NTc3NTgxY2U1YzA2YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvSURMVHlwZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9JRExUeXBlcy5oCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSGFuZGxlVHlwZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdHJvbmcuaD4KICNp
bmNsdWRlIDx3dGYvQnJpZ2FuZC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9VUkwuaD4KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2pzYy9CcmlkZ2VKU0MuaCBiL1NvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9qc2MvQnJpZGdlSlNDLmgKaW5kZXggNmRmZDNhYmEwM2ZhZGZlOTI0NzJlMTUyYWMy
YjdhMTQ1ZWNkMmM1OS4uN2M5MTRjZjNiNDk5NzMyMmUxODI2NTU4MDVkNjMzYjhkYTQ5MDlkYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2pzYy9CcmlkZ2VKU0MuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9icmlkZ2UvanNjL0JyaWRnZUpTQy5oCkBAIC0yNCwxMiArMjQsMTAgQEAK
ICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBCcmlkZ2VKU0NfaAotI2RlZmluZSBCcmlk
Z2VKU0NfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJCcmlkZ2UuaCIKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9KU1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTEz
Nyw1ICsxMzUsMyBAQCBjb25zdCBjaGFyKiBzaWduYXR1cmVGb3JQYXJhbWV0ZXJzKGNvbnN0IEFy
Z0xpc3QmKTsKIH0gLy8gbmFtZXNwYWNlIEJpbmRpbmdzCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwot
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RG
QU5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQU5vZGUuaAppbmRl
eCA3ZTYwNzUzNTM0OWU0MWI0MDg4OTVkYzJkNWYzN2ZmOTNlNTMwNjEzLi5lYTZjNDdjMDdiMmQ3
OWUwZGE2NTBiM2VlMjIyYjQzMjdhNTYzMzg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9ERkFOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvREZBTm9kZS5oCkBAIC0yOCw3ICsyOCw2IEBACiAjaWYgRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKIAogI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25zRGVidWdnaW5nLmgiCi0j
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL05GQVRvREZBLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL05GQVRv
REZBLmNwcAppbmRleCBjNWQ1MGJiMDRkOWEzZjc2YWJjODYwMjIxYjYzM2I4NDYzN2U0N2Y3Li5i
MzcwNDE5OGVkYWIzYzNmZWQxZGVhMDI2ZDAyOWUzMmU0N2Y2ZTI2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkFUb0RGQS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZBVG9ERkEuY3BwCkBAIC0zNSw3ICszNSw2IEBACiAj
aW5jbHVkZSAiTkZBLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZE5GQS5oIgogI2luY2x1ZGUgPHd0
Zi9EYXRhTG9nLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9UZXJtLmggYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9UZXJtLmgKaW5kZXggNGUyNWM3MmVkZWFhZjU3NTllZGI2MGYxMmY2ZWYwNmE0YjRlYzEz
Mi4uZDczNmRkNGZhYjk2NWE4OGRmNDZhNzAzYjgxNWJiNDRmZDczNzNkYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvVGVybS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL1Rlcm0uaApAQCAtMzEsMTEgKzMxLDkgQEAKICNpbmNsdWRl
ICJORkEuaCIKICNpbmNsdWRlIDx1bmljb2RlL3V0eXBlcy5oPgogI2luY2x1ZGUgPHd0Zi9BU0NJ
SUNUeXBlLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaGVy
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvdHlwZWRvbS9TdHlsZVBy
b3BlcnR5TWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvdHlwZWRvbS9TdHlsZVByb3BlcnR5TWFw
LmgKaW5kZXggY2Y1OWQwMmFkNDNhMzA1YjVlYjMzMDViMWUyN2JjODgzYmNmNDQ1ZS4uMGRlN2M4
YmFkMDVmZTBmZmQ0NDkzOGQxODc0YzczN2MxZmIxYjczYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL3R5cGVkb20vU3R5bGVQcm9wZXJ0eU1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy90eXBlZG9tL1N0eWxlUHJvcGVydHlNYXAuaApAQCAtMjgsOSArMjgsNiBAQAogI2lmIEVO
QUJMRShDU1NfVFlQRURfT00pCiAKICNpbmNsdWRlICJTdHlsZVByb3BlcnR5TWFwUmVhZE9ubHku
aCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3R5cGVkb20vU3R5bGVQcm9wZXJ0eU1h
cFJlYWRPbmx5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy90eXBlZG9tL1N0eWxlUHJvcGVydHlN
YXBSZWFkT25seS5jcHAKaW5kZXggZDUxN2FkNGQ1MGFhMDYzYWRiOGJiMjg1MWExZDkwYWRlNWI5
YjllZi4uYWRkZjNhODI1MTE1NDgwOTUzMmY0N2ZjNzkzY2MyNmRkNjFlMzZmMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL3R5cGVkb20vU3R5bGVQcm9wZXJ0eU1hcFJlYWRPbmx5LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvdHlwZWRvbS9TdHlsZVByb3BlcnR5TWFwUmVhZE9u
bHkuY3BwCkBAIC00MCwxMSArNDAsOSBAQAogI2luY2x1ZGUgIlR5cGVkT01DU1NTdHlsZVZhbHVl
LmgiCiAjaW5jbHVkZSAiVHlwZWRPTUNTU1VuaXRWYWx1ZS5oIgogI2luY2x1ZGUgIlR5cGVkT01D
U1NVbnBhcnNlZFZhbHVlLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi0KIFJlZlB0cjxUeXBlZE9NQ1NTU3R5bGVWYWx1ZT4gU3R5bGVQcm9wZXJ0
eU1hcFJlYWRPbmx5OjpyZWlmeVZhbHVlKENTU1ZhbHVlKiB2YWx1ZSwgRG9jdW1lbnQmIGRvY3Vt
ZW50LCBFbGVtZW50KikKIHsKICAgICBpZiAoIXZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nzaml0
L1NlbGVjdG9yQ29tcGlsZXIuY3BwCmluZGV4IGQ0ZTE2NDY0NWE3YjljMDg2ZDhjZDg1ZTA4OTA1
YzJiZWQ3OTM2OTIuLjUyNjg4NmRkMjM1YWM0YThjOTJhMGQyODQ4MzZkOWNjNmM4ZjkzYzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAKQEAgLTU2LDcgKzU2
LDYgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9WTS5oPgogI2luY2x1ZGUgPGxpbWl0cz4K
ICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmNwcAppbmRleCBhZjA0ZDUzMDMwZmVjYmNmYjg1ZWE0
NTk1Y2M5MWYyZTRlMGU5YTQ3Li45NjY3OWM3MTYwYjNiY2UxNDkxZWI5MGM3ZWQxNzYxMDU5MGUw
MmZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2Ny
aXB0TWFwcGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVU
b1NjcmlwdE1hcHBpbmcuY3BwCkBAIC0zMiwxMiArMzIsMTMgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJMb2NhbGVUb1NjcmlwdE1hcHBpbmcuaCIKIAotI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUg
PHd0Zi9Tb3J0ZWRBcnJheU1hcC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIEZJWE1FOiBDb25zaWRlciBtb3ZpbmcgYWxvbmdz
aWRlIENvbXBhcmFibGVBU0NJSUxpdGVyYWwgYW5kIGdpdmluZyBhbiBldmVuIGJldHRlciBuYW1l
LgogdGVtcGxhdGU8dHlwZW5hbWUgU3RvcmFnZUludGVnZXI+CiBjbGFzcyBQYWNrZWRBU0NJSUxv
d2VyQ29kZXMgewogcHVibGljOgpAQCAtMTEyLDE5ICsxMTMsMTQgQEAgcHJpdmF0ZToKICAgICBT
dG9yYWdlSW50ZWdlciBtX3ZhbHVlIHsgMCB9OwogfTsKIAotdXNpbmcgU2NyaXB0TmFtZSA9IFBh
Y2tlZEFTQ0lJTG93ZXJDb2Rlczx1aW50MzJfdD47Ci1zdHJ1Y3QgU2NyaXB0TmFtZUNvZGUgewot
ICAgIFNjcmlwdE5hbWUgbmFtZTsKLSAgICBVU2NyaXB0Q29kZSBjb2RlOwotfTsKLQotVVNjcmlw
dENvZGUgc2NyaXB0TmFtZVRvQ29kZShjb25zdCBTdHJpbmcmIHNjcmlwdE5hbWUpCitVU2NyaXB0
Q29kZSBzY3JpcHROYW1lVG9Db2RlKFN0cmluZ1ZpZXcgc2NyaXB0TmFtZSkKIHsKICAgICAvLyBU
aGlzIGdlbmVyYWxseSBtYXBzIGFuIElTTyAxNTkyNCBzY3JpcHQgY29kZSB0byBpdHMgVVNjcmlw
dENvZGUsIGJ1dCBjZXJ0YWluIGZhbWlsaWVzIG9mIHNjcmlwdCBjb2RlcyBhcmUKICAgICAvLyB0
cmVhdGVkIGFzIGEgc2luZ2xlIHNjcmlwdCBmb3IgYXNzaWduaW5nIGEgcGVyLXNjcmlwdCBmb250
IGluIFNldHRpbmdzLiBGb3IgZXhhbXBsZSwgImhpcmEiIGlzIG1hcHBlZCB0bwogICAgIC8vIFVT
Q1JJUFRfS0FUQUtBTkFfT1JfSElSQUdBTkEgaW5zdGVhZCBvZiBVU0NSSVBUX0hJUkFHQU5BLCBz
aW5jZSB3ZSB3YW50IGFsbCBKYXBhbmVzZSBzY3JpcHRzIHRvIGJlIHJlbmRlcmVkCiAgICAgLy8g
dXNpbmcgdGhlIHNhbWUgZm9udCBzZXR0aW5nLgotICAgIHN0YXRpYyBjb25zdGV4cHIgU2NyaXB0
TmFtZUNvZGUgc2NyaXB0TmFtZUNvZGVMaXN0W10gPSB7CisgICAgdXNpbmcgU2NyaXB0TmFtZSA9
IFBhY2tlZEFTQ0lJTG93ZXJDb2Rlczx1aW50MzJfdD47CisgICAgc3RhdGljIGNvbnN0ZXhwciBz
dGQ6OnBhaXI8U2NyaXB0TmFtZSwgVVNjcmlwdENvZGU+IHNjcmlwdE5hbWVDb2RlTGlzdFtdID0g
ewogICAgICAgICB7ICJhcmFiIiwgVVNDUklQVF9BUkFCSUMgfSwKICAgICAgICAgeyAiYXJtbiIs
IFVTQ1JJUFRfQVJNRU5JQU4gfSwKICAgICAgICAgeyAiYmFsaSIsIFVTQ1JJUFRfQkFMSU5FU0Ug
fSwKQEAgLTIzMiwzOCArMjI4LDE2IEBAIFVTY3JpcHRDb2RlIHNjcmlwdE5hbWVUb0NvZGUoY29u
c3QgU3RyaW5nJiBzY3JpcHROYW1lKQogICAgICAgICB7ICJ6eXl5IiwgVVNDUklQVF9DT01NT04g
fSwKICAgICAgICAgeyAienp6eiIsIFVTQ1JJUFRfVU5LTk9XTiB9LAogICAgIH07Ci0KICAgICBz
dGF0aWNfYXNzZXJ0KFNjcmlwdE5hbWUoImFyYWIiKS52YWx1ZSgpID09IDB4NjE3MjYxNjJVKTsK
ICAgICBzdGF0aWNfYXNzZXJ0KFNjcmlwdE5hbWUoInp6enoiKS52YWx1ZSgpID09IDB4N2E3YTdh
N2FVKTsKLQotICAgIEFTU0VSVCgKLSAgICAgICAgc3RkOjppc19zb3J0ZWQoc3RkOjpiZWdpbihz
Y3JpcHROYW1lQ29kZUxpc3QpLCBzdGQ6OmVuZChzY3JpcHROYW1lQ29kZUxpc3QpLAotICAgICAg
ICAgICAgW10oY29uc3QgU2NyaXB0TmFtZUNvZGUmIGEsIGNvbnN0IFNjcmlwdE5hbWVDb2RlJiBi
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZSA8IGIubmFtZTsKLSAgICAgICAgICAg
IH0pKTsKLQotICAgIGF1dG8gbmFtZSA9IFNjcmlwdE5hbWU6OnBhcnNlKHNjcmlwdE5hbWUpOwot
ICAgIGlmICghbmFtZSkKLSAgICAgICAgcmV0dXJuIFVTQ1JJUFRfSU5WQUxJRF9DT0RFOwotCi0g
ICAgYXV0byogZWxlbWVudCA9IHRyeUJpbmFyeVNlYXJjaDxTY3JpcHROYW1lQ29kZT4oc2NyaXB0
TmFtZUNvZGVMaXN0LCBzdGQ6OnNpemUoc2NyaXB0TmFtZUNvZGVMaXN0KSwgbmFtZS52YWx1ZSgp
LAotICAgICAgICBbXShjb25zdCBTY3JpcHROYW1lQ29kZSogc2NyaXB0TmFtZUNvZGUpIHsKLSAg
ICAgICAgICAgIHJldHVybiBzY3JpcHROYW1lQ29kZS0+bmFtZTsKLSAgICAgICAgfSk7Ci0gICAg
aWYgKGVsZW1lbnQpCi0gICAgICAgIHJldHVybiBlbGVtZW50LT5jb2RlOwotICAgIHJldHVybiBV
U0NSSVBUX0lOVkFMSURfQ09ERTsKKyAgICBzdGF0aWMgY29uc3RleHByIFNvcnRlZEFycmF5TWFw
IG1hcCB7IHNjcmlwdE5hbWVDb2RlTGlzdCB9OworICAgIHJldHVybiBtYXAuZ2V0KHNjcmlwdE5h
bWUsIFVTQ1JJUFRfSU5WQUxJRF9DT0RFKTsKIH0KIAotdXNpbmcgTG9jYWxlTmFtZSA9IFBhY2tl
ZEFTQ0lJTG93ZXJDb2Rlczx1aW50NjRfdD47Ci1zdHJ1Y3QgTG9jYWxlU2NyaXB0IHsKLSAgICBM
b2NhbGVOYW1lIGxvY2FsZTsKLSAgICBVU2NyaXB0Q29kZSBzY3JpcHQ7Ci19OwotCiBVU2NyaXB0
Q29kZSBsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9uKGNvbnN0IFN0cmluZyYgbG9j
YWxlKQogewotICAgIHN0YXRpYyBjb25zdGV4cHIgTG9jYWxlU2NyaXB0IGxvY2FsZVNjcmlwdExp
c3RbXSA9IHsKKyAgICB1c2luZyBMb2NhbGVOYW1lID0gUGFja2VkQVNDSUlMb3dlckNvZGVzPHVp
bnQ2NF90PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6cGFpcjxMb2NhbGVOYW1lLCBVU2Ny
aXB0Q29kZT4gbG9jYWxlU2NyaXB0TGlzdFtdID0gewogICAgICAgICB7ICJhYSIsIFVTQ1JJUFRf
TEFUSU4gfSwKICAgICAgICAgeyAiYWIiLCBVU0NSSVBUX0NZUklMTElDIH0sCiAgICAgICAgIHsg
ImFkeSIsIFVTQ1JJUFRfQ1lSSUxMSUMgfSwKQEAgLTQ2MywzNSArNDM3LDE0IEBAIFVTY3JpcHRD
b2RlIGxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24oY29uc3QgU3RyaW5nJiBsb2Nh
bGUpCiAgICAgICAgIHsgInpoX3R3IiwgVVNDUklQVF9UUkFESVRJT05BTF9IQU4gfSwKICAgICAg
ICAgeyAienUiLCBVU0NSSVBUX0xBVElOIH0sCiAgICAgfTsKLQogICAgIHN0YXRpY19hc3NlcnQo
TG9jYWxlTmFtZSgiYWEiKS52YWx1ZSgpID09IDB4NjE2MTAwMDAwMDAwMDAwMFVMTCk7CiAgICAg
c3RhdGljX2Fzc2VydChMb2NhbGVOYW1lKCJ6aF90dyIpLnZhbHVlKCkgPT0gMHg3YTY4NWY3NDc3
MDAwMDAwVUxMKTsKLQotICAgIEFTU0VSVCgKLSAgICAgICAgc3RkOjppc19zb3J0ZWQoc3RkOjpi
ZWdpbihsb2NhbGVTY3JpcHRMaXN0KSwgc3RkOjplbmQobG9jYWxlU2NyaXB0TGlzdCksCi0gICAg
ICAgICAgICBbXShjb25zdCBMb2NhbGVTY3JpcHQmIGEsIGNvbnN0IExvY2FsZVNjcmlwdCYgYikg
ewotICAgICAgICAgICAgICAgIHJldHVybiBhLmxvY2FsZSA8IGIubG9jYWxlOwotICAgICAgICAg
ICAgfSkpOwotCi0gICAgYXV0byB0cnlGaW5kU2NyaXB0Q29kZSA9IFsmXSAoY29uc3QgU3RyaW5n
JiBzdHJpbmcpIC0+IE9wdGlvbmFsPFVTY3JpcHRDb2RlPiB7Ci0gICAgICAgIGF1dG8gbG9jYWxl
TmFtZSA9IExvY2FsZU5hbWU6OnBhcnNlKHN0cmluZyk7Ci0gICAgICAgIGlmICghbG9jYWxlTmFt
ZSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICAgICAgYXV0byogZWxl
bWVudCA9IHRyeUJpbmFyeVNlYXJjaDxMb2NhbGVTY3JpcHQ+KGxvY2FsZVNjcmlwdExpc3QsIHN0
ZDo6c2l6ZShsb2NhbGVTY3JpcHRMaXN0KSwgbG9jYWxlTmFtZS52YWx1ZSgpLAotICAgICAgICAg
ICAgW10oY29uc3QgTG9jYWxlU2NyaXB0KiBsb2NhbGVTY3JpcHQpIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gbG9jYWxlU2NyaXB0LT5sb2NhbGU7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAg
aWYgKGVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gZWxlbWVudC0+c2NyaXB0OwotICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIH07Ci0KLSAgICBTdHJpbmcgY2Fub25pY2FsTG9j
YWxlID0gbG9jYWxlOwotICAgIGNhbm9uaWNhbExvY2FsZS5yZXBsYWNlKCctJywgJ18nKTsKLSAg
ICB3aGlsZSAoIWNhbm9uaWNhbExvY2FsZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKGF1dG8g
c2NyaXB0Q29kZSA9IHRyeUZpbmRTY3JpcHRDb2RlKGNhbm9uaWNhbExvY2FsZSkpCi0gICAgICAg
ICAgICByZXR1cm4gc2NyaXB0Q29kZS52YWx1ZSgpOworICAgIHN0YXRpYyBjb25zdGV4cHIgU29y
dGVkQXJyYXlNYXAgbWFwIHsgbG9jYWxlU2NyaXB0TGlzdCB9OworICAgIFN0cmluZyBjYW5vbmlj
YWxMb2NhbGVTdHJpbmcgPSBsb2NhbGU7CisgICAgY2Fub25pY2FsTG9jYWxlU3RyaW5nLnJlcGxh
Y2UoJy0nLCAnXycpOworICAgIGZvciAoU3RyaW5nVmlldyBjYW5vbmljYWxMb2NhbGUgPSBjYW5v
bmljYWxMb2NhbGVTdHJpbmc7ICFjYW5vbmljYWxMb2NhbGUuaXNFbXB0eSgpOyApIHsKKyAgICAg
ICAgaWYgKGF1dG8gc2NyaXB0Q29kZSA9IG1hcC50cnlHZXQoY2Fub25pY2FsTG9jYWxlKSkKKyAg
ICAgICAgICAgIHJldHVybiAqc2NyaXB0Q29kZTsKICAgICAgICAgYXV0byB1bmRlcnNjb3JlUG9z
aXRpb24gPSBjYW5vbmljYWxMb2NhbGUucmV2ZXJzZUZpbmQoJ18nKTsKICAgICAgICAgaWYgKHVu
ZGVyc2NvcmVQb3NpdGlvbiA9PSBub3RGb3VuZCkKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmcu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmgK
aW5kZXggNzMwMDZkMjM1NzZhNWM2ODhjYmI3OWI5MzkyNWQ2YWI3ODNjYjcwZS4uMTRhZjZhNTdm
YzMyZGNmZjI5ZjA5YjBlZjYxZjJmNDg1YzM2OGY0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmcuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZy5oCkBAIC0yOCw4ICsyOCw3
IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgTG9jYWxlVG9TY3JpcHRNYXBwaW5n
X2gKLSNkZWZpbmUgTG9jYWxlVG9TY3JpcHRNYXBwaW5nX2gKKyNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSA8dW5pY29kZS91c2NyaXB0Lmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTM3
LDggKzM2LDYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogVVNjcmlwdENvZGUgbG9jYWxlVG9T
Y3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihjb25zdCBTdHJpbmcmKTsKLVdFQkNPUkVfRVhQT1JU
IFVTY3JpcHRDb2RlIHNjcmlwdE5hbWVUb0NvZGUoY29uc3QgU3RyaW5nJik7CitXRUJDT1JFX0VY
UE9SVCBVU2NyaXB0Q29kZSBzY3JpcHROYW1lVG9Db2RlKFN0cmluZ1ZpZXcpOwogCiB9Ci0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Qcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudE1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmgKaW5kZXggYmExN2M4MjdlOTNjMTEyZmIzMWYw
YjU5YmQ5NDQyOTM4NjY1N2JhNC4uZGE0MTU3YmY4NmFhNGQ2ZTAyYWY5NmZlOTMxNDFlNjhmOTFh
ZWM5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Qcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudE1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5oCkBAIC0zNCw3ICszNCw2IEBACiAjaW5j
bHVkZSA8V2ViQ29yZS9UaW1lci5oPgogI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4KICNpbmNs
dWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgog
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuaCBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2Vz
RW50cnkuaAppbmRleCBkNDQ5NTA0NDYzZmZlMGQ5OWRiZWNhYTQ0NzdiMDUzYWM2YzU3NTY0Li4z
NzdkMzM3OTlmN2JiNWRjZTZjZTViOTA2YTM3ZTUyNDhlNTA5MWE0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0Vu
dHJ5LmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVTdWJyZXNvdXJjZXNFbnRyeS5oCkBAIC0yOSw3ICsyOSw2IEBACiAKICNpbmNsdWRlICJOZXR3
b3JrQ2FjaGVTdG9yYWdlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4K
LSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9VUkwuaD4KIAogbmFtZXNw
YWNlIFdlYktpdCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvV2ViUGFnZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9XZWJQYWdlTWFjLm1tCmluZGV4IDFlOGY1NWZkMGM4NDAwYzJlYWU0MDhjNWFiNjkyNWUxZjI3
OTA0ZjcuLmE3ZGZkYzNjNzJlZmQwZWIzOThjYzY3ODJiZjAwZTM4ZTcwYjQ0OWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBA
IC05NSw2ICs5NSw3IEBACiAjaW1wb3J0IDxwYWwvc3BpL2NvY29hL05TQWNjZXNzaWJpbGl0eVNQ
SS5oPgogI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNBcHBsaWNhdGlvblNQSS5oPgogI2ltcG9ydCA8
d3RmL1NldEZvclNjb3BlLmg+CisjaW1wb3J0IDx3dGYvU29ydGVkQXJyYXlNYXAuaD4KIAogI2lm
IEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCiAjaW1wb3J0IDxXZWJDb3JlL01lZGlh
UGxheWJhY2tUYXJnZXRDb2NvYS5oPgpAQCAtMjA3LDMyICsyMDgsMjIgQEAgYm9vbCBXZWJQYWdl
OjpzaG91bGRVc2VQREZQbHVnaW4oY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSwgU3RyaW5nVmll
dyBwYXRoKSBjb24KICAgICAgICAgICAgICAgICAmJiAocGF0aC5lbmRzV2l0aElnbm9yaW5nQVND
SUlDYXNlKCIucGRmIikgfHwgcGF0aC5lbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCIucHMiKSkp
KTsKIH0KIAotdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBTZWxlY3Rvck5hbWVNYXA7
Ci0KLS8vIE1hcCBzZWxlY3RvcnMgaW50byBFZGl0b3IgY29tbWFuZCBuYW1lcy4KLS8vIFRoaXMg
aXMgbm90IG5lZWRlZCBmb3IgYW55IHNlbGVjdG9ycyB0aGF0IGhhdmUgdGhlIHNhbWUgbmFtZSBh
cyB0aGUgRWRpdG9yIGNvbW1hbmQuCi1zdGF0aWMgY29uc3QgU2VsZWN0b3JOYW1lTWFwKiBjcmVh
dGVTZWxlY3RvckV4Y2VwdGlvbk1hcCgpCi17Ci0gICAgU2VsZWN0b3JOYW1lTWFwKiBtYXAgPSBu
ZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz47Ci0KLSAgICBtYXAtPmFkZCgiaW5zZXJ0TmV3bGlu
ZUlnbm9yaW5nRmllbGRFZGl0b3I6IiwgIkluc2VydE5ld2xpbmUiKTsKLSAgICBtYXAtPmFkZCgi
aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yOiIsICJJbnNlcnROZXdsaW5lIik7Ci0gICAgbWFwLT5h
ZGQoImluc2VydFRhYklnbm9yaW5nRmllbGRFZGl0b3I6IiwgIkluc2VydFRhYiIpOwotICAgIG1h
cC0+YWRkKCJwYWdlRG93bjoiLCAiTW92ZVBhZ2VEb3duIik7Ci0gICAgbWFwLT5hZGQoInBhZ2VE
b3duQW5kTW9kaWZ5U2VsZWN0aW9uOiIsICJNb3ZlUGFnZURvd25BbmRNb2RpZnlTZWxlY3Rpb24i
KTsKLSAgICBtYXAtPmFkZCgicGFnZVVwOiIsICJNb3ZlUGFnZVVwIik7Ci0gICAgbWFwLT5hZGQo
InBhZ2VVcEFuZE1vZGlmeVNlbGVjdGlvbjoiLCAiTW92ZVBhZ2VVcEFuZE1vZGlmeVNlbGVjdGlv
biIpOwotCi0gICAgcmV0dXJuIG1hcDsKLX0KLQogc3RhdGljIFN0cmluZyBjb21tYW5kTmFtZUZv
clNlbGVjdG9yTmFtZShjb25zdCBTdHJpbmcmIHNlbGVjdG9yTmFtZSkKIHsKLSAgICAvLyBDaGVj
ayB0aGUgZXhjZXB0aW9uIG1hcCBmaXJzdC4KLSAgICBzdGF0aWMgY29uc3QgU2VsZWN0b3JOYW1l
TWFwKiBleGNlcHRpb25NYXAgPSBjcmVhdGVTZWxlY3RvckV4Y2VwdGlvbk1hcCgpOwotICAgIFNl
bGVjdG9yTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBleGNlcHRpb25NYXAtPmZpbmQoc2Vs
ZWN0b3JOYW1lKTsKLSAgICBpZiAoaXQgIT0gZXhjZXB0aW9uTWFwLT5lbmQoKSkKLSAgICAgICAg
cmV0dXJuIGl0LT52YWx1ZTsKKyAgICAvLyBNYXAgc2VsZWN0b3JzIGludG8gRWRpdG9yIGNvbW1h
bmQgbmFtZXMuCisgICAgLy8gVGhpcyBpcyBub3QgbmVlZGVkIGZvciBhbnkgc2VsZWN0b3JzIHRo
YXQgaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIHRoZSBFZGl0b3IgY29tbWFuZC4KKyAgICBzdGF0aWMg
Y29uc3RleHByIHN0ZDo6cGFpcjxDb21wYXJhYmxlQVNDSUlMaXRlcmFsLCBBU0NJSUxpdGVyYWw+
IHNlbGVjdG9yRXhjZXB0aW9uc1tdID0geworICAgICAgICB7ICJpbnNlcnROZXdsaW5lSWdub3Jp
bmdGaWVsZEVkaXRvcjoiLCAiSW5zZXJ0TmV3bGluZSJfcyB9LAorICAgICAgICB7ICJpbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3I6IiwgIkluc2VydE5ld2xpbmUiX3MgfSwKKyAgICAgICAgeyAiaW5z
ZXJ0VGFiSWdub3JpbmdGaWVsZEVkaXRvcjoiLCAiSW5zZXJ0VGFiIl9zIH0sCisgICAgICAgIHsg
InBhZ2VEb3duOiIsICJNb3ZlUGFnZURvd24iX3MgfSwKKyAgICAgICAgeyAicGFnZURvd25BbmRN
b2RpZnlTZWxlY3Rpb246IiwgIk1vdmVQYWdlRG93bkFuZE1vZGlmeVNlbGVjdGlvbiJfcyB9LAor
ICAgICAgICB7ICJwYWdlVXA6IiwgIk1vdmVQYWdlVXAiX3MgfSwKKyAgICAgICAgeyAicGFnZVVw
QW5kTW9kaWZ5U2VsZWN0aW9uOiIsICJNb3ZlUGFnZVVwQW5kTW9kaWZ5U2VsZWN0aW9uIl9zIH0s
CisgICAgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIFNvcnRlZEFycmF5TWFwIG1hcCB7IHNlbGVj
dG9yRXhjZXB0aW9ucyB9OworICAgIGlmIChhdXRvIGNvbW1hbmROYW1lID0gbWFwLnRyeUdldChz
ZWxlY3Rvck5hbWUpKQorICAgICAgICByZXR1cm4gKmNvbW1hbmROYW1lOwogCiAgICAgLy8gUmVt
b3ZlIHRoZSB0cmFpbGluZyBjb2xvbi4KICAgICAvLyBObyBuZWVkIHRvIGNhcGl0YWxpemUgdGhl
IGNvbW1hbmQgbmFtZSBzaW5jZSBFZGl0b3IgY29tbWFuZCBuYW1lcyBhcmUgbm90IGNhc2Ugc2Vu
c2l0aXZlLgo=
</data>
<flag name="review"
          id="446718"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
      

    </bug>

</bugzilla>