<?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>155219</bug_id>
          
          <creation_ts>2016-03-08 21:57:29 -0800</creation_ts>
          <short_desc>Add a baseURL parameter to _WKUserStyleSheet</short_desc>
          <delta_ts>2016-03-15 03:40:01 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>155317</dependson>
          <blocked>155488</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jberlin</cc>
    
    <cc>ryanhaddad</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1172403</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-03-08 21:57:29 -0800</bug_when>
    <thetext>Add a baseURL parameter to _WKUserStyleSheet</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172755</commentid>
    <comment_count>1</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2016-03-09 14:11:51 -0800</bug_when>
    <thetext>rdar://problem/24932574</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172850</commentid>
    <comment_count>2</comment_count>
      <attachid>273499</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-03-09 15:59:51 -0800</bug_when>
    <thetext>Created attachment 273499
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172852</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-09 16:02:12 -0800</bug_when>
    <thetext>Attachment 273499 did not pass style-queue:


ERROR: Source/WebCore/page/UserContentController.cpp:75:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/page/UserContentController.cpp:102:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp:400:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp:408:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/page/UserContentController.h:63:  &quot;virtual&quot; is redundant since function is already declared as &quot;override&quot;  [readability/inheritance] [4]
ERROR: Source/WebCore/page/UserContentController.h:64:  &quot;virtual&quot; is redundant since function is already declared as &quot;override&quot;  [readability/inheritance] [4]
ERROR: Source/WebCore/loader/EmptyClients.cpp:106:  &quot;virtual&quot; is redundant since function is already declared as &quot;override&quot;  [readability/inheritance] [4]
ERROR: Source/WebCore/page/UserContentProvider.h:81:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebKit2/WebProcess/UserContent/WebUserContentController.h:41:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit2/WebProcess/UserContent/WebUserContentController.cpp:305:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/WebProcess/UserContent/WebUserContentController.cpp:353:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/WebProcess/WebPage/WebPage.cpp:5208:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebKit2/WebProcess/WebPage/WebPage.cpp:5215:  Missing space before {  [whitespace/braces] [5]
Total errors found: 13 in 42 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172930</commentid>
    <comment_count>4</comment_count>
      <attachid>273522</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-03-09 17:55:59 -0800</bug_when>
    <thetext>Created attachment 273522
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172932</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-09 17:58:51 -0800</bug_when>
    <thetext>Attachment 273522 did not pass style-queue:


ERROR: Source/WebCore/page/UserContentController.cpp:75:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/page/UserContentController.cpp:102:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp:400:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp:408:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/page/UserContentController.h:63:  &quot;virtual&quot; is redundant since function is already declared as &quot;override&quot;  [readability/inheritance] [4]
ERROR: Source/WebCore/page/UserContentController.h:64:  &quot;virtual&quot; is redundant since function is already declared as &quot;override&quot;  [readability/inheritance] [4]
ERROR: Source/WebCore/loader/EmptyClients.cpp:106:  &quot;virtual&quot; is redundant since function is already declared as &quot;override&quot;  [readability/inheritance] [4]
ERROR: Source/WebCore/page/UserContentProvider.h:81:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebKit2/WebProcess/UserContent/WebUserContentController.h:41:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit2/WebProcess/UserContent/WebUserContentController.cpp:305:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/WebProcess/UserContent/WebUserContentController.cpp:353:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/WebProcess/WebPage/WebPage.cpp:5212:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebKit2/WebProcess/WebPage/WebPage.cpp:5219:  Missing space before {  [whitespace/braces] [5]
Total errors found: 13 in 42 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172960</commentid>
    <comment_count>6</comment_count>
      <attachid>273522</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2016-03-09 19:24:57 -0800</bug_when>
    <thetext>Comment on attachment 273522
Patch

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

Seems pretty reasonable. Needs an API test. And a bunch of build fixes.

&gt; Source/WebCore/page/UserMessageHandlersNamespace.cpp:-60
&gt; -    const auto* userMessageHandlerDescriptors = userContentController-&gt;userMessageHandlerDescriptors();

We use this map again further down, this is why the build is broken. At least, one of the reasons.

&gt; Source/WebKit2/WebProcess/UserContent/WebUserContentController.h:41
&gt; +    class CompiledContentExtension;

unindent</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1173115</commentid>
    <comment_count>7</comment_count>
      <attachid>273575</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-03-10 09:30:41 -0800</bug_when>
    <thetext>Created attachment 273575
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1173116</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-10 09:33:17 -0800</bug_when>
    <thetext>Attachment 273575 did not pass style-queue:


ERROR: Source/WebCore/page/UserContentController.cpp:75:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/page/UserContentController.cpp:102:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp:410:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp:418:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebKit2/WebProcess/UserContent/WebUserContentController.cpp:305:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/WebProcess/UserContent/WebUserContentController.cpp:353:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/WebProcess/WebPage/WebPage.cpp:5220:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebKit2/WebProcess/WebPage/WebPage.cpp:5227:  Missing space before {  [whitespace/braces] [5]
Total errors found: 8 in 42 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1173143</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-03-10 10:24:37 -0800</bug_when>
    <thetext>Committed r197943: &lt;http://trac.webkit.org/changeset/197943&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1173211</commentid>
    <comment_count>10</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2016-03-10 11:44:49 -0800</bug_when>
    <thetext>This change appears to have broken the Windows build
&lt;https://build.webkit.org/builders/Apple%20Win%20Release%20%28Build%29/builds/76263&gt;

C:\cygwin\home\buildbot\slave\win-release\build\Source\WebKit\win\WebView.cpp(2942): error C2039: &apos;userContentController&apos;: is not a member of &apos;WebCore::PageConfiguration&apos; [C:\cygwin\home\buildbot\slave\win-release\build\WebKitBuild\Release\Source\WebKit\WebKit.vcxproj]
  C:\cygwin\home\buildbot\slave\win-release\build\WebKitBuild\Release\DerivedSources\ForwardingHeaders\WebCore/PageConfiguration.h(59): note: see declaration of &apos;WebCore::PageConfiguration&apos;
C:\cygwin\home\buildbot\slave\win-release\build\Source\WebKit\win\WebView.cpp(3862): error C2039: &apos;setUserContentController&apos;: is not a member of &apos;WebCore::Page&apos; [C:\cygwin\home\buildbot\slave\win-release\build\WebKitBuild\Release\Source\WebKit\WebKit.vcxproj]
  c:\cygwin\home\buildbot\slave\win-release\build\webkitbuild\release\derivedsources\forwardingheaders\webcore\UserContentProvider.h(48): note: see declaration of &apos;WebCore::Page&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1173249</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-10 12:27:59 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 155317</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174619</commentid>
    <comment_count>12</comment_count>
      <attachid>274002</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-03-14 12:47:01 -0700</bug_when>
    <thetext>Created attachment 274002
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174622</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-14 12:49:59 -0700</bug_when>
    <thetext>Attachment 274002 did not pass style-queue:


ERROR: Source/WebCore/page/UserContentController.cpp:75:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/page/UserContentController.cpp:102:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp:410:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp:418:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebKit2/WebProcess/UserContent/WebUserContentController.cpp:305:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/WebProcess/UserContent/WebUserContentController.cpp:353:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/WebProcess/WebPage/WebPage.cpp:5227:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebKit2/WebProcess/WebPage/WebPage.cpp:5234:  Missing space before {  [whitespace/braces] [5]
Total errors found: 8 in 43 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174635</commentid>
    <comment_count>14</comment_count>
      <attachid>274006</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-03-14 12:59:46 -0700</bug_when>
    <thetext>Created attachment 274006
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174637</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-14 13:01:56 -0700</bug_when>
    <thetext>Attachment 274006 did not pass style-queue:


ERROR: Source/WebCore/page/UserContentController.cpp:75:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/page/UserContentController.cpp:102:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp:410:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp:418:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebKit2/WebProcess/UserContent/WebUserContentController.cpp:305:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/WebProcess/UserContent/WebUserContentController.cpp:353:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/WebProcess/WebPage/WebPage.cpp:5227:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebKit2/WebProcess/WebPage/WebPage.cpp:5234:  Missing space before {  [whitespace/braces] [5]
Total errors found: 8 in 43 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174657</commentid>
    <comment_count>16</comment_count>
      <attachid>274012</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-03-14 13:33:44 -0700</bug_when>
    <thetext>Created attachment 274012
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174662</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-14 13:36:21 -0700</bug_when>
    <thetext>Attachment 274012 did not pass style-queue:


ERROR: Source/WebCore/page/UserContentController.cpp:75:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/page/UserContentController.cpp:102:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp:410:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp:418:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebKit2/WebProcess/UserContent/WebUserContentController.cpp:305:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/WebProcess/UserContent/WebUserContentController.cpp:353:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/WebProcess/WebPage/WebPage.cpp:5227:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebKit2/WebProcess/WebPage/WebPage.cpp:5234:  Missing space before {  [whitespace/braces] [5]
Total errors found: 8 in 44 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174776</commentid>
    <comment_count>18</comment_count>
      <attachid>274046</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-03-14 16:10:50 -0700</bug_when>
    <thetext>Created attachment 274046
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174779</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-14 16:13:54 -0700</bug_when>
    <thetext>Attachment 274046 did not pass style-queue:


ERROR: Source/WebCore/page/UserContentController.cpp:75:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/page/UserContentController.cpp:102:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp:410:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp:418:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebKit2/WebProcess/UserContent/WebUserContentController.cpp:305:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/WebProcess/UserContent/WebUserContentController.cpp:353:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/WebProcess/WebPage/WebPage.cpp:5227:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebKit2/WebProcess/WebPage/WebPage.cpp:5234:  Missing space before {  [whitespace/braces] [5]
Total errors found: 8 in 44 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174811</commentid>
    <comment_count>20</comment_count>
      <attachid>274054</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-03-14 16:56:25 -0700</bug_when>
    <thetext>Created attachment 274054
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174812</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-14 16:58:13 -0700</bug_when>
    <thetext>Attachment 274054 did not pass style-queue:


ERROR: Source/WebCore/page/UserContentController.cpp:75:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/page/UserContentController.cpp:102:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp:410:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp:418:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebKit2/WebProcess/UserContent/WebUserContentController.cpp:305:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/WebProcess/UserContent/WebUserContentController.cpp:353:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/WebProcess/WebPage/WebPage.cpp:5227:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebKit2/WebProcess/WebPage/WebPage.cpp:5234:  Missing space before {  [whitespace/braces] [5]
Total errors found: 8 in 45 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174845</commentid>
    <comment_count>22</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-03-14 17:48:24 -0700</bug_when>
    <thetext>Committed r198180: &lt;http://trac.webkit.org/changeset/198180&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174951</commentid>
    <comment_count>23</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2016-03-15 03:40:01 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; Committed r198180: &lt;http://trac.webkit.org/changeset/198180&gt;

r198180 broke EFL build. I fix it in Bug 155488.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273499</attachid>
            <date>2016-03-09 15:59:51 -0800</date>
            <delta_ts>2016-03-09 17:55:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155219-20160309155938.patch</filename>
            <type>text/plain</type>
            <size>114824</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5Nzg5NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBAQAorMjAxNi0wMy0wOCAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBhIGJhc2VVUkwgcGFyYW1ldGVy
IHRvIF9XS1VzZXJTdHlsZVNoZWV0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTUyMTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAtIE1vdmVzIHRvIGEgbW9kZWwgZm9yIHVzZXIgY29udGVudCB3aGVyZSBp
bnN0ZWFkIG9mIGVhY2ggcGFnZSBoYXZpbmcgYSBXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xs
ZXIKKyAgICAgICAgICBvYmplY3QsIHdlIGhhdmUgYW4gYWJzdHJhY3QgV2ViQ29yZTo6VXNlckNv
bnRlbnRQcm92aWRlciBpbnRlcmZhY2UgdGhhdCBjYW4gYmUgaW1wbGVtZW50ZWQgYXQgdGhlIFdl
YktpdAorICAgICAgICAgIGxldmVsLiBGb3Igbm93LCBsZWdhY3kgV2ViS2l0IGNvbnRpbnVlcyB0
byB1c2UgdGhlIG9sZCBVc2VyQ29udGVudENvbnRyb2xsZXIsIHdoaWNoIGltcGxlbWVudHMgCisg
ICAgICAgICAgV2ViQ29yZTo6VXNlckNvbnRlbnRQcm92aWRlciwgYW5kIFdlYktpdDIgaW1wbGVt
ZW50cyBpdHMgb3duIGltcGxlbWVudGF0aW9uIHNvIGl0IGNhbiBzdG9yZSBhZGRpdGlvbmFsCisg
ICAgICAgICAgc3RhdGUuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgIEFkZCBuZXcgZmlsZXMuCisKKyAgICAgICAgKiBkb20vRXh0ZW5zaW9u
U3R5bGVTaGVldHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uU3R5bGVTaGVldHM6
OnVwZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlKToKKyAgICAgICAgU3dpdGNoIHRvIHVzaW5n
IGZvckVhY2hVc2VyU3R5bGVTaGVldCBvbiB0aGUgVXNlckNvbnRlbnRQcm92aWRlci4KKworICAg
ICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50Ojpsb2FkUmVzb3VyY2UpOgorICAgICAgICBSZW1vdmUgbnVsbCBjaGVjayBu
b3cgdGhhdCB3ZSBhbHdheXMgaGF2ZSBhIFVzZXJDb250ZW50UHJvdmlkZXIuCisKKyAgICAgICAg
KiBsb2FkZXIvRW1wdHlDbGllbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxXaXRoRW1w
dHlDbGllbnRzKToKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgIEFk
ZCBuZXcgRW1wdHlDbGllbnRzLgorCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5
KToKKyAgICAgICAgUmVtb3ZlIG51bGwgY2hlY2sgbm93IHRoYXQgd2UgYWx3YXlzIGhhdmUgYSBV
c2VyQ29udGVudFByb3ZpZGVyLgorCisgICAgICAgICogbG9hZGVyL1BpbmdMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQpOgor
ICAgICAgICBSZW1vdmUgbnVsbCBjaGVjayBub3cgdGhhdCB3ZSBhbHdheXMgaGF2ZSBhIFVzZXJD
b250ZW50UHJvdmlkZXIuCisKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdEludGVybmFs
KToKKyAgICAgICAgUmVtb3ZlIG51bGwgY2hlY2sgbm93IHRoYXQgd2UgYWx3YXlzIGhhdmUgYSBV
c2VyQ29udGVudFByb3ZpZGVyLgorCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpy
ZXF1ZXN0UmVzb3VyY2UpOgorICAgICAgICBSZW1vdmUgbnVsbCBjaGVjayBub3cgdGhhdCB3ZSBh
bHdheXMgaGF2ZSBhIFVzZXJDb250ZW50UHJvdmlkZXIuCisKKyAgICAgICAgKiBwYWdlL0RPTVdp
bmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OnNob3VsZEhhdmVXZWJLaXRO
YW1lc3BhY2VGb3JXb3JsZCk6CisgICAgICAgIFJlbW92ZSBudWxsIGNoZWNrcyBub3cgdGhhdCB3
ZSBhbHdheXMgaGF2ZSBhIFVzZXJDb250ZW50UHJvdmlkZXIsIGFuZCB1c2VyTWVzc2FnZUhhbmRs
ZXJEZXNjcmlwdG9ycworICAgICAgICByZXR1cm5zIGEgcmVmZXJlbmNlLgorCisgICAgICAgIChX
ZWJDb3JlOjpET01XaW5kb3c6Om9wZW4pOgorICAgICAgICBSZW1vdmUgbnVsbCBjaGVjayBub3cg
dGhhdCB3ZSBhbHdheXMgaGF2ZSBhIFVzZXJDb250ZW50UHJvdmlkZXIuCisKKyAgICAgICAgKiBw
YWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjppbmplY3RVc2VyU2NyaXB0
cyk6CisgICAgICAgIFNpbXBsaWZ5IGJ5IGxpZnRpbmcgZG9jdW1lbnQgY2hlY2sgb3V0IG9mIHRo
ZSBtYWluIGxvb3AgYW5kIHVzaW5nIGZvckVhY2hVc2VyU2NyaXB0LgorCisgICAgICAgICogcGFn
ZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OlBhZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZTo6flBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6dXNlckNvbnRlbnRQ
cm92aWRlcik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRVc2VyQ29udGVudFByb3ZpZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldFVzZXJDb250ZW50Q29udHJvbGxlcik6IERl
bGV0ZWQuCisgICAgICAgICogcGFnZS9QYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp1
c2VyQ29udGVudENvbnRyb2xsZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvUGFnZUNvbmZp
Z3VyYXRpb24uaDoKKyAgICAgICAgU3RvcmUgdGhlIFVzZXJDb250ZW50UHJvdmlkZXIgaW4gYSBS
ZWYsIGFuZCByZXF1aXJlIFBhZ2VDb25maWd1cmF0aW9ucyB0byBwcm92aWRlIG9uZS4gVGhpcwor
ICAgICAgICByZW1vdmVzIGEgYnVuY2ggb2YgbnVsbCBjaGVja3MgYW5kIHNpbXBsaWZpZXMgdGhl
IGNvZGUuCisKKyAgICAgICAgKiBwYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6On5Vc2VyQ29udGVudENvbnRyb2xs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRlbnRDb250cm9sbGVyOjpmb3JFYWNoVXNl
clNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OmZvckVh
Y2hVc2VyU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xs
ZXI6OmFkZFVzZXJTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRlbnRDb250cm9s
bGVyOjpyZW1vdmVVc2VyU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlwdHMpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRl
bnRDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpVc2Vy
Q29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNv
cmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclN0eWxlU2hlZXRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlck1lc3NhZ2VIYW5kbGVy
RGVzY3JpcHRvcik6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OnJl
bW92ZVVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IpOgorICAgICAgICAoV2ViQ29yZTo6VXNl
ckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyQ29udGVudEV4dGVuc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxsVXNl
ckNvbnRlbnRFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJv
bGxlcjo6cmVtb3ZlQWxsVXNlckNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRl
bnRDb250cm9sbGVyOjphZGRQYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlVzZXJD
b250ZW50Q29udHJvbGxlcjo6cmVtb3ZlUGFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
Ojpjb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
VXNlckNvbnRlbnRDb250cm9sbGVyOjpwcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9yTG9h
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OmFj
dGlvbnNGb3JSZXNvdXJjZUxvYWQpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvVXNlckNvbnRl
bnRDb250cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6
OnVzZXJTY3JpcHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6dXNlclN0eWxlU2hlZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlVz
ZXJDb250ZW50Q29udHJvbGxlcjo6dXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMpOiBEZWxl
dGVkLgorICAgICAgICBBZGQgaW5oZXJpdGFuY2UgZnJvbSBVc2VyQ29udGVudFByb3ZpZGVyIGFu
ZCBzaW1wbGlmeSB0aGluZ3MgYnkgcmVtb3ZpbmcgdW5pcXVlX3B0cnMKKyAgICAgICAgdGhhdCB3
ZXJlIGhvbGRpbmcgdGhlIG1lbWJlciB2YXJpYWJsZXMuIFRoZXJlIGlzIHVzdWFsbHkgb25seSBv
bmUgVXNlckNvbnRlbnRDb250cm9sbGVyCisgICAgICAgIHNvIGhhdmluZyB0aGVzZSBpbiB1bmlx
dWVfcHRycyBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZS4KKyAgICAgICAgCisgICAgICAgICogcGFn
ZS9Vc2VyQ29udGVudFByb3ZpZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpVc2Vy
Q29udGVudFByb3ZpZGVyOjpVc2VyQ29udGVudFByb3ZpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlVzZXJDb250ZW50UHJvdmlkZXI6On5Vc2VyQ29udGVudFByb3ZpZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlVzZXJDb250ZW50UHJvdmlkZXI6OmFkZFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
VXNlckNvbnRlbnRQcm92aWRlcjo6cmVtb3ZlUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpVc2Vy
Q29udGVudFByb3ZpZGVyOjppbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZy
YW1lc0luQWxsUGFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGVudEV4dGVuc2lvbnNFbmFi
bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50UHJvdmlkZXI6OnByb2Nlc3NDb250
ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50
UHJvdmlkZXI6OmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQpOgorICAgICAgICAqIHBhZ2UvVXNlckNv
bnRlbnRQcm92aWRlci5oOiBBZGRlZC4KKyAgICAgICAgQWRkIGFic3RyYWN0IGNsYXNzIGZvciBw
cm92aWRpbmcgdXNlciBjb250ZW50IGFuZCBhZGQgc29tZSBoZWxwZXJzIG9uIGl0LgorCisgICAg
ICAgICogcGFnZS9Vc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yLmg6CisgICAgICAgIChXZWJD
b3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcjo6Y2xpZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3I6OmludmFsaWRhdGVDbGllbnQpOgor
ICAgICAgICAqIHBhZ2UvVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlOjpoYW5kbGVyKToKKyAgICAg
ICAgU2ltcGxpZnkgbm93IHRoYXQgdXNlckNvbnRlbnRQcm92aWRlcigpIGFuZCB1c2VyTWVzc2Fn
ZUhhbmRsZXJEZXNjcmlwdG9ycygpIGFyZSByZWZlcmVuY2VzLgorCiAyMDE2LTAzLTA5ICBBZGEg
Q2hhbiAgPGFkYWNoYW5AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhIGdldHRlciBmb3IgV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlT2JqQyBhbmQgdXBkYXRlIGl0cyByYXRlIHByb3BlcnR5
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAxOTc4OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI3NDAsNiArMjc0MCw4IEBA
CiAJCTdDM0I3OTcyMTkwODc1N0IwMEI0N0EyRCAvKiBVc2VyTWVzc2FnZUhhbmRsZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDM0I3OTcwMTkwODc1
N0IwMEI0N0EyRCAvKiBVc2VyTWVzc2FnZUhhbmRsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzNFNTEwQTE4REY4RjM1MDBDMTEyRjcgLyog
SFRNTENvbnZlcnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0MzRTUxMDgxOERGOEYzNTAwQzExMkY3IC8qIEhUTUxDb252ZXJ0ZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzNFNTEwQjE4REY4
RjM1MDBDMTEyRjcgLyogSFRNTENvbnZlcnRlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDM0U1MTA5MThERjhGMzUwMEMxMTJGNyAvKiBIVE1MQ29u
dmVydGVyLm1tICovOyB9OworCQk3QzNGMDFDMTFDOEU1QUJBMDBBREQ5NjIgLyogVXNlckNvbnRl
bnRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0MzRjAxQzAxQzhFNUFCMTAwQUREOTYyIC8qIFVzZXJDb250ZW50UHJvdmlkZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3QzNGMDFDMjFD
OEU1QUMyMDBBREQ5NjIgLyogVXNlckNvbnRlbnRQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzNGMDFCRjFDOEU1QUIxMDBBREQ5NjIg
LyogVXNlckNvbnRlbnRQcm92aWRlci5jcHAgKi87IH07CiAJCTdDNDhBNkQwMTkxQzlENjUwMDAy
NjY3NCAvKiBXZWJLaXROYW1lc3BhY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0M0OEE2Q0UxOTFDOUQ2NTAwMDI2Njc0IC8qIFdlYktpdE5hbWVz
cGFjZS5jcHAgKi87IH07CiAJCTdDNDhBNkQxMTkxQzlENjUwMDAyNjY3NCAvKiBXZWJLaXROYW1l
c3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdD
NDhBNkNGMTkxQzlENjUwMDAyNjY3NCAvKiBXZWJLaXROYW1lc3BhY2UuaCAqLzsgfTsKIAkJN0M0
OTAyQTIxOEI4MjVGODAwN0Q5Mjk4IC8qIERPTVdoZWVsRXZlbnRJbnRlcm5hbC5oIGluIENvcHkg
R2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODU5
ODlEQ0EwQUNDOEJCRDAwQTBCQzUxIC8qIERPTVdoZWVsRXZlbnRJbnRlcm5hbC5oICovOyB9OwpA
QCAtMTAzNzksNiArMTAzODEsOCBAQAogCQk3QzNCNzk3MDE5MDg3NTdCMDBCNDdBMkQgLyogVXNl
ck1lc3NhZ2VIYW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVzZXJN
ZXNzYWdlSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzNFNTEwODE4
REY4RjM1MDBDMTEyRjcgLyogSFRNTENvbnZlcnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBIVE1MQ29udmVydGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdDM0U1MTA5MThERjhGMzUwMEMxMTJGNyAvKiBIVE1MQ29udmVydGVyLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSFRNTENvbnZlcnRlci5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MzRjAxQkYxQzhFNUFCMTAwQUREOTYyIC8qIFVzZXJDb250
ZW50UHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVXNl
ckNvbnRlbnRQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDM0Yw
MUMwMUM4RTVBQjEwMEFERDk2MiAvKiBVc2VyQ29udGVudFByb3ZpZGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVzZXJDb250ZW50UHJvdmlkZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0M0MTg5QUIxQjA3QzE3MDAwMEZBNzU3IC8qIEdsb2JhbEV2ZW50
SGFuZGxlcnMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgcGF0aCA9IEdsb2JhbEV2ZW50SGFuZGxlcnMuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QzQxODlBQzFCMDdDQkYyMDAwRkE3NTcgLyogV2luZG93RXZlbnRI
YW5kbGVycy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gV2luZG93RXZlbnRIYW5kbGVycy5pZGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDNDhBNkNFMTkxQzlENjUwMDAyNjY3NCAvKiBXZWJLaXROYW1lc3Bh
Y2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0TmFtZXNw
YWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4MTEzLDYgKzE4MTE3LDgg
QEAKIAkJCQkyRDRGOTZGMjFBMUVDQzI0MDA5OEJGODggLyogVGV4dEluZGljYXRvci5oICovLAog
CQkJCTFBRTc5RDQwMTg4REI2MUYwMDIyMzlDMiAvKiBVc2VyQ29udGVudENvbnRyb2xsZXIuY3Bw
ICovLAogCQkJCTFBRTc5RDQxMTg4REI2MUYwMDIyMzlDMiAvKiBVc2VyQ29udGVudENvbnRyb2xs
ZXIuaCAqLywKKwkJCQk3QzNGMDFCRjFDOEU1QUIxMDBBREQ5NjIgLyogVXNlckNvbnRlbnRQcm92
aWRlci5jcHAgKi8sCisJCQkJN0MzRjAxQzAxQzhFNUFCMTAwQUREOTYyIC8qIFVzZXJDb250ZW50
UHJvdmlkZXIuaCAqLywKIAkJCQkwMDNGMUZFOTExRTZBQjQzMDA4MjU4RDkgLyogVXNlckNvbnRl
bnRUeXBlcy5oICovLAogCQkJCUJDQUNGM0JBMTA3MjkyMUEwMEMwQzhBMyAvKiBVc2VyQ29udGVu
dFVSTFBhdHRlcm4uY3BwICovLAogCQkJCUJDQUNGM0JCMTA3MjkyMUEwMEMwQzhBMyAvKiBVc2Vy
Q29udGVudFVSTFBhdHRlcm4uaCAqLywKQEAgLTI4MjQ3LDYgKzI4MjUzLDcgQEAKIAkJCQkwODhD
MkY3QTEyMzkwMDgxMDAzRDY1Q0UgLyogU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTA4MTA5M0RDMTI1NUYwRTcwMEVEOUQyOSAvKiBTVkdUZXh0TGF5b3V0QXR0
cmlidXRlc0J1aWxkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4MTY2OERBMTI1NjAzRDUwMDZG
MjVERSAvKiBTVkdUZXh0TGF5b3V0RW5naW5lLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzNGMDFD
MTFDOEU1QUJBMDBBREQ5NjIgLyogVXNlckNvbnRlbnRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMDgwRTQ5MjYxMjU1RjNCRDAwRUZDQTI3IC8qIFNWR1RleHRMYXlvdXRFbmdpbmVCYXNl
bGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDgwRTQ5MjgxMjU1RjNCRDAwRUZDQTI3IC8qIFNW
R1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEYwQkZDNjEy
NTVDNTNDMDAwNzUxODUgLyogU1ZHVGV4dE1ldHJpY3MuaCBpbiBIZWFkZXJzICovLApAQCAtMzA0
MjIsNiArMzA0MjksNyBAQAogCQkJCTUxMUVGMkQxMTdGMEZERjEwMEU0RkExNiAvKiBKU0lEQk9i
amVjdFN0b3JlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMUVGMkM4MTdGMEZEMzUw
MEU0RkExNiAvKiBKU0lEQk9wZW5EQlJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEx
RUYyQzkxN0YwRkQzNTAwRTRGQTE2IC8qIEpTSURCUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk3QzNGMDFDMjFDOEU1QUMyMDBBREQ5NjIgLyogVXNlckNvbnRlbnRQcm92aWRlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1MTFFRjJDQTE3RjBGRDM1MDBFNEZBMTYgLyogSlNJREJUcmFu
c2FjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTFFRjJDQjE3RjBGRDM1MDBFNEZBMTYg
LyogSlNJREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM2QzQ5
RjMwRDdEQkEwNTAwRkZBNTU4IC8qIEpTSW1hZ2VDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAq
LywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FeHRlbnNpb25TdHlsZVNoZWV0cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V4dGVuc2lvblN0eWxlU2hlZXRzLmNwcAko
cmV2aXNpb24gMTk3ODk0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V4dGVuc2lvblN0eWxlU2hl
ZXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNywyNCBAQCB2b2lkIEV4dGVuc2lv
blN0eWxlU2hlZXRzOjp1cGRhdGVJbmplY3RlCiAgICAgaWYgKCFvd25pbmdQYWdlKQogICAgICAg
ICByZXR1cm47CiAKKyAgICBvd25pbmdQYWdlLT51c2VyQ29udGVudFByb3ZpZGVyKCkuZm9yRWFj
aFVzZXJTdHlsZVNoZWV0KFsmXShjb25zdCBVc2VyU3R5bGVTaGVldCYgdXNlclN0eWxlU2hlZXQp
IHsKKyAgICAgICAgaWYgKHVzZXJTdHlsZVNoZWV0LmluamVjdGVkRnJhbWVzKCkgPT0gSW5qZWN0
SW5Ub3BGcmFtZU9ubHkgJiYgbV9kb2N1bWVudC5vd25lckVsZW1lbnQoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBpZiAoIVVzZXJDb250ZW50VVJMUGF0dGVybjo6bWF0Y2hlc1Bh
dHRlcm5zKG1fZG9jdW1lbnQudXJsKCksIHVzZXJTdHlsZVNoZWV0LndoaXRlbGlzdCgpLCB1c2Vy
U3R5bGVTaGVldC5ibGFja2xpc3QoKSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
UmVmUHRyPENTU1N0eWxlU2hlZXQ+IHNoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlSW5saW5l
KGNvbnN0X2Nhc3Q8RG9jdW1lbnQmPihtX2RvY3VtZW50KSwgdXNlclN0eWxlU2hlZXQudXJsKCkp
OworICAgICAgICBib29sIGlzVXNlclN0eWxlU2hlZXQgPSB1c2VyU3R5bGVTaGVldC5sZXZlbCgp
ID09IFVzZXJTdHlsZVVzZXJMZXZlbDsKKyAgICAgICAgaWYgKGlzVXNlclN0eWxlU2hlZXQpCisg
ICAgICAgICAgICBtX2luamVjdGVkVXNlclN0eWxlU2hlZXRzLmFwcGVuZChzaGVldCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1faW5qZWN0ZWRBdXRob3JTdHlsZVNoZWV0cy5hcHBlbmQo
c2hlZXQpOworCisgICAgICAgIHNoZWV0LT5jb250ZW50cygpLnNldElzVXNlclN0eWxlU2hlZXQo
aXNVc2VyU3R5bGVTaGVldCk7CisgICAgICAgIHNoZWV0LT5jb250ZW50cygpLnBhcnNlU3RyaW5n
KHVzZXJTdHlsZVNoZWV0LnNvdXJjZSgpKTsKKyAgICB9KTsKKyAgICAKICAgICBpZiAoIW93bmlu
Z1BhZ2UtPmNhcHRpb25Vc2VyUHJlZmVyZW5jZXNTdHlsZVNoZWV0KCkuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIC8vIElkZW50aWZ5IG91ciBvdmVycmlkZSBzdHlsZSBzaGVldCB3aXRoIGEgdW5pcXVl
IFVSTCAtIGEgbmV3IHNjaGVtZSBhbmQgYSBVVUlELgogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8VVJMPiBjYXB0aW9uc1N0eWxlU2hlZXRVUkwoUGFyc2VkVVJMU3RyaW5nLCAidXNlci1j
YXB0aW9ucy1vdmVycmlkZTowMUY2QUYxMi1DM0IwLTRGNzAtQUY1RS1BM0UwMDIzNERDMjMiKTsK
QEAgLTEyNywzNCArMTQ1LDYgQEAgdm9pZCBFeHRlbnNpb25TdHlsZVNoZWV0czo6dXBkYXRlSW5q
ZWN0ZQogICAgICAgICBzaGVldC0+Y29udGVudHMoKS5zZXRJc1VzZXJTdHlsZVNoZWV0KGZhbHNl
KTsKICAgICAgICAgc2hlZXQtPmNvbnRlbnRzKCkucGFyc2VTdHJpbmcob3duaW5nUGFnZS0+Y2Fw
dGlvblVzZXJQcmVmZXJlbmNlc1N0eWxlU2hlZXQoKSk7CiAgICAgfQotCi0gICAgY29uc3QgYXV0
byogdXNlckNvbnRlbnRDb250cm9sbGVyID0gb3duaW5nUGFnZS0+dXNlckNvbnRlbnRDb250cm9s
bGVyKCk7Ci0gICAgaWYgKCF1c2VyQ29udGVudENvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGNvbnN0IFVzZXJTdHlsZVNoZWV0TWFwKiB1c2VyU3R5bGVTaGVldHMgPSB1c2VyQ29u
dGVudENvbnRyb2xsZXItPnVzZXJTdHlsZVNoZWV0cygpOwotICAgIGlmICghdXNlclN0eWxlU2hl
ZXRzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGF1dG8mIHN0eWxlU2hlZXRzIDogdXNl
clN0eWxlU2hlZXRzLT52YWx1ZXMoKSkgewotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHNoZWV0
IDogKnN0eWxlU2hlZXRzKSB7Ci0gICAgICAgICAgICBpZiAoc2hlZXQtPmluamVjdGVkRnJhbWVz
KCkgPT0gSW5qZWN0SW5Ub3BGcmFtZU9ubHkgJiYgbV9kb2N1bWVudC5vd25lckVsZW1lbnQoKSkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgaWYgKCFVc2VyQ29udGVu
dFVSTFBhdHRlcm46Om1hdGNoZXNQYXR0ZXJucyhtX2RvY3VtZW50LnVybCgpLCBzaGVldC0+d2hp
dGVsaXN0KCksIHNoZWV0LT5ibGFja2xpc3QoKSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBncm91cFNoZWV0ID0gQ1NTU3R5
bGVTaGVldDo6Y3JlYXRlSW5saW5lKGNvbnN0X2Nhc3Q8RG9jdW1lbnQmPihtX2RvY3VtZW50KSwg
c2hlZXQtPnVybCgpKTsKLSAgICAgICAgICAgIGJvb2wgaXNVc2VyU3R5bGVTaGVldCA9IHNoZWV0
LT5sZXZlbCgpID09IFVzZXJTdHlsZVVzZXJMZXZlbDsKLSAgICAgICAgICAgIGlmIChpc1VzZXJT
dHlsZVNoZWV0KQotICAgICAgICAgICAgICAgIG1faW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMuYXBw
ZW5kKGdyb3VwU2hlZXQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1faW5q
ZWN0ZWRBdXRob3JTdHlsZVNoZWV0cy5hcHBlbmQoZ3JvdXBTaGVldCk7Ci0KLSAgICAgICAgICAg
IGdyb3VwU2hlZXQtPmNvbnRlbnRzKCkuc2V0SXNVc2VyU3R5bGVTaGVldChpc1VzZXJTdHlsZVNo
ZWV0KTsKLSAgICAgICAgICAgIGdyb3VwU2hlZXQtPmNvbnRlbnRzKCkucGFyc2VTdHJpbmcoc2hl
ZXQtPnNvdXJjZSgpKTsKLSAgICAgICAgfQotICAgIH0KIH0KIAogdm9pZCBFeHRlbnNpb25TdHls
ZVNoZWV0czo6aW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlKCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkocmV2aXNpb24gMTk3ODk0KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTI1NSw3ICsxMjU1LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpsb2FkUmVzb3VyY2Uo
Y29ucwogICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KHVybCk7CiAgICAgRG9jdW1lbnRMb2Fk
ZXIqIGRvY3VtZW50TG9hZGVyID0gZnJhbWUtPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCk7CiAK
LSAgICBpZiAocGFnZS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkgJiYgZG9jdW1lbnRMb2FkZXIg
JiYgcGFnZS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCktPnByb2Nlc3NDb250ZW50RXh0ZW5zaW9u
UnVsZXNGb3JMb2FkKHJlcXVlc3QsIFJlc291cmNlVHlwZTo6TWVkaWEsICpkb2N1bWVudExvYWRl
cikgPT0gQ29udGVudEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXM6OkJsb2NrZWQpIHsKKyAgICBp
ZiAoZG9jdW1lbnRMb2FkZXIgJiYgcGFnZS0+dXNlckNvbnRlbnRQcm92aWRlcigpLnByb2Nlc3ND
b250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKHJlcXVlc3QsIFJlc291cmNlVHlwZTo6TWVkaWEs
ICpkb2N1bWVudExvYWRlcikgPT0gQ29udGVudEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXM6OkJs
b2NrZWQpIHsKICAgICAgICAgcmVxdWVzdCA9IHsgfTsKICAgICAgICAgbWVkaWFMb2FkaW5nRmFp
bGVkKE1lZGlhUGxheWVyOjpGb3JtYXRFcnJvcik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuY3BwCShyZXZpc2lvbiAxOTc4OTQpCisrKyBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCiAjaW5jbHVkZSAiU3RvcmFn
ZU5hbWVzcGFjZS5oIgogI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5oIgorI2lu
Y2x1ZGUgIlVzZXJDb250ZW50UHJvdmlkZXIuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KIAogI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCkBAIC05NSw3ICs5NiwxOCBAQCBj
bGFzcyBFbXB0eVN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlciBmaW5hCiAgICAgfQogfTsKIAotY2xh
c3MgRW1wdHlWaXNpdGVkTGlua1N0b3JlIDogcHVibGljIFZpc2l0ZWRMaW5rU3RvcmUgeworY2xh
c3MgRW1wdHlVc2VyQ29udGVudFByb3ZpZGVyIGZpbmFsIDogcHVibGljIFVzZXJDb250ZW50UHJv
dmlkZXIgeworICAgIHZvaWQgZm9yRWFjaFVzZXJTY3JpcHQoY29uc3Qgc3RkOjpmdW5jdGlvbjx2
b2lkKERPTVdyYXBwZXJXb3JsZCYsIGNvbnN0IFVzZXJTY3JpcHQmKT4mKSBjb25zdCBvdmVycmlk
ZSB7IH0KKyAgICB2b2lkIGZvckVhY2hVc2VyU3R5bGVTaGVldChjb25zdCBzdGQ6OmZ1bmN0aW9u
PHZvaWQoY29uc3QgVXNlclN0eWxlU2hlZXQmKT4mKSBjb25zdCBvdmVycmlkZSB7IH0KKyNpZiBF
TkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQorICAgIGNvbnN0IFVzZXJNZXNzYWdlSGFuZGxl
ckRlc2NyaXB0b3JNYXAmIHVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzKCkgY29uc3Qgb3Zl
cnJpZGUgeyBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRv
ck1hcD4gbWFwOyByZXR1cm4gbWFwLmdldCgpOyB9CisjZW5kaWYKKyNpZiBFTkFCTEUoQ09OVEVO
VF9FWFRFTlNJT05TKQorICAgIHZpcnR1YWwgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRl
bnNpb25zQmFja2VuZCYgdXNlckNvbnRlbnRFeHRlbnNpb25CYWNrZW5kKCkgb3ZlcnJpZGUgeyBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25z
QmFja2VuZD4gYmFja2VuZDsgcmV0dXJuIGJhY2tlbmQuZ2V0KCk7IH07CisjZW5kaWYKK307CisK
K2NsYXNzIEVtcHR5VmlzaXRlZExpbmtTdG9yZSBmaW5hbCA6IHB1YmxpYyBWaXNpdGVkTGlua1N0
b3JlIHsKICAgICBib29sIGlzTGlua1Zpc2l0ZWQoUGFnZSYsIExpbmtIYXNoLCBjb25zdCBVUkwm
LCBjb25zdCBBdG9taWNTdHJpbmcmKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZv
aWQgYWRkVmlzaXRlZExpbmsoUGFnZSYsIExpbmtIYXNoKSBvdmVycmlkZSB7IH0KIH07CkBAIC0x
MzIsNiArMTQ0LDcgQEAgdm9pZCBmaWxsV2l0aEVtcHR5Q2xpZW50cyhQYWdlQ29uZmlndXJhdAog
CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24uZGF0YWJhc2VQcm92aWRlciA9IGFkb3B0UmVmKG5ldyBF
bXB0eURhdGFiYXNlUHJvdmlkZXIpOwogICAgIHBhZ2VDb25maWd1cmF0aW9uLnN0b3JhZ2VOYW1l
c3BhY2VQcm92aWRlciA9IGFkb3B0UmVmKG5ldyBFbXB0eVN0b3JhZ2VOYW1lc3BhY2VQcm92aWRl
cik7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24udXNlckNvbnRlbnRQcm92aWRlciA9IGFkb3B0UmVm
KG5ldyBFbXB0eVVzZXJDb250ZW50UHJvdmlkZXIpOwogICAgIHBhZ2VDb25maWd1cmF0aW9uLnZp
c2l0ZWRMaW5rU3RvcmUgPSBhZG9wdFJlZihuZXcgRW1wdHlWaXNpdGVkTGlua1N0b3JlKTsKIAog
I2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RW1wdHlDbGllbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5
Q2xpZW50cy5oCShyZXZpc2lvbiAxOTc4OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1w
dHlDbGllbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJE
aWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oIgogI2luY2x1ZGUgIkRyYWdDbGllbnQuaCIKICNpbmNs
dWRlICJFZGl0b3JDbGllbnQuaCIKLSNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgogI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZvY3VzRGlyZWN0aW9uLmgiCiAjaW5jbHVk
ZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKQEAgLTQ0LDkgKzQzLDE4IEBACiAjaW5jbHVkZSAiUGFn
ZS5oIgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlckNsaWVudC5oIgogI2luY2x1ZGUgIlJlc291
cmNlRXJyb3IuaCIKKyNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgogI2luY2x1ZGUgIlZp
c2l0ZWRMaW5rU3RvcmUuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKKyNp
ZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQorI2luY2x1ZGUgIlVzZXJNZXNzYWdlSGFu
ZGxlckRlc2NyaXB0b3IuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9O
UykKKyNpbmNsdWRlICJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uaCIKKyNlbmRpZgorCiAvKgog
IFRoaXMgZmlsZSBob2xkcyBlbXB0eSBDbGllbnQgc3R1YnMgZm9yIHVzZSBieSBXZWJDb3JlLgog
IFZpZXdsZXNzIGVsZW1lbnQgbmVlZHMgdG8gY3JlYXRlIGEgZHVtbXkgUGFnZS0+RnJhbWUtPkZy
YW1lVmlldyB0cmVlIGZvciB1c2UgaW4gcGFyc2luZyBvciBleGVjdXRpbmcgSmF2YVNjcmlwdC4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gMTk3ODk0
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjczMCwxMyArMjczMCwxMSBAQCB1bnNpZ25lZCBsb25nIEZyYW1lTG9hZGVyOjpsb2Fk
UmVzb3VyY2VTCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAgICBpZiAoZXJyb3Iu
aXNOdWxsKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkgewot
ICAgICAgICAgICAgaWYgKGF1dG8qIGNvbnRyb2xsZXIgPSBwYWdlLT51c2VyQ29udGVudENvbnRy
b2xsZXIoKSkgewotICAgICAgICAgICAgICAgIGlmIChtX2RvY3VtZW50TG9hZGVyICYmIGNvbnRy
b2xsZXItPnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKG5ld1JlcXVlc3QsIFJl
c291cmNlVHlwZTo6UmF3LCAqbV9kb2N1bWVudExvYWRlcikgPT0gQ29udGVudEV4dGVuc2lvbnM6
OkJsb2NrZWRTdGF0dXM6OkJsb2NrZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgbmV3UmVxdWVz
dCA9IHsgfTsKLSAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBSZXNvdXJjZUVycm9yKGVycm9y
RG9tYWluV2ViS2l0SW50ZXJuYWwsIDAsIGluaXRpYWxSZXF1ZXN0LnVybCgpLCBlbXB0eVN0cmlu
ZygpKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSB7IH07Ci0gICAgICAgICAgICAg
ICAgICAgIGRhdGEgPSBudWxscHRyOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChtX2RvY3VtZW50TG9hZGVyICYmIHBhZ2UtPnVzZXJDb250ZW50UHJvdmlkZXIoKS5wcm9jZXNz
Q29udGVudEV4dGVuc2lvblJ1bGVzRm9yTG9hZChuZXdSZXF1ZXN0LCBSZXNvdXJjZVR5cGU6OlJh
dywgKm1fZG9jdW1lbnRMb2FkZXIpID09IENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVz
OjpCbG9ja2VkKSB7CisgICAgICAgICAgICAgICAgbmV3UmVxdWVzdCA9IHsgfTsKKyAgICAgICAg
ICAgICAgICBlcnJvciA9IFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5hbCwg
MCwgaW5pdGlhbFJlcXVlc3QudXJsKCksIGVtcHR5U3RyaW5nKCkpOworICAgICAgICAgICAgICAg
IHJlc3BvbnNlID0geyB9OworICAgICAgICAgICAgICAgIGRhdGEgPSBudWxscHRyOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Bp
bmdMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9QaW5nTG9h
ZGVyLmNwcAkocmV2aXNpb24gMTk3ODk0KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1BpbmdM
b2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMCArNTksOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBzdGF0aWMgQ29udGVudEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXMgcHJvY2Vzc0Nv
bnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQoY29uc3QgRnJhbWUmIGZyYW1lLCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIFJlc291cmNlVHlwZSByZXNvdXJjZVR5cGUpCiB7CiAgICAgaWYgKERv
Y3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGZyYW1lLmxvYWRlcigpLmRvY3VtZW50TG9h
ZGVyKCkpIHsKLSAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS5wYWdlKCkpIHsKLSAgICAg
ICAgICAgIGlmIChVc2VyQ29udGVudENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBwYWdlLT51c2Vy
Q29udGVudENvbnRyb2xsZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY29udHJvbGxlci0+
cHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQocmVxdWVzdCwgcmVzb3VyY2VUeXBl
LCAqZG9jdW1lbnRMb2FkZXIpOwotICAgICAgICB9CisgICAgICAgIGlmIChQYWdlKiBwYWdlID0g
ZnJhbWUucGFnZSgpKQorICAgICAgICAgICAgcmV0dXJuIHBhZ2UtPnVzZXJDb250ZW50UHJvdmlk
ZXIoKS5wcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9yTG9hZChyZXF1ZXN0LCByZXNvdXJj
ZVR5cGUsICpkb2N1bWVudExvYWRlcik7CiAgICAgfQogICAgIHJldHVybiBDb250ZW50RXh0ZW5z
aW9uczo6QmxvY2tlZFN0YXR1czo6Tm90QmxvY2tlZDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gMTk3ODk0KQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ2LDgg
KzM0Niw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdEludGUKICAgICBp
ZiAoZnJhbWVMb2FkZXIoKSkgewogICAgICAgICBQYWdlKiBwYWdlID0gZnJhbWVMb2FkZXIoKS0+
ZnJhbWUoKS5wYWdlKCk7CiAgICAgICAgIGlmIChwYWdlICYmIG1fZG9jdW1lbnRMb2FkZXIpIHsK
LSAgICAgICAgICAgIGF1dG8qIHVzZXJDb250ZW50Q29udHJvbGxlciA9IHBhZ2UtPnVzZXJDb250
ZW50Q29udHJvbGxlcigpOwotICAgICAgICAgICAgaWYgKHVzZXJDb250ZW50Q29udHJvbGxlciAm
JiB1c2VyQ29udGVudENvbnRyb2xsZXItPnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JM
b2FkKHJlcXVlc3QsIG1fcmVzb3VyY2VUeXBlLCAqbV9kb2N1bWVudExvYWRlcikgPT0gQ29udGVu
dEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXM6OkJsb2NrZWQpCisgICAgICAgICAgICBpZiAocGFn
ZS0+dXNlckNvbnRlbnRQcm92aWRlcigpLnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JM
b2FkKHJlcXVlc3QsIG1fcmVzb3VyY2VUeXBlLCAqbV9kb2N1bWVudExvYWRlcikgPT0gQ29udGVu
dEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXM6OkJsb2NrZWQpCiAgICAgICAgICAgICAgICAgcmVx
dWVzdCA9IHsgfTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gMTk3
ODk0KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQyLDggKzU0Miw4IEBAIENhY2hlZFJlc291cmNlSGFu
ZGxlPENhY2hlZFJlc291cmNlPiBDYWMKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICNpZiBF
TkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIGlmIChmcmFtZSgpICYmIGZyYW1lKCktPm1h
aW5GcmFtZSgpLnBhZ2UoKSAmJiBmcmFtZSgpLT5tYWluRnJhbWUoKS5wYWdlKCktPnVzZXJDb250
ZW50Q29udHJvbGxlcigpICYmIG1fZG9jdW1lbnRMb2FkZXIpIHsKLSAgICAgICAgaWYgKGZyYW1l
KCktPm1haW5GcmFtZSgpLnBhZ2UoKS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCktPnByb2Nlc3ND
b250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKHJlcXVlc3QubXV0YWJsZVJlc291cmNlUmVxdWVz
dCgpLCB0b1Jlc291cmNlVHlwZSh0eXBlKSwgKm1fZG9jdW1lbnRMb2FkZXIpID09IENvbnRlbnRF
eHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzOjpCbG9ja2VkKSB7CisgICAgaWYgKGZyYW1lKCkgJiYg
ZnJhbWUoKS0+bWFpbkZyYW1lKCkucGFnZSgpICYmIG1fZG9jdW1lbnRMb2FkZXIpIHsKKyAgICAg
ICAgaWYgKGZyYW1lKCktPm1haW5GcmFtZSgpLnBhZ2UoKS0+dXNlckNvbnRlbnRQcm92aWRlcigp
LnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKHJlcXVlc3QubXV0YWJsZVJlc291
cmNlUmVxdWVzdCgpLCB0b1Jlc291cmNlVHlwZSh0eXBlKSwgKm1fZG9jdW1lbnRMb2FkZXIpID09
IENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzOjpCbG9ja2VkKSB7CiAgICAgICAgICAg
ICBpZiAodHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6VHlwZTo6TWFpblJlc291cmNlKSB7CiAgICAg
ICAgICAgICAgICAgYXV0byByZXNvdXJjZSA9IGNyZWF0ZVJlc291cmNlKHR5cGUsIHJlcXVlc3Qu
bXV0YWJsZVJlc291cmNlUmVxdWVzdCgpLCByZXF1ZXN0LmNoYXJzZXQoKSwgc2Vzc2lvbklEKCkp
OwogICAgICAgICAgICAgICAgIEFTU0VSVChyZXNvdXJjZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0RPTVdpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9E
T01XaW5kb3cuY3BwCShyZXZpc2lvbiAxOTc4OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RP
TVdpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2MSwxNSArNzYxLDcgQEAgYm9vbCBET01X
aW5kb3c6OnNob3VsZEhhdmVXZWJLaXROYW1lc3BhYwogICAgIGlmICghcGFnZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byogdXNlckNvbnRlbnRDb250cm9sbGVyID0gcGFnZS0+
dXNlckNvbnRlbnRDb250cm9sbGVyKCk7Ci0gICAgaWYgKCF1c2VyQ29udGVudENvbnRyb2xsZXIp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8qIGRlc2NyaXB0b3JNYXAgPSB1c2Vy
Q29udGVudENvbnRyb2xsZXItPnVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzKCk7Ci0gICAg
aWYgKCFkZXNjcmlwdG9yTWFwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3IgKGF1
dG8mIGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9yTWFwLT52YWx1ZXMoKSkgeworICAgIGZvciAoYXV0
byYgZGVzY3JpcHRvciA6IHBhZ2UtPnVzZXJDb250ZW50UHJvdmlkZXIoKS51c2VyTWVzc2FnZUhh
bmRsZXJEZXNjcmlwdG9ycygpLnZhbHVlcygpKSB7CiAgICAgICAgIGlmICgmZGVzY3JpcHRvci0+
d29ybGQoKSA9PSAmd29ybGQpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0y
MTY4LDExICsyMTYwLDEwIEBAIFBhc3NSZWZQdHI8RE9NV2luZG93PiBET01XaW5kb3c6Om9wZW4o
Y28KICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAgIGlmIChmaXJzdEZyYW1lLT5k
b2N1bWVudCgpCiAgICAgICAgICYmIGZpcnN0RnJhbWUtPm1haW5GcmFtZSgpLnBhZ2UoKQotICAg
ICAgICAmJiBmaXJzdEZyYW1lLT5tYWluRnJhbWUoKS5wYWdlKCktPnVzZXJDb250ZW50Q29udHJv
bGxlcigpCiAgICAgICAgICYmIGZpcnN0RnJhbWUtPm1haW5GcmFtZSgpLmRvY3VtZW50KCkKICAg
ICAgICAgJiYgZmlyc3RGcmFtZS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKS0+bG9hZGVyKCkpIHsK
LSAgICAgICAgUmVzb3VyY2VMb2FkSW5mbyByZXNvdXJjZUxvYWRJbmZvID0ge2ZpcnN0RnJhbWUt
PmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybFN0cmluZyksIGZpcnN0RnJhbWUtPm1haW5GcmFt
ZSgpLmRvY3VtZW50KCktPnVybCgpLCBSZXNvdXJjZVR5cGU6OlBvcHVwfTsKLSAgICAgICAgVmVj
dG9yPENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb24+IGFjdGlvbnMgPSBmaXJzdEZyYW1lLT5tYWlu
RnJhbWUoKS5wYWdlKCktPnVzZXJDb250ZW50Q29udHJvbGxlcigpLT5hY3Rpb25zRm9yUmVzb3Vy
Y2VMb2FkKHJlc291cmNlTG9hZEluZm8sICpmaXJzdEZyYW1lLT5tYWluRnJhbWUoKS5kb2N1bWVu
dCgpLT5sb2FkZXIoKSk7CisgICAgICAgIFJlc291cmNlTG9hZEluZm8gcmVzb3VyY2VMb2FkSW5m
byA9IHsgZmlyc3RGcmFtZS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXJsU3RyaW5nKSwgZmly
c3RGcmFtZS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKS0+dXJsKCksIFJlc291cmNlVHlwZTo6UG9w
dXAgfTsKKyAgICAgICAgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb24+IGFjdGlvbnMg
PSBmaXJzdEZyYW1lLT5tYWluRnJhbWUoKS5wYWdlKCktPnVzZXJDb250ZW50UHJvdmlkZXIoKS5h
Y3Rpb25zRm9yUmVzb3VyY2VMb2FkKHJlc291cmNlTG9hZEluZm8sICpmaXJzdEZyYW1lLT5tYWlu
RnJhbWUoKS5kb2N1bWVudCgpLT5sb2FkZXIoKSk7CiAgICAgICAgIGZvciAoY29uc3QgQ29udGVu
dEV4dGVuc2lvbnM6OkFjdGlvbiYgYWN0aW9uIDogYWN0aW9ucykgewogICAgICAgICAgICAgaWYg
KGFjdGlvbi50eXBlKCkgPT0gQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9h
ZCkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUu
Y3BwCShyZXZpc2lvbiAxOTc4OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjg5LDM1ICs2ODksMTcgQEAgdm9pZCBGcmFtZTo6aW5qZWN0VXNl
clNjcmlwdHMoVXNlclNjcmlwdAogICAgIGlmIChsb2FkZXIoKS5zdGF0ZU1hY2hpbmUoKS5jcmVh
dGluZ0luaXRpYWxFbXB0eURvY3VtZW50KCkgJiYgIXNldHRpbmdzKCkuc2hvdWxkSW5qZWN0VXNl
clNjcmlwdHNJbkluaXRpYWxFbXB0eURvY3VtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGNvbnN0IGF1dG8qIHVzZXJDb250ZW50Q29udHJvbGxlciA9IG1fcGFnZS0+dXNlckNvbnRlbnRD
b250cm9sbGVyKCk7Ci0gICAgaWYgKCF1c2VyQ29udGVudENvbnRyb2xsZXIpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIFdhbGsgdGhlIGhhc2h0YWJsZS4gSW5qZWN0IGJ5IHdvcmxkLgotICAg
IGNvbnN0IFVzZXJTY3JpcHRNYXAqIHVzZXJTY3JpcHRzID0gdXNlckNvbnRlbnRDb250cm9sbGVy
LT51c2VyU2NyaXB0cygpOwotICAgIGlmICghdXNlclNjcmlwdHMpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGZvciAoY29uc3QgYXV0byYgd29ybGRBbmRVc2VyU2NyaXB0IDogKnVzZXJTY3JpcHRz
KQotICAgICAgICBpbmplY3RVc2VyU2NyaXB0c0ZvcldvcmxkKCp3b3JsZEFuZFVzZXJTY3JpcHQu
a2V5LCAqd29ybGRBbmRVc2VyU2NyaXB0LnZhbHVlLCBpbmplY3Rpb25UaW1lKTsKLX0KLQotdm9p
ZCBGcmFtZTo6aW5qZWN0VXNlclNjcmlwdHNGb3JXb3JsZChET01XcmFwcGVyV29ybGQmIHdvcmxk
LCBjb25zdCBVc2VyU2NyaXB0VmVjdG9yJiB1c2VyU2NyaXB0cywgVXNlclNjcmlwdEluamVjdGlv
blRpbWUgaW5qZWN0aW9uVGltZSkKLXsKLSAgICBpZiAodXNlclNjcmlwdHMuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBEb2N1bWVudCogZG9jID0gZG9jdW1lbnQoKTsKLSAgICBp
ZiAoIWRvYykKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpOworICAg
IGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoYXV0byYgc2NyaXB0
IDogdXNlclNjcmlwdHMpIHsKLSAgICAgICAgaWYgKHNjcmlwdC0+aW5qZWN0ZWRGcmFtZXMoKSA9
PSBJbmplY3RJblRvcEZyYW1lT25seSAmJiBvd25lckVsZW1lbnQoKSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgIGlmIChzY3JpcHQtPmluamVjdGlvblRpbWUoKSA9PSBpbmplY3Rp
b25UaW1lICYmIFVzZXJDb250ZW50VVJMUGF0dGVybjo6bWF0Y2hlc1BhdHRlcm5zKGRvYy0+dXJs
KCksIHNjcmlwdC0+d2hpdGVsaXN0KCksIHNjcmlwdC0+YmxhY2tsaXN0KCkpKQotICAgICAgICAg
ICAgbV9zY3JpcHQtPmV2YWx1YXRlSW5Xb3JsZChTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdC0+c291
cmNlKCksIHNjcmlwdC0+dXJsKCkpLCB3b3JsZCk7Ci0gICAgfQorICAgIG1fcGFnZS0+dXNlckNv
bnRlbnRQcm92aWRlcigpLmZvckVhY2hVc2VyU2NyaXB0KFsmXShET01XcmFwcGVyV29ybGQmIHdv
cmxkLCBjb25zdCBVc2VyU2NyaXB0JiBzY3JpcHQpIHsKKyAgICAgICAgaWYgKHNjcmlwdC5pbmpl
Y3RlZEZyYW1lcygpID09IEluamVjdEluVG9wRnJhbWVPbmx5ICYmIG93bmVyRWxlbWVudCgpKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChzY3JpcHQuaW5qZWN0aW9uVGltZSgp
ID09IGluamVjdGlvblRpbWUgJiYgVXNlckNvbnRlbnRVUkxQYXR0ZXJuOjptYXRjaGVzUGF0dGVy
bnMoZG9jdW1lbnQtPnVybCgpLCBzY3JpcHQud2hpdGVsaXN0KCksIHNjcmlwdC5ibGFja2xpc3Qo
KSkpCisgICAgICAgICAgICBtX3NjcmlwdC0+ZXZhbHVhdGVJbldvcmxkKFNjcmlwdFNvdXJjZUNv
ZGUoc2NyaXB0LnNvdXJjZSgpLCBzY3JpcHQudXJsKCkpLCB3b3JsZCk7CisgICAgfSk7CiB9CiAK
IFJlbmRlclZpZXcqIEZyYW1lOjpjb250ZW50UmVuZGVyZXIoKSBjb25zdApJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWUuaAkocmV2aXNpb24gMTk3ODk0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yODAsOCArMjgwLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBGcmFtZShQYWdlJiwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiwgRnJhbWVMb2FkZXJD
bGllbnQmKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgaW5qZWN0VXNlclNjcmlwdHNG
b3JXb3JsZChET01XcmFwcGVyV29ybGQmLCBjb25zdCBVc2VyU2NyaXB0VmVjdG9yJiwgVXNlclNj
cmlwdEluamVjdGlvblRpbWUpOwotCiAgICAgICAgIEhhc2hTZXQ8RnJhbWVEZXN0cnVjdGlvbk9i
c2VydmVyKj4gbV9kZXN0cnVjdGlvbk9ic2VydmVyczsKIAogICAgICAgICBNYWluRnJhbWUmIG1f
bWFpbkZyYW1lOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCShyZXZpc2lvbiAxOTc4OTQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3
IEBACiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlN1YmZyYW1lTG9hZGVy
LmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgotI2luY2x1ZGUgIlVzZXJDb250
ZW50Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlVzZXJDb250ZW50UHJvdmlkZXIuaCIKICNpbmNs
dWRlICJVc2VySW5wdXRCcmlkZ2UuaCIKICNpbmNsdWRlICJWaWV3U3RhdGVDaGFuZ2VPYnNlcnZl
ci5oIgogI2luY2x1ZGUgIlZpc2l0ZWRMaW5rU3RhdGUuaCIKQEAgLTIzMSw3ICsyMzEsNyBAQCBQ
YWdlOjpQYWdlKFBhZ2VDb25maWd1cmF0aW9uJiBwYWdlQ29uZmlnCiAgICAgLCBtX2FwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlKHBhZ2VDb25maWd1cmF0aW9uLmFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
ID8gKldURk1vdmUocGFnZUNvbmZpZ3VyYXRpb24uYXBwbGljYXRpb25DYWNoZVN0b3JhZ2UpIDog
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnNpbmdsZXRvbigpKQogICAgICwgbV9kYXRhYmFzZVBy
b3ZpZGVyKCpXVEZNb3ZlKHBhZ2VDb25maWd1cmF0aW9uLmRhdGFiYXNlUHJvdmlkZXIpKQogICAg
ICwgbV9zdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIoKldURk1vdmUocGFnZUNvbmZpZ3VyYXRpb24u
c3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyKSkKLSAgICAsIG1fdXNlckNvbnRlbnRDb250cm9sbGVy
KFdURk1vdmUocGFnZUNvbmZpZ3VyYXRpb24udXNlckNvbnRlbnRDb250cm9sbGVyKSkKKyAgICAs
IG1fdXNlckNvbnRlbnRQcm92aWRlcigqV1RGTW92ZShwYWdlQ29uZmlndXJhdGlvbi51c2VyQ29u
dGVudFByb3ZpZGVyKSkKICAgICAsIG1fdmlzaXRlZExpbmtTdG9yZSgqV1RGTW92ZShwYWdlQ29u
ZmlndXJhdGlvbi52aXNpdGVkTGlua1N0b3JlKSkKICAgICAsIG1fc2Vzc2lvbklEKFNlc3Npb25J
RDo6ZGVmYXVsdFNlc3Npb25JRCgpKQogICAgICwgbV9pc0Nsb3NpbmcoZmFsc2UpCkBAIC0yNDAs
OSArMjQwLDcgQEAgUGFnZTo6UGFnZShQYWdlQ29uZmlndXJhdGlvbiYgcGFnZUNvbmZpZwogCiAg
ICAgbV9zdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXItPmFkZFBhZ2UoKnRoaXMpOwogCi0gICAgaWYg
KG1fdXNlckNvbnRlbnRDb250cm9sbGVyKQotICAgICAgICBtX3VzZXJDb250ZW50Q29udHJvbGxl
ci0+YWRkUGFnZSgqdGhpcyk7Ci0KKyAgICBtX3VzZXJDb250ZW50UHJvdmlkZXItPmFkZFBhZ2Uo
KnRoaXMpOwogICAgIG1fdmlzaXRlZExpbmtTdG9yZS0+YWRkUGFnZSgqdGhpcyk7CiAKICAgICBp
ZiAoIWFsbFBhZ2VzKSB7CkBAIC0yOTgsOSArMjk2LDcgQEAgUGFnZTo6flBhZ2UoKQogI2VuZGlm
CiAKICAgICBtX3N0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci0+cmVtb3ZlUGFnZSgqdGhpcyk7Ci0K
LSAgICBpZiAobV91c2VyQ29udGVudENvbnRyb2xsZXIpCi0gICAgICAgIG1fdXNlckNvbnRlbnRD
b250cm9sbGVyLT5yZW1vdmVQYWdlKCp0aGlzKTsKKyAgICBtX3VzZXJDb250ZW50UHJvdmlkZXIt
PnJlbW92ZVBhZ2UoKnRoaXMpOwogICAgIG1fdmlzaXRlZExpbmtTdG9yZS0+cmVtb3ZlUGFnZSgq
dGhpcyk7CiB9CiAKQEAgLTE4MTksMTUgKzE4MTUsMTYgQEAgYm9vbCBQYWdlOjphcmVQcm9tcHRz
QWxsb3dlZCgpCiAgICAgcmV0dXJuICFtX2ZvcmJpZFByb21wdHNEZXB0aDsKIH0KIAotdm9pZCBQ
YWdlOjpzZXRVc2VyQ29udGVudENvbnRyb2xsZXIoVXNlckNvbnRlbnRDb250cm9sbGVyKiB1c2Vy
Q29udGVudENvbnRyb2xsZXIpCitVc2VyQ29udGVudFByb3ZpZGVyJiBQYWdlOjp1c2VyQ29udGVu
dFByb3ZpZGVyKCkKIHsKLSAgICBpZiAobV91c2VyQ29udGVudENvbnRyb2xsZXIpCi0gICAgICAg
IG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5yZW1vdmVQYWdlKCp0aGlzKTsKLQotICAgIG1fdXNl
ckNvbnRlbnRDb250cm9sbGVyID0gdXNlckNvbnRlbnRDb250cm9sbGVyOworICAgIHJldHVybiBt
X3VzZXJDb250ZW50UHJvdmlkZXI7Cit9CiAKLSAgICBpZiAobV91c2VyQ29udGVudENvbnRyb2xs
ZXIpCi0gICAgICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5hZGRQYWdlKCp0aGlzKTsKK3Zv
aWQgUGFnZTo6c2V0VXNlckNvbnRlbnRQcm92aWRlcihSZWY8VXNlckNvbnRlbnRQcm92aWRlcj4m
JiB1c2VyQ29udGVudFByb3ZpZGVyKQoreworICAgIG1fdXNlckNvbnRlbnRQcm92aWRlci0+cmVt
b3ZlUGFnZSgqdGhpcyk7CisgICAgbV91c2VyQ29udGVudFByb3ZpZGVyID0gV1RGTW92ZSh1c2Vy
Q29udGVudFByb3ZpZGVyKTsKKyAgICBtX3VzZXJDb250ZW50UHJvdmlkZXItPmFkZFBhZ2UoKnRo
aXMpOwogCiAgICAgaW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlSW5BbGxGcmFtZXMo
KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCShyZXZpc2lvbiAxOTc4OTQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDcgKzEyMSw3IEBAIGNsYXNz
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOwogY2xhc3MgU2V0dGluZ3M7CiBjbGFzcyBTdG9yYWdlTmFt
ZXNwYWNlOwogY2xhc3MgU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyOwotY2xhc3MgVXNlckNvbnRl
bnRDb250cm9sbGVyOworY2xhc3MgVXNlckNvbnRlbnRQcm92aWRlcjsKIGNsYXNzIFZhbGlkYXRp
b25NZXNzYWdlQ2xpZW50OwogY2xhc3MgVmlld1N0YXRlQ2hhbmdlT2JzZXJ2ZXI7CiBjbGFzcyBW
aXNpdGVkTGlua1N0b3JlOwpAQCAtNDUwLDggKzQ1MCw4IEBAIHB1YmxpYzoKICAgICBTdG9yYWdl
TmFtZXNwYWNlUHJvdmlkZXImIHN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcigpIHsgcmV0dXJuIG1f
c3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmdldCgpOyB9CiAgICAgdm9pZCBzZXRTdG9yYWdlTmFt
ZXNwYWNlUHJvdmlkZXIoUmVmPFN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcj4mJik7CiAKLSAgICBV
c2VyQ29udGVudENvbnRyb2xsZXIqIHVzZXJDb250ZW50Q29udHJvbGxlcigpIHsgcmV0dXJuIG1f
dXNlckNvbnRlbnRDb250cm9sbGVyLmdldCgpOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZXRVc2VyQ29udGVudENvbnRyb2xsZXIoVXNlckNvbnRlbnRDb250cm9sbGVyKik7CisgICAgVXNl
ckNvbnRlbnRQcm92aWRlciYgdXNlckNvbnRlbnRQcm92aWRlcigpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0VXNlckNvbnRlbnRQcm92aWRlcihSZWY8VXNlckNvbnRlbnRQcm92aWRlcj4m
Jik7CiAKICAgICBWaXNpdGVkTGlua1N0b3JlJiB2aXNpdGVkTGlua1N0b3JlKCk7CiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRWaXNpdGVkTGlua1N0b3JlKFJlZjxWaXNpdGVkTGlua1N0b3Jl
PiYmKTsKQEAgLTY3Niw3ICs2NzYsNyBAQCBwcml2YXRlOgogICAgIFJlZjxBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZT4gbV9hcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTsKICAgICBSZWY8RGF0YWJhc2VQ
cm92aWRlcj4gbV9kYXRhYmFzZVByb3ZpZGVyOwogICAgIFJlZjxTdG9yYWdlTmFtZXNwYWNlUHJv
dmlkZXI+IG1fc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyOwotICAgIFJlZlB0cjxVc2VyQ29udGVu
dENvbnRyb2xsZXI+IG1fdXNlckNvbnRlbnRDb250cm9sbGVyOworICAgIFJlZjxVc2VyQ29udGVu
dFByb3ZpZGVyPiBtX3VzZXJDb250ZW50UHJvdmlkZXI7CiAgICAgUmVmPFZpc2l0ZWRMaW5rU3Rv
cmU+IG1fdmlzaXRlZExpbmtTdG9yZTsKICAgICBSZWZQdHI8V2hlZWxFdmVudFRlc3RUcmlnZ2Vy
PiBtX3Rlc3RUcmlnZ2VyOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25maWd1
cmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uZmlndXJh
dGlvbi5oCShyZXZpc2lvbiAxOTc4OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25m
aWd1cmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgY2xhc3MgSW5zcGVj
dG9yQ2xpZW50OwogY2xhc3MgUGx1Z0luQ2xpZW50OwogY2xhc3MgUHJvZ3Jlc3NUcmFja2VyQ2xp
ZW50OwogY2xhc3MgU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyOwotY2xhc3MgVXNlckNvbnRlbnRD
b250cm9sbGVyOworY2xhc3MgVXNlckNvbnRlbnRQcm92aWRlcjsKIGNsYXNzIFZhbGlkYXRpb25N
ZXNzYWdlQ2xpZW50OwogY2xhc3MgVmlzaXRlZExpbmtTdG9yZTsKIApAQCAtODQsNyArODQsNyBA
QCBwdWJsaWM6CiAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlPiBhcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZTsKICAgICBSZWZQdHI8RGF0YWJhc2VQcm92aWRlcj4gZGF0YWJhc2VQcm92
aWRlcjsKICAgICBSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyPiBzdG9yYWdlTmFtZXNw
YWNlUHJvdmlkZXI7Ci0gICAgUmVmUHRyPFVzZXJDb250ZW50Q29udHJvbGxlcj4gdXNlckNvbnRl
bnRDb250cm9sbGVyOworICAgIFJlZlB0cjxVc2VyQ29udGVudFByb3ZpZGVyPiB1c2VyQ29udGVu
dFByb3ZpZGVyOwogICAgIFJlZlB0cjxWaXNpdGVkTGlua1N0b3JlPiB2aXNpdGVkTGlua1N0b3Jl
OwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnRDb250cm9s
bGVyLmNwcAkocmV2aXNpb24gMTk3ODk0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29u
dGVudENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywyNCArMjcsMTUgQEAKICNp
bmNsdWRlICJVc2VyQ29udGVudENvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUgIkRPTVdyYXBwZXJX
b3JsZC5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIu
aCIKLSNpbmNsdWRlICJFeHRlbnNpb25TdHlsZVNoZWV0cy5oIgotI2luY2x1ZGUgIk1haW5GcmFt
ZS5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRJbmZvLmgiCiAj
aW5jbHVkZSAiVXNlclNjcmlwdC5oIgogI2luY2x1ZGUgIlVzZXJTdHlsZVNoZWV0LmgiCi0jaW5j
bHVkZSA8cnVudGltZS9KU0NlbGxJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9TdHJ1Y3R1
cmVJbmxpbmVzLmg+CiAKICNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQogI2luY2x1
ZGUgIlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IuaCIKICNlbmRpZgogCiAjaWYgRU5BQkxF
KENPTlRFTlRfRVhURU5TSU9OUykKLSNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9uQ29tcGlsZXIu
aCIKLSNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuaCIKKyNpbmNsdWRlICJDb21w
aWxlZENvbnRlbnRFeHRlbnNpb24uaCIKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC02MiwzNiArNTMsMzMgQEAgVXNlckNvbnRlbnRDb250cm9sbGVyOjp+VXNlckNvbnRlbnRDb250
cgogewogfQogCi12b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkUGFnZShQYWdlJiBwYWdl
KQordm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OmZvckVhY2hVc2VyU2NyaXB0KGNvbnN0IHN0
ZDo6ZnVuY3Rpb248dm9pZChET01XcmFwcGVyV29ybGQmLCBjb25zdCBVc2VyU2NyaXB0Jik+JiBm
dW5jdG9yKSBjb25zdAogewotICAgIEFTU0VSVCghbV9wYWdlcy5jb250YWlucygmcGFnZSkpOwot
ICAgIG1fcGFnZXMuYWRkKCZwYWdlKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHdvcmxkQW5kVXNl
clNjcmlwdFZlY3RvciA6IG1fdXNlclNjcmlwdHMpIHsKKyAgICAgICAgYXV0byYgd29ybGQgPSAq
d29ybGRBbmRVc2VyU2NyaXB0VmVjdG9yLmtleS5nZXQoKTsKKyAgICAgICAgZm9yIChjb25zdCBh
dXRvJiB1c2VyU2NyaXB0IDogKndvcmxkQW5kVXNlclNjcmlwdFZlY3Rvci52YWx1ZSkKKyAgICAg
ICAgICAgIGZ1bmN0b3Iod29ybGQsICp1c2VyU2NyaXB0KTsKKyAgICB9CiB9CiAKLXZvaWQgVXNl
ckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVQYWdlKFBhZ2UmIHBhZ2UpCit2b2lkIFVzZXJDb250
ZW50Q29udHJvbGxlcjo6Zm9yRWFjaFVzZXJTdHlsZVNoZWV0KGNvbnN0IHN0ZDo6ZnVuY3Rpb248
dm9pZChjb25zdCBVc2VyU3R5bGVTaGVldCYpPiYgZnVuY3RvcikgY29uc3QKIHsKLSAgICBBU1NF
UlQobV9wYWdlcy5jb250YWlucygmcGFnZSkpOwotICAgIG1fcGFnZXMucmVtb3ZlKCZwYWdlKTsK
KyAgICBmb3IgKGF1dG8mIHN0eWxlU2hlZXRWZWN0b3IgOiBtX3VzZXJTdHlsZVNoZWV0cy52YWx1
ZXMoKSkgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHN0eWxlU2hlZXQgOiAqc3R5bGVTaGVl
dFZlY3RvcikKKyAgICAgICAgICAgIGZ1bmN0b3IoKnN0eWxlU2hlZXQpOworICAgIH0KIH0KIAog
dm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQoRE9NV3JhcHBlcldvcmxk
JiB3b3JsZCwgc3RkOjp1bmlxdWVfcHRyPFVzZXJTY3JpcHQ+IHVzZXJTY3JpcHQpCiB7Ci0gICAg
aWYgKCFtX3VzZXJTY3JpcHRzKQotICAgICAgICBtX3VzZXJTY3JpcHRzID0gc3RkOjptYWtlX3Vu
aXF1ZTxVc2VyU2NyaXB0TWFwPigpOwotCi0gICAgYXV0byYgc2NyaXB0c0luV29ybGQgPSBtX3Vz
ZXJTY3JpcHRzLT5hZGQoJndvcmxkLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgaWYg
KCFzY3JpcHRzSW5Xb3JsZCkKLSAgICAgICAgc2NyaXB0c0luV29ybGQgPSBzdGQ6Om1ha2VfdW5p
cXVlPFVzZXJTY3JpcHRWZWN0b3I+KCk7CisgICAgYXV0byYgc2NyaXB0c0luV29ybGQgPSBtX3Vz
ZXJTY3JpcHRzLmVuc3VyZSgmd29ybGQsIFsmXSB7IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFVz
ZXJTY3JpcHRWZWN0b3I+KCk7IH0pLml0ZXJhdG9yLT52YWx1ZTsKICAgICBzY3JpcHRzSW5Xb3Js
ZC0+YXBwZW5kKFdURk1vdmUodXNlclNjcmlwdCkpOwogfQogCiB2b2lkIFVzZXJDb250ZW50Q29u
dHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlwdChET01XcmFwcGVyV29ybGQmIHdvcmxkLCBjb25zdCBV
UkwmIHVybCkKIHsKLSAgICBpZiAoIW1fdXNlclNjcmlwdHMpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGF1dG8gaXQgPSBtX3VzZXJTY3JpcHRzLT5maW5kKCZ3b3JsZCk7Ci0gICAgaWYgKGl0ID09
IG1fdXNlclNjcmlwdHMtPmVuZCgpKQorICAgIGF1dG8gaXQgPSBtX3VzZXJTY3JpcHRzLmZpbmQo
JndvcmxkKTsKKyAgICBpZiAoaXQgPT0gbV91c2VyU2NyaXB0cy5lbmQoKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgYXV0byBzY3JpcHRzID0gaXQtPnZhbHVlLmdldCgpOwpAQCAtMTAxLDI1ICs4
OSwxNyBAQCB2b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclNjCiAgICAgfQog
CiAgICAgaWYgKHNjcmlwdHMtPmlzRW1wdHkoKSkKLSAgICAgICAgbV91c2VyU2NyaXB0cy0+cmVt
b3ZlKGl0KTsKKyAgICAgICAgbV91c2VyU2NyaXB0cy5yZW1vdmUoaXQpOwogfQogCiB2b2lkIFVz
ZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlwdHMoRE9NV3JhcHBlcldvcmxkJiB3
b3JsZCkKIHsKLSAgICBpZiAoIW1fdXNlclNjcmlwdHMpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fdXNlclNjcmlwdHMtPnJlbW92ZSgmd29ybGQpOworICAgIG1fdXNlclNjcmlwdHMucmVtb3Zl
KCZ3b3JsZCk7CiB9CiAKIHZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyU3R5bGVT
aGVldChET01XcmFwcGVyV29ybGQmIHdvcmxkLCBzdGQ6OnVuaXF1ZV9wdHI8VXNlclN0eWxlU2hl
ZXQ+IHVzZXJTdHlsZVNoZWV0LCBVc2VyU3R5bGVJbmplY3Rpb25UaW1lIGluamVjdGlvblRpbWUp
CiB7Ci0gICAgaWYgKCFtX3VzZXJTdHlsZVNoZWV0cykKLSAgICAgICAgbV91c2VyU3R5bGVTaGVl
dHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFVzZXJTdHlsZVNoZWV0TWFwPigpOwotCi0gICAgYXV0byYg
c3R5bGVTaGVldHNJbldvcmxkID0gbV91c2VyU3R5bGVTaGVldHMtPmFkZCgmd29ybGQsIG51bGxw
dHIpLml0ZXJhdG9yLT52YWx1ZTsKLSAgICBpZiAoIXN0eWxlU2hlZXRzSW5Xb3JsZCkKLSAgICAg
ICAgc3R5bGVTaGVldHNJbldvcmxkID0gc3RkOjptYWtlX3VuaXF1ZTxVc2VyU3R5bGVTaGVldFZl
Y3Rvcj4oKTsKKyAgICBhdXRvJiBzdHlsZVNoZWV0c0luV29ybGQgPSBtX3VzZXJTdHlsZVNoZWV0
cy5lbnN1cmUoJndvcmxkLCBbJl0geyByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxVc2VyU3R5bGVT
aGVldFZlY3Rvcj4oKTsgfSkuaXRlcmF0b3ItPnZhbHVlOwogICAgIHN0eWxlU2hlZXRzSW5Xb3Js
ZC0+YXBwZW5kKFdURk1vdmUodXNlclN0eWxlU2hlZXQpKTsKIAogICAgIGlmIChpbmplY3Rpb25U
aW1lID09IEluamVjdEluRXhpc3RpbmdEb2N1bWVudHMpCkBAIC0xMjgsMTEgKzEwOCw4IEBAIHZv
aWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyU3R5bGUKIAogdm9pZCBVc2VyQ29udGVu
dENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNoZWV0KERPTVdyYXBwZXJXb3JsZCYgd29ybGQs
IGNvbnN0IFVSTCYgdXJsKQogewotICAgIGlmICghbV91c2VyU3R5bGVTaGVldHMpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGF1dG8gaXQgPSBtX3VzZXJTdHlsZVNoZWV0cy0+ZmluZCgmd29ybGQp
OwotICAgIGlmIChpdCA9PSBtX3VzZXJTdHlsZVNoZWV0cy0+ZW5kKCkpCisgICAgYXV0byBpdCA9
IG1fdXNlclN0eWxlU2hlZXRzLmZpbmQoJndvcmxkKTsKKyAgICBpZiAoaXQgPT0gbV91c2VyU3R5
bGVTaGVldHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8mIHN0eWxlc2hlZXRz
ID0gKml0LT52YWx1ZTsKQEAgLTE0OSwxNyArMTI2LDE0IEBAIHZvaWQgVXNlckNvbnRlbnRDb250
cm9sbGVyOjpyZW1vdmVVc2VyU3QKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHN0eWxlc2hl
ZXRzLmlzRW1wdHkoKSkKLSAgICAgICAgbV91c2VyU3R5bGVTaGVldHMtPnJlbW92ZShpdCk7Cisg
ICAgICAgIG1fdXNlclN0eWxlU2hlZXRzLnJlbW92ZShpdCk7CiAKICAgICBpbnZhbGlkYXRlSW5q
ZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lc0luQWxsUGFnZXMoKTsKIH0KIAogdm9pZCBV
c2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNoZWV0cyhET01XcmFwcGVyV29y
bGQmIHdvcmxkKQogewotICAgIGlmICghbV91c2VyU3R5bGVTaGVldHMpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmICghbV91c2VyU3R5bGVTaGVldHMtPnJlbW92ZSgmd29ybGQpKQorICAgIGlm
ICghbV91c2VyU3R5bGVTaGVldHMucmVtb3ZlKCZ3b3JsZCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZUluQWxsRnJhbWVzSW5BbGxQYWdl
cygpOwpAQCAtMTY4LDk1ICsxNDIsNDAgQEAgdm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OnJl
bW92ZVVzZXJTdAogI2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCiB2b2lkIFVzZXJD
b250ZW50Q29udHJvbGxlcjo6YWRkVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcihVc2VyTWVz
c2FnZUhhbmRsZXJEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQogewotICAgIGlmICghbV91c2VyTWVz
c2FnZUhhbmRsZXJEZXNjcmlwdG9ycykKLSAgICAgICAgbV91c2VyTWVzc2FnZUhhbmRsZXJEZXNj
cmlwdG9ycyA9IHN0ZDo6bWFrZV91bmlxdWU8VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvck1h
cD4oKTsKLQotICAgIG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMtPmFkZChzdGQ6Om1h
a2VfcGFpcihkZXNjcmlwdG9yLm5hbWUoKSwgJmRlc2NyaXB0b3Iud29ybGQoKSksICZkZXNjcmlw
dG9yKTsKKyAgICBtX3VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzLmFkZChzdGQ6Om1ha2Vf
cGFpcihkZXNjcmlwdG9yLm5hbWUoKSwgJmRlc2NyaXB0b3Iud29ybGQoKSksICZkZXNjcmlwdG9y
KTsKIH0KIAogdm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJNZXNzYWdlSGFu
ZGxlckRlc2NyaXB0b3IoVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvciYgZGVzY3JpcHRvcikK
IHsKLSAgICBpZiAoIW1fdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMtPnJlbW92ZShzdGQ6
Om1ha2VfcGFpcihkZXNjcmlwdG9yLm5hbWUoKSwgJmRlc2NyaXB0b3Iud29ybGQoKSkpOworICAg
IG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMucmVtb3ZlKHN0ZDo6bWFrZV9wYWlyKGRl
c2NyaXB0b3IubmFtZSgpLCAmZGVzY3JpcHRvci53b3JsZCgpKSk7CiB9CiAjZW5kaWYKIAogI2lm
IEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiB2b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6
YWRkVXNlckNvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8Q29udGVu
dEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4gY29udGVudEV4dGVuc2lvbikK
IHsKLSAgICBpZiAoIW1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQpCi0gICAgICAgIG1fY29udGVu
dEV4dGVuc2lvbkJhY2tlbmQgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbnRlbnRFeHRlbnNpb25zOjpD
b250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ+KCk7Ci0gICAgCi0gICAgbV9jb250ZW50RXh0ZW5zaW9u
QmFja2VuZC0+YWRkQ29udGVudEV4dGVuc2lvbihuYW1lLCBjb250ZW50RXh0ZW5zaW9uKTsKKyAg
ICBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kLmFkZENvbnRlbnRFeHRlbnNpb24obmFtZSwgY29u
dGVudEV4dGVuc2lvbik7CiB9CiAKIHZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVV
c2VyQ29udGVudEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgaWYgKCFtX2Nv
bnRlbnRFeHRlbnNpb25CYWNrZW5kKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRlbnRF
eHRlbnNpb25CYWNrZW5kLT5yZW1vdmVDb250ZW50RXh0ZW5zaW9uKG5hbWUpOworICAgIG1fY29u
dGVudEV4dGVuc2lvbkJhY2tlbmQucmVtb3ZlQ29udGVudEV4dGVuc2lvbihuYW1lKTsKIH0KIAog
dm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZUFsbFVzZXJDb250ZW50RXh0ZW5zaW9u
cygpCiB7Ci0gICAgaWYgKCFtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kLT5yZW1vdmVBbGxDb250ZW50RXh0
ZW5zaW9ucygpOwotfQotCi1zdGF0aWMgYm9vbCBjb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQoY29u
c3QgRG9jdW1lbnRMb2FkZXImIGRvY3VtZW50TG9hZGVyKQotewotICAgIGlmIChhdXRvIGZyYW1l
ID0gZG9jdW1lbnRMb2FkZXIuZnJhbWUoKSkgewotICAgICAgICBpZiAoZnJhbWUtPmlzTWFpbkZy
YW1lKCkpCi0gICAgICAgICAgICByZXR1cm4gZG9jdW1lbnRMb2FkZXIudXNlckNvbnRlbnRFeHRl
bnNpb25zRW5hYmxlZCgpOwotICAgICAgICBpZiAoYXV0byBtYWluRG9jdW1lbnRMb2FkZXIgPSBm
cmFtZS0+bWFpbkZyYW1lKCkubG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkKLSAgICAgICAgICAg
IHJldHVybiBtYWluRG9jdW1lbnRMb2FkZXItPnVzZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQo
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSAgICAKLUNvbnRlbnRFeHRlbnNpb25z
OjpCbG9ja2VkU3RhdHVzIFVzZXJDb250ZW50Q29udHJvbGxlcjo6cHJvY2Vzc0NvbnRlbnRFeHRl
bnNpb25SdWxlc0ZvckxvYWQoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZVR5cGUg
cmVzb3VyY2VUeXBlLCBEb2N1bWVudExvYWRlciYgaW5pdGlhdGluZ0RvY3VtZW50TG9hZGVyKQot
ewotICAgIGlmICghbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZCkKLSAgICAgICAgcmV0dXJuIENv
bnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzOjpOb3RCbG9ja2VkOwotCi0gICAgaWYgKCFj
b250ZW50RXh0ZW5zaW9uc0VuYWJsZWQoaW5pdGlhdGluZ0RvY3VtZW50TG9hZGVyKSkKLSAgICAg
ICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzOjpOb3RCbG9ja2VkOwot
Ci0gICAgcmV0dXJuIG1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQtPnByb2Nlc3NDb250ZW50RXh0
ZW5zaW9uUnVsZXNGb3JMb2FkKHJlcXVlc3QsIHJlc291cmNlVHlwZSwgaW5pdGlhdGluZ0RvY3Vt
ZW50TG9hZGVyKTsKLX0KLQotVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb24+IFVzZXJD
b250ZW50Q29udHJvbGxlcjo6YWN0aW9uc0ZvclJlc291cmNlTG9hZChjb25zdCBSZXNvdXJjZUxv
YWRJbmZvJiByZXNvdXJjZUxvYWRJbmZvLCBEb2N1bWVudExvYWRlciYgaW5pdGlhdGluZ0RvY3Vt
ZW50TG9hZGVyKQotewotICAgIGlmICghbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZCkKLSAgICAg
ICAgcmV0dXJuIFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uPigpOwotICAgIAotICAg
IGlmICghY29udGVudEV4dGVuc2lvbnNFbmFibGVkKGluaXRpYXRpbmdEb2N1bWVudExvYWRlcikp
Ci0gICAgICAgIHJldHVybiBWZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbj4oKTsKLQot
ICAgIHJldHVybiBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kLT5hY3Rpb25zRm9yUmVzb3VyY2VM
b2FkKHJlc291cmNlTG9hZEluZm8pOworICAgIG1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQucmVt
b3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKTsKIH0KICNlbmRpZgogCiB2b2lkIFVzZXJDb250ZW50
Q29udHJvbGxlcjo6cmVtb3ZlQWxsVXNlckNvbnRlbnQoKQogewotICAgIG1fdXNlclNjcmlwdHMg
PSBudWxscHRyOworICAgIG1fdXNlclNjcmlwdHMuY2xlYXIoKTsKIAotICAgIGlmIChtX3VzZXJT
dHlsZVNoZWV0cykgewotICAgICAgICBtX3VzZXJTdHlsZVNoZWV0cyA9IG51bGxwdHI7CisgICAg
aWYgKCFtX3VzZXJTdHlsZVNoZWV0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV91c2VyU3R5bGVT
aGVldHMuY2xlYXIoKTsKICAgICAgICAgaW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hl
SW5BbGxGcmFtZXNJbkFsbFBhZ2VzKCk7CiAgICAgfQogfQogCi12b2lkIFVzZXJDb250ZW50Q29u
dHJvbGxlcjo6aW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlSW5BbGxGcmFtZXNJbkFs
bFBhZ2VzKCkKLXsKLSAgICBmb3IgKGF1dG8mIHBhZ2UgOiBtX3BhZ2VzKQotICAgICAgICBwYWdl
LT5pbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lcygpOwotfQotCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250
ZW50Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNv
bnRlbnRDb250cm9sbGVyLmgJKHJldmlzaW9uIDE5Nzg5NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvVXNlckNvbnRlbnRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDU4ICsyNiwx
OSBAQAogI2lmbmRlZiBVc2VyQ29udGVudENvbnRyb2xsZXJfaAogI2RlZmluZSBVc2VyQ29udGVu
dENvbnRyb2xsZXJfaAogCi0jaW5jbHVkZSAiVXNlclNjcmlwdFR5cGVzLmgiCi0jaW5jbHVkZSAi
VXNlclN0eWxlU2hlZXRUeXBlcy5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLSNpZiBFTkFC
TEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQotI2luY2x1ZGUgIlVzZXJNZXNzYWdlSGFuZGxlckRl
c2NyaXB0b3JUeXBlcy5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05T
KQotI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25BY3Rpb25zLmgiCi0jZW5kaWYKKyNpbmNsdWRl
ICJVc2VyQ29udGVudFByb3ZpZGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3Mg
RE9NV3JhcHBlcldvcmxkOwotY2xhc3MgRG9jdW1lbnRMb2FkZXI7Ci1jbGFzcyBQYWdlOwotY2xh
c3MgUmVzb3VyY2VSZXF1ZXN0OwotY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOwotY2xhc3MgVVJM
OwotY2xhc3MgVXNlclNjcmlwdDsKLWNsYXNzIFVzZXJTdHlsZVNoZWV0OwotY2xhc3MgVXNlck1l
c3NhZ2VIYW5kbGVyRGVzY3JpcHRvcjsKLQotZW51bSBjbGFzcyBSZXNvdXJjZVR5cGUgOiB1aW50
MTZfdDsKLQotc3RydWN0IFJlc291cmNlTG9hZEluZm87Ci0KLW5hbWVzcGFjZSBDb250ZW50RXh0
ZW5zaW9ucyB7Ci1jbGFzcyBDb21waWxlZENvbnRlbnRFeHRlbnNpb247Ci1jbGFzcyBDb250ZW50
RXh0ZW5zaW9uc0JhY2tlbmQ7Ci1zdHJ1Y3QgQWN0aW9uOwotfQotCi1jbGFzcyBVc2VyQ29udGVu
dENvbnRyb2xsZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxVc2VyQ29udGVudENvbnRyb2xsZXI+IHsK
K2NsYXNzIFVzZXJDb250ZW50Q29udHJvbGxlciBmaW5hbCA6IHB1YmxpYyBVc2VyQ29udGVudFBy
b3ZpZGVyIHsKIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFVzZXJDb250
ZW50Q29udHJvbGxlcj4gY3JlYXRlKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgflVzZXJDb250ZW50
Q29udHJvbGxlcigpOwogCi0gICAgdm9pZCBhZGRQYWdlKFBhZ2UmKTsKLSAgICB2b2lkIHJlbW92
ZVBhZ2UoUGFnZSYpOwotCi0gICAgY29uc3QgVXNlclNjcmlwdE1hcCogdXNlclNjcmlwdHMoKSBj
b25zdCB7IHJldHVybiBtX3VzZXJTY3JpcHRzLmdldCgpOyB9Ci0KICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGFkZFVzZXJTY3JpcHQoRE9NV3JhcHBlcldvcmxkJiwgc3RkOjp1bmlxdWVfcHRyPFVz
ZXJTY3JpcHQ+KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVVzZXJTY3JpcHQoRE9N
V3JhcHBlcldvcmxkJiwgY29uc3QgVVJMJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1v
dmVVc2VyU2NyaXB0cyhET01XcmFwcGVyV29ybGQmKTsKIAotICAgIGNvbnN0IFVzZXJTdHlsZVNo
ZWV0TWFwKiB1c2VyU3R5bGVTaGVldHMoKSBjb25zdCB7IHJldHVybiBtX3VzZXJTdHlsZVNoZWV0
cy5nZXQoKTsgfQotCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRVc2VyU3R5bGVTaGVldChE
T01XcmFwcGVyV29ybGQmLCBzdGQ6OnVuaXF1ZV9wdHI8VXNlclN0eWxlU2hlZXQ+LCBVc2VyU3R5
bGVJbmplY3Rpb25UaW1lKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVVzZXJTdHls
ZVNoZWV0KERPTVdyYXBwZXJXb3JsZCYsIGNvbnN0IFVSTCYpOwogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgcmVtb3ZlVXNlclN0eWxlU2hlZXRzKERPTVdyYXBwZXJXb3JsZCYpOwpAQCAtODUsOCAr
NDYsNiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVBbGxVc2VyQ29u
dGVudCgpOwogCiAjaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKLSAgICBjb25zdCBV
c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yTWFwKiB1c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlw
dG9ycygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMuZ2V0
KCk7IH0KLQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkVXNlck1lc3NhZ2VIYW5kbGVyRGVz
Y3JpcHRvcihVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yJik7CiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCByZW1vdmVVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yKFVzZXJNZXNzYWdlSGFu
ZGxlckRlc2NyaXB0b3ImKTsKICNlbmRpZgpAQCAtOTUsMjUgKzU0LDI4IEBAIHB1YmxpYzoKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZFVzZXJDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgUmVmUHRyPENvbnRlbnRFeHRlbnNpb25zOjpDb21waWxlZENvbnRlbnRFeHRlbnNp
b24+KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9u
KGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVBbGxV
c2VyQ29udGVudEV4dGVuc2lvbnMoKTsKLQotICAgIENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2Vk
U3RhdHVzIHByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKFJlc291cmNlUmVxdWVz
dCYsIFJlc291cmNlVHlwZSwgRG9jdW1lbnRMb2FkZXImIGluaXRpYXRpbmdEb2N1bWVudExvYWRl
cik7Ci0gICAgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb24+IGFjdGlvbnNGb3JSZXNv
dXJjZUxvYWQoY29uc3QgUmVzb3VyY2VMb2FkSW5mbyYsIERvY3VtZW50TG9hZGVyJiBpbml0aWF0
aW5nRG9jdW1lbnRMb2FkZXIpOwogI2VuZGlmCiAKIHByaXZhdGU6CiAgICAgVXNlckNvbnRlbnRD
b250cm9sbGVyKCk7CiAKLSAgICB2b2lkIGludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNo
ZUluQWxsRnJhbWVzSW5BbGxQYWdlcygpOwotCi0gICAgSGFzaFNldDxQYWdlKj4gbV9wYWdlczsK
KyAgICAvLyBVc2VyQ29udGVudFByb3ZpZGVyCisgICAgdmlydHVhbCB2b2lkIGZvckVhY2hVc2Vy
U2NyaXB0KGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChET01XcmFwcGVyV29ybGQmLCBjb25zdCBV
c2VyU2NyaXB0Jik+JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGZvckVhY2hV
c2VyU3R5bGVTaGVldChjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgVXNlclN0eWxlU2hl
ZXQmKT4mKSBjb25zdCBvdmVycmlkZTsKKyNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJT
KQorICAgIGNvbnN0IFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JNYXAmIHVzZXJNZXNzYWdl
SGFuZGxlckRlc2NyaXB0b3JzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV91c2VyTWVzc2Fn
ZUhhbmRsZXJEZXNjcmlwdG9yczsgfQorI2VuZGlmCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5T
SU9OUykKKyAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kJiB1
c2VyQ29udGVudEV4dGVuc2lvbkJhY2tlbmQoKSBvdmVycmlkZSB7IHJldHVybiBtX2NvbnRlbnRF
eHRlbnNpb25CYWNrZW5kOyB9CisjZW5kaWYKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxVc2VyU2Ny
aXB0TWFwPiBtX3VzZXJTY3JpcHRzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxVc2VyU3R5bGVTaGVl
dE1hcD4gbV91c2VyU3R5bGVTaGVldHM7CisgICAgVXNlclNjcmlwdE1hcCBtX3VzZXJTY3JpcHRz
OworICAgIFVzZXJTdHlsZVNoZWV0TWFwIG1fdXNlclN0eWxlU2hlZXRzOwogI2lmIEVOQUJMRShV
U0VSX01FU1NBR0VfSEFORExFUlMpCi0gICAgc3RkOjp1bmlxdWVfcHRyPFVzZXJNZXNzYWdlSGFu
ZGxlckRlc2NyaXB0b3JNYXA+IG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnM7CisgICAg
VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvck1hcCBtX3VzZXJNZXNzYWdlSGFuZGxlckRlc2Ny
aXB0b3JzOwogI2VuZGlmCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZD4g
bV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZDsKKyAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVu
dEV4dGVuc2lvbnNCYWNrZW5kIG1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQ7CiAjZW5kaWYKIH07
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnRQcm92aWRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudFByb3ZpZGVyLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnRQcm92aWRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVXNlckNvbnRlbnRQcm92aWRlci5oIgorCisjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIk1h
aW5GcmFtZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCisjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmgiCisjaW5jbHVkZSAi
Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitVc2VyQ29udGVudFByb3ZpZGVyOjpVc2VyQ29udGVudFByb3ZpZGVyKCkKK3sKK30KKwor
VXNlckNvbnRlbnRQcm92aWRlcjo6flVzZXJDb250ZW50UHJvdmlkZXIoKQoreworICAgIEFTU0VS
VChtX3BhZ2VzLmlzRW1wdHkoKSk7Cit9CisKK3ZvaWQgVXNlckNvbnRlbnRQcm92aWRlcjo6YWRk
UGFnZShQYWdlJiBwYWdlKQoreworICAgIEFTU0VSVCghbV9wYWdlcy5jb250YWlucygmcGFnZSkp
OworCisgICAgbV9wYWdlcy5hZGQoJnBhZ2UpOworfQorCit2b2lkIFVzZXJDb250ZW50UHJvdmlk
ZXI6OnJlbW92ZVBhZ2UoUGFnZSYgcGFnZSkKK3sKKyAgICBBU1NFUlQobV9wYWdlcy5jb250YWlu
cygmcGFnZSkpOworCisgICAgbV9wYWdlcy5yZW1vdmUoJnBhZ2UpOworfQorCit2b2lkIFVzZXJD
b250ZW50UHJvdmlkZXI6OmludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZUluQWxsRnJh
bWVzSW5BbGxQYWdlcygpCit7CisgICAgZm9yIChhdXRvJiBwYWdlIDogbV9wYWdlcykKKyAgICAg
ICAgcGFnZS0+aW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlSW5BbGxGcmFtZXMoKTsK
K30KKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCitzdGF0aWMgYm9vbCBjb250ZW50
RXh0ZW5zaW9uc0VuYWJsZWQoY29uc3QgRG9jdW1lbnRMb2FkZXImIGRvY3VtZW50TG9hZGVyKQor
eworICAgIGlmIChhdXRvIGZyYW1lID0gZG9jdW1lbnRMb2FkZXIuZnJhbWUoKSkgeworICAgICAg
ICBpZiAoZnJhbWUtPmlzTWFpbkZyYW1lKCkpCisgICAgICAgICAgICByZXR1cm4gZG9jdW1lbnRM
b2FkZXIudXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZCgpOworICAgICAgICBpZiAoYXV0byBt
YWluRG9jdW1lbnRMb2FkZXIgPSBmcmFtZS0+bWFpbkZyYW1lKCkubG9hZGVyKCkuZG9jdW1lbnRM
b2FkZXIoKSkKKyAgICAgICAgICAgIHJldHVybiBtYWluRG9jdW1lbnRMb2FkZXItPnVzZXJDb250
ZW50RXh0ZW5zaW9uc0VuYWJsZWQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyAg
ICAKK0NvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzIFVzZXJDb250ZW50UHJvdmlkZXI6
OnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgUmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSwgRG9jdW1lbnRMb2FkZXImIGluaXRpYXRp
bmdEb2N1bWVudExvYWRlcikKK3sKKyAgICBpZiAoIWNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZChp
bml0aWF0aW5nRG9jdW1lbnRMb2FkZXIpKQorICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lv
bnM6OkJsb2NrZWRTdGF0dXM6Ok5vdEJsb2NrZWQ7CisKKyAgICByZXR1cm4gdXNlckNvbnRlbnRF
eHRlbnNpb25CYWNrZW5kKCkucHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQocmVx
dWVzdCwgcmVzb3VyY2VUeXBlLCBpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIpOworfQorCitWZWN0
b3I8Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbj4gVXNlckNvbnRlbnRQcm92aWRlcjo6YWN0aW9u
c0ZvclJlc291cmNlTG9hZChjb25zdCBSZXNvdXJjZUxvYWRJbmZvJiByZXNvdXJjZUxvYWRJbmZv
LCBEb2N1bWVudExvYWRlciYgaW5pdGlhdGluZ0RvY3VtZW50TG9hZGVyKQoreworICAgIGlmICgh
Y29udGVudEV4dGVuc2lvbnNFbmFibGVkKGluaXRpYXRpbmdEb2N1bWVudExvYWRlcikpCisgICAg
ICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gdXNlckNvbnRlbnRFeHRlbnNpb25CYWNrZW5k
KCkuYWN0aW9uc0ZvclJlc291cmNlTG9hZChyZXNvdXJjZUxvYWRJbmZvKTsKK30KKyNlbmRpZgor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJD
b250ZW50UHJvdmlkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJD
b250ZW50UHJvdmlkZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNl
ckNvbnRlbnRQcm92aWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFVzZXJDb250ZW50UHJvdmlkZXJfaAorI2RlZmluZSBVc2VyQ29udGVu
dFByb3ZpZGVyX2gKKworI2luY2x1ZGUgIlVzZXJTY3JpcHRUeXBlcy5oIgorI2luY2x1ZGUgIlVz
ZXJTdHlsZVNoZWV0VHlwZXMuaCIKKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorCisjaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKKyNpbmNsdWRl
ICJVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yVHlwZXMuaCIKKyNlbmRpZgorCisjaWYgRU5B
QkxFKENPTlRFTlRfRVhURU5TSU9OUykKKyNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9uQWN0aW9u
cy5oIgorI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5oIgorI2VuZGlmCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRG9jdW1lbnRMb2FkZXI7CitjbGFzcyBQYWdlOwor
Y2xhc3MgUmVzb3VyY2VSZXF1ZXN0OworY2xhc3MgVVJMOworCitlbnVtIGNsYXNzIFJlc291cmNl
VHlwZSA6IHVpbnQxNl90OworCitzdHJ1Y3QgUmVzb3VyY2VMb2FkSW5mbzsKKworbmFtZXNwYWNl
IENvbnRlbnRFeHRlbnNpb25zIHsKK2NsYXNzIENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDsKK3N0
cnVjdCBBY3Rpb247Cit9CisKK2NsYXNzIFVzZXJDb250ZW50UHJvdmlkZXIgOiBwdWJsaWMgUmVm
Q291bnRlZDxVc2VyQ29udGVudFByb3ZpZGVyPiB7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBP
UlQgVXNlckNvbnRlbnRQcm92aWRlcigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflVz
ZXJDb250ZW50UHJvdmlkZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBmb3JFYWNoVXNlclNjcmlw
dChjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQoRE9NV3JhcHBlcldvcmxkJiwgY29uc3QgVXNlclNj
cmlwdCYpPiYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZm9yRWFjaFVzZXJTdHlsZVNo
ZWV0KGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBVc2VyU3R5bGVTaGVldCYpPiYpIGNv
bnN0ID0gMDsKKworI2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCisgICAgdmlydHVh
bCBjb25zdCBVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yTWFwJiB1c2VyTWVzc2FnZUhhbmRs
ZXJEZXNjcmlwdG9ycygpIGNvbnN0ID0gMDsKKyNlbmRpZgorCisjaWYgRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKKyAgICB2aXJ0dWFsIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5z
aW9uc0JhY2tlbmQmIHVzZXJDb250ZW50RXh0ZW5zaW9uQmFja2VuZCgpID0gMDsKKyNlbmRpZgor
CisgICAgdm9pZCBhZGRQYWdlKFBhZ2UmKTsKKyAgICB2b2lkIHJlbW92ZVBhZ2UoUGFnZSYpOwor
CisKKyAgICAvLyBGSVhNRTogVGhlc2UgZG9uJ3QgcmVhbGx5IGJlbG9uZyBoZXJlLiAgVGhleSBz
aG91bGQgcHJvYmFibHkgYnVuZGxlZCB1cCBpbiB0aGUgQ29udGVudEV4dGVuc2lvbnNCYWNrZW5k
CisgICAgLy8gd2hpY2ggc2hvdWxkIGFsd2F5cyBleGlzdC4KKyAgICBDb250ZW50RXh0ZW5zaW9u
czo6QmxvY2tlZFN0YXR1cyBwcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9yTG9hZChSZXNv
dXJjZVJlcXVlc3QmLCBSZXNvdXJjZVR5cGUsIERvY3VtZW50TG9hZGVyJiBpbml0aWF0aW5nRG9j
dW1lbnRMb2FkZXIpOworICAgIFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uPiBhY3Rp
b25zRm9yUmVzb3VyY2VMb2FkKGNvbnN0IFJlc291cmNlTG9hZEluZm8mLCBEb2N1bWVudExvYWRl
ciYgaW5pdGlhdGluZ0RvY3VtZW50TG9hZGVyKTsKKworcHJvdGVjdGVkOgorICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgaW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlSW5BbGxGcmFtZXNJ
bkFsbFBhZ2VzKCk7CisKK3ByaXZhdGU6CisgICAgSGFzaFNldDxQYWdlKj4gbV9wYWdlczsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVzZXJDb250ZW50UHJvdmlk
ZXJfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlw
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyTWVzc2FnZUhhbmRs
ZXJEZXNjcmlwdG9yLmgJKHJldmlzaW9uIDE5Nzg5NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw4ICs1
NCw4IEBAIHB1YmxpYzoKICAgICB9CiAgICAgV0VCQ09SRV9FWFBPUlQgflVzZXJNZXNzYWdlSGFu
ZGxlckRlc2NyaXB0b3IoKTsKIAotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSgpOwotICAg
IERPTVdyYXBwZXJXb3JsZCYgd29ybGQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWUoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBET01XcmFwcGVyV29ybGQmIHdv
cmxkKCk7CiAKICAgICBDbGllbnQqIGNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9
CiAgICAgdm9pZCBpbnZhbGlkYXRlQ2xpZW50KCkgeyBtX2NsaWVudCA9IG51bGxwdHI7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyTWVzc2FnZUhhbmRsZXJzTmFt
ZXNwYWNlLmNwcAkocmV2aXNpb24gMTk3ODk0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Vc2Vy
TWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTUgKzUz
LDcgQEAgVXNlck1lc3NhZ2VIYW5kbGVyKiBVc2VyTWVzc2FnZUhhbmRsZXJzTgogICAgIGlmICgh
cGFnZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCi0gICAgY29uc3QgYXV0byogdXNl
ckNvbnRlbnRDb250cm9sbGVyID0gcGFnZS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCk7Ci0gICAg
aWYgKCF1c2VyQ29udGVudENvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgY29uc3QgYXV0byogdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMgPSB1c2VyQ29udGVu
dENvbnRyb2xsZXItPnVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzKCk7Ci0gICAgaWYgKCF1
c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBSZWZQdHI8VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcj4gZGVzY3JpcHRvciA9IHVz
ZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzLT5nZXQoc3RkOjptYWtlX3BhaXIobmFtZSwgJndv
cmxkKSk7CisgICAgUmVmUHRyPFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3I+IGRlc2NyaXB0
b3IgPSBwYWdlLT51c2VyQ29udGVudFByb3ZpZGVyKCkudXNlck1lc3NhZ2VIYW5kbGVyRGVzY3Jp
cHRvcnMoKS5nZXQoc3RkOjptYWtlX3BhaXIobmFtZSwgJndvcmxkKSk7CiAgICAgaWYgKCFkZXNj
cmlwdG9yKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApJbmRleDogU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNp
b24gMTk3ODk0KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTE2IEBACisyMDE2LTAzLTA4ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgQWRkIGEgYmFzZVVSTCBwYXJhbWV0ZXIgdG8gX1dLVXNlclN0eWxlU2hlZXQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTIxOQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gTW92ZXMg
dG8gYSBtb2RlbCBmb3IgdXNlciBjb250ZW50IHdoZXJlIGluc3RlYWQgb2YgdXNpbmcgYSBXZWJD
b3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXIKKyAgICAgICAgICBvYmplY3QsIHdlIGltcGxlbWVu
dCB0aGUgbmV3IFdlYkNvcmU6OlVzZXJDb250ZW50UHJvdmlkZXIgaW50ZXJmYWNlIChvbiB0aGUg
ZXhpc3RpbmcgCisgICAgICAgICAgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyIG9iamVjdCkuCisg
ICAgICAgIC0gVXNlcyB0aGlzIHRvIG1haW50YWluIG1hcHMgb2YgVXNlclN0eWxlc1NoZWV0cyBh
bmQgVXNlclNjcmlwdHMgYWxvbmcgd2l0aCB0aGVpciBpZGVudGlmaWVycywKKyAgICAgICAgICBm
cmVlaW5nIHVwIHRoZSBVUkwsIHdoaWNoIGhhZCBiZWVuIGFjdGluZyBhcyB0aGUgaWRlbnRpZmll
ciwgdG8gYmUgdXNlZCBhcyB0aGUgYmFzZVVSTCB3aGljaAorICAgICAgICAgIHdhcyB3aGF0IGl0
IHdhcyBpbnRlbmRlZCBmb3IuCisgICAgICAgIC0gQWRkcyBhIGJhc2VVUkwgcHJvcGVydHkgdG8g
X1dLVXNlclN0eWxlU2hlZXQuCisKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgIEFkZCBuZXcgZmlsZXMuCisKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdC9tZXNzYWdlcy5weToKKyAgICAgICAgKGhlYWRlcnNfZm9yX3R5cGUpOgorICAgICAgICBB
ZGQgc3VwcG9ydCBmb3Igc2VuZGluZyBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMu
CisKKyAgICAgICAgKiBTaGFyZWQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJTY3JpcHREYXRhOjplbmNvZGUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJVc2VyU2NyaXB0RGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVXNlclN0eWxlU2hlZXREYXRhOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJVc2VyU3R5bGVTaGVldERhdGE6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYlVzZXJD
b250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oOiBBZGRlZC4KKyAgICAgICAgQWRkIGhlbHBlciB0
eXBlcyBmb3Igc2VuZGluZyB1c2VyIGNvbnRlbnQgb3ZlciBJUEMuCisKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0FQSVVzZXJTY3JpcHQuY3BwOgorICAgICAgICAoQVBJOjpVc2VyU2NyaXB0Ojpn
ZW5lcmF0ZVVuaXF1ZVVSTCk6CisgICAgICAgIChBUEk6OlVzZXJTY3JpcHQ6OlVzZXJTY3JpcHQp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlclNjcmlwdC5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQVBJVXNlclN0eWxlU2hlZXQuY3BwOgorICAgICAgICAoQVBJOjpVc2VyU3R5
bGVTaGVldDo6Z2VuZXJhdGVVbmlxdWVVUkwpOgorICAgICAgICAoQVBJOjpVc2VyU3R5bGVTaGVl
dDo6VXNlclN0eWxlU2hlZXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlclN0eWxl
U2hlZXQuaDoKKyAgICAgICAgQWRkIGlkZW50aWZpZXJzIGZvciB0cmFja2luZyBhY3Jvc3MgcHJv
Y2Vzc2VzLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyU3R5bGVTaGVl
dC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlclN0eWxlU2hlZXQubW06
CisgICAgICAgICgtW19XS1VzZXJTdHlsZVNoZWV0IGluaXRXaXRoU291cmNlOmZvck1haW5GcmFt
ZU9ubHk6bGVnYWN5V2hpdGVsaXN0OmxlZ2FjeUJsYWNrbGlzdDpiYXNlVVJMOnVzZXJDb250ZW50
V29ybGQ6XSk6CisgICAgICAgICgtW19XS1VzZXJTdHlsZVNoZWV0IGJhc2VVUkxdKToKKyAgICAg
ICAgQWRkIG5ldyBpbml0aWFsaXplciB3aGljaCB0YWtlcyBhIGJhc2VVUkwgYXMgd2VsbCBhcyBh
biBhY2Nlc3NvciBmb3IgdGhlIGJhc2VVUkwuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvVXNlckNv
bnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6YWRkUHJvY2Vzcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjphZGRVc2VyU2NyaXB0KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92ZVVzZXJT
Y3JpcHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6
YWRkVXNlclN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRy
b2xsZXJQcm94eTo6cmVtb3ZlVXNlclN0eWxlU2hlZXQpOgorICAgICAgICBQYXNzIGlkZW50aWZp
ZXJzIGFzIHdlbGwgYXMgdXNlciBjb250ZW50LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVk
QnVuZGxlOjphZGRVc2VyU2NyaXB0KToKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGU6
OmFkZFVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAgTW92ZSB1c2VyIGNvbnRlbnQgaW4gdmlhIG1v
dmUgc2VtYW50aWNzIHJhdGhlciB0aGFuIHVzaW5nIGEgdW5pcXVlX3B0ci4KKworICAgICAgICAo
V2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6cmVtb3ZlVXNlclNjcmlwdCk6CisgICAgICAgIChXZWJL
aXQ6OkluamVjdGVkQnVuZGxlOjpyZW1vdmVVc2VyU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJL
aXQ6OkluamVjdGVkQnVuZGxlOjpyZW1vdmVVc2VyU2NyaXB0cyk6CisgICAgICAgIChXZWJLaXQ6
OkluamVjdGVkQnVuZGxlOjpyZW1vdmVVc2VyU3R5bGVTaGVldHMpOgorICAgICAgICAoV2ViS2l0
OjpJbmplY3RlZEJ1bmRsZTo6cmVtb3ZlQWxsVXNlckNvbnRlbnQpOgorICAgICAgICBVcGRhdGUg
Zm9yIG5ldyBmdW5jdGlvbiBzaWduYXR1cmVzLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9Vc2Vy
Q29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcik6CisgICAg
ICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6fldlYlVzZXJDb250ZW50Q29u
dHJvbGxlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRk
VXNlckNvbnRlbnRXb3JsZHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRy
b2xsZXI6OnJlbW92ZVVzZXJDb250ZW50V29ybGRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0cyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlwdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxsVXNlclNjcmlwdHMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNoZWV0
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNl
clN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6
OnJlbW92ZUFsbFVzZXJTdHlsZVNoZWV0cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250
ZW50Q29udHJvbGxlcjo6YWRkVXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVycyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlwdE1lc3NhZ2VI
YW5kbGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRV
c2VyQ29udGVudEV4dGVuc2lvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENv
bnRyb2xsZXI6OnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVBbGxVc2VyQ29udGVudEV4dGVuc2lvbnMp
OgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTY3Jp
cHRJbnRlcm5hbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6
YWRkVXNlclNjcmlwdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxl
cjo6cmVtb3ZlVXNlclNjcmlwdFdpdGhVUkwpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTY3JpcHRJbnRlcm5hbCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlwdHMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNoZWV0SW50
ZXJuYWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVz
ZXJTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVy
OjpyZW1vdmVVc2VyU3R5bGVTaGVldFdpdGhVUkwpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNoZWV0SW50ZXJuYWwpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNoZWV0
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxs
VXNlckNvbnRlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6
OmZvckVhY2hVc2VyU2NyaXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250
cm9sbGVyOjpmb3JFYWNoVXNlclN0eWxlU2hlZXQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvVXNl
ckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLmg6CisgICAgICAgICogV2ViUHJvY2Vz
cy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIubWVzc2FnZXMuaW46CisgICAg
ICAgIENvbnZlcnQgdG8gaW5oZXJpdGluZyBmcm9tIFVzZXJDb250ZW50UHJvdmlkZXIsIHJhdGhl
ciB0aGFuIGNvbnRhaW5pbmcgYSBVc2VyQ29udGVudENvbnRyb2xsZXIuCisgICAgICAgIFRoaXMg
bWVhbnMgYWRkaW5nIHRoZSBzdG9yYWdlIGZvciB0aGUgdXNlciBjb250ZW50LCB3aGljaCBoYXMg
YmVlbiBzaW1wbGlmaWVkIHRvIGF2b2lkIHVzaW5nCisgICAgICAgIHVuaXF1ZV9wdHJzLgorCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjphZGRVc2VyU2NyaXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6YWRk
VXNlclN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpyZW1vdmVBbGxVc2Vy
Q29udGVudCk6CisgICAgICAgIFVwZGF0ZSB0byBjYWxsIHRoZSBXZWJVc2VyQ29udGVudENvbnRy
b2xsZXIsIHJhdGhlciB0aGFuIGdvaW5nIHRvIHRoZSBVc2VyQ29udGVudENvbnRyb2xsZXIsIHdo
aWNoCisgICAgICAgIG5vIGxvbmdlciBleGlzdHMuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlR3Jv
dXBQcm94eTo6dXNlckNvbnRlbnRDb250cm9sbGVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuaDoKKyAgICAgICAgUmV0dXJuIHRoZSBXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXIgcmF0aGVyIHRoYW4gb2xkIFVzZXJDb250ZW50Q29udHJvbGxlci4KKwog
MjAxNi0wMy0wOSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAg
ICBIYW5kbGluZyAnYWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMnIG9uIFdLV2ViVmll
d0NvbmZpZ3VyYXRpb24gY2F1c2VzIHRlc3QgYnJlYWthZ2UKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CShyZXZpc2lvbiAxOTc4OTQpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQkod29ya2luZyBjb3B5KQpAQCAtMzc4
LDYgKzM3OCw4IEBAIGRlZiBoZWFkZXJzX2Zvcl90eXBlKHR5cGUpOgogICAgICAgICAnV2ViS2l0
OjpXZWJUb3VjaEV2ZW50JzogWyciV2ViRXZlbnQuaCInXSwKICAgICAgICAgJ1dlYktpdDo6V2Vi
V2hlZWxFdmVudCc6IFsnIldlYkV2ZW50LmgiJ10sCiAgICAgICAgICdXZWJLaXQ6OldlYlNjcmlw
dE1lc3NhZ2VIYW5kbGVySGFuZGxlJzogWyciV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIuaCInXSwK
KyAgICAgICAgJ3N0cnVjdCBXZWJLaXQ6OldlYlVzZXJTY3JpcHREYXRhJzogWyciV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmgiJ10sCisgICAgICAgICdzdHJ1Y3QgV2ViS2l0OjpX
ZWJVc2VyU3R5bGVTaGVldERhdGEnOiBbJyJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlw
ZXMuaCInXSwKICAgICAgICAgJ3N0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQn
OiBbJzxjaHJvbm8+J10sCiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJVc2VyQ29udGVudENvbnRyb2xs
ZXJEYXRhVHlwZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyRGF0YVR5cGVzLmgiCisKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgV2ViVXNlclNjcmlwdERhdGE6OmVuY29kZShJUEM6
OkFyZ3VtZW50RW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IGlkZW50
aWZpZXI7CisgICAgZW5jb2RlciA8PCB3b3JsZElkZW50aWZpZXI7CisgICAgZW5jb2RlciA8PCB1
c2VyU2NyaXB0OworfQorCitib29sIFdlYlVzZXJTY3JpcHREYXRhOjpkZWNvZGUoSVBDOjpBcmd1
bWVudERlY29kZXImIGRlY29kZXIsIFdlYlVzZXJTY3JpcHREYXRhJiBkYXRhKQoreworICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoZGF0YS5pZGVudGlmaWVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGF0YS53b3JsZElkZW50aWZpZXIpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShkYXRhLnVzZXJTY3JpcHQp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2Vi
VXNlclN0eWxlU2hlZXREYXRhOjplbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIp
IGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBpZGVudGlmaWVyOworICAgIGVuY29kZXIgPDwgd29y
bGRJZGVudGlmaWVyOworICAgIGVuY29kZXIgPDwgdXNlclN0eWxlU2hlZXQ7Cit9CisKK2Jvb2wg
V2ViVXNlclN0eWxlU2hlZXREYXRhOjpkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29k
ZXIsIFdlYlVzZXJTdHlsZVNoZWV0RGF0YSYgZGF0YSkKK3sKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKGRhdGEuaWRlbnRpZmllcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGRhdGEud29ybGRJZGVudGlmaWVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGF0YS51c2VyU3R5bGVTaGVldCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
RGF0YVR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlVzZXJD
b250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlVzZXJDb250ZW50
Q29udHJvbGxlckRhdGFUeXBlc19oCisjZGVmaW5lIFdlYlVzZXJDb250ZW50Q29udHJvbGxlckRh
dGFUeXBlc19oCisKKyNpbmNsdWRlIDxXZWJDb3JlL1VzZXJTY3JpcHQuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1VzZXJTdHlsZVNoZWV0Lmg+CisKK25hbWVzcGFjZSBJUEMgeworY2xhc3MgQXJndW1l
bnREZWNvZGVyOworY2xhc3MgQXJndW1lbnRFbmNvZGVyOworfQorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworc3RydWN0IFdlYlVzZXJTY3JpcHREYXRhIHsKKyAgICB2b2lkIGVuY29kZShJUEM6OkFy
Z3VtZW50RW5jb2RlciYpIGNvbnN0OworICAgIHN0YXRpYyBib29sIGRlY29kZShJUEM6OkFyZ3Vt
ZW50RGVjb2RlciYsIFdlYlVzZXJTY3JpcHREYXRhJik7CisKKyAgICB1aW50NjRfdCBpZGVudGlm
aWVyOworICAgIHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllcjsKKyAgICBXZWJDb3JlOjpVc2VyU2Ny
aXB0IHVzZXJTY3JpcHQ7Cit9OworCitzdHJ1Y3QgV2ViVXNlclN0eWxlU2hlZXREYXRhIHsKKyAg
ICB2b2lkIGVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0OworICAgIHN0YXRpYyBi
b29sIGRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYsIFdlYlVzZXJTdHlsZVNoZWV0RGF0YSYp
OworCisgICAgdWludDY0X3QgaWRlbnRpZmllcjsKKyAgICB1aW50NjRfdCB3b3JsZElkZW50aWZp
ZXI7CisgICAgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQgdXNlclN0eWxlU2hlZXQ7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlVzZXJDb250ZW50Q29udHJvbGxl
ckRhdGFUeXBlc19oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJT
Y3JpcHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJ
VXNlclNjcmlwdC5jcHAJKHJldmlzaW9uIDE5Nzg5NCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQVBJVXNlclNjcmlwdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDExICszOSwy
MCBAQCBzdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVJZGVudGlmaWVyKCkKIAogV2ViQ29yZTo6VVJM
IFVzZXJTY3JpcHQ6OmdlbmVyYXRlVW5pcXVlVVJMKCkKIHsKKyAgICBzdGF0aWMgdWludDY0X3Qg
aWRlbnRpZmllcjsKKwogICAgIFN0cmluZ0J1aWxkZXIgdXJsU3RyaW5nQnVpbGRlcjsKICAgICB1
cmxTdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoInVzZXItc2NyaXB0OiIpOwotICAgIHVybFN0
cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKGdlbmVyYXRlSWRlbnRpZmllcigpKTsKKyAgICB1cmxT
dHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcigrK2lkZW50aWZpZXIpOwogICAgIHJldHVybiB7IHsg
fSwgdXJsU3RyaW5nQnVpbGRlci50b1N0cmluZygpIH07CiB9CiAKK1VzZXJTY3JpcHQ6OlVzZXJT
Y3JpcHQoV2ViQ29yZTo6VXNlclNjcmlwdCB1c2VyU2NyaXB0LCBBUEk6OlVzZXJDb250ZW50V29y
bGQmIHdvcmxkKQorICAgIDogbV9pZGVudGlmaWVyKGdlbmVyYXRlSWRlbnRpZmllcigpKQorICAg
ICwgbV91c2VyU2NyaXB0KHVzZXJTY3JpcHQpCisgICAgLCBtX3dvcmxkKHdvcmxkKQoreworfQor
CiAKIH0gLy8gbmFtZXNwYWNlIEFQSQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9BUElVc2VyU2NyaXB0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9BUElVc2VyU2NyaXB0LmgJKHJldmlzaW9uIDE5Nzg5NCkKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQVBJVXNlclNjcmlwdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMSAr
NDEsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVzZXJTY3JpcHQo
V1RGTW92ZSh1c2VyU2NyaXB0KSwgd29ybGQpKTsKICAgICB9CiAKLSAgICBVc2VyU2NyaXB0KFdl
YkNvcmU6OlVzZXJTY3JpcHQgdXNlclNjcmlwdCwgQVBJOjpVc2VyQ29udGVudFdvcmxkJiB3b3Js
ZCkKLSAgICAgICAgOiBtX3VzZXJTY3JpcHQodXNlclNjcmlwdCkKLSAgICAgICAgLCBtX3dvcmxk
KHdvcmxkKQotICAgIHsKLSAgICB9CisgICAgVXNlclNjcmlwdChXZWJDb3JlOjpVc2VyU2NyaXB0
LCBBUEk6OlVzZXJDb250ZW50V29ybGQmKTsKKworICAgIHVpbnQ2NF90IGlkZW50aWZpZXIoKSBj
b25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KIAogICAgIGNvbnN0IFdlYkNvcmU6OlVzZXJT
Y3JpcHQmIHVzZXJTY3JpcHQoKSBjb25zdCB7IHJldHVybiBtX3VzZXJTY3JpcHQ7IH0KICAgICAK
QEAgLTUzLDYgKzUxLDcgQEAgcHVibGljOgogICAgIGNvbnN0IFVzZXJDb250ZW50V29ybGQmIHVz
ZXJDb250ZW50V29ybGQoKSBjb25zdCB7IHJldHVybiBtX3dvcmxkOyB9CiAgICAgCiBwcml2YXRl
OgorICAgIHVpbnQ2NF90IG1faWRlbnRpZmllcjsKICAgICBXZWJDb3JlOjpVc2VyU2NyaXB0IG1f
dXNlclNjcmlwdDsKICAgICBSZWY8VXNlckNvbnRlbnRXb3JsZD4gbV93b3JsZDsKIH07CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJTdHlsZVNoZWV0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJTdHlsZVNoZWV0
LmNwcAkocmV2aXNpb24gMTk3ODk0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9B
UElVc2VyU3R5bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDExICszOSwxOSBAQCBz
dGF0aWMgdWludDY0X3QgZ2VuZXJhdGVJZGVudGlmaWVyKCkKIAogV2ViQ29yZTo6VVJMIFVzZXJT
dHlsZVNoZWV0OjpnZW5lcmF0ZVVuaXF1ZVVSTCgpCiB7CisgICAgc3RhdGljIHVpbnQ2NF90IGlk
ZW50aWZpZXI7CisKICAgICBTdHJpbmdCdWlsZGVyIHVybFN0cmluZ0J1aWxkZXI7CiAgICAgdXJs
U3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJ1c2VyLXN0eWxlLXNoZWV0OiIpOwotICAgIHVy
bFN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKGdlbmVyYXRlSWRlbnRpZmllcigpKTsKKyAgICB1
cmxTdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcigrK2lkZW50aWZpZXIpOwogICAgIHJldHVybiB7
IHsgfSwgdXJsU3RyaW5nQnVpbGRlci50b1N0cmluZygpIH07CiB9CiAKK1VzZXJTdHlsZVNoZWV0
OjpVc2VyU3R5bGVTaGVldChXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCB1c2VyU3R5bGVTaGVldCwg
QVBJOjpVc2VyQ29udGVudFdvcmxkJiB3b3JsZCkKKyAgICA6IG1faWRlbnRpZmllcihnZW5lcmF0
ZUlkZW50aWZpZXIoKSkKKyAgICAsIG1fdXNlclN0eWxlU2hlZXQodXNlclN0eWxlU2hlZXQpCisg
ICAgLCBtX3dvcmxkKHdvcmxkKQoreworfQogCiB9IC8vIG5hbWVzcGFjZSBBUEkKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlclN0eWxlU2hlZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJTdHlsZVNoZWV0LmgJKHJl
dmlzaW9uIDE5Nzg5NCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlclN0
eWxlU2hlZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTEgKzQxLDkgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVc2VyU3R5bGVTaGVldChXVEZNb3ZlKHVzZXJTdHls
ZVNoZWV0KSwgd29ybGQpKTsKICAgICB9CiAKLSAgICBVc2VyU3R5bGVTaGVldChXZWJDb3JlOjpV
c2VyU3R5bGVTaGVldCB1c2VyU3R5bGVTaGVldCwgQVBJOjpVc2VyQ29udGVudFdvcmxkJiB3b3Js
ZCkKLSAgICAgICAgOiBtX3VzZXJTdHlsZVNoZWV0KHVzZXJTdHlsZVNoZWV0KQotICAgICAgICAs
IG1fd29ybGQod29ybGQpCi0gICAgewotICAgIH0KKyAgICBVc2VyU3R5bGVTaGVldChXZWJDb3Jl
OjpVc2VyU3R5bGVTaGVldCwgQVBJOjpVc2VyQ29udGVudFdvcmxkJik7CisKKyAgICB1aW50NjRf
dCBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CiAKICAgICBjb25z
dCBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCYgdXNlclN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVy
biBtX3VzZXJTdHlsZVNoZWV0OyB9CiAKQEAgLTUzLDYgKzUxLDcgQEAgcHVibGljOgogICAgIGNv
bnN0IFVzZXJDb250ZW50V29ybGQmIHVzZXJDb250ZW50V29ybGQoKSBjb25zdCB7IHJldHVybiBt
X3dvcmxkOyB9CiAKIHByaXZhdGU6CisgICAgdWludDY0X3QgbV9pZGVudGlmaWVyOwogICAgIFdl
YkNvcmU6OlVzZXJTdHlsZVNoZWV0IG1fdXNlclN0eWxlU2hlZXQ7CiAgICAgUmVmPFVzZXJDb250
ZW50V29ybGQ+IG1fd29ybGQ7CiB9OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9fV0tVc2VyU3R5bGVTaGVldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlclN0eWxlU2hlZXQuaAkocmV2aXNpb24gMTk3ODk0
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyU3R5bGVTaGVl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMSArMzgsMTMgQEAgV0tfQ0xBU1NfQVZBSUxBQkxF
KFdLX01BQ19UQkEsIFdLX0lPU19UQgogCiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHks
IGNvcHkpIE5TU3RyaW5nICpzb3VyY2U7CiAKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25s
eSwgY29weSkgTlNVUkwgKmJhc2VVUkw7CisKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25s
eSwgZ2V0dGVyPWlzRm9yTWFpbkZyYW1lT25seSkgQk9PTCBmb3JNYWluRnJhbWVPbmx5OwogCiAt
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGZvck1haW5G
cmFtZU9ubHk6KEJPT0wpZm9yTWFpbkZyYW1lT25seTsKLQogLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoU291cmNlOihOU1N0cmluZyAqKXNvdXJjZSBmb3JNYWluRnJhbWVPbmx5OihCT09MKWZvck1h
aW5GcmFtZU9ubHkgbGVnYWN5V2hpdGVsaXN0OihXS19BUlJBWShOU1N0cmluZyAqKSAqKWxlZ2Fj
eVdoaXRlbGlzdCBsZWdhY3lCbGFja2xpc3Q6KFdLX0FSUkFZKE5TU3RyaW5nICopICopbGVnYWN5
QmxhY2tsaXN0IHVzZXJDb250ZW50V29ybGQ6KF9XS1VzZXJDb250ZW50V29ybGQgKil1c2VyQ29u
dGVudFdvcmxkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU291cmNlOihOU1N0cmluZyAqKXNv
dXJjZSBmb3JNYWluRnJhbWVPbmx5OihCT09MKWZvck1haW5GcmFtZU9ubHkgbGVnYWN5V2hpdGVs
aXN0OihXS19BUlJBWShOU1N0cmluZyAqKSAqKWxlZ2FjeVdoaXRlbGlzdCBsZWdhY3lCbGFja2xp
c3Q6KFdLX0FSUkFZKE5TU3RyaW5nICopICopbGVnYWN5QmxhY2tsaXN0IGJhc2VVUkw6KE5TVVJM
ICopYmFzZVVSTCB1c2VyQ29udGVudFdvcmxkOihfV0tVc2VyQ29udGVudFdvcmxkICopdXNlckNv
bnRlbnRXb3JsZDsKIAogQGVuZAogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL19XS1VzZXJTdHlsZVNoZWV0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlclN0eWxlU2hlZXQubW0JKHJldmlzaW9uIDE5Nzg5
NCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlclN0eWxlU2hl
ZXQubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2ltcG9ydCAiQVBJQXJy
YXkuaCIKICNpbXBvcnQgIldLTlNBcnJheS5oIgorI2ltcG9ydCAiV0tOU1VSTEV4dHJhcy5oIgog
I2ltcG9ydCAiV2ViS2l0MkluaXRpYWxpemUuaCIKICNpbXBvcnQgIl9XS1VzZXJDb250ZW50V29y
bGRJbnRlcm5hbC5oIgogCkBAIC02MSwxMSArNjIsMjkgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoU291cmNlOihOU1N0cmluZwogICAgIHJldHVybiBzZWxmOwogfQogCistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGZvck1haW5GcmFtZU9ubHk6KEJP
T0wpZm9yTWFpbkZyYW1lT25seSBsZWdhY3lXaGl0ZWxpc3Q6KFdLX0FSUkFZKE5TU3RyaW5nICop
ICopbGVnYWN5V2hpdGVsaXN0IGxlZ2FjeUJsYWNrbGlzdDooV0tfQVJSQVkoTlNTdHJpbmcgKikg
KilsZWdhY3lCbGFja2xpc3QgYmFzZVVSTDooTlNVUkwgKiliYXNlVVJMIHVzZXJDb250ZW50V29y
bGQ6KF9XS1VzZXJDb250ZW50V29ybGQgKil1c2VyQ29udGVudFdvcmxkCit7CisgICAgaWYgKCEo
c2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICAvLyBGSVhN
RTogSW4gdGhlIEFQSSB0ZXN0LCB3ZSBjYW4gdXNlIGdlbmVyYXRlVW5pcXVlVVJMIGJlbG93IGJl
Zm9yZSB0aGUgQVBJOjpPYmplY3QgY29uc3RydWN0b3IgaGFzIGRvbmUgdGhpcy4uLiB3aGVyZSBz
aG91bGQgdGhpcyByZWFsbHkgYmU/CisgICAgV2ViS2l0OjpJbml0aWFsaXplV2ViS2l0MigpOwor
CisgICAgQVBJOjpPYmplY3Q6OmNvbnN0cnVjdEluV3JhcHBlcjxBUEk6OlVzZXJTdHlsZVNoZWV0
PihzZWxmLCBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCB7IFdURjo6U3RyaW5nKHNvdXJjZSksIHsg
eyB9LCBXVEY6OlN0cmluZyhbYmFzZVVSTCBfd2ViX29yaWdpbmFsRGF0YUFzV1RGU3RyaW5nXSkg
fSwgQVBJOjp0b1N0cmluZ1ZlY3RvcihsZWdhY3lXaGl0ZWxpc3QpLCBBUEk6OnRvU3RyaW5nVmVj
dG9yKGxlZ2FjeUJsYWNrbGlzdCksIGZvck1haW5GcmFtZU9ubHkgPyBXZWJDb3JlOjpJbmplY3RJ
blRvcEZyYW1lT25seSA6IFdlYkNvcmU6OkluamVjdEluQWxsRnJhbWVzLCBXZWJDb3JlOjpVc2Vy
U3R5bGVVc2VyTGV2ZWwgfSwgKnVzZXJDb250ZW50V29ybGQtPl91c2VyQ29udGVudFdvcmxkKTsK
KworICAgIHJldHVybiBzZWxmOworfQorCiAtIChOU1N0cmluZyAqKXNvdXJjZQogewogICAgIHJl
dHVybiBfdXNlclN0eWxlU2hlZXQtPnVzZXJTdHlsZVNoZWV0KCkuc291cmNlKCk7CiB9CiAKKy0g
KE5TVVJMICopYmFzZVVSTAoreworICAgIHJldHVybiBfdXNlclN0eWxlU2hlZXQtPnVzZXJTdHls
ZVNoZWV0KCkudXJsKCk7Cit9CisKIC0gKEJPT0wpaXNGb3JNYWluRnJhbWVPbmx5CiB7CiAgICAg
cmV0dXJuIF91c2VyU3R5bGVTaGVldC0+dXNlclN0eWxlU2hlZXQoKS5pbmplY3RlZEZyYW1lcygp
ID09IFdlYkNvcmU6OkluamVjdEluVG9wRnJhbWVPbmx5OwpJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCShyZXZpc2lvbiAxOTc4OTQpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJv
eHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRGF0YVJl
ZmVyZW5jZS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIldlYlNj
cmlwdE1lc3NhZ2VIYW5kbGVyLmgiCisjaW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
RGF0YVR5cGVzLmgiCiAjaW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9sbGVyTWVzc2FnZXMu
aCIKICNpbmNsdWRlICJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1lc3NhZ2VzLmgiCiAj
aW5jbHVkZSA8V2ViQ29yZS9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaD4KQEAgLTgwLDE0ICs4MSwx
NCBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjphZGRQCiAgICAgICAgIHVz
ZXJDb250ZW50V29ybGRzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcih3b3JsZC5rZXktPmlkZW50aWZp
ZXIoKSwgd29ybGQua2V5LT5uYW1lKCkpKTsKICAgICB3ZWJQcm9jZXNzUHJveHkuY29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OkFkZFVzZXJDb250
ZW50V29ybGRzKHVzZXJDb250ZW50V29ybGRzKSwgbV9pZGVudGlmaWVyKTsKIAotICAgIFZlY3Rv
cjxzdGQ6OnBhaXI8dWludDY0X3QsIFdlYkNvcmU6OlVzZXJTY3JpcHQ+PiB1c2VyU2NyaXB0czsK
KyAgICBWZWN0b3I8V2ViVXNlclNjcmlwdERhdGE+IHVzZXJTY3JpcHRzOwogICAgIGZvciAoY29u
c3QgYXV0byYgdXNlclNjcmlwdCA6IG1fdXNlclNjcmlwdHMtPmVsZW1lbnRzT2ZUeXBlPEFQSTo6
VXNlclNjcmlwdD4oKSkKLSAgICAgICAgdXNlclNjcmlwdHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWly
KHVzZXJTY3JpcHQtPnVzZXJDb250ZW50V29ybGQoKS5pZGVudGlmaWVyKCksIHVzZXJTY3JpcHQt
PnVzZXJTY3JpcHQoKSkpOworICAgICAgICB1c2VyU2NyaXB0cy5hcHBlbmQoeyB1c2VyU2NyaXB0
LT5pZGVudGlmaWVyKCksIHVzZXJTY3JpcHQtPnVzZXJDb250ZW50V29ybGQoKS5pZGVudGlmaWVy
KCksIHVzZXJTY3JpcHQtPnVzZXJTY3JpcHQoKSB9KTsKICAgICB3ZWJQcm9jZXNzUHJveHkuY29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OkFkZFVz
ZXJTY3JpcHRzKHVzZXJTY3JpcHRzKSwgbV9pZGVudGlmaWVyKTsKIAotICAgIFZlY3RvcjxzdGQ6
OnBhaXI8dWludDY0X3QsIFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0Pj4gdXNlclN0eWxlU2hlZXRz
OworICAgIFZlY3RvcjxXZWJVc2VyU3R5bGVTaGVldERhdGE+IHVzZXJTdHlsZVNoZWV0czsKICAg
ICBmb3IgKGNvbnN0IGF1dG8mIHVzZXJTdHlsZVNoZWV0IDogbV91c2VyU3R5bGVTaGVldHMtPmVs
ZW1lbnRzT2ZUeXBlPEFQSTo6VXNlclN0eWxlU2hlZXQ+KCkpCi0gICAgICAgIHVzZXJTdHlsZVNo
ZWV0cy5hcHBlbmQoc3RkOjptYWtlX3BhaXIodXNlclN0eWxlU2hlZXQtPnVzZXJDb250ZW50V29y
bGQoKS5pZGVudGlmaWVyKCksIHVzZXJTdHlsZVNoZWV0LT51c2VyU3R5bGVTaGVldCgpKSk7Cisg
ICAgICAgIHVzZXJTdHlsZVNoZWV0cy5hcHBlbmQoeyB1c2VyU3R5bGVTaGVldC0+aWRlbnRpZmll
cigpLCB1c2VyU3R5bGVTaGVldC0+dXNlckNvbnRlbnRXb3JsZCgpLmlkZW50aWZpZXIoKSwgdXNl
clN0eWxlU2hlZXQtPnVzZXJTdHlsZVNoZWV0KCkgfSk7CiAgICAgd2ViUHJvY2Vzc1Byb3h5LmNv
bm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpBZGRV
c2VyU3R5bGVTaGVldHModXNlclN0eWxlU2hlZXRzKSwgbV9pZGVudGlmaWVyKTsKIAogICAgIFZl
Y3RvcjxXZWJTY3JpcHRNZXNzYWdlSGFuZGxlckhhbmRsZT4gbWVzc2FnZUhhbmRsZXJIYW5kbGVz
OwpAQCAtMTY4LDcgKzE2OSw3IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6
OmFkZFUKICAgICBtX3VzZXJTY3JpcHRzLT5lbGVtZW50cygpLmFwcGVuZCgmdXNlclNjcmlwdCk7
CiAKICAgICBmb3IgKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKQotICAg
ICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50
Q29udHJvbGxlcjo6QWRkVXNlclNjcmlwdHMoeyBzdGQ6Om1ha2VfcGFpcih3b3JsZC0+aWRlbnRp
ZmllcigpLCB1c2VyU2NyaXB0LnVzZXJTY3JpcHQoKSkgfSksIG1faWRlbnRpZmllcik7CisgICAg
ICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRD
b250cm9sbGVyOjpBZGRVc2VyU2NyaXB0cyh7IHsgdXNlclNjcmlwdC5pZGVudGlmaWVyKCksIHdv
cmxkLT5pZGVudGlmaWVyKCksIHVzZXJTY3JpcHQudXNlclNjcmlwdCgpIH0gfSksIG1faWRlbnRp
Zmllcik7CiB9CiAKIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92ZVVz
ZXJTY3JpcHQoQVBJOjpVc2VyU2NyaXB0JiB1c2VyU2NyaXB0KQpAQCAtMTc2LDcgKzE3Nyw3IEBA
IHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW8KICAgICBSZWY8QVBJOjpV
c2VyQ29udGVudFdvcmxkPiB3b3JsZCA9IHVzZXJTY3JpcHQudXNlckNvbnRlbnRXb3JsZCgpOwog
CiAgICAgZm9yIChXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykKLSAgICAg
ICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENv
bnRyb2xsZXI6OlJlbW92ZVVzZXJTY3JpcHQod29ybGQtPmlkZW50aWZpZXIoKSwgdXNlclNjcmlw
dC51c2VyU2NyaXB0KCkudXJsKCkuc3RyaW5nKCkpLCBtX2lkZW50aWZpZXIpOworICAgICAgICBw
cm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJv
bGxlcjo6UmVtb3ZlVXNlclNjcmlwdCh3b3JsZC0+aWRlbnRpZmllcigpLCB1c2VyU2NyaXB0Lmlk
ZW50aWZpZXIoKSksIG1faWRlbnRpZmllcik7CiAKICAgICBtX3VzZXJTY3JpcHRzLT5lbGVtZW50
cygpLnJlbW92ZUFsbCgmdXNlclNjcmlwdCk7CiAKQEAgLTIyMyw3ICsyMjQsNyBAQCB2b2lkIFdl
YlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjphZGRVCiAgICAgbV91c2VyU3R5bGVTaGVldHMt
PmVsZW1lbnRzKCkuYXBwZW5kKCZ1c2VyU3R5bGVTaGVldCk7CiAKICAgICBmb3IgKFdlYlByb2Nl
c3NQcm94eSogcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKQotICAgICAgICBwcm9jZXNzLT5jb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6QWRkVXNlclN0
eWxlU2hlZXRzKHsgc3RkOjptYWtlX3BhaXIod29ybGQtPmlkZW50aWZpZXIoKSwgdXNlclN0eWxl
U2hlZXQudXNlclN0eWxlU2hlZXQoKSkgfSksIG1faWRlbnRpZmllcik7CisgICAgICAgIHByb2Nl
c3MtPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVy
OjpBZGRVc2VyU3R5bGVTaGVldHMoeyB7IHVzZXJTdHlsZVNoZWV0LmlkZW50aWZpZXIoKSwgd29y
bGQtPmlkZW50aWZpZXIoKSwgdXNlclN0eWxlU2hlZXQudXNlclN0eWxlU2hlZXQoKSB9IH0pLCBt
X2lkZW50aWZpZXIpOwogfQogCiB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5Ojpy
ZW1vdmVVc2VyU3R5bGVTaGVldChBUEk6OlVzZXJTdHlsZVNoZWV0JiB1c2VyU3R5bGVTaGVldCkK
QEAgLTIzMSw3ICsyMzIsNyBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5Ojpy
ZW1vCiAgICAgUmVmPEFQSTo6VXNlckNvbnRlbnRXb3JsZD4gd29ybGQgPSB1c2VyU3R5bGVTaGVl
dC51c2VyQ29udGVudFdvcmxkKCk7CiAKICAgICBmb3IgKFdlYlByb2Nlc3NQcm94eSogcHJvY2Vz
cyA6IG1fcHJvY2Vzc2VzKQotICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6UmVtb3ZlVXNlclN0eWxlU2hlZXQod29y
bGQtPmlkZW50aWZpZXIoKSwgdXNlclN0eWxlU2hlZXQudXNlclN0eWxlU2hlZXQoKS51cmwoKS5z
dHJpbmcoKSksIG1faWRlbnRpZmllcik7CisgICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpSZW1vdmVVc2VyU3R5bGVT
aGVldCh3b3JsZC0+aWRlbnRpZmllcigpLCB1c2VyU3R5bGVTaGVldC5pZGVudGlmaWVyKCkpLCBt
X2lkZW50aWZpZXIpOwogCiAgICAgbV91c2VyU3R5bGVTaGVldHMtPmVsZW1lbnRzKCkucmVtb3Zl
QWxsKCZ1c2VyU3R5bGVTaGVldCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5Nzg5NCkKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMTA0NCw2ICsxMDQ0LDggQEAKIAkJN0E3OTFFRkExQzdDRkNGMTAwQzRDNTJCIC8qIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTc5MUVGOTFDN0NGQjM3MDBD
NEM1MkIgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlTWVzc2FnZVJlY2VpdmVyLmNw
cCAqLzsgfTsKIAkJN0E3OTFFRkIxQzdDRkQwMTAwQzRDNTJCIC8qIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3QTc5MUVGODFDN0NGQjEwMDBDNEM1MkIgLyogV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlTWVzc2FnZXMuaCAqLzsgfTsKIAkJN0E3OTFFRkMxQzdEMDhDNTAwQzRD
NTJCIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTlDRDhDMDFDNzc5ODQ5MDBEOUY2Qzcg
LyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCAqLzsgfTsKKwkJN0MwNjVGMkIx
QzhDRDk1RjAwQzJEOTUwIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzA2NUYyOTFD
OENEOTVGMDBDMkQ5NTAgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmNwcCAq
LzsgfTsKKwkJN0MwNjVGMkMxQzhDRDk1RjAwQzJEOTUwIC8qIFdlYlVzZXJDb250ZW50Q29udHJv
bGxlckRhdGFUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0MwNjVGMkExQzhDRDk1RjAwQzJEOTUwIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxl
ckRhdGFUeXBlcy5oICovOyB9OwogCQk3QzEzNUFBODE3M0IwQkNBMDA1ODZBRTIgLyogV0tQbHVn
aW5JbmZvcm1hdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QzEzNUFBNjE3M0IwQkNBMDA1ODZBRTIgLyogV0tQbHVnaW5JbmZvcm1hdGlvbi5j
cHAgKi87IH07CiAJCTdDMTM1QUE5MTczQjBCQ0EwMDU4NkFFMiAvKiBXS1BsdWdpbkluZm9ybWF0
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzEz
NUFBNzE3M0IwQkNBMDA1ODZBRTIgLyogV0tQbHVnaW5JbmZvcm1hdGlvbi5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMTM1QUFDMTczQjBDRkYw
MDU4NkFFMiAvKiBQbHVnaW5JbmZvcm1hdGlvbk1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMTM1QUFBMTczQjBDRkYwMDU4NkFFMiAvKiBQbHVn
aW5JbmZvcm1hdGlvbk1hYy5tbSAqLzsgfTsKQEAgLTMwNDgsMTAgKzMwNTAsMTEgQEAKIAkJNzYy
Qjc0ODQxMjBCQkEyRDAwODE5MzM5IC8qIFdLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBNzkxRUY4MUM3Q0ZCMTAwMEM0QzUyQiAvKiBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmVNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmVNZXNzYWdlcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTc5MUVGOTFDN0NGQjM3MDBDNEM1MkIg
LyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0g
ICAgICAgIAogCQk3QTlDRDhDMDFDNzc5ODQ5MDBEOUY2QzcgLyogV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTdBOUNEOEMxMUM3Nzk4NDkwMEQ5RjZDNyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBOUNE
OEMyMUM3NzlBRDYwMEQ5RjZDNyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUubWVz
c2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzA2NUYy
OTFDOENEOTVGMDBDMkQ5NTAgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlVzZXJDb250ZW50Q29u
dHJvbGxlckRhdGFUeXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDMDY1
RjJBMUM4Q0Q5NUYwMEMyRDk1MCAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyRGF0YVR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMEJCOUE4MThE
Q0RFODkwMDA2QzA4NiAvKiBXZWJDb250ZW50LWlPUy5lbnRpdGxlbWVudHMgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhtbDsgcGF0aCA9ICJX
ZWJDb250ZW50LWlPUy5lbnRpdGxlbWVudHMiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3QzBCQjlBOTE4RENERjVBMDAwNkMwODYgLyogTmV0d29yay1pT1MuZW50aXRsZW1lbnRzICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54bWw7
IHBhdGggPSAiTmV0d29yay1pT1MuZW50aXRsZW1lbnRzIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0MxMzVBQTYxNzNCMEJDQTAwNTg2QUUyIC8qIFdLUGx1Z2luSW5mb3JtYXRpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tQbHVnaW5JbmZvcm1h
dGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NDk5LDYgKzQ1MDIsOCBA
QAogCQkJCTgzNjAzNDlEMUFDQjM0RDYwMDYyNjU0OSAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNr
ZXIuY3BwICovLAogCQkJCTgzNjAzNDlFMUFDQjM0RDYwMDYyNjU0OSAvKiBXZWJTUUxpdGVEYXRh
YmFzZVRyYWNrZXIuaCAqLywKIAkJCQlDMDMzN0RENzEyN0E1MUI2MDA4RkY0RjQgLyogV2ViVG91
Y2hFdmVudC5jcHAgKi8sCisJCQkJN0MwNjVGMjkxQzhDRDk1RjAwQzJEOTUwIC8qIFdlYlVzZXJD
b250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5jcHAgKi8sCisJCQkJN0MwNjVGMkExQzhDRDk1RjAw
QzJEOTUwIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oICovLAogCQkJCUMw
MzM3REQwMTI3QTI5ODAwMDhGRjRGNCAvKiBXZWJXaGVlbEV2ZW50LmNwcCAqLywKIAkJCSk7CiAJ
CQlwYXRoID0gU2hhcmVkOwpAQCAtNzk4OSw2ICs3OTk0LDcgQEAKIAkJCQkyRDI4QTQ5NzFBRjk2
NUExMDBGMTkwQzkgLyogV0tWaWV3TGF5b3V0U3RyYXRlZ3kuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTVDMTQyNzAyMUMyM0Y4NEMwMEQ0MTE4MyAvKiBEb3dubG9hZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkZBNjE3OUYxMkYwQjk5RDAwMzNFMENBIC8qIFdLVmlld1ByaXZhdGUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTdDMDY1RjJDMUM4Q0Q5NUYwMEMyRDk1MCAvKiBXZWJVc2VyQ29udGVudENvbnRy
b2xsZXJEYXRhVHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1RTFBRkU5MTZCMjBCNzUwMDZD
QzFGMiAvKiBXS1dlYkFyY2hpdmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1RTFBRkVCMTZCMjBC
N0UwMDZDQzFGMiAvKiBXS1dlYkFyY2hpdmVSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUFBMkU1NjcxOEQ3NzUwODAwMzgxNEJEIC8qIFdLV2ViUHJvY2Vzc0J1bmRsZVBhcmFtZXRlcnMu
aCBpbiBIZWFkZXJzICovLApAQCAtOTE0NSw2ICs5MTUxLDcgQEAKIAkJCQk1QzE0MjcwMTFDMjNG
ODRDMDBENDExODMgLyogRG93bmxvYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzAzMzdEREQx
MjdBNTIxQzAwOEZGNEY0IC8qIFdlYlBsYXRmb3JtVG91Y2hQb2ludC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkyREE5NDRBMjE4ODRFNEYwMDBFRDg2REIgLyogV2ViUGxhdGZvcm1Ub3VjaFBvaW50
SU9TLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdDMDY1RjJCMUM4Q0Q5NUYwMEMyRDk1MCAvKiBX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MzFENTkyOUUxNjZFMDYwMDAwRTZCRjAyIC8qIFdlYlBsdWdJbkNsaWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQzU3NDRFRjEyNjM4RkIzMDA2RjBGMTIgLyogV2ViUG9wdXBJdGVtLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUQzQjk0ODQ2MTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJQb3B1cE1l
bnUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkocmV2aXNp
b24gMTk3ODk0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNs
dWRlICJXZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJV
c2VyQ29udGVudENvbnRyb2xsZXIuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0
Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRXhjZXB0aW9uLmg+CiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNMb2NrLmg+CkBAIC03MCw3ICs3MSw2IEBACiAjaW5jbHVkZSA8V2ViQ29y
ZS9TZWN1cml0eVBvbGljeS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Vzc2lvbklELmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVXNlckNvbnRlbnRD
b250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Vc2VyR2VzdHVyZUluZGljYXRvci5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvVXNlclNjcmlwdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlclN0
eWxlU2hlZXQuaD4KQEAgLTM5NywzOSArMzk3LDM5IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGU6Omlz
UHJvY2Vzc2luZ1VzZXJHZXMKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmFkZFVzZXJTY3JpcHQoV2Vi
UGFnZUdyb3VwUHJveHkqIHBhZ2VHcm91cCwgSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCogc2Ny
aXB0V29ybGQsIGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIHVybCwgQVBJOjpB
cnJheSogd2hpdGVsaXN0LCBBUEk6OkFycmF5KiBibGFja2xpc3QsIFdlYkNvcmU6OlVzZXJTY3Jp
cHRJbmplY3Rpb25UaW1lIGluamVjdGlvblRpbWUsIFdlYkNvcmU6OlVzZXJDb250ZW50SW5qZWN0
ZWRGcmFtZXMgaW5qZWN0ZWRGcmFtZXMpCiB7CiAgICAgLy8gdXJsIGlzIG5vdCBmcm9tIFVSTDo6
c3RyaW5nKCksIGkuZS4gaXQgaGFzIG5vdCBhbHJlYWR5IGJlZW4gcGFyc2VkIGJ5IFVSTCwgc28g
d2UgaGF2ZSB0byB1c2UgdGhlIHJlbGF0aXZlIFVSTCBjb25zdHJ1Y3RvciBmb3IgVVJMIGluc3Rl
YWQgb2YgdGhlIFBhcnNlZFVSTFN0cmluZ1RhZyB2ZXJzaW9uLgotICAgIGF1dG8gdXNlclNjcmlw
dCA9IHN0ZDo6bWFrZV91bmlxdWU8VXNlclNjcmlwdD4oc291cmNlLCBVUkwoVVJMKCksIHVybCks
IHdoaXRlbGlzdCA/IHdoaXRlbGlzdC0+dG9TdHJpbmdWZWN0b3IoKSA6IFZlY3RvcjxTdHJpbmc+
KCksIGJsYWNrbGlzdCA/IGJsYWNrbGlzdC0+dG9TdHJpbmdWZWN0b3IoKSA6IFZlY3RvcjxTdHJp
bmc+KCksIGluamVjdGlvblRpbWUsIGluamVjdGVkRnJhbWVzKTsKKyAgICBVc2VyU2NyaXB0IHVz
ZXJTY3JpcHR7IHNvdXJjZSwgVVJMKFVSTCgpLCB1cmwpLCB3aGl0ZWxpc3QgPyB3aGl0ZWxpc3Qt
PnRvU3RyaW5nVmVjdG9yKCkgOiBWZWN0b3I8U3RyaW5nPigpLCBibGFja2xpc3QgPyBibGFja2xp
c3QtPnRvU3RyaW5nVmVjdG9yKCkgOiBWZWN0b3I8U3RyaW5nPigpLCBpbmplY3Rpb25UaW1lLCBp
bmplY3RlZEZyYW1lcyB9OwogCi0gICAgcGFnZUdyb3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIo
KS5hZGRVc2VyU2NyaXB0KHNjcmlwdFdvcmxkLT5jb3JlV29ybGQoKSwgV1RGTW92ZSh1c2VyU2Ny
aXB0KSk7CisgICAgcGFnZUdyb3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIoKS5hZGRVc2VyU2Ny
aXB0KCpzY3JpcHRXb3JsZCwgV1RGTW92ZSh1c2VyU2NyaXB0KSk7CiB9CiAKIHZvaWQgSW5qZWN0
ZWRCdW5kbGU6OmFkZFVzZXJTdHlsZVNoZWV0KFdlYlBhZ2VHcm91cFByb3h5KiBwYWdlR3JvdXAs
IEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQqIHNjcmlwdFdvcmxkLCBjb25zdCBTdHJpbmcmIHNv
dXJjZSwgY29uc3QgU3RyaW5nJiB1cmwsIEFQSTo6QXJyYXkqIHdoaXRlbGlzdCwgQVBJOjpBcnJh
eSogYmxhY2tsaXN0LCBXZWJDb3JlOjpVc2VyQ29udGVudEluamVjdGVkRnJhbWVzIGluamVjdGVk
RnJhbWVzKQogewogICAgIC8vIHVybCBpcyBub3QgZnJvbSBVUkw6OnN0cmluZygpLCBpLmUuIGl0
IGhhcyBub3QgYWxyZWFkeSBiZWVuIHBhcnNlZCBieSBVUkwsIHNvIHdlIGhhdmUgdG8gdXNlIHRo
ZSByZWxhdGl2ZSBVUkwgY29uc3RydWN0b3IgZm9yIFVSTCBpbnN0ZWFkIG9mIHRoZSBQYXJzZWRV
UkxTdHJpbmdUYWcgdmVyc2lvbi4KLSAgICBhdXRvIHVzZXJTdHlsZVNoZWV0ID0gc3RkOjptYWtl
X3VuaXF1ZTxVc2VyU3R5bGVTaGVldD4oc291cmNlLCBVUkwoVVJMKCksIHVybCksIHdoaXRlbGlz
dCA/IHdoaXRlbGlzdC0+dG9TdHJpbmdWZWN0b3IoKSA6IFZlY3RvcjxTdHJpbmc+KCksIGJsYWNr
bGlzdCA/IGJsYWNrbGlzdC0+dG9TdHJpbmdWZWN0b3IoKSA6IFZlY3RvcjxTdHJpbmc+KCksIGlu
amVjdGVkRnJhbWVzLCBVc2VyU3R5bGVVc2VyTGV2ZWwpOworICAgIFVzZXJTdHlsZVNoZWV0IHVz
ZXJTdHlsZVNoZWV0eyBzb3VyY2UsIFVSTChVUkwoKSwgdXJsKSwgd2hpdGVsaXN0ID8gd2hpdGVs
aXN0LT50b1N0cmluZ1ZlY3RvcigpIDogVmVjdG9yPFN0cmluZz4oKSwgYmxhY2tsaXN0ID8gYmxh
Y2tsaXN0LT50b1N0cmluZ1ZlY3RvcigpIDogVmVjdG9yPFN0cmluZz4oKSwgaW5qZWN0ZWRGcmFt
ZXMsIFVzZXJTdHlsZVVzZXJMZXZlbCB9OwogCi0gICAgcGFnZUdyb3VwLT51c2VyQ29udGVudENv
bnRyb2xsZXIoKS5hZGRVc2VyU3R5bGVTaGVldChzY3JpcHRXb3JsZC0+Y29yZVdvcmxkKCksIFdU
Rk1vdmUodXNlclN0eWxlU2hlZXQpLCBJbmplY3RJbkV4aXN0aW5nRG9jdW1lbnRzKTsKKyAgICBw
YWdlR3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigpLmFkZFVzZXJTdHlsZVNoZWV0KCpzY3Jp
cHRXb3JsZCwgV1RGTW92ZSh1c2VyU3R5bGVTaGVldCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVu
ZGxlOjpyZW1vdmVVc2VyU2NyaXB0KFdlYlBhZ2VHcm91cFByb3h5KiBwYWdlR3JvdXAsIEluamVj
dGVkQnVuZGxlU2NyaXB0V29ybGQqIHNjcmlwdFdvcmxkLCBjb25zdCBTdHJpbmcmIHVybCkKIHsK
ICAgICAvLyB1cmwgaXMgbm90IGZyb20gVVJMOjpzdHJpbmcoKSwgaS5lLiBpdCBoYXMgbm90IGFs
cmVhZHkgYmVlbiBwYXJzZWQgYnkgVVJMLCBzbyB3ZSBoYXZlIHRvIHVzZSB0aGUgcmVsYXRpdmUg
VVJMIGNvbnN0cnVjdG9yIGZvciBVUkwgaW5zdGVhZCBvZiB0aGUgUGFyc2VkVVJMU3RyaW5nVGFn
IHZlcnNpb24uCi0gICAgcGFnZUdyb3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIoKS5yZW1vdmVV
c2VyU2NyaXB0KHNjcmlwdFdvcmxkLT5jb3JlV29ybGQoKSwgVVJMKFVSTCgpLCB1cmwpKTsKKyAg
ICBwYWdlR3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigpLnJlbW92ZVVzZXJTY3JpcHRXaXRo
VVJMKCpzY3JpcHRXb3JsZCwgVVJMKFVSTCgpLCB1cmwpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1
bmRsZTo6cmVtb3ZlVXNlclN0eWxlU2hlZXQoV2ViUGFnZUdyb3VwUHJveHkqIHBhZ2VHcm91cCwg
SW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCogc2NyaXB0V29ybGQsIGNvbnN0IFN0cmluZyYgdXJs
KQogewogICAgIC8vIHVybCBpcyBub3QgZnJvbSBVUkw6OnN0cmluZygpLCBpLmUuIGl0IGhhcyBu
b3QgYWxyZWFkeSBiZWVuIHBhcnNlZCBieSBVUkwsIHNvIHdlIGhhdmUgdG8gdXNlIHRoZSByZWxh
dGl2ZSBVUkwgY29uc3RydWN0b3IgZm9yIFVSTCBpbnN0ZWFkIG9mIHRoZSBQYXJzZWRVUkxTdHJp
bmdUYWcgdmVyc2lvbi4KLSAgICBwYWdlR3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigpLnJl
bW92ZVVzZXJTdHlsZVNoZWV0KHNjcmlwdFdvcmxkLT5jb3JlV29ybGQoKSwgVVJMKFVSTCgpLCB1
cmwpKTsKKyAgICBwYWdlR3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigpLnJlbW92ZVVzZXJT
dHlsZVNoZWV0V2l0aFVSTCgqc2NyaXB0V29ybGQsIFVSTChVUkwoKSwgdXJsKSk7CiB9CiAKIHZv
aWQgSW5qZWN0ZWRCdW5kbGU6OnJlbW92ZVVzZXJTY3JpcHRzKFdlYlBhZ2VHcm91cFByb3h5KiBw
YWdlR3JvdXAsIEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQqIHNjcmlwdFdvcmxkKQogewotICAg
IHBhZ2VHcm91cC0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkucmVtb3ZlVXNlclNjcmlwdHMoc2Ny
aXB0V29ybGQtPmNvcmVXb3JsZCgpKTsKKyAgICBwYWdlR3JvdXAtPnVzZXJDb250ZW50Q29udHJv
bGxlcigpLnJlbW92ZVVzZXJTY3JpcHRzKCpzY3JpcHRXb3JsZCk7CiB9CiAKIHZvaWQgSW5qZWN0
ZWRCdW5kbGU6OnJlbW92ZVVzZXJTdHlsZVNoZWV0cyhXZWJQYWdlR3JvdXBQcm94eSogcGFnZUdy
b3VwLCBJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkKiBzY3JpcHRXb3JsZCkKIHsKLSAgICBwYWdl
R3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigpLnJlbW92ZVVzZXJTdHlsZVNoZWV0cyhzY3Jp
cHRXb3JsZC0+Y29yZVdvcmxkKCkpOworICAgIHBhZ2VHcm91cC0+dXNlckNvbnRlbnRDb250cm9s
bGVyKCkucmVtb3ZlVXNlclN0eWxlU2hlZXRzKCpzY3JpcHRXb3JsZCk7CiB9CiAKIHZvaWQgSW5q
ZWN0ZWRCdW5kbGU6OnJlbW92ZUFsbFVzZXJDb250ZW50KFdlYlBhZ2VHcm91cFByb3h5KiBwYWdl
R3JvdXApCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVz
ZXJDb250ZW50Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCShyZXZpc2lv
biAxOTc4OTQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVz
ZXJDb250ZW50Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDYgQEAK
ICNpbmNsdWRlICJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUg
IldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlIDxXZWJD
b3JlL0RPTVdyYXBwZXJXb3JsZC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2NyaXB0Q29udHJvbGxl
ci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW5EYXRhLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VzZXJT
dHlsZVNoZWV0Lmg+CkBAIC04MCw3ICs3OSw2IEBAIFJlZjxXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXI+IFdlYlVzZXJDb24KIAogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXIodWludDY0X3QgaWRlbnRpZmllcikKICAgICA6IG1faWRlbnRpZmllcihpZGVu
dGlmaWVyKQotICAgICwgbV91c2VyQ29udGVudENvbnRyb2xsZXIoVXNlckNvbnRlbnRDb250cm9s
bGVyOjpjcmVhdGUoKSkKIHsKICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5hZGRNZXNzYWdl
UmVjZWl2ZXIoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLCBtX2lkZW50aWZpZXIsICp0aGlzKTsKIH0KQEAgLTk0LDcgKzkyLDYgQEAgV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyOjp+V2ViVXNlckNvbnRlbgogICAgIHVzZXJDb250ZW50Q29u
dHJvbGxlcnMoKS5yZW1vdmUobV9pZGVudGlmaWVyKTsKIH0KIAotCiB2b2lkIFdlYlVzZXJDb250
ZW50Q29udHJvbGxlcjo6YWRkVXNlckNvbnRlbnRXb3JsZHMoY29uc3QgVmVjdG9yPHN0ZDo6cGFp
cjx1aW50NjRfdCwgU3RyaW5nPj4mIHdvcmxkcykKIHsKICAgICBmb3IgKGF1dG8mIHdvcmxkIDog
d29ybGRzKSB7CkBAIC0xMjQsMjAgKzEyMSwyMSBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJv
bGxlcjo6cmVtb3ZlVXNlCiAgICAgfQogfQogCi12b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxl
cjo6YWRkVXNlclNjcmlwdHMoY29uc3QgVmVjdG9yPHN0ZDo6cGFpcjx1aW50NjRfdCwgV2ViQ29y
ZTo6VXNlclNjcmlwdD4+JiB1c2VyU2NyaXB0cykKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyOjphZGRVc2VyU2NyaXB0cyhjb25zdCBWZWN0b3I8V2ViVXNlclNjcmlwdERhdGE+JiB1c2Vy
U2NyaXB0cykKIHsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHVzZXJTY3JpcHRXb3JsZFBhaXIgOiB1
c2VyU2NyaXB0cykgewotICAgICAgICBhdXRvIGl0ID0gd29ybGRNYXAoKS5maW5kKHVzZXJTY3Jp
cHRXb3JsZFBhaXIuZmlyc3QpOworICAgIGZvciAoY29uc3QgYXV0byYgdXNlclNjcmlwdERhdGEg
OiB1c2VyU2NyaXB0cykgeworICAgICAgICBhdXRvIGl0ID0gd29ybGRNYXAoKS5maW5kKHVzZXJT
Y3JpcHREYXRhLndvcmxkSWRlbnRpZmllcik7CiAgICAgICAgIGlmIChpdCA9PSB3b3JsZE1hcCgp
LmVuZCgpKSB7Ci0gICAgICAgICAgICBXVEZMb2dBbHdheXMoIlRyeWluZyB0byBhZGQgYSBVc2Vy
U2NyaXB0IHRvIGEgVXNlckNvbnRlbnRXb3JsZCAoaWQ9JSIgUFJJdTY0ICIpIHRoYXQgZG9lcyBu
b3QgZXhpc3QuIiwgdXNlclNjcmlwdFdvcmxkUGFpci5maXJzdCk7CisgICAgICAgICAgICBXVEZM
b2dBbHdheXMoIlRyeWluZyB0byBhZGQgYSBVc2VyU2NyaXB0IHRvIGEgVXNlckNvbnRlbnRXb3Js
ZCAoaWQ9JSIgUFJJdTY0ICIpIHRoYXQgZG9lcyBub3QgZXhpc3QuIiwgdXNlclNjcmlwdERhdGEu
d29ybGRJZGVudGlmaWVyKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAg
ICAgICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPmFkZFVzZXJTY3JpcHQoaXQtPnZhbHVlLmZp
cnN0LT5jb3JlV29ybGQoKSwgc3RkOjptYWtlX3VuaXF1ZTxXZWJDb3JlOjpVc2VyU2NyaXB0Pih1
c2VyU2NyaXB0V29ybGRQYWlyLnNlY29uZCkpOworICAgICAgICBVc2VyU2NyaXB0IHNjcmlwdCA9
IHVzZXJTY3JpcHREYXRhLnVzZXJTY3JpcHQ7CisgICAgICAgIGFkZFVzZXJTY3JpcHRJbnRlcm5h
bCgqaXQtPnZhbHVlLmZpcnN0LCB1c2VyU2NyaXB0RGF0YS5pZGVudGlmaWVyLCBXVEZNb3ZlKHNj
cmlwdCkpOwogICAgIH0KIH0KIAotdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92
ZVVzZXJTY3JpcHQodWludDY0X3Qgd29ybGRJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHVybFN0
cmluZykKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU2NyaXB0KHVp
bnQ2NF90IHdvcmxkSWRlbnRpZmllciwgdWludDY0X3QgdXNlclNjcmlwdElkZW50aWZpZXIpCiB7
CiAgICAgYXV0byBpdCA9IHdvcmxkTWFwKCkuZmluZCh3b3JsZElkZW50aWZpZXIpOwogICAgIGlm
IChpdCA9PSB3b3JsZE1hcCgpLmVuZCgpKSB7CkBAIC0xNDUsNyArMTQzLDcgQEAgdm9pZCBXZWJV
c2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZQogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPnJlbW92ZVVzZXJTY3JpcHQoaXQtPnZhbHVl
LmZpcnN0LT5jb3JlV29ybGQoKSwgVVJMKFVSTCgpLCB1cmxTdHJpbmcpKTsKKyAgICByZW1vdmVV
c2VyU2NyaXB0SW50ZXJuYWwoKml0LT52YWx1ZS5maXJzdCwgdXNlclNjcmlwdElkZW50aWZpZXIp
OwogfQogCiB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxsVXNlclNjcmlw
dHMoY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYgd29ybGRJZGVudGlmaWVycykKQEAgLTE1NywyNCAr
MTU1LDI1IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVBbGwKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIG1fdXNlckNvbnRlbnRDb250cm9s
bGVyLT5yZW1vdmVVc2VyU2NyaXB0cyhpdC0+dmFsdWUuZmlyc3QtPmNvcmVXb3JsZCgpKTsKKyAg
ICAgICAgcmVtb3ZlVXNlclNjcmlwdHMoKml0LT52YWx1ZS5maXJzdCk7CiAgICAgfQogfQogCi12
b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlclN0eWxlU2hlZXRzKGNvbnN0IFZl
Y3RvcjxzdGQ6OnBhaXI8dWludDY0X3QsIFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0Pj4mIHVzZXJT
dHlsZVNoZWV0cykKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyU3R5bGVT
aGVldHMoY29uc3QgVmVjdG9yPFdlYlVzZXJTdHlsZVNoZWV0RGF0YT4mIHVzZXJTdHlsZVNoZWV0
cykKIHsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHVzZXJTdHlsZVNoZWV0V29ybGRQYWlyIDogdXNl
clN0eWxlU2hlZXRzKSB7Ci0gICAgICAgIGF1dG8gaXQgPSB3b3JsZE1hcCgpLmZpbmQodXNlclN0
eWxlU2hlZXRXb3JsZFBhaXIuZmlyc3QpOworICAgIGZvciAoY29uc3QgYXV0byYgdXNlclN0eWxl
U2hlZXREYXRhIDogdXNlclN0eWxlU2hlZXRzKSB7CisgICAgICAgIGF1dG8gaXQgPSB3b3JsZE1h
cCgpLmZpbmQodXNlclN0eWxlU2hlZXREYXRhLndvcmxkSWRlbnRpZmllcik7CiAgICAgICAgIGlm
IChpdCA9PSB3b3JsZE1hcCgpLmVuZCgpKSB7Ci0gICAgICAgICAgICBXVEZMb2dBbHdheXMoIlRy
eWluZyB0byBhZGQgYSBVc2VyU3R5bGVTaGVldCB0byBhIFVzZXJDb250ZW50V29ybGQgKGlkPSUi
IFBSSXU2NCAiKSB0aGF0IGRvZXMgbm90IGV4aXN0LiIsIHVzZXJTdHlsZVNoZWV0V29ybGRQYWly
LmZpcnN0KTsKKyAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiVHJ5aW5nIHRvIGFkZCBhIFVzZXJT
dHlsZVNoZWV0IHRvIGEgVXNlckNvbnRlbnRXb3JsZCAoaWQ9JSIgUFJJdTY0ICIpIHRoYXQgZG9l
cyBub3QgZXhpc3QuIiwgdXNlclN0eWxlU2hlZXREYXRhLndvcmxkSWRlbnRpZmllcik7CiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotCi0gICAgICAgIG1fdXNlckNvbnRlbnRDb250
cm9sbGVyLT5hZGRVc2VyU3R5bGVTaGVldChpdC0+dmFsdWUuZmlyc3QtPmNvcmVXb3JsZCgpLCBz
dGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0Pih1c2VyU3R5bGVTaGVldFdv
cmxkUGFpci5zZWNvbmQpLCBJbmplY3RJbkV4aXN0aW5nRG9jdW1lbnRzKTsKKyAgICAgICAgCisg
ICAgICAgIFVzZXJTdHlsZVNoZWV0IHNoZWV0ID0gdXNlclN0eWxlU2hlZXREYXRhLnVzZXJTdHls
ZVNoZWV0OworICAgICAgICBhZGRVc2VyU3R5bGVTaGVldEludGVybmFsKCppdC0+dmFsdWUuZmly
c3QsIHVzZXJTdHlsZVNoZWV0RGF0YS5pZGVudGlmaWVyLCBXVEZNb3ZlKHNoZWV0KSk7CiAgICAg
fQogfQogCi12b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclN0eWxlU2hl
ZXQodWludDY0X3Qgd29ybGRJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3Zv
aWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU3R5bGVTaGVldCh1aW50NjRf
dCB3b3JsZElkZW50aWZpZXIsIHVpbnQ2NF90IHVzZXJTdHlsZVNoZWV0SWRlbnRpZmllcikKIHsK
ICAgICBhdXRvIGl0ID0gd29ybGRNYXAoKS5maW5kKHdvcmxkSWRlbnRpZmllcik7CiAgICAgaWYg
KGl0ID09IHdvcmxkTWFwKCkuZW5kKCkpIHsKQEAgLTE4Miw3ICsxODEsNyBAQCB2b2lkIFdlYlVz
ZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+cmVtb3ZlVXNlclN0eWxlU2hlZXQoaXQtPnZh
bHVlLmZpcnN0LT5jb3JlV29ybGQoKSwgVVJMKFVSTCgpLCB1cmxTdHJpbmcpKTsKKyAgICByZW1v
dmVVc2VyU3R5bGVTaGVldEludGVybmFsKCppdC0+dmFsdWUuZmlyc3QsIHVzZXJTdHlsZVNoZWV0
SWRlbnRpZmllcik7CiB9CiAKIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVB
bGxVc2VyU3R5bGVTaGVldHMoY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYgd29ybGRJZGVudGlmaWVy
cykKQEAgLTE5NCw3ICsxOTMsNyBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVt
b3ZlQWxsCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBtX3VzZXJD
b250ZW50Q29udHJvbGxlci0+cmVtb3ZlVXNlclN0eWxlU2hlZXRzKGl0LT52YWx1ZS5maXJzdC0+
Y29yZVdvcmxkKCkpOworICAgICAgICByZW1vdmVVc2VyU3R5bGVTaGVldHMoKml0LT52YWx1ZS5m
aXJzdCk7CiAgICAgfQogfQogCkBAIC0yNTMsNyArMjUyLDkgQEAgdm9pZCBXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXI6OmFkZFVzZXJTYwogICAgICAgICBSZWZQdHI8V2ViVXNlck1lc3NhZ2VIYW5k
bGVyRGVzY3JpcHRvclByb3h5PiBkZXNjcmlwdG9yID0gV2ViVXNlck1lc3NhZ2VIYW5kbGVyRGVz
Y3JpcHRvclByb3h5OjpjcmVhdGUodGhpcywgaGFuZGxlLm5hbWUsIGhhbmRsZS5pZGVudGlmaWVy
KTsKIAogICAgICAgICBtX3VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzLmFkZChkZXNjcmlw
dG9yLT5pZGVudGlmaWVyKCksIGRlc2NyaXB0b3IpOwotICAgICAgICBtX3VzZXJDb250ZW50Q29u
dHJvbGxlci0+YWRkVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcihkZXNjcmlwdG9yLT5kZXNj
cmlwdG9yKCkpOworCisgICAgICAgIGF1dG8mIGNvcmVEZXNjcmlwdG9yID0gZGVzY3JpcHRvci0+
ZGVzY3JpcHRvcigpOworICAgICAgICBtX3VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzTWFw
LmFkZChzdGQ6Om1ha2VfcGFpcihjb3JlRGVzY3JpcHRvci5uYW1lKCksICZjb3JlRGVzY3JpcHRv
ci53b3JsZCgpKSwgJmNvcmVEZXNjcmlwdG9yKTsKICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9Q
QVJBTShzY3JpcHRNZXNzYWdlSGFuZGxlcnMpOwpAQCAtMjY1LDggKzI2NiwxMCBAQCB2b2lkIFdl
YlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlCiAjaWYgRU5BQkxFKFVTRVJfTUVTU0FH
RV9IQU5ETEVSUykKICAgICBhdXRvIGl0ID0gbV91c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9y
cy5maW5kKGlkZW50aWZpZXIpOwogICAgIEFTU0VSVChpdCAhPSBtX3VzZXJNZXNzYWdlSGFuZGxl
ckRlc2NyaXB0b3JzLmVuZCgpKTsKLSAgICAKLSAgICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+
cmVtb3ZlVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcihpdC0+dmFsdWUtPmRlc2NyaXB0b3Io
KSk7CisKKyAgICBhdXRvJiBjb3JlRGVzY3JpcHRvciA9IGl0LT52YWx1ZS0+ZGVzY3JpcHRvcigp
OworICAgIG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnNNYXAucmVtb3ZlKHN0ZDo6bWFr
ZV9wYWlyKGNvcmVEZXNjcmlwdG9yLm5hbWUoKSwgJmNvcmVEZXNjcmlwdG9yLndvcmxkKCkpKTsK
KwogICAgIG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMucmVtb3ZlKGl0KTsKICNlbHNl
CiAgICAgVU5VU0VEX1BBUkFNKGlkZW50aWZpZXIpOwpAQCAtMjc5LDE5ICsyODIsMTY4IEBAIHZv
aWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyQ28KICAgICBmb3IgKGNvbnN0IGF1
dG8mIHVzZXJDb250ZW50RXh0ZW5zaW9uIDogdXNlckNvbnRlbnRFeHRlbnNpb25zKSB7CiAgICAg
ICAgIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEgY29udGVudEV4dGVuc2lvbkRhdGEg
PSB1c2VyQ29udGVudEV4dGVuc2lvbi5zZWNvbmQ7CiAgICAgICAgIFJlZlB0cjxXZWJDb21waWxl
ZENvbnRlbnRFeHRlbnNpb24+IGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiA9IFdlYkNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbjo6Y3JlYXRlKFdURk1vdmUoY29udGVudEV4dGVuc2lvbkRhdGEpKTsK
LSAgICAgICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPmFkZFVzZXJDb250ZW50RXh0ZW5zaW9u
KHVzZXJDb250ZW50RXh0ZW5zaW9uLmZpcnN0LCBjb21waWxlZENvbnRlbnRFeHRlbnNpb24pOwor
CisgICAgICAgIG1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQuYWRkQ29udGVudEV4dGVuc2lvbih1
c2VyQ29udGVudEV4dGVuc2lvbi5maXJzdCwgV1RGTW92ZShjb21waWxlZENvbnRlbnRFeHRlbnNp
b24pKTsKICAgICB9CiB9CiAKIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVV
c2VyQ29udGVudEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgbV91c2VyQ29u
dGVudENvbnRyb2xsZXItPnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9uKG5hbWUpOworICAgIG1f
Y29udGVudEV4dGVuc2lvbkJhY2tlbmQucmVtb3ZlQ29udGVudEV4dGVuc2lvbihuYW1lKTsKIH0K
IAogdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZUFsbFVzZXJDb250ZW50RXh0
ZW5zaW9ucygpCiB7Ci0gICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPnJlbW92ZUFsbFVzZXJD
b250ZW50RXh0ZW5zaW9ucygpOworICAgIG1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQucmVtb3Zl
QWxsQ29udGVudEV4dGVuc2lvbnMoKTsKIH0KICNlbmRpZgogCisKKwordm9pZCBXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHRJbnRlcm5hbChJbmplY3RlZEJ1bmRsZVNjcmlw
dFdvcmxkJiB3b3JsZCwgdWludDY0X3QgdXNlclNjcmlwdElkZW50aWZpZXIsIFVzZXJTY3JpcHQm
JiB1c2VyU2NyaXB0KQoreworICAgIGF1dG8mIHNjcmlwdHNJbldvcmxkID0gbV91c2VyU2NyaXB0
cy5lbnN1cmUoJndvcmxkLCBbXSB7IHJldHVybiBWZWN0b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBX
ZWJDb3JlOjpVc2VyU2NyaXB0Pj4oKTsgfSkuaXRlcmF0b3ItPnZhbHVlOworICAgIHNjcmlwdHNJ
bldvcmxkLmFwcGVuZChzdGQ6Om1ha2VfcGFpcih1c2VyU2NyaXB0SWRlbnRpZmllciwgV1RGTW92
ZSh1c2VyU2NyaXB0KSkpOworfQorCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRk
VXNlclNjcmlwdChJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiB3b3JsZCwgVXNlclNjcmlwdCYm
IHVzZXJTY3JpcHQpCit7CisgICAgYWRkVXNlclNjcmlwdEludGVybmFsKHdvcmxkLCAwLCBXVEZN
b3ZlKHVzZXJTY3JpcHQpKTsKK30KKwordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJl
bW92ZVVzZXJTY3JpcHRXaXRoVVJMKEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQmIHdvcmxkLCBj
b25zdCBVUkwmIHVybCkKK3sKKyAgICBhdXRvIGl0ID0gbV91c2VyU2NyaXB0cy5maW5kKCZ3b3Js
ZCk7CisgICAgaWYgKGl0ID09IG1fdXNlclNjcmlwdHMuZW5kKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGF1dG8mIHNjcmlwdHMgPSBpdC0+dmFsdWU7CisgICAgZm9yIChpbnQgaSA9IHNjcmlw
dHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgaWYgKHNjcmlwdHNbaV0uc2Vj
b25kLnVybCgpID09IHVybCkKKyAgICAgICAgICAgIHNjcmlwdHMucmVtb3ZlKGkpOworICAgIH0K
KworICAgIGlmIChzY3JpcHRzLmlzRW1wdHkoKSkKKyAgICAgICAgbV91c2VyU2NyaXB0cy5yZW1v
dmUoaXQpOworfQorCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclNj
cmlwdEludGVybmFsKEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQmIHdvcmxkLCB1aW50NjRfdCB1
c2VyU2NyaXB0SWRlbnRpZmllcikKK3sKKyAgICBhdXRvIGl0ID0gbV91c2VyU2NyaXB0cy5maW5k
KCZ3b3JsZCk7CisgICAgaWYgKGl0ID09IG1fdXNlclNjcmlwdHMuZW5kKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGF1dG8mIHNjcmlwdHMgPSBpdC0+dmFsdWU7CisgICAgZm9yIChpbnQgaSA9
IHNjcmlwdHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgaWYgKHNjcmlwdHNb
aV0uZmlyc3QgPT0gdXNlclNjcmlwdElkZW50aWZpZXIpCisgICAgICAgICAgICBzY3JpcHRzLnJl
bW92ZShpKTsKKyAgICB9CisKKyAgICBpZiAoc2NyaXB0cy5pc0VtcHR5KCkpCisgICAgICAgIG1f
dXNlclNjcmlwdHMucmVtb3ZlKGl0KTsKK30KKwordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXI6OnJlbW92ZVVzZXJTY3JpcHRzKEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQmIHdvcmxkKQor
eworICAgIG1fdXNlclNjcmlwdHMucmVtb3ZlKCZ3b3JsZCk7Cit9CisKK3ZvaWQgV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldEludGVybmFsKEluamVjdGVkQnVuZGxl
U2NyaXB0V29ybGQmIHdvcmxkLCB1aW50NjRfdCB1c2VyU3R5bGVTaGVldElkZW50aWZpZXIsIFVz
ZXJTdHlsZVNoZWV0JiYgdXNlclN0eWxlU2hlZXQpCit7CisgICAgYXV0byYgc3R5bGVTaGVldHNJ
bldvcmxkID0gbV91c2VyU3R5bGVTaGVldHMuZW5zdXJlKCZ3b3JsZCwgW10geyByZXR1cm4gVmVj
dG9yPHN0ZDo6cGFpcjx1aW50NjRfdCwgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQ+PigpOyB9KS5p
dGVyYXRvci0+dmFsdWU7CisgICAgc3R5bGVTaGVldHNJbldvcmxkLmFwcGVuZChzdGQ6Om1ha2Vf
cGFpcih1c2VyU3R5bGVTaGVldElkZW50aWZpZXIsIFdURk1vdmUodXNlclN0eWxlU2hlZXQpKSk7
CisKKyAgICBpbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lc0luQWxs
UGFnZXMoKTsKK30KKwordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTdHls
ZVNoZWV0KEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQmIHdvcmxkLCBVc2VyU3R5bGVTaGVldCYm
IHVzZXJTdHlsZVNoZWV0KQoreworICAgIGFkZFVzZXJTdHlsZVNoZWV0SW50ZXJuYWwod29ybGQs
IDAsIFdURk1vdmUodXNlclN0eWxlU2hlZXQpKTsKK30KKwordm9pZCBXZWJVc2VyQ29udGVudENv
bnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNoZWV0V2l0aFVSTChJbmplY3RlZEJ1bmRsZVNjcmlw
dFdvcmxkJiB3b3JsZCwgY29uc3QgVVJMJiB1cmwpCit7CisgICAgYXV0byBpdCA9IG1fdXNlclN0
eWxlU2hlZXRzLmZpbmQoJndvcmxkKTsKKyAgICBpZiAoaXQgPT0gbV91c2VyU3R5bGVTaGVldHMu
ZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8mIHN0eWxlc2hlZXRzID0gaXQtPnZh
bHVlOworCisgICAgYm9vbCBzaGVldHNDaGFuZ2VkID0gZmFsc2U7CisgICAgZm9yIChpbnQgaSA9
IHN0eWxlc2hlZXRzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGlmIChzdHls
ZXNoZWV0c1tpXS5zZWNvbmQudXJsKCkgPT0gdXJsKSB7CisgICAgICAgICAgICBzdHlsZXNoZWV0
cy5yZW1vdmUoaSk7CisgICAgICAgICAgICBzaGVldHNDaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmICghc2hlZXRzQ2hhbmdlZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKHN0eWxlc2hlZXRzLmlzRW1wdHkoKSkKKyAgICAgICAgbV91c2VyU3R5bGVTaGVldHMu
cmVtb3ZlKGl0KTsKKworICAgIGludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZUluQWxs
RnJhbWVzSW5BbGxQYWdlcygpOworfQorCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6
cmVtb3ZlVXNlclN0eWxlU2hlZXRJbnRlcm5hbChJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiB3
b3JsZCwgdWludDY0X3QgdXNlclN0eWxlU2hlZXRJZGVudGlmaWVyKQoreworICAgIGF1dG8gaXQg
PSBtX3VzZXJTdHlsZVNoZWV0cy5maW5kKCZ3b3JsZCk7CisgICAgaWYgKGl0ID09IG1fdXNlclN0
eWxlU2hlZXRzLmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiBzdHlsZXNoZWV0
cyA9IGl0LT52YWx1ZTsKKworICAgIGJvb2wgc2hlZXRzQ2hhbmdlZCA9IGZhbHNlOworICAgIGZv
ciAoaW50IGkgPSBzdHlsZXNoZWV0cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAg
ICBpZiAoc3R5bGVzaGVldHNbaV0uZmlyc3QgPT0gdXNlclN0eWxlU2hlZXRJZGVudGlmaWVyKSB7
CisgICAgICAgICAgICBzdHlsZXNoZWV0cy5yZW1vdmUoaSk7CisgICAgICAgICAgICBzaGVldHND
aGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghc2hlZXRzQ2hhbmdl
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHN0eWxlc2hlZXRzLmlzRW1wdHkoKSkKKyAg
ICAgICAgbV91c2VyU3R5bGVTaGVldHMucmVtb3ZlKGl0KTsKKworICAgIGludmFsaWRhdGVJbmpl
Y3RlZFN0eWxlU2hlZXRDYWNoZUluQWxsRnJhbWVzSW5BbGxQYWdlcygpOworfQorCit2b2lkIFdl
YlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclN0eWxlU2hlZXRzKEluamVjdGVkQnVu
ZGxlU2NyaXB0V29ybGQmIHdvcmxkKQoreworICAgIGlmICghbV91c2VyU3R5bGVTaGVldHMucmVt
b3ZlKCZ3b3JsZCkpCisgICAgICAgIHJldHVybjsKKworICAgIGludmFsaWRhdGVJbmplY3RlZFN0
eWxlU2hlZXRDYWNoZUluQWxsRnJhbWVzSW5BbGxQYWdlcygpOworfQorCit2b2lkIFdlYlVzZXJD
b250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxsVXNlckNvbnRlbnQoKQoreworICAgIG1fdXNlclNj
cmlwdHMuY2xlYXIoKTsKKworICAgIGlmICghbV91c2VyU3R5bGVTaGVldHMuaXNFbXB0eSgpKSB7
CisgICAgICAgIG1fdXNlclN0eWxlU2hlZXRzLmNsZWFyKCk7CisgICAgICAgIGludmFsaWRhdGVJ
bmplY3RlZFN0eWxlU2hlZXRDYWNoZUluQWxsRnJhbWVzSW5BbGxQYWdlcygpOworICAgIH0KK30K
Kwordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmZvckVhY2hVc2VyU2NyaXB0KGNvbnN0
IHN0ZDo6ZnVuY3Rpb248dm9pZChXZWJDb3JlOjpET01XcmFwcGVyV29ybGQmLCBjb25zdCBXZWJD
b3JlOjpVc2VyU2NyaXB0Jik+JiBmdW5jdG9yKSBjb25zdAoreworICAgIGZvciAoY29uc3QgYXV0
byYgd29ybGRBbmRVc2VyU2NyaXB0VmVjdG9yIDogbV91c2VyU2NyaXB0cykgeworICAgICAgICBh
dXRvJiB3b3JsZCA9IHdvcmxkQW5kVXNlclNjcmlwdFZlY3Rvci5rZXktPmNvcmVXb3JsZCgpOwor
ICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGlkZW50aWZpZXJVc2VyU2NyaXB0UGFpciA6IHdvcmxk
QW5kVXNlclNjcmlwdFZlY3Rvci52YWx1ZSkKKyAgICAgICAgICAgIGZ1bmN0b3Iod29ybGQsIGlk
ZW50aWZpZXJVc2VyU2NyaXB0UGFpci5zZWNvbmQpOworICAgIH0KK30KKwordm9pZCBXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXI6OmZvckVhY2hVc2VyU3R5bGVTaGVldChjb25zdCBzdGQ6OmZ1bmN0
aW9uPHZvaWQoY29uc3QgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQmKT4mIGZ1bmN0b3IpIGNvbnN0
Cit7CisgICAgZm9yIChhdXRvJiBzdHlsZVNoZWV0VmVjdG9yIDogbV91c2VyU3R5bGVTaGVldHMu
dmFsdWVzKCkpIHsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpZGVudGlmaWVyVXNlclN0eWxl
U2hlZXRQYWlyIDogc3R5bGVTaGVldFZlY3RvcikKKyAgICAgICAgICAgIGZ1bmN0b3IoaWRlbnRp
ZmllclVzZXJTdHlsZVNoZWV0UGFpci5zZWNvbmQpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50L1dl
YlVzZXJDb250ZW50Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLmgJKHJldmlzaW9u
IDE5Nzg5NCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDE5IEBACiAK
ICNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKICNpbmNsdWRlICJXZWJTY3JpcHRNZXNzYWdl
SGFuZGxlci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvVXNlckNvbnRlbnRDb250cm9sbGVyLmg+Cisj
aW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9Vc2VyQ29udGVudFByb3ZpZGVyLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
LSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5T
SU9OUykKKyNpbmNsdWRlIDxXZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5oPgorI2Vu
ZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7
CisgICAgY2xhc3MgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOworfQorfQogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIApAQCAtMzgsMzAgKzQ4LDQ0IEBAIGNsYXNzIEluamVjdGVkQnVuZGxlU2NyaXB0
V29ybGQ7CiBjbGFzcyBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhOwogY2xhc3MgV2Vi
VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvclByb3h5OwogCi1jbGFzcyBXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXIgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJVc2VyQ29udGVudENvbnRy
b2xsZXI+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyICB7CitjbGFzcyBXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXIgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6VXNlckNvbnRlbnRQcm92aWRl
ciwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJl
ZjxXZWJVc2VyQ29udGVudENvbnRyb2xsZXI+IGdldE9yQ3JlYXRlKHVpbnQ2NF90IGlkZW50aWZp
ZXIpOwogICAgIHZpcnR1YWwgfldlYlVzZXJDb250ZW50Q29udHJvbGxlcigpOwogCi0gICAgV2Vi
Q29yZTo6VXNlckNvbnRlbnRDb250cm9sbGVyJiB1c2VyQ29udGVudENvbnRyb2xsZXIoKSB7IHJl
dHVybiBtX3VzZXJDb250ZW50Q29udHJvbGxlcjsgfQotCiAgICAgdWludDY0X3QgaWRlbnRpZmll
cigpIHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfSAKIAorICAgIHZvaWQgYWRkVXNlclNjcmlwdChJ
bmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiwgV2ViQ29yZTo6VXNlclNjcmlwdCYmKTsKKyAgICB2
b2lkIHJlbW92ZVVzZXJTY3JpcHRXaXRoVVJMKEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQmLCBj
b25zdCBXZWJDb3JlOjpVUkwmKTsKKyAgICB2b2lkIHJlbW92ZVVzZXJTY3JpcHRzKEluamVjdGVk
QnVuZGxlU2NyaXB0V29ybGQmKTsKKyAgICB2b2lkIGFkZFVzZXJTdHlsZVNoZWV0KEluamVjdGVk
QnVuZGxlU2NyaXB0V29ybGQmLCBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCYmKTsKKyAgICB2b2lk
IHJlbW92ZVVzZXJTdHlsZVNoZWV0V2l0aFVSTChJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiwg
Y29uc3QgV2ViQ29yZTo6VVJMJik7CisgICAgdm9pZCByZW1vdmVVc2VyU3R5bGVTaGVldHMoSW5q
ZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYpOworICAgIHZvaWQgcmVtb3ZlQWxsVXNlckNvbnRlbnQo
KTsKKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXIodWlu
dDY0X3QgaWRlbnRpZmllcik7CiAKKyAgICAvLyBXZWJDb3JlOjpVc2VyQ29udGVudFByb3ZpZGVy
CisgICAgdm9pZCBmb3JFYWNoVXNlclNjcmlwdChjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQoV2Vi
Q29yZTo6RE9NV3JhcHBlcldvcmxkJiwgY29uc3QgV2ViQ29yZTo6VXNlclNjcmlwdCYpPiYpIGNv
bnN0IG92ZXJyaWRlOworICAgIHZvaWQgZm9yRWFjaFVzZXJTdHlsZVNoZWV0KGNvbnN0IHN0ZDo6
ZnVuY3Rpb248dm9pZChjb25zdCBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCYpPiYpIGNvbnN0IG92
ZXJyaWRlOworICAgIGNvbnN0IFdlYkNvcmU6OlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JN
YXAmIHVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV91c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yc01hcDsgfQorI2lmIEVOQUJMRShDT05U
RU5UX0VYVEVOU0lPTlMpCisgICAgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRF
eHRlbnNpb25zQmFja2VuZCYgdXNlckNvbnRlbnRFeHRlbnNpb25CYWNrZW5kKCkgb3ZlcnJpZGUg
eyByZXR1cm4gbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZDsgfQorI2VuZGlmCisKICAgICAvLyBJ
UEM6Ok1lc3NhZ2VSZWNlaXZlci4KICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYsIElQQzo6TWVzc2FnZURlY29kZXImKSBvdmVycmlkZTsKIAogICAgIHZvaWQgYWRk
VXNlckNvbnRlbnRXb3JsZHMoY29uc3QgVmVjdG9yPHN0ZDo6cGFpcjx1aW50NjRfdCwgU3RyaW5n
Pj4mKTsKICAgICB2b2lkIHJlbW92ZVVzZXJDb250ZW50V29ybGRzKGNvbnN0IFZlY3Rvcjx1aW50
NjRfdD4mKTsKIAotICAgIHZvaWQgYWRkVXNlclNjcmlwdHMoY29uc3QgVmVjdG9yPHN0ZDo6cGFp
cjx1aW50NjRfdCwgV2ViQ29yZTo6VXNlclNjcmlwdD4+Jik7Ci0gICAgdm9pZCByZW1vdmVVc2Vy
U2NyaXB0KHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcp
OworICAgIHZvaWQgYWRkVXNlclNjcmlwdHMoY29uc3QgVmVjdG9yPFdlYlVzZXJTY3JpcHREYXRh
PiYpOworICAgIHZvaWQgcmVtb3ZlVXNlclNjcmlwdCh1aW50NjRfdCB3b3JsZElkZW50aWZpZXIs
IHVpbnQ2NF90IHVzZXJTY3JpcHRJZGVudGlmaWVyKTsKICAgICB2b2lkIHJlbW92ZUFsbFVzZXJT
Y3JpcHRzKGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mKTsKIAotICAgIHZvaWQgYWRkVXNlclN0eWxl
U2hlZXRzKGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0X3QsIFdlYkNvcmU6OlVzZXJTdHls
ZVNoZWV0Pj4mKTsKLSAgICB2b2lkIHJlbW92ZVVzZXJTdHlsZVNoZWV0KHVpbnQ2NF90IHdvcmxk
SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpOworICAgIHZvaWQgYWRkVXNlclN0
eWxlU2hlZXRzKGNvbnN0IFZlY3RvcjxXZWJVc2VyU3R5bGVTaGVldERhdGE+Jik7CisgICAgdm9p
ZCByZW1vdmVVc2VyU3R5bGVTaGVldCh1aW50NjRfdCB3b3JsZElkZW50aWZpZXIsIHVpbnQ2NF90
IHVzZXJTY3JpcHRJZGVudGlmaWVyKTsKICAgICB2b2lkIHJlbW92ZUFsbFVzZXJTdHlsZVNoZWV0
cyhjb25zdCBWZWN0b3I8dWludDY0X3Q+Jik7CiAKICAgICB2b2lkIGFkZFVzZXJTY3JpcHRNZXNz
YWdlSGFuZGxlcnMoY29uc3QgVmVjdG9yPFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVySGFuZGxlPiYp
OwpAQCAtNzMsMTEgKzk3LDI3IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZW1vdmVBbGxVc2VyQ29u
dGVudEV4dGVuc2lvbnMoKTsKICNlbmRpZgogCisKKyAgICB2b2lkIGFkZFVzZXJTY3JpcHRJbnRl
cm5hbChJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiwgdWludDY0X3QgdXNlclNjcmlwdElkZW50
aWZpZXIsIFdlYkNvcmU6OlVzZXJTY3JpcHQmJik7CisgICAgdm9pZCByZW1vdmVVc2VyU2NyaXB0
SW50ZXJuYWwoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYsIHVpbnQ2NF90IHVzZXJTY3JpcHRJ
ZGVudGlmaWVyKTsKKyAgICB2b2lkIGFkZFVzZXJTdHlsZVNoZWV0SW50ZXJuYWwoSW5qZWN0ZWRC
dW5kbGVTY3JpcHRXb3JsZCYsIHVpbnQ2NF90IHVzZXJTdHlsZVNoZWV0SWRlbnRpZmllciwgV2Vi
Q29yZTo6VXNlclN0eWxlU2hlZXQmJik7CisgICAgdm9pZCByZW1vdmVVc2VyU3R5bGVTaGVldElu
dGVybmFsKEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQmLCB1aW50NjRfdCB1c2VyU3R5bGVTaGVl
dElkZW50aWZpZXIpOworCisKICAgICB1aW50NjRfdCBtX2lkZW50aWZpZXI7Ci0gICAgUmVmPFdl
YkNvcmU6OlVzZXJDb250ZW50Q29udHJvbGxlcj4gbV91c2VyQ29udGVudENvbnRyb2xsZXI7Ci0j
aWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBS
ZWZQdHI8V2ViVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvclByb3h5Pj4gbV91c2VyTWVzc2Fn
ZUhhbmRsZXJEZXNjcmlwdG9yczsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8SW5qZWN0
ZWRCdW5kbGVTY3JpcHRXb3JsZD4sIFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0X3QsIFdlYkNvcmU6
OlVzZXJTY3JpcHQ+Pj4gV29ybGRUb1VzZXJTY3JpcHRNYXA7CisgICAgV29ybGRUb1VzZXJTY3Jp
cHRNYXAgbV91c2VyU2NyaXB0czsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8SW5qZWN0
ZWRCdW5kbGVTY3JpcHRXb3JsZD4sIFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0X3QsIFdlYkNvcmU6
OlVzZXJTdHlsZVNoZWV0Pj4+IFdvcmxkVG9Vc2VyU3R5bGVTaGVldE1hcDsKKyAgICBXb3JsZFRv
VXNlclN0eWxlU2hlZXRNYXAgbV91c2VyU3R5bGVTaGVldHM7CisKKyAgICBXZWJDb3JlOjpVc2Vy
TWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yTWFwIG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRv
cnNNYXA7CisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKyAgICBXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kIG1fY29udGVudEV4dGVuc2lv
bkJhY2tlbmQ7CiAjZW5kaWYKKwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJv
bGxlci5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5tZXNzYWdlcy5pbgkocmV2aXNp
b24gMTk3ODk0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJV
c2VyQ29udGVudENvbnRyb2xsZXIubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTI3LDEy
ICsyNywxMiBAQCBtZXNzYWdlcyAtPiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXIgewogICAgIEFk
ZFVzZXJDb250ZW50V29ybGRzKFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0X3QsIFN0cmluZz4+IHdv
cmxkcyk7CiAgICAgUmVtb3ZlVXNlckNvbnRlbnRXb3JsZHMoVmVjdG9yPHVpbnQ2NF90PiB3b3Js
ZElkZW50aWZpZXJzKTsKIAotICAgIEFkZFVzZXJTY3JpcHRzKFZlY3RvcjxzdGQ6OnBhaXI8dWlu
dDY0X3QsIFdlYkNvcmU6OlVzZXJTY3JpcHQ+PiB1c2VyU2NyaXB0cyk7Ci0gICAgUmVtb3ZlVXNl
clNjcmlwdCh1aW50NjRfdCB3b3JsZElkZW50aWZpZXIsIFN0cmluZyB1cmwpOworICAgIEFkZFVz
ZXJTY3JpcHRzKFZlY3RvcjxzdHJ1Y3QgV2ViS2l0OjpXZWJVc2VyU2NyaXB0RGF0YT4gdXNlclNj
cmlwdHMpOworICAgIFJlbW92ZVVzZXJTY3JpcHQodWludDY0X3Qgd29ybGRJZGVudGlmaWVyLCB1
aW50NjRfdCBpZGVudGlmaWVyKTsKICAgICBSZW1vdmVBbGxVc2VyU2NyaXB0cyhWZWN0b3I8dWlu
dDY0X3Q+IHdvcmxkSWRlbnRpZmllcnMpOwogCi0gICAgQWRkVXNlclN0eWxlU2hlZXRzKFZlY3Rv
cjxzdGQ6OnBhaXI8dWludDY0X3QsIFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0Pj4gdXNlclN0eWxl
U2hlZXRzKTsKLSAgICBSZW1vdmVVc2VyU3R5bGVTaGVldCh1aW50NjRfdCB3b3JsZElkZW50aWZp
ZXIsIFN0cmluZyB1cmwpOworICAgIEFkZFVzZXJTdHlsZVNoZWV0cyhWZWN0b3I8c3RydWN0IFdl
YktpdDo6V2ViVXNlclN0eWxlU2hlZXREYXRhPiB1c2VyU3R5bGVTaGVldHMpOworICAgIFJlbW92
ZVVzZXJTdHlsZVNoZWV0KHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllciwgdWludDY0X3QgaWRlbnRp
Zmllcik7CiAgICAgUmVtb3ZlQWxsVXNlclN0eWxlU2hlZXRzKFZlY3Rvcjx1aW50NjRfdD4gd29y
bGRJZGVudGlmaWVycyk7CiAKICAgICBBZGRVc2VyU2NyaXB0TWVzc2FnZUhhbmRsZXJzKFZlY3Rv
cjxXZWJLaXQ6OldlYlNjcmlwdE1lc3NhZ2VIYW5kbGVySGFuZGxlPiBzY3JpcHRNZXNzYWdlSGFu
ZGxlcnMpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcAkocmV2aXNpb24gMTk3ODk0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5j
bHVkZSAiRXZlbnREaXNwYXRjaGVyLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGUuaCIKICNp
bmNsdWRlICJJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdC5oIgorI2luY2x1ZGUgIkluamVj
dGVkQnVuZGxlU2NyaXB0V29ybGQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAi
TmV0c2NhcGVQbHVnaW4uaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXIuaCIKQEAgLTM5Niw3ICszOTcsNyBAQCBXZWJQYWdlOjpXZWJQYWdlKHVpbnQ2NF90
IHBhZ2VJRCwgY29uc3QgCiAKICAgICBwYWdlQ29uZmlndXJhdGlvbi5kYXRhYmFzZVByb3ZpZGVy
ID0gV2ViRGF0YWJhc2VQcm92aWRlcjo6Z2V0T3JDcmVhdGUobV9wYWdlR3JvdXAtPnBhZ2VHcm91
cElEKCkpOwogICAgIHBhZ2VDb25maWd1cmF0aW9uLnN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlciA9
IFdlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcjo6Z2V0T3JDcmVhdGUobV9wYWdlR3JvdXAtPnBh
Z2VHcm91cElEKCkpOwotICAgIHBhZ2VDb25maWd1cmF0aW9uLnVzZXJDb250ZW50Q29udHJvbGxl
ciA9ICZtX3VzZXJDb250ZW50Q29udHJvbGxlci0+dXNlckNvbnRlbnRDb250cm9sbGVyKCk7Cisg
ICAgcGFnZUNvbmZpZ3VyYXRpb24udXNlckNvbnRlbnRQcm92aWRlciA9IG1fdXNlckNvbnRlbnRD
b250cm9sbGVyLnB0cigpOwogICAgIHBhZ2VDb25maWd1cmF0aW9uLnZpc2l0ZWRMaW5rU3RvcmUg
PSBWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjo6Z2V0T3JDcmVhdGUocGFyYW1ldGVycy52aXNp
dGVkTGlua1RhYmxlSUQpOwogCiAjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKQEAgLTUyMDQs
MjEgKzUyMDUsMjEgQEAgdm9pZCBXZWJQYWdlOjppbWFnZU9yTWVkaWFEb2N1bWVudFNpemVDaAog
CiB2b2lkIFdlYlBhZ2U6OmFkZFVzZXJTY3JpcHQoY29uc3QgU3RyaW5nJiBzb3VyY2UsIFdlYkNv
cmU6OlVzZXJDb250ZW50SW5qZWN0ZWRGcmFtZXMgaW5qZWN0ZWRGcmFtZXMsIFdlYkNvcmU6OlVz
ZXJTY3JpcHRJbmplY3Rpb25UaW1lIGluamVjdGlvblRpbWUpCiB7Ci0gICAgV2ViQ29yZTo6VXNl
clNjcmlwdCB1c2VyU2NyaXB0KHNvdXJjZSwgV2ViQ29yZTo6YmxhbmtVUkwoKSwgVmVjdG9yPFN0
cmluZz4oKSwgVmVjdG9yPFN0cmluZz4oKSwgaW5qZWN0aW9uVGltZSwgaW5qZWN0ZWRGcmFtZXMp
OworICAgIFdlYkNvcmU6OlVzZXJTY3JpcHQgdXNlclNjcmlwdHsgc291cmNlLCBXZWJDb3JlOjpi
bGFua1VSTCgpLCBWZWN0b3I8U3RyaW5nPigpLCBWZWN0b3I8U3RyaW5nPigpLCBpbmplY3Rpb25U
aW1lLCBpbmplY3RlZEZyYW1lcyB9OwogCi0gICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPnVz
ZXJDb250ZW50Q29udHJvbGxlcigpLmFkZFVzZXJTY3JpcHQobWFpblRocmVhZE5vcm1hbFdvcmxk
KCksIHN0ZDo6bWFrZV91bmlxdWU8V2ViQ29yZTo6VXNlclNjcmlwdD4odXNlclNjcmlwdCkpOwor
ICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5hZGRVc2VyU2NyaXB0KCpJbmplY3RlZEJ1bmRs
ZVNjcmlwdFdvcmxkOjpub3JtYWxXb3JsZCgpLCBXVEZNb3ZlKHVzZXJTY3JpcHQpKTsKIH0KIAog
dm9pZCBXZWJQYWdlOjphZGRVc2VyU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHNvdXJjZSwgV2Vi
Q29yZTo6VXNlckNvbnRlbnRJbmplY3RlZEZyYW1lcyBpbmplY3RlZEZyYW1lcykKIHsKLSAgICBX
ZWJDb3JlOjpVc2VyU3R5bGVTaGVldCB1c2VyU3R5bGVTaGVldChzb3VyY2UsIFdlYkNvcmU6OmJs
YW5rVVJMKCksIFZlY3RvcjxTdHJpbmc+KCksIFZlY3RvcjxTdHJpbmc+KCksIGluamVjdGVkRnJh
bWVzLCBVc2VyU3R5bGVVc2VyTGV2ZWwpOworICAgIFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0IHVz
ZXJTdHlsZVNoZWV0eyBzb3VyY2UsIFdlYkNvcmU6OmJsYW5rVVJMKCksIFZlY3RvcjxTdHJpbmc+
KCksIFZlY3RvcjxTdHJpbmc+KCksIGluamVjdGVkRnJhbWVzLCBVc2VyU3R5bGVVc2VyTGV2ZWwg
fTsKIAotICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT51c2VyQ29udGVudENvbnRyb2xsZXIo
KS5hZGRVc2VyU3R5bGVTaGVldChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSwgc3RkOjptYWtlX3Vu
aXF1ZTxXZWJDb3JlOjpVc2VyU3R5bGVTaGVldD4odXNlclN0eWxlU2hlZXQpLCBJbmplY3RJbkV4
aXN0aW5nRG9jdW1lbnRzKTsKKyAgICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+YWRkVXNlclN0
eWxlU2hlZXQoKkluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQ6Om5vcm1hbFdvcmxkKCksIFdURk1v
dmUodXNlclN0eWxlU2hlZXQpKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpyZW1vdmVBbGxVc2VyQ29u
dGVudCgpCiB7Ci0gICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPnVzZXJDb250ZW50Q29udHJv
bGxlcigpLnJlbW92ZUFsbFVzZXJDb250ZW50KCk7CisgICAgbV91c2VyQ29udGVudENvbnRyb2xs
ZXItPnJlbW92ZUFsbFVzZXJDb250ZW50KCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6ZGlzcGF0Y2hE
aWRMYXlvdXQoV2ViQ29yZTo6TGF5b3V0TWlsZXN0b25lcyBtaWxlc3RvbmVzKQpJbmRleDogU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3Vw
UHJveHkuY3BwCShyZXZpc2lvbiAxOTc4OTQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw5ICs1
Niw5IEBAIFdlYlBhZ2VHcm91cFByb3h5Ojp+V2ViUGFnZUdyb3VwUHJveHkoKQogewogfQogCi1X
ZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXImIFdlYlBhZ2VHcm91cFByb3h5Ojp1c2VyQ29u
dGVudENvbnRyb2xsZXIoKQorV2ViVXNlckNvbnRlbnRDb250cm9sbGVyJiBXZWJQYWdlR3JvdXBQ
cm94eTo6dXNlckNvbnRlbnRDb250cm9sbGVyKCkKIHsKLSAgICByZXR1cm4gbV91c2VyQ29udGVu
dENvbnRyb2xsZXItPnVzZXJDb250ZW50Q29udHJvbGxlcigpOworICAgIHJldHVybiBtX3VzZXJD
b250ZW50Q29udHJvbGxlcjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJv
eHkuaAkocmV2aXNpb24gMTk3ODk0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2VHcm91cFByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgUGFnZUdyb3VwOwotY2xhc3MgVXNlckNvbnRl
bnRDb250cm9sbGVyOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTUwLDcgKzQ5LDcgQEAg
cHVibGljOgogICAgIGJvb2wgaXNWaXNpYmxlVG9IaXN0b3J5Q2xpZW50KCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhLnZpc2libGVUb0hpc3RvcnlDbGllbnQ7IH0KICAgICBXZWJDb3JlOjpQYWdlR3Jv
dXAqIGNvcmVQYWdlR3JvdXAoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VHcm91cDsgfQogCi0gICAg
V2ViQ29yZTo6VXNlckNvbnRlbnRDb250cm9sbGVyJiB1c2VyQ29udGVudENvbnRyb2xsZXIoKTsK
KyAgICBXZWJVc2VyQ29udGVudENvbnRyb2xsZXImIHVzZXJDb250ZW50Q29udHJvbGxlcigpOwog
CiBwcml2YXRlOgogICAgIFdlYlBhZ2VHcm91cFByb3h5KGNvbnN0IFdlYlBhZ2VHcm91cERhdGEm
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5Nzg5NCkKKysrIFNvdXJjZS9XZWJL
aXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE2LTAz
LTA4ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIGEgYmFzZVVS
TCBwYXJhbWV0ZXIgdG8gX1dLVXNlclN0eWxlU2hlZXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTIxOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAo
LVtXZWJWaWV3IF9jb21tb25Jbml0aWFsaXphdGlvbldpdGhGcmFtZU5hbWU6Z3JvdXBOYW1lOl0p
OgorICAgICAgICAoLVtXZWJWaWV3IGluaXRTaW1wbGVIVE1MRG9jdW1lbnRXaXRoU3R5bGU6ZnJh
bWU6cHJlZmVyZW5jZXM6Z3JvdXBOYW1lOl0pOgorICAgICAgICAoLVtXZWJWaWV3IHNldEdyb3Vw
TmFtZTpdKToKKyAgICAgICAgVXBkYXRlIHRvIGFjY291bnQgZm9yIHRoZSBuYW1lIGNoYW5nZSBm
cm9tIFVzZXJDb250ZW50Q29udHJvbGxlciAtPiBVc2VyQ29udGVudFByb3ZpZGVyLgorCiAyMDE2
LTAzLTA4ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgU3RhcnQg
bW92aW5nIHRvIHNlcGFyYXRlZCB3cml0YWJsZSBhbmQgZXhlY3V0YWJsZSBtYXBwaW5ncyBpbiB0
aGUgSklUCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiAx
OTc4OTQpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTEwMDQsNyArMTAwNCw3IEBAIC0gKHZvaWQpX2NvbW1vbkluaXRpYWxpemF0aW9u
V2l0aEZyYW1lTmEKICAgICBwYWdlQ29uZmlndXJhdGlvbi5wcm9ncmVzc1RyYWNrZXJDbGllbnQg
PSBuZXcgV2ViUHJvZ3Jlc3NUcmFja2VyQ2xpZW50KHNlbGYpOwogICAgIHBhZ2VDb25maWd1cmF0
aW9uLmRhdGFiYXNlUHJvdmlkZXIgPSAmV2ViRGF0YWJhc2VQcm92aWRlcjo6c2luZ2xldG9uKCk7
CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24uc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyID0gJl9wcml2
YXRlLT5ncm91cC0+c3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyKCk7Ci0gICAgcGFnZUNvbmZpZ3Vy
YXRpb24udXNlckNvbnRlbnRDb250cm9sbGVyID0gJl9wcml2YXRlLT5ncm91cC0+dXNlckNvbnRl
bnRDb250cm9sbGVyKCk7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24udXNlckNvbnRlbnRQcm92aWRl
ciA9ICZfcHJpdmF0ZS0+Z3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigpOwogICAgIHBhZ2VD
b25maWd1cmF0aW9uLnZpc2l0ZWRMaW5rU3RvcmUgPSAmX3ByaXZhdGUtPmdyb3VwLT52aXNpdGVk
TGlua1N0b3JlKCk7CiAgICAgX3ByaXZhdGUtPnBhZ2UgPSBuZXcgUGFnZShwYWdlQ29uZmlndXJh
dGlvbik7CiAKQEAgLTEyNDksNyArMTI0OSw3IEBAIC0gKGlkKWluaXRTaW1wbGVIVE1MRG9jdW1l
bnRXaXRoU3R5bGU6KE4KICAgICBwYWdlQ29uZmlndXJhdGlvbi5wcm9ncmVzc1RyYWNrZXJDbGll
bnQgPSBuZXcgV2ViUHJvZ3Jlc3NUcmFja2VyQ2xpZW50KHNlbGYpOwogICAgIHBhZ2VDb25maWd1
cmF0aW9uLmRhdGFiYXNlUHJvdmlkZXIgPSAmV2ViRGF0YWJhc2VQcm92aWRlcjo6c2luZ2xldG9u
KCk7CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24uc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyID0gJl9w
cml2YXRlLT5ncm91cC0+c3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyKCk7Ci0gICAgcGFnZUNvbmZp
Z3VyYXRpb24udXNlckNvbnRlbnRDb250cm9sbGVyID0gJl9wcml2YXRlLT5ncm91cC0+dXNlckNv
bnRlbnRDb250cm9sbGVyKCk7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24udXNlckNvbnRlbnRQcm92
aWRlciA9ICZfcHJpdmF0ZS0+Z3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigpOwogICAgIHBh
Z2VDb25maWd1cmF0aW9uLnZpc2l0ZWRMaW5rU3RvcmUgPSAmX3ByaXZhdGUtPmdyb3VwLT52aXNp
dGVkTGlua1N0b3JlKCk7CiAKICAgICBfcHJpdmF0ZS0+cGFnZSA9IG5ldyBQYWdlKHBhZ2VDb25m
aWd1cmF0aW9uKTsKQEAgLTYxOTUsNyArNjE5NSw3IEBAIC0gKHZvaWQpc2V0R3JvdXBOYW1lOihO
U1N0cmluZyAqKWdyb3VwTmEKICAgICBpZiAoIV9wcml2YXRlLT5wYWdlKQogICAgICAgICByZXR1
cm47CiAKLSAgICBfcHJpdmF0ZS0+cGFnZS0+c2V0VXNlckNvbnRlbnRDb250cm9sbGVyKCZfcHJp
dmF0ZS0+Z3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigpKTsKKyAgICBfcHJpdmF0ZS0+cGFn
ZS0+c2V0VXNlckNvbnRlbnRQcm92aWRlcihfcHJpdmF0ZS0+Z3JvdXAtPnVzZXJDb250ZW50Q29u
dHJvbGxlcigpKTsKICAgICBfcHJpdmF0ZS0+cGFnZS0+c2V0VmlzaXRlZExpbmtTdG9yZShfcHJp
dmF0ZS0+Z3JvdXAtPnZpc2l0ZWRMaW5rU3RvcmUoKSk7CiAgICAgX3ByaXZhdGUtPnBhZ2UtPnNl
dEdyb3VwTmFtZShncm91cE5hbWUpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273522</attachid>
            <date>2016-03-09 17:55:59 -0800</date>
            <delta_ts>2016-03-10 09:30:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155219-20160309175546.patch</filename>
            <type>text/plain</type>
            <size>114146</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NzkxMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBAQAorMjAxNi0wMy0wOCAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBhIGJhc2VVUkwgcGFyYW1ldGVy
IHRvIF9XS1VzZXJTdHlsZVNoZWV0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTUyMTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAtIE1vdmVzIHRvIGEgbW9kZWwgZm9yIHVzZXIgY29udGVudCB3aGVyZSBp
bnN0ZWFkIG9mIGVhY2ggcGFnZSBoYXZpbmcgYSBXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xs
ZXIKKyAgICAgICAgICBvYmplY3QsIHdlIGhhdmUgYW4gYWJzdHJhY3QgV2ViQ29yZTo6VXNlckNv
bnRlbnRQcm92aWRlciBpbnRlcmZhY2UgdGhhdCBjYW4gYmUgaW1wbGVtZW50ZWQgYXQgdGhlIFdl
YktpdAorICAgICAgICAgIGxldmVsLiBGb3Igbm93LCBsZWdhY3kgV2ViS2l0IGNvbnRpbnVlcyB0
byB1c2UgdGhlIG9sZCBVc2VyQ29udGVudENvbnRyb2xsZXIsIHdoaWNoIGltcGxlbWVudHMgCisg
ICAgICAgICAgV2ViQ29yZTo6VXNlckNvbnRlbnRQcm92aWRlciwgYW5kIFdlYktpdDIgaW1wbGVt
ZW50cyBpdHMgb3duIGltcGxlbWVudGF0aW9uIHNvIGl0IGNhbiBzdG9yZSBhZGRpdGlvbmFsCisg
ICAgICAgICAgc3RhdGUuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgIEFkZCBuZXcgZmlsZXMuCisKKyAgICAgICAgKiBkb20vRXh0ZW5zaW9u
U3R5bGVTaGVldHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uU3R5bGVTaGVldHM6
OnVwZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlKToKKyAgICAgICAgU3dpdGNoIHRvIHVzaW5n
IGZvckVhY2hVc2VyU3R5bGVTaGVldCBvbiB0aGUgVXNlckNvbnRlbnRQcm92aWRlci4KKworICAg
ICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50Ojpsb2FkUmVzb3VyY2UpOgorICAgICAgICBSZW1vdmUgbnVsbCBjaGVjayBu
b3cgdGhhdCB3ZSBhbHdheXMgaGF2ZSBhIFVzZXJDb250ZW50UHJvdmlkZXIuCisKKyAgICAgICAg
KiBsb2FkZXIvRW1wdHlDbGllbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxXaXRoRW1w
dHlDbGllbnRzKToKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgIEFk
ZCBuZXcgRW1wdHlDbGllbnRzLgorCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5
KToKKyAgICAgICAgUmVtb3ZlIG51bGwgY2hlY2sgbm93IHRoYXQgd2UgYWx3YXlzIGhhdmUgYSBV
c2VyQ29udGVudFByb3ZpZGVyLgorCisgICAgICAgICogbG9hZGVyL1BpbmdMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQpOgor
ICAgICAgICBSZW1vdmUgbnVsbCBjaGVjayBub3cgdGhhdCB3ZSBhbHdheXMgaGF2ZSBhIFVzZXJD
b250ZW50UHJvdmlkZXIuCisKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdEludGVybmFs
KToKKyAgICAgICAgUmVtb3ZlIG51bGwgY2hlY2sgbm93IHRoYXQgd2UgYWx3YXlzIGhhdmUgYSBV
c2VyQ29udGVudFByb3ZpZGVyLgorCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpy
ZXF1ZXN0UmVzb3VyY2UpOgorICAgICAgICBSZW1vdmUgbnVsbCBjaGVjayBub3cgdGhhdCB3ZSBh
bHdheXMgaGF2ZSBhIFVzZXJDb250ZW50UHJvdmlkZXIuCisKKyAgICAgICAgKiBwYWdlL0RPTVdp
bmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OnNob3VsZEhhdmVXZWJLaXRO
YW1lc3BhY2VGb3JXb3JsZCk6CisgICAgICAgIFJlbW92ZSBudWxsIGNoZWNrcyBub3cgdGhhdCB3
ZSBhbHdheXMgaGF2ZSBhIFVzZXJDb250ZW50UHJvdmlkZXIsIGFuZCB1c2VyTWVzc2FnZUhhbmRs
ZXJEZXNjcmlwdG9ycworICAgICAgICByZXR1cm5zIGEgcmVmZXJlbmNlLgorCisgICAgICAgIChX
ZWJDb3JlOjpET01XaW5kb3c6Om9wZW4pOgorICAgICAgICBSZW1vdmUgbnVsbCBjaGVjayBub3cg
dGhhdCB3ZSBhbHdheXMgaGF2ZSBhIFVzZXJDb250ZW50UHJvdmlkZXIuCisKKyAgICAgICAgKiBw
YWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjppbmplY3RVc2VyU2NyaXB0
cyk6CisgICAgICAgIFNpbXBsaWZ5IGJ5IGxpZnRpbmcgZG9jdW1lbnQgY2hlY2sgb3V0IG9mIHRo
ZSBtYWluIGxvb3AgYW5kIHVzaW5nIGZvckVhY2hVc2VyU2NyaXB0LgorCisgICAgICAgICogcGFn
ZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OlBhZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZTo6flBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6dXNlckNvbnRlbnRQ
cm92aWRlcik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRVc2VyQ29udGVudFByb3ZpZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldFVzZXJDb250ZW50Q29udHJvbGxlcik6IERl
bGV0ZWQuCisgICAgICAgICogcGFnZS9QYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp1
c2VyQ29udGVudENvbnRyb2xsZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvUGFnZUNvbmZp
Z3VyYXRpb24uaDoKKyAgICAgICAgU3RvcmUgdGhlIFVzZXJDb250ZW50UHJvdmlkZXIgaW4gYSBS
ZWYsIGFuZCByZXF1aXJlIFBhZ2VDb25maWd1cmF0aW9ucyB0byBwcm92aWRlIG9uZS4gVGhpcwor
ICAgICAgICByZW1vdmVzIGEgYnVuY2ggb2YgbnVsbCBjaGVja3MgYW5kIHNpbXBsaWZpZXMgdGhl
IGNvZGUuCisKKyAgICAgICAgKiBwYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6On5Vc2VyQ29udGVudENvbnRyb2xs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRlbnRDb250cm9sbGVyOjpmb3JFYWNoVXNl
clNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OmZvckVh
Y2hVc2VyU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xs
ZXI6OmFkZFVzZXJTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRlbnRDb250cm9s
bGVyOjpyZW1vdmVVc2VyU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlwdHMpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRl
bnRDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpVc2Vy
Q29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNv
cmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclN0eWxlU2hlZXRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlck1lc3NhZ2VIYW5kbGVy
RGVzY3JpcHRvcik6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OnJl
bW92ZVVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IpOgorICAgICAgICAoV2ViQ29yZTo6VXNl
ckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyQ29udGVudEV4dGVuc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxsVXNl
ckNvbnRlbnRFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJv
bGxlcjo6cmVtb3ZlQWxsVXNlckNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRl
bnRDb250cm9sbGVyOjphZGRQYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlVzZXJD
b250ZW50Q29udHJvbGxlcjo6cmVtb3ZlUGFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
Ojpjb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
VXNlckNvbnRlbnRDb250cm9sbGVyOjpwcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9yTG9h
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OmFj
dGlvbnNGb3JSZXNvdXJjZUxvYWQpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvVXNlckNvbnRl
bnRDb250cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6
OnVzZXJTY3JpcHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6dXNlclN0eWxlU2hlZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlVz
ZXJDb250ZW50Q29udHJvbGxlcjo6dXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMpOiBEZWxl
dGVkLgorICAgICAgICBBZGQgaW5oZXJpdGFuY2UgZnJvbSBVc2VyQ29udGVudFByb3ZpZGVyIGFu
ZCBzaW1wbGlmeSB0aGluZ3MgYnkgcmVtb3ZpbmcgdW5pcXVlX3B0cnMKKyAgICAgICAgdGhhdCB3
ZXJlIGhvbGRpbmcgdGhlIG1lbWJlciB2YXJpYWJsZXMuIFRoZXJlIGlzIHVzdWFsbHkgb25seSBv
bmUgVXNlckNvbnRlbnRDb250cm9sbGVyCisgICAgICAgIHNvIGhhdmluZyB0aGVzZSBpbiB1bmlx
dWVfcHRycyBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZS4KKyAgICAgICAgCisgICAgICAgICogcGFn
ZS9Vc2VyQ29udGVudFByb3ZpZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpVc2Vy
Q29udGVudFByb3ZpZGVyOjpVc2VyQ29udGVudFByb3ZpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlVzZXJDb250ZW50UHJvdmlkZXI6On5Vc2VyQ29udGVudFByb3ZpZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlVzZXJDb250ZW50UHJvdmlkZXI6OmFkZFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
VXNlckNvbnRlbnRQcm92aWRlcjo6cmVtb3ZlUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpVc2Vy
Q29udGVudFByb3ZpZGVyOjppbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZy
YW1lc0luQWxsUGFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGVudEV4dGVuc2lvbnNFbmFi
bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50UHJvdmlkZXI6OnByb2Nlc3NDb250
ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50
UHJvdmlkZXI6OmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQpOgorICAgICAgICAqIHBhZ2UvVXNlckNv
bnRlbnRQcm92aWRlci5oOiBBZGRlZC4KKyAgICAgICAgQWRkIGFic3RyYWN0IGNsYXNzIGZvciBw
cm92aWRpbmcgdXNlciBjb250ZW50IGFuZCBhZGQgc29tZSBoZWxwZXJzIG9uIGl0LgorCisgICAg
ICAgICogcGFnZS9Vc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yLmg6CisgICAgICAgIChXZWJD
b3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcjo6Y2xpZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3I6OmludmFsaWRhdGVDbGllbnQpOgor
ICAgICAgICAqIHBhZ2UvVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlOjpoYW5kbGVyKToKKyAgICAg
ICAgU2ltcGxpZnkgbm93IHRoYXQgdXNlckNvbnRlbnRQcm92aWRlcigpIGFuZCB1c2VyTWVzc2Fn
ZUhhbmRsZXJEZXNjcmlwdG9ycygpIGFyZSByZWZlcmVuY2VzLgorCiAyMDE2LTAzLTA5ICBEYW5p
ZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggdGhlIFdpbmRvd3Mg
YnVpbGQgYWZ0ZXIgPGh0dHBzOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8xOTc5MDU+Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxOTc5MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI3NDAsNiArMjc0MCw4IEBACiAJ
CTdDM0I3OTcyMTkwODc1N0IwMEI0N0EyRCAvKiBVc2VyTWVzc2FnZUhhbmRsZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDM0I3OTcwMTkwODc1N0Iw
MEI0N0EyRCAvKiBVc2VyTWVzc2FnZUhhbmRsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzNFNTEwQTE4REY4RjM1MDBDMTEyRjcgLyogSFRN
TENvbnZlcnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0MzRTUxMDgxOERGOEYzNTAwQzExMkY3IC8qIEhUTUxDb252ZXJ0ZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzNFNTEwQjE4REY4RjM1
MDBDMTEyRjcgLyogSFRNTENvbnZlcnRlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdDM0U1MTA5MThERjhGMzUwMEMxMTJGNyAvKiBIVE1MQ29udmVy
dGVyLm1tICovOyB9OworCQk3QzNGMDFDMTFDOEU1QUJBMDBBREQ5NjIgLyogVXNlckNvbnRlbnRQ
cm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0MzRjAxQzAxQzhFNUFCMTAwQUREOTYyIC8qIFVzZXJDb250ZW50UHJvdmlkZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3QzNGMDFDMjFDOEU1
QUMyMDBBREQ5NjIgLyogVXNlckNvbnRlbnRQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzNGMDFCRjFDOEU1QUIxMDBBREQ5NjIgLyog
VXNlckNvbnRlbnRQcm92aWRlci5jcHAgKi87IH07CiAJCTdDNDhBNkQwMTkxQzlENjUwMDAyNjY3
NCAvKiBXZWJLaXROYW1lc3BhY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0M0OEE2Q0UxOTFDOUQ2NTAwMDI2Njc0IC8qIFdlYktpdE5hbWVzcGFj
ZS5jcHAgKi87IH07CiAJCTdDNDhBNkQxMTkxQzlENjUwMDAyNjY3NCAvKiBXZWJLaXROYW1lc3Bh
Y2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNDhB
NkNGMTkxQzlENjUwMDAyNjY3NCAvKiBXZWJLaXROYW1lc3BhY2UuaCAqLzsgfTsKIAkJN0M0OTAy
QTIxOEI4MjVGODAwN0Q5Mjk4IC8qIERPTVdoZWVsRXZlbnRJbnRlcm5hbC5oIGluIENvcHkgR2Vu
ZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODU5ODlE
Q0EwQUNDOEJCRDAwQTBCQzUxIC8qIERPTVdoZWVsRXZlbnRJbnRlcm5hbC5oICovOyB9OwpAQCAt
MTAzNzksNiArMTAzODEsOCBAQAogCQk3QzNCNzk3MDE5MDg3NTdCMDBCNDdBMkQgLyogVXNlck1l
c3NhZ2VIYW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVzZXJNZXNz
YWdlSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzNFNTEwODE4REY4
RjM1MDBDMTEyRjcgLyogSFRNTENvbnZlcnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBIVE1MQ29udmVydGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdD
M0U1MTA5MThERjhGMzUwMEMxMTJGNyAvKiBIVE1MQ29udmVydGVyLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSFRNTENvbnZlcnRlci5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJN0MzRjAxQkYxQzhFNUFCMTAwQUREOTYyIC8qIFVzZXJDb250ZW50
UHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVXNlckNv
bnRlbnRQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDM0YwMUMw
MUM4RTVBQjEwMEFERDk2MiAvKiBVc2VyQ29udGVudFByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFVzZXJDb250ZW50UHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0M0MTg5QUIxQjA3QzE3MDAwMEZBNzU3IC8qIEdsb2JhbEV2ZW50SGFu
ZGxlcnMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IEdsb2JhbEV2ZW50SGFuZGxlcnMuaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3QzQxODlBQzFCMDdDQkYyMDAwRkE3NTcgLyogV2luZG93RXZlbnRIYW5k
bGVycy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gV2luZG93RXZlbnRIYW5kbGVycy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdDNDhBNkNFMTkxQzlENjUwMDAyNjY3NCAvKiBXZWJLaXROYW1lc3BhY2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0TmFtZXNwYWNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4MTEzLDYgKzE4MTE3LDggQEAK
IAkJCQkyRDRGOTZGMjFBMUVDQzI0MDA5OEJGODggLyogVGV4dEluZGljYXRvci5oICovLAogCQkJ
CTFBRTc5RDQwMTg4REI2MUYwMDIyMzlDMiAvKiBVc2VyQ29udGVudENvbnRyb2xsZXIuY3BwICov
LAogCQkJCTFBRTc5RDQxMTg4REI2MUYwMDIyMzlDMiAvKiBVc2VyQ29udGVudENvbnRyb2xsZXIu
aCAqLywKKwkJCQk3QzNGMDFCRjFDOEU1QUIxMDBBREQ5NjIgLyogVXNlckNvbnRlbnRQcm92aWRl
ci5jcHAgKi8sCisJCQkJN0MzRjAxQzAxQzhFNUFCMTAwQUREOTYyIC8qIFVzZXJDb250ZW50UHJv
dmlkZXIuaCAqLywKIAkJCQkwMDNGMUZFOTExRTZBQjQzMDA4MjU4RDkgLyogVXNlckNvbnRlbnRU
eXBlcy5oICovLAogCQkJCUJDQUNGM0JBMTA3MjkyMUEwMEMwQzhBMyAvKiBVc2VyQ29udGVudFVS
TFBhdHRlcm4uY3BwICovLAogCQkJCUJDQUNGM0JCMTA3MjkyMUEwMEMwQzhBMyAvKiBVc2VyQ29u
dGVudFVSTFBhdHRlcm4uaCAqLywKQEAgLTI4MjQ3LDYgKzI4MjUzLDcgQEAKIAkJCQkwODhDMkY3
QTEyMzkwMDgxMDAzRDY1Q0UgLyogU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTA4MTA5M0RDMTI1NUYwRTcwMEVEOUQyOSAvKiBTVkdUZXh0TGF5b3V0QXR0cmli
dXRlc0J1aWxkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4MTY2OERBMTI1NjAzRDUwMDZGMjVE
RSAvKiBTVkdUZXh0TGF5b3V0RW5naW5lLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzNGMDFDMTFD
OEU1QUJBMDBBREQ5NjIgLyogVXNlckNvbnRlbnRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMDgwRTQ5MjYxMjU1RjNCRDAwRUZDQTI3IC8qIFNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGlu
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDgwRTQ5MjgxMjU1RjNCRDAwRUZDQTI3IC8qIFNWR1Rl
eHRMYXlvdXRFbmdpbmVTcGFjaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEYwQkZDNjEyNTVD
NTNDMDAwNzUxODUgLyogU1ZHVGV4dE1ldHJpY3MuaCBpbiBIZWFkZXJzICovLApAQCAtMzA0MjIs
NiArMzA0MjksNyBAQAogCQkJCTUxMUVGMkQxMTdGMEZERjEwMEU0RkExNiAvKiBKU0lEQk9iamVj
dFN0b3JlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMUVGMkM4MTdGMEZEMzUwMEU0
RkExNiAvKiBKU0lEQk9wZW5EQlJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTExRUYy
QzkxN0YwRkQzNTAwRTRGQTE2IC8qIEpTSURCUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk3QzNGMDFDMjFDOEU1QUMyMDBBREQ5NjIgLyogVXNlckNvbnRlbnRQcm92aWRlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MTFFRjJDQTE3RjBGRDM1MDBFNEZBMTYgLyogSlNJREJUcmFuc2Fj
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTFFRjJDQjE3RjBGRDM1MDBFNEZBMTYgLyog
SlNJREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM2QzQ5RjMw
RDdEQkEwNTAwRkZBNTU4IC8qIEpTSW1hZ2VDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FeHRlbnNpb25TdHlsZVNoZWV0cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V4dGVuc2lvblN0eWxlU2hlZXRzLmNwcAkocmV2
aXNpb24gMTk3OTEyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V4dGVuc2lvblN0eWxlU2hlZXRz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNywyNCBAQCB2b2lkIEV4dGVuc2lvblN0
eWxlU2hlZXRzOjp1cGRhdGVJbmplY3RlCiAgICAgaWYgKCFvd25pbmdQYWdlKQogICAgICAgICBy
ZXR1cm47CiAKKyAgICBvd25pbmdQYWdlLT51c2VyQ29udGVudFByb3ZpZGVyKCkuZm9yRWFjaFVz
ZXJTdHlsZVNoZWV0KFsmXShjb25zdCBVc2VyU3R5bGVTaGVldCYgdXNlclN0eWxlU2hlZXQpIHsK
KyAgICAgICAgaWYgKHVzZXJTdHlsZVNoZWV0LmluamVjdGVkRnJhbWVzKCkgPT0gSW5qZWN0SW5U
b3BGcmFtZU9ubHkgJiYgbV9kb2N1bWVudC5vd25lckVsZW1lbnQoKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBpZiAoIVVzZXJDb250ZW50VVJMUGF0dGVybjo6bWF0Y2hlc1BhdHRl
cm5zKG1fZG9jdW1lbnQudXJsKCksIHVzZXJTdHlsZVNoZWV0LndoaXRlbGlzdCgpLCB1c2VyU3R5
bGVTaGVldC5ibGFja2xpc3QoKSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgUmVm
UHRyPENTU1N0eWxlU2hlZXQ+IHNoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlSW5saW5lKGNv
bnN0X2Nhc3Q8RG9jdW1lbnQmPihtX2RvY3VtZW50KSwgdXNlclN0eWxlU2hlZXQudXJsKCkpOwor
ICAgICAgICBib29sIGlzVXNlclN0eWxlU2hlZXQgPSB1c2VyU3R5bGVTaGVldC5sZXZlbCgpID09
IFVzZXJTdHlsZVVzZXJMZXZlbDsKKyAgICAgICAgaWYgKGlzVXNlclN0eWxlU2hlZXQpCisgICAg
ICAgICAgICBtX2luamVjdGVkVXNlclN0eWxlU2hlZXRzLmFwcGVuZChzaGVldCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG1faW5qZWN0ZWRBdXRob3JTdHlsZVNoZWV0cy5hcHBlbmQoc2hl
ZXQpOworCisgICAgICAgIHNoZWV0LT5jb250ZW50cygpLnNldElzVXNlclN0eWxlU2hlZXQoaXNV
c2VyU3R5bGVTaGVldCk7CisgICAgICAgIHNoZWV0LT5jb250ZW50cygpLnBhcnNlU3RyaW5nKHVz
ZXJTdHlsZVNoZWV0LnNvdXJjZSgpKTsKKyAgICB9KTsKKyAgICAKICAgICBpZiAoIW93bmluZ1Bh
Z2UtPmNhcHRpb25Vc2VyUHJlZmVyZW5jZXNTdHlsZVNoZWV0KCkuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIC8vIElkZW50aWZ5IG91ciBvdmVycmlkZSBzdHlsZSBzaGVldCB3aXRoIGEgdW5pcXVlIFVS
TCAtIGEgbmV3IHNjaGVtZSBhbmQgYSBVVUlELgogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8VVJMPiBjYXB0aW9uc1N0eWxlU2hlZXRVUkwoUGFyc2VkVVJMU3RyaW5nLCAidXNlci1jYXB0
aW9ucy1vdmVycmlkZTowMUY2QUYxMi1DM0IwLTRGNzAtQUY1RS1BM0UwMDIzNERDMjMiKTsKQEAg
LTEyNywzNCArMTQ1LDYgQEAgdm9pZCBFeHRlbnNpb25TdHlsZVNoZWV0czo6dXBkYXRlSW5qZWN0
ZQogICAgICAgICBzaGVldC0+Y29udGVudHMoKS5zZXRJc1VzZXJTdHlsZVNoZWV0KGZhbHNlKTsK
ICAgICAgICAgc2hlZXQtPmNvbnRlbnRzKCkucGFyc2VTdHJpbmcob3duaW5nUGFnZS0+Y2FwdGlv
blVzZXJQcmVmZXJlbmNlc1N0eWxlU2hlZXQoKSk7CiAgICAgfQotCi0gICAgY29uc3QgYXV0byog
dXNlckNvbnRlbnRDb250cm9sbGVyID0gb3duaW5nUGFnZS0+dXNlckNvbnRlbnRDb250cm9sbGVy
KCk7Ci0gICAgaWYgKCF1c2VyQ29udGVudENvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGNvbnN0IFVzZXJTdHlsZVNoZWV0TWFwKiB1c2VyU3R5bGVTaGVldHMgPSB1c2VyQ29udGVu
dENvbnRyb2xsZXItPnVzZXJTdHlsZVNoZWV0cygpOwotICAgIGlmICghdXNlclN0eWxlU2hlZXRz
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGF1dG8mIHN0eWxlU2hlZXRzIDogdXNlclN0
eWxlU2hlZXRzLT52YWx1ZXMoKSkgewotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHNoZWV0IDog
KnN0eWxlU2hlZXRzKSB7Ci0gICAgICAgICAgICBpZiAoc2hlZXQtPmluamVjdGVkRnJhbWVzKCkg
PT0gSW5qZWN0SW5Ub3BGcmFtZU9ubHkgJiYgbV9kb2N1bWVudC5vd25lckVsZW1lbnQoKSkKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgaWYgKCFVc2VyQ29udGVudFVS
TFBhdHRlcm46Om1hdGNoZXNQYXR0ZXJucyhtX2RvY3VtZW50LnVybCgpLCBzaGVldC0+d2hpdGVs
aXN0KCksIHNoZWV0LT5ibGFja2xpc3QoKSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBncm91cFNoZWV0ID0gQ1NTU3R5bGVT
aGVldDo6Y3JlYXRlSW5saW5lKGNvbnN0X2Nhc3Q8RG9jdW1lbnQmPihtX2RvY3VtZW50KSwgc2hl
ZXQtPnVybCgpKTsKLSAgICAgICAgICAgIGJvb2wgaXNVc2VyU3R5bGVTaGVldCA9IHNoZWV0LT5s
ZXZlbCgpID09IFVzZXJTdHlsZVVzZXJMZXZlbDsKLSAgICAgICAgICAgIGlmIChpc1VzZXJTdHls
ZVNoZWV0KQotICAgICAgICAgICAgICAgIG1faW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMuYXBwZW5k
KGdyb3VwU2hlZXQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1faW5qZWN0
ZWRBdXRob3JTdHlsZVNoZWV0cy5hcHBlbmQoZ3JvdXBTaGVldCk7Ci0KLSAgICAgICAgICAgIGdy
b3VwU2hlZXQtPmNvbnRlbnRzKCkuc2V0SXNVc2VyU3R5bGVTaGVldChpc1VzZXJTdHlsZVNoZWV0
KTsKLSAgICAgICAgICAgIGdyb3VwU2hlZXQtPmNvbnRlbnRzKCkucGFyc2VTdHJpbmcoc2hlZXQt
PnNvdXJjZSgpKTsKLSAgICAgICAgfQotICAgIH0KIH0KIAogdm9pZCBFeHRlbnNpb25TdHlsZVNo
ZWV0czo6aW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlKCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkocmV2aXNpb24gMTk3OTEyKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTI1Niw3ICsxMjU2LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpsb2FkUmVzb3VyY2UoY29u
cwogICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KHVybCk7CiAgICAgRG9jdW1lbnRMb2FkZXIq
IGRvY3VtZW50TG9hZGVyID0gZnJhbWUtPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCk7CiAKLSAg
ICBpZiAocGFnZS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkgJiYgZG9jdW1lbnRMb2FkZXIgJiYg
cGFnZS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCktPnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVs
ZXNGb3JMb2FkKHJlcXVlc3QsIFJlc291cmNlVHlwZTo6TWVkaWEsICpkb2N1bWVudExvYWRlcikg
PT0gQ29udGVudEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXM6OkJsb2NrZWQpIHsKKyAgICBpZiAo
ZG9jdW1lbnRMb2FkZXIgJiYgcGFnZS0+dXNlckNvbnRlbnRQcm92aWRlcigpLnByb2Nlc3NDb250
ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKHJlcXVlc3QsIFJlc291cmNlVHlwZTo6TWVkaWEsICpk
b2N1bWVudExvYWRlcikgPT0gQ29udGVudEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXM6OkJsb2Nr
ZWQpIHsKICAgICAgICAgcmVxdWVzdCA9IHsgfTsKICAgICAgICAgbWVkaWFMb2FkaW5nRmFpbGVk
KE1lZGlhUGxheWVyOjpGb3JtYXRFcnJvcik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuY3BwCShyZXZpc2lvbiAxOTc5MTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEs
NiArNDEsNyBAQAogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCiAjaW5jbHVkZSAiU3RvcmFnZU5h
bWVzcGFjZS5oIgogI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5oIgorI2luY2x1
ZGUgIlVzZXJDb250ZW50UHJvdmlkZXIuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KIAogI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCkBAIC05NSw3ICs5NiwxOCBAQCBjbGFz
cyBFbXB0eVN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlciBmaW5hCiAgICAgfQogfTsKIAotY2xhc3Mg
RW1wdHlWaXNpdGVkTGlua1N0b3JlIDogcHVibGljIFZpc2l0ZWRMaW5rU3RvcmUgeworY2xhc3Mg
RW1wdHlVc2VyQ29udGVudFByb3ZpZGVyIGZpbmFsIDogcHVibGljIFVzZXJDb250ZW50UHJvdmlk
ZXIgeworICAgIHZvaWQgZm9yRWFjaFVzZXJTY3JpcHQoY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lk
KERPTVdyYXBwZXJXb3JsZCYsIGNvbnN0IFVzZXJTY3JpcHQmKT4mKSBjb25zdCBvdmVycmlkZSB7
IH0KKyAgICB2b2lkIGZvckVhY2hVc2VyU3R5bGVTaGVldChjb25zdCBzdGQ6OmZ1bmN0aW9uPHZv
aWQoY29uc3QgVXNlclN0eWxlU2hlZXQmKT4mKSBjb25zdCBvdmVycmlkZSB7IH0KKyNpZiBFTkFC
TEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQorICAgIGNvbnN0IFVzZXJNZXNzYWdlSGFuZGxlckRl
c2NyaXB0b3JNYXAmIHVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzKCkgY29uc3Qgb3ZlcnJp
ZGUgeyBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvck1h
cD4gbWFwOyByZXR1cm4gbWFwLmdldCgpOyB9CisjZW5kaWYKKyNpZiBFTkFCTEUoQ09OVEVOVF9F
WFRFTlNJT05TKQorICAgIHZpcnR1YWwgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNp
b25zQmFja2VuZCYgdXNlckNvbnRlbnRFeHRlbnNpb25CYWNrZW5kKCkgb3ZlcnJpZGUgeyBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFj
a2VuZD4gYmFja2VuZDsgcmV0dXJuIGJhY2tlbmQuZ2V0KCk7IH07CisjZW5kaWYKK307CisKK2Ns
YXNzIEVtcHR5VmlzaXRlZExpbmtTdG9yZSBmaW5hbCA6IHB1YmxpYyBWaXNpdGVkTGlua1N0b3Jl
IHsKICAgICBib29sIGlzTGlua1Zpc2l0ZWQoUGFnZSYsIExpbmtIYXNoLCBjb25zdCBVUkwmLCBj
b25zdCBBdG9taWNTdHJpbmcmKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZvaWQg
YWRkVmlzaXRlZExpbmsoUGFnZSYsIExpbmtIYXNoKSBvdmVycmlkZSB7IH0KIH07CkBAIC0xMzIs
NiArMTQ0LDcgQEAgdm9pZCBmaWxsV2l0aEVtcHR5Q2xpZW50cyhQYWdlQ29uZmlndXJhdAogCiAg
ICAgcGFnZUNvbmZpZ3VyYXRpb24uZGF0YWJhc2VQcm92aWRlciA9IGFkb3B0UmVmKG5ldyBFbXB0
eURhdGFiYXNlUHJvdmlkZXIpOwogICAgIHBhZ2VDb25maWd1cmF0aW9uLnN0b3JhZ2VOYW1lc3Bh
Y2VQcm92aWRlciA9IGFkb3B0UmVmKG5ldyBFbXB0eVN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcik7
CisgICAgcGFnZUNvbmZpZ3VyYXRpb24udXNlckNvbnRlbnRQcm92aWRlciA9IGFkb3B0UmVmKG5l
dyBFbXB0eVVzZXJDb250ZW50UHJvdmlkZXIpOwogICAgIHBhZ2VDb25maWd1cmF0aW9uLnZpc2l0
ZWRMaW5rU3RvcmUgPSBhZG9wdFJlZihuZXcgRW1wdHlWaXNpdGVkTGlua1N0b3JlKTsKIAogI2lm
IFVTRShBUFBMRV9JTlRFUk5BTF9TREspCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1w
dHlDbGllbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xp
ZW50cy5oCShyZXZpc2lvbiAxOTc5MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlD
bGllbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJEaWFn
bm9zdGljTG9nZ2luZ0NsaWVudC5oIgogI2luY2x1ZGUgIkRyYWdDbGllbnQuaCIKICNpbmNsdWRl
ICJFZGl0b3JDbGllbnQuaCIKLSNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgogI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZvY3VzRGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAi
RnJhbWVMb2FkZXJDbGllbnQuaCIKQEAgLTQ0LDkgKzQzLDE4IEBACiAjaW5jbHVkZSAiUGFnZS5o
IgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlckNsaWVudC5oIgogI2luY2x1ZGUgIlJlc291cmNl
RXJyb3IuaCIKKyNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgogI2luY2x1ZGUgIlZpc2l0
ZWRMaW5rU3RvcmUuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKKyNpZiBF
TkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQorI2luY2x1ZGUgIlVzZXJNZXNzYWdlSGFuZGxl
ckRlc2NyaXB0b3IuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykK
KyNpbmNsdWRlICJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uaCIKKyNlbmRpZgorCiAvKgogIFRo
aXMgZmlsZSBob2xkcyBlbXB0eSBDbGllbnQgc3R1YnMgZm9yIHVzZSBieSBXZWJDb3JlLgogIFZp
ZXdsZXNzIGVsZW1lbnQgbmVlZHMgdG8gY3JlYXRlIGEgZHVtbXkgUGFnZS0+RnJhbWUtPkZyYW1l
VmlldyB0cmVlIGZvciB1c2UgaW4gcGFyc2luZyBvciBleGVjdXRpbmcgSmF2YVNjcmlwdC4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gMTk3OTEyKQor
KysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjczMCwxMyArMjczMCwxMSBAQCB1bnNpZ25lZCBsb25nIEZyYW1lTG9hZGVyOjpsb2FkUmVz
b3VyY2VTCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAgICBpZiAoZXJyb3IuaXNO
dWxsKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkgewotICAg
ICAgICAgICAgaWYgKGF1dG8qIGNvbnRyb2xsZXIgPSBwYWdlLT51c2VyQ29udGVudENvbnRyb2xs
ZXIoKSkgewotICAgICAgICAgICAgICAgIGlmIChtX2RvY3VtZW50TG9hZGVyICYmIGNvbnRyb2xs
ZXItPnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKG5ld1JlcXVlc3QsIFJlc291
cmNlVHlwZTo6UmF3LCAqbV9kb2N1bWVudExvYWRlcikgPT0gQ29udGVudEV4dGVuc2lvbnM6OkJs
b2NrZWRTdGF0dXM6OkJsb2NrZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgbmV3UmVxdWVzdCA9
IHsgfTsKLSAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBSZXNvdXJjZUVycm9yKGVycm9yRG9t
YWluV2ViS2l0SW50ZXJuYWwsIDAsIGluaXRpYWxSZXF1ZXN0LnVybCgpLCBlbXB0eVN0cmluZygp
KTsKLSAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSB7IH07Ci0gICAgICAgICAgICAgICAg
ICAgIGRhdGEgPSBudWxscHRyOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICht
X2RvY3VtZW50TG9hZGVyICYmIHBhZ2UtPnVzZXJDb250ZW50UHJvdmlkZXIoKS5wcm9jZXNzQ29u
dGVudEV4dGVuc2lvblJ1bGVzRm9yTG9hZChuZXdSZXF1ZXN0LCBSZXNvdXJjZVR5cGU6OlJhdywg
Km1fZG9jdW1lbnRMb2FkZXIpID09IENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzOjpC
bG9ja2VkKSB7CisgICAgICAgICAgICAgICAgbmV3UmVxdWVzdCA9IHsgfTsKKyAgICAgICAgICAg
ICAgICBlcnJvciA9IFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwg
aW5pdGlhbFJlcXVlc3QudXJsKCksIGVtcHR5U3RyaW5nKCkpOworICAgICAgICAgICAgICAgIHJl
c3BvbnNlID0geyB9OworICAgICAgICAgICAgICAgIGRhdGEgPSBudWxscHRyOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1BpbmdM
b2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9QaW5nTG9hZGVy
LmNwcAkocmV2aXNpb24gMTk3OTEyKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1BpbmdMb2Fk
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMCArNTksOCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBzdGF0aWMgQ29udGVudEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXMgcHJvY2Vzc0NvbnRl
bnRFeHRlbnNpb25SdWxlc0ZvckxvYWQoY29uc3QgRnJhbWUmIGZyYW1lLCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIFJlc291cmNlVHlwZSByZXNvdXJjZVR5cGUpCiB7CiAgICAgaWYgKERvY3Vt
ZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGZyYW1lLmxvYWRlcigpLmRvY3VtZW50TG9hZGVy
KCkpIHsKLSAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS5wYWdlKCkpIHsKLSAgICAgICAg
ICAgIGlmIChVc2VyQ29udGVudENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBwYWdlLT51c2VyQ29u
dGVudENvbnRyb2xsZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY29udHJvbGxlci0+cHJv
Y2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQocmVxdWVzdCwgcmVzb3VyY2VUeXBlLCAq
ZG9jdW1lbnRMb2FkZXIpOwotICAgICAgICB9CisgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJh
bWUucGFnZSgpKQorICAgICAgICAgICAgcmV0dXJuIHBhZ2UtPnVzZXJDb250ZW50UHJvdmlkZXIo
KS5wcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9yTG9hZChyZXF1ZXN0LCByZXNvdXJjZVR5
cGUsICpkb2N1bWVudExvYWRlcik7CiAgICAgfQogICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9u
czo6QmxvY2tlZFN0YXR1czo6Tm90QmxvY2tlZDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gMTk3OTEyKQorKysgU291cmNlL1dlYkNv
cmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ2LDggKzM0
Niw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdEludGUKICAgICBpZiAo
ZnJhbWVMb2FkZXIoKSkgewogICAgICAgICBQYWdlKiBwYWdlID0gZnJhbWVMb2FkZXIoKS0+ZnJh
bWUoKS5wYWdlKCk7CiAgICAgICAgIGlmIChwYWdlICYmIG1fZG9jdW1lbnRMb2FkZXIpIHsKLSAg
ICAgICAgICAgIGF1dG8qIHVzZXJDb250ZW50Q29udHJvbGxlciA9IHBhZ2UtPnVzZXJDb250ZW50
Q29udHJvbGxlcigpOwotICAgICAgICAgICAgaWYgKHVzZXJDb250ZW50Q29udHJvbGxlciAmJiB1
c2VyQ29udGVudENvbnRyb2xsZXItPnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2Fk
KHJlcXVlc3QsIG1fcmVzb3VyY2VUeXBlLCAqbV9kb2N1bWVudExvYWRlcikgPT0gQ29udGVudEV4
dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXM6OkJsb2NrZWQpCisgICAgICAgICAgICBpZiAocGFnZS0+
dXNlckNvbnRlbnRQcm92aWRlcigpLnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2Fk
KHJlcXVlc3QsIG1fcmVzb3VyY2VUeXBlLCAqbV9kb2N1bWVudExvYWRlcikgPT0gQ29udGVudEV4
dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXM6OkJsb2NrZWQpCiAgICAgICAgICAgICAgICAgcmVxdWVz
dCA9IHsgfTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gMTk3OTEy
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTQyLDggKzU0Miw4IEBAIENhY2hlZFJlc291cmNlSGFuZGxl
PENhY2hlZFJlc291cmNlPiBDYWMKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICNpZiBFTkFC
TEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIGlmIChmcmFtZSgpICYmIGZyYW1lKCktPm1haW5G
cmFtZSgpLnBhZ2UoKSAmJiBmcmFtZSgpLT5tYWluRnJhbWUoKS5wYWdlKCktPnVzZXJDb250ZW50
Q29udHJvbGxlcigpICYmIG1fZG9jdW1lbnRMb2FkZXIpIHsKLSAgICAgICAgaWYgKGZyYW1lKCkt
Pm1haW5GcmFtZSgpLnBhZ2UoKS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCktPnByb2Nlc3NDb250
ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKHJlcXVlc3QubXV0YWJsZVJlc291cmNlUmVxdWVzdCgp
LCB0b1Jlc291cmNlVHlwZSh0eXBlKSwgKm1fZG9jdW1lbnRMb2FkZXIpID09IENvbnRlbnRFeHRl
bnNpb25zOjpCbG9ja2VkU3RhdHVzOjpCbG9ja2VkKSB7CisgICAgaWYgKGZyYW1lKCkgJiYgZnJh
bWUoKS0+bWFpbkZyYW1lKCkucGFnZSgpICYmIG1fZG9jdW1lbnRMb2FkZXIpIHsKKyAgICAgICAg
aWYgKGZyYW1lKCktPm1haW5GcmFtZSgpLnBhZ2UoKS0+dXNlckNvbnRlbnRQcm92aWRlcigpLnBy
b2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKHJlcXVlc3QubXV0YWJsZVJlc291cmNl
UmVxdWVzdCgpLCB0b1Jlc291cmNlVHlwZSh0eXBlKSwgKm1fZG9jdW1lbnRMb2FkZXIpID09IENv
bnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzOjpCbG9ja2VkKSB7CiAgICAgICAgICAgICBp
ZiAodHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6VHlwZTo6TWFpblJlc291cmNlKSB7CiAgICAgICAg
ICAgICAgICAgYXV0byByZXNvdXJjZSA9IGNyZWF0ZVJlc291cmNlKHR5cGUsIHJlcXVlc3QubXV0
YWJsZVJlc291cmNlUmVxdWVzdCgpLCByZXF1ZXN0LmNoYXJzZXQoKSwgc2Vzc2lvbklEKCkpOwog
ICAgICAgICAgICAgICAgIEFTU0VSVChyZXNvdXJjZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL0RPTVdpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9ET01X
aW5kb3cuY3BwCShyZXZpc2lvbiAxOTc5MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdp
bmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2MSwxNSArNzYxLDcgQEAgYm9vbCBET01XaW5k
b3c6OnNob3VsZEhhdmVXZWJLaXROYW1lc3BhYwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgYXV0byogdXNlckNvbnRlbnRDb250cm9sbGVyID0gcGFnZS0+dXNl
ckNvbnRlbnRDb250cm9sbGVyKCk7Ci0gICAgaWYgKCF1c2VyQ29udGVudENvbnRyb2xsZXIpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8qIGRlc2NyaXB0b3JNYXAgPSB1c2VyQ29u
dGVudENvbnRyb2xsZXItPnVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzKCk7Ci0gICAgaWYg
KCFkZXNjcmlwdG9yTWFwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3IgKGF1dG8m
IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9yTWFwLT52YWx1ZXMoKSkgeworICAgIGZvciAoYXV0byYg
ZGVzY3JpcHRvciA6IHBhZ2UtPnVzZXJDb250ZW50UHJvdmlkZXIoKS51c2VyTWVzc2FnZUhhbmRs
ZXJEZXNjcmlwdG9ycygpLnZhbHVlcygpKSB7CiAgICAgICAgIGlmICgmZGVzY3JpcHRvci0+d29y
bGQoKSA9PSAmd29ybGQpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0yMTY4
LDExICsyMTYwLDEwIEBAIFBhc3NSZWZQdHI8RE9NV2luZG93PiBET01XaW5kb3c6Om9wZW4oY28K
ICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAgIGlmIChmaXJzdEZyYW1lLT5kb2N1
bWVudCgpCiAgICAgICAgICYmIGZpcnN0RnJhbWUtPm1haW5GcmFtZSgpLnBhZ2UoKQotICAgICAg
ICAmJiBmaXJzdEZyYW1lLT5tYWluRnJhbWUoKS5wYWdlKCktPnVzZXJDb250ZW50Q29udHJvbGxl
cigpCiAgICAgICAgICYmIGZpcnN0RnJhbWUtPm1haW5GcmFtZSgpLmRvY3VtZW50KCkKICAgICAg
ICAgJiYgZmlyc3RGcmFtZS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKS0+bG9hZGVyKCkpIHsKLSAg
ICAgICAgUmVzb3VyY2VMb2FkSW5mbyByZXNvdXJjZUxvYWRJbmZvID0ge2ZpcnN0RnJhbWUtPmRv
Y3VtZW50KCktPmNvbXBsZXRlVVJMKHVybFN0cmluZyksIGZpcnN0RnJhbWUtPm1haW5GcmFtZSgp
LmRvY3VtZW50KCktPnVybCgpLCBSZXNvdXJjZVR5cGU6OlBvcHVwfTsKLSAgICAgICAgVmVjdG9y
PENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb24+IGFjdGlvbnMgPSBmaXJzdEZyYW1lLT5tYWluRnJh
bWUoKS5wYWdlKCktPnVzZXJDb250ZW50Q29udHJvbGxlcigpLT5hY3Rpb25zRm9yUmVzb3VyY2VM
b2FkKHJlc291cmNlTG9hZEluZm8sICpmaXJzdEZyYW1lLT5tYWluRnJhbWUoKS5kb2N1bWVudCgp
LT5sb2FkZXIoKSk7CisgICAgICAgIFJlc291cmNlTG9hZEluZm8gcmVzb3VyY2VMb2FkSW5mbyA9
IHsgZmlyc3RGcmFtZS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXJsU3RyaW5nKSwgZmlyc3RG
cmFtZS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKS0+dXJsKCksIFJlc291cmNlVHlwZTo6UG9wdXAg
fTsKKyAgICAgICAgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb24+IGFjdGlvbnMgPSBm
aXJzdEZyYW1lLT5tYWluRnJhbWUoKS5wYWdlKCktPnVzZXJDb250ZW50UHJvdmlkZXIoKS5hY3Rp
b25zRm9yUmVzb3VyY2VMb2FkKHJlc291cmNlTG9hZEluZm8sICpmaXJzdEZyYW1lLT5tYWluRnJh
bWUoKS5kb2N1bWVudCgpLT5sb2FkZXIoKSk7CiAgICAgICAgIGZvciAoY29uc3QgQ29udGVudEV4
dGVuc2lvbnM6OkFjdGlvbiYgYWN0aW9uIDogYWN0aW9ucykgewogICAgICAgICAgICAgaWYgKGFj
dGlvbi50eXBlKCkgPT0gQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCkK
ICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3Bw
CShyZXZpc2lvbiAxOTc5MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjg5LDM1ICs2ODksMTcgQEAgdm9pZCBGcmFtZTo6aW5qZWN0VXNlclNj
cmlwdHMoVXNlclNjcmlwdAogICAgIGlmIChsb2FkZXIoKS5zdGF0ZU1hY2hpbmUoKS5jcmVhdGlu
Z0luaXRpYWxFbXB0eURvY3VtZW50KCkgJiYgIXNldHRpbmdzKCkuc2hvdWxkSW5qZWN0VXNlclNj
cmlwdHNJbkluaXRpYWxFbXB0eURvY3VtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNv
bnN0IGF1dG8qIHVzZXJDb250ZW50Q29udHJvbGxlciA9IG1fcGFnZS0+dXNlckNvbnRlbnRDb250
cm9sbGVyKCk7Ci0gICAgaWYgKCF1c2VyQ29udGVudENvbnRyb2xsZXIpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIC8vIFdhbGsgdGhlIGhhc2h0YWJsZS4gSW5qZWN0IGJ5IHdvcmxkLgotICAgIGNv
bnN0IFVzZXJTY3JpcHRNYXAqIHVzZXJTY3JpcHRzID0gdXNlckNvbnRlbnRDb250cm9sbGVyLT51
c2VyU2NyaXB0cygpOwotICAgIGlmICghdXNlclNjcmlwdHMpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGZvciAoY29uc3QgYXV0byYgd29ybGRBbmRVc2VyU2NyaXB0IDogKnVzZXJTY3JpcHRzKQot
ICAgICAgICBpbmplY3RVc2VyU2NyaXB0c0ZvcldvcmxkKCp3b3JsZEFuZFVzZXJTY3JpcHQua2V5
LCAqd29ybGRBbmRVc2VyU2NyaXB0LnZhbHVlLCBpbmplY3Rpb25UaW1lKTsKLX0KLQotdm9pZCBG
cmFtZTo6aW5qZWN0VXNlclNjcmlwdHNGb3JXb3JsZChET01XcmFwcGVyV29ybGQmIHdvcmxkLCBj
b25zdCBVc2VyU2NyaXB0VmVjdG9yJiB1c2VyU2NyaXB0cywgVXNlclNjcmlwdEluamVjdGlvblRp
bWUgaW5qZWN0aW9uVGltZSkKLXsKLSAgICBpZiAodXNlclNjcmlwdHMuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBEb2N1bWVudCogZG9jID0gZG9jdW1lbnQoKTsKLSAgICBpZiAo
IWRvYykKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpOworICAgIGlm
ICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoYXV0byYgc2NyaXB0IDog
dXNlclNjcmlwdHMpIHsKLSAgICAgICAgaWYgKHNjcmlwdC0+aW5qZWN0ZWRGcmFtZXMoKSA9PSBJ
bmplY3RJblRvcEZyYW1lT25seSAmJiBvd25lckVsZW1lbnQoKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIGlmIChzY3JpcHQtPmluamVjdGlvblRpbWUoKSA9PSBpbmplY3Rpb25U
aW1lICYmIFVzZXJDb250ZW50VVJMUGF0dGVybjo6bWF0Y2hlc1BhdHRlcm5zKGRvYy0+dXJsKCks
IHNjcmlwdC0+d2hpdGVsaXN0KCksIHNjcmlwdC0+YmxhY2tsaXN0KCkpKQotICAgICAgICAgICAg
bV9zY3JpcHQtPmV2YWx1YXRlSW5Xb3JsZChTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdC0+c291cmNl
KCksIHNjcmlwdC0+dXJsKCkpLCB3b3JsZCk7Ci0gICAgfQorICAgIG1fcGFnZS0+dXNlckNvbnRl
bnRQcm92aWRlcigpLmZvckVhY2hVc2VyU2NyaXB0KFsmXShET01XcmFwcGVyV29ybGQmIHdvcmxk
LCBjb25zdCBVc2VyU2NyaXB0JiBzY3JpcHQpIHsKKyAgICAgICAgaWYgKHNjcmlwdC5pbmplY3Rl
ZEZyYW1lcygpID09IEluamVjdEluVG9wRnJhbWVPbmx5ICYmIG93bmVyRWxlbWVudCgpKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChzY3JpcHQuaW5qZWN0aW9uVGltZSgpID09
IGluamVjdGlvblRpbWUgJiYgVXNlckNvbnRlbnRVUkxQYXR0ZXJuOjptYXRjaGVzUGF0dGVybnMo
ZG9jdW1lbnQtPnVybCgpLCBzY3JpcHQud2hpdGVsaXN0KCksIHNjcmlwdC5ibGFja2xpc3QoKSkp
CisgICAgICAgICAgICBtX3NjcmlwdC0+ZXZhbHVhdGVJbldvcmxkKFNjcmlwdFNvdXJjZUNvZGUo
c2NyaXB0LnNvdXJjZSgpLCBzY3JpcHQudXJsKCkpLCB3b3JsZCk7CisgICAgfSk7CiB9CiAKIFJl
bmRlclZpZXcqIEZyYW1lOjpjb250ZW50UmVuZGVyZXIoKSBjb25zdApJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWUuaAkocmV2aXNpb24gMTk3OTEyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yODAsOCArMjgwLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBGcmFtZShQYWdlJiwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiwgRnJhbWVMb2FkZXJDbGll
bnQmKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgaW5qZWN0VXNlclNjcmlwdHNGb3JX
b3JsZChET01XcmFwcGVyV29ybGQmLCBjb25zdCBVc2VyU2NyaXB0VmVjdG9yJiwgVXNlclNjcmlw
dEluamVjdGlvblRpbWUpOwotCiAgICAgICAgIEhhc2hTZXQ8RnJhbWVEZXN0cnVjdGlvbk9ic2Vy
dmVyKj4gbV9kZXN0cnVjdGlvbk9ic2VydmVyczsKIAogICAgICAgICBNYWluRnJhbWUmIG1fbWFp
bkZyYW1lOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCShyZXZpc2lvbiAxOTc5MTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBA
CiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlN1YmZyYW1lTG9hZGVyLmgi
CiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgotI2luY2x1ZGUgIlVzZXJDb250ZW50
Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlVzZXJDb250ZW50UHJvdmlkZXIuaCIKICNpbmNsdWRl
ICJVc2VySW5wdXRCcmlkZ2UuaCIKICNpbmNsdWRlICJWaWV3U3RhdGVDaGFuZ2VPYnNlcnZlci5o
IgogI2luY2x1ZGUgIlZpc2l0ZWRMaW5rU3RhdGUuaCIKQEAgLTIzMSw3ICsyMzEsNyBAQCBQYWdl
OjpQYWdlKFBhZ2VDb25maWd1cmF0aW9uJiBwYWdlQ29uZmlnCiAgICAgLCBtX2FwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlKHBhZ2VDb25maWd1cmF0aW9uLmFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlID8g
KldURk1vdmUocGFnZUNvbmZpZ3VyYXRpb24uYXBwbGljYXRpb25DYWNoZVN0b3JhZ2UpIDogQXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OnNpbmdsZXRvbigpKQogICAgICwgbV9kYXRhYmFzZVByb3Zp
ZGVyKCpXVEZNb3ZlKHBhZ2VDb25maWd1cmF0aW9uLmRhdGFiYXNlUHJvdmlkZXIpKQogICAgICwg
bV9zdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIoKldURk1vdmUocGFnZUNvbmZpZ3VyYXRpb24uc3Rv
cmFnZU5hbWVzcGFjZVByb3ZpZGVyKSkKLSAgICAsIG1fdXNlckNvbnRlbnRDb250cm9sbGVyKFdU
Rk1vdmUocGFnZUNvbmZpZ3VyYXRpb24udXNlckNvbnRlbnRDb250cm9sbGVyKSkKKyAgICAsIG1f
dXNlckNvbnRlbnRQcm92aWRlcigqV1RGTW92ZShwYWdlQ29uZmlndXJhdGlvbi51c2VyQ29udGVu
dFByb3ZpZGVyKSkKICAgICAsIG1fdmlzaXRlZExpbmtTdG9yZSgqV1RGTW92ZShwYWdlQ29uZmln
dXJhdGlvbi52aXNpdGVkTGlua1N0b3JlKSkKICAgICAsIG1fc2Vzc2lvbklEKFNlc3Npb25JRDo6
ZGVmYXVsdFNlc3Npb25JRCgpKQogICAgICwgbV9pc0Nsb3NpbmcoZmFsc2UpCkBAIC0yNDAsOSAr
MjQwLDcgQEAgUGFnZTo6UGFnZShQYWdlQ29uZmlndXJhdGlvbiYgcGFnZUNvbmZpZwogCiAgICAg
bV9zdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXItPmFkZFBhZ2UoKnRoaXMpOwogCi0gICAgaWYgKG1f
dXNlckNvbnRlbnRDb250cm9sbGVyKQotICAgICAgICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+
YWRkUGFnZSgqdGhpcyk7Ci0KKyAgICBtX3VzZXJDb250ZW50UHJvdmlkZXItPmFkZFBhZ2UoKnRo
aXMpOwogICAgIG1fdmlzaXRlZExpbmtTdG9yZS0+YWRkUGFnZSgqdGhpcyk7CiAKICAgICBpZiAo
IWFsbFBhZ2VzKSB7CkBAIC0yOTgsOSArMjk2LDcgQEAgUGFnZTo6flBhZ2UoKQogI2VuZGlmCiAK
ICAgICBtX3N0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci0+cmVtb3ZlUGFnZSgqdGhpcyk7Ci0KLSAg
ICBpZiAobV91c2VyQ29udGVudENvbnRyb2xsZXIpCi0gICAgICAgIG1fdXNlckNvbnRlbnRDb250
cm9sbGVyLT5yZW1vdmVQYWdlKCp0aGlzKTsKKyAgICBtX3VzZXJDb250ZW50UHJvdmlkZXItPnJl
bW92ZVBhZ2UoKnRoaXMpOwogICAgIG1fdmlzaXRlZExpbmtTdG9yZS0+cmVtb3ZlUGFnZSgqdGhp
cyk7CiB9CiAKQEAgLTE4MTksMTUgKzE4MTUsMTYgQEAgYm9vbCBQYWdlOjphcmVQcm9tcHRzQWxs
b3dlZCgpCiAgICAgcmV0dXJuICFtX2ZvcmJpZFByb21wdHNEZXB0aDsKIH0KIAotdm9pZCBQYWdl
OjpzZXRVc2VyQ29udGVudENvbnRyb2xsZXIoVXNlckNvbnRlbnRDb250cm9sbGVyKiB1c2VyQ29u
dGVudENvbnRyb2xsZXIpCitVc2VyQ29udGVudFByb3ZpZGVyJiBQYWdlOjp1c2VyQ29udGVudFBy
b3ZpZGVyKCkKIHsKLSAgICBpZiAobV91c2VyQ29udGVudENvbnRyb2xsZXIpCi0gICAgICAgIG1f
dXNlckNvbnRlbnRDb250cm9sbGVyLT5yZW1vdmVQYWdlKCp0aGlzKTsKLQotICAgIG1fdXNlckNv
bnRlbnRDb250cm9sbGVyID0gdXNlckNvbnRlbnRDb250cm9sbGVyOworICAgIHJldHVybiBtX3Vz
ZXJDb250ZW50UHJvdmlkZXI7Cit9CiAKLSAgICBpZiAobV91c2VyQ29udGVudENvbnRyb2xsZXIp
Ci0gICAgICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5hZGRQYWdlKCp0aGlzKTsKK3ZvaWQg
UGFnZTo6c2V0VXNlckNvbnRlbnRQcm92aWRlcihSZWY8VXNlckNvbnRlbnRQcm92aWRlcj4mJiB1
c2VyQ29udGVudFByb3ZpZGVyKQoreworICAgIG1fdXNlckNvbnRlbnRQcm92aWRlci0+cmVtb3Zl
UGFnZSgqdGhpcyk7CisgICAgbV91c2VyQ29udGVudFByb3ZpZGVyID0gV1RGTW92ZSh1c2VyQ29u
dGVudFByb3ZpZGVyKTsKKyAgICBtX3VzZXJDb250ZW50UHJvdmlkZXItPmFkZFBhZ2UoKnRoaXMp
OwogCiAgICAgaW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlSW5BbGxGcmFtZXMoKTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCShyZXZpc2lvbiAxOTc5MTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDcgKzEyMSw3IEBAIGNsYXNzIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yOwogY2xhc3MgU2V0dGluZ3M7CiBjbGFzcyBTdG9yYWdlTmFtZXNw
YWNlOwogY2xhc3MgU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyOwotY2xhc3MgVXNlckNvbnRlbnRD
b250cm9sbGVyOworY2xhc3MgVXNlckNvbnRlbnRQcm92aWRlcjsKIGNsYXNzIFZhbGlkYXRpb25N
ZXNzYWdlQ2xpZW50OwogY2xhc3MgVmlld1N0YXRlQ2hhbmdlT2JzZXJ2ZXI7CiBjbGFzcyBWaXNp
dGVkTGlua1N0b3JlOwpAQCAtNDUwLDggKzQ1MCw4IEBAIHB1YmxpYzoKICAgICBTdG9yYWdlTmFt
ZXNwYWNlUHJvdmlkZXImIHN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcigpIHsgcmV0dXJuIG1fc3Rv
cmFnZU5hbWVzcGFjZVByb3ZpZGVyLmdldCgpOyB9CiAgICAgdm9pZCBzZXRTdG9yYWdlTmFtZXNw
YWNlUHJvdmlkZXIoUmVmPFN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcj4mJik7CiAKLSAgICBVc2Vy
Q29udGVudENvbnRyb2xsZXIqIHVzZXJDb250ZW50Q29udHJvbGxlcigpIHsgcmV0dXJuIG1fdXNl
ckNvbnRlbnRDb250cm9sbGVyLmdldCgpOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRV
c2VyQ29udGVudENvbnRyb2xsZXIoVXNlckNvbnRlbnRDb250cm9sbGVyKik7CisgICAgVXNlckNv
bnRlbnRQcm92aWRlciYgdXNlckNvbnRlbnRQcm92aWRlcigpOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0VXNlckNvbnRlbnRQcm92aWRlcihSZWY8VXNlckNvbnRlbnRQcm92aWRlcj4mJik7
CiAKICAgICBWaXNpdGVkTGlua1N0b3JlJiB2aXNpdGVkTGlua1N0b3JlKCk7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRWaXNpdGVkTGlua1N0b3JlKFJlZjxWaXNpdGVkTGlua1N0b3JlPiYm
KTsKQEAgLTY3Niw3ICs2NzYsNyBAQCBwcml2YXRlOgogICAgIFJlZjxBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZT4gbV9hcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTsKICAgICBSZWY8RGF0YWJhc2VQcm92
aWRlcj4gbV9kYXRhYmFzZVByb3ZpZGVyOwogICAgIFJlZjxTdG9yYWdlTmFtZXNwYWNlUHJvdmlk
ZXI+IG1fc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyOwotICAgIFJlZlB0cjxVc2VyQ29udGVudENv
bnRyb2xsZXI+IG1fdXNlckNvbnRlbnRDb250cm9sbGVyOworICAgIFJlZjxVc2VyQ29udGVudFBy
b3ZpZGVyPiBtX3VzZXJDb250ZW50UHJvdmlkZXI7CiAgICAgUmVmPFZpc2l0ZWRMaW5rU3RvcmU+
IG1fdmlzaXRlZExpbmtTdG9yZTsKICAgICBSZWZQdHI8V2hlZWxFdmVudFRlc3RUcmlnZ2VyPiBt
X3Rlc3RUcmlnZ2VyOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25maWd1cmF0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uZmlndXJhdGlv
bi5oCShyZXZpc2lvbiAxOTc5MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25maWd1
cmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgY2xhc3MgSW5zcGVjdG9y
Q2xpZW50OwogY2xhc3MgUGx1Z0luQ2xpZW50OwogY2xhc3MgUHJvZ3Jlc3NUcmFja2VyQ2xpZW50
OwogY2xhc3MgU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyOwotY2xhc3MgVXNlckNvbnRlbnRDb250
cm9sbGVyOworY2xhc3MgVXNlckNvbnRlbnRQcm92aWRlcjsKIGNsYXNzIFZhbGlkYXRpb25NZXNz
YWdlQ2xpZW50OwogY2xhc3MgVmlzaXRlZExpbmtTdG9yZTsKIApAQCAtODQsNyArODQsNyBAQCBw
dWJsaWM6CiAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlPiBhcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTsKICAgICBSZWZQdHI8RGF0YWJhc2VQcm92aWRlcj4gZGF0YWJhc2VQcm92aWRl
cjsKICAgICBSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyPiBzdG9yYWdlTmFtZXNwYWNl
UHJvdmlkZXI7Ci0gICAgUmVmUHRyPFVzZXJDb250ZW50Q29udHJvbGxlcj4gdXNlckNvbnRlbnRD
b250cm9sbGVyOworICAgIFJlZlB0cjxVc2VyQ29udGVudFByb3ZpZGVyPiB1c2VyQ29udGVudFBy
b3ZpZGVyOwogICAgIFJlZlB0cjxWaXNpdGVkTGlua1N0b3JlPiB2aXNpdGVkTGlua1N0b3JlOwog
fTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnRDb250cm9sbGVy
LmNwcAkocmV2aXNpb24gMTk3OTEyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVu
dENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywyNCArMjcsMTUgQEAKICNpbmNs
dWRlICJVc2VyQ29udGVudENvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3Js
ZC5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIK
LSNpbmNsdWRlICJFeHRlbnNpb25TdHlsZVNoZWV0cy5oIgotI2luY2x1ZGUgIk1haW5GcmFtZS5o
IgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRJbmZvLmgiCiAjaW5j
bHVkZSAiVXNlclNjcmlwdC5oIgogI2luY2x1ZGUgIlVzZXJTdHlsZVNoZWV0LmgiCi0jaW5jbHVk
ZSA8cnVudGltZS9KU0NlbGxJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9TdHJ1Y3R1cmVJ
bmxpbmVzLmg+CiAKICNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQogI2luY2x1ZGUg
IlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IuaCIKICNlbmRpZgogCiAjaWYgRU5BQkxFKENP
TlRFTlRfRVhURU5TSU9OUykKLSNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuaCIK
LSNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuaCIKKyNpbmNsdWRlICJDb21waWxl
ZENvbnRlbnRFeHRlbnNpb24uaCIKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02
MiwzNiArNTMsMzMgQEAgVXNlckNvbnRlbnRDb250cm9sbGVyOjp+VXNlckNvbnRlbnRDb250cgog
ewogfQogCi12b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkUGFnZShQYWdlJiBwYWdlKQor
dm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OmZvckVhY2hVc2VyU2NyaXB0KGNvbnN0IHN0ZDo6
ZnVuY3Rpb248dm9pZChET01XcmFwcGVyV29ybGQmLCBjb25zdCBVc2VyU2NyaXB0Jik+JiBmdW5j
dG9yKSBjb25zdAogewotICAgIEFTU0VSVCghbV9wYWdlcy5jb250YWlucygmcGFnZSkpOwotICAg
IG1fcGFnZXMuYWRkKCZwYWdlKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHdvcmxkQW5kVXNlclNj
cmlwdFZlY3RvciA6IG1fdXNlclNjcmlwdHMpIHsKKyAgICAgICAgYXV0byYgd29ybGQgPSAqd29y
bGRBbmRVc2VyU2NyaXB0VmVjdG9yLmtleS5nZXQoKTsKKyAgICAgICAgZm9yIChjb25zdCBhdXRv
JiB1c2VyU2NyaXB0IDogKndvcmxkQW5kVXNlclNjcmlwdFZlY3Rvci52YWx1ZSkKKyAgICAgICAg
ICAgIGZ1bmN0b3Iod29ybGQsICp1c2VyU2NyaXB0KTsKKyAgICB9CiB9CiAKLXZvaWQgVXNlckNv
bnRlbnRDb250cm9sbGVyOjpyZW1vdmVQYWdlKFBhZ2UmIHBhZ2UpCit2b2lkIFVzZXJDb250ZW50
Q29udHJvbGxlcjo6Zm9yRWFjaFVzZXJTdHlsZVNoZWV0KGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9p
ZChjb25zdCBVc2VyU3R5bGVTaGVldCYpPiYgZnVuY3RvcikgY29uc3QKIHsKLSAgICBBU1NFUlQo
bV9wYWdlcy5jb250YWlucygmcGFnZSkpOwotICAgIG1fcGFnZXMucmVtb3ZlKCZwYWdlKTsKKyAg
ICBmb3IgKGF1dG8mIHN0eWxlU2hlZXRWZWN0b3IgOiBtX3VzZXJTdHlsZVNoZWV0cy52YWx1ZXMo
KSkgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHN0eWxlU2hlZXQgOiAqc3R5bGVTaGVldFZl
Y3RvcikKKyAgICAgICAgICAgIGZ1bmN0b3IoKnN0eWxlU2hlZXQpOworICAgIH0KIH0KIAogdm9p
ZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQoRE9NV3JhcHBlcldvcmxkJiB3
b3JsZCwgc3RkOjp1bmlxdWVfcHRyPFVzZXJTY3JpcHQ+IHVzZXJTY3JpcHQpCiB7Ci0gICAgaWYg
KCFtX3VzZXJTY3JpcHRzKQotICAgICAgICBtX3VzZXJTY3JpcHRzID0gc3RkOjptYWtlX3VuaXF1
ZTxVc2VyU2NyaXB0TWFwPigpOwotCi0gICAgYXV0byYgc2NyaXB0c0luV29ybGQgPSBtX3VzZXJT
Y3JpcHRzLT5hZGQoJndvcmxkLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgaWYgKCFz
Y3JpcHRzSW5Xb3JsZCkKLSAgICAgICAgc2NyaXB0c0luV29ybGQgPSBzdGQ6Om1ha2VfdW5pcXVl
PFVzZXJTY3JpcHRWZWN0b3I+KCk7CisgICAgYXV0byYgc2NyaXB0c0luV29ybGQgPSBtX3VzZXJT
Y3JpcHRzLmVuc3VyZSgmd29ybGQsIFsmXSB7IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFVzZXJT
Y3JpcHRWZWN0b3I+KCk7IH0pLml0ZXJhdG9yLT52YWx1ZTsKICAgICBzY3JpcHRzSW5Xb3JsZC0+
YXBwZW5kKFdURk1vdmUodXNlclNjcmlwdCkpOwogfQogCiB2b2lkIFVzZXJDb250ZW50Q29udHJv
bGxlcjo6cmVtb3ZlVXNlclNjcmlwdChET01XcmFwcGVyV29ybGQmIHdvcmxkLCBjb25zdCBVUkwm
IHVybCkKIHsKLSAgICBpZiAoIW1fdXNlclNjcmlwdHMpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGF1dG8gaXQgPSBtX3VzZXJTY3JpcHRzLT5maW5kKCZ3b3JsZCk7Ci0gICAgaWYgKGl0ID09IG1f
dXNlclNjcmlwdHMtPmVuZCgpKQorICAgIGF1dG8gaXQgPSBtX3VzZXJTY3JpcHRzLmZpbmQoJndv
cmxkKTsKKyAgICBpZiAoaXQgPT0gbV91c2VyU2NyaXB0cy5lbmQoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgYXV0byBzY3JpcHRzID0gaXQtPnZhbHVlLmdldCgpOwpAQCAtMTAxLDI1ICs4OSwx
NyBAQCB2b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclNjCiAgICAgfQogCiAg
ICAgaWYgKHNjcmlwdHMtPmlzRW1wdHkoKSkKLSAgICAgICAgbV91c2VyU2NyaXB0cy0+cmVtb3Zl
KGl0KTsKKyAgICAgICAgbV91c2VyU2NyaXB0cy5yZW1vdmUoaXQpOwogfQogCiB2b2lkIFVzZXJD
b250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlwdHMoRE9NV3JhcHBlcldvcmxkJiB3b3Js
ZCkKIHsKLSAgICBpZiAoIW1fdXNlclNjcmlwdHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
dXNlclNjcmlwdHMtPnJlbW92ZSgmd29ybGQpOworICAgIG1fdXNlclNjcmlwdHMucmVtb3ZlKCZ3
b3JsZCk7CiB9CiAKIHZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVl
dChET01XcmFwcGVyV29ybGQmIHdvcmxkLCBzdGQ6OnVuaXF1ZV9wdHI8VXNlclN0eWxlU2hlZXQ+
IHVzZXJTdHlsZVNoZWV0LCBVc2VyU3R5bGVJbmplY3Rpb25UaW1lIGluamVjdGlvblRpbWUpCiB7
Ci0gICAgaWYgKCFtX3VzZXJTdHlsZVNoZWV0cykKLSAgICAgICAgbV91c2VyU3R5bGVTaGVldHMg
PSBzdGQ6Om1ha2VfdW5pcXVlPFVzZXJTdHlsZVNoZWV0TWFwPigpOwotCi0gICAgYXV0byYgc3R5
bGVTaGVldHNJbldvcmxkID0gbV91c2VyU3R5bGVTaGVldHMtPmFkZCgmd29ybGQsIG51bGxwdHIp
Lml0ZXJhdG9yLT52YWx1ZTsKLSAgICBpZiAoIXN0eWxlU2hlZXRzSW5Xb3JsZCkKLSAgICAgICAg
c3R5bGVTaGVldHNJbldvcmxkID0gc3RkOjptYWtlX3VuaXF1ZTxVc2VyU3R5bGVTaGVldFZlY3Rv
cj4oKTsKKyAgICBhdXRvJiBzdHlsZVNoZWV0c0luV29ybGQgPSBtX3VzZXJTdHlsZVNoZWV0cy5l
bnN1cmUoJndvcmxkLCBbJl0geyByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxVc2VyU3R5bGVTaGVl
dFZlY3Rvcj4oKTsgfSkuaXRlcmF0b3ItPnZhbHVlOwogICAgIHN0eWxlU2hlZXRzSW5Xb3JsZC0+
YXBwZW5kKFdURk1vdmUodXNlclN0eWxlU2hlZXQpKTsKIAogICAgIGlmIChpbmplY3Rpb25UaW1l
ID09IEluamVjdEluRXhpc3RpbmdEb2N1bWVudHMpCkBAIC0xMjgsMTEgKzEwOCw4IEBAIHZvaWQg
VXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyU3R5bGUKIAogdm9pZCBVc2VyQ29udGVudENv
bnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNoZWV0KERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIGNv
bnN0IFVSTCYgdXJsKQogewotICAgIGlmICghbV91c2VyU3R5bGVTaGVldHMpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGF1dG8gaXQgPSBtX3VzZXJTdHlsZVNoZWV0cy0+ZmluZCgmd29ybGQpOwot
ICAgIGlmIChpdCA9PSBtX3VzZXJTdHlsZVNoZWV0cy0+ZW5kKCkpCisgICAgYXV0byBpdCA9IG1f
dXNlclN0eWxlU2hlZXRzLmZpbmQoJndvcmxkKTsKKyAgICBpZiAoaXQgPT0gbV91c2VyU3R5bGVT
aGVldHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8mIHN0eWxlc2hlZXRzID0g
Kml0LT52YWx1ZTsKQEAgLTE0OSwxNyArMTI2LDE0IEBAIHZvaWQgVXNlckNvbnRlbnRDb250cm9s
bGVyOjpyZW1vdmVVc2VyU3QKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHN0eWxlc2hlZXRz
LmlzRW1wdHkoKSkKLSAgICAgICAgbV91c2VyU3R5bGVTaGVldHMtPnJlbW92ZShpdCk7CisgICAg
ICAgIG1fdXNlclN0eWxlU2hlZXRzLnJlbW92ZShpdCk7CiAKICAgICBpbnZhbGlkYXRlSW5qZWN0
ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lc0luQWxsUGFnZXMoKTsKIH0KIAogdm9pZCBVc2Vy
Q29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNoZWV0cyhET01XcmFwcGVyV29ybGQm
IHdvcmxkKQogewotICAgIGlmICghbV91c2VyU3R5bGVTaGVldHMpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmICghbV91c2VyU3R5bGVTaGVldHMtPnJlbW92ZSgmd29ybGQpKQorICAgIGlmICgh
bV91c2VyU3R5bGVTaGVldHMucmVtb3ZlKCZ3b3JsZCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZUluQWxsRnJhbWVzSW5BbGxQYWdlcygp
OwpAQCAtMTY4LDk1ICsxNDIsNDAgQEAgdm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92
ZVVzZXJTdAogI2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCiB2b2lkIFVzZXJDb250
ZW50Q29udHJvbGxlcjo6YWRkVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcihVc2VyTWVzc2Fn
ZUhhbmRsZXJEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQogewotICAgIGlmICghbV91c2VyTWVzc2Fn
ZUhhbmRsZXJEZXNjcmlwdG9ycykKLSAgICAgICAgbV91c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlw
dG9ycyA9IHN0ZDo6bWFrZV91bmlxdWU8VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvck1hcD4o
KTsKLQotICAgIG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMtPmFkZChzdGQ6Om1ha2Vf
cGFpcihkZXNjcmlwdG9yLm5hbWUoKSwgJmRlc2NyaXB0b3Iud29ybGQoKSksICZkZXNjcmlwdG9y
KTsKKyAgICBtX3VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzLmFkZChzdGQ6Om1ha2VfcGFp
cihkZXNjcmlwdG9yLm5hbWUoKSwgJmRlc2NyaXB0b3Iud29ybGQoKSksICZkZXNjcmlwdG9yKTsK
IH0KIAogdm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJNZXNzYWdlSGFuZGxl
ckRlc2NyaXB0b3IoVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvciYgZGVzY3JpcHRvcikKIHsK
LSAgICBpZiAoIW1fdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMtPnJlbW92ZShzdGQ6Om1h
a2VfcGFpcihkZXNjcmlwdG9yLm5hbWUoKSwgJmRlc2NyaXB0b3Iud29ybGQoKSkpOworICAgIG1f
dXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMucmVtb3ZlKHN0ZDo6bWFrZV9wYWlyKGRlc2Ny
aXB0b3IubmFtZSgpLCAmZGVzY3JpcHRvci53b3JsZCgpKSk7CiB9CiAjZW5kaWYKIAogI2lmIEVO
QUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiB2b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRk
VXNlckNvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8Q29udGVudEV4
dGVuc2lvbnM6OkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4gY29udGVudEV4dGVuc2lvbikKIHsK
LSAgICBpZiAoIW1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQpCi0gICAgICAgIG1fY29udGVudEV4
dGVuc2lvbkJhY2tlbmQgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbnRlbnRFeHRlbnNpb25zOjpDb250
ZW50RXh0ZW5zaW9uc0JhY2tlbmQ+KCk7Ci0gICAgCi0gICAgbV9jb250ZW50RXh0ZW5zaW9uQmFj
a2VuZC0+YWRkQ29udGVudEV4dGVuc2lvbihuYW1lLCBjb250ZW50RXh0ZW5zaW9uKTsKKyAgICBt
X2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kLmFkZENvbnRlbnRFeHRlbnNpb24obmFtZSwgY29udGVu
dEV4dGVuc2lvbik7CiB9CiAKIHZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2Vy
Q29udGVudEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgaWYgKCFtX2NvbnRl
bnRFeHRlbnNpb25CYWNrZW5kKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRlbnRFeHRl
bnNpb25CYWNrZW5kLT5yZW1vdmVDb250ZW50RXh0ZW5zaW9uKG5hbWUpOworICAgIG1fY29udGVu
dEV4dGVuc2lvbkJhY2tlbmQucmVtb3ZlQ29udGVudEV4dGVuc2lvbihuYW1lKTsKIH0KIAogdm9p
ZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZUFsbFVzZXJDb250ZW50RXh0ZW5zaW9ucygp
CiB7Ci0gICAgaWYgKCFtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kLT5yZW1vdmVBbGxDb250ZW50RXh0ZW5z
aW9ucygpOwotfQotCi1zdGF0aWMgYm9vbCBjb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQoY29uc3Qg
RG9jdW1lbnRMb2FkZXImIGRvY3VtZW50TG9hZGVyKQotewotICAgIGlmIChhdXRvIGZyYW1lID0g
ZG9jdW1lbnRMb2FkZXIuZnJhbWUoKSkgewotICAgICAgICBpZiAoZnJhbWUtPmlzTWFpbkZyYW1l
KCkpCi0gICAgICAgICAgICByZXR1cm4gZG9jdW1lbnRMb2FkZXIudXNlckNvbnRlbnRFeHRlbnNp
b25zRW5hYmxlZCgpOwotICAgICAgICBpZiAoYXV0byBtYWluRG9jdW1lbnRMb2FkZXIgPSBmcmFt
ZS0+bWFpbkZyYW1lKCkubG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkKLSAgICAgICAgICAgIHJl
dHVybiBtYWluRG9jdW1lbnRMb2FkZXItPnVzZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQoKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSAgICAKLUNvbnRlbnRFeHRlbnNpb25zOjpC
bG9ja2VkU3RhdHVzIFVzZXJDb250ZW50Q29udHJvbGxlcjo6cHJvY2Vzc0NvbnRlbnRFeHRlbnNp
b25SdWxlc0ZvckxvYWQoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZVR5cGUgcmVz
b3VyY2VUeXBlLCBEb2N1bWVudExvYWRlciYgaW5pdGlhdGluZ0RvY3VtZW50TG9hZGVyKQotewot
ICAgIGlmICghbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZCkKLSAgICAgICAgcmV0dXJuIENvbnRl
bnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzOjpOb3RCbG9ja2VkOwotCi0gICAgaWYgKCFjb250
ZW50RXh0ZW5zaW9uc0VuYWJsZWQoaW5pdGlhdGluZ0RvY3VtZW50TG9hZGVyKSkKLSAgICAgICAg
cmV0dXJuIENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzOjpOb3RCbG9ja2VkOwotCi0g
ICAgcmV0dXJuIG1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQtPnByb2Nlc3NDb250ZW50RXh0ZW5z
aW9uUnVsZXNGb3JMb2FkKHJlcXVlc3QsIHJlc291cmNlVHlwZSwgaW5pdGlhdGluZ0RvY3VtZW50
TG9hZGVyKTsKLX0KLQotVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb24+IFVzZXJDb250
ZW50Q29udHJvbGxlcjo6YWN0aW9uc0ZvclJlc291cmNlTG9hZChjb25zdCBSZXNvdXJjZUxvYWRJ
bmZvJiByZXNvdXJjZUxvYWRJbmZvLCBEb2N1bWVudExvYWRlciYgaW5pdGlhdGluZ0RvY3VtZW50
TG9hZGVyKQotewotICAgIGlmICghbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZCkKLSAgICAgICAg
cmV0dXJuIFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uPigpOwotICAgIAotICAgIGlm
ICghY29udGVudEV4dGVuc2lvbnNFbmFibGVkKGluaXRpYXRpbmdEb2N1bWVudExvYWRlcikpCi0g
ICAgICAgIHJldHVybiBWZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbj4oKTsKLQotICAg
IHJldHVybiBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kLT5hY3Rpb25zRm9yUmVzb3VyY2VMb2Fk
KHJlc291cmNlTG9hZEluZm8pOworICAgIG1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQucmVtb3Zl
QWxsQ29udGVudEV4dGVuc2lvbnMoKTsKIH0KICNlbmRpZgogCiB2b2lkIFVzZXJDb250ZW50Q29u
dHJvbGxlcjo6cmVtb3ZlQWxsVXNlckNvbnRlbnQoKQogewotICAgIG1fdXNlclNjcmlwdHMgPSBu
dWxscHRyOworICAgIG1fdXNlclNjcmlwdHMuY2xlYXIoKTsKIAotICAgIGlmIChtX3VzZXJTdHls
ZVNoZWV0cykgewotICAgICAgICBtX3VzZXJTdHlsZVNoZWV0cyA9IG51bGxwdHI7CisgICAgaWYg
KCFtX3VzZXJTdHlsZVNoZWV0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV91c2VyU3R5bGVTaGVl
dHMuY2xlYXIoKTsKICAgICAgICAgaW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlSW5B
bGxGcmFtZXNJbkFsbFBhZ2VzKCk7CiAgICAgfQogfQogCi12b2lkIFVzZXJDb250ZW50Q29udHJv
bGxlcjo6aW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlSW5BbGxGcmFtZXNJbkFsbFBh
Z2VzKCkKLXsKLSAgICBmb3IgKGF1dG8mIHBhZ2UgOiBtX3BhZ2VzKQotICAgICAgICBwYWdlLT5p
bnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lcygpOwotfQotCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50
Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNvbnRl
bnRDb250cm9sbGVyLmgJKHJldmlzaW9uIDE5NzkxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
VXNlckNvbnRlbnRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDU4ICsyNiwxOSBA
QAogI2lmbmRlZiBVc2VyQ29udGVudENvbnRyb2xsZXJfaAogI2RlZmluZSBVc2VyQ29udGVudENv
bnRyb2xsZXJfaAogCi0jaW5jbHVkZSAiVXNlclNjcmlwdFR5cGVzLmgiCi0jaW5jbHVkZSAiVXNl
clN0eWxlU2hlZXRUeXBlcy5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLSNpZiBFTkFCTEUo
VVNFUl9NRVNTQUdFX0hBTkRMRVJTKQotI2luY2x1ZGUgIlVzZXJNZXNzYWdlSGFuZGxlckRlc2Ny
aXB0b3JUeXBlcy5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQot
I2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25BY3Rpb25zLmgiCi0jZW5kaWYKKyNpbmNsdWRlICJV
c2VyQ29udGVudFByb3ZpZGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRE9N
V3JhcHBlcldvcmxkOwotY2xhc3MgRG9jdW1lbnRMb2FkZXI7Ci1jbGFzcyBQYWdlOwotY2xhc3Mg
UmVzb3VyY2VSZXF1ZXN0OwotY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOwotY2xhc3MgVVJMOwot
Y2xhc3MgVXNlclNjcmlwdDsKLWNsYXNzIFVzZXJTdHlsZVNoZWV0OwotY2xhc3MgVXNlck1lc3Nh
Z2VIYW5kbGVyRGVzY3JpcHRvcjsKLQotZW51bSBjbGFzcyBSZXNvdXJjZVR5cGUgOiB1aW50MTZf
dDsKLQotc3RydWN0IFJlc291cmNlTG9hZEluZm87Ci0KLW5hbWVzcGFjZSBDb250ZW50RXh0ZW5z
aW9ucyB7Ci1jbGFzcyBDb21waWxlZENvbnRlbnRFeHRlbnNpb247Ci1jbGFzcyBDb250ZW50RXh0
ZW5zaW9uc0JhY2tlbmQ7Ci1zdHJ1Y3QgQWN0aW9uOwotfQotCi1jbGFzcyBVc2VyQ29udGVudENv
bnRyb2xsZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxVc2VyQ29udGVudENvbnRyb2xsZXI+IHsKK2Ns
YXNzIFVzZXJDb250ZW50Q29udHJvbGxlciBmaW5hbCA6IHB1YmxpYyBVc2VyQ29udGVudFByb3Zp
ZGVyIHsKIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFVzZXJDb250ZW50
Q29udHJvbGxlcj4gY3JlYXRlKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgflVzZXJDb250ZW50Q29u
dHJvbGxlcigpOwogCi0gICAgdm9pZCBhZGRQYWdlKFBhZ2UmKTsKLSAgICB2b2lkIHJlbW92ZVBh
Z2UoUGFnZSYpOwotCi0gICAgY29uc3QgVXNlclNjcmlwdE1hcCogdXNlclNjcmlwdHMoKSBjb25z
dCB7IHJldHVybiBtX3VzZXJTY3JpcHRzLmdldCgpOyB9Ci0KICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGFkZFVzZXJTY3JpcHQoRE9NV3JhcHBlcldvcmxkJiwgc3RkOjp1bmlxdWVfcHRyPFVzZXJT
Y3JpcHQ+KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVVzZXJTY3JpcHQoRE9NV3Jh
cHBlcldvcmxkJiwgY29uc3QgVVJMJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVV
c2VyU2NyaXB0cyhET01XcmFwcGVyV29ybGQmKTsKIAotICAgIGNvbnN0IFVzZXJTdHlsZVNoZWV0
TWFwKiB1c2VyU3R5bGVTaGVldHMoKSBjb25zdCB7IHJldHVybiBtX3VzZXJTdHlsZVNoZWV0cy5n
ZXQoKTsgfQotCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRVc2VyU3R5bGVTaGVldChET01X
cmFwcGVyV29ybGQmLCBzdGQ6OnVuaXF1ZV9wdHI8VXNlclN0eWxlU2hlZXQ+LCBVc2VyU3R5bGVJ
bmplY3Rpb25UaW1lKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVVzZXJTdHlsZVNo
ZWV0KERPTVdyYXBwZXJXb3JsZCYsIGNvbnN0IFVSTCYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgcmVtb3ZlVXNlclN0eWxlU2hlZXRzKERPTVdyYXBwZXJXb3JsZCYpOwpAQCAtODUsOCArNDYs
NiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVBbGxVc2VyQ29udGVu
dCgpOwogCiAjaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKLSAgICBjb25zdCBVc2Vy
TWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yTWFwKiB1c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9y
cygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMuZ2V0KCk7
IH0KLQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3Jp
cHRvcihVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yJik7CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCByZW1vdmVVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yKFVzZXJNZXNzYWdlSGFuZGxl
ckRlc2NyaXB0b3ImKTsKICNlbmRpZgpAQCAtOTUsMjUgKzU0LDI4IEBAIHB1YmxpYzoKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGFkZFVzZXJDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYg
bmFtZSwgUmVmUHRyPENvbnRlbnRFeHRlbnNpb25zOjpDb21waWxlZENvbnRlbnRFeHRlbnNpb24+
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9uKGNv
bnN0IFN0cmluZyYgbmFtZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVBbGxVc2Vy
Q29udGVudEV4dGVuc2lvbnMoKTsKLQotICAgIENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3Rh
dHVzIHByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKFJlc291cmNlUmVxdWVzdCYs
IFJlc291cmNlVHlwZSwgRG9jdW1lbnRMb2FkZXImIGluaXRpYXRpbmdEb2N1bWVudExvYWRlcik7
Ci0gICAgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb24+IGFjdGlvbnNGb3JSZXNvdXJj
ZUxvYWQoY29uc3QgUmVzb3VyY2VMb2FkSW5mbyYsIERvY3VtZW50TG9hZGVyJiBpbml0aWF0aW5n
RG9jdW1lbnRMb2FkZXIpOwogI2VuZGlmCiAKIHByaXZhdGU6CiAgICAgVXNlckNvbnRlbnRDb250
cm9sbGVyKCk7CiAKLSAgICB2b2lkIGludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZUlu
QWxsRnJhbWVzSW5BbGxQYWdlcygpOwotCi0gICAgSGFzaFNldDxQYWdlKj4gbV9wYWdlczsKKyAg
ICAvLyBVc2VyQ29udGVudFByb3ZpZGVyCisgICAgdmlydHVhbCB2b2lkIGZvckVhY2hVc2VyU2Ny
aXB0KGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChET01XcmFwcGVyV29ybGQmLCBjb25zdCBVc2Vy
U2NyaXB0Jik+JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGZvckVhY2hVc2Vy
U3R5bGVTaGVldChjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgVXNlclN0eWxlU2hlZXQm
KT4mKSBjb25zdCBvdmVycmlkZTsKKyNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQor
ICAgIGNvbnN0IFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JNYXAmIHVzZXJNZXNzYWdlSGFu
ZGxlckRlc2NyaXB0b3JzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV91c2VyTWVzc2FnZUhh
bmRsZXJEZXNjcmlwdG9yczsgfQorI2VuZGlmCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9O
UykKKyAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kJiB1c2Vy
Q29udGVudEV4dGVuc2lvbkJhY2tlbmQoKSBvdmVycmlkZSB7IHJldHVybiBtX2NvbnRlbnRFeHRl
bnNpb25CYWNrZW5kOyB9CisjZW5kaWYKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxVc2VyU2NyaXB0
TWFwPiBtX3VzZXJTY3JpcHRzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxVc2VyU3R5bGVTaGVldE1h
cD4gbV91c2VyU3R5bGVTaGVldHM7CisgICAgVXNlclNjcmlwdE1hcCBtX3VzZXJTY3JpcHRzOwor
ICAgIFVzZXJTdHlsZVNoZWV0TWFwIG1fdXNlclN0eWxlU2hlZXRzOwogI2lmIEVOQUJMRShVU0VS
X01FU1NBR0VfSEFORExFUlMpCi0gICAgc3RkOjp1bmlxdWVfcHRyPFVzZXJNZXNzYWdlSGFuZGxl
ckRlc2NyaXB0b3JNYXA+IG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnM7CisgICAgVXNl
ck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvck1hcCBtX3VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0
b3JzOwogI2VuZGlmCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZD4gbV9j
b250ZW50RXh0ZW5zaW9uQmFja2VuZDsKKyAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4
dGVuc2lvbnNCYWNrZW5kIG1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQ7CiAjZW5kaWYKIH07CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnRQcm92aWRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudFByb3ZpZGVyLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnRQcm92aWRlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiVXNlckNvbnRlbnRQcm92aWRlci5oIgorCisjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIk1haW5G
cmFtZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lP
TlMpCisjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmgiCisjaW5jbHVkZSAiQ29u
dGVudEV4dGVuc2lvbnNCYWNrZW5kLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitVc2VyQ29udGVudFByb3ZpZGVyOjpVc2VyQ29udGVudFByb3ZpZGVyKCkKK3sKK30KKworVXNl
ckNvbnRlbnRQcm92aWRlcjo6flVzZXJDb250ZW50UHJvdmlkZXIoKQoreworICAgIEFTU0VSVCht
X3BhZ2VzLmlzRW1wdHkoKSk7Cit9CisKK3ZvaWQgVXNlckNvbnRlbnRQcm92aWRlcjo6YWRkUGFn
ZShQYWdlJiBwYWdlKQoreworICAgIEFTU0VSVCghbV9wYWdlcy5jb250YWlucygmcGFnZSkpOwor
CisgICAgbV9wYWdlcy5hZGQoJnBhZ2UpOworfQorCit2b2lkIFVzZXJDb250ZW50UHJvdmlkZXI6
OnJlbW92ZVBhZ2UoUGFnZSYgcGFnZSkKK3sKKyAgICBBU1NFUlQobV9wYWdlcy5jb250YWlucygm
cGFnZSkpOworCisgICAgbV9wYWdlcy5yZW1vdmUoJnBhZ2UpOworfQorCit2b2lkIFVzZXJDb250
ZW50UHJvdmlkZXI6OmludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZUluQWxsRnJhbWVz
SW5BbGxQYWdlcygpCit7CisgICAgZm9yIChhdXRvJiBwYWdlIDogbV9wYWdlcykKKyAgICAgICAg
cGFnZS0+aW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlSW5BbGxGcmFtZXMoKTsKK30K
KworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCitzdGF0aWMgYm9vbCBjb250ZW50RXh0
ZW5zaW9uc0VuYWJsZWQoY29uc3QgRG9jdW1lbnRMb2FkZXImIGRvY3VtZW50TG9hZGVyKQorewor
ICAgIGlmIChhdXRvIGZyYW1lID0gZG9jdW1lbnRMb2FkZXIuZnJhbWUoKSkgeworICAgICAgICBp
ZiAoZnJhbWUtPmlzTWFpbkZyYW1lKCkpCisgICAgICAgICAgICByZXR1cm4gZG9jdW1lbnRMb2Fk
ZXIudXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZCgpOworICAgICAgICBpZiAoYXV0byBtYWlu
RG9jdW1lbnRMb2FkZXIgPSBmcmFtZS0+bWFpbkZyYW1lKCkubG9hZGVyKCkuZG9jdW1lbnRMb2Fk
ZXIoKSkKKyAgICAgICAgICAgIHJldHVybiBtYWluRG9jdW1lbnRMb2FkZXItPnVzZXJDb250ZW50
RXh0ZW5zaW9uc0VuYWJsZWQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyAgICAK
K0NvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzIFVzZXJDb250ZW50UHJvdmlkZXI6OnBy
b2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgUmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSwgRG9jdW1lbnRMb2FkZXImIGluaXRpYXRpbmdE
b2N1bWVudExvYWRlcikKK3sKKyAgICBpZiAoIWNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZChpbml0
aWF0aW5nRG9jdW1lbnRMb2FkZXIpKQorICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbnM6
OkJsb2NrZWRTdGF0dXM6Ok5vdEJsb2NrZWQ7CisKKyAgICByZXR1cm4gdXNlckNvbnRlbnRFeHRl
bnNpb25CYWNrZW5kKCkucHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQocmVxdWVz
dCwgcmVzb3VyY2VUeXBlLCBpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIpOworfQorCitWZWN0b3I8
Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbj4gVXNlckNvbnRlbnRQcm92aWRlcjo6YWN0aW9uc0Zv
clJlc291cmNlTG9hZChjb25zdCBSZXNvdXJjZUxvYWRJbmZvJiByZXNvdXJjZUxvYWRJbmZvLCBE
b2N1bWVudExvYWRlciYgaW5pdGlhdGluZ0RvY3VtZW50TG9hZGVyKQoreworICAgIGlmICghY29u
dGVudEV4dGVuc2lvbnNFbmFibGVkKGluaXRpYXRpbmdEb2N1bWVudExvYWRlcikpCisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICByZXR1cm4gdXNlckNvbnRlbnRFeHRlbnNpb25CYWNrZW5kKCku
YWN0aW9uc0ZvclJlc291cmNlTG9hZChyZXNvdXJjZUxvYWRJbmZvKTsKK30KKyNlbmRpZgorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250
ZW50UHJvdmlkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250
ZW50UHJvdmlkZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNv
bnRlbnRQcm92aWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFVzZXJDb250ZW50UHJvdmlkZXJfaAorI2RlZmluZSBVc2VyQ29udGVudFBy
b3ZpZGVyX2gKKworI2luY2x1ZGUgIlVzZXJTY3JpcHRUeXBlcy5oIgorI2luY2x1ZGUgIlVzZXJT
dHlsZVNoZWV0VHlwZXMuaCIKKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorCisjaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKKyNpbmNsdWRlICJV
c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yVHlwZXMuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxF
KENPTlRFTlRfRVhURU5TSU9OUykKKyNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9uQWN0aW9ucy5o
IgorI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5oIgorI2VuZGlmCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRG9jdW1lbnRMb2FkZXI7CitjbGFzcyBQYWdlOworY2xh
c3MgUmVzb3VyY2VSZXF1ZXN0OworY2xhc3MgVVJMOworCitlbnVtIGNsYXNzIFJlc291cmNlVHlw
ZSA6IHVpbnQxNl90OworCitzdHJ1Y3QgUmVzb3VyY2VMb2FkSW5mbzsKKworbmFtZXNwYWNlIENv
bnRlbnRFeHRlbnNpb25zIHsKK2NsYXNzIENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDsKK3N0cnVj
dCBBY3Rpb247Cit9CisKK2NsYXNzIFVzZXJDb250ZW50UHJvdmlkZXIgOiBwdWJsaWMgUmVmQ291
bnRlZDxVc2VyQ29udGVudFByb3ZpZGVyPiB7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQg
VXNlckNvbnRlbnRQcm92aWRlcigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflVzZXJD
b250ZW50UHJvdmlkZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBmb3JFYWNoVXNlclNjcmlwdChj
b25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQoRE9NV3JhcHBlcldvcmxkJiwgY29uc3QgVXNlclNjcmlw
dCYpPiYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZm9yRWFjaFVzZXJTdHlsZVNoZWV0
KGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBVc2VyU3R5bGVTaGVldCYpPiYpIGNvbnN0
ID0gMDsKKworI2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCisgICAgdmlydHVhbCBj
b25zdCBVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yTWFwJiB1c2VyTWVzc2FnZUhhbmRsZXJE
ZXNjcmlwdG9ycygpIGNvbnN0ID0gMDsKKyNlbmRpZgorCisjaWYgRU5BQkxFKENPTlRFTlRfRVhU
RU5TSU9OUykKKyAgICB2aXJ0dWFsIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9u
c0JhY2tlbmQmIHVzZXJDb250ZW50RXh0ZW5zaW9uQmFja2VuZCgpID0gMDsKKyNlbmRpZgorCisg
ICAgdm9pZCBhZGRQYWdlKFBhZ2UmKTsKKyAgICB2b2lkIHJlbW92ZVBhZ2UoUGFnZSYpOworCisK
KyAgICAvLyBGSVhNRTogVGhlc2UgZG9uJ3QgcmVhbGx5IGJlbG9uZyBoZXJlLiAgVGhleSBzaG91
bGQgcHJvYmFibHkgYnVuZGxlZCB1cCBpbiB0aGUgQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kCisg
ICAgLy8gd2hpY2ggc2hvdWxkIGFsd2F5cyBleGlzdC4KKyAgICBDb250ZW50RXh0ZW5zaW9uczo6
QmxvY2tlZFN0YXR1cyBwcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9yTG9hZChSZXNvdXJj
ZVJlcXVlc3QmLCBSZXNvdXJjZVR5cGUsIERvY3VtZW50TG9hZGVyJiBpbml0aWF0aW5nRG9jdW1l
bnRMb2FkZXIpOworICAgIFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uPiBhY3Rpb25z
Rm9yUmVzb3VyY2VMb2FkKGNvbnN0IFJlc291cmNlTG9hZEluZm8mLCBEb2N1bWVudExvYWRlciYg
aW5pdGlhdGluZ0RvY3VtZW50TG9hZGVyKTsKKworcHJvdGVjdGVkOgorICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgaW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlSW5BbGxGcmFtZXNJbkFs
bFBhZ2VzKCk7CisKK3ByaXZhdGU6CisgICAgSGFzaFNldDxQYWdlKj4gbV9wYWdlczsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVzZXJDb250ZW50UHJvdmlkZXJf
aApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyTWVzc2FnZUhhbmRsZXJE
ZXNjcmlwdG9yLmgJKHJldmlzaW9uIDE5NzkxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNl
ck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw4ICs1NCw4
IEBAIHB1YmxpYzoKICAgICB9CiAgICAgV0VCQ09SRV9FWFBPUlQgflVzZXJNZXNzYWdlSGFuZGxl
ckRlc2NyaXB0b3IoKTsKIAotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSgpOwotICAgIERP
TVdyYXBwZXJXb3JsZCYgd29ybGQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBET01XcmFwcGVyV29ybGQmIHdvcmxk
KCk7CiAKICAgICBDbGllbnQqIGNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9CiAg
ICAgdm9pZCBpbnZhbGlkYXRlQ2xpZW50KCkgeyBtX2NsaWVudCA9IG51bGxwdHI7IH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNw
YWNlLmNwcAkocmV2aXNpb24gMTk3OTEyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyTWVz
c2FnZUhhbmRsZXJzTmFtZXNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTUgKzUzLDcg
QEAgVXNlck1lc3NhZ2VIYW5kbGVyKiBVc2VyTWVzc2FnZUhhbmRsZXJzTgogICAgIGlmICghcGFn
ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCi0gICAgY29uc3QgYXV0byogdXNlckNv
bnRlbnRDb250cm9sbGVyID0gcGFnZS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCk7Ci0gICAgaWYg
KCF1c2VyQ29udGVudENvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
Y29uc3QgYXV0byogdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMgPSB1c2VyQ29udGVudENv
bnRyb2xsZXItPnVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzKCk7Ci0gICAgaWYgKCF1c2Vy
TWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBSZWZQdHI8VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcj4gZGVzY3JpcHRvciA9IHVzZXJN
ZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzLT5nZXQoc3RkOjptYWtlX3BhaXIobmFtZSwgJndvcmxk
KSk7CisgICAgUmVmUHRyPFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3I+IGRlc2NyaXB0b3Ig
PSBwYWdlLT51c2VyQ29udGVudFByb3ZpZGVyKCkudXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRv
cnMoKS5nZXQoc3RkOjptYWtlX3BhaXIobmFtZSwgJndvcmxkKSk7CiAgICAgaWYgKCFkZXNjcmlw
dG9yKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApJbmRleDogU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24g
MTk3OTEyKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTE2IEBACisyMDE2LTAzLTA4ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgQWRkIGEgYmFzZVVSTCBwYXJhbWV0ZXIgdG8gX1dLVXNlclN0eWxlU2hlZXQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTIxOQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gTW92ZXMgdG8g
YSBtb2RlbCBmb3IgdXNlciBjb250ZW50IHdoZXJlIGluc3RlYWQgb2YgdXNpbmcgYSBXZWJDb3Jl
OjpVc2VyQ29udGVudENvbnRyb2xsZXIKKyAgICAgICAgICBvYmplY3QsIHdlIGltcGxlbWVudCB0
aGUgbmV3IFdlYkNvcmU6OlVzZXJDb250ZW50UHJvdmlkZXIgaW50ZXJmYWNlIChvbiB0aGUgZXhp
c3RpbmcgCisgICAgICAgICAgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyIG9iamVjdCkuCisgICAg
ICAgIC0gVXNlcyB0aGlzIHRvIG1haW50YWluIG1hcHMgb2YgVXNlclN0eWxlc1NoZWV0cyBhbmQg
VXNlclNjcmlwdHMgYWxvbmcgd2l0aCB0aGVpciBpZGVudGlmaWVycywKKyAgICAgICAgICBmcmVl
aW5nIHVwIHRoZSBVUkwsIHdoaWNoIGhhZCBiZWVuIGFjdGluZyBhcyB0aGUgaWRlbnRpZmllciwg
dG8gYmUgdXNlZCBhcyB0aGUgYmFzZVVSTCB3aGljaAorICAgICAgICAgIHdhcyB3aGF0IGl0IHdh
cyBpbnRlbmRlZCBmb3IuCisgICAgICAgIC0gQWRkcyBhIGJhc2VVUkwgcHJvcGVydHkgdG8gX1dL
VXNlclN0eWxlU2hlZXQuCisKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgIEFkZCBuZXcgZmlsZXMuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dC9tZXNzYWdlcy5weToKKyAgICAgICAgKGhlYWRlcnNfZm9yX3R5cGUpOgorICAgICAgICBBZGQg
c3VwcG9ydCBmb3Igc2VuZGluZyBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuCisK
KyAgICAgICAgKiBTaGFyZWQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJTY3JpcHREYXRhOjplbmNvZGUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJVc2VyU2NyaXB0RGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVXNlclN0eWxlU2hlZXREYXRhOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJV
c2VyU3R5bGVTaGVldERhdGE6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYlVzZXJDb250
ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oOiBBZGRlZC4KKyAgICAgICAgQWRkIGhlbHBlciB0eXBl
cyBmb3Igc2VuZGluZyB1c2VyIGNvbnRlbnQgb3ZlciBJUEMuCisKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0FQSVVzZXJTY3JpcHQuY3BwOgorICAgICAgICAoQVBJOjpVc2VyU2NyaXB0OjpnZW5l
cmF0ZVVuaXF1ZVVSTCk6CisgICAgICAgIChBUEk6OlVzZXJTY3JpcHQ6OlVzZXJTY3JpcHQpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlclNjcmlwdC5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQVBJVXNlclN0eWxlU2hlZXQuY3BwOgorICAgICAgICAoQVBJOjpVc2VyU3R5bGVT
aGVldDo6Z2VuZXJhdGVVbmlxdWVVUkwpOgorICAgICAgICAoQVBJOjpVc2VyU3R5bGVTaGVldDo6
VXNlclN0eWxlU2hlZXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlclN0eWxlU2hl
ZXQuaDoKKyAgICAgICAgQWRkIGlkZW50aWZpZXJzIGZvciB0cmFja2luZyBhY3Jvc3MgcHJvY2Vz
c2VzLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyU3R5bGVTaGVldC5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlclN0eWxlU2hlZXQubW06Cisg
ICAgICAgICgtW19XS1VzZXJTdHlsZVNoZWV0IGluaXRXaXRoU291cmNlOmZvck1haW5GcmFtZU9u
bHk6bGVnYWN5V2hpdGVsaXN0OmxlZ2FjeUJsYWNrbGlzdDpiYXNlVVJMOnVzZXJDb250ZW50V29y
bGQ6XSk6CisgICAgICAgICgtW19XS1VzZXJTdHlsZVNoZWV0IGJhc2VVUkxdKToKKyAgICAgICAg
QWRkIG5ldyBpbml0aWFsaXplciB3aGljaCB0YWtlcyBhIGJhc2VVUkwgYXMgd2VsbCBhcyBhbiBh
Y2Nlc3NvciBmb3IgdGhlIGJhc2VVUkwuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvVXNlckNvbnRl
bnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6YWRkUHJvY2Vzcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjphZGRVc2VyU2NyaXB0KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92ZVVzZXJTY3Jp
cHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6YWRk
VXNlclN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXJQcm94eTo6cmVtb3ZlVXNlclN0eWxlU2hlZXQpOgorICAgICAgICBQYXNzIGlkZW50aWZpZXJz
IGFzIHdlbGwgYXMgdXNlciBjb250ZW50LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVu
ZGxlOjphZGRVc2VyU2NyaXB0KToKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGU6OmFk
ZFVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAgTW92ZSB1c2VyIGNvbnRlbnQgaW4gdmlhIG1vdmUg
c2VtYW50aWNzIHJhdGhlciB0aGFuIHVzaW5nIGEgdW5pcXVlX3B0ci4KKworICAgICAgICAoV2Vi
S2l0OjpJbmplY3RlZEJ1bmRsZTo6cmVtb3ZlVXNlclNjcmlwdCk6CisgICAgICAgIChXZWJLaXQ6
OkluamVjdGVkQnVuZGxlOjpyZW1vdmVVc2VyU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJLaXQ6
OkluamVjdGVkQnVuZGxlOjpyZW1vdmVVc2VyU2NyaXB0cyk6CisgICAgICAgIChXZWJLaXQ6Oklu
amVjdGVkQnVuZGxlOjpyZW1vdmVVc2VyU3R5bGVTaGVldHMpOgorICAgICAgICAoV2ViS2l0OjpJ
bmplY3RlZEJ1bmRsZTo6cmVtb3ZlQWxsVXNlckNvbnRlbnQpOgorICAgICAgICBVcGRhdGUgZm9y
IG5ldyBmdW5jdGlvbiBzaWduYXR1cmVzLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9Vc2VyQ29u
dGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJV
c2VyQ29udGVudENvbnRyb2xsZXI6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcik6CisgICAgICAg
IChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6fldlYlVzZXJDb250ZW50Q29udHJv
bGxlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNl
ckNvbnRlbnRXb3JsZHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXI6OnJlbW92ZVVzZXJDb250ZW50V29ybGRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNv
bnRlbnRDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlVz
ZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlwdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxsVXNlclNjcmlwdHMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNoZWV0cyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclN0
eWxlU2hlZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJl
bW92ZUFsbFVzZXJTdHlsZVNoZWV0cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50
Q29udHJvbGxlcjo6YWRkVXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVycyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlwdE1lc3NhZ2VIYW5k
bGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2Vy
Q29udGVudEV4dGVuc2lvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRy
b2xsZXI6OnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVBbGxVc2VyQ29udGVudEV4dGVuc2lvbnMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHRJ
bnRlcm5hbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRk
VXNlclNjcmlwdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6
cmVtb3ZlVXNlclNjcmlwdFdpdGhVUkwpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTY3JpcHRJbnRlcm5hbCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlwdHMpOgorICAgICAgICAo
V2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNoZWV0SW50ZXJu
YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJT
dHlsZVNoZWV0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpy
ZW1vdmVVc2VyU3R5bGVTaGVldFdpdGhVUkwpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNoZWV0SW50ZXJuYWwpOgorICAgICAgICAo
V2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNoZWV0cyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxsVXNl
ckNvbnRlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmZv
ckVhY2hVc2VyU2NyaXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9s
bGVyOjpmb3JFYWNoVXNlclN0eWxlU2hlZXQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvVXNlckNv
bnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9V
c2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIubWVzc2FnZXMuaW46CisgICAgICAg
IENvbnZlcnQgdG8gaW5oZXJpdGluZyBmcm9tIFVzZXJDb250ZW50UHJvdmlkZXIsIHJhdGhlciB0
aGFuIGNvbnRhaW5pbmcgYSBVc2VyQ29udGVudENvbnRyb2xsZXIuCisgICAgICAgIFRoaXMgbWVh
bnMgYWRkaW5nIHRoZSBzdG9yYWdlIGZvciB0aGUgdXNlciBjb250ZW50LCB3aGljaCBoYXMgYmVl
biBzaW1wbGlmaWVkIHRvIGF2b2lkIHVzaW5nCisgICAgICAgIHVuaXF1ZV9wdHJzLgorCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlOjphZGRVc2VyU2NyaXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6YWRkVXNl
clN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpyZW1vdmVBbGxVc2VyQ29u
dGVudCk6CisgICAgICAgIFVwZGF0ZSB0byBjYWxsIHRoZSBXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXIsIHJhdGhlciB0aGFuIGdvaW5nIHRvIHRoZSBVc2VyQ29udGVudENvbnRyb2xsZXIsIHdoaWNo
CisgICAgICAgIG5vIGxvbmdlciBleGlzdHMuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZUdyb3VwUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlR3JvdXBQ
cm94eTo6dXNlckNvbnRlbnRDb250cm9sbGVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZUdyb3VwUHJveHkuaDoKKyAgICAgICAgUmV0dXJuIHRoZSBXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXIgcmF0aGVyIHRoYW4gb2xkIFVzZXJDb250ZW50Q29udHJvbGxlci4KKwogMjAx
Ni0wMy0wOSAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJF
R1JFU1NJT04gKHIxOTcxNDkpOiBNaXNzaW5nIGF2YWlsYWJpbGl0eSBjaGVja3Mgd2hlbiBzb2Z0
LWxpbmtpbmcgRGF0YURldGVjdG9ycy5mcmFtZXdvcmsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1Nj
cmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1Nj
cmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CShyZXZpc2lvbiAxOTc5MTIpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQkod29ya2luZyBjb3B5KQpAQCAtMzc4LDYg
KzM3OCw4IEBAIGRlZiBoZWFkZXJzX2Zvcl90eXBlKHR5cGUpOgogICAgICAgICAnV2ViS2l0OjpX
ZWJUb3VjaEV2ZW50JzogWyciV2ViRXZlbnQuaCInXSwKICAgICAgICAgJ1dlYktpdDo6V2ViV2hl
ZWxFdmVudCc6IFsnIldlYkV2ZW50LmgiJ10sCiAgICAgICAgICdXZWJLaXQ6OldlYlNjcmlwdE1l
c3NhZ2VIYW5kbGVySGFuZGxlJzogWyciV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIuaCInXSwKKyAg
ICAgICAgJ3N0cnVjdCBXZWJLaXQ6OldlYlVzZXJTY3JpcHREYXRhJzogWyciV2ViVXNlckNvbnRl
bnRDb250cm9sbGVyRGF0YVR5cGVzLmgiJ10sCisgICAgICAgICdzdHJ1Y3QgV2ViS2l0OjpXZWJV
c2VyU3R5bGVTaGVldERhdGEnOiBbJyJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMu
aCInXSwKICAgICAgICAgJ3N0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQnOiBb
JzxjaHJvbm8+J10sCiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJE
YXRhVHlwZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
RGF0YVR5cGVzLmgiCisKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgV2ViVXNlclNjcmlwdERhdGE6OmVuY29kZShJUEM6OkFy
Z3VtZW50RW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IGlkZW50aWZp
ZXI7CisgICAgZW5jb2RlciA8PCB3b3JsZElkZW50aWZpZXI7CisgICAgZW5jb2RlciA8PCB1c2Vy
U2NyaXB0OworfQorCitib29sIFdlYlVzZXJTY3JpcHREYXRhOjpkZWNvZGUoSVBDOjpBcmd1bWVu
dERlY29kZXImIGRlY29kZXIsIFdlYlVzZXJTY3JpcHREYXRhJiBkYXRhKQoreworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoZGF0YS5pZGVudGlmaWVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGF0YS53b3JsZElkZW50aWZpZXIpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShkYXRhLnVzZXJTY3JpcHQpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViVXNl
clN0eWxlU2hlZXREYXRhOjplbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIpIGNv
bnN0Cit7CisgICAgZW5jb2RlciA8PCBpZGVudGlmaWVyOworICAgIGVuY29kZXIgPDwgd29ybGRJ
ZGVudGlmaWVyOworICAgIGVuY29kZXIgPDwgdXNlclN0eWxlU2hlZXQ7Cit9CisKK2Jvb2wgV2Vi
VXNlclN0eWxlU2hlZXREYXRhOjpkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29kZXIs
IFdlYlVzZXJTdHlsZVNoZWV0RGF0YSYgZGF0YSkKK3sKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGRhdGEuaWRlbnRpZmllcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKGRhdGEud29ybGRJZGVudGlmaWVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGF0YS51c2VyU3R5bGVTaGVldCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0
YVR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlVzZXJDb250
ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlVzZXJDb250ZW50Q29u
dHJvbGxlckRhdGFUeXBlc19oCisjZGVmaW5lIFdlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFU
eXBlc19oCisKKyNpbmNsdWRlIDxXZWJDb3JlL1VzZXJTY3JpcHQuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1VzZXJTdHlsZVNoZWV0Lmg+CisKK25hbWVzcGFjZSBJUEMgeworY2xhc3MgQXJndW1lbnRE
ZWNvZGVyOworY2xhc3MgQXJndW1lbnRFbmNvZGVyOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsK
Kworc3RydWN0IFdlYlVzZXJTY3JpcHREYXRhIHsKKyAgICB2b2lkIGVuY29kZShJUEM6OkFyZ3Vt
ZW50RW5jb2RlciYpIGNvbnN0OworICAgIHN0YXRpYyBib29sIGRlY29kZShJUEM6OkFyZ3VtZW50
RGVjb2RlciYsIFdlYlVzZXJTY3JpcHREYXRhJik7CisKKyAgICB1aW50NjRfdCBpZGVudGlmaWVy
OworICAgIHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllcjsKKyAgICBXZWJDb3JlOjpVc2VyU2NyaXB0
IHVzZXJTY3JpcHQ7Cit9OworCitzdHJ1Y3QgV2ViVXNlclN0eWxlU2hlZXREYXRhIHsKKyAgICB2
b2lkIGVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0OworICAgIHN0YXRpYyBib29s
IGRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYsIFdlYlVzZXJTdHlsZVNoZWV0RGF0YSYpOwor
CisgICAgdWludDY0X3QgaWRlbnRpZmllcjsKKyAgICB1aW50NjRfdCB3b3JsZElkZW50aWZpZXI7
CisgICAgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQgdXNlclN0eWxlU2hlZXQ7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlVzZXJDb250ZW50Q29udHJvbGxlckRh
dGFUeXBlc19oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJTY3Jp
cHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNl
clNjcmlwdC5jcHAJKHJldmlzaW9uIDE5NzkxMikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQVBJVXNlclNjcmlwdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDExICszOSwyMCBA
QCBzdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVJZGVudGlmaWVyKCkKIAogV2ViQ29yZTo6VVJMIFVz
ZXJTY3JpcHQ6OmdlbmVyYXRlVW5pcXVlVVJMKCkKIHsKKyAgICBzdGF0aWMgdWludDY0X3QgaWRl
bnRpZmllcjsKKwogICAgIFN0cmluZ0J1aWxkZXIgdXJsU3RyaW5nQnVpbGRlcjsKICAgICB1cmxT
dHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoInVzZXItc2NyaXB0OiIpOwotICAgIHVybFN0cmlu
Z0J1aWxkZXIuYXBwZW5kTnVtYmVyKGdlbmVyYXRlSWRlbnRpZmllcigpKTsKKyAgICB1cmxTdHJp
bmdCdWlsZGVyLmFwcGVuZE51bWJlcigrK2lkZW50aWZpZXIpOwogICAgIHJldHVybiB7IHsgfSwg
dXJsU3RyaW5nQnVpbGRlci50b1N0cmluZygpIH07CiB9CiAKK1VzZXJTY3JpcHQ6OlVzZXJTY3Jp
cHQoV2ViQ29yZTo6VXNlclNjcmlwdCB1c2VyU2NyaXB0LCBBUEk6OlVzZXJDb250ZW50V29ybGQm
IHdvcmxkKQorICAgIDogbV9pZGVudGlmaWVyKGdlbmVyYXRlSWRlbnRpZmllcigpKQorICAgICwg
bV91c2VyU2NyaXB0KHVzZXJTY3JpcHQpCisgICAgLCBtX3dvcmxkKHdvcmxkKQoreworfQorCiAK
IH0gLy8gbmFtZXNwYWNlIEFQSQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9B
UElVc2VyU2NyaXB0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9BUElVc2VyU2NyaXB0LmgJKHJldmlzaW9uIDE5NzkxMikKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQVBJVXNlclNjcmlwdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMSArNDEs
OSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVzZXJTY3JpcHQoV1RG
TW92ZSh1c2VyU2NyaXB0KSwgd29ybGQpKTsKICAgICB9CiAKLSAgICBVc2VyU2NyaXB0KFdlYkNv
cmU6OlVzZXJTY3JpcHQgdXNlclNjcmlwdCwgQVBJOjpVc2VyQ29udGVudFdvcmxkJiB3b3JsZCkK
LSAgICAgICAgOiBtX3VzZXJTY3JpcHQodXNlclNjcmlwdCkKLSAgICAgICAgLCBtX3dvcmxkKHdv
cmxkKQotICAgIHsKLSAgICB9CisgICAgVXNlclNjcmlwdChXZWJDb3JlOjpVc2VyU2NyaXB0LCBB
UEk6OlVzZXJDb250ZW50V29ybGQmKTsKKworICAgIHVpbnQ2NF90IGlkZW50aWZpZXIoKSBjb25z
dCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KIAogICAgIGNvbnN0IFdlYkNvcmU6OlVzZXJTY3Jp
cHQmIHVzZXJTY3JpcHQoKSBjb25zdCB7IHJldHVybiBtX3VzZXJTY3JpcHQ7IH0KICAgICAKQEAg
LTUzLDYgKzUxLDcgQEAgcHVibGljOgogICAgIGNvbnN0IFVzZXJDb250ZW50V29ybGQmIHVzZXJD
b250ZW50V29ybGQoKSBjb25zdCB7IHJldHVybiBtX3dvcmxkOyB9CiAgICAgCiBwcml2YXRlOgor
ICAgIHVpbnQ2NF90IG1faWRlbnRpZmllcjsKICAgICBXZWJDb3JlOjpVc2VyU2NyaXB0IG1fdXNl
clNjcmlwdDsKICAgICBSZWY8VXNlckNvbnRlbnRXb3JsZD4gbV93b3JsZDsKIH07CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJTdHlsZVNoZWV0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJTdHlsZVNoZWV0LmNw
cAkocmV2aXNpb24gMTk3OTEyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElV
c2VyU3R5bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDExICszOSwxOSBAQCBzdGF0
aWMgdWludDY0X3QgZ2VuZXJhdGVJZGVudGlmaWVyKCkKIAogV2ViQ29yZTo6VVJMIFVzZXJTdHls
ZVNoZWV0OjpnZW5lcmF0ZVVuaXF1ZVVSTCgpCiB7CisgICAgc3RhdGljIHVpbnQ2NF90IGlkZW50
aWZpZXI7CisKICAgICBTdHJpbmdCdWlsZGVyIHVybFN0cmluZ0J1aWxkZXI7CiAgICAgdXJsU3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJ1c2VyLXN0eWxlLXNoZWV0OiIpOwotICAgIHVybFN0
cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKGdlbmVyYXRlSWRlbnRpZmllcigpKTsKKyAgICB1cmxT
dHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcigrK2lkZW50aWZpZXIpOwogICAgIHJldHVybiB7IHsg
fSwgdXJsU3RyaW5nQnVpbGRlci50b1N0cmluZygpIH07CiB9CiAKK1VzZXJTdHlsZVNoZWV0OjpV
c2VyU3R5bGVTaGVldChXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCB1c2VyU3R5bGVTaGVldCwgQVBJ
OjpVc2VyQ29udGVudFdvcmxkJiB3b3JsZCkKKyAgICA6IG1faWRlbnRpZmllcihnZW5lcmF0ZUlk
ZW50aWZpZXIoKSkKKyAgICAsIG1fdXNlclN0eWxlU2hlZXQodXNlclN0eWxlU2hlZXQpCisgICAg
LCBtX3dvcmxkKHdvcmxkKQoreworfQogCiB9IC8vIG5hbWVzcGFjZSBBUEkKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlclN0eWxlU2hlZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJTdHlsZVNoZWV0LmgJKHJldmlz
aW9uIDE5NzkxMikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlclN0eWxl
U2hlZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTEgKzQxLDkgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVc2VyU3R5bGVTaGVldChXVEZNb3ZlKHVzZXJTdHlsZVNo
ZWV0KSwgd29ybGQpKTsKICAgICB9CiAKLSAgICBVc2VyU3R5bGVTaGVldChXZWJDb3JlOjpVc2Vy
U3R5bGVTaGVldCB1c2VyU3R5bGVTaGVldCwgQVBJOjpVc2VyQ29udGVudFdvcmxkJiB3b3JsZCkK
LSAgICAgICAgOiBtX3VzZXJTdHlsZVNoZWV0KHVzZXJTdHlsZVNoZWV0KQotICAgICAgICAsIG1f
d29ybGQod29ybGQpCi0gICAgewotICAgIH0KKyAgICBVc2VyU3R5bGVTaGVldChXZWJDb3JlOjpV
c2VyU3R5bGVTaGVldCwgQVBJOjpVc2VyQ29udGVudFdvcmxkJik7CisKKyAgICB1aW50NjRfdCBp
ZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CiAKICAgICBjb25zdCBX
ZWJDb3JlOjpVc2VyU3R5bGVTaGVldCYgdXNlclN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBt
X3VzZXJTdHlsZVNoZWV0OyB9CiAKQEAgLTUzLDYgKzUxLDcgQEAgcHVibGljOgogICAgIGNvbnN0
IFVzZXJDb250ZW50V29ybGQmIHVzZXJDb250ZW50V29ybGQoKSBjb25zdCB7IHJldHVybiBtX3dv
cmxkOyB9CiAKIHByaXZhdGU6CisgICAgdWludDY0X3QgbV9pZGVudGlmaWVyOwogICAgIFdlYkNv
cmU6OlVzZXJTdHlsZVNoZWV0IG1fdXNlclN0eWxlU2hlZXQ7CiAgICAgUmVmPFVzZXJDb250ZW50
V29ybGQ+IG1fd29ybGQ7CiB9OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9fV0tVc2VyU3R5bGVTaGVldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlclN0eWxlU2hlZXQuaAkocmV2aXNpb24gMTk3OTEyKQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyU3R5bGVTaGVldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMSArMzgsMTMgQEAgV0tfQ0xBU1NfQVZBSUxBQkxFKFdL
X01BQ19UQkEsIFdLX0lPU19UQgogCiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNv
cHkpIE5TU3RyaW5nICpzb3VyY2U7CiAKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwg
Y29weSkgTlNVUkwgKmJhc2VVUkw7CisKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwg
Z2V0dGVyPWlzRm9yTWFpbkZyYW1lT25seSkgQk9PTCBmb3JNYWluRnJhbWVPbmx5OwogCiAtIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGZvck1haW5GcmFt
ZU9ubHk6KEJPT0wpZm9yTWFpbkZyYW1lT25seTsKLQogLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
U291cmNlOihOU1N0cmluZyAqKXNvdXJjZSBmb3JNYWluRnJhbWVPbmx5OihCT09MKWZvck1haW5G
cmFtZU9ubHkgbGVnYWN5V2hpdGVsaXN0OihXS19BUlJBWShOU1N0cmluZyAqKSAqKWxlZ2FjeVdo
aXRlbGlzdCBsZWdhY3lCbGFja2xpc3Q6KFdLX0FSUkFZKE5TU3RyaW5nICopICopbGVnYWN5Qmxh
Y2tsaXN0IHVzZXJDb250ZW50V29ybGQ6KF9XS1VzZXJDb250ZW50V29ybGQgKil1c2VyQ29udGVu
dFdvcmxkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU291cmNlOihOU1N0cmluZyAqKXNvdXJj
ZSBmb3JNYWluRnJhbWVPbmx5OihCT09MKWZvck1haW5GcmFtZU9ubHkgbGVnYWN5V2hpdGVsaXN0
OihXS19BUlJBWShOU1N0cmluZyAqKSAqKWxlZ2FjeVdoaXRlbGlzdCBsZWdhY3lCbGFja2xpc3Q6
KFdLX0FSUkFZKE5TU3RyaW5nICopICopbGVnYWN5QmxhY2tsaXN0IGJhc2VVUkw6KE5TVVJMICop
YmFzZVVSTCB1c2VyQ29udGVudFdvcmxkOihfV0tVc2VyQ29udGVudFdvcmxkICopdXNlckNvbnRl
bnRXb3JsZDsKIAogQGVuZAogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Nv
Y29hL19XS1VzZXJTdHlsZVNoZWV0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlclN0eWxlU2hlZXQubW0JKHJldmlzaW9uIDE5NzkxMikK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlclN0eWxlU2hlZXQu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2ltcG9ydCAiQVBJQXJyYXku
aCIKICNpbXBvcnQgIldLTlNBcnJheS5oIgorI2ltcG9ydCAiV0tOU1VSTEV4dHJhcy5oIgogI2lt
cG9ydCAiV2ViS2l0MkluaXRpYWxpemUuaCIKICNpbXBvcnQgIl9XS1VzZXJDb250ZW50V29ybGRJ
bnRlcm5hbC5oIgogCkBAIC02MSwxMSArNjIsMjkgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
U291cmNlOihOU1N0cmluZwogICAgIHJldHVybiBzZWxmOwogfQogCistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGZvck1haW5GcmFtZU9ubHk6KEJPT0wp
Zm9yTWFpbkZyYW1lT25seSBsZWdhY3lXaGl0ZWxpc3Q6KFdLX0FSUkFZKE5TU3RyaW5nICopICop
bGVnYWN5V2hpdGVsaXN0IGxlZ2FjeUJsYWNrbGlzdDooV0tfQVJSQVkoTlNTdHJpbmcgKikgKils
ZWdhY3lCbGFja2xpc3QgYmFzZVVSTDooTlNVUkwgKiliYXNlVVJMIHVzZXJDb250ZW50V29ybGQ6
KF9XS1VzZXJDb250ZW50V29ybGQgKil1c2VyQ29udGVudFdvcmxkCit7CisgICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICAvLyBGSVhNRTog
SW4gdGhlIEFQSSB0ZXN0LCB3ZSBjYW4gdXNlIGdlbmVyYXRlVW5pcXVlVVJMIGJlbG93IGJlZm9y
ZSB0aGUgQVBJOjpPYmplY3QgY29uc3RydWN0b3IgaGFzIGRvbmUgdGhpcy4uLiB3aGVyZSBzaG91
bGQgdGhpcyByZWFsbHkgYmU/CisgICAgV2ViS2l0OjpJbml0aWFsaXplV2ViS2l0MigpOworCisg
ICAgQVBJOjpPYmplY3Q6OmNvbnN0cnVjdEluV3JhcHBlcjxBUEk6OlVzZXJTdHlsZVNoZWV0Pihz
ZWxmLCBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCB7IFdURjo6U3RyaW5nKHNvdXJjZSksIHsgeyB9
LCBXVEY6OlN0cmluZyhbYmFzZVVSTCBfd2ViX29yaWdpbmFsRGF0YUFzV1RGU3RyaW5nXSkgfSwg
QVBJOjp0b1N0cmluZ1ZlY3RvcihsZWdhY3lXaGl0ZWxpc3QpLCBBUEk6OnRvU3RyaW5nVmVjdG9y
KGxlZ2FjeUJsYWNrbGlzdCksIGZvck1haW5GcmFtZU9ubHkgPyBXZWJDb3JlOjpJbmplY3RJblRv
cEZyYW1lT25seSA6IFdlYkNvcmU6OkluamVjdEluQWxsRnJhbWVzLCBXZWJDb3JlOjpVc2VyU3R5
bGVVc2VyTGV2ZWwgfSwgKnVzZXJDb250ZW50V29ybGQtPl91c2VyQ29udGVudFdvcmxkKTsKKwor
ICAgIHJldHVybiBzZWxmOworfQorCiAtIChOU1N0cmluZyAqKXNvdXJjZQogewogICAgIHJldHVy
biBfdXNlclN0eWxlU2hlZXQtPnVzZXJTdHlsZVNoZWV0KCkuc291cmNlKCk7CiB9CiAKKy0gKE5T
VVJMICopYmFzZVVSTAoreworICAgIHJldHVybiBfdXNlclN0eWxlU2hlZXQtPnVzZXJTdHlsZVNo
ZWV0KCkudXJsKCk7Cit9CisKIC0gKEJPT0wpaXNGb3JNYWluRnJhbWVPbmx5CiB7CiAgICAgcmV0
dXJuIF91c2VyU3R5bGVTaGVldC0+dXNlclN0eWxlU2hlZXQoKS5pbmplY3RlZEZyYW1lcygpID09
IFdlYkNvcmU6OkluamVjdEluVG9wRnJhbWVPbmx5OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyUHJveHkuY3BwCShyZXZpc2lvbiAxOTc5MTIpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRGF0YVJlZmVy
ZW5jZS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIldlYlNjcmlw
dE1lc3NhZ2VIYW5kbGVyLmgiCisjaW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0
YVR5cGVzLmgiCiAjaW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9sbGVyTWVzc2FnZXMuaCIK
ICNpbmNsdWRlICJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1lc3NhZ2VzLmgiCiAjaW5j
bHVkZSA8V2ViQ29yZS9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaD4KQEAgLTgwLDE0ICs4MSwxNCBA
QCB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjphZGRQCiAgICAgICAgIHVzZXJD
b250ZW50V29ybGRzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcih3b3JsZC5rZXktPmlkZW50aWZpZXIo
KSwgd29ybGQua2V5LT5uYW1lKCkpKTsKICAgICB3ZWJQcm9jZXNzUHJveHkuY29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OkFkZFVzZXJDb250ZW50
V29ybGRzKHVzZXJDb250ZW50V29ybGRzKSwgbV9pZGVudGlmaWVyKTsKIAotICAgIFZlY3Rvcjxz
dGQ6OnBhaXI8dWludDY0X3QsIFdlYkNvcmU6OlVzZXJTY3JpcHQ+PiB1c2VyU2NyaXB0czsKKyAg
ICBWZWN0b3I8V2ViVXNlclNjcmlwdERhdGE+IHVzZXJTY3JpcHRzOwogICAgIGZvciAoY29uc3Qg
YXV0byYgdXNlclNjcmlwdCA6IG1fdXNlclNjcmlwdHMtPmVsZW1lbnRzT2ZUeXBlPEFQSTo6VXNl
clNjcmlwdD4oKSkKLSAgICAgICAgdXNlclNjcmlwdHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHVz
ZXJTY3JpcHQtPnVzZXJDb250ZW50V29ybGQoKS5pZGVudGlmaWVyKCksIHVzZXJTY3JpcHQtPnVz
ZXJTY3JpcHQoKSkpOworICAgICAgICB1c2VyU2NyaXB0cy5hcHBlbmQoeyB1c2VyU2NyaXB0LT5p
ZGVudGlmaWVyKCksIHVzZXJTY3JpcHQtPnVzZXJDb250ZW50V29ybGQoKS5pZGVudGlmaWVyKCks
IHVzZXJTY3JpcHQtPnVzZXJTY3JpcHQoKSB9KTsKICAgICB3ZWJQcm9jZXNzUHJveHkuY29ubmVj
dGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OkFkZFVzZXJT
Y3JpcHRzKHVzZXJTY3JpcHRzKSwgbV9pZGVudGlmaWVyKTsKIAotICAgIFZlY3RvcjxzdGQ6OnBh
aXI8dWludDY0X3QsIFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0Pj4gdXNlclN0eWxlU2hlZXRzOwor
ICAgIFZlY3RvcjxXZWJVc2VyU3R5bGVTaGVldERhdGE+IHVzZXJTdHlsZVNoZWV0czsKICAgICBm
b3IgKGNvbnN0IGF1dG8mIHVzZXJTdHlsZVNoZWV0IDogbV91c2VyU3R5bGVTaGVldHMtPmVsZW1l
bnRzT2ZUeXBlPEFQSTo6VXNlclN0eWxlU2hlZXQ+KCkpCi0gICAgICAgIHVzZXJTdHlsZVNoZWV0
cy5hcHBlbmQoc3RkOjptYWtlX3BhaXIodXNlclN0eWxlU2hlZXQtPnVzZXJDb250ZW50V29ybGQo
KS5pZGVudGlmaWVyKCksIHVzZXJTdHlsZVNoZWV0LT51c2VyU3R5bGVTaGVldCgpKSk7CisgICAg
ICAgIHVzZXJTdHlsZVNoZWV0cy5hcHBlbmQoeyB1c2VyU3R5bGVTaGVldC0+aWRlbnRpZmllcigp
LCB1c2VyU3R5bGVTaGVldC0+dXNlckNvbnRlbnRXb3JsZCgpLmlkZW50aWZpZXIoKSwgdXNlclN0
eWxlU2hlZXQtPnVzZXJTdHlsZVNoZWV0KCkgfSk7CiAgICAgd2ViUHJvY2Vzc1Byb3h5LmNvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpBZGRVc2Vy
U3R5bGVTaGVldHModXNlclN0eWxlU2hlZXRzKSwgbV9pZGVudGlmaWVyKTsKIAogICAgIFZlY3Rv
cjxXZWJTY3JpcHRNZXNzYWdlSGFuZGxlckhhbmRsZT4gbWVzc2FnZUhhbmRsZXJIYW5kbGVzOwpA
QCAtMTY4LDcgKzE2OSw3IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFk
ZFUKICAgICBtX3VzZXJTY3JpcHRzLT5lbGVtZW50cygpLmFwcGVuZCgmdXNlclNjcmlwdCk7CiAK
ICAgICBmb3IgKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKQotICAgICAg
ICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6QWRkVXNlclNjcmlwdHMoeyBzdGQ6Om1ha2VfcGFpcih3b3JsZC0+aWRlbnRpZmll
cigpLCB1c2VyU2NyaXB0LnVzZXJTY3JpcHQoKSkgfSksIG1faWRlbnRpZmllcik7CisgICAgICAg
IHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250
cm9sbGVyOjpBZGRVc2VyU2NyaXB0cyh7IHsgdXNlclNjcmlwdC5pZGVudGlmaWVyKCksIHdvcmxk
LT5pZGVudGlmaWVyKCksIHVzZXJTY3JpcHQudXNlclNjcmlwdCgpIH0gfSksIG1faWRlbnRpZmll
cik7CiB9CiAKIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92ZVVzZXJT
Y3JpcHQoQVBJOjpVc2VyU2NyaXB0JiB1c2VyU2NyaXB0KQpAQCAtMTc2LDcgKzE3Nyw3IEBAIHZv
aWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW8KICAgICBSZWY8QVBJOjpVc2Vy
Q29udGVudFdvcmxkPiB3b3JsZCA9IHVzZXJTY3JpcHQudXNlckNvbnRlbnRXb3JsZCgpOwogCiAg
ICAgZm9yIChXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykKLSAgICAgICAg
cHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRy
b2xsZXI6OlJlbW92ZVVzZXJTY3JpcHQod29ybGQtPmlkZW50aWZpZXIoKSwgdXNlclNjcmlwdC51
c2VyU2NyaXB0KCkudXJsKCkuc3RyaW5nKCkpLCBtX2lkZW50aWZpZXIpOworICAgICAgICBwcm9j
ZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxl
cjo6UmVtb3ZlVXNlclNjcmlwdCh3b3JsZC0+aWRlbnRpZmllcigpLCB1c2VyU2NyaXB0LmlkZW50
aWZpZXIoKSksIG1faWRlbnRpZmllcik7CiAKICAgICBtX3VzZXJTY3JpcHRzLT5lbGVtZW50cygp
LnJlbW92ZUFsbCgmdXNlclNjcmlwdCk7CiAKQEAgLTIyMyw3ICsyMjQsNyBAQCB2b2lkIFdlYlVz
ZXJDb250ZW50Q29udHJvbGxlclByb3h5OjphZGRVCiAgICAgbV91c2VyU3R5bGVTaGVldHMtPmVs
ZW1lbnRzKCkuYXBwZW5kKCZ1c2VyU3R5bGVTaGVldCk7CiAKICAgICBmb3IgKFdlYlByb2Nlc3NQ
cm94eSogcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKQotICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6QWRkVXNlclN0eWxl
U2hlZXRzKHsgc3RkOjptYWtlX3BhaXIod29ybGQtPmlkZW50aWZpZXIoKSwgdXNlclN0eWxlU2hl
ZXQudXNlclN0eWxlU2hlZXQoKSkgfSksIG1faWRlbnRpZmllcik7CisgICAgICAgIHByb2Nlc3Mt
PmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpB
ZGRVc2VyU3R5bGVTaGVldHMoeyB7IHVzZXJTdHlsZVNoZWV0LmlkZW50aWZpZXIoKSwgd29ybGQt
PmlkZW50aWZpZXIoKSwgdXNlclN0eWxlU2hlZXQudXNlclN0eWxlU2hlZXQoKSB9IH0pLCBtX2lk
ZW50aWZpZXIpOwogfQogCiB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpyZW1v
dmVVc2VyU3R5bGVTaGVldChBUEk6OlVzZXJTdHlsZVNoZWV0JiB1c2VyU3R5bGVTaGVldCkKQEAg
LTIzMSw3ICsyMzIsNyBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpyZW1v
CiAgICAgUmVmPEFQSTo6VXNlckNvbnRlbnRXb3JsZD4gd29ybGQgPSB1c2VyU3R5bGVTaGVldC51
c2VyQ29udGVudFdvcmxkKCk7CiAKICAgICBmb3IgKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcyA6
IG1fcHJvY2Vzc2VzKQotICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6UmVtb3ZlVXNlclN0eWxlU2hlZXQod29ybGQt
PmlkZW50aWZpZXIoKSwgdXNlclN0eWxlU2hlZXQudXNlclN0eWxlU2hlZXQoKS51cmwoKS5zdHJp
bmcoKSksIG1faWRlbnRpZmllcik7CisgICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpSZW1vdmVVc2VyU3R5bGVTaGVl
dCh3b3JsZC0+aWRlbnRpZmllcigpLCB1c2VyU3R5bGVTaGVldC5pZGVudGlmaWVyKCkpLCBtX2lk
ZW50aWZpZXIpOwogCiAgICAgbV91c2VyU3R5bGVTaGVldHMtPmVsZW1lbnRzKCkucmVtb3ZlQWxs
KCZ1c2VyU3R5bGVTaGVldCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQy
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5NzkxMikKKysrIFNvdXJjZS9X
ZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMTA0NCw2ICsxMDQ0LDggQEAKIAkJN0E3OTFFRkExQzdDRkNGMTAwQzRDNTJCIC8qIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTc5MUVGOTFDN0NGQjM3MDBDNEM1
MkIgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlTWVzc2FnZVJlY2VpdmVyLmNwcCAq
LzsgfTsKIAkJN0E3OTFFRkIxQzdDRkQwMTAwQzRDNTJCIC8qIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3QTc5MUVGODFDN0NGQjEwMDBDNEM1MkIgLyogV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlTWVzc2FnZXMuaCAqLzsgfTsKIAkJN0E3OTFFRkMxQzdEMDhDNTAwQzRDNTJC
IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTlDRDhDMDFDNzc5ODQ5MDBEOUY2QzcgLyog
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCAqLzsgfTsKKwkJN0MwNjVGMkIxQzhD
RDk1RjAwQzJEOTUwIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzA2NUYyOTFDOENE
OTVGMDBDMkQ5NTAgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmNwcCAqLzsg
fTsKKwkJN0MwNjVGMkMxQzhDRDk1RjAwQzJEOTUwIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxl
ckRhdGFUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0MwNjVGMkExQzhDRDk1RjAwQzJEOTUwIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlckRh
dGFUeXBlcy5oICovOyB9OwogCQk3QzEzNUFBODE3M0IwQkNBMDA1ODZBRTIgLyogV0tQbHVnaW5J
bmZvcm1hdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3QzEzNUFBNjE3M0IwQkNBMDA1ODZBRTIgLyogV0tQbHVnaW5JbmZvcm1hdGlvbi5jcHAg
Ki87IH07CiAJCTdDMTM1QUE5MTczQjBCQ0EwMDU4NkFFMiAvKiBXS1BsdWdpbkluZm9ybWF0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzEzNUFB
NzE3M0IwQkNBMDA1ODZBRTIgLyogV0tQbHVnaW5JbmZvcm1hdGlvbi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMTM1QUFDMTczQjBDRkYwMDU4
NkFFMiAvKiBQbHVnaW5JbmZvcm1hdGlvbk1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMTM1QUFBMTczQjBDRkYwMDU4NkFFMiAvKiBQbHVnaW5J
bmZvcm1hdGlvbk1hYy5tbSAqLzsgfTsKQEAgLTMwNTEsNiArMzA1Myw4IEBACiAJCTdBOUNEOEMw
MUM3Nzk4NDkwMEQ5RjZDNyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0E5Q0Q4QzExQzc3
OTg0OTAwRDlGNkM3IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0E5Q0Q4QzIxQzc3OUFENjAwRDlGNkM3
IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5tZXNzYWdlcy5pbiAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUubWVzc2FnZXMuaW47
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDMDY1RjI5MUM4Q0Q5NUYwMEMyRDk1MCAv
KiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MwNjVGMkExQzhDRDk1RjAwQzJEOTUw
IC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MwQkI5QTgxOERDREU4OTAwMDZDMDg2IC8qIFdl
YkNvbnRlbnQtaU9TLmVudGl0bGVtZW50cyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQueG1sOyBwYXRoID0gIldlYkNvbnRlbnQtaU9TLmVudGl0
bGVtZW50cyI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMEJCOUE5MThEQ0RGNUEw
MDA2QzA4NiAvKiBOZXR3b3JrLWlPUy5lbnRpdGxlbWVudHMgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhtbDsgcGF0aCA9ICJOZXR3b3JrLWlP
Uy5lbnRpdGxlbWVudHMiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzEzNUFBNjE3
M0IwQkNBMDA1ODZBRTIgLyogV0tQbHVnaW5JbmZvcm1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS1BsdWdpbkluZm9ybWF0aW9uLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0OTgsNiArNDUwMiw4IEBACiAJCQkJODM2MDM0OUQxQUNC
MzRENjAwNjI2NTQ5IC8qIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHAgKi8sCiAJCQkJODM2
MDM0OUUxQUNCMzRENjAwNjI2NTQ5IC8qIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlci5oICovLAog
CQkJCUMwMzM3REQ3MTI3QTUxQjYwMDhGRjRGNCAvKiBXZWJUb3VjaEV2ZW50LmNwcCAqLywKKwkJ
CQk3QzA2NUYyOTFDOENEOTVGMDBDMkQ5NTAgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0
YVR5cGVzLmNwcCAqLywKKwkJCQk3QzA2NUYyQTFDOENEOTVGMDBDMkQ5NTAgLyogV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmggKi8sCiAJCQkJQzAzMzdERDAxMjdBMjk4MDAwOEZG
NEY0IC8qIFdlYldoZWVsRXZlbnQuY3BwICovLAogCQkJKTsKIAkJCXBhdGggPSBTaGFyZWQ7CkBA
IC03OTg4LDYgKzc5OTQsNyBAQAogCQkJCTJEMjhBNDk3MUFGOTY1QTEwMEYxOTBDOSAvKiBXS1Zp
ZXdMYXlvdXRTdHJhdGVneS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUMxNDI3MDIxQzIzRjg0QzAw
RDQxMTgzIC8qIERvd25sb2FkLmggaW4gSGVhZGVycyAqLywKIAkJCQlCRkE2MTc5RjEyRjBCOTlE
MDAzM0UwQ0EgLyogV0tWaWV3UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0MwNjVGMkMx
QzhDRDk1RjAwQzJEOTUwIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQzVFMUFGRTkxNkIyMEI3NTAwNkNDMUYyIC8qIFdLV2ViQXJjaGl2
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzVFMUFGRUIxNkIyMEI3RTAwNkNDMUYyIC8qIFdLV2Vi
QXJjaGl2ZVJlc291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUEyRTU2NzE4RDc3NTA4MDAz
ODE0QkQgLyogV0tXZWJQcm9jZXNzQnVuZGxlUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCkBA
IC05MTQ0LDYgKzkxNTEsNyBAQAogCQkJCTVDMTQyNzAxMUMyM0Y4NEMwMEQ0MTE4MyAvKiBEb3du
bG9hZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMDMzN0RERDEyN0E1MjFDMDA4RkY0RjQgLyog
V2ViUGxhdGZvcm1Ub3VjaFBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEQTk0NEEyMTg4
NEU0RjAwMEVEODZEQiAvKiBXZWJQbGF0Zm9ybVRvdWNoUG9pbnRJT1MuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJN0MwNjVGMkIxQzhDRDk1RjAwQzJEOTUwIC8qIFdlYlVzZXJDb250ZW50Q29udHJv
bGxlckRhdGFUeXBlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMUQ1OTI5RTE2NkUwNjAwMDBF
NkJGMDIgLyogV2ViUGx1Z0luQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNTc0NEVG
MTI2MzhGQjMwMDZGMEYxMiAvKiBXZWJQb3B1cEl0ZW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RDNCOTQ4NDYxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlBvcHVwTWVudS5jcHAgaW4gU291cmNlcyAq
LywKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0
ZWRCdW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCShyZXZpc2lvbiAxOTc5MTIpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIK
ICNpbmNsdWRlICJXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSAiV2Vi
UHJvY2Vzc1Bvb2xNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYlVzZXJDb250ZW50Q29udHJvbGxl
ci5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3QuaD4KICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9FeGNlcHRpb24uaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0xvY2su
aD4KQEAgLTcwLDcgKzcxLDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5UG9saWN5Lmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXNzaW9uSUQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NldHRp
bmdzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1VzZXJHZXN0dXJlSW5kaWNhdG9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9V
c2VyU2NyaXB0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Vc2VyU3R5bGVTaGVldC5oPgpAQCAtMzk3
LDM5ICszOTcsMzkgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZTo6aXNQcm9jZXNzaW5nVXNlckdlcwog
dm9pZCBJbmplY3RlZEJ1bmRsZTo6YWRkVXNlclNjcmlwdChXZWJQYWdlR3JvdXBQcm94eSogcGFn
ZUdyb3VwLCBJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkKiBzY3JpcHRXb3JsZCwgY29uc3QgU3Ry
aW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdXJsLCBBUEk6OkFycmF5KiB3aGl0ZWxpc3QsIEFQ
STo6QXJyYXkqIGJsYWNrbGlzdCwgV2ViQ29yZTo6VXNlclNjcmlwdEluamVjdGlvblRpbWUgaW5q
ZWN0aW9uVGltZSwgV2ViQ29yZTo6VXNlckNvbnRlbnRJbmplY3RlZEZyYW1lcyBpbmplY3RlZEZy
YW1lcykKIHsKICAgICAvLyB1cmwgaXMgbm90IGZyb20gVVJMOjpzdHJpbmcoKSwgaS5lLiBpdCBo
YXMgbm90IGFscmVhZHkgYmVlbiBwYXJzZWQgYnkgVVJMLCBzbyB3ZSBoYXZlIHRvIHVzZSB0aGUg
cmVsYXRpdmUgVVJMIGNvbnN0cnVjdG9yIGZvciBVUkwgaW5zdGVhZCBvZiB0aGUgUGFyc2VkVVJM
U3RyaW5nVGFnIHZlcnNpb24uCi0gICAgYXV0byB1c2VyU2NyaXB0ID0gc3RkOjptYWtlX3VuaXF1
ZTxVc2VyU2NyaXB0Pihzb3VyY2UsIFVSTChVUkwoKSwgdXJsKSwgd2hpdGVsaXN0ID8gd2hpdGVs
aXN0LT50b1N0cmluZ1ZlY3RvcigpIDogVmVjdG9yPFN0cmluZz4oKSwgYmxhY2tsaXN0ID8gYmxh
Y2tsaXN0LT50b1N0cmluZ1ZlY3RvcigpIDogVmVjdG9yPFN0cmluZz4oKSwgaW5qZWN0aW9uVGlt
ZSwgaW5qZWN0ZWRGcmFtZXMpOworICAgIFVzZXJTY3JpcHQgdXNlclNjcmlwdHsgc291cmNlLCBV
UkwoVVJMKCksIHVybCksIHdoaXRlbGlzdCA/IHdoaXRlbGlzdC0+dG9TdHJpbmdWZWN0b3IoKSA6
IFZlY3RvcjxTdHJpbmc+KCksIGJsYWNrbGlzdCA/IGJsYWNrbGlzdC0+dG9TdHJpbmdWZWN0b3Io
KSA6IFZlY3RvcjxTdHJpbmc+KCksIGluamVjdGlvblRpbWUsIGluamVjdGVkRnJhbWVzIH07CiAK
LSAgICBwYWdlR3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigpLmFkZFVzZXJTY3JpcHQoc2Ny
aXB0V29ybGQtPmNvcmVXb3JsZCgpLCBXVEZNb3ZlKHVzZXJTY3JpcHQpKTsKKyAgICBwYWdlR3Jv
dXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigpLmFkZFVzZXJTY3JpcHQoKnNjcmlwdFdvcmxkLCBX
VEZNb3ZlKHVzZXJTY3JpcHQpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6YWRkVXNlclN0
eWxlU2hlZXQoV2ViUGFnZUdyb3VwUHJveHkqIHBhZ2VHcm91cCwgSW5qZWN0ZWRCdW5kbGVTY3Jp
cHRXb3JsZCogc2NyaXB0V29ybGQsIGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcm
IHVybCwgQVBJOjpBcnJheSogd2hpdGVsaXN0LCBBUEk6OkFycmF5KiBibGFja2xpc3QsIFdlYkNv
cmU6OlVzZXJDb250ZW50SW5qZWN0ZWRGcmFtZXMgaW5qZWN0ZWRGcmFtZXMpCiB7CiAgICAgLy8g
dXJsIGlzIG5vdCBmcm9tIFVSTDo6c3RyaW5nKCksIGkuZS4gaXQgaGFzIG5vdCBhbHJlYWR5IGJl
ZW4gcGFyc2VkIGJ5IFVSTCwgc28gd2UgaGF2ZSB0byB1c2UgdGhlIHJlbGF0aXZlIFVSTCBjb25z
dHJ1Y3RvciBmb3IgVVJMIGluc3RlYWQgb2YgdGhlIFBhcnNlZFVSTFN0cmluZ1RhZyB2ZXJzaW9u
LgotICAgIGF1dG8gdXNlclN0eWxlU2hlZXQgPSBzdGQ6Om1ha2VfdW5pcXVlPFVzZXJTdHlsZVNo
ZWV0Pihzb3VyY2UsIFVSTChVUkwoKSwgdXJsKSwgd2hpdGVsaXN0ID8gd2hpdGVsaXN0LT50b1N0
cmluZ1ZlY3RvcigpIDogVmVjdG9yPFN0cmluZz4oKSwgYmxhY2tsaXN0ID8gYmxhY2tsaXN0LT50
b1N0cmluZ1ZlY3RvcigpIDogVmVjdG9yPFN0cmluZz4oKSwgaW5qZWN0ZWRGcmFtZXMsIFVzZXJT
dHlsZVVzZXJMZXZlbCk7CisgICAgVXNlclN0eWxlU2hlZXQgdXNlclN0eWxlU2hlZXR7IHNvdXJj
ZSwgVVJMKFVSTCgpLCB1cmwpLCB3aGl0ZWxpc3QgPyB3aGl0ZWxpc3QtPnRvU3RyaW5nVmVjdG9y
KCkgOiBWZWN0b3I8U3RyaW5nPigpLCBibGFja2xpc3QgPyBibGFja2xpc3QtPnRvU3RyaW5nVmVj
dG9yKCkgOiBWZWN0b3I8U3RyaW5nPigpLCBpbmplY3RlZEZyYW1lcywgVXNlclN0eWxlVXNlckxl
dmVsIH07CiAKLSAgICBwYWdlR3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigpLmFkZFVzZXJT
dHlsZVNoZWV0KHNjcmlwdFdvcmxkLT5jb3JlV29ybGQoKSwgV1RGTW92ZSh1c2VyU3R5bGVTaGVl
dCksIEluamVjdEluRXhpc3RpbmdEb2N1bWVudHMpOworICAgIHBhZ2VHcm91cC0+dXNlckNvbnRl
bnRDb250cm9sbGVyKCkuYWRkVXNlclN0eWxlU2hlZXQoKnNjcmlwdFdvcmxkLCBXVEZNb3ZlKHVz
ZXJTdHlsZVNoZWV0KSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnJlbW92ZVVzZXJTY3Jp
cHQoV2ViUGFnZUdyb3VwUHJveHkqIHBhZ2VHcm91cCwgSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3Js
ZCogc2NyaXB0V29ybGQsIGNvbnN0IFN0cmluZyYgdXJsKQogewogICAgIC8vIHVybCBpcyBub3Qg
ZnJvbSBVUkw6OnN0cmluZygpLCBpLmUuIGl0IGhhcyBub3QgYWxyZWFkeSBiZWVuIHBhcnNlZCBi
eSBVUkwsIHNvIHdlIGhhdmUgdG8gdXNlIHRoZSByZWxhdGl2ZSBVUkwgY29uc3RydWN0b3IgZm9y
IFVSTCBpbnN0ZWFkIG9mIHRoZSBQYXJzZWRVUkxTdHJpbmdUYWcgdmVyc2lvbi4KLSAgICBwYWdl
R3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigpLnJlbW92ZVVzZXJTY3JpcHQoc2NyaXB0V29y
bGQtPmNvcmVXb3JsZCgpLCBVUkwoVVJMKCksIHVybCkpOworICAgIHBhZ2VHcm91cC0+dXNlckNv
bnRlbnRDb250cm9sbGVyKCkucmVtb3ZlVXNlclNjcmlwdFdpdGhVUkwoKnNjcmlwdFdvcmxkLCBV
UkwoVVJMKCksIHVybCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpyZW1vdmVVc2VyU3R5
bGVTaGVldChXZWJQYWdlR3JvdXBQcm94eSogcGFnZUdyb3VwLCBJbmplY3RlZEJ1bmRsZVNjcmlw
dFdvcmxkKiBzY3JpcHRXb3JsZCwgY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAgLy8gdXJsIGlz
IG5vdCBmcm9tIFVSTDo6c3RyaW5nKCksIGkuZS4gaXQgaGFzIG5vdCBhbHJlYWR5IGJlZW4gcGFy
c2VkIGJ5IFVSTCwgc28gd2UgaGF2ZSB0byB1c2UgdGhlIHJlbGF0aXZlIFVSTCBjb25zdHJ1Y3Rv
ciBmb3IgVVJMIGluc3RlYWQgb2YgdGhlIFBhcnNlZFVSTFN0cmluZ1RhZyB2ZXJzaW9uLgotICAg
IHBhZ2VHcm91cC0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkucmVtb3ZlVXNlclN0eWxlU2hlZXQo
c2NyaXB0V29ybGQtPmNvcmVXb3JsZCgpLCBVUkwoVVJMKCksIHVybCkpOworICAgIHBhZ2VHcm91
cC0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkucmVtb3ZlVXNlclN0eWxlU2hlZXRXaXRoVVJMKCpz
Y3JpcHRXb3JsZCwgVVJMKFVSTCgpLCB1cmwpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6
cmVtb3ZlVXNlclNjcmlwdHMoV2ViUGFnZUdyb3VwUHJveHkqIHBhZ2VHcm91cCwgSW5qZWN0ZWRC
dW5kbGVTY3JpcHRXb3JsZCogc2NyaXB0V29ybGQpCiB7Ci0gICAgcGFnZUdyb3VwLT51c2VyQ29u
dGVudENvbnRyb2xsZXIoKS5yZW1vdmVVc2VyU2NyaXB0cyhzY3JpcHRXb3JsZC0+Y29yZVdvcmxk
KCkpOworICAgIHBhZ2VHcm91cC0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkucmVtb3ZlVXNlclNj
cmlwdHMoKnNjcmlwdFdvcmxkKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cmVtb3ZlVXNl
clN0eWxlU2hlZXRzKFdlYlBhZ2VHcm91cFByb3h5KiBwYWdlR3JvdXAsIEluamVjdGVkQnVuZGxl
U2NyaXB0V29ybGQqIHNjcmlwdFdvcmxkKQogewotICAgIHBhZ2VHcm91cC0+dXNlckNvbnRlbnRD
b250cm9sbGVyKCkucmVtb3ZlVXNlclN0eWxlU2hlZXRzKHNjcmlwdFdvcmxkLT5jb3JlV29ybGQo
KSk7CisgICAgcGFnZUdyb3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIoKS5yZW1vdmVVc2VyU3R5
bGVTaGVldHMoKnNjcmlwdFdvcmxkKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cmVtb3Zl
QWxsVXNlckNvbnRlbnQoV2ViUGFnZUdyb3VwUHJveHkqIHBhZ2VHcm91cCkKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50
L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE5NzkxMikKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIldlYlVzZXJD
b250ZW50Q29udHJvbGxlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRE9NV3JhcHBlcldvcmxk
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TY3JpcHRDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9TZWN1cml0eU9yaWdpbkRhdGEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlclN0eWxlU2hlZXQuaD4KQEAgLTgw
LDcgKzc5LDYgQEAgUmVmPFdlYlVzZXJDb250ZW50Q29udHJvbGxlcj4gV2ViVXNlckNvbgogCiBX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcih1aW50NjRf
dCBpZGVudGlmaWVyKQogICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCi0gICAgLCBtX3Vz
ZXJDb250ZW50Q29udHJvbGxlcihVc2VyQ29udGVudENvbnRyb2xsZXI6OmNyZWF0ZSgpKQogewog
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faWRlbnRp
ZmllciwgKnRoaXMpOwogfQpAQCAtOTQsNyArOTIsNiBAQCBXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXI6On5XZWJVc2VyQ29udGVuCiAgICAgdXNlckNvbnRlbnRDb250cm9sbGVycygpLnJlbW92ZSht
X2lkZW50aWZpZXIpOwogfQogCi0KIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRV
c2VyQ29udGVudFdvcmxkcyhjb25zdCBWZWN0b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBTdHJpbmc+
PiYgd29ybGRzKQogewogICAgIGZvciAoYXV0byYgd29ybGQgOiB3b3JsZHMpIHsKQEAgLTEyNCwy
MCArMTIxLDIxIEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2UKICAg
ICB9CiB9CiAKLXZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0cyhj
b25zdCBWZWN0b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBXZWJDb3JlOjpVc2VyU2NyaXB0Pj4mIHVz
ZXJTY3JpcHRzKQordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHRz
KGNvbnN0IFZlY3RvcjxXZWJVc2VyU2NyaXB0RGF0YT4mIHVzZXJTY3JpcHRzKQogewotICAgIGZv
ciAoY29uc3QgYXV0byYgdXNlclNjcmlwdFdvcmxkUGFpciA6IHVzZXJTY3JpcHRzKSB7Ci0gICAg
ICAgIGF1dG8gaXQgPSB3b3JsZE1hcCgpLmZpbmQodXNlclNjcmlwdFdvcmxkUGFpci5maXJzdCk7
CisgICAgZm9yIChjb25zdCBhdXRvJiB1c2VyU2NyaXB0RGF0YSA6IHVzZXJTY3JpcHRzKSB7Cisg
ICAgICAgIGF1dG8gaXQgPSB3b3JsZE1hcCgpLmZpbmQodXNlclNjcmlwdERhdGEud29ybGRJZGVu
dGlmaWVyKTsKICAgICAgICAgaWYgKGl0ID09IHdvcmxkTWFwKCkuZW5kKCkpIHsKLSAgICAgICAg
ICAgIFdURkxvZ0Fsd2F5cygiVHJ5aW5nIHRvIGFkZCBhIFVzZXJTY3JpcHQgdG8gYSBVc2VyQ29u
dGVudFdvcmxkIChpZD0lIiBQUkl1NjQgIikgdGhhdCBkb2VzIG5vdCBleGlzdC4iLCB1c2VyU2Ny
aXB0V29ybGRQYWlyLmZpcnN0KTsKKyAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiVHJ5aW5nIHRv
IGFkZCBhIFVzZXJTY3JpcHQgdG8gYSBVc2VyQ29udGVudFdvcmxkIChpZD0lIiBQUkl1NjQgIikg
dGhhdCBkb2VzIG5vdCBleGlzdC4iLCB1c2VyU2NyaXB0RGF0YS53b3JsZElkZW50aWZpZXIpOwog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBtX3VzZXJDb250ZW50
Q29udHJvbGxlci0+YWRkVXNlclNjcmlwdChpdC0+dmFsdWUuZmlyc3QtPmNvcmVXb3JsZCgpLCBz
dGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6OlVzZXJTY3JpcHQ+KHVzZXJTY3JpcHRXb3JsZFBhaXIu
c2Vjb25kKSk7CisgICAgICAgIFVzZXJTY3JpcHQgc2NyaXB0ID0gdXNlclNjcmlwdERhdGEudXNl
clNjcmlwdDsKKyAgICAgICAgYWRkVXNlclNjcmlwdEludGVybmFsKCppdC0+dmFsdWUuZmlyc3Qs
IHVzZXJTY3JpcHREYXRhLmlkZW50aWZpZXIsIFdURk1vdmUoc2NyaXB0KSk7CiAgICAgfQogfQog
Ci12b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlwdCh1aW50NjRf
dCB3b3JsZElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQordm9pZCBXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTY3JpcHQodWludDY0X3Qgd29ybGRJZGVudGlm
aWVyLCB1aW50NjRfdCB1c2VyU2NyaXB0SWRlbnRpZmllcikKIHsKICAgICBhdXRvIGl0ID0gd29y
bGRNYXAoKS5maW5kKHdvcmxkSWRlbnRpZmllcik7CiAgICAgaWYgKGl0ID09IHdvcmxkTWFwKCku
ZW5kKCkpIHsKQEAgLTE0NSw3ICsxNDMsNyBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxl
cjo6cmVtb3ZlVXNlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX3VzZXJDb250ZW50
Q29udHJvbGxlci0+cmVtb3ZlVXNlclNjcmlwdChpdC0+dmFsdWUuZmlyc3QtPmNvcmVXb3JsZCgp
LCBVUkwoVVJMKCksIHVybFN0cmluZykpOworICAgIHJlbW92ZVVzZXJTY3JpcHRJbnRlcm5hbCgq
aXQtPnZhbHVlLmZpcnN0LCB1c2VyU2NyaXB0SWRlbnRpZmllcik7CiB9CiAKIHZvaWQgV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVBbGxVc2VyU2NyaXB0cyhjb25zdCBWZWN0b3I8dWlu
dDY0X3Q+JiB3b3JsZElkZW50aWZpZXJzKQpAQCAtMTU3LDI0ICsxNTUsMjUgQEAgdm9pZCBXZWJV
c2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZUFsbAogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKLSAgICAgICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPnJlbW92ZVVzZXJTY3Jp
cHRzKGl0LT52YWx1ZS5maXJzdC0+Y29yZVdvcmxkKCkpOworICAgICAgICByZW1vdmVVc2VyU2Ny
aXB0cygqaXQtPnZhbHVlLmZpcnN0KTsKICAgICB9CiB9CiAKLXZvaWQgV2ViVXNlckNvbnRlbnRD
b250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldHMoY29uc3QgVmVjdG9yPHN0ZDo6cGFpcjx1aW50
NjRfdCwgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQ+PiYgdXNlclN0eWxlU2hlZXRzKQordm9pZCBX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNoZWV0cyhjb25zdCBWZWN0b3I8
V2ViVXNlclN0eWxlU2hlZXREYXRhPiYgdXNlclN0eWxlU2hlZXRzKQogewotICAgIGZvciAoY29u
c3QgYXV0byYgdXNlclN0eWxlU2hlZXRXb3JsZFBhaXIgOiB1c2VyU3R5bGVTaGVldHMpIHsKLSAg
ICAgICAgYXV0byBpdCA9IHdvcmxkTWFwKCkuZmluZCh1c2VyU3R5bGVTaGVldFdvcmxkUGFpci5m
aXJzdCk7CisgICAgZm9yIChjb25zdCBhdXRvJiB1c2VyU3R5bGVTaGVldERhdGEgOiB1c2VyU3R5
bGVTaGVldHMpIHsKKyAgICAgICAgYXV0byBpdCA9IHdvcmxkTWFwKCkuZmluZCh1c2VyU3R5bGVT
aGVldERhdGEud29ybGRJZGVudGlmaWVyKTsKICAgICAgICAgaWYgKGl0ID09IHdvcmxkTWFwKCku
ZW5kKCkpIHsKLSAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiVHJ5aW5nIHRvIGFkZCBhIFVzZXJT
dHlsZVNoZWV0IHRvIGEgVXNlckNvbnRlbnRXb3JsZCAoaWQ9JSIgUFJJdTY0ICIpIHRoYXQgZG9l
cyBub3QgZXhpc3QuIiwgdXNlclN0eWxlU2hlZXRXb3JsZFBhaXIuZmlyc3QpOworICAgICAgICAg
ICAgV1RGTG9nQWx3YXlzKCJUcnlpbmcgdG8gYWRkIGEgVXNlclN0eWxlU2hlZXQgdG8gYSBVc2Vy
Q29udGVudFdvcmxkIChpZD0lIiBQUkl1NjQgIikgdGhhdCBkb2VzIG5vdCBleGlzdC4iLCB1c2Vy
U3R5bGVTaGVldERhdGEud29ybGRJZGVudGlmaWVyKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9Ci0KLSAgICAgICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPmFkZFVzZXJTdHls
ZVNoZWV0KGl0LT52YWx1ZS5maXJzdC0+Y29yZVdvcmxkKCksIHN0ZDo6bWFrZV91bmlxdWU8V2Vi
Q29yZTo6VXNlclN0eWxlU2hlZXQ+KHVzZXJTdHlsZVNoZWV0V29ybGRQYWlyLnNlY29uZCksIElu
amVjdEluRXhpc3RpbmdEb2N1bWVudHMpOworICAgICAgICAKKyAgICAgICAgVXNlclN0eWxlU2hl
ZXQgc2hlZXQgPSB1c2VyU3R5bGVTaGVldERhdGEudXNlclN0eWxlU2hlZXQ7CisgICAgICAgIGFk
ZFVzZXJTdHlsZVNoZWV0SW50ZXJuYWwoKml0LT52YWx1ZS5maXJzdCwgdXNlclN0eWxlU2hlZXRE
YXRhLmlkZW50aWZpZXIsIFdURk1vdmUoc2hlZXQpKTsKICAgICB9CiB9CiAKLXZvaWQgV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU3R5bGVTaGVldCh1aW50NjRfdCB3b3JsZElk
ZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQordm9pZCBXZWJVc2VyQ29udGVudENv
bnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNoZWV0KHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllciwg
dWludDY0X3QgdXNlclN0eWxlU2hlZXRJZGVudGlmaWVyKQogewogICAgIGF1dG8gaXQgPSB3b3Js
ZE1hcCgpLmZpbmQod29ybGRJZGVudGlmaWVyKTsKICAgICBpZiAoaXQgPT0gd29ybGRNYXAoKS5l
bmQoKSkgewpAQCAtMTgyLDcgKzE4MSw3IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
OjpyZW1vdmVVc2UKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fdXNlckNvbnRlbnRD
b250cm9sbGVyLT5yZW1vdmVVc2VyU3R5bGVTaGVldChpdC0+dmFsdWUuZmlyc3QtPmNvcmVXb3Js
ZCgpLCBVUkwoVVJMKCksIHVybFN0cmluZykpOworICAgIHJlbW92ZVVzZXJTdHlsZVNoZWV0SW50
ZXJuYWwoKml0LT52YWx1ZS5maXJzdCwgdXNlclN0eWxlU2hlZXRJZGVudGlmaWVyKTsKIH0KIAog
dm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZUFsbFVzZXJTdHlsZVNoZWV0cyhj
b25zdCBWZWN0b3I8dWludDY0X3Q+JiB3b3JsZElkZW50aWZpZXJzKQpAQCAtMTk0LDcgKzE5Myw3
IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVBbGwKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5y
ZW1vdmVVc2VyU3R5bGVTaGVldHMoaXQtPnZhbHVlLmZpcnN0LT5jb3JlV29ybGQoKSk7CisgICAg
ICAgIHJlbW92ZVVzZXJTdHlsZVNoZWV0cygqaXQtPnZhbHVlLmZpcnN0KTsKICAgICB9CiB9CiAK
QEAgLTI1Myw3ICsyNTIsOSBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNl
clNjCiAgICAgICAgIFJlZlB0cjxXZWJVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yUHJveHk+
IGRlc2NyaXB0b3IgPSBXZWJVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yUHJveHk6OmNyZWF0
ZSh0aGlzLCBoYW5kbGUubmFtZSwgaGFuZGxlLmlkZW50aWZpZXIpOwogCiAgICAgICAgIG1fdXNl
ck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMuYWRkKGRlc2NyaXB0b3ItPmlkZW50aWZpZXIoKSwg
ZGVzY3JpcHRvcik7Ci0gICAgICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5hZGRVc2VyTWVz
c2FnZUhhbmRsZXJEZXNjcmlwdG9yKGRlc2NyaXB0b3ItPmRlc2NyaXB0b3IoKSk7CisKKyAgICAg
ICAgYXV0byYgY29yZURlc2NyaXB0b3IgPSBkZXNjcmlwdG9yLT5kZXNjcmlwdG9yKCk7CisgICAg
ICAgIG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnNNYXAuYWRkKHN0ZDo6bWFrZV9wYWly
KGNvcmVEZXNjcmlwdG9yLm5hbWUoKSwgJmNvcmVEZXNjcmlwdG9yLndvcmxkKCkpLCAmY29yZURl
c2NyaXB0b3IpOwogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHNjcmlwdE1lc3NhZ2VI
YW5kbGVycyk7CkBAIC0yNjUsOCArMjY2LDEwIEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyOjpyZW1vdmVVc2UKICNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQogICAgIGF1
dG8gaXQgPSBtX3VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzLmZpbmQoaWRlbnRpZmllcik7
CiAgICAgQVNTRVJUKGl0ICE9IG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMuZW5kKCkp
OwotICAgIAotICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5yZW1vdmVVc2VyTWVzc2FnZUhh
bmRsZXJEZXNjcmlwdG9yKGl0LT52YWx1ZS0+ZGVzY3JpcHRvcigpKTsKKworICAgIGF1dG8mIGNv
cmVEZXNjcmlwdG9yID0gaXQtPnZhbHVlLT5kZXNjcmlwdG9yKCk7CisgICAgbV91c2VyTWVzc2Fn
ZUhhbmRsZXJEZXNjcmlwdG9yc01hcC5yZW1vdmUoc3RkOjptYWtlX3BhaXIoY29yZURlc2NyaXB0
b3IubmFtZSgpLCAmY29yZURlc2NyaXB0b3Iud29ybGQoKSkpOworCiAgICAgbV91c2VyTWVzc2Fn
ZUhhbmRsZXJEZXNjcmlwdG9ycy5yZW1vdmUoaXQpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0o
aWRlbnRpZmllcik7CkBAIC0yNzksMTkgKzI4MiwxNjggQEAgdm9pZCBXZWJVc2VyQ29udGVudENv
bnRyb2xsZXI6OmFkZFVzZXJDbwogICAgIGZvciAoY29uc3QgYXV0byYgdXNlckNvbnRlbnRFeHRl
bnNpb24gOiB1c2VyQ29udGVudEV4dGVuc2lvbnMpIHsKICAgICAgICAgV2ViQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uRGF0YSBjb250ZW50RXh0ZW5zaW9uRGF0YSA9IHVzZXJDb250ZW50RXh0ZW5z
aW9uLnNlY29uZDsKICAgICAgICAgUmVmUHRyPFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4g
Y29tcGlsZWRDb250ZW50RXh0ZW5zaW9uID0gV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpj
cmVhdGUoV1RGTW92ZShjb250ZW50RXh0ZW5zaW9uRGF0YSkpOwotICAgICAgICBtX3VzZXJDb250
ZW50Q29udHJvbGxlci0+YWRkVXNlckNvbnRlbnRFeHRlbnNpb24odXNlckNvbnRlbnRFeHRlbnNp
b24uZmlyc3QsIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbik7CisKKyAgICAgICAgbV9jb250ZW50
RXh0ZW5zaW9uQmFja2VuZC5hZGRDb250ZW50RXh0ZW5zaW9uKHVzZXJDb250ZW50RXh0ZW5zaW9u
LmZpcnN0LCBXVEZNb3ZlKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbikpOwogICAgIH0KIH0KIAog
dm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9u
KGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+cmVt
b3ZlVXNlckNvbnRlbnRFeHRlbnNpb24obmFtZSk7CisgICAgbV9jb250ZW50RXh0ZW5zaW9uQmFj
a2VuZC5yZW1vdmVDb250ZW50RXh0ZW5zaW9uKG5hbWUpOwogfQogCiB2b2lkIFdlYlVzZXJDb250
ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxsVXNlckNvbnRlbnRFeHRlbnNpb25zKCkKIHsKLSAgICBt
X3VzZXJDb250ZW50Q29udHJvbGxlci0+cmVtb3ZlQWxsVXNlckNvbnRlbnRFeHRlbnNpb25zKCk7
CisgICAgbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZC5yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9u
cygpOwogfQogI2VuZGlmCiAKKworCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRk
VXNlclNjcmlwdEludGVybmFsKEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQmIHdvcmxkLCB1aW50
NjRfdCB1c2VyU2NyaXB0SWRlbnRpZmllciwgVXNlclNjcmlwdCYmIHVzZXJTY3JpcHQpCit7Cisg
ICAgYXV0byYgc2NyaXB0c0luV29ybGQgPSBtX3VzZXJTY3JpcHRzLmVuc3VyZSgmd29ybGQsIFtd
IHsgcmV0dXJuIFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0X3QsIFdlYkNvcmU6OlVzZXJTY3JpcHQ+
PigpOyB9KS5pdGVyYXRvci0+dmFsdWU7CisgICAgc2NyaXB0c0luV29ybGQuYXBwZW5kKHN0ZDo6
bWFrZV9wYWlyKHVzZXJTY3JpcHRJZGVudGlmaWVyLCBXVEZNb3ZlKHVzZXJTY3JpcHQpKSk7Cit9
CisKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0KEluamVjdGVk
QnVuZGxlU2NyaXB0V29ybGQmIHdvcmxkLCBVc2VyU2NyaXB0JiYgdXNlclNjcmlwdCkKK3sKKyAg
ICBhZGRVc2VyU2NyaXB0SW50ZXJuYWwod29ybGQsIDAsIFdURk1vdmUodXNlclNjcmlwdCkpOwor
fQorCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlwdFdpdGhV
UkwoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYgd29ybGQsIGNvbnN0IFVSTCYgdXJsKQorewor
ICAgIGF1dG8gaXQgPSBtX3VzZXJTY3JpcHRzLmZpbmQoJndvcmxkKTsKKyAgICBpZiAoaXQgPT0g
bV91c2VyU2NyaXB0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byYgc2NyaXB0
cyA9IGl0LT52YWx1ZTsKKyAgICBmb3IgKGludCBpID0gc2NyaXB0cy5zaXplKCkgLSAxOyBpID49
IDA7IC0taSkgeworICAgICAgICBpZiAoc2NyaXB0c1tpXS5zZWNvbmQudXJsKCkgPT0gdXJsKQor
ICAgICAgICAgICAgc2NyaXB0cy5yZW1vdmUoaSk7CisgICAgfQorCisgICAgaWYgKHNjcmlwdHMu
aXNFbXB0eSgpKQorICAgICAgICBtX3VzZXJTY3JpcHRzLnJlbW92ZShpdCk7Cit9CisKK3ZvaWQg
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU2NyaXB0SW50ZXJuYWwoSW5qZWN0
ZWRCdW5kbGVTY3JpcHRXb3JsZCYgd29ybGQsIHVpbnQ2NF90IHVzZXJTY3JpcHRJZGVudGlmaWVy
KQoreworICAgIGF1dG8gaXQgPSBtX3VzZXJTY3JpcHRzLmZpbmQoJndvcmxkKTsKKyAgICBpZiAo
aXQgPT0gbV91c2VyU2NyaXB0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byYg
c2NyaXB0cyA9IGl0LT52YWx1ZTsKKyAgICBmb3IgKGludCBpID0gc2NyaXB0cy5zaXplKCkgLSAx
OyBpID49IDA7IC0taSkgeworICAgICAgICBpZiAoc2NyaXB0c1tpXS5maXJzdCA9PSB1c2VyU2Ny
aXB0SWRlbnRpZmllcikKKyAgICAgICAgICAgIHNjcmlwdHMucmVtb3ZlKGkpOworICAgIH0KKwor
ICAgIGlmIChzY3JpcHRzLmlzRW1wdHkoKSkKKyAgICAgICAgbV91c2VyU2NyaXB0cy5yZW1vdmUo
aXQpOworfQorCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlw
dHMoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYgd29ybGQpCit7CisgICAgbV91c2VyU2NyaXB0
cy5yZW1vdmUoJndvcmxkKTsKK30KKwordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFk
ZFVzZXJTdHlsZVNoZWV0SW50ZXJuYWwoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYgd29ybGQs
IHVpbnQ2NF90IHVzZXJTdHlsZVNoZWV0SWRlbnRpZmllciwgVXNlclN0eWxlU2hlZXQmJiB1c2Vy
U3R5bGVTaGVldCkKK3sKKyAgICBhdXRvJiBzdHlsZVNoZWV0c0luV29ybGQgPSBtX3VzZXJTdHls
ZVNoZWV0cy5lbnN1cmUoJndvcmxkLCBbXSB7IHJldHVybiBWZWN0b3I8c3RkOjpwYWlyPHVpbnQ2
NF90LCBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldD4+KCk7IH0pLml0ZXJhdG9yLT52YWx1ZTsKKyAg
ICBzdHlsZVNoZWV0c0luV29ybGQuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHVzZXJTdHlsZVNoZWV0
SWRlbnRpZmllciwgV1RGTW92ZSh1c2VyU3R5bGVTaGVldCkpKTsKKworICAgIGludmFsaWRhdGVJ
bmplY3RlZFN0eWxlU2hlZXRDYWNoZUluQWxsRnJhbWVzSW5BbGxQYWdlcygpOworfQorCit2b2lk
IFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlclN0eWxlU2hlZXQoSW5qZWN0ZWRCdW5k
bGVTY3JpcHRXb3JsZCYgd29ybGQsIFVzZXJTdHlsZVNoZWV0JiYgdXNlclN0eWxlU2hlZXQpCit7
CisgICAgYWRkVXNlclN0eWxlU2hlZXRJbnRlcm5hbCh3b3JsZCwgMCwgV1RGTW92ZSh1c2VyU3R5
bGVTaGVldCkpOworfQorCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNl
clN0eWxlU2hlZXRXaXRoVVJMKEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQmIHdvcmxkLCBjb25z
dCBVUkwmIHVybCkKK3sKKyAgICBhdXRvIGl0ID0gbV91c2VyU3R5bGVTaGVldHMuZmluZCgmd29y
bGQpOworICAgIGlmIChpdCA9PSBtX3VzZXJTdHlsZVNoZWV0cy5lbmQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgYXV0byYgc3R5bGVzaGVldHMgPSBpdC0+dmFsdWU7CisKKyAgICBib29sIHNo
ZWV0c0NoYW5nZWQgPSBmYWxzZTsKKyAgICBmb3IgKGludCBpID0gc3R5bGVzaGVldHMuc2l6ZSgp
IC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgaWYgKHN0eWxlc2hlZXRzW2ldLnNlY29uZC51
cmwoKSA9PSB1cmwpIHsKKyAgICAgICAgICAgIHN0eWxlc2hlZXRzLnJlbW92ZShpKTsKKyAgICAg
ICAgICAgIHNoZWV0c0NoYW5nZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KCFzaGVldHNDaGFuZ2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoc3R5bGVzaGVldHMu
aXNFbXB0eSgpKQorICAgICAgICBtX3VzZXJTdHlsZVNoZWV0cy5yZW1vdmUoaXQpOworCisgICAg
aW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlSW5BbGxGcmFtZXNJbkFsbFBhZ2VzKCk7
Cit9CisKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU3R5bGVTaGVl
dEludGVybmFsKEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQmIHdvcmxkLCB1aW50NjRfdCB1c2Vy
U3R5bGVTaGVldElkZW50aWZpZXIpCit7CisgICAgYXV0byBpdCA9IG1fdXNlclN0eWxlU2hlZXRz
LmZpbmQoJndvcmxkKTsKKyAgICBpZiAoaXQgPT0gbV91c2VyU3R5bGVTaGVldHMuZW5kKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGF1dG8mIHN0eWxlc2hlZXRzID0gaXQtPnZhbHVlOworCisg
ICAgYm9vbCBzaGVldHNDaGFuZ2VkID0gZmFsc2U7CisgICAgZm9yIChpbnQgaSA9IHN0eWxlc2hl
ZXRzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGlmIChzdHlsZXNoZWV0c1tp
XS5maXJzdCA9PSB1c2VyU3R5bGVTaGVldElkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIHN0eWxl
c2hlZXRzLnJlbW92ZShpKTsKKyAgICAgICAgICAgIHNoZWV0c0NoYW5nZWQgPSB0cnVlOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKCFzaGVldHNDaGFuZ2VkKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoc3R5bGVzaGVldHMuaXNFbXB0eSgpKQorICAgICAgICBtX3VzZXJTdHlsZVNo
ZWV0cy5yZW1vdmUoaXQpOworCisgICAgaW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hl
SW5BbGxGcmFtZXNJbkFsbFBhZ2VzKCk7Cit9CisKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyOjpyZW1vdmVVc2VyU3R5bGVTaGVldHMoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYgd29y
bGQpCit7CisgICAgaWYgKCFtX3VzZXJTdHlsZVNoZWV0cy5yZW1vdmUoJndvcmxkKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlSW5BbGxG
cmFtZXNJbkFsbFBhZ2VzKCk7Cit9CisKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpy
ZW1vdmVBbGxVc2VyQ29udGVudCgpCit7CisgICAgbV91c2VyU2NyaXB0cy5jbGVhcigpOworCisg
ICAgaWYgKCFtX3VzZXJTdHlsZVNoZWV0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV91c2VyU3R5
bGVTaGVldHMuY2xlYXIoKTsKKyAgICAgICAgaW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENh
Y2hlSW5BbGxGcmFtZXNJbkFsbFBhZ2VzKCk7CisgICAgfQorfQorCit2b2lkIFdlYlVzZXJDb250
ZW50Q29udHJvbGxlcjo6Zm9yRWFjaFVzZXJTY3JpcHQoY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lk
KFdlYkNvcmU6OkRPTVdyYXBwZXJXb3JsZCYsIGNvbnN0IFdlYkNvcmU6OlVzZXJTY3JpcHQmKT4m
IGZ1bmN0b3IpIGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBhdXRvJiB3b3JsZEFuZFVzZXJTY3Jp
cHRWZWN0b3IgOiBtX3VzZXJTY3JpcHRzKSB7CisgICAgICAgIGF1dG8mIHdvcmxkID0gd29ybGRB
bmRVc2VyU2NyaXB0VmVjdG9yLmtleS0+Y29yZVdvcmxkKCk7CisgICAgICAgIGZvciAoY29uc3Qg
YXV0byYgaWRlbnRpZmllclVzZXJTY3JpcHRQYWlyIDogd29ybGRBbmRVc2VyU2NyaXB0VmVjdG9y
LnZhbHVlKQorICAgICAgICAgICAgZnVuY3Rvcih3b3JsZCwgaWRlbnRpZmllclVzZXJTY3JpcHRQ
YWlyLnNlY29uZCk7CisgICAgfQorfQorCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6
Zm9yRWFjaFVzZXJTdHlsZVNoZWV0KGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBXZWJD
b3JlOjpVc2VyU3R5bGVTaGVldCYpPiYgZnVuY3RvcikgY29uc3QKK3sKKyAgICBmb3IgKGF1dG8m
IHN0eWxlU2hlZXRWZWN0b3IgOiBtX3VzZXJTdHlsZVNoZWV0cy52YWx1ZXMoKSkgeworICAgICAg
ICBmb3IgKGNvbnN0IGF1dG8mIGlkZW50aWZpZXJVc2VyU3R5bGVTaGVldFBhaXIgOiBzdHlsZVNo
ZWV0VmVjdG9yKQorICAgICAgICAgICAgZnVuY3RvcihpZGVudGlmaWVyVXNlclN0eWxlU2hlZXRQ
YWlyLnNlY29uZCk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29udGVu
dC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuaAkocmV2aXNpb24gMTk3OTEyKQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMjgsOSArMjgsMTkgQEAKIAogI2luY2x1ZGUgIk1lc3NhZ2VS
ZWNlaXZlci5oIgogI2luY2x1ZGUgIldlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyLmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuaD4KKyNpbmNsdWRlICJXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXJEYXRhVHlwZXMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1VzZXJDb250ZW50
UHJvdmlkZXIuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorI2luY2x1ZGUgPFdl
YkNvcmUvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKKyAgICBjbGFzcyBDb21waWxl
ZENvbnRlbnRFeHRlbnNpb247Cit9Cit9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC0zOCwz
MCArNDgsNDQgQEAgY2xhc3MgSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZDsKIGNsYXNzIFdlYkNv
bXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGE7CiBjbGFzcyBXZWJVc2VyTWVzc2FnZUhhbmRsZXJE
ZXNjcmlwdG9yUHJveHk7CiAKLWNsYXNzIFdlYlVzZXJDb250ZW50Q29udHJvbGxlciBmaW5hbCA6
IHB1YmxpYyBSZWZDb3VudGVkPFdlYlVzZXJDb250ZW50Q29udHJvbGxlcj4sIHByaXZhdGUgSVBD
OjpNZXNzYWdlUmVjZWl2ZXIgIHsKK2NsYXNzIFdlYlVzZXJDb250ZW50Q29udHJvbGxlciBmaW5h
bCA6IHB1YmxpYyBXZWJDb3JlOjpVc2VyQ29udGVudFByb3ZpZGVyLCBwcml2YXRlIElQQzo6TWVz
c2FnZVJlY2VpdmVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFdlYlVzZXJDb250ZW50Q29u
dHJvbGxlcj4gZ2V0T3JDcmVhdGUodWludDY0X3QgaWRlbnRpZmllcik7CiAgICAgdmlydHVhbCB+
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyKCk7CiAKLSAgICBXZWJDb3JlOjpVc2VyQ29udGVudENv
bnRyb2xsZXImIHVzZXJDb250ZW50Q29udHJvbGxlcigpIHsgcmV0dXJuIG1fdXNlckNvbnRlbnRD
b250cm9sbGVyOyB9Ci0KICAgICB1aW50NjRfdCBpZGVudGlmaWVyKCkgeyByZXR1cm4gbV9pZGVu
dGlmaWVyOyB9IAogCisgICAgdm9pZCBhZGRVc2VyU2NyaXB0KEluamVjdGVkQnVuZGxlU2NyaXB0
V29ybGQmLCBXZWJDb3JlOjpVc2VyU2NyaXB0JiYpOworICAgIHZvaWQgcmVtb3ZlVXNlclNjcmlw
dFdpdGhVUkwoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYsIGNvbnN0IFdlYkNvcmU6OlVSTCYp
OworICAgIHZvaWQgcmVtb3ZlVXNlclNjcmlwdHMoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYp
OworICAgIHZvaWQgYWRkVXNlclN0eWxlU2hlZXQoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYs
IFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0JiYpOworICAgIHZvaWQgcmVtb3ZlVXNlclN0eWxlU2hl
ZXRXaXRoVVJMKEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQmLCBjb25zdCBXZWJDb3JlOjpVUkwm
KTsKKyAgICB2b2lkIHJlbW92ZVVzZXJTdHlsZVNoZWV0cyhJbmplY3RlZEJ1bmRsZVNjcmlwdFdv
cmxkJik7CisgICAgdm9pZCByZW1vdmVBbGxVc2VyQ29udGVudCgpOworCiBwcml2YXRlOgogICAg
IGV4cGxpY2l0IFdlYlVzZXJDb250ZW50Q29udHJvbGxlcih1aW50NjRfdCBpZGVudGlmaWVyKTsK
IAorICAgIC8vIFdlYkNvcmU6OlVzZXJDb250ZW50UHJvdmlkZXIKKyAgICB2b2lkIGZvckVhY2hV
c2VyU2NyaXB0KGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChXZWJDb3JlOjpET01XcmFwcGVyV29y
bGQmLCBjb25zdCBXZWJDb3JlOjpVc2VyU2NyaXB0Jik+JikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dm9pZCBmb3JFYWNoVXNlclN0eWxlU2hlZXQoY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0
IFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0Jik+JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgY29uc3Qg
V2ViQ29yZTo6VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvck1hcCYgdXNlck1lc3NhZ2VIYW5k
bGVyRGVzY3JpcHRvcnMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3VzZXJNZXNzYWdlSGFu
ZGxlckRlc2NyaXB0b3JzTWFwOyB9CisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKyAg
ICBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kJiB1
c2VyQ29udGVudEV4dGVuc2lvbkJhY2tlbmQoKSBvdmVycmlkZSB7IHJldHVybiBtX2NvbnRlbnRF
eHRlbnNpb25CYWNrZW5kOyB9CisjZW5kaWYKKwogICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVy
LgogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpNZXNz
YWdlRGVjb2RlciYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBhZGRVc2VyQ29udGVudFdvcmxkcyhj
b25zdCBWZWN0b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBTdHJpbmc+PiYpOwogICAgIHZvaWQgcmVt
b3ZlVXNlckNvbnRlbnRXb3JsZHMoY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYpOwogCi0gICAgdm9p
ZCBhZGRVc2VyU2NyaXB0cyhjb25zdCBWZWN0b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBXZWJDb3Jl
OjpVc2VyU2NyaXB0Pj4mKTsKLSAgICB2b2lkIHJlbW92ZVVzZXJTY3JpcHQodWludDY0X3Qgd29y
bGRJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZyk7CisgICAgdm9pZCBhZGRVc2Vy
U2NyaXB0cyhjb25zdCBWZWN0b3I8V2ViVXNlclNjcmlwdERhdGE+Jik7CisgICAgdm9pZCByZW1v
dmVVc2VyU2NyaXB0KHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllciwgdWludDY0X3QgdXNlclNjcmlw
dElkZW50aWZpZXIpOwogICAgIHZvaWQgcmVtb3ZlQWxsVXNlclNjcmlwdHMoY29uc3QgVmVjdG9y
PHVpbnQ2NF90PiYpOwogCi0gICAgdm9pZCBhZGRVc2VyU3R5bGVTaGVldHMoY29uc3QgVmVjdG9y
PHN0ZDo6cGFpcjx1aW50NjRfdCwgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQ+PiYpOwotICAgIHZv
aWQgcmVtb3ZlVXNlclN0eWxlU2hlZXQodWludDY0X3Qgd29ybGRJZGVudGlmaWVyLCBjb25zdCBT
dHJpbmcmIHVybFN0cmluZyk7CisgICAgdm9pZCBhZGRVc2VyU3R5bGVTaGVldHMoY29uc3QgVmVj
dG9yPFdlYlVzZXJTdHlsZVNoZWV0RGF0YT4mKTsKKyAgICB2b2lkIHJlbW92ZVVzZXJTdHlsZVNo
ZWV0KHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllciwgdWludDY0X3QgdXNlclNjcmlwdElkZW50aWZp
ZXIpOwogICAgIHZvaWQgcmVtb3ZlQWxsVXNlclN0eWxlU2hlZXRzKGNvbnN0IFZlY3Rvcjx1aW50
NjRfdD4mKTsKIAogICAgIHZvaWQgYWRkVXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVycyhjb25zdCBW
ZWN0b3I8V2ViU2NyaXB0TWVzc2FnZUhhbmRsZXJIYW5kbGU+Jik7CkBAIC03MywxMSArOTcsMjcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbW92ZUFsbFVzZXJDb250ZW50RXh0ZW5zaW9ucygpOwog
I2VuZGlmCiAKKworICAgIHZvaWQgYWRkVXNlclNjcmlwdEludGVybmFsKEluamVjdGVkQnVuZGxl
U2NyaXB0V29ybGQmLCB1aW50NjRfdCB1c2VyU2NyaXB0SWRlbnRpZmllciwgV2ViQ29yZTo6VXNl
clNjcmlwdCYmKTsKKyAgICB2b2lkIHJlbW92ZVVzZXJTY3JpcHRJbnRlcm5hbChJbmplY3RlZEJ1
bmRsZVNjcmlwdFdvcmxkJiwgdWludDY0X3QgdXNlclNjcmlwdElkZW50aWZpZXIpOworICAgIHZv
aWQgYWRkVXNlclN0eWxlU2hlZXRJbnRlcm5hbChJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiwg
dWludDY0X3QgdXNlclN0eWxlU2hlZXRJZGVudGlmaWVyLCBXZWJDb3JlOjpVc2VyU3R5bGVTaGVl
dCYmKTsKKyAgICB2b2lkIHJlbW92ZVVzZXJTdHlsZVNoZWV0SW50ZXJuYWwoSW5qZWN0ZWRCdW5k
bGVTY3JpcHRXb3JsZCYsIHVpbnQ2NF90IHVzZXJTdHlsZVNoZWV0SWRlbnRpZmllcik7CisKKwog
ICAgIHVpbnQ2NF90IG1faWRlbnRpZmllcjsKLSAgICBSZWY8V2ViQ29yZTo6VXNlckNvbnRlbnRD
b250cm9sbGVyPiBtX3VzZXJDb250ZW50Q29udHJvbGxlcjsKLSNpZiBFTkFCTEUoVVNFUl9NRVNT
QUdFX0hBTkRMRVJTKQogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJVc2VyTWVzc2Fn
ZUhhbmRsZXJEZXNjcmlwdG9yUHJveHk+PiBtX3VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3Jz
OworCisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxk
PiwgVmVjdG9yPHN0ZDo6cGFpcjx1aW50NjRfdCwgV2ViQ29yZTo6VXNlclNjcmlwdD4+PiBXb3Js
ZFRvVXNlclNjcmlwdE1hcDsKKyAgICBXb3JsZFRvVXNlclNjcmlwdE1hcCBtX3VzZXJTY3JpcHRz
OworCisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxk
PiwgVmVjdG9yPHN0ZDo6cGFpcjx1aW50NjRfdCwgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQ+Pj4g
V29ybGRUb1VzZXJTdHlsZVNoZWV0TWFwOworICAgIFdvcmxkVG9Vc2VyU3R5bGVTaGVldE1hcCBt
X3VzZXJTdHlsZVNoZWV0czsKKworICAgIFdlYkNvcmU6OlVzZXJNZXNzYWdlSGFuZGxlckRlc2Ny
aXB0b3JNYXAgbV91c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yc01hcDsKKyNpZiBFTkFCTEUo
Q09OVEVOVF9FWFRFTlNJT05TKQorICAgIFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb250
ZW50RXh0ZW5zaW9uc0JhY2tlbmQgbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZDsKICNlbmRpZgor
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLm1lc3NhZ2VzLmluCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAxOTc5MTIpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxl
ci5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMjcsMTIgKzI3LDEyIEBAIG1lc3NhZ2Vz
IC0+IFdlYlVzZXJDb250ZW50Q29udHJvbGxlciB7CiAgICAgQWRkVXNlckNvbnRlbnRXb3JsZHMo
VmVjdG9yPHN0ZDo6cGFpcjx1aW50NjRfdCwgU3RyaW5nPj4gd29ybGRzKTsKICAgICBSZW1vdmVV
c2VyQ29udGVudFdvcmxkcyhWZWN0b3I8dWludDY0X3Q+IHdvcmxkSWRlbnRpZmllcnMpOwogCi0g
ICAgQWRkVXNlclNjcmlwdHMoVmVjdG9yPHN0ZDo6cGFpcjx1aW50NjRfdCwgV2ViQ29yZTo6VXNl
clNjcmlwdD4+IHVzZXJTY3JpcHRzKTsKLSAgICBSZW1vdmVVc2VyU2NyaXB0KHVpbnQ2NF90IHdv
cmxkSWRlbnRpZmllciwgU3RyaW5nIHVybCk7CisgICAgQWRkVXNlclNjcmlwdHMoVmVjdG9yPHN0
cnVjdCBXZWJLaXQ6OldlYlVzZXJTY3JpcHREYXRhPiB1c2VyU2NyaXB0cyk7CisgICAgUmVtb3Zl
VXNlclNjcmlwdCh1aW50NjRfdCB3b3JsZElkZW50aWZpZXIsIHVpbnQ2NF90IGlkZW50aWZpZXIp
OwogICAgIFJlbW92ZUFsbFVzZXJTY3JpcHRzKFZlY3Rvcjx1aW50NjRfdD4gd29ybGRJZGVudGlm
aWVycyk7CiAKLSAgICBBZGRVc2VyU3R5bGVTaGVldHMoVmVjdG9yPHN0ZDo6cGFpcjx1aW50NjRf
dCwgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQ+PiB1c2VyU3R5bGVTaGVldHMpOwotICAgIFJlbW92
ZVVzZXJTdHlsZVNoZWV0KHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllciwgU3RyaW5nIHVybCk7Cisg
ICAgQWRkVXNlclN0eWxlU2hlZXRzKFZlY3RvcjxzdHJ1Y3QgV2ViS2l0OjpXZWJVc2VyU3R5bGVT
aGVldERhdGE+IHVzZXJTdHlsZVNoZWV0cyk7CisgICAgUmVtb3ZlVXNlclN0eWxlU2hlZXQodWlu
dDY0X3Qgd29ybGRJZGVudGlmaWVyLCB1aW50NjRfdCBpZGVudGlmaWVyKTsKICAgICBSZW1vdmVB
bGxVc2VyU3R5bGVTaGVldHMoVmVjdG9yPHVpbnQ2NF90PiB3b3JsZElkZW50aWZpZXJzKTsKIAog
ICAgIEFkZFVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlcnMoVmVjdG9yPFdlYktpdDo6V2ViU2NyaXB0
TWVzc2FnZUhhbmRsZXJIYW5kbGU+IHNjcmlwdE1lc3NhZ2VIYW5kbGVycyk7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAx
OTc5MTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJFdmVudERpc3BhdGNo
ZXIuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZS5oIgogI2luY2x1ZGUgIkluamVjdGVkQnVu
ZGxlQmFja0ZvcndhcmRMaXN0LmgiCisjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3Js
ZC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXRzY2FwZVBsdWdpbi5oIgog
I2luY2x1ZGUgIk5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5oIgpAQCAtMzk2
LDcgKzM5Nyw3IEBAIFdlYlBhZ2U6OldlYlBhZ2UodWludDY0X3QgcGFnZUlELCBjb25zdCAKIAog
ICAgIHBhZ2VDb25maWd1cmF0aW9uLmRhdGFiYXNlUHJvdmlkZXIgPSBXZWJEYXRhYmFzZVByb3Zp
ZGVyOjpnZXRPckNyZWF0ZShtX3BhZ2VHcm91cC0+cGFnZUdyb3VwSUQoKSk7CiAgICAgcGFnZUNv
bmZpZ3VyYXRpb24uc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyID0gV2ViU3RvcmFnZU5hbWVzcGFj
ZVByb3ZpZGVyOjpnZXRPckNyZWF0ZShtX3BhZ2VHcm91cC0+cGFnZUdyb3VwSUQoKSk7Ci0gICAg
cGFnZUNvbmZpZ3VyYXRpb24udXNlckNvbnRlbnRDb250cm9sbGVyID0gJm1fdXNlckNvbnRlbnRD
b250cm9sbGVyLT51c2VyQ29udGVudENvbnRyb2xsZXIoKTsKKyAgICBwYWdlQ29uZmlndXJhdGlv
bi51c2VyQ29udGVudFByb3ZpZGVyID0gbV91c2VyQ29udGVudENvbnRyb2xsZXIucHRyKCk7CiAg
ICAgcGFnZUNvbmZpZ3VyYXRpb24udmlzaXRlZExpbmtTdG9yZSA9IFZpc2l0ZWRMaW5rVGFibGVD
b250cm9sbGVyOjpnZXRPckNyZWF0ZShwYXJhbWV0ZXJzLnZpc2l0ZWRMaW5rVGFibGVJRCk7CiAK
ICNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQpAQCAtNTIwOCwyMSArNTIwOSwyMSBAQCB2b2lk
IFdlYlBhZ2U6OmltYWdlT3JNZWRpYURvY3VtZW50U2l6ZUNoCiAKIHZvaWQgV2ViUGFnZTo6YWRk
VXNlclNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZSwgV2ViQ29yZTo6VXNlckNvbnRlbnRJbmpl
Y3RlZEZyYW1lcyBpbmplY3RlZEZyYW1lcywgV2ViQ29yZTo6VXNlclNjcmlwdEluamVjdGlvblRp
bWUgaW5qZWN0aW9uVGltZSkKIHsKLSAgICBXZWJDb3JlOjpVc2VyU2NyaXB0IHVzZXJTY3JpcHQo
c291cmNlLCBXZWJDb3JlOjpibGFua1VSTCgpLCBWZWN0b3I8U3RyaW5nPigpLCBWZWN0b3I8U3Ry
aW5nPigpLCBpbmplY3Rpb25UaW1lLCBpbmplY3RlZEZyYW1lcyk7CisgICAgV2ViQ29yZTo6VXNl
clNjcmlwdCB1c2VyU2NyaXB0eyBzb3VyY2UsIFdlYkNvcmU6OmJsYW5rVVJMKCksIFZlY3RvcjxT
dHJpbmc+KCksIFZlY3RvcjxTdHJpbmc+KCksIGluamVjdGlvblRpbWUsIGluamVjdGVkRnJhbWVz
IH07CiAKLSAgICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+dXNlckNvbnRlbnRDb250cm9sbGVy
KCkuYWRkVXNlclNjcmlwdChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSwgc3RkOjptYWtlX3VuaXF1
ZTxXZWJDb3JlOjpVc2VyU2NyaXB0Pih1c2VyU2NyaXB0KSk7CisgICAgbV91c2VyQ29udGVudENv
bnRyb2xsZXItPmFkZFVzZXJTY3JpcHQoKkluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQ6Om5vcm1h
bFdvcmxkKCksIFdURk1vdmUodXNlclNjcmlwdCkpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmFkZFVz
ZXJTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgc291cmNlLCBXZWJDb3JlOjpVc2VyQ29udGVudElu
amVjdGVkRnJhbWVzIGluamVjdGVkRnJhbWVzKQogewotICAgIFdlYkNvcmU6OlVzZXJTdHlsZVNo
ZWV0IHVzZXJTdHlsZVNoZWV0KHNvdXJjZSwgV2ViQ29yZTo6YmxhbmtVUkwoKSwgVmVjdG9yPFN0
cmluZz4oKSwgVmVjdG9yPFN0cmluZz4oKSwgaW5qZWN0ZWRGcmFtZXMsIFVzZXJTdHlsZVVzZXJM
ZXZlbCk7CisgICAgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQgdXNlclN0eWxlU2hlZXR7IHNvdXJj
ZSwgV2ViQ29yZTo6YmxhbmtVUkwoKSwgVmVjdG9yPFN0cmluZz4oKSwgVmVjdG9yPFN0cmluZz4o
KSwgaW5qZWN0ZWRGcmFtZXMsIFVzZXJTdHlsZVVzZXJMZXZlbCB9OwogCi0gICAgbV91c2VyQ29u
dGVudENvbnRyb2xsZXItPnVzZXJDb250ZW50Q29udHJvbGxlcigpLmFkZFVzZXJTdHlsZVNoZWV0
KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpLCBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6OlVzZXJT
dHlsZVNoZWV0Pih1c2VyU3R5bGVTaGVldCksIEluamVjdEluRXhpc3RpbmdEb2N1bWVudHMpOwor
ICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5hZGRVc2VyU3R5bGVTaGVldCgqSW5qZWN0ZWRC
dW5kbGVTY3JpcHRXb3JsZDo6bm9ybWFsV29ybGQoKSwgV1RGTW92ZSh1c2VyU3R5bGVTaGVldCkp
OwogfQogCiB2b2lkIFdlYlBhZ2U6OnJlbW92ZUFsbFVzZXJDb250ZW50KCkKIHsKLSAgICBtX3Vz
ZXJDb250ZW50Q29udHJvbGxlci0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkucmVtb3ZlQWxsVXNl
ckNvbnRlbnQoKTsKKyAgICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+cmVtb3ZlQWxsVXNlckNv
bnRlbnQoKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpkaXNwYXRjaERpZExheW91dChXZWJDb3JlOjpM
YXlvdXRNaWxlc3RvbmVzIG1pbGVzdG9uZXMpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5jcHAJKHJldmlzaW9u
IDE5NzkxMikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3Jv
dXBQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDkgKzU2LDkgQEAgV2ViUGFnZUdyb3Vw
UHJveHk6On5XZWJQYWdlR3JvdXBQcm94eSgpCiB7CiB9CiAKLVdlYkNvcmU6OlVzZXJDb250ZW50
Q29udHJvbGxlciYgV2ViUGFnZUdyb3VwUHJveHk6OnVzZXJDb250ZW50Q29udHJvbGxlcigpCitX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXImIFdlYlBhZ2VHcm91cFByb3h5Ojp1c2VyQ29udGVudENv
bnRyb2xsZXIoKQogewotICAgIHJldHVybiBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+dXNlckNv
bnRlbnRDb250cm9sbGVyKCk7CisgICAgcmV0dXJuIG1fdXNlckNvbnRlbnRDb250cm9sbGVyOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5oCShyZXZpc2lvbiAxOTc5
MTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJv
eHkuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBjbGFzcyBQYWdlR3JvdXA7Ci1jbGFzcyBVc2VyQ29udGVudENvbnRyb2xsZXI7CiB9CiAK
IG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNTAsNyArNDksNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBp
c1Zpc2libGVUb0hpc3RvcnlDbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2RhdGEudmlzaWJsZVRv
SGlzdG9yeUNsaWVudDsgfQogICAgIFdlYkNvcmU6OlBhZ2VHcm91cCogY29yZVBhZ2VHcm91cCgp
IGNvbnN0IHsgcmV0dXJuIG1fcGFnZUdyb3VwOyB9CiAKLSAgICBXZWJDb3JlOjpVc2VyQ29udGVu
dENvbnRyb2xsZXImIHVzZXJDb250ZW50Q29udHJvbGxlcigpOworICAgIFdlYlVzZXJDb250ZW50
Q29udHJvbGxlciYgdXNlckNvbnRlbnRDb250cm9sbGVyKCk7CiAKIHByaXZhdGU6CiAgICAgV2Vi
UGFnZUdyb3VwUHJveHkoY29uc3QgV2ViUGFnZUdyb3VwRGF0YSYpOwpJbmRleDogU291cmNlL1dl
YktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTk3OTEyKQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTYtMDMtMDggIFNhbSBXZWluaWcgIDxz
YW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgYSBiYXNlVVJMIHBhcmFtZXRlciB0byBfV0tV
c2VyU3R5bGVTaGVldAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTU1MjE5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dlYlZpZXcgX2NvbW1vbklu
aXRpYWxpemF0aW9uV2l0aEZyYW1lTmFtZTpncm91cE5hbWU6XSk6CisgICAgICAgICgtW1dlYlZp
ZXcgaW5pdFNpbXBsZUhUTUxEb2N1bWVudFdpdGhTdHlsZTpmcmFtZTpwcmVmZXJlbmNlczpncm91
cE5hbWU6XSk6CisgICAgICAgICgtW1dlYlZpZXcgc2V0R3JvdXBOYW1lOl0pOgorICAgICAgICBV
cGRhdGUgdG8gYWNjb3VudCBmb3IgdGhlIG5hbWUgY2hhbmdlIGZyb20gVXNlckNvbnRlbnRDb250
cm9sbGVyIC0+IFVzZXJDb250ZW50UHJvdmlkZXIuCisKIDIwMTYtMDMtMDkgIERhdmlkIEtpbHpl
ciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMTk3MTQ5KTog
TWlzc2luZyBhdmFpbGFiaWxpdHkgY2hlY2tzIHdoZW4gc29mdC1saW5raW5nIERhdGFEZXRlY3Rv
cnMuZnJhbWV3b3JrCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZp
c2lvbiAxOTc5MTIpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHdv
cmtpbmcgY29weSkKQEAgLTEwMDQsNyArMTAwNCw3IEBAIC0gKHZvaWQpX2NvbW1vbkluaXRpYWxp
emF0aW9uV2l0aEZyYW1lTmEKICAgICBwYWdlQ29uZmlndXJhdGlvbi5wcm9ncmVzc1RyYWNrZXJD
bGllbnQgPSBuZXcgV2ViUHJvZ3Jlc3NUcmFja2VyQ2xpZW50KHNlbGYpOwogICAgIHBhZ2VDb25m
aWd1cmF0aW9uLmRhdGFiYXNlUHJvdmlkZXIgPSAmV2ViRGF0YWJhc2VQcm92aWRlcjo6c2luZ2xl
dG9uKCk7CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24uc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyID0g
Jl9wcml2YXRlLT5ncm91cC0+c3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyKCk7Ci0gICAgcGFnZUNv
bmZpZ3VyYXRpb24udXNlckNvbnRlbnRDb250cm9sbGVyID0gJl9wcml2YXRlLT5ncm91cC0+dXNl
ckNvbnRlbnRDb250cm9sbGVyKCk7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24udXNlckNvbnRlbnRQ
cm92aWRlciA9ICZfcHJpdmF0ZS0+Z3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigpOwogICAg
IHBhZ2VDb25maWd1cmF0aW9uLnZpc2l0ZWRMaW5rU3RvcmUgPSAmX3ByaXZhdGUtPmdyb3VwLT52
aXNpdGVkTGlua1N0b3JlKCk7CiAgICAgX3ByaXZhdGUtPnBhZ2UgPSBuZXcgUGFnZShwYWdlQ29u
ZmlndXJhdGlvbik7CiAKQEAgLTEyNDksNyArMTI0OSw3IEBAIC0gKGlkKWluaXRTaW1wbGVIVE1M
RG9jdW1lbnRXaXRoU3R5bGU6KE4KICAgICBwYWdlQ29uZmlndXJhdGlvbi5wcm9ncmVzc1RyYWNr
ZXJDbGllbnQgPSBuZXcgV2ViUHJvZ3Jlc3NUcmFja2VyQ2xpZW50KHNlbGYpOwogICAgIHBhZ2VD
b25maWd1cmF0aW9uLmRhdGFiYXNlUHJvdmlkZXIgPSAmV2ViRGF0YWJhc2VQcm92aWRlcjo6c2lu
Z2xldG9uKCk7CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24uc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVy
ID0gJl9wcml2YXRlLT5ncm91cC0+c3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyKCk7Ci0gICAgcGFn
ZUNvbmZpZ3VyYXRpb24udXNlckNvbnRlbnRDb250cm9sbGVyID0gJl9wcml2YXRlLT5ncm91cC0+
dXNlckNvbnRlbnRDb250cm9sbGVyKCk7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24udXNlckNvbnRl
bnRQcm92aWRlciA9ICZfcHJpdmF0ZS0+Z3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigpOwog
ICAgIHBhZ2VDb25maWd1cmF0aW9uLnZpc2l0ZWRMaW5rU3RvcmUgPSAmX3ByaXZhdGUtPmdyb3Vw
LT52aXNpdGVkTGlua1N0b3JlKCk7CiAKICAgICBfcHJpdmF0ZS0+cGFnZSA9IG5ldyBQYWdlKHBh
Z2VDb25maWd1cmF0aW9uKTsKQEAgLTYxOTUsNyArNjE5NSw3IEBAIC0gKHZvaWQpc2V0R3JvdXBO
YW1lOihOU1N0cmluZyAqKWdyb3VwTmEKICAgICBpZiAoIV9wcml2YXRlLT5wYWdlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBfcHJpdmF0ZS0+cGFnZS0+c2V0VXNlckNvbnRlbnRDb250cm9sbGVy
KCZfcHJpdmF0ZS0+Z3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigpKTsKKyAgICBfcHJpdmF0
ZS0+cGFnZS0+c2V0VXNlckNvbnRlbnRQcm92aWRlcihfcHJpdmF0ZS0+Z3JvdXAtPnVzZXJDb250
ZW50Q29udHJvbGxlcigpKTsKICAgICBfcHJpdmF0ZS0+cGFnZS0+c2V0VmlzaXRlZExpbmtTdG9y
ZShfcHJpdmF0ZS0+Z3JvdXAtPnZpc2l0ZWRMaW5rU3RvcmUoKSk7CiAgICAgX3ByaXZhdGUtPnBh
Z2UtPnNldEdyb3VwTmFtZShncm91cE5hbWUpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273575</attachid>
            <date>2016-03-10 09:30:41 -0800</date>
            <delta_ts>2016-03-14 12:46:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155219-20160310093028.patch</filename>
            <type>text/plain</type>
            <size>114554</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NzkzOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBAQAorMjAxNi0wMy0wOCAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBhIGJhc2VVUkwgcGFyYW1ldGVy
IHRvIF9XS1VzZXJTdHlsZVNoZWV0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTUyMTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAtIE1vdmVzIHRvIGEgbW9kZWwgZm9yIHVzZXIgY29udGVudCB3aGVyZSBp
bnN0ZWFkIG9mIGVhY2ggcGFnZSBoYXZpbmcgYSBXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xs
ZXIKKyAgICAgICAgICBvYmplY3QsIHdlIGhhdmUgYW4gYWJzdHJhY3QgV2ViQ29yZTo6VXNlckNv
bnRlbnRQcm92aWRlciBpbnRlcmZhY2UgdGhhdCBjYW4gYmUgaW1wbGVtZW50ZWQgYXQgdGhlIFdl
YktpdAorICAgICAgICAgIGxldmVsLiBGb3Igbm93LCBsZWdhY3kgV2ViS2l0IGNvbnRpbnVlcyB0
byB1c2UgdGhlIG9sZCBVc2VyQ29udGVudENvbnRyb2xsZXIsIHdoaWNoIGltcGxlbWVudHMgCisg
ICAgICAgICAgV2ViQ29yZTo6VXNlckNvbnRlbnRQcm92aWRlciwgYW5kIFdlYktpdDIgaW1wbGVt
ZW50cyBpdHMgb3duIGltcGxlbWVudGF0aW9uIHNvIGl0IGNhbiBzdG9yZSBhZGRpdGlvbmFsCisg
ICAgICAgICAgc3RhdGUuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgIEFkZCBuZXcgZmlsZXMuCisKKyAgICAgICAgKiBkb20vRXh0ZW5zaW9u
U3R5bGVTaGVldHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uU3R5bGVTaGVldHM6
OnVwZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlKToKKyAgICAgICAgU3dpdGNoIHRvIHVzaW5n
IGZvckVhY2hVc2VyU3R5bGVTaGVldCBvbiB0aGUgVXNlckNvbnRlbnRQcm92aWRlci4KKworICAg
ICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50Ojpsb2FkUmVzb3VyY2UpOgorICAgICAgICBSZW1vdmUgbnVsbCBjaGVjayBu
b3cgdGhhdCB3ZSBhbHdheXMgaGF2ZSBhIFVzZXJDb250ZW50UHJvdmlkZXIuCisKKyAgICAgICAg
KiBsb2FkZXIvRW1wdHlDbGllbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxXaXRoRW1w
dHlDbGllbnRzKToKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgIEFk
ZCBuZXcgRW1wdHlDbGllbnRzLgorCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5
KToKKyAgICAgICAgUmVtb3ZlIG51bGwgY2hlY2sgbm93IHRoYXQgd2UgYWx3YXlzIGhhdmUgYSBV
c2VyQ29udGVudFByb3ZpZGVyLgorCisgICAgICAgICogbG9hZGVyL1BpbmdMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQpOgor
ICAgICAgICBSZW1vdmUgbnVsbCBjaGVjayBub3cgdGhhdCB3ZSBhbHdheXMgaGF2ZSBhIFVzZXJD
b250ZW50UHJvdmlkZXIuCisKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdEludGVybmFs
KToKKyAgICAgICAgUmVtb3ZlIG51bGwgY2hlY2sgbm93IHRoYXQgd2UgYWx3YXlzIGhhdmUgYSBV
c2VyQ29udGVudFByb3ZpZGVyLgorCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpy
ZXF1ZXN0UmVzb3VyY2UpOgorICAgICAgICBSZW1vdmUgbnVsbCBjaGVjayBub3cgdGhhdCB3ZSBh
bHdheXMgaGF2ZSBhIFVzZXJDb250ZW50UHJvdmlkZXIuCisKKyAgICAgICAgKiBwYWdlL0RPTVdp
bmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OnNob3VsZEhhdmVXZWJLaXRO
YW1lc3BhY2VGb3JXb3JsZCk6CisgICAgICAgIFJlbW92ZSBudWxsIGNoZWNrcyBub3cgdGhhdCB3
ZSBhbHdheXMgaGF2ZSBhIFVzZXJDb250ZW50UHJvdmlkZXIsIGFuZCB1c2VyTWVzc2FnZUhhbmRs
ZXJEZXNjcmlwdG9ycworICAgICAgICByZXR1cm5zIGEgcmVmZXJlbmNlLgorCisgICAgICAgIChX
ZWJDb3JlOjpET01XaW5kb3c6Om9wZW4pOgorICAgICAgICBSZW1vdmUgbnVsbCBjaGVjayBub3cg
dGhhdCB3ZSBhbHdheXMgaGF2ZSBhIFVzZXJDb250ZW50UHJvdmlkZXIuCisKKyAgICAgICAgKiBw
YWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjppbmplY3RVc2VyU2NyaXB0
cyk6CisgICAgICAgIFNpbXBsaWZ5IGJ5IGxpZnRpbmcgZG9jdW1lbnQgY2hlY2sgb3V0IG9mIHRo
ZSBtYWluIGxvb3AgYW5kIHVzaW5nIGZvckVhY2hVc2VyU2NyaXB0LgorCisgICAgICAgICogcGFn
ZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OlBhZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZTo6flBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6dXNlckNvbnRlbnRQ
cm92aWRlcik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRVc2VyQ29udGVudFByb3ZpZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldFVzZXJDb250ZW50Q29udHJvbGxlcik6IERl
bGV0ZWQuCisgICAgICAgICogcGFnZS9QYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp1
c2VyQ29udGVudENvbnRyb2xsZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvUGFnZUNvbmZp
Z3VyYXRpb24uaDoKKyAgICAgICAgU3RvcmUgdGhlIFVzZXJDb250ZW50UHJvdmlkZXIgaW4gYSBS
ZWYsIGFuZCByZXF1aXJlIFBhZ2VDb25maWd1cmF0aW9ucyB0byBwcm92aWRlIG9uZS4gVGhpcwor
ICAgICAgICByZW1vdmVzIGEgYnVuY2ggb2YgbnVsbCBjaGVja3MgYW5kIHNpbXBsaWZpZXMgdGhl
IGNvZGUuCisKKyAgICAgICAgKiBwYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6On5Vc2VyQ29udGVudENvbnRyb2xs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRlbnRDb250cm9sbGVyOjpmb3JFYWNoVXNl
clNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OmZvckVh
Y2hVc2VyU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xs
ZXI6OmFkZFVzZXJTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRlbnRDb250cm9s
bGVyOjpyZW1vdmVVc2VyU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlwdHMpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRl
bnRDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpVc2Vy
Q29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNv
cmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclN0eWxlU2hlZXRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlck1lc3NhZ2VIYW5kbGVy
RGVzY3JpcHRvcik6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OnJl
bW92ZVVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IpOgorICAgICAgICAoV2ViQ29yZTo6VXNl
ckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyQ29udGVudEV4dGVuc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxsVXNl
ckNvbnRlbnRFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJv
bGxlcjo6cmVtb3ZlQWxsVXNlckNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRl
bnRDb250cm9sbGVyOjphZGRQYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlVzZXJD
b250ZW50Q29udHJvbGxlcjo6cmVtb3ZlUGFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
Ojpjb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
VXNlckNvbnRlbnRDb250cm9sbGVyOjpwcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9yTG9h
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OmFj
dGlvbnNGb3JSZXNvdXJjZUxvYWQpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvVXNlckNvbnRl
bnRDb250cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6
OnVzZXJTY3JpcHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6dXNlclN0eWxlU2hlZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlVz
ZXJDb250ZW50Q29udHJvbGxlcjo6dXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMpOiBEZWxl
dGVkLgorICAgICAgICBBZGQgaW5oZXJpdGFuY2UgZnJvbSBVc2VyQ29udGVudFByb3ZpZGVyIGFu
ZCBzaW1wbGlmeSB0aGluZ3MgYnkgcmVtb3ZpbmcgdW5pcXVlX3B0cnMKKyAgICAgICAgdGhhdCB3
ZXJlIGhvbGRpbmcgdGhlIG1lbWJlciB2YXJpYWJsZXMuIFRoZXJlIGlzIHVzdWFsbHkgb25seSBv
bmUgVXNlckNvbnRlbnRDb250cm9sbGVyCisgICAgICAgIHNvIGhhdmluZyB0aGVzZSBpbiB1bmlx
dWVfcHRycyBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZS4KKyAgICAgICAgCisgICAgICAgICogcGFn
ZS9Vc2VyQ29udGVudFByb3ZpZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpVc2Vy
Q29udGVudFByb3ZpZGVyOjpVc2VyQ29udGVudFByb3ZpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlVzZXJDb250ZW50UHJvdmlkZXI6On5Vc2VyQ29udGVudFByb3ZpZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlVzZXJDb250ZW50UHJvdmlkZXI6OmFkZFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
VXNlckNvbnRlbnRQcm92aWRlcjo6cmVtb3ZlUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpVc2Vy
Q29udGVudFByb3ZpZGVyOjppbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZy
YW1lc0luQWxsUGFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGVudEV4dGVuc2lvbnNFbmFi
bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50UHJvdmlkZXI6OnByb2Nlc3NDb250
ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50
UHJvdmlkZXI6OmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQpOgorICAgICAgICAqIHBhZ2UvVXNlckNv
bnRlbnRQcm92aWRlci5oOiBBZGRlZC4KKyAgICAgICAgQWRkIGFic3RyYWN0IGNsYXNzIGZvciBw
cm92aWRpbmcgdXNlciBjb250ZW50IGFuZCBhZGQgc29tZSBoZWxwZXJzIG9uIGl0LgorCisgICAg
ICAgICogcGFnZS9Vc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yLmg6CisgICAgICAgIChXZWJD
b3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcjo6Y2xpZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3I6OmludmFsaWRhdGVDbGllbnQpOgor
ICAgICAgICAqIHBhZ2UvVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlOjpoYW5kbGVyKToKKyAgICAg
ICAgU2ltcGxpZnkgbm93IHRoYXQgdXNlckNvbnRlbnRQcm92aWRlcigpIGFuZCB1c2VyTWVzc2Fn
ZUhhbmRsZXJEZXNjcmlwdG9ycygpIGFyZSByZWZlcmVuY2VzLgorCiAyMDE2LTAzLTEwICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgU3BlY3VsYXRpdmUgcmV2YWxp
ZGF0aW9uIHJlcXVlc3RzIGRvIG5vdCBoYXZlIHRoZWlyICdmaXJzdCBwYXJ0eSBmb3IgY29va2ll
cycgVVJMIHNldApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTk3OTM5KQorKysgU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQwLDYg
KzI3NDAsOCBAQAogCQk3QzNCNzk3MjE5MDg3NTdCMDBCNDdBMkQgLyogVXNlck1lc3NhZ2VIYW5k
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzNC
Nzk3MDE5MDg3NTdCMDBCNDdBMkQgLyogVXNlck1lc3NhZ2VIYW5kbGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0MzRTUxMEExOERGOEYzNTAw
QzExMkY3IC8qIEhUTUxDb252ZXJ0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDM0U1MTA4MThERjhGMzUwMEMxMTJGNyAvKiBIVE1MQ29udmVydGVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0Mz
RTUxMEIxOERGOEYzNTAwQzExMkY3IC8qIEhUTUxDb252ZXJ0ZXIubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzNFNTEwOTE4REY4RjM1MDBDMTEyRjcg
LyogSFRNTENvbnZlcnRlci5tbSAqLzsgfTsKKwkJN0MzRjAxQzExQzhFNUFCQTAwQUREOTYyIC8q
IFVzZXJDb250ZW50UHJvdmlkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdDM0YwMUMwMUM4RTVBQjEwMEFERDk2MiAvKiBVc2VyQ29udGVudFByb3Zp
ZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
N0MzRjAxQzIxQzhFNUFDMjAwQUREOTYyIC8qIFVzZXJDb250ZW50UHJvdmlkZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzRjAxQkYxQzhFNUFC
MTAwQUREOTYyIC8qIFVzZXJDb250ZW50UHJvdmlkZXIuY3BwICovOyB9OwogCQk3QzQ4QTZEMDE5
MUM5RDY1MDAwMjY2NzQgLyogV2ViS2l0TmFtZXNwYWNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNDhBNkNFMTkxQzlENjUwMDAyNjY3NCAvKiBX
ZWJLaXROYW1lc3BhY2UuY3BwICovOyB9OwogCQk3QzQ4QTZEMTE5MUM5RDY1MDAwMjY2NzQgLyog
V2ViS2l0TmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QzQ4QTZDRjE5MUM5RDY1MDAwMjY2NzQgLyogV2ViS2l0TmFtZXNwYWNlLmggKi87
IH07CiAJCTdDNDkwMkEyMThCODI1RjgwMDdEOTI5OCAvKiBET01XaGVlbEV2ZW50SW50ZXJuYWwu
aCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg1OTg5RENBMEFDQzhCQkQwMEEwQkM1MSAvKiBET01XaGVlbEV2ZW50SW50ZXJuYWwu
aCAqLzsgfTsKQEAgLTEwMzgxLDYgKzEwMzgzLDggQEAKIAkJN0MzQjc5NzAxOTA4NzU3QjAwQjQ3
QTJEIC8qIFVzZXJNZXNzYWdlSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBVc2VyTWVzc2FnZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0MzRTUxMDgxOERGOEYzNTAwQzExMkY3IC8qIEhUTUxDb252ZXJ0ZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTENvbnZlcnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3QzNFNTEwOTE4REY4RjM1MDBDMTEyRjcgLyogSFRNTENvbnZlcnRlci5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEhUTUxDb252ZXJ0ZXIubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDM0YwMUJGMUM4RTVBQjEwMEFERDk2MiAv
KiBVc2VyQ29udGVudFByb3ZpZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFVzZXJDb250ZW50UHJvdmlkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3QzNGMDFDMDFDOEU1QUIxMDBBREQ5NjIgLyogVXNlckNvbnRlbnRQcm92aWRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyQ29udGVudFByb3ZpZGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDNDE4OUFCMUIwN0MxNzAwMDBGQTc1NyAvKiBH
bG9iYWxFdmVudEhhbmRsZXJzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBHbG9iYWxFdmVudEhhbmRsZXJzLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M0MTg5QUMxQjA3Q0JGMjAwMEZBNzU3IC8qIFdp
bmRvd0V2ZW50SGFuZGxlcnMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdpbmRvd0V2ZW50SGFuZGxlcnMuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzQ4QTZDRTE5MUM5RDY1MDAwMjY2NzQgLyogV2Vi
S2l0TmFtZXNwYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdl
YktpdE5hbWVzcGFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODExNyw2
ICsxODEyMSw4IEBACiAJCQkJMkQ0Rjk2RjIxQTFFQ0MyNDAwOThCRjg4IC8qIFRleHRJbmRpY2F0
b3IuaCAqLywKIAkJCQkxQUU3OUQ0MDE4OERCNjFGMDAyMjM5QzIgLyogVXNlckNvbnRlbnRDb250
cm9sbGVyLmNwcCAqLywKIAkJCQkxQUU3OUQ0MTE4OERCNjFGMDAyMjM5QzIgLyogVXNlckNvbnRl
bnRDb250cm9sbGVyLmggKi8sCisJCQkJN0MzRjAxQkYxQzhFNUFCMTAwQUREOTYyIC8qIFVzZXJD
b250ZW50UHJvdmlkZXIuY3BwICovLAorCQkJCTdDM0YwMUMwMUM4RTVBQjEwMEFERDk2MiAvKiBV
c2VyQ29udGVudFByb3ZpZGVyLmggKi8sCiAJCQkJMDAzRjFGRTkxMUU2QUI0MzAwODI1OEQ5IC8q
IFVzZXJDb250ZW50VHlwZXMuaCAqLywKIAkJCQlCQ0FDRjNCQTEwNzI5MjFBMDBDMEM4QTMgLyog
VXNlckNvbnRlbnRVUkxQYXR0ZXJuLmNwcCAqLywKIAkJCQlCQ0FDRjNCQjEwNzI5MjFBMDBDMEM4
QTMgLyogVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmggKi8sCkBAIC0yODI1NCw2ICsyODI2MCw3IEBA
CiAJCQkJMDg4QzJGN0ExMjM5MDA4MTAwM0Q2NUNFIC8qIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwODEwOTNEQzEyNTVGMEU3MDBFRDlEMjkgLyogU1ZHVGV4
dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODE2NjhEQTEy
NTYwM0Q1MDA2RjI1REUgLyogU1ZHVGV4dExheW91dEVuZ2luZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJN0MzRjAxQzExQzhFNUFCQTAwQUREOTYyIC8qIFVzZXJDb250ZW50UHJvdmlkZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTA4MEU0OTI2MTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5b3V0
RW5naW5lQmFzZWxpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4MEU0OTI4MTI1NUYzQkQwMEVG
Q0EyNyAvKiBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MDhGMEJGQzYxMjU1QzUzQzAwMDc1MTg1IC8qIFNWR1RleHRNZXRyaWNzLmggaW4gSGVhZGVycyAq
LywKQEAgLTMwNDMwLDYgKzMwNDM3LDcgQEAKIAkJCQk1MTFFRjJEMTE3RjBGREYxMDBFNEZBMTYg
LyogSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTFFRjJD
ODE3RjBGRDM1MDBFNEZBMTYgLyogSlNJREJPcGVuREJSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTUxMUVGMkM5MTdGMEZEMzUwMEU0RkExNiAvKiBKU0lEQlJlcXVlc3QuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJN0MzRjAxQzIxQzhFNUFDMjAwQUREOTYyIC8qIFVzZXJDb250ZW50UHJv
dmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTExRUYyQ0ExN0YwRkQzNTAwRTRGQTE2IC8q
IEpTSURCVHJhbnNhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTExRUYyQ0IxN0YwRkQz
NTAwRTRGQTE2IC8qIEpTSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDNkM0OUYzMEQ3REJBMDUwMEZGQTU1OCAvKiBKU0ltYWdlQ29uc3RydWN0b3IuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXh0ZW5zaW9uU3R5bGVTaGVl
dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FeHRlbnNpb25TdHlsZVNo
ZWV0cy5jcHAJKHJldmlzaW9uIDE5NzkzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FeHRlbnNp
b25TdHlsZVNoZWV0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsMjQgQEAgdm9p
ZCBFeHRlbnNpb25TdHlsZVNoZWV0czo6dXBkYXRlSW5qZWN0ZQogICAgIGlmICghb3duaW5nUGFn
ZSkKICAgICAgICAgcmV0dXJuOwogCisgICAgb3duaW5nUGFnZS0+dXNlckNvbnRlbnRQcm92aWRl
cigpLmZvckVhY2hVc2VyU3R5bGVTaGVldChbJl0oY29uc3QgVXNlclN0eWxlU2hlZXQmIHVzZXJT
dHlsZVNoZWV0KSB7CisgICAgICAgIGlmICh1c2VyU3R5bGVTaGVldC5pbmplY3RlZEZyYW1lcygp
ID09IEluamVjdEluVG9wRnJhbWVPbmx5ICYmIG1fZG9jdW1lbnQub3duZXJFbGVtZW50KCkpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKCFVc2VyQ29udGVudFVSTFBhdHRlcm46
Om1hdGNoZXNQYXR0ZXJucyhtX2RvY3VtZW50LnVybCgpLCB1c2VyU3R5bGVTaGVldC53aGl0ZWxp
c3QoKSwgdXNlclN0eWxlU2hlZXQuYmxhY2tsaXN0KCkpKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBzaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNy
ZWF0ZUlubGluZShjb25zdF9jYXN0PERvY3VtZW50Jj4obV9kb2N1bWVudCksIHVzZXJTdHlsZVNo
ZWV0LnVybCgpKTsKKyAgICAgICAgYm9vbCBpc1VzZXJTdHlsZVNoZWV0ID0gdXNlclN0eWxlU2hl
ZXQubGV2ZWwoKSA9PSBVc2VyU3R5bGVVc2VyTGV2ZWw7CisgICAgICAgIGlmIChpc1VzZXJTdHls
ZVNoZWV0KQorICAgICAgICAgICAgbV9pbmplY3RlZFVzZXJTdHlsZVNoZWV0cy5hcHBlbmQoc2hl
ZXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2luamVjdGVkQXV0aG9yU3R5bGVTaGVl
dHMuYXBwZW5kKHNoZWV0KTsKKworICAgICAgICBzaGVldC0+Y29udGVudHMoKS5zZXRJc1VzZXJT
dHlsZVNoZWV0KGlzVXNlclN0eWxlU2hlZXQpOworICAgICAgICBzaGVldC0+Y29udGVudHMoKS5w
YXJzZVN0cmluZyh1c2VyU3R5bGVTaGVldC5zb3VyY2UoKSk7CisgICAgfSk7CisgICAgCiAgICAg
aWYgKCFvd25pbmdQYWdlLT5jYXB0aW9uVXNlclByZWZlcmVuY2VzU3R5bGVTaGVldCgpLmlzRW1w
dHkoKSkgewogICAgICAgICAvLyBJZGVudGlmeSBvdXIgb3ZlcnJpZGUgc3R5bGUgc2hlZXQgd2l0
aCBhIHVuaXF1ZSBVUkwgLSBhIG5ldyBzY2hlbWUgYW5kIGEgVVVJRC4KICAgICAgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPFVSTD4gY2FwdGlvbnNTdHlsZVNoZWV0VVJMKFBhcnNlZFVSTFN0cmlu
ZywgInVzZXItY2FwdGlvbnMtb3ZlcnJpZGU6MDFGNkFGMTItQzNCMC00RjcwLUFGNUUtQTNFMDAy
MzREQzIzIik7CkBAIC0xMjcsMzQgKzE0NSw2IEBAIHZvaWQgRXh0ZW5zaW9uU3R5bGVTaGVldHM6
OnVwZGF0ZUluamVjdGUKICAgICAgICAgc2hlZXQtPmNvbnRlbnRzKCkuc2V0SXNVc2VyU3R5bGVT
aGVldChmYWxzZSk7CiAgICAgICAgIHNoZWV0LT5jb250ZW50cygpLnBhcnNlU3RyaW5nKG93bmlu
Z1BhZ2UtPmNhcHRpb25Vc2VyUHJlZmVyZW5jZXNTdHlsZVNoZWV0KCkpOwogICAgIH0KLQotICAg
IGNvbnN0IGF1dG8qIHVzZXJDb250ZW50Q29udHJvbGxlciA9IG93bmluZ1BhZ2UtPnVzZXJDb250
ZW50Q29udHJvbGxlcigpOwotICAgIGlmICghdXNlckNvbnRlbnRDb250cm9sbGVyKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBjb25zdCBVc2VyU3R5bGVTaGVldE1hcCogdXNlclN0eWxlU2hlZXRz
ID0gdXNlckNvbnRlbnRDb250cm9sbGVyLT51c2VyU3R5bGVTaGVldHMoKTsKLSAgICBpZiAoIXVz
ZXJTdHlsZVNoZWV0cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChhdXRvJiBzdHlsZVNo
ZWV0cyA6IHVzZXJTdHlsZVNoZWV0cy0+dmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChjb25zdCBh
dXRvJiBzaGVldCA6ICpzdHlsZVNoZWV0cykgewotICAgICAgICAgICAgaWYgKHNoZWV0LT5pbmpl
Y3RlZEZyYW1lcygpID09IEluamVjdEluVG9wRnJhbWVPbmx5ICYmIG1fZG9jdW1lbnQub3duZXJF
bGVtZW50KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGlmICgh
VXNlckNvbnRlbnRVUkxQYXR0ZXJuOjptYXRjaGVzUGF0dGVybnMobV9kb2N1bWVudC51cmwoKSwg
c2hlZXQtPndoaXRlbGlzdCgpLCBzaGVldC0+YmxhY2tsaXN0KCkpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgICAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gZ3JvdXBTaGVl
dCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZUlubGluZShjb25zdF9jYXN0PERvY3VtZW50Jj4obV9k
b2N1bWVudCksIHNoZWV0LT51cmwoKSk7Ci0gICAgICAgICAgICBib29sIGlzVXNlclN0eWxlU2hl
ZXQgPSBzaGVldC0+bGV2ZWwoKSA9PSBVc2VyU3R5bGVVc2VyTGV2ZWw7Ci0gICAgICAgICAgICBp
ZiAoaXNVc2VyU3R5bGVTaGVldCkKLSAgICAgICAgICAgICAgICBtX2luamVjdGVkVXNlclN0eWxl
U2hlZXRzLmFwcGVuZChncm91cFNoZWV0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBtX2luamVjdGVkQXV0aG9yU3R5bGVTaGVldHMuYXBwZW5kKGdyb3VwU2hlZXQpOwotCi0g
ICAgICAgICAgICBncm91cFNoZWV0LT5jb250ZW50cygpLnNldElzVXNlclN0eWxlU2hlZXQoaXNV
c2VyU3R5bGVTaGVldCk7Ci0gICAgICAgICAgICBncm91cFNoZWV0LT5jb250ZW50cygpLnBhcnNl
U3RyaW5nKHNoZWV0LT5zb3VyY2UoKSk7Ci0gICAgICAgIH0KLSAgICB9CiB9CiAKIHZvaWQgRXh0
ZW5zaW9uU3R5bGVTaGVldHM6OmludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZSgpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHJldmlzaW9uIDE5
NzkzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyNTYsNyArMTI1Niw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bG9h
ZFJlc291cmNlKGNvbnMKICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCh1cmwpOwogICAgIERv
Y3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExv
YWRlcigpOwogCi0gICAgaWYgKHBhZ2UtPnVzZXJDb250ZW50Q29udHJvbGxlcigpICYmIGRvY3Vt
ZW50TG9hZGVyICYmIHBhZ2UtPnVzZXJDb250ZW50Q29udHJvbGxlcigpLT5wcm9jZXNzQ29udGVu
dEV4dGVuc2lvblJ1bGVzRm9yTG9hZChyZXF1ZXN0LCBSZXNvdXJjZVR5cGU6Ok1lZGlhLCAqZG9j
dW1lbnRMb2FkZXIpID09IENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzOjpCbG9ja2Vk
KSB7CisgICAgaWYgKGRvY3VtZW50TG9hZGVyICYmIHBhZ2UtPnVzZXJDb250ZW50UHJvdmlkZXIo
KS5wcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9yTG9hZChyZXF1ZXN0LCBSZXNvdXJjZVR5
cGU6Ok1lZGlhLCAqZG9jdW1lbnRMb2FkZXIpID09IENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2Vk
U3RhdHVzOjpCbG9ja2VkKSB7CiAgICAgICAgIHJlcXVlc3QgPSB7IH07CiAgICAgICAgIG1lZGlh
TG9hZGluZ0ZhaWxlZChNZWRpYVBsYXllcjo6Rm9ybWF0RXJyb3IpOwogICAgICAgICByZXR1cm47
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcAkocmV2aXNpb24gMTk3
OTM5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgogI2luY2x1
ZGUgIlN0b3JhZ2VOYW1lc3BhY2UuaCIKICNpbmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlUHJvdmlk
ZXIuaCIKKyNpbmNsdWRlICJVc2VyQ29udGVudFByb3ZpZGVyLmgiCiAjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CiAKICNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQpAQCAtOTUsNyAr
OTYsMTggQEAgY2xhc3MgRW1wdHlTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIgZmluYQogICAgIH0K
IH07CiAKLWNsYXNzIEVtcHR5VmlzaXRlZExpbmtTdG9yZSA6IHB1YmxpYyBWaXNpdGVkTGlua1N0
b3JlIHsKK2NsYXNzIEVtcHR5VXNlckNvbnRlbnRQcm92aWRlciBmaW5hbCA6IHB1YmxpYyBVc2Vy
Q29udGVudFByb3ZpZGVyIHsKKyAgICB2b2lkIGZvckVhY2hVc2VyU2NyaXB0KGNvbnN0IHN0ZDo6
ZnVuY3Rpb248dm9pZChET01XcmFwcGVyV29ybGQmLCBjb25zdCBVc2VyU2NyaXB0Jik+JikgY29u
c3Qgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBmb3JFYWNoVXNlclN0eWxlU2hlZXQoY29uc3Qgc3Rk
OjpmdW5jdGlvbjx2b2lkKGNvbnN0IFVzZXJTdHlsZVNoZWV0Jik+JikgY29uc3Qgb3ZlcnJpZGUg
eyB9CisjaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKKyAgICBjb25zdCBVc2VyTWVz
c2FnZUhhbmRsZXJEZXNjcmlwdG9yTWFwJiB1c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycygp
IGNvbnN0IG92ZXJyaWRlIHsgc3RhdGljIE5ldmVyRGVzdHJveWVkPFVzZXJNZXNzYWdlSGFuZGxl
ckRlc2NyaXB0b3JNYXA+IG1hcDsgcmV0dXJuIG1hcC5nZXQoKTsgfQorI2VuZGlmCisjaWYgRU5B
QkxFKENPTlRFTlRfRVhURU5TSU9OUykKKyAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4
dGVuc2lvbnNCYWNrZW5kJiB1c2VyQ29udGVudEV4dGVuc2lvbkJhY2tlbmQoKSBvdmVycmlkZSB7
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lv
bnNCYWNrZW5kPiBiYWNrZW5kOyByZXR1cm4gYmFja2VuZC5nZXQoKTsgfTsKKyNlbmRpZgorfTsK
KworY2xhc3MgRW1wdHlWaXNpdGVkTGlua1N0b3JlIGZpbmFsIDogcHVibGljIFZpc2l0ZWRMaW5r
U3RvcmUgewogICAgIGJvb2wgaXNMaW5rVmlzaXRlZChQYWdlJiwgTGlua0hhc2gsIGNvbnN0IFVS
TCYsIGNvbnN0IEF0b21pY1N0cmluZyYpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dm9pZCBhZGRWaXNpdGVkTGluayhQYWdlJiwgTGlua0hhc2gpIG92ZXJyaWRlIHsgfQogfTsKQEAg
LTEzMiw2ICsxNDQsNyBAQCB2b2lkIGZpbGxXaXRoRW1wdHlDbGllbnRzKFBhZ2VDb25maWd1cmF0
CiAKICAgICBwYWdlQ29uZmlndXJhdGlvbi5kYXRhYmFzZVByb3ZpZGVyID0gYWRvcHRSZWYobmV3
IEVtcHR5RGF0YWJhc2VQcm92aWRlcik7CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24uc3RvcmFnZU5h
bWVzcGFjZVByb3ZpZGVyID0gYWRvcHRSZWYobmV3IEVtcHR5U3RvcmFnZU5hbWVzcGFjZVByb3Zp
ZGVyKTsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi51c2VyQ29udGVudFByb3ZpZGVyID0gYWRvcHRS
ZWYobmV3IEVtcHR5VXNlckNvbnRlbnRQcm92aWRlcik7CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24u
dmlzaXRlZExpbmtTdG9yZSA9IGFkb3B0UmVmKG5ldyBFbXB0eVZpc2l0ZWRMaW5rU3RvcmUpOwog
CiAjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9FbXB0eUNsaWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1w
dHlDbGllbnRzLmgJKHJldmlzaW9uIDE5NzkzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9F
bXB0eUNsaWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUg
IkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmgiCiAjaW5jbHVkZSAiRHJhZ0NsaWVudC5oIgogI2lu
Y2x1ZGUgIkVkaXRvckNsaWVudC5oIgotI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50LmgiCiAj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9jdXNEaXJlY3Rpb24uaCIKICNpbmNs
dWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgpAQCAtNDQsOSArNDMsMTggQEAKICNpbmNsdWRlICJQ
YWdlLmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiUmVz
b3VyY2VFcnJvci5oIgorI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAi
VmlzaXRlZExpbmtTdG9yZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KIAor
I2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCisjaW5jbHVkZSAiVXNlck1lc3NhZ2VI
YW5kbGVyRGVzY3JpcHRvci5oIgorI2VuZGlmCisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJ
T05TKQorI2luY2x1ZGUgIkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oIgorI2VuZGlmCisKIC8q
CiAgVGhpcyBmaWxlIGhvbGRzIGVtcHR5IENsaWVudCBzdHVicyBmb3IgdXNlIGJ5IFdlYkNvcmUu
CiAgVmlld2xlc3MgZWxlbWVudCBuZWVkcyB0byBjcmVhdGUgYSBkdW1teSBQYWdlLT5GcmFtZS0+
RnJhbWVWaWV3IHRyZWUgZm9yIHVzZSBpbiBwYXJzaW5nIG9yIGV4ZWN1dGluZyBKYXZhU2NyaXB0
LgpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiAxOTc5
MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNzMwLDEzICsyNzMwLDExIEBAIHVuc2lnbmVkIGxvbmcgRnJhbWVMb2FkZXI6Omxv
YWRSZXNvdXJjZVMKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAgIGlmIChlcnJv
ci5pc051bGwoKSkgewogICAgICAgICBpZiAoYXV0byogcGFnZSA9IG1fZnJhbWUucGFnZSgpKSB7
Ci0gICAgICAgICAgICBpZiAoYXV0byogY29udHJvbGxlciA9IHBhZ2UtPnVzZXJDb250ZW50Q29u
dHJvbGxlcigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZG9jdW1lbnRMb2FkZXIgJiYgY29u
dHJvbGxlci0+cHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQobmV3UmVxdWVzdCwg
UmVzb3VyY2VUeXBlOjpSYXcsICptX2RvY3VtZW50TG9hZGVyKSA9PSBDb250ZW50RXh0ZW5zaW9u
czo6QmxvY2tlZFN0YXR1czo6QmxvY2tlZCkgewotICAgICAgICAgICAgICAgICAgICBuZXdSZXF1
ZXN0ID0geyB9OwotICAgICAgICAgICAgICAgICAgICBlcnJvciA9IFJlc291cmNlRXJyb3IoZXJy
b3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwgaW5pdGlhbFJlcXVlc3QudXJsKCksIGVtcHR5U3Ry
aW5nKCkpOwotICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IHsgfTsKLSAgICAgICAgICAg
ICAgICAgICAgZGF0YSA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKG1fZG9jdW1lbnRMb2FkZXIgJiYgcGFnZS0+dXNlckNvbnRlbnRQcm92aWRlcigpLnByb2Nl
c3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKG5ld1JlcXVlc3QsIFJlc291cmNlVHlwZTo6
UmF3LCAqbV9kb2N1bWVudExvYWRlcikgPT0gQ29udGVudEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0
dXM6OkJsb2NrZWQpIHsKKyAgICAgICAgICAgICAgICBuZXdSZXF1ZXN0ID0geyB9OworICAgICAg
ICAgICAgICAgIGVycm9yID0gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbldlYktpdEludGVybmFs
LCAwLCBpbml0aWFsUmVxdWVzdC51cmwoKSwgZW1wdHlTdHJpbmcoKSk7CisgICAgICAgICAgICAg
ICAgcmVzcG9uc2UgPSB7IH07CisgICAgICAgICAgICAgICAgZGF0YSA9IG51bGxwdHI7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
UGluZ0xvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1BpbmdM
b2FkZXIuY3BwCShyZXZpc2lvbiAxOTc5MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUGlu
Z0xvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDEwICs1OSw4IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIHN0YXRpYyBDb250ZW50RXh0ZW5zaW9uczo6QmxvY2tlZFN0YXR1cyBwcm9jZXNz
Q29udGVudEV4dGVuc2lvblJ1bGVzRm9yTG9hZChjb25zdCBGcmFtZSYgZnJhbWUsIFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSkKIHsKICAgICBpZiAo
RG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gZnJhbWUubG9hZGVyKCkuZG9jdW1lbnRM
b2FkZXIoKSkgewotICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLnBhZ2UoKSkgewotICAg
ICAgICAgICAgaWYgKFVzZXJDb250ZW50Q29udHJvbGxlciogY29udHJvbGxlciA9IHBhZ2UtPnVz
ZXJDb250ZW50Q29udHJvbGxlcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBjb250cm9sbGVy
LT5wcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9yTG9hZChyZXF1ZXN0LCByZXNvdXJjZVR5
cGUsICpkb2N1bWVudExvYWRlcik7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2Ug
PSBmcmFtZS5wYWdlKCkpCisgICAgICAgICAgICByZXR1cm4gcGFnZS0+dXNlckNvbnRlbnRQcm92
aWRlcigpLnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKHJlcXVlc3QsIHJlc291
cmNlVHlwZSwgKmRvY3VtZW50TG9hZGVyKTsKICAgICB9CiAgICAgcmV0dXJuIENvbnRlbnRFeHRl
bnNpb25zOjpCbG9ja2VkU3RhdHVzOjpOb3RCbG9ja2VkOwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAxOTc5MzkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDYs
OCArMzQ2LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0SW50ZQogICAg
IGlmIChmcmFtZUxvYWRlcigpKSB7CiAgICAgICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZUxvYWRlcigp
LT5mcmFtZSgpLnBhZ2UoKTsKICAgICAgICAgaWYgKHBhZ2UgJiYgbV9kb2N1bWVudExvYWRlcikg
ewotICAgICAgICAgICAgYXV0byogdXNlckNvbnRlbnRDb250cm9sbGVyID0gcGFnZS0+dXNlckNv
bnRlbnRDb250cm9sbGVyKCk7Ci0gICAgICAgICAgICBpZiAodXNlckNvbnRlbnRDb250cm9sbGVy
ICYmIHVzZXJDb250ZW50Q29udHJvbGxlci0+cHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0Zv
ckxvYWQocmVxdWVzdCwgbV9yZXNvdXJjZVR5cGUsICptX2RvY3VtZW50TG9hZGVyKSA9PSBDb250
ZW50RXh0ZW5zaW9uczo6QmxvY2tlZFN0YXR1czo6QmxvY2tlZCkKKyAgICAgICAgICAgIGlmIChw
YWdlLT51c2VyQ29udGVudFByb3ZpZGVyKCkucHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0Zv
ckxvYWQocmVxdWVzdCwgbV9yZXNvdXJjZVR5cGUsICptX2RvY3VtZW50TG9hZGVyKSA9PSBDb250
ZW50RXh0ZW5zaW9uczo6QmxvY2tlZFN0YXR1czo6QmxvY2tlZCkKICAgICAgICAgICAgICAgICBy
ZXF1ZXN0ID0geyB9OwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAx
OTc5MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDIsOCArNTQyLDggQEAgQ2FjaGVkUmVzb3VyY2VI
YW5kbGU8Q2FjaGVkUmVzb3VyY2U+IENhYwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogI2lm
IEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAgaWYgKGZyYW1lKCkgJiYgZnJhbWUoKS0+
bWFpbkZyYW1lKCkucGFnZSgpICYmIGZyYW1lKCktPm1haW5GcmFtZSgpLnBhZ2UoKS0+dXNlckNv
bnRlbnRDb250cm9sbGVyKCkgJiYgbV9kb2N1bWVudExvYWRlcikgewotICAgICAgICBpZiAoZnJh
bWUoKS0+bWFpbkZyYW1lKCkucGFnZSgpLT51c2VyQ29udGVudENvbnRyb2xsZXIoKS0+cHJvY2Vz
c0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQocmVxdWVzdC5tdXRhYmxlUmVzb3VyY2VSZXF1
ZXN0KCksIHRvUmVzb3VyY2VUeXBlKHR5cGUpLCAqbV9kb2N1bWVudExvYWRlcikgPT0gQ29udGVu
dEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXM6OkJsb2NrZWQpIHsKKyAgICBpZiAoZnJhbWUoKSAm
JiBmcmFtZSgpLT5tYWluRnJhbWUoKS5wYWdlKCkgJiYgbV9kb2N1bWVudExvYWRlcikgeworICAg
ICAgICBpZiAoZnJhbWUoKS0+bWFpbkZyYW1lKCkucGFnZSgpLT51c2VyQ29udGVudFByb3ZpZGVy
KCkucHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQocmVxdWVzdC5tdXRhYmxlUmVz
b3VyY2VSZXF1ZXN0KCksIHRvUmVzb3VyY2VUeXBlKHR5cGUpLCAqbV9kb2N1bWVudExvYWRlcikg
PT0gQ29udGVudEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXM6OkJsb2NrZWQpIHsKICAgICAgICAg
ICAgIGlmICh0eXBlID09IENhY2hlZFJlc291cmNlOjpUeXBlOjpNYWluUmVzb3VyY2UpIHsKICAg
ICAgICAgICAgICAgICBhdXRvIHJlc291cmNlID0gY3JlYXRlUmVzb3VyY2UodHlwZSwgcmVxdWVz
dC5tdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCksIHJlcXVlc3QuY2hhcnNldCgpLCBzZXNzaW9uSUQo
KSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHJlc291cmNlKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvRE9NV2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L0RPTVdpbmRvdy5jcHAJKHJldmlzaW9uIDE5NzkzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RE9NV2luZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYxLDE1ICs3NjEsNyBAQCBib29sIERP
TVdpbmRvdzo6c2hvdWxkSGF2ZVdlYktpdE5hbWVzcGFjCiAgICAgaWYgKCFwYWdlKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvKiB1c2VyQ29udGVudENvbnRyb2xsZXIgPSBwYWdl
LT51c2VyQ29udGVudENvbnRyb2xsZXIoKTsKLSAgICBpZiAoIXVzZXJDb250ZW50Q29udHJvbGxl
cikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byogZGVzY3JpcHRvck1hcCA9IHVz
ZXJDb250ZW50Q29udHJvbGxlci0+dXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMoKTsKLSAg
ICBpZiAoIWRlc2NyaXB0b3JNYXApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZvciAo
YXV0byYgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JNYXAtPnZhbHVlcygpKSB7CisgICAgZm9yIChh
dXRvJiBkZXNjcmlwdG9yIDogcGFnZS0+dXNlckNvbnRlbnRQcm92aWRlcigpLnVzZXJNZXNzYWdl
SGFuZGxlckRlc2NyaXB0b3JzKCkudmFsdWVzKCkpIHsKICAgICAgICAgaWYgKCZkZXNjcmlwdG9y
LT53b3JsZCgpID09ICZ3b3JsZCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAg
LTIxNjgsMTEgKzIxNjAsMTAgQEAgUGFzc1JlZlB0cjxET01XaW5kb3c+IERPTVdpbmRvdzo6b3Bl
bihjbwogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgaWYgKGZpcnN0RnJhbWUt
PmRvY3VtZW50KCkKICAgICAgICAgJiYgZmlyc3RGcmFtZS0+bWFpbkZyYW1lKCkucGFnZSgpCi0g
ICAgICAgICYmIGZpcnN0RnJhbWUtPm1haW5GcmFtZSgpLnBhZ2UoKS0+dXNlckNvbnRlbnRDb250
cm9sbGVyKCkKICAgICAgICAgJiYgZmlyc3RGcmFtZS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKQog
ICAgICAgICAmJiBmaXJzdEZyYW1lLT5tYWluRnJhbWUoKS5kb2N1bWVudCgpLT5sb2FkZXIoKSkg
ewotICAgICAgICBSZXNvdXJjZUxvYWRJbmZvIHJlc291cmNlTG9hZEluZm8gPSB7Zmlyc3RGcmFt
ZS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXJsU3RyaW5nKSwgZmlyc3RGcmFtZS0+bWFpbkZy
YW1lKCkuZG9jdW1lbnQoKS0+dXJsKCksIFJlc291cmNlVHlwZTo6UG9wdXB9OwotICAgICAgICBW
ZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbj4gYWN0aW9ucyA9IGZpcnN0RnJhbWUtPm1h
aW5GcmFtZSgpLnBhZ2UoKS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCktPmFjdGlvbnNGb3JSZXNv
dXJjZUxvYWQocmVzb3VyY2VMb2FkSW5mbywgKmZpcnN0RnJhbWUtPm1haW5GcmFtZSgpLmRvY3Vt
ZW50KCktPmxvYWRlcigpKTsKKyAgICAgICAgUmVzb3VyY2VMb2FkSW5mbyByZXNvdXJjZUxvYWRJ
bmZvID0geyBmaXJzdEZyYW1lLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1cmxTdHJpbmcpLCBm
aXJzdEZyYW1lLT5tYWluRnJhbWUoKS5kb2N1bWVudCgpLT51cmwoKSwgUmVzb3VyY2VUeXBlOjpQ
b3B1cCB9OworICAgICAgICBWZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbj4gYWN0aW9u
cyA9IGZpcnN0RnJhbWUtPm1haW5GcmFtZSgpLnBhZ2UoKS0+dXNlckNvbnRlbnRQcm92aWRlcigp
LmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQocmVzb3VyY2VMb2FkSW5mbywgKmZpcnN0RnJhbWUtPm1h
aW5GcmFtZSgpLmRvY3VtZW50KCktPmxvYWRlcigpKTsKICAgICAgICAgZm9yIChjb25zdCBDb250
ZW50RXh0ZW5zaW9uczo6QWN0aW9uJiBhY3Rpb24gOiBhY3Rpb25zKSB7CiAgICAgICAgICAgICBp
ZiAoYWN0aW9uLnR5cGUoKSA9PSBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tM
b2FkKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZS5jcHAJKHJldmlzaW9uIDE5NzkzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02ODksMzUgKzY4OSwxNyBAQCB2b2lkIEZyYW1lOjppbmplY3RV
c2VyU2NyaXB0cyhVc2VyU2NyaXB0CiAgICAgaWYgKGxvYWRlcigpLnN0YXRlTWFjaGluZSgpLmNy
ZWF0aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQoKSAmJiAhc2V0dGluZ3MoKS5zaG91bGRJbmplY3RV
c2VyU2NyaXB0c0luSW5pdGlhbEVtcHR5RG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgY29uc3QgYXV0byogdXNlckNvbnRlbnRDb250cm9sbGVyID0gbV9wYWdlLT51c2VyQ29udGVu
dENvbnRyb2xsZXIoKTsKLSAgICBpZiAoIXVzZXJDb250ZW50Q29udHJvbGxlcikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gV2FsayB0aGUgaGFzaHRhYmxlLiBJbmplY3QgYnkgd29ybGQuCi0g
ICAgY29uc3QgVXNlclNjcmlwdE1hcCogdXNlclNjcmlwdHMgPSB1c2VyQ29udGVudENvbnRyb2xs
ZXItPnVzZXJTY3JpcHRzKCk7Ci0gICAgaWYgKCF1c2VyU2NyaXB0cykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgZm9yIChjb25zdCBhdXRvJiB3b3JsZEFuZFVzZXJTY3JpcHQgOiAqdXNlclNjcmlw
dHMpCi0gICAgICAgIGluamVjdFVzZXJTY3JpcHRzRm9yV29ybGQoKndvcmxkQW5kVXNlclNjcmlw
dC5rZXksICp3b3JsZEFuZFVzZXJTY3JpcHQudmFsdWUsIGluamVjdGlvblRpbWUpOwotfQotCi12
b2lkIEZyYW1lOjppbmplY3RVc2VyU2NyaXB0c0ZvcldvcmxkKERPTVdyYXBwZXJXb3JsZCYgd29y
bGQsIGNvbnN0IFVzZXJTY3JpcHRWZWN0b3ImIHVzZXJTY3JpcHRzLCBVc2VyU2NyaXB0SW5qZWN0
aW9uVGltZSBpbmplY3Rpb25UaW1lKQotewotICAgIGlmICh1c2VyU2NyaXB0cy5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIERvY3VtZW50KiBkb2MgPSBkb2N1bWVudCgpOwotICAg
IGlmICghZG9jKQorICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCk7Cisg
ICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChhdXRvJiBzY3Jp
cHQgOiB1c2VyU2NyaXB0cykgewotICAgICAgICBpZiAoc2NyaXB0LT5pbmplY3RlZEZyYW1lcygp
ID09IEluamVjdEluVG9wRnJhbWVPbmx5ICYmIG93bmVyRWxlbWVudCgpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgaWYgKHNjcmlwdC0+aW5qZWN0aW9uVGltZSgpID09IGluamVj
dGlvblRpbWUgJiYgVXNlckNvbnRlbnRVUkxQYXR0ZXJuOjptYXRjaGVzUGF0dGVybnMoZG9jLT51
cmwoKSwgc2NyaXB0LT53aGl0ZWxpc3QoKSwgc2NyaXB0LT5ibGFja2xpc3QoKSkpCi0gICAgICAg
ICAgICBtX3NjcmlwdC0+ZXZhbHVhdGVJbldvcmxkKFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0LT5z
b3VyY2UoKSwgc2NyaXB0LT51cmwoKSksIHdvcmxkKTsKLSAgICB9CisgICAgbV9wYWdlLT51c2Vy
Q29udGVudFByb3ZpZGVyKCkuZm9yRWFjaFVzZXJTY3JpcHQoWyZdKERPTVdyYXBwZXJXb3JsZCYg
d29ybGQsIGNvbnN0IFVzZXJTY3JpcHQmIHNjcmlwdCkgeworICAgICAgICBpZiAoc2NyaXB0Lmlu
amVjdGVkRnJhbWVzKCkgPT0gSW5qZWN0SW5Ub3BGcmFtZU9ubHkgJiYgb3duZXJFbGVtZW50KCkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHNjcmlwdC5pbmplY3Rpb25UaW1l
KCkgPT0gaW5qZWN0aW9uVGltZSAmJiBVc2VyQ29udGVudFVSTFBhdHRlcm46Om1hdGNoZXNQYXR0
ZXJucyhkb2N1bWVudC0+dXJsKCksIHNjcmlwdC53aGl0ZWxpc3QoKSwgc2NyaXB0LmJsYWNrbGlz
dCgpKSkKKyAgICAgICAgICAgIG1fc2NyaXB0LT5ldmFsdWF0ZUluV29ybGQoU2NyaXB0U291cmNl
Q29kZShzY3JpcHQuc291cmNlKCksIHNjcmlwdC51cmwoKSksIHdvcmxkKTsKKyAgICB9KTsKIH0K
IAogUmVuZGVyVmlldyogRnJhbWU6OmNvbnRlbnRSZW5kZXJlcigpIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZS5oCShyZXZpc2lvbiAxOTc5MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4MCw4ICsyODAsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIEZyYW1lKFBhZ2UmLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqLCBGcmFtZUxvYWRl
ckNsaWVudCYpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBpbmplY3RVc2VyU2NyaXB0
c0ZvcldvcmxkKERPTVdyYXBwZXJXb3JsZCYsIGNvbnN0IFVzZXJTY3JpcHRWZWN0b3ImLCBVc2Vy
U2NyaXB0SW5qZWN0aW9uVGltZSk7Ci0KICAgICAgICAgSGFzaFNldDxGcmFtZURlc3RydWN0aW9u
T2JzZXJ2ZXIqPiBtX2Rlc3RydWN0aW9uT2JzZXJ2ZXJzOwogCiAgICAgICAgIE1haW5GcmFtZSYg
bV9tYWluRnJhbWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHJldmlzaW9uIDE5NzkzOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3
LDcgQEAKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3ViZnJhbWVMb2Fk
ZXIuaCIKICNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCi0jaW5jbHVkZSAiVXNlckNv
bnRlbnRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiVXNlckNvbnRlbnRQcm92aWRlci5oIgogI2lu
Y2x1ZGUgIlVzZXJJbnB1dEJyaWRnZS5oIgogI2luY2x1ZGUgIlZpZXdTdGF0ZUNoYW5nZU9ic2Vy
dmVyLmgiCiAjaW5jbHVkZSAiVmlzaXRlZExpbmtTdGF0ZS5oIgpAQCAtMjMxLDcgKzIzMSw3IEBA
IFBhZ2U6OlBhZ2UoUGFnZUNvbmZpZ3VyYXRpb24mIHBhZ2VDb25maWcKICAgICAsIG1fYXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2UocGFnZUNvbmZpZ3VyYXRpb24uYXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2UgPyAqV1RGTW92ZShwYWdlQ29uZmlndXJhdGlvbi5hcHBsaWNhdGlvbkNhY2hlU3RvcmFnZSkg
OiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c2luZ2xldG9uKCkpCiAgICAgLCBtX2RhdGFiYXNl
UHJvdmlkZXIoKldURk1vdmUocGFnZUNvbmZpZ3VyYXRpb24uZGF0YWJhc2VQcm92aWRlcikpCiAg
ICAgLCBtX3N0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcigqV1RGTW92ZShwYWdlQ29uZmlndXJhdGlv
bi5zdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIpKQotICAgICwgbV91c2VyQ29udGVudENvbnRyb2xs
ZXIoV1RGTW92ZShwYWdlQ29uZmlndXJhdGlvbi51c2VyQ29udGVudENvbnRyb2xsZXIpKQorICAg
ICwgbV91c2VyQ29udGVudFByb3ZpZGVyKCpXVEZNb3ZlKHBhZ2VDb25maWd1cmF0aW9uLnVzZXJD
b250ZW50UHJvdmlkZXIpKQogICAgICwgbV92aXNpdGVkTGlua1N0b3JlKCpXVEZNb3ZlKHBhZ2VD
b25maWd1cmF0aW9uLnZpc2l0ZWRMaW5rU3RvcmUpKQogICAgICwgbV9zZXNzaW9uSUQoU2Vzc2lv
bklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCiAgICAgLCBtX2lzQ2xvc2luZyhmYWxzZSkKQEAgLTI0
MCw5ICsyNDAsNyBAQCBQYWdlOjpQYWdlKFBhZ2VDb25maWd1cmF0aW9uJiBwYWdlQ29uZmlnCiAK
ICAgICBtX3N0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci0+YWRkUGFnZSgqdGhpcyk7CiAKLSAgICBp
ZiAobV91c2VyQ29udGVudENvbnRyb2xsZXIpCi0gICAgICAgIG1fdXNlckNvbnRlbnRDb250cm9s
bGVyLT5hZGRQYWdlKCp0aGlzKTsKLQorICAgIG1fdXNlckNvbnRlbnRQcm92aWRlci0+YWRkUGFn
ZSgqdGhpcyk7CiAgICAgbV92aXNpdGVkTGlua1N0b3JlLT5hZGRQYWdlKCp0aGlzKTsKIAogICAg
IGlmICghYWxsUGFnZXMpIHsKQEAgLTI5OCw5ICsyOTYsNyBAQCBQYWdlOjp+UGFnZSgpCiAjZW5k
aWYKIAogICAgIG1fc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLT5yZW1vdmVQYWdlKCp0aGlzKTsK
LQotICAgIGlmIChtX3VzZXJDb250ZW50Q29udHJvbGxlcikKLSAgICAgICAgbV91c2VyQ29udGVu
dENvbnRyb2xsZXItPnJlbW92ZVBhZ2UoKnRoaXMpOworICAgIG1fdXNlckNvbnRlbnRQcm92aWRl
ci0+cmVtb3ZlUGFnZSgqdGhpcyk7CiAgICAgbV92aXNpdGVkTGlua1N0b3JlLT5yZW1vdmVQYWdl
KCp0aGlzKTsKIH0KIApAQCAtMTgxOSwxNSArMTgxNSwxNiBAQCBib29sIFBhZ2U6OmFyZVByb21w
dHNBbGxvd2VkKCkKICAgICByZXR1cm4gIW1fZm9yYmlkUHJvbXB0c0RlcHRoOwogfQogCi12b2lk
IFBhZ2U6OnNldFVzZXJDb250ZW50Q29udHJvbGxlcihVc2VyQ29udGVudENvbnRyb2xsZXIqIHVz
ZXJDb250ZW50Q29udHJvbGxlcikKK1VzZXJDb250ZW50UHJvdmlkZXImIFBhZ2U6OnVzZXJDb250
ZW50UHJvdmlkZXIoKQogewotICAgIGlmIChtX3VzZXJDb250ZW50Q29udHJvbGxlcikKLSAgICAg
ICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPnJlbW92ZVBhZ2UoKnRoaXMpOwotCi0gICAgbV91
c2VyQ29udGVudENvbnRyb2xsZXIgPSB1c2VyQ29udGVudENvbnRyb2xsZXI7CisgICAgcmV0dXJu
IG1fdXNlckNvbnRlbnRQcm92aWRlcjsKK30KIAotICAgIGlmIChtX3VzZXJDb250ZW50Q29udHJv
bGxlcikKLSAgICAgICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPmFkZFBhZ2UoKnRoaXMpOwor
dm9pZCBQYWdlOjpzZXRVc2VyQ29udGVudFByb3ZpZGVyKFJlZjxVc2VyQ29udGVudFByb3ZpZGVy
PiYmIHVzZXJDb250ZW50UHJvdmlkZXIpCit7CisgICAgbV91c2VyQ29udGVudFByb3ZpZGVyLT5y
ZW1vdmVQYWdlKCp0aGlzKTsKKyAgICBtX3VzZXJDb250ZW50UHJvdmlkZXIgPSBXVEZNb3ZlKHVz
ZXJDb250ZW50UHJvdmlkZXIpOworICAgIG1fdXNlckNvbnRlbnRQcm92aWRlci0+YWRkUGFnZSgq
dGhpcyk7CiAKICAgICBpbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1l
cygpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgJKHJldmlzaW9uIDE5NzkzOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIxLDcgQEAgY2xh
c3MgU2Nyb2xsaW5nQ29vcmRpbmF0b3I7CiBjbGFzcyBTZXR0aW5nczsKIGNsYXNzIFN0b3JhZ2VO
YW1lc3BhY2U7CiBjbGFzcyBTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXI7Ci1jbGFzcyBVc2VyQ29u
dGVudENvbnRyb2xsZXI7CitjbGFzcyBVc2VyQ29udGVudFByb3ZpZGVyOwogY2xhc3MgVmFsaWRh
dGlvbk1lc3NhZ2VDbGllbnQ7CiBjbGFzcyBWaWV3U3RhdGVDaGFuZ2VPYnNlcnZlcjsKIGNsYXNz
IFZpc2l0ZWRMaW5rU3RvcmU7CkBAIC00NTAsOCArNDUwLDggQEAgcHVibGljOgogICAgIFN0b3Jh
Z2VOYW1lc3BhY2VQcm92aWRlciYgc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyKCkgeyByZXR1cm4g
bV9zdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuZ2V0KCk7IH0KICAgICB2b2lkIHNldFN0b3JhZ2VO
YW1lc3BhY2VQcm92aWRlcihSZWY8U3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyPiYmKTsKIAotICAg
IFVzZXJDb250ZW50Q29udHJvbGxlciogdXNlckNvbnRlbnRDb250cm9sbGVyKCkgeyByZXR1cm4g
bV91c2VyQ29udGVudENvbnRyb2xsZXIuZ2V0KCk7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldFVzZXJDb250ZW50Q29udHJvbGxlcihVc2VyQ29udGVudENvbnRyb2xsZXIqKTsKKyAgICBV
c2VyQ29udGVudFByb3ZpZGVyJiB1c2VyQ29udGVudFByb3ZpZGVyKCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRVc2VyQ29udGVudFByb3ZpZGVyKFJlZjxVc2VyQ29udGVudFByb3ZpZGVy
PiYmKTsKIAogICAgIFZpc2l0ZWRMaW5rU3RvcmUmIHZpc2l0ZWRMaW5rU3RvcmUoKTsKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpc2l0ZWRMaW5rU3RvcmUoUmVmPFZpc2l0ZWRMaW5rU3Rv
cmU+JiYpOwpAQCAtNjc2LDcgKzY3Niw3IEBAIHByaXZhdGU6CiAgICAgUmVmPEFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlPiBtX2FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOwogICAgIFJlZjxEYXRhYmFz
ZVByb3ZpZGVyPiBtX2RhdGFiYXNlUHJvdmlkZXI7CiAgICAgUmVmPFN0b3JhZ2VOYW1lc3BhY2VQ
cm92aWRlcj4gbV9zdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXI7Ci0gICAgUmVmUHRyPFVzZXJDb250
ZW50Q29udHJvbGxlcj4gbV91c2VyQ29udGVudENvbnRyb2xsZXI7CisgICAgUmVmPFVzZXJDb250
ZW50UHJvdmlkZXI+IG1fdXNlckNvbnRlbnRQcm92aWRlcjsKICAgICBSZWY8VmlzaXRlZExpbmtT
dG9yZT4gbV92aXNpdGVkTGlua1N0b3JlOwogICAgIFJlZlB0cjxXaGVlbEV2ZW50VGVzdFRyaWdn
ZXI+IG1fdGVzdFRyaWdnZXI7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbmZp
Z3VyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25maWd1
cmF0aW9uLmgJKHJldmlzaW9uIDE5NzkzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNv
bmZpZ3VyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBjbGFzcyBJbnNw
ZWN0b3JDbGllbnQ7CiBjbGFzcyBQbHVnSW5DbGllbnQ7CiBjbGFzcyBQcm9ncmVzc1RyYWNrZXJD
bGllbnQ7CiBjbGFzcyBTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXI7Ci1jbGFzcyBVc2VyQ29udGVu
dENvbnRyb2xsZXI7CitjbGFzcyBVc2VyQ29udGVudFByb3ZpZGVyOwogY2xhc3MgVmFsaWRhdGlv
bk1lc3NhZ2VDbGllbnQ7CiBjbGFzcyBWaXNpdGVkTGlua1N0b3JlOwogCkBAIC04NCw3ICs4NCw3
IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U+IGFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOwogICAgIFJlZlB0cjxEYXRhYmFzZVByb3ZpZGVyPiBkYXRhYmFzZVBy
b3ZpZGVyOwogICAgIFJlZlB0cjxTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXI+IHN0b3JhZ2VOYW1l
c3BhY2VQcm92aWRlcjsKLSAgICBSZWZQdHI8VXNlckNvbnRlbnRDb250cm9sbGVyPiB1c2VyQ29u
dGVudENvbnRyb2xsZXI7CisgICAgUmVmUHRyPFVzZXJDb250ZW50UHJvdmlkZXI+IHVzZXJDb250
ZW50UHJvdmlkZXI7CiAgICAgUmVmUHRyPFZpc2l0ZWRMaW5rU3RvcmU+IHZpc2l0ZWRMaW5rU3Rv
cmU7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50Q29udHJvbGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudENvbnRy
b2xsZXIuY3BwCShyZXZpc2lvbiAxOTc5MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJD
b250ZW50Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDI0ICsyNywxNSBAQAog
I2luY2x1ZGUgIlVzZXJDb250ZW50Q29udHJvbGxlci5oIgogCiAjaW5jbHVkZSAiRE9NV3JhcHBl
cldvcmxkLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudExvYWRl
ci5oIgotI2luY2x1ZGUgIkV4dGVuc2lvblN0eWxlU2hlZXRzLmgiCi0jaW5jbHVkZSAiTWFpbkZy
YW1lLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZEluZm8uaCIK
ICNpbmNsdWRlICJVc2VyU2NyaXB0LmgiCiAjaW5jbHVkZSAiVXNlclN0eWxlU2hlZXQuaCIKLSNp
bmNsdWRlIDxydW50aW1lL0pTQ2VsbElubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL1N0cnVj
dHVyZUlubGluZXMuaD4KIAogI2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCiAjaW5j
bHVkZSAiVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvci5oIgogI2VuZGlmCiAKICNpZiBFTkFC
TEUoQ09OVEVOVF9FWFRFTlNJT05TKQotI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25Db21waWxl
ci5oIgotI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5oIgorI2luY2x1ZGUgIkNv
bXBpbGVkQ29udGVudEV4dGVuc2lvbi5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTYyLDM2ICs1MywzMyBAQCBVc2VyQ29udGVudENvbnRyb2xsZXI6On5Vc2VyQ29udGVudENv
bnRyCiB7CiB9CiAKLXZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRQYWdlKFBhZ2UmIHBh
Z2UpCit2b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6Zm9yRWFjaFVzZXJTY3JpcHQoY29uc3Qg
c3RkOjpmdW5jdGlvbjx2b2lkKERPTVdyYXBwZXJXb3JsZCYsIGNvbnN0IFVzZXJTY3JpcHQmKT4m
IGZ1bmN0b3IpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFtX3BhZ2VzLmNvbnRhaW5zKCZwYWdlKSk7
Ci0gICAgbV9wYWdlcy5hZGQoJnBhZ2UpOworICAgIGZvciAoY29uc3QgYXV0byYgd29ybGRBbmRV
c2VyU2NyaXB0VmVjdG9yIDogbV91c2VyU2NyaXB0cykgeworICAgICAgICBhdXRvJiB3b3JsZCA9
ICp3b3JsZEFuZFVzZXJTY3JpcHRWZWN0b3Iua2V5LmdldCgpOworICAgICAgICBmb3IgKGNvbnN0
IGF1dG8mIHVzZXJTY3JpcHQgOiAqd29ybGRBbmRVc2VyU2NyaXB0VmVjdG9yLnZhbHVlKQorICAg
ICAgICAgICAgZnVuY3Rvcih3b3JsZCwgKnVzZXJTY3JpcHQpOworICAgIH0KIH0KIAotdm9pZCBV
c2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVBhZ2UoUGFnZSYgcGFnZSkKK3ZvaWQgVXNlckNv
bnRlbnRDb250cm9sbGVyOjpmb3JFYWNoVXNlclN0eWxlU2hlZXQoY29uc3Qgc3RkOjpmdW5jdGlv
bjx2b2lkKGNvbnN0IFVzZXJTdHlsZVNoZWV0Jik+JiBmdW5jdG9yKSBjb25zdAogewotICAgIEFT
U0VSVChtX3BhZ2VzLmNvbnRhaW5zKCZwYWdlKSk7Ci0gICAgbV9wYWdlcy5yZW1vdmUoJnBhZ2Up
OworICAgIGZvciAoYXV0byYgc3R5bGVTaGVldFZlY3RvciA6IG1fdXNlclN0eWxlU2hlZXRzLnZh
bHVlcygpKSB7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgc3R5bGVTaGVldCA6ICpzdHlsZVNo
ZWV0VmVjdG9yKQorICAgICAgICAgICAgZnVuY3Rvcigqc3R5bGVTaGVldCk7CisgICAgfQogfQog
CiB2b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlclNjcmlwdChET01XcmFwcGVyV29y
bGQmIHdvcmxkLCBzdGQ6OnVuaXF1ZV9wdHI8VXNlclNjcmlwdD4gdXNlclNjcmlwdCkKIHsKLSAg
ICBpZiAoIW1fdXNlclNjcmlwdHMpCi0gICAgICAgIG1fdXNlclNjcmlwdHMgPSBzdGQ6Om1ha2Vf
dW5pcXVlPFVzZXJTY3JpcHRNYXA+KCk7Ci0KLSAgICBhdXRvJiBzY3JpcHRzSW5Xb3JsZCA9IG1f
dXNlclNjcmlwdHMtPmFkZCgmd29ybGQsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKLSAgICBp
ZiAoIXNjcmlwdHNJbldvcmxkKQotICAgICAgICBzY3JpcHRzSW5Xb3JsZCA9IHN0ZDo6bWFrZV91
bmlxdWU8VXNlclNjcmlwdFZlY3Rvcj4oKTsKKyAgICBhdXRvJiBzY3JpcHRzSW5Xb3JsZCA9IG1f
dXNlclNjcmlwdHMuZW5zdXJlKCZ3b3JsZCwgWyZdIHsgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8
VXNlclNjcmlwdFZlY3Rvcj4oKTsgfSkuaXRlcmF0b3ItPnZhbHVlOwogICAgIHNjcmlwdHNJbldv
cmxkLT5hcHBlbmQoV1RGTW92ZSh1c2VyU2NyaXB0KSk7CiB9CiAKIHZvaWQgVXNlckNvbnRlbnRD
b250cm9sbGVyOjpyZW1vdmVVc2VyU2NyaXB0KERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIGNvbnN0
IFVSTCYgdXJsKQogewotICAgIGlmICghbV91c2VyU2NyaXB0cykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgYXV0byBpdCA9IG1fdXNlclNjcmlwdHMtPmZpbmQoJndvcmxkKTsKLSAgICBpZiAoaXQg
PT0gbV91c2VyU2NyaXB0cy0+ZW5kKCkpCisgICAgYXV0byBpdCA9IG1fdXNlclNjcmlwdHMuZmlu
ZCgmd29ybGQpOworICAgIGlmIChpdCA9PSBtX3VzZXJTY3JpcHRzLmVuZCgpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBhdXRvIHNjcmlwdHMgPSBpdC0+dmFsdWUuZ2V0KCk7CkBAIC0xMDEsMjUg
Kzg5LDE3IEBAIHZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU2MKICAgICB9
CiAKICAgICBpZiAoc2NyaXB0cy0+aXNFbXB0eSgpKQotICAgICAgICBtX3VzZXJTY3JpcHRzLT5y
ZW1vdmUoaXQpOworICAgICAgICBtX3VzZXJTY3JpcHRzLnJlbW92ZShpdCk7CiB9CiAKIHZvaWQg
VXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU2NyaXB0cyhET01XcmFwcGVyV29ybGQm
IHdvcmxkKQogewotICAgIGlmICghbV91c2VyU2NyaXB0cykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV91c2VyU2NyaXB0cy0+cmVtb3ZlKCZ3b3JsZCk7CisgICAgbV91c2VyU2NyaXB0cy5yZW1v
dmUoJndvcmxkKTsKIH0KIAogdm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTdHls
ZVNoZWV0KERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIHN0ZDo6dW5pcXVlX3B0cjxVc2VyU3R5bGVT
aGVldD4gdXNlclN0eWxlU2hlZXQsIFVzZXJTdHlsZUluamVjdGlvblRpbWUgaW5qZWN0aW9uVGlt
ZSkKIHsKLSAgICBpZiAoIW1fdXNlclN0eWxlU2hlZXRzKQotICAgICAgICBtX3VzZXJTdHlsZVNo
ZWV0cyA9IHN0ZDo6bWFrZV91bmlxdWU8VXNlclN0eWxlU2hlZXRNYXA+KCk7Ci0KLSAgICBhdXRv
JiBzdHlsZVNoZWV0c0luV29ybGQgPSBtX3VzZXJTdHlsZVNoZWV0cy0+YWRkKCZ3b3JsZCwgbnVs
bHB0cikuaXRlcmF0b3ItPnZhbHVlOwotICAgIGlmICghc3R5bGVTaGVldHNJbldvcmxkKQotICAg
ICAgICBzdHlsZVNoZWV0c0luV29ybGQgPSBzdGQ6Om1ha2VfdW5pcXVlPFVzZXJTdHlsZVNoZWV0
VmVjdG9yPigpOworICAgIGF1dG8mIHN0eWxlU2hlZXRzSW5Xb3JsZCA9IG1fdXNlclN0eWxlU2hl
ZXRzLmVuc3VyZSgmd29ybGQsIFsmXSB7IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFVzZXJTdHls
ZVNoZWV0VmVjdG9yPigpOyB9KS5pdGVyYXRvci0+dmFsdWU7CiAgICAgc3R5bGVTaGVldHNJbldv
cmxkLT5hcHBlbmQoV1RGTW92ZSh1c2VyU3R5bGVTaGVldCkpOwogCiAgICAgaWYgKGluamVjdGlv
blRpbWUgPT0gSW5qZWN0SW5FeGlzdGluZ0RvY3VtZW50cykKQEAgLTEyOCwxMSArMTA4LDggQEAg
dm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZQogCiB2b2lkIFVzZXJDb250
ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclN0eWxlU2hlZXQoRE9NV3JhcHBlcldvcmxkJiB3b3Js
ZCwgY29uc3QgVVJMJiB1cmwpCiB7Ci0gICAgaWYgKCFtX3VzZXJTdHlsZVNoZWV0cykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgYXV0byBpdCA9IG1fdXNlclN0eWxlU2hlZXRzLT5maW5kKCZ3b3Js
ZCk7Ci0gICAgaWYgKGl0ID09IG1fdXNlclN0eWxlU2hlZXRzLT5lbmQoKSkKKyAgICBhdXRvIGl0
ID0gbV91c2VyU3R5bGVTaGVldHMuZmluZCgmd29ybGQpOworICAgIGlmIChpdCA9PSBtX3VzZXJT
dHlsZVNoZWV0cy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byYgc3R5bGVzaGVl
dHMgPSAqaXQtPnZhbHVlOwpAQCAtMTQ5LDE3ICsxMjYsMTQgQEAgdm9pZCBVc2VyQ29udGVudENv
bnRyb2xsZXI6OnJlbW92ZVVzZXJTdAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoc3R5bGVz
aGVldHMuaXNFbXB0eSgpKQotICAgICAgICBtX3VzZXJTdHlsZVNoZWV0cy0+cmVtb3ZlKGl0KTsK
KyAgICAgICAgbV91c2VyU3R5bGVTaGVldHMucmVtb3ZlKGl0KTsKIAogICAgIGludmFsaWRhdGVJ
bmplY3RlZFN0eWxlU2hlZXRDYWNoZUluQWxsRnJhbWVzSW5BbGxQYWdlcygpOwogfQogCiB2b2lk
IFVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclN0eWxlU2hlZXRzKERPTVdyYXBwZXJX
b3JsZCYgd29ybGQpCiB7Ci0gICAgaWYgKCFtX3VzZXJTdHlsZVNoZWV0cykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKCFtX3VzZXJTdHlsZVNoZWV0cy0+cmVtb3ZlKCZ3b3JsZCkpCisgICAg
aWYgKCFtX3VzZXJTdHlsZVNoZWV0cy5yZW1vdmUoJndvcmxkKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgaW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlSW5BbGxGcmFtZXNJbkFsbFBh
Z2VzKCk7CkBAIC0xNjgsOTUgKzE0Miw0MCBAQCB2b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6
cmVtb3ZlVXNlclN0CiAjaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKIHZvaWQgVXNl
ckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yKFVzZXJN
ZXNzYWdlSGFuZGxlckRlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCiB7Ci0gICAgaWYgKCFtX3VzZXJN
ZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzKQotICAgICAgICBtX3VzZXJNZXNzYWdlSGFuZGxlckRl
c2NyaXB0b3JzID0gc3RkOjptYWtlX3VuaXF1ZTxVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9y
TWFwPigpOwotCi0gICAgbV91c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycy0+YWRkKHN0ZDo6
bWFrZV9wYWlyKGRlc2NyaXB0b3IubmFtZSgpLCAmZGVzY3JpcHRvci53b3JsZCgpKSwgJmRlc2Ny
aXB0b3IpOworICAgIG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMuYWRkKHN0ZDo6bWFr
ZV9wYWlyKGRlc2NyaXB0b3IubmFtZSgpLCAmZGVzY3JpcHRvci53b3JsZCgpKSwgJmRlc2NyaXB0
b3IpOwogfQogCiB2b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlck1lc3NhZ2VI
YW5kbGVyRGVzY3JpcHRvcihVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
KQogewotICAgIGlmICghbV91c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV91c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycy0+cmVtb3ZlKHN0
ZDo6bWFrZV9wYWlyKGRlc2NyaXB0b3IubmFtZSgpLCAmZGVzY3JpcHRvci53b3JsZCgpKSk7Cisg
ICAgbV91c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycy5yZW1vdmUoc3RkOjptYWtlX3BhaXIo
ZGVzY3JpcHRvci5uYW1lKCksICZkZXNjcmlwdG9yLndvcmxkKCkpKTsKIH0KICNlbmRpZgogCiAj
aWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKIHZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVy
OjphZGRVc2VyQ29udGVudEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxDb250
ZW50RXh0ZW5zaW9uczo6Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiBjb250ZW50RXh0ZW5zaW9u
KQogewotICAgIGlmICghbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZCkKLSAgICAgICAgbV9jb250
ZW50RXh0ZW5zaW9uQmFja2VuZCA9IHN0ZDo6bWFrZV91bmlxdWU8Q29udGVudEV4dGVuc2lvbnM6
OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZD4oKTsKLSAgICAKLSAgICBtX2NvbnRlbnRFeHRlbnNp
b25CYWNrZW5kLT5hZGRDb250ZW50RXh0ZW5zaW9uKG5hbWUsIGNvbnRlbnRFeHRlbnNpb24pOwor
ICAgIG1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQuYWRkQ29udGVudEV4dGVuc2lvbihuYW1lLCBj
b250ZW50RXh0ZW5zaW9uKTsKIH0KIAogdm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92
ZVVzZXJDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBpZiAoIW1f
Y29udGVudEV4dGVuc2lvbkJhY2tlbmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGVu
dEV4dGVuc2lvbkJhY2tlbmQtPnJlbW92ZUNvbnRlbnRFeHRlbnNpb24obmFtZSk7CisgICAgbV9j
b250ZW50RXh0ZW5zaW9uQmFja2VuZC5yZW1vdmVDb250ZW50RXh0ZW5zaW9uKG5hbWUpOwogfQog
CiB2b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxsVXNlckNvbnRlbnRFeHRlbnNp
b25zKCkKIHsKLSAgICBpZiAoIW1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQtPnJlbW92ZUFsbENvbnRlbnRF
eHRlbnNpb25zKCk7Ci19Ci0KLXN0YXRpYyBib29sIGNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZChj
b25zdCBEb2N1bWVudExvYWRlciYgZG9jdW1lbnRMb2FkZXIpCi17Ci0gICAgaWYgKGF1dG8gZnJh
bWUgPSBkb2N1bWVudExvYWRlci5mcmFtZSgpKSB7Ci0gICAgICAgIGlmIChmcmFtZS0+aXNNYWlu
RnJhbWUoKSkKLSAgICAgICAgICAgIHJldHVybiBkb2N1bWVudExvYWRlci51c2VyQ29udGVudEV4
dGVuc2lvbnNFbmFibGVkKCk7Ci0gICAgICAgIGlmIChhdXRvIG1haW5Eb2N1bWVudExvYWRlciA9
IGZyYW1lLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpKQotICAgICAgICAg
ICAgcmV0dXJuIG1haW5Eb2N1bWVudExvYWRlci0+dXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxl
ZCgpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotICAgIAotQ29udGVudEV4dGVuc2lv
bnM6OkJsb2NrZWRTdGF0dXMgVXNlckNvbnRlbnRDb250cm9sbGVyOjpwcm9jZXNzQ29udGVudEV4
dGVuc2lvblJ1bGVzRm9yTG9hZChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlVHlw
ZSByZXNvdXJjZVR5cGUsIERvY3VtZW50TG9hZGVyJiBpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIp
Ci17Ci0gICAgaWYgKCFtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kKQotICAgICAgICByZXR1cm4g
Q29udGVudEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXM6Ok5vdEJsb2NrZWQ7Ci0KLSAgICBpZiAo
IWNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZChpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIpKQotICAg
ICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXM6Ok5vdEJsb2NrZWQ7
Ci0KLSAgICByZXR1cm4gbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZC0+cHJvY2Vzc0NvbnRlbnRF
eHRlbnNpb25SdWxlc0ZvckxvYWQocmVxdWVzdCwgcmVzb3VyY2VUeXBlLCBpbml0aWF0aW5nRG9j
dW1lbnRMb2FkZXIpOwotfQotCi1WZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbj4gVXNl
ckNvbnRlbnRDb250cm9sbGVyOjphY3Rpb25zRm9yUmVzb3VyY2VMb2FkKGNvbnN0IFJlc291cmNl
TG9hZEluZm8mIHJlc291cmNlTG9hZEluZm8sIERvY3VtZW50TG9hZGVyJiBpbml0aWF0aW5nRG9j
dW1lbnRMb2FkZXIpCi17Ci0gICAgaWYgKCFtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kKQotICAg
ICAgICByZXR1cm4gVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb24+KCk7Ci0gICAgCi0g
ICAgaWYgKCFjb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQoaW5pdGlhdGluZ0RvY3VtZW50TG9hZGVy
KSkKLSAgICAgICAgcmV0dXJuIFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uPigpOwot
Ci0gICAgcmV0dXJuIG1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQtPmFjdGlvbnNGb3JSZXNvdXJj
ZUxvYWQocmVzb3VyY2VMb2FkSW5mbyk7CisgICAgbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZC5y
ZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucygpOwogfQogI2VuZGlmCiAKIHZvaWQgVXNlckNvbnRl
bnRDb250cm9sbGVyOjpyZW1vdmVBbGxVc2VyQ29udGVudCgpCiB7Ci0gICAgbV91c2VyU2NyaXB0
cyA9IG51bGxwdHI7CisgICAgbV91c2VyU2NyaXB0cy5jbGVhcigpOwogCi0gICAgaWYgKG1fdXNl
clN0eWxlU2hlZXRzKSB7Ci0gICAgICAgIG1fdXNlclN0eWxlU2hlZXRzID0gbnVsbHB0cjsKKyAg
ICBpZiAoIW1fdXNlclN0eWxlU2hlZXRzLmlzRW1wdHkoKSkgeworICAgICAgICBtX3VzZXJTdHls
ZVNoZWV0cy5jbGVhcigpOwogICAgICAgICBpbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2Fj
aGVJbkFsbEZyYW1lc0luQWxsUGFnZXMoKTsKICAgICB9CiB9CiAKLXZvaWQgVXNlckNvbnRlbnRD
b250cm9sbGVyOjppbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lc0lu
QWxsUGFnZXMoKQotewotICAgIGZvciAoYXV0byYgcGFnZSA6IG1fcGFnZXMpCi0gICAgICAgIHBh
Z2UtPmludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZUluQWxsRnJhbWVzKCk7Ci19Ci0K
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNv
bnRlbnRDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Vc2Vy
Q29udGVudENvbnRyb2xsZXIuaAkocmV2aXNpb24gMTk3OTM5KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNTggKzI2
LDE5IEBACiAjaWZuZGVmIFVzZXJDb250ZW50Q29udHJvbGxlcl9oCiAjZGVmaW5lIFVzZXJDb250
ZW50Q29udHJvbGxlcl9oCiAKLSNpbmNsdWRlICJVc2VyU2NyaXB0VHlwZXMuaCIKLSNpbmNsdWRl
ICJVc2VyU3R5bGVTaGVldFR5cGVzLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2lmIEVO
QUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCi0jaW5jbHVkZSAiVXNlck1lc3NhZ2VIYW5kbGVy
RGVzY3JpcHRvclR5cGVzLmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lP
TlMpCi0jaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbkFjdGlvbnMuaCIKLSNlbmRpZgorI2luY2x1
ZGUgIlVzZXJDb250ZW50UHJvdmlkZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBET01XcmFwcGVyV29ybGQ7Ci1jbGFzcyBEb2N1bWVudExvYWRlcjsKLWNsYXNzIFBhZ2U7Ci1j
bGFzcyBSZXNvdXJjZVJlcXVlc3Q7Ci1jbGFzcyBTdHlsZVNoZWV0Q29udGVudHM7Ci1jbGFzcyBV
Ukw7Ci1jbGFzcyBVc2VyU2NyaXB0OwotY2xhc3MgVXNlclN0eWxlU2hlZXQ7Ci1jbGFzcyBVc2Vy
TWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yOwotCi1lbnVtIGNsYXNzIFJlc291cmNlVHlwZSA6IHVp
bnQxNl90OwotCi1zdHJ1Y3QgUmVzb3VyY2VMb2FkSW5mbzsKLQotbmFtZXNwYWNlIENvbnRlbnRF
eHRlbnNpb25zIHsKLWNsYXNzIENvbXBpbGVkQ29udGVudEV4dGVuc2lvbjsKLWNsYXNzIENvbnRl
bnRFeHRlbnNpb25zQmFja2VuZDsKLXN0cnVjdCBBY3Rpb247Ci19Ci0KLWNsYXNzIFVzZXJDb250
ZW50Q29udHJvbGxlciA6IHB1YmxpYyBSZWZDb3VudGVkPFVzZXJDb250ZW50Q29udHJvbGxlcj4g
eworY2xhc3MgVXNlckNvbnRlbnRDb250cm9sbGVyIGZpbmFsIDogcHVibGljIFVzZXJDb250ZW50
UHJvdmlkZXIgewogcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8VXNlckNv
bnRlbnRDb250cm9sbGVyPiBjcmVhdGUoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB+VXNlckNvbnRl
bnRDb250cm9sbGVyKCk7CiAKLSAgICB2b2lkIGFkZFBhZ2UoUGFnZSYpOwotICAgIHZvaWQgcmVt
b3ZlUGFnZShQYWdlJik7Ci0KLSAgICBjb25zdCBVc2VyU2NyaXB0TWFwKiB1c2VyU2NyaXB0cygp
IGNvbnN0IHsgcmV0dXJuIG1fdXNlclNjcmlwdHMuZ2V0KCk7IH0KLQogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgYWRkVXNlclNjcmlwdChET01XcmFwcGVyV29ybGQmLCBzdGQ6OnVuaXF1ZV9wdHI8
VXNlclNjcmlwdD4pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlVXNlclNjcmlwdChE
T01XcmFwcGVyV29ybGQmLCBjb25zdCBVUkwmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJl
bW92ZVVzZXJTY3JpcHRzKERPTVdyYXBwZXJXb3JsZCYpOwogCi0gICAgY29uc3QgVXNlclN0eWxl
U2hlZXRNYXAqIHVzZXJTdHlsZVNoZWV0cygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlclN0eWxlU2hl
ZXRzLmdldCgpOyB9Ci0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZFVzZXJTdHlsZVNoZWV0
KERPTVdyYXBwZXJXb3JsZCYsIHN0ZDo6dW5pcXVlX3B0cjxVc2VyU3R5bGVTaGVldD4sIFVzZXJT
dHlsZUluamVjdGlvblRpbWUpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlVXNlclN0
eWxlU2hlZXQoRE9NV3JhcHBlcldvcmxkJiwgY29uc3QgVVJMJik7CiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCByZW1vdmVVc2VyU3R5bGVTaGVldHMoRE9NV3JhcHBlcldvcmxkJik7CkBAIC04NSw4
ICs0Niw2IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUFsbFVzZXJD
b250ZW50KCk7CiAKICNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQotICAgIGNvbnN0
IFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JNYXAqIHVzZXJNZXNzYWdlSGFuZGxlckRlc2Ny
aXB0b3JzKCkgY29uc3QgeyByZXR1cm4gbV91c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycy5n
ZXQoKTsgfQotCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRVc2VyTWVzc2FnZUhhbmRsZXJE
ZXNjcmlwdG9yKFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3ImKTsKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHJlbW92ZVVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IoVXNlck1lc3NhZ2VI
YW5kbGVyRGVzY3JpcHRvciYpOwogI2VuZGlmCkBAIC05NSwyNSArNTQsMjggQEAgcHVibGljOgog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkVXNlckNvbnRlbnRFeHRlbnNpb24oY29uc3QgU3Ry
aW5nJiBuYW1lLCBSZWZQdHI8Q29udGVudEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbj4pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlVXNlckNvbnRlbnRFeHRlbnNp
b24oY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUFs
bFVzZXJDb250ZW50RXh0ZW5zaW9ucygpOwotCi0gICAgQ29udGVudEV4dGVuc2lvbnM6OkJsb2Nr
ZWRTdGF0dXMgcHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQoUmVzb3VyY2VSZXF1
ZXN0JiwgUmVzb3VyY2VUeXBlLCBEb2N1bWVudExvYWRlciYgaW5pdGlhdGluZ0RvY3VtZW50TG9h
ZGVyKTsKLSAgICBWZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbj4gYWN0aW9uc0ZvclJl
c291cmNlTG9hZChjb25zdCBSZXNvdXJjZUxvYWRJbmZvJiwgRG9jdW1lbnRMb2FkZXImIGluaXRp
YXRpbmdEb2N1bWVudExvYWRlcik7CiAjZW5kaWYKIAogcHJpdmF0ZToKICAgICBVc2VyQ29udGVu
dENvbnRyb2xsZXIoKTsKIAotICAgIHZvaWQgaW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENh
Y2hlSW5BbGxGcmFtZXNJbkFsbFBhZ2VzKCk7Ci0KLSAgICBIYXNoU2V0PFBhZ2UqPiBtX3BhZ2Vz
OworICAgIC8vIFVzZXJDb250ZW50UHJvdmlkZXIKKyAgICB2b2lkIGZvckVhY2hVc2VyU2NyaXB0
KGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChET01XcmFwcGVyV29ybGQmLCBjb25zdCBVc2VyU2Ny
aXB0Jik+JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBmb3JFYWNoVXNlclN0eWxlU2hlZXQo
Y29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFVzZXJTdHlsZVNoZWV0Jik+JikgY29uc3Qg
b3ZlcnJpZGU7CisjaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKKyAgICBjb25zdCBV
c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yTWFwJiB1c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlw
dG9ycygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3Jp
cHRvcnM7IH0KKyNlbmRpZgorI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisgICAgQ29u
dGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCYgdXNlckNvbnRlbnRFeHRl
bnNpb25CYWNrZW5kKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9jb250ZW50RXh0ZW5zaW9uQmFja2Vu
ZDsgfQorI2VuZGlmCiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VXNlclNjcmlwdE1hcD4gbV91c2Vy
U2NyaXB0czsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VXNlclN0eWxlU2hlZXRNYXA+IG1fdXNlclN0
eWxlU2hlZXRzOworICAgIFVzZXJTY3JpcHRNYXAgbV91c2VyU2NyaXB0czsKKyAgICBVc2VyU3R5
bGVTaGVldE1hcCBtX3VzZXJTdHlsZVNoZWV0czsKICNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hB
TkRMRVJTKQotICAgIHN0ZDo6dW5pcXVlX3B0cjxVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9y
TWFwPiBtX3VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzOworICAgIFVzZXJNZXNzYWdlSGFu
ZGxlckRlc2NyaXB0b3JNYXAgbV91c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yczsKICNlbmRp
ZgogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAgc3RkOjp1bmlxdWVfcHRyPENv
bnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ+IG1fY29udGVudEV4dGVu
c2lvbkJhY2tlbmQ7CisgICAgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFj
a2VuZCBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kOwogI2VuZGlmCiB9OwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50UHJvdmlkZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnRQcm92aWRlci5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50UHJvdmlkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlVzZXJDb250ZW50UHJvdmlkZXIuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJNYWluRnJhbWUuaCIKKyNp
bmNsdWRlICJQYWdlLmgiCisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorI2luY2x1
ZGUgIkNvbnRlbnRFeHRlbnNpb25Db21waWxlci5oIgorI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNp
b25zQmFja2VuZC5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVXNlckNvbnRl
bnRQcm92aWRlcjo6VXNlckNvbnRlbnRQcm92aWRlcigpCit7Cit9CisKK1VzZXJDb250ZW50UHJv
dmlkZXI6On5Vc2VyQ29udGVudFByb3ZpZGVyKCkKK3sKKyAgICBBU1NFUlQobV9wYWdlcy5pc0Vt
cHR5KCkpOworfQorCit2b2lkIFVzZXJDb250ZW50UHJvdmlkZXI6OmFkZFBhZ2UoUGFnZSYgcGFn
ZSkKK3sKKyAgICBBU1NFUlQoIW1fcGFnZXMuY29udGFpbnMoJnBhZ2UpKTsKKworICAgIG1fcGFn
ZXMuYWRkKCZwYWdlKTsKK30KKwordm9pZCBVc2VyQ29udGVudFByb3ZpZGVyOjpyZW1vdmVQYWdl
KFBhZ2UmIHBhZ2UpCit7CisgICAgQVNTRVJUKG1fcGFnZXMuY29udGFpbnMoJnBhZ2UpKTsKKwor
ICAgIG1fcGFnZXMucmVtb3ZlKCZwYWdlKTsKK30KKwordm9pZCBVc2VyQ29udGVudFByb3ZpZGVy
OjppbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lc0luQWxsUGFnZXMo
KQoreworICAgIGZvciAoYXV0byYgcGFnZSA6IG1fcGFnZXMpCisgICAgICAgIHBhZ2UtPmludmFs
aWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZUluQWxsRnJhbWVzKCk7Cit9CisKKyNpZiBFTkFC
TEUoQ09OVEVOVF9FWFRFTlNJT05TKQorc3RhdGljIGJvb2wgY29udGVudEV4dGVuc2lvbnNFbmFi
bGVkKGNvbnN0IERvY3VtZW50TG9hZGVyJiBkb2N1bWVudExvYWRlcikKK3sKKyAgICBpZiAoYXV0
byBmcmFtZSA9IGRvY3VtZW50TG9hZGVyLmZyYW1lKCkpIHsKKyAgICAgICAgaWYgKGZyYW1lLT5p
c01haW5GcmFtZSgpKQorICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50TG9hZGVyLnVzZXJDb250
ZW50RXh0ZW5zaW9uc0VuYWJsZWQoKTsKKyAgICAgICAgaWYgKGF1dG8gbWFpbkRvY3VtZW50TG9h
ZGVyID0gZnJhbWUtPm1haW5GcmFtZSgpLmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkpCisgICAg
ICAgICAgICByZXR1cm4gbWFpbkRvY3VtZW50TG9hZGVyLT51c2VyQ29udGVudEV4dGVuc2lvbnNF
bmFibGVkKCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisgICAgCitDb250ZW50RXh0
ZW5zaW9uczo6QmxvY2tlZFN0YXR1cyBVc2VyQ29udGVudFByb3ZpZGVyOjpwcm9jZXNzQ29udGVu
dEV4dGVuc2lvblJ1bGVzRm9yTG9hZChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNl
VHlwZSByZXNvdXJjZVR5cGUsIERvY3VtZW50TG9hZGVyJiBpbml0aWF0aW5nRG9jdW1lbnRMb2Fk
ZXIpCit7CisgICAgaWYgKCFjb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQoaW5pdGlhdGluZ0RvY3Vt
ZW50TG9hZGVyKSkKKyAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3Rh
dHVzOjpOb3RCbG9ja2VkOworCisgICAgcmV0dXJuIHVzZXJDb250ZW50RXh0ZW5zaW9uQmFja2Vu
ZCgpLnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKHJlcXVlc3QsIHJlc291cmNl
VHlwZSwgaW5pdGlhdGluZ0RvY3VtZW50TG9hZGVyKTsKK30KKworVmVjdG9yPENvbnRlbnRFeHRl
bnNpb25zOjpBY3Rpb24+IFVzZXJDb250ZW50UHJvdmlkZXI6OmFjdGlvbnNGb3JSZXNvdXJjZUxv
YWQoY29uc3QgUmVzb3VyY2VMb2FkSW5mbyYgcmVzb3VyY2VMb2FkSW5mbywgRG9jdW1lbnRMb2Fk
ZXImIGluaXRpYXRpbmdEb2N1bWVudExvYWRlcikKK3sKKyAgICBpZiAoIWNvbnRlbnRFeHRlbnNp
b25zRW5hYmxlZChpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIpKQorICAgICAgICByZXR1cm4geyB9
OworCisgICAgcmV0dXJuIHVzZXJDb250ZW50RXh0ZW5zaW9uQmFja2VuZCgpLmFjdGlvbnNGb3JS
ZXNvdXJjZUxvYWQocmVzb3VyY2VMb2FkSW5mbyk7Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudFByb3ZpZGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudFByb3ZpZGVy
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50UHJvdmlk
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBVc2VyQ29udGVudFByb3ZpZGVyX2gKKyNkZWZpbmUgVXNlckNvbnRlbnRQcm92aWRlcl9oCisK
KyNpbmNsdWRlICJVc2VyU2NyaXB0VHlwZXMuaCIKKyNpbmNsdWRlICJVc2VyU3R5bGVTaGVldFR5
cGVzLmgiCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgor
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKwor
I2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCisjaW5jbHVkZSAiVXNlck1lc3NhZ2VI
YW5kbGVyRGVzY3JpcHRvclR5cGVzLmgiCisjZW5kaWYKKworI2lmIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCisjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbkFjdGlvbnMuaCIKKyNpbmNsdWRl
ICJDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIERvY3VtZW50TG9hZGVyOworY2xhc3MgUGFnZTsKK2NsYXNzIFJlc291cmNl
UmVxdWVzdDsKK2NsYXNzIFVSTDsKKworZW51bSBjbGFzcyBSZXNvdXJjZVR5cGUgOiB1aW50MTZf
dDsKKworc3RydWN0IFJlc291cmNlTG9hZEluZm87CisKK25hbWVzcGFjZSBDb250ZW50RXh0ZW5z
aW9ucyB7CitjbGFzcyBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ7CitzdHJ1Y3QgQWN0aW9uOwor
fQorCitjbGFzcyBVc2VyQ29udGVudFByb3ZpZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8VXNlckNv
bnRlbnRQcm92aWRlcj4geworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIFVzZXJDb250ZW50
UHJvdmlkZXIoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5Vc2VyQ29udGVudFByb3Zp
ZGVyKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZm9yRWFjaFVzZXJTY3JpcHQoY29uc3Qgc3RkOjpm
dW5jdGlvbjx2b2lkKERPTVdyYXBwZXJXb3JsZCYsIGNvbnN0IFVzZXJTY3JpcHQmKT4mKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZvckVhY2hVc2VyU3R5bGVTaGVldChjb25zdCBzdGQ6
OmZ1bmN0aW9uPHZvaWQoY29uc3QgVXNlclN0eWxlU2hlZXQmKT4mKSBjb25zdCA9IDA7CisKKyNp
ZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQorICAgIHZpcnR1YWwgY29uc3QgVXNlck1l
c3NhZ2VIYW5kbGVyRGVzY3JpcHRvck1hcCYgdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMo
KSBjb25zdCA9IDA7CisjZW5kaWYKKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisg
ICAgdmlydHVhbCBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kJiB1
c2VyQ29udGVudEV4dGVuc2lvbkJhY2tlbmQoKSA9IDA7CisjZW5kaWYKKworICAgIHZvaWQgYWRk
UGFnZShQYWdlJik7CisgICAgdm9pZCByZW1vdmVQYWdlKFBhZ2UmKTsKKworCisgICAgLy8gRklY
TUU6IFRoZXNlIGRvbid0IHJlYWxseSBiZWxvbmcgaGVyZS4gVGhleSBzaG91bGQgcHJvYmFibHkg
YnVuZGxlZCB1cCBpbiB0aGUgQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kCisgICAgLy8gd2hpY2gg
c2hvdWxkIGFsd2F5cyBleGlzdC4KKyAgICBDb250ZW50RXh0ZW5zaW9uczo6QmxvY2tlZFN0YXR1
cyBwcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9yTG9hZChSZXNvdXJjZVJlcXVlc3QmLCBS
ZXNvdXJjZVR5cGUsIERvY3VtZW50TG9hZGVyJiBpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIpOwor
ICAgIFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uPiBhY3Rpb25zRm9yUmVzb3VyY2VM
b2FkKGNvbnN0IFJlc291cmNlTG9hZEluZm8mLCBEb2N1bWVudExvYWRlciYgaW5pdGlhdGluZ0Rv
Y3VtZW50TG9hZGVyKTsKKworcHJvdGVjdGVkOgorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW52
YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlSW5BbGxGcmFtZXNJbkFsbFBhZ2VzKCk7CisK
K3ByaXZhdGU6CisgICAgSGFzaFNldDxQYWdlKj4gbV9wYWdlczsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVzZXJDb250ZW50UHJvdmlkZXJfaApJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9Vc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yLmgJ
KHJldmlzaW9uIDE5NzkzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlck1lc3NhZ2VIYW5k
bGVyRGVzY3JpcHRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw4ICs1NCw4IEBAIHB1YmxpYzoK
ICAgICB9CiAgICAgV0VCQ09SRV9FWFBPUlQgflVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3Io
KTsKIAotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSgpOwotICAgIERPTVdyYXBwZXJXb3Js
ZCYgd29ybGQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUo
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBET01XcmFwcGVyV29ybGQmIHdvcmxkKCk7CiAKICAgICBD
bGllbnQqIGNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9CiAgICAgdm9pZCBpbnZh
bGlkYXRlQ2xpZW50KCkgeyBtX2NsaWVudCA9IG51bGxwdHI7IH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlLmNwcAkocmV2
aXNpb24gMTk3OTM5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyTWVzc2FnZUhhbmRsZXJz
TmFtZXNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTUgKzUzLDkgQEAgVXNlck1lc3Nh
Z2VIYW5kbGVyKiBVc2VyTWVzc2FnZUhhbmRsZXJzTgogICAgIGlmICghcGFnZSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgCi0gICAgY29uc3QgYXV0byogdXNlckNvbnRlbnRDb250cm9s
bGVyID0gcGFnZS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCk7Ci0gICAgaWYgKCF1c2VyQ29udGVu
dENvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgY29uc3QgYXV0byog
dXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMgPSB1c2VyQ29udGVudENvbnRyb2xsZXItPnVz
ZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzKCk7Ci0gICAgaWYgKCF1c2VyTWVzc2FnZUhhbmRs
ZXJEZXNjcmlwdG9ycykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZWZQdHI8VXNl
ck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcj4gZGVzY3JpcHRvciA9IHVzZXJNZXNzYWdlSGFuZGxl
ckRlc2NyaXB0b3JzLT5nZXQoc3RkOjptYWtlX3BhaXIobmFtZSwgJndvcmxkKSk7CisgICAgYXV0
byYgZGVzY3JpcHRvcnMgPSBwYWdlLT51c2VyQ29udGVudFByb3ZpZGVyKCkudXNlck1lc3NhZ2VI
YW5kbGVyRGVzY3JpcHRvcnMoKTsKKyAgICAKKyAgICBSZWZQdHI8VXNlck1lc3NhZ2VIYW5kbGVy
RGVzY3JpcHRvcj4gZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JzLmdldChzdGQ6Om1ha2VfcGFpcihu
YW1lLCAmd29ybGQpKTsKICAgICBpZiAoIWRlc2NyaXB0b3IpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCkBAIC03MCw3ICs2NCw3IEBAIFVzZXJNZXNzYWdlSGFuZGxlciogVXNlck1lc3NhZ2VI
YW5kbGVyc04KICAgICAgICAgICAgIHJldHVybiAmaGFuZGxlci5nZXQoKTsKICAgICB9CiAKLSAg
ICBhdXRvIGxpdmVIYW5kbGVycyA9IHVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzLT52YWx1
ZXMoKTsKKyAgICBhdXRvIGxpdmVIYW5kbGVycyA9IGRlc2NyaXB0b3JzLnZhbHVlcygpOwogICAg
IG1fbWVzc2FnZUhhbmRsZXJzLnJlbW92ZUFsbE1hdGNoaW5nKFtsaXZlSGFuZGxlcnNdKGNvbnN0
IFJlZjxVc2VyTWVzc2FnZUhhbmRsZXI+JiBoYW5kbGVyKSB7CiAgICAgICAgIGZvciAoY29uc3Qg
YXV0byYgbGl2ZUhhbmRsZXIgOiBsaXZlSGFuZGxlcnMpIHsKICAgICAgICAgICAgIGlmIChsaXZl
SGFuZGxlci5nZXQoKSA9PSAmaGFuZGxlci0+ZGVzY3JpcHRvcigpKQpJbmRleDogU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwko
cmV2aXNpb24gMTk3OTM5KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTE2IEBACisyMDE2LTAzLTA4ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgQWRkIGEgYmFzZVVSTCBwYXJhbWV0ZXIgdG8gX1dLVXNlclN0eWxl
U2hlZXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
NTIxOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0g
TW92ZXMgdG8gYSBtb2RlbCBmb3IgdXNlciBjb250ZW50IHdoZXJlIGluc3RlYWQgb2YgdXNpbmcg
YSBXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXIKKyAgICAgICAgICBvYmplY3QsIHdlIGlt
cGxlbWVudCB0aGUgbmV3IFdlYkNvcmU6OlVzZXJDb250ZW50UHJvdmlkZXIgaW50ZXJmYWNlIChv
biB0aGUgZXhpc3RpbmcgCisgICAgICAgICAgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyIG9iamVj
dCkuCisgICAgICAgIC0gVXNlcyB0aGlzIHRvIG1haW50YWluIG1hcHMgb2YgVXNlclN0eWxlc1No
ZWV0cyBhbmQgVXNlclNjcmlwdHMgYWxvbmcgd2l0aCB0aGVpciBpZGVudGlmaWVycywKKyAgICAg
ICAgICBmcmVlaW5nIHVwIHRoZSBVUkwsIHdoaWNoIGhhZCBiZWVuIGFjdGluZyBhcyB0aGUgaWRl
bnRpZmllciwgdG8gYmUgdXNlZCBhcyB0aGUgYmFzZVVSTCB3aGljaAorICAgICAgICAgIHdhcyB3
aGF0IGl0IHdhcyBpbnRlbmRlZCBmb3IuCisgICAgICAgIC0gQWRkcyBhIGJhc2VVUkwgcHJvcGVy
dHkgdG8gX1dLVXNlclN0eWxlU2hlZXQuCisKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgIEFkZCBuZXcgZmlsZXMuCisKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdC9tZXNzYWdlcy5weToKKyAgICAgICAgKGhlYWRlcnNfZm9yX3R5cGUpOgorICAg
ICAgICBBZGQgc3VwcG9ydCBmb3Igc2VuZGluZyBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRh
VHlwZXMuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5
cGVzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJTY3JpcHREYXRhOjplbmNv
ZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyU2NyaXB0RGF0YTo6ZGVjb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVXNlclN0eWxlU2hlZXREYXRhOjplbmNvZGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJVc2VyU3R5bGVTaGVldERhdGE6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dl
YlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oOiBBZGRlZC4KKyAgICAgICAgQWRkIGhl
bHBlciB0eXBlcyBmb3Igc2VuZGluZyB1c2VyIGNvbnRlbnQgb3ZlciBJUEMuCisKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0FQSVVzZXJTY3JpcHQuY3BwOgorICAgICAgICAoQVBJOjpVc2VyU2Ny
aXB0OjpnZW5lcmF0ZVVuaXF1ZVVSTCk6CisgICAgICAgIChBUEk6OlVzZXJTY3JpcHQ6OlVzZXJT
Y3JpcHQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlclNjcmlwdC5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlclN0eWxlU2hlZXQuY3BwOgorICAgICAgICAoQVBJOjpV
c2VyU3R5bGVTaGVldDo6Z2VuZXJhdGVVbmlxdWVVUkwpOgorICAgICAgICAoQVBJOjpVc2VyU3R5
bGVTaGVldDo6VXNlclN0eWxlU2hlZXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNl
clN0eWxlU2hlZXQuaDoKKyAgICAgICAgQWRkIGlkZW50aWZpZXJzIGZvciB0cmFja2luZyBhY3Jv
c3MgcHJvY2Vzc2VzLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyU3R5
bGVTaGVldC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlclN0eWxlU2hl
ZXQubW06CisgICAgICAgICgtW19XS1VzZXJTdHlsZVNoZWV0IGluaXRXaXRoU291cmNlOmZvck1h
aW5GcmFtZU9ubHk6bGVnYWN5V2hpdGVsaXN0OmxlZ2FjeUJsYWNrbGlzdDpiYXNlVVJMOnVzZXJD
b250ZW50V29ybGQ6XSk6CisgICAgICAgICgtW19XS1VzZXJTdHlsZVNoZWV0IGJhc2VVUkxdKToK
KyAgICAgICAgQWRkIG5ldyBpbml0aWFsaXplciB3aGljaCB0YWtlcyBhIGJhc2VVUkwgYXMgd2Vs
bCBhcyBhbiBhY2Nlc3NvciBmb3IgdGhlIGJhc2VVUkwuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
VXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6YWRkUHJvY2Vzcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjphZGRVc2VyU2NyaXB0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92
ZVVzZXJTY3JpcHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQ
cm94eTo6YWRkVXNlclN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXJQcm94eTo6cmVtb3ZlVXNlclN0eWxlU2hlZXQpOgorICAgICAgICBQYXNzIGlk
ZW50aWZpZXJzIGFzIHdlbGwgYXMgdXNlciBjb250ZW50LgorCisgICAgICAgICogV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oklu
amVjdGVkQnVuZGxlOjphZGRVc2VyU2NyaXB0KToKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRC
dW5kbGU6OmFkZFVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAgTW92ZSB1c2VyIGNvbnRlbnQgaW4g
dmlhIG1vdmUgc2VtYW50aWNzIHJhdGhlciB0aGFuIHVzaW5nIGEgdW5pcXVlX3B0ci4KKworICAg
ICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6cmVtb3ZlVXNlclNjcmlwdCk6CisgICAgICAg
IChXZWJLaXQ6OkluamVjdGVkQnVuZGxlOjpyZW1vdmVVc2VyU3R5bGVTaGVldCk6CisgICAgICAg
IChXZWJLaXQ6OkluamVjdGVkQnVuZGxlOjpyZW1vdmVVc2VyU2NyaXB0cyk6CisgICAgICAgIChX
ZWJLaXQ6OkluamVjdGVkQnVuZGxlOjpyZW1vdmVVc2VyU3R5bGVTaGVldHMpOgorICAgICAgICAo
V2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6cmVtb3ZlQWxsVXNlckNvbnRlbnQpOgorICAgICAgICBV
cGRhdGUgZm9yIG5ldyBmdW5jdGlvbiBzaWduYXR1cmVzLgorCisgICAgICAgICogV2ViUHJvY2Vz
cy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcik6
CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6fldlYlVzZXJDb250
ZW50Q29udHJvbGxlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxl
cjo6YWRkVXNlckNvbnRlbnRXb3JsZHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXI6OnJlbW92ZVVzZXJDb250ZW50V29ybGRzKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0cyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlwdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxsVXNlclNjcmlwdHMp
OgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTdHls
ZVNoZWV0cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVt
b3ZlVXNlclN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRy
b2xsZXI6OnJlbW92ZUFsbFVzZXJTdHlsZVNoZWV0cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlVz
ZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVycyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlwdE1l
c3NhZ2VIYW5kbGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVy
OjphZGRVc2VyQ29udGVudEV4dGVuc2lvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9uKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVBbGxVc2VyQ29udGVudEV4dGVu
c2lvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVz
ZXJTY3JpcHRJbnRlcm5hbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJv
bGxlcjo6YWRkVXNlclNjcmlwdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlwdFdpdGhVUkwpOgorICAgICAgICAoV2ViS2l0OjpXZWJV
c2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTY3JpcHRJbnRlcm5hbCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlwdHMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNo
ZWV0SW50ZXJuYWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6
OmFkZFVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250
cm9sbGVyOjpyZW1vdmVVc2VyU3R5bGVTaGVldFdpdGhVUkwpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNoZWV0SW50ZXJuYWwpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdHls
ZVNoZWV0cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVt
b3ZlQWxsVXNlckNvbnRlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRy
b2xsZXI6OmZvckVhY2hVc2VyU2NyaXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRl
bnRDb250cm9sbGVyOjpmb3JFYWNoVXNlclN0eWxlU2hlZXQpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLmg6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIubWVzc2FnZXMuaW46
CisgICAgICAgIENvbnZlcnQgdG8gaW5oZXJpdGluZyBmcm9tIFVzZXJDb250ZW50UHJvdmlkZXIs
IHJhdGhlciB0aGFuIGNvbnRhaW5pbmcgYSBVc2VyQ29udGVudENvbnRyb2xsZXIuCisgICAgICAg
IFRoaXMgbWVhbnMgYWRkaW5nIHRoZSBzdG9yYWdlIGZvciB0aGUgdXNlciBjb250ZW50LCB3aGlj
aCBoYXMgYmVlbiBzaW1wbGlmaWVkIHRvIGF2b2lkIHVzaW5nCisgICAgICAgIHVuaXF1ZV9wdHJz
LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlOjphZGRVc2VyU2NyaXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6YWRkVXNlclN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpyZW1vdmVB
bGxVc2VyQ29udGVudCk6CisgICAgICAgIFVwZGF0ZSB0byBjYWxsIHRoZSBXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXIsIHJhdGhlciB0aGFuIGdvaW5nIHRvIHRoZSBVc2VyQ29udGVudENvbnRyb2xs
ZXIsIHdoaWNoCisgICAgICAgIG5vIGxvbmdlciBleGlzdHMuCisKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlR3JvdXBQcm94eTo6dXNlckNvbnRlbnRDb250cm9sbGVyKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuaDoKKyAgICAgICAgUmV0dXJuIHRoZSBXZWJV
c2VyQ29udGVudENvbnRyb2xsZXIgcmF0aGVyIHRoYW4gb2xkIFVzZXJDb250ZW50Q29udHJvbGxl
ci4KKwogMjAxNi0wMy0xMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAg
ICAgIFNwZWN1bGF0aXZlIHJldmFsaWRhdGlvbiByZXF1ZXN0cyBkbyBub3QgaGF2ZSB0aGVpciAn
Zmlyc3QgcGFydHkgZm9yIGNvb2tpZXMnIFVSTCBzZXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1Nj
cmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1Nj
cmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CShyZXZpc2lvbiAxOTc5MzkpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQkod29ya2luZyBjb3B5KQpAQCAtMzc4LDYg
KzM3OCw4IEBAIGRlZiBoZWFkZXJzX2Zvcl90eXBlKHR5cGUpOgogICAgICAgICAnV2ViS2l0OjpX
ZWJUb3VjaEV2ZW50JzogWyciV2ViRXZlbnQuaCInXSwKICAgICAgICAgJ1dlYktpdDo6V2ViV2hl
ZWxFdmVudCc6IFsnIldlYkV2ZW50LmgiJ10sCiAgICAgICAgICdXZWJLaXQ6OldlYlNjcmlwdE1l
c3NhZ2VIYW5kbGVySGFuZGxlJzogWyciV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIuaCInXSwKKyAg
ICAgICAgJ3N0cnVjdCBXZWJLaXQ6OldlYlVzZXJTY3JpcHREYXRhJzogWyciV2ViVXNlckNvbnRl
bnRDb250cm9sbGVyRGF0YVR5cGVzLmgiJ10sCisgICAgICAgICdzdHJ1Y3QgV2ViS2l0OjpXZWJV
c2VyU3R5bGVTaGVldERhdGEnOiBbJyJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMu
aCInXSwKICAgICAgICAgJ3N0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQnOiBb
JzxjaHJvbm8+J10sCiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJE
YXRhVHlwZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
RGF0YVR5cGVzLmgiCisKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgV2ViVXNlclNjcmlwdERhdGE6OmVuY29kZShJUEM6OkFy
Z3VtZW50RW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IGlkZW50aWZp
ZXI7CisgICAgZW5jb2RlciA8PCB3b3JsZElkZW50aWZpZXI7CisgICAgZW5jb2RlciA8PCB1c2Vy
U2NyaXB0OworfQorCitib29sIFdlYlVzZXJTY3JpcHREYXRhOjpkZWNvZGUoSVBDOjpBcmd1bWVu
dERlY29kZXImIGRlY29kZXIsIFdlYlVzZXJTY3JpcHREYXRhJiBkYXRhKQoreworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoZGF0YS5pZGVudGlmaWVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGF0YS53b3JsZElkZW50aWZpZXIpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShkYXRhLnVzZXJTY3JpcHQpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViVXNl
clN0eWxlU2hlZXREYXRhOjplbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIpIGNv
bnN0Cit7CisgICAgZW5jb2RlciA8PCBpZGVudGlmaWVyOworICAgIGVuY29kZXIgPDwgd29ybGRJ
ZGVudGlmaWVyOworICAgIGVuY29kZXIgPDwgdXNlclN0eWxlU2hlZXQ7Cit9CisKK2Jvb2wgV2Vi
VXNlclN0eWxlU2hlZXREYXRhOjpkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29kZXIs
IFdlYlVzZXJTdHlsZVNoZWV0RGF0YSYgZGF0YSkKK3sKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGRhdGEuaWRlbnRpZmllcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKGRhdGEud29ybGRJZGVudGlmaWVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGF0YS51c2VyU3R5bGVTaGVldCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0
YVR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlVzZXJDb250
ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlVzZXJDb250ZW50Q29u
dHJvbGxlckRhdGFUeXBlc19oCisjZGVmaW5lIFdlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFU
eXBlc19oCisKKyNpbmNsdWRlIDxXZWJDb3JlL1VzZXJTY3JpcHQuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1VzZXJTdHlsZVNoZWV0Lmg+CisKK25hbWVzcGFjZSBJUEMgeworY2xhc3MgQXJndW1lbnRE
ZWNvZGVyOworY2xhc3MgQXJndW1lbnRFbmNvZGVyOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsK
Kworc3RydWN0IFdlYlVzZXJTY3JpcHREYXRhIHsKKyAgICB2b2lkIGVuY29kZShJUEM6OkFyZ3Vt
ZW50RW5jb2RlciYpIGNvbnN0OworICAgIHN0YXRpYyBib29sIGRlY29kZShJUEM6OkFyZ3VtZW50
RGVjb2RlciYsIFdlYlVzZXJTY3JpcHREYXRhJik7CisKKyAgICB1aW50NjRfdCBpZGVudGlmaWVy
OworICAgIHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllcjsKKyAgICBXZWJDb3JlOjpVc2VyU2NyaXB0
IHVzZXJTY3JpcHQ7Cit9OworCitzdHJ1Y3QgV2ViVXNlclN0eWxlU2hlZXREYXRhIHsKKyAgICB2
b2lkIGVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0OworICAgIHN0YXRpYyBib29s
IGRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYsIFdlYlVzZXJTdHlsZVNoZWV0RGF0YSYpOwor
CisgICAgdWludDY0X3QgaWRlbnRpZmllcjsKKyAgICB1aW50NjRfdCB3b3JsZElkZW50aWZpZXI7
CisgICAgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQgdXNlclN0eWxlU2hlZXQ7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlVzZXJDb250ZW50Q29udHJvbGxlckRh
dGFUeXBlc19oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJTY3Jp
cHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNl
clNjcmlwdC5jcHAJKHJldmlzaW9uIDE5NzkzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQVBJVXNlclNjcmlwdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDExICszOSwyMCBA
QCBzdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVJZGVudGlmaWVyKCkKIAogV2ViQ29yZTo6VVJMIFVz
ZXJTY3JpcHQ6OmdlbmVyYXRlVW5pcXVlVVJMKCkKIHsKKyAgICBzdGF0aWMgdWludDY0X3QgaWRl
bnRpZmllcjsKKwogICAgIFN0cmluZ0J1aWxkZXIgdXJsU3RyaW5nQnVpbGRlcjsKICAgICB1cmxT
dHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoInVzZXItc2NyaXB0OiIpOwotICAgIHVybFN0cmlu
Z0J1aWxkZXIuYXBwZW5kTnVtYmVyKGdlbmVyYXRlSWRlbnRpZmllcigpKTsKKyAgICB1cmxTdHJp
bmdCdWlsZGVyLmFwcGVuZE51bWJlcigrK2lkZW50aWZpZXIpOwogICAgIHJldHVybiB7IHsgfSwg
dXJsU3RyaW5nQnVpbGRlci50b1N0cmluZygpIH07CiB9CiAKK1VzZXJTY3JpcHQ6OlVzZXJTY3Jp
cHQoV2ViQ29yZTo6VXNlclNjcmlwdCB1c2VyU2NyaXB0LCBBUEk6OlVzZXJDb250ZW50V29ybGQm
IHdvcmxkKQorICAgIDogbV9pZGVudGlmaWVyKGdlbmVyYXRlSWRlbnRpZmllcigpKQorICAgICwg
bV91c2VyU2NyaXB0KHVzZXJTY3JpcHQpCisgICAgLCBtX3dvcmxkKHdvcmxkKQoreworfQorCiAK
IH0gLy8gbmFtZXNwYWNlIEFQSQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9B
UElVc2VyU2NyaXB0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9BUElVc2VyU2NyaXB0LmgJKHJldmlzaW9uIDE5NzkzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQVBJVXNlclNjcmlwdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMSArNDEs
OSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVzZXJTY3JpcHQoV1RG
TW92ZSh1c2VyU2NyaXB0KSwgd29ybGQpKTsKICAgICB9CiAKLSAgICBVc2VyU2NyaXB0KFdlYkNv
cmU6OlVzZXJTY3JpcHQgdXNlclNjcmlwdCwgQVBJOjpVc2VyQ29udGVudFdvcmxkJiB3b3JsZCkK
LSAgICAgICAgOiBtX3VzZXJTY3JpcHQodXNlclNjcmlwdCkKLSAgICAgICAgLCBtX3dvcmxkKHdv
cmxkKQotICAgIHsKLSAgICB9CisgICAgVXNlclNjcmlwdChXZWJDb3JlOjpVc2VyU2NyaXB0LCBB
UEk6OlVzZXJDb250ZW50V29ybGQmKTsKKworICAgIHVpbnQ2NF90IGlkZW50aWZpZXIoKSBjb25z
dCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KIAogICAgIGNvbnN0IFdlYkNvcmU6OlVzZXJTY3Jp
cHQmIHVzZXJTY3JpcHQoKSBjb25zdCB7IHJldHVybiBtX3VzZXJTY3JpcHQ7IH0KICAgICAKQEAg
LTUzLDYgKzUxLDcgQEAgcHVibGljOgogICAgIGNvbnN0IFVzZXJDb250ZW50V29ybGQmIHVzZXJD
b250ZW50V29ybGQoKSBjb25zdCB7IHJldHVybiBtX3dvcmxkOyB9CiAgICAgCiBwcml2YXRlOgor
ICAgIHVpbnQ2NF90IG1faWRlbnRpZmllcjsKICAgICBXZWJDb3JlOjpVc2VyU2NyaXB0IG1fdXNl
clNjcmlwdDsKICAgICBSZWY8VXNlckNvbnRlbnRXb3JsZD4gbV93b3JsZDsKIH07CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJTdHlsZVNoZWV0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJTdHlsZVNoZWV0LmNw
cAkocmV2aXNpb24gMTk3OTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElV
c2VyU3R5bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDExICszOSwxOSBAQCBzdGF0
aWMgdWludDY0X3QgZ2VuZXJhdGVJZGVudGlmaWVyKCkKIAogV2ViQ29yZTo6VVJMIFVzZXJTdHls
ZVNoZWV0OjpnZW5lcmF0ZVVuaXF1ZVVSTCgpCiB7CisgICAgc3RhdGljIHVpbnQ2NF90IGlkZW50
aWZpZXI7CisKICAgICBTdHJpbmdCdWlsZGVyIHVybFN0cmluZ0J1aWxkZXI7CiAgICAgdXJsU3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJ1c2VyLXN0eWxlLXNoZWV0OiIpOwotICAgIHVybFN0
cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKGdlbmVyYXRlSWRlbnRpZmllcigpKTsKKyAgICB1cmxT
dHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcigrK2lkZW50aWZpZXIpOwogICAgIHJldHVybiB7IHsg
fSwgdXJsU3RyaW5nQnVpbGRlci50b1N0cmluZygpIH07CiB9CiAKK1VzZXJTdHlsZVNoZWV0OjpV
c2VyU3R5bGVTaGVldChXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCB1c2VyU3R5bGVTaGVldCwgQVBJ
OjpVc2VyQ29udGVudFdvcmxkJiB3b3JsZCkKKyAgICA6IG1faWRlbnRpZmllcihnZW5lcmF0ZUlk
ZW50aWZpZXIoKSkKKyAgICAsIG1fdXNlclN0eWxlU2hlZXQodXNlclN0eWxlU2hlZXQpCisgICAg
LCBtX3dvcmxkKHdvcmxkKQoreworfQogCiB9IC8vIG5hbWVzcGFjZSBBUEkKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlclN0eWxlU2hlZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJTdHlsZVNoZWV0LmgJKHJldmlz
aW9uIDE5NzkzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlclN0eWxl
U2hlZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTEgKzQxLDkgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVc2VyU3R5bGVTaGVldChXVEZNb3ZlKHVzZXJTdHlsZVNo
ZWV0KSwgd29ybGQpKTsKICAgICB9CiAKLSAgICBVc2VyU3R5bGVTaGVldChXZWJDb3JlOjpVc2Vy
U3R5bGVTaGVldCB1c2VyU3R5bGVTaGVldCwgQVBJOjpVc2VyQ29udGVudFdvcmxkJiB3b3JsZCkK
LSAgICAgICAgOiBtX3VzZXJTdHlsZVNoZWV0KHVzZXJTdHlsZVNoZWV0KQotICAgICAgICAsIG1f
d29ybGQod29ybGQpCi0gICAgewotICAgIH0KKyAgICBVc2VyU3R5bGVTaGVldChXZWJDb3JlOjpV
c2VyU3R5bGVTaGVldCwgQVBJOjpVc2VyQ29udGVudFdvcmxkJik7CisKKyAgICB1aW50NjRfdCBp
ZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CiAKICAgICBjb25zdCBX
ZWJDb3JlOjpVc2VyU3R5bGVTaGVldCYgdXNlclN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBt
X3VzZXJTdHlsZVNoZWV0OyB9CiAKQEAgLTUzLDYgKzUxLDcgQEAgcHVibGljOgogICAgIGNvbnN0
IFVzZXJDb250ZW50V29ybGQmIHVzZXJDb250ZW50V29ybGQoKSBjb25zdCB7IHJldHVybiBtX3dv
cmxkOyB9CiAKIHByaXZhdGU6CisgICAgdWludDY0X3QgbV9pZGVudGlmaWVyOwogICAgIFdlYkNv
cmU6OlVzZXJTdHlsZVNoZWV0IG1fdXNlclN0eWxlU2hlZXQ7CiAgICAgUmVmPFVzZXJDb250ZW50
V29ybGQ+IG1fd29ybGQ7CiB9OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9fV0tVc2VyU3R5bGVTaGVldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlclN0eWxlU2hlZXQuaAkocmV2aXNpb24gMTk3OTM5KQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyU3R5bGVTaGVldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMSArMzgsMTMgQEAgV0tfQ0xBU1NfQVZBSUxBQkxFKFdL
X01BQ19UQkEsIFdLX0lPU19UQgogCiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNv
cHkpIE5TU3RyaW5nICpzb3VyY2U7CiAKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwg
Y29weSkgTlNVUkwgKmJhc2VVUkw7CisKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwg
Z2V0dGVyPWlzRm9yTWFpbkZyYW1lT25seSkgQk9PTCBmb3JNYWluRnJhbWVPbmx5OwogCiAtIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGZvck1haW5GcmFt
ZU9ubHk6KEJPT0wpZm9yTWFpbkZyYW1lT25seTsKLQogLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
U291cmNlOihOU1N0cmluZyAqKXNvdXJjZSBmb3JNYWluRnJhbWVPbmx5OihCT09MKWZvck1haW5G
cmFtZU9ubHkgbGVnYWN5V2hpdGVsaXN0OihXS19BUlJBWShOU1N0cmluZyAqKSAqKWxlZ2FjeVdo
aXRlbGlzdCBsZWdhY3lCbGFja2xpc3Q6KFdLX0FSUkFZKE5TU3RyaW5nICopICopbGVnYWN5Qmxh
Y2tsaXN0IHVzZXJDb250ZW50V29ybGQ6KF9XS1VzZXJDb250ZW50V29ybGQgKil1c2VyQ29udGVu
dFdvcmxkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU291cmNlOihOU1N0cmluZyAqKXNvdXJj
ZSBmb3JNYWluRnJhbWVPbmx5OihCT09MKWZvck1haW5GcmFtZU9ubHkgbGVnYWN5V2hpdGVsaXN0
OihXS19BUlJBWShOU1N0cmluZyAqKSAqKWxlZ2FjeVdoaXRlbGlzdCBsZWdhY3lCbGFja2xpc3Q6
KFdLX0FSUkFZKE5TU3RyaW5nICopICopbGVnYWN5QmxhY2tsaXN0IGJhc2VVUkw6KE5TVVJMICop
YmFzZVVSTCB1c2VyQ29udGVudFdvcmxkOihfV0tVc2VyQ29udGVudFdvcmxkICopdXNlckNvbnRl
bnRXb3JsZDsKIAogQGVuZAogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Nv
Y29hL19XS1VzZXJTdHlsZVNoZWV0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlclN0eWxlU2hlZXQubW0JKHJldmlzaW9uIDE5NzkzOSkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlclN0eWxlU2hlZXQu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2ltcG9ydCAiQVBJQXJyYXku
aCIKICNpbXBvcnQgIldLTlNBcnJheS5oIgorI2ltcG9ydCAiV0tOU1VSTEV4dHJhcy5oIgogI2lt
cG9ydCAiV2ViS2l0MkluaXRpYWxpemUuaCIKICNpbXBvcnQgIl9XS1VzZXJDb250ZW50V29ybGRJ
bnRlcm5hbC5oIgogCkBAIC02MSwxMSArNjIsMjkgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
U291cmNlOihOU1N0cmluZwogICAgIHJldHVybiBzZWxmOwogfQogCistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGZvck1haW5GcmFtZU9ubHk6KEJPT0wp
Zm9yTWFpbkZyYW1lT25seSBsZWdhY3lXaGl0ZWxpc3Q6KFdLX0FSUkFZKE5TU3RyaW5nICopICop
bGVnYWN5V2hpdGVsaXN0IGxlZ2FjeUJsYWNrbGlzdDooV0tfQVJSQVkoTlNTdHJpbmcgKikgKils
ZWdhY3lCbGFja2xpc3QgYmFzZVVSTDooTlNVUkwgKiliYXNlVVJMIHVzZXJDb250ZW50V29ybGQ6
KF9XS1VzZXJDb250ZW50V29ybGQgKil1c2VyQ29udGVudFdvcmxkCit7CisgICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICAvLyBGSVhNRTog
SW4gdGhlIEFQSSB0ZXN0LCB3ZSBjYW4gdXNlIGdlbmVyYXRlVW5pcXVlVVJMIGJlbG93IGJlZm9y
ZSB0aGUgQVBJOjpPYmplY3QgY29uc3RydWN0b3IgaGFzIGRvbmUgdGhpcy4uLiB3aGVyZSBzaG91
bGQgdGhpcyByZWFsbHkgYmU/CisgICAgV2ViS2l0OjpJbml0aWFsaXplV2ViS2l0MigpOworCisg
ICAgQVBJOjpPYmplY3Q6OmNvbnN0cnVjdEluV3JhcHBlcjxBUEk6OlVzZXJTdHlsZVNoZWV0Pihz
ZWxmLCBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCB7IFdURjo6U3RyaW5nKHNvdXJjZSksIHsgeyB9
LCBXVEY6OlN0cmluZyhbYmFzZVVSTCBfd2ViX29yaWdpbmFsRGF0YUFzV1RGU3RyaW5nXSkgfSwg
QVBJOjp0b1N0cmluZ1ZlY3RvcihsZWdhY3lXaGl0ZWxpc3QpLCBBUEk6OnRvU3RyaW5nVmVjdG9y
KGxlZ2FjeUJsYWNrbGlzdCksIGZvck1haW5GcmFtZU9ubHkgPyBXZWJDb3JlOjpJbmplY3RJblRv
cEZyYW1lT25seSA6IFdlYkNvcmU6OkluamVjdEluQWxsRnJhbWVzLCBXZWJDb3JlOjpVc2VyU3R5
bGVVc2VyTGV2ZWwgfSwgKnVzZXJDb250ZW50V29ybGQtPl91c2VyQ29udGVudFdvcmxkKTsKKwor
ICAgIHJldHVybiBzZWxmOworfQorCiAtIChOU1N0cmluZyAqKXNvdXJjZQogewogICAgIHJldHVy
biBfdXNlclN0eWxlU2hlZXQtPnVzZXJTdHlsZVNoZWV0KCkuc291cmNlKCk7CiB9CiAKKy0gKE5T
VVJMICopYmFzZVVSTAoreworICAgIHJldHVybiBfdXNlclN0eWxlU2hlZXQtPnVzZXJTdHlsZVNo
ZWV0KCkudXJsKCk7Cit9CisKIC0gKEJPT0wpaXNGb3JNYWluRnJhbWVPbmx5CiB7CiAgICAgcmV0
dXJuIF91c2VyU3R5bGVTaGVldC0+dXNlclN0eWxlU2hlZXQoKS5pbmplY3RlZEZyYW1lcygpID09
IFdlYkNvcmU6OkluamVjdEluVG9wRnJhbWVPbmx5OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyUHJveHkuY3BwCShyZXZpc2lvbiAxOTc5MzkpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRGF0YVJlZmVy
ZW5jZS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIldlYlNjcmlw
dE1lc3NhZ2VIYW5kbGVyLmgiCisjaW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0
YVR5cGVzLmgiCiAjaW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9sbGVyTWVzc2FnZXMuaCIK
ICNpbmNsdWRlICJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1lc3NhZ2VzLmgiCiAjaW5j
bHVkZSA8V2ViQ29yZS9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaD4KQEAgLTgwLDE0ICs4MSwxNCBA
QCB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjphZGRQCiAgICAgICAgIHVzZXJD
b250ZW50V29ybGRzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcih3b3JsZC5rZXktPmlkZW50aWZpZXIo
KSwgd29ybGQua2V5LT5uYW1lKCkpKTsKICAgICB3ZWJQcm9jZXNzUHJveHkuY29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OkFkZFVzZXJDb250ZW50
V29ybGRzKHVzZXJDb250ZW50V29ybGRzKSwgbV9pZGVudGlmaWVyKTsKIAotICAgIFZlY3Rvcjxz
dGQ6OnBhaXI8dWludDY0X3QsIFdlYkNvcmU6OlVzZXJTY3JpcHQ+PiB1c2VyU2NyaXB0czsKKyAg
ICBWZWN0b3I8V2ViVXNlclNjcmlwdERhdGE+IHVzZXJTY3JpcHRzOwogICAgIGZvciAoY29uc3Qg
YXV0byYgdXNlclNjcmlwdCA6IG1fdXNlclNjcmlwdHMtPmVsZW1lbnRzT2ZUeXBlPEFQSTo6VXNl
clNjcmlwdD4oKSkKLSAgICAgICAgdXNlclNjcmlwdHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHVz
ZXJTY3JpcHQtPnVzZXJDb250ZW50V29ybGQoKS5pZGVudGlmaWVyKCksIHVzZXJTY3JpcHQtPnVz
ZXJTY3JpcHQoKSkpOworICAgICAgICB1c2VyU2NyaXB0cy5hcHBlbmQoeyB1c2VyU2NyaXB0LT5p
ZGVudGlmaWVyKCksIHVzZXJTY3JpcHQtPnVzZXJDb250ZW50V29ybGQoKS5pZGVudGlmaWVyKCks
IHVzZXJTY3JpcHQtPnVzZXJTY3JpcHQoKSB9KTsKICAgICB3ZWJQcm9jZXNzUHJveHkuY29ubmVj
dGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OkFkZFVzZXJT
Y3JpcHRzKHVzZXJTY3JpcHRzKSwgbV9pZGVudGlmaWVyKTsKIAotICAgIFZlY3RvcjxzdGQ6OnBh
aXI8dWludDY0X3QsIFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0Pj4gdXNlclN0eWxlU2hlZXRzOwor
ICAgIFZlY3RvcjxXZWJVc2VyU3R5bGVTaGVldERhdGE+IHVzZXJTdHlsZVNoZWV0czsKICAgICBm
b3IgKGNvbnN0IGF1dG8mIHVzZXJTdHlsZVNoZWV0IDogbV91c2VyU3R5bGVTaGVldHMtPmVsZW1l
bnRzT2ZUeXBlPEFQSTo6VXNlclN0eWxlU2hlZXQ+KCkpCi0gICAgICAgIHVzZXJTdHlsZVNoZWV0
cy5hcHBlbmQoc3RkOjptYWtlX3BhaXIodXNlclN0eWxlU2hlZXQtPnVzZXJDb250ZW50V29ybGQo
KS5pZGVudGlmaWVyKCksIHVzZXJTdHlsZVNoZWV0LT51c2VyU3R5bGVTaGVldCgpKSk7CisgICAg
ICAgIHVzZXJTdHlsZVNoZWV0cy5hcHBlbmQoeyB1c2VyU3R5bGVTaGVldC0+aWRlbnRpZmllcigp
LCB1c2VyU3R5bGVTaGVldC0+dXNlckNvbnRlbnRXb3JsZCgpLmlkZW50aWZpZXIoKSwgdXNlclN0
eWxlU2hlZXQtPnVzZXJTdHlsZVNoZWV0KCkgfSk7CiAgICAgd2ViUHJvY2Vzc1Byb3h5LmNvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpBZGRVc2Vy
U3R5bGVTaGVldHModXNlclN0eWxlU2hlZXRzKSwgbV9pZGVudGlmaWVyKTsKIAogICAgIFZlY3Rv
cjxXZWJTY3JpcHRNZXNzYWdlSGFuZGxlckhhbmRsZT4gbWVzc2FnZUhhbmRsZXJIYW5kbGVzOwpA
QCAtMTY4LDcgKzE2OSw3IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFk
ZFUKICAgICBtX3VzZXJTY3JpcHRzLT5lbGVtZW50cygpLmFwcGVuZCgmdXNlclNjcmlwdCk7CiAK
ICAgICBmb3IgKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKQotICAgICAg
ICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6QWRkVXNlclNjcmlwdHMoeyBzdGQ6Om1ha2VfcGFpcih3b3JsZC0+aWRlbnRpZmll
cigpLCB1c2VyU2NyaXB0LnVzZXJTY3JpcHQoKSkgfSksIG1faWRlbnRpZmllcik7CisgICAgICAg
IHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250
cm9sbGVyOjpBZGRVc2VyU2NyaXB0cyh7IHsgdXNlclNjcmlwdC5pZGVudGlmaWVyKCksIHdvcmxk
LT5pZGVudGlmaWVyKCksIHVzZXJTY3JpcHQudXNlclNjcmlwdCgpIH0gfSksIG1faWRlbnRpZmll
cik7CiB9CiAKIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92ZVVzZXJT
Y3JpcHQoQVBJOjpVc2VyU2NyaXB0JiB1c2VyU2NyaXB0KQpAQCAtMTc2LDcgKzE3Nyw3IEBAIHZv
aWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW8KICAgICBSZWY8QVBJOjpVc2Vy
Q29udGVudFdvcmxkPiB3b3JsZCA9IHVzZXJTY3JpcHQudXNlckNvbnRlbnRXb3JsZCgpOwogCiAg
ICAgZm9yIChXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykKLSAgICAgICAg
cHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRy
b2xsZXI6OlJlbW92ZVVzZXJTY3JpcHQod29ybGQtPmlkZW50aWZpZXIoKSwgdXNlclNjcmlwdC51
c2VyU2NyaXB0KCkudXJsKCkuc3RyaW5nKCkpLCBtX2lkZW50aWZpZXIpOworICAgICAgICBwcm9j
ZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxl
cjo6UmVtb3ZlVXNlclNjcmlwdCh3b3JsZC0+aWRlbnRpZmllcigpLCB1c2VyU2NyaXB0LmlkZW50
aWZpZXIoKSksIG1faWRlbnRpZmllcik7CiAKICAgICBtX3VzZXJTY3JpcHRzLT5lbGVtZW50cygp
LnJlbW92ZUFsbCgmdXNlclNjcmlwdCk7CiAKQEAgLTIyMyw3ICsyMjQsNyBAQCB2b2lkIFdlYlVz
ZXJDb250ZW50Q29udHJvbGxlclByb3h5OjphZGRVCiAgICAgbV91c2VyU3R5bGVTaGVldHMtPmVs
ZW1lbnRzKCkuYXBwZW5kKCZ1c2VyU3R5bGVTaGVldCk7CiAKICAgICBmb3IgKFdlYlByb2Nlc3NQ
cm94eSogcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKQotICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6QWRkVXNlclN0eWxl
U2hlZXRzKHsgc3RkOjptYWtlX3BhaXIod29ybGQtPmlkZW50aWZpZXIoKSwgdXNlclN0eWxlU2hl
ZXQudXNlclN0eWxlU2hlZXQoKSkgfSksIG1faWRlbnRpZmllcik7CisgICAgICAgIHByb2Nlc3Mt
PmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpB
ZGRVc2VyU3R5bGVTaGVldHMoeyB7IHVzZXJTdHlsZVNoZWV0LmlkZW50aWZpZXIoKSwgd29ybGQt
PmlkZW50aWZpZXIoKSwgdXNlclN0eWxlU2hlZXQudXNlclN0eWxlU2hlZXQoKSB9IH0pLCBtX2lk
ZW50aWZpZXIpOwogfQogCiB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpyZW1v
dmVVc2VyU3R5bGVTaGVldChBUEk6OlVzZXJTdHlsZVNoZWV0JiB1c2VyU3R5bGVTaGVldCkKQEAg
LTIzMSw3ICsyMzIsNyBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpyZW1v
CiAgICAgUmVmPEFQSTo6VXNlckNvbnRlbnRXb3JsZD4gd29ybGQgPSB1c2VyU3R5bGVTaGVldC51
c2VyQ29udGVudFdvcmxkKCk7CiAKICAgICBmb3IgKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcyA6
IG1fcHJvY2Vzc2VzKQotICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6UmVtb3ZlVXNlclN0eWxlU2hlZXQod29ybGQt
PmlkZW50aWZpZXIoKSwgdXNlclN0eWxlU2hlZXQudXNlclN0eWxlU2hlZXQoKS51cmwoKS5zdHJp
bmcoKSksIG1faWRlbnRpZmllcik7CisgICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpSZW1vdmVVc2VyU3R5bGVTaGVl
dCh3b3JsZC0+aWRlbnRpZmllcigpLCB1c2VyU3R5bGVTaGVldC5pZGVudGlmaWVyKCkpLCBtX2lk
ZW50aWZpZXIpOwogCiAgICAgbV91c2VyU3R5bGVTaGVldHMtPmVsZW1lbnRzKCkucmVtb3ZlQWxs
KCZ1c2VyU3R5bGVTaGVldCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQy
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5NzkzOSkKKysrIFNvdXJjZS9X
ZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMTA0NCw2ICsxMDQ0LDggQEAKIAkJN0E3OTFFRkExQzdDRkNGMTAwQzRDNTJCIC8qIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTc5MUVGOTFDN0NGQjM3MDBDNEM1
MkIgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlTWVzc2FnZVJlY2VpdmVyLmNwcCAq
LzsgfTsKIAkJN0E3OTFFRkIxQzdDRkQwMTAwQzRDNTJCIC8qIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3QTc5MUVGODFDN0NGQjEwMDBDNEM1MkIgLyogV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlTWVzc2FnZXMuaCAqLzsgfTsKIAkJN0E3OTFFRkMxQzdEMDhDNTAwQzRDNTJC
IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTlDRDhDMDFDNzc5ODQ5MDBEOUY2QzcgLyog
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCAqLzsgfTsKKwkJN0MwNjVGMkIxQzhD
RDk1RjAwQzJEOTUwIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzA2NUYyOTFDOENE
OTVGMDBDMkQ5NTAgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmNwcCAqLzsg
fTsKKwkJN0MwNjVGMkMxQzhDRDk1RjAwQzJEOTUwIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxl
ckRhdGFUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0MwNjVGMkExQzhDRDk1RjAwQzJEOTUwIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlckRh
dGFUeXBlcy5oICovOyB9OwogCQk3QzEzNUFBODE3M0IwQkNBMDA1ODZBRTIgLyogV0tQbHVnaW5J
bmZvcm1hdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3QzEzNUFBNjE3M0IwQkNBMDA1ODZBRTIgLyogV0tQbHVnaW5JbmZvcm1hdGlvbi5jcHAg
Ki87IH07CiAJCTdDMTM1QUE5MTczQjBCQ0EwMDU4NkFFMiAvKiBXS1BsdWdpbkluZm9ybWF0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzEzNUFB
NzE3M0IwQkNBMDA1ODZBRTIgLyogV0tQbHVnaW5JbmZvcm1hdGlvbi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMTM1QUFDMTczQjBDRkYwMDU4
NkFFMiAvKiBQbHVnaW5JbmZvcm1hdGlvbk1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMTM1QUFBMTczQjBDRkYwMDU4NkFFMiAvKiBQbHVnaW5J
bmZvcm1hdGlvbk1hYy5tbSAqLzsgfTsKQEAgLTMwNTEsNiArMzA1Myw4IEBACiAJCTdBOUNEOEMw
MUM3Nzk4NDkwMEQ5RjZDNyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0E5Q0Q4QzExQzc3
OTg0OTAwRDlGNkM3IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0E5Q0Q4QzIxQzc3OUFENjAwRDlGNkM3
IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5tZXNzYWdlcy5pbiAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUubWVzc2FnZXMuaW47
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDMDY1RjI5MUM4Q0Q5NUYwMEMyRDk1MCAv
KiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MwNjVGMkExQzhDRDk1RjAwQzJEOTUw
IC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MwQkI5QTgxOERDREU4OTAwMDZDMDg2IC8qIFdl
YkNvbnRlbnQtaU9TLmVudGl0bGVtZW50cyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQueG1sOyBwYXRoID0gIldlYkNvbnRlbnQtaU9TLmVudGl0
bGVtZW50cyI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMEJCOUE5MThEQ0RGNUEw
MDA2QzA4NiAvKiBOZXR3b3JrLWlPUy5lbnRpdGxlbWVudHMgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhtbDsgcGF0aCA9ICJOZXR3b3JrLWlP
Uy5lbnRpdGxlbWVudHMiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzEzNUFBNjE3
M0IwQkNBMDA1ODZBRTIgLyogV0tQbHVnaW5JbmZvcm1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS1BsdWdpbkluZm9ybWF0aW9uLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0OTgsNiArNDUwMiw4IEBACiAJCQkJODM2MDM0OUQxQUNC
MzRENjAwNjI2NTQ5IC8qIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHAgKi8sCiAJCQkJODM2
MDM0OUUxQUNCMzRENjAwNjI2NTQ5IC8qIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlci5oICovLAog
CQkJCUMwMzM3REQ3MTI3QTUxQjYwMDhGRjRGNCAvKiBXZWJUb3VjaEV2ZW50LmNwcCAqLywKKwkJ
CQk3QzA2NUYyOTFDOENEOTVGMDBDMkQ5NTAgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0
YVR5cGVzLmNwcCAqLywKKwkJCQk3QzA2NUYyQTFDOENEOTVGMDBDMkQ5NTAgLyogV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmggKi8sCiAJCQkJQzAzMzdERDAxMjdBMjk4MDAwOEZG
NEY0IC8qIFdlYldoZWVsRXZlbnQuY3BwICovLAogCQkJKTsKIAkJCXBhdGggPSBTaGFyZWQ7CkBA
IC03OTg4LDYgKzc5OTQsNyBAQAogCQkJCTJEMjhBNDk3MUFGOTY1QTEwMEYxOTBDOSAvKiBXS1Zp
ZXdMYXlvdXRTdHJhdGVneS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUMxNDI3MDIxQzIzRjg0QzAw
RDQxMTgzIC8qIERvd25sb2FkLmggaW4gSGVhZGVycyAqLywKIAkJCQlCRkE2MTc5RjEyRjBCOTlE
MDAzM0UwQ0EgLyogV0tWaWV3UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0MwNjVGMkMx
QzhDRDk1RjAwQzJEOTUwIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQzVFMUFGRTkxNkIyMEI3NTAwNkNDMUYyIC8qIFdLV2ViQXJjaGl2
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzVFMUFGRUIxNkIyMEI3RTAwNkNDMUYyIC8qIFdLV2Vi
QXJjaGl2ZVJlc291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUEyRTU2NzE4RDc3NTA4MDAz
ODE0QkQgLyogV0tXZWJQcm9jZXNzQnVuZGxlUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCkBA
IC05MTQ0LDYgKzkxNTEsNyBAQAogCQkJCTVDMTQyNzAxMUMyM0Y4NEMwMEQ0MTE4MyAvKiBEb3du
bG9hZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMDMzN0RERDEyN0E1MjFDMDA4RkY0RjQgLyog
V2ViUGxhdGZvcm1Ub3VjaFBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEQTk0NEEyMTg4
NEU0RjAwMEVEODZEQiAvKiBXZWJQbGF0Zm9ybVRvdWNoUG9pbnRJT1MuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJN0MwNjVGMkIxQzhDRDk1RjAwQzJEOTUwIC8qIFdlYlVzZXJDb250ZW50Q29udHJv
bGxlckRhdGFUeXBlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMUQ1OTI5RTE2NkUwNjAwMDBF
NkJGMDIgLyogV2ViUGx1Z0luQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNTc0NEVG
MTI2MzhGQjMwMDZGMEYxMiAvKiBXZWJQb3B1cEl0ZW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RDNCOTQ4NDYxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlBvcHVwTWVudS5jcHAgaW4gU291cmNlcyAq
LywKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0
ZWRCdW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCShyZXZpc2lvbiAxOTc5MzkpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIK
ICNpbmNsdWRlICJXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSAiV2Vi
UHJvY2Vzc1Bvb2xNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYlVzZXJDb250ZW50Q29udHJvbGxl
ci5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3QuaD4KICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9FeGNlcHRpb24uaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0xvY2su
aD4KQEAgLTcwLDcgKzcxLDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5UG9saWN5Lmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXNzaW9uSUQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NldHRp
bmdzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1VzZXJHZXN0dXJlSW5kaWNhdG9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9V
c2VyU2NyaXB0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Vc2VyU3R5bGVTaGVldC5oPgpAQCAtNDA3
LDM5ICs0MDcsMzkgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZTo6aXNQcm9jZXNzaW5nVXNlckdlcwog
dm9pZCBJbmplY3RlZEJ1bmRsZTo6YWRkVXNlclNjcmlwdChXZWJQYWdlR3JvdXBQcm94eSogcGFn
ZUdyb3VwLCBJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkKiBzY3JpcHRXb3JsZCwgY29uc3QgU3Ry
aW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdXJsLCBBUEk6OkFycmF5KiB3aGl0ZWxpc3QsIEFQ
STo6QXJyYXkqIGJsYWNrbGlzdCwgV2ViQ29yZTo6VXNlclNjcmlwdEluamVjdGlvblRpbWUgaW5q
ZWN0aW9uVGltZSwgV2ViQ29yZTo6VXNlckNvbnRlbnRJbmplY3RlZEZyYW1lcyBpbmplY3RlZEZy
YW1lcykKIHsKICAgICAvLyB1cmwgaXMgbm90IGZyb20gVVJMOjpzdHJpbmcoKSwgaS5lLiBpdCBo
YXMgbm90IGFscmVhZHkgYmVlbiBwYXJzZWQgYnkgVVJMLCBzbyB3ZSBoYXZlIHRvIHVzZSB0aGUg
cmVsYXRpdmUgVVJMIGNvbnN0cnVjdG9yIGZvciBVUkwgaW5zdGVhZCBvZiB0aGUgUGFyc2VkVVJM
U3RyaW5nVGFnIHZlcnNpb24uCi0gICAgYXV0byB1c2VyU2NyaXB0ID0gc3RkOjptYWtlX3VuaXF1
ZTxVc2VyU2NyaXB0Pihzb3VyY2UsIFVSTChVUkwoKSwgdXJsKSwgd2hpdGVsaXN0ID8gd2hpdGVs
aXN0LT50b1N0cmluZ1ZlY3RvcigpIDogVmVjdG9yPFN0cmluZz4oKSwgYmxhY2tsaXN0ID8gYmxh
Y2tsaXN0LT50b1N0cmluZ1ZlY3RvcigpIDogVmVjdG9yPFN0cmluZz4oKSwgaW5qZWN0aW9uVGlt
ZSwgaW5qZWN0ZWRGcmFtZXMpOworICAgIFVzZXJTY3JpcHQgdXNlclNjcmlwdHsgc291cmNlLCBV
UkwoVVJMKCksIHVybCksIHdoaXRlbGlzdCA/IHdoaXRlbGlzdC0+dG9TdHJpbmdWZWN0b3IoKSA6
IFZlY3RvcjxTdHJpbmc+KCksIGJsYWNrbGlzdCA/IGJsYWNrbGlzdC0+dG9TdHJpbmdWZWN0b3Io
KSA6IFZlY3RvcjxTdHJpbmc+KCksIGluamVjdGlvblRpbWUsIGluamVjdGVkRnJhbWVzIH07CiAK
LSAgICBwYWdlR3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigpLmFkZFVzZXJTY3JpcHQoc2Ny
aXB0V29ybGQtPmNvcmVXb3JsZCgpLCBXVEZNb3ZlKHVzZXJTY3JpcHQpKTsKKyAgICBwYWdlR3Jv
dXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigpLmFkZFVzZXJTY3JpcHQoKnNjcmlwdFdvcmxkLCBX
VEZNb3ZlKHVzZXJTY3JpcHQpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6YWRkVXNlclN0
eWxlU2hlZXQoV2ViUGFnZUdyb3VwUHJveHkqIHBhZ2VHcm91cCwgSW5qZWN0ZWRCdW5kbGVTY3Jp
cHRXb3JsZCogc2NyaXB0V29ybGQsIGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcm
IHVybCwgQVBJOjpBcnJheSogd2hpdGVsaXN0LCBBUEk6OkFycmF5KiBibGFja2xpc3QsIFdlYkNv
cmU6OlVzZXJDb250ZW50SW5qZWN0ZWRGcmFtZXMgaW5qZWN0ZWRGcmFtZXMpCiB7CiAgICAgLy8g
dXJsIGlzIG5vdCBmcm9tIFVSTDo6c3RyaW5nKCksIGkuZS4gaXQgaGFzIG5vdCBhbHJlYWR5IGJl
ZW4gcGFyc2VkIGJ5IFVSTCwgc28gd2UgaGF2ZSB0byB1c2UgdGhlIHJlbGF0aXZlIFVSTCBjb25z
dHJ1Y3RvciBmb3IgVVJMIGluc3RlYWQgb2YgdGhlIFBhcnNlZFVSTFN0cmluZ1RhZyB2ZXJzaW9u
LgotICAgIGF1dG8gdXNlclN0eWxlU2hlZXQgPSBzdGQ6Om1ha2VfdW5pcXVlPFVzZXJTdHlsZVNo
ZWV0Pihzb3VyY2UsIFVSTChVUkwoKSwgdXJsKSwgd2hpdGVsaXN0ID8gd2hpdGVsaXN0LT50b1N0
cmluZ1ZlY3RvcigpIDogVmVjdG9yPFN0cmluZz4oKSwgYmxhY2tsaXN0ID8gYmxhY2tsaXN0LT50
b1N0cmluZ1ZlY3RvcigpIDogVmVjdG9yPFN0cmluZz4oKSwgaW5qZWN0ZWRGcmFtZXMsIFVzZXJT
dHlsZVVzZXJMZXZlbCk7CisgICAgVXNlclN0eWxlU2hlZXQgdXNlclN0eWxlU2hlZXR7IHNvdXJj
ZSwgVVJMKFVSTCgpLCB1cmwpLCB3aGl0ZWxpc3QgPyB3aGl0ZWxpc3QtPnRvU3RyaW5nVmVjdG9y
KCkgOiBWZWN0b3I8U3RyaW5nPigpLCBibGFja2xpc3QgPyBibGFja2xpc3QtPnRvU3RyaW5nVmVj
dG9yKCkgOiBWZWN0b3I8U3RyaW5nPigpLCBpbmplY3RlZEZyYW1lcywgVXNlclN0eWxlVXNlckxl
dmVsIH07CiAKLSAgICBwYWdlR3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigpLmFkZFVzZXJT
dHlsZVNoZWV0KHNjcmlwdFdvcmxkLT5jb3JlV29ybGQoKSwgV1RGTW92ZSh1c2VyU3R5bGVTaGVl
dCksIEluamVjdEluRXhpc3RpbmdEb2N1bWVudHMpOworICAgIHBhZ2VHcm91cC0+dXNlckNvbnRl
bnRDb250cm9sbGVyKCkuYWRkVXNlclN0eWxlU2hlZXQoKnNjcmlwdFdvcmxkLCBXVEZNb3ZlKHVz
ZXJTdHlsZVNoZWV0KSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnJlbW92ZVVzZXJTY3Jp
cHQoV2ViUGFnZUdyb3VwUHJveHkqIHBhZ2VHcm91cCwgSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3Js
ZCogc2NyaXB0V29ybGQsIGNvbnN0IFN0cmluZyYgdXJsKQogewogICAgIC8vIHVybCBpcyBub3Qg
ZnJvbSBVUkw6OnN0cmluZygpLCBpLmUuIGl0IGhhcyBub3QgYWxyZWFkeSBiZWVuIHBhcnNlZCBi
eSBVUkwsIHNvIHdlIGhhdmUgdG8gdXNlIHRoZSByZWxhdGl2ZSBVUkwgY29uc3RydWN0b3IgZm9y
IFVSTCBpbnN0ZWFkIG9mIHRoZSBQYXJzZWRVUkxTdHJpbmdUYWcgdmVyc2lvbi4KLSAgICBwYWdl
R3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigpLnJlbW92ZVVzZXJTY3JpcHQoc2NyaXB0V29y
bGQtPmNvcmVXb3JsZCgpLCBVUkwoVVJMKCksIHVybCkpOworICAgIHBhZ2VHcm91cC0+dXNlckNv
bnRlbnRDb250cm9sbGVyKCkucmVtb3ZlVXNlclNjcmlwdFdpdGhVUkwoKnNjcmlwdFdvcmxkLCBV
UkwoVVJMKCksIHVybCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpyZW1vdmVVc2VyU3R5
bGVTaGVldChXZWJQYWdlR3JvdXBQcm94eSogcGFnZUdyb3VwLCBJbmplY3RlZEJ1bmRsZVNjcmlw
dFdvcmxkKiBzY3JpcHRXb3JsZCwgY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAgLy8gdXJsIGlz
IG5vdCBmcm9tIFVSTDo6c3RyaW5nKCksIGkuZS4gaXQgaGFzIG5vdCBhbHJlYWR5IGJlZW4gcGFy
c2VkIGJ5IFVSTCwgc28gd2UgaGF2ZSB0byB1c2UgdGhlIHJlbGF0aXZlIFVSTCBjb25zdHJ1Y3Rv
ciBmb3IgVVJMIGluc3RlYWQgb2YgdGhlIFBhcnNlZFVSTFN0cmluZ1RhZyB2ZXJzaW9uLgotICAg
IHBhZ2VHcm91cC0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkucmVtb3ZlVXNlclN0eWxlU2hlZXQo
c2NyaXB0V29ybGQtPmNvcmVXb3JsZCgpLCBVUkwoVVJMKCksIHVybCkpOworICAgIHBhZ2VHcm91
cC0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkucmVtb3ZlVXNlclN0eWxlU2hlZXRXaXRoVVJMKCpz
Y3JpcHRXb3JsZCwgVVJMKFVSTCgpLCB1cmwpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6
cmVtb3ZlVXNlclNjcmlwdHMoV2ViUGFnZUdyb3VwUHJveHkqIHBhZ2VHcm91cCwgSW5qZWN0ZWRC
dW5kbGVTY3JpcHRXb3JsZCogc2NyaXB0V29ybGQpCiB7Ci0gICAgcGFnZUdyb3VwLT51c2VyQ29u
dGVudENvbnRyb2xsZXIoKS5yZW1vdmVVc2VyU2NyaXB0cyhzY3JpcHRXb3JsZC0+Y29yZVdvcmxk
KCkpOworICAgIHBhZ2VHcm91cC0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkucmVtb3ZlVXNlclNj
cmlwdHMoKnNjcmlwdFdvcmxkKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cmVtb3ZlVXNl
clN0eWxlU2hlZXRzKFdlYlBhZ2VHcm91cFByb3h5KiBwYWdlR3JvdXAsIEluamVjdGVkQnVuZGxl
U2NyaXB0V29ybGQqIHNjcmlwdFdvcmxkKQogewotICAgIHBhZ2VHcm91cC0+dXNlckNvbnRlbnRD
b250cm9sbGVyKCkucmVtb3ZlVXNlclN0eWxlU2hlZXRzKHNjcmlwdFdvcmxkLT5jb3JlV29ybGQo
KSk7CisgICAgcGFnZUdyb3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIoKS5yZW1vdmVVc2VyU3R5
bGVTaGVldHMoKnNjcmlwdFdvcmxkKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cmVtb3Zl
QWxsVXNlckNvbnRlbnQoV2ViUGFnZUdyb3VwUHJveHkqIHBhZ2VHcm91cCkKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50
L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE5NzkzOSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIldlYlVzZXJD
b250ZW50Q29udHJvbGxlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRE9NV3JhcHBlcldvcmxk
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TY3JpcHRDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9TZWN1cml0eU9yaWdpbkRhdGEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlclN0eWxlU2hlZXQuaD4KQEAgLTgw
LDcgKzc5LDYgQEAgUmVmPFdlYlVzZXJDb250ZW50Q29udHJvbGxlcj4gV2ViVXNlckNvbgogCiBX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcih1aW50NjRf
dCBpZGVudGlmaWVyKQogICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCi0gICAgLCBtX3Vz
ZXJDb250ZW50Q29udHJvbGxlcihVc2VyQ29udGVudENvbnRyb2xsZXI6OmNyZWF0ZSgpKQogewog
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faWRlbnRp
ZmllciwgKnRoaXMpOwogfQpAQCAtOTQsNyArOTIsNiBAQCBXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXI6On5XZWJVc2VyQ29udGVuCiAgICAgdXNlckNvbnRlbnRDb250cm9sbGVycygpLnJlbW92ZSht
X2lkZW50aWZpZXIpOwogfQogCi0KIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRV
c2VyQ29udGVudFdvcmxkcyhjb25zdCBWZWN0b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBTdHJpbmc+
PiYgd29ybGRzKQogewogICAgIGZvciAoYXV0byYgd29ybGQgOiB3b3JsZHMpIHsKQEAgLTEyNCwy
MCArMTIxLDIxIEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2UKICAg
ICB9CiB9CiAKLXZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0cyhj
b25zdCBWZWN0b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBXZWJDb3JlOjpVc2VyU2NyaXB0Pj4mIHVz
ZXJTY3JpcHRzKQordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHRz
KGNvbnN0IFZlY3RvcjxXZWJVc2VyU2NyaXB0RGF0YT4mIHVzZXJTY3JpcHRzKQogewotICAgIGZv
ciAoY29uc3QgYXV0byYgdXNlclNjcmlwdFdvcmxkUGFpciA6IHVzZXJTY3JpcHRzKSB7Ci0gICAg
ICAgIGF1dG8gaXQgPSB3b3JsZE1hcCgpLmZpbmQodXNlclNjcmlwdFdvcmxkUGFpci5maXJzdCk7
CisgICAgZm9yIChjb25zdCBhdXRvJiB1c2VyU2NyaXB0RGF0YSA6IHVzZXJTY3JpcHRzKSB7Cisg
ICAgICAgIGF1dG8gaXQgPSB3b3JsZE1hcCgpLmZpbmQodXNlclNjcmlwdERhdGEud29ybGRJZGVu
dGlmaWVyKTsKICAgICAgICAgaWYgKGl0ID09IHdvcmxkTWFwKCkuZW5kKCkpIHsKLSAgICAgICAg
ICAgIFdURkxvZ0Fsd2F5cygiVHJ5aW5nIHRvIGFkZCBhIFVzZXJTY3JpcHQgdG8gYSBVc2VyQ29u
dGVudFdvcmxkIChpZD0lIiBQUkl1NjQgIikgdGhhdCBkb2VzIG5vdCBleGlzdC4iLCB1c2VyU2Ny
aXB0V29ybGRQYWlyLmZpcnN0KTsKKyAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiVHJ5aW5nIHRv
IGFkZCBhIFVzZXJTY3JpcHQgdG8gYSBVc2VyQ29udGVudFdvcmxkIChpZD0lIiBQUkl1NjQgIikg
dGhhdCBkb2VzIG5vdCBleGlzdC4iLCB1c2VyU2NyaXB0RGF0YS53b3JsZElkZW50aWZpZXIpOwog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBtX3VzZXJDb250ZW50
Q29udHJvbGxlci0+YWRkVXNlclNjcmlwdChpdC0+dmFsdWUuZmlyc3QtPmNvcmVXb3JsZCgpLCBz
dGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6OlVzZXJTY3JpcHQ+KHVzZXJTY3JpcHRXb3JsZFBhaXIu
c2Vjb25kKSk7CisgICAgICAgIFVzZXJTY3JpcHQgc2NyaXB0ID0gdXNlclNjcmlwdERhdGEudXNl
clNjcmlwdDsKKyAgICAgICAgYWRkVXNlclNjcmlwdEludGVybmFsKCppdC0+dmFsdWUuZmlyc3Qs
IHVzZXJTY3JpcHREYXRhLmlkZW50aWZpZXIsIFdURk1vdmUoc2NyaXB0KSk7CiAgICAgfQogfQog
Ci12b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlwdCh1aW50NjRf
dCB3b3JsZElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQordm9pZCBXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTY3JpcHQodWludDY0X3Qgd29ybGRJZGVudGlm
aWVyLCB1aW50NjRfdCB1c2VyU2NyaXB0SWRlbnRpZmllcikKIHsKICAgICBhdXRvIGl0ID0gd29y
bGRNYXAoKS5maW5kKHdvcmxkSWRlbnRpZmllcik7CiAgICAgaWYgKGl0ID09IHdvcmxkTWFwKCku
ZW5kKCkpIHsKQEAgLTE0NSw3ICsxNDMsNyBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxl
cjo6cmVtb3ZlVXNlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX3VzZXJDb250ZW50
Q29udHJvbGxlci0+cmVtb3ZlVXNlclNjcmlwdChpdC0+dmFsdWUuZmlyc3QtPmNvcmVXb3JsZCgp
LCBVUkwoVVJMKCksIHVybFN0cmluZykpOworICAgIHJlbW92ZVVzZXJTY3JpcHRJbnRlcm5hbCgq
aXQtPnZhbHVlLmZpcnN0LCB1c2VyU2NyaXB0SWRlbnRpZmllcik7CiB9CiAKIHZvaWQgV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVBbGxVc2VyU2NyaXB0cyhjb25zdCBWZWN0b3I8dWlu
dDY0X3Q+JiB3b3JsZElkZW50aWZpZXJzKQpAQCAtMTU3LDI0ICsxNTUsMjUgQEAgdm9pZCBXZWJV
c2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZUFsbAogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKLSAgICAgICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPnJlbW92ZVVzZXJTY3Jp
cHRzKGl0LT52YWx1ZS5maXJzdC0+Y29yZVdvcmxkKCkpOworICAgICAgICByZW1vdmVVc2VyU2Ny
aXB0cygqaXQtPnZhbHVlLmZpcnN0KTsKICAgICB9CiB9CiAKLXZvaWQgV2ViVXNlckNvbnRlbnRD
b250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldHMoY29uc3QgVmVjdG9yPHN0ZDo6cGFpcjx1aW50
NjRfdCwgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQ+PiYgdXNlclN0eWxlU2hlZXRzKQordm9pZCBX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNoZWV0cyhjb25zdCBWZWN0b3I8
V2ViVXNlclN0eWxlU2hlZXREYXRhPiYgdXNlclN0eWxlU2hlZXRzKQogewotICAgIGZvciAoY29u
c3QgYXV0byYgdXNlclN0eWxlU2hlZXRXb3JsZFBhaXIgOiB1c2VyU3R5bGVTaGVldHMpIHsKLSAg
ICAgICAgYXV0byBpdCA9IHdvcmxkTWFwKCkuZmluZCh1c2VyU3R5bGVTaGVldFdvcmxkUGFpci5m
aXJzdCk7CisgICAgZm9yIChjb25zdCBhdXRvJiB1c2VyU3R5bGVTaGVldERhdGEgOiB1c2VyU3R5
bGVTaGVldHMpIHsKKyAgICAgICAgYXV0byBpdCA9IHdvcmxkTWFwKCkuZmluZCh1c2VyU3R5bGVT
aGVldERhdGEud29ybGRJZGVudGlmaWVyKTsKICAgICAgICAgaWYgKGl0ID09IHdvcmxkTWFwKCku
ZW5kKCkpIHsKLSAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiVHJ5aW5nIHRvIGFkZCBhIFVzZXJT
dHlsZVNoZWV0IHRvIGEgVXNlckNvbnRlbnRXb3JsZCAoaWQ9JSIgUFJJdTY0ICIpIHRoYXQgZG9l
cyBub3QgZXhpc3QuIiwgdXNlclN0eWxlU2hlZXRXb3JsZFBhaXIuZmlyc3QpOworICAgICAgICAg
ICAgV1RGTG9nQWx3YXlzKCJUcnlpbmcgdG8gYWRkIGEgVXNlclN0eWxlU2hlZXQgdG8gYSBVc2Vy
Q29udGVudFdvcmxkIChpZD0lIiBQUkl1NjQgIikgdGhhdCBkb2VzIG5vdCBleGlzdC4iLCB1c2Vy
U3R5bGVTaGVldERhdGEud29ybGRJZGVudGlmaWVyKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9Ci0KLSAgICAgICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPmFkZFVzZXJTdHls
ZVNoZWV0KGl0LT52YWx1ZS5maXJzdC0+Y29yZVdvcmxkKCksIHN0ZDo6bWFrZV91bmlxdWU8V2Vi
Q29yZTo6VXNlclN0eWxlU2hlZXQ+KHVzZXJTdHlsZVNoZWV0V29ybGRQYWlyLnNlY29uZCksIElu
amVjdEluRXhpc3RpbmdEb2N1bWVudHMpOworICAgICAgICAKKyAgICAgICAgVXNlclN0eWxlU2hl
ZXQgc2hlZXQgPSB1c2VyU3R5bGVTaGVldERhdGEudXNlclN0eWxlU2hlZXQ7CisgICAgICAgIGFk
ZFVzZXJTdHlsZVNoZWV0SW50ZXJuYWwoKml0LT52YWx1ZS5maXJzdCwgdXNlclN0eWxlU2hlZXRE
YXRhLmlkZW50aWZpZXIsIFdURk1vdmUoc2hlZXQpKTsKICAgICB9CiB9CiAKLXZvaWQgV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU3R5bGVTaGVldCh1aW50NjRfdCB3b3JsZElk
ZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQordm9pZCBXZWJVc2VyQ29udGVudENv
bnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNoZWV0KHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllciwg
dWludDY0X3QgdXNlclN0eWxlU2hlZXRJZGVudGlmaWVyKQogewogICAgIGF1dG8gaXQgPSB3b3Js
ZE1hcCgpLmZpbmQod29ybGRJZGVudGlmaWVyKTsKICAgICBpZiAoaXQgPT0gd29ybGRNYXAoKS5l
bmQoKSkgewpAQCAtMTgyLDcgKzE4MSw3IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
OjpyZW1vdmVVc2UKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fdXNlckNvbnRlbnRD
b250cm9sbGVyLT5yZW1vdmVVc2VyU3R5bGVTaGVldChpdC0+dmFsdWUuZmlyc3QtPmNvcmVXb3Js
ZCgpLCBVUkwoVVJMKCksIHVybFN0cmluZykpOworICAgIHJlbW92ZVVzZXJTdHlsZVNoZWV0SW50
ZXJuYWwoKml0LT52YWx1ZS5maXJzdCwgdXNlclN0eWxlU2hlZXRJZGVudGlmaWVyKTsKIH0KIAog
dm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZUFsbFVzZXJTdHlsZVNoZWV0cyhj
b25zdCBWZWN0b3I8dWludDY0X3Q+JiB3b3JsZElkZW50aWZpZXJzKQpAQCAtMTk0LDcgKzE5Myw3
IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVBbGwKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5y
ZW1vdmVVc2VyU3R5bGVTaGVldHMoaXQtPnZhbHVlLmZpcnN0LT5jb3JlV29ybGQoKSk7CisgICAg
ICAgIHJlbW92ZVVzZXJTdHlsZVNoZWV0cygqaXQtPnZhbHVlLmZpcnN0KTsKICAgICB9CiB9CiAK
QEAgLTI1Myw3ICsyNTIsOSBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNl
clNjCiAgICAgICAgIFJlZlB0cjxXZWJVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yUHJveHk+
IGRlc2NyaXB0b3IgPSBXZWJVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yUHJveHk6OmNyZWF0
ZSh0aGlzLCBoYW5kbGUubmFtZSwgaGFuZGxlLmlkZW50aWZpZXIpOwogCiAgICAgICAgIG1fdXNl
ck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMuYWRkKGRlc2NyaXB0b3ItPmlkZW50aWZpZXIoKSwg
ZGVzY3JpcHRvcik7Ci0gICAgICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5hZGRVc2VyTWVz
c2FnZUhhbmRsZXJEZXNjcmlwdG9yKGRlc2NyaXB0b3ItPmRlc2NyaXB0b3IoKSk7CisKKyAgICAg
ICAgYXV0byYgY29yZURlc2NyaXB0b3IgPSBkZXNjcmlwdG9yLT5kZXNjcmlwdG9yKCk7CisgICAg
ICAgIG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnNNYXAuYWRkKHN0ZDo6bWFrZV9wYWly
KGNvcmVEZXNjcmlwdG9yLm5hbWUoKSwgJmNvcmVEZXNjcmlwdG9yLndvcmxkKCkpLCAmY29yZURl
c2NyaXB0b3IpOwogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHNjcmlwdE1lc3NhZ2VI
YW5kbGVycyk7CkBAIC0yNjUsOCArMjY2LDEwIEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyOjpyZW1vdmVVc2UKICNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQogICAgIGF1
dG8gaXQgPSBtX3VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzLmZpbmQoaWRlbnRpZmllcik7
CiAgICAgQVNTRVJUKGl0ICE9IG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMuZW5kKCkp
OwotICAgIAotICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5yZW1vdmVVc2VyTWVzc2FnZUhh
bmRsZXJEZXNjcmlwdG9yKGl0LT52YWx1ZS0+ZGVzY3JpcHRvcigpKTsKKworICAgIGF1dG8mIGNv
cmVEZXNjcmlwdG9yID0gaXQtPnZhbHVlLT5kZXNjcmlwdG9yKCk7CisgICAgbV91c2VyTWVzc2Fn
ZUhhbmRsZXJEZXNjcmlwdG9yc01hcC5yZW1vdmUoc3RkOjptYWtlX3BhaXIoY29yZURlc2NyaXB0
b3IubmFtZSgpLCAmY29yZURlc2NyaXB0b3Iud29ybGQoKSkpOworCiAgICAgbV91c2VyTWVzc2Fn
ZUhhbmRsZXJEZXNjcmlwdG9ycy5yZW1vdmUoaXQpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0o
aWRlbnRpZmllcik7CkBAIC0yNzksMTkgKzI4MiwxNjggQEAgdm9pZCBXZWJVc2VyQ29udGVudENv
bnRyb2xsZXI6OmFkZFVzZXJDbwogICAgIGZvciAoY29uc3QgYXV0byYgdXNlckNvbnRlbnRFeHRl
bnNpb24gOiB1c2VyQ29udGVudEV4dGVuc2lvbnMpIHsKICAgICAgICAgV2ViQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uRGF0YSBjb250ZW50RXh0ZW5zaW9uRGF0YSA9IHVzZXJDb250ZW50RXh0ZW5z
aW9uLnNlY29uZDsKICAgICAgICAgUmVmUHRyPFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4g
Y29tcGlsZWRDb250ZW50RXh0ZW5zaW9uID0gV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpj
cmVhdGUoV1RGTW92ZShjb250ZW50RXh0ZW5zaW9uRGF0YSkpOwotICAgICAgICBtX3VzZXJDb250
ZW50Q29udHJvbGxlci0+YWRkVXNlckNvbnRlbnRFeHRlbnNpb24odXNlckNvbnRlbnRFeHRlbnNp
b24uZmlyc3QsIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbik7CisKKyAgICAgICAgbV9jb250ZW50
RXh0ZW5zaW9uQmFja2VuZC5hZGRDb250ZW50RXh0ZW5zaW9uKHVzZXJDb250ZW50RXh0ZW5zaW9u
LmZpcnN0LCBXVEZNb3ZlKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbikpOwogICAgIH0KIH0KIAog
dm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9u
KGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+cmVt
b3ZlVXNlckNvbnRlbnRFeHRlbnNpb24obmFtZSk7CisgICAgbV9jb250ZW50RXh0ZW5zaW9uQmFj
a2VuZC5yZW1vdmVDb250ZW50RXh0ZW5zaW9uKG5hbWUpOwogfQogCiB2b2lkIFdlYlVzZXJDb250
ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxsVXNlckNvbnRlbnRFeHRlbnNpb25zKCkKIHsKLSAgICBt
X3VzZXJDb250ZW50Q29udHJvbGxlci0+cmVtb3ZlQWxsVXNlckNvbnRlbnRFeHRlbnNpb25zKCk7
CisgICAgbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZC5yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9u
cygpOwogfQogI2VuZGlmCiAKKworCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRk
VXNlclNjcmlwdEludGVybmFsKEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQmIHdvcmxkLCB1aW50
NjRfdCB1c2VyU2NyaXB0SWRlbnRpZmllciwgVXNlclNjcmlwdCYmIHVzZXJTY3JpcHQpCit7Cisg
ICAgYXV0byYgc2NyaXB0c0luV29ybGQgPSBtX3VzZXJTY3JpcHRzLmVuc3VyZSgmd29ybGQsIFtd
IHsgcmV0dXJuIFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0X3QsIFdlYkNvcmU6OlVzZXJTY3JpcHQ+
PigpOyB9KS5pdGVyYXRvci0+dmFsdWU7CisgICAgc2NyaXB0c0luV29ybGQuYXBwZW5kKHN0ZDo6
bWFrZV9wYWlyKHVzZXJTY3JpcHRJZGVudGlmaWVyLCBXVEZNb3ZlKHVzZXJTY3JpcHQpKSk7Cit9
CisKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0KEluamVjdGVk
QnVuZGxlU2NyaXB0V29ybGQmIHdvcmxkLCBVc2VyU2NyaXB0JiYgdXNlclNjcmlwdCkKK3sKKyAg
ICBhZGRVc2VyU2NyaXB0SW50ZXJuYWwod29ybGQsIDAsIFdURk1vdmUodXNlclNjcmlwdCkpOwor
fQorCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlwdFdpdGhV
UkwoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYgd29ybGQsIGNvbnN0IFVSTCYgdXJsKQorewor
ICAgIGF1dG8gaXQgPSBtX3VzZXJTY3JpcHRzLmZpbmQoJndvcmxkKTsKKyAgICBpZiAoaXQgPT0g
bV91c2VyU2NyaXB0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byYgc2NyaXB0
cyA9IGl0LT52YWx1ZTsKKyAgICBmb3IgKGludCBpID0gc2NyaXB0cy5zaXplKCkgLSAxOyBpID49
IDA7IC0taSkgeworICAgICAgICBpZiAoc2NyaXB0c1tpXS5zZWNvbmQudXJsKCkgPT0gdXJsKQor
ICAgICAgICAgICAgc2NyaXB0cy5yZW1vdmUoaSk7CisgICAgfQorCisgICAgaWYgKHNjcmlwdHMu
aXNFbXB0eSgpKQorICAgICAgICBtX3VzZXJTY3JpcHRzLnJlbW92ZShpdCk7Cit9CisKK3ZvaWQg
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU2NyaXB0SW50ZXJuYWwoSW5qZWN0
ZWRCdW5kbGVTY3JpcHRXb3JsZCYgd29ybGQsIHVpbnQ2NF90IHVzZXJTY3JpcHRJZGVudGlmaWVy
KQoreworICAgIGF1dG8gaXQgPSBtX3VzZXJTY3JpcHRzLmZpbmQoJndvcmxkKTsKKyAgICBpZiAo
aXQgPT0gbV91c2VyU2NyaXB0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byYg
c2NyaXB0cyA9IGl0LT52YWx1ZTsKKyAgICBmb3IgKGludCBpID0gc2NyaXB0cy5zaXplKCkgLSAx
OyBpID49IDA7IC0taSkgeworICAgICAgICBpZiAoc2NyaXB0c1tpXS5maXJzdCA9PSB1c2VyU2Ny
aXB0SWRlbnRpZmllcikKKyAgICAgICAgICAgIHNjcmlwdHMucmVtb3ZlKGkpOworICAgIH0KKwor
ICAgIGlmIChzY3JpcHRzLmlzRW1wdHkoKSkKKyAgICAgICAgbV91c2VyU2NyaXB0cy5yZW1vdmUo
aXQpOworfQorCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlw
dHMoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYgd29ybGQpCit7CisgICAgbV91c2VyU2NyaXB0
cy5yZW1vdmUoJndvcmxkKTsKK30KKwordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFk
ZFVzZXJTdHlsZVNoZWV0SW50ZXJuYWwoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYgd29ybGQs
IHVpbnQ2NF90IHVzZXJTdHlsZVNoZWV0SWRlbnRpZmllciwgVXNlclN0eWxlU2hlZXQmJiB1c2Vy
U3R5bGVTaGVldCkKK3sKKyAgICBhdXRvJiBzdHlsZVNoZWV0c0luV29ybGQgPSBtX3VzZXJTdHls
ZVNoZWV0cy5lbnN1cmUoJndvcmxkLCBbXSB7IHJldHVybiBWZWN0b3I8c3RkOjpwYWlyPHVpbnQ2
NF90LCBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldD4+KCk7IH0pLml0ZXJhdG9yLT52YWx1ZTsKKyAg
ICBzdHlsZVNoZWV0c0luV29ybGQuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHVzZXJTdHlsZVNoZWV0
SWRlbnRpZmllciwgV1RGTW92ZSh1c2VyU3R5bGVTaGVldCkpKTsKKworICAgIGludmFsaWRhdGVJ
bmplY3RlZFN0eWxlU2hlZXRDYWNoZUluQWxsRnJhbWVzSW5BbGxQYWdlcygpOworfQorCit2b2lk
IFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlclN0eWxlU2hlZXQoSW5qZWN0ZWRCdW5k
bGVTY3JpcHRXb3JsZCYgd29ybGQsIFVzZXJTdHlsZVNoZWV0JiYgdXNlclN0eWxlU2hlZXQpCit7
CisgICAgYWRkVXNlclN0eWxlU2hlZXRJbnRlcm5hbCh3b3JsZCwgMCwgV1RGTW92ZSh1c2VyU3R5
bGVTaGVldCkpOworfQorCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNl
clN0eWxlU2hlZXRXaXRoVVJMKEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQmIHdvcmxkLCBjb25z
dCBVUkwmIHVybCkKK3sKKyAgICBhdXRvIGl0ID0gbV91c2VyU3R5bGVTaGVldHMuZmluZCgmd29y
bGQpOworICAgIGlmIChpdCA9PSBtX3VzZXJTdHlsZVNoZWV0cy5lbmQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgYXV0byYgc3R5bGVzaGVldHMgPSBpdC0+dmFsdWU7CisKKyAgICBib29sIHNo
ZWV0c0NoYW5nZWQgPSBmYWxzZTsKKyAgICBmb3IgKGludCBpID0gc3R5bGVzaGVldHMuc2l6ZSgp
IC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgaWYgKHN0eWxlc2hlZXRzW2ldLnNlY29uZC51
cmwoKSA9PSB1cmwpIHsKKyAgICAgICAgICAgIHN0eWxlc2hlZXRzLnJlbW92ZShpKTsKKyAgICAg
ICAgICAgIHNoZWV0c0NoYW5nZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KCFzaGVldHNDaGFuZ2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoc3R5bGVzaGVldHMu
aXNFbXB0eSgpKQorICAgICAgICBtX3VzZXJTdHlsZVNoZWV0cy5yZW1vdmUoaXQpOworCisgICAg
aW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlSW5BbGxGcmFtZXNJbkFsbFBhZ2VzKCk7
Cit9CisKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU3R5bGVTaGVl
dEludGVybmFsKEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQmIHdvcmxkLCB1aW50NjRfdCB1c2Vy
U3R5bGVTaGVldElkZW50aWZpZXIpCit7CisgICAgYXV0byBpdCA9IG1fdXNlclN0eWxlU2hlZXRz
LmZpbmQoJndvcmxkKTsKKyAgICBpZiAoaXQgPT0gbV91c2VyU3R5bGVTaGVldHMuZW5kKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGF1dG8mIHN0eWxlc2hlZXRzID0gaXQtPnZhbHVlOworCisg
ICAgYm9vbCBzaGVldHNDaGFuZ2VkID0gZmFsc2U7CisgICAgZm9yIChpbnQgaSA9IHN0eWxlc2hl
ZXRzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGlmIChzdHlsZXNoZWV0c1tp
XS5maXJzdCA9PSB1c2VyU3R5bGVTaGVldElkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIHN0eWxl
c2hlZXRzLnJlbW92ZShpKTsKKyAgICAgICAgICAgIHNoZWV0c0NoYW5nZWQgPSB0cnVlOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKCFzaGVldHNDaGFuZ2VkKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoc3R5bGVzaGVldHMuaXNFbXB0eSgpKQorICAgICAgICBtX3VzZXJTdHlsZVNo
ZWV0cy5yZW1vdmUoaXQpOworCisgICAgaW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hl
SW5BbGxGcmFtZXNJbkFsbFBhZ2VzKCk7Cit9CisKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyOjpyZW1vdmVVc2VyU3R5bGVTaGVldHMoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYgd29y
bGQpCit7CisgICAgaWYgKCFtX3VzZXJTdHlsZVNoZWV0cy5yZW1vdmUoJndvcmxkKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlSW5BbGxG
cmFtZXNJbkFsbFBhZ2VzKCk7Cit9CisKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpy
ZW1vdmVBbGxVc2VyQ29udGVudCgpCit7CisgICAgbV91c2VyU2NyaXB0cy5jbGVhcigpOworCisg
ICAgaWYgKCFtX3VzZXJTdHlsZVNoZWV0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV91c2VyU3R5
bGVTaGVldHMuY2xlYXIoKTsKKyAgICAgICAgaW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENh
Y2hlSW5BbGxGcmFtZXNJbkFsbFBhZ2VzKCk7CisgICAgfQorfQorCit2b2lkIFdlYlVzZXJDb250
ZW50Q29udHJvbGxlcjo6Zm9yRWFjaFVzZXJTY3JpcHQoY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lk
KFdlYkNvcmU6OkRPTVdyYXBwZXJXb3JsZCYsIGNvbnN0IFdlYkNvcmU6OlVzZXJTY3JpcHQmKT4m
IGZ1bmN0b3IpIGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBhdXRvJiB3b3JsZEFuZFVzZXJTY3Jp
cHRWZWN0b3IgOiBtX3VzZXJTY3JpcHRzKSB7CisgICAgICAgIGF1dG8mIHdvcmxkID0gd29ybGRB
bmRVc2VyU2NyaXB0VmVjdG9yLmtleS0+Y29yZVdvcmxkKCk7CisgICAgICAgIGZvciAoY29uc3Qg
YXV0byYgaWRlbnRpZmllclVzZXJTY3JpcHRQYWlyIDogd29ybGRBbmRVc2VyU2NyaXB0VmVjdG9y
LnZhbHVlKQorICAgICAgICAgICAgZnVuY3Rvcih3b3JsZCwgaWRlbnRpZmllclVzZXJTY3JpcHRQ
YWlyLnNlY29uZCk7CisgICAgfQorfQorCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6
Zm9yRWFjaFVzZXJTdHlsZVNoZWV0KGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBXZWJD
b3JlOjpVc2VyU3R5bGVTaGVldCYpPiYgZnVuY3RvcikgY29uc3QKK3sKKyAgICBmb3IgKGF1dG8m
IHN0eWxlU2hlZXRWZWN0b3IgOiBtX3VzZXJTdHlsZVNoZWV0cy52YWx1ZXMoKSkgeworICAgICAg
ICBmb3IgKGNvbnN0IGF1dG8mIGlkZW50aWZpZXJVc2VyU3R5bGVTaGVldFBhaXIgOiBzdHlsZVNo
ZWV0VmVjdG9yKQorICAgICAgICAgICAgZnVuY3RvcihpZGVudGlmaWVyVXNlclN0eWxlU2hlZXRQ
YWlyLnNlY29uZCk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29udGVu
dC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuaAkocmV2aXNpb24gMTk3OTM5KQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMjgsOSArMjgsMTkgQEAKIAogI2luY2x1ZGUgIk1lc3NhZ2VS
ZWNlaXZlci5oIgogI2luY2x1ZGUgIldlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyLmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuaD4KKyNpbmNsdWRlICJXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXJEYXRhVHlwZXMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1VzZXJDb250ZW50
UHJvdmlkZXIuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorI2luY2x1ZGUgPFdl
YkNvcmUvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKK2NsYXNzIENvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbjsKK30KK30KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTM4LDMwICs0
OCw0NCBAQCBjbGFzcyBJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkOwogY2xhc3MgV2ViQ29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uRGF0YTsKIGNsYXNzIFdlYlVzZXJNZXNzYWdlSGFuZGxlckRlc2Ny
aXB0b3JQcm94eTsKIAotY2xhc3MgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyIGZpbmFsIDogcHVi
bGljIFJlZkNvdW50ZWQ8V2ViVXNlckNvbnRlbnRDb250cm9sbGVyPiwgcHJpdmF0ZSBJUEM6Ok1l
c3NhZ2VSZWNlaXZlciAgeworY2xhc3MgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyIGZpbmFsIDog
cHVibGljIFdlYkNvcmU6OlVzZXJDb250ZW50UHJvdmlkZXIsIHByaXZhdGUgSVBDOjpNZXNzYWdl
UmVjZWl2ZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8V2ViVXNlckNvbnRlbnRDb250cm9s
bGVyPiBnZXRPckNyZWF0ZSh1aW50NjRfdCBpZGVudGlmaWVyKTsKICAgICB2aXJ0dWFsIH5XZWJV
c2VyQ29udGVudENvbnRyb2xsZXIoKTsKIAotICAgIFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJv
bGxlciYgdXNlckNvbnRlbnRDb250cm9sbGVyKCkgeyByZXR1cm4gbV91c2VyQ29udGVudENvbnRy
b2xsZXI7IH0KLQogICAgIHVpbnQ2NF90IGlkZW50aWZpZXIoKSB7IHJldHVybiBtX2lkZW50aWZp
ZXI7IH0gCiAKKyAgICB2b2lkIGFkZFVzZXJTY3JpcHQoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3Js
ZCYsIFdlYkNvcmU6OlVzZXJTY3JpcHQmJik7CisgICAgdm9pZCByZW1vdmVVc2VyU2NyaXB0V2l0
aFVSTChJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiwgY29uc3QgV2ViQ29yZTo6VVJMJik7Cisg
ICAgdm9pZCByZW1vdmVVc2VyU2NyaXB0cyhJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJik7Cisg
ICAgdm9pZCBhZGRVc2VyU3R5bGVTaGVldChJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiwgV2Vi
Q29yZTo6VXNlclN0eWxlU2hlZXQmJik7CisgICAgdm9pZCByZW1vdmVVc2VyU3R5bGVTaGVldFdp
dGhVUkwoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYsIGNvbnN0IFdlYkNvcmU6OlVSTCYpOwor
ICAgIHZvaWQgcmVtb3ZlVXNlclN0eWxlU2hlZXRzKEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQm
KTsKKyAgICB2b2lkIHJlbW92ZUFsbFVzZXJDb250ZW50KCk7CisKIHByaXZhdGU6CiAgICAgZXhw
bGljaXQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyKHVpbnQ2NF90IGlkZW50aWZpZXIpOwogCisg
ICAgLy8gV2ViQ29yZTo6VXNlckNvbnRlbnRQcm92aWRlcgorICAgIHZvaWQgZm9yRWFjaFVzZXJT
Y3JpcHQoY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkKFdlYkNvcmU6OkRPTVdyYXBwZXJXb3JsZCYs
IGNvbnN0IFdlYkNvcmU6OlVzZXJTY3JpcHQmKT4mKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lk
IGZvckVhY2hVc2VyU3R5bGVTaGVldChjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgV2Vi
Q29yZTo6VXNlclN0eWxlU2hlZXQmKT4mKSBjb25zdCBvdmVycmlkZTsKKyAgICBjb25zdCBXZWJD
b3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yTWFwJiB1c2VyTWVzc2FnZUhhbmRsZXJE
ZXNjcmlwdG9ycygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdXNlck1lc3NhZ2VIYW5kbGVy
RGVzY3JpcHRvcnNNYXA7IH0KKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorICAgIFdl
YkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQmIHVzZXJD
b250ZW50RXh0ZW5zaW9uQmFja2VuZCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fY29udGVudEV4dGVu
c2lvbkJhY2tlbmQ7IH0KKyNlbmRpZgorCiAgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIuCiAg
ICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6Ok1lc3NhZ2VE
ZWNvZGVyJikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGFkZFVzZXJDb250ZW50V29ybGRzKGNvbnN0
IFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0X3QsIFN0cmluZz4+Jik7CiAgICAgdm9pZCByZW1vdmVV
c2VyQ29udGVudFdvcmxkcyhjb25zdCBWZWN0b3I8dWludDY0X3Q+Jik7CiAKLSAgICB2b2lkIGFk
ZFVzZXJTY3JpcHRzKGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0X3QsIFdlYkNvcmU6OlVz
ZXJTY3JpcHQ+PiYpOwotICAgIHZvaWQgcmVtb3ZlVXNlclNjcmlwdCh1aW50NjRfdCB3b3JsZElk
ZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKTsKKyAgICB2b2lkIGFkZFVzZXJTY3Jp
cHRzKGNvbnN0IFZlY3RvcjxXZWJVc2VyU2NyaXB0RGF0YT4mKTsKKyAgICB2b2lkIHJlbW92ZVVz
ZXJTY3JpcHQodWludDY0X3Qgd29ybGRJZGVudGlmaWVyLCB1aW50NjRfdCB1c2VyU2NyaXB0SWRl
bnRpZmllcik7CiAgICAgdm9pZCByZW1vdmVBbGxVc2VyU2NyaXB0cyhjb25zdCBWZWN0b3I8dWlu
dDY0X3Q+Jik7CiAKLSAgICB2b2lkIGFkZFVzZXJTdHlsZVNoZWV0cyhjb25zdCBWZWN0b3I8c3Rk
OjpwYWlyPHVpbnQ2NF90LCBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldD4+Jik7Ci0gICAgdm9pZCBy
ZW1vdmVVc2VyU3R5bGVTaGVldCh1aW50NjRfdCB3b3JsZElkZW50aWZpZXIsIGNvbnN0IFN0cmlu
ZyYgdXJsU3RyaW5nKTsKKyAgICB2b2lkIGFkZFVzZXJTdHlsZVNoZWV0cyhjb25zdCBWZWN0b3I8
V2ViVXNlclN0eWxlU2hlZXREYXRhPiYpOworICAgIHZvaWQgcmVtb3ZlVXNlclN0eWxlU2hlZXQo
dWludDY0X3Qgd29ybGRJZGVudGlmaWVyLCB1aW50NjRfdCB1c2VyU2NyaXB0SWRlbnRpZmllcik7
CiAgICAgdm9pZCByZW1vdmVBbGxVc2VyU3R5bGVTaGVldHMoY29uc3QgVmVjdG9yPHVpbnQ2NF90
PiYpOwogCiAgICAgdm9pZCBhZGRVc2VyU2NyaXB0TWVzc2FnZUhhbmRsZXJzKGNvbnN0IFZlY3Rv
cjxXZWJTY3JpcHRNZXNzYWdlSGFuZGxlckhhbmRsZT4mKTsKQEAgLTczLDExICs5NywyNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgcmVtb3ZlQWxsVXNlckNvbnRlbnRFeHRlbnNpb25zKCk7CiAjZW5k
aWYKIAorCisgICAgdm9pZCBhZGRVc2VyU2NyaXB0SW50ZXJuYWwoSW5qZWN0ZWRCdW5kbGVTY3Jp
cHRXb3JsZCYsIHVpbnQ2NF90IHVzZXJTY3JpcHRJZGVudGlmaWVyLCBXZWJDb3JlOjpVc2VyU2Ny
aXB0JiYpOworICAgIHZvaWQgcmVtb3ZlVXNlclNjcmlwdEludGVybmFsKEluamVjdGVkQnVuZGxl
U2NyaXB0V29ybGQmLCB1aW50NjRfdCB1c2VyU2NyaXB0SWRlbnRpZmllcik7CisgICAgdm9pZCBh
ZGRVc2VyU3R5bGVTaGVldEludGVybmFsKEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQmLCB1aW50
NjRfdCB1c2VyU3R5bGVTaGVldElkZW50aWZpZXIsIFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0JiYp
OworICAgIHZvaWQgcmVtb3ZlVXNlclN0eWxlU2hlZXRJbnRlcm5hbChJbmplY3RlZEJ1bmRsZVNj
cmlwdFdvcmxkJiwgdWludDY0X3QgdXNlclN0eWxlU2hlZXRJZGVudGlmaWVyKTsKKworCiAgICAg
dWludDY0X3QgbV9pZGVudGlmaWVyOwotICAgIFJlZjxXZWJDb3JlOjpVc2VyQ29udGVudENvbnRy
b2xsZXI+IG1fdXNlckNvbnRlbnRDb250cm9sbGVyOwotI2lmIEVOQUJMRShVU0VSX01FU1NBR0Vf
SEFORExFUlMpCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlVzZXJNZXNzYWdlSGFu
ZGxlckRlc2NyaXB0b3JQcm94eT4+IG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnM7CisK
KyAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQ+LCBW
ZWN0b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBXZWJDb3JlOjpVc2VyU2NyaXB0Pj4+IFdvcmxkVG9V
c2VyU2NyaXB0TWFwOworICAgIFdvcmxkVG9Vc2VyU2NyaXB0TWFwIG1fdXNlclNjcmlwdHM7CisK
KyAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQ+LCBW
ZWN0b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldD4+PiBXb3Js
ZFRvVXNlclN0eWxlU2hlZXRNYXA7CisgICAgV29ybGRUb1VzZXJTdHlsZVNoZWV0TWFwIG1fdXNl
clN0eWxlU2hlZXRzOworCisgICAgV2ViQ29yZTo6VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRv
ck1hcCBtX3VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzTWFwOworI2lmIEVOQUJMRShDT05U
RU5UX0VYVEVOU0lPTlMpCisgICAgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRF
eHRlbnNpb25zQmFja2VuZCBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kOwogI2VuZGlmCisKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIubWVzc2FnZXMuaW4KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29u
dGVudENvbnRyb2xsZXIubWVzc2FnZXMuaW4JKHJldmlzaW9uIDE5NzkzOSkKKysrIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLm1l
c3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMiArMjcsMTIgQEAgbWVzc2FnZXMgLT4g
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyIHsKICAgICBBZGRVc2VyQ29udGVudFdvcmxkcyhWZWN0
b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBTdHJpbmc+PiB3b3JsZHMpOwogICAgIFJlbW92ZVVzZXJD
b250ZW50V29ybGRzKFZlY3Rvcjx1aW50NjRfdD4gd29ybGRJZGVudGlmaWVycyk7CiAKLSAgICBB
ZGRVc2VyU2NyaXB0cyhWZWN0b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBXZWJDb3JlOjpVc2VyU2Ny
aXB0Pj4gdXNlclNjcmlwdHMpOwotICAgIFJlbW92ZVVzZXJTY3JpcHQodWludDY0X3Qgd29ybGRJ
ZGVudGlmaWVyLCBTdHJpbmcgdXJsKTsKKyAgICBBZGRVc2VyU2NyaXB0cyhWZWN0b3I8c3RydWN0
IFdlYktpdDo6V2ViVXNlclNjcmlwdERhdGE+IHVzZXJTY3JpcHRzKTsKKyAgICBSZW1vdmVVc2Vy
U2NyaXB0KHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllciwgdWludDY0X3QgaWRlbnRpZmllcik7CiAg
ICAgUmVtb3ZlQWxsVXNlclNjcmlwdHMoVmVjdG9yPHVpbnQ2NF90PiB3b3JsZElkZW50aWZpZXJz
KTsKIAotICAgIEFkZFVzZXJTdHlsZVNoZWV0cyhWZWN0b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBX
ZWJDb3JlOjpVc2VyU3R5bGVTaGVldD4+IHVzZXJTdHlsZVNoZWV0cyk7Ci0gICAgUmVtb3ZlVXNl
clN0eWxlU2hlZXQodWludDY0X3Qgd29ybGRJZGVudGlmaWVyLCBTdHJpbmcgdXJsKTsKKyAgICBB
ZGRVc2VyU3R5bGVTaGVldHMoVmVjdG9yPHN0cnVjdCBXZWJLaXQ6OldlYlVzZXJTdHlsZVNoZWV0
RGF0YT4gdXNlclN0eWxlU2hlZXRzKTsKKyAgICBSZW1vdmVVc2VyU3R5bGVTaGVldCh1aW50NjRf
dCB3b3JsZElkZW50aWZpZXIsIHVpbnQ2NF90IGlkZW50aWZpZXIpOwogICAgIFJlbW92ZUFsbFVz
ZXJTdHlsZVNoZWV0cyhWZWN0b3I8dWludDY0X3Q+IHdvcmxkSWRlbnRpZmllcnMpOwogCiAgICAg
QWRkVXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVycyhWZWN0b3I8V2ViS2l0OjpXZWJTY3JpcHRNZXNz
YWdlSGFuZGxlckhhbmRsZT4gc2NyaXB0TWVzc2FnZUhhbmRsZXJzKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDE5Nzkz
OSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkV2ZW50RGlzcGF0Y2hlci5o
IgogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVC
YWNrRm9yd2FyZExpc3QuaCIKKyNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkLmgi
CiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHNjYXBlUGx1Z2luLmgiCiAjaW5j
bHVkZSAiTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmgiCkBAIC0zOTYsNyAr
Mzk3LDcgQEAgV2ViUGFnZTo6V2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IAogCiAgICAg
cGFnZUNvbmZpZ3VyYXRpb24uZGF0YWJhc2VQcm92aWRlciA9IFdlYkRhdGFiYXNlUHJvdmlkZXI6
OmdldE9yQ3JlYXRlKG1fcGFnZUdyb3VwLT5wYWdlR3JvdXBJRCgpKTsKICAgICBwYWdlQ29uZmln
dXJhdGlvbi5zdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIgPSBXZWJTdG9yYWdlTmFtZXNwYWNlUHJv
dmlkZXI6OmdldE9yQ3JlYXRlKG1fcGFnZUdyb3VwLT5wYWdlR3JvdXBJRCgpKTsKLSAgICBwYWdl
Q29uZmlndXJhdGlvbi51c2VyQ29udGVudENvbnRyb2xsZXIgPSAmbV91c2VyQ29udGVudENvbnRy
b2xsZXItPnVzZXJDb250ZW50Q29udHJvbGxlcigpOworICAgIHBhZ2VDb25maWd1cmF0aW9uLnVz
ZXJDb250ZW50UHJvdmlkZXIgPSBtX3VzZXJDb250ZW50Q29udHJvbGxlci5wdHIoKTsKICAgICBw
YWdlQ29uZmlndXJhdGlvbi52aXNpdGVkTGlua1N0b3JlID0gVmlzaXRlZExpbmtUYWJsZUNvbnRy
b2xsZXI6OmdldE9yQ3JlYXRlKHBhcmFtZXRlcnMudmlzaXRlZExpbmtUYWJsZUlEKTsKIAogI2lm
IFVTRShBUFBMRV9JTlRFUk5BTF9TREspCkBAIC01MjE2LDIxICs1MjE3LDIxIEBAIHZvaWQgV2Vi
UGFnZTo6aW1hZ2VPck1lZGlhRG9jdW1lbnRTaXplQ2gKIAogdm9pZCBXZWJQYWdlOjphZGRVc2Vy
U2NyaXB0KGNvbnN0IFN0cmluZyYgc291cmNlLCBXZWJDb3JlOjpVc2VyQ29udGVudEluamVjdGVk
RnJhbWVzIGluamVjdGVkRnJhbWVzLCBXZWJDb3JlOjpVc2VyU2NyaXB0SW5qZWN0aW9uVGltZSBp
bmplY3Rpb25UaW1lKQogewotICAgIFdlYkNvcmU6OlVzZXJTY3JpcHQgdXNlclNjcmlwdChzb3Vy
Y2UsIFdlYkNvcmU6OmJsYW5rVVJMKCksIFZlY3RvcjxTdHJpbmc+KCksIFZlY3RvcjxTdHJpbmc+
KCksIGluamVjdGlvblRpbWUsIGluamVjdGVkRnJhbWVzKTsKKyAgICBXZWJDb3JlOjpVc2VyU2Ny
aXB0IHVzZXJTY3JpcHR7IHNvdXJjZSwgV2ViQ29yZTo6YmxhbmtVUkwoKSwgVmVjdG9yPFN0cmlu
Zz4oKSwgVmVjdG9yPFN0cmluZz4oKSwgaW5qZWN0aW9uVGltZSwgaW5qZWN0ZWRGcmFtZXMgfTsK
IAotICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT51c2VyQ29udGVudENvbnRyb2xsZXIoKS5h
ZGRVc2VyU2NyaXB0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpLCBzdGQ6Om1ha2VfdW5pcXVlPFdl
YkNvcmU6OlVzZXJTY3JpcHQ+KHVzZXJTY3JpcHQpKTsKKyAgICBtX3VzZXJDb250ZW50Q29udHJv
bGxlci0+YWRkVXNlclNjcmlwdCgqSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZDo6bm9ybWFsV29y
bGQoKSwgV1RGTW92ZSh1c2VyU2NyaXB0KSk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6YWRkVXNlclN0
eWxlU2hlZXQoY29uc3QgU3RyaW5nJiBzb3VyY2UsIFdlYkNvcmU6OlVzZXJDb250ZW50SW5qZWN0
ZWRGcmFtZXMgaW5qZWN0ZWRGcmFtZXMpCiB7Ci0gICAgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQg
dXNlclN0eWxlU2hlZXQoc291cmNlLCBXZWJDb3JlOjpibGFua1VSTCgpLCBWZWN0b3I8U3RyaW5n
PigpLCBWZWN0b3I8U3RyaW5nPigpLCBpbmplY3RlZEZyYW1lcywgVXNlclN0eWxlVXNlckxldmVs
KTsKKyAgICBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCB1c2VyU3R5bGVTaGVldHsgc291cmNlLCBX
ZWJDb3JlOjpibGFua1VSTCgpLCBWZWN0b3I8U3RyaW5nPigpLCBWZWN0b3I8U3RyaW5nPigpLCBp
bmplY3RlZEZyYW1lcywgVXNlclN0eWxlVXNlckxldmVsIH07CiAKLSAgICBtX3VzZXJDb250ZW50
Q29udHJvbGxlci0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkuYWRkVXNlclN0eWxlU2hlZXQobWFp
blRocmVhZE5vcm1hbFdvcmxkKCksIHN0ZDo6bWFrZV91bmlxdWU8V2ViQ29yZTo6VXNlclN0eWxl
U2hlZXQ+KHVzZXJTdHlsZVNoZWV0KSwgSW5qZWN0SW5FeGlzdGluZ0RvY3VtZW50cyk7CisgICAg
bV91c2VyQ29udGVudENvbnRyb2xsZXItPmFkZFVzZXJTdHlsZVNoZWV0KCpJbmplY3RlZEJ1bmRs
ZVNjcmlwdFdvcmxkOjpub3JtYWxXb3JsZCgpLCBXVEZNb3ZlKHVzZXJTdHlsZVNoZWV0KSk7CiB9
CiAKIHZvaWQgV2ViUGFnZTo6cmVtb3ZlQWxsVXNlckNvbnRlbnQoKQogewotICAgIG1fdXNlckNv
bnRlbnRDb250cm9sbGVyLT51c2VyQ29udGVudENvbnRyb2xsZXIoKS5yZW1vdmVBbGxVc2VyQ29u
dGVudCgpOworICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5yZW1vdmVBbGxVc2VyQ29udGVu
dCgpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmRpc3BhdGNoRGlkTGF5b3V0KFdlYkNvcmU6OkxheW91
dE1pbGVzdG9uZXMgbWlsZXN0b25lcykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmNwcAkocmV2aXNpb24gMTk3
OTM5KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFBy
b3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsOSArNTYsOSBAQCBXZWJQYWdlR3JvdXBQcm94
eTo6fldlYlBhZ2VHcm91cFByb3h5KCkKIHsKIH0KIAotV2ViQ29yZTo6VXNlckNvbnRlbnRDb250
cm9sbGVyJiBXZWJQYWdlR3JvdXBQcm94eTo6dXNlckNvbnRlbnRDb250cm9sbGVyKCkKK1dlYlVz
ZXJDb250ZW50Q29udHJvbGxlciYgV2ViUGFnZUdyb3VwUHJveHk6OnVzZXJDb250ZW50Q29udHJv
bGxlcigpCiB7Ci0gICAgcmV0dXJuIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT51c2VyQ29udGVu
dENvbnRyb2xsZXIoKTsKKyAgICByZXR1cm4gbV91c2VyQ29udGVudENvbnRyb2xsZXI7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmgJKHJldmlzaW9uIDE5NzkzOSkK
KysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IGNsYXNzIFBhZ2VHcm91cDsKLWNsYXNzIFVzZXJDb250ZW50Q29udHJvbGxlcjsKIH0KIAogbmFt
ZXNwYWNlIFdlYktpdCB7CkBAIC01MCw3ICs0OSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzVmlz
aWJsZVRvSGlzdG9yeUNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS52aXNpYmxlVG9IaXN0
b3J5Q2xpZW50OyB9CiAgICAgV2ViQ29yZTo6UGFnZUdyb3VwKiBjb3JlUGFnZUdyb3VwKCkgY29u
c3QgeyByZXR1cm4gbV9wYWdlR3JvdXA7IH0KIAotICAgIFdlYkNvcmU6OlVzZXJDb250ZW50Q29u
dHJvbGxlciYgdXNlckNvbnRlbnRDb250cm9sbGVyKCk7CisgICAgV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyJiB1c2VyQ29udGVudENvbnRyb2xsZXIoKTsKIAogcHJpdmF0ZToKICAgICBXZWJQYWdl
R3JvdXBQcm94eShjb25zdCBXZWJQYWdlR3JvdXBEYXRhJik7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxOTc5MzkpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxNi0wMy0wOCAgU2FtIFdlaW5pZyAgPHNhbUB3
ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBhIGJhc2VVUkwgcGFyYW1ldGVyIHRvIF9XS1VzZXJT
dHlsZVNoZWV0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTUyMTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfY29tbW9uSW5pdGlh
bGl6YXRpb25XaXRoRnJhbWVOYW1lOmdyb3VwTmFtZTpdKToKKyAgICAgICAgKC1bV2ViVmlldyBp
bml0U2ltcGxlSFRNTERvY3VtZW50V2l0aFN0eWxlOmZyYW1lOnByZWZlcmVuY2VzOmdyb3VwTmFt
ZTpdKToKKyAgICAgICAgKC1bV2ViVmlldyBzZXRHcm91cE5hbWU6XSk6CisgICAgICAgIFVwZGF0
ZSB0byBhY2NvdW50IGZvciB0aGUgbmFtZSBjaGFuZ2UgZnJvbSBVc2VyQ29udGVudENvbnRyb2xs
ZXIgLT4gVXNlckNvbnRlbnRQcm92aWRlci4KKwogMjAxNi0wMi0yMiAgSmVyIE5vYmxlICA8amVy
Lm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBFbmFibGUgQVZGb3VuZGF0aW9uTlNVUkxTZXNz
aW9uRW5hYmxlZCBieSBkZWZhdWx0CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3
Lm1tCShyZXZpc2lvbiAxOTc5MzkpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZp
ZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwMDQsNyArMTAwNCw3IEBAIC0gKHZvaWQpX2NvbW1v
bkluaXRpYWxpemF0aW9uV2l0aEZyYW1lTmEKICAgICBwYWdlQ29uZmlndXJhdGlvbi5wcm9ncmVz
c1RyYWNrZXJDbGllbnQgPSBuZXcgV2ViUHJvZ3Jlc3NUcmFja2VyQ2xpZW50KHNlbGYpOwogICAg
IHBhZ2VDb25maWd1cmF0aW9uLmRhdGFiYXNlUHJvdmlkZXIgPSAmV2ViRGF0YWJhc2VQcm92aWRl
cjo6c2luZ2xldG9uKCk7CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24uc3RvcmFnZU5hbWVzcGFjZVBy
b3ZpZGVyID0gJl9wcml2YXRlLT5ncm91cC0+c3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyKCk7Ci0g
ICAgcGFnZUNvbmZpZ3VyYXRpb24udXNlckNvbnRlbnRDb250cm9sbGVyID0gJl9wcml2YXRlLT5n
cm91cC0+dXNlckNvbnRlbnRDb250cm9sbGVyKCk7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24udXNl
ckNvbnRlbnRQcm92aWRlciA9ICZfcHJpdmF0ZS0+Z3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxl
cigpOwogICAgIHBhZ2VDb25maWd1cmF0aW9uLnZpc2l0ZWRMaW5rU3RvcmUgPSAmX3ByaXZhdGUt
Pmdyb3VwLT52aXNpdGVkTGlua1N0b3JlKCk7CiAgICAgX3ByaXZhdGUtPnBhZ2UgPSBuZXcgUGFn
ZShwYWdlQ29uZmlndXJhdGlvbik7CiAKQEAgLTEyNDksNyArMTI0OSw3IEBAIC0gKGlkKWluaXRT
aW1wbGVIVE1MRG9jdW1lbnRXaXRoU3R5bGU6KE4KICAgICBwYWdlQ29uZmlndXJhdGlvbi5wcm9n
cmVzc1RyYWNrZXJDbGllbnQgPSBuZXcgV2ViUHJvZ3Jlc3NUcmFja2VyQ2xpZW50KHNlbGYpOwog
ICAgIHBhZ2VDb25maWd1cmF0aW9uLmRhdGFiYXNlUHJvdmlkZXIgPSAmV2ViRGF0YWJhc2VQcm92
aWRlcjo6c2luZ2xldG9uKCk7CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24uc3RvcmFnZU5hbWVzcGFj
ZVByb3ZpZGVyID0gJl9wcml2YXRlLT5ncm91cC0+c3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyKCk7
Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24udXNlckNvbnRlbnRDb250cm9sbGVyID0gJl9wcml2YXRl
LT5ncm91cC0+dXNlckNvbnRlbnRDb250cm9sbGVyKCk7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24u
dXNlckNvbnRlbnRQcm92aWRlciA9ICZfcHJpdmF0ZS0+Z3JvdXAtPnVzZXJDb250ZW50Q29udHJv
bGxlcigpOwogICAgIHBhZ2VDb25maWd1cmF0aW9uLnZpc2l0ZWRMaW5rU3RvcmUgPSAmX3ByaXZh
dGUtPmdyb3VwLT52aXNpdGVkTGlua1N0b3JlKCk7CiAKICAgICBfcHJpdmF0ZS0+cGFnZSA9IG5l
dyBQYWdlKHBhZ2VDb25maWd1cmF0aW9uKTsKQEAgLTYyMDMsNyArNjIwMyw3IEBAIC0gKHZvaWQp
c2V0R3JvdXBOYW1lOihOU1N0cmluZyAqKWdyb3VwTmEKICAgICBpZiAoIV9wcml2YXRlLT5wYWdl
KQogICAgICAgICByZXR1cm47CiAKLSAgICBfcHJpdmF0ZS0+cGFnZS0+c2V0VXNlckNvbnRlbnRD
b250cm9sbGVyKCZfcHJpdmF0ZS0+Z3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigpKTsKKyAg
ICBfcHJpdmF0ZS0+cGFnZS0+c2V0VXNlckNvbnRlbnRQcm92aWRlcihfcHJpdmF0ZS0+Z3JvdXAt
PnVzZXJDb250ZW50Q29udHJvbGxlcigpKTsKICAgICBfcHJpdmF0ZS0+cGFnZS0+c2V0VmlzaXRl
ZExpbmtTdG9yZShfcHJpdmF0ZS0+Z3JvdXAtPnZpc2l0ZWRMaW5rU3RvcmUoKSk7CiAgICAgX3By
aXZhdGUtPnBhZ2UtPnNldEdyb3VwTmFtZShncm91cE5hbWUpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274002</attachid>
            <date>2016-03-14 12:47:01 -0700</date>
            <delta_ts>2016-03-14 12:59:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155219-20160314124649.patch</filename>
            <type>text/plain</type>
            <size>115713</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBAQAorMjAxNi0wMy0xNCAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBhIGJhc2VVUkwgcGFyYW1ldGVy
IHRvIF9XS1VzZXJTdHlsZVNoZWV0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTUyMTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAtIE1vdmVzIHRvIGEgbW9kZWwgZm9yIHVzZXIgY29udGVudCB3aGVyZSBp
bnN0ZWFkIG9mIGVhY2ggcGFnZSBoYXZpbmcgYSBXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xs
ZXIKKyAgICAgICAgICBvYmplY3QsIHdlIGhhdmUgYW4gYWJzdHJhY3QgV2ViQ29yZTo6VXNlckNv
bnRlbnRQcm92aWRlciBpbnRlcmZhY2UgdGhhdCBjYW4gYmUgaW1wbGVtZW50ZWQgYXQgdGhlIFdl
YktpdAorICAgICAgICAgIGxldmVsLiBGb3Igbm93LCBsZWdhY3kgV2ViS2l0IGNvbnRpbnVlcyB0
byB1c2UgdGhlIG9sZCBVc2VyQ29udGVudENvbnRyb2xsZXIsIHdoaWNoIGltcGxlbWVudHMgCisg
ICAgICAgICAgV2ViQ29yZTo6VXNlckNvbnRlbnRQcm92aWRlciwgYW5kIFdlYktpdDIgaW1wbGVt
ZW50cyBpdHMgb3duIGltcGxlbWVudGF0aW9uIHNvIGl0IGNhbiBzdG9yZSBhZGRpdGlvbmFsCisg
ICAgICAgICAgc3RhdGUuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgIEFkZCBuZXcgZmlsZXMuCisKKyAgICAgICAgKiBkb20vRXh0ZW5zaW9u
U3R5bGVTaGVldHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uU3R5bGVTaGVldHM6
OnVwZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlKToKKyAgICAgICAgU3dpdGNoIHRvIHVzaW5n
IGZvckVhY2hVc2VyU3R5bGVTaGVldCBvbiB0aGUgVXNlckNvbnRlbnRQcm92aWRlci4KKworICAg
ICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50Ojpsb2FkUmVzb3VyY2UpOgorICAgICAgICBSZW1vdmUgbnVsbCBjaGVjayBu
b3cgdGhhdCB3ZSBhbHdheXMgaGF2ZSBhIFVzZXJDb250ZW50UHJvdmlkZXIuCisKKyAgICAgICAg
KiBsb2FkZXIvRW1wdHlDbGllbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxXaXRoRW1w
dHlDbGllbnRzKToKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgIEFk
ZCBuZXcgRW1wdHlDbGllbnRzLgorCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5
KToKKyAgICAgICAgUmVtb3ZlIG51bGwgY2hlY2sgbm93IHRoYXQgd2UgYWx3YXlzIGhhdmUgYSBV
c2VyQ29udGVudFByb3ZpZGVyLgorCisgICAgICAgICogbG9hZGVyL1BpbmdMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQpOgor
ICAgICAgICBSZW1vdmUgbnVsbCBjaGVjayBub3cgdGhhdCB3ZSBhbHdheXMgaGF2ZSBhIFVzZXJD
b250ZW50UHJvdmlkZXIuCisKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdEludGVybmFs
KToKKyAgICAgICAgUmVtb3ZlIG51bGwgY2hlY2sgbm93IHRoYXQgd2UgYWx3YXlzIGhhdmUgYSBV
c2VyQ29udGVudFByb3ZpZGVyLgorCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpy
ZXF1ZXN0UmVzb3VyY2UpOgorICAgICAgICBSZW1vdmUgbnVsbCBjaGVjayBub3cgdGhhdCB3ZSBh
bHdheXMgaGF2ZSBhIFVzZXJDb250ZW50UHJvdmlkZXIuCisKKyAgICAgICAgKiBwYWdlL0RPTVdp
bmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OnNob3VsZEhhdmVXZWJLaXRO
YW1lc3BhY2VGb3JXb3JsZCk6CisgICAgICAgIFJlbW92ZSBudWxsIGNoZWNrcyBub3cgdGhhdCB3
ZSBhbHdheXMgaGF2ZSBhIFVzZXJDb250ZW50UHJvdmlkZXIsIGFuZCB1c2VyTWVzc2FnZUhhbmRs
ZXJEZXNjcmlwdG9ycworICAgICAgICByZXR1cm5zIGEgcmVmZXJlbmNlLgorCisgICAgICAgIChX
ZWJDb3JlOjpET01XaW5kb3c6Om9wZW4pOgorICAgICAgICBSZW1vdmUgbnVsbCBjaGVjayBub3cg
dGhhdCB3ZSBhbHdheXMgaGF2ZSBhIFVzZXJDb250ZW50UHJvdmlkZXIuCisKKyAgICAgICAgKiBw
YWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjppbmplY3RVc2VyU2NyaXB0
cyk6CisgICAgICAgIFNpbXBsaWZ5IGJ5IGxpZnRpbmcgZG9jdW1lbnQgY2hlY2sgb3V0IG9mIHRo
ZSBtYWluIGxvb3AgYW5kIHVzaW5nIGZvckVhY2hVc2VyU2NyaXB0LgorCisgICAgICAgICogcGFn
ZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OlBhZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZTo6flBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6dXNlckNvbnRlbnRQ
cm92aWRlcik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRVc2VyQ29udGVudFByb3ZpZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldFVzZXJDb250ZW50Q29udHJvbGxlcik6IERl
bGV0ZWQuCisgICAgICAgICogcGFnZS9QYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp1
c2VyQ29udGVudENvbnRyb2xsZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvUGFnZUNvbmZp
Z3VyYXRpb24uaDoKKyAgICAgICAgU3RvcmUgdGhlIFVzZXJDb250ZW50UHJvdmlkZXIgaW4gYSBS
ZWYsIGFuZCByZXF1aXJlIFBhZ2VDb25maWd1cmF0aW9ucyB0byBwcm92aWRlIG9uZS4gVGhpcwor
ICAgICAgICByZW1vdmVzIGEgYnVuY2ggb2YgbnVsbCBjaGVja3MgYW5kIHNpbXBsaWZpZXMgdGhl
IGNvZGUuCisKKyAgICAgICAgKiBwYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6On5Vc2VyQ29udGVudENvbnRyb2xs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRlbnRDb250cm9sbGVyOjpmb3JFYWNoVXNl
clNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OmZvckVh
Y2hVc2VyU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xs
ZXI6OmFkZFVzZXJTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRlbnRDb250cm9s
bGVyOjpyZW1vdmVVc2VyU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlwdHMpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRl
bnRDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpVc2Vy
Q29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNv
cmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclN0eWxlU2hlZXRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlck1lc3NhZ2VIYW5kbGVy
RGVzY3JpcHRvcik6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OnJl
bW92ZVVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IpOgorICAgICAgICAoV2ViQ29yZTo6VXNl
ckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyQ29udGVudEV4dGVuc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxsVXNl
ckNvbnRlbnRFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJv
bGxlcjo6cmVtb3ZlQWxsVXNlckNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRl
bnRDb250cm9sbGVyOjphZGRQYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlVzZXJD
b250ZW50Q29udHJvbGxlcjo6cmVtb3ZlUGFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
Ojpjb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
VXNlckNvbnRlbnRDb250cm9sbGVyOjpwcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9yTG9h
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OmFj
dGlvbnNGb3JSZXNvdXJjZUxvYWQpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvVXNlckNvbnRl
bnRDb250cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6
OnVzZXJTY3JpcHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6dXNlclN0eWxlU2hlZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlVz
ZXJDb250ZW50Q29udHJvbGxlcjo6dXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMpOiBEZWxl
dGVkLgorICAgICAgICBBZGQgaW5oZXJpdGFuY2UgZnJvbSBVc2VyQ29udGVudFByb3ZpZGVyIGFu
ZCBzaW1wbGlmeSB0aGluZ3MgYnkgcmVtb3ZpbmcgdW5pcXVlX3B0cnMKKyAgICAgICAgdGhhdCB3
ZXJlIGhvbGRpbmcgdGhlIG1lbWJlciB2YXJpYWJsZXMuIFRoZXJlIGlzIHVzdWFsbHkgb25seSBv
bmUgVXNlckNvbnRlbnRDb250cm9sbGVyCisgICAgICAgIHNvIGhhdmluZyB0aGVzZSBpbiB1bmlx
dWVfcHRycyBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZS4KKyAgICAgICAgCisgICAgICAgICogcGFn
ZS9Vc2VyQ29udGVudFByb3ZpZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpVc2Vy
Q29udGVudFByb3ZpZGVyOjpVc2VyQ29udGVudFByb3ZpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlVzZXJDb250ZW50UHJvdmlkZXI6On5Vc2VyQ29udGVudFByb3ZpZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlVzZXJDb250ZW50UHJvdmlkZXI6OmFkZFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
VXNlckNvbnRlbnRQcm92aWRlcjo6cmVtb3ZlUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpVc2Vy
Q29udGVudFByb3ZpZGVyOjppbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZy
YW1lc0luQWxsUGFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGVudEV4dGVuc2lvbnNFbmFi
bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50UHJvdmlkZXI6OnByb2Nlc3NDb250
ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50
UHJvdmlkZXI6OmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQpOgorICAgICAgICAqIHBhZ2UvVXNlckNv
bnRlbnRQcm92aWRlci5oOiBBZGRlZC4KKyAgICAgICAgQWRkIGFic3RyYWN0IGNsYXNzIGZvciBw
cm92aWRpbmcgdXNlciBjb250ZW50IGFuZCBhZGQgc29tZSBoZWxwZXJzIG9uIGl0LgorCisgICAg
ICAgICogcGFnZS9Vc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yLmg6CisgICAgICAgIChXZWJD
b3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcjo6Y2xpZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3I6OmludmFsaWRhdGVDbGllbnQpOgor
ICAgICAgICAqIHBhZ2UvVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlOjpoYW5kbGVyKToKKyAgICAg
ICAgU2ltcGxpZnkgbm93IHRoYXQgdXNlckNvbnRlbnRQcm92aWRlcigpIGFuZCB1c2VyTWVzc2Fn
ZUhhbmRsZXJEZXNjcmlwdG9ycygpIGFyZSByZWZlcmVuY2VzLgorCiAyMDE2LTAzLTE0ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgUmVncmVzc2lvbihyMTk3OTgx
KTogSHVnZSByZWdyZXNzaW9uIG9uIE1hYyBQTFQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5ODE0NykKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMjc0MCw2ICsyNzQwLDggQEAKIAkJN0MzQjc5NzIxOTA4NzU3QjAwQjQ3QTJE
IC8qIFVzZXJNZXNzYWdlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0MzQjc5NzAxOTA4NzU3QjAwQjQ3QTJEIC8qIFVzZXJNZXNzYWdlSGFu
ZGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTdDM0U1MTBBMThERjhGMzUwMEMxMTJGNyAvKiBIVE1MQ29udmVydGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzNFNTEwODE4REY4RjM1MDBDMTEy
RjcgLyogSFRNTENvbnZlcnRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTdDM0U1MTBCMThERjhGMzUwMEMxMTJGNyAvKiBIVE1MQ29udmVydGVy
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzRTUx
MDkxOERGOEYzNTAwQzExMkY3IC8qIEhUTUxDb252ZXJ0ZXIubW0gKi87IH07CisJCTdDM0YwMUMx
MUM4RTVBQkEwMEFERDk2MiAvKiBVc2VyQ29udGVudFByb3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzNGMDFDMDFDOEU1QUIxMDBBREQ5NjIg
LyogVXNlckNvbnRlbnRQcm92aWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTdDM0YwMUMyMUM4RTVBQzIwMEFERDk2MiAvKiBVc2VyQ29udGVu
dFByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdDM0YwMUJGMUM4RTVBQjEwMEFERDk2MiAvKiBVc2VyQ29udGVudFByb3ZpZGVyLmNwcCAq
LzsgfTsKIAkJN0M0OEE2RDAxOTFDOUQ2NTAwMDI2Njc0IC8qIFdlYktpdE5hbWVzcGFjZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzQ4QTZDRTE5
MUM5RDY1MDAwMjY2NzQgLyogV2ViS2l0TmFtZXNwYWNlLmNwcCAqLzsgfTsKIAkJN0M0OEE2RDEx
OTFDOUQ2NTAwMDI2Njc0IC8qIFdlYktpdE5hbWVzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M0OEE2Q0YxOTFDOUQ2NTAwMDI2Njc0IC8qIFdl
YktpdE5hbWVzcGFjZS5oICovOyB9OwogCQk3QzQ5MDJBMjE4QjgyNUY4MDA3RDkyOTggLyogRE9N
V2hlZWxFdmVudEludGVybmFsLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTk4OURDQTBBQ0M4QkJEMDBBMEJDNTEgLyogRE9N
V2hlZWxFdmVudEludGVybmFsLmggKi87IH07CkBAIC0xMDM4MSw2ICsxMDM4Myw4IEBACiAJCTdD
M0I3OTcwMTkwODc1N0IwMEI0N0EyRCAvKiBVc2VyTWVzc2FnZUhhbmRsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVXNlck1lc3NhZ2VIYW5kbGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdDM0U1MTA4MThERjhGMzUwMEMxMTJGNyAvKiBIVE1MQ29udmVy
dGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxDb252ZXJ0ZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MzRTUxMDkxOERGOEYzNTAwQzExMkY3IC8q
IEhUTUxDb252ZXJ0ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBIVE1MQ29udmVydGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzNGMDFC
RjFDOEU1QUIxMDBBREQ5NjIgLyogVXNlckNvbnRlbnRQcm92aWRlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVc2VyQ29udGVudFByb3ZpZGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MzRjAxQzAxQzhFNUFCMTAwQUREOTYyIC8qIFVzZXJD
b250ZW50UHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVXNlckNv
bnRlbnRQcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzQxODlBQjFC
MDdDMTcwMDAwRkE3NTcgLyogR2xvYmFsRXZlbnRIYW5kbGVycy5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gR2xvYmFsRXZl
bnRIYW5kbGVycy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDNDE4OUFDMUIw
N0NCRjIwMDBGQTc1NyAvKiBXaW5kb3dFdmVudEhhbmRsZXJzLmlkbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXaW5kb3dFdmVu
dEhhbmRsZXJzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M0OEE2Q0UxOTFD
OUQ2NTAwMDI2Njc0IC8qIFdlYktpdE5hbWVzcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXZWJLaXROYW1lc3BhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTgxMTksNiArMTgxMjMsOCBAQAogCQkJCTJENEY5NkYyMUExRUNDMjQwMDk4
QkY4OCAvKiBUZXh0SW5kaWNhdG9yLmggKi8sCiAJCQkJMUFFNzlENDAxODhEQjYxRjAwMjIzOUMy
IC8qIFVzZXJDb250ZW50Q29udHJvbGxlci5jcHAgKi8sCiAJCQkJMUFFNzlENDExODhEQjYxRjAw
MjIzOUMyIC8qIFVzZXJDb250ZW50Q29udHJvbGxlci5oICovLAorCQkJCTdDM0YwMUJGMUM4RTVB
QjEwMEFERDk2MiAvKiBVc2VyQ29udGVudFByb3ZpZGVyLmNwcCAqLywKKwkJCQk3QzNGMDFDMDFD
OEU1QUIxMDBBREQ5NjIgLyogVXNlckNvbnRlbnRQcm92aWRlci5oICovLAogCQkJCTAwM0YxRkU5
MTFFNkFCNDMwMDgyNThEOSAvKiBVc2VyQ29udGVudFR5cGVzLmggKi8sCiAJCQkJQkNBQ0YzQkEx
MDcyOTIxQTAwQzBDOEEzIC8qIFVzZXJDb250ZW50VVJMUGF0dGVybi5jcHAgKi8sCiAJCQkJQkNB
Q0YzQkIxMDcyOTIxQTAwQzBDOEEzIC8qIFVzZXJDb250ZW50VVJMUGF0dGVybi5oICovLApAQCAt
MjgyNTIsNiArMjgyNTgsNyBAQAogCQkJCTA4OEMyRjdBMTIzOTAwODEwMDNENjVDRSAvKiBTVkdU
ZXh0TGF5b3V0QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDgxMDkzREMxMjU1RjBF
NzAwRUQ5RDI5IC8qIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMDgxNjY4REExMjU2MDNENTAwNkYyNURFIC8qIFNWR1RleHRMYXlvdXRFbmdpbmUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTdDM0YwMUMxMUM4RTVBQkEwMEFERDk2MiAvKiBVc2VyQ29u
dGVudFByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODBFNDkyNjEyNTVGM0JEMDBFRkNB
MjcgLyogU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
ODBFNDkyODEyNTVGM0JEMDBFRkNBMjcgLyogU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuaCBp
biBIZWFkZXJzICovLAogCQkJCTA4RjBCRkM2MTI1NUM1M0MwMDA3NTE4NSAvKiBTVkdUZXh0TWV0
cmljcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDQyNyw2ICszMDQzNCw3IEBACiAJCQkJNTExRUYy
RDExN0YwRkRGMTAwRTRGQTE2IC8qIEpTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTExRUYyQzgxN0YwRkQzNTAwRTRGQTE2IC8qIEpTSURCT3BlbkRCUmVxdWVz
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTFFRjJDOTE3RjBGRDM1MDBFNEZBMTYgLyogSlNJ
REJSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdDM0YwMUMyMUM4RTVBQzIwMEFERDk2
MiAvKiBVc2VyQ29udGVudFByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMUVGMkNB
MTdGMEZEMzUwMEU0RkExNiAvKiBKU0lEQlRyYW5zYWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTUxMUVGMkNCMTdGMEZEMzUwMEU0RkExNiAvKiBKU0lEQlZlcnNpb25DaGFuZ2VFdmVudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzZDNDlGMzBEN0RCQTA1MDBGRkE1NTggLyogSlNJbWFn
ZUNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L0V4dGVuc2lvblN0eWxlU2hlZXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vRXh0ZW5zaW9uU3R5bGVTaGVldHMuY3BwCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRXh0ZW5zaW9uU3R5bGVTaGVldHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTcsNiArMTE3LDI0IEBAIHZvaWQgRXh0ZW5zaW9uU3R5bGVTaGVldHM6OnVwZGF0ZUluamVjdGUK
ICAgICBpZiAoIW93bmluZ1BhZ2UpCiAgICAgICAgIHJldHVybjsKIAorICAgIG93bmluZ1BhZ2Ut
PnVzZXJDb250ZW50UHJvdmlkZXIoKS5mb3JFYWNoVXNlclN0eWxlU2hlZXQoWyZdKGNvbnN0IFVz
ZXJTdHlsZVNoZWV0JiB1c2VyU3R5bGVTaGVldCkgeworICAgICAgICBpZiAodXNlclN0eWxlU2hl
ZXQuaW5qZWN0ZWRGcmFtZXMoKSA9PSBJbmplY3RJblRvcEZyYW1lT25seSAmJiBtX2RvY3VtZW50
Lm93bmVyRWxlbWVudCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICghVXNl
ckNvbnRlbnRVUkxQYXR0ZXJuOjptYXRjaGVzUGF0dGVybnMobV9kb2N1bWVudC51cmwoKSwgdXNl
clN0eWxlU2hlZXQud2hpdGVsaXN0KCksIHVzZXJTdHlsZVNoZWV0LmJsYWNrbGlzdCgpKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gc2hlZXQg
PSBDU1NTdHlsZVNoZWV0OjpjcmVhdGVJbmxpbmUoY29uc3RfY2FzdDxEb2N1bWVudCY+KG1fZG9j
dW1lbnQpLCB1c2VyU3R5bGVTaGVldC51cmwoKSk7CisgICAgICAgIGJvb2wgaXNVc2VyU3R5bGVT
aGVldCA9IHVzZXJTdHlsZVNoZWV0LmxldmVsKCkgPT0gVXNlclN0eWxlVXNlckxldmVsOworICAg
ICAgICBpZiAoaXNVc2VyU3R5bGVTaGVldCkKKyAgICAgICAgICAgIG1faW5qZWN0ZWRVc2VyU3R5
bGVTaGVldHMuYXBwZW5kKHNoZWV0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9pbmpl
Y3RlZEF1dGhvclN0eWxlU2hlZXRzLmFwcGVuZChzaGVldCk7CisKKyAgICAgICAgc2hlZXQtPmNv
bnRlbnRzKCkuc2V0SXNVc2VyU3R5bGVTaGVldChpc1VzZXJTdHlsZVNoZWV0KTsKKyAgICAgICAg
c2hlZXQtPmNvbnRlbnRzKCkucGFyc2VTdHJpbmcodXNlclN0eWxlU2hlZXQuc291cmNlKCkpOwor
ICAgIH0pOworICAgIAogICAgIGlmICghb3duaW5nUGFnZS0+Y2FwdGlvblVzZXJQcmVmZXJlbmNl
c1N0eWxlU2hlZXQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gSWRlbnRpZnkgb3VyIG92ZXJy
aWRlIHN0eWxlIHNoZWV0IHdpdGggYSB1bmlxdWUgVVJMIC0gYSBuZXcgc2NoZW1lIGFuZCBhIFVV
SUQuCiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxVUkw+IGNhcHRpb25zU3R5bGVTaGVl
dFVSTChQYXJzZWRVUkxTdHJpbmcsICJ1c2VyLWNhcHRpb25zLW92ZXJyaWRlOjAxRjZBRjEyLUMz
QjAtNEY3MC1BRjVFLUEzRTAwMjM0REMyMyIpOwpAQCAtMTI3LDM0ICsxNDUsNiBAQCB2b2lkIEV4
dGVuc2lvblN0eWxlU2hlZXRzOjp1cGRhdGVJbmplY3RlCiAgICAgICAgIHNoZWV0LT5jb250ZW50
cygpLnNldElzVXNlclN0eWxlU2hlZXQoZmFsc2UpOwogICAgICAgICBzaGVldC0+Y29udGVudHMo
KS5wYXJzZVN0cmluZyhvd25pbmdQYWdlLT5jYXB0aW9uVXNlclByZWZlcmVuY2VzU3R5bGVTaGVl
dCgpKTsKICAgICB9Ci0KLSAgICBjb25zdCBhdXRvKiB1c2VyQ29udGVudENvbnRyb2xsZXIgPSBv
d25pbmdQYWdlLT51c2VyQ29udGVudENvbnRyb2xsZXIoKTsKLSAgICBpZiAoIXVzZXJDb250ZW50
Q29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgVXNlclN0eWxlU2hlZXRN
YXAqIHVzZXJTdHlsZVNoZWV0cyA9IHVzZXJDb250ZW50Q29udHJvbGxlci0+dXNlclN0eWxlU2hl
ZXRzKCk7Ci0gICAgaWYgKCF1c2VyU3R5bGVTaGVldHMpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGZvciAoYXV0byYgc3R5bGVTaGVldHMgOiB1c2VyU3R5bGVTaGVldHMtPnZhbHVlcygpKSB7Ci0g
ICAgICAgIGZvciAoY29uc3QgYXV0byYgc2hlZXQgOiAqc3R5bGVTaGVldHMpIHsKLSAgICAgICAg
ICAgIGlmIChzaGVldC0+aW5qZWN0ZWRGcmFtZXMoKSA9PSBJbmplY3RJblRvcEZyYW1lT25seSAm
JiBtX2RvY3VtZW50Lm93bmVyRWxlbWVudCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgICAgICBpZiAoIVVzZXJDb250ZW50VVJMUGF0dGVybjo6bWF0Y2hlc1BhdHRlcm5z
KG1fZG9jdW1lbnQudXJsKCksIHNoZWV0LT53aGl0ZWxpc3QoKSwgc2hlZXQtPmJsYWNrbGlzdCgp
KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgUmVmUHRyPENTU1N0
eWxlU2hlZXQ+IGdyb3VwU2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGVJbmxpbmUoY29uc3Rf
Y2FzdDxEb2N1bWVudCY+KG1fZG9jdW1lbnQpLCBzaGVldC0+dXJsKCkpOwotICAgICAgICAgICAg
Ym9vbCBpc1VzZXJTdHlsZVNoZWV0ID0gc2hlZXQtPmxldmVsKCkgPT0gVXNlclN0eWxlVXNlckxl
dmVsOwotICAgICAgICAgICAgaWYgKGlzVXNlclN0eWxlU2hlZXQpCi0gICAgICAgICAgICAgICAg
bV9pbmplY3RlZFVzZXJTdHlsZVNoZWV0cy5hcHBlbmQoZ3JvdXBTaGVldCk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgbV9pbmplY3RlZEF1dGhvclN0eWxlU2hlZXRzLmFwcGVu
ZChncm91cFNoZWV0KTsKLQotICAgICAgICAgICAgZ3JvdXBTaGVldC0+Y29udGVudHMoKS5zZXRJ
c1VzZXJTdHlsZVNoZWV0KGlzVXNlclN0eWxlU2hlZXQpOwotICAgICAgICAgICAgZ3JvdXBTaGVl
dC0+Y29udGVudHMoKS5wYXJzZVN0cmluZyhzaGVldC0+c291cmNlKCkpOwotICAgICAgICB9Ci0g
ICAgfQogfQogCiB2b2lkIEV4dGVuc2lvblN0eWxlU2hlZXRzOjppbnZhbGlkYXRlSW5qZWN0ZWRT
dHlsZVNoZWV0Q2FjaGUoKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjU4LDcgKzEyNTgsNyBAQCB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OmxvYWRSZXNvdXJjZShjb25zCiAgICAgUmVzb3VyY2VSZXF1ZXN0IHJl
cXVlc3QodXJsKTsKICAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBmcmFtZS0+
bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKTsKIAotICAgIGlmIChwYWdlLT51c2VyQ29udGVudENv
bnRyb2xsZXIoKSAmJiBkb2N1bWVudExvYWRlciAmJiBwYWdlLT51c2VyQ29udGVudENvbnRyb2xs
ZXIoKS0+cHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQocmVxdWVzdCwgUmVzb3Vy
Y2VUeXBlOjpNZWRpYSwgKmRvY3VtZW50TG9hZGVyKSA9PSBDb250ZW50RXh0ZW5zaW9uczo6Qmxv
Y2tlZFN0YXR1czo6QmxvY2tlZCkgeworICAgIGlmIChkb2N1bWVudExvYWRlciAmJiBwYWdlLT51
c2VyQ29udGVudFByb3ZpZGVyKCkucHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQo
cmVxdWVzdCwgUmVzb3VyY2VUeXBlOjpNZWRpYSwgKmRvY3VtZW50TG9hZGVyKSA9PSBDb250ZW50
RXh0ZW5zaW9uczo6QmxvY2tlZFN0YXR1czo6QmxvY2tlZCkgewogICAgICAgICByZXF1ZXN0ID0g
eyB9OwogICAgICAgICBtZWRpYUxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6OkZvcm1hdEVycm9y
KTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xp
ZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50
cy5jcHAJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNs
aWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiU3Rv
cmFnZUFyZWEuaCIKICNpbmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAiU3Rv
cmFnZU5hbWVzcGFjZVByb3ZpZGVyLmgiCisjaW5jbHVkZSAiVXNlckNvbnRlbnRQcm92aWRlci5o
IgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCiAjaWYgVVNFKEFQUExFX0lOVEVS
TkFMX1NESykKQEAgLTk1LDcgKzk2LDE4IEBAIGNsYXNzIEVtcHR5U3RvcmFnZU5hbWVzcGFjZVBy
b3ZpZGVyIGZpbmEKICAgICB9CiB9OwogCi1jbGFzcyBFbXB0eVZpc2l0ZWRMaW5rU3RvcmUgOiBw
dWJsaWMgVmlzaXRlZExpbmtTdG9yZSB7CitjbGFzcyBFbXB0eVVzZXJDb250ZW50UHJvdmlkZXIg
ZmluYWwgOiBwdWJsaWMgVXNlckNvbnRlbnRQcm92aWRlciB7CisgICAgdm9pZCBmb3JFYWNoVXNl
clNjcmlwdChjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQoRE9NV3JhcHBlcldvcmxkJiwgY29uc3Qg
VXNlclNjcmlwdCYpPiYpIGNvbnN0IG92ZXJyaWRlIHsgfQorICAgIHZvaWQgZm9yRWFjaFVzZXJT
dHlsZVNoZWV0KGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBVc2VyU3R5bGVTaGVldCYp
PiYpIGNvbnN0IG92ZXJyaWRlIHsgfQorI2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMp
CisgICAgY29uc3QgVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvck1hcCYgdXNlck1lc3NhZ2VI
YW5kbGVyRGVzY3JpcHRvcnMoKSBjb25zdCBvdmVycmlkZSB7IHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yTWFwPiBtYXA7IHJldHVybiBtYXAuZ2V0KCk7
IH0KKyNlbmRpZgorI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisgICAgQ29udGVudEV4
dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCYgdXNlckNvbnRlbnRFeHRlbnNpb25C
YWNrZW5kKCkgb3ZlcnJpZGUgeyBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29udGVudEV4dGVuc2lv
bnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZD4gYmFja2VuZDsgcmV0dXJuIGJhY2tlbmQuZ2V0
KCk7IH07CisjZW5kaWYKK307CisKK2NsYXNzIEVtcHR5VmlzaXRlZExpbmtTdG9yZSBmaW5hbCA6
IHB1YmxpYyBWaXNpdGVkTGlua1N0b3JlIHsKICAgICBib29sIGlzTGlua1Zpc2l0ZWQoUGFnZSYs
IExpbmtIYXNoLCBjb25zdCBVUkwmLCBjb25zdCBBdG9taWNTdHJpbmcmKSBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQogICAgIHZvaWQgYWRkVmlzaXRlZExpbmsoUGFnZSYsIExpbmtIYXNoKSBv
dmVycmlkZSB7IH0KIH07CkBAIC0xMzIsNiArMTQ0LDcgQEAgdm9pZCBmaWxsV2l0aEVtcHR5Q2xp
ZW50cyhQYWdlQ29uZmlndXJhdAogCiAgICAgcGFnZUNvbmZpZ3VyYXRpb24uZGF0YWJhc2VQcm92
aWRlciA9IGFkb3B0UmVmKG5ldyBFbXB0eURhdGFiYXNlUHJvdmlkZXIpOwogICAgIHBhZ2VDb25m
aWd1cmF0aW9uLnN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlciA9IGFkb3B0UmVmKG5ldyBFbXB0eVN0
b3JhZ2VOYW1lc3BhY2VQcm92aWRlcik7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24udXNlckNvbnRl
bnRQcm92aWRlciA9IGFkb3B0UmVmKG5ldyBFbXB0eVVzZXJDb250ZW50UHJvdmlkZXIpOwogICAg
IHBhZ2VDb25maWd1cmF0aW9uLnZpc2l0ZWRMaW5rU3RvcmUgPSBhZG9wdFJlZihuZXcgRW1wdHlW
aXNpdGVkTGlua1N0b3JlKTsKIAogI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcg
KzM2LDYgQEAKICNpbmNsdWRlICJEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oIgogI2luY2x1ZGUg
IkRyYWdDbGllbnQuaCIKICNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKLSNpbmNsdWRlICJUZXh0
Q2hlY2tlckNsaWVudC5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZvY3Vz
RGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKQEAgLTQ0LDkgKzQz
LDE4IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlckNsaWVu
dC5oIgogI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKKyNpbmNsdWRlICJUZXh0Q2hlY2tlckNs
aWVudC5oIgogI2luY2x1ZGUgIlZpc2l0ZWRMaW5rU3RvcmUuaCIKICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdWaWV3Lmg+CiAKKyNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQorI2lu
Y2x1ZGUgIlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IuaCIKKyNlbmRpZgorCisjaWYgRU5B
QkxFKENPTlRFTlRfRVhURU5TSU9OUykKKyNpbmNsdWRlICJDb21waWxlZENvbnRlbnRFeHRlbnNp
b24uaCIKKyNlbmRpZgorCiAvKgogIFRoaXMgZmlsZSBob2xkcyBlbXB0eSBDbGllbnQgc3R1YnMg
Zm9yIHVzZSBieSBXZWJDb3JlLgogIFZpZXdsZXNzIGVsZW1lbnQgbmVlZHMgdG8gY3JlYXRlIGEg
ZHVtbXkgUGFnZS0+RnJhbWUtPkZyYW1lVmlldyB0cmVlIGZvciB1c2UgaW4gcGFyc2luZyBvciBl
eGVjdXRpbmcgSmF2YVNjcmlwdC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcAkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjczMCwxMyArMjczMCwxMSBAQCB1bnNpZ25lZCBs
b25nIEZyYW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5T
SU9OUykKICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIHBhZ2Ug
PSBtX2ZyYW1lLnBhZ2UoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8qIGNvbnRyb2xsZXIgPSBw
YWdlLT51c2VyQ29udGVudENvbnRyb2xsZXIoKSkgewotICAgICAgICAgICAgICAgIGlmIChtX2Rv
Y3VtZW50TG9hZGVyICYmIGNvbnRyb2xsZXItPnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNG
b3JMb2FkKG5ld1JlcXVlc3QsIFJlc291cmNlVHlwZTo6UmF3LCAqbV9kb2N1bWVudExvYWRlcikg
PT0gQ29udGVudEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXM6OkJsb2NrZWQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbmV3UmVxdWVzdCA9IHsgfTsKLSAgICAgICAgICAgICAgICAgICAgZXJyb3Ig
PSBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluV2ViS2l0SW50ZXJuYWwsIDAsIGluaXRpYWxSZXF1
ZXN0LnVybCgpLCBlbXB0eVN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Ug
PSB7IH07Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBudWxscHRyOwotICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChtX2RvY3VtZW50TG9hZGVyICYmIHBhZ2UtPnVzZXJDb250
ZW50UHJvdmlkZXIoKS5wcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9yTG9hZChuZXdSZXF1
ZXN0LCBSZXNvdXJjZVR5cGU6OlJhdywgKm1fZG9jdW1lbnRMb2FkZXIpID09IENvbnRlbnRFeHRl
bnNpb25zOjpCbG9ja2VkU3RhdHVzOjpCbG9ja2VkKSB7CisgICAgICAgICAgICAgICAgbmV3UmVx
dWVzdCA9IHsgfTsKKyAgICAgICAgICAgICAgICBlcnJvciA9IFJlc291cmNlRXJyb3IoZXJyb3JE
b21haW5XZWJLaXRJbnRlcm5hbCwgMCwgaW5pdGlhbFJlcXVlc3QudXJsKCksIGVtcHR5U3RyaW5n
KCkpOworICAgICAgICAgICAgICAgIHJlc3BvbnNlID0geyB9OworICAgICAgICAgICAgICAgIGRh
dGEgPSBudWxscHRyOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvbG9hZGVyL1BpbmdMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9QaW5nTG9hZGVyLmNwcAkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNl
L1dlYkNvcmUvbG9hZGVyL1BpbmdMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMCAr
NTksOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdGF0aWMgQ29udGVudEV4dGVuc2lvbnM6OkJs
b2NrZWRTdGF0dXMgcHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQoY29uc3QgRnJh
bWUmIGZyYW1lLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlVHlwZSByZXNvdXJj
ZVR5cGUpCiB7CiAgICAgaWYgKERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGZyYW1l
LmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkpIHsKLSAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBm
cmFtZS5wYWdlKCkpIHsKLSAgICAgICAgICAgIGlmIChVc2VyQ29udGVudENvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSBwYWdlLT51c2VyQ29udGVudENvbnRyb2xsZXIoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gY29udHJvbGxlci0+cHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQo
cmVxdWVzdCwgcmVzb3VyY2VUeXBlLCAqZG9jdW1lbnRMb2FkZXIpOwotICAgICAgICB9CisgICAg
ICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUucGFnZSgpKQorICAgICAgICAgICAgcmV0dXJuIHBh
Z2UtPnVzZXJDb250ZW50UHJvdmlkZXIoKS5wcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9y
TG9hZChyZXF1ZXN0LCByZXNvdXJjZVR5cGUsICpkb2N1bWVudExvYWRlcik7CiAgICAgfQogICAg
IHJldHVybiBDb250ZW50RXh0ZW5zaW9uczo6QmxvY2tlZFN0YXR1czo6Tm90QmxvY2tlZDsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24g
MTk4MTQ3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQ2LDggKzM0Niw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkZXI6OndpbGxT
ZW5kUmVxdWVzdEludGUKICAgICBpZiAoZnJhbWVMb2FkZXIoKSkgewogICAgICAgICBQYWdlKiBw
YWdlID0gZnJhbWVMb2FkZXIoKS0+ZnJhbWUoKS5wYWdlKCk7CiAgICAgICAgIGlmIChwYWdlICYm
IG1fZG9jdW1lbnRMb2FkZXIpIHsKLSAgICAgICAgICAgIGF1dG8qIHVzZXJDb250ZW50Q29udHJv
bGxlciA9IHBhZ2UtPnVzZXJDb250ZW50Q29udHJvbGxlcigpOwotICAgICAgICAgICAgaWYgKHVz
ZXJDb250ZW50Q29udHJvbGxlciAmJiB1c2VyQ29udGVudENvbnRyb2xsZXItPnByb2Nlc3NDb250
ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKHJlcXVlc3QsIG1fcmVzb3VyY2VUeXBlLCAqbV9kb2N1
bWVudExvYWRlcikgPT0gQ29udGVudEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXM6OkJsb2NrZWQp
CisgICAgICAgICAgICBpZiAocGFnZS0+dXNlckNvbnRlbnRQcm92aWRlcigpLnByb2Nlc3NDb250
ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKHJlcXVlc3QsIG1fcmVzb3VyY2VUeXBlLCAqbV9kb2N1
bWVudExvYWRlcikgPT0gQ29udGVudEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXM6OkJsb2NrZWQp
CiAgICAgICAgICAgICAgICAgcmVxdWVzdCA9IHsgfTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9h
ZGVyLmNwcAkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQyLDggKzU0Miw4
IEBAIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiBDYWMKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIGlmIChm
cmFtZSgpICYmIGZyYW1lKCktPm1haW5GcmFtZSgpLnBhZ2UoKSAmJiBmcmFtZSgpLT5tYWluRnJh
bWUoKS5wYWdlKCktPnVzZXJDb250ZW50Q29udHJvbGxlcigpICYmIG1fZG9jdW1lbnRMb2FkZXIp
IHsKLSAgICAgICAgaWYgKGZyYW1lKCktPm1haW5GcmFtZSgpLnBhZ2UoKS0+dXNlckNvbnRlbnRD
b250cm9sbGVyKCktPnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKHJlcXVlc3Qu
bXV0YWJsZVJlc291cmNlUmVxdWVzdCgpLCB0b1Jlc291cmNlVHlwZSh0eXBlKSwgKm1fZG9jdW1l
bnRMb2FkZXIpID09IENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzOjpCbG9ja2VkKSB7
CisgICAgaWYgKGZyYW1lKCkgJiYgZnJhbWUoKS0+bWFpbkZyYW1lKCkucGFnZSgpICYmIG1fZG9j
dW1lbnRMb2FkZXIpIHsKKyAgICAgICAgaWYgKGZyYW1lKCktPm1haW5GcmFtZSgpLnBhZ2UoKS0+
dXNlckNvbnRlbnRQcm92aWRlcigpLnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2Fk
KHJlcXVlc3QubXV0YWJsZVJlc291cmNlUmVxdWVzdCgpLCB0b1Jlc291cmNlVHlwZSh0eXBlKSwg
Km1fZG9jdW1lbnRMb2FkZXIpID09IENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzOjpC
bG9ja2VkKSB7CiAgICAgICAgICAgICBpZiAodHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6VHlwZTo6
TWFpblJlc291cmNlKSB7CiAgICAgICAgICAgICAgICAgYXV0byByZXNvdXJjZSA9IGNyZWF0ZVJl
c291cmNlKHR5cGUsIHJlcXVlc3QubXV0YWJsZVJlc291cmNlUmVxdWVzdCgpLCByZXF1ZXN0LmNo
YXJzZXQoKSwgc2Vzc2lvbklEKCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVChyZXNvdXJjZSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCShyZXZpc2lvbiAxOTgxNDcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2MSwx
NSArNzYxLDcgQEAgYm9vbCBET01XaW5kb3c6OnNob3VsZEhhdmVXZWJLaXROYW1lc3BhYwogICAg
IGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byogdXNlckNvbnRl
bnRDb250cm9sbGVyID0gcGFnZS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCk7Ci0gICAgaWYgKCF1
c2VyQ29udGVudENvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8q
IGRlc2NyaXB0b3JNYXAgPSB1c2VyQ29udGVudENvbnRyb2xsZXItPnVzZXJNZXNzYWdlSGFuZGxl
ckRlc2NyaXB0b3JzKCk7Ci0gICAgaWYgKCFkZXNjcmlwdG9yTWFwKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBmb3IgKGF1dG8mIGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9yTWFwLT52YWx1
ZXMoKSkgeworICAgIGZvciAoYXV0byYgZGVzY3JpcHRvciA6IHBhZ2UtPnVzZXJDb250ZW50UHJv
dmlkZXIoKS51c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycygpLnZhbHVlcygpKSB7CiAgICAg
ICAgIGlmICgmZGVzY3JpcHRvci0+d29ybGQoKSA9PSAmd29ybGQpCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CkBAIC0yMTY4LDExICsyMTYwLDEwIEBAIFBhc3NSZWZQdHI8RE9NV2lu
ZG93PiBET01XaW5kb3c6Om9wZW4oY28KICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQog
ICAgIGlmIChmaXJzdEZyYW1lLT5kb2N1bWVudCgpCiAgICAgICAgICYmIGZpcnN0RnJhbWUtPm1h
aW5GcmFtZSgpLnBhZ2UoKQotICAgICAgICAmJiBmaXJzdEZyYW1lLT5tYWluRnJhbWUoKS5wYWdl
KCktPnVzZXJDb250ZW50Q29udHJvbGxlcigpCiAgICAgICAgICYmIGZpcnN0RnJhbWUtPm1haW5G
cmFtZSgpLmRvY3VtZW50KCkKICAgICAgICAgJiYgZmlyc3RGcmFtZS0+bWFpbkZyYW1lKCkuZG9j
dW1lbnQoKS0+bG9hZGVyKCkpIHsKLSAgICAgICAgUmVzb3VyY2VMb2FkSW5mbyByZXNvdXJjZUxv
YWRJbmZvID0ge2ZpcnN0RnJhbWUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybFN0cmluZyks
IGZpcnN0RnJhbWUtPm1haW5GcmFtZSgpLmRvY3VtZW50KCktPnVybCgpLCBSZXNvdXJjZVR5cGU6
OlBvcHVwfTsKLSAgICAgICAgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb24+IGFjdGlv
bnMgPSBmaXJzdEZyYW1lLT5tYWluRnJhbWUoKS5wYWdlKCktPnVzZXJDb250ZW50Q29udHJvbGxl
cigpLT5hY3Rpb25zRm9yUmVzb3VyY2VMb2FkKHJlc291cmNlTG9hZEluZm8sICpmaXJzdEZyYW1l
LT5tYWluRnJhbWUoKS5kb2N1bWVudCgpLT5sb2FkZXIoKSk7CisgICAgICAgIFJlc291cmNlTG9h
ZEluZm8gcmVzb3VyY2VMb2FkSW5mbyA9IHsgZmlyc3RGcmFtZS0+ZG9jdW1lbnQoKS0+Y29tcGxl
dGVVUkwodXJsU3RyaW5nKSwgZmlyc3RGcmFtZS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKS0+dXJs
KCksIFJlc291cmNlVHlwZTo6UG9wdXAgfTsKKyAgICAgICAgVmVjdG9yPENvbnRlbnRFeHRlbnNp
b25zOjpBY3Rpb24+IGFjdGlvbnMgPSBmaXJzdEZyYW1lLT5tYWluRnJhbWUoKS5wYWdlKCktPnVz
ZXJDb250ZW50UHJvdmlkZXIoKS5hY3Rpb25zRm9yUmVzb3VyY2VMb2FkKHJlc291cmNlTG9hZElu
Zm8sICpmaXJzdEZyYW1lLT5tYWluRnJhbWUoKS5kb2N1bWVudCgpLT5sb2FkZXIoKSk7CiAgICAg
ICAgIGZvciAoY29uc3QgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvbiYgYWN0aW9uIDogYWN0aW9u
cykgewogICAgICAgICAgICAgaWYgKGFjdGlvbi50eXBlKCkgPT0gQ29udGVudEV4dGVuc2lvbnM6
OkFjdGlvblR5cGU6OkJsb2NrTG9hZCkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjg5LDM1ICs2ODksMTcgQEAg
dm9pZCBGcmFtZTo6aW5qZWN0VXNlclNjcmlwdHMoVXNlclNjcmlwdAogICAgIGlmIChsb2FkZXIo
KS5zdGF0ZU1hY2hpbmUoKS5jcmVhdGluZ0luaXRpYWxFbXB0eURvY3VtZW50KCkgJiYgIXNldHRp
bmdzKCkuc2hvdWxkSW5qZWN0VXNlclNjcmlwdHNJbkluaXRpYWxFbXB0eURvY3VtZW50KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IGF1dG8qIHVzZXJDb250ZW50Q29udHJvbGxlciA9
IG1fcGFnZS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCk7Ci0gICAgaWYgKCF1c2VyQ29udGVudENv
bnRyb2xsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFdhbGsgdGhlIGhhc2h0YWJsZS4g
SW5qZWN0IGJ5IHdvcmxkLgotICAgIGNvbnN0IFVzZXJTY3JpcHRNYXAqIHVzZXJTY3JpcHRzID0g
dXNlckNvbnRlbnRDb250cm9sbGVyLT51c2VyU2NyaXB0cygpOwotICAgIGlmICghdXNlclNjcmlw
dHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoY29uc3QgYXV0byYgd29ybGRBbmRVc2Vy
U2NyaXB0IDogKnVzZXJTY3JpcHRzKQotICAgICAgICBpbmplY3RVc2VyU2NyaXB0c0Zvcldvcmxk
KCp3b3JsZEFuZFVzZXJTY3JpcHQua2V5LCAqd29ybGRBbmRVc2VyU2NyaXB0LnZhbHVlLCBpbmpl
Y3Rpb25UaW1lKTsKLX0KLQotdm9pZCBGcmFtZTo6aW5qZWN0VXNlclNjcmlwdHNGb3JXb3JsZChE
T01XcmFwcGVyV29ybGQmIHdvcmxkLCBjb25zdCBVc2VyU2NyaXB0VmVjdG9yJiB1c2VyU2NyaXB0
cywgVXNlclNjcmlwdEluamVjdGlvblRpbWUgaW5qZWN0aW9uVGltZSkKLXsKLSAgICBpZiAodXNl
clNjcmlwdHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEb2N1bWVudCogZG9j
ID0gZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvYykKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSB0
aGlzLT5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGZvciAoYXV0byYgc2NyaXB0IDogdXNlclNjcmlwdHMpIHsKLSAgICAgICAgaWYgKHNjcmlw
dC0+aW5qZWN0ZWRGcmFtZXMoKSA9PSBJbmplY3RJblRvcEZyYW1lT25seSAmJiBvd25lckVsZW1l
bnQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChzY3JpcHQtPmluamVj
dGlvblRpbWUoKSA9PSBpbmplY3Rpb25UaW1lICYmIFVzZXJDb250ZW50VVJMUGF0dGVybjo6bWF0
Y2hlc1BhdHRlcm5zKGRvYy0+dXJsKCksIHNjcmlwdC0+d2hpdGVsaXN0KCksIHNjcmlwdC0+Ymxh
Y2tsaXN0KCkpKQotICAgICAgICAgICAgbV9zY3JpcHQtPmV2YWx1YXRlSW5Xb3JsZChTY3JpcHRT
b3VyY2VDb2RlKHNjcmlwdC0+c291cmNlKCksIHNjcmlwdC0+dXJsKCkpLCB3b3JsZCk7Ci0gICAg
fQorICAgIG1fcGFnZS0+dXNlckNvbnRlbnRQcm92aWRlcigpLmZvckVhY2hVc2VyU2NyaXB0KFsm
XShET01XcmFwcGVyV29ybGQmIHdvcmxkLCBjb25zdCBVc2VyU2NyaXB0JiBzY3JpcHQpIHsKKyAg
ICAgICAgaWYgKHNjcmlwdC5pbmplY3RlZEZyYW1lcygpID09IEluamVjdEluVG9wRnJhbWVPbmx5
ICYmIG93bmVyRWxlbWVudCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChz
Y3JpcHQuaW5qZWN0aW9uVGltZSgpID09IGluamVjdGlvblRpbWUgJiYgVXNlckNvbnRlbnRVUkxQ
YXR0ZXJuOjptYXRjaGVzUGF0dGVybnMoZG9jdW1lbnQtPnVybCgpLCBzY3JpcHQud2hpdGVsaXN0
KCksIHNjcmlwdC5ibGFja2xpc3QoKSkpCisgICAgICAgICAgICBtX3NjcmlwdC0+ZXZhbHVhdGVJ
bldvcmxkKFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0LnNvdXJjZSgpLCBzY3JpcHQudXJsKCkpLCB3
b3JsZCk7CisgICAgfSk7CiB9CiAKIFJlbmRlclZpZXcqIEZyYW1lOjpjb250ZW50UmVuZGVyZXIo
KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODAsOCArMjgwLDYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBGcmFtZShQYWdlJiwgSFRNTEZyYW1lT3duZXJF
bGVtZW50KiwgRnJhbWVMb2FkZXJDbGllbnQmKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHZv
aWQgaW5qZWN0VXNlclNjcmlwdHNGb3JXb3JsZChET01XcmFwcGVyV29ybGQmLCBjb25zdCBVc2Vy
U2NyaXB0VmVjdG9yJiwgVXNlclNjcmlwdEluamVjdGlvblRpbWUpOwotCiAgICAgICAgIEhhc2hT
ZXQ8RnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyKj4gbV9kZXN0cnVjdGlvbk9ic2VydmVyczsKIAog
ICAgICAgICBNYWluRnJhbWUmIG1fbWFpbkZyYW1lOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCShy
ZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBACiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2lu
Y2x1ZGUgIlN1YmZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5o
IgotI2luY2x1ZGUgIlVzZXJDb250ZW50Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlVzZXJDb250
ZW50UHJvdmlkZXIuaCIKICNpbmNsdWRlICJVc2VySW5wdXRCcmlkZ2UuaCIKICNpbmNsdWRlICJW
aWV3U3RhdGVDaGFuZ2VPYnNlcnZlci5oIgogI2luY2x1ZGUgIlZpc2l0ZWRMaW5rU3RhdGUuaCIK
QEAgLTIzMSw3ICsyMzEsNyBAQCBQYWdlOjpQYWdlKFBhZ2VDb25maWd1cmF0aW9uJiBwYWdlQ29u
ZmlnCiAgICAgLCBtX2FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlKHBhZ2VDb25maWd1cmF0aW9uLmFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlID8gKldURk1vdmUocGFnZUNvbmZpZ3VyYXRpb24uYXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2UpIDogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnNpbmdsZXRvbigp
KQogICAgICwgbV9kYXRhYmFzZVByb3ZpZGVyKCpXVEZNb3ZlKHBhZ2VDb25maWd1cmF0aW9uLmRh
dGFiYXNlUHJvdmlkZXIpKQogICAgICwgbV9zdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIoKldURk1v
dmUocGFnZUNvbmZpZ3VyYXRpb24uc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyKSkKLSAgICAsIG1f
dXNlckNvbnRlbnRDb250cm9sbGVyKFdURk1vdmUocGFnZUNvbmZpZ3VyYXRpb24udXNlckNvbnRl
bnRDb250cm9sbGVyKSkKKyAgICAsIG1fdXNlckNvbnRlbnRQcm92aWRlcigqV1RGTW92ZShwYWdl
Q29uZmlndXJhdGlvbi51c2VyQ29udGVudFByb3ZpZGVyKSkKICAgICAsIG1fdmlzaXRlZExpbmtT
dG9yZSgqV1RGTW92ZShwYWdlQ29uZmlndXJhdGlvbi52aXNpdGVkTGlua1N0b3JlKSkKICAgICAs
IG1fc2Vzc2lvbklEKFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQogICAgICwgbV9pc0Ns
b3NpbmcoZmFsc2UpCkBAIC0yNDAsOSArMjQwLDcgQEAgUGFnZTo6UGFnZShQYWdlQ29uZmlndXJh
dGlvbiYgcGFnZUNvbmZpZwogCiAgICAgbV9zdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXItPmFkZFBh
Z2UoKnRoaXMpOwogCi0gICAgaWYgKG1fdXNlckNvbnRlbnRDb250cm9sbGVyKQotICAgICAgICBt
X3VzZXJDb250ZW50Q29udHJvbGxlci0+YWRkUGFnZSgqdGhpcyk7Ci0KKyAgICBtX3VzZXJDb250
ZW50UHJvdmlkZXItPmFkZFBhZ2UoKnRoaXMpOwogICAgIG1fdmlzaXRlZExpbmtTdG9yZS0+YWRk
UGFnZSgqdGhpcyk7CiAKICAgICBpZiAoIWFsbFBhZ2VzKSB7CkBAIC0yOTgsOSArMjk2LDcgQEAg
UGFnZTo6flBhZ2UoKQogI2VuZGlmCiAKICAgICBtX3N0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci0+
cmVtb3ZlUGFnZSgqdGhpcyk7Ci0KLSAgICBpZiAobV91c2VyQ29udGVudENvbnRyb2xsZXIpCi0g
ICAgICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5yZW1vdmVQYWdlKCp0aGlzKTsKKyAgICBt
X3VzZXJDb250ZW50UHJvdmlkZXItPnJlbW92ZVBhZ2UoKnRoaXMpOwogICAgIG1fdmlzaXRlZExp
bmtTdG9yZS0+cmVtb3ZlUGFnZSgqdGhpcyk7CiB9CiAKQEAgLTE4MTksMTUgKzE4MTUsMTYgQEAg
Ym9vbCBQYWdlOjphcmVQcm9tcHRzQWxsb3dlZCgpCiAgICAgcmV0dXJuICFtX2ZvcmJpZFByb21w
dHNEZXB0aDsKIH0KIAotdm9pZCBQYWdlOjpzZXRVc2VyQ29udGVudENvbnRyb2xsZXIoVXNlckNv
bnRlbnRDb250cm9sbGVyKiB1c2VyQ29udGVudENvbnRyb2xsZXIpCitVc2VyQ29udGVudFByb3Zp
ZGVyJiBQYWdlOjp1c2VyQ29udGVudFByb3ZpZGVyKCkKIHsKLSAgICBpZiAobV91c2VyQ29udGVu
dENvbnRyb2xsZXIpCi0gICAgICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5yZW1vdmVQYWdl
KCp0aGlzKTsKLQotICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyID0gdXNlckNvbnRlbnRDb250
cm9sbGVyOworICAgIHJldHVybiBtX3VzZXJDb250ZW50UHJvdmlkZXI7Cit9CiAKLSAgICBpZiAo
bV91c2VyQ29udGVudENvbnRyb2xsZXIpCi0gICAgICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVy
LT5hZGRQYWdlKCp0aGlzKTsKK3ZvaWQgUGFnZTo6c2V0VXNlckNvbnRlbnRQcm92aWRlcihSZWY8
VXNlckNvbnRlbnRQcm92aWRlcj4mJiB1c2VyQ29udGVudFByb3ZpZGVyKQoreworICAgIG1fdXNl
ckNvbnRlbnRQcm92aWRlci0+cmVtb3ZlUGFnZSgqdGhpcyk7CisgICAgbV91c2VyQ29udGVudFBy
b3ZpZGVyID0gV1RGTW92ZSh1c2VyQ29udGVudFByb3ZpZGVyKTsKKyAgICBtX3VzZXJDb250ZW50
UHJvdmlkZXItPmFkZFBhZ2UoKnRoaXMpOwogCiAgICAgaW52YWxpZGF0ZUluamVjdGVkU3R5bGVT
aGVldENhY2hlSW5BbGxGcmFtZXMoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCShyZXZpc2lvbiAx
OTgxNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MTIxLDcgKzEyMSw3IEBAIGNsYXNzIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOwogY2xhc3MgU2V0dGlu
Z3M7CiBjbGFzcyBTdG9yYWdlTmFtZXNwYWNlOwogY2xhc3MgU3RvcmFnZU5hbWVzcGFjZVByb3Zp
ZGVyOwotY2xhc3MgVXNlckNvbnRlbnRDb250cm9sbGVyOworY2xhc3MgVXNlckNvbnRlbnRQcm92
aWRlcjsKIGNsYXNzIFZhbGlkYXRpb25NZXNzYWdlQ2xpZW50OwogY2xhc3MgVmlld1N0YXRlQ2hh
bmdlT2JzZXJ2ZXI7CiBjbGFzcyBWaXNpdGVkTGlua1N0b3JlOwpAQCAtNDUwLDggKzQ1MCw4IEBA
IHB1YmxpYzoKICAgICBTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXImIHN0b3JhZ2VOYW1lc3BhY2VQ
cm92aWRlcigpIHsgcmV0dXJuIG1fc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmdldCgpOyB9CiAg
ICAgdm9pZCBzZXRTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIoUmVmPFN0b3JhZ2VOYW1lc3BhY2VQ
cm92aWRlcj4mJik7CiAKLSAgICBVc2VyQ29udGVudENvbnRyb2xsZXIqIHVzZXJDb250ZW50Q29u
dHJvbGxlcigpIHsgcmV0dXJuIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLmdldCgpOyB9Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRVc2VyQ29udGVudENvbnRyb2xsZXIoVXNlckNvbnRlbnRD
b250cm9sbGVyKik7CisgICAgVXNlckNvbnRlbnRQcm92aWRlciYgdXNlckNvbnRlbnRQcm92aWRl
cigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VXNlckNvbnRlbnRQcm92aWRlcihSZWY8
VXNlckNvbnRlbnRQcm92aWRlcj4mJik7CiAKICAgICBWaXNpdGVkTGlua1N0b3JlJiB2aXNpdGVk
TGlua1N0b3JlKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaXNpdGVkTGlua1N0b3Jl
KFJlZjxWaXNpdGVkTGlua1N0b3JlPiYmKTsKQEAgLTY3Niw3ICs2NzYsNyBAQCBwcml2YXRlOgog
ICAgIFJlZjxBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZT4gbV9hcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTsKICAgICBSZWY8RGF0YWJhc2VQcm92aWRlcj4gbV9kYXRhYmFzZVByb3ZpZGVyOwogICAgIFJl
ZjxTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXI+IG1fc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyOwot
ICAgIFJlZlB0cjxVc2VyQ29udGVudENvbnRyb2xsZXI+IG1fdXNlckNvbnRlbnRDb250cm9sbGVy
OworICAgIFJlZjxVc2VyQ29udGVudFByb3ZpZGVyPiBtX3VzZXJDb250ZW50UHJvdmlkZXI7CiAg
ICAgUmVmPFZpc2l0ZWRMaW5rU3RvcmU+IG1fdmlzaXRlZExpbmtTdG9yZTsKICAgICBSZWZQdHI8
V2hlZWxFdmVudFRlc3RUcmlnZ2VyPiBtX3Rlc3RUcmlnZ2VyOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2VDb25maWd1cmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlQ29uZmlndXJhdGlvbi5oCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2VDb25maWd1cmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcg
KzQ4LDcgQEAgY2xhc3MgSW5zcGVjdG9yQ2xpZW50OwogY2xhc3MgUGx1Z0luQ2xpZW50OwogY2xh
c3MgUHJvZ3Jlc3NUcmFja2VyQ2xpZW50OwogY2xhc3MgU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVy
OwotY2xhc3MgVXNlckNvbnRlbnRDb250cm9sbGVyOworY2xhc3MgVXNlckNvbnRlbnRQcm92aWRl
cjsKIGNsYXNzIFZhbGlkYXRpb25NZXNzYWdlQ2xpZW50OwogY2xhc3MgVmlzaXRlZExpbmtTdG9y
ZTsKIApAQCAtODQsNyArODQsNyBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlPiBhcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTsKICAgICBSZWZQdHI8RGF0YWJhc2VQ
cm92aWRlcj4gZGF0YWJhc2VQcm92aWRlcjsKICAgICBSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZVBy
b3ZpZGVyPiBzdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXI7Ci0gICAgUmVmUHRyPFVzZXJDb250ZW50
Q29udHJvbGxlcj4gdXNlckNvbnRlbnRDb250cm9sbGVyOworICAgIFJlZlB0cjxVc2VyQ29udGVu
dFByb3ZpZGVyPiB1c2VyQ29udGVudFByb3ZpZGVyOwogICAgIFJlZlB0cjxWaXNpdGVkTGlua1N0
b3JlPiB2aXNpdGVkTGlua1N0b3JlOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9V
c2VyQ29udGVudENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvVXNlckNvbnRlbnRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNywyNCArMjcsMTUgQEAKICNpbmNsdWRlICJVc2VyQ29udGVudENvbnRyb2xsZXIuaCIKIAog
I2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5j
bHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRlICJFeHRlbnNpb25TdHlsZVNoZWV0cy5o
IgotI2luY2x1ZGUgIk1haW5GcmFtZS5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJS
ZXNvdXJjZUxvYWRJbmZvLmgiCiAjaW5jbHVkZSAiVXNlclNjcmlwdC5oIgogI2luY2x1ZGUgIlVz
ZXJTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0NlbGxJbmxpbmVzLmg+Ci0jaW5j
bHVkZSA8cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+CiAKICNpZiBFTkFCTEUoVVNFUl9NRVNT
QUdFX0hBTkRMRVJTKQogI2luY2x1ZGUgIlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IuaCIK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSNpbmNsdWRlICJDb250
ZW50RXh0ZW5zaW9uQ29tcGlsZXIuaCIKLSNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9uc0JhY2tl
bmQuaCIKKyNpbmNsdWRlICJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uaCIKICNlbmRpZgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02MiwzNiArNTMsMzMgQEAgVXNlckNvbnRlbnRDb250cm9s
bGVyOjp+VXNlckNvbnRlbnRDb250cgogewogfQogCi12b2lkIFVzZXJDb250ZW50Q29udHJvbGxl
cjo6YWRkUGFnZShQYWdlJiBwYWdlKQordm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OmZvckVh
Y2hVc2VyU2NyaXB0KGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChET01XcmFwcGVyV29ybGQmLCBj
b25zdCBVc2VyU2NyaXB0Jik+JiBmdW5jdG9yKSBjb25zdAogewotICAgIEFTU0VSVCghbV9wYWdl
cy5jb250YWlucygmcGFnZSkpOwotICAgIG1fcGFnZXMuYWRkKCZwYWdlKTsKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIHdvcmxkQW5kVXNlclNjcmlwdFZlY3RvciA6IG1fdXNlclNjcmlwdHMpIHsKKyAg
ICAgICAgYXV0byYgd29ybGQgPSAqd29ybGRBbmRVc2VyU2NyaXB0VmVjdG9yLmtleS5nZXQoKTsK
KyAgICAgICAgZm9yIChjb25zdCBhdXRvJiB1c2VyU2NyaXB0IDogKndvcmxkQW5kVXNlclNjcmlw
dFZlY3Rvci52YWx1ZSkKKyAgICAgICAgICAgIGZ1bmN0b3Iod29ybGQsICp1c2VyU2NyaXB0KTsK
KyAgICB9CiB9CiAKLXZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVQYWdlKFBhZ2Um
IHBhZ2UpCit2b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6Zm9yRWFjaFVzZXJTdHlsZVNoZWV0
KGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBVc2VyU3R5bGVTaGVldCYpPiYgZnVuY3Rv
cikgY29uc3QKIHsKLSAgICBBU1NFUlQobV9wYWdlcy5jb250YWlucygmcGFnZSkpOwotICAgIG1f
cGFnZXMucmVtb3ZlKCZwYWdlKTsKKyAgICBmb3IgKGF1dG8mIHN0eWxlU2hlZXRWZWN0b3IgOiBt
X3VzZXJTdHlsZVNoZWV0cy52YWx1ZXMoKSkgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHN0
eWxlU2hlZXQgOiAqc3R5bGVTaGVldFZlY3RvcikKKyAgICAgICAgICAgIGZ1bmN0b3IoKnN0eWxl
U2hlZXQpOworICAgIH0KIH0KIAogdm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJT
Y3JpcHQoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgc3RkOjp1bmlxdWVfcHRyPFVzZXJTY3JpcHQ+
IHVzZXJTY3JpcHQpCiB7Ci0gICAgaWYgKCFtX3VzZXJTY3JpcHRzKQotICAgICAgICBtX3VzZXJT
Y3JpcHRzID0gc3RkOjptYWtlX3VuaXF1ZTxVc2VyU2NyaXB0TWFwPigpOwotCi0gICAgYXV0byYg
c2NyaXB0c0luV29ybGQgPSBtX3VzZXJTY3JpcHRzLT5hZGQoJndvcmxkLCBudWxscHRyKS5pdGVy
YXRvci0+dmFsdWU7Ci0gICAgaWYgKCFzY3JpcHRzSW5Xb3JsZCkKLSAgICAgICAgc2NyaXB0c0lu
V29ybGQgPSBzdGQ6Om1ha2VfdW5pcXVlPFVzZXJTY3JpcHRWZWN0b3I+KCk7CisgICAgYXV0byYg
c2NyaXB0c0luV29ybGQgPSBtX3VzZXJTY3JpcHRzLmVuc3VyZSgmd29ybGQsIFsmXSB7IHJldHVy
biBzdGQ6Om1ha2VfdW5pcXVlPFVzZXJTY3JpcHRWZWN0b3I+KCk7IH0pLml0ZXJhdG9yLT52YWx1
ZTsKICAgICBzY3JpcHRzSW5Xb3JsZC0+YXBwZW5kKFdURk1vdmUodXNlclNjcmlwdCkpOwogfQog
CiB2b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlwdChET01XcmFwcGVy
V29ybGQmIHdvcmxkLCBjb25zdCBVUkwmIHVybCkKIHsKLSAgICBpZiAoIW1fdXNlclNjcmlwdHMp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gaXQgPSBtX3VzZXJTY3JpcHRzLT5maW5kKCZ3
b3JsZCk7Ci0gICAgaWYgKGl0ID09IG1fdXNlclNjcmlwdHMtPmVuZCgpKQorICAgIGF1dG8gaXQg
PSBtX3VzZXJTY3JpcHRzLmZpbmQoJndvcmxkKTsKKyAgICBpZiAoaXQgPT0gbV91c2VyU2NyaXB0
cy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBzY3JpcHRzID0gaXQtPnZhbHVl
LmdldCgpOwpAQCAtMTAxLDI1ICs4OSwxNyBAQCB2b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6
cmVtb3ZlVXNlclNjCiAgICAgfQogCiAgICAgaWYgKHNjcmlwdHMtPmlzRW1wdHkoKSkKLSAgICAg
ICAgbV91c2VyU2NyaXB0cy0+cmVtb3ZlKGl0KTsKKyAgICAgICAgbV91c2VyU2NyaXB0cy5yZW1v
dmUoaXQpOwogfQogCiB2b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlw
dHMoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCkKIHsKLSAgICBpZiAoIW1fdXNlclNjcmlwdHMpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fdXNlclNjcmlwdHMtPnJlbW92ZSgmd29ybGQpOworICAg
IG1fdXNlclNjcmlwdHMucmVtb3ZlKCZ3b3JsZCk7CiB9CiAKIHZvaWQgVXNlckNvbnRlbnRDb250
cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldChET01XcmFwcGVyV29ybGQmIHdvcmxkLCBzdGQ6OnVu
aXF1ZV9wdHI8VXNlclN0eWxlU2hlZXQ+IHVzZXJTdHlsZVNoZWV0LCBVc2VyU3R5bGVJbmplY3Rp
b25UaW1lIGluamVjdGlvblRpbWUpCiB7Ci0gICAgaWYgKCFtX3VzZXJTdHlsZVNoZWV0cykKLSAg
ICAgICAgbV91c2VyU3R5bGVTaGVldHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFVzZXJTdHlsZVNoZWV0
TWFwPigpOwotCi0gICAgYXV0byYgc3R5bGVTaGVldHNJbldvcmxkID0gbV91c2VyU3R5bGVTaGVl
dHMtPmFkZCgmd29ybGQsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKLSAgICBpZiAoIXN0eWxl
U2hlZXRzSW5Xb3JsZCkKLSAgICAgICAgc3R5bGVTaGVldHNJbldvcmxkID0gc3RkOjptYWtlX3Vu
aXF1ZTxVc2VyU3R5bGVTaGVldFZlY3Rvcj4oKTsKKyAgICBhdXRvJiBzdHlsZVNoZWV0c0luV29y
bGQgPSBtX3VzZXJTdHlsZVNoZWV0cy5lbnN1cmUoJndvcmxkLCBbJl0geyByZXR1cm4gc3RkOjpt
YWtlX3VuaXF1ZTxVc2VyU3R5bGVTaGVldFZlY3Rvcj4oKTsgfSkuaXRlcmF0b3ItPnZhbHVlOwog
ICAgIHN0eWxlU2hlZXRzSW5Xb3JsZC0+YXBwZW5kKFdURk1vdmUodXNlclN0eWxlU2hlZXQpKTsK
IAogICAgIGlmIChpbmplY3Rpb25UaW1lID09IEluamVjdEluRXhpc3RpbmdEb2N1bWVudHMpCkBA
IC0xMjgsMTEgKzEwOCw4IEBAIHZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyU3R5
bGUKIAogdm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNoZWV0KERP
TVdyYXBwZXJXb3JsZCYgd29ybGQsIGNvbnN0IFVSTCYgdXJsKQogewotICAgIGlmICghbV91c2Vy
U3R5bGVTaGVldHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gaXQgPSBtX3VzZXJTdHls
ZVNoZWV0cy0+ZmluZCgmd29ybGQpOwotICAgIGlmIChpdCA9PSBtX3VzZXJTdHlsZVNoZWV0cy0+
ZW5kKCkpCisgICAgYXV0byBpdCA9IG1fdXNlclN0eWxlU2hlZXRzLmZpbmQoJndvcmxkKTsKKyAg
ICBpZiAoaXQgPT0gbV91c2VyU3R5bGVTaGVldHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGF1dG8mIHN0eWxlc2hlZXRzID0gKml0LT52YWx1ZTsKQEAgLTE0OSwxNyArMTI2LDE0IEBA
IHZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU3QKICAgICAgICAgcmV0dXJu
OwogCiAgICAgaWYgKHN0eWxlc2hlZXRzLmlzRW1wdHkoKSkKLSAgICAgICAgbV91c2VyU3R5bGVT
aGVldHMtPnJlbW92ZShpdCk7CisgICAgICAgIG1fdXNlclN0eWxlU2hlZXRzLnJlbW92ZShpdCk7
CiAKICAgICBpbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lc0luQWxs
UGFnZXMoKTsKIH0KIAogdm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdHls
ZVNoZWV0cyhET01XcmFwcGVyV29ybGQmIHdvcmxkKQogewotICAgIGlmICghbV91c2VyU3R5bGVT
aGVldHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV91c2VyU3R5bGVTaGVldHMtPnJl
bW92ZSgmd29ybGQpKQorICAgIGlmICghbV91c2VyU3R5bGVTaGVldHMucmVtb3ZlKCZ3b3JsZCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNo
ZUluQWxsRnJhbWVzSW5BbGxQYWdlcygpOwpAQCAtMTY4LDk1ICsxNDIsNDAgQEAgdm9pZCBVc2Vy
Q29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdAogI2lmIEVOQUJMRShVU0VSX01FU1NBR0Vf
SEFORExFUlMpCiB2b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlck1lc3NhZ2VIYW5k
bGVyRGVzY3JpcHRvcihVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQog
ewotICAgIGlmICghbV91c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycykKLSAgICAgICAgbV91
c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycyA9IHN0ZDo6bWFrZV91bmlxdWU8VXNlck1lc3Nh
Z2VIYW5kbGVyRGVzY3JpcHRvck1hcD4oKTsKLQotICAgIG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVz
Y3JpcHRvcnMtPmFkZChzdGQ6Om1ha2VfcGFpcihkZXNjcmlwdG9yLm5hbWUoKSwgJmRlc2NyaXB0
b3Iud29ybGQoKSksICZkZXNjcmlwdG9yKTsKKyAgICBtX3VzZXJNZXNzYWdlSGFuZGxlckRlc2Ny
aXB0b3JzLmFkZChzdGQ6Om1ha2VfcGFpcihkZXNjcmlwdG9yLm5hbWUoKSwgJmRlc2NyaXB0b3Iu
d29ybGQoKSksICZkZXNjcmlwdG9yKTsKIH0KIAogdm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6
OnJlbW92ZVVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IoVXNlck1lc3NhZ2VIYW5kbGVyRGVz
Y3JpcHRvciYgZGVzY3JpcHRvcikKIHsKLSAgICBpZiAoIW1fdXNlck1lc3NhZ2VIYW5kbGVyRGVz
Y3JpcHRvcnMpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVz
Y3JpcHRvcnMtPnJlbW92ZShzdGQ6Om1ha2VfcGFpcihkZXNjcmlwdG9yLm5hbWUoKSwgJmRlc2Ny
aXB0b3Iud29ybGQoKSkpOworICAgIG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMucmVt
b3ZlKHN0ZDo6bWFrZV9wYWlyKGRlc2NyaXB0b3IubmFtZSgpLCAmZGVzY3JpcHRvci53b3JsZCgp
KSk7CiB9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiB2b2lkIFVz
ZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlckNvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5n
JiBuYW1lLCBSZWZQdHI8Q29udGVudEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29udGVudEV4dGVuc2lv
bj4gY29udGVudEV4dGVuc2lvbikKIHsKLSAgICBpZiAoIW1fY29udGVudEV4dGVuc2lvbkJhY2tl
bmQpCi0gICAgICAgIG1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQgPSBzdGQ6Om1ha2VfdW5pcXVl
PENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ+KCk7Ci0gICAgCi0g
ICAgbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZC0+YWRkQ29udGVudEV4dGVuc2lvbihuYW1lLCBj
b250ZW50RXh0ZW5zaW9uKTsKKyAgICBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kLmFkZENvbnRl
bnRFeHRlbnNpb24obmFtZSwgY29udGVudEV4dGVuc2lvbik7CiB9CiAKIHZvaWQgVXNlckNvbnRl
bnRDb250cm9sbGVyOjpyZW1vdmVVc2VyQ29udGVudEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5h
bWUpCiB7Ci0gICAgaWYgKCFtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kLT5yZW1vdmVDb250ZW50RXh0ZW5z
aW9uKG5hbWUpOworICAgIG1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQucmVtb3ZlQ29udGVudEV4
dGVuc2lvbihuYW1lKTsKIH0KIAogdm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZUFs
bFVzZXJDb250ZW50RXh0ZW5zaW9ucygpCiB7Ci0gICAgaWYgKCFtX2NvbnRlbnRFeHRlbnNpb25C
YWNrZW5kKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5k
LT5yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucygpOwotfQotCi1zdGF0aWMgYm9vbCBjb250ZW50
RXh0ZW5zaW9uc0VuYWJsZWQoY29uc3QgRG9jdW1lbnRMb2FkZXImIGRvY3VtZW50TG9hZGVyKQot
ewotICAgIGlmIChhdXRvIGZyYW1lID0gZG9jdW1lbnRMb2FkZXIuZnJhbWUoKSkgewotICAgICAg
ICBpZiAoZnJhbWUtPmlzTWFpbkZyYW1lKCkpCi0gICAgICAgICAgICByZXR1cm4gZG9jdW1lbnRM
b2FkZXIudXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZCgpOwotICAgICAgICBpZiAoYXV0byBt
YWluRG9jdW1lbnRMb2FkZXIgPSBmcmFtZS0+bWFpbkZyYW1lKCkubG9hZGVyKCkuZG9jdW1lbnRM
b2FkZXIoKSkKLSAgICAgICAgICAgIHJldHVybiBtYWluRG9jdW1lbnRMb2FkZXItPnVzZXJDb250
ZW50RXh0ZW5zaW9uc0VuYWJsZWQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSAg
ICAKLUNvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzIFVzZXJDb250ZW50Q29udHJvbGxl
cjo6cHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQoUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LCBSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlLCBEb2N1bWVudExvYWRlciYgaW5pdGlh
dGluZ0RvY3VtZW50TG9hZGVyKQotewotICAgIGlmICghbV9jb250ZW50RXh0ZW5zaW9uQmFja2Vu
ZCkKLSAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzOjpOb3RC
bG9ja2VkOwotCi0gICAgaWYgKCFjb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQoaW5pdGlhdGluZ0Rv
Y3VtZW50TG9hZGVyKSkKLSAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2Vk
U3RhdHVzOjpOb3RCbG9ja2VkOwotCi0gICAgcmV0dXJuIG1fY29udGVudEV4dGVuc2lvbkJhY2tl
bmQtPnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKHJlcXVlc3QsIHJlc291cmNl
VHlwZSwgaW5pdGlhdGluZ0RvY3VtZW50TG9hZGVyKTsKLX0KLQotVmVjdG9yPENvbnRlbnRFeHRl
bnNpb25zOjpBY3Rpb24+IFVzZXJDb250ZW50Q29udHJvbGxlcjo6YWN0aW9uc0ZvclJlc291cmNl
TG9hZChjb25zdCBSZXNvdXJjZUxvYWRJbmZvJiByZXNvdXJjZUxvYWRJbmZvLCBEb2N1bWVudExv
YWRlciYgaW5pdGlhdGluZ0RvY3VtZW50TG9hZGVyKQotewotICAgIGlmICghbV9jb250ZW50RXh0
ZW5zaW9uQmFja2VuZCkKLSAgICAgICAgcmV0dXJuIFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6
QWN0aW9uPigpOwotICAgIAotICAgIGlmICghY29udGVudEV4dGVuc2lvbnNFbmFibGVkKGluaXRp
YXRpbmdEb2N1bWVudExvYWRlcikpCi0gICAgICAgIHJldHVybiBWZWN0b3I8Q29udGVudEV4dGVu
c2lvbnM6OkFjdGlvbj4oKTsKLQotICAgIHJldHVybiBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5k
LT5hY3Rpb25zRm9yUmVzb3VyY2VMb2FkKHJlc291cmNlTG9hZEluZm8pOworICAgIG1fY29udGVu
dEV4dGVuc2lvbkJhY2tlbmQucmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKTsKIH0KICNlbmRp
ZgogCiB2b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxsVXNlckNvbnRlbnQoKQog
ewotICAgIG1fdXNlclNjcmlwdHMgPSBudWxscHRyOworICAgIG1fdXNlclNjcmlwdHMuY2xlYXIo
KTsKIAotICAgIGlmIChtX3VzZXJTdHlsZVNoZWV0cykgewotICAgICAgICBtX3VzZXJTdHlsZVNo
ZWV0cyA9IG51bGxwdHI7CisgICAgaWYgKCFtX3VzZXJTdHlsZVNoZWV0cy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgbV91c2VyU3R5bGVTaGVldHMuY2xlYXIoKTsKICAgICAgICAgaW52YWxpZGF0ZUlu
amVjdGVkU3R5bGVTaGVldENhY2hlSW5BbGxGcmFtZXNJbkFsbFBhZ2VzKCk7CiAgICAgfQogfQog
Ci12b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6aW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVl
dENhY2hlSW5BbGxGcmFtZXNJbkFsbFBhZ2VzKCkKLXsKLSAgICBmb3IgKGF1dG8mIHBhZ2UgOiBt
X3BhZ2VzKQotICAgICAgICBwYWdlLT5pbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJ
bkFsbEZyYW1lcygpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnRDb250cm9sbGVyLmgJKHJldmlzaW9uIDE5ODE0NykK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnRDb250cm9sbGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDU4ICsyNiwxOSBAQAogI2lmbmRlZiBVc2VyQ29udGVudENvbnRyb2xsZXJf
aAogI2RlZmluZSBVc2VyQ29udGVudENvbnRyb2xsZXJfaAogCi0jaW5jbHVkZSAiVXNlclNjcmlw
dFR5cGVzLmgiCi0jaW5jbHVkZSAiVXNlclN0eWxlU2hlZXRUeXBlcy5oIgotI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+Ci0KLSNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQotI2luY2x1ZGUg
IlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JUeXBlcy5oIgotI2VuZGlmCi0KLSNpZiBFTkFC
TEUoQ09OVEVOVF9FWFRFTlNJT05TKQotI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25BY3Rpb25z
LmgiCi0jZW5kaWYKKyNpbmNsdWRlICJVc2VyQ29udGVudFByb3ZpZGVyLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgRE9NV3JhcHBlcldvcmxkOwotY2xhc3MgRG9jdW1lbnRMb2Fk
ZXI7Ci1jbGFzcyBQYWdlOwotY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwotY2xhc3MgU3R5bGVTaGVl
dENvbnRlbnRzOwotY2xhc3MgVVJMOwotY2xhc3MgVXNlclNjcmlwdDsKLWNsYXNzIFVzZXJTdHls
ZVNoZWV0OwotY2xhc3MgVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcjsKLQotZW51bSBjbGFz
cyBSZXNvdXJjZVR5cGUgOiB1aW50MTZfdDsKLQotc3RydWN0IFJlc291cmNlTG9hZEluZm87Ci0K
LW5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7Ci1jbGFzcyBDb21waWxlZENvbnRlbnRFeHRl
bnNpb247Ci1jbGFzcyBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ7Ci1zdHJ1Y3QgQWN0aW9uOwot
fQotCi1jbGFzcyBVc2VyQ29udGVudENvbnRyb2xsZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxVc2Vy
Q29udGVudENvbnRyb2xsZXI+IHsKK2NsYXNzIFVzZXJDb250ZW50Q29udHJvbGxlciBmaW5hbCA6
IHB1YmxpYyBVc2VyQ29udGVudFByb3ZpZGVyIHsKIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgUmVmPFVzZXJDb250ZW50Q29udHJvbGxlcj4gY3JlYXRlKCk7CiAgICAgV0VCQ09S
RV9FWFBPUlQgflVzZXJDb250ZW50Q29udHJvbGxlcigpOwogCi0gICAgdm9pZCBhZGRQYWdlKFBh
Z2UmKTsKLSAgICB2b2lkIHJlbW92ZVBhZ2UoUGFnZSYpOwotCi0gICAgY29uc3QgVXNlclNjcmlw
dE1hcCogdXNlclNjcmlwdHMoKSBjb25zdCB7IHJldHVybiBtX3VzZXJTY3JpcHRzLmdldCgpOyB9
Ci0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZFVzZXJTY3JpcHQoRE9NV3JhcHBlcldvcmxk
Jiwgc3RkOjp1bmlxdWVfcHRyPFVzZXJTY3JpcHQ+KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHJlbW92ZVVzZXJTY3JpcHQoRE9NV3JhcHBlcldvcmxkJiwgY29uc3QgVVJMJik7CiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCByZW1vdmVVc2VyU2NyaXB0cyhET01XcmFwcGVyV29ybGQmKTsKIAot
ICAgIGNvbnN0IFVzZXJTdHlsZVNoZWV0TWFwKiB1c2VyU3R5bGVTaGVldHMoKSBjb25zdCB7IHJl
dHVybiBtX3VzZXJTdHlsZVNoZWV0cy5nZXQoKTsgfQotCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBhZGRVc2VyU3R5bGVTaGVldChET01XcmFwcGVyV29ybGQmLCBzdGQ6OnVuaXF1ZV9wdHI8VXNl
clN0eWxlU2hlZXQ+LCBVc2VyU3R5bGVJbmplY3Rpb25UaW1lKTsKICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHJlbW92ZVVzZXJTdHlsZVNoZWV0KERPTVdyYXBwZXJXb3JsZCYsIGNvbnN0IFVSTCYp
OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlVXNlclN0eWxlU2hlZXRzKERPTVdyYXBw
ZXJXb3JsZCYpOwpAQCAtODUsOCArNDYsNiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCByZW1vdmVBbGxVc2VyQ29udGVudCgpOwogCiAjaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9I
QU5ETEVSUykKLSAgICBjb25zdCBVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yTWFwKiB1c2Vy
TWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlck1lc3NhZ2VI
YW5kbGVyRGVzY3JpcHRvcnMuZ2V0KCk7IH0KLQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRk
VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcihVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9y
Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVVc2VyTWVzc2FnZUhhbmRsZXJEZXNj
cmlwdG9yKFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3ImKTsKICNlbmRpZgpAQCAtOTUsMjUg
KzU0LDI4IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZFVzZXJDb250ZW50
RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPENvbnRlbnRFeHRlbnNpb25zOjpD
b21waWxlZENvbnRlbnRFeHRlbnNpb24+KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92
ZVVzZXJDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCByZW1vdmVBbGxVc2VyQ29udGVudEV4dGVuc2lvbnMoKTsKLQotICAgIENvbnRl
bnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzIHByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNG
b3JMb2FkKFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlVHlwZSwgRG9jdW1lbnRMb2FkZXImIGlu
aXRpYXRpbmdEb2N1bWVudExvYWRlcik7Ci0gICAgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpB
Y3Rpb24+IGFjdGlvbnNGb3JSZXNvdXJjZUxvYWQoY29uc3QgUmVzb3VyY2VMb2FkSW5mbyYsIERv
Y3VtZW50TG9hZGVyJiBpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIpOwogI2VuZGlmCiAKIHByaXZh
dGU6CiAgICAgVXNlckNvbnRlbnRDb250cm9sbGVyKCk7CiAKLSAgICB2b2lkIGludmFsaWRhdGVJ
bmplY3RlZFN0eWxlU2hlZXRDYWNoZUluQWxsRnJhbWVzSW5BbGxQYWdlcygpOwotCi0gICAgSGFz
aFNldDxQYWdlKj4gbV9wYWdlczsKKyAgICAvLyBVc2VyQ29udGVudFByb3ZpZGVyCisgICAgdm9p
ZCBmb3JFYWNoVXNlclNjcmlwdChjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQoRE9NV3JhcHBlcldv
cmxkJiwgY29uc3QgVXNlclNjcmlwdCYpPiYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZm9y
RWFjaFVzZXJTdHlsZVNoZWV0KGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBVc2VyU3R5
bGVTaGVldCYpPiYpIGNvbnN0IG92ZXJyaWRlOworI2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFO
RExFUlMpCisgICAgY29uc3QgVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvck1hcCYgdXNlck1l
c3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3VzZXJN
ZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzOyB9CisjZW5kaWYKKyNpZiBFTkFCTEUoQ09OVEVOVF9F
WFRFTlNJT05TKQorICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tl
bmQmIHVzZXJDb250ZW50RXh0ZW5zaW9uQmFja2VuZCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fY29u
dGVudEV4dGVuc2lvbkJhY2tlbmQ7IH0KKyNlbmRpZgogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFVz
ZXJTY3JpcHRNYXA+IG1fdXNlclNjcmlwdHM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFVzZXJTdHls
ZVNoZWV0TWFwPiBtX3VzZXJTdHlsZVNoZWV0czsKKyAgICBVc2VyU2NyaXB0TWFwIG1fdXNlclNj
cmlwdHM7CisgICAgVXNlclN0eWxlU2hlZXRNYXAgbV91c2VyU3R5bGVTaGVldHM7CiAjaWYgRU5B
QkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VXNlck1lc3Nh
Z2VIYW5kbGVyRGVzY3JpcHRvck1hcD4gbV91c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yczsK
KyAgICBVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yTWFwIG1fdXNlck1lc3NhZ2VIYW5kbGVy
RGVzY3JpcHRvcnM7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAg
IHN0ZDo6dW5pcXVlX3B0cjxDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNr
ZW5kPiBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kOworICAgIENvbnRlbnRFeHRlbnNpb25zOjpD
b250ZW50RXh0ZW5zaW9uc0JhY2tlbmQgbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZDsKICNlbmRp
ZgogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudFByb3ZpZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50UHJvdmlkZXIu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudFByb3Zp
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJVc2VyQ29udGVudFByb3ZpZGVyLmgiCisKKyNp
bmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVk
ZSAiTWFpbkZyYW1lLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorCisjaWYgRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKKyNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuaCIKKyNpbmNs
dWRlICJDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1VzZXJDb250ZW50UHJvdmlkZXI6OlVzZXJDb250ZW50UHJvdmlkZXIoKQorewor
fQorCitVc2VyQ29udGVudFByb3ZpZGVyOjp+VXNlckNvbnRlbnRQcm92aWRlcigpCit7CisgICAg
QVNTRVJUKG1fcGFnZXMuaXNFbXB0eSgpKTsKK30KKwordm9pZCBVc2VyQ29udGVudFByb3ZpZGVy
OjphZGRQYWdlKFBhZ2UmIHBhZ2UpCit7CisgICAgQVNTRVJUKCFtX3BhZ2VzLmNvbnRhaW5zKCZw
YWdlKSk7CisKKyAgICBtX3BhZ2VzLmFkZCgmcGFnZSk7Cit9CisKK3ZvaWQgVXNlckNvbnRlbnRQ
cm92aWRlcjo6cmVtb3ZlUGFnZShQYWdlJiBwYWdlKQoreworICAgIEFTU0VSVChtX3BhZ2VzLmNv
bnRhaW5zKCZwYWdlKSk7CisKKyAgICBtX3BhZ2VzLnJlbW92ZSgmcGFnZSk7Cit9CisKK3ZvaWQg
VXNlckNvbnRlbnRQcm92aWRlcjo6aW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlSW5B
bGxGcmFtZXNJbkFsbFBhZ2VzKCkKK3sKKyAgICBmb3IgKGF1dG8mIHBhZ2UgOiBtX3BhZ2VzKQor
ICAgICAgICBwYWdlLT5pbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1l
cygpOworfQorCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKK3N0YXRpYyBib29sIGNv
bnRlbnRFeHRlbnNpb25zRW5hYmxlZChjb25zdCBEb2N1bWVudExvYWRlciYgZG9jdW1lbnRMb2Fk
ZXIpCit7CisgICAgaWYgKGF1dG8gZnJhbWUgPSBkb2N1bWVudExvYWRlci5mcmFtZSgpKSB7Cisg
ICAgICAgIGlmIChmcmFtZS0+aXNNYWluRnJhbWUoKSkKKyAgICAgICAgICAgIHJldHVybiBkb2N1
bWVudExvYWRlci51c2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkKCk7CisgICAgICAgIGlmIChh
dXRvIG1haW5Eb2N1bWVudExvYWRlciA9IGZyYW1lLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5kb2N1
bWVudExvYWRlcigpKQorICAgICAgICAgICAgcmV0dXJuIG1haW5Eb2N1bWVudExvYWRlci0+dXNl
ckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZCgpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorICAgIAorQ29udGVudEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXMgVXNlckNvbnRlbnRQcm92
aWRlcjo6cHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQoUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlLCBEb2N1bWVudExvYWRlciYgaW5p
dGlhdGluZ0RvY3VtZW50TG9hZGVyKQoreworICAgIGlmICghY29udGVudEV4dGVuc2lvbnNFbmFi
bGVkKGluaXRpYXRpbmdEb2N1bWVudExvYWRlcikpCisgICAgICAgIHJldHVybiBDb250ZW50RXh0
ZW5zaW9uczo6QmxvY2tlZFN0YXR1czo6Tm90QmxvY2tlZDsKKworICAgIHJldHVybiB1c2VyQ29u
dGVudEV4dGVuc2lvbkJhY2tlbmQoKS5wcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9yTG9h
ZChyZXF1ZXN0LCByZXNvdXJjZVR5cGUsIGluaXRpYXRpbmdEb2N1bWVudExvYWRlcik7Cit9CisK
K1ZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uPiBVc2VyQ29udGVudFByb3ZpZGVyOjph
Y3Rpb25zRm9yUmVzb3VyY2VMb2FkKGNvbnN0IFJlc291cmNlTG9hZEluZm8mIHJlc291cmNlTG9h
ZEluZm8sIERvY3VtZW50TG9hZGVyJiBpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIpCit7CisgICAg
aWYgKCFjb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQoaW5pdGlhdGluZ0RvY3VtZW50TG9hZGVyKSkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiB1c2VyQ29udGVudEV4dGVuc2lvbkJh
Y2tlbmQoKS5hY3Rpb25zRm9yUmVzb3VyY2VMb2FkKHJlc291cmNlTG9hZEluZm8pOworfQorI2Vu
ZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
VXNlckNvbnRlbnRQcm92aWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
VXNlckNvbnRlbnRQcm92aWRlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9Vc2VyQ29udGVudFByb3ZpZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgVXNlckNvbnRlbnRQcm92aWRlcl9oCisjZGVmaW5lIFVzZXJD
b250ZW50UHJvdmlkZXJfaAorCisjaW5jbHVkZSAiVXNlclNjcmlwdFR5cGVzLmgiCisjaW5jbHVk
ZSAiVXNlclN0eWxlU2hlZXRUeXBlcy5oIgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisKKyNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQorI2lu
Y2x1ZGUgIlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JUeXBlcy5oIgorI2VuZGlmCisKKyNp
ZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25B
Y3Rpb25zLmgiCisjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmgiCisjZW5kaWYK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEb2N1bWVudExvYWRlcjsKK2NsYXNzIFBh
Z2U7CitjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CitjbGFzcyBVUkw7CisKK2VudW0gY2xhc3MgUmVz
b3VyY2VUeXBlIDogdWludDE2X3Q7CisKK3N0cnVjdCBSZXNvdXJjZUxvYWRJbmZvOworCituYW1l
c3BhY2UgQ29udGVudEV4dGVuc2lvbnMgeworY2xhc3MgQ29udGVudEV4dGVuc2lvbnNCYWNrZW5k
Oworc3RydWN0IEFjdGlvbjsKK30KKworY2xhc3MgVXNlckNvbnRlbnRQcm92aWRlciA6IHB1Ymxp
YyBSZWZDb3VudGVkPFVzZXJDb250ZW50UHJvdmlkZXI+IHsKK3B1YmxpYzoKKyAgICBXRUJDT1JF
X0VYUE9SVCBVc2VyQ29udGVudFByb3ZpZGVyKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB+VXNlckNvbnRlbnRQcm92aWRlcigpOworCisgICAgdmlydHVhbCB2b2lkIGZvckVhY2hVc2Vy
U2NyaXB0KGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChET01XcmFwcGVyV29ybGQmLCBjb25zdCBV
c2VyU2NyaXB0Jik+JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmb3JFYWNoVXNlclN0
eWxlU2hlZXQoY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFVzZXJTdHlsZVNoZWV0Jik+
JikgY29uc3QgPSAwOworCisjaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKKyAgICB2
aXJ0dWFsIGNvbnN0IFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JNYXAmIHVzZXJNZXNzYWdl
SGFuZGxlckRlc2NyaXB0b3JzKCkgY29uc3QgPSAwOworI2VuZGlmCisKKyNpZiBFTkFCTEUoQ09O
VEVOVF9FWFRFTlNJT05TKQorICAgIHZpcnR1YWwgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRF
eHRlbnNpb25zQmFja2VuZCYgdXNlckNvbnRlbnRFeHRlbnNpb25CYWNrZW5kKCkgPSAwOworI2Vu
ZGlmCisKKyAgICB2b2lkIGFkZFBhZ2UoUGFnZSYpOworICAgIHZvaWQgcmVtb3ZlUGFnZShQYWdl
Jik7CisKKworICAgIC8vIEZJWE1FOiBUaGVzZSBkb24ndCByZWFsbHkgYmVsb25nIGhlcmUuIFRo
ZXkgc2hvdWxkIHByb2JhYmx5IGJ1bmRsZWQgdXAgaW4gdGhlIENvbnRlbnRFeHRlbnNpb25zQmFj
a2VuZAorICAgIC8vIHdoaWNoIHNob3VsZCBhbHdheXMgZXhpc3QuCisgICAgQ29udGVudEV4dGVu
c2lvbnM6OkJsb2NrZWRTdGF0dXMgcHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQo
UmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VUeXBlLCBEb2N1bWVudExvYWRlciYgaW5pdGlhdGlu
Z0RvY3VtZW50TG9hZGVyKTsKKyAgICBWZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbj4g
YWN0aW9uc0ZvclJlc291cmNlTG9hZChjb25zdCBSZXNvdXJjZUxvYWRJbmZvJiwgRG9jdW1lbnRM
b2FkZXImIGluaXRpYXRpbmdEb2N1bWVudExvYWRlcik7CisKK3Byb3RlY3RlZDoKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZUluQWxsRnJh
bWVzSW5BbGxQYWdlcygpOworCitwcml2YXRlOgorICAgIEhhc2hTZXQ8UGFnZSo+IG1fcGFnZXM7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVc2VyQ29udGVudFBy
b3ZpZGVyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlck1lc3NhZ2VIYW5kbGVyRGVz
Y3JpcHRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlck1lc3NhZ2VI
YW5kbGVyRGVzY3JpcHRvci5oCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL1VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTQs
OCArNTQsOCBAQCBwdWJsaWM6CiAgICAgfQogICAgIFdFQkNPUkVfRVhQT1JUIH5Vc2VyTWVzc2Fn
ZUhhbmRsZXJEZXNjcmlwdG9yKCk7CiAKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUoKTsK
LSAgICBET01XcmFwcGVyV29ybGQmIHdvcmxkKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRE9NV3JhcHBlcldvcmxk
JiB3b3JsZCgpOwogCiAgICAgQ2xpZW50KiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVu
dDsgfQogICAgIHZvaWQgaW52YWxpZGF0ZUNsaWVudCgpIHsgbV9jbGllbnQgPSBudWxscHRyOyB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlck1lc3NhZ2VIYW5kbGVy
c05hbWVzcGFjZS5jcHAJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
VXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDE1
ICs1Myw5IEBAIFVzZXJNZXNzYWdlSGFuZGxlciogVXNlck1lc3NhZ2VIYW5kbGVyc04KICAgICBp
ZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAotICAgIGNvbnN0IGF1dG8q
IHVzZXJDb250ZW50Q29udHJvbGxlciA9IHBhZ2UtPnVzZXJDb250ZW50Q29udHJvbGxlcigpOwot
ICAgIGlmICghdXNlckNvbnRlbnRDb250cm9sbGVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIGNvbnN0IGF1dG8qIHVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzID0gdXNlckNv
bnRlbnRDb250cm9sbGVyLT51c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycygpOwotICAgIGlm
ICghdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgUmVmUHRyPFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3I+IGRlc2NyaXB0b3Ig
PSB1c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycy0+Z2V0KHN0ZDo6bWFrZV9wYWlyKG5hbWUs
ICZ3b3JsZCkpOworICAgIGF1dG8mIGRlc2NyaXB0b3JzID0gcGFnZS0+dXNlckNvbnRlbnRQcm92
aWRlcigpLnVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzKCk7CisgICAgCisgICAgUmVmUHRy
PFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3I+IGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ycy5n
ZXQoc3RkOjptYWtlX3BhaXIobmFtZSwgJndvcmxkKSk7CiAgICAgaWYgKCFkZXNjcmlwdG9yKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtNzAsNyArNjQsNyBAQCBVc2VyTWVzc2FnZUhh
bmRsZXIqIFVzZXJNZXNzYWdlSGFuZGxlcnNOCiAgICAgICAgICAgICByZXR1cm4gJmhhbmRsZXIu
Z2V0KCk7CiAgICAgfQogCi0gICAgYXV0byBsaXZlSGFuZGxlcnMgPSB1c2VyTWVzc2FnZUhhbmRs
ZXJEZXNjcmlwdG9ycy0+dmFsdWVzKCk7CisgICAgYXV0byBsaXZlSGFuZGxlcnMgPSBkZXNjcmlw
dG9ycy52YWx1ZXMoKTsKICAgICBtX21lc3NhZ2VIYW5kbGVycy5yZW1vdmVBbGxNYXRjaGluZyhb
bGl2ZUhhbmRsZXJzXShjb25zdCBSZWY8VXNlck1lc3NhZ2VIYW5kbGVyPiYgaGFuZGxlcikgewog
ICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGxpdmVIYW5kbGVyIDogbGl2ZUhhbmRsZXJzKSB7CiAg
ICAgICAgICAgICBpZiAobGl2ZUhhbmRsZXIuZ2V0KCkgPT0gJmhhbmRsZXItPmRlc2NyaXB0b3Io
KSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNiBAQAorMjAxNi0wMy0xNCAgU2Ft
IFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBhIGJhc2VVUkwgcGFyYW1l
dGVyIHRvIF9XS1VzZXJTdHlsZVNoZWV0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTUyMTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAtIE1vdmVzIHRvIGEgbW9kZWwgZm9yIHVzZXIgY29udGVudCB3aGVy
ZSBpbnN0ZWFkIG9mIHVzaW5nIGEgV2ViQ29yZTo6VXNlckNvbnRlbnRDb250cm9sbGVyCisgICAg
ICAgICAgb2JqZWN0LCB3ZSBpbXBsZW1lbnQgdGhlIG5ldyBXZWJDb3JlOjpVc2VyQ29udGVudFBy
b3ZpZGVyIGludGVyZmFjZSAob24gdGhlIGV4aXN0aW5nIAorICAgICAgICAgIFdlYlVzZXJDb250
ZW50Q29udHJvbGxlciBvYmplY3QpLgorICAgICAgICAtIFVzZXMgdGhpcyB0byBtYWludGFpbiBt
YXBzIG9mIFVzZXJTdHlsZXNTaGVldHMgYW5kIFVzZXJTY3JpcHRzIGFsb25nIHdpdGggdGhlaXIg
aWRlbnRpZmllcnMsCisgICAgICAgICAgZnJlZWluZyB1cCB0aGUgVVJMLCB3aGljaCBoYWQgYmVl
biBhY3RpbmcgYXMgdGhlIGlkZW50aWZpZXIsIHRvIGJlIHVzZWQgYXMgdGhlIGJhc2VVUkwgd2hp
Y2gKKyAgICAgICAgICB3YXMgd2hhdCBpdCB3YXMgaW50ZW5kZWQgZm9yLgorICAgICAgICAtIEFk
ZHMgYSBiYXNlVVJMIHByb3BlcnR5IHRvIF9XS1VzZXJTdHlsZVNoZWV0LgorCisgICAgICAgICog
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICBBZGQgbmV3IGZpbGVz
LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHk6CisgICAgICAgIChoZWFk
ZXJzX2Zvcl90eXBlKToKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHNlbmRpbmcgV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLgorCisgICAgICAgICogU2hhcmVkL1dlYlVzZXJDb250
ZW50Q29udHJvbGxlckRhdGFUeXBlcy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJV
c2VyU2NyaXB0RGF0YTo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlclNjcmlwdERh
dGE6OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJTdHlsZVNoZWV0RGF0YTo6ZW5j
b2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlclN0eWxlU2hlZXREYXRhOjpkZWNvZGUpOgor
ICAgICAgICAqIFNoYXJlZC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuaDogQWRk
ZWQuCisgICAgICAgIEFkZCBoZWxwZXIgdHlwZXMgZm9yIHNlbmRpbmcgdXNlciBjb250ZW50IG92
ZXIgSVBDLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElVc2VyU2NyaXB0LmNwcDoKKyAg
ICAgICAgKEFQSTo6VXNlclNjcmlwdDo6Z2VuZXJhdGVVbmlxdWVVUkwpOgorICAgICAgICAoQVBJ
OjpVc2VyU2NyaXB0OjpVc2VyU2NyaXB0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSVVz
ZXJTY3JpcHQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSVVzZXJTdHlsZVNoZWV0LmNw
cDoKKyAgICAgICAgKEFQSTo6VXNlclN0eWxlU2hlZXQ6OmdlbmVyYXRlVW5pcXVlVVJMKToKKyAg
ICAgICAgKEFQSTo6VXNlclN0eWxlU2hlZXQ6OlVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0FQSVVzZXJTdHlsZVNoZWV0Lmg6CisgICAgICAgIEFkZCBpZGVudGlmaWVy
cyBmb3IgdHJhY2tpbmcgYWNyb3NzIHByb2Nlc3Nlcy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLVXNlclN0eWxlU2hlZXQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Nv
Y29hL19XS1VzZXJTdHlsZVNoZWV0Lm1tOgorICAgICAgICAoLVtfV0tVc2VyU3R5bGVTaGVldCBp
bml0V2l0aFNvdXJjZTpmb3JNYWluRnJhbWVPbmx5OmxlZ2FjeVdoaXRlbGlzdDpsZWdhY3lCbGFj
a2xpc3Q6YmFzZVVSTDp1c2VyQ29udGVudFdvcmxkOl0pOgorICAgICAgICAoLVtfV0tVc2VyU3R5
bGVTaGVldCBiYXNlVVJMXSk6CisgICAgICAgIEFkZCBuZXcgaW5pdGlhbGl6ZXIgd2hpY2ggdGFr
ZXMgYSBiYXNlVVJMIGFzIHdlbGwgYXMgYW4gYWNjZXNzb3IgZm9yIHRoZSBiYXNlVVJMLgorCisg
ICAgICAgICogVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6
OmFkZFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQ
cm94eTo6YWRkVXNlclNjcmlwdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29u
dHJvbGxlclByb3h5OjpyZW1vdmVVc2VyU2NyaXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFkZFVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92ZVVzZXJTdHlsZVNoZWV0
KToKKyAgICAgICAgUGFzcyBpZGVudGlmaWVycyBhcyB3ZWxsIGFzIHVzZXIgY29udGVudC4KKwor
ICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6YWRkVXNlclNjcmlwdCk6CisgICAgICAg
IChXZWJLaXQ6OkluamVjdGVkQnVuZGxlOjphZGRVc2VyU3R5bGVTaGVldCk6CisgICAgICAgIE1v
dmUgdXNlciBjb250ZW50IGluIHZpYSBtb3ZlIHNlbWFudGljcyByYXRoZXIgdGhhbiB1c2luZyBh
IHVuaXF1ZV9wdHIuCisKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGU6OnJlbW92ZVVz
ZXJTY3JpcHQpOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6cmVtb3ZlVXNlclN0
eWxlU2hlZXQpOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6cmVtb3ZlVXNlclNj
cmlwdHMpOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6cmVtb3ZlVXNlclN0eWxl
U2hlZXRzKToKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGU6OnJlbW92ZUFsbFVzZXJD
b250ZW50KToKKyAgICAgICAgVXBkYXRlIGZvciBuZXcgZnVuY3Rpb24gc2lnbmF0dXJlcy4KKwor
ICAgICAgICAqIFdlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRy
b2xsZXI6On5XZWJVc2VyQ29udGVudENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJV
c2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJDb250ZW50V29ybGRzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyQ29udGVudFdvcmxkcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlclNjcmlw
dHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVz
ZXJTY3JpcHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJl
bW92ZUFsbFVzZXJTY3JpcHRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250
cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYktpdDo6
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVBbGxVc2VyU3R5bGVTaGVldHMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHRNZXNz
YWdlSGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6
OnJlbW92ZVVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlVz
ZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlckNvbnRlbnRFeHRlbnNpb25zKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyQ29udGVudEV4dGVu
c2lvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3Zl
QWxsVXNlckNvbnRlbnRFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRl
bnRDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0SW50ZXJuYWwpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTY3JpcHRXaXRoVVJMKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU2NyaXB0
SW50ZXJuYWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJl
bW92ZVVzZXJTY3JpcHRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9s
bGVyOjphZGRVc2VyU3R5bGVTaGVldEludGVybmFsKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclN0eWxlU2hlZXRXaXRoVVJMKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU3R5
bGVTaGVldEludGVybmFsKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9s
bGVyOjpyZW1vdmVVc2VyU3R5bGVTaGVldHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXI6OnJlbW92ZUFsbFVzZXJDb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpmb3JFYWNoVXNlclNjcmlwdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6Zm9yRWFjaFVzZXJTdHlsZVNoZWV0KToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxl
ci5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyLm1lc3NhZ2VzLmluOgorICAgICAgICBDb252ZXJ0IHRvIGluaGVyaXRpbmcgZnJvbSBV
c2VyQ29udGVudFByb3ZpZGVyLCByYXRoZXIgdGhhbiBjb250YWluaW5nIGEgVXNlckNvbnRlbnRD
b250cm9sbGVyLgorICAgICAgICBUaGlzIG1lYW5zIGFkZGluZyB0aGUgc3RvcmFnZSBmb3IgdGhl
IHVzZXIgY29udGVudCwgd2hpY2ggaGFzIGJlZW4gc2ltcGxpZmllZCB0byBhdm9pZCB1c2luZwor
ICAgICAgICB1bmlxdWVfcHRycy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6YWRkVXNlclNjcmlwdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OmFkZFVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6cmVtb3ZlQWxsVXNlckNvbnRlbnQpOgorICAgICAgICBVcGRhdGUgdG8gY2Fs
bCB0aGUgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLCByYXRoZXIgdGhhbiBnb2luZyB0byB0aGUg
VXNlckNvbnRlbnRDb250cm9sbGVyLCB3aGljaAorICAgICAgICBubyBsb25nZXIgZXhpc3RzLgor
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZUdyb3VwUHJveHk6OnVzZXJDb250ZW50Q29udHJvbGxlcik6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5Lmg6CisgICAg
ICAgIFJldHVybiB0aGUgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyIHJhdGhlciB0aGFuIG9sZCBV
c2VyQ29udGVudENvbnRyb2xsZXIuCisKIDIwMTYtMDMtMTQgIEJldGggRGFraW4gIDxiZGFraW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFVuYWJsZSB0byBjb21taXQgcHJldmlld3MgaW4gTW9iaWxl
IFNhZmFyaQpJbmRleDogU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkJ
KHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0L21lc3Nh
Z2VzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNzgsNiArMzc4LDggQEAgZGVmIGhlYWRlcnNfZm9y
X3R5cGUodHlwZSk6CiAgICAgICAgICdXZWJLaXQ6OldlYlRvdWNoRXZlbnQnOiBbJyJXZWJFdmVu
dC5oIiddLAogICAgICAgICAnV2ViS2l0OjpXZWJXaGVlbEV2ZW50JzogWyciV2ViRXZlbnQuaCIn
XSwKICAgICAgICAgJ1dlYktpdDo6V2ViU2NyaXB0TWVzc2FnZUhhbmRsZXJIYW5kbGUnOiBbJyJX
ZWJTY3JpcHRNZXNzYWdlSGFuZGxlci5oIiddLAorICAgICAgICAnc3RydWN0IFdlYktpdDo6V2Vi
VXNlclNjcmlwdERhdGEnOiBbJyJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuaCIn
XSwKKyAgICAgICAgJ3N0cnVjdCBXZWJLaXQ6OldlYlVzZXJTdHlsZVNoZWV0RGF0YSc6IFsnIldl
YlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oIiddLAogICAgICAgICAnc3RkOjpjaHJv
bm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCc6IFsnPGNocm9ubz4nXSwKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlw
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJVc2VyQ29udGVu
dENvbnRyb2xsZXJEYXRhVHlwZXMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuaCIKKworI2luY2x1ZGUg
IldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBX
ZWJVc2VyU2NyaXB0RGF0YTo6ZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAoreworICAgIGVuY29kZXIgPDwgaWRlbnRpZmllcjsKKyAgICBlbmNvZGVyIDw8IHdvcmxk
SWRlbnRpZmllcjsKKyAgICBlbmNvZGVyIDw8IHVzZXJTY3JpcHQ7Cit9CisKK2Jvb2wgV2ViVXNl
clNjcmlwdERhdGE6OmRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgV2ViVXNl
clNjcmlwdERhdGEmIGRhdGEpCit7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShkYXRhLmlkZW50
aWZpZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShk
YXRhLndvcmxkSWRlbnRpZmllcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGRhdGEudXNlclNjcmlwdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJVc2VyU3R5bGVTaGVldERhdGE6OmVuY29kZShJ
UEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IGlk
ZW50aWZpZXI7CisgICAgZW5jb2RlciA8PCB3b3JsZElkZW50aWZpZXI7CisgICAgZW5jb2RlciA8
PCB1c2VyU3R5bGVTaGVldDsKK30KKworYm9vbCBXZWJVc2VyU3R5bGVTaGVldERhdGE6OmRlY29k
ZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgV2ViVXNlclN0eWxlU2hlZXREYXRhJiBk
YXRhKQoreworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGF0YS5pZGVudGlmaWVyKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGF0YS53b3JsZElkZW50
aWZpZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShk
YXRhLnVzZXJTdHlsZVNoZWV0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0
cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyRGF0YVR5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzX2gKKyNkZWZp
bmUgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzX2gKKworI2luY2x1ZGUgPFdlYkNv
cmUvVXNlclNjcmlwdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVXNlclN0eWxlU2hlZXQuaD4KKwor
bmFtZXNwYWNlIElQQyB7CitjbGFzcyBBcmd1bWVudERlY29kZXI7CitjbGFzcyBBcmd1bWVudEVu
Y29kZXI7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdHJ1Y3QgV2ViVXNlclNjcmlwdERh
dGEgeworICAgIHZvaWQgZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJikgY29uc3Q7CisgICAg
c3RhdGljIGJvb2wgZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiwgV2ViVXNlclNjcmlwdERh
dGEmKTsKKworICAgIHVpbnQ2NF90IGlkZW50aWZpZXI7CisgICAgdWludDY0X3Qgd29ybGRJZGVu
dGlmaWVyOworICAgIFdlYkNvcmU6OlVzZXJTY3JpcHQgdXNlclNjcmlwdDsKK307CisKK3N0cnVj
dCBXZWJVc2VyU3R5bGVTaGVldERhdGEgeworICAgIHZvaWQgZW5jb2RlKElQQzo6QXJndW1lbnRF
bmNvZGVyJikgY29uc3Q7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKElQQzo6QXJndW1lbnREZWNv
ZGVyJiwgV2ViVXNlclN0eWxlU2hlZXREYXRhJik7CisKKyAgICB1aW50NjRfdCBpZGVudGlmaWVy
OworICAgIHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllcjsKKyAgICBXZWJDb3JlOjpVc2VyU3R5bGVT
aGVldCB1c2VyU3R5bGVTaGVldDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzX2gKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlclNjcmlwdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyU2NyaXB0LmNwcAkocmV2aXNpb24gMTk4
MTQ3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyU2NyaXB0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzksMTEgKzM5LDIwIEBAIHN0YXRpYyB1aW50NjRfdCBnZW5lcmF0
ZUlkZW50aWZpZXIoKQogCiBXZWJDb3JlOjpVUkwgVXNlclNjcmlwdDo6Z2VuZXJhdGVVbmlxdWVV
UkwoKQogeworICAgIHN0YXRpYyB1aW50NjRfdCBpZGVudGlmaWVyOworCiAgICAgU3RyaW5nQnVp
bGRlciB1cmxTdHJpbmdCdWlsZGVyOwogICAgIHVybFN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgidXNlci1zY3JpcHQ6Iik7Ci0gICAgdXJsU3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIoZ2Vu
ZXJhdGVJZGVudGlmaWVyKCkpOworICAgIHVybFN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKCsr
aWRlbnRpZmllcik7CiAgICAgcmV0dXJuIHsgeyB9LCB1cmxTdHJpbmdCdWlsZGVyLnRvU3RyaW5n
KCkgfTsKIH0KIAorVXNlclNjcmlwdDo6VXNlclNjcmlwdChXZWJDb3JlOjpVc2VyU2NyaXB0IHVz
ZXJTY3JpcHQsIEFQSTo6VXNlckNvbnRlbnRXb3JsZCYgd29ybGQpCisgICAgOiBtX2lkZW50aWZp
ZXIoZ2VuZXJhdGVJZGVudGlmaWVyKCkpCisgICAgLCBtX3VzZXJTY3JpcHQodXNlclNjcmlwdCkK
KyAgICAsIG1fd29ybGQod29ybGQpCit7Cit9CisKIAogfSAvLyBuYW1lc3BhY2UgQVBJCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJTY3JpcHQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJTY3JpcHQuaAkocmV2aXNp
b24gMTk4MTQ3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyU2NyaXB0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDExICs0MSw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgVXNlclNjcmlwdChXVEZNb3ZlKHVzZXJTY3JpcHQpLCB3b3JsZCkp
OwogICAgIH0KIAotICAgIFVzZXJTY3JpcHQoV2ViQ29yZTo6VXNlclNjcmlwdCB1c2VyU2NyaXB0
LCBBUEk6OlVzZXJDb250ZW50V29ybGQmIHdvcmxkKQotICAgICAgICA6IG1fdXNlclNjcmlwdCh1
c2VyU2NyaXB0KQotICAgICAgICAsIG1fd29ybGQod29ybGQpCi0gICAgewotICAgIH0KKyAgICBV
c2VyU2NyaXB0KFdlYkNvcmU6OlVzZXJTY3JpcHQsIEFQSTo6VXNlckNvbnRlbnRXb3JsZCYpOwor
CisgICAgdWludDY0X3QgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsg
fQogCiAgICAgY29uc3QgV2ViQ29yZTo6VXNlclNjcmlwdCYgdXNlclNjcmlwdCgpIGNvbnN0IHsg
cmV0dXJuIG1fdXNlclNjcmlwdDsgfQogICAgIApAQCAtNTMsNiArNTEsNyBAQCBwdWJsaWM6CiAg
ICAgY29uc3QgVXNlckNvbnRlbnRXb3JsZCYgdXNlckNvbnRlbnRXb3JsZCgpIGNvbnN0IHsgcmV0
dXJuIG1fd29ybGQ7IH0KICAgICAKIHByaXZhdGU6CisgICAgdWludDY0X3QgbV9pZGVudGlmaWVy
OwogICAgIFdlYkNvcmU6OlVzZXJTY3JpcHQgbV91c2VyU2NyaXB0OwogICAgIFJlZjxVc2VyQ29u
dGVudFdvcmxkPiBtX3dvcmxkOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQVBJVXNlclN0eWxlU2hlZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQVBJVXNlclN0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiAxOTgxNDcpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJTdHlsZVNoZWV0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksMTEgKzM5LDE5IEBAIHN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZUlkZW50
aWZpZXIoKQogCiBXZWJDb3JlOjpVUkwgVXNlclN0eWxlU2hlZXQ6OmdlbmVyYXRlVW5pcXVlVVJM
KCkKIHsKKyAgICBzdGF0aWMgdWludDY0X3QgaWRlbnRpZmllcjsKKwogICAgIFN0cmluZ0J1aWxk
ZXIgdXJsU3RyaW5nQnVpbGRlcjsKICAgICB1cmxTdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwo
InVzZXItc3R5bGUtc2hlZXQ6Iik7Ci0gICAgdXJsU3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIo
Z2VuZXJhdGVJZGVudGlmaWVyKCkpOworICAgIHVybFN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVy
KCsraWRlbnRpZmllcik7CiAgICAgcmV0dXJuIHsgeyB9LCB1cmxTdHJpbmdCdWlsZGVyLnRvU3Ry
aW5nKCkgfTsKIH0KIAorVXNlclN0eWxlU2hlZXQ6OlVzZXJTdHlsZVNoZWV0KFdlYkNvcmU6OlVz
ZXJTdHlsZVNoZWV0IHVzZXJTdHlsZVNoZWV0LCBBUEk6OlVzZXJDb250ZW50V29ybGQmIHdvcmxk
KQorICAgIDogbV9pZGVudGlmaWVyKGdlbmVyYXRlSWRlbnRpZmllcigpKQorICAgICwgbV91c2Vy
U3R5bGVTaGVldCh1c2VyU3R5bGVTaGVldCkKKyAgICAsIG1fd29ybGQod29ybGQpCit7Cit9CiAK
IH0gLy8gbmFtZXNwYWNlIEFQSQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9B
UElVc2VyU3R5bGVTaGVldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQVBJVXNlclN0eWxlU2hlZXQuaAkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyU3R5bGVTaGVldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MSwxMSArNDEsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVz
ZXJTdHlsZVNoZWV0KFdURk1vdmUodXNlclN0eWxlU2hlZXQpLCB3b3JsZCkpOwogICAgIH0KIAot
ICAgIFVzZXJTdHlsZVNoZWV0KFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0IHVzZXJTdHlsZVNoZWV0
LCBBUEk6OlVzZXJDb250ZW50V29ybGQmIHdvcmxkKQotICAgICAgICA6IG1fdXNlclN0eWxlU2hl
ZXQodXNlclN0eWxlU2hlZXQpCi0gICAgICAgICwgbV93b3JsZCh3b3JsZCkKLSAgICB7Ci0gICAg
fQorICAgIFVzZXJTdHlsZVNoZWV0KFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0LCBBUEk6OlVzZXJD
b250ZW50V29ybGQmKTsKKworICAgIHVpbnQ2NF90IGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVy
biBtX2lkZW50aWZpZXI7IH0KIAogICAgIGNvbnN0IFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0JiB1
c2VyU3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlclN0eWxlU2hlZXQ7IH0KIApAQCAt
NTMsNiArNTEsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVXNlckNvbnRlbnRXb3JsZCYgdXNlckNv
bnRlbnRXb3JsZCgpIGNvbnN0IHsgcmV0dXJuIG1fd29ybGQ7IH0KIAogcHJpdmF0ZToKKyAgICB1
aW50NjRfdCBtX2lkZW50aWZpZXI7CiAgICAgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQgbV91c2Vy
U3R5bGVTaGVldDsKICAgICBSZWY8VXNlckNvbnRlbnRXb3JsZD4gbV93b3JsZDsKIH07CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJTdHlsZVNoZWV0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2Vy
U3R5bGVTaGVldC5oCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL19XS1VzZXJTdHlsZVNoZWV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDEx
ICszOCwxMyBAQCBXS19DTEFTU19BVkFJTEFCTEUoV0tfTUFDX1RCQSwgV0tfSU9TX1RCCiAKIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgY29weSkgTlNTdHJpbmcgKnNvdXJjZTsKIAor
QHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU1VSTCAqYmFzZVVSTDsKKwog
QHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBnZXR0ZXI9aXNGb3JNYWluRnJhbWVPbmx5
KSBCT09MIGZvck1haW5GcmFtZU9ubHk7CiAKIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aFNvdXJj
ZTooTlNTdHJpbmcgKilzb3VyY2UgZm9yTWFpbkZyYW1lT25seTooQk9PTClmb3JNYWluRnJhbWVP
bmx5OwotCiAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNl
IGZvck1haW5GcmFtZU9ubHk6KEJPT0wpZm9yTWFpbkZyYW1lT25seSBsZWdhY3lXaGl0ZWxpc3Q6
KFdLX0FSUkFZKE5TU3RyaW5nICopICopbGVnYWN5V2hpdGVsaXN0IGxlZ2FjeUJsYWNrbGlzdDoo
V0tfQVJSQVkoTlNTdHJpbmcgKikgKilsZWdhY3lCbGFja2xpc3QgdXNlckNvbnRlbnRXb3JsZDoo
X1dLVXNlckNvbnRlbnRXb3JsZCAqKXVzZXJDb250ZW50V29ybGQ7CistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGZvck1haW5GcmFtZU9ubHk6KEJPT0wp
Zm9yTWFpbkZyYW1lT25seSBsZWdhY3lXaGl0ZWxpc3Q6KFdLX0FSUkFZKE5TU3RyaW5nICopICop
bGVnYWN5V2hpdGVsaXN0IGxlZ2FjeUJsYWNrbGlzdDooV0tfQVJSQVkoTlNTdHJpbmcgKikgKils
ZWdhY3lCbGFja2xpc3QgYmFzZVVSTDooTlNVUkwgKiliYXNlVVJMIHVzZXJDb250ZW50V29ybGQ6
KF9XS1VzZXJDb250ZW50V29ybGQgKil1c2VyQ29udGVudFdvcmxkOwogCiBAZW5kCiAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlclN0eWxlU2hlZXQubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2Vy
U3R5bGVTaGVldC5tbQkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9fV0tVc2VyU3R5bGVTaGVldC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgs
NiArMjgsNyBAQAogCiAjaW1wb3J0ICJBUElBcnJheS5oIgogI2ltcG9ydCAiV0tOU0FycmF5Lmgi
CisjaW1wb3J0ICJXS05TVVJMRXh0cmFzLmgiCiAjaW1wb3J0ICJXZWJLaXQySW5pdGlhbGl6ZS5o
IgogI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRXb3JsZEludGVybmFsLmgiCiAKQEAgLTYxLDExICs2
MiwyOSBAQCAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTb3VyY2U6KE5TU3RyaW5nCiAgICAgcmV0
dXJuIHNlbGY7CiB9CiAKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFNvdXJjZTooTlNTdHJpbmcg
Kilzb3VyY2UgZm9yTWFpbkZyYW1lT25seTooQk9PTClmb3JNYWluRnJhbWVPbmx5IGxlZ2FjeVdo
aXRlbGlzdDooV0tfQVJSQVkoTlNTdHJpbmcgKikgKilsZWdhY3lXaGl0ZWxpc3QgbGVnYWN5Qmxh
Y2tsaXN0OihXS19BUlJBWShOU1N0cmluZyAqKSAqKWxlZ2FjeUJsYWNrbGlzdCBiYXNlVVJMOihO
U1VSTCAqKWJhc2VVUkwgdXNlckNvbnRlbnRXb3JsZDooX1dLVXNlckNvbnRlbnRXb3JsZCAqKXVz
ZXJDb250ZW50V29ybGQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKworICAgIC8vIEZJWE1FOiBJbiB0aGUgQVBJIHRlc3QsIHdlIGNhbiB1
c2UgZ2VuZXJhdGVVbmlxdWVVUkwgYmVsb3cgYmVmb3JlIHRoZSBBUEk6Ok9iamVjdCBjb25zdHJ1
Y3RvciBoYXMgZG9uZSB0aGlzLi4uIHdoZXJlIHNob3VsZCB0aGlzIHJlYWxseSBiZT8KKyAgICBX
ZWJLaXQ6OkluaXRpYWxpemVXZWJLaXQyKCk7CisKKyAgICBBUEk6Ok9iamVjdDo6Y29uc3RydWN0
SW5XcmFwcGVyPEFQSTo6VXNlclN0eWxlU2hlZXQ+KHNlbGYsIFdlYkNvcmU6OlVzZXJTdHlsZVNo
ZWV0IHsgV1RGOjpTdHJpbmcoc291cmNlKSwgeyB7IH0sIFdURjo6U3RyaW5nKFtiYXNlVVJMIF93
ZWJfb3JpZ2luYWxEYXRhQXNXVEZTdHJpbmddKSB9LCBBUEk6OnRvU3RyaW5nVmVjdG9yKGxlZ2Fj
eVdoaXRlbGlzdCksIEFQSTo6dG9TdHJpbmdWZWN0b3IobGVnYWN5QmxhY2tsaXN0KSwgZm9yTWFp
bkZyYW1lT25seSA/IFdlYkNvcmU6OkluamVjdEluVG9wRnJhbWVPbmx5IDogV2ViQ29yZTo6SW5q
ZWN0SW5BbGxGcmFtZXMsIFdlYkNvcmU6OlVzZXJTdHlsZVVzZXJMZXZlbCB9LCAqdXNlckNvbnRl
bnRXb3JsZC0+X3VzZXJDb250ZW50V29ybGQpOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKIC0g
KE5TU3RyaW5nICopc291cmNlCiB7CiAgICAgcmV0dXJuIF91c2VyU3R5bGVTaGVldC0+dXNlclN0
eWxlU2hlZXQoKS5zb3VyY2UoKTsKIH0KIAorLSAoTlNVUkwgKiliYXNlVVJMCit7CisgICAgcmV0
dXJuIF91c2VyU3R5bGVTaGVldC0+dXNlclN0eWxlU2hlZXQoKS51cmwoKTsKK30KKwogLSAoQk9P
TClpc0Zvck1haW5GcmFtZU9ubHkKIHsKICAgICByZXR1cm4gX3VzZXJTdHlsZVNoZWV0LT51c2Vy
U3R5bGVTaGVldCgpLmluamVjdGVkRnJhbWVzKCkgPT0gV2ViQ29yZTo6SW5qZWN0SW5Ub3BGcmFt
ZU9ubHk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHAJ
KHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Vc2VyQ29udGVu
dC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDYgKzMzLDcgQEAKICNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiV2ViUHJv
Y2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIuaCIKKyNpbmNs
dWRlICJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuaCIKICNpbmNsdWRlICJXZWJV
c2VyQ29udGVudENvbnRyb2xsZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlVzZXJDb250ZW50
Q29udHJvbGxlclByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5oPgpAQCAtODAsMTQgKzgxLDE0IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyUHJveHk6OmFkZFAKICAgICAgICAgdXNlckNvbnRlbnRXb3JsZHMuYXBwZW5kKHN0ZDo6
bWFrZV9wYWlyKHdvcmxkLmtleS0+aWRlbnRpZmllcigpLCB3b3JsZC5rZXktPm5hbWUoKSkpOwog
ICAgIHdlYlByb2Nlc3NQcm94eS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJD
b250ZW50Q29udHJvbGxlcjo6QWRkVXNlckNvbnRlbnRXb3JsZHModXNlckNvbnRlbnRXb3JsZHMp
LCBtX2lkZW50aWZpZXIpOwogCi0gICAgVmVjdG9yPHN0ZDo6cGFpcjx1aW50NjRfdCwgV2ViQ29y
ZTo6VXNlclNjcmlwdD4+IHVzZXJTY3JpcHRzOworICAgIFZlY3RvcjxXZWJVc2VyU2NyaXB0RGF0
YT4gdXNlclNjcmlwdHM7CiAgICAgZm9yIChjb25zdCBhdXRvJiB1c2VyU2NyaXB0IDogbV91c2Vy
U2NyaXB0cy0+ZWxlbWVudHNPZlR5cGU8QVBJOjpVc2VyU2NyaXB0PigpKQotICAgICAgICB1c2Vy
U2NyaXB0cy5hcHBlbmQoc3RkOjptYWtlX3BhaXIodXNlclNjcmlwdC0+dXNlckNvbnRlbnRXb3Js
ZCgpLmlkZW50aWZpZXIoKSwgdXNlclNjcmlwdC0+dXNlclNjcmlwdCgpKSk7CisgICAgICAgIHVz
ZXJTY3JpcHRzLmFwcGVuZCh7IHVzZXJTY3JpcHQtPmlkZW50aWZpZXIoKSwgdXNlclNjcmlwdC0+
dXNlckNvbnRlbnRXb3JsZCgpLmlkZW50aWZpZXIoKSwgdXNlclNjcmlwdC0+dXNlclNjcmlwdCgp
IH0pOwogICAgIHdlYlByb2Nlc3NQcm94eS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Oldl
YlVzZXJDb250ZW50Q29udHJvbGxlcjo6QWRkVXNlclNjcmlwdHModXNlclNjcmlwdHMpLCBtX2lk
ZW50aWZpZXIpOwogCi0gICAgVmVjdG9yPHN0ZDo6cGFpcjx1aW50NjRfdCwgV2ViQ29yZTo6VXNl
clN0eWxlU2hlZXQ+PiB1c2VyU3R5bGVTaGVldHM7CisgICAgVmVjdG9yPFdlYlVzZXJTdHlsZVNo
ZWV0RGF0YT4gdXNlclN0eWxlU2hlZXRzOwogICAgIGZvciAoY29uc3QgYXV0byYgdXNlclN0eWxl
U2hlZXQgOiBtX3VzZXJTdHlsZVNoZWV0cy0+ZWxlbWVudHNPZlR5cGU8QVBJOjpVc2VyU3R5bGVT
aGVldD4oKSkKLSAgICAgICAgdXNlclN0eWxlU2hlZXRzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcih1
c2VyU3R5bGVTaGVldC0+dXNlckNvbnRlbnRXb3JsZCgpLmlkZW50aWZpZXIoKSwgdXNlclN0eWxl
U2hlZXQtPnVzZXJTdHlsZVNoZWV0KCkpKTsKKyAgICAgICAgdXNlclN0eWxlU2hlZXRzLmFwcGVu
ZCh7IHVzZXJTdHlsZVNoZWV0LT5pZGVudGlmaWVyKCksIHVzZXJTdHlsZVNoZWV0LT51c2VyQ29u
dGVudFdvcmxkKCkuaWRlbnRpZmllcigpLCB1c2VyU3R5bGVTaGVldC0+dXNlclN0eWxlU2hlZXQo
KSB9KTsKICAgICB3ZWJQcm9jZXNzUHJveHkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OkFkZFVzZXJTdHlsZVNoZWV0cyh1c2VyU3R5bGVTaGVl
dHMpLCBtX2lkZW50aWZpZXIpOwogCiAgICAgVmVjdG9yPFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVy
SGFuZGxlPiBtZXNzYWdlSGFuZGxlckhhbmRsZXM7CkBAIC0xNjgsNyArMTY5LDcgQEAgdm9pZCBX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6YWRkVQogICAgIG1fdXNlclNjcmlwdHMtPmVs
ZW1lbnRzKCkuYXBwZW5kKCZ1c2VyU2NyaXB0KTsKIAogICAgIGZvciAoV2ViUHJvY2Vzc1Byb3h5
KiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpCi0gICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpBZGRVc2VyU2NyaXB0cyh7
IHN0ZDo6bWFrZV9wYWlyKHdvcmxkLT5pZGVudGlmaWVyKCksIHVzZXJTY3JpcHQudXNlclNjcmlw
dCgpKSB9KSwgbV9pZGVudGlmaWVyKTsKKyAgICAgICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OkFkZFVzZXJTY3JpcHRzKHsg
eyB1c2VyU2NyaXB0LmlkZW50aWZpZXIoKSwgd29ybGQtPmlkZW50aWZpZXIoKSwgdXNlclNjcmlw
dC51c2VyU2NyaXB0KCkgfSB9KSwgbV9pZGVudGlmaWVyKTsKIH0KIAogdm9pZCBXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXJQcm94eTo6cmVtb3ZlVXNlclNjcmlwdChBUEk6OlVzZXJTY3JpcHQmIHVz
ZXJTY3JpcHQpCkBAIC0xNzYsNyArMTc3LDcgQEAgdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXJQcm94eTo6cmVtbwogICAgIFJlZjxBUEk6OlVzZXJDb250ZW50V29ybGQ+IHdvcmxkID0gdXNl
clNjcmlwdC51c2VyQ29udGVudFdvcmxkKCk7CiAKICAgICBmb3IgKFdlYlByb2Nlc3NQcm94eSog
cHJvY2VzcyA6IG1fcHJvY2Vzc2VzKQotICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6UmVtb3ZlVXNlclNjcmlwdCh3
b3JsZC0+aWRlbnRpZmllcigpLCB1c2VyU2NyaXB0LnVzZXJTY3JpcHQoKS51cmwoKS5zdHJpbmco
KSksIG1faWRlbnRpZmllcik7CisgICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZChN
ZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpSZW1vdmVVc2VyU2NyaXB0KHdvcmxk
LT5pZGVudGlmaWVyKCksIHVzZXJTY3JpcHQuaWRlbnRpZmllcigpKSwgbV9pZGVudGlmaWVyKTsK
IAogICAgIG1fdXNlclNjcmlwdHMtPmVsZW1lbnRzKCkucmVtb3ZlQWxsKCZ1c2VyU2NyaXB0KTsK
IApAQCAtMjIzLDcgKzIyNCw3IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6
OmFkZFUKICAgICBtX3VzZXJTdHlsZVNoZWV0cy0+ZWxlbWVudHMoKS5hcHBlbmQoJnVzZXJTdHls
ZVNoZWV0KTsKIAogICAgIGZvciAoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzIDogbV9wcm9jZXNz
ZXMpCi0gICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyOjpBZGRVc2VyU3R5bGVTaGVldHMoeyBzdGQ6Om1ha2VfcGFpcih3
b3JsZC0+aWRlbnRpZmllcigpLCB1c2VyU3R5bGVTaGVldC51c2VyU3R5bGVTaGVldCgpKSB9KSwg
bV9pZGVudGlmaWVyKTsKKyAgICAgICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OkFkZFVzZXJTdHlsZVNoZWV0cyh7IHsgdXNl
clN0eWxlU2hlZXQuaWRlbnRpZmllcigpLCB3b3JsZC0+aWRlbnRpZmllcigpLCB1c2VyU3R5bGVT
aGVldC51c2VyU3R5bGVTaGVldCgpIH0gfSksIG1faWRlbnRpZmllcik7CiB9CiAKIHZvaWQgV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92ZVVzZXJTdHlsZVNoZWV0KEFQSTo6VXNl
clN0eWxlU2hlZXQmIHVzZXJTdHlsZVNoZWV0KQpAQCAtMjMxLDcgKzIzMiw3IEBAIHZvaWQgV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW8KICAgICBSZWY8QVBJOjpVc2VyQ29udGVu
dFdvcmxkPiB3b3JsZCA9IHVzZXJTdHlsZVNoZWV0LnVzZXJDb250ZW50V29ybGQoKTsKIAogICAg
IGZvciAoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpCi0gICAgICAgIHBy
b2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9s
bGVyOjpSZW1vdmVVc2VyU3R5bGVTaGVldCh3b3JsZC0+aWRlbnRpZmllcigpLCB1c2VyU3R5bGVT
aGVldC51c2VyU3R5bGVTaGVldCgpLnVybCgpLnN0cmluZygpKSwgbV9pZGVudGlmaWVyKTsKKyAg
ICAgICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXI6OlJlbW92ZVVzZXJTdHlsZVNoZWV0KHdvcmxkLT5pZGVudGlmaWVyKCksIHVz
ZXJTdHlsZVNoZWV0LmlkZW50aWZpZXIoKSksIG1faWRlbnRpZmllcik7CiAKICAgICBtX3VzZXJT
dHlsZVNoZWV0cy0+ZWxlbWVudHMoKS5yZW1vdmVBbGwoJnVzZXJTdHlsZVNoZWV0KTsKIApJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQ0LDYgKzEwNDQsOCBAQAogCQk3
QTc5MUVGQTFDN0NGQ0YxMDBDNEM1MkIgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdBNzkxRUY5MUM3Q0ZCMzcwMEM0QzUyQiAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmVNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQk3QTc5MUVGQjFDN0NGRDAx
MDBDNEM1MkIgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlTWVzc2FnZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBNzkxRUY4MUM3Q0ZC
MTAwMEM0QzUyQiAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmVNZXNzYWdlcy5oICov
OyB9OwogCQk3QTc5MUVGQzFDN0QwOEM1MDBDNEM1MkIgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdBOUNEOEMwMUM3Nzk4NDkwMEQ5RjZDNyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUuY3BwICovOyB9OworCQk3QzA2NUYyQjFDOENEOTVGMDBDMkQ5NTAgLyogV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDY1RjI5MUM4Q0Q5NUYwMEMyRDk1MCAvKiBXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXJEYXRhVHlwZXMuY3BwICovOyB9OworCQk3QzA2NUYyQzFDOENEOTVGMDBD
MkQ5NTAgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzA2NUYyQTFDOENEOTVGMDBDMkQ5
NTAgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmggKi87IH07CiAJCTdDMTM1
QUE4MTczQjBCQ0EwMDU4NkFFMiAvKiBXS1BsdWdpbkluZm9ybWF0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMTM1QUE2MTczQjBCQ0EwMDU4
NkFFMiAvKiBXS1BsdWdpbkluZm9ybWF0aW9uLmNwcCAqLzsgfTsKIAkJN0MxMzVBQTkxNzNCMEJD
QTAwNTg2QUUyIC8qIFdLUGx1Z2luSW5mb3JtYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMTM1QUE3MTczQjBCQ0EwMDU4NkFFMiAvKiBXS1Bs
dWdpbkluZm9ybWF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJN0MxMzVBQUMxNzNCMENGRjAwNTg2QUUyIC8qIFBsdWdpbkluZm9ybWF0aW9u
TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0Mx
MzVBQUExNzNCMENGRjAwNTg2QUUyIC8qIFBsdWdpbkluZm9ybWF0aW9uTWFjLm1tICovOyB9OwpA
QCAtMzA1Nyw2ICszMDU5LDggQEAKIAkJN0E5Q0Q4QzAxQzc3OTg0OTAwRDlGNkM3IC8qIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3QTlDRDhDMTFDNzc5ODQ5MDBEOUY2QzcgLyogV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3QTlDRDhDMjFDNzc5QUQ2MDBEOUY2QzcgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJN0MwNjVGMjkxQzhDRDk1RjAwQzJEOTUwIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxl
ckRhdGFUeXBlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJV
c2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3QzA2NUYyQTFDOENEOTVGMDBDMkQ5NTAgLyogV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyRGF0YVR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlVzZXJD
b250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3QzBCQjlBODE4RENERTg5MDAwNkMwODYgLyogV2ViQ29udGVudC1pT1MuZW50aXRsZW1lbnRz
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54
bWw7IHBhdGggPSAiV2ViQ29udGVudC1pT1MuZW50aXRsZW1lbnRzIjsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0MwQkI5QTkxOERDREY1QTAwMDZDMDg2IC8qIE5ldHdvcmstaU9TLmVu
dGl0bGVtZW50cyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQueG1sOyBwYXRoID0gIk5ldHdvcmstaU9TLmVudGl0bGVtZW50cyI7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMTM1QUE2MTczQjBCQ0EwMDU4NkFFMiAvKiBXS1BsdWdp
bkluZm9ybWF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdL
UGx1Z2luSW5mb3JtYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDUx
MCw2ICs0NTE0LDggQEAKIAkJCQk4MzYwMzQ5RDFBQ0IzNEQ2MDA2MjY1NDkgLyogV2ViU1FMaXRl
RGF0YWJhc2VUcmFja2VyLmNwcCAqLywKIAkJCQk4MzYwMzQ5RTFBQ0IzNEQ2MDA2MjY1NDkgLyog
V2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyLmggKi8sCiAJCQkJQzAzMzdERDcxMjdBNTFCNjAwOEZG
NEY0IC8qIFdlYlRvdWNoRXZlbnQuY3BwICovLAorCQkJCTdDMDY1RjI5MUM4Q0Q5NUYwMEMyRDk1
MCAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuY3BwICovLAorCQkJCTdDMDY1
RjJBMUM4Q0Q5NUYwMEMyRDk1MCAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMu
aCAqLywKIAkJCQlDMDMzN0REMDEyN0EyOTgwMDA4RkY0RjQgLyogV2ViV2hlZWxFdmVudC5jcHAg
Ki8sCiAJCQkpOwogCQkJcGF0aCA9IFNoYXJlZDsKQEAgLTgwMDcsNiArODAxMyw3IEBACiAJCQkJ
MkQyOEE0OTcxQUY5NjVBMTAwRjE5MEM5IC8qIFdLVmlld0xheW91dFN0cmF0ZWd5LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1QzE0MjcwMjFDMjNGODRDMDBENDExODMgLyogRG93bmxvYWQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJGQTYxNzlGMTJGMEI5OUQwMDMzRTBDQSAvKiBXS1ZpZXdQcml2YXRl
LmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzA2NUYyQzFDOENEOTVGMDBDMkQ5NTAgLyogV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNUUxQUZF
OTE2QjIwQjc1MDA2Q0MxRjIgLyogV0tXZWJBcmNoaXZlLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
NUUxQUZFQjE2QjIwQjdFMDA2Q0MxRjIgLyogV0tXZWJBcmNoaXZlUmVzb3VyY2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBQTJFNTY3MThENzc1MDgwMDM4MTRCRCAvKiBXS1dlYlByb2Nlc3NCdW5k
bGVQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKQEAgLTkxNjUsNiArOTE3Miw3IEBACiAJCQkJ
NUMxNDI3MDExQzIzRjg0QzAwRDQxMTgzIC8qIERvd25sb2FkLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUMwMzM3REREMTI3QTUyMUMwMDhGRjRGNCAvKiBXZWJQbGF0Zm9ybVRvdWNoUG9pbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMkRBOTQ0QTIxODg0RTRGMDAwRUQ4NkRCIC8qIFdlYlBsYXRm
b3JtVG91Y2hQb2ludElPUy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3QzA2NUYyQjFDOENEOTVG
MDBDMkQ5NTAgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTMxRDU5MjlFMTY2RTA2MDAwMEU2QkYwMiAvKiBXZWJQbHVnSW5DbGllbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1NzQ0RUYxMjYzOEZCMzAwNkYwRjEyIC8qIFdlYlBv
cHVwSXRlbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlEM0I5NDg0NjExRkY0QjY1MDAwMzJCMzkg
LyogV2ViUG9wdXBNZW51LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRs
ZS5jcHAJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0
Nyw3IEBACiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbE1lc3NhZ2VzLmgiCisj
aW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvQVBJQ2FzdC5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0V4Y2VwdGlvbi5oPgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgpAQCAtNzAsNyArNzEsNiBAQAogI2lu
Y2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlQb2xpY3kuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Nlc3Np
b25JRC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1VzZXJDb250ZW50Q29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlckdlc3R1cmVJ
bmRpY2F0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VzZXJTY3JpcHQuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC00MDcsMzkgKzQwNywzOSBAQCBib29sIEluamVj
dGVkQnVuZGxlOjppc1Byb2Nlc3NpbmdVc2VyR2VzCiB2b2lkIEluamVjdGVkQnVuZGxlOjphZGRV
c2VyU2NyaXB0KFdlYlBhZ2VHcm91cFByb3h5KiBwYWdlR3JvdXAsIEluamVjdGVkQnVuZGxlU2Ny
aXB0V29ybGQqIHNjcmlwdFdvcmxkLCBjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5n
JiB1cmwsIEFQSTo6QXJyYXkqIHdoaXRlbGlzdCwgQVBJOjpBcnJheSogYmxhY2tsaXN0LCBXZWJD
b3JlOjpVc2VyU2NyaXB0SW5qZWN0aW9uVGltZSBpbmplY3Rpb25UaW1lLCBXZWJDb3JlOjpVc2Vy
Q29udGVudEluamVjdGVkRnJhbWVzIGluamVjdGVkRnJhbWVzKQogewogICAgIC8vIHVybCBpcyBu
b3QgZnJvbSBVUkw6OnN0cmluZygpLCBpLmUuIGl0IGhhcyBub3QgYWxyZWFkeSBiZWVuIHBhcnNl
ZCBieSBVUkwsIHNvIHdlIGhhdmUgdG8gdXNlIHRoZSByZWxhdGl2ZSBVUkwgY29uc3RydWN0b3Ig
Zm9yIFVSTCBpbnN0ZWFkIG9mIHRoZSBQYXJzZWRVUkxTdHJpbmdUYWcgdmVyc2lvbi4KLSAgICBh
dXRvIHVzZXJTY3JpcHQgPSBzdGQ6Om1ha2VfdW5pcXVlPFVzZXJTY3JpcHQ+KHNvdXJjZSwgVVJM
KFVSTCgpLCB1cmwpLCB3aGl0ZWxpc3QgPyB3aGl0ZWxpc3QtPnRvU3RyaW5nVmVjdG9yKCkgOiBW
ZWN0b3I8U3RyaW5nPigpLCBibGFja2xpc3QgPyBibGFja2xpc3QtPnRvU3RyaW5nVmVjdG9yKCkg
OiBWZWN0b3I8U3RyaW5nPigpLCBpbmplY3Rpb25UaW1lLCBpbmplY3RlZEZyYW1lcyk7CisgICAg
VXNlclNjcmlwdCB1c2VyU2NyaXB0eyBzb3VyY2UsIFVSTChVUkwoKSwgdXJsKSwgd2hpdGVsaXN0
ID8gd2hpdGVsaXN0LT50b1N0cmluZ1ZlY3RvcigpIDogVmVjdG9yPFN0cmluZz4oKSwgYmxhY2ts
aXN0ID8gYmxhY2tsaXN0LT50b1N0cmluZ1ZlY3RvcigpIDogVmVjdG9yPFN0cmluZz4oKSwgaW5q
ZWN0aW9uVGltZSwgaW5qZWN0ZWRGcmFtZXMgfTsKIAotICAgIHBhZ2VHcm91cC0+dXNlckNvbnRl
bnRDb250cm9sbGVyKCkuYWRkVXNlclNjcmlwdChzY3JpcHRXb3JsZC0+Y29yZVdvcmxkKCksIFdU
Rk1vdmUodXNlclNjcmlwdCkpOworICAgIHBhZ2VHcm91cC0+dXNlckNvbnRlbnRDb250cm9sbGVy
KCkuYWRkVXNlclNjcmlwdCgqc2NyaXB0V29ybGQsIFdURk1vdmUodXNlclNjcmlwdCkpOwogfQog
CiB2b2lkIEluamVjdGVkQnVuZGxlOjphZGRVc2VyU3R5bGVTaGVldChXZWJQYWdlR3JvdXBQcm94
eSogcGFnZUdyb3VwLCBJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkKiBzY3JpcHRXb3JsZCwgY29u
c3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdXJsLCBBUEk6OkFycmF5KiB3aGl0ZWxp
c3QsIEFQSTo6QXJyYXkqIGJsYWNrbGlzdCwgV2ViQ29yZTo6VXNlckNvbnRlbnRJbmplY3RlZEZy
YW1lcyBpbmplY3RlZEZyYW1lcykKIHsKICAgICAvLyB1cmwgaXMgbm90IGZyb20gVVJMOjpzdHJp
bmcoKSwgaS5lLiBpdCBoYXMgbm90IGFscmVhZHkgYmVlbiBwYXJzZWQgYnkgVVJMLCBzbyB3ZSBo
YXZlIHRvIHVzZSB0aGUgcmVsYXRpdmUgVVJMIGNvbnN0cnVjdG9yIGZvciBVUkwgaW5zdGVhZCBv
ZiB0aGUgUGFyc2VkVVJMU3RyaW5nVGFnIHZlcnNpb24uCi0gICAgYXV0byB1c2VyU3R5bGVTaGVl
dCA9IHN0ZDo6bWFrZV91bmlxdWU8VXNlclN0eWxlU2hlZXQ+KHNvdXJjZSwgVVJMKFVSTCgpLCB1
cmwpLCB3aGl0ZWxpc3QgPyB3aGl0ZWxpc3QtPnRvU3RyaW5nVmVjdG9yKCkgOiBWZWN0b3I8U3Ry
aW5nPigpLCBibGFja2xpc3QgPyBibGFja2xpc3QtPnRvU3RyaW5nVmVjdG9yKCkgOiBWZWN0b3I8
U3RyaW5nPigpLCBpbmplY3RlZEZyYW1lcywgVXNlclN0eWxlVXNlckxldmVsKTsKKyAgICBVc2Vy
U3R5bGVTaGVldCB1c2VyU3R5bGVTaGVldHsgc291cmNlLCBVUkwoVVJMKCksIHVybCksIHdoaXRl
bGlzdCA/IHdoaXRlbGlzdC0+dG9TdHJpbmdWZWN0b3IoKSA6IFZlY3RvcjxTdHJpbmc+KCksIGJs
YWNrbGlzdCA/IGJsYWNrbGlzdC0+dG9TdHJpbmdWZWN0b3IoKSA6IFZlY3RvcjxTdHJpbmc+KCks
IGluamVjdGVkRnJhbWVzLCBVc2VyU3R5bGVVc2VyTGV2ZWwgfTsKIAotICAgIHBhZ2VHcm91cC0+
dXNlckNvbnRlbnRDb250cm9sbGVyKCkuYWRkVXNlclN0eWxlU2hlZXQoc2NyaXB0V29ybGQtPmNv
cmVXb3JsZCgpLCBXVEZNb3ZlKHVzZXJTdHlsZVNoZWV0KSwgSW5qZWN0SW5FeGlzdGluZ0RvY3Vt
ZW50cyk7CisgICAgcGFnZUdyb3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIoKS5hZGRVc2VyU3R5
bGVTaGVldCgqc2NyaXB0V29ybGQsIFdURk1vdmUodXNlclN0eWxlU2hlZXQpKTsKIH0KIAogdm9p
ZCBJbmplY3RlZEJ1bmRsZTo6cmVtb3ZlVXNlclNjcmlwdChXZWJQYWdlR3JvdXBQcm94eSogcGFn
ZUdyb3VwLCBJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkKiBzY3JpcHRXb3JsZCwgY29uc3QgU3Ry
aW5nJiB1cmwpCiB7CiAgICAgLy8gdXJsIGlzIG5vdCBmcm9tIFVSTDo6c3RyaW5nKCksIGkuZS4g
aXQgaGFzIG5vdCBhbHJlYWR5IGJlZW4gcGFyc2VkIGJ5IFVSTCwgc28gd2UgaGF2ZSB0byB1c2Ug
dGhlIHJlbGF0aXZlIFVSTCBjb25zdHJ1Y3RvciBmb3IgVVJMIGluc3RlYWQgb2YgdGhlIFBhcnNl
ZFVSTFN0cmluZ1RhZyB2ZXJzaW9uLgotICAgIHBhZ2VHcm91cC0+dXNlckNvbnRlbnRDb250cm9s
bGVyKCkucmVtb3ZlVXNlclNjcmlwdChzY3JpcHRXb3JsZC0+Y29yZVdvcmxkKCksIFVSTChVUkwo
KSwgdXJsKSk7CisgICAgcGFnZUdyb3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIoKS5yZW1vdmVV
c2VyU2NyaXB0V2l0aFVSTCgqc2NyaXB0V29ybGQsIFVSTChVUkwoKSwgdXJsKSk7CiB9CiAKIHZv
aWQgSW5qZWN0ZWRCdW5kbGU6OnJlbW92ZVVzZXJTdHlsZVNoZWV0KFdlYlBhZ2VHcm91cFByb3h5
KiBwYWdlR3JvdXAsIEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQqIHNjcmlwdFdvcmxkLCBjb25z
dCBTdHJpbmcmIHVybCkKIHsKICAgICAvLyB1cmwgaXMgbm90IGZyb20gVVJMOjpzdHJpbmcoKSwg
aS5lLiBpdCBoYXMgbm90IGFscmVhZHkgYmVlbiBwYXJzZWQgYnkgVVJMLCBzbyB3ZSBoYXZlIHRv
IHVzZSB0aGUgcmVsYXRpdmUgVVJMIGNvbnN0cnVjdG9yIGZvciBVUkwgaW5zdGVhZCBvZiB0aGUg
UGFyc2VkVVJMU3RyaW5nVGFnIHZlcnNpb24uCi0gICAgcGFnZUdyb3VwLT51c2VyQ29udGVudENv
bnRyb2xsZXIoKS5yZW1vdmVVc2VyU3R5bGVTaGVldChzY3JpcHRXb3JsZC0+Y29yZVdvcmxkKCks
IFVSTChVUkwoKSwgdXJsKSk7CisgICAgcGFnZUdyb3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIo
KS5yZW1vdmVVc2VyU3R5bGVTaGVldFdpdGhVUkwoKnNjcmlwdFdvcmxkLCBVUkwoVVJMKCksIHVy
bCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpyZW1vdmVVc2VyU2NyaXB0cyhXZWJQYWdl
R3JvdXBQcm94eSogcGFnZUdyb3VwLCBJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkKiBzY3JpcHRX
b3JsZCkKIHsKLSAgICBwYWdlR3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigpLnJlbW92ZVVz
ZXJTY3JpcHRzKHNjcmlwdFdvcmxkLT5jb3JlV29ybGQoKSk7CisgICAgcGFnZUdyb3VwLT51c2Vy
Q29udGVudENvbnRyb2xsZXIoKS5yZW1vdmVVc2VyU2NyaXB0cygqc2NyaXB0V29ybGQpOwogfQog
CiB2b2lkIEluamVjdGVkQnVuZGxlOjpyZW1vdmVVc2VyU3R5bGVTaGVldHMoV2ViUGFnZUdyb3Vw
UHJveHkqIHBhZ2VHcm91cCwgSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCogc2NyaXB0V29ybGQp
CiB7Ci0gICAgcGFnZUdyb3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIoKS5yZW1vdmVVc2VyU3R5
bGVTaGVldHMoc2NyaXB0V29ybGQtPmNvcmVXb3JsZCgpKTsKKyAgICBwYWdlR3JvdXAtPnVzZXJD
b250ZW50Q29udHJvbGxlcigpLnJlbW92ZVVzZXJTdHlsZVNoZWV0cygqc2NyaXB0V29ybGQpOwog
fQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpyZW1vdmVBbGxVc2VyQ29udGVudChXZWJQYWdlR3Jv
dXBQcm94eSogcGFnZUdyb3VwKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2Vy
Q29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
LmNwcAkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2Vy
Q29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw3ICszNSw2IEBACiAjaW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9sbGVyTWVzc2FnZXMu
aCIKICNpbmNsdWRlICJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1lc3NhZ2VzLmgiCiAj
aW5jbHVkZSA8V2ViQ29yZS9ET01XcmFwcGVyV29ybGQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Nj
cmlwdENvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luRGF0YS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9Vc2VyU3R5bGVTaGVldC5oPgpAQCAtODAsNyArNzksNiBAQCBSZWY8V2ViVXNlckNv
bnRlbnRDb250cm9sbGVyPiBXZWJVc2VyQ29uCiAKIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyKHVpbnQ2NF90IGlkZW50aWZpZXIpCiAgICAgOiBtX2lk
ZW50aWZpZXIoaWRlbnRpZmllcikKLSAgICAsIG1fdXNlckNvbnRlbnRDb250cm9sbGVyKFVzZXJD
b250ZW50Q29udHJvbGxlcjo6Y3JlYXRlKCkpCiB7CiAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pZGVudGlmaWVyLCAqdGhpcyk7CiB9CkBAIC05NCw3
ICs5Miw2IEBAIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6fldlYlVzZXJDb250ZW4KICAgICB1
c2VyQ29udGVudENvbnRyb2xsZXJzKCkucmVtb3ZlKG1faWRlbnRpZmllcik7CiB9CiAKLQogdm9p
ZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJDb250ZW50V29ybGRzKGNvbnN0IFZl
Y3RvcjxzdGQ6OnBhaXI8dWludDY0X3QsIFN0cmluZz4+JiB3b3JsZHMpCiB7CiAgICAgZm9yIChh
dXRvJiB3b3JsZCA6IHdvcmxkcykgewpAQCAtMTI0LDIwICsxMjEsMjEgQEAgdm9pZCBXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZQogICAgIH0KIH0KIAotdm9pZCBXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHRzKGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8dWlu
dDY0X3QsIFdlYkNvcmU6OlVzZXJTY3JpcHQ+PiYgdXNlclNjcmlwdHMpCit2b2lkIFdlYlVzZXJD
b250ZW50Q29udHJvbGxlcjo6YWRkVXNlclNjcmlwdHMoY29uc3QgVmVjdG9yPFdlYlVzZXJTY3Jp
cHREYXRhPiYgdXNlclNjcmlwdHMpCiB7Ci0gICAgZm9yIChjb25zdCBhdXRvJiB1c2VyU2NyaXB0
V29ybGRQYWlyIDogdXNlclNjcmlwdHMpIHsKLSAgICAgICAgYXV0byBpdCA9IHdvcmxkTWFwKCku
ZmluZCh1c2VyU2NyaXB0V29ybGRQYWlyLmZpcnN0KTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHVz
ZXJTY3JpcHREYXRhIDogdXNlclNjcmlwdHMpIHsKKyAgICAgICAgYXV0byBpdCA9IHdvcmxkTWFw
KCkuZmluZCh1c2VyU2NyaXB0RGF0YS53b3JsZElkZW50aWZpZXIpOwogICAgICAgICBpZiAoaXQg
PT0gd29ybGRNYXAoKS5lbmQoKSkgewotICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJUcnlpbmcg
dG8gYWRkIGEgVXNlclNjcmlwdCB0byBhIFVzZXJDb250ZW50V29ybGQgKGlkPSUiIFBSSXU2NCAi
KSB0aGF0IGRvZXMgbm90IGV4aXN0LiIsIHVzZXJTY3JpcHRXb3JsZFBhaXIuZmlyc3QpOworICAg
ICAgICAgICAgV1RGTG9nQWx3YXlzKCJUcnlpbmcgdG8gYWRkIGEgVXNlclNjcmlwdCB0byBhIFVz
ZXJDb250ZW50V29ybGQgKGlkPSUiIFBSSXU2NCAiKSB0aGF0IGRvZXMgbm90IGV4aXN0LiIsIHVz
ZXJTY3JpcHREYXRhLndvcmxkSWRlbnRpZmllcik7CiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgfQogCi0gICAgICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5hZGRVc2VyU2NyaXB0
KGl0LT52YWx1ZS5maXJzdC0+Y29yZVdvcmxkKCksIHN0ZDo6bWFrZV91bmlxdWU8V2ViQ29yZTo6
VXNlclNjcmlwdD4odXNlclNjcmlwdFdvcmxkUGFpci5zZWNvbmQpKTsKKyAgICAgICAgVXNlclNj
cmlwdCBzY3JpcHQgPSB1c2VyU2NyaXB0RGF0YS51c2VyU2NyaXB0OworICAgICAgICBhZGRVc2Vy
U2NyaXB0SW50ZXJuYWwoKml0LT52YWx1ZS5maXJzdCwgdXNlclNjcmlwdERhdGEuaWRlbnRpZmll
ciwgV1RGTW92ZShzY3JpcHQpKTsKICAgICB9CiB9CiAKLXZvaWQgV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyOjpyZW1vdmVVc2VyU2NyaXB0KHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiB1cmxTdHJpbmcpCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3Zl
VXNlclNjcmlwdCh1aW50NjRfdCB3b3JsZElkZW50aWZpZXIsIHVpbnQ2NF90IHVzZXJTY3JpcHRJ
ZGVudGlmaWVyKQogewogICAgIGF1dG8gaXQgPSB3b3JsZE1hcCgpLmZpbmQod29ybGRJZGVudGlm
aWVyKTsKICAgICBpZiAoaXQgPT0gd29ybGRNYXAoKS5lbmQoKSkgewpAQCAtMTQ1LDcgKzE0Myw3
IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2UKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5yZW1vdmVVc2VyU2Ny
aXB0KGl0LT52YWx1ZS5maXJzdC0+Y29yZVdvcmxkKCksIFVSTChVUkwoKSwgdXJsU3RyaW5nKSk7
CisgICAgcmVtb3ZlVXNlclNjcmlwdEludGVybmFsKCppdC0+dmFsdWUuZmlyc3QsIHVzZXJTY3Jp
cHRJZGVudGlmaWVyKTsKIH0KIAogdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92
ZUFsbFVzZXJTY3JpcHRzKGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIHdvcmxkSWRlbnRpZmllcnMp
CkBAIC0xNTcsMjQgKzE1NSwyNSBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVt
b3ZlQWxsCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBtX3VzZXJD
b250ZW50Q29udHJvbGxlci0+cmVtb3ZlVXNlclNjcmlwdHMoaXQtPnZhbHVlLmZpcnN0LT5jb3Jl
V29ybGQoKSk7CisgICAgICAgIHJlbW92ZVVzZXJTY3JpcHRzKCppdC0+dmFsdWUuZmlyc3QpOwog
ICAgIH0KIH0KIAotdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNo
ZWV0cyhjb25zdCBWZWN0b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBXZWJDb3JlOjpVc2VyU3R5bGVT
aGVldD4+JiB1c2VyU3R5bGVTaGVldHMpCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6
YWRkVXNlclN0eWxlU2hlZXRzKGNvbnN0IFZlY3RvcjxXZWJVc2VyU3R5bGVTaGVldERhdGE+JiB1
c2VyU3R5bGVTaGVldHMpCiB7Ci0gICAgZm9yIChjb25zdCBhdXRvJiB1c2VyU3R5bGVTaGVldFdv
cmxkUGFpciA6IHVzZXJTdHlsZVNoZWV0cykgewotICAgICAgICBhdXRvIGl0ID0gd29ybGRNYXAo
KS5maW5kKHVzZXJTdHlsZVNoZWV0V29ybGRQYWlyLmZpcnN0KTsKKyAgICBmb3IgKGNvbnN0IGF1
dG8mIHVzZXJTdHlsZVNoZWV0RGF0YSA6IHVzZXJTdHlsZVNoZWV0cykgeworICAgICAgICBhdXRv
IGl0ID0gd29ybGRNYXAoKS5maW5kKHVzZXJTdHlsZVNoZWV0RGF0YS53b3JsZElkZW50aWZpZXIp
OwogICAgICAgICBpZiAoaXQgPT0gd29ybGRNYXAoKS5lbmQoKSkgewotICAgICAgICAgICAgV1RG
TG9nQWx3YXlzKCJUcnlpbmcgdG8gYWRkIGEgVXNlclN0eWxlU2hlZXQgdG8gYSBVc2VyQ29udGVu
dFdvcmxkIChpZD0lIiBQUkl1NjQgIikgdGhhdCBkb2VzIG5vdCBleGlzdC4iLCB1c2VyU3R5bGVT
aGVldFdvcmxkUGFpci5maXJzdCk7CisgICAgICAgICAgICBXVEZMb2dBbHdheXMoIlRyeWluZyB0
byBhZGQgYSBVc2VyU3R5bGVTaGVldCB0byBhIFVzZXJDb250ZW50V29ybGQgKGlkPSUiIFBSSXU2
NCAiKSB0aGF0IGRvZXMgbm90IGV4aXN0LiIsIHVzZXJTdHlsZVNoZWV0RGF0YS53b3JsZElkZW50
aWZpZXIpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLQotICAgICAgICBtX3Vz
ZXJDb250ZW50Q29udHJvbGxlci0+YWRkVXNlclN0eWxlU2hlZXQoaXQtPnZhbHVlLmZpcnN0LT5j
b3JlV29ybGQoKSwgc3RkOjptYWtlX3VuaXF1ZTxXZWJDb3JlOjpVc2VyU3R5bGVTaGVldD4odXNl
clN0eWxlU2hlZXRXb3JsZFBhaXIuc2Vjb25kKSwgSW5qZWN0SW5FeGlzdGluZ0RvY3VtZW50cyk7
CisgICAgICAgIAorICAgICAgICBVc2VyU3R5bGVTaGVldCBzaGVldCA9IHVzZXJTdHlsZVNoZWV0
RGF0YS51c2VyU3R5bGVTaGVldDsKKyAgICAgICAgYWRkVXNlclN0eWxlU2hlZXRJbnRlcm5hbCgq
aXQtPnZhbHVlLmZpcnN0LCB1c2VyU3R5bGVTaGVldERhdGEuaWRlbnRpZmllciwgV1RGTW92ZShz
aGVldCkpOwogICAgIH0KIH0KIAotdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92
ZVVzZXJTdHlsZVNoZWV0KHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiB1
cmxTdHJpbmcpCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclN0eWxl
U2hlZXQodWludDY0X3Qgd29ybGRJZGVudGlmaWVyLCB1aW50NjRfdCB1c2VyU3R5bGVTaGVldElk
ZW50aWZpZXIpCiB7CiAgICAgYXV0byBpdCA9IHdvcmxkTWFwKCkuZmluZCh3b3JsZElkZW50aWZp
ZXIpOwogICAgIGlmIChpdCA9PSB3b3JsZE1hcCgpLmVuZCgpKSB7CkBAIC0xODIsNyArMTgxLDcg
QEAgdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZQogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPnJlbW92ZVVzZXJTdHls
ZVNoZWV0KGl0LT52YWx1ZS5maXJzdC0+Y29yZVdvcmxkKCksIFVSTChVUkwoKSwgdXJsU3RyaW5n
KSk7CisgICAgcmVtb3ZlVXNlclN0eWxlU2hlZXRJbnRlcm5hbCgqaXQtPnZhbHVlLmZpcnN0LCB1
c2VyU3R5bGVTaGVldElkZW50aWZpZXIpOwogfQogCiB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJv
bGxlcjo6cmVtb3ZlQWxsVXNlclN0eWxlU2hlZXRzKGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIHdv
cmxkSWRlbnRpZmllcnMpCkBAIC0xOTQsNyArMTkzLDcgQEAgdm9pZCBXZWJVc2VyQ29udGVudENv
bnRyb2xsZXI6OnJlbW92ZUFsbAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAg
ICAgICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPnJlbW92ZVVzZXJTdHlsZVNoZWV0cyhpdC0+
dmFsdWUuZmlyc3QtPmNvcmVXb3JsZCgpKTsKKyAgICAgICAgcmVtb3ZlVXNlclN0eWxlU2hlZXRz
KCppdC0+dmFsdWUuZmlyc3QpOwogICAgIH0KIH0KIApAQCAtMjUzLDcgKzI1Miw5IEBAIHZvaWQg
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyU2MKICAgICAgICAgUmVmUHRyPFdlYlVz
ZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JQcm94eT4gZGVzY3JpcHRvciA9IFdlYlVzZXJNZXNz
YWdlSGFuZGxlckRlc2NyaXB0b3JQcm94eTo6Y3JlYXRlKHRoaXMsIGhhbmRsZS5uYW1lLCBoYW5k
bGUuaWRlbnRpZmllcik7CiAKICAgICAgICAgbV91c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9y
cy5hZGQoZGVzY3JpcHRvci0+aWRlbnRpZmllcigpLCBkZXNjcmlwdG9yKTsKLSAgICAgICAgbV91
c2VyQ29udGVudENvbnRyb2xsZXItPmFkZFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IoZGVz
Y3JpcHRvci0+ZGVzY3JpcHRvcigpKTsKKworICAgICAgICBhdXRvJiBjb3JlRGVzY3JpcHRvciA9
IGRlc2NyaXB0b3ItPmRlc2NyaXB0b3IoKTsKKyAgICAgICAgbV91c2VyTWVzc2FnZUhhbmRsZXJE
ZXNjcmlwdG9yc01hcC5hZGQoc3RkOjptYWtlX3BhaXIoY29yZURlc2NyaXB0b3IubmFtZSgpLCAm
Y29yZURlc2NyaXB0b3Iud29ybGQoKSksICZjb3JlRGVzY3JpcHRvcik7CiAgICAgfQogI2Vsc2UK
ICAgICBVTlVTRURfUEFSQU0oc2NyaXB0TWVzc2FnZUhhbmRsZXJzKTsKQEAgLTI2NSw4ICsyNjYs
MTAgQEAgdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZQogI2lmIEVOQUJM
RShVU0VSX01FU1NBR0VfSEFORExFUlMpCiAgICAgYXV0byBpdCA9IG1fdXNlck1lc3NhZ2VIYW5k
bGVyRGVzY3JpcHRvcnMuZmluZChpZGVudGlmaWVyKTsKICAgICBBU1NFUlQoaXQgIT0gbV91c2Vy
TWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycy5lbmQoKSk7Ci0gICAgCi0gICAgbV91c2VyQ29udGVu
dENvbnRyb2xsZXItPnJlbW92ZVVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IoaXQtPnZhbHVl
LT5kZXNjcmlwdG9yKCkpOworCisgICAgYXV0byYgY29yZURlc2NyaXB0b3IgPSBpdC0+dmFsdWUt
PmRlc2NyaXB0b3IoKTsKKyAgICBtX3VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzTWFwLnJl
bW92ZShzdGQ6Om1ha2VfcGFpcihjb3JlRGVzY3JpcHRvci5uYW1lKCksICZjb3JlRGVzY3JpcHRv
ci53b3JsZCgpKSk7CisKICAgICBtX3VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzLnJlbW92
ZShpdCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShpZGVudGlmaWVyKTsKQEAgLTI3OSwxOSAr
MjgyLDE2OCBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlckNvCiAgICAg
Zm9yIChjb25zdCBhdXRvJiB1c2VyQ29udGVudEV4dGVuc2lvbiA6IHVzZXJDb250ZW50RXh0ZW5z
aW9ucykgewogICAgICAgICBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhIGNvbnRlbnRF
eHRlbnNpb25EYXRhID0gdXNlckNvbnRlbnRFeHRlbnNpb24uc2Vjb25kOwogICAgICAgICBSZWZQ
dHI8V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiBjb21waWxlZENvbnRlbnRFeHRlbnNpb24g
PSBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZShXVEZNb3ZlKGNvbnRlbnRFeHRl
bnNpb25EYXRhKSk7Ci0gICAgICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5hZGRVc2VyQ29u
dGVudEV4dGVuc2lvbih1c2VyQ29udGVudEV4dGVuc2lvbi5maXJzdCwgY29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uKTsKKworICAgICAgICBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kLmFkZENvbnRl
bnRFeHRlbnNpb24odXNlckNvbnRlbnRFeHRlbnNpb24uZmlyc3QsIFdURk1vdmUoY29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uKSk7CiAgICAgfQogfQogCiB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJv
bGxlcjo6cmVtb3ZlVXNlckNvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQogewot
ICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5yZW1vdmVVc2VyQ29udGVudEV4dGVuc2lvbihu
YW1lKTsKKyAgICBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kLnJlbW92ZUNvbnRlbnRFeHRlbnNp
b24obmFtZSk7CiB9CiAKIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVBbGxV
c2VyQ29udGVudEV4dGVuc2lvbnMoKQogewotICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5y
ZW1vdmVBbGxVc2VyQ29udGVudEV4dGVuc2lvbnMoKTsKKyAgICBtX2NvbnRlbnRFeHRlbnNpb25C
YWNrZW5kLnJlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKCk7CiB9CiAjZW5kaWYKIAorCisKK3Zv
aWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0SW50ZXJuYWwoSW5qZWN0
ZWRCdW5kbGVTY3JpcHRXb3JsZCYgd29ybGQsIHVpbnQ2NF90IHVzZXJTY3JpcHRJZGVudGlmaWVy
LCBVc2VyU2NyaXB0JiYgdXNlclNjcmlwdCkKK3sKKyAgICBhdXRvJiBzY3JpcHRzSW5Xb3JsZCA9
IG1fdXNlclNjcmlwdHMuZW5zdXJlKCZ3b3JsZCwgW10geyByZXR1cm4gVmVjdG9yPHN0ZDo6cGFp
cjx1aW50NjRfdCwgV2ViQ29yZTo6VXNlclNjcmlwdD4+KCk7IH0pLml0ZXJhdG9yLT52YWx1ZTsK
KyAgICBzY3JpcHRzSW5Xb3JsZC5hcHBlbmQoc3RkOjptYWtlX3BhaXIodXNlclNjcmlwdElkZW50
aWZpZXIsIFdURk1vdmUodXNlclNjcmlwdCkpKTsKK30KKwordm9pZCBXZWJVc2VyQ29udGVudENv
bnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYgd29ybGQs
IFVzZXJTY3JpcHQmJiB1c2VyU2NyaXB0KQoreworICAgIGFkZFVzZXJTY3JpcHRJbnRlcm5hbCh3
b3JsZCwgMCwgV1RGTW92ZSh1c2VyU2NyaXB0KSk7Cit9CisKK3ZvaWQgV2ViVXNlckNvbnRlbnRD
b250cm9sbGVyOjpyZW1vdmVVc2VyU2NyaXB0V2l0aFVSTChJbmplY3RlZEJ1bmRsZVNjcmlwdFdv
cmxkJiB3b3JsZCwgY29uc3QgVVJMJiB1cmwpCit7CisgICAgYXV0byBpdCA9IG1fdXNlclNjcmlw
dHMuZmluZCgmd29ybGQpOworICAgIGlmIChpdCA9PSBtX3VzZXJTY3JpcHRzLmVuZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBhdXRvJiBzY3JpcHRzID0gaXQtPnZhbHVlOworICAgIGZvciAo
aW50IGkgPSBzY3JpcHRzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGlmIChz
Y3JpcHRzW2ldLnNlY29uZC51cmwoKSA9PSB1cmwpCisgICAgICAgICAgICBzY3JpcHRzLnJlbW92
ZShpKTsKKyAgICB9CisKKyAgICBpZiAoc2NyaXB0cy5pc0VtcHR5KCkpCisgICAgICAgIG1fdXNl
clNjcmlwdHMucmVtb3ZlKGl0KTsKK30KKwordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6
OnJlbW92ZVVzZXJTY3JpcHRJbnRlcm5hbChJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiB3b3Js
ZCwgdWludDY0X3QgdXNlclNjcmlwdElkZW50aWZpZXIpCit7CisgICAgYXV0byBpdCA9IG1fdXNl
clNjcmlwdHMuZmluZCgmd29ybGQpOworICAgIGlmIChpdCA9PSBtX3VzZXJTY3JpcHRzLmVuZCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiBzY3JpcHRzID0gaXQtPnZhbHVlOworICAg
IGZvciAoaW50IGkgPSBzY3JpcHRzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAg
IGlmIChzY3JpcHRzW2ldLmZpcnN0ID09IHVzZXJTY3JpcHRJZGVudGlmaWVyKQorICAgICAgICAg
ICAgc2NyaXB0cy5yZW1vdmUoaSk7CisgICAgfQorCisgICAgaWYgKHNjcmlwdHMuaXNFbXB0eSgp
KQorICAgICAgICBtX3VzZXJTY3JpcHRzLnJlbW92ZShpdCk7Cit9CisKK3ZvaWQgV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU2NyaXB0cyhJbmplY3RlZEJ1bmRsZVNjcmlwdFdv
cmxkJiB3b3JsZCkKK3sKKyAgICBtX3VzZXJTY3JpcHRzLnJlbW92ZSgmd29ybGQpOworfQorCit2
b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlclN0eWxlU2hlZXRJbnRlcm5hbChJ
bmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiB3b3JsZCwgdWludDY0X3QgdXNlclN0eWxlU2hlZXRJ
ZGVudGlmaWVyLCBVc2VyU3R5bGVTaGVldCYmIHVzZXJTdHlsZVNoZWV0KQoreworICAgIGF1dG8m
IHN0eWxlU2hlZXRzSW5Xb3JsZCA9IG1fdXNlclN0eWxlU2hlZXRzLmVuc3VyZSgmd29ybGQsIFtd
IHsgcmV0dXJuIFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0X3QsIFdlYkNvcmU6OlVzZXJTdHlsZVNo
ZWV0Pj4oKTsgfSkuaXRlcmF0b3ItPnZhbHVlOworICAgIHN0eWxlU2hlZXRzSW5Xb3JsZC5hcHBl
bmQoc3RkOjptYWtlX3BhaXIodXNlclN0eWxlU2hlZXRJZGVudGlmaWVyLCBXVEZNb3ZlKHVzZXJT
dHlsZVNoZWV0KSkpOworCisgICAgaW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlSW5B
bGxGcmFtZXNJbkFsbFBhZ2VzKCk7Cit9CisKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
OjphZGRVc2VyU3R5bGVTaGVldChJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiB3b3JsZCwgVXNl
clN0eWxlU2hlZXQmJiB1c2VyU3R5bGVTaGVldCkKK3sKKyAgICBhZGRVc2VyU3R5bGVTaGVldElu
dGVybmFsKHdvcmxkLCAwLCBXVEZNb3ZlKHVzZXJTdHlsZVNoZWV0KSk7Cit9CisKK3ZvaWQgV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU3R5bGVTaGVldFdpdGhVUkwoSW5qZWN0
ZWRCdW5kbGVTY3JpcHRXb3JsZCYgd29ybGQsIGNvbnN0IFVSTCYgdXJsKQoreworICAgIGF1dG8g
aXQgPSBtX3VzZXJTdHlsZVNoZWV0cy5maW5kKCZ3b3JsZCk7CisgICAgaWYgKGl0ID09IG1fdXNl
clN0eWxlU2hlZXRzLmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiBzdHlsZXNo
ZWV0cyA9IGl0LT52YWx1ZTsKKworICAgIGJvb2wgc2hlZXRzQ2hhbmdlZCA9IGZhbHNlOworICAg
IGZvciAoaW50IGkgPSBzdHlsZXNoZWV0cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAg
ICAgICBpZiAoc3R5bGVzaGVldHNbaV0uc2Vjb25kLnVybCgpID09IHVybCkgeworICAgICAgICAg
ICAgc3R5bGVzaGVldHMucmVtb3ZlKGkpOworICAgICAgICAgICAgc2hlZXRzQ2hhbmdlZCA9IHRy
dWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXNoZWV0c0NoYW5nZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChzdHlsZXNoZWV0cy5pc0VtcHR5KCkpCisgICAgICAgIG1fdXNl
clN0eWxlU2hlZXRzLnJlbW92ZShpdCk7CisKKyAgICBpbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNo
ZWV0Q2FjaGVJbkFsbEZyYW1lc0luQWxsUGFnZXMoKTsKK30KKwordm9pZCBXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNoZWV0SW50ZXJuYWwoSW5qZWN0ZWRCdW5kbGVT
Y3JpcHRXb3JsZCYgd29ybGQsIHVpbnQ2NF90IHVzZXJTdHlsZVNoZWV0SWRlbnRpZmllcikKK3sK
KyAgICBhdXRvIGl0ID0gbV91c2VyU3R5bGVTaGVldHMuZmluZCgmd29ybGQpOworICAgIGlmIChp
dCA9PSBtX3VzZXJTdHlsZVNoZWV0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0
byYgc3R5bGVzaGVldHMgPSBpdC0+dmFsdWU7CisKKyAgICBib29sIHNoZWV0c0NoYW5nZWQgPSBm
YWxzZTsKKyAgICBmb3IgKGludCBpID0gc3R5bGVzaGVldHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAt
LWkpIHsKKyAgICAgICAgaWYgKHN0eWxlc2hlZXRzW2ldLmZpcnN0ID09IHVzZXJTdHlsZVNoZWV0
SWRlbnRpZmllcikgeworICAgICAgICAgICAgc3R5bGVzaGVldHMucmVtb3ZlKGkpOworICAgICAg
ICAgICAgc2hlZXRzQ2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
IXNoZWV0c0NoYW5nZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChzdHlsZXNoZWV0cy5p
c0VtcHR5KCkpCisgICAgICAgIG1fdXNlclN0eWxlU2hlZXRzLnJlbW92ZShpdCk7CisKKyAgICBp
bnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lc0luQWxsUGFnZXMoKTsK
K30KKwordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNoZWV0
cyhJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiB3b3JsZCkKK3sKKyAgICBpZiAoIW1fdXNlclN0
eWxlU2hlZXRzLnJlbW92ZSgmd29ybGQpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnZhbGlk
YXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lc0luQWxsUGFnZXMoKTsKK30KKwor
dm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZUFsbFVzZXJDb250ZW50KCkKK3sK
KyAgICBtX3VzZXJTY3JpcHRzLmNsZWFyKCk7CisKKyAgICBpZiAoIW1fdXNlclN0eWxlU2hlZXRz
LmlzRW1wdHkoKSkgeworICAgICAgICBtX3VzZXJTdHlsZVNoZWV0cy5jbGVhcigpOworICAgICAg
ICBpbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lc0luQWxsUGFnZXMo
KTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpmb3JFYWNoVXNl
clNjcmlwdChjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6RE9NV3JhcHBlcldvcmxk
JiwgY29uc3QgV2ViQ29yZTo6VXNlclNjcmlwdCYpPiYgZnVuY3RvcikgY29uc3QKK3sKKyAgICBm
b3IgKGNvbnN0IGF1dG8mIHdvcmxkQW5kVXNlclNjcmlwdFZlY3RvciA6IG1fdXNlclNjcmlwdHMp
IHsKKyAgICAgICAgYXV0byYgd29ybGQgPSB3b3JsZEFuZFVzZXJTY3JpcHRWZWN0b3Iua2V5LT5j
b3JlV29ybGQoKTsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpZGVudGlmaWVyVXNlclNjcmlw
dFBhaXIgOiB3b3JsZEFuZFVzZXJTY3JpcHRWZWN0b3IudmFsdWUpCisgICAgICAgICAgICBmdW5j
dG9yKHdvcmxkLCBpZGVudGlmaWVyVXNlclNjcmlwdFBhaXIuc2Vjb25kKTsKKyAgICB9Cit9CisK
K3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpmb3JFYWNoVXNlclN0eWxlU2hlZXQoY29u
c3Qgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0Jik+JiBm
dW5jdG9yKSBjb25zdAoreworICAgIGZvciAoYXV0byYgc3R5bGVTaGVldFZlY3RvciA6IG1fdXNl
clN0eWxlU2hlZXRzLnZhbHVlcygpKSB7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgaWRlbnRp
ZmllclVzZXJTdHlsZVNoZWV0UGFpciA6IHN0eWxlU2hlZXRWZWN0b3IpCisgICAgICAgICAgICBm
dW5jdG9yKGlkZW50aWZpZXJVc2VyU3R5bGVTaGVldFBhaXIuc2Vjb25kKTsKKyAgICB9Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9V
c2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxl
ci5oCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJD
b250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5
ICsyOCwxOSBAQAogCiAjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCiAjaW5jbHVkZSAiV2Vi
U2NyaXB0TWVzc2FnZUhhbmRsZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1VzZXJDb250ZW50Q29u
dHJvbGxlci5oPgorI2luY2x1ZGUgIldlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvVXNlckNvbnRlbnRQcm92aWRlci5oPgogI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworI2lmIEVOQUJMRShD
T05URU5UX0VYVEVOU0lPTlMpCisjaW5jbHVkZSA8V2ViQ29yZS9Db250ZW50RXh0ZW5zaW9uc0Jh
Y2tlbmQuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgQ29udGVu
dEV4dGVuc2lvbnMgeworY2xhc3MgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOworfQorfQogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtMzgsMzAgKzQ4LDQ0IEBAIGNsYXNzIEluamVjdGVkQnVu
ZGxlU2NyaXB0V29ybGQ7CiBjbGFzcyBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhOwog
Y2xhc3MgV2ViVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvclByb3h5OwogCi1jbGFzcyBXZWJV
c2VyQ29udGVudENvbnRyb2xsZXIgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXI+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyICB7CitjbGFzcyBX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXIgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6VXNlckNvbnRl
bnRQcm92aWRlciwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFJlZjxXZWJVc2VyQ29udGVudENvbnRyb2xsZXI+IGdldE9yQ3JlYXRlKHVpbnQ2NF90
IGlkZW50aWZpZXIpOwogICAgIHZpcnR1YWwgfldlYlVzZXJDb250ZW50Q29udHJvbGxlcigpOwog
Ci0gICAgV2ViQ29yZTo6VXNlckNvbnRlbnRDb250cm9sbGVyJiB1c2VyQ29udGVudENvbnRyb2xs
ZXIoKSB7IHJldHVybiBtX3VzZXJDb250ZW50Q29udHJvbGxlcjsgfQotCiAgICAgdWludDY0X3Qg
aWRlbnRpZmllcigpIHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfSAKIAorICAgIHZvaWQgYWRkVXNl
clNjcmlwdChJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiwgV2ViQ29yZTo6VXNlclNjcmlwdCYm
KTsKKyAgICB2b2lkIHJlbW92ZVVzZXJTY3JpcHRXaXRoVVJMKEluamVjdGVkQnVuZGxlU2NyaXB0
V29ybGQmLCBjb25zdCBXZWJDb3JlOjpVUkwmKTsKKyAgICB2b2lkIHJlbW92ZVVzZXJTY3JpcHRz
KEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQmKTsKKyAgICB2b2lkIGFkZFVzZXJTdHlsZVNoZWV0
KEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQmLCBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCYmKTsK
KyAgICB2b2lkIHJlbW92ZVVzZXJTdHlsZVNoZWV0V2l0aFVSTChJbmplY3RlZEJ1bmRsZVNjcmlw
dFdvcmxkJiwgY29uc3QgV2ViQ29yZTo6VVJMJik7CisgICAgdm9pZCByZW1vdmVVc2VyU3R5bGVT
aGVldHMoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYpOworICAgIHZvaWQgcmVtb3ZlQWxsVXNl
ckNvbnRlbnQoKTsKKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBXZWJVc2VyQ29udGVudENvbnRy
b2xsZXIodWludDY0X3QgaWRlbnRpZmllcik7CiAKKyAgICAvLyBXZWJDb3JlOjpVc2VyQ29udGVu
dFByb3ZpZGVyCisgICAgdm9pZCBmb3JFYWNoVXNlclNjcmlwdChjb25zdCBzdGQ6OmZ1bmN0aW9u
PHZvaWQoV2ViQ29yZTo6RE9NV3JhcHBlcldvcmxkJiwgY29uc3QgV2ViQ29yZTo6VXNlclNjcmlw
dCYpPiYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZm9yRWFjaFVzZXJTdHlsZVNoZWV0KGNv
bnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCYpPiYp
IGNvbnN0IG92ZXJyaWRlOworICAgIGNvbnN0IFdlYkNvcmU6OlVzZXJNZXNzYWdlSGFuZGxlckRl
c2NyaXB0b3JNYXAmIHVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV91c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yc01hcDsgfQorI2lmIEVO
QUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisgICAgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6
OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCYgdXNlckNvbnRlbnRFeHRlbnNpb25CYWNrZW5kKCkg
b3ZlcnJpZGUgeyByZXR1cm4gbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZDsgfQorI2VuZGlmCisK
ICAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlci4KICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiYsIElQQzo6TWVzc2FnZURlY29kZXImKSBvdmVycmlkZTsKIAogICAg
IHZvaWQgYWRkVXNlckNvbnRlbnRXb3JsZHMoY29uc3QgVmVjdG9yPHN0ZDo6cGFpcjx1aW50NjRf
dCwgU3RyaW5nPj4mKTsKICAgICB2b2lkIHJlbW92ZVVzZXJDb250ZW50V29ybGRzKGNvbnN0IFZl
Y3Rvcjx1aW50NjRfdD4mKTsKIAotICAgIHZvaWQgYWRkVXNlclNjcmlwdHMoY29uc3QgVmVjdG9y
PHN0ZDo6cGFpcjx1aW50NjRfdCwgV2ViQ29yZTo6VXNlclNjcmlwdD4+Jik7Ci0gICAgdm9pZCBy
ZW1vdmVVc2VyU2NyaXB0KHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiB1
cmxTdHJpbmcpOworICAgIHZvaWQgYWRkVXNlclNjcmlwdHMoY29uc3QgVmVjdG9yPFdlYlVzZXJT
Y3JpcHREYXRhPiYpOworICAgIHZvaWQgcmVtb3ZlVXNlclNjcmlwdCh1aW50NjRfdCB3b3JsZElk
ZW50aWZpZXIsIHVpbnQ2NF90IHVzZXJTY3JpcHRJZGVudGlmaWVyKTsKICAgICB2b2lkIHJlbW92
ZUFsbFVzZXJTY3JpcHRzKGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mKTsKIAotICAgIHZvaWQgYWRk
VXNlclN0eWxlU2hlZXRzKGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0X3QsIFdlYkNvcmU6
OlVzZXJTdHlsZVNoZWV0Pj4mKTsKLSAgICB2b2lkIHJlbW92ZVVzZXJTdHlsZVNoZWV0KHVpbnQ2
NF90IHdvcmxkSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpOworICAgIHZvaWQg
YWRkVXNlclN0eWxlU2hlZXRzKGNvbnN0IFZlY3RvcjxXZWJVc2VyU3R5bGVTaGVldERhdGE+Jik7
CisgICAgdm9pZCByZW1vdmVVc2VyU3R5bGVTaGVldCh1aW50NjRfdCB3b3JsZElkZW50aWZpZXIs
IHVpbnQ2NF90IHVzZXJTY3JpcHRJZGVudGlmaWVyKTsKICAgICB2b2lkIHJlbW92ZUFsbFVzZXJT
dHlsZVNoZWV0cyhjb25zdCBWZWN0b3I8dWludDY0X3Q+Jik7CiAKICAgICB2b2lkIGFkZFVzZXJT
Y3JpcHRNZXNzYWdlSGFuZGxlcnMoY29uc3QgVmVjdG9yPFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVy
SGFuZGxlPiYpOwpAQCAtNzMsMTEgKzk3LDI3IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZW1vdmVB
bGxVc2VyQ29udGVudEV4dGVuc2lvbnMoKTsKICNlbmRpZgogCisKKyAgICB2b2lkIGFkZFVzZXJT
Y3JpcHRJbnRlcm5hbChJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiwgdWludDY0X3QgdXNlclNj
cmlwdElkZW50aWZpZXIsIFdlYkNvcmU6OlVzZXJTY3JpcHQmJik7CisgICAgdm9pZCByZW1vdmVV
c2VyU2NyaXB0SW50ZXJuYWwoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYsIHVpbnQ2NF90IHVz
ZXJTY3JpcHRJZGVudGlmaWVyKTsKKyAgICB2b2lkIGFkZFVzZXJTdHlsZVNoZWV0SW50ZXJuYWwo
SW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYsIHVpbnQ2NF90IHVzZXJTdHlsZVNoZWV0SWRlbnRp
ZmllciwgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQmJik7CisgICAgdm9pZCByZW1vdmVVc2VyU3R5
bGVTaGVldEludGVybmFsKEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQmLCB1aW50NjRfdCB1c2Vy
U3R5bGVTaGVldElkZW50aWZpZXIpOworCisKICAgICB1aW50NjRfdCBtX2lkZW50aWZpZXI7Ci0g
ICAgUmVmPFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJvbGxlcj4gbV91c2VyQ29udGVudENvbnRy
b2xsZXI7Ci0jaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKICAgICBIYXNoTWFwPHVp
bnQ2NF90LCBSZWZQdHI8V2ViVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvclByb3h5Pj4gbV91
c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yczsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQ
dHI8SW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZD4sIFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0X3Qs
IFdlYkNvcmU6OlVzZXJTY3JpcHQ+Pj4gV29ybGRUb1VzZXJTY3JpcHRNYXA7CisgICAgV29ybGRU
b1VzZXJTY3JpcHRNYXAgbV91c2VyU2NyaXB0czsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQ
dHI8SW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZD4sIFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0X3Qs
IFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0Pj4+IFdvcmxkVG9Vc2VyU3R5bGVTaGVldE1hcDsKKyAg
ICBXb3JsZFRvVXNlclN0eWxlU2hlZXRNYXAgbV91c2VyU3R5bGVTaGVldHM7CisKKyAgICBXZWJD
b3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yTWFwIG1fdXNlck1lc3NhZ2VIYW5kbGVy
RGVzY3JpcHRvcnNNYXA7CisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKyAgICBXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kIG1fY29udGVu
dEV4dGVuc2lvbkJhY2tlbmQ7CiAjZW5kaWYKKwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250
ZW50Q29udHJvbGxlci5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5tZXNzYWdlcy5p
bgkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29u
dGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkK
QEAgLTI3LDEyICsyNywxMiBAQCBtZXNzYWdlcyAtPiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXIg
ewogICAgIEFkZFVzZXJDb250ZW50V29ybGRzKFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0X3QsIFN0
cmluZz4+IHdvcmxkcyk7CiAgICAgUmVtb3ZlVXNlckNvbnRlbnRXb3JsZHMoVmVjdG9yPHVpbnQ2
NF90PiB3b3JsZElkZW50aWZpZXJzKTsKIAotICAgIEFkZFVzZXJTY3JpcHRzKFZlY3RvcjxzdGQ6
OnBhaXI8dWludDY0X3QsIFdlYkNvcmU6OlVzZXJTY3JpcHQ+PiB1c2VyU2NyaXB0cyk7Ci0gICAg
UmVtb3ZlVXNlclNjcmlwdCh1aW50NjRfdCB3b3JsZElkZW50aWZpZXIsIFN0cmluZyB1cmwpOwor
ICAgIEFkZFVzZXJTY3JpcHRzKFZlY3RvcjxzdHJ1Y3QgV2ViS2l0OjpXZWJVc2VyU2NyaXB0RGF0
YT4gdXNlclNjcmlwdHMpOworICAgIFJlbW92ZVVzZXJTY3JpcHQodWludDY0X3Qgd29ybGRJZGVu
dGlmaWVyLCB1aW50NjRfdCBpZGVudGlmaWVyKTsKICAgICBSZW1vdmVBbGxVc2VyU2NyaXB0cyhW
ZWN0b3I8dWludDY0X3Q+IHdvcmxkSWRlbnRpZmllcnMpOwogCi0gICAgQWRkVXNlclN0eWxlU2hl
ZXRzKFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0X3QsIFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0Pj4g
dXNlclN0eWxlU2hlZXRzKTsKLSAgICBSZW1vdmVVc2VyU3R5bGVTaGVldCh1aW50NjRfdCB3b3Js
ZElkZW50aWZpZXIsIFN0cmluZyB1cmwpOworICAgIEFkZFVzZXJTdHlsZVNoZWV0cyhWZWN0b3I8
c3RydWN0IFdlYktpdDo6V2ViVXNlclN0eWxlU2hlZXREYXRhPiB1c2VyU3R5bGVTaGVldHMpOwor
ICAgIFJlbW92ZVVzZXJTdHlsZVNoZWV0KHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllciwgdWludDY0
X3QgaWRlbnRpZmllcik7CiAgICAgUmVtb3ZlQWxsVXNlclN0eWxlU2hlZXRzKFZlY3Rvcjx1aW50
NjRfdD4gd29ybGRJZGVudGlmaWVycyk7CiAKICAgICBBZGRVc2VyU2NyaXB0TWVzc2FnZUhhbmRs
ZXJzKFZlY3RvcjxXZWJLaXQ6OldlYlNjcmlwdE1lc3NhZ2VIYW5kbGVySGFuZGxlPiBzY3JpcHRN
ZXNzYWdlSGFuZGxlcnMpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3
IEBACiAjaW5jbHVkZSAiRXZlbnREaXNwYXRjaGVyLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5k
bGUuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdC5oIgorI2luY2x1
ZGUgIkluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAj
aW5jbHVkZSAiTmV0c2NhcGVQbHVnaW4uaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QZXJtaXNz
aW9uUmVxdWVzdE1hbmFnZXIuaCIKQEAgLTM5Nyw3ICszOTgsNyBAQCBXZWJQYWdlOjpXZWJQYWdl
KHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgCiAKICAgICBwYWdlQ29uZmlndXJhdGlvbi5kYXRhYmFz
ZVByb3ZpZGVyID0gV2ViRGF0YWJhc2VQcm92aWRlcjo6Z2V0T3JDcmVhdGUobV9wYWdlR3JvdXAt
PnBhZ2VHcm91cElEKCkpOwogICAgIHBhZ2VDb25maWd1cmF0aW9uLnN0b3JhZ2VOYW1lc3BhY2VQ
cm92aWRlciA9IFdlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcjo6Z2V0T3JDcmVhdGUobV9wYWdl
R3JvdXAtPnBhZ2VHcm91cElEKCkpOwotICAgIHBhZ2VDb25maWd1cmF0aW9uLnVzZXJDb250ZW50
Q29udHJvbGxlciA9ICZtX3VzZXJDb250ZW50Q29udHJvbGxlci0+dXNlckNvbnRlbnRDb250cm9s
bGVyKCk7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24udXNlckNvbnRlbnRQcm92aWRlciA9IG1fdXNl
ckNvbnRlbnRDb250cm9sbGVyLnB0cigpOwogICAgIHBhZ2VDb25maWd1cmF0aW9uLnZpc2l0ZWRM
aW5rU3RvcmUgPSBWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjo6Z2V0T3JDcmVhdGUocGFyYW1l
dGVycy52aXNpdGVkTGlua1RhYmxlSUQpOwogCiAjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykK
QEAgLTUyMjMsMjEgKzUyMjQsMjEgQEAgdm9pZCBXZWJQYWdlOjppbWFnZU9yTWVkaWFEb2N1bWVu
dFNpemVDaAogCiB2b2lkIFdlYlBhZ2U6OmFkZFVzZXJTY3JpcHQoY29uc3QgU3RyaW5nJiBzb3Vy
Y2UsIFdlYkNvcmU6OlVzZXJDb250ZW50SW5qZWN0ZWRGcmFtZXMgaW5qZWN0ZWRGcmFtZXMsIFdl
YkNvcmU6OlVzZXJTY3JpcHRJbmplY3Rpb25UaW1lIGluamVjdGlvblRpbWUpCiB7Ci0gICAgV2Vi
Q29yZTo6VXNlclNjcmlwdCB1c2VyU2NyaXB0KHNvdXJjZSwgV2ViQ29yZTo6YmxhbmtVUkwoKSwg
VmVjdG9yPFN0cmluZz4oKSwgVmVjdG9yPFN0cmluZz4oKSwgaW5qZWN0aW9uVGltZSwgaW5qZWN0
ZWRGcmFtZXMpOworICAgIFdlYkNvcmU6OlVzZXJTY3JpcHQgdXNlclNjcmlwdHsgc291cmNlLCBX
ZWJDb3JlOjpibGFua1VSTCgpLCBWZWN0b3I8U3RyaW5nPigpLCBWZWN0b3I8U3RyaW5nPigpLCBp
bmplY3Rpb25UaW1lLCBpbmplY3RlZEZyYW1lcyB9OwogCi0gICAgbV91c2VyQ29udGVudENvbnRy
b2xsZXItPnVzZXJDb250ZW50Q29udHJvbGxlcigpLmFkZFVzZXJTY3JpcHQobWFpblRocmVhZE5v
cm1hbFdvcmxkKCksIHN0ZDo6bWFrZV91bmlxdWU8V2ViQ29yZTo6VXNlclNjcmlwdD4odXNlclNj
cmlwdCkpOworICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5hZGRVc2VyU2NyaXB0KCpJbmpl
Y3RlZEJ1bmRsZVNjcmlwdFdvcmxkOjpub3JtYWxXb3JsZCgpLCBXVEZNb3ZlKHVzZXJTY3JpcHQp
KTsKIH0KIAogdm9pZCBXZWJQYWdlOjphZGRVc2VyU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHNv
dXJjZSwgV2ViQ29yZTo6VXNlckNvbnRlbnRJbmplY3RlZEZyYW1lcyBpbmplY3RlZEZyYW1lcykK
IHsKLSAgICBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCB1c2VyU3R5bGVTaGVldChzb3VyY2UsIFdl
YkNvcmU6OmJsYW5rVVJMKCksIFZlY3RvcjxTdHJpbmc+KCksIFZlY3RvcjxTdHJpbmc+KCksIGlu
amVjdGVkRnJhbWVzLCBVc2VyU3R5bGVVc2VyTGV2ZWwpOworICAgIFdlYkNvcmU6OlVzZXJTdHls
ZVNoZWV0IHVzZXJTdHlsZVNoZWV0eyBzb3VyY2UsIFdlYkNvcmU6OmJsYW5rVVJMKCksIFZlY3Rv
cjxTdHJpbmc+KCksIFZlY3RvcjxTdHJpbmc+KCksIGluamVjdGVkRnJhbWVzLCBVc2VyU3R5bGVV
c2VyTGV2ZWwgfTsKIAotICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT51c2VyQ29udGVudENv
bnRyb2xsZXIoKS5hZGRVc2VyU3R5bGVTaGVldChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSwgc3Rk
OjptYWtlX3VuaXF1ZTxXZWJDb3JlOjpVc2VyU3R5bGVTaGVldD4odXNlclN0eWxlU2hlZXQpLCBJ
bmplY3RJbkV4aXN0aW5nRG9jdW1lbnRzKTsKKyAgICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+
YWRkVXNlclN0eWxlU2hlZXQoKkluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQ6Om5vcm1hbFdvcmxk
KCksIFdURk1vdmUodXNlclN0eWxlU2hlZXQpKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpyZW1vdmVB
bGxVc2VyQ29udGVudCgpCiB7Ci0gICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPnVzZXJDb250
ZW50Q29udHJvbGxlcigpLnJlbW92ZUFsbFVzZXJDb250ZW50KCk7CisgICAgbV91c2VyQ29udGVu
dENvbnRyb2xsZXItPnJlbW92ZUFsbFVzZXJDb250ZW50KCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6
ZGlzcGF0Y2hEaWRMYXlvdXQoV2ViQ29yZTo6TGF5b3V0TWlsZXN0b25lcyBtaWxlc3RvbmVzKQpJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZUdyb3VwUHJveHkuY3BwCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01Niw5ICs1Niw5IEBAIFdlYlBhZ2VHcm91cFByb3h5Ojp+V2ViUGFnZUdyb3VwUHJveHkoKQog
ewogfQogCi1XZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXImIFdlYlBhZ2VHcm91cFByb3h5
Ojp1c2VyQ29udGVudENvbnRyb2xsZXIoKQorV2ViVXNlckNvbnRlbnRDb250cm9sbGVyJiBXZWJQ
YWdlR3JvdXBQcm94eTo6dXNlckNvbnRlbnRDb250cm9sbGVyKCkKIHsKLSAgICByZXR1cm4gbV91
c2VyQ29udGVudENvbnRyb2xsZXItPnVzZXJDb250ZW50Q29udHJvbGxlcigpOworICAgIHJldHVy
biBtX3VzZXJDb250ZW50Q29udHJvbGxlcjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZUdyb3VwUHJveHkuaAkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcg
KzMyLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgUGFnZUdyb3VwOwotY2xhc3Mg
VXNlckNvbnRlbnRDb250cm9sbGVyOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTUwLDcg
KzQ5LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNWaXNpYmxlVG9IaXN0b3J5Q2xpZW50KCkgY29u
c3QgeyByZXR1cm4gbV9kYXRhLnZpc2libGVUb0hpc3RvcnlDbGllbnQ7IH0KICAgICBXZWJDb3Jl
OjpQYWdlR3JvdXAqIGNvcmVQYWdlR3JvdXAoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VHcm91cDsg
fQogCi0gICAgV2ViQ29yZTo6VXNlckNvbnRlbnRDb250cm9sbGVyJiB1c2VyQ29udGVudENvbnRy
b2xsZXIoKTsKKyAgICBXZWJVc2VyQ29udGVudENvbnRyb2xsZXImIHVzZXJDb250ZW50Q29udHJv
bGxlcigpOwogCiBwcml2YXRlOgogICAgIFdlYlBhZ2VHcm91cFByb3h5KGNvbnN0IFdlYlBhZ2VH
cm91cERhdGEmKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODE0NykKKysrIFNv
dXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBA
CisyMDE2LTAzLTE0ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRk
IGEgYmFzZVVSTCBwYXJhbWV0ZXIgdG8gX1dLVXNlclN0eWxlU2hlZXQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTIxOQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgor
ICAgICAgICAoLVtXZWJWaWV3IF9jb21tb25Jbml0aWFsaXphdGlvbldpdGhGcmFtZU5hbWU6Z3Jv
dXBOYW1lOl0pOgorICAgICAgICAoLVtXZWJWaWV3IGluaXRTaW1wbGVIVE1MRG9jdW1lbnRXaXRo
U3R5bGU6ZnJhbWU6cHJlZmVyZW5jZXM6Z3JvdXBOYW1lOl0pOgorICAgICAgICAoLVtXZWJWaWV3
IHNldEdyb3VwTmFtZTpdKToKKyAgICAgICAgVXBkYXRlIHRvIGFjY291bnQgZm9yIHRoZSBuYW1l
IGNoYW5nZSBmcm9tIFVzZXJDb250ZW50Q29udHJvbGxlciAtPiBVc2VyQ29udGVudFByb3ZpZGVy
LgorCiAyMDE2LTAzLTEzICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAK
ICAgICAgICAgUmVtb3ZlIEVOQUJMRShFUzZfVEVNUExBVEVfTElURVJBTF9TWU5UQVgpIGd1YXJk
cwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gMTk4MTQ3
KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDA1LDcgKzEwMDUsNyBAQCAtICh2b2lkKV9jb21tb25Jbml0aWFsaXphdGlvbldpdGhG
cmFtZU5hCiAgICAgcGFnZUNvbmZpZ3VyYXRpb24ucHJvZ3Jlc3NUcmFja2VyQ2xpZW50ID0gbmV3
IFdlYlByb2dyZXNzVHJhY2tlckNsaWVudChzZWxmKTsKICAgICBwYWdlQ29uZmlndXJhdGlvbi5k
YXRhYmFzZVByb3ZpZGVyID0gJldlYkRhdGFiYXNlUHJvdmlkZXI6OnNpbmdsZXRvbigpOwogICAg
IHBhZ2VDb25maWd1cmF0aW9uLnN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlciA9ICZfcHJpdmF0ZS0+
Z3JvdXAtPnN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcigpOwotICAgIHBhZ2VDb25maWd1cmF0aW9u
LnVzZXJDb250ZW50Q29udHJvbGxlciA9ICZfcHJpdmF0ZS0+Z3JvdXAtPnVzZXJDb250ZW50Q29u
dHJvbGxlcigpOworICAgIHBhZ2VDb25maWd1cmF0aW9uLnVzZXJDb250ZW50UHJvdmlkZXIgPSAm
X3ByaXZhdGUtPmdyb3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIoKTsKICAgICBwYWdlQ29uZmln
dXJhdGlvbi52aXNpdGVkTGlua1N0b3JlID0gJl9wcml2YXRlLT5ncm91cC0+dmlzaXRlZExpbmtT
dG9yZSgpOwogICAgIF9wcml2YXRlLT5wYWdlID0gbmV3IFBhZ2UocGFnZUNvbmZpZ3VyYXRpb24p
OwogCkBAIC0xMjUwLDcgKzEyNTAsNyBAQCAtIChpZClpbml0U2ltcGxlSFRNTERvY3VtZW50V2l0
aFN0eWxlOihOCiAgICAgcGFnZUNvbmZpZ3VyYXRpb24ucHJvZ3Jlc3NUcmFja2VyQ2xpZW50ID0g
bmV3IFdlYlByb2dyZXNzVHJhY2tlckNsaWVudChzZWxmKTsKICAgICBwYWdlQ29uZmlndXJhdGlv
bi5kYXRhYmFzZVByb3ZpZGVyID0gJldlYkRhdGFiYXNlUHJvdmlkZXI6OnNpbmdsZXRvbigpOwog
ICAgIHBhZ2VDb25maWd1cmF0aW9uLnN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlciA9ICZfcHJpdmF0
ZS0+Z3JvdXAtPnN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcigpOwotICAgIHBhZ2VDb25maWd1cmF0
aW9uLnVzZXJDb250ZW50Q29udHJvbGxlciA9ICZfcHJpdmF0ZS0+Z3JvdXAtPnVzZXJDb250ZW50
Q29udHJvbGxlcigpOworICAgIHBhZ2VDb25maWd1cmF0aW9uLnVzZXJDb250ZW50UHJvdmlkZXIg
PSAmX3ByaXZhdGUtPmdyb3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIoKTsKICAgICBwYWdlQ29u
ZmlndXJhdGlvbi52aXNpdGVkTGlua1N0b3JlID0gJl9wcml2YXRlLT5ncm91cC0+dmlzaXRlZExp
bmtTdG9yZSgpOwogCiAgICAgX3ByaXZhdGUtPnBhZ2UgPSBuZXcgUGFnZShwYWdlQ29uZmlndXJh
dGlvbik7CkBAIC02MjE3LDcgKzYyMTcsNyBAQCAtICh2b2lkKXNldEdyb3VwTmFtZTooTlNTdHJp
bmcgKilncm91cE5hCiAgICAgaWYgKCFfcHJpdmF0ZS0+cGFnZSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgX3ByaXZhdGUtPnBhZ2UtPnNldFVzZXJDb250ZW50Q29udHJvbGxlcigmX3ByaXZhdGUt
Pmdyb3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIoKSk7CisgICAgX3ByaXZhdGUtPnBhZ2UtPnNl
dFVzZXJDb250ZW50UHJvdmlkZXIoX3ByaXZhdGUtPmdyb3VwLT51c2VyQ29udGVudENvbnRyb2xs
ZXIoKSk7CiAgICAgX3ByaXZhdGUtPnBhZ2UtPnNldFZpc2l0ZWRMaW5rU3RvcmUoX3ByaXZhdGUt
Pmdyb3VwLT52aXNpdGVkTGlua1N0b3JlKCkpOwogICAgIF9wcml2YXRlLT5wYWdlLT5zZXRHcm91
cE5hbWUoZ3JvdXBOYW1lKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCShyZXZpc2lvbiAx
OTgxNDcpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjkzOSw3ICsyOTM5LDcgQEAgSFJFU1VMVCBXZWJWaWV3Ojppbml0V2l0aEZyYW1lKFJFQ1Qg
ZnJhbQogICAgIGNvbmZpZ3VyYXRpb24uZGF0YWJhc2VQcm92aWRlciA9ICZXZWJEYXRhYmFzZVBy
b3ZpZGVyOjpzaW5nbGV0b24oKTsKICAgICBjb25maWd1cmF0aW9uLnN0b3JhZ2VOYW1lc3BhY2VQ
cm92aWRlciA9ICZtX3dlYlZpZXdHcm91cC0+c3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyKCk7CiAg
ICAgY29uZmlndXJhdGlvbi5wcm9ncmVzc1RyYWNrZXJDbGllbnQgPSBzdGF0aWNfY2FzdDxXZWJG
cmFtZUxvYWRlckNsaWVudCo+KGNvbmZpZ3VyYXRpb24ubG9hZGVyQ2xpZW50Rm9yTWFpbkZyYW1l
KTsKLSAgICBjb25maWd1cmF0aW9uLnVzZXJDb250ZW50Q29udHJvbGxlciA9ICZtX3dlYlZpZXdH
cm91cC0+dXNlckNvbnRlbnRDb250cm9sbGVyKCk7CisgICAgY29uZmlndXJhdGlvbi51c2VyQ29u
dGVudFByaXZpZGVyID0gJm1fd2ViVmlld0dyb3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIoKTsK
ICAgICBjb25maWd1cmF0aW9uLnZpc2l0ZWRMaW5rU3RvcmUgPSAmbV93ZWJWaWV3R3JvdXAtPnZp
c2l0ZWRMaW5rU3RvcmUoKTsKIAogICAgIG1fcGFnZSA9IG5ldyBQYWdlKGNvbmZpZ3VyYXRpb24p
OwpAQCAtMzg1OSw3ICszODU5LDcgQEAgSFJFU1VMVCBXZWJWaWV3OjpzZXRHcm91cE5hbWUoX0lu
XyBCU1RSIAogICAgIGlmICghbV9wYWdlKQogICAgICAgICByZXR1cm4gU19PSzsKIAotICAgIG1f
cGFnZS0+c2V0VXNlckNvbnRlbnRDb250cm9sbGVyKCZtX3dlYlZpZXdHcm91cC0+dXNlckNvbnRl
bnRDb250cm9sbGVyKCkpOworICAgIG1fcGFnZS0+c2V0VXNlckNvbnRlbnRQcm92aWRlcihtX3dl
YlZpZXdHcm91cC0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkpOwogICAgIG1fcGFnZS0+c2V0Vmlz
aXRlZExpbmtTdG9yZShtX3dlYlZpZXdHcm91cC0+dmlzaXRlZExpbmtTdG9yZSgpKTsKICAgICBt
X3BhZ2UtPnNldEdyb3VwTmFtZSh0b1N0cmluZyhncm91cE5hbWUpKTsKICAgICByZXR1cm4gU19P
SzsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274006</attachid>
            <date>2016-03-14 12:59:46 -0700</date>
            <delta_ts>2016-03-14 13:33:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155219-20160314125934.patch</filename>
            <type>text/plain</type>
            <size>115753</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBAQAorMjAxNi0wMy0xNCAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBhIGJhc2VVUkwgcGFyYW1ldGVy
IHRvIF9XS1VzZXJTdHlsZVNoZWV0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTUyMTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAtIE1vdmVzIHRvIGEgbW9kZWwgZm9yIHVzZXIgY29udGVudCB3aGVyZSBp
bnN0ZWFkIG9mIGVhY2ggcGFnZSBoYXZpbmcgYSBXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xs
ZXIKKyAgICAgICAgICBvYmplY3QsIHdlIGhhdmUgYW4gYWJzdHJhY3QgV2ViQ29yZTo6VXNlckNv
bnRlbnRQcm92aWRlciBpbnRlcmZhY2UgdGhhdCBjYW4gYmUgaW1wbGVtZW50ZWQgYXQgdGhlIFdl
YktpdAorICAgICAgICAgIGxldmVsLiBGb3Igbm93LCBsZWdhY3kgV2ViS2l0IGNvbnRpbnVlcyB0
byB1c2UgdGhlIG9sZCBVc2VyQ29udGVudENvbnRyb2xsZXIsIHdoaWNoIGltcGxlbWVudHMgCisg
ICAgICAgICAgV2ViQ29yZTo6VXNlckNvbnRlbnRQcm92aWRlciwgYW5kIFdlYktpdDIgaW1wbGVt
ZW50cyBpdHMgb3duIGltcGxlbWVudGF0aW9uIHNvIGl0IGNhbiBzdG9yZSBhZGRpdGlvbmFsCisg
ICAgICAgICAgc3RhdGUuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgIEFkZCBuZXcgZmlsZXMuCisKKyAgICAgICAgKiBkb20vRXh0ZW5zaW9u
U3R5bGVTaGVldHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uU3R5bGVTaGVldHM6
OnVwZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlKToKKyAgICAgICAgU3dpdGNoIHRvIHVzaW5n
IGZvckVhY2hVc2VyU3R5bGVTaGVldCBvbiB0aGUgVXNlckNvbnRlbnRQcm92aWRlci4KKworICAg
ICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50Ojpsb2FkUmVzb3VyY2UpOgorICAgICAgICBSZW1vdmUgbnVsbCBjaGVjayBu
b3cgdGhhdCB3ZSBhbHdheXMgaGF2ZSBhIFVzZXJDb250ZW50UHJvdmlkZXIuCisKKyAgICAgICAg
KiBsb2FkZXIvRW1wdHlDbGllbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxXaXRoRW1w
dHlDbGllbnRzKToKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgIEFk
ZCBuZXcgRW1wdHlDbGllbnRzLgorCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5
KToKKyAgICAgICAgUmVtb3ZlIG51bGwgY2hlY2sgbm93IHRoYXQgd2UgYWx3YXlzIGhhdmUgYSBV
c2VyQ29udGVudFByb3ZpZGVyLgorCisgICAgICAgICogbG9hZGVyL1BpbmdMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQpOgor
ICAgICAgICBSZW1vdmUgbnVsbCBjaGVjayBub3cgdGhhdCB3ZSBhbHdheXMgaGF2ZSBhIFVzZXJD
b250ZW50UHJvdmlkZXIuCisKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdEludGVybmFs
KToKKyAgICAgICAgUmVtb3ZlIG51bGwgY2hlY2sgbm93IHRoYXQgd2UgYWx3YXlzIGhhdmUgYSBV
c2VyQ29udGVudFByb3ZpZGVyLgorCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpy
ZXF1ZXN0UmVzb3VyY2UpOgorICAgICAgICBSZW1vdmUgbnVsbCBjaGVjayBub3cgdGhhdCB3ZSBh
bHdheXMgaGF2ZSBhIFVzZXJDb250ZW50UHJvdmlkZXIuCisKKyAgICAgICAgKiBwYWdlL0RPTVdp
bmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OnNob3VsZEhhdmVXZWJLaXRO
YW1lc3BhY2VGb3JXb3JsZCk6CisgICAgICAgIFJlbW92ZSBudWxsIGNoZWNrcyBub3cgdGhhdCB3
ZSBhbHdheXMgaGF2ZSBhIFVzZXJDb250ZW50UHJvdmlkZXIsIGFuZCB1c2VyTWVzc2FnZUhhbmRs
ZXJEZXNjcmlwdG9ycworICAgICAgICByZXR1cm5zIGEgcmVmZXJlbmNlLgorCisgICAgICAgIChX
ZWJDb3JlOjpET01XaW5kb3c6Om9wZW4pOgorICAgICAgICBSZW1vdmUgbnVsbCBjaGVjayBub3cg
dGhhdCB3ZSBhbHdheXMgaGF2ZSBhIFVzZXJDb250ZW50UHJvdmlkZXIuCisKKyAgICAgICAgKiBw
YWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjppbmplY3RVc2VyU2NyaXB0
cyk6CisgICAgICAgIFNpbXBsaWZ5IGJ5IGxpZnRpbmcgZG9jdW1lbnQgY2hlY2sgb3V0IG9mIHRo
ZSBtYWluIGxvb3AgYW5kIHVzaW5nIGZvckVhY2hVc2VyU2NyaXB0LgorCisgICAgICAgICogcGFn
ZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OlBhZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZTo6flBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6dXNlckNvbnRlbnRQ
cm92aWRlcik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRVc2VyQ29udGVudFByb3ZpZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldFVzZXJDb250ZW50Q29udHJvbGxlcik6IERl
bGV0ZWQuCisgICAgICAgICogcGFnZS9QYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp1
c2VyQ29udGVudENvbnRyb2xsZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvUGFnZUNvbmZp
Z3VyYXRpb24uaDoKKyAgICAgICAgU3RvcmUgdGhlIFVzZXJDb250ZW50UHJvdmlkZXIgaW4gYSBS
ZWYsIGFuZCByZXF1aXJlIFBhZ2VDb25maWd1cmF0aW9ucyB0byBwcm92aWRlIG9uZS4gVGhpcwor
ICAgICAgICByZW1vdmVzIGEgYnVuY2ggb2YgbnVsbCBjaGVja3MgYW5kIHNpbXBsaWZpZXMgdGhl
IGNvZGUuCisKKyAgICAgICAgKiBwYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6On5Vc2VyQ29udGVudENvbnRyb2xs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRlbnRDb250cm9sbGVyOjpmb3JFYWNoVXNl
clNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OmZvckVh
Y2hVc2VyU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xs
ZXI6OmFkZFVzZXJTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRlbnRDb250cm9s
bGVyOjpyZW1vdmVVc2VyU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlwdHMpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRl
bnRDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpVc2Vy
Q29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNv
cmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclN0eWxlU2hlZXRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlck1lc3NhZ2VIYW5kbGVy
RGVzY3JpcHRvcik6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OnJl
bW92ZVVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IpOgorICAgICAgICAoV2ViQ29yZTo6VXNl
ckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyQ29udGVudEV4dGVuc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxsVXNl
ckNvbnRlbnRFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJv
bGxlcjo6cmVtb3ZlQWxsVXNlckNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRl
bnRDb250cm9sbGVyOjphZGRQYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlVzZXJD
b250ZW50Q29udHJvbGxlcjo6cmVtb3ZlUGFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
Ojpjb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
VXNlckNvbnRlbnRDb250cm9sbGVyOjpwcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9yTG9h
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OmFj
dGlvbnNGb3JSZXNvdXJjZUxvYWQpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvVXNlckNvbnRl
bnRDb250cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6
OnVzZXJTY3JpcHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6dXNlclN0eWxlU2hlZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlVz
ZXJDb250ZW50Q29udHJvbGxlcjo6dXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMpOiBEZWxl
dGVkLgorICAgICAgICBBZGQgaW5oZXJpdGFuY2UgZnJvbSBVc2VyQ29udGVudFByb3ZpZGVyIGFu
ZCBzaW1wbGlmeSB0aGluZ3MgYnkgcmVtb3ZpbmcgdW5pcXVlX3B0cnMKKyAgICAgICAgdGhhdCB3
ZXJlIGhvbGRpbmcgdGhlIG1lbWJlciB2YXJpYWJsZXMuIFRoZXJlIGlzIHVzdWFsbHkgb25seSBv
bmUgVXNlckNvbnRlbnRDb250cm9sbGVyCisgICAgICAgIHNvIGhhdmluZyB0aGVzZSBpbiB1bmlx
dWVfcHRycyBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZS4KKyAgICAgICAgCisgICAgICAgICogcGFn
ZS9Vc2VyQ29udGVudFByb3ZpZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpVc2Vy
Q29udGVudFByb3ZpZGVyOjpVc2VyQ29udGVudFByb3ZpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlVzZXJDb250ZW50UHJvdmlkZXI6On5Vc2VyQ29udGVudFByb3ZpZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlVzZXJDb250ZW50UHJvdmlkZXI6OmFkZFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
VXNlckNvbnRlbnRQcm92aWRlcjo6cmVtb3ZlUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpVc2Vy
Q29udGVudFByb3ZpZGVyOjppbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZy
YW1lc0luQWxsUGFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGVudEV4dGVuc2lvbnNFbmFi
bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50UHJvdmlkZXI6OnByb2Nlc3NDb250
ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50
UHJvdmlkZXI6OmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQpOgorICAgICAgICAqIHBhZ2UvVXNlckNv
bnRlbnRQcm92aWRlci5oOiBBZGRlZC4KKyAgICAgICAgQWRkIGFic3RyYWN0IGNsYXNzIGZvciBw
cm92aWRpbmcgdXNlciBjb250ZW50IGFuZCBhZGQgc29tZSBoZWxwZXJzIG9uIGl0LgorCisgICAg
ICAgICogcGFnZS9Vc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yLmg6CisgICAgICAgIChXZWJD
b3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcjo6Y2xpZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3I6OmludmFsaWRhdGVDbGllbnQpOgor
ICAgICAgICAqIHBhZ2UvVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlOjpoYW5kbGVyKToKKyAgICAg
ICAgU2ltcGxpZnkgbm93IHRoYXQgdXNlckNvbnRlbnRQcm92aWRlcigpIGFuZCB1c2VyTWVzc2Fn
ZUhhbmRsZXJEZXNjcmlwdG9ycygpIGFyZSByZWZlcmVuY2VzLgorCiAyMDE2LTAzLTE0ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgUmVncmVzc2lvbihyMTk3OTgx
KTogSHVnZSByZWdyZXNzaW9uIG9uIE1hYyBQTFQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5ODE0NykKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMjc0MCw2ICsyNzQwLDggQEAKIAkJN0MzQjc5NzIxOTA4NzU3QjAwQjQ3QTJE
IC8qIFVzZXJNZXNzYWdlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0MzQjc5NzAxOTA4NzU3QjAwQjQ3QTJEIC8qIFVzZXJNZXNzYWdlSGFu
ZGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTdDM0U1MTBBMThERjhGMzUwMEMxMTJGNyAvKiBIVE1MQ29udmVydGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzNFNTEwODE4REY4RjM1MDBDMTEy
RjcgLyogSFRNTENvbnZlcnRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTdDM0U1MTBCMThERjhGMzUwMEMxMTJGNyAvKiBIVE1MQ29udmVydGVy
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzRTUx
MDkxOERGOEYzNTAwQzExMkY3IC8qIEhUTUxDb252ZXJ0ZXIubW0gKi87IH07CisJCTdDM0YwMUMx
MUM4RTVBQkEwMEFERDk2MiAvKiBVc2VyQ29udGVudFByb3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzNGMDFDMDFDOEU1QUIxMDBBREQ5NjIg
LyogVXNlckNvbnRlbnRQcm92aWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTdDM0YwMUMyMUM4RTVBQzIwMEFERDk2MiAvKiBVc2VyQ29udGVu
dFByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdDM0YwMUJGMUM4RTVBQjEwMEFERDk2MiAvKiBVc2VyQ29udGVudFByb3ZpZGVyLmNwcCAq
LzsgfTsKIAkJN0M0OEE2RDAxOTFDOUQ2NTAwMDI2Njc0IC8qIFdlYktpdE5hbWVzcGFjZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzQ4QTZDRTE5
MUM5RDY1MDAwMjY2NzQgLyogV2ViS2l0TmFtZXNwYWNlLmNwcCAqLzsgfTsKIAkJN0M0OEE2RDEx
OTFDOUQ2NTAwMDI2Njc0IC8qIFdlYktpdE5hbWVzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M0OEE2Q0YxOTFDOUQ2NTAwMDI2Njc0IC8qIFdl
YktpdE5hbWVzcGFjZS5oICovOyB9OwogCQk3QzQ5MDJBMjE4QjgyNUY4MDA3RDkyOTggLyogRE9N
V2hlZWxFdmVudEludGVybmFsLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTk4OURDQTBBQ0M4QkJEMDBBMEJDNTEgLyogRE9N
V2hlZWxFdmVudEludGVybmFsLmggKi87IH07CkBAIC0xMDM4MSw2ICsxMDM4Myw4IEBACiAJCTdD
M0I3OTcwMTkwODc1N0IwMEI0N0EyRCAvKiBVc2VyTWVzc2FnZUhhbmRsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVXNlck1lc3NhZ2VIYW5kbGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdDM0U1MTA4MThERjhGMzUwMEMxMTJGNyAvKiBIVE1MQ29udmVy
dGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxDb252ZXJ0ZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MzRTUxMDkxOERGOEYzNTAwQzExMkY3IC8q
IEhUTUxDb252ZXJ0ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBIVE1MQ29udmVydGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzNGMDFC
RjFDOEU1QUIxMDBBREQ5NjIgLyogVXNlckNvbnRlbnRQcm92aWRlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVc2VyQ29udGVudFByb3ZpZGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MzRjAxQzAxQzhFNUFCMTAwQUREOTYyIC8qIFVzZXJD
b250ZW50UHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVXNlckNv
bnRlbnRQcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzQxODlBQjFC
MDdDMTcwMDAwRkE3NTcgLyogR2xvYmFsRXZlbnRIYW5kbGVycy5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gR2xvYmFsRXZl
bnRIYW5kbGVycy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDNDE4OUFDMUIw
N0NCRjIwMDBGQTc1NyAvKiBXaW5kb3dFdmVudEhhbmRsZXJzLmlkbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXaW5kb3dFdmVu
dEhhbmRsZXJzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M0OEE2Q0UxOTFD
OUQ2NTAwMDI2Njc0IC8qIFdlYktpdE5hbWVzcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXZWJLaXROYW1lc3BhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTgxMTksNiArMTgxMjMsOCBAQAogCQkJCTJENEY5NkYyMUExRUNDMjQwMDk4
QkY4OCAvKiBUZXh0SW5kaWNhdG9yLmggKi8sCiAJCQkJMUFFNzlENDAxODhEQjYxRjAwMjIzOUMy
IC8qIFVzZXJDb250ZW50Q29udHJvbGxlci5jcHAgKi8sCiAJCQkJMUFFNzlENDExODhEQjYxRjAw
MjIzOUMyIC8qIFVzZXJDb250ZW50Q29udHJvbGxlci5oICovLAorCQkJCTdDM0YwMUJGMUM4RTVB
QjEwMEFERDk2MiAvKiBVc2VyQ29udGVudFByb3ZpZGVyLmNwcCAqLywKKwkJCQk3QzNGMDFDMDFD
OEU1QUIxMDBBREQ5NjIgLyogVXNlckNvbnRlbnRQcm92aWRlci5oICovLAogCQkJCTAwM0YxRkU5
MTFFNkFCNDMwMDgyNThEOSAvKiBVc2VyQ29udGVudFR5cGVzLmggKi8sCiAJCQkJQkNBQ0YzQkEx
MDcyOTIxQTAwQzBDOEEzIC8qIFVzZXJDb250ZW50VVJMUGF0dGVybi5jcHAgKi8sCiAJCQkJQkNB
Q0YzQkIxMDcyOTIxQTAwQzBDOEEzIC8qIFVzZXJDb250ZW50VVJMUGF0dGVybi5oICovLApAQCAt
MjgyNTIsNiArMjgyNTgsNyBAQAogCQkJCTA4OEMyRjdBMTIzOTAwODEwMDNENjVDRSAvKiBTVkdU
ZXh0TGF5b3V0QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDgxMDkzREMxMjU1RjBF
NzAwRUQ5RDI5IC8qIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMDgxNjY4REExMjU2MDNENTAwNkYyNURFIC8qIFNWR1RleHRMYXlvdXRFbmdpbmUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTdDM0YwMUMxMUM4RTVBQkEwMEFERDk2MiAvKiBVc2VyQ29u
dGVudFByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODBFNDkyNjEyNTVGM0JEMDBFRkNB
MjcgLyogU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
ODBFNDkyODEyNTVGM0JEMDBFRkNBMjcgLyogU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuaCBp
biBIZWFkZXJzICovLAogCQkJCTA4RjBCRkM2MTI1NUM1M0MwMDA3NTE4NSAvKiBTVkdUZXh0TWV0
cmljcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDQyNyw2ICszMDQzNCw3IEBACiAJCQkJNTExRUYy
RDExN0YwRkRGMTAwRTRGQTE2IC8qIEpTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTExRUYyQzgxN0YwRkQzNTAwRTRGQTE2IC8qIEpTSURCT3BlbkRCUmVxdWVz
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTFFRjJDOTE3RjBGRDM1MDBFNEZBMTYgLyogSlNJ
REJSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdDM0YwMUMyMUM4RTVBQzIwMEFERDk2
MiAvKiBVc2VyQ29udGVudFByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMUVGMkNB
MTdGMEZEMzUwMEU0RkExNiAvKiBKU0lEQlRyYW5zYWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTUxMUVGMkNCMTdGMEZEMzUwMEU0RkExNiAvKiBKU0lEQlZlcnNpb25DaGFuZ2VFdmVudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzZDNDlGMzBEN0RCQTA1MDBGRkE1NTggLyogSlNJbWFn
ZUNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L0V4dGVuc2lvblN0eWxlU2hlZXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vRXh0ZW5zaW9uU3R5bGVTaGVldHMuY3BwCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRXh0ZW5zaW9uU3R5bGVTaGVldHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTcsNiArMTE3LDI0IEBAIHZvaWQgRXh0ZW5zaW9uU3R5bGVTaGVldHM6OnVwZGF0ZUluamVjdGUK
ICAgICBpZiAoIW93bmluZ1BhZ2UpCiAgICAgICAgIHJldHVybjsKIAorICAgIG93bmluZ1BhZ2Ut
PnVzZXJDb250ZW50UHJvdmlkZXIoKS5mb3JFYWNoVXNlclN0eWxlU2hlZXQoWyZdKGNvbnN0IFVz
ZXJTdHlsZVNoZWV0JiB1c2VyU3R5bGVTaGVldCkgeworICAgICAgICBpZiAodXNlclN0eWxlU2hl
ZXQuaW5qZWN0ZWRGcmFtZXMoKSA9PSBJbmplY3RJblRvcEZyYW1lT25seSAmJiBtX2RvY3VtZW50
Lm93bmVyRWxlbWVudCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICghVXNl
ckNvbnRlbnRVUkxQYXR0ZXJuOjptYXRjaGVzUGF0dGVybnMobV9kb2N1bWVudC51cmwoKSwgdXNl
clN0eWxlU2hlZXQud2hpdGVsaXN0KCksIHVzZXJTdHlsZVNoZWV0LmJsYWNrbGlzdCgpKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gc2hlZXQg
PSBDU1NTdHlsZVNoZWV0OjpjcmVhdGVJbmxpbmUoY29uc3RfY2FzdDxEb2N1bWVudCY+KG1fZG9j
dW1lbnQpLCB1c2VyU3R5bGVTaGVldC51cmwoKSk7CisgICAgICAgIGJvb2wgaXNVc2VyU3R5bGVT
aGVldCA9IHVzZXJTdHlsZVNoZWV0LmxldmVsKCkgPT0gVXNlclN0eWxlVXNlckxldmVsOworICAg
ICAgICBpZiAoaXNVc2VyU3R5bGVTaGVldCkKKyAgICAgICAgICAgIG1faW5qZWN0ZWRVc2VyU3R5
bGVTaGVldHMuYXBwZW5kKHNoZWV0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9pbmpl
Y3RlZEF1dGhvclN0eWxlU2hlZXRzLmFwcGVuZChzaGVldCk7CisKKyAgICAgICAgc2hlZXQtPmNv
bnRlbnRzKCkuc2V0SXNVc2VyU3R5bGVTaGVldChpc1VzZXJTdHlsZVNoZWV0KTsKKyAgICAgICAg
c2hlZXQtPmNvbnRlbnRzKCkucGFyc2VTdHJpbmcodXNlclN0eWxlU2hlZXQuc291cmNlKCkpOwor
ICAgIH0pOworICAgIAogICAgIGlmICghb3duaW5nUGFnZS0+Y2FwdGlvblVzZXJQcmVmZXJlbmNl
c1N0eWxlU2hlZXQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gSWRlbnRpZnkgb3VyIG92ZXJy
aWRlIHN0eWxlIHNoZWV0IHdpdGggYSB1bmlxdWUgVVJMIC0gYSBuZXcgc2NoZW1lIGFuZCBhIFVV
SUQuCiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxVUkw+IGNhcHRpb25zU3R5bGVTaGVl
dFVSTChQYXJzZWRVUkxTdHJpbmcsICJ1c2VyLWNhcHRpb25zLW92ZXJyaWRlOjAxRjZBRjEyLUMz
QjAtNEY3MC1BRjVFLUEzRTAwMjM0REMyMyIpOwpAQCAtMTI3LDM0ICsxNDUsNiBAQCB2b2lkIEV4
dGVuc2lvblN0eWxlU2hlZXRzOjp1cGRhdGVJbmplY3RlCiAgICAgICAgIHNoZWV0LT5jb250ZW50
cygpLnNldElzVXNlclN0eWxlU2hlZXQoZmFsc2UpOwogICAgICAgICBzaGVldC0+Y29udGVudHMo
KS5wYXJzZVN0cmluZyhvd25pbmdQYWdlLT5jYXB0aW9uVXNlclByZWZlcmVuY2VzU3R5bGVTaGVl
dCgpKTsKICAgICB9Ci0KLSAgICBjb25zdCBhdXRvKiB1c2VyQ29udGVudENvbnRyb2xsZXIgPSBv
d25pbmdQYWdlLT51c2VyQ29udGVudENvbnRyb2xsZXIoKTsKLSAgICBpZiAoIXVzZXJDb250ZW50
Q29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgVXNlclN0eWxlU2hlZXRN
YXAqIHVzZXJTdHlsZVNoZWV0cyA9IHVzZXJDb250ZW50Q29udHJvbGxlci0+dXNlclN0eWxlU2hl
ZXRzKCk7Ci0gICAgaWYgKCF1c2VyU3R5bGVTaGVldHMpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGZvciAoYXV0byYgc3R5bGVTaGVldHMgOiB1c2VyU3R5bGVTaGVldHMtPnZhbHVlcygpKSB7Ci0g
ICAgICAgIGZvciAoY29uc3QgYXV0byYgc2hlZXQgOiAqc3R5bGVTaGVldHMpIHsKLSAgICAgICAg
ICAgIGlmIChzaGVldC0+aW5qZWN0ZWRGcmFtZXMoKSA9PSBJbmplY3RJblRvcEZyYW1lT25seSAm
JiBtX2RvY3VtZW50Lm93bmVyRWxlbWVudCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgICAgICBpZiAoIVVzZXJDb250ZW50VVJMUGF0dGVybjo6bWF0Y2hlc1BhdHRlcm5z
KG1fZG9jdW1lbnQudXJsKCksIHNoZWV0LT53aGl0ZWxpc3QoKSwgc2hlZXQtPmJsYWNrbGlzdCgp
KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgUmVmUHRyPENTU1N0
eWxlU2hlZXQ+IGdyb3VwU2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGVJbmxpbmUoY29uc3Rf
Y2FzdDxEb2N1bWVudCY+KG1fZG9jdW1lbnQpLCBzaGVldC0+dXJsKCkpOwotICAgICAgICAgICAg
Ym9vbCBpc1VzZXJTdHlsZVNoZWV0ID0gc2hlZXQtPmxldmVsKCkgPT0gVXNlclN0eWxlVXNlckxl
dmVsOwotICAgICAgICAgICAgaWYgKGlzVXNlclN0eWxlU2hlZXQpCi0gICAgICAgICAgICAgICAg
bV9pbmplY3RlZFVzZXJTdHlsZVNoZWV0cy5hcHBlbmQoZ3JvdXBTaGVldCk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgbV9pbmplY3RlZEF1dGhvclN0eWxlU2hlZXRzLmFwcGVu
ZChncm91cFNoZWV0KTsKLQotICAgICAgICAgICAgZ3JvdXBTaGVldC0+Y29udGVudHMoKS5zZXRJ
c1VzZXJTdHlsZVNoZWV0KGlzVXNlclN0eWxlU2hlZXQpOwotICAgICAgICAgICAgZ3JvdXBTaGVl
dC0+Y29udGVudHMoKS5wYXJzZVN0cmluZyhzaGVldC0+c291cmNlKCkpOwotICAgICAgICB9Ci0g
ICAgfQogfQogCiB2b2lkIEV4dGVuc2lvblN0eWxlU2hlZXRzOjppbnZhbGlkYXRlSW5qZWN0ZWRT
dHlsZVNoZWV0Q2FjaGUoKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjU4LDcgKzEyNTgsNyBAQCB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OmxvYWRSZXNvdXJjZShjb25zCiAgICAgUmVzb3VyY2VSZXF1ZXN0IHJl
cXVlc3QodXJsKTsKICAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBmcmFtZS0+
bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKTsKIAotICAgIGlmIChwYWdlLT51c2VyQ29udGVudENv
bnRyb2xsZXIoKSAmJiBkb2N1bWVudExvYWRlciAmJiBwYWdlLT51c2VyQ29udGVudENvbnRyb2xs
ZXIoKS0+cHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQocmVxdWVzdCwgUmVzb3Vy
Y2VUeXBlOjpNZWRpYSwgKmRvY3VtZW50TG9hZGVyKSA9PSBDb250ZW50RXh0ZW5zaW9uczo6Qmxv
Y2tlZFN0YXR1czo6QmxvY2tlZCkgeworICAgIGlmIChkb2N1bWVudExvYWRlciAmJiBwYWdlLT51
c2VyQ29udGVudFByb3ZpZGVyKCkucHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQo
cmVxdWVzdCwgUmVzb3VyY2VUeXBlOjpNZWRpYSwgKmRvY3VtZW50TG9hZGVyKSA9PSBDb250ZW50
RXh0ZW5zaW9uczo6QmxvY2tlZFN0YXR1czo6QmxvY2tlZCkgewogICAgICAgICByZXF1ZXN0ID0g
eyB9OwogICAgICAgICBtZWRpYUxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6OkZvcm1hdEVycm9y
KTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xp
ZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50
cy5jcHAJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNs
aWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiU3Rv
cmFnZUFyZWEuaCIKICNpbmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAiU3Rv
cmFnZU5hbWVzcGFjZVByb3ZpZGVyLmgiCisjaW5jbHVkZSAiVXNlckNvbnRlbnRQcm92aWRlci5o
IgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCiAjaWYgVVNFKEFQUExFX0lOVEVS
TkFMX1NESykKQEAgLTk1LDcgKzk2LDE4IEBAIGNsYXNzIEVtcHR5U3RvcmFnZU5hbWVzcGFjZVBy
b3ZpZGVyIGZpbmEKICAgICB9CiB9OwogCi1jbGFzcyBFbXB0eVZpc2l0ZWRMaW5rU3RvcmUgOiBw
dWJsaWMgVmlzaXRlZExpbmtTdG9yZSB7CitjbGFzcyBFbXB0eVVzZXJDb250ZW50UHJvdmlkZXIg
ZmluYWwgOiBwdWJsaWMgVXNlckNvbnRlbnRQcm92aWRlciB7CisgICAgdm9pZCBmb3JFYWNoVXNl
clNjcmlwdChjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQoRE9NV3JhcHBlcldvcmxkJiwgY29uc3Qg
VXNlclNjcmlwdCYpPiYpIGNvbnN0IG92ZXJyaWRlIHsgfQorICAgIHZvaWQgZm9yRWFjaFVzZXJT
dHlsZVNoZWV0KGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBVc2VyU3R5bGVTaGVldCYp
PiYpIGNvbnN0IG92ZXJyaWRlIHsgfQorI2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMp
CisgICAgY29uc3QgVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvck1hcCYgdXNlck1lc3NhZ2VI
YW5kbGVyRGVzY3JpcHRvcnMoKSBjb25zdCBvdmVycmlkZSB7IHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yTWFwPiBtYXA7IHJldHVybiBtYXAuZ2V0KCk7
IH0KKyNlbmRpZgorI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisgICAgQ29udGVudEV4
dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCYgdXNlckNvbnRlbnRFeHRlbnNpb25C
YWNrZW5kKCkgb3ZlcnJpZGUgeyBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29udGVudEV4dGVuc2lv
bnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZD4gYmFja2VuZDsgcmV0dXJuIGJhY2tlbmQuZ2V0
KCk7IH07CisjZW5kaWYKK307CisKK2NsYXNzIEVtcHR5VmlzaXRlZExpbmtTdG9yZSBmaW5hbCA6
IHB1YmxpYyBWaXNpdGVkTGlua1N0b3JlIHsKICAgICBib29sIGlzTGlua1Zpc2l0ZWQoUGFnZSYs
IExpbmtIYXNoLCBjb25zdCBVUkwmLCBjb25zdCBBdG9taWNTdHJpbmcmKSBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQogICAgIHZvaWQgYWRkVmlzaXRlZExpbmsoUGFnZSYsIExpbmtIYXNoKSBv
dmVycmlkZSB7IH0KIH07CkBAIC0xMzIsNiArMTQ0LDcgQEAgdm9pZCBmaWxsV2l0aEVtcHR5Q2xp
ZW50cyhQYWdlQ29uZmlndXJhdAogCiAgICAgcGFnZUNvbmZpZ3VyYXRpb24uZGF0YWJhc2VQcm92
aWRlciA9IGFkb3B0UmVmKG5ldyBFbXB0eURhdGFiYXNlUHJvdmlkZXIpOwogICAgIHBhZ2VDb25m
aWd1cmF0aW9uLnN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlciA9IGFkb3B0UmVmKG5ldyBFbXB0eVN0
b3JhZ2VOYW1lc3BhY2VQcm92aWRlcik7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24udXNlckNvbnRl
bnRQcm92aWRlciA9IGFkb3B0UmVmKG5ldyBFbXB0eVVzZXJDb250ZW50UHJvdmlkZXIpOwogICAg
IHBhZ2VDb25maWd1cmF0aW9uLnZpc2l0ZWRMaW5rU3RvcmUgPSBhZG9wdFJlZihuZXcgRW1wdHlW
aXNpdGVkTGlua1N0b3JlKTsKIAogI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcg
KzM2LDYgQEAKICNpbmNsdWRlICJEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oIgogI2luY2x1ZGUg
IkRyYWdDbGllbnQuaCIKICNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKLSNpbmNsdWRlICJUZXh0
Q2hlY2tlckNsaWVudC5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZvY3Vz
RGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKQEAgLTQ0LDkgKzQz
LDE4IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlckNsaWVu
dC5oIgogI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKKyNpbmNsdWRlICJUZXh0Q2hlY2tlckNs
aWVudC5oIgogI2luY2x1ZGUgIlZpc2l0ZWRMaW5rU3RvcmUuaCIKICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdWaWV3Lmg+CiAKKyNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQorI2lu
Y2x1ZGUgIlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IuaCIKKyNlbmRpZgorCisjaWYgRU5B
QkxFKENPTlRFTlRfRVhURU5TSU9OUykKKyNpbmNsdWRlICJDb21waWxlZENvbnRlbnRFeHRlbnNp
b24uaCIKKyNlbmRpZgorCiAvKgogIFRoaXMgZmlsZSBob2xkcyBlbXB0eSBDbGllbnQgc3R1YnMg
Zm9yIHVzZSBieSBXZWJDb3JlLgogIFZpZXdsZXNzIGVsZW1lbnQgbmVlZHMgdG8gY3JlYXRlIGEg
ZHVtbXkgUGFnZS0+RnJhbWUtPkZyYW1lVmlldyB0cmVlIGZvciB1c2UgaW4gcGFyc2luZyBvciBl
eGVjdXRpbmcgSmF2YVNjcmlwdC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcAkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjczMCwxMyArMjczMCwxMSBAQCB1bnNpZ25lZCBs
b25nIEZyYW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5T
SU9OUykKICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIHBhZ2Ug
PSBtX2ZyYW1lLnBhZ2UoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8qIGNvbnRyb2xsZXIgPSBw
YWdlLT51c2VyQ29udGVudENvbnRyb2xsZXIoKSkgewotICAgICAgICAgICAgICAgIGlmIChtX2Rv
Y3VtZW50TG9hZGVyICYmIGNvbnRyb2xsZXItPnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNG
b3JMb2FkKG5ld1JlcXVlc3QsIFJlc291cmNlVHlwZTo6UmF3LCAqbV9kb2N1bWVudExvYWRlcikg
PT0gQ29udGVudEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXM6OkJsb2NrZWQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbmV3UmVxdWVzdCA9IHsgfTsKLSAgICAgICAgICAgICAgICAgICAgZXJyb3Ig
PSBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluV2ViS2l0SW50ZXJuYWwsIDAsIGluaXRpYWxSZXF1
ZXN0LnVybCgpLCBlbXB0eVN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Ug
PSB7IH07Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBudWxscHRyOwotICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChtX2RvY3VtZW50TG9hZGVyICYmIHBhZ2UtPnVzZXJDb250
ZW50UHJvdmlkZXIoKS5wcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9yTG9hZChuZXdSZXF1
ZXN0LCBSZXNvdXJjZVR5cGU6OlJhdywgKm1fZG9jdW1lbnRMb2FkZXIpID09IENvbnRlbnRFeHRl
bnNpb25zOjpCbG9ja2VkU3RhdHVzOjpCbG9ja2VkKSB7CisgICAgICAgICAgICAgICAgbmV3UmVx
dWVzdCA9IHsgfTsKKyAgICAgICAgICAgICAgICBlcnJvciA9IFJlc291cmNlRXJyb3IoZXJyb3JE
b21haW5XZWJLaXRJbnRlcm5hbCwgMCwgaW5pdGlhbFJlcXVlc3QudXJsKCksIGVtcHR5U3RyaW5n
KCkpOworICAgICAgICAgICAgICAgIHJlc3BvbnNlID0geyB9OworICAgICAgICAgICAgICAgIGRh
dGEgPSBudWxscHRyOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvbG9hZGVyL1BpbmdMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9QaW5nTG9hZGVyLmNwcAkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNl
L1dlYkNvcmUvbG9hZGVyL1BpbmdMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMCAr
NTksOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdGF0aWMgQ29udGVudEV4dGVuc2lvbnM6OkJs
b2NrZWRTdGF0dXMgcHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQoY29uc3QgRnJh
bWUmIGZyYW1lLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlVHlwZSByZXNvdXJj
ZVR5cGUpCiB7CiAgICAgaWYgKERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGZyYW1l
LmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkpIHsKLSAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBm
cmFtZS5wYWdlKCkpIHsKLSAgICAgICAgICAgIGlmIChVc2VyQ29udGVudENvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSBwYWdlLT51c2VyQ29udGVudENvbnRyb2xsZXIoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gY29udHJvbGxlci0+cHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQo
cmVxdWVzdCwgcmVzb3VyY2VUeXBlLCAqZG9jdW1lbnRMb2FkZXIpOwotICAgICAgICB9CisgICAg
ICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUucGFnZSgpKQorICAgICAgICAgICAgcmV0dXJuIHBh
Z2UtPnVzZXJDb250ZW50UHJvdmlkZXIoKS5wcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9y
TG9hZChyZXF1ZXN0LCByZXNvdXJjZVR5cGUsICpkb2N1bWVudExvYWRlcik7CiAgICAgfQogICAg
IHJldHVybiBDb250ZW50RXh0ZW5zaW9uczo6QmxvY2tlZFN0YXR1czo6Tm90QmxvY2tlZDsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24g
MTk4MTQ3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQ2LDggKzM0Niw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkZXI6OndpbGxT
ZW5kUmVxdWVzdEludGUKICAgICBpZiAoZnJhbWVMb2FkZXIoKSkgewogICAgICAgICBQYWdlKiBw
YWdlID0gZnJhbWVMb2FkZXIoKS0+ZnJhbWUoKS5wYWdlKCk7CiAgICAgICAgIGlmIChwYWdlICYm
IG1fZG9jdW1lbnRMb2FkZXIpIHsKLSAgICAgICAgICAgIGF1dG8qIHVzZXJDb250ZW50Q29udHJv
bGxlciA9IHBhZ2UtPnVzZXJDb250ZW50Q29udHJvbGxlcigpOwotICAgICAgICAgICAgaWYgKHVz
ZXJDb250ZW50Q29udHJvbGxlciAmJiB1c2VyQ29udGVudENvbnRyb2xsZXItPnByb2Nlc3NDb250
ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKHJlcXVlc3QsIG1fcmVzb3VyY2VUeXBlLCAqbV9kb2N1
bWVudExvYWRlcikgPT0gQ29udGVudEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXM6OkJsb2NrZWQp
CisgICAgICAgICAgICBpZiAocGFnZS0+dXNlckNvbnRlbnRQcm92aWRlcigpLnByb2Nlc3NDb250
ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKHJlcXVlc3QsIG1fcmVzb3VyY2VUeXBlLCAqbV9kb2N1
bWVudExvYWRlcikgPT0gQ29udGVudEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXM6OkJsb2NrZWQp
CiAgICAgICAgICAgICAgICAgcmVxdWVzdCA9IHsgfTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9h
ZGVyLmNwcAkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQyLDggKzU0Miw4
IEBAIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiBDYWMKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIGlmIChm
cmFtZSgpICYmIGZyYW1lKCktPm1haW5GcmFtZSgpLnBhZ2UoKSAmJiBmcmFtZSgpLT5tYWluRnJh
bWUoKS5wYWdlKCktPnVzZXJDb250ZW50Q29udHJvbGxlcigpICYmIG1fZG9jdW1lbnRMb2FkZXIp
IHsKLSAgICAgICAgaWYgKGZyYW1lKCktPm1haW5GcmFtZSgpLnBhZ2UoKS0+dXNlckNvbnRlbnRD
b250cm9sbGVyKCktPnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKHJlcXVlc3Qu
bXV0YWJsZVJlc291cmNlUmVxdWVzdCgpLCB0b1Jlc291cmNlVHlwZSh0eXBlKSwgKm1fZG9jdW1l
bnRMb2FkZXIpID09IENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzOjpCbG9ja2VkKSB7
CisgICAgaWYgKGZyYW1lKCkgJiYgZnJhbWUoKS0+bWFpbkZyYW1lKCkucGFnZSgpICYmIG1fZG9j
dW1lbnRMb2FkZXIpIHsKKyAgICAgICAgaWYgKGZyYW1lKCktPm1haW5GcmFtZSgpLnBhZ2UoKS0+
dXNlckNvbnRlbnRQcm92aWRlcigpLnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2Fk
KHJlcXVlc3QubXV0YWJsZVJlc291cmNlUmVxdWVzdCgpLCB0b1Jlc291cmNlVHlwZSh0eXBlKSwg
Km1fZG9jdW1lbnRMb2FkZXIpID09IENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzOjpC
bG9ja2VkKSB7CiAgICAgICAgICAgICBpZiAodHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6VHlwZTo6
TWFpblJlc291cmNlKSB7CiAgICAgICAgICAgICAgICAgYXV0byByZXNvdXJjZSA9IGNyZWF0ZVJl
c291cmNlKHR5cGUsIHJlcXVlc3QubXV0YWJsZVJlc291cmNlUmVxdWVzdCgpLCByZXF1ZXN0LmNo
YXJzZXQoKSwgc2Vzc2lvbklEKCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVChyZXNvdXJjZSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCShyZXZpc2lvbiAxOTgxNDcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2MSwx
NSArNzYxLDcgQEAgYm9vbCBET01XaW5kb3c6OnNob3VsZEhhdmVXZWJLaXROYW1lc3BhYwogICAg
IGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byogdXNlckNvbnRl
bnRDb250cm9sbGVyID0gcGFnZS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCk7Ci0gICAgaWYgKCF1
c2VyQ29udGVudENvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8q
IGRlc2NyaXB0b3JNYXAgPSB1c2VyQ29udGVudENvbnRyb2xsZXItPnVzZXJNZXNzYWdlSGFuZGxl
ckRlc2NyaXB0b3JzKCk7Ci0gICAgaWYgKCFkZXNjcmlwdG9yTWFwKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBmb3IgKGF1dG8mIGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9yTWFwLT52YWx1
ZXMoKSkgeworICAgIGZvciAoYXV0byYgZGVzY3JpcHRvciA6IHBhZ2UtPnVzZXJDb250ZW50UHJv
dmlkZXIoKS51c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycygpLnZhbHVlcygpKSB7CiAgICAg
ICAgIGlmICgmZGVzY3JpcHRvci0+d29ybGQoKSA9PSAmd29ybGQpCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CkBAIC0yMTY4LDExICsyMTYwLDEwIEBAIFBhc3NSZWZQdHI8RE9NV2lu
ZG93PiBET01XaW5kb3c6Om9wZW4oY28KICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQog
ICAgIGlmIChmaXJzdEZyYW1lLT5kb2N1bWVudCgpCiAgICAgICAgICYmIGZpcnN0RnJhbWUtPm1h
aW5GcmFtZSgpLnBhZ2UoKQotICAgICAgICAmJiBmaXJzdEZyYW1lLT5tYWluRnJhbWUoKS5wYWdl
KCktPnVzZXJDb250ZW50Q29udHJvbGxlcigpCiAgICAgICAgICYmIGZpcnN0RnJhbWUtPm1haW5G
cmFtZSgpLmRvY3VtZW50KCkKICAgICAgICAgJiYgZmlyc3RGcmFtZS0+bWFpbkZyYW1lKCkuZG9j
dW1lbnQoKS0+bG9hZGVyKCkpIHsKLSAgICAgICAgUmVzb3VyY2VMb2FkSW5mbyByZXNvdXJjZUxv
YWRJbmZvID0ge2ZpcnN0RnJhbWUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybFN0cmluZyks
IGZpcnN0RnJhbWUtPm1haW5GcmFtZSgpLmRvY3VtZW50KCktPnVybCgpLCBSZXNvdXJjZVR5cGU6
OlBvcHVwfTsKLSAgICAgICAgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb24+IGFjdGlv
bnMgPSBmaXJzdEZyYW1lLT5tYWluRnJhbWUoKS5wYWdlKCktPnVzZXJDb250ZW50Q29udHJvbGxl
cigpLT5hY3Rpb25zRm9yUmVzb3VyY2VMb2FkKHJlc291cmNlTG9hZEluZm8sICpmaXJzdEZyYW1l
LT5tYWluRnJhbWUoKS5kb2N1bWVudCgpLT5sb2FkZXIoKSk7CisgICAgICAgIFJlc291cmNlTG9h
ZEluZm8gcmVzb3VyY2VMb2FkSW5mbyA9IHsgZmlyc3RGcmFtZS0+ZG9jdW1lbnQoKS0+Y29tcGxl
dGVVUkwodXJsU3RyaW5nKSwgZmlyc3RGcmFtZS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKS0+dXJs
KCksIFJlc291cmNlVHlwZTo6UG9wdXAgfTsKKyAgICAgICAgVmVjdG9yPENvbnRlbnRFeHRlbnNp
b25zOjpBY3Rpb24+IGFjdGlvbnMgPSBmaXJzdEZyYW1lLT5tYWluRnJhbWUoKS5wYWdlKCktPnVz
ZXJDb250ZW50UHJvdmlkZXIoKS5hY3Rpb25zRm9yUmVzb3VyY2VMb2FkKHJlc291cmNlTG9hZElu
Zm8sICpmaXJzdEZyYW1lLT5tYWluRnJhbWUoKS5kb2N1bWVudCgpLT5sb2FkZXIoKSk7CiAgICAg
ICAgIGZvciAoY29uc3QgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvbiYgYWN0aW9uIDogYWN0aW9u
cykgewogICAgICAgICAgICAgaWYgKGFjdGlvbi50eXBlKCkgPT0gQ29udGVudEV4dGVuc2lvbnM6
OkFjdGlvblR5cGU6OkJsb2NrTG9hZCkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjg5LDM1ICs2ODksMTcgQEAg
dm9pZCBGcmFtZTo6aW5qZWN0VXNlclNjcmlwdHMoVXNlclNjcmlwdAogICAgIGlmIChsb2FkZXIo
KS5zdGF0ZU1hY2hpbmUoKS5jcmVhdGluZ0luaXRpYWxFbXB0eURvY3VtZW50KCkgJiYgIXNldHRp
bmdzKCkuc2hvdWxkSW5qZWN0VXNlclNjcmlwdHNJbkluaXRpYWxFbXB0eURvY3VtZW50KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IGF1dG8qIHVzZXJDb250ZW50Q29udHJvbGxlciA9
IG1fcGFnZS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCk7Ci0gICAgaWYgKCF1c2VyQ29udGVudENv
bnRyb2xsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFdhbGsgdGhlIGhhc2h0YWJsZS4g
SW5qZWN0IGJ5IHdvcmxkLgotICAgIGNvbnN0IFVzZXJTY3JpcHRNYXAqIHVzZXJTY3JpcHRzID0g
dXNlckNvbnRlbnRDb250cm9sbGVyLT51c2VyU2NyaXB0cygpOwotICAgIGlmICghdXNlclNjcmlw
dHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoY29uc3QgYXV0byYgd29ybGRBbmRVc2Vy
U2NyaXB0IDogKnVzZXJTY3JpcHRzKQotICAgICAgICBpbmplY3RVc2VyU2NyaXB0c0Zvcldvcmxk
KCp3b3JsZEFuZFVzZXJTY3JpcHQua2V5LCAqd29ybGRBbmRVc2VyU2NyaXB0LnZhbHVlLCBpbmpl
Y3Rpb25UaW1lKTsKLX0KLQotdm9pZCBGcmFtZTo6aW5qZWN0VXNlclNjcmlwdHNGb3JXb3JsZChE
T01XcmFwcGVyV29ybGQmIHdvcmxkLCBjb25zdCBVc2VyU2NyaXB0VmVjdG9yJiB1c2VyU2NyaXB0
cywgVXNlclNjcmlwdEluamVjdGlvblRpbWUgaW5qZWN0aW9uVGltZSkKLXsKLSAgICBpZiAodXNl
clNjcmlwdHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEb2N1bWVudCogZG9j
ID0gZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvYykKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSB0
aGlzLT5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGZvciAoYXV0byYgc2NyaXB0IDogdXNlclNjcmlwdHMpIHsKLSAgICAgICAgaWYgKHNjcmlw
dC0+aW5qZWN0ZWRGcmFtZXMoKSA9PSBJbmplY3RJblRvcEZyYW1lT25seSAmJiBvd25lckVsZW1l
bnQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChzY3JpcHQtPmluamVj
dGlvblRpbWUoKSA9PSBpbmplY3Rpb25UaW1lICYmIFVzZXJDb250ZW50VVJMUGF0dGVybjo6bWF0
Y2hlc1BhdHRlcm5zKGRvYy0+dXJsKCksIHNjcmlwdC0+d2hpdGVsaXN0KCksIHNjcmlwdC0+Ymxh
Y2tsaXN0KCkpKQotICAgICAgICAgICAgbV9zY3JpcHQtPmV2YWx1YXRlSW5Xb3JsZChTY3JpcHRT
b3VyY2VDb2RlKHNjcmlwdC0+c291cmNlKCksIHNjcmlwdC0+dXJsKCkpLCB3b3JsZCk7Ci0gICAg
fQorICAgIG1fcGFnZS0+dXNlckNvbnRlbnRQcm92aWRlcigpLmZvckVhY2hVc2VyU2NyaXB0KFsm
XShET01XcmFwcGVyV29ybGQmIHdvcmxkLCBjb25zdCBVc2VyU2NyaXB0JiBzY3JpcHQpIHsKKyAg
ICAgICAgaWYgKHNjcmlwdC5pbmplY3RlZEZyYW1lcygpID09IEluamVjdEluVG9wRnJhbWVPbmx5
ICYmIG93bmVyRWxlbWVudCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChz
Y3JpcHQuaW5qZWN0aW9uVGltZSgpID09IGluamVjdGlvblRpbWUgJiYgVXNlckNvbnRlbnRVUkxQ
YXR0ZXJuOjptYXRjaGVzUGF0dGVybnMoZG9jdW1lbnQtPnVybCgpLCBzY3JpcHQud2hpdGVsaXN0
KCksIHNjcmlwdC5ibGFja2xpc3QoKSkpCisgICAgICAgICAgICBtX3NjcmlwdC0+ZXZhbHVhdGVJ
bldvcmxkKFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0LnNvdXJjZSgpLCBzY3JpcHQudXJsKCkpLCB3
b3JsZCk7CisgICAgfSk7CiB9CiAKIFJlbmRlclZpZXcqIEZyYW1lOjpjb250ZW50UmVuZGVyZXIo
KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODAsOCArMjgwLDYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBGcmFtZShQYWdlJiwgSFRNTEZyYW1lT3duZXJF
bGVtZW50KiwgRnJhbWVMb2FkZXJDbGllbnQmKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHZv
aWQgaW5qZWN0VXNlclNjcmlwdHNGb3JXb3JsZChET01XcmFwcGVyV29ybGQmLCBjb25zdCBVc2Vy
U2NyaXB0VmVjdG9yJiwgVXNlclNjcmlwdEluamVjdGlvblRpbWUpOwotCiAgICAgICAgIEhhc2hT
ZXQ8RnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyKj4gbV9kZXN0cnVjdGlvbk9ic2VydmVyczsKIAog
ICAgICAgICBNYWluRnJhbWUmIG1fbWFpbkZyYW1lOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCShy
ZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBACiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2lu
Y2x1ZGUgIlN1YmZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5o
IgotI2luY2x1ZGUgIlVzZXJDb250ZW50Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlVzZXJDb250
ZW50UHJvdmlkZXIuaCIKICNpbmNsdWRlICJVc2VySW5wdXRCcmlkZ2UuaCIKICNpbmNsdWRlICJW
aWV3U3RhdGVDaGFuZ2VPYnNlcnZlci5oIgogI2luY2x1ZGUgIlZpc2l0ZWRMaW5rU3RhdGUuaCIK
QEAgLTIzMSw3ICsyMzEsNyBAQCBQYWdlOjpQYWdlKFBhZ2VDb25maWd1cmF0aW9uJiBwYWdlQ29u
ZmlnCiAgICAgLCBtX2FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlKHBhZ2VDb25maWd1cmF0aW9uLmFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlID8gKldURk1vdmUocGFnZUNvbmZpZ3VyYXRpb24uYXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2UpIDogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnNpbmdsZXRvbigp
KQogICAgICwgbV9kYXRhYmFzZVByb3ZpZGVyKCpXVEZNb3ZlKHBhZ2VDb25maWd1cmF0aW9uLmRh
dGFiYXNlUHJvdmlkZXIpKQogICAgICwgbV9zdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIoKldURk1v
dmUocGFnZUNvbmZpZ3VyYXRpb24uc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyKSkKLSAgICAsIG1f
dXNlckNvbnRlbnRDb250cm9sbGVyKFdURk1vdmUocGFnZUNvbmZpZ3VyYXRpb24udXNlckNvbnRl
bnRDb250cm9sbGVyKSkKKyAgICAsIG1fdXNlckNvbnRlbnRQcm92aWRlcigqV1RGTW92ZShwYWdl
Q29uZmlndXJhdGlvbi51c2VyQ29udGVudFByb3ZpZGVyKSkKICAgICAsIG1fdmlzaXRlZExpbmtT
dG9yZSgqV1RGTW92ZShwYWdlQ29uZmlndXJhdGlvbi52aXNpdGVkTGlua1N0b3JlKSkKICAgICAs
IG1fc2Vzc2lvbklEKFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQogICAgICwgbV9pc0Ns
b3NpbmcoZmFsc2UpCkBAIC0yNDAsOSArMjQwLDcgQEAgUGFnZTo6UGFnZShQYWdlQ29uZmlndXJh
dGlvbiYgcGFnZUNvbmZpZwogCiAgICAgbV9zdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXItPmFkZFBh
Z2UoKnRoaXMpOwogCi0gICAgaWYgKG1fdXNlckNvbnRlbnRDb250cm9sbGVyKQotICAgICAgICBt
X3VzZXJDb250ZW50Q29udHJvbGxlci0+YWRkUGFnZSgqdGhpcyk7Ci0KKyAgICBtX3VzZXJDb250
ZW50UHJvdmlkZXItPmFkZFBhZ2UoKnRoaXMpOwogICAgIG1fdmlzaXRlZExpbmtTdG9yZS0+YWRk
UGFnZSgqdGhpcyk7CiAKICAgICBpZiAoIWFsbFBhZ2VzKSB7CkBAIC0yOTgsOSArMjk2LDcgQEAg
UGFnZTo6flBhZ2UoKQogI2VuZGlmCiAKICAgICBtX3N0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci0+
cmVtb3ZlUGFnZSgqdGhpcyk7Ci0KLSAgICBpZiAobV91c2VyQ29udGVudENvbnRyb2xsZXIpCi0g
ICAgICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5yZW1vdmVQYWdlKCp0aGlzKTsKKyAgICBt
X3VzZXJDb250ZW50UHJvdmlkZXItPnJlbW92ZVBhZ2UoKnRoaXMpOwogICAgIG1fdmlzaXRlZExp
bmtTdG9yZS0+cmVtb3ZlUGFnZSgqdGhpcyk7CiB9CiAKQEAgLTE4MTksMTUgKzE4MTUsMTYgQEAg
Ym9vbCBQYWdlOjphcmVQcm9tcHRzQWxsb3dlZCgpCiAgICAgcmV0dXJuICFtX2ZvcmJpZFByb21w
dHNEZXB0aDsKIH0KIAotdm9pZCBQYWdlOjpzZXRVc2VyQ29udGVudENvbnRyb2xsZXIoVXNlckNv
bnRlbnRDb250cm9sbGVyKiB1c2VyQ29udGVudENvbnRyb2xsZXIpCitVc2VyQ29udGVudFByb3Zp
ZGVyJiBQYWdlOjp1c2VyQ29udGVudFByb3ZpZGVyKCkKIHsKLSAgICBpZiAobV91c2VyQ29udGVu
dENvbnRyb2xsZXIpCi0gICAgICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5yZW1vdmVQYWdl
KCp0aGlzKTsKLQotICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyID0gdXNlckNvbnRlbnRDb250
cm9sbGVyOworICAgIHJldHVybiBtX3VzZXJDb250ZW50UHJvdmlkZXI7Cit9CiAKLSAgICBpZiAo
bV91c2VyQ29udGVudENvbnRyb2xsZXIpCi0gICAgICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVy
LT5hZGRQYWdlKCp0aGlzKTsKK3ZvaWQgUGFnZTo6c2V0VXNlckNvbnRlbnRQcm92aWRlcihSZWY8
VXNlckNvbnRlbnRQcm92aWRlcj4mJiB1c2VyQ29udGVudFByb3ZpZGVyKQoreworICAgIG1fdXNl
ckNvbnRlbnRQcm92aWRlci0+cmVtb3ZlUGFnZSgqdGhpcyk7CisgICAgbV91c2VyQ29udGVudFBy
b3ZpZGVyID0gV1RGTW92ZSh1c2VyQ29udGVudFByb3ZpZGVyKTsKKyAgICBtX3VzZXJDb250ZW50
UHJvdmlkZXItPmFkZFBhZ2UoKnRoaXMpOwogCiAgICAgaW52YWxpZGF0ZUluamVjdGVkU3R5bGVT
aGVldENhY2hlSW5BbGxGcmFtZXMoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCShyZXZpc2lvbiAx
OTgxNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MTIxLDcgKzEyMSw3IEBAIGNsYXNzIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOwogY2xhc3MgU2V0dGlu
Z3M7CiBjbGFzcyBTdG9yYWdlTmFtZXNwYWNlOwogY2xhc3MgU3RvcmFnZU5hbWVzcGFjZVByb3Zp
ZGVyOwotY2xhc3MgVXNlckNvbnRlbnRDb250cm9sbGVyOworY2xhc3MgVXNlckNvbnRlbnRQcm92
aWRlcjsKIGNsYXNzIFZhbGlkYXRpb25NZXNzYWdlQ2xpZW50OwogY2xhc3MgVmlld1N0YXRlQ2hh
bmdlT2JzZXJ2ZXI7CiBjbGFzcyBWaXNpdGVkTGlua1N0b3JlOwpAQCAtNDUwLDggKzQ1MCw4IEBA
IHB1YmxpYzoKICAgICBTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXImIHN0b3JhZ2VOYW1lc3BhY2VQ
cm92aWRlcigpIHsgcmV0dXJuIG1fc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmdldCgpOyB9CiAg
ICAgdm9pZCBzZXRTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIoUmVmPFN0b3JhZ2VOYW1lc3BhY2VQ
cm92aWRlcj4mJik7CiAKLSAgICBVc2VyQ29udGVudENvbnRyb2xsZXIqIHVzZXJDb250ZW50Q29u
dHJvbGxlcigpIHsgcmV0dXJuIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLmdldCgpOyB9Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRVc2VyQ29udGVudENvbnRyb2xsZXIoVXNlckNvbnRlbnRD
b250cm9sbGVyKik7CisgICAgVXNlckNvbnRlbnRQcm92aWRlciYgdXNlckNvbnRlbnRQcm92aWRl
cigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VXNlckNvbnRlbnRQcm92aWRlcihSZWY8
VXNlckNvbnRlbnRQcm92aWRlcj4mJik7CiAKICAgICBWaXNpdGVkTGlua1N0b3JlJiB2aXNpdGVk
TGlua1N0b3JlKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaXNpdGVkTGlua1N0b3Jl
KFJlZjxWaXNpdGVkTGlua1N0b3JlPiYmKTsKQEAgLTY3Niw3ICs2NzYsNyBAQCBwcml2YXRlOgog
ICAgIFJlZjxBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZT4gbV9hcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTsKICAgICBSZWY8RGF0YWJhc2VQcm92aWRlcj4gbV9kYXRhYmFzZVByb3ZpZGVyOwogICAgIFJl
ZjxTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXI+IG1fc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyOwot
ICAgIFJlZlB0cjxVc2VyQ29udGVudENvbnRyb2xsZXI+IG1fdXNlckNvbnRlbnRDb250cm9sbGVy
OworICAgIFJlZjxVc2VyQ29udGVudFByb3ZpZGVyPiBtX3VzZXJDb250ZW50UHJvdmlkZXI7CiAg
ICAgUmVmPFZpc2l0ZWRMaW5rU3RvcmU+IG1fdmlzaXRlZExpbmtTdG9yZTsKICAgICBSZWZQdHI8
V2hlZWxFdmVudFRlc3RUcmlnZ2VyPiBtX3Rlc3RUcmlnZ2VyOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2VDb25maWd1cmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlQ29uZmlndXJhdGlvbi5oCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2VDb25maWd1cmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcg
KzQ4LDcgQEAgY2xhc3MgSW5zcGVjdG9yQ2xpZW50OwogY2xhc3MgUGx1Z0luQ2xpZW50OwogY2xh
c3MgUHJvZ3Jlc3NUcmFja2VyQ2xpZW50OwogY2xhc3MgU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVy
OwotY2xhc3MgVXNlckNvbnRlbnRDb250cm9sbGVyOworY2xhc3MgVXNlckNvbnRlbnRQcm92aWRl
cjsKIGNsYXNzIFZhbGlkYXRpb25NZXNzYWdlQ2xpZW50OwogY2xhc3MgVmlzaXRlZExpbmtTdG9y
ZTsKIApAQCAtODQsNyArODQsNyBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlPiBhcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTsKICAgICBSZWZQdHI8RGF0YWJhc2VQ
cm92aWRlcj4gZGF0YWJhc2VQcm92aWRlcjsKICAgICBSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZVBy
b3ZpZGVyPiBzdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXI7Ci0gICAgUmVmUHRyPFVzZXJDb250ZW50
Q29udHJvbGxlcj4gdXNlckNvbnRlbnRDb250cm9sbGVyOworICAgIFJlZlB0cjxVc2VyQ29udGVu
dFByb3ZpZGVyPiB1c2VyQ29udGVudFByb3ZpZGVyOwogICAgIFJlZlB0cjxWaXNpdGVkTGlua1N0
b3JlPiB2aXNpdGVkTGlua1N0b3JlOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9V
c2VyQ29udGVudENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvVXNlckNvbnRlbnRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNywyNCArMjcsMTUgQEAKICNpbmNsdWRlICJVc2VyQ29udGVudENvbnRyb2xsZXIuaCIKIAog
I2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5j
bHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRlICJFeHRlbnNpb25TdHlsZVNoZWV0cy5o
IgotI2luY2x1ZGUgIk1haW5GcmFtZS5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJS
ZXNvdXJjZUxvYWRJbmZvLmgiCiAjaW5jbHVkZSAiVXNlclNjcmlwdC5oIgogI2luY2x1ZGUgIlVz
ZXJTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0NlbGxJbmxpbmVzLmg+Ci0jaW5j
bHVkZSA8cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+CiAKICNpZiBFTkFCTEUoVVNFUl9NRVNT
QUdFX0hBTkRMRVJTKQogI2luY2x1ZGUgIlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IuaCIK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSNpbmNsdWRlICJDb250
ZW50RXh0ZW5zaW9uQ29tcGlsZXIuaCIKLSNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9uc0JhY2tl
bmQuaCIKKyNpbmNsdWRlICJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uaCIKICNlbmRpZgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02MiwzNiArNTMsMzMgQEAgVXNlckNvbnRlbnRDb250cm9s
bGVyOjp+VXNlckNvbnRlbnRDb250cgogewogfQogCi12b2lkIFVzZXJDb250ZW50Q29udHJvbGxl
cjo6YWRkUGFnZShQYWdlJiBwYWdlKQordm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OmZvckVh
Y2hVc2VyU2NyaXB0KGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChET01XcmFwcGVyV29ybGQmLCBj
b25zdCBVc2VyU2NyaXB0Jik+JiBmdW5jdG9yKSBjb25zdAogewotICAgIEFTU0VSVCghbV9wYWdl
cy5jb250YWlucygmcGFnZSkpOwotICAgIG1fcGFnZXMuYWRkKCZwYWdlKTsKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIHdvcmxkQW5kVXNlclNjcmlwdFZlY3RvciA6IG1fdXNlclNjcmlwdHMpIHsKKyAg
ICAgICAgYXV0byYgd29ybGQgPSAqd29ybGRBbmRVc2VyU2NyaXB0VmVjdG9yLmtleS5nZXQoKTsK
KyAgICAgICAgZm9yIChjb25zdCBhdXRvJiB1c2VyU2NyaXB0IDogKndvcmxkQW5kVXNlclNjcmlw
dFZlY3Rvci52YWx1ZSkKKyAgICAgICAgICAgIGZ1bmN0b3Iod29ybGQsICp1c2VyU2NyaXB0KTsK
KyAgICB9CiB9CiAKLXZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVQYWdlKFBhZ2Um
IHBhZ2UpCit2b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6Zm9yRWFjaFVzZXJTdHlsZVNoZWV0
KGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBVc2VyU3R5bGVTaGVldCYpPiYgZnVuY3Rv
cikgY29uc3QKIHsKLSAgICBBU1NFUlQobV9wYWdlcy5jb250YWlucygmcGFnZSkpOwotICAgIG1f
cGFnZXMucmVtb3ZlKCZwYWdlKTsKKyAgICBmb3IgKGF1dG8mIHN0eWxlU2hlZXRWZWN0b3IgOiBt
X3VzZXJTdHlsZVNoZWV0cy52YWx1ZXMoKSkgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHN0
eWxlU2hlZXQgOiAqc3R5bGVTaGVldFZlY3RvcikKKyAgICAgICAgICAgIGZ1bmN0b3IoKnN0eWxl
U2hlZXQpOworICAgIH0KIH0KIAogdm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJT
Y3JpcHQoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgc3RkOjp1bmlxdWVfcHRyPFVzZXJTY3JpcHQ+
IHVzZXJTY3JpcHQpCiB7Ci0gICAgaWYgKCFtX3VzZXJTY3JpcHRzKQotICAgICAgICBtX3VzZXJT
Y3JpcHRzID0gc3RkOjptYWtlX3VuaXF1ZTxVc2VyU2NyaXB0TWFwPigpOwotCi0gICAgYXV0byYg
c2NyaXB0c0luV29ybGQgPSBtX3VzZXJTY3JpcHRzLT5hZGQoJndvcmxkLCBudWxscHRyKS5pdGVy
YXRvci0+dmFsdWU7Ci0gICAgaWYgKCFzY3JpcHRzSW5Xb3JsZCkKLSAgICAgICAgc2NyaXB0c0lu
V29ybGQgPSBzdGQ6Om1ha2VfdW5pcXVlPFVzZXJTY3JpcHRWZWN0b3I+KCk7CisgICAgYXV0byYg
c2NyaXB0c0luV29ybGQgPSBtX3VzZXJTY3JpcHRzLmVuc3VyZSgmd29ybGQsIFsmXSB7IHJldHVy
biBzdGQ6Om1ha2VfdW5pcXVlPFVzZXJTY3JpcHRWZWN0b3I+KCk7IH0pLml0ZXJhdG9yLT52YWx1
ZTsKICAgICBzY3JpcHRzSW5Xb3JsZC0+YXBwZW5kKFdURk1vdmUodXNlclNjcmlwdCkpOwogfQog
CiB2b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlwdChET01XcmFwcGVy
V29ybGQmIHdvcmxkLCBjb25zdCBVUkwmIHVybCkKIHsKLSAgICBpZiAoIW1fdXNlclNjcmlwdHMp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gaXQgPSBtX3VzZXJTY3JpcHRzLT5maW5kKCZ3
b3JsZCk7Ci0gICAgaWYgKGl0ID09IG1fdXNlclNjcmlwdHMtPmVuZCgpKQorICAgIGF1dG8gaXQg
PSBtX3VzZXJTY3JpcHRzLmZpbmQoJndvcmxkKTsKKyAgICBpZiAoaXQgPT0gbV91c2VyU2NyaXB0
cy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBzY3JpcHRzID0gaXQtPnZhbHVl
LmdldCgpOwpAQCAtMTAxLDI1ICs4OSwxNyBAQCB2b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6
cmVtb3ZlVXNlclNjCiAgICAgfQogCiAgICAgaWYgKHNjcmlwdHMtPmlzRW1wdHkoKSkKLSAgICAg
ICAgbV91c2VyU2NyaXB0cy0+cmVtb3ZlKGl0KTsKKyAgICAgICAgbV91c2VyU2NyaXB0cy5yZW1v
dmUoaXQpOwogfQogCiB2b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlw
dHMoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCkKIHsKLSAgICBpZiAoIW1fdXNlclNjcmlwdHMpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fdXNlclNjcmlwdHMtPnJlbW92ZSgmd29ybGQpOworICAg
IG1fdXNlclNjcmlwdHMucmVtb3ZlKCZ3b3JsZCk7CiB9CiAKIHZvaWQgVXNlckNvbnRlbnRDb250
cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldChET01XcmFwcGVyV29ybGQmIHdvcmxkLCBzdGQ6OnVu
aXF1ZV9wdHI8VXNlclN0eWxlU2hlZXQ+IHVzZXJTdHlsZVNoZWV0LCBVc2VyU3R5bGVJbmplY3Rp
b25UaW1lIGluamVjdGlvblRpbWUpCiB7Ci0gICAgaWYgKCFtX3VzZXJTdHlsZVNoZWV0cykKLSAg
ICAgICAgbV91c2VyU3R5bGVTaGVldHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFVzZXJTdHlsZVNoZWV0
TWFwPigpOwotCi0gICAgYXV0byYgc3R5bGVTaGVldHNJbldvcmxkID0gbV91c2VyU3R5bGVTaGVl
dHMtPmFkZCgmd29ybGQsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKLSAgICBpZiAoIXN0eWxl
U2hlZXRzSW5Xb3JsZCkKLSAgICAgICAgc3R5bGVTaGVldHNJbldvcmxkID0gc3RkOjptYWtlX3Vu
aXF1ZTxVc2VyU3R5bGVTaGVldFZlY3Rvcj4oKTsKKyAgICBhdXRvJiBzdHlsZVNoZWV0c0luV29y
bGQgPSBtX3VzZXJTdHlsZVNoZWV0cy5lbnN1cmUoJndvcmxkLCBbJl0geyByZXR1cm4gc3RkOjpt
YWtlX3VuaXF1ZTxVc2VyU3R5bGVTaGVldFZlY3Rvcj4oKTsgfSkuaXRlcmF0b3ItPnZhbHVlOwog
ICAgIHN0eWxlU2hlZXRzSW5Xb3JsZC0+YXBwZW5kKFdURk1vdmUodXNlclN0eWxlU2hlZXQpKTsK
IAogICAgIGlmIChpbmplY3Rpb25UaW1lID09IEluamVjdEluRXhpc3RpbmdEb2N1bWVudHMpCkBA
IC0xMjgsMTEgKzEwOCw4IEBAIHZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyU3R5
bGUKIAogdm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNoZWV0KERP
TVdyYXBwZXJXb3JsZCYgd29ybGQsIGNvbnN0IFVSTCYgdXJsKQogewotICAgIGlmICghbV91c2Vy
U3R5bGVTaGVldHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gaXQgPSBtX3VzZXJTdHls
ZVNoZWV0cy0+ZmluZCgmd29ybGQpOwotICAgIGlmIChpdCA9PSBtX3VzZXJTdHlsZVNoZWV0cy0+
ZW5kKCkpCisgICAgYXV0byBpdCA9IG1fdXNlclN0eWxlU2hlZXRzLmZpbmQoJndvcmxkKTsKKyAg
ICBpZiAoaXQgPT0gbV91c2VyU3R5bGVTaGVldHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGF1dG8mIHN0eWxlc2hlZXRzID0gKml0LT52YWx1ZTsKQEAgLTE0OSwxNyArMTI2LDE0IEBA
IHZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU3QKICAgICAgICAgcmV0dXJu
OwogCiAgICAgaWYgKHN0eWxlc2hlZXRzLmlzRW1wdHkoKSkKLSAgICAgICAgbV91c2VyU3R5bGVT
aGVldHMtPnJlbW92ZShpdCk7CisgICAgICAgIG1fdXNlclN0eWxlU2hlZXRzLnJlbW92ZShpdCk7
CiAKICAgICBpbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lc0luQWxs
UGFnZXMoKTsKIH0KIAogdm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdHls
ZVNoZWV0cyhET01XcmFwcGVyV29ybGQmIHdvcmxkKQogewotICAgIGlmICghbV91c2VyU3R5bGVT
aGVldHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV91c2VyU3R5bGVTaGVldHMtPnJl
bW92ZSgmd29ybGQpKQorICAgIGlmICghbV91c2VyU3R5bGVTaGVldHMucmVtb3ZlKCZ3b3JsZCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNo
ZUluQWxsRnJhbWVzSW5BbGxQYWdlcygpOwpAQCAtMTY4LDk1ICsxNDIsNDAgQEAgdm9pZCBVc2Vy
Q29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdAogI2lmIEVOQUJMRShVU0VSX01FU1NBR0Vf
SEFORExFUlMpCiB2b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlck1lc3NhZ2VIYW5k
bGVyRGVzY3JpcHRvcihVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQog
ewotICAgIGlmICghbV91c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycykKLSAgICAgICAgbV91
c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycyA9IHN0ZDo6bWFrZV91bmlxdWU8VXNlck1lc3Nh
Z2VIYW5kbGVyRGVzY3JpcHRvck1hcD4oKTsKLQotICAgIG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVz
Y3JpcHRvcnMtPmFkZChzdGQ6Om1ha2VfcGFpcihkZXNjcmlwdG9yLm5hbWUoKSwgJmRlc2NyaXB0
b3Iud29ybGQoKSksICZkZXNjcmlwdG9yKTsKKyAgICBtX3VzZXJNZXNzYWdlSGFuZGxlckRlc2Ny
aXB0b3JzLmFkZChzdGQ6Om1ha2VfcGFpcihkZXNjcmlwdG9yLm5hbWUoKSwgJmRlc2NyaXB0b3Iu
d29ybGQoKSksICZkZXNjcmlwdG9yKTsKIH0KIAogdm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6
OnJlbW92ZVVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IoVXNlck1lc3NhZ2VIYW5kbGVyRGVz
Y3JpcHRvciYgZGVzY3JpcHRvcikKIHsKLSAgICBpZiAoIW1fdXNlck1lc3NhZ2VIYW5kbGVyRGVz
Y3JpcHRvcnMpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVz
Y3JpcHRvcnMtPnJlbW92ZShzdGQ6Om1ha2VfcGFpcihkZXNjcmlwdG9yLm5hbWUoKSwgJmRlc2Ny
aXB0b3Iud29ybGQoKSkpOworICAgIG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMucmVt
b3ZlKHN0ZDo6bWFrZV9wYWlyKGRlc2NyaXB0b3IubmFtZSgpLCAmZGVzY3JpcHRvci53b3JsZCgp
KSk7CiB9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiB2b2lkIFVz
ZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlckNvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5n
JiBuYW1lLCBSZWZQdHI8Q29udGVudEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29udGVudEV4dGVuc2lv
bj4gY29udGVudEV4dGVuc2lvbikKIHsKLSAgICBpZiAoIW1fY29udGVudEV4dGVuc2lvbkJhY2tl
bmQpCi0gICAgICAgIG1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQgPSBzdGQ6Om1ha2VfdW5pcXVl
PENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ+KCk7Ci0gICAgCi0g
ICAgbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZC0+YWRkQ29udGVudEV4dGVuc2lvbihuYW1lLCBj
b250ZW50RXh0ZW5zaW9uKTsKKyAgICBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kLmFkZENvbnRl
bnRFeHRlbnNpb24obmFtZSwgY29udGVudEV4dGVuc2lvbik7CiB9CiAKIHZvaWQgVXNlckNvbnRl
bnRDb250cm9sbGVyOjpyZW1vdmVVc2VyQ29udGVudEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5h
bWUpCiB7Ci0gICAgaWYgKCFtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kLT5yZW1vdmVDb250ZW50RXh0ZW5z
aW9uKG5hbWUpOworICAgIG1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQucmVtb3ZlQ29udGVudEV4
dGVuc2lvbihuYW1lKTsKIH0KIAogdm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZUFs
bFVzZXJDb250ZW50RXh0ZW5zaW9ucygpCiB7Ci0gICAgaWYgKCFtX2NvbnRlbnRFeHRlbnNpb25C
YWNrZW5kKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5k
LT5yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucygpOwotfQotCi1zdGF0aWMgYm9vbCBjb250ZW50
RXh0ZW5zaW9uc0VuYWJsZWQoY29uc3QgRG9jdW1lbnRMb2FkZXImIGRvY3VtZW50TG9hZGVyKQot
ewotICAgIGlmIChhdXRvIGZyYW1lID0gZG9jdW1lbnRMb2FkZXIuZnJhbWUoKSkgewotICAgICAg
ICBpZiAoZnJhbWUtPmlzTWFpbkZyYW1lKCkpCi0gICAgICAgICAgICByZXR1cm4gZG9jdW1lbnRM
b2FkZXIudXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZCgpOwotICAgICAgICBpZiAoYXV0byBt
YWluRG9jdW1lbnRMb2FkZXIgPSBmcmFtZS0+bWFpbkZyYW1lKCkubG9hZGVyKCkuZG9jdW1lbnRM
b2FkZXIoKSkKLSAgICAgICAgICAgIHJldHVybiBtYWluRG9jdW1lbnRMb2FkZXItPnVzZXJDb250
ZW50RXh0ZW5zaW9uc0VuYWJsZWQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSAg
ICAKLUNvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzIFVzZXJDb250ZW50Q29udHJvbGxl
cjo6cHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQoUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LCBSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlLCBEb2N1bWVudExvYWRlciYgaW5pdGlh
dGluZ0RvY3VtZW50TG9hZGVyKQotewotICAgIGlmICghbV9jb250ZW50RXh0ZW5zaW9uQmFja2Vu
ZCkKLSAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzOjpOb3RC
bG9ja2VkOwotCi0gICAgaWYgKCFjb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQoaW5pdGlhdGluZ0Rv
Y3VtZW50TG9hZGVyKSkKLSAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2Vk
U3RhdHVzOjpOb3RCbG9ja2VkOwotCi0gICAgcmV0dXJuIG1fY29udGVudEV4dGVuc2lvbkJhY2tl
bmQtPnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKHJlcXVlc3QsIHJlc291cmNl
VHlwZSwgaW5pdGlhdGluZ0RvY3VtZW50TG9hZGVyKTsKLX0KLQotVmVjdG9yPENvbnRlbnRFeHRl
bnNpb25zOjpBY3Rpb24+IFVzZXJDb250ZW50Q29udHJvbGxlcjo6YWN0aW9uc0ZvclJlc291cmNl
TG9hZChjb25zdCBSZXNvdXJjZUxvYWRJbmZvJiByZXNvdXJjZUxvYWRJbmZvLCBEb2N1bWVudExv
YWRlciYgaW5pdGlhdGluZ0RvY3VtZW50TG9hZGVyKQotewotICAgIGlmICghbV9jb250ZW50RXh0
ZW5zaW9uQmFja2VuZCkKLSAgICAgICAgcmV0dXJuIFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6
QWN0aW9uPigpOwotICAgIAotICAgIGlmICghY29udGVudEV4dGVuc2lvbnNFbmFibGVkKGluaXRp
YXRpbmdEb2N1bWVudExvYWRlcikpCi0gICAgICAgIHJldHVybiBWZWN0b3I8Q29udGVudEV4dGVu
c2lvbnM6OkFjdGlvbj4oKTsKLQotICAgIHJldHVybiBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5k
LT5hY3Rpb25zRm9yUmVzb3VyY2VMb2FkKHJlc291cmNlTG9hZEluZm8pOworICAgIG1fY29udGVu
dEV4dGVuc2lvbkJhY2tlbmQucmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKTsKIH0KICNlbmRp
ZgogCiB2b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxsVXNlckNvbnRlbnQoKQog
ewotICAgIG1fdXNlclNjcmlwdHMgPSBudWxscHRyOworICAgIG1fdXNlclNjcmlwdHMuY2xlYXIo
KTsKIAotICAgIGlmIChtX3VzZXJTdHlsZVNoZWV0cykgewotICAgICAgICBtX3VzZXJTdHlsZVNo
ZWV0cyA9IG51bGxwdHI7CisgICAgaWYgKCFtX3VzZXJTdHlsZVNoZWV0cy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgbV91c2VyU3R5bGVTaGVldHMuY2xlYXIoKTsKICAgICAgICAgaW52YWxpZGF0ZUlu
amVjdGVkU3R5bGVTaGVldENhY2hlSW5BbGxGcmFtZXNJbkFsbFBhZ2VzKCk7CiAgICAgfQogfQog
Ci12b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6aW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVl
dENhY2hlSW5BbGxGcmFtZXNJbkFsbFBhZ2VzKCkKLXsKLSAgICBmb3IgKGF1dG8mIHBhZ2UgOiBt
X3BhZ2VzKQotICAgICAgICBwYWdlLT5pbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJ
bkFsbEZyYW1lcygpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnRDb250cm9sbGVyLmgJKHJldmlzaW9uIDE5ODE0NykK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnRDb250cm9sbGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDU4ICsyNiwxOSBAQAogI2lmbmRlZiBVc2VyQ29udGVudENvbnRyb2xsZXJf
aAogI2RlZmluZSBVc2VyQ29udGVudENvbnRyb2xsZXJfaAogCi0jaW5jbHVkZSAiVXNlclNjcmlw
dFR5cGVzLmgiCi0jaW5jbHVkZSAiVXNlclN0eWxlU2hlZXRUeXBlcy5oIgotI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+Ci0KLSNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQotI2luY2x1ZGUg
IlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JUeXBlcy5oIgotI2VuZGlmCi0KLSNpZiBFTkFC
TEUoQ09OVEVOVF9FWFRFTlNJT05TKQotI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25BY3Rpb25z
LmgiCi0jZW5kaWYKKyNpbmNsdWRlICJVc2VyQ29udGVudFByb3ZpZGVyLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgRE9NV3JhcHBlcldvcmxkOwotY2xhc3MgRG9jdW1lbnRMb2Fk
ZXI7Ci1jbGFzcyBQYWdlOwotY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwotY2xhc3MgU3R5bGVTaGVl
dENvbnRlbnRzOwotY2xhc3MgVVJMOwotY2xhc3MgVXNlclNjcmlwdDsKLWNsYXNzIFVzZXJTdHls
ZVNoZWV0OwotY2xhc3MgVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcjsKLQotZW51bSBjbGFz
cyBSZXNvdXJjZVR5cGUgOiB1aW50MTZfdDsKLQotc3RydWN0IFJlc291cmNlTG9hZEluZm87Ci0K
LW5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7Ci1jbGFzcyBDb21waWxlZENvbnRlbnRFeHRl
bnNpb247Ci1jbGFzcyBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ7Ci1zdHJ1Y3QgQWN0aW9uOwot
fQotCi1jbGFzcyBVc2VyQ29udGVudENvbnRyb2xsZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxVc2Vy
Q29udGVudENvbnRyb2xsZXI+IHsKK2NsYXNzIFVzZXJDb250ZW50Q29udHJvbGxlciBmaW5hbCA6
IHB1YmxpYyBVc2VyQ29udGVudFByb3ZpZGVyIHsKIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgUmVmPFVzZXJDb250ZW50Q29udHJvbGxlcj4gY3JlYXRlKCk7CiAgICAgV0VCQ09S
RV9FWFBPUlQgflVzZXJDb250ZW50Q29udHJvbGxlcigpOwogCi0gICAgdm9pZCBhZGRQYWdlKFBh
Z2UmKTsKLSAgICB2b2lkIHJlbW92ZVBhZ2UoUGFnZSYpOwotCi0gICAgY29uc3QgVXNlclNjcmlw
dE1hcCogdXNlclNjcmlwdHMoKSBjb25zdCB7IHJldHVybiBtX3VzZXJTY3JpcHRzLmdldCgpOyB9
Ci0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZFVzZXJTY3JpcHQoRE9NV3JhcHBlcldvcmxk
Jiwgc3RkOjp1bmlxdWVfcHRyPFVzZXJTY3JpcHQ+KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHJlbW92ZVVzZXJTY3JpcHQoRE9NV3JhcHBlcldvcmxkJiwgY29uc3QgVVJMJik7CiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCByZW1vdmVVc2VyU2NyaXB0cyhET01XcmFwcGVyV29ybGQmKTsKIAot
ICAgIGNvbnN0IFVzZXJTdHlsZVNoZWV0TWFwKiB1c2VyU3R5bGVTaGVldHMoKSBjb25zdCB7IHJl
dHVybiBtX3VzZXJTdHlsZVNoZWV0cy5nZXQoKTsgfQotCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBhZGRVc2VyU3R5bGVTaGVldChET01XcmFwcGVyV29ybGQmLCBzdGQ6OnVuaXF1ZV9wdHI8VXNl
clN0eWxlU2hlZXQ+LCBVc2VyU3R5bGVJbmplY3Rpb25UaW1lKTsKICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHJlbW92ZVVzZXJTdHlsZVNoZWV0KERPTVdyYXBwZXJXb3JsZCYsIGNvbnN0IFVSTCYp
OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlVXNlclN0eWxlU2hlZXRzKERPTVdyYXBw
ZXJXb3JsZCYpOwpAQCAtODUsOCArNDYsNiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCByZW1vdmVBbGxVc2VyQ29udGVudCgpOwogCiAjaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9I
QU5ETEVSUykKLSAgICBjb25zdCBVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yTWFwKiB1c2Vy
TWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlck1lc3NhZ2VI
YW5kbGVyRGVzY3JpcHRvcnMuZ2V0KCk7IH0KLQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRk
VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcihVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9y
Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVVc2VyTWVzc2FnZUhhbmRsZXJEZXNj
cmlwdG9yKFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3ImKTsKICNlbmRpZgpAQCAtOTUsMjUg
KzU0LDI4IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZFVzZXJDb250ZW50
RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPENvbnRlbnRFeHRlbnNpb25zOjpD
b21waWxlZENvbnRlbnRFeHRlbnNpb24+KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92
ZVVzZXJDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCByZW1vdmVBbGxVc2VyQ29udGVudEV4dGVuc2lvbnMoKTsKLQotICAgIENvbnRl
bnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzIHByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNG
b3JMb2FkKFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlVHlwZSwgRG9jdW1lbnRMb2FkZXImIGlu
aXRpYXRpbmdEb2N1bWVudExvYWRlcik7Ci0gICAgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpB
Y3Rpb24+IGFjdGlvbnNGb3JSZXNvdXJjZUxvYWQoY29uc3QgUmVzb3VyY2VMb2FkSW5mbyYsIERv
Y3VtZW50TG9hZGVyJiBpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIpOwogI2VuZGlmCiAKIHByaXZh
dGU6CiAgICAgVXNlckNvbnRlbnRDb250cm9sbGVyKCk7CiAKLSAgICB2b2lkIGludmFsaWRhdGVJ
bmplY3RlZFN0eWxlU2hlZXRDYWNoZUluQWxsRnJhbWVzSW5BbGxQYWdlcygpOwotCi0gICAgSGFz
aFNldDxQYWdlKj4gbV9wYWdlczsKKyAgICAvLyBVc2VyQ29udGVudFByb3ZpZGVyCisgICAgdm9p
ZCBmb3JFYWNoVXNlclNjcmlwdChjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQoRE9NV3JhcHBlcldv
cmxkJiwgY29uc3QgVXNlclNjcmlwdCYpPiYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZm9y
RWFjaFVzZXJTdHlsZVNoZWV0KGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBVc2VyU3R5
bGVTaGVldCYpPiYpIGNvbnN0IG92ZXJyaWRlOworI2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFO
RExFUlMpCisgICAgY29uc3QgVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvck1hcCYgdXNlck1l
c3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3VzZXJN
ZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzOyB9CisjZW5kaWYKKyNpZiBFTkFCTEUoQ09OVEVOVF9F
WFRFTlNJT05TKQorICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tl
bmQmIHVzZXJDb250ZW50RXh0ZW5zaW9uQmFja2VuZCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fY29u
dGVudEV4dGVuc2lvbkJhY2tlbmQ7IH0KKyNlbmRpZgogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFVz
ZXJTY3JpcHRNYXA+IG1fdXNlclNjcmlwdHM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFVzZXJTdHls
ZVNoZWV0TWFwPiBtX3VzZXJTdHlsZVNoZWV0czsKKyAgICBVc2VyU2NyaXB0TWFwIG1fdXNlclNj
cmlwdHM7CisgICAgVXNlclN0eWxlU2hlZXRNYXAgbV91c2VyU3R5bGVTaGVldHM7CiAjaWYgRU5B
QkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VXNlck1lc3Nh
Z2VIYW5kbGVyRGVzY3JpcHRvck1hcD4gbV91c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yczsK
KyAgICBVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yTWFwIG1fdXNlck1lc3NhZ2VIYW5kbGVy
RGVzY3JpcHRvcnM7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAg
IHN0ZDo6dW5pcXVlX3B0cjxDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNr
ZW5kPiBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kOworICAgIENvbnRlbnRFeHRlbnNpb25zOjpD
b250ZW50RXh0ZW5zaW9uc0JhY2tlbmQgbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZDsKICNlbmRp
ZgogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudFByb3ZpZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50UHJvdmlkZXIu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudFByb3Zp
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJVc2VyQ29udGVudFByb3ZpZGVyLmgiCisKKyNp
bmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVk
ZSAiTWFpbkZyYW1lLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorCisjaWYgRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKKyNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuaCIKKyNpbmNs
dWRlICJDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1VzZXJDb250ZW50UHJvdmlkZXI6OlVzZXJDb250ZW50UHJvdmlkZXIoKQorewor
fQorCitVc2VyQ29udGVudFByb3ZpZGVyOjp+VXNlckNvbnRlbnRQcm92aWRlcigpCit7CisgICAg
QVNTRVJUKG1fcGFnZXMuaXNFbXB0eSgpKTsKK30KKwordm9pZCBVc2VyQ29udGVudFByb3ZpZGVy
OjphZGRQYWdlKFBhZ2UmIHBhZ2UpCit7CisgICAgQVNTRVJUKCFtX3BhZ2VzLmNvbnRhaW5zKCZw
YWdlKSk7CisKKyAgICBtX3BhZ2VzLmFkZCgmcGFnZSk7Cit9CisKK3ZvaWQgVXNlckNvbnRlbnRQ
cm92aWRlcjo6cmVtb3ZlUGFnZShQYWdlJiBwYWdlKQoreworICAgIEFTU0VSVChtX3BhZ2VzLmNv
bnRhaW5zKCZwYWdlKSk7CisKKyAgICBtX3BhZ2VzLnJlbW92ZSgmcGFnZSk7Cit9CisKK3ZvaWQg
VXNlckNvbnRlbnRQcm92aWRlcjo6aW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlSW5B
bGxGcmFtZXNJbkFsbFBhZ2VzKCkKK3sKKyAgICBmb3IgKGF1dG8mIHBhZ2UgOiBtX3BhZ2VzKQor
ICAgICAgICBwYWdlLT5pbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1l
cygpOworfQorCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKK3N0YXRpYyBib29sIGNv
bnRlbnRFeHRlbnNpb25zRW5hYmxlZChjb25zdCBEb2N1bWVudExvYWRlciYgZG9jdW1lbnRMb2Fk
ZXIpCit7CisgICAgaWYgKGF1dG8gZnJhbWUgPSBkb2N1bWVudExvYWRlci5mcmFtZSgpKSB7Cisg
ICAgICAgIGlmIChmcmFtZS0+aXNNYWluRnJhbWUoKSkKKyAgICAgICAgICAgIHJldHVybiBkb2N1
bWVudExvYWRlci51c2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkKCk7CisgICAgICAgIGlmIChh
dXRvIG1haW5Eb2N1bWVudExvYWRlciA9IGZyYW1lLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5kb2N1
bWVudExvYWRlcigpKQorICAgICAgICAgICAgcmV0dXJuIG1haW5Eb2N1bWVudExvYWRlci0+dXNl
ckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZCgpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorICAgIAorQ29udGVudEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXMgVXNlckNvbnRlbnRQcm92
aWRlcjo6cHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQoUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlLCBEb2N1bWVudExvYWRlciYgaW5p
dGlhdGluZ0RvY3VtZW50TG9hZGVyKQoreworICAgIGlmICghY29udGVudEV4dGVuc2lvbnNFbmFi
bGVkKGluaXRpYXRpbmdEb2N1bWVudExvYWRlcikpCisgICAgICAgIHJldHVybiBDb250ZW50RXh0
ZW5zaW9uczo6QmxvY2tlZFN0YXR1czo6Tm90QmxvY2tlZDsKKworICAgIHJldHVybiB1c2VyQ29u
dGVudEV4dGVuc2lvbkJhY2tlbmQoKS5wcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9yTG9h
ZChyZXF1ZXN0LCByZXNvdXJjZVR5cGUsIGluaXRpYXRpbmdEb2N1bWVudExvYWRlcik7Cit9CisK
K1ZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uPiBVc2VyQ29udGVudFByb3ZpZGVyOjph
Y3Rpb25zRm9yUmVzb3VyY2VMb2FkKGNvbnN0IFJlc291cmNlTG9hZEluZm8mIHJlc291cmNlTG9h
ZEluZm8sIERvY3VtZW50TG9hZGVyJiBpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIpCit7CisgICAg
aWYgKCFjb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQoaW5pdGlhdGluZ0RvY3VtZW50TG9hZGVyKSkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiB1c2VyQ29udGVudEV4dGVuc2lvbkJh
Y2tlbmQoKS5hY3Rpb25zRm9yUmVzb3VyY2VMb2FkKHJlc291cmNlTG9hZEluZm8pOworfQorI2Vu
ZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
VXNlckNvbnRlbnRQcm92aWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
VXNlckNvbnRlbnRQcm92aWRlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9Vc2VyQ29udGVudFByb3ZpZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgVXNlckNvbnRlbnRQcm92aWRlcl9oCisjZGVmaW5lIFVzZXJD
b250ZW50UHJvdmlkZXJfaAorCisjaW5jbHVkZSAiVXNlclNjcmlwdFR5cGVzLmgiCisjaW5jbHVk
ZSAiVXNlclN0eWxlU2hlZXRUeXBlcy5oIgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisKKyNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQorI2lu
Y2x1ZGUgIlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JUeXBlcy5oIgorI2VuZGlmCisKKyNp
ZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25B
Y3Rpb25zLmgiCisjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmgiCisjZW5kaWYK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEb2N1bWVudExvYWRlcjsKK2NsYXNzIFBh
Z2U7CitjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CitjbGFzcyBVUkw7CisKK2VudW0gY2xhc3MgUmVz
b3VyY2VUeXBlIDogdWludDE2X3Q7CisKK3N0cnVjdCBSZXNvdXJjZUxvYWRJbmZvOworCituYW1l
c3BhY2UgQ29udGVudEV4dGVuc2lvbnMgeworY2xhc3MgQ29udGVudEV4dGVuc2lvbnNCYWNrZW5k
Oworc3RydWN0IEFjdGlvbjsKK30KKworY2xhc3MgVXNlckNvbnRlbnRQcm92aWRlciA6IHB1Ymxp
YyBSZWZDb3VudGVkPFVzZXJDb250ZW50UHJvdmlkZXI+IHsKK3B1YmxpYzoKKyAgICBXRUJDT1JF
X0VYUE9SVCBVc2VyQ29udGVudFByb3ZpZGVyKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB+VXNlckNvbnRlbnRQcm92aWRlcigpOworCisgICAgdmlydHVhbCB2b2lkIGZvckVhY2hVc2Vy
U2NyaXB0KGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChET01XcmFwcGVyV29ybGQmLCBjb25zdCBV
c2VyU2NyaXB0Jik+JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmb3JFYWNoVXNlclN0
eWxlU2hlZXQoY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFVzZXJTdHlsZVNoZWV0Jik+
JikgY29uc3QgPSAwOworCisjaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKKyAgICB2
aXJ0dWFsIGNvbnN0IFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JNYXAmIHVzZXJNZXNzYWdl
SGFuZGxlckRlc2NyaXB0b3JzKCkgY29uc3QgPSAwOworI2VuZGlmCisKKyNpZiBFTkFCTEUoQ09O
VEVOVF9FWFRFTlNJT05TKQorICAgIHZpcnR1YWwgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRF
eHRlbnNpb25zQmFja2VuZCYgdXNlckNvbnRlbnRFeHRlbnNpb25CYWNrZW5kKCkgPSAwOworI2Vu
ZGlmCisKKyAgICB2b2lkIGFkZFBhZ2UoUGFnZSYpOworICAgIHZvaWQgcmVtb3ZlUGFnZShQYWdl
Jik7CisKKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisgICAgLy8gRklYTUU6IFRo
ZXNlIGRvbid0IHJlYWxseSBiZWxvbmcgaGVyZS4gVGhleSBzaG91bGQgcHJvYmFibHkgYnVuZGxl
ZCB1cCBpbiB0aGUgQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kCisgICAgLy8gd2hpY2ggc2hvdWxk
IGFsd2F5cyBleGlzdC4KKyAgICBDb250ZW50RXh0ZW5zaW9uczo6QmxvY2tlZFN0YXR1cyBwcm9j
ZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9yTG9hZChSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJj
ZVR5cGUsIERvY3VtZW50TG9hZGVyJiBpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIpOworICAgIFZl
Y3RvcjxDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uPiBhY3Rpb25zRm9yUmVzb3VyY2VMb2FkKGNv
bnN0IFJlc291cmNlTG9hZEluZm8mLCBEb2N1bWVudExvYWRlciYgaW5pdGlhdGluZ0RvY3VtZW50
TG9hZGVyKTsKKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBp
bnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lc0luQWxsUGFnZXMoKTsK
KworcHJpdmF0ZToKKyAgICBIYXNoU2V0PFBhZ2UqPiBtX3BhZ2VzOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVXNlckNvbnRlbnRQcm92aWRlcl9oCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3Iu
aAkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyTWVzc2FnZUhh
bmRsZXJEZXNjcmlwdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDggKzU0LDggQEAgcHVibGlj
OgogICAgIH0KICAgICBXRUJDT1JFX0VYUE9SVCB+VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRv
cigpOwogCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKCk7Ci0gICAgRE9NV3JhcHBlcldv
cmxkJiB3b3JsZCgpOworICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIERPTVdyYXBwZXJXb3JsZCYgd29ybGQoKTsKIAogICAg
IENsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KICAgICB2b2lkIGlu
dmFsaWRhdGVDbGllbnQoKSB7IG1fY2xpZW50ID0gbnVsbHB0cjsgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UuY3BwCShy
ZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJNZXNzYWdlSGFuZGxl
cnNOYW1lc3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MywxNSArNTMsOSBAQCBVc2VyTWVz
c2FnZUhhbmRsZXIqIFVzZXJNZXNzYWdlSGFuZGxlcnNOCiAgICAgaWYgKCFwYWdlKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICBjb25zdCBhdXRvKiB1c2VyQ29udGVudENvbnRy
b2xsZXIgPSBwYWdlLT51c2VyQ29udGVudENvbnRyb2xsZXIoKTsKLSAgICBpZiAoIXVzZXJDb250
ZW50Q29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBjb25zdCBhdXRv
KiB1c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycyA9IHVzZXJDb250ZW50Q29udHJvbGxlci0+
dXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMoKTsKLSAgICBpZiAoIXVzZXJNZXNzYWdlSGFu
ZGxlckRlc2NyaXB0b3JzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJlZlB0cjxV
c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yPiBkZXNjcmlwdG9yID0gdXNlck1lc3NhZ2VIYW5k
bGVyRGVzY3JpcHRvcnMtPmdldChzdGQ6Om1ha2VfcGFpcihuYW1lLCAmd29ybGQpKTsKKyAgICBh
dXRvJiBkZXNjcmlwdG9ycyA9IHBhZ2UtPnVzZXJDb250ZW50UHJvdmlkZXIoKS51c2VyTWVzc2Fn
ZUhhbmRsZXJEZXNjcmlwdG9ycygpOworICAgIAorICAgIFJlZlB0cjxVc2VyTWVzc2FnZUhhbmRs
ZXJEZXNjcmlwdG9yPiBkZXNjcmlwdG9yID0gZGVzY3JpcHRvcnMuZ2V0KHN0ZDo6bWFrZV9wYWly
KG5hbWUsICZ3b3JsZCkpOwogICAgIGlmICghZGVzY3JpcHRvcikKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKQEAgLTcwLDcgKzY0LDcgQEAgVXNlck1lc3NhZ2VIYW5kbGVyKiBVc2VyTWVzc2Fn
ZUhhbmRsZXJzTgogICAgICAgICAgICAgcmV0dXJuICZoYW5kbGVyLmdldCgpOwogICAgIH0KIAot
ICAgIGF1dG8gbGl2ZUhhbmRsZXJzID0gdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMtPnZh
bHVlcygpOworICAgIGF1dG8gbGl2ZUhhbmRsZXJzID0gZGVzY3JpcHRvcnMudmFsdWVzKCk7CiAg
ICAgbV9tZXNzYWdlSGFuZGxlcnMucmVtb3ZlQWxsTWF0Y2hpbmcoW2xpdmVIYW5kbGVyc10oY29u
c3QgUmVmPFVzZXJNZXNzYWdlSGFuZGxlcj4mIGhhbmRsZXIpIHsKICAgICAgICAgZm9yIChjb25z
dCBhdXRvJiBsaXZlSGFuZGxlciA6IGxpdmVIYW5kbGVycykgewogICAgICAgICAgICAgaWYgKGxp
dmVIYW5kbGVyLmdldCgpID09ICZoYW5kbGVyLT5kZXNjcmlwdG9yKCkpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxMTYgQEAKKzIwMTYtMDMtMTQgIFNhbSBXZWluaWcgIDxzYW1Ad2Vi
a2l0Lm9yZz4KKworICAgICAgICBBZGQgYSBiYXNlVVJMIHBhcmFtZXRlciB0byBfV0tVc2VyU3R5
bGVTaGVldAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTU1MjE5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
LSBNb3ZlcyB0byBhIG1vZGVsIGZvciB1c2VyIGNvbnRlbnQgd2hlcmUgaW5zdGVhZCBvZiB1c2lu
ZyBhIFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJvbGxlcgorICAgICAgICAgIG9iamVjdCwgd2Ug
aW1wbGVtZW50IHRoZSBuZXcgV2ViQ29yZTo6VXNlckNvbnRlbnRQcm92aWRlciBpbnRlcmZhY2Ug
KG9uIHRoZSBleGlzdGluZyAKKyAgICAgICAgICBXZWJVc2VyQ29udGVudENvbnRyb2xsZXIgb2Jq
ZWN0KS4KKyAgICAgICAgLSBVc2VzIHRoaXMgdG8gbWFpbnRhaW4gbWFwcyBvZiBVc2VyU3R5bGVz
U2hlZXRzIGFuZCBVc2VyU2NyaXB0cyBhbG9uZyB3aXRoIHRoZWlyIGlkZW50aWZpZXJzLAorICAg
ICAgICAgIGZyZWVpbmcgdXAgdGhlIFVSTCwgd2hpY2ggaGFkIGJlZW4gYWN0aW5nIGFzIHRoZSBp
ZGVudGlmaWVyLCB0byBiZSB1c2VkIGFzIHRoZSBiYXNlVVJMIHdoaWNoCisgICAgICAgICAgd2Fz
IHdoYXQgaXQgd2FzIGludGVuZGVkIGZvci4KKyAgICAgICAgLSBBZGRzIGEgYmFzZVVSTCBwcm9w
ZXJ0eSB0byBfV0tVc2VyU3R5bGVTaGVldC4KKworICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgQWRkIG5ldyBmaWxlcy4KKworICAgICAgICAqIFNj
cmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAgICAgICAoaGVhZGVyc19mb3JfdHlwZSk6Cisg
ICAgICAgIEFkZCBzdXBwb3J0IGZvciBzZW5kaW5nIFdlYlVzZXJDb250ZW50Q29udHJvbGxlckRh
dGFUeXBlcy4KKworICAgICAgICAqIFNoYXJlZC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRh
VHlwZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViVXNlclNjcmlwdERhdGE6OmVu
Y29kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJTY3JpcHREYXRhOjpkZWNvZGUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJVc2VyU3R5bGVTaGVldERhdGE6OmVuY29kZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlVzZXJTdHlsZVNoZWV0RGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQv
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmg6IEFkZGVkLgorICAgICAgICBBZGQg
aGVscGVyIHR5cGVzIGZvciBzZW5kaW5nIHVzZXIgY29udGVudCBvdmVyIElQQy4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlclNjcmlwdC5jcHA6CisgICAgICAgIChBUEk6OlVzZXJT
Y3JpcHQ6OmdlbmVyYXRlVW5pcXVlVVJMKToKKyAgICAgICAgKEFQSTo6VXNlclNjcmlwdDo6VXNl
clNjcmlwdCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElVc2VyU2NyaXB0Lmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9BUElVc2VyU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChBUEk6
OlVzZXJTdHlsZVNoZWV0OjpnZW5lcmF0ZVVuaXF1ZVVSTCk6CisgICAgICAgIChBUEk6OlVzZXJT
dHlsZVNoZWV0OjpVc2VyU3R5bGVTaGVldCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElV
c2VyU3R5bGVTaGVldC5oOgorICAgICAgICBBZGQgaWRlbnRpZmllcnMgZm9yIHRyYWNraW5nIGFj
cm9zcyBwcm9jZXNzZXMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJT
dHlsZVNoZWV0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyU3R5bGVT
aGVldC5tbToKKyAgICAgICAgKC1bX1dLVXNlclN0eWxlU2hlZXQgaW5pdFdpdGhTb3VyY2U6Zm9y
TWFpbkZyYW1lT25seTpsZWdhY3lXaGl0ZWxpc3Q6bGVnYWN5QmxhY2tsaXN0OmJhc2VVUkw6dXNl
ckNvbnRlbnRXb3JsZDpdKToKKyAgICAgICAgKC1bX1dLVXNlclN0eWxlU2hlZXQgYmFzZVVSTF0p
OgorICAgICAgICBBZGQgbmV3IGluaXRpYWxpemVyIHdoaWNoIHRha2VzIGEgYmFzZVVSTCBhcyB3
ZWxsIGFzIGFuIGFjY2Vzc29yIGZvciB0aGUgYmFzZVVSTC4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjphZGRQcm9jZXNzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFkZFVzZXJTY3Jp
cHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6cmVt
b3ZlVXNlclNjcmlwdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxl
clByb3h5OjphZGRVc2VyU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250
ZW50Q29udHJvbGxlclByb3h5OjpyZW1vdmVVc2VyU3R5bGVTaGVldCk6CisgICAgICAgIFBhc3Mg
aWRlbnRpZmllcnMgYXMgd2VsbCBhcyB1c2VyIGNvbnRlbnQuCisKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
SW5qZWN0ZWRCdW5kbGU6OmFkZFVzZXJTY3JpcHQpOgorICAgICAgICAoV2ViS2l0OjpJbmplY3Rl
ZEJ1bmRsZTo6YWRkVXNlclN0eWxlU2hlZXQpOgorICAgICAgICBNb3ZlIHVzZXIgY29udGVudCBp
biB2aWEgbW92ZSBzZW1hbnRpY3MgcmF0aGVyIHRoYW4gdXNpbmcgYSB1bmlxdWVfcHRyLgorCisg
ICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlOjpyZW1vdmVVc2VyU2NyaXB0KToKKyAgICAg
ICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGU6OnJlbW92ZVVzZXJTdHlsZVNoZWV0KToKKyAgICAg
ICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGU6OnJlbW92ZVVzZXJTY3JpcHRzKToKKyAgICAgICAg
KFdlYktpdDo6SW5qZWN0ZWRCdW5kbGU6OnJlbW92ZVVzZXJTdHlsZVNoZWV0cyk6CisgICAgICAg
IChXZWJLaXQ6OkluamVjdGVkQnVuZGxlOjpyZW1vdmVBbGxVc2VyQ29udGVudCk6CisgICAgICAg
IFVwZGF0ZSBmb3IgbmV3IGZ1bmN0aW9uIHNpZ25hdHVyZXMuCisKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVy
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjp+V2ViVXNlckNv
bnRlbnRDb250cm9sbGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9s
bGVyOjphZGRVc2VyQ29udGVudFdvcmxkcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250
ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlckNvbnRlbnRXb3JsZHMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHRzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU2NyaXB0KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVBbGxVc2VyU2NyaXB0
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlclN0
eWxlU2hlZXRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpy
ZW1vdmVVc2VyU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6cmVtb3ZlQWxsVXNlclN0eWxlU2hlZXRzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0TWVzc2FnZUhhbmRsZXJzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU2NyaXB0
TWVzc2FnZUhhbmRsZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXI6OmFkZFVzZXJDb250ZW50RXh0ZW5zaW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJD
b250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlckNvbnRlbnRFeHRlbnNpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZUFsbFVzZXJDb250ZW50RXh0
ZW5zaW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRk
VXNlclNjcmlwdEludGVybmFsKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250
cm9sbGVyOjphZGRVc2VyU2NyaXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRD
b250cm9sbGVyOjpyZW1vdmVVc2VyU2NyaXB0V2l0aFVSTCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlwdEludGVybmFsKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU2NyaXB0cyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlclN0eWxl
U2hlZXRJbnRlcm5hbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxl
cjo6YWRkVXNlclN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENv
bnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNoZWV0V2l0aFVSTCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclN0eWxlU2hlZXRJbnRlcm5hbCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclN0
eWxlU2hlZXRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpy
ZW1vdmVBbGxVc2VyQ29udGVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6Zm9yRWFjaFVzZXJTY3JpcHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXI6OmZvckVhY2hVc2VyU3R5bGVTaGVldCk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5tZXNzYWdlcy5p
bjoKKyAgICAgICAgQ29udmVydCB0byBpbmhlcml0aW5nIGZyb20gVXNlckNvbnRlbnRQcm92aWRl
ciwgcmF0aGVyIHRoYW4gY29udGFpbmluZyBhIFVzZXJDb250ZW50Q29udHJvbGxlci4KKyAgICAg
ICAgVGhpcyBtZWFucyBhZGRpbmcgdGhlIHN0b3JhZ2UgZm9yIHRoZSB1c2VyIGNvbnRlbnQsIHdo
aWNoIGhhcyBiZWVuIHNpbXBsaWZpZWQgdG8gYXZvaWQgdXNpbmcKKyAgICAgICAgdW5pcXVlX3B0
cnMuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OmFkZFVzZXJTY3JpcHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjphZGRVc2VyU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlbW92
ZUFsbFVzZXJDb250ZW50KToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgdGhlIFdlYlVzZXJDb250
ZW50Q29udHJvbGxlciwgcmF0aGVyIHRoYW4gZ29pbmcgdG8gdGhlIFVzZXJDb250ZW50Q29udHJv
bGxlciwgd2hpY2gKKyAgICAgICAgbm8gbG9uZ2VyIGV4aXN0cy4KKworICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VHcm91cFByb3h5Ojp1c2VyQ29udGVudENvbnRyb2xsZXIpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5oOgorICAgICAgICBSZXR1cm4gdGhlIFdl
YlVzZXJDb250ZW50Q29udHJvbGxlciByYXRoZXIgdGhhbiBvbGQgVXNlckNvbnRlbnRDb250cm9s
bGVyLgorCiAyMDE2LTAzLTE0ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAg
ICAgICBVbmFibGUgdG8gY29tbWl0IHByZXZpZXdzIGluIE1vYmlsZSBTYWZhcmkKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CShyZXZpc2lvbiAxOTgxNDcp
CisrKyBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQkod29ya2luZyBj
b3B5KQpAQCAtMzc4LDYgKzM3OCw4IEBAIGRlZiBoZWFkZXJzX2Zvcl90eXBlKHR5cGUpOgogICAg
ICAgICAnV2ViS2l0OjpXZWJUb3VjaEV2ZW50JzogWyciV2ViRXZlbnQuaCInXSwKICAgICAgICAg
J1dlYktpdDo6V2ViV2hlZWxFdmVudCc6IFsnIldlYkV2ZW50LmgiJ10sCiAgICAgICAgICdXZWJL
aXQ6OldlYlNjcmlwdE1lc3NhZ2VIYW5kbGVySGFuZGxlJzogWyciV2ViU2NyaXB0TWVzc2FnZUhh
bmRsZXIuaCInXSwKKyAgICAgICAgJ3N0cnVjdCBXZWJLaXQ6OldlYlVzZXJTY3JpcHREYXRhJzog
WyciV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmgiJ10sCisgICAgICAgICdzdHJ1
Y3QgV2ViS2l0OjpXZWJVc2VyU3R5bGVTaGVldERhdGEnOiBbJyJXZWJVc2VyQ29udGVudENvbnRy
b2xsZXJEYXRhVHlwZXMuaCInXSwKICAgICAgICAgJ3N0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6
OnRpbWVfcG9pbnQnOiBbJzxjaHJvbm8+J10sCiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5
cGVzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJVc2VyQ29u
dGVudENvbnRyb2xsZXJEYXRhVHlwZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmgiCisKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRD
b2RlcnMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgV2ViVXNlclNjcmlwdERhdGE6
OmVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNv
ZGVyIDw8IGlkZW50aWZpZXI7CisgICAgZW5jb2RlciA8PCB3b3JsZElkZW50aWZpZXI7CisgICAg
ZW5jb2RlciA8PCB1c2VyU2NyaXB0OworfQorCitib29sIFdlYlVzZXJTY3JpcHREYXRhOjpkZWNv
ZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29kZXIsIFdlYlVzZXJTY3JpcHREYXRhJiBkYXRh
KQoreworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGF0YS5pZGVudGlmaWVyKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGF0YS53b3JsZElkZW50aWZp
ZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShkYXRh
LnVzZXJTY3JpcHQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgV2ViVXNlclN0eWxlU2hlZXREYXRhOjplbmNvZGUoSVBDOjpBcmd1bWVudEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBpZGVudGlmaWVyOworICAgIGVu
Y29kZXIgPDwgd29ybGRJZGVudGlmaWVyOworICAgIGVuY29kZXIgPDwgdXNlclN0eWxlU2hlZXQ7
Cit9CisKK2Jvb2wgV2ViVXNlclN0eWxlU2hlZXREYXRhOjpkZWNvZGUoSVBDOjpBcmd1bWVudERl
Y29kZXImIGRlY29kZXIsIFdlYlVzZXJTdHlsZVNoZWV0RGF0YSYgZGF0YSkKK3sKKyAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKGRhdGEuaWRlbnRpZmllcikpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGEud29ybGRJZGVudGlmaWVyKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGF0YS51c2VyU3R5bGVTaGVl
dCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViVXNlckNvbnRl
bnRDb250cm9sbGVyRGF0YVR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdl
YlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlc19oCisjZGVmaW5lIFdlYlVzZXJDb250ZW50
Q29udHJvbGxlckRhdGFUeXBlc19oCisKKyNpbmNsdWRlIDxXZWJDb3JlL1VzZXJTY3JpcHQuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1VzZXJTdHlsZVNoZWV0Lmg+CisKK25hbWVzcGFjZSBJUEMgewor
Y2xhc3MgQXJndW1lbnREZWNvZGVyOworY2xhc3MgQXJndW1lbnRFbmNvZGVyOworfQorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworc3RydWN0IFdlYlVzZXJTY3JpcHREYXRhIHsKKyAgICB2b2lkIGVu
Y29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0OworICAgIHN0YXRpYyBib29sIGRlY29k
ZShJUEM6OkFyZ3VtZW50RGVjb2RlciYsIFdlYlVzZXJTY3JpcHREYXRhJik7CisKKyAgICB1aW50
NjRfdCBpZGVudGlmaWVyOworICAgIHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllcjsKKyAgICBXZWJD
b3JlOjpVc2VyU2NyaXB0IHVzZXJTY3JpcHQ7Cit9OworCitzdHJ1Y3QgV2ViVXNlclN0eWxlU2hl
ZXREYXRhIHsKKyAgICB2b2lkIGVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0Owor
ICAgIHN0YXRpYyBib29sIGRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYsIFdlYlVzZXJTdHls
ZVNoZWV0RGF0YSYpOworCisgICAgdWludDY0X3QgaWRlbnRpZmllcjsKKyAgICB1aW50NjRfdCB3
b3JsZElkZW50aWZpZXI7CisgICAgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQgdXNlclN0eWxlU2hl
ZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlVzZXJDb250
ZW50Q29udHJvbGxlckRhdGFUeXBlc19oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0FQSVVzZXJTY3JpcHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQVBJVXNlclNjcmlwdC5jcHAJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlclNjcmlwdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM5LDExICszOSwyMCBAQCBzdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVJZGVudGlmaWVyKCkKIAog
V2ViQ29yZTo6VVJMIFVzZXJTY3JpcHQ6OmdlbmVyYXRlVW5pcXVlVVJMKCkKIHsKKyAgICBzdGF0
aWMgdWludDY0X3QgaWRlbnRpZmllcjsKKwogICAgIFN0cmluZ0J1aWxkZXIgdXJsU3RyaW5nQnVp
bGRlcjsKICAgICB1cmxTdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoInVzZXItc2NyaXB0OiIp
OwotICAgIHVybFN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKGdlbmVyYXRlSWRlbnRpZmllcigp
KTsKKyAgICB1cmxTdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcigrK2lkZW50aWZpZXIpOwogICAg
IHJldHVybiB7IHsgfSwgdXJsU3RyaW5nQnVpbGRlci50b1N0cmluZygpIH07CiB9CiAKK1VzZXJT
Y3JpcHQ6OlVzZXJTY3JpcHQoV2ViQ29yZTo6VXNlclNjcmlwdCB1c2VyU2NyaXB0LCBBUEk6OlVz
ZXJDb250ZW50V29ybGQmIHdvcmxkKQorICAgIDogbV9pZGVudGlmaWVyKGdlbmVyYXRlSWRlbnRp
ZmllcigpKQorICAgICwgbV91c2VyU2NyaXB0KHVzZXJTY3JpcHQpCisgICAgLCBtX3dvcmxkKHdv
cmxkKQoreworfQorCiAKIH0gLy8gbmFtZXNwYWNlIEFQSQpJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9BUElVc2VyU2NyaXB0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyU2NyaXB0LmgJKHJldmlzaW9uIDE5ODE0NykKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlclNjcmlwdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MSwxMSArNDEsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFVzZXJTY3JpcHQoV1RGTW92ZSh1c2VyU2NyaXB0KSwgd29ybGQpKTsKICAgICB9CiAKLSAgICBV
c2VyU2NyaXB0KFdlYkNvcmU6OlVzZXJTY3JpcHQgdXNlclNjcmlwdCwgQVBJOjpVc2VyQ29udGVu
dFdvcmxkJiB3b3JsZCkKLSAgICAgICAgOiBtX3VzZXJTY3JpcHQodXNlclNjcmlwdCkKLSAgICAg
ICAgLCBtX3dvcmxkKHdvcmxkKQotICAgIHsKLSAgICB9CisgICAgVXNlclNjcmlwdChXZWJDb3Jl
OjpVc2VyU2NyaXB0LCBBUEk6OlVzZXJDb250ZW50V29ybGQmKTsKKworICAgIHVpbnQ2NF90IGlk
ZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KIAogICAgIGNvbnN0IFdl
YkNvcmU6OlVzZXJTY3JpcHQmIHVzZXJTY3JpcHQoKSBjb25zdCB7IHJldHVybiBtX3VzZXJTY3Jp
cHQ7IH0KICAgICAKQEAgLTUzLDYgKzUxLDcgQEAgcHVibGljOgogICAgIGNvbnN0IFVzZXJDb250
ZW50V29ybGQmIHVzZXJDb250ZW50V29ybGQoKSBjb25zdCB7IHJldHVybiBtX3dvcmxkOyB9CiAg
ICAgCiBwcml2YXRlOgorICAgIHVpbnQ2NF90IG1faWRlbnRpZmllcjsKICAgICBXZWJDb3JlOjpV
c2VyU2NyaXB0IG1fdXNlclNjcmlwdDsKICAgICBSZWY8VXNlckNvbnRlbnRXb3JsZD4gbV93b3Js
ZDsKIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJTdHlsZVNo
ZWV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVz
ZXJTdHlsZVNoZWV0LmNwcAkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9BUElVc2VyU3R5bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEx
ICszOSwxOSBAQCBzdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVJZGVudGlmaWVyKCkKIAogV2ViQ29y
ZTo6VVJMIFVzZXJTdHlsZVNoZWV0OjpnZW5lcmF0ZVVuaXF1ZVVSTCgpCiB7CisgICAgc3RhdGlj
IHVpbnQ2NF90IGlkZW50aWZpZXI7CisKICAgICBTdHJpbmdCdWlsZGVyIHVybFN0cmluZ0J1aWxk
ZXI7CiAgICAgdXJsU3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJ1c2VyLXN0eWxlLXNoZWV0
OiIpOwotICAgIHVybFN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKGdlbmVyYXRlSWRlbnRpZmll
cigpKTsKKyAgICB1cmxTdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcigrK2lkZW50aWZpZXIpOwog
ICAgIHJldHVybiB7IHsgfSwgdXJsU3RyaW5nQnVpbGRlci50b1N0cmluZygpIH07CiB9CiAKK1Vz
ZXJTdHlsZVNoZWV0OjpVc2VyU3R5bGVTaGVldChXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCB1c2Vy
U3R5bGVTaGVldCwgQVBJOjpVc2VyQ29udGVudFdvcmxkJiB3b3JsZCkKKyAgICA6IG1faWRlbnRp
ZmllcihnZW5lcmF0ZUlkZW50aWZpZXIoKSkKKyAgICAsIG1fdXNlclN0eWxlU2hlZXQodXNlclN0
eWxlU2hlZXQpCisgICAgLCBtX3dvcmxkKHdvcmxkKQoreworfQogCiB9IC8vIG5hbWVzcGFjZSBB
UEkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlclN0eWxlU2hlZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJTdHls
ZVNoZWV0LmgJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQVBJVXNlclN0eWxlU2hlZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTEgKzQxLDkgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVc2VyU3R5bGVTaGVldChXVEZN
b3ZlKHVzZXJTdHlsZVNoZWV0KSwgd29ybGQpKTsKICAgICB9CiAKLSAgICBVc2VyU3R5bGVTaGVl
dChXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCB1c2VyU3R5bGVTaGVldCwgQVBJOjpVc2VyQ29udGVu
dFdvcmxkJiB3b3JsZCkKLSAgICAgICAgOiBtX3VzZXJTdHlsZVNoZWV0KHVzZXJTdHlsZVNoZWV0
KQotICAgICAgICAsIG1fd29ybGQod29ybGQpCi0gICAgewotICAgIH0KKyAgICBVc2VyU3R5bGVT
aGVldChXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCwgQVBJOjpVc2VyQ29udGVudFdvcmxkJik7CisK
KyAgICB1aW50NjRfdCBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9
CiAKICAgICBjb25zdCBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCYgdXNlclN0eWxlU2hlZXQoKSBj
b25zdCB7IHJldHVybiBtX3VzZXJTdHlsZVNoZWV0OyB9CiAKQEAgLTUzLDYgKzUxLDcgQEAgcHVi
bGljOgogICAgIGNvbnN0IFVzZXJDb250ZW50V29ybGQmIHVzZXJDb250ZW50V29ybGQoKSBjb25z
dCB7IHJldHVybiBtX3dvcmxkOyB9CiAKIHByaXZhdGU6CisgICAgdWludDY0X3QgbV9pZGVudGlm
aWVyOwogICAgIFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0IG1fdXNlclN0eWxlU2hlZXQ7CiAgICAg
UmVmPFVzZXJDb250ZW50V29ybGQ+IG1fd29ybGQ7CiB9OwpJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyU3R5bGVTaGVldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlclN0eWxlU2hlZXQuaAkocmV2
aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tV
c2VyU3R5bGVTaGVldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMSArMzgsMTMgQEAgV0tfQ0xB
U1NfQVZBSUxBQkxFKFdLX01BQ19UQkEsIFdLX0lPU19UQgogCiBAcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHksIGNvcHkpIE5TU3RyaW5nICpzb3VyY2U7CiAKK0Bwcm9wZXJ0eSAobm9uYXRv
bWljLCByZWFkb25seSwgY29weSkgTlNVUkwgKmJhc2VVUkw7CisKIEBwcm9wZXJ0eSAobm9uYXRv
bWljLCByZWFkb25seSwgZ2V0dGVyPWlzRm9yTWFpbkZyYW1lT25seSkgQk9PTCBmb3JNYWluRnJh
bWVPbmx5OwogCiAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291
cmNlIGZvck1haW5GcmFtZU9ubHk6KEJPT0wpZm9yTWFpbkZyYW1lT25seTsKLQogLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoU291cmNlOihOU1N0cmluZyAqKXNvdXJjZSBmb3JNYWluRnJhbWVPbmx5
OihCT09MKWZvck1haW5GcmFtZU9ubHkgbGVnYWN5V2hpdGVsaXN0OihXS19BUlJBWShOU1N0cmlu
ZyAqKSAqKWxlZ2FjeVdoaXRlbGlzdCBsZWdhY3lCbGFja2xpc3Q6KFdLX0FSUkFZKE5TU3RyaW5n
ICopICopbGVnYWN5QmxhY2tsaXN0IHVzZXJDb250ZW50V29ybGQ6KF9XS1VzZXJDb250ZW50V29y
bGQgKil1c2VyQ29udGVudFdvcmxkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU291cmNlOihO
U1N0cmluZyAqKXNvdXJjZSBmb3JNYWluRnJhbWVPbmx5OihCT09MKWZvck1haW5GcmFtZU9ubHkg
bGVnYWN5V2hpdGVsaXN0OihXS19BUlJBWShOU1N0cmluZyAqKSAqKWxlZ2FjeVdoaXRlbGlzdCBs
ZWdhY3lCbGFja2xpc3Q6KFdLX0FSUkFZKE5TU3RyaW5nICopICopbGVnYWN5QmxhY2tsaXN0IGJh
c2VVUkw6KE5TVVJMICopYmFzZVVSTCB1c2VyQ29udGVudFdvcmxkOihfV0tVc2VyQ29udGVudFdv
cmxkICopdXNlckNvbnRlbnRXb3JsZDsKIAogQGVuZAogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJTdHlsZVNoZWV0Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlclN0eWxlU2hlZXQubW0JKHJl
dmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
VXNlclN0eWxlU2hlZXQubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lt
cG9ydCAiQVBJQXJyYXkuaCIKICNpbXBvcnQgIldLTlNBcnJheS5oIgorI2ltcG9ydCAiV0tOU1VS
TEV4dHJhcy5oIgogI2ltcG9ydCAiV2ViS2l0MkluaXRpYWxpemUuaCIKICNpbXBvcnQgIl9XS1Vz
ZXJDb250ZW50V29ybGRJbnRlcm5hbC5oIgogCkBAIC02MSwxMSArNjIsMjkgQEAgLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoU291cmNlOihOU1N0cmluZwogICAgIHJldHVybiBzZWxmOwogfQogCist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGZvck1haW5G
cmFtZU9ubHk6KEJPT0wpZm9yTWFpbkZyYW1lT25seSBsZWdhY3lXaGl0ZWxpc3Q6KFdLX0FSUkFZ
KE5TU3RyaW5nICopICopbGVnYWN5V2hpdGVsaXN0IGxlZ2FjeUJsYWNrbGlzdDooV0tfQVJSQVko
TlNTdHJpbmcgKikgKilsZWdhY3lCbGFja2xpc3QgYmFzZVVSTDooTlNVUkwgKiliYXNlVVJMIHVz
ZXJDb250ZW50V29ybGQ6KF9XS1VzZXJDb250ZW50V29ybGQgKil1c2VyQ29udGVudFdvcmxkCit7
CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisK
KyAgICAvLyBGSVhNRTogSW4gdGhlIEFQSSB0ZXN0LCB3ZSBjYW4gdXNlIGdlbmVyYXRlVW5pcXVl
VVJMIGJlbG93IGJlZm9yZSB0aGUgQVBJOjpPYmplY3QgY29uc3RydWN0b3IgaGFzIGRvbmUgdGhp
cy4uLiB3aGVyZSBzaG91bGQgdGhpcyByZWFsbHkgYmU/CisgICAgV2ViS2l0OjpJbml0aWFsaXpl
V2ViS2l0MigpOworCisgICAgQVBJOjpPYmplY3Q6OmNvbnN0cnVjdEluV3JhcHBlcjxBUEk6OlVz
ZXJTdHlsZVNoZWV0PihzZWxmLCBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCB7IFdURjo6U3RyaW5n
KHNvdXJjZSksIHsgeyB9LCBXVEY6OlN0cmluZyhbYmFzZVVSTCBfd2ViX29yaWdpbmFsRGF0YUFz
V1RGU3RyaW5nXSkgfSwgQVBJOjp0b1N0cmluZ1ZlY3RvcihsZWdhY3lXaGl0ZWxpc3QpLCBBUEk6
OnRvU3RyaW5nVmVjdG9yKGxlZ2FjeUJsYWNrbGlzdCksIGZvck1haW5GcmFtZU9ubHkgPyBXZWJD
b3JlOjpJbmplY3RJblRvcEZyYW1lT25seSA6IFdlYkNvcmU6OkluamVjdEluQWxsRnJhbWVzLCBX
ZWJDb3JlOjpVc2VyU3R5bGVVc2VyTGV2ZWwgfSwgKnVzZXJDb250ZW50V29ybGQtPl91c2VyQ29u
dGVudFdvcmxkKTsKKworICAgIHJldHVybiBzZWxmOworfQorCiAtIChOU1N0cmluZyAqKXNvdXJj
ZQogewogICAgIHJldHVybiBfdXNlclN0eWxlU2hlZXQtPnVzZXJTdHlsZVNoZWV0KCkuc291cmNl
KCk7CiB9CiAKKy0gKE5TVVJMICopYmFzZVVSTAoreworICAgIHJldHVybiBfdXNlclN0eWxlU2hl
ZXQtPnVzZXJTdHlsZVNoZWV0KCkudXJsKCk7Cit9CisKIC0gKEJPT0wpaXNGb3JNYWluRnJhbWVP
bmx5CiB7CiAgICAgcmV0dXJuIF91c2VyU3R5bGVTaGVldC0+dXNlclN0eWxlU2hlZXQoKS5pbmpl
Y3RlZEZyYW1lcygpID09IFdlYkNvcmU6OkluamVjdEluVG9wRnJhbWVPbmx5OwpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxl
clByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVXNlckNv
bnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCShyZXZpc2lvbiAxOTgxNDcp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRD
b250cm9sbGVyUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5j
bHVkZSAiRGF0YVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgogI2lu
Y2x1ZGUgIldlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyLmgiCisjaW5jbHVkZSAiV2ViVXNlckNvbnRl
bnRDb250cm9sbGVyRGF0YVR5cGVzLmgiCiAjaW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1l
c3NhZ2VzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaD4KQEAg
LTgwLDE0ICs4MSwxNCBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjphZGRQ
CiAgICAgICAgIHVzZXJDb250ZW50V29ybGRzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcih3b3JsZC5r
ZXktPmlkZW50aWZpZXIoKSwgd29ybGQua2V5LT5uYW1lKCkpKTsKICAgICB3ZWJQcm9jZXNzUHJv
eHkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6
OkFkZFVzZXJDb250ZW50V29ybGRzKHVzZXJDb250ZW50V29ybGRzKSwgbV9pZGVudGlmaWVyKTsK
IAotICAgIFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0X3QsIFdlYkNvcmU6OlVzZXJTY3JpcHQ+PiB1
c2VyU2NyaXB0czsKKyAgICBWZWN0b3I8V2ViVXNlclNjcmlwdERhdGE+IHVzZXJTY3JpcHRzOwog
ICAgIGZvciAoY29uc3QgYXV0byYgdXNlclNjcmlwdCA6IG1fdXNlclNjcmlwdHMtPmVsZW1lbnRz
T2ZUeXBlPEFQSTo6VXNlclNjcmlwdD4oKSkKLSAgICAgICAgdXNlclNjcmlwdHMuYXBwZW5kKHN0
ZDo6bWFrZV9wYWlyKHVzZXJTY3JpcHQtPnVzZXJDb250ZW50V29ybGQoKS5pZGVudGlmaWVyKCks
IHVzZXJTY3JpcHQtPnVzZXJTY3JpcHQoKSkpOworICAgICAgICB1c2VyU2NyaXB0cy5hcHBlbmQo
eyB1c2VyU2NyaXB0LT5pZGVudGlmaWVyKCksIHVzZXJTY3JpcHQtPnVzZXJDb250ZW50V29ybGQo
KS5pZGVudGlmaWVyKCksIHVzZXJTY3JpcHQtPnVzZXJTY3JpcHQoKSB9KTsKICAgICB3ZWJQcm9j
ZXNzUHJveHkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRy
b2xsZXI6OkFkZFVzZXJTY3JpcHRzKHVzZXJTY3JpcHRzKSwgbV9pZGVudGlmaWVyKTsKIAotICAg
IFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0X3QsIFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0Pj4gdXNl
clN0eWxlU2hlZXRzOworICAgIFZlY3RvcjxXZWJVc2VyU3R5bGVTaGVldERhdGE+IHVzZXJTdHls
ZVNoZWV0czsKICAgICBmb3IgKGNvbnN0IGF1dG8mIHVzZXJTdHlsZVNoZWV0IDogbV91c2VyU3R5
bGVTaGVldHMtPmVsZW1lbnRzT2ZUeXBlPEFQSTo6VXNlclN0eWxlU2hlZXQ+KCkpCi0gICAgICAg
IHVzZXJTdHlsZVNoZWV0cy5hcHBlbmQoc3RkOjptYWtlX3BhaXIodXNlclN0eWxlU2hlZXQtPnVz
ZXJDb250ZW50V29ybGQoKS5pZGVudGlmaWVyKCksIHVzZXJTdHlsZVNoZWV0LT51c2VyU3R5bGVT
aGVldCgpKSk7CisgICAgICAgIHVzZXJTdHlsZVNoZWV0cy5hcHBlbmQoeyB1c2VyU3R5bGVTaGVl
dC0+aWRlbnRpZmllcigpLCB1c2VyU3R5bGVTaGVldC0+dXNlckNvbnRlbnRXb3JsZCgpLmlkZW50
aWZpZXIoKSwgdXNlclN0eWxlU2hlZXQtPnVzZXJTdHlsZVNoZWV0KCkgfSk7CiAgICAgd2ViUHJv
Y2Vzc1Byb3h5LmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250
cm9sbGVyOjpBZGRVc2VyU3R5bGVTaGVldHModXNlclN0eWxlU2hlZXRzKSwgbV9pZGVudGlmaWVy
KTsKIAogICAgIFZlY3RvcjxXZWJTY3JpcHRNZXNzYWdlSGFuZGxlckhhbmRsZT4gbWVzc2FnZUhh
bmRsZXJIYW5kbGVzOwpAQCAtMTY4LDcgKzE2OSw3IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyUHJveHk6OmFkZFUKICAgICBtX3VzZXJTY3JpcHRzLT5lbGVtZW50cygpLmFwcGVuZCgm
dXNlclNjcmlwdCk7CiAKICAgICBmb3IgKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcyA6IG1fcHJv
Y2Vzc2VzKQotICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Oldl
YlVzZXJDb250ZW50Q29udHJvbGxlcjo6QWRkVXNlclNjcmlwdHMoeyBzdGQ6Om1ha2VfcGFpcih3
b3JsZC0+aWRlbnRpZmllcigpLCB1c2VyU2NyaXB0LnVzZXJTY3JpcHQoKSkgfSksIG1faWRlbnRp
Zmllcik7CisgICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyOjpBZGRVc2VyU2NyaXB0cyh7IHsgdXNlclNjcmlwdC5pZGVu
dGlmaWVyKCksIHdvcmxkLT5pZGVudGlmaWVyKCksIHVzZXJTY3JpcHQudXNlclNjcmlwdCgpIH0g
fSksIG1faWRlbnRpZmllcik7CiB9CiAKIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJv
eHk6OnJlbW92ZVVzZXJTY3JpcHQoQVBJOjpVc2VyU2NyaXB0JiB1c2VyU2NyaXB0KQpAQCAtMTc2
LDcgKzE3Nyw3IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW8KICAg
ICBSZWY8QVBJOjpVc2VyQ29udGVudFdvcmxkPiB3b3JsZCA9IHVzZXJTY3JpcHQudXNlckNvbnRl
bnRXb3JsZCgpOwogCiAgICAgZm9yIChXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MgOiBtX3Byb2Nl
c3NlcykKLSAgICAgICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJV
c2VyQ29udGVudENvbnRyb2xsZXI6OlJlbW92ZVVzZXJTY3JpcHQod29ybGQtPmlkZW50aWZpZXIo
KSwgdXNlclNjcmlwdC51c2VyU2NyaXB0KCkudXJsKCkuc3RyaW5nKCkpLCBtX2lkZW50aWZpZXIp
OworICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJD
b250ZW50Q29udHJvbGxlcjo6UmVtb3ZlVXNlclNjcmlwdCh3b3JsZC0+aWRlbnRpZmllcigpLCB1
c2VyU2NyaXB0LmlkZW50aWZpZXIoKSksIG1faWRlbnRpZmllcik7CiAKICAgICBtX3VzZXJTY3Jp
cHRzLT5lbGVtZW50cygpLnJlbW92ZUFsbCgmdXNlclNjcmlwdCk7CiAKQEAgLTIyMyw3ICsyMjQs
NyBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjphZGRVCiAgICAgbV91c2Vy
U3R5bGVTaGVldHMtPmVsZW1lbnRzKCkuYXBwZW5kKCZ1c2VyU3R5bGVTaGVldCk7CiAKICAgICBm
b3IgKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKQotICAgICAgICBwcm9j
ZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxl
cjo6QWRkVXNlclN0eWxlU2hlZXRzKHsgc3RkOjptYWtlX3BhaXIod29ybGQtPmlkZW50aWZpZXIo
KSwgdXNlclN0eWxlU2hlZXQudXNlclN0eWxlU2hlZXQoKSkgfSksIG1faWRlbnRpZmllcik7Cisg
ICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRl
bnRDb250cm9sbGVyOjpBZGRVc2VyU3R5bGVTaGVldHMoeyB7IHVzZXJTdHlsZVNoZWV0LmlkZW50
aWZpZXIoKSwgd29ybGQtPmlkZW50aWZpZXIoKSwgdXNlclN0eWxlU2hlZXQudXNlclN0eWxlU2hl
ZXQoKSB9IH0pLCBtX2lkZW50aWZpZXIpOwogfQogCiB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJv
bGxlclByb3h5OjpyZW1vdmVVc2VyU3R5bGVTaGVldChBUEk6OlVzZXJTdHlsZVNoZWV0JiB1c2Vy
U3R5bGVTaGVldCkKQEAgLTIzMSw3ICsyMzIsNyBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJv
bGxlclByb3h5OjpyZW1vCiAgICAgUmVmPEFQSTo6VXNlckNvbnRlbnRXb3JsZD4gd29ybGQgPSB1
c2VyU3R5bGVTaGVldC51c2VyQ29udGVudFdvcmxkKCk7CiAKICAgICBmb3IgKFdlYlByb2Nlc3NQ
cm94eSogcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKQotICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6UmVtb3ZlVXNlclN0
eWxlU2hlZXQod29ybGQtPmlkZW50aWZpZXIoKSwgdXNlclN0eWxlU2hlZXQudXNlclN0eWxlU2hl
ZXQoKS51cmwoKS5zdHJpbmcoKSksIG1faWRlbnRpZmllcik7CisgICAgICAgIHByb2Nlc3MtPmNv
bm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpSZW1v
dmVVc2VyU3R5bGVTaGVldCh3b3JsZC0+aWRlbnRpZmllcigpLCB1c2VyU3R5bGVTaGVldC5pZGVu
dGlmaWVyKCkpLCBtX2lkZW50aWZpZXIpOwogCiAgICAgbV91c2VyU3R5bGVTaGVldHMtPmVsZW1l
bnRzKCkucmVtb3ZlQWxsKCZ1c2VyU3R5bGVTaGVldCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5ODE0
NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMTA0NCw2ICsxMDQ0LDggQEAKIAkJN0E3OTFFRkExQzdDRkNGMTAw
QzRDNTJCIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZU1lc3NhZ2VSZWNlaXZlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTc5MUVG
OTFDN0NGQjM3MDBDNEM1MkIgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlTWVzc2Fn
ZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJN0E3OTFFRkIxQzdDRkQwMTAwQzRDNTJCIC8qIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTc5MUVGODFDN0NGQjEwMDBDNEM1MkIgLyogV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlTWVzc2FnZXMuaCAqLzsgfTsKIAkJN0E3OTFFRkMx
QzdEMDhDNTAwQzRDNTJCIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTlDRDhDMDFDNzc5
ODQ5MDBEOUY2QzcgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCAqLzsgfTsK
KwkJN0MwNjVGMkIxQzhDRDk1RjAwQzJEOTUwIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlckRh
dGFUeXBlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QzA2NUYyOTFDOENEOTVGMDBDMkQ5NTAgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0
YVR5cGVzLmNwcCAqLzsgfTsKKwkJN0MwNjVGMkMxQzhDRDk1RjAwQzJEOTUwIC8qIFdlYlVzZXJD
b250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0MwNjVGMkExQzhDRDk1RjAwQzJEOTUwIC8qIFdlYlVzZXJDb250
ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oICovOyB9OwogCQk3QzEzNUFBODE3M0IwQkNBMDA1ODZB
RTIgLyogV0tQbHVnaW5JbmZvcm1hdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QzEzNUFBNjE3M0IwQkNBMDA1ODZBRTIgLyogV0tQbHVnaW5J
bmZvcm1hdGlvbi5jcHAgKi87IH07CiAJCTdDMTM1QUE5MTczQjBCQ0EwMDU4NkFFMiAvKiBXS1Bs
dWdpbkluZm9ybWF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QzEzNUFBNzE3M0IwQkNBMDA1ODZBRTIgLyogV0tQbHVnaW5JbmZvcm1hdGlvbi5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMTM1
QUFDMTczQjBDRkYwMDU4NkFFMiAvKiBQbHVnaW5JbmZvcm1hdGlvbk1hYy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMTM1QUFBMTczQjBDRkYwMDU4
NkFFMiAvKiBQbHVnaW5JbmZvcm1hdGlvbk1hYy5tbSAqLzsgfTsKQEAgLTMwNTcsNiArMzA1OSw4
IEBACiAJCTdBOUNEOEMwMUM3Nzk4NDkwMEQ5RjZDNyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0E5Q0Q4QzExQzc3OTg0OTAwRDlGNkM3IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0E5Q0Q4QzIx
Qzc3OUFENjAwRDlGNkM3IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5tZXNzYWdl
cy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDMDY1RjI5MUM4
Q0Q5NUYwMEMyRDk1MCAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyRGF0YVR5cGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MwNjVGMkEx
QzhDRDk1RjAwQzJEOTUwIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJE
YXRhVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MwQkI5QTgxOERDREU4
OTAwMDZDMDg2IC8qIFdlYkNvbnRlbnQtaU9TLmVudGl0bGVtZW50cyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueG1sOyBwYXRoID0gIldlYkNv
bnRlbnQtaU9TLmVudGl0bGVtZW50cyI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdD
MEJCOUE5MThEQ0RGNUEwMDA2QzA4NiAvKiBOZXR3b3JrLWlPUy5lbnRpdGxlbWVudHMgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhtbDsgcGF0
aCA9ICJOZXR3b3JrLWlPUy5lbnRpdGxlbWVudHMiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3QzEzNUFBNjE3M0IwQkNBMDA1ODZBRTIgLyogV0tQbHVnaW5JbmZvcm1hdGlvbi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS1BsdWdpbkluZm9ybWF0aW9u
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ1MTAsNiArNDUxNCw4IEBACiAJ
CQkJODM2MDM0OUQxQUNCMzRENjAwNjI2NTQ5IC8qIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlci5j
cHAgKi8sCiAJCQkJODM2MDM0OUUxQUNCMzRENjAwNjI2NTQ5IC8qIFdlYlNRTGl0ZURhdGFiYXNl
VHJhY2tlci5oICovLAogCQkJCUMwMzM3REQ3MTI3QTUxQjYwMDhGRjRGNCAvKiBXZWJUb3VjaEV2
ZW50LmNwcCAqLywKKwkJCQk3QzA2NUYyOTFDOENEOTVGMDBDMkQ5NTAgLyogV2ViVXNlckNvbnRl
bnRDb250cm9sbGVyRGF0YVR5cGVzLmNwcCAqLywKKwkJCQk3QzA2NUYyQTFDOENEOTVGMDBDMkQ5
NTAgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmggKi8sCiAJCQkJQzAzMzdE
RDAxMjdBMjk4MDAwOEZGNEY0IC8qIFdlYldoZWVsRXZlbnQuY3BwICovLAogCQkJKTsKIAkJCXBh
dGggPSBTaGFyZWQ7CkBAIC04MDA3LDYgKzgwMTMsNyBAQAogCQkJCTJEMjhBNDk3MUFGOTY1QTEw
MEYxOTBDOSAvKiBXS1ZpZXdMYXlvdXRTdHJhdGVneS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUMx
NDI3MDIxQzIzRjg0QzAwRDQxMTgzIC8qIERvd25sb2FkLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
RkE2MTc5RjEyRjBCOTlEMDAzM0UwQ0EgLyogV0tWaWV3UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJN0MwNjVGMkMxQzhDRDk1RjAwQzJEOTUwIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxl
ckRhdGFUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzVFMUFGRTkxNkIyMEI3NTAwNkNDMUYy
IC8qIFdLV2ViQXJjaGl2ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzVFMUFGRUIxNkIyMEI3RTAw
NkNDMUYyIC8qIFdLV2ViQXJjaGl2ZVJlc291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUEy
RTU2NzE4RDc3NTA4MDAzODE0QkQgLyogV0tXZWJQcm9jZXNzQnVuZGxlUGFyYW1ldGVycy5oIGlu
IEhlYWRlcnMgKi8sCkBAIC05MTY1LDYgKzkxNzIsNyBAQAogCQkJCTVDMTQyNzAxMUMyM0Y4NEMw
MEQ0MTE4MyAvKiBEb3dubG9hZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMDMzN0RERDEyN0E1
MjFDMDA4RkY0RjQgLyogV2ViUGxhdGZvcm1Ub3VjaFBvaW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTJEQTk0NEEyMTg4NEU0RjAwMEVEODZEQiAvKiBXZWJQbGF0Zm9ybVRvdWNoUG9pbnRJT1Mu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0MwNjVGMkIxQzhDRDk1RjAwQzJEOTUwIC8qIFdlYlVz
ZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMUQ1
OTI5RTE2NkUwNjAwMDBFNkJGMDIgLyogV2ViUGx1Z0luQ2xpZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUJDNTc0NEVGMTI2MzhGQjMwMDZGMEYxMiAvKiBXZWJQb3B1cEl0ZW0uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRDNCOTQ4NDYxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlBvcHVwTWVudS5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCShyZXZpc2lvbiAx
OTgxNDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVj
dGVkQnVuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUg
IldlYlByb2Nlc3MuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgi
CiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2xNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYlVzZXJD
b250ZW50Q29udHJvbGxlci5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3QuaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9FeGNlcHRpb24uaD4KICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU0xvY2suaD4KQEAgLTcwLDcgKzcxLDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1Nl
Y3VyaXR5UG9saWN5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXNzaW9uSUQuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1NldHRpbmdzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Vc2VyQ29udGVudENvbnRy
b2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VzZXJHZXN0dXJlSW5kaWNhdG9yLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9Vc2VyU2NyaXB0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Vc2VyU3R5bGVT
aGVldC5oPgpAQCAtNDA3LDM5ICs0MDcsMzkgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZTo6aXNQcm9j
ZXNzaW5nVXNlckdlcwogdm9pZCBJbmplY3RlZEJ1bmRsZTo6YWRkVXNlclNjcmlwdChXZWJQYWdl
R3JvdXBQcm94eSogcGFnZUdyb3VwLCBJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkKiBzY3JpcHRX
b3JsZCwgY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdXJsLCBBUEk6OkFycmF5
KiB3aGl0ZWxpc3QsIEFQSTo6QXJyYXkqIGJsYWNrbGlzdCwgV2ViQ29yZTo6VXNlclNjcmlwdElu
amVjdGlvblRpbWUgaW5qZWN0aW9uVGltZSwgV2ViQ29yZTo6VXNlckNvbnRlbnRJbmplY3RlZEZy
YW1lcyBpbmplY3RlZEZyYW1lcykKIHsKICAgICAvLyB1cmwgaXMgbm90IGZyb20gVVJMOjpzdHJp
bmcoKSwgaS5lLiBpdCBoYXMgbm90IGFscmVhZHkgYmVlbiBwYXJzZWQgYnkgVVJMLCBzbyB3ZSBo
YXZlIHRvIHVzZSB0aGUgcmVsYXRpdmUgVVJMIGNvbnN0cnVjdG9yIGZvciBVUkwgaW5zdGVhZCBv
ZiB0aGUgUGFyc2VkVVJMU3RyaW5nVGFnIHZlcnNpb24uCi0gICAgYXV0byB1c2VyU2NyaXB0ID0g
c3RkOjptYWtlX3VuaXF1ZTxVc2VyU2NyaXB0Pihzb3VyY2UsIFVSTChVUkwoKSwgdXJsKSwgd2hp
dGVsaXN0ID8gd2hpdGVsaXN0LT50b1N0cmluZ1ZlY3RvcigpIDogVmVjdG9yPFN0cmluZz4oKSwg
YmxhY2tsaXN0ID8gYmxhY2tsaXN0LT50b1N0cmluZ1ZlY3RvcigpIDogVmVjdG9yPFN0cmluZz4o
KSwgaW5qZWN0aW9uVGltZSwgaW5qZWN0ZWRGcmFtZXMpOworICAgIFVzZXJTY3JpcHQgdXNlclNj
cmlwdHsgc291cmNlLCBVUkwoVVJMKCksIHVybCksIHdoaXRlbGlzdCA/IHdoaXRlbGlzdC0+dG9T
dHJpbmdWZWN0b3IoKSA6IFZlY3RvcjxTdHJpbmc+KCksIGJsYWNrbGlzdCA/IGJsYWNrbGlzdC0+
dG9TdHJpbmdWZWN0b3IoKSA6IFZlY3RvcjxTdHJpbmc+KCksIGluamVjdGlvblRpbWUsIGluamVj
dGVkRnJhbWVzIH07CiAKLSAgICBwYWdlR3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigpLmFk
ZFVzZXJTY3JpcHQoc2NyaXB0V29ybGQtPmNvcmVXb3JsZCgpLCBXVEZNb3ZlKHVzZXJTY3JpcHQp
KTsKKyAgICBwYWdlR3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigpLmFkZFVzZXJTY3JpcHQo
KnNjcmlwdFdvcmxkLCBXVEZNb3ZlKHVzZXJTY3JpcHQpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1
bmRsZTo6YWRkVXNlclN0eWxlU2hlZXQoV2ViUGFnZUdyb3VwUHJveHkqIHBhZ2VHcm91cCwgSW5q
ZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCogc2NyaXB0V29ybGQsIGNvbnN0IFN0cmluZyYgc291cmNl
LCBjb25zdCBTdHJpbmcmIHVybCwgQVBJOjpBcnJheSogd2hpdGVsaXN0LCBBUEk6OkFycmF5KiBi
bGFja2xpc3QsIFdlYkNvcmU6OlVzZXJDb250ZW50SW5qZWN0ZWRGcmFtZXMgaW5qZWN0ZWRGcmFt
ZXMpCiB7CiAgICAgLy8gdXJsIGlzIG5vdCBmcm9tIFVSTDo6c3RyaW5nKCksIGkuZS4gaXQgaGFz
IG5vdCBhbHJlYWR5IGJlZW4gcGFyc2VkIGJ5IFVSTCwgc28gd2UgaGF2ZSB0byB1c2UgdGhlIHJl
bGF0aXZlIFVSTCBjb25zdHJ1Y3RvciBmb3IgVVJMIGluc3RlYWQgb2YgdGhlIFBhcnNlZFVSTFN0
cmluZ1RhZyB2ZXJzaW9uLgotICAgIGF1dG8gdXNlclN0eWxlU2hlZXQgPSBzdGQ6Om1ha2VfdW5p
cXVlPFVzZXJTdHlsZVNoZWV0Pihzb3VyY2UsIFVSTChVUkwoKSwgdXJsKSwgd2hpdGVsaXN0ID8g
d2hpdGVsaXN0LT50b1N0cmluZ1ZlY3RvcigpIDogVmVjdG9yPFN0cmluZz4oKSwgYmxhY2tsaXN0
ID8gYmxhY2tsaXN0LT50b1N0cmluZ1ZlY3RvcigpIDogVmVjdG9yPFN0cmluZz4oKSwgaW5qZWN0
ZWRGcmFtZXMsIFVzZXJTdHlsZVVzZXJMZXZlbCk7CisgICAgVXNlclN0eWxlU2hlZXQgdXNlclN0
eWxlU2hlZXR7IHNvdXJjZSwgVVJMKFVSTCgpLCB1cmwpLCB3aGl0ZWxpc3QgPyB3aGl0ZWxpc3Qt
PnRvU3RyaW5nVmVjdG9yKCkgOiBWZWN0b3I8U3RyaW5nPigpLCBibGFja2xpc3QgPyBibGFja2xp
c3QtPnRvU3RyaW5nVmVjdG9yKCkgOiBWZWN0b3I8U3RyaW5nPigpLCBpbmplY3RlZEZyYW1lcywg
VXNlclN0eWxlVXNlckxldmVsIH07CiAKLSAgICBwYWdlR3JvdXAtPnVzZXJDb250ZW50Q29udHJv
bGxlcigpLmFkZFVzZXJTdHlsZVNoZWV0KHNjcmlwdFdvcmxkLT5jb3JlV29ybGQoKSwgV1RGTW92
ZSh1c2VyU3R5bGVTaGVldCksIEluamVjdEluRXhpc3RpbmdEb2N1bWVudHMpOworICAgIHBhZ2VH
cm91cC0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkuYWRkVXNlclN0eWxlU2hlZXQoKnNjcmlwdFdv
cmxkLCBXVEZNb3ZlKHVzZXJTdHlsZVNoZWV0KSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6
OnJlbW92ZVVzZXJTY3JpcHQoV2ViUGFnZUdyb3VwUHJveHkqIHBhZ2VHcm91cCwgSW5qZWN0ZWRC
dW5kbGVTY3JpcHRXb3JsZCogc2NyaXB0V29ybGQsIGNvbnN0IFN0cmluZyYgdXJsKQogewogICAg
IC8vIHVybCBpcyBub3QgZnJvbSBVUkw6OnN0cmluZygpLCBpLmUuIGl0IGhhcyBub3QgYWxyZWFk
eSBiZWVuIHBhcnNlZCBieSBVUkwsIHNvIHdlIGhhdmUgdG8gdXNlIHRoZSByZWxhdGl2ZSBVUkwg
Y29uc3RydWN0b3IgZm9yIFVSTCBpbnN0ZWFkIG9mIHRoZSBQYXJzZWRVUkxTdHJpbmdUYWcgdmVy
c2lvbi4KLSAgICBwYWdlR3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigpLnJlbW92ZVVzZXJT
Y3JpcHQoc2NyaXB0V29ybGQtPmNvcmVXb3JsZCgpLCBVUkwoVVJMKCksIHVybCkpOworICAgIHBh
Z2VHcm91cC0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkucmVtb3ZlVXNlclNjcmlwdFdpdGhVUkwo
KnNjcmlwdFdvcmxkLCBVUkwoVVJMKCksIHVybCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxl
OjpyZW1vdmVVc2VyU3R5bGVTaGVldChXZWJQYWdlR3JvdXBQcm94eSogcGFnZUdyb3VwLCBJbmpl
Y3RlZEJ1bmRsZVNjcmlwdFdvcmxkKiBzY3JpcHRXb3JsZCwgY29uc3QgU3RyaW5nJiB1cmwpCiB7
CiAgICAgLy8gdXJsIGlzIG5vdCBmcm9tIFVSTDo6c3RyaW5nKCksIGkuZS4gaXQgaGFzIG5vdCBh
bHJlYWR5IGJlZW4gcGFyc2VkIGJ5IFVSTCwgc28gd2UgaGF2ZSB0byB1c2UgdGhlIHJlbGF0aXZl
IFVSTCBjb25zdHJ1Y3RvciBmb3IgVVJMIGluc3RlYWQgb2YgdGhlIFBhcnNlZFVSTFN0cmluZ1Rh
ZyB2ZXJzaW9uLgotICAgIHBhZ2VHcm91cC0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkucmVtb3Zl
VXNlclN0eWxlU2hlZXQoc2NyaXB0V29ybGQtPmNvcmVXb3JsZCgpLCBVUkwoVVJMKCksIHVybCkp
OworICAgIHBhZ2VHcm91cC0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkucmVtb3ZlVXNlclN0eWxl
U2hlZXRXaXRoVVJMKCpzY3JpcHRXb3JsZCwgVVJMKFVSTCgpLCB1cmwpKTsKIH0KIAogdm9pZCBJ
bmplY3RlZEJ1bmRsZTo6cmVtb3ZlVXNlclNjcmlwdHMoV2ViUGFnZUdyb3VwUHJveHkqIHBhZ2VH
cm91cCwgSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCogc2NyaXB0V29ybGQpCiB7Ci0gICAgcGFn
ZUdyb3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIoKS5yZW1vdmVVc2VyU2NyaXB0cyhzY3JpcHRX
b3JsZC0+Y29yZVdvcmxkKCkpOworICAgIHBhZ2VHcm91cC0+dXNlckNvbnRlbnRDb250cm9sbGVy
KCkucmVtb3ZlVXNlclNjcmlwdHMoKnNjcmlwdFdvcmxkKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1
bmRsZTo6cmVtb3ZlVXNlclN0eWxlU2hlZXRzKFdlYlBhZ2VHcm91cFByb3h5KiBwYWdlR3JvdXAs
IEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQqIHNjcmlwdFdvcmxkKQogewotICAgIHBhZ2VHcm91
cC0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkucmVtb3ZlVXNlclN0eWxlU2hlZXRzKHNjcmlwdFdv
cmxkLT5jb3JlV29ybGQoKSk7CisgICAgcGFnZUdyb3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIo
KS5yZW1vdmVVc2VyU3R5bGVTaGVldHMoKnNjcmlwdFdvcmxkKTsKIH0KIAogdm9pZCBJbmplY3Rl
ZEJ1bmRsZTo6cmVtb3ZlQWxsVXNlckNvbnRlbnQoV2ViUGFnZUdyb3VwUHJveHkqIHBhZ2VHcm91
cCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE5
ODE0NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNiBAQAogI2lu
Y2x1ZGUgIldlYlVzZXJDb250ZW50Q29udHJvbGxlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUv
RE9NV3JhcHBlcldvcmxkLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TY3JpcHRDb250cm9sbGVyLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbkRhdGEuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlclN0eWxl
U2hlZXQuaD4KQEAgLTgwLDcgKzc5LDYgQEAgUmVmPFdlYlVzZXJDb250ZW50Q29udHJvbGxlcj4g
V2ViVXNlckNvbgogCiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OldlYlVzZXJDb250ZW50Q29u
dHJvbGxlcih1aW50NjRfdCBpZGVudGlmaWVyKQogICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZp
ZXIpCi0gICAgLCBtX3VzZXJDb250ZW50Q29udHJvbGxlcihVc2VyQ29udGVudENvbnRyb2xsZXI6
OmNyZWF0ZSgpKQogewogICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNl
aXZlcihNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCksIG1faWRlbnRpZmllciwgKnRoaXMpOwogfQpAQCAtOTQsNyArOTIsNiBAQCBXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXI6On5XZWJVc2VyQ29udGVuCiAgICAgdXNlckNvbnRlbnRDb250cm9s
bGVycygpLnJlbW92ZShtX2lkZW50aWZpZXIpOwogfQogCi0KIHZvaWQgV2ViVXNlckNvbnRlbnRD
b250cm9sbGVyOjphZGRVc2VyQ29udGVudFdvcmxkcyhjb25zdCBWZWN0b3I8c3RkOjpwYWlyPHVp
bnQ2NF90LCBTdHJpbmc+PiYgd29ybGRzKQogewogICAgIGZvciAoYXV0byYgd29ybGQgOiB3b3Js
ZHMpIHsKQEAgLTEyNCwyMCArMTIxLDIxIEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
OjpyZW1vdmVVc2UKICAgICB9CiB9CiAKLXZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjph
ZGRVc2VyU2NyaXB0cyhjb25zdCBWZWN0b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBXZWJDb3JlOjpV
c2VyU2NyaXB0Pj4mIHVzZXJTY3JpcHRzKQordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6
OmFkZFVzZXJTY3JpcHRzKGNvbnN0IFZlY3RvcjxXZWJVc2VyU2NyaXB0RGF0YT4mIHVzZXJTY3Jp
cHRzKQogewotICAgIGZvciAoY29uc3QgYXV0byYgdXNlclNjcmlwdFdvcmxkUGFpciA6IHVzZXJT
Y3JpcHRzKSB7Ci0gICAgICAgIGF1dG8gaXQgPSB3b3JsZE1hcCgpLmZpbmQodXNlclNjcmlwdFdv
cmxkUGFpci5maXJzdCk7CisgICAgZm9yIChjb25zdCBhdXRvJiB1c2VyU2NyaXB0RGF0YSA6IHVz
ZXJTY3JpcHRzKSB7CisgICAgICAgIGF1dG8gaXQgPSB3b3JsZE1hcCgpLmZpbmQodXNlclNjcmlw
dERhdGEud29ybGRJZGVudGlmaWVyKTsKICAgICAgICAgaWYgKGl0ID09IHdvcmxkTWFwKCkuZW5k
KCkpIHsKLSAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiVHJ5aW5nIHRvIGFkZCBhIFVzZXJTY3Jp
cHQgdG8gYSBVc2VyQ29udGVudFdvcmxkIChpZD0lIiBQUkl1NjQgIikgdGhhdCBkb2VzIG5vdCBl
eGlzdC4iLCB1c2VyU2NyaXB0V29ybGRQYWlyLmZpcnN0KTsKKyAgICAgICAgICAgIFdURkxvZ0Fs
d2F5cygiVHJ5aW5nIHRvIGFkZCBhIFVzZXJTY3JpcHQgdG8gYSBVc2VyQ29udGVudFdvcmxkIChp
ZD0lIiBQUkl1NjQgIikgdGhhdCBkb2VzIG5vdCBleGlzdC4iLCB1c2VyU2NyaXB0RGF0YS53b3Js
ZElkZW50aWZpZXIpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAg
ICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+YWRkVXNlclNjcmlwdChpdC0+dmFsdWUuZmlyc3Qt
PmNvcmVXb3JsZCgpLCBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6OlVzZXJTY3JpcHQ+KHVzZXJT
Y3JpcHRXb3JsZFBhaXIuc2Vjb25kKSk7CisgICAgICAgIFVzZXJTY3JpcHQgc2NyaXB0ID0gdXNl
clNjcmlwdERhdGEudXNlclNjcmlwdDsKKyAgICAgICAgYWRkVXNlclNjcmlwdEludGVybmFsKCpp
dC0+dmFsdWUuZmlyc3QsIHVzZXJTY3JpcHREYXRhLmlkZW50aWZpZXIsIFdURk1vdmUoc2NyaXB0
KSk7CiAgICAgfQogfQogCi12b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNl
clNjcmlwdCh1aW50NjRfdCB3b3JsZElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5n
KQordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTY3JpcHQodWludDY0
X3Qgd29ybGRJZGVudGlmaWVyLCB1aW50NjRfdCB1c2VyU2NyaXB0SWRlbnRpZmllcikKIHsKICAg
ICBhdXRvIGl0ID0gd29ybGRNYXAoKS5maW5kKHdvcmxkSWRlbnRpZmllcik7CiAgICAgaWYgKGl0
ID09IHdvcmxkTWFwKCkuZW5kKCkpIHsKQEAgLTE0NSw3ICsxNDMsNyBAQCB2b2lkIFdlYlVzZXJD
b250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+cmVtb3ZlVXNlclNjcmlwdChpdC0+dmFsdWUuZmly
c3QtPmNvcmVXb3JsZCgpLCBVUkwoVVJMKCksIHVybFN0cmluZykpOworICAgIHJlbW92ZVVzZXJT
Y3JpcHRJbnRlcm5hbCgqaXQtPnZhbHVlLmZpcnN0LCB1c2VyU2NyaXB0SWRlbnRpZmllcik7CiB9
CiAKIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVBbGxVc2VyU2NyaXB0cyhj
b25zdCBWZWN0b3I8dWludDY0X3Q+JiB3b3JsZElkZW50aWZpZXJzKQpAQCAtMTU3LDI0ICsxNTUs
MjUgQEAgdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZUFsbAogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgbV91c2VyQ29udGVudENvbnRyb2xsZXIt
PnJlbW92ZVVzZXJTY3JpcHRzKGl0LT52YWx1ZS5maXJzdC0+Y29yZVdvcmxkKCkpOworICAgICAg
ICByZW1vdmVVc2VyU2NyaXB0cygqaXQtPnZhbHVlLmZpcnN0KTsKICAgICB9CiB9CiAKLXZvaWQg
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldHMoY29uc3QgVmVjdG9y
PHN0ZDo6cGFpcjx1aW50NjRfdCwgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQ+PiYgdXNlclN0eWxl
U2hlZXRzKQordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNoZWV0
cyhjb25zdCBWZWN0b3I8V2ViVXNlclN0eWxlU2hlZXREYXRhPiYgdXNlclN0eWxlU2hlZXRzKQog
ewotICAgIGZvciAoY29uc3QgYXV0byYgdXNlclN0eWxlU2hlZXRXb3JsZFBhaXIgOiB1c2VyU3R5
bGVTaGVldHMpIHsKLSAgICAgICAgYXV0byBpdCA9IHdvcmxkTWFwKCkuZmluZCh1c2VyU3R5bGVT
aGVldFdvcmxkUGFpci5maXJzdCk7CisgICAgZm9yIChjb25zdCBhdXRvJiB1c2VyU3R5bGVTaGVl
dERhdGEgOiB1c2VyU3R5bGVTaGVldHMpIHsKKyAgICAgICAgYXV0byBpdCA9IHdvcmxkTWFwKCku
ZmluZCh1c2VyU3R5bGVTaGVldERhdGEud29ybGRJZGVudGlmaWVyKTsKICAgICAgICAgaWYgKGl0
ID09IHdvcmxkTWFwKCkuZW5kKCkpIHsKLSAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiVHJ5aW5n
IHRvIGFkZCBhIFVzZXJTdHlsZVNoZWV0IHRvIGEgVXNlckNvbnRlbnRXb3JsZCAoaWQ9JSIgUFJJ
dTY0ICIpIHRoYXQgZG9lcyBub3QgZXhpc3QuIiwgdXNlclN0eWxlU2hlZXRXb3JsZFBhaXIuZmly
c3QpOworICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJUcnlpbmcgdG8gYWRkIGEgVXNlclN0eWxl
U2hlZXQgdG8gYSBVc2VyQ29udGVudFdvcmxkIChpZD0lIiBQUkl1NjQgIikgdGhhdCBkb2VzIG5v
dCBleGlzdC4iLCB1c2VyU3R5bGVTaGVldERhdGEud29ybGRJZGVudGlmaWVyKTsKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0KLSAgICAgICAgbV91c2VyQ29udGVudENvbnRyb2xs
ZXItPmFkZFVzZXJTdHlsZVNoZWV0KGl0LT52YWx1ZS5maXJzdC0+Y29yZVdvcmxkKCksIHN0ZDo6
bWFrZV91bmlxdWU8V2ViQ29yZTo6VXNlclN0eWxlU2hlZXQ+KHVzZXJTdHlsZVNoZWV0V29ybGRQ
YWlyLnNlY29uZCksIEluamVjdEluRXhpc3RpbmdEb2N1bWVudHMpOworICAgICAgICAKKyAgICAg
ICAgVXNlclN0eWxlU2hlZXQgc2hlZXQgPSB1c2VyU3R5bGVTaGVldERhdGEudXNlclN0eWxlU2hl
ZXQ7CisgICAgICAgIGFkZFVzZXJTdHlsZVNoZWV0SW50ZXJuYWwoKml0LT52YWx1ZS5maXJzdCwg
dXNlclN0eWxlU2hlZXREYXRhLmlkZW50aWZpZXIsIFdURk1vdmUoc2hlZXQpKTsKICAgICB9CiB9
CiAKLXZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU3R5bGVTaGVldCh1
aW50NjRfdCB3b3JsZElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQordm9pZCBX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNoZWV0KHVpbnQ2NF90IHdv
cmxkSWRlbnRpZmllciwgdWludDY0X3QgdXNlclN0eWxlU2hlZXRJZGVudGlmaWVyKQogewogICAg
IGF1dG8gaXQgPSB3b3JsZE1hcCgpLmZpbmQod29ybGRJZGVudGlmaWVyKTsKICAgICBpZiAoaXQg
PT0gd29ybGRNYXAoKS5lbmQoKSkgewpAQCAtMTgyLDcgKzE4MSw3IEBAIHZvaWQgV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2UKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5yZW1vdmVVc2VyU3R5bGVTaGVldChpdC0+dmFsdWUu
Zmlyc3QtPmNvcmVXb3JsZCgpLCBVUkwoVVJMKCksIHVybFN0cmluZykpOworICAgIHJlbW92ZVVz
ZXJTdHlsZVNoZWV0SW50ZXJuYWwoKml0LT52YWx1ZS5maXJzdCwgdXNlclN0eWxlU2hlZXRJZGVu
dGlmaWVyKTsKIH0KIAogdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZUFsbFVz
ZXJTdHlsZVNoZWV0cyhjb25zdCBWZWN0b3I8dWludDY0X3Q+JiB3b3JsZElkZW50aWZpZXJzKQpA
QCAtMTk0LDcgKzE5Myw3IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVB
bGwKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIG1fdXNlckNvbnRl
bnRDb250cm9sbGVyLT5yZW1vdmVVc2VyU3R5bGVTaGVldHMoaXQtPnZhbHVlLmZpcnN0LT5jb3Jl
V29ybGQoKSk7CisgICAgICAgIHJlbW92ZVVzZXJTdHlsZVNoZWV0cygqaXQtPnZhbHVlLmZpcnN0
KTsKICAgICB9CiB9CiAKQEAgLTI1Myw3ICsyNTIsOSBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6YWRkVXNlclNjCiAgICAgICAgIFJlZlB0cjxXZWJVc2VyTWVzc2FnZUhhbmRsZXJE
ZXNjcmlwdG9yUHJveHk+IGRlc2NyaXB0b3IgPSBXZWJVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlw
dG9yUHJveHk6OmNyZWF0ZSh0aGlzLCBoYW5kbGUubmFtZSwgaGFuZGxlLmlkZW50aWZpZXIpOwog
CiAgICAgICAgIG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMuYWRkKGRlc2NyaXB0b3It
PmlkZW50aWZpZXIoKSwgZGVzY3JpcHRvcik7Ci0gICAgICAgIG1fdXNlckNvbnRlbnRDb250cm9s
bGVyLT5hZGRVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yKGRlc2NyaXB0b3ItPmRlc2NyaXB0
b3IoKSk7CisKKyAgICAgICAgYXV0byYgY29yZURlc2NyaXB0b3IgPSBkZXNjcmlwdG9yLT5kZXNj
cmlwdG9yKCk7CisgICAgICAgIG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnNNYXAuYWRk
KHN0ZDo6bWFrZV9wYWlyKGNvcmVEZXNjcmlwdG9yLm5hbWUoKSwgJmNvcmVEZXNjcmlwdG9yLndv
cmxkKCkpLCAmY29yZURlc2NyaXB0b3IpOwogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFN
KHNjcmlwdE1lc3NhZ2VIYW5kbGVycyk7CkBAIC0yNjUsOCArMjY2LDEwIEBAIHZvaWQgV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2UKICNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hB
TkRMRVJTKQogICAgIGF1dG8gaXQgPSBtX3VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzLmZp
bmQoaWRlbnRpZmllcik7CiAgICAgQVNTRVJUKGl0ICE9IG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVz
Y3JpcHRvcnMuZW5kKCkpOwotICAgIAotICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5yZW1v
dmVVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yKGl0LT52YWx1ZS0+ZGVzY3JpcHRvcigpKTsK
KworICAgIGF1dG8mIGNvcmVEZXNjcmlwdG9yID0gaXQtPnZhbHVlLT5kZXNjcmlwdG9yKCk7Cisg
ICAgbV91c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yc01hcC5yZW1vdmUoc3RkOjptYWtlX3Bh
aXIoY29yZURlc2NyaXB0b3IubmFtZSgpLCAmY29yZURlc2NyaXB0b3Iud29ybGQoKSkpOworCiAg
ICAgbV91c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycy5yZW1vdmUoaXQpOwogI2Vsc2UKICAg
ICBVTlVTRURfUEFSQU0oaWRlbnRpZmllcik7CkBAIC0yNzksMTkgKzI4MiwxNjggQEAgdm9pZCBX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJDbwogICAgIGZvciAoY29uc3QgYXV0byYg
dXNlckNvbnRlbnRFeHRlbnNpb24gOiB1c2VyQ29udGVudEV4dGVuc2lvbnMpIHsKICAgICAgICAg
V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSBjb250ZW50RXh0ZW5zaW9uRGF0YSA9IHVz
ZXJDb250ZW50RXh0ZW5zaW9uLnNlY29uZDsKICAgICAgICAgUmVmUHRyPFdlYkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbj4gY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uID0gV2ViQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uOjpjcmVhdGUoV1RGTW92ZShjb250ZW50RXh0ZW5zaW9uRGF0YSkpOwotICAg
ICAgICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+YWRkVXNlckNvbnRlbnRFeHRlbnNpb24odXNl
ckNvbnRlbnRFeHRlbnNpb24uZmlyc3QsIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbik7CisKKyAg
ICAgICAgbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZC5hZGRDb250ZW50RXh0ZW5zaW9uKHVzZXJD
b250ZW50RXh0ZW5zaW9uLmZpcnN0LCBXVEZNb3ZlKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbikp
OwogICAgIH0KIH0KIAogdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJD
b250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBtX3VzZXJDb250ZW50
Q29udHJvbGxlci0+cmVtb3ZlVXNlckNvbnRlbnRFeHRlbnNpb24obmFtZSk7CisgICAgbV9jb250
ZW50RXh0ZW5zaW9uQmFja2VuZC5yZW1vdmVDb250ZW50RXh0ZW5zaW9uKG5hbWUpOwogfQogCiB2
b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxsVXNlckNvbnRlbnRFeHRlbnNp
b25zKCkKIHsKLSAgICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+cmVtb3ZlQWxsVXNlckNvbnRl
bnRFeHRlbnNpb25zKCk7CisgICAgbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZC5yZW1vdmVBbGxD
b250ZW50RXh0ZW5zaW9ucygpOwogfQogI2VuZGlmCiAKKworCit2b2lkIFdlYlVzZXJDb250ZW50
Q29udHJvbGxlcjo6YWRkVXNlclNjcmlwdEludGVybmFsKEluamVjdGVkQnVuZGxlU2NyaXB0V29y
bGQmIHdvcmxkLCB1aW50NjRfdCB1c2VyU2NyaXB0SWRlbnRpZmllciwgVXNlclNjcmlwdCYmIHVz
ZXJTY3JpcHQpCit7CisgICAgYXV0byYgc2NyaXB0c0luV29ybGQgPSBtX3VzZXJTY3JpcHRzLmVu
c3VyZSgmd29ybGQsIFtdIHsgcmV0dXJuIFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0X3QsIFdlYkNv
cmU6OlVzZXJTY3JpcHQ+PigpOyB9KS5pdGVyYXRvci0+dmFsdWU7CisgICAgc2NyaXB0c0luV29y
bGQuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHVzZXJTY3JpcHRJZGVudGlmaWVyLCBXVEZNb3ZlKHVz
ZXJTY3JpcHQpKSk7Cit9CisKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2Vy
U2NyaXB0KEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQmIHdvcmxkLCBVc2VyU2NyaXB0JiYgdXNl
clNjcmlwdCkKK3sKKyAgICBhZGRVc2VyU2NyaXB0SW50ZXJuYWwod29ybGQsIDAsIFdURk1vdmUo
dXNlclNjcmlwdCkpOworfQorCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3Zl
VXNlclNjcmlwdFdpdGhVUkwoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYgd29ybGQsIGNvbnN0
IFVSTCYgdXJsKQoreworICAgIGF1dG8gaXQgPSBtX3VzZXJTY3JpcHRzLmZpbmQoJndvcmxkKTsK
KyAgICBpZiAoaXQgPT0gbV91c2VyU2NyaXB0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgYXV0byYgc2NyaXB0cyA9IGl0LT52YWx1ZTsKKyAgICBmb3IgKGludCBpID0gc2NyaXB0cy5z
aXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBpZiAoc2NyaXB0c1tpXS5zZWNvbmQu
dXJsKCkgPT0gdXJsKQorICAgICAgICAgICAgc2NyaXB0cy5yZW1vdmUoaSk7CisgICAgfQorCisg
ICAgaWYgKHNjcmlwdHMuaXNFbXB0eSgpKQorICAgICAgICBtX3VzZXJTY3JpcHRzLnJlbW92ZShp
dCk7Cit9CisKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU2NyaXB0
SW50ZXJuYWwoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYgd29ybGQsIHVpbnQ2NF90IHVzZXJT
Y3JpcHRJZGVudGlmaWVyKQoreworICAgIGF1dG8gaXQgPSBtX3VzZXJTY3JpcHRzLmZpbmQoJndv
cmxkKTsKKyAgICBpZiAoaXQgPT0gbV91c2VyU2NyaXB0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgYXV0byYgc2NyaXB0cyA9IGl0LT52YWx1ZTsKKyAgICBmb3IgKGludCBpID0gc2Ny
aXB0cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBpZiAoc2NyaXB0c1tpXS5m
aXJzdCA9PSB1c2VyU2NyaXB0SWRlbnRpZmllcikKKyAgICAgICAgICAgIHNjcmlwdHMucmVtb3Zl
KGkpOworICAgIH0KKworICAgIGlmIChzY3JpcHRzLmlzRW1wdHkoKSkKKyAgICAgICAgbV91c2Vy
U2NyaXB0cy5yZW1vdmUoaXQpOworfQorCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6
cmVtb3ZlVXNlclNjcmlwdHMoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYgd29ybGQpCit7Cisg
ICAgbV91c2VyU2NyaXB0cy5yZW1vdmUoJndvcmxkKTsKK30KKwordm9pZCBXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNoZWV0SW50ZXJuYWwoSW5qZWN0ZWRCdW5kbGVTY3Jp
cHRXb3JsZCYgd29ybGQsIHVpbnQ2NF90IHVzZXJTdHlsZVNoZWV0SWRlbnRpZmllciwgVXNlclN0
eWxlU2hlZXQmJiB1c2VyU3R5bGVTaGVldCkKK3sKKyAgICBhdXRvJiBzdHlsZVNoZWV0c0luV29y
bGQgPSBtX3VzZXJTdHlsZVNoZWV0cy5lbnN1cmUoJndvcmxkLCBbXSB7IHJldHVybiBWZWN0b3I8
c3RkOjpwYWlyPHVpbnQ2NF90LCBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldD4+KCk7IH0pLml0ZXJh
dG9yLT52YWx1ZTsKKyAgICBzdHlsZVNoZWV0c0luV29ybGQuYXBwZW5kKHN0ZDo6bWFrZV9wYWly
KHVzZXJTdHlsZVNoZWV0SWRlbnRpZmllciwgV1RGTW92ZSh1c2VyU3R5bGVTaGVldCkpKTsKKwor
ICAgIGludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZUluQWxsRnJhbWVzSW5BbGxQYWdl
cygpOworfQorCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlclN0eWxlU2hl
ZXQoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYgd29ybGQsIFVzZXJTdHlsZVNoZWV0JiYgdXNl
clN0eWxlU2hlZXQpCit7CisgICAgYWRkVXNlclN0eWxlU2hlZXRJbnRlcm5hbCh3b3JsZCwgMCwg
V1RGTW92ZSh1c2VyU3R5bGVTaGVldCkpOworfQorCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJv
bGxlcjo6cmVtb3ZlVXNlclN0eWxlU2hlZXRXaXRoVVJMKEluamVjdGVkQnVuZGxlU2NyaXB0V29y
bGQmIHdvcmxkLCBjb25zdCBVUkwmIHVybCkKK3sKKyAgICBhdXRvIGl0ID0gbV91c2VyU3R5bGVT
aGVldHMuZmluZCgmd29ybGQpOworICAgIGlmIChpdCA9PSBtX3VzZXJTdHlsZVNoZWV0cy5lbmQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byYgc3R5bGVzaGVldHMgPSBpdC0+dmFsdWU7
CisKKyAgICBib29sIHNoZWV0c0NoYW5nZWQgPSBmYWxzZTsKKyAgICBmb3IgKGludCBpID0gc3R5
bGVzaGVldHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgaWYgKHN0eWxlc2hl
ZXRzW2ldLnNlY29uZC51cmwoKSA9PSB1cmwpIHsKKyAgICAgICAgICAgIHN0eWxlc2hlZXRzLnJl
bW92ZShpKTsKKyAgICAgICAgICAgIHNoZWV0c0NoYW5nZWQgPSB0cnVlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKCFzaGVldHNDaGFuZ2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoc3R5bGVzaGVldHMuaXNFbXB0eSgpKQorICAgICAgICBtX3VzZXJTdHlsZVNoZWV0cy5yZW1v
dmUoaXQpOworCisgICAgaW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlSW5BbGxGcmFt
ZXNJbkFsbFBhZ2VzKCk7Cit9CisKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1v
dmVVc2VyU3R5bGVTaGVldEludGVybmFsKEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQmIHdvcmxk
LCB1aW50NjRfdCB1c2VyU3R5bGVTaGVldElkZW50aWZpZXIpCit7CisgICAgYXV0byBpdCA9IG1f
dXNlclN0eWxlU2hlZXRzLmZpbmQoJndvcmxkKTsKKyAgICBpZiAoaXQgPT0gbV91c2VyU3R5bGVT
aGVldHMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8mIHN0eWxlc2hlZXRzID0g
aXQtPnZhbHVlOworCisgICAgYm9vbCBzaGVldHNDaGFuZ2VkID0gZmFsc2U7CisgICAgZm9yIChp
bnQgaSA9IHN0eWxlc2hlZXRzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGlm
IChzdHlsZXNoZWV0c1tpXS5maXJzdCA9PSB1c2VyU3R5bGVTaGVldElkZW50aWZpZXIpIHsKKyAg
ICAgICAgICAgIHN0eWxlc2hlZXRzLnJlbW92ZShpKTsKKyAgICAgICAgICAgIHNoZWV0c0NoYW5n
ZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFzaGVldHNDaGFuZ2VkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoc3R5bGVzaGVldHMuaXNFbXB0eSgpKQorICAgICAg
ICBtX3VzZXJTdHlsZVNoZWV0cy5yZW1vdmUoaXQpOworCisgICAgaW52YWxpZGF0ZUluamVjdGVk
U3R5bGVTaGVldENhY2hlSW5BbGxGcmFtZXNJbkFsbFBhZ2VzKCk7Cit9CisKK3ZvaWQgV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU3R5bGVTaGVldHMoSW5qZWN0ZWRCdW5kbGVT
Y3JpcHRXb3JsZCYgd29ybGQpCit7CisgICAgaWYgKCFtX3VzZXJTdHlsZVNoZWV0cy5yZW1vdmUo
JndvcmxkKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW52YWxpZGF0ZUluamVjdGVkU3R5bGVT
aGVldENhY2hlSW5BbGxGcmFtZXNJbkFsbFBhZ2VzKCk7Cit9CisKK3ZvaWQgV2ViVXNlckNvbnRl
bnRDb250cm9sbGVyOjpyZW1vdmVBbGxVc2VyQ29udGVudCgpCit7CisgICAgbV91c2VyU2NyaXB0
cy5jbGVhcigpOworCisgICAgaWYgKCFtX3VzZXJTdHlsZVNoZWV0cy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgbV91c2VyU3R5bGVTaGVldHMuY2xlYXIoKTsKKyAgICAgICAgaW52YWxpZGF0ZUluamVj
dGVkU3R5bGVTaGVldENhY2hlSW5BbGxGcmFtZXNJbkFsbFBhZ2VzKCk7CisgICAgfQorfQorCit2
b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6Zm9yRWFjaFVzZXJTY3JpcHQoY29uc3Qgc3Rk
OjpmdW5jdGlvbjx2b2lkKFdlYkNvcmU6OkRPTVdyYXBwZXJXb3JsZCYsIGNvbnN0IFdlYkNvcmU6
OlVzZXJTY3JpcHQmKT4mIGZ1bmN0b3IpIGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBhdXRvJiB3
b3JsZEFuZFVzZXJTY3JpcHRWZWN0b3IgOiBtX3VzZXJTY3JpcHRzKSB7CisgICAgICAgIGF1dG8m
IHdvcmxkID0gd29ybGRBbmRVc2VyU2NyaXB0VmVjdG9yLmtleS0+Y29yZVdvcmxkKCk7CisgICAg
ICAgIGZvciAoY29uc3QgYXV0byYgaWRlbnRpZmllclVzZXJTY3JpcHRQYWlyIDogd29ybGRBbmRV
c2VyU2NyaXB0VmVjdG9yLnZhbHVlKQorICAgICAgICAgICAgZnVuY3Rvcih3b3JsZCwgaWRlbnRp
ZmllclVzZXJTY3JpcHRQYWlyLnNlY29uZCk7CisgICAgfQorfQorCit2b2lkIFdlYlVzZXJDb250
ZW50Q29udHJvbGxlcjo6Zm9yRWFjaFVzZXJTdHlsZVNoZWV0KGNvbnN0IHN0ZDo6ZnVuY3Rpb248
dm9pZChjb25zdCBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCYpPiYgZnVuY3RvcikgY29uc3QKK3sK
KyAgICBmb3IgKGF1dG8mIHN0eWxlU2hlZXRWZWN0b3IgOiBtX3VzZXJTdHlsZVNoZWV0cy52YWx1
ZXMoKSkgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGlkZW50aWZpZXJVc2VyU3R5bGVTaGVl
dFBhaXIgOiBzdHlsZVNoZWV0VmVjdG9yKQorICAgICAgICAgICAgZnVuY3RvcihpZGVudGlmaWVy
VXNlclN0eWxlU2hlZXRQYWlyLnNlY29uZCk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuaAkocmV2aXNpb24gMTk4
MTQ3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29u
dGVudENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOSArMjgsMTkgQEAKIAogI2lu
Y2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgogI2luY2x1ZGUgIldlYlNjcmlwdE1lc3NhZ2VIYW5k
bGVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuaD4KKyNpbmNs
dWRlICJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL1VzZXJDb250ZW50UHJvdmlkZXIuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05T
KQorI2luY2x1ZGUgPFdlYkNvcmUvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmg+CisjZW5kaWYK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKK2Ns
YXNzIENvbXBpbGVkQ29udGVudEV4dGVuc2lvbjsKK30KK30KIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKQEAgLTM4LDMwICs0OCw0NCBAQCBjbGFzcyBJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkOwog
Y2xhc3MgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YTsKIGNsYXNzIFdlYlVzZXJNZXNz
YWdlSGFuZGxlckRlc2NyaXB0b3JQcm94eTsKIAotY2xhc3MgV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViVXNlckNvbnRlbnRDb250cm9sbGVyPiwg
cHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciAgeworY2xhc3MgV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyIGZpbmFsIDogcHVibGljIFdlYkNvcmU6OlVzZXJDb250ZW50UHJvdmlkZXIsIHByaXZh
dGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8V2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyPiBnZXRPckNyZWF0ZSh1aW50NjRfdCBpZGVudGlmaWVyKTsKICAg
ICB2aXJ0dWFsIH5XZWJVc2VyQ29udGVudENvbnRyb2xsZXIoKTsKIAotICAgIFdlYkNvcmU6OlVz
ZXJDb250ZW50Q29udHJvbGxlciYgdXNlckNvbnRlbnRDb250cm9sbGVyKCkgeyByZXR1cm4gbV91
c2VyQ29udGVudENvbnRyb2xsZXI7IH0KLQogICAgIHVpbnQ2NF90IGlkZW50aWZpZXIoKSB7IHJl
dHVybiBtX2lkZW50aWZpZXI7IH0gCiAKKyAgICB2b2lkIGFkZFVzZXJTY3JpcHQoSW5qZWN0ZWRC
dW5kbGVTY3JpcHRXb3JsZCYsIFdlYkNvcmU6OlVzZXJTY3JpcHQmJik7CisgICAgdm9pZCByZW1v
dmVVc2VyU2NyaXB0V2l0aFVSTChJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiwgY29uc3QgV2Vi
Q29yZTo6VVJMJik7CisgICAgdm9pZCByZW1vdmVVc2VyU2NyaXB0cyhJbmplY3RlZEJ1bmRsZVNj
cmlwdFdvcmxkJik7CisgICAgdm9pZCBhZGRVc2VyU3R5bGVTaGVldChJbmplY3RlZEJ1bmRsZVNj
cmlwdFdvcmxkJiwgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQmJik7CisgICAgdm9pZCByZW1vdmVV
c2VyU3R5bGVTaGVldFdpdGhVUkwoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYsIGNvbnN0IFdl
YkNvcmU6OlVSTCYpOworICAgIHZvaWQgcmVtb3ZlVXNlclN0eWxlU2hlZXRzKEluamVjdGVkQnVu
ZGxlU2NyaXB0V29ybGQmKTsKKyAgICB2b2lkIHJlbW92ZUFsbFVzZXJDb250ZW50KCk7CisKIHBy
aXZhdGU6CiAgICAgZXhwbGljaXQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyKHVpbnQ2NF90IGlk
ZW50aWZpZXIpOwogCisgICAgLy8gV2ViQ29yZTo6VXNlckNvbnRlbnRQcm92aWRlcgorICAgIHZv
aWQgZm9yRWFjaFVzZXJTY3JpcHQoY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkKFdlYkNvcmU6OkRP
TVdyYXBwZXJXb3JsZCYsIGNvbnN0IFdlYkNvcmU6OlVzZXJTY3JpcHQmKT4mKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2b2lkIGZvckVhY2hVc2VyU3R5bGVTaGVldChjb25zdCBzdGQ6OmZ1bmN0aW9u
PHZvaWQoY29uc3QgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQmKT4mKSBjb25zdCBvdmVycmlkZTsK
KyAgICBjb25zdCBXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yTWFwJiB1c2Vy
TWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdXNl
ck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnNNYXA7IH0KKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRF
TlNJT05TKQorICAgIFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9u
c0JhY2tlbmQmIHVzZXJDb250ZW50RXh0ZW5zaW9uQmFja2VuZCgpIG92ZXJyaWRlIHsgcmV0dXJu
IG1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQ7IH0KKyNlbmRpZgorCiAgICAgLy8gSVBDOjpNZXNz
YWdlUmVjZWl2ZXIuCiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBJUEM6Ok1lc3NhZ2VEZWNvZGVyJikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGFkZFVzZXJDb250
ZW50V29ybGRzKGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0X3QsIFN0cmluZz4+Jik7CiAg
ICAgdm9pZCByZW1vdmVVc2VyQ29udGVudFdvcmxkcyhjb25zdCBWZWN0b3I8dWludDY0X3Q+Jik7
CiAKLSAgICB2b2lkIGFkZFVzZXJTY3JpcHRzKGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0
X3QsIFdlYkNvcmU6OlVzZXJTY3JpcHQ+PiYpOwotICAgIHZvaWQgcmVtb3ZlVXNlclNjcmlwdCh1
aW50NjRfdCB3b3JsZElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKTsKKyAgICB2
b2lkIGFkZFVzZXJTY3JpcHRzKGNvbnN0IFZlY3RvcjxXZWJVc2VyU2NyaXB0RGF0YT4mKTsKKyAg
ICB2b2lkIHJlbW92ZVVzZXJTY3JpcHQodWludDY0X3Qgd29ybGRJZGVudGlmaWVyLCB1aW50NjRf
dCB1c2VyU2NyaXB0SWRlbnRpZmllcik7CiAgICAgdm9pZCByZW1vdmVBbGxVc2VyU2NyaXB0cyhj
b25zdCBWZWN0b3I8dWludDY0X3Q+Jik7CiAKLSAgICB2b2lkIGFkZFVzZXJTdHlsZVNoZWV0cyhj
b25zdCBWZWN0b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldD4+
Jik7Ci0gICAgdm9pZCByZW1vdmVVc2VyU3R5bGVTaGVldCh1aW50NjRfdCB3b3JsZElkZW50aWZp
ZXIsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKTsKKyAgICB2b2lkIGFkZFVzZXJTdHlsZVNoZWV0
cyhjb25zdCBWZWN0b3I8V2ViVXNlclN0eWxlU2hlZXREYXRhPiYpOworICAgIHZvaWQgcmVtb3Zl
VXNlclN0eWxlU2hlZXQodWludDY0X3Qgd29ybGRJZGVudGlmaWVyLCB1aW50NjRfdCB1c2VyU2Ny
aXB0SWRlbnRpZmllcik7CiAgICAgdm9pZCByZW1vdmVBbGxVc2VyU3R5bGVTaGVldHMoY29uc3Qg
VmVjdG9yPHVpbnQ2NF90PiYpOwogCiAgICAgdm9pZCBhZGRVc2VyU2NyaXB0TWVzc2FnZUhhbmRs
ZXJzKGNvbnN0IFZlY3RvcjxXZWJTY3JpcHRNZXNzYWdlSGFuZGxlckhhbmRsZT4mKTsKQEAgLTcz
LDExICs5NywyNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVtb3ZlQWxsVXNlckNvbnRlbnRFeHRl
bnNpb25zKCk7CiAjZW5kaWYKIAorCisgICAgdm9pZCBhZGRVc2VyU2NyaXB0SW50ZXJuYWwoSW5q
ZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYsIHVpbnQ2NF90IHVzZXJTY3JpcHRJZGVudGlmaWVyLCBX
ZWJDb3JlOjpVc2VyU2NyaXB0JiYpOworICAgIHZvaWQgcmVtb3ZlVXNlclNjcmlwdEludGVybmFs
KEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQmLCB1aW50NjRfdCB1c2VyU2NyaXB0SWRlbnRpZmll
cik7CisgICAgdm9pZCBhZGRVc2VyU3R5bGVTaGVldEludGVybmFsKEluamVjdGVkQnVuZGxlU2Ny
aXB0V29ybGQmLCB1aW50NjRfdCB1c2VyU3R5bGVTaGVldElkZW50aWZpZXIsIFdlYkNvcmU6OlVz
ZXJTdHlsZVNoZWV0JiYpOworICAgIHZvaWQgcmVtb3ZlVXNlclN0eWxlU2hlZXRJbnRlcm5hbChJ
bmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiwgdWludDY0X3QgdXNlclN0eWxlU2hlZXRJZGVudGlm
aWVyKTsKKworCiAgICAgdWludDY0X3QgbV9pZGVudGlmaWVyOwotICAgIFJlZjxXZWJDb3JlOjpV
c2VyQ29udGVudENvbnRyb2xsZXI+IG1fdXNlckNvbnRlbnRDb250cm9sbGVyOwotI2lmIEVOQUJM
RShVU0VSX01FU1NBR0VfSEFORExFUlMpCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdl
YlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JQcm94eT4+IG1fdXNlck1lc3NhZ2VIYW5kbGVy
RGVzY3JpcHRvcnM7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPEluamVjdGVkQnVuZGxl
U2NyaXB0V29ybGQ+LCBWZWN0b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBXZWJDb3JlOjpVc2VyU2Ny
aXB0Pj4+IFdvcmxkVG9Vc2VyU2NyaXB0TWFwOworICAgIFdvcmxkVG9Vc2VyU2NyaXB0TWFwIG1f
dXNlclNjcmlwdHM7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPEluamVjdGVkQnVuZGxl
U2NyaXB0V29ybGQ+LCBWZWN0b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBXZWJDb3JlOjpVc2VyU3R5
bGVTaGVldD4+PiBXb3JsZFRvVXNlclN0eWxlU2hlZXRNYXA7CisgICAgV29ybGRUb1VzZXJTdHls
ZVNoZWV0TWFwIG1fdXNlclN0eWxlU2hlZXRzOworCisgICAgV2ViQ29yZTo6VXNlck1lc3NhZ2VI
YW5kbGVyRGVzY3JpcHRvck1hcCBtX3VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzTWFwOwor
I2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisgICAgV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5k
OwogI2VuZGlmCisKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIubWVz
c2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29u
dGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIubWVzc2FnZXMuaW4JKHJldmlzaW9uIDE5ODE0
NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRl
bnRDb250cm9sbGVyLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMiArMjcsMTIg
QEAgbWVzc2FnZXMgLT4gV2ViVXNlckNvbnRlbnRDb250cm9sbGVyIHsKICAgICBBZGRVc2VyQ29u
dGVudFdvcmxkcyhWZWN0b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBTdHJpbmc+PiB3b3JsZHMpOwog
ICAgIFJlbW92ZVVzZXJDb250ZW50V29ybGRzKFZlY3Rvcjx1aW50NjRfdD4gd29ybGRJZGVudGlm
aWVycyk7CiAKLSAgICBBZGRVc2VyU2NyaXB0cyhWZWN0b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBX
ZWJDb3JlOjpVc2VyU2NyaXB0Pj4gdXNlclNjcmlwdHMpOwotICAgIFJlbW92ZVVzZXJTY3JpcHQo
dWludDY0X3Qgd29ybGRJZGVudGlmaWVyLCBTdHJpbmcgdXJsKTsKKyAgICBBZGRVc2VyU2NyaXB0
cyhWZWN0b3I8c3RydWN0IFdlYktpdDo6V2ViVXNlclNjcmlwdERhdGE+IHVzZXJTY3JpcHRzKTsK
KyAgICBSZW1vdmVVc2VyU2NyaXB0KHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllciwgdWludDY0X3Qg
aWRlbnRpZmllcik7CiAgICAgUmVtb3ZlQWxsVXNlclNjcmlwdHMoVmVjdG9yPHVpbnQ2NF90PiB3
b3JsZElkZW50aWZpZXJzKTsKIAotICAgIEFkZFVzZXJTdHlsZVNoZWV0cyhWZWN0b3I8c3RkOjpw
YWlyPHVpbnQ2NF90LCBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldD4+IHVzZXJTdHlsZVNoZWV0cyk7
Ci0gICAgUmVtb3ZlVXNlclN0eWxlU2hlZXQodWludDY0X3Qgd29ybGRJZGVudGlmaWVyLCBTdHJp
bmcgdXJsKTsKKyAgICBBZGRVc2VyU3R5bGVTaGVldHMoVmVjdG9yPHN0cnVjdCBXZWJLaXQ6Oldl
YlVzZXJTdHlsZVNoZWV0RGF0YT4gdXNlclN0eWxlU2hlZXRzKTsKKyAgICBSZW1vdmVVc2VyU3R5
bGVTaGVldCh1aW50NjRfdCB3b3JsZElkZW50aWZpZXIsIHVpbnQ2NF90IGlkZW50aWZpZXIpOwog
ICAgIFJlbW92ZUFsbFVzZXJTdHlsZVNoZWV0cyhWZWN0b3I8dWludDY0X3Q+IHdvcmxkSWRlbnRp
ZmllcnMpOwogCiAgICAgQWRkVXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVycyhWZWN0b3I8V2ViS2l0
OjpXZWJTY3JpcHRNZXNzYWdlSGFuZGxlckhhbmRsZT4gc2NyaXB0TWVzc2FnZUhhbmRsZXJzKTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJ
KHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkV2
ZW50RGlzcGF0Y2hlci5oIgogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlLmgiCiAjaW5jbHVkZSAi
SW5qZWN0ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3QuaCIKKyNpbmNsdWRlICJJbmplY3RlZEJ1bmRs
ZVNjcmlwdFdvcmxkLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHNjYXBl
UGx1Z2luLmgiCiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2Vy
LmgiCkBAIC0zOTcsNyArMzk4LDcgQEAgV2ViUGFnZTo6V2ViUGFnZSh1aW50NjRfdCBwYWdlSUQs
IGNvbnN0IAogCiAgICAgcGFnZUNvbmZpZ3VyYXRpb24uZGF0YWJhc2VQcm92aWRlciA9IFdlYkRh
dGFiYXNlUHJvdmlkZXI6OmdldE9yQ3JlYXRlKG1fcGFnZUdyb3VwLT5wYWdlR3JvdXBJRCgpKTsK
ICAgICBwYWdlQ29uZmlndXJhdGlvbi5zdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIgPSBXZWJTdG9y
YWdlTmFtZXNwYWNlUHJvdmlkZXI6OmdldE9yQ3JlYXRlKG1fcGFnZUdyb3VwLT5wYWdlR3JvdXBJ
RCgpKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi51c2VyQ29udGVudENvbnRyb2xsZXIgPSAmbV91
c2VyQ29udGVudENvbnRyb2xsZXItPnVzZXJDb250ZW50Q29udHJvbGxlcigpOworICAgIHBhZ2VD
b25maWd1cmF0aW9uLnVzZXJDb250ZW50UHJvdmlkZXIgPSBtX3VzZXJDb250ZW50Q29udHJvbGxl
ci5wdHIoKTsKICAgICBwYWdlQ29uZmlndXJhdGlvbi52aXNpdGVkTGlua1N0b3JlID0gVmlzaXRl
ZExpbmtUYWJsZUNvbnRyb2xsZXI6OmdldE9yQ3JlYXRlKHBhcmFtZXRlcnMudmlzaXRlZExpbmtU
YWJsZUlEKTsKIAogI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCkBAIC01MjIzLDIxICs1MjI0
LDIxIEBAIHZvaWQgV2ViUGFnZTo6aW1hZ2VPck1lZGlhRG9jdW1lbnRTaXplQ2gKIAogdm9pZCBX
ZWJQYWdlOjphZGRVc2VyU2NyaXB0KGNvbnN0IFN0cmluZyYgc291cmNlLCBXZWJDb3JlOjpVc2Vy
Q29udGVudEluamVjdGVkRnJhbWVzIGluamVjdGVkRnJhbWVzLCBXZWJDb3JlOjpVc2VyU2NyaXB0
SW5qZWN0aW9uVGltZSBpbmplY3Rpb25UaW1lKQogewotICAgIFdlYkNvcmU6OlVzZXJTY3JpcHQg
dXNlclNjcmlwdChzb3VyY2UsIFdlYkNvcmU6OmJsYW5rVVJMKCksIFZlY3RvcjxTdHJpbmc+KCks
IFZlY3RvcjxTdHJpbmc+KCksIGluamVjdGlvblRpbWUsIGluamVjdGVkRnJhbWVzKTsKKyAgICBX
ZWJDb3JlOjpVc2VyU2NyaXB0IHVzZXJTY3JpcHR7IHNvdXJjZSwgV2ViQ29yZTo6YmxhbmtVUkwo
KSwgVmVjdG9yPFN0cmluZz4oKSwgVmVjdG9yPFN0cmluZz4oKSwgaW5qZWN0aW9uVGltZSwgaW5q
ZWN0ZWRGcmFtZXMgfTsKIAotICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT51c2VyQ29udGVu
dENvbnRyb2xsZXIoKS5hZGRVc2VyU2NyaXB0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpLCBzdGQ6
Om1ha2VfdW5pcXVlPFdlYkNvcmU6OlVzZXJTY3JpcHQ+KHVzZXJTY3JpcHQpKTsKKyAgICBtX3Vz
ZXJDb250ZW50Q29udHJvbGxlci0+YWRkVXNlclNjcmlwdCgqSW5qZWN0ZWRCdW5kbGVTY3JpcHRX
b3JsZDo6bm9ybWFsV29ybGQoKSwgV1RGTW92ZSh1c2VyU2NyaXB0KSk7CiB9CiAKIHZvaWQgV2Vi
UGFnZTo6YWRkVXNlclN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiBzb3VyY2UsIFdlYkNvcmU6OlVz
ZXJDb250ZW50SW5qZWN0ZWRGcmFtZXMgaW5qZWN0ZWRGcmFtZXMpCiB7Ci0gICAgV2ViQ29yZTo6
VXNlclN0eWxlU2hlZXQgdXNlclN0eWxlU2hlZXQoc291cmNlLCBXZWJDb3JlOjpibGFua1VSTCgp
LCBWZWN0b3I8U3RyaW5nPigpLCBWZWN0b3I8U3RyaW5nPigpLCBpbmplY3RlZEZyYW1lcywgVXNl
clN0eWxlVXNlckxldmVsKTsKKyAgICBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCB1c2VyU3R5bGVT
aGVldHsgc291cmNlLCBXZWJDb3JlOjpibGFua1VSTCgpLCBWZWN0b3I8U3RyaW5nPigpLCBWZWN0
b3I8U3RyaW5nPigpLCBpbmplY3RlZEZyYW1lcywgVXNlclN0eWxlVXNlckxldmVsIH07CiAKLSAg
ICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkuYWRkVXNl
clN0eWxlU2hlZXQobWFpblRocmVhZE5vcm1hbFdvcmxkKCksIHN0ZDo6bWFrZV91bmlxdWU8V2Vi
Q29yZTo6VXNlclN0eWxlU2hlZXQ+KHVzZXJTdHlsZVNoZWV0KSwgSW5qZWN0SW5FeGlzdGluZ0Rv
Y3VtZW50cyk7CisgICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPmFkZFVzZXJTdHlsZVNoZWV0
KCpJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkOjpub3JtYWxXb3JsZCgpLCBXVEZNb3ZlKHVzZXJT
dHlsZVNoZWV0KSk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6cmVtb3ZlQWxsVXNlckNvbnRlbnQoKQog
ewotICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT51c2VyQ29udGVudENvbnRyb2xsZXIoKS5y
ZW1vdmVBbGxVc2VyQ29udGVudCgpOworICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5yZW1v
dmVBbGxVc2VyQ29udGVudCgpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmRpc3BhdGNoRGlkTGF5b3V0
KFdlYkNvcmU6OkxheW91dE1pbGVzdG9uZXMgbWlsZXN0b25lcykKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmNw
cAkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2VHcm91cFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsOSArNTYsOSBAQCBX
ZWJQYWdlR3JvdXBQcm94eTo6fldlYlBhZ2VHcm91cFByb3h5KCkKIHsKIH0KIAotV2ViQ29yZTo6
VXNlckNvbnRlbnRDb250cm9sbGVyJiBXZWJQYWdlR3JvdXBQcm94eTo6dXNlckNvbnRlbnRDb250
cm9sbGVyKCkKK1dlYlVzZXJDb250ZW50Q29udHJvbGxlciYgV2ViUGFnZUdyb3VwUHJveHk6OnVz
ZXJDb250ZW50Q29udHJvbGxlcigpCiB7Ci0gICAgcmV0dXJuIG1fdXNlckNvbnRlbnRDb250cm9s
bGVyLT51c2VyQ29udGVudENvbnRyb2xsZXIoKTsKKyAgICByZXR1cm4gbV91c2VyQ29udGVudENv
bnRyb2xsZXI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmgJKHJl
dmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlR3JvdXBQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIGNsYXNzIFBhZ2VHcm91cDsKLWNsYXNzIFVzZXJDb250ZW50Q29udHJv
bGxlcjsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC01MCw3ICs0OSw3IEBAIHB1YmxpYzoK
ICAgICBib29sIGlzVmlzaWJsZVRvSGlzdG9yeUNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0
YS52aXNpYmxlVG9IaXN0b3J5Q2xpZW50OyB9CiAgICAgV2ViQ29yZTo6UGFnZUdyb3VwKiBjb3Jl
UGFnZUdyb3VwKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlR3JvdXA7IH0KIAotICAgIFdlYkNvcmU6
OlVzZXJDb250ZW50Q29udHJvbGxlciYgdXNlckNvbnRlbnRDb250cm9sbGVyKCk7CisgICAgV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyJiB1c2VyQ29udGVudENvbnRyb2xsZXIoKTsKIAogcHJpdmF0
ZToKICAgICBXZWJQYWdlR3JvdXBQcm94eShjb25zdCBXZWJQYWdlR3JvdXBEYXRhJik7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxNi0wMy0xNCAgU2Ft
IFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBhIGJhc2VVUkwgcGFyYW1l
dGVyIHRvIF9XS1VzZXJTdHlsZVNoZWV0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTUyMTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmll
dyBfY29tbW9uSW5pdGlhbGl6YXRpb25XaXRoRnJhbWVOYW1lOmdyb3VwTmFtZTpdKToKKyAgICAg
ICAgKC1bV2ViVmlldyBpbml0U2ltcGxlSFRNTERvY3VtZW50V2l0aFN0eWxlOmZyYW1lOnByZWZl
cmVuY2VzOmdyb3VwTmFtZTpdKToKKyAgICAgICAgKC1bV2ViVmlldyBzZXRHcm91cE5hbWU6XSk6
CisgICAgICAgIFVwZGF0ZSB0byBhY2NvdW50IGZvciB0aGUgbmFtZSBjaGFuZ2UgZnJvbSBVc2Vy
Q29udGVudENvbnRyb2xsZXIgLT4gVXNlckNvbnRlbnRQcm92aWRlci4KKwogMjAxNi0wMy0xMyAg
Sm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBF
TkFCTEUoRVM2X1RFTVBMQVRFX0xJVEVSQUxfU1lOVEFYKSBndWFyZHMKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTAwNSw3ICsxMDA1
LDcgQEAgLSAodm9pZClfY29tbW9uSW5pdGlhbGl6YXRpb25XaXRoRnJhbWVOYQogICAgIHBhZ2VD
b25maWd1cmF0aW9uLnByb2dyZXNzVHJhY2tlckNsaWVudCA9IG5ldyBXZWJQcm9ncmVzc1RyYWNr
ZXJDbGllbnQoc2VsZik7CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24uZGF0YWJhc2VQcm92aWRlciA9
ICZXZWJEYXRhYmFzZVByb3ZpZGVyOjpzaW5nbGV0b24oKTsKICAgICBwYWdlQ29uZmlndXJhdGlv
bi5zdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIgPSAmX3ByaXZhdGUtPmdyb3VwLT5zdG9yYWdlTmFt
ZXNwYWNlUHJvdmlkZXIoKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi51c2VyQ29udGVudENvbnRy
b2xsZXIgPSAmX3ByaXZhdGUtPmdyb3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIoKTsKKyAgICBw
YWdlQ29uZmlndXJhdGlvbi51c2VyQ29udGVudFByb3ZpZGVyID0gJl9wcml2YXRlLT5ncm91cC0+
dXNlckNvbnRlbnRDb250cm9sbGVyKCk7CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24udmlzaXRlZExp
bmtTdG9yZSA9ICZfcHJpdmF0ZS0+Z3JvdXAtPnZpc2l0ZWRMaW5rU3RvcmUoKTsKICAgICBfcHJp
dmF0ZS0+cGFnZSA9IG5ldyBQYWdlKHBhZ2VDb25maWd1cmF0aW9uKTsKIApAQCAtMTI1MCw3ICsx
MjUwLDcgQEAgLSAoaWQpaW5pdFNpbXBsZUhUTUxEb2N1bWVudFdpdGhTdHlsZTooTgogICAgIHBh
Z2VDb25maWd1cmF0aW9uLnByb2dyZXNzVHJhY2tlckNsaWVudCA9IG5ldyBXZWJQcm9ncmVzc1Ry
YWNrZXJDbGllbnQoc2VsZik7CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24uZGF0YWJhc2VQcm92aWRl
ciA9ICZXZWJEYXRhYmFzZVByb3ZpZGVyOjpzaW5nbGV0b24oKTsKICAgICBwYWdlQ29uZmlndXJh
dGlvbi5zdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIgPSAmX3ByaXZhdGUtPmdyb3VwLT5zdG9yYWdl
TmFtZXNwYWNlUHJvdmlkZXIoKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi51c2VyQ29udGVudENv
bnRyb2xsZXIgPSAmX3ByaXZhdGUtPmdyb3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIoKTsKKyAg
ICBwYWdlQ29uZmlndXJhdGlvbi51c2VyQ29udGVudFByb3ZpZGVyID0gJl9wcml2YXRlLT5ncm91
cC0+dXNlckNvbnRlbnRDb250cm9sbGVyKCk7CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24udmlzaXRl
ZExpbmtTdG9yZSA9ICZfcHJpdmF0ZS0+Z3JvdXAtPnZpc2l0ZWRMaW5rU3RvcmUoKTsKIAogICAg
IF9wcml2YXRlLT5wYWdlID0gbmV3IFBhZ2UocGFnZUNvbmZpZ3VyYXRpb24pOwpAQCAtNjIxNyw3
ICs2MjE3LDcgQEAgLSAodm9pZClzZXRHcm91cE5hbWU6KE5TU3RyaW5nICopZ3JvdXBOYQogICAg
IGlmICghX3ByaXZhdGUtPnBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIF9wcml2YXRlLT5w
YWdlLT5zZXRVc2VyQ29udGVudENvbnRyb2xsZXIoJl9wcml2YXRlLT5ncm91cC0+dXNlckNvbnRl
bnRDb250cm9sbGVyKCkpOworICAgIF9wcml2YXRlLT5wYWdlLT5zZXRVc2VyQ29udGVudFByb3Zp
ZGVyKF9wcml2YXRlLT5ncm91cC0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkpOwogICAgIF9wcml2
YXRlLT5wYWdlLT5zZXRWaXNpdGVkTGlua1N0b3JlKF9wcml2YXRlLT5ncm91cC0+dmlzaXRlZExp
bmtTdG9yZSgpKTsKICAgICBfcHJpdmF0ZS0+cGFnZS0+c2V0R3JvdXBOYW1lKGdyb3VwTmFtZSk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNl
L1dlYktpdC93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MzksNyArMjkzOSw3
IEBAIEhSRVNVTFQgV2ViVmlldzo6aW5pdFdpdGhGcmFtZShSRUNUIGZyYW0KICAgICBjb25maWd1
cmF0aW9uLmRhdGFiYXNlUHJvdmlkZXIgPSAmV2ViRGF0YWJhc2VQcm92aWRlcjo6c2luZ2xldG9u
KCk7CiAgICAgY29uZmlndXJhdGlvbi5zdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIgPSAmbV93ZWJW
aWV3R3JvdXAtPnN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcigpOwogICAgIGNvbmZpZ3VyYXRpb24u
cHJvZ3Jlc3NUcmFja2VyQ2xpZW50ID0gc3RhdGljX2Nhc3Q8V2ViRnJhbWVMb2FkZXJDbGllbnQq
Pihjb25maWd1cmF0aW9uLmxvYWRlckNsaWVudEZvck1haW5GcmFtZSk7Ci0gICAgY29uZmlndXJh
dGlvbi51c2VyQ29udGVudENvbnRyb2xsZXIgPSAmbV93ZWJWaWV3R3JvdXAtPnVzZXJDb250ZW50
Q29udHJvbGxlcigpOworICAgIGNvbmZpZ3VyYXRpb24udXNlckNvbnRlbnRQcml2aWRlciA9ICZt
X3dlYlZpZXdHcm91cC0+dXNlckNvbnRlbnRDb250cm9sbGVyKCk7CiAgICAgY29uZmlndXJhdGlv
bi52aXNpdGVkTGlua1N0b3JlID0gJm1fd2ViVmlld0dyb3VwLT52aXNpdGVkTGlua1N0b3JlKCk7
CiAKICAgICBtX3BhZ2UgPSBuZXcgUGFnZShjb25maWd1cmF0aW9uKTsKQEAgLTM4NTksNyArMzg1
OSw3IEBAIEhSRVNVTFQgV2ViVmlldzo6c2V0R3JvdXBOYW1lKF9Jbl8gQlNUUiAKICAgICBpZiAo
IW1fcGFnZSkKICAgICAgICAgcmV0dXJuIFNfT0s7CiAKLSAgICBtX3BhZ2UtPnNldFVzZXJDb250
ZW50Q29udHJvbGxlcigmbV93ZWJWaWV3R3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigpKTsK
KyAgICBtX3BhZ2UtPnNldFVzZXJDb250ZW50UHJvdmlkZXIobV93ZWJWaWV3R3JvdXAtPnVzZXJD
b250ZW50Q29udHJvbGxlcigpKTsKICAgICBtX3BhZ2UtPnNldFZpc2l0ZWRMaW5rU3RvcmUobV93
ZWJWaWV3R3JvdXAtPnZpc2l0ZWRMaW5rU3RvcmUoKSk7CiAgICAgbV9wYWdlLT5zZXRHcm91cE5h
bWUodG9TdHJpbmcoZ3JvdXBOYW1lKSk7CiAgICAgcmV0dXJuIFNfT0s7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274012</attachid>
            <date>2016-03-14 13:33:44 -0700</date>
            <delta_ts>2016-03-14 16:10:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155219-20160314133332.patch</filename>
            <type>text/plain</type>
            <size>116229</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBAQAorMjAxNi0wMy0xNCAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBhIGJhc2VVUkwgcGFyYW1ldGVy
IHRvIF9XS1VzZXJTdHlsZVNoZWV0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTUyMTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAtIE1vdmVzIHRvIGEgbW9kZWwgZm9yIHVzZXIgY29udGVudCB3aGVyZSBp
bnN0ZWFkIG9mIGVhY2ggcGFnZSBoYXZpbmcgYSBXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xs
ZXIKKyAgICAgICAgICBvYmplY3QsIHdlIGhhdmUgYW4gYWJzdHJhY3QgV2ViQ29yZTo6VXNlckNv
bnRlbnRQcm92aWRlciBpbnRlcmZhY2UgdGhhdCBjYW4gYmUgaW1wbGVtZW50ZWQgYXQgdGhlIFdl
YktpdAorICAgICAgICAgIGxldmVsLiBGb3Igbm93LCBsZWdhY3kgV2ViS2l0IGNvbnRpbnVlcyB0
byB1c2UgdGhlIG9sZCBVc2VyQ29udGVudENvbnRyb2xsZXIsIHdoaWNoIGltcGxlbWVudHMgCisg
ICAgICAgICAgV2ViQ29yZTo6VXNlckNvbnRlbnRQcm92aWRlciwgYW5kIFdlYktpdDIgaW1wbGVt
ZW50cyBpdHMgb3duIGltcGxlbWVudGF0aW9uIHNvIGl0IGNhbiBzdG9yZSBhZGRpdGlvbmFsCisg
ICAgICAgICAgc3RhdGUuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgIEFkZCBuZXcgZmlsZXMuCisKKyAgICAgICAgKiBkb20vRXh0ZW5zaW9u
U3R5bGVTaGVldHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uU3R5bGVTaGVldHM6
OnVwZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlKToKKyAgICAgICAgU3dpdGNoIHRvIHVzaW5n
IGZvckVhY2hVc2VyU3R5bGVTaGVldCBvbiB0aGUgVXNlckNvbnRlbnRQcm92aWRlci4KKworICAg
ICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50Ojpsb2FkUmVzb3VyY2UpOgorICAgICAgICBSZW1vdmUgbnVsbCBjaGVjayBu
b3cgdGhhdCB3ZSBhbHdheXMgaGF2ZSBhIFVzZXJDb250ZW50UHJvdmlkZXIuCisKKyAgICAgICAg
KiBsb2FkZXIvRW1wdHlDbGllbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxXaXRoRW1w
dHlDbGllbnRzKToKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgIEFk
ZCBuZXcgRW1wdHlDbGllbnRzLgorCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5
KToKKyAgICAgICAgUmVtb3ZlIG51bGwgY2hlY2sgbm93IHRoYXQgd2UgYWx3YXlzIGhhdmUgYSBV
c2VyQ29udGVudFByb3ZpZGVyLgorCisgICAgICAgICogbG9hZGVyL1BpbmdMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQpOgor
ICAgICAgICBSZW1vdmUgbnVsbCBjaGVjayBub3cgdGhhdCB3ZSBhbHdheXMgaGF2ZSBhIFVzZXJD
b250ZW50UHJvdmlkZXIuCisKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdEludGVybmFs
KToKKyAgICAgICAgUmVtb3ZlIG51bGwgY2hlY2sgbm93IHRoYXQgd2UgYWx3YXlzIGhhdmUgYSBV
c2VyQ29udGVudFByb3ZpZGVyLgorCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpy
ZXF1ZXN0UmVzb3VyY2UpOgorICAgICAgICBSZW1vdmUgbnVsbCBjaGVjayBub3cgdGhhdCB3ZSBh
bHdheXMgaGF2ZSBhIFVzZXJDb250ZW50UHJvdmlkZXIuCisKKyAgICAgICAgKiBwYWdlL0RPTVdp
bmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OnNob3VsZEhhdmVXZWJLaXRO
YW1lc3BhY2VGb3JXb3JsZCk6CisgICAgICAgIFJlbW92ZSBudWxsIGNoZWNrcyBub3cgdGhhdCB3
ZSBhbHdheXMgaGF2ZSBhIFVzZXJDb250ZW50UHJvdmlkZXIsIGFuZCB1c2VyTWVzc2FnZUhhbmRs
ZXJEZXNjcmlwdG9ycworICAgICAgICByZXR1cm5zIGEgcmVmZXJlbmNlLgorCisgICAgICAgIChX
ZWJDb3JlOjpET01XaW5kb3c6Om9wZW4pOgorICAgICAgICBSZW1vdmUgbnVsbCBjaGVjayBub3cg
dGhhdCB3ZSBhbHdheXMgaGF2ZSBhIFVzZXJDb250ZW50UHJvdmlkZXIuCisKKyAgICAgICAgKiBw
YWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjppbmplY3RVc2VyU2NyaXB0
cyk6CisgICAgICAgIFNpbXBsaWZ5IGJ5IGxpZnRpbmcgZG9jdW1lbnQgY2hlY2sgb3V0IG9mIHRo
ZSBtYWluIGxvb3AgYW5kIHVzaW5nIGZvckVhY2hVc2VyU2NyaXB0LgorCisgICAgICAgICogcGFn
ZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OlBhZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZTo6flBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6dXNlckNvbnRlbnRQ
cm92aWRlcik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRVc2VyQ29udGVudFByb3ZpZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldFVzZXJDb250ZW50Q29udHJvbGxlcik6IERl
bGV0ZWQuCisgICAgICAgICogcGFnZS9QYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp1
c2VyQ29udGVudENvbnRyb2xsZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvUGFnZUNvbmZp
Z3VyYXRpb24uaDoKKyAgICAgICAgU3RvcmUgdGhlIFVzZXJDb250ZW50UHJvdmlkZXIgaW4gYSBS
ZWYsIGFuZCByZXF1aXJlIFBhZ2VDb25maWd1cmF0aW9ucyB0byBwcm92aWRlIG9uZS4gVGhpcwor
ICAgICAgICByZW1vdmVzIGEgYnVuY2ggb2YgbnVsbCBjaGVja3MgYW5kIHNpbXBsaWZpZXMgdGhl
IGNvZGUuCisKKyAgICAgICAgKiBwYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6On5Vc2VyQ29udGVudENvbnRyb2xs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRlbnRDb250cm9sbGVyOjpmb3JFYWNoVXNl
clNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OmZvckVh
Y2hVc2VyU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xs
ZXI6OmFkZFVzZXJTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRlbnRDb250cm9s
bGVyOjpyZW1vdmVVc2VyU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlwdHMpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRl
bnRDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpVc2Vy
Q29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNv
cmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclN0eWxlU2hlZXRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlck1lc3NhZ2VIYW5kbGVy
RGVzY3JpcHRvcik6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OnJl
bW92ZVVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IpOgorICAgICAgICAoV2ViQ29yZTo6VXNl
ckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyQ29udGVudEV4dGVuc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxsVXNl
ckNvbnRlbnRFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJv
bGxlcjo6cmVtb3ZlQWxsVXNlckNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRl
bnRDb250cm9sbGVyOjphZGRQYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlVzZXJD
b250ZW50Q29udHJvbGxlcjo6cmVtb3ZlUGFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
Ojpjb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
VXNlckNvbnRlbnRDb250cm9sbGVyOjpwcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9yTG9h
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OmFj
dGlvbnNGb3JSZXNvdXJjZUxvYWQpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvVXNlckNvbnRl
bnRDb250cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6
OnVzZXJTY3JpcHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6dXNlclN0eWxlU2hlZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlVz
ZXJDb250ZW50Q29udHJvbGxlcjo6dXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMpOiBEZWxl
dGVkLgorICAgICAgICBBZGQgaW5oZXJpdGFuY2UgZnJvbSBVc2VyQ29udGVudFByb3ZpZGVyIGFu
ZCBzaW1wbGlmeSB0aGluZ3MgYnkgcmVtb3ZpbmcgdW5pcXVlX3B0cnMKKyAgICAgICAgdGhhdCB3
ZXJlIGhvbGRpbmcgdGhlIG1lbWJlciB2YXJpYWJsZXMuIFRoZXJlIGlzIHVzdWFsbHkgb25seSBv
bmUgVXNlckNvbnRlbnRDb250cm9sbGVyCisgICAgICAgIHNvIGhhdmluZyB0aGVzZSBpbiB1bmlx
dWVfcHRycyBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZS4KKyAgICAgICAgCisgICAgICAgICogcGFn
ZS9Vc2VyQ29udGVudFByb3ZpZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpVc2Vy
Q29udGVudFByb3ZpZGVyOjpVc2VyQ29udGVudFByb3ZpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlVzZXJDb250ZW50UHJvdmlkZXI6On5Vc2VyQ29udGVudFByb3ZpZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlVzZXJDb250ZW50UHJvdmlkZXI6OmFkZFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
VXNlckNvbnRlbnRQcm92aWRlcjo6cmVtb3ZlUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpVc2Vy
Q29udGVudFByb3ZpZGVyOjppbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZy
YW1lc0luQWxsUGFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGVudEV4dGVuc2lvbnNFbmFi
bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50UHJvdmlkZXI6OnByb2Nlc3NDb250
ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50
UHJvdmlkZXI6OmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQpOgorICAgICAgICAqIHBhZ2UvVXNlckNv
bnRlbnRQcm92aWRlci5oOiBBZGRlZC4KKyAgICAgICAgQWRkIGFic3RyYWN0IGNsYXNzIGZvciBw
cm92aWRpbmcgdXNlciBjb250ZW50IGFuZCBhZGQgc29tZSBoZWxwZXJzIG9uIGl0LgorCisgICAg
ICAgICogcGFnZS9Vc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yLmg6CisgICAgICAgIChXZWJD
b3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcjo6Y2xpZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3I6OmludmFsaWRhdGVDbGllbnQpOgor
ICAgICAgICAqIHBhZ2UvVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlOjpoYW5kbGVyKToKKyAgICAg
ICAgU2ltcGxpZnkgbm93IHRoYXQgdXNlckNvbnRlbnRQcm92aWRlcigpIGFuZCB1c2VyTWVzc2Fn
ZUhhbmRsZXJEZXNjcmlwdG9ycygpIGFyZSByZWZlcmVuY2VzLgorCiAyMDE2LTAzLTE0ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgUmVncmVzc2lvbihyMTk3OTgx
KTogSHVnZSByZWdyZXNzaW9uIG9uIE1hYyBQTFQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMjA1Myw2ICsyMDUzLDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHBh
Z2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCiAgICAgcGFnZS9TdXNwZW5kYWJsZVRpbWVyLmNwcAog
ICAgIHBhZ2UvVGV4dEluZGljYXRvci5jcHAKKyAgICBwYWdlL1VzZXJDb250ZW50UHJvdmlkZXIu
Y3BwCiAgICAgcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCiAgICAgcGFnZS9Vc2VyQ29u
dGVudFVSTFBhdHRlcm4uY3BwCiAgICAgcGFnZS9WaXNpdGVkTGlua1N0b3JlLmNwcApJbmRleDog
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQwLDYgKzI3NDAsOCBAQAogCQk3QzNC
Nzk3MjE5MDg3NTdCMDBCNDdBMkQgLyogVXNlck1lc3NhZ2VIYW5kbGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzNCNzk3MDE5MDg3NTdCMDBCNDdB
MkQgLyogVXNlck1lc3NhZ2VIYW5kbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0MzRTUxMEExOERGOEYzNTAwQzExMkY3IC8qIEhUTUxDb252
ZXJ0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdD
M0U1MTA4MThERjhGMzUwMEMxMTJGNyAvKiBIVE1MQ29udmVydGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0MzRTUxMEIxOERGOEYzNTAwQzEx
MkY3IC8qIEhUTUxDb252ZXJ0ZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3QzNFNTEwOTE4REY4RjM1MDBDMTEyRjcgLyogSFRNTENvbnZlcnRlci5t
bSAqLzsgfTsKKwkJN0MzRjAxQzExQzhFNUFCQTAwQUREOTYyIC8qIFVzZXJDb250ZW50UHJvdmlk
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDM0Yw
MUMwMUM4RTVBQjEwMEFERDk2MiAvKiBVc2VyQ29udGVudFByb3ZpZGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0MzRjAxQzIxQzhFNUFDMjAw
QUREOTYyIC8qIFVzZXJDb250ZW50UHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzRjAxQkYxQzhFNUFCMTAwQUREOTYyIC8qIFVzZXJD
b250ZW50UHJvdmlkZXIuY3BwICovOyB9OwogCQk3QzQ4QTZEMDE5MUM5RDY1MDAwMjY2NzQgLyog
V2ViS2l0TmFtZXNwYWNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdDNDhBNkNFMTkxQzlENjUwMDAyNjY3NCAvKiBXZWJLaXROYW1lc3BhY2UuY3Bw
ICovOyB9OwogCQk3QzQ4QTZEMTE5MUM5RDY1MDAwMjY2NzQgLyogV2ViS2l0TmFtZXNwYWNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzQ4QTZDRjE5
MUM5RDY1MDAwMjY2NzQgLyogV2ViS2l0TmFtZXNwYWNlLmggKi87IH07CiAJCTdDNDkwMkEyMThC
ODI1RjgwMDdEOTI5OCAvKiBET01XaGVlbEV2ZW50SW50ZXJuYWwuaCBpbiBDb3B5IEdlbmVyYXRl
ZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1OTg5RENBMEFD
QzhCQkQwMEEwQkM1MSAvKiBET01XaGVlbEV2ZW50SW50ZXJuYWwuaCAqLzsgfTsKQEAgLTEwMzgx
LDYgKzEwMzgzLDggQEAKIAkJN0MzQjc5NzAxOTA4NzU3QjAwQjQ3QTJEIC8qIFVzZXJNZXNzYWdl
SGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyTWVzc2FnZUhh
bmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MzRTUxMDgxOERGOEYzNTAw
QzExMkY3IC8qIEhUTUxDb252ZXJ0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSFRNTENvbnZlcnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzNFNTEw
OTE4REY4RjM1MDBDMTEyRjcgLyogSFRNTENvbnZlcnRlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IEhUTUxDb252ZXJ0ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTdDM0YwMUJGMUM4RTVBQjEwMEFERDk2MiAvKiBVc2VyQ29udGVudFByb3Zp
ZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVzZXJDb250ZW50
UHJvdmlkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzNGMDFDMDFDOEU1
QUIxMDBBREQ5NjIgLyogVXNlckNvbnRlbnRQcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBVc2VyQ29udGVudFByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdDNDE4OUFCMUIwN0MxNzAwMDBGQTc1NyAvKiBHbG9iYWxFdmVudEhhbmRsZXJz
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBHbG9iYWxFdmVudEhhbmRsZXJzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0M0MTg5QUMxQjA3Q0JGMjAwMEZBNzU3IC8qIFdpbmRvd0V2ZW50SGFuZGxlcnMu
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IFdpbmRvd0V2ZW50SGFuZGxlcnMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3QzQ4QTZDRTE5MUM5RDY1MDAwMjY2NzQgLyogV2ViS2l0TmFtZXNwYWNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktpdE5hbWVzcGFjZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODExOSw2ICsxODEyMyw4IEBACiAJCQkJ
MkQ0Rjk2RjIxQTFFQ0MyNDAwOThCRjg4IC8qIFRleHRJbmRpY2F0b3IuaCAqLywKIAkJCQkxQUU3
OUQ0MDE4OERCNjFGMDAyMjM5QzIgLyogVXNlckNvbnRlbnRDb250cm9sbGVyLmNwcCAqLywKIAkJ
CQkxQUU3OUQ0MTE4OERCNjFGMDAyMjM5QzIgLyogVXNlckNvbnRlbnRDb250cm9sbGVyLmggKi8s
CisJCQkJN0MzRjAxQkYxQzhFNUFCMTAwQUREOTYyIC8qIFVzZXJDb250ZW50UHJvdmlkZXIuY3Bw
ICovLAorCQkJCTdDM0YwMUMwMUM4RTVBQjEwMEFERDk2MiAvKiBVc2VyQ29udGVudFByb3ZpZGVy
LmggKi8sCiAJCQkJMDAzRjFGRTkxMUU2QUI0MzAwODI1OEQ5IC8qIFVzZXJDb250ZW50VHlwZXMu
aCAqLywKIAkJCQlCQ0FDRjNCQTEwNzI5MjFBMDBDMEM4QTMgLyogVXNlckNvbnRlbnRVUkxQYXR0
ZXJuLmNwcCAqLywKIAkJCQlCQ0FDRjNCQjEwNzI5MjFBMDBDMEM4QTMgLyogVXNlckNvbnRlbnRV
UkxQYXR0ZXJuLmggKi8sCkBAIC0yODI1Miw2ICsyODI1OCw3IEBACiAJCQkJMDg4QzJGN0ExMjM5
MDA4MTAwM0Q2NUNFIC8qIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwODEwOTNEQzEyNTVGMEU3MDBFRDlEMjkgLyogU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNC
dWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODE2NjhEQTEyNTYwM0Q1MDA2RjI1REUgLyog
U1ZHVGV4dExheW91dEVuZ2luZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0MzRjAxQzExQzhFNUFC
QTAwQUREOTYyIC8qIFVzZXJDb250ZW50UHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4
MEU0OTI2MTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuaCBp
biBIZWFkZXJzICovLAogCQkJCTA4MEU0OTI4MTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5
b3V0RW5naW5lU3BhY2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDhGMEJGQzYxMjU1QzUzQzAw
MDc1MTg1IC8qIFNWR1RleHRNZXRyaWNzLmggaW4gSGVhZGVycyAqLywKQEAgLTMwNDI3LDYgKzMw
NDM0LDcgQEAKIAkJCQk1MTFFRjJEMTE3RjBGREYxMDBFNEZBMTYgLyogSlNJREJPYmplY3RTdG9y
ZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTFFRjJDODE3RjBGRDM1MDBFNEZBMTYg
LyogSlNJREJPcGVuREJSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMUVGMkM5MTdG
MEZEMzUwMEU0RkExNiAvKiBKU0lEQlJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0Mz
RjAxQzIxQzhFNUFDMjAwQUREOTYyIC8qIFVzZXJDb250ZW50UHJvdmlkZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTExRUYyQ0ExN0YwRkQzNTAwRTRGQTE2IC8qIEpTSURCVHJhbnNhY3Rpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTExRUYyQ0IxN0YwRkQzNTAwRTRGQTE2IC8qIEpTSURC
VmVyc2lvbkNoYW5nZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNkM0OUYzMEQ3REJB
MDUwMEZGQTU1OCAvKiBKU0ltYWdlQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRXh0ZW5zaW9uU3R5bGVTaGVldHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FeHRlbnNpb25TdHlsZVNoZWV0cy5jcHAJKHJldmlzaW9u
IDE5ODE0NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FeHRlbnNpb25TdHlsZVNoZWV0cy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsMjQgQEAgdm9pZCBFeHRlbnNpb25TdHlsZVNo
ZWV0czo6dXBkYXRlSW5qZWN0ZQogICAgIGlmICghb3duaW5nUGFnZSkKICAgICAgICAgcmV0dXJu
OwogCisgICAgb3duaW5nUGFnZS0+dXNlckNvbnRlbnRQcm92aWRlcigpLmZvckVhY2hVc2VyU3R5
bGVTaGVldChbJl0oY29uc3QgVXNlclN0eWxlU2hlZXQmIHVzZXJTdHlsZVNoZWV0KSB7CisgICAg
ICAgIGlmICh1c2VyU3R5bGVTaGVldC5pbmplY3RlZEZyYW1lcygpID09IEluamVjdEluVG9wRnJh
bWVPbmx5ICYmIG1fZG9jdW1lbnQub3duZXJFbGVtZW50KCkpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgaWYgKCFVc2VyQ29udGVudFVSTFBhdHRlcm46Om1hdGNoZXNQYXR0ZXJucyht
X2RvY3VtZW50LnVybCgpLCB1c2VyU3R5bGVTaGVldC53aGl0ZWxpc3QoKSwgdXNlclN0eWxlU2hl
ZXQuYmxhY2tsaXN0KCkpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFJlZlB0cjxD
U1NTdHlsZVNoZWV0PiBzaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZUlubGluZShjb25zdF9j
YXN0PERvY3VtZW50Jj4obV9kb2N1bWVudCksIHVzZXJTdHlsZVNoZWV0LnVybCgpKTsKKyAgICAg
ICAgYm9vbCBpc1VzZXJTdHlsZVNoZWV0ID0gdXNlclN0eWxlU2hlZXQubGV2ZWwoKSA9PSBVc2Vy
U3R5bGVVc2VyTGV2ZWw7CisgICAgICAgIGlmIChpc1VzZXJTdHlsZVNoZWV0KQorICAgICAgICAg
ICAgbV9pbmplY3RlZFVzZXJTdHlsZVNoZWV0cy5hcHBlbmQoc2hlZXQpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX2luamVjdGVkQXV0aG9yU3R5bGVTaGVldHMuYXBwZW5kKHNoZWV0KTsK
KworICAgICAgICBzaGVldC0+Y29udGVudHMoKS5zZXRJc1VzZXJTdHlsZVNoZWV0KGlzVXNlclN0
eWxlU2hlZXQpOworICAgICAgICBzaGVldC0+Y29udGVudHMoKS5wYXJzZVN0cmluZyh1c2VyU3R5
bGVTaGVldC5zb3VyY2UoKSk7CisgICAgfSk7CisgICAgCiAgICAgaWYgKCFvd25pbmdQYWdlLT5j
YXB0aW9uVXNlclByZWZlcmVuY2VzU3R5bGVTaGVldCgpLmlzRW1wdHkoKSkgewogICAgICAgICAv
LyBJZGVudGlmeSBvdXIgb3ZlcnJpZGUgc3R5bGUgc2hlZXQgd2l0aCBhIHVuaXF1ZSBVUkwgLSBh
IG5ldyBzY2hlbWUgYW5kIGEgVVVJRC4KICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFVS
TD4gY2FwdGlvbnNTdHlsZVNoZWV0VVJMKFBhcnNlZFVSTFN0cmluZywgInVzZXItY2FwdGlvbnMt
b3ZlcnJpZGU6MDFGNkFGMTItQzNCMC00RjcwLUFGNUUtQTNFMDAyMzREQzIzIik7CkBAIC0xMjcs
MzQgKzE0NSw2IEBAIHZvaWQgRXh0ZW5zaW9uU3R5bGVTaGVldHM6OnVwZGF0ZUluamVjdGUKICAg
ICAgICAgc2hlZXQtPmNvbnRlbnRzKCkuc2V0SXNVc2VyU3R5bGVTaGVldChmYWxzZSk7CiAgICAg
ICAgIHNoZWV0LT5jb250ZW50cygpLnBhcnNlU3RyaW5nKG93bmluZ1BhZ2UtPmNhcHRpb25Vc2Vy
UHJlZmVyZW5jZXNTdHlsZVNoZWV0KCkpOwogICAgIH0KLQotICAgIGNvbnN0IGF1dG8qIHVzZXJD
b250ZW50Q29udHJvbGxlciA9IG93bmluZ1BhZ2UtPnVzZXJDb250ZW50Q29udHJvbGxlcigpOwot
ICAgIGlmICghdXNlckNvbnRlbnRDb250cm9sbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBj
b25zdCBVc2VyU3R5bGVTaGVldE1hcCogdXNlclN0eWxlU2hlZXRzID0gdXNlckNvbnRlbnRDb250
cm9sbGVyLT51c2VyU3R5bGVTaGVldHMoKTsKLSAgICBpZiAoIXVzZXJTdHlsZVNoZWV0cykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChhdXRvJiBzdHlsZVNoZWV0cyA6IHVzZXJTdHlsZVNo
ZWV0cy0+dmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzaGVldCA6ICpzdHls
ZVNoZWV0cykgewotICAgICAgICAgICAgaWYgKHNoZWV0LT5pbmplY3RlZEZyYW1lcygpID09IElu
amVjdEluVG9wRnJhbWVPbmx5ICYmIG1fZG9jdW1lbnQub3duZXJFbGVtZW50KCkpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGlmICghVXNlckNvbnRlbnRVUkxQYXR0
ZXJuOjptYXRjaGVzUGF0dGVybnMobV9kb2N1bWVudC51cmwoKSwgc2hlZXQtPndoaXRlbGlzdCgp
LCBzaGVldC0+YmxhY2tsaXN0KCkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgICAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gZ3JvdXBTaGVldCA9IENTU1N0eWxlU2hlZXQ6
OmNyZWF0ZUlubGluZShjb25zdF9jYXN0PERvY3VtZW50Jj4obV9kb2N1bWVudCksIHNoZWV0LT51
cmwoKSk7Ci0gICAgICAgICAgICBib29sIGlzVXNlclN0eWxlU2hlZXQgPSBzaGVldC0+bGV2ZWwo
KSA9PSBVc2VyU3R5bGVVc2VyTGV2ZWw7Ci0gICAgICAgICAgICBpZiAoaXNVc2VyU3R5bGVTaGVl
dCkKLSAgICAgICAgICAgICAgICBtX2luamVjdGVkVXNlclN0eWxlU2hlZXRzLmFwcGVuZChncm91
cFNoZWV0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2luamVjdGVkQXV0
aG9yU3R5bGVTaGVldHMuYXBwZW5kKGdyb3VwU2hlZXQpOwotCi0gICAgICAgICAgICBncm91cFNo
ZWV0LT5jb250ZW50cygpLnNldElzVXNlclN0eWxlU2hlZXQoaXNVc2VyU3R5bGVTaGVldCk7Ci0g
ICAgICAgICAgICBncm91cFNoZWV0LT5jb250ZW50cygpLnBhcnNlU3RyaW5nKHNoZWV0LT5zb3Vy
Y2UoKSk7Ci0gICAgICAgIH0KLSAgICB9CiB9CiAKIHZvaWQgRXh0ZW5zaW9uU3R5bGVTaGVldHM6
OmludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNTgs
NyArMTI1OCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bG9hZFJlc291cmNlKGNvbnMKICAg
ICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCh1cmwpOwogICAgIERvY3VtZW50TG9hZGVyKiBkb2N1
bWVudExvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpOwogCi0gICAgaWYg
KHBhZ2UtPnVzZXJDb250ZW50Q29udHJvbGxlcigpICYmIGRvY3VtZW50TG9hZGVyICYmIHBhZ2Ut
PnVzZXJDb250ZW50Q29udHJvbGxlcigpLT5wcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9y
TG9hZChyZXF1ZXN0LCBSZXNvdXJjZVR5cGU6Ok1lZGlhLCAqZG9jdW1lbnRMb2FkZXIpID09IENv
bnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzOjpCbG9ja2VkKSB7CisgICAgaWYgKGRvY3Vt
ZW50TG9hZGVyICYmIHBhZ2UtPnVzZXJDb250ZW50UHJvdmlkZXIoKS5wcm9jZXNzQ29udGVudEV4
dGVuc2lvblJ1bGVzRm9yTG9hZChyZXF1ZXN0LCBSZXNvdXJjZVR5cGU6Ok1lZGlhLCAqZG9jdW1l
bnRMb2FkZXIpID09IENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzOjpCbG9ja2VkKSB7
CiAgICAgICAgIHJlcXVlc3QgPSB7IH07CiAgICAgICAgIG1lZGlhTG9hZGluZ0ZhaWxlZChNZWRp
YVBsYXllcjo6Rm9ybWF0RXJyb3IpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcAkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQx
LDcgQEAKICNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgogI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3Bh
Y2UuaCIKICNpbmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuaCIKKyNpbmNsdWRlICJV
c2VyQ29udGVudFByb3ZpZGVyLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAK
ICNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQpAQCAtOTUsNyArOTYsMTggQEAgY2xhc3MgRW1w
dHlTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIgZmluYQogICAgIH0KIH07CiAKLWNsYXNzIEVtcHR5
VmlzaXRlZExpbmtTdG9yZSA6IHB1YmxpYyBWaXNpdGVkTGlua1N0b3JlIHsKK2NsYXNzIEVtcHR5
VXNlckNvbnRlbnRQcm92aWRlciBmaW5hbCA6IHB1YmxpYyBVc2VyQ29udGVudFByb3ZpZGVyIHsK
KyAgICB2b2lkIGZvckVhY2hVc2VyU2NyaXB0KGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChET01X
cmFwcGVyV29ybGQmLCBjb25zdCBVc2VyU2NyaXB0Jik+JikgY29uc3Qgb3ZlcnJpZGUgeyB9Cisg
ICAgdm9pZCBmb3JFYWNoVXNlclN0eWxlU2hlZXQoY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkKGNv
bnN0IFVzZXJTdHlsZVNoZWV0Jik+JikgY29uc3Qgb3ZlcnJpZGUgeyB9CisjaWYgRU5BQkxFKFVT
RVJfTUVTU0FHRV9IQU5ETEVSUykKKyAgICBjb25zdCBVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlw
dG9yTWFwJiB1c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycygpIGNvbnN0IG92ZXJyaWRlIHsg
c3RhdGljIE5ldmVyRGVzdHJveWVkPFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JNYXA+IG1h
cDsgcmV0dXJuIG1hcC5nZXQoKTsgfQorI2VuZGlmCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5T
SU9OUykKKyAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kJiB1
c2VyQ29udGVudEV4dGVuc2lvbkJhY2tlbmQoKSBvdmVycmlkZSB7IHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kPiBiYWNrZW5k
OyByZXR1cm4gYmFja2VuZC5nZXQoKTsgfTsKKyNlbmRpZgorfTsKKworY2xhc3MgRW1wdHlWaXNp
dGVkTGlua1N0b3JlIGZpbmFsIDogcHVibGljIFZpc2l0ZWRMaW5rU3RvcmUgewogICAgIGJvb2wg
aXNMaW5rVmlzaXRlZChQYWdlJiwgTGlua0hhc2gsIGNvbnN0IFVSTCYsIGNvbnN0IEF0b21pY1N0
cmluZyYpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdm9pZCBhZGRWaXNpdGVkTGlu
ayhQYWdlJiwgTGlua0hhc2gpIG92ZXJyaWRlIHsgfQogfTsKQEAgLTEzMiw2ICsxNDQsNyBAQCB2
b2lkIGZpbGxXaXRoRW1wdHlDbGllbnRzKFBhZ2VDb25maWd1cmF0CiAKICAgICBwYWdlQ29uZmln
dXJhdGlvbi5kYXRhYmFzZVByb3ZpZGVyID0gYWRvcHRSZWYobmV3IEVtcHR5RGF0YWJhc2VQcm92
aWRlcik7CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24uc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyID0g
YWRvcHRSZWYobmV3IEVtcHR5U3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyKTsKKyAgICBwYWdlQ29u
ZmlndXJhdGlvbi51c2VyQ29udGVudFByb3ZpZGVyID0gYWRvcHRSZWYobmV3IEVtcHR5VXNlckNv
bnRlbnRQcm92aWRlcik7CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24udmlzaXRlZExpbmtTdG9yZSA9
IGFkb3B0UmVmKG5ldyBFbXB0eVZpc2l0ZWRMaW5rU3RvcmUpOwogCiAjaWYgVVNFKEFQUExFX0lO
VEVSTkFMX1NESykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHJldmlz
aW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgIkRpYWdub3N0aWNMb2dnaW5n
Q2xpZW50LmgiCiAjaW5jbHVkZSAiRHJhZ0NsaWVudC5oIgogI2luY2x1ZGUgIkVkaXRvckNsaWVu
dC5oIgotI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCiAjaW5jbHVkZSAiRm9jdXNEaXJlY3Rpb24uaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNs
aWVudC5oIgpAQCAtNDQsOSArNDMsMTggQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAi
UHJvZ3Jlc3NUcmFja2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgorI2lu
Y2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiVmlzaXRlZExpbmtTdG9yZS5o
IgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KIAorI2lmIEVOQUJMRShVU0VSX01F
U1NBR0VfSEFORExFUlMpCisjaW5jbHVkZSAiVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvci5o
IgorI2VuZGlmCisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorI2luY2x1ZGUgIkNv
bXBpbGVkQ29udGVudEV4dGVuc2lvbi5oIgorI2VuZGlmCisKIC8qCiAgVGhpcyBmaWxlIGhvbGRz
IGVtcHR5IENsaWVudCBzdHVicyBmb3IgdXNlIGJ5IFdlYkNvcmUuCiAgVmlld2xlc3MgZWxlbWVu
dCBuZWVkcyB0byBjcmVhdGUgYSBkdW1teSBQYWdlLT5GcmFtZS0+RnJhbWVWaWV3IHRyZWUgZm9y
IHVzZSBpbiBwYXJzaW5nIG9yIGV4ZWN1dGluZyBKYXZhU2NyaXB0LgpJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzMwLDEzICsy
NzMwLDExIEBAIHVuc2lnbmVkIGxvbmcgRnJhbWVMb2FkZXI6OmxvYWRSZXNvdXJjZVMKICNpZiBF
TkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAgIGlmIChlcnJvci5pc051bGwoKSkgewogICAg
ICAgICBpZiAoYXV0byogcGFnZSA9IG1fZnJhbWUucGFnZSgpKSB7Ci0gICAgICAgICAgICBpZiAo
YXV0byogY29udHJvbGxlciA9IHBhZ2UtPnVzZXJDb250ZW50Q29udHJvbGxlcigpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKG1fZG9jdW1lbnRMb2FkZXIgJiYgY29udHJvbGxlci0+cHJvY2Vzc0Nv
bnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQobmV3UmVxdWVzdCwgUmVzb3VyY2VUeXBlOjpSYXcs
ICptX2RvY3VtZW50TG9hZGVyKSA9PSBDb250ZW50RXh0ZW5zaW9uczo6QmxvY2tlZFN0YXR1czo6
QmxvY2tlZCkgewotICAgICAgICAgICAgICAgICAgICBuZXdSZXF1ZXN0ID0geyB9OwotICAgICAg
ICAgICAgICAgICAgICBlcnJvciA9IFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRl
cm5hbCwgMCwgaW5pdGlhbFJlcXVlc3QudXJsKCksIGVtcHR5U3RyaW5nKCkpOwotICAgICAgICAg
ICAgICAgICAgICByZXNwb25zZSA9IHsgfTsKLSAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG51
bGxwdHI7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fZG9jdW1lbnRMb2Fk
ZXIgJiYgcGFnZS0+dXNlckNvbnRlbnRQcm92aWRlcigpLnByb2Nlc3NDb250ZW50RXh0ZW5zaW9u
UnVsZXNGb3JMb2FkKG5ld1JlcXVlc3QsIFJlc291cmNlVHlwZTo6UmF3LCAqbV9kb2N1bWVudExv
YWRlcikgPT0gQ29udGVudEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXM6OkJsb2NrZWQpIHsKKyAg
ICAgICAgICAgICAgICBuZXdSZXF1ZXN0ID0geyB9OworICAgICAgICAgICAgICAgIGVycm9yID0g
UmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbldlYktpdEludGVybmFsLCAwLCBpbml0aWFsUmVxdWVz
dC51cmwoKSwgZW1wdHlTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSB7IH07
CisgICAgICAgICAgICAgICAgZGF0YSA9IG51bGxwdHI7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUGluZ0xvYWRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1BpbmdMb2FkZXIuY3BwCShyZXZpc2lv
biAxOTgxNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUGluZ0xvYWRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU5LDEwICs1OSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0YXRpYyBD
b250ZW50RXh0ZW5zaW9uczo6QmxvY2tlZFN0YXR1cyBwcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1
bGVzRm9yTG9hZChjb25zdCBGcmFtZSYgZnJhbWUsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
UmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSkKIHsKICAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGRv
Y3VtZW50TG9hZGVyID0gZnJhbWUubG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkgewotICAgICAg
ICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLnBhZ2UoKSkgewotICAgICAgICAgICAgaWYgKFVzZXJD
b250ZW50Q29udHJvbGxlciogY29udHJvbGxlciA9IHBhZ2UtPnVzZXJDb250ZW50Q29udHJvbGxl
cigpKQotICAgICAgICAgICAgICAgIHJldHVybiBjb250cm9sbGVyLT5wcm9jZXNzQ29udGVudEV4
dGVuc2lvblJ1bGVzRm9yTG9hZChyZXF1ZXN0LCByZXNvdXJjZVR5cGUsICpkb2N1bWVudExvYWRl
cik7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS5wYWdlKCkpCisg
ICAgICAgICAgICByZXR1cm4gcGFnZS0+dXNlckNvbnRlbnRQcm92aWRlcigpLnByb2Nlc3NDb250
ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKHJlcXVlc3QsIHJlc291cmNlVHlwZSwgKmRvY3VtZW50
TG9hZGVyKTsKICAgICB9CiAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3Rh
dHVzOjpOb3RCbG9ja2VkOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VM
b2FkZXIuY3BwCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVz
b3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDYsOCArMzQ2LDcgQEAgdm9pZCBS
ZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0SW50ZQogICAgIGlmIChmcmFtZUxvYWRlcigp
KSB7CiAgICAgICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZUxvYWRlcigpLT5mcmFtZSgpLnBhZ2UoKTsK
ICAgICAgICAgaWYgKHBhZ2UgJiYgbV9kb2N1bWVudExvYWRlcikgewotICAgICAgICAgICAgYXV0
byogdXNlckNvbnRlbnRDb250cm9sbGVyID0gcGFnZS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCk7
Ci0gICAgICAgICAgICBpZiAodXNlckNvbnRlbnRDb250cm9sbGVyICYmIHVzZXJDb250ZW50Q29u
dHJvbGxlci0+cHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQocmVxdWVzdCwgbV9y
ZXNvdXJjZVR5cGUsICptX2RvY3VtZW50TG9hZGVyKSA9PSBDb250ZW50RXh0ZW5zaW9uczo6Qmxv
Y2tlZFN0YXR1czo6QmxvY2tlZCkKKyAgICAgICAgICAgIGlmIChwYWdlLT51c2VyQ29udGVudFBy
b3ZpZGVyKCkucHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQocmVxdWVzdCwgbV9y
ZXNvdXJjZVR5cGUsICptX2RvY3VtZW50TG9hZGVyKSA9PSBDb250ZW50RXh0ZW5zaW9uczo6Qmxv
Y2tlZFN0YXR1czo6QmxvY2tlZCkKICAgICAgICAgICAgICAgICByZXF1ZXN0ID0geyB9OwogICAg
ICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJl
c291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NDIsOCArNTQyLDggQEAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3Vy
Y2U+IENhYwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogI2lmIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCi0gICAgaWYgKGZyYW1lKCkgJiYgZnJhbWUoKS0+bWFpbkZyYW1lKCkucGFnZSgp
ICYmIGZyYW1lKCktPm1haW5GcmFtZSgpLnBhZ2UoKS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkg
JiYgbV9kb2N1bWVudExvYWRlcikgewotICAgICAgICBpZiAoZnJhbWUoKS0+bWFpbkZyYW1lKCku
cGFnZSgpLT51c2VyQ29udGVudENvbnRyb2xsZXIoKS0+cHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25S
dWxlc0ZvckxvYWQocmVxdWVzdC5tdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCksIHRvUmVzb3VyY2VU
eXBlKHR5cGUpLCAqbV9kb2N1bWVudExvYWRlcikgPT0gQ29udGVudEV4dGVuc2lvbnM6OkJsb2Nr
ZWRTdGF0dXM6OkJsb2NrZWQpIHsKKyAgICBpZiAoZnJhbWUoKSAmJiBmcmFtZSgpLT5tYWluRnJh
bWUoKS5wYWdlKCkgJiYgbV9kb2N1bWVudExvYWRlcikgeworICAgICAgICBpZiAoZnJhbWUoKS0+
bWFpbkZyYW1lKCkucGFnZSgpLT51c2VyQ29udGVudFByb3ZpZGVyKCkucHJvY2Vzc0NvbnRlbnRF
eHRlbnNpb25SdWxlc0ZvckxvYWQocmVxdWVzdC5tdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCksIHRv
UmVzb3VyY2VUeXBlKHR5cGUpLCAqbV9kb2N1bWVudExvYWRlcikgPT0gQ29udGVudEV4dGVuc2lv
bnM6OkJsb2NrZWRTdGF0dXM6OkJsb2NrZWQpIHsKICAgICAgICAgICAgIGlmICh0eXBlID09IENh
Y2hlZFJlc291cmNlOjpUeXBlOjpNYWluUmVzb3VyY2UpIHsKICAgICAgICAgICAgICAgICBhdXRv
IHJlc291cmNlID0gY3JlYXRlUmVzb3VyY2UodHlwZSwgcmVxdWVzdC5tdXRhYmxlUmVzb3VyY2VS
ZXF1ZXN0KCksIHJlcXVlc3QuY2hhcnNldCgpLCBzZXNzaW9uSUQoKSk7CiAgICAgICAgICAgICAg
ICAgQVNTRVJUKHJlc291cmNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHJl
dmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzYxLDE1ICs3NjEsNyBAQCBib29sIERPTVdpbmRvdzo6c2hvdWxkSGF2
ZVdlYktpdE5hbWVzcGFjCiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBhdXRvKiB1c2VyQ29udGVudENvbnRyb2xsZXIgPSBwYWdlLT51c2VyQ29udGVudENvbnRy
b2xsZXIoKTsKLSAgICBpZiAoIXVzZXJDb250ZW50Q29udHJvbGxlcikKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgYXV0byogZGVzY3JpcHRvck1hcCA9IHVzZXJDb250ZW50Q29udHJvbGxl
ci0+dXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMoKTsKLSAgICBpZiAoIWRlc2NyaXB0b3JN
YXApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZvciAoYXV0byYgZGVzY3JpcHRvciA6
IGRlc2NyaXB0b3JNYXAtPnZhbHVlcygpKSB7CisgICAgZm9yIChhdXRvJiBkZXNjcmlwdG9yIDog
cGFnZS0+dXNlckNvbnRlbnRQcm92aWRlcigpLnVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3Jz
KCkudmFsdWVzKCkpIHsKICAgICAgICAgaWYgKCZkZXNjcmlwdG9yLT53b3JsZCgpID09ICZ3b3Js
ZCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTIxNjgsMTEgKzIxNjAsMTAg
QEAgUGFzc1JlZlB0cjxET01XaW5kb3c+IERPTVdpbmRvdzo6b3BlbihjbwogI2lmIEVOQUJMRShD
T05URU5UX0VYVEVOU0lPTlMpCiAgICAgaWYgKGZpcnN0RnJhbWUtPmRvY3VtZW50KCkKICAgICAg
ICAgJiYgZmlyc3RGcmFtZS0+bWFpbkZyYW1lKCkucGFnZSgpCi0gICAgICAgICYmIGZpcnN0RnJh
bWUtPm1haW5GcmFtZSgpLnBhZ2UoKS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkKICAgICAgICAg
JiYgZmlyc3RGcmFtZS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKQogICAgICAgICAmJiBmaXJzdEZy
YW1lLT5tYWluRnJhbWUoKS5kb2N1bWVudCgpLT5sb2FkZXIoKSkgewotICAgICAgICBSZXNvdXJj
ZUxvYWRJbmZvIHJlc291cmNlTG9hZEluZm8gPSB7Zmlyc3RGcmFtZS0+ZG9jdW1lbnQoKS0+Y29t
cGxldGVVUkwodXJsU3RyaW5nKSwgZmlyc3RGcmFtZS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKS0+
dXJsKCksIFJlc291cmNlVHlwZTo6UG9wdXB9OwotICAgICAgICBWZWN0b3I8Q29udGVudEV4dGVu
c2lvbnM6OkFjdGlvbj4gYWN0aW9ucyA9IGZpcnN0RnJhbWUtPm1haW5GcmFtZSgpLnBhZ2UoKS0+
dXNlckNvbnRlbnRDb250cm9sbGVyKCktPmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQocmVzb3VyY2VM
b2FkSW5mbywgKmZpcnN0RnJhbWUtPm1haW5GcmFtZSgpLmRvY3VtZW50KCktPmxvYWRlcigpKTsK
KyAgICAgICAgUmVzb3VyY2VMb2FkSW5mbyByZXNvdXJjZUxvYWRJbmZvID0geyBmaXJzdEZyYW1l
LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1cmxTdHJpbmcpLCBmaXJzdEZyYW1lLT5tYWluRnJh
bWUoKS5kb2N1bWVudCgpLT51cmwoKSwgUmVzb3VyY2VUeXBlOjpQb3B1cCB9OworICAgICAgICBW
ZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbj4gYWN0aW9ucyA9IGZpcnN0RnJhbWUtPm1h
aW5GcmFtZSgpLnBhZ2UoKS0+dXNlckNvbnRlbnRQcm92aWRlcigpLmFjdGlvbnNGb3JSZXNvdXJj
ZUxvYWQocmVzb3VyY2VMb2FkSW5mbywgKmZpcnN0RnJhbWUtPm1haW5GcmFtZSgpLmRvY3VtZW50
KCktPmxvYWRlcigpKTsKICAgICAgICAgZm9yIChjb25zdCBDb250ZW50RXh0ZW5zaW9uczo6QWN0
aW9uJiBhY3Rpb24gOiBhY3Rpb25zKSB7CiAgICAgICAgICAgICBpZiAoYWN0aW9uLnR5cGUoKSA9
PSBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkKQogICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDE5
ODE0NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02ODksMzUgKzY4OSwxNyBAQCB2b2lkIEZyYW1lOjppbmplY3RVc2VyU2NyaXB0cyhVc2VyU2Ny
aXB0CiAgICAgaWYgKGxvYWRlcigpLnN0YXRlTWFjaGluZSgpLmNyZWF0aW5nSW5pdGlhbEVtcHR5
RG9jdW1lbnQoKSAmJiAhc2V0dGluZ3MoKS5zaG91bGRJbmplY3RVc2VyU2NyaXB0c0luSW5pdGlh
bEVtcHR5RG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgYXV0byogdXNl
ckNvbnRlbnRDb250cm9sbGVyID0gbV9wYWdlLT51c2VyQ29udGVudENvbnRyb2xsZXIoKTsKLSAg
ICBpZiAoIXVzZXJDb250ZW50Q29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
V2FsayB0aGUgaGFzaHRhYmxlLiBJbmplY3QgYnkgd29ybGQuCi0gICAgY29uc3QgVXNlclNjcmlw
dE1hcCogdXNlclNjcmlwdHMgPSB1c2VyQ29udGVudENvbnRyb2xsZXItPnVzZXJTY3JpcHRzKCk7
Ci0gICAgaWYgKCF1c2VyU2NyaXB0cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChjb25z
dCBhdXRvJiB3b3JsZEFuZFVzZXJTY3JpcHQgOiAqdXNlclNjcmlwdHMpCi0gICAgICAgIGluamVj
dFVzZXJTY3JpcHRzRm9yV29ybGQoKndvcmxkQW5kVXNlclNjcmlwdC5rZXksICp3b3JsZEFuZFVz
ZXJTY3JpcHQudmFsdWUsIGluamVjdGlvblRpbWUpOwotfQotCi12b2lkIEZyYW1lOjppbmplY3RV
c2VyU2NyaXB0c0ZvcldvcmxkKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIGNvbnN0IFVzZXJTY3Jp
cHRWZWN0b3ImIHVzZXJTY3JpcHRzLCBVc2VyU2NyaXB0SW5qZWN0aW9uVGltZSBpbmplY3Rpb25U
aW1lKQotewotICAgIGlmICh1c2VyU2NyaXB0cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIERvY3VtZW50KiBkb2MgPSBkb2N1bWVudCgpOwotICAgIGlmICghZG9jKQorICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChhdXRvJiBzY3JpcHQgOiB1c2VyU2NyaXB0cykg
ewotICAgICAgICBpZiAoc2NyaXB0LT5pbmplY3RlZEZyYW1lcygpID09IEluamVjdEluVG9wRnJh
bWVPbmx5ICYmIG93bmVyRWxlbWVudCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgaWYgKHNjcmlwdC0+aW5qZWN0aW9uVGltZSgpID09IGluamVjdGlvblRpbWUgJiYgVXNlckNv
bnRlbnRVUkxQYXR0ZXJuOjptYXRjaGVzUGF0dGVybnMoZG9jLT51cmwoKSwgc2NyaXB0LT53aGl0
ZWxpc3QoKSwgc2NyaXB0LT5ibGFja2xpc3QoKSkpCi0gICAgICAgICAgICBtX3NjcmlwdC0+ZXZh
bHVhdGVJbldvcmxkKFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0LT5zb3VyY2UoKSwgc2NyaXB0LT51
cmwoKSksIHdvcmxkKTsKLSAgICB9CisgICAgbV9wYWdlLT51c2VyQ29udGVudFByb3ZpZGVyKCku
Zm9yRWFjaFVzZXJTY3JpcHQoWyZdKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIGNvbnN0IFVzZXJT
Y3JpcHQmIHNjcmlwdCkgeworICAgICAgICBpZiAoc2NyaXB0LmluamVjdGVkRnJhbWVzKCkgPT0g
SW5qZWN0SW5Ub3BGcmFtZU9ubHkgJiYgb3duZXJFbGVtZW50KCkpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgaWYgKHNjcmlwdC5pbmplY3Rpb25UaW1lKCkgPT0gaW5qZWN0aW9uVGlt
ZSAmJiBVc2VyQ29udGVudFVSTFBhdHRlcm46Om1hdGNoZXNQYXR0ZXJucyhkb2N1bWVudC0+dXJs
KCksIHNjcmlwdC53aGl0ZWxpc3QoKSwgc2NyaXB0LmJsYWNrbGlzdCgpKSkKKyAgICAgICAgICAg
IG1fc2NyaXB0LT5ldmFsdWF0ZUluV29ybGQoU2NyaXB0U291cmNlQ29kZShzY3JpcHQuc291cmNl
KCksIHNjcmlwdC51cmwoKSksIHdvcmxkKTsKKyAgICB9KTsKIH0KIAogUmVuZGVyVmlldyogRnJh
bWU6OmNvbnRlbnRSZW5kZXJlcigpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCShyZXZpc2lv
biAxOTgxNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4MCw4ICsyODAsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEZyYW1lKFBh
Z2UmLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqLCBGcmFtZUxvYWRlckNsaWVudCYpOwogCiAgICAg
cHJpdmF0ZToKLSAgICAgICAgdm9pZCBpbmplY3RVc2VyU2NyaXB0c0ZvcldvcmxkKERPTVdyYXBw
ZXJXb3JsZCYsIGNvbnN0IFVzZXJTY3JpcHRWZWN0b3ImLCBVc2VyU2NyaXB0SW5qZWN0aW9uVGlt
ZSk7Ci0KICAgICAgICAgSGFzaFNldDxGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIqPiBtX2Rlc3Ry
dWN0aW9uT2JzZXJ2ZXJzOwogCiAgICAgICAgIE1haW5GcmFtZSYgbV9tYWluRnJhbWU7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZS5jcHAJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAKICNpbmNsdWRlICJT
dHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3ViZnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJU
ZXh0UmVzb3VyY2VEZWNvZGVyLmgiCi0jaW5jbHVkZSAiVXNlckNvbnRlbnRDb250cm9sbGVyLmgi
CisjaW5jbHVkZSAiVXNlckNvbnRlbnRQcm92aWRlci5oIgogI2luY2x1ZGUgIlVzZXJJbnB1dEJy
aWRnZS5oIgogI2luY2x1ZGUgIlZpZXdTdGF0ZUNoYW5nZU9ic2VydmVyLmgiCiAjaW5jbHVkZSAi
VmlzaXRlZExpbmtTdGF0ZS5oIgpAQCAtMjMxLDcgKzIzMSw3IEBAIFBhZ2U6OlBhZ2UoUGFnZUNv
bmZpZ3VyYXRpb24mIHBhZ2VDb25maWcKICAgICAsIG1fYXBwbGljYXRpb25DYWNoZVN0b3JhZ2Uo
cGFnZUNvbmZpZ3VyYXRpb24uYXBwbGljYXRpb25DYWNoZVN0b3JhZ2UgPyAqV1RGTW92ZShwYWdl
Q29uZmlndXJhdGlvbi5hcHBsaWNhdGlvbkNhY2hlU3RvcmFnZSkgOiBBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6c2luZ2xldG9uKCkpCiAgICAgLCBtX2RhdGFiYXNlUHJvdmlkZXIoKldURk1vdmUo
cGFnZUNvbmZpZ3VyYXRpb24uZGF0YWJhc2VQcm92aWRlcikpCiAgICAgLCBtX3N0b3JhZ2VOYW1l
c3BhY2VQcm92aWRlcigqV1RGTW92ZShwYWdlQ29uZmlndXJhdGlvbi5zdG9yYWdlTmFtZXNwYWNl
UHJvdmlkZXIpKQotICAgICwgbV91c2VyQ29udGVudENvbnRyb2xsZXIoV1RGTW92ZShwYWdlQ29u
ZmlndXJhdGlvbi51c2VyQ29udGVudENvbnRyb2xsZXIpKQorICAgICwgbV91c2VyQ29udGVudFBy
b3ZpZGVyKCpXVEZNb3ZlKHBhZ2VDb25maWd1cmF0aW9uLnVzZXJDb250ZW50UHJvdmlkZXIpKQog
ICAgICwgbV92aXNpdGVkTGlua1N0b3JlKCpXVEZNb3ZlKHBhZ2VDb25maWd1cmF0aW9uLnZpc2l0
ZWRMaW5rU3RvcmUpKQogICAgICwgbV9zZXNzaW9uSUQoU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lv
bklEKCkpCiAgICAgLCBtX2lzQ2xvc2luZyhmYWxzZSkKQEAgLTI0MCw5ICsyNDAsNyBAQCBQYWdl
OjpQYWdlKFBhZ2VDb25maWd1cmF0aW9uJiBwYWdlQ29uZmlnCiAKICAgICBtX3N0b3JhZ2VOYW1l
c3BhY2VQcm92aWRlci0+YWRkUGFnZSgqdGhpcyk7CiAKLSAgICBpZiAobV91c2VyQ29udGVudENv
bnRyb2xsZXIpCi0gICAgICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5hZGRQYWdlKCp0aGlz
KTsKLQorICAgIG1fdXNlckNvbnRlbnRQcm92aWRlci0+YWRkUGFnZSgqdGhpcyk7CiAgICAgbV92
aXNpdGVkTGlua1N0b3JlLT5hZGRQYWdlKCp0aGlzKTsKIAogICAgIGlmICghYWxsUGFnZXMpIHsK
QEAgLTI5OCw5ICsyOTYsNyBAQCBQYWdlOjp+UGFnZSgpCiAjZW5kaWYKIAogICAgIG1fc3RvcmFn
ZU5hbWVzcGFjZVByb3ZpZGVyLT5yZW1vdmVQYWdlKCp0aGlzKTsKLQotICAgIGlmIChtX3VzZXJD
b250ZW50Q29udHJvbGxlcikKLSAgICAgICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPnJlbW92
ZVBhZ2UoKnRoaXMpOworICAgIG1fdXNlckNvbnRlbnRQcm92aWRlci0+cmVtb3ZlUGFnZSgqdGhp
cyk7CiAgICAgbV92aXNpdGVkTGlua1N0b3JlLT5yZW1vdmVQYWdlKCp0aGlzKTsKIH0KIApAQCAt
MTgxOSwxNSArMTgxNSwxNiBAQCBib29sIFBhZ2U6OmFyZVByb21wdHNBbGxvd2VkKCkKICAgICBy
ZXR1cm4gIW1fZm9yYmlkUHJvbXB0c0RlcHRoOwogfQogCi12b2lkIFBhZ2U6OnNldFVzZXJDb250
ZW50Q29udHJvbGxlcihVc2VyQ29udGVudENvbnRyb2xsZXIqIHVzZXJDb250ZW50Q29udHJvbGxl
cikKK1VzZXJDb250ZW50UHJvdmlkZXImIFBhZ2U6OnVzZXJDb250ZW50UHJvdmlkZXIoKQogewot
ICAgIGlmIChtX3VzZXJDb250ZW50Q29udHJvbGxlcikKLSAgICAgICAgbV91c2VyQ29udGVudENv
bnRyb2xsZXItPnJlbW92ZVBhZ2UoKnRoaXMpOwotCi0gICAgbV91c2VyQ29udGVudENvbnRyb2xs
ZXIgPSB1c2VyQ29udGVudENvbnRyb2xsZXI7CisgICAgcmV0dXJuIG1fdXNlckNvbnRlbnRQcm92
aWRlcjsKK30KIAotICAgIGlmIChtX3VzZXJDb250ZW50Q29udHJvbGxlcikKLSAgICAgICAgbV91
c2VyQ29udGVudENvbnRyb2xsZXItPmFkZFBhZ2UoKnRoaXMpOwordm9pZCBQYWdlOjpzZXRVc2Vy
Q29udGVudFByb3ZpZGVyKFJlZjxVc2VyQ29udGVudFByb3ZpZGVyPiYmIHVzZXJDb250ZW50UHJv
dmlkZXIpCit7CisgICAgbV91c2VyQ29udGVudFByb3ZpZGVyLT5yZW1vdmVQYWdlKCp0aGlzKTsK
KyAgICBtX3VzZXJDb250ZW50UHJvdmlkZXIgPSBXVEZNb3ZlKHVzZXJDb250ZW50UHJvdmlkZXIp
OworICAgIG1fdXNlckNvbnRlbnRQcm92aWRlci0+YWRkUGFnZSgqdGhpcyk7CiAKICAgICBpbnZh
bGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lcygpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmgJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIxLDcgQEAgY2xhc3MgU2Nyb2xsaW5nQ29vcmRp
bmF0b3I7CiBjbGFzcyBTZXR0aW5nczsKIGNsYXNzIFN0b3JhZ2VOYW1lc3BhY2U7CiBjbGFzcyBT
dG9yYWdlTmFtZXNwYWNlUHJvdmlkZXI7Ci1jbGFzcyBVc2VyQ29udGVudENvbnRyb2xsZXI7Citj
bGFzcyBVc2VyQ29udGVudFByb3ZpZGVyOwogY2xhc3MgVmFsaWRhdGlvbk1lc3NhZ2VDbGllbnQ7
CiBjbGFzcyBWaWV3U3RhdGVDaGFuZ2VPYnNlcnZlcjsKIGNsYXNzIFZpc2l0ZWRMaW5rU3RvcmU7
CkBAIC00NTAsOCArNDUwLDggQEAgcHVibGljOgogICAgIFN0b3JhZ2VOYW1lc3BhY2VQcm92aWRl
ciYgc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyKCkgeyByZXR1cm4gbV9zdG9yYWdlTmFtZXNwYWNl
UHJvdmlkZXIuZ2V0KCk7IH0KICAgICB2b2lkIHNldFN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcihS
ZWY8U3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyPiYmKTsKIAotICAgIFVzZXJDb250ZW50Q29udHJv
bGxlciogdXNlckNvbnRlbnRDb250cm9sbGVyKCkgeyByZXR1cm4gbV91c2VyQ29udGVudENvbnRy
b2xsZXIuZ2V0KCk7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFVzZXJDb250ZW50Q29u
dHJvbGxlcihVc2VyQ29udGVudENvbnRyb2xsZXIqKTsKKyAgICBVc2VyQ29udGVudFByb3ZpZGVy
JiB1c2VyQ29udGVudFByb3ZpZGVyKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRVc2Vy
Q29udGVudFByb3ZpZGVyKFJlZjxVc2VyQ29udGVudFByb3ZpZGVyPiYmKTsKIAogICAgIFZpc2l0
ZWRMaW5rU3RvcmUmIHZpc2l0ZWRMaW5rU3RvcmUoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldFZpc2l0ZWRMaW5rU3RvcmUoUmVmPFZpc2l0ZWRMaW5rU3RvcmU+JiYpOwpAQCAtNjc2LDcg
KzY3Niw3IEBAIHByaXZhdGU6CiAgICAgUmVmPEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlPiBtX2Fw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOwogICAgIFJlZjxEYXRhYmFzZVByb3ZpZGVyPiBtX2RhdGFi
YXNlUHJvdmlkZXI7CiAgICAgUmVmPFN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcj4gbV9zdG9yYWdl
TmFtZXNwYWNlUHJvdmlkZXI7Ci0gICAgUmVmUHRyPFVzZXJDb250ZW50Q29udHJvbGxlcj4gbV91
c2VyQ29udGVudENvbnRyb2xsZXI7CisgICAgUmVmPFVzZXJDb250ZW50UHJvdmlkZXI+IG1fdXNl
ckNvbnRlbnRQcm92aWRlcjsKICAgICBSZWY8VmlzaXRlZExpbmtTdG9yZT4gbV92aXNpdGVkTGlu
a1N0b3JlOwogICAgIFJlZlB0cjxXaGVlbEV2ZW50VGVzdFRyaWdnZXI+IG1fdGVzdFRyaWdnZXI7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbmZpZ3VyYXRpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25maWd1cmF0aW9uLmgJKHJldmlzaW9u
IDE5ODE0NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbmZpZ3VyYXRpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBjbGFzcyBJbnNwZWN0b3JDbGllbnQ7CiBjbGFz
cyBQbHVnSW5DbGllbnQ7CiBjbGFzcyBQcm9ncmVzc1RyYWNrZXJDbGllbnQ7CiBjbGFzcyBTdG9y
YWdlTmFtZXNwYWNlUHJvdmlkZXI7Ci1jbGFzcyBVc2VyQ29udGVudENvbnRyb2xsZXI7CitjbGFz
cyBVc2VyQ29udGVudFByb3ZpZGVyOwogY2xhc3MgVmFsaWRhdGlvbk1lc3NhZ2VDbGllbnQ7CiBj
bGFzcyBWaXNpdGVkTGlua1N0b3JlOwogCkBAIC04NCw3ICs4NCw3IEBAIHB1YmxpYzoKICAgICBS
ZWZQdHI8QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U+IGFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOwog
ICAgIFJlZlB0cjxEYXRhYmFzZVByb3ZpZGVyPiBkYXRhYmFzZVByb3ZpZGVyOwogICAgIFJlZlB0
cjxTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXI+IHN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcjsKLSAg
ICBSZWZQdHI8VXNlckNvbnRlbnRDb250cm9sbGVyPiB1c2VyQ29udGVudENvbnRyb2xsZXI7Cisg
ICAgUmVmUHRyPFVzZXJDb250ZW50UHJvdmlkZXI+IHVzZXJDb250ZW50UHJvdmlkZXI7CiAgICAg
UmVmUHRyPFZpc2l0ZWRMaW5rU3RvcmU+IHZpc2l0ZWRMaW5rU3RvcmU7CiB9OwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCShyZXZpc2lv
biAxOTgxNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDI0ICsyNywxNSBAQAogI2luY2x1ZGUgIlVzZXJDb250
ZW50Q29udHJvbGxlci5oIgogCiAjaW5jbHVkZSAiRE9NV3JhcHBlcldvcmxkLmgiCi0jaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkV4
dGVuc2lvblN0eWxlU2hlZXRzLmgiCi0jaW5jbHVkZSAiTWFpbkZyYW1lLmgiCi0jaW5jbHVkZSAi
UGFnZS5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZEluZm8uaCIKICNpbmNsdWRlICJVc2VyU2Ny
aXB0LmgiCiAjaW5jbHVkZSAiVXNlclN0eWxlU2hlZXQuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pT
Q2VsbElubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaD4KIAog
I2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCiAjaW5jbHVkZSAiVXNlck1lc3NhZ2VI
YW5kbGVyRGVzY3JpcHRvci5oIgogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJ
T05TKQotI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25Db21waWxlci5oIgotI2luY2x1ZGUgIkNv
bnRlbnRFeHRlbnNpb25zQmFja2VuZC5oIgorI2luY2x1ZGUgIkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbi5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTYyLDM2ICs1MywzMyBA
QCBVc2VyQ29udGVudENvbnRyb2xsZXI6On5Vc2VyQ29udGVudENvbnRyCiB7CiB9CiAKLXZvaWQg
VXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRQYWdlKFBhZ2UmIHBhZ2UpCit2b2lkIFVzZXJDb250
ZW50Q29udHJvbGxlcjo6Zm9yRWFjaFVzZXJTY3JpcHQoY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lk
KERPTVdyYXBwZXJXb3JsZCYsIGNvbnN0IFVzZXJTY3JpcHQmKT4mIGZ1bmN0b3IpIGNvbnN0CiB7
Ci0gICAgQVNTRVJUKCFtX3BhZ2VzLmNvbnRhaW5zKCZwYWdlKSk7Ci0gICAgbV9wYWdlcy5hZGQo
JnBhZ2UpOworICAgIGZvciAoY29uc3QgYXV0byYgd29ybGRBbmRVc2VyU2NyaXB0VmVjdG9yIDog
bV91c2VyU2NyaXB0cykgeworICAgICAgICBhdXRvJiB3b3JsZCA9ICp3b3JsZEFuZFVzZXJTY3Jp
cHRWZWN0b3Iua2V5LmdldCgpOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHVzZXJTY3JpcHQg
OiAqd29ybGRBbmRVc2VyU2NyaXB0VmVjdG9yLnZhbHVlKQorICAgICAgICAgICAgZnVuY3Rvcih3
b3JsZCwgKnVzZXJTY3JpcHQpOworICAgIH0KIH0KIAotdm9pZCBVc2VyQ29udGVudENvbnRyb2xs
ZXI6OnJlbW92ZVBhZ2UoUGFnZSYgcGFnZSkKK3ZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjpm
b3JFYWNoVXNlclN0eWxlU2hlZXQoY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFVzZXJT
dHlsZVNoZWV0Jik+JiBmdW5jdG9yKSBjb25zdAogewotICAgIEFTU0VSVChtX3BhZ2VzLmNvbnRh
aW5zKCZwYWdlKSk7Ci0gICAgbV9wYWdlcy5yZW1vdmUoJnBhZ2UpOworICAgIGZvciAoYXV0byYg
c3R5bGVTaGVldFZlY3RvciA6IG1fdXNlclN0eWxlU2hlZXRzLnZhbHVlcygpKSB7CisgICAgICAg
IGZvciAoY29uc3QgYXV0byYgc3R5bGVTaGVldCA6ICpzdHlsZVNoZWV0VmVjdG9yKQorICAgICAg
ICAgICAgZnVuY3Rvcigqc3R5bGVTaGVldCk7CisgICAgfQogfQogCiB2b2lkIFVzZXJDb250ZW50
Q29udHJvbGxlcjo6YWRkVXNlclNjcmlwdChET01XcmFwcGVyV29ybGQmIHdvcmxkLCBzdGQ6OnVu
aXF1ZV9wdHI8VXNlclNjcmlwdD4gdXNlclNjcmlwdCkKIHsKLSAgICBpZiAoIW1fdXNlclNjcmlw
dHMpCi0gICAgICAgIG1fdXNlclNjcmlwdHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFVzZXJTY3JpcHRN
YXA+KCk7Ci0KLSAgICBhdXRvJiBzY3JpcHRzSW5Xb3JsZCA9IG1fdXNlclNjcmlwdHMtPmFkZCgm
d29ybGQsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKLSAgICBpZiAoIXNjcmlwdHNJbldvcmxk
KQotICAgICAgICBzY3JpcHRzSW5Xb3JsZCA9IHN0ZDo6bWFrZV91bmlxdWU8VXNlclNjcmlwdFZl
Y3Rvcj4oKTsKKyAgICBhdXRvJiBzY3JpcHRzSW5Xb3JsZCA9IG1fdXNlclNjcmlwdHMuZW5zdXJl
KCZ3b3JsZCwgWyZdIHsgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VXNlclNjcmlwdFZlY3Rvcj4o
KTsgfSkuaXRlcmF0b3ItPnZhbHVlOwogICAgIHNjcmlwdHNJbldvcmxkLT5hcHBlbmQoV1RGTW92
ZSh1c2VyU2NyaXB0KSk7CiB9CiAKIHZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVV
c2VyU2NyaXB0KERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIGNvbnN0IFVSTCYgdXJsKQogewotICAg
IGlmICghbV91c2VyU2NyaXB0cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBpdCA9IG1f
dXNlclNjcmlwdHMtPmZpbmQoJndvcmxkKTsKLSAgICBpZiAoaXQgPT0gbV91c2VyU2NyaXB0cy0+
ZW5kKCkpCisgICAgYXV0byBpdCA9IG1fdXNlclNjcmlwdHMuZmluZCgmd29ybGQpOworICAgIGlm
IChpdCA9PSBtX3VzZXJTY3JpcHRzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRv
IHNjcmlwdHMgPSBpdC0+dmFsdWUuZ2V0KCk7CkBAIC0xMDEsMjUgKzg5LDE3IEBAIHZvaWQgVXNl
ckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU2MKICAgICB9CiAKICAgICBpZiAoc2NyaXB0
cy0+aXNFbXB0eSgpKQotICAgICAgICBtX3VzZXJTY3JpcHRzLT5yZW1vdmUoaXQpOworICAgICAg
ICBtX3VzZXJTY3JpcHRzLnJlbW92ZShpdCk7CiB9CiAKIHZvaWQgVXNlckNvbnRlbnRDb250cm9s
bGVyOjpyZW1vdmVVc2VyU2NyaXB0cyhET01XcmFwcGVyV29ybGQmIHdvcmxkKQogewotICAgIGlm
ICghbV91c2VyU2NyaXB0cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV91c2VyU2NyaXB0cy0+
cmVtb3ZlKCZ3b3JsZCk7CisgICAgbV91c2VyU2NyaXB0cy5yZW1vdmUoJndvcmxkKTsKIH0KIAog
dm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNoZWV0KERPTVdyYXBwZXJX
b3JsZCYgd29ybGQsIHN0ZDo6dW5pcXVlX3B0cjxVc2VyU3R5bGVTaGVldD4gdXNlclN0eWxlU2hl
ZXQsIFVzZXJTdHlsZUluamVjdGlvblRpbWUgaW5qZWN0aW9uVGltZSkKIHsKLSAgICBpZiAoIW1f
dXNlclN0eWxlU2hlZXRzKQotICAgICAgICBtX3VzZXJTdHlsZVNoZWV0cyA9IHN0ZDo6bWFrZV91
bmlxdWU8VXNlclN0eWxlU2hlZXRNYXA+KCk7Ci0KLSAgICBhdXRvJiBzdHlsZVNoZWV0c0luV29y
bGQgPSBtX3VzZXJTdHlsZVNoZWV0cy0+YWRkKCZ3b3JsZCwgbnVsbHB0cikuaXRlcmF0b3ItPnZh
bHVlOwotICAgIGlmICghc3R5bGVTaGVldHNJbldvcmxkKQotICAgICAgICBzdHlsZVNoZWV0c0lu
V29ybGQgPSBzdGQ6Om1ha2VfdW5pcXVlPFVzZXJTdHlsZVNoZWV0VmVjdG9yPigpOworICAgIGF1
dG8mIHN0eWxlU2hlZXRzSW5Xb3JsZCA9IG1fdXNlclN0eWxlU2hlZXRzLmVuc3VyZSgmd29ybGQs
IFsmXSB7IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFVzZXJTdHlsZVNoZWV0VmVjdG9yPigpOyB9
KS5pdGVyYXRvci0+dmFsdWU7CiAgICAgc3R5bGVTaGVldHNJbldvcmxkLT5hcHBlbmQoV1RGTW92
ZSh1c2VyU3R5bGVTaGVldCkpOwogCiAgICAgaWYgKGluamVjdGlvblRpbWUgPT0gSW5qZWN0SW5F
eGlzdGluZ0RvY3VtZW50cykKQEAgLTEyOCwxMSArMTA4LDggQEAgdm9pZCBVc2VyQ29udGVudENv
bnRyb2xsZXI6OmFkZFVzZXJTdHlsZQogCiB2b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVt
b3ZlVXNlclN0eWxlU2hlZXQoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgY29uc3QgVVJMJiB1cmwp
CiB7Ci0gICAgaWYgKCFtX3VzZXJTdHlsZVNoZWV0cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
YXV0byBpdCA9IG1fdXNlclN0eWxlU2hlZXRzLT5maW5kKCZ3b3JsZCk7Ci0gICAgaWYgKGl0ID09
IG1fdXNlclN0eWxlU2hlZXRzLT5lbmQoKSkKKyAgICBhdXRvIGl0ID0gbV91c2VyU3R5bGVTaGVl
dHMuZmluZCgmd29ybGQpOworICAgIGlmIChpdCA9PSBtX3VzZXJTdHlsZVNoZWV0cy5lbmQoKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byYgc3R5bGVzaGVldHMgPSAqaXQtPnZhbHVlOwpA
QCAtMTQ5LDE3ICsxMjYsMTQgQEAgdm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVz
ZXJTdAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoc3R5bGVzaGVldHMuaXNFbXB0eSgpKQot
ICAgICAgICBtX3VzZXJTdHlsZVNoZWV0cy0+cmVtb3ZlKGl0KTsKKyAgICAgICAgbV91c2VyU3R5
bGVTaGVldHMucmVtb3ZlKGl0KTsKIAogICAgIGludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRD
YWNoZUluQWxsRnJhbWVzSW5BbGxQYWdlcygpOwogfQogCiB2b2lkIFVzZXJDb250ZW50Q29udHJv
bGxlcjo6cmVtb3ZlVXNlclN0eWxlU2hlZXRzKERPTVdyYXBwZXJXb3JsZCYgd29ybGQpCiB7Ci0g
ICAgaWYgKCFtX3VzZXJTdHlsZVNoZWV0cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFt
X3VzZXJTdHlsZVNoZWV0cy0+cmVtb3ZlKCZ3b3JsZCkpCisgICAgaWYgKCFtX3VzZXJTdHlsZVNo
ZWV0cy5yZW1vdmUoJndvcmxkKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaW52YWxpZGF0ZUlu
amVjdGVkU3R5bGVTaGVldENhY2hlSW5BbGxGcmFtZXNJbkFsbFBhZ2VzKCk7CkBAIC0xNjgsOTUg
KzE0Miw0MCBAQCB2b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclN0CiAjaWYg
RU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKIHZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVy
OjphZGRVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yKFVzZXJNZXNzYWdlSGFuZGxlckRlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IpCiB7Ci0gICAgaWYgKCFtX3VzZXJNZXNzYWdlSGFuZGxlckRlc2Ny
aXB0b3JzKQotICAgICAgICBtX3VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzID0gc3RkOjpt
YWtlX3VuaXF1ZTxVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yTWFwPigpOwotCi0gICAgbV91
c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycy0+YWRkKHN0ZDo6bWFrZV9wYWlyKGRlc2NyaXB0
b3IubmFtZSgpLCAmZGVzY3JpcHRvci53b3JsZCgpKSwgJmRlc2NyaXB0b3IpOworICAgIG1fdXNl
ck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMuYWRkKHN0ZDo6bWFrZV9wYWlyKGRlc2NyaXB0b3Iu
bmFtZSgpLCAmZGVzY3JpcHRvci53b3JsZCgpKSwgJmRlc2NyaXB0b3IpOwogfQogCiB2b2lkIFVz
ZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcihV
c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQogewotICAgIGlmICghbV91
c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV91
c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycy0+cmVtb3ZlKHN0ZDo6bWFrZV9wYWlyKGRlc2Ny
aXB0b3IubmFtZSgpLCAmZGVzY3JpcHRvci53b3JsZCgpKSk7CisgICAgbV91c2VyTWVzc2FnZUhh
bmRsZXJEZXNjcmlwdG9ycy5yZW1vdmUoc3RkOjptYWtlX3BhaXIoZGVzY3JpcHRvci5uYW1lKCks
ICZkZXNjcmlwdG9yLndvcmxkKCkpKTsKIH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKIHZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyQ29udGVudEV4
dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxDb250ZW50RXh0ZW5zaW9uczo6Q29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uPiBjb250ZW50RXh0ZW5zaW9uKQogewotICAgIGlmICghbV9j
b250ZW50RXh0ZW5zaW9uQmFja2VuZCkKLSAgICAgICAgbV9jb250ZW50RXh0ZW5zaW9uQmFja2Vu
ZCA9IHN0ZDo6bWFrZV91bmlxdWU8Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25z
QmFja2VuZD4oKTsKLSAgICAKLSAgICBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kLT5hZGRDb250
ZW50RXh0ZW5zaW9uKG5hbWUsIGNvbnRlbnRFeHRlbnNpb24pOworICAgIG1fY29udGVudEV4dGVu
c2lvbkJhY2tlbmQuYWRkQ29udGVudEV4dGVuc2lvbihuYW1lLCBjb250ZW50RXh0ZW5zaW9uKTsK
IH0KIAogdm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJDb250ZW50RXh0ZW5z
aW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBpZiAoIW1fY29udGVudEV4dGVuc2lvbkJh
Y2tlbmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQt
PnJlbW92ZUNvbnRlbnRFeHRlbnNpb24obmFtZSk7CisgICAgbV9jb250ZW50RXh0ZW5zaW9uQmFj
a2VuZC5yZW1vdmVDb250ZW50RXh0ZW5zaW9uKG5hbWUpOwogfQogCiB2b2lkIFVzZXJDb250ZW50
Q29udHJvbGxlcjo6cmVtb3ZlQWxsVXNlckNvbnRlbnRFeHRlbnNpb25zKCkKIHsKLSAgICBpZiAo
IW1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29u
dGVudEV4dGVuc2lvbkJhY2tlbmQtPnJlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKCk7Ci19Ci0K
LXN0YXRpYyBib29sIGNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZChjb25zdCBEb2N1bWVudExvYWRl
ciYgZG9jdW1lbnRMb2FkZXIpCi17Ci0gICAgaWYgKGF1dG8gZnJhbWUgPSBkb2N1bWVudExvYWRl
ci5mcmFtZSgpKSB7Ci0gICAgICAgIGlmIChmcmFtZS0+aXNNYWluRnJhbWUoKSkKLSAgICAgICAg
ICAgIHJldHVybiBkb2N1bWVudExvYWRlci51c2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkKCk7
Ci0gICAgICAgIGlmIChhdXRvIG1haW5Eb2N1bWVudExvYWRlciA9IGZyYW1lLT5tYWluRnJhbWUo
KS5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpKQotICAgICAgICAgICAgcmV0dXJuIG1haW5Eb2N1
bWVudExvYWRlci0+dXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZCgpOwotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotICAgIAotQ29udGVudEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXMg
VXNlckNvbnRlbnRDb250cm9sbGVyOjpwcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9yTG9h
ZChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlVHlwZSByZXNvdXJjZVR5cGUsIERv
Y3VtZW50TG9hZGVyJiBpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIpCi17Ci0gICAgaWYgKCFtX2Nv
bnRlbnRFeHRlbnNpb25CYWNrZW5kKQotICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbnM6
OkJsb2NrZWRTdGF0dXM6Ok5vdEJsb2NrZWQ7Ci0KLSAgICBpZiAoIWNvbnRlbnRFeHRlbnNpb25z
RW5hYmxlZChpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIpKQotICAgICAgICByZXR1cm4gQ29udGVu
dEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXM6Ok5vdEJsb2NrZWQ7Ci0KLSAgICByZXR1cm4gbV9j
b250ZW50RXh0ZW5zaW9uQmFja2VuZC0+cHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0Zvckxv
YWQocmVxdWVzdCwgcmVzb3VyY2VUeXBlLCBpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIpOwotfQot
Ci1WZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbj4gVXNlckNvbnRlbnRDb250cm9sbGVy
OjphY3Rpb25zRm9yUmVzb3VyY2VMb2FkKGNvbnN0IFJlc291cmNlTG9hZEluZm8mIHJlc291cmNl
TG9hZEluZm8sIERvY3VtZW50TG9hZGVyJiBpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIpCi17Ci0g
ICAgaWYgKCFtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kKQotICAgICAgICByZXR1cm4gVmVjdG9y
PENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb24+KCk7Ci0gICAgCi0gICAgaWYgKCFjb250ZW50RXh0
ZW5zaW9uc0VuYWJsZWQoaW5pdGlhdGluZ0RvY3VtZW50TG9hZGVyKSkKLSAgICAgICAgcmV0dXJu
IFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uPigpOwotCi0gICAgcmV0dXJuIG1fY29u
dGVudEV4dGVuc2lvbkJhY2tlbmQtPmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQocmVzb3VyY2VMb2Fk
SW5mbyk7CisgICAgbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZC5yZW1vdmVBbGxDb250ZW50RXh0
ZW5zaW9ucygpOwogfQogI2VuZGlmCiAKIHZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1v
dmVBbGxVc2VyQ29udGVudCgpCiB7Ci0gICAgbV91c2VyU2NyaXB0cyA9IG51bGxwdHI7CisgICAg
bV91c2VyU2NyaXB0cy5jbGVhcigpOwogCi0gICAgaWYgKG1fdXNlclN0eWxlU2hlZXRzKSB7Ci0g
ICAgICAgIG1fdXNlclN0eWxlU2hlZXRzID0gbnVsbHB0cjsKKyAgICBpZiAoIW1fdXNlclN0eWxl
U2hlZXRzLmlzRW1wdHkoKSkgeworICAgICAgICBtX3VzZXJTdHlsZVNoZWV0cy5jbGVhcigpOwog
ICAgICAgICBpbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lc0luQWxs
UGFnZXMoKTsKICAgICB9CiB9CiAKLXZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjppbnZhbGlk
YXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lc0luQWxsUGFnZXMoKQotewotICAg
IGZvciAoYXV0byYgcGFnZSA6IG1fcGFnZXMpCi0gICAgICAgIHBhZ2UtPmludmFsaWRhdGVJbmpl
Y3RlZFN0eWxlU2hlZXRDYWNoZUluQWxsRnJhbWVzKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnRDb250cm9sbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIu
aAkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudENv
bnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNTggKzI2LDE5IEBACiAjaWZuZGVmIFVz
ZXJDb250ZW50Q29udHJvbGxlcl9oCiAjZGVmaW5lIFVzZXJDb250ZW50Q29udHJvbGxlcl9oCiAK
LSNpbmNsdWRlICJVc2VyU2NyaXB0VHlwZXMuaCIKLSNpbmNsdWRlICJVc2VyU3R5bGVTaGVldFR5
cGVzLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2lmIEVOQUJMRShVU0VSX01FU1NBR0Vf
SEFORExFUlMpCi0jaW5jbHVkZSAiVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvclR5cGVzLmgi
Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0jaW5jbHVkZSAiQ29u
dGVudEV4dGVuc2lvbkFjdGlvbnMuaCIKLSNlbmRpZgorI2luY2x1ZGUgIlVzZXJDb250ZW50UHJv
dmlkZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBET01XcmFwcGVyV29ybGQ7
Ci1jbGFzcyBEb2N1bWVudExvYWRlcjsKLWNsYXNzIFBhZ2U7Ci1jbGFzcyBSZXNvdXJjZVJlcXVl
c3Q7Ci1jbGFzcyBTdHlsZVNoZWV0Q29udGVudHM7Ci1jbGFzcyBVUkw7Ci1jbGFzcyBVc2VyU2Ny
aXB0OwotY2xhc3MgVXNlclN0eWxlU2hlZXQ7Ci1jbGFzcyBVc2VyTWVzc2FnZUhhbmRsZXJEZXNj
cmlwdG9yOwotCi1lbnVtIGNsYXNzIFJlc291cmNlVHlwZSA6IHVpbnQxNl90OwotCi1zdHJ1Y3Qg
UmVzb3VyY2VMb2FkSW5mbzsKLQotbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKLWNsYXNz
IENvbXBpbGVkQ29udGVudEV4dGVuc2lvbjsKLWNsYXNzIENvbnRlbnRFeHRlbnNpb25zQmFja2Vu
ZDsKLXN0cnVjdCBBY3Rpb247Ci19Ci0KLWNsYXNzIFVzZXJDb250ZW50Q29udHJvbGxlciA6IHB1
YmxpYyBSZWZDb3VudGVkPFVzZXJDb250ZW50Q29udHJvbGxlcj4geworY2xhc3MgVXNlckNvbnRl
bnRDb250cm9sbGVyIGZpbmFsIDogcHVibGljIFVzZXJDb250ZW50UHJvdmlkZXIgewogcHVibGlj
OgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8VXNlckNvbnRlbnRDb250cm9sbGVyPiBj
cmVhdGUoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB+VXNlckNvbnRlbnRDb250cm9sbGVyKCk7CiAK
LSAgICB2b2lkIGFkZFBhZ2UoUGFnZSYpOwotICAgIHZvaWQgcmVtb3ZlUGFnZShQYWdlJik7Ci0K
LSAgICBjb25zdCBVc2VyU2NyaXB0TWFwKiB1c2VyU2NyaXB0cygpIGNvbnN0IHsgcmV0dXJuIG1f
dXNlclNjcmlwdHMuZ2V0KCk7IH0KLQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkVXNlclNj
cmlwdChET01XcmFwcGVyV29ybGQmLCBzdGQ6OnVuaXF1ZV9wdHI8VXNlclNjcmlwdD4pOwogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlVXNlclNjcmlwdChET01XcmFwcGVyV29ybGQmLCBj
b25zdCBVUkwmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVVzZXJTY3JpcHRzKERP
TVdyYXBwZXJXb3JsZCYpOwogCi0gICAgY29uc3QgVXNlclN0eWxlU2hlZXRNYXAqIHVzZXJTdHls
ZVNoZWV0cygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlclN0eWxlU2hlZXRzLmdldCgpOyB9Ci0KICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZFVzZXJTdHlsZVNoZWV0KERPTVdyYXBwZXJXb3JsZCYs
IHN0ZDo6dW5pcXVlX3B0cjxVc2VyU3R5bGVTaGVldD4sIFVzZXJTdHlsZUluamVjdGlvblRpbWUp
OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlVXNlclN0eWxlU2hlZXQoRE9NV3JhcHBl
cldvcmxkJiwgY29uc3QgVVJMJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVVc2Vy
U3R5bGVTaGVldHMoRE9NV3JhcHBlcldvcmxkJik7CkBAIC04NSw4ICs0Niw2IEBAIHB1YmxpYzoK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUFsbFVzZXJDb250ZW50KCk7CiAKICNpZiBF
TkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQotICAgIGNvbnN0IFVzZXJNZXNzYWdlSGFuZGxl
ckRlc2NyaXB0b3JNYXAqIHVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzKCkgY29uc3QgeyBy
ZXR1cm4gbV91c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycy5nZXQoKTsgfQotCiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBhZGRVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yKFVzZXJNZXNz
YWdlSGFuZGxlckRlc2NyaXB0b3ImKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVVz
ZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IoVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvciYp
OwogI2VuZGlmCkBAIC05NSwyNSArNTQsMjggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgYWRkVXNlckNvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8
Q29udGVudEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4pOwogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgcmVtb3ZlVXNlckNvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBu
YW1lKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUFsbFVzZXJDb250ZW50RXh0ZW5z
aW9ucygpOwotCi0gICAgQ29udGVudEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXMgcHJvY2Vzc0Nv
bnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQoUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VUeXBl
LCBEb2N1bWVudExvYWRlciYgaW5pdGlhdGluZ0RvY3VtZW50TG9hZGVyKTsKLSAgICBWZWN0b3I8
Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbj4gYWN0aW9uc0ZvclJlc291cmNlTG9hZChjb25zdCBS
ZXNvdXJjZUxvYWRJbmZvJiwgRG9jdW1lbnRMb2FkZXImIGluaXRpYXRpbmdEb2N1bWVudExvYWRl
cik7CiAjZW5kaWYKIAogcHJpdmF0ZToKICAgICBVc2VyQ29udGVudENvbnRyb2xsZXIoKTsKIAot
ICAgIHZvaWQgaW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlSW5BbGxGcmFtZXNJbkFs
bFBhZ2VzKCk7Ci0KLSAgICBIYXNoU2V0PFBhZ2UqPiBtX3BhZ2VzOworICAgIC8vIFVzZXJDb250
ZW50UHJvdmlkZXIKKyAgICB2b2lkIGZvckVhY2hVc2VyU2NyaXB0KGNvbnN0IHN0ZDo6ZnVuY3Rp
b248dm9pZChET01XcmFwcGVyV29ybGQmLCBjb25zdCBVc2VyU2NyaXB0Jik+JikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdm9pZCBmb3JFYWNoVXNlclN0eWxlU2hlZXQoY29uc3Qgc3RkOjpmdW5jdGlv
bjx2b2lkKGNvbnN0IFVzZXJTdHlsZVNoZWV0Jik+JikgY29uc3Qgb3ZlcnJpZGU7CisjaWYgRU5B
QkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKKyAgICBjb25zdCBVc2VyTWVzc2FnZUhhbmRsZXJE
ZXNjcmlwdG9yTWFwJiB1c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycygpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnM7IH0KKyNlbmRpZgor
I2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisgICAgQ29udGVudEV4dGVuc2lvbnM6OkNv
bnRlbnRFeHRlbnNpb25zQmFja2VuZCYgdXNlckNvbnRlbnRFeHRlbnNpb25CYWNrZW5kKCkgb3Zl
cnJpZGUgeyByZXR1cm4gbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZDsgfQorI2VuZGlmCiAKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8VXNlclNjcmlwdE1hcD4gbV91c2VyU2NyaXB0czsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8VXNlclN0eWxlU2hlZXRNYXA+IG1fdXNlclN0eWxlU2hlZXRzOworICAgIFVz
ZXJTY3JpcHRNYXAgbV91c2VyU2NyaXB0czsKKyAgICBVc2VyU3R5bGVTaGVldE1hcCBtX3VzZXJT
dHlsZVNoZWV0czsKICNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQotICAgIHN0ZDo6
dW5pcXVlX3B0cjxVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yTWFwPiBtX3VzZXJNZXNzYWdl
SGFuZGxlckRlc2NyaXB0b3JzOworICAgIFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JNYXAg
bV91c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yczsKICNlbmRpZgogI2lmIEVOQUJMRShDT05U
RU5UX0VYVEVOU0lPTlMpCi0gICAgc3RkOjp1bmlxdWVfcHRyPENvbnRlbnRFeHRlbnNpb25zOjpD
b250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ+IG1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQ7CisgICAg
Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCBtX2NvbnRlbnRFeHRl
bnNpb25CYWNrZW5kOwogI2VuZGlmCiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1Vz
ZXJDb250ZW50UHJvdmlkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
VXNlckNvbnRlbnRQcm92aWRlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL1VzZXJDb250ZW50UHJvdmlkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlVzZXJDb250
ZW50UHJvdmlkZXIuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1l
bnRMb2FkZXIuaCIKKyNpbmNsdWRlICJNYWluRnJhbWUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisK
KyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNp
b25Db21waWxlci5oIgorI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5oIgorI2Vu
ZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVXNlckNvbnRlbnRQcm92aWRlcjo6VXNlckNv
bnRlbnRQcm92aWRlcigpCit7Cit9CisKK1VzZXJDb250ZW50UHJvdmlkZXI6On5Vc2VyQ29udGVu
dFByb3ZpZGVyKCkKK3sKKyAgICBBU1NFUlQobV9wYWdlcy5pc0VtcHR5KCkpOworfQorCit2b2lk
IFVzZXJDb250ZW50UHJvdmlkZXI6OmFkZFBhZ2UoUGFnZSYgcGFnZSkKK3sKKyAgICBBU1NFUlQo
IW1fcGFnZXMuY29udGFpbnMoJnBhZ2UpKTsKKworICAgIG1fcGFnZXMuYWRkKCZwYWdlKTsKK30K
Kwordm9pZCBVc2VyQ29udGVudFByb3ZpZGVyOjpyZW1vdmVQYWdlKFBhZ2UmIHBhZ2UpCit7Cisg
ICAgQVNTRVJUKG1fcGFnZXMuY29udGFpbnMoJnBhZ2UpKTsKKworICAgIG1fcGFnZXMucmVtb3Zl
KCZwYWdlKTsKK30KKwordm9pZCBVc2VyQ29udGVudFByb3ZpZGVyOjppbnZhbGlkYXRlSW5qZWN0
ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lc0luQWxsUGFnZXMoKQoreworICAgIGZvciAoYXV0
byYgcGFnZSA6IG1fcGFnZXMpCisgICAgICAgIHBhZ2UtPmludmFsaWRhdGVJbmplY3RlZFN0eWxl
U2hlZXRDYWNoZUluQWxsRnJhbWVzKCk7Cit9CisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJ
T05TKQorc3RhdGljIGJvb2wgY29udGVudEV4dGVuc2lvbnNFbmFibGVkKGNvbnN0IERvY3VtZW50
TG9hZGVyJiBkb2N1bWVudExvYWRlcikKK3sKKyAgICBpZiAoYXV0byBmcmFtZSA9IGRvY3VtZW50
TG9hZGVyLmZyYW1lKCkpIHsKKyAgICAgICAgaWYgKGZyYW1lLT5pc01haW5GcmFtZSgpKQorICAg
ICAgICAgICAgcmV0dXJuIGRvY3VtZW50TG9hZGVyLnVzZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJs
ZWQoKTsKKyAgICAgICAgaWYgKGF1dG8gbWFpbkRvY3VtZW50TG9hZGVyID0gZnJhbWUtPm1haW5G
cmFtZSgpLmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkpCisgICAgICAgICAgICByZXR1cm4gbWFp
bkRvY3VtZW50TG9hZGVyLT51c2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkKCk7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisgICAgCitDb250ZW50RXh0ZW5zaW9uczo6QmxvY2tlZFN0
YXR1cyBVc2VyQ29udGVudFByb3ZpZGVyOjpwcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9y
TG9hZChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlVHlwZSByZXNvdXJjZVR5cGUs
IERvY3VtZW50TG9hZGVyJiBpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIpCit7CisgICAgaWYgKCFj
b250ZW50RXh0ZW5zaW9uc0VuYWJsZWQoaW5pdGlhdGluZ0RvY3VtZW50TG9hZGVyKSkKKyAgICAg
ICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzOjpOb3RCbG9ja2VkOwor
CisgICAgcmV0dXJuIHVzZXJDb250ZW50RXh0ZW5zaW9uQmFja2VuZCgpLnByb2Nlc3NDb250ZW50
RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKHJlcXVlc3QsIHJlc291cmNlVHlwZSwgaW5pdGlhdGluZ0Rv
Y3VtZW50TG9hZGVyKTsKK30KKworVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb24+IFVz
ZXJDb250ZW50UHJvdmlkZXI6OmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQoY29uc3QgUmVzb3VyY2VM
b2FkSW5mbyYgcmVzb3VyY2VMb2FkSW5mbywgRG9jdW1lbnRMb2FkZXImIGluaXRpYXRpbmdEb2N1
bWVudExvYWRlcikKK3sKKyAgICBpZiAoIWNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZChpbml0aWF0
aW5nRG9jdW1lbnRMb2FkZXIpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIHVz
ZXJDb250ZW50RXh0ZW5zaW9uQmFja2VuZCgpLmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQocmVzb3Vy
Y2VMb2FkSW5mbyk7Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudFByb3ZpZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudFByb3ZpZGVyLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50UHJvdmlkZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBVc2VyQ29udGVudFByb3Zp
ZGVyX2gKKyNkZWZpbmUgVXNlckNvbnRlbnRQcm92aWRlcl9oCisKKyNpbmNsdWRlICJVc2VyU2Ny
aXB0VHlwZXMuaCIKKyNpbmNsdWRlICJVc2VyU3R5bGVTaGVldFR5cGVzLmgiCisjaW5jbHVkZSA8
ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworI2lmIEVOQUJMRShVU0VSX01F
U1NBR0VfSEFORExFUlMpCisjaW5jbHVkZSAiVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvclR5
cGVzLmgiCisjZW5kaWYKKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisjaW5jbHVk
ZSAiQ29udGVudEV4dGVuc2lvbkFjdGlvbnMuaCIKKyNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9u
c0JhY2tlbmQuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERvY3Vt
ZW50TG9hZGVyOworY2xhc3MgUGFnZTsKK2NsYXNzIFJlc291cmNlUmVxdWVzdDsKK2NsYXNzIFVS
TDsKKworZW51bSBjbGFzcyBSZXNvdXJjZVR5cGUgOiB1aW50MTZfdDsKKworc3RydWN0IFJlc291
cmNlTG9hZEluZm87CisKK25hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CitjbGFzcyBDb250
ZW50RXh0ZW5zaW9uc0JhY2tlbmQ7CitzdHJ1Y3QgQWN0aW9uOworfQorCitjbGFzcyBVc2VyQ29u
dGVudFByb3ZpZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8VXNlckNvbnRlbnRQcm92aWRlcj4gewor
cHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIFVzZXJDb250ZW50UHJvdmlkZXIoKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5Vc2VyQ29udGVudFByb3ZpZGVyKCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgZm9yRWFjaFVzZXJTY3JpcHQoY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkKERPTVdy
YXBwZXJXb3JsZCYsIGNvbnN0IFVzZXJTY3JpcHQmKT4mKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGZvckVhY2hVc2VyU3R5bGVTaGVldChjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29u
c3QgVXNlclN0eWxlU2hlZXQmKT4mKSBjb25zdCA9IDA7CisKKyNpZiBFTkFCTEUoVVNFUl9NRVNT
QUdFX0hBTkRMRVJTKQorICAgIHZpcnR1YWwgY29uc3QgVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3Jp
cHRvck1hcCYgdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMoKSBjb25zdCA9IDA7CisjZW5k
aWYKKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisgICAgdmlydHVhbCBDb250ZW50
RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kJiB1c2VyQ29udGVudEV4dGVuc2lv
bkJhY2tlbmQoKSA9IDA7CisjZW5kaWYKKworICAgIHZvaWQgYWRkUGFnZShQYWdlJik7CisgICAg
dm9pZCByZW1vdmVQYWdlKFBhZ2UmKTsKKworCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9O
UykKKyAgICAvLyBGSVhNRTogVGhlc2UgZG9uJ3QgcmVhbGx5IGJlbG9uZyBoZXJlLiBUaGV5IHNo
b3VsZCBwcm9iYWJseSBidW5kbGVkIHVwIGluIHRoZSBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQK
KyAgICAvLyB3aGljaCBzaG91bGQgYWx3YXlzIGV4aXN0LgorICAgIENvbnRlbnRFeHRlbnNpb25z
OjpCbG9ja2VkU3RhdHVzIHByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKFJlc291
cmNlUmVxdWVzdCYsIFJlc291cmNlVHlwZSwgRG9jdW1lbnRMb2FkZXImIGluaXRpYXRpbmdEb2N1
bWVudExvYWRlcik7CisgICAgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb24+IGFjdGlv
bnNGb3JSZXNvdXJjZUxvYWQoY29uc3QgUmVzb3VyY2VMb2FkSW5mbyYsIERvY3VtZW50TG9hZGVy
JiBpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIpOworI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZUluQWxs
RnJhbWVzSW5BbGxQYWdlcygpOworCitwcml2YXRlOgorICAgIEhhc2hTZXQ8UGFnZSo+IG1fcGFn
ZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVc2VyQ29udGVu
dFByb3ZpZGVyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlck1lc3NhZ2VIYW5kbGVy
RGVzY3JpcHRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlck1lc3Nh
Z2VIYW5kbGVyRGVzY3JpcHRvci5oCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
NTQsOCArNTQsOCBAQCBwdWJsaWM6CiAgICAgfQogICAgIFdFQkNPUkVfRVhQT1JUIH5Vc2VyTWVz
c2FnZUhhbmRsZXJEZXNjcmlwdG9yKCk7CiAKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUo
KTsKLSAgICBET01XcmFwcGVyV29ybGQmIHdvcmxkKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRE9NV3JhcHBlcldv
cmxkJiB3b3JsZCgpOwogCiAgICAgQ2xpZW50KiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2Ns
aWVudDsgfQogICAgIHZvaWQgaW52YWxpZGF0ZUNsaWVudCgpIHsgbV9jbGllbnQgPSBudWxscHRy
OyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3Bh
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlck1lc3NhZ2VIYW5k
bGVyc05hbWVzcGFjZS5jcHAJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUz
LDE1ICs1Myw5IEBAIFVzZXJNZXNzYWdlSGFuZGxlciogVXNlck1lc3NhZ2VIYW5kbGVyc04KICAg
ICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAotICAgIGNvbnN0IGF1
dG8qIHVzZXJDb250ZW50Q29udHJvbGxlciA9IHBhZ2UtPnVzZXJDb250ZW50Q29udHJvbGxlcigp
OwotICAgIGlmICghdXNlckNvbnRlbnRDb250cm9sbGVyKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIGNvbnN0IGF1dG8qIHVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzID0gdXNl
ckNvbnRlbnRDb250cm9sbGVyLT51c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycygpOwotICAg
IGlmICghdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgUmVmUHRyPFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3I+IGRlc2NyaXB0
b3IgPSB1c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycy0+Z2V0KHN0ZDo6bWFrZV9wYWlyKG5h
bWUsICZ3b3JsZCkpOworICAgIGF1dG8mIGRlc2NyaXB0b3JzID0gcGFnZS0+dXNlckNvbnRlbnRQ
cm92aWRlcigpLnVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzKCk7CisgICAgCisgICAgUmVm
UHRyPFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3I+IGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9y
cy5nZXQoc3RkOjptYWtlX3BhaXIobmFtZSwgJndvcmxkKSk7CiAgICAgaWYgKCFkZXNjcmlwdG9y
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtNzAsNyArNjQsNyBAQCBVc2VyTWVzc2Fn
ZUhhbmRsZXIqIFVzZXJNZXNzYWdlSGFuZGxlcnNOCiAgICAgICAgICAgICByZXR1cm4gJmhhbmRs
ZXIuZ2V0KCk7CiAgICAgfQogCi0gICAgYXV0byBsaXZlSGFuZGxlcnMgPSB1c2VyTWVzc2FnZUhh
bmRsZXJEZXNjcmlwdG9ycy0+dmFsdWVzKCk7CisgICAgYXV0byBsaXZlSGFuZGxlcnMgPSBkZXNj
cmlwdG9ycy52YWx1ZXMoKTsKICAgICBtX21lc3NhZ2VIYW5kbGVycy5yZW1vdmVBbGxNYXRjaGlu
ZyhbbGl2ZUhhbmRsZXJzXShjb25zdCBSZWY8VXNlck1lc3NhZ2VIYW5kbGVyPiYgaGFuZGxlcikg
ewogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGxpdmVIYW5kbGVyIDogbGl2ZUhhbmRsZXJzKSB7
CiAgICAgICAgICAgICBpZiAobGl2ZUhhbmRsZXIuZ2V0KCkgPT0gJmhhbmRsZXItPmRlc2NyaXB0
b3IoKSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNiBAQAorMjAxNi0wMy0xNCAg
U2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBhIGJhc2VVUkwgcGFy
YW1ldGVyIHRvIF9XS1VzZXJTdHlsZVNoZWV0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTUyMTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAtIE1vdmVzIHRvIGEgbW9kZWwgZm9yIHVzZXIgY29udGVudCB3
aGVyZSBpbnN0ZWFkIG9mIHVzaW5nIGEgV2ViQ29yZTo6VXNlckNvbnRlbnRDb250cm9sbGVyCisg
ICAgICAgICAgb2JqZWN0LCB3ZSBpbXBsZW1lbnQgdGhlIG5ldyBXZWJDb3JlOjpVc2VyQ29udGVu
dFByb3ZpZGVyIGludGVyZmFjZSAob24gdGhlIGV4aXN0aW5nIAorICAgICAgICAgIFdlYlVzZXJD
b250ZW50Q29udHJvbGxlciBvYmplY3QpLgorICAgICAgICAtIFVzZXMgdGhpcyB0byBtYWludGFp
biBtYXBzIG9mIFVzZXJTdHlsZXNTaGVldHMgYW5kIFVzZXJTY3JpcHRzIGFsb25nIHdpdGggdGhl
aXIgaWRlbnRpZmllcnMsCisgICAgICAgICAgZnJlZWluZyB1cCB0aGUgVVJMLCB3aGljaCBoYWQg
YmVlbiBhY3RpbmcgYXMgdGhlIGlkZW50aWZpZXIsIHRvIGJlIHVzZWQgYXMgdGhlIGJhc2VVUkwg
d2hpY2gKKyAgICAgICAgICB3YXMgd2hhdCBpdCB3YXMgaW50ZW5kZWQgZm9yLgorICAgICAgICAt
IEFkZHMgYSBiYXNlVVJMIHByb3BlcnR5IHRvIF9XS1VzZXJTdHlsZVNoZWV0LgorCisgICAgICAg
ICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICBBZGQgbmV3IGZp
bGVzLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHk6CisgICAgICAgICho
ZWFkZXJzX2Zvcl90eXBlKToKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHNlbmRpbmcgV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLgorCisgICAgICAgICogU2hhcmVkL1dlYlVzZXJD
b250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpX
ZWJVc2VyU2NyaXB0RGF0YTo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlclNjcmlw
dERhdGE6OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJTdHlsZVNoZWV0RGF0YTo6
ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlclN0eWxlU2hlZXREYXRhOjpkZWNvZGUp
OgorICAgICAgICAqIFNoYXJlZC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuaDog
QWRkZWQuCisgICAgICAgIEFkZCBoZWxwZXIgdHlwZXMgZm9yIHNlbmRpbmcgdXNlciBjb250ZW50
IG92ZXIgSVBDLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElVc2VyU2NyaXB0LmNwcDoK
KyAgICAgICAgKEFQSTo6VXNlclNjcmlwdDo6Z2VuZXJhdGVVbmlxdWVVUkwpOgorICAgICAgICAo
QVBJOjpVc2VyU2NyaXB0OjpVc2VyU2NyaXB0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQ
SVVzZXJTY3JpcHQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSVVzZXJTdHlsZVNoZWV0
LmNwcDoKKyAgICAgICAgKEFQSTo6VXNlclN0eWxlU2hlZXQ6OmdlbmVyYXRlVW5pcXVlVVJMKToK
KyAgICAgICAgKEFQSTo6VXNlclN0eWxlU2hlZXQ6OlVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0FQSVVzZXJTdHlsZVNoZWV0Lmg6CisgICAgICAgIEFkZCBpZGVudGlm
aWVycyBmb3IgdHJhY2tpbmcgYWNyb3NzIHByb2Nlc3Nlcy4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLVXNlclN0eWxlU2hlZXQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL19XS1VzZXJTdHlsZVNoZWV0Lm1tOgorICAgICAgICAoLVtfV0tVc2VyU3R5bGVTaGVl
dCBpbml0V2l0aFNvdXJjZTpmb3JNYWluRnJhbWVPbmx5OmxlZ2FjeVdoaXRlbGlzdDpsZWdhY3lC
bGFja2xpc3Q6YmFzZVVSTDp1c2VyQ29udGVudFdvcmxkOl0pOgorICAgICAgICAoLVtfV0tVc2Vy
U3R5bGVTaGVldCBiYXNlVVJMXSk6CisgICAgICAgIEFkZCBuZXcgaW5pdGlhbGl6ZXIgd2hpY2gg
dGFrZXMgYSBiYXNlVVJMIGFzIHdlbGwgYXMgYW4gYWNjZXNzb3IgZm9yIHRoZSBiYXNlVVJMLgor
CisgICAgICAgICogVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxl
clByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJv
eHk6OmFkZFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXJQcm94eTo6YWRkVXNlclNjcmlwdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50
Q29udHJvbGxlclByb3h5OjpyZW1vdmVVc2VyU2NyaXB0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFkZFVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92ZVVzZXJTdHlsZVNo
ZWV0KToKKyAgICAgICAgUGFzcyBpZGVudGlmaWVycyBhcyB3ZWxsIGFzIHVzZXIgY29udGVudC4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6YWRkVXNlclNjcmlwdCk6CisgICAg
ICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlOjphZGRVc2VyU3R5bGVTaGVldCk6CisgICAgICAg
IE1vdmUgdXNlciBjb250ZW50IGluIHZpYSBtb3ZlIHNlbWFudGljcyByYXRoZXIgdGhhbiB1c2lu
ZyBhIHVuaXF1ZV9wdHIuCisKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGU6OnJlbW92
ZVVzZXJTY3JpcHQpOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6cmVtb3ZlVXNl
clN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6cmVtb3ZlVXNl
clNjcmlwdHMpOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6cmVtb3ZlVXNlclN0
eWxlU2hlZXRzKToKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGU6OnJlbW92ZUFsbFVz
ZXJDb250ZW50KToKKyAgICAgICAgVXBkYXRlIGZvciBuZXcgZnVuY3Rpb24gc2lnbmF0dXJlcy4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpXZWJV
c2VyQ29udGVudENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENv
bnRyb2xsZXI6On5XZWJVc2VyQ29udGVudENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJDb250ZW50V29ybGRzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyQ29udGVudFdvcmxk
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlclNj
cmlwdHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92
ZVVzZXJTY3JpcHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6
OnJlbW92ZUFsbFVzZXJTY3JpcHRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRD
b250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVBbGxVc2VyU3R5bGVTaGVldHMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHRN
ZXNzYWdlSGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXI6OnJlbW92ZVVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlcik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlckNvbnRlbnRFeHRlbnNpb25zKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyQ29udGVudEV4
dGVuc2lvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVt
b3ZlQWxsVXNlckNvbnRlbnRFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNv
bnRlbnRDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0SW50ZXJuYWwpOgorICAgICAgICAoV2ViS2l0
OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTY3JpcHRXaXRoVVJMKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU2Ny
aXB0SW50ZXJuYWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6
OnJlbW92ZVVzZXJTY3JpcHRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250
cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldEludGVybmFsKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclN0eWxlU2hlZXRXaXRoVVJM
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2Vy
U3R5bGVTaGVldEludGVybmFsKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250
cm9sbGVyOjpyZW1vdmVVc2VyU3R5bGVTaGVldHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXI6OnJlbW92ZUFsbFVzZXJDb250ZW50KToKKyAgICAgICAgKFdlYktp
dDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpmb3JFYWNoVXNlclNjcmlwdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6Zm9yRWFjaFVzZXJTdHlsZVNoZWV0
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJv
bGxlci5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRD
b250cm9sbGVyLm1lc3NhZ2VzLmluOgorICAgICAgICBDb252ZXJ0IHRvIGluaGVyaXRpbmcgZnJv
bSBVc2VyQ29udGVudFByb3ZpZGVyLCByYXRoZXIgdGhhbiBjb250YWluaW5nIGEgVXNlckNvbnRl
bnRDb250cm9sbGVyLgorICAgICAgICBUaGlzIG1lYW5zIGFkZGluZyB0aGUgc3RvcmFnZSBmb3Ig
dGhlIHVzZXIgY29udGVudCwgd2hpY2ggaGFzIGJlZW4gc2ltcGxpZmllZCB0byBhdm9pZCB1c2lu
ZworICAgICAgICB1bmlxdWVfcHRycy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6YWRkVXNlclNjcmlwdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmFkZFVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6cmVtb3ZlQWxsVXNlckNvbnRlbnQpOgorICAgICAgICBVcGRhdGUgdG8g
Y2FsbCB0aGUgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLCByYXRoZXIgdGhhbiBnb2luZyB0byB0
aGUgVXNlckNvbnRlbnRDb250cm9sbGVyLCB3aGljaAorICAgICAgICBubyBsb25nZXIgZXhpc3Rz
LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUdyb3VwUHJveHk6OnVzZXJDb250ZW50Q29udHJvbGxl
cik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5Lmg6Cisg
ICAgICAgIFJldHVybiB0aGUgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyIHJhdGhlciB0aGFuIG9s
ZCBVc2VyQ29udGVudENvbnRyb2xsZXIuCisKIDIwMTYtMDMtMTQgIEJldGggRGFraW4gIDxiZGFr
aW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVuYWJsZSB0byBjb21taXQgcHJldmlld3MgaW4gTW9i
aWxlIFNhZmFyaQpJbmRleDogU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMu
cHkJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0L21l
c3NhZ2VzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNzgsNiArMzc4LDggQEAgZGVmIGhlYWRlcnNf
Zm9yX3R5cGUodHlwZSk6CiAgICAgICAgICdXZWJLaXQ6OldlYlRvdWNoRXZlbnQnOiBbJyJXZWJF
dmVudC5oIiddLAogICAgICAgICAnV2ViS2l0OjpXZWJXaGVlbEV2ZW50JzogWyciV2ViRXZlbnQu
aCInXSwKICAgICAgICAgJ1dlYktpdDo6V2ViU2NyaXB0TWVzc2FnZUhhbmRsZXJIYW5kbGUnOiBb
JyJXZWJTY3JpcHRNZXNzYWdlSGFuZGxlci5oIiddLAorICAgICAgICAnc3RydWN0IFdlYktpdDo6
V2ViVXNlclNjcmlwdERhdGEnOiBbJyJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMu
aCInXSwKKyAgICAgICAgJ3N0cnVjdCBXZWJLaXQ6OldlYlVzZXJTdHlsZVNoZWV0RGF0YSc6IFsn
IldlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oIiddLAogICAgICAgICAnc3RkOjpj
aHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCc6IFsnPGNocm9ubz4nXSwKICAgICB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRh
VHlwZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJVc2VyQ29u
dGVudENvbnRyb2xsZXJEYXRhVHlwZXMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuaCIKKworI2luY2x1
ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9p
ZCBXZWJVc2VyU2NyaXB0RGF0YTo6ZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAoreworICAgIGVuY29kZXIgPDwgaWRlbnRpZmllcjsKKyAgICBlbmNvZGVyIDw8IHdv
cmxkSWRlbnRpZmllcjsKKyAgICBlbmNvZGVyIDw8IHVzZXJTY3JpcHQ7Cit9CisKK2Jvb2wgV2Vi
VXNlclNjcmlwdERhdGE6OmRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgV2Vi
VXNlclNjcmlwdERhdGEmIGRhdGEpCit7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShkYXRhLmlk
ZW50aWZpZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShkYXRhLndvcmxkSWRlbnRpZmllcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKGRhdGEudXNlclNjcmlwdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJVc2VyU3R5bGVTaGVldERhdGE6OmVuY29k
ZShJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8
IGlkZW50aWZpZXI7CisgICAgZW5jb2RlciA8PCB3b3JsZElkZW50aWZpZXI7CisgICAgZW5jb2Rl
ciA8PCB1c2VyU3R5bGVTaGVldDsKK30KKworYm9vbCBXZWJVc2VyU3R5bGVTaGVldERhdGE6OmRl
Y29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgV2ViVXNlclN0eWxlU2hlZXREYXRh
JiBkYXRhKQoreworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGF0YS5pZGVudGlmaWVyKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGF0YS53b3JsZElk
ZW50aWZpZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShkYXRhLnVzZXJTdHlsZVNoZWV0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVz
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViVXNlckNvbnRlbnRD
b250cm9sbGVyRGF0YVR5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzX2gKKyNk
ZWZpbmUgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzX2gKKworI2luY2x1ZGUgPFdl
YkNvcmUvVXNlclNjcmlwdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVXNlclN0eWxlU2hlZXQuaD4K
KworbmFtZXNwYWNlIElQQyB7CitjbGFzcyBBcmd1bWVudERlY29kZXI7CitjbGFzcyBBcmd1bWVu
dEVuY29kZXI7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdHJ1Y3QgV2ViVXNlclNjcmlw
dERhdGEgeworICAgIHZvaWQgZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJikgY29uc3Q7Cisg
ICAgc3RhdGljIGJvb2wgZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiwgV2ViVXNlclNjcmlw
dERhdGEmKTsKKworICAgIHVpbnQ2NF90IGlkZW50aWZpZXI7CisgICAgdWludDY0X3Qgd29ybGRJ
ZGVudGlmaWVyOworICAgIFdlYkNvcmU6OlVzZXJTY3JpcHQgdXNlclNjcmlwdDsKK307CisKK3N0
cnVjdCBXZWJVc2VyU3R5bGVTaGVldERhdGEgeworICAgIHZvaWQgZW5jb2RlKElQQzo6QXJndW1l
bnRFbmNvZGVyJikgY29uc3Q7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKElQQzo6QXJndW1lbnRE
ZWNvZGVyJiwgV2ViVXNlclN0eWxlU2hlZXREYXRhJik7CisKKyAgICB1aW50NjRfdCBpZGVudGlm
aWVyOworICAgIHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllcjsKKyAgICBXZWJDb3JlOjpVc2VyU3R5
bGVTaGVldCB1c2VyU3R5bGVTaGVldDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzX2gKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlclNjcmlwdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyU2NyaXB0LmNwcAkocmV2aXNpb24g
MTk4MTQ3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyU2NyaXB0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzksMTEgKzM5LDIwIEBAIHN0YXRpYyB1aW50NjRfdCBnZW5l
cmF0ZUlkZW50aWZpZXIoKQogCiBXZWJDb3JlOjpVUkwgVXNlclNjcmlwdDo6Z2VuZXJhdGVVbmlx
dWVVUkwoKQogeworICAgIHN0YXRpYyB1aW50NjRfdCBpZGVudGlmaWVyOworCiAgICAgU3RyaW5n
QnVpbGRlciB1cmxTdHJpbmdCdWlsZGVyOwogICAgIHVybFN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgidXNlci1zY3JpcHQ6Iik7Ci0gICAgdXJsU3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIo
Z2VuZXJhdGVJZGVudGlmaWVyKCkpOworICAgIHVybFN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVy
KCsraWRlbnRpZmllcik7CiAgICAgcmV0dXJuIHsgeyB9LCB1cmxTdHJpbmdCdWlsZGVyLnRvU3Ry
aW5nKCkgfTsKIH0KIAorVXNlclNjcmlwdDo6VXNlclNjcmlwdChXZWJDb3JlOjpVc2VyU2NyaXB0
IHVzZXJTY3JpcHQsIEFQSTo6VXNlckNvbnRlbnRXb3JsZCYgd29ybGQpCisgICAgOiBtX2lkZW50
aWZpZXIoZ2VuZXJhdGVJZGVudGlmaWVyKCkpCisgICAgLCBtX3VzZXJTY3JpcHQodXNlclNjcmlw
dCkKKyAgICAsIG1fd29ybGQod29ybGQpCit7Cit9CisKIAogfSAvLyBuYW1lc3BhY2UgQVBJCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJTY3JpcHQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJTY3JpcHQuaAkocmV2
aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyU2Ny
aXB0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDExICs0MSw5IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgVXNlclNjcmlwdChXVEZNb3ZlKHVzZXJTY3JpcHQpLCB3b3Js
ZCkpOwogICAgIH0KIAotICAgIFVzZXJTY3JpcHQoV2ViQ29yZTo6VXNlclNjcmlwdCB1c2VyU2Ny
aXB0LCBBUEk6OlVzZXJDb250ZW50V29ybGQmIHdvcmxkKQotICAgICAgICA6IG1fdXNlclNjcmlw
dCh1c2VyU2NyaXB0KQotICAgICAgICAsIG1fd29ybGQod29ybGQpCi0gICAgewotICAgIH0KKyAg
ICBVc2VyU2NyaXB0KFdlYkNvcmU6OlVzZXJTY3JpcHQsIEFQSTo6VXNlckNvbnRlbnRXb3JsZCYp
OworCisgICAgdWludDY0X3QgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmll
cjsgfQogCiAgICAgY29uc3QgV2ViQ29yZTo6VXNlclNjcmlwdCYgdXNlclNjcmlwdCgpIGNvbnN0
IHsgcmV0dXJuIG1fdXNlclNjcmlwdDsgfQogICAgIApAQCAtNTMsNiArNTEsNyBAQCBwdWJsaWM6
CiAgICAgY29uc3QgVXNlckNvbnRlbnRXb3JsZCYgdXNlckNvbnRlbnRXb3JsZCgpIGNvbnN0IHsg
cmV0dXJuIG1fd29ybGQ7IH0KICAgICAKIHByaXZhdGU6CisgICAgdWludDY0X3QgbV9pZGVudGlm
aWVyOwogICAgIFdlYkNvcmU6OlVzZXJTY3JpcHQgbV91c2VyU2NyaXB0OwogICAgIFJlZjxVc2Vy
Q29udGVudFdvcmxkPiBtX3dvcmxkOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQVBJVXNlclN0eWxlU2hlZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQVBJVXNlclN0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiAxOTgxNDcpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJTdHlsZVNoZWV0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzksMTEgKzM5LDE5IEBAIHN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZUlk
ZW50aWZpZXIoKQogCiBXZWJDb3JlOjpVUkwgVXNlclN0eWxlU2hlZXQ6OmdlbmVyYXRlVW5pcXVl
VVJMKCkKIHsKKyAgICBzdGF0aWMgdWludDY0X3QgaWRlbnRpZmllcjsKKwogICAgIFN0cmluZ0J1
aWxkZXIgdXJsU3RyaW5nQnVpbGRlcjsKICAgICB1cmxTdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVy
YWwoInVzZXItc3R5bGUtc2hlZXQ6Iik7Ci0gICAgdXJsU3RyaW5nQnVpbGRlci5hcHBlbmROdW1i
ZXIoZ2VuZXJhdGVJZGVudGlmaWVyKCkpOworICAgIHVybFN0cmluZ0J1aWxkZXIuYXBwZW5kTnVt
YmVyKCsraWRlbnRpZmllcik7CiAgICAgcmV0dXJuIHsgeyB9LCB1cmxTdHJpbmdCdWlsZGVyLnRv
U3RyaW5nKCkgfTsKIH0KIAorVXNlclN0eWxlU2hlZXQ6OlVzZXJTdHlsZVNoZWV0KFdlYkNvcmU6
OlVzZXJTdHlsZVNoZWV0IHVzZXJTdHlsZVNoZWV0LCBBUEk6OlVzZXJDb250ZW50V29ybGQmIHdv
cmxkKQorICAgIDogbV9pZGVudGlmaWVyKGdlbmVyYXRlSWRlbnRpZmllcigpKQorICAgICwgbV91
c2VyU3R5bGVTaGVldCh1c2VyU3R5bGVTaGVldCkKKyAgICAsIG1fd29ybGQod29ybGQpCit7Cit9
CiAKIH0gLy8gbmFtZXNwYWNlIEFQSQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9BUElVc2VyU3R5bGVTaGVldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQVBJVXNlclN0eWxlU2hlZXQuaAkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyU3R5bGVTaGVldC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MSwxMSArNDEsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFVzZXJTdHlsZVNoZWV0KFdURk1vdmUodXNlclN0eWxlU2hlZXQpLCB3b3JsZCkpOwogICAgIH0K
IAotICAgIFVzZXJTdHlsZVNoZWV0KFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0IHVzZXJTdHlsZVNo
ZWV0LCBBUEk6OlVzZXJDb250ZW50V29ybGQmIHdvcmxkKQotICAgICAgICA6IG1fdXNlclN0eWxl
U2hlZXQodXNlclN0eWxlU2hlZXQpCi0gICAgICAgICwgbV93b3JsZCh3b3JsZCkKLSAgICB7Ci0g
ICAgfQorICAgIFVzZXJTdHlsZVNoZWV0KFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0LCBBUEk6OlVz
ZXJDb250ZW50V29ybGQmKTsKKworICAgIHVpbnQ2NF90IGlkZW50aWZpZXIoKSBjb25zdCB7IHJl
dHVybiBtX2lkZW50aWZpZXI7IH0KIAogICAgIGNvbnN0IFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0
JiB1c2VyU3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlclN0eWxlU2hlZXQ7IH0KIApA
QCAtNTMsNiArNTEsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVXNlckNvbnRlbnRXb3JsZCYgdXNl
ckNvbnRlbnRXb3JsZCgpIGNvbnN0IHsgcmV0dXJuIG1fd29ybGQ7IH0KIAogcHJpdmF0ZToKKyAg
ICB1aW50NjRfdCBtX2lkZW50aWZpZXI7CiAgICAgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQgbV91
c2VyU3R5bGVTaGVldDsKICAgICBSZWY8VXNlckNvbnRlbnRXb3JsZD4gbV93b3JsZDsKIH07Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJTdHlsZVNoZWV0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tV
c2VyU3R5bGVTaGVldC5oCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0NvY29hL19XS1VzZXJTdHlsZVNoZWV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4
LDExICszOCwxMyBAQCBXS19DTEFTU19BVkFJTEFCTEUoV0tfTUFDX1RCQSwgV0tfSU9TX1RCCiAK
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgY29weSkgTlNTdHJpbmcgKnNvdXJjZTsK
IAorQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU1VSTCAqYmFzZVVSTDsK
KwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBnZXR0ZXI9aXNGb3JNYWluRnJhbWVP
bmx5KSBCT09MIGZvck1haW5GcmFtZU9ubHk7CiAKIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aFNv
dXJjZTooTlNTdHJpbmcgKilzb3VyY2UgZm9yTWFpbkZyYW1lT25seTooQk9PTClmb3JNYWluRnJh
bWVPbmx5OwotCiAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291
cmNlIGZvck1haW5GcmFtZU9ubHk6KEJPT0wpZm9yTWFpbkZyYW1lT25seSBsZWdhY3lXaGl0ZWxp
c3Q6KFdLX0FSUkFZKE5TU3RyaW5nICopICopbGVnYWN5V2hpdGVsaXN0IGxlZ2FjeUJsYWNrbGlz
dDooV0tfQVJSQVkoTlNTdHJpbmcgKikgKilsZWdhY3lCbGFja2xpc3QgdXNlckNvbnRlbnRXb3Js
ZDooX1dLVXNlckNvbnRlbnRXb3JsZCAqKXVzZXJDb250ZW50V29ybGQ7CistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGZvck1haW5GcmFtZU9ubHk6KEJP
T0wpZm9yTWFpbkZyYW1lT25seSBsZWdhY3lXaGl0ZWxpc3Q6KFdLX0FSUkFZKE5TU3RyaW5nICop
ICopbGVnYWN5V2hpdGVsaXN0IGxlZ2FjeUJsYWNrbGlzdDooV0tfQVJSQVkoTlNTdHJpbmcgKikg
KilsZWdhY3lCbGFja2xpc3QgYmFzZVVSTDooTlNVUkwgKiliYXNlVVJMIHVzZXJDb250ZW50V29y
bGQ6KF9XS1VzZXJDb250ZW50V29ybGQgKil1c2VyQ29udGVudFdvcmxkOwogCiBAZW5kCiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlclN0eWxlU2hlZXQu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tV
c2VyU3R5bGVTaGVldC5tbQkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyU3R5bGVTaGVldC5tbQkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsNyBAQAogCiAjaW1wb3J0ICJBUElBcnJheS5oIgogI2ltcG9ydCAiV0tOU0FycmF5
LmgiCisjaW1wb3J0ICJXS05TVVJMRXh0cmFzLmgiCiAjaW1wb3J0ICJXZWJLaXQySW5pdGlhbGl6
ZS5oIgogI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRXb3JsZEludGVybmFsLmgiCiAKQEAgLTYxLDEx
ICs2MiwyOSBAQCAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTb3VyY2U6KE5TU3RyaW5nCiAgICAg
cmV0dXJuIHNlbGY7CiB9CiAKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFNvdXJjZTooTlNTdHJp
bmcgKilzb3VyY2UgZm9yTWFpbkZyYW1lT25seTooQk9PTClmb3JNYWluRnJhbWVPbmx5IGxlZ2Fj
eVdoaXRlbGlzdDooV0tfQVJSQVkoTlNTdHJpbmcgKikgKilsZWdhY3lXaGl0ZWxpc3QgbGVnYWN5
QmxhY2tsaXN0OihXS19BUlJBWShOU1N0cmluZyAqKSAqKWxlZ2FjeUJsYWNrbGlzdCBiYXNlVVJM
OihOU1VSTCAqKWJhc2VVUkwgdXNlckNvbnRlbnRXb3JsZDooX1dLVXNlckNvbnRlbnRXb3JsZCAq
KXVzZXJDb250ZW50V29ybGQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKworICAgIC8vIEZJWE1FOiBJbiB0aGUgQVBJIHRlc3QsIHdlIGNh
biB1c2UgZ2VuZXJhdGVVbmlxdWVVUkwgYmVsb3cgYmVmb3JlIHRoZSBBUEk6Ok9iamVjdCBjb25z
dHJ1Y3RvciBoYXMgZG9uZSB0aGlzLi4uIHdoZXJlIHNob3VsZCB0aGlzIHJlYWxseSBiZT8KKyAg
ICBXZWJLaXQ6OkluaXRpYWxpemVXZWJLaXQyKCk7CisKKyAgICBBUEk6Ok9iamVjdDo6Y29uc3Ry
dWN0SW5XcmFwcGVyPEFQSTo6VXNlclN0eWxlU2hlZXQ+KHNlbGYsIFdlYkNvcmU6OlVzZXJTdHls
ZVNoZWV0IHsgV1RGOjpTdHJpbmcoc291cmNlKSwgeyB7IH0sIFdURjo6U3RyaW5nKFtiYXNlVVJM
IF93ZWJfb3JpZ2luYWxEYXRhQXNXVEZTdHJpbmddKSB9LCBBUEk6OnRvU3RyaW5nVmVjdG9yKGxl
Z2FjeVdoaXRlbGlzdCksIEFQSTo6dG9TdHJpbmdWZWN0b3IobGVnYWN5QmxhY2tsaXN0KSwgZm9y
TWFpbkZyYW1lT25seSA/IFdlYkNvcmU6OkluamVjdEluVG9wRnJhbWVPbmx5IDogV2ViQ29yZTo6
SW5qZWN0SW5BbGxGcmFtZXMsIFdlYkNvcmU6OlVzZXJTdHlsZVVzZXJMZXZlbCB9LCAqdXNlckNv
bnRlbnRXb3JsZC0+X3VzZXJDb250ZW50V29ybGQpOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisK
IC0gKE5TU3RyaW5nICopc291cmNlCiB7CiAgICAgcmV0dXJuIF91c2VyU3R5bGVTaGVldC0+dXNl
clN0eWxlU2hlZXQoKS5zb3VyY2UoKTsKIH0KIAorLSAoTlNVUkwgKiliYXNlVVJMCit7CisgICAg
cmV0dXJuIF91c2VyU3R5bGVTaGVldC0+dXNlclN0eWxlU2hlZXQoKS51cmwoKTsKK30KKwogLSAo
Qk9PTClpc0Zvck1haW5GcmFtZU9ubHkKIHsKICAgICByZXR1cm4gX3VzZXJTdHlsZVNoZWV0LT51
c2VyU3R5bGVTaGVldCgpLmluamVjdGVkRnJhbWVzKCkgPT0gV2ViQ29yZTo6SW5qZWN0SW5Ub3BG
cmFtZU9ubHk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5j
cHAJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Vc2VyQ29u
dGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiV2Vi
UHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIuaCIKKyNp
bmNsdWRlICJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuaCIKICNpbmNsdWRlICJX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlVzZXJDb250
ZW50Q29udHJvbGxlclByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5oPgpAQCAtODAsMTQgKzgxLDE0IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRD
b250cm9sbGVyUHJveHk6OmFkZFAKICAgICAgICAgdXNlckNvbnRlbnRXb3JsZHMuYXBwZW5kKHN0
ZDo6bWFrZV9wYWlyKHdvcmxkLmtleS0+aWRlbnRpZmllcigpLCB3b3JsZC5rZXktPm5hbWUoKSkp
OwogICAgIHdlYlByb2Nlc3NQcm94eS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVz
ZXJDb250ZW50Q29udHJvbGxlcjo6QWRkVXNlckNvbnRlbnRXb3JsZHModXNlckNvbnRlbnRXb3Js
ZHMpLCBtX2lkZW50aWZpZXIpOwogCi0gICAgVmVjdG9yPHN0ZDo6cGFpcjx1aW50NjRfdCwgV2Vi
Q29yZTo6VXNlclNjcmlwdD4+IHVzZXJTY3JpcHRzOworICAgIFZlY3RvcjxXZWJVc2VyU2NyaXB0
RGF0YT4gdXNlclNjcmlwdHM7CiAgICAgZm9yIChjb25zdCBhdXRvJiB1c2VyU2NyaXB0IDogbV91
c2VyU2NyaXB0cy0+ZWxlbWVudHNPZlR5cGU8QVBJOjpVc2VyU2NyaXB0PigpKQotICAgICAgICB1
c2VyU2NyaXB0cy5hcHBlbmQoc3RkOjptYWtlX3BhaXIodXNlclNjcmlwdC0+dXNlckNvbnRlbnRX
b3JsZCgpLmlkZW50aWZpZXIoKSwgdXNlclNjcmlwdC0+dXNlclNjcmlwdCgpKSk7CisgICAgICAg
IHVzZXJTY3JpcHRzLmFwcGVuZCh7IHVzZXJTY3JpcHQtPmlkZW50aWZpZXIoKSwgdXNlclNjcmlw
dC0+dXNlckNvbnRlbnRXb3JsZCgpLmlkZW50aWZpZXIoKSwgdXNlclNjcmlwdC0+dXNlclNjcmlw
dCgpIH0pOwogICAgIHdlYlByb2Nlc3NQcm94eS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6QWRkVXNlclNjcmlwdHModXNlclNjcmlwdHMpLCBt
X2lkZW50aWZpZXIpOwogCi0gICAgVmVjdG9yPHN0ZDo6cGFpcjx1aW50NjRfdCwgV2ViQ29yZTo6
VXNlclN0eWxlU2hlZXQ+PiB1c2VyU3R5bGVTaGVldHM7CisgICAgVmVjdG9yPFdlYlVzZXJTdHls
ZVNoZWV0RGF0YT4gdXNlclN0eWxlU2hlZXRzOwogICAgIGZvciAoY29uc3QgYXV0byYgdXNlclN0
eWxlU2hlZXQgOiBtX3VzZXJTdHlsZVNoZWV0cy0+ZWxlbWVudHNPZlR5cGU8QVBJOjpVc2VyU3R5
bGVTaGVldD4oKSkKLSAgICAgICAgdXNlclN0eWxlU2hlZXRzLmFwcGVuZChzdGQ6Om1ha2VfcGFp
cih1c2VyU3R5bGVTaGVldC0+dXNlckNvbnRlbnRXb3JsZCgpLmlkZW50aWZpZXIoKSwgdXNlclN0
eWxlU2hlZXQtPnVzZXJTdHlsZVNoZWV0KCkpKTsKKyAgICAgICAgdXNlclN0eWxlU2hlZXRzLmFw
cGVuZCh7IHVzZXJTdHlsZVNoZWV0LT5pZGVudGlmaWVyKCksIHVzZXJTdHlsZVNoZWV0LT51c2Vy
Q29udGVudFdvcmxkKCkuaWRlbnRpZmllcigpLCB1c2VyU3R5bGVTaGVldC0+dXNlclN0eWxlU2hl
ZXQoKSB9KTsKICAgICB3ZWJQcm9jZXNzUHJveHkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OkFkZFVzZXJTdHlsZVNoZWV0cyh1c2VyU3R5bGVT
aGVldHMpLCBtX2lkZW50aWZpZXIpOwogCiAgICAgVmVjdG9yPFdlYlNjcmlwdE1lc3NhZ2VIYW5k
bGVySGFuZGxlPiBtZXNzYWdlSGFuZGxlckhhbmRsZXM7CkBAIC0xNjgsNyArMTY5LDcgQEAgdm9p
ZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6YWRkVQogICAgIG1fdXNlclNjcmlwdHMt
PmVsZW1lbnRzKCkuYXBwZW5kKCZ1c2VyU2NyaXB0KTsKIAogICAgIGZvciAoV2ViUHJvY2Vzc1By
b3h5KiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpCi0gICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpBZGRVc2VyU2NyaXB0
cyh7IHN0ZDo6bWFrZV9wYWlyKHdvcmxkLT5pZGVudGlmaWVyKCksIHVzZXJTY3JpcHQudXNlclNj
cmlwdCgpKSB9KSwgbV9pZGVudGlmaWVyKTsKKyAgICAgICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OkFkZFVzZXJTY3JpcHRz
KHsgeyB1c2VyU2NyaXB0LmlkZW50aWZpZXIoKSwgd29ybGQtPmlkZW50aWZpZXIoKSwgdXNlclNj
cmlwdC51c2VyU2NyaXB0KCkgfSB9KSwgbV9pZGVudGlmaWVyKTsKIH0KIAogdm9pZCBXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXJQcm94eTo6cmVtb3ZlVXNlclNjcmlwdChBUEk6OlVzZXJTY3JpcHQm
IHVzZXJTY3JpcHQpCkBAIC0xNzYsNyArMTc3LDcgQEAgdm9pZCBXZWJVc2VyQ29udGVudENvbnRy
b2xsZXJQcm94eTo6cmVtbwogICAgIFJlZjxBUEk6OlVzZXJDb250ZW50V29ybGQ+IHdvcmxkID0g
dXNlclNjcmlwdC51c2VyQ29udGVudFdvcmxkKCk7CiAKICAgICBmb3IgKFdlYlByb2Nlc3NQcm94
eSogcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKQotICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6UmVtb3ZlVXNlclNjcmlw
dCh3b3JsZC0+aWRlbnRpZmllcigpLCB1c2VyU2NyaXB0LnVzZXJTY3JpcHQoKS51cmwoKS5zdHJp
bmcoKSksIG1faWRlbnRpZmllcik7CisgICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpSZW1vdmVVc2VyU2NyaXB0KHdv
cmxkLT5pZGVudGlmaWVyKCksIHVzZXJTY3JpcHQuaWRlbnRpZmllcigpKSwgbV9pZGVudGlmaWVy
KTsKIAogICAgIG1fdXNlclNjcmlwdHMtPmVsZW1lbnRzKCkucmVtb3ZlQWxsKCZ1c2VyU2NyaXB0
KTsKIApAQCAtMjIzLDcgKzIyNCw3IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJv
eHk6OmFkZFUKICAgICBtX3VzZXJTdHlsZVNoZWV0cy0+ZWxlbWVudHMoKS5hcHBlbmQoJnVzZXJT
dHlsZVNoZWV0KTsKIAogICAgIGZvciAoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzIDogbV9wcm9j
ZXNzZXMpCi0gICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyOjpBZGRVc2VyU3R5bGVTaGVldHMoeyBzdGQ6Om1ha2VfcGFp
cih3b3JsZC0+aWRlbnRpZmllcigpLCB1c2VyU3R5bGVTaGVldC51c2VyU3R5bGVTaGVldCgpKSB9
KSwgbV9pZGVudGlmaWVyKTsKKyAgICAgICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OkFkZFVzZXJTdHlsZVNoZWV0cyh7IHsg
dXNlclN0eWxlU2hlZXQuaWRlbnRpZmllcigpLCB3b3JsZC0+aWRlbnRpZmllcigpLCB1c2VyU3R5
bGVTaGVldC51c2VyU3R5bGVTaGVldCgpIH0gfSksIG1faWRlbnRpZmllcik7CiB9CiAKIHZvaWQg
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92ZVVzZXJTdHlsZVNoZWV0KEFQSTo6
VXNlclN0eWxlU2hlZXQmIHVzZXJTdHlsZVNoZWV0KQpAQCAtMjMxLDcgKzIzMiw3IEBAIHZvaWQg
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW8KICAgICBSZWY8QVBJOjpVc2VyQ29u
dGVudFdvcmxkPiB3b3JsZCA9IHVzZXJTdHlsZVNoZWV0LnVzZXJDb250ZW50V29ybGQoKTsKIAog
ICAgIGZvciAoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpCi0gICAgICAg
IHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250
cm9sbGVyOjpSZW1vdmVVc2VyU3R5bGVTaGVldCh3b3JsZC0+aWRlbnRpZmllcigpLCB1c2VyU3R5
bGVTaGVldC51c2VyU3R5bGVTaGVldCgpLnVybCgpLnN0cmluZygpKSwgbV9pZGVudGlmaWVyKTsK
KyAgICAgICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXI6OlJlbW92ZVVzZXJTdHlsZVNoZWV0KHdvcmxkLT5pZGVudGlmaWVyKCks
IHVzZXJTdHlsZVNoZWV0LmlkZW50aWZpZXIoKSksIG1faWRlbnRpZmllcik7CiAKICAgICBtX3Vz
ZXJTdHlsZVNoZWV0cy0+ZWxlbWVudHMoKS5yZW1vdmVBbGwoJnVzZXJTdHlsZVNoZWV0KTsKIApJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQ0LDYgKzEwNDQsOCBAQAog
CQk3QTc5MUVGQTFDN0NGQ0YxMDBDNEM1MkIgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdBNzkxRUY5MUM3Q0ZCMzcwMEM0QzUyQiAvKiBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmVNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQk3QTc5MUVGQjFDN0NG
RDAxMDBDNEM1MkIgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlTWVzc2FnZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBNzkxRUY4MUM3
Q0ZCMTAwMEM0QzUyQiAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmVNZXNzYWdlcy5o
ICovOyB9OwogCQk3QTc5MUVGQzFDN0QwOEM1MDBDNEM1MkIgLyogV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdBOUNEOEMwMUM3Nzk4NDkwMEQ5RjZDNyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUuY3BwICovOyB9OworCQk3QzA2NUYyQjFDOENEOTVGMDBDMkQ5NTAgLyogV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDY1RjI5MUM4Q0Q5NUYwMEMyRDk1MCAvKiBXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuY3BwICovOyB9OworCQk3QzA2NUYyQzFDOENEOTVG
MDBDMkQ5NTAgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzA2NUYyQTFDOENEOTVGMDBD
MkQ5NTAgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmggKi87IH07CiAJCTdD
MTM1QUE4MTczQjBCQ0EwMDU4NkFFMiAvKiBXS1BsdWdpbkluZm9ybWF0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMTM1QUE2MTczQjBCQ0Ew
MDU4NkFFMiAvKiBXS1BsdWdpbkluZm9ybWF0aW9uLmNwcCAqLzsgfTsKIAkJN0MxMzVBQTkxNzNC
MEJDQTAwNTg2QUUyIC8qIFdLUGx1Z2luSW5mb3JtYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMTM1QUE3MTczQjBCQ0EwMDU4NkFFMiAvKiBX
S1BsdWdpbkluZm9ybWF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJN0MxMzVBQUMxNzNCMENGRjAwNTg2QUUyIC8qIFBsdWdpbkluZm9ybWF0
aW9uTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0MxMzVBQUExNzNCMENGRjAwNTg2QUUyIC8qIFBsdWdpbkluZm9ybWF0aW9uTWFjLm1tICovOyB9
OwpAQCAtMzA1Nyw2ICszMDU5LDggQEAKIAkJN0E5Q0Q4QzAxQzc3OTg0OTAwRDlGNkM3IC8qIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3QTlDRDhDMTFDNzc5ODQ5MDBEOUY2QzcgLyogV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3QTlDRDhDMjFDNzc5QUQ2MDBEOUY2QzcgLyogV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJN0MwNjVGMjkxQzhDRDk1RjAwQzJEOTUwIC8qIFdlYlVzZXJDb250ZW50Q29udHJv
bGxlckRhdGFUeXBlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3QzA2NUYyQTFDOENEOTVGMDBDMkQ5NTAgLyogV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyRGF0YVR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlVz
ZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3QzBCQjlBODE4RENERTg5MDAwNkMwODYgLyogV2ViQ29udGVudC1pT1MuZW50aXRsZW1l
bnRzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC54bWw7IHBhdGggPSAiV2ViQ29udGVudC1pT1MuZW50aXRsZW1lbnRzIjsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0MwQkI5QTkxOERDREY1QTAwMDZDMDg2IC8qIE5ldHdvcmstaU9T
LmVudGl0bGVtZW50cyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQueG1sOyBwYXRoID0gIk5ldHdvcmstaU9TLmVudGl0bGVtZW50cyI7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMTM1QUE2MTczQjBCQ0EwMDU4NkFFMiAvKiBXS1Bs
dWdpbkluZm9ybWF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdLUGx1Z2luSW5mb3JtYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NDUxMCw2ICs0NTE0LDggQEAKIAkJCQk4MzYwMzQ5RDFBQ0IzNEQ2MDA2MjY1NDkgLyogV2ViU1FM
aXRlRGF0YWJhc2VUcmFja2VyLmNwcCAqLywKIAkJCQk4MzYwMzQ5RTFBQ0IzNEQ2MDA2MjY1NDkg
LyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyLmggKi8sCiAJCQkJQzAzMzdERDcxMjdBNTFCNjAw
OEZGNEY0IC8qIFdlYlRvdWNoRXZlbnQuY3BwICovLAorCQkJCTdDMDY1RjI5MUM4Q0Q5NUYwMEMy
RDk1MCAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuY3BwICovLAorCQkJCTdD
MDY1RjJBMUM4Q0Q5NUYwMEMyRDk1MCAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlw
ZXMuaCAqLywKIAkJCQlDMDMzN0REMDEyN0EyOTgwMDA4RkY0RjQgLyogV2ViV2hlZWxFdmVudC5j
cHAgKi8sCiAJCQkpOwogCQkJcGF0aCA9IFNoYXJlZDsKQEAgLTgwMDcsNiArODAxMyw3IEBACiAJ
CQkJMkQyOEE0OTcxQUY5NjVBMTAwRjE5MEM5IC8qIFdLVmlld0xheW91dFN0cmF0ZWd5LmggaW4g
SGVhZGVycyAqLywKIAkJCQk1QzE0MjcwMjFDMjNGODRDMDBENDExODMgLyogRG93bmxvYWQuaCBp
biBIZWFkZXJzICovLAogCQkJCUJGQTYxNzlGMTJGMEI5OUQwMDMzRTBDQSAvKiBXS1ZpZXdQcml2
YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzA2NUYyQzFDOENEOTVGMDBDMkQ5NTAgLyogV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNUUx
QUZFOTE2QjIwQjc1MDA2Q0MxRjIgLyogV0tXZWJBcmNoaXZlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDNUUxQUZFQjE2QjIwQjdFMDA2Q0MxRjIgLyogV0tXZWJBcmNoaXZlUmVzb3VyY2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFBQTJFNTY3MThENzc1MDgwMDM4MTRCRCAvKiBXS1dlYlByb2Nlc3NC
dW5kbGVQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKQEAgLTkxNjUsNiArOTE3Miw3IEBACiAJ
CQkJNUMxNDI3MDExQzIzRjg0QzAwRDQxMTgzIC8qIERvd25sb2FkLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUMwMzM3REREMTI3QTUyMUMwMDhGRjRGNCAvKiBXZWJQbGF0Zm9ybVRvdWNoUG9pbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkRBOTQ0QTIxODg0RTRGMDAwRUQ4NkRCIC8qIFdlYlBs
YXRmb3JtVG91Y2hQb2ludElPUy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3QzA2NUYyQjFDOENE
OTVGMDBDMkQ5NTAgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTMxRDU5MjlFMTY2RTA2MDAwMEU2QkYwMiAvKiBXZWJQbHVnSW5DbGll
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1NzQ0RUYxMjYzOEZCMzAwNkYwRjEyIC8qIFdl
YlBvcHVwSXRlbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlEM0I5NDg0NjExRkY0QjY1MDAwMzJC
MzkgLyogV2ViUG9wdXBNZW51LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZS5jcHAJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2
ICs0Nyw3IEBACiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbE1lc3NhZ2VzLmgi
CisjaW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvQVBJQ2FzdC5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0V4Y2VwdGlvbi5o
PgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgpAQCAtNzAsNyArNzEsNiBAQAog
I2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlQb2xpY3kuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Nl
c3Npb25JRC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1VzZXJDb250ZW50Q29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlckdlc3R1
cmVJbmRpY2F0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VzZXJTY3JpcHQuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC00MDcsMzkgKzQwNywzOSBAQCBib29sIElu
amVjdGVkQnVuZGxlOjppc1Byb2Nlc3NpbmdVc2VyR2VzCiB2b2lkIEluamVjdGVkQnVuZGxlOjph
ZGRVc2VyU2NyaXB0KFdlYlBhZ2VHcm91cFByb3h5KiBwYWdlR3JvdXAsIEluamVjdGVkQnVuZGxl
U2NyaXB0V29ybGQqIHNjcmlwdFdvcmxkLCBjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3Ry
aW5nJiB1cmwsIEFQSTo6QXJyYXkqIHdoaXRlbGlzdCwgQVBJOjpBcnJheSogYmxhY2tsaXN0LCBX
ZWJDb3JlOjpVc2VyU2NyaXB0SW5qZWN0aW9uVGltZSBpbmplY3Rpb25UaW1lLCBXZWJDb3JlOjpV
c2VyQ29udGVudEluamVjdGVkRnJhbWVzIGluamVjdGVkRnJhbWVzKQogewogICAgIC8vIHVybCBp
cyBub3QgZnJvbSBVUkw6OnN0cmluZygpLCBpLmUuIGl0IGhhcyBub3QgYWxyZWFkeSBiZWVuIHBh
cnNlZCBieSBVUkwsIHNvIHdlIGhhdmUgdG8gdXNlIHRoZSByZWxhdGl2ZSBVUkwgY29uc3RydWN0
b3IgZm9yIFVSTCBpbnN0ZWFkIG9mIHRoZSBQYXJzZWRVUkxTdHJpbmdUYWcgdmVyc2lvbi4KLSAg
ICBhdXRvIHVzZXJTY3JpcHQgPSBzdGQ6Om1ha2VfdW5pcXVlPFVzZXJTY3JpcHQ+KHNvdXJjZSwg
VVJMKFVSTCgpLCB1cmwpLCB3aGl0ZWxpc3QgPyB3aGl0ZWxpc3QtPnRvU3RyaW5nVmVjdG9yKCkg
OiBWZWN0b3I8U3RyaW5nPigpLCBibGFja2xpc3QgPyBibGFja2xpc3QtPnRvU3RyaW5nVmVjdG9y
KCkgOiBWZWN0b3I8U3RyaW5nPigpLCBpbmplY3Rpb25UaW1lLCBpbmplY3RlZEZyYW1lcyk7Cisg
ICAgVXNlclNjcmlwdCB1c2VyU2NyaXB0eyBzb3VyY2UsIFVSTChVUkwoKSwgdXJsKSwgd2hpdGVs
aXN0ID8gd2hpdGVsaXN0LT50b1N0cmluZ1ZlY3RvcigpIDogVmVjdG9yPFN0cmluZz4oKSwgYmxh
Y2tsaXN0ID8gYmxhY2tsaXN0LT50b1N0cmluZ1ZlY3RvcigpIDogVmVjdG9yPFN0cmluZz4oKSwg
aW5qZWN0aW9uVGltZSwgaW5qZWN0ZWRGcmFtZXMgfTsKIAotICAgIHBhZ2VHcm91cC0+dXNlckNv
bnRlbnRDb250cm9sbGVyKCkuYWRkVXNlclNjcmlwdChzY3JpcHRXb3JsZC0+Y29yZVdvcmxkKCks
IFdURk1vdmUodXNlclNjcmlwdCkpOworICAgIHBhZ2VHcm91cC0+dXNlckNvbnRlbnRDb250cm9s
bGVyKCkuYWRkVXNlclNjcmlwdCgqc2NyaXB0V29ybGQsIFdURk1vdmUodXNlclNjcmlwdCkpOwog
fQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjphZGRVc2VyU3R5bGVTaGVldChXZWJQYWdlR3JvdXBQ
cm94eSogcGFnZUdyb3VwLCBJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkKiBzY3JpcHRXb3JsZCwg
Y29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdXJsLCBBUEk6OkFycmF5KiB3aGl0
ZWxpc3QsIEFQSTo6QXJyYXkqIGJsYWNrbGlzdCwgV2ViQ29yZTo6VXNlckNvbnRlbnRJbmplY3Rl
ZEZyYW1lcyBpbmplY3RlZEZyYW1lcykKIHsKICAgICAvLyB1cmwgaXMgbm90IGZyb20gVVJMOjpz
dHJpbmcoKSwgaS5lLiBpdCBoYXMgbm90IGFscmVhZHkgYmVlbiBwYXJzZWQgYnkgVVJMLCBzbyB3
ZSBoYXZlIHRvIHVzZSB0aGUgcmVsYXRpdmUgVVJMIGNvbnN0cnVjdG9yIGZvciBVUkwgaW5zdGVh
ZCBvZiB0aGUgUGFyc2VkVVJMU3RyaW5nVGFnIHZlcnNpb24uCi0gICAgYXV0byB1c2VyU3R5bGVT
aGVldCA9IHN0ZDo6bWFrZV91bmlxdWU8VXNlclN0eWxlU2hlZXQ+KHNvdXJjZSwgVVJMKFVSTCgp
LCB1cmwpLCB3aGl0ZWxpc3QgPyB3aGl0ZWxpc3QtPnRvU3RyaW5nVmVjdG9yKCkgOiBWZWN0b3I8
U3RyaW5nPigpLCBibGFja2xpc3QgPyBibGFja2xpc3QtPnRvU3RyaW5nVmVjdG9yKCkgOiBWZWN0
b3I8U3RyaW5nPigpLCBpbmplY3RlZEZyYW1lcywgVXNlclN0eWxlVXNlckxldmVsKTsKKyAgICBV
c2VyU3R5bGVTaGVldCB1c2VyU3R5bGVTaGVldHsgc291cmNlLCBVUkwoVVJMKCksIHVybCksIHdo
aXRlbGlzdCA/IHdoaXRlbGlzdC0+dG9TdHJpbmdWZWN0b3IoKSA6IFZlY3RvcjxTdHJpbmc+KCks
IGJsYWNrbGlzdCA/IGJsYWNrbGlzdC0+dG9TdHJpbmdWZWN0b3IoKSA6IFZlY3RvcjxTdHJpbmc+
KCksIGluamVjdGVkRnJhbWVzLCBVc2VyU3R5bGVVc2VyTGV2ZWwgfTsKIAotICAgIHBhZ2VHcm91
cC0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkuYWRkVXNlclN0eWxlU2hlZXQoc2NyaXB0V29ybGQt
PmNvcmVXb3JsZCgpLCBXVEZNb3ZlKHVzZXJTdHlsZVNoZWV0KSwgSW5qZWN0SW5FeGlzdGluZ0Rv
Y3VtZW50cyk7CisgICAgcGFnZUdyb3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIoKS5hZGRVc2Vy
U3R5bGVTaGVldCgqc2NyaXB0V29ybGQsIFdURk1vdmUodXNlclN0eWxlU2hlZXQpKTsKIH0KIAog
dm9pZCBJbmplY3RlZEJ1bmRsZTo6cmVtb3ZlVXNlclNjcmlwdChXZWJQYWdlR3JvdXBQcm94eSog
cGFnZUdyb3VwLCBJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkKiBzY3JpcHRXb3JsZCwgY29uc3Qg
U3RyaW5nJiB1cmwpCiB7CiAgICAgLy8gdXJsIGlzIG5vdCBmcm9tIFVSTDo6c3RyaW5nKCksIGku
ZS4gaXQgaGFzIG5vdCBhbHJlYWR5IGJlZW4gcGFyc2VkIGJ5IFVSTCwgc28gd2UgaGF2ZSB0byB1
c2UgdGhlIHJlbGF0aXZlIFVSTCBjb25zdHJ1Y3RvciBmb3IgVVJMIGluc3RlYWQgb2YgdGhlIFBh
cnNlZFVSTFN0cmluZ1RhZyB2ZXJzaW9uLgotICAgIHBhZ2VHcm91cC0+dXNlckNvbnRlbnRDb250
cm9sbGVyKCkucmVtb3ZlVXNlclNjcmlwdChzY3JpcHRXb3JsZC0+Y29yZVdvcmxkKCksIFVSTChV
UkwoKSwgdXJsKSk7CisgICAgcGFnZUdyb3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIoKS5yZW1v
dmVVc2VyU2NyaXB0V2l0aFVSTCgqc2NyaXB0V29ybGQsIFVSTChVUkwoKSwgdXJsKSk7CiB9CiAK
IHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnJlbW92ZVVzZXJTdHlsZVNoZWV0KFdlYlBhZ2VHcm91cFBy
b3h5KiBwYWdlR3JvdXAsIEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQqIHNjcmlwdFdvcmxkLCBj
b25zdCBTdHJpbmcmIHVybCkKIHsKICAgICAvLyB1cmwgaXMgbm90IGZyb20gVVJMOjpzdHJpbmco
KSwgaS5lLiBpdCBoYXMgbm90IGFscmVhZHkgYmVlbiBwYXJzZWQgYnkgVVJMLCBzbyB3ZSBoYXZl
IHRvIHVzZSB0aGUgcmVsYXRpdmUgVVJMIGNvbnN0cnVjdG9yIGZvciBVUkwgaW5zdGVhZCBvZiB0
aGUgUGFyc2VkVVJMU3RyaW5nVGFnIHZlcnNpb24uCi0gICAgcGFnZUdyb3VwLT51c2VyQ29udGVu
dENvbnRyb2xsZXIoKS5yZW1vdmVVc2VyU3R5bGVTaGVldChzY3JpcHRXb3JsZC0+Y29yZVdvcmxk
KCksIFVSTChVUkwoKSwgdXJsKSk7CisgICAgcGFnZUdyb3VwLT51c2VyQ29udGVudENvbnRyb2xs
ZXIoKS5yZW1vdmVVc2VyU3R5bGVTaGVldFdpdGhVUkwoKnNjcmlwdFdvcmxkLCBVUkwoVVJMKCks
IHVybCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpyZW1vdmVVc2VyU2NyaXB0cyhXZWJQ
YWdlR3JvdXBQcm94eSogcGFnZUdyb3VwLCBJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkKiBzY3Jp
cHRXb3JsZCkKIHsKLSAgICBwYWdlR3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigpLnJlbW92
ZVVzZXJTY3JpcHRzKHNjcmlwdFdvcmxkLT5jb3JlV29ybGQoKSk7CisgICAgcGFnZUdyb3VwLT51
c2VyQ29udGVudENvbnRyb2xsZXIoKS5yZW1vdmVVc2VyU2NyaXB0cygqc2NyaXB0V29ybGQpOwog
fQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpyZW1vdmVVc2VyU3R5bGVTaGVldHMoV2ViUGFnZUdy
b3VwUHJveHkqIHBhZ2VHcm91cCwgSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCogc2NyaXB0V29y
bGQpCiB7Ci0gICAgcGFnZUdyb3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIoKS5yZW1vdmVVc2Vy
U3R5bGVTaGVldHMoc2NyaXB0V29ybGQtPmNvcmVXb3JsZCgpKTsKKyAgICBwYWdlR3JvdXAtPnVz
ZXJDb250ZW50Q29udHJvbGxlcigpLnJlbW92ZVVzZXJTdHlsZVNoZWV0cygqc2NyaXB0V29ybGQp
OwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpyZW1vdmVBbGxVc2VyQ29udGVudChXZWJQYWdl
R3JvdXBQcm94eSogcGFnZUdyb3VwKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9V
c2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyLmNwcAkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9V
c2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9sbGVyTWVzc2Fn
ZXMuaCIKICNpbmNsdWRlICJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1lc3NhZ2VzLmgi
CiAjaW5jbHVkZSA8V2ViQ29yZS9ET01XcmFwcGVyV29ybGQuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1NjcmlwdENvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luRGF0
YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9Vc2VyU3R5bGVTaGVldC5oPgpAQCAtODAsNyArNzksNiBAQCBSZWY8V2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyPiBXZWJVc2VyQ29uCiAKIFdlYlVzZXJDb250ZW50Q29udHJvbGxl
cjo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyKHVpbnQ2NF90IGlkZW50aWZpZXIpCiAgICAgOiBt
X2lkZW50aWZpZXIoaWRlbnRpZmllcikKLSAgICAsIG1fdXNlckNvbnRlbnRDb250cm9sbGVyKFVz
ZXJDb250ZW50Q29udHJvbGxlcjo6Y3JlYXRlKCkpCiB7CiAgICAgV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pZGVudGlmaWVyLCAqdGhpcyk7CiB9CkBAIC05
NCw3ICs5Miw2IEBAIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6fldlYlVzZXJDb250ZW4KICAg
ICB1c2VyQ29udGVudENvbnRyb2xsZXJzKCkucmVtb3ZlKG1faWRlbnRpZmllcik7CiB9CiAKLQog
dm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJDb250ZW50V29ybGRzKGNvbnN0
IFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0X3QsIFN0cmluZz4+JiB3b3JsZHMpCiB7CiAgICAgZm9y
IChhdXRvJiB3b3JsZCA6IHdvcmxkcykgewpAQCAtMTI0LDIwICsxMjEsMjEgQEAgdm9pZCBXZWJV
c2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZQogICAgIH0KIH0KIAotdm9pZCBXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHRzKGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8
dWludDY0X3QsIFdlYkNvcmU6OlVzZXJTY3JpcHQ+PiYgdXNlclNjcmlwdHMpCit2b2lkIFdlYlVz
ZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlclNjcmlwdHMoY29uc3QgVmVjdG9yPFdlYlVzZXJT
Y3JpcHREYXRhPiYgdXNlclNjcmlwdHMpCiB7Ci0gICAgZm9yIChjb25zdCBhdXRvJiB1c2VyU2Ny
aXB0V29ybGRQYWlyIDogdXNlclNjcmlwdHMpIHsKLSAgICAgICAgYXV0byBpdCA9IHdvcmxkTWFw
KCkuZmluZCh1c2VyU2NyaXB0V29ybGRQYWlyLmZpcnN0KTsKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IHVzZXJTY3JpcHREYXRhIDogdXNlclNjcmlwdHMpIHsKKyAgICAgICAgYXV0byBpdCA9IHdvcmxk
TWFwKCkuZmluZCh1c2VyU2NyaXB0RGF0YS53b3JsZElkZW50aWZpZXIpOwogICAgICAgICBpZiAo
aXQgPT0gd29ybGRNYXAoKS5lbmQoKSkgewotICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJUcnlp
bmcgdG8gYWRkIGEgVXNlclNjcmlwdCB0byBhIFVzZXJDb250ZW50V29ybGQgKGlkPSUiIFBSSXU2
NCAiKSB0aGF0IGRvZXMgbm90IGV4aXN0LiIsIHVzZXJTY3JpcHRXb3JsZFBhaXIuZmlyc3QpOwor
ICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJUcnlpbmcgdG8gYWRkIGEgVXNlclNjcmlwdCB0byBh
IFVzZXJDb250ZW50V29ybGQgKGlkPSUiIFBSSXU2NCAiKSB0aGF0IGRvZXMgbm90IGV4aXN0LiIs
IHVzZXJTY3JpcHREYXRhLndvcmxkSWRlbnRpZmllcik7CiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgfQogCi0gICAgICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5hZGRVc2VyU2Ny
aXB0KGl0LT52YWx1ZS5maXJzdC0+Y29yZVdvcmxkKCksIHN0ZDo6bWFrZV91bmlxdWU8V2ViQ29y
ZTo6VXNlclNjcmlwdD4odXNlclNjcmlwdFdvcmxkUGFpci5zZWNvbmQpKTsKKyAgICAgICAgVXNl
clNjcmlwdCBzY3JpcHQgPSB1c2VyU2NyaXB0RGF0YS51c2VyU2NyaXB0OworICAgICAgICBhZGRV
c2VyU2NyaXB0SW50ZXJuYWwoKml0LT52YWx1ZS5maXJzdCwgdXNlclNjcmlwdERhdGEuaWRlbnRp
ZmllciwgV1RGTW92ZShzY3JpcHQpKTsKICAgICB9CiB9CiAKLXZvaWQgV2ViVXNlckNvbnRlbnRD
b250cm9sbGVyOjpyZW1vdmVVc2VyU2NyaXB0KHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiB1cmxTdHJpbmcpCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVt
b3ZlVXNlclNjcmlwdCh1aW50NjRfdCB3b3JsZElkZW50aWZpZXIsIHVpbnQ2NF90IHVzZXJTY3Jp
cHRJZGVudGlmaWVyKQogewogICAgIGF1dG8gaXQgPSB3b3JsZE1hcCgpLmZpbmQod29ybGRJZGVu
dGlmaWVyKTsKICAgICBpZiAoaXQgPT0gd29ybGRNYXAoKS5lbmQoKSkgewpAQCAtMTQ1LDcgKzE0
Myw3IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2UKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5yZW1vdmVVc2Vy
U2NyaXB0KGl0LT52YWx1ZS5maXJzdC0+Y29yZVdvcmxkKCksIFVSTChVUkwoKSwgdXJsU3RyaW5n
KSk7CisgICAgcmVtb3ZlVXNlclNjcmlwdEludGVybmFsKCppdC0+dmFsdWUuZmlyc3QsIHVzZXJT
Y3JpcHRJZGVudGlmaWVyKTsKIH0KIAogdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJl
bW92ZUFsbFVzZXJTY3JpcHRzKGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIHdvcmxkSWRlbnRpZmll
cnMpCkBAIC0xNTcsMjQgKzE1NSwyNSBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6
cmVtb3ZlQWxsCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBtX3Vz
ZXJDb250ZW50Q29udHJvbGxlci0+cmVtb3ZlVXNlclNjcmlwdHMoaXQtPnZhbHVlLmZpcnN0LT5j
b3JlV29ybGQoKSk7CisgICAgICAgIHJlbW92ZVVzZXJTY3JpcHRzKCppdC0+dmFsdWUuZmlyc3Qp
OwogICAgIH0KIH0KIAotdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTdHls
ZVNoZWV0cyhjb25zdCBWZWN0b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBXZWJDb3JlOjpVc2VyU3R5
bGVTaGVldD4+JiB1c2VyU3R5bGVTaGVldHMpCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxl
cjo6YWRkVXNlclN0eWxlU2hlZXRzKGNvbnN0IFZlY3RvcjxXZWJVc2VyU3R5bGVTaGVldERhdGE+
JiB1c2VyU3R5bGVTaGVldHMpCiB7Ci0gICAgZm9yIChjb25zdCBhdXRvJiB1c2VyU3R5bGVTaGVl
dFdvcmxkUGFpciA6IHVzZXJTdHlsZVNoZWV0cykgewotICAgICAgICBhdXRvIGl0ID0gd29ybGRN
YXAoKS5maW5kKHVzZXJTdHlsZVNoZWV0V29ybGRQYWlyLmZpcnN0KTsKKyAgICBmb3IgKGNvbnN0
IGF1dG8mIHVzZXJTdHlsZVNoZWV0RGF0YSA6IHVzZXJTdHlsZVNoZWV0cykgeworICAgICAgICBh
dXRvIGl0ID0gd29ybGRNYXAoKS5maW5kKHVzZXJTdHlsZVNoZWV0RGF0YS53b3JsZElkZW50aWZp
ZXIpOwogICAgICAgICBpZiAoaXQgPT0gd29ybGRNYXAoKS5lbmQoKSkgewotICAgICAgICAgICAg
V1RGTG9nQWx3YXlzKCJUcnlpbmcgdG8gYWRkIGEgVXNlclN0eWxlU2hlZXQgdG8gYSBVc2VyQ29u
dGVudFdvcmxkIChpZD0lIiBQUkl1NjQgIikgdGhhdCBkb2VzIG5vdCBleGlzdC4iLCB1c2VyU3R5
bGVTaGVldFdvcmxkUGFpci5maXJzdCk7CisgICAgICAgICAgICBXVEZMb2dBbHdheXMoIlRyeWlu
ZyB0byBhZGQgYSBVc2VyU3R5bGVTaGVldCB0byBhIFVzZXJDb250ZW50V29ybGQgKGlkPSUiIFBS
SXU2NCAiKSB0aGF0IGRvZXMgbm90IGV4aXN0LiIsIHVzZXJTdHlsZVNoZWV0RGF0YS53b3JsZElk
ZW50aWZpZXIpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLQotICAgICAgICBt
X3VzZXJDb250ZW50Q29udHJvbGxlci0+YWRkVXNlclN0eWxlU2hlZXQoaXQtPnZhbHVlLmZpcnN0
LT5jb3JlV29ybGQoKSwgc3RkOjptYWtlX3VuaXF1ZTxXZWJDb3JlOjpVc2VyU3R5bGVTaGVldD4o
dXNlclN0eWxlU2hlZXRXb3JsZFBhaXIuc2Vjb25kKSwgSW5qZWN0SW5FeGlzdGluZ0RvY3VtZW50
cyk7CisgICAgICAgIAorICAgICAgICBVc2VyU3R5bGVTaGVldCBzaGVldCA9IHVzZXJTdHlsZVNo
ZWV0RGF0YS51c2VyU3R5bGVTaGVldDsKKyAgICAgICAgYWRkVXNlclN0eWxlU2hlZXRJbnRlcm5h
bCgqaXQtPnZhbHVlLmZpcnN0LCB1c2VyU3R5bGVTaGVldERhdGEuaWRlbnRpZmllciwgV1RGTW92
ZShzaGVldCkpOwogICAgIH0KIH0KIAotdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJl
bW92ZVVzZXJTdHlsZVNoZWV0KHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllciwgY29uc3QgU3RyaW5n
JiB1cmxTdHJpbmcpCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclN0
eWxlU2hlZXQodWludDY0X3Qgd29ybGRJZGVudGlmaWVyLCB1aW50NjRfdCB1c2VyU3R5bGVTaGVl
dElkZW50aWZpZXIpCiB7CiAgICAgYXV0byBpdCA9IHdvcmxkTWFwKCkuZmluZCh3b3JsZElkZW50
aWZpZXIpOwogICAgIGlmIChpdCA9PSB3b3JsZE1hcCgpLmVuZCgpKSB7CkBAIC0xODIsNyArMTgx
LDcgQEAgdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPnJlbW92ZVVzZXJT
dHlsZVNoZWV0KGl0LT52YWx1ZS5maXJzdC0+Y29yZVdvcmxkKCksIFVSTChVUkwoKSwgdXJsU3Ry
aW5nKSk7CisgICAgcmVtb3ZlVXNlclN0eWxlU2hlZXRJbnRlcm5hbCgqaXQtPnZhbHVlLmZpcnN0
LCB1c2VyU3R5bGVTaGVldElkZW50aWZpZXIpOwogfQogCiB2b2lkIFdlYlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6cmVtb3ZlQWxsVXNlclN0eWxlU2hlZXRzKGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4m
IHdvcmxkSWRlbnRpZmllcnMpCkBAIC0xOTQsNyArMTkzLDcgQEAgdm9pZCBXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXI6OnJlbW92ZUFsbAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
LSAgICAgICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPnJlbW92ZVVzZXJTdHlsZVNoZWV0cyhp
dC0+dmFsdWUuZmlyc3QtPmNvcmVXb3JsZCgpKTsKKyAgICAgICAgcmVtb3ZlVXNlclN0eWxlU2hl
ZXRzKCppdC0+dmFsdWUuZmlyc3QpOwogICAgIH0KIH0KIApAQCAtMjUzLDcgKzI1Miw5IEBAIHZv
aWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyU2MKICAgICAgICAgUmVmUHRyPFdl
YlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JQcm94eT4gZGVzY3JpcHRvciA9IFdlYlVzZXJN
ZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JQcm94eTo6Y3JlYXRlKHRoaXMsIGhhbmRsZS5uYW1lLCBo
YW5kbGUuaWRlbnRpZmllcik7CiAKICAgICAgICAgbV91c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlw
dG9ycy5hZGQoZGVzY3JpcHRvci0+aWRlbnRpZmllcigpLCBkZXNjcmlwdG9yKTsKLSAgICAgICAg
bV91c2VyQ29udGVudENvbnRyb2xsZXItPmFkZFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3Io
ZGVzY3JpcHRvci0+ZGVzY3JpcHRvcigpKTsKKworICAgICAgICBhdXRvJiBjb3JlRGVzY3JpcHRv
ciA9IGRlc2NyaXB0b3ItPmRlc2NyaXB0b3IoKTsKKyAgICAgICAgbV91c2VyTWVzc2FnZUhhbmRs
ZXJEZXNjcmlwdG9yc01hcC5hZGQoc3RkOjptYWtlX3BhaXIoY29yZURlc2NyaXB0b3IubmFtZSgp
LCAmY29yZURlc2NyaXB0b3Iud29ybGQoKSksICZjb3JlRGVzY3JpcHRvcik7CiAgICAgfQogI2Vs
c2UKICAgICBVTlVTRURfUEFSQU0oc2NyaXB0TWVzc2FnZUhhbmRsZXJzKTsKQEAgLTI2NSw4ICsy
NjYsMTAgQEAgdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZQogI2lmIEVO
QUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCiAgICAgYXV0byBpdCA9IG1fdXNlck1lc3NhZ2VI
YW5kbGVyRGVzY3JpcHRvcnMuZmluZChpZGVudGlmaWVyKTsKICAgICBBU1NFUlQoaXQgIT0gbV91
c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycy5lbmQoKSk7Ci0gICAgCi0gICAgbV91c2VyQ29u
dGVudENvbnRyb2xsZXItPnJlbW92ZVVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IoaXQtPnZh
bHVlLT5kZXNjcmlwdG9yKCkpOworCisgICAgYXV0byYgY29yZURlc2NyaXB0b3IgPSBpdC0+dmFs
dWUtPmRlc2NyaXB0b3IoKTsKKyAgICBtX3VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzTWFw
LnJlbW92ZShzdGQ6Om1ha2VfcGFpcihjb3JlRGVzY3JpcHRvci5uYW1lKCksICZjb3JlRGVzY3Jp
cHRvci53b3JsZCgpKSk7CisKICAgICBtX3VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzLnJl
bW92ZShpdCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShpZGVudGlmaWVyKTsKQEAgLTI3OSwx
OSArMjgyLDE2OCBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlckNvCiAg
ICAgZm9yIChjb25zdCBhdXRvJiB1c2VyQ29udGVudEV4dGVuc2lvbiA6IHVzZXJDb250ZW50RXh0
ZW5zaW9ucykgewogICAgICAgICBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhIGNvbnRl
bnRFeHRlbnNpb25EYXRhID0gdXNlckNvbnRlbnRFeHRlbnNpb24uc2Vjb25kOwogICAgICAgICBS
ZWZQdHI8V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiBjb21waWxlZENvbnRlbnRFeHRlbnNp
b24gPSBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZShXVEZNb3ZlKGNvbnRlbnRF
eHRlbnNpb25EYXRhKSk7Ci0gICAgICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5hZGRVc2Vy
Q29udGVudEV4dGVuc2lvbih1c2VyQ29udGVudEV4dGVuc2lvbi5maXJzdCwgY29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uKTsKKworICAgICAgICBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kLmFkZENv
bnRlbnRFeHRlbnNpb24odXNlckNvbnRlbnRFeHRlbnNpb24uZmlyc3QsIFdURk1vdmUoY29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uKSk7CiAgICAgfQogfQogCiB2b2lkIFdlYlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6cmVtb3ZlVXNlckNvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQog
ewotICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5yZW1vdmVVc2VyQ29udGVudEV4dGVuc2lv
bihuYW1lKTsKKyAgICBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kLnJlbW92ZUNvbnRlbnRFeHRl
bnNpb24obmFtZSk7CiB9CiAKIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVB
bGxVc2VyQ29udGVudEV4dGVuc2lvbnMoKQogewotICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVy
LT5yZW1vdmVBbGxVc2VyQ29udGVudEV4dGVuc2lvbnMoKTsKKyAgICBtX2NvbnRlbnRFeHRlbnNp
b25CYWNrZW5kLnJlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKCk7CiB9CiAjZW5kaWYKIAorCisK
K3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0SW50ZXJuYWwoSW5q
ZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYgd29ybGQsIHVpbnQ2NF90IHVzZXJTY3JpcHRJZGVudGlm
aWVyLCBVc2VyU2NyaXB0JiYgdXNlclNjcmlwdCkKK3sKKyAgICBhdXRvJiBzY3JpcHRzSW5Xb3Js
ZCA9IG1fdXNlclNjcmlwdHMuZW5zdXJlKCZ3b3JsZCwgW10geyByZXR1cm4gVmVjdG9yPHN0ZDo6
cGFpcjx1aW50NjRfdCwgV2ViQ29yZTo6VXNlclNjcmlwdD4+KCk7IH0pLml0ZXJhdG9yLT52YWx1
ZTsKKyAgICBzY3JpcHRzSW5Xb3JsZC5hcHBlbmQoc3RkOjptYWtlX3BhaXIodXNlclNjcmlwdElk
ZW50aWZpZXIsIFdURk1vdmUodXNlclNjcmlwdCkpKTsKK30KKwordm9pZCBXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYgd29y
bGQsIFVzZXJTY3JpcHQmJiB1c2VyU2NyaXB0KQoreworICAgIGFkZFVzZXJTY3JpcHRJbnRlcm5h
bCh3b3JsZCwgMCwgV1RGTW92ZSh1c2VyU2NyaXB0KSk7Cit9CisKK3ZvaWQgV2ViVXNlckNvbnRl
bnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU2NyaXB0V2l0aFVSTChJbmplY3RlZEJ1bmRsZVNjcmlw
dFdvcmxkJiB3b3JsZCwgY29uc3QgVVJMJiB1cmwpCit7CisgICAgYXV0byBpdCA9IG1fdXNlclNj
cmlwdHMuZmluZCgmd29ybGQpOworICAgIGlmIChpdCA9PSBtX3VzZXJTY3JpcHRzLmVuZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiBzY3JpcHRzID0gaXQtPnZhbHVlOworICAgIGZv
ciAoaW50IGkgPSBzY3JpcHRzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGlm
IChzY3JpcHRzW2ldLnNlY29uZC51cmwoKSA9PSB1cmwpCisgICAgICAgICAgICBzY3JpcHRzLnJl
bW92ZShpKTsKKyAgICB9CisKKyAgICBpZiAoc2NyaXB0cy5pc0VtcHR5KCkpCisgICAgICAgIG1f
dXNlclNjcmlwdHMucmVtb3ZlKGl0KTsKK30KKwordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXI6OnJlbW92ZVVzZXJTY3JpcHRJbnRlcm5hbChJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiB3
b3JsZCwgdWludDY0X3QgdXNlclNjcmlwdElkZW50aWZpZXIpCit7CisgICAgYXV0byBpdCA9IG1f
dXNlclNjcmlwdHMuZmluZCgmd29ybGQpOworICAgIGlmIChpdCA9PSBtX3VzZXJTY3JpcHRzLmVu
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiBzY3JpcHRzID0gaXQtPnZhbHVlOwor
ICAgIGZvciAoaW50IGkgPSBzY3JpcHRzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAg
ICAgIGlmIChzY3JpcHRzW2ldLmZpcnN0ID09IHVzZXJTY3JpcHRJZGVudGlmaWVyKQorICAgICAg
ICAgICAgc2NyaXB0cy5yZW1vdmUoaSk7CisgICAgfQorCisgICAgaWYgKHNjcmlwdHMuaXNFbXB0
eSgpKQorICAgICAgICBtX3VzZXJTY3JpcHRzLnJlbW92ZShpdCk7Cit9CisKK3ZvaWQgV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU2NyaXB0cyhJbmplY3RlZEJ1bmRsZVNjcmlw
dFdvcmxkJiB3b3JsZCkKK3sKKyAgICBtX3VzZXJTY3JpcHRzLnJlbW92ZSgmd29ybGQpOworfQor
Cit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlclN0eWxlU2hlZXRJbnRlcm5h
bChJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiB3b3JsZCwgdWludDY0X3QgdXNlclN0eWxlU2hl
ZXRJZGVudGlmaWVyLCBVc2VyU3R5bGVTaGVldCYmIHVzZXJTdHlsZVNoZWV0KQoreworICAgIGF1
dG8mIHN0eWxlU2hlZXRzSW5Xb3JsZCA9IG1fdXNlclN0eWxlU2hlZXRzLmVuc3VyZSgmd29ybGQs
IFtdIHsgcmV0dXJuIFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0X3QsIFdlYkNvcmU6OlVzZXJTdHls
ZVNoZWV0Pj4oKTsgfSkuaXRlcmF0b3ItPnZhbHVlOworICAgIHN0eWxlU2hlZXRzSW5Xb3JsZC5h
cHBlbmQoc3RkOjptYWtlX3BhaXIodXNlclN0eWxlU2hlZXRJZGVudGlmaWVyLCBXVEZNb3ZlKHVz
ZXJTdHlsZVNoZWV0KSkpOworCisgICAgaW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hl
SW5BbGxGcmFtZXNJbkFsbFBhZ2VzKCk7Cit9CisKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyOjphZGRVc2VyU3R5bGVTaGVldChJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiB3b3JsZCwg
VXNlclN0eWxlU2hlZXQmJiB1c2VyU3R5bGVTaGVldCkKK3sKKyAgICBhZGRVc2VyU3R5bGVTaGVl
dEludGVybmFsKHdvcmxkLCAwLCBXVEZNb3ZlKHVzZXJTdHlsZVNoZWV0KSk7Cit9CisKK3ZvaWQg
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU3R5bGVTaGVldFdpdGhVUkwoSW5q
ZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYgd29ybGQsIGNvbnN0IFVSTCYgdXJsKQoreworICAgIGF1
dG8gaXQgPSBtX3VzZXJTdHlsZVNoZWV0cy5maW5kKCZ3b3JsZCk7CisgICAgaWYgKGl0ID09IG1f
dXNlclN0eWxlU2hlZXRzLmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiBzdHls
ZXNoZWV0cyA9IGl0LT52YWx1ZTsKKworICAgIGJvb2wgc2hlZXRzQ2hhbmdlZCA9IGZhbHNlOwor
ICAgIGZvciAoaW50IGkgPSBzdHlsZXNoZWV0cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewor
ICAgICAgICBpZiAoc3R5bGVzaGVldHNbaV0uc2Vjb25kLnVybCgpID09IHVybCkgeworICAgICAg
ICAgICAgc3R5bGVzaGVldHMucmVtb3ZlKGkpOworICAgICAgICAgICAgc2hlZXRzQ2hhbmdlZCA9
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXNoZWV0c0NoYW5nZWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChzdHlsZXNoZWV0cy5pc0VtcHR5KCkpCisgICAgICAgIG1f
dXNlclN0eWxlU2hlZXRzLnJlbW92ZShpdCk7CisKKyAgICBpbnZhbGlkYXRlSW5qZWN0ZWRTdHls
ZVNoZWV0Q2FjaGVJbkFsbEZyYW1lc0luQWxsUGFnZXMoKTsKK30KKwordm9pZCBXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNoZWV0SW50ZXJuYWwoSW5qZWN0ZWRCdW5k
bGVTY3JpcHRXb3JsZCYgd29ybGQsIHVpbnQ2NF90IHVzZXJTdHlsZVNoZWV0SWRlbnRpZmllcikK
K3sKKyAgICBhdXRvIGl0ID0gbV91c2VyU3R5bGVTaGVldHMuZmluZCgmd29ybGQpOworICAgIGlm
IChpdCA9PSBtX3VzZXJTdHlsZVNoZWV0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
YXV0byYgc3R5bGVzaGVldHMgPSBpdC0+dmFsdWU7CisKKyAgICBib29sIHNoZWV0c0NoYW5nZWQg
PSBmYWxzZTsKKyAgICBmb3IgKGludCBpID0gc3R5bGVzaGVldHMuc2l6ZSgpIC0gMTsgaSA+PSAw
OyAtLWkpIHsKKyAgICAgICAgaWYgKHN0eWxlc2hlZXRzW2ldLmZpcnN0ID09IHVzZXJTdHlsZVNo
ZWV0SWRlbnRpZmllcikgeworICAgICAgICAgICAgc3R5bGVzaGVldHMucmVtb3ZlKGkpOworICAg
ICAgICAgICAgc2hlZXRzQ2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoIXNoZWV0c0NoYW5nZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChzdHlsZXNoZWV0
cy5pc0VtcHR5KCkpCisgICAgICAgIG1fdXNlclN0eWxlU2hlZXRzLnJlbW92ZShpdCk7CisKKyAg
ICBpbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lc0luQWxsUGFnZXMo
KTsKK30KKwordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNo
ZWV0cyhJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiB3b3JsZCkKK3sKKyAgICBpZiAoIW1fdXNl
clN0eWxlU2hlZXRzLnJlbW92ZSgmd29ybGQpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnZh
bGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lc0luQWxsUGFnZXMoKTsKK30K
Kwordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZUFsbFVzZXJDb250ZW50KCkK
K3sKKyAgICBtX3VzZXJTY3JpcHRzLmNsZWFyKCk7CisKKyAgICBpZiAoIW1fdXNlclN0eWxlU2hl
ZXRzLmlzRW1wdHkoKSkgeworICAgICAgICBtX3VzZXJTdHlsZVNoZWV0cy5jbGVhcigpOworICAg
ICAgICBpbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lc0luQWxsUGFn
ZXMoKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpmb3JFYWNo
VXNlclNjcmlwdChjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6RE9NV3JhcHBlcldv
cmxkJiwgY29uc3QgV2ViQ29yZTo6VXNlclNjcmlwdCYpPiYgZnVuY3RvcikgY29uc3QKK3sKKyAg
ICBmb3IgKGNvbnN0IGF1dG8mIHdvcmxkQW5kVXNlclNjcmlwdFZlY3RvciA6IG1fdXNlclNjcmlw
dHMpIHsKKyAgICAgICAgYXV0byYgd29ybGQgPSB3b3JsZEFuZFVzZXJTY3JpcHRWZWN0b3Iua2V5
LT5jb3JlV29ybGQoKTsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpZGVudGlmaWVyVXNlclNj
cmlwdFBhaXIgOiB3b3JsZEFuZFVzZXJTY3JpcHRWZWN0b3IudmFsdWUpCisgICAgICAgICAgICBm
dW5jdG9yKHdvcmxkLCBpZGVudGlmaWVyVXNlclNjcmlwdFBhaXIuc2Vjb25kKTsKKyAgICB9Cit9
CisKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpmb3JFYWNoVXNlclN0eWxlU2hlZXQo
Y29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0Jik+
JiBmdW5jdG9yKSBjb25zdAoreworICAgIGZvciAoYXV0byYgc3R5bGVTaGVldFZlY3RvciA6IG1f
dXNlclN0eWxlU2hlZXRzLnZhbHVlcygpKSB7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgaWRl
bnRpZmllclVzZXJTdHlsZVNoZWV0UGFpciA6IHN0eWxlU2hlZXRWZWN0b3IpCisgICAgICAgICAg
ICBmdW5jdG9yKGlkZW50aWZpZXJVc2VyU3R5bGVTaGVldFBhaXIuc2Vjb25kKTsKKyAgICB9Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJv
bGxlci5oCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Vz
ZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw5ICsyOCwxOSBAQAogCiAjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCiAjaW5jbHVkZSAi
V2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1VzZXJDb250ZW50
Q29udHJvbGxlci5oPgorI2luY2x1ZGUgIldlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBl
cy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvVXNlckNvbnRlbnRQcm92aWRlci5oPgogI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworI2lmIEVOQUJM
RShDT05URU5UX0VYVEVOU0lPTlMpCisjaW5jbHVkZSA8V2ViQ29yZS9Db250ZW50RXh0ZW5zaW9u
c0JhY2tlbmQuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgQ29u
dGVudEV4dGVuc2lvbnMgeworY2xhc3MgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOworfQorfQog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtMzgsMzAgKzQ4LDQ0IEBAIGNsYXNzIEluamVjdGVk
QnVuZGxlU2NyaXB0V29ybGQ7CiBjbGFzcyBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRh
OwogY2xhc3MgV2ViVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvclByb3h5OwogCi1jbGFzcyBX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXIgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXI+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyICB7CitjbGFz
cyBXZWJVc2VyQ29udGVudENvbnRyb2xsZXIgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6VXNlckNv
bnRlbnRQcm92aWRlciwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIFJlZjxXZWJVc2VyQ29udGVudENvbnRyb2xsZXI+IGdldE9yQ3JlYXRlKHVpbnQ2
NF90IGlkZW50aWZpZXIpOwogICAgIHZpcnR1YWwgfldlYlVzZXJDb250ZW50Q29udHJvbGxlcigp
OwogCi0gICAgV2ViQ29yZTo6VXNlckNvbnRlbnRDb250cm9sbGVyJiB1c2VyQ29udGVudENvbnRy
b2xsZXIoKSB7IHJldHVybiBtX3VzZXJDb250ZW50Q29udHJvbGxlcjsgfQotCiAgICAgdWludDY0
X3QgaWRlbnRpZmllcigpIHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfSAKIAorICAgIHZvaWQgYWRk
VXNlclNjcmlwdChJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiwgV2ViQ29yZTo6VXNlclNjcmlw
dCYmKTsKKyAgICB2b2lkIHJlbW92ZVVzZXJTY3JpcHRXaXRoVVJMKEluamVjdGVkQnVuZGxlU2Ny
aXB0V29ybGQmLCBjb25zdCBXZWJDb3JlOjpVUkwmKTsKKyAgICB2b2lkIHJlbW92ZVVzZXJTY3Jp
cHRzKEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQmKTsKKyAgICB2b2lkIGFkZFVzZXJTdHlsZVNo
ZWV0KEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQmLCBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCYm
KTsKKyAgICB2b2lkIHJlbW92ZVVzZXJTdHlsZVNoZWV0V2l0aFVSTChJbmplY3RlZEJ1bmRsZVNj
cmlwdFdvcmxkJiwgY29uc3QgV2ViQ29yZTo6VVJMJik7CisgICAgdm9pZCByZW1vdmVVc2VyU3R5
bGVTaGVldHMoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYpOworICAgIHZvaWQgcmVtb3ZlQWxs
VXNlckNvbnRlbnQoKTsKKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBXZWJVc2VyQ29udGVudENv
bnRyb2xsZXIodWludDY0X3QgaWRlbnRpZmllcik7CiAKKyAgICAvLyBXZWJDb3JlOjpVc2VyQ29u
dGVudFByb3ZpZGVyCisgICAgdm9pZCBmb3JFYWNoVXNlclNjcmlwdChjb25zdCBzdGQ6OmZ1bmN0
aW9uPHZvaWQoV2ViQ29yZTo6RE9NV3JhcHBlcldvcmxkJiwgY29uc3QgV2ViQ29yZTo6VXNlclNj
cmlwdCYpPiYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZm9yRWFjaFVzZXJTdHlsZVNoZWV0
KGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCYp
PiYpIGNvbnN0IG92ZXJyaWRlOworICAgIGNvbnN0IFdlYkNvcmU6OlVzZXJNZXNzYWdlSGFuZGxl
ckRlc2NyaXB0b3JNYXAmIHVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV91c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yc01hcDsgfQorI2lm
IEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisgICAgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCYgdXNlckNvbnRlbnRFeHRlbnNpb25CYWNrZW5k
KCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZDsgfQorI2VuZGlm
CisKICAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlci4KICAgICB2b2lkIGRpZFJlY2VpdmVNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6TWVzc2FnZURlY29kZXImKSBvdmVycmlkZTsKIAog
ICAgIHZvaWQgYWRkVXNlckNvbnRlbnRXb3JsZHMoY29uc3QgVmVjdG9yPHN0ZDo6cGFpcjx1aW50
NjRfdCwgU3RyaW5nPj4mKTsKICAgICB2b2lkIHJlbW92ZVVzZXJDb250ZW50V29ybGRzKGNvbnN0
IFZlY3Rvcjx1aW50NjRfdD4mKTsKIAotICAgIHZvaWQgYWRkVXNlclNjcmlwdHMoY29uc3QgVmVj
dG9yPHN0ZDo6cGFpcjx1aW50NjRfdCwgV2ViQ29yZTo6VXNlclNjcmlwdD4+Jik7Ci0gICAgdm9p
ZCByZW1vdmVVc2VyU2NyaXB0KHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllciwgY29uc3QgU3RyaW5n
JiB1cmxTdHJpbmcpOworICAgIHZvaWQgYWRkVXNlclNjcmlwdHMoY29uc3QgVmVjdG9yPFdlYlVz
ZXJTY3JpcHREYXRhPiYpOworICAgIHZvaWQgcmVtb3ZlVXNlclNjcmlwdCh1aW50NjRfdCB3b3Js
ZElkZW50aWZpZXIsIHVpbnQ2NF90IHVzZXJTY3JpcHRJZGVudGlmaWVyKTsKICAgICB2b2lkIHJl
bW92ZUFsbFVzZXJTY3JpcHRzKGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mKTsKIAotICAgIHZvaWQg
YWRkVXNlclN0eWxlU2hlZXRzKGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0X3QsIFdlYkNv
cmU6OlVzZXJTdHlsZVNoZWV0Pj4mKTsKLSAgICB2b2lkIHJlbW92ZVVzZXJTdHlsZVNoZWV0KHVp
bnQ2NF90IHdvcmxkSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpOworICAgIHZv
aWQgYWRkVXNlclN0eWxlU2hlZXRzKGNvbnN0IFZlY3RvcjxXZWJVc2VyU3R5bGVTaGVldERhdGE+
Jik7CisgICAgdm9pZCByZW1vdmVVc2VyU3R5bGVTaGVldCh1aW50NjRfdCB3b3JsZElkZW50aWZp
ZXIsIHVpbnQ2NF90IHVzZXJTY3JpcHRJZGVudGlmaWVyKTsKICAgICB2b2lkIHJlbW92ZUFsbFVz
ZXJTdHlsZVNoZWV0cyhjb25zdCBWZWN0b3I8dWludDY0X3Q+Jik7CiAKICAgICB2b2lkIGFkZFVz
ZXJTY3JpcHRNZXNzYWdlSGFuZGxlcnMoY29uc3QgVmVjdG9yPFdlYlNjcmlwdE1lc3NhZ2VIYW5k
bGVySGFuZGxlPiYpOwpAQCAtNzMsMTEgKzk3LDI3IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZW1v
dmVBbGxVc2VyQ29udGVudEV4dGVuc2lvbnMoKTsKICNlbmRpZgogCisKKyAgICB2b2lkIGFkZFVz
ZXJTY3JpcHRJbnRlcm5hbChJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiwgdWludDY0X3QgdXNl
clNjcmlwdElkZW50aWZpZXIsIFdlYkNvcmU6OlVzZXJTY3JpcHQmJik7CisgICAgdm9pZCByZW1v
dmVVc2VyU2NyaXB0SW50ZXJuYWwoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYsIHVpbnQ2NF90
IHVzZXJTY3JpcHRJZGVudGlmaWVyKTsKKyAgICB2b2lkIGFkZFVzZXJTdHlsZVNoZWV0SW50ZXJu
YWwoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYsIHVpbnQ2NF90IHVzZXJTdHlsZVNoZWV0SWRl
bnRpZmllciwgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQmJik7CisgICAgdm9pZCByZW1vdmVVc2Vy
U3R5bGVTaGVldEludGVybmFsKEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQmLCB1aW50NjRfdCB1
c2VyU3R5bGVTaGVldElkZW50aWZpZXIpOworCisKICAgICB1aW50NjRfdCBtX2lkZW50aWZpZXI7
Ci0gICAgUmVmPFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJvbGxlcj4gbV91c2VyQ29udGVudENv
bnRyb2xsZXI7Ci0jaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKICAgICBIYXNoTWFw
PHVpbnQ2NF90LCBSZWZQdHI8V2ViVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvclByb3h5Pj4g
bV91c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yczsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxS
ZWZQdHI8SW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZD4sIFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0
X3QsIFdlYkNvcmU6OlVzZXJTY3JpcHQ+Pj4gV29ybGRUb1VzZXJTY3JpcHRNYXA7CisgICAgV29y
bGRUb1VzZXJTY3JpcHRNYXAgbV91c2VyU2NyaXB0czsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxS
ZWZQdHI8SW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZD4sIFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0
X3QsIFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0Pj4+IFdvcmxkVG9Vc2VyU3R5bGVTaGVldE1hcDsK
KyAgICBXb3JsZFRvVXNlclN0eWxlU2hlZXRNYXAgbV91c2VyU3R5bGVTaGVldHM7CisKKyAgICBX
ZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yTWFwIG1fdXNlck1lc3NhZ2VIYW5k
bGVyRGVzY3JpcHRvcnNNYXA7CisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKyAgICBX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kIG1fY29u
dGVudEV4dGVuc2lvbkJhY2tlbmQ7CiAjZW5kaWYKKwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJD
b250ZW50Q29udHJvbGxlci5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5tZXNzYWdl
cy5pbgkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2Vy
Q29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDEyICsyNywxMiBAQCBtZXNzYWdlcyAtPiBXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXIgewogICAgIEFkZFVzZXJDb250ZW50V29ybGRzKFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0X3Qs
IFN0cmluZz4+IHdvcmxkcyk7CiAgICAgUmVtb3ZlVXNlckNvbnRlbnRXb3JsZHMoVmVjdG9yPHVp
bnQ2NF90PiB3b3JsZElkZW50aWZpZXJzKTsKIAotICAgIEFkZFVzZXJTY3JpcHRzKFZlY3Rvcjxz
dGQ6OnBhaXI8dWludDY0X3QsIFdlYkNvcmU6OlVzZXJTY3JpcHQ+PiB1c2VyU2NyaXB0cyk7Ci0g
ICAgUmVtb3ZlVXNlclNjcmlwdCh1aW50NjRfdCB3b3JsZElkZW50aWZpZXIsIFN0cmluZyB1cmwp
OworICAgIEFkZFVzZXJTY3JpcHRzKFZlY3RvcjxzdHJ1Y3QgV2ViS2l0OjpXZWJVc2VyU2NyaXB0
RGF0YT4gdXNlclNjcmlwdHMpOworICAgIFJlbW92ZVVzZXJTY3JpcHQodWludDY0X3Qgd29ybGRJ
ZGVudGlmaWVyLCB1aW50NjRfdCBpZGVudGlmaWVyKTsKICAgICBSZW1vdmVBbGxVc2VyU2NyaXB0
cyhWZWN0b3I8dWludDY0X3Q+IHdvcmxkSWRlbnRpZmllcnMpOwogCi0gICAgQWRkVXNlclN0eWxl
U2hlZXRzKFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0X3QsIFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0
Pj4gdXNlclN0eWxlU2hlZXRzKTsKLSAgICBSZW1vdmVVc2VyU3R5bGVTaGVldCh1aW50NjRfdCB3
b3JsZElkZW50aWZpZXIsIFN0cmluZyB1cmwpOworICAgIEFkZFVzZXJTdHlsZVNoZWV0cyhWZWN0
b3I8c3RydWN0IFdlYktpdDo6V2ViVXNlclN0eWxlU2hlZXREYXRhPiB1c2VyU3R5bGVTaGVldHMp
OworICAgIFJlbW92ZVVzZXJTdHlsZVNoZWV0KHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllciwgdWlu
dDY0X3QgaWRlbnRpZmllcik7CiAgICAgUmVtb3ZlQWxsVXNlclN0eWxlU2hlZXRzKFZlY3Rvcjx1
aW50NjRfdD4gd29ybGRJZGVudGlmaWVycyk7CiAKICAgICBBZGRVc2VyU2NyaXB0TWVzc2FnZUhh
bmRsZXJzKFZlY3RvcjxXZWJLaXQ6OldlYlNjcmlwdE1lc3NhZ2VIYW5kbGVySGFuZGxlPiBzY3Jp
cHRNZXNzYWdlSGFuZGxlcnMpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICsz
OSw3IEBACiAjaW5jbHVkZSAiRXZlbnREaXNwYXRjaGVyLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRC
dW5kbGUuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdC5oIgorI2lu
Y2x1ZGUgIkluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgi
CiAjaW5jbHVkZSAiTmV0c2NhcGVQbHVnaW4uaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QZXJt
aXNzaW9uUmVxdWVzdE1hbmFnZXIuaCIKQEAgLTM5Nyw3ICszOTgsNyBAQCBXZWJQYWdlOjpXZWJQ
YWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgCiAKICAgICBwYWdlQ29uZmlndXJhdGlvbi5kYXRh
YmFzZVByb3ZpZGVyID0gV2ViRGF0YWJhc2VQcm92aWRlcjo6Z2V0T3JDcmVhdGUobV9wYWdlR3Jv
dXAtPnBhZ2VHcm91cElEKCkpOwogICAgIHBhZ2VDb25maWd1cmF0aW9uLnN0b3JhZ2VOYW1lc3Bh
Y2VQcm92aWRlciA9IFdlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcjo6Z2V0T3JDcmVhdGUobV9w
YWdlR3JvdXAtPnBhZ2VHcm91cElEKCkpOwotICAgIHBhZ2VDb25maWd1cmF0aW9uLnVzZXJDb250
ZW50Q29udHJvbGxlciA9ICZtX3VzZXJDb250ZW50Q29udHJvbGxlci0+dXNlckNvbnRlbnRDb250
cm9sbGVyKCk7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24udXNlckNvbnRlbnRQcm92aWRlciA9IG1f
dXNlckNvbnRlbnRDb250cm9sbGVyLnB0cigpOwogICAgIHBhZ2VDb25maWd1cmF0aW9uLnZpc2l0
ZWRMaW5rU3RvcmUgPSBWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjo6Z2V0T3JDcmVhdGUocGFy
YW1ldGVycy52aXNpdGVkTGlua1RhYmxlSUQpOwogCiAjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NE
SykKQEAgLTUyMjMsMjEgKzUyMjQsMjEgQEAgdm9pZCBXZWJQYWdlOjppbWFnZU9yTWVkaWFEb2N1
bWVudFNpemVDaAogCiB2b2lkIFdlYlBhZ2U6OmFkZFVzZXJTY3JpcHQoY29uc3QgU3RyaW5nJiBz
b3VyY2UsIFdlYkNvcmU6OlVzZXJDb250ZW50SW5qZWN0ZWRGcmFtZXMgaW5qZWN0ZWRGcmFtZXMs
IFdlYkNvcmU6OlVzZXJTY3JpcHRJbmplY3Rpb25UaW1lIGluamVjdGlvblRpbWUpCiB7Ci0gICAg
V2ViQ29yZTo6VXNlclNjcmlwdCB1c2VyU2NyaXB0KHNvdXJjZSwgV2ViQ29yZTo6YmxhbmtVUkwo
KSwgVmVjdG9yPFN0cmluZz4oKSwgVmVjdG9yPFN0cmluZz4oKSwgaW5qZWN0aW9uVGltZSwgaW5q
ZWN0ZWRGcmFtZXMpOworICAgIFdlYkNvcmU6OlVzZXJTY3JpcHQgdXNlclNjcmlwdHsgc291cmNl
LCBXZWJDb3JlOjpibGFua1VSTCgpLCBWZWN0b3I8U3RyaW5nPigpLCBWZWN0b3I8U3RyaW5nPigp
LCBpbmplY3Rpb25UaW1lLCBpbmplY3RlZEZyYW1lcyB9OwogCi0gICAgbV91c2VyQ29udGVudENv
bnRyb2xsZXItPnVzZXJDb250ZW50Q29udHJvbGxlcigpLmFkZFVzZXJTY3JpcHQobWFpblRocmVh
ZE5vcm1hbFdvcmxkKCksIHN0ZDo6bWFrZV91bmlxdWU8V2ViQ29yZTo6VXNlclNjcmlwdD4odXNl
clNjcmlwdCkpOworICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5hZGRVc2VyU2NyaXB0KCpJ
bmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkOjpub3JtYWxXb3JsZCgpLCBXVEZNb3ZlKHVzZXJTY3Jp
cHQpKTsKIH0KIAogdm9pZCBXZWJQYWdlOjphZGRVc2VyU3R5bGVTaGVldChjb25zdCBTdHJpbmcm
IHNvdXJjZSwgV2ViQ29yZTo6VXNlckNvbnRlbnRJbmplY3RlZEZyYW1lcyBpbmplY3RlZEZyYW1l
cykKIHsKLSAgICBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCB1c2VyU3R5bGVTaGVldChzb3VyY2Us
IFdlYkNvcmU6OmJsYW5rVVJMKCksIFZlY3RvcjxTdHJpbmc+KCksIFZlY3RvcjxTdHJpbmc+KCks
IGluamVjdGVkRnJhbWVzLCBVc2VyU3R5bGVVc2VyTGV2ZWwpOworICAgIFdlYkNvcmU6OlVzZXJT
dHlsZVNoZWV0IHVzZXJTdHlsZVNoZWV0eyBzb3VyY2UsIFdlYkNvcmU6OmJsYW5rVVJMKCksIFZl
Y3RvcjxTdHJpbmc+KCksIFZlY3RvcjxTdHJpbmc+KCksIGluamVjdGVkRnJhbWVzLCBVc2VyU3R5
bGVVc2VyTGV2ZWwgfTsKIAotICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT51c2VyQ29udGVu
dENvbnRyb2xsZXIoKS5hZGRVc2VyU3R5bGVTaGVldChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSwg
c3RkOjptYWtlX3VuaXF1ZTxXZWJDb3JlOjpVc2VyU3R5bGVTaGVldD4odXNlclN0eWxlU2hlZXQp
LCBJbmplY3RJbkV4aXN0aW5nRG9jdW1lbnRzKTsKKyAgICBtX3VzZXJDb250ZW50Q29udHJvbGxl
ci0+YWRkVXNlclN0eWxlU2hlZXQoKkluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQ6Om5vcm1hbFdv
cmxkKCksIFdURk1vdmUodXNlclN0eWxlU2hlZXQpKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpyZW1v
dmVBbGxVc2VyQ29udGVudCgpCiB7Ci0gICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPnVzZXJD
b250ZW50Q29udHJvbGxlcigpLnJlbW92ZUFsbFVzZXJDb250ZW50KCk7CisgICAgbV91c2VyQ29u
dGVudENvbnRyb2xsZXItPnJlbW92ZUFsbFVzZXJDb250ZW50KCk7CiB9CiAKIHZvaWQgV2ViUGFn
ZTo6ZGlzcGF0Y2hEaWRMYXlvdXQoV2ViQ29yZTo6TGF5b3V0TWlsZXN0b25lcyBtaWxlc3RvbmVz
KQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFBy
b3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZUdyb3VwUHJveHkuY3BwCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Niw5ICs1Niw5IEBAIFdlYlBhZ2VHcm91cFByb3h5Ojp+V2ViUGFnZUdyb3VwUHJveHko
KQogewogfQogCi1XZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXImIFdlYlBhZ2VHcm91cFBy
b3h5Ojp1c2VyQ29udGVudENvbnRyb2xsZXIoKQorV2ViVXNlckNvbnRlbnRDb250cm9sbGVyJiBX
ZWJQYWdlR3JvdXBQcm94eTo6dXNlckNvbnRlbnRDb250cm9sbGVyKCkKIHsKLSAgICByZXR1cm4g
bV91c2VyQ29udGVudENvbnRyb2xsZXItPnVzZXJDb250ZW50Q29udHJvbGxlcigpOworICAgIHJl
dHVybiBtX3VzZXJDb250ZW50Q29udHJvbGxlcjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJv
eHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZUdyb3VwUHJveHkuaAkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDcgKzMyLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgUGFnZUdyb3VwOwotY2xh
c3MgVXNlckNvbnRlbnRDb250cm9sbGVyOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTUw
LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNWaXNpYmxlVG9IaXN0b3J5Q2xpZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9kYXRhLnZpc2libGVUb0hpc3RvcnlDbGllbnQ7IH0KICAgICBXZWJD
b3JlOjpQYWdlR3JvdXAqIGNvcmVQYWdlR3JvdXAoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VHcm91
cDsgfQogCi0gICAgV2ViQ29yZTo6VXNlckNvbnRlbnRDb250cm9sbGVyJiB1c2VyQ29udGVudENv
bnRyb2xsZXIoKTsKKyAgICBXZWJVc2VyQ29udGVudENvbnRyb2xsZXImIHVzZXJDb250ZW50Q29u
dHJvbGxlcigpOwogCiBwcml2YXRlOgogICAgIFdlYlBhZ2VHcm91cFByb3h5KGNvbnN0IFdlYlBh
Z2VHcm91cERhdGEmKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODE0NykKKysr
IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2
IEBACisyMDE2LTAzLTE0ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
QWRkIGEgYmFzZVVSTCBwYXJhbWV0ZXIgdG8gX1dLVXNlclN0eWxlU2hlZXQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTIxOQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1t
OgorICAgICAgICAoLVtXZWJWaWV3IF9jb21tb25Jbml0aWFsaXphdGlvbldpdGhGcmFtZU5hbWU6
Z3JvdXBOYW1lOl0pOgorICAgICAgICAoLVtXZWJWaWV3IGluaXRTaW1wbGVIVE1MRG9jdW1lbnRX
aXRoU3R5bGU6ZnJhbWU6cHJlZmVyZW5jZXM6Z3JvdXBOYW1lOl0pOgorICAgICAgICAoLVtXZWJW
aWV3IHNldEdyb3VwTmFtZTpdKToKKyAgICAgICAgVXBkYXRlIHRvIGFjY291bnQgZm9yIHRoZSBu
YW1lIGNoYW5nZSBmcm9tIFVzZXJDb250ZW50Q29udHJvbGxlciAtPiBVc2VyQ29udGVudFByb3Zp
ZGVyLgorCiAyMDE2LTAzLTEzICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+
CiAKICAgICAgICAgUmVtb3ZlIEVOQUJMRShFUzZfVEVNUExBVEVfTElURVJBTF9TWU5UQVgpIGd1
YXJkcwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gMTk4
MTQ3KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDA1LDcgKzEwMDUsNyBAQCAtICh2b2lkKV9jb21tb25Jbml0aWFsaXphdGlvbldp
dGhGcmFtZU5hCiAgICAgcGFnZUNvbmZpZ3VyYXRpb24ucHJvZ3Jlc3NUcmFja2VyQ2xpZW50ID0g
bmV3IFdlYlByb2dyZXNzVHJhY2tlckNsaWVudChzZWxmKTsKICAgICBwYWdlQ29uZmlndXJhdGlv
bi5kYXRhYmFzZVByb3ZpZGVyID0gJldlYkRhdGFiYXNlUHJvdmlkZXI6OnNpbmdsZXRvbigpOwog
ICAgIHBhZ2VDb25maWd1cmF0aW9uLnN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlciA9ICZfcHJpdmF0
ZS0+Z3JvdXAtPnN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcigpOwotICAgIHBhZ2VDb25maWd1cmF0
aW9uLnVzZXJDb250ZW50Q29udHJvbGxlciA9ICZfcHJpdmF0ZS0+Z3JvdXAtPnVzZXJDb250ZW50
Q29udHJvbGxlcigpOworICAgIHBhZ2VDb25maWd1cmF0aW9uLnVzZXJDb250ZW50UHJvdmlkZXIg
PSAmX3ByaXZhdGUtPmdyb3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIoKTsKICAgICBwYWdlQ29u
ZmlndXJhdGlvbi52aXNpdGVkTGlua1N0b3JlID0gJl9wcml2YXRlLT5ncm91cC0+dmlzaXRlZExp
bmtTdG9yZSgpOwogICAgIF9wcml2YXRlLT5wYWdlID0gbmV3IFBhZ2UocGFnZUNvbmZpZ3VyYXRp
b24pOwogCkBAIC0xMjUwLDcgKzEyNTAsNyBAQCAtIChpZClpbml0U2ltcGxlSFRNTERvY3VtZW50
V2l0aFN0eWxlOihOCiAgICAgcGFnZUNvbmZpZ3VyYXRpb24ucHJvZ3Jlc3NUcmFja2VyQ2xpZW50
ID0gbmV3IFdlYlByb2dyZXNzVHJhY2tlckNsaWVudChzZWxmKTsKICAgICBwYWdlQ29uZmlndXJh
dGlvbi5kYXRhYmFzZVByb3ZpZGVyID0gJldlYkRhdGFiYXNlUHJvdmlkZXI6OnNpbmdsZXRvbigp
OwogICAgIHBhZ2VDb25maWd1cmF0aW9uLnN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlciA9ICZfcHJp
dmF0ZS0+Z3JvdXAtPnN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcigpOwotICAgIHBhZ2VDb25maWd1
cmF0aW9uLnVzZXJDb250ZW50Q29udHJvbGxlciA9ICZfcHJpdmF0ZS0+Z3JvdXAtPnVzZXJDb250
ZW50Q29udHJvbGxlcigpOworICAgIHBhZ2VDb25maWd1cmF0aW9uLnVzZXJDb250ZW50UHJvdmlk
ZXIgPSAmX3ByaXZhdGUtPmdyb3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIoKTsKICAgICBwYWdl
Q29uZmlndXJhdGlvbi52aXNpdGVkTGlua1N0b3JlID0gJl9wcml2YXRlLT5ncm91cC0+dmlzaXRl
ZExpbmtTdG9yZSgpOwogCiAgICAgX3ByaXZhdGUtPnBhZ2UgPSBuZXcgUGFnZShwYWdlQ29uZmln
dXJhdGlvbik7CkBAIC02MjE3LDcgKzYyMTcsNyBAQCAtICh2b2lkKXNldEdyb3VwTmFtZTooTlNT
dHJpbmcgKilncm91cE5hCiAgICAgaWYgKCFfcHJpdmF0ZS0+cGFnZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgX3ByaXZhdGUtPnBhZ2UtPnNldFVzZXJDb250ZW50Q29udHJvbGxlcigmX3ByaXZh
dGUtPmdyb3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIoKSk7CisgICAgX3ByaXZhdGUtPnBhZ2Ut
PnNldFVzZXJDb250ZW50UHJvdmlkZXIoX3ByaXZhdGUtPmdyb3VwLT51c2VyQ29udGVudENvbnRy
b2xsZXIoKSk7CiAgICAgX3ByaXZhdGUtPnBhZ2UtPnNldFZpc2l0ZWRMaW5rU3RvcmUoX3ByaXZh
dGUtPmdyb3VwLT52aXNpdGVkTGlua1N0b3JlKCkpOwogICAgIF9wcml2YXRlLT5wYWdlLT5zZXRH
cm91cE5hbWUoZ3JvdXBOYW1lKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCShyZXZpc2lv
biAxOTgxNDcpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjkzOSw3ICsyOTM5LDcgQEAgSFJFU1VMVCBXZWJWaWV3Ojppbml0V2l0aEZyYW1lKFJF
Q1QgZnJhbQogICAgIGNvbmZpZ3VyYXRpb24uZGF0YWJhc2VQcm92aWRlciA9ICZXZWJEYXRhYmFz
ZVByb3ZpZGVyOjpzaW5nbGV0b24oKTsKICAgICBjb25maWd1cmF0aW9uLnN0b3JhZ2VOYW1lc3Bh
Y2VQcm92aWRlciA9ICZtX3dlYlZpZXdHcm91cC0+c3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyKCk7
CiAgICAgY29uZmlndXJhdGlvbi5wcm9ncmVzc1RyYWNrZXJDbGllbnQgPSBzdGF0aWNfY2FzdDxX
ZWJGcmFtZUxvYWRlckNsaWVudCo+KGNvbmZpZ3VyYXRpb24ubG9hZGVyQ2xpZW50Rm9yTWFpbkZy
YW1lKTsKLSAgICBjb25maWd1cmF0aW9uLnVzZXJDb250ZW50Q29udHJvbGxlciA9ICZtX3dlYlZp
ZXdHcm91cC0+dXNlckNvbnRlbnRDb250cm9sbGVyKCk7CisgICAgY29uZmlndXJhdGlvbi51c2Vy
Q29udGVudFByaXZpZGVyID0gJm1fd2ViVmlld0dyb3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIo
KTsKICAgICBjb25maWd1cmF0aW9uLnZpc2l0ZWRMaW5rU3RvcmUgPSAmbV93ZWJWaWV3R3JvdXAt
PnZpc2l0ZWRMaW5rU3RvcmUoKTsKIAogICAgIG1fcGFnZSA9IG5ldyBQYWdlKGNvbmZpZ3VyYXRp
b24pOwpAQCAtMzg1OSw3ICszODU5LDcgQEAgSFJFU1VMVCBXZWJWaWV3OjpzZXRHcm91cE5hbWUo
X0luXyBCU1RSIAogICAgIGlmICghbV9wYWdlKQogICAgICAgICByZXR1cm4gU19PSzsKIAotICAg
IG1fcGFnZS0+c2V0VXNlckNvbnRlbnRDb250cm9sbGVyKCZtX3dlYlZpZXdHcm91cC0+dXNlckNv
bnRlbnRDb250cm9sbGVyKCkpOworICAgIG1fcGFnZS0+c2V0VXNlckNvbnRlbnRQcm92aWRlciht
X3dlYlZpZXdHcm91cC0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkpOwogICAgIG1fcGFnZS0+c2V0
VmlzaXRlZExpbmtTdG9yZShtX3dlYlZpZXdHcm91cC0+dmlzaXRlZExpbmtTdG9yZSgpKTsKICAg
ICBtX3BhZ2UtPnNldEdyb3VwTmFtZSh0b1N0cmluZyhncm91cE5hbWUpKTsKICAgICByZXR1cm4g
U19PSzsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274046</attachid>
            <date>2016-03-14 16:10:50 -0700</date>
            <delta_ts>2016-03-14 16:56:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155219-20160314161038.patch</filename>
            <type>text/plain</type>
            <size>116315</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBAQAorMjAxNi0wMy0xNCAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBhIGJhc2VVUkwgcGFyYW1ldGVy
IHRvIF9XS1VzZXJTdHlsZVNoZWV0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTUyMTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAtIE1vdmVzIHRvIGEgbW9kZWwgZm9yIHVzZXIgY29udGVudCB3aGVyZSBp
bnN0ZWFkIG9mIGVhY2ggcGFnZSBoYXZpbmcgYSBXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xs
ZXIKKyAgICAgICAgICBvYmplY3QsIHdlIGhhdmUgYW4gYWJzdHJhY3QgV2ViQ29yZTo6VXNlckNv
bnRlbnRQcm92aWRlciBpbnRlcmZhY2UgdGhhdCBjYW4gYmUgaW1wbGVtZW50ZWQgYXQgdGhlIFdl
YktpdAorICAgICAgICAgIGxldmVsLiBGb3Igbm93LCBsZWdhY3kgV2ViS2l0IGNvbnRpbnVlcyB0
byB1c2UgdGhlIG9sZCBVc2VyQ29udGVudENvbnRyb2xsZXIsIHdoaWNoIGltcGxlbWVudHMgCisg
ICAgICAgICAgV2ViQ29yZTo6VXNlckNvbnRlbnRQcm92aWRlciwgYW5kIFdlYktpdDIgaW1wbGVt
ZW50cyBpdHMgb3duIGltcGxlbWVudGF0aW9uIHNvIGl0IGNhbiBzdG9yZSBhZGRpdGlvbmFsCisg
ICAgICAgICAgc3RhdGUuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgIEFkZCBuZXcgZmlsZXMuCisKKyAgICAgICAgKiBkb20vRXh0ZW5zaW9u
U3R5bGVTaGVldHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uU3R5bGVTaGVldHM6
OnVwZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlKToKKyAgICAgICAgU3dpdGNoIHRvIHVzaW5n
IGZvckVhY2hVc2VyU3R5bGVTaGVldCBvbiB0aGUgVXNlckNvbnRlbnRQcm92aWRlci4KKworICAg
ICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50Ojpsb2FkUmVzb3VyY2UpOgorICAgICAgICBSZW1vdmUgbnVsbCBjaGVjayBu
b3cgdGhhdCB3ZSBhbHdheXMgaGF2ZSBhIFVzZXJDb250ZW50UHJvdmlkZXIuCisKKyAgICAgICAg
KiBsb2FkZXIvRW1wdHlDbGllbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxXaXRoRW1w
dHlDbGllbnRzKToKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgIEFk
ZCBuZXcgRW1wdHlDbGllbnRzLgorCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5
KToKKyAgICAgICAgUmVtb3ZlIG51bGwgY2hlY2sgbm93IHRoYXQgd2UgYWx3YXlzIGhhdmUgYSBV
c2VyQ29udGVudFByb3ZpZGVyLgorCisgICAgICAgICogbG9hZGVyL1BpbmdMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQpOgor
ICAgICAgICBSZW1vdmUgbnVsbCBjaGVjayBub3cgdGhhdCB3ZSBhbHdheXMgaGF2ZSBhIFVzZXJD
b250ZW50UHJvdmlkZXIuCisKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdEludGVybmFs
KToKKyAgICAgICAgUmVtb3ZlIG51bGwgY2hlY2sgbm93IHRoYXQgd2UgYWx3YXlzIGhhdmUgYSBV
c2VyQ29udGVudFByb3ZpZGVyLgorCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpy
ZXF1ZXN0UmVzb3VyY2UpOgorICAgICAgICBSZW1vdmUgbnVsbCBjaGVjayBub3cgdGhhdCB3ZSBh
bHdheXMgaGF2ZSBhIFVzZXJDb250ZW50UHJvdmlkZXIuCisKKyAgICAgICAgKiBwYWdlL0RPTVdp
bmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OnNob3VsZEhhdmVXZWJLaXRO
YW1lc3BhY2VGb3JXb3JsZCk6CisgICAgICAgIFJlbW92ZSBudWxsIGNoZWNrcyBub3cgdGhhdCB3
ZSBhbHdheXMgaGF2ZSBhIFVzZXJDb250ZW50UHJvdmlkZXIsIGFuZCB1c2VyTWVzc2FnZUhhbmRs
ZXJEZXNjcmlwdG9ycworICAgICAgICByZXR1cm5zIGEgcmVmZXJlbmNlLgorCisgICAgICAgIChX
ZWJDb3JlOjpET01XaW5kb3c6Om9wZW4pOgorICAgICAgICBSZW1vdmUgbnVsbCBjaGVjayBub3cg
dGhhdCB3ZSBhbHdheXMgaGF2ZSBhIFVzZXJDb250ZW50UHJvdmlkZXIuCisKKyAgICAgICAgKiBw
YWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjppbmplY3RVc2VyU2NyaXB0
cyk6CisgICAgICAgIFNpbXBsaWZ5IGJ5IGxpZnRpbmcgZG9jdW1lbnQgY2hlY2sgb3V0IG9mIHRo
ZSBtYWluIGxvb3AgYW5kIHVzaW5nIGZvckVhY2hVc2VyU2NyaXB0LgorCisgICAgICAgICogcGFn
ZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OlBhZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZTo6flBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6dXNlckNvbnRlbnRQ
cm92aWRlcik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRVc2VyQ29udGVudFByb3ZpZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldFVzZXJDb250ZW50Q29udHJvbGxlcik6IERl
bGV0ZWQuCisgICAgICAgICogcGFnZS9QYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp1
c2VyQ29udGVudENvbnRyb2xsZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvUGFnZUNvbmZp
Z3VyYXRpb24uaDoKKyAgICAgICAgU3RvcmUgdGhlIFVzZXJDb250ZW50UHJvdmlkZXIgaW4gYSBS
ZWYsIGFuZCByZXF1aXJlIFBhZ2VDb25maWd1cmF0aW9ucyB0byBwcm92aWRlIG9uZS4gVGhpcwor
ICAgICAgICByZW1vdmVzIGEgYnVuY2ggb2YgbnVsbCBjaGVja3MgYW5kIHNpbXBsaWZpZXMgdGhl
IGNvZGUuCisKKyAgICAgICAgKiBwYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6On5Vc2VyQ29udGVudENvbnRyb2xs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRlbnRDb250cm9sbGVyOjpmb3JFYWNoVXNl
clNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OmZvckVh
Y2hVc2VyU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xs
ZXI6OmFkZFVzZXJTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRlbnRDb250cm9s
bGVyOjpyZW1vdmVVc2VyU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlwdHMpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRl
bnRDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpVc2Vy
Q29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNv
cmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclN0eWxlU2hlZXRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlck1lc3NhZ2VIYW5kbGVy
RGVzY3JpcHRvcik6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OnJl
bW92ZVVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IpOgorICAgICAgICAoV2ViQ29yZTo6VXNl
ckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyQ29udGVudEV4dGVuc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxsVXNl
ckNvbnRlbnRFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJv
bGxlcjo6cmVtb3ZlQWxsVXNlckNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRl
bnRDb250cm9sbGVyOjphZGRQYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlVzZXJD
b250ZW50Q29udHJvbGxlcjo6cmVtb3ZlUGFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
Ojpjb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
VXNlckNvbnRlbnRDb250cm9sbGVyOjpwcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9yTG9h
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OmFj
dGlvbnNGb3JSZXNvdXJjZUxvYWQpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvVXNlckNvbnRl
bnRDb250cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6
OnVzZXJTY3JpcHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6dXNlclN0eWxlU2hlZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlVz
ZXJDb250ZW50Q29udHJvbGxlcjo6dXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMpOiBEZWxl
dGVkLgorICAgICAgICBBZGQgaW5oZXJpdGFuY2UgZnJvbSBVc2VyQ29udGVudFByb3ZpZGVyIGFu
ZCBzaW1wbGlmeSB0aGluZ3MgYnkgcmVtb3ZpbmcgdW5pcXVlX3B0cnMKKyAgICAgICAgdGhhdCB3
ZXJlIGhvbGRpbmcgdGhlIG1lbWJlciB2YXJpYWJsZXMuIFRoZXJlIGlzIHVzdWFsbHkgb25seSBv
bmUgVXNlckNvbnRlbnRDb250cm9sbGVyCisgICAgICAgIHNvIGhhdmluZyB0aGVzZSBpbiB1bmlx
dWVfcHRycyBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZS4KKyAgICAgICAgCisgICAgICAgICogcGFn
ZS9Vc2VyQ29udGVudFByb3ZpZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpVc2Vy
Q29udGVudFByb3ZpZGVyOjpVc2VyQ29udGVudFByb3ZpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlVzZXJDb250ZW50UHJvdmlkZXI6On5Vc2VyQ29udGVudFByb3ZpZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlVzZXJDb250ZW50UHJvdmlkZXI6OmFkZFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
VXNlckNvbnRlbnRQcm92aWRlcjo6cmVtb3ZlUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpVc2Vy
Q29udGVudFByb3ZpZGVyOjppbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZy
YW1lc0luQWxsUGFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGVudEV4dGVuc2lvbnNFbmFi
bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50UHJvdmlkZXI6OnByb2Nlc3NDb250
ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50
UHJvdmlkZXI6OmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQpOgorICAgICAgICAqIHBhZ2UvVXNlckNv
bnRlbnRQcm92aWRlci5oOiBBZGRlZC4KKyAgICAgICAgQWRkIGFic3RyYWN0IGNsYXNzIGZvciBw
cm92aWRpbmcgdXNlciBjb250ZW50IGFuZCBhZGQgc29tZSBoZWxwZXJzIG9uIGl0LgorCisgICAg
ICAgICogcGFnZS9Vc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yLmg6CisgICAgICAgIChXZWJD
b3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcjo6Y2xpZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3I6OmludmFsaWRhdGVDbGllbnQpOgor
ICAgICAgICAqIHBhZ2UvVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlOjpoYW5kbGVyKToKKyAgICAg
ICAgU2ltcGxpZnkgbm93IHRoYXQgdXNlckNvbnRlbnRQcm92aWRlcigpIGFuZCB1c2VyTWVzc2Fn
ZUhhbmRsZXJEZXNjcmlwdG9ycygpIGFyZSByZWZlcmVuY2VzLgorCiAyMDE2LTAzLTE0ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgUmVncmVzc2lvbihyMTk3OTgx
KTogSHVnZSByZWdyZXNzaW9uIG9uIE1hYyBQTFQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMjA1Myw2ICsyMDUzLDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHBh
Z2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCiAgICAgcGFnZS9TdXNwZW5kYWJsZVRpbWVyLmNwcAog
ICAgIHBhZ2UvVGV4dEluZGljYXRvci5jcHAKKyAgICBwYWdlL1VzZXJDb250ZW50UHJvdmlkZXIu
Y3BwCiAgICAgcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCiAgICAgcGFnZS9Vc2VyQ29u
dGVudFVSTFBhdHRlcm4uY3BwCiAgICAgcGFnZS9WaXNpdGVkTGlua1N0b3JlLmNwcApJbmRleDog
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQwLDYgKzI3NDAsOCBAQAogCQk3QzNC
Nzk3MjE5MDg3NTdCMDBCNDdBMkQgLyogVXNlck1lc3NhZ2VIYW5kbGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzNCNzk3MDE5MDg3NTdCMDBCNDdB
MkQgLyogVXNlck1lc3NhZ2VIYW5kbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0MzRTUxMEExOERGOEYzNTAwQzExMkY3IC8qIEhUTUxDb252
ZXJ0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdD
M0U1MTA4MThERjhGMzUwMEMxMTJGNyAvKiBIVE1MQ29udmVydGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0MzRTUxMEIxOERGOEYzNTAwQzEx
MkY3IC8qIEhUTUxDb252ZXJ0ZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3QzNFNTEwOTE4REY4RjM1MDBDMTEyRjcgLyogSFRNTENvbnZlcnRlci5t
bSAqLzsgfTsKKwkJN0MzRjAxQzExQzhFNUFCQTAwQUREOTYyIC8qIFVzZXJDb250ZW50UHJvdmlk
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDM0Yw
MUMwMUM4RTVBQjEwMEFERDk2MiAvKiBVc2VyQ29udGVudFByb3ZpZGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0MzRjAxQzIxQzhFNUFDMjAw
QUREOTYyIC8qIFVzZXJDb250ZW50UHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzRjAxQkYxQzhFNUFCMTAwQUREOTYyIC8qIFVzZXJD
b250ZW50UHJvdmlkZXIuY3BwICovOyB9OwogCQk3QzQ4QTZEMDE5MUM5RDY1MDAwMjY2NzQgLyog
V2ViS2l0TmFtZXNwYWNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdDNDhBNkNFMTkxQzlENjUwMDAyNjY3NCAvKiBXZWJLaXROYW1lc3BhY2UuY3Bw
ICovOyB9OwogCQk3QzQ4QTZEMTE5MUM5RDY1MDAwMjY2NzQgLyogV2ViS2l0TmFtZXNwYWNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzQ4QTZDRjE5
MUM5RDY1MDAwMjY2NzQgLyogV2ViS2l0TmFtZXNwYWNlLmggKi87IH07CiAJCTdDNDkwMkEyMThC
ODI1RjgwMDdEOTI5OCAvKiBET01XaGVlbEV2ZW50SW50ZXJuYWwuaCBpbiBDb3B5IEdlbmVyYXRl
ZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1OTg5RENBMEFD
QzhCQkQwMEEwQkM1MSAvKiBET01XaGVlbEV2ZW50SW50ZXJuYWwuaCAqLzsgfTsKQEAgLTEwMzgx
LDYgKzEwMzgzLDggQEAKIAkJN0MzQjc5NzAxOTA4NzU3QjAwQjQ3QTJEIC8qIFVzZXJNZXNzYWdl
SGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyTWVzc2FnZUhh
bmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MzRTUxMDgxOERGOEYzNTAw
QzExMkY3IC8qIEhUTUxDb252ZXJ0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSFRNTENvbnZlcnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzNFNTEw
OTE4REY4RjM1MDBDMTEyRjcgLyogSFRNTENvbnZlcnRlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IEhUTUxDb252ZXJ0ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTdDM0YwMUJGMUM4RTVBQjEwMEFERDk2MiAvKiBVc2VyQ29udGVudFByb3Zp
ZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVzZXJDb250ZW50
UHJvdmlkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzNGMDFDMDFDOEU1
QUIxMDBBREQ5NjIgLyogVXNlckNvbnRlbnRQcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBVc2VyQ29udGVudFByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdDNDE4OUFCMUIwN0MxNzAwMDBGQTc1NyAvKiBHbG9iYWxFdmVudEhhbmRsZXJz
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBHbG9iYWxFdmVudEhhbmRsZXJzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0M0MTg5QUMxQjA3Q0JGMjAwMEZBNzU3IC8qIFdpbmRvd0V2ZW50SGFuZGxlcnMu
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IFdpbmRvd0V2ZW50SGFuZGxlcnMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3QzQ4QTZDRTE5MUM5RDY1MDAwMjY2NzQgLyogV2ViS2l0TmFtZXNwYWNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktpdE5hbWVzcGFjZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODExOSw2ICsxODEyMyw4IEBACiAJCQkJ
MkQ0Rjk2RjIxQTFFQ0MyNDAwOThCRjg4IC8qIFRleHRJbmRpY2F0b3IuaCAqLywKIAkJCQkxQUU3
OUQ0MDE4OERCNjFGMDAyMjM5QzIgLyogVXNlckNvbnRlbnRDb250cm9sbGVyLmNwcCAqLywKIAkJ
CQkxQUU3OUQ0MTE4OERCNjFGMDAyMjM5QzIgLyogVXNlckNvbnRlbnRDb250cm9sbGVyLmggKi8s
CisJCQkJN0MzRjAxQkYxQzhFNUFCMTAwQUREOTYyIC8qIFVzZXJDb250ZW50UHJvdmlkZXIuY3Bw
ICovLAorCQkJCTdDM0YwMUMwMUM4RTVBQjEwMEFERDk2MiAvKiBVc2VyQ29udGVudFByb3ZpZGVy
LmggKi8sCiAJCQkJMDAzRjFGRTkxMUU2QUI0MzAwODI1OEQ5IC8qIFVzZXJDb250ZW50VHlwZXMu
aCAqLywKIAkJCQlCQ0FDRjNCQTEwNzI5MjFBMDBDMEM4QTMgLyogVXNlckNvbnRlbnRVUkxQYXR0
ZXJuLmNwcCAqLywKIAkJCQlCQ0FDRjNCQjEwNzI5MjFBMDBDMEM4QTMgLyogVXNlckNvbnRlbnRV
UkxQYXR0ZXJuLmggKi8sCkBAIC0yODI1Miw2ICsyODI1OCw3IEBACiAJCQkJMDg4QzJGN0ExMjM5
MDA4MTAwM0Q2NUNFIC8qIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwODEwOTNEQzEyNTVGMEU3MDBFRDlEMjkgLyogU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNC
dWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODE2NjhEQTEyNTYwM0Q1MDA2RjI1REUgLyog
U1ZHVGV4dExheW91dEVuZ2luZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0MzRjAxQzExQzhFNUFC
QTAwQUREOTYyIC8qIFVzZXJDb250ZW50UHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4
MEU0OTI2MTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuaCBp
biBIZWFkZXJzICovLAogCQkJCTA4MEU0OTI4MTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5
b3V0RW5naW5lU3BhY2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDhGMEJGQzYxMjU1QzUzQzAw
MDc1MTg1IC8qIFNWR1RleHRNZXRyaWNzLmggaW4gSGVhZGVycyAqLywKQEAgLTMwNDI3LDYgKzMw
NDM0LDcgQEAKIAkJCQk1MTFFRjJEMTE3RjBGREYxMDBFNEZBMTYgLyogSlNJREJPYmplY3RTdG9y
ZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTFFRjJDODE3RjBGRDM1MDBFNEZBMTYg
LyogSlNJREJPcGVuREJSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMUVGMkM5MTdG
MEZEMzUwMEU0RkExNiAvKiBKU0lEQlJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0Mz
RjAxQzIxQzhFNUFDMjAwQUREOTYyIC8qIFVzZXJDb250ZW50UHJvdmlkZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTExRUYyQ0ExN0YwRkQzNTAwRTRGQTE2IC8qIEpTSURCVHJhbnNhY3Rpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTExRUYyQ0IxN0YwRkQzNTAwRTRGQTE2IC8qIEpTSURC
VmVyc2lvbkNoYW5nZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNkM0OUYzMEQ3REJB
MDUwMEZGQTU1OCAvKiBKU0ltYWdlQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRXh0ZW5zaW9uU3R5bGVTaGVldHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FeHRlbnNpb25TdHlsZVNoZWV0cy5jcHAJKHJldmlzaW9u
IDE5ODE0NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FeHRlbnNpb25TdHlsZVNoZWV0cy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsMjQgQEAgdm9pZCBFeHRlbnNpb25TdHlsZVNo
ZWV0czo6dXBkYXRlSW5qZWN0ZQogICAgIGlmICghb3duaW5nUGFnZSkKICAgICAgICAgcmV0dXJu
OwogCisgICAgb3duaW5nUGFnZS0+dXNlckNvbnRlbnRQcm92aWRlcigpLmZvckVhY2hVc2VyU3R5
bGVTaGVldChbJl0oY29uc3QgVXNlclN0eWxlU2hlZXQmIHVzZXJTdHlsZVNoZWV0KSB7CisgICAg
ICAgIGlmICh1c2VyU3R5bGVTaGVldC5pbmplY3RlZEZyYW1lcygpID09IEluamVjdEluVG9wRnJh
bWVPbmx5ICYmIG1fZG9jdW1lbnQub3duZXJFbGVtZW50KCkpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgaWYgKCFVc2VyQ29udGVudFVSTFBhdHRlcm46Om1hdGNoZXNQYXR0ZXJucyht
X2RvY3VtZW50LnVybCgpLCB1c2VyU3R5bGVTaGVldC53aGl0ZWxpc3QoKSwgdXNlclN0eWxlU2hl
ZXQuYmxhY2tsaXN0KCkpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFJlZlB0cjxD
U1NTdHlsZVNoZWV0PiBzaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZUlubGluZShjb25zdF9j
YXN0PERvY3VtZW50Jj4obV9kb2N1bWVudCksIHVzZXJTdHlsZVNoZWV0LnVybCgpKTsKKyAgICAg
ICAgYm9vbCBpc1VzZXJTdHlsZVNoZWV0ID0gdXNlclN0eWxlU2hlZXQubGV2ZWwoKSA9PSBVc2Vy
U3R5bGVVc2VyTGV2ZWw7CisgICAgICAgIGlmIChpc1VzZXJTdHlsZVNoZWV0KQorICAgICAgICAg
ICAgbV9pbmplY3RlZFVzZXJTdHlsZVNoZWV0cy5hcHBlbmQoc2hlZXQpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX2luamVjdGVkQXV0aG9yU3R5bGVTaGVldHMuYXBwZW5kKHNoZWV0KTsK
KworICAgICAgICBzaGVldC0+Y29udGVudHMoKS5zZXRJc1VzZXJTdHlsZVNoZWV0KGlzVXNlclN0
eWxlU2hlZXQpOworICAgICAgICBzaGVldC0+Y29udGVudHMoKS5wYXJzZVN0cmluZyh1c2VyU3R5
bGVTaGVldC5zb3VyY2UoKSk7CisgICAgfSk7CisgICAgCiAgICAgaWYgKCFvd25pbmdQYWdlLT5j
YXB0aW9uVXNlclByZWZlcmVuY2VzU3R5bGVTaGVldCgpLmlzRW1wdHkoKSkgewogICAgICAgICAv
LyBJZGVudGlmeSBvdXIgb3ZlcnJpZGUgc3R5bGUgc2hlZXQgd2l0aCBhIHVuaXF1ZSBVUkwgLSBh
IG5ldyBzY2hlbWUgYW5kIGEgVVVJRC4KICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFVS
TD4gY2FwdGlvbnNTdHlsZVNoZWV0VVJMKFBhcnNlZFVSTFN0cmluZywgInVzZXItY2FwdGlvbnMt
b3ZlcnJpZGU6MDFGNkFGMTItQzNCMC00RjcwLUFGNUUtQTNFMDAyMzREQzIzIik7CkBAIC0xMjcs
MzQgKzE0NSw2IEBAIHZvaWQgRXh0ZW5zaW9uU3R5bGVTaGVldHM6OnVwZGF0ZUluamVjdGUKICAg
ICAgICAgc2hlZXQtPmNvbnRlbnRzKCkuc2V0SXNVc2VyU3R5bGVTaGVldChmYWxzZSk7CiAgICAg
ICAgIHNoZWV0LT5jb250ZW50cygpLnBhcnNlU3RyaW5nKG93bmluZ1BhZ2UtPmNhcHRpb25Vc2Vy
UHJlZmVyZW5jZXNTdHlsZVNoZWV0KCkpOwogICAgIH0KLQotICAgIGNvbnN0IGF1dG8qIHVzZXJD
b250ZW50Q29udHJvbGxlciA9IG93bmluZ1BhZ2UtPnVzZXJDb250ZW50Q29udHJvbGxlcigpOwot
ICAgIGlmICghdXNlckNvbnRlbnRDb250cm9sbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBj
b25zdCBVc2VyU3R5bGVTaGVldE1hcCogdXNlclN0eWxlU2hlZXRzID0gdXNlckNvbnRlbnRDb250
cm9sbGVyLT51c2VyU3R5bGVTaGVldHMoKTsKLSAgICBpZiAoIXVzZXJTdHlsZVNoZWV0cykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChhdXRvJiBzdHlsZVNoZWV0cyA6IHVzZXJTdHlsZVNo
ZWV0cy0+dmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzaGVldCA6ICpzdHls
ZVNoZWV0cykgewotICAgICAgICAgICAgaWYgKHNoZWV0LT5pbmplY3RlZEZyYW1lcygpID09IElu
amVjdEluVG9wRnJhbWVPbmx5ICYmIG1fZG9jdW1lbnQub3duZXJFbGVtZW50KCkpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGlmICghVXNlckNvbnRlbnRVUkxQYXR0
ZXJuOjptYXRjaGVzUGF0dGVybnMobV9kb2N1bWVudC51cmwoKSwgc2hlZXQtPndoaXRlbGlzdCgp
LCBzaGVldC0+YmxhY2tsaXN0KCkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgICAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gZ3JvdXBTaGVldCA9IENTU1N0eWxlU2hlZXQ6
OmNyZWF0ZUlubGluZShjb25zdF9jYXN0PERvY3VtZW50Jj4obV9kb2N1bWVudCksIHNoZWV0LT51
cmwoKSk7Ci0gICAgICAgICAgICBib29sIGlzVXNlclN0eWxlU2hlZXQgPSBzaGVldC0+bGV2ZWwo
KSA9PSBVc2VyU3R5bGVVc2VyTGV2ZWw7Ci0gICAgICAgICAgICBpZiAoaXNVc2VyU3R5bGVTaGVl
dCkKLSAgICAgICAgICAgICAgICBtX2luamVjdGVkVXNlclN0eWxlU2hlZXRzLmFwcGVuZChncm91
cFNoZWV0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2luamVjdGVkQXV0
aG9yU3R5bGVTaGVldHMuYXBwZW5kKGdyb3VwU2hlZXQpOwotCi0gICAgICAgICAgICBncm91cFNo
ZWV0LT5jb250ZW50cygpLnNldElzVXNlclN0eWxlU2hlZXQoaXNVc2VyU3R5bGVTaGVldCk7Ci0g
ICAgICAgICAgICBncm91cFNoZWV0LT5jb250ZW50cygpLnBhcnNlU3RyaW5nKHNoZWV0LT5zb3Vy
Y2UoKSk7Ci0gICAgICAgIH0KLSAgICB9CiB9CiAKIHZvaWQgRXh0ZW5zaW9uU3R5bGVTaGVldHM6
OmludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNTgs
NyArMTI1OCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bG9hZFJlc291cmNlKGNvbnMKICAg
ICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCh1cmwpOwogICAgIERvY3VtZW50TG9hZGVyKiBkb2N1
bWVudExvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpOwogCi0gICAgaWYg
KHBhZ2UtPnVzZXJDb250ZW50Q29udHJvbGxlcigpICYmIGRvY3VtZW50TG9hZGVyICYmIHBhZ2Ut
PnVzZXJDb250ZW50Q29udHJvbGxlcigpLT5wcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9y
TG9hZChyZXF1ZXN0LCBSZXNvdXJjZVR5cGU6Ok1lZGlhLCAqZG9jdW1lbnRMb2FkZXIpID09IENv
bnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzOjpCbG9ja2VkKSB7CisgICAgaWYgKGRvY3Vt
ZW50TG9hZGVyICYmIHBhZ2UtPnVzZXJDb250ZW50UHJvdmlkZXIoKS5wcm9jZXNzQ29udGVudEV4
dGVuc2lvblJ1bGVzRm9yTG9hZChyZXF1ZXN0LCBSZXNvdXJjZVR5cGU6Ok1lZGlhLCAqZG9jdW1l
bnRMb2FkZXIpID09IENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzOjpCbG9ja2VkKSB7
CiAgICAgICAgIHJlcXVlc3QgPSB7IH07CiAgICAgICAgIG1lZGlhTG9hZGluZ0ZhaWxlZChNZWRp
YVBsYXllcjo6Rm9ybWF0RXJyb3IpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcAkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQx
LDcgQEAKICNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgogI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3Bh
Y2UuaCIKICNpbmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuaCIKKyNpbmNsdWRlICJV
c2VyQ29udGVudFByb3ZpZGVyLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAK
ICNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQpAQCAtOTUsNyArOTYsMTggQEAgY2xhc3MgRW1w
dHlTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIgZmluYQogICAgIH0KIH07CiAKLWNsYXNzIEVtcHR5
VmlzaXRlZExpbmtTdG9yZSA6IHB1YmxpYyBWaXNpdGVkTGlua1N0b3JlIHsKK2NsYXNzIEVtcHR5
VXNlckNvbnRlbnRQcm92aWRlciBmaW5hbCA6IHB1YmxpYyBVc2VyQ29udGVudFByb3ZpZGVyIHsK
KyAgICB2b2lkIGZvckVhY2hVc2VyU2NyaXB0KGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChET01X
cmFwcGVyV29ybGQmLCBjb25zdCBVc2VyU2NyaXB0Jik+JikgY29uc3Qgb3ZlcnJpZGUgeyB9Cisg
ICAgdm9pZCBmb3JFYWNoVXNlclN0eWxlU2hlZXQoY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkKGNv
bnN0IFVzZXJTdHlsZVNoZWV0Jik+JikgY29uc3Qgb3ZlcnJpZGUgeyB9CisjaWYgRU5BQkxFKFVT
RVJfTUVTU0FHRV9IQU5ETEVSUykKKyAgICBjb25zdCBVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlw
dG9yTWFwJiB1c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycygpIGNvbnN0IG92ZXJyaWRlIHsg
c3RhdGljIE5ldmVyRGVzdHJveWVkPFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JNYXA+IG1h
cDsgcmV0dXJuIG1hcC5nZXQoKTsgfQorI2VuZGlmCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5T
SU9OUykKKyAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kJiB1
c2VyQ29udGVudEV4dGVuc2lvbkJhY2tlbmQoKSBvdmVycmlkZSB7IHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kPiBiYWNrZW5k
OyByZXR1cm4gYmFja2VuZC5nZXQoKTsgfTsKKyNlbmRpZgorfTsKKworY2xhc3MgRW1wdHlWaXNp
dGVkTGlua1N0b3JlIGZpbmFsIDogcHVibGljIFZpc2l0ZWRMaW5rU3RvcmUgewogICAgIGJvb2wg
aXNMaW5rVmlzaXRlZChQYWdlJiwgTGlua0hhc2gsIGNvbnN0IFVSTCYsIGNvbnN0IEF0b21pY1N0
cmluZyYpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdm9pZCBhZGRWaXNpdGVkTGlu
ayhQYWdlJiwgTGlua0hhc2gpIG92ZXJyaWRlIHsgfQogfTsKQEAgLTEzMiw2ICsxNDQsNyBAQCB2
b2lkIGZpbGxXaXRoRW1wdHlDbGllbnRzKFBhZ2VDb25maWd1cmF0CiAKICAgICBwYWdlQ29uZmln
dXJhdGlvbi5kYXRhYmFzZVByb3ZpZGVyID0gYWRvcHRSZWYobmV3IEVtcHR5RGF0YWJhc2VQcm92
aWRlcik7CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24uc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyID0g
YWRvcHRSZWYobmV3IEVtcHR5U3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyKTsKKyAgICBwYWdlQ29u
ZmlndXJhdGlvbi51c2VyQ29udGVudFByb3ZpZGVyID0gYWRvcHRSZWYobmV3IEVtcHR5VXNlckNv
bnRlbnRQcm92aWRlcik7CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24udmlzaXRlZExpbmtTdG9yZSA9
IGFkb3B0UmVmKG5ldyBFbXB0eVZpc2l0ZWRMaW5rU3RvcmUpOwogCiAjaWYgVVNFKEFQUExFX0lO
VEVSTkFMX1NESykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHJldmlz
aW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgIkRpYWdub3N0aWNMb2dnaW5n
Q2xpZW50LmgiCiAjaW5jbHVkZSAiRHJhZ0NsaWVudC5oIgogI2luY2x1ZGUgIkVkaXRvckNsaWVu
dC5oIgotI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCiAjaW5jbHVkZSAiRm9jdXNEaXJlY3Rpb24uaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNs
aWVudC5oIgpAQCAtNDQsOSArNDMsMTggQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAi
UHJvZ3Jlc3NUcmFja2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgorI2lu
Y2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiVmlzaXRlZExpbmtTdG9yZS5o
IgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KIAorI2lmIEVOQUJMRShVU0VSX01F
U1NBR0VfSEFORExFUlMpCisjaW5jbHVkZSAiVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvci5o
IgorI2VuZGlmCisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorI2luY2x1ZGUgIkNv
bXBpbGVkQ29udGVudEV4dGVuc2lvbi5oIgorI2VuZGlmCisKIC8qCiAgVGhpcyBmaWxlIGhvbGRz
IGVtcHR5IENsaWVudCBzdHVicyBmb3IgdXNlIGJ5IFdlYkNvcmUuCiAgVmlld2xlc3MgZWxlbWVu
dCBuZWVkcyB0byBjcmVhdGUgYSBkdW1teSBQYWdlLT5GcmFtZS0+RnJhbWVWaWV3IHRyZWUgZm9y
IHVzZSBpbiBwYXJzaW5nIG9yIGV4ZWN1dGluZyBKYXZhU2NyaXB0LgpJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzMwLDEzICsy
NzMwLDExIEBAIHVuc2lnbmVkIGxvbmcgRnJhbWVMb2FkZXI6OmxvYWRSZXNvdXJjZVMKICNpZiBF
TkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAgIGlmIChlcnJvci5pc051bGwoKSkgewogICAg
ICAgICBpZiAoYXV0byogcGFnZSA9IG1fZnJhbWUucGFnZSgpKSB7Ci0gICAgICAgICAgICBpZiAo
YXV0byogY29udHJvbGxlciA9IHBhZ2UtPnVzZXJDb250ZW50Q29udHJvbGxlcigpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKG1fZG9jdW1lbnRMb2FkZXIgJiYgY29udHJvbGxlci0+cHJvY2Vzc0Nv
bnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQobmV3UmVxdWVzdCwgUmVzb3VyY2VUeXBlOjpSYXcs
ICptX2RvY3VtZW50TG9hZGVyKSA9PSBDb250ZW50RXh0ZW5zaW9uczo6QmxvY2tlZFN0YXR1czo6
QmxvY2tlZCkgewotICAgICAgICAgICAgICAgICAgICBuZXdSZXF1ZXN0ID0geyB9OwotICAgICAg
ICAgICAgICAgICAgICBlcnJvciA9IFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRl
cm5hbCwgMCwgaW5pdGlhbFJlcXVlc3QudXJsKCksIGVtcHR5U3RyaW5nKCkpOwotICAgICAgICAg
ICAgICAgICAgICByZXNwb25zZSA9IHsgfTsKLSAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG51
bGxwdHI7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fZG9jdW1lbnRMb2Fk
ZXIgJiYgcGFnZS0+dXNlckNvbnRlbnRQcm92aWRlcigpLnByb2Nlc3NDb250ZW50RXh0ZW5zaW9u
UnVsZXNGb3JMb2FkKG5ld1JlcXVlc3QsIFJlc291cmNlVHlwZTo6UmF3LCAqbV9kb2N1bWVudExv
YWRlcikgPT0gQ29udGVudEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXM6OkJsb2NrZWQpIHsKKyAg
ICAgICAgICAgICAgICBuZXdSZXF1ZXN0ID0geyB9OworICAgICAgICAgICAgICAgIGVycm9yID0g
UmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbldlYktpdEludGVybmFsLCAwLCBpbml0aWFsUmVxdWVz
dC51cmwoKSwgZW1wdHlTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSB7IH07
CisgICAgICAgICAgICAgICAgZGF0YSA9IG51bGxwdHI7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUGluZ0xvYWRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1BpbmdMb2FkZXIuY3BwCShyZXZpc2lv
biAxOTgxNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUGluZ0xvYWRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU5LDEwICs1OSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0YXRpYyBD
b250ZW50RXh0ZW5zaW9uczo6QmxvY2tlZFN0YXR1cyBwcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1
bGVzRm9yTG9hZChjb25zdCBGcmFtZSYgZnJhbWUsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
UmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSkKIHsKICAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGRv
Y3VtZW50TG9hZGVyID0gZnJhbWUubG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkgewotICAgICAg
ICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLnBhZ2UoKSkgewotICAgICAgICAgICAgaWYgKFVzZXJD
b250ZW50Q29udHJvbGxlciogY29udHJvbGxlciA9IHBhZ2UtPnVzZXJDb250ZW50Q29udHJvbGxl
cigpKQotICAgICAgICAgICAgICAgIHJldHVybiBjb250cm9sbGVyLT5wcm9jZXNzQ29udGVudEV4
dGVuc2lvblJ1bGVzRm9yTG9hZChyZXF1ZXN0LCByZXNvdXJjZVR5cGUsICpkb2N1bWVudExvYWRl
cik7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS5wYWdlKCkpCisg
ICAgICAgICAgICByZXR1cm4gcGFnZS0+dXNlckNvbnRlbnRQcm92aWRlcigpLnByb2Nlc3NDb250
ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKHJlcXVlc3QsIHJlc291cmNlVHlwZSwgKmRvY3VtZW50
TG9hZGVyKTsKICAgICB9CiAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3Rh
dHVzOjpOb3RCbG9ja2VkOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VM
b2FkZXIuY3BwCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVz
b3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDYsOCArMzQ2LDcgQEAgdm9pZCBS
ZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0SW50ZQogICAgIGlmIChmcmFtZUxvYWRlcigp
KSB7CiAgICAgICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZUxvYWRlcigpLT5mcmFtZSgpLnBhZ2UoKTsK
ICAgICAgICAgaWYgKHBhZ2UgJiYgbV9kb2N1bWVudExvYWRlcikgewotICAgICAgICAgICAgYXV0
byogdXNlckNvbnRlbnRDb250cm9sbGVyID0gcGFnZS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCk7
Ci0gICAgICAgICAgICBpZiAodXNlckNvbnRlbnRDb250cm9sbGVyICYmIHVzZXJDb250ZW50Q29u
dHJvbGxlci0+cHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQocmVxdWVzdCwgbV9y
ZXNvdXJjZVR5cGUsICptX2RvY3VtZW50TG9hZGVyKSA9PSBDb250ZW50RXh0ZW5zaW9uczo6Qmxv
Y2tlZFN0YXR1czo6QmxvY2tlZCkKKyAgICAgICAgICAgIGlmIChwYWdlLT51c2VyQ29udGVudFBy
b3ZpZGVyKCkucHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQocmVxdWVzdCwgbV9y
ZXNvdXJjZVR5cGUsICptX2RvY3VtZW50TG9hZGVyKSA9PSBDb250ZW50RXh0ZW5zaW9uczo6Qmxv
Y2tlZFN0YXR1czo6QmxvY2tlZCkKICAgICAgICAgICAgICAgICByZXF1ZXN0ID0geyB9OwogICAg
ICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJl
c291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NDIsOCArNTQyLDggQEAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3Vy
Y2U+IENhYwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogI2lmIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCi0gICAgaWYgKGZyYW1lKCkgJiYgZnJhbWUoKS0+bWFpbkZyYW1lKCkucGFnZSgp
ICYmIGZyYW1lKCktPm1haW5GcmFtZSgpLnBhZ2UoKS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkg
JiYgbV9kb2N1bWVudExvYWRlcikgewotICAgICAgICBpZiAoZnJhbWUoKS0+bWFpbkZyYW1lKCku
cGFnZSgpLT51c2VyQ29udGVudENvbnRyb2xsZXIoKS0+cHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25S
dWxlc0ZvckxvYWQocmVxdWVzdC5tdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCksIHRvUmVzb3VyY2VU
eXBlKHR5cGUpLCAqbV9kb2N1bWVudExvYWRlcikgPT0gQ29udGVudEV4dGVuc2lvbnM6OkJsb2Nr
ZWRTdGF0dXM6OkJsb2NrZWQpIHsKKyAgICBpZiAoZnJhbWUoKSAmJiBmcmFtZSgpLT5tYWluRnJh
bWUoKS5wYWdlKCkgJiYgbV9kb2N1bWVudExvYWRlcikgeworICAgICAgICBpZiAoZnJhbWUoKS0+
bWFpbkZyYW1lKCkucGFnZSgpLT51c2VyQ29udGVudFByb3ZpZGVyKCkucHJvY2Vzc0NvbnRlbnRF
eHRlbnNpb25SdWxlc0ZvckxvYWQocmVxdWVzdC5tdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCksIHRv
UmVzb3VyY2VUeXBlKHR5cGUpLCAqbV9kb2N1bWVudExvYWRlcikgPT0gQ29udGVudEV4dGVuc2lv
bnM6OkJsb2NrZWRTdGF0dXM6OkJsb2NrZWQpIHsKICAgICAgICAgICAgIGlmICh0eXBlID09IENh
Y2hlZFJlc291cmNlOjpUeXBlOjpNYWluUmVzb3VyY2UpIHsKICAgICAgICAgICAgICAgICBhdXRv
IHJlc291cmNlID0gY3JlYXRlUmVzb3VyY2UodHlwZSwgcmVxdWVzdC5tdXRhYmxlUmVzb3VyY2VS
ZXF1ZXN0KCksIHJlcXVlc3QuY2hhcnNldCgpLCBzZXNzaW9uSUQoKSk7CiAgICAgICAgICAgICAg
ICAgQVNTRVJUKHJlc291cmNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHJl
dmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzYxLDE1ICs3NjEsNyBAQCBib29sIERPTVdpbmRvdzo6c2hvdWxkSGF2
ZVdlYktpdE5hbWVzcGFjCiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBhdXRvKiB1c2VyQ29udGVudENvbnRyb2xsZXIgPSBwYWdlLT51c2VyQ29udGVudENvbnRy
b2xsZXIoKTsKLSAgICBpZiAoIXVzZXJDb250ZW50Q29udHJvbGxlcikKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgYXV0byogZGVzY3JpcHRvck1hcCA9IHVzZXJDb250ZW50Q29udHJvbGxl
ci0+dXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMoKTsKLSAgICBpZiAoIWRlc2NyaXB0b3JN
YXApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZvciAoYXV0byYgZGVzY3JpcHRvciA6
IGRlc2NyaXB0b3JNYXAtPnZhbHVlcygpKSB7CisgICAgZm9yIChhdXRvJiBkZXNjcmlwdG9yIDog
cGFnZS0+dXNlckNvbnRlbnRQcm92aWRlcigpLnVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3Jz
KCkudmFsdWVzKCkpIHsKICAgICAgICAgaWYgKCZkZXNjcmlwdG9yLT53b3JsZCgpID09ICZ3b3Js
ZCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTIxNjgsMTEgKzIxNjAsMTAg
QEAgUGFzc1JlZlB0cjxET01XaW5kb3c+IERPTVdpbmRvdzo6b3BlbihjbwogI2lmIEVOQUJMRShD
T05URU5UX0VYVEVOU0lPTlMpCiAgICAgaWYgKGZpcnN0RnJhbWUtPmRvY3VtZW50KCkKICAgICAg
ICAgJiYgZmlyc3RGcmFtZS0+bWFpbkZyYW1lKCkucGFnZSgpCi0gICAgICAgICYmIGZpcnN0RnJh
bWUtPm1haW5GcmFtZSgpLnBhZ2UoKS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkKICAgICAgICAg
JiYgZmlyc3RGcmFtZS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKQogICAgICAgICAmJiBmaXJzdEZy
YW1lLT5tYWluRnJhbWUoKS5kb2N1bWVudCgpLT5sb2FkZXIoKSkgewotICAgICAgICBSZXNvdXJj
ZUxvYWRJbmZvIHJlc291cmNlTG9hZEluZm8gPSB7Zmlyc3RGcmFtZS0+ZG9jdW1lbnQoKS0+Y29t
cGxldGVVUkwodXJsU3RyaW5nKSwgZmlyc3RGcmFtZS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKS0+
dXJsKCksIFJlc291cmNlVHlwZTo6UG9wdXB9OwotICAgICAgICBWZWN0b3I8Q29udGVudEV4dGVu
c2lvbnM6OkFjdGlvbj4gYWN0aW9ucyA9IGZpcnN0RnJhbWUtPm1haW5GcmFtZSgpLnBhZ2UoKS0+
dXNlckNvbnRlbnRDb250cm9sbGVyKCktPmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQocmVzb3VyY2VM
b2FkSW5mbywgKmZpcnN0RnJhbWUtPm1haW5GcmFtZSgpLmRvY3VtZW50KCktPmxvYWRlcigpKTsK
KyAgICAgICAgUmVzb3VyY2VMb2FkSW5mbyByZXNvdXJjZUxvYWRJbmZvID0geyBmaXJzdEZyYW1l
LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1cmxTdHJpbmcpLCBmaXJzdEZyYW1lLT5tYWluRnJh
bWUoKS5kb2N1bWVudCgpLT51cmwoKSwgUmVzb3VyY2VUeXBlOjpQb3B1cCB9OworICAgICAgICBW
ZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbj4gYWN0aW9ucyA9IGZpcnN0RnJhbWUtPm1h
aW5GcmFtZSgpLnBhZ2UoKS0+dXNlckNvbnRlbnRQcm92aWRlcigpLmFjdGlvbnNGb3JSZXNvdXJj
ZUxvYWQocmVzb3VyY2VMb2FkSW5mbywgKmZpcnN0RnJhbWUtPm1haW5GcmFtZSgpLmRvY3VtZW50
KCktPmxvYWRlcigpKTsKICAgICAgICAgZm9yIChjb25zdCBDb250ZW50RXh0ZW5zaW9uczo6QWN0
aW9uJiBhY3Rpb24gOiBhY3Rpb25zKSB7CiAgICAgICAgICAgICBpZiAoYWN0aW9uLnR5cGUoKSA9
PSBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkKQogICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDE5
ODE0NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02ODksMzUgKzY4OSwxNyBAQCB2b2lkIEZyYW1lOjppbmplY3RVc2VyU2NyaXB0cyhVc2VyU2Ny
aXB0CiAgICAgaWYgKGxvYWRlcigpLnN0YXRlTWFjaGluZSgpLmNyZWF0aW5nSW5pdGlhbEVtcHR5
RG9jdW1lbnQoKSAmJiAhc2V0dGluZ3MoKS5zaG91bGRJbmplY3RVc2VyU2NyaXB0c0luSW5pdGlh
bEVtcHR5RG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgYXV0byogdXNl
ckNvbnRlbnRDb250cm9sbGVyID0gbV9wYWdlLT51c2VyQ29udGVudENvbnRyb2xsZXIoKTsKLSAg
ICBpZiAoIXVzZXJDb250ZW50Q29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
V2FsayB0aGUgaGFzaHRhYmxlLiBJbmplY3QgYnkgd29ybGQuCi0gICAgY29uc3QgVXNlclNjcmlw
dE1hcCogdXNlclNjcmlwdHMgPSB1c2VyQ29udGVudENvbnRyb2xsZXItPnVzZXJTY3JpcHRzKCk7
Ci0gICAgaWYgKCF1c2VyU2NyaXB0cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChjb25z
dCBhdXRvJiB3b3JsZEFuZFVzZXJTY3JpcHQgOiAqdXNlclNjcmlwdHMpCi0gICAgICAgIGluamVj
dFVzZXJTY3JpcHRzRm9yV29ybGQoKndvcmxkQW5kVXNlclNjcmlwdC5rZXksICp3b3JsZEFuZFVz
ZXJTY3JpcHQudmFsdWUsIGluamVjdGlvblRpbWUpOwotfQotCi12b2lkIEZyYW1lOjppbmplY3RV
c2VyU2NyaXB0c0ZvcldvcmxkKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIGNvbnN0IFVzZXJTY3Jp
cHRWZWN0b3ImIHVzZXJTY3JpcHRzLCBVc2VyU2NyaXB0SW5qZWN0aW9uVGltZSBpbmplY3Rpb25U
aW1lKQotewotICAgIGlmICh1c2VyU2NyaXB0cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIERvY3VtZW50KiBkb2MgPSBkb2N1bWVudCgpOwotICAgIGlmICghZG9jKQorICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChhdXRvJiBzY3JpcHQgOiB1c2VyU2NyaXB0cykg
ewotICAgICAgICBpZiAoc2NyaXB0LT5pbmplY3RlZEZyYW1lcygpID09IEluamVjdEluVG9wRnJh
bWVPbmx5ICYmIG93bmVyRWxlbWVudCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgaWYgKHNjcmlwdC0+aW5qZWN0aW9uVGltZSgpID09IGluamVjdGlvblRpbWUgJiYgVXNlckNv
bnRlbnRVUkxQYXR0ZXJuOjptYXRjaGVzUGF0dGVybnMoZG9jLT51cmwoKSwgc2NyaXB0LT53aGl0
ZWxpc3QoKSwgc2NyaXB0LT5ibGFja2xpc3QoKSkpCi0gICAgICAgICAgICBtX3NjcmlwdC0+ZXZh
bHVhdGVJbldvcmxkKFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0LT5zb3VyY2UoKSwgc2NyaXB0LT51
cmwoKSksIHdvcmxkKTsKLSAgICB9CisgICAgbV9wYWdlLT51c2VyQ29udGVudFByb3ZpZGVyKCku
Zm9yRWFjaFVzZXJTY3JpcHQoWyZdKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIGNvbnN0IFVzZXJT
Y3JpcHQmIHNjcmlwdCkgeworICAgICAgICBpZiAoc2NyaXB0LmluamVjdGVkRnJhbWVzKCkgPT0g
SW5qZWN0SW5Ub3BGcmFtZU9ubHkgJiYgb3duZXJFbGVtZW50KCkpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgaWYgKHNjcmlwdC5pbmplY3Rpb25UaW1lKCkgPT0gaW5qZWN0aW9uVGlt
ZSAmJiBVc2VyQ29udGVudFVSTFBhdHRlcm46Om1hdGNoZXNQYXR0ZXJucyhkb2N1bWVudC0+dXJs
KCksIHNjcmlwdC53aGl0ZWxpc3QoKSwgc2NyaXB0LmJsYWNrbGlzdCgpKSkKKyAgICAgICAgICAg
IG1fc2NyaXB0LT5ldmFsdWF0ZUluV29ybGQoU2NyaXB0U291cmNlQ29kZShzY3JpcHQuc291cmNl
KCksIHNjcmlwdC51cmwoKSksIHdvcmxkKTsKKyAgICB9KTsKIH0KIAogUmVuZGVyVmlldyogRnJh
bWU6OmNvbnRlbnRSZW5kZXJlcigpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCShyZXZpc2lv
biAxOTgxNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4MCw4ICsyODAsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEZyYW1lKFBh
Z2UmLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqLCBGcmFtZUxvYWRlckNsaWVudCYpOwogCiAgICAg
cHJpdmF0ZToKLSAgICAgICAgdm9pZCBpbmplY3RVc2VyU2NyaXB0c0ZvcldvcmxkKERPTVdyYXBw
ZXJXb3JsZCYsIGNvbnN0IFVzZXJTY3JpcHRWZWN0b3ImLCBVc2VyU2NyaXB0SW5qZWN0aW9uVGlt
ZSk7Ci0KICAgICAgICAgSGFzaFNldDxGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIqPiBtX2Rlc3Ry
dWN0aW9uT2JzZXJ2ZXJzOwogCiAgICAgICAgIE1haW5GcmFtZSYgbV9tYWluRnJhbWU7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZS5jcHAJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAKICNpbmNsdWRlICJT
dHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3ViZnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJU
ZXh0UmVzb3VyY2VEZWNvZGVyLmgiCi0jaW5jbHVkZSAiVXNlckNvbnRlbnRDb250cm9sbGVyLmgi
CisjaW5jbHVkZSAiVXNlckNvbnRlbnRQcm92aWRlci5oIgogI2luY2x1ZGUgIlVzZXJJbnB1dEJy
aWRnZS5oIgogI2luY2x1ZGUgIlZpZXdTdGF0ZUNoYW5nZU9ic2VydmVyLmgiCiAjaW5jbHVkZSAi
VmlzaXRlZExpbmtTdGF0ZS5oIgpAQCAtMjMxLDcgKzIzMSw3IEBAIFBhZ2U6OlBhZ2UoUGFnZUNv
bmZpZ3VyYXRpb24mIHBhZ2VDb25maWcKICAgICAsIG1fYXBwbGljYXRpb25DYWNoZVN0b3JhZ2Uo
cGFnZUNvbmZpZ3VyYXRpb24uYXBwbGljYXRpb25DYWNoZVN0b3JhZ2UgPyAqV1RGTW92ZShwYWdl
Q29uZmlndXJhdGlvbi5hcHBsaWNhdGlvbkNhY2hlU3RvcmFnZSkgOiBBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6c2luZ2xldG9uKCkpCiAgICAgLCBtX2RhdGFiYXNlUHJvdmlkZXIoKldURk1vdmUo
cGFnZUNvbmZpZ3VyYXRpb24uZGF0YWJhc2VQcm92aWRlcikpCiAgICAgLCBtX3N0b3JhZ2VOYW1l
c3BhY2VQcm92aWRlcigqV1RGTW92ZShwYWdlQ29uZmlndXJhdGlvbi5zdG9yYWdlTmFtZXNwYWNl
UHJvdmlkZXIpKQotICAgICwgbV91c2VyQ29udGVudENvbnRyb2xsZXIoV1RGTW92ZShwYWdlQ29u
ZmlndXJhdGlvbi51c2VyQ29udGVudENvbnRyb2xsZXIpKQorICAgICwgbV91c2VyQ29udGVudFBy
b3ZpZGVyKCpXVEZNb3ZlKHBhZ2VDb25maWd1cmF0aW9uLnVzZXJDb250ZW50UHJvdmlkZXIpKQog
ICAgICwgbV92aXNpdGVkTGlua1N0b3JlKCpXVEZNb3ZlKHBhZ2VDb25maWd1cmF0aW9uLnZpc2l0
ZWRMaW5rU3RvcmUpKQogICAgICwgbV9zZXNzaW9uSUQoU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lv
bklEKCkpCiAgICAgLCBtX2lzQ2xvc2luZyhmYWxzZSkKQEAgLTI0MCw5ICsyNDAsNyBAQCBQYWdl
OjpQYWdlKFBhZ2VDb25maWd1cmF0aW9uJiBwYWdlQ29uZmlnCiAKICAgICBtX3N0b3JhZ2VOYW1l
c3BhY2VQcm92aWRlci0+YWRkUGFnZSgqdGhpcyk7CiAKLSAgICBpZiAobV91c2VyQ29udGVudENv
bnRyb2xsZXIpCi0gICAgICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5hZGRQYWdlKCp0aGlz
KTsKLQorICAgIG1fdXNlckNvbnRlbnRQcm92aWRlci0+YWRkUGFnZSgqdGhpcyk7CiAgICAgbV92
aXNpdGVkTGlua1N0b3JlLT5hZGRQYWdlKCp0aGlzKTsKIAogICAgIGlmICghYWxsUGFnZXMpIHsK
QEAgLTI5OCw5ICsyOTYsNyBAQCBQYWdlOjp+UGFnZSgpCiAjZW5kaWYKIAogICAgIG1fc3RvcmFn
ZU5hbWVzcGFjZVByb3ZpZGVyLT5yZW1vdmVQYWdlKCp0aGlzKTsKLQotICAgIGlmIChtX3VzZXJD
b250ZW50Q29udHJvbGxlcikKLSAgICAgICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPnJlbW92
ZVBhZ2UoKnRoaXMpOworICAgIG1fdXNlckNvbnRlbnRQcm92aWRlci0+cmVtb3ZlUGFnZSgqdGhp
cyk7CiAgICAgbV92aXNpdGVkTGlua1N0b3JlLT5yZW1vdmVQYWdlKCp0aGlzKTsKIH0KIApAQCAt
MTgxOSwxNSArMTgxNSwxNiBAQCBib29sIFBhZ2U6OmFyZVByb21wdHNBbGxvd2VkKCkKICAgICBy
ZXR1cm4gIW1fZm9yYmlkUHJvbXB0c0RlcHRoOwogfQogCi12b2lkIFBhZ2U6OnNldFVzZXJDb250
ZW50Q29udHJvbGxlcihVc2VyQ29udGVudENvbnRyb2xsZXIqIHVzZXJDb250ZW50Q29udHJvbGxl
cikKK1VzZXJDb250ZW50UHJvdmlkZXImIFBhZ2U6OnVzZXJDb250ZW50UHJvdmlkZXIoKQogewot
ICAgIGlmIChtX3VzZXJDb250ZW50Q29udHJvbGxlcikKLSAgICAgICAgbV91c2VyQ29udGVudENv
bnRyb2xsZXItPnJlbW92ZVBhZ2UoKnRoaXMpOwotCi0gICAgbV91c2VyQ29udGVudENvbnRyb2xs
ZXIgPSB1c2VyQ29udGVudENvbnRyb2xsZXI7CisgICAgcmV0dXJuIG1fdXNlckNvbnRlbnRQcm92
aWRlcjsKK30KIAotICAgIGlmIChtX3VzZXJDb250ZW50Q29udHJvbGxlcikKLSAgICAgICAgbV91
c2VyQ29udGVudENvbnRyb2xsZXItPmFkZFBhZ2UoKnRoaXMpOwordm9pZCBQYWdlOjpzZXRVc2Vy
Q29udGVudFByb3ZpZGVyKFJlZjxVc2VyQ29udGVudFByb3ZpZGVyPiYmIHVzZXJDb250ZW50UHJv
dmlkZXIpCit7CisgICAgbV91c2VyQ29udGVudFByb3ZpZGVyLT5yZW1vdmVQYWdlKCp0aGlzKTsK
KyAgICBtX3VzZXJDb250ZW50UHJvdmlkZXIgPSBXVEZNb3ZlKHVzZXJDb250ZW50UHJvdmlkZXIp
OworICAgIG1fdXNlckNvbnRlbnRQcm92aWRlci0+YWRkUGFnZSgqdGhpcyk7CiAKICAgICBpbnZh
bGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lcygpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmgJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIxLDcgQEAgY2xhc3MgU2Nyb2xsaW5nQ29vcmRp
bmF0b3I7CiBjbGFzcyBTZXR0aW5nczsKIGNsYXNzIFN0b3JhZ2VOYW1lc3BhY2U7CiBjbGFzcyBT
dG9yYWdlTmFtZXNwYWNlUHJvdmlkZXI7Ci1jbGFzcyBVc2VyQ29udGVudENvbnRyb2xsZXI7Citj
bGFzcyBVc2VyQ29udGVudFByb3ZpZGVyOwogY2xhc3MgVmFsaWRhdGlvbk1lc3NhZ2VDbGllbnQ7
CiBjbGFzcyBWaWV3U3RhdGVDaGFuZ2VPYnNlcnZlcjsKIGNsYXNzIFZpc2l0ZWRMaW5rU3RvcmU7
CkBAIC00NTAsOCArNDUwLDggQEAgcHVibGljOgogICAgIFN0b3JhZ2VOYW1lc3BhY2VQcm92aWRl
ciYgc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyKCkgeyByZXR1cm4gbV9zdG9yYWdlTmFtZXNwYWNl
UHJvdmlkZXIuZ2V0KCk7IH0KICAgICB2b2lkIHNldFN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcihS
ZWY8U3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyPiYmKTsKIAotICAgIFVzZXJDb250ZW50Q29udHJv
bGxlciogdXNlckNvbnRlbnRDb250cm9sbGVyKCkgeyByZXR1cm4gbV91c2VyQ29udGVudENvbnRy
b2xsZXIuZ2V0KCk7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFVzZXJDb250ZW50Q29u
dHJvbGxlcihVc2VyQ29udGVudENvbnRyb2xsZXIqKTsKKyAgICBVc2VyQ29udGVudFByb3ZpZGVy
JiB1c2VyQ29udGVudFByb3ZpZGVyKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRVc2Vy
Q29udGVudFByb3ZpZGVyKFJlZjxVc2VyQ29udGVudFByb3ZpZGVyPiYmKTsKIAogICAgIFZpc2l0
ZWRMaW5rU3RvcmUmIHZpc2l0ZWRMaW5rU3RvcmUoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldFZpc2l0ZWRMaW5rU3RvcmUoUmVmPFZpc2l0ZWRMaW5rU3RvcmU+JiYpOwpAQCAtNjc2LDcg
KzY3Niw3IEBAIHByaXZhdGU6CiAgICAgUmVmPEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlPiBtX2Fw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOwogICAgIFJlZjxEYXRhYmFzZVByb3ZpZGVyPiBtX2RhdGFi
YXNlUHJvdmlkZXI7CiAgICAgUmVmPFN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcj4gbV9zdG9yYWdl
TmFtZXNwYWNlUHJvdmlkZXI7Ci0gICAgUmVmUHRyPFVzZXJDb250ZW50Q29udHJvbGxlcj4gbV91
c2VyQ29udGVudENvbnRyb2xsZXI7CisgICAgUmVmPFVzZXJDb250ZW50UHJvdmlkZXI+IG1fdXNl
ckNvbnRlbnRQcm92aWRlcjsKICAgICBSZWY8VmlzaXRlZExpbmtTdG9yZT4gbV92aXNpdGVkTGlu
a1N0b3JlOwogICAgIFJlZlB0cjxXaGVlbEV2ZW50VGVzdFRyaWdnZXI+IG1fdGVzdFRyaWdnZXI7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbmZpZ3VyYXRpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25maWd1cmF0aW9uLmgJKHJldmlzaW9u
IDE5ODE0NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbmZpZ3VyYXRpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBjbGFzcyBJbnNwZWN0b3JDbGllbnQ7CiBjbGFz
cyBQbHVnSW5DbGllbnQ7CiBjbGFzcyBQcm9ncmVzc1RyYWNrZXJDbGllbnQ7CiBjbGFzcyBTdG9y
YWdlTmFtZXNwYWNlUHJvdmlkZXI7Ci1jbGFzcyBVc2VyQ29udGVudENvbnRyb2xsZXI7CitjbGFz
cyBVc2VyQ29udGVudFByb3ZpZGVyOwogY2xhc3MgVmFsaWRhdGlvbk1lc3NhZ2VDbGllbnQ7CiBj
bGFzcyBWaXNpdGVkTGlua1N0b3JlOwogCkBAIC04NCw3ICs4NCw3IEBAIHB1YmxpYzoKICAgICBS
ZWZQdHI8QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U+IGFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOwog
ICAgIFJlZlB0cjxEYXRhYmFzZVByb3ZpZGVyPiBkYXRhYmFzZVByb3ZpZGVyOwogICAgIFJlZlB0
cjxTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXI+IHN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcjsKLSAg
ICBSZWZQdHI8VXNlckNvbnRlbnRDb250cm9sbGVyPiB1c2VyQ29udGVudENvbnRyb2xsZXI7Cisg
ICAgUmVmUHRyPFVzZXJDb250ZW50UHJvdmlkZXI+IHVzZXJDb250ZW50UHJvdmlkZXI7CiAgICAg
UmVmUHRyPFZpc2l0ZWRMaW5rU3RvcmU+IHZpc2l0ZWRMaW5rU3RvcmU7CiB9OwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCShyZXZpc2lv
biAxOTgxNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDI0ICsyNywxNSBAQAogI2luY2x1ZGUgIlVzZXJDb250
ZW50Q29udHJvbGxlci5oIgogCiAjaW5jbHVkZSAiRE9NV3JhcHBlcldvcmxkLmgiCi0jaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkV4
dGVuc2lvblN0eWxlU2hlZXRzLmgiCi0jaW5jbHVkZSAiTWFpbkZyYW1lLmgiCi0jaW5jbHVkZSAi
UGFnZS5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZEluZm8uaCIKICNpbmNsdWRlICJVc2VyU2Ny
aXB0LmgiCiAjaW5jbHVkZSAiVXNlclN0eWxlU2hlZXQuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pT
Q2VsbElubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaD4KIAog
I2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCiAjaW5jbHVkZSAiVXNlck1lc3NhZ2VI
YW5kbGVyRGVzY3JpcHRvci5oIgogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJ
T05TKQotI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25Db21waWxlci5oIgotI2luY2x1ZGUgIkNv
bnRlbnRFeHRlbnNpb25zQmFja2VuZC5oIgorI2luY2x1ZGUgIkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbi5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTYyLDM2ICs1MywzMyBA
QCBVc2VyQ29udGVudENvbnRyb2xsZXI6On5Vc2VyQ29udGVudENvbnRyCiB7CiB9CiAKLXZvaWQg
VXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRQYWdlKFBhZ2UmIHBhZ2UpCit2b2lkIFVzZXJDb250
ZW50Q29udHJvbGxlcjo6Zm9yRWFjaFVzZXJTY3JpcHQoY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lk
KERPTVdyYXBwZXJXb3JsZCYsIGNvbnN0IFVzZXJTY3JpcHQmKT4mIGZ1bmN0b3IpIGNvbnN0CiB7
Ci0gICAgQVNTRVJUKCFtX3BhZ2VzLmNvbnRhaW5zKCZwYWdlKSk7Ci0gICAgbV9wYWdlcy5hZGQo
JnBhZ2UpOworICAgIGZvciAoY29uc3QgYXV0byYgd29ybGRBbmRVc2VyU2NyaXB0VmVjdG9yIDog
bV91c2VyU2NyaXB0cykgeworICAgICAgICBhdXRvJiB3b3JsZCA9ICp3b3JsZEFuZFVzZXJTY3Jp
cHRWZWN0b3Iua2V5LmdldCgpOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHVzZXJTY3JpcHQg
OiAqd29ybGRBbmRVc2VyU2NyaXB0VmVjdG9yLnZhbHVlKQorICAgICAgICAgICAgZnVuY3Rvcih3
b3JsZCwgKnVzZXJTY3JpcHQpOworICAgIH0KIH0KIAotdm9pZCBVc2VyQ29udGVudENvbnRyb2xs
ZXI6OnJlbW92ZVBhZ2UoUGFnZSYgcGFnZSkKK3ZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjpm
b3JFYWNoVXNlclN0eWxlU2hlZXQoY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFVzZXJT
dHlsZVNoZWV0Jik+JiBmdW5jdG9yKSBjb25zdAogewotICAgIEFTU0VSVChtX3BhZ2VzLmNvbnRh
aW5zKCZwYWdlKSk7Ci0gICAgbV9wYWdlcy5yZW1vdmUoJnBhZ2UpOworICAgIGZvciAoYXV0byYg
c3R5bGVTaGVldFZlY3RvciA6IG1fdXNlclN0eWxlU2hlZXRzLnZhbHVlcygpKSB7CisgICAgICAg
IGZvciAoY29uc3QgYXV0byYgc3R5bGVTaGVldCA6ICpzdHlsZVNoZWV0VmVjdG9yKQorICAgICAg
ICAgICAgZnVuY3Rvcigqc3R5bGVTaGVldCk7CisgICAgfQogfQogCiB2b2lkIFVzZXJDb250ZW50
Q29udHJvbGxlcjo6YWRkVXNlclNjcmlwdChET01XcmFwcGVyV29ybGQmIHdvcmxkLCBzdGQ6OnVu
aXF1ZV9wdHI8VXNlclNjcmlwdD4gdXNlclNjcmlwdCkKIHsKLSAgICBpZiAoIW1fdXNlclNjcmlw
dHMpCi0gICAgICAgIG1fdXNlclNjcmlwdHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFVzZXJTY3JpcHRN
YXA+KCk7Ci0KLSAgICBhdXRvJiBzY3JpcHRzSW5Xb3JsZCA9IG1fdXNlclNjcmlwdHMtPmFkZCgm
d29ybGQsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKLSAgICBpZiAoIXNjcmlwdHNJbldvcmxk
KQotICAgICAgICBzY3JpcHRzSW5Xb3JsZCA9IHN0ZDo6bWFrZV91bmlxdWU8VXNlclNjcmlwdFZl
Y3Rvcj4oKTsKKyAgICBhdXRvJiBzY3JpcHRzSW5Xb3JsZCA9IG1fdXNlclNjcmlwdHMuZW5zdXJl
KCZ3b3JsZCwgWyZdIHsgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VXNlclNjcmlwdFZlY3Rvcj4o
KTsgfSkuaXRlcmF0b3ItPnZhbHVlOwogICAgIHNjcmlwdHNJbldvcmxkLT5hcHBlbmQoV1RGTW92
ZSh1c2VyU2NyaXB0KSk7CiB9CiAKIHZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVV
c2VyU2NyaXB0KERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIGNvbnN0IFVSTCYgdXJsKQogewotICAg
IGlmICghbV91c2VyU2NyaXB0cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBpdCA9IG1f
dXNlclNjcmlwdHMtPmZpbmQoJndvcmxkKTsKLSAgICBpZiAoaXQgPT0gbV91c2VyU2NyaXB0cy0+
ZW5kKCkpCisgICAgYXV0byBpdCA9IG1fdXNlclNjcmlwdHMuZmluZCgmd29ybGQpOworICAgIGlm
IChpdCA9PSBtX3VzZXJTY3JpcHRzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRv
IHNjcmlwdHMgPSBpdC0+dmFsdWUuZ2V0KCk7CkBAIC0xMDEsMjUgKzg5LDE3IEBAIHZvaWQgVXNl
ckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU2MKICAgICB9CiAKICAgICBpZiAoc2NyaXB0
cy0+aXNFbXB0eSgpKQotICAgICAgICBtX3VzZXJTY3JpcHRzLT5yZW1vdmUoaXQpOworICAgICAg
ICBtX3VzZXJTY3JpcHRzLnJlbW92ZShpdCk7CiB9CiAKIHZvaWQgVXNlckNvbnRlbnRDb250cm9s
bGVyOjpyZW1vdmVVc2VyU2NyaXB0cyhET01XcmFwcGVyV29ybGQmIHdvcmxkKQogewotICAgIGlm
ICghbV91c2VyU2NyaXB0cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV91c2VyU2NyaXB0cy0+
cmVtb3ZlKCZ3b3JsZCk7CisgICAgbV91c2VyU2NyaXB0cy5yZW1vdmUoJndvcmxkKTsKIH0KIAog
dm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNoZWV0KERPTVdyYXBwZXJX
b3JsZCYgd29ybGQsIHN0ZDo6dW5pcXVlX3B0cjxVc2VyU3R5bGVTaGVldD4gdXNlclN0eWxlU2hl
ZXQsIFVzZXJTdHlsZUluamVjdGlvblRpbWUgaW5qZWN0aW9uVGltZSkKIHsKLSAgICBpZiAoIW1f
dXNlclN0eWxlU2hlZXRzKQotICAgICAgICBtX3VzZXJTdHlsZVNoZWV0cyA9IHN0ZDo6bWFrZV91
bmlxdWU8VXNlclN0eWxlU2hlZXRNYXA+KCk7Ci0KLSAgICBhdXRvJiBzdHlsZVNoZWV0c0luV29y
bGQgPSBtX3VzZXJTdHlsZVNoZWV0cy0+YWRkKCZ3b3JsZCwgbnVsbHB0cikuaXRlcmF0b3ItPnZh
bHVlOwotICAgIGlmICghc3R5bGVTaGVldHNJbldvcmxkKQotICAgICAgICBzdHlsZVNoZWV0c0lu
V29ybGQgPSBzdGQ6Om1ha2VfdW5pcXVlPFVzZXJTdHlsZVNoZWV0VmVjdG9yPigpOworICAgIGF1
dG8mIHN0eWxlU2hlZXRzSW5Xb3JsZCA9IG1fdXNlclN0eWxlU2hlZXRzLmVuc3VyZSgmd29ybGQs
IFsmXSB7IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFVzZXJTdHlsZVNoZWV0VmVjdG9yPigpOyB9
KS5pdGVyYXRvci0+dmFsdWU7CiAgICAgc3R5bGVTaGVldHNJbldvcmxkLT5hcHBlbmQoV1RGTW92
ZSh1c2VyU3R5bGVTaGVldCkpOwogCiAgICAgaWYgKGluamVjdGlvblRpbWUgPT0gSW5qZWN0SW5F
eGlzdGluZ0RvY3VtZW50cykKQEAgLTEyOCwxMSArMTA4LDggQEAgdm9pZCBVc2VyQ29udGVudENv
bnRyb2xsZXI6OmFkZFVzZXJTdHlsZQogCiB2b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVt
b3ZlVXNlclN0eWxlU2hlZXQoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgY29uc3QgVVJMJiB1cmwp
CiB7Ci0gICAgaWYgKCFtX3VzZXJTdHlsZVNoZWV0cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
YXV0byBpdCA9IG1fdXNlclN0eWxlU2hlZXRzLT5maW5kKCZ3b3JsZCk7Ci0gICAgaWYgKGl0ID09
IG1fdXNlclN0eWxlU2hlZXRzLT5lbmQoKSkKKyAgICBhdXRvIGl0ID0gbV91c2VyU3R5bGVTaGVl
dHMuZmluZCgmd29ybGQpOworICAgIGlmIChpdCA9PSBtX3VzZXJTdHlsZVNoZWV0cy5lbmQoKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byYgc3R5bGVzaGVldHMgPSAqaXQtPnZhbHVlOwpA
QCAtMTQ5LDE3ICsxMjYsMTQgQEAgdm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVz
ZXJTdAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoc3R5bGVzaGVldHMuaXNFbXB0eSgpKQot
ICAgICAgICBtX3VzZXJTdHlsZVNoZWV0cy0+cmVtb3ZlKGl0KTsKKyAgICAgICAgbV91c2VyU3R5
bGVTaGVldHMucmVtb3ZlKGl0KTsKIAogICAgIGludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRD
YWNoZUluQWxsRnJhbWVzSW5BbGxQYWdlcygpOwogfQogCiB2b2lkIFVzZXJDb250ZW50Q29udHJv
bGxlcjo6cmVtb3ZlVXNlclN0eWxlU2hlZXRzKERPTVdyYXBwZXJXb3JsZCYgd29ybGQpCiB7Ci0g
ICAgaWYgKCFtX3VzZXJTdHlsZVNoZWV0cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFt
X3VzZXJTdHlsZVNoZWV0cy0+cmVtb3ZlKCZ3b3JsZCkpCisgICAgaWYgKCFtX3VzZXJTdHlsZVNo
ZWV0cy5yZW1vdmUoJndvcmxkKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaW52YWxpZGF0ZUlu
amVjdGVkU3R5bGVTaGVldENhY2hlSW5BbGxGcmFtZXNJbkFsbFBhZ2VzKCk7CkBAIC0xNjgsOTUg
KzE0Miw0MCBAQCB2b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclN0CiAjaWYg
RU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKIHZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVy
OjphZGRVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yKFVzZXJNZXNzYWdlSGFuZGxlckRlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IpCiB7Ci0gICAgaWYgKCFtX3VzZXJNZXNzYWdlSGFuZGxlckRlc2Ny
aXB0b3JzKQotICAgICAgICBtX3VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzID0gc3RkOjpt
YWtlX3VuaXF1ZTxVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yTWFwPigpOwotCi0gICAgbV91
c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycy0+YWRkKHN0ZDo6bWFrZV9wYWlyKGRlc2NyaXB0
b3IubmFtZSgpLCAmZGVzY3JpcHRvci53b3JsZCgpKSwgJmRlc2NyaXB0b3IpOworICAgIG1fdXNl
ck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMuYWRkKHN0ZDo6bWFrZV9wYWlyKGRlc2NyaXB0b3Iu
bmFtZSgpLCAmZGVzY3JpcHRvci53b3JsZCgpKSwgJmRlc2NyaXB0b3IpOwogfQogCiB2b2lkIFVz
ZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcihV
c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQogewotICAgIGlmICghbV91
c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV91
c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycy0+cmVtb3ZlKHN0ZDo6bWFrZV9wYWlyKGRlc2Ny
aXB0b3IubmFtZSgpLCAmZGVzY3JpcHRvci53b3JsZCgpKSk7CisgICAgbV91c2VyTWVzc2FnZUhh
bmRsZXJEZXNjcmlwdG9ycy5yZW1vdmUoc3RkOjptYWtlX3BhaXIoZGVzY3JpcHRvci5uYW1lKCks
ICZkZXNjcmlwdG9yLndvcmxkKCkpKTsKIH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKIHZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyQ29udGVudEV4
dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxDb250ZW50RXh0ZW5zaW9uczo6Q29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uPiBjb250ZW50RXh0ZW5zaW9uKQogewotICAgIGlmICghbV9j
b250ZW50RXh0ZW5zaW9uQmFja2VuZCkKLSAgICAgICAgbV9jb250ZW50RXh0ZW5zaW9uQmFja2Vu
ZCA9IHN0ZDo6bWFrZV91bmlxdWU8Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25z
QmFja2VuZD4oKTsKLSAgICAKLSAgICBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kLT5hZGRDb250
ZW50RXh0ZW5zaW9uKG5hbWUsIGNvbnRlbnRFeHRlbnNpb24pOworICAgIG1fY29udGVudEV4dGVu
c2lvbkJhY2tlbmQuYWRkQ29udGVudEV4dGVuc2lvbihuYW1lLCBjb250ZW50RXh0ZW5zaW9uKTsK
IH0KIAogdm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJDb250ZW50RXh0ZW5z
aW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBpZiAoIW1fY29udGVudEV4dGVuc2lvbkJh
Y2tlbmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQt
PnJlbW92ZUNvbnRlbnRFeHRlbnNpb24obmFtZSk7CisgICAgbV9jb250ZW50RXh0ZW5zaW9uQmFj
a2VuZC5yZW1vdmVDb250ZW50RXh0ZW5zaW9uKG5hbWUpOwogfQogCiB2b2lkIFVzZXJDb250ZW50
Q29udHJvbGxlcjo6cmVtb3ZlQWxsVXNlckNvbnRlbnRFeHRlbnNpb25zKCkKIHsKLSAgICBpZiAo
IW1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29u
dGVudEV4dGVuc2lvbkJhY2tlbmQtPnJlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKCk7Ci19Ci0K
LXN0YXRpYyBib29sIGNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZChjb25zdCBEb2N1bWVudExvYWRl
ciYgZG9jdW1lbnRMb2FkZXIpCi17Ci0gICAgaWYgKGF1dG8gZnJhbWUgPSBkb2N1bWVudExvYWRl
ci5mcmFtZSgpKSB7Ci0gICAgICAgIGlmIChmcmFtZS0+aXNNYWluRnJhbWUoKSkKLSAgICAgICAg
ICAgIHJldHVybiBkb2N1bWVudExvYWRlci51c2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkKCk7
Ci0gICAgICAgIGlmIChhdXRvIG1haW5Eb2N1bWVudExvYWRlciA9IGZyYW1lLT5tYWluRnJhbWUo
KS5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpKQotICAgICAgICAgICAgcmV0dXJuIG1haW5Eb2N1
bWVudExvYWRlci0+dXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZCgpOwotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotICAgIAotQ29udGVudEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXMg
VXNlckNvbnRlbnRDb250cm9sbGVyOjpwcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9yTG9h
ZChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlVHlwZSByZXNvdXJjZVR5cGUsIERv
Y3VtZW50TG9hZGVyJiBpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIpCi17Ci0gICAgaWYgKCFtX2Nv
bnRlbnRFeHRlbnNpb25CYWNrZW5kKQotICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbnM6
OkJsb2NrZWRTdGF0dXM6Ok5vdEJsb2NrZWQ7Ci0KLSAgICBpZiAoIWNvbnRlbnRFeHRlbnNpb25z
RW5hYmxlZChpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIpKQotICAgICAgICByZXR1cm4gQ29udGVu
dEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXM6Ok5vdEJsb2NrZWQ7Ci0KLSAgICByZXR1cm4gbV9j
b250ZW50RXh0ZW5zaW9uQmFja2VuZC0+cHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0Zvckxv
YWQocmVxdWVzdCwgcmVzb3VyY2VUeXBlLCBpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIpOwotfQot
Ci1WZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbj4gVXNlckNvbnRlbnRDb250cm9sbGVy
OjphY3Rpb25zRm9yUmVzb3VyY2VMb2FkKGNvbnN0IFJlc291cmNlTG9hZEluZm8mIHJlc291cmNl
TG9hZEluZm8sIERvY3VtZW50TG9hZGVyJiBpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIpCi17Ci0g
ICAgaWYgKCFtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kKQotICAgICAgICByZXR1cm4gVmVjdG9y
PENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb24+KCk7Ci0gICAgCi0gICAgaWYgKCFjb250ZW50RXh0
ZW5zaW9uc0VuYWJsZWQoaW5pdGlhdGluZ0RvY3VtZW50TG9hZGVyKSkKLSAgICAgICAgcmV0dXJu
IFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uPigpOwotCi0gICAgcmV0dXJuIG1fY29u
dGVudEV4dGVuc2lvbkJhY2tlbmQtPmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQocmVzb3VyY2VMb2Fk
SW5mbyk7CisgICAgbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZC5yZW1vdmVBbGxDb250ZW50RXh0
ZW5zaW9ucygpOwogfQogI2VuZGlmCiAKIHZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1v
dmVBbGxVc2VyQ29udGVudCgpCiB7Ci0gICAgbV91c2VyU2NyaXB0cyA9IG51bGxwdHI7CisgICAg
bV91c2VyU2NyaXB0cy5jbGVhcigpOwogCi0gICAgaWYgKG1fdXNlclN0eWxlU2hlZXRzKSB7Ci0g
ICAgICAgIG1fdXNlclN0eWxlU2hlZXRzID0gbnVsbHB0cjsKKyAgICBpZiAoIW1fdXNlclN0eWxl
U2hlZXRzLmlzRW1wdHkoKSkgeworICAgICAgICBtX3VzZXJTdHlsZVNoZWV0cy5jbGVhcigpOwog
ICAgICAgICBpbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lc0luQWxs
UGFnZXMoKTsKICAgICB9CiB9CiAKLXZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjppbnZhbGlk
YXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lc0luQWxsUGFnZXMoKQotewotICAg
IGZvciAoYXV0byYgcGFnZSA6IG1fcGFnZXMpCi0gICAgICAgIHBhZ2UtPmludmFsaWRhdGVJbmpl
Y3RlZFN0eWxlU2hlZXRDYWNoZUluQWxsRnJhbWVzKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnRDb250cm9sbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIu
aAkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudENv
bnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNTggKzI2LDE5IEBACiAjaWZuZGVmIFVz
ZXJDb250ZW50Q29udHJvbGxlcl9oCiAjZGVmaW5lIFVzZXJDb250ZW50Q29udHJvbGxlcl9oCiAK
LSNpbmNsdWRlICJVc2VyU2NyaXB0VHlwZXMuaCIKLSNpbmNsdWRlICJVc2VyU3R5bGVTaGVldFR5
cGVzLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2lmIEVOQUJMRShVU0VSX01FU1NBR0Vf
SEFORExFUlMpCi0jaW5jbHVkZSAiVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvclR5cGVzLmgi
Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0jaW5jbHVkZSAiQ29u
dGVudEV4dGVuc2lvbkFjdGlvbnMuaCIKLSNlbmRpZgorI2luY2x1ZGUgIlVzZXJDb250ZW50UHJv
dmlkZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBET01XcmFwcGVyV29ybGQ7
Ci1jbGFzcyBEb2N1bWVudExvYWRlcjsKLWNsYXNzIFBhZ2U7Ci1jbGFzcyBSZXNvdXJjZVJlcXVl
c3Q7Ci1jbGFzcyBTdHlsZVNoZWV0Q29udGVudHM7Ci1jbGFzcyBVUkw7Ci1jbGFzcyBVc2VyU2Ny
aXB0OwotY2xhc3MgVXNlclN0eWxlU2hlZXQ7Ci1jbGFzcyBVc2VyTWVzc2FnZUhhbmRsZXJEZXNj
cmlwdG9yOwotCi1lbnVtIGNsYXNzIFJlc291cmNlVHlwZSA6IHVpbnQxNl90OwotCi1zdHJ1Y3Qg
UmVzb3VyY2VMb2FkSW5mbzsKLQotbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKLWNsYXNz
IENvbXBpbGVkQ29udGVudEV4dGVuc2lvbjsKLWNsYXNzIENvbnRlbnRFeHRlbnNpb25zQmFja2Vu
ZDsKLXN0cnVjdCBBY3Rpb247Ci19Ci0KLWNsYXNzIFVzZXJDb250ZW50Q29udHJvbGxlciA6IHB1
YmxpYyBSZWZDb3VudGVkPFVzZXJDb250ZW50Q29udHJvbGxlcj4geworY2xhc3MgVXNlckNvbnRl
bnRDb250cm9sbGVyIGZpbmFsIDogcHVibGljIFVzZXJDb250ZW50UHJvdmlkZXIgewogcHVibGlj
OgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8VXNlckNvbnRlbnRDb250cm9sbGVyPiBj
cmVhdGUoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB+VXNlckNvbnRlbnRDb250cm9sbGVyKCk7CiAK
LSAgICB2b2lkIGFkZFBhZ2UoUGFnZSYpOwotICAgIHZvaWQgcmVtb3ZlUGFnZShQYWdlJik7Ci0K
LSAgICBjb25zdCBVc2VyU2NyaXB0TWFwKiB1c2VyU2NyaXB0cygpIGNvbnN0IHsgcmV0dXJuIG1f
dXNlclNjcmlwdHMuZ2V0KCk7IH0KLQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkVXNlclNj
cmlwdChET01XcmFwcGVyV29ybGQmLCBzdGQ6OnVuaXF1ZV9wdHI8VXNlclNjcmlwdD4pOwogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlVXNlclNjcmlwdChET01XcmFwcGVyV29ybGQmLCBj
b25zdCBVUkwmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVVzZXJTY3JpcHRzKERP
TVdyYXBwZXJXb3JsZCYpOwogCi0gICAgY29uc3QgVXNlclN0eWxlU2hlZXRNYXAqIHVzZXJTdHls
ZVNoZWV0cygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlclN0eWxlU2hlZXRzLmdldCgpOyB9Ci0KICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZFVzZXJTdHlsZVNoZWV0KERPTVdyYXBwZXJXb3JsZCYs
IHN0ZDo6dW5pcXVlX3B0cjxVc2VyU3R5bGVTaGVldD4sIFVzZXJTdHlsZUluamVjdGlvblRpbWUp
OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlVXNlclN0eWxlU2hlZXQoRE9NV3JhcHBl
cldvcmxkJiwgY29uc3QgVVJMJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVVc2Vy
U3R5bGVTaGVldHMoRE9NV3JhcHBlcldvcmxkJik7CkBAIC04NSw4ICs0Niw2IEBAIHB1YmxpYzoK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUFsbFVzZXJDb250ZW50KCk7CiAKICNpZiBF
TkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQotICAgIGNvbnN0IFVzZXJNZXNzYWdlSGFuZGxl
ckRlc2NyaXB0b3JNYXAqIHVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzKCkgY29uc3QgeyBy
ZXR1cm4gbV91c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycy5nZXQoKTsgfQotCiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBhZGRVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yKFVzZXJNZXNz
YWdlSGFuZGxlckRlc2NyaXB0b3ImKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVVz
ZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IoVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvciYp
OwogI2VuZGlmCkBAIC05NSwyNSArNTQsMjggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgYWRkVXNlckNvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8
Q29udGVudEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4pOwogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgcmVtb3ZlVXNlckNvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBu
YW1lKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUFsbFVzZXJDb250ZW50RXh0ZW5z
aW9ucygpOwotCi0gICAgQ29udGVudEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXMgcHJvY2Vzc0Nv
bnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQoUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VUeXBl
LCBEb2N1bWVudExvYWRlciYgaW5pdGlhdGluZ0RvY3VtZW50TG9hZGVyKTsKLSAgICBWZWN0b3I8
Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbj4gYWN0aW9uc0ZvclJlc291cmNlTG9hZChjb25zdCBS
ZXNvdXJjZUxvYWRJbmZvJiwgRG9jdW1lbnRMb2FkZXImIGluaXRpYXRpbmdEb2N1bWVudExvYWRl
cik7CiAjZW5kaWYKIAogcHJpdmF0ZToKICAgICBVc2VyQ29udGVudENvbnRyb2xsZXIoKTsKIAot
ICAgIHZvaWQgaW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlSW5BbGxGcmFtZXNJbkFs
bFBhZ2VzKCk7Ci0KLSAgICBIYXNoU2V0PFBhZ2UqPiBtX3BhZ2VzOworICAgIC8vIFVzZXJDb250
ZW50UHJvdmlkZXIKKyAgICB2b2lkIGZvckVhY2hVc2VyU2NyaXB0KGNvbnN0IHN0ZDo6ZnVuY3Rp
b248dm9pZChET01XcmFwcGVyV29ybGQmLCBjb25zdCBVc2VyU2NyaXB0Jik+JikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdm9pZCBmb3JFYWNoVXNlclN0eWxlU2hlZXQoY29uc3Qgc3RkOjpmdW5jdGlv
bjx2b2lkKGNvbnN0IFVzZXJTdHlsZVNoZWV0Jik+JikgY29uc3Qgb3ZlcnJpZGU7CisjaWYgRU5B
QkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKKyAgICBjb25zdCBVc2VyTWVzc2FnZUhhbmRsZXJE
ZXNjcmlwdG9yTWFwJiB1c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycygpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnM7IH0KKyNlbmRpZgor
I2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisgICAgQ29udGVudEV4dGVuc2lvbnM6OkNv
bnRlbnRFeHRlbnNpb25zQmFja2VuZCYgdXNlckNvbnRlbnRFeHRlbnNpb25CYWNrZW5kKCkgb3Zl
cnJpZGUgeyByZXR1cm4gbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZDsgfQorI2VuZGlmCiAKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8VXNlclNjcmlwdE1hcD4gbV91c2VyU2NyaXB0czsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8VXNlclN0eWxlU2hlZXRNYXA+IG1fdXNlclN0eWxlU2hlZXRzOworICAgIFVz
ZXJTY3JpcHRNYXAgbV91c2VyU2NyaXB0czsKKyAgICBVc2VyU3R5bGVTaGVldE1hcCBtX3VzZXJT
dHlsZVNoZWV0czsKICNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQotICAgIHN0ZDo6
dW5pcXVlX3B0cjxVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yTWFwPiBtX3VzZXJNZXNzYWdl
SGFuZGxlckRlc2NyaXB0b3JzOworICAgIFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JNYXAg
bV91c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yczsKICNlbmRpZgogI2lmIEVOQUJMRShDT05U
RU5UX0VYVEVOU0lPTlMpCi0gICAgc3RkOjp1bmlxdWVfcHRyPENvbnRlbnRFeHRlbnNpb25zOjpD
b250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ+IG1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQ7CisgICAg
Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCBtX2NvbnRlbnRFeHRl
bnNpb25CYWNrZW5kOwogI2VuZGlmCiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1Vz
ZXJDb250ZW50UHJvdmlkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
VXNlckNvbnRlbnRQcm92aWRlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL1VzZXJDb250ZW50UHJvdmlkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlVzZXJDb250
ZW50UHJvdmlkZXIuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1l
bnRMb2FkZXIuaCIKKyNpbmNsdWRlICJNYWluRnJhbWUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisK
KyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNp
b25Db21waWxlci5oIgorI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5oIgorI2Vu
ZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVXNlckNvbnRlbnRQcm92aWRlcjo6VXNlckNv
bnRlbnRQcm92aWRlcigpCit7Cit9CisKK1VzZXJDb250ZW50UHJvdmlkZXI6On5Vc2VyQ29udGVu
dFByb3ZpZGVyKCkKK3sKKyAgICBBU1NFUlQobV9wYWdlcy5pc0VtcHR5KCkpOworfQorCit2b2lk
IFVzZXJDb250ZW50UHJvdmlkZXI6OmFkZFBhZ2UoUGFnZSYgcGFnZSkKK3sKKyAgICBBU1NFUlQo
IW1fcGFnZXMuY29udGFpbnMoJnBhZ2UpKTsKKworICAgIG1fcGFnZXMuYWRkKCZwYWdlKTsKK30K
Kwordm9pZCBVc2VyQ29udGVudFByb3ZpZGVyOjpyZW1vdmVQYWdlKFBhZ2UmIHBhZ2UpCit7Cisg
ICAgQVNTRVJUKG1fcGFnZXMuY29udGFpbnMoJnBhZ2UpKTsKKworICAgIG1fcGFnZXMucmVtb3Zl
KCZwYWdlKTsKK30KKwordm9pZCBVc2VyQ29udGVudFByb3ZpZGVyOjppbnZhbGlkYXRlSW5qZWN0
ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lc0luQWxsUGFnZXMoKQoreworICAgIGZvciAoYXV0
byYgcGFnZSA6IG1fcGFnZXMpCisgICAgICAgIHBhZ2UtPmludmFsaWRhdGVJbmplY3RlZFN0eWxl
U2hlZXRDYWNoZUluQWxsRnJhbWVzKCk7Cit9CisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJ
T05TKQorc3RhdGljIGJvb2wgY29udGVudEV4dGVuc2lvbnNFbmFibGVkKGNvbnN0IERvY3VtZW50
TG9hZGVyJiBkb2N1bWVudExvYWRlcikKK3sKKyAgICBpZiAoYXV0byBmcmFtZSA9IGRvY3VtZW50
TG9hZGVyLmZyYW1lKCkpIHsKKyAgICAgICAgaWYgKGZyYW1lLT5pc01haW5GcmFtZSgpKQorICAg
ICAgICAgICAgcmV0dXJuIGRvY3VtZW50TG9hZGVyLnVzZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJs
ZWQoKTsKKyAgICAgICAgaWYgKGF1dG8gbWFpbkRvY3VtZW50TG9hZGVyID0gZnJhbWUtPm1haW5G
cmFtZSgpLmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkpCisgICAgICAgICAgICByZXR1cm4gbWFp
bkRvY3VtZW50TG9hZGVyLT51c2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkKCk7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisgICAgCitDb250ZW50RXh0ZW5zaW9uczo6QmxvY2tlZFN0
YXR1cyBVc2VyQ29udGVudFByb3ZpZGVyOjpwcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9y
TG9hZChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlVHlwZSByZXNvdXJjZVR5cGUs
IERvY3VtZW50TG9hZGVyJiBpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIpCit7CisgICAgaWYgKCFj
b250ZW50RXh0ZW5zaW9uc0VuYWJsZWQoaW5pdGlhdGluZ0RvY3VtZW50TG9hZGVyKSkKKyAgICAg
ICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzOjpOb3RCbG9ja2VkOwor
CisgICAgcmV0dXJuIHVzZXJDb250ZW50RXh0ZW5zaW9uQmFja2VuZCgpLnByb2Nlc3NDb250ZW50
RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKHJlcXVlc3QsIHJlc291cmNlVHlwZSwgaW5pdGlhdGluZ0Rv
Y3VtZW50TG9hZGVyKTsKK30KKworVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb24+IFVz
ZXJDb250ZW50UHJvdmlkZXI6OmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQoY29uc3QgUmVzb3VyY2VM
b2FkSW5mbyYgcmVzb3VyY2VMb2FkSW5mbywgRG9jdW1lbnRMb2FkZXImIGluaXRpYXRpbmdEb2N1
bWVudExvYWRlcikKK3sKKyAgICBpZiAoIWNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZChpbml0aWF0
aW5nRG9jdW1lbnRMb2FkZXIpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIHVz
ZXJDb250ZW50RXh0ZW5zaW9uQmFja2VuZCgpLmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQocmVzb3Vy
Y2VMb2FkSW5mbyk7Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudFByb3ZpZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudFByb3ZpZGVyLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50UHJvdmlkZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBVc2VyQ29udGVudFByb3Zp
ZGVyX2gKKyNkZWZpbmUgVXNlckNvbnRlbnRQcm92aWRlcl9oCisKKyNpbmNsdWRlICJVc2VyU2Ny
aXB0VHlwZXMuaCIKKyNpbmNsdWRlICJVc2VyU3R5bGVTaGVldFR5cGVzLmgiCisjaW5jbHVkZSA8
ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworI2lmIEVOQUJMRShVU0VSX01F
U1NBR0VfSEFORExFUlMpCisjaW5jbHVkZSAiVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvclR5
cGVzLmgiCisjZW5kaWYKKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisjaW5jbHVk
ZSAiQ29udGVudEV4dGVuc2lvbkFjdGlvbnMuaCIKKyNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9u
c0JhY2tlbmQuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERvY3Vt
ZW50TG9hZGVyOworY2xhc3MgUGFnZTsKK2NsYXNzIFJlc291cmNlUmVxdWVzdDsKK2NsYXNzIFVS
TDsKKworZW51bSBjbGFzcyBSZXNvdXJjZVR5cGUgOiB1aW50MTZfdDsKKworc3RydWN0IFJlc291
cmNlTG9hZEluZm87CisKK25hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CitjbGFzcyBDb250
ZW50RXh0ZW5zaW9uc0JhY2tlbmQ7CitzdHJ1Y3QgQWN0aW9uOworfQorCitjbGFzcyBVc2VyQ29u
dGVudFByb3ZpZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8VXNlckNvbnRlbnRQcm92aWRlcj4gewor
cHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIFVzZXJDb250ZW50UHJvdmlkZXIoKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5Vc2VyQ29udGVudFByb3ZpZGVyKCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgZm9yRWFjaFVzZXJTY3JpcHQoY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkKERPTVdy
YXBwZXJXb3JsZCYsIGNvbnN0IFVzZXJTY3JpcHQmKT4mKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGZvckVhY2hVc2VyU3R5bGVTaGVldChjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29u
c3QgVXNlclN0eWxlU2hlZXQmKT4mKSBjb25zdCA9IDA7CisKKyNpZiBFTkFCTEUoVVNFUl9NRVNT
QUdFX0hBTkRMRVJTKQorICAgIHZpcnR1YWwgY29uc3QgVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3Jp
cHRvck1hcCYgdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMoKSBjb25zdCA9IDA7CisjZW5k
aWYKKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisgICAgdmlydHVhbCBDb250ZW50
RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kJiB1c2VyQ29udGVudEV4dGVuc2lv
bkJhY2tlbmQoKSA9IDA7CisjZW5kaWYKKworICAgIHZvaWQgYWRkUGFnZShQYWdlJik7CisgICAg
dm9pZCByZW1vdmVQYWdlKFBhZ2UmKTsKKworCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9O
UykKKyAgICAvLyBGSVhNRTogVGhlc2UgZG9uJ3QgcmVhbGx5IGJlbG9uZyBoZXJlLiBUaGV5IHNo
b3VsZCBwcm9iYWJseSBidW5kbGVkIHVwIGluIHRoZSBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQK
KyAgICAvLyB3aGljaCBzaG91bGQgYWx3YXlzIGV4aXN0LgorICAgIENvbnRlbnRFeHRlbnNpb25z
OjpCbG9ja2VkU3RhdHVzIHByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKFJlc291
cmNlUmVxdWVzdCYsIFJlc291cmNlVHlwZSwgRG9jdW1lbnRMb2FkZXImIGluaXRpYXRpbmdEb2N1
bWVudExvYWRlcik7CisgICAgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb24+IGFjdGlv
bnNGb3JSZXNvdXJjZUxvYWQoY29uc3QgUmVzb3VyY2VMb2FkSW5mbyYsIERvY3VtZW50TG9hZGVy
JiBpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIpOworI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZUluQWxs
RnJhbWVzSW5BbGxQYWdlcygpOworCitwcml2YXRlOgorICAgIEhhc2hTZXQ8UGFnZSo+IG1fcGFn
ZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVc2VyQ29udGVu
dFByb3ZpZGVyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlck1lc3NhZ2VIYW5kbGVy
RGVzY3JpcHRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlck1lc3Nh
Z2VIYW5kbGVyRGVzY3JpcHRvci5oCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
NTQsOCArNTQsOCBAQCBwdWJsaWM6CiAgICAgfQogICAgIFdFQkNPUkVfRVhQT1JUIH5Vc2VyTWVz
c2FnZUhhbmRsZXJEZXNjcmlwdG9yKCk7CiAKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUo
KTsKLSAgICBET01XcmFwcGVyV29ybGQmIHdvcmxkKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRE9NV3JhcHBlcldv
cmxkJiB3b3JsZCgpOwogCiAgICAgQ2xpZW50KiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2Ns
aWVudDsgfQogICAgIHZvaWQgaW52YWxpZGF0ZUNsaWVudCgpIHsgbV9jbGllbnQgPSBudWxscHRy
OyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3Bh
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlck1lc3NhZ2VIYW5k
bGVyc05hbWVzcGFjZS5jcHAJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUz
LDE1ICs1Myw5IEBAIFVzZXJNZXNzYWdlSGFuZGxlciogVXNlck1lc3NhZ2VIYW5kbGVyc04KICAg
ICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAotICAgIGNvbnN0IGF1
dG8qIHVzZXJDb250ZW50Q29udHJvbGxlciA9IHBhZ2UtPnVzZXJDb250ZW50Q29udHJvbGxlcigp
OwotICAgIGlmICghdXNlckNvbnRlbnRDb250cm9sbGVyKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIGNvbnN0IGF1dG8qIHVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzID0gdXNl
ckNvbnRlbnRDb250cm9sbGVyLT51c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycygpOwotICAg
IGlmICghdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgUmVmUHRyPFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3I+IGRlc2NyaXB0
b3IgPSB1c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycy0+Z2V0KHN0ZDo6bWFrZV9wYWlyKG5h
bWUsICZ3b3JsZCkpOworICAgIGF1dG8mIGRlc2NyaXB0b3JzID0gcGFnZS0+dXNlckNvbnRlbnRQ
cm92aWRlcigpLnVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzKCk7CisgICAgCisgICAgUmVm
UHRyPFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3I+IGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9y
cy5nZXQoc3RkOjptYWtlX3BhaXIobmFtZSwgJndvcmxkKSk7CiAgICAgaWYgKCFkZXNjcmlwdG9y
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtNzAsNyArNjQsNyBAQCBVc2VyTWVzc2Fn
ZUhhbmRsZXIqIFVzZXJNZXNzYWdlSGFuZGxlcnNOCiAgICAgICAgICAgICByZXR1cm4gJmhhbmRs
ZXIuZ2V0KCk7CiAgICAgfQogCi0gICAgYXV0byBsaXZlSGFuZGxlcnMgPSB1c2VyTWVzc2FnZUhh
bmRsZXJEZXNjcmlwdG9ycy0+dmFsdWVzKCk7CisgICAgYXV0byBsaXZlSGFuZGxlcnMgPSBkZXNj
cmlwdG9ycy52YWx1ZXMoKTsKICAgICBtX21lc3NhZ2VIYW5kbGVycy5yZW1vdmVBbGxNYXRjaGlu
ZyhbbGl2ZUhhbmRsZXJzXShjb25zdCBSZWY8VXNlck1lc3NhZ2VIYW5kbGVyPiYgaGFuZGxlcikg
ewogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGxpdmVIYW5kbGVyIDogbGl2ZUhhbmRsZXJzKSB7
CiAgICAgICAgICAgICBpZiAobGl2ZUhhbmRsZXIuZ2V0KCkgPT0gJmhhbmRsZXItPmRlc2NyaXB0
b3IoKSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNiBAQAorMjAxNi0wMy0xNCAg
U2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBhIGJhc2VVUkwgcGFy
YW1ldGVyIHRvIF9XS1VzZXJTdHlsZVNoZWV0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTUyMTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAtIE1vdmVzIHRvIGEgbW9kZWwgZm9yIHVzZXIgY29udGVudCB3
aGVyZSBpbnN0ZWFkIG9mIHVzaW5nIGEgV2ViQ29yZTo6VXNlckNvbnRlbnRDb250cm9sbGVyCisg
ICAgICAgICAgb2JqZWN0LCB3ZSBpbXBsZW1lbnQgdGhlIG5ldyBXZWJDb3JlOjpVc2VyQ29udGVu
dFByb3ZpZGVyIGludGVyZmFjZSAob24gdGhlIGV4aXN0aW5nIAorICAgICAgICAgIFdlYlVzZXJD
b250ZW50Q29udHJvbGxlciBvYmplY3QpLgorICAgICAgICAtIFVzZXMgdGhpcyB0byBtYWludGFp
biBtYXBzIG9mIFVzZXJTdHlsZXNTaGVldHMgYW5kIFVzZXJTY3JpcHRzIGFsb25nIHdpdGggdGhl
aXIgaWRlbnRpZmllcnMsCisgICAgICAgICAgZnJlZWluZyB1cCB0aGUgVVJMLCB3aGljaCBoYWQg
YmVlbiBhY3RpbmcgYXMgdGhlIGlkZW50aWZpZXIsIHRvIGJlIHVzZWQgYXMgdGhlIGJhc2VVUkwg
d2hpY2gKKyAgICAgICAgICB3YXMgd2hhdCBpdCB3YXMgaW50ZW5kZWQgZm9yLgorICAgICAgICAt
IEFkZHMgYSBiYXNlVVJMIHByb3BlcnR5IHRvIF9XS1VzZXJTdHlsZVNoZWV0LgorCisgICAgICAg
ICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICBBZGQgbmV3IGZp
bGVzLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHk6CisgICAgICAgICho
ZWFkZXJzX2Zvcl90eXBlKToKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHNlbmRpbmcgV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLgorCisgICAgICAgICogU2hhcmVkL1dlYlVzZXJD
b250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpX
ZWJVc2VyU2NyaXB0RGF0YTo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlclNjcmlw
dERhdGE6OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJTdHlsZVNoZWV0RGF0YTo6
ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlclN0eWxlU2hlZXREYXRhOjpkZWNvZGUp
OgorICAgICAgICAqIFNoYXJlZC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuaDog
QWRkZWQuCisgICAgICAgIEFkZCBoZWxwZXIgdHlwZXMgZm9yIHNlbmRpbmcgdXNlciBjb250ZW50
IG92ZXIgSVBDLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElVc2VyU2NyaXB0LmNwcDoK
KyAgICAgICAgKEFQSTo6VXNlclNjcmlwdDo6Z2VuZXJhdGVVbmlxdWVVUkwpOgorICAgICAgICAo
QVBJOjpVc2VyU2NyaXB0OjpVc2VyU2NyaXB0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQ
SVVzZXJTY3JpcHQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSVVzZXJTdHlsZVNoZWV0
LmNwcDoKKyAgICAgICAgKEFQSTo6VXNlclN0eWxlU2hlZXQ6OmdlbmVyYXRlVW5pcXVlVVJMKToK
KyAgICAgICAgKEFQSTo6VXNlclN0eWxlU2hlZXQ6OlVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0FQSVVzZXJTdHlsZVNoZWV0Lmg6CisgICAgICAgIEFkZCBpZGVudGlm
aWVycyBmb3IgdHJhY2tpbmcgYWNyb3NzIHByb2Nlc3Nlcy4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLVXNlclN0eWxlU2hlZXQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL19XS1VzZXJTdHlsZVNoZWV0Lm1tOgorICAgICAgICAoLVtfV0tVc2VyU3R5bGVTaGVl
dCBpbml0V2l0aFNvdXJjZTpmb3JNYWluRnJhbWVPbmx5OmxlZ2FjeVdoaXRlbGlzdDpsZWdhY3lC
bGFja2xpc3Q6YmFzZVVSTDp1c2VyQ29udGVudFdvcmxkOl0pOgorICAgICAgICAoLVtfV0tVc2Vy
U3R5bGVTaGVldCBiYXNlVVJMXSk6CisgICAgICAgIEFkZCBuZXcgaW5pdGlhbGl6ZXIgd2hpY2gg
dGFrZXMgYSBiYXNlVVJMIGFzIHdlbGwgYXMgYW4gYWNjZXNzb3IgZm9yIHRoZSBiYXNlVVJMLgor
CisgICAgICAgICogVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxl
clByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJv
eHk6OmFkZFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXJQcm94eTo6YWRkVXNlclNjcmlwdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50
Q29udHJvbGxlclByb3h5OjpyZW1vdmVVc2VyU2NyaXB0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFkZFVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92ZVVzZXJTdHlsZVNo
ZWV0KToKKyAgICAgICAgUGFzcyBpZGVudGlmaWVycyBhcyB3ZWxsIGFzIHVzZXIgY29udGVudC4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6YWRkVXNlclNjcmlwdCk6CisgICAg
ICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlOjphZGRVc2VyU3R5bGVTaGVldCk6CisgICAgICAg
IE1vdmUgdXNlciBjb250ZW50IGluIHZpYSBtb3ZlIHNlbWFudGljcyByYXRoZXIgdGhhbiB1c2lu
ZyBhIHVuaXF1ZV9wdHIuCisKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGU6OnJlbW92
ZVVzZXJTY3JpcHQpOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6cmVtb3ZlVXNl
clN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6cmVtb3ZlVXNl
clNjcmlwdHMpOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6cmVtb3ZlVXNlclN0
eWxlU2hlZXRzKToKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGU6OnJlbW92ZUFsbFVz
ZXJDb250ZW50KToKKyAgICAgICAgVXBkYXRlIGZvciBuZXcgZnVuY3Rpb24gc2lnbmF0dXJlcy4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpXZWJV
c2VyQ29udGVudENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENv
bnRyb2xsZXI6On5XZWJVc2VyQ29udGVudENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJDb250ZW50V29ybGRzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyQ29udGVudFdvcmxk
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlclNj
cmlwdHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92
ZVVzZXJTY3JpcHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6
OnJlbW92ZUFsbFVzZXJTY3JpcHRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRD
b250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVBbGxVc2VyU3R5bGVTaGVldHMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHRN
ZXNzYWdlSGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXI6OnJlbW92ZVVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlcik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlckNvbnRlbnRFeHRlbnNpb25zKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyQ29udGVudEV4
dGVuc2lvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVt
b3ZlQWxsVXNlckNvbnRlbnRFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNv
bnRlbnRDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0SW50ZXJuYWwpOgorICAgICAgICAoV2ViS2l0
OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTY3JpcHRXaXRoVVJMKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU2Ny
aXB0SW50ZXJuYWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6
OnJlbW92ZVVzZXJTY3JpcHRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250
cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldEludGVybmFsKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclN0eWxlU2hlZXRXaXRoVVJM
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2Vy
U3R5bGVTaGVldEludGVybmFsKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250
cm9sbGVyOjpyZW1vdmVVc2VyU3R5bGVTaGVldHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXI6OnJlbW92ZUFsbFVzZXJDb250ZW50KToKKyAgICAgICAgKFdlYktp
dDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpmb3JFYWNoVXNlclNjcmlwdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6Zm9yRWFjaFVzZXJTdHlsZVNoZWV0
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJv
bGxlci5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRD
b250cm9sbGVyLm1lc3NhZ2VzLmluOgorICAgICAgICBDb252ZXJ0IHRvIGluaGVyaXRpbmcgZnJv
bSBVc2VyQ29udGVudFByb3ZpZGVyLCByYXRoZXIgdGhhbiBjb250YWluaW5nIGEgVXNlckNvbnRl
bnRDb250cm9sbGVyLgorICAgICAgICBUaGlzIG1lYW5zIGFkZGluZyB0aGUgc3RvcmFnZSBmb3Ig
dGhlIHVzZXIgY29udGVudCwgd2hpY2ggaGFzIGJlZW4gc2ltcGxpZmllZCB0byBhdm9pZCB1c2lu
ZworICAgICAgICB1bmlxdWVfcHRycy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6YWRkVXNlclNjcmlwdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmFkZFVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6cmVtb3ZlQWxsVXNlckNvbnRlbnQpOgorICAgICAgICBVcGRhdGUgdG8g
Y2FsbCB0aGUgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLCByYXRoZXIgdGhhbiBnb2luZyB0byB0
aGUgVXNlckNvbnRlbnRDb250cm9sbGVyLCB3aGljaAorICAgICAgICBubyBsb25nZXIgZXhpc3Rz
LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUdyb3VwUHJveHk6OnVzZXJDb250ZW50Q29udHJvbGxl
cik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5Lmg6Cisg
ICAgICAgIFJldHVybiB0aGUgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyIHJhdGhlciB0aGFuIG9s
ZCBVc2VyQ29udGVudENvbnRyb2xsZXIuCisKIDIwMTYtMDMtMTQgIEJldGggRGFraW4gIDxiZGFr
aW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVuYWJsZSB0byBjb21taXQgcHJldmlld3MgaW4gTW9i
aWxlIFNhZmFyaQpJbmRleDogU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMu
cHkJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0L21l
c3NhZ2VzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNzgsNiArMzc4LDggQEAgZGVmIGhlYWRlcnNf
Zm9yX3R5cGUodHlwZSk6CiAgICAgICAgICdXZWJLaXQ6OldlYlRvdWNoRXZlbnQnOiBbJyJXZWJF
dmVudC5oIiddLAogICAgICAgICAnV2ViS2l0OjpXZWJXaGVlbEV2ZW50JzogWyciV2ViRXZlbnQu
aCInXSwKICAgICAgICAgJ1dlYktpdDo6V2ViU2NyaXB0TWVzc2FnZUhhbmRsZXJIYW5kbGUnOiBb
JyJXZWJTY3JpcHRNZXNzYWdlSGFuZGxlci5oIiddLAorICAgICAgICAnc3RydWN0IFdlYktpdDo6
V2ViVXNlclNjcmlwdERhdGEnOiBbJyJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMu
aCInXSwKKyAgICAgICAgJ3N0cnVjdCBXZWJLaXQ6OldlYlVzZXJTdHlsZVNoZWV0RGF0YSc6IFsn
IldlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oIiddLAogICAgICAgICAnc3RkOjpj
aHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCc6IFsnPGNocm9ubz4nXSwKICAgICB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRh
VHlwZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJVc2VyQ29u
dGVudENvbnRyb2xsZXJEYXRhVHlwZXMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuaCIKKworI2luY2x1
ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9p
ZCBXZWJVc2VyU2NyaXB0RGF0YTo6ZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAoreworICAgIGVuY29kZXIgPDwgaWRlbnRpZmllcjsKKyAgICBlbmNvZGVyIDw8IHdv
cmxkSWRlbnRpZmllcjsKKyAgICBlbmNvZGVyIDw8IHVzZXJTY3JpcHQ7Cit9CisKK2Jvb2wgV2Vi
VXNlclNjcmlwdERhdGE6OmRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgV2Vi
VXNlclNjcmlwdERhdGEmIGRhdGEpCit7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShkYXRhLmlk
ZW50aWZpZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShkYXRhLndvcmxkSWRlbnRpZmllcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKGRhdGEudXNlclNjcmlwdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJVc2VyU3R5bGVTaGVldERhdGE6OmVuY29k
ZShJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8
IGlkZW50aWZpZXI7CisgICAgZW5jb2RlciA8PCB3b3JsZElkZW50aWZpZXI7CisgICAgZW5jb2Rl
ciA8PCB1c2VyU3R5bGVTaGVldDsKK30KKworYm9vbCBXZWJVc2VyU3R5bGVTaGVldERhdGE6OmRl
Y29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgV2ViVXNlclN0eWxlU2hlZXREYXRh
JiBkYXRhKQoreworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGF0YS5pZGVudGlmaWVyKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGF0YS53b3JsZElk
ZW50aWZpZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShkYXRhLnVzZXJTdHlsZVNoZWV0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVz
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViVXNlckNvbnRlbnRD
b250cm9sbGVyRGF0YVR5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzX2gKKyNk
ZWZpbmUgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzX2gKKworI2luY2x1ZGUgPFdl
YkNvcmUvVXNlclNjcmlwdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVXNlclN0eWxlU2hlZXQuaD4K
KworbmFtZXNwYWNlIElQQyB7CitjbGFzcyBBcmd1bWVudERlY29kZXI7CitjbGFzcyBBcmd1bWVu
dEVuY29kZXI7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdHJ1Y3QgV2ViVXNlclNjcmlw
dERhdGEgeworICAgIHZvaWQgZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJikgY29uc3Q7Cisg
ICAgc3RhdGljIGJvb2wgZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiwgV2ViVXNlclNjcmlw
dERhdGEmKTsKKworICAgIHVpbnQ2NF90IGlkZW50aWZpZXI7CisgICAgdWludDY0X3Qgd29ybGRJ
ZGVudGlmaWVyOworICAgIFdlYkNvcmU6OlVzZXJTY3JpcHQgdXNlclNjcmlwdDsKK307CisKK3N0
cnVjdCBXZWJVc2VyU3R5bGVTaGVldERhdGEgeworICAgIHZvaWQgZW5jb2RlKElQQzo6QXJndW1l
bnRFbmNvZGVyJikgY29uc3Q7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKElQQzo6QXJndW1lbnRE
ZWNvZGVyJiwgV2ViVXNlclN0eWxlU2hlZXREYXRhJik7CisKKyAgICB1aW50NjRfdCBpZGVudGlm
aWVyOworICAgIHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllcjsKKyAgICBXZWJDb3JlOjpVc2VyU3R5
bGVTaGVldCB1c2VyU3R5bGVTaGVldDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzX2gKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlclNjcmlwdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyU2NyaXB0LmNwcAkocmV2aXNpb24g
MTk4MTQ3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyU2NyaXB0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzksMTEgKzM5LDIwIEBAIHN0YXRpYyB1aW50NjRfdCBnZW5l
cmF0ZUlkZW50aWZpZXIoKQogCiBXZWJDb3JlOjpVUkwgVXNlclNjcmlwdDo6Z2VuZXJhdGVVbmlx
dWVVUkwoKQogeworICAgIHN0YXRpYyB1aW50NjRfdCBpZGVudGlmaWVyOworCiAgICAgU3RyaW5n
QnVpbGRlciB1cmxTdHJpbmdCdWlsZGVyOwogICAgIHVybFN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgidXNlci1zY3JpcHQ6Iik7Ci0gICAgdXJsU3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIo
Z2VuZXJhdGVJZGVudGlmaWVyKCkpOworICAgIHVybFN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVy
KCsraWRlbnRpZmllcik7CiAgICAgcmV0dXJuIHsgeyB9LCB1cmxTdHJpbmdCdWlsZGVyLnRvU3Ry
aW5nKCkgfTsKIH0KIAorVXNlclNjcmlwdDo6VXNlclNjcmlwdChXZWJDb3JlOjpVc2VyU2NyaXB0
IHVzZXJTY3JpcHQsIEFQSTo6VXNlckNvbnRlbnRXb3JsZCYgd29ybGQpCisgICAgOiBtX2lkZW50
aWZpZXIoZ2VuZXJhdGVJZGVudGlmaWVyKCkpCisgICAgLCBtX3VzZXJTY3JpcHQodXNlclNjcmlw
dCkKKyAgICAsIG1fd29ybGQod29ybGQpCit7Cit9CisKIAogfSAvLyBuYW1lc3BhY2UgQVBJCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJTY3JpcHQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJTY3JpcHQuaAkocmV2
aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyU2Ny
aXB0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDExICs0MSw5IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgVXNlclNjcmlwdChXVEZNb3ZlKHVzZXJTY3JpcHQpLCB3b3Js
ZCkpOwogICAgIH0KIAotICAgIFVzZXJTY3JpcHQoV2ViQ29yZTo6VXNlclNjcmlwdCB1c2VyU2Ny
aXB0LCBBUEk6OlVzZXJDb250ZW50V29ybGQmIHdvcmxkKQotICAgICAgICA6IG1fdXNlclNjcmlw
dCh1c2VyU2NyaXB0KQotICAgICAgICAsIG1fd29ybGQod29ybGQpCi0gICAgewotICAgIH0KKyAg
ICBVc2VyU2NyaXB0KFdlYkNvcmU6OlVzZXJTY3JpcHQsIEFQSTo6VXNlckNvbnRlbnRXb3JsZCYp
OworCisgICAgdWludDY0X3QgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmll
cjsgfQogCiAgICAgY29uc3QgV2ViQ29yZTo6VXNlclNjcmlwdCYgdXNlclNjcmlwdCgpIGNvbnN0
IHsgcmV0dXJuIG1fdXNlclNjcmlwdDsgfQogICAgIApAQCAtNTMsNiArNTEsNyBAQCBwdWJsaWM6
CiAgICAgY29uc3QgVXNlckNvbnRlbnRXb3JsZCYgdXNlckNvbnRlbnRXb3JsZCgpIGNvbnN0IHsg
cmV0dXJuIG1fd29ybGQ7IH0KICAgICAKIHByaXZhdGU6CisgICAgdWludDY0X3QgbV9pZGVudGlm
aWVyOwogICAgIFdlYkNvcmU6OlVzZXJTY3JpcHQgbV91c2VyU2NyaXB0OwogICAgIFJlZjxVc2Vy
Q29udGVudFdvcmxkPiBtX3dvcmxkOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQVBJVXNlclN0eWxlU2hlZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQVBJVXNlclN0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiAxOTgxNDcpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJTdHlsZVNoZWV0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzksMTEgKzM5LDE5IEBAIHN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZUlk
ZW50aWZpZXIoKQogCiBXZWJDb3JlOjpVUkwgVXNlclN0eWxlU2hlZXQ6OmdlbmVyYXRlVW5pcXVl
VVJMKCkKIHsKKyAgICBzdGF0aWMgdWludDY0X3QgaWRlbnRpZmllcjsKKwogICAgIFN0cmluZ0J1
aWxkZXIgdXJsU3RyaW5nQnVpbGRlcjsKICAgICB1cmxTdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVy
YWwoInVzZXItc3R5bGUtc2hlZXQ6Iik7Ci0gICAgdXJsU3RyaW5nQnVpbGRlci5hcHBlbmROdW1i
ZXIoZ2VuZXJhdGVJZGVudGlmaWVyKCkpOworICAgIHVybFN0cmluZ0J1aWxkZXIuYXBwZW5kTnVt
YmVyKCsraWRlbnRpZmllcik7CiAgICAgcmV0dXJuIHsgeyB9LCB1cmxTdHJpbmdCdWlsZGVyLnRv
U3RyaW5nKCkgfTsKIH0KIAorVXNlclN0eWxlU2hlZXQ6OlVzZXJTdHlsZVNoZWV0KFdlYkNvcmU6
OlVzZXJTdHlsZVNoZWV0IHVzZXJTdHlsZVNoZWV0LCBBUEk6OlVzZXJDb250ZW50V29ybGQmIHdv
cmxkKQorICAgIDogbV9pZGVudGlmaWVyKGdlbmVyYXRlSWRlbnRpZmllcigpKQorICAgICwgbV91
c2VyU3R5bGVTaGVldCh1c2VyU3R5bGVTaGVldCkKKyAgICAsIG1fd29ybGQod29ybGQpCit7Cit9
CiAKIH0gLy8gbmFtZXNwYWNlIEFQSQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9BUElVc2VyU3R5bGVTaGVldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQVBJVXNlclN0eWxlU2hlZXQuaAkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyU3R5bGVTaGVldC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MSwxMSArNDEsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFVzZXJTdHlsZVNoZWV0KFdURk1vdmUodXNlclN0eWxlU2hlZXQpLCB3b3JsZCkpOwogICAgIH0K
IAotICAgIFVzZXJTdHlsZVNoZWV0KFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0IHVzZXJTdHlsZVNo
ZWV0LCBBUEk6OlVzZXJDb250ZW50V29ybGQmIHdvcmxkKQotICAgICAgICA6IG1fdXNlclN0eWxl
U2hlZXQodXNlclN0eWxlU2hlZXQpCi0gICAgICAgICwgbV93b3JsZCh3b3JsZCkKLSAgICB7Ci0g
ICAgfQorICAgIFVzZXJTdHlsZVNoZWV0KFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0LCBBUEk6OlVz
ZXJDb250ZW50V29ybGQmKTsKKworICAgIHVpbnQ2NF90IGlkZW50aWZpZXIoKSBjb25zdCB7IHJl
dHVybiBtX2lkZW50aWZpZXI7IH0KIAogICAgIGNvbnN0IFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0
JiB1c2VyU3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlclN0eWxlU2hlZXQ7IH0KIApA
QCAtNTMsNiArNTEsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVXNlckNvbnRlbnRXb3JsZCYgdXNl
ckNvbnRlbnRXb3JsZCgpIGNvbnN0IHsgcmV0dXJuIG1fd29ybGQ7IH0KIAogcHJpdmF0ZToKKyAg
ICB1aW50NjRfdCBtX2lkZW50aWZpZXI7CiAgICAgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQgbV91
c2VyU3R5bGVTaGVldDsKICAgICBSZWY8VXNlckNvbnRlbnRXb3JsZD4gbV93b3JsZDsKIH07Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJTdHlsZVNoZWV0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tV
c2VyU3R5bGVTaGVldC5oCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0NvY29hL19XS1VzZXJTdHlsZVNoZWV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4
LDExICszOCwxMyBAQCBXS19DTEFTU19BVkFJTEFCTEUoV0tfTUFDX1RCQSwgV0tfSU9TX1RCCiAK
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgY29weSkgTlNTdHJpbmcgKnNvdXJjZTsK
IAorQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU1VSTCAqYmFzZVVSTDsK
KwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBnZXR0ZXI9aXNGb3JNYWluRnJhbWVP
bmx5KSBCT09MIGZvck1haW5GcmFtZU9ubHk7CiAKIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aFNv
dXJjZTooTlNTdHJpbmcgKilzb3VyY2UgZm9yTWFpbkZyYW1lT25seTooQk9PTClmb3JNYWluRnJh
bWVPbmx5OwotCiAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291
cmNlIGZvck1haW5GcmFtZU9ubHk6KEJPT0wpZm9yTWFpbkZyYW1lT25seSBsZWdhY3lXaGl0ZWxp
c3Q6KFdLX0FSUkFZKE5TU3RyaW5nICopICopbGVnYWN5V2hpdGVsaXN0IGxlZ2FjeUJsYWNrbGlz
dDooV0tfQVJSQVkoTlNTdHJpbmcgKikgKilsZWdhY3lCbGFja2xpc3QgdXNlckNvbnRlbnRXb3Js
ZDooX1dLVXNlckNvbnRlbnRXb3JsZCAqKXVzZXJDb250ZW50V29ybGQ7CistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGZvck1haW5GcmFtZU9ubHk6KEJP
T0wpZm9yTWFpbkZyYW1lT25seSBsZWdhY3lXaGl0ZWxpc3Q6KFdLX0FSUkFZKE5TU3RyaW5nICop
ICopbGVnYWN5V2hpdGVsaXN0IGxlZ2FjeUJsYWNrbGlzdDooV0tfQVJSQVkoTlNTdHJpbmcgKikg
KilsZWdhY3lCbGFja2xpc3QgYmFzZVVSTDooTlNVUkwgKiliYXNlVVJMIHVzZXJDb250ZW50V29y
bGQ6KF9XS1VzZXJDb250ZW50V29ybGQgKil1c2VyQ29udGVudFdvcmxkOwogCiBAZW5kCiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlclN0eWxlU2hlZXQu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tV
c2VyU3R5bGVTaGVldC5tbQkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyU3R5bGVTaGVldC5tbQkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsNyBAQAogCiAjaW1wb3J0ICJBUElBcnJheS5oIgogI2ltcG9ydCAiV0tOU0FycmF5
LmgiCisjaW1wb3J0ICJXS05TVVJMRXh0cmFzLmgiCiAjaW1wb3J0ICJXZWJLaXQySW5pdGlhbGl6
ZS5oIgogI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRXb3JsZEludGVybmFsLmgiCiAKQEAgLTYxLDEx
ICs2MiwyOSBAQCAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTb3VyY2U6KE5TU3RyaW5nCiAgICAg
cmV0dXJuIHNlbGY7CiB9CiAKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFNvdXJjZTooTlNTdHJp
bmcgKilzb3VyY2UgZm9yTWFpbkZyYW1lT25seTooQk9PTClmb3JNYWluRnJhbWVPbmx5IGxlZ2Fj
eVdoaXRlbGlzdDooV0tfQVJSQVkoTlNTdHJpbmcgKikgKilsZWdhY3lXaGl0ZWxpc3QgbGVnYWN5
QmxhY2tsaXN0OihXS19BUlJBWShOU1N0cmluZyAqKSAqKWxlZ2FjeUJsYWNrbGlzdCBiYXNlVVJM
OihOU1VSTCAqKWJhc2VVUkwgdXNlckNvbnRlbnRXb3JsZDooX1dLVXNlckNvbnRlbnRXb3JsZCAq
KXVzZXJDb250ZW50V29ybGQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKworICAgIC8vIEZJWE1FOiBJbiB0aGUgQVBJIHRlc3QsIHdlIGNh
biB1c2UgZ2VuZXJhdGVVbmlxdWVVUkwgYmVsb3cgYmVmb3JlIHRoZSBBUEk6Ok9iamVjdCBjb25z
dHJ1Y3RvciBoYXMgZG9uZSB0aGlzLi4uIHdoZXJlIHNob3VsZCB0aGlzIHJlYWxseSBiZT8KKyAg
ICBXZWJLaXQ6OkluaXRpYWxpemVXZWJLaXQyKCk7CisKKyAgICBBUEk6Ok9iamVjdDo6Y29uc3Ry
dWN0SW5XcmFwcGVyPEFQSTo6VXNlclN0eWxlU2hlZXQ+KHNlbGYsIFdlYkNvcmU6OlVzZXJTdHls
ZVNoZWV0IHsgV1RGOjpTdHJpbmcoc291cmNlKSwgeyB7IH0sIFdURjo6U3RyaW5nKFtiYXNlVVJM
IF93ZWJfb3JpZ2luYWxEYXRhQXNXVEZTdHJpbmddKSB9LCBBUEk6OnRvU3RyaW5nVmVjdG9yKGxl
Z2FjeVdoaXRlbGlzdCksIEFQSTo6dG9TdHJpbmdWZWN0b3IobGVnYWN5QmxhY2tsaXN0KSwgZm9y
TWFpbkZyYW1lT25seSA/IFdlYkNvcmU6OkluamVjdEluVG9wRnJhbWVPbmx5IDogV2ViQ29yZTo6
SW5qZWN0SW5BbGxGcmFtZXMsIFdlYkNvcmU6OlVzZXJTdHlsZVVzZXJMZXZlbCB9LCAqdXNlckNv
bnRlbnRXb3JsZC0+X3VzZXJDb250ZW50V29ybGQpOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisK
IC0gKE5TU3RyaW5nICopc291cmNlCiB7CiAgICAgcmV0dXJuIF91c2VyU3R5bGVTaGVldC0+dXNl
clN0eWxlU2hlZXQoKS5zb3VyY2UoKTsKIH0KIAorLSAoTlNVUkwgKiliYXNlVVJMCit7CisgICAg
cmV0dXJuIF91c2VyU3R5bGVTaGVldC0+dXNlclN0eWxlU2hlZXQoKS51cmwoKTsKK30KKwogLSAo
Qk9PTClpc0Zvck1haW5GcmFtZU9ubHkKIHsKICAgICByZXR1cm4gX3VzZXJTdHlsZVNoZWV0LT51
c2VyU3R5bGVTaGVldCgpLmluamVjdGVkRnJhbWVzKCkgPT0gV2ViQ29yZTo6SW5qZWN0SW5Ub3BG
cmFtZU9ubHk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5j
cHAJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Vc2VyQ29u
dGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiV2Vi
UHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIuaCIKKyNp
bmNsdWRlICJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuaCIKICNpbmNsdWRlICJX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlVzZXJDb250
ZW50Q29udHJvbGxlclByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5oPgpAQCAtODAsMTQgKzgxLDE0IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRD
b250cm9sbGVyUHJveHk6OmFkZFAKICAgICAgICAgdXNlckNvbnRlbnRXb3JsZHMuYXBwZW5kKHN0
ZDo6bWFrZV9wYWlyKHdvcmxkLmtleS0+aWRlbnRpZmllcigpLCB3b3JsZC5rZXktPm5hbWUoKSkp
OwogICAgIHdlYlByb2Nlc3NQcm94eS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVz
ZXJDb250ZW50Q29udHJvbGxlcjo6QWRkVXNlckNvbnRlbnRXb3JsZHModXNlckNvbnRlbnRXb3Js
ZHMpLCBtX2lkZW50aWZpZXIpOwogCi0gICAgVmVjdG9yPHN0ZDo6cGFpcjx1aW50NjRfdCwgV2Vi
Q29yZTo6VXNlclNjcmlwdD4+IHVzZXJTY3JpcHRzOworICAgIFZlY3RvcjxXZWJVc2VyU2NyaXB0
RGF0YT4gdXNlclNjcmlwdHM7CiAgICAgZm9yIChjb25zdCBhdXRvJiB1c2VyU2NyaXB0IDogbV91
c2VyU2NyaXB0cy0+ZWxlbWVudHNPZlR5cGU8QVBJOjpVc2VyU2NyaXB0PigpKQotICAgICAgICB1
c2VyU2NyaXB0cy5hcHBlbmQoc3RkOjptYWtlX3BhaXIodXNlclNjcmlwdC0+dXNlckNvbnRlbnRX
b3JsZCgpLmlkZW50aWZpZXIoKSwgdXNlclNjcmlwdC0+dXNlclNjcmlwdCgpKSk7CisgICAgICAg
IHVzZXJTY3JpcHRzLmFwcGVuZCh7IHVzZXJTY3JpcHQtPmlkZW50aWZpZXIoKSwgdXNlclNjcmlw
dC0+dXNlckNvbnRlbnRXb3JsZCgpLmlkZW50aWZpZXIoKSwgdXNlclNjcmlwdC0+dXNlclNjcmlw
dCgpIH0pOwogICAgIHdlYlByb2Nlc3NQcm94eS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6QWRkVXNlclNjcmlwdHModXNlclNjcmlwdHMpLCBt
X2lkZW50aWZpZXIpOwogCi0gICAgVmVjdG9yPHN0ZDo6cGFpcjx1aW50NjRfdCwgV2ViQ29yZTo6
VXNlclN0eWxlU2hlZXQ+PiB1c2VyU3R5bGVTaGVldHM7CisgICAgVmVjdG9yPFdlYlVzZXJTdHls
ZVNoZWV0RGF0YT4gdXNlclN0eWxlU2hlZXRzOwogICAgIGZvciAoY29uc3QgYXV0byYgdXNlclN0
eWxlU2hlZXQgOiBtX3VzZXJTdHlsZVNoZWV0cy0+ZWxlbWVudHNPZlR5cGU8QVBJOjpVc2VyU3R5
bGVTaGVldD4oKSkKLSAgICAgICAgdXNlclN0eWxlU2hlZXRzLmFwcGVuZChzdGQ6Om1ha2VfcGFp
cih1c2VyU3R5bGVTaGVldC0+dXNlckNvbnRlbnRXb3JsZCgpLmlkZW50aWZpZXIoKSwgdXNlclN0
eWxlU2hlZXQtPnVzZXJTdHlsZVNoZWV0KCkpKTsKKyAgICAgICAgdXNlclN0eWxlU2hlZXRzLmFw
cGVuZCh7IHVzZXJTdHlsZVNoZWV0LT5pZGVudGlmaWVyKCksIHVzZXJTdHlsZVNoZWV0LT51c2Vy
Q29udGVudFdvcmxkKCkuaWRlbnRpZmllcigpLCB1c2VyU3R5bGVTaGVldC0+dXNlclN0eWxlU2hl
ZXQoKSB9KTsKICAgICB3ZWJQcm9jZXNzUHJveHkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OkFkZFVzZXJTdHlsZVNoZWV0cyh1c2VyU3R5bGVT
aGVldHMpLCBtX2lkZW50aWZpZXIpOwogCiAgICAgVmVjdG9yPFdlYlNjcmlwdE1lc3NhZ2VIYW5k
bGVySGFuZGxlPiBtZXNzYWdlSGFuZGxlckhhbmRsZXM7CkBAIC0xNjgsNyArMTY5LDcgQEAgdm9p
ZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6YWRkVQogICAgIG1fdXNlclNjcmlwdHMt
PmVsZW1lbnRzKCkuYXBwZW5kKCZ1c2VyU2NyaXB0KTsKIAogICAgIGZvciAoV2ViUHJvY2Vzc1By
b3h5KiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpCi0gICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpBZGRVc2VyU2NyaXB0
cyh7IHN0ZDo6bWFrZV9wYWlyKHdvcmxkLT5pZGVudGlmaWVyKCksIHVzZXJTY3JpcHQudXNlclNj
cmlwdCgpKSB9KSwgbV9pZGVudGlmaWVyKTsKKyAgICAgICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OkFkZFVzZXJTY3JpcHRz
KHsgeyB1c2VyU2NyaXB0LmlkZW50aWZpZXIoKSwgd29ybGQtPmlkZW50aWZpZXIoKSwgdXNlclNj
cmlwdC51c2VyU2NyaXB0KCkgfSB9KSwgbV9pZGVudGlmaWVyKTsKIH0KIAogdm9pZCBXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXJQcm94eTo6cmVtb3ZlVXNlclNjcmlwdChBUEk6OlVzZXJTY3JpcHQm
IHVzZXJTY3JpcHQpCkBAIC0xNzYsNyArMTc3LDcgQEAgdm9pZCBXZWJVc2VyQ29udGVudENvbnRy
b2xsZXJQcm94eTo6cmVtbwogICAgIFJlZjxBUEk6OlVzZXJDb250ZW50V29ybGQ+IHdvcmxkID0g
dXNlclNjcmlwdC51c2VyQ29udGVudFdvcmxkKCk7CiAKICAgICBmb3IgKFdlYlByb2Nlc3NQcm94
eSogcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKQotICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6UmVtb3ZlVXNlclNjcmlw
dCh3b3JsZC0+aWRlbnRpZmllcigpLCB1c2VyU2NyaXB0LnVzZXJTY3JpcHQoKS51cmwoKS5zdHJp
bmcoKSksIG1faWRlbnRpZmllcik7CisgICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpSZW1vdmVVc2VyU2NyaXB0KHdv
cmxkLT5pZGVudGlmaWVyKCksIHVzZXJTY3JpcHQuaWRlbnRpZmllcigpKSwgbV9pZGVudGlmaWVy
KTsKIAogICAgIG1fdXNlclNjcmlwdHMtPmVsZW1lbnRzKCkucmVtb3ZlQWxsKCZ1c2VyU2NyaXB0
KTsKIApAQCAtMjIzLDcgKzIyNCw3IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJv
eHk6OmFkZFUKICAgICBtX3VzZXJTdHlsZVNoZWV0cy0+ZWxlbWVudHMoKS5hcHBlbmQoJnVzZXJT
dHlsZVNoZWV0KTsKIAogICAgIGZvciAoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzIDogbV9wcm9j
ZXNzZXMpCi0gICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyOjpBZGRVc2VyU3R5bGVTaGVldHMoeyBzdGQ6Om1ha2VfcGFp
cih3b3JsZC0+aWRlbnRpZmllcigpLCB1c2VyU3R5bGVTaGVldC51c2VyU3R5bGVTaGVldCgpKSB9
KSwgbV9pZGVudGlmaWVyKTsKKyAgICAgICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OkFkZFVzZXJTdHlsZVNoZWV0cyh7IHsg
dXNlclN0eWxlU2hlZXQuaWRlbnRpZmllcigpLCB3b3JsZC0+aWRlbnRpZmllcigpLCB1c2VyU3R5
bGVTaGVldC51c2VyU3R5bGVTaGVldCgpIH0gfSksIG1faWRlbnRpZmllcik7CiB9CiAKIHZvaWQg
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92ZVVzZXJTdHlsZVNoZWV0KEFQSTo6
VXNlclN0eWxlU2hlZXQmIHVzZXJTdHlsZVNoZWV0KQpAQCAtMjMxLDcgKzIzMiw3IEBAIHZvaWQg
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW8KICAgICBSZWY8QVBJOjpVc2VyQ29u
dGVudFdvcmxkPiB3b3JsZCA9IHVzZXJTdHlsZVNoZWV0LnVzZXJDb250ZW50V29ybGQoKTsKIAog
ICAgIGZvciAoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpCi0gICAgICAg
IHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250
cm9sbGVyOjpSZW1vdmVVc2VyU3R5bGVTaGVldCh3b3JsZC0+aWRlbnRpZmllcigpLCB1c2VyU3R5
bGVTaGVldC51c2VyU3R5bGVTaGVldCgpLnVybCgpLnN0cmluZygpKSwgbV9pZGVudGlmaWVyKTsK
KyAgICAgICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXI6OlJlbW92ZVVzZXJTdHlsZVNoZWV0KHdvcmxkLT5pZGVudGlmaWVyKCks
IHVzZXJTdHlsZVNoZWV0LmlkZW50aWZpZXIoKSksIG1faWRlbnRpZmllcik7CiAKICAgICBtX3Vz
ZXJTdHlsZVNoZWV0cy0+ZWxlbWVudHMoKS5yZW1vdmVBbGwoJnVzZXJTdHlsZVNoZWV0KTsKIApJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQ0LDYgKzEwNDQsOCBAQAog
CQk3QTc5MUVGQTFDN0NGQ0YxMDBDNEM1MkIgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdBNzkxRUY5MUM3Q0ZCMzcwMEM0QzUyQiAvKiBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmVNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQk3QTc5MUVGQjFDN0NG
RDAxMDBDNEM1MkIgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlTWVzc2FnZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBNzkxRUY4MUM3
Q0ZCMTAwMEM0QzUyQiAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmVNZXNzYWdlcy5o
ICovOyB9OwogCQk3QTc5MUVGQzFDN0QwOEM1MDBDNEM1MkIgLyogV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdBOUNEOEMwMUM3Nzk4NDkwMEQ5RjZDNyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUuY3BwICovOyB9OworCQk3QzA2NUYyQjFDOENEOTVGMDBDMkQ5NTAgLyogV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDY1RjI5MUM4Q0Q5NUYwMEMyRDk1MCAvKiBXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuY3BwICovOyB9OworCQk3QzA2NUYyQzFDOENEOTVG
MDBDMkQ5NTAgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzA2NUYyQTFDOENEOTVGMDBD
MkQ5NTAgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmggKi87IH07CiAJCTdD
MTM1QUE4MTczQjBCQ0EwMDU4NkFFMiAvKiBXS1BsdWdpbkluZm9ybWF0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMTM1QUE2MTczQjBCQ0Ew
MDU4NkFFMiAvKiBXS1BsdWdpbkluZm9ybWF0aW9uLmNwcCAqLzsgfTsKIAkJN0MxMzVBQTkxNzNC
MEJDQTAwNTg2QUUyIC8qIFdLUGx1Z2luSW5mb3JtYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMTM1QUE3MTczQjBCQ0EwMDU4NkFFMiAvKiBX
S1BsdWdpbkluZm9ybWF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJN0MxMzVBQUMxNzNCMENGRjAwNTg2QUUyIC8qIFBsdWdpbkluZm9ybWF0
aW9uTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0MxMzVBQUExNzNCMENGRjAwNTg2QUUyIC8qIFBsdWdpbkluZm9ybWF0aW9uTWFjLm1tICovOyB9
OwpAQCAtMzA1Nyw2ICszMDU5LDggQEAKIAkJN0E5Q0Q4QzAxQzc3OTg0OTAwRDlGNkM3IC8qIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3QTlDRDhDMTFDNzc5ODQ5MDBEOUY2QzcgLyogV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3QTlDRDhDMjFDNzc5QUQ2MDBEOUY2QzcgLyogV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJN0MwNjVGMjkxQzhDRDk1RjAwQzJEOTUwIC8qIFdlYlVzZXJDb250ZW50Q29udHJv
bGxlckRhdGFUeXBlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3QzA2NUYyQTFDOENEOTVGMDBDMkQ5NTAgLyogV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyRGF0YVR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlVz
ZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3QzBCQjlBODE4RENERTg5MDAwNkMwODYgLyogV2ViQ29udGVudC1pT1MuZW50aXRsZW1l
bnRzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC54bWw7IHBhdGggPSAiV2ViQ29udGVudC1pT1MuZW50aXRsZW1lbnRzIjsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0MwQkI5QTkxOERDREY1QTAwMDZDMDg2IC8qIE5ldHdvcmstaU9T
LmVudGl0bGVtZW50cyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQueG1sOyBwYXRoID0gIk5ldHdvcmstaU9TLmVudGl0bGVtZW50cyI7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMTM1QUE2MTczQjBCQ0EwMDU4NkFFMiAvKiBXS1Bs
dWdpbkluZm9ybWF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdLUGx1Z2luSW5mb3JtYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NDUxMCw2ICs0NTE0LDggQEAKIAkJCQk4MzYwMzQ5RDFBQ0IzNEQ2MDA2MjY1NDkgLyogV2ViU1FM
aXRlRGF0YWJhc2VUcmFja2VyLmNwcCAqLywKIAkJCQk4MzYwMzQ5RTFBQ0IzNEQ2MDA2MjY1NDkg
LyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyLmggKi8sCiAJCQkJQzAzMzdERDcxMjdBNTFCNjAw
OEZGNEY0IC8qIFdlYlRvdWNoRXZlbnQuY3BwICovLAorCQkJCTdDMDY1RjI5MUM4Q0Q5NUYwMEMy
RDk1MCAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuY3BwICovLAorCQkJCTdD
MDY1RjJBMUM4Q0Q5NUYwMEMyRDk1MCAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlw
ZXMuaCAqLywKIAkJCQlDMDMzN0REMDEyN0EyOTgwMDA4RkY0RjQgLyogV2ViV2hlZWxFdmVudC5j
cHAgKi8sCiAJCQkpOwogCQkJcGF0aCA9IFNoYXJlZDsKQEAgLTgwMDcsNiArODAxMyw3IEBACiAJ
CQkJMkQyOEE0OTcxQUY5NjVBMTAwRjE5MEM5IC8qIFdLVmlld0xheW91dFN0cmF0ZWd5LmggaW4g
SGVhZGVycyAqLywKIAkJCQk1QzE0MjcwMjFDMjNGODRDMDBENDExODMgLyogRG93bmxvYWQuaCBp
biBIZWFkZXJzICovLAogCQkJCUJGQTYxNzlGMTJGMEI5OUQwMDMzRTBDQSAvKiBXS1ZpZXdQcml2
YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzA2NUYyQzFDOENEOTVGMDBDMkQ5NTAgLyogV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNUUx
QUZFOTE2QjIwQjc1MDA2Q0MxRjIgLyogV0tXZWJBcmNoaXZlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDNUUxQUZFQjE2QjIwQjdFMDA2Q0MxRjIgLyogV0tXZWJBcmNoaXZlUmVzb3VyY2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFBQTJFNTY3MThENzc1MDgwMDM4MTRCRCAvKiBXS1dlYlByb2Nlc3NC
dW5kbGVQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKQEAgLTkxNjUsNiArOTE3Miw3IEBACiAJ
CQkJNUMxNDI3MDExQzIzRjg0QzAwRDQxMTgzIC8qIERvd25sb2FkLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUMwMzM3REREMTI3QTUyMUMwMDhGRjRGNCAvKiBXZWJQbGF0Zm9ybVRvdWNoUG9pbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkRBOTQ0QTIxODg0RTRGMDAwRUQ4NkRCIC8qIFdlYlBs
YXRmb3JtVG91Y2hQb2ludElPUy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3QzA2NUYyQjFDOENE
OTVGMDBDMkQ5NTAgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTMxRDU5MjlFMTY2RTA2MDAwMEU2QkYwMiAvKiBXZWJQbHVnSW5DbGll
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1NzQ0RUYxMjYzOEZCMzAwNkYwRjEyIC8qIFdl
YlBvcHVwSXRlbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlEM0I5NDg0NjExRkY0QjY1MDAwMzJC
MzkgLyogV2ViUG9wdXBNZW51LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZS5jcHAJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2
ICs0Nyw3IEBACiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbE1lc3NhZ2VzLmgi
CisjaW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvQVBJQ2FzdC5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0V4Y2VwdGlvbi5o
PgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgpAQCAtNzAsNyArNzEsNiBAQAog
I2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlQb2xpY3kuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Nl
c3Npb25JRC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1VzZXJDb250ZW50Q29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlckdlc3R1
cmVJbmRpY2F0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VzZXJTY3JpcHQuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC00MDcsMzkgKzQwNywzOSBAQCBib29sIElu
amVjdGVkQnVuZGxlOjppc1Byb2Nlc3NpbmdVc2VyR2VzCiB2b2lkIEluamVjdGVkQnVuZGxlOjph
ZGRVc2VyU2NyaXB0KFdlYlBhZ2VHcm91cFByb3h5KiBwYWdlR3JvdXAsIEluamVjdGVkQnVuZGxl
U2NyaXB0V29ybGQqIHNjcmlwdFdvcmxkLCBjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3Ry
aW5nJiB1cmwsIEFQSTo6QXJyYXkqIHdoaXRlbGlzdCwgQVBJOjpBcnJheSogYmxhY2tsaXN0LCBX
ZWJDb3JlOjpVc2VyU2NyaXB0SW5qZWN0aW9uVGltZSBpbmplY3Rpb25UaW1lLCBXZWJDb3JlOjpV
c2VyQ29udGVudEluamVjdGVkRnJhbWVzIGluamVjdGVkRnJhbWVzKQogewogICAgIC8vIHVybCBp
cyBub3QgZnJvbSBVUkw6OnN0cmluZygpLCBpLmUuIGl0IGhhcyBub3QgYWxyZWFkeSBiZWVuIHBh
cnNlZCBieSBVUkwsIHNvIHdlIGhhdmUgdG8gdXNlIHRoZSByZWxhdGl2ZSBVUkwgY29uc3RydWN0
b3IgZm9yIFVSTCBpbnN0ZWFkIG9mIHRoZSBQYXJzZWRVUkxTdHJpbmdUYWcgdmVyc2lvbi4KLSAg
ICBhdXRvIHVzZXJTY3JpcHQgPSBzdGQ6Om1ha2VfdW5pcXVlPFVzZXJTY3JpcHQ+KHNvdXJjZSwg
VVJMKFVSTCgpLCB1cmwpLCB3aGl0ZWxpc3QgPyB3aGl0ZWxpc3QtPnRvU3RyaW5nVmVjdG9yKCkg
OiBWZWN0b3I8U3RyaW5nPigpLCBibGFja2xpc3QgPyBibGFja2xpc3QtPnRvU3RyaW5nVmVjdG9y
KCkgOiBWZWN0b3I8U3RyaW5nPigpLCBpbmplY3Rpb25UaW1lLCBpbmplY3RlZEZyYW1lcyk7Cisg
ICAgVXNlclNjcmlwdCB1c2VyU2NyaXB0eyBzb3VyY2UsIFVSTChVUkwoKSwgdXJsKSwgd2hpdGVs
aXN0ID8gd2hpdGVsaXN0LT50b1N0cmluZ1ZlY3RvcigpIDogVmVjdG9yPFN0cmluZz4oKSwgYmxh
Y2tsaXN0ID8gYmxhY2tsaXN0LT50b1N0cmluZ1ZlY3RvcigpIDogVmVjdG9yPFN0cmluZz4oKSwg
aW5qZWN0aW9uVGltZSwgaW5qZWN0ZWRGcmFtZXMgfTsKIAotICAgIHBhZ2VHcm91cC0+dXNlckNv
bnRlbnRDb250cm9sbGVyKCkuYWRkVXNlclNjcmlwdChzY3JpcHRXb3JsZC0+Y29yZVdvcmxkKCks
IFdURk1vdmUodXNlclNjcmlwdCkpOworICAgIHBhZ2VHcm91cC0+dXNlckNvbnRlbnRDb250cm9s
bGVyKCkuYWRkVXNlclNjcmlwdCgqc2NyaXB0V29ybGQsIFdURk1vdmUodXNlclNjcmlwdCkpOwog
fQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjphZGRVc2VyU3R5bGVTaGVldChXZWJQYWdlR3JvdXBQ
cm94eSogcGFnZUdyb3VwLCBJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkKiBzY3JpcHRXb3JsZCwg
Y29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdXJsLCBBUEk6OkFycmF5KiB3aGl0
ZWxpc3QsIEFQSTo6QXJyYXkqIGJsYWNrbGlzdCwgV2ViQ29yZTo6VXNlckNvbnRlbnRJbmplY3Rl
ZEZyYW1lcyBpbmplY3RlZEZyYW1lcykKIHsKICAgICAvLyB1cmwgaXMgbm90IGZyb20gVVJMOjpz
dHJpbmcoKSwgaS5lLiBpdCBoYXMgbm90IGFscmVhZHkgYmVlbiBwYXJzZWQgYnkgVVJMLCBzbyB3
ZSBoYXZlIHRvIHVzZSB0aGUgcmVsYXRpdmUgVVJMIGNvbnN0cnVjdG9yIGZvciBVUkwgaW5zdGVh
ZCBvZiB0aGUgUGFyc2VkVVJMU3RyaW5nVGFnIHZlcnNpb24uCi0gICAgYXV0byB1c2VyU3R5bGVT
aGVldCA9IHN0ZDo6bWFrZV91bmlxdWU8VXNlclN0eWxlU2hlZXQ+KHNvdXJjZSwgVVJMKFVSTCgp
LCB1cmwpLCB3aGl0ZWxpc3QgPyB3aGl0ZWxpc3QtPnRvU3RyaW5nVmVjdG9yKCkgOiBWZWN0b3I8
U3RyaW5nPigpLCBibGFja2xpc3QgPyBibGFja2xpc3QtPnRvU3RyaW5nVmVjdG9yKCkgOiBWZWN0
b3I8U3RyaW5nPigpLCBpbmplY3RlZEZyYW1lcywgVXNlclN0eWxlVXNlckxldmVsKTsKKyAgICBV
c2VyU3R5bGVTaGVldCB1c2VyU3R5bGVTaGVldHsgc291cmNlLCBVUkwoVVJMKCksIHVybCksIHdo
aXRlbGlzdCA/IHdoaXRlbGlzdC0+dG9TdHJpbmdWZWN0b3IoKSA6IFZlY3RvcjxTdHJpbmc+KCks
IGJsYWNrbGlzdCA/IGJsYWNrbGlzdC0+dG9TdHJpbmdWZWN0b3IoKSA6IFZlY3RvcjxTdHJpbmc+
KCksIGluamVjdGVkRnJhbWVzLCBVc2VyU3R5bGVVc2VyTGV2ZWwgfTsKIAotICAgIHBhZ2VHcm91
cC0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkuYWRkVXNlclN0eWxlU2hlZXQoc2NyaXB0V29ybGQt
PmNvcmVXb3JsZCgpLCBXVEZNb3ZlKHVzZXJTdHlsZVNoZWV0KSwgSW5qZWN0SW5FeGlzdGluZ0Rv
Y3VtZW50cyk7CisgICAgcGFnZUdyb3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIoKS5hZGRVc2Vy
U3R5bGVTaGVldCgqc2NyaXB0V29ybGQsIFdURk1vdmUodXNlclN0eWxlU2hlZXQpKTsKIH0KIAog
dm9pZCBJbmplY3RlZEJ1bmRsZTo6cmVtb3ZlVXNlclNjcmlwdChXZWJQYWdlR3JvdXBQcm94eSog
cGFnZUdyb3VwLCBJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkKiBzY3JpcHRXb3JsZCwgY29uc3Qg
U3RyaW5nJiB1cmwpCiB7CiAgICAgLy8gdXJsIGlzIG5vdCBmcm9tIFVSTDo6c3RyaW5nKCksIGku
ZS4gaXQgaGFzIG5vdCBhbHJlYWR5IGJlZW4gcGFyc2VkIGJ5IFVSTCwgc28gd2UgaGF2ZSB0byB1
c2UgdGhlIHJlbGF0aXZlIFVSTCBjb25zdHJ1Y3RvciBmb3IgVVJMIGluc3RlYWQgb2YgdGhlIFBh
cnNlZFVSTFN0cmluZ1RhZyB2ZXJzaW9uLgotICAgIHBhZ2VHcm91cC0+dXNlckNvbnRlbnRDb250
cm9sbGVyKCkucmVtb3ZlVXNlclNjcmlwdChzY3JpcHRXb3JsZC0+Y29yZVdvcmxkKCksIFVSTChV
UkwoKSwgdXJsKSk7CisgICAgcGFnZUdyb3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIoKS5yZW1v
dmVVc2VyU2NyaXB0V2l0aFVSTCgqc2NyaXB0V29ybGQsIFVSTChVUkwoKSwgdXJsKSk7CiB9CiAK
IHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnJlbW92ZVVzZXJTdHlsZVNoZWV0KFdlYlBhZ2VHcm91cFBy
b3h5KiBwYWdlR3JvdXAsIEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQqIHNjcmlwdFdvcmxkLCBj
b25zdCBTdHJpbmcmIHVybCkKIHsKICAgICAvLyB1cmwgaXMgbm90IGZyb20gVVJMOjpzdHJpbmco
KSwgaS5lLiBpdCBoYXMgbm90IGFscmVhZHkgYmVlbiBwYXJzZWQgYnkgVVJMLCBzbyB3ZSBoYXZl
IHRvIHVzZSB0aGUgcmVsYXRpdmUgVVJMIGNvbnN0cnVjdG9yIGZvciBVUkwgaW5zdGVhZCBvZiB0
aGUgUGFyc2VkVVJMU3RyaW5nVGFnIHZlcnNpb24uCi0gICAgcGFnZUdyb3VwLT51c2VyQ29udGVu
dENvbnRyb2xsZXIoKS5yZW1vdmVVc2VyU3R5bGVTaGVldChzY3JpcHRXb3JsZC0+Y29yZVdvcmxk
KCksIFVSTChVUkwoKSwgdXJsKSk7CisgICAgcGFnZUdyb3VwLT51c2VyQ29udGVudENvbnRyb2xs
ZXIoKS5yZW1vdmVVc2VyU3R5bGVTaGVldFdpdGhVUkwoKnNjcmlwdFdvcmxkLCBVUkwoVVJMKCks
IHVybCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpyZW1vdmVVc2VyU2NyaXB0cyhXZWJQ
YWdlR3JvdXBQcm94eSogcGFnZUdyb3VwLCBJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkKiBzY3Jp
cHRXb3JsZCkKIHsKLSAgICBwYWdlR3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigpLnJlbW92
ZVVzZXJTY3JpcHRzKHNjcmlwdFdvcmxkLT5jb3JlV29ybGQoKSk7CisgICAgcGFnZUdyb3VwLT51
c2VyQ29udGVudENvbnRyb2xsZXIoKS5yZW1vdmVVc2VyU2NyaXB0cygqc2NyaXB0V29ybGQpOwog
fQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpyZW1vdmVVc2VyU3R5bGVTaGVldHMoV2ViUGFnZUdy
b3VwUHJveHkqIHBhZ2VHcm91cCwgSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCogc2NyaXB0V29y
bGQpCiB7Ci0gICAgcGFnZUdyb3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIoKS5yZW1vdmVVc2Vy
U3R5bGVTaGVldHMoc2NyaXB0V29ybGQtPmNvcmVXb3JsZCgpKTsKKyAgICBwYWdlR3JvdXAtPnVz
ZXJDb250ZW50Q29udHJvbGxlcigpLnJlbW92ZVVzZXJTdHlsZVNoZWV0cygqc2NyaXB0V29ybGQp
OwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpyZW1vdmVBbGxVc2VyQ29udGVudChXZWJQYWdl
R3JvdXBQcm94eSogcGFnZUdyb3VwKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9V
c2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyLmNwcAkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9V
c2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9sbGVyTWVzc2Fn
ZXMuaCIKICNpbmNsdWRlICJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1lc3NhZ2VzLmgi
CiAjaW5jbHVkZSA8V2ViQ29yZS9ET01XcmFwcGVyV29ybGQuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1NjcmlwdENvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luRGF0
YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9Vc2VyU3R5bGVTaGVldC5oPgpAQCAtODAsNyArNzksNiBAQCBSZWY8V2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyPiBXZWJVc2VyQ29uCiAKIFdlYlVzZXJDb250ZW50Q29udHJvbGxl
cjo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyKHVpbnQ2NF90IGlkZW50aWZpZXIpCiAgICAgOiBt
X2lkZW50aWZpZXIoaWRlbnRpZmllcikKLSAgICAsIG1fdXNlckNvbnRlbnRDb250cm9sbGVyKFVz
ZXJDb250ZW50Q29udHJvbGxlcjo6Y3JlYXRlKCkpCiB7CiAgICAgV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pZGVudGlmaWVyLCAqdGhpcyk7CiB9CkBAIC05
NCw3ICs5Miw2IEBAIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6fldlYlVzZXJDb250ZW4KICAg
ICB1c2VyQ29udGVudENvbnRyb2xsZXJzKCkucmVtb3ZlKG1faWRlbnRpZmllcik7CiB9CiAKLQog
dm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJDb250ZW50V29ybGRzKGNvbnN0
IFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0X3QsIFN0cmluZz4+JiB3b3JsZHMpCiB7CiAgICAgZm9y
IChhdXRvJiB3b3JsZCA6IHdvcmxkcykgewpAQCAtMTI0LDIwICsxMjEsMjEgQEAgdm9pZCBXZWJV
c2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZQogICAgIH0KIH0KIAotdm9pZCBXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHRzKGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8
dWludDY0X3QsIFdlYkNvcmU6OlVzZXJTY3JpcHQ+PiYgdXNlclNjcmlwdHMpCit2b2lkIFdlYlVz
ZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlclNjcmlwdHMoY29uc3QgVmVjdG9yPFdlYlVzZXJT
Y3JpcHREYXRhPiYgdXNlclNjcmlwdHMpCiB7Ci0gICAgZm9yIChjb25zdCBhdXRvJiB1c2VyU2Ny
aXB0V29ybGRQYWlyIDogdXNlclNjcmlwdHMpIHsKLSAgICAgICAgYXV0byBpdCA9IHdvcmxkTWFw
KCkuZmluZCh1c2VyU2NyaXB0V29ybGRQYWlyLmZpcnN0KTsKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IHVzZXJTY3JpcHREYXRhIDogdXNlclNjcmlwdHMpIHsKKyAgICAgICAgYXV0byBpdCA9IHdvcmxk
TWFwKCkuZmluZCh1c2VyU2NyaXB0RGF0YS53b3JsZElkZW50aWZpZXIpOwogICAgICAgICBpZiAo
aXQgPT0gd29ybGRNYXAoKS5lbmQoKSkgewotICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJUcnlp
bmcgdG8gYWRkIGEgVXNlclNjcmlwdCB0byBhIFVzZXJDb250ZW50V29ybGQgKGlkPSUiIFBSSXU2
NCAiKSB0aGF0IGRvZXMgbm90IGV4aXN0LiIsIHVzZXJTY3JpcHRXb3JsZFBhaXIuZmlyc3QpOwor
ICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJUcnlpbmcgdG8gYWRkIGEgVXNlclNjcmlwdCB0byBh
IFVzZXJDb250ZW50V29ybGQgKGlkPSUiIFBSSXU2NCAiKSB0aGF0IGRvZXMgbm90IGV4aXN0LiIs
IHVzZXJTY3JpcHREYXRhLndvcmxkSWRlbnRpZmllcik7CiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgfQogCi0gICAgICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5hZGRVc2VyU2Ny
aXB0KGl0LT52YWx1ZS5maXJzdC0+Y29yZVdvcmxkKCksIHN0ZDo6bWFrZV91bmlxdWU8V2ViQ29y
ZTo6VXNlclNjcmlwdD4odXNlclNjcmlwdFdvcmxkUGFpci5zZWNvbmQpKTsKKyAgICAgICAgVXNl
clNjcmlwdCBzY3JpcHQgPSB1c2VyU2NyaXB0RGF0YS51c2VyU2NyaXB0OworICAgICAgICBhZGRV
c2VyU2NyaXB0SW50ZXJuYWwoKml0LT52YWx1ZS5maXJzdCwgdXNlclNjcmlwdERhdGEuaWRlbnRp
ZmllciwgV1RGTW92ZShzY3JpcHQpKTsKICAgICB9CiB9CiAKLXZvaWQgV2ViVXNlckNvbnRlbnRD
b250cm9sbGVyOjpyZW1vdmVVc2VyU2NyaXB0KHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiB1cmxTdHJpbmcpCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVt
b3ZlVXNlclNjcmlwdCh1aW50NjRfdCB3b3JsZElkZW50aWZpZXIsIHVpbnQ2NF90IHVzZXJTY3Jp
cHRJZGVudGlmaWVyKQogewogICAgIGF1dG8gaXQgPSB3b3JsZE1hcCgpLmZpbmQod29ybGRJZGVu
dGlmaWVyKTsKICAgICBpZiAoaXQgPT0gd29ybGRNYXAoKS5lbmQoKSkgewpAQCAtMTQ1LDcgKzE0
Myw3IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2UKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5yZW1vdmVVc2Vy
U2NyaXB0KGl0LT52YWx1ZS5maXJzdC0+Y29yZVdvcmxkKCksIFVSTChVUkwoKSwgdXJsU3RyaW5n
KSk7CisgICAgcmVtb3ZlVXNlclNjcmlwdEludGVybmFsKCppdC0+dmFsdWUuZmlyc3QsIHVzZXJT
Y3JpcHRJZGVudGlmaWVyKTsKIH0KIAogdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJl
bW92ZUFsbFVzZXJTY3JpcHRzKGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIHdvcmxkSWRlbnRpZmll
cnMpCkBAIC0xNTcsMjQgKzE1NSwyNSBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6
cmVtb3ZlQWxsCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBtX3Vz
ZXJDb250ZW50Q29udHJvbGxlci0+cmVtb3ZlVXNlclNjcmlwdHMoaXQtPnZhbHVlLmZpcnN0LT5j
b3JlV29ybGQoKSk7CisgICAgICAgIHJlbW92ZVVzZXJTY3JpcHRzKCppdC0+dmFsdWUuZmlyc3Qp
OwogICAgIH0KIH0KIAotdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTdHls
ZVNoZWV0cyhjb25zdCBWZWN0b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBXZWJDb3JlOjpVc2VyU3R5
bGVTaGVldD4+JiB1c2VyU3R5bGVTaGVldHMpCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxl
cjo6YWRkVXNlclN0eWxlU2hlZXRzKGNvbnN0IFZlY3RvcjxXZWJVc2VyU3R5bGVTaGVldERhdGE+
JiB1c2VyU3R5bGVTaGVldHMpCiB7Ci0gICAgZm9yIChjb25zdCBhdXRvJiB1c2VyU3R5bGVTaGVl
dFdvcmxkUGFpciA6IHVzZXJTdHlsZVNoZWV0cykgewotICAgICAgICBhdXRvIGl0ID0gd29ybGRN
YXAoKS5maW5kKHVzZXJTdHlsZVNoZWV0V29ybGRQYWlyLmZpcnN0KTsKKyAgICBmb3IgKGNvbnN0
IGF1dG8mIHVzZXJTdHlsZVNoZWV0RGF0YSA6IHVzZXJTdHlsZVNoZWV0cykgeworICAgICAgICBh
dXRvIGl0ID0gd29ybGRNYXAoKS5maW5kKHVzZXJTdHlsZVNoZWV0RGF0YS53b3JsZElkZW50aWZp
ZXIpOwogICAgICAgICBpZiAoaXQgPT0gd29ybGRNYXAoKS5lbmQoKSkgewotICAgICAgICAgICAg
V1RGTG9nQWx3YXlzKCJUcnlpbmcgdG8gYWRkIGEgVXNlclN0eWxlU2hlZXQgdG8gYSBVc2VyQ29u
dGVudFdvcmxkIChpZD0lIiBQUkl1NjQgIikgdGhhdCBkb2VzIG5vdCBleGlzdC4iLCB1c2VyU3R5
bGVTaGVldFdvcmxkUGFpci5maXJzdCk7CisgICAgICAgICAgICBXVEZMb2dBbHdheXMoIlRyeWlu
ZyB0byBhZGQgYSBVc2VyU3R5bGVTaGVldCB0byBhIFVzZXJDb250ZW50V29ybGQgKGlkPSUiIFBS
SXU2NCAiKSB0aGF0IGRvZXMgbm90IGV4aXN0LiIsIHVzZXJTdHlsZVNoZWV0RGF0YS53b3JsZElk
ZW50aWZpZXIpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLQotICAgICAgICBt
X3VzZXJDb250ZW50Q29udHJvbGxlci0+YWRkVXNlclN0eWxlU2hlZXQoaXQtPnZhbHVlLmZpcnN0
LT5jb3JlV29ybGQoKSwgc3RkOjptYWtlX3VuaXF1ZTxXZWJDb3JlOjpVc2VyU3R5bGVTaGVldD4o
dXNlclN0eWxlU2hlZXRXb3JsZFBhaXIuc2Vjb25kKSwgSW5qZWN0SW5FeGlzdGluZ0RvY3VtZW50
cyk7CisgICAgICAgIAorICAgICAgICBVc2VyU3R5bGVTaGVldCBzaGVldCA9IHVzZXJTdHlsZVNo
ZWV0RGF0YS51c2VyU3R5bGVTaGVldDsKKyAgICAgICAgYWRkVXNlclN0eWxlU2hlZXRJbnRlcm5h
bCgqaXQtPnZhbHVlLmZpcnN0LCB1c2VyU3R5bGVTaGVldERhdGEuaWRlbnRpZmllciwgV1RGTW92
ZShzaGVldCkpOwogICAgIH0KIH0KIAotdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJl
bW92ZVVzZXJTdHlsZVNoZWV0KHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllciwgY29uc3QgU3RyaW5n
JiB1cmxTdHJpbmcpCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclN0
eWxlU2hlZXQodWludDY0X3Qgd29ybGRJZGVudGlmaWVyLCB1aW50NjRfdCB1c2VyU3R5bGVTaGVl
dElkZW50aWZpZXIpCiB7CiAgICAgYXV0byBpdCA9IHdvcmxkTWFwKCkuZmluZCh3b3JsZElkZW50
aWZpZXIpOwogICAgIGlmIChpdCA9PSB3b3JsZE1hcCgpLmVuZCgpKSB7CkBAIC0xODIsNyArMTgx
LDcgQEAgdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPnJlbW92ZVVzZXJT
dHlsZVNoZWV0KGl0LT52YWx1ZS5maXJzdC0+Y29yZVdvcmxkKCksIFVSTChVUkwoKSwgdXJsU3Ry
aW5nKSk7CisgICAgcmVtb3ZlVXNlclN0eWxlU2hlZXRJbnRlcm5hbCgqaXQtPnZhbHVlLmZpcnN0
LCB1c2VyU3R5bGVTaGVldElkZW50aWZpZXIpOwogfQogCiB2b2lkIFdlYlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6cmVtb3ZlQWxsVXNlclN0eWxlU2hlZXRzKGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4m
IHdvcmxkSWRlbnRpZmllcnMpCkBAIC0xOTQsNyArMTkzLDcgQEAgdm9pZCBXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXI6OnJlbW92ZUFsbAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
LSAgICAgICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPnJlbW92ZVVzZXJTdHlsZVNoZWV0cyhp
dC0+dmFsdWUuZmlyc3QtPmNvcmVXb3JsZCgpKTsKKyAgICAgICAgcmVtb3ZlVXNlclN0eWxlU2hl
ZXRzKCppdC0+dmFsdWUuZmlyc3QpOwogICAgIH0KIH0KIApAQCAtMjUzLDcgKzI1Miw5IEBAIHZv
aWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyU2MKICAgICAgICAgUmVmUHRyPFdl
YlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JQcm94eT4gZGVzY3JpcHRvciA9IFdlYlVzZXJN
ZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JQcm94eTo6Y3JlYXRlKHRoaXMsIGhhbmRsZS5uYW1lLCBo
YW5kbGUuaWRlbnRpZmllcik7CiAKICAgICAgICAgbV91c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlw
dG9ycy5hZGQoZGVzY3JpcHRvci0+aWRlbnRpZmllcigpLCBkZXNjcmlwdG9yKTsKLSAgICAgICAg
bV91c2VyQ29udGVudENvbnRyb2xsZXItPmFkZFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3Io
ZGVzY3JpcHRvci0+ZGVzY3JpcHRvcigpKTsKKworICAgICAgICBhdXRvJiBjb3JlRGVzY3JpcHRv
ciA9IGRlc2NyaXB0b3ItPmRlc2NyaXB0b3IoKTsKKyAgICAgICAgbV91c2VyTWVzc2FnZUhhbmRs
ZXJEZXNjcmlwdG9yc01hcC5hZGQoc3RkOjptYWtlX3BhaXIoY29yZURlc2NyaXB0b3IubmFtZSgp
LCAmY29yZURlc2NyaXB0b3Iud29ybGQoKSksICZjb3JlRGVzY3JpcHRvcik7CiAgICAgfQogI2Vs
c2UKICAgICBVTlVTRURfUEFSQU0oc2NyaXB0TWVzc2FnZUhhbmRsZXJzKTsKQEAgLTI2NSw4ICsy
NjYsMTAgQEAgdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZQogI2lmIEVO
QUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCiAgICAgYXV0byBpdCA9IG1fdXNlck1lc3NhZ2VI
YW5kbGVyRGVzY3JpcHRvcnMuZmluZChpZGVudGlmaWVyKTsKICAgICBBU1NFUlQoaXQgIT0gbV91
c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycy5lbmQoKSk7Ci0gICAgCi0gICAgbV91c2VyQ29u
dGVudENvbnRyb2xsZXItPnJlbW92ZVVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IoaXQtPnZh
bHVlLT5kZXNjcmlwdG9yKCkpOworCisgICAgYXV0byYgY29yZURlc2NyaXB0b3IgPSBpdC0+dmFs
dWUtPmRlc2NyaXB0b3IoKTsKKyAgICBtX3VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzTWFw
LnJlbW92ZShzdGQ6Om1ha2VfcGFpcihjb3JlRGVzY3JpcHRvci5uYW1lKCksICZjb3JlRGVzY3Jp
cHRvci53b3JsZCgpKSk7CisKICAgICBtX3VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzLnJl
bW92ZShpdCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShpZGVudGlmaWVyKTsKQEAgLTI3OSwx
OSArMjgyLDE2OCBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlckNvCiAg
ICAgZm9yIChjb25zdCBhdXRvJiB1c2VyQ29udGVudEV4dGVuc2lvbiA6IHVzZXJDb250ZW50RXh0
ZW5zaW9ucykgewogICAgICAgICBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhIGNvbnRl
bnRFeHRlbnNpb25EYXRhID0gdXNlckNvbnRlbnRFeHRlbnNpb24uc2Vjb25kOwogICAgICAgICBS
ZWZQdHI8V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiBjb21waWxlZENvbnRlbnRFeHRlbnNp
b24gPSBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZShXVEZNb3ZlKGNvbnRlbnRF
eHRlbnNpb25EYXRhKSk7Ci0gICAgICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5hZGRVc2Vy
Q29udGVudEV4dGVuc2lvbih1c2VyQ29udGVudEV4dGVuc2lvbi5maXJzdCwgY29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uKTsKKworICAgICAgICBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kLmFkZENv
bnRlbnRFeHRlbnNpb24odXNlckNvbnRlbnRFeHRlbnNpb24uZmlyc3QsIFdURk1vdmUoY29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uKSk7CiAgICAgfQogfQogCiB2b2lkIFdlYlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6cmVtb3ZlVXNlckNvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQog
ewotICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5yZW1vdmVVc2VyQ29udGVudEV4dGVuc2lv
bihuYW1lKTsKKyAgICBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kLnJlbW92ZUNvbnRlbnRFeHRl
bnNpb24obmFtZSk7CiB9CiAKIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVB
bGxVc2VyQ29udGVudEV4dGVuc2lvbnMoKQogewotICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVy
LT5yZW1vdmVBbGxVc2VyQ29udGVudEV4dGVuc2lvbnMoKTsKKyAgICBtX2NvbnRlbnRFeHRlbnNp
b25CYWNrZW5kLnJlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKCk7CiB9CiAjZW5kaWYKIAorCisK
K3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0SW50ZXJuYWwoSW5q
ZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYgd29ybGQsIHVpbnQ2NF90IHVzZXJTY3JpcHRJZGVudGlm
aWVyLCBVc2VyU2NyaXB0JiYgdXNlclNjcmlwdCkKK3sKKyAgICBhdXRvJiBzY3JpcHRzSW5Xb3Js
ZCA9IG1fdXNlclNjcmlwdHMuZW5zdXJlKCZ3b3JsZCwgW10geyByZXR1cm4gVmVjdG9yPHN0ZDo6
cGFpcjx1aW50NjRfdCwgV2ViQ29yZTo6VXNlclNjcmlwdD4+KCk7IH0pLml0ZXJhdG9yLT52YWx1
ZTsKKyAgICBzY3JpcHRzSW5Xb3JsZC5hcHBlbmQoc3RkOjptYWtlX3BhaXIodXNlclNjcmlwdElk
ZW50aWZpZXIsIFdURk1vdmUodXNlclNjcmlwdCkpKTsKK30KKwordm9pZCBXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYgd29y
bGQsIFVzZXJTY3JpcHQmJiB1c2VyU2NyaXB0KQoreworICAgIGFkZFVzZXJTY3JpcHRJbnRlcm5h
bCh3b3JsZCwgMCwgV1RGTW92ZSh1c2VyU2NyaXB0KSk7Cit9CisKK3ZvaWQgV2ViVXNlckNvbnRl
bnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU2NyaXB0V2l0aFVSTChJbmplY3RlZEJ1bmRsZVNjcmlw
dFdvcmxkJiB3b3JsZCwgY29uc3QgVVJMJiB1cmwpCit7CisgICAgYXV0byBpdCA9IG1fdXNlclNj
cmlwdHMuZmluZCgmd29ybGQpOworICAgIGlmIChpdCA9PSBtX3VzZXJTY3JpcHRzLmVuZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiBzY3JpcHRzID0gaXQtPnZhbHVlOworICAgIGZv
ciAoaW50IGkgPSBzY3JpcHRzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGlm
IChzY3JpcHRzW2ldLnNlY29uZC51cmwoKSA9PSB1cmwpCisgICAgICAgICAgICBzY3JpcHRzLnJl
bW92ZShpKTsKKyAgICB9CisKKyAgICBpZiAoc2NyaXB0cy5pc0VtcHR5KCkpCisgICAgICAgIG1f
dXNlclNjcmlwdHMucmVtb3ZlKGl0KTsKK30KKwordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXI6OnJlbW92ZVVzZXJTY3JpcHRJbnRlcm5hbChJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiB3
b3JsZCwgdWludDY0X3QgdXNlclNjcmlwdElkZW50aWZpZXIpCit7CisgICAgYXV0byBpdCA9IG1f
dXNlclNjcmlwdHMuZmluZCgmd29ybGQpOworICAgIGlmIChpdCA9PSBtX3VzZXJTY3JpcHRzLmVu
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiBzY3JpcHRzID0gaXQtPnZhbHVlOwor
ICAgIGZvciAoaW50IGkgPSBzY3JpcHRzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAg
ICAgIGlmIChzY3JpcHRzW2ldLmZpcnN0ID09IHVzZXJTY3JpcHRJZGVudGlmaWVyKQorICAgICAg
ICAgICAgc2NyaXB0cy5yZW1vdmUoaSk7CisgICAgfQorCisgICAgaWYgKHNjcmlwdHMuaXNFbXB0
eSgpKQorICAgICAgICBtX3VzZXJTY3JpcHRzLnJlbW92ZShpdCk7Cit9CisKK3ZvaWQgV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU2NyaXB0cyhJbmplY3RlZEJ1bmRsZVNjcmlw
dFdvcmxkJiB3b3JsZCkKK3sKKyAgICBtX3VzZXJTY3JpcHRzLnJlbW92ZSgmd29ybGQpOworfQor
Cit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlclN0eWxlU2hlZXRJbnRlcm5h
bChJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiB3b3JsZCwgdWludDY0X3QgdXNlclN0eWxlU2hl
ZXRJZGVudGlmaWVyLCBVc2VyU3R5bGVTaGVldCYmIHVzZXJTdHlsZVNoZWV0KQoreworICAgIGF1
dG8mIHN0eWxlU2hlZXRzSW5Xb3JsZCA9IG1fdXNlclN0eWxlU2hlZXRzLmVuc3VyZSgmd29ybGQs
IFtdIHsgcmV0dXJuIFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0X3QsIFdlYkNvcmU6OlVzZXJTdHls
ZVNoZWV0Pj4oKTsgfSkuaXRlcmF0b3ItPnZhbHVlOworICAgIHN0eWxlU2hlZXRzSW5Xb3JsZC5h
cHBlbmQoc3RkOjptYWtlX3BhaXIodXNlclN0eWxlU2hlZXRJZGVudGlmaWVyLCBXVEZNb3ZlKHVz
ZXJTdHlsZVNoZWV0KSkpOworCisgICAgaW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hl
SW5BbGxGcmFtZXNJbkFsbFBhZ2VzKCk7Cit9CisKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyOjphZGRVc2VyU3R5bGVTaGVldChJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiB3b3JsZCwg
VXNlclN0eWxlU2hlZXQmJiB1c2VyU3R5bGVTaGVldCkKK3sKKyAgICBhZGRVc2VyU3R5bGVTaGVl
dEludGVybmFsKHdvcmxkLCAwLCBXVEZNb3ZlKHVzZXJTdHlsZVNoZWV0KSk7Cit9CisKK3ZvaWQg
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU3R5bGVTaGVldFdpdGhVUkwoSW5q
ZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYgd29ybGQsIGNvbnN0IFVSTCYgdXJsKQoreworICAgIGF1
dG8gaXQgPSBtX3VzZXJTdHlsZVNoZWV0cy5maW5kKCZ3b3JsZCk7CisgICAgaWYgKGl0ID09IG1f
dXNlclN0eWxlU2hlZXRzLmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiBzdHls
ZXNoZWV0cyA9IGl0LT52YWx1ZTsKKworICAgIGJvb2wgc2hlZXRzQ2hhbmdlZCA9IGZhbHNlOwor
ICAgIGZvciAoaW50IGkgPSBzdHlsZXNoZWV0cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewor
ICAgICAgICBpZiAoc3R5bGVzaGVldHNbaV0uc2Vjb25kLnVybCgpID09IHVybCkgeworICAgICAg
ICAgICAgc3R5bGVzaGVldHMucmVtb3ZlKGkpOworICAgICAgICAgICAgc2hlZXRzQ2hhbmdlZCA9
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXNoZWV0c0NoYW5nZWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChzdHlsZXNoZWV0cy5pc0VtcHR5KCkpCisgICAgICAgIG1f
dXNlclN0eWxlU2hlZXRzLnJlbW92ZShpdCk7CisKKyAgICBpbnZhbGlkYXRlSW5qZWN0ZWRTdHls
ZVNoZWV0Q2FjaGVJbkFsbEZyYW1lc0luQWxsUGFnZXMoKTsKK30KKwordm9pZCBXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNoZWV0SW50ZXJuYWwoSW5qZWN0ZWRCdW5k
bGVTY3JpcHRXb3JsZCYgd29ybGQsIHVpbnQ2NF90IHVzZXJTdHlsZVNoZWV0SWRlbnRpZmllcikK
K3sKKyAgICBhdXRvIGl0ID0gbV91c2VyU3R5bGVTaGVldHMuZmluZCgmd29ybGQpOworICAgIGlm
IChpdCA9PSBtX3VzZXJTdHlsZVNoZWV0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
YXV0byYgc3R5bGVzaGVldHMgPSBpdC0+dmFsdWU7CisKKyAgICBib29sIHNoZWV0c0NoYW5nZWQg
PSBmYWxzZTsKKyAgICBmb3IgKGludCBpID0gc3R5bGVzaGVldHMuc2l6ZSgpIC0gMTsgaSA+PSAw
OyAtLWkpIHsKKyAgICAgICAgaWYgKHN0eWxlc2hlZXRzW2ldLmZpcnN0ID09IHVzZXJTdHlsZVNo
ZWV0SWRlbnRpZmllcikgeworICAgICAgICAgICAgc3R5bGVzaGVldHMucmVtb3ZlKGkpOworICAg
ICAgICAgICAgc2hlZXRzQ2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoIXNoZWV0c0NoYW5nZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChzdHlsZXNoZWV0
cy5pc0VtcHR5KCkpCisgICAgICAgIG1fdXNlclN0eWxlU2hlZXRzLnJlbW92ZShpdCk7CisKKyAg
ICBpbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lc0luQWxsUGFnZXMo
KTsKK30KKwordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNo
ZWV0cyhJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiB3b3JsZCkKK3sKKyAgICBpZiAoIW1fdXNl
clN0eWxlU2hlZXRzLnJlbW92ZSgmd29ybGQpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnZh
bGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lc0luQWxsUGFnZXMoKTsKK30K
Kwordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZUFsbFVzZXJDb250ZW50KCkK
K3sKKyAgICBtX3VzZXJTY3JpcHRzLmNsZWFyKCk7CisKKyAgICBpZiAoIW1fdXNlclN0eWxlU2hl
ZXRzLmlzRW1wdHkoKSkgeworICAgICAgICBtX3VzZXJTdHlsZVNoZWV0cy5jbGVhcigpOworICAg
ICAgICBpbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lc0luQWxsUGFn
ZXMoKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpmb3JFYWNo
VXNlclNjcmlwdChjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6RE9NV3JhcHBlcldv
cmxkJiwgY29uc3QgV2ViQ29yZTo6VXNlclNjcmlwdCYpPiYgZnVuY3RvcikgY29uc3QKK3sKKyAg
ICBmb3IgKGNvbnN0IGF1dG8mIHdvcmxkQW5kVXNlclNjcmlwdFZlY3RvciA6IG1fdXNlclNjcmlw
dHMpIHsKKyAgICAgICAgYXV0byYgd29ybGQgPSB3b3JsZEFuZFVzZXJTY3JpcHRWZWN0b3Iua2V5
LT5jb3JlV29ybGQoKTsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpZGVudGlmaWVyVXNlclNj
cmlwdFBhaXIgOiB3b3JsZEFuZFVzZXJTY3JpcHRWZWN0b3IudmFsdWUpCisgICAgICAgICAgICBm
dW5jdG9yKHdvcmxkLCBpZGVudGlmaWVyVXNlclNjcmlwdFBhaXIuc2Vjb25kKTsKKyAgICB9Cit9
CisKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpmb3JFYWNoVXNlclN0eWxlU2hlZXQo
Y29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0Jik+
JiBmdW5jdG9yKSBjb25zdAoreworICAgIGZvciAoYXV0byYgc3R5bGVTaGVldFZlY3RvciA6IG1f
dXNlclN0eWxlU2hlZXRzLnZhbHVlcygpKSB7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgaWRl
bnRpZmllclVzZXJTdHlsZVNoZWV0UGFpciA6IHN0eWxlU2hlZXRWZWN0b3IpCisgICAgICAgICAg
ICBmdW5jdG9yKGlkZW50aWZpZXJVc2VyU3R5bGVTaGVldFBhaXIuc2Vjb25kKTsKKyAgICB9Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJv
bGxlci5oCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Vz
ZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw5ICsyOCwxOSBAQAogCiAjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCiAjaW5jbHVkZSAi
V2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1VzZXJDb250ZW50
Q29udHJvbGxlci5oPgorI2luY2x1ZGUgIldlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBl
cy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvVXNlckNvbnRlbnRQcm92aWRlci5oPgogI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworI2lmIEVOQUJM
RShDT05URU5UX0VYVEVOU0lPTlMpCisjaW5jbHVkZSA8V2ViQ29yZS9Db250ZW50RXh0ZW5zaW9u
c0JhY2tlbmQuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgQ29u
dGVudEV4dGVuc2lvbnMgeworY2xhc3MgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOworfQorfQog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtMzgsMzAgKzQ4LDQ2IEBAIGNsYXNzIEluamVjdGVk
QnVuZGxlU2NyaXB0V29ybGQ7CiBjbGFzcyBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRh
OwogY2xhc3MgV2ViVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvclByb3h5OwogCi1jbGFzcyBX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXIgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXI+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyICB7CitjbGFz
cyBXZWJVc2VyQ29udGVudENvbnRyb2xsZXIgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6VXNlckNv
bnRlbnRQcm92aWRlciwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIFJlZjxXZWJVc2VyQ29udGVudENvbnRyb2xsZXI+IGdldE9yQ3JlYXRlKHVpbnQ2
NF90IGlkZW50aWZpZXIpOwogICAgIHZpcnR1YWwgfldlYlVzZXJDb250ZW50Q29udHJvbGxlcigp
OwogCi0gICAgV2ViQ29yZTo6VXNlckNvbnRlbnRDb250cm9sbGVyJiB1c2VyQ29udGVudENvbnRy
b2xsZXIoKSB7IHJldHVybiBtX3VzZXJDb250ZW50Q29udHJvbGxlcjsgfQotCiAgICAgdWludDY0
X3QgaWRlbnRpZmllcigpIHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfSAKIAorICAgIHZvaWQgYWRk
VXNlclNjcmlwdChJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiwgV2ViQ29yZTo6VXNlclNjcmlw
dCYmKTsKKyAgICB2b2lkIHJlbW92ZVVzZXJTY3JpcHRXaXRoVVJMKEluamVjdGVkQnVuZGxlU2Ny
aXB0V29ybGQmLCBjb25zdCBXZWJDb3JlOjpVUkwmKTsKKyAgICB2b2lkIHJlbW92ZVVzZXJTY3Jp
cHRzKEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQmKTsKKyAgICB2b2lkIGFkZFVzZXJTdHlsZVNo
ZWV0KEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQmLCBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCYm
KTsKKyAgICB2b2lkIHJlbW92ZVVzZXJTdHlsZVNoZWV0V2l0aFVSTChJbmplY3RlZEJ1bmRsZVNj
cmlwdFdvcmxkJiwgY29uc3QgV2ViQ29yZTo6VVJMJik7CisgICAgdm9pZCByZW1vdmVVc2VyU3R5
bGVTaGVldHMoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYpOworICAgIHZvaWQgcmVtb3ZlQWxs
VXNlckNvbnRlbnQoKTsKKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBXZWJVc2VyQ29udGVudENv
bnRyb2xsZXIodWludDY0X3QgaWRlbnRpZmllcik7CiAKKyAgICAvLyBXZWJDb3JlOjpVc2VyQ29u
dGVudFByb3ZpZGVyCisgICAgdm9pZCBmb3JFYWNoVXNlclNjcmlwdChjb25zdCBzdGQ6OmZ1bmN0
aW9uPHZvaWQoV2ViQ29yZTo6RE9NV3JhcHBlcldvcmxkJiwgY29uc3QgV2ViQ29yZTo6VXNlclNj
cmlwdCYpPiYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZm9yRWFjaFVzZXJTdHlsZVNoZWV0
KGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCYp
PiYpIGNvbnN0IG92ZXJyaWRlOworI2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCisg
ICAgY29uc3QgV2ViQ29yZTo6VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvck1hcCYgdXNlck1l
c3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3VzZXJN
ZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzTWFwOyB9CisjZW5kaWYKKyNpZiBFTkFCTEUoQ09OVEVO
VF9FWFRFTlNJT05TKQorICAgIFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0
ZW5zaW9uc0JhY2tlbmQmIHVzZXJDb250ZW50RXh0ZW5zaW9uQmFja2VuZCgpIG92ZXJyaWRlIHsg
cmV0dXJuIG1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQ7IH0KKyNlbmRpZgorCiAgICAgLy8gSVBD
OjpNZXNzYWdlUmVjZWl2ZXIuCiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mLCBJUEM6Ok1lc3NhZ2VEZWNvZGVyJikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGFkZFVz
ZXJDb250ZW50V29ybGRzKGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0X3QsIFN0cmluZz4+
Jik7CiAgICAgdm9pZCByZW1vdmVVc2VyQ29udGVudFdvcmxkcyhjb25zdCBWZWN0b3I8dWludDY0
X3Q+Jik7CiAKLSAgICB2b2lkIGFkZFVzZXJTY3JpcHRzKGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8
dWludDY0X3QsIFdlYkNvcmU6OlVzZXJTY3JpcHQ+PiYpOwotICAgIHZvaWQgcmVtb3ZlVXNlclNj
cmlwdCh1aW50NjRfdCB3b3JsZElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKTsK
KyAgICB2b2lkIGFkZFVzZXJTY3JpcHRzKGNvbnN0IFZlY3RvcjxXZWJVc2VyU2NyaXB0RGF0YT4m
KTsKKyAgICB2b2lkIHJlbW92ZVVzZXJTY3JpcHQodWludDY0X3Qgd29ybGRJZGVudGlmaWVyLCB1
aW50NjRfdCB1c2VyU2NyaXB0SWRlbnRpZmllcik7CiAgICAgdm9pZCByZW1vdmVBbGxVc2VyU2Ny
aXB0cyhjb25zdCBWZWN0b3I8dWludDY0X3Q+Jik7CiAKLSAgICB2b2lkIGFkZFVzZXJTdHlsZVNo
ZWV0cyhjb25zdCBWZWN0b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBXZWJDb3JlOjpVc2VyU3R5bGVT
aGVldD4+Jik7Ci0gICAgdm9pZCByZW1vdmVVc2VyU3R5bGVTaGVldCh1aW50NjRfdCB3b3JsZElk
ZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKTsKKyAgICB2b2lkIGFkZFVzZXJTdHls
ZVNoZWV0cyhjb25zdCBWZWN0b3I8V2ViVXNlclN0eWxlU2hlZXREYXRhPiYpOworICAgIHZvaWQg
cmVtb3ZlVXNlclN0eWxlU2hlZXQodWludDY0X3Qgd29ybGRJZGVudGlmaWVyLCB1aW50NjRfdCB1
c2VyU2NyaXB0SWRlbnRpZmllcik7CiAgICAgdm9pZCByZW1vdmVBbGxVc2VyU3R5bGVTaGVldHMo
Y29uc3QgVmVjdG9yPHVpbnQ2NF90PiYpOwogCiAgICAgdm9pZCBhZGRVc2VyU2NyaXB0TWVzc2Fn
ZUhhbmRsZXJzKGNvbnN0IFZlY3RvcjxXZWJTY3JpcHRNZXNzYWdlSGFuZGxlckhhbmRsZT4mKTsK
QEAgLTczLDExICs5OSwyOSBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVtb3ZlQWxsVXNlckNvbnRl
bnRFeHRlbnNpb25zKCk7CiAjZW5kaWYKIAorCisgICAgdm9pZCBhZGRVc2VyU2NyaXB0SW50ZXJu
YWwoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYsIHVpbnQ2NF90IHVzZXJTY3JpcHRJZGVudGlm
aWVyLCBXZWJDb3JlOjpVc2VyU2NyaXB0JiYpOworICAgIHZvaWQgcmVtb3ZlVXNlclNjcmlwdElu
dGVybmFsKEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQmLCB1aW50NjRfdCB1c2VyU2NyaXB0SWRl
bnRpZmllcik7CisgICAgdm9pZCBhZGRVc2VyU3R5bGVTaGVldEludGVybmFsKEluamVjdGVkQnVu
ZGxlU2NyaXB0V29ybGQmLCB1aW50NjRfdCB1c2VyU3R5bGVTaGVldElkZW50aWZpZXIsIFdlYkNv
cmU6OlVzZXJTdHlsZVNoZWV0JiYpOworICAgIHZvaWQgcmVtb3ZlVXNlclN0eWxlU2hlZXRJbnRl
cm5hbChJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiwgdWludDY0X3QgdXNlclN0eWxlU2hlZXRJ
ZGVudGlmaWVyKTsKKworCiAgICAgdWludDY0X3QgbV9pZGVudGlmaWVyOwotICAgIFJlZjxXZWJD
b3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI+IG1fdXNlckNvbnRlbnRDb250cm9sbGVyOwotI2lm
IEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVm
UHRyPFdlYlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JQcm94eT4+IG1fdXNlck1lc3NhZ2VI
YW5kbGVyRGVzY3JpcHRvcnM7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPEluamVjdGVk
QnVuZGxlU2NyaXB0V29ybGQ+LCBWZWN0b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBXZWJDb3JlOjpV
c2VyU2NyaXB0Pj4+IFdvcmxkVG9Vc2VyU2NyaXB0TWFwOworICAgIFdvcmxkVG9Vc2VyU2NyaXB0
TWFwIG1fdXNlclNjcmlwdHM7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPEluamVjdGVk
QnVuZGxlU2NyaXB0V29ybGQ+LCBWZWN0b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBXZWJDb3JlOjpV
c2VyU3R5bGVTaGVldD4+PiBXb3JsZFRvVXNlclN0eWxlU2hlZXRNYXA7CisgICAgV29ybGRUb1Vz
ZXJTdHlsZVNoZWV0TWFwIG1fdXNlclN0eWxlU2hlZXRzOworCisjaWYgRU5BQkxFKFVTRVJfTUVT
U0FHRV9IQU5ETEVSUykKKyAgICBXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9y
TWFwIG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnNNYXA7CiAjZW5kaWYKKyNpZiBFTkFC
TEUoQ09OVEVOVF9FWFRFTlNJT05TKQorICAgIFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpD
b250ZW50RXh0ZW5zaW9uc0JhY2tlbmQgbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZDsKKyNlbmRp
ZgorCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLm1lc3NhZ2VzLmlu
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAxOTgxNDcpCisrKyBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJv
bGxlci5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMjcsMTIgKzI3LDEyIEBAIG1lc3Nh
Z2VzIC0+IFdlYlVzZXJDb250ZW50Q29udHJvbGxlciB7CiAgICAgQWRkVXNlckNvbnRlbnRXb3Js
ZHMoVmVjdG9yPHN0ZDo6cGFpcjx1aW50NjRfdCwgU3RyaW5nPj4gd29ybGRzKTsKICAgICBSZW1v
dmVVc2VyQ29udGVudFdvcmxkcyhWZWN0b3I8dWludDY0X3Q+IHdvcmxkSWRlbnRpZmllcnMpOwog
Ci0gICAgQWRkVXNlclNjcmlwdHMoVmVjdG9yPHN0ZDo6cGFpcjx1aW50NjRfdCwgV2ViQ29yZTo6
VXNlclNjcmlwdD4+IHVzZXJTY3JpcHRzKTsKLSAgICBSZW1vdmVVc2VyU2NyaXB0KHVpbnQ2NF90
IHdvcmxkSWRlbnRpZmllciwgU3RyaW5nIHVybCk7CisgICAgQWRkVXNlclNjcmlwdHMoVmVjdG9y
PHN0cnVjdCBXZWJLaXQ6OldlYlVzZXJTY3JpcHREYXRhPiB1c2VyU2NyaXB0cyk7CisgICAgUmVt
b3ZlVXNlclNjcmlwdCh1aW50NjRfdCB3b3JsZElkZW50aWZpZXIsIHVpbnQ2NF90IGlkZW50aWZp
ZXIpOwogICAgIFJlbW92ZUFsbFVzZXJTY3JpcHRzKFZlY3Rvcjx1aW50NjRfdD4gd29ybGRJZGVu
dGlmaWVycyk7CiAKLSAgICBBZGRVc2VyU3R5bGVTaGVldHMoVmVjdG9yPHN0ZDo6cGFpcjx1aW50
NjRfdCwgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQ+PiB1c2VyU3R5bGVTaGVldHMpOwotICAgIFJl
bW92ZVVzZXJTdHlsZVNoZWV0KHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllciwgU3RyaW5nIHVybCk7
CisgICAgQWRkVXNlclN0eWxlU2hlZXRzKFZlY3RvcjxzdHJ1Y3QgV2ViS2l0OjpXZWJVc2VyU3R5
bGVTaGVldERhdGE+IHVzZXJTdHlsZVNoZWV0cyk7CisgICAgUmVtb3ZlVXNlclN0eWxlU2hlZXQo
dWludDY0X3Qgd29ybGRJZGVudGlmaWVyLCB1aW50NjRfdCBpZGVudGlmaWVyKTsKICAgICBSZW1v
dmVBbGxVc2VyU3R5bGVTaGVldHMoVmVjdG9yPHVpbnQ2NF90PiB3b3JsZElkZW50aWZpZXJzKTsK
IAogICAgIEFkZFVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlcnMoVmVjdG9yPFdlYktpdDo6V2ViU2Ny
aXB0TWVzc2FnZUhhbmRsZXJIYW5kbGU+IHNjcmlwdE1lc3NhZ2VIYW5kbGVycyk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lv
biAxOTgxNDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJFdmVudERpc3Bh
dGNoZXIuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZS5oIgogI2luY2x1ZGUgIkluamVjdGVk
QnVuZGxlQmFja0ZvcndhcmRMaXN0LmgiCisjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVTY3JpcHRX
b3JsZC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXRzY2FwZVBsdWdpbi5o
IgogI2luY2x1ZGUgIk5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5oIgpAQCAt
Mzk3LDcgKzM5OCw3IEBAIFdlYlBhZ2U6OldlYlBhZ2UodWludDY0X3QgcGFnZUlELCBjb25zdCAK
IAogICAgIHBhZ2VDb25maWd1cmF0aW9uLmRhdGFiYXNlUHJvdmlkZXIgPSBXZWJEYXRhYmFzZVBy
b3ZpZGVyOjpnZXRPckNyZWF0ZShtX3BhZ2VHcm91cC0+cGFnZUdyb3VwSUQoKSk7CiAgICAgcGFn
ZUNvbmZpZ3VyYXRpb24uc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyID0gV2ViU3RvcmFnZU5hbWVz
cGFjZVByb3ZpZGVyOjpnZXRPckNyZWF0ZShtX3BhZ2VHcm91cC0+cGFnZUdyb3VwSUQoKSk7Ci0g
ICAgcGFnZUNvbmZpZ3VyYXRpb24udXNlckNvbnRlbnRDb250cm9sbGVyID0gJm1fdXNlckNvbnRl
bnRDb250cm9sbGVyLT51c2VyQ29udGVudENvbnRyb2xsZXIoKTsKKyAgICBwYWdlQ29uZmlndXJh
dGlvbi51c2VyQ29udGVudFByb3ZpZGVyID0gbV91c2VyQ29udGVudENvbnRyb2xsZXIucHRyKCk7
CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24udmlzaXRlZExpbmtTdG9yZSA9IFZpc2l0ZWRMaW5rVGFi
bGVDb250cm9sbGVyOjpnZXRPckNyZWF0ZShwYXJhbWV0ZXJzLnZpc2l0ZWRMaW5rVGFibGVJRCk7
CiAKICNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQpAQCAtNTIyMywyMSArNTIyNCwyMSBAQCB2
b2lkIFdlYlBhZ2U6OmltYWdlT3JNZWRpYURvY3VtZW50U2l6ZUNoCiAKIHZvaWQgV2ViUGFnZTo6
YWRkVXNlclNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZSwgV2ViQ29yZTo6VXNlckNvbnRlbnRJ
bmplY3RlZEZyYW1lcyBpbmplY3RlZEZyYW1lcywgV2ViQ29yZTo6VXNlclNjcmlwdEluamVjdGlv
blRpbWUgaW5qZWN0aW9uVGltZSkKIHsKLSAgICBXZWJDb3JlOjpVc2VyU2NyaXB0IHVzZXJTY3Jp
cHQoc291cmNlLCBXZWJDb3JlOjpibGFua1VSTCgpLCBWZWN0b3I8U3RyaW5nPigpLCBWZWN0b3I8
U3RyaW5nPigpLCBpbmplY3Rpb25UaW1lLCBpbmplY3RlZEZyYW1lcyk7CisgICAgV2ViQ29yZTo6
VXNlclNjcmlwdCB1c2VyU2NyaXB0eyBzb3VyY2UsIFdlYkNvcmU6OmJsYW5rVVJMKCksIFZlY3Rv
cjxTdHJpbmc+KCksIFZlY3RvcjxTdHJpbmc+KCksIGluamVjdGlvblRpbWUsIGluamVjdGVkRnJh
bWVzIH07CiAKLSAgICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+dXNlckNvbnRlbnRDb250cm9s
bGVyKCkuYWRkVXNlclNjcmlwdChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSwgc3RkOjptYWtlX3Vu
aXF1ZTxXZWJDb3JlOjpVc2VyU2NyaXB0Pih1c2VyU2NyaXB0KSk7CisgICAgbV91c2VyQ29udGVu
dENvbnRyb2xsZXItPmFkZFVzZXJTY3JpcHQoKkluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQ6Om5v
cm1hbFdvcmxkKCksIFdURk1vdmUodXNlclNjcmlwdCkpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmFk
ZFVzZXJTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgc291cmNlLCBXZWJDb3JlOjpVc2VyQ29udGVu
dEluamVjdGVkRnJhbWVzIGluamVjdGVkRnJhbWVzKQogewotICAgIFdlYkNvcmU6OlVzZXJTdHls
ZVNoZWV0IHVzZXJTdHlsZVNoZWV0KHNvdXJjZSwgV2ViQ29yZTo6YmxhbmtVUkwoKSwgVmVjdG9y
PFN0cmluZz4oKSwgVmVjdG9yPFN0cmluZz4oKSwgaW5qZWN0ZWRGcmFtZXMsIFVzZXJTdHlsZVVz
ZXJMZXZlbCk7CisgICAgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQgdXNlclN0eWxlU2hlZXR7IHNv
dXJjZSwgV2ViQ29yZTo6YmxhbmtVUkwoKSwgVmVjdG9yPFN0cmluZz4oKSwgVmVjdG9yPFN0cmlu
Zz4oKSwgaW5qZWN0ZWRGcmFtZXMsIFVzZXJTdHlsZVVzZXJMZXZlbCB9OwogCi0gICAgbV91c2Vy
Q29udGVudENvbnRyb2xsZXItPnVzZXJDb250ZW50Q29udHJvbGxlcigpLmFkZFVzZXJTdHlsZVNo
ZWV0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpLCBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6OlVz
ZXJTdHlsZVNoZWV0Pih1c2VyU3R5bGVTaGVldCksIEluamVjdEluRXhpc3RpbmdEb2N1bWVudHMp
OworICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5hZGRVc2VyU3R5bGVTaGVldCgqSW5qZWN0
ZWRCdW5kbGVTY3JpcHRXb3JsZDo6bm9ybWFsV29ybGQoKSwgV1RGTW92ZSh1c2VyU3R5bGVTaGVl
dCkpOwogfQogCiB2b2lkIFdlYlBhZ2U6OnJlbW92ZUFsbFVzZXJDb250ZW50KCkKIHsKLSAgICBt
X3VzZXJDb250ZW50Q29udHJvbGxlci0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkucmVtb3ZlQWxs
VXNlckNvbnRlbnQoKTsKKyAgICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+cmVtb3ZlQWxsVXNl
ckNvbnRlbnQoKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpkaXNwYXRjaERpZExheW91dChXZWJDb3Jl
OjpMYXlvdXRNaWxlc3RvbmVzIG1pbGVzdG9uZXMpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5jcHAJKHJldmlz
aW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
R3JvdXBQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDkgKzU2LDkgQEAgV2ViUGFnZUdy
b3VwUHJveHk6On5XZWJQYWdlR3JvdXBQcm94eSgpCiB7CiB9CiAKLVdlYkNvcmU6OlVzZXJDb250
ZW50Q29udHJvbGxlciYgV2ViUGFnZUdyb3VwUHJveHk6OnVzZXJDb250ZW50Q29udHJvbGxlcigp
CitXZWJVc2VyQ29udGVudENvbnRyb2xsZXImIFdlYlBhZ2VHcm91cFByb3h5Ojp1c2VyQ29udGVu
dENvbnRyb2xsZXIoKQogewotICAgIHJldHVybiBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+dXNl
ckNvbnRlbnRDb250cm9sbGVyKCk7CisgICAgcmV0dXJuIG1fdXNlckNvbnRlbnRDb250cm9sbGVy
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5oCShyZXZpc2lvbiAx
OTgxNDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3Vw
UHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBjbGFzcyBQYWdlR3JvdXA7Ci1jbGFzcyBVc2VyQ29udGVudENvbnRyb2xsZXI7CiB9
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNTAsNyArNDksNyBAQCBwdWJsaWM6CiAgICAgYm9v
bCBpc1Zpc2libGVUb0hpc3RvcnlDbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2RhdGEudmlzaWJs
ZVRvSGlzdG9yeUNsaWVudDsgfQogICAgIFdlYkNvcmU6OlBhZ2VHcm91cCogY29yZVBhZ2VHcm91
cCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZUdyb3VwOyB9CiAKLSAgICBXZWJDb3JlOjpVc2VyQ29u
dGVudENvbnRyb2xsZXImIHVzZXJDb250ZW50Q29udHJvbGxlcigpOworICAgIFdlYlVzZXJDb250
ZW50Q29udHJvbGxlciYgdXNlckNvbnRlbnRDb250cm9sbGVyKCk7CiAKIHByaXZhdGU6CiAgICAg
V2ViUGFnZUdyb3VwUHJveHkoY29uc3QgV2ViUGFnZUdyb3VwRGF0YSYpOwpJbmRleDogU291cmNl
L1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0No
YW5nZUxvZwkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTYtMDMtMTQgIFNhbSBXZWluaWcg
IDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgYSBiYXNlVVJMIHBhcmFtZXRlciB0byBf
V0tVc2VyU3R5bGVTaGVldAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTU1MjE5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dlYlZpZXcgX2NvbW1v
bkluaXRpYWxpemF0aW9uV2l0aEZyYW1lTmFtZTpncm91cE5hbWU6XSk6CisgICAgICAgICgtW1dl
YlZpZXcgaW5pdFNpbXBsZUhUTUxEb2N1bWVudFdpdGhTdHlsZTpmcmFtZTpwcmVmZXJlbmNlczpn
cm91cE5hbWU6XSk6CisgICAgICAgICgtW1dlYlZpZXcgc2V0R3JvdXBOYW1lOl0pOgorICAgICAg
ICBVcGRhdGUgdG8gYWNjb3VudCBmb3IgdGhlIG5hbWUgY2hhbmdlIGZyb20gVXNlckNvbnRlbnRD
b250cm9sbGVyIC0+IFVzZXJDb250ZW50UHJvdmlkZXIuCisKIDIwMTYtMDMtMTMgIEpvc2VwaCBQ
ZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgRU5BQkxFKEVT
Nl9URU1QTEFURV9MSVRFUkFMX1NZTlRBWCkgZ3VhcmRzCkluZGV4OiBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwMDUsNyArMTAwNSw3IEBAIC0g
KHZvaWQpX2NvbW1vbkluaXRpYWxpemF0aW9uV2l0aEZyYW1lTmEKICAgICBwYWdlQ29uZmlndXJh
dGlvbi5wcm9ncmVzc1RyYWNrZXJDbGllbnQgPSBuZXcgV2ViUHJvZ3Jlc3NUcmFja2VyQ2xpZW50
KHNlbGYpOwogICAgIHBhZ2VDb25maWd1cmF0aW9uLmRhdGFiYXNlUHJvdmlkZXIgPSAmV2ViRGF0
YWJhc2VQcm92aWRlcjo6c2luZ2xldG9uKCk7CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24uc3RvcmFn
ZU5hbWVzcGFjZVByb3ZpZGVyID0gJl9wcml2YXRlLT5ncm91cC0+c3RvcmFnZU5hbWVzcGFjZVBy
b3ZpZGVyKCk7Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24udXNlckNvbnRlbnRDb250cm9sbGVyID0g
Jl9wcml2YXRlLT5ncm91cC0+dXNlckNvbnRlbnRDb250cm9sbGVyKCk7CisgICAgcGFnZUNvbmZp
Z3VyYXRpb24udXNlckNvbnRlbnRQcm92aWRlciA9ICZfcHJpdmF0ZS0+Z3JvdXAtPnVzZXJDb250
ZW50Q29udHJvbGxlcigpOwogICAgIHBhZ2VDb25maWd1cmF0aW9uLnZpc2l0ZWRMaW5rU3RvcmUg
PSAmX3ByaXZhdGUtPmdyb3VwLT52aXNpdGVkTGlua1N0b3JlKCk7CiAgICAgX3ByaXZhdGUtPnBh
Z2UgPSBuZXcgUGFnZShwYWdlQ29uZmlndXJhdGlvbik7CiAKQEAgLTEyNTAsNyArMTI1MCw3IEBA
IC0gKGlkKWluaXRTaW1wbGVIVE1MRG9jdW1lbnRXaXRoU3R5bGU6KE4KICAgICBwYWdlQ29uZmln
dXJhdGlvbi5wcm9ncmVzc1RyYWNrZXJDbGllbnQgPSBuZXcgV2ViUHJvZ3Jlc3NUcmFja2VyQ2xp
ZW50KHNlbGYpOwogICAgIHBhZ2VDb25maWd1cmF0aW9uLmRhdGFiYXNlUHJvdmlkZXIgPSAmV2Vi
RGF0YWJhc2VQcm92aWRlcjo6c2luZ2xldG9uKCk7CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24uc3Rv
cmFnZU5hbWVzcGFjZVByb3ZpZGVyID0gJl9wcml2YXRlLT5ncm91cC0+c3RvcmFnZU5hbWVzcGFj
ZVByb3ZpZGVyKCk7Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24udXNlckNvbnRlbnRDb250cm9sbGVy
ID0gJl9wcml2YXRlLT5ncm91cC0+dXNlckNvbnRlbnRDb250cm9sbGVyKCk7CisgICAgcGFnZUNv
bmZpZ3VyYXRpb24udXNlckNvbnRlbnRQcm92aWRlciA9ICZfcHJpdmF0ZS0+Z3JvdXAtPnVzZXJD
b250ZW50Q29udHJvbGxlcigpOwogICAgIHBhZ2VDb25maWd1cmF0aW9uLnZpc2l0ZWRMaW5rU3Rv
cmUgPSAmX3ByaXZhdGUtPmdyb3VwLT52aXNpdGVkTGlua1N0b3JlKCk7CiAKICAgICBfcHJpdmF0
ZS0+cGFnZSA9IG5ldyBQYWdlKHBhZ2VDb25maWd1cmF0aW9uKTsKQEAgLTYyMTcsNyArNjIxNyw3
IEBAIC0gKHZvaWQpc2V0R3JvdXBOYW1lOihOU1N0cmluZyAqKWdyb3VwTmEKICAgICBpZiAoIV9w
cml2YXRlLT5wYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBfcHJpdmF0ZS0+cGFnZS0+c2V0
VXNlckNvbnRlbnRDb250cm9sbGVyKCZfcHJpdmF0ZS0+Z3JvdXAtPnVzZXJDb250ZW50Q29udHJv
bGxlcigpKTsKKyAgICBfcHJpdmF0ZS0+cGFnZS0+c2V0VXNlckNvbnRlbnRQcm92aWRlcihfcHJp
dmF0ZS0+Z3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigpKTsKICAgICBfcHJpdmF0ZS0+cGFn
ZS0+c2V0VmlzaXRlZExpbmtTdG9yZShfcHJpdmF0ZS0+Z3JvdXAtPnZpc2l0ZWRMaW5rU3RvcmUo
KSk7CiAgICAgX3ByaXZhdGUtPnBhZ2UtPnNldEdyb3VwTmFtZShncm91cE5hbWUpOwogfQpJbmRl
eDogU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC93aW4vV2ViVmlldy5jcHAJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJLaXQv
d2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTM5LDcgKzI5MzksNyBAQCBIUkVT
VUxUIFdlYlZpZXc6OmluaXRXaXRoRnJhbWUoUkVDVCBmcmFtCiAgICAgY29uZmlndXJhdGlvbi5k
YXRhYmFzZVByb3ZpZGVyID0gJldlYkRhdGFiYXNlUHJvdmlkZXI6OnNpbmdsZXRvbigpOwogICAg
IGNvbmZpZ3VyYXRpb24uc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyID0gJm1fd2ViVmlld0dyb3Vw
LT5zdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIoKTsKICAgICBjb25maWd1cmF0aW9uLnByb2dyZXNz
VHJhY2tlckNsaWVudCA9IHN0YXRpY19jYXN0PFdlYkZyYW1lTG9hZGVyQ2xpZW50Kj4oY29uZmln
dXJhdGlvbi5sb2FkZXJDbGllbnRGb3JNYWluRnJhbWUpOwotICAgIGNvbmZpZ3VyYXRpb24udXNl
ckNvbnRlbnRDb250cm9sbGVyID0gJm1fd2ViVmlld0dyb3VwLT51c2VyQ29udGVudENvbnRyb2xs
ZXIoKTsKKyAgICBjb25maWd1cmF0aW9uLnVzZXJDb250ZW50UHJvdmlkZXIgPSAmbV93ZWJWaWV3
R3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigpOwogICAgIGNvbmZpZ3VyYXRpb24udmlzaXRl
ZExpbmtTdG9yZSA9ICZtX3dlYlZpZXdHcm91cC0+dmlzaXRlZExpbmtTdG9yZSgpOwogCiAgICAg
bV9wYWdlID0gbmV3IFBhZ2UoY29uZmlndXJhdGlvbik7CkBAIC0zODU5LDcgKzM4NTksNyBAQCBI
UkVTVUxUIFdlYlZpZXc6OnNldEdyb3VwTmFtZShfSW5fIEJTVFIgCiAgICAgaWYgKCFtX3BhZ2Up
CiAgICAgICAgIHJldHVybiBTX09LOwogCi0gICAgbV9wYWdlLT5zZXRVc2VyQ29udGVudENvbnRy
b2xsZXIoJm1fd2ViVmlld0dyb3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIoKSk7CisgICAgbV9w
YWdlLT5zZXRVc2VyQ29udGVudFByb3ZpZGVyKG1fd2ViVmlld0dyb3VwLT51c2VyQ29udGVudENv
bnRyb2xsZXIoKSk7CiAgICAgbV9wYWdlLT5zZXRWaXNpdGVkTGlua1N0b3JlKG1fd2ViVmlld0dy
b3VwLT52aXNpdGVkTGlua1N0b3JlKCkpOwogICAgIG1fcGFnZS0+c2V0R3JvdXBOYW1lKHRvU3Ry
aW5nKGdyb3VwTmFtZSkpOwogICAgIHJldHVybiBTX09LOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274054</attachid>
            <date>2016-03-14 16:56:25 -0700</date>
            <delta_ts>2016-03-14 17:46:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155219-20160314165613.patch</filename>
            <type>text/plain</type>
            <size>117111</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBAQAorMjAxNi0wMy0xNCAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBhIGJhc2VVUkwgcGFyYW1ldGVy
IHRvIF9XS1VzZXJTdHlsZVNoZWV0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTUyMTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAtIE1vdmVzIHRvIGEgbW9kZWwgZm9yIHVzZXIgY29udGVudCB3aGVyZSBp
bnN0ZWFkIG9mIGVhY2ggcGFnZSBoYXZpbmcgYSBXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xs
ZXIKKyAgICAgICAgICBvYmplY3QsIHdlIGhhdmUgYW4gYWJzdHJhY3QgV2ViQ29yZTo6VXNlckNv
bnRlbnRQcm92aWRlciBpbnRlcmZhY2UgdGhhdCBjYW4gYmUgaW1wbGVtZW50ZWQgYXQgdGhlIFdl
YktpdAorICAgICAgICAgIGxldmVsLiBGb3Igbm93LCBsZWdhY3kgV2ViS2l0IGNvbnRpbnVlcyB0
byB1c2UgdGhlIG9sZCBVc2VyQ29udGVudENvbnRyb2xsZXIsIHdoaWNoIGltcGxlbWVudHMgCisg
ICAgICAgICAgV2ViQ29yZTo6VXNlckNvbnRlbnRQcm92aWRlciwgYW5kIFdlYktpdDIgaW1wbGVt
ZW50cyBpdHMgb3duIGltcGxlbWVudGF0aW9uIHNvIGl0IGNhbiBzdG9yZSBhZGRpdGlvbmFsCisg
ICAgICAgICAgc3RhdGUuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgIEFkZCBuZXcgZmlsZXMuCisKKyAgICAgICAgKiBkb20vRXh0ZW5zaW9u
U3R5bGVTaGVldHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uU3R5bGVTaGVldHM6
OnVwZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlKToKKyAgICAgICAgU3dpdGNoIHRvIHVzaW5n
IGZvckVhY2hVc2VyU3R5bGVTaGVldCBvbiB0aGUgVXNlckNvbnRlbnRQcm92aWRlci4KKworICAg
ICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50Ojpsb2FkUmVzb3VyY2UpOgorICAgICAgICBSZW1vdmUgbnVsbCBjaGVjayBu
b3cgdGhhdCB3ZSBhbHdheXMgaGF2ZSBhIFVzZXJDb250ZW50UHJvdmlkZXIuCisKKyAgICAgICAg
KiBsb2FkZXIvRW1wdHlDbGllbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxXaXRoRW1w
dHlDbGllbnRzKToKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgIEFk
ZCBuZXcgRW1wdHlDbGllbnRzLgorCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5
KToKKyAgICAgICAgUmVtb3ZlIG51bGwgY2hlY2sgbm93IHRoYXQgd2UgYWx3YXlzIGhhdmUgYSBV
c2VyQ29udGVudFByb3ZpZGVyLgorCisgICAgICAgICogbG9hZGVyL1BpbmdMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQpOgor
ICAgICAgICBSZW1vdmUgbnVsbCBjaGVjayBub3cgdGhhdCB3ZSBhbHdheXMgaGF2ZSBhIFVzZXJD
b250ZW50UHJvdmlkZXIuCisKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdEludGVybmFs
KToKKyAgICAgICAgUmVtb3ZlIG51bGwgY2hlY2sgbm93IHRoYXQgd2UgYWx3YXlzIGhhdmUgYSBV
c2VyQ29udGVudFByb3ZpZGVyLgorCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpy
ZXF1ZXN0UmVzb3VyY2UpOgorICAgICAgICBSZW1vdmUgbnVsbCBjaGVjayBub3cgdGhhdCB3ZSBh
bHdheXMgaGF2ZSBhIFVzZXJDb250ZW50UHJvdmlkZXIuCisKKyAgICAgICAgKiBwYWdlL0RPTVdp
bmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OnNob3VsZEhhdmVXZWJLaXRO
YW1lc3BhY2VGb3JXb3JsZCk6CisgICAgICAgIFJlbW92ZSBudWxsIGNoZWNrcyBub3cgdGhhdCB3
ZSBhbHdheXMgaGF2ZSBhIFVzZXJDb250ZW50UHJvdmlkZXIsIGFuZCB1c2VyTWVzc2FnZUhhbmRs
ZXJEZXNjcmlwdG9ycworICAgICAgICByZXR1cm5zIGEgcmVmZXJlbmNlLgorCisgICAgICAgIChX
ZWJDb3JlOjpET01XaW5kb3c6Om9wZW4pOgorICAgICAgICBSZW1vdmUgbnVsbCBjaGVjayBub3cg
dGhhdCB3ZSBhbHdheXMgaGF2ZSBhIFVzZXJDb250ZW50UHJvdmlkZXIuCisKKyAgICAgICAgKiBw
YWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjppbmplY3RVc2VyU2NyaXB0
cyk6CisgICAgICAgIFNpbXBsaWZ5IGJ5IGxpZnRpbmcgZG9jdW1lbnQgY2hlY2sgb3V0IG9mIHRo
ZSBtYWluIGxvb3AgYW5kIHVzaW5nIGZvckVhY2hVc2VyU2NyaXB0LgorCisgICAgICAgICogcGFn
ZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OlBhZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZTo6flBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6dXNlckNvbnRlbnRQ
cm92aWRlcik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRVc2VyQ29udGVudFByb3ZpZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldFVzZXJDb250ZW50Q29udHJvbGxlcik6IERl
bGV0ZWQuCisgICAgICAgICogcGFnZS9QYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp1
c2VyQ29udGVudENvbnRyb2xsZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvUGFnZUNvbmZp
Z3VyYXRpb24uaDoKKyAgICAgICAgU3RvcmUgdGhlIFVzZXJDb250ZW50UHJvdmlkZXIgaW4gYSBS
ZWYsIGFuZCByZXF1aXJlIFBhZ2VDb25maWd1cmF0aW9ucyB0byBwcm92aWRlIG9uZS4gVGhpcwor
ICAgICAgICByZW1vdmVzIGEgYnVuY2ggb2YgbnVsbCBjaGVja3MgYW5kIHNpbXBsaWZpZXMgdGhl
IGNvZGUuCisKKyAgICAgICAgKiBwYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6On5Vc2VyQ29udGVudENvbnRyb2xs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRlbnRDb250cm9sbGVyOjpmb3JFYWNoVXNl
clNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OmZvckVh
Y2hVc2VyU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xs
ZXI6OmFkZFVzZXJTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRlbnRDb250cm9s
bGVyOjpyZW1vdmVVc2VyU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlwdHMpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRl
bnRDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpVc2Vy
Q29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNv
cmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclN0eWxlU2hlZXRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlck1lc3NhZ2VIYW5kbGVy
RGVzY3JpcHRvcik6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OnJl
bW92ZVVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IpOgorICAgICAgICAoV2ViQ29yZTo6VXNl
ckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyQ29udGVudEV4dGVuc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxsVXNl
ckNvbnRlbnRFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJv
bGxlcjo6cmVtb3ZlQWxsVXNlckNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRl
bnRDb250cm9sbGVyOjphZGRQYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlVzZXJD
b250ZW50Q29udHJvbGxlcjo6cmVtb3ZlUGFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
Ojpjb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
VXNlckNvbnRlbnRDb250cm9sbGVyOjpwcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9yTG9h
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OmFj
dGlvbnNGb3JSZXNvdXJjZUxvYWQpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvVXNlckNvbnRl
bnRDb250cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6
OnVzZXJTY3JpcHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6dXNlclN0eWxlU2hlZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlVz
ZXJDb250ZW50Q29udHJvbGxlcjo6dXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMpOiBEZWxl
dGVkLgorICAgICAgICBBZGQgaW5oZXJpdGFuY2UgZnJvbSBVc2VyQ29udGVudFByb3ZpZGVyIGFu
ZCBzaW1wbGlmeSB0aGluZ3MgYnkgcmVtb3ZpbmcgdW5pcXVlX3B0cnMKKyAgICAgICAgdGhhdCB3
ZXJlIGhvbGRpbmcgdGhlIG1lbWJlciB2YXJpYWJsZXMuIFRoZXJlIGlzIHVzdWFsbHkgb25seSBv
bmUgVXNlckNvbnRlbnRDb250cm9sbGVyCisgICAgICAgIHNvIGhhdmluZyB0aGVzZSBpbiB1bmlx
dWVfcHRycyBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZS4KKyAgICAgICAgCisgICAgICAgICogcGFn
ZS9Vc2VyQ29udGVudFByb3ZpZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpVc2Vy
Q29udGVudFByb3ZpZGVyOjpVc2VyQ29udGVudFByb3ZpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlVzZXJDb250ZW50UHJvdmlkZXI6On5Vc2VyQ29udGVudFByb3ZpZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlVzZXJDb250ZW50UHJvdmlkZXI6OmFkZFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
VXNlckNvbnRlbnRQcm92aWRlcjo6cmVtb3ZlUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpVc2Vy
Q29udGVudFByb3ZpZGVyOjppbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZy
YW1lc0luQWxsUGFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGVudEV4dGVuc2lvbnNFbmFi
bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50UHJvdmlkZXI6OnByb2Nlc3NDb250
ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50
UHJvdmlkZXI6OmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQpOgorICAgICAgICAqIHBhZ2UvVXNlckNv
bnRlbnRQcm92aWRlci5oOiBBZGRlZC4KKyAgICAgICAgQWRkIGFic3RyYWN0IGNsYXNzIGZvciBw
cm92aWRpbmcgdXNlciBjb250ZW50IGFuZCBhZGQgc29tZSBoZWxwZXJzIG9uIGl0LgorCisgICAg
ICAgICogcGFnZS9Vc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yLmg6CisgICAgICAgIChXZWJD
b3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcjo6Y2xpZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3I6OmludmFsaWRhdGVDbGllbnQpOgor
ICAgICAgICAqIHBhZ2UvVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlOjpoYW5kbGVyKToKKyAgICAg
ICAgU2ltcGxpZnkgbm93IHRoYXQgdXNlckNvbnRlbnRQcm92aWRlcigpIGFuZCB1c2VyTWVzc2Fn
ZUhhbmRsZXJEZXNjcmlwdG9ycygpIGFyZSByZWZlcmVuY2VzLgorCiAyMDE2LTAzLTE0ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgUmVncmVzc2lvbihyMTk3OTgx
KTogSHVnZSByZWdyZXNzaW9uIG9uIE1hYyBQTFQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMjA1Myw2ICsyMDUzLDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHBh
Z2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCiAgICAgcGFnZS9TdXNwZW5kYWJsZVRpbWVyLmNwcAog
ICAgIHBhZ2UvVGV4dEluZGljYXRvci5jcHAKKyAgICBwYWdlL1VzZXJDb250ZW50UHJvdmlkZXIu
Y3BwCiAgICAgcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCiAgICAgcGFnZS9Vc2VyQ29u
dGVudFVSTFBhdHRlcm4uY3BwCiAgICAgcGFnZS9WaXNpdGVkTGlua1N0b3JlLmNwcApJbmRleDog
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQwLDYgKzI3NDAsOCBAQAogCQk3QzNC
Nzk3MjE5MDg3NTdCMDBCNDdBMkQgLyogVXNlck1lc3NhZ2VIYW5kbGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzNCNzk3MDE5MDg3NTdCMDBCNDdB
MkQgLyogVXNlck1lc3NhZ2VIYW5kbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0MzRTUxMEExOERGOEYzNTAwQzExMkY3IC8qIEhUTUxDb252
ZXJ0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdD
M0U1MTA4MThERjhGMzUwMEMxMTJGNyAvKiBIVE1MQ29udmVydGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0MzRTUxMEIxOERGOEYzNTAwQzEx
MkY3IC8qIEhUTUxDb252ZXJ0ZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3QzNFNTEwOTE4REY4RjM1MDBDMTEyRjcgLyogSFRNTENvbnZlcnRlci5t
bSAqLzsgfTsKKwkJN0MzRjAxQzExQzhFNUFCQTAwQUREOTYyIC8qIFVzZXJDb250ZW50UHJvdmlk
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDM0Yw
MUMwMUM4RTVBQjEwMEFERDk2MiAvKiBVc2VyQ29udGVudFByb3ZpZGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0MzRjAxQzIxQzhFNUFDMjAw
QUREOTYyIC8qIFVzZXJDb250ZW50UHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzRjAxQkYxQzhFNUFCMTAwQUREOTYyIC8qIFVzZXJD
b250ZW50UHJvdmlkZXIuY3BwICovOyB9OwogCQk3QzQ4QTZEMDE5MUM5RDY1MDAwMjY2NzQgLyog
V2ViS2l0TmFtZXNwYWNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdDNDhBNkNFMTkxQzlENjUwMDAyNjY3NCAvKiBXZWJLaXROYW1lc3BhY2UuY3Bw
ICovOyB9OwogCQk3QzQ4QTZEMTE5MUM5RDY1MDAwMjY2NzQgLyogV2ViS2l0TmFtZXNwYWNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzQ4QTZDRjE5
MUM5RDY1MDAwMjY2NzQgLyogV2ViS2l0TmFtZXNwYWNlLmggKi87IH07CiAJCTdDNDkwMkEyMThC
ODI1RjgwMDdEOTI5OCAvKiBET01XaGVlbEV2ZW50SW50ZXJuYWwuaCBpbiBDb3B5IEdlbmVyYXRl
ZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1OTg5RENBMEFD
QzhCQkQwMEEwQkM1MSAvKiBET01XaGVlbEV2ZW50SW50ZXJuYWwuaCAqLzsgfTsKQEAgLTEwMzgx
LDYgKzEwMzgzLDggQEAKIAkJN0MzQjc5NzAxOTA4NzU3QjAwQjQ3QTJEIC8qIFVzZXJNZXNzYWdl
SGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyTWVzc2FnZUhh
bmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MzRTUxMDgxOERGOEYzNTAw
QzExMkY3IC8qIEhUTUxDb252ZXJ0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSFRNTENvbnZlcnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzNFNTEw
OTE4REY4RjM1MDBDMTEyRjcgLyogSFRNTENvbnZlcnRlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IEhUTUxDb252ZXJ0ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTdDM0YwMUJGMUM4RTVBQjEwMEFERDk2MiAvKiBVc2VyQ29udGVudFByb3Zp
ZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVzZXJDb250ZW50
UHJvdmlkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzNGMDFDMDFDOEU1
QUIxMDBBREQ5NjIgLyogVXNlckNvbnRlbnRQcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBVc2VyQ29udGVudFByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdDNDE4OUFCMUIwN0MxNzAwMDBGQTc1NyAvKiBHbG9iYWxFdmVudEhhbmRsZXJz
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBHbG9iYWxFdmVudEhhbmRsZXJzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0M0MTg5QUMxQjA3Q0JGMjAwMEZBNzU3IC8qIFdpbmRvd0V2ZW50SGFuZGxlcnMu
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IFdpbmRvd0V2ZW50SGFuZGxlcnMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3QzQ4QTZDRTE5MUM5RDY1MDAwMjY2NzQgLyogV2ViS2l0TmFtZXNwYWNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktpdE5hbWVzcGFjZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODExOSw2ICsxODEyMyw4IEBACiAJCQkJ
MkQ0Rjk2RjIxQTFFQ0MyNDAwOThCRjg4IC8qIFRleHRJbmRpY2F0b3IuaCAqLywKIAkJCQkxQUU3
OUQ0MDE4OERCNjFGMDAyMjM5QzIgLyogVXNlckNvbnRlbnRDb250cm9sbGVyLmNwcCAqLywKIAkJ
CQkxQUU3OUQ0MTE4OERCNjFGMDAyMjM5QzIgLyogVXNlckNvbnRlbnRDb250cm9sbGVyLmggKi8s
CisJCQkJN0MzRjAxQkYxQzhFNUFCMTAwQUREOTYyIC8qIFVzZXJDb250ZW50UHJvdmlkZXIuY3Bw
ICovLAorCQkJCTdDM0YwMUMwMUM4RTVBQjEwMEFERDk2MiAvKiBVc2VyQ29udGVudFByb3ZpZGVy
LmggKi8sCiAJCQkJMDAzRjFGRTkxMUU2QUI0MzAwODI1OEQ5IC8qIFVzZXJDb250ZW50VHlwZXMu
aCAqLywKIAkJCQlCQ0FDRjNCQTEwNzI5MjFBMDBDMEM4QTMgLyogVXNlckNvbnRlbnRVUkxQYXR0
ZXJuLmNwcCAqLywKIAkJCQlCQ0FDRjNCQjEwNzI5MjFBMDBDMEM4QTMgLyogVXNlckNvbnRlbnRV
UkxQYXR0ZXJuLmggKi8sCkBAIC0yODI1Miw2ICsyODI1OCw3IEBACiAJCQkJMDg4QzJGN0ExMjM5
MDA4MTAwM0Q2NUNFIC8qIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwODEwOTNEQzEyNTVGMEU3MDBFRDlEMjkgLyogU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNC
dWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODE2NjhEQTEyNTYwM0Q1MDA2RjI1REUgLyog
U1ZHVGV4dExheW91dEVuZ2luZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0MzRjAxQzExQzhFNUFC
QTAwQUREOTYyIC8qIFVzZXJDb250ZW50UHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4
MEU0OTI2MTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuaCBp
biBIZWFkZXJzICovLAogCQkJCTA4MEU0OTI4MTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5
b3V0RW5naW5lU3BhY2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDhGMEJGQzYxMjU1QzUzQzAw
MDc1MTg1IC8qIFNWR1RleHRNZXRyaWNzLmggaW4gSGVhZGVycyAqLywKQEAgLTMwNDI3LDYgKzMw
NDM0LDcgQEAKIAkJCQk1MTFFRjJEMTE3RjBGREYxMDBFNEZBMTYgLyogSlNJREJPYmplY3RTdG9y
ZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTFFRjJDODE3RjBGRDM1MDBFNEZBMTYg
LyogSlNJREJPcGVuREJSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMUVGMkM5MTdG
MEZEMzUwMEU0RkExNiAvKiBKU0lEQlJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0Mz
RjAxQzIxQzhFNUFDMjAwQUREOTYyIC8qIFVzZXJDb250ZW50UHJvdmlkZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTExRUYyQ0ExN0YwRkQzNTAwRTRGQTE2IC8qIEpTSURCVHJhbnNhY3Rpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTExRUYyQ0IxN0YwRkQzNTAwRTRGQTE2IC8qIEpTSURC
VmVyc2lvbkNoYW5nZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNkM0OUYzMEQ3REJB
MDUwMEZGQTU1OCAvKiBKU0ltYWdlQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRXh0ZW5zaW9uU3R5bGVTaGVldHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FeHRlbnNpb25TdHlsZVNoZWV0cy5jcHAJKHJldmlzaW9u
IDE5ODE0NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FeHRlbnNpb25TdHlsZVNoZWV0cy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsMjQgQEAgdm9pZCBFeHRlbnNpb25TdHlsZVNo
ZWV0czo6dXBkYXRlSW5qZWN0ZQogICAgIGlmICghb3duaW5nUGFnZSkKICAgICAgICAgcmV0dXJu
OwogCisgICAgb3duaW5nUGFnZS0+dXNlckNvbnRlbnRQcm92aWRlcigpLmZvckVhY2hVc2VyU3R5
bGVTaGVldChbJl0oY29uc3QgVXNlclN0eWxlU2hlZXQmIHVzZXJTdHlsZVNoZWV0KSB7CisgICAg
ICAgIGlmICh1c2VyU3R5bGVTaGVldC5pbmplY3RlZEZyYW1lcygpID09IEluamVjdEluVG9wRnJh
bWVPbmx5ICYmIG1fZG9jdW1lbnQub3duZXJFbGVtZW50KCkpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgaWYgKCFVc2VyQ29udGVudFVSTFBhdHRlcm46Om1hdGNoZXNQYXR0ZXJucyht
X2RvY3VtZW50LnVybCgpLCB1c2VyU3R5bGVTaGVldC53aGl0ZWxpc3QoKSwgdXNlclN0eWxlU2hl
ZXQuYmxhY2tsaXN0KCkpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFJlZlB0cjxD
U1NTdHlsZVNoZWV0PiBzaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZUlubGluZShjb25zdF9j
YXN0PERvY3VtZW50Jj4obV9kb2N1bWVudCksIHVzZXJTdHlsZVNoZWV0LnVybCgpKTsKKyAgICAg
ICAgYm9vbCBpc1VzZXJTdHlsZVNoZWV0ID0gdXNlclN0eWxlU2hlZXQubGV2ZWwoKSA9PSBVc2Vy
U3R5bGVVc2VyTGV2ZWw7CisgICAgICAgIGlmIChpc1VzZXJTdHlsZVNoZWV0KQorICAgICAgICAg
ICAgbV9pbmplY3RlZFVzZXJTdHlsZVNoZWV0cy5hcHBlbmQoc2hlZXQpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX2luamVjdGVkQXV0aG9yU3R5bGVTaGVldHMuYXBwZW5kKHNoZWV0KTsK
KworICAgICAgICBzaGVldC0+Y29udGVudHMoKS5zZXRJc1VzZXJTdHlsZVNoZWV0KGlzVXNlclN0
eWxlU2hlZXQpOworICAgICAgICBzaGVldC0+Y29udGVudHMoKS5wYXJzZVN0cmluZyh1c2VyU3R5
bGVTaGVldC5zb3VyY2UoKSk7CisgICAgfSk7CisgICAgCiAgICAgaWYgKCFvd25pbmdQYWdlLT5j
YXB0aW9uVXNlclByZWZlcmVuY2VzU3R5bGVTaGVldCgpLmlzRW1wdHkoKSkgewogICAgICAgICAv
LyBJZGVudGlmeSBvdXIgb3ZlcnJpZGUgc3R5bGUgc2hlZXQgd2l0aCBhIHVuaXF1ZSBVUkwgLSBh
IG5ldyBzY2hlbWUgYW5kIGEgVVVJRC4KICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFVS
TD4gY2FwdGlvbnNTdHlsZVNoZWV0VVJMKFBhcnNlZFVSTFN0cmluZywgInVzZXItY2FwdGlvbnMt
b3ZlcnJpZGU6MDFGNkFGMTItQzNCMC00RjcwLUFGNUUtQTNFMDAyMzREQzIzIik7CkBAIC0xMjcs
MzQgKzE0NSw2IEBAIHZvaWQgRXh0ZW5zaW9uU3R5bGVTaGVldHM6OnVwZGF0ZUluamVjdGUKICAg
ICAgICAgc2hlZXQtPmNvbnRlbnRzKCkuc2V0SXNVc2VyU3R5bGVTaGVldChmYWxzZSk7CiAgICAg
ICAgIHNoZWV0LT5jb250ZW50cygpLnBhcnNlU3RyaW5nKG93bmluZ1BhZ2UtPmNhcHRpb25Vc2Vy
UHJlZmVyZW5jZXNTdHlsZVNoZWV0KCkpOwogICAgIH0KLQotICAgIGNvbnN0IGF1dG8qIHVzZXJD
b250ZW50Q29udHJvbGxlciA9IG93bmluZ1BhZ2UtPnVzZXJDb250ZW50Q29udHJvbGxlcigpOwot
ICAgIGlmICghdXNlckNvbnRlbnRDb250cm9sbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBj
b25zdCBVc2VyU3R5bGVTaGVldE1hcCogdXNlclN0eWxlU2hlZXRzID0gdXNlckNvbnRlbnRDb250
cm9sbGVyLT51c2VyU3R5bGVTaGVldHMoKTsKLSAgICBpZiAoIXVzZXJTdHlsZVNoZWV0cykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChhdXRvJiBzdHlsZVNoZWV0cyA6IHVzZXJTdHlsZVNo
ZWV0cy0+dmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzaGVldCA6ICpzdHls
ZVNoZWV0cykgewotICAgICAgICAgICAgaWYgKHNoZWV0LT5pbmplY3RlZEZyYW1lcygpID09IElu
amVjdEluVG9wRnJhbWVPbmx5ICYmIG1fZG9jdW1lbnQub3duZXJFbGVtZW50KCkpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGlmICghVXNlckNvbnRlbnRVUkxQYXR0
ZXJuOjptYXRjaGVzUGF0dGVybnMobV9kb2N1bWVudC51cmwoKSwgc2hlZXQtPndoaXRlbGlzdCgp
LCBzaGVldC0+YmxhY2tsaXN0KCkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgICAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gZ3JvdXBTaGVldCA9IENTU1N0eWxlU2hlZXQ6
OmNyZWF0ZUlubGluZShjb25zdF9jYXN0PERvY3VtZW50Jj4obV9kb2N1bWVudCksIHNoZWV0LT51
cmwoKSk7Ci0gICAgICAgICAgICBib29sIGlzVXNlclN0eWxlU2hlZXQgPSBzaGVldC0+bGV2ZWwo
KSA9PSBVc2VyU3R5bGVVc2VyTGV2ZWw7Ci0gICAgICAgICAgICBpZiAoaXNVc2VyU3R5bGVTaGVl
dCkKLSAgICAgICAgICAgICAgICBtX2luamVjdGVkVXNlclN0eWxlU2hlZXRzLmFwcGVuZChncm91
cFNoZWV0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2luamVjdGVkQXV0
aG9yU3R5bGVTaGVldHMuYXBwZW5kKGdyb3VwU2hlZXQpOwotCi0gICAgICAgICAgICBncm91cFNo
ZWV0LT5jb250ZW50cygpLnNldElzVXNlclN0eWxlU2hlZXQoaXNVc2VyU3R5bGVTaGVldCk7Ci0g
ICAgICAgICAgICBncm91cFNoZWV0LT5jb250ZW50cygpLnBhcnNlU3RyaW5nKHNoZWV0LT5zb3Vy
Y2UoKSk7Ci0gICAgICAgIH0KLSAgICB9CiB9CiAKIHZvaWQgRXh0ZW5zaW9uU3R5bGVTaGVldHM6
OmludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNTgs
NyArMTI1OCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bG9hZFJlc291cmNlKGNvbnMKICAg
ICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCh1cmwpOwogICAgIERvY3VtZW50TG9hZGVyKiBkb2N1
bWVudExvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpOwogCi0gICAgaWYg
KHBhZ2UtPnVzZXJDb250ZW50Q29udHJvbGxlcigpICYmIGRvY3VtZW50TG9hZGVyICYmIHBhZ2Ut
PnVzZXJDb250ZW50Q29udHJvbGxlcigpLT5wcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9y
TG9hZChyZXF1ZXN0LCBSZXNvdXJjZVR5cGU6Ok1lZGlhLCAqZG9jdW1lbnRMb2FkZXIpID09IENv
bnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzOjpCbG9ja2VkKSB7CisgICAgaWYgKGRvY3Vt
ZW50TG9hZGVyICYmIHBhZ2UtPnVzZXJDb250ZW50UHJvdmlkZXIoKS5wcm9jZXNzQ29udGVudEV4
dGVuc2lvblJ1bGVzRm9yTG9hZChyZXF1ZXN0LCBSZXNvdXJjZVR5cGU6Ok1lZGlhLCAqZG9jdW1l
bnRMb2FkZXIpID09IENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzOjpCbG9ja2VkKSB7
CiAgICAgICAgIHJlcXVlc3QgPSB7IH07CiAgICAgICAgIG1lZGlhTG9hZGluZ0ZhaWxlZChNZWRp
YVBsYXllcjo6Rm9ybWF0RXJyb3IpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcAkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQx
LDcgQEAKICNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgogI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3Bh
Y2UuaCIKICNpbmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuaCIKKyNpbmNsdWRlICJV
c2VyQ29udGVudFByb3ZpZGVyLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAK
ICNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQpAQCAtOTUsNyArOTYsMTggQEAgY2xhc3MgRW1w
dHlTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIgZmluYQogICAgIH0KIH07CiAKLWNsYXNzIEVtcHR5
VmlzaXRlZExpbmtTdG9yZSA6IHB1YmxpYyBWaXNpdGVkTGlua1N0b3JlIHsKK2NsYXNzIEVtcHR5
VXNlckNvbnRlbnRQcm92aWRlciBmaW5hbCA6IHB1YmxpYyBVc2VyQ29udGVudFByb3ZpZGVyIHsK
KyAgICB2b2lkIGZvckVhY2hVc2VyU2NyaXB0KGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChET01X
cmFwcGVyV29ybGQmLCBjb25zdCBVc2VyU2NyaXB0Jik+JikgY29uc3Qgb3ZlcnJpZGUgeyB9Cisg
ICAgdm9pZCBmb3JFYWNoVXNlclN0eWxlU2hlZXQoY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkKGNv
bnN0IFVzZXJTdHlsZVNoZWV0Jik+JikgY29uc3Qgb3ZlcnJpZGUgeyB9CisjaWYgRU5BQkxFKFVT
RVJfTUVTU0FHRV9IQU5ETEVSUykKKyAgICBjb25zdCBVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlw
dG9yTWFwJiB1c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycygpIGNvbnN0IG92ZXJyaWRlIHsg
c3RhdGljIE5ldmVyRGVzdHJveWVkPFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JNYXA+IG1h
cDsgcmV0dXJuIG1hcC5nZXQoKTsgfQorI2VuZGlmCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5T
SU9OUykKKyAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kJiB1
c2VyQ29udGVudEV4dGVuc2lvbkJhY2tlbmQoKSBvdmVycmlkZSB7IHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kPiBiYWNrZW5k
OyByZXR1cm4gYmFja2VuZC5nZXQoKTsgfTsKKyNlbmRpZgorfTsKKworY2xhc3MgRW1wdHlWaXNp
dGVkTGlua1N0b3JlIGZpbmFsIDogcHVibGljIFZpc2l0ZWRMaW5rU3RvcmUgewogICAgIGJvb2wg
aXNMaW5rVmlzaXRlZChQYWdlJiwgTGlua0hhc2gsIGNvbnN0IFVSTCYsIGNvbnN0IEF0b21pY1N0
cmluZyYpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdm9pZCBhZGRWaXNpdGVkTGlu
ayhQYWdlJiwgTGlua0hhc2gpIG92ZXJyaWRlIHsgfQogfTsKQEAgLTEzMiw2ICsxNDQsNyBAQCB2
b2lkIGZpbGxXaXRoRW1wdHlDbGllbnRzKFBhZ2VDb25maWd1cmF0CiAKICAgICBwYWdlQ29uZmln
dXJhdGlvbi5kYXRhYmFzZVByb3ZpZGVyID0gYWRvcHRSZWYobmV3IEVtcHR5RGF0YWJhc2VQcm92
aWRlcik7CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24uc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyID0g
YWRvcHRSZWYobmV3IEVtcHR5U3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyKTsKKyAgICBwYWdlQ29u
ZmlndXJhdGlvbi51c2VyQ29udGVudFByb3ZpZGVyID0gYWRvcHRSZWYobmV3IEVtcHR5VXNlckNv
bnRlbnRQcm92aWRlcik7CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24udmlzaXRlZExpbmtTdG9yZSA9
IGFkb3B0UmVmKG5ldyBFbXB0eVZpc2l0ZWRMaW5rU3RvcmUpOwogCiAjaWYgVVNFKEFQUExFX0lO
VEVSTkFMX1NESykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHJldmlz
aW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgIkRpYWdub3N0aWNMb2dnaW5n
Q2xpZW50LmgiCiAjaW5jbHVkZSAiRHJhZ0NsaWVudC5oIgogI2luY2x1ZGUgIkVkaXRvckNsaWVu
dC5oIgotI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCiAjaW5jbHVkZSAiRm9jdXNEaXJlY3Rpb24uaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNs
aWVudC5oIgpAQCAtNDQsOSArNDMsMTggQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAi
UHJvZ3Jlc3NUcmFja2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgorI2lu
Y2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiVmlzaXRlZExpbmtTdG9yZS5o
IgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KIAorI2lmIEVOQUJMRShVU0VSX01F
U1NBR0VfSEFORExFUlMpCisjaW5jbHVkZSAiVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvci5o
IgorI2VuZGlmCisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorI2luY2x1ZGUgIkNv
bXBpbGVkQ29udGVudEV4dGVuc2lvbi5oIgorI2VuZGlmCisKIC8qCiAgVGhpcyBmaWxlIGhvbGRz
IGVtcHR5IENsaWVudCBzdHVicyBmb3IgdXNlIGJ5IFdlYkNvcmUuCiAgVmlld2xlc3MgZWxlbWVu
dCBuZWVkcyB0byBjcmVhdGUgYSBkdW1teSBQYWdlLT5GcmFtZS0+RnJhbWVWaWV3IHRyZWUgZm9y
IHVzZSBpbiBwYXJzaW5nIG9yIGV4ZWN1dGluZyBKYXZhU2NyaXB0LgpJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzMwLDEzICsy
NzMwLDExIEBAIHVuc2lnbmVkIGxvbmcgRnJhbWVMb2FkZXI6OmxvYWRSZXNvdXJjZVMKICNpZiBF
TkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAgIGlmIChlcnJvci5pc051bGwoKSkgewogICAg
ICAgICBpZiAoYXV0byogcGFnZSA9IG1fZnJhbWUucGFnZSgpKSB7Ci0gICAgICAgICAgICBpZiAo
YXV0byogY29udHJvbGxlciA9IHBhZ2UtPnVzZXJDb250ZW50Q29udHJvbGxlcigpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKG1fZG9jdW1lbnRMb2FkZXIgJiYgY29udHJvbGxlci0+cHJvY2Vzc0Nv
bnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQobmV3UmVxdWVzdCwgUmVzb3VyY2VUeXBlOjpSYXcs
ICptX2RvY3VtZW50TG9hZGVyKSA9PSBDb250ZW50RXh0ZW5zaW9uczo6QmxvY2tlZFN0YXR1czo6
QmxvY2tlZCkgewotICAgICAgICAgICAgICAgICAgICBuZXdSZXF1ZXN0ID0geyB9OwotICAgICAg
ICAgICAgICAgICAgICBlcnJvciA9IFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRl
cm5hbCwgMCwgaW5pdGlhbFJlcXVlc3QudXJsKCksIGVtcHR5U3RyaW5nKCkpOwotICAgICAgICAg
ICAgICAgICAgICByZXNwb25zZSA9IHsgfTsKLSAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG51
bGxwdHI7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fZG9jdW1lbnRMb2Fk
ZXIgJiYgcGFnZS0+dXNlckNvbnRlbnRQcm92aWRlcigpLnByb2Nlc3NDb250ZW50RXh0ZW5zaW9u
UnVsZXNGb3JMb2FkKG5ld1JlcXVlc3QsIFJlc291cmNlVHlwZTo6UmF3LCAqbV9kb2N1bWVudExv
YWRlcikgPT0gQ29udGVudEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXM6OkJsb2NrZWQpIHsKKyAg
ICAgICAgICAgICAgICBuZXdSZXF1ZXN0ID0geyB9OworICAgICAgICAgICAgICAgIGVycm9yID0g
UmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbldlYktpdEludGVybmFsLCAwLCBpbml0aWFsUmVxdWVz
dC51cmwoKSwgZW1wdHlTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSB7IH07
CisgICAgICAgICAgICAgICAgZGF0YSA9IG51bGxwdHI7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUGluZ0xvYWRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1BpbmdMb2FkZXIuY3BwCShyZXZpc2lv
biAxOTgxNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUGluZ0xvYWRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU5LDEwICs1OSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0YXRpYyBD
b250ZW50RXh0ZW5zaW9uczo6QmxvY2tlZFN0YXR1cyBwcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1
bGVzRm9yTG9hZChjb25zdCBGcmFtZSYgZnJhbWUsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
UmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSkKIHsKICAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGRv
Y3VtZW50TG9hZGVyID0gZnJhbWUubG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkgewotICAgICAg
ICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLnBhZ2UoKSkgewotICAgICAgICAgICAgaWYgKFVzZXJD
b250ZW50Q29udHJvbGxlciogY29udHJvbGxlciA9IHBhZ2UtPnVzZXJDb250ZW50Q29udHJvbGxl
cigpKQotICAgICAgICAgICAgICAgIHJldHVybiBjb250cm9sbGVyLT5wcm9jZXNzQ29udGVudEV4
dGVuc2lvblJ1bGVzRm9yTG9hZChyZXF1ZXN0LCByZXNvdXJjZVR5cGUsICpkb2N1bWVudExvYWRl
cik7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS5wYWdlKCkpCisg
ICAgICAgICAgICByZXR1cm4gcGFnZS0+dXNlckNvbnRlbnRQcm92aWRlcigpLnByb2Nlc3NDb250
ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKHJlcXVlc3QsIHJlc291cmNlVHlwZSwgKmRvY3VtZW50
TG9hZGVyKTsKICAgICB9CiAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3Rh
dHVzOjpOb3RCbG9ja2VkOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VM
b2FkZXIuY3BwCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVz
b3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDYsOCArMzQ2LDcgQEAgdm9pZCBS
ZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0SW50ZQogICAgIGlmIChmcmFtZUxvYWRlcigp
KSB7CiAgICAgICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZUxvYWRlcigpLT5mcmFtZSgpLnBhZ2UoKTsK
ICAgICAgICAgaWYgKHBhZ2UgJiYgbV9kb2N1bWVudExvYWRlcikgewotICAgICAgICAgICAgYXV0
byogdXNlckNvbnRlbnRDb250cm9sbGVyID0gcGFnZS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCk7
Ci0gICAgICAgICAgICBpZiAodXNlckNvbnRlbnRDb250cm9sbGVyICYmIHVzZXJDb250ZW50Q29u
dHJvbGxlci0+cHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQocmVxdWVzdCwgbV9y
ZXNvdXJjZVR5cGUsICptX2RvY3VtZW50TG9hZGVyKSA9PSBDb250ZW50RXh0ZW5zaW9uczo6Qmxv
Y2tlZFN0YXR1czo6QmxvY2tlZCkKKyAgICAgICAgICAgIGlmIChwYWdlLT51c2VyQ29udGVudFBy
b3ZpZGVyKCkucHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQocmVxdWVzdCwgbV9y
ZXNvdXJjZVR5cGUsICptX2RvY3VtZW50TG9hZGVyKSA9PSBDb250ZW50RXh0ZW5zaW9uczo6Qmxv
Y2tlZFN0YXR1czo6QmxvY2tlZCkKICAgICAgICAgICAgICAgICByZXF1ZXN0ID0geyB9OwogICAg
ICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJl
c291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NDIsOCArNTQyLDggQEAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3Vy
Y2U+IENhYwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogI2lmIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCi0gICAgaWYgKGZyYW1lKCkgJiYgZnJhbWUoKS0+bWFpbkZyYW1lKCkucGFnZSgp
ICYmIGZyYW1lKCktPm1haW5GcmFtZSgpLnBhZ2UoKS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkg
JiYgbV9kb2N1bWVudExvYWRlcikgewotICAgICAgICBpZiAoZnJhbWUoKS0+bWFpbkZyYW1lKCku
cGFnZSgpLT51c2VyQ29udGVudENvbnRyb2xsZXIoKS0+cHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25S
dWxlc0ZvckxvYWQocmVxdWVzdC5tdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCksIHRvUmVzb3VyY2VU
eXBlKHR5cGUpLCAqbV9kb2N1bWVudExvYWRlcikgPT0gQ29udGVudEV4dGVuc2lvbnM6OkJsb2Nr
ZWRTdGF0dXM6OkJsb2NrZWQpIHsKKyAgICBpZiAoZnJhbWUoKSAmJiBmcmFtZSgpLT5tYWluRnJh
bWUoKS5wYWdlKCkgJiYgbV9kb2N1bWVudExvYWRlcikgeworICAgICAgICBpZiAoZnJhbWUoKS0+
bWFpbkZyYW1lKCkucGFnZSgpLT51c2VyQ29udGVudFByb3ZpZGVyKCkucHJvY2Vzc0NvbnRlbnRF
eHRlbnNpb25SdWxlc0ZvckxvYWQocmVxdWVzdC5tdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCksIHRv
UmVzb3VyY2VUeXBlKHR5cGUpLCAqbV9kb2N1bWVudExvYWRlcikgPT0gQ29udGVudEV4dGVuc2lv
bnM6OkJsb2NrZWRTdGF0dXM6OkJsb2NrZWQpIHsKICAgICAgICAgICAgIGlmICh0eXBlID09IENh
Y2hlZFJlc291cmNlOjpUeXBlOjpNYWluUmVzb3VyY2UpIHsKICAgICAgICAgICAgICAgICBhdXRv
IHJlc291cmNlID0gY3JlYXRlUmVzb3VyY2UodHlwZSwgcmVxdWVzdC5tdXRhYmxlUmVzb3VyY2VS
ZXF1ZXN0KCksIHJlcXVlc3QuY2hhcnNldCgpLCBzZXNzaW9uSUQoKSk7CiAgICAgICAgICAgICAg
ICAgQVNTRVJUKHJlc291cmNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHJl
dmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzYxLDE1ICs3NjEsNyBAQCBib29sIERPTVdpbmRvdzo6c2hvdWxkSGF2
ZVdlYktpdE5hbWVzcGFjCiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBhdXRvKiB1c2VyQ29udGVudENvbnRyb2xsZXIgPSBwYWdlLT51c2VyQ29udGVudENvbnRy
b2xsZXIoKTsKLSAgICBpZiAoIXVzZXJDb250ZW50Q29udHJvbGxlcikKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgYXV0byogZGVzY3JpcHRvck1hcCA9IHVzZXJDb250ZW50Q29udHJvbGxl
ci0+dXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMoKTsKLSAgICBpZiAoIWRlc2NyaXB0b3JN
YXApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZvciAoYXV0byYgZGVzY3JpcHRvciA6
IGRlc2NyaXB0b3JNYXAtPnZhbHVlcygpKSB7CisgICAgZm9yIChhdXRvJiBkZXNjcmlwdG9yIDog
cGFnZS0+dXNlckNvbnRlbnRQcm92aWRlcigpLnVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3Jz
KCkudmFsdWVzKCkpIHsKICAgICAgICAgaWYgKCZkZXNjcmlwdG9yLT53b3JsZCgpID09ICZ3b3Js
ZCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTIxNjgsMTEgKzIxNjAsMTAg
QEAgUGFzc1JlZlB0cjxET01XaW5kb3c+IERPTVdpbmRvdzo6b3BlbihjbwogI2lmIEVOQUJMRShD
T05URU5UX0VYVEVOU0lPTlMpCiAgICAgaWYgKGZpcnN0RnJhbWUtPmRvY3VtZW50KCkKICAgICAg
ICAgJiYgZmlyc3RGcmFtZS0+bWFpbkZyYW1lKCkucGFnZSgpCi0gICAgICAgICYmIGZpcnN0RnJh
bWUtPm1haW5GcmFtZSgpLnBhZ2UoKS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkKICAgICAgICAg
JiYgZmlyc3RGcmFtZS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKQogICAgICAgICAmJiBmaXJzdEZy
YW1lLT5tYWluRnJhbWUoKS5kb2N1bWVudCgpLT5sb2FkZXIoKSkgewotICAgICAgICBSZXNvdXJj
ZUxvYWRJbmZvIHJlc291cmNlTG9hZEluZm8gPSB7Zmlyc3RGcmFtZS0+ZG9jdW1lbnQoKS0+Y29t
cGxldGVVUkwodXJsU3RyaW5nKSwgZmlyc3RGcmFtZS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKS0+
dXJsKCksIFJlc291cmNlVHlwZTo6UG9wdXB9OwotICAgICAgICBWZWN0b3I8Q29udGVudEV4dGVu
c2lvbnM6OkFjdGlvbj4gYWN0aW9ucyA9IGZpcnN0RnJhbWUtPm1haW5GcmFtZSgpLnBhZ2UoKS0+
dXNlckNvbnRlbnRDb250cm9sbGVyKCktPmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQocmVzb3VyY2VM
b2FkSW5mbywgKmZpcnN0RnJhbWUtPm1haW5GcmFtZSgpLmRvY3VtZW50KCktPmxvYWRlcigpKTsK
KyAgICAgICAgUmVzb3VyY2VMb2FkSW5mbyByZXNvdXJjZUxvYWRJbmZvID0geyBmaXJzdEZyYW1l
LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1cmxTdHJpbmcpLCBmaXJzdEZyYW1lLT5tYWluRnJh
bWUoKS5kb2N1bWVudCgpLT51cmwoKSwgUmVzb3VyY2VUeXBlOjpQb3B1cCB9OworICAgICAgICBW
ZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbj4gYWN0aW9ucyA9IGZpcnN0RnJhbWUtPm1h
aW5GcmFtZSgpLnBhZ2UoKS0+dXNlckNvbnRlbnRQcm92aWRlcigpLmFjdGlvbnNGb3JSZXNvdXJj
ZUxvYWQocmVzb3VyY2VMb2FkSW5mbywgKmZpcnN0RnJhbWUtPm1haW5GcmFtZSgpLmRvY3VtZW50
KCktPmxvYWRlcigpKTsKICAgICAgICAgZm9yIChjb25zdCBDb250ZW50RXh0ZW5zaW9uczo6QWN0
aW9uJiBhY3Rpb24gOiBhY3Rpb25zKSB7CiAgICAgICAgICAgICBpZiAoYWN0aW9uLnR5cGUoKSA9
PSBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkKQogICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDE5
ODE0NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02ODksMzUgKzY4OSwxNyBAQCB2b2lkIEZyYW1lOjppbmplY3RVc2VyU2NyaXB0cyhVc2VyU2Ny
aXB0CiAgICAgaWYgKGxvYWRlcigpLnN0YXRlTWFjaGluZSgpLmNyZWF0aW5nSW5pdGlhbEVtcHR5
RG9jdW1lbnQoKSAmJiAhc2V0dGluZ3MoKS5zaG91bGRJbmplY3RVc2VyU2NyaXB0c0luSW5pdGlh
bEVtcHR5RG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgYXV0byogdXNl
ckNvbnRlbnRDb250cm9sbGVyID0gbV9wYWdlLT51c2VyQ29udGVudENvbnRyb2xsZXIoKTsKLSAg
ICBpZiAoIXVzZXJDb250ZW50Q29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
V2FsayB0aGUgaGFzaHRhYmxlLiBJbmplY3QgYnkgd29ybGQuCi0gICAgY29uc3QgVXNlclNjcmlw
dE1hcCogdXNlclNjcmlwdHMgPSB1c2VyQ29udGVudENvbnRyb2xsZXItPnVzZXJTY3JpcHRzKCk7
Ci0gICAgaWYgKCF1c2VyU2NyaXB0cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChjb25z
dCBhdXRvJiB3b3JsZEFuZFVzZXJTY3JpcHQgOiAqdXNlclNjcmlwdHMpCi0gICAgICAgIGluamVj
dFVzZXJTY3JpcHRzRm9yV29ybGQoKndvcmxkQW5kVXNlclNjcmlwdC5rZXksICp3b3JsZEFuZFVz
ZXJTY3JpcHQudmFsdWUsIGluamVjdGlvblRpbWUpOwotfQotCi12b2lkIEZyYW1lOjppbmplY3RV
c2VyU2NyaXB0c0ZvcldvcmxkKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIGNvbnN0IFVzZXJTY3Jp
cHRWZWN0b3ImIHVzZXJTY3JpcHRzLCBVc2VyU2NyaXB0SW5qZWN0aW9uVGltZSBpbmplY3Rpb25U
aW1lKQotewotICAgIGlmICh1c2VyU2NyaXB0cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIERvY3VtZW50KiBkb2MgPSBkb2N1bWVudCgpOwotICAgIGlmICghZG9jKQorICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChhdXRvJiBzY3JpcHQgOiB1c2VyU2NyaXB0cykg
ewotICAgICAgICBpZiAoc2NyaXB0LT5pbmplY3RlZEZyYW1lcygpID09IEluamVjdEluVG9wRnJh
bWVPbmx5ICYmIG93bmVyRWxlbWVudCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgaWYgKHNjcmlwdC0+aW5qZWN0aW9uVGltZSgpID09IGluamVjdGlvblRpbWUgJiYgVXNlckNv
bnRlbnRVUkxQYXR0ZXJuOjptYXRjaGVzUGF0dGVybnMoZG9jLT51cmwoKSwgc2NyaXB0LT53aGl0
ZWxpc3QoKSwgc2NyaXB0LT5ibGFja2xpc3QoKSkpCi0gICAgICAgICAgICBtX3NjcmlwdC0+ZXZh
bHVhdGVJbldvcmxkKFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0LT5zb3VyY2UoKSwgc2NyaXB0LT51
cmwoKSksIHdvcmxkKTsKLSAgICB9CisgICAgbV9wYWdlLT51c2VyQ29udGVudFByb3ZpZGVyKCku
Zm9yRWFjaFVzZXJTY3JpcHQoWyZdKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIGNvbnN0IFVzZXJT
Y3JpcHQmIHNjcmlwdCkgeworICAgICAgICBpZiAoc2NyaXB0LmluamVjdGVkRnJhbWVzKCkgPT0g
SW5qZWN0SW5Ub3BGcmFtZU9ubHkgJiYgb3duZXJFbGVtZW50KCkpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgaWYgKHNjcmlwdC5pbmplY3Rpb25UaW1lKCkgPT0gaW5qZWN0aW9uVGlt
ZSAmJiBVc2VyQ29udGVudFVSTFBhdHRlcm46Om1hdGNoZXNQYXR0ZXJucyhkb2N1bWVudC0+dXJs
KCksIHNjcmlwdC53aGl0ZWxpc3QoKSwgc2NyaXB0LmJsYWNrbGlzdCgpKSkKKyAgICAgICAgICAg
IG1fc2NyaXB0LT5ldmFsdWF0ZUluV29ybGQoU2NyaXB0U291cmNlQ29kZShzY3JpcHQuc291cmNl
KCksIHNjcmlwdC51cmwoKSksIHdvcmxkKTsKKyAgICB9KTsKIH0KIAogUmVuZGVyVmlldyogRnJh
bWU6OmNvbnRlbnRSZW5kZXJlcigpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCShyZXZpc2lv
biAxOTgxNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4MCw4ICsyODAsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEZyYW1lKFBh
Z2UmLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqLCBGcmFtZUxvYWRlckNsaWVudCYpOwogCiAgICAg
cHJpdmF0ZToKLSAgICAgICAgdm9pZCBpbmplY3RVc2VyU2NyaXB0c0ZvcldvcmxkKERPTVdyYXBw
ZXJXb3JsZCYsIGNvbnN0IFVzZXJTY3JpcHRWZWN0b3ImLCBVc2VyU2NyaXB0SW5qZWN0aW9uVGlt
ZSk7Ci0KICAgICAgICAgSGFzaFNldDxGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIqPiBtX2Rlc3Ry
dWN0aW9uT2JzZXJ2ZXJzOwogCiAgICAgICAgIE1haW5GcmFtZSYgbV9tYWluRnJhbWU7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZS5jcHAJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAKICNpbmNsdWRlICJT
dHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3ViZnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJU
ZXh0UmVzb3VyY2VEZWNvZGVyLmgiCi0jaW5jbHVkZSAiVXNlckNvbnRlbnRDb250cm9sbGVyLmgi
CisjaW5jbHVkZSAiVXNlckNvbnRlbnRQcm92aWRlci5oIgogI2luY2x1ZGUgIlVzZXJJbnB1dEJy
aWRnZS5oIgogI2luY2x1ZGUgIlZpZXdTdGF0ZUNoYW5nZU9ic2VydmVyLmgiCiAjaW5jbHVkZSAi
VmlzaXRlZExpbmtTdGF0ZS5oIgpAQCAtMjMxLDcgKzIzMSw3IEBAIFBhZ2U6OlBhZ2UoUGFnZUNv
bmZpZ3VyYXRpb24mIHBhZ2VDb25maWcKICAgICAsIG1fYXBwbGljYXRpb25DYWNoZVN0b3JhZ2Uo
cGFnZUNvbmZpZ3VyYXRpb24uYXBwbGljYXRpb25DYWNoZVN0b3JhZ2UgPyAqV1RGTW92ZShwYWdl
Q29uZmlndXJhdGlvbi5hcHBsaWNhdGlvbkNhY2hlU3RvcmFnZSkgOiBBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6c2luZ2xldG9uKCkpCiAgICAgLCBtX2RhdGFiYXNlUHJvdmlkZXIoKldURk1vdmUo
cGFnZUNvbmZpZ3VyYXRpb24uZGF0YWJhc2VQcm92aWRlcikpCiAgICAgLCBtX3N0b3JhZ2VOYW1l
c3BhY2VQcm92aWRlcigqV1RGTW92ZShwYWdlQ29uZmlndXJhdGlvbi5zdG9yYWdlTmFtZXNwYWNl
UHJvdmlkZXIpKQotICAgICwgbV91c2VyQ29udGVudENvbnRyb2xsZXIoV1RGTW92ZShwYWdlQ29u
ZmlndXJhdGlvbi51c2VyQ29udGVudENvbnRyb2xsZXIpKQorICAgICwgbV91c2VyQ29udGVudFBy
b3ZpZGVyKCpXVEZNb3ZlKHBhZ2VDb25maWd1cmF0aW9uLnVzZXJDb250ZW50UHJvdmlkZXIpKQog
ICAgICwgbV92aXNpdGVkTGlua1N0b3JlKCpXVEZNb3ZlKHBhZ2VDb25maWd1cmF0aW9uLnZpc2l0
ZWRMaW5rU3RvcmUpKQogICAgICwgbV9zZXNzaW9uSUQoU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lv
bklEKCkpCiAgICAgLCBtX2lzQ2xvc2luZyhmYWxzZSkKQEAgLTI0MCw5ICsyNDAsNyBAQCBQYWdl
OjpQYWdlKFBhZ2VDb25maWd1cmF0aW9uJiBwYWdlQ29uZmlnCiAKICAgICBtX3N0b3JhZ2VOYW1l
c3BhY2VQcm92aWRlci0+YWRkUGFnZSgqdGhpcyk7CiAKLSAgICBpZiAobV91c2VyQ29udGVudENv
bnRyb2xsZXIpCi0gICAgICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5hZGRQYWdlKCp0aGlz
KTsKLQorICAgIG1fdXNlckNvbnRlbnRQcm92aWRlci0+YWRkUGFnZSgqdGhpcyk7CiAgICAgbV92
aXNpdGVkTGlua1N0b3JlLT5hZGRQYWdlKCp0aGlzKTsKIAogICAgIGlmICghYWxsUGFnZXMpIHsK
QEAgLTI5OCw5ICsyOTYsNyBAQCBQYWdlOjp+UGFnZSgpCiAjZW5kaWYKIAogICAgIG1fc3RvcmFn
ZU5hbWVzcGFjZVByb3ZpZGVyLT5yZW1vdmVQYWdlKCp0aGlzKTsKLQotICAgIGlmIChtX3VzZXJD
b250ZW50Q29udHJvbGxlcikKLSAgICAgICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPnJlbW92
ZVBhZ2UoKnRoaXMpOworICAgIG1fdXNlckNvbnRlbnRQcm92aWRlci0+cmVtb3ZlUGFnZSgqdGhp
cyk7CiAgICAgbV92aXNpdGVkTGlua1N0b3JlLT5yZW1vdmVQYWdlKCp0aGlzKTsKIH0KIApAQCAt
MTgxOSwxNSArMTgxNSwxNiBAQCBib29sIFBhZ2U6OmFyZVByb21wdHNBbGxvd2VkKCkKICAgICBy
ZXR1cm4gIW1fZm9yYmlkUHJvbXB0c0RlcHRoOwogfQogCi12b2lkIFBhZ2U6OnNldFVzZXJDb250
ZW50Q29udHJvbGxlcihVc2VyQ29udGVudENvbnRyb2xsZXIqIHVzZXJDb250ZW50Q29udHJvbGxl
cikKK1VzZXJDb250ZW50UHJvdmlkZXImIFBhZ2U6OnVzZXJDb250ZW50UHJvdmlkZXIoKQogewot
ICAgIGlmIChtX3VzZXJDb250ZW50Q29udHJvbGxlcikKLSAgICAgICAgbV91c2VyQ29udGVudENv
bnRyb2xsZXItPnJlbW92ZVBhZ2UoKnRoaXMpOwotCi0gICAgbV91c2VyQ29udGVudENvbnRyb2xs
ZXIgPSB1c2VyQ29udGVudENvbnRyb2xsZXI7CisgICAgcmV0dXJuIG1fdXNlckNvbnRlbnRQcm92
aWRlcjsKK30KIAotICAgIGlmIChtX3VzZXJDb250ZW50Q29udHJvbGxlcikKLSAgICAgICAgbV91
c2VyQ29udGVudENvbnRyb2xsZXItPmFkZFBhZ2UoKnRoaXMpOwordm9pZCBQYWdlOjpzZXRVc2Vy
Q29udGVudFByb3ZpZGVyKFJlZjxVc2VyQ29udGVudFByb3ZpZGVyPiYmIHVzZXJDb250ZW50UHJv
dmlkZXIpCit7CisgICAgbV91c2VyQ29udGVudFByb3ZpZGVyLT5yZW1vdmVQYWdlKCp0aGlzKTsK
KyAgICBtX3VzZXJDb250ZW50UHJvdmlkZXIgPSBXVEZNb3ZlKHVzZXJDb250ZW50UHJvdmlkZXIp
OworICAgIG1fdXNlckNvbnRlbnRQcm92aWRlci0+YWRkUGFnZSgqdGhpcyk7CiAKICAgICBpbnZh
bGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lcygpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmgJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIxLDcgQEAgY2xhc3MgU2Nyb2xsaW5nQ29vcmRp
bmF0b3I7CiBjbGFzcyBTZXR0aW5nczsKIGNsYXNzIFN0b3JhZ2VOYW1lc3BhY2U7CiBjbGFzcyBT
dG9yYWdlTmFtZXNwYWNlUHJvdmlkZXI7Ci1jbGFzcyBVc2VyQ29udGVudENvbnRyb2xsZXI7Citj
bGFzcyBVc2VyQ29udGVudFByb3ZpZGVyOwogY2xhc3MgVmFsaWRhdGlvbk1lc3NhZ2VDbGllbnQ7
CiBjbGFzcyBWaWV3U3RhdGVDaGFuZ2VPYnNlcnZlcjsKIGNsYXNzIFZpc2l0ZWRMaW5rU3RvcmU7
CkBAIC00NTAsOCArNDUwLDggQEAgcHVibGljOgogICAgIFN0b3JhZ2VOYW1lc3BhY2VQcm92aWRl
ciYgc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyKCkgeyByZXR1cm4gbV9zdG9yYWdlTmFtZXNwYWNl
UHJvdmlkZXIuZ2V0KCk7IH0KICAgICB2b2lkIHNldFN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcihS
ZWY8U3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyPiYmKTsKIAotICAgIFVzZXJDb250ZW50Q29udHJv
bGxlciogdXNlckNvbnRlbnRDb250cm9sbGVyKCkgeyByZXR1cm4gbV91c2VyQ29udGVudENvbnRy
b2xsZXIuZ2V0KCk7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFVzZXJDb250ZW50Q29u
dHJvbGxlcihVc2VyQ29udGVudENvbnRyb2xsZXIqKTsKKyAgICBVc2VyQ29udGVudFByb3ZpZGVy
JiB1c2VyQ29udGVudFByb3ZpZGVyKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRVc2Vy
Q29udGVudFByb3ZpZGVyKFJlZjxVc2VyQ29udGVudFByb3ZpZGVyPiYmKTsKIAogICAgIFZpc2l0
ZWRMaW5rU3RvcmUmIHZpc2l0ZWRMaW5rU3RvcmUoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldFZpc2l0ZWRMaW5rU3RvcmUoUmVmPFZpc2l0ZWRMaW5rU3RvcmU+JiYpOwpAQCAtNjc2LDcg
KzY3Niw3IEBAIHByaXZhdGU6CiAgICAgUmVmPEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlPiBtX2Fw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOwogICAgIFJlZjxEYXRhYmFzZVByb3ZpZGVyPiBtX2RhdGFi
YXNlUHJvdmlkZXI7CiAgICAgUmVmPFN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcj4gbV9zdG9yYWdl
TmFtZXNwYWNlUHJvdmlkZXI7Ci0gICAgUmVmUHRyPFVzZXJDb250ZW50Q29udHJvbGxlcj4gbV91
c2VyQ29udGVudENvbnRyb2xsZXI7CisgICAgUmVmPFVzZXJDb250ZW50UHJvdmlkZXI+IG1fdXNl
ckNvbnRlbnRQcm92aWRlcjsKICAgICBSZWY8VmlzaXRlZExpbmtTdG9yZT4gbV92aXNpdGVkTGlu
a1N0b3JlOwogICAgIFJlZlB0cjxXaGVlbEV2ZW50VGVzdFRyaWdnZXI+IG1fdGVzdFRyaWdnZXI7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbmZpZ3VyYXRpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25maWd1cmF0aW9uLmgJKHJldmlzaW9u
IDE5ODE0NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbmZpZ3VyYXRpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBjbGFzcyBJbnNwZWN0b3JDbGllbnQ7CiBjbGFz
cyBQbHVnSW5DbGllbnQ7CiBjbGFzcyBQcm9ncmVzc1RyYWNrZXJDbGllbnQ7CiBjbGFzcyBTdG9y
YWdlTmFtZXNwYWNlUHJvdmlkZXI7Ci1jbGFzcyBVc2VyQ29udGVudENvbnRyb2xsZXI7CitjbGFz
cyBVc2VyQ29udGVudFByb3ZpZGVyOwogY2xhc3MgVmFsaWRhdGlvbk1lc3NhZ2VDbGllbnQ7CiBj
bGFzcyBWaXNpdGVkTGlua1N0b3JlOwogCkBAIC04NCw3ICs4NCw3IEBAIHB1YmxpYzoKICAgICBS
ZWZQdHI8QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U+IGFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOwog
ICAgIFJlZlB0cjxEYXRhYmFzZVByb3ZpZGVyPiBkYXRhYmFzZVByb3ZpZGVyOwogICAgIFJlZlB0
cjxTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXI+IHN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcjsKLSAg
ICBSZWZQdHI8VXNlckNvbnRlbnRDb250cm9sbGVyPiB1c2VyQ29udGVudENvbnRyb2xsZXI7Cisg
ICAgUmVmUHRyPFVzZXJDb250ZW50UHJvdmlkZXI+IHVzZXJDb250ZW50UHJvdmlkZXI7CiAgICAg
UmVmUHRyPFZpc2l0ZWRMaW5rU3RvcmU+IHZpc2l0ZWRMaW5rU3RvcmU7CiB9OwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCShyZXZpc2lv
biAxOTgxNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDI0ICsyNywxNSBAQAogI2luY2x1ZGUgIlVzZXJDb250
ZW50Q29udHJvbGxlci5oIgogCiAjaW5jbHVkZSAiRE9NV3JhcHBlcldvcmxkLmgiCi0jaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkV4
dGVuc2lvblN0eWxlU2hlZXRzLmgiCi0jaW5jbHVkZSAiTWFpbkZyYW1lLmgiCi0jaW5jbHVkZSAi
UGFnZS5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZEluZm8uaCIKICNpbmNsdWRlICJVc2VyU2Ny
aXB0LmgiCiAjaW5jbHVkZSAiVXNlclN0eWxlU2hlZXQuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pT
Q2VsbElubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaD4KIAog
I2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCiAjaW5jbHVkZSAiVXNlck1lc3NhZ2VI
YW5kbGVyRGVzY3JpcHRvci5oIgogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJ
T05TKQotI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25Db21waWxlci5oIgotI2luY2x1ZGUgIkNv
bnRlbnRFeHRlbnNpb25zQmFja2VuZC5oIgorI2luY2x1ZGUgIkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbi5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTYyLDM2ICs1MywzMyBA
QCBVc2VyQ29udGVudENvbnRyb2xsZXI6On5Vc2VyQ29udGVudENvbnRyCiB7CiB9CiAKLXZvaWQg
VXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRQYWdlKFBhZ2UmIHBhZ2UpCit2b2lkIFVzZXJDb250
ZW50Q29udHJvbGxlcjo6Zm9yRWFjaFVzZXJTY3JpcHQoY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lk
KERPTVdyYXBwZXJXb3JsZCYsIGNvbnN0IFVzZXJTY3JpcHQmKT4mIGZ1bmN0b3IpIGNvbnN0CiB7
Ci0gICAgQVNTRVJUKCFtX3BhZ2VzLmNvbnRhaW5zKCZwYWdlKSk7Ci0gICAgbV9wYWdlcy5hZGQo
JnBhZ2UpOworICAgIGZvciAoY29uc3QgYXV0byYgd29ybGRBbmRVc2VyU2NyaXB0VmVjdG9yIDog
bV91c2VyU2NyaXB0cykgeworICAgICAgICBhdXRvJiB3b3JsZCA9ICp3b3JsZEFuZFVzZXJTY3Jp
cHRWZWN0b3Iua2V5LmdldCgpOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHVzZXJTY3JpcHQg
OiAqd29ybGRBbmRVc2VyU2NyaXB0VmVjdG9yLnZhbHVlKQorICAgICAgICAgICAgZnVuY3Rvcih3
b3JsZCwgKnVzZXJTY3JpcHQpOworICAgIH0KIH0KIAotdm9pZCBVc2VyQ29udGVudENvbnRyb2xs
ZXI6OnJlbW92ZVBhZ2UoUGFnZSYgcGFnZSkKK3ZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjpm
b3JFYWNoVXNlclN0eWxlU2hlZXQoY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFVzZXJT
dHlsZVNoZWV0Jik+JiBmdW5jdG9yKSBjb25zdAogewotICAgIEFTU0VSVChtX3BhZ2VzLmNvbnRh
aW5zKCZwYWdlKSk7Ci0gICAgbV9wYWdlcy5yZW1vdmUoJnBhZ2UpOworICAgIGZvciAoYXV0byYg
c3R5bGVTaGVldFZlY3RvciA6IG1fdXNlclN0eWxlU2hlZXRzLnZhbHVlcygpKSB7CisgICAgICAg
IGZvciAoY29uc3QgYXV0byYgc3R5bGVTaGVldCA6ICpzdHlsZVNoZWV0VmVjdG9yKQorICAgICAg
ICAgICAgZnVuY3Rvcigqc3R5bGVTaGVldCk7CisgICAgfQogfQogCiB2b2lkIFVzZXJDb250ZW50
Q29udHJvbGxlcjo6YWRkVXNlclNjcmlwdChET01XcmFwcGVyV29ybGQmIHdvcmxkLCBzdGQ6OnVu
aXF1ZV9wdHI8VXNlclNjcmlwdD4gdXNlclNjcmlwdCkKIHsKLSAgICBpZiAoIW1fdXNlclNjcmlw
dHMpCi0gICAgICAgIG1fdXNlclNjcmlwdHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFVzZXJTY3JpcHRN
YXA+KCk7Ci0KLSAgICBhdXRvJiBzY3JpcHRzSW5Xb3JsZCA9IG1fdXNlclNjcmlwdHMtPmFkZCgm
d29ybGQsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKLSAgICBpZiAoIXNjcmlwdHNJbldvcmxk
KQotICAgICAgICBzY3JpcHRzSW5Xb3JsZCA9IHN0ZDo6bWFrZV91bmlxdWU8VXNlclNjcmlwdFZl
Y3Rvcj4oKTsKKyAgICBhdXRvJiBzY3JpcHRzSW5Xb3JsZCA9IG1fdXNlclNjcmlwdHMuZW5zdXJl
KCZ3b3JsZCwgWyZdIHsgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VXNlclNjcmlwdFZlY3Rvcj4o
KTsgfSkuaXRlcmF0b3ItPnZhbHVlOwogICAgIHNjcmlwdHNJbldvcmxkLT5hcHBlbmQoV1RGTW92
ZSh1c2VyU2NyaXB0KSk7CiB9CiAKIHZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVV
c2VyU2NyaXB0KERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIGNvbnN0IFVSTCYgdXJsKQogewotICAg
IGlmICghbV91c2VyU2NyaXB0cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBpdCA9IG1f
dXNlclNjcmlwdHMtPmZpbmQoJndvcmxkKTsKLSAgICBpZiAoaXQgPT0gbV91c2VyU2NyaXB0cy0+
ZW5kKCkpCisgICAgYXV0byBpdCA9IG1fdXNlclNjcmlwdHMuZmluZCgmd29ybGQpOworICAgIGlm
IChpdCA9PSBtX3VzZXJTY3JpcHRzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRv
IHNjcmlwdHMgPSBpdC0+dmFsdWUuZ2V0KCk7CkBAIC0xMDEsMjUgKzg5LDE3IEBAIHZvaWQgVXNl
ckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU2MKICAgICB9CiAKICAgICBpZiAoc2NyaXB0
cy0+aXNFbXB0eSgpKQotICAgICAgICBtX3VzZXJTY3JpcHRzLT5yZW1vdmUoaXQpOworICAgICAg
ICBtX3VzZXJTY3JpcHRzLnJlbW92ZShpdCk7CiB9CiAKIHZvaWQgVXNlckNvbnRlbnRDb250cm9s
bGVyOjpyZW1vdmVVc2VyU2NyaXB0cyhET01XcmFwcGVyV29ybGQmIHdvcmxkKQogewotICAgIGlm
ICghbV91c2VyU2NyaXB0cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV91c2VyU2NyaXB0cy0+
cmVtb3ZlKCZ3b3JsZCk7CisgICAgbV91c2VyU2NyaXB0cy5yZW1vdmUoJndvcmxkKTsKIH0KIAog
dm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNoZWV0KERPTVdyYXBwZXJX
b3JsZCYgd29ybGQsIHN0ZDo6dW5pcXVlX3B0cjxVc2VyU3R5bGVTaGVldD4gdXNlclN0eWxlU2hl
ZXQsIFVzZXJTdHlsZUluamVjdGlvblRpbWUgaW5qZWN0aW9uVGltZSkKIHsKLSAgICBpZiAoIW1f
dXNlclN0eWxlU2hlZXRzKQotICAgICAgICBtX3VzZXJTdHlsZVNoZWV0cyA9IHN0ZDo6bWFrZV91
bmlxdWU8VXNlclN0eWxlU2hlZXRNYXA+KCk7Ci0KLSAgICBhdXRvJiBzdHlsZVNoZWV0c0luV29y
bGQgPSBtX3VzZXJTdHlsZVNoZWV0cy0+YWRkKCZ3b3JsZCwgbnVsbHB0cikuaXRlcmF0b3ItPnZh
bHVlOwotICAgIGlmICghc3R5bGVTaGVldHNJbldvcmxkKQotICAgICAgICBzdHlsZVNoZWV0c0lu
V29ybGQgPSBzdGQ6Om1ha2VfdW5pcXVlPFVzZXJTdHlsZVNoZWV0VmVjdG9yPigpOworICAgIGF1
dG8mIHN0eWxlU2hlZXRzSW5Xb3JsZCA9IG1fdXNlclN0eWxlU2hlZXRzLmVuc3VyZSgmd29ybGQs
IFsmXSB7IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFVzZXJTdHlsZVNoZWV0VmVjdG9yPigpOyB9
KS5pdGVyYXRvci0+dmFsdWU7CiAgICAgc3R5bGVTaGVldHNJbldvcmxkLT5hcHBlbmQoV1RGTW92
ZSh1c2VyU3R5bGVTaGVldCkpOwogCiAgICAgaWYgKGluamVjdGlvblRpbWUgPT0gSW5qZWN0SW5F
eGlzdGluZ0RvY3VtZW50cykKQEAgLTEyOCwxMSArMTA4LDggQEAgdm9pZCBVc2VyQ29udGVudENv
bnRyb2xsZXI6OmFkZFVzZXJTdHlsZQogCiB2b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVt
b3ZlVXNlclN0eWxlU2hlZXQoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgY29uc3QgVVJMJiB1cmwp
CiB7Ci0gICAgaWYgKCFtX3VzZXJTdHlsZVNoZWV0cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
YXV0byBpdCA9IG1fdXNlclN0eWxlU2hlZXRzLT5maW5kKCZ3b3JsZCk7Ci0gICAgaWYgKGl0ID09
IG1fdXNlclN0eWxlU2hlZXRzLT5lbmQoKSkKKyAgICBhdXRvIGl0ID0gbV91c2VyU3R5bGVTaGVl
dHMuZmluZCgmd29ybGQpOworICAgIGlmIChpdCA9PSBtX3VzZXJTdHlsZVNoZWV0cy5lbmQoKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byYgc3R5bGVzaGVldHMgPSAqaXQtPnZhbHVlOwpA
QCAtMTQ5LDE3ICsxMjYsMTQgQEAgdm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVz
ZXJTdAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoc3R5bGVzaGVldHMuaXNFbXB0eSgpKQot
ICAgICAgICBtX3VzZXJTdHlsZVNoZWV0cy0+cmVtb3ZlKGl0KTsKKyAgICAgICAgbV91c2VyU3R5
bGVTaGVldHMucmVtb3ZlKGl0KTsKIAogICAgIGludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRD
YWNoZUluQWxsRnJhbWVzSW5BbGxQYWdlcygpOwogfQogCiB2b2lkIFVzZXJDb250ZW50Q29udHJv
bGxlcjo6cmVtb3ZlVXNlclN0eWxlU2hlZXRzKERPTVdyYXBwZXJXb3JsZCYgd29ybGQpCiB7Ci0g
ICAgaWYgKCFtX3VzZXJTdHlsZVNoZWV0cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFt
X3VzZXJTdHlsZVNoZWV0cy0+cmVtb3ZlKCZ3b3JsZCkpCisgICAgaWYgKCFtX3VzZXJTdHlsZVNo
ZWV0cy5yZW1vdmUoJndvcmxkKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaW52YWxpZGF0ZUlu
amVjdGVkU3R5bGVTaGVldENhY2hlSW5BbGxGcmFtZXNJbkFsbFBhZ2VzKCk7CkBAIC0xNjgsOTUg
KzE0Miw0MCBAQCB2b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclN0CiAjaWYg
RU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKIHZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVy
OjphZGRVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yKFVzZXJNZXNzYWdlSGFuZGxlckRlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IpCiB7Ci0gICAgaWYgKCFtX3VzZXJNZXNzYWdlSGFuZGxlckRlc2Ny
aXB0b3JzKQotICAgICAgICBtX3VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzID0gc3RkOjpt
YWtlX3VuaXF1ZTxVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yTWFwPigpOwotCi0gICAgbV91
c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycy0+YWRkKHN0ZDo6bWFrZV9wYWlyKGRlc2NyaXB0
b3IubmFtZSgpLCAmZGVzY3JpcHRvci53b3JsZCgpKSwgJmRlc2NyaXB0b3IpOworICAgIG1fdXNl
ck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMuYWRkKHN0ZDo6bWFrZV9wYWlyKGRlc2NyaXB0b3Iu
bmFtZSgpLCAmZGVzY3JpcHRvci53b3JsZCgpKSwgJmRlc2NyaXB0b3IpOwogfQogCiB2b2lkIFVz
ZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcihV
c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQogewotICAgIGlmICghbV91
c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV91
c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycy0+cmVtb3ZlKHN0ZDo6bWFrZV9wYWlyKGRlc2Ny
aXB0b3IubmFtZSgpLCAmZGVzY3JpcHRvci53b3JsZCgpKSk7CisgICAgbV91c2VyTWVzc2FnZUhh
bmRsZXJEZXNjcmlwdG9ycy5yZW1vdmUoc3RkOjptYWtlX3BhaXIoZGVzY3JpcHRvci5uYW1lKCks
ICZkZXNjcmlwdG9yLndvcmxkKCkpKTsKIH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKIHZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyQ29udGVudEV4
dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxDb250ZW50RXh0ZW5zaW9uczo6Q29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uPiBjb250ZW50RXh0ZW5zaW9uKQogewotICAgIGlmICghbV9j
b250ZW50RXh0ZW5zaW9uQmFja2VuZCkKLSAgICAgICAgbV9jb250ZW50RXh0ZW5zaW9uQmFja2Vu
ZCA9IHN0ZDo6bWFrZV91bmlxdWU8Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25z
QmFja2VuZD4oKTsKLSAgICAKLSAgICBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kLT5hZGRDb250
ZW50RXh0ZW5zaW9uKG5hbWUsIGNvbnRlbnRFeHRlbnNpb24pOworICAgIG1fY29udGVudEV4dGVu
c2lvbkJhY2tlbmQuYWRkQ29udGVudEV4dGVuc2lvbihuYW1lLCBjb250ZW50RXh0ZW5zaW9uKTsK
IH0KIAogdm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJDb250ZW50RXh0ZW5z
aW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBpZiAoIW1fY29udGVudEV4dGVuc2lvbkJh
Y2tlbmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQt
PnJlbW92ZUNvbnRlbnRFeHRlbnNpb24obmFtZSk7CisgICAgbV9jb250ZW50RXh0ZW5zaW9uQmFj
a2VuZC5yZW1vdmVDb250ZW50RXh0ZW5zaW9uKG5hbWUpOwogfQogCiB2b2lkIFVzZXJDb250ZW50
Q29udHJvbGxlcjo6cmVtb3ZlQWxsVXNlckNvbnRlbnRFeHRlbnNpb25zKCkKIHsKLSAgICBpZiAo
IW1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29u
dGVudEV4dGVuc2lvbkJhY2tlbmQtPnJlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKCk7Ci19Ci0K
LXN0YXRpYyBib29sIGNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZChjb25zdCBEb2N1bWVudExvYWRl
ciYgZG9jdW1lbnRMb2FkZXIpCi17Ci0gICAgaWYgKGF1dG8gZnJhbWUgPSBkb2N1bWVudExvYWRl
ci5mcmFtZSgpKSB7Ci0gICAgICAgIGlmIChmcmFtZS0+aXNNYWluRnJhbWUoKSkKLSAgICAgICAg
ICAgIHJldHVybiBkb2N1bWVudExvYWRlci51c2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkKCk7
Ci0gICAgICAgIGlmIChhdXRvIG1haW5Eb2N1bWVudExvYWRlciA9IGZyYW1lLT5tYWluRnJhbWUo
KS5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpKQotICAgICAgICAgICAgcmV0dXJuIG1haW5Eb2N1
bWVudExvYWRlci0+dXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZCgpOwotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotICAgIAotQ29udGVudEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXMg
VXNlckNvbnRlbnRDb250cm9sbGVyOjpwcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9yTG9h
ZChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlVHlwZSByZXNvdXJjZVR5cGUsIERv
Y3VtZW50TG9hZGVyJiBpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIpCi17Ci0gICAgaWYgKCFtX2Nv
bnRlbnRFeHRlbnNpb25CYWNrZW5kKQotICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbnM6
OkJsb2NrZWRTdGF0dXM6Ok5vdEJsb2NrZWQ7Ci0KLSAgICBpZiAoIWNvbnRlbnRFeHRlbnNpb25z
RW5hYmxlZChpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIpKQotICAgICAgICByZXR1cm4gQ29udGVu
dEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXM6Ok5vdEJsb2NrZWQ7Ci0KLSAgICByZXR1cm4gbV9j
b250ZW50RXh0ZW5zaW9uQmFja2VuZC0+cHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0Zvckxv
YWQocmVxdWVzdCwgcmVzb3VyY2VUeXBlLCBpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIpOwotfQot
Ci1WZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbj4gVXNlckNvbnRlbnRDb250cm9sbGVy
OjphY3Rpb25zRm9yUmVzb3VyY2VMb2FkKGNvbnN0IFJlc291cmNlTG9hZEluZm8mIHJlc291cmNl
TG9hZEluZm8sIERvY3VtZW50TG9hZGVyJiBpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIpCi17Ci0g
ICAgaWYgKCFtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kKQotICAgICAgICByZXR1cm4gVmVjdG9y
PENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb24+KCk7Ci0gICAgCi0gICAgaWYgKCFjb250ZW50RXh0
ZW5zaW9uc0VuYWJsZWQoaW5pdGlhdGluZ0RvY3VtZW50TG9hZGVyKSkKLSAgICAgICAgcmV0dXJu
IFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uPigpOwotCi0gICAgcmV0dXJuIG1fY29u
dGVudEV4dGVuc2lvbkJhY2tlbmQtPmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQocmVzb3VyY2VMb2Fk
SW5mbyk7CisgICAgbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZC5yZW1vdmVBbGxDb250ZW50RXh0
ZW5zaW9ucygpOwogfQogI2VuZGlmCiAKIHZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1v
dmVBbGxVc2VyQ29udGVudCgpCiB7Ci0gICAgbV91c2VyU2NyaXB0cyA9IG51bGxwdHI7CisgICAg
bV91c2VyU2NyaXB0cy5jbGVhcigpOwogCi0gICAgaWYgKG1fdXNlclN0eWxlU2hlZXRzKSB7Ci0g
ICAgICAgIG1fdXNlclN0eWxlU2hlZXRzID0gbnVsbHB0cjsKKyAgICBpZiAoIW1fdXNlclN0eWxl
U2hlZXRzLmlzRW1wdHkoKSkgeworICAgICAgICBtX3VzZXJTdHlsZVNoZWV0cy5jbGVhcigpOwog
ICAgICAgICBpbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lc0luQWxs
UGFnZXMoKTsKICAgICB9CiB9CiAKLXZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjppbnZhbGlk
YXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lc0luQWxsUGFnZXMoKQotewotICAg
IGZvciAoYXV0byYgcGFnZSA6IG1fcGFnZXMpCi0gICAgICAgIHBhZ2UtPmludmFsaWRhdGVJbmpl
Y3RlZFN0eWxlU2hlZXRDYWNoZUluQWxsRnJhbWVzKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnRDb250cm9sbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIu
aAkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudENv
bnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNTggKzI2LDE5IEBACiAjaWZuZGVmIFVz
ZXJDb250ZW50Q29udHJvbGxlcl9oCiAjZGVmaW5lIFVzZXJDb250ZW50Q29udHJvbGxlcl9oCiAK
LSNpbmNsdWRlICJVc2VyU2NyaXB0VHlwZXMuaCIKLSNpbmNsdWRlICJVc2VyU3R5bGVTaGVldFR5
cGVzLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2lmIEVOQUJMRShVU0VSX01FU1NBR0Vf
SEFORExFUlMpCi0jaW5jbHVkZSAiVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvclR5cGVzLmgi
Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0jaW5jbHVkZSAiQ29u
dGVudEV4dGVuc2lvbkFjdGlvbnMuaCIKLSNlbmRpZgorI2luY2x1ZGUgIlVzZXJDb250ZW50UHJv
dmlkZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBET01XcmFwcGVyV29ybGQ7
Ci1jbGFzcyBEb2N1bWVudExvYWRlcjsKLWNsYXNzIFBhZ2U7Ci1jbGFzcyBSZXNvdXJjZVJlcXVl
c3Q7Ci1jbGFzcyBTdHlsZVNoZWV0Q29udGVudHM7Ci1jbGFzcyBVUkw7Ci1jbGFzcyBVc2VyU2Ny
aXB0OwotY2xhc3MgVXNlclN0eWxlU2hlZXQ7Ci1jbGFzcyBVc2VyTWVzc2FnZUhhbmRsZXJEZXNj
cmlwdG9yOwotCi1lbnVtIGNsYXNzIFJlc291cmNlVHlwZSA6IHVpbnQxNl90OwotCi1zdHJ1Y3Qg
UmVzb3VyY2VMb2FkSW5mbzsKLQotbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKLWNsYXNz
IENvbXBpbGVkQ29udGVudEV4dGVuc2lvbjsKLWNsYXNzIENvbnRlbnRFeHRlbnNpb25zQmFja2Vu
ZDsKLXN0cnVjdCBBY3Rpb247Ci19Ci0KLWNsYXNzIFVzZXJDb250ZW50Q29udHJvbGxlciA6IHB1
YmxpYyBSZWZDb3VudGVkPFVzZXJDb250ZW50Q29udHJvbGxlcj4geworY2xhc3MgVXNlckNvbnRl
bnRDb250cm9sbGVyIGZpbmFsIDogcHVibGljIFVzZXJDb250ZW50UHJvdmlkZXIgewogcHVibGlj
OgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8VXNlckNvbnRlbnRDb250cm9sbGVyPiBj
cmVhdGUoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB+VXNlckNvbnRlbnRDb250cm9sbGVyKCk7CiAK
LSAgICB2b2lkIGFkZFBhZ2UoUGFnZSYpOwotICAgIHZvaWQgcmVtb3ZlUGFnZShQYWdlJik7Ci0K
LSAgICBjb25zdCBVc2VyU2NyaXB0TWFwKiB1c2VyU2NyaXB0cygpIGNvbnN0IHsgcmV0dXJuIG1f
dXNlclNjcmlwdHMuZ2V0KCk7IH0KLQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkVXNlclNj
cmlwdChET01XcmFwcGVyV29ybGQmLCBzdGQ6OnVuaXF1ZV9wdHI8VXNlclNjcmlwdD4pOwogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlVXNlclNjcmlwdChET01XcmFwcGVyV29ybGQmLCBj
b25zdCBVUkwmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVVzZXJTY3JpcHRzKERP
TVdyYXBwZXJXb3JsZCYpOwogCi0gICAgY29uc3QgVXNlclN0eWxlU2hlZXRNYXAqIHVzZXJTdHls
ZVNoZWV0cygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlclN0eWxlU2hlZXRzLmdldCgpOyB9Ci0KICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZFVzZXJTdHlsZVNoZWV0KERPTVdyYXBwZXJXb3JsZCYs
IHN0ZDo6dW5pcXVlX3B0cjxVc2VyU3R5bGVTaGVldD4sIFVzZXJTdHlsZUluamVjdGlvblRpbWUp
OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlVXNlclN0eWxlU2hlZXQoRE9NV3JhcHBl
cldvcmxkJiwgY29uc3QgVVJMJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVVc2Vy
U3R5bGVTaGVldHMoRE9NV3JhcHBlcldvcmxkJik7CkBAIC04NSw4ICs0Niw2IEBAIHB1YmxpYzoK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUFsbFVzZXJDb250ZW50KCk7CiAKICNpZiBF
TkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQotICAgIGNvbnN0IFVzZXJNZXNzYWdlSGFuZGxl
ckRlc2NyaXB0b3JNYXAqIHVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzKCkgY29uc3QgeyBy
ZXR1cm4gbV91c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycy5nZXQoKTsgfQotCiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBhZGRVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yKFVzZXJNZXNz
YWdlSGFuZGxlckRlc2NyaXB0b3ImKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVVz
ZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IoVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvciYp
OwogI2VuZGlmCkBAIC05NSwyNSArNTQsMjggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgYWRkVXNlckNvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8
Q29udGVudEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4pOwogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgcmVtb3ZlVXNlckNvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBu
YW1lKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUFsbFVzZXJDb250ZW50RXh0ZW5z
aW9ucygpOwotCi0gICAgQ29udGVudEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXMgcHJvY2Vzc0Nv
bnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQoUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VUeXBl
LCBEb2N1bWVudExvYWRlciYgaW5pdGlhdGluZ0RvY3VtZW50TG9hZGVyKTsKLSAgICBWZWN0b3I8
Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbj4gYWN0aW9uc0ZvclJlc291cmNlTG9hZChjb25zdCBS
ZXNvdXJjZUxvYWRJbmZvJiwgRG9jdW1lbnRMb2FkZXImIGluaXRpYXRpbmdEb2N1bWVudExvYWRl
cik7CiAjZW5kaWYKIAogcHJpdmF0ZToKICAgICBVc2VyQ29udGVudENvbnRyb2xsZXIoKTsKIAot
ICAgIHZvaWQgaW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlSW5BbGxGcmFtZXNJbkFs
bFBhZ2VzKCk7Ci0KLSAgICBIYXNoU2V0PFBhZ2UqPiBtX3BhZ2VzOworICAgIC8vIFVzZXJDb250
ZW50UHJvdmlkZXIKKyAgICB2b2lkIGZvckVhY2hVc2VyU2NyaXB0KGNvbnN0IHN0ZDo6ZnVuY3Rp
b248dm9pZChET01XcmFwcGVyV29ybGQmLCBjb25zdCBVc2VyU2NyaXB0Jik+JikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdm9pZCBmb3JFYWNoVXNlclN0eWxlU2hlZXQoY29uc3Qgc3RkOjpmdW5jdGlv
bjx2b2lkKGNvbnN0IFVzZXJTdHlsZVNoZWV0Jik+JikgY29uc3Qgb3ZlcnJpZGU7CisjaWYgRU5B
QkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKKyAgICBjb25zdCBVc2VyTWVzc2FnZUhhbmRsZXJE
ZXNjcmlwdG9yTWFwJiB1c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycygpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnM7IH0KKyNlbmRpZgor
I2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisgICAgQ29udGVudEV4dGVuc2lvbnM6OkNv
bnRlbnRFeHRlbnNpb25zQmFja2VuZCYgdXNlckNvbnRlbnRFeHRlbnNpb25CYWNrZW5kKCkgb3Zl
cnJpZGUgeyByZXR1cm4gbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZDsgfQorI2VuZGlmCiAKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8VXNlclNjcmlwdE1hcD4gbV91c2VyU2NyaXB0czsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8VXNlclN0eWxlU2hlZXRNYXA+IG1fdXNlclN0eWxlU2hlZXRzOworICAgIFVz
ZXJTY3JpcHRNYXAgbV91c2VyU2NyaXB0czsKKyAgICBVc2VyU3R5bGVTaGVldE1hcCBtX3VzZXJT
dHlsZVNoZWV0czsKICNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQotICAgIHN0ZDo6
dW5pcXVlX3B0cjxVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yTWFwPiBtX3VzZXJNZXNzYWdl
SGFuZGxlckRlc2NyaXB0b3JzOworICAgIFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JNYXAg
bV91c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yczsKICNlbmRpZgogI2lmIEVOQUJMRShDT05U
RU5UX0VYVEVOU0lPTlMpCi0gICAgc3RkOjp1bmlxdWVfcHRyPENvbnRlbnRFeHRlbnNpb25zOjpD
b250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ+IG1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQ7CisgICAg
Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCBtX2NvbnRlbnRFeHRl
bnNpb25CYWNrZW5kOwogI2VuZGlmCiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1Vz
ZXJDb250ZW50UHJvdmlkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
VXNlckNvbnRlbnRQcm92aWRlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL1VzZXJDb250ZW50UHJvdmlkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlVzZXJDb250
ZW50UHJvdmlkZXIuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1l
bnRMb2FkZXIuaCIKKyNpbmNsdWRlICJNYWluRnJhbWUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisK
KyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNp
b25Db21waWxlci5oIgorI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5oIgorI2Vu
ZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVXNlckNvbnRlbnRQcm92aWRlcjo6VXNlckNv
bnRlbnRQcm92aWRlcigpCit7Cit9CisKK1VzZXJDb250ZW50UHJvdmlkZXI6On5Vc2VyQ29udGVu
dFByb3ZpZGVyKCkKK3sKKyAgICBBU1NFUlQobV9wYWdlcy5pc0VtcHR5KCkpOworfQorCit2b2lk
IFVzZXJDb250ZW50UHJvdmlkZXI6OmFkZFBhZ2UoUGFnZSYgcGFnZSkKK3sKKyAgICBBU1NFUlQo
IW1fcGFnZXMuY29udGFpbnMoJnBhZ2UpKTsKKworICAgIG1fcGFnZXMuYWRkKCZwYWdlKTsKK30K
Kwordm9pZCBVc2VyQ29udGVudFByb3ZpZGVyOjpyZW1vdmVQYWdlKFBhZ2UmIHBhZ2UpCit7Cisg
ICAgQVNTRVJUKG1fcGFnZXMuY29udGFpbnMoJnBhZ2UpKTsKKworICAgIG1fcGFnZXMucmVtb3Zl
KCZwYWdlKTsKK30KKwordm9pZCBVc2VyQ29udGVudFByb3ZpZGVyOjppbnZhbGlkYXRlSW5qZWN0
ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lc0luQWxsUGFnZXMoKQoreworICAgIGZvciAoYXV0
byYgcGFnZSA6IG1fcGFnZXMpCisgICAgICAgIHBhZ2UtPmludmFsaWRhdGVJbmplY3RlZFN0eWxl
U2hlZXRDYWNoZUluQWxsRnJhbWVzKCk7Cit9CisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJ
T05TKQorc3RhdGljIGJvb2wgY29udGVudEV4dGVuc2lvbnNFbmFibGVkKGNvbnN0IERvY3VtZW50
TG9hZGVyJiBkb2N1bWVudExvYWRlcikKK3sKKyAgICBpZiAoYXV0byBmcmFtZSA9IGRvY3VtZW50
TG9hZGVyLmZyYW1lKCkpIHsKKyAgICAgICAgaWYgKGZyYW1lLT5pc01haW5GcmFtZSgpKQorICAg
ICAgICAgICAgcmV0dXJuIGRvY3VtZW50TG9hZGVyLnVzZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJs
ZWQoKTsKKyAgICAgICAgaWYgKGF1dG8gbWFpbkRvY3VtZW50TG9hZGVyID0gZnJhbWUtPm1haW5G
cmFtZSgpLmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkpCisgICAgICAgICAgICByZXR1cm4gbWFp
bkRvY3VtZW50TG9hZGVyLT51c2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkKCk7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisgICAgCitDb250ZW50RXh0ZW5zaW9uczo6QmxvY2tlZFN0
YXR1cyBVc2VyQ29udGVudFByb3ZpZGVyOjpwcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9y
TG9hZChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlVHlwZSByZXNvdXJjZVR5cGUs
IERvY3VtZW50TG9hZGVyJiBpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIpCit7CisgICAgaWYgKCFj
b250ZW50RXh0ZW5zaW9uc0VuYWJsZWQoaW5pdGlhdGluZ0RvY3VtZW50TG9hZGVyKSkKKyAgICAg
ICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzOjpOb3RCbG9ja2VkOwor
CisgICAgcmV0dXJuIHVzZXJDb250ZW50RXh0ZW5zaW9uQmFja2VuZCgpLnByb2Nlc3NDb250ZW50
RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKHJlcXVlc3QsIHJlc291cmNlVHlwZSwgaW5pdGlhdGluZ0Rv
Y3VtZW50TG9hZGVyKTsKK30KKworVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb24+IFVz
ZXJDb250ZW50UHJvdmlkZXI6OmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQoY29uc3QgUmVzb3VyY2VM
b2FkSW5mbyYgcmVzb3VyY2VMb2FkSW5mbywgRG9jdW1lbnRMb2FkZXImIGluaXRpYXRpbmdEb2N1
bWVudExvYWRlcikKK3sKKyAgICBpZiAoIWNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZChpbml0aWF0
aW5nRG9jdW1lbnRMb2FkZXIpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIHVz
ZXJDb250ZW50RXh0ZW5zaW9uQmFja2VuZCgpLmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQocmVzb3Vy
Y2VMb2FkSW5mbyk7Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudFByb3ZpZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudFByb3ZpZGVyLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50UHJvdmlkZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBVc2VyQ29udGVudFByb3Zp
ZGVyX2gKKyNkZWZpbmUgVXNlckNvbnRlbnRQcm92aWRlcl9oCisKKyNpbmNsdWRlICJVc2VyU2Ny
aXB0VHlwZXMuaCIKKyNpbmNsdWRlICJVc2VyU3R5bGVTaGVldFR5cGVzLmgiCisjaW5jbHVkZSA8
ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworI2lmIEVOQUJMRShVU0VSX01F
U1NBR0VfSEFORExFUlMpCisjaW5jbHVkZSAiVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvclR5
cGVzLmgiCisjZW5kaWYKKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisjaW5jbHVk
ZSAiQ29udGVudEV4dGVuc2lvbkFjdGlvbnMuaCIKKyNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9u
c0JhY2tlbmQuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERvY3Vt
ZW50TG9hZGVyOworY2xhc3MgUGFnZTsKK2NsYXNzIFJlc291cmNlUmVxdWVzdDsKK2NsYXNzIFVS
TDsKKworZW51bSBjbGFzcyBSZXNvdXJjZVR5cGUgOiB1aW50MTZfdDsKKworc3RydWN0IFJlc291
cmNlTG9hZEluZm87CisKK25hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CitjbGFzcyBDb250
ZW50RXh0ZW5zaW9uc0JhY2tlbmQ7CitzdHJ1Y3QgQWN0aW9uOworfQorCitjbGFzcyBVc2VyQ29u
dGVudFByb3ZpZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8VXNlckNvbnRlbnRQcm92aWRlcj4gewor
cHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIFVzZXJDb250ZW50UHJvdmlkZXIoKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5Vc2VyQ29udGVudFByb3ZpZGVyKCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgZm9yRWFjaFVzZXJTY3JpcHQoY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkKERPTVdy
YXBwZXJXb3JsZCYsIGNvbnN0IFVzZXJTY3JpcHQmKT4mKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGZvckVhY2hVc2VyU3R5bGVTaGVldChjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29u
c3QgVXNlclN0eWxlU2hlZXQmKT4mKSBjb25zdCA9IDA7CisKKyNpZiBFTkFCTEUoVVNFUl9NRVNT
QUdFX0hBTkRMRVJTKQorICAgIHZpcnR1YWwgY29uc3QgVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3Jp
cHRvck1hcCYgdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMoKSBjb25zdCA9IDA7CisjZW5k
aWYKKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisgICAgdmlydHVhbCBDb250ZW50
RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kJiB1c2VyQ29udGVudEV4dGVuc2lv
bkJhY2tlbmQoKSA9IDA7CisjZW5kaWYKKworICAgIHZvaWQgYWRkUGFnZShQYWdlJik7CisgICAg
dm9pZCByZW1vdmVQYWdlKFBhZ2UmKTsKKworCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9O
UykKKyAgICAvLyBGSVhNRTogVGhlc2UgZG9uJ3QgcmVhbGx5IGJlbG9uZyBoZXJlLiBUaGV5IHNo
b3VsZCBwcm9iYWJseSBidW5kbGVkIHVwIGluIHRoZSBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQK
KyAgICAvLyB3aGljaCBzaG91bGQgYWx3YXlzIGV4aXN0LgorICAgIENvbnRlbnRFeHRlbnNpb25z
OjpCbG9ja2VkU3RhdHVzIHByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKFJlc291
cmNlUmVxdWVzdCYsIFJlc291cmNlVHlwZSwgRG9jdW1lbnRMb2FkZXImIGluaXRpYXRpbmdEb2N1
bWVudExvYWRlcik7CisgICAgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb24+IGFjdGlv
bnNGb3JSZXNvdXJjZUxvYWQoY29uc3QgUmVzb3VyY2VMb2FkSW5mbyYsIERvY3VtZW50TG9hZGVy
JiBpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIpOworI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZUluQWxs
RnJhbWVzSW5BbGxQYWdlcygpOworCitwcml2YXRlOgorICAgIEhhc2hTZXQ8UGFnZSo+IG1fcGFn
ZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVc2VyQ29udGVu
dFByb3ZpZGVyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlck1lc3NhZ2VIYW5kbGVy
RGVzY3JpcHRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlck1lc3Nh
Z2VIYW5kbGVyRGVzY3JpcHRvci5oCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
NTQsOCArNTQsOCBAQCBwdWJsaWM6CiAgICAgfQogICAgIFdFQkNPUkVfRVhQT1JUIH5Vc2VyTWVz
c2FnZUhhbmRsZXJEZXNjcmlwdG9yKCk7CiAKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUo
KTsKLSAgICBET01XcmFwcGVyV29ybGQmIHdvcmxkKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRE9NV3JhcHBlcldv
cmxkJiB3b3JsZCgpOwogCiAgICAgQ2xpZW50KiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2Ns
aWVudDsgfQogICAgIHZvaWQgaW52YWxpZGF0ZUNsaWVudCgpIHsgbV9jbGllbnQgPSBudWxscHRy
OyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3Bh
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlck1lc3NhZ2VIYW5k
bGVyc05hbWVzcGFjZS5jcHAJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUz
LDE1ICs1Myw5IEBAIFVzZXJNZXNzYWdlSGFuZGxlciogVXNlck1lc3NhZ2VIYW5kbGVyc04KICAg
ICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAotICAgIGNvbnN0IGF1
dG8qIHVzZXJDb250ZW50Q29udHJvbGxlciA9IHBhZ2UtPnVzZXJDb250ZW50Q29udHJvbGxlcigp
OwotICAgIGlmICghdXNlckNvbnRlbnRDb250cm9sbGVyKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIGNvbnN0IGF1dG8qIHVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzID0gdXNl
ckNvbnRlbnRDb250cm9sbGVyLT51c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycygpOwotICAg
IGlmICghdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgUmVmUHRyPFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3I+IGRlc2NyaXB0
b3IgPSB1c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycy0+Z2V0KHN0ZDo6bWFrZV9wYWlyKG5h
bWUsICZ3b3JsZCkpOworICAgIGF1dG8mIGRlc2NyaXB0b3JzID0gcGFnZS0+dXNlckNvbnRlbnRQ
cm92aWRlcigpLnVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzKCk7CisgICAgCisgICAgUmVm
UHRyPFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3I+IGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9y
cy5nZXQoc3RkOjptYWtlX3BhaXIobmFtZSwgJndvcmxkKSk7CiAgICAgaWYgKCFkZXNjcmlwdG9y
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtNzAsNyArNjQsNyBAQCBVc2VyTWVzc2Fn
ZUhhbmRsZXIqIFVzZXJNZXNzYWdlSGFuZGxlcnNOCiAgICAgICAgICAgICByZXR1cm4gJmhhbmRs
ZXIuZ2V0KCk7CiAgICAgfQogCi0gICAgYXV0byBsaXZlSGFuZGxlcnMgPSB1c2VyTWVzc2FnZUhh
bmRsZXJEZXNjcmlwdG9ycy0+dmFsdWVzKCk7CisgICAgYXV0byBsaXZlSGFuZGxlcnMgPSBkZXNj
cmlwdG9ycy52YWx1ZXMoKTsKICAgICBtX21lc3NhZ2VIYW5kbGVycy5yZW1vdmVBbGxNYXRjaGlu
ZyhbbGl2ZUhhbmRsZXJzXShjb25zdCBSZWY8VXNlck1lc3NhZ2VIYW5kbGVyPiYgaGFuZGxlcikg
ewogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGxpdmVIYW5kbGVyIDogbGl2ZUhhbmRsZXJzKSB7
CiAgICAgICAgICAgICBpZiAobGl2ZUhhbmRsZXIuZ2V0KCkgPT0gJmhhbmRsZXItPmRlc2NyaXB0
b3IoKSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNiBAQAorMjAxNi0wMy0xNCAg
U2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBhIGJhc2VVUkwgcGFy
YW1ldGVyIHRvIF9XS1VzZXJTdHlsZVNoZWV0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTUyMTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAtIE1vdmVzIHRvIGEgbW9kZWwgZm9yIHVzZXIgY29udGVudCB3
aGVyZSBpbnN0ZWFkIG9mIHVzaW5nIGEgV2ViQ29yZTo6VXNlckNvbnRlbnRDb250cm9sbGVyCisg
ICAgICAgICAgb2JqZWN0LCB3ZSBpbXBsZW1lbnQgdGhlIG5ldyBXZWJDb3JlOjpVc2VyQ29udGVu
dFByb3ZpZGVyIGludGVyZmFjZSAob24gdGhlIGV4aXN0aW5nIAorICAgICAgICAgIFdlYlVzZXJD
b250ZW50Q29udHJvbGxlciBvYmplY3QpLgorICAgICAgICAtIFVzZXMgdGhpcyB0byBtYWludGFp
biBtYXBzIG9mIFVzZXJTdHlsZXNTaGVldHMgYW5kIFVzZXJTY3JpcHRzIGFsb25nIHdpdGggdGhl
aXIgaWRlbnRpZmllcnMsCisgICAgICAgICAgZnJlZWluZyB1cCB0aGUgVVJMLCB3aGljaCBoYWQg
YmVlbiBhY3RpbmcgYXMgdGhlIGlkZW50aWZpZXIsIHRvIGJlIHVzZWQgYXMgdGhlIGJhc2VVUkwg
d2hpY2gKKyAgICAgICAgICB3YXMgd2hhdCBpdCB3YXMgaW50ZW5kZWQgZm9yLgorICAgICAgICAt
IEFkZHMgYSBiYXNlVVJMIHByb3BlcnR5IHRvIF9XS1VzZXJTdHlsZVNoZWV0LgorCisgICAgICAg
ICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICBBZGQgbmV3IGZp
bGVzLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHk6CisgICAgICAgICho
ZWFkZXJzX2Zvcl90eXBlKToKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHNlbmRpbmcgV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLgorCisgICAgICAgICogU2hhcmVkL1dlYlVzZXJD
b250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpX
ZWJVc2VyU2NyaXB0RGF0YTo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlclNjcmlw
dERhdGE6OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJTdHlsZVNoZWV0RGF0YTo6
ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlclN0eWxlU2hlZXREYXRhOjpkZWNvZGUp
OgorICAgICAgICAqIFNoYXJlZC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuaDog
QWRkZWQuCisgICAgICAgIEFkZCBoZWxwZXIgdHlwZXMgZm9yIHNlbmRpbmcgdXNlciBjb250ZW50
IG92ZXIgSVBDLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElVc2VyU2NyaXB0LmNwcDoK
KyAgICAgICAgKEFQSTo6VXNlclNjcmlwdDo6Z2VuZXJhdGVVbmlxdWVVUkwpOgorICAgICAgICAo
QVBJOjpVc2VyU2NyaXB0OjpVc2VyU2NyaXB0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQ
SVVzZXJTY3JpcHQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSVVzZXJTdHlsZVNoZWV0
LmNwcDoKKyAgICAgICAgKEFQSTo6VXNlclN0eWxlU2hlZXQ6OmdlbmVyYXRlVW5pcXVlVVJMKToK
KyAgICAgICAgKEFQSTo6VXNlclN0eWxlU2hlZXQ6OlVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0FQSVVzZXJTdHlsZVNoZWV0Lmg6CisgICAgICAgIEFkZCBpZGVudGlm
aWVycyBmb3IgdHJhY2tpbmcgYWNyb3NzIHByb2Nlc3Nlcy4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLVXNlclN0eWxlU2hlZXQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL19XS1VzZXJTdHlsZVNoZWV0Lm1tOgorICAgICAgICAoLVtfV0tVc2VyU3R5bGVTaGVl
dCBpbml0V2l0aFNvdXJjZTpmb3JNYWluRnJhbWVPbmx5OmxlZ2FjeVdoaXRlbGlzdDpsZWdhY3lC
bGFja2xpc3Q6YmFzZVVSTDp1c2VyQ29udGVudFdvcmxkOl0pOgorICAgICAgICAoLVtfV0tVc2Vy
U3R5bGVTaGVldCBiYXNlVVJMXSk6CisgICAgICAgIEFkZCBuZXcgaW5pdGlhbGl6ZXIgd2hpY2gg
dGFrZXMgYSBiYXNlVVJMIGFzIHdlbGwgYXMgYW4gYWNjZXNzb3IgZm9yIHRoZSBiYXNlVVJMLgor
CisgICAgICAgICogVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxl
clByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJv
eHk6OmFkZFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXJQcm94eTo6YWRkVXNlclNjcmlwdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50
Q29udHJvbGxlclByb3h5OjpyZW1vdmVVc2VyU2NyaXB0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFkZFVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92ZVVzZXJTdHlsZVNo
ZWV0KToKKyAgICAgICAgUGFzcyBpZGVudGlmaWVycyBhcyB3ZWxsIGFzIHVzZXIgY29udGVudC4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6YWRkVXNlclNjcmlwdCk6CisgICAg
ICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlOjphZGRVc2VyU3R5bGVTaGVldCk6CisgICAgICAg
IE1vdmUgdXNlciBjb250ZW50IGluIHZpYSBtb3ZlIHNlbWFudGljcyByYXRoZXIgdGhhbiB1c2lu
ZyBhIHVuaXF1ZV9wdHIuCisKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGU6OnJlbW92
ZVVzZXJTY3JpcHQpOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6cmVtb3ZlVXNl
clN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6cmVtb3ZlVXNl
clNjcmlwdHMpOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6cmVtb3ZlVXNlclN0
eWxlU2hlZXRzKToKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGU6OnJlbW92ZUFsbFVz
ZXJDb250ZW50KToKKyAgICAgICAgVXBkYXRlIGZvciBuZXcgZnVuY3Rpb24gc2lnbmF0dXJlcy4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpXZWJV
c2VyQ29udGVudENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENv
bnRyb2xsZXI6On5XZWJVc2VyQ29udGVudENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJDb250ZW50V29ybGRzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyQ29udGVudFdvcmxk
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlclNj
cmlwdHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92
ZVVzZXJTY3JpcHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6
OnJlbW92ZUFsbFVzZXJTY3JpcHRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRD
b250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVBbGxVc2VyU3R5bGVTaGVldHMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHRN
ZXNzYWdlSGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXI6OnJlbW92ZVVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlcik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlckNvbnRlbnRFeHRlbnNpb25zKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyQ29udGVudEV4
dGVuc2lvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVt
b3ZlQWxsVXNlckNvbnRlbnRFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNv
bnRlbnRDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0SW50ZXJuYWwpOgorICAgICAgICAoV2ViS2l0
OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTY3JpcHRXaXRoVVJMKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU2Ny
aXB0SW50ZXJuYWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6
OnJlbW92ZVVzZXJTY3JpcHRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250
cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldEludGVybmFsKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclN0eWxlU2hlZXRXaXRoVVJM
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2Vy
U3R5bGVTaGVldEludGVybmFsKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250
cm9sbGVyOjpyZW1vdmVVc2VyU3R5bGVTaGVldHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXI6OnJlbW92ZUFsbFVzZXJDb250ZW50KToKKyAgICAgICAgKFdlYktp
dDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpmb3JFYWNoVXNlclNjcmlwdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6Zm9yRWFjaFVzZXJTdHlsZVNoZWV0
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJv
bGxlci5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRD
b250cm9sbGVyLm1lc3NhZ2VzLmluOgorICAgICAgICBDb252ZXJ0IHRvIGluaGVyaXRpbmcgZnJv
bSBVc2VyQ29udGVudFByb3ZpZGVyLCByYXRoZXIgdGhhbiBjb250YWluaW5nIGEgVXNlckNvbnRl
bnRDb250cm9sbGVyLgorICAgICAgICBUaGlzIG1lYW5zIGFkZGluZyB0aGUgc3RvcmFnZSBmb3Ig
dGhlIHVzZXIgY29udGVudCwgd2hpY2ggaGFzIGJlZW4gc2ltcGxpZmllZCB0byBhdm9pZCB1c2lu
ZworICAgICAgICB1bmlxdWVfcHRycy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6YWRkVXNlclNjcmlwdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmFkZFVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6cmVtb3ZlQWxsVXNlckNvbnRlbnQpOgorICAgICAgICBVcGRhdGUgdG8g
Y2FsbCB0aGUgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLCByYXRoZXIgdGhhbiBnb2luZyB0byB0
aGUgVXNlckNvbnRlbnRDb250cm9sbGVyLCB3aGljaAorICAgICAgICBubyBsb25nZXIgZXhpc3Rz
LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUdyb3VwUHJveHk6OnVzZXJDb250ZW50Q29udHJvbGxl
cik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5Lmg6Cisg
ICAgICAgIFJldHVybiB0aGUgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyIHJhdGhlciB0aGFuIG9s
ZCBVc2VyQ29udGVudENvbnRyb2xsZXIuCisKIDIwMTYtMDMtMTQgIEJldGggRGFraW4gIDxiZGFr
aW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVuYWJsZSB0byBjb21taXQgcHJldmlld3MgaW4gTW9i
aWxlIFNhZmFyaQpJbmRleDogU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE5ODE0NykKKysr
IFNvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yNzgsNiAr
Mjc4LDcgQEAgc2V0KFdlYktpdDJfU09VUkNFUwogICAgIFNoYXJlZC9XZWJSZW5kZXJMYXllci5j
cHAKICAgICBTaGFyZWQvV2ViUmVuZGVyT2JqZWN0LmNwcAogICAgIFNoYXJlZC9XZWJUb3VjaEV2
ZW50LmNwcAorICAgIFNoYXJlZC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuY3Bw
CiAgICAgU2hhcmVkL1dlYldoZWVsRXZlbnQuY3BwCiAKICAgICBTaGFyZWQvQVBJL0FQSUFycmF5
LmNwcApAQCAtNDA0LDYgKzQwNSw4IEBAIHNldChXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nl
c3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvQVBJ
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHAKICAgICBVSVByb2Nlc3MvQVBJL0FQSVVzZXJD
b250ZW50V29ybGQuY3BwCisgICAgVUlQcm9jZXNzL0FQSS9BUElVc2VyU2NyaXB0LmNwcAorICAg
IFVJUHJvY2Vzcy9BUEkvQVBJVXNlclN0eWxlU2hlZXQuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9B
UElXZWJzaXRlRGF0YVN0b3JlLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvQVBJV2luZG93RmVhdHVy
ZXMuY3BwCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5
CShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdC9tZXNz
YWdlcy5weQkod29ya2luZyBjb3B5KQpAQCAtMzc4LDYgKzM3OCw4IEBAIGRlZiBoZWFkZXJzX2Zv
cl90eXBlKHR5cGUpOgogICAgICAgICAnV2ViS2l0OjpXZWJUb3VjaEV2ZW50JzogWyciV2ViRXZl
bnQuaCInXSwKICAgICAgICAgJ1dlYktpdDo6V2ViV2hlZWxFdmVudCc6IFsnIldlYkV2ZW50Lmgi
J10sCiAgICAgICAgICdXZWJLaXQ6OldlYlNjcmlwdE1lc3NhZ2VIYW5kbGVySGFuZGxlJzogWyci
V2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIuaCInXSwKKyAgICAgICAgJ3N0cnVjdCBXZWJLaXQ6Oldl
YlVzZXJTY3JpcHREYXRhJzogWyciV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmgi
J10sCisgICAgICAgICdzdHJ1Y3QgV2ViS2l0OjpXZWJVc2VyU3R5bGVTaGVldERhdGEnOiBbJyJX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuaCInXSwKICAgICAgICAgJ3N0ZDo6Y2hy
b25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQnOiBbJzxjaHJvbm8+J10sCiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5
cGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViVXNlckNvbnRl
bnRDb250cm9sbGVyRGF0YVR5cGVzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmgiCisKKyNpbmNsdWRl
ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQg
V2ViVXNlclNjcmlwdERhdGE6OmVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IGlkZW50aWZpZXI7CisgICAgZW5jb2RlciA8PCB3b3Js
ZElkZW50aWZpZXI7CisgICAgZW5jb2RlciA8PCB1c2VyU2NyaXB0OworfQorCitib29sIFdlYlVz
ZXJTY3JpcHREYXRhOjpkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29kZXIsIFdlYlVz
ZXJTY3JpcHREYXRhJiBkYXRhKQoreworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGF0YS5pZGVu
dGlmaWVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
ZGF0YS53b3JsZElkZW50aWZpZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShkYXRhLnVzZXJTY3JpcHQpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViVXNlclN0eWxlU2hlZXREYXRhOjplbmNvZGUo
SVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBp
ZGVudGlmaWVyOworICAgIGVuY29kZXIgPDwgd29ybGRJZGVudGlmaWVyOworICAgIGVuY29kZXIg
PDwgdXNlclN0eWxlU2hlZXQ7Cit9CisKK2Jvb2wgV2ViVXNlclN0eWxlU2hlZXREYXRhOjpkZWNv
ZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29kZXIsIFdlYlVzZXJTdHlsZVNoZWV0RGF0YSYg
ZGF0YSkKK3sKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGEuaWRlbnRpZmllcikpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGEud29ybGRJZGVu
dGlmaWVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
ZGF0YS51c2VyU3R5bGVTaGVldCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlVzZXJDb250ZW50Q29u
dHJvbGxlckRhdGFUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFdlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlc19oCisjZGVm
aW5lIFdlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlc19oCisKKyNpbmNsdWRlIDxXZWJD
b3JlL1VzZXJTY3JpcHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1VzZXJTdHlsZVNoZWV0Lmg+CisK
K25hbWVzcGFjZSBJUEMgeworY2xhc3MgQXJndW1lbnREZWNvZGVyOworY2xhc3MgQXJndW1lbnRF
bmNvZGVyOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RydWN0IFdlYlVzZXJTY3JpcHRE
YXRhIHsKKyAgICB2b2lkIGVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0OworICAg
IHN0YXRpYyBib29sIGRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYsIFdlYlVzZXJTY3JpcHRE
YXRhJik7CisKKyAgICB1aW50NjRfdCBpZGVudGlmaWVyOworICAgIHVpbnQ2NF90IHdvcmxkSWRl
bnRpZmllcjsKKyAgICBXZWJDb3JlOjpVc2VyU2NyaXB0IHVzZXJTY3JpcHQ7Cit9OworCitzdHJ1
Y3QgV2ViVXNlclN0eWxlU2hlZXREYXRhIHsKKyAgICB2b2lkIGVuY29kZShJUEM6OkFyZ3VtZW50
RW5jb2RlciYpIGNvbnN0OworICAgIHN0YXRpYyBib29sIGRlY29kZShJUEM6OkFyZ3VtZW50RGVj
b2RlciYsIFdlYlVzZXJTdHlsZVNoZWV0RGF0YSYpOworCisgICAgdWludDY0X3QgaWRlbnRpZmll
cjsKKyAgICB1aW50NjRfdCB3b3JsZElkZW50aWZpZXI7CisgICAgV2ViQ29yZTo6VXNlclN0eWxl
U2hlZXQgdXNlclN0eWxlU2hlZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIFdlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlc19oCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJTY3JpcHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlclNjcmlwdC5jcHAJKHJldmlzaW9uIDE5
ODE0NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlclNjcmlwdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDExICszOSwyMCBAQCBzdGF0aWMgdWludDY0X3QgZ2VuZXJh
dGVJZGVudGlmaWVyKCkKIAogV2ViQ29yZTo6VVJMIFVzZXJTY3JpcHQ6OmdlbmVyYXRlVW5pcXVl
VVJMKCkKIHsKKyAgICBzdGF0aWMgdWludDY0X3QgaWRlbnRpZmllcjsKKwogICAgIFN0cmluZ0J1
aWxkZXIgdXJsU3RyaW5nQnVpbGRlcjsKICAgICB1cmxTdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVy
YWwoInVzZXItc2NyaXB0OiIpOwotICAgIHVybFN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKGdl
bmVyYXRlSWRlbnRpZmllcigpKTsKKyAgICB1cmxTdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcigr
K2lkZW50aWZpZXIpOwogICAgIHJldHVybiB7IHsgfSwgdXJsU3RyaW5nQnVpbGRlci50b1N0cmlu
ZygpIH07CiB9CiAKK1VzZXJTY3JpcHQ6OlVzZXJTY3JpcHQoV2ViQ29yZTo6VXNlclNjcmlwdCB1
c2VyU2NyaXB0LCBBUEk6OlVzZXJDb250ZW50V29ybGQmIHdvcmxkKQorICAgIDogbV9pZGVudGlm
aWVyKGdlbmVyYXRlSWRlbnRpZmllcigpKQorICAgICwgbV91c2VyU2NyaXB0KHVzZXJTY3JpcHQp
CisgICAgLCBtX3dvcmxkKHdvcmxkKQoreworfQorCiAKIH0gLy8gbmFtZXNwYWNlIEFQSQpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyU2NyaXB0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyU2NyaXB0LmgJKHJldmlz
aW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlclNjcmlw
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMSArNDEsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFVzZXJTY3JpcHQoV1RGTW92ZSh1c2VyU2NyaXB0KSwgd29ybGQp
KTsKICAgICB9CiAKLSAgICBVc2VyU2NyaXB0KFdlYkNvcmU6OlVzZXJTY3JpcHQgdXNlclNjcmlw
dCwgQVBJOjpVc2VyQ29udGVudFdvcmxkJiB3b3JsZCkKLSAgICAgICAgOiBtX3VzZXJTY3JpcHQo
dXNlclNjcmlwdCkKLSAgICAgICAgLCBtX3dvcmxkKHdvcmxkKQotICAgIHsKLSAgICB9CisgICAg
VXNlclNjcmlwdChXZWJDb3JlOjpVc2VyU2NyaXB0LCBBUEk6OlVzZXJDb250ZW50V29ybGQmKTsK
KworICAgIHVpbnQ2NF90IGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7
IH0KIAogICAgIGNvbnN0IFdlYkNvcmU6OlVzZXJTY3JpcHQmIHVzZXJTY3JpcHQoKSBjb25zdCB7
IHJldHVybiBtX3VzZXJTY3JpcHQ7IH0KICAgICAKQEAgLTUzLDYgKzUxLDcgQEAgcHVibGljOgog
ICAgIGNvbnN0IFVzZXJDb250ZW50V29ybGQmIHVzZXJDb250ZW50V29ybGQoKSBjb25zdCB7IHJl
dHVybiBtX3dvcmxkOyB9CiAgICAgCiBwcml2YXRlOgorICAgIHVpbnQ2NF90IG1faWRlbnRpZmll
cjsKICAgICBXZWJDb3JlOjpVc2VyU2NyaXB0IG1fdXNlclNjcmlwdDsKICAgICBSZWY8VXNlckNv
bnRlbnRXb3JsZD4gbV93b3JsZDsKIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0FQSVVzZXJTdHlsZVNoZWV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0FQSVVzZXJTdHlsZVNoZWV0LmNwcAkocmV2aXNpb24gMTk4MTQ3KQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyU3R5bGVTaGVldC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDExICszOSwxOSBAQCBzdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVJZGVu
dGlmaWVyKCkKIAogV2ViQ29yZTo6VVJMIFVzZXJTdHlsZVNoZWV0OjpnZW5lcmF0ZVVuaXF1ZVVS
TCgpCiB7CisgICAgc3RhdGljIHVpbnQ2NF90IGlkZW50aWZpZXI7CisKICAgICBTdHJpbmdCdWls
ZGVyIHVybFN0cmluZ0J1aWxkZXI7CiAgICAgdXJsU3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFs
KCJ1c2VyLXN0eWxlLXNoZWV0OiIpOwotICAgIHVybFN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVy
KGdlbmVyYXRlSWRlbnRpZmllcigpKTsKKyAgICB1cmxTdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJl
cigrK2lkZW50aWZpZXIpOwogICAgIHJldHVybiB7IHsgfSwgdXJsU3RyaW5nQnVpbGRlci50b1N0
cmluZygpIH07CiB9CiAKK1VzZXJTdHlsZVNoZWV0OjpVc2VyU3R5bGVTaGVldChXZWJDb3JlOjpV
c2VyU3R5bGVTaGVldCB1c2VyU3R5bGVTaGVldCwgQVBJOjpVc2VyQ29udGVudFdvcmxkJiB3b3Js
ZCkKKyAgICA6IG1faWRlbnRpZmllcihnZW5lcmF0ZUlkZW50aWZpZXIoKSkKKyAgICAsIG1fdXNl
clN0eWxlU2hlZXQodXNlclN0eWxlU2hlZXQpCisgICAgLCBtX3dvcmxkKHdvcmxkKQoreworfQog
CiB9IC8vIG5hbWVzcGFjZSBBUEkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
QVBJVXNlclN0eWxlU2hlZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0FQSVVzZXJTdHlsZVNoZWV0LmgJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlclN0eWxlU2hlZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDEsMTEgKzQxLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBV
c2VyU3R5bGVTaGVldChXVEZNb3ZlKHVzZXJTdHlsZVNoZWV0KSwgd29ybGQpKTsKICAgICB9CiAK
LSAgICBVc2VyU3R5bGVTaGVldChXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCB1c2VyU3R5bGVTaGVl
dCwgQVBJOjpVc2VyQ29udGVudFdvcmxkJiB3b3JsZCkKLSAgICAgICAgOiBtX3VzZXJTdHlsZVNo
ZWV0KHVzZXJTdHlsZVNoZWV0KQotICAgICAgICAsIG1fd29ybGQod29ybGQpCi0gICAgewotICAg
IH0KKyAgICBVc2VyU3R5bGVTaGVldChXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCwgQVBJOjpVc2Vy
Q29udGVudFdvcmxkJik7CisKKyAgICB1aW50NjRfdCBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1
cm4gbV9pZGVudGlmaWVyOyB9CiAKICAgICBjb25zdCBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCYg
dXNlclN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBtX3VzZXJTdHlsZVNoZWV0OyB9CiAKQEAg
LTUzLDYgKzUxLDcgQEAgcHVibGljOgogICAgIGNvbnN0IFVzZXJDb250ZW50V29ybGQmIHVzZXJD
b250ZW50V29ybGQoKSBjb25zdCB7IHJldHVybiBtX3dvcmxkOyB9CiAKIHByaXZhdGU6CisgICAg
dWludDY0X3QgbV9pZGVudGlmaWVyOwogICAgIFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0IG1fdXNl
clN0eWxlU2hlZXQ7CiAgICAgUmVmPFVzZXJDb250ZW50V29ybGQ+IG1fd29ybGQ7CiB9OwpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyU3R5bGVTaGVldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNl
clN0eWxlU2hlZXQuaAkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9fV0tVc2VyU3R5bGVTaGVldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwx
MSArMzgsMTMgQEAgV0tfQ0xBU1NfQVZBSUxBQkxFKFdLX01BQ19UQkEsIFdLX0lPU19UQgogCiBA
cHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TU3RyaW5nICpzb3VyY2U7CiAK
K0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgY29weSkgTlNVUkwgKmJhc2VVUkw7CisK
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgZ2V0dGVyPWlzRm9yTWFpbkZyYW1lT25s
eSkgQk9PTCBmb3JNYWluRnJhbWVPbmx5OwogCiAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTb3Vy
Y2U6KE5TU3RyaW5nICopc291cmNlIGZvck1haW5GcmFtZU9ubHk6KEJPT0wpZm9yTWFpbkZyYW1l
T25seTsKLQogLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU291cmNlOihOU1N0cmluZyAqKXNvdXJj
ZSBmb3JNYWluRnJhbWVPbmx5OihCT09MKWZvck1haW5GcmFtZU9ubHkgbGVnYWN5V2hpdGVsaXN0
OihXS19BUlJBWShOU1N0cmluZyAqKSAqKWxlZ2FjeVdoaXRlbGlzdCBsZWdhY3lCbGFja2xpc3Q6
KFdLX0FSUkFZKE5TU3RyaW5nICopICopbGVnYWN5QmxhY2tsaXN0IHVzZXJDb250ZW50V29ybGQ6
KF9XS1VzZXJDb250ZW50V29ybGQgKil1c2VyQ29udGVudFdvcmxkOworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoU291cmNlOihOU1N0cmluZyAqKXNvdXJjZSBmb3JNYWluRnJhbWVPbmx5OihCT09M
KWZvck1haW5GcmFtZU9ubHkgbGVnYWN5V2hpdGVsaXN0OihXS19BUlJBWShOU1N0cmluZyAqKSAq
KWxlZ2FjeVdoaXRlbGlzdCBsZWdhY3lCbGFja2xpc3Q6KFdLX0FSUkFZKE5TU3RyaW5nICopICop
bGVnYWN5QmxhY2tsaXN0IGJhc2VVUkw6KE5TVVJMICopYmFzZVVSTCB1c2VyQ29udGVudFdvcmxk
OihfV0tVc2VyQ29udGVudFdvcmxkICopdXNlckNvbnRlbnRXb3JsZDsKIAogQGVuZAogCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJTdHlsZVNoZWV0Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNl
clN0eWxlU2hlZXQubW0JKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvX1dLVXNlclN0eWxlU2hlZXQubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4
LDYgKzI4LDcgQEAKIAogI2ltcG9ydCAiQVBJQXJyYXkuaCIKICNpbXBvcnQgIldLTlNBcnJheS5o
IgorI2ltcG9ydCAiV0tOU1VSTEV4dHJhcy5oIgogI2ltcG9ydCAiV2ViS2l0MkluaXRpYWxpemUu
aCIKICNpbXBvcnQgIl9XS1VzZXJDb250ZW50V29ybGRJbnRlcm5hbC5oIgogCkBAIC02MSwxMSAr
NjIsMjkgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU291cmNlOihOU1N0cmluZwogICAgIHJl
dHVybiBzZWxmOwogfQogCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTb3VyY2U6KE5TU3RyaW5n
ICopc291cmNlIGZvck1haW5GcmFtZU9ubHk6KEJPT0wpZm9yTWFpbkZyYW1lT25seSBsZWdhY3lX
aGl0ZWxpc3Q6KFdLX0FSUkFZKE5TU3RyaW5nICopICopbGVnYWN5V2hpdGVsaXN0IGxlZ2FjeUJs
YWNrbGlzdDooV0tfQVJSQVkoTlNTdHJpbmcgKikgKilsZWdhY3lCbGFja2xpc3QgYmFzZVVSTDoo
TlNVUkwgKiliYXNlVVJMIHVzZXJDb250ZW50V29ybGQ6KF9XS1VzZXJDb250ZW50V29ybGQgKil1
c2VyQ29udGVudFdvcmxkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAg
ICAgIHJldHVybiBuaWw7CisKKyAgICAvLyBGSVhNRTogSW4gdGhlIEFQSSB0ZXN0LCB3ZSBjYW4g
dXNlIGdlbmVyYXRlVW5pcXVlVVJMIGJlbG93IGJlZm9yZSB0aGUgQVBJOjpPYmplY3QgY29uc3Ry
dWN0b3IgaGFzIGRvbmUgdGhpcy4uLiB3aGVyZSBzaG91bGQgdGhpcyByZWFsbHkgYmU/CisgICAg
V2ViS2l0OjpJbml0aWFsaXplV2ViS2l0MigpOworCisgICAgQVBJOjpPYmplY3Q6OmNvbnN0cnVj
dEluV3JhcHBlcjxBUEk6OlVzZXJTdHlsZVNoZWV0PihzZWxmLCBXZWJDb3JlOjpVc2VyU3R5bGVT
aGVldCB7IFdURjo6U3RyaW5nKHNvdXJjZSksIHsgeyB9LCBXVEY6OlN0cmluZyhbYmFzZVVSTCBf
d2ViX29yaWdpbmFsRGF0YUFzV1RGU3RyaW5nXSkgfSwgQVBJOjp0b1N0cmluZ1ZlY3RvcihsZWdh
Y3lXaGl0ZWxpc3QpLCBBUEk6OnRvU3RyaW5nVmVjdG9yKGxlZ2FjeUJsYWNrbGlzdCksIGZvck1h
aW5GcmFtZU9ubHkgPyBXZWJDb3JlOjpJbmplY3RJblRvcEZyYW1lT25seSA6IFdlYkNvcmU6Oklu
amVjdEluQWxsRnJhbWVzLCBXZWJDb3JlOjpVc2VyU3R5bGVVc2VyTGV2ZWwgfSwgKnVzZXJDb250
ZW50V29ybGQtPl91c2VyQ29udGVudFdvcmxkKTsKKworICAgIHJldHVybiBzZWxmOworfQorCiAt
IChOU1N0cmluZyAqKXNvdXJjZQogewogICAgIHJldHVybiBfdXNlclN0eWxlU2hlZXQtPnVzZXJT
dHlsZVNoZWV0KCkuc291cmNlKCk7CiB9CiAKKy0gKE5TVVJMICopYmFzZVVSTAoreworICAgIHJl
dHVybiBfdXNlclN0eWxlU2hlZXQtPnVzZXJTdHlsZVNoZWV0KCkudXJsKCk7Cit9CisKIC0gKEJP
T0wpaXNGb3JNYWluRnJhbWVPbmx5CiB7CiAgICAgcmV0dXJuIF91c2VyU3R5bGVTaGVldC0+dXNl
clN0eWxlU2hlZXQoKS5pbmplY3RlZEZyYW1lcygpID09IFdlYkNvcmU6OkluamVjdEluVG9wRnJh
bWVPbmx5OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVz
ZXJDb250ZW50Q29udHJvbGxlclByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3Bw
CShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVXNlckNvbnRl
bnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Myw2ICszMyw3IEBACiAjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIldlYlBy
b2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIldlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyLmgiCisjaW5j
bHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmgiCiAjaW5jbHVkZSAiV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXJQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuaD4KQEAgLTgwLDE0ICs4MSwxNCBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29u
dHJvbGxlclByb3h5OjphZGRQCiAgICAgICAgIHVzZXJDb250ZW50V29ybGRzLmFwcGVuZChzdGQ6
Om1ha2VfcGFpcih3b3JsZC5rZXktPmlkZW50aWZpZXIoKSwgd29ybGQua2V5LT5uYW1lKCkpKTsK
ICAgICB3ZWJQcm9jZXNzUHJveHkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXI6OkFkZFVzZXJDb250ZW50V29ybGRzKHVzZXJDb250ZW50V29ybGRz
KSwgbV9pZGVudGlmaWVyKTsKIAotICAgIFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0X3QsIFdlYkNv
cmU6OlVzZXJTY3JpcHQ+PiB1c2VyU2NyaXB0czsKKyAgICBWZWN0b3I8V2ViVXNlclNjcmlwdERh
dGE+IHVzZXJTY3JpcHRzOwogICAgIGZvciAoY29uc3QgYXV0byYgdXNlclNjcmlwdCA6IG1fdXNl
clNjcmlwdHMtPmVsZW1lbnRzT2ZUeXBlPEFQSTo6VXNlclNjcmlwdD4oKSkKLSAgICAgICAgdXNl
clNjcmlwdHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHVzZXJTY3JpcHQtPnVzZXJDb250ZW50V29y
bGQoKS5pZGVudGlmaWVyKCksIHVzZXJTY3JpcHQtPnVzZXJTY3JpcHQoKSkpOworICAgICAgICB1
c2VyU2NyaXB0cy5hcHBlbmQoeyB1c2VyU2NyaXB0LT5pZGVudGlmaWVyKCksIHVzZXJTY3JpcHQt
PnVzZXJDb250ZW50V29ybGQoKS5pZGVudGlmaWVyKCksIHVzZXJTY3JpcHQtPnVzZXJTY3JpcHQo
KSB9KTsKICAgICB3ZWJQcm9jZXNzUHJveHkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OkFkZFVzZXJTY3JpcHRzKHVzZXJTY3JpcHRzKSwgbV9p
ZGVudGlmaWVyKTsKIAotICAgIFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0X3QsIFdlYkNvcmU6OlVz
ZXJTdHlsZVNoZWV0Pj4gdXNlclN0eWxlU2hlZXRzOworICAgIFZlY3RvcjxXZWJVc2VyU3R5bGVT
aGVldERhdGE+IHVzZXJTdHlsZVNoZWV0czsKICAgICBmb3IgKGNvbnN0IGF1dG8mIHVzZXJTdHls
ZVNoZWV0IDogbV91c2VyU3R5bGVTaGVldHMtPmVsZW1lbnRzT2ZUeXBlPEFQSTo6VXNlclN0eWxl
U2hlZXQ+KCkpCi0gICAgICAgIHVzZXJTdHlsZVNoZWV0cy5hcHBlbmQoc3RkOjptYWtlX3BhaXIo
dXNlclN0eWxlU2hlZXQtPnVzZXJDb250ZW50V29ybGQoKS5pZGVudGlmaWVyKCksIHVzZXJTdHls
ZVNoZWV0LT51c2VyU3R5bGVTaGVldCgpKSk7CisgICAgICAgIHVzZXJTdHlsZVNoZWV0cy5hcHBl
bmQoeyB1c2VyU3R5bGVTaGVldC0+aWRlbnRpZmllcigpLCB1c2VyU3R5bGVTaGVldC0+dXNlckNv
bnRlbnRXb3JsZCgpLmlkZW50aWZpZXIoKSwgdXNlclN0eWxlU2hlZXQtPnVzZXJTdHlsZVNoZWV0
KCkgfSk7CiAgICAgd2ViUHJvY2Vzc1Byb3h5LmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpBZGRVc2VyU3R5bGVTaGVldHModXNlclN0eWxlU2hl
ZXRzKSwgbV9pZGVudGlmaWVyKTsKIAogICAgIFZlY3RvcjxXZWJTY3JpcHRNZXNzYWdlSGFuZGxl
ckhhbmRsZT4gbWVzc2FnZUhhbmRsZXJIYW5kbGVzOwpAQCAtMTY4LDcgKzE2OSw3IEBAIHZvaWQg
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFkZFUKICAgICBtX3VzZXJTY3JpcHRzLT5l
bGVtZW50cygpLmFwcGVuZCgmdXNlclNjcmlwdCk7CiAKICAgICBmb3IgKFdlYlByb2Nlc3NQcm94
eSogcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKQotICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6QWRkVXNlclNjcmlwdHMo
eyBzdGQ6Om1ha2VfcGFpcih3b3JsZC0+aWRlbnRpZmllcigpLCB1c2VyU2NyaXB0LnVzZXJTY3Jp
cHQoKSkgfSksIG1faWRlbnRpZmllcik7CisgICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpBZGRVc2VyU2NyaXB0cyh7
IHsgdXNlclNjcmlwdC5pZGVudGlmaWVyKCksIHdvcmxkLT5pZGVudGlmaWVyKCksIHVzZXJTY3Jp
cHQudXNlclNjcmlwdCgpIH0gfSksIG1faWRlbnRpZmllcik7CiB9CiAKIHZvaWQgV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92ZVVzZXJTY3JpcHQoQVBJOjpVc2VyU2NyaXB0JiB1
c2VyU2NyaXB0KQpAQCAtMTc2LDcgKzE3Nyw3IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyUHJveHk6OnJlbW8KICAgICBSZWY8QVBJOjpVc2VyQ29udGVudFdvcmxkPiB3b3JsZCA9IHVz
ZXJTY3JpcHQudXNlckNvbnRlbnRXb3JsZCgpOwogCiAgICAgZm9yIChXZWJQcm9jZXNzUHJveHkq
IHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykKLSAgICAgICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OlJlbW92ZVVzZXJTY3JpcHQo
d29ybGQtPmlkZW50aWZpZXIoKSwgdXNlclNjcmlwdC51c2VyU2NyaXB0KCkudXJsKCkuc3RyaW5n
KCkpLCBtX2lkZW50aWZpZXIpOworICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQo
TWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6UmVtb3ZlVXNlclNjcmlwdCh3b3Js
ZC0+aWRlbnRpZmllcigpLCB1c2VyU2NyaXB0LmlkZW50aWZpZXIoKSksIG1faWRlbnRpZmllcik7
CiAKICAgICBtX3VzZXJTY3JpcHRzLT5lbGVtZW50cygpLnJlbW92ZUFsbCgmdXNlclNjcmlwdCk7
CiAKQEAgLTIyMyw3ICsyMjQsNyBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
OjphZGRVCiAgICAgbV91c2VyU3R5bGVTaGVldHMtPmVsZW1lbnRzKCkuYXBwZW5kKCZ1c2VyU3R5
bGVTaGVldCk7CiAKICAgICBmb3IgKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcyA6IG1fcHJvY2Vz
c2VzKQotICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVz
ZXJDb250ZW50Q29udHJvbGxlcjo6QWRkVXNlclN0eWxlU2hlZXRzKHsgc3RkOjptYWtlX3BhaXIo
d29ybGQtPmlkZW50aWZpZXIoKSwgdXNlclN0eWxlU2hlZXQudXNlclN0eWxlU2hlZXQoKSkgfSks
IG1faWRlbnRpZmllcik7CisgICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpBZGRVc2VyU3R5bGVTaGVldHMoeyB7IHVz
ZXJTdHlsZVNoZWV0LmlkZW50aWZpZXIoKSwgd29ybGQtPmlkZW50aWZpZXIoKSwgdXNlclN0eWxl
U2hlZXQudXNlclN0eWxlU2hlZXQoKSB9IH0pLCBtX2lkZW50aWZpZXIpOwogfQogCiB2b2lkIFdl
YlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpyZW1vdmVVc2VyU3R5bGVTaGVldChBUEk6OlVz
ZXJTdHlsZVNoZWV0JiB1c2VyU3R5bGVTaGVldCkKQEAgLTIzMSw3ICsyMzIsNyBAQCB2b2lkIFdl
YlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpyZW1vCiAgICAgUmVmPEFQSTo6VXNlckNvbnRl
bnRXb3JsZD4gd29ybGQgPSB1c2VyU3R5bGVTaGVldC51c2VyQ29udGVudFdvcmxkKCk7CiAKICAg
ICBmb3IgKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKQotICAgICAgICBw
cm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJv
bGxlcjo6UmVtb3ZlVXNlclN0eWxlU2hlZXQod29ybGQtPmlkZW50aWZpZXIoKSwgdXNlclN0eWxl
U2hlZXQudXNlclN0eWxlU2hlZXQoKS51cmwoKS5zdHJpbmcoKSksIG1faWRlbnRpZmllcik7Cisg
ICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRl
bnRDb250cm9sbGVyOjpSZW1vdmVVc2VyU3R5bGVTaGVldCh3b3JsZC0+aWRlbnRpZmllcigpLCB1
c2VyU3R5bGVTaGVldC5pZGVudGlmaWVyKCkpLCBtX2lkZW50aWZpZXIpOwogCiAgICAgbV91c2Vy
U3R5bGVTaGVldHMtPmVsZW1lbnRzKCkucmVtb3ZlQWxsKCZ1c2VyU3R5bGVTaGVldCk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA0NCw2ICsxMDQ0LDggQEAKIAkJ
N0E3OTFFRkExQzdDRkNGMTAwQzRDNTJCIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3QTc5MUVGOTFDN0NGQjM3MDBDNEM1MkIgLyogV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJN0E3OTFFRkIxQzdDRkQw
MTAwQzRDNTJCIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZU1lc3NhZ2VzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTc5MUVGODFDN0NG
QjEwMDBDNEM1MkIgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlTWVzc2FnZXMuaCAq
LzsgfTsKIAkJN0E3OTFFRkMxQzdEMDhDNTAwQzRDNTJCIC8qIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3QTlDRDhDMDFDNzc5ODQ5MDBEOUY2QzcgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmNwcCAqLzsgfTsKKwkJN0MwNjVGMkIxQzhDRDk1RjAwQzJEOTUwIC8qIFdlYlVzZXJD
b250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QzA2NUYyOTFDOENEOTVGMDBDMkQ5NTAgLyogV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmNwcCAqLzsgfTsKKwkJN0MwNjVGMkMxQzhDRDk1RjAw
QzJEOTUwIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MwNjVGMkExQzhDRDk1RjAwQzJE
OTUwIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oICovOyB9OwogCQk3QzEz
NUFBODE3M0IwQkNBMDA1ODZBRTIgLyogV0tQbHVnaW5JbmZvcm1hdGlvbi5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzEzNUFBNjE3M0IwQkNBMDA1
ODZBRTIgLyogV0tQbHVnaW5JbmZvcm1hdGlvbi5jcHAgKi87IH07CiAJCTdDMTM1QUE5MTczQjBC
Q0EwMDU4NkFFMiAvKiBXS1BsdWdpbkluZm9ybWF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzEzNUFBNzE3M0IwQkNBMDA1ODZBRTIgLyogV0tQ
bHVnaW5JbmZvcm1hdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTdDMTM1QUFDMTczQjBDRkYwMDU4NkFFMiAvKiBQbHVnaW5JbmZvcm1hdGlv
bk1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdD
MTM1QUFBMTczQjBDRkYwMDU4NkFFMiAvKiBQbHVnaW5JbmZvcm1hdGlvbk1hYy5tbSAqLzsgfTsK
QEAgLTMwNTcsNiArMzA1OSw4IEBACiAJCTdBOUNEOEMwMUM3Nzk4NDkwMEQ5RjZDNyAvKiBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0E5Q0Q4QzExQzc3OTg0OTAwRDlGNkM3IC8qIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0E5Q0Q4QzIxQzc3OUFENjAwRDlGNkM3IC8qIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTdDMDY1RjI5MUM4Q0Q5NUYwMEMyRDk1MCAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXJEYXRhVHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJN0MwNjVGMkExQzhDRDk1RjAwQzJEOTUwIC8qIFdlYlVzZXJDb250ZW50Q29udHJv
bGxlckRhdGFUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0MwQkI5QTgxOERDREU4OTAwMDZDMDg2IC8qIFdlYkNvbnRlbnQtaU9TLmVudGl0bGVtZW50
cyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
eG1sOyBwYXRoID0gIldlYkNvbnRlbnQtaU9TLmVudGl0bGVtZW50cyI7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDMEJCOUE5MThEQ0RGNUEwMDA2QzA4NiAvKiBOZXR3b3JrLWlPUy5l
bnRpdGxlbWVudHMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0LnhtbDsgcGF0aCA9ICJOZXR3b3JrLWlPUy5lbnRpdGxlbWVudHMiOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3QzEzNUFBNjE3M0IwQkNBMDA1ODZBRTIgLyogV0tQbHVn
aW5JbmZvcm1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
S1BsdWdpbkluZm9ybWF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ1
MTAsNiArNDUxNCw4IEBACiAJCQkJODM2MDM0OUQxQUNCMzRENjAwNjI2NTQ5IC8qIFdlYlNRTGl0
ZURhdGFiYXNlVHJhY2tlci5jcHAgKi8sCiAJCQkJODM2MDM0OUUxQUNCMzRENjAwNjI2NTQ5IC8q
IFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlci5oICovLAogCQkJCUMwMzM3REQ3MTI3QTUxQjYwMDhG
RjRGNCAvKiBXZWJUb3VjaEV2ZW50LmNwcCAqLywKKwkJCQk3QzA2NUYyOTFDOENEOTVGMDBDMkQ5
NTAgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmNwcCAqLywKKwkJCQk3QzA2
NUYyQTFDOENEOTVGMDBDMkQ5NTAgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVz
LmggKi8sCiAJCQkJQzAzMzdERDAxMjdBMjk4MDAwOEZGNEY0IC8qIFdlYldoZWVsRXZlbnQuY3Bw
ICovLAogCQkJKTsKIAkJCXBhdGggPSBTaGFyZWQ7CkBAIC04MDA3LDYgKzgwMTMsNyBAQAogCQkJ
CTJEMjhBNDk3MUFGOTY1QTEwMEYxOTBDOSAvKiBXS1ZpZXdMYXlvdXRTdHJhdGVneS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNUMxNDI3MDIxQzIzRjg0QzAwRDQxMTgzIC8qIERvd25sb2FkLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCRkE2MTc5RjEyRjBCOTlEMDAzM0UwQ0EgLyogV0tWaWV3UHJpdmF0
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0MwNjVGMkMxQzhDRDk1RjAwQzJEOTUwIC8qIFdlYlVz
ZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzVFMUFG
RTkxNkIyMEI3NTAwNkNDMUYyIC8qIFdLV2ViQXJjaGl2ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QzVFMUFGRUIxNkIyMEI3RTAwNkNDMUYyIC8qIFdLV2ViQXJjaGl2ZVJlc291cmNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxQUEyRTU2NzE4RDc3NTA4MDAzODE0QkQgLyogV0tXZWJQcm9jZXNzQnVu
ZGxlUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCkBAIC05MTY1LDYgKzkxNzIsNyBAQAogCQkJ
CTVDMTQyNzAxMUMyM0Y4NEMwMEQ0MTE4MyAvKiBEb3dubG9hZC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlDMDMzN0RERDEyN0E1MjFDMDA4RkY0RjQgLyogV2ViUGxhdGZvcm1Ub3VjaFBvaW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTJEQTk0NEEyMTg4NEU0RjAwMEVEODZEQiAvKiBXZWJQbGF0
Zm9ybVRvdWNoUG9pbnRJT1MuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0MwNjVGMkIxQzhDRDk1
RjAwQzJEOTUwIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkzMUQ1OTI5RTE2NkUwNjAwMDBFNkJGMDIgLyogV2ViUGx1Z0luQ2xpZW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNTc0NEVGMTI2MzhGQjMwMDZGMEYxMiAvKiBXZWJQ
b3B1cEl0ZW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRDNCOTQ4NDYxMUZGNEI2NTAwMDMyQjM5
IC8qIFdlYlBvcHVwTWVudS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGUuY3BwCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiAr
NDcsNyBAQAogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2xNZXNzYWdlcy5oIgor
I2luY2x1ZGUgIldlYlVzZXJDb250ZW50Q29udHJvbGxlci5oIgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0FQSUNhc3QuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9FeGNlcHRpb24uaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0xvY2suaD4KQEAgLTcwLDcgKzcxLDYgQEAKICNp
bmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5UG9saWN5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXNz
aW9uSUQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VzZXJHZXN0dXJl
SW5kaWNhdG9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Vc2VyU2NyaXB0Lmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9Vc2VyU3R5bGVTaGVldC5oPgpAQCAtNDA3LDM5ICs0MDcsMzkgQEAgYm9vbCBJbmpl
Y3RlZEJ1bmRsZTo6aXNQcm9jZXNzaW5nVXNlckdlcwogdm9pZCBJbmplY3RlZEJ1bmRsZTo6YWRk
VXNlclNjcmlwdChXZWJQYWdlR3JvdXBQcm94eSogcGFnZUdyb3VwLCBJbmplY3RlZEJ1bmRsZVNj
cmlwdFdvcmxkKiBzY3JpcHRXb3JsZCwgY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmlu
ZyYgdXJsLCBBUEk6OkFycmF5KiB3aGl0ZWxpc3QsIEFQSTo6QXJyYXkqIGJsYWNrbGlzdCwgV2Vi
Q29yZTo6VXNlclNjcmlwdEluamVjdGlvblRpbWUgaW5qZWN0aW9uVGltZSwgV2ViQ29yZTo6VXNl
ckNvbnRlbnRJbmplY3RlZEZyYW1lcyBpbmplY3RlZEZyYW1lcykKIHsKICAgICAvLyB1cmwgaXMg
bm90IGZyb20gVVJMOjpzdHJpbmcoKSwgaS5lLiBpdCBoYXMgbm90IGFscmVhZHkgYmVlbiBwYXJz
ZWQgYnkgVVJMLCBzbyB3ZSBoYXZlIHRvIHVzZSB0aGUgcmVsYXRpdmUgVVJMIGNvbnN0cnVjdG9y
IGZvciBVUkwgaW5zdGVhZCBvZiB0aGUgUGFyc2VkVVJMU3RyaW5nVGFnIHZlcnNpb24uCi0gICAg
YXV0byB1c2VyU2NyaXB0ID0gc3RkOjptYWtlX3VuaXF1ZTxVc2VyU2NyaXB0Pihzb3VyY2UsIFVS
TChVUkwoKSwgdXJsKSwgd2hpdGVsaXN0ID8gd2hpdGVsaXN0LT50b1N0cmluZ1ZlY3RvcigpIDog
VmVjdG9yPFN0cmluZz4oKSwgYmxhY2tsaXN0ID8gYmxhY2tsaXN0LT50b1N0cmluZ1ZlY3Rvcigp
IDogVmVjdG9yPFN0cmluZz4oKSwgaW5qZWN0aW9uVGltZSwgaW5qZWN0ZWRGcmFtZXMpOworICAg
IFVzZXJTY3JpcHQgdXNlclNjcmlwdHsgc291cmNlLCBVUkwoVVJMKCksIHVybCksIHdoaXRlbGlz
dCA/IHdoaXRlbGlzdC0+dG9TdHJpbmdWZWN0b3IoKSA6IFZlY3RvcjxTdHJpbmc+KCksIGJsYWNr
bGlzdCA/IGJsYWNrbGlzdC0+dG9TdHJpbmdWZWN0b3IoKSA6IFZlY3RvcjxTdHJpbmc+KCksIGlu
amVjdGlvblRpbWUsIGluamVjdGVkRnJhbWVzIH07CiAKLSAgICBwYWdlR3JvdXAtPnVzZXJDb250
ZW50Q29udHJvbGxlcigpLmFkZFVzZXJTY3JpcHQoc2NyaXB0V29ybGQtPmNvcmVXb3JsZCgpLCBX
VEZNb3ZlKHVzZXJTY3JpcHQpKTsKKyAgICBwYWdlR3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxl
cigpLmFkZFVzZXJTY3JpcHQoKnNjcmlwdFdvcmxkLCBXVEZNb3ZlKHVzZXJTY3JpcHQpKTsKIH0K
IAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6YWRkVXNlclN0eWxlU2hlZXQoV2ViUGFnZUdyb3VwUHJv
eHkqIHBhZ2VHcm91cCwgSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCogc2NyaXB0V29ybGQsIGNv
bnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIHVybCwgQVBJOjpBcnJheSogd2hpdGVs
aXN0LCBBUEk6OkFycmF5KiBibGFja2xpc3QsIFdlYkNvcmU6OlVzZXJDb250ZW50SW5qZWN0ZWRG
cmFtZXMgaW5qZWN0ZWRGcmFtZXMpCiB7CiAgICAgLy8gdXJsIGlzIG5vdCBmcm9tIFVSTDo6c3Ry
aW5nKCksIGkuZS4gaXQgaGFzIG5vdCBhbHJlYWR5IGJlZW4gcGFyc2VkIGJ5IFVSTCwgc28gd2Ug
aGF2ZSB0byB1c2UgdGhlIHJlbGF0aXZlIFVSTCBjb25zdHJ1Y3RvciBmb3IgVVJMIGluc3RlYWQg
b2YgdGhlIFBhcnNlZFVSTFN0cmluZ1RhZyB2ZXJzaW9uLgotICAgIGF1dG8gdXNlclN0eWxlU2hl
ZXQgPSBzdGQ6Om1ha2VfdW5pcXVlPFVzZXJTdHlsZVNoZWV0Pihzb3VyY2UsIFVSTChVUkwoKSwg
dXJsKSwgd2hpdGVsaXN0ID8gd2hpdGVsaXN0LT50b1N0cmluZ1ZlY3RvcigpIDogVmVjdG9yPFN0
cmluZz4oKSwgYmxhY2tsaXN0ID8gYmxhY2tsaXN0LT50b1N0cmluZ1ZlY3RvcigpIDogVmVjdG9y
PFN0cmluZz4oKSwgaW5qZWN0ZWRGcmFtZXMsIFVzZXJTdHlsZVVzZXJMZXZlbCk7CisgICAgVXNl
clN0eWxlU2hlZXQgdXNlclN0eWxlU2hlZXR7IHNvdXJjZSwgVVJMKFVSTCgpLCB1cmwpLCB3aGl0
ZWxpc3QgPyB3aGl0ZWxpc3QtPnRvU3RyaW5nVmVjdG9yKCkgOiBWZWN0b3I8U3RyaW5nPigpLCBi
bGFja2xpc3QgPyBibGFja2xpc3QtPnRvU3RyaW5nVmVjdG9yKCkgOiBWZWN0b3I8U3RyaW5nPigp
LCBpbmplY3RlZEZyYW1lcywgVXNlclN0eWxlVXNlckxldmVsIH07CiAKLSAgICBwYWdlR3JvdXAt
PnVzZXJDb250ZW50Q29udHJvbGxlcigpLmFkZFVzZXJTdHlsZVNoZWV0KHNjcmlwdFdvcmxkLT5j
b3JlV29ybGQoKSwgV1RGTW92ZSh1c2VyU3R5bGVTaGVldCksIEluamVjdEluRXhpc3RpbmdEb2N1
bWVudHMpOworICAgIHBhZ2VHcm91cC0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkuYWRkVXNlclN0
eWxlU2hlZXQoKnNjcmlwdFdvcmxkLCBXVEZNb3ZlKHVzZXJTdHlsZVNoZWV0KSk7CiB9CiAKIHZv
aWQgSW5qZWN0ZWRCdW5kbGU6OnJlbW92ZVVzZXJTY3JpcHQoV2ViUGFnZUdyb3VwUHJveHkqIHBh
Z2VHcm91cCwgSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCogc2NyaXB0V29ybGQsIGNvbnN0IFN0
cmluZyYgdXJsKQogewogICAgIC8vIHVybCBpcyBub3QgZnJvbSBVUkw6OnN0cmluZygpLCBpLmUu
IGl0IGhhcyBub3QgYWxyZWFkeSBiZWVuIHBhcnNlZCBieSBVUkwsIHNvIHdlIGhhdmUgdG8gdXNl
IHRoZSByZWxhdGl2ZSBVUkwgY29uc3RydWN0b3IgZm9yIFVSTCBpbnN0ZWFkIG9mIHRoZSBQYXJz
ZWRVUkxTdHJpbmdUYWcgdmVyc2lvbi4KLSAgICBwYWdlR3JvdXAtPnVzZXJDb250ZW50Q29udHJv
bGxlcigpLnJlbW92ZVVzZXJTY3JpcHQoc2NyaXB0V29ybGQtPmNvcmVXb3JsZCgpLCBVUkwoVVJM
KCksIHVybCkpOworICAgIHBhZ2VHcm91cC0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkucmVtb3Zl
VXNlclNjcmlwdFdpdGhVUkwoKnNjcmlwdFdvcmxkLCBVUkwoVVJMKCksIHVybCkpOwogfQogCiB2
b2lkIEluamVjdGVkQnVuZGxlOjpyZW1vdmVVc2VyU3R5bGVTaGVldChXZWJQYWdlR3JvdXBQcm94
eSogcGFnZUdyb3VwLCBJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkKiBzY3JpcHRXb3JsZCwgY29u
c3QgU3RyaW5nJiB1cmwpCiB7CiAgICAgLy8gdXJsIGlzIG5vdCBmcm9tIFVSTDo6c3RyaW5nKCks
IGkuZS4gaXQgaGFzIG5vdCBhbHJlYWR5IGJlZW4gcGFyc2VkIGJ5IFVSTCwgc28gd2UgaGF2ZSB0
byB1c2UgdGhlIHJlbGF0aXZlIFVSTCBjb25zdHJ1Y3RvciBmb3IgVVJMIGluc3RlYWQgb2YgdGhl
IFBhcnNlZFVSTFN0cmluZ1RhZyB2ZXJzaW9uLgotICAgIHBhZ2VHcm91cC0+dXNlckNvbnRlbnRD
b250cm9sbGVyKCkucmVtb3ZlVXNlclN0eWxlU2hlZXQoc2NyaXB0V29ybGQtPmNvcmVXb3JsZCgp
LCBVUkwoVVJMKCksIHVybCkpOworICAgIHBhZ2VHcm91cC0+dXNlckNvbnRlbnRDb250cm9sbGVy
KCkucmVtb3ZlVXNlclN0eWxlU2hlZXRXaXRoVVJMKCpzY3JpcHRXb3JsZCwgVVJMKFVSTCgpLCB1
cmwpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cmVtb3ZlVXNlclNjcmlwdHMoV2ViUGFn
ZUdyb3VwUHJveHkqIHBhZ2VHcm91cCwgSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCogc2NyaXB0
V29ybGQpCiB7Ci0gICAgcGFnZUdyb3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIoKS5yZW1vdmVV
c2VyU2NyaXB0cyhzY3JpcHRXb3JsZC0+Y29yZVdvcmxkKCkpOworICAgIHBhZ2VHcm91cC0+dXNl
ckNvbnRlbnRDb250cm9sbGVyKCkucmVtb3ZlVXNlclNjcmlwdHMoKnNjcmlwdFdvcmxkKTsKIH0K
IAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cmVtb3ZlVXNlclN0eWxlU2hlZXRzKFdlYlBhZ2VHcm91
cFByb3h5KiBwYWdlR3JvdXAsIEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQqIHNjcmlwdFdvcmxk
KQogewotICAgIHBhZ2VHcm91cC0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkucmVtb3ZlVXNlclN0
eWxlU2hlZXRzKHNjcmlwdFdvcmxkLT5jb3JlV29ybGQoKSk7CisgICAgcGFnZUdyb3VwLT51c2Vy
Q29udGVudENvbnRyb2xsZXIoKS5yZW1vdmVVc2VyU3R5bGVTaGVldHMoKnNjcmlwdFdvcmxkKTsK
IH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cmVtb3ZlQWxsVXNlckNvbnRlbnQoV2ViUGFnZUdy
b3VwUHJveHkqIHBhZ2VHcm91cCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNl
ckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxl
ci5jcHAJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNl
ckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIldlYlVzZXJDb250ZW50Q29udHJvbGxlck1lc3NhZ2Vz
LmgiCiAjaW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHlNZXNzYWdlcy5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvRE9NV3JhcHBlcldvcmxkLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9T
Y3JpcHRDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbkRhdGEu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvVXNlclN0eWxlU2hlZXQuaD4KQEAgLTgwLDcgKzc5LDYgQEAgUmVmPFdlYlVzZXJD
b250ZW50Q29udHJvbGxlcj4gV2ViVXNlckNvbgogCiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6
OldlYlVzZXJDb250ZW50Q29udHJvbGxlcih1aW50NjRfdCBpZGVudGlmaWVyKQogICAgIDogbV9p
ZGVudGlmaWVyKGlkZW50aWZpZXIpCi0gICAgLCBtX3VzZXJDb250ZW50Q29udHJvbGxlcihVc2Vy
Q29udGVudENvbnRyb2xsZXI6OmNyZWF0ZSgpKQogewogICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVy
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faWRlbnRpZmllciwgKnRoaXMpOwogfQpAQCAtOTQs
NyArOTIsNiBAQCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6On5XZWJVc2VyQ29udGVuCiAgICAg
dXNlckNvbnRlbnRDb250cm9sbGVycygpLnJlbW92ZShtX2lkZW50aWZpZXIpOwogfQogCi0KIHZv
aWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyQ29udGVudFdvcmxkcyhjb25zdCBW
ZWN0b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBTdHJpbmc+PiYgd29ybGRzKQogewogICAgIGZvciAo
YXV0byYgd29ybGQgOiB3b3JsZHMpIHsKQEAgLTEyNCwyMCArMTIxLDIxIEBAIHZvaWQgV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2UKICAgICB9CiB9CiAKLXZvaWQgV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0cyhjb25zdCBWZWN0b3I8c3RkOjpwYWlyPHVp
bnQ2NF90LCBXZWJDb3JlOjpVc2VyU2NyaXB0Pj4mIHVzZXJTY3JpcHRzKQordm9pZCBXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHRzKGNvbnN0IFZlY3RvcjxXZWJVc2VyU2Ny
aXB0RGF0YT4mIHVzZXJTY3JpcHRzKQogewotICAgIGZvciAoY29uc3QgYXV0byYgdXNlclNjcmlw
dFdvcmxkUGFpciA6IHVzZXJTY3JpcHRzKSB7Ci0gICAgICAgIGF1dG8gaXQgPSB3b3JsZE1hcCgp
LmZpbmQodXNlclNjcmlwdFdvcmxkUGFpci5maXJzdCk7CisgICAgZm9yIChjb25zdCBhdXRvJiB1
c2VyU2NyaXB0RGF0YSA6IHVzZXJTY3JpcHRzKSB7CisgICAgICAgIGF1dG8gaXQgPSB3b3JsZE1h
cCgpLmZpbmQodXNlclNjcmlwdERhdGEud29ybGRJZGVudGlmaWVyKTsKICAgICAgICAgaWYgKGl0
ID09IHdvcmxkTWFwKCkuZW5kKCkpIHsKLSAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiVHJ5aW5n
IHRvIGFkZCBhIFVzZXJTY3JpcHQgdG8gYSBVc2VyQ29udGVudFdvcmxkIChpZD0lIiBQUkl1NjQg
IikgdGhhdCBkb2VzIG5vdCBleGlzdC4iLCB1c2VyU2NyaXB0V29ybGRQYWlyLmZpcnN0KTsKKyAg
ICAgICAgICAgIFdURkxvZ0Fsd2F5cygiVHJ5aW5nIHRvIGFkZCBhIFVzZXJTY3JpcHQgdG8gYSBV
c2VyQ29udGVudFdvcmxkIChpZD0lIiBQUkl1NjQgIikgdGhhdCBkb2VzIG5vdCBleGlzdC4iLCB1
c2VyU2NyaXB0RGF0YS53b3JsZElkZW50aWZpZXIpOwogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0KIAotICAgICAgICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+YWRkVXNlclNjcmlw
dChpdC0+dmFsdWUuZmlyc3QtPmNvcmVXb3JsZCgpLCBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6
OlVzZXJTY3JpcHQ+KHVzZXJTY3JpcHRXb3JsZFBhaXIuc2Vjb25kKSk7CisgICAgICAgIFVzZXJT
Y3JpcHQgc2NyaXB0ID0gdXNlclNjcmlwdERhdGEudXNlclNjcmlwdDsKKyAgICAgICAgYWRkVXNl
clNjcmlwdEludGVybmFsKCppdC0+dmFsdWUuZmlyc3QsIHVzZXJTY3JpcHREYXRhLmlkZW50aWZp
ZXIsIFdURk1vdmUoc2NyaXB0KSk7CiAgICAgfQogfQogCi12b2lkIFdlYlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlwdCh1aW50NjRfdCB3b3JsZElkZW50aWZpZXIsIGNvbnN0
IFN0cmluZyYgdXJsU3RyaW5nKQordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92
ZVVzZXJTY3JpcHQodWludDY0X3Qgd29ybGRJZGVudGlmaWVyLCB1aW50NjRfdCB1c2VyU2NyaXB0
SWRlbnRpZmllcikKIHsKICAgICBhdXRvIGl0ID0gd29ybGRNYXAoKS5maW5kKHdvcmxkSWRlbnRp
Zmllcik7CiAgICAgaWYgKGl0ID09IHdvcmxkTWFwKCkuZW5kKCkpIHsKQEAgLTE0NSw3ICsxNDMs
NyBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+cmVtb3ZlVXNlclNj
cmlwdChpdC0+dmFsdWUuZmlyc3QtPmNvcmVXb3JsZCgpLCBVUkwoVVJMKCksIHVybFN0cmluZykp
OworICAgIHJlbW92ZVVzZXJTY3JpcHRJbnRlcm5hbCgqaXQtPnZhbHVlLmZpcnN0LCB1c2VyU2Ny
aXB0SWRlbnRpZmllcik7CiB9CiAKIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1v
dmVBbGxVc2VyU2NyaXB0cyhjb25zdCBWZWN0b3I8dWludDY0X3Q+JiB3b3JsZElkZW50aWZpZXJz
KQpAQCAtMTU3LDI0ICsxNTUsMjUgQEAgdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJl
bW92ZUFsbAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgbV91c2Vy
Q29udGVudENvbnRyb2xsZXItPnJlbW92ZVVzZXJTY3JpcHRzKGl0LT52YWx1ZS5maXJzdC0+Y29y
ZVdvcmxkKCkpOworICAgICAgICByZW1vdmVVc2VyU2NyaXB0cygqaXQtPnZhbHVlLmZpcnN0KTsK
ICAgICB9CiB9CiAKLXZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyU3R5bGVT
aGVldHMoY29uc3QgVmVjdG9yPHN0ZDo6cGFpcjx1aW50NjRfdCwgV2ViQ29yZTo6VXNlclN0eWxl
U2hlZXQ+PiYgdXNlclN0eWxlU2hlZXRzKQordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6
OmFkZFVzZXJTdHlsZVNoZWV0cyhjb25zdCBWZWN0b3I8V2ViVXNlclN0eWxlU2hlZXREYXRhPiYg
dXNlclN0eWxlU2hlZXRzKQogewotICAgIGZvciAoY29uc3QgYXV0byYgdXNlclN0eWxlU2hlZXRX
b3JsZFBhaXIgOiB1c2VyU3R5bGVTaGVldHMpIHsKLSAgICAgICAgYXV0byBpdCA9IHdvcmxkTWFw
KCkuZmluZCh1c2VyU3R5bGVTaGVldFdvcmxkUGFpci5maXJzdCk7CisgICAgZm9yIChjb25zdCBh
dXRvJiB1c2VyU3R5bGVTaGVldERhdGEgOiB1c2VyU3R5bGVTaGVldHMpIHsKKyAgICAgICAgYXV0
byBpdCA9IHdvcmxkTWFwKCkuZmluZCh1c2VyU3R5bGVTaGVldERhdGEud29ybGRJZGVudGlmaWVy
KTsKICAgICAgICAgaWYgKGl0ID09IHdvcmxkTWFwKCkuZW5kKCkpIHsKLSAgICAgICAgICAgIFdU
RkxvZ0Fsd2F5cygiVHJ5aW5nIHRvIGFkZCBhIFVzZXJTdHlsZVNoZWV0IHRvIGEgVXNlckNvbnRl
bnRXb3JsZCAoaWQ9JSIgUFJJdTY0ICIpIHRoYXQgZG9lcyBub3QgZXhpc3QuIiwgdXNlclN0eWxl
U2hlZXRXb3JsZFBhaXIuZmlyc3QpOworICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJUcnlpbmcg
dG8gYWRkIGEgVXNlclN0eWxlU2hlZXQgdG8gYSBVc2VyQ29udGVudFdvcmxkIChpZD0lIiBQUkl1
NjQgIikgdGhhdCBkb2VzIG5vdCBleGlzdC4iLCB1c2VyU3R5bGVTaGVldERhdGEud29ybGRJZGVu
dGlmaWVyKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0KLSAgICAgICAgbV91
c2VyQ29udGVudENvbnRyb2xsZXItPmFkZFVzZXJTdHlsZVNoZWV0KGl0LT52YWx1ZS5maXJzdC0+
Y29yZVdvcmxkKCksIHN0ZDo6bWFrZV91bmlxdWU8V2ViQ29yZTo6VXNlclN0eWxlU2hlZXQ+KHVz
ZXJTdHlsZVNoZWV0V29ybGRQYWlyLnNlY29uZCksIEluamVjdEluRXhpc3RpbmdEb2N1bWVudHMp
OworICAgICAgICAKKyAgICAgICAgVXNlclN0eWxlU2hlZXQgc2hlZXQgPSB1c2VyU3R5bGVTaGVl
dERhdGEudXNlclN0eWxlU2hlZXQ7CisgICAgICAgIGFkZFVzZXJTdHlsZVNoZWV0SW50ZXJuYWwo
Kml0LT52YWx1ZS5maXJzdCwgdXNlclN0eWxlU2hlZXREYXRhLmlkZW50aWZpZXIsIFdURk1vdmUo
c2hlZXQpKTsKICAgICB9CiB9CiAKLXZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1v
dmVVc2VyU3R5bGVTaGVldCh1aW50NjRfdCB3b3JsZElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYg
dXJsU3RyaW5nKQordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdHls
ZVNoZWV0KHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllciwgdWludDY0X3QgdXNlclN0eWxlU2hlZXRJ
ZGVudGlmaWVyKQogewogICAgIGF1dG8gaXQgPSB3b3JsZE1hcCgpLmZpbmQod29ybGRJZGVudGlm
aWVyKTsKICAgICBpZiAoaXQgPT0gd29ybGRNYXAoKS5lbmQoKSkgewpAQCAtMTgyLDcgKzE4MSw3
IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2UKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5yZW1vdmVVc2VyU3R5
bGVTaGVldChpdC0+dmFsdWUuZmlyc3QtPmNvcmVXb3JsZCgpLCBVUkwoVVJMKCksIHVybFN0cmlu
ZykpOworICAgIHJlbW92ZVVzZXJTdHlsZVNoZWV0SW50ZXJuYWwoKml0LT52YWx1ZS5maXJzdCwg
dXNlclN0eWxlU2hlZXRJZGVudGlmaWVyKTsKIH0KIAogdm9pZCBXZWJVc2VyQ29udGVudENvbnRy
b2xsZXI6OnJlbW92ZUFsbFVzZXJTdHlsZVNoZWV0cyhjb25zdCBWZWN0b3I8dWludDY0X3Q+JiB3
b3JsZElkZW50aWZpZXJzKQpAQCAtMTk0LDcgKzE5Myw3IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRD
b250cm9sbGVyOjpyZW1vdmVBbGwKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0g
ICAgICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5yZW1vdmVVc2VyU3R5bGVTaGVldHMoaXQt
PnZhbHVlLmZpcnN0LT5jb3JlV29ybGQoKSk7CisgICAgICAgIHJlbW92ZVVzZXJTdHlsZVNoZWV0
cygqaXQtPnZhbHVlLmZpcnN0KTsKICAgICB9CiB9CiAKQEAgLTI1Myw3ICsyNTIsOSBAQCB2b2lk
IFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlclNjCiAgICAgICAgIFJlZlB0cjxXZWJV
c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yUHJveHk+IGRlc2NyaXB0b3IgPSBXZWJVc2VyTWVz
c2FnZUhhbmRsZXJEZXNjcmlwdG9yUHJveHk6OmNyZWF0ZSh0aGlzLCBoYW5kbGUubmFtZSwgaGFu
ZGxlLmlkZW50aWZpZXIpOwogCiAgICAgICAgIG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRv
cnMuYWRkKGRlc2NyaXB0b3ItPmlkZW50aWZpZXIoKSwgZGVzY3JpcHRvcik7Ci0gICAgICAgIG1f
dXNlckNvbnRlbnRDb250cm9sbGVyLT5hZGRVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yKGRl
c2NyaXB0b3ItPmRlc2NyaXB0b3IoKSk7CisKKyAgICAgICAgYXV0byYgY29yZURlc2NyaXB0b3Ig
PSBkZXNjcmlwdG9yLT5kZXNjcmlwdG9yKCk7CisgICAgICAgIG1fdXNlck1lc3NhZ2VIYW5kbGVy
RGVzY3JpcHRvcnNNYXAuYWRkKHN0ZDo6bWFrZV9wYWlyKGNvcmVEZXNjcmlwdG9yLm5hbWUoKSwg
JmNvcmVEZXNjcmlwdG9yLndvcmxkKCkpLCAmY29yZURlc2NyaXB0b3IpOwogICAgIH0KICNlbHNl
CiAgICAgVU5VU0VEX1BBUkFNKHNjcmlwdE1lc3NhZ2VIYW5kbGVycyk7CkBAIC0yNjUsOCArMjY2
LDEwIEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2UKICNpZiBFTkFC
TEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQogICAgIGF1dG8gaXQgPSBtX3VzZXJNZXNzYWdlSGFu
ZGxlckRlc2NyaXB0b3JzLmZpbmQoaWRlbnRpZmllcik7CiAgICAgQVNTRVJUKGl0ICE9IG1fdXNl
ck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMuZW5kKCkpOwotICAgIAotICAgIG1fdXNlckNvbnRl
bnRDb250cm9sbGVyLT5yZW1vdmVVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yKGl0LT52YWx1
ZS0+ZGVzY3JpcHRvcigpKTsKKworICAgIGF1dG8mIGNvcmVEZXNjcmlwdG9yID0gaXQtPnZhbHVl
LT5kZXNjcmlwdG9yKCk7CisgICAgbV91c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yc01hcC5y
ZW1vdmUoc3RkOjptYWtlX3BhaXIoY29yZURlc2NyaXB0b3IubmFtZSgpLCAmY29yZURlc2NyaXB0
b3Iud29ybGQoKSkpOworCiAgICAgbV91c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycy5yZW1v
dmUoaXQpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oaWRlbnRpZmllcik7CkBAIC0yNzksMTkg
KzI4MiwxNjggQEAgdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJDbwogICAg
IGZvciAoY29uc3QgYXV0byYgdXNlckNvbnRlbnRFeHRlbnNpb24gOiB1c2VyQ29udGVudEV4dGVu
c2lvbnMpIHsKICAgICAgICAgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSBjb250ZW50
RXh0ZW5zaW9uRGF0YSA9IHVzZXJDb250ZW50RXh0ZW5zaW9uLnNlY29uZDsKICAgICAgICAgUmVm
UHRyPFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4gY29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
ID0gV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoV1RGTW92ZShjb250ZW50RXh0
ZW5zaW9uRGF0YSkpOwotICAgICAgICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+YWRkVXNlckNv
bnRlbnRFeHRlbnNpb24odXNlckNvbnRlbnRFeHRlbnNpb24uZmlyc3QsIGNvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbik7CisKKyAgICAgICAgbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZC5hZGRDb250
ZW50RXh0ZW5zaW9uKHVzZXJDb250ZW50RXh0ZW5zaW9uLmZpcnN0LCBXVEZNb3ZlKGNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbikpOwogICAgIH0KIH0KIAogdm9pZCBXZWJVc2VyQ29udGVudENvbnRy
b2xsZXI6OnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsK
LSAgICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+cmVtb3ZlVXNlckNvbnRlbnRFeHRlbnNpb24o
bmFtZSk7CisgICAgbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZC5yZW1vdmVDb250ZW50RXh0ZW5z
aW9uKG5hbWUpOwogfQogCiB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxs
VXNlckNvbnRlbnRFeHRlbnNpb25zKCkKIHsKLSAgICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+
cmVtb3ZlQWxsVXNlckNvbnRlbnRFeHRlbnNpb25zKCk7CisgICAgbV9jb250ZW50RXh0ZW5zaW9u
QmFja2VuZC5yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucygpOwogfQogI2VuZGlmCiAKKworCit2
b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlclNjcmlwdEludGVybmFsKEluamVj
dGVkQnVuZGxlU2NyaXB0V29ybGQmIHdvcmxkLCB1aW50NjRfdCB1c2VyU2NyaXB0SWRlbnRpZmll
ciwgVXNlclNjcmlwdCYmIHVzZXJTY3JpcHQpCit7CisgICAgYXV0byYgc2NyaXB0c0luV29ybGQg
PSBtX3VzZXJTY3JpcHRzLmVuc3VyZSgmd29ybGQsIFtdIHsgcmV0dXJuIFZlY3RvcjxzdGQ6OnBh
aXI8dWludDY0X3QsIFdlYkNvcmU6OlVzZXJTY3JpcHQ+PigpOyB9KS5pdGVyYXRvci0+dmFsdWU7
CisgICAgc2NyaXB0c0luV29ybGQuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHVzZXJTY3JpcHRJZGVu
dGlmaWVyLCBXVEZNb3ZlKHVzZXJTY3JpcHQpKSk7Cit9CisKK3ZvaWQgV2ViVXNlckNvbnRlbnRD
b250cm9sbGVyOjphZGRVc2VyU2NyaXB0KEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQmIHdvcmxk
LCBVc2VyU2NyaXB0JiYgdXNlclNjcmlwdCkKK3sKKyAgICBhZGRVc2VyU2NyaXB0SW50ZXJuYWwo
d29ybGQsIDAsIFdURk1vdmUodXNlclNjcmlwdCkpOworfQorCit2b2lkIFdlYlVzZXJDb250ZW50
Q29udHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlwdFdpdGhVUkwoSW5qZWN0ZWRCdW5kbGVTY3JpcHRX
b3JsZCYgd29ybGQsIGNvbnN0IFVSTCYgdXJsKQoreworICAgIGF1dG8gaXQgPSBtX3VzZXJTY3Jp
cHRzLmZpbmQoJndvcmxkKTsKKyAgICBpZiAoaXQgPT0gbV91c2VyU2NyaXB0cy5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgYXV0byYgc2NyaXB0cyA9IGl0LT52YWx1ZTsKKyAgICBmb3Ig
KGludCBpID0gc2NyaXB0cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBpZiAo
c2NyaXB0c1tpXS5zZWNvbmQudXJsKCkgPT0gdXJsKQorICAgICAgICAgICAgc2NyaXB0cy5yZW1v
dmUoaSk7CisgICAgfQorCisgICAgaWYgKHNjcmlwdHMuaXNFbXB0eSgpKQorICAgICAgICBtX3Vz
ZXJTY3JpcHRzLnJlbW92ZShpdCk7Cit9CisKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
OjpyZW1vdmVVc2VyU2NyaXB0SW50ZXJuYWwoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYgd29y
bGQsIHVpbnQ2NF90IHVzZXJTY3JpcHRJZGVudGlmaWVyKQoreworICAgIGF1dG8gaXQgPSBtX3Vz
ZXJTY3JpcHRzLmZpbmQoJndvcmxkKTsKKyAgICBpZiAoaXQgPT0gbV91c2VyU2NyaXB0cy5lbmQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byYgc2NyaXB0cyA9IGl0LT52YWx1ZTsKKyAg
ICBmb3IgKGludCBpID0gc2NyaXB0cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAg
ICBpZiAoc2NyaXB0c1tpXS5maXJzdCA9PSB1c2VyU2NyaXB0SWRlbnRpZmllcikKKyAgICAgICAg
ICAgIHNjcmlwdHMucmVtb3ZlKGkpOworICAgIH0KKworICAgIGlmIChzY3JpcHRzLmlzRW1wdHko
KSkKKyAgICAgICAgbV91c2VyU2NyaXB0cy5yZW1vdmUoaXQpOworfQorCit2b2lkIFdlYlVzZXJD
b250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlwdHMoSW5qZWN0ZWRCdW5kbGVTY3JpcHRX
b3JsZCYgd29ybGQpCit7CisgICAgbV91c2VyU2NyaXB0cy5yZW1vdmUoJndvcmxkKTsKK30KKwor
dm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNoZWV0SW50ZXJuYWwo
SW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYgd29ybGQsIHVpbnQ2NF90IHVzZXJTdHlsZVNoZWV0
SWRlbnRpZmllciwgVXNlclN0eWxlU2hlZXQmJiB1c2VyU3R5bGVTaGVldCkKK3sKKyAgICBhdXRv
JiBzdHlsZVNoZWV0c0luV29ybGQgPSBtX3VzZXJTdHlsZVNoZWV0cy5lbnN1cmUoJndvcmxkLCBb
XSB7IHJldHVybiBWZWN0b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBXZWJDb3JlOjpVc2VyU3R5bGVT
aGVldD4+KCk7IH0pLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBzdHlsZVNoZWV0c0luV29ybGQuYXBw
ZW5kKHN0ZDo6bWFrZV9wYWlyKHVzZXJTdHlsZVNoZWV0SWRlbnRpZmllciwgV1RGTW92ZSh1c2Vy
U3R5bGVTaGVldCkpKTsKKworICAgIGludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZUlu
QWxsRnJhbWVzSW5BbGxQYWdlcygpOworfQorCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxl
cjo6YWRkVXNlclN0eWxlU2hlZXQoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYgd29ybGQsIFVz
ZXJTdHlsZVNoZWV0JiYgdXNlclN0eWxlU2hlZXQpCit7CisgICAgYWRkVXNlclN0eWxlU2hlZXRJ
bnRlcm5hbCh3b3JsZCwgMCwgV1RGTW92ZSh1c2VyU3R5bGVTaGVldCkpOworfQorCit2b2lkIFdl
YlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclN0eWxlU2hlZXRXaXRoVVJMKEluamVj
dGVkQnVuZGxlU2NyaXB0V29ybGQmIHdvcmxkLCBjb25zdCBVUkwmIHVybCkKK3sKKyAgICBhdXRv
IGl0ID0gbV91c2VyU3R5bGVTaGVldHMuZmluZCgmd29ybGQpOworICAgIGlmIChpdCA9PSBtX3Vz
ZXJTdHlsZVNoZWV0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byYgc3R5bGVz
aGVldHMgPSBpdC0+dmFsdWU7CisKKyAgICBib29sIHNoZWV0c0NoYW5nZWQgPSBmYWxzZTsKKyAg
ICBmb3IgKGludCBpID0gc3R5bGVzaGVldHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAg
ICAgICAgaWYgKHN0eWxlc2hlZXRzW2ldLnNlY29uZC51cmwoKSA9PSB1cmwpIHsKKyAgICAgICAg
ICAgIHN0eWxlc2hlZXRzLnJlbW92ZShpKTsKKyAgICAgICAgICAgIHNoZWV0c0NoYW5nZWQgPSB0
cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFzaGVldHNDaGFuZ2VkKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoc3R5bGVzaGVldHMuaXNFbXB0eSgpKQorICAgICAgICBtX3Vz
ZXJTdHlsZVNoZWV0cy5yZW1vdmUoaXQpOworCisgICAgaW52YWxpZGF0ZUluamVjdGVkU3R5bGVT
aGVldENhY2hlSW5BbGxGcmFtZXNJbkFsbFBhZ2VzKCk7Cit9CisKK3ZvaWQgV2ViVXNlckNvbnRl
bnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU3R5bGVTaGVldEludGVybmFsKEluamVjdGVkQnVuZGxl
U2NyaXB0V29ybGQmIHdvcmxkLCB1aW50NjRfdCB1c2VyU3R5bGVTaGVldElkZW50aWZpZXIpCit7
CisgICAgYXV0byBpdCA9IG1fdXNlclN0eWxlU2hlZXRzLmZpbmQoJndvcmxkKTsKKyAgICBpZiAo
aXQgPT0gbV91c2VyU3R5bGVTaGVldHMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1
dG8mIHN0eWxlc2hlZXRzID0gaXQtPnZhbHVlOworCisgICAgYm9vbCBzaGVldHNDaGFuZ2VkID0g
ZmFsc2U7CisgICAgZm9yIChpbnQgaSA9IHN0eWxlc2hlZXRzLnNpemUoKSAtIDE7IGkgPj0gMDsg
LS1pKSB7CisgICAgICAgIGlmIChzdHlsZXNoZWV0c1tpXS5maXJzdCA9PSB1c2VyU3R5bGVTaGVl
dElkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIHN0eWxlc2hlZXRzLnJlbW92ZShpKTsKKyAgICAg
ICAgICAgIHNoZWV0c0NoYW5nZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KCFzaGVldHNDaGFuZ2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoc3R5bGVzaGVldHMu
aXNFbXB0eSgpKQorICAgICAgICBtX3VzZXJTdHlsZVNoZWV0cy5yZW1vdmUoaXQpOworCisgICAg
aW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlSW5BbGxGcmFtZXNJbkFsbFBhZ2VzKCk7
Cit9CisKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU3R5bGVTaGVl
dHMoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYgd29ybGQpCit7CisgICAgaWYgKCFtX3VzZXJT
dHlsZVNoZWV0cy5yZW1vdmUoJndvcmxkKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW52YWxp
ZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlSW5BbGxGcmFtZXNJbkFsbFBhZ2VzKCk7Cit9CisK
K3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVBbGxVc2VyQ29udGVudCgpCit7
CisgICAgbV91c2VyU2NyaXB0cy5jbGVhcigpOworCisgICAgaWYgKCFtX3VzZXJTdHlsZVNoZWV0
cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV91c2VyU3R5bGVTaGVldHMuY2xlYXIoKTsKKyAgICAg
ICAgaW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlSW5BbGxGcmFtZXNJbkFsbFBhZ2Vz
KCk7CisgICAgfQorfQorCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6Zm9yRWFjaFVz
ZXJTY3JpcHQoY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkKFdlYkNvcmU6OkRPTVdyYXBwZXJXb3Js
ZCYsIGNvbnN0IFdlYkNvcmU6OlVzZXJTY3JpcHQmKT4mIGZ1bmN0b3IpIGNvbnN0Cit7CisgICAg
Zm9yIChjb25zdCBhdXRvJiB3b3JsZEFuZFVzZXJTY3JpcHRWZWN0b3IgOiBtX3VzZXJTY3JpcHRz
KSB7CisgICAgICAgIGF1dG8mIHdvcmxkID0gd29ybGRBbmRVc2VyU2NyaXB0VmVjdG9yLmtleS0+
Y29yZVdvcmxkKCk7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgaWRlbnRpZmllclVzZXJTY3Jp
cHRQYWlyIDogd29ybGRBbmRVc2VyU2NyaXB0VmVjdG9yLnZhbHVlKQorICAgICAgICAgICAgZnVu
Y3Rvcih3b3JsZCwgaWRlbnRpZmllclVzZXJTY3JpcHRQYWlyLnNlY29uZCk7CisgICAgfQorfQor
Cit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6Zm9yRWFjaFVzZXJTdHlsZVNoZWV0KGNv
bnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCYpPiYg
ZnVuY3RvcikgY29uc3QKK3sKKyAgICBmb3IgKGF1dG8mIHN0eWxlU2hlZXRWZWN0b3IgOiBtX3Vz
ZXJTdHlsZVNoZWV0cy52YWx1ZXMoKSkgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGlkZW50
aWZpZXJVc2VyU3R5bGVTaGVldFBhaXIgOiBzdHlsZVNoZWV0VmVjdG9yKQorICAgICAgICAgICAg
ZnVuY3RvcihpZGVudGlmaWVyVXNlclN0eWxlU2hlZXRQYWlyLnNlY29uZCk7CisgICAgfQorfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
VXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xs
ZXIuaAkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2Vy
Q29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
OSArMjgsMTkgQEAKIAogI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgogI2luY2x1ZGUgIldl
YlNjcmlwdE1lc3NhZ2VIYW5kbGVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Vc2VyQ29udGVudENv
bnRyb2xsZXIuaD4KKyNpbmNsdWRlICJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL1VzZXJDb250ZW50UHJvdmlkZXIuaD4KICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKKyNpZiBFTkFCTEUo
Q09OVEVOVF9FWFRFTlNJT05TKQorI2luY2x1ZGUgPFdlYkNvcmUvQ29udGVudEV4dGVuc2lvbnNC
YWNrZW5kLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIENvbnRl
bnRFeHRlbnNpb25zIHsKK2NsYXNzIENvbXBpbGVkQ29udGVudEV4dGVuc2lvbjsKK30KK30KIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTM4LDMwICs0OCw0NiBAQCBjbGFzcyBJbmplY3RlZEJ1
bmRsZVNjcmlwdFdvcmxkOwogY2xhc3MgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YTsK
IGNsYXNzIFdlYlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JQcm94eTsKIAotY2xhc3MgV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViVXNlckNv
bnRlbnRDb250cm9sbGVyPiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciAgeworY2xhc3Mg
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyIGZpbmFsIDogcHVibGljIFdlYkNvcmU6OlVzZXJDb250
ZW50UHJvdmlkZXIsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgogICAg
IHN0YXRpYyBSZWY8V2ViVXNlckNvbnRlbnRDb250cm9sbGVyPiBnZXRPckNyZWF0ZSh1aW50NjRf
dCBpZGVudGlmaWVyKTsKICAgICB2aXJ0dWFsIH5XZWJVc2VyQ29udGVudENvbnRyb2xsZXIoKTsK
IAotICAgIFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJvbGxlciYgdXNlckNvbnRlbnRDb250cm9s
bGVyKCkgeyByZXR1cm4gbV91c2VyQ29udGVudENvbnRyb2xsZXI7IH0KLQogICAgIHVpbnQ2NF90
IGlkZW50aWZpZXIoKSB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0gCiAKKyAgICB2b2lkIGFkZFVz
ZXJTY3JpcHQoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYsIFdlYkNvcmU6OlVzZXJTY3JpcHQm
Jik7CisgICAgdm9pZCByZW1vdmVVc2VyU2NyaXB0V2l0aFVSTChJbmplY3RlZEJ1bmRsZVNjcmlw
dFdvcmxkJiwgY29uc3QgV2ViQ29yZTo6VVJMJik7CisgICAgdm9pZCByZW1vdmVVc2VyU2NyaXB0
cyhJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJik7CisgICAgdm9pZCBhZGRVc2VyU3R5bGVTaGVl
dChJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiwgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQmJik7
CisgICAgdm9pZCByZW1vdmVVc2VyU3R5bGVTaGVldFdpdGhVUkwoSW5qZWN0ZWRCdW5kbGVTY3Jp
cHRXb3JsZCYsIGNvbnN0IFdlYkNvcmU6OlVSTCYpOworICAgIHZvaWQgcmVtb3ZlVXNlclN0eWxl
U2hlZXRzKEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQmKTsKKyAgICB2b2lkIHJlbW92ZUFsbFVz
ZXJDb250ZW50KCk7CisKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyKHVpbnQ2NF90IGlkZW50aWZpZXIpOwogCisgICAgLy8gV2ViQ29yZTo6VXNlckNvbnRl
bnRQcm92aWRlcgorICAgIHZvaWQgZm9yRWFjaFVzZXJTY3JpcHQoY29uc3Qgc3RkOjpmdW5jdGlv
bjx2b2lkKFdlYkNvcmU6OkRPTVdyYXBwZXJXb3JsZCYsIGNvbnN0IFdlYkNvcmU6OlVzZXJTY3Jp
cHQmKT4mKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGZvckVhY2hVc2VyU3R5bGVTaGVldChj
b25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQmKT4m
KSBjb25zdCBvdmVycmlkZTsKKyNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQorICAg
IGNvbnN0IFdlYkNvcmU6OlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JNYXAmIHVzZXJNZXNz
YWdlSGFuZGxlckRlc2NyaXB0b3JzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV91c2VyTWVz
c2FnZUhhbmRsZXJEZXNjcmlwdG9yc01hcDsgfQorI2VuZGlmCisjaWYgRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKKyAgICBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVu
c2lvbnNCYWNrZW5kJiB1c2VyQ29udGVudEV4dGVuc2lvbkJhY2tlbmQoKSBvdmVycmlkZSB7IHJl
dHVybiBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kOyB9CisjZW5kaWYKKwogICAgIC8vIElQQzo6
TWVzc2FnZVJlY2VpdmVyLgogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiwgSVBDOjpNZXNzYWdlRGVjb2RlciYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBhZGRVc2Vy
Q29udGVudFdvcmxkcyhjb25zdCBWZWN0b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBTdHJpbmc+PiYp
OwogICAgIHZvaWQgcmVtb3ZlVXNlckNvbnRlbnRXb3JsZHMoY29uc3QgVmVjdG9yPHVpbnQ2NF90
PiYpOwogCi0gICAgdm9pZCBhZGRVc2VyU2NyaXB0cyhjb25zdCBWZWN0b3I8c3RkOjpwYWlyPHVp
bnQ2NF90LCBXZWJDb3JlOjpVc2VyU2NyaXB0Pj4mKTsKLSAgICB2b2lkIHJlbW92ZVVzZXJTY3Jp
cHQodWludDY0X3Qgd29ybGRJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZyk7Cisg
ICAgdm9pZCBhZGRVc2VyU2NyaXB0cyhjb25zdCBWZWN0b3I8V2ViVXNlclNjcmlwdERhdGE+Jik7
CisgICAgdm9pZCByZW1vdmVVc2VyU2NyaXB0KHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllciwgdWlu
dDY0X3QgdXNlclNjcmlwdElkZW50aWZpZXIpOwogICAgIHZvaWQgcmVtb3ZlQWxsVXNlclNjcmlw
dHMoY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYpOwogCi0gICAgdm9pZCBhZGRVc2VyU3R5bGVTaGVl
dHMoY29uc3QgVmVjdG9yPHN0ZDo6cGFpcjx1aW50NjRfdCwgV2ViQ29yZTo6VXNlclN0eWxlU2hl
ZXQ+PiYpOwotICAgIHZvaWQgcmVtb3ZlVXNlclN0eWxlU2hlZXQodWludDY0X3Qgd29ybGRJZGVu
dGlmaWVyLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZyk7CisgICAgdm9pZCBhZGRVc2VyU3R5bGVT
aGVldHMoY29uc3QgVmVjdG9yPFdlYlVzZXJTdHlsZVNoZWV0RGF0YT4mKTsKKyAgICB2b2lkIHJl
bW92ZVVzZXJTdHlsZVNoZWV0KHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllciwgdWludDY0X3QgdXNl
clNjcmlwdElkZW50aWZpZXIpOwogICAgIHZvaWQgcmVtb3ZlQWxsVXNlclN0eWxlU2hlZXRzKGNv
bnN0IFZlY3Rvcjx1aW50NjRfdD4mKTsKIAogICAgIHZvaWQgYWRkVXNlclNjcmlwdE1lc3NhZ2VI
YW5kbGVycyhjb25zdCBWZWN0b3I8V2ViU2NyaXB0TWVzc2FnZUhhbmRsZXJIYW5kbGU+Jik7CkBA
IC03MywxMSArOTksMjkgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbW92ZUFsbFVzZXJDb250ZW50
RXh0ZW5zaW9ucygpOwogI2VuZGlmCiAKKworICAgIHZvaWQgYWRkVXNlclNjcmlwdEludGVybmFs
KEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQmLCB1aW50NjRfdCB1c2VyU2NyaXB0SWRlbnRpZmll
ciwgV2ViQ29yZTo6VXNlclNjcmlwdCYmKTsKKyAgICB2b2lkIHJlbW92ZVVzZXJTY3JpcHRJbnRl
cm5hbChJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiwgdWludDY0X3QgdXNlclNjcmlwdElkZW50
aWZpZXIpOworICAgIHZvaWQgYWRkVXNlclN0eWxlU2hlZXRJbnRlcm5hbChJbmplY3RlZEJ1bmRs
ZVNjcmlwdFdvcmxkJiwgdWludDY0X3QgdXNlclN0eWxlU2hlZXRJZGVudGlmaWVyLCBXZWJDb3Jl
OjpVc2VyU3R5bGVTaGVldCYmKTsKKyAgICB2b2lkIHJlbW92ZVVzZXJTdHlsZVNoZWV0SW50ZXJu
YWwoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYsIHVpbnQ2NF90IHVzZXJTdHlsZVNoZWV0SWRl
bnRpZmllcik7CisKKwogICAgIHVpbnQ2NF90IG1faWRlbnRpZmllcjsKLSAgICBSZWY8V2ViQ29y
ZTo6VXNlckNvbnRlbnRDb250cm9sbGVyPiBtX3VzZXJDb250ZW50Q29udHJvbGxlcjsKLSNpZiBF
TkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0
cjxXZWJVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yUHJveHk+PiBtX3VzZXJNZXNzYWdlSGFu
ZGxlckRlc2NyaXB0b3JzOworCisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxJbmplY3RlZEJ1
bmRsZVNjcmlwdFdvcmxkPiwgVmVjdG9yPHN0ZDo6cGFpcjx1aW50NjRfdCwgV2ViQ29yZTo6VXNl
clNjcmlwdD4+PiBXb3JsZFRvVXNlclNjcmlwdE1hcDsKKyAgICBXb3JsZFRvVXNlclNjcmlwdE1h
cCBtX3VzZXJTY3JpcHRzOworCisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxJbmplY3RlZEJ1
bmRsZVNjcmlwdFdvcmxkPiwgVmVjdG9yPHN0ZDo6cGFpcjx1aW50NjRfdCwgV2ViQ29yZTo6VXNl
clN0eWxlU2hlZXQ+Pj4gV29ybGRUb1VzZXJTdHlsZVNoZWV0TWFwOworICAgIFdvcmxkVG9Vc2Vy
U3R5bGVTaGVldE1hcCBtX3VzZXJTdHlsZVNoZWV0czsKKworI2lmIEVOQUJMRShVU0VSX01FU1NB
R0VfSEFORExFUlMpCisgICAgV2ViQ29yZTo6VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvck1h
cCBtX3VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzTWFwOwogI2VuZGlmCisjaWYgRU5BQkxF
KENPTlRFTlRfRVhURU5TSU9OUykKKyAgICBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29u
dGVudEV4dGVuc2lvbnNCYWNrZW5kIG1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQ7CisjZW5kaWYK
KwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5tZXNzYWdlcy5pbgo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVz
ZXJDb250ZW50Q29udHJvbGxlci5tZXNzYWdlcy5pbgkocmV2aXNpb24gMTk4MTQ3KQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xs
ZXIubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTI3LDEyICsyNywxMiBAQCBtZXNzYWdl
cyAtPiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXIgewogICAgIEFkZFVzZXJDb250ZW50V29ybGRz
KFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0X3QsIFN0cmluZz4+IHdvcmxkcyk7CiAgICAgUmVtb3Zl
VXNlckNvbnRlbnRXb3JsZHMoVmVjdG9yPHVpbnQ2NF90PiB3b3JsZElkZW50aWZpZXJzKTsKIAot
ICAgIEFkZFVzZXJTY3JpcHRzKFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0X3QsIFdlYkNvcmU6OlVz
ZXJTY3JpcHQ+PiB1c2VyU2NyaXB0cyk7Ci0gICAgUmVtb3ZlVXNlclNjcmlwdCh1aW50NjRfdCB3
b3JsZElkZW50aWZpZXIsIFN0cmluZyB1cmwpOworICAgIEFkZFVzZXJTY3JpcHRzKFZlY3Rvcjxz
dHJ1Y3QgV2ViS2l0OjpXZWJVc2VyU2NyaXB0RGF0YT4gdXNlclNjcmlwdHMpOworICAgIFJlbW92
ZVVzZXJTY3JpcHQodWludDY0X3Qgd29ybGRJZGVudGlmaWVyLCB1aW50NjRfdCBpZGVudGlmaWVy
KTsKICAgICBSZW1vdmVBbGxVc2VyU2NyaXB0cyhWZWN0b3I8dWludDY0X3Q+IHdvcmxkSWRlbnRp
ZmllcnMpOwogCi0gICAgQWRkVXNlclN0eWxlU2hlZXRzKFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0
X3QsIFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0Pj4gdXNlclN0eWxlU2hlZXRzKTsKLSAgICBSZW1v
dmVVc2VyU3R5bGVTaGVldCh1aW50NjRfdCB3b3JsZElkZW50aWZpZXIsIFN0cmluZyB1cmwpOwor
ICAgIEFkZFVzZXJTdHlsZVNoZWV0cyhWZWN0b3I8c3RydWN0IFdlYktpdDo6V2ViVXNlclN0eWxl
U2hlZXREYXRhPiB1c2VyU3R5bGVTaGVldHMpOworICAgIFJlbW92ZVVzZXJTdHlsZVNoZWV0KHVp
bnQ2NF90IHdvcmxkSWRlbnRpZmllciwgdWludDY0X3QgaWRlbnRpZmllcik7CiAgICAgUmVtb3Zl
QWxsVXNlclN0eWxlU2hlZXRzKFZlY3Rvcjx1aW50NjRfdD4gd29ybGRJZGVudGlmaWVycyk7CiAK
ICAgICBBZGRVc2VyU2NyaXB0TWVzc2FnZUhhbmRsZXJzKFZlY3RvcjxXZWJLaXQ6OldlYlNjcmlw
dE1lc3NhZ2VIYW5kbGVySGFuZGxlPiBzY3JpcHRNZXNzYWdlSGFuZGxlcnMpOwpJbmRleDogU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24g
MTk4MTQ3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiRXZlbnREaXNwYXRj
aGVyLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGUuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1
bmRsZUJhY2tGb3J3YXJkTGlzdC5oIgorI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlU2NyaXB0V29y
bGQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTmV0c2NhcGVQbHVnaW4uaCIK
ICNpbmNsdWRlICJOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuaCIKQEAgLTM5
Nyw3ICszOTgsNyBAQCBXZWJQYWdlOjpXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgCiAK
ICAgICBwYWdlQ29uZmlndXJhdGlvbi5kYXRhYmFzZVByb3ZpZGVyID0gV2ViRGF0YWJhc2VQcm92
aWRlcjo6Z2V0T3JDcmVhdGUobV9wYWdlR3JvdXAtPnBhZ2VHcm91cElEKCkpOwogICAgIHBhZ2VD
b25maWd1cmF0aW9uLnN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlciA9IFdlYlN0b3JhZ2VOYW1lc3Bh
Y2VQcm92aWRlcjo6Z2V0T3JDcmVhdGUobV9wYWdlR3JvdXAtPnBhZ2VHcm91cElEKCkpOwotICAg
IHBhZ2VDb25maWd1cmF0aW9uLnVzZXJDb250ZW50Q29udHJvbGxlciA9ICZtX3VzZXJDb250ZW50
Q29udHJvbGxlci0+dXNlckNvbnRlbnRDb250cm9sbGVyKCk7CisgICAgcGFnZUNvbmZpZ3VyYXRp
b24udXNlckNvbnRlbnRQcm92aWRlciA9IG1fdXNlckNvbnRlbnRDb250cm9sbGVyLnB0cigpOwog
ICAgIHBhZ2VDb25maWd1cmF0aW9uLnZpc2l0ZWRMaW5rU3RvcmUgPSBWaXNpdGVkTGlua1RhYmxl
Q29udHJvbGxlcjo6Z2V0T3JDcmVhdGUocGFyYW1ldGVycy52aXNpdGVkTGlua1RhYmxlSUQpOwog
CiAjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKQEAgLTUyMjMsMjEgKzUyMjQsMjEgQEAgdm9p
ZCBXZWJQYWdlOjppbWFnZU9yTWVkaWFEb2N1bWVudFNpemVDaAogCiB2b2lkIFdlYlBhZ2U6OmFk
ZFVzZXJTY3JpcHQoY29uc3QgU3RyaW5nJiBzb3VyY2UsIFdlYkNvcmU6OlVzZXJDb250ZW50SW5q
ZWN0ZWRGcmFtZXMgaW5qZWN0ZWRGcmFtZXMsIFdlYkNvcmU6OlVzZXJTY3JpcHRJbmplY3Rpb25U
aW1lIGluamVjdGlvblRpbWUpCiB7Ci0gICAgV2ViQ29yZTo6VXNlclNjcmlwdCB1c2VyU2NyaXB0
KHNvdXJjZSwgV2ViQ29yZTo6YmxhbmtVUkwoKSwgVmVjdG9yPFN0cmluZz4oKSwgVmVjdG9yPFN0
cmluZz4oKSwgaW5qZWN0aW9uVGltZSwgaW5qZWN0ZWRGcmFtZXMpOworICAgIFdlYkNvcmU6OlVz
ZXJTY3JpcHQgdXNlclNjcmlwdHsgc291cmNlLCBXZWJDb3JlOjpibGFua1VSTCgpLCBWZWN0b3I8
U3RyaW5nPigpLCBWZWN0b3I8U3RyaW5nPigpLCBpbmplY3Rpb25UaW1lLCBpbmplY3RlZEZyYW1l
cyB9OwogCi0gICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPnVzZXJDb250ZW50Q29udHJvbGxl
cigpLmFkZFVzZXJTY3JpcHQobWFpblRocmVhZE5vcm1hbFdvcmxkKCksIHN0ZDo6bWFrZV91bmlx
dWU8V2ViQ29yZTo6VXNlclNjcmlwdD4odXNlclNjcmlwdCkpOworICAgIG1fdXNlckNvbnRlbnRD
b250cm9sbGVyLT5hZGRVc2VyU2NyaXB0KCpJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkOjpub3Jt
YWxXb3JsZCgpLCBXVEZNb3ZlKHVzZXJTY3JpcHQpKTsKIH0KIAogdm9pZCBXZWJQYWdlOjphZGRV
c2VyU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHNvdXJjZSwgV2ViQ29yZTo6VXNlckNvbnRlbnRJ
bmplY3RlZEZyYW1lcyBpbmplY3RlZEZyYW1lcykKIHsKLSAgICBXZWJDb3JlOjpVc2VyU3R5bGVT
aGVldCB1c2VyU3R5bGVTaGVldChzb3VyY2UsIFdlYkNvcmU6OmJsYW5rVVJMKCksIFZlY3RvcjxT
dHJpbmc+KCksIFZlY3RvcjxTdHJpbmc+KCksIGluamVjdGVkRnJhbWVzLCBVc2VyU3R5bGVVc2Vy
TGV2ZWwpOworICAgIFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0IHVzZXJTdHlsZVNoZWV0eyBzb3Vy
Y2UsIFdlYkNvcmU6OmJsYW5rVVJMKCksIFZlY3RvcjxTdHJpbmc+KCksIFZlY3RvcjxTdHJpbmc+
KCksIGluamVjdGVkRnJhbWVzLCBVc2VyU3R5bGVVc2VyTGV2ZWwgfTsKIAotICAgIG1fdXNlckNv
bnRlbnRDb250cm9sbGVyLT51c2VyQ29udGVudENvbnRyb2xsZXIoKS5hZGRVc2VyU3R5bGVTaGVl
dChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSwgc3RkOjptYWtlX3VuaXF1ZTxXZWJDb3JlOjpVc2Vy
U3R5bGVTaGVldD4odXNlclN0eWxlU2hlZXQpLCBJbmplY3RJbkV4aXN0aW5nRG9jdW1lbnRzKTsK
KyAgICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+YWRkVXNlclN0eWxlU2hlZXQoKkluamVjdGVk
QnVuZGxlU2NyaXB0V29ybGQ6Om5vcm1hbFdvcmxkKCksIFdURk1vdmUodXNlclN0eWxlU2hlZXQp
KTsKIH0KIAogdm9pZCBXZWJQYWdlOjpyZW1vdmVBbGxVc2VyQ29udGVudCgpCiB7Ci0gICAgbV91
c2VyQ29udGVudENvbnRyb2xsZXItPnVzZXJDb250ZW50Q29udHJvbGxlcigpLnJlbW92ZUFsbFVz
ZXJDb250ZW50KCk7CisgICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPnJlbW92ZUFsbFVzZXJD
b250ZW50KCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6ZGlzcGF0Y2hEaWRMYXlvdXQoV2ViQ29yZTo6
TGF5b3V0TWlsZXN0b25lcyBtaWxlc3RvbmVzKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuY3BwCShyZXZpc2lv
biAxOTgxNDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdy
b3VwUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw5ICs1Niw5IEBAIFdlYlBhZ2VHcm91
cFByb3h5Ojp+V2ViUGFnZUdyb3VwUHJveHkoKQogewogfQogCi1XZWJDb3JlOjpVc2VyQ29udGVu
dENvbnRyb2xsZXImIFdlYlBhZ2VHcm91cFByb3h5Ojp1c2VyQ29udGVudENvbnRyb2xsZXIoKQor
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyJiBXZWJQYWdlR3JvdXBQcm94eTo6dXNlckNvbnRlbnRD
b250cm9sbGVyKCkKIHsKLSAgICByZXR1cm4gbV91c2VyQ29udGVudENvbnRyb2xsZXItPnVzZXJD
b250ZW50Q29udHJvbGxlcigpOworICAgIHJldHVybiBtX3VzZXJDb250ZW50Q29udHJvbGxlcjsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuaAkocmV2aXNpb24gMTk4
MTQ3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFBy
b3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgUGFnZUdyb3VwOwotY2xhc3MgVXNlckNvbnRlbnRDb250cm9sbGVyOwogfQog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTUwLDcgKzQ5LDcgQEAgcHVibGljOgogICAgIGJvb2wg
aXNWaXNpYmxlVG9IaXN0b3J5Q2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLnZpc2libGVU
b0hpc3RvcnlDbGllbnQ7IH0KICAgICBXZWJDb3JlOjpQYWdlR3JvdXAqIGNvcmVQYWdlR3JvdXAo
KSBjb25zdCB7IHJldHVybiBtX3BhZ2VHcm91cDsgfQogCi0gICAgV2ViQ29yZTo6VXNlckNvbnRl
bnRDb250cm9sbGVyJiB1c2VyQ29udGVudENvbnRyb2xsZXIoKTsKKyAgICBXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXImIHVzZXJDb250ZW50Q29udHJvbGxlcigpOwogCiBwcml2YXRlOgogICAgIFdl
YlBhZ2VHcm91cFByb3h5KGNvbnN0IFdlYlBhZ2VHcm91cERhdGEmKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDE5ODE0NykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE2LTAzLTE0ICBTYW0gV2VpbmlnICA8
c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIGEgYmFzZVVSTCBwYXJhbWV0ZXIgdG8gX1dL
VXNlclN0eWxlU2hlZXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1NTIxOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IF9jb21tb25J
bml0aWFsaXphdGlvbldpdGhGcmFtZU5hbWU6Z3JvdXBOYW1lOl0pOgorICAgICAgICAoLVtXZWJW
aWV3IGluaXRTaW1wbGVIVE1MRG9jdW1lbnRXaXRoU3R5bGU6ZnJhbWU6cHJlZmVyZW5jZXM6Z3Jv
dXBOYW1lOl0pOgorICAgICAgICAoLVtXZWJWaWV3IHNldEdyb3VwTmFtZTpdKToKKyAgICAgICAg
VXBkYXRlIHRvIGFjY291bnQgZm9yIHRoZSBuYW1lIGNoYW5nZSBmcm9tIFVzZXJDb250ZW50Q29u
dHJvbGxlciAtPiBVc2VyQ29udGVudFByb3ZpZGVyLgorCiAyMDE2LTAzLTEzICBKb3NlcGggUGVj
b3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIEVOQUJMRShFUzZf
VEVNUExBVEVfTElURVJBTF9TWU5UQVgpIGd1YXJkcwpJbmRleDogU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViVmlldy5tbQkocmV2aXNpb24gMTk4MTQ3KQorKysgU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA1LDcgKzEwMDUsNyBAQCAtICh2
b2lkKV9jb21tb25Jbml0aWFsaXphdGlvbldpdGhGcmFtZU5hCiAgICAgcGFnZUNvbmZpZ3VyYXRp
b24ucHJvZ3Jlc3NUcmFja2VyQ2xpZW50ID0gbmV3IFdlYlByb2dyZXNzVHJhY2tlckNsaWVudChz
ZWxmKTsKICAgICBwYWdlQ29uZmlndXJhdGlvbi5kYXRhYmFzZVByb3ZpZGVyID0gJldlYkRhdGFi
YXNlUHJvdmlkZXI6OnNpbmdsZXRvbigpOwogICAgIHBhZ2VDb25maWd1cmF0aW9uLnN0b3JhZ2VO
YW1lc3BhY2VQcm92aWRlciA9ICZfcHJpdmF0ZS0+Z3JvdXAtPnN0b3JhZ2VOYW1lc3BhY2VQcm92
aWRlcigpOwotICAgIHBhZ2VDb25maWd1cmF0aW9uLnVzZXJDb250ZW50Q29udHJvbGxlciA9ICZf
cHJpdmF0ZS0+Z3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigpOworICAgIHBhZ2VDb25maWd1
cmF0aW9uLnVzZXJDb250ZW50UHJvdmlkZXIgPSAmX3ByaXZhdGUtPmdyb3VwLT51c2VyQ29udGVu
dENvbnRyb2xsZXIoKTsKICAgICBwYWdlQ29uZmlndXJhdGlvbi52aXNpdGVkTGlua1N0b3JlID0g
Jl9wcml2YXRlLT5ncm91cC0+dmlzaXRlZExpbmtTdG9yZSgpOwogICAgIF9wcml2YXRlLT5wYWdl
ID0gbmV3IFBhZ2UocGFnZUNvbmZpZ3VyYXRpb24pOwogCkBAIC0xMjUwLDcgKzEyNTAsNyBAQCAt
IChpZClpbml0U2ltcGxlSFRNTERvY3VtZW50V2l0aFN0eWxlOihOCiAgICAgcGFnZUNvbmZpZ3Vy
YXRpb24ucHJvZ3Jlc3NUcmFja2VyQ2xpZW50ID0gbmV3IFdlYlByb2dyZXNzVHJhY2tlckNsaWVu
dChzZWxmKTsKICAgICBwYWdlQ29uZmlndXJhdGlvbi5kYXRhYmFzZVByb3ZpZGVyID0gJldlYkRh
dGFiYXNlUHJvdmlkZXI6OnNpbmdsZXRvbigpOwogICAgIHBhZ2VDb25maWd1cmF0aW9uLnN0b3Jh
Z2VOYW1lc3BhY2VQcm92aWRlciA9ICZfcHJpdmF0ZS0+Z3JvdXAtPnN0b3JhZ2VOYW1lc3BhY2VQ
cm92aWRlcigpOwotICAgIHBhZ2VDb25maWd1cmF0aW9uLnVzZXJDb250ZW50Q29udHJvbGxlciA9
ICZfcHJpdmF0ZS0+Z3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigpOworICAgIHBhZ2VDb25m
aWd1cmF0aW9uLnVzZXJDb250ZW50UHJvdmlkZXIgPSAmX3ByaXZhdGUtPmdyb3VwLT51c2VyQ29u
dGVudENvbnRyb2xsZXIoKTsKICAgICBwYWdlQ29uZmlndXJhdGlvbi52aXNpdGVkTGlua1N0b3Jl
ID0gJl9wcml2YXRlLT5ncm91cC0+dmlzaXRlZExpbmtTdG9yZSgpOwogCiAgICAgX3ByaXZhdGUt
PnBhZ2UgPSBuZXcgUGFnZShwYWdlQ29uZmlndXJhdGlvbik7CkBAIC02MjE3LDcgKzYyMTcsNyBA
QCAtICh2b2lkKXNldEdyb3VwTmFtZTooTlNTdHJpbmcgKilncm91cE5hCiAgICAgaWYgKCFfcHJp
dmF0ZS0+cGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgX3ByaXZhdGUtPnBhZ2UtPnNldFVz
ZXJDb250ZW50Q29udHJvbGxlcigmX3ByaXZhdGUtPmdyb3VwLT51c2VyQ29udGVudENvbnRyb2xs
ZXIoKSk7CisgICAgX3ByaXZhdGUtPnBhZ2UtPnNldFVzZXJDb250ZW50UHJvdmlkZXIoX3ByaXZh
dGUtPmdyb3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIoKSk7CiAgICAgX3ByaXZhdGUtPnBhZ2Ut
PnNldFZpc2l0ZWRMaW5rU3RvcmUoX3ByaXZhdGUtPmdyb3VwLT52aXNpdGVkTGlua1N0b3JlKCkp
OwogICAgIF9wcml2YXRlLT5wYWdlLT5zZXRHcm91cE5hbWUoZ3JvdXBOYW1lKTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvd2luL1dlYlZpZXcuY3BwCShyZXZpc2lvbiAxOTgxNDcpCisrKyBTb3VyY2UvV2ViS2l0L3dp
bi9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkzOSw3ICsyOTM5LDcgQEAgSFJFU1VM
VCBXZWJWaWV3Ojppbml0V2l0aEZyYW1lKFJFQ1QgZnJhbQogICAgIGNvbmZpZ3VyYXRpb24uZGF0
YWJhc2VQcm92aWRlciA9ICZXZWJEYXRhYmFzZVByb3ZpZGVyOjpzaW5nbGV0b24oKTsKICAgICBj
b25maWd1cmF0aW9uLnN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlciA9ICZtX3dlYlZpZXdHcm91cC0+
c3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyKCk7CiAgICAgY29uZmlndXJhdGlvbi5wcm9ncmVzc1Ry
YWNrZXJDbGllbnQgPSBzdGF0aWNfY2FzdDxXZWJGcmFtZUxvYWRlckNsaWVudCo+KGNvbmZpZ3Vy
YXRpb24ubG9hZGVyQ2xpZW50Rm9yTWFpbkZyYW1lKTsKLSAgICBjb25maWd1cmF0aW9uLnVzZXJD
b250ZW50Q29udHJvbGxlciA9ICZtX3dlYlZpZXdHcm91cC0+dXNlckNvbnRlbnRDb250cm9sbGVy
KCk7CisgICAgY29uZmlndXJhdGlvbi51c2VyQ29udGVudFByb3ZpZGVyID0gJm1fd2ViVmlld0dy
b3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIoKTsKICAgICBjb25maWd1cmF0aW9uLnZpc2l0ZWRM
aW5rU3RvcmUgPSAmbV93ZWJWaWV3R3JvdXAtPnZpc2l0ZWRMaW5rU3RvcmUoKTsKIAogICAgIG1f
cGFnZSA9IG5ldyBQYWdlKGNvbmZpZ3VyYXRpb24pOwpAQCAtMzg1OSw3ICszODU5LDcgQEAgSFJF
U1VMVCBXZWJWaWV3OjpzZXRHcm91cE5hbWUoX0luXyBCU1RSIAogICAgIGlmICghbV9wYWdlKQog
ICAgICAgICByZXR1cm4gU19PSzsKIAotICAgIG1fcGFnZS0+c2V0VXNlckNvbnRlbnRDb250cm9s
bGVyKCZtX3dlYlZpZXdHcm91cC0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkpOworICAgIG1fcGFn
ZS0+c2V0VXNlckNvbnRlbnRQcm92aWRlcihtX3dlYlZpZXdHcm91cC0+dXNlckNvbnRlbnRDb250
cm9sbGVyKCkpOwogICAgIG1fcGFnZS0+c2V0VmlzaXRlZExpbmtTdG9yZShtX3dlYlZpZXdHcm91
cC0+dmlzaXRlZExpbmtTdG9yZSgpKTsKICAgICBtX3BhZ2UtPnNldEdyb3VwTmFtZSh0b1N0cmlu
Zyhncm91cE5hbWUpKTsKICAgICByZXR1cm4gU19PSzsK
</data>
<flag name="review"
          id="298562"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>