<?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>153905</bug_id>
          
          <creation_ts>2016-02-04 19:13:21 -0800</creation_ts>
          <short_desc>Finish auditing call sites of upper() and lower(), eliminate many, and rename the functions</short_desc>
          <delta_ts>2016-02-08 08:40:15 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>achristensen</cc>
    
    <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>kling</cc>
    
    <cc>ossy</cc>
    
    <cc>peavo</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1162272</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-02-04 19:13:21 -0800</bug_when>
    <thetext>Finish auditing call sites of upper() and lower(), eliminate many, and rename the functions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162399</commentid>
    <comment_count>1</comment_count>
      <attachid>270747</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-02-05 09:11:31 -0800</bug_when>
    <thetext>Created attachment 270747
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162400</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-05 09:12:24 -0800</bug_when>
    <thetext>Attachment 270747 did not pass style-queue:


ERROR: Source/WebKit/win/Plugins/PluginPackage.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/mac/Plugins/WebBasePluginPackage.mm:223:  Missing space around : in range-based for statement  [whitespace/colon] [4]
ERROR: Source/WebCore/platform/text/LocaleToScriptMappingDefault.cpp:167:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/text/LocaleToScriptMappingDefault.cpp:394:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 4 in 54 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>1162401</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-02-05 09:13:35 -0800</bug_when>
    <thetext>This patch wraps up upper and lower. After this, will return to equalIgnoringCase, contains, startsWith, endsWith. Then, done with case, will move on to the various cases of whitespace checking and stripping that should be using isHTMLSpace rather than Unicode concept of whitespace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162402</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-02-05 09:15:56 -0800</bug_when>
    <thetext>Two of the style complaints are false positives due to check-webkit-style not understanding our formatting for lambdas (bug already filed long ago).

One is a false positive due to the script not understanding of an Objective-C modern for loop that just happens to have a colon somewhere in the expression on the right side of the &quot;in&quot; (no bug filed yet).

The fourth is not technically a false positive: a request to change the indenting of an entire header file which I won&apos;t do in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162413</commentid>
    <comment_count>5</comment_count>
      <attachid>270748</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-02-05 09:41:20 -0800</bug_when>
    <thetext>Created attachment 270748
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162414</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-05 09:43:20 -0800</bug_when>
    <thetext>Attachment 270748 did not pass style-queue:


ERROR: Source/WebKit/win/Plugins/PluginPackage.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/mac/Plugins/WebBasePluginPackage.mm:223:  Missing space around : in range-based for statement  [whitespace/colon] [4]
ERROR: Source/WebCore/platform/text/LocaleToScriptMappingDefault.cpp:167:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/text/LocaleToScriptMappingDefault.cpp:394:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 4 in 55 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>1162418</commentid>
    <comment_count>7</comment_count>
      <attachid>270749</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-02-05 09:58:22 -0800</bug_when>
    <thetext>Created attachment 270749
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162419</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-05 10:00:30 -0800</bug_when>
    <thetext>Attachment 270749 did not pass style-queue:


ERROR: Source/WebKit/win/Plugins/PluginPackage.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/mac/Plugins/WebBasePluginPackage.mm:223:  Missing space around : in range-based for statement  [whitespace/colon] [4]
ERROR: Source/WebCore/platform/text/LocaleToScriptMappingDefault.cpp:167:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/text/LocaleToScriptMappingDefault.cpp:394:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 4 in 55 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>1162611</commentid>
    <comment_count>9</comment_count>
      <attachid>270796</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-02-06 08:22:20 -0800</bug_when>
    <thetext>Created attachment 270796
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162613</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-06 08:23:42 -0800</bug_when>
    <thetext>Attachment 270796 did not pass style-queue:


ERROR: Source/WebKit/win/Plugins/PluginPackage.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/mac/Plugins/WebBasePluginPackage.mm:223:  Missing space around : in range-based for statement  [whitespace/colon] [4]
ERROR: Source/WebCore/platform/text/LocaleToScriptMappingDefault.cpp:167:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/text/LocaleToScriptMappingDefault.cpp:394:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 4 in 55 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>1162639</commentid>
    <comment_count>11</comment_count>
      <attachid>270798</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-02-06 10:14:43 -0800</bug_when>
    <thetext>Created attachment 270798
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162641</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-06 10:16:04 -0800</bug_when>
    <thetext>Attachment 270798 did not pass style-queue:


ERROR: Source/WebKit/win/Plugins/PluginPackage.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/mac/Plugins/WebBasePluginPackage.mm:223:  Missing space around : in range-based for statement  [whitespace/colon] [4]
ERROR: Source/WebCore/platform/text/LocaleToScriptMappingDefault.cpp:167:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/text/LocaleToScriptMappingDefault.cpp:394:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 4 in 55 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>1162657</commentid>
    <comment_count>13</comment_count>
      <attachid>270798</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-02-06 12:55:57 -0800</bug_when>
    <thetext>Comment on attachment 270798
Patch

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

&gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:250
&gt; +    DEPRECATED_DEFINE_STATIC_LOCAL(HostsSet, hosts, ());

As long as you are touching this, might be nice to upgrade it to use NeverDestroyed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162672</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-02-06 15:17:50 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; &gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:250
&gt; &gt; +    DEPRECATED_DEFINE_STATIC_LOCAL(HostsSet, hosts, ());
&gt; 
&gt; As long as you are touching this, might be nice to upgrade it to use
&gt; NeverDestroyed

I had done that in my original patch. And the build failed on GTK and EFL because of something wrong with the includes, so I undid it and rolled it back for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162673</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-02-06 15:18:50 -0800</bug_when>
    <thetext>Committed r196223: &lt;http://trac.webkit.org/changeset/196223&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162712</commentid>
    <comment_count>16</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-02-07 00:08:51 -0800</bug_when>
    <thetext>It broke the WinCairo build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162760</commentid>
    <comment_count>17</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-02-07 11:15:02 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; It broke the WinCairo build.

Not surprising since there is no EWS for it. Could you point me to the specific breakage to make it faster to fix it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162847</commentid>
    <comment_count>18</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-02-08 02:07:08 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #16)
&gt; &gt; It broke the WinCairo build.
&gt; 
&gt; Not surprising since there is no EWS for it. Could you point me to the
&gt; specific breakage to make it faster to fix it?

https://build.webkit.org/builders/WinCairo%2064-Bit%20Release/builds/53680

Otherwise the WinCairo bot is completely broken now due to bug153876</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162882</commentid>
    <comment_count>19</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-02-08 08:37:01 -0800</bug_when>
    <thetext>That is a mysterious failure. It’s compiling WTFString.cpp and unable to find some functions from StringImpl.h that are clearly present. Maybe the WinCairo build system has some dependency problem and it’s trying to build with an old StringImpl.h before those functions were added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162883</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-02-08 08:39:16 -0800</bug_when>
    <thetext>Pretty sure that problem is a bug with the build system in WinCairo. I won’t be able to fix it. Someone who is actively maintaining that port can fix it and I will be happy to advise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162884</commentid>
    <comment_count>21</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-02-08 08:40:15 -0800</bug_when>
    <thetext>Note that the error message cites a forward declaration of StringImpl in PrintStream.h, not the real definition of StringImpl from StringImpl.h.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270747</attachid>
            <date>2016-02-05 09:11:31 -0800</date>
            <delta_ts>2016-02-05 09:41:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-153905-20160205091107.patch</filename>
            <type>text/plain</type>
            <size>98955</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk2MTc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
ZDgxYjRjMDZiN2I3NTYzZjA2MjdjYjdiMmY0M2EzNTM2MTFkYmJkLi4zMDRmODkzNmFhZGI3ZWY2
NWY2MWUzZDFhZDc1MGYzYjgwNzExNTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAxNi0wMi0wNSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgRmluaXNoIGF1ZGl0aW5nIGNhbGwgc2l0ZXMgb2YgdXBwZXIoKSBhbmQgbG93ZXIo
KSwgZWxpbWluYXRlIG1hbnksIGFuZCByZW5hbWUgdGhlIGZ1bmN0aW9ucworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzOTA1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBydW50aW1lL0ludGxPYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDOjpjYW5vbmljYWxMYW5nVGFnKTogVXNlIGNvbnZlclRvQVNDSUlV
cHBlcmNhc2Ugb24gdGhlIGxhbmd1YWdlIHRhZy4KKworICAgICAgICAqIHJ1bnRpbWUvU3RyaW5n
UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVG9Mb3dlckNhc2Up
OiBUd2VhayBzdHlsZSBhbmQgdXBkYXRlIGZvciBuYW1lIGNoYW5nZS4KKyAgICAgICAgKEpTQzo6
c3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2UpOiBEaXR0by4KKwogMjAxNi0wMi0wNCAgSm9zZXBo
IFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6
IEluc3BlY3RvclRpbWVsaW5lQWdlbnQgZG9lc24ndCBuZWVkIHRvIHJlY29tcGlsZSBmdW5jdGlv
bnMgYmVjYXVzZSBpdCBub3cgdXNlcyB0aGUgc2FtcGxpbmcgcHJvZmlsZXIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggOTA5NzYx
Mzc0MmE1YWFmMTgwZjcxZGNiMmJiNTE3MGI4MzBlOTc3ZS4uNTBjMDFlY2UzNTQ5Nzk4N2Y3YzYx
NzRjMDUwNWYzOWU1NGIyNTMyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAxNi0wMi0wNSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgRmluaXNoIGF1ZGl0aW5nIGNh
bGwgc2l0ZXMgb2YgdXBwZXIoKSBhbmQgbG93ZXIoKSwgZWxpbWluYXRlIG1hbnksIGFuZCByZW5h
bWUgdGhlIGZ1bmN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTUzOTA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiB3dGYvdGV4dC9BdG9taWNTdHJpbmcuY3BwOgorICAgICAgICAoV1RGOjpBdG9t
aWNTdHJpbmc6Omxvd2VyKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvdGV4dC9BdG9taWNTdHJp
bmcuaDogRGVsZXRlZCB0aGUgbG93ZXIgZnVuY3Rpb24uCisKKyAgICAgICAgKiB3dGYvdGV4dC9T
dHJpbmdJbXBsLmNwcDoKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y29udmVydFRvTG93ZXJj
YXNlV2l0aG91dExvY2FsZSk6IFJlbmFtZWQgZnJvbSBsb3dlci4KKyAgICAgICAgKFdURjo6U3Ry
aW5nSW1wbDo6Y29udmVydFRvVXBwZXJjYXNlV2l0aG91dExvY2FsZSk6IFJlbmFtZWQgZnJvbSB1
cHBlci4KKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y29udmVydFRvTG93ZXJjYXNlV2l0aExv
Y2FsZSk6IFJlbmFtZWQgZnJvbSBsb3dlci4KKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y29u
dmVydFRvVXBwZXJjYXNlV2l0aExvY2FsZSk6IFJlbmFtZWQgZnJvbSB1cHBlci4KKyAgICAgICAg
KFdURjo6U3RyaW5nSW1wbDo6Zm9sZENhc2UpOiBBZGRlZCBmYXN0IGNhc2VzIGZvciBBU0NJSSBz
aW5jZSB0aGlzIGlzCisgICAgICAgIG5vdyB1c2VkIGluIHNvbWUgbW9yZS1wZXJmb3JtYW5jZS1j
cml0aWNhbCBjb2RlLgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDogUmVuYW1lZCBs
b3dlciBhbmQgdXBwZXIuCisKKyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuY3BwOgorICAg
ICAgICAoV1RGOjpTdHJpbmc6OmNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGUpOiBSZW5h
bWVkIGZyb20gbG93ZXIuCisgICAgICAgIChXVEY6OlN0cmluZzo6Y29udmVydFRvVXBwZXJjYXNl
V2l0aG91dExvY2FsZSk6IFJlbmFtZWQgZnJvbSB1cHBlci4KKyAgICAgICAgKFdURjo6U3RyaW5n
Ojpjb252ZXJ0VG9Mb3dlcmNhc2VXaXRoTG9jYWxlKTogUmVuYW1lZCBmcm9tIGxvd2VyLgorICAg
ICAgICAoV1RGOjpTdHJpbmc6OmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhMb2NhbGUpOiBSZW5hbWVk
IGZyb20gdXBwZXIuCisgICAgICAgICogd3RmL3RleHQvV1RGU3RyaW5nLmg6IFJlbmFtZWQgbG93
ZXIgYW5kIHVwcGVyLiBSZW1vdmVkIHVubmVlZGVkIGNvbW1lbnQuCisKIDIwMTYtMDItMDMgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIENvbnZlcnQgYW5vdGhlciBi
YXRjaCBvZiBTdHJpbmc6Omxvd2VyIGNhbGxzaXRlcyB0byBzb21ldGhpbmcgYmV0dGVyLCB0eXBp
Y2FsbHkgY29udmVydFRvQVNDSUlMb3dlcmNhc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkN2ZiMjIzNzg0NTgy
MTg0MTVmNGNhN2ZiYWQzNjFiMjE3MGFmYzk2Li45ZjJkZTVmNTNhYTZhYTQzNjMwZjQwNDQ3NDIy
MjhkMGRlMzMyMjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTI3IEBACisyMDE2LTAyLTA1ICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBGaW5pc2ggYXVkaXRpbmcg
Y2FsbCBzaXRlcyBvZiB1cHBlcigpIGFuZCBsb3dlcigpLCBlbGltaW5hdGUgbWFueSwgYW5kIHJl
bmFtZSB0aGUgZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTM5MDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTb3VyY2U6OmlzVHlwZVN1cHBvcnRlZCk6IFVzZSBjb252ZXJ0VG9B
U0NJSUxvd2VyY2FzZSBvbiBNSU1FIHR5cGUuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9i
amVjdDo6c2VsZWN0VGV4dCk6IFVzZSBuZXcgbmFtZXMgZm9yIGxvd2VyIGFuZCB1cHBlci4gQWxz
bworICAgICAgICB0d2Vha2VkIHN0eWxlIGEgdGlueSBiaXQgYW5kIHVzZWQgdV90b3VwcGVyIHJh
dGhlciB0aGFuIGNvbnZlcnRpbmcgYW4gZW50aXJlCisgICAgICAgIHN0cmluZyB0byB1cHBlcmNh
c2UuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OmFkZEltYWdlRWxlbWVudEJ5Q2FzZUZvbGRlZFVzZW1hcCk6IFJlbmFtZWQgdG8gcmVm
bGVjdCB0aGUgdXNlCisgICAgICAgIG9mIGNhc2UgZm9sZGluZyByYXRoZXIgdGhhbiBsb3dlcmNh
c2luZy4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZW1vdmVJbWFnZUVsZW1lbnRCeUNh
c2VGb2xkZWRVc2VtYXApOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjppbWFn
ZUVsZW1lbnRCeUNhc2VGb2xkZWRVc2VtYXApOiBEaXR0by4KKyAgICAgICAgKiBkb20vRG9jdW1l
bnQuaDogRGl0dG8uCisgICAgICAgICogZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeUNhc2VGb2xkZWRN
YXBOYW1lKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE9yZGVyZWRNYXA6Omdl
dEVsZW1lbnRCeUNhc2VGb2xkZWRVc2VtYXApOiBEaXR0by4KKyAgICAgICAgKiBkb20vRG9jdW1l
bnRPcmRlcmVkTWFwLmg6IERpdHRvLgorCisgICAgICAgICogZG9tL1RyZWVTY29wZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6OmdldEltYWdlTWFwKTogUmVtb3ZlZCB1bm5lZWRl
ZCBzcGVjaWFsIGNhc2UgZm9yIG51bGwgc3RyaW5nLgorICAgICAgICBTaW1wbGlmaWVkIGxvZ2lj
IGZvciBjYXNlcyB3aGVyZSB0aGUgVVJMIGRvZXMgbm90IGhhdmUgYSAiIyIgY2hhcmFjdGVyIGlu
IGl0LgorICAgICAgICBVc2UgY2FzZSBmb2xkaW5nIGluc3RlYWQgb2YgbG93ZXJjYXNlLgorCisg
ICAgICAgICogZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tOgorICAgICAgICAoSFRNTENv
bnZlcnRlcjo6X3Byb2Nlc3NUZXh0KTogUmVtb3ZlZCB1bm5lZGVkIHNwZWNpYWwgY2FzZSBmb3Ig
dGhlIGVtcHR5IHN0cmluZy4KKyAgICAgICAgVXNlIG1ha0NhcGl0YWxpemVkIGluc3RlYWQgb2Yg
Q29jb2EgZnVuY3Rpb24gZm9yICJjYXBpdGFsaXplIi4gVXNlIHVwcGVyIGFuZCBsb3dlcgorICAg
ICAgICBmdW5jdGlvbnMgYnkgdGhlaXIgbmV3IG5hbWVzLgorCisgICAgICAgICogaHRtbC9IVE1M
SW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OnBh
cnNlQXR0cmlidXRlKTogVXNlIGNhc2UgZm9sZGluZyBpbnN0ZWFkIG9mCisgICAgICAgIGxvd2Vy
YXNpbmcgZm9yIHRoZSB1c2VtYXAgYXR0cmlidXRlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElt
YWdlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1M
SW1hZ2VFbGVtZW50OjpyZW1vdmVkRnJvbSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEltYWdlRWxlbWVudDo6bWF0Y2hlc0Nhc2VGb2xkZWRVc2VtYXApOiBEaXR0by4KKyAgICAgICAg
KiBodG1sL0hUTUxJbWFnZUVsZW1lbnQuaDogUmVuYW1lIHNpbmNlIHVzZW1hcCBpcyBjYXNlIGZv
bGRlZCBub3csIG5vdCBsb3dlcmNhc2VkLgorCisgICAgICAgICogaHRtbC9IVE1MTWFwRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFwRWxlbWVudDo6aW1hZ2VFbGVtZW50KTog
VXNlIGNhc2UgZm9sZGluZyBpbnN0ZWFkIG9mIGxvd2VyY2FzaW5nCisgICAgICAgIGZvciB1c2Vt
YXAuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFwRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOiBE
aXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL0xhbmd1YWdlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNhbm9uaWNhbExhbmd1YWdlSWRlbnRpZmllcik6IFVzZSBjb252ZXJ0VG9BU0NJSUxvd2Vy
Y2FzZSBmb3IgbGFuZ3VhZ2UgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6OmluZGV4T2ZCZXN0TWF0
Y2hpbmdMYW5ndWFnZUluTGlzdCk6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9IVFRQUGFyc2Vycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUNvbnRlbnRUeXBlT3B0
aW9uc0hlYWRlcik6IFVzZSBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSBpbnN0ZWFkCisg
ICAgICAgIG9mIGxvd2VyY2FzaW5nIHRvIGNoZWNrIGZvciBhIHNwZWNpZmljIGhlYWRlciB2YWx1
ZS4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvTUlNRUhlYWRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpyZXRyaWV2ZUtleVZhbHVlUGFpcnMpOiBVc2UgY29udmVydFRvQVNDSUlMb3dl
cmNhc2UgZm9yIE1JTUUgaGVhZGVyIG5hbWUuCisgICAgICAgIChXZWJDb3JlOjpNSU1FSGVhZGVy
OjpwYXJzZUNvbnRlbnRUcmFuc2ZlckVuY29kaW5nKTogVXNlIGVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlCisgICAgICAgIGluc3RlYWQgb2YgbG93ZXJjYXNpbmcuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6YWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3RzKTogTWFrZSB0aGlzIGhhc2ggQVND
SUkgY2FzZS1pbnNlbnNpdGl2ZS4KKyAgICAgICAgKFdlYkNvcmU6OmNsaWVudENlcnRpZmljYXRl
cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNyZWF0ZUNGVVJM
Q29ubmVjdGlvbik6IFJlbW92ZSBjYWxsIHRvIGxvd2VyIHNpbmNlIHRoZQorICAgICAgICBzZXQg
aXMgbm93IEFTQ0lJIGNhc2UtaW5zZW5zaXRpdmUuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6c2V0SG9zdEFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGUpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzZXRDbGllbnRDZXJ0aWZpY2F0ZSk6IERpdHRv
LgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Z2V0TmV0c2NhcGVDb29raWVGb3JtYXQpOiBVc2UgZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UgaW5zdGVhZCBvZgorICAgICAgICBsb3dlcmNhc2luZy4KKwor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9NdWx0aXBhcnRIYW5kbGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TXVsdGlwYXJ0SGFuZGxlOjpkaWRSZWNlaXZlUmVzcG9uc2UpOiBVc2Ug
Y29udmVydFRvQVNDSUlMb3dlcmNhc2UgdG8KKyAgICAgICAgbWFrZSBhIE1JTUUgdHlwZSBsb3dl
cmNhc2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVD
dXJsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzZXRIb3N0QWxsb3dz
QW55SFRUUFNDZXJ0aWZpY2F0ZSk6IFJlbW92ZWQgdW5uZWVkZWQKKyAgICAgICAgY29udmVyc2lv
biB0byBsb3dlcmNhc2Ugbm93IHRoYXQgdGhlIHNldCBpcyBBU0NJSSBjYXNlLWluc2Vuc2l0aXZl
LgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNldENsaWVudENlcnRpZmljYXRl
KTogUmVtb3ZlZCBjb2RlIHRoYXQgcG9wdWxhdGVzIGEgbWFwCisgICAgICAgIHRoYXQgaXMgdGhl
biBuZXZlciB1c2VkIGZvciBhbnl0aGluZy4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
Y3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGVhZGVy
Q2FsbGJhY2spOiBVc2UgY29udmVydFRvQVNDSUlMb3dlcmNhc2UgZm9yIE1JTUUgdHlwZS4KKwor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9TU0xIYW5kbGUuY3BwOiBNYWRlIGhhc2gg
bWFwcyBrZXllZCBieSBob3N0IG5hbWVzCisgICAgICAgIEFTQ0lJIGNhc2UtaW5zZW5zaXRpdmUu
CisgICAgICAgIChXZWJDb3JlOjphZGRBbGxvd2VkQ2xpZW50Q2VydGlmaWNhdGUpOiBSZW1vdmVk
IGxvd2VyY2FzaW5nIHNpbmNlIHRoZSBtYXAgaXRzZWxmCisgICAgICAgIGlzIG5vdyBBU0NJSSBj
YXNlIGluc2Vuc2l0dmUuCisgICAgICAgIChXZWJDb3JlOjpzZXRTU0xDbGllbnRDZXJ0aWZpY2F0
ZSk6IERpdHRvLiBBbHNvIHVzZSBhdXRvIGZvciBpdGVyYXRvciB0eXBlIHNvIHdlCisgICAgICAg
IGRvbid0IGhhdmUgdG8gd3JpdGUgb3V0IHRoZSBtYXAgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6
OnNzbElnbm9yZUhUVFBTQ2VydGlmaWNhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNl
cnRWZXJpZnlDYWxsYmFjayk6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9z
b3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHA6IE1hZGUgaGFzaCBtYXBzIGtleWVkIGJ5IGhvc3Qg
bmFtZXMKKyAgICAgICAgQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZS4KKyAgICAgICAgKFdlYkNvcmU6
OmFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGVIb3N0cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6aGFuZGxlVW5pZ25vcmVkVExTRXJyb3JzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZTo6c2V0SG9zdEFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGUpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzZXRDbGllbnRDZXJ0aWZpY2F0ZSk6
IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmdE
ZWZhdWx0LmNwcDogTWFkZSBoYXNoIG1hcHMga2V5ZWQgYnkgc2NyaXB0CisgICAgICAgIG5hbWVz
IEFTQ0lJIGNhc2UtaW5zZW5zaXRpdmUuIFVTRSBXVEZfQVJSQVlfTEVOR1RIIGFzIGFwcHJvcHJp
YXRlLgorICAgICAgICAoV2ViQ29yZTo6c2NyaXB0TmFtZVRvQ29kZSk6IFVzZSBtb2Rlcm4gc3R5
bGUgdG8gaW5pdGlhbGl6ZSB0aGUgbWFwLiBSZW1vdmVkCisgICAgICAgIHVubmVjZXNzYXJ5IGxv
d2VyY2FzaW5nIG9mIHRoZSBzY3JpcHQgbmFtZSBiZWZvcmUgbG9va2luZyBhdCB0aGUgbWFwLgor
ICAgICAgICAoV2ViQ29yZTo6bG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbik6IERp
dHRvLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC93aW4vTG9jYWxlV2luLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbnZlcnRMb2NhbGVOYW1lVG9MQ0lEKTogTWFkZSBtYXAgQVNDSUkgY2Fz
ZS1pbnNlbnNpdGl2ZSBhbmQgcmVtb3ZlZAorICAgICAgICB1bm5lZWRlZCBsb3dlcmNhc2luZy4K
KworICAgICAgICAqIHBsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmNsaXBib2FyZFR5cGVGcm9tTUlNRVR5cGUpOiBVc2UgZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UgaW5zdGVhZAorICAgICAgICBvZiBsb3dlcmNhc2luZy4KKworICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5VGV4dFRy
YW5zZm9ybSk6IFVzZSBuZXcgbmFtZXMgZm9yIHRoZSB1cHBlciBhbmQgbG93ZXIgZnVuY3Rpb25z
LgorCisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlhNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZUlzWE1MKTogUmVtb3ZlIHVubmVlZGVkIGxvd2VyY2Fz
aW5nLCBzaW5jZQorICAgICAgICBET01JbXBsZW1lbnRhdGlvbiBub3cgaGFzIEFTQ0lJIGNhc2Ut
aW5zZW5zaXRpdmUgaGFuZGxpbmcgb2YgTUlNRSB0eXBlcy4KKwogMjAxNi0wMi0wNSAgQWxleCBD
aHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIENsZWFuIHVw
IEJsb2IgY29kZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDc0ZGYxOGJiZDE4YmRjYWUyMzQwM2E1MWVh
NzFhZjFhOWI2ZGI5ZDAuLjk5YWNlMzVhOTA1MDcyNzlkZDFiODNlNWJhYjhlYTMyMDAzMzIzZGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxNi0wMi0wNSAgRGFyaW4gQWRs
ZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgRmluaXNoIGF1ZGl0aW5nIGNhbGwgc2l0
ZXMgb2YgdXBwZXIoKSBhbmQgbG93ZXIoKSwgZWxpbWluYXRlIG1hbnksIGFuZCByZW5hbWUgdGhl
IGZ1bmN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTUzOTA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBQbHVnaW5zL1dlYkJhc2VQbHVnaW5QYWNrYWdlLm1tOgorICAgICAgICAoLVtXZWJCYXNl
UGx1Z2luUGFja2FnZSBnZXRQbHVnaW5JbmZvRnJvbVBMaXN0c10pOiBVc2UgbW9kZXJuIGZvciBs
b29wcy4KKyAgICAgICAgKC1bV2ViQmFzZVBsdWdpblBhY2thZ2Ugc3VwcG9ydHNFeHRlbnNpb246
XSk6IFVzZSBjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSBmb3IgZXh0ZW5zaW9uIGFzc2VydC4KKyAg
ICAgICAgQWxzbyB1c2UgbW9kZXJuIGZvciBsb29wLgorICAgICAgICAoLVtXZWJCYXNlUGx1Z2lu
UGFja2FnZSBzdXBwb3J0c01JTUVUeXBlOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViQmFzZVBs
dWdpblBhY2thZ2UgTUlNRVR5cGVGb3JFeHRlbnNpb246XSk6IERpdHRvLgorCiAyMDE2LTAyLTAz
ICBKZXNzaWUgQmVybGluICA8amJlcmxpbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEJ1aWxkIGZp
eC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvd2luL0NoYW5nZUxvZwppbmRleCAyY2U0YTg3NmNiYjU4NDIyOGU5YTU1NmFlZGJjZjdjY2Nk
MmVmMDAxLi4xYTA0YzQxNjI0ZDU1OGQwZGRmN2M4MzYyZDZiNTMyZjVlZmNmZTE5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC93aW4v
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTYtMDItMDUgIERhcmluIEFkbGVyICA8ZGFy
aW5AYXBwbGUuY29tPgorCisgICAgICAgIEZpbmlzaCBhdWRpdGluZyBjYWxsIHNpdGVzIG9mIHVw
cGVyKCkgYW5kIGxvd2VyKCksIGVsaW1pbmF0ZSBtYW55LCBhbmQgcmVuYW1lIHRoZSBmdW5jdGlv
bnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mzkw
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGx1
Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFz
ZTo6cGx1Z2luRm9yTUlNRVR5cGUpOiBVc2UgQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZSBtYXAgcmF0
aGVyCisgICAgICAgIHRoYW4gbG93ZXJjYXNpbmcgdGhlIE1JTUUgdHlwZS4KKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpzZXRQcmVmZXJyZWRQbHVnaW5Gb3JNSU1FVHlwZSk6IERp
dHRvLgorCisgICAgICAgICogUGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oOiBNYWtlIG1fcHJlZmVy
cmVkUGx1Z2lucyB1c2UgYW4gQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZSBoYXNoLgorCisgICAgICAg
ICogUGx1Z2lucy9QbHVnaW5QYWNrYWdlLmg6IFVzZSBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIGhh
c2ggZm9yIG1hcHMga2V5ZWQgYnkgTUlNRSB0eXBlLgorCisgICAgICAgICogUGx1Z2lucy9QbHVn
aW5QYWNrYWdlV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmZldGNo
SW5mbyk6IFVzZSBjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSB0byBsb3dlcmNhc2UgYSBNSU1FIHR5
cGUuCisKIDIwMTYtMDItMDQgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4K
IAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBJbnNwZWN0b3JUaW1lbGluZUFnZW50IGRvZXNuJ3Qg
bmVlZCB0byByZWNvbXBpbGUgZnVuY3Rpb25zIGJlY2F1c2UgaXQgbm93IHVzZXMgdGhlIHNhbXBs
aW5nIHByb2ZpbGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMGExZTUzMDNhMDZkMThiNzgzNmJiZTdjMzdkNWVm
NTQyMGI4NjFlMy4uNjRjYjA4ZjQwOWYzYjFkYmRkM2I5YjU5MzkzZjQ4OGE3MWI3Y2FkYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDE2LTAyLTA1ICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KKworICAgICAgICBGaW5pc2ggYXVkaXRpbmcgY2FsbCBzaXRlcyBvZiB1cHBl
cigpIGFuZCBsb3dlcigpLCBlbGltaW5hdGUgbWFueSwgYW5kIHJlbmFtZSB0aGUgZnVuY3Rpb25z
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTM5MDUK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL0N1c3RvbVByb3RvY29scy9DdXN0b21Qcm90b2NvbE1hbmFnZXIuaDogVXNlIEFT
Q0lJIGNhc2UtaW5zZW5zaXRpdmUgaGFzaAorICAgICAgICBmb3Igc2V0IG9mIHJlZ2lzdGVyZWQg
c2NoZW1lcy4KKworICAgICAgICAqIFNoYXJlZC9QbHVnaW5zL05ldHNjYXBlL21hYy9OZXRzY2Fw
ZVBsdWdpbk1vZHVsZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6Z2V0UGx1Z2luSW5mb0Zyb21Q
cm9wZXJ0eUxpc3RzKTogVXNlIGNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlIGZvciBNSU1FIHR5cGUg
YW5kCisgICAgICAgIGZvciBmaWxlIGV4dGVuc2lvbnMuCisKKyAgICAgICAgKiBTaGFyZWQvUGx1
Z2lucy9OZXRzY2FwZS94MTEvTmV0c2NhcGVQbHVnaW5Nb2R1bGVYMTEuY3BwOgorICAgICAgICAo
V2ViS2l0OjpOZXRzY2FwZVBsdWdpbk1vZHVsZTo6cGFyc2VNSU1FRGVzY3JpcHRpb24pOiBVc2Ug
Y29udmVydFRvQVNDSUlMb3dlcmNhc2UgZm9yCisgICAgICAgIE1JTUUgZGVzY3JpcHRpb24uCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHA6CisgICAgICAgIChl
d2tfY29udGV4dF9wcmVmZXJyZWRfbGFuZ3VhZ2VzX3NldCk6IFVzZSBjb252ZXJ0VG9BU0NJSUxv
d2VyY2FzZSBmb3IgbGFuZ3VhZ2UuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfY29udGV4dF9zZXRfcHJlZmVy
cmVkX2xhbmd1YWdlcyk6IFVzZSBjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSBmb3IgbGFuZ3VhZ2Uu
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpQbHVnaW5JbmZvU3RvcmU6OmZpbmRQbHVnaW5Gb3JFeHRlbnNpb24pOiBV
c2UgVmVjdG9yOjpjb250YWlucyBpbnN0ZWFkIG9mCisgICAgICAgIHdyaXRpbmcgaXQgb3V0IHVz
aW5nIHN0ZDo6ZmluZC4KKyAgICAgICAgKFdlYktpdDo6cGF0aEV4dGVuc2lvbik6IExvd2VyY2Fz
ZSB0aGUgcmVzdWx0IHdpdGggY29udmVydFRvQVNDSUlMb3dlcmNhc2UgaW5zdGVhZCBvZgorICAg
ICAgICBsZWF2aW5nIHRoYXQgdG8gdGhlIGNhbGxlci4KKyAgICAgICAgKFdlYktpdDo6UGx1Z2lu
SW5mb1N0b3JlOjpmaW5kUGx1Z2luKTogUmVtb3ZlZCBjYWxsIHRvIGxvd2VyIHNpbmNlIHBhdGhF
eHRlbnNpb24KKyAgICAgICAgaGFuZGxlcyB0aGF0IG5vdy4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmZpbmRQ
bHVnaW4pOiBVc2UgY29udmVydFRvQVNDSUlMb3dlcmNhc2UgZm9yIE1JTUUgdHlwZS4KKworICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjpnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMp
OiBVc2UKKyAgICAgICAgYW4gQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZSBoYXNoLgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1
c3RvbVByb3RvY29sSGFuZGxlcnMpOgorICAgICAgICBSZW1vdmUgbG93ZXJjYXNpbmcsIHNpbmNl
IHRoZSBoYXNoIGlzIG5vdyBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlLgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9t
UHJvdG9jb2xIYW5kbGVycyk6CisgICAgICAgIERpdHRvLgorCisgICAgICAgICogVUlQcm9jZXNz
L1dlYlByb2Nlc3NQb29sLmg6IFVzZSBhbiBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIGhhc2guCisK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3Bw
OgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbjo6aW5pdGlhbGl6ZSk6IFVzZSBjb252
ZXJ0VG9BU0NJSUxvd2VyY2FzZSBvbiBwYXJhbWV0ZXIgbmFtZXMKKyAgICAgICAgYW5kIHZhbHVl
cy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJD
bGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpwbHVnaW5TdXBwb3J0c0V4dGVuc2lvbik6IFVz
ZSBjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSBmb3IgZXh0ZW5zaW9uIGFzc2VydGlvbi4KKyAgICAg
ICAgQWxzbyB1c2UgYSBtb2Rlcm4gZm9yIGxvb3AuCisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1l
TG9hZGVyQ2xpZW50OjpvYmplY3RDb250ZW50VHlwZSk6IE1ha2UgdGhlIGNoZWNrcyBmb3IgZW1w
dHkgTUlNRSB0eXBlcworICAgICAgICBhIGxpdHRsZSBsZXNzIHJlZHVuZGFudC4gUmVvcmRlcmVk
IGxvZ2ljIHRvIGF2b2lkIGNoZWNraW5nIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBNSU1FCisgICAg
ICAgIHR5cGVzIGV4dHJhIHRpbWVzLCBhbmQgdG8gZWxpbWluYXRlIHRoZSBuZWVkIGZvciBhIGJv
b2xlYW4uIFVzZSBjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZQorICAgICAgICBvbiB0aGUgZXh0ZW5z
aW9uLgorCiAyMDE2LTAyLTA1ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgQ2xlYW4gdXAgQmxvYiBjb2RlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCmluZGV4IGY5OGNkNTRmYTdhMDA5YWU2N2U3NmYz
Y2JkZTZjOWRiOGQzNzQ5ZWQuLjllOGYwMzM2MzBiYmI3NTNkZDk0ZmU1YWNjY2JkYjk0NzEzYTI1
NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3Qu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCkBA
IC0zMjIsNyArMzIyLDcgQEAgc3RhdGljIFN0cmluZyBjYW5vbmljYWxMYW5nVGFnKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwYXJ0cykKICAgICAgICAgaWYgKGlzVmFsaWRSZWdpb24pIHsKICAgICAg
ICAgICAgICsrY3VycmVudEluZGV4OwogICAgICAgICAgICAgY2Fub25pY2FsLmFwcGVuZCgnLScp
OwotICAgICAgICAgICAgY2Fub25pY2FsLmFwcGVuZChyZWdpb24udXBwZXIoKSk7CisgICAgICAg
ICAgICBjYW5vbmljYWwuYXBwZW5kKHJlZ2lvbi5jb252ZXJ0VG9BU0NJSVVwcGVyY2FzZSgpKTsK
ICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cmluZ1Byb3RvdHlwZS5jcHAKaW5kZXggMmQ1MDJiMDQ4YWZiMDE1NTAzZmE5NTI0N2JhMTMy
ZDgxZmIxOWYxMS4uZDVkY2RiYjcxNDVhYTI0MmNiN2JkOGY0YTllMGQ0NTUyMjY5ZGVkMSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3Bw
CkBAIC0xNDA2LDE3ICsxNDA2LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG9GdW5jVG9Mb3dlckNhc2UoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBKU1N0cmluZyogc1ZhbCA9IHRoaXNWYWx1ZS50
b1N0cmluZyhleGVjKTsKICAgICBjb25zdCBTdHJpbmcmIHMgPSBzVmFsLT52YWx1ZShleGVjKTsK
LQotICAgIGludCBzU2l6ZSA9IHMubGVuZ3RoKCk7Ci0gICAgaWYgKCFzU2l6ZSkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShzVmFsKTsKLSAgICBSRUxFQVNFX0FTU0VSVChzU2l6ZSA+
PSAwKTsKLQotICAgIFN0cmluZ0ltcGwqIG91ckltcGwgPSBzLmltcGwoKTsKLSAgICBSZWZQdHI8
U3RyaW5nSW1wbD4gbG93ZXIgPSBvdXJJbXBsLT5sb3dlcigpOwotICAgIGlmIChvdXJJbXBsID09
IGxvd2VyKQorICAgIFN0cmluZyBsb3dlcmNhc2VkU3RyaW5nID0gcy5jb252ZXJ0VG9Mb3dlcmNh
c2VXaXRob3V0TG9jYWxlKCk7CisgICAgaWYgKGxvd2VyY2FzZWRTdHJpbmcuaW1wbCgpID09IHMu
aW1wbCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNWYWwpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgU3RyaW5nKGxvd2VyLnJlbGVhc2UoKSkp
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGxvd2VyY2FzZWRT
dHJpbmcpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1
bmNUb1VwcGVyQ2FzZShFeGVjU3RhdGUqIGV4ZWMpCkBAIC0xNDI2LDE2ICsxNDE5LDEwIEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2UoRXhl
Y1N0YXRlKiBleGVjKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAg
ICBKU1N0cmluZyogc1ZhbCA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKICAgICBjb25zdCBT
dHJpbmcmIHMgPSBzVmFsLT52YWx1ZShleGVjKTsKLQotICAgIGludCBzU2l6ZSA9IHMubGVuZ3Ro
KCk7Ci0gICAgaWYgKCFzU2l6ZSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzVmFs
KTsKLQotICAgIFN0cmluZ0ltcGwqIHNJbXBsID0gcy5pbXBsKCk7Ci0gICAgUmVmUHRyPFN0cmlu
Z0ltcGw+IHVwcGVyID0gc0ltcGwtPnVwcGVyKCk7Ci0gICAgaWYgKHNJbXBsID09IHVwcGVyKQor
ICAgIFN0cmluZyB1cHBlcmNhc2VkU3RyaW5nID0gcy5jb252ZXJ0VG9VcHBlcmNhc2VXaXRob3V0
TG9jYWxlKCk7CisgICAgaWYgKHVwcGVyY2FzZWRTdHJpbmcuaW1wbCgpID09IHMuaW1wbCgpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNWYWwpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNTdHJpbmcoZXhlYywgU3RyaW5nKHVwcGVyLnJlbGVhc2UoKSkpKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIHVwcGVyY2FzZWRTdHJpbmcpKTsK
IH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNMb2NhbGVD
b21wYXJlKEV4ZWNTdGF0ZSogZXhlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQv
QXRvbWljU3RyaW5nLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcApp
bmRleCA5OWUwZDZlNTkxN2U4NGQ1ODA0ZDEwOTY5NDVlNzIxYWY3NGQ4ODUwLi5hOWZlZjE1MTc2
ZDQ1MDgwMGU1YTI1NzljNTQzN2YzZThkZDQ3MGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L0F0b21pY1N0cmluZy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNT
dHJpbmcuY3BwCkBAIC0zMiwyMiArMzIsNiBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAotQXRvbWlj
U3RyaW5nIEF0b21pY1N0cmluZzo6bG93ZXIoKSBjb25zdAotewotICAgIC8vIE5vdGU6IFRoaXMg
aXMgYSBob3QgZnVuY3Rpb24gaW4gdGhlIERyb21hZW8gYmVuY2htYXJrLgotICAgIFN0cmluZ0lt
cGwqIGltcGwgPSB0aGlzLT5pbXBsKCk7Ci0gICAgaWYgKFVOTElLRUxZKCFpbXBsKSkKLSAgICAg
ICAgcmV0dXJuIEF0b21pY1N0cmluZygpOwotCi0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IGxvd2Vy
Y2FzZWRTdHJpbmcgPSBpbXBsLT5sb3dlcigpOwotICAgIGlmIChMSUtFTFkobG93ZXJjYXNlZFN0
cmluZyA9PSBpbXBsKSkKLSAgICAgICAgcmV0dXJuICp0aGlzOwotCi0gICAgQXRvbWljU3RyaW5n
IHJlc3VsdDsKLSAgICByZXN1bHQubV9zdHJpbmcgPSBBdG9taWNTdHJpbmdJbXBsOjphZGQobG93
ZXJjYXNlZFN0cmluZy5nZXQoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogdGVtcGxhdGU8
QXRvbWljU3RyaW5nOjpDYXNlQ29udmVydFR5cGUgdHlwZT4KIEFMV0FZU19JTkxJTkUgQXRvbWlj
U3RyaW5nIEF0b21pY1N0cmluZzo6Y29udmVydEFTQ0lJQ2FzZSgpIGNvbnN0CiB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5oIGIvU291cmNlL1dURi93dGYv
dGV4dC9BdG9taWNTdHJpbmcuaAppbmRleCBhOWU0MDY5MWJhNmNkYWRkYTY0NDA0ZTVlY2QwNWVj
ZjU2MDk2OGVhLi5hYmJkYjQ1ZGVmMjk5ZjRhZGVmZmIwM2UzZDZlNGQ1OGFkNTA2Y2UyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5oCisrKyBiL1NvdXJjZS9X
VEYvd3RmL3RleHQvQXRvbWljU3RyaW5nLmgKQEAgLTE1NSw3ICsxNTUsNiBAQCBwdWJsaWM6CiAK
ICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgQXRvbWljU3RyaW5nIGNvbnZlcnRUb0FTQ0lJTG93
ZXJjYXNlKCkgY29uc3Q7CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIEF0b21pY1N0cmluZyBj
b252ZXJ0VG9BU0NJSVVwcGVyY2FzZSgpIGNvbnN0OwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQ
SSBBdG9taWNTdHJpbmcgbG93ZXIoKSBjb25zdDsKIAogICAgIGludCB0b0ludChib29sKiBvayA9
IDApIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLnRvSW50KG9rKTsgfQogICAgIGRvdWJsZSB0b0Rv
dWJsZShib29sKiBvayA9IDApIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLnRvRG91YmxlKG9rKTsg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcCBiL1NvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKaW5kZXggY2IzZDAyNGJiYTkwOWYyYWJlODI1
YTNmOWEwNDEyM2RhNTM1M2EwYi4uN2Y3OTQ4OTA3YzY5OTMyMDQ0MWExODlmMWFiMmIyZGIyNjlk
NzVlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCkBAIC0zNjEsOSArMzYxLDkgQEAg
VUNoYXIzMiBTdHJpbmdJbXBsOjpjaGFyYWN0ZXJTdGFydGluZ0F0KHVuc2lnbmVkIGkpCiAgICAg
cmV0dXJuIDA7CiB9CiAKLVJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpsb3dlcigpCitSZWY8
U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZSgp
CiB7Ci0gICAgLy8gTm90ZTogVGhpcyBpcyBhIGhvdCBmdW5jdGlvbiBpbiB0aGUgRHJvbWFlbyBi
ZW5jaG1hcmssIHNwZWNpZmljYWxseSB0aGUKKyAgICAvLyBOb3RlOiBBdCBvbmUgdGltZSB0aGlz
IHdhcyBhIGhvdCBmdW5jdGlvbiBpbiB0aGUgRHJvbWFlbyBiZW5jaG1hcmssIHNwZWNpZmljYWxs
eSB0aGUKICAgICAvLyBuby1vcCBjb2RlIHBhdGggdXAgdGhyb3VnaCB0aGUgZmlyc3QgJ3JldHVy
bicgc3RhdGVtZW50LgogCiAgICAgLy8gRmlyc3Qgc2NhbiB0aGUgc3RyaW5nIGZvciB1cHBlcmNh
c2UgYW5kIG5vbi1BU0NJSSBjaGFyYWN0ZXJzOgpAQCAtNDQyLDExICs0NDIsMTIgQEAgU2xvd1Bh
dGg6CiAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotUmVmPFN0cmlu
Z0ltcGw+IFN0cmluZ0ltcGw6OnVwcGVyKCkKK1JlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpj
b252ZXJ0VG9VcHBlcmNhc2VXaXRob3V0TG9jYWxlKCkKIHsKLSAgICAvLyBUaGlzIGZ1bmN0aW9u
IGNvdWxkIGJlIG9wdGltaXplZCBmb3Igbm8tb3AgY2FzZXMgdGhlIHdheSBsb3dlcigpIGlzLAot
ICAgIC8vIGJ1dCBpbiBlbXBpcmljYWwgdGVzdGluZywgZmV3IGFjdHVhbCBjYWxscyB0byB1cHBl
cigpIGFyZSBuby1vcHMsIHNvCi0gICAgLy8gaXQgd291bGRuJ3QgYmUgd29ydGggdGhlIGV4dHJh
IHRpbWUgZm9yIHByZS1zY2FubmluZy4KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGNvdWxkIGJlIG9w
dGltaXplZCBmb3Igbm8tb3AgY2FzZXMgdGhlIHdheQorICAgIC8vIGNvbnZlcnRUb0xvd2VyY2Fz
ZVdpdGhvdXRMb2NhbGUoKSBpcywgYnV0IGluIGVtcGlyaWNhbCB0ZXN0aW5nLAorICAgIC8vIGZl
dyBhY3R1YWwgY2FsbHMgdG8gdXBwZXIoKSBhcmUgbm8tb3BzLCBzbyBpdCB3b3VsZG4ndCBiZSB3
b3J0aAorICAgIC8vIHRoZSBleHRyYSB0aW1lIGZvciBwcmUtc2Nhbm5pbmcuCiAKICAgICBpZiAo
bV9sZW5ndGggPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQz
Ml90Pjo6bWF4KCkpKQogICAgICAgICBDUkFTSCgpOwpAQCAtNDc3LDcgKzQ3OCw3IEBAIFJlZjxT
dHJpbmdJbXBsPiBTdHJpbmdJbXBsOjp1cHBlcigpCiAgICAgICAgIGludCBudW1iZXJTaGFycFND
aGFyYWN0ZXJzID0gMDsKIAogICAgICAgICAvLyBUaGVyZSBhcmUgdHdvIHNwZWNpYWwgY2FzZXMu
Ci0gICAgICAgIC8vICAxLiBsYXRpbi0xIGNoYXJhY3RlcnMgd2hlbiBjb252ZXJ0ZWQgdG8gdXBw
ZXIgY2FzZSBhcmUgMTYgYml0IGNoYXJhY3RlcnMuCisgICAgICAgIC8vICAxLiBTb21lIExhdGlu
LTEgY2hhcmFjdGVycyB3aGVuIGNvbnZlcnRlZCB0byB1cHBlciBjYXNlIGFyZSAxNiBiaXQgY2hh
cmFjdGVycy4KICAgICAgICAgLy8gIDIuIExvd2VyIGNhc2Ugc2hhcnAtUyBjb252ZXJ0cyB0byAi
U1MiICh0d28gY2hhcmFjdGVycykKICAgICAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKICAgICAgICAgICAgIExDaGFyIGMgPSBtX2RhdGE4W2ldOwpAQCAtNDg1LDcg
KzQ4Niw3IEBAIFJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjp1cHBlcigpCiAgICAgICAgICAg
ICAgICAgKytudW1iZXJTaGFycFNDaGFyYWN0ZXJzOwogICAgICAgICAgICAgQVNTRVJUKHVfdG91
cHBlcihjKSA8PSAweEZGRkYpOwogICAgICAgICAgICAgVUNoYXIgdXBwZXIgPSB1X3RvdXBwZXIo
Yyk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkodXBwZXIgPiAweGZmKSkgeworICAgICAgICAg
ICAgaWYgKFVOTElLRUxZKHVwcGVyID4gMHhGRikpIHsKICAgICAgICAgICAgICAgICAvLyBTaW5j
ZSB0aGlzIHVwcGVyLWNhc2VkIGNoYXJhY3RlciBkb2VzIG5vdCBmaXQgaW4gYW4gOC1iaXQgc3Ry
aW5nLCB3ZSBuZWVkIHRvIHRha2UgdGhlIDE2LWJpdCBwYXRoLgogICAgICAgICAgICAgICAgIGdv
dG8gdXBjb252ZXJ0OwogICAgICAgICAgICAgfQpAQCAtNTU0LDE0ICs1NTUsMTQgQEAgc3RhdGlj
IGlubGluZSBib29sIG5lZWRzVHVya2lzaENhc2luZ1J1bGVzKGNvbnN0IEF0b21pY1N0cmluZyYg
bG9jYWxlSWRlbnRpZmllcikKICAgICAgICAgJiYgKGxvY2FsZUlkZW50aWZpZXIubGVuZ3RoKCkg
PT0gMiB8fCBsb2NhbGVJZGVudGlmaWVyWzJdID09ICctJyk7CiB9CiAKLVJlZjxTdHJpbmdJbXBs
PiBTdHJpbmdJbXBsOjpsb3dlcihjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIp
CitSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y29udmVydFRvTG93ZXJjYXNlV2l0aExvY2Fs
ZShjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpCiB7CiAgICAgLy8gVXNlIHRo
ZSBtb3JlLW9wdGltaXplZCBjb2RlIHBhdGggbW9zdCBvZiB0aGUgdGltZS4KICAgICAvLyBBc3N1
bWluZyBoZXJlIHRoYXQgdGhlIG9ubHkgbG9jYWxlLXNwZWNpZmljIGxvd2VyY2FzaW5nIGlzIHRo
ZSBUdXJraXNoIGNhc2luZyBydWxlcy4KICAgICAvLyBGSVhNRTogQ291bGQgcG9zc2libHkgb3B0
aW1pemUgZnVydGhlciBieSBsb29raW5nIGZvciB0aGUgc3BlY2lmaWMgc2VxdWVuY2VzCiAgICAg
Ly8gdGhhdCBoYXZlIGxvY2FsZS1zcGVjaWZpYyBsb3dlcmNhc2luZy4gVGhlcmUgYXJlIG9ubHkg
dGhyZWUgb2YgdGhlbS4KICAgICBpZiAoIW5lZWRzVHVya2lzaENhc2luZ1J1bGVzKGxvY2FsZUlk
ZW50aWZpZXIpKQotICAgICAgICByZXR1cm4gbG93ZXIoKTsKKyAgICAgICAgcmV0dXJuIGNvbnZl
cnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGUoKTsKIAogICAgIC8vIEZJWE1FOiBDb3VsZCBzaGFy
ZSBtb3JlIGNvZGUgd2l0aCB0aGUgbWFpbiBTdHJpbmdJbXBsOjpsb3dlciBieSBmYWN0b3Jpbmcg
b3V0CiAgICAgLy8gdGhpcyBsYXN0IHBhcnQgaW50byBhIHNoYXJlZCBmdW5jdGlvbiB0aGF0IHRh
a2VzIGEgbG9jYWxlIHN0cmluZywgc2luY2UgdGhpcyBpcwpAQCAtNTkwLDEzICs1OTEsMTMgQEAg
UmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6Omxvd2VyKGNvbnN0IEF0b21pY1N0cmluZyYgbG9j
YWxlSWRlbnRpZmllcikKICAgICByZXR1cm4gbmV3U3RyaW5nLnJlbGVhc2VOb25OdWxsKCk7CiB9
CiAKLVJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjp1cHBlcihjb25zdCBBdG9taWNTdHJpbmcm
IGxvY2FsZUlkZW50aWZpZXIpCitSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y29udmVydFRv
VXBwZXJjYXNlV2l0aExvY2FsZShjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIp
CiB7CiAgICAgLy8gVXNlIHRoZSBtb3JlLW9wdGltaXplZCBjb2RlIHBhdGggbW9zdCBvZiB0aGUg
dGltZS4KICAgICAvLyBBc3N1bWluZyBoZXJlIHRoYXQgdGhlIG9ubHkgbG9jYWxlLXNwZWNpZmlj
IGxvd2VyY2FzaW5nIGlzIHRoZSBUdXJraXNoIGNhc2luZyBydWxlcywKICAgICAvLyBhbmQgdGhh
dCB0aGUgb25seSBhZmZlY3RlZCBjaGFyYWN0ZXIgaXMgbG93ZXJjYXNlICJpIi4KICAgICBpZiAo
IW5lZWRzVHVya2lzaENhc2luZ1J1bGVzKGxvY2FsZUlkZW50aWZpZXIpIHx8IGZpbmQoJ2knKSA9
PSBub3RGb3VuZCkKLSAgICAgICAgcmV0dXJuIHVwcGVyKCk7CisgICAgICAgIHJldHVybiBjb252
ZXJ0VG9VcHBlcmNhc2VXaXRob3V0TG9jYWxlKCk7CiAKICAgICBpZiAobV9sZW5ndGggPiBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpKQog
ICAgICAgICBDUkFTSCgpOwpAQCAtNjIzLDYwICs2MjQsODYgQEAgUmVmPFN0cmluZ0ltcGw+IFN0
cmluZ0ltcGw6OnVwcGVyKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcikKIAog
UmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmZvbGRDYXNlKCkKIHsKLSAgICAvLyBGSVhNRTog
V2h5IGRvZXNuJ3QgdGhpcyBmdW5jdGlvbiBoYXZlIGEgcHJlZmxpZ2h0IGxpa2UgdGhlIG9uZSBp
biBTdHJpbmdJbXBsOjpsb3dlcj8KLQotICAgIGlmIChtX2xlbmd0aCA+IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkpCi0gICAgICAgIENS
QVNIKCk7Ci0gICAgaW50MzJfdCBsZW5ndGggPSBtX2xlbmd0aDsKLQogICAgIGlmIChpczhCaXQo
KSkgewotICAgICAgICAvLyBEbyBhIGZhc3RlciBsb29wIGZvciB0aGUgY2FzZSB3aGVyZSBhbGwg
dGhlIGNoYXJhY3RlcnMgYXJlIEFTQ0lJLgotICAgICAgICBMQ2hhciogZGF0YTsKLSAgICAgICAg
YXV0byBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YSk7Ci0gICAg
ICAgIExDaGFyIG9yZWQgPSAwOwotCi0gICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBMQ2hhciBjID0gbV9kYXRhOFtpXTsKLSAgICAgICAg
ICAgIGRhdGFbaV0gPSB0b0FTQ0lJTG93ZXIoYyk7Ci0gICAgICAgICAgICBvcmVkIHw9IGM7Cisg
ICAgICAgIHVuc2lnbmVkIGZhaWxpbmdJbmRleDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8gY2hhcmFjdGVyID0gbV9k
YXRhOFtpXTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghaXNBU0NJSShjaGFyYWN0ZXIpIHx8
IGlzQVNDSUlVcHBlcihjaGFyYWN0ZXIpKSkgeworICAgICAgICAgICAgICAgIGZhaWxpbmdJbmRl
eCA9IGk7CisgICAgICAgICAgICAgICAgZ290byBTbG93UGF0aDsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgfQorICAgICAgICAvLyBTdHJpbmcgd2FzIGFsbCBBU0NJSSBhbmQgbm8gdXBwZXJjYXNl
LCBzbyBqdXN0IHJldHVybiBhcy1pcy4KKyAgICAgICAgcmV0dXJuICp0aGlzOwogCi0gICAgICAg
IGlmICghKG9yZWQgJiB+MHg3RikpCi0gICAgICAgICAgICByZXR1cm4gbmV3SW1wbDsKLQotICAg
ICAgICAvLyBEbyBhIHNsb3dlciBpbXBsZW1lbnRhdGlvbiBmb3IgY2FzZXMgdGhhdCBpbmNsdWRl
IG5vbi1BU0NJSSBMYXRpbi0xIGNoYXJhY3RlcnMuCi0gICAgICAgIC8vIEZJWE1FOiBTaG91bGRu
J3QgdGhpcyB1c2UgdV9mb2xkQ2FzZSBpbnN0ZWFkIG9mIHVfdG9sb3dlcj8KLSAgICAgICAgZm9y
IChpbnQzMl90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIEFTU0VSVCh1
X3RvbG93ZXIobV9kYXRhOFtpXSkgPD0gMHhGRik7Ci0gICAgICAgICAgICBkYXRhW2ldID0gc3Rh
dGljX2Nhc3Q8TENoYXI+KHVfdG9sb3dlcihtX2RhdGE4W2ldKSk7CitTbG93UGF0aDoKKyAgICAg
ICAgYm9vbCBuZWVkMTZCaXRDaGFyYWN0ZXJzID0gZmFsc2U7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGZhaWxpbmdJbmRleDsgaSA8IG1fbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGF1
dG8gY2hhcmFjdGVyID0gbV9kYXRhOFtpXTsKKyAgICAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0g
MHhCNSB8fCBjaGFyYWN0ZXIgPT0gMHhERikgeworICAgICAgICAgICAgICAgIG5lZWQxNkJpdENo
YXJhY3RlcnMgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQog
ICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIG5ld0ltcGw7CisgICAgICAgIGlmICghbmVlZDE2
Qml0Q2hhcmFjdGVycykgeworICAgICAgICAgICAgTENoYXIqIGRhdGE4OworICAgICAgICAgICAg
YXV0byBmb2xkZWQgPSBjcmVhdGVVbmluaXRpYWxpemVkSW50ZXJuYWxOb25FbXB0eShtX2xlbmd0
aCwgZGF0YTgpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZhaWxpbmdJ
bmRleDsgKytpKQorICAgICAgICAgICAgICAgIGRhdGE4W2ldID0gbV9kYXRhOFtpXTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGZhaWxpbmdJbmRleDsgaSA8IG1fbGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgICAgICAgICBhdXRvIGNoYXJhY3RlciA9IG1fZGF0YThbaV07CisgICAgICAg
ICAgICAgICAgaWYgKGlzQVNDSUkoY2hhcmFjdGVyKSkKKyAgICAgICAgICAgICAgICAgICAgZGF0
YThbaV0gPSB0b0FTQ0lJTG93ZXIoY2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHVfZm9sZENhc2UoY2hhcmFjdGVyLCBVX0ZPTERf
Q0FTRV9ERUZBVUxUKSA8PSAweEZGKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YThbaV0gPSBz
dGF0aWNfY2FzdDxMQ2hhcj4odV9mb2xkQ2FzZShjaGFyYWN0ZXIsIFVfRk9MRF9DQVNFX0RFRkFV
TFQpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gZm9sZGVkOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gRklYTUU6IFVu
Y2xlYXIgd2h5IHdlIHVzZSBnb3RvIGluIHRoZSA4LWJpdCBjYXNlLCBhbmQgYSBkaWZmZXJlbnQg
YXBwcm9hY2ggaW4gdGhlIDE2LWJpdCBjYXNlLgorICAgICAgICBib29sIG5vVXBwZXIgPSB0cnVl
OworICAgICAgICB1bnNpZ25lZCBvcmVkID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IG1f
ZGF0YTE2W2ldOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKGlzQVNDSUlVcHBlcihjaGFyYWN0
ZXIpKSkKKyAgICAgICAgICAgICAgICBub1VwcGVyID0gZmFsc2U7CisgICAgICAgICAgICBvcmVk
IHw9IGNoYXJhY3RlcjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIShvcmVkICYgfjB4N0YpKSB7
CisgICAgICAgICAgICBpZiAobm9VcHBlcikgeworICAgICAgICAgICAgICAgIC8vIFN0cmluZyB3
YXMgYWxsIEFTQ0lJIGFuZCBubyB1cHBlcmNhc2UsIHNvIGp1c3QgcmV0dXJuIGFzLWlzLgorICAg
ICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFVD
aGFyKiBkYXRhMTY7CisgICAgICAgICAgICBhdXRvIGZvbGRlZCA9IGNyZWF0ZVVuaW5pdGlhbGl6
ZWRJbnRlcm5hbE5vbkVtcHR5KG1fbGVuZ3RoLCBkYXRhMTYpOworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgZGF0YTE2
W2ldID0gdG9BU0NJSUxvd2VyKG1fZGF0YTE2W2ldKTsKKyAgICAgICAgICAgIHJldHVybiBmb2xk
ZWQ7CisgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBEbyBhIGZhc3RlciBsb29wIGZvciB0aGUg
Y2FzZSB3aGVyZSBhbGwgdGhlIGNoYXJhY3RlcnMgYXJlIEFTQ0lJLgotICAgIFVDaGFyKiBkYXRh
OwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZCht
X2xlbmd0aCwgZGF0YSk7Ci0gICAgVUNoYXIgb3JlZCA9IDA7Ci0gICAgZm9yIChpbnQzMl90IGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgVUNoYXIgYyA9IG1fZGF0YTE2W2ldOwot
ICAgICAgICBvcmVkIHw9IGM7Ci0gICAgICAgIGRhdGFbaV0gPSB0b0FTQ0lJTG93ZXIoYyk7Ci0g
ICAgfQotICAgIGlmICghKG9yZWQgJiB+MHg3RikpCi0gICAgICAgIHJldHVybiBuZXdJbXBsLnJl
bGVhc2VOb25OdWxsKCk7CisgICAgaWYgKG1fbGVuZ3RoID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSkKKyAgICAgICAgQ1JBU0goKTsK
IAotICAgIC8vIERvIGEgc2xvd2VyIGltcGxlbWVudGF0aW9uIGZvciBjYXNlcyB0aGF0IGluY2x1
ZGUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCisgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMg
PSBTdHJpbmdWaWV3KCp0aGlzKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKKworICAgIFVDaGFy
KiBkYXRhOworICAgIGF1dG8gZm9sZGVkID0gY3JlYXRlVW5pbml0aWFsaXplZEludGVybmFsTm9u
RW1wdHkobV9sZW5ndGgsIGRhdGEpOworICAgIGludDMyX3QgbGVuZ3RoID0gbV9sZW5ndGg7CiAg
ICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgaW50MzJfdCByZWFsTGVu
Z3RoID0gdV9zdHJGb2xkQ2FzZShkYXRhLCBsZW5ndGgsIG1fZGF0YTE2LCBtX2xlbmd0aCwgVV9G
T0xEX0NBU0VfREVGQVVMVCwgJnN0YXR1cyk7CisgICAgaW50MzJfdCByZWFsTGVuZ3RoID0gdV9z
dHJGb2xkQ2FzZShkYXRhLCBsZW5ndGgsIHVwY29udmVydGVkQ2hhcmFjdGVycywgbGVuZ3RoLCBV
X0ZPTERfQ0FTRV9ERUZBVUxULCAmc3RhdHVzKTsKICAgICBpZiAoVV9TVUNDRVNTKHN0YXR1cykg
JiYgcmVhbExlbmd0aCA9PSBsZW5ndGgpCi0gICAgICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2VO
b25OdWxsKCk7Ci0gICAgbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVhbExlbmd0aCwg
ZGF0YSk7CisgICAgICAgIHJldHVybiBmb2xkZWQ7CisgICAgQVNTRVJUKHJlYWxMZW5ndGggPiBs
ZW5ndGgpOworICAgIGZvbGRlZCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWRJbnRlcm5hbE5vbkVtcHR5
KHJlYWxMZW5ndGgsIGRhdGEpOwogICAgIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKLSAgICB1X3N0
ckZvbGRDYXNlKGRhdGEsIHJlYWxMZW5ndGgsIG1fZGF0YTE2LCBtX2xlbmd0aCwgVV9GT0xEX0NB
U0VfREVGQVVMVCwgJnN0YXR1cyk7CisgICAgdV9zdHJGb2xkQ2FzZShkYXRhLCByZWFsTGVuZ3Ro
LCB1cGNvbnZlcnRlZENoYXJhY3RlcnMsIGxlbmd0aCwgVV9GT0xEX0NBU0VfREVGQVVMVCwgJnN0
YXR1cyk7CiAgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQogICAgICAgICByZXR1cm4gKnRoaXM7
Ci0gICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZU5vbk51bGwoKTsKKyAgICByZXR1cm4gZm9sZGVk
OwogfQogCiB0ZW1wbGF0ZTxTdHJpbmdJbXBsOjpDYXNlQ29udmVydFR5cGUgdHlwZSwgdHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5n
SW1wbC5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKaW5kZXggZTY4NzBiYWY5
NWUyNjk0MGY5M2NlNWNkMWFlNzdmZTdhNjkzODQ0Yi4uMDYzY2U2MzJhNDJkNGJmOTM2YjdkMzY2
ZDhjZmQ5YjFkZTljYmQ5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJ
bXBsLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKQEAgLTY4MSwxMCAr
NjgxLDEwIEBAIHB1YmxpYzoKIAogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBSZWY8U3RyaW5n
SW1wbD4gY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKICAgICBXVEZfRVhQT1JUX1NUUklOR19B
UEkgUmVmPFN0cmluZ0ltcGw+IGNvbnZlcnRUb0FTQ0lJVXBwZXJjYXNlKCk7Ci0gICAgV1RGX0VY
UE9SVF9TVFJJTkdfQVBJIFJlZjxTdHJpbmdJbXBsPiBsb3dlcigpOwotICAgIFdURl9FWFBPUlRf
U1RSSU5HX0FQSSBSZWY8U3RyaW5nSW1wbD4gdXBwZXIoKTsKLSAgICBXVEZfRVhQT1JUX1NUUklO
R19BUEkgUmVmPFN0cmluZ0ltcGw+IGxvd2VyKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRl
bnRpZmllcik7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJlZjxTdHJpbmdJbXBsPiB1cHBl
cihjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpOworICAgIFdURl9FWFBPUlRf
U1RSSU5HX0FQSSBSZWY8U3RyaW5nSW1wbD4gY29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2Fs
ZSgpOworICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBSZWY8U3RyaW5nSW1wbD4gY29udmVydFRv
VXBwZXJjYXNlV2l0aG91dExvY2FsZSgpOworICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBSZWY8
U3RyaW5nSW1wbD4gY29udmVydFRvTG93ZXJjYXNlV2l0aExvY2FsZShjb25zdCBBdG9taWNTdHJp
bmcmIGxvY2FsZUlkZW50aWZpZXIpOworICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBSZWY8U3Ry
aW5nSW1wbD4gY29udmVydFRvVXBwZXJjYXNlV2l0aExvY2FsZShjb25zdCBBdG9taWNTdHJpbmcm
IGxvY2FsZUlkZW50aWZpZXIpOwogCiAgICAgUmVmPFN0cmluZ0ltcGw+IGZvbGRDYXNlKCk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcCBiL1NvdXJjZS9X
VEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAppbmRleCAxYjQzMDU2NzYyYjI0ZDJmYTMyM2IyOThh
Mzk3MDc0YWFhYzJkNzIwLi5jZTM3NmUyM2EwOTU5OWZkYzU1Y2VkNWU5YjkzMDg2ODQ0YTZlYTBi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCkBAIC0zNTEsMzIgKzM1MSwzMiBAQCBTdHJp
bmcgU3RyaW5nOjpjb252ZXJ0VG9BU0NJSVVwcGVyY2FzZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1f
aW1wbC0+Y29udmVydFRvQVNDSUlVcHBlcmNhc2UoKTsKIH0KIAotU3RyaW5nIFN0cmluZzo6bG93
ZXIoKSBjb25zdAorU3RyaW5nIFN0cmluZzo6Y29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2Fs
ZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ltcGwpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
LSAgICByZXR1cm4gbV9pbXBsLT5sb3dlcigpOworICAgIHJldHVybiBtX2ltcGwtPmNvbnZlcnRU
b0xvd2VyY2FzZVdpdGhvdXRMb2NhbGUoKTsKIH0KIAotU3RyaW5nIFN0cmluZzo6dXBwZXIoKSBj
b25zdAorU3RyaW5nIFN0cmluZzo6Y29udmVydFRvVXBwZXJjYXNlV2l0aG91dExvY2FsZSgpIGNv
bnN0CiB7CiAgICAgaWYgKCFtX2ltcGwpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBy
ZXR1cm4gbV9pbXBsLT51cHBlcigpOworICAgIHJldHVybiBtX2ltcGwtPmNvbnZlcnRUb1VwcGVy
Y2FzZVdpdGhvdXRMb2NhbGUoKTsKIH0KIAotU3RyaW5nIFN0cmluZzo6bG93ZXIoY29uc3QgQXRv
bWljU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyKSBjb25zdAorU3RyaW5nIFN0cmluZzo6Y29udmVy
dFRvTG93ZXJjYXNlV2l0aExvY2FsZShjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZp
ZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ltcGwpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
LSAgICByZXR1cm4gbV9pbXBsLT5sb3dlcihsb2NhbGVJZGVudGlmaWVyKTsKKyAgICByZXR1cm4g
bV9pbXBsLT5jb252ZXJ0VG9Mb3dlcmNhc2VXaXRoTG9jYWxlKGxvY2FsZUlkZW50aWZpZXIpOwog
fQogCi1TdHJpbmcgU3RyaW5nOjp1cHBlcihjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50
aWZpZXIpIGNvbnN0CitTdHJpbmcgU3RyaW5nOjpjb252ZXJ0VG9VcHBlcmNhc2VXaXRoTG9jYWxl
KGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcikgY29uc3QKIHsKICAgICBpZiAo
IW1faW1wbCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBtX2ltcGwtPnVw
cGVyKGxvY2FsZUlkZW50aWZpZXIpOworICAgIHJldHVybiBtX2ltcGwtPmNvbnZlcnRUb1VwcGVy
Y2FzZVdpdGhMb2NhbGUobG9jYWxlSWRlbnRpZmllcik7CiB9CiAKIFN0cmluZyBTdHJpbmc6OnN0
cmlwV2hpdGVTcGFjZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dU
RlN0cmluZy5oIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaAppbmRleCA4OGMxM2Rh
ZjMzOTA1ODUwZTAxY2IyMWNkOTJhMGIyOTZhZTczNWNhLi4zYzU1OTA4MTFkYWYyMTBkYjllM2Zj
Yzk2MWFlYWM0YTFhMmYxYWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0
cmluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgKQEAgLTMzMSwxNiAr
MzMxLDEyIEBAIHB1YmxpYzoKICAgICBTdHJpbmcgbGVmdCh1bnNpZ25lZCBsZW4pIGNvbnN0IHsg
cmV0dXJuIHN1YnN0cmluZygwLCBsZW4pOyB9CiAgICAgU3RyaW5nIHJpZ2h0KHVuc2lnbmVkIGxl
bikgY29uc3QgeyByZXR1cm4gc3Vic3RyaW5nKGxlbmd0aCgpIC0gbGVuLCBsZW4pOyB9CiAKLSAg
ICAvLyBSZXR1cm5zIGEgbG93ZXJjYXNlL3VwcGVyY2FzZSB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcu
Ci0gICAgLy8gVGhlIGNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlIGlzIHVzZWZ1bCBpbiBtYW55IGNv
bnRleHRzIHN1Y2ggYXMgSFRNTCB3aGVyZSB3ZSBkb24ndAotICAgIC8vIHdhbnQgdG8gZG8gYW55
IGNvbnZlcnNpb24gZm9yIG5vbi1BU0NJSSBsZXR0ZXJzLgogICAgIFdURl9FWFBPUlRfU1RSSU5H
X0FQSSBTdHJpbmcgY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSBjb25zdDsKLSAgICBXVEZfRVhQ
T1JUX1NUUklOR19BUEkgU3RyaW5nIGxvd2VyKCkgY29uc3Q7CiAgICAgV1RGX0VYUE9SVF9TVFJJ
TkdfQVBJIFN0cmluZyBjb252ZXJ0VG9BU0NJSVVwcGVyY2FzZSgpIGNvbnN0OwotICAgIFdURl9F
WFBPUlRfU1RSSU5HX0FQSSBTdHJpbmcgdXBwZXIoKSBjb25zdDsKLQotICAgIFdURl9FWFBPUlRf
U1RSSU5HX0FQSSBTdHJpbmcgbG93ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGVJZGVudGlm
aWVyKSBjb25zdDsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgU3RyaW5nIHVwcGVyKGNvbnN0
IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcikgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9T
VFJJTkdfQVBJIFN0cmluZyBjb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlKCkgY29uc3Q7
CisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyBjb252ZXJ0VG9VcHBlcmNhc2VXaXRo
b3V0TG9jYWxlKCkgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyBjb252
ZXJ0VG9Mb3dlcmNhc2VXaXRoTG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRp
ZmllcikgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyBjb252ZXJ0VG9V
cHBlcmNhc2VXaXRoTG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcikg
Y29uc3Q7CiAKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgU3RyaW5nIHN0cmlwV2hpdGVTcGFj
ZSgpIGNvbnN0OwogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJpbmcgc3RyaXBXaGl0ZVNw
YWNlKElzV2hpdGVTcGFjZUZ1bmN0aW9uUHRyKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKaW5kZXggM2M5MTA1Zjk1OTVj
ODExODQzY2I3NDYzYTBiZjZiYzk5OTIxMTkxYy4uYzBkMTRlMTY1N2FlZTgzMTJiOWY3MGQ1NzU1
OTdiMDM3NTY3ZTQ5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNv
dXJjZS9NZWRpYVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNv
dXJjZS9NZWRpYVNvdXJjZS5jcHAKQEAgLTczMyw3ICs3MzMsNyBAQCBib29sIE1lZGlhU291cmNl
Ojppc1R5cGVTdXBwb3J0ZWQoY29uc3QgU3RyaW5nJiB0eXBlKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICAvLyBGSVhNRTogV2h5IGRvIHdlIGNvbnZlcnQgdG8gbG93ZXJjYXNlIGhlcmUs
IGJ1dCBub3QgaW4gTWVkaWFTb3VyY2U6OmFkZFNvdXJjZUJ1ZmZlcj8KLSAgICBDb250ZW50VHlw
ZSBjb250ZW50VHlwZSh0eXBlLmxvd2VyKCkpOworICAgIENvbnRlbnRUeXBlIGNvbnRlbnRUeXBl
KHR5cGUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CiAgICAgU3RyaW5nIGNvZGVjcyA9IGNv
bnRlbnRUeXBlLnBhcmFtZXRlcigiY29kZWNzIik7CiAKICAgICAvLyAyLiBJZiB0eXBlIGRvZXMg
bm90IGNvbnRhaW4gYSB2YWxpZCBNSU1FIHR5cGUgc3RyaW5nLCB0aGVuIHJldHVybiBmYWxzZS4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9i
amVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmpl
Y3QuY3BwCmluZGV4IGIwNzk4OGVlZTMwYTRmMjgyMGZkMjFhNDAxNTIzNDJiZTQyYTMwMDcuLjA2
YTQzMmFhYzI5ZGU3OTU0YTI3NGE2NGFjZjJkMTM1ZmQ3ZGI4ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtNzYx
LDMxICs3NjEsMjggQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnNlbGVjdFRleHQoQWNj
ZXNzaWJpbGl0eVNlbGVjdFRleHRDcml0ZXJpYSogY3JpdGVyaWEKICAgICAgICAgYm9vbCByZXBs
YWNlU2VsZWN0aW9uID0gZmFsc2U7CiAgICAgICAgIGlmIChmcmFtZS0+c2VsZWN0aW9uKCkuc2V0
U2VsZWN0ZWRSYW5nZShjbG9zZXN0U3RyaW5nUmFuZ2UuZ2V0KCksIERPV05TVFJFQU0sIHRydWUp
KSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGFjdGl2aXR5KSB7Ci0gICAgICAgICAgICBjYXNlIEZp
bmRBbmRDYXBpdGFsaXplOiB7CisgICAgICAgICAgICBjYXNlIEZpbmRBbmRDYXBpdGFsaXplOgog
ICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50U3RyaW5nID0gY2xvc2VzdFN0cmluZzsKICAgICAg
ICAgICAgICAgICBtYWtlQ2FwaXRhbGl6ZWQoJnJlcGxhY2VtZW50U3RyaW5nLCAwKTsKICAgICAg
ICAgICAgICAgICByZXBsYWNlU2VsZWN0aW9uID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgRmluZEFuZFVwcGVyY2FzZToKLSAg
ICAgICAgICAgICAgICByZXBsYWNlbWVudFN0cmluZyA9IGNsb3Nlc3RTdHJpbmcudXBwZXIoKTsK
KyAgICAgICAgICAgICAgICByZXBsYWNlbWVudFN0cmluZyA9IGNsb3Nlc3RTdHJpbmcuY29udmVy
dFRvVXBwZXJjYXNlV2l0aG91dExvY2FsZSgpOyAvLyBGSVhNRTogTmVlZHMgbG9jYWxlIHRvIHdv
cmsgY29ycmVjdGx5LgogICAgICAgICAgICAgICAgIHJlcGxhY2VTZWxlY3Rpb24gPSB0cnVlOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBGaW5kQW5kTG93ZXJjYXNl
OgotICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50U3RyaW5nID0gY2xvc2VzdFN0cmluZy5sb3dl
cigpOworICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50U3RyaW5nID0gY2xvc2VzdFN0cmluZy5j
b252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlKCk7IC8vIEZJWE1FOiBOZWVkcyBsb2NhbGUg
dG8gd29yayBjb3JyZWN0bHkuCiAgICAgICAgICAgICAgICAgcmVwbGFjZVNlbGVjdGlvbiA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEZpbmRBbmRSZXBs
YWNlQWN0aXZpdHk6IHsKICAgICAgICAgICAgICAgICByZXBsYWNlU2VsZWN0aW9uID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBXaGVuIGFwcGx5aW5nIGZpbmQg
YW5kIHJlcGxhY2UgYWN0aXZpdGllcywgd2Ugd2FudCB0byBtYXRjaCB0aGUgY2FwaXRhbGl6YXRp
b24gb2YgdGhlIHJlcGxhY2VkIHRleHQsCiAgICAgICAgICAgICAgICAgLy8gKHVubGVzcyB3ZSdy
ZSByZXBsYWNpbmcgd2l0aCBhbiBhYmJyZXZpYXRpb24uKQotICAgICAgICAgICAgICAgIFN0cmlu
ZyB1cHBlcmNhc2VSZXBsYWNlbWVudFN0cmluZyA9IHJlcGxhY2VtZW50U3RyaW5nLnVwcGVyKCk7
Ci0gICAgICAgICAgICAgICAgaWYgKGNsb3Nlc3RTdHJpbmcubGVuZ3RoKCkgPiAwICYmIHJlcGxh
Y2VtZW50U3RyaW5nLmxlbmd0aCgpID4gMiAmJiByZXBsYWNlbWVudFN0cmluZyAhPSB1cHBlcmNh
c2VSZXBsYWNlbWVudFN0cmluZykgewotICAgICAgICAgICAgICAgICAgICBpZiAoY2xvc2VzdFN0
cmluZ1swXSA9PSBjbG9zZXN0U3RyaW5nLnVwcGVyKClbMF0pCisgICAgICAgICAgICAgICAgaWYg
KGNsb3Nlc3RTdHJpbmcubGVuZ3RoKCkgPiAwICYmIHJlcGxhY2VtZW50U3RyaW5nLmxlbmd0aCgp
ID4gMiAmJiByZXBsYWNlbWVudFN0cmluZyAhPSByZXBsYWNlbWVudFN0cmluZy5jb252ZXJ0VG9V
cHBlcmNhc2VXaXRob3V0TG9jYWxlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNsb3Nl
c3RTdHJpbmdbMF0gPT0gdV90b3VwcGVyKGNsb3Nlc3RTdHJpbmdbMF0pKQogICAgICAgICAgICAg
ICAgICAgICAgICAgbWFrZUNhcGl0YWxpemVkKCZyZXBsYWNlbWVudFN0cmluZywgMCk7CiAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50
U3RyaW5nID0gcmVwbGFjZW1lbnRTdHJpbmcubG93ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJlcGxhY2VtZW50U3RyaW5nID0gcmVwbGFjZW1lbnRTdHJpbmcuY29udmVydFRvTG93ZXJj
YXNlV2l0aG91dExvY2FsZSgpOyAvLyBGSVhNRTogTmVlZHMgbG9jYWxlIHRvIHdvcmsgY29ycmVj
dGx5LgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IGYwMDBiMWYyODg1MWNkMTBhZTA2M2Nk
ZWU4ODcxYjViNzEyNjFhY2EuLjM3YzZlYmJmODY5N2M0M2RlM2YwNTUwM2JhOTMxMzEwZTk5NWJl
MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNzY2LDE5ICs3NjYsMTkgQEAgdm9pZCBE
b2N1bWVudDo6aW52YWxpZGF0ZUFjY2Vzc0tleU1hcCgpCiAgICAgbV9lbGVtZW50c0J5QWNjZXNz
S2V5LmNsZWFyKCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmFkZEltYWdlRWxlbWVudEJ5TG93ZXJj
YXNlZFVzZW1hcChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBuYW1lLCBIVE1MSW1hZ2VFbGVtZW50
JiBlbGVtZW50KQordm9pZCBEb2N1bWVudDo6YWRkSW1hZ2VFbGVtZW50QnlDYXNlRm9sZGVkVXNl
bWFwKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIG5hbWUsIEhUTUxJbWFnZUVsZW1lbnQmIGVsZW1l
bnQpCiB7CiAgICAgcmV0dXJuIG1faW1hZ2VzQnlVc2VtYXAuYWRkKG5hbWUsIGVsZW1lbnQsICp0
aGlzKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6cmVtb3ZlSW1hZ2VFbGVtZW50QnlMb3dlcmNhc2Vk
VXNlbWFwKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIG5hbWUsIEhUTUxJbWFnZUVsZW1lbnQmIGVs
ZW1lbnQpCit2b2lkIERvY3VtZW50OjpyZW1vdmVJbWFnZUVsZW1lbnRCeUNhc2VGb2xkZWRVc2Vt
YXAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYgbmFtZSwgSFRNTEltYWdlRWxlbWVudCYgZWxlbWVu
dCkKIHsKICAgICByZXR1cm4gbV9pbWFnZXNCeVVzZW1hcC5yZW1vdmUobmFtZSwgZWxlbWVudCk7
CiB9CiAKLUhUTUxJbWFnZUVsZW1lbnQqIERvY3VtZW50OjppbWFnZUVsZW1lbnRCeUxvd2VyY2Fz
ZWRVc2VtYXAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYgbmFtZSkgY29uc3QKK0hUTUxJbWFnZUVs
ZW1lbnQqIERvY3VtZW50OjppbWFnZUVsZW1lbnRCeUNhc2VGb2xkZWRVc2VtYXAoY29uc3QgQXRv
bWljU3RyaW5nSW1wbCYgbmFtZSkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9pbWFnZXNCeVVzZW1h
cC5nZXRFbGVtZW50QnlMb3dlcmNhc2VkVXNlbWFwKG5hbWUsICp0aGlzKTsKKyAgICByZXR1cm4g
bV9pbWFnZXNCeVVzZW1hcC5nZXRFbGVtZW50QnlDYXNlRm9sZGVkVXNlbWFwKG5hbWUsICp0aGlz
KTsKIH0KIAogU2VsZWN0b3JRdWVyeSogRG9jdW1lbnQ6OnNlbGVjdG9yUXVlcnlGb3JTdHJpbmco
Y29uc3QgU3RyaW5nJiBzZWxlY3RvclN0cmluZywgRXhjZXB0aW9uQ29kZSYgZWMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oCmluZGV4IGNiNjJmZTg3NjM3YzFjN2FkMDYwZTY5NzYwNmI3OTM0MTBjM2I2MGEu
LjcyY2JiY2NmYTk5NGYxMDBkMzUwMmM5YmQ5NzZiZDQwZTI5MDM5YjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5oCkBAIC0zNTAsOSArMzUwLDkgQEAgcHVibGljOgogICAgIEVsZW1lbnQqIGdldEVsZW1l
bnRCeUFjY2Vzc0tleShjb25zdCBTdHJpbmcmIGtleSk7CiAgICAgdm9pZCBpbnZhbGlkYXRlQWNj
ZXNzS2V5TWFwKCk7CiAKLSAgICB2b2lkIGFkZEltYWdlRWxlbWVudEJ5TG93ZXJjYXNlZFVzZW1h
cChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiwgSFRNTEltYWdlRWxlbWVudCYpOwotICAgIHZvaWQg
cmVtb3ZlSW1hZ2VFbGVtZW50QnlMb3dlcmNhc2VkVXNlbWFwKGNvbnN0IEF0b21pY1N0cmluZ0lt
cGwmLCBIVE1MSW1hZ2VFbGVtZW50Jik7Ci0gICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbGVt
ZW50QnlMb3dlcmNhc2VkVXNlbWFwKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmKSBjb25zdDsKKyAg
ICB2b2lkIGFkZEltYWdlRWxlbWVudEJ5Q2FzZUZvbGRlZFVzZW1hcChjb25zdCBBdG9taWNTdHJp
bmdJbXBsJiwgSFRNTEltYWdlRWxlbWVudCYpOworICAgIHZvaWQgcmVtb3ZlSW1hZ2VFbGVtZW50
QnlDYXNlRm9sZGVkVXNlbWFwKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmLCBIVE1MSW1hZ2VFbGVt
ZW50Jik7CisgICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbGVtZW50QnlDYXNlRm9sZGVkVXNl
bWFwKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmKSBjb25zdDsKIAogICAgIFNlbGVjdG9yUXVlcnkq
IHNlbGVjdG9yUXVlcnlGb3JTdHJpbmcoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwog
ICAgIHZvaWQgY2xlYXJTZWxlY3RvclF1ZXJ5Q2FjaGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50T3JkZXJlZE1hcC5jcHAKaW5kZXggM2UzNGI0ZTA5MWNlNThiYTI3NmYwOTcyNjJiZmEz
NWEzMTlhMzU2Mi4uZGE4ZTRmMjVlNzRjNDJmZWNlOGI5ZGUyMjljYzUwMDUyNGI3Y2QxNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHAKQEAgLTE0NywxOCArMTQ3
LDE4IEBAIEhUTUxNYXBFbGVtZW50KiBEb2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeU1h
cE5hbWUoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYKICAgICB9KSk7CiB9CiAKLUhUTUxNYXBFbGVt
ZW50KiBEb2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeUxvd2VyY2FzZWRNYXBOYW1lKGNv
bnN0IEF0b21pY1N0cmluZ0ltcGwmIGtleSwgY29uc3QgVHJlZVNjb3BlJiBzY29wZSkgY29uc3QK
K0hUTUxNYXBFbGVtZW50KiBEb2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeUNhc2VGb2xk
ZWRNYXBOYW1lKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIGtleSwgY29uc3QgVHJlZVNjb3BlJiBz
Y29wZSkgY29uc3QKIHsKICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTE1hcEVsZW1lbnQ+KGdldChr
ZXksIHNjb3BlLCBbXSAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYga2V5LCBjb25zdCBFbGVtZW50
JiBlbGVtZW50KSB7Ci0gICAgICAgIHJldHVybiBpczxIVE1MTWFwRWxlbWVudD4oZWxlbWVudCkg
JiYgZG93bmNhc3Q8SFRNTE1hcEVsZW1lbnQ+KGVsZW1lbnQpLmdldE5hbWUoKS5sb3dlcigpLmlt
cGwoKSA9PSAma2V5OworICAgICAgICByZXR1cm4gaXM8SFRNTE1hcEVsZW1lbnQ+KGVsZW1lbnQp
ICYmIGVxdWFsKGRvd25jYXN0PEhUTUxNYXBFbGVtZW50PihlbGVtZW50KS5nZXROYW1lKCkuc3Ry
aW5nKCkuZm9sZENhc2UoKS5pbXBsKCksICZrZXkpOwogICAgIH0pKTsKIH0KIAotSFRNTEltYWdl
RWxlbWVudCogRG9jdW1lbnRPcmRlcmVkTWFwOjpnZXRFbGVtZW50QnlMb3dlcmNhc2VkVXNlbWFw
KGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIGtleSwgY29uc3QgVHJlZVNjb3BlJiBzY29wZSkgY29u
c3QKK0hUTUxJbWFnZUVsZW1lbnQqIERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5Q2Fz
ZUZvbGRlZFVzZW1hcChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBrZXksIGNvbnN0IFRyZWVTY29w
ZSYgc2NvcGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbWFnZUVsZW1lbnQ+
KGdldChrZXksIHNjb3BlLCBbXSAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYga2V5LCBjb25zdCBF
bGVtZW50JiBlbGVtZW50KSB7CiAgICAgICAgIC8vIEZJWE1FOiBIVE1MNSBzcGVjaWZpY2F0aW9u
IHNheXMgd2Ugc2hvdWxkIG1hdGNoIGJvdGggaW1hZ2UgYW5kIG9iamVjdCBlbGVtZW50cy4KLSAg
ICAgICAgcmV0dXJuIGlzPEhUTUxJbWFnZUVsZW1lbnQ+KGVsZW1lbnQpICYmIGRvd25jYXN0PEhU
TUxJbWFnZUVsZW1lbnQ+KGVsZW1lbnQpLm1hdGNoZXNMb3dlcmNhc2VkVXNlbWFwKGtleSk7Cisg
ICAgICAgIHJldHVybiBpczxIVE1MSW1hZ2VFbGVtZW50PihlbGVtZW50KSAmJiBkb3duY2FzdDxI
VE1MSW1hZ2VFbGVtZW50PihlbGVtZW50KS5tYXRjaGVzQ2FzZUZvbGRlZFVzZW1hcChrZXkpOwog
ICAgIH0pKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3Jk
ZXJlZE1hcC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5oCmluZGV4
IDcyMDU1NWIyOGQzOTVlMmViNzI0YTNmYmNjMzMyMzdiZjU5NTU5MDAuLmI0OTg4Y2M3NGI1Mzc2
MjY5ZTc1NTIzMDAzMTY2MzJmMDk4NWRjODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudE9yZGVyZWRNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRP
cmRlcmVkTWFwLmgKQEAgLTYwLDggKzYwLDggQEAgcHVibGljOgogICAgIEVsZW1lbnQqIGdldEVs
ZW1lbnRCeUlkKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmLCBjb25zdCBUcmVlU2NvcGUmKSBjb25z
dDsKICAgICBFbGVtZW50KiBnZXRFbGVtZW50QnlOYW1lKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwm
LCBjb25zdCBUcmVlU2NvcGUmKSBjb25zdDsKICAgICBIVE1MTWFwRWxlbWVudCogZ2V0RWxlbWVu
dEJ5TWFwTmFtZShjb25zdCBBdG9taWNTdHJpbmdJbXBsJiwgY29uc3QgVHJlZVNjb3BlJikgY29u
c3Q7Ci0gICAgSFRNTE1hcEVsZW1lbnQqIGdldEVsZW1lbnRCeUxvd2VyY2FzZWRNYXBOYW1lKGNv
bnN0IEF0b21pY1N0cmluZ0ltcGwmLCBjb25zdCBUcmVlU2NvcGUmKSBjb25zdDsKLSAgICBIVE1M
SW1hZ2VFbGVtZW50KiBnZXRFbGVtZW50QnlMb3dlcmNhc2VkVXNlbWFwKGNvbnN0IEF0b21pY1N0
cmluZ0ltcGwmLCBjb25zdCBUcmVlU2NvcGUmKSBjb25zdDsKKyAgICBIVE1MTWFwRWxlbWVudCog
Z2V0RWxlbWVudEJ5Q2FzZUZvbGRlZE1hcE5hbWUoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYsIGNv
bnN0IFRyZWVTY29wZSYpIGNvbnN0OworICAgIEhUTUxJbWFnZUVsZW1lbnQqIGdldEVsZW1lbnRC
eUNhc2VGb2xkZWRVc2VtYXAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYsIGNvbnN0IFRyZWVTY29w
ZSYpIGNvbnN0OwogICAgIEhUTUxMYWJlbEVsZW1lbnQqIGdldEVsZW1lbnRCeUxhYmVsRm9yQXR0
cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmLCBjb25zdCBUcmVlU2NvcGUmKSBjb25zdDsK
ICAgICBFbGVtZW50KiBnZXRFbGVtZW50QnlXaW5kb3dOYW1lZEl0ZW0oY29uc3QgQXRvbWljU3Ry
aW5nSW1wbCYsIGNvbnN0IFRyZWVTY29wZSYpIGNvbnN0OwogICAgIEVsZW1lbnQqIGdldEVsZW1l
bnRCeURvY3VtZW50TmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmLCBjb25zdCBUcmVl
U2NvcGUmKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAKaW5kZXggZDQ2YTNhNmQ4ZDAw
YjZjODFlZTg3NmUxYjI5NjFlODgxZjFlNjFjYy4uYWZmNjg3N2E0ZGIxMGNkNWQ1MmM0NTg4NjQx
NTVkMzkyZDgzYjU5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAKQEAgLTIwMSwxOCArMjAx
LDE2IEBAIHZvaWQgVHJlZVNjb3BlOjpyZW1vdmVJbWFnZU1hcChIVE1MTWFwRWxlbWVudCYgaW1h
Z2VNYXApCiAKIEhUTUxNYXBFbGVtZW50KiBUcmVlU2NvcGU6OmdldEltYWdlTWFwKGNvbnN0IFN0
cmluZyYgdXJsKSBjb25zdAogewotICAgIGlmICh1cmwuaXNOdWxsKCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIGlmICghbV9pbWFnZU1hcHNCeU5hbWUpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIHNpemVfdCBoYXNoUG9zID0gdXJsLmZpbmQoJyMnKTsKLSAgICBTdHJpbmcg
bmFtZSA9IChoYXNoUG9zID09IG5vdEZvdW5kID8gU3RyaW5nKCkgOiB1cmwuc3Vic3RyaW5nKGhh
c2hQb3MgKyAxKSkuaW1wbCgpOworICAgIGF1dG8gaGFzaFBvc2l0aW9uID0gdXJsLmZpbmQoJyMn
KTsKKyAgICBpZiAoaGFzaFBvc2l0aW9uID09IG5vdEZvdW5kKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICBTdHJpbmcgbmFtZSA9IHVybC5zdWJzdHJpbmcoaGFzaFBvc2l0aW9uICsgMSk7
CiAgICAgaWYgKG5hbWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBp
ZiAobV9yb290Tm9kZS5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkpIHsKLSAgICAgICAgQXRv
bWljU3RyaW5nIGxvd2VyY2FzZWROYW1lID0gbmFtZS5sb3dlcigpOwotICAgICAgICByZXR1cm4g
bV9pbWFnZU1hcHNCeU5hbWUtPmdldEVsZW1lbnRCeUxvd2VyY2FzZWRNYXBOYW1lKCpsb3dlcmNh
c2VkTmFtZS5pbXBsKCksICp0aGlzKTsKLSAgICB9CisgICAgaWYgKG1fcm9vdE5vZGUuZG9jdW1l
bnQoKS5pc0hUTUxEb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gbV9pbWFnZU1hcHNCeU5hbWUt
PmdldEVsZW1lbnRCeUNhc2VGb2xkZWRNYXBOYW1lKCpBdG9taWNTdHJpbmcobmFtZS5mb2xkQ2Fz
ZSgpKS5pbXBsKCksICp0aGlzKTsKICAgICByZXR1cm4gbV9pbWFnZU1hcHNCeU5hbWUtPmdldEVs
ZW1lbnRCeU1hcE5hbWUoKkF0b21pY1N0cmluZyhuYW1lKS5pbXBsKCksICp0aGlzKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1t
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCmluZGV4IDVm
NDVlNjNjYzkzYTQzODg4NmY1MzgwYTMxNjY3YmJhNDMwN2Y1OTUuLmJjNThkOTA3ZWI2YzY0MWQ1
MzNjODcwMWRkMDVmNDRmMzBkNDViMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0hUTUxDb252ZXJ0ZXIubW0KQEAgLTU2LDYgKzU2LDcgQEAKICNpbXBvcnQgIk5TQXR0cmli
dXRlZFN0cmluZ1NQSS5oIgogI2ltcG9ydCAiUkdCQ29sb3IuaCIKICNpbXBvcnQgIlJlbmRlcklt
YWdlLmgiCisjaW1wb3J0ICJSZW5kZXJUZXh0LmgiCiAjaW1wb3J0ICJTb2Z0TGlua2luZy5oIgog
I2ltcG9ydCAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAjaW1wb3J0ICJTdHlsZWRFbGVtZW50LmgiCkBA
IC0yMjc4LDE1ICsyMjc5LDEyIEBAIHZvaWQgSFRNTENvbnZlcnRlcjo6X3Byb2Nlc3NUZXh0KENo
YXJhY3RlckRhdGEmIGNoYXJhY3RlckRhdGEpCiAKICAgICBpZiAob3V0cHV0U3RyaW5nLmxlbmd0
aCgpKSB7CiAgICAgICAgIFN0cmluZyB0ZXh0VHJhbnNmb3JtID0gX2NhY2hlcy0+cHJvcGVydHlW
YWx1ZUZvck5vZGUoY2hhcmFjdGVyRGF0YSwgQ1NTUHJvcGVydHlUZXh0VHJhbnNmb3JtKTsKLSAg
ICAgICAgaWYgKHRleHRUcmFuc2Zvcm0ubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIGlmICh0ZXh0
VHJhbnNmb3JtID09ICJjYXBpdGFsaXplIikgey8vIEZJWE1FOiBUaGlzIGlzIGV4dHJlbWVseSBp
bmVmZmljaWVudC4KLSAgICAgICAgICAgICAgICBOU1N0cmluZyAqdGVtcG9yYXJ5U3RyaW5nID0g
b3V0cHV0U3RyaW5nOwotICAgICAgICAgICAgICAgIG91dHB1dFN0cmluZyA9IFt0ZW1wb3JhcnlT
dHJpbmcgY2FwaXRhbGl6ZWRTdHJpbmddOwotICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXh0VHJh
bnNmb3JtID09ICJ1cHBlcmNhc2UiKQotICAgICAgICAgICAgICAgIG91dHB1dFN0cmluZyA9IG91
dHB1dFN0cmluZy51cHBlcigpOwotICAgICAgICAgICAgZWxzZSBpZiAodGV4dFRyYW5zZm9ybSA9
PSAibG93ZXJjYXNlIikKLSAgICAgICAgICAgICAgICBvdXRwdXRTdHJpbmcgPSBvdXRwdXRTdHJp
bmcubG93ZXIoKTsKLSAgICAgICAgfQorICAgICAgICBpZiAodGV4dFRyYW5zZm9ybSA9PSAiY2Fw
aXRhbGl6ZSIpCisgICAgICAgICAgICBtYWtlQ2FwaXRhbGl6ZWQoJm91dHB1dFN0cmluZywgMCk7
IC8vIEZJWE1FOiBOZWVkcyB0byB0YWtlIGxvY2FsZSBpbnRvIGFjY291bnQgdG8gd29yayBjb3Jy
ZWN0bHkuCisgICAgICAgIGVsc2UgaWYgKHRleHRUcmFuc2Zvcm0gPT0gInVwcGVyY2FzZSIpCisg
ICAgICAgICAgICBvdXRwdXRTdHJpbmcgPSBvdXRwdXRTdHJpbmcuY29udmVydFRvVXBwZXJjYXNl
V2l0aG91dExvY2FsZSgpOyAvLyBGSVhNRTogTmVlZHMgbG9jYWxlIHRvIHdvcmsgY29ycmVjdGx5
LgorICAgICAgICBlbHNlIGlmICh0ZXh0VHJhbnNmb3JtID09ICJsb3dlcmNhc2UiKQorICAgICAg
ICAgICAgb3V0cHV0U3RyaW5nID0gb3V0cHV0U3RyaW5nLmNvbnZlcnRUb0xvd2VyY2FzZVdpdGhv
dXRMb2NhbGUoKTsgLy8gRklYTUU6IE5lZWRzIGxvY2FsZSB0byB3b3JrIGNvcnJlY3RseS4KIAog
ICAgICAgICBbX2F0dHJTdHIgcmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlOnJhbmdlVG9SZXBsYWNl
IHdpdGhTdHJpbmc6b3V0cHV0U3RyaW5nXTsKICAgICAgICAgcmFuZ2VUb1JlcGxhY2UubGVuZ3Ro
ID0gb3V0cHV0U3RyaW5nLmxlbmd0aCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MSW1hZ2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxl
bWVudC5jcHAKaW5kZXggOGRlOTU2MzBmYmJkMGVlNGVjMTRlNDlkMGE2NmYzY2NiZjA3NzBkMi4u
NDg4YzRlNmFmOGU4NTE4ZTAxM2FlMTY3MmE3YzE0ZGNjNmM0OWU3ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCkBAIC0yMDEsMjAgKzIwMSwyMCBAQCB2b2lkIEhU
TUxJbWFnZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUs
IGNvbnN0IEF0b21pY1N0cgogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBzcmNBdHRyIHx8IG5hbWUg
PT0gc3Jjc2V0QXR0ciB8fCBuYW1lID09IHNpemVzQXR0cikKICAgICAgICAgc2VsZWN0SW1hZ2VT
b3VyY2UoKTsKICAgICBlbHNlIGlmIChuYW1lID09IHVzZW1hcEF0dHIpIHsKLSAgICAgICAgaWYg
KGluRG9jdW1lbnQoKSAmJiAhbV9sb3dlcmNhc2VkVXNlbWFwLmlzTnVsbCgpKQotICAgICAgICAg
ICAgZG9jdW1lbnQoKS5yZW1vdmVJbWFnZUVsZW1lbnRCeUxvd2VyY2FzZWRVc2VtYXAoKm1fbG93
ZXJjYXNlZFVzZW1hcC5pbXBsKCksICp0aGlzKTsKKyAgICAgICAgaWYgKGluRG9jdW1lbnQoKSAm
JiAhbV9jYXNlRm9sZGVkVXNlbWFwLmlzTnVsbCgpKQorICAgICAgICAgICAgZG9jdW1lbnQoKS5y
ZW1vdmVJbWFnZUVsZW1lbnRCeUNhc2VGb2xkZWRVc2VtYXAoKm1fY2FzZUZvbGRlZFVzZW1hcC5p
bXBsKCksICp0aGlzKTsKIAogICAgICAgICAvLyBUaGUgSFRNTEltYWdlRWxlbWVudCdzIHVzZU1h
cCgpIHZhbHVlIGluY2x1ZGVzIHRoZSAnIycgc3ltYm9sIGF0IHRoZSBiZWdpbm5pbmcsIHdoaWNo
IGhhcyB0byBiZSBzdHJpcHBlZCBvZmYuCiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY2hl
Y2sgdGhhdCB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzICcjJy4KLSAgICAgICAgLy8gRklYTUU6IEhU
TUw1IHNwZWNpZmljYXRpb24gc2F5cyB3ZSBzaG91bGQgc3RyaXAgYW55IGxlYWRpbmcgc3RyaW5n
IGJlZm9yZSAnIycuCi0gICAgICAgIC8vIEZJWE1FOiBIVE1MNSBzcGVjaWZpY2F0aW9uIHNheXMg
d2Ugc2hvdWxkIGlnbm9yZSB1c2VtYXAgYXR0cmlidXRlcyB3aXRob3V0ICMuCisgICAgICAgIC8v
IEZJWE1FOiBIVE1MIHNwZWNpZmljYXRpb24gc2F5cyB3ZSBzaG91bGQgc3RyaXAgYW55IGxlYWRp
bmcgc3RyaW5nIGJlZm9yZSAnIycuCisgICAgICAgIC8vIEZJWE1FOiBIVE1MIHNwZWNpZmljYXRp
b24gc2F5cyB3ZSBzaG91bGQgaWdub3JlIHVzZW1hcCBhdHRyaWJ1dGVzIHdpdGhvdXQgJyMnLgog
ICAgICAgICBpZiAodmFsdWUubGVuZ3RoKCkgPiAxKQotICAgICAgICAgICAgbV9sb3dlcmNhc2Vk
VXNlbWFwID0gdmFsdWUuc3RyaW5nKCkuc3Vic3RyaW5nKDEpLmxvd2VyKCk7CisgICAgICAgICAg
ICBtX2Nhc2VGb2xkZWRVc2VtYXAgPSB2YWx1ZS5zdHJpbmcoKS5zdWJzdHJpbmcoMSkuZm9sZENh
c2UoKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9sb3dlcmNhc2VkVXNlbWFwID0gbnVs
bEF0b207CisgICAgICAgICAgICBtX2Nhc2VGb2xkZWRVc2VtYXAgPSBudWxsQXRvbTsKIAotICAg
ICAgICBpZiAoaW5Eb2N1bWVudCgpICYmICFtX2xvd2VyY2FzZWRVc2VtYXAuaXNOdWxsKCkpCi0g
ICAgICAgICAgICBkb2N1bWVudCgpLmFkZEltYWdlRWxlbWVudEJ5TG93ZXJjYXNlZFVzZW1hcCgq
bV9sb3dlcmNhc2VkVXNlbWFwLmltcGwoKSwgKnRoaXMpOworICAgICAgICBpZiAoaW5Eb2N1bWVu
dCgpICYmICFtX2Nhc2VGb2xkZWRVc2VtYXAuaXNOdWxsKCkpCisgICAgICAgICAgICBkb2N1bWVu
dCgpLmFkZEltYWdlRWxlbWVudEJ5Q2FzZUZvbGRlZFVzZW1hcCgqbV9jYXNlRm9sZGVkVXNlbWFw
LmltcGwoKSwgKnRoaXMpOwogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBjb21wb3NpdGVBdHRyKSB7
CiAgICAgICAgIC8vIEZJWE1FOiBpbWFnZXMgZG9uJ3Qgc3VwcG9ydCBibGVuZCBtb2RlcyBpbiB0
aGVpciBjb21wb3NpdGluZyBhdHRyaWJ1dGUuCiAgICAgICAgIEJsZW5kTW9kZSBibGVuZE9wID0g
QmxlbmRNb2RlTm9ybWFsOwpAQCAtMzEyLDggKzMxMiw4IEBAIE5vZGU6Okluc2VydGlvbk5vdGlm
aWNhdGlvblJlcXVlc3QgSFRNTEltYWdlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5v
ZGUmCiAgICAgLy8gaW4gY2FsbGJhY2tzIGJhY2sgdG8gdGhpcyBub2RlLgogICAgIE5vZGU6Oklu
c2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgaW5zZXJ0Tm90aWZpY2F0aW9uUmVxdWVzdCA9IEhU
TUxFbGVtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uUG9pbnQpOwogCi0gICAgaWYgKGluc2Vy
dGlvblBvaW50LmluRG9jdW1lbnQoKSAmJiAhbV9sb3dlcmNhc2VkVXNlbWFwLmlzTnVsbCgpKQot
ICAgICAgICBkb2N1bWVudCgpLmFkZEltYWdlRWxlbWVudEJ5TG93ZXJjYXNlZFVzZW1hcCgqbV9s
b3dlcmNhc2VkVXNlbWFwLmltcGwoKSwgKnRoaXMpOworICAgIGlmIChpbnNlcnRpb25Qb2ludC5p
bkRvY3VtZW50KCkgJiYgIW1fY2FzZUZvbGRlZFVzZW1hcC5pc051bGwoKSkKKyAgICAgICAgZG9j
dW1lbnQoKS5hZGRJbWFnZUVsZW1lbnRCeUNhc2VGb2xkZWRVc2VtYXAoKm1fY2FzZUZvbGRlZFVz
ZW1hcC5pbXBsKCksICp0aGlzKTsKIAogICAgIGlmIChpczxIVE1MUGljdHVyZUVsZW1lbnQ+KHBh
cmVudE5vZGUoKSkpIHsKICAgICAgICAgc2V0UGljdHVyZUVsZW1lbnQoJmRvd25jYXN0PEhUTUxQ
aWN0dXJlRWxlbWVudD4oKnBhcmVudE5vZGUoKSkpOwpAQCAtMzMzLDggKzMzMyw4IEBAIHZvaWQg
SFRNTEltYWdlRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9p
bnQpCiAgICAgaWYgKG1fZm9ybSkKICAgICAgICAgbV9mb3JtLT5yZW1vdmVJbWdFbGVtZW50KHRo
aXMpOwogCi0gICAgaWYgKGluc2VydGlvblBvaW50LmluRG9jdW1lbnQoKSAmJiAhbV9sb3dlcmNh
c2VkVXNlbWFwLmlzTnVsbCgpKQotICAgICAgICBkb2N1bWVudCgpLnJlbW92ZUltYWdlRWxlbWVu
dEJ5TG93ZXJjYXNlZFVzZW1hcCgqbV9sb3dlcmNhc2VkVXNlbWFwLmltcGwoKSwgKnRoaXMpOwor
ICAgIGlmIChpbnNlcnRpb25Qb2ludC5pbkRvY3VtZW50KCkgJiYgIW1fY2FzZUZvbGRlZFVzZW1h
cC5pc051bGwoKSkKKyAgICAgICAgZG9jdW1lbnQoKS5yZW1vdmVJbWFnZUVsZW1lbnRCeUNhc2VG
b2xkZWRVc2VtYXAoKm1fY2FzZUZvbGRlZFVzZW1hcC5pbXBsKCksICp0aGlzKTsKICAgICAKICAg
ICBpZiAoaXM8SFRNTFBpY3R1cmVFbGVtZW50PihwYXJlbnROb2RlKCkpKQogICAgICAgICBzZXRQ
aWN0dXJlRWxlbWVudChudWxscHRyKTsKQEAgLTQ3NCwxMCArNDc0LDEwIEBAIFN0cmluZyBIVE1M
SW1hZ2VFbGVtZW50Ojpjb21wbGV0ZVVSTHNJbkF0dHJpYnV0ZVZhbHVlKGNvbnN0IFVSTCYgYmFz
ZSwgY29uc3QgQXR0CiAgICAgcmV0dXJuIEhUTUxFbGVtZW50Ojpjb21wbGV0ZVVSTHNJbkF0dHJp
YnV0ZVZhbHVlKGJhc2UsIGF0dHJpYnV0ZSk7CiB9CiAKLWJvb2wgSFRNTEltYWdlRWxlbWVudDo6
bWF0Y2hlc0xvd2VyY2FzZWRVc2VtYXAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYgbmFtZSkgY29u
c3QKK2Jvb2wgSFRNTEltYWdlRWxlbWVudDo6bWF0Y2hlc0Nhc2VGb2xkZWRVc2VtYXAoY29uc3Qg
QXRvbWljU3RyaW5nSW1wbCYgbmFtZSkgY29uc3QKIHsKLSAgICBBU1NFUlQoU3RyaW5nKCZjb25z
dF9jYXN0PEF0b21pY1N0cmluZ0ltcGwmPihuYW1lKSkubG93ZXIoKS5pbXBsKCkgPT0gJm5hbWUp
OwotICAgIHJldHVybiBtX2xvd2VyY2FzZWRVc2VtYXAuaW1wbCgpID09ICZuYW1lOworICAgIEFT
U0VSVChTdHJpbmcoJmNvbnN0X2Nhc3Q8QXRvbWljU3RyaW5nSW1wbCY+KG5hbWUpKS5mb2xkQ2Fz
ZSgpLmltcGwoKSA9PSAmbmFtZSk7CisgICAgcmV0dXJuIG1fY2FzZUZvbGRlZFVzZW1hcC5pbXBs
KCkgPT0gJm5hbWU7CiB9CiAKIGNvbnN0IEF0b21pY1N0cmluZyYgSFRNTEltYWdlRWxlbWVudDo6
YWx0KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxl
bWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgKaW5kZXggNDQ3
YjYyNDNhZDY1NzU4NzMxNTU0N2EwZDkwNDM3ODU4NmIzYWM3NC4uNjc5MzFiNWQ2MGI1Zjc4MDEz
NWY1ZTg4YmVmNzUwYjJhMzkxMzY3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MSW1hZ2VFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVt
ZW50LmgKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRMb2FkTWFudWFs
bHkoYm9vbCBsb2FkTWFudWFsbHkpIHsgbV9pbWFnZUxvYWRlci5zZXRMb2FkTWFudWFsbHkobG9h
ZE1hbnVhbGx5KTsgfQogCi0gICAgYm9vbCBtYXRjaGVzTG93ZXJjYXNlZFVzZW1hcChjb25zdCBB
dG9taWNTdHJpbmdJbXBsJikgY29uc3Q7CisgICAgYm9vbCBtYXRjaGVzQ2FzZUZvbGRlZFVzZW1h
cChjb25zdCBBdG9taWNTdHJpbmdJbXBsJikgY29uc3Q7CiAKICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGFsdCgpIGNvbnN0OwogCkBAIC0xMzQsNyArMTM0LDcgQEAgcHJpdmF0ZToKICAgICBDb21w
b3NpdGVPcGVyYXRvciBtX2NvbXBvc2l0ZU9wZXJhdG9yOwogICAgIEF0b21pY1N0cmluZyBtX2Jl
c3RGaXRJbWFnZVVSTDsKICAgICBBdG9taWNTdHJpbmcgbV9jdXJyZW50U3JjOwotICAgIEF0b21p
Y1N0cmluZyBtX2xvd2VyY2FzZWRVc2VtYXA7CisgICAgQXRvbWljU3RyaW5nIG1fY2FzZUZvbGRl
ZFVzZW1hcDsKICAgICBmbG9hdCBtX2ltYWdlRGV2aWNlUGl4ZWxSYXRpbzsKICAgICBib29sIG1f
ZXhwZXJpbWVudGFsSW1hZ2VNZW51RW5hYmxlZDsKICAgICBib29sIG1faGFkTmFtZUJlZm9yZUF0
dHJpYnV0ZUNoYW5nZWQgeyBmYWxzZSB9OyAvLyBGSVhNRTogV2Ugb25seSBuZWVkIHRoaXMgYmVj
YXVzZSBwYXJzZUF0dHJpYnV0ZSgpIGNhbid0IHNlZSB0aGUgb2xkIHZhbHVlLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcAppbmRleCAzZWU2MWJhYTAwMWUyMzRhNGIzM2Y3ZDE1
OGJjNjg2OTkyYzQ2Y2Y4Li5lY2M4NzUyOTZiNTNlMzBlMDI5MTRhYjVhZGE5NWRjM2RhNDI1Njk4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcApAQCAtNzgsMTAgKzc4LDgg
QEAgYm9vbCBIVE1MTWFwRWxlbWVudDo6bWFwTW91c2VFdmVudChMYXlvdXRQb2ludCBsb2NhdGlv
biwgY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSwKIEhUTUxJbWFnZUVsZW1lbnQqIEhUTUxNYXBFbGVt
ZW50OjppbWFnZUVsZW1lbnQoKQogewogICAgIGlmIChtX25hbWUuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICBBdG9taWNTdHJpbmcgbG93ZXJjYXNlZE5hbWUgPSBtX25hbWUubG93
ZXIoKTsKLSAgICBBU1NFUlQobG93ZXJjYXNlZE5hbWUuaW1wbCgpKTsKLSAgICByZXR1cm4gZG9j
dW1lbnQoKS5pbWFnZUVsZW1lbnRCeUxvd2VyY2FzZWRVc2VtYXAoKmxvd2VyY2FzZWROYW1lLmlt
cGwoKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBkb2N1bWVudCgpLmlt
YWdlRWxlbWVudEJ5Q2FzZUZvbGRlZFVzZW1hcCgqQXRvbWljU3RyaW5nKG1fbmFtZS5zdHJpbmco
KS5mb2xkQ2FzZSgpKS5pbXBsKCkpOwogfQogCiB2b2lkIEhUTUxNYXBFbGVtZW50OjpwYXJzZUF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZh
bHVlKQpAQCAtMTAxLDcgKzk5LDcgQEAgdm9pZCBIVE1MTWFwRWxlbWVudDo6cGFyc2VBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW4KICAgICAgICAg
U3RyaW5nIG1hcE5hbWUgPSB2YWx1ZTsKICAgICAgICAgaWYgKG1hcE5hbWVbMF0gPT0gJyMnKQog
ICAgICAgICAgICAgbWFwTmFtZSA9IG1hcE5hbWUuc3Vic3RyaW5nKDEpOwotICAgICAgICBtX25h
bWUgPSBkb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkgPyBtYXBOYW1lLmxvd2VyKCkgOiBtYXBO
YW1lOworICAgICAgICBtX25hbWUgPSBkb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkgPyBtYXBO
YW1lLmZvbGRDYXNlKCkgOiBtYXBOYW1lOwogICAgICAgICBpZiAoaW5Eb2N1bWVudCgpKQogICAg
ICAgICAgICAgdHJlZVNjb3BlKCkuYWRkSW1hZ2VNYXAoKnRoaXMpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MYW5ndWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9MYW5ndWFnZS5jcHAKaW5kZXggNjU1NzhkMGVjZGU2NGUyZmYwNTc1ZTgyYzQ4ZTQ1NTEy
NmE4MzljZC4uYThhZThlM2M4MDMyZmM0ZDRjZDk1MThjYmJhNWNjMjlmNjZmOTdkMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGFuZ3VhZ2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0xhbmd1YWdlLmNwcApAQCAtOTksNyArOTksNyBAQCBWZWN0b3I8U3Ry
aW5nPiB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkKIAogc3RhdGljIFN0cmluZyBjYW5vbmljYWxM
YW5ndWFnZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBsYW5ndWFnZUNvZGUpCiB7Ci0gICAgU3Ry
aW5nIGxvd2VyY2FzZUxhbmd1YWdlQ29kZSA9IGxhbmd1YWdlQ29kZS5sb3dlcigpOworICAgIFN0
cmluZyBsb3dlcmNhc2VMYW5ndWFnZUNvZGUgPSBsYW5ndWFnZUNvZGUuY29udmVydFRvQVNDSUlM
b3dlcmNhc2UoKTsKICAgICAKICAgICBpZiAobG93ZXJjYXNlTGFuZ3VhZ2VDb2RlLmxlbmd0aCgp
ID49IDMgJiYgbG93ZXJjYXNlTGFuZ3VhZ2VDb2RlWzJdID09ICdfJykKICAgICAgICAgbG93ZXJj
YXNlTGFuZ3VhZ2VDb2RlLnJlcGxhY2UoMiwgMSwgIi0iKTsKQEAgLTEwOSw3ICsxMDksNyBAQCBz
dGF0aWMgU3RyaW5nIGNhbm9uaWNhbExhbmd1YWdlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGxh
bmd1YWdlQ29kZSkKIAogc2l6ZV90IGluZGV4T2ZCZXN0TWF0Y2hpbmdMYW5ndWFnZUluTGlzdChj
b25zdCBTdHJpbmcmIGxhbmd1YWdlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZ2VMaXN0
LCBib29sJiBleGFjdE1hdGNoKQogewotICAgIFN0cmluZyBsb3dlcmNhc2VMYW5ndWFnZSA9IGxh
bmd1YWdlLmxvd2VyKCk7CisgICAgU3RyaW5nIGxvd2VyY2FzZUxhbmd1YWdlID0gbGFuZ3VhZ2Uu
Y29udmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKICAgICBTdHJpbmcgbGFuZ3VhZ2VXaXRob3V0TG9j
YWxlTWF0Y2g7CiAgICAgU3RyaW5nIGxhbmd1YWdlTWF0Y2hCdXROb3RMb2NhbGU7CiAgICAgc2l6
ZV90IGxhbmd1YWdlV2l0aG91dExvY2FsZU1hdGNoSW5kZXggPSAwOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNwcAppbmRleCAxZDBlOWQwNjQzNzg2
NGEyNDYyMTdiNGVmMjAwMzJkZmYyY2NkMjhmLi5iMjBjZmMzZDIyNzc3ZjY3NjZkNGNjM2YxNTgw
YWVkN2Q0YWRlMWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0hUVFBQYXJzZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hU
VFBQYXJzZXJzLmNwcApAQCAtNDU2LDcgKzQ1Niw3IEBAIENvbnRlbnRTZWN1cml0eVBvbGljeTo6
UmVmbGVjdGVkWFNTRGlzcG9zaXRpb24gcGFyc2VYU1NQcm90ZWN0aW9uSGVhZGVyKGNvbnN0IFN0
CiAjaWYgRU5BQkxFKE5PU05JRkYpCiBDb250ZW50VHlwZU9wdGlvbnNEaXNwb3NpdGlvbiBwYXJz
ZUNvbnRlbnRUeXBlT3B0aW9uc0hlYWRlcihjb25zdCBTdHJpbmcmIGhlYWRlcikKIHsKLSAgICBp
ZiAoaGVhZGVyLnN0cmlwV2hpdGVTcGFjZSgpLmxvd2VyKCkgPT0gIm5vc25pZmYiKQorICAgIGlm
IChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShoZWFkZXIuc3RyaXBXaGl0ZVNwYWNlKCks
ICJub3NuaWZmIikpCiAgICAgICAgIHJldHVybiBDb250ZW50VHlwZU9wdGlvbnNOb3NuaWZmOwog
ICAgIHJldHVybiBDb250ZW50VHlwZU9wdGlvbnNOb25lOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvTUlNRUhlYWRlci5jcHAKaW5kZXggNTBlZWZiZDlhMTQyM2UyNjEy
Zjg1MGFiMDM1MDkwNTE4MGYyODI2MS4uM2E1OThjYzU4YmI2OTBjMGM2MzAxOWJjN2M4ZjlhODhm
YjhjYTY4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9NSU1F
SGVhZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL01JTUVIZWFk
ZXIuY3BwCkBAIC03MCw3ICs3MCw3IEBAIHN0YXRpYyBLZXlWYWx1ZU1hcCByZXRyaWV2ZUtleVZh
bHVlUGFpcnMoV2ViQ29yZTo6U2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIqIGJ1ZmZlCiAgICAgICAg
ICAgICAvLyBUaGlzIGlzIG5vdCBhIGtleSB2YWx1ZSBwYWlyLCBpZ25vcmUuCiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBrZXkgPSBsaW5lLnN1YnN0cmluZygwLCBz
ZW1pQ29sb25JbmRleCkubG93ZXIoKS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICAgICAga2V5ID0g
bGluZS5zdWJzdHJpbmcoMCwgc2VtaUNvbG9uSW5kZXgpLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNl
KCkuc3RyaXBXaGl0ZVNwYWNlKCk7CiAgICAgICAgIHZhbHVlLmFwcGVuZChsaW5lLnN1YnN0cmlu
ZyhzZW1pQ29sb25JbmRleCArIDEpKTsKICAgICB9CiAgICAgLy8gU3RvcmUgdGhlIGxhc3QgcHJv
cGVydHkgaWYgdGhlcmUgaXMgb25lLgpAQCAtMTE0LDE0ICsxMTQsMTQgQEAgUGFzc1JlZlB0cjxN
SU1FSGVhZGVyPiBNSU1FSGVhZGVyOjpwYXJzZUhlYWRlcihTaGFyZWRCdWZmZXJDaHVua1JlYWRl
ciogYnVmZmVyKQogCiBNSU1FSGVhZGVyOjpFbmNvZGluZyBNSU1FSGVhZGVyOjpwYXJzZUNvbnRl
bnRUcmFuc2ZlckVuY29kaW5nKGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKLSAgICBTdHJpbmcgZW5j
b2RpbmcgPSB0ZXh0LnN0cmlwV2hpdGVTcGFjZSgpLmxvd2VyKCk7Ci0gICAgaWYgKGVuY29kaW5n
ID09ICJiYXNlNjQiKQorICAgIFN0cmluZyBlbmNvZGluZyA9IHRleHQuc3RyaXBXaGl0ZVNwYWNl
KCk7CisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGVuY29kaW5nLCAiYmFz
ZTY0IikpCiAgICAgICAgIHJldHVybiBCYXNlNjQ7Ci0gICAgaWYgKGVuY29kaW5nID09ICJxdW90
ZWQtcHJpbnRhYmxlIikKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZW5j
b2RpbmcsICJxdW90ZWQtcHJpbnRhYmxlIikpCiAgICAgICAgIHJldHVybiBRdW90ZWRQcmludGFi
bGU7Ci0gICAgaWYgKGVuY29kaW5nID09ICI3Yml0IikKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2UoZW5jb2RpbmcsICI3Yml0IikpCiAgICAgICAgIHJldHVybiBTZXZlbkJp
dDsKLSAgICBpZiAoZW5jb2RpbmcgPT0gImJpbmFyeSIpCisgICAgaWYgKGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKGVuY29kaW5nLCAiYmluYXJ5IikpCiAgICAgICAgIHJldHVybiBCaW5h
cnk7CiAgICAgTE9HX0VSUk9SKCJVbmtub3duIGVuY29kaW5nICclcycgZm91bmQgaW4gTUlNRSBo
ZWFkZXIuIiwgdGV4dC5hc2NpaSgpLmRhdGEoKSk7CiAgICAgcmV0dXJuIFVua25vd247CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxl
Q0ZOZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhh
bmRsZUNGTmV0LmNwcAppbmRleCA1MTM5MGY2ZWQ3MDhlODVlMzlkYzQ2NDU5NmYzZjZkOWVlZWI2
Y2QxLi42Zjc5NTdhY2E0YTE3OTdmNWQ5NWJjMDNlZTY4MjA2ZjljOTRmOWExIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5k
bGVDRk5ldC5jcHAKQEAgLTgyLDE2ICs4MiwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNp
ZiBVU0UoQ0ZORVRXT1JLKQogCi1zdGF0aWMgSGFzaFNldDxTdHJpbmc+JiBhbGxvd3NBbnlIVFRQ
U0NlcnRpZmljYXRlSG9zdHMoKQorc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNl
bnNpdGl2ZUhhc2g+JiBhbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlSG9zdHMoKQogewotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZz4+IGhvc3RzOworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPj4g
aG9zdHM7CiAgICAgcmV0dXJuIGhvc3RzOwogfQogCi1zdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFJl
dGFpblB0cjxDRkRhdGFSZWY+PiYgY2xpZW50Q2VydHMoKQorc3RhdGljIEhhc2hNYXA8U3RyaW5n
LCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiwgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgY2xpZW50
Q2VydGlmaWNhdGVzKCkKIHsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZXRhaW5QdHI8
Q0ZEYXRhUmVmPj4gQ2VydHNNYXA7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENlcnRzTWFw
PiBjZXJ0czsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxTdHJpbmcsIFJldGFp
blB0cjxDRkRhdGFSZWY+LCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+PiBjZXJ0czsKICAgICBy
ZXR1cm4gY2VydHM7CiB9CiAKQEAgLTE2OSw3ICsxNjgsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxl
OjpjcmVhdGVDRlVSTENvbm5lY3Rpb24oYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwg
Ym9vbAogI2lmIFBMQVRGT1JNKElPUykKICAgICBzc2xQcm9wcyA9IGFkb3B0Q0YoUmVzb3VyY2VI
YW5kbGU6OmNyZWF0ZVNTTFByb3BlcnRpZXNGcm9tTlNVUkxSZXF1ZXN0KGZpcnN0UmVxdWVzdCgp
KSk7CiAjZWxzZQotICAgIGlmIChhbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlSG9zdHMoKS5jb250
YWlucyhmaXJzdFJlcXVlc3QoKS51cmwoKS5ob3N0KCkubG93ZXIoKSkpIHsKKyAgICBpZiAoYWxs
b3dzQW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3RzKCkuY29udGFpbnMoZmlyc3RSZXF1ZXN0KCkudXJs
KCkuaG9zdCgpKSkgewogICAgICAgICBzc2xQcm9wcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3Jl
YXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlD
YWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CiAgICAgICAgIENG
RGljdGlvbmFyeUFkZFZhbHVlKHNzbFByb3BzLmdldCgpLCBrQ0ZTdHJlYW1TU0xBbGxvd3NBbnlS
b290LCBrQ0ZCb29sZWFuVHJ1ZSk7CiAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHNzbFBy
b3BzLmdldCgpLCBrQ0ZTdHJlYW1TU0xBbGxvd3NFeHBpcmVkUm9vdHMsIGtDRkJvb2xlYW5UcnVl
KTsKQEAgLTE3Nyw4ICsxNzYsOCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpjcmVhdGVDRlVSTENv
bm5lY3Rpb24oYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwgYm9vbAogICAgICAgICBD
RkRpY3Rpb25hcnlBZGRWYWx1ZShzc2xQcm9wcy5nZXQoKSwga0NGU3RyZWFtU1NMVmFsaWRhdGVz
Q2VydGlmaWNhdGVDaGFpbiwga0NGQm9vbGVhbkZhbHNlKTsKICAgICB9CiAKLSAgICBIYXNoTWFw
PFN0cmluZywgUmV0YWluUHRyPENGRGF0YVJlZj4+OjppdGVyYXRvciBjbGllbnRDZXJ0ID0gY2xp
ZW50Q2VydHMoKS5maW5kKGZpcnN0UmVxdWVzdCgpLnVybCgpLmhvc3QoKS5sb3dlcigpKTsKLSAg
ICBpZiAoY2xpZW50Q2VydCAhPSBjbGllbnRDZXJ0cygpLmVuZCgpKSB7CisgICAgSGFzaE1hcDxT
dHJpbmcsIFJldGFpblB0cjxDRkRhdGFSZWY+Pjo6aXRlcmF0b3IgY2xpZW50Q2VydCA9IGNsaWVu
dENlcnRpZmljYXRlcygpLmZpbmQoZmlyc3RSZXF1ZXN0KCkudXJsKCkuaG9zdCgpKTsKKyAgICBp
ZiAoY2xpZW50Q2VydCAhPSBjbGllbnRDZXJ0aWZpY2F0ZXMoKS5lbmQoKSkgewogICAgICAgICBp
ZiAoIXNzbFByb3BzKQogICAgICAgICAgICAgc3NsUHJvcHMgPSBhZG9wdENGKENGRGljdGlvbmFy
eUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5
S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwogI2lmIFBM
QVRGT1JNKFdJTikKQEAgLTYwMywxMiArNjAyLDEyIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnBs
YXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4
CiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldEhvc3RBbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRl
KGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKLSAgICBhbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlSG9z
dHMoKS5hZGQoaG9zdC5sb3dlcigpKTsKKyAgICBhbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlSG9z
dHMoKS5hZGQoaG9zdCk7CiB9CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldENsaWVudENlcnRp
ZmljYXRlKGNvbnN0IFN0cmluZyYgaG9zdCwgQ0ZEYXRhUmVmIGNlcnQpCit2b2lkIFJlc291cmNl
SGFuZGxlOjpzZXRDbGllbnRDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmIGhvc3QsIENGRGF0YVJl
ZiBjZXJ0aWZpY2F0ZSkKIHsKLSAgICBjbGllbnRDZXJ0cygpLnNldChob3N0Lmxvd2VyKCksIGNl
cnQpOworICAgIGNsaWVudENlcnRpZmljYXRlcygpLnNldChob3N0LCBjZXJ0aWZpY2F0ZSk7CiB9
CiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtU2V0RGVmZXJzTG9hZGluZyhib29sIGRl
ZmVycykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
b29raWVKYXJDdXJsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
b29raWVKYXJDdXJsLmNwcAppbmRleCBiOWQ2ZGQ0YmE3ODBlZTM1NzVlOTQ4MTkyZmQ5ODJiNDQ3
ZTVmMjk2Li5iMjc2Y2E3NWU0ZmE4MWJkOGYwY2I4ZWEzMzE5ZWNlYzRhMWM4ZGVhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1
cmwuY3BwCkBAIC0xOTUsMjAgKzE5NSwyMCBAQCBzdGF0aWMgU3RyaW5nIGdldE5ldHNjYXBlQ29v
a2llRm9ybWF0KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgICBp
ZiAoYXR0cmlidXRlLT5jb250YWlucygnPScpKSB7CiAgICAgICAgICAgICBWZWN0b3I8U3RyaW5n
PiBrZXlWYWx1ZVBhaXI7CiAgICAgICAgICAgICBhdHRyaWJ1dGUtPnNwbGl0KCc9JywgdHJ1ZSwg
a2V5VmFsdWVQYWlyKTsKLSAgICAgICAgICAgIFN0cmluZyBrZXkgPSBrZXlWYWx1ZVBhaXJbMF0u
c3RyaXBXaGl0ZVNwYWNlKCkubG93ZXIoKTsKKyAgICAgICAgICAgIFN0cmluZyBrZXkgPSBrZXlW
YWx1ZVBhaXJbMF0uc3RyaXBXaGl0ZVNwYWNlKCk7CiAgICAgICAgICAgICBTdHJpbmcgdmFsID0g
a2V5VmFsdWVQYWlyWzFdLnN0cmlwV2hpdGVTcGFjZSgpOwotICAgICAgICAgICAgaWYgKGtleSA9
PSAiZXhwaXJlcyIpIHsKKyAgICAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZShrZXksICJleHBpcmVzIikpIHsKICAgICAgICAgICAgICAgICBDU3RyaW5nIGRhdGVTdHIo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odmFsLmNoYXJhY3RlcnM4KCkpLCB2YWwubGVu
Z3RoKCkpOwogICAgICAgICAgICAgICAgIGV4cGlyZXMgPSBXVEY6OnBhcnNlRGF0ZUZyb21OdWxs
VGVybWluYXRlZENoYXJhY3RlcnMoZGF0ZVN0ci5kYXRhKCkpIC8gV1RGOjptc1BlclNlY29uZDsK
LSAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICJtYXgtYWdlIikKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoa2V5LCAibWF4LWFnZSIpKQog
ICAgICAgICAgICAgICAgIGV4cGlyZXMgPSB0aW1lKDApICsgdmFsLnRvSW50KCk7Ci0gICAgICAg
ICAgICBlbHNlIGlmIChrZXkgPT0gImRvbWFpbiIpIAorICAgICAgICAgICAgZWxzZSBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoa2V5LCAiZG9tYWluIikpCiAgICAgICAgICAgICAg
ICAgZG9tYWluID0gdmFsOwotICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJwYXRoIikgCisg
ICAgICAgICAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShrZXksICJw
YXRoIikpCiAgICAgICAgICAgICAgICAgcGF0aCA9IHZhbDsKICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIFN0cmluZyBrZXkgPSBhdHRyaWJ1dGUtPnN0cmlwV2hpdGVTcGFjZSgpLmxvd2Vy
KCk7Ci0gICAgICAgICAgICBpZiAoa2V5ID09ICJzZWN1cmUiKQorICAgICAgICAgICAgU3RyaW5n
IGtleSA9IGF0dHJpYnV0ZS0+c3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgICAgICAgICBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoa2V5LCAic2VjdXJlIikpCiAgICAgICAgICAgICAg
ICAgc2VjdXJlID0gIlRSVUUiOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL011bHRpcGFydEhhbmRsZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvTXVsdGlwYXJ0SGFuZGxlLmNwcAppbmRl
eCA4OTdmOTVjMTkwYTU0MTY1YmQ5NTQ3OWM0NTRlMzk0NmJlZWYwY2JhLi45MTExZmEwY2U0MzA4
OTdkMWExZDVmNzc3ZmUxNzRkYTNiZDUyODZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvTXVsdGlwYXJ0SGFuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvTXVsdGlwYXJ0SGFuZGxlLmNwcApAQCAtMzQ2LDcg
KzM0Niw3IEBAIHZvaWQgTXVsdGlwYXJ0SGFuZGxlOjpkaWRSZWNlaXZlUmVzcG9uc2UoKQogICAg
ICAgICBTdHJpbmcgY29udGVudFR5cGUgPSBtX2hlYWRlcnMuZ2V0KEhUVFBIZWFkZXJOYW1lOjpD
b250ZW50VHlwZSk7CiAgICAgICAgIFN0cmluZyBtaW1lVHlwZSA9IGV4dHJhY3RNSU1FVHlwZUZy
b21NZWRpYVR5cGUoY29udGVudFR5cGUpOwogCi0gICAgICAgIHJlc3BvbnNlLT5zZXRNaW1lVHlw
ZShtaW1lVHlwZS5sb3dlcigpKTsKKyAgICAgICAgcmVzcG9uc2UtPnNldE1pbWVUeXBlKG1pbWVU
eXBlLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkpOwogICAgICAgICByZXNwb25zZS0+c2V0VGV4
dEVuY29kaW5nTmFtZShleHRyYWN0Q2hhcnNldEZyb21NZWRpYVR5cGUoY29udGVudFR5cGUpKTsK
IAogICAgICAgICBkLT5jbGllbnQoKS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKG1fcmVzb3VyY2VIYW5k
bGUsICpyZXNwb25zZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCmluZGV4IDQ2NjcwMmFhMzE2NTVh
NmU4YmM4MzM3MTQ1MjJlYjJkYmU1MmRlM2YuLmY3YTA0ZTY4NWVhODkwNzhkYWExMzk3NWUzMjVl
YmY1Mzg5YTJiYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCkBAIC0xMjIsNyArMTIyLDcgQEAg
dm9pZCBSZXNvdXJjZUhhbmRsZTo6Y2FuY2VsKCkKIAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0
SG9zdEFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJiBob3N0KQogewotICAg
IGFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGVIb3N0cyhob3N0Lmxvd2VyKCkpOworICAgIGFsbG93
c0FueUhUVFBTQ2VydGlmaWNhdGVIb3N0cyhob3N0KTsKIH0KIAogdm9pZCBSZXNvdXJjZUhhbmRs
ZTo6c2V0Q2xpZW50Q2VydGlmaWNhdGVJbmZvKGNvbnN0IFN0cmluZyYgaG9zdCwgY29uc3QgU3Ry
aW5nJiBjZXJ0aWZpY2F0ZSwgY29uc3QgU3RyaW5nJiBrZXkpCkBAIC0xMzQsMTggKzEzNCwxMSBA
QCB2b2lkIFJlc291cmNlSGFuZGxlOjpzZXRDbGllbnRDZXJ0aWZpY2F0ZUluZm8oY29uc3QgU3Ry
aW5nJiBob3N0LCBjb25zdCBTdHJpbmcmCiB9CiAKICNpZiBQTEFURk9STShXSU4pICYmIFVTRShD
RikKLS8vIEZJWE1FOiAgVGhlIENGRGF0YVJlZiB3aWxsIG5lZWQgdG8gYmUgc29tZXRoaW5nIGVs
c2Ugd2hlbgotLy8gYnVpbGRpbmcgd2l0aG91dCAKLXN0YXRpYyBIYXNoTWFwPFN0cmluZywgUmV0
YWluUHRyPENGRGF0YVJlZj4gPiYgY2xpZW50Q2VydHMoKQotewotICAgIHN0YXRpYyBIYXNoTWFw
PFN0cmluZywgUmV0YWluUHRyPENGRGF0YVJlZj4gPiBjZXJ0czsKLSAgICByZXR1cm4gY2VydHM7
Ci19CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldENsaWVudENlcnRpZmljYXRlKGNvbnN0IFN0
cmluZyYgaG9zdCwgQ0ZEYXRhUmVmIGNlcnQpCit2b2lkIFJlc291cmNlSGFuZGxlOjpzZXRDbGll
bnRDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmLCBDRkRhdGFSZWYpCiB7Ci0gICAgY2xpZW50Q2Vy
dHMoKS5zZXQoaG9zdC5sb3dlcigpLCBjZXJ0KTsKIH0KKwogI2VuZGlmCiAKIHZvaWQgUmVzb3Vy
Y2VIYW5kbGU6OnBsYXRmb3JtU2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1h
bmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNl
SGFuZGxlTWFuYWdlci5jcHAKaW5kZXggNGRmMGVhNjk2ZWIyYzZlNTZiMjAyNjc2MjJjNjQ0ODZk
ODVmMzc5Ni4uYTYzYTU3MmY0Y2EzZjE1OWMzZDNmODc2MTJiNDgzNmNhMjhmYmFiOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxl
TWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jl
c291cmNlSGFuZGxlTWFuYWdlci5jcHAKQEAgLTQ5Nyw3ICs0OTcsNyBAQCBzdGF0aWMgc2l6ZV90
IGhlYWRlckNhbGxiYWNrKGNoYXIqIHB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9p
ZCogZGF0YSkKICAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRVUkwoVVJMKFBhcnNlZFVSTFN0cmlu
ZywgaGRyKSk7CiAKICAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29kZShodHRw
Q29kZSk7Ci0gICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0TWltZVR5cGUoZXh0cmFjdE1JTUVUeXBl
RnJvbU1lZGlhVHlwZShkLT5tX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFt
ZTo6Q29udGVudFR5cGUpKS5sb3dlcigpKTsKKyAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRNaW1l
VHlwZShleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKGQtPm1fcmVzcG9uc2UuaHR0cEhlYWRl
ckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50VHlwZSkpLmNvbnZlcnRUb0FTQ0lJTG93ZXJj
YXNlKCkpOwogICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldFRleHRFbmNvZGluZ05hbWUoZXh0cmFj
dENoYXJzZXRGcm9tTWVkaWFUeXBlKGQtPm1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKEhUVFBI
ZWFkZXJOYW1lOjpDb250ZW50VHlwZSkpKTsKIAogICAgICAgICBpZiAoZC0+bV9yZXNwb25zZS5p
c011bHRpcGFydCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvU1NMSGFuZGxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9TU0xIYW5kbGUuY3BwCmluZGV4IGI0NjJmODk3N2ZkMzc4ZjZiNTgyMWIzOTVhNzZmMDE0
OTA2ZGJjZjQuLmQ1YmQ0NWQ2N2YxOWRiY2FkMjU1YjlkMzRlYTg0ZmUwNDA0ZDQ2ZTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9TU0xIYW5kbGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9TU0xIYW5kbGUuY3Bw
CkBAIC0zOSw5ICszOSw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBzdGQ6
OnR1cGxlPFdURjo6U3RyaW5nLCBXVEY6OlN0cmluZz4gY2xpZW50Q2VydGlmaWNhdGU7Ci1zdGF0
aWMgSGFzaE1hcDxTdHJpbmcsIExpc3RIYXNoU2V0PFN0cmluZz4+IGFsbG93ZWRIb3N0czsKLXN0
YXRpYyBIYXNoTWFwPFN0cmluZywgY2xpZW50Q2VydGlmaWNhdGU+IGFsbG93ZWRDbGllbnRIb3N0
czsKK3R5cGVkZWYgc3RkOjp0dXBsZTxTdHJpbmcsIFN0cmluZz4gY2xpZW50Q2VydGlmaWNhdGU7
CitzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIExpc3RIYXNoU2V0PFN0cmluZz4sIEFTQ0lJQ2FzZUlu
c2Vuc2l0aXZlSGFzaD4gYWxsb3dlZEhvc3RzOworc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBjbGll
bnRDZXJ0aWZpY2F0ZSwgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBhbGxvd2VkQ2xpZW50SG9z
dHM7CiAKIHZvaWQgYWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3RzKGNvbnN0IFN0cmluZyYg
aG9zdCkKIHsKQEAgLTUyLDEzICs1MiwxMyBAQCB2b2lkIGFsbG93c0FueUhUVFBTQ2VydGlmaWNh
dGVIb3N0cyhjb25zdCBTdHJpbmcmIGhvc3QpCiB2b2lkIGFkZEFsbG93ZWRDbGllbnRDZXJ0aWZp
Y2F0ZShjb25zdCBTdHJpbmcmIGhvc3QsIGNvbnN0IFN0cmluZyYgY2VydGlmaWNhdGUsIGNvbnN0
IFN0cmluZyYga2V5KQogewogICAgIGNsaWVudENlcnRpZmljYXRlIGNsaWVudEluZm8oY2VydGlm
aWNhdGUsIGtleSk7Ci0gICAgYWxsb3dlZENsaWVudEhvc3RzLnNldChob3N0Lmxvd2VyKCksIGNs
aWVudEluZm8pOworICAgIGFsbG93ZWRDbGllbnRIb3N0cy5zZXQoaG9zdCwgY2xpZW50SW5mbyk7
CiB9CiAKIHZvaWQgc2V0U1NMQ2xpZW50Q2VydGlmaWNhdGUoUmVzb3VyY2VIYW5kbGUqIGhhbmRs
ZSkKIHsKICAgICBTdHJpbmcgaG9zdCA9IGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuaG9z
dCgpOwotICAgIEhhc2hNYXA8U3RyaW5nLCBjbGllbnRDZXJ0aWZpY2F0ZT46Oml0ZXJhdG9yIGl0
ID0gYWxsb3dlZENsaWVudEhvc3RzLmZpbmQoaG9zdC5sb3dlcigpKTsKKyAgICBhdXRvIGl0ID0g
YWxsb3dlZENsaWVudEhvc3RzLmZpbmQoaG9zdCk7CiAgICAgaWYgKGl0ID09IGFsbG93ZWRDbGll
bnRIb3N0cy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQg
c2V0U1NMQ2xpZW50Q2VydGlmaWNhdGUoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKIAogYm9vbCBz
c2xJZ25vcmVIVFRQU0NlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYgaG9zdCwgY29uc3QgTGlzdEhh
c2hTZXQ8U3RyaW5nPiYgY2VydGlmaWNhdGVzKQogewotICAgIEhhc2hNYXA8U3RyaW5nLCBMaXN0
SGFzaFNldDxTdHJpbmc+Pjo6aXRlcmF0b3IgaXQgPSBhbGxvd2VkSG9zdHMuZmluZChob3N0KTsK
KyAgICBhdXRvIGl0ID0gYWxsb3dlZEhvc3RzLmZpbmQoaG9zdCk7CiAgICAgaWYgKGl0ICE9IGFs
bG93ZWRIb3N0cy5lbmQoKSkgewogICAgICAgICBpZiAoKGl0LT52YWx1ZSkuaXNFbXB0eSgpKSB7
CiAgICAgICAgICAgICBpdC0+dmFsdWUgPSBjZXJ0aWZpY2F0ZXM7CkBAIC03OSw4ICs3OSw4IEBA
IGJvb2wgc3NsSWdub3JlSFRUUFNDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmIGhvc3QsIGNvbnN0
IExpc3RIYXNoU2V0PFN0cmluZz4mIGNlCiAgICAgICAgIH0KICAgICAgICAgaWYgKGNlcnRpZmlj
YXRlcy5zaXplKCkgIT0gaXQtPnZhbHVlLnNpemUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgTGlzdEhhc2hTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgY2VydHNJdGVy
ID0gY2VydGlmaWNhdGVzLmJlZ2luKCk7Ci0gICAgICAgIExpc3RIYXNoU2V0PFN0cmluZz46Oml0
ZXJhdG9yIHZhbHVlSXRlciA9IChpdC0+dmFsdWUpLmJlZ2luKCk7CisgICAgICAgIGF1dG8gY2Vy
dHNJdGVyID0gY2VydGlmaWNhdGVzLmJlZ2luKCk7CisgICAgICAgIGF1dG8gdmFsdWVJdGVyID0g
KGl0LT52YWx1ZSkuYmVnaW4oKTsKICAgICAgICAgZm9yICg7IHZhbHVlSXRlciAhPSAoaXQtPnZh
bHVlKS5lbmQoKTsgKyt2YWx1ZUl0ZXIsICsrY2VydHNJdGVyKSB7CiAgICAgICAgICAgICBpZiAo
KmNlcnRzSXRlciAhPSAqdmFsdWVJdGVyKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTE5OCwxMyArMTk4LDEzIEBAIHN0YXRpYyBpbnQgY2VydFZlcmlmeUNhbGxiYWNrKGludCBv
aywgWDUwOV9TVE9SRV9DVFgqIGN0eCkKICAgICBkLT5tX3NzbEVycm9ycyA9IHNzbENlcnRpZmlj
YXRlRmxhZyhlcnIpOwogCiAjaWYgUExBVEZPUk0oV0lOKQotICAgIEhhc2hNYXA8U3RyaW5nLCBM
aXN0SGFzaFNldDxTdHJpbmc+Pjo6aXRlcmF0b3IgaXQgPSBhbGxvd2VkSG9zdHMuZmluZChob3N0
KTsKKyAgICBhdXRvIGl0ID0gYWxsb3dlZEhvc3RzLmZpbmQoaG9zdCk7CiAgICAgb2sgPSAoaXQg
IT0gYWxsb3dlZEhvc3RzLmVuZCgpKTsKICNlbHNlCiAgICAgTGlzdEhhc2hTZXQ8U3RyaW5nPiBj
ZXJ0aWZpY2F0ZXM7CiAgICAgaWYgKCFwZW1EYXRhKGN0eCwgY2VydGlmaWNhdGVzKSkKICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgb2sgPSBzc2xJZ25vcmVIVFRQU0NlcnRpZmljYXRlKGhvc3QubG93
ZXIoKSwgY2VydGlmaWNhdGVzKTsKKyAgICBvayA9IHNzbElnbm9yZUhUVFBTQ2VydGlmaWNhdGUo
aG9zdCwgY2VydGlmaWNhdGVzKTsKICNlbmRpZgogCiAgICAgaWYgKG9rKSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3Vw
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRs
ZVNvdXAuY3BwCmluZGV4IGM1MmM3MzZjYjJlNTYyNWRiNzNjOTk2YmIxOGQ2M2Q3ZWRiMWRlNDku
LjI1ZDM1MzkzMGRmODM2ZWYxN2U0YjM0MGQwMzE0MGNiYmIxYTUxZTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRs
ZVNvdXAuY3BwCkBAIC0yNDQsMTMgKzI0NCwxMyBAQCBzdGF0aWMgdm9pZCBjb250aW51ZUFmdGVy
RGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKik7CiAKIHN0YXRpYyBib29sIGdJZ25v
cmVTU0xFcnJvcnMgPSBmYWxzZTsKIAotc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiYgYWxsb3dzQW55
SFRUUFNDZXJ0aWZpY2F0ZUhvc3RzKCkKK3N0YXRpYyBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNl
SW5zZW5zaXRpdmVIYXNoPiYgYWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3RzKCkKIHsKLSAg
ICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxTdHJpbmc+LCBob3N0cywg
KCkpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNl
SW5zZW5zaXRpdmVIYXNoPj4gaG9zdHM7CiAgICAgcmV0dXJuIGhvc3RzOwogfQogCi10eXBlZGVm
IEhhc2hNYXA8U3RyaW5nLCBIb3N0VExTQ2VydGlmaWNhdGVTZXQ+IENlcnRpZmljYXRlc01hcDsK
K3R5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIEhvc3RUTFNDZXJ0aWZpY2F0ZVNldCwgQVNDSUlDYXNl
SW5zZW5zaXRpdmVIYXNoPiBDZXJ0aWZpY2F0ZXNNYXA7CiBzdGF0aWMgQ2VydGlmaWNhdGVzTWFw
JiBjbGllbnRDZXJ0aWZpY2F0ZXMoKQogewogICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19M
T0NBTChDZXJ0aWZpY2F0ZXNNYXAsIGNlcnRpZmljYXRlcywgKCkpOwpAQCAtMzIyLDEyICszMjIs
MTIgQEAgc3RhdGljIGJvb2wgaGFuZGxlVW5pZ25vcmVkVExTRXJyb3JzKFJlc291cmNlSGFuZGxl
KiBoYW5kbGUsIFNvdXBNZXNzYWdlKiBtZXNzYWcKICAgICBpZiAoIXRsc0Vycm9ycykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU3RyaW5nIGxvd2VyY2FzZUhvc3RVUkwgPSBoYW5kbGUt
PmZpcnN0UmVxdWVzdCgpLnVybCgpLmhvc3QoKS5sb3dlcigpOwotICAgIGlmIChhbGxvd3NBbnlI
VFRQU0NlcnRpZmljYXRlSG9zdHMoKS5jb250YWlucyhsb3dlcmNhc2VIb3N0VVJMKSkKKyAgICBT
dHJpbmcgaG9zdCA9IGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuaG9zdCgpOworICAgIGlm
IChhbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlSG9zdHMoKS5jb250YWlucyhob3N0KSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gV2UgYXJlbid0IGlnbm9yaW5nIGVycm9ycyBnbG9i
YWxseSwgYnV0IHRoZSB1c2VyIG1heSBoYXZlIGFscmVhZHkgZGVjaWRlZCB0byBhY2NlcHQgdGhp
cyBjZXJ0aWZpY2F0ZS4KLSAgICBhdXRvIGl0ID0gY2xpZW50Q2VydGlmaWNhdGVzKCkuZmluZChs
b3dlcmNhc2VIb3N0VVJMKTsKKyAgICBhdXRvIGl0ID0gY2xpZW50Q2VydGlmaWNhdGVzKCkuZmlu
ZChob3N0KTsKICAgICBpZiAoaXQgIT0gY2xpZW50Q2VydGlmaWNhdGVzKCkuZW5kKCkgJiYgaXQt
PnZhbHVlLmNvbnRhaW5zKGNlcnRpZmljYXRlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBA
IC0xMDg3LDEyICsxMDg3LDEyIEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnNob3VsZFVzZUNyZWRl
bnRpYWxTdG9yYWdlKCkKIAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0SG9zdEFsbG93c0FueUhU
VFBTQ2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJiBob3N0KQogewotICAgIGFsbG93c0FueUhUVFBT
Q2VydGlmaWNhdGVIb3N0cygpLmFkZChob3N0Lmxvd2VyKCkpOworICAgIGFsbG93c0FueUhUVFBT
Q2VydGlmaWNhdGVIb3N0cygpLmFkZChob3N0KTsKIH0KIAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6
c2V0Q2xpZW50Q2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJiBob3N0LCBHVGxzQ2VydGlmaWNhdGUq
IGNlcnRpZmljYXRlKQogewotICAgIGNsaWVudENlcnRpZmljYXRlcygpLmFkZChob3N0Lmxvd2Vy
KCksIEhvc3RUTFNDZXJ0aWZpY2F0ZVNldCgpKS5pdGVyYXRvci0+dmFsdWUuYWRkKGNlcnRpZmlj
YXRlKTsKKyAgICBjbGllbnRDZXJ0aWZpY2F0ZXMoKS5hZGQoaG9zdCwgSG9zdFRMU0NlcnRpZmlj
YXRlU2V0KCkpLml0ZXJhdG9yLT52YWx1ZS5hZGQoY2VydGlmaWNhdGUpOwogfQogCiB2b2lkIFJl
c291cmNlSGFuZGxlOjpzZXRJZ25vcmVTU0xFcnJvcnMoYm9vbCBpZ25vcmVTU0xFcnJvcnMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFw
cGluZ0RlZmF1bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1Nj
cmlwdE1hcHBpbmdEZWZhdWx0LmNwcAppbmRleCA1YmMzNjBmYzU4NjlhNjRiZWE5M2UxMjRmNjM4
NDY3ZGI5Y2YwNGVjLi41NTNkYmNlMjU0NzE3Y2IyMDIxYzI5ZGMxNjcyNDFlMTczYWEzYTg2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFw
cGluZ0RlZmF1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxl
VG9TY3JpcHRNYXBwaW5nRGVmYXVsdC5jcHAKQEAgLTE1NywyMCArMTU3LDIxIEBAIHN0YXRpYyBj
b25zdCBTY3JpcHROYW1lQ29kZSBzY3JpcHROYW1lQ29kZUxpc3RbXSA9IHsKIH07CiAKIHN0cnVj
dCBTY3JpcHROYW1lQ29kZU1hcEhhc2hUcmFpdHMgOiBwdWJsaWMgSGFzaFRyYWl0czxTdHJpbmc+
IHsKLSAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltdW1UYWJsZVNpemUgPSBXVEY6Okhhc2hUYWJs
ZUNhcGFjaXR5Rm9yU2l6ZTxzaXplb2Yoc2NyaXB0TmFtZUNvZGVMaXN0KSAvIHNpemVvZihTY3Jp
cHROYW1lQ29kZSk+Ojp2YWx1ZTsKKyAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltdW1UYWJsZVNp
emUgPSBXVEY6Okhhc2hUYWJsZUNhcGFjaXR5Rm9yU2l6ZTxXVEZfQVJSQVlfTEVOR1RIKHNjcmlw
dE5hbWVDb2RlTGlzdCk+Ojp2YWx1ZTsKIH07CiAKLXR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFVT
Y3JpcHRDb2RlLCBEZWZhdWx0SGFzaDxTdHJpbmc+OjpIYXNoLCBTY3JpcHROYW1lQ29kZU1hcEhh
c2hUcmFpdHM+IFNjcmlwdE5hbWVDb2RlTWFwOwordHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVVNj
cmlwdENvZGUsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaCwgU2NyaXB0TmFtZUNvZGVNYXBIYXNo
VHJhaXRzPiBTY3JpcHROYW1lQ29kZU1hcDsKIAogVVNjcmlwdENvZGUgc2NyaXB0TmFtZVRvQ29k
ZShjb25zdCBTdHJpbmcmIHNjcmlwdE5hbWUpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PFNjcmlwdE5hbWVDb2RlTWFwPiBzY3JpcHROYW1lQ29kZU1hcDsKLSAgICBpZiAoc2NyaXB0TmFt
ZUNvZGVNYXAuZ2V0KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2l6ZW9mKHNjcmlwdE5hbWVDb2RlTGlzdCkgLyBzaXplb2YoU2NyaXB0TmFtZUNvZGUpOyAr
K2kpCi0gICAgICAgICAgICBzY3JpcHROYW1lQ29kZU1hcC5nZXQoKS5zZXQoQVNDSUlMaXRlcmFs
KHNjcmlwdE5hbWVDb2RlTGlzdFtpXS5uYW1lKSwgc2NyaXB0TmFtZUNvZGVMaXN0W2ldLmNvZGUp
OwotICAgIH0KKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U2NyaXB0TmFtZUNvZGVNYXA+IHNj
cmlwdE5hbWVDb2RlTWFwID0gW10oKSB7CisgICAgICAgIFNjcmlwdE5hbWVDb2RlTWFwIG1hcDsK
KyAgICAgICAgZm9yIChhdXRvJiBuYW1lQW5kQ29kZSA6IHNjcmlwdE5hbWVDb2RlTGlzdCkKKyAg
ICAgICAgICAgIG1hcC5hZGQoQVNDSUlMaXRlcmFsKG5hbWVBbmRDb2RlLm5hbWUpLCBuYW1lQW5k
Q29kZS5jb2RlKTsKKyAgICAgICAgcmV0dXJuIG1hcDsKKyAgICB9KCk7CiAKLSAgICBTY3JpcHRO
YW1lQ29kZU1hcDo6aXRlcmF0b3IgaXQgPSBzY3JpcHROYW1lQ29kZU1hcC5nZXQoKS5maW5kKHNj
cmlwdE5hbWUubG93ZXIoKSk7CisgICAgYXV0byBpdCA9IHNjcmlwdE5hbWVDb2RlTWFwLmdldCgp
LmZpbmQoc2NyaXB0TmFtZSk7CiAgICAgaWYgKGl0ICE9IHNjcmlwdE5hbWVDb2RlTWFwLmdldCgp
LmVuZCgpKQogICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogICAgIHJldHVybiBVU0NSSVBUX0lO
VkFMSURfQ09ERTsKQEAgLTM4MywzMSArMzg0LDMzIEBAIHN0YXRpYyBjb25zdCBMb2NhbGVTY3Jp
cHQgbG9jYWxlU2NyaXB0TGlzdFtdID0gewogfTsKIAogc3RydWN0IExvY2FsZVNjcmlwdE1hcEhh
c2hUcmFpdHMgOiBwdWJsaWMgSGFzaFRyYWl0czxTdHJpbmc+IHsKLSAgICBzdGF0aWMgY29uc3Qg
aW50IG1pbmltdW1UYWJsZVNpemUgPSBXVEY6Okhhc2hUYWJsZUNhcGFjaXR5Rm9yU2l6ZTxzaXpl
b2YobG9jYWxlU2NyaXB0TGlzdCkgLyBzaXplb2YoTG9jYWxlU2NyaXB0KT46OnZhbHVlOworICAg
IHN0YXRpYyBjb25zdCBpbnQgbWluaW11bVRhYmxlU2l6ZSA9IFdURjo6SGFzaFRhYmxlQ2FwYWNp
dHlGb3JTaXplPFdURl9BUlJBWV9MRU5HVEgobG9jYWxlU2NyaXB0TGlzdCk+Ojp2YWx1ZTsKIH07
CiAKLXR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFVTY3JpcHRDb2RlLCBEZWZhdWx0SGFzaDxTdHJp
bmc+OjpIYXNoLCBMb2NhbGVTY3JpcHRNYXBIYXNoVHJhaXRzPiBMb2NhbGVTY3JpcHRNYXA7Cit0
eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBVU2NyaXB0Q29kZSwgQVNDSUlDYXNlSW5zZW5zaXRpdmVI
YXNoLCBMb2NhbGVTY3JpcHRNYXBIYXNoVHJhaXRzPiBMb2NhbGVTY3JpcHRNYXA7CiAKIFVTY3Jp
cHRDb2RlIGxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24oY29uc3QgU3RyaW5nJiBs
b2NhbGUpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPExvY2FsZVNjcmlwdE1hcD4gbG9j
YWxlU2NyaXB0TWFwOwotICAgIGlmIChsb2NhbGVTY3JpcHRNYXAuZ2V0KCkuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKGxvY2FsZVNjcmlwdExpc3Qp
IC8gc2l6ZW9mKExvY2FsZVNjcmlwdCk7ICsraSkKLSAgICAgICAgICAgIGxvY2FsZVNjcmlwdE1h
cC5nZXQoKS5zZXQoQVNDSUlMaXRlcmFsKGxvY2FsZVNjcmlwdExpc3RbaV0ubG9jYWxlKSwgbG9j
YWxlU2NyaXB0TGlzdFtpXS5zY3JpcHQpOwotICAgIH0KKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8TG9jYWxlU2NyaXB0TWFwPiBsb2NhbGVTY3JpcHRNYXAgPSBbXSgpIHsKKyAgICAgICAgTG9j
YWxlU2NyaXB0TWFwIG1hcDsKKyAgICAgICAgZm9yIChhdXRvJiBsb2NhbGVBbmRTY3JpcHQgOiBs
b2NhbGVTY3JpcHRMaXN0KQorICAgICAgICAgICAgbWFwLmFkZChBU0NJSUxpdGVyYWwobG9jYWxl
QW5kU2NyaXB0LmxvY2FsZSksIGxvY2FsZUFuZFNjcmlwdC5zY3JpcHQpOworICAgICAgICByZXR1
cm4gbWFwOworICAgIH0oKTsKIAotICAgIFN0cmluZyBjYW5vbmljYWxMb2NhbGUgPSBsb2NhbGUu
bG93ZXIoKS5yZXBsYWNlKCctJywgJ18nKTsKKyAgICBTdHJpbmcgY2Fub25pY2FsTG9jYWxlID0g
bG9jYWxlOworICAgIGNhbm9uaWNhbExvY2FsZS5yZXBsYWNlKCctJywgJ18nKTsKICAgICB3aGls
ZSAoIWNhbm9uaWNhbExvY2FsZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgTG9jYWxlU2NyaXB0TWFw
OjppdGVyYXRvciBpdCA9IGxvY2FsZVNjcmlwdE1hcC5nZXQoKS5maW5kKGNhbm9uaWNhbExvY2Fs
ZSk7CisgICAgICAgIGF1dG8gaXQgPSBsb2NhbGVTY3JpcHRNYXAuZ2V0KCkuZmluZChjYW5vbmlj
YWxMb2NhbGUpOwogICAgICAgICBpZiAoaXQgIT0gbG9jYWxlU2NyaXB0TWFwLmdldCgpLmVuZCgp
KQogICAgICAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKLSAgICAgICAgc2l6ZV90IHBvcyA9IGNh
bm9uaWNhbExvY2FsZS5yZXZlcnNlRmluZCgnXycpOwotICAgICAgICBpZiAocG9zID09IG5vdEZv
dW5kKQorICAgICAgICBhdXRvIHVuZGVyc2NvcmVQb3NpdGlvbiA9IGNhbm9uaWNhbExvY2FsZS5y
ZXZlcnNlRmluZCgnXycpOworICAgICAgICBpZiAodW5kZXJzY29yZVBvc2l0aW9uID09IG5vdEZv
dW5kKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIFVTY3JpcHRDb2RlIGNvZGUgPSBzY3Jp
cHROYW1lVG9Db2RlKGNhbm9uaWNhbExvY2FsZS5zdWJzdHJpbmcocG9zICsgMSkpOworICAgICAg
ICBVU2NyaXB0Q29kZSBjb2RlID0gc2NyaXB0TmFtZVRvQ29kZShjYW5vbmljYWxMb2NhbGUuc3Vi
c3RyaW5nKHVuZGVyc2NvcmVQb3NpdGlvbiArIDEpKTsKICAgICAgICAgaWYgKGNvZGUgIT0gVVND
UklQVF9JTlZBTElEX0NPREUgJiYgY29kZSAhPSBVU0NSSVBUX1VOS05PV04pCiAgICAgICAgICAg
ICByZXR1cm4gY29kZTsKLSAgICAgICAgY2Fub25pY2FsTG9jYWxlID0gY2Fub25pY2FsTG9jYWxl
LnN1YnN0cmluZygwLCBwb3MpOworICAgICAgICBjYW5vbmljYWxMb2NhbGUgPSBjYW5vbmljYWxM
b2NhbGUuc3Vic3RyaW5nKDAsIHVuZGVyc2NvcmVQb3NpdGlvbik7CiAgICAgfQogICAgIHJldHVy
biBVU0NSSVBUX0NPTU1PTjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvd2luL0xvY2FsZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dp
bi9Mb2NhbGVXaW4uY3BwCmluZGV4IGNjZDc0YmM0N2E1MDk3ZmEwMTNkMDlhNGI1ZWI3MjRjNTM5
Zjc2OTEuLmU2N2UyNjk3ZTlkYmRlZTY3OTAxOTYwNTFiMDY4NWU0MTU5ZjcwMzEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvd2luL0xvY2FsZVdpbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC93aW4vTG9jYWxlV2luLmNwcApAQCAtNDgsNyAr
NDgsNyBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0eXBl
ZGVmIExDSUQgKFdJTkFQSSogTG9jYWxlTmFtZVRvTENJRFB0cikoTFBDV1NUUiwgRFdPUkQpOwot
dHlwZWRlZiBIYXNoTWFwPFN0cmluZywgTENJRD4gTmFtZVRvTENJRE1hcDsKK3R5cGVkZWYgSGFz
aE1hcDxTdHJpbmcsIExDSUQsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4gTmFtZVRvTENJRE1h
cDsKIAogc3RhdGljIFN0cmluZyBleHRyYWN0TGFuZ3VhZ2VDb2RlKGNvbnN0IFN0cmluZyYgbG9j
YWxlKQogewpAQCAtMTA3LDcgKzEwNyw3IEBAIHN0YXRpYyBMQ0lEIFdJTkFQSSBjb252ZXJ0TG9j
YWxlTmFtZVRvTENJRChMUENXU1RSIG5hbWUsIERXT1JEKQogICAgICAgICByZXR1cm4gTE9DQUxF
X1VTRVJfREVGQVVMVDsKICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoTmFtZVRv
TENJRE1hcCwgbWFwLCAoKSk7CiAgICAgZW5zdXJlTmFtZVRvTENJRE1hcChtYXApOwotICAgIFN0
cmluZyBsb2NhbGVOYW1lID0gU3RyaW5nKG5hbWUpLnJlcGxhY2UoJ18nLCAnLScpLmxvd2VyKCk7
CisgICAgU3RyaW5nIGxvY2FsZU5hbWUgPSBTdHJpbmcobmFtZSkucmVwbGFjZSgnXycsICctJyk7
CiAgICAgZG8gewogICAgICAgICBOYW1lVG9MQ0lETWFwOjpjb25zdF9pdGVyYXRvciBpdGVyYXRv
ciA9IG1hcC5maW5kKGxvY2FsZU5hbWUpOwogICAgICAgICBpZiAoaXRlcmF0b3IgIT0gbWFwLmVu
ZCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRX
aW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCmlu
ZGV4IDNjNjk5Y2RmZGRjOTNlZjZiMzYxMDBmZmMzODliYjg2Y2UxOTczZTguLjAzMWJmZDI0OTQy
YjY0NzIwNjg3ZDI4MzViZTYzZjhhMGU4ZGQ4NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAKQEAgLTE4MiwxNCArMTgyLDE0IEBAIGVudW0gQ2xp
cGJvYXJkRGF0YVR5cGUgeyBDbGlwYm9hcmREYXRhVHlwZU5vbmUsIENsaXBib2FyZERhdGFUeXBl
VVJMLCBDbGlwYm9hcmRECiAKIHN0YXRpYyBDbGlwYm9hcmREYXRhVHlwZSBjbGlwYm9hcmRUeXBl
RnJvbU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKLSAgICBTdHJpbmcgcVR5cGUgPSB0
eXBlLnN0cmlwV2hpdGVTcGFjZSgpLmxvd2VyKCk7CisgICAgU3RyaW5nIHN0cmlwcGVkVHlwZSA9
IHR5cGUuc3RyaXBXaGl0ZVNwYWNlKCk7CiAKICAgICAvLyB0d28gc3BlY2lhbCBjYXNlcyBmb3Ig
SUUgY29tcGF0aWJpbGl0eQotICAgIGlmIChxVHlwZSA9PSAidGV4dCIgfHwgcVR5cGUgPT0gInRl
eHQvcGxhaW4iIHx8IHFUeXBlLnN0YXJ0c1dpdGgoInRleHQvcGxhaW47IikpCisgICAgaWYgKGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmlwcGVkVHlwZSwgInRleHQiKSB8fCBlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpcHBlZFR5cGUsICJ0ZXh0L3BsYWluIikgfHwg
c3RyaXBwZWRUeXBlLnN0YXJ0c1dpdGgoInRleHQvcGxhaW47IiwgZmFsc2UpKQogICAgICAgICBy
ZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVUZXh0OwotICAgIGlmIChxVHlwZSA9PSAidXJsIiB8fCBx
VHlwZSA9PSAidGV4dC91cmktbGlzdCIpCisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKHN0cmlwcGVkVHlwZSwgInVybCIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKHN0cmlwcGVkVHlwZSwgInRleHQvdXJpLWxpc3QiKSkKICAgICAgICAgcmV0dXJuIENsaXBi
b2FyZERhdGFUeXBlVVJMOwotICAgIGlmIChxVHlwZSA9PSAidGV4dC9odG1sIikKKyAgICBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3RyaXBwZWRUeXBlLCAidGV4dC9odG1sIikp
CiAgICAgICAgIHJldHVybiBDbGlwYm9hcmREYXRhVHlwZVRleHRIVE1MOwogCiAgICAgcmV0dXJu
IENsaXBib2FyZERhdGFUeXBlTm9uZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
LmNwcAppbmRleCA1NzMxYzBiNzQ3MDY0NTQxYzk4Yjg5NzUwYTk1YmJjNjhlOWZjOTE4Li44YzRl
ODI5YWQ4ZDhiZDljZjhlMmI1N2YyZmFiMDBiMWYwOTc1MWI3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHQuY3BwCkBAIC0xMDM1LDEwICsxMDM1LDEwIEBAIHZvaWQgYXBwbHlU
ZXh0VHJhbnNmb3JtKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU3RyaW5nJiB0ZXh0LCBVQ2hh
ciBwcmV2aW91c0NoCiAgICAgICAgIG1ha2VDYXBpdGFsaXplZCgmdGV4dCwgcHJldmlvdXNDaGFy
YWN0ZXIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFVQUEVSQ0FTRToKLSAgICAgICAgdGV4
dCA9IHRleHQudXBwZXIoc3R5bGUubG9jYWxlKCkpOworICAgICAgICB0ZXh0ID0gdGV4dC5jb252
ZXJ0VG9VcHBlcmNhc2VXaXRoTG9jYWxlKHN0eWxlLmxvY2FsZSgpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBMT1dFUkNBU0U6Ci0gICAgICAgIHRleHQgPSB0ZXh0Lmxvd2VyKHN0eWxlLmxv
Y2FsZSgpKTsKKyAgICAgICAgdGV4dCA9IHRleHQuY29udmVydFRvTG93ZXJjYXNlV2l0aExvY2Fs
ZShzdHlsZS5sb2NhbGUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94
bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4IGYwMzQwMDcxMWU0YjI5ZGNiZDI5NTk1YTI1NWY5
NmVhZDE2MGRlNmEuLjlkODE3ZTFiYjg5M2Q5ZTlhMDRiYzQzZjliOWI3ZTkzMzYxZDlhZTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAtMTAzMCw5ICsxMDMwLDcgQEAg
U3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZU1JTUVUeXBlKCkgY29uc3QKIAogYm9vbCBY
TUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VJc1hNTCgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IFJl
bW92ZSB0aGUgbG93ZXIoKSBjYWxsIHdoZW4gRE9NSW1wbGVtZW50YXRpb24uaXNYTUxNSU1FVHlw
ZSgpIGlzIG1vZGlmaWVkCi0gICAgLy8gICAgICAgIHRvIGRvIGNhc2UgaW5zZW5zaXRpdmUgTUlN
RSB0eXBlIG1hdGNoaW5nLgotICAgIHJldHVybiBET01JbXBsZW1lbnRhdGlvbjo6aXNYTUxNSU1F
VHlwZShyZXNwb25zZU1JTUVUeXBlKCkubG93ZXIoKSk7CisgICAgcmV0dXJuIERPTUltcGxlbWVu
dGF0aW9uOjppc1hNTE1JTUVUeXBlKHJlc3BvbnNlTUlNRVR5cGUoKSk7CiB9CiAKIGludCBYTUxI
dHRwUmVxdWVzdDo6c3RhdHVzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFj
L1BsdWdpbnMvV2ViQmFzZVBsdWdpblBhY2thZ2UubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVn
aW5zL1dlYkJhc2VQbHVnaW5QYWNrYWdlLm1tCmluZGV4IDViY2VlMjcyM2Q2NTRhMzhkMDczMDUw
ZWJhNjdlODZmNzIyYzgzNTIuLmRlNzk2ZDllY2NiNzQ0YjMyN2QzNTlkZWE2MzUyMjQ4ZDIzODgy
MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViQmFzZVBsdWdpblBh
Y2thZ2UubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJCYXNlUGx1Z2luUGFj
a2FnZS5tbQpAQCAtMjE2LDE4ICsyMTYsMTUgQEAgLSAoQk9PTClnZXRQbHVnaW5JbmZvRnJvbVBM
aXN0cwogICAgICAgICBNaW1lQ2xhc3NJbmZvIG1pbWVDbGFzc0luZm87CiAgICAgICAgIAogICAg
ICAgICBOU0FycmF5ICpleHRlbnNpb25zID0gW1tNSU1FRGljdGlvbmFyeSBvYmplY3RGb3JLZXk6
V2ViUGx1Z2luRXh0ZW5zaW9uc0tleV0gX3dlYl9sb3dlcmNhc2VTdHJpbmdzXTsKLSAgICAgICAg
Zm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgW2V4dGVuc2lvbnMgY291bnRdOyArK2kpIHsKKyAg
ICAgICAgZm9yIChOU1N0cmluZyAqZXh0ZW5zaW9uIGluIGV4dGVuc2lvbnMpIHsKICAgICAgICAg
ICAgIC8vIFRoZSBEaXZYIHBsdWctaW4gbGlzdHMgbXVsdGlwbGUgZXh0ZW5zaW9ucyBpbiBhIGNv
bW1hIHNlcGFyYXRlZCBzdHJpbmcgaW5zdGVhZCBvZiB1c2luZwogICAgICAgICAgICAgLy8gbXVs
dGlwbGUgYXJyYXkgZWxlbWVudHMgaW4gdGhlIHByb3BlcnR5IGxpc3QuIFdvcmsgYXJvdW5kIHRo
aXMgaGVyZSBieSBzcGxpdHRpbmcgdGhlCiAgICAgICAgICAgICAvLyBleHRlbnNpb24gc3RyaW5n
IGludG8gY29tcG9uZW50cy4KLSAgICAgICAgICAgIE5TQXJyYXkgKmV4dGVuc2lvbkNvbXBvbmVu
dHMgPSBbW2V4dGVuc2lvbnMgb2JqZWN0QXRJbmRleDppXSBjb21wb25lbnRzU2VwYXJhdGVkQnlT
dHJpbmc6QCIsIl07Ci0KLSAgICAgICAgICAgIGZvciAoTlNTdHJpbmcgKmV4dGVuc2lvbiBpbiBl
eHRlbnNpb25Db21wb25lbnRzKQotICAgICAgICAgICAgICAgIG1pbWVDbGFzc0luZm8uZXh0ZW5z
aW9ucy5hcHBlbmQoZXh0ZW5zaW9uKTsKKyAgICAgICAgICAgIGZvciAoTlNTdHJpbmcgKmNvbXBv
bmVudCBpbiBbZXh0ZW5zaW9uIGNvbXBvbmVudHNTZXBhcmF0ZWRCeVN0cmluZzpAIiwiXSkKKyAg
ICAgICAgICAgICAgICBtaW1lQ2xhc3NJbmZvLmV4dGVuc2lvbnMuYXBwZW5kKGNvbXBvbmVudCk7
CiAgICAgICAgIH0KIAotICAgICAgICBtaW1lQ2xhc3NJbmZvLnR5cGUgPSBTdHJpbmcoTUlNRSku
bG93ZXIoKTsKLQorICAgICAgICBtaW1lQ2xhc3NJbmZvLnR5cGUgPSBTdHJpbmcoTUlNRSkuY29u
dmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKICAgICAgICAgbWltZUNsYXNzSW5mby5kZXNjID0gW01J
TUVEaWN0aW9uYXJ5IG9iamVjdEZvcktleTpXZWJQbHVnaW5UeXBlRGVzY3JpcHRpb25LZXldOwog
CiAgICAgICAgIHBsdWdpbkluZm8ubWltZXMuYXBwZW5kKG1pbWVDbGFzc0luZm8pOwpAQCAtMjg0
LDEyICsyODEsMTAgQEAgLSAoY29uc3QgUGx1Z2luSW5mbyYpcGx1Z2luSW5mbwogCiAtIChCT09M
KXN1cHBvcnRzRXh0ZW5zaW9uOihjb25zdCBTdHJpbmcmKWV4dGVuc2lvbgogewotICAgIEFTU0VS
VChleHRlbnNpb24ubG93ZXIoKSA9PSBleHRlbnNpb24pOworICAgIEFTU0VSVChleHRlbnNpb24u
Y29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSA9PSBleHRlbnNpb24pOwogICAgIAotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcGx1Z2luSW5mby5taW1lcy5zaXplKCk7ICsraSkgewotICAgICAg
ICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXh0ZW5zaW9ucyA9IHBsdWdpbkluZm8ubWltZXNbaV0u
ZXh0ZW5zaW9uczsKLQotICAgICAgICBpZiAoc3RkOjpmaW5kKGV4dGVuc2lvbnMuYmVnaW4oKSwg
ZXh0ZW5zaW9ucy5lbmQoKSwgZXh0ZW5zaW9uKSAhPSBleHRlbnNpb25zLmVuZCgpKQorICAgIGZv
ciAoYXV0byYgZW50cnkgOiBwbHVnaW5JbmZvLm1pbWVzKSB7CisgICAgICAgIGlmIChlbnRyeS5l
eHRlbnNpb25zLmNvbnRhaW5zKGV4dGVuc2lvbikpCiAgICAgICAgICAgICByZXR1cm4gWUVTOwog
ICAgIH0KIApAQCAtMjk4LDI2ICsyOTMsMjMgQEAgLSAoQk9PTClzdXBwb3J0c0V4dGVuc2lvbjoo
Y29uc3QgU3RyaW5nJilleHRlbnNpb24KIAogLSAoQk9PTClzdXBwb3J0c01JTUVUeXBlOihjb25z
dCBXVEY6OlN0cmluZyYpbWltZVR5cGUKIHsKLSAgICBBU1NFUlQobWltZVR5cGUubG93ZXIoKSA9
PSBtaW1lVHlwZSk7CisgICAgQVNTRVJUKG1pbWVUeXBlLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNl
KCkgPT0gbWltZVR5cGUpOwogICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGx1Z2lu
SW5mby5taW1lcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAocGx1Z2luSW5mby5taW1lc1tp
XS50eXBlID09IG1pbWVUeXBlKQorICAgIGZvciAoYXV0byYgZW50cnkgOiBwbHVnaW5JbmZvLm1p
bWVzKSB7CisgICAgICAgIGlmIChlbnRyeS50eXBlID09IG1pbWVUeXBlKQogICAgICAgICAgICAg
cmV0dXJuIFlFUzsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gTk87CiB9CiAKIC0gKE5TU3Ry
aW5nICopTUlNRVR5cGVGb3JFeHRlbnNpb246KGNvbnN0IFN0cmluZyYpZXh0ZW5zaW9uCiB7Ci0g
ICAgQVNTRVJUKGV4dGVuc2lvbi5sb3dlcigpID09IGV4dGVuc2lvbik7CisgICAgQVNTRVJUKGV4
dGVuc2lvbi5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpID09IGV4dGVuc2lvbik7CiAgICAgCi0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwbHVnaW5JbmZvLm1pbWVzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIGNvbnN0IE1pbWVDbGFzc0luZm8mIG1pbWVDbGFzc0luZm8gPSBwbHVnaW5JbmZv
Lm1pbWVzW2ldOwotICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXh0ZW5zaW9ucyA9IG1p
bWVDbGFzc0luZm8uZXh0ZW5zaW9uczsKLQotICAgICAgICBpZiAoc3RkOjpmaW5kKGV4dGVuc2lv
bnMuYmVnaW4oKSwgZXh0ZW5zaW9ucy5lbmQoKSwgZXh0ZW5zaW9uKSAhPSBleHRlbnNpb25zLmVu
ZCgpKQotICAgICAgICAgICAgcmV0dXJuIG1pbWVDbGFzc0luZm8udHlwZTsKKyAgICBmb3IgKGF1
dG8mIGVudHJ5IDogcGx1Z2luSW5mby5taW1lcykgeworICAgICAgICBpZiAoZW50cnkuZXh0ZW5z
aW9ucy5jb250YWlucyhleHRlbnNpb24pKQorICAgICAgICAgICAgcmV0dXJuIGVudHJ5LnR5cGU7
CiAgICAgfQogCiAgICAgcmV0dXJuIG5pbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2lu
L1BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9Q
bHVnaW5EYXRhYmFzZS5jcHAKaW5kZXggMWEwYzdlODNiODIxMWNiY2RmNTRmOWQwNmUzNjEzNDI4
YzI4ZGY3MS4uNGY5ZWYyZDBjYzliNGY1MThjMWM2ZTJiMTFhMjBjZjUzMGUzNDJmNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKQEAgLTE5MCwxNCAr
MTkwLDEyIEBAIGludCBQbHVnaW5EYXRhYmFzZTo6cHJlZmVycmVkUGx1Z2luQ29tcGFyZShjb25z
dCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKQogUGx1Z2luUGFja2FnZSogUGx1Z2luRGF0YWJhc2U6
OnBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiB7CiAgICAgaWYgKG1p
bWVUeXBlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxs
cHRyOwogCi0gICAgU3RyaW5nIGtleSA9IG1pbWVUeXBlLmxvd2VyKCk7Ci0gICAgUGx1Z2luU2V0
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Ci0gICAgUGx1Z2luUGFja2Fn
ZSogcHJlZmVycmVkUGx1Z2luID0gbV9wcmVmZXJyZWRQbHVnaW5zLmdldChrZXkpOworICAgIFBs
dWdpblBhY2thZ2UqIHByZWZlcnJlZFBsdWdpbiA9IG1fcHJlZmVycmVkUGx1Z2lucy5nZXQobWlt
ZVR5cGUpOwogICAgIGlmIChwcmVmZXJyZWRQbHVnaW4KICAgICAgICAgJiYgcHJlZmVycmVkUGx1
Z2luLT5pc0VuYWJsZWQoKQotICAgICAgICAmJiBwcmVmZXJyZWRQbHVnaW4tPm1pbWVUb0Rlc2Ny
aXB0aW9ucygpLmNvbnRhaW5zKGtleSkpIHsKKyAgICAgICAgJiYgcHJlZmVycmVkUGx1Z2luLT5t
aW1lVG9EZXNjcmlwdGlvbnMoKS5jb250YWlucyhtaW1lVHlwZSkpIHsKICAgICAgICAgcmV0dXJu
IHByZWZlcnJlZFBsdWdpbjsKICAgICB9CiAKQEAgLTIwOSw3ICsyMDcsNyBAQCBQbHVnaW5QYWNr
YWdlKiBQbHVnaW5EYXRhYmFzZTo6cGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSkKICAgICAgICAgaWYgKCFwbHVnaW4tPmlzRW5hYmxlZCgpKQogICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgaWYgKHBsdWdpbi0+bWltZVRvRGVzY3JpcHRpb25zKCkuY29udGFp
bnMoa2V5KSkgeworICAgICAgICBpZiAocGx1Z2luLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5jb250
YWlucyhtaW1lVHlwZSkpIHsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NB
Q0hFKQogICAgICAgICAgICAgaWYgKCFwbHVnaW4tPmVuc3VyZVBsdWdpbkxvYWRlZCgpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMzA1LDcgKzMwMyw3IEBAIFBsdWdpblBhY2thZ2Uq
IFBsdWdpbkRhdGFiYXNlOjpmaW5kUGx1Z2luKGNvbnN0IFVSTCYgdXJsLCBTdHJpbmcmIG1pbWVU
eXBlKQogdm9pZCBQbHVnaW5EYXRhYmFzZTo6c2V0UHJlZmVycmVkUGx1Z2luRm9yTUlNRVR5cGUo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgUGx1Z2luUGFja2FnZSogcGx1Z2luKQogewogICAgIGlm
ICghcGx1Z2luIHx8IHBsdWdpbi0+bWltZVRvRXh0ZW5zaW9ucygpLmNvbnRhaW5zKG1pbWVUeXBl
KSkKLSAgICAgICAgbV9wcmVmZXJyZWRQbHVnaW5zLnNldChtaW1lVHlwZS5sb3dlcigpLCBwbHVn
aW4pOworICAgICAgICBtX3ByZWZlcnJlZFBsdWdpbnMuc2V0KG1pbWVUeXBlLCBwbHVnaW4pOwog
fQogCiBib29sIFBsdWdpbkRhdGFiYXNlOjpmaWxlRXhpc3RzQW5kSXNOb3REaXNhYmxlZChjb25z
dCBTdHJpbmcmIGZpbGVQYXRoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4v
UGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oIGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVn
aW5EYXRhYmFzZS5oCmluZGV4IGJmYzQ4ZWNkZmY2Y2YyMjQzNTU5NGY4YWU4NTIzMDFhNjI2M2Nm
ODYuLmViNmE4NDExMjRkNjk3NzViNmNjYzdiZTQzZmJjMDlkYmYwOTc3MTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmgKQEAgLTEwNyw3ICsxMDcsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFBsdWdpblNldCBtX3BsdWdpbnM7CiAgICAgICAg
IEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UGx1Z2luUGFja2FnZT4gPiBtX3BsdWdpbnNCeVBhdGg7
CiAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCB0aW1lX3Q+IG1fcGx1Z2luUGF0aHNXaXRoVGltZXM7
Ci0gICAgICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UGx1Z2luUGFja2FnZT4gPiBtX3ByZWZl
cnJlZFBsdWdpbnM7CisgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UGx1Z2luUGFja2Fn
ZT4sIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4gbV9wcmVmZXJyZWRQbHVnaW5zOwogI2lmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCiAgICAgICAgIGJvb2wgbV9wZXJz
aXN0ZW50TWV0YWRhdGFDYWNoZUlzTG9hZGVkOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblBhY2thZ2UuaCBiL1NvdXJjZS9XZWJLaXQvd2luL1Bs
dWdpbnMvUGx1Z2luUGFja2FnZS5oCmluZGV4IDI4MzQwNTc2Nzk3YWE2YmM4MzE3NzJiYzNiNGY5
Y2NmOGNjOGJhNjMuLmQ3NmVhZmQ1NzliYjM2MGY3NzQyZWVhNGRjYzExMmE4ZTVjNzE1YTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luUGFja2FnZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luUGFja2FnZS5oCkBAIC0zOSw4ICszOSw5
IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IE1JTUVUb0Rlc2NyaXB0aW9u
c01hcDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPiA+IE1JTUVU
b0V4dGVuc2lvbnNNYXA7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmcsIEFT
Q0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4gTUlNRVRvRGVzY3JpcHRpb25zTWFwOworICAgIHR5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+LCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhh
c2g+IE1JTUVUb0V4dGVuc2lvbnNNYXA7CiAKICAgICBjbGFzcyBQbHVnaW5QYWNrYWdlIDogcHVi
bGljIFJlZkNvdW50ZWQ8UGx1Z2luUGFja2FnZT4gewogICAgIHB1YmxpYzoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luUGFja2FnZVdpbi5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblBhY2thZ2VXaW4uY3BwCmluZGV4IGMyYmJjYzQ1MDU5
ODQwNWM1YzhhMjRmMDhhZTdiMmEwYmUxNzg0N2YuLjU2ZTZmYjg4YzE3NTdmM2MzZjdiODlhZDYx
NWNiNmQ4N2YzMTYyYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1
Z2luUGFja2FnZVdpbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5Q
YWNrYWdlV2luLmNwcApAQCAtMjAwLDcgKzIwMCw3IEBAIGJvb2wgUGx1Z2luUGFja2FnZTo6ZmV0
Y2hJbmZvKCkKICAgICBnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEuZ2V0KCksICJGaWxl
T3Blbk5hbWUiKS5zcGxpdCgnfCcsIGRlc2NyaXB0aW9ucyk7CiAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgdHlwZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgU3RyaW5nIHR5cGUgPSB0
eXBlc1tpXS5sb3dlcigpOworICAgICAgICBTdHJpbmcgdHlwZSA9IHR5cGVzW2ldLmNvbnZlcnRU
b0FTQ0lJTG93ZXJjYXNlKCk7CiAgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IGkgPCBkZXNj
cmlwdGlvbnMuc2l6ZSgpID8gZGVzY3JpcHRpb25zW2ldIDogIiI7CiAgICAgICAgIFN0cmluZyBl
eHRlbnNpb25MaXN0ID0gaSA8IGV4dGVuc2lvbkxpc3RzLnNpemUoKSA/IGV4dGVuc2lvbkxpc3Rz
W2ldIDogIiI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0N1
c3RvbVByb3RvY29scy9DdXN0b21Qcm90b2NvbE1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL0N1c3RvbVByb3RvY29scy9DdXN0b21Qcm90b2NvbE1hbmFnZXIuaAppbmRl
eCA5Y2ZkYzM5NmUxMzY5N2MyOWQ4ZDg3ZmMxYzJhMDBiY2ViZDJjNmVlLi5iZjJiZDQ3MjA1Y2Ew
OGY5OTNmYmJjZjc1ZjRkZmIyZDYwOTQ4NTNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmgKKysr
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL0N1c3RvbVBy
b3RvY29sTWFuYWdlci5oCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIE9CSkNfQ0xBU1MgTlNVUkxTZXNz
aW9uQ29uZmlndXJhdGlvbjsKIE9CSkNfQ0xBU1MgV0tDdXN0b21Qcm90b2NvbDsKICNlbHNlCkBA
IC05OSw3ICsxMDAsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXb3JrUXVldWU+IG1fbWVzc2Fn
ZVF1ZXVlOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgSGFzaFNldDxTdHJpbmc+IG1fcmVn
aXN0ZXJlZFNjaGVtZXM7CisgICAgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZl
SGFzaD4gbV9yZWdpc3RlcmVkU2NoZW1lczsKICAgICBMb2NrIG1fcmVnaXN0ZXJlZFNjaGVtZXNN
dXRleDsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwgUmV0YWluUHRyPFdLQ3VzdG9t
UHJvdG9jb2w+PiBDdXN0b21Qcm90b2NvbE1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL21hYy9OZXRzY2FwZVBsdWdpbk1vZHVsZU1hYy5tbSBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL21hYy9OZXRzY2FwZVBsdWdp
bk1vZHVsZU1hYy5tbQppbmRleCAxNTY0MTM2MTlkMzZjNTIwM2FhNWViY2M4ODcyYTJmOWQ2ZDQz
ZWE0Li4zMDVmODVhYjQzYjc1ZjI3MTE2MDhjZWM1ZDc2YzYxNGU4ZGFlMDc1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9tYWMvTmV0c2NhcGVQbHVn
aW5Nb2R1bGVNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTmV0c2Nh
cGUvbWFjL05ldHNjYXBlUGx1Z2luTW9kdWxlTWFjLm1tCkBAIC0xODYsNyArMTg2LDcgQEAgc3Rh
dGljIGJvb2wgZ2V0UGx1Z2luSW5mb0Zyb21Qcm9wZXJ0eUxpc3RzKENGQnVuZGxlUmVmIGJ1bmRs
ZSwgUGx1Z2luTW9kdWxlSW5mbyYKICAgICAgICAgaWYgKG1pbWVUeXBlRGVzY3JpcHRpb24gJiYg
Q0ZHZXRUeXBlSUQobWltZVR5cGVEZXNjcmlwdGlvbikgIT0gQ0ZTdHJpbmdHZXRUeXBlSUQoKSkK
ICAgICAgICAgICAgIG1pbWVUeXBlRGVzY3JpcHRpb24gPSAwOwogCi0gICAgICAgIG1pbWVDbGFz
c0luZm8udHlwZSA9IFN0cmluZyhtaW1lVHlwZSkubG93ZXIoKTsKKyAgICAgICAgbWltZUNsYXNz
SW5mby50eXBlID0gU3RyaW5nKG1pbWVUeXBlKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOwog
ICAgICAgICBtaW1lQ2xhc3NJbmZvLmRlc2MgPSBtaW1lVHlwZURlc2NyaXB0aW9uOwogCiAgICAg
ICAgIC8vIE5vdyBnZXQgdGhlIGV4dGVuc2lvbnMgZm9yIHRoaXMgTUlNRSB0eXBlLgpAQCAtMjA0
LDEwICsyMDQsMTAgQEAgc3RhdGljIGJvb2wgZ2V0UGx1Z2luSW5mb0Zyb21Qcm9wZXJ0eUxpc3Rz
KENGQnVuZGxlUmVmIGJ1bmRsZSwgUGx1Z2luTW9kdWxlSW5mbyYKICAgICAgICAgICAgIC8vIG11
bHRpcGxlIGFycmF5IGVsZW1lbnRzIGluIHRoZSBwcm9wZXJ0eSBsaXN0LiBXb3JrIGFyb3VuZCB0
aGlzIGhlcmUgYnkgc3BsaXR0aW5nIHRoZQogICAgICAgICAgICAgLy8gZXh0ZW5zaW9uIHN0cmlu
ZyBpbnRvIGNvbXBvbmVudHMuCiAgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRlbnNpb25D
b21wb25lbnRzOwotICAgICAgICAgICAgU3RyaW5nKGV4dGVuc2lvbikubG93ZXIoKS5zcGxpdCgn
LCcsIGV4dGVuc2lvbkNvbXBvbmVudHMpOworICAgICAgICAgICAgU3RyaW5nKGV4dGVuc2lvbiku
Y29udmVydFRvQVNDSUlMb3dlcmNhc2UoKS5zcGxpdCgnLCcsIGV4dGVuc2lvbkNvbXBvbmVudHMp
OwogCi0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGV4dGVuc2lvbkNvbXBvbmVu
dHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgbWltZUNsYXNzSW5mby5leHRlbnNpb25z
LmFwcGVuZChleHRlbnNpb25Db21wb25lbnRzW2ldKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYg
Y29tcG9uZW50IDogZXh0ZW5zaW9uQ29tcG9uZW50cykKKyAgICAgICAgICAgICAgICBtaW1lQ2xh
c3NJbmZvLmV4dGVuc2lvbnMuYXBwZW5kKGNvbXBvbmVudCk7CiAgICAgICAgIH0KIAogICAgICAg
ICAvLyBBZGQgdGhpcyBNSU1FIHR5cGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvUGx1Z2lucy9OZXRzY2FwZS94MTEvTmV0c2NhcGVQbHVnaW5Nb2R1bGVYMTEuY3BwIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUveDExL05ldHNjYXBlUGx1Z2luTW9k
dWxlWDExLmNwcAppbmRleCAzNjI3NTM5MmEzYzBiNDdlNzljZGNhMGViNjMzMTBhZTZlZjhhOWY0
Li5hY2ZjZjAwMjMzODRhMjliZmE3NGIyNGJmZGNkMGZhMjg0ZjliMWNkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS94MTEvTmV0c2NhcGVQbHVnaW5N
b2R1bGVYMTEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05ldHNjYXBl
L3gxMS9OZXRzY2FwZVBsdWdpbk1vZHVsZVgxMS5jcHAKQEAgLTc2LDcgKzc2LDcgQEAgdm9pZCBO
ZXRzY2FwZVBsdWdpbk1vZHVsZTo6cGFyc2VNSU1FRGVzY3JpcHRpb24oY29uc3QgU3RyaW5nJiBt
aW1lRGVzY3JpcHRpb24sIFYKICAgICBBU1NFUlRfQVJHKHJlc3VsdCwgcmVzdWx0LmlzRW1wdHko
KSk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKLSAgICBtaW1lRGVzY3JpcHRpb24ubG93
ZXIoKS5zcGxpdChVQ2hhcignOycpLCBmYWxzZSwgdHlwZXMpOworICAgIG1pbWVEZXNjcmlwdGlv
bi5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpLnNwbGl0KFVDaGFyKCc7JyksIGZhbHNlLCB0eXBl
cyk7CiAgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodHlwZXMuc2l6ZSgpKTsKIAog
ICAgIHNpemVfdCBtaW1lSW5mb0NvdW50ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAppbmRleCA0MTY5Nzc2N2NhN2NlNmUzZDc2MDI4
Njk3M2MzZTQzZjRjMTlhYjE1Li43M2EwNTk5MGM0MjM3NTdiMGUzZTE5NmFhZjE4YTg5NjMzODlh
NDMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29u
dGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRl
eHQuY3BwCkBAIC01NjMsNyArNTYzLDcgQEAgdm9pZCBld2tfY29udGV4dF9wcmVmZXJyZWRfbGFu
Z3VhZ2VzX3NldChFaW5hX0xpc3QqIGxhbmd1YWdlcykKICAgICAgICAgRWluYV9MaXN0KiBsOwog
ICAgICAgICB2b2lkKiBkYXRhOwogICAgICAgICBFSU5BX0xJU1RfRk9SRUFDSChsYW5ndWFnZXMs
IGwsIGRhdGEpCi0gICAgICAgICAgICBwcmVmZXJyZWRMYW5ndWFnZXMuYXBwZW5kKFN0cmluZzo6
ZnJvbVVURjgoc3RhdGljX2Nhc3Q8Y2hhcio+KGRhdGEpKS5sb3dlcigpLnJlcGxhY2UoIl8iLCAi
LSIpKTsKKyAgICAgICAgICAgIHByZWZlcnJlZExhbmd1YWdlcy5hcHBlbmQoU3RyaW5nOjpmcm9t
VVRGOChzdGF0aWNfY2FzdDxjaGFyKj4oZGF0YSkpLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCku
cmVwbGFjZSgiXyIsICItIikpOwogICAgIH0KIAogICAgIFdlYkNvcmU6Om92ZXJyaWRlVXNlclBy
ZWZlcnJlZExhbmd1YWdlcyhwcmVmZXJyZWRMYW5ndWFnZXMpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcAppbmRleCBkNmY1
ZTEzODVlNWQ4OWUzNDBlYzQyNzAxNDI0MDYzZTVhYzkxOTVhLi5hZjZkODcyNzY0YTliMTJiZWY2
MjFhYTM3ZDc0OTI3NTZiNzYxZDRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcApAQCAtOTY4LDcgKzk2OCw3IEBAIHZv
aWQgd2Via2l0X3dlYl9jb250ZXh0X3NldF9wcmVmZXJyZWRfbGFuZ3VhZ2VzKFdlYktpdFdlYkNv
bnRleHQqIGNvbnRleHQsIGNvbnN0CiAKICAgICBWZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXM7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGxhbmd1YWdlTGlzdFtpXTsgKytpKQotICAgICAgICBsYW5n
dWFnZXMuYXBwZW5kKFN0cmluZzo6ZnJvbVVURjgobGFuZ3VhZ2VMaXN0W2ldKS5sb3dlcigpLnJl
cGxhY2UoIl8iLCAiLSIpKTsKKyAgICAgICAgbGFuZ3VhZ2VzLmFwcGVuZChTdHJpbmc6OmZyb21V
VEY4KGxhbmd1YWdlTGlzdFtpXSkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKS5yZXBsYWNlKCJf
IiwgIi0iKSk7CiAKICAgICBXZWJDb3JlOjpvdmVycmlkZVVzZXJQcmVmZXJyZWRMYW5ndWFnZXMo
bGFuZ3VhZ2VzKTsKICAgICBXZWJDb3JlOjpsYW5ndWFnZURpZENoYW5nZSgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbkluZm9TdG9yZS5jcHAKaW5k
ZXggNjVlMzg0MjQ2ODgwMDM2MGQ3NDQxNWI3NjAzMzYxZTA1YzVjOGE2Mi4uOGE5OGM2MjAxYWQ3
OGU3NzYxMWY2ODcwZGU3Mjc0OGU2YzJiZTFhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUuY3BwCkBAIC0xMzgsOSArMTM4LDcg
QEAgUGx1Z2luTW9kdWxlSW5mbyBQbHVnaW5JbmZvU3RvcmU6OmZpbmRQbHVnaW5Gb3JFeHRlbnNp
b24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24KICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAg
ICAgIGZvciAoY29uc3QgYXV0byYgbWltZUNsYXNzSW5mbyA6IHBsdWdpbi5pbmZvLm1pbWVzKSB7
Ci0gICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXh0ZW5zaW9ucyA9IG1pbWVDbGFz
c0luZm8uZXh0ZW5zaW9uczsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHN0ZDo6Zmlu
ZChleHRlbnNpb25zLmJlZ2luKCksIGV4dGVuc2lvbnMuZW5kKCksIGV4dGVuc2lvbikgIT0gZXh0
ZW5zaW9ucy5lbmQoKSkgeworICAgICAgICAgICAgaWYgKG1pbWVDbGFzc0luZm8uZXh0ZW5zaW9u
cy5jb250YWlucyhleHRlbnNpb24pKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgZm91bmQgYSBz
dXBwb3J0ZWQgZXh0ZW5zaW9uLCBzZXQgdGhlIGNvcnJlY3QgTUlNRSB0eXBlLgogICAgICAgICAg
ICAgICAgIG1pbWVUeXBlID0gbWltZUNsYXNzSW5mby50eXBlOwogICAgICAgICAgICAgICAgIHJl
dHVybiBwbHVnaW47CkBAIC0xNjAsMTEgKzE1OCwxMSBAQCBzdGF0aWMgaW5saW5lIFN0cmluZyBw
YXRoRXh0ZW5zaW9uKGNvbnN0IFVSTCYgdXJsKQogICAgICAgICBpZiAoZXh0ZW5zaW9uUG9zICE9
IG5vdEZvdW5kKQogICAgICAgICAgICAgZXh0ZW5zaW9uID0gZmlsZW5hbWUuc3Vic3RyaW5nKGV4
dGVuc2lvblBvcyArIDEpOwogICAgIH0KLSAgICAKLSAgICByZXR1cm4gZXh0ZW5zaW9uOworICAg
IHJldHVybiBleHRlbnNpb24uY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKIH0KIAogI2lmICFQ
TEFURk9STShDT0NPQSkKKwogUGx1Z2luTW9kdWxlTG9hZFBvbGljeSBQbHVnaW5JbmZvU3RvcmU6
OmRlZmF1bHRMb2FkUG9saWN5Rm9yUGx1Z2luKGNvbnN0IFBsdWdpbk1vZHVsZUluZm8mKQogewog
ICAgIHJldHVybiBQbHVnaW5Nb2R1bGVMb2FkTm9ybWFsbHk7CkBAIC0xOTAsNyArMTg4LDcgQEAg
UGx1Z2luTW9kdWxlSW5mbyBQbHVnaW5JbmZvU3RvcmU6OmZpbmRQbHVnaW4oU3RyaW5nJiBtaW1l
VHlwZSwgY29uc3QgVVJMJiB1cmwsIFAKICAgICB9CiAKICAgICAvLyBOZXh0LCBjaGVjayBpZiBh
bnkgcGx1Zy1pbnMgY2xhaW0gdG8gc3VwcG9ydCB0aGUgVVJMIGV4dGVuc2lvbi4KLSAgICBTdHJp
bmcgZXh0ZW5zaW9uID0gcGF0aEV4dGVuc2lvbih1cmwpLmxvd2VyKCk7CisgICAgU3RyaW5nIGV4
dGVuc2lvbiA9IHBhdGhFeHRlbnNpb24odXJsKTsKICAgICBpZiAoIWV4dGVuc2lvbi5pc051bGwo
KSAmJiBtaW1lVHlwZS5pc0VtcHR5KCkpIHsKICAgICAgICAgUGx1Z2luTW9kdWxlSW5mbyBwbHVn
aW4gPSBmaW5kUGx1Z2luRm9yRXh0ZW5zaW9uKGV4dGVuc2lvbiwgbWltZVR5cGUsIGFsbG93ZWRQ
bHVnaW5UeXBlcyk7CiAgICAgICAgIGlmICghcGx1Z2luLnBhdGguaXNOdWxsKCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IDczMTRhMzgwMmE3ZDIxZTM0
N2FjNmFiN2FlYjRhZGNmMTlkZjY1YWEuLjcxNjUxZWFhZWY1M2NkNmQwYjllMTA3ZWEwNzUwODQ1
ODVmOTNmN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBA
IC0xODYzLDcgKzE4NjMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZmluZFBsdWdpbihjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCB1aW50MzJfdCBwcm9jZXNzVHlwZSwgY29ucwogCiAgICAgTUVTU0FH
RV9DSEVDS19VUkwodXJsU3RyaW5nKTsKIAotICAgIG5ld01pbWVUeXBlID0gbWltZVR5cGUubG93
ZXIoKTsKKyAgICBuZXdNaW1lVHlwZSA9IG1pbWVUeXBlLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNl
KCk7CiAgICAgcGx1Z2luTG9hZFBvbGljeSA9IFBsdWdpbk1vZHVsZUxvYWROb3JtYWxseTsKIAog
ICAgIFBsdWdpbkRhdGE6OkFsbG93ZWRQbHVnaW5UeXBlcyBhbGxvd2VkUGx1Z2luVHlwZXMgPSBh
bGxvd09ubHlBcHBsaWNhdGlvblBsdWdpbnMgPyBQbHVnaW5EYXRhOjpPbmx5QXBwbGljYXRpb25Q
bHVnaW5zIDogUGx1Z2luRGF0YTo6QWxsUGx1Z2luczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCmluZGV4IDYyYjg1ZWNlYTA1ZDEzODEyNjBmYjA2NjlhZGY4
ZGNjYjFhMjBkNzAuLmJmM2NlNWQ4ZGZlYzgyMWEyMTAwODljNTY4YzZlZTBiYzc4ZmJiOGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAtOTEzLDkg
KzkxMyw5IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNDT1JTRW5h
YmxlZChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVz
c2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNDT1JTRW5hYmxlZCh1cmxTY2hl
bWUpKTsKIH0KIAotSGFzaFNldDxTdHJpbmc+JiBXZWJQcm9jZXNzUG9vbDo6Z2xvYmFsVVJMU2No
ZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkKK0hhc2hTZXQ8U3RyaW5nLCBBU0NJSUNh
c2VJbnNlbnNpdGl2ZUhhc2g+JiBXZWJQcm9jZXNzUG9vbDo6Z2xvYmFsVVJMU2NoZW1lc1dpdGhD
dXN0b21Qcm90b2NvbEhhbmRsZXJzKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFz
aFNldDxTdHJpbmc+PiBzZXQ7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8U3Ry
aW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+PiBzZXQ7CiAgICAgcmV0dXJuIHNldDsKIH0K
IApAQCAtOTI0LDEwICs5MjQsOSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3Rlckdsb2Jh
bFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhjb25zdAogICAgIGlmICgh
dXJsU2NoZW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmcgc2NoZW1lTG93ZXIgPSB1
cmxTY2hlbWUubG93ZXIoKTsKLSAgICBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29s
SGFuZGxlcnMoKS5hZGQoc2NoZW1lTG93ZXIpOworICAgIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3Vz
dG9tUHJvdG9jb2xIYW5kbGVycygpLmFkZCh1cmxTY2hlbWUpOwogICAgIGZvciAoYXV0byogcHJv
Y2Vzc1Bvb2wgOiBhbGxQcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnJlZ2lz
dGVyU2NoZW1lRm9yQ3VzdG9tUHJvdG9jb2woc2NoZW1lTG93ZXIpOworICAgICAgICBwcm9jZXNz
UG9vbC0+cmVnaXN0ZXJTY2hlbWVGb3JDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUpOwogfQogCiB2
b2lkIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0
b21Qcm90b2NvbEhhbmRsZXJzKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpAQCAtOTM1LDEwICs5
MzQsOSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNI
YXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbgogICAgIGlmICghdXJsU2NoZW1lKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBTdHJpbmcgc2NoZW1lTG93ZXIgPSB1cmxTY2hlbWUubG93ZXIo
KTsKLSAgICBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKS5yZW1v
dmUoc2NoZW1lTG93ZXIpOworICAgIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xI
YW5kbGVycygpLnJlbW92ZSh1cmxTY2hlbWUpOwogICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wg
OiBhbGxQcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnVucmVnaXN0ZXJTY2hl
bWVGb3JDdXN0b21Qcm90b2NvbChzY2hlbWVMb3dlcik7CisgICAgICAgIHByb2Nlc3NQb29sLT51
bnJlZ2lzdGVyU2NoZW1lRm9yQ3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKIH0KIAogI2lmIEVO
QUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUG9vbC5oCmluZGV4IGZmMDZjZjc1NTM1MDVjNTRlZGRhNjliZmU4NGEzODcyZmFhN2QwMjIu
LmI3Yzc1ZDYwNTcxNzliZWMwOGY2YWVjNjAyZDMxOWU4N2M2MmU1ODYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCkBAIC0zMTcsNyArMzE3LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgcmVnaXN0ZXJTY2hlbWVGb3JDdXN0b21Qcm90b2NvbChjb25zdCBTdHJpbmcm
KTsKICAgICB2b2lkIHVucmVnaXN0ZXJTY2hlbWVGb3JDdXN0b21Qcm90b2NvbChjb25zdCBTdHJp
bmcmKTsKIAotICAgIHN0YXRpYyBIYXNoU2V0PFN0cmluZz4mIGdsb2JhbFVSTFNjaGVtZXNXaXRo
Q3VzdG9tUHJvdG9jb2xIYW5kbGVycygpOworICAgIHN0YXRpYyBIYXNoU2V0PFN0cmluZywgQVND
SUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2Nv
bEhhbmRsZXJzKCk7CiAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hh
dmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMoY29uc3QgU3RyaW5nJik7CiAgICAgc3RhdGljIHZv
aWQgdW5yZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVy
cyhjb25zdCBTdHJpbmcmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAKaW5kZXggMjQ4Mzk4
MzJjMDU3YWE1ZWJmYmM3ODI4ZmY5MWZhZTk3MjUyODAzNy4uYjliMjk2Y2UxYmU4NmRkZTI3NmQ3
ZjI2NDQzMGMyNTA2OGZhOTk0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwCkBAIC02Mzgs
NyArNjM4LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbjo6aW5pdGlhbGl6ZShjb25zdCBQYXJhbWV0
ZXJzJiBwYXJhbWV0ZXJzKQogCiAjaWYgUExVR0lOX0FSQ0hJVEVDVFVSRShNQUMpCiAgICAgICAg
IGlmIChtX3BsdWdpbk1vZHVsZS0+cGx1Z2luUXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtz
OjpXYW50c0xvd2VyY2FzZVBhcmFtZXRlck5hbWVzKSkKLSAgICAgICAgICAgIHBhcmFtZXRlck5h
bWUgPSBwYXJhbWV0ZXJOYW1lLmxvd2VyKCk7CisgICAgICAgICAgICBwYXJhbWV0ZXJOYW1lID0g
cGFyYW1ldGVyTmFtZS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOwogI2VuZGlmCiAKICAgICAg
ICAgcGFyYW1OYW1lcy5hcHBlbmQocGFyYW1ldGVyTmFtZS51dGY4KCkpOwpAQCAtNjc1LDcgKzY3
NSw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW46OmluaXRpYWxpemUoY29uc3QgUGFyYW1ldGVycyYg
cGFyYW1ldGVycykKICAgICBpZiAobV9wbHVnaW5Nb2R1bGUtPnBsdWdpblF1aXJrcygpLmNvbnRh
aW5zKFBsdWdpblF1aXJrczo6TWFrZU9wYXF1ZVVubGVzc1RyYW5zcGFyZW50U2lsdmVybGlnaHRC
YWNrZ3JvdW5kQXR0cmlidXRlRXhpc3RzKSkgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHBhcmFtZXRlcnMubmFtZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGlmIChlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwYXJhbWV0ZXJzLm5hbWVzW2ldLCAiYmFja2dyb3Vu
ZCIpKSB7Ci0gICAgICAgICAgICAgICAgc2V0SXNUcmFuc3BhcmVudChpc1RyYW5zcGFyZW50U2ls
dmVybGlnaHRCYWNrZ3JvdW5kVmFsdWUocGFyYW1ldGVycy52YWx1ZXNbaV0ubG93ZXIoKSkpOwor
ICAgICAgICAgICAgICAgIHNldElzVHJhbnNwYXJlbnQoaXNUcmFuc3BhcmVudFNpbHZlcmxpZ2h0
QmFja2dyb3VuZFZhbHVlKHBhcmFtZXRlcnMudmFsdWVzW2ldLmNvbnZlcnRUb0FTQ0lJTG93ZXJj
YXNlKCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJGcmFtZUxvYWRlckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAppbmRleCA5OGZlOTk4YjAxYWU0YWFm
MDA2YzFlMWVkMTcyZGUwNDgwNjEyOGQzLi5iODlkN2ExYjM3ZTMwM2M1YWE0OTU2M2NlODZhZTJh
ZGY0ZTllYjgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcApAQCAtMTUwOCwx
NCArMTUwOCwxMSBAQCBQYXNzUmVmUHRyPFdpZGdldD4gV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNy
ZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYgcAogCiBzdGF0aWMgYm9vbCBwbHVn
aW5TdXBwb3J0c0V4dGVuc2lvbihjb25zdCBQbHVnaW5EYXRhJiBwbHVnaW5EYXRhLCBjb25zdCBT
dHJpbmcmIGV4dGVuc2lvbikKIHsKLSAgICBBU1NFUlQoZXh0ZW5zaW9uLmxvd2VyKCkgPT0gZXh0
ZW5zaW9uKTsKLQorICAgIEFTU0VSVChleHRlbnNpb24uY29udmVydFRvQVNDSUlMb3dlcmNhc2Uo
KSA9PSBleHRlbnNpb24pOwogICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiBtaW1lczsKICAgICBW
ZWN0b3I8c2l6ZV90PiBtaW1lUGx1Z2luSW5kaWNlczsKICAgICBwbHVnaW5EYXRhLmdldFdlYlZp
c2libGVNaW1lc0FuZFBsdWdpbkluZGljZXMobWltZXMsIG1pbWVQbHVnaW5JbmRpY2VzKTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1pbWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNv
bnN0IE1pbWVDbGFzc0luZm8mIG1pbWVDbGFzc0luZm8gPSBtaW1lc1tpXTsKLQorICAgIGZvciAo
YXV0byYgbWltZUNsYXNzSW5mbyA6IG1pbWVzKSB7CiAgICAgICAgIGlmIChtaW1lQ2xhc3NJbmZv
LmV4dGVuc2lvbnMuY29udGFpbnMoZXh0ZW5zaW9uKSkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KQEAgLTE1MjQsNDIgKzE1MjEsMzcgQEAgc3RhdGljIGJvb2wgcGx1Z2luU3VwcG9y
dHNFeHRlbnNpb24oY29uc3QgUGx1Z2luRGF0YSYgcGx1Z2luRGF0YSwgY29uc3QgU3RyaW5nJgog
CiBPYmplY3RDb250ZW50VHlwZSBXZWJGcmFtZUxvYWRlckNsaWVudDo6b2JqZWN0Q29udGVudFR5
cGUoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGVJbikKIHsKLSAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgYmUgbWVyZ2VkIHdpdGggV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRl
ZmF1bHRPYmplY3RDb250ZW50VHlwZSB3aGVuIHRoZSBwbHVnaW4gY29kZQotICAgIC8vIGlzIGNv
bnNvbGlkYXRlZC4KKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgZXZlbnR1YWxseSBiZSBtZXJn
ZWQgd2l0aCBXZWJDb3JlOjpGcmFtZUxvYWRlcjo6ZGVmYXVsdE9iamVjdENvbnRlbnRUeXBlLgog
CiAgICAgU3RyaW5nIG1pbWVUeXBlID0gbWltZVR5cGVJbjsKICAgICBpZiAobWltZVR5cGUuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIFN0cmluZyBleHRlbnNpb24gPSB1cmwucGF0aCgpLnN1YnN0cmlu
Zyh1cmwucGF0aCgpLnJldmVyc2VGaW5kKCcuJykgKyAxKS5sb3dlcigpOworICAgICAgICBTdHJp
bmcgcGF0aCA9IHVybC5wYXRoKCk7CisgICAgICAgIGF1dG8gZG90UG9zaXRpb24gPSBwYXRoLnJl
dmVyc2VGaW5kKCcuJyk7CisgICAgICAgIGlmIChkb3RQb3NpdGlvbiA9PSBub3RGb3VuZCkKKyAg
ICAgICAgICAgIHJldHVybiBPYmplY3RDb250ZW50RnJhbWU7CisgICAgICAgIFN0cmluZyBleHRl
bnNpb24gPSBwYXRoLnN1YnN0cmluZyhkb3RQb3NpdGlvbiArIDEpLmNvbnZlcnRUb0FTQ0lJTG93
ZXJjYXNlKCk7CiAKICAgICAgICAgLy8gVHJ5IHRvIGd1ZXNzIHRoZSBNSU1FIHR5cGUgZnJvbSB0
aGUgZXh0ZW5zaW9uLgogICAgICAgICBtaW1lVHlwZSA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldE1J
TUVUeXBlRm9yRXh0ZW5zaW9uKGV4dGVuc2lvbik7Ci0KICAgICAgICAgaWYgKG1pbWVUeXBlLmlz
RW1wdHkoKSkgewogICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUncyBhIHBsdWctaW4gYXJv
dW5kIHRoYXQgY2FuIGhhbmRsZSB0aGUgZXh0ZW5zaW9uLgogICAgICAgICAgICAgaWYgKFdlYlBh
Z2UqIHdlYlBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpIHsKICAgICAgICAgICAgICAgICBpZiAocGx1
Z2luU3VwcG9ydHNFeHRlbnNpb24od2ViUGFnZS0+Y29yZVBhZ2UoKS0+cGx1Z2luRGF0YSgpLCBl
eHRlbnNpb24pKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0Q29udGVudE5ldHNj
YXBlUGx1Z2luOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdENvbnRl
bnRGcmFtZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtaW1lVHlwZS5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiBPYmplY3RDb250ZW50RnJhbWU7Ci0KLSAgICBib29sIHBsdWdJblN1
cHBvcnRzTUlNRVR5cGUgPSBmYWxzZTsKLSAgICBpZiAoV2ViUGFnZSogd2ViUGFnZSA9IG1fZnJh
bWUtPnBhZ2UoKSkgewotICAgICAgICBjb25zdCBQbHVnaW5EYXRhJiBwbHVnaW5EYXRhID0gd2Vi
UGFnZS0+Y29yZVBhZ2UoKS0+cGx1Z2luRGF0YSgpOwotICAgICAgICBpZiAocGx1Z2luRGF0YS5z
dXBwb3J0c01pbWVUeXBlKG1pbWVUeXBlLCBQbHVnaW5EYXRhOjpBbGxQbHVnaW5zKSAmJiB3ZWJG
cmFtZSgpLT5jb3JlRnJhbWUoKS0+bG9hZGVyKCkuc3ViZnJhbWVMb2FkZXIoKS5hbGxvd1BsdWdp
bnMoKSkKLSAgICAgICAgICAgIHBsdWdJblN1cHBvcnRzTUlNRVR5cGUgPSB0cnVlOwotICAgICAg
ICBlbHNlIGlmIChwbHVnaW5EYXRhLnN1cHBvcnRzTWltZVR5cGUobWltZVR5cGUsIFBsdWdpbkRh
dGE6Ok9ubHlBcHBsaWNhdGlvblBsdWdpbnMpKQotICAgICAgICAgICAgcGx1Z0luU3VwcG9ydHNN
SU1FVHlwZSA9IHRydWU7Ci0gICAgfQotICAgIAogICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojpp
c1N1cHBvcnRlZEltYWdlTUlNRVR5cGUobWltZVR5cGUpKQogICAgICAgICByZXR1cm4gT2JqZWN0
Q29udGVudEltYWdlOwogCi0gICAgaWYgKHBsdWdJblN1cHBvcnRzTUlNRVR5cGUpCi0gICAgICAg
IHJldHVybiBPYmplY3RDb250ZW50TmV0c2NhcGVQbHVnaW47CisgICAgaWYgKFdlYlBhZ2UqIHdl
YlBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpIHsKKyAgICAgICAgYXV0byBhbGxvd2VkUGx1Z2luVHlw
ZXMgPSB3ZWJGcmFtZSgpLT5jb3JlRnJhbWUoKS0+bG9hZGVyKCkuc3ViZnJhbWVMb2FkZXIoKS5h
bGxvd1BsdWdpbnMoKQorICAgICAgICAgICAgPyBQbHVnaW5EYXRhOjpBbGxQbHVnaW5zIDogUGx1
Z2luRGF0YTo6T25seUFwcGxpY2F0aW9uUGx1Z2luczsKKyAgICAgICAgaWYgKHdlYlBhZ2UtPmNv
cmVQYWdlKCktPnBsdWdpbkRhdGEoKS5zdXBwb3J0c01pbWVUeXBlKG1pbWVUeXBlLCBhbGxvd2Vk
UGx1Z2luVHlwZXMpKQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdENvbnRlbnROZXRzY2FwZVBs
dWdpbjsKKyAgICB9CiAKICAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWROb25J
bWFnZU1JTUVUeXBlKG1pbWVUeXBlKSkKICAgICAgICAgcmV0dXJuIE9iamVjdENvbnRlbnRGcmFt
ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270748</attachid>
            <date>2016-02-05 09:41:20 -0800</date>
            <delta_ts>2016-02-05 09:58:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-153905-20160205094057.patch</filename>
            <type>text/plain</type>
            <size>100373</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk2MTc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
ZDgxYjRjMDZiN2I3NTYzZjA2MjdjYjdiMmY0M2EzNTM2MTFkYmJkLi4zMDRmODkzNmFhZGI3ZWY2
NWY2MWUzZDFhZDc1MGYzYjgwNzExNTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAxNi0wMi0wNSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgRmluaXNoIGF1ZGl0aW5nIGNhbGwgc2l0ZXMgb2YgdXBwZXIoKSBhbmQgbG93ZXIo
KSwgZWxpbWluYXRlIG1hbnksIGFuZCByZW5hbWUgdGhlIGZ1bmN0aW9ucworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzOTA1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBydW50aW1lL0ludGxPYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDOjpjYW5vbmljYWxMYW5nVGFnKTogVXNlIGNvbnZlclRvQVNDSUlV
cHBlcmNhc2Ugb24gdGhlIGxhbmd1YWdlIHRhZy4KKworICAgICAgICAqIHJ1bnRpbWUvU3RyaW5n
UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVG9Mb3dlckNhc2Up
OiBUd2VhayBzdHlsZSBhbmQgdXBkYXRlIGZvciBuYW1lIGNoYW5nZS4KKyAgICAgICAgKEpTQzo6
c3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2UpOiBEaXR0by4KKwogMjAxNi0wMi0wNCAgSm9zZXBo
IFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6
IEluc3BlY3RvclRpbWVsaW5lQWdlbnQgZG9lc24ndCBuZWVkIHRvIHJlY29tcGlsZSBmdW5jdGlv
bnMgYmVjYXVzZSBpdCBub3cgdXNlcyB0aGUgc2FtcGxpbmcgcHJvZmlsZXIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggOTA5NzYx
Mzc0MmE1YWFmMTgwZjcxZGNiMmJiNTE3MGI4MzBlOTc3ZS4uNTBjMDFlY2UzNTQ5Nzk4N2Y3YzYx
NzRjMDUwNWYzOWU1NGIyNTMyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAxNi0wMi0wNSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgRmluaXNoIGF1ZGl0aW5nIGNh
bGwgc2l0ZXMgb2YgdXBwZXIoKSBhbmQgbG93ZXIoKSwgZWxpbWluYXRlIG1hbnksIGFuZCByZW5h
bWUgdGhlIGZ1bmN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTUzOTA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiB3dGYvdGV4dC9BdG9taWNTdHJpbmcuY3BwOgorICAgICAgICAoV1RGOjpBdG9t
aWNTdHJpbmc6Omxvd2VyKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvdGV4dC9BdG9taWNTdHJp
bmcuaDogRGVsZXRlZCB0aGUgbG93ZXIgZnVuY3Rpb24uCisKKyAgICAgICAgKiB3dGYvdGV4dC9T
dHJpbmdJbXBsLmNwcDoKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y29udmVydFRvTG93ZXJj
YXNlV2l0aG91dExvY2FsZSk6IFJlbmFtZWQgZnJvbSBsb3dlci4KKyAgICAgICAgKFdURjo6U3Ry
aW5nSW1wbDo6Y29udmVydFRvVXBwZXJjYXNlV2l0aG91dExvY2FsZSk6IFJlbmFtZWQgZnJvbSB1
cHBlci4KKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y29udmVydFRvTG93ZXJjYXNlV2l0aExv
Y2FsZSk6IFJlbmFtZWQgZnJvbSBsb3dlci4KKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y29u
dmVydFRvVXBwZXJjYXNlV2l0aExvY2FsZSk6IFJlbmFtZWQgZnJvbSB1cHBlci4KKyAgICAgICAg
KFdURjo6U3RyaW5nSW1wbDo6Zm9sZENhc2UpOiBBZGRlZCBmYXN0IGNhc2VzIGZvciBBU0NJSSBz
aW5jZSB0aGlzIGlzCisgICAgICAgIG5vdyB1c2VkIGluIHNvbWUgbW9yZS1wZXJmb3JtYW5jZS1j
cml0aWNhbCBjb2RlLgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDogUmVuYW1lZCBs
b3dlciBhbmQgdXBwZXIuCisKKyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuY3BwOgorICAg
ICAgICAoV1RGOjpTdHJpbmc6OmNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGUpOiBSZW5h
bWVkIGZyb20gbG93ZXIuCisgICAgICAgIChXVEY6OlN0cmluZzo6Y29udmVydFRvVXBwZXJjYXNl
V2l0aG91dExvY2FsZSk6IFJlbmFtZWQgZnJvbSB1cHBlci4KKyAgICAgICAgKFdURjo6U3RyaW5n
Ojpjb252ZXJ0VG9Mb3dlcmNhc2VXaXRoTG9jYWxlKTogUmVuYW1lZCBmcm9tIGxvd2VyLgorICAg
ICAgICAoV1RGOjpTdHJpbmc6OmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhMb2NhbGUpOiBSZW5hbWVk
IGZyb20gdXBwZXIuCisgICAgICAgICogd3RmL3RleHQvV1RGU3RyaW5nLmg6IFJlbmFtZWQgbG93
ZXIgYW5kIHVwcGVyLiBSZW1vdmVkIHVubmVlZGVkIGNvbW1lbnQuCisKIDIwMTYtMDItMDMgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIENvbnZlcnQgYW5vdGhlciBi
YXRjaCBvZiBTdHJpbmc6Omxvd2VyIGNhbGxzaXRlcyB0byBzb21ldGhpbmcgYmV0dGVyLCB0eXBp
Y2FsbHkgY29udmVydFRvQVNDSUlMb3dlcmNhc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkN2ZiMjIzNzg0NTgy
MTg0MTVmNGNhN2ZiYWQzNjFiMjE3MGFmYzk2Li40ZDgwN2E1YTEyOTI0YjMyMmU5Mzk1OWY2ZjRh
MTBiYzJmMTdjMGQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMwIEBACisyMDE2LTAyLTA1ICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBGaW5pc2ggYXVkaXRpbmcg
Y2FsbCBzaXRlcyBvZiB1cHBlcigpIGFuZCBsb3dlcigpLCBlbGltaW5hdGUgbWFueSwgYW5kIHJl
bmFtZSB0aGUgZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTM5MDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTb3VyY2U6OmlzVHlwZVN1cHBvcnRlZCk6IFVzZSBjb252ZXJ0VG9B
U0NJSUxvd2VyY2FzZSBvbiBNSU1FIHR5cGUuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9i
amVjdDo6c2VsZWN0VGV4dCk6IFVzZSBuZXcgbmFtZXMgZm9yIGxvd2VyIGFuZCB1cHBlci4gQWxz
bworICAgICAgICB0d2Vha2VkIHN0eWxlIGEgdGlueSBiaXQgYW5kIHVzZWQgdV90b3VwcGVyIHJh
dGhlciB0aGFuIGNvbnZlcnRpbmcgYW4gZW50aXJlCisgICAgICAgIHN0cmluZyB0byB1cHBlcmNh
c2UuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OmFkZEltYWdlRWxlbWVudEJ5Q2FzZUZvbGRlZFVzZW1hcCk6IFJlbmFtZWQgdG8gcmVm
bGVjdCB0aGUgdXNlCisgICAgICAgIG9mIGNhc2UgZm9sZGluZyByYXRoZXIgdGhhbiBsb3dlcmNh
c2luZy4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZW1vdmVJbWFnZUVsZW1lbnRCeUNh
c2VGb2xkZWRVc2VtYXApOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjppbWFn
ZUVsZW1lbnRCeUNhc2VGb2xkZWRVc2VtYXApOiBEaXR0by4KKyAgICAgICAgKiBkb20vRG9jdW1l
bnQuaDogRGl0dG8uCisgICAgICAgICogZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeUNhc2VGb2xkZWRN
YXBOYW1lKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE9yZGVyZWRNYXA6Omdl
dEVsZW1lbnRCeUNhc2VGb2xkZWRVc2VtYXApOiBEaXR0by4KKyAgICAgICAgKiBkb20vRG9jdW1l
bnRPcmRlcmVkTWFwLmg6IERpdHRvLgorCisgICAgICAgICogZG9tL1RyZWVTY29wZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6OmdldEltYWdlTWFwKTogUmVtb3ZlZCB1bm5lZWRl
ZCBzcGVjaWFsIGNhc2UgZm9yIG51bGwgc3RyaW5nLgorICAgICAgICBTaW1wbGlmaWVkIGxvZ2lj
IGZvciBjYXNlcyB3aGVyZSB0aGUgVVJMIGRvZXMgbm90IGhhdmUgYSAiIyIgY2hhcmFjdGVyIGlu
IGl0LgorICAgICAgICBVc2UgY2FzZSBmb2xkaW5nIGluc3RlYWQgb2YgbG93ZXJjYXNlLgorCisg
ICAgICAgICogZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tOgorICAgICAgICAoSFRNTENv
bnZlcnRlcjo6X3Byb2Nlc3NUZXh0KTogUmVtb3ZlZCB1bm5lZGVkIHNwZWNpYWwgY2FzZSBmb3Ig
dGhlIGVtcHR5IHN0cmluZy4KKyAgICAgICAgVXNlIG1ha0NhcGl0YWxpemVkIGluc3RlYWQgb2Yg
Q29jb2EgZnVuY3Rpb24gZm9yICJjYXBpdGFsaXplIi4gVXNlIHVwcGVyIGFuZCBsb3dlcgorICAg
ICAgICBmdW5jdGlvbnMgYnkgdGhlaXIgbmV3IG5hbWVzLgorCisgICAgICAgICogaHRtbC9IVE1M
SW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OnBh
cnNlQXR0cmlidXRlKTogVXNlIGNhc2UgZm9sZGluZyBpbnN0ZWFkIG9mCisgICAgICAgIGxvd2Vy
YXNpbmcgZm9yIHRoZSB1c2VtYXAgYXR0cmlidXRlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElt
YWdlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1M
SW1hZ2VFbGVtZW50OjpyZW1vdmVkRnJvbSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEltYWdlRWxlbWVudDo6bWF0Y2hlc0Nhc2VGb2xkZWRVc2VtYXApOiBEaXR0by4KKyAgICAgICAg
KiBodG1sL0hUTUxJbWFnZUVsZW1lbnQuaDogUmVuYW1lIHNpbmNlIHVzZW1hcCBpcyBjYXNlIGZv
bGRlZCBub3csIG5vdCBsb3dlcmNhc2VkLgorCisgICAgICAgICogaHRtbC9IVE1MTWFwRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFwRWxlbWVudDo6aW1hZ2VFbGVtZW50KTog
VXNlIGNhc2UgZm9sZGluZyBpbnN0ZWFkIG9mIGxvd2VyY2FzaW5nCisgICAgICAgIGZvciB1c2Vt
YXAuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFwRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOiBE
aXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL0xhbmd1YWdlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNhbm9uaWNhbExhbmd1YWdlSWRlbnRpZmllcik6IFVzZSBjb252ZXJ0VG9BU0NJSUxvd2Vy
Y2FzZSBmb3IgbGFuZ3VhZ2UgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6OmluZGV4T2ZCZXN0TWF0
Y2hpbmdMYW5ndWFnZUluTGlzdCk6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1
enpTaGFwZXI6OnNoYXBlSGFyZkJ1enpSdW5zKTogVXNlIG5ldyBuYW1lIGZvciB0aGUgdXBwZXIg
ZnVuY3Rpb24uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnBhcnNlQ29udGVudFR5cGVPcHRpb25zSGVhZGVyKTogVXNlIGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlIGluc3RlYWQKKyAgICAgICAgb2YgbG93ZXJjYXNp
bmcgdG8gY2hlY2sgZm9yIGEgc3BlY2lmaWMgaGVhZGVyIHZhbHVlLgorCisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJldHJpZXZl
S2V5VmFsdWVQYWlycyk6IFVzZSBjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSBmb3IgTUlNRSBoZWFk
ZXIgbmFtZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1JTUVIZWFkZXI6OnBhcnNlQ29udGVudFRyYW5z
ZmVyRW5jb2RpbmcpOiBVc2UgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UKKyAgICAgICAg
aW5zdGVhZCBvZiBsb3dlcmNhc2luZy4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2Yv
UmVzb3VyY2VIYW5kbGVDRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphbGxvd3NBbnlIVFRQ
U0NlcnRpZmljYXRlSG9zdHMpOiBNYWtlIHRoaXMgaGFzaCBBU0NJSSBjYXNlLWluc2Vuc2l0aXZl
LgorICAgICAgICAoV2ViQ29yZTo6Y2xpZW50Q2VydGlmaWNhdGVzKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlQ0ZVUkxDb25uZWN0aW9uKTogUmVtb3Zl
IGNhbGwgdG8gbG93ZXIgc2luY2UgdGhlCisgICAgICAgIHNldCBpcyBub3cgQVNDSUkgY2FzZS1p
bnNlbnNpdGl2ZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzZXRIb3N0QWxs
b3dzQW55SFRUUFNDZXJ0aWZpY2F0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VIYW5kbGU6OnNldENsaWVudENlcnRpZmljYXRlKTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpn
ZXROZXRzY2FwZUNvb2tpZUZvcm1hdCk6IFVzZSBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZSBpbnN0ZWFkIG9mCisgICAgICAgIGxvd2VyY2FzaW5nLgorCisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9jdXJsL011bHRpcGFydEhhbmRsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNdWx0
aXBhcnRIYW5kbGU6OmRpZFJlY2VpdmVSZXNwb25zZSk6IFVzZSBjb252ZXJ0VG9BU0NJSUxvd2Vy
Y2FzZSB0bworICAgICAgICBtYWtlIGEgTUlNRSB0eXBlIGxvd2VyY2FzZS4KKworICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNldEhvc3RBbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRl
KTogUmVtb3ZlZCB1bm5lZWRlZAorICAgICAgICBjb252ZXJzaW9uIHRvIGxvd2VyY2FzZSBub3cg
dGhhdCB0aGUgc2V0IGlzIEFTQ0lJIGNhc2UtaW5zZW5zaXRpdmUuCisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZUhhbmRsZTo6c2V0Q2xpZW50Q2VydGlmaWNhdGUpOiBSZW1vdmVkIGNvZGUgdGhh
dCBwb3B1bGF0ZXMgYSBtYXAKKyAgICAgICAgdGhhdCBpcyB0aGVuIG5ldmVyIHVzZWQgZm9yIGFu
eXRoaW5nLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxl
TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoZWFkZXJDYWxsYmFjayk6IFVzZSBjb252
ZXJ0VG9BU0NJSUxvd2VyY2FzZSBmb3IgTUlNRSB0eXBlLgorCisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9jdXJsL1NTTEhhbmRsZS5jcHA6IE1hZGUgaGFzaCBtYXBzIGtleWVkIGJ5IGhvc3Qg
bmFtZXMKKyAgICAgICAgQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZS4KKyAgICAgICAgKFdlYkNvcmU6
OmFkZEFsbG93ZWRDbGllbnRDZXJ0aWZpY2F0ZSk6IFJlbW92ZWQgbG93ZXJjYXNpbmcgc2luY2Ug
dGhlIG1hcCBpdHNlbGYKKyAgICAgICAgaXMgbm93IEFTQ0lJIGNhc2UgaW5zZW5zaXR2ZS4KKyAg
ICAgICAgKFdlYkNvcmU6OnNldFNTTENsaWVudENlcnRpZmljYXRlKTogRGl0dG8uIEFsc28gdXNl
IGF1dG8gZm9yIGl0ZXJhdG9yIHR5cGUgc28gd2UKKyAgICAgICAgZG9uJ3QgaGF2ZSB0byB3cml0
ZSBvdXQgdGhlIG1hcCB0eXBlLgorICAgICAgICAoV2ViQ29yZTo6c3NsSWdub3JlSFRUUFNDZXJ0
aWZpY2F0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Y2VydFZlcmlmeUNhbGxiYWNrKTog
RGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVT
b3VwLmNwcDogTWFkZSBoYXNoIG1hcHMga2V5ZWQgYnkgaG9zdCBuYW1lcworICAgICAgICBBU0NJ
SSBjYXNlLWluc2Vuc2l0aXZlLgorICAgICAgICAoV2ViQ29yZTo6YWxsb3dzQW55SFRUUFNDZXJ0
aWZpY2F0ZUhvc3RzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVVbmlnbm9yZWRU
TFNFcnJvcnMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzZXRI
b3N0QWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGU6OnNldENsaWVudENlcnRpZmljYXRlKTogRGl0dG8uCisKKyAgICAgICAg
KiBwbGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwOiBNYWRlIGhh
c2ggbWFwcyBrZXllZCBieSBzY3JpcHQKKyAgICAgICAgbmFtZXMgQVNDSUkgY2FzZS1pbnNlbnNp
dGl2ZS4gVVNFIFdURl9BUlJBWV9MRU5HVEggYXMgYXBwcm9wcmlhdGUuCisgICAgICAgIChXZWJD
b3JlOjpzY3JpcHROYW1lVG9Db2RlKTogVXNlIG1vZGVybiBzdHlsZSB0byBpbml0aWFsaXplIHRo
ZSBtYXAuIFJlbW92ZWQKKyAgICAgICAgdW5uZWNlc3NhcnkgbG93ZXJjYXNpbmcgb2YgdGhlIHNj
cmlwdCBuYW1lIGJlZm9yZSBsb29raW5nIGF0IHRoZSBtYXAuCisgICAgICAgIChXZWJDb3JlOjps
b2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9uKTogRGl0dG8uCisKKyAgICAgICAgKiBw
bGF0Zm9ybS90ZXh0L3dpbi9Mb2NhbGVXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVy
dExvY2FsZU5hbWVUb0xDSUQpOiBNYWRlIG1hcCBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIGFuZCBy
ZW1vdmVkCisgICAgICAgIHVubmVlZGVkIGxvd2VyY2FzaW5nLgorCisgICAgICAgICogcGxhdGZv
cm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2xpcGJvYXJkVHlw
ZUZyb21NSU1FVHlwZSk6IFVzZSBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSBpbnN0ZWFk
CisgICAgICAgIG9mIGxvd2VyY2FzaW5nLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlUZXh0VHJhbnNmb3JtKTogVXNlIG5ldyBu
YW1lcyBmb3IgdGhlIHVwcGVyIGFuZCBsb3dlciBmdW5jdGlvbnMuCisKKyAgICAgICAgKiB4bWwv
WE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnJl
c3BvbnNlSXNYTUwpOiBSZW1vdmUgdW5uZWVkZWQgbG93ZXJjYXNpbmcsIHNpbmNlCisgICAgICAg
IERPTUltcGxlbWVudGF0aW9uIG5vdyBoYXMgQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZSBoYW5kbGlu
ZyBvZiBNSU1FIHR5cGVzLgorCiAyMDE2LTAyLTA1ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlz
dGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQ2xlYW4gdXAgQmxvYiBjb2RlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFu
Z2VMb2cKaW5kZXggNzRkZjE4YmJkMThiZGNhZTIzNDAzYTUxZWE3MWFmMWE5YjZkYjlkMC4uOTlh
Y2UzNWE5MDUwNzI3OWRkMWI4M2U1YmFiOGVhMzIwMDMzMjNkZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE3IEBACisyMDE2LTAyLTA1ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBGaW5pc2ggYXVkaXRpbmcgY2FsbCBzaXRlcyBvZiB1cHBlcigpIGFuZCBs
b3dlcigpLCBlbGltaW5hdGUgbWFueSwgYW5kIHJlbmFtZSB0aGUgZnVuY3Rpb25zCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTM5MDUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsdWdpbnMvV2ViQmFz
ZVBsdWdpblBhY2thZ2UubW06CisgICAgICAgICgtW1dlYkJhc2VQbHVnaW5QYWNrYWdlIGdldFBs
dWdpbkluZm9Gcm9tUExpc3RzXSk6IFVzZSBtb2Rlcm4gZm9yIGxvb3BzLgorICAgICAgICAoLVtX
ZWJCYXNlUGx1Z2luUGFja2FnZSBzdXBwb3J0c0V4dGVuc2lvbjpdKTogVXNlIGNvbnZlcnRUb0FT
Q0lJTG93ZXJjYXNlIGZvciBleHRlbnNpb24gYXNzZXJ0LgorICAgICAgICBBbHNvIHVzZSBtb2Rl
cm4gZm9yIGxvb3AuCisgICAgICAgICgtW1dlYkJhc2VQbHVnaW5QYWNrYWdlIHN1cHBvcnRzTUlN
RVR5cGU6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJCYXNlUGx1Z2luUGFja2FnZSBNSU1FVHlw
ZUZvckV4dGVuc2lvbjpdKTogRGl0dG8uCisKIDIwMTYtMDItMDMgIEplc3NpZSBCZXJsaW4gIDxq
YmVybGluQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQnVpbGQgZml4LgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCmlu
ZGV4IDJjZTRhODc2Y2JiNTg0MjI4ZTlhNTU2YWVkYmNmN2NjY2QyZWYwMDEuLjFhMDRjNDE2MjRk
NTU4ZDBkZGY3YzgzNjJkNmI1MzJmNWVmY2ZlMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
d2luL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyMiBAQAorMjAxNi0wMi0wNSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAg
ICAgICAgRmluaXNoIGF1ZGl0aW5nIGNhbGwgc2l0ZXMgb2YgdXBwZXIoKSBhbmQgbG93ZXIoKSwg
ZWxpbWluYXRlIG1hbnksIGFuZCByZW5hbWUgdGhlIGZ1bmN0aW9ucworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzOTA1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbHVnaW5zL1BsdWdpbkRhdGFiYXNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpwbHVnaW5Gb3JNSU1FVHlw
ZSk6IFVzZSBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIG1hcCByYXRoZXIKKyAgICAgICAgdGhhbiBs
b3dlcmNhc2luZyB0aGUgTUlNRSB0eXBlLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJh
c2U6OnNldFByZWZlcnJlZFBsdWdpbkZvck1JTUVUeXBlKTogRGl0dG8uCisKKyAgICAgICAgKiBQ
bHVnaW5zL1BsdWdpbkRhdGFiYXNlLmg6IE1ha2UgbV9wcmVmZXJyZWRQbHVnaW5zIHVzZSBhbiBB
U0NJSSBjYXNlLWluc2Vuc2l0aXZlIGhhc2guCisKKyAgICAgICAgKiBQbHVnaW5zL1BsdWdpblBh
Y2thZ2UuaDogVXNlIEFTQ0lJIGNhc2UtaW5zZW5zaXRpdmUgaGFzaCBmb3IgbWFwcyBrZXllZCBi
eSBNSU1FIHR5cGUuCisKKyAgICAgICAgKiBQbHVnaW5zL1BsdWdpblBhY2thZ2VXaW4uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKTogVXNlIGNvbnZlcnRU
b0FTQ0lJTG93ZXJjYXNlIHRvIGxvd2VyY2FzZSBhIE1JTUUgdHlwZS4KKwogMjAxNi0wMi0wNCAg
Sm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IEluc3BlY3RvclRpbWVsaW5lQWdlbnQgZG9lc24ndCBuZWVkIHRvIHJlY29tcGlsZSBm
dW5jdGlvbnMgYmVjYXVzZSBpdCBub3cgdXNlcyB0aGUgc2FtcGxpbmcgcHJvZmlsZXIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwppbmRleCAwYTFlNTMwM2EwNmQxOGI3ODM2YmJlN2MzN2Q1ZWY1NDIwYjg2MWUzLi42NGNiMDhm
NDA5ZjNiMWRiZGQzYjliNTkzOTNmNDg4YTcxYjdjYWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
NjAgQEAKKzIwMTYtMDItMDUgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAg
ICAgIEZpbmlzaCBhdWRpdGluZyBjYWxsIHNpdGVzIG9mIHVwcGVyKCkgYW5kIGxvd2VyKCksIGVs
aW1pbmF0ZSBtYW55LCBhbmQgcmVuYW1lIHRoZSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzkwNQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJv
dG9jb2xzL0N1c3RvbVByb3RvY29sTWFuYWdlci5oOiBVc2UgQVNDSUkgY2FzZS1pbnNlbnNpdGl2
ZSBoYXNoCisgICAgICAgIGZvciBzZXQgb2YgcmVnaXN0ZXJlZCBzY2hlbWVzLgorCisgICAgICAg
ICogU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvbWFjL05ldHNjYXBlUGx1Z2luTW9kdWxlTWFjLm1t
OgorICAgICAgICAoV2ViS2l0OjpnZXRQbHVnaW5JbmZvRnJvbVByb3BlcnR5TGlzdHMpOiBVc2Ug
Y29udmVydFRvQVNDSUlMb3dlcmNhc2UgZm9yIE1JTUUgdHlwZSBhbmQKKyAgICAgICAgZm9yIGZp
bGUgZXh0ZW5zaW9ucy4KKworICAgICAgICAqIFNoYXJlZC9QbHVnaW5zL05ldHNjYXBlL3gxMS9O
ZXRzY2FwZVBsdWdpbk1vZHVsZVgxMS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1
Z2luTW9kdWxlOjpwYXJzZU1JTUVEZXNjcmlwdGlvbik6IFVzZSBjb252ZXJ0VG9BU0NJSUxvd2Vy
Y2FzZSBmb3IKKyAgICAgICAgTUlNRSBkZXNjcmlwdGlvbi4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcDoKKyAgICAgICAgKGV3a19jb250ZXh0X3ByZWZlcnJl
ZF9sYW5ndWFnZXNfc2V0KTogVXNlIGNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlIGZvciBsYW5ndWFn
ZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwOgor
ICAgICAgICAod2Via2l0X3dlYl9jb250ZXh0X3NldF9wcmVmZXJyZWRfbGFuZ3VhZ2VzKTogVXNl
IGNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlIGZvciBsYW5ndWFnZS4KKworICAgICAgICAqIFVJUHJv
Y2Vzcy9QbHVnaW5zL1BsdWdpbkluZm9TdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdp
bkluZm9TdG9yZTo6ZmluZFBsdWdpbkZvckV4dGVuc2lvbik6IFVzZSBWZWN0b3I6OmNvbnRhaW5z
IGluc3RlYWQgb2YKKyAgICAgICAgd3JpdGluZyBpdCBvdXQgdXNpbmcgc3RkOjpmaW5kLgorICAg
ICAgICAoV2ViS2l0OjpwYXRoRXh0ZW5zaW9uKTogTG93ZXJjYXNlIHRoZSByZXN1bHQgd2l0aCBj
b252ZXJ0VG9BU0NJSUxvd2VyY2FzZSBpbnN0ZWFkIG9mCisgICAgICAgIGxlYXZpbmcgdGhhdCB0
byB0aGUgY2FsbGVyLgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5JbmZvU3RvcmU6OmZpbmRQbHVn
aW4pOiBSZW1vdmVkIGNhbGwgdG8gbG93ZXIgc2luY2UgcGF0aEV4dGVuc2lvbgorICAgICAgICBo
YW5kbGVzIHRoYXQgbm93LgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZmluZFBsdWdpbik6IFVzZSBjb252ZXJ0
VG9BU0NJSUxvd2VyY2FzZSBmb3IgTUlNRSB0eXBlLgorCisgICAgICAgICogVUlQcm9jZXNzL1dl
YlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omdsb2Jh
bFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyk6IFVzZQorICAgICAgICBhbiBB
U0NJSSBjYXNlLWluc2Vuc2l0aXZlIGhhc2guCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVy
cyk6CisgICAgICAgIFJlbW92ZSBsb3dlcmNhc2luZywgc2luY2UgdGhlIGhhc2ggaXMgbm93IEFT
Q0lJIGNhc2UtaW5zZW5zaXRpdmUuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1
bnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToK
KyAgICAgICAgRGl0dG8uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaDog
VXNlIGFuIEFTQ0lJIGNhc2UtaW5zZW5zaXRpdmUgaGFzaC4KKworICAgICAgICAqIFdlYlByb2Nl
c3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHA6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHNjYXBlUGx1Z2luOjppbml0aWFsaXplKTogVXNlIGNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNl
IG9uIHBhcmFtZXRlciBuYW1lcworICAgICAgICBhbmQgdmFsdWVzLgorCisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OnBsdWdpblN1cHBvcnRzRXh0ZW5zaW9uKTogVXNlIGNvbnZlcnRUb0FTQ0lJTG93
ZXJjYXNlIGZvciBleHRlbnNpb24gYXNzZXJ0aW9uLgorICAgICAgICBBbHNvIHVzZSBhIG1vZGVy
biBmb3IgbG9vcC4KKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVMb2FkZXJDbGllbnQ6Om9iamVj
dENvbnRlbnRUeXBlKTogTWFrZSB0aGUgY2hlY2tzIGZvciBlbXB0eSBNSU1FIHR5cGVzCisgICAg
ICAgIGEgbGl0dGxlIGxlc3MgcmVkdW5kYW50LiBSZW9yZGVyZWQgbG9naWMgdG8gYXZvaWQgY2hl
Y2tpbmcgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIE1JTUUKKyAgICAgICAgdHlwZXMgZXh0cmEgdGlt
ZXMsIGFuZCB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIGEgYm9vbGVhbi4gVXNlIGNvbnZlcnRU
b0FTQ0lJTG93ZXJjYXNlCisgICAgICAgIG9uIHRoZSBleHRlbnNpb24uCisKIDIwMTYtMDItMDUg
IEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBD
bGVhbiB1cCBCbG9iIGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9i
amVjdC5jcHAKaW5kZXggZjk4Y2Q1NGZhN2EwMDlhZTY3ZTc2ZjNjYmRlNmM5ZGI4ZDM3NDllZC4u
OWU4ZjAzMzYzMGJiYjc1M2RkOTRmZTVhY2NjYmRiOTQ3MTNhMjU3MyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAKQEAgLTMyMiw3ICszMjIsNyBAQCBz
dGF0aWMgU3RyaW5nIGNhbm9uaWNhbExhbmdUYWcoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcnRz
KQogICAgICAgICBpZiAoaXNWYWxpZFJlZ2lvbikgewogICAgICAgICAgICAgKytjdXJyZW50SW5k
ZXg7CiAgICAgICAgICAgICBjYW5vbmljYWwuYXBwZW5kKCctJyk7Ci0gICAgICAgICAgICBjYW5v
bmljYWwuYXBwZW5kKHJlZ2lvbi51cHBlcigpKTsKKyAgICAgICAgICAgIGNhbm9uaWNhbC5hcHBl
bmQocmVnaW9uLmNvbnZlcnRUb0FTQ0lJVXBwZXJjYXNlKCkpOwogICAgICAgICB9CiAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5
cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNw
cAppbmRleCAyZDUwMmIwNDhhZmIwMTU1MDNmYTk1MjQ3YmExMzJkODFmYjE5ZjExLi5kNWRjZGJi
NzE0NWFhMjQyY2I3YmQ4ZjRhOWUwZDQ1NTIyNjlkZWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKQEAgLTE0MDYsMTcgKzE0MDYs
MTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUb0xvd2Vy
Q2FzZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4
ZWMpOwogICAgIEpTU3RyaW5nKiBzVmFsID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOwogICAg
IGNvbnN0IFN0cmluZyYgcyA9IHNWYWwtPnZhbHVlKGV4ZWMpOwotCi0gICAgaW50IHNTaXplID0g
cy5sZW5ndGgoKTsKLSAgICBpZiAoIXNTaXplKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHNWYWwpOwotICAgIFJFTEVBU0VfQVNTRVJUKHNTaXplID49IDApOwotCi0gICAgU3RyaW5n
SW1wbCogb3VySW1wbCA9IHMuaW1wbCgpOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBsb3dlciA9
IG91ckltcGwtPmxvd2VyKCk7Ci0gICAgaWYgKG91ckltcGwgPT0gbG93ZXIpCisgICAgU3RyaW5n
IGxvd2VyY2FzZWRTdHJpbmcgPSBzLmNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGUoKTsK
KyAgICBpZiAobG93ZXJjYXNlZFN0cmluZy5pbXBsKCkgPT0gcy5pbXBsKCkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoc1ZhbCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1N0cmluZyhleGVjLCBTdHJpbmcobG93ZXIucmVsZWFzZSgpKSkpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgbG93ZXJjYXNlZFN0cmluZykpOwogfQogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RvVXBwZXJDYXNlKEV4ZWNT
dGF0ZSogZXhlYykKQEAgLTE0MjYsMTYgKzE0MTksMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUb1VwcGVyQ2FzZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEpTU3RyaW5nKiBzVmFsID0g
dGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOwogICAgIGNvbnN0IFN0cmluZyYgcyA9IHNWYWwtPnZh
bHVlKGV4ZWMpOwotCi0gICAgaW50IHNTaXplID0gcy5sZW5ndGgoKTsKLSAgICBpZiAoIXNTaXpl
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNWYWwpOwotCi0gICAgU3RyaW5nSW1w
bCogc0ltcGwgPSBzLmltcGwoKTsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gdXBwZXIgPSBzSW1w
bC0+dXBwZXIoKTsKLSAgICBpZiAoc0ltcGwgPT0gdXBwZXIpCisgICAgU3RyaW5nIHVwcGVyY2Fz
ZWRTdHJpbmcgPSBzLmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhvdXRMb2NhbGUoKTsKKyAgICBpZiAo
dXBwZXJjYXNlZFN0cmluZy5pbXBsKCkgPT0gcy5pbXBsKCkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoc1ZhbCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhl
eGVjLCBTdHJpbmcodXBwZXIucmVsZWFzZSgpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNTdHJpbmcoZXhlYywgdXBwZXJjYXNlZFN0cmluZykpOwogfQogCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0xvY2FsZUNvbXBhcmUoRXhlY1N0YXRlKiBl
eGVjKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmcuY3BwIGIv
U291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmcuY3BwCmluZGV4IDk5ZTBkNmU1OTE3ZTg0
ZDU4MDRkMTA5Njk0NWU3MjFhZjc0ZDg4NTAuLmE5ZmVmMTUxNzZkNDUwODAwZTVhMjU3OWM1NDM3
ZjNlOGRkNDcwZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5n
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5jcHAKQEAgLTMyLDIy
ICszMiw2IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCi1BdG9taWNTdHJpbmcgQXRvbWljU3RyaW5n
Ojpsb3dlcigpIGNvbnN0Ci17Ci0gICAgLy8gTm90ZTogVGhpcyBpcyBhIGhvdCBmdW5jdGlvbiBp
biB0aGUgRHJvbWFlbyBiZW5jaG1hcmsuCi0gICAgU3RyaW5nSW1wbCogaW1wbCA9IHRoaXMtPmlt
cGwoKTsKLSAgICBpZiAoVU5MSUtFTFkoIWltcGwpKQotICAgICAgICByZXR1cm4gQXRvbWljU3Ry
aW5nKCk7Ci0KLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbG93ZXJjYXNlZFN0cmluZyA9IGltcGwt
Pmxvd2VyKCk7Ci0gICAgaWYgKExJS0VMWShsb3dlcmNhc2VkU3RyaW5nID09IGltcGwpKQotICAg
ICAgICByZXR1cm4gKnRoaXM7Ci0KLSAgICBBdG9taWNTdHJpbmcgcmVzdWx0OwotICAgIHJlc3Vs
dC5tX3N0cmluZyA9IEF0b21pY1N0cmluZ0ltcGw6OmFkZChsb3dlcmNhc2VkU3RyaW5nLmdldCgp
KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiB0ZW1wbGF0ZTxBdG9taWNTdHJpbmc6OkNhc2VD
b252ZXJ0VHlwZSB0eXBlPgogQUxXQVlTX0lOTElORSBBdG9taWNTdHJpbmcgQXRvbWljU3RyaW5n
Ojpjb252ZXJ0QVNDSUlDYXNlKCkgY29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L3RleHQvQXRvbWljU3RyaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5o
CmluZGV4IGE5ZTQwNjkxYmE2Y2RhZGRhNjQ0MDRlNWVjZDA1ZWNmNTYwOTY4ZWEuLmFiYmRiNDVk
ZWYyOTlmNGFkZWZmYjAzZTNkNmU0ZDU4YWQ1MDZjZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL3RleHQvQXRvbWljU3RyaW5nLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNT
dHJpbmcuaApAQCAtMTU1LDcgKzE1NSw2IEBAIHB1YmxpYzoKIAogICAgIFdURl9FWFBPUlRfU1RS
SU5HX0FQSSBBdG9taWNTdHJpbmcgY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSBjb25zdDsKICAg
ICBXVEZfRVhQT1JUX1NUUklOR19BUEkgQXRvbWljU3RyaW5nIGNvbnZlcnRUb0FTQ0lJVXBwZXJj
YXNlKCkgY29uc3Q7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIEF0b21pY1N0cmluZyBsb3dl
cigpIGNvbnN0OwogCiAgICAgaW50IHRvSW50KGJvb2wqIG9rID0gMCkgY29uc3QgeyByZXR1cm4g
bV9zdHJpbmcudG9JbnQob2spOyB9CiAgICAgZG91YmxlIHRvRG91YmxlKGJvb2wqIG9rID0gMCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJpbmcudG9Eb3VibGUob2spOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdJbXBsLmNwcAppbmRleCBjYjNkMDI0YmJhOTA5ZjJhYmU4MjVhM2Y5YTA0MTIzZGE1MzUzYTBi
Li43Zjc5NDg5MDdjNjk5MzIwNDQxYTE4OWYxYWIyYjJkYjI2OWQ3NWU3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvU3RyaW5nSW1wbC5jcHAKQEAgLTM2MSw5ICszNjEsOSBAQCBVQ2hhcjMyIFN0cmluZ0ltcGw6
OmNoYXJhY3RlclN0YXJ0aW5nQXQodW5zaWduZWQgaSkKICAgICByZXR1cm4gMDsKIH0KIAotUmVm
PFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6Omxvd2VyKCkKK1JlZjxTdHJpbmdJbXBsPiBTdHJpbmdJ
bXBsOjpjb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlKCkKIHsKLSAgICAvLyBOb3RlOiBU
aGlzIGlzIGEgaG90IGZ1bmN0aW9uIGluIHRoZSBEcm9tYWVvIGJlbmNobWFyaywgc3BlY2lmaWNh
bGx5IHRoZQorICAgIC8vIE5vdGU6IEF0IG9uZSB0aW1lIHRoaXMgd2FzIGEgaG90IGZ1bmN0aW9u
IGluIHRoZSBEcm9tYWVvIGJlbmNobWFyaywgc3BlY2lmaWNhbGx5IHRoZQogICAgIC8vIG5vLW9w
IGNvZGUgcGF0aCB1cCB0aHJvdWdoIHRoZSBmaXJzdCAncmV0dXJuJyBzdGF0ZW1lbnQuCiAKICAg
ICAvLyBGaXJzdCBzY2FuIHRoZSBzdHJpbmcgZm9yIHVwcGVyY2FzZSBhbmQgbm9uLUFTQ0lJIGNo
YXJhY3RlcnM6CkBAIC00NDIsMTEgKzQ0MiwxMiBAQCBTbG93UGF0aDoKICAgICByZXR1cm4gbmV3
SW1wbC5yZWxlYXNlTm9uTnVsbCgpOwogfQogCi1SZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6
dXBwZXIoKQorUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNvbnZlcnRUb1VwcGVyY2FzZVdp
dGhvdXRMb2NhbGUoKQogewotICAgIC8vIFRoaXMgZnVuY3Rpb24gY291bGQgYmUgb3B0aW1pemVk
IGZvciBuby1vcCBjYXNlcyB0aGUgd2F5IGxvd2VyKCkgaXMsCi0gICAgLy8gYnV0IGluIGVtcGly
aWNhbCB0ZXN0aW5nLCBmZXcgYWN0dWFsIGNhbGxzIHRvIHVwcGVyKCkgYXJlIG5vLW9wcywgc28K
LSAgICAvLyBpdCB3b3VsZG4ndCBiZSB3b3J0aCB0aGUgZXh0cmEgdGltZSBmb3IgcHJlLXNjYW5u
aW5nLgorICAgIC8vIFRoaXMgZnVuY3Rpb24gY291bGQgYmUgb3B0aW1pemVkIGZvciBuby1vcCBj
YXNlcyB0aGUgd2F5CisgICAgLy8gY29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZSgpIGlz
LCBidXQgaW4gZW1waXJpY2FsIHRlc3RpbmcsCisgICAgLy8gZmV3IGFjdHVhbCBjYWxscyB0byB1
cHBlcigpIGFyZSBuby1vcHMsIHNvIGl0IHdvdWxkbid0IGJlIHdvcnRoCisgICAgLy8gdGhlIGV4
dHJhIHRpbWUgZm9yIHByZS1zY2FubmluZy4KIAogICAgIGlmIChtX2xlbmd0aCA+IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkpCiAgICAg
ICAgIENSQVNIKCk7CkBAIC00NzcsNyArNDc4LDcgQEAgUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0lt
cGw6OnVwcGVyKCkKICAgICAgICAgaW50IG51bWJlclNoYXJwU0NoYXJhY3RlcnMgPSAwOwogCiAg
ICAgICAgIC8vIFRoZXJlIGFyZSB0d28gc3BlY2lhbCBjYXNlcy4KLSAgICAgICAgLy8gIDEuIGxh
dGluLTEgY2hhcmFjdGVycyB3aGVuIGNvbnZlcnRlZCB0byB1cHBlciBjYXNlIGFyZSAxNiBiaXQg
Y2hhcmFjdGVycy4KKyAgICAgICAgLy8gIDEuIFNvbWUgTGF0aW4tMSBjaGFyYWN0ZXJzIHdoZW4g
Y29udmVydGVkIHRvIHVwcGVyIGNhc2UgYXJlIDE2IGJpdCBjaGFyYWN0ZXJzLgogICAgICAgICAv
LyAgMi4gTG93ZXIgY2FzZSBzaGFycC1TIGNvbnZlcnRzIHRvICJTUyIgKHR3byBjaGFyYWN0ZXJz
KQogICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAg
ICAgICAgTENoYXIgYyA9IG1fZGF0YThbaV07CkBAIC00ODUsNyArNDg2LDcgQEAgUmVmPFN0cmlu
Z0ltcGw+IFN0cmluZ0ltcGw6OnVwcGVyKCkKICAgICAgICAgICAgICAgICArK251bWJlclNoYXJw
U0NoYXJhY3RlcnM7CiAgICAgICAgICAgICBBU1NFUlQodV90b3VwcGVyKGMpIDw9IDB4RkZGRik7
CiAgICAgICAgICAgICBVQ2hhciB1cHBlciA9IHVfdG91cHBlcihjKTsKLSAgICAgICAgICAgIGlm
IChVTkxJS0VMWSh1cHBlciA+IDB4ZmYpKSB7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkodXBw
ZXIgPiAweEZGKSkgewogICAgICAgICAgICAgICAgIC8vIFNpbmNlIHRoaXMgdXBwZXItY2FzZWQg
Y2hhcmFjdGVyIGRvZXMgbm90IGZpdCBpbiBhbiA4LWJpdCBzdHJpbmcsIHdlIG5lZWQgdG8gdGFr
ZSB0aGUgMTYtYml0IHBhdGguCiAgICAgICAgICAgICAgICAgZ290byB1cGNvbnZlcnQ7CiAgICAg
ICAgICAgICB9CkBAIC01NTQsMTQgKzU1NSwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmVlZHNU
dXJraXNoQ2FzaW5nUnVsZXMoY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyKQog
ICAgICAgICAmJiAobG9jYWxlSWRlbnRpZmllci5sZW5ndGgoKSA9PSAyIHx8IGxvY2FsZUlkZW50
aWZpZXJbMl0gPT0gJy0nKTsKIH0KIAotUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6Omxvd2Vy
KGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcikKK1JlZjxTdHJpbmdJbXBsPiBT
dHJpbmdJbXBsOjpjb252ZXJ0VG9Mb3dlcmNhc2VXaXRoTG9jYWxlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgbG9jYWxlSWRlbnRpZmllcikKIHsKICAgICAvLyBVc2UgdGhlIG1vcmUtb3B0aW1pemVkIGNv
ZGUgcGF0aCBtb3N0IG9mIHRoZSB0aW1lLgogICAgIC8vIEFzc3VtaW5nIGhlcmUgdGhhdCB0aGUg
b25seSBsb2NhbGUtc3BlY2lmaWMgbG93ZXJjYXNpbmcgaXMgdGhlIFR1cmtpc2ggY2FzaW5nIHJ1
bGVzLgogICAgIC8vIEZJWE1FOiBDb3VsZCBwb3NzaWJseSBvcHRpbWl6ZSBmdXJ0aGVyIGJ5IGxv
b2tpbmcgZm9yIHRoZSBzcGVjaWZpYyBzZXF1ZW5jZXMKICAgICAvLyB0aGF0IGhhdmUgbG9jYWxl
LXNwZWNpZmljIGxvd2VyY2FzaW5nLiBUaGVyZSBhcmUgb25seSB0aHJlZSBvZiB0aGVtLgogICAg
IGlmICghbmVlZHNUdXJraXNoQ2FzaW5nUnVsZXMobG9jYWxlSWRlbnRpZmllcikpCi0gICAgICAg
IHJldHVybiBsb3dlcigpOworICAgICAgICByZXR1cm4gY29udmVydFRvTG93ZXJjYXNlV2l0aG91
dExvY2FsZSgpOwogCiAgICAgLy8gRklYTUU6IENvdWxkIHNoYXJlIG1vcmUgY29kZSB3aXRoIHRo
ZSBtYWluIFN0cmluZ0ltcGw6Omxvd2VyIGJ5IGZhY3RvcmluZyBvdXQKICAgICAvLyB0aGlzIGxh
c3QgcGFydCBpbnRvIGEgc2hhcmVkIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBsb2NhbGUgc3RyaW5n
LCBzaW5jZSB0aGlzIGlzCkBAIC01OTAsMTMgKzU5MSwxMyBAQCBSZWY8U3RyaW5nSW1wbD4gU3Ry
aW5nSW1wbDo6bG93ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyKQogICAg
IHJldHVybiBuZXdTdHJpbmcucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotUmVmPFN0cmluZ0ltcGw+
IFN0cmluZ0ltcGw6OnVwcGVyKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcikK
K1JlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjb252ZXJ0VG9VcHBlcmNhc2VXaXRoTG9jYWxl
KGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcikKIHsKICAgICAvLyBVc2UgdGhl
IG1vcmUtb3B0aW1pemVkIGNvZGUgcGF0aCBtb3N0IG9mIHRoZSB0aW1lLgogICAgIC8vIEFzc3Vt
aW5nIGhlcmUgdGhhdCB0aGUgb25seSBsb2NhbGUtc3BlY2lmaWMgbG93ZXJjYXNpbmcgaXMgdGhl
IFR1cmtpc2ggY2FzaW5nIHJ1bGVzLAogICAgIC8vIGFuZCB0aGF0IHRoZSBvbmx5IGFmZmVjdGVk
IGNoYXJhY3RlciBpcyBsb3dlcmNhc2UgImkiLgogICAgIGlmICghbmVlZHNUdXJraXNoQ2FzaW5n
UnVsZXMobG9jYWxlSWRlbnRpZmllcikgfHwgZmluZCgnaScpID09IG5vdEZvdW5kKQotICAgICAg
ICByZXR1cm4gdXBwZXIoKTsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRUb1VwcGVyY2FzZVdpdGhv
dXRMb2NhbGUoKTsKIAogICAgIGlmIChtX2xlbmd0aCA+IHN0YXRpY19jYXN0PHVuc2lnbmVkPihz
dGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkpCiAgICAgICAgIENSQVNIKCk7CkBA
IC02MjMsNjAgKzYyNCw4NiBAQCBSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6dXBwZXIoY29u
c3QgQXRvbWljU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyKQogCiBSZWY8U3RyaW5nSW1wbD4gU3Ry
aW5nSW1wbDo6Zm9sZENhc2UoKQogewotICAgIC8vIEZJWE1FOiBXaHkgZG9lc24ndCB0aGlzIGZ1
bmN0aW9uIGhhdmUgYSBwcmVmbGlnaHQgbGlrZSB0aGUgb25lIGluIFN0cmluZ0ltcGw6Omxvd2Vy
PwotCi0gICAgaWYgKG1fbGVuZ3RoID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50MzJfdD46Om1heCgpKSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICBpbnQzMl90
IGxlbmd0aCA9IG1fbGVuZ3RoOwotCiAgICAgaWYgKGlzOEJpdCgpKSB7Ci0gICAgICAgIC8vIERv
IGEgZmFzdGVyIGxvb3AgZm9yIHRoZSBjYXNlIHdoZXJlIGFsbCB0aGUgY2hhcmFjdGVycyBhcmUg
QVNDSUkuCi0gICAgICAgIExDaGFyKiBkYXRhOwotICAgICAgICBhdXRvIG5ld0ltcGwgPSBjcmVh
dGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhKTsKLSAgICAgICAgTENoYXIgb3JlZCA9IDA7
Ci0KLSAgICAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgICAgIExDaGFyIGMgPSBtX2RhdGE4W2ldOwotICAgICAgICAgICAgZGF0YVtpXSA9IHRvQVND
SUlMb3dlcihjKTsKLSAgICAgICAgICAgIG9yZWQgfD0gYzsKKyAgICAgICAgdW5zaWduZWQgZmFp
bGluZ0luZGV4OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9sZW5ndGg7ICsr
aSkgeworICAgICAgICAgICAgYXV0byBjaGFyYWN0ZXIgPSBtX2RhdGE4W2ldOworICAgICAgICAg
ICAgaWYgKFVOTElLRUxZKCFpc0FTQ0lJKGNoYXJhY3RlcikgfHwgaXNBU0NJSVVwcGVyKGNoYXJh
Y3RlcikpKSB7CisgICAgICAgICAgICAgICAgZmFpbGluZ0luZGV4ID0gaTsKKyAgICAgICAgICAg
ICAgICBnb3RvIFNsb3dQYXRoOworICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIC8v
IFN0cmluZyB3YXMgYWxsIEFTQ0lJIGFuZCBubyB1cHBlcmNhc2UsIHNvIGp1c3QgcmV0dXJuIGFz
LWlzLgorICAgICAgICByZXR1cm4gKnRoaXM7CiAKLSAgICAgICAgaWYgKCEob3JlZCAmIH4weDdG
KSkKLSAgICAgICAgICAgIHJldHVybiBuZXdJbXBsOwotCi0gICAgICAgIC8vIERvIGEgc2xvd2Vy
IGltcGxlbWVudGF0aW9uIGZvciBjYXNlcyB0aGF0IGluY2x1ZGUgbm9uLUFTQ0lJIExhdGluLTEg
Y2hhcmFjdGVycy4KLSAgICAgICAgLy8gRklYTUU6IFNob3VsZG4ndCB0aGlzIHVzZSB1X2ZvbGRD
YXNlIGluc3RlYWQgb2YgdV90b2xvd2VyPwotICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgQVNTRVJUKHVfdG9sb3dlcihtX2RhdGE4W2ld
KSA8PSAweEZGKTsKLSAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxMQ2hhcj4odV90
b2xvd2VyKG1fZGF0YThbaV0pKTsKK1Nsb3dQYXRoOgorICAgICAgICBib29sIG5lZWQxNkJpdENo
YXJhY3RlcnMgPSBmYWxzZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZmFpbGluZ0luZGV4
OyBpIDwgbV9sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgYXV0byBjaGFyYWN0ZXIgPSBtX2Rh
dGE4W2ldOworICAgICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAweEI1IHx8IGNoYXJhY3RlciA9
PSAweERGKSB7CisgICAgICAgICAgICAgICAgbmVlZDE2Qml0Q2hhcmFjdGVycyA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAg
ICByZXR1cm4gbmV3SW1wbDsKKyAgICAgICAgaWYgKCFuZWVkMTZCaXRDaGFyYWN0ZXJzKSB7Cisg
ICAgICAgICAgICBMQ2hhciogZGF0YTg7CisgICAgICAgICAgICBhdXRvIGZvbGRlZCA9IGNyZWF0
ZVVuaW5pdGlhbGl6ZWRJbnRlcm5hbE5vbkVtcHR5KG1fbGVuZ3RoLCBkYXRhOCk7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmFpbGluZ0luZGV4OyArK2kpCisgICAgICAg
ICAgICAgICAgZGF0YThbaV0gPSBtX2RhdGE4W2ldOworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gZmFpbGluZ0luZGV4OyBpIDwgbV9sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAg
IGF1dG8gY2hhcmFjdGVyID0gbV9kYXRhOFtpXTsKKyAgICAgICAgICAgICAgICBpZiAoaXNBU0NJ
SShjaGFyYWN0ZXIpKQorICAgICAgICAgICAgICAgICAgICBkYXRhOFtpXSA9IHRvQVNDSUlMb3dl
cihjaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQodV9mb2xkQ2FzZShjaGFyYWN0ZXIsIFVfRk9MRF9DQVNFX0RFRkFVTFQpIDw9IDB4
RkYpOworICAgICAgICAgICAgICAgICAgICBkYXRhOFtpXSA9IHN0YXRpY19jYXN0PExDaGFyPih1
X2ZvbGRDYXNlKGNoYXJhY3RlciwgVV9GT0xEX0NBU0VfREVGQVVMVCkpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmb2xkZWQ7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBGSVhNRTogVW5jbGVhciB3aHkgd2UgdXNlIGdv
dG8gaW4gdGhlIDgtYml0IGNhc2UsIGFuZCBhIGRpZmZlcmVudCBhcHByb2FjaCBpbiB0aGUgMTYt
Yml0IGNhc2UuCisgICAgICAgIGJvb2wgbm9VcHBlciA9IHRydWU7CisgICAgICAgIHVuc2lnbmVk
IG9yZWQgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9sZW5ndGg7ICsr
aSkgeworICAgICAgICAgICAgVUNoYXIgY2hhcmFjdGVyID0gbV9kYXRhMTZbaV07CisgICAgICAg
ICAgICBpZiAoVU5MSUtFTFkoaXNBU0NJSVVwcGVyKGNoYXJhY3RlcikpKQorICAgICAgICAgICAg
ICAgIG5vVXBwZXIgPSBmYWxzZTsKKyAgICAgICAgICAgIG9yZWQgfD0gY2hhcmFjdGVyOworICAg
ICAgICB9CisgICAgICAgIGlmICghKG9yZWQgJiB+MHg3RikpIHsKKyAgICAgICAgICAgIGlmIChu
b1VwcGVyKSB7CisgICAgICAgICAgICAgICAgLy8gU3RyaW5nIHdhcyBhbGwgQVNDSUkgYW5kIG5v
IHVwcGVyY2FzZSwgc28ganVzdCByZXR1cm4gYXMtaXMuCisgICAgICAgICAgICAgICAgcmV0dXJu
ICp0aGlzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgVUNoYXIqIGRhdGExNjsKKyAgICAg
ICAgICAgIGF1dG8gZm9sZGVkID0gY3JlYXRlVW5pbml0aWFsaXplZEludGVybmFsTm9uRW1wdHko
bV9sZW5ndGgsIGRhdGExNik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9sZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBkYXRhMTZbaV0gPSB0b0FTQ0lJTG93ZXIo
bV9kYXRhMTZbaV0pOworICAgICAgICAgICAgcmV0dXJuIGZvbGRlZDsKKyAgICAgICAgfQogICAg
IH0KIAotICAgIC8vIERvIGEgZmFzdGVyIGxvb3AgZm9yIHRoZSBjYXNlIHdoZXJlIGFsbCB0aGUg
Y2hhcmFjdGVycyBhcmUgQVNDSUkuCi0gICAgVUNoYXIqIGRhdGE7Ci0gICAgUmVmUHRyPFN0cmlu
Z0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhKTsKLSAg
ICBVQ2hhciBvcmVkID0gMDsKLSAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsr
aSkgewotICAgICAgICBVQ2hhciBjID0gbV9kYXRhMTZbaV07Ci0gICAgICAgIG9yZWQgfD0gYzsK
LSAgICAgICAgZGF0YVtpXSA9IHRvQVNDSUlMb3dlcihjKTsKLSAgICB9Ci0gICAgaWYgKCEob3Jl
ZCAmIH4weDdGKSkKLSAgICAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZU5vbk51bGwoKTsKKyAg
ICBpZiAobV9sZW5ndGggPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0
czxpbnQzMl90Pjo6bWF4KCkpKQorICAgICAgICBDUkFTSCgpOwogCi0gICAgLy8gRG8gYSBzbG93
ZXIgaW1wbGVtZW50YXRpb24gZm9yIGNhc2VzIHRoYXQgaW5jbHVkZSBub24tQVNDSUkgY2hhcmFj
dGVycy4KKyAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoKnRoaXMp
LnVwY29udmVydGVkQ2hhcmFjdGVycygpOworCisgICAgVUNoYXIqIGRhdGE7CisgICAgYXV0byBm
b2xkZWQgPSBjcmVhdGVVbmluaXRpYWxpemVkSW50ZXJuYWxOb25FbXB0eShtX2xlbmd0aCwgZGF0
YSk7CisgICAgaW50MzJfdCBsZW5ndGggPSBtX2xlbmd0aDsKICAgICBVRXJyb3JDb2RlIHN0YXR1
cyA9IFVfWkVST19FUlJPUjsKLSAgICBpbnQzMl90IHJlYWxMZW5ndGggPSB1X3N0ckZvbGRDYXNl
KGRhdGEsIGxlbmd0aCwgbV9kYXRhMTYsIG1fbGVuZ3RoLCBVX0ZPTERfQ0FTRV9ERUZBVUxULCAm
c3RhdHVzKTsKKyAgICBpbnQzMl90IHJlYWxMZW5ndGggPSB1X3N0ckZvbGRDYXNlKGRhdGEsIGxl
bmd0aCwgdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzLCBsZW5ndGgsIFVfRk9MRF9DQVNFX0RFRkFVTFQs
ICZzdGF0dXMpOwogICAgIGlmIChVX1NVQ0NFU1Moc3RhdHVzKSAmJiByZWFsTGVuZ3RoID09IGxl
bmd0aCkKLSAgICAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZU5vbk51bGwoKTsKLSAgICBuZXdJ
bXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChyZWFsTGVuZ3RoLCBkYXRhKTsKKyAgICAgICAgcmV0
dXJuIGZvbGRlZDsKKyAgICBBU1NFUlQocmVhbExlbmd0aCA+IGxlbmd0aCk7CisgICAgZm9sZGVk
ID0gY3JlYXRlVW5pbml0aWFsaXplZEludGVybmFsTm9uRW1wdHkocmVhbExlbmd0aCwgZGF0YSk7
CiAgICAgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotICAgIHVfc3RyRm9sZENhc2UoZGF0YSwgcmVh
bExlbmd0aCwgbV9kYXRhMTYsIG1fbGVuZ3RoLCBVX0ZPTERfQ0FTRV9ERUZBVUxULCAmc3RhdHVz
KTsKKyAgICB1X3N0ckZvbGRDYXNlKGRhdGEsIHJlYWxMZW5ndGgsIHVwY29udmVydGVkQ2hhcmFj
dGVycywgbGVuZ3RoLCBVX0ZPTERfQ0FTRV9ERUZBVUxULCAmc3RhdHVzKTsKICAgICBpZiAoVV9G
QUlMVVJFKHN0YXR1cykpCiAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICByZXR1cm4gbmV3SW1w
bC5yZWxlYXNlTm9uTnVsbCgpOworICAgIHJldHVybiBmb2xkZWQ7CiB9CiAKIHRlbXBsYXRlPFN0
cmluZ0ltcGw6OkNhc2VDb252ZXJ0VHlwZSB0eXBlLCB0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmggYi9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAppbmRleCBlNjg3MGJhZjk1ZTI2OTQwZjkzY2U1Y2QxYWU3
N2ZlN2E2OTM4NDRiLi4wNjNjZTYzMmE0MmQ0YmY5MzZiN2QzNjZkOGNmZDliMWRlOWNiZDlkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaApAQCAtNjgxLDEwICs2ODEsMTAgQEAgcHVibGljOgog
CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJlZjxTdHJpbmdJbXBsPiBjb252ZXJ0VG9BU0NJ
SUxvd2VyY2FzZSgpOwogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBSZWY8U3RyaW5nSW1wbD4g
Y29udmVydFRvQVNDSUlVcHBlcmNhc2UoKTsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUmVm
PFN0cmluZ0ltcGw+IGxvd2VyKCk7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJlZjxTdHJp
bmdJbXBsPiB1cHBlcigpOwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBSZWY8U3RyaW5nSW1w
bD4gbG93ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyKTsKLSAgICBXVEZf
RVhQT1JUX1NUUklOR19BUEkgUmVmPFN0cmluZ0ltcGw+IHVwcGVyKGNvbnN0IEF0b21pY1N0cmlu
ZyYgbG9jYWxlSWRlbnRpZmllcik7CisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJlZjxTdHJp
bmdJbXBsPiBjb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlKCk7CisgICAgV1RGX0VYUE9S
VF9TVFJJTkdfQVBJIFJlZjxTdHJpbmdJbXBsPiBjb252ZXJ0VG9VcHBlcmNhc2VXaXRob3V0TG9j
YWxlKCk7CisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJlZjxTdHJpbmdJbXBsPiBjb252ZXJ0
VG9Mb3dlcmNhc2VXaXRoTG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmll
cik7CisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJlZjxTdHJpbmdJbXBsPiBjb252ZXJ0VG9V
cHBlcmNhc2VXaXRoTG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcik7
CiAKICAgICBSZWY8U3RyaW5nSW1wbD4gZm9sZENhc2UoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJp
bmcuY3BwCmluZGV4IDFiNDMwNTY3NjJiMjRkMmZhMzIzYjI5OGEzOTcwNzRhYWFjMmQ3MjAuLmNl
Mzc2ZTIzYTA5NTk5ZmRjNTVjZWQ1ZTliOTMwODY4NDRhNmVhMGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dU
RlN0cmluZy5jcHAKQEAgLTM1MSwzMiArMzUxLDMyIEBAIFN0cmluZyBTdHJpbmc6OmNvbnZlcnRU
b0FTQ0lJVXBwZXJjYXNlKCkgY29uc3QKICAgICByZXR1cm4gbV9pbXBsLT5jb252ZXJ0VG9BU0NJ
SVVwcGVyY2FzZSgpOwogfQogCi1TdHJpbmcgU3RyaW5nOjpsb3dlcigpIGNvbnN0CitTdHJpbmcg
U3RyaW5nOjpjb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlKCkgY29uc3QKIHsKICAgICBp
ZiAoIW1faW1wbCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBtX2ltcGwt
Pmxvd2VyKCk7CisgICAgcmV0dXJuIG1faW1wbC0+Y29udmVydFRvTG93ZXJjYXNlV2l0aG91dExv
Y2FsZSgpOwogfQogCi1TdHJpbmcgU3RyaW5nOjp1cHBlcigpIGNvbnN0CitTdHJpbmcgU3RyaW5n
Ojpjb252ZXJ0VG9VcHBlcmNhc2VXaXRob3V0TG9jYWxlKCkgY29uc3QKIHsKICAgICBpZiAoIW1f
aW1wbCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBtX2ltcGwtPnVwcGVy
KCk7CisgICAgcmV0dXJuIG1faW1wbC0+Y29udmVydFRvVXBwZXJjYXNlV2l0aG91dExvY2FsZSgp
OwogfQogCi1TdHJpbmcgU3RyaW5nOjpsb3dlcihjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlk
ZW50aWZpZXIpIGNvbnN0CitTdHJpbmcgU3RyaW5nOjpjb252ZXJ0VG9Mb3dlcmNhc2VXaXRoTG9j
YWxlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcikgY29uc3QKIHsKICAgICBp
ZiAoIW1faW1wbCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBtX2ltcGwt
Pmxvd2VyKGxvY2FsZUlkZW50aWZpZXIpOworICAgIHJldHVybiBtX2ltcGwtPmNvbnZlcnRUb0xv
d2VyY2FzZVdpdGhMb2NhbGUobG9jYWxlSWRlbnRpZmllcik7CiB9CiAKLVN0cmluZyBTdHJpbmc6
OnVwcGVyKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcikgY29uc3QKK1N0cmlu
ZyBTdHJpbmc6OmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhMb2NhbGUoY29uc3QgQXRvbWljU3RyaW5n
JiBsb2NhbGVJZGVudGlmaWVyKSBjb25zdAogewogICAgIGlmICghbV9pbXBsKQogICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIG1faW1wbC0+dXBwZXIobG9jYWxlSWRlbnRpZmll
cik7CisgICAgcmV0dXJuIG1faW1wbC0+Y29udmVydFRvVXBwZXJjYXNlV2l0aExvY2FsZShsb2Nh
bGVJZGVudGlmaWVyKTsKIH0KIAogU3RyaW5nIFN0cmluZzo6c3RyaXBXaGl0ZVNwYWNlKCkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmggYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCmluZGV4IDg4YzEzZGFmMzM5MDU4NTBlMDFjYjIxY2Q5
MmEwYjI5NmFlNzM1Y2EuLjNjNTU5MDgxMWRhZjIxMGRiOWUzZmNjOTYxYWVhYzRhMWEyZjFhZTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgKKysrIGIvU291cmNl
L1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaApAQCAtMzMxLDE2ICszMzEsMTIgQEAgcHVibGljOgog
ICAgIFN0cmluZyBsZWZ0KHVuc2lnbmVkIGxlbikgY29uc3QgeyByZXR1cm4gc3Vic3RyaW5nKDAs
IGxlbik7IH0KICAgICBTdHJpbmcgcmlnaHQodW5zaWduZWQgbGVuKSBjb25zdCB7IHJldHVybiBz
dWJzdHJpbmcobGVuZ3RoKCkgLSBsZW4sIGxlbik7IH0KIAotICAgIC8vIFJldHVybnMgYSBsb3dl
cmNhc2UvdXBwZXJjYXNlIHZlcnNpb24gb2YgdGhlIHN0cmluZy4KLSAgICAvLyBUaGUgY29udmVy
dFRvQVNDSUlMb3dlcmNhc2UgaXMgdXNlZnVsIGluIG1hbnkgY29udGV4dHMgc3VjaCBhcyBIVE1M
IHdoZXJlIHdlIGRvbid0Ci0gICAgLy8gd2FudCB0byBkbyBhbnkgY29udmVyc2lvbiBmb3Igbm9u
LUFTQ0lJIGxldHRlcnMuCiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyBjb252ZXJ0
VG9BU0NJSUxvd2VyY2FzZSgpIGNvbnN0OwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJp
bmcgbG93ZXIoKSBjb25zdDsKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgU3RyaW5nIGNvbnZl
cnRUb0FTQ0lJVXBwZXJjYXNlKCkgY29uc3Q7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0
cmluZyB1cHBlcigpIGNvbnN0OwotCi0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyBs
b3dlcihjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpIGNvbnN0OwotICAgIFdU
Rl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJpbmcgdXBwZXIoY29uc3QgQXRvbWljU3RyaW5nJiBsb2Nh
bGVJZGVudGlmaWVyKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgU3RyaW5nIGNv
bnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGUoKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1NU
UklOR19BUEkgU3RyaW5nIGNvbnZlcnRUb1VwcGVyY2FzZVdpdGhvdXRMb2NhbGUoKSBjb25zdDsK
KyAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgU3RyaW5nIGNvbnZlcnRUb0xvd2VyY2FzZVdpdGhM
b2NhbGUoY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyKSBjb25zdDsKKyAgICBX
VEZfRVhQT1JUX1NUUklOR19BUEkgU3RyaW5nIGNvbnZlcnRUb1VwcGVyY2FzZVdpdGhMb2NhbGUo
Y29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyKSBjb25zdDsKIAogICAgIFdURl9F
WFBPUlRfU1RSSU5HX0FQSSBTdHJpbmcgc3RyaXBXaGl0ZVNwYWNlKCkgY29uc3Q7CiAgICAgV1RG
X0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyBzdHJpcFdoaXRlU3BhY2UoSXNXaGl0ZVNwYWNlRnVu
Y3Rpb25QdHIpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291
cmNlL01lZGlhU291cmNlLmNwcAppbmRleCAzYzkxMDVmOTU5NWM4MTE4NDNjYjc0NjNhMGJmNmJj
OTk5MjExOTFjLi5jMGQxNGUxNjU3YWVlODMxMmI5ZjcwZDU3NTU5N2IwMzc1NjdlNDkxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNw
cApAQCAtNzMzLDcgKzczMyw3IEBAIGJvb2wgTWVkaWFTb3VyY2U6OmlzVHlwZVN1cHBvcnRlZChj
b25zdCBTdHJpbmcmIHR5cGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIEZJWE1F
OiBXaHkgZG8gd2UgY29udmVydCB0byBsb3dlcmNhc2UgaGVyZSwgYnV0IG5vdCBpbiBNZWRpYVNv
dXJjZTo6YWRkU291cmNlQnVmZmVyPwotICAgIENvbnRlbnRUeXBlIGNvbnRlbnRUeXBlKHR5cGUu
bG93ZXIoKSk7CisgICAgQ29udGVudFR5cGUgY29udGVudFR5cGUodHlwZS5jb252ZXJ0VG9BU0NJ
SUxvd2VyY2FzZSgpKTsKICAgICBTdHJpbmcgY29kZWNzID0gY29udGVudFR5cGUucGFyYW1ldGVy
KCJjb2RlY3MiKTsKIAogICAgIC8vIDIuIElmIHR5cGUgZG9lcyBub3QgY29udGFpbiBhIHZhbGlk
IE1JTUUgdHlwZSBzdHJpbmcsIHRoZW4gcmV0dXJuIGZhbHNlLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKaW5kZXggYjA3OTg4
ZWVlMzBhNGYyODIwZmQyMWE0MDE1MjM0MmJlNDJhMzAwNy4uMDZhNDMyYWFjMjlkZTc5NTRhMjc0
YTY0YWNmMmQxMzVmZDdkYjhmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC03NjEsMzEgKzc2MSwyOCBAQCBTdHJp
bmcgQWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0VGV4dChBY2Nlc3NpYmlsaXR5U2VsZWN0VGV4
dENyaXRlcmlhKiBjcml0ZXJpYQogICAgICAgICBib29sIHJlcGxhY2VTZWxlY3Rpb24gPSBmYWxz
ZTsKICAgICAgICAgaWYgKGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNsb3Nl
c3RTdHJpbmdSYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSwgdHJ1ZSkpIHsKICAgICAgICAgICAgIHN3
aXRjaCAoYWN0aXZpdHkpIHsKLSAgICAgICAgICAgIGNhc2UgRmluZEFuZENhcGl0YWxpemU6IHsK
KyAgICAgICAgICAgIGNhc2UgRmluZEFuZENhcGl0YWxpemU6CiAgICAgICAgICAgICAgICAgcmVw
bGFjZW1lbnRTdHJpbmcgPSBjbG9zZXN0U3RyaW5nOwogICAgICAgICAgICAgICAgIG1ha2VDYXBp
dGFsaXplZCgmcmVwbGFjZW1lbnRTdHJpbmcsIDApOwogICAgICAgICAgICAgICAgIHJlcGxhY2VT
ZWxlY3Rpb24gPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQog
ICAgICAgICAgICAgY2FzZSBGaW5kQW5kVXBwZXJjYXNlOgotICAgICAgICAgICAgICAgIHJlcGxh
Y2VtZW50U3RyaW5nID0gY2xvc2VzdFN0cmluZy51cHBlcigpOworICAgICAgICAgICAgICAgIHJl
cGxhY2VtZW50U3RyaW5nID0gY2xvc2VzdFN0cmluZy5jb252ZXJ0VG9VcHBlcmNhc2VXaXRob3V0
TG9jYWxlKCk7IC8vIEZJWE1FOiBOZWVkcyBsb2NhbGUgdG8gd29yayBjb3JyZWN0bHkuCiAgICAg
ICAgICAgICAgICAgcmVwbGFjZVNlbGVjdGlvbiA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBjYXNlIEZpbmRBbmRMb3dlcmNhc2U6Ci0gICAgICAgICAgICAgICAg
cmVwbGFjZW1lbnRTdHJpbmcgPSBjbG9zZXN0U3RyaW5nLmxvd2VyKCk7CisgICAgICAgICAgICAg
ICAgcmVwbGFjZW1lbnRTdHJpbmcgPSBjbG9zZXN0U3RyaW5nLmNvbnZlcnRUb0xvd2VyY2FzZVdp
dGhvdXRMb2NhbGUoKTsgLy8gRklYTUU6IE5lZWRzIGxvY2FsZSB0byB3b3JrIGNvcnJlY3RseS4K
ICAgICAgICAgICAgICAgICByZXBsYWNlU2VsZWN0aW9uID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGNhc2UgRmluZEFuZFJlcGxhY2VBY3Rpdml0eTogewogICAg
ICAgICAgICAgICAgIHJlcGxhY2VTZWxlY3Rpb24gPSB0cnVlOwotICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIC8vIFdoZW4gYXBwbHlpbmcgZmluZCBhbmQgcmVwbGFjZSBhY3Rpdml0
aWVzLCB3ZSB3YW50IHRvIG1hdGNoIHRoZSBjYXBpdGFsaXphdGlvbiBvZiB0aGUgcmVwbGFjZWQg
dGV4dCwKICAgICAgICAgICAgICAgICAvLyAodW5sZXNzIHdlJ3JlIHJlcGxhY2luZyB3aXRoIGFu
IGFiYnJldmlhdGlvbi4pCi0gICAgICAgICAgICAgICAgU3RyaW5nIHVwcGVyY2FzZVJlcGxhY2Vt
ZW50U3RyaW5nID0gcmVwbGFjZW1lbnRTdHJpbmcudXBwZXIoKTsKLSAgICAgICAgICAgICAgICBp
ZiAoY2xvc2VzdFN0cmluZy5sZW5ndGgoKSA+IDAgJiYgcmVwbGFjZW1lbnRTdHJpbmcubGVuZ3Ro
KCkgPiAyICYmIHJlcGxhY2VtZW50U3RyaW5nICE9IHVwcGVyY2FzZVJlcGxhY2VtZW50U3RyaW5n
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjbG9zZXN0U3RyaW5nWzBdID09IGNsb3Nlc3RT
dHJpbmcudXBwZXIoKVswXSkKKyAgICAgICAgICAgICAgICBpZiAoY2xvc2VzdFN0cmluZy5sZW5n
dGgoKSA+IDAgJiYgcmVwbGFjZW1lbnRTdHJpbmcubGVuZ3RoKCkgPiAyICYmIHJlcGxhY2VtZW50
U3RyaW5nICE9IHJlcGxhY2VtZW50U3RyaW5nLmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhvdXRMb2Nh
bGUoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2xvc2VzdFN0cmluZ1swXSA9PSB1X3Rv
dXBwZXIoY2xvc2VzdFN0cmluZ1swXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlQ2Fw
aXRhbGl6ZWQoJnJlcGxhY2VtZW50U3RyaW5nLCAwKTsKICAgICAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRTdHJpbmcgPSByZXBsYWNlbWVu
dFN0cmluZy5sb3dlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRTdHJp
bmcgPSByZXBsYWNlbWVudFN0cmluZy5jb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlKCk7
IC8vIEZJWE1FOiBOZWVkcyBsb2NhbGUgdG8gd29yayBjb3JyZWN0bHkuCiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAKaW5kZXggZjAwMGIxZjI4ODUxY2QxMGFlMDYzY2RlZTg4NzFiNWI3MTI2MWFjYS4u
MzdjNmViYmY4Njk3YzQzZGUzZjA1NTAzYmE5MzEzMTBlOTk1YmUyZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCkBAIC03NjYsMTkgKzc2NiwxOSBAQCB2b2lkIERvY3VtZW50OjppbnZhbGlkYXRl
QWNjZXNzS2V5TWFwKCkKICAgICBtX2VsZW1lbnRzQnlBY2Nlc3NLZXkuY2xlYXIoKTsKIH0KIAot
dm9pZCBEb2N1bWVudDo6YWRkSW1hZ2VFbGVtZW50QnlMb3dlcmNhc2VkVXNlbWFwKGNvbnN0IEF0
b21pY1N0cmluZ0ltcGwmIG5hbWUsIEhUTUxJbWFnZUVsZW1lbnQmIGVsZW1lbnQpCit2b2lkIERv
Y3VtZW50OjphZGRJbWFnZUVsZW1lbnRCeUNhc2VGb2xkZWRVc2VtYXAoY29uc3QgQXRvbWljU3Ry
aW5nSW1wbCYgbmFtZSwgSFRNTEltYWdlRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICByZXR1cm4g
bV9pbWFnZXNCeVVzZW1hcC5hZGQobmFtZSwgZWxlbWVudCwgKnRoaXMpOwogfQogCi12b2lkIERv
Y3VtZW50OjpyZW1vdmVJbWFnZUVsZW1lbnRCeUxvd2VyY2FzZWRVc2VtYXAoY29uc3QgQXRvbWlj
U3RyaW5nSW1wbCYgbmFtZSwgSFRNTEltYWdlRWxlbWVudCYgZWxlbWVudCkKK3ZvaWQgRG9jdW1l
bnQ6OnJlbW92ZUltYWdlRWxlbWVudEJ5Q2FzZUZvbGRlZFVzZW1hcChjb25zdCBBdG9taWNTdHJp
bmdJbXBsJiBuYW1lLCBIVE1MSW1hZ2VFbGVtZW50JiBlbGVtZW50KQogewogICAgIHJldHVybiBt
X2ltYWdlc0J5VXNlbWFwLnJlbW92ZShuYW1lLCBlbGVtZW50KTsKIH0KIAotSFRNTEltYWdlRWxl
bWVudCogRG9jdW1lbnQ6OmltYWdlRWxlbWVudEJ5TG93ZXJjYXNlZFVzZW1hcChjb25zdCBBdG9t
aWNTdHJpbmdJbXBsJiBuYW1lKSBjb25zdAorSFRNTEltYWdlRWxlbWVudCogRG9jdW1lbnQ6Omlt
YWdlRWxlbWVudEJ5Q2FzZUZvbGRlZFVzZW1hcChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBuYW1l
KSBjb25zdAogewotICAgIHJldHVybiBtX2ltYWdlc0J5VXNlbWFwLmdldEVsZW1lbnRCeUxvd2Vy
Y2FzZWRVc2VtYXAobmFtZSwgKnRoaXMpOworICAgIHJldHVybiBtX2ltYWdlc0J5VXNlbWFwLmdl
dEVsZW1lbnRCeUNhc2VGb2xkZWRVc2VtYXAobmFtZSwgKnRoaXMpOwogfQogCiBTZWxlY3RvclF1
ZXJ5KiBEb2N1bWVudDo6c2VsZWN0b3JRdWVyeUZvclN0cmluZyhjb25zdCBTdHJpbmcmIHNlbGVj
dG9yU3RyaW5nLCBFeGNlcHRpb25Db2RlJiBlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggY2I2
MmZlODc2MzdjMWM3YWQwNjBlNjk3NjA2Yjc5MzQxMGMzYjYwYS4uNzJjYmJjY2ZhOTk0ZjEwMGQz
NTAyYzliZDk3NmJkNDBlMjkwMzliMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTM1MCw5ICsz
NTAsOSBAQCBwdWJsaWM6CiAgICAgRWxlbWVudCogZ2V0RWxlbWVudEJ5QWNjZXNzS2V5KGNvbnN0
IFN0cmluZyYga2V5KTsKICAgICB2b2lkIGludmFsaWRhdGVBY2Nlc3NLZXlNYXAoKTsKIAotICAg
IHZvaWQgYWRkSW1hZ2VFbGVtZW50QnlMb3dlcmNhc2VkVXNlbWFwKGNvbnN0IEF0b21pY1N0cmlu
Z0ltcGwmLCBIVE1MSW1hZ2VFbGVtZW50Jik7Ci0gICAgdm9pZCByZW1vdmVJbWFnZUVsZW1lbnRC
eUxvd2VyY2FzZWRVc2VtYXAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYsIEhUTUxJbWFnZUVsZW1l
bnQmKTsKLSAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsZW1lbnRCeUxvd2VyY2FzZWRVc2Vt
YXAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYpIGNvbnN0OworICAgIHZvaWQgYWRkSW1hZ2VFbGVt
ZW50QnlDYXNlRm9sZGVkVXNlbWFwKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmLCBIVE1MSW1hZ2VF
bGVtZW50Jik7CisgICAgdm9pZCByZW1vdmVJbWFnZUVsZW1lbnRCeUNhc2VGb2xkZWRVc2VtYXAo
Y29uc3QgQXRvbWljU3RyaW5nSW1wbCYsIEhUTUxJbWFnZUVsZW1lbnQmKTsKKyAgICBIVE1MSW1h
Z2VFbGVtZW50KiBpbWFnZUVsZW1lbnRCeUNhc2VGb2xkZWRVc2VtYXAoY29uc3QgQXRvbWljU3Ry
aW5nSW1wbCYpIGNvbnN0OwogCiAgICAgU2VsZWN0b3JRdWVyeSogc2VsZWN0b3JRdWVyeUZvclN0
cmluZyhjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBjbGVhclNlbGVj
dG9yUXVlcnlDYWNoZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
T3JkZXJlZE1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNw
cAppbmRleCAzZTM0YjRlMDkxY2U1OGJhMjc2ZjA5NzI2MmJmYTM1YTMxOWEzNTYyLi5kYThlNGYy
NWU3NGM0MmZlY2U4YjlkZTIyOWNjNTAwNTI0YjdjZDE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnRPcmRlcmVkTWFwLmNwcApAQCAtMTQ3LDE4ICsxNDcsMTggQEAgSFRNTE1hcEVsZW1l
bnQqIERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5TWFwTmFtZShjb25zdCBBdG9taWNT
dHJpbmdJbXBsJgogICAgIH0pKTsKIH0KIAotSFRNTE1hcEVsZW1lbnQqIERvY3VtZW50T3JkZXJl
ZE1hcDo6Z2V0RWxlbWVudEJ5TG93ZXJjYXNlZE1hcE5hbWUoY29uc3QgQXRvbWljU3RyaW5nSW1w
bCYga2V5LCBjb25zdCBUcmVlU2NvcGUmIHNjb3BlKSBjb25zdAorSFRNTE1hcEVsZW1lbnQqIERv
Y3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5Q2FzZUZvbGRlZE1hcE5hbWUoY29uc3QgQXRv
bWljU3RyaW5nSW1wbCYga2V5LCBjb25zdCBUcmVlU2NvcGUmIHNjb3BlKSBjb25zdAogewogICAg
IHJldHVybiBkb3duY2FzdDxIVE1MTWFwRWxlbWVudD4oZ2V0KGtleSwgc2NvcGUsIFtdIChjb25z
dCBBdG9taWNTdHJpbmdJbXBsJiBrZXksIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpIHsKLSAgICAg
ICAgcmV0dXJuIGlzPEhUTUxNYXBFbGVtZW50PihlbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MTWFw
RWxlbWVudD4oZWxlbWVudCkuZ2V0TmFtZSgpLmxvd2VyKCkuaW1wbCgpID09ICZrZXk7CisgICAg
ICAgIHJldHVybiBpczxIVE1MTWFwRWxlbWVudD4oZWxlbWVudCkgJiYgZXF1YWwoZG93bmNhc3Q8
SFRNTE1hcEVsZW1lbnQ+KGVsZW1lbnQpLmdldE5hbWUoKS5zdHJpbmcoKS5mb2xkQ2FzZSgpLmlt
cGwoKSwgJmtleSk7CiAgICAgfSkpOwogfQogCi1IVE1MSW1hZ2VFbGVtZW50KiBEb2N1bWVudE9y
ZGVyZWRNYXA6OmdldEVsZW1lbnRCeUxvd2VyY2FzZWRVc2VtYXAoY29uc3QgQXRvbWljU3RyaW5n
SW1wbCYga2V5LCBjb25zdCBUcmVlU2NvcGUmIHNjb3BlKSBjb25zdAorSFRNTEltYWdlRWxlbWVu
dCogRG9jdW1lbnRPcmRlcmVkTWFwOjpnZXRFbGVtZW50QnlDYXNlRm9sZGVkVXNlbWFwKGNvbnN0
IEF0b21pY1N0cmluZ0ltcGwmIGtleSwgY29uc3QgVHJlZVNjb3BlJiBzY29wZSkgY29uc3QKIHsK
ICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4oZ2V0KGtleSwgc2NvcGUsIFtd
IChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBrZXksIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpIHsK
ICAgICAgICAgLy8gRklYTUU6IEhUTUw1IHNwZWNpZmljYXRpb24gc2F5cyB3ZSBzaG91bGQgbWF0
Y2ggYm90aCBpbWFnZSBhbmQgb2JqZWN0IGVsZW1lbnRzLgotICAgICAgICByZXR1cm4gaXM8SFRN
TEltYWdlRWxlbWVudD4oZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4oZWxl
bWVudCkubWF0Y2hlc0xvd2VyY2FzZWRVc2VtYXAoa2V5KTsKKyAgICAgICAgcmV0dXJuIGlzPEhU
TUxJbWFnZUVsZW1lbnQ+KGVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxJbWFnZUVsZW1lbnQ+KGVs
ZW1lbnQpLm1hdGNoZXNDYXNlRm9sZGVkVXNlbWFwKGtleSk7CiAgICAgfSkpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmggYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmgKaW5kZXggNzIwNTU1YjI4ZDM5NWUyZWI3
MjRhM2ZiY2MzMzIzN2JmNTk1NTkwMC4uYjQ5ODhjYzc0YjUzNzYyNjllNzU1MjMwMDMxNjYzMmYw
OTg1ZGM4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1h
cC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuaApAQCAtNjAs
OCArNjAsOCBAQCBwdWJsaWM6CiAgICAgRWxlbWVudCogZ2V0RWxlbWVudEJ5SWQoY29uc3QgQXRv
bWljU3RyaW5nSW1wbCYsIGNvbnN0IFRyZWVTY29wZSYpIGNvbnN0OwogICAgIEVsZW1lbnQqIGdl
dEVsZW1lbnRCeU5hbWUoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYsIGNvbnN0IFRyZWVTY29wZSYp
IGNvbnN0OwogICAgIEhUTUxNYXBFbGVtZW50KiBnZXRFbGVtZW50QnlNYXBOYW1lKGNvbnN0IEF0
b21pY1N0cmluZ0ltcGwmLCBjb25zdCBUcmVlU2NvcGUmKSBjb25zdDsKLSAgICBIVE1MTWFwRWxl
bWVudCogZ2V0RWxlbWVudEJ5TG93ZXJjYXNlZE1hcE5hbWUoY29uc3QgQXRvbWljU3RyaW5nSW1w
bCYsIGNvbnN0IFRyZWVTY29wZSYpIGNvbnN0OwotICAgIEhUTUxJbWFnZUVsZW1lbnQqIGdldEVs
ZW1lbnRCeUxvd2VyY2FzZWRVc2VtYXAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYsIGNvbnN0IFRy
ZWVTY29wZSYpIGNvbnN0OworICAgIEhUTUxNYXBFbGVtZW50KiBnZXRFbGVtZW50QnlDYXNlRm9s
ZGVkTWFwTmFtZShjb25zdCBBdG9taWNTdHJpbmdJbXBsJiwgY29uc3QgVHJlZVNjb3BlJikgY29u
c3Q7CisgICAgSFRNTEltYWdlRWxlbWVudCogZ2V0RWxlbWVudEJ5Q2FzZUZvbGRlZFVzZW1hcChj
b25zdCBBdG9taWNTdHJpbmdJbXBsJiwgY29uc3QgVHJlZVNjb3BlJikgY29uc3Q7CiAgICAgSFRN
TExhYmVsRWxlbWVudCogZ2V0RWxlbWVudEJ5TGFiZWxGb3JBdHRyaWJ1dGUoY29uc3QgQXRvbWlj
U3RyaW5nSW1wbCYsIGNvbnN0IFRyZWVTY29wZSYpIGNvbnN0OwogICAgIEVsZW1lbnQqIGdldEVs
ZW1lbnRCeVdpbmRvd05hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmdJbXBsJiwgY29uc3QgVHJl
ZVNjb3BlJikgY29uc3Q7CiAgICAgRWxlbWVudCogZ2V0RWxlbWVudEJ5RG9jdW1lbnROYW1lZEl0
ZW0oY29uc3QgQXRvbWljU3RyaW5nSW1wbCYsIGNvbnN0IFRyZWVTY29wZSYpIGNvbnN0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vVHJlZVNjb3BlLmNwcAppbmRleCBkNDZhM2E2ZDhkMDBiNmM4MWVlODc2ZTFiMjk2MWU4
ODFmMWU2MWNjLi5hZmY2ODc3YTRkYjEwY2Q1ZDUyYzQ1ODg2NDE1NWQzOTJkODNiNTlkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vVHJlZVNjb3BlLmNwcApAQCAtMjAxLDE4ICsyMDEsMTYgQEAgdm9pZCBUcmVlU2Nv
cGU6OnJlbW92ZUltYWdlTWFwKEhUTUxNYXBFbGVtZW50JiBpbWFnZU1hcCkKIAogSFRNTE1hcEVs
ZW1lbnQqIFRyZWVTY29wZTo6Z2V0SW1hZ2VNYXAoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0CiB7
Ci0gICAgaWYgKHVybC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYg
KCFtX2ltYWdlTWFwc0J5TmFtZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgc2l6ZV90
IGhhc2hQb3MgPSB1cmwuZmluZCgnIycpOwotICAgIFN0cmluZyBuYW1lID0gKGhhc2hQb3MgPT0g
bm90Rm91bmQgPyBTdHJpbmcoKSA6IHVybC5zdWJzdHJpbmcoaGFzaFBvcyArIDEpKS5pbXBsKCk7
CisgICAgYXV0byBoYXNoUG9zaXRpb24gPSB1cmwuZmluZCgnIycpOworICAgIGlmIChoYXNoUG9z
aXRpb24gPT0gbm90Rm91bmQpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIFN0cmluZyBu
YW1lID0gdXJsLnN1YnN0cmluZyhoYXNoUG9zaXRpb24gKyAxKTsKICAgICBpZiAobmFtZS5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmIChtX3Jvb3ROb2RlLmRvY3Vt
ZW50KCkuaXNIVE1MRG9jdW1lbnQoKSkgewotICAgICAgICBBdG9taWNTdHJpbmcgbG93ZXJjYXNl
ZE5hbWUgPSBuYW1lLmxvd2VyKCk7Ci0gICAgICAgIHJldHVybiBtX2ltYWdlTWFwc0J5TmFtZS0+
Z2V0RWxlbWVudEJ5TG93ZXJjYXNlZE1hcE5hbWUoKmxvd2VyY2FzZWROYW1lLmltcGwoKSwgKnRo
aXMpOwotICAgIH0KKyAgICBpZiAobV9yb290Tm9kZS5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50
KCkpCisgICAgICAgIHJldHVybiBtX2ltYWdlTWFwc0J5TmFtZS0+Z2V0RWxlbWVudEJ5Q2FzZUZv
bGRlZE1hcE5hbWUoKkF0b21pY1N0cmluZyhuYW1lLmZvbGRDYXNlKCkpLmltcGwoKSwgKnRoaXMp
OwogICAgIHJldHVybiBtX2ltYWdlTWFwc0J5TmFtZS0+Z2V0RWxlbWVudEJ5TWFwTmFtZSgqQXRv
bWljU3RyaW5nKG5hbWUpLmltcGwoKSwgKnRoaXMpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0KaW5kZXggNWY0NWU2M2NjOTNhNDM4ODg2ZjUz
ODBhMzE2NjdiYmE0MzA3ZjU5NS4uYmM1OGQ5MDdlYjZjNjQxZDUzM2M4NzAxZGQwNWY0NGYzMGQ0
NWIzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVy
dGVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5t
bQpAQCAtNTYsNiArNTYsNyBAQAogI2ltcG9ydCAiTlNBdHRyaWJ1dGVkU3RyaW5nU1BJLmgiCiAj
aW1wb3J0ICJSR0JDb2xvci5oIgogI2ltcG9ydCAiUmVuZGVySW1hZ2UuaCIKKyNpbXBvcnQgIlJl
bmRlclRleHQuaCIKICNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCiAjaW1wb3J0ICJTdHlsZVByb3Bl
cnRpZXMuaCIKICNpbXBvcnQgIlN0eWxlZEVsZW1lbnQuaCIKQEAgLTIyNzgsMTUgKzIyNzksMTIg
QEAgdm9pZCBIVE1MQ29udmVydGVyOjpfcHJvY2Vzc1RleHQoQ2hhcmFjdGVyRGF0YSYgY2hhcmFj
dGVyRGF0YSkKIAogICAgIGlmIChvdXRwdXRTdHJpbmcubGVuZ3RoKCkpIHsKICAgICAgICAgU3Ry
aW5nIHRleHRUcmFuc2Zvcm0gPSBfY2FjaGVzLT5wcm9wZXJ0eVZhbHVlRm9yTm9kZShjaGFyYWN0
ZXJEYXRhLCBDU1NQcm9wZXJ0eVRleHRUcmFuc2Zvcm0pOwotICAgICAgICBpZiAodGV4dFRyYW5z
Zm9ybS5sZW5ndGgoKSkgewotICAgICAgICAgICAgaWYgKHRleHRUcmFuc2Zvcm0gPT0gImNhcGl0
YWxpemUiKSB7Ly8gRklYTUU6IFRoaXMgaXMgZXh0cmVtZWx5IGluZWZmaWNpZW50LgotICAgICAg
ICAgICAgICAgIE5TU3RyaW5nICp0ZW1wb3JhcnlTdHJpbmcgPSBvdXRwdXRTdHJpbmc7Ci0gICAg
ICAgICAgICAgICAgb3V0cHV0U3RyaW5nID0gW3RlbXBvcmFyeVN0cmluZyBjYXBpdGFsaXplZFN0
cmluZ107Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHRleHRUcmFuc2Zvcm0gPT0gInVwcGVyY2Fz
ZSIpCi0gICAgICAgICAgICAgICAgb3V0cHV0U3RyaW5nID0gb3V0cHV0U3RyaW5nLnVwcGVyKCk7
Ci0gICAgICAgICAgICBlbHNlIGlmICh0ZXh0VHJhbnNmb3JtID09ICJsb3dlcmNhc2UiKQotICAg
ICAgICAgICAgICAgIG91dHB1dFN0cmluZyA9IG91dHB1dFN0cmluZy5sb3dlcigpOwotICAgICAg
ICB9CisgICAgICAgIGlmICh0ZXh0VHJhbnNmb3JtID09ICJjYXBpdGFsaXplIikKKyAgICAgICAg
ICAgIG1ha2VDYXBpdGFsaXplZCgmb3V0cHV0U3RyaW5nLCAwKTsgLy8gRklYTUU6IE5lZWRzIHRv
IHRha2UgbG9jYWxlIGludG8gYWNjb3VudCB0byB3b3JrIGNvcnJlY3RseS4KKyAgICAgICAgZWxz
ZSBpZiAodGV4dFRyYW5zZm9ybSA9PSAidXBwZXJjYXNlIikKKyAgICAgICAgICAgIG91dHB1dFN0
cmluZyA9IG91dHB1dFN0cmluZy5jb252ZXJ0VG9VcHBlcmNhc2VXaXRob3V0TG9jYWxlKCk7IC8v
IEZJWE1FOiBOZWVkcyBsb2NhbGUgdG8gd29yayBjb3JyZWN0bHkuCisgICAgICAgIGVsc2UgaWYg
KHRleHRUcmFuc2Zvcm0gPT0gImxvd2VyY2FzZSIpCisgICAgICAgICAgICBvdXRwdXRTdHJpbmcg
PSBvdXRwdXRTdHJpbmcuY29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZSgpOyAvLyBGSVhN
RTogTmVlZHMgbG9jYWxlIHRvIHdvcmsgY29ycmVjdGx5LgogCiAgICAgICAgIFtfYXR0clN0ciBy
ZXBsYWNlQ2hhcmFjdGVyc0luUmFuZ2U6cmFuZ2VUb1JlcGxhY2Ugd2l0aFN0cmluZzpvdXRwdXRT
dHJpbmddOwogICAgICAgICByYW5nZVRvUmVwbGFjZS5sZW5ndGggPSBvdXRwdXRTdHJpbmcubGVu
Z3RoKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAppbmRleCA4ZGU5
NTYzMGZiYmQwZWU0ZWMxNGU0OWQwYTY2ZjNjY2JmMDc3MGQyLi40ODhjNGU2YWY4ZTg1MThlMDEz
YWUxNjcyYTdjMTRkY2M2YzQ5ZTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxJbWFnZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxl
bWVudC5jcHAKQEAgLTIwMSwyMCArMjAxLDIwIEBAIHZvaWQgSFRNTEltYWdlRWxlbWVudDo6cGFy
c2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyCiAg
ICAgfSBlbHNlIGlmIChuYW1lID09IHNyY0F0dHIgfHwgbmFtZSA9PSBzcmNzZXRBdHRyIHx8IG5h
bWUgPT0gc2l6ZXNBdHRyKQogICAgICAgICBzZWxlY3RJbWFnZVNvdXJjZSgpOwogICAgIGVsc2Ug
aWYgKG5hbWUgPT0gdXNlbWFwQXR0cikgewotICAgICAgICBpZiAoaW5Eb2N1bWVudCgpICYmICFt
X2xvd2VyY2FzZWRVc2VtYXAuaXNOdWxsKCkpCi0gICAgICAgICAgICBkb2N1bWVudCgpLnJlbW92
ZUltYWdlRWxlbWVudEJ5TG93ZXJjYXNlZFVzZW1hcCgqbV9sb3dlcmNhc2VkVXNlbWFwLmltcGwo
KSwgKnRoaXMpOworICAgICAgICBpZiAoaW5Eb2N1bWVudCgpICYmICFtX2Nhc2VGb2xkZWRVc2Vt
YXAuaXNOdWxsKCkpCisgICAgICAgICAgICBkb2N1bWVudCgpLnJlbW92ZUltYWdlRWxlbWVudEJ5
Q2FzZUZvbGRlZFVzZW1hcCgqbV9jYXNlRm9sZGVkVXNlbWFwLmltcGwoKSwgKnRoaXMpOwogCiAg
ICAgICAgIC8vIFRoZSBIVE1MSW1hZ2VFbGVtZW50J3MgdXNlTWFwKCkgdmFsdWUgaW5jbHVkZXMg
dGhlICcjJyBzeW1ib2wgYXQgdGhlIGJlZ2lubmluZywgd2hpY2ggaGFzIHRvIGJlIHN0cmlwcGVk
IG9mZi4KICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjaGVjayB0aGF0IHRoZSBmaXJzdCBj
aGFyYWN0ZXIgaXMgJyMnLgotICAgICAgICAvLyBGSVhNRTogSFRNTDUgc3BlY2lmaWNhdGlvbiBz
YXlzIHdlIHNob3VsZCBzdHJpcCBhbnkgbGVhZGluZyBzdHJpbmcgYmVmb3JlICcjJy4KLSAgICAg
ICAgLy8gRklYTUU6IEhUTUw1IHNwZWNpZmljYXRpb24gc2F5cyB3ZSBzaG91bGQgaWdub3JlIHVz
ZW1hcCBhdHRyaWJ1dGVzIHdpdGhvdXQgIy4KKyAgICAgICAgLy8gRklYTUU6IEhUTUwgc3BlY2lm
aWNhdGlvbiBzYXlzIHdlIHNob3VsZCBzdHJpcCBhbnkgbGVhZGluZyBzdHJpbmcgYmVmb3JlICcj
Jy4KKyAgICAgICAgLy8gRklYTUU6IEhUTUwgc3BlY2lmaWNhdGlvbiBzYXlzIHdlIHNob3VsZCBp
Z25vcmUgdXNlbWFwIGF0dHJpYnV0ZXMgd2l0aG91dCAnIycuCiAgICAgICAgIGlmICh2YWx1ZS5s
ZW5ndGgoKSA+IDEpCi0gICAgICAgICAgICBtX2xvd2VyY2FzZWRVc2VtYXAgPSB2YWx1ZS5zdHJp
bmcoKS5zdWJzdHJpbmcoMSkubG93ZXIoKTsKKyAgICAgICAgICAgIG1fY2FzZUZvbGRlZFVzZW1h
cCA9IHZhbHVlLnN0cmluZygpLnN1YnN0cmluZygxKS5mb2xkQ2FzZSgpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBtX2xvd2VyY2FzZWRVc2VtYXAgPSBudWxsQXRvbTsKKyAgICAgICAgICAg
IG1fY2FzZUZvbGRlZFVzZW1hcCA9IG51bGxBdG9tOwogCi0gICAgICAgIGlmIChpbkRvY3VtZW50
KCkgJiYgIW1fbG93ZXJjYXNlZFVzZW1hcC5pc051bGwoKSkKLSAgICAgICAgICAgIGRvY3VtZW50
KCkuYWRkSW1hZ2VFbGVtZW50QnlMb3dlcmNhc2VkVXNlbWFwKCptX2xvd2VyY2FzZWRVc2VtYXAu
aW1wbCgpLCAqdGhpcyk7CisgICAgICAgIGlmIChpbkRvY3VtZW50KCkgJiYgIW1fY2FzZUZvbGRl
ZFVzZW1hcC5pc051bGwoKSkKKyAgICAgICAgICAgIGRvY3VtZW50KCkuYWRkSW1hZ2VFbGVtZW50
QnlDYXNlRm9sZGVkVXNlbWFwKCptX2Nhc2VGb2xkZWRVc2VtYXAuaW1wbCgpLCAqdGhpcyk7CiAg
ICAgfSBlbHNlIGlmIChuYW1lID09IGNvbXBvc2l0ZUF0dHIpIHsKICAgICAgICAgLy8gRklYTUU6
IGltYWdlcyBkb24ndCBzdXBwb3J0IGJsZW5kIG1vZGVzIGluIHRoZWlyIGNvbXBvc2l0aW5nIGF0
dHJpYnV0ZS4KICAgICAgICAgQmxlbmRNb2RlIGJsZW5kT3AgPSBCbGVuZE1vZGVOb3JtYWw7CkBA
IC0zMTIsOCArMzEyLDggQEAgTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBIVE1M
SW1hZ2VFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYKICAgICAvLyBpbiBjYWxs
YmFja3MgYmFjayB0byB0aGlzIG5vZGUuCiAgICAgTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9u
UmVxdWVzdCBpbnNlcnROb3RpZmljYXRpb25SZXF1ZXN0ID0gSFRNTEVsZW1lbnQ6Omluc2VydGVk
SW50byhpbnNlcnRpb25Qb2ludCk7CiAKLSAgICBpZiAoaW5zZXJ0aW9uUG9pbnQuaW5Eb2N1bWVu
dCgpICYmICFtX2xvd2VyY2FzZWRVc2VtYXAuaXNOdWxsKCkpCi0gICAgICAgIGRvY3VtZW50KCku
YWRkSW1hZ2VFbGVtZW50QnlMb3dlcmNhc2VkVXNlbWFwKCptX2xvd2VyY2FzZWRVc2VtYXAuaW1w
bCgpLCAqdGhpcyk7CisgICAgaWYgKGluc2VydGlvblBvaW50LmluRG9jdW1lbnQoKSAmJiAhbV9j
YXNlRm9sZGVkVXNlbWFwLmlzTnVsbCgpKQorICAgICAgICBkb2N1bWVudCgpLmFkZEltYWdlRWxl
bWVudEJ5Q2FzZUZvbGRlZFVzZW1hcCgqbV9jYXNlRm9sZGVkVXNlbWFwLmltcGwoKSwgKnRoaXMp
OwogCiAgICAgaWYgKGlzPEhUTUxQaWN0dXJlRWxlbWVudD4ocGFyZW50Tm9kZSgpKSkgewogICAg
ICAgICBzZXRQaWN0dXJlRWxlbWVudCgmZG93bmNhc3Q8SFRNTFBpY3R1cmVFbGVtZW50PigqcGFy
ZW50Tm9kZSgpKSk7CkBAIC0zMzMsOCArMzMzLDggQEAgdm9pZCBIVE1MSW1hZ2VFbGVtZW50Ojpy
ZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKICAgICBpZiAobV9mb3Jt
KQogICAgICAgICBtX2Zvcm0tPnJlbW92ZUltZ0VsZW1lbnQodGhpcyk7CiAKLSAgICBpZiAoaW5z
ZXJ0aW9uUG9pbnQuaW5Eb2N1bWVudCgpICYmICFtX2xvd2VyY2FzZWRVc2VtYXAuaXNOdWxsKCkp
Ci0gICAgICAgIGRvY3VtZW50KCkucmVtb3ZlSW1hZ2VFbGVtZW50QnlMb3dlcmNhc2VkVXNlbWFw
KCptX2xvd2VyY2FzZWRVc2VtYXAuaW1wbCgpLCAqdGhpcyk7CisgICAgaWYgKGluc2VydGlvblBv
aW50LmluRG9jdW1lbnQoKSAmJiAhbV9jYXNlRm9sZGVkVXNlbWFwLmlzTnVsbCgpKQorICAgICAg
ICBkb2N1bWVudCgpLnJlbW92ZUltYWdlRWxlbWVudEJ5Q2FzZUZvbGRlZFVzZW1hcCgqbV9jYXNl
Rm9sZGVkVXNlbWFwLmltcGwoKSwgKnRoaXMpOwogICAgIAogICAgIGlmIChpczxIVE1MUGljdHVy
ZUVsZW1lbnQ+KHBhcmVudE5vZGUoKSkpCiAgICAgICAgIHNldFBpY3R1cmVFbGVtZW50KG51bGxw
dHIpOwpAQCAtNDc0LDEwICs0NzQsMTAgQEAgU3RyaW5nIEhUTUxJbWFnZUVsZW1lbnQ6OmNvbXBs
ZXRlVVJMc0luQXR0cmlidXRlVmFsdWUoY29uc3QgVVJMJiBiYXNlLCBjb25zdCBBdHQKICAgICBy
ZXR1cm4gSFRNTEVsZW1lbnQ6OmNvbXBsZXRlVVJMc0luQXR0cmlidXRlVmFsdWUoYmFzZSwgYXR0
cmlidXRlKTsKIH0KIAotYm9vbCBIVE1MSW1hZ2VFbGVtZW50OjptYXRjaGVzTG93ZXJjYXNlZFVz
ZW1hcChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBuYW1lKSBjb25zdAorYm9vbCBIVE1MSW1hZ2VF
bGVtZW50OjptYXRjaGVzQ2FzZUZvbGRlZFVzZW1hcChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBu
YW1lKSBjb25zdAogewotICAgIEFTU0VSVChTdHJpbmcoJmNvbnN0X2Nhc3Q8QXRvbWljU3RyaW5n
SW1wbCY+KG5hbWUpKS5sb3dlcigpLmltcGwoKSA9PSAmbmFtZSk7Ci0gICAgcmV0dXJuIG1fbG93
ZXJjYXNlZFVzZW1hcC5pbXBsKCkgPT0gJm5hbWU7CisgICAgQVNTRVJUKFN0cmluZygmY29uc3Rf
Y2FzdDxBdG9taWNTdHJpbmdJbXBsJj4obmFtZSkpLmZvbGRDYXNlKCkuaW1wbCgpID09ICZuYW1l
KTsKKyAgICByZXR1cm4gbV9jYXNlRm9sZGVkVXNlbWFwLmltcGwoKSA9PSAmbmFtZTsKIH0KIAog
Y29uc3QgQXRvbWljU3RyaW5nJiBIVE1MSW1hZ2VFbGVtZW50OjphbHQoKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaAppbmRleCA0NDdiNjI0M2FkNjU3NTg3MzE1NTQ3
YTBkOTA0Mzc4NTg2YjNhYzc0Li42NzkzMWI1ZDYwYjVmNzgwMTM1ZjVlODhiZWY3NTBiMmEzOTEz
NjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaApAQCAtNjAsNyArNjAs
NyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldExvYWRNYW51YWxseShib29sIGxvYWRNYW51YWxs
eSkgeyBtX2ltYWdlTG9hZGVyLnNldExvYWRNYW51YWxseShsb2FkTWFudWFsbHkpOyB9CiAKLSAg
ICBib29sIG1hdGNoZXNMb3dlcmNhc2VkVXNlbWFwKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmKSBj
b25zdDsKKyAgICBib29sIG1hdGNoZXNDYXNlRm9sZGVkVXNlbWFwKGNvbnN0IEF0b21pY1N0cmlu
Z0ltcGwmKSBjb25zdDsKIAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYWx0KCkgY29uc3Q7CiAK
QEAgLTEzNCw3ICsxMzQsNyBAQCBwcml2YXRlOgogICAgIENvbXBvc2l0ZU9wZXJhdG9yIG1fY29t
cG9zaXRlT3BlcmF0b3I7CiAgICAgQXRvbWljU3RyaW5nIG1fYmVzdEZpdEltYWdlVVJMOwogICAg
IEF0b21pY1N0cmluZyBtX2N1cnJlbnRTcmM7Ci0gICAgQXRvbWljU3RyaW5nIG1fbG93ZXJjYXNl
ZFVzZW1hcDsKKyAgICBBdG9taWNTdHJpbmcgbV9jYXNlRm9sZGVkVXNlbWFwOwogICAgIGZsb2F0
IG1faW1hZ2VEZXZpY2VQaXhlbFJhdGlvOwogICAgIGJvb2wgbV9leHBlcmltZW50YWxJbWFnZU1l
bnVFbmFibGVkOwogICAgIGJvb2wgbV9oYWROYW1lQmVmb3JlQXR0cmlidXRlQ2hhbmdlZCB7IGZh
bHNlIH07IC8vIEZJWE1FOiBXZSBvbmx5IG5lZWQgdGhpcyBiZWNhdXNlIHBhcnNlQXR0cmlidXRl
KCkgY2FuJ3Qgc2VlIHRoZSBvbGQgdmFsdWUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxNYXBFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1l
bnQuY3BwCmluZGV4IDNlZTYxYmFhMDAxZTIzNGE0YjMzZjdkMTU4YmM2ODY5OTJjNDZjZjguLmVj
Yzg3NTI5NmI1M2UzMGUwMjkxNGFiNWFkYTk1ZGMzZGE0MjU2OTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1hcEVsZW1lbnQuY3BwCkBAIC03OCwxMCArNzgsOCBAQCBib29sIEhUTUxNYXBFbGVt
ZW50OjptYXBNb3VzZUV2ZW50KExheW91dFBvaW50IGxvY2F0aW9uLCBjb25zdCBMYXlvdXRTaXpl
JiBzaXplLAogSFRNTEltYWdlRWxlbWVudCogSFRNTE1hcEVsZW1lbnQ6OmltYWdlRWxlbWVudCgp
CiB7CiAgICAgaWYgKG1fbmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIEF0
b21pY1N0cmluZyBsb3dlcmNhc2VkTmFtZSA9IG1fbmFtZS5sb3dlcigpOwotICAgIEFTU0VSVChs
b3dlcmNhc2VkTmFtZS5pbXBsKCkpOwotICAgIHJldHVybiBkb2N1bWVudCgpLmltYWdlRWxlbWVu
dEJ5TG93ZXJjYXNlZFVzZW1hcCgqbG93ZXJjYXNlZE5hbWUuaW1wbCgpKTsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGRvY3VtZW50KCkuaW1hZ2VFbGVtZW50QnlDYXNlRm9s
ZGVkVXNlbWFwKCpBdG9taWNTdHJpbmcobV9uYW1lLnN0cmluZygpLmZvbGRDYXNlKCkpLmltcGwo
KSk7CiB9CiAKIHZvaWQgSFRNTE1hcEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCkBAIC0xMDEsNyArOTks
NyBAQCB2b2lkIEhUTUxNYXBFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbgogICAgICAgICBTdHJpbmcgbWFwTmFtZSA9IHZh
bHVlOwogICAgICAgICBpZiAobWFwTmFtZVswXSA9PSAnIycpCiAgICAgICAgICAgICBtYXBOYW1l
ID0gbWFwTmFtZS5zdWJzdHJpbmcoMSk7Ci0gICAgICAgIG1fbmFtZSA9IGRvY3VtZW50KCkuaXNI
VE1MRG9jdW1lbnQoKSA/IG1hcE5hbWUubG93ZXIoKSA6IG1hcE5hbWU7CisgICAgICAgIG1fbmFt
ZSA9IGRvY3VtZW50KCkuaXNIVE1MRG9jdW1lbnQoKSA/IG1hcE5hbWUuZm9sZENhc2UoKSA6IG1h
cE5hbWU7CiAgICAgICAgIGlmIChpbkRvY3VtZW50KCkpCiAgICAgICAgICAgICB0cmVlU2NvcGUo
KS5hZGRJbWFnZU1hcCgqdGhpcyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0xhbmd1YWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xhbmd1YWdlLmNwcApp
bmRleCA2NTU3OGQwZWNkZTY0ZTJmZjA1NzVlODJjNDhlNDU1MTI2YTgzOWNkLi5hOGFlOGUzYzgw
MzJmYzRkNGNkOTUxOGNiYmE1Y2MyOWY2NmY5N2QyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9MYW5ndWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGFu
Z3VhZ2UuY3BwCkBAIC05OSw3ICs5OSw3IEBAIFZlY3RvcjxTdHJpbmc+IHVzZXJQcmVmZXJyZWRM
YW5ndWFnZXMoKQogCiBzdGF0aWMgU3RyaW5nIGNhbm9uaWNhbExhbmd1YWdlSWRlbnRpZmllcihj
b25zdCBTdHJpbmcmIGxhbmd1YWdlQ29kZSkKIHsKLSAgICBTdHJpbmcgbG93ZXJjYXNlTGFuZ3Vh
Z2VDb2RlID0gbGFuZ3VhZ2VDb2RlLmxvd2VyKCk7CisgICAgU3RyaW5nIGxvd2VyY2FzZUxhbmd1
YWdlQ29kZSA9IGxhbmd1YWdlQ29kZS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOwogICAgIAog
ICAgIGlmIChsb3dlcmNhc2VMYW5ndWFnZUNvZGUubGVuZ3RoKCkgPj0gMyAmJiBsb3dlcmNhc2VM
YW5ndWFnZUNvZGVbMl0gPT0gJ18nKQogICAgICAgICBsb3dlcmNhc2VMYW5ndWFnZUNvZGUucmVw
bGFjZSgyLCAxLCAiLSIpOwpAQCAtMTA5LDcgKzEwOSw3IEBAIHN0YXRpYyBTdHJpbmcgY2Fub25p
Y2FsTGFuZ3VhZ2VJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2VDb2RlKQogCiBzaXpl
X3QgaW5kZXhPZkJlc3RNYXRjaGluZ0xhbmd1YWdlSW5MaXN0KGNvbnN0IFN0cmluZyYgbGFuZ3Vh
Z2UsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYW5ndWFnZUxpc3QsIGJvb2wmIGV4YWN0TWF0Y2gp
CiB7Ci0gICAgU3RyaW5nIGxvd2VyY2FzZUxhbmd1YWdlID0gbGFuZ3VhZ2UubG93ZXIoKTsKKyAg
ICBTdHJpbmcgbG93ZXJjYXNlTGFuZ3VhZ2UgPSBsYW5ndWFnZS5jb252ZXJ0VG9BU0NJSUxvd2Vy
Y2FzZSgpOwogICAgIFN0cmluZyBsYW5ndWFnZVdpdGhvdXRMb2NhbGVNYXRjaDsKICAgICBTdHJp
bmcgbGFuZ3VhZ2VNYXRjaEJ1dE5vdExvY2FsZTsKICAgICBzaXplX3QgbGFuZ3VhZ2VXaXRob3V0
TG9jYWxlTWF0Y2hJbmRleCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5jcHAKaW5kZXggZmRlOGUw
NjkzMGQ4NzExNGEwZGJjODdhNGFkNWEwM2IxZmNjNTQ5MC4uNWIxZTcyZWY3ZTVjNzE5YzdlODk4
ZWUzOTY1NWFhMmIyNGY1Zjc1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmNwcApAQCAtNDgyLDcg
KzQ4Miw3IEBAIGJvb2wgSGFyZkJ1enpTaGFwZXI6OnNoYXBlSGFyZkJ1enpSdW5zKGJvb2wgc2hv
dWxkU2V0RGlyZWN0aW9uKQogICAgICAgICBoYl9idWZmZXJfYWRkX3V0ZjE2KGhhcmZCdXp6QnVm
ZmVyLmdldCgpLCAmcHJlQ29udGV4dCwgMSwgMSwgMCk7CiAKICAgICAgICAgaWYgKG1fZm9udC0+
aXNTbWFsbENhcHMoKSAmJiB1X2lzbG93ZXIobV9ub3JtYWxpemVkQnVmZmVyW2N1cnJlbnRSdW4t
PnN0YXJ0SW5kZXgoKV0pKSB7Ci0gICAgICAgICAgICBTdHJpbmcgdXBwZXJUZXh0ID0gU3RyaW5n
KG1fbm9ybWFsaXplZEJ1ZmZlci5nZXQoKSArIGN1cnJlbnRSdW4tPnN0YXJ0SW5kZXgoKSwgY3Vy
cmVudFJ1bi0+bnVtQ2hhcmFjdGVycygpKS51cHBlcigpOworICAgICAgICAgICAgU3RyaW5nIHVw
cGVyVGV4dCA9IFN0cmluZyhtX25vcm1hbGl6ZWRCdWZmZXIuZ2V0KCkgKyBjdXJyZW50UnVuLT5z
dGFydEluZGV4KCksIGN1cnJlbnRSdW4tPm51bUNoYXJhY3RlcnMoKSkuY29udmVydFRvVXBwZXJj
YXNlV2l0aG91dExvY2FsZSgpOwogICAgICAgICAgICAgY3VycmVudEZvbnREYXRhID0gbV9mb250
LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIodXBwZXJUZXh0WzBdLCBmYWxzZSwgU21hbGxDYXBzVmFy
aWFudCkuZm9udDsKICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gU3RyaW5n
Vmlldyh1cHBlclRleHQpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwogICAgICAgICAgICAgaGJf
YnVmZmVyX2FkZF91dGYxNihoYXJmQnV6ekJ1ZmZlci5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50MTZfdCo+KGNoYXJhY3RlcnMpLCBjdXJyZW50UnVuLT5udW1DaGFyYWN0ZXJzKCks
IDAsIGN1cnJlbnRSdW4tPm51bUNoYXJhY3RlcnMoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuY3BwCmluZGV4IDFkMGU5ZDA2NDM3ODY0YTI0NjIx
N2I0ZWYyMDAzMmRmZjJjY2QyOGYuLmIyMGNmYzNkMjI3NzdmNjc2NmQ0Y2MzZjE1ODBhZWQ3ZDRh
ZGUxZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFBh
cnNlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNl
cnMuY3BwCkBAIC00NTYsNyArNDU2LDcgQEAgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZWZsZWN0
ZWRYU1NEaXNwb3NpdGlvbiBwYXJzZVhTU1Byb3RlY3Rpb25IZWFkZXIoY29uc3QgU3QKICNpZiBF
TkFCTEUoTk9TTklGRikKIENvbnRlbnRUeXBlT3B0aW9uc0Rpc3Bvc2l0aW9uIHBhcnNlQ29udGVu
dFR5cGVPcHRpb25zSGVhZGVyKGNvbnN0IFN0cmluZyYgaGVhZGVyKQogewotICAgIGlmIChoZWFk
ZXIuc3RyaXBXaGl0ZVNwYWNlKCkubG93ZXIoKSA9PSAibm9zbmlmZiIpCisgICAgaWYgKGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGhlYWRlci5zdHJpcFdoaXRlU3BhY2UoKSwgIm5vc25p
ZmYiKSkKICAgICAgICAgcmV0dXJuIENvbnRlbnRUeXBlT3B0aW9uc05vc25pZmY7CiAgICAgcmV0
dXJuIENvbnRlbnRUeXBlT3B0aW9uc05vbmU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL01JTUVIZWFkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcAppbmRleCA1MGVlZmJkOWExNDIzZTI2MTJmODUwYWIw
MzUwOTA1MTgwZjI4MjYxLi4zYTU5OGNjNThiYjY5MGMwYzYzMDE5YmM3YzhmOWE4OGZiOGNhNjhj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL01JTUVIZWFkZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTUlNRUhlYWRlci5jcHAK
QEAgLTcwLDcgKzcwLDcgQEAgc3RhdGljIEtleVZhbHVlTWFwIHJldHJpZXZlS2V5VmFsdWVQYWly
cyhXZWJDb3JlOjpTaGFyZWRCdWZmZXJDaHVua1JlYWRlciogYnVmZmUKICAgICAgICAgICAgIC8v
IFRoaXMgaXMgbm90IGEga2V5IHZhbHVlIHBhaXIsIGlnbm9yZS4KICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9Ci0gICAgICAgIGtleSA9IGxpbmUuc3Vic3RyaW5nKDAsIHNlbWlDb2xv
bkluZGV4KS5sb3dlcigpLnN0cmlwV2hpdGVTcGFjZSgpOworICAgICAgICBrZXkgPSBsaW5lLnN1
YnN0cmluZygwLCBzZW1pQ29sb25JbmRleCkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKS5zdHJp
cFdoaXRlU3BhY2UoKTsKICAgICAgICAgdmFsdWUuYXBwZW5kKGxpbmUuc3Vic3RyaW5nKHNlbWlD
b2xvbkluZGV4ICsgMSkpOwogICAgIH0KICAgICAvLyBTdG9yZSB0aGUgbGFzdCBwcm9wZXJ0eSBp
ZiB0aGVyZSBpcyBvbmUuCkBAIC0xMTQsMTQgKzExNCwxNCBAQCBQYXNzUmVmUHRyPE1JTUVIZWFk
ZXI+IE1JTUVIZWFkZXI6OnBhcnNlSGVhZGVyKFNoYXJlZEJ1ZmZlckNodW5rUmVhZGVyKiBidWZm
ZXIpCiAKIE1JTUVIZWFkZXI6OkVuY29kaW5nIE1JTUVIZWFkZXI6OnBhcnNlQ29udGVudFRyYW5z
ZmVyRW5jb2RpbmcoY29uc3QgU3RyaW5nJiB0ZXh0KQogewotICAgIFN0cmluZyBlbmNvZGluZyA9
IHRleHQuc3RyaXBXaGl0ZVNwYWNlKCkubG93ZXIoKTsKLSAgICBpZiAoZW5jb2RpbmcgPT0gImJh
c2U2NCIpCisgICAgU3RyaW5nIGVuY29kaW5nID0gdGV4dC5zdHJpcFdoaXRlU3BhY2UoKTsKKyAg
ICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZW5jb2RpbmcsICJiYXNlNjQiKSkK
ICAgICAgICAgcmV0dXJuIEJhc2U2NDsKLSAgICBpZiAoZW5jb2RpbmcgPT0gInF1b3RlZC1wcmlu
dGFibGUiKQorICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShlbmNvZGluZywg
InF1b3RlZC1wcmludGFibGUiKSkKICAgICAgICAgcmV0dXJuIFF1b3RlZFByaW50YWJsZTsKLSAg
ICBpZiAoZW5jb2RpbmcgPT0gIjdiaXQiKQorICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShlbmNvZGluZywgIjdiaXQiKSkKICAgICAgICAgcmV0dXJuIFNldmVuQml0OwotICAg
IGlmIChlbmNvZGluZyA9PSAiYmluYXJ5IikKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2UoZW5jb2RpbmcsICJiaW5hcnkiKSkKICAgICAgICAgcmV0dXJuIEJpbmFyeTsKICAg
ICBMT0dfRVJST1IoIlVua25vd24gZW5jb2RpbmcgJyVzJyBmb3VuZCBpbiBNSU1FIGhlYWRlci4i
LCB0ZXh0LmFzY2lpKCkuZGF0YSgpKTsKICAgICByZXR1cm4gVW5rbm93bjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZO
ZXQuY3BwCmluZGV4IDUxMzkwZjZlZDcwOGU4NWUzOWRjNDY0NTk2ZjNmNmQ5ZWVlYjZjZDEuLjZm
Nzk1N2FjYTRhMTc5N2Y1ZDk1YmMwM2VlNjgyMDZmOWM5NGY5YTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0
LmNwcApAQCAtODIsMTYgKzgyLDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFVTRShD
Rk5FVFdPUkspCiAKLXN0YXRpYyBIYXNoU2V0PFN0cmluZz4mIGFsbG93c0FueUhUVFBTQ2VydGlm
aWNhdGVIb3N0cygpCitzdGF0aWMgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZl
SGFzaD4mIGFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGVIb3N0cygpCiB7Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5nPj4gaG9zdHM7CisgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+PiBob3N0czsK
ICAgICByZXR1cm4gaG9zdHM7CiB9CiAKLXN0YXRpYyBIYXNoTWFwPFN0cmluZywgUmV0YWluUHRy
PENGRGF0YVJlZj4+JiBjbGllbnRDZXJ0cygpCitzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFJldGFp
blB0cjxDRkRhdGFSZWY+LCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiBjbGllbnRDZXJ0aWZp
Y2F0ZXMoKQogewotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJldGFpblB0cjxDRkRhdGFS
ZWY+PiBDZXJ0c01hcDsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q2VydHNNYXA+IGNlcnRz
OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFN0cmluZywgUmV0YWluUHRyPENG
RGF0YVJlZj4sIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4+IGNlcnRzOwogICAgIHJldHVybiBj
ZXJ0czsKIH0KIApAQCAtMTY5LDcgKzE2OCw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmNyZWF0
ZUNGVVJMQ29ubmVjdGlvbihib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlLCBib29sCiAj
aWYgUExBVEZPUk0oSU9TKQogICAgIHNzbFByb3BzID0gYWRvcHRDRihSZXNvdXJjZUhhbmRsZTo6
Y3JlYXRlU1NMUHJvcGVydGllc0Zyb21OU1VSTFJlcXVlc3QoZmlyc3RSZXF1ZXN0KCkpKTsKICNl
bHNlCi0gICAgaWYgKGFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGVIb3N0cygpLmNvbnRhaW5zKGZp
cnN0UmVxdWVzdCgpLnVybCgpLmhvc3QoKS5sb3dlcigpKSkgeworICAgIGlmIChhbGxvd3NBbnlI
VFRQU0NlcnRpZmljYXRlSG9zdHMoKS5jb250YWlucyhmaXJzdFJlcXVlc3QoKS51cmwoKS5ob3N0
KCkpKSB7CiAgICAgICAgIHNzbFByb3BzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRh
YmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNr
cywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKICAgICAgICAgQ0ZEaWN0aW9u
YXJ5QWRkVmFsdWUoc3NsUHJvcHMuZ2V0KCksIGtDRlN0cmVhbVNTTEFsbG93c0FueVJvb3QsIGtD
RkJvb2xlYW5UcnVlKTsKICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoc3NsUHJvcHMuZ2V0
KCksIGtDRlN0cmVhbVNTTEFsbG93c0V4cGlyZWRSb290cywga0NGQm9vbGVhblRydWUpOwpAQCAt
MTc3LDggKzE3Niw4IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZUNGVVJMQ29ubmVjdGlv
bihib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlLCBib29sCiAgICAgICAgIENGRGljdGlv
bmFyeUFkZFZhbHVlKHNzbFByb3BzLmdldCgpLCBrQ0ZTdHJlYW1TU0xWYWxpZGF0ZXNDZXJ0aWZp
Y2F0ZUNoYWluLCBrQ0ZCb29sZWFuRmFsc2UpOwogICAgIH0KIAotICAgIEhhc2hNYXA8U3RyaW5n
LCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPj46Oml0ZXJhdG9yIGNsaWVudENlcnQgPSBjbGllbnRDZXJ0
cygpLmZpbmQoZmlyc3RSZXF1ZXN0KCkudXJsKCkuaG9zdCgpLmxvd2VyKCkpOwotICAgIGlmIChj
bGllbnRDZXJ0ICE9IGNsaWVudENlcnRzKCkuZW5kKCkpIHsKKyAgICBIYXNoTWFwPFN0cmluZywg
UmV0YWluUHRyPENGRGF0YVJlZj4+OjppdGVyYXRvciBjbGllbnRDZXJ0ID0gY2xpZW50Q2VydGlm
aWNhdGVzKCkuZmluZChmaXJzdFJlcXVlc3QoKS51cmwoKS5ob3N0KCkpOworICAgIGlmIChjbGll
bnRDZXJ0ICE9IGNsaWVudENlcnRpZmljYXRlcygpLmVuZCgpKSB7CiAgICAgICAgIGlmICghc3Ns
UHJvcHMpCiAgICAgICAgICAgICBzc2xQcm9wcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRl
TXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxs
QmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CiAjaWYgUExBVEZPUk0o
V0lOKQpAQCAtNjAzLDEyICs2MDIsMTIgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1M
b2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXgKIAogdm9p
ZCBSZXNvdXJjZUhhbmRsZTo6c2V0SG9zdEFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGUoY29uc3Qg
U3RyaW5nJiBob3N0KQogewotICAgIGFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGVIb3N0cygpLmFk
ZChob3N0Lmxvd2VyKCkpOworICAgIGFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGVIb3N0cygpLmFk
ZChob3N0KTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0Q2xpZW50Q2VydGlmaWNhdGUo
Y29uc3QgU3RyaW5nJiBob3N0LCBDRkRhdGFSZWYgY2VydCkKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6
OnNldENsaWVudENlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYgaG9zdCwgQ0ZEYXRhUmVmIGNlcnRp
ZmljYXRlKQogewotICAgIGNsaWVudENlcnRzKCkuc2V0KGhvc3QubG93ZXIoKSwgY2VydCk7Cisg
ICAgY2xpZW50Q2VydGlmaWNhdGVzKCkuc2V0KGhvc3QsIGNlcnRpZmljYXRlKTsKIH0KIAogdm9p
ZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1TZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUph
ckN1cmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUph
ckN1cmwuY3BwCmluZGV4IGI5ZDZkZDRiYTc4MGVlMzU3NWU5NDgxOTJmZDk4MmI0NDdlNWYyOTYu
LmIyNzZjYTc1ZTRmYTgxYmQ4ZjBjYjhlYTMzMTllY2VjNGExYzhkZWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHAK
QEAgLTE5NSwyMCArMTk1LDIwIEBAIHN0YXRpYyBTdHJpbmcgZ2V0TmV0c2NhcGVDb29raWVGb3Jt
YXQoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgIGlmIChhdHRy
aWJ1dGUtPmNvbnRhaW5zKCc9JykpIHsKICAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGtleVZh
bHVlUGFpcjsKICAgICAgICAgICAgIGF0dHJpYnV0ZS0+c3BsaXQoJz0nLCB0cnVlLCBrZXlWYWx1
ZVBhaXIpOwotICAgICAgICAgICAgU3RyaW5nIGtleSA9IGtleVZhbHVlUGFpclswXS5zdHJpcFdo
aXRlU3BhY2UoKS5sb3dlcigpOworICAgICAgICAgICAgU3RyaW5nIGtleSA9IGtleVZhbHVlUGFp
clswXS5zdHJpcFdoaXRlU3BhY2UoKTsKICAgICAgICAgICAgIFN0cmluZyB2YWwgPSBrZXlWYWx1
ZVBhaXJbMV0uc3RyaXBXaGl0ZVNwYWNlKCk7Ci0gICAgICAgICAgICBpZiAoa2V5ID09ICJleHBp
cmVzIikgeworICAgICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGtl
eSwgImV4cGlyZXMiKSkgewogICAgICAgICAgICAgICAgIENTdHJpbmcgZGF0ZVN0cihyZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWwuY2hhcmFjdGVyczgoKSksIHZhbC5sZW5ndGgoKSk7
CiAgICAgICAgICAgICAgICAgZXhwaXJlcyA9IFdURjo6cGFyc2VEYXRlRnJvbU51bGxUZXJtaW5h
dGVkQ2hhcmFjdGVycyhkYXRlU3RyLmRhdGEoKSkgLyBXVEY6Om1zUGVyU2Vjb25kOwotICAgICAg
ICAgICAgfSBlbHNlIGlmIChrZXkgPT0gIm1heC1hZ2UiKQorICAgICAgICAgICAgfSBlbHNlIGlm
IChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShrZXksICJtYXgtYWdlIikpCiAgICAgICAg
ICAgICAgICAgZXhwaXJlcyA9IHRpbWUoMCkgKyB2YWwudG9JbnQoKTsKLSAgICAgICAgICAgIGVs
c2UgaWYgKGtleSA9PSAiZG9tYWluIikgCisgICAgICAgICAgICBlbHNlIGlmIChlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShrZXksICJkb21haW4iKSkKICAgICAgICAgICAgICAgICBkb21h
aW4gPSB2YWw7Ci0gICAgICAgICAgICBlbHNlIGlmIChrZXkgPT0gInBhdGgiKSAKKyAgICAgICAg
ICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGtleSwgInBhdGgiKSkK
ICAgICAgICAgICAgICAgICBwYXRoID0gdmFsOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgU3RyaW5nIGtleSA9IGF0dHJpYnV0ZS0+c3RyaXBXaGl0ZVNwYWNlKCkubG93ZXIoKTsKLSAg
ICAgICAgICAgIGlmIChrZXkgPT0gInNlY3VyZSIpCisgICAgICAgICAgICBTdHJpbmcga2V5ID0g
YXR0cmlidXRlLT5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICAgICAgICAgIGlmIChlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShrZXksICJzZWN1cmUiKSkKICAgICAgICAgICAgICAgICBzZWN1
cmUgPSAiVFJVRSI7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvTXVsdGlwYXJ0SGFuZGxlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9NdWx0aXBhcnRIYW5kbGUuY3BwCmluZGV4IDg5N2Y5
NWMxOTBhNTQxNjViZDk1NDc5YzQ1NGUzOTQ2YmVlZjBjYmEuLjkxMTFmYTBjZTQzMDg5N2QxYTFk
NWY3NzdmZTE3NGRhM2JkNTI4NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9NdWx0aXBhcnRIYW5kbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9NdWx0aXBhcnRIYW5kbGUuY3BwCkBAIC0zNDYsNyArMzQ2LDcg
QEAgdm9pZCBNdWx0aXBhcnRIYW5kbGU6OmRpZFJlY2VpdmVSZXNwb25zZSgpCiAgICAgICAgIFN0
cmluZyBjb250ZW50VHlwZSA9IG1faGVhZGVycy5nZXQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRU
eXBlKTsKICAgICAgICAgU3RyaW5nIG1pbWVUeXBlID0gZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlh
VHlwZShjb250ZW50VHlwZSk7CiAKLSAgICAgICAgcmVzcG9uc2UtPnNldE1pbWVUeXBlKG1pbWVU
eXBlLmxvd2VyKCkpOworICAgICAgICByZXNwb25zZS0+c2V0TWltZVR5cGUobWltZVR5cGUuY29u
dmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CiAgICAgICAgIHJlc3BvbnNlLT5zZXRUZXh0RW5jb2Rp
bmdOYW1lKGV4dHJhY3RDaGFyc2V0RnJvbU1lZGlhVHlwZShjb250ZW50VHlwZSkpOwogCiAgICAg
ICAgIGQtPmNsaWVudCgpLT5kaWRSZWNlaXZlUmVzcG9uc2UobV9yZXNvdXJjZUhhbmRsZSwgKnJl
c3BvbnNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAKaW5kZXggNDY2NzAyYWEzMTY1NWE2ZThiYzgz
MzcxNDUyMmViMmRiZTUyZGUzZi4uZjdhMDRlNjg1ZWE4OTA3OGRhYTEzOTc1ZTMyNWViZjUzODlh
MmJiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jl
c291cmNlSGFuZGxlQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAKQEAgLTEyMiw3ICsxMjIsNyBAQCB2b2lkIFJl
c291cmNlSGFuZGxlOjpjYW5jZWwoKQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpzZXRIb3N0QWxs
b3dzQW55SFRUUFNDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmIGhvc3QpCiB7Ci0gICAgYWxsb3dz
QW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3RzKGhvc3QubG93ZXIoKSk7CisgICAgYWxsb3dzQW55SFRU
UFNDZXJ0aWZpY2F0ZUhvc3RzKGhvc3QpOwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpzZXRD
bGllbnRDZXJ0aWZpY2F0ZUluZm8oY29uc3QgU3RyaW5nJiBob3N0LCBjb25zdCBTdHJpbmcmIGNl
cnRpZmljYXRlLCBjb25zdCBTdHJpbmcmIGtleSkKQEAgLTEzNCwxOCArMTM0LDExIEBAIHZvaWQg
UmVzb3VyY2VIYW5kbGU6OnNldENsaWVudENlcnRpZmljYXRlSW5mbyhjb25zdCBTdHJpbmcmIGhv
c3QsIGNvbnN0IFN0cmluZyYKIH0KIAogI2lmIFBMQVRGT1JNKFdJTikgJiYgVVNFKENGKQotLy8g
RklYTUU6ICBUaGUgQ0ZEYXRhUmVmIHdpbGwgbmVlZCB0byBiZSBzb21ldGhpbmcgZWxzZSB3aGVu
Ci0vLyBidWlsZGluZyB3aXRob3V0IAotc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBSZXRhaW5QdHI8
Q0ZEYXRhUmVmPiA+JiBjbGllbnRDZXJ0cygpCi17Ci0gICAgc3RhdGljIEhhc2hNYXA8U3RyaW5n
LCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiA+IGNlcnRzOwotICAgIHJldHVybiBjZXJ0czsKLX0KIAot
dm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0Q2xpZW50Q2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJiBo
b3N0LCBDRkRhdGFSZWYgY2VydCkKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldENsaWVudENlcnRp
ZmljYXRlKGNvbnN0IFN0cmluZyYsIENGRGF0YVJlZikKIHsKLSAgICBjbGllbnRDZXJ0cygpLnNl
dChob3N0Lmxvd2VyKCksIGNlcnQpOwogfQorCiAjZW5kaWYKIAogdm9pZCBSZXNvdXJjZUhhbmRs
ZTo6cGxhdGZvcm1TZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVN
YW5hZ2VyLmNwcAppbmRleCA0ZGYwZWE2OTZlYjJjNmU1NmIyMDI2NzYyMmM2NDQ4NmQ4NWYzNzk2
Li5hNjNhNTcyZjRjYTNmMTU5YzNkM2Y4NzYxMmI0ODM2Y2EyOGZiYWI4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VI
YW5kbGVNYW5hZ2VyLmNwcApAQCAtNDk3LDcgKzQ5Nyw3IEBAIHN0YXRpYyBzaXplX3QgaGVhZGVy
Q2FsbGJhY2soY2hhciogcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkKiBkYXRh
KQogICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldFVSTChVUkwoUGFyc2VkVVJMU3RyaW5nLCBoZHIp
KTsKIAogICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKGh0dHBDb2RlKTsK
LSAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRNaW1lVHlwZShleHRyYWN0TUlNRVR5cGVGcm9tTWVk
aWFUeXBlKGQtPm1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250
ZW50VHlwZSkpLmxvd2VyKCkpOworICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldE1pbWVUeXBlKGV4
dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUoZC0+bV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQo
SFRUUEhlYWRlck5hbWU6OkNvbnRlbnRUeXBlKSkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7
CiAgICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0VGV4dEVuY29kaW5nTmFtZShleHRyYWN0Q2hhcnNl
dEZyb21NZWRpYVR5cGUoZC0+bV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5h
bWU6OkNvbnRlbnRUeXBlKSkpOwogCiAgICAgICAgIGlmIChkLT5tX3Jlc3BvbnNlLmlzTXVsdGlw
YXJ0KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9TU0xIYW5kbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NT
TEhhbmRsZS5jcHAKaW5kZXggYjQ2MmY4OTc3ZmQzNzhmNmI1ODIxYjM5NWE3NmYwMTQ5MDZkYmNm
NC4uZDViZDQ1ZDY3ZjE5ZGJjYWQyNTViOWQzNGVhODRmZTA0MDRkNDZlMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NTTEhhbmRsZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NTTEhhbmRsZS5jcHAKQEAgLTM5
LDkgKzM5LDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVmIHN0ZDo6dHVwbGU8
V1RGOjpTdHJpbmcsIFdURjo6U3RyaW5nPiBjbGllbnRDZXJ0aWZpY2F0ZTsKLXN0YXRpYyBIYXNo
TWFwPFN0cmluZywgTGlzdEhhc2hTZXQ8U3RyaW5nPj4gYWxsb3dlZEhvc3RzOwotc3RhdGljIEhh
c2hNYXA8U3RyaW5nLCBjbGllbnRDZXJ0aWZpY2F0ZT4gYWxsb3dlZENsaWVudEhvc3RzOwordHlw
ZWRlZiBzdGQ6OnR1cGxlPFN0cmluZywgU3RyaW5nPiBjbGllbnRDZXJ0aWZpY2F0ZTsKK3N0YXRp
YyBIYXNoTWFwPFN0cmluZywgTGlzdEhhc2hTZXQ8U3RyaW5nPiwgQVNDSUlDYXNlSW5zZW5zaXRp
dmVIYXNoPiBhbGxvd2VkSG9zdHM7CitzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIGNsaWVudENlcnRp
ZmljYXRlLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+IGFsbG93ZWRDbGllbnRIb3N0czsKIAog
dm9pZCBhbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlSG9zdHMoY29uc3QgU3RyaW5nJiBob3N0KQog
ewpAQCAtNTIsMTMgKzUyLDEzIEBAIHZvaWQgYWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3Rz
KGNvbnN0IFN0cmluZyYgaG9zdCkKIHZvaWQgYWRkQWxsb3dlZENsaWVudENlcnRpZmljYXRlKGNv
bnN0IFN0cmluZyYgaG9zdCwgY29uc3QgU3RyaW5nJiBjZXJ0aWZpY2F0ZSwgY29uc3QgU3RyaW5n
JiBrZXkpCiB7CiAgICAgY2xpZW50Q2VydGlmaWNhdGUgY2xpZW50SW5mbyhjZXJ0aWZpY2F0ZSwg
a2V5KTsKLSAgICBhbGxvd2VkQ2xpZW50SG9zdHMuc2V0KGhvc3QubG93ZXIoKSwgY2xpZW50SW5m
byk7CisgICAgYWxsb3dlZENsaWVudEhvc3RzLnNldChob3N0LCBjbGllbnRJbmZvKTsKIH0KIAog
dm9pZCBzZXRTU0xDbGllbnRDZXJ0aWZpY2F0ZShSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogewog
ICAgIFN0cmluZyBob3N0ID0gaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5ob3N0KCk7Ci0g
ICAgSGFzaE1hcDxTdHJpbmcsIGNsaWVudENlcnRpZmljYXRlPjo6aXRlcmF0b3IgaXQgPSBhbGxv
d2VkQ2xpZW50SG9zdHMuZmluZChob3N0Lmxvd2VyKCkpOworICAgIGF1dG8gaXQgPSBhbGxvd2Vk
Q2xpZW50SG9zdHMuZmluZChob3N0KTsKICAgICBpZiAoaXQgPT0gYWxsb3dlZENsaWVudEhvc3Rz
LmVuZCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTcxLDcgKzcxLDcgQEAgdm9pZCBzZXRTU0xD
bGllbnRDZXJ0aWZpY2F0ZShSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogCiBib29sIHNzbElnbm9y
ZUhUVFBTQ2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJiBob3N0LCBjb25zdCBMaXN0SGFzaFNldDxT
dHJpbmc+JiBjZXJ0aWZpY2F0ZXMpCiB7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIExpc3RIYXNoU2V0
PFN0cmluZz4+OjppdGVyYXRvciBpdCA9IGFsbG93ZWRIb3N0cy5maW5kKGhvc3QpOworICAgIGF1
dG8gaXQgPSBhbGxvd2VkSG9zdHMuZmluZChob3N0KTsKICAgICBpZiAoaXQgIT0gYWxsb3dlZEhv
c3RzLmVuZCgpKSB7CiAgICAgICAgIGlmICgoaXQtPnZhbHVlKS5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgIGl0LT52YWx1ZSA9IGNlcnRpZmljYXRlczsKQEAgLTc5LDggKzc5LDggQEAgYm9vbCBz
c2xJZ25vcmVIVFRQU0NlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYgaG9zdCwgY29uc3QgTGlzdEhh
c2hTZXQ8U3RyaW5nPiYgY2UKICAgICAgICAgfQogICAgICAgICBpZiAoY2VydGlmaWNhdGVzLnNp
emUoKSAhPSBpdC0+dmFsdWUuc2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBMaXN0SGFzaFNldDxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBjZXJ0c0l0ZXIgPSBjZXJ0
aWZpY2F0ZXMuYmVnaW4oKTsKLSAgICAgICAgTGlzdEhhc2hTZXQ8U3RyaW5nPjo6aXRlcmF0b3Ig
dmFsdWVJdGVyID0gKGl0LT52YWx1ZSkuYmVnaW4oKTsKKyAgICAgICAgYXV0byBjZXJ0c0l0ZXIg
PSBjZXJ0aWZpY2F0ZXMuYmVnaW4oKTsKKyAgICAgICAgYXV0byB2YWx1ZUl0ZXIgPSAoaXQtPnZh
bHVlKS5iZWdpbigpOwogICAgICAgICBmb3IgKDsgdmFsdWVJdGVyICE9IChpdC0+dmFsdWUpLmVu
ZCgpOyArK3ZhbHVlSXRlciwgKytjZXJ0c0l0ZXIpIHsKICAgICAgICAgICAgIGlmICgqY2VydHNJ
dGVyICE9ICp2YWx1ZUl0ZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTk4
LDEzICsxOTgsMTMgQEAgc3RhdGljIGludCBjZXJ0VmVyaWZ5Q2FsbGJhY2soaW50IG9rLCBYNTA5
X1NUT1JFX0NUWCogY3R4KQogICAgIGQtPm1fc3NsRXJyb3JzID0gc3NsQ2VydGlmaWNhdGVGbGFn
KGVycik7CiAKICNpZiBQTEFURk9STShXSU4pCi0gICAgSGFzaE1hcDxTdHJpbmcsIExpc3RIYXNo
U2V0PFN0cmluZz4+OjppdGVyYXRvciBpdCA9IGFsbG93ZWRIb3N0cy5maW5kKGhvc3QpOworICAg
IGF1dG8gaXQgPSBhbGxvd2VkSG9zdHMuZmluZChob3N0KTsKICAgICBvayA9IChpdCAhPSBhbGxv
d2VkSG9zdHMuZW5kKCkpOwogI2Vsc2UKICAgICBMaXN0SGFzaFNldDxTdHJpbmc+IGNlcnRpZmlj
YXRlczsKICAgICBpZiAoIXBlbURhdGEoY3R4LCBjZXJ0aWZpY2F0ZXMpKQogICAgICAgICByZXR1
cm4gMDsKLSAgICBvayA9IHNzbElnbm9yZUhUVFBTQ2VydGlmaWNhdGUoaG9zdC5sb3dlcigpLCBj
ZXJ0aWZpY2F0ZXMpOworICAgIG9rID0gc3NsSWdub3JlSFRUUFNDZXJ0aWZpY2F0ZShob3N0LCBj
ZXJ0aWZpY2F0ZXMpOwogI2VuZGlmCiAKICAgICBpZiAob2spIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5j
cHAKaW5kZXggYzUyYzczNmNiMmU1NjI1ZGI3M2M5OTZiYjE4ZDYzZDdlZGIxZGU0OS4uMjVkMzUz
OTMwZGY4MzZlZjE3ZTRiMzQwZDAzMTQwY2JiYjFhNTFlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5j
cHAKQEAgLTI0NCwxMyArMjQ0LDEzIEBAIHN0YXRpYyB2b2lkIGNvbnRpbnVlQWZ0ZXJEaWRSZWNl
aXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqKTsKIAogc3RhdGljIGJvb2wgZ0lnbm9yZVNTTEVy
cm9ycyA9IGZhbHNlOwogCi1zdGF0aWMgSGFzaFNldDxTdHJpbmc+JiBhbGxvd3NBbnlIVFRQU0Nl
cnRpZmljYXRlSG9zdHMoKQorc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNp
dGl2ZUhhc2g+JiBhbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlSG9zdHMoKQogewotICAgIERFUFJF
Q0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFN0cmluZz4sIGhvc3RzLCAoKSk7Cisg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNp
dGl2ZUhhc2g+PiBob3N0czsKICAgICByZXR1cm4gaG9zdHM7CiB9CiAKLXR5cGVkZWYgSGFzaE1h
cDxTdHJpbmcsIEhvc3RUTFNDZXJ0aWZpY2F0ZVNldD4gQ2VydGlmaWNhdGVzTWFwOwordHlwZWRl
ZiBIYXNoTWFwPFN0cmluZywgSG9zdFRMU0NlcnRpZmljYXRlU2V0LCBBU0NJSUNhc2VJbnNlbnNp
dGl2ZUhhc2g+IENlcnRpZmljYXRlc01hcDsKIHN0YXRpYyBDZXJ0aWZpY2F0ZXNNYXAmIGNsaWVu
dENlcnRpZmljYXRlcygpCiB7CiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKENl
cnRpZmljYXRlc01hcCwgY2VydGlmaWNhdGVzLCAoKSk7CkBAIC0zMjIsMTIgKzMyMiwxMiBAQCBz
dGF0aWMgYm9vbCBoYW5kbGVVbmlnbm9yZWRUTFNFcnJvcnMoUmVzb3VyY2VIYW5kbGUqIGhhbmRs
ZSwgU291cE1lc3NhZ2UqIG1lc3NhZwogICAgIGlmICghdGxzRXJyb3JzKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBTdHJpbmcgbG93ZXJjYXNlSG9zdFVSTCA9IGhhbmRsZS0+Zmlyc3RS
ZXF1ZXN0KCkudXJsKCkuaG9zdCgpLmxvd2VyKCk7Ci0gICAgaWYgKGFsbG93c0FueUhUVFBTQ2Vy
dGlmaWNhdGVIb3N0cygpLmNvbnRhaW5zKGxvd2VyY2FzZUhvc3RVUkwpKQorICAgIFN0cmluZyBo
b3N0ID0gaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5ob3N0KCk7CisgICAgaWYgKGFsbG93
c0FueUhUVFBTQ2VydGlmaWNhdGVIb3N0cygpLmNvbnRhaW5zKGhvc3QpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICAvLyBXZSBhcmVuJ3QgaWdub3JpbmcgZXJyb3JzIGdsb2JhbGx5LCBi
dXQgdGhlIHVzZXIgbWF5IGhhdmUgYWxyZWFkeSBkZWNpZGVkIHRvIGFjY2VwdCB0aGlzIGNlcnRp
ZmljYXRlLgotICAgIGF1dG8gaXQgPSBjbGllbnRDZXJ0aWZpY2F0ZXMoKS5maW5kKGxvd2VyY2Fz
ZUhvc3RVUkwpOworICAgIGF1dG8gaXQgPSBjbGllbnRDZXJ0aWZpY2F0ZXMoKS5maW5kKGhvc3Qp
OwogICAgIGlmIChpdCAhPSBjbGllbnRDZXJ0aWZpY2F0ZXMoKS5lbmQoKSAmJiBpdC0+dmFsdWUu
Y29udGFpbnMoY2VydGlmaWNhdGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTEwODcs
MTIgKzEwODcsMTIgQEAgYm9vbCBSZXNvdXJjZUhhbmRsZTo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0
b3JhZ2UoKQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpzZXRIb3N0QWxsb3dzQW55SFRUUFNDZXJ0
aWZpY2F0ZShjb25zdCBTdHJpbmcmIGhvc3QpCiB7Ci0gICAgYWxsb3dzQW55SFRUUFNDZXJ0aWZp
Y2F0ZUhvc3RzKCkuYWRkKGhvc3QubG93ZXIoKSk7CisgICAgYWxsb3dzQW55SFRUUFNDZXJ0aWZp
Y2F0ZUhvc3RzKCkuYWRkKGhvc3QpOwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpzZXRDbGll
bnRDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmIGhvc3QsIEdUbHNDZXJ0aWZpY2F0ZSogY2VydGlm
aWNhdGUpCiB7Ci0gICAgY2xpZW50Q2VydGlmaWNhdGVzKCkuYWRkKGhvc3QubG93ZXIoKSwgSG9z
dFRMU0NlcnRpZmljYXRlU2V0KCkpLml0ZXJhdG9yLT52YWx1ZS5hZGQoY2VydGlmaWNhdGUpOwor
ICAgIGNsaWVudENlcnRpZmljYXRlcygpLmFkZChob3N0LCBIb3N0VExTQ2VydGlmaWNhdGVTZXQo
KSkuaXRlcmF0b3ItPnZhbHVlLmFkZChjZXJ0aWZpY2F0ZSk7CiB9CiAKIHZvaWQgUmVzb3VyY2VI
YW5kbGU6OnNldElnbm9yZVNTTEVycm9ycyhib29sIGlnbm9yZVNTTEVycm9ycykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nRGVm
YXVsdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFw
cGluZ0RlZmF1bHQuY3BwCmluZGV4IDViYzM2MGZjNTg2OWE2NGJlYTkzZTEyNGY2Mzg0NjdkYjlj
ZjA0ZWMuLjU1M2RiY2UyNTQ3MTdjYjIwMjFjMjlkYzE2NzI0MWUxNzNhYTNhODYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nRGVm
YXVsdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1Njcmlw
dE1hcHBpbmdEZWZhdWx0LmNwcApAQCAtMTU3LDIwICsxNTcsMjEgQEAgc3RhdGljIGNvbnN0IFNj
cmlwdE5hbWVDb2RlIHNjcmlwdE5hbWVDb2RlTGlzdFtdID0gewogfTsKIAogc3RydWN0IFNjcmlw
dE5hbWVDb2RlTWFwSGFzaFRyYWl0cyA6IHB1YmxpYyBIYXNoVHJhaXRzPFN0cmluZz4gewotICAg
IHN0YXRpYyBjb25zdCBpbnQgbWluaW11bVRhYmxlU2l6ZSA9IFdURjo6SGFzaFRhYmxlQ2FwYWNp
dHlGb3JTaXplPHNpemVvZihzY3JpcHROYW1lQ29kZUxpc3QpIC8gc2l6ZW9mKFNjcmlwdE5hbWVD
b2RlKT46OnZhbHVlOworICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11bVRhYmxlU2l6ZSA9IFdU
Rjo6SGFzaFRhYmxlQ2FwYWNpdHlGb3JTaXplPFdURl9BUlJBWV9MRU5HVEgoc2NyaXB0TmFtZUNv
ZGVMaXN0KT46OnZhbHVlOwogfTsKIAotdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVVNjcmlwdENv
ZGUsIERlZmF1bHRIYXNoPFN0cmluZz46Okhhc2gsIFNjcmlwdE5hbWVDb2RlTWFwSGFzaFRyYWl0
cz4gU2NyaXB0TmFtZUNvZGVNYXA7Cit0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBVU2NyaXB0Q29k
ZSwgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoLCBTY3JpcHROYW1lQ29kZU1hcEhhc2hUcmFpdHM+
IFNjcmlwdE5hbWVDb2RlTWFwOwogCiBVU2NyaXB0Q29kZSBzY3JpcHROYW1lVG9Db2RlKGNvbnN0
IFN0cmluZyYgc2NyaXB0TmFtZSkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U2NyaXB0
TmFtZUNvZGVNYXA+IHNjcmlwdE5hbWVDb2RlTWFwOwotICAgIGlmIChzY3JpcHROYW1lQ29kZU1h
cC5nZXQoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXpl
b2Yoc2NyaXB0TmFtZUNvZGVMaXN0KSAvIHNpemVvZihTY3JpcHROYW1lQ29kZSk7ICsraSkKLSAg
ICAgICAgICAgIHNjcmlwdE5hbWVDb2RlTWFwLmdldCgpLnNldChBU0NJSUxpdGVyYWwoc2NyaXB0
TmFtZUNvZGVMaXN0W2ldLm5hbWUpLCBzY3JpcHROYW1lQ29kZUxpc3RbaV0uY29kZSk7Ci0gICAg
fQorICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTY3JpcHROYW1lQ29kZU1hcD4gc2NyaXB0TmFt
ZUNvZGVNYXAgPSBbXSgpIHsKKyAgICAgICAgU2NyaXB0TmFtZUNvZGVNYXAgbWFwOworICAgICAg
ICBmb3IgKGF1dG8mIG5hbWVBbmRDb2RlIDogc2NyaXB0TmFtZUNvZGVMaXN0KQorICAgICAgICAg
ICAgbWFwLmFkZChBU0NJSUxpdGVyYWwobmFtZUFuZENvZGUubmFtZSksIG5hbWVBbmRDb2RlLmNv
ZGUpOworICAgICAgICByZXR1cm4gbWFwOworICAgIH0oKTsKIAotICAgIFNjcmlwdE5hbWVDb2Rl
TWFwOjppdGVyYXRvciBpdCA9IHNjcmlwdE5hbWVDb2RlTWFwLmdldCgpLmZpbmQoc2NyaXB0TmFt
ZS5sb3dlcigpKTsKKyAgICBhdXRvIGl0ID0gc2NyaXB0TmFtZUNvZGVNYXAuZ2V0KCkuZmluZChz
Y3JpcHROYW1lKTsKICAgICBpZiAoaXQgIT0gc2NyaXB0TmFtZUNvZGVNYXAuZ2V0KCkuZW5kKCkp
CiAgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAgcmV0dXJuIFVTQ1JJUFRfSU5WQUxJRF9D
T0RFOwpAQCAtMzgzLDMxICszODQsMzMgQEAgc3RhdGljIGNvbnN0IExvY2FsZVNjcmlwdCBsb2Nh
bGVTY3JpcHRMaXN0W10gPSB7CiB9OwogCiBzdHJ1Y3QgTG9jYWxlU2NyaXB0TWFwSGFzaFRyYWl0
cyA6IHB1YmxpYyBIYXNoVHJhaXRzPFN0cmluZz4gewotICAgIHN0YXRpYyBjb25zdCBpbnQgbWlu
aW11bVRhYmxlU2l6ZSA9IFdURjo6SGFzaFRhYmxlQ2FwYWNpdHlGb3JTaXplPHNpemVvZihsb2Nh
bGVTY3JpcHRMaXN0KSAvIHNpemVvZihMb2NhbGVTY3JpcHQpPjo6dmFsdWU7CisgICAgc3RhdGlj
IGNvbnN0IGludCBtaW5pbXVtVGFibGVTaXplID0gV1RGOjpIYXNoVGFibGVDYXBhY2l0eUZvclNp
emU8V1RGX0FSUkFZX0xFTkdUSChsb2NhbGVTY3JpcHRMaXN0KT46OnZhbHVlOwogfTsKIAotdHlw
ZWRlZiBIYXNoTWFwPFN0cmluZywgVVNjcmlwdENvZGUsIERlZmF1bHRIYXNoPFN0cmluZz46Okhh
c2gsIExvY2FsZVNjcmlwdE1hcEhhc2hUcmFpdHM+IExvY2FsZVNjcmlwdE1hcDsKK3R5cGVkZWYg
SGFzaE1hcDxTdHJpbmcsIFVTY3JpcHRDb2RlLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2gsIExv
Y2FsZVNjcmlwdE1hcEhhc2hUcmFpdHM+IExvY2FsZVNjcmlwdE1hcDsKIAogVVNjcmlwdENvZGUg
bG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihjb25zdCBTdHJpbmcmIGxvY2FsZSkK
IHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TG9jYWxlU2NyaXB0TWFwPiBsb2NhbGVTY3Jp
cHRNYXA7Ci0gICAgaWYgKGxvY2FsZVNjcmlwdE1hcC5nZXQoKS5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YobG9jYWxlU2NyaXB0TGlzdCkgLyBzaXpl
b2YoTG9jYWxlU2NyaXB0KTsgKytpKQotICAgICAgICAgICAgbG9jYWxlU2NyaXB0TWFwLmdldCgp
LnNldChBU0NJSUxpdGVyYWwobG9jYWxlU2NyaXB0TGlzdFtpXS5sb2NhbGUpLCBsb2NhbGVTY3Jp
cHRMaXN0W2ldLnNjcmlwdCk7Ci0gICAgfQorICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxMb2Nh
bGVTY3JpcHRNYXA+IGxvY2FsZVNjcmlwdE1hcCA9IFtdKCkgeworICAgICAgICBMb2NhbGVTY3Jp
cHRNYXAgbWFwOworICAgICAgICBmb3IgKGF1dG8mIGxvY2FsZUFuZFNjcmlwdCA6IGxvY2FsZVNj
cmlwdExpc3QpCisgICAgICAgICAgICBtYXAuYWRkKEFTQ0lJTGl0ZXJhbChsb2NhbGVBbmRTY3Jp
cHQubG9jYWxlKSwgbG9jYWxlQW5kU2NyaXB0LnNjcmlwdCk7CisgICAgICAgIHJldHVybiBtYXA7
CisgICAgfSgpOwogCi0gICAgU3RyaW5nIGNhbm9uaWNhbExvY2FsZSA9IGxvY2FsZS5sb3dlcigp
LnJlcGxhY2UoJy0nLCAnXycpOworICAgIFN0cmluZyBjYW5vbmljYWxMb2NhbGUgPSBsb2NhbGU7
CisgICAgY2Fub25pY2FsTG9jYWxlLnJlcGxhY2UoJy0nLCAnXycpOwogICAgIHdoaWxlICghY2Fu
b25pY2FsTG9jYWxlLmlzRW1wdHkoKSkgewotICAgICAgICBMb2NhbGVTY3JpcHRNYXA6Oml0ZXJh
dG9yIGl0ID0gbG9jYWxlU2NyaXB0TWFwLmdldCgpLmZpbmQoY2Fub25pY2FsTG9jYWxlKTsKKyAg
ICAgICAgYXV0byBpdCA9IGxvY2FsZVNjcmlwdE1hcC5nZXQoKS5maW5kKGNhbm9uaWNhbExvY2Fs
ZSk7CiAgICAgICAgIGlmIChpdCAhPSBsb2NhbGVTY3JpcHRNYXAuZ2V0KCkuZW5kKCkpCiAgICAg
ICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwotICAgICAgICBzaXplX3QgcG9zID0gY2Fub25pY2Fs
TG9jYWxlLnJldmVyc2VGaW5kKCdfJyk7Ci0gICAgICAgIGlmIChwb3MgPT0gbm90Rm91bmQpCisg
ICAgICAgIGF1dG8gdW5kZXJzY29yZVBvc2l0aW9uID0gY2Fub25pY2FsTG9jYWxlLnJldmVyc2VG
aW5kKCdfJyk7CisgICAgICAgIGlmICh1bmRlcnNjb3JlUG9zaXRpb24gPT0gbm90Rm91bmQpCiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgVVNjcmlwdENvZGUgY29kZSA9IHNjcmlwdE5hbWVU
b0NvZGUoY2Fub25pY2FsTG9jYWxlLnN1YnN0cmluZyhwb3MgKyAxKSk7CisgICAgICAgIFVTY3Jp
cHRDb2RlIGNvZGUgPSBzY3JpcHROYW1lVG9Db2RlKGNhbm9uaWNhbExvY2FsZS5zdWJzdHJpbmco
dW5kZXJzY29yZVBvc2l0aW9uICsgMSkpOwogICAgICAgICBpZiAoY29kZSAhPSBVU0NSSVBUX0lO
VkFMSURfQ09ERSAmJiBjb2RlICE9IFVTQ1JJUFRfVU5LTk9XTikKICAgICAgICAgICAgIHJldHVy
biBjb2RlOwotICAgICAgICBjYW5vbmljYWxMb2NhbGUgPSBjYW5vbmljYWxMb2NhbGUuc3Vic3Ry
aW5nKDAsIHBvcyk7CisgICAgICAgIGNhbm9uaWNhbExvY2FsZSA9IGNhbm9uaWNhbExvY2FsZS5z
dWJzdHJpbmcoMCwgdW5kZXJzY29yZVBvc2l0aW9uKTsKICAgICB9CiAgICAgcmV0dXJuIFVTQ1JJ
UFRfQ09NTU9OOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC93
aW4vTG9jYWxlV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvd2luL0xvY2Fs
ZVdpbi5jcHAKaW5kZXggY2NkNzRiYzQ3YTUwOTdmYTAxM2QwOWE0YjVlYjcyNGM1MzlmNzY5MS4u
ZTY3ZTI2OTdlOWRiZGVlNjc5MDE5NjA1MWIwNjg1ZTQxNTlmNzAzMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC93aW4vTG9jYWxlV2luLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dpbi9Mb2NhbGVXaW4uY3BwCkBAIC00OCw3ICs0OCw3IEBA
IHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHR5cGVkZWYgTENJ
RCAoV0lOQVBJKiBMb2NhbGVOYW1lVG9MQ0lEUHRyKShMUENXU1RSLCBEV09SRCk7Ci10eXBlZGVm
IEhhc2hNYXA8U3RyaW5nLCBMQ0lEPiBOYW1lVG9MQ0lETWFwOwordHlwZWRlZiBIYXNoTWFwPFN0
cmluZywgTENJRCwgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBOYW1lVG9MQ0lETWFwOwogCiBz
dGF0aWMgU3RyaW5nIGV4dHJhY3RMYW5ndWFnZUNvZGUoY29uc3QgU3RyaW5nJiBsb2NhbGUpCiB7
CkBAIC0xMDcsNyArMTA3LDcgQEAgc3RhdGljIExDSUQgV0lOQVBJIGNvbnZlcnRMb2NhbGVOYW1l
VG9MQ0lEKExQQ1dTVFIgbmFtZSwgRFdPUkQpCiAgICAgICAgIHJldHVybiBMT0NBTEVfVVNFUl9E
RUZBVUxUOwogICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChOYW1lVG9MQ0lETWFw
LCBtYXAsICgpKTsKICAgICBlbnN1cmVOYW1lVG9MQ0lETWFwKG1hcCk7Ci0gICAgU3RyaW5nIGxv
Y2FsZU5hbWUgPSBTdHJpbmcobmFtZSkucmVwbGFjZSgnXycsICctJykubG93ZXIoKTsKKyAgICBT
dHJpbmcgbG9jYWxlTmFtZSA9IFN0cmluZyhuYW1lKS5yZXBsYWNlKCdfJywgJy0nKTsKICAgICBk
byB7CiAgICAgICAgIE5hbWVUb0xDSURNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yID0gbWFw
LmZpbmQobG9jYWxlTmFtZSk7CiAgICAgICAgIGlmIChpdGVyYXRvciAhPSBtYXAuZW5kKCkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAKaW5kZXggM2M2
OTljZGZkZGM5M2VmNmIzNjEwMGZmYzM4OWJiODZjZTE5NzNlOC4uMDMxYmZkMjQ5NDJiNjQ3MjA2
ODdkMjgzNWJlNjNmOGEwZThkZDg0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9QYXN0ZWJvYXJkV2luLmNwcApAQCAtMTgyLDE0ICsxODIsMTQgQEAgZW51bSBDbGlwYm9hcmRE
YXRhVHlwZSB7IENsaXBib2FyZERhdGFUeXBlTm9uZSwgQ2xpcGJvYXJkRGF0YVR5cGVVUkwsIENs
aXBib2FyZEQKIAogc3RhdGljIENsaXBib2FyZERhdGFUeXBlIGNsaXBib2FyZFR5cGVGcm9tTUlN
RVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQogewotICAgIFN0cmluZyBxVHlwZSA9IHR5cGUuc3Ry
aXBXaGl0ZVNwYWNlKCkubG93ZXIoKTsKKyAgICBTdHJpbmcgc3RyaXBwZWRUeXBlID0gdHlwZS5z
dHJpcFdoaXRlU3BhY2UoKTsKIAogICAgIC8vIHR3byBzcGVjaWFsIGNhc2VzIGZvciBJRSBjb21w
YXRpYmlsaXR5Ci0gICAgaWYgKHFUeXBlID09ICJ0ZXh0IiB8fCBxVHlwZSA9PSAidGV4dC9wbGFp
biIgfHwgcVR5cGUuc3RhcnRzV2l0aCgidGV4dC9wbGFpbjsiKSkKKyAgICBpZiAoZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3RyaXBwZWRUeXBlLCAidGV4dCIpIHx8IGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKHN0cmlwcGVkVHlwZSwgInRleHQvcGxhaW4iKSB8fCBzdHJpcHBl
ZFR5cGUuc3RhcnRzV2l0aCgidGV4dC9wbGFpbjsiLCBmYWxzZSkpCiAgICAgICAgIHJldHVybiBD
bGlwYm9hcmREYXRhVHlwZVRleHQ7Ci0gICAgaWYgKHFUeXBlID09ICJ1cmwiIHx8IHFUeXBlID09
ICJ0ZXh0L3VyaS1saXN0IikKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
c3RyaXBwZWRUeXBlLCAidXJsIikgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3Ry
aXBwZWRUeXBlLCAidGV4dC91cmktbGlzdCIpKQogICAgICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0
YVR5cGVVUkw7Ci0gICAgaWYgKHFUeXBlID09ICJ0ZXh0L2h0bWwiKQorICAgIGlmIChlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpcHBlZFR5cGUsICJ0ZXh0L2h0bWwiKSkKICAgICAg
ICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBlVGV4dEhUTUw7CiAKICAgICByZXR1cm4gQ2xpcGJv
YXJkRGF0YVR5cGVOb25lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCmlu
ZGV4IDU3MzFjMGI3NDcwNjQ1NDFjOThiODk3NTBhOTViYmM2OGU5ZmM5MTguLjhjNGU4MjlhZDhk
OGJkOWNmOGUyYjU3ZjJmYWIwMGIxZjA5NzUxYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dC5jcHAKQEAgLTEwMzUsMTAgKzEwMzUsMTAgQEAgdm9pZCBhcHBseVRleHRUcmFu
c2Zvcm0oY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBTdHJpbmcmIHRleHQsIFVDaGFyIHByZXZp
b3VzQ2gKICAgICAgICAgbWFrZUNhcGl0YWxpemVkKCZ0ZXh0LCBwcmV2aW91c0NoYXJhY3Rlcik7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVVBQRVJDQVNFOgotICAgICAgICB0ZXh0ID0gdGV4
dC51cHBlcihzdHlsZS5sb2NhbGUoKSk7CisgICAgICAgIHRleHQgPSB0ZXh0LmNvbnZlcnRUb1Vw
cGVyY2FzZVdpdGhMb2NhbGUoc3R5bGUubG9jYWxlKCkpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIExPV0VSQ0FTRToKLSAgICAgICAgdGV4dCA9IHRleHQubG93ZXIoc3R5bGUubG9jYWxlKCkp
OworICAgICAgICB0ZXh0ID0gdGV4dC5jb252ZXJ0VG9Mb3dlcmNhc2VXaXRoTG9jYWxlKHN0eWxl
LmxvY2FsZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdC5jcHAKaW5kZXggZjAzNDAwNzExZTRiMjlkY2JkMjk1OTVhMjU1Zjk2ZWFkMTYw
ZGU2YS4uOWQ4MTdlMWJiODkzZDllOWEwNGJjNDNmOWI5YjdlOTMzNjFkOWFlOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCkBAIC0xMDMwLDkgKzEwMzAsNyBAQCBTdHJpbmcg
WE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlTUlNRVR5cGUoKSBjb25zdAogCiBib29sIFhNTEh0dHBS
ZXF1ZXN0OjpyZXNwb25zZUlzWE1MKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogUmVtb3ZlIHRo
ZSBsb3dlcigpIGNhbGwgd2hlbiBET01JbXBsZW1lbnRhdGlvbi5pc1hNTE1JTUVUeXBlKCkgaXMg
bW9kaWZpZWQKLSAgICAvLyAgICAgICAgdG8gZG8gY2FzZSBpbnNlbnNpdGl2ZSBNSU1FIHR5cGUg
bWF0Y2hpbmcuCi0gICAgcmV0dXJuIERPTUltcGxlbWVudGF0aW9uOjppc1hNTE1JTUVUeXBlKHJl
c3BvbnNlTUlNRVR5cGUoKS5sb3dlcigpKTsKKyAgICByZXR1cm4gRE9NSW1wbGVtZW50YXRpb246
OmlzWE1MTUlNRVR5cGUocmVzcG9uc2VNSU1FVHlwZSgpKTsKIH0KIAogaW50IFhNTEh0dHBSZXF1
ZXN0OjpzdGF0dXMoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lu
cy9XZWJCYXNlUGx1Z2luUGFja2FnZS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2Vi
QmFzZVBsdWdpblBhY2thZ2UubW0KaW5kZXggNWJjZWUyNzIzZDY1NGEzOGQwNzMwNTBlYmE2N2U4
NmY3MjJjODM1Mi4uZGU3OTZkOWVjY2I3NDRiMzI3ZDM1OWRlYTYzNTIyNDhkMjM4ODIwNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJCYXNlUGx1Z2luUGFja2FnZS5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYkJhc2VQbHVnaW5QYWNrYWdlLm1t
CkBAIC0yMTYsMTggKzIxNiwxNSBAQCAtIChCT09MKWdldFBsdWdpbkluZm9Gcm9tUExpc3RzCiAg
ICAgICAgIE1pbWVDbGFzc0luZm8gbWltZUNsYXNzSW5mbzsKICAgICAgICAgCiAgICAgICAgIE5T
QXJyYXkgKmV4dGVuc2lvbnMgPSBbW01JTUVEaWN0aW9uYXJ5IG9iamVjdEZvcktleTpXZWJQbHVn
aW5FeHRlbnNpb25zS2V5XSBfd2ViX2xvd2VyY2FzZVN0cmluZ3NdOwotICAgICAgICBmb3IgKE5T
VUludGVnZXIgaSA9IDA7IGkgPCBbZXh0ZW5zaW9ucyBjb3VudF07ICsraSkgeworICAgICAgICBm
b3IgKE5TU3RyaW5nICpleHRlbnNpb24gaW4gZXh0ZW5zaW9ucykgewogICAgICAgICAgICAgLy8g
VGhlIERpdlggcGx1Zy1pbiBsaXN0cyBtdWx0aXBsZSBleHRlbnNpb25zIGluIGEgY29tbWEgc2Vw
YXJhdGVkIHN0cmluZyBpbnN0ZWFkIG9mIHVzaW5nCiAgICAgICAgICAgICAvLyBtdWx0aXBsZSBh
cnJheSBlbGVtZW50cyBpbiB0aGUgcHJvcGVydHkgbGlzdC4gV29yayBhcm91bmQgdGhpcyBoZXJl
IGJ5IHNwbGl0dGluZyB0aGUKICAgICAgICAgICAgIC8vIGV4dGVuc2lvbiBzdHJpbmcgaW50byBj
b21wb25lbnRzLgotICAgICAgICAgICAgTlNBcnJheSAqZXh0ZW5zaW9uQ29tcG9uZW50cyA9IFtb
ZXh0ZW5zaW9ucyBvYmplY3RBdEluZGV4OmldIGNvbXBvbmVudHNTZXBhcmF0ZWRCeVN0cmluZzpA
IiwiXTsKLQotICAgICAgICAgICAgZm9yIChOU1N0cmluZyAqZXh0ZW5zaW9uIGluIGV4dGVuc2lv
bkNvbXBvbmVudHMpCi0gICAgICAgICAgICAgICAgbWltZUNsYXNzSW5mby5leHRlbnNpb25zLmFw
cGVuZChleHRlbnNpb24pOworICAgICAgICAgICAgZm9yIChOU1N0cmluZyAqY29tcG9uZW50IGlu
IFtleHRlbnNpb24gY29tcG9uZW50c1NlcGFyYXRlZEJ5U3RyaW5nOkAiLCJdKQorICAgICAgICAg
ICAgICAgIG1pbWVDbGFzc0luZm8uZXh0ZW5zaW9ucy5hcHBlbmQoY29tcG9uZW50KTsKICAgICAg
ICAgfQogCi0gICAgICAgIG1pbWVDbGFzc0luZm8udHlwZSA9IFN0cmluZyhNSU1FKS5sb3dlcigp
OwotCisgICAgICAgIG1pbWVDbGFzc0luZm8udHlwZSA9IFN0cmluZyhNSU1FKS5jb252ZXJ0VG9B
U0NJSUxvd2VyY2FzZSgpOwogICAgICAgICBtaW1lQ2xhc3NJbmZvLmRlc2MgPSBbTUlNRURpY3Rp
b25hcnkgb2JqZWN0Rm9yS2V5OldlYlBsdWdpblR5cGVEZXNjcmlwdGlvbktleV07CiAKICAgICAg
ICAgcGx1Z2luSW5mby5taW1lcy5hcHBlbmQobWltZUNsYXNzSW5mbyk7CkBAIC0yODQsMTIgKzI4
MSwxMCBAQCAtIChjb25zdCBQbHVnaW5JbmZvJilwbHVnaW5JbmZvCiAKIC0gKEJPT0wpc3VwcG9y
dHNFeHRlbnNpb246KGNvbnN0IFN0cmluZyYpZXh0ZW5zaW9uCiB7Ci0gICAgQVNTRVJUKGV4dGVu
c2lvbi5sb3dlcigpID09IGV4dGVuc2lvbik7CisgICAgQVNTRVJUKGV4dGVuc2lvbi5jb252ZXJ0
VG9BU0NJSUxvd2VyY2FzZSgpID09IGV4dGVuc2lvbik7CiAgICAgCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBwbHVnaW5JbmZvLm1pbWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBleHRlbnNpb25zID0gcGx1Z2luSW5mby5taW1lc1tpXS5leHRlbnNp
b25zOwotCi0gICAgICAgIGlmIChzdGQ6OmZpbmQoZXh0ZW5zaW9ucy5iZWdpbigpLCBleHRlbnNp
b25zLmVuZCgpLCBleHRlbnNpb24pICE9IGV4dGVuc2lvbnMuZW5kKCkpCisgICAgZm9yIChhdXRv
JiBlbnRyeSA6IHBsdWdpbkluZm8ubWltZXMpIHsKKyAgICAgICAgaWYgKGVudHJ5LmV4dGVuc2lv
bnMuY29udGFpbnMoZXh0ZW5zaW9uKSkKICAgICAgICAgICAgIHJldHVybiBZRVM7CiAgICAgfQog
CkBAIC0yOTgsMjYgKzI5MywyMyBAQCAtIChCT09MKXN1cHBvcnRzRXh0ZW5zaW9uOihjb25zdCBT
dHJpbmcmKWV4dGVuc2lvbgogCiAtIChCT09MKXN1cHBvcnRzTUlNRVR5cGU6KGNvbnN0IFdURjo6
U3RyaW5nJiltaW1lVHlwZQogewotICAgIEFTU0VSVChtaW1lVHlwZS5sb3dlcigpID09IG1pbWVU
eXBlKTsKKyAgICBBU1NFUlQobWltZVR5cGUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSA9PSBt
aW1lVHlwZSk7CiAgICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwbHVnaW5JbmZvLm1p
bWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChwbHVnaW5JbmZvLm1pbWVzW2ldLnR5cGUg
PT0gbWltZVR5cGUpCisgICAgZm9yIChhdXRvJiBlbnRyeSA6IHBsdWdpbkluZm8ubWltZXMpIHsK
KyAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT0gbWltZVR5cGUpCiAgICAgICAgICAgICByZXR1cm4g
WUVTOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBOTzsKIH0KIAogLSAoTlNTdHJpbmcgKilN
SU1FVHlwZUZvckV4dGVuc2lvbjooY29uc3QgU3RyaW5nJilleHRlbnNpb24KIHsKLSAgICBBU1NF
UlQoZXh0ZW5zaW9uLmxvd2VyKCkgPT0gZXh0ZW5zaW9uKTsKKyAgICBBU1NFUlQoZXh0ZW5zaW9u
LmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkgPT0gZXh0ZW5zaW9uKTsKICAgICAKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHBsdWdpbkluZm8ubWltZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgY29uc3QgTWltZUNsYXNzSW5mbyYgbWltZUNsYXNzSW5mbyA9IHBsdWdpbkluZm8ubWltZXNb
aV07Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBleHRlbnNpb25zID0gbWltZUNsYXNz
SW5mby5leHRlbnNpb25zOwotCi0gICAgICAgIGlmIChzdGQ6OmZpbmQoZXh0ZW5zaW9ucy5iZWdp
bigpLCBleHRlbnNpb25zLmVuZCgpLCBleHRlbnNpb24pICE9IGV4dGVuc2lvbnMuZW5kKCkpCi0g
ICAgICAgICAgICByZXR1cm4gbWltZUNsYXNzSW5mby50eXBlOworICAgIGZvciAoYXV0byYgZW50
cnkgOiBwbHVnaW5JbmZvLm1pbWVzKSB7CisgICAgICAgIGlmIChlbnRyeS5leHRlbnNpb25zLmNv
bnRhaW5zKGV4dGVuc2lvbikpCisgICAgICAgICAgICByZXR1cm4gZW50cnkudHlwZTsKICAgICB9
CiAKICAgICByZXR1cm4gbmlsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vUGx1Z2lu
cy9QbHVnaW5EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpbkRh
dGFiYXNlLmNwcAppbmRleCAxYTBjN2U4M2I4MjExY2JjZGY1NGY5ZDA2ZTM2MTM0MjhjMjhkZjcx
Li40ZjllZjJkMGNjOWI0ZjUxOGMxYzZlMmIxMWEyMGNmNTMwZTM0MmY0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcApAQCAtMTkwLDE0ICsxOTAsMTIg
QEAgaW50IFBsdWdpbkRhdGFiYXNlOjpwcmVmZXJyZWRQbHVnaW5Db21wYXJlKGNvbnN0IHZvaWQq
IGEsIGNvbnN0IHZvaWQqIGIpCiBQbHVnaW5QYWNrYWdlKiBQbHVnaW5EYXRhYmFzZTo6cGx1Z2lu
Rm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsKICAgICBpZiAobWltZVR5cGUu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICBTdHJpbmcga2V5ID0gbWltZVR5cGUubG93ZXIoKTsKLSAgICBQbHVnaW5TZXQ6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKLSAgICBQbHVnaW5QYWNrYWdlKiBwcmVm
ZXJyZWRQbHVnaW4gPSBtX3ByZWZlcnJlZFBsdWdpbnMuZ2V0KGtleSk7CisgICAgUGx1Z2luUGFj
a2FnZSogcHJlZmVycmVkUGx1Z2luID0gbV9wcmVmZXJyZWRQbHVnaW5zLmdldChtaW1lVHlwZSk7
CiAgICAgaWYgKHByZWZlcnJlZFBsdWdpbgogICAgICAgICAmJiBwcmVmZXJyZWRQbHVnaW4tPmlz
RW5hYmxlZCgpCi0gICAgICAgICYmIHByZWZlcnJlZFBsdWdpbi0+bWltZVRvRGVzY3JpcHRpb25z
KCkuY29udGFpbnMoa2V5KSkgeworICAgICAgICAmJiBwcmVmZXJyZWRQbHVnaW4tPm1pbWVUb0Rl
c2NyaXB0aW9ucygpLmNvbnRhaW5zKG1pbWVUeXBlKSkgewogICAgICAgICByZXR1cm4gcHJlZmVy
cmVkUGx1Z2luOwogICAgIH0KIApAQCAtMjA5LDcgKzIwNyw3IEBAIFBsdWdpblBhY2thZ2UqIFBs
dWdpbkRhdGFiYXNlOjpwbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQog
ICAgICAgICBpZiAoIXBsdWdpbi0+aXNFbmFibGVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
IAotICAgICAgICBpZiAocGx1Z2luLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5jb250YWlucyhrZXkp
KSB7CisgICAgICAgIGlmIChwbHVnaW4tPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmNvbnRhaW5zKG1p
bWVUeXBlKSkgewogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCiAg
ICAgICAgICAgICBpZiAoIXBsdWdpbi0+ZW5zdXJlUGx1Z2luTG9hZGVkKCkpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CkBAIC0zMDUsNyArMzAzLDcgQEAgUGx1Z2luUGFja2FnZSogUGx1Z2lu
RGF0YWJhc2U6OmZpbmRQbHVnaW4oY29uc3QgVVJMJiB1cmwsIFN0cmluZyYgbWltZVR5cGUpCiB2
b2lkIFBsdWdpbkRhdGFiYXNlOjpzZXRQcmVmZXJyZWRQbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBQbHVnaW5QYWNrYWdlKiBwbHVnaW4pCiB7CiAgICAgaWYgKCFwbHVn
aW4gfHwgcGx1Z2luLT5taW1lVG9FeHRlbnNpb25zKCkuY29udGFpbnMobWltZVR5cGUpKQotICAg
ICAgICBtX3ByZWZlcnJlZFBsdWdpbnMuc2V0KG1pbWVUeXBlLmxvd2VyKCksIHBsdWdpbik7Cisg
ICAgICAgIG1fcHJlZmVycmVkUGx1Z2lucy5zZXQobWltZVR5cGUsIHBsdWdpbik7CiB9CiAKIGJv
b2wgUGx1Z2luRGF0YWJhc2U6OmZpbGVFeGlzdHNBbmRJc05vdERpc2FibGVkKGNvbnN0IFN0cmlu
ZyYgZmlsZVBhdGgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5z
L1BsdWdpbkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpbkRhdGFi
YXNlLmgKaW5kZXggYmZjNDhlY2RmZjZjZjIyNDM1NTk0ZjhhZTg1MjMwMWE2MjYzY2Y4Ni4uZWI2
YTg0MTEyNGQ2OTc3NWI2Y2NjN2JlNDNmYmMwOWRiZjA5NzcxMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
d2luL1BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaApAQCAtMTA3LDcgKzEwNyw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgUGx1Z2luU2V0IG1fcGx1Z2luczsKICAgICAgICAgSGFzaE1h
cDxTdHJpbmcsIFJlZlB0cjxQbHVnaW5QYWNrYWdlPiA+IG1fcGx1Z2luc0J5UGF0aDsKICAgICAg
ICAgSGFzaE1hcDxTdHJpbmcsIHRpbWVfdD4gbV9wbHVnaW5QYXRoc1dpdGhUaW1lczsKLSAgICAg
ICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQbHVnaW5QYWNrYWdlPiA+IG1fcHJlZmVycmVkUGx1
Z2luczsKKyAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQbHVnaW5QYWNrYWdlPiwgQVND
SUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBtX3ByZWZlcnJlZFBsdWdpbnM7CiAjaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKICAgICAgICAgYm9vbCBtX3BlcnNpc3RlbnRN
ZXRhZGF0YUNhY2hlSXNMb2FkZWQ7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
d2luL1BsdWdpbnMvUGx1Z2luUGFja2FnZS5oIGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9Q
bHVnaW5QYWNrYWdlLmgKaW5kZXggMjgzNDA1NzY3OTdhYTZiYzgzMTc3MmJjM2I0ZjljY2Y4Y2M4
YmE2My4uZDc2ZWFmZDU3OWJiMzYwZjc3NDJlZWE0ZGNjMTEyYThlNWM3MTVhNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5QYWNrYWdlLmgKKysrIGIvU291cmNl
L1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5QYWNrYWdlLmgKQEAgLTM5LDggKzM5LDkgQEAKICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAg
IHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gTUlNRVRvRGVzY3JpcHRpb25zTWFwOwot
ICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+ID4gTUlNRVRvRXh0ZW5z
aW9uc01hcDsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZywgQVNDSUlDYXNl
SW5zZW5zaXRpdmVIYXNoPiBNSU1FVG9EZXNjcmlwdGlvbnNNYXA7CisgICAgdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgVmVjdG9yPFN0cmluZz4sIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4gTUlN
RVRvRXh0ZW5zaW9uc01hcDsKIAogICAgIGNsYXNzIFBsdWdpblBhY2thZ2UgOiBwdWJsaWMgUmVm
Q291bnRlZDxQbHVnaW5QYWNrYWdlPiB7CiAgICAgcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5QYWNrYWdlV2luLmNwcCBiL1NvdXJjZS9XZWJLaXQv
d2luL1BsdWdpbnMvUGx1Z2luUGFja2FnZVdpbi5jcHAKaW5kZXggYzJiYmNjNDUwNTk4NDA1YzVj
OGEyNGYwOGFlN2IyYTBiZTE3ODQ3Zi4uNTZlNmZiODhjMTc1N2YzYzNmN2I4OWFkNjE1Y2I2ZDg3
ZjMxNjJhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5QYWNr
YWdlV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblBhY2thZ2VX
aW4uY3BwCkBAIC0yMDAsNyArMjAwLDcgQEAgYm9vbCBQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8o
KQogICAgIGdldFZlcnNpb25JbmZvKHZlcnNpb25JbmZvRGF0YS5nZXQoKSwgIkZpbGVPcGVuTmFt
ZSIpLnNwbGl0KCd8JywgZGVzY3JpcHRpb25zKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB0eXBlcy5zaXplKCk7IGkrKykgewotICAgICAgICBTdHJpbmcgdHlwZSA9IHR5cGVzW2ld
Lmxvd2VyKCk7CisgICAgICAgIFN0cmluZyB0eXBlID0gdHlwZXNbaV0uY29udmVydFRvQVNDSUlM
b3dlcmNhc2UoKTsKICAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gaSA8IGRlc2NyaXB0aW9u
cy5zaXplKCkgPyBkZXNjcmlwdGlvbnNbaV0gOiAiIjsKICAgICAgICAgU3RyaW5nIGV4dGVuc2lv
bkxpc3QgPSBpIDwgZXh0ZW5zaW9uTGlzdHMuc2l6ZSgpID8gZXh0ZW5zaW9uTGlzdHNbaV0gOiAi
IjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJv
dG9jb2xzL0N1c3RvbVByb3RvY29sTWFuYWdlci5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL0N1c3RvbVByb3RvY29sTWFuYWdlci5oCmluZGV4IDljZmRj
Mzk2ZTEzNjk3YzI5ZDhkODdmYzFjMmEwMGJjZWJkMmM2ZWUuLmJmMmJkNDcyMDVjYTA4Zjk5M2Zi
YmNmNzVmNGRmYjJkNjA5NDg1M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL0N1c3RvbVByb3RvY29scy9DdXN0b21Qcm90b2NvbE1hbmFnZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvQ3VzdG9tUHJvdG9jb2xN
YW5hZ2VyLmgKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogT0JKQ19DTEFTUyBOU1VSTFNlc3Npb25Db25m
aWd1cmF0aW9uOwogT0JKQ19DTEFTUyBXS0N1c3RvbVByb3RvY29sOwogI2Vsc2UKQEAgLTk5LDcg
KzEwMCw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdvcmtRdWV1ZT4gbV9tZXNzYWdlUXVldWU7
CiAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBIYXNoU2V0PFN0cmluZz4gbV9yZWdpc3RlcmVk
U2NoZW1lczsKKyAgICBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBt
X3JlZ2lzdGVyZWRTY2hlbWVzOwogICAgIExvY2sgbV9yZWdpc3RlcmVkU2NoZW1lc011dGV4Owog
CiAgICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBSZXRhaW5QdHI8V0tDdXN0b21Qcm90b2Nv
bD4+IEN1c3RvbVByb3RvY29sTWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVk
L1BsdWdpbnMvTmV0c2NhcGUvbWFjL05ldHNjYXBlUGx1Z2luTW9kdWxlTWFjLm1tIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvbWFjL05ldHNjYXBlUGx1Z2luTW9kdWxl
TWFjLm1tCmluZGV4IDE1NjQxMzYxOWQzNmM1MjAzYWE1ZWJjYzg4NzJhMmY5ZDZkNDNlYTQuLjMw
NWY4NWFiNDNiNzVmMjcxMTYwOGNlYzVkNzZjNjE0ZThkYWUwNzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL21hYy9OZXRzY2FwZVBsdWdpbk1vZHVs
ZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9tYWMv
TmV0c2NhcGVQbHVnaW5Nb2R1bGVNYWMubW0KQEAgLTE4Niw3ICsxODYsNyBAQCBzdGF0aWMgYm9v
bCBnZXRQbHVnaW5JbmZvRnJvbVByb3BlcnR5TGlzdHMoQ0ZCdW5kbGVSZWYgYnVuZGxlLCBQbHVn
aW5Nb2R1bGVJbmZvJgogICAgICAgICBpZiAobWltZVR5cGVEZXNjcmlwdGlvbiAmJiBDRkdldFR5
cGVJRChtaW1lVHlwZURlc2NyaXB0aW9uKSAhPSBDRlN0cmluZ0dldFR5cGVJRCgpKQogICAgICAg
ICAgICAgbWltZVR5cGVEZXNjcmlwdGlvbiA9IDA7CiAKLSAgICAgICAgbWltZUNsYXNzSW5mby50
eXBlID0gU3RyaW5nKG1pbWVUeXBlKS5sb3dlcigpOworICAgICAgICBtaW1lQ2xhc3NJbmZvLnR5
cGUgPSBTdHJpbmcobWltZVR5cGUpLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCk7CiAgICAgICAg
IG1pbWVDbGFzc0luZm8uZGVzYyA9IG1pbWVUeXBlRGVzY3JpcHRpb247CiAKICAgICAgICAgLy8g
Tm93IGdldCB0aGUgZXh0ZW5zaW9ucyBmb3IgdGhpcyBNSU1FIHR5cGUuCkBAIC0yMDQsMTAgKzIw
NCwxMCBAQCBzdGF0aWMgYm9vbCBnZXRQbHVnaW5JbmZvRnJvbVByb3BlcnR5TGlzdHMoQ0ZCdW5k
bGVSZWYgYnVuZGxlLCBQbHVnaW5Nb2R1bGVJbmZvJgogICAgICAgICAgICAgLy8gbXVsdGlwbGUg
YXJyYXkgZWxlbWVudHMgaW4gdGhlIHByb3BlcnR5IGxpc3QuIFdvcmsgYXJvdW5kIHRoaXMgaGVy
ZSBieSBzcGxpdHRpbmcgdGhlCiAgICAgICAgICAgICAvLyBleHRlbnNpb24gc3RyaW5nIGludG8g
Y29tcG9uZW50cy4KICAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbkNvbXBvbmVu
dHM7Ci0gICAgICAgICAgICBTdHJpbmcoZXh0ZW5zaW9uKS5sb3dlcigpLnNwbGl0KCcsJywgZXh0
ZW5zaW9uQ29tcG9uZW50cyk7CisgICAgICAgICAgICBTdHJpbmcoZXh0ZW5zaW9uKS5jb252ZXJ0
VG9BU0NJSUxvd2VyY2FzZSgpLnNwbGl0KCcsJywgZXh0ZW5zaW9uQ29tcG9uZW50cyk7CiAKLSAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZXh0ZW5zaW9uQ29tcG9uZW50cy5zaXpl
KCk7ICsraSkKLSAgICAgICAgICAgICAgICBtaW1lQ2xhc3NJbmZvLmV4dGVuc2lvbnMuYXBwZW5k
KGV4dGVuc2lvbkNvbXBvbmVudHNbaV0pOworICAgICAgICAgICAgZm9yIChhdXRvJiBjb21wb25l
bnQgOiBleHRlbnNpb25Db21wb25lbnRzKQorICAgICAgICAgICAgICAgIG1pbWVDbGFzc0luZm8u
ZXh0ZW5zaW9ucy5hcHBlbmQoY29tcG9uZW50KTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEFk
ZCB0aGlzIE1JTUUgdHlwZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVn
aW5zL05ldHNjYXBlL3gxMS9OZXRzY2FwZVBsdWdpbk1vZHVsZVgxMS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS94MTEvTmV0c2NhcGVQbHVnaW5Nb2R1bGVYMTEu
Y3BwCmluZGV4IDM2Mjc1MzkyYTNjMGI0N2U3OWNkY2EwZWI2MzMxMGFlNmVmOGE5ZjQuLmFjZmNm
MDAyMzM4NGEyOWJmYTc0YjI0YmZkY2QwZmEyODRmOWIxY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL3gxMS9OZXRzY2FwZVBsdWdpbk1vZHVsZVgx
MS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUveDExL05l
dHNjYXBlUGx1Z2luTW9kdWxlWDExLmNwcApAQCAtNzYsNyArNzYsNyBAQCB2b2lkIE5ldHNjYXBl
UGx1Z2luTW9kdWxlOjpwYXJzZU1JTUVEZXNjcmlwdGlvbihjb25zdCBTdHJpbmcmIG1pbWVEZXNj
cmlwdGlvbiwgVgogICAgIEFTU0VSVF9BUkcocmVzdWx0LCByZXN1bHQuaXNFbXB0eSgpKTsKIAog
ICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOwotICAgIG1pbWVEZXNjcmlwdGlvbi5sb3dlcigpLnNw
bGl0KFVDaGFyKCc7JyksIGZhbHNlLCB0eXBlcyk7CisgICAgbWltZURlc2NyaXB0aW9uLmNvbnZl
cnRUb0FTQ0lJTG93ZXJjYXNlKCkuc3BsaXQoVUNoYXIoJzsnKSwgZmFsc2UsIHR5cGVzKTsKICAg
ICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh0eXBlcy5zaXplKCkpOwogCiAgICAgc2l6
ZV90IG1pbWVJbmZvQ291bnQgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2NvbnRleHQuY3BwCmluZGV4IDQxNjk3NzY3Y2E3Y2U2ZTNkNzYwMjg2OTczYzNl
NDNmNGMxOWFiMTUuLjczYTA1OTkwYzQyMzc1N2IwZTNlMTk2YWFmMThhODk2MzM4OWE0MzEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAK
QEAgLTU2Myw3ICs1NjMsNyBAQCB2b2lkIGV3a19jb250ZXh0X3ByZWZlcnJlZF9sYW5ndWFnZXNf
c2V0KEVpbmFfTGlzdCogbGFuZ3VhZ2VzKQogICAgICAgICBFaW5hX0xpc3QqIGw7CiAgICAgICAg
IHZvaWQqIGRhdGE7CiAgICAgICAgIEVJTkFfTElTVF9GT1JFQUNIKGxhbmd1YWdlcywgbCwgZGF0
YSkKLSAgICAgICAgICAgIHByZWZlcnJlZExhbmd1YWdlcy5hcHBlbmQoU3RyaW5nOjpmcm9tVVRG
OChzdGF0aWNfY2FzdDxjaGFyKj4oZGF0YSkpLmxvd2VyKCkucmVwbGFjZSgiXyIsICItIikpOwor
ICAgICAgICAgICAgcHJlZmVycmVkTGFuZ3VhZ2VzLmFwcGVuZChTdHJpbmc6OmZyb21VVEY4KHN0
YXRpY19jYXN0PGNoYXIqPihkYXRhKSkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKS5yZXBsYWNl
KCJfIiwgIi0iKSk7CiAgICAgfQogCiAgICAgV2ViQ29yZTo6b3ZlcnJpZGVVc2VyUHJlZmVycmVk
TGFuZ3VhZ2VzKHByZWZlcnJlZExhbmd1YWdlcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwCmluZGV4IGQ2ZjVlMTM4NWU1
ZDg5ZTM0MGVjNDI3MDE0MjQwNjNlNWFjOTE5NWEuLmFmNmQ4NzI3NjRhOWIxMmJlZjYyMWFhMzdk
NzQ5Mjc1NmI3NjFkNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYkNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwCkBAIC05NjgsNyArOTY4LDcgQEAgdm9pZCB3ZWJr
aXRfd2ViX2NvbnRleHRfc2V0X3ByZWZlcnJlZF9sYW5ndWFnZXMoV2ViS2l0V2ViQ29udGV4dCog
Y29udGV4dCwgY29uc3QKIAogICAgIFZlY3RvcjxTdHJpbmc+IGxhbmd1YWdlczsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgbGFuZ3VhZ2VMaXN0W2ldOyArK2kpCi0gICAgICAgIGxhbmd1YWdlcy5h
cHBlbmQoU3RyaW5nOjpmcm9tVVRGOChsYW5ndWFnZUxpc3RbaV0pLmxvd2VyKCkucmVwbGFjZSgi
XyIsICItIikpOworICAgICAgICBsYW5ndWFnZXMuYXBwZW5kKFN0cmluZzo6ZnJvbVVURjgobGFu
Z3VhZ2VMaXN0W2ldKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpLnJlcGxhY2UoIl8iLCAiLSIp
KTsKIAogICAgIFdlYkNvcmU6Om92ZXJyaWRlVXNlclByZWZlcnJlZExhbmd1YWdlcyhsYW5ndWFn
ZXMpOwogICAgIFdlYkNvcmU6Omxhbmd1YWdlRGlkQ2hhbmdlKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNwcAppbmRleCA2NWUz
ODQyNDY4ODAwMzYwZDc0NDE1Yjc2MDMzNjFlMDVjNWM4YTYyLi44YTk4YzYyMDFhZDc4ZTc3NjEx
ZjY4NzBkZTcyNzQ4ZTZjMmJlMWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvUGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9QbHVnaW5zL1BsdWdpbkluZm9TdG9yZS5jcHAKQEAgLTEzOCw5ICsxMzgsNyBAQCBQbHVn
aW5Nb2R1bGVJbmZvIFBsdWdpbkluZm9TdG9yZTo6ZmluZFBsdWdpbkZvckV4dGVuc2lvbihjb25z
dCBTdHJpbmcmIGV4dGVuc2lvbgogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgZm9y
IChjb25zdCBhdXRvJiBtaW1lQ2xhc3NJbmZvIDogcGx1Z2luLmluZm8ubWltZXMpIHsKLSAgICAg
ICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBleHRlbnNpb25zID0gbWltZUNsYXNzSW5mby5l
eHRlbnNpb25zOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc3RkOjpmaW5kKGV4dGVu
c2lvbnMuYmVnaW4oKSwgZXh0ZW5zaW9ucy5lbmQoKSwgZXh0ZW5zaW9uKSAhPSBleHRlbnNpb25z
LmVuZCgpKSB7CisgICAgICAgICAgICBpZiAobWltZUNsYXNzSW5mby5leHRlbnNpb25zLmNvbnRh
aW5zKGV4dGVuc2lvbikpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBmb3VuZCBhIHN1cHBvcnRl
ZCBleHRlbnNpb24sIHNldCB0aGUgY29ycmVjdCBNSU1FIHR5cGUuCiAgICAgICAgICAgICAgICAg
bWltZVR5cGUgPSBtaW1lQ2xhc3NJbmZvLnR5cGU7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHBs
dWdpbjsKQEAgLTE2MCwxMSArMTU4LDExIEBAIHN0YXRpYyBpbmxpbmUgU3RyaW5nIHBhdGhFeHRl
bnNpb24oY29uc3QgVVJMJiB1cmwpCiAgICAgICAgIGlmIChleHRlbnNpb25Qb3MgIT0gbm90Rm91
bmQpCiAgICAgICAgICAgICBleHRlbnNpb24gPSBmaWxlbmFtZS5zdWJzdHJpbmcoZXh0ZW5zaW9u
UG9zICsgMSk7CiAgICAgfQotICAgIAotICAgIHJldHVybiBleHRlbnNpb247CisgICAgcmV0dXJu
IGV4dGVuc2lvbi5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOwogfQogCiAjaWYgIVBMQVRGT1JN
KENPQ09BKQorCiBQbHVnaW5Nb2R1bGVMb2FkUG9saWN5IFBsdWdpbkluZm9TdG9yZTo6ZGVmYXVs
dExvYWRQb2xpY3lGb3JQbHVnaW4oY29uc3QgUGx1Z2luTW9kdWxlSW5mbyYpCiB7CiAgICAgcmV0
dXJuIFBsdWdpbk1vZHVsZUxvYWROb3JtYWxseTsKQEAgLTE5MCw3ICsxODgsNyBAQCBQbHVnaW5N
b2R1bGVJbmZvIFBsdWdpbkluZm9TdG9yZTo6ZmluZFBsdWdpbihTdHJpbmcmIG1pbWVUeXBlLCBj
b25zdCBVUkwmIHVybCwgUAogICAgIH0KIAogICAgIC8vIE5leHQsIGNoZWNrIGlmIGFueSBwbHVn
LWlucyBjbGFpbSB0byBzdXBwb3J0IHRoZSBVUkwgZXh0ZW5zaW9uLgotICAgIFN0cmluZyBleHRl
bnNpb24gPSBwYXRoRXh0ZW5zaW9uKHVybCkubG93ZXIoKTsKKyAgICBTdHJpbmcgZXh0ZW5zaW9u
ID0gcGF0aEV4dGVuc2lvbih1cmwpOwogICAgIGlmICghZXh0ZW5zaW9uLmlzTnVsbCgpICYmIG1p
bWVUeXBlLmlzRW1wdHkoKSkgewogICAgICAgICBQbHVnaW5Nb2R1bGVJbmZvIHBsdWdpbiA9IGZp
bmRQbHVnaW5Gb3JFeHRlbnNpb24oZXh0ZW5zaW9uLCBtaW1lVHlwZSwgYWxsb3dlZFBsdWdpblR5
cGVzKTsKICAgICAgICAgaWYgKCFwbHVnaW4ucGF0aC5pc051bGwoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggNzMxNGEzODAyYTdkMjFlMzQ3YWM2YWI3
YWViNGFkY2YxOWRmNjVhYS4uNzE2NTFlYWFlZjUzY2Q2ZDBiOWUxMDdlYTA3NTA4NDU4NWY5M2Y3
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTE4NjMs
NyArMTg2Myw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpmaW5kUGx1Z2luKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIHVpbnQzMl90IHByb2Nlc3NUeXBlLCBjb25zCiAKICAgICBNRVNTQUdFX0NIRUNL
X1VSTCh1cmxTdHJpbmcpOwogCi0gICAgbmV3TWltZVR5cGUgPSBtaW1lVHlwZS5sb3dlcigpOwor
ICAgIG5ld01pbWVUeXBlID0gbWltZVR5cGUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKICAg
ICBwbHVnaW5Mb2FkUG9saWN5ID0gUGx1Z2luTW9kdWxlTG9hZE5vcm1hbGx5OwogCiAgICAgUGx1
Z2luRGF0YTo6QWxsb3dlZFBsdWdpblR5cGVzIGFsbG93ZWRQbHVnaW5UeXBlcyA9IGFsbG93T25s
eUFwcGxpY2F0aW9uUGx1Z2lucyA/IFBsdWdpbkRhdGE6Ok9ubHlBcHBsaWNhdGlvblBsdWdpbnMg
OiBQbHVnaW5EYXRhOjpBbGxQbHVnaW5zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUG9vbC5jcHAKaW5kZXggNjJiODVlY2VhMDVkMTM4MTI2MGZiMDY2OWFkZjhkY2NiMWEy
MGQ3MC4uYmYzY2U1ZDhkZmVjODIxYTIxMDA4OWM1NjhjNmVlMGJjNzhmYmI4ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCkBAIC05MTMsOSArOTEzLDkg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0NPUlNFbmFibGVkKGNv
bnN0IFN0cmluZyYgdXJsU2NoZW1lKQogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6
V2ViUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0NPUlNFbmFibGVkKHVybFNjaGVtZSkpOwog
fQogCi1IYXNoU2V0PFN0cmluZz4mIFdlYlByb2Nlc3NQb29sOjpnbG9iYWxVUkxTY2hlbWVzV2l0
aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKQorSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vu
c2l0aXZlSGFzaD4mIFdlYlByb2Nlc3NQb29sOjpnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVBy
b3RvY29sSGFuZGxlcnMoKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0
cmluZz4+IHNldDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmcsIEFT
Q0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4+IHNldDsKICAgICByZXR1cm4gc2V0OwogfQogCkBAIC05
MjQsMTAgKzkyNCw5IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyR2xvYmFsVVJMU2No
ZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbnN0CiAgICAgaWYgKCF1cmxTY2hl
bWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZyBzY2hlbWVMb3dlciA9IHVybFNjaGVt
ZS5sb3dlcigpOwotICAgIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVy
cygpLmFkZChzY2hlbWVMb3dlcik7CisgICAgZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90
b2NvbEhhbmRsZXJzKCkuYWRkKHVybFNjaGVtZSk7CiAgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9v
bCA6IGFsbFByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+cmVnaXN0ZXJTY2hl
bWVGb3JDdXN0b21Qcm90b2NvbChzY2hlbWVMb3dlcik7CisgICAgICAgIHByb2Nlc3NQb29sLT5y
ZWdpc3RlclNjaGVtZUZvckN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7CiB9CiAKIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3Rv
Y29sSGFuZGxlcnMoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCkBAIC05MzUsMTAgKzkzNCw5IEBA
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1
c3RvbVByb3RvY29sSGFuZGxlcnMoY29uCiAgICAgaWYgKCF1cmxTY2hlbWUpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFN0cmluZyBzY2hlbWVMb3dlciA9IHVybFNjaGVtZS5sb3dlcigpOwotICAg
IGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpLnJlbW92ZShzY2hl
bWVMb3dlcik7CisgICAgZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJz
KCkucmVtb3ZlKHVybFNjaGVtZSk7CiAgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IGFsbFBy
b2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+dW5yZWdpc3RlclNjaGVtZUZvckN1
c3RvbVByb3RvY29sKHNjaGVtZUxvd2VyKTsKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPnVucmVnaXN0
ZXJTY2hlbWVGb3JDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUpOwogfQogCiAjaWYgRU5BQkxFKENB
Q0hFX1BBUlRJVElPTklORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29s
LmgKaW5kZXggZmYwNmNmNzU1MzUwNWM1NGVkZGE2OWJmZTg0YTM4NzJmYWE3ZDAyMi4uYjdjNzVk
NjA1NzE3OWJlYzA4ZjZhZWM2MDJkMzE5ZTg3YzYyZTU4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKQEAgLTMxNyw3ICszMTcsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCByZWdpc3RlclNjaGVtZUZvckN1c3RvbVByb3RvY29sKGNvbnN0IFN0cmluZyYpOwogICAg
IHZvaWQgdW5yZWdpc3RlclNjaGVtZUZvckN1c3RvbVByb3RvY29sKGNvbnN0IFN0cmluZyYpOwog
Ci0gICAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiYgZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Q
cm90b2NvbEhhbmRsZXJzKCk7CisgICAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJ
bnNlbnNpdGl2ZUhhc2g+JiBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxl
cnMoKTsKICAgICBzdGF0aWMgdm9pZCByZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3Vz
dG9tUHJvdG9jb2xIYW5kbGVycyhjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0aWMgdm9pZCB1bnJl
Z2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbnN0
IFN0cmluZyYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcAppbmRleCAyNDgzOTgzMmMwNTdh
YTVlYmZiYzc4MjhmZjkxZmFlOTcyNTI4MDM3Li5iOWIyOTZjZTFiZTg2ZGRlMjc2ZDdmMjY0NDMw
YzI1MDY4ZmE5OTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAKQEAgLTYzOCw3ICs2Mzgs
NyBAQCBib29sIE5ldHNjYXBlUGx1Z2luOjppbml0aWFsaXplKGNvbnN0IFBhcmFtZXRlcnMmIHBh
cmFtZXRlcnMpCiAKICNpZiBQTFVHSU5fQVJDSElURUNUVVJFKE1BQykKICAgICAgICAgaWYgKG1f
cGx1Z2luTW9kdWxlLT5wbHVnaW5RdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya3M6OldhbnRz
TG93ZXJjYXNlUGFyYW1ldGVyTmFtZXMpKQotICAgICAgICAgICAgcGFyYW1ldGVyTmFtZSA9IHBh
cmFtZXRlck5hbWUubG93ZXIoKTsKKyAgICAgICAgICAgIHBhcmFtZXRlck5hbWUgPSBwYXJhbWV0
ZXJOYW1lLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCk7CiAjZW5kaWYKIAogICAgICAgICBwYXJh
bU5hbWVzLmFwcGVuZChwYXJhbWV0ZXJOYW1lLnV0ZjgoKSk7CkBAIC02NzUsNyArNjc1LDcgQEAg
Ym9vbCBOZXRzY2FwZVBsdWdpbjo6aW5pdGlhbGl6ZShjb25zdCBQYXJhbWV0ZXJzJiBwYXJhbWV0
ZXJzKQogICAgIGlmIChtX3BsdWdpbk1vZHVsZS0+cGx1Z2luUXVpcmtzKCkuY29udGFpbnMoUGx1
Z2luUXVpcmtzOjpNYWtlT3BhcXVlVW5sZXNzVHJhbnNwYXJlbnRTaWx2ZXJsaWdodEJhY2tncm91
bmRBdHRyaWJ1dGVFeGlzdHMpKSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFy
YW1ldGVycy5uYW1lcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgaWYgKGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKHBhcmFtZXRlcnMubmFtZXNbaV0sICJiYWNrZ3JvdW5kIikpIHsK
LSAgICAgICAgICAgICAgICBzZXRJc1RyYW5zcGFyZW50KGlzVHJhbnNwYXJlbnRTaWx2ZXJsaWdo
dEJhY2tncm91bmRWYWx1ZShwYXJhbWV0ZXJzLnZhbHVlc1tpXS5sb3dlcigpKSk7CisgICAgICAg
ICAgICAgICAgc2V0SXNUcmFuc3BhcmVudChpc1RyYW5zcGFyZW50U2lsdmVybGlnaHRCYWNrZ3Jv
dW5kVmFsdWUocGFyYW1ldGVycy52YWx1ZXNbaV0uY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSkp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
TG9hZGVyQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCmluZGV4IDk4ZmU5OThiMDFhZTRhYWYwMDZjMWUx
ZWQxNzJkZTA0ODA2MTI4ZDMuLmI4OWQ3YTFiMzdlMzAzYzVhYTQ5NTYzY2U4NmFlMmFkZjRlOWVi
ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCkBAIC0xNTA4LDE0ICsxNTA4
LDExIEBAIFBhc3NSZWZQdHI8V2lkZ2V0PiBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlSmF2
YUFwcGxldFdpZGdldChjb25zdCBJbnRTaXplJiBwCiAKIHN0YXRpYyBib29sIHBsdWdpblN1cHBv
cnRzRXh0ZW5zaW9uKGNvbnN0IFBsdWdpbkRhdGEmIHBsdWdpbkRhdGEsIGNvbnN0IFN0cmluZyYg
ZXh0ZW5zaW9uKQogewotICAgIEFTU0VSVChleHRlbnNpb24ubG93ZXIoKSA9PSBleHRlbnNpb24p
OwotCisgICAgQVNTRVJUKGV4dGVuc2lvbi5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpID09IGV4
dGVuc2lvbik7CiAgICAgVmVjdG9yPE1pbWVDbGFzc0luZm8+IG1pbWVzOwogICAgIFZlY3Rvcjxz
aXplX3Q+IG1pbWVQbHVnaW5JbmRpY2VzOwogICAgIHBsdWdpbkRhdGEuZ2V0V2ViVmlzaWJsZU1p
bWVzQW5kUGx1Z2luSW5kaWNlcyhtaW1lcywgbWltZVBsdWdpbkluZGljZXMpOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbWltZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgTWlt
ZUNsYXNzSW5mbyYgbWltZUNsYXNzSW5mbyA9IG1pbWVzW2ldOwotCisgICAgZm9yIChhdXRvJiBt
aW1lQ2xhc3NJbmZvIDogbWltZXMpIHsKICAgICAgICAgaWYgKG1pbWVDbGFzc0luZm8uZXh0ZW5z
aW9ucy5jb250YWlucyhleHRlbnNpb24pKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQpAQCAtMTUyNCw0MiArMTUyMSwzNyBAQCBzdGF0aWMgYm9vbCBwbHVnaW5TdXBwb3J0c0V4dGVu
c2lvbihjb25zdCBQbHVnaW5EYXRhJiBwbHVnaW5EYXRhLCBjb25zdCBTdHJpbmcmCiAKIE9iamVj
dENvbnRlbnRUeXBlIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpvYmplY3RDb250ZW50VHlwZShjb25z
dCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZUluKQogewotICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCBiZSBtZXJnZWQgd2l0aCBXZWJDb3JlOjpGcmFtZUxvYWRlcjo6ZGVmYXVsdE9i
amVjdENvbnRlbnRUeXBlIHdoZW4gdGhlIHBsdWdpbiBjb2RlCi0gICAgLy8gaXMgY29uc29saWRh
dGVkLgorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBldmVudHVhbGx5IGJlIG1lcmdlZCB3aXRo
IFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpkZWZhdWx0T2JqZWN0Q29udGVudFR5cGUuCiAKICAgICBT
dHJpbmcgbWltZVR5cGUgPSBtaW1lVHlwZUluOwogICAgIGlmIChtaW1lVHlwZS5pc0VtcHR5KCkp
IHsKLSAgICAgICAgU3RyaW5nIGV4dGVuc2lvbiA9IHVybC5wYXRoKCkuc3Vic3RyaW5nKHVybC5w
YXRoKCkucmV2ZXJzZUZpbmQoJy4nKSArIDEpLmxvd2VyKCk7CisgICAgICAgIFN0cmluZyBwYXRo
ID0gdXJsLnBhdGgoKTsKKyAgICAgICAgYXV0byBkb3RQb3NpdGlvbiA9IHBhdGgucmV2ZXJzZUZp
bmQoJy4nKTsKKyAgICAgICAgaWYgKGRvdFBvc2l0aW9uID09IG5vdEZvdW5kKQorICAgICAgICAg
ICAgcmV0dXJuIE9iamVjdENvbnRlbnRGcmFtZTsKKyAgICAgICAgU3RyaW5nIGV4dGVuc2lvbiA9
IHBhdGguc3Vic3RyaW5nKGRvdFBvc2l0aW9uICsgMSkuY29udmVydFRvQVNDSUlMb3dlcmNhc2Uo
KTsKIAogICAgICAgICAvLyBUcnkgdG8gZ3Vlc3MgdGhlIE1JTUUgdHlwZSBmcm9tIHRoZSBleHRl
bnNpb24uCiAgICAgICAgIG1pbWVUeXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVG
b3JFeHRlbnNpb24oZXh0ZW5zaW9uKTsKLQogICAgICAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgp
KSB7CiAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSdzIGEgcGx1Zy1pbiBhcm91bmQgdGhh
dCBjYW4gaGFuZGxlIHRoZSBleHRlbnNpb24uCiAgICAgICAgICAgICBpZiAoV2ViUGFnZSogd2Vi
UGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkgewogICAgICAgICAgICAgICAgIGlmIChwbHVnaW5TdXBw
b3J0c0V4dGVuc2lvbih3ZWJQYWdlLT5jb3JlUGFnZSgpLT5wbHVnaW5EYXRhKCksIGV4dGVuc2lv
bikpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3RDb250ZW50TmV0c2NhcGVQbHVn
aW47CiAgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gT2JqZWN0Q29udGVudEZyYW1l
OwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1pbWVUeXBlLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIE9iamVjdENvbnRlbnRGcmFtZTsKLQotICAgIGJvb2wgcGx1Z0luU3VwcG9ydHNN
SU1FVHlwZSA9IGZhbHNlOwotICAgIGlmIChXZWJQYWdlKiB3ZWJQYWdlID0gbV9mcmFtZS0+cGFn
ZSgpKSB7Ci0gICAgICAgIGNvbnN0IFBsdWdpbkRhdGEmIHBsdWdpbkRhdGEgPSB3ZWJQYWdlLT5j
b3JlUGFnZSgpLT5wbHVnaW5EYXRhKCk7Ci0gICAgICAgIGlmIChwbHVnaW5EYXRhLnN1cHBvcnRz
TWltZVR5cGUobWltZVR5cGUsIFBsdWdpbkRhdGE6OkFsbFBsdWdpbnMpICYmIHdlYkZyYW1lKCkt
PmNvcmVGcmFtZSgpLT5sb2FkZXIoKS5zdWJmcmFtZUxvYWRlcigpLmFsbG93UGx1Z2lucygpKQot
ICAgICAgICAgICAgcGx1Z0luU3VwcG9ydHNNSU1FVHlwZSA9IHRydWU7Ci0gICAgICAgIGVsc2Ug
aWYgKHBsdWdpbkRhdGEuc3VwcG9ydHNNaW1lVHlwZShtaW1lVHlwZSwgUGx1Z2luRGF0YTo6T25s
eUFwcGxpY2F0aW9uUGx1Z2lucykpCi0gICAgICAgICAgICBwbHVnSW5TdXBwb3J0c01JTUVUeXBl
ID0gdHJ1ZTsKLSAgICB9Ci0gICAgCiAgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9y
dGVkSW1hZ2VNSU1FVHlwZShtaW1lVHlwZSkpCiAgICAgICAgIHJldHVybiBPYmplY3RDb250ZW50
SW1hZ2U7CiAKLSAgICBpZiAocGx1Z0luU3VwcG9ydHNNSU1FVHlwZSkKLSAgICAgICAgcmV0dXJu
IE9iamVjdENvbnRlbnROZXRzY2FwZVBsdWdpbjsKKyAgICBpZiAoV2ViUGFnZSogd2ViUGFnZSA9
IG1fZnJhbWUtPnBhZ2UoKSkgeworICAgICAgICBhdXRvIGFsbG93ZWRQbHVnaW5UeXBlcyA9IHdl
YkZyYW1lKCktPmNvcmVGcmFtZSgpLT5sb2FkZXIoKS5zdWJmcmFtZUxvYWRlcigpLmFsbG93UGx1
Z2lucygpCisgICAgICAgICAgICA/IFBsdWdpbkRhdGE6OkFsbFBsdWdpbnMgOiBQbHVnaW5EYXRh
OjpPbmx5QXBwbGljYXRpb25QbHVnaW5zOworICAgICAgICBpZiAod2ViUGFnZS0+Y29yZVBhZ2Uo
KS0+cGx1Z2luRGF0YSgpLnN1cHBvcnRzTWltZVR5cGUobWltZVR5cGUsIGFsbG93ZWRQbHVnaW5U
eXBlcykpCisgICAgICAgICAgICByZXR1cm4gT2JqZWN0Q29udGVudE5ldHNjYXBlUGx1Z2luOwor
ICAgIH0KIAogICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZE5vbkltYWdlTUlN
RVR5cGUobWltZVR5cGUpKQogICAgICAgICByZXR1cm4gT2JqZWN0Q29udGVudEZyYW1lOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270749</attachid>
            <date>2016-02-05 09:58:22 -0800</date>
            <delta_ts>2016-02-06 08:22:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-153905-20160205095758.patch</filename>
            <type>text/plain</type>
            <size>100383</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk2MTc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
ZDgxYjRjMDZiN2I3NTYzZjA2MjdjYjdiMmY0M2EzNTM2MTFkYmJkLi4zMDRmODkzNmFhZGI3ZWY2
NWY2MWUzZDFhZDc1MGYzYjgwNzExNTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAxNi0wMi0wNSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgRmluaXNoIGF1ZGl0aW5nIGNhbGwgc2l0ZXMgb2YgdXBwZXIoKSBhbmQgbG93ZXIo
KSwgZWxpbWluYXRlIG1hbnksIGFuZCByZW5hbWUgdGhlIGZ1bmN0aW9ucworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzOTA1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBydW50aW1lL0ludGxPYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDOjpjYW5vbmljYWxMYW5nVGFnKTogVXNlIGNvbnZlclRvQVNDSUlV
cHBlcmNhc2Ugb24gdGhlIGxhbmd1YWdlIHRhZy4KKworICAgICAgICAqIHJ1bnRpbWUvU3RyaW5n
UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVG9Mb3dlckNhc2Up
OiBUd2VhayBzdHlsZSBhbmQgdXBkYXRlIGZvciBuYW1lIGNoYW5nZS4KKyAgICAgICAgKEpTQzo6
c3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2UpOiBEaXR0by4KKwogMjAxNi0wMi0wNCAgSm9zZXBo
IFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6
IEluc3BlY3RvclRpbWVsaW5lQWdlbnQgZG9lc24ndCBuZWVkIHRvIHJlY29tcGlsZSBmdW5jdGlv
bnMgYmVjYXVzZSBpdCBub3cgdXNlcyB0aGUgc2FtcGxpbmcgcHJvZmlsZXIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggOTA5NzYx
Mzc0MmE1YWFmMTgwZjcxZGNiMmJiNTE3MGI4MzBlOTc3ZS4uNTBjMDFlY2UzNTQ5Nzk4N2Y3YzYx
NzRjMDUwNWYzOWU1NGIyNTMyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAxNi0wMi0wNSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgRmluaXNoIGF1ZGl0aW5nIGNh
bGwgc2l0ZXMgb2YgdXBwZXIoKSBhbmQgbG93ZXIoKSwgZWxpbWluYXRlIG1hbnksIGFuZCByZW5h
bWUgdGhlIGZ1bmN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTUzOTA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiB3dGYvdGV4dC9BdG9taWNTdHJpbmcuY3BwOgorICAgICAgICAoV1RGOjpBdG9t
aWNTdHJpbmc6Omxvd2VyKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvdGV4dC9BdG9taWNTdHJp
bmcuaDogRGVsZXRlZCB0aGUgbG93ZXIgZnVuY3Rpb24uCisKKyAgICAgICAgKiB3dGYvdGV4dC9T
dHJpbmdJbXBsLmNwcDoKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y29udmVydFRvTG93ZXJj
YXNlV2l0aG91dExvY2FsZSk6IFJlbmFtZWQgZnJvbSBsb3dlci4KKyAgICAgICAgKFdURjo6U3Ry
aW5nSW1wbDo6Y29udmVydFRvVXBwZXJjYXNlV2l0aG91dExvY2FsZSk6IFJlbmFtZWQgZnJvbSB1
cHBlci4KKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y29udmVydFRvTG93ZXJjYXNlV2l0aExv
Y2FsZSk6IFJlbmFtZWQgZnJvbSBsb3dlci4KKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y29u
dmVydFRvVXBwZXJjYXNlV2l0aExvY2FsZSk6IFJlbmFtZWQgZnJvbSB1cHBlci4KKyAgICAgICAg
KFdURjo6U3RyaW5nSW1wbDo6Zm9sZENhc2UpOiBBZGRlZCBmYXN0IGNhc2VzIGZvciBBU0NJSSBz
aW5jZSB0aGlzIGlzCisgICAgICAgIG5vdyB1c2VkIGluIHNvbWUgbW9yZS1wZXJmb3JtYW5jZS1j
cml0aWNhbCBjb2RlLgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDogUmVuYW1lZCBs
b3dlciBhbmQgdXBwZXIuCisKKyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuY3BwOgorICAg
ICAgICAoV1RGOjpTdHJpbmc6OmNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGUpOiBSZW5h
bWVkIGZyb20gbG93ZXIuCisgICAgICAgIChXVEY6OlN0cmluZzo6Y29udmVydFRvVXBwZXJjYXNl
V2l0aG91dExvY2FsZSk6IFJlbmFtZWQgZnJvbSB1cHBlci4KKyAgICAgICAgKFdURjo6U3RyaW5n
Ojpjb252ZXJ0VG9Mb3dlcmNhc2VXaXRoTG9jYWxlKTogUmVuYW1lZCBmcm9tIGxvd2VyLgorICAg
ICAgICAoV1RGOjpTdHJpbmc6OmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhMb2NhbGUpOiBSZW5hbWVk
IGZyb20gdXBwZXIuCisgICAgICAgICogd3RmL3RleHQvV1RGU3RyaW5nLmg6IFJlbmFtZWQgbG93
ZXIgYW5kIHVwcGVyLiBSZW1vdmVkIHVubmVlZGVkIGNvbW1lbnQuCisKIDIwMTYtMDItMDMgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIENvbnZlcnQgYW5vdGhlciBi
YXRjaCBvZiBTdHJpbmc6Omxvd2VyIGNhbGxzaXRlcyB0byBzb21ldGhpbmcgYmV0dGVyLCB0eXBp
Y2FsbHkgY29udmVydFRvQVNDSUlMb3dlcmNhc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkN2ZiMjIzNzg0NTgy
MTg0MTVmNGNhN2ZiYWQzNjFiMjE3MGFmYzk2Li40ZDgwN2E1YTEyOTI0YjMyMmU5Mzk1OWY2ZjRh
MTBiYzJmMTdjMGQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMwIEBACisyMDE2LTAyLTA1ICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBGaW5pc2ggYXVkaXRpbmcg
Y2FsbCBzaXRlcyBvZiB1cHBlcigpIGFuZCBsb3dlcigpLCBlbGltaW5hdGUgbWFueSwgYW5kIHJl
bmFtZSB0aGUgZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTM5MDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTb3VyY2U6OmlzVHlwZVN1cHBvcnRlZCk6IFVzZSBjb252ZXJ0VG9B
U0NJSUxvd2VyY2FzZSBvbiBNSU1FIHR5cGUuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9i
amVjdDo6c2VsZWN0VGV4dCk6IFVzZSBuZXcgbmFtZXMgZm9yIGxvd2VyIGFuZCB1cHBlci4gQWxz
bworICAgICAgICB0d2Vha2VkIHN0eWxlIGEgdGlueSBiaXQgYW5kIHVzZWQgdV90b3VwcGVyIHJh
dGhlciB0aGFuIGNvbnZlcnRpbmcgYW4gZW50aXJlCisgICAgICAgIHN0cmluZyB0byB1cHBlcmNh
c2UuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OmFkZEltYWdlRWxlbWVudEJ5Q2FzZUZvbGRlZFVzZW1hcCk6IFJlbmFtZWQgdG8gcmVm
bGVjdCB0aGUgdXNlCisgICAgICAgIG9mIGNhc2UgZm9sZGluZyByYXRoZXIgdGhhbiBsb3dlcmNh
c2luZy4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZW1vdmVJbWFnZUVsZW1lbnRCeUNh
c2VGb2xkZWRVc2VtYXApOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjppbWFn
ZUVsZW1lbnRCeUNhc2VGb2xkZWRVc2VtYXApOiBEaXR0by4KKyAgICAgICAgKiBkb20vRG9jdW1l
bnQuaDogRGl0dG8uCisgICAgICAgICogZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeUNhc2VGb2xkZWRN
YXBOYW1lKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE9yZGVyZWRNYXA6Omdl
dEVsZW1lbnRCeUNhc2VGb2xkZWRVc2VtYXApOiBEaXR0by4KKyAgICAgICAgKiBkb20vRG9jdW1l
bnRPcmRlcmVkTWFwLmg6IERpdHRvLgorCisgICAgICAgICogZG9tL1RyZWVTY29wZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6OmdldEltYWdlTWFwKTogUmVtb3ZlZCB1bm5lZWRl
ZCBzcGVjaWFsIGNhc2UgZm9yIG51bGwgc3RyaW5nLgorICAgICAgICBTaW1wbGlmaWVkIGxvZ2lj
IGZvciBjYXNlcyB3aGVyZSB0aGUgVVJMIGRvZXMgbm90IGhhdmUgYSAiIyIgY2hhcmFjdGVyIGlu
IGl0LgorICAgICAgICBVc2UgY2FzZSBmb2xkaW5nIGluc3RlYWQgb2YgbG93ZXJjYXNlLgorCisg
ICAgICAgICogZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tOgorICAgICAgICAoSFRNTENv
bnZlcnRlcjo6X3Byb2Nlc3NUZXh0KTogUmVtb3ZlZCB1bm5lZGVkIHNwZWNpYWwgY2FzZSBmb3Ig
dGhlIGVtcHR5IHN0cmluZy4KKyAgICAgICAgVXNlIG1ha0NhcGl0YWxpemVkIGluc3RlYWQgb2Yg
Q29jb2EgZnVuY3Rpb24gZm9yICJjYXBpdGFsaXplIi4gVXNlIHVwcGVyIGFuZCBsb3dlcgorICAg
ICAgICBmdW5jdGlvbnMgYnkgdGhlaXIgbmV3IG5hbWVzLgorCisgICAgICAgICogaHRtbC9IVE1M
SW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OnBh
cnNlQXR0cmlidXRlKTogVXNlIGNhc2UgZm9sZGluZyBpbnN0ZWFkIG9mCisgICAgICAgIGxvd2Vy
YXNpbmcgZm9yIHRoZSB1c2VtYXAgYXR0cmlidXRlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElt
YWdlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1M
SW1hZ2VFbGVtZW50OjpyZW1vdmVkRnJvbSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEltYWdlRWxlbWVudDo6bWF0Y2hlc0Nhc2VGb2xkZWRVc2VtYXApOiBEaXR0by4KKyAgICAgICAg
KiBodG1sL0hUTUxJbWFnZUVsZW1lbnQuaDogUmVuYW1lIHNpbmNlIHVzZW1hcCBpcyBjYXNlIGZv
bGRlZCBub3csIG5vdCBsb3dlcmNhc2VkLgorCisgICAgICAgICogaHRtbC9IVE1MTWFwRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFwRWxlbWVudDo6aW1hZ2VFbGVtZW50KTog
VXNlIGNhc2UgZm9sZGluZyBpbnN0ZWFkIG9mIGxvd2VyY2FzaW5nCisgICAgICAgIGZvciB1c2Vt
YXAuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFwRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOiBE
aXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL0xhbmd1YWdlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNhbm9uaWNhbExhbmd1YWdlSWRlbnRpZmllcik6IFVzZSBjb252ZXJ0VG9BU0NJSUxvd2Vy
Y2FzZSBmb3IgbGFuZ3VhZ2UgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6OmluZGV4T2ZCZXN0TWF0
Y2hpbmdMYW5ndWFnZUluTGlzdCk6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1
enpTaGFwZXI6OnNoYXBlSGFyZkJ1enpSdW5zKTogVXNlIG5ldyBuYW1lIGZvciB0aGUgdXBwZXIg
ZnVuY3Rpb24uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnBhcnNlQ29udGVudFR5cGVPcHRpb25zSGVhZGVyKTogVXNlIGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlIGluc3RlYWQKKyAgICAgICAgb2YgbG93ZXJjYXNp
bmcgdG8gY2hlY2sgZm9yIGEgc3BlY2lmaWMgaGVhZGVyIHZhbHVlLgorCisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJldHJpZXZl
S2V5VmFsdWVQYWlycyk6IFVzZSBjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSBmb3IgTUlNRSBoZWFk
ZXIgbmFtZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1JTUVIZWFkZXI6OnBhcnNlQ29udGVudFRyYW5z
ZmVyRW5jb2RpbmcpOiBVc2UgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UKKyAgICAgICAg
aW5zdGVhZCBvZiBsb3dlcmNhc2luZy4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2Yv
UmVzb3VyY2VIYW5kbGVDRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphbGxvd3NBbnlIVFRQ
U0NlcnRpZmljYXRlSG9zdHMpOiBNYWtlIHRoaXMgaGFzaCBBU0NJSSBjYXNlLWluc2Vuc2l0aXZl
LgorICAgICAgICAoV2ViQ29yZTo6Y2xpZW50Q2VydGlmaWNhdGVzKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlQ0ZVUkxDb25uZWN0aW9uKTogUmVtb3Zl
IGNhbGwgdG8gbG93ZXIgc2luY2UgdGhlCisgICAgICAgIHNldCBpcyBub3cgQVNDSUkgY2FzZS1p
bnNlbnNpdGl2ZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzZXRIb3N0QWxs
b3dzQW55SFRUUFNDZXJ0aWZpY2F0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VIYW5kbGU6OnNldENsaWVudENlcnRpZmljYXRlKTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpn
ZXROZXRzY2FwZUNvb2tpZUZvcm1hdCk6IFVzZSBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZSBpbnN0ZWFkIG9mCisgICAgICAgIGxvd2VyY2FzaW5nLgorCisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9jdXJsL011bHRpcGFydEhhbmRsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNdWx0
aXBhcnRIYW5kbGU6OmRpZFJlY2VpdmVSZXNwb25zZSk6IFVzZSBjb252ZXJ0VG9BU0NJSUxvd2Vy
Y2FzZSB0bworICAgICAgICBtYWtlIGEgTUlNRSB0eXBlIGxvd2VyY2FzZS4KKworICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNldEhvc3RBbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRl
KTogUmVtb3ZlZCB1bm5lZWRlZAorICAgICAgICBjb252ZXJzaW9uIHRvIGxvd2VyY2FzZSBub3cg
dGhhdCB0aGUgc2V0IGlzIEFTQ0lJIGNhc2UtaW5zZW5zaXRpdmUuCisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZUhhbmRsZTo6c2V0Q2xpZW50Q2VydGlmaWNhdGUpOiBSZW1vdmVkIGNvZGUgdGhh
dCBwb3B1bGF0ZXMgYSBtYXAKKyAgICAgICAgdGhhdCBpcyB0aGVuIG5ldmVyIHVzZWQgZm9yIGFu
eXRoaW5nLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxl
TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoZWFkZXJDYWxsYmFjayk6IFVzZSBjb252
ZXJ0VG9BU0NJSUxvd2VyY2FzZSBmb3IgTUlNRSB0eXBlLgorCisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9jdXJsL1NTTEhhbmRsZS5jcHA6IE1hZGUgaGFzaCBtYXBzIGtleWVkIGJ5IGhvc3Qg
bmFtZXMKKyAgICAgICAgQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZS4KKyAgICAgICAgKFdlYkNvcmU6
OmFkZEFsbG93ZWRDbGllbnRDZXJ0aWZpY2F0ZSk6IFJlbW92ZWQgbG93ZXJjYXNpbmcgc2luY2Ug
dGhlIG1hcCBpdHNlbGYKKyAgICAgICAgaXMgbm93IEFTQ0lJIGNhc2UgaW5zZW5zaXR2ZS4KKyAg
ICAgICAgKFdlYkNvcmU6OnNldFNTTENsaWVudENlcnRpZmljYXRlKTogRGl0dG8uIEFsc28gdXNl
IGF1dG8gZm9yIGl0ZXJhdG9yIHR5cGUgc28gd2UKKyAgICAgICAgZG9uJ3QgaGF2ZSB0byB3cml0
ZSBvdXQgdGhlIG1hcCB0eXBlLgorICAgICAgICAoV2ViQ29yZTo6c3NsSWdub3JlSFRUUFNDZXJ0
aWZpY2F0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Y2VydFZlcmlmeUNhbGxiYWNrKTog
RGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVT
b3VwLmNwcDogTWFkZSBoYXNoIG1hcHMga2V5ZWQgYnkgaG9zdCBuYW1lcworICAgICAgICBBU0NJ
SSBjYXNlLWluc2Vuc2l0aXZlLgorICAgICAgICAoV2ViQ29yZTo6YWxsb3dzQW55SFRUUFNDZXJ0
aWZpY2F0ZUhvc3RzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVVbmlnbm9yZWRU
TFNFcnJvcnMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzZXRI
b3N0QWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGU6OnNldENsaWVudENlcnRpZmljYXRlKTogRGl0dG8uCisKKyAgICAgICAg
KiBwbGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwOiBNYWRlIGhh
c2ggbWFwcyBrZXllZCBieSBzY3JpcHQKKyAgICAgICAgbmFtZXMgQVNDSUkgY2FzZS1pbnNlbnNp
dGl2ZS4gVVNFIFdURl9BUlJBWV9MRU5HVEggYXMgYXBwcm9wcmlhdGUuCisgICAgICAgIChXZWJD
b3JlOjpzY3JpcHROYW1lVG9Db2RlKTogVXNlIG1vZGVybiBzdHlsZSB0byBpbml0aWFsaXplIHRo
ZSBtYXAuIFJlbW92ZWQKKyAgICAgICAgdW5uZWNlc3NhcnkgbG93ZXJjYXNpbmcgb2YgdGhlIHNj
cmlwdCBuYW1lIGJlZm9yZSBsb29raW5nIGF0IHRoZSBtYXAuCisgICAgICAgIChXZWJDb3JlOjps
b2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9uKTogRGl0dG8uCisKKyAgICAgICAgKiBw
bGF0Zm9ybS90ZXh0L3dpbi9Mb2NhbGVXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVy
dExvY2FsZU5hbWVUb0xDSUQpOiBNYWRlIG1hcCBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIGFuZCBy
ZW1vdmVkCisgICAgICAgIHVubmVlZGVkIGxvd2VyY2FzaW5nLgorCisgICAgICAgICogcGxhdGZv
cm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2xpcGJvYXJkVHlw
ZUZyb21NSU1FVHlwZSk6IFVzZSBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSBpbnN0ZWFk
CisgICAgICAgIG9mIGxvd2VyY2FzaW5nLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlUZXh0VHJhbnNmb3JtKTogVXNlIG5ldyBu
YW1lcyBmb3IgdGhlIHVwcGVyIGFuZCBsb3dlciBmdW5jdGlvbnMuCisKKyAgICAgICAgKiB4bWwv
WE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnJl
c3BvbnNlSXNYTUwpOiBSZW1vdmUgdW5uZWVkZWQgbG93ZXJjYXNpbmcsIHNpbmNlCisgICAgICAg
IERPTUltcGxlbWVudGF0aW9uIG5vdyBoYXMgQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZSBoYW5kbGlu
ZyBvZiBNSU1FIHR5cGVzLgorCiAyMDE2LTAyLTA1ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlz
dGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQ2xlYW4gdXAgQmxvYiBjb2RlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFu
Z2VMb2cKaW5kZXggNzRkZjE4YmJkMThiZGNhZTIzNDAzYTUxZWE3MWFmMWE5YjZkYjlkMC4uOTlh
Y2UzNWE5MDUwNzI3OWRkMWI4M2U1YmFiOGVhMzIwMDMzMjNkZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE3IEBACisyMDE2LTAyLTA1ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBGaW5pc2ggYXVkaXRpbmcgY2FsbCBzaXRlcyBvZiB1cHBlcigpIGFuZCBs
b3dlcigpLCBlbGltaW5hdGUgbWFueSwgYW5kIHJlbmFtZSB0aGUgZnVuY3Rpb25zCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTM5MDUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsdWdpbnMvV2ViQmFz
ZVBsdWdpblBhY2thZ2UubW06CisgICAgICAgICgtW1dlYkJhc2VQbHVnaW5QYWNrYWdlIGdldFBs
dWdpbkluZm9Gcm9tUExpc3RzXSk6IFVzZSBtb2Rlcm4gZm9yIGxvb3BzLgorICAgICAgICAoLVtX
ZWJCYXNlUGx1Z2luUGFja2FnZSBzdXBwb3J0c0V4dGVuc2lvbjpdKTogVXNlIGNvbnZlcnRUb0FT
Q0lJTG93ZXJjYXNlIGZvciBleHRlbnNpb24gYXNzZXJ0LgorICAgICAgICBBbHNvIHVzZSBtb2Rl
cm4gZm9yIGxvb3AuCisgICAgICAgICgtW1dlYkJhc2VQbHVnaW5QYWNrYWdlIHN1cHBvcnRzTUlN
RVR5cGU6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJCYXNlUGx1Z2luUGFja2FnZSBNSU1FVHlw
ZUZvckV4dGVuc2lvbjpdKTogRGl0dG8uCisKIDIwMTYtMDItMDMgIEplc3NpZSBCZXJsaW4gIDxq
YmVybGluQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQnVpbGQgZml4LgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCmlu
ZGV4IDJjZTRhODc2Y2JiNTg0MjI4ZTlhNTU2YWVkYmNmN2NjY2QyZWYwMDEuLjFhMDRjNDE2MjRk
NTU4ZDBkZGY3YzgzNjJkNmI1MzJmNWVmY2ZlMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
d2luL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyMiBAQAorMjAxNi0wMi0wNSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAg
ICAgICAgRmluaXNoIGF1ZGl0aW5nIGNhbGwgc2l0ZXMgb2YgdXBwZXIoKSBhbmQgbG93ZXIoKSwg
ZWxpbWluYXRlIG1hbnksIGFuZCByZW5hbWUgdGhlIGZ1bmN0aW9ucworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzOTA1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbHVnaW5zL1BsdWdpbkRhdGFiYXNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpwbHVnaW5Gb3JNSU1FVHlw
ZSk6IFVzZSBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIG1hcCByYXRoZXIKKyAgICAgICAgdGhhbiBs
b3dlcmNhc2luZyB0aGUgTUlNRSB0eXBlLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJh
c2U6OnNldFByZWZlcnJlZFBsdWdpbkZvck1JTUVUeXBlKTogRGl0dG8uCisKKyAgICAgICAgKiBQ
bHVnaW5zL1BsdWdpbkRhdGFiYXNlLmg6IE1ha2UgbV9wcmVmZXJyZWRQbHVnaW5zIHVzZSBhbiBB
U0NJSSBjYXNlLWluc2Vuc2l0aXZlIGhhc2guCisKKyAgICAgICAgKiBQbHVnaW5zL1BsdWdpblBh
Y2thZ2UuaDogVXNlIEFTQ0lJIGNhc2UtaW5zZW5zaXRpdmUgaGFzaCBmb3IgbWFwcyBrZXllZCBi
eSBNSU1FIHR5cGUuCisKKyAgICAgICAgKiBQbHVnaW5zL1BsdWdpblBhY2thZ2VXaW4uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKTogVXNlIGNvbnZlcnRU
b0FTQ0lJTG93ZXJjYXNlIHRvIGxvd2VyY2FzZSBhIE1JTUUgdHlwZS4KKwogMjAxNi0wMi0wNCAg
Sm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IEluc3BlY3RvclRpbWVsaW5lQWdlbnQgZG9lc24ndCBuZWVkIHRvIHJlY29tcGlsZSBm
dW5jdGlvbnMgYmVjYXVzZSBpdCBub3cgdXNlcyB0aGUgc2FtcGxpbmcgcHJvZmlsZXIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwppbmRleCAwYTFlNTMwM2EwNmQxOGI3ODM2YmJlN2MzN2Q1ZWY1NDIwYjg2MWUzLi42NGNiMDhm
NDA5ZjNiMWRiZGQzYjliNTkzOTNmNDg4YTcxYjdjYWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
NjAgQEAKKzIwMTYtMDItMDUgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAg
ICAgIEZpbmlzaCBhdWRpdGluZyBjYWxsIHNpdGVzIG9mIHVwcGVyKCkgYW5kIGxvd2VyKCksIGVs
aW1pbmF0ZSBtYW55LCBhbmQgcmVuYW1lIHRoZSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzkwNQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJv
dG9jb2xzL0N1c3RvbVByb3RvY29sTWFuYWdlci5oOiBVc2UgQVNDSUkgY2FzZS1pbnNlbnNpdGl2
ZSBoYXNoCisgICAgICAgIGZvciBzZXQgb2YgcmVnaXN0ZXJlZCBzY2hlbWVzLgorCisgICAgICAg
ICogU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvbWFjL05ldHNjYXBlUGx1Z2luTW9kdWxlTWFjLm1t
OgorICAgICAgICAoV2ViS2l0OjpnZXRQbHVnaW5JbmZvRnJvbVByb3BlcnR5TGlzdHMpOiBVc2Ug
Y29udmVydFRvQVNDSUlMb3dlcmNhc2UgZm9yIE1JTUUgdHlwZSBhbmQKKyAgICAgICAgZm9yIGZp
bGUgZXh0ZW5zaW9ucy4KKworICAgICAgICAqIFNoYXJlZC9QbHVnaW5zL05ldHNjYXBlL3gxMS9O
ZXRzY2FwZVBsdWdpbk1vZHVsZVgxMS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1
Z2luTW9kdWxlOjpwYXJzZU1JTUVEZXNjcmlwdGlvbik6IFVzZSBjb252ZXJ0VG9BU0NJSUxvd2Vy
Y2FzZSBmb3IKKyAgICAgICAgTUlNRSBkZXNjcmlwdGlvbi4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcDoKKyAgICAgICAgKGV3a19jb250ZXh0X3ByZWZlcnJl
ZF9sYW5ndWFnZXNfc2V0KTogVXNlIGNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlIGZvciBsYW5ndWFn
ZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwOgor
ICAgICAgICAod2Via2l0X3dlYl9jb250ZXh0X3NldF9wcmVmZXJyZWRfbGFuZ3VhZ2VzKTogVXNl
IGNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlIGZvciBsYW5ndWFnZS4KKworICAgICAgICAqIFVJUHJv
Y2Vzcy9QbHVnaW5zL1BsdWdpbkluZm9TdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdp
bkluZm9TdG9yZTo6ZmluZFBsdWdpbkZvckV4dGVuc2lvbik6IFVzZSBWZWN0b3I6OmNvbnRhaW5z
IGluc3RlYWQgb2YKKyAgICAgICAgd3JpdGluZyBpdCBvdXQgdXNpbmcgc3RkOjpmaW5kLgorICAg
ICAgICAoV2ViS2l0OjpwYXRoRXh0ZW5zaW9uKTogTG93ZXJjYXNlIHRoZSByZXN1bHQgd2l0aCBj
b252ZXJ0VG9BU0NJSUxvd2VyY2FzZSBpbnN0ZWFkIG9mCisgICAgICAgIGxlYXZpbmcgdGhhdCB0
byB0aGUgY2FsbGVyLgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5JbmZvU3RvcmU6OmZpbmRQbHVn
aW4pOiBSZW1vdmVkIGNhbGwgdG8gbG93ZXIgc2luY2UgcGF0aEV4dGVuc2lvbgorICAgICAgICBo
YW5kbGVzIHRoYXQgbm93LgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZmluZFBsdWdpbik6IFVzZSBjb252ZXJ0
VG9BU0NJSUxvd2VyY2FzZSBmb3IgTUlNRSB0eXBlLgorCisgICAgICAgICogVUlQcm9jZXNzL1dl
YlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omdsb2Jh
bFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyk6IFVzZQorICAgICAgICBhbiBB
U0NJSSBjYXNlLWluc2Vuc2l0aXZlIGhhc2guCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVy
cyk6CisgICAgICAgIFJlbW92ZSBsb3dlcmNhc2luZywgc2luY2UgdGhlIGhhc2ggaXMgbm93IEFT
Q0lJIGNhc2UtaW5zZW5zaXRpdmUuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1
bnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToK
KyAgICAgICAgRGl0dG8uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaDog
VXNlIGFuIEFTQ0lJIGNhc2UtaW5zZW5zaXRpdmUgaGFzaC4KKworICAgICAgICAqIFdlYlByb2Nl
c3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHA6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHNjYXBlUGx1Z2luOjppbml0aWFsaXplKTogVXNlIGNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNl
IG9uIHBhcmFtZXRlciBuYW1lcworICAgICAgICBhbmQgdmFsdWVzLgorCisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OnBsdWdpblN1cHBvcnRzRXh0ZW5zaW9uKTogVXNlIGNvbnZlcnRUb0FTQ0lJTG93
ZXJjYXNlIGZvciBleHRlbnNpb24gYXNzZXJ0aW9uLgorICAgICAgICBBbHNvIHVzZSBhIG1vZGVy
biBmb3IgbG9vcC4KKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVMb2FkZXJDbGllbnQ6Om9iamVj
dENvbnRlbnRUeXBlKTogTWFrZSB0aGUgY2hlY2tzIGZvciBlbXB0eSBNSU1FIHR5cGVzCisgICAg
ICAgIGEgbGl0dGxlIGxlc3MgcmVkdW5kYW50LiBSZW9yZGVyZWQgbG9naWMgdG8gYXZvaWQgY2hl
Y2tpbmcgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIE1JTUUKKyAgICAgICAgdHlwZXMgZXh0cmEgdGlt
ZXMsIGFuZCB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIGEgYm9vbGVhbi4gVXNlIGNvbnZlcnRU
b0FTQ0lJTG93ZXJjYXNlCisgICAgICAgIG9uIHRoZSBleHRlbnNpb24uCisKIDIwMTYtMDItMDUg
IEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBD
bGVhbiB1cCBCbG9iIGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9i
amVjdC5jcHAKaW5kZXggZjk4Y2Q1NGZhN2EwMDlhZTY3ZTc2ZjNjYmRlNmM5ZGI4ZDM3NDllZC4u
OWU4ZjAzMzYzMGJiYjc1M2RkOTRmZTVhY2NjYmRiOTQ3MTNhMjU3MyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAKQEAgLTMyMiw3ICszMjIsNyBAQCBz
dGF0aWMgU3RyaW5nIGNhbm9uaWNhbExhbmdUYWcoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcnRz
KQogICAgICAgICBpZiAoaXNWYWxpZFJlZ2lvbikgewogICAgICAgICAgICAgKytjdXJyZW50SW5k
ZXg7CiAgICAgICAgICAgICBjYW5vbmljYWwuYXBwZW5kKCctJyk7Ci0gICAgICAgICAgICBjYW5v
bmljYWwuYXBwZW5kKHJlZ2lvbi51cHBlcigpKTsKKyAgICAgICAgICAgIGNhbm9uaWNhbC5hcHBl
bmQocmVnaW9uLmNvbnZlcnRUb0FTQ0lJVXBwZXJjYXNlKCkpOwogICAgICAgICB9CiAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5
cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNw
cAppbmRleCAyZDUwMmIwNDhhZmIwMTU1MDNmYTk1MjQ3YmExMzJkODFmYjE5ZjExLi5kNWRjZGJi
NzE0NWFhMjQyY2I3YmQ4ZjRhOWUwZDQ1NTIyNjlkZWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKQEAgLTE0MDYsMTcgKzE0MDYs
MTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUb0xvd2Vy
Q2FzZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4
ZWMpOwogICAgIEpTU3RyaW5nKiBzVmFsID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOwogICAg
IGNvbnN0IFN0cmluZyYgcyA9IHNWYWwtPnZhbHVlKGV4ZWMpOwotCi0gICAgaW50IHNTaXplID0g
cy5sZW5ndGgoKTsKLSAgICBpZiAoIXNTaXplKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHNWYWwpOwotICAgIFJFTEVBU0VfQVNTRVJUKHNTaXplID49IDApOwotCi0gICAgU3RyaW5n
SW1wbCogb3VySW1wbCA9IHMuaW1wbCgpOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBsb3dlciA9
IG91ckltcGwtPmxvd2VyKCk7Ci0gICAgaWYgKG91ckltcGwgPT0gbG93ZXIpCisgICAgU3RyaW5n
IGxvd2VyY2FzZWRTdHJpbmcgPSBzLmNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGUoKTsK
KyAgICBpZiAobG93ZXJjYXNlZFN0cmluZy5pbXBsKCkgPT0gcy5pbXBsKCkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoc1ZhbCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1N0cmluZyhleGVjLCBTdHJpbmcobG93ZXIucmVsZWFzZSgpKSkpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgbG93ZXJjYXNlZFN0cmluZykpOwogfQogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RvVXBwZXJDYXNlKEV4ZWNT
dGF0ZSogZXhlYykKQEAgLTE0MjYsMTYgKzE0MTksMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUb1VwcGVyQ2FzZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEpTU3RyaW5nKiBzVmFsID0g
dGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOwogICAgIGNvbnN0IFN0cmluZyYgcyA9IHNWYWwtPnZh
bHVlKGV4ZWMpOwotCi0gICAgaW50IHNTaXplID0gcy5sZW5ndGgoKTsKLSAgICBpZiAoIXNTaXpl
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNWYWwpOwotCi0gICAgU3RyaW5nSW1w
bCogc0ltcGwgPSBzLmltcGwoKTsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gdXBwZXIgPSBzSW1w
bC0+dXBwZXIoKTsKLSAgICBpZiAoc0ltcGwgPT0gdXBwZXIpCisgICAgU3RyaW5nIHVwcGVyY2Fz
ZWRTdHJpbmcgPSBzLmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhvdXRMb2NhbGUoKTsKKyAgICBpZiAo
dXBwZXJjYXNlZFN0cmluZy5pbXBsKCkgPT0gcy5pbXBsKCkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoc1ZhbCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhl
eGVjLCBTdHJpbmcodXBwZXIucmVsZWFzZSgpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNTdHJpbmcoZXhlYywgdXBwZXJjYXNlZFN0cmluZykpOwogfQogCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0xvY2FsZUNvbXBhcmUoRXhlY1N0YXRlKiBl
eGVjKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmcuY3BwIGIv
U291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmcuY3BwCmluZGV4IDk5ZTBkNmU1OTE3ZTg0
ZDU4MDRkMTA5Njk0NWU3MjFhZjc0ZDg4NTAuLmE5ZmVmMTUxNzZkNDUwODAwZTVhMjU3OWM1NDM3
ZjNlOGRkNDcwZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5n
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5jcHAKQEAgLTMyLDIy
ICszMiw2IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCi1BdG9taWNTdHJpbmcgQXRvbWljU3RyaW5n
Ojpsb3dlcigpIGNvbnN0Ci17Ci0gICAgLy8gTm90ZTogVGhpcyBpcyBhIGhvdCBmdW5jdGlvbiBp
biB0aGUgRHJvbWFlbyBiZW5jaG1hcmsuCi0gICAgU3RyaW5nSW1wbCogaW1wbCA9IHRoaXMtPmlt
cGwoKTsKLSAgICBpZiAoVU5MSUtFTFkoIWltcGwpKQotICAgICAgICByZXR1cm4gQXRvbWljU3Ry
aW5nKCk7Ci0KLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbG93ZXJjYXNlZFN0cmluZyA9IGltcGwt
Pmxvd2VyKCk7Ci0gICAgaWYgKExJS0VMWShsb3dlcmNhc2VkU3RyaW5nID09IGltcGwpKQotICAg
ICAgICByZXR1cm4gKnRoaXM7Ci0KLSAgICBBdG9taWNTdHJpbmcgcmVzdWx0OwotICAgIHJlc3Vs
dC5tX3N0cmluZyA9IEF0b21pY1N0cmluZ0ltcGw6OmFkZChsb3dlcmNhc2VkU3RyaW5nLmdldCgp
KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiB0ZW1wbGF0ZTxBdG9taWNTdHJpbmc6OkNhc2VD
b252ZXJ0VHlwZSB0eXBlPgogQUxXQVlTX0lOTElORSBBdG9taWNTdHJpbmcgQXRvbWljU3RyaW5n
Ojpjb252ZXJ0QVNDSUlDYXNlKCkgY29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L3RleHQvQXRvbWljU3RyaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5o
CmluZGV4IGE5ZTQwNjkxYmE2Y2RhZGRhNjQ0MDRlNWVjZDA1ZWNmNTYwOTY4ZWEuLmFiYmRiNDVk
ZWYyOTlmNGFkZWZmYjAzZTNkNmU0ZDU4YWQ1MDZjZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL3RleHQvQXRvbWljU3RyaW5nLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNT
dHJpbmcuaApAQCAtMTU1LDcgKzE1NSw2IEBAIHB1YmxpYzoKIAogICAgIFdURl9FWFBPUlRfU1RS
SU5HX0FQSSBBdG9taWNTdHJpbmcgY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSBjb25zdDsKICAg
ICBXVEZfRVhQT1JUX1NUUklOR19BUEkgQXRvbWljU3RyaW5nIGNvbnZlcnRUb0FTQ0lJVXBwZXJj
YXNlKCkgY29uc3Q7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIEF0b21pY1N0cmluZyBsb3dl
cigpIGNvbnN0OwogCiAgICAgaW50IHRvSW50KGJvb2wqIG9rID0gMCkgY29uc3QgeyByZXR1cm4g
bV9zdHJpbmcudG9JbnQob2spOyB9CiAgICAgZG91YmxlIHRvRG91YmxlKGJvb2wqIG9rID0gMCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJpbmcudG9Eb3VibGUob2spOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdJbXBsLmNwcAppbmRleCBjYjNkMDI0YmJhOTA5ZjJhYmU4MjVhM2Y5YTA0MTIzZGE1MzUzYTBi
Li43Zjc5NDg5MDdjNjk5MzIwNDQxYTE4OWYxYWIyYjJkYjI2OWQ3NWU3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvU3RyaW5nSW1wbC5jcHAKQEAgLTM2MSw5ICszNjEsOSBAQCBVQ2hhcjMyIFN0cmluZ0ltcGw6
OmNoYXJhY3RlclN0YXJ0aW5nQXQodW5zaWduZWQgaSkKICAgICByZXR1cm4gMDsKIH0KIAotUmVm
PFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6Omxvd2VyKCkKK1JlZjxTdHJpbmdJbXBsPiBTdHJpbmdJ
bXBsOjpjb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlKCkKIHsKLSAgICAvLyBOb3RlOiBU
aGlzIGlzIGEgaG90IGZ1bmN0aW9uIGluIHRoZSBEcm9tYWVvIGJlbmNobWFyaywgc3BlY2lmaWNh
bGx5IHRoZQorICAgIC8vIE5vdGU6IEF0IG9uZSB0aW1lIHRoaXMgd2FzIGEgaG90IGZ1bmN0aW9u
IGluIHRoZSBEcm9tYWVvIGJlbmNobWFyaywgc3BlY2lmaWNhbGx5IHRoZQogICAgIC8vIG5vLW9w
IGNvZGUgcGF0aCB1cCB0aHJvdWdoIHRoZSBmaXJzdCAncmV0dXJuJyBzdGF0ZW1lbnQuCiAKICAg
ICAvLyBGaXJzdCBzY2FuIHRoZSBzdHJpbmcgZm9yIHVwcGVyY2FzZSBhbmQgbm9uLUFTQ0lJIGNo
YXJhY3RlcnM6CkBAIC00NDIsMTEgKzQ0MiwxMiBAQCBTbG93UGF0aDoKICAgICByZXR1cm4gbmV3
SW1wbC5yZWxlYXNlTm9uTnVsbCgpOwogfQogCi1SZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6
dXBwZXIoKQorUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNvbnZlcnRUb1VwcGVyY2FzZVdp
dGhvdXRMb2NhbGUoKQogewotICAgIC8vIFRoaXMgZnVuY3Rpb24gY291bGQgYmUgb3B0aW1pemVk
IGZvciBuby1vcCBjYXNlcyB0aGUgd2F5IGxvd2VyKCkgaXMsCi0gICAgLy8gYnV0IGluIGVtcGly
aWNhbCB0ZXN0aW5nLCBmZXcgYWN0dWFsIGNhbGxzIHRvIHVwcGVyKCkgYXJlIG5vLW9wcywgc28K
LSAgICAvLyBpdCB3b3VsZG4ndCBiZSB3b3J0aCB0aGUgZXh0cmEgdGltZSBmb3IgcHJlLXNjYW5u
aW5nLgorICAgIC8vIFRoaXMgZnVuY3Rpb24gY291bGQgYmUgb3B0aW1pemVkIGZvciBuby1vcCBj
YXNlcyB0aGUgd2F5CisgICAgLy8gY29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZSgpIGlz
LCBidXQgaW4gZW1waXJpY2FsIHRlc3RpbmcsCisgICAgLy8gZmV3IGFjdHVhbCBjYWxscyB0byB1
cHBlcigpIGFyZSBuby1vcHMsIHNvIGl0IHdvdWxkbid0IGJlIHdvcnRoCisgICAgLy8gdGhlIGV4
dHJhIHRpbWUgZm9yIHByZS1zY2FubmluZy4KIAogICAgIGlmIChtX2xlbmd0aCA+IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkpCiAgICAg
ICAgIENSQVNIKCk7CkBAIC00NzcsNyArNDc4LDcgQEAgUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0lt
cGw6OnVwcGVyKCkKICAgICAgICAgaW50IG51bWJlclNoYXJwU0NoYXJhY3RlcnMgPSAwOwogCiAg
ICAgICAgIC8vIFRoZXJlIGFyZSB0d28gc3BlY2lhbCBjYXNlcy4KLSAgICAgICAgLy8gIDEuIGxh
dGluLTEgY2hhcmFjdGVycyB3aGVuIGNvbnZlcnRlZCB0byB1cHBlciBjYXNlIGFyZSAxNiBiaXQg
Y2hhcmFjdGVycy4KKyAgICAgICAgLy8gIDEuIFNvbWUgTGF0aW4tMSBjaGFyYWN0ZXJzIHdoZW4g
Y29udmVydGVkIHRvIHVwcGVyIGNhc2UgYXJlIDE2IGJpdCBjaGFyYWN0ZXJzLgogICAgICAgICAv
LyAgMi4gTG93ZXIgY2FzZSBzaGFycC1TIGNvbnZlcnRzIHRvICJTUyIgKHR3byBjaGFyYWN0ZXJz
KQogICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAg
ICAgICAgTENoYXIgYyA9IG1fZGF0YThbaV07CkBAIC00ODUsNyArNDg2LDcgQEAgUmVmPFN0cmlu
Z0ltcGw+IFN0cmluZ0ltcGw6OnVwcGVyKCkKICAgICAgICAgICAgICAgICArK251bWJlclNoYXJw
U0NoYXJhY3RlcnM7CiAgICAgICAgICAgICBBU1NFUlQodV90b3VwcGVyKGMpIDw9IDB4RkZGRik7
CiAgICAgICAgICAgICBVQ2hhciB1cHBlciA9IHVfdG91cHBlcihjKTsKLSAgICAgICAgICAgIGlm
IChVTkxJS0VMWSh1cHBlciA+IDB4ZmYpKSB7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkodXBw
ZXIgPiAweEZGKSkgewogICAgICAgICAgICAgICAgIC8vIFNpbmNlIHRoaXMgdXBwZXItY2FzZWQg
Y2hhcmFjdGVyIGRvZXMgbm90IGZpdCBpbiBhbiA4LWJpdCBzdHJpbmcsIHdlIG5lZWQgdG8gdGFr
ZSB0aGUgMTYtYml0IHBhdGguCiAgICAgICAgICAgICAgICAgZ290byB1cGNvbnZlcnQ7CiAgICAg
ICAgICAgICB9CkBAIC01NTQsMTQgKzU1NSwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmVlZHNU
dXJraXNoQ2FzaW5nUnVsZXMoY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyKQog
ICAgICAgICAmJiAobG9jYWxlSWRlbnRpZmllci5sZW5ndGgoKSA9PSAyIHx8IGxvY2FsZUlkZW50
aWZpZXJbMl0gPT0gJy0nKTsKIH0KIAotUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6Omxvd2Vy
KGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcikKK1JlZjxTdHJpbmdJbXBsPiBT
dHJpbmdJbXBsOjpjb252ZXJ0VG9Mb3dlcmNhc2VXaXRoTG9jYWxlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgbG9jYWxlSWRlbnRpZmllcikKIHsKICAgICAvLyBVc2UgdGhlIG1vcmUtb3B0aW1pemVkIGNv
ZGUgcGF0aCBtb3N0IG9mIHRoZSB0aW1lLgogICAgIC8vIEFzc3VtaW5nIGhlcmUgdGhhdCB0aGUg
b25seSBsb2NhbGUtc3BlY2lmaWMgbG93ZXJjYXNpbmcgaXMgdGhlIFR1cmtpc2ggY2FzaW5nIHJ1
bGVzLgogICAgIC8vIEZJWE1FOiBDb3VsZCBwb3NzaWJseSBvcHRpbWl6ZSBmdXJ0aGVyIGJ5IGxv
b2tpbmcgZm9yIHRoZSBzcGVjaWZpYyBzZXF1ZW5jZXMKICAgICAvLyB0aGF0IGhhdmUgbG9jYWxl
LXNwZWNpZmljIGxvd2VyY2FzaW5nLiBUaGVyZSBhcmUgb25seSB0aHJlZSBvZiB0aGVtLgogICAg
IGlmICghbmVlZHNUdXJraXNoQ2FzaW5nUnVsZXMobG9jYWxlSWRlbnRpZmllcikpCi0gICAgICAg
IHJldHVybiBsb3dlcigpOworICAgICAgICByZXR1cm4gY29udmVydFRvTG93ZXJjYXNlV2l0aG91
dExvY2FsZSgpOwogCiAgICAgLy8gRklYTUU6IENvdWxkIHNoYXJlIG1vcmUgY29kZSB3aXRoIHRo
ZSBtYWluIFN0cmluZ0ltcGw6Omxvd2VyIGJ5IGZhY3RvcmluZyBvdXQKICAgICAvLyB0aGlzIGxh
c3QgcGFydCBpbnRvIGEgc2hhcmVkIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBsb2NhbGUgc3RyaW5n
LCBzaW5jZSB0aGlzIGlzCkBAIC01OTAsMTMgKzU5MSwxMyBAQCBSZWY8U3RyaW5nSW1wbD4gU3Ry
aW5nSW1wbDo6bG93ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyKQogICAg
IHJldHVybiBuZXdTdHJpbmcucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotUmVmPFN0cmluZ0ltcGw+
IFN0cmluZ0ltcGw6OnVwcGVyKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcikK
K1JlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjb252ZXJ0VG9VcHBlcmNhc2VXaXRoTG9jYWxl
KGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcikKIHsKICAgICAvLyBVc2UgdGhl
IG1vcmUtb3B0aW1pemVkIGNvZGUgcGF0aCBtb3N0IG9mIHRoZSB0aW1lLgogICAgIC8vIEFzc3Vt
aW5nIGhlcmUgdGhhdCB0aGUgb25seSBsb2NhbGUtc3BlY2lmaWMgbG93ZXJjYXNpbmcgaXMgdGhl
IFR1cmtpc2ggY2FzaW5nIHJ1bGVzLAogICAgIC8vIGFuZCB0aGF0IHRoZSBvbmx5IGFmZmVjdGVk
IGNoYXJhY3RlciBpcyBsb3dlcmNhc2UgImkiLgogICAgIGlmICghbmVlZHNUdXJraXNoQ2FzaW5n
UnVsZXMobG9jYWxlSWRlbnRpZmllcikgfHwgZmluZCgnaScpID09IG5vdEZvdW5kKQotICAgICAg
ICByZXR1cm4gdXBwZXIoKTsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRUb1VwcGVyY2FzZVdpdGhv
dXRMb2NhbGUoKTsKIAogICAgIGlmIChtX2xlbmd0aCA+IHN0YXRpY19jYXN0PHVuc2lnbmVkPihz
dGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkpCiAgICAgICAgIENSQVNIKCk7CkBA
IC02MjMsNjAgKzYyNCw4NiBAQCBSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6dXBwZXIoY29u
c3QgQXRvbWljU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyKQogCiBSZWY8U3RyaW5nSW1wbD4gU3Ry
aW5nSW1wbDo6Zm9sZENhc2UoKQogewotICAgIC8vIEZJWE1FOiBXaHkgZG9lc24ndCB0aGlzIGZ1
bmN0aW9uIGhhdmUgYSBwcmVmbGlnaHQgbGlrZSB0aGUgb25lIGluIFN0cmluZ0ltcGw6Omxvd2Vy
PwotCi0gICAgaWYgKG1fbGVuZ3RoID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50MzJfdD46Om1heCgpKSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICBpbnQzMl90
IGxlbmd0aCA9IG1fbGVuZ3RoOwotCiAgICAgaWYgKGlzOEJpdCgpKSB7Ci0gICAgICAgIC8vIERv
IGEgZmFzdGVyIGxvb3AgZm9yIHRoZSBjYXNlIHdoZXJlIGFsbCB0aGUgY2hhcmFjdGVycyBhcmUg
QVNDSUkuCi0gICAgICAgIExDaGFyKiBkYXRhOwotICAgICAgICBhdXRvIG5ld0ltcGwgPSBjcmVh
dGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhKTsKLSAgICAgICAgTENoYXIgb3JlZCA9IDA7
Ci0KLSAgICAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgICAgIExDaGFyIGMgPSBtX2RhdGE4W2ldOwotICAgICAgICAgICAgZGF0YVtpXSA9IHRvQVND
SUlMb3dlcihjKTsKLSAgICAgICAgICAgIG9yZWQgfD0gYzsKKyAgICAgICAgdW5zaWduZWQgZmFp
bGluZ0luZGV4OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9sZW5ndGg7ICsr
aSkgeworICAgICAgICAgICAgYXV0byBjaGFyYWN0ZXIgPSBtX2RhdGE4W2ldOworICAgICAgICAg
ICAgaWYgKFVOTElLRUxZKCFpc0FTQ0lJKGNoYXJhY3RlcikgfHwgaXNBU0NJSVVwcGVyKGNoYXJh
Y3RlcikpKSB7CisgICAgICAgICAgICAgICAgZmFpbGluZ0luZGV4ID0gaTsKKyAgICAgICAgICAg
ICAgICBnb3RvIFNsb3dQYXRoOworICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIC8v
IFN0cmluZyB3YXMgYWxsIEFTQ0lJIGFuZCBubyB1cHBlcmNhc2UsIHNvIGp1c3QgcmV0dXJuIGFz
LWlzLgorICAgICAgICByZXR1cm4gKnRoaXM7CiAKLSAgICAgICAgaWYgKCEob3JlZCAmIH4weDdG
KSkKLSAgICAgICAgICAgIHJldHVybiBuZXdJbXBsOwotCi0gICAgICAgIC8vIERvIGEgc2xvd2Vy
IGltcGxlbWVudGF0aW9uIGZvciBjYXNlcyB0aGF0IGluY2x1ZGUgbm9uLUFTQ0lJIExhdGluLTEg
Y2hhcmFjdGVycy4KLSAgICAgICAgLy8gRklYTUU6IFNob3VsZG4ndCB0aGlzIHVzZSB1X2ZvbGRD
YXNlIGluc3RlYWQgb2YgdV90b2xvd2VyPwotICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgQVNTRVJUKHVfdG9sb3dlcihtX2RhdGE4W2ld
KSA8PSAweEZGKTsKLSAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxMQ2hhcj4odV90
b2xvd2VyKG1fZGF0YThbaV0pKTsKK1Nsb3dQYXRoOgorICAgICAgICBib29sIG5lZWQxNkJpdENo
YXJhY3RlcnMgPSBmYWxzZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZmFpbGluZ0luZGV4
OyBpIDwgbV9sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgYXV0byBjaGFyYWN0ZXIgPSBtX2Rh
dGE4W2ldOworICAgICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAweEI1IHx8IGNoYXJhY3RlciA9
PSAweERGKSB7CisgICAgICAgICAgICAgICAgbmVlZDE2Qml0Q2hhcmFjdGVycyA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAg
ICByZXR1cm4gbmV3SW1wbDsKKyAgICAgICAgaWYgKCFuZWVkMTZCaXRDaGFyYWN0ZXJzKSB7Cisg
ICAgICAgICAgICBMQ2hhciogZGF0YTg7CisgICAgICAgICAgICBhdXRvIGZvbGRlZCA9IGNyZWF0
ZVVuaW5pdGlhbGl6ZWRJbnRlcm5hbE5vbkVtcHR5KG1fbGVuZ3RoLCBkYXRhOCk7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmFpbGluZ0luZGV4OyArK2kpCisgICAgICAg
ICAgICAgICAgZGF0YThbaV0gPSBtX2RhdGE4W2ldOworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gZmFpbGluZ0luZGV4OyBpIDwgbV9sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAg
IGF1dG8gY2hhcmFjdGVyID0gbV9kYXRhOFtpXTsKKyAgICAgICAgICAgICAgICBpZiAoaXNBU0NJ
SShjaGFyYWN0ZXIpKQorICAgICAgICAgICAgICAgICAgICBkYXRhOFtpXSA9IHRvQVNDSUlMb3dl
cihjaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQodV9mb2xkQ2FzZShjaGFyYWN0ZXIsIFVfRk9MRF9DQVNFX0RFRkFVTFQpIDw9IDB4
RkYpOworICAgICAgICAgICAgICAgICAgICBkYXRhOFtpXSA9IHN0YXRpY19jYXN0PExDaGFyPih1
X2ZvbGRDYXNlKGNoYXJhY3RlciwgVV9GT0xEX0NBU0VfREVGQVVMVCkpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmb2xkZWQ7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBGSVhNRTogVW5jbGVhciB3aHkgd2UgdXNlIGdv
dG8gaW4gdGhlIDgtYml0IGNhc2UsIGFuZCBhIGRpZmZlcmVudCBhcHByb2FjaCBpbiB0aGUgMTYt
Yml0IGNhc2UuCisgICAgICAgIGJvb2wgbm9VcHBlciA9IHRydWU7CisgICAgICAgIHVuc2lnbmVk
IG9yZWQgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9sZW5ndGg7ICsr
aSkgeworICAgICAgICAgICAgVUNoYXIgY2hhcmFjdGVyID0gbV9kYXRhMTZbaV07CisgICAgICAg
ICAgICBpZiAoVU5MSUtFTFkoaXNBU0NJSVVwcGVyKGNoYXJhY3RlcikpKQorICAgICAgICAgICAg
ICAgIG5vVXBwZXIgPSBmYWxzZTsKKyAgICAgICAgICAgIG9yZWQgfD0gY2hhcmFjdGVyOworICAg
ICAgICB9CisgICAgICAgIGlmICghKG9yZWQgJiB+MHg3RikpIHsKKyAgICAgICAgICAgIGlmIChu
b1VwcGVyKSB7CisgICAgICAgICAgICAgICAgLy8gU3RyaW5nIHdhcyBhbGwgQVNDSUkgYW5kIG5v
IHVwcGVyY2FzZSwgc28ganVzdCByZXR1cm4gYXMtaXMuCisgICAgICAgICAgICAgICAgcmV0dXJu
ICp0aGlzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgVUNoYXIqIGRhdGExNjsKKyAgICAg
ICAgICAgIGF1dG8gZm9sZGVkID0gY3JlYXRlVW5pbml0aWFsaXplZEludGVybmFsTm9uRW1wdHko
bV9sZW5ndGgsIGRhdGExNik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9sZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBkYXRhMTZbaV0gPSB0b0FTQ0lJTG93ZXIo
bV9kYXRhMTZbaV0pOworICAgICAgICAgICAgcmV0dXJuIGZvbGRlZDsKKyAgICAgICAgfQogICAg
IH0KIAotICAgIC8vIERvIGEgZmFzdGVyIGxvb3AgZm9yIHRoZSBjYXNlIHdoZXJlIGFsbCB0aGUg
Y2hhcmFjdGVycyBhcmUgQVNDSUkuCi0gICAgVUNoYXIqIGRhdGE7Ci0gICAgUmVmUHRyPFN0cmlu
Z0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhKTsKLSAg
ICBVQ2hhciBvcmVkID0gMDsKLSAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsr
aSkgewotICAgICAgICBVQ2hhciBjID0gbV9kYXRhMTZbaV07Ci0gICAgICAgIG9yZWQgfD0gYzsK
LSAgICAgICAgZGF0YVtpXSA9IHRvQVNDSUlMb3dlcihjKTsKLSAgICB9Ci0gICAgaWYgKCEob3Jl
ZCAmIH4weDdGKSkKLSAgICAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZU5vbk51bGwoKTsKKyAg
ICBpZiAobV9sZW5ndGggPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0
czxpbnQzMl90Pjo6bWF4KCkpKQorICAgICAgICBDUkFTSCgpOwogCi0gICAgLy8gRG8gYSBzbG93
ZXIgaW1wbGVtZW50YXRpb24gZm9yIGNhc2VzIHRoYXQgaW5jbHVkZSBub24tQVNDSUkgY2hhcmFj
dGVycy4KKyAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoKnRoaXMp
LnVwY29udmVydGVkQ2hhcmFjdGVycygpOworCisgICAgVUNoYXIqIGRhdGE7CisgICAgYXV0byBm
b2xkZWQgPSBjcmVhdGVVbmluaXRpYWxpemVkSW50ZXJuYWxOb25FbXB0eShtX2xlbmd0aCwgZGF0
YSk7CisgICAgaW50MzJfdCBsZW5ndGggPSBtX2xlbmd0aDsKICAgICBVRXJyb3JDb2RlIHN0YXR1
cyA9IFVfWkVST19FUlJPUjsKLSAgICBpbnQzMl90IHJlYWxMZW5ndGggPSB1X3N0ckZvbGRDYXNl
KGRhdGEsIGxlbmd0aCwgbV9kYXRhMTYsIG1fbGVuZ3RoLCBVX0ZPTERfQ0FTRV9ERUZBVUxULCAm
c3RhdHVzKTsKKyAgICBpbnQzMl90IHJlYWxMZW5ndGggPSB1X3N0ckZvbGRDYXNlKGRhdGEsIGxl
bmd0aCwgdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzLCBsZW5ndGgsIFVfRk9MRF9DQVNFX0RFRkFVTFQs
ICZzdGF0dXMpOwogICAgIGlmIChVX1NVQ0NFU1Moc3RhdHVzKSAmJiByZWFsTGVuZ3RoID09IGxl
bmd0aCkKLSAgICAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZU5vbk51bGwoKTsKLSAgICBuZXdJ
bXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChyZWFsTGVuZ3RoLCBkYXRhKTsKKyAgICAgICAgcmV0
dXJuIGZvbGRlZDsKKyAgICBBU1NFUlQocmVhbExlbmd0aCA+IGxlbmd0aCk7CisgICAgZm9sZGVk
ID0gY3JlYXRlVW5pbml0aWFsaXplZEludGVybmFsTm9uRW1wdHkocmVhbExlbmd0aCwgZGF0YSk7
CiAgICAgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotICAgIHVfc3RyRm9sZENhc2UoZGF0YSwgcmVh
bExlbmd0aCwgbV9kYXRhMTYsIG1fbGVuZ3RoLCBVX0ZPTERfQ0FTRV9ERUZBVUxULCAmc3RhdHVz
KTsKKyAgICB1X3N0ckZvbGRDYXNlKGRhdGEsIHJlYWxMZW5ndGgsIHVwY29udmVydGVkQ2hhcmFj
dGVycywgbGVuZ3RoLCBVX0ZPTERfQ0FTRV9ERUZBVUxULCAmc3RhdHVzKTsKICAgICBpZiAoVV9G
QUlMVVJFKHN0YXR1cykpCiAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICByZXR1cm4gbmV3SW1w
bC5yZWxlYXNlTm9uTnVsbCgpOworICAgIHJldHVybiBmb2xkZWQ7CiB9CiAKIHRlbXBsYXRlPFN0
cmluZ0ltcGw6OkNhc2VDb252ZXJ0VHlwZSB0eXBlLCB0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmggYi9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAppbmRleCBlNjg3MGJhZjk1ZTI2OTQwZjkzY2U1Y2QxYWU3
N2ZlN2E2OTM4NDRiLi4wNjNjZTYzMmE0MmQ0YmY5MzZiN2QzNjZkOGNmZDliMWRlOWNiZDlkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaApAQCAtNjgxLDEwICs2ODEsMTAgQEAgcHVibGljOgog
CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJlZjxTdHJpbmdJbXBsPiBjb252ZXJ0VG9BU0NJ
SUxvd2VyY2FzZSgpOwogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBSZWY8U3RyaW5nSW1wbD4g
Y29udmVydFRvQVNDSUlVcHBlcmNhc2UoKTsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUmVm
PFN0cmluZ0ltcGw+IGxvd2VyKCk7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJlZjxTdHJp
bmdJbXBsPiB1cHBlcigpOwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBSZWY8U3RyaW5nSW1w
bD4gbG93ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyKTsKLSAgICBXVEZf
RVhQT1JUX1NUUklOR19BUEkgUmVmPFN0cmluZ0ltcGw+IHVwcGVyKGNvbnN0IEF0b21pY1N0cmlu
ZyYgbG9jYWxlSWRlbnRpZmllcik7CisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJlZjxTdHJp
bmdJbXBsPiBjb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlKCk7CisgICAgV1RGX0VYUE9S
VF9TVFJJTkdfQVBJIFJlZjxTdHJpbmdJbXBsPiBjb252ZXJ0VG9VcHBlcmNhc2VXaXRob3V0TG9j
YWxlKCk7CisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJlZjxTdHJpbmdJbXBsPiBjb252ZXJ0
VG9Mb3dlcmNhc2VXaXRoTG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmll
cik7CisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJlZjxTdHJpbmdJbXBsPiBjb252ZXJ0VG9V
cHBlcmNhc2VXaXRoTG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcik7
CiAKICAgICBSZWY8U3RyaW5nSW1wbD4gZm9sZENhc2UoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJp
bmcuY3BwCmluZGV4IDFiNDMwNTY3NjJiMjRkMmZhMzIzYjI5OGEzOTcwNzRhYWFjMmQ3MjAuLmNl
Mzc2ZTIzYTA5NTk5ZmRjNTVjZWQ1ZTliOTMwODY4NDRhNmVhMGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dU
RlN0cmluZy5jcHAKQEAgLTM1MSwzMiArMzUxLDMyIEBAIFN0cmluZyBTdHJpbmc6OmNvbnZlcnRU
b0FTQ0lJVXBwZXJjYXNlKCkgY29uc3QKICAgICByZXR1cm4gbV9pbXBsLT5jb252ZXJ0VG9BU0NJ
SVVwcGVyY2FzZSgpOwogfQogCi1TdHJpbmcgU3RyaW5nOjpsb3dlcigpIGNvbnN0CitTdHJpbmcg
U3RyaW5nOjpjb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlKCkgY29uc3QKIHsKICAgICBp
ZiAoIW1faW1wbCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBtX2ltcGwt
Pmxvd2VyKCk7CisgICAgcmV0dXJuIG1faW1wbC0+Y29udmVydFRvTG93ZXJjYXNlV2l0aG91dExv
Y2FsZSgpOwogfQogCi1TdHJpbmcgU3RyaW5nOjp1cHBlcigpIGNvbnN0CitTdHJpbmcgU3RyaW5n
Ojpjb252ZXJ0VG9VcHBlcmNhc2VXaXRob3V0TG9jYWxlKCkgY29uc3QKIHsKICAgICBpZiAoIW1f
aW1wbCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBtX2ltcGwtPnVwcGVy
KCk7CisgICAgcmV0dXJuIG1faW1wbC0+Y29udmVydFRvVXBwZXJjYXNlV2l0aG91dExvY2FsZSgp
OwogfQogCi1TdHJpbmcgU3RyaW5nOjpsb3dlcihjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlk
ZW50aWZpZXIpIGNvbnN0CitTdHJpbmcgU3RyaW5nOjpjb252ZXJ0VG9Mb3dlcmNhc2VXaXRoTG9j
YWxlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcikgY29uc3QKIHsKICAgICBp
ZiAoIW1faW1wbCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBtX2ltcGwt
Pmxvd2VyKGxvY2FsZUlkZW50aWZpZXIpOworICAgIHJldHVybiBtX2ltcGwtPmNvbnZlcnRUb0xv
d2VyY2FzZVdpdGhMb2NhbGUobG9jYWxlSWRlbnRpZmllcik7CiB9CiAKLVN0cmluZyBTdHJpbmc6
OnVwcGVyKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcikgY29uc3QKK1N0cmlu
ZyBTdHJpbmc6OmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhMb2NhbGUoY29uc3QgQXRvbWljU3RyaW5n
JiBsb2NhbGVJZGVudGlmaWVyKSBjb25zdAogewogICAgIGlmICghbV9pbXBsKQogICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIG1faW1wbC0+dXBwZXIobG9jYWxlSWRlbnRpZmll
cik7CisgICAgcmV0dXJuIG1faW1wbC0+Y29udmVydFRvVXBwZXJjYXNlV2l0aExvY2FsZShsb2Nh
bGVJZGVudGlmaWVyKTsKIH0KIAogU3RyaW5nIFN0cmluZzo6c3RyaXBXaGl0ZVNwYWNlKCkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmggYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCmluZGV4IDg4YzEzZGFmMzM5MDU4NTBlMDFjYjIxY2Q5
MmEwYjI5NmFlNzM1Y2EuLjNjNTU5MDgxMWRhZjIxMGRiOWUzZmNjOTYxYWVhYzRhMWEyZjFhZTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgKKysrIGIvU291cmNl
L1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaApAQCAtMzMxLDE2ICszMzEsMTIgQEAgcHVibGljOgog
ICAgIFN0cmluZyBsZWZ0KHVuc2lnbmVkIGxlbikgY29uc3QgeyByZXR1cm4gc3Vic3RyaW5nKDAs
IGxlbik7IH0KICAgICBTdHJpbmcgcmlnaHQodW5zaWduZWQgbGVuKSBjb25zdCB7IHJldHVybiBz
dWJzdHJpbmcobGVuZ3RoKCkgLSBsZW4sIGxlbik7IH0KIAotICAgIC8vIFJldHVybnMgYSBsb3dl
cmNhc2UvdXBwZXJjYXNlIHZlcnNpb24gb2YgdGhlIHN0cmluZy4KLSAgICAvLyBUaGUgY29udmVy
dFRvQVNDSUlMb3dlcmNhc2UgaXMgdXNlZnVsIGluIG1hbnkgY29udGV4dHMgc3VjaCBhcyBIVE1M
IHdoZXJlIHdlIGRvbid0Ci0gICAgLy8gd2FudCB0byBkbyBhbnkgY29udmVyc2lvbiBmb3Igbm9u
LUFTQ0lJIGxldHRlcnMuCiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyBjb252ZXJ0
VG9BU0NJSUxvd2VyY2FzZSgpIGNvbnN0OwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJp
bmcgbG93ZXIoKSBjb25zdDsKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgU3RyaW5nIGNvbnZl
cnRUb0FTQ0lJVXBwZXJjYXNlKCkgY29uc3Q7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0
cmluZyB1cHBlcigpIGNvbnN0OwotCi0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyBs
b3dlcihjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpIGNvbnN0OwotICAgIFdU
Rl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJpbmcgdXBwZXIoY29uc3QgQXRvbWljU3RyaW5nJiBsb2Nh
bGVJZGVudGlmaWVyKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgU3RyaW5nIGNv
bnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGUoKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1NU
UklOR19BUEkgU3RyaW5nIGNvbnZlcnRUb1VwcGVyY2FzZVdpdGhvdXRMb2NhbGUoKSBjb25zdDsK
KyAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgU3RyaW5nIGNvbnZlcnRUb0xvd2VyY2FzZVdpdGhM
b2NhbGUoY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyKSBjb25zdDsKKyAgICBX
VEZfRVhQT1JUX1NUUklOR19BUEkgU3RyaW5nIGNvbnZlcnRUb1VwcGVyY2FzZVdpdGhMb2NhbGUo
Y29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyKSBjb25zdDsKIAogICAgIFdURl9F
WFBPUlRfU1RSSU5HX0FQSSBTdHJpbmcgc3RyaXBXaGl0ZVNwYWNlKCkgY29uc3Q7CiAgICAgV1RG
X0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyBzdHJpcFdoaXRlU3BhY2UoSXNXaGl0ZVNwYWNlRnVu
Y3Rpb25QdHIpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291
cmNlL01lZGlhU291cmNlLmNwcAppbmRleCAzYzkxMDVmOTU5NWM4MTE4NDNjYjc0NjNhMGJmNmJj
OTk5MjExOTFjLi5jMGQxNGUxNjU3YWVlODMxMmI5ZjcwZDU3NTU5N2IwMzc1NjdlNDkxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNw
cApAQCAtNzMzLDcgKzczMyw3IEBAIGJvb2wgTWVkaWFTb3VyY2U6OmlzVHlwZVN1cHBvcnRlZChj
b25zdCBTdHJpbmcmIHR5cGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIEZJWE1F
OiBXaHkgZG8gd2UgY29udmVydCB0byBsb3dlcmNhc2UgaGVyZSwgYnV0IG5vdCBpbiBNZWRpYVNv
dXJjZTo6YWRkU291cmNlQnVmZmVyPwotICAgIENvbnRlbnRUeXBlIGNvbnRlbnRUeXBlKHR5cGUu
bG93ZXIoKSk7CisgICAgQ29udGVudFR5cGUgY29udGVudFR5cGUodHlwZS5jb252ZXJ0VG9BU0NJ
SUxvd2VyY2FzZSgpKTsKICAgICBTdHJpbmcgY29kZWNzID0gY29udGVudFR5cGUucGFyYW1ldGVy
KCJjb2RlY3MiKTsKIAogICAgIC8vIDIuIElmIHR5cGUgZG9lcyBub3QgY29udGFpbiBhIHZhbGlk
IE1JTUUgdHlwZSBzdHJpbmcsIHRoZW4gcmV0dXJuIGZhbHNlLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKaW5kZXggYjA3OTg4
ZWVlMzBhNGYyODIwZmQyMWE0MDE1MjM0MmJlNDJhMzAwNy4uMDZhNDMyYWFjMjlkZTc5NTRhMjc0
YTY0YWNmMmQxMzVmZDdkYjhmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC03NjEsMzEgKzc2MSwyOCBAQCBTdHJp
bmcgQWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0VGV4dChBY2Nlc3NpYmlsaXR5U2VsZWN0VGV4
dENyaXRlcmlhKiBjcml0ZXJpYQogICAgICAgICBib29sIHJlcGxhY2VTZWxlY3Rpb24gPSBmYWxz
ZTsKICAgICAgICAgaWYgKGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNsb3Nl
c3RTdHJpbmdSYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSwgdHJ1ZSkpIHsKICAgICAgICAgICAgIHN3
aXRjaCAoYWN0aXZpdHkpIHsKLSAgICAgICAgICAgIGNhc2UgRmluZEFuZENhcGl0YWxpemU6IHsK
KyAgICAgICAgICAgIGNhc2UgRmluZEFuZENhcGl0YWxpemU6CiAgICAgICAgICAgICAgICAgcmVw
bGFjZW1lbnRTdHJpbmcgPSBjbG9zZXN0U3RyaW5nOwogICAgICAgICAgICAgICAgIG1ha2VDYXBp
dGFsaXplZCgmcmVwbGFjZW1lbnRTdHJpbmcsIDApOwogICAgICAgICAgICAgICAgIHJlcGxhY2VT
ZWxlY3Rpb24gPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQog
ICAgICAgICAgICAgY2FzZSBGaW5kQW5kVXBwZXJjYXNlOgotICAgICAgICAgICAgICAgIHJlcGxh
Y2VtZW50U3RyaW5nID0gY2xvc2VzdFN0cmluZy51cHBlcigpOworICAgICAgICAgICAgICAgIHJl
cGxhY2VtZW50U3RyaW5nID0gY2xvc2VzdFN0cmluZy5jb252ZXJ0VG9VcHBlcmNhc2VXaXRob3V0
TG9jYWxlKCk7IC8vIEZJWE1FOiBOZWVkcyBsb2NhbGUgdG8gd29yayBjb3JyZWN0bHkuCiAgICAg
ICAgICAgICAgICAgcmVwbGFjZVNlbGVjdGlvbiA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBjYXNlIEZpbmRBbmRMb3dlcmNhc2U6Ci0gICAgICAgICAgICAgICAg
cmVwbGFjZW1lbnRTdHJpbmcgPSBjbG9zZXN0U3RyaW5nLmxvd2VyKCk7CisgICAgICAgICAgICAg
ICAgcmVwbGFjZW1lbnRTdHJpbmcgPSBjbG9zZXN0U3RyaW5nLmNvbnZlcnRUb0xvd2VyY2FzZVdp
dGhvdXRMb2NhbGUoKTsgLy8gRklYTUU6IE5lZWRzIGxvY2FsZSB0byB3b3JrIGNvcnJlY3RseS4K
ICAgICAgICAgICAgICAgICByZXBsYWNlU2VsZWN0aW9uID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGNhc2UgRmluZEFuZFJlcGxhY2VBY3Rpdml0eTogewogICAg
ICAgICAgICAgICAgIHJlcGxhY2VTZWxlY3Rpb24gPSB0cnVlOwotICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIC8vIFdoZW4gYXBwbHlpbmcgZmluZCBhbmQgcmVwbGFjZSBhY3Rpdml0
aWVzLCB3ZSB3YW50IHRvIG1hdGNoIHRoZSBjYXBpdGFsaXphdGlvbiBvZiB0aGUgcmVwbGFjZWQg
dGV4dCwKICAgICAgICAgICAgICAgICAvLyAodW5sZXNzIHdlJ3JlIHJlcGxhY2luZyB3aXRoIGFu
IGFiYnJldmlhdGlvbi4pCi0gICAgICAgICAgICAgICAgU3RyaW5nIHVwcGVyY2FzZVJlcGxhY2Vt
ZW50U3RyaW5nID0gcmVwbGFjZW1lbnRTdHJpbmcudXBwZXIoKTsKLSAgICAgICAgICAgICAgICBp
ZiAoY2xvc2VzdFN0cmluZy5sZW5ndGgoKSA+IDAgJiYgcmVwbGFjZW1lbnRTdHJpbmcubGVuZ3Ro
KCkgPiAyICYmIHJlcGxhY2VtZW50U3RyaW5nICE9IHVwcGVyY2FzZVJlcGxhY2VtZW50U3RyaW5n
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjbG9zZXN0U3RyaW5nWzBdID09IGNsb3Nlc3RT
dHJpbmcudXBwZXIoKVswXSkKKyAgICAgICAgICAgICAgICBpZiAoY2xvc2VzdFN0cmluZy5sZW5n
dGgoKSA+IDAgJiYgcmVwbGFjZW1lbnRTdHJpbmcubGVuZ3RoKCkgPiAyICYmIHJlcGxhY2VtZW50
U3RyaW5nICE9IHJlcGxhY2VtZW50U3RyaW5nLmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhvdXRMb2Nh
bGUoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2xvc2VzdFN0cmluZ1swXSA9PSB1X3Rv
dXBwZXIoY2xvc2VzdFN0cmluZ1swXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlQ2Fw
aXRhbGl6ZWQoJnJlcGxhY2VtZW50U3RyaW5nLCAwKTsKICAgICAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRTdHJpbmcgPSByZXBsYWNlbWVu
dFN0cmluZy5sb3dlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRTdHJp
bmcgPSByZXBsYWNlbWVudFN0cmluZy5jb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlKCk7
IC8vIEZJWE1FOiBOZWVkcyBsb2NhbGUgdG8gd29yayBjb3JyZWN0bHkuCiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAKaW5kZXggZjAwMGIxZjI4ODUxY2QxMGFlMDYzY2RlZTg4NzFiNWI3MTI2MWFjYS4u
MzdjNmViYmY4Njk3YzQzZGUzZjA1NTAzYmE5MzEzMTBlOTk1YmUyZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCkBAIC03NjYsMTkgKzc2NiwxOSBAQCB2b2lkIERvY3VtZW50OjppbnZhbGlkYXRl
QWNjZXNzS2V5TWFwKCkKICAgICBtX2VsZW1lbnRzQnlBY2Nlc3NLZXkuY2xlYXIoKTsKIH0KIAot
dm9pZCBEb2N1bWVudDo6YWRkSW1hZ2VFbGVtZW50QnlMb3dlcmNhc2VkVXNlbWFwKGNvbnN0IEF0
b21pY1N0cmluZ0ltcGwmIG5hbWUsIEhUTUxJbWFnZUVsZW1lbnQmIGVsZW1lbnQpCit2b2lkIERv
Y3VtZW50OjphZGRJbWFnZUVsZW1lbnRCeUNhc2VGb2xkZWRVc2VtYXAoY29uc3QgQXRvbWljU3Ry
aW5nSW1wbCYgbmFtZSwgSFRNTEltYWdlRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICByZXR1cm4g
bV9pbWFnZXNCeVVzZW1hcC5hZGQobmFtZSwgZWxlbWVudCwgKnRoaXMpOwogfQogCi12b2lkIERv
Y3VtZW50OjpyZW1vdmVJbWFnZUVsZW1lbnRCeUxvd2VyY2FzZWRVc2VtYXAoY29uc3QgQXRvbWlj
U3RyaW5nSW1wbCYgbmFtZSwgSFRNTEltYWdlRWxlbWVudCYgZWxlbWVudCkKK3ZvaWQgRG9jdW1l
bnQ6OnJlbW92ZUltYWdlRWxlbWVudEJ5Q2FzZUZvbGRlZFVzZW1hcChjb25zdCBBdG9taWNTdHJp
bmdJbXBsJiBuYW1lLCBIVE1MSW1hZ2VFbGVtZW50JiBlbGVtZW50KQogewogICAgIHJldHVybiBt
X2ltYWdlc0J5VXNlbWFwLnJlbW92ZShuYW1lLCBlbGVtZW50KTsKIH0KIAotSFRNTEltYWdlRWxl
bWVudCogRG9jdW1lbnQ6OmltYWdlRWxlbWVudEJ5TG93ZXJjYXNlZFVzZW1hcChjb25zdCBBdG9t
aWNTdHJpbmdJbXBsJiBuYW1lKSBjb25zdAorSFRNTEltYWdlRWxlbWVudCogRG9jdW1lbnQ6Omlt
YWdlRWxlbWVudEJ5Q2FzZUZvbGRlZFVzZW1hcChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBuYW1l
KSBjb25zdAogewotICAgIHJldHVybiBtX2ltYWdlc0J5VXNlbWFwLmdldEVsZW1lbnRCeUxvd2Vy
Y2FzZWRVc2VtYXAobmFtZSwgKnRoaXMpOworICAgIHJldHVybiBtX2ltYWdlc0J5VXNlbWFwLmdl
dEVsZW1lbnRCeUNhc2VGb2xkZWRVc2VtYXAobmFtZSwgKnRoaXMpOwogfQogCiBTZWxlY3RvclF1
ZXJ5KiBEb2N1bWVudDo6c2VsZWN0b3JRdWVyeUZvclN0cmluZyhjb25zdCBTdHJpbmcmIHNlbGVj
dG9yU3RyaW5nLCBFeGNlcHRpb25Db2RlJiBlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggY2I2
MmZlODc2MzdjMWM3YWQwNjBlNjk3NjA2Yjc5MzQxMGMzYjYwYS4uNzJjYmJjY2ZhOTk0ZjEwMGQz
NTAyYzliZDk3NmJkNDBlMjkwMzliMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTM1MCw5ICsz
NTAsOSBAQCBwdWJsaWM6CiAgICAgRWxlbWVudCogZ2V0RWxlbWVudEJ5QWNjZXNzS2V5KGNvbnN0
IFN0cmluZyYga2V5KTsKICAgICB2b2lkIGludmFsaWRhdGVBY2Nlc3NLZXlNYXAoKTsKIAotICAg
IHZvaWQgYWRkSW1hZ2VFbGVtZW50QnlMb3dlcmNhc2VkVXNlbWFwKGNvbnN0IEF0b21pY1N0cmlu
Z0ltcGwmLCBIVE1MSW1hZ2VFbGVtZW50Jik7Ci0gICAgdm9pZCByZW1vdmVJbWFnZUVsZW1lbnRC
eUxvd2VyY2FzZWRVc2VtYXAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYsIEhUTUxJbWFnZUVsZW1l
bnQmKTsKLSAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsZW1lbnRCeUxvd2VyY2FzZWRVc2Vt
YXAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYpIGNvbnN0OworICAgIHZvaWQgYWRkSW1hZ2VFbGVt
ZW50QnlDYXNlRm9sZGVkVXNlbWFwKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmLCBIVE1MSW1hZ2VF
bGVtZW50Jik7CisgICAgdm9pZCByZW1vdmVJbWFnZUVsZW1lbnRCeUNhc2VGb2xkZWRVc2VtYXAo
Y29uc3QgQXRvbWljU3RyaW5nSW1wbCYsIEhUTUxJbWFnZUVsZW1lbnQmKTsKKyAgICBIVE1MSW1h
Z2VFbGVtZW50KiBpbWFnZUVsZW1lbnRCeUNhc2VGb2xkZWRVc2VtYXAoY29uc3QgQXRvbWljU3Ry
aW5nSW1wbCYpIGNvbnN0OwogCiAgICAgU2VsZWN0b3JRdWVyeSogc2VsZWN0b3JRdWVyeUZvclN0
cmluZyhjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBjbGVhclNlbGVj
dG9yUXVlcnlDYWNoZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
T3JkZXJlZE1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNw
cAppbmRleCAzZTM0YjRlMDkxY2U1OGJhMjc2ZjA5NzI2MmJmYTM1YTMxOWEzNTYyLi5kYThlNGYy
NWU3NGM0MmZlY2U4YjlkZTIyOWNjNTAwNTI0YjdjZDE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnRPcmRlcmVkTWFwLmNwcApAQCAtMTQ3LDE4ICsxNDcsMTggQEAgSFRNTE1hcEVsZW1l
bnQqIERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5TWFwTmFtZShjb25zdCBBdG9taWNT
dHJpbmdJbXBsJgogICAgIH0pKTsKIH0KIAotSFRNTE1hcEVsZW1lbnQqIERvY3VtZW50T3JkZXJl
ZE1hcDo6Z2V0RWxlbWVudEJ5TG93ZXJjYXNlZE1hcE5hbWUoY29uc3QgQXRvbWljU3RyaW5nSW1w
bCYga2V5LCBjb25zdCBUcmVlU2NvcGUmIHNjb3BlKSBjb25zdAorSFRNTE1hcEVsZW1lbnQqIERv
Y3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5Q2FzZUZvbGRlZE1hcE5hbWUoY29uc3QgQXRv
bWljU3RyaW5nSW1wbCYga2V5LCBjb25zdCBUcmVlU2NvcGUmIHNjb3BlKSBjb25zdAogewogICAg
IHJldHVybiBkb3duY2FzdDxIVE1MTWFwRWxlbWVudD4oZ2V0KGtleSwgc2NvcGUsIFtdIChjb25z
dCBBdG9taWNTdHJpbmdJbXBsJiBrZXksIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpIHsKLSAgICAg
ICAgcmV0dXJuIGlzPEhUTUxNYXBFbGVtZW50PihlbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MTWFw
RWxlbWVudD4oZWxlbWVudCkuZ2V0TmFtZSgpLmxvd2VyKCkuaW1wbCgpID09ICZrZXk7CisgICAg
ICAgIHJldHVybiBpczxIVE1MTWFwRWxlbWVudD4oZWxlbWVudCkgJiYgZXF1YWwoZG93bmNhc3Q8
SFRNTE1hcEVsZW1lbnQ+KGVsZW1lbnQpLmdldE5hbWUoKS5zdHJpbmcoKS5mb2xkQ2FzZSgpLmlt
cGwoKSwgJmtleSk7CiAgICAgfSkpOwogfQogCi1IVE1MSW1hZ2VFbGVtZW50KiBEb2N1bWVudE9y
ZGVyZWRNYXA6OmdldEVsZW1lbnRCeUxvd2VyY2FzZWRVc2VtYXAoY29uc3QgQXRvbWljU3RyaW5n
SW1wbCYga2V5LCBjb25zdCBUcmVlU2NvcGUmIHNjb3BlKSBjb25zdAorSFRNTEltYWdlRWxlbWVu
dCogRG9jdW1lbnRPcmRlcmVkTWFwOjpnZXRFbGVtZW50QnlDYXNlRm9sZGVkVXNlbWFwKGNvbnN0
IEF0b21pY1N0cmluZ0ltcGwmIGtleSwgY29uc3QgVHJlZVNjb3BlJiBzY29wZSkgY29uc3QKIHsK
ICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4oZ2V0KGtleSwgc2NvcGUsIFtd
IChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBrZXksIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpIHsK
ICAgICAgICAgLy8gRklYTUU6IEhUTUw1IHNwZWNpZmljYXRpb24gc2F5cyB3ZSBzaG91bGQgbWF0
Y2ggYm90aCBpbWFnZSBhbmQgb2JqZWN0IGVsZW1lbnRzLgotICAgICAgICByZXR1cm4gaXM8SFRN
TEltYWdlRWxlbWVudD4oZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4oZWxl
bWVudCkubWF0Y2hlc0xvd2VyY2FzZWRVc2VtYXAoa2V5KTsKKyAgICAgICAgcmV0dXJuIGlzPEhU
TUxJbWFnZUVsZW1lbnQ+KGVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxJbWFnZUVsZW1lbnQ+KGVs
ZW1lbnQpLm1hdGNoZXNDYXNlRm9sZGVkVXNlbWFwKGtleSk7CiAgICAgfSkpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmggYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmgKaW5kZXggNzIwNTU1YjI4ZDM5NWUyZWI3
MjRhM2ZiY2MzMzIzN2JmNTk1NTkwMC4uYjQ5ODhjYzc0YjUzNzYyNjllNzU1MjMwMDMxNjYzMmYw
OTg1ZGM4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1h
cC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuaApAQCAtNjAs
OCArNjAsOCBAQCBwdWJsaWM6CiAgICAgRWxlbWVudCogZ2V0RWxlbWVudEJ5SWQoY29uc3QgQXRv
bWljU3RyaW5nSW1wbCYsIGNvbnN0IFRyZWVTY29wZSYpIGNvbnN0OwogICAgIEVsZW1lbnQqIGdl
dEVsZW1lbnRCeU5hbWUoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYsIGNvbnN0IFRyZWVTY29wZSYp
IGNvbnN0OwogICAgIEhUTUxNYXBFbGVtZW50KiBnZXRFbGVtZW50QnlNYXBOYW1lKGNvbnN0IEF0
b21pY1N0cmluZ0ltcGwmLCBjb25zdCBUcmVlU2NvcGUmKSBjb25zdDsKLSAgICBIVE1MTWFwRWxl
bWVudCogZ2V0RWxlbWVudEJ5TG93ZXJjYXNlZE1hcE5hbWUoY29uc3QgQXRvbWljU3RyaW5nSW1w
bCYsIGNvbnN0IFRyZWVTY29wZSYpIGNvbnN0OwotICAgIEhUTUxJbWFnZUVsZW1lbnQqIGdldEVs
ZW1lbnRCeUxvd2VyY2FzZWRVc2VtYXAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYsIGNvbnN0IFRy
ZWVTY29wZSYpIGNvbnN0OworICAgIEhUTUxNYXBFbGVtZW50KiBnZXRFbGVtZW50QnlDYXNlRm9s
ZGVkTWFwTmFtZShjb25zdCBBdG9taWNTdHJpbmdJbXBsJiwgY29uc3QgVHJlZVNjb3BlJikgY29u
c3Q7CisgICAgSFRNTEltYWdlRWxlbWVudCogZ2V0RWxlbWVudEJ5Q2FzZUZvbGRlZFVzZW1hcChj
b25zdCBBdG9taWNTdHJpbmdJbXBsJiwgY29uc3QgVHJlZVNjb3BlJikgY29uc3Q7CiAgICAgSFRN
TExhYmVsRWxlbWVudCogZ2V0RWxlbWVudEJ5TGFiZWxGb3JBdHRyaWJ1dGUoY29uc3QgQXRvbWlj
U3RyaW5nSW1wbCYsIGNvbnN0IFRyZWVTY29wZSYpIGNvbnN0OwogICAgIEVsZW1lbnQqIGdldEVs
ZW1lbnRCeVdpbmRvd05hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmdJbXBsJiwgY29uc3QgVHJl
ZVNjb3BlJikgY29uc3Q7CiAgICAgRWxlbWVudCogZ2V0RWxlbWVudEJ5RG9jdW1lbnROYW1lZEl0
ZW0oY29uc3QgQXRvbWljU3RyaW5nSW1wbCYsIGNvbnN0IFRyZWVTY29wZSYpIGNvbnN0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vVHJlZVNjb3BlLmNwcAppbmRleCBkNDZhM2E2ZDhkMDBiNmM4MWVlODc2ZTFiMjk2MWU4
ODFmMWU2MWNjLi5hZmY2ODc3YTRkYjEwY2Q1ZDUyYzQ1ODg2NDE1NWQzOTJkODNiNTlkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vVHJlZVNjb3BlLmNwcApAQCAtMjAxLDE4ICsyMDEsMTYgQEAgdm9pZCBUcmVlU2Nv
cGU6OnJlbW92ZUltYWdlTWFwKEhUTUxNYXBFbGVtZW50JiBpbWFnZU1hcCkKIAogSFRNTE1hcEVs
ZW1lbnQqIFRyZWVTY29wZTo6Z2V0SW1hZ2VNYXAoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0CiB7
Ci0gICAgaWYgKHVybC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYg
KCFtX2ltYWdlTWFwc0J5TmFtZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgc2l6ZV90
IGhhc2hQb3MgPSB1cmwuZmluZCgnIycpOwotICAgIFN0cmluZyBuYW1lID0gKGhhc2hQb3MgPT0g
bm90Rm91bmQgPyBTdHJpbmcoKSA6IHVybC5zdWJzdHJpbmcoaGFzaFBvcyArIDEpKS5pbXBsKCk7
CisgICAgYXV0byBoYXNoUG9zaXRpb24gPSB1cmwuZmluZCgnIycpOworICAgIGlmIChoYXNoUG9z
aXRpb24gPT0gbm90Rm91bmQpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIFN0cmluZyBu
YW1lID0gdXJsLnN1YnN0cmluZyhoYXNoUG9zaXRpb24gKyAxKTsKICAgICBpZiAobmFtZS5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmIChtX3Jvb3ROb2RlLmRvY3Vt
ZW50KCkuaXNIVE1MRG9jdW1lbnQoKSkgewotICAgICAgICBBdG9taWNTdHJpbmcgbG93ZXJjYXNl
ZE5hbWUgPSBuYW1lLmxvd2VyKCk7Ci0gICAgICAgIHJldHVybiBtX2ltYWdlTWFwc0J5TmFtZS0+
Z2V0RWxlbWVudEJ5TG93ZXJjYXNlZE1hcE5hbWUoKmxvd2VyY2FzZWROYW1lLmltcGwoKSwgKnRo
aXMpOwotICAgIH0KKyAgICBpZiAobV9yb290Tm9kZS5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50
KCkpCisgICAgICAgIHJldHVybiBtX2ltYWdlTWFwc0J5TmFtZS0+Z2V0RWxlbWVudEJ5Q2FzZUZv
bGRlZE1hcE5hbWUoKkF0b21pY1N0cmluZyhuYW1lLmZvbGRDYXNlKCkpLmltcGwoKSwgKnRoaXMp
OwogICAgIHJldHVybiBtX2ltYWdlTWFwc0J5TmFtZS0+Z2V0RWxlbWVudEJ5TWFwTmFtZSgqQXRv
bWljU3RyaW5nKG5hbWUpLmltcGwoKSwgKnRoaXMpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0KaW5kZXggNWY0NWU2M2NjOTNhNDM4ODg2ZjUz
ODBhMzE2NjdiYmE0MzA3ZjU5NS4uYmM1OGQ5MDdlYjZjNjQxZDUzM2M4NzAxZGQwNWY0NGYzMGQ0
NWIzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVy
dGVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5t
bQpAQCAtNTYsNiArNTYsNyBAQAogI2ltcG9ydCAiTlNBdHRyaWJ1dGVkU3RyaW5nU1BJLmgiCiAj
aW1wb3J0ICJSR0JDb2xvci5oIgogI2ltcG9ydCAiUmVuZGVySW1hZ2UuaCIKKyNpbXBvcnQgIlJl
bmRlclRleHQuaCIKICNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCiAjaW1wb3J0ICJTdHlsZVByb3Bl
cnRpZXMuaCIKICNpbXBvcnQgIlN0eWxlZEVsZW1lbnQuaCIKQEAgLTIyNzgsMTUgKzIyNzksMTIg
QEAgdm9pZCBIVE1MQ29udmVydGVyOjpfcHJvY2Vzc1RleHQoQ2hhcmFjdGVyRGF0YSYgY2hhcmFj
dGVyRGF0YSkKIAogICAgIGlmIChvdXRwdXRTdHJpbmcubGVuZ3RoKCkpIHsKICAgICAgICAgU3Ry
aW5nIHRleHRUcmFuc2Zvcm0gPSBfY2FjaGVzLT5wcm9wZXJ0eVZhbHVlRm9yTm9kZShjaGFyYWN0
ZXJEYXRhLCBDU1NQcm9wZXJ0eVRleHRUcmFuc2Zvcm0pOwotICAgICAgICBpZiAodGV4dFRyYW5z
Zm9ybS5sZW5ndGgoKSkgewotICAgICAgICAgICAgaWYgKHRleHRUcmFuc2Zvcm0gPT0gImNhcGl0
YWxpemUiKSB7Ly8gRklYTUU6IFRoaXMgaXMgZXh0cmVtZWx5IGluZWZmaWNpZW50LgotICAgICAg
ICAgICAgICAgIE5TU3RyaW5nICp0ZW1wb3JhcnlTdHJpbmcgPSBvdXRwdXRTdHJpbmc7Ci0gICAg
ICAgICAgICAgICAgb3V0cHV0U3RyaW5nID0gW3RlbXBvcmFyeVN0cmluZyBjYXBpdGFsaXplZFN0
cmluZ107Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHRleHRUcmFuc2Zvcm0gPT0gInVwcGVyY2Fz
ZSIpCi0gICAgICAgICAgICAgICAgb3V0cHV0U3RyaW5nID0gb3V0cHV0U3RyaW5nLnVwcGVyKCk7
Ci0gICAgICAgICAgICBlbHNlIGlmICh0ZXh0VHJhbnNmb3JtID09ICJsb3dlcmNhc2UiKQotICAg
ICAgICAgICAgICAgIG91dHB1dFN0cmluZyA9IG91dHB1dFN0cmluZy5sb3dlcigpOwotICAgICAg
ICB9CisgICAgICAgIGlmICh0ZXh0VHJhbnNmb3JtID09ICJjYXBpdGFsaXplIikKKyAgICAgICAg
ICAgIG1ha2VDYXBpdGFsaXplZCgmb3V0cHV0U3RyaW5nLCAwKTsgLy8gRklYTUU6IE5lZWRzIHRv
IHRha2UgbG9jYWxlIGludG8gYWNjb3VudCB0byB3b3JrIGNvcnJlY3RseS4KKyAgICAgICAgZWxz
ZSBpZiAodGV4dFRyYW5zZm9ybSA9PSAidXBwZXJjYXNlIikKKyAgICAgICAgICAgIG91dHB1dFN0
cmluZyA9IG91dHB1dFN0cmluZy5jb252ZXJ0VG9VcHBlcmNhc2VXaXRob3V0TG9jYWxlKCk7IC8v
IEZJWE1FOiBOZWVkcyBsb2NhbGUgdG8gd29yayBjb3JyZWN0bHkuCisgICAgICAgIGVsc2UgaWYg
KHRleHRUcmFuc2Zvcm0gPT0gImxvd2VyY2FzZSIpCisgICAgICAgICAgICBvdXRwdXRTdHJpbmcg
PSBvdXRwdXRTdHJpbmcuY29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZSgpOyAvLyBGSVhN
RTogTmVlZHMgbG9jYWxlIHRvIHdvcmsgY29ycmVjdGx5LgogCiAgICAgICAgIFtfYXR0clN0ciBy
ZXBsYWNlQ2hhcmFjdGVyc0luUmFuZ2U6cmFuZ2VUb1JlcGxhY2Ugd2l0aFN0cmluZzpvdXRwdXRT
dHJpbmddOwogICAgICAgICByYW5nZVRvUmVwbGFjZS5sZW5ndGggPSBvdXRwdXRTdHJpbmcubGVu
Z3RoKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAppbmRleCA4ZGU5
NTYzMGZiYmQwZWU0ZWMxNGU0OWQwYTY2ZjNjY2JmMDc3MGQyLi40ODhjNGU2YWY4ZTg1MThlMDEz
YWUxNjcyYTdjMTRkY2M2YzQ5ZTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxJbWFnZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxl
bWVudC5jcHAKQEAgLTIwMSwyMCArMjAxLDIwIEBAIHZvaWQgSFRNTEltYWdlRWxlbWVudDo6cGFy
c2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyCiAg
ICAgfSBlbHNlIGlmIChuYW1lID09IHNyY0F0dHIgfHwgbmFtZSA9PSBzcmNzZXRBdHRyIHx8IG5h
bWUgPT0gc2l6ZXNBdHRyKQogICAgICAgICBzZWxlY3RJbWFnZVNvdXJjZSgpOwogICAgIGVsc2Ug
aWYgKG5hbWUgPT0gdXNlbWFwQXR0cikgewotICAgICAgICBpZiAoaW5Eb2N1bWVudCgpICYmICFt
X2xvd2VyY2FzZWRVc2VtYXAuaXNOdWxsKCkpCi0gICAgICAgICAgICBkb2N1bWVudCgpLnJlbW92
ZUltYWdlRWxlbWVudEJ5TG93ZXJjYXNlZFVzZW1hcCgqbV9sb3dlcmNhc2VkVXNlbWFwLmltcGwo
KSwgKnRoaXMpOworICAgICAgICBpZiAoaW5Eb2N1bWVudCgpICYmICFtX2Nhc2VGb2xkZWRVc2Vt
YXAuaXNOdWxsKCkpCisgICAgICAgICAgICBkb2N1bWVudCgpLnJlbW92ZUltYWdlRWxlbWVudEJ5
Q2FzZUZvbGRlZFVzZW1hcCgqbV9jYXNlRm9sZGVkVXNlbWFwLmltcGwoKSwgKnRoaXMpOwogCiAg
ICAgICAgIC8vIFRoZSBIVE1MSW1hZ2VFbGVtZW50J3MgdXNlTWFwKCkgdmFsdWUgaW5jbHVkZXMg
dGhlICcjJyBzeW1ib2wgYXQgdGhlIGJlZ2lubmluZywgd2hpY2ggaGFzIHRvIGJlIHN0cmlwcGVk
IG9mZi4KICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjaGVjayB0aGF0IHRoZSBmaXJzdCBj
aGFyYWN0ZXIgaXMgJyMnLgotICAgICAgICAvLyBGSVhNRTogSFRNTDUgc3BlY2lmaWNhdGlvbiBz
YXlzIHdlIHNob3VsZCBzdHJpcCBhbnkgbGVhZGluZyBzdHJpbmcgYmVmb3JlICcjJy4KLSAgICAg
ICAgLy8gRklYTUU6IEhUTUw1IHNwZWNpZmljYXRpb24gc2F5cyB3ZSBzaG91bGQgaWdub3JlIHVz
ZW1hcCBhdHRyaWJ1dGVzIHdpdGhvdXQgIy4KKyAgICAgICAgLy8gRklYTUU6IEhUTUwgc3BlY2lm
aWNhdGlvbiBzYXlzIHdlIHNob3VsZCBzdHJpcCBhbnkgbGVhZGluZyBzdHJpbmcgYmVmb3JlICcj
Jy4KKyAgICAgICAgLy8gRklYTUU6IEhUTUwgc3BlY2lmaWNhdGlvbiBzYXlzIHdlIHNob3VsZCBp
Z25vcmUgdXNlbWFwIGF0dHJpYnV0ZXMgd2l0aG91dCAnIycuCiAgICAgICAgIGlmICh2YWx1ZS5s
ZW5ndGgoKSA+IDEpCi0gICAgICAgICAgICBtX2xvd2VyY2FzZWRVc2VtYXAgPSB2YWx1ZS5zdHJp
bmcoKS5zdWJzdHJpbmcoMSkubG93ZXIoKTsKKyAgICAgICAgICAgIG1fY2FzZUZvbGRlZFVzZW1h
cCA9IHZhbHVlLnN0cmluZygpLnN1YnN0cmluZygxKS5mb2xkQ2FzZSgpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBtX2xvd2VyY2FzZWRVc2VtYXAgPSBudWxsQXRvbTsKKyAgICAgICAgICAg
IG1fY2FzZUZvbGRlZFVzZW1hcCA9IG51bGxBdG9tOwogCi0gICAgICAgIGlmIChpbkRvY3VtZW50
KCkgJiYgIW1fbG93ZXJjYXNlZFVzZW1hcC5pc051bGwoKSkKLSAgICAgICAgICAgIGRvY3VtZW50
KCkuYWRkSW1hZ2VFbGVtZW50QnlMb3dlcmNhc2VkVXNlbWFwKCptX2xvd2VyY2FzZWRVc2VtYXAu
aW1wbCgpLCAqdGhpcyk7CisgICAgICAgIGlmIChpbkRvY3VtZW50KCkgJiYgIW1fY2FzZUZvbGRl
ZFVzZW1hcC5pc051bGwoKSkKKyAgICAgICAgICAgIGRvY3VtZW50KCkuYWRkSW1hZ2VFbGVtZW50
QnlDYXNlRm9sZGVkVXNlbWFwKCptX2Nhc2VGb2xkZWRVc2VtYXAuaW1wbCgpLCAqdGhpcyk7CiAg
ICAgfSBlbHNlIGlmIChuYW1lID09IGNvbXBvc2l0ZUF0dHIpIHsKICAgICAgICAgLy8gRklYTUU6
IGltYWdlcyBkb24ndCBzdXBwb3J0IGJsZW5kIG1vZGVzIGluIHRoZWlyIGNvbXBvc2l0aW5nIGF0
dHJpYnV0ZS4KICAgICAgICAgQmxlbmRNb2RlIGJsZW5kT3AgPSBCbGVuZE1vZGVOb3JtYWw7CkBA
IC0zMTIsOCArMzEyLDggQEAgTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBIVE1M
SW1hZ2VFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYKICAgICAvLyBpbiBjYWxs
YmFja3MgYmFjayB0byB0aGlzIG5vZGUuCiAgICAgTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9u
UmVxdWVzdCBpbnNlcnROb3RpZmljYXRpb25SZXF1ZXN0ID0gSFRNTEVsZW1lbnQ6Omluc2VydGVk
SW50byhpbnNlcnRpb25Qb2ludCk7CiAKLSAgICBpZiAoaW5zZXJ0aW9uUG9pbnQuaW5Eb2N1bWVu
dCgpICYmICFtX2xvd2VyY2FzZWRVc2VtYXAuaXNOdWxsKCkpCi0gICAgICAgIGRvY3VtZW50KCku
YWRkSW1hZ2VFbGVtZW50QnlMb3dlcmNhc2VkVXNlbWFwKCptX2xvd2VyY2FzZWRVc2VtYXAuaW1w
bCgpLCAqdGhpcyk7CisgICAgaWYgKGluc2VydGlvblBvaW50LmluRG9jdW1lbnQoKSAmJiAhbV9j
YXNlRm9sZGVkVXNlbWFwLmlzTnVsbCgpKQorICAgICAgICBkb2N1bWVudCgpLmFkZEltYWdlRWxl
bWVudEJ5Q2FzZUZvbGRlZFVzZW1hcCgqbV9jYXNlRm9sZGVkVXNlbWFwLmltcGwoKSwgKnRoaXMp
OwogCiAgICAgaWYgKGlzPEhUTUxQaWN0dXJlRWxlbWVudD4ocGFyZW50Tm9kZSgpKSkgewogICAg
ICAgICBzZXRQaWN0dXJlRWxlbWVudCgmZG93bmNhc3Q8SFRNTFBpY3R1cmVFbGVtZW50PigqcGFy
ZW50Tm9kZSgpKSk7CkBAIC0zMzMsOCArMzMzLDggQEAgdm9pZCBIVE1MSW1hZ2VFbGVtZW50Ojpy
ZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKICAgICBpZiAobV9mb3Jt
KQogICAgICAgICBtX2Zvcm0tPnJlbW92ZUltZ0VsZW1lbnQodGhpcyk7CiAKLSAgICBpZiAoaW5z
ZXJ0aW9uUG9pbnQuaW5Eb2N1bWVudCgpICYmICFtX2xvd2VyY2FzZWRVc2VtYXAuaXNOdWxsKCkp
Ci0gICAgICAgIGRvY3VtZW50KCkucmVtb3ZlSW1hZ2VFbGVtZW50QnlMb3dlcmNhc2VkVXNlbWFw
KCptX2xvd2VyY2FzZWRVc2VtYXAuaW1wbCgpLCAqdGhpcyk7CisgICAgaWYgKGluc2VydGlvblBv
aW50LmluRG9jdW1lbnQoKSAmJiAhbV9jYXNlRm9sZGVkVXNlbWFwLmlzTnVsbCgpKQorICAgICAg
ICBkb2N1bWVudCgpLnJlbW92ZUltYWdlRWxlbWVudEJ5Q2FzZUZvbGRlZFVzZW1hcCgqbV9jYXNl
Rm9sZGVkVXNlbWFwLmltcGwoKSwgKnRoaXMpOwogICAgIAogICAgIGlmIChpczxIVE1MUGljdHVy
ZUVsZW1lbnQ+KHBhcmVudE5vZGUoKSkpCiAgICAgICAgIHNldFBpY3R1cmVFbGVtZW50KG51bGxw
dHIpOwpAQCAtNDc0LDEwICs0NzQsMTAgQEAgU3RyaW5nIEhUTUxJbWFnZUVsZW1lbnQ6OmNvbXBs
ZXRlVVJMc0luQXR0cmlidXRlVmFsdWUoY29uc3QgVVJMJiBiYXNlLCBjb25zdCBBdHQKICAgICBy
ZXR1cm4gSFRNTEVsZW1lbnQ6OmNvbXBsZXRlVVJMc0luQXR0cmlidXRlVmFsdWUoYmFzZSwgYXR0
cmlidXRlKTsKIH0KIAotYm9vbCBIVE1MSW1hZ2VFbGVtZW50OjptYXRjaGVzTG93ZXJjYXNlZFVz
ZW1hcChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBuYW1lKSBjb25zdAorYm9vbCBIVE1MSW1hZ2VF
bGVtZW50OjptYXRjaGVzQ2FzZUZvbGRlZFVzZW1hcChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBu
YW1lKSBjb25zdAogewotICAgIEFTU0VSVChTdHJpbmcoJmNvbnN0X2Nhc3Q8QXRvbWljU3RyaW5n
SW1wbCY+KG5hbWUpKS5sb3dlcigpLmltcGwoKSA9PSAmbmFtZSk7Ci0gICAgcmV0dXJuIG1fbG93
ZXJjYXNlZFVzZW1hcC5pbXBsKCkgPT0gJm5hbWU7CisgICAgQVNTRVJUKFN0cmluZygmY29uc3Rf
Y2FzdDxBdG9taWNTdHJpbmdJbXBsJj4obmFtZSkpLmZvbGRDYXNlKCkuaW1wbCgpID09ICZuYW1l
KTsKKyAgICByZXR1cm4gbV9jYXNlRm9sZGVkVXNlbWFwLmltcGwoKSA9PSAmbmFtZTsKIH0KIAog
Y29uc3QgQXRvbWljU3RyaW5nJiBIVE1MSW1hZ2VFbGVtZW50OjphbHQoKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaAppbmRleCA0NDdiNjI0M2FkNjU3NTg3MzE1NTQ3
YTBkOTA0Mzc4NTg2YjNhYzc0Li42NzkzMWI1ZDYwYjVmNzgwMTM1ZjVlODhiZWY3NTBiMmEzOTEz
NjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaApAQCAtNjAsNyArNjAs
NyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldExvYWRNYW51YWxseShib29sIGxvYWRNYW51YWxs
eSkgeyBtX2ltYWdlTG9hZGVyLnNldExvYWRNYW51YWxseShsb2FkTWFudWFsbHkpOyB9CiAKLSAg
ICBib29sIG1hdGNoZXNMb3dlcmNhc2VkVXNlbWFwKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmKSBj
b25zdDsKKyAgICBib29sIG1hdGNoZXNDYXNlRm9sZGVkVXNlbWFwKGNvbnN0IEF0b21pY1N0cmlu
Z0ltcGwmKSBjb25zdDsKIAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYWx0KCkgY29uc3Q7CiAK
QEAgLTEzNCw3ICsxMzQsNyBAQCBwcml2YXRlOgogICAgIENvbXBvc2l0ZU9wZXJhdG9yIG1fY29t
cG9zaXRlT3BlcmF0b3I7CiAgICAgQXRvbWljU3RyaW5nIG1fYmVzdEZpdEltYWdlVVJMOwogICAg
IEF0b21pY1N0cmluZyBtX2N1cnJlbnRTcmM7Ci0gICAgQXRvbWljU3RyaW5nIG1fbG93ZXJjYXNl
ZFVzZW1hcDsKKyAgICBBdG9taWNTdHJpbmcgbV9jYXNlRm9sZGVkVXNlbWFwOwogICAgIGZsb2F0
IG1faW1hZ2VEZXZpY2VQaXhlbFJhdGlvOwogICAgIGJvb2wgbV9leHBlcmltZW50YWxJbWFnZU1l
bnVFbmFibGVkOwogICAgIGJvb2wgbV9oYWROYW1lQmVmb3JlQXR0cmlidXRlQ2hhbmdlZCB7IGZh
bHNlIH07IC8vIEZJWE1FOiBXZSBvbmx5IG5lZWQgdGhpcyBiZWNhdXNlIHBhcnNlQXR0cmlidXRl
KCkgY2FuJ3Qgc2VlIHRoZSBvbGQgdmFsdWUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxNYXBFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1l
bnQuY3BwCmluZGV4IDNlZTYxYmFhMDAxZTIzNGE0YjMzZjdkMTU4YmM2ODY5OTJjNDZjZjguLmVj
Yzg3NTI5NmI1M2UzMGUwMjkxNGFiNWFkYTk1ZGMzZGE0MjU2OTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1hcEVsZW1lbnQuY3BwCkBAIC03OCwxMCArNzgsOCBAQCBib29sIEhUTUxNYXBFbGVt
ZW50OjptYXBNb3VzZUV2ZW50KExheW91dFBvaW50IGxvY2F0aW9uLCBjb25zdCBMYXlvdXRTaXpl
JiBzaXplLAogSFRNTEltYWdlRWxlbWVudCogSFRNTE1hcEVsZW1lbnQ6OmltYWdlRWxlbWVudCgp
CiB7CiAgICAgaWYgKG1fbmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIEF0
b21pY1N0cmluZyBsb3dlcmNhc2VkTmFtZSA9IG1fbmFtZS5sb3dlcigpOwotICAgIEFTU0VSVChs
b3dlcmNhc2VkTmFtZS5pbXBsKCkpOwotICAgIHJldHVybiBkb2N1bWVudCgpLmltYWdlRWxlbWVu
dEJ5TG93ZXJjYXNlZFVzZW1hcCgqbG93ZXJjYXNlZE5hbWUuaW1wbCgpKTsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGRvY3VtZW50KCkuaW1hZ2VFbGVtZW50QnlDYXNlRm9s
ZGVkVXNlbWFwKCpBdG9taWNTdHJpbmcobV9uYW1lLnN0cmluZygpLmZvbGRDYXNlKCkpLmltcGwo
KSk7CiB9CiAKIHZvaWQgSFRNTE1hcEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCkBAIC0xMDEsNyArOTks
NyBAQCB2b2lkIEhUTUxNYXBFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbgogICAgICAgICBTdHJpbmcgbWFwTmFtZSA9IHZh
bHVlOwogICAgICAgICBpZiAobWFwTmFtZVswXSA9PSAnIycpCiAgICAgICAgICAgICBtYXBOYW1l
ID0gbWFwTmFtZS5zdWJzdHJpbmcoMSk7Ci0gICAgICAgIG1fbmFtZSA9IGRvY3VtZW50KCkuaXNI
VE1MRG9jdW1lbnQoKSA/IG1hcE5hbWUubG93ZXIoKSA6IG1hcE5hbWU7CisgICAgICAgIG1fbmFt
ZSA9IGRvY3VtZW50KCkuaXNIVE1MRG9jdW1lbnQoKSA/IG1hcE5hbWUuZm9sZENhc2UoKSA6IG1h
cE5hbWU7CiAgICAgICAgIGlmIChpbkRvY3VtZW50KCkpCiAgICAgICAgICAgICB0cmVlU2NvcGUo
KS5hZGRJbWFnZU1hcCgqdGhpcyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0xhbmd1YWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xhbmd1YWdlLmNwcApp
bmRleCA2NTU3OGQwZWNkZTY0ZTJmZjA1NzVlODJjNDhlNDU1MTI2YTgzOWNkLi5hOGFlOGUzYzgw
MzJmYzRkNGNkOTUxOGNiYmE1Y2MyOWY2NmY5N2QyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9MYW5ndWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGFu
Z3VhZ2UuY3BwCkBAIC05OSw3ICs5OSw3IEBAIFZlY3RvcjxTdHJpbmc+IHVzZXJQcmVmZXJyZWRM
YW5ndWFnZXMoKQogCiBzdGF0aWMgU3RyaW5nIGNhbm9uaWNhbExhbmd1YWdlSWRlbnRpZmllcihj
b25zdCBTdHJpbmcmIGxhbmd1YWdlQ29kZSkKIHsKLSAgICBTdHJpbmcgbG93ZXJjYXNlTGFuZ3Vh
Z2VDb2RlID0gbGFuZ3VhZ2VDb2RlLmxvd2VyKCk7CisgICAgU3RyaW5nIGxvd2VyY2FzZUxhbmd1
YWdlQ29kZSA9IGxhbmd1YWdlQ29kZS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOwogICAgIAog
ICAgIGlmIChsb3dlcmNhc2VMYW5ndWFnZUNvZGUubGVuZ3RoKCkgPj0gMyAmJiBsb3dlcmNhc2VM
YW5ndWFnZUNvZGVbMl0gPT0gJ18nKQogICAgICAgICBsb3dlcmNhc2VMYW5ndWFnZUNvZGUucmVw
bGFjZSgyLCAxLCAiLSIpOwpAQCAtMTA5LDcgKzEwOSw3IEBAIHN0YXRpYyBTdHJpbmcgY2Fub25p
Y2FsTGFuZ3VhZ2VJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2VDb2RlKQogCiBzaXpl
X3QgaW5kZXhPZkJlc3RNYXRjaGluZ0xhbmd1YWdlSW5MaXN0KGNvbnN0IFN0cmluZyYgbGFuZ3Vh
Z2UsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYW5ndWFnZUxpc3QsIGJvb2wmIGV4YWN0TWF0Y2gp
CiB7Ci0gICAgU3RyaW5nIGxvd2VyY2FzZUxhbmd1YWdlID0gbGFuZ3VhZ2UubG93ZXIoKTsKKyAg
ICBTdHJpbmcgbG93ZXJjYXNlTGFuZ3VhZ2UgPSBsYW5ndWFnZS5jb252ZXJ0VG9BU0NJSUxvd2Vy
Y2FzZSgpOwogICAgIFN0cmluZyBsYW5ndWFnZVdpdGhvdXRMb2NhbGVNYXRjaDsKICAgICBTdHJp
bmcgbGFuZ3VhZ2VNYXRjaEJ1dE5vdExvY2FsZTsKICAgICBzaXplX3QgbGFuZ3VhZ2VXaXRob3V0
TG9jYWxlTWF0Y2hJbmRleCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5jcHAKaW5kZXggZmRlOGUw
NjkzMGQ4NzExNGEwZGJjODdhNGFkNWEwM2IxZmNjNTQ5MC4uNWIxZTcyZWY3ZTVjNzE5YzdlODk4
ZWUzOTY1NWFhMmIyNGY1Zjc1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmNwcApAQCAtNDgyLDcg
KzQ4Miw3IEBAIGJvb2wgSGFyZkJ1enpTaGFwZXI6OnNoYXBlSGFyZkJ1enpSdW5zKGJvb2wgc2hv
dWxkU2V0RGlyZWN0aW9uKQogICAgICAgICBoYl9idWZmZXJfYWRkX3V0ZjE2KGhhcmZCdXp6QnVm
ZmVyLmdldCgpLCAmcHJlQ29udGV4dCwgMSwgMSwgMCk7CiAKICAgICAgICAgaWYgKG1fZm9udC0+
aXNTbWFsbENhcHMoKSAmJiB1X2lzbG93ZXIobV9ub3JtYWxpemVkQnVmZmVyW2N1cnJlbnRSdW4t
PnN0YXJ0SW5kZXgoKV0pKSB7Ci0gICAgICAgICAgICBTdHJpbmcgdXBwZXJUZXh0ID0gU3RyaW5n
KG1fbm9ybWFsaXplZEJ1ZmZlci5nZXQoKSArIGN1cnJlbnRSdW4tPnN0YXJ0SW5kZXgoKSwgY3Vy
cmVudFJ1bi0+bnVtQ2hhcmFjdGVycygpKS51cHBlcigpOworICAgICAgICAgICAgU3RyaW5nIHVw
cGVyVGV4dCA9IFN0cmluZyhtX25vcm1hbGl6ZWRCdWZmZXIuZ2V0KCkgKyBjdXJyZW50UnVuLT5z
dGFydEluZGV4KCksIGN1cnJlbnRSdW4tPm51bUNoYXJhY3RlcnMoKSkuY29udmVydFRvVXBwZXJj
YXNlV2l0aG91dExvY2FsZSgpOwogICAgICAgICAgICAgY3VycmVudEZvbnREYXRhID0gbV9mb250
LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIodXBwZXJUZXh0WzBdLCBmYWxzZSwgU21hbGxDYXBzVmFy
aWFudCkuZm9udDsKICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gU3RyaW5n
Vmlldyh1cHBlclRleHQpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwogICAgICAgICAgICAgaGJf
YnVmZmVyX2FkZF91dGYxNihoYXJmQnV6ekJ1ZmZlci5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50MTZfdCo+KGNoYXJhY3RlcnMpLCBjdXJyZW50UnVuLT5udW1DaGFyYWN0ZXJzKCks
IDAsIGN1cnJlbnRSdW4tPm51bUNoYXJhY3RlcnMoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuY3BwCmluZGV4IDFkMGU5ZDA2NDM3ODY0YTI0NjIx
N2I0ZWYyMDAzMmRmZjJjY2QyOGYuLmIyMGNmYzNkMjI3NzdmNjc2NmQ0Y2MzZjE1ODBhZWQ3ZDRh
ZGUxZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFBh
cnNlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNl
cnMuY3BwCkBAIC00NTYsNyArNDU2LDcgQEAgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZWZsZWN0
ZWRYU1NEaXNwb3NpdGlvbiBwYXJzZVhTU1Byb3RlY3Rpb25IZWFkZXIoY29uc3QgU3QKICNpZiBF
TkFCTEUoTk9TTklGRikKIENvbnRlbnRUeXBlT3B0aW9uc0Rpc3Bvc2l0aW9uIHBhcnNlQ29udGVu
dFR5cGVPcHRpb25zSGVhZGVyKGNvbnN0IFN0cmluZyYgaGVhZGVyKQogewotICAgIGlmIChoZWFk
ZXIuc3RyaXBXaGl0ZVNwYWNlKCkubG93ZXIoKSA9PSAibm9zbmlmZiIpCisgICAgaWYgKGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGhlYWRlci5zdHJpcFdoaXRlU3BhY2UoKSwgIm5vc25p
ZmYiKSkKICAgICAgICAgcmV0dXJuIENvbnRlbnRUeXBlT3B0aW9uc05vc25pZmY7CiAgICAgcmV0
dXJuIENvbnRlbnRUeXBlT3B0aW9uc05vbmU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL01JTUVIZWFkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcAppbmRleCA1MGVlZmJkOWExNDIzZTI2MTJmODUwYWIw
MzUwOTA1MTgwZjI4MjYxLi4zYTU5OGNjNThiYjY5MGMwYzYzMDE5YmM3YzhmOWE4OGZiOGNhNjhj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL01JTUVIZWFkZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTUlNRUhlYWRlci5jcHAK
QEAgLTcwLDcgKzcwLDcgQEAgc3RhdGljIEtleVZhbHVlTWFwIHJldHJpZXZlS2V5VmFsdWVQYWly
cyhXZWJDb3JlOjpTaGFyZWRCdWZmZXJDaHVua1JlYWRlciogYnVmZmUKICAgICAgICAgICAgIC8v
IFRoaXMgaXMgbm90IGEga2V5IHZhbHVlIHBhaXIsIGlnbm9yZS4KICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9Ci0gICAgICAgIGtleSA9IGxpbmUuc3Vic3RyaW5nKDAsIHNlbWlDb2xv
bkluZGV4KS5sb3dlcigpLnN0cmlwV2hpdGVTcGFjZSgpOworICAgICAgICBrZXkgPSBsaW5lLnN1
YnN0cmluZygwLCBzZW1pQ29sb25JbmRleCkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKS5zdHJp
cFdoaXRlU3BhY2UoKTsKICAgICAgICAgdmFsdWUuYXBwZW5kKGxpbmUuc3Vic3RyaW5nKHNlbWlD
b2xvbkluZGV4ICsgMSkpOwogICAgIH0KICAgICAvLyBTdG9yZSB0aGUgbGFzdCBwcm9wZXJ0eSBp
ZiB0aGVyZSBpcyBvbmUuCkBAIC0xMTQsMTQgKzExNCwxNCBAQCBQYXNzUmVmUHRyPE1JTUVIZWFk
ZXI+IE1JTUVIZWFkZXI6OnBhcnNlSGVhZGVyKFNoYXJlZEJ1ZmZlckNodW5rUmVhZGVyKiBidWZm
ZXIpCiAKIE1JTUVIZWFkZXI6OkVuY29kaW5nIE1JTUVIZWFkZXI6OnBhcnNlQ29udGVudFRyYW5z
ZmVyRW5jb2RpbmcoY29uc3QgU3RyaW5nJiB0ZXh0KQogewotICAgIFN0cmluZyBlbmNvZGluZyA9
IHRleHQuc3RyaXBXaGl0ZVNwYWNlKCkubG93ZXIoKTsKLSAgICBpZiAoZW5jb2RpbmcgPT0gImJh
c2U2NCIpCisgICAgU3RyaW5nIGVuY29kaW5nID0gdGV4dC5zdHJpcFdoaXRlU3BhY2UoKTsKKyAg
ICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZW5jb2RpbmcsICJiYXNlNjQiKSkK
ICAgICAgICAgcmV0dXJuIEJhc2U2NDsKLSAgICBpZiAoZW5jb2RpbmcgPT0gInF1b3RlZC1wcmlu
dGFibGUiKQorICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShlbmNvZGluZywg
InF1b3RlZC1wcmludGFibGUiKSkKICAgICAgICAgcmV0dXJuIFF1b3RlZFByaW50YWJsZTsKLSAg
ICBpZiAoZW5jb2RpbmcgPT0gIjdiaXQiKQorICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShlbmNvZGluZywgIjdiaXQiKSkKICAgICAgICAgcmV0dXJuIFNldmVuQml0OwotICAg
IGlmIChlbmNvZGluZyA9PSAiYmluYXJ5IikKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2UoZW5jb2RpbmcsICJiaW5hcnkiKSkKICAgICAgICAgcmV0dXJuIEJpbmFyeTsKICAg
ICBMT0dfRVJST1IoIlVua25vd24gZW5jb2RpbmcgJyVzJyBmb3VuZCBpbiBNSU1FIGhlYWRlci4i
LCB0ZXh0LmFzY2lpKCkuZGF0YSgpKTsKICAgICByZXR1cm4gVW5rbm93bjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZO
ZXQuY3BwCmluZGV4IDUxMzkwZjZlZDcwOGU4NWUzOWRjNDY0NTk2ZjNmNmQ5ZWVlYjZjZDEuLjZm
Nzk1N2FjYTRhMTc5N2Y1ZDk1YmMwM2VlNjgyMDZmOWM5NGY5YTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0
LmNwcApAQCAtODIsMTYgKzgyLDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFVTRShD
Rk5FVFdPUkspCiAKLXN0YXRpYyBIYXNoU2V0PFN0cmluZz4mIGFsbG93c0FueUhUVFBTQ2VydGlm
aWNhdGVIb3N0cygpCitzdGF0aWMgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZl
SGFzaD4mIGFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGVIb3N0cygpCiB7Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5nPj4gaG9zdHM7CisgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+PiBob3N0czsK
ICAgICByZXR1cm4gaG9zdHM7CiB9CiAKLXN0YXRpYyBIYXNoTWFwPFN0cmluZywgUmV0YWluUHRy
PENGRGF0YVJlZj4+JiBjbGllbnRDZXJ0cygpCitzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFJldGFp
blB0cjxDRkRhdGFSZWY+LCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiBjbGllbnRDZXJ0aWZp
Y2F0ZXMoKQogewotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJldGFpblB0cjxDRkRhdGFS
ZWY+PiBDZXJ0c01hcDsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q2VydHNNYXA+IGNlcnRz
OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFN0cmluZywgUmV0YWluUHRyPENG
RGF0YVJlZj4sIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4+IGNlcnRzOwogICAgIHJldHVybiBj
ZXJ0czsKIH0KIApAQCAtMTY5LDcgKzE2OCw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmNyZWF0
ZUNGVVJMQ29ubmVjdGlvbihib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlLCBib29sCiAj
aWYgUExBVEZPUk0oSU9TKQogICAgIHNzbFByb3BzID0gYWRvcHRDRihSZXNvdXJjZUhhbmRsZTo6
Y3JlYXRlU1NMUHJvcGVydGllc0Zyb21OU1VSTFJlcXVlc3QoZmlyc3RSZXF1ZXN0KCkpKTsKICNl
bHNlCi0gICAgaWYgKGFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGVIb3N0cygpLmNvbnRhaW5zKGZp
cnN0UmVxdWVzdCgpLnVybCgpLmhvc3QoKS5sb3dlcigpKSkgeworICAgIGlmIChhbGxvd3NBbnlI
VFRQU0NlcnRpZmljYXRlSG9zdHMoKS5jb250YWlucyhmaXJzdFJlcXVlc3QoKS51cmwoKS5ob3N0
KCkpKSB7CiAgICAgICAgIHNzbFByb3BzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRh
YmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNr
cywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKICAgICAgICAgQ0ZEaWN0aW9u
YXJ5QWRkVmFsdWUoc3NsUHJvcHMuZ2V0KCksIGtDRlN0cmVhbVNTTEFsbG93c0FueVJvb3QsIGtD
RkJvb2xlYW5UcnVlKTsKICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoc3NsUHJvcHMuZ2V0
KCksIGtDRlN0cmVhbVNTTEFsbG93c0V4cGlyZWRSb290cywga0NGQm9vbGVhblRydWUpOwpAQCAt
MTc3LDggKzE3Niw4IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZUNGVVJMQ29ubmVjdGlv
bihib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlLCBib29sCiAgICAgICAgIENGRGljdGlv
bmFyeUFkZFZhbHVlKHNzbFByb3BzLmdldCgpLCBrQ0ZTdHJlYW1TU0xWYWxpZGF0ZXNDZXJ0aWZp
Y2F0ZUNoYWluLCBrQ0ZCb29sZWFuRmFsc2UpOwogICAgIH0KIAotICAgIEhhc2hNYXA8U3RyaW5n
LCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPj46Oml0ZXJhdG9yIGNsaWVudENlcnQgPSBjbGllbnRDZXJ0
cygpLmZpbmQoZmlyc3RSZXF1ZXN0KCkudXJsKCkuaG9zdCgpLmxvd2VyKCkpOwotICAgIGlmIChj
bGllbnRDZXJ0ICE9IGNsaWVudENlcnRzKCkuZW5kKCkpIHsKKyAgICBIYXNoTWFwPFN0cmluZywg
UmV0YWluUHRyPENGRGF0YVJlZj4+OjppdGVyYXRvciBjbGllbnRDZXJ0ID0gY2xpZW50Q2VydGlm
aWNhdGVzKCkuZmluZChmaXJzdFJlcXVlc3QoKS51cmwoKS5ob3N0KCkpOworICAgIGlmIChjbGll
bnRDZXJ0ICE9IGNsaWVudENlcnRpZmljYXRlcygpLmVuZCgpKSB7CiAgICAgICAgIGlmICghc3Ns
UHJvcHMpCiAgICAgICAgICAgICBzc2xQcm9wcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRl
TXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxs
QmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CiAjaWYgUExBVEZPUk0o
V0lOKQpAQCAtNjAzLDEyICs2MDIsMTIgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1M
b2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXgKIAogdm9p
ZCBSZXNvdXJjZUhhbmRsZTo6c2V0SG9zdEFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGUoY29uc3Qg
U3RyaW5nJiBob3N0KQogewotICAgIGFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGVIb3N0cygpLmFk
ZChob3N0Lmxvd2VyKCkpOworICAgIGFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGVIb3N0cygpLmFk
ZChob3N0KTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0Q2xpZW50Q2VydGlmaWNhdGUo
Y29uc3QgU3RyaW5nJiBob3N0LCBDRkRhdGFSZWYgY2VydCkKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6
OnNldENsaWVudENlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYgaG9zdCwgQ0ZEYXRhUmVmIGNlcnRp
ZmljYXRlKQogewotICAgIGNsaWVudENlcnRzKCkuc2V0KGhvc3QubG93ZXIoKSwgY2VydCk7Cisg
ICAgY2xpZW50Q2VydGlmaWNhdGVzKCkuc2V0KGhvc3QsIGNlcnRpZmljYXRlKTsKIH0KIAogdm9p
ZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1TZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUph
ckN1cmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUph
ckN1cmwuY3BwCmluZGV4IGI5ZDZkZDRiYTc4MGVlMzU3NWU5NDgxOTJmZDk4MmI0NDdlNWYyOTYu
LmIyNzZjYTc1ZTRmYTgxYmQ4ZjBjYjhlYTMzMTllY2VjNGExYzhkZWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHAK
QEAgLTE5NSwyMCArMTk1LDIwIEBAIHN0YXRpYyBTdHJpbmcgZ2V0TmV0c2NhcGVDb29raWVGb3Jt
YXQoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgIGlmIChhdHRy
aWJ1dGUtPmNvbnRhaW5zKCc9JykpIHsKICAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGtleVZh
bHVlUGFpcjsKICAgICAgICAgICAgIGF0dHJpYnV0ZS0+c3BsaXQoJz0nLCB0cnVlLCBrZXlWYWx1
ZVBhaXIpOwotICAgICAgICAgICAgU3RyaW5nIGtleSA9IGtleVZhbHVlUGFpclswXS5zdHJpcFdo
aXRlU3BhY2UoKS5sb3dlcigpOworICAgICAgICAgICAgU3RyaW5nIGtleSA9IGtleVZhbHVlUGFp
clswXS5zdHJpcFdoaXRlU3BhY2UoKTsKICAgICAgICAgICAgIFN0cmluZyB2YWwgPSBrZXlWYWx1
ZVBhaXJbMV0uc3RyaXBXaGl0ZVNwYWNlKCk7Ci0gICAgICAgICAgICBpZiAoa2V5ID09ICJleHBp
cmVzIikgeworICAgICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGtl
eSwgImV4cGlyZXMiKSkgewogICAgICAgICAgICAgICAgIENTdHJpbmcgZGF0ZVN0cihyZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWwuY2hhcmFjdGVyczgoKSksIHZhbC5sZW5ndGgoKSk7
CiAgICAgICAgICAgICAgICAgZXhwaXJlcyA9IFdURjo6cGFyc2VEYXRlRnJvbU51bGxUZXJtaW5h
dGVkQ2hhcmFjdGVycyhkYXRlU3RyLmRhdGEoKSkgLyBXVEY6Om1zUGVyU2Vjb25kOwotICAgICAg
ICAgICAgfSBlbHNlIGlmIChrZXkgPT0gIm1heC1hZ2UiKQorICAgICAgICAgICAgfSBlbHNlIGlm
IChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShrZXksICJtYXgtYWdlIikpCiAgICAgICAg
ICAgICAgICAgZXhwaXJlcyA9IHRpbWUoMCkgKyB2YWwudG9JbnQoKTsKLSAgICAgICAgICAgIGVs
c2UgaWYgKGtleSA9PSAiZG9tYWluIikgCisgICAgICAgICAgICBlbHNlIGlmIChlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShrZXksICJkb21haW4iKSkKICAgICAgICAgICAgICAgICBkb21h
aW4gPSB2YWw7Ci0gICAgICAgICAgICBlbHNlIGlmIChrZXkgPT0gInBhdGgiKSAKKyAgICAgICAg
ICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGtleSwgInBhdGgiKSkK
ICAgICAgICAgICAgICAgICBwYXRoID0gdmFsOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgU3RyaW5nIGtleSA9IGF0dHJpYnV0ZS0+c3RyaXBXaGl0ZVNwYWNlKCkubG93ZXIoKTsKLSAg
ICAgICAgICAgIGlmIChrZXkgPT0gInNlY3VyZSIpCisgICAgICAgICAgICBTdHJpbmcga2V5ID0g
YXR0cmlidXRlLT5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICAgICAgICAgIGlmIChlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShrZXksICJzZWN1cmUiKSkKICAgICAgICAgICAgICAgICBzZWN1
cmUgPSAiVFJVRSI7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvTXVsdGlwYXJ0SGFuZGxlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9NdWx0aXBhcnRIYW5kbGUuY3BwCmluZGV4IDg5N2Y5
NWMxOTBhNTQxNjViZDk1NDc5YzQ1NGUzOTQ2YmVlZjBjYmEuLjkxMTFmYTBjZTQzMDg5N2QxYTFk
NWY3NzdmZTE3NGRhM2JkNTI4NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9NdWx0aXBhcnRIYW5kbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9NdWx0aXBhcnRIYW5kbGUuY3BwCkBAIC0zNDYsNyArMzQ2LDcg
QEAgdm9pZCBNdWx0aXBhcnRIYW5kbGU6OmRpZFJlY2VpdmVSZXNwb25zZSgpCiAgICAgICAgIFN0
cmluZyBjb250ZW50VHlwZSA9IG1faGVhZGVycy5nZXQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRU
eXBlKTsKICAgICAgICAgU3RyaW5nIG1pbWVUeXBlID0gZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlh
VHlwZShjb250ZW50VHlwZSk7CiAKLSAgICAgICAgcmVzcG9uc2UtPnNldE1pbWVUeXBlKG1pbWVU
eXBlLmxvd2VyKCkpOworICAgICAgICByZXNwb25zZS0+c2V0TWltZVR5cGUobWltZVR5cGUuY29u
dmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CiAgICAgICAgIHJlc3BvbnNlLT5zZXRUZXh0RW5jb2Rp
bmdOYW1lKGV4dHJhY3RDaGFyc2V0RnJvbU1lZGlhVHlwZShjb250ZW50VHlwZSkpOwogCiAgICAg
ICAgIGQtPmNsaWVudCgpLT5kaWRSZWNlaXZlUmVzcG9uc2UobV9yZXNvdXJjZUhhbmRsZSwgKnJl
c3BvbnNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAKaW5kZXggNDY2NzAyYWEzMTY1NWE2ZThiYzgz
MzcxNDUyMmViMmRiZTUyZGUzZi4uZjdhMDRlNjg1ZWE4OTA3OGRhYTEzOTc1ZTMyNWViZjUzODlh
MmJiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jl
c291cmNlSGFuZGxlQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAKQEAgLTEyMiw3ICsxMjIsNyBAQCB2b2lkIFJl
c291cmNlSGFuZGxlOjpjYW5jZWwoKQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpzZXRIb3N0QWxs
b3dzQW55SFRUUFNDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmIGhvc3QpCiB7Ci0gICAgYWxsb3dz
QW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3RzKGhvc3QubG93ZXIoKSk7CisgICAgYWxsb3dzQW55SFRU
UFNDZXJ0aWZpY2F0ZUhvc3RzKGhvc3QpOwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpzZXRD
bGllbnRDZXJ0aWZpY2F0ZUluZm8oY29uc3QgU3RyaW5nJiBob3N0LCBjb25zdCBTdHJpbmcmIGNl
cnRpZmljYXRlLCBjb25zdCBTdHJpbmcmIGtleSkKQEAgLTEzNCwxOCArMTM0LDExIEBAIHZvaWQg
UmVzb3VyY2VIYW5kbGU6OnNldENsaWVudENlcnRpZmljYXRlSW5mbyhjb25zdCBTdHJpbmcmIGhv
c3QsIGNvbnN0IFN0cmluZyYKIH0KIAogI2lmIFBMQVRGT1JNKFdJTikgJiYgVVNFKENGKQotLy8g
RklYTUU6ICBUaGUgQ0ZEYXRhUmVmIHdpbGwgbmVlZCB0byBiZSBzb21ldGhpbmcgZWxzZSB3aGVu
Ci0vLyBidWlsZGluZyB3aXRob3V0IAotc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBSZXRhaW5QdHI8
Q0ZEYXRhUmVmPiA+JiBjbGllbnRDZXJ0cygpCi17Ci0gICAgc3RhdGljIEhhc2hNYXA8U3RyaW5n
LCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiA+IGNlcnRzOwotICAgIHJldHVybiBjZXJ0czsKLX0KIAot
dm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0Q2xpZW50Q2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJiBo
b3N0LCBDRkRhdGFSZWYgY2VydCkKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldENsaWVudENlcnRp
ZmljYXRlKGNvbnN0IFN0cmluZyYsIENGRGF0YVJlZikKIHsKLSAgICBjbGllbnRDZXJ0cygpLnNl
dChob3N0Lmxvd2VyKCksIGNlcnQpOwogfQorCiAjZW5kaWYKIAogdm9pZCBSZXNvdXJjZUhhbmRs
ZTo6cGxhdGZvcm1TZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVN
YW5hZ2VyLmNwcAppbmRleCA0ZGYwZWE2OTZlYjJjNmU1NmIyMDI2NzYyMmM2NDQ4NmQ4NWYzNzk2
Li5hNjNhNTcyZjRjYTNmMTU5YzNkM2Y4NzYxMmI0ODM2Y2EyOGZiYWI4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VI
YW5kbGVNYW5hZ2VyLmNwcApAQCAtNDk3LDcgKzQ5Nyw3IEBAIHN0YXRpYyBzaXplX3QgaGVhZGVy
Q2FsbGJhY2soY2hhciogcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkKiBkYXRh
KQogICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldFVSTChVUkwoUGFyc2VkVVJMU3RyaW5nLCBoZHIp
KTsKIAogICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKGh0dHBDb2RlKTsK
LSAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRNaW1lVHlwZShleHRyYWN0TUlNRVR5cGVGcm9tTWVk
aWFUeXBlKGQtPm1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250
ZW50VHlwZSkpLmxvd2VyKCkpOworICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldE1pbWVUeXBlKGV4
dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUoZC0+bV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQo
SFRUUEhlYWRlck5hbWU6OkNvbnRlbnRUeXBlKSkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7
CiAgICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0VGV4dEVuY29kaW5nTmFtZShleHRyYWN0Q2hhcnNl
dEZyb21NZWRpYVR5cGUoZC0+bV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5h
bWU6OkNvbnRlbnRUeXBlKSkpOwogCiAgICAgICAgIGlmIChkLT5tX3Jlc3BvbnNlLmlzTXVsdGlw
YXJ0KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9TU0xIYW5kbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NT
TEhhbmRsZS5jcHAKaW5kZXggYjQ2MmY4OTc3ZmQzNzhmNmI1ODIxYjM5NWE3NmYwMTQ5MDZkYmNm
NC4uZDViZDQ1ZDY3ZjE5ZGJjYWQyNTViOWQzNGVhODRmZTA0MDRkNDZlMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NTTEhhbmRsZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NTTEhhbmRsZS5jcHAKQEAgLTM5
LDkgKzM5LDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVmIHN0ZDo6dHVwbGU8
V1RGOjpTdHJpbmcsIFdURjo6U3RyaW5nPiBjbGllbnRDZXJ0aWZpY2F0ZTsKLXN0YXRpYyBIYXNo
TWFwPFN0cmluZywgTGlzdEhhc2hTZXQ8U3RyaW5nPj4gYWxsb3dlZEhvc3RzOwotc3RhdGljIEhh
c2hNYXA8U3RyaW5nLCBjbGllbnRDZXJ0aWZpY2F0ZT4gYWxsb3dlZENsaWVudEhvc3RzOwordHlw
ZWRlZiBzdGQ6OnR1cGxlPFN0cmluZywgU3RyaW5nPiBjbGllbnRDZXJ0aWZpY2F0ZTsKK3N0YXRp
YyBIYXNoTWFwPFN0cmluZywgTGlzdEhhc2hTZXQ8U3RyaW5nPiwgQVNDSUlDYXNlSW5zZW5zaXRp
dmVIYXNoPiBhbGxvd2VkSG9zdHM7CitzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIGNsaWVudENlcnRp
ZmljYXRlLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+IGFsbG93ZWRDbGllbnRIb3N0czsKIAog
dm9pZCBhbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlSG9zdHMoY29uc3QgU3RyaW5nJiBob3N0KQog
ewpAQCAtNTIsMTMgKzUyLDEzIEBAIHZvaWQgYWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3Rz
KGNvbnN0IFN0cmluZyYgaG9zdCkKIHZvaWQgYWRkQWxsb3dlZENsaWVudENlcnRpZmljYXRlKGNv
bnN0IFN0cmluZyYgaG9zdCwgY29uc3QgU3RyaW5nJiBjZXJ0aWZpY2F0ZSwgY29uc3QgU3RyaW5n
JiBrZXkpCiB7CiAgICAgY2xpZW50Q2VydGlmaWNhdGUgY2xpZW50SW5mbyhjZXJ0aWZpY2F0ZSwg
a2V5KTsKLSAgICBhbGxvd2VkQ2xpZW50SG9zdHMuc2V0KGhvc3QubG93ZXIoKSwgY2xpZW50SW5m
byk7CisgICAgYWxsb3dlZENsaWVudEhvc3RzLnNldChob3N0LCBjbGllbnRJbmZvKTsKIH0KIAog
dm9pZCBzZXRTU0xDbGllbnRDZXJ0aWZpY2F0ZShSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogewog
ICAgIFN0cmluZyBob3N0ID0gaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5ob3N0KCk7Ci0g
ICAgSGFzaE1hcDxTdHJpbmcsIGNsaWVudENlcnRpZmljYXRlPjo6aXRlcmF0b3IgaXQgPSBhbGxv
d2VkQ2xpZW50SG9zdHMuZmluZChob3N0Lmxvd2VyKCkpOworICAgIGF1dG8gaXQgPSBhbGxvd2Vk
Q2xpZW50SG9zdHMuZmluZChob3N0KTsKICAgICBpZiAoaXQgPT0gYWxsb3dlZENsaWVudEhvc3Rz
LmVuZCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTcxLDcgKzcxLDcgQEAgdm9pZCBzZXRTU0xD
bGllbnRDZXJ0aWZpY2F0ZShSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogCiBib29sIHNzbElnbm9y
ZUhUVFBTQ2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJiBob3N0LCBjb25zdCBMaXN0SGFzaFNldDxT
dHJpbmc+JiBjZXJ0aWZpY2F0ZXMpCiB7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIExpc3RIYXNoU2V0
PFN0cmluZz4+OjppdGVyYXRvciBpdCA9IGFsbG93ZWRIb3N0cy5maW5kKGhvc3QpOworICAgIGF1
dG8gaXQgPSBhbGxvd2VkSG9zdHMuZmluZChob3N0KTsKICAgICBpZiAoaXQgIT0gYWxsb3dlZEhv
c3RzLmVuZCgpKSB7CiAgICAgICAgIGlmICgoaXQtPnZhbHVlKS5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgIGl0LT52YWx1ZSA9IGNlcnRpZmljYXRlczsKQEAgLTc5LDggKzc5LDggQEAgYm9vbCBz
c2xJZ25vcmVIVFRQU0NlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYgaG9zdCwgY29uc3QgTGlzdEhh
c2hTZXQ8U3RyaW5nPiYgY2UKICAgICAgICAgfQogICAgICAgICBpZiAoY2VydGlmaWNhdGVzLnNp
emUoKSAhPSBpdC0+dmFsdWUuc2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBMaXN0SGFzaFNldDxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBjZXJ0c0l0ZXIgPSBjZXJ0
aWZpY2F0ZXMuYmVnaW4oKTsKLSAgICAgICAgTGlzdEhhc2hTZXQ8U3RyaW5nPjo6aXRlcmF0b3Ig
dmFsdWVJdGVyID0gKGl0LT52YWx1ZSkuYmVnaW4oKTsKKyAgICAgICAgYXV0byBjZXJ0c0l0ZXIg
PSBjZXJ0aWZpY2F0ZXMuYmVnaW4oKTsKKyAgICAgICAgYXV0byB2YWx1ZUl0ZXIgPSAoaXQtPnZh
bHVlKS5iZWdpbigpOwogICAgICAgICBmb3IgKDsgdmFsdWVJdGVyICE9IChpdC0+dmFsdWUpLmVu
ZCgpOyArK3ZhbHVlSXRlciwgKytjZXJ0c0l0ZXIpIHsKICAgICAgICAgICAgIGlmICgqY2VydHNJ
dGVyICE9ICp2YWx1ZUl0ZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTk4
LDEzICsxOTgsMTMgQEAgc3RhdGljIGludCBjZXJ0VmVyaWZ5Q2FsbGJhY2soaW50IG9rLCBYNTA5
X1NUT1JFX0NUWCogY3R4KQogICAgIGQtPm1fc3NsRXJyb3JzID0gc3NsQ2VydGlmaWNhdGVGbGFn
KGVycik7CiAKICNpZiBQTEFURk9STShXSU4pCi0gICAgSGFzaE1hcDxTdHJpbmcsIExpc3RIYXNo
U2V0PFN0cmluZz4+OjppdGVyYXRvciBpdCA9IGFsbG93ZWRIb3N0cy5maW5kKGhvc3QpOworICAg
IGF1dG8gaXQgPSBhbGxvd2VkSG9zdHMuZmluZChob3N0KTsKICAgICBvayA9IChpdCAhPSBhbGxv
d2VkSG9zdHMuZW5kKCkpOwogI2Vsc2UKICAgICBMaXN0SGFzaFNldDxTdHJpbmc+IGNlcnRpZmlj
YXRlczsKICAgICBpZiAoIXBlbURhdGEoY3R4LCBjZXJ0aWZpY2F0ZXMpKQogICAgICAgICByZXR1
cm4gMDsKLSAgICBvayA9IHNzbElnbm9yZUhUVFBTQ2VydGlmaWNhdGUoaG9zdC5sb3dlcigpLCBj
ZXJ0aWZpY2F0ZXMpOworICAgIG9rID0gc3NsSWdub3JlSFRUUFNDZXJ0aWZpY2F0ZShob3N0LCBj
ZXJ0aWZpY2F0ZXMpOwogI2VuZGlmCiAKICAgICBpZiAob2spIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5j
cHAKaW5kZXggYzUyYzczNmNiMmU1NjI1ZGI3M2M5OTZiYjE4ZDYzZDdlZGIxZGU0OS4uOTdjN2Nl
NjdkN2U5YTI0NmNjNGI1NGQyOTIyMmRmMTQ5NjUxOGJhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5j
cHAKQEAgLTI0NCwxMyArMjQ0LDE0IEBAIHN0YXRpYyB2b2lkIGNvbnRpbnVlQWZ0ZXJEaWRSZWNl
aXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqKTsKIAogc3RhdGljIGJvb2wgZ0lnbm9yZVNTTEVy
cm9ycyA9IGZhbHNlOwogCi1zdGF0aWMgSGFzaFNldDxTdHJpbmc+JiBhbGxvd3NBbnlIVFRQU0Nl
cnRpZmljYXRlSG9zdHMoKQordHlwZWRlZiBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5z
aXRpdmVIYXNoPiBIb3N0c1NldDsKK3N0YXRpYyBIb3N0c1NldD4mIGFsbG93c0FueUhUVFBTQ2Vy
dGlmaWNhdGVIb3N0cygpCiB7Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEhh
c2hTZXQ8U3RyaW5nPiwgaG9zdHMsICgpKTsKKyAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNf
TE9DQUwoSG9zdHNTZXQsIGhvc3RzLCAoKSk7CiAgICAgcmV0dXJuIGhvc3RzOwogfQogCi10eXBl
ZGVmIEhhc2hNYXA8U3RyaW5nLCBIb3N0VExTQ2VydGlmaWNhdGVTZXQ+IENlcnRpZmljYXRlc01h
cDsKK3R5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIEhvc3RUTFNDZXJ0aWZpY2F0ZVNldCwgQVNDSUlD
YXNlSW5zZW5zaXRpdmVIYXNoPiBDZXJ0aWZpY2F0ZXNNYXA7CiBzdGF0aWMgQ2VydGlmaWNhdGVz
TWFwJiBjbGllbnRDZXJ0aWZpY2F0ZXMoKQogewogICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJ
Q19MT0NBTChDZXJ0aWZpY2F0ZXNNYXAsIGNlcnRpZmljYXRlcywgKCkpOwpAQCAtMzIyLDEyICsz
MjMsMTIgQEAgc3RhdGljIGJvb2wgaGFuZGxlVW5pZ25vcmVkVExTRXJyb3JzKFJlc291cmNlSGFu
ZGxlKiBoYW5kbGUsIFNvdXBNZXNzYWdlKiBtZXNzYWcKICAgICBpZiAoIXRsc0Vycm9ycykKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU3RyaW5nIGxvd2VyY2FzZUhvc3RVUkwgPSBoYW5k
bGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLmhvc3QoKS5sb3dlcigpOwotICAgIGlmIChhbGxvd3NB
bnlIVFRQU0NlcnRpZmljYXRlSG9zdHMoKS5jb250YWlucyhsb3dlcmNhc2VIb3N0VVJMKSkKKyAg
ICBTdHJpbmcgaG9zdCA9IGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuaG9zdCgpOworICAg
IGlmIChhbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlSG9zdHMoKS5jb250YWlucyhob3N0KSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gV2UgYXJlbid0IGlnbm9yaW5nIGVycm9ycyBn
bG9iYWxseSwgYnV0IHRoZSB1c2VyIG1heSBoYXZlIGFscmVhZHkgZGVjaWRlZCB0byBhY2NlcHQg
dGhpcyBjZXJ0aWZpY2F0ZS4KLSAgICBhdXRvIGl0ID0gY2xpZW50Q2VydGlmaWNhdGVzKCkuZmlu
ZChsb3dlcmNhc2VIb3N0VVJMKTsKKyAgICBhdXRvIGl0ID0gY2xpZW50Q2VydGlmaWNhdGVzKCku
ZmluZChob3N0KTsKICAgICBpZiAoaXQgIT0gY2xpZW50Q2VydGlmaWNhdGVzKCkuZW5kKCkgJiYg
aXQtPnZhbHVlLmNvbnRhaW5zKGNlcnRpZmljYXRlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CkBAIC0xMDg3LDEyICsxMDg4LDEyIEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnNob3VsZFVzZUNy
ZWRlbnRpYWxTdG9yYWdlKCkKIAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0SG9zdEFsbG93c0Fu
eUhUVFBTQ2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJiBob3N0KQogewotICAgIGFsbG93c0FueUhU
VFBTQ2VydGlmaWNhdGVIb3N0cygpLmFkZChob3N0Lmxvd2VyKCkpOworICAgIGFsbG93c0FueUhU
VFBTQ2VydGlmaWNhdGVIb3N0cygpLmFkZChob3N0KTsKIH0KIAogdm9pZCBSZXNvdXJjZUhhbmRs
ZTo6c2V0Q2xpZW50Q2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJiBob3N0LCBHVGxzQ2VydGlmaWNh
dGUqIGNlcnRpZmljYXRlKQogewotICAgIGNsaWVudENlcnRpZmljYXRlcygpLmFkZChob3N0Lmxv
d2VyKCksIEhvc3RUTFNDZXJ0aWZpY2F0ZVNldCgpKS5pdGVyYXRvci0+dmFsdWUuYWRkKGNlcnRp
ZmljYXRlKTsKKyAgICBjbGllbnRDZXJ0aWZpY2F0ZXMoKS5hZGQoaG9zdCwgSG9zdFRMU0NlcnRp
ZmljYXRlU2V0KCkpLml0ZXJhdG9yLT52YWx1ZS5hZGQoY2VydGlmaWNhdGUpOwogfQogCiB2b2lk
IFJlc291cmNlSGFuZGxlOjpzZXRJZ25vcmVTU0xFcnJvcnMoYm9vbCBpZ25vcmVTU0xFcnJvcnMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0
TWFwcGluZ0RlZmF1bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVU
b1NjcmlwdE1hcHBpbmdEZWZhdWx0LmNwcAppbmRleCA1YmMzNjBmYzU4NjlhNjRiZWE5M2UxMjRm
NjM4NDY3ZGI5Y2YwNGVjLi41NTNkYmNlMjU0NzE3Y2IyMDIxYzI5ZGMxNjcyNDFlMTczYWEzYTg2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0
TWFwcGluZ0RlZmF1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9j
YWxlVG9TY3JpcHRNYXBwaW5nRGVmYXVsdC5jcHAKQEAgLTE1NywyMCArMTU3LDIxIEBAIHN0YXRp
YyBjb25zdCBTY3JpcHROYW1lQ29kZSBzY3JpcHROYW1lQ29kZUxpc3RbXSA9IHsKIH07CiAKIHN0
cnVjdCBTY3JpcHROYW1lQ29kZU1hcEhhc2hUcmFpdHMgOiBwdWJsaWMgSGFzaFRyYWl0czxTdHJp
bmc+IHsKLSAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltdW1UYWJsZVNpemUgPSBXVEY6Okhhc2hU
YWJsZUNhcGFjaXR5Rm9yU2l6ZTxzaXplb2Yoc2NyaXB0TmFtZUNvZGVMaXN0KSAvIHNpemVvZihT
Y3JpcHROYW1lQ29kZSk+Ojp2YWx1ZTsKKyAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltdW1UYWJs
ZVNpemUgPSBXVEY6Okhhc2hUYWJsZUNhcGFjaXR5Rm9yU2l6ZTxXVEZfQVJSQVlfTEVOR1RIKHNj
cmlwdE5hbWVDb2RlTGlzdCk+Ojp2YWx1ZTsKIH07CiAKLXR5cGVkZWYgSGFzaE1hcDxTdHJpbmcs
IFVTY3JpcHRDb2RlLCBEZWZhdWx0SGFzaDxTdHJpbmc+OjpIYXNoLCBTY3JpcHROYW1lQ29kZU1h
cEhhc2hUcmFpdHM+IFNjcmlwdE5hbWVDb2RlTWFwOwordHlwZWRlZiBIYXNoTWFwPFN0cmluZywg
VVNjcmlwdENvZGUsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaCwgU2NyaXB0TmFtZUNvZGVNYXBI
YXNoVHJhaXRzPiBTY3JpcHROYW1lQ29kZU1hcDsKIAogVVNjcmlwdENvZGUgc2NyaXB0TmFtZVRv
Q29kZShjb25zdCBTdHJpbmcmIHNjcmlwdE5hbWUpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFNjcmlwdE5hbWVDb2RlTWFwPiBzY3JpcHROYW1lQ29kZU1hcDsKLSAgICBpZiAoc2NyaXB0
TmFtZUNvZGVNYXAuZ2V0KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc2l6ZW9mKHNjcmlwdE5hbWVDb2RlTGlzdCkgLyBzaXplb2YoU2NyaXB0TmFtZUNvZGUp
OyArK2kpCi0gICAgICAgICAgICBzY3JpcHROYW1lQ29kZU1hcC5nZXQoKS5zZXQoQVNDSUlMaXRl
cmFsKHNjcmlwdE5hbWVDb2RlTGlzdFtpXS5uYW1lKSwgc2NyaXB0TmFtZUNvZGVMaXN0W2ldLmNv
ZGUpOwotICAgIH0KKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U2NyaXB0TmFtZUNvZGVNYXA+
IHNjcmlwdE5hbWVDb2RlTWFwID0gW10oKSB7CisgICAgICAgIFNjcmlwdE5hbWVDb2RlTWFwIG1h
cDsKKyAgICAgICAgZm9yIChhdXRvJiBuYW1lQW5kQ29kZSA6IHNjcmlwdE5hbWVDb2RlTGlzdCkK
KyAgICAgICAgICAgIG1hcC5hZGQoQVNDSUlMaXRlcmFsKG5hbWVBbmRDb2RlLm5hbWUpLCBuYW1l
QW5kQ29kZS5jb2RlKTsKKyAgICAgICAgcmV0dXJuIG1hcDsKKyAgICB9KCk7CiAKLSAgICBTY3Jp
cHROYW1lQ29kZU1hcDo6aXRlcmF0b3IgaXQgPSBzY3JpcHROYW1lQ29kZU1hcC5nZXQoKS5maW5k
KHNjcmlwdE5hbWUubG93ZXIoKSk7CisgICAgYXV0byBpdCA9IHNjcmlwdE5hbWVDb2RlTWFwLmdl
dCgpLmZpbmQoc2NyaXB0TmFtZSk7CiAgICAgaWYgKGl0ICE9IHNjcmlwdE5hbWVDb2RlTWFwLmdl
dCgpLmVuZCgpKQogICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogICAgIHJldHVybiBVU0NSSVBU
X0lOVkFMSURfQ09ERTsKQEAgLTM4MywzMSArMzg0LDMzIEBAIHN0YXRpYyBjb25zdCBMb2NhbGVT
Y3JpcHQgbG9jYWxlU2NyaXB0TGlzdFtdID0gewogfTsKIAogc3RydWN0IExvY2FsZVNjcmlwdE1h
cEhhc2hUcmFpdHMgOiBwdWJsaWMgSGFzaFRyYWl0czxTdHJpbmc+IHsKLSAgICBzdGF0aWMgY29u
c3QgaW50IG1pbmltdW1UYWJsZVNpemUgPSBXVEY6Okhhc2hUYWJsZUNhcGFjaXR5Rm9yU2l6ZTxz
aXplb2YobG9jYWxlU2NyaXB0TGlzdCkgLyBzaXplb2YoTG9jYWxlU2NyaXB0KT46OnZhbHVlOwor
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11bVRhYmxlU2l6ZSA9IFdURjo6SGFzaFRhYmxlQ2Fw
YWNpdHlGb3JTaXplPFdURl9BUlJBWV9MRU5HVEgobG9jYWxlU2NyaXB0TGlzdCk+Ojp2YWx1ZTsK
IH07CiAKLXR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFVTY3JpcHRDb2RlLCBEZWZhdWx0SGFzaDxT
dHJpbmc+OjpIYXNoLCBMb2NhbGVTY3JpcHRNYXBIYXNoVHJhaXRzPiBMb2NhbGVTY3JpcHRNYXA7
Cit0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBVU2NyaXB0Q29kZSwgQVNDSUlDYXNlSW5zZW5zaXRp
dmVIYXNoLCBMb2NhbGVTY3JpcHRNYXBIYXNoVHJhaXRzPiBMb2NhbGVTY3JpcHRNYXA7CiAKIFVT
Y3JpcHRDb2RlIGxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24oY29uc3QgU3RyaW5n
JiBsb2NhbGUpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPExvY2FsZVNjcmlwdE1hcD4g
bG9jYWxlU2NyaXB0TWFwOwotICAgIGlmIChsb2NhbGVTY3JpcHRNYXAuZ2V0KCkuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKGxvY2FsZVNjcmlwdExp
c3QpIC8gc2l6ZW9mKExvY2FsZVNjcmlwdCk7ICsraSkKLSAgICAgICAgICAgIGxvY2FsZVNjcmlw
dE1hcC5nZXQoKS5zZXQoQVNDSUlMaXRlcmFsKGxvY2FsZVNjcmlwdExpc3RbaV0ubG9jYWxlKSwg
bG9jYWxlU2NyaXB0TGlzdFtpXS5zY3JpcHQpOwotICAgIH0KKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8TG9jYWxlU2NyaXB0TWFwPiBsb2NhbGVTY3JpcHRNYXAgPSBbXSgpIHsKKyAgICAgICAg
TG9jYWxlU2NyaXB0TWFwIG1hcDsKKyAgICAgICAgZm9yIChhdXRvJiBsb2NhbGVBbmRTY3JpcHQg
OiBsb2NhbGVTY3JpcHRMaXN0KQorICAgICAgICAgICAgbWFwLmFkZChBU0NJSUxpdGVyYWwobG9j
YWxlQW5kU2NyaXB0LmxvY2FsZSksIGxvY2FsZUFuZFNjcmlwdC5zY3JpcHQpOworICAgICAgICBy
ZXR1cm4gbWFwOworICAgIH0oKTsKIAotICAgIFN0cmluZyBjYW5vbmljYWxMb2NhbGUgPSBsb2Nh
bGUubG93ZXIoKS5yZXBsYWNlKCctJywgJ18nKTsKKyAgICBTdHJpbmcgY2Fub25pY2FsTG9jYWxl
ID0gbG9jYWxlOworICAgIGNhbm9uaWNhbExvY2FsZS5yZXBsYWNlKCctJywgJ18nKTsKICAgICB3
aGlsZSAoIWNhbm9uaWNhbExvY2FsZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgTG9jYWxlU2NyaXB0
TWFwOjppdGVyYXRvciBpdCA9IGxvY2FsZVNjcmlwdE1hcC5nZXQoKS5maW5kKGNhbm9uaWNhbExv
Y2FsZSk7CisgICAgICAgIGF1dG8gaXQgPSBsb2NhbGVTY3JpcHRNYXAuZ2V0KCkuZmluZChjYW5v
bmljYWxMb2NhbGUpOwogICAgICAgICBpZiAoaXQgIT0gbG9jYWxlU2NyaXB0TWFwLmdldCgpLmVu
ZCgpKQogICAgICAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKLSAgICAgICAgc2l6ZV90IHBvcyA9
IGNhbm9uaWNhbExvY2FsZS5yZXZlcnNlRmluZCgnXycpOwotICAgICAgICBpZiAocG9zID09IG5v
dEZvdW5kKQorICAgICAgICBhdXRvIHVuZGVyc2NvcmVQb3NpdGlvbiA9IGNhbm9uaWNhbExvY2Fs
ZS5yZXZlcnNlRmluZCgnXycpOworICAgICAgICBpZiAodW5kZXJzY29yZVBvc2l0aW9uID09IG5v
dEZvdW5kKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIFVTY3JpcHRDb2RlIGNvZGUgPSBz
Y3JpcHROYW1lVG9Db2RlKGNhbm9uaWNhbExvY2FsZS5zdWJzdHJpbmcocG9zICsgMSkpOworICAg
ICAgICBVU2NyaXB0Q29kZSBjb2RlID0gc2NyaXB0TmFtZVRvQ29kZShjYW5vbmljYWxMb2NhbGUu
c3Vic3RyaW5nKHVuZGVyc2NvcmVQb3NpdGlvbiArIDEpKTsKICAgICAgICAgaWYgKGNvZGUgIT0g
VVNDUklQVF9JTlZBTElEX0NPREUgJiYgY29kZSAhPSBVU0NSSVBUX1VOS05PV04pCiAgICAgICAg
ICAgICByZXR1cm4gY29kZTsKLSAgICAgICAgY2Fub25pY2FsTG9jYWxlID0gY2Fub25pY2FsTG9j
YWxlLnN1YnN0cmluZygwLCBwb3MpOworICAgICAgICBjYW5vbmljYWxMb2NhbGUgPSBjYW5vbmlj
YWxMb2NhbGUuc3Vic3RyaW5nKDAsIHVuZGVyc2NvcmVQb3NpdGlvbik7CiAgICAgfQogICAgIHJl
dHVybiBVU0NSSVBUX0NPTU1PTjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvd2luL0xvY2FsZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L3dpbi9Mb2NhbGVXaW4uY3BwCmluZGV4IGNjZDc0YmM0N2E1MDk3ZmEwMTNkMDlhNGI1ZWI3MjRj
NTM5Zjc2OTEuLmU2N2UyNjk3ZTlkYmRlZTY3OTAxOTYwNTFiMDY4NWU0MTU5ZjcwMzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvd2luL0xvY2FsZVdpbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC93aW4vTG9jYWxlV2luLmNwcApAQCAtNDgs
NyArNDgsNyBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0
eXBlZGVmIExDSUQgKFdJTkFQSSogTG9jYWxlTmFtZVRvTENJRFB0cikoTFBDV1NUUiwgRFdPUkQp
OwotdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgTENJRD4gTmFtZVRvTENJRE1hcDsKK3R5cGVkZWYg
SGFzaE1hcDxTdHJpbmcsIExDSUQsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4gTmFtZVRvTENJ
RE1hcDsKIAogc3RhdGljIFN0cmluZyBleHRyYWN0TGFuZ3VhZ2VDb2RlKGNvbnN0IFN0cmluZyYg
bG9jYWxlKQogewpAQCAtMTA3LDcgKzEwNyw3IEBAIHN0YXRpYyBMQ0lEIFdJTkFQSSBjb252ZXJ0
TG9jYWxlTmFtZVRvTENJRChMUENXU1RSIG5hbWUsIERXT1JEKQogICAgICAgICByZXR1cm4gTE9D
QUxFX1VTRVJfREVGQVVMVDsKICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoTmFt
ZVRvTENJRE1hcCwgbWFwLCAoKSk7CiAgICAgZW5zdXJlTmFtZVRvTENJRE1hcChtYXApOwotICAg
IFN0cmluZyBsb2NhbGVOYW1lID0gU3RyaW5nKG5hbWUpLnJlcGxhY2UoJ18nLCAnLScpLmxvd2Vy
KCk7CisgICAgU3RyaW5nIGxvY2FsZU5hbWUgPSBTdHJpbmcobmFtZSkucmVwbGFjZSgnXycsICct
Jyk7CiAgICAgZG8gewogICAgICAgICBOYW1lVG9MQ0lETWFwOjpjb25zdF9pdGVyYXRvciBpdGVy
YXRvciA9IG1hcC5maW5kKGxvY2FsZU5hbWUpOwogICAgICAgICBpZiAoaXRlcmF0b3IgIT0gbWFw
LmVuZCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9h
cmRXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3Bw
CmluZGV4IDNjNjk5Y2RmZGRjOTNlZjZiMzYxMDBmZmMzODliYjg2Y2UxOTczZTguLjAzMWJmZDI0
OTQyYjY0NzIwNjg3ZDI4MzViZTYzZjhhMGU4ZGQ4NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAKQEAgLTE4MiwxNCArMTgyLDE0IEBAIGVudW0g
Q2xpcGJvYXJkRGF0YVR5cGUgeyBDbGlwYm9hcmREYXRhVHlwZU5vbmUsIENsaXBib2FyZERhdGFU
eXBlVVJMLCBDbGlwYm9hcmRECiAKIHN0YXRpYyBDbGlwYm9hcmREYXRhVHlwZSBjbGlwYm9hcmRU
eXBlRnJvbU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKLSAgICBTdHJpbmcgcVR5cGUg
PSB0eXBlLnN0cmlwV2hpdGVTcGFjZSgpLmxvd2VyKCk7CisgICAgU3RyaW5nIHN0cmlwcGVkVHlw
ZSA9IHR5cGUuc3RyaXBXaGl0ZVNwYWNlKCk7CiAKICAgICAvLyB0d28gc3BlY2lhbCBjYXNlcyBm
b3IgSUUgY29tcGF0aWJpbGl0eQotICAgIGlmIChxVHlwZSA9PSAidGV4dCIgfHwgcVR5cGUgPT0g
InRleHQvcGxhaW4iIHx8IHFUeXBlLnN0YXJ0c1dpdGgoInRleHQvcGxhaW47IikpCisgICAgaWYg
KGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmlwcGVkVHlwZSwgInRleHQiKSB8fCBl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpcHBlZFR5cGUsICJ0ZXh0L3BsYWluIikg
fHwgc3RyaXBwZWRUeXBlLnN0YXJ0c1dpdGgoInRleHQvcGxhaW47IiwgZmFsc2UpKQogICAgICAg
ICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVUZXh0OwotICAgIGlmIChxVHlwZSA9PSAidXJsIiB8
fCBxVHlwZSA9PSAidGV4dC91cmktbGlzdCIpCisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKHN0cmlwcGVkVHlwZSwgInVybCIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKHN0cmlwcGVkVHlwZSwgInRleHQvdXJpLWxpc3QiKSkKICAgICAgICAgcmV0dXJuIENs
aXBib2FyZERhdGFUeXBlVVJMOwotICAgIGlmIChxVHlwZSA9PSAidGV4dC9odG1sIikKKyAgICBp
ZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3RyaXBwZWRUeXBlLCAidGV4dC9odG1s
IikpCiAgICAgICAgIHJldHVybiBDbGlwYm9hcmREYXRhVHlwZVRleHRIVE1MOwogCiAgICAgcmV0
dXJuIENsaXBib2FyZERhdGFUeXBlTm9uZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0LmNwcAppbmRleCA1NzMxYzBiNzQ3MDY0NTQxYzk4Yjg5NzUwYTk1YmJjNjhlOWZjOTE4Li44
YzRlODI5YWQ4ZDhiZDljZjhlMmI1N2YyZmFiMDBiMWYwOTc1MWI3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCkBAIC0xMDM1LDEwICsxMDM1LDEwIEBAIHZvaWQgYXBw
bHlUZXh0VHJhbnNmb3JtKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU3RyaW5nJiB0ZXh0LCBV
Q2hhciBwcmV2aW91c0NoCiAgICAgICAgIG1ha2VDYXBpdGFsaXplZCgmdGV4dCwgcHJldmlvdXND
aGFyYWN0ZXIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFVQUEVSQ0FTRToKLSAgICAgICAg
dGV4dCA9IHRleHQudXBwZXIoc3R5bGUubG9jYWxlKCkpOworICAgICAgICB0ZXh0ID0gdGV4dC5j
b252ZXJ0VG9VcHBlcmNhc2VXaXRoTG9jYWxlKHN0eWxlLmxvY2FsZSgpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBMT1dFUkNBU0U6Ci0gICAgICAgIHRleHQgPSB0ZXh0Lmxvd2VyKHN0eWxl
LmxvY2FsZSgpKTsKKyAgICAgICAgdGV4dCA9IHRleHQuY29udmVydFRvTG93ZXJjYXNlV2l0aExv
Y2FsZShzdHlsZS5sb2NhbGUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4IGYwMzQwMDcxMWU0YjI5ZGNiZDI5NTk1YTI1
NWY5NmVhZDE2MGRlNmEuLjlkODE3ZTFiYjg5M2Q5ZTlhMDRiYzQzZjliOWI3ZTkzMzYxZDlhZTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAtMTAzMCw5ICsxMDMwLDcg
QEAgU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZU1JTUVUeXBlKCkgY29uc3QKIAogYm9v
bCBYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VJc1hNTCgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6
IFJlbW92ZSB0aGUgbG93ZXIoKSBjYWxsIHdoZW4gRE9NSW1wbGVtZW50YXRpb24uaXNYTUxNSU1F
VHlwZSgpIGlzIG1vZGlmaWVkCi0gICAgLy8gICAgICAgIHRvIGRvIGNhc2UgaW5zZW5zaXRpdmUg
TUlNRSB0eXBlIG1hdGNoaW5nLgotICAgIHJldHVybiBET01JbXBsZW1lbnRhdGlvbjo6aXNYTUxN
SU1FVHlwZShyZXNwb25zZU1JTUVUeXBlKCkubG93ZXIoKSk7CisgICAgcmV0dXJuIERPTUltcGxl
bWVudGF0aW9uOjppc1hNTE1JTUVUeXBlKHJlc3BvbnNlTUlNRVR5cGUoKSk7CiB9CiAKIGludCBY
TUxIdHRwUmVxdWVzdDo6c3RhdHVzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
bWFjL1BsdWdpbnMvV2ViQmFzZVBsdWdpblBhY2thZ2UubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9Q
bHVnaW5zL1dlYkJhc2VQbHVnaW5QYWNrYWdlLm1tCmluZGV4IDViY2VlMjcyM2Q2NTRhMzhkMDcz
MDUwZWJhNjdlODZmNzIyYzgzNTIuLmRlNzk2ZDllY2NiNzQ0YjMyN2QzNTlkZWE2MzUyMjQ4ZDIz
ODgyMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViQmFzZVBsdWdp
blBhY2thZ2UubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJCYXNlUGx1Z2lu
UGFja2FnZS5tbQpAQCAtMjE2LDE4ICsyMTYsMTUgQEAgLSAoQk9PTClnZXRQbHVnaW5JbmZvRnJv
bVBMaXN0cwogICAgICAgICBNaW1lQ2xhc3NJbmZvIG1pbWVDbGFzc0luZm87CiAgICAgICAgIAog
ICAgICAgICBOU0FycmF5ICpleHRlbnNpb25zID0gW1tNSU1FRGljdGlvbmFyeSBvYmplY3RGb3JL
ZXk6V2ViUGx1Z2luRXh0ZW5zaW9uc0tleV0gX3dlYl9sb3dlcmNhc2VTdHJpbmdzXTsKLSAgICAg
ICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgW2V4dGVuc2lvbnMgY291bnRdOyArK2kpIHsK
KyAgICAgICAgZm9yIChOU1N0cmluZyAqZXh0ZW5zaW9uIGluIGV4dGVuc2lvbnMpIHsKICAgICAg
ICAgICAgIC8vIFRoZSBEaXZYIHBsdWctaW4gbGlzdHMgbXVsdGlwbGUgZXh0ZW5zaW9ucyBpbiBh
IGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgaW5zdGVhZCBvZiB1c2luZwogICAgICAgICAgICAgLy8g
bXVsdGlwbGUgYXJyYXkgZWxlbWVudHMgaW4gdGhlIHByb3BlcnR5IGxpc3QuIFdvcmsgYXJvdW5k
IHRoaXMgaGVyZSBieSBzcGxpdHRpbmcgdGhlCiAgICAgICAgICAgICAvLyBleHRlbnNpb24gc3Ry
aW5nIGludG8gY29tcG9uZW50cy4KLSAgICAgICAgICAgIE5TQXJyYXkgKmV4dGVuc2lvbkNvbXBv
bmVudHMgPSBbW2V4dGVuc2lvbnMgb2JqZWN0QXRJbmRleDppXSBjb21wb25lbnRzU2VwYXJhdGVk
QnlTdHJpbmc6QCIsIl07Ci0KLSAgICAgICAgICAgIGZvciAoTlNTdHJpbmcgKmV4dGVuc2lvbiBp
biBleHRlbnNpb25Db21wb25lbnRzKQotICAgICAgICAgICAgICAgIG1pbWVDbGFzc0luZm8uZXh0
ZW5zaW9ucy5hcHBlbmQoZXh0ZW5zaW9uKTsKKyAgICAgICAgICAgIGZvciAoTlNTdHJpbmcgKmNv
bXBvbmVudCBpbiBbZXh0ZW5zaW9uIGNvbXBvbmVudHNTZXBhcmF0ZWRCeVN0cmluZzpAIiwiXSkK
KyAgICAgICAgICAgICAgICBtaW1lQ2xhc3NJbmZvLmV4dGVuc2lvbnMuYXBwZW5kKGNvbXBvbmVu
dCk7CiAgICAgICAgIH0KIAotICAgICAgICBtaW1lQ2xhc3NJbmZvLnR5cGUgPSBTdHJpbmcoTUlN
RSkubG93ZXIoKTsKLQorICAgICAgICBtaW1lQ2xhc3NJbmZvLnR5cGUgPSBTdHJpbmcoTUlNRSku
Y29udmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKICAgICAgICAgbWltZUNsYXNzSW5mby5kZXNjID0g
W01JTUVEaWN0aW9uYXJ5IG9iamVjdEZvcktleTpXZWJQbHVnaW5UeXBlRGVzY3JpcHRpb25LZXld
OwogCiAgICAgICAgIHBsdWdpbkluZm8ubWltZXMuYXBwZW5kKG1pbWVDbGFzc0luZm8pOwpAQCAt
Mjg0LDEyICsyODEsMTAgQEAgLSAoY29uc3QgUGx1Z2luSW5mbyYpcGx1Z2luSW5mbwogCiAtIChC
T09MKXN1cHBvcnRzRXh0ZW5zaW9uOihjb25zdCBTdHJpbmcmKWV4dGVuc2lvbgogewotICAgIEFT
U0VSVChleHRlbnNpb24ubG93ZXIoKSA9PSBleHRlbnNpb24pOworICAgIEFTU0VSVChleHRlbnNp
b24uY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSA9PSBleHRlbnNpb24pOwogICAgIAotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcGx1Z2luSW5mby5taW1lcy5zaXplKCk7ICsraSkgewotICAg
ICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXh0ZW5zaW9ucyA9IHBsdWdpbkluZm8ubWltZXNb
aV0uZXh0ZW5zaW9uczsKLQotICAgICAgICBpZiAoc3RkOjpmaW5kKGV4dGVuc2lvbnMuYmVnaW4o
KSwgZXh0ZW5zaW9ucy5lbmQoKSwgZXh0ZW5zaW9uKSAhPSBleHRlbnNpb25zLmVuZCgpKQorICAg
IGZvciAoYXV0byYgZW50cnkgOiBwbHVnaW5JbmZvLm1pbWVzKSB7CisgICAgICAgIGlmIChlbnRy
eS5leHRlbnNpb25zLmNvbnRhaW5zKGV4dGVuc2lvbikpCiAgICAgICAgICAgICByZXR1cm4gWUVT
OwogICAgIH0KIApAQCAtMjk4LDI2ICsyOTMsMjMgQEAgLSAoQk9PTClzdXBwb3J0c0V4dGVuc2lv
bjooY29uc3QgU3RyaW5nJilleHRlbnNpb24KIAogLSAoQk9PTClzdXBwb3J0c01JTUVUeXBlOihj
b25zdCBXVEY6OlN0cmluZyYpbWltZVR5cGUKIHsKLSAgICBBU1NFUlQobWltZVR5cGUubG93ZXIo
KSA9PSBtaW1lVHlwZSk7CisgICAgQVNTRVJUKG1pbWVUeXBlLmNvbnZlcnRUb0FTQ0lJTG93ZXJj
YXNlKCkgPT0gbWltZVR5cGUpOwogICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGx1
Z2luSW5mby5taW1lcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAocGx1Z2luSW5mby5taW1l
c1tpXS50eXBlID09IG1pbWVUeXBlKQorICAgIGZvciAoYXV0byYgZW50cnkgOiBwbHVnaW5JbmZv
Lm1pbWVzKSB7CisgICAgICAgIGlmIChlbnRyeS50eXBlID09IG1pbWVUeXBlKQogICAgICAgICAg
ICAgcmV0dXJuIFlFUzsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gTk87CiB9CiAKIC0gKE5T
U3RyaW5nICopTUlNRVR5cGVGb3JFeHRlbnNpb246KGNvbnN0IFN0cmluZyYpZXh0ZW5zaW9uCiB7
Ci0gICAgQVNTRVJUKGV4dGVuc2lvbi5sb3dlcigpID09IGV4dGVuc2lvbik7CisgICAgQVNTRVJU
KGV4dGVuc2lvbi5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpID09IGV4dGVuc2lvbik7CiAgICAg
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwbHVnaW5JbmZvLm1pbWVzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIGNvbnN0IE1pbWVDbGFzc0luZm8mIG1pbWVDbGFzc0luZm8gPSBwbHVnaW5J
bmZvLm1pbWVzW2ldOwotICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXh0ZW5zaW9ucyA9
IG1pbWVDbGFzc0luZm8uZXh0ZW5zaW9uczsKLQotICAgICAgICBpZiAoc3RkOjpmaW5kKGV4dGVu
c2lvbnMuYmVnaW4oKSwgZXh0ZW5zaW9ucy5lbmQoKSwgZXh0ZW5zaW9uKSAhPSBleHRlbnNpb25z
LmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIG1pbWVDbGFzc0luZm8udHlwZTsKKyAgICBmb3Ig
KGF1dG8mIGVudHJ5IDogcGx1Z2luSW5mby5taW1lcykgeworICAgICAgICBpZiAoZW50cnkuZXh0
ZW5zaW9ucy5jb250YWlucyhleHRlbnNpb24pKQorICAgICAgICAgICAgcmV0dXJuIGVudHJ5LnR5
cGU7CiAgICAgfQogCiAgICAgcmV0dXJuIG5pbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
d2luL1BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lu
cy9QbHVnaW5EYXRhYmFzZS5jcHAKaW5kZXggMWEwYzdlODNiODIxMWNiY2RmNTRmOWQwNmUzNjEz
NDI4YzI4ZGY3MS4uNGY5ZWYyZDBjYzliNGY1MThjMWM2ZTJiMTFhMjBjZjUzMGUzNDJmNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKQEAgLTE5MCwx
NCArMTkwLDEyIEBAIGludCBQbHVnaW5EYXRhYmFzZTo6cHJlZmVycmVkUGx1Z2luQ29tcGFyZShj
b25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKQogUGx1Z2luUGFja2FnZSogUGx1Z2luRGF0YWJh
c2U6OnBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiB7CiAgICAgaWYg
KG1pbWVUeXBlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgU3RyaW5nIGtleSA9IG1pbWVUeXBlLmxvd2VyKCk7Ci0gICAgUGx1Z2lu
U2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Ci0gICAgUGx1Z2luUGFj
a2FnZSogcHJlZmVycmVkUGx1Z2luID0gbV9wcmVmZXJyZWRQbHVnaW5zLmdldChrZXkpOworICAg
IFBsdWdpblBhY2thZ2UqIHByZWZlcnJlZFBsdWdpbiA9IG1fcHJlZmVycmVkUGx1Z2lucy5nZXQo
bWltZVR5cGUpOwogICAgIGlmIChwcmVmZXJyZWRQbHVnaW4KICAgICAgICAgJiYgcHJlZmVycmVk
UGx1Z2luLT5pc0VuYWJsZWQoKQotICAgICAgICAmJiBwcmVmZXJyZWRQbHVnaW4tPm1pbWVUb0Rl
c2NyaXB0aW9ucygpLmNvbnRhaW5zKGtleSkpIHsKKyAgICAgICAgJiYgcHJlZmVycmVkUGx1Z2lu
LT5taW1lVG9EZXNjcmlwdGlvbnMoKS5jb250YWlucyhtaW1lVHlwZSkpIHsKICAgICAgICAgcmV0
dXJuIHByZWZlcnJlZFBsdWdpbjsKICAgICB9CiAKQEAgLTIwOSw3ICsyMDcsNyBAQCBQbHVnaW5Q
YWNrYWdlKiBQbHVnaW5EYXRhYmFzZTo6cGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSkKICAgICAgICAgaWYgKCFwbHVnaW4tPmlzRW5hYmxlZCgpKQogICAgICAgICAgICAg
Y29udGludWU7CiAKLSAgICAgICAgaWYgKHBsdWdpbi0+bWltZVRvRGVzY3JpcHRpb25zKCkuY29u
dGFpbnMoa2V5KSkgeworICAgICAgICBpZiAocGx1Z2luLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5j
b250YWlucyhtaW1lVHlwZSkpIHsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRB
X0NBQ0hFKQogICAgICAgICAgICAgaWYgKCFwbHVnaW4tPmVuc3VyZVBsdWdpbkxvYWRlZCgpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMzA1LDcgKzMwMyw3IEBAIFBsdWdpblBhY2th
Z2UqIFBsdWdpbkRhdGFiYXNlOjpmaW5kUGx1Z2luKGNvbnN0IFVSTCYgdXJsLCBTdHJpbmcmIG1p
bWVUeXBlKQogdm9pZCBQbHVnaW5EYXRhYmFzZTo6c2V0UHJlZmVycmVkUGx1Z2luRm9yTUlNRVR5
cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgUGx1Z2luUGFja2FnZSogcGx1Z2luKQogewogICAg
IGlmICghcGx1Z2luIHx8IHBsdWdpbi0+bWltZVRvRXh0ZW5zaW9ucygpLmNvbnRhaW5zKG1pbWVU
eXBlKSkKLSAgICAgICAgbV9wcmVmZXJyZWRQbHVnaW5zLnNldChtaW1lVHlwZS5sb3dlcigpLCBw
bHVnaW4pOworICAgICAgICBtX3ByZWZlcnJlZFBsdWdpbnMuc2V0KG1pbWVUeXBlLCBwbHVnaW4p
OwogfQogCiBib29sIFBsdWdpbkRhdGFiYXNlOjpmaWxlRXhpc3RzQW5kSXNOb3REaXNhYmxlZChj
b25zdCBTdHJpbmcmIGZpbGVQYXRoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93
aW4vUGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oIGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9Q
bHVnaW5EYXRhYmFzZS5oCmluZGV4IGJmYzQ4ZWNkZmY2Y2YyMjQzNTU5NGY4YWU4NTIzMDFhNjI2
M2NmODYuLmViNmE4NDExMjRkNjk3NzViNmNjYzdiZTQzZmJjMDlkYmYwOTc3MTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmgKQEAgLTEwNyw3ICsxMDcsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFBsdWdpblNldCBtX3BsdWdpbnM7CiAgICAg
ICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UGx1Z2luUGFja2FnZT4gPiBtX3BsdWdpbnNCeVBh
dGg7CiAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCB0aW1lX3Q+IG1fcGx1Z2luUGF0aHNXaXRoVGlt
ZXM7Ci0gICAgICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UGx1Z2luUGFja2FnZT4gPiBtX3By
ZWZlcnJlZFBsdWdpbnM7CisgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UGx1Z2luUGFj
a2FnZT4sIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4gbV9wcmVmZXJyZWRQbHVnaW5zOwogI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCiAgICAgICAgIGJvb2wgbV9w
ZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUlzTG9hZGVkOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblBhY2thZ2UuaCBiL1NvdXJjZS9XZWJLaXQvd2lu
L1BsdWdpbnMvUGx1Z2luUGFja2FnZS5oCmluZGV4IDI4MzQwNTc2Nzk3YWE2YmM4MzE3NzJiYzNi
NGY5Y2NmOGNjOGJhNjMuLmQ3NmVhZmQ1NzliYjM2MGY3NzQyZWVhNGRjYzExMmE4ZTVjNzE1YTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luUGFja2FnZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luUGFja2FnZS5oCkBAIC0zOSw4ICsz
OSw5IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IE1JTUVUb0Rlc2NyaXB0
aW9uc01hcDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPiA+IE1J
TUVUb0V4dGVuc2lvbnNNYXA7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmcs
IEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4gTUlNRVRvRGVzY3JpcHRpb25zTWFwOworICAgIHR5
cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+LCBBU0NJSUNhc2VJbnNlbnNpdGl2
ZUhhc2g+IE1JTUVUb0V4dGVuc2lvbnNNYXA7CiAKICAgICBjbGFzcyBQbHVnaW5QYWNrYWdlIDog
cHVibGljIFJlZkNvdW50ZWQ8UGx1Z2luUGFja2FnZT4gewogICAgIHB1YmxpYzoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luUGFja2FnZVdpbi5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblBhY2thZ2VXaW4uY3BwCmluZGV4IGMyYmJjYzQ1
MDU5ODQwNWM1YzhhMjRmMDhhZTdiMmEwYmUxNzg0N2YuLjU2ZTZmYjg4YzE3NTdmM2MzZjdiODlh
ZDYxNWNiNmQ4N2YzMTYyYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMv
UGx1Z2luUGFja2FnZVdpbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVn
aW5QYWNrYWdlV2luLmNwcApAQCAtMjAwLDcgKzIwMCw3IEBAIGJvb2wgUGx1Z2luUGFja2FnZTo6
ZmV0Y2hJbmZvKCkKICAgICBnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEuZ2V0KCksICJG
aWxlT3Blbk5hbWUiKS5zcGxpdCgnfCcsIGRlc2NyaXB0aW9ucyk7CiAKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdHlwZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgU3RyaW5nIHR5cGUg
PSB0eXBlc1tpXS5sb3dlcigpOworICAgICAgICBTdHJpbmcgdHlwZSA9IHR5cGVzW2ldLmNvbnZl
cnRUb0FTQ0lJTG93ZXJjYXNlKCk7CiAgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IGkgPCBk
ZXNjcmlwdGlvbnMuc2l6ZSgpID8gZGVzY3JpcHRpb25zW2ldIDogIiI7CiAgICAgICAgIFN0cmlu
ZyBleHRlbnNpb25MaXN0ID0gaSA8IGV4dGVuc2lvbkxpc3RzLnNpemUoKSA/IGV4dGVuc2lvbkxp
c3RzW2ldIDogIiI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L0N1c3RvbVByb3RvY29scy9DdXN0b21Qcm90b2NvbE1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL0N1c3RvbVByb3RvY29scy9DdXN0b21Qcm90b2NvbE1hbmFnZXIuaApp
bmRleCA5Y2ZkYzM5NmUxMzY5N2MyOWQ4ZDg3ZmMxYzJhMDBiY2ViZDJjNmVlLi5iZjJiZDQ3MjA1
Y2EwOGY5OTNmYmJjZjc1ZjRkZmIyZDYwOTQ4NTNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmgK
KysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL0N1c3Rv
bVByb3RvY29sTWFuYWdlci5oCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIE9CSkNfQ0xBU1MgTlNVUkxT
ZXNzaW9uQ29uZmlndXJhdGlvbjsKIE9CSkNfQ0xBU1MgV0tDdXN0b21Qcm90b2NvbDsKICNlbHNl
CkBAIC05OSw3ICsxMDAsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXb3JrUXVldWU+IG1fbWVz
c2FnZVF1ZXVlOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgSGFzaFNldDxTdHJpbmc+IG1f
cmVnaXN0ZXJlZFNjaGVtZXM7CisgICAgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0
aXZlSGFzaD4gbV9yZWdpc3RlcmVkU2NoZW1lczsKICAgICBMb2NrIG1fcmVnaXN0ZXJlZFNjaGVt
ZXNNdXRleDsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwgUmV0YWluUHRyPFdLQ3Vz
dG9tUHJvdG9jb2w+PiBDdXN0b21Qcm90b2NvbE1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL21hYy9OZXRzY2FwZVBsdWdpbk1vZHVsZU1hYy5t
bSBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL21hYy9OZXRzY2FwZVBs
dWdpbk1vZHVsZU1hYy5tbQppbmRleCAxNTY0MTM2MTlkMzZjNTIwM2FhNWViY2M4ODcyYTJmOWQ2
ZDQzZWE0Li4zMDVmODVhYjQzYjc1ZjI3MTE2MDhjZWM1ZDc2YzYxNGU4ZGFlMDc1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9tYWMvTmV0c2NhcGVQ
bHVnaW5Nb2R1bGVNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTmV0
c2NhcGUvbWFjL05ldHNjYXBlUGx1Z2luTW9kdWxlTWFjLm1tCkBAIC0xODYsNyArMTg2LDcgQEAg
c3RhdGljIGJvb2wgZ2V0UGx1Z2luSW5mb0Zyb21Qcm9wZXJ0eUxpc3RzKENGQnVuZGxlUmVmIGJ1
bmRsZSwgUGx1Z2luTW9kdWxlSW5mbyYKICAgICAgICAgaWYgKG1pbWVUeXBlRGVzY3JpcHRpb24g
JiYgQ0ZHZXRUeXBlSUQobWltZVR5cGVEZXNjcmlwdGlvbikgIT0gQ0ZTdHJpbmdHZXRUeXBlSUQo
KSkKICAgICAgICAgICAgIG1pbWVUeXBlRGVzY3JpcHRpb24gPSAwOwogCi0gICAgICAgIG1pbWVD
bGFzc0luZm8udHlwZSA9IFN0cmluZyhtaW1lVHlwZSkubG93ZXIoKTsKKyAgICAgICAgbWltZUNs
YXNzSW5mby50eXBlID0gU3RyaW5nKG1pbWVUeXBlKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgp
OwogICAgICAgICBtaW1lQ2xhc3NJbmZvLmRlc2MgPSBtaW1lVHlwZURlc2NyaXB0aW9uOwogCiAg
ICAgICAgIC8vIE5vdyBnZXQgdGhlIGV4dGVuc2lvbnMgZm9yIHRoaXMgTUlNRSB0eXBlLgpAQCAt
MjA0LDEwICsyMDQsMTAgQEAgc3RhdGljIGJvb2wgZ2V0UGx1Z2luSW5mb0Zyb21Qcm9wZXJ0eUxp
c3RzKENGQnVuZGxlUmVmIGJ1bmRsZSwgUGx1Z2luTW9kdWxlSW5mbyYKICAgICAgICAgICAgIC8v
IG11bHRpcGxlIGFycmF5IGVsZW1lbnRzIGluIHRoZSBwcm9wZXJ0eSBsaXN0LiBXb3JrIGFyb3Vu
ZCB0aGlzIGhlcmUgYnkgc3BsaXR0aW5nIHRoZQogICAgICAgICAgICAgLy8gZXh0ZW5zaW9uIHN0
cmluZyBpbnRvIGNvbXBvbmVudHMuCiAgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRlbnNp
b25Db21wb25lbnRzOwotICAgICAgICAgICAgU3RyaW5nKGV4dGVuc2lvbikubG93ZXIoKS5zcGxp
dCgnLCcsIGV4dGVuc2lvbkNvbXBvbmVudHMpOworICAgICAgICAgICAgU3RyaW5nKGV4dGVuc2lv
bikuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKS5zcGxpdCgnLCcsIGV4dGVuc2lvbkNvbXBvbmVu
dHMpOwogCi0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGV4dGVuc2lvbkNvbXBv
bmVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgbWltZUNsYXNzSW5mby5leHRlbnNp
b25zLmFwcGVuZChleHRlbnNpb25Db21wb25lbnRzW2ldKTsKKyAgICAgICAgICAgIGZvciAoYXV0
byYgY29tcG9uZW50IDogZXh0ZW5zaW9uQ29tcG9uZW50cykKKyAgICAgICAgICAgICAgICBtaW1l
Q2xhc3NJbmZvLmV4dGVuc2lvbnMuYXBwZW5kKGNvbXBvbmVudCk7CiAgICAgICAgIH0KIAogICAg
ICAgICAvLyBBZGQgdGhpcyBNSU1FIHR5cGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvUGx1Z2lucy9OZXRzY2FwZS94MTEvTmV0c2NhcGVQbHVnaW5Nb2R1bGVYMTEuY3BwIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUveDExL05ldHNjYXBlUGx1Z2lu
TW9kdWxlWDExLmNwcAppbmRleCAzNjI3NTM5MmEzYzBiNDdlNzljZGNhMGViNjMzMTBhZTZlZjhh
OWY0Li5hY2ZjZjAwMjMzODRhMjliZmE3NGIyNGJmZGNkMGZhMjg0ZjliMWNkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS94MTEvTmV0c2NhcGVQbHVn
aW5Nb2R1bGVYMTEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05ldHNj
YXBlL3gxMS9OZXRzY2FwZVBsdWdpbk1vZHVsZVgxMS5jcHAKQEAgLTc2LDcgKzc2LDcgQEAgdm9p
ZCBOZXRzY2FwZVBsdWdpbk1vZHVsZTo6cGFyc2VNSU1FRGVzY3JpcHRpb24oY29uc3QgU3RyaW5n
JiBtaW1lRGVzY3JpcHRpb24sIFYKICAgICBBU1NFUlRfQVJHKHJlc3VsdCwgcmVzdWx0LmlzRW1w
dHkoKSk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKLSAgICBtaW1lRGVzY3JpcHRpb24u
bG93ZXIoKS5zcGxpdChVQ2hhcignOycpLCBmYWxzZSwgdHlwZXMpOworICAgIG1pbWVEZXNjcmlw
dGlvbi5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpLnNwbGl0KFVDaGFyKCc7JyksIGZhbHNlLCB0
eXBlcyk7CiAgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodHlwZXMuc2l6ZSgpKTsK
IAogICAgIHNpemVfdCBtaW1lSW5mb0NvdW50ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAppbmRleCA0MTY5Nzc2N2NhN2NlNmUzZDc2
MDI4Njk3M2MzZTQzZjRjMTlhYjE1Li43M2EwNTk5MGM0MjM3NTdiMGUzZTE5NmFhZjE4YTg5NjMz
ODlhNDMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
Y29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Nv
bnRleHQuY3BwCkBAIC01NjMsNyArNTYzLDcgQEAgdm9pZCBld2tfY29udGV4dF9wcmVmZXJyZWRf
bGFuZ3VhZ2VzX3NldChFaW5hX0xpc3QqIGxhbmd1YWdlcykKICAgICAgICAgRWluYV9MaXN0KiBs
OwogICAgICAgICB2b2lkKiBkYXRhOwogICAgICAgICBFSU5BX0xJU1RfRk9SRUFDSChsYW5ndWFn
ZXMsIGwsIGRhdGEpCi0gICAgICAgICAgICBwcmVmZXJyZWRMYW5ndWFnZXMuYXBwZW5kKFN0cmlu
Zzo6ZnJvbVVURjgoc3RhdGljX2Nhc3Q8Y2hhcio+KGRhdGEpKS5sb3dlcigpLnJlcGxhY2UoIl8i
LCAiLSIpKTsKKyAgICAgICAgICAgIHByZWZlcnJlZExhbmd1YWdlcy5hcHBlbmQoU3RyaW5nOjpm
cm9tVVRGOChzdGF0aWNfY2FzdDxjaGFyKj4oZGF0YSkpLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNl
KCkucmVwbGFjZSgiXyIsICItIikpOwogICAgIH0KIAogICAgIFdlYkNvcmU6Om92ZXJyaWRlVXNl
clByZWZlcnJlZExhbmd1YWdlcyhwcmVmZXJyZWRMYW5ndWFnZXMpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcAppbmRleCBk
NmY1ZTEzODVlNWQ4OWUzNDBlYzQyNzAxNDI0MDYzZTVhYzkxOTVhLi5hZjZkODcyNzY0YTliMTJi
ZWY2MjFhYTM3ZDc0OTI3NTZiNzYxZDRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcApAQCAtOTY4LDcgKzk2OCw3IEBA
IHZvaWQgd2Via2l0X3dlYl9jb250ZXh0X3NldF9wcmVmZXJyZWRfbGFuZ3VhZ2VzKFdlYktpdFdl
YkNvbnRleHQqIGNvbnRleHQsIGNvbnN0CiAKICAgICBWZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXM7
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGxhbmd1YWdlTGlzdFtpXTsgKytpKQotICAgICAgICBs
YW5ndWFnZXMuYXBwZW5kKFN0cmluZzo6ZnJvbVVURjgobGFuZ3VhZ2VMaXN0W2ldKS5sb3dlcigp
LnJlcGxhY2UoIl8iLCAiLSIpKTsKKyAgICAgICAgbGFuZ3VhZ2VzLmFwcGVuZChTdHJpbmc6OmZy
b21VVEY4KGxhbmd1YWdlTGlzdFtpXSkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKS5yZXBsYWNl
KCJfIiwgIi0iKSk7CiAKICAgICBXZWJDb3JlOjpvdmVycmlkZVVzZXJQcmVmZXJyZWRMYW5ndWFn
ZXMobGFuZ3VhZ2VzKTsKICAgICBXZWJDb3JlOjpsYW5ndWFnZURpZENoYW5nZSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbkluZm9TdG9yZS5jcHAK
aW5kZXggNjVlMzg0MjQ2ODgwMDM2MGQ3NDQxNWI3NjAzMzYxZTA1YzVjOGE2Mi4uOGE5OGM2MjAx
YWQ3OGU3NzYxMWY2ODcwZGU3Mjc0OGU2YzJiZTFhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUuY3BwCkBAIC0xMzgsOSArMTM4
LDcgQEAgUGx1Z2luTW9kdWxlSW5mbyBQbHVnaW5JbmZvU3RvcmU6OmZpbmRQbHVnaW5Gb3JFeHRl
bnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24KICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAg
ICAgICAgIGZvciAoY29uc3QgYXV0byYgbWltZUNsYXNzSW5mbyA6IHBsdWdpbi5pbmZvLm1pbWVz
KSB7Ci0gICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXh0ZW5zaW9ucyA9IG1pbWVD
bGFzc0luZm8uZXh0ZW5zaW9uczsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHN0ZDo6
ZmluZChleHRlbnNpb25zLmJlZ2luKCksIGV4dGVuc2lvbnMuZW5kKCksIGV4dGVuc2lvbikgIT0g
ZXh0ZW5zaW9ucy5lbmQoKSkgeworICAgICAgICAgICAgaWYgKG1pbWVDbGFzc0luZm8uZXh0ZW5z
aW9ucy5jb250YWlucyhleHRlbnNpb24pKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgZm91bmQg
YSBzdXBwb3J0ZWQgZXh0ZW5zaW9uLCBzZXQgdGhlIGNvcnJlY3QgTUlNRSB0eXBlLgogICAgICAg
ICAgICAgICAgIG1pbWVUeXBlID0gbWltZUNsYXNzSW5mby50eXBlOwogICAgICAgICAgICAgICAg
IHJldHVybiBwbHVnaW47CkBAIC0xNjAsMTEgKzE1OCwxMSBAQCBzdGF0aWMgaW5saW5lIFN0cmlu
ZyBwYXRoRXh0ZW5zaW9uKGNvbnN0IFVSTCYgdXJsKQogICAgICAgICBpZiAoZXh0ZW5zaW9uUG9z
ICE9IG5vdEZvdW5kKQogICAgICAgICAgICAgZXh0ZW5zaW9uID0gZmlsZW5hbWUuc3Vic3RyaW5n
KGV4dGVuc2lvblBvcyArIDEpOwogICAgIH0KLSAgICAKLSAgICByZXR1cm4gZXh0ZW5zaW9uOwor
ICAgIHJldHVybiBleHRlbnNpb24uY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKIH0KIAogI2lm
ICFQTEFURk9STShDT0NPQSkKKwogUGx1Z2luTW9kdWxlTG9hZFBvbGljeSBQbHVnaW5JbmZvU3Rv
cmU6OmRlZmF1bHRMb2FkUG9saWN5Rm9yUGx1Z2luKGNvbnN0IFBsdWdpbk1vZHVsZUluZm8mKQog
ewogICAgIHJldHVybiBQbHVnaW5Nb2R1bGVMb2FkTm9ybWFsbHk7CkBAIC0xOTAsNyArMTg4LDcg
QEAgUGx1Z2luTW9kdWxlSW5mbyBQbHVnaW5JbmZvU3RvcmU6OmZpbmRQbHVnaW4oU3RyaW5nJiBt
aW1lVHlwZSwgY29uc3QgVVJMJiB1cmwsIFAKICAgICB9CiAKICAgICAvLyBOZXh0LCBjaGVjayBp
ZiBhbnkgcGx1Zy1pbnMgY2xhaW0gdG8gc3VwcG9ydCB0aGUgVVJMIGV4dGVuc2lvbi4KLSAgICBT
dHJpbmcgZXh0ZW5zaW9uID0gcGF0aEV4dGVuc2lvbih1cmwpLmxvd2VyKCk7CisgICAgU3RyaW5n
IGV4dGVuc2lvbiA9IHBhdGhFeHRlbnNpb24odXJsKTsKICAgICBpZiAoIWV4dGVuc2lvbi5pc051
bGwoKSAmJiBtaW1lVHlwZS5pc0VtcHR5KCkpIHsKICAgICAgICAgUGx1Z2luTW9kdWxlSW5mbyBw
bHVnaW4gPSBmaW5kUGx1Z2luRm9yRXh0ZW5zaW9uKGV4dGVuc2lvbiwgbWltZVR5cGUsIGFsbG93
ZWRQbHVnaW5UeXBlcyk7CiAgICAgICAgIGlmICghcGx1Z2luLnBhdGguaXNOdWxsKCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IDczMTRhMzgwMmE3ZDIx
ZTM0N2FjNmFiN2FlYjRhZGNmMTlkZjY1YWEuLjcxNjUxZWFhZWY1M2NkNmQwYjllMTA3ZWEwNzUw
ODQ1ODVmOTNmN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
CkBAIC0xODYzLDcgKzE4NjMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZmluZFBsdWdpbihjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCB1aW50MzJfdCBwcm9jZXNzVHlwZSwgY29ucwogCiAgICAgTUVT
U0FHRV9DSEVDS19VUkwodXJsU3RyaW5nKTsKIAotICAgIG5ld01pbWVUeXBlID0gbWltZVR5cGUu
bG93ZXIoKTsKKyAgICBuZXdNaW1lVHlwZSA9IG1pbWVUeXBlLmNvbnZlcnRUb0FTQ0lJTG93ZXJj
YXNlKCk7CiAgICAgcGx1Z2luTG9hZFBvbGljeSA9IFBsdWdpbk1vZHVsZUxvYWROb3JtYWxseTsK
IAogICAgIFBsdWdpbkRhdGE6OkFsbG93ZWRQbHVnaW5UeXBlcyBhbGxvd2VkUGx1Z2luVHlwZXMg
PSBhbGxvd09ubHlBcHBsaWNhdGlvblBsdWdpbnMgPyBQbHVnaW5EYXRhOjpPbmx5QXBwbGljYXRp
b25QbHVnaW5zIDogUGx1Z2luRGF0YTo6QWxsUGx1Z2luczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCmluZGV4IDYyYjg1ZWNlYTA1ZDEzODEyNjBmYjA2Njlh
ZGY4ZGNjYjFhMjBkNzAuLmJmM2NlNWQ4ZGZlYzgyMWEyMTAwODljNTY4YzZlZTBiYzc4ZmJiOGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAtOTEz
LDkgKzkxMyw5IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNDT1JT
RW5hYmxlZChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMo
TWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNDT1JTRW5hYmxlZCh1cmxT
Y2hlbWUpKTsKIH0KIAotSGFzaFNldDxTdHJpbmc+JiBXZWJQcm9jZXNzUG9vbDo6Z2xvYmFsVVJM
U2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkKK0hhc2hTZXQ8U3RyaW5nLCBBU0NJ
SUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiBXZWJQcm9jZXNzUG9vbDo6Z2xvYmFsVVJMU2NoZW1lc1dp
dGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
SGFzaFNldDxTdHJpbmc+PiBzZXQ7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8
U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+PiBzZXQ7CiAgICAgcmV0dXJuIHNldDsK
IH0KIApAQCAtOTI0LDEwICs5MjQsOSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3Rlckds
b2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhjb25zdAogICAgIGlm
ICghdXJsU2NoZW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmcgc2NoZW1lTG93ZXIg
PSB1cmxTY2hlbWUubG93ZXIoKTsKLSAgICBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3Rv
Y29sSGFuZGxlcnMoKS5hZGQoc2NoZW1lTG93ZXIpOworICAgIGdsb2JhbFVSTFNjaGVtZXNXaXRo
Q3VzdG9tUHJvdG9jb2xIYW5kbGVycygpLmFkZCh1cmxTY2hlbWUpOwogICAgIGZvciAoYXV0byog
cHJvY2Vzc1Bvb2wgOiBhbGxQcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnJl
Z2lzdGVyU2NoZW1lRm9yQ3VzdG9tUHJvdG9jb2woc2NoZW1lTG93ZXIpOworICAgICAgICBwcm9j
ZXNzUG9vbC0+cmVnaXN0ZXJTY2hlbWVGb3JDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUpOwogfQog
CiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdD
dXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpAQCAtOTM1LDEw
ICs5MzQsOSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1l
QXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbgogICAgIGlmICghdXJsU2NoZW1lKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmcgc2NoZW1lTG93ZXIgPSB1cmxTY2hlbWUubG93
ZXIoKTsKLSAgICBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKS5y
ZW1vdmUoc2NoZW1lTG93ZXIpOworICAgIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9j
b2xIYW5kbGVycygpLnJlbW92ZSh1cmxTY2hlbWUpOwogICAgIGZvciAoYXV0byogcHJvY2Vzc1Bv
b2wgOiBhbGxQcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnVucmVnaXN0ZXJT
Y2hlbWVGb3JDdXN0b21Qcm90b2NvbChzY2hlbWVMb3dlcik7CisgICAgICAgIHByb2Nlc3NQb29s
LT51bnJlZ2lzdGVyU2NoZW1lRm9yQ3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKIH0KIAogI2lm
IEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUG9vbC5oCmluZGV4IGZmMDZjZjc1NTM1MDVjNTRlZGRhNjliZmU4NGEzODcyZmFhN2Qw
MjIuLmI3Yzc1ZDYwNTcxNzliZWMwOGY2YWVjNjAyZDMxOWU4N2M2MmU1ODYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCkBAIC0zMTcsNyArMzE3LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgcmVnaXN0ZXJTY2hlbWVGb3JDdXN0b21Qcm90b2NvbChjb25zdCBTdHJp
bmcmKTsKICAgICB2b2lkIHVucmVnaXN0ZXJTY2hlbWVGb3JDdXN0b21Qcm90b2NvbChjb25zdCBT
dHJpbmcmKTsKIAotICAgIHN0YXRpYyBIYXNoU2V0PFN0cmluZz4mIGdsb2JhbFVSTFNjaGVtZXNX
aXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpOworICAgIHN0YXRpYyBIYXNoU2V0PFN0cmluZywg
QVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90
b2NvbEhhbmRsZXJzKCk7CiAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVB
c0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMoY29uc3QgU3RyaW5nJik7CiAgICAgc3RhdGlj
IHZvaWQgdW5yZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5k
bGVycyhjb25zdCBTdHJpbmcmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAKaW5kZXggMjQ4
Mzk4MzJjMDU3YWE1ZWJmYmM3ODI4ZmY5MWZhZTk3MjUyODAzNy4uYjliMjk2Y2UxYmU4NmRkZTI3
NmQ3ZjI2NDQzMGMyNTA2OGZhOTk0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwCkBAIC02
MzgsNyArNjM4LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbjo6aW5pdGlhbGl6ZShjb25zdCBQYXJh
bWV0ZXJzJiBwYXJhbWV0ZXJzKQogCiAjaWYgUExVR0lOX0FSQ0hJVEVDVFVSRShNQUMpCiAgICAg
ICAgIGlmIChtX3BsdWdpbk1vZHVsZS0+cGx1Z2luUXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVp
cmtzOjpXYW50c0xvd2VyY2FzZVBhcmFtZXRlck5hbWVzKSkKLSAgICAgICAgICAgIHBhcmFtZXRl
ck5hbWUgPSBwYXJhbWV0ZXJOYW1lLmxvd2VyKCk7CisgICAgICAgICAgICBwYXJhbWV0ZXJOYW1l
ID0gcGFyYW1ldGVyTmFtZS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOwogI2VuZGlmCiAKICAg
ICAgICAgcGFyYW1OYW1lcy5hcHBlbmQocGFyYW1ldGVyTmFtZS51dGY4KCkpOwpAQCAtNjc1LDcg
KzY3NSw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW46OmluaXRpYWxpemUoY29uc3QgUGFyYW1ldGVy
cyYgcGFyYW1ldGVycykKICAgICBpZiAobV9wbHVnaW5Nb2R1bGUtPnBsdWdpblF1aXJrcygpLmNv
bnRhaW5zKFBsdWdpblF1aXJrczo6TWFrZU9wYXF1ZVVubGVzc1RyYW5zcGFyZW50U2lsdmVybGln
aHRCYWNrZ3JvdW5kQXR0cmlidXRlRXhpc3RzKSkgewogICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHBhcmFtZXRlcnMubmFtZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGlmIChl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwYXJhbWV0ZXJzLm5hbWVzW2ldLCAiYmFja2dy
b3VuZCIpKSB7Ci0gICAgICAgICAgICAgICAgc2V0SXNUcmFuc3BhcmVudChpc1RyYW5zcGFyZW50
U2lsdmVybGlnaHRCYWNrZ3JvdW5kVmFsdWUocGFyYW1ldGVycy52YWx1ZXNbaV0ubG93ZXIoKSkp
OworICAgICAgICAgICAgICAgIHNldElzVHJhbnNwYXJlbnQoaXNUcmFuc3BhcmVudFNpbHZlcmxp
Z2h0QmFja2dyb3VuZFZhbHVlKHBhcmFtZXRlcnMudmFsdWVzW2ldLmNvbnZlcnRUb0FTQ0lJTG93
ZXJjYXNlKCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAppbmRleCA5OGZlOTk4YjAxYWU0
YWFmMDA2YzFlMWVkMTcyZGUwNDgwNjEyOGQzLi5iODlkN2ExYjM3ZTMwM2M1YWE0OTU2M2NlODZh
ZTJhZGY0ZTllYjgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcApAQCAtMTUw
OCwxNCArMTUwOCwxMSBAQCBQYXNzUmVmUHRyPFdpZGdldD4gV2ViRnJhbWVMb2FkZXJDbGllbnQ6
OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYgcAogCiBzdGF0aWMgYm9vbCBw
bHVnaW5TdXBwb3J0c0V4dGVuc2lvbihjb25zdCBQbHVnaW5EYXRhJiBwbHVnaW5EYXRhLCBjb25z
dCBTdHJpbmcmIGV4dGVuc2lvbikKIHsKLSAgICBBU1NFUlQoZXh0ZW5zaW9uLmxvd2VyKCkgPT0g
ZXh0ZW5zaW9uKTsKLQorICAgIEFTU0VSVChleHRlbnNpb24uY29udmVydFRvQVNDSUlMb3dlcmNh
c2UoKSA9PSBleHRlbnNpb24pOwogICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiBtaW1lczsKICAg
ICBWZWN0b3I8c2l6ZV90PiBtaW1lUGx1Z2luSW5kaWNlczsKICAgICBwbHVnaW5EYXRhLmdldFdl
YlZpc2libGVNaW1lc0FuZFBsdWdpbkluZGljZXMobWltZXMsIG1pbWVQbHVnaW5JbmRpY2VzKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1pbWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IGNvbnN0IE1pbWVDbGFzc0luZm8mIG1pbWVDbGFzc0luZm8gPSBtaW1lc1tpXTsKLQorICAgIGZv
ciAoYXV0byYgbWltZUNsYXNzSW5mbyA6IG1pbWVzKSB7CiAgICAgICAgIGlmIChtaW1lQ2xhc3NJ
bmZvLmV4dGVuc2lvbnMuY29udGFpbnMoZXh0ZW5zaW9uKSkKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KQEAgLTE1MjQsNDIgKzE1MjEsMzcgQEAgc3RhdGljIGJvb2wgcGx1Z2luU3Vw
cG9ydHNFeHRlbnNpb24oY29uc3QgUGx1Z2luRGF0YSYgcGx1Z2luRGF0YSwgY29uc3QgU3RyaW5n
JgogCiBPYmplY3RDb250ZW50VHlwZSBXZWJGcmFtZUxvYWRlckNsaWVudDo6b2JqZWN0Q29udGVu
dFR5cGUoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGVJbikKIHsKLSAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgYmUgbWVyZ2VkIHdpdGggV2ViQ29yZTo6RnJhbWVMb2FkZXI6
OmRlZmF1bHRPYmplY3RDb250ZW50VHlwZSB3aGVuIHRoZSBwbHVnaW4gY29kZQotICAgIC8vIGlz
IGNvbnNvbGlkYXRlZC4KKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgZXZlbnR1YWxseSBiZSBt
ZXJnZWQgd2l0aCBXZWJDb3JlOjpGcmFtZUxvYWRlcjo6ZGVmYXVsdE9iamVjdENvbnRlbnRUeXBl
LgogCiAgICAgU3RyaW5nIG1pbWVUeXBlID0gbWltZVR5cGVJbjsKICAgICBpZiAobWltZVR5cGUu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIFN0cmluZyBleHRlbnNpb24gPSB1cmwucGF0aCgpLnN1YnN0
cmluZyh1cmwucGF0aCgpLnJldmVyc2VGaW5kKCcuJykgKyAxKS5sb3dlcigpOworICAgICAgICBT
dHJpbmcgcGF0aCA9IHVybC5wYXRoKCk7CisgICAgICAgIGF1dG8gZG90UG9zaXRpb24gPSBwYXRo
LnJldmVyc2VGaW5kKCcuJyk7CisgICAgICAgIGlmIChkb3RQb3NpdGlvbiA9PSBub3RGb3VuZCkK
KyAgICAgICAgICAgIHJldHVybiBPYmplY3RDb250ZW50RnJhbWU7CisgICAgICAgIFN0cmluZyBl
eHRlbnNpb24gPSBwYXRoLnN1YnN0cmluZyhkb3RQb3NpdGlvbiArIDEpLmNvbnZlcnRUb0FTQ0lJ
TG93ZXJjYXNlKCk7CiAKICAgICAgICAgLy8gVHJ5IHRvIGd1ZXNzIHRoZSBNSU1FIHR5cGUgZnJv
bSB0aGUgZXh0ZW5zaW9uLgogICAgICAgICBtaW1lVHlwZSA9IE1JTUVUeXBlUmVnaXN0cnk6Omdl
dE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGV4dGVuc2lvbik7Ci0KICAgICAgICAgaWYgKG1pbWVUeXBl
LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUncyBhIHBsdWctaW4g
YXJvdW5kIHRoYXQgY2FuIGhhbmRsZSB0aGUgZXh0ZW5zaW9uLgogICAgICAgICAgICAgaWYgKFdl
YlBhZ2UqIHdlYlBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpIHsKICAgICAgICAgICAgICAgICBpZiAo
cGx1Z2luU3VwcG9ydHNFeHRlbnNpb24od2ViUGFnZS0+Y29yZVBhZ2UoKS0+cGx1Z2luRGF0YSgp
LCBleHRlbnNpb24pKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0Q29udGVudE5l
dHNjYXBlUGx1Z2luOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdENv
bnRlbnRGcmFtZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtaW1lVHlwZS5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBPYmplY3RDb250ZW50RnJhbWU7Ci0KLSAgICBib29sIHBsdWdJ
blN1cHBvcnRzTUlNRVR5cGUgPSBmYWxzZTsKLSAgICBpZiAoV2ViUGFnZSogd2ViUGFnZSA9IG1f
ZnJhbWUtPnBhZ2UoKSkgewotICAgICAgICBjb25zdCBQbHVnaW5EYXRhJiBwbHVnaW5EYXRhID0g
d2ViUGFnZS0+Y29yZVBhZ2UoKS0+cGx1Z2luRGF0YSgpOwotICAgICAgICBpZiAocGx1Z2luRGF0
YS5zdXBwb3J0c01pbWVUeXBlKG1pbWVUeXBlLCBQbHVnaW5EYXRhOjpBbGxQbHVnaW5zKSAmJiB3
ZWJGcmFtZSgpLT5jb3JlRnJhbWUoKS0+bG9hZGVyKCkuc3ViZnJhbWVMb2FkZXIoKS5hbGxvd1Bs
dWdpbnMoKSkKLSAgICAgICAgICAgIHBsdWdJblN1cHBvcnRzTUlNRVR5cGUgPSB0cnVlOwotICAg
ICAgICBlbHNlIGlmIChwbHVnaW5EYXRhLnN1cHBvcnRzTWltZVR5cGUobWltZVR5cGUsIFBsdWdp
bkRhdGE6Ok9ubHlBcHBsaWNhdGlvblBsdWdpbnMpKQotICAgICAgICAgICAgcGx1Z0luU3VwcG9y
dHNNSU1FVHlwZSA9IHRydWU7Ci0gICAgfQotICAgIAogICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5
Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGUobWltZVR5cGUpKQogICAgICAgICByZXR1cm4gT2Jq
ZWN0Q29udGVudEltYWdlOwogCi0gICAgaWYgKHBsdWdJblN1cHBvcnRzTUlNRVR5cGUpCi0gICAg
ICAgIHJldHVybiBPYmplY3RDb250ZW50TmV0c2NhcGVQbHVnaW47CisgICAgaWYgKFdlYlBhZ2Uq
IHdlYlBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpIHsKKyAgICAgICAgYXV0byBhbGxvd2VkUGx1Z2lu
VHlwZXMgPSB3ZWJGcmFtZSgpLT5jb3JlRnJhbWUoKS0+bG9hZGVyKCkuc3ViZnJhbWVMb2FkZXIo
KS5hbGxvd1BsdWdpbnMoKQorICAgICAgICAgICAgPyBQbHVnaW5EYXRhOjpBbGxQbHVnaW5zIDog
UGx1Z2luRGF0YTo6T25seUFwcGxpY2F0aW9uUGx1Z2luczsKKyAgICAgICAgaWYgKHdlYlBhZ2Ut
PmNvcmVQYWdlKCktPnBsdWdpbkRhdGEoKS5zdXBwb3J0c01pbWVUeXBlKG1pbWVUeXBlLCBhbGxv
d2VkUGx1Z2luVHlwZXMpKQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdENvbnRlbnROZXRzY2Fw
ZVBsdWdpbjsKKyAgICB9CiAKICAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRO
b25JbWFnZU1JTUVUeXBlKG1pbWVUeXBlKSkKICAgICAgICAgcmV0dXJuIE9iamVjdENvbnRlbnRG
cmFtZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270796</attachid>
            <date>2016-02-06 08:22:20 -0800</date>
            <delta_ts>2016-02-06 10:14:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-153905-20160206082157.patch</filename>
            <type>text/plain</type>
            <size>100349</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk2MjE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
NmU3ODY1NDVlMDdjZjg4YzUyNGUwMTYxNTA5OGVkZTE4MGVlNDk1Li5iN2FkMjFhY2NlNWFmZTA5
YmEwZTBlZGI3Nzc5Zjk4MzI0NmMyYjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAxNi0wMi0wNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgRmluaXNoIGF1ZGl0aW5nIGNhbGwgc2l0ZXMgb2YgdXBwZXIoKSBhbmQgbG93ZXIo
KSwgZWxpbWluYXRlIG1hbnksIGFuZCByZW5hbWUgdGhlIGZ1bmN0aW9ucworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzOTA1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBydW50aW1lL0ludGxPYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDOjpjYW5vbmljYWxMYW5nVGFnKTogVXNlIGNvbnZlclRvQVNDSUlV
cHBlcmNhc2Ugb24gdGhlIGxhbmd1YWdlIHRhZy4KKworICAgICAgICAqIHJ1bnRpbWUvU3RyaW5n
UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVG9Mb3dlckNhc2Up
OiBUd2VhayBzdHlsZSBhbmQgdXBkYXRlIGZvciBuYW1lIGNoYW5nZS4KKyAgICAgICAgKEpTQzo6
c3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2UpOiBEaXR0by4KKwogMjAxNi0wMi0wNiAgQ29tbWl0
IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cm9sbGluZyBvdXQgcjE5NjEwNC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIv
U291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggOTA5NzYxMzc0MmE1YWFmMTgwZjcxZGNiMmJiNTE3
MGI4MzBlOTc3ZS4uMWM3YmIyYjdhMGJjZDUwODExNmNiNDE3YzIzY2QwZjMxMjg0YWJiNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwzMCBAQAorMjAxNi0wMi0wNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5j
b20+CisKKyAgICAgICAgRmluaXNoIGF1ZGl0aW5nIGNhbGwgc2l0ZXMgb2YgdXBwZXIoKSBhbmQg
bG93ZXIoKSwgZWxpbWluYXRlIG1hbnksIGFuZCByZW5hbWUgdGhlIGZ1bmN0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzOTA1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvdGV4dC9BdG9t
aWNTdHJpbmcuY3BwOgorICAgICAgICAoV1RGOjpBdG9taWNTdHJpbmc6Omxvd2VyKTogRGVsZXRl
ZC4KKyAgICAgICAgKiB3dGYvdGV4dC9BdG9taWNTdHJpbmcuaDogRGVsZXRlZCB0aGUgbG93ZXIg
ZnVuY3Rpb24uCisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmNwcDoKKyAgICAgICAg
KFdURjo6U3RyaW5nSW1wbDo6Y29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZSk6IFJlbmFt
ZWQgZnJvbSBsb3dlci4KKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y29udmVydFRvVXBwZXJj
YXNlV2l0aG91dExvY2FsZSk6IFJlbmFtZWQgZnJvbSB1cHBlci4KKyAgICAgICAgKFdURjo6U3Ry
aW5nSW1wbDo6Y29udmVydFRvTG93ZXJjYXNlV2l0aExvY2FsZSk6IFJlbmFtZWQgZnJvbSBsb3dl
ci4KKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y29udmVydFRvVXBwZXJjYXNlV2l0aExvY2Fs
ZSk6IFJlbmFtZWQgZnJvbSB1cHBlci4KKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Zm9sZENh
c2UpOiBBZGRlZCBmYXN0IGNhc2VzIGZvciBBU0NJSSBzaW5jZSB0aGlzIGlzCisgICAgICAgIG5v
dyB1c2VkIGluIHNvbWUgbW9yZS1wZXJmb3JtYW5jZS1jcml0aWNhbCBjb2RlLgorICAgICAgICAq
IHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDogUmVuYW1lZCBsb3dlciBhbmQgdXBwZXIuCisKKyAgICAg
ICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmc6OmNvbnZl
cnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGUpOiBSZW5hbWVkIGZyb20gbG93ZXIuCisgICAgICAg
IChXVEY6OlN0cmluZzo6Y29udmVydFRvVXBwZXJjYXNlV2l0aG91dExvY2FsZSk6IFJlbmFtZWQg
ZnJvbSB1cHBlci4KKyAgICAgICAgKFdURjo6U3RyaW5nOjpjb252ZXJ0VG9Mb3dlcmNhc2VXaXRo
TG9jYWxlKTogUmVuYW1lZCBmcm9tIGxvd2VyLgorICAgICAgICAoV1RGOjpTdHJpbmc6OmNvbnZl
cnRUb1VwcGVyY2FzZVdpdGhMb2NhbGUpOiBSZW5hbWVkIGZyb20gdXBwZXIuCisgICAgICAgICog
d3RmL3RleHQvV1RGU3RyaW5nLmg6IFJlbmFtZWQgbG93ZXIgYW5kIHVwcGVyLiBSZW1vdmVkIHVu
bmVlZGVkIGNvbW1lbnQuCisKIDIwMTYtMDItMDMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIENvbnZlcnQgYW5vdGhlciBiYXRjaCBvZiBTdHJpbmc6Omxvd2VyIGNh
bGxzaXRlcyB0byBzb21ldGhpbmcgYmV0dGVyLCB0eXBpY2FsbHkgY29udmVydFRvQVNDSUlMb3dl
cmNhc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCA1NGQ4ZjY0OTNkOTgxYjU2YzI3MDQyNTFhNTA1YTdhMjkwNTQw
MGNjLi4wY2IwMTU3MThjZjMxYTI5ODQwNzI0OWFhODIyMDYwOWZhYzgxYzEwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTMwIEBACisyMDE2LTAyLTA2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxl
LmNvbT4KKworICAgICAgICBGaW5pc2ggYXVkaXRpbmcgY2FsbCBzaXRlcyBvZiB1cHBlcigpIGFu
ZCBsb3dlcigpLCBlbGltaW5hdGUgbWFueSwgYW5kIHJlbmFtZSB0aGUgZnVuY3Rpb25zCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTM5MDUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE1vZHVsZXMvbWVk
aWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2U6
OmlzVHlwZVN1cHBvcnRlZCk6IFVzZSBjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSBvbiBNSU1FIHR5
cGUuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0VGV4dCk6IFVzZSBu
ZXcgbmFtZXMgZm9yIGxvd2VyIGFuZCB1cHBlci4gQWxzbworICAgICAgICB0d2Vha2VkIHN0eWxl
IGEgdGlueSBiaXQgYW5kIHVzZWQgdV90b3VwcGVyIHJhdGhlciB0aGFuIGNvbnZlcnRpbmcgYW4g
ZW50aXJlCisgICAgICAgIHN0cmluZyB0byB1cHBlcmNhc2UuCisKKyAgICAgICAgKiBkb20vRG9j
dW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmFkZEltYWdlRWxlbWVudEJ5
Q2FzZUZvbGRlZFVzZW1hcCk6IFJlbmFtZWQgdG8gcmVmbGVjdCB0aGUgdXNlCisgICAgICAgIG9m
IGNhc2UgZm9sZGluZyByYXRoZXIgdGhhbiBsb3dlcmNhc2luZy4KKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50OjpyZW1vdmVJbWFnZUVsZW1lbnRCeUNhc2VGb2xkZWRVc2VtYXApOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjppbWFnZUVsZW1lbnRCeUNhc2VGb2xkZWRVc2Vt
YXApOiBEaXR0by4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDogRGl0dG8uCisgICAgICAgICog
ZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE9y
ZGVyZWRNYXA6OmdldEVsZW1lbnRCeUNhc2VGb2xkZWRNYXBOYW1lKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeUNhc2VGb2xkZWRVc2Vt
YXApOiBEaXR0by4KKyAgICAgICAgKiBkb20vRG9jdW1lbnRPcmRlcmVkTWFwLmg6IERpdHRvLgor
CisgICAgICAgICogZG9tL1RyZWVTY29wZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU2Nv
cGU6OmdldEltYWdlTWFwKTogUmVtb3ZlZCB1bm5lZWRlZCBzcGVjaWFsIGNhc2UgZm9yIG51bGwg
c3RyaW5nLgorICAgICAgICBTaW1wbGlmaWVkIGxvZ2ljIGZvciBjYXNlcyB3aGVyZSB0aGUgVVJM
IGRvZXMgbm90IGhhdmUgYSAiIyIgY2hhcmFjdGVyIGluIGl0LgorICAgICAgICBVc2UgY2FzZSBm
b2xkaW5nIGluc3RlYWQgb2YgbG93ZXJjYXNlLgorCisgICAgICAgICogZWRpdGluZy9jb2NvYS9I
VE1MQ29udmVydGVyLm1tOgorICAgICAgICAoSFRNTENvbnZlcnRlcjo6X3Byb2Nlc3NUZXh0KTog
UmVtb3ZlZCB1bm5lZGVkIHNwZWNpYWwgY2FzZSBmb3IgdGhlIGVtcHR5IHN0cmluZy4KKyAgICAg
ICAgVXNlIG1ha0NhcGl0YWxpemVkIGluc3RlYWQgb2YgQ29jb2EgZnVuY3Rpb24gZm9yICJjYXBp
dGFsaXplIi4gVXNlIHVwcGVyIGFuZCBsb3dlcgorICAgICAgICBmdW5jdGlvbnMgYnkgdGhlaXIg
bmV3IG5hbWVzLgorCisgICAgICAgICogaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKTogVXNlIGNhc2Ug
Zm9sZGluZyBpbnN0ZWFkIG9mCisgICAgICAgIGxvd2VyYXNpbmcgZm9yIHRoZSB1c2VtYXAgYXR0
cmlidXRlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6aW5zZXJ0ZWRJbnRv
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50OjpyZW1vdmVkRnJv
bSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6bWF0Y2hlc0Nh
c2VGb2xkZWRVc2VtYXApOiBEaXR0by4KKyAgICAgICAgKiBodG1sL0hUTUxJbWFnZUVsZW1lbnQu
aDogUmVuYW1lIHNpbmNlIHVzZW1hcCBpcyBjYXNlIGZvbGRlZCBub3csIG5vdCBsb3dlcmNhc2Vk
LgorCisgICAgICAgICogaHRtbC9IVE1MTWFwRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTWFwRWxlbWVudDo6aW1hZ2VFbGVtZW50KTogVXNlIGNhc2UgZm9sZGluZyBpbnN0ZWFk
IG9mIGxvd2VyY2FzaW5nCisgICAgICAgIGZvciB1c2VtYXAuCisgICAgICAgIChXZWJDb3JlOjpI
VE1MTWFwRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOiBEaXR0by4KKworICAgICAgICAqIHBsYXRm
b3JtL0xhbmd1YWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbm9uaWNhbExhbmd1YWdlSWRl
bnRpZmllcik6IFVzZSBjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSBmb3IgbGFuZ3VhZ2UgY29kZS4K
KyAgICAgICAgKFdlYkNvcmU6OmluZGV4T2ZCZXN0TWF0Y2hpbmdMYW5ndWFnZUluTGlzdCk6IERp
dHRvLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFw
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OnNoYXBlSGFyZkJ1enpS
dW5zKTogVXNlIG5ldyBuYW1lIGZvciB0aGUgdXBwZXIgZnVuY3Rpb24uCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNl
Q29udGVudFR5cGVPcHRpb25zSGVhZGVyKTogVXNlIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlIGluc3RlYWQKKyAgICAgICAgb2YgbG93ZXJjYXNpbmcgdG8gY2hlY2sgZm9yIGEgc3BlY2lm
aWMgaGVhZGVyIHZhbHVlLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9NSU1FSGVhZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJldHJpZXZlS2V5VmFsdWVQYWlycyk6IFVzZSBjb252
ZXJ0VG9BU0NJSUxvd2VyY2FzZSBmb3IgTUlNRSBoZWFkZXIgbmFtZS4KKyAgICAgICAgKFdlYkNv
cmU6Ok1JTUVIZWFkZXI6OnBhcnNlQ29udGVudFRyYW5zZmVyRW5jb2RpbmcpOiBVc2UgZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UKKyAgICAgICAgaW5zdGVhZCBvZiBsb3dlcmNhc2luZy4K
KworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjphbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlSG9zdHMpOiBNYWtl
IHRoaXMgaGFzaCBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlLgorICAgICAgICAoV2ViQ29yZTo6Y2xp
ZW50Q2VydGlmaWNhdGVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRs
ZTo6Y3JlYXRlQ0ZVUkxDb25uZWN0aW9uKTogUmVtb3ZlIGNhbGwgdG8gbG93ZXIgc2luY2UgdGhl
CisgICAgICAgIHNldCBpcyBub3cgQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZS4KKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlSGFuZGxlOjpzZXRIb3N0QWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNldENsaWVudENlcnRp
ZmljYXRlKTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2ll
SmFyQ3VybC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXROZXRzY2FwZUNvb2tpZUZvcm1hdCk6
IFVzZSBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSBpbnN0ZWFkIG9mCisgICAgICAgIGxv
d2VyY2FzaW5nLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL011bHRpcGFydEhh
bmRsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNdWx0aXBhcnRIYW5kbGU6OmRpZFJlY2VpdmVS
ZXNwb25zZSk6IFVzZSBjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSB0bworICAgICAgICBtYWtlIGEg
TUlNRSB0eXBlIGxvd2VyY2FzZS4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9S
ZXNvdXJjZUhhbmRsZUN1cmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OnNldEhvc3RBbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlKTogUmVtb3ZlZCB1bm5lZWRlZAorICAg
ICAgICBjb252ZXJzaW9uIHRvIGxvd2VyY2FzZSBub3cgdGhhdCB0aGUgc2V0IGlzIEFTQ0lJIGNh
c2UtaW5zZW5zaXRpdmUuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c2V0Q2xp
ZW50Q2VydGlmaWNhdGUpOiBSZW1vdmVkIGNvZGUgdGhhdCBwb3B1bGF0ZXMgYSBtYXAKKyAgICAg
ICAgdGhhdCBpcyB0aGVuIG5ldmVyIHVzZWQgZm9yIGFueXRoaW5nLgorCisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpoZWFkZXJDYWxsYmFjayk6IFVzZSBjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSBmb3Ig
TUlNRSB0eXBlLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1NTTEhhbmRsZS5j
cHA6IE1hZGUgaGFzaCBtYXBzIGtleWVkIGJ5IGhvc3QgbmFtZXMKKyAgICAgICAgQVNDSUkgY2Fz
ZS1pbnNlbnNpdGl2ZS4KKyAgICAgICAgKFdlYkNvcmU6OmFkZEFsbG93ZWRDbGllbnRDZXJ0aWZp
Y2F0ZSk6IFJlbW92ZWQgbG93ZXJjYXNpbmcgc2luY2UgdGhlIG1hcCBpdHNlbGYKKyAgICAgICAg
aXMgbm93IEFTQ0lJIGNhc2UgaW5zZW5zaXR2ZS4KKyAgICAgICAgKFdlYkNvcmU6OnNldFNTTENs
aWVudENlcnRpZmljYXRlKTogRGl0dG8uIEFsc28gdXNlIGF1dG8gZm9yIGl0ZXJhdG9yIHR5cGUg
c28gd2UKKyAgICAgICAgZG9uJ3QgaGF2ZSB0byB3cml0ZSBvdXQgdGhlIG1hcCB0eXBlLgorICAg
ICAgICAoV2ViQ29yZTo6c3NsSWdub3JlSFRUUFNDZXJ0aWZpY2F0ZSk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6Y2VydFZlcmlmeUNhbGxiYWNrKTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcDogTWFkZSBoYXNoIG1hcHMg
a2V5ZWQgYnkgaG9zdCBuYW1lcworICAgICAgICBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlLgorICAg
ICAgICAoV2ViQ29yZTo6YWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3RzKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpoYW5kbGVVbmlnbm9yZWRUTFNFcnJvcnMpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzZXRIb3N0QWxsb3dzQW55SFRUUFNDZXJ0aWZp
Y2F0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNldENsaWVu
dENlcnRpZmljYXRlKTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0xvY2FsZVRv
U2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwOiBNYWRlIGhhc2ggbWFwcyBrZXllZCBieSBzY3JpcHQK
KyAgICAgICAgbmFtZXMgQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZS4gVVNFIFdURl9BUlJBWV9MRU5H
VEggYXMgYXBwcm9wcmlhdGUuCisgICAgICAgIChXZWJDb3JlOjpzY3JpcHROYW1lVG9Db2RlKTog
VXNlIG1vZGVybiBzdHlsZSB0byBpbml0aWFsaXplIHRoZSBtYXAuIFJlbW92ZWQKKyAgICAgICAg
dW5uZWNlc3NhcnkgbG93ZXJjYXNpbmcgb2YgdGhlIHNjcmlwdCBuYW1lIGJlZm9yZSBsb29raW5n
IGF0IHRoZSBtYXAuCisgICAgICAgIChXZWJDb3JlOjpsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250
U2VsZWN0aW9uKTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L3dpbi9Mb2NhbGVX
aW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydExvY2FsZU5hbWVUb0xDSUQpOiBNYWRl
IG1hcCBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIGFuZCByZW1vdmVkCisgICAgICAgIHVubmVlZGVk
IGxvd2VyY2FzaW5nLgorCisgICAgICAgICogcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y2xpcGJvYXJkVHlwZUZyb21NSU1FVHlwZSk6IFVzZSBlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSBpbnN0ZWFkCisgICAgICAgIG9mIGxvd2VyY2FzaW5n
LgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6YXBwbHlUZXh0VHJhbnNmb3JtKTogVXNlIG5ldyBuYW1lcyBmb3IgdGhlIHVwcGVyIGFuZCBs
b3dlciBmdW5jdGlvbnMuCisKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlSXNYTUwpOiBSZW1vdmUgdW5u
ZWVkZWQgbG93ZXJjYXNpbmcsIHNpbmNlCisgICAgICAgIERPTUltcGxlbWVudGF0aW9uIG5vdyBo
YXMgQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZSBoYW5kbGluZyBvZiBNSU1FIHR5cGVzLgorCiAyMDE2
LTAyLTA2ICBLb25zdGFudGluIFRva2FyZXYgIDxhbm51bGVuQHlhbmRleC5ydT4KIAogICAgICAg
ICBBZGRlZCBpbXBsZW1lbnRhdGlvbnMgb2YgQVhPYmplY3RDYWNoZSBtZXRob2RzIGZvciAhSEFW
RShBQ0NFU1NJQklMSVRZKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCA3NGRmMThiYmQxOGJkY2FlMjM0
MDNhNTFlYTcxYWYxYTliNmRiOWQwLi40MDY0NDU2ZGJhYTVlYWY5ODk3ODkxMjJkZTFlMjZkYjgz
MDY4ODJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTYtMDItMDYgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIEZpbmlzaCBhdWRpdGluZyBj
YWxsIHNpdGVzIG9mIHVwcGVyKCkgYW5kIGxvd2VyKCksIGVsaW1pbmF0ZSBtYW55LCBhbmQgcmVu
YW1lIHRoZSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1MzkwNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogUGx1Z2lucy9XZWJCYXNlUGx1Z2luUGFja2FnZS5tbToKKyAgICAgICAgKC1b
V2ViQmFzZVBsdWdpblBhY2thZ2UgZ2V0UGx1Z2luSW5mb0Zyb21QTGlzdHNdKTogVXNlIG1vZGVy
biBmb3IgbG9vcHMuCisgICAgICAgICgtW1dlYkJhc2VQbHVnaW5QYWNrYWdlIHN1cHBvcnRzRXh0
ZW5zaW9uOl0pOiBVc2UgY29udmVydFRvQVNDSUlMb3dlcmNhc2UgZm9yIGV4dGVuc2lvbiBhc3Nl
cnQuCisgICAgICAgIEFsc28gdXNlIG1vZGVybiBmb3IgbG9vcC4KKyAgICAgICAgKC1bV2ViQmFz
ZVBsdWdpblBhY2thZ2Ugc3VwcG9ydHNNSU1FVHlwZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dl
YkJhc2VQbHVnaW5QYWNrYWdlIE1JTUVUeXBlRm9yRXh0ZW5zaW9uOl0pOiBEaXR0by4KKwogMjAx
Ni0wMi0wMyAgSmVzc2llIEJlcmxpbiAgPGpiZXJsaW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBC
dWlsZCBmaXguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKaW5kZXggMmNlNGE4NzZjYmI1ODQyMjhlOWE1NTZhZWRi
Y2Y3Y2NjZDJlZjAwMS4uNGFmNWQzMDQyZWU1ZTEwNzg4NDE4MzUyYmM5ODIyMmYxYzJmNmRmZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvd2luL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE2LTAyLTA2ICBEYXJpbiBBZGxl
ciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBGaW5pc2ggYXVkaXRpbmcgY2FsbCBzaXRl
cyBvZiB1cHBlcigpIGFuZCBsb3dlcigpLCBlbGltaW5hdGUgbWFueSwgYW5kIHJlbmFtZSB0aGUg
ZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTM5MDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFBsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
RGF0YWJhc2U6OnBsdWdpbkZvck1JTUVUeXBlKTogVXNlIEFTQ0lJIGNhc2UtaW5zZW5zaXRpdmUg
bWFwIHJhdGhlcgorICAgICAgICB0aGFuIGxvd2VyY2FzaW5nIHRoZSBNSU1FIHR5cGUuCisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6c2V0UHJlZmVycmVkUGx1Z2luRm9yTUlNRVR5
cGUpOiBEaXR0by4KKworICAgICAgICAqIFBsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaDogTWFrZSBt
X3ByZWZlcnJlZFBsdWdpbnMgdXNlIGFuIEFTQ0lJIGNhc2UtaW5zZW5zaXRpdmUgaGFzaC4KKwor
ICAgICAgICAqIFBsdWdpbnMvUGx1Z2luUGFja2FnZS5oOiBVc2UgQVNDSUkgY2FzZS1pbnNlbnNp
dGl2ZSBoYXNoIGZvciBtYXBzIGtleWVkIGJ5IE1JTUUgdHlwZS4KKworICAgICAgICAqIFBsdWdp
bnMvUGx1Z2luUGFja2FnZVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdl
OjpmZXRjaEluZm8pOiBVc2UgY29udmVydFRvQVNDSUlMb3dlcmNhc2UgdG8gbG93ZXJjYXNlIGEg
TUlNRSB0eXBlLgorCiAyMDE2LTAyLTA0ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBs
ZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogSW5zcGVjdG9yVGltZWxpbmVBZ2VudCBk
b2Vzbid0IG5lZWQgdG8gcmVjb21waWxlIGZ1bmN0aW9ucyBiZWNhdXNlIGl0IG5vdyB1c2VzIHRo
ZSBzYW1wbGluZyBwcm9maWxlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGNhYjhjMjhlM2QyNjVjZDFhMDBjMWM3
Mzc2N2NjNWM5ZDY2YjRiZDcuLjUyYTBlMDNlODRlMGIwNGIyM2IwYzU0NzFmNDA4YmNjOTIyMDFk
NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MCBAQAorMjAxNi0wMi0wNiAgRGFyaW4gQWRsZXIg
IDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgRmluaXNoIGF1ZGl0aW5nIGNhbGwgc2l0ZXMg
b2YgdXBwZXIoKSBhbmQgbG93ZXIoKSwgZWxpbWluYXRlIG1hbnksIGFuZCByZW5hbWUgdGhlIGZ1
bmN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTUzOTA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmg6
IFVzZSBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIGhhc2gKKyAgICAgICAgZm9yIHNldCBvZiByZWdp
c3RlcmVkIHNjaGVtZXMuCisKKyAgICAgICAgKiBTaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9tYWMv
TmV0c2NhcGVQbHVnaW5Nb2R1bGVNYWMubW06CisgICAgICAgIChXZWJLaXQ6OmdldFBsdWdpbklu
Zm9Gcm9tUHJvcGVydHlMaXN0cyk6IFVzZSBjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSBmb3IgTUlN
RSB0eXBlIGFuZAorICAgICAgICBmb3IgZmlsZSBleHRlbnNpb25zLgorCisgICAgICAgICogU2hh
cmVkL1BsdWdpbnMvTmV0c2NhcGUveDExL05ldHNjYXBlUGx1Z2luTW9kdWxlWDExLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5Nb2R1bGU6OnBhcnNlTUlNRURlc2NyaXB0aW9u
KTogVXNlIGNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlIGZvcgorICAgICAgICBNSU1FIGRlc2NyaXB0
aW9uLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwOgorICAg
ICAgICAoZXdrX2NvbnRleHRfcHJlZmVycmVkX2xhbmd1YWdlc19zZXQpOiBVc2UgY29udmVydFRv
QVNDSUlMb3dlcmNhc2UgZm9yIGxhbmd1YWdlLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViQ29udGV4dC5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX2NvbnRleHRfc2V0
X3ByZWZlcnJlZF9sYW5ndWFnZXMpOiBVc2UgY29udmVydFRvQVNDSUlMb3dlcmNhc2UgZm9yIGxh
bmd1YWdlLgorCisgICAgICAgICogVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luSW5mb1N0b3JlOjpmaW5kUGx1Z2luRm9yRXh0ZW5z
aW9uKTogVXNlIFZlY3Rvcjo6Y29udGFpbnMgaW5zdGVhZCBvZgorICAgICAgICB3cml0aW5nIGl0
IG91dCB1c2luZyBzdGQ6OmZpbmQuCisgICAgICAgIChXZWJLaXQ6OnBhdGhFeHRlbnNpb24pOiBM
b3dlcmNhc2UgdGhlIHJlc3VsdCB3aXRoIGNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlIGluc3RlYWQg
b2YKKyAgICAgICAgbGVhdmluZyB0aGF0IHRvIHRoZSBjYWxsZXIuCisgICAgICAgIChXZWJLaXQ6
OlBsdWdpbkluZm9TdG9yZTo6ZmluZFBsdWdpbik6IFJlbW92ZWQgY2FsbCB0byBsb3dlciBzaW5j
ZSBwYXRoRXh0ZW5zaW9uCisgICAgICAgIGhhbmRsZXMgdGhhdCBub3cuCisKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpmaW5kUGx1Z2luKTogVXNlIGNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlIGZvciBNSU1FIHR5cGUu
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6Z2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhh
bmRsZXJzKTogVXNlCisgICAgICAgIGFuIEFTQ0lJIGNhc2UtaW5zZW5zaXRpdmUgaGFzaC4KKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNI
YXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToKKyAgICAgICAgUmVtb3ZlIGxvd2VyY2FzaW5n
LCBzaW5jZSB0aGUgaGFzaCBpcyBub3cgQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZS4KKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmlu
Z0N1c3RvbVByb3RvY29sSGFuZGxlcnMpOgorICAgICAgICBEaXR0by4KKworICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOiBVc2UgYW4gQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZSBo
YXNoLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1
Z2luLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW46OmluaXRpYWxpemUpOiBV
c2UgY29udmVydFRvQVNDSUlMb3dlcmNhc2Ugb24gcGFyYW1ldGVyIG5hbWVzCisgICAgICAgIGFu
ZCB2YWx1ZXMuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
TG9hZGVyQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6cGx1Z2luU3VwcG9ydHNFeHRlbnNp
b24pOiBVc2UgY29udmVydFRvQVNDSUlMb3dlcmNhc2UgZm9yIGV4dGVuc2lvbiBhc3NlcnRpb24u
CisgICAgICAgIEFsc28gdXNlIGEgbW9kZXJuIGZvciBsb29wLgorICAgICAgICAoV2ViS2l0OjpX
ZWJGcmFtZUxvYWRlckNsaWVudDo6b2JqZWN0Q29udGVudFR5cGUpOiBNYWtlIHRoZSBjaGVja3Mg
Zm9yIGVtcHR5IE1JTUUgdHlwZXMKKyAgICAgICAgYSBsaXR0bGUgbGVzcyByZWR1bmRhbnQuIFJl
b3JkZXJlZCBsb2dpYyB0byBhdm9pZCBjaGVja2luZyB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgTUlN
RQorICAgICAgICB0eXBlcyBleHRyYSB0aW1lcywgYW5kIHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCBm
b3IgYSBib29sZWFuLiBVc2UgY29udmVydFRvQVNDSUlMb3dlcmNhc2UKKyAgICAgICAgb24gdGhl
IGV4dGVuc2lvbi4KKwogMjAxNi0wMi0wNiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lh
QGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gRml4IG1vcmUgaW5jb3JyZWN0IEFT
U0VSVCBpbnRyb2R1Y2VkIGluIHIxOTYwNTMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxPYmplY3QuY3BwCmluZGV4IGY5OGNkNTRmYTdhMDA5YWU2N2U3NmYzY2JkZTZjOWRi
OGQzNzQ5ZWQuLjllOGYwMzM2MzBiYmI3NTNkZDk0ZmU1YWNjY2JkYjk0NzEzYTI1NzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCkBAIC0zMjIsNyAr
MzIyLDcgQEAgc3RhdGljIFN0cmluZyBjYW5vbmljYWxMYW5nVGFnKGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBwYXJ0cykKICAgICAgICAgaWYgKGlzVmFsaWRSZWdpb24pIHsKICAgICAgICAgICAgICsr
Y3VycmVudEluZGV4OwogICAgICAgICAgICAgY2Fub25pY2FsLmFwcGVuZCgnLScpOwotICAgICAg
ICAgICAgY2Fub25pY2FsLmFwcGVuZChyZWdpb24udXBwZXIoKSk7CisgICAgICAgICAgICBjYW5v
bmljYWwuYXBwZW5kKHJlZ2lvbi5jb252ZXJ0VG9BU0NJSVVwcGVyY2FzZSgpKTsKICAgICAgICAg
fQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
aW5nUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1By
b3RvdHlwZS5jcHAKaW5kZXggMmQ1MDJiMDQ4YWZiMDE1NTAzZmE5NTI0N2JhMTMyZDgxZmIxOWYx
MS4uZDVkY2RiYjcxNDVhYTI0MmNiN2JkOGY0YTllMGQ0NTUyMjY5ZGVkMSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCkBAIC0xNDA2
LDE3ICsxNDA2LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9G
dW5jVG9Mb3dlckNhc2UoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihleGVjKTsKICAgICBKU1N0cmluZyogc1ZhbCA9IHRoaXNWYWx1ZS50b1N0cmluZyhl
eGVjKTsKICAgICBjb25zdCBTdHJpbmcmIHMgPSBzVmFsLT52YWx1ZShleGVjKTsKLQotICAgIGlu
dCBzU2l6ZSA9IHMubGVuZ3RoKCk7Ci0gICAgaWYgKCFzU2l6ZSkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShzVmFsKTsKLSAgICBSRUxFQVNFX0FTU0VSVChzU2l6ZSA+PSAwKTsKLQot
ICAgIFN0cmluZ0ltcGwqIG91ckltcGwgPSBzLmltcGwoKTsKLSAgICBSZWZQdHI8U3RyaW5nSW1w
bD4gbG93ZXIgPSBvdXJJbXBsLT5sb3dlcigpOwotICAgIGlmIChvdXJJbXBsID09IGxvd2VyKQor
ICAgIFN0cmluZyBsb3dlcmNhc2VkU3RyaW5nID0gcy5jb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0
TG9jYWxlKCk7CisgICAgaWYgKGxvd2VyY2FzZWRTdHJpbmcuaW1wbCgpID09IHMuaW1wbCgpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNWYWwpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNTdHJpbmcoZXhlYywgU3RyaW5nKGxvd2VyLnJlbGVhc2UoKSkpKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGxvd2VyY2FzZWRTdHJpbmcpKTsK
IH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUb1VwcGVy
Q2FzZShFeGVjU3RhdGUqIGV4ZWMpCkBAIC0xNDI2LDE2ICsxNDE5LDEwIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2UoRXhlY1N0YXRlKiBl
eGVjKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBKU1N0cmlu
Zyogc1ZhbCA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKICAgICBjb25zdCBTdHJpbmcmIHMg
PSBzVmFsLT52YWx1ZShleGVjKTsKLQotICAgIGludCBzU2l6ZSA9IHMubGVuZ3RoKCk7Ci0gICAg
aWYgKCFzU2l6ZSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzVmFsKTsKLQotICAg
IFN0cmluZ0ltcGwqIHNJbXBsID0gcy5pbXBsKCk7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHVw
cGVyID0gc0ltcGwtPnVwcGVyKCk7Ci0gICAgaWYgKHNJbXBsID09IHVwcGVyKQorICAgIFN0cmlu
ZyB1cHBlcmNhc2VkU3RyaW5nID0gcy5jb252ZXJ0VG9VcHBlcmNhc2VXaXRob3V0TG9jYWxlKCk7
CisgICAgaWYgKHVwcGVyY2FzZWRTdHJpbmcuaW1wbCgpID09IHMuaW1wbCgpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNWYWwpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNTdHJpbmcoZXhlYywgU3RyaW5nKHVwcGVyLnJlbGVhc2UoKSkpKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIHVwcGVyY2FzZWRTdHJpbmcpKTsKIH0KIAogRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNMb2NhbGVDb21wYXJlKEV4
ZWNTdGF0ZSogZXhlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3Ry
aW5nLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcAppbmRleCA5OWUw
ZDZlNTkxN2U4NGQ1ODA0ZDEwOTY5NDVlNzIxYWY3NGQ4ODUwLi5hOWZlZjE1MTc2ZDQ1MDgwMGU1
YTI1NzljNTQzN2YzZThkZDQ3MGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0
b21pY1N0cmluZy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmcuY3Bw
CkBAIC0zMiwyMiArMzIsNiBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAotQXRvbWljU3RyaW5nIEF0
b21pY1N0cmluZzo6bG93ZXIoKSBjb25zdAotewotICAgIC8vIE5vdGU6IFRoaXMgaXMgYSBob3Qg
ZnVuY3Rpb24gaW4gdGhlIERyb21hZW8gYmVuY2htYXJrLgotICAgIFN0cmluZ0ltcGwqIGltcGwg
PSB0aGlzLT5pbXBsKCk7Ci0gICAgaWYgKFVOTElLRUxZKCFpbXBsKSkKLSAgICAgICAgcmV0dXJu
IEF0b21pY1N0cmluZygpOwotCi0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IGxvd2VyY2FzZWRTdHJp
bmcgPSBpbXBsLT5sb3dlcigpOwotICAgIGlmIChMSUtFTFkobG93ZXJjYXNlZFN0cmluZyA9PSBp
bXBsKSkKLSAgICAgICAgcmV0dXJuICp0aGlzOwotCi0gICAgQXRvbWljU3RyaW5nIHJlc3VsdDsK
LSAgICByZXN1bHQubV9zdHJpbmcgPSBBdG9taWNTdHJpbmdJbXBsOjphZGQobG93ZXJjYXNlZFN0
cmluZy5nZXQoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogdGVtcGxhdGU8QXRvbWljU3Ry
aW5nOjpDYXNlQ29udmVydFR5cGUgdHlwZT4KIEFMV0FZU19JTkxJTkUgQXRvbWljU3RyaW5nIEF0
b21pY1N0cmluZzo6Y29udmVydEFTQ0lJQ2FzZSgpIGNvbnN0CiB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5oIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9t
aWNTdHJpbmcuaAppbmRleCBhOWU0MDY5MWJhNmNkYWRkYTY0NDA0ZTVlY2QwNWVjZjU2MDk2OGVh
Li5hYmJkYjQ1ZGVmMjk5ZjRhZGVmZmIwM2UzZDZlNGQ1OGFkNTA2Y2UyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvQXRvbWljU3RyaW5nLmgKQEAgLTE1NSw3ICsxNTUsNiBAQCBwdWJsaWM6CiAKICAgICBXVEZf
RVhQT1JUX1NUUklOR19BUEkgQXRvbWljU3RyaW5nIGNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkg
Y29uc3Q7CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIEF0b21pY1N0cmluZyBjb252ZXJ0VG9B
U0NJSVVwcGVyY2FzZSgpIGNvbnN0OwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBBdG9taWNT
dHJpbmcgbG93ZXIoKSBjb25zdDsKIAogICAgIGludCB0b0ludChib29sKiBvayA9IDApIGNvbnN0
IHsgcmV0dXJuIG1fc3RyaW5nLnRvSW50KG9rKTsgfQogICAgIGRvdWJsZSB0b0RvdWJsZShib29s
KiBvayA9IDApIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLnRvRG91YmxlKG9rKTsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L3RleHQvU3RyaW5nSW1wbC5jcHAKaW5kZXggY2IzZDAyNGJiYTkwOWYyYWJlODI1YTNmOWEwNDEy
M2RhNTM1M2EwYi4uN2Y3OTQ4OTA3YzY5OTMyMDQ0MWExODlmMWFiMmIyZGIyNjlkNzVlNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCkBAIC0zNjEsOSArMzYxLDkgQEAgVUNoYXIzMiBT
dHJpbmdJbXBsOjpjaGFyYWN0ZXJTdGFydGluZ0F0KHVuc2lnbmVkIGkpCiAgICAgcmV0dXJuIDA7
CiB9CiAKLVJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpsb3dlcigpCitSZWY8U3RyaW5nSW1w
bD4gU3RyaW5nSW1wbDo6Y29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZSgpCiB7Ci0gICAg
Ly8gTm90ZTogVGhpcyBpcyBhIGhvdCBmdW5jdGlvbiBpbiB0aGUgRHJvbWFlbyBiZW5jaG1hcmss
IHNwZWNpZmljYWxseSB0aGUKKyAgICAvLyBOb3RlOiBBdCBvbmUgdGltZSB0aGlzIHdhcyBhIGhv
dCBmdW5jdGlvbiBpbiB0aGUgRHJvbWFlbyBiZW5jaG1hcmssIHNwZWNpZmljYWxseSB0aGUKICAg
ICAvLyBuby1vcCBjb2RlIHBhdGggdXAgdGhyb3VnaCB0aGUgZmlyc3QgJ3JldHVybicgc3RhdGVt
ZW50LgogCiAgICAgLy8gRmlyc3Qgc2NhbiB0aGUgc3RyaW5nIGZvciB1cHBlcmNhc2UgYW5kIG5v
bi1BU0NJSSBjaGFyYWN0ZXJzOgpAQCAtNDQyLDExICs0NDIsMTIgQEAgU2xvd1BhdGg6CiAgICAg
cmV0dXJuIG5ld0ltcGwucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotUmVmPFN0cmluZ0ltcGw+IFN0
cmluZ0ltcGw6OnVwcGVyKCkKK1JlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjb252ZXJ0VG9V
cHBlcmNhc2VXaXRob3V0TG9jYWxlKCkKIHsKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGNvdWxkIGJl
IG9wdGltaXplZCBmb3Igbm8tb3AgY2FzZXMgdGhlIHdheSBsb3dlcigpIGlzLAotICAgIC8vIGJ1
dCBpbiBlbXBpcmljYWwgdGVzdGluZywgZmV3IGFjdHVhbCBjYWxscyB0byB1cHBlcigpIGFyZSBu
by1vcHMsIHNvCi0gICAgLy8gaXQgd291bGRuJ3QgYmUgd29ydGggdGhlIGV4dHJhIHRpbWUgZm9y
IHByZS1zY2FubmluZy4KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGNvdWxkIGJlIG9wdGltaXplZCBm
b3Igbm8tb3AgY2FzZXMgdGhlIHdheQorICAgIC8vIGNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRM
b2NhbGUoKSBpcywgYnV0IGluIGVtcGlyaWNhbCB0ZXN0aW5nLAorICAgIC8vIGZldyBhY3R1YWwg
Y2FsbHMgdG8gdXBwZXIoKSBhcmUgbm8tb3BzLCBzbyBpdCB3b3VsZG4ndCBiZSB3b3J0aAorICAg
IC8vIHRoZSBleHRyYSB0aW1lIGZvciBwcmUtc2Nhbm5pbmcuCiAKICAgICBpZiAobV9sZW5ndGgg
PiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4
KCkpKQogICAgICAgICBDUkFTSCgpOwpAQCAtNDc3LDcgKzQ3OCw3IEBAIFJlZjxTdHJpbmdJbXBs
PiBTdHJpbmdJbXBsOjp1cHBlcigpCiAgICAgICAgIGludCBudW1iZXJTaGFycFNDaGFyYWN0ZXJz
ID0gMDsKIAogICAgICAgICAvLyBUaGVyZSBhcmUgdHdvIHNwZWNpYWwgY2FzZXMuCi0gICAgICAg
IC8vICAxLiBsYXRpbi0xIGNoYXJhY3RlcnMgd2hlbiBjb252ZXJ0ZWQgdG8gdXBwZXIgY2FzZSBh
cmUgMTYgYml0IGNoYXJhY3RlcnMuCisgICAgICAgIC8vICAxLiBTb21lIExhdGluLTEgY2hhcmFj
dGVycyB3aGVuIGNvbnZlcnRlZCB0byB1cHBlciBjYXNlIGFyZSAxNiBiaXQgY2hhcmFjdGVycy4K
ICAgICAgICAgLy8gIDIuIExvd2VyIGNhc2Ugc2hhcnAtUyBjb252ZXJ0cyB0byAiU1MiICh0d28g
Y2hhcmFjdGVycykKICAgICAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
IHsKICAgICAgICAgICAgIExDaGFyIGMgPSBtX2RhdGE4W2ldOwpAQCAtNDg1LDcgKzQ4Niw3IEBA
IFJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjp1cHBlcigpCiAgICAgICAgICAgICAgICAgKytu
dW1iZXJTaGFycFNDaGFyYWN0ZXJzOwogICAgICAgICAgICAgQVNTRVJUKHVfdG91cHBlcihjKSA8
PSAweEZGRkYpOwogICAgICAgICAgICAgVUNoYXIgdXBwZXIgPSB1X3RvdXBwZXIoYyk7Ci0gICAg
ICAgICAgICBpZiAoVU5MSUtFTFkodXBwZXIgPiAweGZmKSkgeworICAgICAgICAgICAgaWYgKFVO
TElLRUxZKHVwcGVyID4gMHhGRikpIHsKICAgICAgICAgICAgICAgICAvLyBTaW5jZSB0aGlzIHVw
cGVyLWNhc2VkIGNoYXJhY3RlciBkb2VzIG5vdCBmaXQgaW4gYW4gOC1iaXQgc3RyaW5nLCB3ZSBu
ZWVkIHRvIHRha2UgdGhlIDE2LWJpdCBwYXRoLgogICAgICAgICAgICAgICAgIGdvdG8gdXBjb252
ZXJ0OwogICAgICAgICAgICAgfQpAQCAtNTU0LDE0ICs1NTUsMTQgQEAgc3RhdGljIGlubGluZSBi
b29sIG5lZWRzVHVya2lzaENhc2luZ1J1bGVzKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRl
bnRpZmllcikKICAgICAgICAgJiYgKGxvY2FsZUlkZW50aWZpZXIubGVuZ3RoKCkgPT0gMiB8fCBs
b2NhbGVJZGVudGlmaWVyWzJdID09ICctJyk7CiB9CiAKLVJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJ
bXBsOjpsb3dlcihjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpCitSZWY8U3Ry
aW5nSW1wbD4gU3RyaW5nSW1wbDo6Y29udmVydFRvTG93ZXJjYXNlV2l0aExvY2FsZShjb25zdCBB
dG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpCiB7CiAgICAgLy8gVXNlIHRoZSBtb3JlLW9w
dGltaXplZCBjb2RlIHBhdGggbW9zdCBvZiB0aGUgdGltZS4KICAgICAvLyBBc3N1bWluZyBoZXJl
IHRoYXQgdGhlIG9ubHkgbG9jYWxlLXNwZWNpZmljIGxvd2VyY2FzaW5nIGlzIHRoZSBUdXJraXNo
IGNhc2luZyBydWxlcy4KICAgICAvLyBGSVhNRTogQ291bGQgcG9zc2libHkgb3B0aW1pemUgZnVy
dGhlciBieSBsb29raW5nIGZvciB0aGUgc3BlY2lmaWMgc2VxdWVuY2VzCiAgICAgLy8gdGhhdCBo
YXZlIGxvY2FsZS1zcGVjaWZpYyBsb3dlcmNhc2luZy4gVGhlcmUgYXJlIG9ubHkgdGhyZWUgb2Yg
dGhlbS4KICAgICBpZiAoIW5lZWRzVHVya2lzaENhc2luZ1J1bGVzKGxvY2FsZUlkZW50aWZpZXIp
KQotICAgICAgICByZXR1cm4gbG93ZXIoKTsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0xvd2Vy
Y2FzZVdpdGhvdXRMb2NhbGUoKTsKIAogICAgIC8vIEZJWE1FOiBDb3VsZCBzaGFyZSBtb3JlIGNv
ZGUgd2l0aCB0aGUgbWFpbiBTdHJpbmdJbXBsOjpsb3dlciBieSBmYWN0b3Jpbmcgb3V0CiAgICAg
Ly8gdGhpcyBsYXN0IHBhcnQgaW50byBhIHNoYXJlZCBmdW5jdGlvbiB0aGF0IHRha2VzIGEgbG9j
YWxlIHN0cmluZywgc2luY2UgdGhpcyBpcwpAQCAtNTkwLDEzICs1OTEsMTMgQEAgUmVmPFN0cmlu
Z0ltcGw+IFN0cmluZ0ltcGw6Omxvd2VyKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRp
ZmllcikKICAgICByZXR1cm4gbmV3U3RyaW5nLnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKLVJlZjxT
dHJpbmdJbXBsPiBTdHJpbmdJbXBsOjp1cHBlcihjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlk
ZW50aWZpZXIpCitSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y29udmVydFRvVXBwZXJjYXNl
V2l0aExvY2FsZShjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpCiB7CiAgICAg
Ly8gVXNlIHRoZSBtb3JlLW9wdGltaXplZCBjb2RlIHBhdGggbW9zdCBvZiB0aGUgdGltZS4KICAg
ICAvLyBBc3N1bWluZyBoZXJlIHRoYXQgdGhlIG9ubHkgbG9jYWxlLXNwZWNpZmljIGxvd2VyY2Fz
aW5nIGlzIHRoZSBUdXJraXNoIGNhc2luZyBydWxlcywKICAgICAvLyBhbmQgdGhhdCB0aGUgb25s
eSBhZmZlY3RlZCBjaGFyYWN0ZXIgaXMgbG93ZXJjYXNlICJpIi4KICAgICBpZiAoIW5lZWRzVHVy
a2lzaENhc2luZ1J1bGVzKGxvY2FsZUlkZW50aWZpZXIpIHx8IGZpbmQoJ2knKSA9PSBub3RGb3Vu
ZCkKLSAgICAgICAgcmV0dXJuIHVwcGVyKCk7CisgICAgICAgIHJldHVybiBjb252ZXJ0VG9VcHBl
cmNhc2VXaXRob3V0TG9jYWxlKCk7CiAKICAgICBpZiAobV9sZW5ndGggPiBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpKQogICAgICAgICBD
UkFTSCgpOwpAQCAtNjIzLDYwICs2MjQsODYgQEAgUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6
OnVwcGVyKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcikKIAogUmVmPFN0cmlu
Z0ltcGw+IFN0cmluZ0ltcGw6OmZvbGRDYXNlKCkKIHsKLSAgICAvLyBGSVhNRTogV2h5IGRvZXNu
J3QgdGhpcyBmdW5jdGlvbiBoYXZlIGEgcHJlZmxpZ2h0IGxpa2UgdGhlIG9uZSBpbiBTdHJpbmdJ
bXBsOjpsb3dlcj8KLQotICAgIGlmIChtX2xlbmd0aCA+IHN0YXRpY19jYXN0PHVuc2lnbmVkPihz
dGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkpCi0gICAgICAgIENSQVNIKCk7Ci0g
ICAgaW50MzJfdCBsZW5ndGggPSBtX2xlbmd0aDsKLQogICAgIGlmIChpczhCaXQoKSkgewotICAg
ICAgICAvLyBEbyBhIGZhc3RlciBsb29wIGZvciB0aGUgY2FzZSB3aGVyZSBhbGwgdGhlIGNoYXJh
Y3RlcnMgYXJlIEFTQ0lJLgotICAgICAgICBMQ2hhciogZGF0YTsKLSAgICAgICAgYXV0byBuZXdJ
bXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YSk7Ci0gICAgICAgIExDaGFy
IG9yZWQgPSAwOwotCi0gICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KSB7Ci0gICAgICAgICAgICBMQ2hhciBjID0gbV9kYXRhOFtpXTsKLSAgICAgICAgICAgIGRhdGFb
aV0gPSB0b0FTQ0lJTG93ZXIoYyk7Ci0gICAgICAgICAgICBvcmVkIHw9IGM7CisgICAgICAgIHVu
c2lnbmVkIGZhaWxpbmdJbmRleDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8gY2hhcmFjdGVyID0gbV9kYXRhOFtpXTsK
KyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghaXNBU0NJSShjaGFyYWN0ZXIpIHx8IGlzQVNDSUlV
cHBlcihjaGFyYWN0ZXIpKSkgeworICAgICAgICAgICAgICAgIGZhaWxpbmdJbmRleCA9IGk7Cisg
ICAgICAgICAgICAgICAgZ290byBTbG93UGF0aDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQor
ICAgICAgICAvLyBTdHJpbmcgd2FzIGFsbCBBU0NJSSBhbmQgbm8gdXBwZXJjYXNlLCBzbyBqdXN0
IHJldHVybiBhcy1pcy4KKyAgICAgICAgcmV0dXJuICp0aGlzOwogCi0gICAgICAgIGlmICghKG9y
ZWQgJiB+MHg3RikpCi0gICAgICAgICAgICByZXR1cm4gbmV3SW1wbDsKLQotICAgICAgICAvLyBE
byBhIHNsb3dlciBpbXBsZW1lbnRhdGlvbiBmb3IgY2FzZXMgdGhhdCBpbmNsdWRlIG5vbi1BU0NJ
SSBMYXRpbi0xIGNoYXJhY3RlcnMuCi0gICAgICAgIC8vIEZJWE1FOiBTaG91bGRuJ3QgdGhpcyB1
c2UgdV9mb2xkQ2FzZSBpbnN0ZWFkIG9mIHVfdG9sb3dlcj8KLSAgICAgICAgZm9yIChpbnQzMl90
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIEFTU0VSVCh1X3RvbG93ZXIo
bV9kYXRhOFtpXSkgPD0gMHhGRik7Ci0gICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8
TENoYXI+KHVfdG9sb3dlcihtX2RhdGE4W2ldKSk7CitTbG93UGF0aDoKKyAgICAgICAgYm9vbCBu
ZWVkMTZCaXRDaGFyYWN0ZXJzID0gZmFsc2U7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGZh
aWxpbmdJbmRleDsgaSA8IG1fbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8gY2hhcmFj
dGVyID0gbV9kYXRhOFtpXTsKKyAgICAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gMHhCNSB8fCBj
aGFyYWN0ZXIgPT0gMHhERikgeworICAgICAgICAgICAgICAgIG5lZWQxNkJpdENoYXJhY3RlcnMg
PSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9
CiAKLSAgICAgICAgcmV0dXJuIG5ld0ltcGw7CisgICAgICAgIGlmICghbmVlZDE2Qml0Q2hhcmFj
dGVycykgeworICAgICAgICAgICAgTENoYXIqIGRhdGE4OworICAgICAgICAgICAgYXV0byBmb2xk
ZWQgPSBjcmVhdGVVbmluaXRpYWxpemVkSW50ZXJuYWxOb25FbXB0eShtX2xlbmd0aCwgZGF0YTgp
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZhaWxpbmdJbmRleDsgKytp
KQorICAgICAgICAgICAgICAgIGRhdGE4W2ldID0gbV9kYXRhOFtpXTsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGZhaWxpbmdJbmRleDsgaSA8IG1fbGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvIGNoYXJhY3RlciA9IG1fZGF0YThbaV07CisgICAgICAgICAgICAgICAg
aWYgKGlzQVNDSUkoY2hhcmFjdGVyKSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YThbaV0gPSB0
b0FTQ0lJTG93ZXIoY2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKHVfZm9sZENhc2UoY2hhcmFjdGVyLCBVX0ZPTERfQ0FTRV9ERUZB
VUxUKSA8PSAweEZGKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YThbaV0gPSBzdGF0aWNfY2Fz
dDxMQ2hhcj4odV9mb2xkQ2FzZShjaGFyYWN0ZXIsIFVfRk9MRF9DQVNFX0RFRkFVTFQpKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZm9sZGVk
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gRklYTUU6IFVuY2xlYXIgd2h5
IHdlIHVzZSBnb3RvIGluIHRoZSA4LWJpdCBjYXNlLCBhbmQgYSBkaWZmZXJlbnQgYXBwcm9hY2gg
aW4gdGhlIDE2LWJpdCBjYXNlLgorICAgICAgICBib29sIG5vVXBwZXIgPSB0cnVlOworICAgICAg
ICB1bnNpZ25lZCBvcmVkID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IG1fZGF0YTE2W2ld
OworICAgICAgICAgICAgaWYgKFVOTElLRUxZKGlzQVNDSUlVcHBlcihjaGFyYWN0ZXIpKSkKKyAg
ICAgICAgICAgICAgICBub1VwcGVyID0gZmFsc2U7CisgICAgICAgICAgICBvcmVkIHw9IGNoYXJh
Y3RlcjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIShvcmVkICYgfjB4N0YpKSB7CisgICAgICAg
ICAgICBpZiAobm9VcHBlcikgeworICAgICAgICAgICAgICAgIC8vIFN0cmluZyB3YXMgYWxsIEFT
Q0lJIGFuZCBubyB1cHBlcmNhc2UsIHNvIGp1c3QgcmV0dXJuIGFzLWlzLgorICAgICAgICAgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFVDaGFyKiBkYXRh
MTY7CisgICAgICAgICAgICBhdXRvIGZvbGRlZCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWRJbnRlcm5h
bE5vbkVtcHR5KG1fbGVuZ3RoLCBkYXRhMTYpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgZGF0YTE2W2ldID0gdG9B
U0NJSUxvd2VyKG1fZGF0YTE2W2ldKTsKKyAgICAgICAgICAgIHJldHVybiBmb2xkZWQ7CisgICAg
ICAgIH0KICAgICB9CiAKLSAgICAvLyBEbyBhIGZhc3RlciBsb29wIGZvciB0aGUgY2FzZSB3aGVy
ZSBhbGwgdGhlIGNoYXJhY3RlcnMgYXJlIEFTQ0lJLgotICAgIFVDaGFyKiBkYXRhOwotICAgIFJl
ZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwg
ZGF0YSk7Ci0gICAgVUNoYXIgb3JlZCA9IDA7Ci0gICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgVUNoYXIgYyA9IG1fZGF0YTE2W2ldOwotICAgICAgICBv
cmVkIHw9IGM7Ci0gICAgICAgIGRhdGFbaV0gPSB0b0FTQ0lJTG93ZXIoYyk7Ci0gICAgfQotICAg
IGlmICghKG9yZWQgJiB+MHg3RikpCi0gICAgICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2VOb25O
dWxsKCk7CisgICAgaWYgKG1fbGVuZ3RoID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSkKKyAgICAgICAgQ1JBU0goKTsKIAotICAgIC8v
IERvIGEgc2xvd2VyIGltcGxlbWVudGF0aW9uIGZvciBjYXNlcyB0aGF0IGluY2x1ZGUgbm9uLUFT
Q0lJIGNoYXJhY3RlcnMuCisgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdW
aWV3KCp0aGlzKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKKworICAgIFVDaGFyKiBkYXRhOwor
ICAgIGF1dG8gZm9sZGVkID0gY3JlYXRlVW5pbml0aWFsaXplZEludGVybmFsTm9uRW1wdHkobV9s
ZW5ndGgsIGRhdGEpOworICAgIGludDMyX3QgbGVuZ3RoID0gbV9sZW5ndGg7CiAgICAgVUVycm9y
Q29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgaW50MzJfdCByZWFsTGVuZ3RoID0gdV9z
dHJGb2xkQ2FzZShkYXRhLCBsZW5ndGgsIG1fZGF0YTE2LCBtX2xlbmd0aCwgVV9GT0xEX0NBU0Vf
REVGQVVMVCwgJnN0YXR1cyk7CisgICAgaW50MzJfdCByZWFsTGVuZ3RoID0gdV9zdHJGb2xkQ2Fz
ZShkYXRhLCBsZW5ndGgsIHVwY29udmVydGVkQ2hhcmFjdGVycywgbGVuZ3RoLCBVX0ZPTERfQ0FT
RV9ERUZBVUxULCAmc3RhdHVzKTsKICAgICBpZiAoVV9TVUNDRVNTKHN0YXR1cykgJiYgcmVhbExl
bmd0aCA9PSBsZW5ndGgpCi0gICAgICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2VOb25OdWxsKCk7
Ci0gICAgbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVhbExlbmd0aCwgZGF0YSk7Cisg
ICAgICAgIHJldHVybiBmb2xkZWQ7CisgICAgQVNTRVJUKHJlYWxMZW5ndGggPiBsZW5ndGgpOwor
ICAgIGZvbGRlZCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWRJbnRlcm5hbE5vbkVtcHR5KHJlYWxMZW5n
dGgsIGRhdGEpOwogICAgIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKLSAgICB1X3N0ckZvbGRDYXNl
KGRhdGEsIHJlYWxMZW5ndGgsIG1fZGF0YTE2LCBtX2xlbmd0aCwgVV9GT0xEX0NBU0VfREVGQVVM
VCwgJnN0YXR1cyk7CisgICAgdV9zdHJGb2xkQ2FzZShkYXRhLCByZWFsTGVuZ3RoLCB1cGNvbnZl
cnRlZENoYXJhY3RlcnMsIGxlbmd0aCwgVV9GT0xEX0NBU0VfREVGQVVMVCwgJnN0YXR1cyk7CiAg
ICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQogICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgcmV0
dXJuIG5ld0ltcGwucmVsZWFzZU5vbk51bGwoKTsKKyAgICByZXR1cm4gZm9sZGVkOwogfQogCiB0
ZW1wbGF0ZTxTdHJpbmdJbXBsOjpDYXNlQ29udmVydFR5cGUgdHlwZSwgdHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oIGIv
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKaW5kZXggZTY4NzBiYWY5NWUyNjk0MGY5
M2NlNWNkMWFlNzdmZTdhNjkzODQ0Yi4uMDYzY2U2MzJhNDJkNGJmOTM2YjdkMzY2ZDhjZmQ5YjFk
ZTljYmQ5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKKysr
IGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKQEAgLTY4MSwxMCArNjgxLDEwIEBA
IHB1YmxpYzoKIAogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBSZWY8U3RyaW5nSW1wbD4gY29u
dmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUmVmPFN0
cmluZ0ltcGw+IGNvbnZlcnRUb0FTQ0lJVXBwZXJjYXNlKCk7Ci0gICAgV1RGX0VYUE9SVF9TVFJJ
TkdfQVBJIFJlZjxTdHJpbmdJbXBsPiBsb3dlcigpOwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQ
SSBSZWY8U3RyaW5nSW1wbD4gdXBwZXIoKTsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUmVm
PFN0cmluZ0ltcGw+IGxvd2VyKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcik7
Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJlZjxTdHJpbmdJbXBsPiB1cHBlcihjb25zdCBB
dG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpOworICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQ
SSBSZWY8U3RyaW5nSW1wbD4gY29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZSgpOworICAg
IFdURl9FWFBPUlRfU1RSSU5HX0FQSSBSZWY8U3RyaW5nSW1wbD4gY29udmVydFRvVXBwZXJjYXNl
V2l0aG91dExvY2FsZSgpOworICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBSZWY8U3RyaW5nSW1w
bD4gY29udmVydFRvTG93ZXJjYXNlV2l0aExvY2FsZShjb25zdCBBdG9taWNTdHJpbmcmIGxvY2Fs
ZUlkZW50aWZpZXIpOworICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBSZWY8U3RyaW5nSW1wbD4g
Y29udmVydFRvVXBwZXJjYXNlV2l0aExvY2FsZShjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlk
ZW50aWZpZXIpOwogCiAgICAgUmVmPFN0cmluZ0ltcGw+IGZvbGRDYXNlKCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvV1RGU3RyaW5nLmNwcAppbmRleCAxYjQzMDU2NzYyYjI0ZDJmYTMyM2IyOThhMzk3MDc0YWFh
YzJkNzIwLi5jZTM3NmUyM2EwOTU5OWZkYzU1Y2VkNWU5YjkzMDg2ODQ0YTZlYTBiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKKysrIGIvU291cmNlL1dURi93
dGYvdGV4dC9XVEZTdHJpbmcuY3BwCkBAIC0zNTEsMzIgKzM1MSwzMiBAQCBTdHJpbmcgU3RyaW5n
Ojpjb252ZXJ0VG9BU0NJSVVwcGVyY2FzZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1faW1wbC0+Y29u
dmVydFRvQVNDSUlVcHBlcmNhc2UoKTsKIH0KIAotU3RyaW5nIFN0cmluZzo6bG93ZXIoKSBjb25z
dAorU3RyaW5nIFN0cmluZzo6Y29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZSgpIGNvbnN0
CiB7CiAgICAgaWYgKCFtX2ltcGwpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1
cm4gbV9pbXBsLT5sb3dlcigpOworICAgIHJldHVybiBtX2ltcGwtPmNvbnZlcnRUb0xvd2VyY2Fz
ZVdpdGhvdXRMb2NhbGUoKTsKIH0KIAotU3RyaW5nIFN0cmluZzo6dXBwZXIoKSBjb25zdAorU3Ry
aW5nIFN0cmluZzo6Y29udmVydFRvVXBwZXJjYXNlV2l0aG91dExvY2FsZSgpIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX2ltcGwpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gbV9p
bXBsLT51cHBlcigpOworICAgIHJldHVybiBtX2ltcGwtPmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhv
dXRMb2NhbGUoKTsKIH0KIAotU3RyaW5nIFN0cmluZzo6bG93ZXIoY29uc3QgQXRvbWljU3RyaW5n
JiBsb2NhbGVJZGVudGlmaWVyKSBjb25zdAorU3RyaW5nIFN0cmluZzo6Y29udmVydFRvTG93ZXJj
YXNlV2l0aExvY2FsZShjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpIGNvbnN0
CiB7CiAgICAgaWYgKCFtX2ltcGwpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1
cm4gbV9pbXBsLT5sb3dlcihsb2NhbGVJZGVudGlmaWVyKTsKKyAgICByZXR1cm4gbV9pbXBsLT5j
b252ZXJ0VG9Mb3dlcmNhc2VXaXRoTG9jYWxlKGxvY2FsZUlkZW50aWZpZXIpOwogfQogCi1TdHJp
bmcgU3RyaW5nOjp1cHBlcihjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpIGNv
bnN0CitTdHJpbmcgU3RyaW5nOjpjb252ZXJ0VG9VcHBlcmNhc2VXaXRoTG9jYWxlKGNvbnN0IEF0
b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcikgY29uc3QKIHsKICAgICBpZiAoIW1faW1wbCkK
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBtX2ltcGwtPnVwcGVyKGxvY2Fs
ZUlkZW50aWZpZXIpOworICAgIHJldHVybiBtX2ltcGwtPmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhM
b2NhbGUobG9jYWxlSWRlbnRpZmllcik7CiB9CiAKIFN0cmluZyBTdHJpbmc6OnN0cmlwV2hpdGVT
cGFjZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5o
IGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaAppbmRleCA4OGMxM2RhZjMzOTA1ODUw
ZTAxY2IyMWNkOTJhMGIyOTZhZTczNWNhLi4zYzU1OTA4MTFkYWYyMTBkYjllM2ZjYzk2MWFlYWM0
YTFhMmYxYWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgKQEAgLTMzMSwxNiArMzMxLDEyIEBA
IHB1YmxpYzoKICAgICBTdHJpbmcgbGVmdCh1bnNpZ25lZCBsZW4pIGNvbnN0IHsgcmV0dXJuIHN1
YnN0cmluZygwLCBsZW4pOyB9CiAgICAgU3RyaW5nIHJpZ2h0KHVuc2lnbmVkIGxlbikgY29uc3Qg
eyByZXR1cm4gc3Vic3RyaW5nKGxlbmd0aCgpIC0gbGVuLCBsZW4pOyB9CiAKLSAgICAvLyBSZXR1
cm5zIGEgbG93ZXJjYXNlL3VwcGVyY2FzZSB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcuCi0gICAgLy8g
VGhlIGNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlIGlzIHVzZWZ1bCBpbiBtYW55IGNvbnRleHRzIHN1
Y2ggYXMgSFRNTCB3aGVyZSB3ZSBkb24ndAotICAgIC8vIHdhbnQgdG8gZG8gYW55IGNvbnZlcnNp
b24gZm9yIG5vbi1BU0NJSSBsZXR0ZXJzLgogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJp
bmcgY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSBjb25zdDsKLSAgICBXVEZfRVhQT1JUX1NUUklO
R19BUEkgU3RyaW5nIGxvd2VyKCkgY29uc3Q7CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0
cmluZyBjb252ZXJ0VG9BU0NJSVVwcGVyY2FzZSgpIGNvbnN0OwotICAgIFdURl9FWFBPUlRfU1RS
SU5HX0FQSSBTdHJpbmcgdXBwZXIoKSBjb25zdDsKLQotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQ
SSBTdHJpbmcgbG93ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyKSBjb25z
dDsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgU3RyaW5nIHVwcGVyKGNvbnN0IEF0b21pY1N0
cmluZyYgbG9jYWxlSWRlbnRpZmllcikgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJ
IFN0cmluZyBjb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlKCkgY29uc3Q7CisgICAgV1RG
X0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyBjb252ZXJ0VG9VcHBlcmNhc2VXaXRob3V0TG9jYWxl
KCkgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyBjb252ZXJ0VG9Mb3dl
cmNhc2VXaXRoTG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcikgY29u
c3Q7CisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyBjb252ZXJ0VG9VcHBlcmNhc2VX
aXRoTG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcikgY29uc3Q7CiAK
ICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgU3RyaW5nIHN0cmlwV2hpdGVTcGFjZSgpIGNvbnN0
OwogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJpbmcgc3RyaXBXaGl0ZVNwYWNlKElzV2hp
dGVTcGFjZUZ1bmN0aW9uUHRyKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKaW5kZXggM2M5MTA1Zjk1OTVjODExODQzY2I3
NDYzYTBiZjZiYzk5OTIxMTkxYy4uYzBkMTRlMTY1N2FlZTgzMTJiOWY3MGQ1NzU1OTdiMDM3NTY3
ZTQ5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRp
YVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRp
YVNvdXJjZS5jcHAKQEAgLTczMyw3ICs3MzMsNyBAQCBib29sIE1lZGlhU291cmNlOjppc1R5cGVT
dXBwb3J0ZWQoY29uc3QgU3RyaW5nJiB0eXBlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICAvLyBGSVhNRTogV2h5IGRvIHdlIGNvbnZlcnQgdG8gbG93ZXJjYXNlIGhlcmUsIGJ1dCBub3Qg
aW4gTWVkaWFTb3VyY2U6OmFkZFNvdXJjZUJ1ZmZlcj8KLSAgICBDb250ZW50VHlwZSBjb250ZW50
VHlwZSh0eXBlLmxvd2VyKCkpOworICAgIENvbnRlbnRUeXBlIGNvbnRlbnRUeXBlKHR5cGUuY29u
dmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CiAgICAgU3RyaW5nIGNvZGVjcyA9IGNvbnRlbnRUeXBl
LnBhcmFtZXRlcigiY29kZWNzIik7CiAKICAgICAvLyAyLiBJZiB0eXBlIGRvZXMgbm90IGNvbnRh
aW4gYSB2YWxpZCBNSU1FIHR5cGUgc3RyaW5nLCB0aGVuIHJldHVybiBmYWxzZS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmlu
ZGV4IGIwNzk4OGVlZTMwYTRmMjgyMGZkMjFhNDAxNTIzNDJiZTQyYTMwMDcuLjA2YTQzMmFhYzI5
ZGU3OTU0YTI3NGE2NGFjZjJkMTM1ZmQ3ZGI4ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtNzYxLDMxICs3NjEs
MjggQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnNlbGVjdFRleHQoQWNjZXNzaWJpbGl0
eVNlbGVjdFRleHRDcml0ZXJpYSogY3JpdGVyaWEKICAgICAgICAgYm9vbCByZXBsYWNlU2VsZWN0
aW9uID0gZmFsc2U7CiAgICAgICAgIGlmIChmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRS
YW5nZShjbG9zZXN0U3RyaW5nUmFuZ2UuZ2V0KCksIERPV05TVFJFQU0sIHRydWUpKSB7CiAgICAg
ICAgICAgICBzd2l0Y2ggKGFjdGl2aXR5KSB7Ci0gICAgICAgICAgICBjYXNlIEZpbmRBbmRDYXBp
dGFsaXplOiB7CisgICAgICAgICAgICBjYXNlIEZpbmRBbmRDYXBpdGFsaXplOgogICAgICAgICAg
ICAgICAgIHJlcGxhY2VtZW50U3RyaW5nID0gY2xvc2VzdFN0cmluZzsKICAgICAgICAgICAgICAg
ICBtYWtlQ2FwaXRhbGl6ZWQoJnJlcGxhY2VtZW50U3RyaW5nLCAwKTsKICAgICAgICAgICAgICAg
ICByZXBsYWNlU2VsZWN0aW9uID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgRmluZEFuZFVwcGVyY2FzZToKLSAgICAgICAgICAg
ICAgICByZXBsYWNlbWVudFN0cmluZyA9IGNsb3Nlc3RTdHJpbmcudXBwZXIoKTsKKyAgICAgICAg
ICAgICAgICByZXBsYWNlbWVudFN0cmluZyA9IGNsb3Nlc3RTdHJpbmcuY29udmVydFRvVXBwZXJj
YXNlV2l0aG91dExvY2FsZSgpOyAvLyBGSVhNRTogTmVlZHMgbG9jYWxlIHRvIHdvcmsgY29ycmVj
dGx5LgogICAgICAgICAgICAgICAgIHJlcGxhY2VTZWxlY3Rpb24gPSB0cnVlOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBGaW5kQW5kTG93ZXJjYXNlOgotICAgICAg
ICAgICAgICAgIHJlcGxhY2VtZW50U3RyaW5nID0gY2xvc2VzdFN0cmluZy5sb3dlcigpOworICAg
ICAgICAgICAgICAgIHJlcGxhY2VtZW50U3RyaW5nID0gY2xvc2VzdFN0cmluZy5jb252ZXJ0VG9M
b3dlcmNhc2VXaXRob3V0TG9jYWxlKCk7IC8vIEZJWE1FOiBOZWVkcyBsb2NhbGUgdG8gd29yayBj
b3JyZWN0bHkuCiAgICAgICAgICAgICAgICAgcmVwbGFjZVNlbGVjdGlvbiA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEZpbmRBbmRSZXBsYWNlQWN0aXZp
dHk6IHsKICAgICAgICAgICAgICAgICByZXBsYWNlU2VsZWN0aW9uID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBXaGVuIGFwcGx5aW5nIGZpbmQgYW5kIHJlcGxh
Y2UgYWN0aXZpdGllcywgd2Ugd2FudCB0byBtYXRjaCB0aGUgY2FwaXRhbGl6YXRpb24gb2YgdGhl
IHJlcGxhY2VkIHRleHQsCiAgICAgICAgICAgICAgICAgLy8gKHVubGVzcyB3ZSdyZSByZXBsYWNp
bmcgd2l0aCBhbiBhYmJyZXZpYXRpb24uKQotICAgICAgICAgICAgICAgIFN0cmluZyB1cHBlcmNh
c2VSZXBsYWNlbWVudFN0cmluZyA9IHJlcGxhY2VtZW50U3RyaW5nLnVwcGVyKCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGNsb3Nlc3RTdHJpbmcubGVuZ3RoKCkgPiAwICYmIHJlcGxhY2VtZW50U3Ry
aW5nLmxlbmd0aCgpID4gMiAmJiByZXBsYWNlbWVudFN0cmluZyAhPSB1cHBlcmNhc2VSZXBsYWNl
bWVudFN0cmluZykgewotICAgICAgICAgICAgICAgICAgICBpZiAoY2xvc2VzdFN0cmluZ1swXSA9
PSBjbG9zZXN0U3RyaW5nLnVwcGVyKClbMF0pCisgICAgICAgICAgICAgICAgaWYgKGNsb3Nlc3RT
dHJpbmcubGVuZ3RoKCkgPiAwICYmIHJlcGxhY2VtZW50U3RyaW5nLmxlbmd0aCgpID4gMiAmJiBy
ZXBsYWNlbWVudFN0cmluZyAhPSByZXBsYWNlbWVudFN0cmluZy5jb252ZXJ0VG9VcHBlcmNhc2VX
aXRob3V0TG9jYWxlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNsb3Nlc3RTdHJpbmdb
MF0gPT0gdV90b3VwcGVyKGNsb3Nlc3RTdHJpbmdbMF0pKQogICAgICAgICAgICAgICAgICAgICAg
ICAgbWFrZUNhcGl0YWxpemVkKCZyZXBsYWNlbWVudFN0cmluZywgMCk7CiAgICAgICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50U3RyaW5nID0g
cmVwbGFjZW1lbnRTdHJpbmcubG93ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxh
Y2VtZW50U3RyaW5nID0gcmVwbGFjZW1lbnRTdHJpbmcuY29udmVydFRvTG93ZXJjYXNlV2l0aG91
dExvY2FsZSgpOyAvLyBGSVhNRTogTmVlZHMgbG9jYWxlIHRvIHdvcmsgY29ycmVjdGx5LgogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IGYwMDBiMWYyODg1MWNkMTBhZTA2M2NkZWU4ODcxYjVi
NzEyNjFhY2EuLjM3YzZlYmJmODY5N2M0M2RlM2YwNTUwM2JhOTMxMzEwZTk5NWJlMmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNzY2LDE5ICs3NjYsMTkgQEAgdm9pZCBEb2N1bWVudDo6
aW52YWxpZGF0ZUFjY2Vzc0tleU1hcCgpCiAgICAgbV9lbGVtZW50c0J5QWNjZXNzS2V5LmNsZWFy
KCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmFkZEltYWdlRWxlbWVudEJ5TG93ZXJjYXNlZFVzZW1h
cChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBuYW1lLCBIVE1MSW1hZ2VFbGVtZW50JiBlbGVtZW50
KQordm9pZCBEb2N1bWVudDo6YWRkSW1hZ2VFbGVtZW50QnlDYXNlRm9sZGVkVXNlbWFwKGNvbnN0
IEF0b21pY1N0cmluZ0ltcGwmIG5hbWUsIEhUTUxJbWFnZUVsZW1lbnQmIGVsZW1lbnQpCiB7CiAg
ICAgcmV0dXJuIG1faW1hZ2VzQnlVc2VtYXAuYWRkKG5hbWUsIGVsZW1lbnQsICp0aGlzKTsKIH0K
IAotdm9pZCBEb2N1bWVudDo6cmVtb3ZlSW1hZ2VFbGVtZW50QnlMb3dlcmNhc2VkVXNlbWFwKGNv
bnN0IEF0b21pY1N0cmluZ0ltcGwmIG5hbWUsIEhUTUxJbWFnZUVsZW1lbnQmIGVsZW1lbnQpCit2
b2lkIERvY3VtZW50OjpyZW1vdmVJbWFnZUVsZW1lbnRCeUNhc2VGb2xkZWRVc2VtYXAoY29uc3Qg
QXRvbWljU3RyaW5nSW1wbCYgbmFtZSwgSFRNTEltYWdlRWxlbWVudCYgZWxlbWVudCkKIHsKICAg
ICByZXR1cm4gbV9pbWFnZXNCeVVzZW1hcC5yZW1vdmUobmFtZSwgZWxlbWVudCk7CiB9CiAKLUhU
TUxJbWFnZUVsZW1lbnQqIERvY3VtZW50OjppbWFnZUVsZW1lbnRCeUxvd2VyY2FzZWRVc2VtYXAo
Y29uc3QgQXRvbWljU3RyaW5nSW1wbCYgbmFtZSkgY29uc3QKK0hUTUxJbWFnZUVsZW1lbnQqIERv
Y3VtZW50OjppbWFnZUVsZW1lbnRCeUNhc2VGb2xkZWRVc2VtYXAoY29uc3QgQXRvbWljU3RyaW5n
SW1wbCYgbmFtZSkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9pbWFnZXNCeVVzZW1hcC5nZXRFbGVt
ZW50QnlMb3dlcmNhc2VkVXNlbWFwKG5hbWUsICp0aGlzKTsKKyAgICByZXR1cm4gbV9pbWFnZXNC
eVVzZW1hcC5nZXRFbGVtZW50QnlDYXNlRm9sZGVkVXNlbWFwKG5hbWUsICp0aGlzKTsKIH0KIAog
U2VsZWN0b3JRdWVyeSogRG9jdW1lbnQ6OnNlbGVjdG9yUXVlcnlGb3JTdHJpbmcoY29uc3QgU3Ry
aW5nJiBzZWxlY3RvclN0cmluZywgRXhjZXB0aW9uQ29kZSYgZWMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5o
CmluZGV4IGNiNjJmZTg3NjM3YzFjN2FkMDYwZTY5NzYwNmI3OTM0MTBjM2I2MGEuLjcyY2JiY2Nm
YTk5NGYxMDBkMzUwMmM5YmQ5NzZiZDQwZTI5MDM5YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBA
IC0zNTAsOSArMzUwLDkgQEAgcHVibGljOgogICAgIEVsZW1lbnQqIGdldEVsZW1lbnRCeUFjY2Vz
c0tleShjb25zdCBTdHJpbmcmIGtleSk7CiAgICAgdm9pZCBpbnZhbGlkYXRlQWNjZXNzS2V5TWFw
KCk7CiAKLSAgICB2b2lkIGFkZEltYWdlRWxlbWVudEJ5TG93ZXJjYXNlZFVzZW1hcChjb25zdCBB
dG9taWNTdHJpbmdJbXBsJiwgSFRNTEltYWdlRWxlbWVudCYpOwotICAgIHZvaWQgcmVtb3ZlSW1h
Z2VFbGVtZW50QnlMb3dlcmNhc2VkVXNlbWFwKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmLCBIVE1M
SW1hZ2VFbGVtZW50Jik7Ci0gICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbGVtZW50QnlMb3dl
cmNhc2VkVXNlbWFwKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmKSBjb25zdDsKKyAgICB2b2lkIGFk
ZEltYWdlRWxlbWVudEJ5Q2FzZUZvbGRlZFVzZW1hcChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiwg
SFRNTEltYWdlRWxlbWVudCYpOworICAgIHZvaWQgcmVtb3ZlSW1hZ2VFbGVtZW50QnlDYXNlRm9s
ZGVkVXNlbWFwKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmLCBIVE1MSW1hZ2VFbGVtZW50Jik7Cisg
ICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbGVtZW50QnlDYXNlRm9sZGVkVXNlbWFwKGNvbnN0
IEF0b21pY1N0cmluZ0ltcGwmKSBjb25zdDsKIAogICAgIFNlbGVjdG9yUXVlcnkqIHNlbGVjdG9y
UXVlcnlGb3JTdHJpbmcoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQg
Y2xlYXJTZWxlY3RvclF1ZXJ5Q2FjaGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3Jk
ZXJlZE1hcC5jcHAKaW5kZXggM2UzNGI0ZTA5MWNlNThiYTI3NmYwOTcyNjJiZmEzNWEzMTlhMzU2
Mi4uZGE4ZTRmMjVlNzRjNDJmZWNlOGI5ZGUyMjljYzUwMDUyNGI3Y2QxNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHAKQEAgLTE0NywxOCArMTQ3LDE4IEBAIEhU
TUxNYXBFbGVtZW50KiBEb2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeU1hcE5hbWUoY29u
c3QgQXRvbWljU3RyaW5nSW1wbCYKICAgICB9KSk7CiB9CiAKLUhUTUxNYXBFbGVtZW50KiBEb2N1
bWVudE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeUxvd2VyY2FzZWRNYXBOYW1lKGNvbnN0IEF0b21p
Y1N0cmluZ0ltcGwmIGtleSwgY29uc3QgVHJlZVNjb3BlJiBzY29wZSkgY29uc3QKK0hUTUxNYXBF
bGVtZW50KiBEb2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeUNhc2VGb2xkZWRNYXBOYW1l
KGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIGtleSwgY29uc3QgVHJlZVNjb3BlJiBzY29wZSkgY29u
c3QKIHsKICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTE1hcEVsZW1lbnQ+KGdldChrZXksIHNjb3Bl
LCBbXSAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYga2V5LCBjb25zdCBFbGVtZW50JiBlbGVtZW50
KSB7Ci0gICAgICAgIHJldHVybiBpczxIVE1MTWFwRWxlbWVudD4oZWxlbWVudCkgJiYgZG93bmNh
c3Q8SFRNTE1hcEVsZW1lbnQ+KGVsZW1lbnQpLmdldE5hbWUoKS5sb3dlcigpLmltcGwoKSA9PSAm
a2V5OworICAgICAgICByZXR1cm4gaXM8SFRNTE1hcEVsZW1lbnQ+KGVsZW1lbnQpICYmIGVxdWFs
KGRvd25jYXN0PEhUTUxNYXBFbGVtZW50PihlbGVtZW50KS5nZXROYW1lKCkuc3RyaW5nKCkuZm9s
ZENhc2UoKS5pbXBsKCksICZrZXkpOwogICAgIH0pKTsKIH0KIAotSFRNTEltYWdlRWxlbWVudCog
RG9jdW1lbnRPcmRlcmVkTWFwOjpnZXRFbGVtZW50QnlMb3dlcmNhc2VkVXNlbWFwKGNvbnN0IEF0
b21pY1N0cmluZ0ltcGwmIGtleSwgY29uc3QgVHJlZVNjb3BlJiBzY29wZSkgY29uc3QKK0hUTUxJ
bWFnZUVsZW1lbnQqIERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5Q2FzZUZvbGRlZFVz
ZW1hcChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBrZXksIGNvbnN0IFRyZWVTY29wZSYgc2NvcGUp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbWFnZUVsZW1lbnQ+KGdldChrZXks
IHNjb3BlLCBbXSAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYga2V5LCBjb25zdCBFbGVtZW50JiBl
bGVtZW50KSB7CiAgICAgICAgIC8vIEZJWE1FOiBIVE1MNSBzcGVjaWZpY2F0aW9uIHNheXMgd2Ug
c2hvdWxkIG1hdGNoIGJvdGggaW1hZ2UgYW5kIG9iamVjdCBlbGVtZW50cy4KLSAgICAgICAgcmV0
dXJuIGlzPEhUTUxJbWFnZUVsZW1lbnQ+KGVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxJbWFnZUVs
ZW1lbnQ+KGVsZW1lbnQpLm1hdGNoZXNMb3dlcmNhc2VkVXNlbWFwKGtleSk7CisgICAgICAgIHJl
dHVybiBpczxIVE1MSW1hZ2VFbGVtZW50PihlbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MSW1hZ2VF
bGVtZW50PihlbGVtZW50KS5tYXRjaGVzQ2FzZUZvbGRlZFVzZW1hcChrZXkpOwogICAgIH0pKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5oCmluZGV4IDcyMDU1NWIy
OGQzOTVlMmViNzI0YTNmYmNjMzMyMzdiZjU5NTU5MDAuLmI0OTg4Y2M3NGI1Mzc2MjY5ZTc1NTIz
MDAzMTY2MzJmMDk4NWRjODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dE9yZGVyZWRNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFw
LmgKQEAgLTYwLDggKzYwLDggQEAgcHVibGljOgogICAgIEVsZW1lbnQqIGdldEVsZW1lbnRCeUlk
KGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmLCBjb25zdCBUcmVlU2NvcGUmKSBjb25zdDsKICAgICBF
bGVtZW50KiBnZXRFbGVtZW50QnlOYW1lKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmLCBjb25zdCBU
cmVlU2NvcGUmKSBjb25zdDsKICAgICBIVE1MTWFwRWxlbWVudCogZ2V0RWxlbWVudEJ5TWFwTmFt
ZShjb25zdCBBdG9taWNTdHJpbmdJbXBsJiwgY29uc3QgVHJlZVNjb3BlJikgY29uc3Q7Ci0gICAg
SFRNTE1hcEVsZW1lbnQqIGdldEVsZW1lbnRCeUxvd2VyY2FzZWRNYXBOYW1lKGNvbnN0IEF0b21p
Y1N0cmluZ0ltcGwmLCBjb25zdCBUcmVlU2NvcGUmKSBjb25zdDsKLSAgICBIVE1MSW1hZ2VFbGVt
ZW50KiBnZXRFbGVtZW50QnlMb3dlcmNhc2VkVXNlbWFwKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwm
LCBjb25zdCBUcmVlU2NvcGUmKSBjb25zdDsKKyAgICBIVE1MTWFwRWxlbWVudCogZ2V0RWxlbWVu
dEJ5Q2FzZUZvbGRlZE1hcE5hbWUoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYsIGNvbnN0IFRyZWVT
Y29wZSYpIGNvbnN0OworICAgIEhUTUxJbWFnZUVsZW1lbnQqIGdldEVsZW1lbnRCeUNhc2VGb2xk
ZWRVc2VtYXAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYsIGNvbnN0IFRyZWVTY29wZSYpIGNvbnN0
OwogICAgIEhUTUxMYWJlbEVsZW1lbnQqIGdldEVsZW1lbnRCeUxhYmVsRm9yQXR0cmlidXRlKGNv
bnN0IEF0b21pY1N0cmluZ0ltcGwmLCBjb25zdCBUcmVlU2NvcGUmKSBjb25zdDsKICAgICBFbGVt
ZW50KiBnZXRFbGVtZW50QnlXaW5kb3dOYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nSW1wbCYs
IGNvbnN0IFRyZWVTY29wZSYpIGNvbnN0OwogICAgIEVsZW1lbnQqIGdldEVsZW1lbnRCeURvY3Vt
ZW50TmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmLCBjb25zdCBUcmVlU2NvcGUmKSBj
b25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAKaW5kZXggZDQ2YTNhNmQ4ZDAwYjZjODFlZTg3
NmUxYjI5NjFlODgxZjFlNjFjYy4uYWZmNjg3N2E0ZGIxMGNkNWQ1MmM0NTg4NjQxNTVkMzkyZDgz
YjU5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAKQEAgLTIwMSwxOCArMjAxLDE2IEBAIHZv
aWQgVHJlZVNjb3BlOjpyZW1vdmVJbWFnZU1hcChIVE1MTWFwRWxlbWVudCYgaW1hZ2VNYXApCiAK
IEhUTUxNYXBFbGVtZW50KiBUcmVlU2NvcGU6OmdldEltYWdlTWFwKGNvbnN0IFN0cmluZyYgdXJs
KSBjb25zdAogewotICAgIGlmICh1cmwuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIGlmICghbV9pbWFnZU1hcHNCeU5hbWUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIHNpemVfdCBoYXNoUG9zID0gdXJsLmZpbmQoJyMnKTsKLSAgICBTdHJpbmcgbmFtZSA9ICho
YXNoUG9zID09IG5vdEZvdW5kID8gU3RyaW5nKCkgOiB1cmwuc3Vic3RyaW5nKGhhc2hQb3MgKyAx
KSkuaW1wbCgpOworICAgIGF1dG8gaGFzaFBvc2l0aW9uID0gdXJsLmZpbmQoJyMnKTsKKyAgICBp
ZiAoaGFzaFBvc2l0aW9uID09IG5vdEZvdW5kKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICBTdHJpbmcgbmFtZSA9IHVybC5zdWJzdHJpbmcoaGFzaFBvc2l0aW9uICsgMSk7CiAgICAgaWYg
KG5hbWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAobV9yb290
Tm9kZS5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkpIHsKLSAgICAgICAgQXRvbWljU3RyaW5n
IGxvd2VyY2FzZWROYW1lID0gbmFtZS5sb3dlcigpOwotICAgICAgICByZXR1cm4gbV9pbWFnZU1h
cHNCeU5hbWUtPmdldEVsZW1lbnRCeUxvd2VyY2FzZWRNYXBOYW1lKCpsb3dlcmNhc2VkTmFtZS5p
bXBsKCksICp0aGlzKTsKLSAgICB9CisgICAgaWYgKG1fcm9vdE5vZGUuZG9jdW1lbnQoKS5pc0hU
TUxEb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gbV9pbWFnZU1hcHNCeU5hbWUtPmdldEVsZW1l
bnRCeUNhc2VGb2xkZWRNYXBOYW1lKCpBdG9taWNTdHJpbmcobmFtZS5mb2xkQ2FzZSgpKS5pbXBs
KCksICp0aGlzKTsKICAgICByZXR1cm4gbV9pbWFnZU1hcHNCeU5hbWUtPmdldEVsZW1lbnRCeU1h
cE5hbWUoKkF0b21pY1N0cmluZyhuYW1lKS5pbXBsKCksICp0aGlzKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCmluZGV4IDVmNDVlNjNjYzkz
YTQzODg4NmY1MzgwYTMxNjY3YmJhNDMwN2Y1OTUuLmJjNThkOTA3ZWI2YzY0MWQ1MzNjODcwMWRk
MDVmNDRmMzBkNDViMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2Ev
SFRNTENvbnZlcnRlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxD
b252ZXJ0ZXIubW0KQEAgLTU2LDYgKzU2LDcgQEAKICNpbXBvcnQgIk5TQXR0cmlidXRlZFN0cmlu
Z1NQSS5oIgogI2ltcG9ydCAiUkdCQ29sb3IuaCIKICNpbXBvcnQgIlJlbmRlckltYWdlLmgiCisj
aW1wb3J0ICJSZW5kZXJUZXh0LmgiCiAjaW1wb3J0ICJTb2Z0TGlua2luZy5oIgogI2ltcG9ydCAi
U3R5bGVQcm9wZXJ0aWVzLmgiCiAjaW1wb3J0ICJTdHlsZWRFbGVtZW50LmgiCkBAIC0yMjc4LDE1
ICsyMjc5LDEyIEBAIHZvaWQgSFRNTENvbnZlcnRlcjo6X3Byb2Nlc3NUZXh0KENoYXJhY3RlckRh
dGEmIGNoYXJhY3RlckRhdGEpCiAKICAgICBpZiAob3V0cHV0U3RyaW5nLmxlbmd0aCgpKSB7CiAg
ICAgICAgIFN0cmluZyB0ZXh0VHJhbnNmb3JtID0gX2NhY2hlcy0+cHJvcGVydHlWYWx1ZUZvck5v
ZGUoY2hhcmFjdGVyRGF0YSwgQ1NTUHJvcGVydHlUZXh0VHJhbnNmb3JtKTsKLSAgICAgICAgaWYg
KHRleHRUcmFuc2Zvcm0ubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIGlmICh0ZXh0VHJhbnNmb3Jt
ID09ICJjYXBpdGFsaXplIikgey8vIEZJWE1FOiBUaGlzIGlzIGV4dHJlbWVseSBpbmVmZmljaWVu
dC4KLSAgICAgICAgICAgICAgICBOU1N0cmluZyAqdGVtcG9yYXJ5U3RyaW5nID0gb3V0cHV0U3Ry
aW5nOwotICAgICAgICAgICAgICAgIG91dHB1dFN0cmluZyA9IFt0ZW1wb3JhcnlTdHJpbmcgY2Fw
aXRhbGl6ZWRTdHJpbmddOwotICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXh0VHJhbnNmb3JtID09
ICJ1cHBlcmNhc2UiKQotICAgICAgICAgICAgICAgIG91dHB1dFN0cmluZyA9IG91dHB1dFN0cmlu
Zy51cHBlcigpOwotICAgICAgICAgICAgZWxzZSBpZiAodGV4dFRyYW5zZm9ybSA9PSAibG93ZXJj
YXNlIikKLSAgICAgICAgICAgICAgICBvdXRwdXRTdHJpbmcgPSBvdXRwdXRTdHJpbmcubG93ZXIo
KTsKLSAgICAgICAgfQorICAgICAgICBpZiAodGV4dFRyYW5zZm9ybSA9PSAiY2FwaXRhbGl6ZSIp
CisgICAgICAgICAgICBtYWtlQ2FwaXRhbGl6ZWQoJm91dHB1dFN0cmluZywgMCk7IC8vIEZJWE1F
OiBOZWVkcyB0byB0YWtlIGxvY2FsZSBpbnRvIGFjY291bnQgdG8gd29yayBjb3JyZWN0bHkuCisg
ICAgICAgIGVsc2UgaWYgKHRleHRUcmFuc2Zvcm0gPT0gInVwcGVyY2FzZSIpCisgICAgICAgICAg
ICBvdXRwdXRTdHJpbmcgPSBvdXRwdXRTdHJpbmcuY29udmVydFRvVXBwZXJjYXNlV2l0aG91dExv
Y2FsZSgpOyAvLyBGSVhNRTogTmVlZHMgbG9jYWxlIHRvIHdvcmsgY29ycmVjdGx5LgorICAgICAg
ICBlbHNlIGlmICh0ZXh0VHJhbnNmb3JtID09ICJsb3dlcmNhc2UiKQorICAgICAgICAgICAgb3V0
cHV0U3RyaW5nID0gb3V0cHV0U3RyaW5nLmNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGUo
KTsgLy8gRklYTUU6IE5lZWRzIGxvY2FsZSB0byB3b3JrIGNvcnJlY3RseS4KIAogICAgICAgICBb
X2F0dHJTdHIgcmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlOnJhbmdlVG9SZXBsYWNlIHdpdGhTdHJp
bmc6b3V0cHV0U3RyaW5nXTsKICAgICAgICAgcmFuZ2VUb1JlcGxhY2UubGVuZ3RoID0gb3V0cHV0
U3RyaW5nLmxlbmd0aCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1h
Z2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAK
aW5kZXggOGRlOTU2MzBmYmJkMGVlNGVjMTRlNDlkMGE2NmYzY2NiZjA3NzBkMi4uNDg4YzRlNmFm
OGU4NTE4ZTAxM2FlMTY3MmE3YzE0ZGNjNmM0OWU3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxJbWFnZUVsZW1lbnQuY3BwCkBAIC0yMDEsMjAgKzIwMSwyMCBAQCB2b2lkIEhUTUxJbWFnZUVs
ZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0
b21pY1N0cgogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBzcmNBdHRyIHx8IG5hbWUgPT0gc3Jjc2V0
QXR0ciB8fCBuYW1lID09IHNpemVzQXR0cikKICAgICAgICAgc2VsZWN0SW1hZ2VTb3VyY2UoKTsK
ICAgICBlbHNlIGlmIChuYW1lID09IHVzZW1hcEF0dHIpIHsKLSAgICAgICAgaWYgKGluRG9jdW1l
bnQoKSAmJiAhbV9sb3dlcmNhc2VkVXNlbWFwLmlzTnVsbCgpKQotICAgICAgICAgICAgZG9jdW1l
bnQoKS5yZW1vdmVJbWFnZUVsZW1lbnRCeUxvd2VyY2FzZWRVc2VtYXAoKm1fbG93ZXJjYXNlZFVz
ZW1hcC5pbXBsKCksICp0aGlzKTsKKyAgICAgICAgaWYgKGluRG9jdW1lbnQoKSAmJiAhbV9jYXNl
Rm9sZGVkVXNlbWFwLmlzTnVsbCgpKQorICAgICAgICAgICAgZG9jdW1lbnQoKS5yZW1vdmVJbWFn
ZUVsZW1lbnRCeUNhc2VGb2xkZWRVc2VtYXAoKm1fY2FzZUZvbGRlZFVzZW1hcC5pbXBsKCksICp0
aGlzKTsKIAogICAgICAgICAvLyBUaGUgSFRNTEltYWdlRWxlbWVudCdzIHVzZU1hcCgpIHZhbHVl
IGluY2x1ZGVzIHRoZSAnIycgc3ltYm9sIGF0IHRoZSBiZWdpbm5pbmcsIHdoaWNoIGhhcyB0byBi
ZSBzdHJpcHBlZCBvZmYuCiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY2hlY2sgdGhhdCB0
aGUgZmlyc3QgY2hhcmFjdGVyIGlzICcjJy4KLSAgICAgICAgLy8gRklYTUU6IEhUTUw1IHNwZWNp
ZmljYXRpb24gc2F5cyB3ZSBzaG91bGQgc3RyaXAgYW55IGxlYWRpbmcgc3RyaW5nIGJlZm9yZSAn
IycuCi0gICAgICAgIC8vIEZJWE1FOiBIVE1MNSBzcGVjaWZpY2F0aW9uIHNheXMgd2Ugc2hvdWxk
IGlnbm9yZSB1c2VtYXAgYXR0cmlidXRlcyB3aXRob3V0ICMuCisgICAgICAgIC8vIEZJWE1FOiBI
VE1MIHNwZWNpZmljYXRpb24gc2F5cyB3ZSBzaG91bGQgc3RyaXAgYW55IGxlYWRpbmcgc3RyaW5n
IGJlZm9yZSAnIycuCisgICAgICAgIC8vIEZJWE1FOiBIVE1MIHNwZWNpZmljYXRpb24gc2F5cyB3
ZSBzaG91bGQgaWdub3JlIHVzZW1hcCBhdHRyaWJ1dGVzIHdpdGhvdXQgJyMnLgogICAgICAgICBp
ZiAodmFsdWUubGVuZ3RoKCkgPiAxKQotICAgICAgICAgICAgbV9sb3dlcmNhc2VkVXNlbWFwID0g
dmFsdWUuc3RyaW5nKCkuc3Vic3RyaW5nKDEpLmxvd2VyKCk7CisgICAgICAgICAgICBtX2Nhc2VG
b2xkZWRVc2VtYXAgPSB2YWx1ZS5zdHJpbmcoKS5zdWJzdHJpbmcoMSkuZm9sZENhc2UoKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgbV9sb3dlcmNhc2VkVXNlbWFwID0gbnVsbEF0b207Cisg
ICAgICAgICAgICBtX2Nhc2VGb2xkZWRVc2VtYXAgPSBudWxsQXRvbTsKIAotICAgICAgICBpZiAo
aW5Eb2N1bWVudCgpICYmICFtX2xvd2VyY2FzZWRVc2VtYXAuaXNOdWxsKCkpCi0gICAgICAgICAg
ICBkb2N1bWVudCgpLmFkZEltYWdlRWxlbWVudEJ5TG93ZXJjYXNlZFVzZW1hcCgqbV9sb3dlcmNh
c2VkVXNlbWFwLmltcGwoKSwgKnRoaXMpOworICAgICAgICBpZiAoaW5Eb2N1bWVudCgpICYmICFt
X2Nhc2VGb2xkZWRVc2VtYXAuaXNOdWxsKCkpCisgICAgICAgICAgICBkb2N1bWVudCgpLmFkZElt
YWdlRWxlbWVudEJ5Q2FzZUZvbGRlZFVzZW1hcCgqbV9jYXNlRm9sZGVkVXNlbWFwLmltcGwoKSwg
KnRoaXMpOwogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBjb21wb3NpdGVBdHRyKSB7CiAgICAgICAg
IC8vIEZJWE1FOiBpbWFnZXMgZG9uJ3Qgc3VwcG9ydCBibGVuZCBtb2RlcyBpbiB0aGVpciBjb21w
b3NpdGluZyBhdHRyaWJ1dGUuCiAgICAgICAgIEJsZW5kTW9kZSBibGVuZE9wID0gQmxlbmRNb2Rl
Tm9ybWFsOwpAQCAtMzEyLDggKzMxMiw4IEBAIE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJl
cXVlc3QgSFRNTEltYWdlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmCiAgICAg
Ly8gaW4gY2FsbGJhY2tzIGJhY2sgdG8gdGhpcyBub2RlLgogICAgIE5vZGU6Okluc2VydGlvbk5v
dGlmaWNhdGlvblJlcXVlc3QgaW5zZXJ0Tm90aWZpY2F0aW9uUmVxdWVzdCA9IEhUTUxFbGVtZW50
OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uUG9pbnQpOwogCi0gICAgaWYgKGluc2VydGlvblBvaW50
LmluRG9jdW1lbnQoKSAmJiAhbV9sb3dlcmNhc2VkVXNlbWFwLmlzTnVsbCgpKQotICAgICAgICBk
b2N1bWVudCgpLmFkZEltYWdlRWxlbWVudEJ5TG93ZXJjYXNlZFVzZW1hcCgqbV9sb3dlcmNhc2Vk
VXNlbWFwLmltcGwoKSwgKnRoaXMpOworICAgIGlmIChpbnNlcnRpb25Qb2ludC5pbkRvY3VtZW50
KCkgJiYgIW1fY2FzZUZvbGRlZFVzZW1hcC5pc051bGwoKSkKKyAgICAgICAgZG9jdW1lbnQoKS5h
ZGRJbWFnZUVsZW1lbnRCeUNhc2VGb2xkZWRVc2VtYXAoKm1fY2FzZUZvbGRlZFVzZW1hcC5pbXBs
KCksICp0aGlzKTsKIAogICAgIGlmIChpczxIVE1MUGljdHVyZUVsZW1lbnQ+KHBhcmVudE5vZGUo
KSkpIHsKICAgICAgICAgc2V0UGljdHVyZUVsZW1lbnQoJmRvd25jYXN0PEhUTUxQaWN0dXJlRWxl
bWVudD4oKnBhcmVudE5vZGUoKSkpOwpAQCAtMzMzLDggKzMzMyw4IEBAIHZvaWQgSFRNTEltYWdl
RWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQpCiAgICAg
aWYgKG1fZm9ybSkKICAgICAgICAgbV9mb3JtLT5yZW1vdmVJbWdFbGVtZW50KHRoaXMpOwogCi0g
ICAgaWYgKGluc2VydGlvblBvaW50LmluRG9jdW1lbnQoKSAmJiAhbV9sb3dlcmNhc2VkVXNlbWFw
LmlzTnVsbCgpKQotICAgICAgICBkb2N1bWVudCgpLnJlbW92ZUltYWdlRWxlbWVudEJ5TG93ZXJj
YXNlZFVzZW1hcCgqbV9sb3dlcmNhc2VkVXNlbWFwLmltcGwoKSwgKnRoaXMpOworICAgIGlmIChp
bnNlcnRpb25Qb2ludC5pbkRvY3VtZW50KCkgJiYgIW1fY2FzZUZvbGRlZFVzZW1hcC5pc051bGwo
KSkKKyAgICAgICAgZG9jdW1lbnQoKS5yZW1vdmVJbWFnZUVsZW1lbnRCeUNhc2VGb2xkZWRVc2Vt
YXAoKm1fY2FzZUZvbGRlZFVzZW1hcC5pbXBsKCksICp0aGlzKTsKICAgICAKICAgICBpZiAoaXM8
SFRNTFBpY3R1cmVFbGVtZW50PihwYXJlbnROb2RlKCkpKQogICAgICAgICBzZXRQaWN0dXJlRWxl
bWVudChudWxscHRyKTsKQEAgLTQ3NCwxMCArNDc0LDEwIEBAIFN0cmluZyBIVE1MSW1hZ2VFbGVt
ZW50Ojpjb21wbGV0ZVVSTHNJbkF0dHJpYnV0ZVZhbHVlKGNvbnN0IFVSTCYgYmFzZSwgY29uc3Qg
QXR0CiAgICAgcmV0dXJuIEhUTUxFbGVtZW50Ojpjb21wbGV0ZVVSTHNJbkF0dHJpYnV0ZVZhbHVl
KGJhc2UsIGF0dHJpYnV0ZSk7CiB9CiAKLWJvb2wgSFRNTEltYWdlRWxlbWVudDo6bWF0Y2hlc0xv
d2VyY2FzZWRVc2VtYXAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYgbmFtZSkgY29uc3QKK2Jvb2wg
SFRNTEltYWdlRWxlbWVudDo6bWF0Y2hlc0Nhc2VGb2xkZWRVc2VtYXAoY29uc3QgQXRvbWljU3Ry
aW5nSW1wbCYgbmFtZSkgY29uc3QKIHsKLSAgICBBU1NFUlQoU3RyaW5nKCZjb25zdF9jYXN0PEF0
b21pY1N0cmluZ0ltcGwmPihuYW1lKSkubG93ZXIoKS5pbXBsKCkgPT0gJm5hbWUpOwotICAgIHJl
dHVybiBtX2xvd2VyY2FzZWRVc2VtYXAuaW1wbCgpID09ICZuYW1lOworICAgIEFTU0VSVChTdHJp
bmcoJmNvbnN0X2Nhc3Q8QXRvbWljU3RyaW5nSW1wbCY+KG5hbWUpKS5mb2xkQ2FzZSgpLmltcGwo
KSA9PSAmbmFtZSk7CisgICAgcmV0dXJuIG1fY2FzZUZvbGRlZFVzZW1hcC5pbXBsKCkgPT0gJm5h
bWU7CiB9CiAKIGNvbnN0IEF0b21pY1N0cmluZyYgSFRNTEltYWdlRWxlbWVudDo6YWx0KCkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgKaW5kZXggNDQ3YjYyNDNhZDY1
NzU4NzMxNTU0N2EwZDkwNDM3ODU4NmIzYWM3NC4uNjc5MzFiNWQ2MGI1Zjc4MDEzNWY1ZTg4YmVm
NzUwYjJhMzkxMzY3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VF
bGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgKQEAg
LTYwLDcgKzYwLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRMb2FkTWFudWFsbHkoYm9vbCBs
b2FkTWFudWFsbHkpIHsgbV9pbWFnZUxvYWRlci5zZXRMb2FkTWFudWFsbHkobG9hZE1hbnVhbGx5
KTsgfQogCi0gICAgYm9vbCBtYXRjaGVzTG93ZXJjYXNlZFVzZW1hcChjb25zdCBBdG9taWNTdHJp
bmdJbXBsJikgY29uc3Q7CisgICAgYm9vbCBtYXRjaGVzQ2FzZUZvbGRlZFVzZW1hcChjb25zdCBB
dG9taWNTdHJpbmdJbXBsJikgY29uc3Q7CiAKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFsdCgp
IGNvbnN0OwogCkBAIC0xMzQsNyArMTM0LDcgQEAgcHJpdmF0ZToKICAgICBDb21wb3NpdGVPcGVy
YXRvciBtX2NvbXBvc2l0ZU9wZXJhdG9yOwogICAgIEF0b21pY1N0cmluZyBtX2Jlc3RGaXRJbWFn
ZVVSTDsKICAgICBBdG9taWNTdHJpbmcgbV9jdXJyZW50U3JjOwotICAgIEF0b21pY1N0cmluZyBt
X2xvd2VyY2FzZWRVc2VtYXA7CisgICAgQXRvbWljU3RyaW5nIG1fY2FzZUZvbGRlZFVzZW1hcDsK
ICAgICBmbG9hdCBtX2ltYWdlRGV2aWNlUGl4ZWxSYXRpbzsKICAgICBib29sIG1fZXhwZXJpbWVu
dGFsSW1hZ2VNZW51RW5hYmxlZDsKICAgICBib29sIG1faGFkTmFtZUJlZm9yZUF0dHJpYnV0ZUNo
YW5nZWQgeyBmYWxzZSB9OyAvLyBGSVhNRTogV2Ugb25seSBuZWVkIHRoaXMgYmVjYXVzZSBwYXJz
ZUF0dHJpYnV0ZSgpIGNhbid0IHNlZSB0aGUgb2xkIHZhbHVlLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNYXBFbGVtZW50LmNwcAppbmRleCAzZWU2MWJhYTAwMWUyMzRhNGIzM2Y3ZDE1OGJjNjg2OTky
YzQ2Y2Y4Li5lY2M4NzUyOTZiNTNlMzBlMDI5MTRhYjVhZGE5NWRjM2RhNDI1Njk4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcApAQCAtNzgsMTAgKzc4LDggQEAgYm9vbCBI
VE1MTWFwRWxlbWVudDo6bWFwTW91c2VFdmVudChMYXlvdXRQb2ludCBsb2NhdGlvbiwgY29uc3Qg
TGF5b3V0U2l6ZSYgc2l6ZSwKIEhUTUxJbWFnZUVsZW1lbnQqIEhUTUxNYXBFbGVtZW50OjppbWFn
ZUVsZW1lbnQoKQogewogICAgIGlmIChtX25hbWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
MDsKLSAgICBBdG9taWNTdHJpbmcgbG93ZXJjYXNlZE5hbWUgPSBtX25hbWUubG93ZXIoKTsKLSAg
ICBBU1NFUlQobG93ZXJjYXNlZE5hbWUuaW1wbCgpKTsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS5p
bWFnZUVsZW1lbnRCeUxvd2VyY2FzZWRVc2VtYXAoKmxvd2VyY2FzZWROYW1lLmltcGwoKSk7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBkb2N1bWVudCgpLmltYWdlRWxlbWVu
dEJ5Q2FzZUZvbGRlZFVzZW1hcCgqQXRvbWljU3RyaW5nKG1fbmFtZS5zdHJpbmcoKS5mb2xkQ2Fz
ZSgpKS5pbXBsKCkpOwogfQogCiB2b2lkIEhUTUxNYXBFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQpAQCAt
MTAxLDcgKzk5LDcgQEAgdm9pZCBIVE1MTWFwRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW4KICAgICAgICAgU3RyaW5nIG1h
cE5hbWUgPSB2YWx1ZTsKICAgICAgICAgaWYgKG1hcE5hbWVbMF0gPT0gJyMnKQogICAgICAgICAg
ICAgbWFwTmFtZSA9IG1hcE5hbWUuc3Vic3RyaW5nKDEpOwotICAgICAgICBtX25hbWUgPSBkb2N1
bWVudCgpLmlzSFRNTERvY3VtZW50KCkgPyBtYXBOYW1lLmxvd2VyKCkgOiBtYXBOYW1lOworICAg
ICAgICBtX25hbWUgPSBkb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkgPyBtYXBOYW1lLmZvbGRD
YXNlKCkgOiBtYXBOYW1lOwogICAgICAgICBpZiAoaW5Eb2N1bWVudCgpKQogICAgICAgICAgICAg
dHJlZVNjb3BlKCkuYWRkSW1hZ2VNYXAoKnRoaXMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9MYW5ndWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MYW5n
dWFnZS5jcHAKaW5kZXggNjU1NzhkMGVjZGU2NGUyZmYwNTc1ZTgyYzQ4ZTQ1NTEyNmE4MzljZC4u
YThhZThlM2M4MDMyZmM0ZDRjZDk1MThjYmJhNWNjMjlmNjZmOTdkMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGFuZ3VhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0xhbmd1YWdlLmNwcApAQCAtOTksNyArOTksNyBAQCBWZWN0b3I8U3RyaW5nPiB1c2Vy
UHJlZmVycmVkTGFuZ3VhZ2VzKCkKIAogc3RhdGljIFN0cmluZyBjYW5vbmljYWxMYW5ndWFnZUlk
ZW50aWZpZXIoY29uc3QgU3RyaW5nJiBsYW5ndWFnZUNvZGUpCiB7Ci0gICAgU3RyaW5nIGxvd2Vy
Y2FzZUxhbmd1YWdlQ29kZSA9IGxhbmd1YWdlQ29kZS5sb3dlcigpOworICAgIFN0cmluZyBsb3dl
cmNhc2VMYW5ndWFnZUNvZGUgPSBsYW5ndWFnZUNvZGUuY29udmVydFRvQVNDSUlMb3dlcmNhc2Uo
KTsKICAgICAKICAgICBpZiAobG93ZXJjYXNlTGFuZ3VhZ2VDb2RlLmxlbmd0aCgpID49IDMgJiYg
bG93ZXJjYXNlTGFuZ3VhZ2VDb2RlWzJdID09ICdfJykKICAgICAgICAgbG93ZXJjYXNlTGFuZ3Vh
Z2VDb2RlLnJlcGxhY2UoMiwgMSwgIi0iKTsKQEAgLTEwOSw3ICsxMDksNyBAQCBzdGF0aWMgU3Ry
aW5nIGNhbm9uaWNhbExhbmd1YWdlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGxhbmd1YWdlQ29k
ZSkKIAogc2l6ZV90IGluZGV4T2ZCZXN0TWF0Y2hpbmdMYW5ndWFnZUluTGlzdChjb25zdCBTdHJp
bmcmIGxhbmd1YWdlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZ2VMaXN0LCBib29sJiBl
eGFjdE1hdGNoKQogewotICAgIFN0cmluZyBsb3dlcmNhc2VMYW5ndWFnZSA9IGxhbmd1YWdlLmxv
d2VyKCk7CisgICAgU3RyaW5nIGxvd2VyY2FzZUxhbmd1YWdlID0gbGFuZ3VhZ2UuY29udmVydFRv
QVNDSUlMb3dlcmNhc2UoKTsKICAgICBTdHJpbmcgbGFuZ3VhZ2VXaXRob3V0TG9jYWxlTWF0Y2g7
CiAgICAgU3RyaW5nIGxhbmd1YWdlTWF0Y2hCdXROb3RMb2NhbGU7CiAgICAgc2l6ZV90IGxhbmd1
YWdlV2l0aG91dExvY2FsZU1hdGNoSW5kZXggPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwCmlu
ZGV4IGZkZThlMDY5MzBkODcxMTRhMGRiYzg3YTRhZDVhMDNiMWZjYzU0OTAuLjViMWU3MmVmN2U1
YzcxOWM3ZTg5OGVlMzk2NTVhYTJiMjRmNWY3NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5jcHAK
QEAgLTQ4Miw3ICs0ODIsNyBAQCBib29sIEhhcmZCdXp6U2hhcGVyOjpzaGFwZUhhcmZCdXp6UnVu
cyhib29sIHNob3VsZFNldERpcmVjdGlvbikKICAgICAgICAgaGJfYnVmZmVyX2FkZF91dGYxNiho
YXJmQnV6ekJ1ZmZlci5nZXQoKSwgJnByZUNvbnRleHQsIDEsIDEsIDApOwogCiAgICAgICAgIGlm
IChtX2ZvbnQtPmlzU21hbGxDYXBzKCkgJiYgdV9pc2xvd2VyKG1fbm9ybWFsaXplZEJ1ZmZlcltj
dXJyZW50UnVuLT5zdGFydEluZGV4KCldKSkgewotICAgICAgICAgICAgU3RyaW5nIHVwcGVyVGV4
dCA9IFN0cmluZyhtX25vcm1hbGl6ZWRCdWZmZXIuZ2V0KCkgKyBjdXJyZW50UnVuLT5zdGFydElu
ZGV4KCksIGN1cnJlbnRSdW4tPm51bUNoYXJhY3RlcnMoKSkudXBwZXIoKTsKKyAgICAgICAgICAg
IFN0cmluZyB1cHBlclRleHQgPSBTdHJpbmcobV9ub3JtYWxpemVkQnVmZmVyLmdldCgpICsgY3Vy
cmVudFJ1bi0+c3RhcnRJbmRleCgpLCBjdXJyZW50UnVuLT5udW1DaGFyYWN0ZXJzKCkpLmNvbnZl
cnRUb1VwcGVyY2FzZVdpdGhvdXRMb2NhbGUoKTsKICAgICAgICAgICAgIGN1cnJlbnRGb250RGF0
YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHVwcGVyVGV4dFswXSwgZmFsc2UsIFNt
YWxsQ2Fwc1ZhcmlhbnQpLmZvbnQ7CiAgICAgICAgICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVy
cyA9IFN0cmluZ1ZpZXcodXBwZXJUZXh0KS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKICAgICAg
ICAgICAgIGhiX2J1ZmZlcl9hZGRfdXRmMTYoaGFyZkJ1enpCdWZmZXIuZ2V0KCksIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDE2X3QqPihjaGFyYWN0ZXJzKSwgY3VycmVudFJ1bi0+bnVtQ2hh
cmFjdGVycygpLCAwLCBjdXJyZW50UnVuLT5udW1DaGFyYWN0ZXJzKCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNwcAppbmRleCAxZDBlOWQwNjQz
Nzg2NGEyNDYyMTdiNGVmMjAwMzJkZmYyY2NkMjhmLi5iMjBjZmMzZDIyNzc3ZjY3NjZkNGNjM2Yx
NTgwYWVkN2Q0YWRlMWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0hUVFBQYXJzZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0hUVFBQYXJzZXJzLmNwcApAQCAtNDU2LDcgKzQ1Niw3IEBAIENvbnRlbnRTZWN1cml0eVBvbGlj
eTo6UmVmbGVjdGVkWFNTRGlzcG9zaXRpb24gcGFyc2VYU1NQcm90ZWN0aW9uSGVhZGVyKGNvbnN0
IFN0CiAjaWYgRU5BQkxFKE5PU05JRkYpCiBDb250ZW50VHlwZU9wdGlvbnNEaXNwb3NpdGlvbiBw
YXJzZUNvbnRlbnRUeXBlT3B0aW9uc0hlYWRlcihjb25zdCBTdHJpbmcmIGhlYWRlcikKIHsKLSAg
ICBpZiAoaGVhZGVyLnN0cmlwV2hpdGVTcGFjZSgpLmxvd2VyKCkgPT0gIm5vc25pZmYiKQorICAg
IGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShoZWFkZXIuc3RyaXBXaGl0ZVNwYWNl
KCksICJub3NuaWZmIikpCiAgICAgICAgIHJldHVybiBDb250ZW50VHlwZU9wdGlvbnNOb3NuaWZm
OwogICAgIHJldHVybiBDb250ZW50VHlwZU9wdGlvbnNOb25lOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvTUlNRUhlYWRlci5jcHAKaW5kZXggNTBlZWZiZDlhMTQyM2Uy
NjEyZjg1MGFiMDM1MDkwNTE4MGYyODI2MS4uM2E1OThjYzU4YmI2OTBjMGM2MzAxOWJjN2M4Zjlh
ODhmYjhjYTY4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9N
SU1FSGVhZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL01JTUVI
ZWFkZXIuY3BwCkBAIC03MCw3ICs3MCw3IEBAIHN0YXRpYyBLZXlWYWx1ZU1hcCByZXRyaWV2ZUtl
eVZhbHVlUGFpcnMoV2ViQ29yZTo6U2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIqIGJ1ZmZlCiAgICAg
ICAgICAgICAvLyBUaGlzIGlzIG5vdCBhIGtleSB2YWx1ZSBwYWlyLCBpZ25vcmUuCiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBrZXkgPSBsaW5lLnN1YnN0cmluZygw
LCBzZW1pQ29sb25JbmRleCkubG93ZXIoKS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICAgICAga2V5
ID0gbGluZS5zdWJzdHJpbmcoMCwgc2VtaUNvbG9uSW5kZXgpLmNvbnZlcnRUb0FTQ0lJTG93ZXJj
YXNlKCkuc3RyaXBXaGl0ZVNwYWNlKCk7CiAgICAgICAgIHZhbHVlLmFwcGVuZChsaW5lLnN1YnN0
cmluZyhzZW1pQ29sb25JbmRleCArIDEpKTsKICAgICB9CiAgICAgLy8gU3RvcmUgdGhlIGxhc3Qg
cHJvcGVydHkgaWYgdGhlcmUgaXMgb25lLgpAQCAtMTE0LDE0ICsxMTQsMTQgQEAgUGFzc1JlZlB0
cjxNSU1FSGVhZGVyPiBNSU1FSGVhZGVyOjpwYXJzZUhlYWRlcihTaGFyZWRCdWZmZXJDaHVua1Jl
YWRlciogYnVmZmVyKQogCiBNSU1FSGVhZGVyOjpFbmNvZGluZyBNSU1FSGVhZGVyOjpwYXJzZUNv
bnRlbnRUcmFuc2ZlckVuY29kaW5nKGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKLSAgICBTdHJpbmcg
ZW5jb2RpbmcgPSB0ZXh0LnN0cmlwV2hpdGVTcGFjZSgpLmxvd2VyKCk7Ci0gICAgaWYgKGVuY29k
aW5nID09ICJiYXNlNjQiKQorICAgIFN0cmluZyBlbmNvZGluZyA9IHRleHQuc3RyaXBXaGl0ZVNw
YWNlKCk7CisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGVuY29kaW5nLCAi
YmFzZTY0IikpCiAgICAgICAgIHJldHVybiBCYXNlNjQ7Ci0gICAgaWYgKGVuY29kaW5nID09ICJx
dW90ZWQtcHJpbnRhYmxlIikKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
ZW5jb2RpbmcsICJxdW90ZWQtcHJpbnRhYmxlIikpCiAgICAgICAgIHJldHVybiBRdW90ZWRQcmlu
dGFibGU7Ci0gICAgaWYgKGVuY29kaW5nID09ICI3Yml0IikKKyAgICBpZiAoZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UoZW5jb2RpbmcsICI3Yml0IikpCiAgICAgICAgIHJldHVybiBTZXZl
bkJpdDsKLSAgICBpZiAoZW5jb2RpbmcgPT0gImJpbmFyeSIpCisgICAgaWYgKGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKGVuY29kaW5nLCAiYmluYXJ5IikpCiAgICAgICAgIHJldHVybiBC
aW5hcnk7CiAgICAgTE9HX0VSUk9SKCJVbmtub3duIGVuY29kaW5nICclcycgZm91bmQgaW4gTUlN
RSBoZWFkZXIuIiwgdGV4dC5hc2NpaSgpLmRhdGEoKSk7CiAgICAgcmV0dXJuIFVua25vd247CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFu
ZGxlQ0ZOZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJj
ZUhhbmRsZUNGTmV0LmNwcAppbmRleCA1MTM5MGY2ZWQ3MDhlODVlMzlkYzQ2NDU5NmYzZjZkOWVl
ZWI2Y2QxLi5jOTVhNjU4MjNhYjk3MjY3OWMxNjliNmJkMGI4NzUxOGM2MTc4ZWQwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZO
ZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VI
YW5kbGVDRk5ldC5jcHAKQEAgLTgyLDE2ICs4MiwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICNpZiBVU0UoQ0ZORVRXT1JLKQogCi1zdGF0aWMgSGFzaFNldDxTdHJpbmc+JiBhbGxvd3NBbnlI
VFRQU0NlcnRpZmljYXRlSG9zdHMoKQorc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJ
bnNlbnNpdGl2ZUhhc2g+JiBhbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlSG9zdHMoKQogewotICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZz4+IGhvc3RzOworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNo
Pj4gaG9zdHM7CiAgICAgcmV0dXJuIGhvc3RzOwogfQogCi1zdGF0aWMgSGFzaE1hcDxTdHJpbmcs
IFJldGFpblB0cjxDRkRhdGFSZWY+PiYgY2xpZW50Q2VydHMoKQorc3RhdGljIEhhc2hNYXA8U3Ry
aW5nLCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiwgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgY2xp
ZW50Q2VydGlmaWNhdGVzKCkKIHsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZXRhaW5Q
dHI8Q0ZEYXRhUmVmPj4gQ2VydHNNYXA7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENlcnRz
TWFwPiBjZXJ0czsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxTdHJpbmcsIFJl
dGFpblB0cjxDRkRhdGFSZWY+LCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+PiBjZXJ0czsKICAg
ICByZXR1cm4gY2VydHM7CiB9CiAKQEAgLTE2OSw3ICsxNjgsNyBAQCB2b2lkIFJlc291cmNlSGFu
ZGxlOjpjcmVhdGVDRlVSTENvbm5lY3Rpb24oYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFn
ZSwgYm9vbAogI2lmIFBMQVRGT1JNKElPUykKICAgICBzc2xQcm9wcyA9IGFkb3B0Q0YoUmVzb3Vy
Y2VIYW5kbGU6OmNyZWF0ZVNTTFByb3BlcnRpZXNGcm9tTlNVUkxSZXF1ZXN0KGZpcnN0UmVxdWVz
dCgpKSk7CiAjZWxzZQotICAgIGlmIChhbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlSG9zdHMoKS5j
b250YWlucyhmaXJzdFJlcXVlc3QoKS51cmwoKS5ob3N0KCkubG93ZXIoKSkpIHsKKyAgICBpZiAo
YWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3RzKCkuY29udGFpbnMoZmlyc3RSZXF1ZXN0KCku
dXJsKCkuaG9zdCgpKSkgewogICAgICAgICBzc2xQcm9wcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5
Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURpY3Rpb25hcnlL
ZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CiAgICAgICAg
IENGRGljdGlvbmFyeUFkZFZhbHVlKHNzbFByb3BzLmdldCgpLCBrQ0ZTdHJlYW1TU0xBbGxvd3NB
bnlSb290LCBrQ0ZCb29sZWFuVHJ1ZSk7CiAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHNz
bFByb3BzLmdldCgpLCBrQ0ZTdHJlYW1TU0xBbGxvd3NFeHBpcmVkUm9vdHMsIGtDRkJvb2xlYW5U
cnVlKTsKQEAgLTE3Nyw4ICsxNzYsOCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpjcmVhdGVDRlVS
TENvbm5lY3Rpb24oYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwgYm9vbAogICAgICAg
ICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShzc2xQcm9wcy5nZXQoKSwga0NGU3RyZWFtU1NMVmFsaWRh
dGVzQ2VydGlmaWNhdGVDaGFpbiwga0NGQm9vbGVhbkZhbHNlKTsKICAgICB9CiAKLSAgICBIYXNo
TWFwPFN0cmluZywgUmV0YWluUHRyPENGRGF0YVJlZj4+OjppdGVyYXRvciBjbGllbnRDZXJ0ID0g
Y2xpZW50Q2VydHMoKS5maW5kKGZpcnN0UmVxdWVzdCgpLnVybCgpLmhvc3QoKS5sb3dlcigpKTsK
LSAgICBpZiAoY2xpZW50Q2VydCAhPSBjbGllbnRDZXJ0cygpLmVuZCgpKSB7CisgICAgYXV0byBj
bGllbnRDZXJ0ID0gY2xpZW50Q2VydGlmaWNhdGVzKCkuZmluZChmaXJzdFJlcXVlc3QoKS51cmwo
KS5ob3N0KCkpOworICAgIGlmIChjbGllbnRDZXJ0ICE9IGNsaWVudENlcnRpZmljYXRlcygpLmVu
ZCgpKSB7CiAgICAgICAgIGlmICghc3NsUHJvcHMpCiAgICAgICAgICAgICBzc2xQcm9wcyA9IGFk
b3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAm
a0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2Fs
bEJhY2tzKSk7CiAjaWYgUExBVEZPUk0oV0lOKQpAQCAtNjAzLDEyICs2MDIsMTIgQEAgdm9pZCBS
ZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtp
bmdDb250ZXh0KiBjb250ZXgKIAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0SG9zdEFsbG93c0Fu
eUhUVFBTQ2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJiBob3N0KQogewotICAgIGFsbG93c0FueUhU
VFBTQ2VydGlmaWNhdGVIb3N0cygpLmFkZChob3N0Lmxvd2VyKCkpOworICAgIGFsbG93c0FueUhU
VFBTQ2VydGlmaWNhdGVIb3N0cygpLmFkZChob3N0KTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRs
ZTo6c2V0Q2xpZW50Q2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJiBob3N0LCBDRkRhdGFSZWYgY2Vy
dCkKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldENsaWVudENlcnRpZmljYXRlKGNvbnN0IFN0cmlu
ZyYgaG9zdCwgQ0ZEYXRhUmVmIGNlcnRpZmljYXRlKQogewotICAgIGNsaWVudENlcnRzKCkuc2V0
KGhvc3QubG93ZXIoKSwgY2VydCk7CisgICAgY2xpZW50Q2VydGlmaWNhdGVzKCkuc2V0KGhvc3Qs
IGNlcnRpZmljYXRlKTsKIH0KIAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1TZXREZWZl
cnNMb2FkaW5nKGJvb2wgZGVmZXJzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCmluZGV4IGI5ZDZkZDRiYTc4MGVlMzU3
NWU5NDgxOTJmZDk4MmI0NDdlNWYyOTYuLmIyNzZjYTc1ZTRmYTgxYmQ4ZjBjYjhlYTMzMTllY2Vj
NGExYzhkZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9Db29raWVKYXJDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ29va2llSmFyQ3VybC5jcHAKQEAgLTE5NSwyMCArMTk1LDIwIEBAIHN0YXRpYyBTdHJp
bmcgZ2V0TmV0c2NhcGVDb29raWVGb3JtYXQoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYg
dmFsdWUpCiAgICAgICAgIGlmIChhdHRyaWJ1dGUtPmNvbnRhaW5zKCc9JykpIHsKICAgICAgICAg
ICAgIFZlY3RvcjxTdHJpbmc+IGtleVZhbHVlUGFpcjsKICAgICAgICAgICAgIGF0dHJpYnV0ZS0+
c3BsaXQoJz0nLCB0cnVlLCBrZXlWYWx1ZVBhaXIpOwotICAgICAgICAgICAgU3RyaW5nIGtleSA9
IGtleVZhbHVlUGFpclswXS5zdHJpcFdoaXRlU3BhY2UoKS5sb3dlcigpOworICAgICAgICAgICAg
U3RyaW5nIGtleSA9IGtleVZhbHVlUGFpclswXS5zdHJpcFdoaXRlU3BhY2UoKTsKICAgICAgICAg
ICAgIFN0cmluZyB2YWwgPSBrZXlWYWx1ZVBhaXJbMV0uc3RyaXBXaGl0ZVNwYWNlKCk7Ci0gICAg
ICAgICAgICBpZiAoa2V5ID09ICJleHBpcmVzIikgeworICAgICAgICAgICAgaWYgKGVxdWFsTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGtleSwgImV4cGlyZXMiKSkgewogICAgICAgICAgICAgICAg
IENTdHJpbmcgZGF0ZVN0cihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWwuY2hhcmFj
dGVyczgoKSksIHZhbC5sZW5ndGgoKSk7CiAgICAgICAgICAgICAgICAgZXhwaXJlcyA9IFdURjo6
cGFyc2VEYXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFjdGVycyhkYXRlU3RyLmRhdGEoKSkgLyBX
VEY6Om1zUGVyU2Vjb25kOwotICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gIm1heC1hZ2Ui
KQorICAgICAgICAgICAgfSBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShr
ZXksICJtYXgtYWdlIikpCiAgICAgICAgICAgICAgICAgZXhwaXJlcyA9IHRpbWUoMCkgKyB2YWwu
dG9JbnQoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZG9tYWluIikgCisgICAgICAg
ICAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShrZXksICJkb21haW4i
KSkKICAgICAgICAgICAgICAgICBkb21haW4gPSB2YWw7Ci0gICAgICAgICAgICBlbHNlIGlmIChr
ZXkgPT0gInBhdGgiKSAKKyAgICAgICAgICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKGtleSwgInBhdGgiKSkKICAgICAgICAgICAgICAgICBwYXRoID0gdmFsOwogICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgU3RyaW5nIGtleSA9IGF0dHJpYnV0ZS0+c3RyaXBX
aGl0ZVNwYWNlKCkubG93ZXIoKTsKLSAgICAgICAgICAgIGlmIChrZXkgPT0gInNlY3VyZSIpCisg
ICAgICAgICAgICBTdHJpbmcga2V5ID0gYXR0cmlidXRlLT5zdHJpcFdoaXRlU3BhY2UoKTsKKyAg
ICAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShrZXksICJzZWN1cmUi
KSkKICAgICAgICAgICAgICAgICBzZWN1cmUgPSAiVFJVRSI7CiAgICAgICAgIH0KICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvTXVsdGlwYXJ0
SGFuZGxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9NdWx0aXBh
cnRIYW5kbGUuY3BwCmluZGV4IDg5N2Y5NWMxOTBhNTQxNjViZDk1NDc5YzQ1NGUzOTQ2YmVlZjBj
YmEuLjkxMTFmYTBjZTQzMDg5N2QxYTFkNWY3NzdmZTE3NGRhM2JkNTI4NmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9NdWx0aXBhcnRIYW5kbGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9NdWx0aXBhcnRIYW5k
bGUuY3BwCkBAIC0zNDYsNyArMzQ2LDcgQEAgdm9pZCBNdWx0aXBhcnRIYW5kbGU6OmRpZFJlY2Vp
dmVSZXNwb25zZSgpCiAgICAgICAgIFN0cmluZyBjb250ZW50VHlwZSA9IG1faGVhZGVycy5nZXQo
SFRUUEhlYWRlck5hbWU6OkNvbnRlbnRUeXBlKTsKICAgICAgICAgU3RyaW5nIG1pbWVUeXBlID0g
ZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZShjb250ZW50VHlwZSk7CiAKLSAgICAgICAgcmVz
cG9uc2UtPnNldE1pbWVUeXBlKG1pbWVUeXBlLmxvd2VyKCkpOworICAgICAgICByZXNwb25zZS0+
c2V0TWltZVR5cGUobWltZVR5cGUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CiAgICAgICAg
IHJlc3BvbnNlLT5zZXRUZXh0RW5jb2RpbmdOYW1lKGV4dHJhY3RDaGFyc2V0RnJvbU1lZGlhVHlw
ZShjb250ZW50VHlwZSkpOwogCiAgICAgICAgIGQtPmNsaWVudCgpLT5kaWRSZWNlaXZlUmVzcG9u
c2UobV9yZXNvdXJjZUhhbmRsZSwgKnJlc3BvbnNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAKaW5k
ZXggNDY2NzAyYWEzMTY1NWE2ZThiYzgzMzcxNDUyMmViMmRiZTUyZGUzZi4uZjdhMDRlNjg1ZWE4
OTA3OGRhYTEzOTc1ZTMyNWViZjUzODlhMmJiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAKQEAg
LTEyMiw3ICsxMjIsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpjYW5jZWwoKQogCiB2b2lkIFJl
c291cmNlSGFuZGxlOjpzZXRIb3N0QWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZShjb25zdCBTdHJp
bmcmIGhvc3QpCiB7Ci0gICAgYWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3RzKGhvc3QubG93
ZXIoKSk7CisgICAgYWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3RzKGhvc3QpOwogfQogCiB2
b2lkIFJlc291cmNlSGFuZGxlOjpzZXRDbGllbnRDZXJ0aWZpY2F0ZUluZm8oY29uc3QgU3RyaW5n
JiBob3N0LCBjb25zdCBTdHJpbmcmIGNlcnRpZmljYXRlLCBjb25zdCBTdHJpbmcmIGtleSkKQEAg
LTEzNCwxOCArMTM0LDExIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldENsaWVudENlcnRpZmlj
YXRlSW5mbyhjb25zdCBTdHJpbmcmIGhvc3QsIGNvbnN0IFN0cmluZyYKIH0KIAogI2lmIFBMQVRG
T1JNKFdJTikgJiYgVVNFKENGKQotLy8gRklYTUU6ICBUaGUgQ0ZEYXRhUmVmIHdpbGwgbmVlZCB0
byBiZSBzb21ldGhpbmcgZWxzZSB3aGVuCi0vLyBidWlsZGluZyB3aXRob3V0IAotc3RhdGljIEhh
c2hNYXA8U3RyaW5nLCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiA+JiBjbGllbnRDZXJ0cygpCi17Ci0g
ICAgc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiA+IGNlcnRzOwot
ICAgIHJldHVybiBjZXJ0czsKLX0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0Q2xpZW50Q2Vy
dGlmaWNhdGUoY29uc3QgU3RyaW5nJiBob3N0LCBDRkRhdGFSZWYgY2VydCkKK3ZvaWQgUmVzb3Vy
Y2VIYW5kbGU6OnNldENsaWVudENlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYsIENGRGF0YVJlZikK
IHsKLSAgICBjbGllbnRDZXJ0cygpLnNldChob3N0Lmxvd2VyKCksIGNlcnQpOwogfQorCiAjZW5k
aWYKIAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1TZXREZWZlcnNMb2FkaW5nKGJvb2wg
ZGVmZXJzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAppbmRleCA0ZGYwZWE2OTZlYjJjNmU1
NmIyMDI2NzYyMmM2NDQ4NmQ4NWYzNzk2Li5hNjNhNTcyZjRjYTNmMTU5YzNkM2Y4NzYxMmI0ODM2
Y2EyOGZiYWI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcApAQCAtNDk3LDcgKzQ5Nyw3
IEBAIHN0YXRpYyBzaXplX3QgaGVhZGVyQ2FsbGJhY2soY2hhciogcHRyLCBzaXplX3Qgc2l6ZSwg
c2l6ZV90IG5tZW1iLCB2b2lkKiBkYXRhKQogICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldFVSTChV
UkwoUGFyc2VkVVJMU3RyaW5nLCBoZHIpKTsKIAogICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldEhU
VFBTdGF0dXNDb2RlKGh0dHBDb2RlKTsKLSAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRNaW1lVHlw
ZShleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKGQtPm1fcmVzcG9uc2UuaHR0cEhlYWRlckZp
ZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50VHlwZSkpLmxvd2VyKCkpOworICAgICAgICBkLT5t
X3Jlc3BvbnNlLnNldE1pbWVUeXBlKGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUoZC0+bV9y
ZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRUeXBlKSkuY29u
dmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CiAgICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0VGV4dEVu
Y29kaW5nTmFtZShleHRyYWN0Q2hhcnNldEZyb21NZWRpYVR5cGUoZC0+bV9yZXNwb25zZS5odHRw
SGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRUeXBlKSkpOwogCiAgICAgICAgIGlm
IChkLT5tX3Jlc3BvbnNlLmlzTXVsdGlwYXJ0KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9TU0xIYW5kbGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL1NTTEhhbmRsZS5jcHAKaW5kZXggYjQ2MmY4OTc3ZmQzNzhm
NmI1ODIxYjM5NWE3NmYwMTQ5MDZkYmNmNC4uZDViZDQ1ZDY3ZjE5ZGJjYWQyNTViOWQzNGVhODRm
ZTA0MDRkNDZlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL1NTTEhhbmRsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL1NTTEhhbmRsZS5jcHAKQEAgLTM5LDkgKzM5LDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi10eXBlZGVmIHN0ZDo6dHVwbGU8V1RGOjpTdHJpbmcsIFdURjo6U3RyaW5nPiBjbGllbnRD
ZXJ0aWZpY2F0ZTsKLXN0YXRpYyBIYXNoTWFwPFN0cmluZywgTGlzdEhhc2hTZXQ8U3RyaW5nPj4g
YWxsb3dlZEhvc3RzOwotc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBjbGllbnRDZXJ0aWZpY2F0ZT4g
YWxsb3dlZENsaWVudEhvc3RzOwordHlwZWRlZiBzdGQ6OnR1cGxlPFN0cmluZywgU3RyaW5nPiBj
bGllbnRDZXJ0aWZpY2F0ZTsKK3N0YXRpYyBIYXNoTWFwPFN0cmluZywgTGlzdEhhc2hTZXQ8U3Ry
aW5nPiwgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBhbGxvd2VkSG9zdHM7CitzdGF0aWMgSGFz
aE1hcDxTdHJpbmcsIGNsaWVudENlcnRpZmljYXRlLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+
IGFsbG93ZWRDbGllbnRIb3N0czsKIAogdm9pZCBhbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlSG9z
dHMoY29uc3QgU3RyaW5nJiBob3N0KQogewpAQCAtNTIsMTMgKzUyLDEzIEBAIHZvaWQgYWxsb3dz
QW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3RzKGNvbnN0IFN0cmluZyYgaG9zdCkKIHZvaWQgYWRkQWxs
b3dlZENsaWVudENlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYgaG9zdCwgY29uc3QgU3RyaW5nJiBj
ZXJ0aWZpY2F0ZSwgY29uc3QgU3RyaW5nJiBrZXkpCiB7CiAgICAgY2xpZW50Q2VydGlmaWNhdGUg
Y2xpZW50SW5mbyhjZXJ0aWZpY2F0ZSwga2V5KTsKLSAgICBhbGxvd2VkQ2xpZW50SG9zdHMuc2V0
KGhvc3QubG93ZXIoKSwgY2xpZW50SW5mbyk7CisgICAgYWxsb3dlZENsaWVudEhvc3RzLnNldCho
b3N0LCBjbGllbnRJbmZvKTsKIH0KIAogdm9pZCBzZXRTU0xDbGllbnRDZXJ0aWZpY2F0ZShSZXNv
dXJjZUhhbmRsZSogaGFuZGxlKQogewogICAgIFN0cmluZyBob3N0ID0gaGFuZGxlLT5maXJzdFJl
cXVlc3QoKS51cmwoKS5ob3N0KCk7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIGNsaWVudENlcnRpZmlj
YXRlPjo6aXRlcmF0b3IgaXQgPSBhbGxvd2VkQ2xpZW50SG9zdHMuZmluZChob3N0Lmxvd2VyKCkp
OworICAgIGF1dG8gaXQgPSBhbGxvd2VkQ2xpZW50SG9zdHMuZmluZChob3N0KTsKICAgICBpZiAo
aXQgPT0gYWxsb3dlZENsaWVudEhvc3RzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTcx
LDcgKzcxLDcgQEAgdm9pZCBzZXRTU0xDbGllbnRDZXJ0aWZpY2F0ZShSZXNvdXJjZUhhbmRsZSog
aGFuZGxlKQogCiBib29sIHNzbElnbm9yZUhUVFBTQ2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJiBo
b3N0LCBjb25zdCBMaXN0SGFzaFNldDxTdHJpbmc+JiBjZXJ0aWZpY2F0ZXMpCiB7Ci0gICAgSGFz
aE1hcDxTdHJpbmcsIExpc3RIYXNoU2V0PFN0cmluZz4+OjppdGVyYXRvciBpdCA9IGFsbG93ZWRI
b3N0cy5maW5kKGhvc3QpOworICAgIGF1dG8gaXQgPSBhbGxvd2VkSG9zdHMuZmluZChob3N0KTsK
ICAgICBpZiAoaXQgIT0gYWxsb3dlZEhvc3RzLmVuZCgpKSB7CiAgICAgICAgIGlmICgoaXQtPnZh
bHVlKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGl0LT52YWx1ZSA9IGNlcnRpZmljYXRlczsK
QEAgLTc5LDggKzc5LDggQEAgYm9vbCBzc2xJZ25vcmVIVFRQU0NlcnRpZmljYXRlKGNvbnN0IFN0
cmluZyYgaG9zdCwgY29uc3QgTGlzdEhhc2hTZXQ8U3RyaW5nPiYgY2UKICAgICAgICAgfQogICAg
ICAgICBpZiAoY2VydGlmaWNhdGVzLnNpemUoKSAhPSBpdC0+dmFsdWUuc2l6ZSgpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBMaXN0SGFzaFNldDxTdHJpbmc+Ojpjb25zdF9p
dGVyYXRvciBjZXJ0c0l0ZXIgPSBjZXJ0aWZpY2F0ZXMuYmVnaW4oKTsKLSAgICAgICAgTGlzdEhh
c2hTZXQ8U3RyaW5nPjo6aXRlcmF0b3IgdmFsdWVJdGVyID0gKGl0LT52YWx1ZSkuYmVnaW4oKTsK
KyAgICAgICAgYXV0byBjZXJ0c0l0ZXIgPSBjZXJ0aWZpY2F0ZXMuYmVnaW4oKTsKKyAgICAgICAg
YXV0byB2YWx1ZUl0ZXIgPSAoaXQtPnZhbHVlKS5iZWdpbigpOwogICAgICAgICBmb3IgKDsgdmFs
dWVJdGVyICE9IChpdC0+dmFsdWUpLmVuZCgpOyArK3ZhbHVlSXRlciwgKytjZXJ0c0l0ZXIpIHsK
ICAgICAgICAgICAgIGlmICgqY2VydHNJdGVyICE9ICp2YWx1ZUl0ZXIpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtMTk4LDEzICsxOTgsMTMgQEAgc3RhdGljIGludCBjZXJ0VmVy
aWZ5Q2FsbGJhY2soaW50IG9rLCBYNTA5X1NUT1JFX0NUWCogY3R4KQogICAgIGQtPm1fc3NsRXJy
b3JzID0gc3NsQ2VydGlmaWNhdGVGbGFnKGVycik7CiAKICNpZiBQTEFURk9STShXSU4pCi0gICAg
SGFzaE1hcDxTdHJpbmcsIExpc3RIYXNoU2V0PFN0cmluZz4+OjppdGVyYXRvciBpdCA9IGFsbG93
ZWRIb3N0cy5maW5kKGhvc3QpOworICAgIGF1dG8gaXQgPSBhbGxvd2VkSG9zdHMuZmluZChob3N0
KTsKICAgICBvayA9IChpdCAhPSBhbGxvd2VkSG9zdHMuZW5kKCkpOwogI2Vsc2UKICAgICBMaXN0
SGFzaFNldDxTdHJpbmc+IGNlcnRpZmljYXRlczsKICAgICBpZiAoIXBlbURhdGEoY3R4LCBjZXJ0
aWZpY2F0ZXMpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBvayA9IHNzbElnbm9yZUhUVFBTQ2Vy
dGlmaWNhdGUoaG9zdC5sb3dlcigpLCBjZXJ0aWZpY2F0ZXMpOworICAgIG9rID0gc3NsSWdub3Jl
SFRUUFNDZXJ0aWZpY2F0ZShob3N0LCBjZXJ0aWZpY2F0ZXMpOwogI2VuZGlmCiAKICAgICBpZiAo
b2spIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9S
ZXNvdXJjZUhhbmRsZVNvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKaW5kZXggYzUyYzczNmNiMmU1NjI1ZGI3M2M5OTZi
YjE4ZDYzZDdlZGIxZGU0OS4uYmM1OGNjNzJkNTUyYmNiODIyNTAwOWQzOTJiZjllZWMxMGI5ZThm
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291
cmNlSGFuZGxlU291cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKQEAgLTI0NCwxMyArMjQ0LDE0IEBAIHN0YXRpYyB2
b2lkIGNvbnRpbnVlQWZ0ZXJEaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqKTsKIAog
c3RhdGljIGJvb2wgZ0lnbm9yZVNTTEVycm9ycyA9IGZhbHNlOwogCi1zdGF0aWMgSGFzaFNldDxT
dHJpbmc+JiBhbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlSG9zdHMoKQordHlwZWRlZiBIYXNoU2V0
PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBIb3N0c1NldDsKK3N0YXRpYyBIb3N0
c1NldCYgYWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3RzKCkKIHsKLSAgICBERVBSRUNBVEVE
X0RFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxTdHJpbmc+LCBob3N0cywgKCkpOworICAgIERF
UFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChIb3N0c1NldCwgaG9zdHMsICgpKTsKICAgICBy
ZXR1cm4gaG9zdHM7CiB9CiAKLXR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIEhvc3RUTFNDZXJ0aWZp
Y2F0ZVNldD4gQ2VydGlmaWNhdGVzTWFwOwordHlwZWRlZiBIYXNoTWFwPFN0cmluZywgSG9zdFRM
U0NlcnRpZmljYXRlU2V0LCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+IENlcnRpZmljYXRlc01h
cDsKIHN0YXRpYyBDZXJ0aWZpY2F0ZXNNYXAmIGNsaWVudENlcnRpZmljYXRlcygpCiB7CiAgICAg
REVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKENlcnRpZmljYXRlc01hcCwgY2VydGlmaWNh
dGVzLCAoKSk7CkBAIC0zMjIsMTIgKzMyMywxMiBAQCBzdGF0aWMgYm9vbCBoYW5kbGVVbmlnbm9y
ZWRUTFNFcnJvcnMoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgU291cE1lc3NhZ2UqIG1lc3NhZwog
ICAgIGlmICghdGxzRXJyb3JzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTdHJpbmcg
bG93ZXJjYXNlSG9zdFVSTCA9IGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuaG9zdCgpLmxv
d2VyKCk7Ci0gICAgaWYgKGFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGVIb3N0cygpLmNvbnRhaW5z
KGxvd2VyY2FzZUhvc3RVUkwpKQorICAgIFN0cmluZyBob3N0ID0gaGFuZGxlLT5maXJzdFJlcXVl
c3QoKS51cmwoKS5ob3N0KCk7CisgICAgaWYgKGFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGVIb3N0
cygpLmNvbnRhaW5zKGhvc3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBXZSBh
cmVuJ3QgaWdub3JpbmcgZXJyb3JzIGdsb2JhbGx5LCBidXQgdGhlIHVzZXIgbWF5IGhhdmUgYWxy
ZWFkeSBkZWNpZGVkIHRvIGFjY2VwdCB0aGlzIGNlcnRpZmljYXRlLgotICAgIGF1dG8gaXQgPSBj
bGllbnRDZXJ0aWZpY2F0ZXMoKS5maW5kKGxvd2VyY2FzZUhvc3RVUkwpOworICAgIGF1dG8gaXQg
PSBjbGllbnRDZXJ0aWZpY2F0ZXMoKS5maW5kKGhvc3QpOwogICAgIGlmIChpdCAhPSBjbGllbnRD
ZXJ0aWZpY2F0ZXMoKS5lbmQoKSAmJiBpdC0+dmFsdWUuY29udGFpbnMoY2VydGlmaWNhdGUpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTEwODcsMTIgKzEwODgsMTIgQEAgYm9vbCBSZXNv
dXJjZUhhbmRsZTo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKQogCiB2b2lkIFJlc291cmNl
SGFuZGxlOjpzZXRIb3N0QWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmIGhv
c3QpCiB7Ci0gICAgYWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3RzKCkuYWRkKGhvc3QubG93
ZXIoKSk7CisgICAgYWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3RzKCkuYWRkKGhvc3QpOwog
fQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpzZXRDbGllbnRDZXJ0aWZpY2F0ZShjb25zdCBTdHJp
bmcmIGhvc3QsIEdUbHNDZXJ0aWZpY2F0ZSogY2VydGlmaWNhdGUpCiB7Ci0gICAgY2xpZW50Q2Vy
dGlmaWNhdGVzKCkuYWRkKGhvc3QubG93ZXIoKSwgSG9zdFRMU0NlcnRpZmljYXRlU2V0KCkpLml0
ZXJhdG9yLT52YWx1ZS5hZGQoY2VydGlmaWNhdGUpOworICAgIGNsaWVudENlcnRpZmljYXRlcygp
LmFkZChob3N0LCBIb3N0VExTQ2VydGlmaWNhdGVTZXQoKSkuaXRlcmF0b3ItPnZhbHVlLmFkZChj
ZXJ0aWZpY2F0ZSk7CiB9CiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldElnbm9yZVNTTEVycm9y
cyhib29sIGlnbm9yZVNTTEVycm9ycykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nRGVmYXVsdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwCmluZGV4IDVi
YzM2MGZjNTg2OWE2NGJlYTkzZTEyNGY2Mzg0NjdkYjljZjA0ZWMuLjU1M2RiY2UyNTQ3MTdjYjIw
MjFjMjlkYzE2NzI0MWUxNzNhYTNhODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nRGVmYXVsdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmdEZWZhdWx0LmNwcApAQCAt
MTU3LDIwICsxNTcsMjEgQEAgc3RhdGljIGNvbnN0IFNjcmlwdE5hbWVDb2RlIHNjcmlwdE5hbWVD
b2RlTGlzdFtdID0gewogfTsKIAogc3RydWN0IFNjcmlwdE5hbWVDb2RlTWFwSGFzaFRyYWl0cyA6
IHB1YmxpYyBIYXNoVHJhaXRzPFN0cmluZz4gewotICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11
bVRhYmxlU2l6ZSA9IFdURjo6SGFzaFRhYmxlQ2FwYWNpdHlGb3JTaXplPHNpemVvZihzY3JpcHRO
YW1lQ29kZUxpc3QpIC8gc2l6ZW9mKFNjcmlwdE5hbWVDb2RlKT46OnZhbHVlOworICAgIHN0YXRp
YyBjb25zdCBpbnQgbWluaW11bVRhYmxlU2l6ZSA9IFdURjo6SGFzaFRhYmxlQ2FwYWNpdHlGb3JT
aXplPFdURl9BUlJBWV9MRU5HVEgoc2NyaXB0TmFtZUNvZGVMaXN0KT46OnZhbHVlOwogfTsKIAot
dHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVVNjcmlwdENvZGUsIERlZmF1bHRIYXNoPFN0cmluZz46
Okhhc2gsIFNjcmlwdE5hbWVDb2RlTWFwSGFzaFRyYWl0cz4gU2NyaXB0TmFtZUNvZGVNYXA7Cit0
eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBVU2NyaXB0Q29kZSwgQVNDSUlDYXNlSW5zZW5zaXRpdmVI
YXNoLCBTY3JpcHROYW1lQ29kZU1hcEhhc2hUcmFpdHM+IFNjcmlwdE5hbWVDb2RlTWFwOwogCiBV
U2NyaXB0Q29kZSBzY3JpcHROYW1lVG9Db2RlKGNvbnN0IFN0cmluZyYgc2NyaXB0TmFtZSkKIHsK
LSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U2NyaXB0TmFtZUNvZGVNYXA+IHNjcmlwdE5hbWVD
b2RlTWFwOwotICAgIGlmIChzY3JpcHROYW1lQ29kZU1hcC5nZXQoKS5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2Yoc2NyaXB0TmFtZUNvZGVMaXN0KSAv
IHNpemVvZihTY3JpcHROYW1lQ29kZSk7ICsraSkKLSAgICAgICAgICAgIHNjcmlwdE5hbWVDb2Rl
TWFwLmdldCgpLnNldChBU0NJSUxpdGVyYWwoc2NyaXB0TmFtZUNvZGVMaXN0W2ldLm5hbWUpLCBz
Y3JpcHROYW1lQ29kZUxpc3RbaV0uY29kZSk7Ci0gICAgfQorICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxTY3JpcHROYW1lQ29kZU1hcD4gc2NyaXB0TmFtZUNvZGVNYXAgPSBbXSgpIHsKKyAgICAg
ICAgU2NyaXB0TmFtZUNvZGVNYXAgbWFwOworICAgICAgICBmb3IgKGF1dG8mIG5hbWVBbmRDb2Rl
IDogc2NyaXB0TmFtZUNvZGVMaXN0KQorICAgICAgICAgICAgbWFwLmFkZChBU0NJSUxpdGVyYWwo
bmFtZUFuZENvZGUubmFtZSksIG5hbWVBbmRDb2RlLmNvZGUpOworICAgICAgICByZXR1cm4gbWFw
OworICAgIH0oKTsKIAotICAgIFNjcmlwdE5hbWVDb2RlTWFwOjppdGVyYXRvciBpdCA9IHNjcmlw
dE5hbWVDb2RlTWFwLmdldCgpLmZpbmQoc2NyaXB0TmFtZS5sb3dlcigpKTsKKyAgICBhdXRvIGl0
ID0gc2NyaXB0TmFtZUNvZGVNYXAuZ2V0KCkuZmluZChzY3JpcHROYW1lKTsKICAgICBpZiAoaXQg
IT0gc2NyaXB0TmFtZUNvZGVNYXAuZ2V0KCkuZW5kKCkpCiAgICAgICAgIHJldHVybiBpdC0+dmFs
dWU7CiAgICAgcmV0dXJuIFVTQ1JJUFRfSU5WQUxJRF9DT0RFOwpAQCAtMzgzLDMxICszODQsMzMg
QEAgc3RhdGljIGNvbnN0IExvY2FsZVNjcmlwdCBsb2NhbGVTY3JpcHRMaXN0W10gPSB7CiB9Owog
CiBzdHJ1Y3QgTG9jYWxlU2NyaXB0TWFwSGFzaFRyYWl0cyA6IHB1YmxpYyBIYXNoVHJhaXRzPFN0
cmluZz4gewotICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11bVRhYmxlU2l6ZSA9IFdURjo6SGFz
aFRhYmxlQ2FwYWNpdHlGb3JTaXplPHNpemVvZihsb2NhbGVTY3JpcHRMaXN0KSAvIHNpemVvZihM
b2NhbGVTY3JpcHQpPjo6dmFsdWU7CisgICAgc3RhdGljIGNvbnN0IGludCBtaW5pbXVtVGFibGVT
aXplID0gV1RGOjpIYXNoVGFibGVDYXBhY2l0eUZvclNpemU8V1RGX0FSUkFZX0xFTkdUSChsb2Nh
bGVTY3JpcHRMaXN0KT46OnZhbHVlOwogfTsKIAotdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVVNj
cmlwdENvZGUsIERlZmF1bHRIYXNoPFN0cmluZz46Okhhc2gsIExvY2FsZVNjcmlwdE1hcEhhc2hU
cmFpdHM+IExvY2FsZVNjcmlwdE1hcDsKK3R5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFVTY3JpcHRD
b2RlLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2gsIExvY2FsZVNjcmlwdE1hcEhhc2hUcmFpdHM+
IExvY2FsZVNjcmlwdE1hcDsKIAogVVNjcmlwdENvZGUgbG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9u
dFNlbGVjdGlvbihjb25zdCBTdHJpbmcmIGxvY2FsZSkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8TG9jYWxlU2NyaXB0TWFwPiBsb2NhbGVTY3JpcHRNYXA7Ci0gICAgaWYgKGxvY2FsZVNj
cmlwdE1hcC5nZXQoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplb2YobG9jYWxlU2NyaXB0TGlzdCkgLyBzaXplb2YoTG9jYWxlU2NyaXB0KTsgKytpKQot
ICAgICAgICAgICAgbG9jYWxlU2NyaXB0TWFwLmdldCgpLnNldChBU0NJSUxpdGVyYWwobG9jYWxl
U2NyaXB0TGlzdFtpXS5sb2NhbGUpLCBsb2NhbGVTY3JpcHRMaXN0W2ldLnNjcmlwdCk7Ci0gICAg
fQorICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxMb2NhbGVTY3JpcHRNYXA+IGxvY2FsZVNjcmlw
dE1hcCA9IFtdKCkgeworICAgICAgICBMb2NhbGVTY3JpcHRNYXAgbWFwOworICAgICAgICBmb3Ig
KGF1dG8mIGxvY2FsZUFuZFNjcmlwdCA6IGxvY2FsZVNjcmlwdExpc3QpCisgICAgICAgICAgICBt
YXAuYWRkKEFTQ0lJTGl0ZXJhbChsb2NhbGVBbmRTY3JpcHQubG9jYWxlKSwgbG9jYWxlQW5kU2Ny
aXB0LnNjcmlwdCk7CisgICAgICAgIHJldHVybiBtYXA7CisgICAgfSgpOwogCi0gICAgU3RyaW5n
IGNhbm9uaWNhbExvY2FsZSA9IGxvY2FsZS5sb3dlcigpLnJlcGxhY2UoJy0nLCAnXycpOworICAg
IFN0cmluZyBjYW5vbmljYWxMb2NhbGUgPSBsb2NhbGU7CisgICAgY2Fub25pY2FsTG9jYWxlLnJl
cGxhY2UoJy0nLCAnXycpOwogICAgIHdoaWxlICghY2Fub25pY2FsTG9jYWxlLmlzRW1wdHkoKSkg
ewotICAgICAgICBMb2NhbGVTY3JpcHRNYXA6Oml0ZXJhdG9yIGl0ID0gbG9jYWxlU2NyaXB0TWFw
LmdldCgpLmZpbmQoY2Fub25pY2FsTG9jYWxlKTsKKyAgICAgICAgYXV0byBpdCA9IGxvY2FsZVNj
cmlwdE1hcC5nZXQoKS5maW5kKGNhbm9uaWNhbExvY2FsZSk7CiAgICAgICAgIGlmIChpdCAhPSBs
b2NhbGVTY3JpcHRNYXAuZ2V0KCkuZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gaXQtPnZhbHVl
OwotICAgICAgICBzaXplX3QgcG9zID0gY2Fub25pY2FsTG9jYWxlLnJldmVyc2VGaW5kKCdfJyk7
Ci0gICAgICAgIGlmIChwb3MgPT0gbm90Rm91bmQpCisgICAgICAgIGF1dG8gdW5kZXJzY29yZVBv
c2l0aW9uID0gY2Fub25pY2FsTG9jYWxlLnJldmVyc2VGaW5kKCdfJyk7CisgICAgICAgIGlmICh1
bmRlcnNjb3JlUG9zaXRpb24gPT0gbm90Rm91bmQpCiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgVVNjcmlwdENvZGUgY29kZSA9IHNjcmlwdE5hbWVUb0NvZGUoY2Fub25pY2FsTG9jYWxlLnN1
YnN0cmluZyhwb3MgKyAxKSk7CisgICAgICAgIFVTY3JpcHRDb2RlIGNvZGUgPSBzY3JpcHROYW1l
VG9Db2RlKGNhbm9uaWNhbExvY2FsZS5zdWJzdHJpbmcodW5kZXJzY29yZVBvc2l0aW9uICsgMSkp
OwogICAgICAgICBpZiAoY29kZSAhPSBVU0NSSVBUX0lOVkFMSURfQ09ERSAmJiBjb2RlICE9IFVT
Q1JJUFRfVU5LTk9XTikKICAgICAgICAgICAgIHJldHVybiBjb2RlOwotICAgICAgICBjYW5vbmlj
YWxMb2NhbGUgPSBjYW5vbmljYWxMb2NhbGUuc3Vic3RyaW5nKDAsIHBvcyk7CisgICAgICAgIGNh
bm9uaWNhbExvY2FsZSA9IGNhbm9uaWNhbExvY2FsZS5zdWJzdHJpbmcoMCwgdW5kZXJzY29yZVBv
c2l0aW9uKTsKICAgICB9CiAgICAgcmV0dXJuIFVTQ1JJUFRfQ09NTU9OOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC93aW4vTG9jYWxlV2luLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvd2luL0xvY2FsZVdpbi5jcHAKaW5kZXggY2NkNzRiYzQ3
YTUwOTdmYTAxM2QwOWE0YjVlYjcyNGM1MzlmNzY5MS4uZTY3ZTI2OTdlOWRiZGVlNjc5MDE5NjA1
MWIwNjg1ZTQxNTlmNzAzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC93aW4vTG9jYWxlV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dp
bi9Mb2NhbGVXaW4uY3BwCkBAIC00OCw3ICs0OCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIHR5cGVkZWYgTENJRCAoV0lOQVBJKiBMb2NhbGVOYW1lVG9M
Q0lEUHRyKShMUENXU1RSLCBEV09SRCk7Ci10eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBMQ0lEPiBO
YW1lVG9MQ0lETWFwOwordHlwZWRlZiBIYXNoTWFwPFN0cmluZywgTENJRCwgQVNDSUlDYXNlSW5z
ZW5zaXRpdmVIYXNoPiBOYW1lVG9MQ0lETWFwOwogCiBzdGF0aWMgU3RyaW5nIGV4dHJhY3RMYW5n
dWFnZUNvZGUoY29uc3QgU3RyaW5nJiBsb2NhbGUpCiB7CkBAIC0xMDcsNyArMTA3LDcgQEAgc3Rh
dGljIExDSUQgV0lOQVBJIGNvbnZlcnRMb2NhbGVOYW1lVG9MQ0lEKExQQ1dTVFIgbmFtZSwgRFdP
UkQpCiAgICAgICAgIHJldHVybiBMT0NBTEVfVVNFUl9ERUZBVUxUOwogICAgIERFUFJFQ0FURURf
REVGSU5FX1NUQVRJQ19MT0NBTChOYW1lVG9MQ0lETWFwLCBtYXAsICgpKTsKICAgICBlbnN1cmVO
YW1lVG9MQ0lETWFwKG1hcCk7Ci0gICAgU3RyaW5nIGxvY2FsZU5hbWUgPSBTdHJpbmcobmFtZSku
cmVwbGFjZSgnXycsICctJykubG93ZXIoKTsKKyAgICBTdHJpbmcgbG9jYWxlTmFtZSA9IFN0cmlu
ZyhuYW1lKS5yZXBsYWNlKCdfJywgJy0nKTsKICAgICBkbyB7CiAgICAgICAgIE5hbWVUb0xDSURN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yID0gbWFwLmZpbmQobG9jYWxlTmFtZSk7CiAgICAg
ICAgIGlmIChpdGVyYXRvciAhPSBtYXAuZW5kKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vUGFzdGVib2FyZFdpbi5jcHAKaW5kZXggM2M2OTljZGZkZGM5M2VmNmIzNjEwMGZmYzM4
OWJiODZjZTE5NzNlOC4uMDMxYmZkMjQ5NDJiNjQ3MjA2ODdkMjgzNWJlNjNmOGEwZThkZDg0NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcApAQCAt
MTgyLDE0ICsxODIsMTQgQEAgZW51bSBDbGlwYm9hcmREYXRhVHlwZSB7IENsaXBib2FyZERhdGFU
eXBlTm9uZSwgQ2xpcGJvYXJkRGF0YVR5cGVVUkwsIENsaXBib2FyZEQKIAogc3RhdGljIENsaXBi
b2FyZERhdGFUeXBlIGNsaXBib2FyZFR5cGVGcm9tTUlNRVR5cGUoY29uc3QgU3RyaW5nJiB0eXBl
KQogewotICAgIFN0cmluZyBxVHlwZSA9IHR5cGUuc3RyaXBXaGl0ZVNwYWNlKCkubG93ZXIoKTsK
KyAgICBTdHJpbmcgc3RyaXBwZWRUeXBlID0gdHlwZS5zdHJpcFdoaXRlU3BhY2UoKTsKIAogICAg
IC8vIHR3byBzcGVjaWFsIGNhc2VzIGZvciBJRSBjb21wYXRpYmlsaXR5Ci0gICAgaWYgKHFUeXBl
ID09ICJ0ZXh0IiB8fCBxVHlwZSA9PSAidGV4dC9wbGFpbiIgfHwgcVR5cGUuc3RhcnRzV2l0aCgi
dGV4dC9wbGFpbjsiKSkKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3Ry
aXBwZWRUeXBlLCAidGV4dCIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmlw
cGVkVHlwZSwgInRleHQvcGxhaW4iKSB8fCBzdHJpcHBlZFR5cGUuc3RhcnRzV2l0aCgidGV4dC9w
bGFpbjsiLCBmYWxzZSkpCiAgICAgICAgIHJldHVybiBDbGlwYm9hcmREYXRhVHlwZVRleHQ7Ci0g
ICAgaWYgKHFUeXBlID09ICJ1cmwiIHx8IHFUeXBlID09ICJ0ZXh0L3VyaS1saXN0IikKKyAgICBp
ZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3RyaXBwZWRUeXBlLCAidXJsIikgfHwg
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3RyaXBwZWRUeXBlLCAidGV4dC91cmktbGlz
dCIpKQogICAgICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVVUkw7Ci0gICAgaWYgKHFUeXBl
ID09ICJ0ZXh0L2h0bWwiKQorICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShz
dHJpcHBlZFR5cGUsICJ0ZXh0L2h0bWwiKSkKICAgICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFU
eXBlVGV4dEhUTUw7CiAKICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVOb25lOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCmluZGV4IDU3MzFjMGI3NDcwNjQ1NDFjOThi
ODk3NTBhOTViYmM2OGU5ZmM5MTguLjhjNGU4MjlhZDhkOGJkOWNmOGUyYjU3ZjJmYWIwMGIxZjA5
NzUxYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKQEAgLTEwMzUs
MTAgKzEwMzUsMTAgQEAgdm9pZCBhcHBseVRleHRUcmFuc2Zvcm0oY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlLCBTdHJpbmcmIHRleHQsIFVDaGFyIHByZXZpb3VzQ2gKICAgICAgICAgbWFrZUNhcGl0
YWxpemVkKCZ0ZXh0LCBwcmV2aW91c0NoYXJhY3Rlcik7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgVVBQRVJDQVNFOgotICAgICAgICB0ZXh0ID0gdGV4dC51cHBlcihzdHlsZS5sb2NhbGUoKSk7
CisgICAgICAgIHRleHQgPSB0ZXh0LmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhMb2NhbGUoc3R5bGUu
bG9jYWxlKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIExPV0VSQ0FTRToKLSAgICAgICAg
dGV4dCA9IHRleHQubG93ZXIoc3R5bGUubG9jYWxlKCkpOworICAgICAgICB0ZXh0ID0gdGV4dC5j
b252ZXJ0VG9Mb3dlcmNhc2VXaXRoTG9jYWxlKHN0eWxlLmxvY2FsZSgpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1
ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKaW5kZXggZjAz
NDAwNzExZTRiMjlkY2JkMjk1OTVhMjU1Zjk2ZWFkMTYwZGU2YS4uOWQ4MTdlMWJiODkzZDllOWEw
NGJjNDNmOWI5YjdlOTMzNjFkOWFlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hN
TEh0dHBSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3Qu
Y3BwCkBAIC0xMDMwLDkgKzEwMzAsNyBAQCBTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNl
TUlNRVR5cGUoKSBjb25zdAogCiBib29sIFhNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZUlzWE1MKCkg
Y29uc3QKIHsKLSAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBsb3dlcigpIGNhbGwgd2hlbiBET01J
bXBsZW1lbnRhdGlvbi5pc1hNTE1JTUVUeXBlKCkgaXMgbW9kaWZpZWQKLSAgICAvLyAgICAgICAg
dG8gZG8gY2FzZSBpbnNlbnNpdGl2ZSBNSU1FIHR5cGUgbWF0Y2hpbmcuCi0gICAgcmV0dXJuIERP
TUltcGxlbWVudGF0aW9uOjppc1hNTE1JTUVUeXBlKHJlc3BvbnNlTUlNRVR5cGUoKS5sb3dlcigp
KTsKKyAgICByZXR1cm4gRE9NSW1wbGVtZW50YXRpb246OmlzWE1MTUlNRVR5cGUocmVzcG9uc2VN
SU1FVHlwZSgpKTsKIH0KIAogaW50IFhNTEh0dHBSZXF1ZXN0OjpzdGF0dXMoKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJCYXNlUGx1Z2luUGFja2FnZS5t
bSBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViQmFzZVBsdWdpblBhY2thZ2UubW0KaW5k
ZXggNWJjZWUyNzIzZDY1NGEzOGQwNzMwNTBlYmE2N2U4NmY3MjJjODM1Mi4uZGU3OTZkOWVjY2I3
NDRiMzI3ZDM1OWRlYTYzNTIyNDhkMjM4ODIwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9t
YWMvUGx1Z2lucy9XZWJCYXNlUGx1Z2luUGFja2FnZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21h
Yy9QbHVnaW5zL1dlYkJhc2VQbHVnaW5QYWNrYWdlLm1tCkBAIC0yMTYsMTggKzIxNiwxNSBAQCAt
IChCT09MKWdldFBsdWdpbkluZm9Gcm9tUExpc3RzCiAgICAgICAgIE1pbWVDbGFzc0luZm8gbWlt
ZUNsYXNzSW5mbzsKICAgICAgICAgCiAgICAgICAgIE5TQXJyYXkgKmV4dGVuc2lvbnMgPSBbW01J
TUVEaWN0aW9uYXJ5IG9iamVjdEZvcktleTpXZWJQbHVnaW5FeHRlbnNpb25zS2V5XSBfd2ViX2xv
d2VyY2FzZVN0cmluZ3NdOwotICAgICAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBbZXh0
ZW5zaW9ucyBjb3VudF07ICsraSkgeworICAgICAgICBmb3IgKE5TU3RyaW5nICpleHRlbnNpb24g
aW4gZXh0ZW5zaW9ucykgewogICAgICAgICAgICAgLy8gVGhlIERpdlggcGx1Zy1pbiBsaXN0cyBt
dWx0aXBsZSBleHRlbnNpb25zIGluIGEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBpbnN0ZWFkIG9m
IHVzaW5nCiAgICAgICAgICAgICAvLyBtdWx0aXBsZSBhcnJheSBlbGVtZW50cyBpbiB0aGUgcHJv
cGVydHkgbGlzdC4gV29yayBhcm91bmQgdGhpcyBoZXJlIGJ5IHNwbGl0dGluZyB0aGUKICAgICAg
ICAgICAgIC8vIGV4dGVuc2lvbiBzdHJpbmcgaW50byBjb21wb25lbnRzLgotICAgICAgICAgICAg
TlNBcnJheSAqZXh0ZW5zaW9uQ29tcG9uZW50cyA9IFtbZXh0ZW5zaW9ucyBvYmplY3RBdEluZGV4
OmldIGNvbXBvbmVudHNTZXBhcmF0ZWRCeVN0cmluZzpAIiwiXTsKLQotICAgICAgICAgICAgZm9y
IChOU1N0cmluZyAqZXh0ZW5zaW9uIGluIGV4dGVuc2lvbkNvbXBvbmVudHMpCi0gICAgICAgICAg
ICAgICAgbWltZUNsYXNzSW5mby5leHRlbnNpb25zLmFwcGVuZChleHRlbnNpb24pOworICAgICAg
ICAgICAgZm9yIChOU1N0cmluZyAqY29tcG9uZW50IGluIFtleHRlbnNpb24gY29tcG9uZW50c1Nl
cGFyYXRlZEJ5U3RyaW5nOkAiLCJdKQorICAgICAgICAgICAgICAgIG1pbWVDbGFzc0luZm8uZXh0
ZW5zaW9ucy5hcHBlbmQoY29tcG9uZW50KTsKICAgICAgICAgfQogCi0gICAgICAgIG1pbWVDbGFz
c0luZm8udHlwZSA9IFN0cmluZyhNSU1FKS5sb3dlcigpOwotCisgICAgICAgIG1pbWVDbGFzc0lu
Zm8udHlwZSA9IFN0cmluZyhNSU1FKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOwogICAgICAg
ICBtaW1lQ2xhc3NJbmZvLmRlc2MgPSBbTUlNRURpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OldlYlBs
dWdpblR5cGVEZXNjcmlwdGlvbktleV07CiAKICAgICAgICAgcGx1Z2luSW5mby5taW1lcy5hcHBl
bmQobWltZUNsYXNzSW5mbyk7CkBAIC0yODQsMTIgKzI4MSwxMCBAQCAtIChjb25zdCBQbHVnaW5J
bmZvJilwbHVnaW5JbmZvCiAKIC0gKEJPT0wpc3VwcG9ydHNFeHRlbnNpb246KGNvbnN0IFN0cmlu
ZyYpZXh0ZW5zaW9uCiB7Ci0gICAgQVNTRVJUKGV4dGVuc2lvbi5sb3dlcigpID09IGV4dGVuc2lv
bik7CisgICAgQVNTRVJUKGV4dGVuc2lvbi5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpID09IGV4
dGVuc2lvbik7CiAgICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwbHVnaW5JbmZvLm1p
bWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBleHRlbnNp
b25zID0gcGx1Z2luSW5mby5taW1lc1tpXS5leHRlbnNpb25zOwotCi0gICAgICAgIGlmIChzdGQ6
OmZpbmQoZXh0ZW5zaW9ucy5iZWdpbigpLCBleHRlbnNpb25zLmVuZCgpLCBleHRlbnNpb24pICE9
IGV4dGVuc2lvbnMuZW5kKCkpCisgICAgZm9yIChhdXRvJiBlbnRyeSA6IHBsdWdpbkluZm8ubWlt
ZXMpIHsKKyAgICAgICAgaWYgKGVudHJ5LmV4dGVuc2lvbnMuY29udGFpbnMoZXh0ZW5zaW9uKSkK
ICAgICAgICAgICAgIHJldHVybiBZRVM7CiAgICAgfQogCkBAIC0yOTgsMjYgKzI5MywyMyBAQCAt
IChCT09MKXN1cHBvcnRzRXh0ZW5zaW9uOihjb25zdCBTdHJpbmcmKWV4dGVuc2lvbgogCiAtIChC
T09MKXN1cHBvcnRzTUlNRVR5cGU6KGNvbnN0IFdURjo6U3RyaW5nJiltaW1lVHlwZQogewotICAg
IEFTU0VSVChtaW1lVHlwZS5sb3dlcigpID09IG1pbWVUeXBlKTsKKyAgICBBU1NFUlQobWltZVR5
cGUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSA9PSBtaW1lVHlwZSk7CiAgICAgCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBwbHVnaW5JbmZvLm1pbWVzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIGlmIChwbHVnaW5JbmZvLm1pbWVzW2ldLnR5cGUgPT0gbWltZVR5cGUpCisgICAgZm9yIChh
dXRvJiBlbnRyeSA6IHBsdWdpbkluZm8ubWltZXMpIHsKKyAgICAgICAgaWYgKGVudHJ5LnR5cGUg
PT0gbWltZVR5cGUpCiAgICAgICAgICAgICByZXR1cm4gWUVTOwogICAgIH0KLSAgICAKKwogICAg
IHJldHVybiBOTzsKIH0KIAogLSAoTlNTdHJpbmcgKilNSU1FVHlwZUZvckV4dGVuc2lvbjooY29u
c3QgU3RyaW5nJilleHRlbnNpb24KIHsKLSAgICBBU1NFUlQoZXh0ZW5zaW9uLmxvd2VyKCkgPT0g
ZXh0ZW5zaW9uKTsKKyAgICBBU1NFUlQoZXh0ZW5zaW9uLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNl
KCkgPT0gZXh0ZW5zaW9uKTsKICAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBsdWdp
bkluZm8ubWltZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgTWltZUNsYXNzSW5mbyYg
bWltZUNsYXNzSW5mbyA9IHBsdWdpbkluZm8ubWltZXNbaV07Ci0gICAgICAgIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBleHRlbnNpb25zID0gbWltZUNsYXNzSW5mby5leHRlbnNpb25zOwotCi0gICAg
ICAgIGlmIChzdGQ6OmZpbmQoZXh0ZW5zaW9ucy5iZWdpbigpLCBleHRlbnNpb25zLmVuZCgpLCBl
eHRlbnNpb24pICE9IGV4dGVuc2lvbnMuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gbWltZUNs
YXNzSW5mby50eXBlOworICAgIGZvciAoYXV0byYgZW50cnkgOiBwbHVnaW5JbmZvLm1pbWVzKSB7
CisgICAgICAgIGlmIChlbnRyeS5leHRlbnNpb25zLmNvbnRhaW5zKGV4dGVuc2lvbikpCisgICAg
ICAgICAgICByZXR1cm4gZW50cnkudHlwZTsKICAgICB9CiAKICAgICByZXR1cm4gbmlsOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAgYi9T
b3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAppbmRleCAxYTBjN2U4
M2I4MjExY2JjZGY1NGY5ZDA2ZTM2MTM0MjhjMjhkZjcxLi40ZjllZjJkMGNjOWI0ZjUxOGMxYzZl
MmIxMWEyMGNmNTMwZTM0MmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5z
L1BsdWdpbkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdp
bkRhdGFiYXNlLmNwcApAQCAtMTkwLDE0ICsxOTAsMTIgQEAgaW50IFBsdWdpbkRhdGFiYXNlOjpw
cmVmZXJyZWRQbHVnaW5Db21wYXJlKGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpCiBQbHVn
aW5QYWNrYWdlKiBQbHVnaW5EYXRhYmFzZTo6cGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSkKIHsKICAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBTdHJpbmcga2V5ID0gbWltZVR5
cGUubG93ZXIoKTsKLSAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lu
cy5lbmQoKTsKLSAgICBQbHVnaW5QYWNrYWdlKiBwcmVmZXJyZWRQbHVnaW4gPSBtX3ByZWZlcnJl
ZFBsdWdpbnMuZ2V0KGtleSk7CisgICAgUGx1Z2luUGFja2FnZSogcHJlZmVycmVkUGx1Z2luID0g
bV9wcmVmZXJyZWRQbHVnaW5zLmdldChtaW1lVHlwZSk7CiAgICAgaWYgKHByZWZlcnJlZFBsdWdp
bgogICAgICAgICAmJiBwcmVmZXJyZWRQbHVnaW4tPmlzRW5hYmxlZCgpCi0gICAgICAgICYmIHBy
ZWZlcnJlZFBsdWdpbi0+bWltZVRvRGVzY3JpcHRpb25zKCkuY29udGFpbnMoa2V5KSkgeworICAg
ICAgICAmJiBwcmVmZXJyZWRQbHVnaW4tPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmNvbnRhaW5zKG1p
bWVUeXBlKSkgewogICAgICAgICByZXR1cm4gcHJlZmVycmVkUGx1Z2luOwogICAgIH0KIApAQCAt
MjA5LDcgKzIwNyw3IEBAIFBsdWdpblBhY2thZ2UqIFBsdWdpbkRhdGFiYXNlOjpwbHVnaW5Gb3JN
SU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogICAgICAgICBpZiAoIXBsdWdpbi0+aXNF
bmFibGVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAocGx1Z2luLT5t
aW1lVG9EZXNjcmlwdGlvbnMoKS5jb250YWlucyhrZXkpKSB7CisgICAgICAgIGlmIChwbHVnaW4t
Pm1pbWVUb0Rlc2NyaXB0aW9ucygpLmNvbnRhaW5zKG1pbWVUeXBlKSkgewogI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCiAgICAgICAgICAgICBpZiAoIXBsdWdpbi0+
ZW5zdXJlUGx1Z2luTG9hZGVkKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0zMDUs
NyArMzAzLDcgQEAgUGx1Z2luUGFja2FnZSogUGx1Z2luRGF0YWJhc2U6OmZpbmRQbHVnaW4oY29u
c3QgVVJMJiB1cmwsIFN0cmluZyYgbWltZVR5cGUpCiB2b2lkIFBsdWdpbkRhdGFiYXNlOjpzZXRQ
cmVmZXJyZWRQbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBQbHVnaW5Q
YWNrYWdlKiBwbHVnaW4pCiB7CiAgICAgaWYgKCFwbHVnaW4gfHwgcGx1Z2luLT5taW1lVG9FeHRl
bnNpb25zKCkuY29udGFpbnMobWltZVR5cGUpKQotICAgICAgICBtX3ByZWZlcnJlZFBsdWdpbnMu
c2V0KG1pbWVUeXBlLmxvd2VyKCksIHBsdWdpbik7CisgICAgICAgIG1fcHJlZmVycmVkUGx1Z2lu
cy5zZXQobWltZVR5cGUsIHBsdWdpbik7CiB9CiAKIGJvb2wgUGx1Z2luRGF0YWJhc2U6OmZpbGVF
eGlzdHNBbmRJc05vdERpc2FibGVkKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmggYi9Tb3Vy
Y2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmgKaW5kZXggYmZjNDhlY2RmZjZj
ZjIyNDM1NTk0ZjhhZTg1MjMwMWE2MjYzY2Y4Ni4uZWI2YTg0MTEyNGQ2OTc3NWI2Y2NjN2JlNDNm
YmMwOWRiZjA5NzcxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVn
aW5EYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luRGF0YWJh
c2UuaApAQCAtMTA3LDcgKzEwNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUGx1
Z2luU2V0IG1fcGx1Z2luczsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQbHVnaW5Q
YWNrYWdlPiA+IG1fcGx1Z2luc0J5UGF0aDsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIHRpbWVf
dD4gbV9wbHVnaW5QYXRoc1dpdGhUaW1lczsKLSAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0
cjxQbHVnaW5QYWNrYWdlPiA+IG1fcHJlZmVycmVkUGx1Z2luczsKKyAgICAgICAgSGFzaE1hcDxT
dHJpbmcsIFJlZlB0cjxQbHVnaW5QYWNrYWdlPiwgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBt
X3ByZWZlcnJlZFBsdWdpbnM7CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9D
QUNIRSkKICAgICAgICAgYm9vbCBtX3BlcnNpc3RlbnRNZXRhZGF0YUNhY2hlSXNMb2FkZWQ7CiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luUGFja2Fn
ZS5oIGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5QYWNrYWdlLmgKaW5kZXggMjgz
NDA1NzY3OTdhYTZiYzgzMTc3MmJjM2I0ZjljY2Y4Y2M4YmE2My4uZDc2ZWFmZDU3OWJiMzYwZjc3
NDJlZWE0ZGNjMTEyYThlNWM3MTVhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vUGx1
Z2lucy9QbHVnaW5QYWNrYWdlLmgKKysrIGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVn
aW5QYWNrYWdlLmgKQEAgLTM5LDggKzM5LDkgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz4gTUlNRVRvRGVzY3JpcHRpb25zTWFwOwotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJp
bmcsIFZlY3RvcjxTdHJpbmc+ID4gTUlNRVRvRXh0ZW5zaW9uc01hcDsKKworICAgIHR5cGVkZWYg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBNSU1FVG9E
ZXNjcmlwdGlvbnNNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFN0cmlu
Zz4sIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4gTUlNRVRvRXh0ZW5zaW9uc01hcDsKIAogICAg
IGNsYXNzIFBsdWdpblBhY2thZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxQbHVnaW5QYWNrYWdlPiB7
CiAgICAgcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVn
aW5QYWNrYWdlV2luLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luUGFja2Fn
ZVdpbi5jcHAKaW5kZXggYzJiYmNjNDUwNTk4NDA1YzVjOGEyNGYwOGFlN2IyYTBiZTE3ODQ3Zi4u
NTZlNmZiODhjMTc1N2YzYzNmN2I4OWFkNjE1Y2I2ZDg3ZjMxNjJhMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5QYWNrYWdlV2luLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblBhY2thZ2VXaW4uY3BwCkBAIC0yMDAsNyArMjAwLDcg
QEAgYm9vbCBQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8oKQogICAgIGdldFZlcnNpb25JbmZvKHZl
cnNpb25JbmZvRGF0YS5nZXQoKSwgIkZpbGVPcGVuTmFtZSIpLnNwbGl0KCd8JywgZGVzY3JpcHRp
b25zKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0eXBlcy5zaXplKCk7IGkrKykg
ewotICAgICAgICBTdHJpbmcgdHlwZSA9IHR5cGVzW2ldLmxvd2VyKCk7CisgICAgICAgIFN0cmlu
ZyB0eXBlID0gdHlwZXNbaV0uY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKICAgICAgICAgU3Ry
aW5nIGRlc2NyaXB0aW9uID0gaSA8IGRlc2NyaXB0aW9ucy5zaXplKCkgPyBkZXNjcmlwdGlvbnNb
aV0gOiAiIjsKICAgICAgICAgU3RyaW5nIGV4dGVuc2lvbkxpc3QgPSBpIDwgZXh0ZW5zaW9uTGlz
dHMuc2l6ZSgpID8gZXh0ZW5zaW9uTGlzdHNbaV0gOiAiIjsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL0N1c3RvbVByb3RvY29sTWFu
YWdlci5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL0N1
c3RvbVByb3RvY29sTWFuYWdlci5oCmluZGV4IDljZmRjMzk2ZTEzNjk3YzI5ZDhkODdmYzFjMmEw
MGJjZWJkMmM2ZWUuLmJmMmJkNDcyMDVjYTA4Zjk5M2ZiYmNmNzVmNGRmYjJkNjA5NDg1M2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0N1c3RvbVByb3RvY29scy9D
dXN0b21Qcm90b2NvbE1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9DdXN0b21Qcm90b2NvbHMvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmgKQEAgLTM2LDYgKzM2LDcg
QEAKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
ICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFz
aC5oPgogT0JKQ19DTEFTUyBOU1VSTFNlc3Npb25Db25maWd1cmF0aW9uOwogT0JKQ19DTEFTUyBX
S0N1c3RvbVByb3RvY29sOwogI2Vsc2UKQEAgLTk5LDcgKzEwMCw3IEBAIHByaXZhdGU6CiAgICAg
UmVmUHRyPFdvcmtRdWV1ZT4gbV9tZXNzYWdlUXVldWU7CiAKICNpZiBQTEFURk9STShDT0NPQSkK
LSAgICBIYXNoU2V0PFN0cmluZz4gbV9yZWdpc3RlcmVkU2NoZW1lczsKKyAgICBIYXNoU2V0PFN0
cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBtX3JlZ2lzdGVyZWRTY2hlbWVzOwogICAg
IExvY2sgbV9yZWdpc3RlcmVkU2NoZW1lc011dGV4OwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPHVp
bnQ2NF90LCBSZXRhaW5QdHI8V0tDdXN0b21Qcm90b2NvbD4+IEN1c3RvbVByb3RvY29sTWFwOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvbWFjL05l
dHNjYXBlUGx1Z2luTW9kdWxlTWFjLm1tIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMv
TmV0c2NhcGUvbWFjL05ldHNjYXBlUGx1Z2luTW9kdWxlTWFjLm1tCmluZGV4IDE1NjQxMzYxOWQz
NmM1MjAzYWE1ZWJjYzg4NzJhMmY5ZDZkNDNlYTQuLjMwNWY4NWFiNDNiNzVmMjcxMTYwOGNlYzVk
NzZjNjE0ZThkYWUwNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5z
L05ldHNjYXBlL21hYy9OZXRzY2FwZVBsdWdpbk1vZHVsZU1hYy5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9tYWMvTmV0c2NhcGVQbHVnaW5Nb2R1bGVNYWMu
bW0KQEAgLTE4Niw3ICsxODYsNyBAQCBzdGF0aWMgYm9vbCBnZXRQbHVnaW5JbmZvRnJvbVByb3Bl
cnR5TGlzdHMoQ0ZCdW5kbGVSZWYgYnVuZGxlLCBQbHVnaW5Nb2R1bGVJbmZvJgogICAgICAgICBp
ZiAobWltZVR5cGVEZXNjcmlwdGlvbiAmJiBDRkdldFR5cGVJRChtaW1lVHlwZURlc2NyaXB0aW9u
KSAhPSBDRlN0cmluZ0dldFR5cGVJRCgpKQogICAgICAgICAgICAgbWltZVR5cGVEZXNjcmlwdGlv
biA9IDA7CiAKLSAgICAgICAgbWltZUNsYXNzSW5mby50eXBlID0gU3RyaW5nKG1pbWVUeXBlKS5s
b3dlcigpOworICAgICAgICBtaW1lQ2xhc3NJbmZvLnR5cGUgPSBTdHJpbmcobWltZVR5cGUpLmNv
bnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCk7CiAgICAgICAgIG1pbWVDbGFzc0luZm8uZGVzYyA9IG1p
bWVUeXBlRGVzY3JpcHRpb247CiAKICAgICAgICAgLy8gTm93IGdldCB0aGUgZXh0ZW5zaW9ucyBm
b3IgdGhpcyBNSU1FIHR5cGUuCkBAIC0yMDQsMTAgKzIwNCwxMCBAQCBzdGF0aWMgYm9vbCBnZXRQ
bHVnaW5JbmZvRnJvbVByb3BlcnR5TGlzdHMoQ0ZCdW5kbGVSZWYgYnVuZGxlLCBQbHVnaW5Nb2R1
bGVJbmZvJgogICAgICAgICAgICAgLy8gbXVsdGlwbGUgYXJyYXkgZWxlbWVudHMgaW4gdGhlIHBy
b3BlcnR5IGxpc3QuIFdvcmsgYXJvdW5kIHRoaXMgaGVyZSBieSBzcGxpdHRpbmcgdGhlCiAgICAg
ICAgICAgICAvLyBleHRlbnNpb24gc3RyaW5nIGludG8gY29tcG9uZW50cy4KICAgICAgICAgICAg
IFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbkNvbXBvbmVudHM7Ci0gICAgICAgICAgICBTdHJpbmco
ZXh0ZW5zaW9uKS5sb3dlcigpLnNwbGl0KCcsJywgZXh0ZW5zaW9uQ29tcG9uZW50cyk7CisgICAg
ICAgICAgICBTdHJpbmcoZXh0ZW5zaW9uKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpLnNwbGl0
KCcsJywgZXh0ZW5zaW9uQ29tcG9uZW50cyk7CiAKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgZXh0ZW5zaW9uQ29tcG9uZW50cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAg
ICBtaW1lQ2xhc3NJbmZvLmV4dGVuc2lvbnMuYXBwZW5kKGV4dGVuc2lvbkNvbXBvbmVudHNbaV0p
OworICAgICAgICAgICAgZm9yIChhdXRvJiBjb21wb25lbnQgOiBleHRlbnNpb25Db21wb25lbnRz
KQorICAgICAgICAgICAgICAgIG1pbWVDbGFzc0luZm8uZXh0ZW5zaW9ucy5hcHBlbmQoY29tcG9u
ZW50KTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEFkZCB0aGlzIE1JTUUgdHlwZS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL3gxMS9OZXRzY2Fw
ZVBsdWdpbk1vZHVsZVgxMS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OZXRz
Y2FwZS94MTEvTmV0c2NhcGVQbHVnaW5Nb2R1bGVYMTEuY3BwCmluZGV4IDM2Mjc1MzkyYTNjMGI0
N2U3OWNkY2EwZWI2MzMxMGFlNmVmOGE5ZjQuLmFjZmNmMDAyMzM4NGEyOWJmYTc0YjI0YmZkY2Qw
ZmEyODRmOWIxY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05l
dHNjYXBlL3gxMS9OZXRzY2FwZVBsdWdpbk1vZHVsZVgxMS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUveDExL05ldHNjYXBlUGx1Z2luTW9kdWxlWDExLmNw
cApAQCAtNzYsNyArNzYsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luTW9kdWxlOjpwYXJzZU1JTUVE
ZXNjcmlwdGlvbihjb25zdCBTdHJpbmcmIG1pbWVEZXNjcmlwdGlvbiwgVgogICAgIEFTU0VSVF9B
UkcocmVzdWx0LCByZXN1bHQuaXNFbXB0eSgpKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVz
OwotICAgIG1pbWVEZXNjcmlwdGlvbi5sb3dlcigpLnNwbGl0KFVDaGFyKCc7JyksIGZhbHNlLCB0
eXBlcyk7CisgICAgbWltZURlc2NyaXB0aW9uLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkuc3Bs
aXQoVUNoYXIoJzsnKSwgZmFsc2UsIHR5cGVzKTsKICAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eSh0eXBlcy5zaXplKCkpOwogCiAgICAgc2l6ZV90IG1pbWVJbmZvQ291bnQgPSAwOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCmlu
ZGV4IDQxNjk3NzY3Y2E3Y2U2ZTNkNzYwMjg2OTczYzNlNDNmNGMxOWFiMTUuLjczYTA1OTkwYzQy
Mzc1N2IwZTNlMTk2YWFmMThhODk2MzM4OWE0MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKQEAgLTU2Myw3ICs1NjMsNyBAQCB2b2lk
IGV3a19jb250ZXh0X3ByZWZlcnJlZF9sYW5ndWFnZXNfc2V0KEVpbmFfTGlzdCogbGFuZ3VhZ2Vz
KQogICAgICAgICBFaW5hX0xpc3QqIGw7CiAgICAgICAgIHZvaWQqIGRhdGE7CiAgICAgICAgIEVJ
TkFfTElTVF9GT1JFQUNIKGxhbmd1YWdlcywgbCwgZGF0YSkKLSAgICAgICAgICAgIHByZWZlcnJl
ZExhbmd1YWdlcy5hcHBlbmQoU3RyaW5nOjpmcm9tVVRGOChzdGF0aWNfY2FzdDxjaGFyKj4oZGF0
YSkpLmxvd2VyKCkucmVwbGFjZSgiXyIsICItIikpOworICAgICAgICAgICAgcHJlZmVycmVkTGFu
Z3VhZ2VzLmFwcGVuZChTdHJpbmc6OmZyb21VVEY4KHN0YXRpY19jYXN0PGNoYXIqPihkYXRhKSku
Y29udmVydFRvQVNDSUlMb3dlcmNhc2UoKS5yZXBsYWNlKCJfIiwgIi0iKSk7CiAgICAgfQogCiAg
ICAgV2ViQ29yZTo6b3ZlcnJpZGVVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzKHByZWZlcnJlZExhbmd1
YWdlcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYkNvbnRleHQuY3BwCmluZGV4IGQ2ZjVlMTM4NWU1ZDg5ZTM0MGVjNDI3MDE0MjQwNjNlNWFj
OTE5NWEuLmFmNmQ4NzI3NjRhOWIxMmJlZjYyMWFhMzdkNzQ5Mjc1NmI3NjFkNGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQu
Y3BwCkBAIC05NjgsNyArOTY4LDcgQEAgdm9pZCB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3ByZWZl
cnJlZF9sYW5ndWFnZXMoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCwgY29uc3QKIAogICAgIFZl
Y3RvcjxTdHJpbmc+IGxhbmd1YWdlczsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgbGFuZ3VhZ2VM
aXN0W2ldOyArK2kpCi0gICAgICAgIGxhbmd1YWdlcy5hcHBlbmQoU3RyaW5nOjpmcm9tVVRGOChs
YW5ndWFnZUxpc3RbaV0pLmxvd2VyKCkucmVwbGFjZSgiXyIsICItIikpOworICAgICAgICBsYW5n
dWFnZXMuYXBwZW5kKFN0cmluZzo6ZnJvbVVURjgobGFuZ3VhZ2VMaXN0W2ldKS5jb252ZXJ0VG9B
U0NJSUxvd2VyY2FzZSgpLnJlcGxhY2UoIl8iLCAiLSIpKTsKIAogICAgIFdlYkNvcmU6Om92ZXJy
aWRlVXNlclByZWZlcnJlZExhbmd1YWdlcyhsYW5ndWFnZXMpOwogICAgIFdlYkNvcmU6Omxhbmd1
YWdlRGlkQ2hhbmdlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1
Z2lucy9QbHVnaW5JbmZvU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdp
bnMvUGx1Z2luSW5mb1N0b3JlLmNwcAppbmRleCA2NWUzODQyNDY4ODAwMzYwZDc0NDE1Yjc2MDMz
NjFlMDVjNWM4YTYyLi44YTk4YzYyMDFhZDc4ZTc3NjExZjY4NzBkZTcyNzQ4ZTZjMmJlMWEyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5JbmZvU3Rv
cmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbkluZm9T
dG9yZS5jcHAKQEAgLTEzOCw5ICsxMzgsNyBAQCBQbHVnaW5Nb2R1bGVJbmZvIFBsdWdpbkluZm9T
dG9yZTo6ZmluZFBsdWdpbkZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbgogICAg
ICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBtaW1lQ2xhc3NJ
bmZvIDogcGx1Z2luLmluZm8ubWltZXMpIHsKLSAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBleHRlbnNpb25zID0gbWltZUNsYXNzSW5mby5leHRlbnNpb25zOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAoc3RkOjpmaW5kKGV4dGVuc2lvbnMuYmVnaW4oKSwgZXh0ZW5zaW9u
cy5lbmQoKSwgZXh0ZW5zaW9uKSAhPSBleHRlbnNpb25zLmVuZCgpKSB7CisgICAgICAgICAgICBp
ZiAobWltZUNsYXNzSW5mby5leHRlbnNpb25zLmNvbnRhaW5zKGV4dGVuc2lvbikpIHsKICAgICAg
ICAgICAgICAgICAvLyBXZSBmb3VuZCBhIHN1cHBvcnRlZCBleHRlbnNpb24sIHNldCB0aGUgY29y
cmVjdCBNSU1FIHR5cGUuCiAgICAgICAgICAgICAgICAgbWltZVR5cGUgPSBtaW1lQ2xhc3NJbmZv
LnR5cGU7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHBsdWdpbjsKQEAgLTE2MCwxMSArMTU4LDEx
IEBAIHN0YXRpYyBpbmxpbmUgU3RyaW5nIHBhdGhFeHRlbnNpb24oY29uc3QgVVJMJiB1cmwpCiAg
ICAgICAgIGlmIChleHRlbnNpb25Qb3MgIT0gbm90Rm91bmQpCiAgICAgICAgICAgICBleHRlbnNp
b24gPSBmaWxlbmFtZS5zdWJzdHJpbmcoZXh0ZW5zaW9uUG9zICsgMSk7CiAgICAgfQotICAgIAot
ICAgIHJldHVybiBleHRlbnNpb247CisgICAgcmV0dXJuIGV4dGVuc2lvbi5jb252ZXJ0VG9BU0NJ
SUxvd2VyY2FzZSgpOwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQorCiBQbHVnaW5Nb2R1bGVM
b2FkUG9saWN5IFBsdWdpbkluZm9TdG9yZTo6ZGVmYXVsdExvYWRQb2xpY3lGb3JQbHVnaW4oY29u
c3QgUGx1Z2luTW9kdWxlSW5mbyYpCiB7CiAgICAgcmV0dXJuIFBsdWdpbk1vZHVsZUxvYWROb3Jt
YWxseTsKQEAgLTE5MCw3ICsxODgsNyBAQCBQbHVnaW5Nb2R1bGVJbmZvIFBsdWdpbkluZm9TdG9y
ZTo6ZmluZFBsdWdpbihTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBVUkwmIHVybCwgUAogICAgIH0K
IAogICAgIC8vIE5leHQsIGNoZWNrIGlmIGFueSBwbHVnLWlucyBjbGFpbSB0byBzdXBwb3J0IHRo
ZSBVUkwgZXh0ZW5zaW9uLgotICAgIFN0cmluZyBleHRlbnNpb24gPSBwYXRoRXh0ZW5zaW9uKHVy
bCkubG93ZXIoKTsKKyAgICBTdHJpbmcgZXh0ZW5zaW9uID0gcGF0aEV4dGVuc2lvbih1cmwpOwog
ICAgIGlmICghZXh0ZW5zaW9uLmlzTnVsbCgpICYmIG1pbWVUeXBlLmlzRW1wdHkoKSkgewogICAg
ICAgICBQbHVnaW5Nb2R1bGVJbmZvIHBsdWdpbiA9IGZpbmRQbHVnaW5Gb3JFeHRlbnNpb24oZXh0
ZW5zaW9uLCBtaW1lVHlwZSwgYWxsb3dlZFBsdWdpblR5cGVzKTsKICAgICAgICAgaWYgKCFwbHVn
aW4ucGF0aC5pc051bGwoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHAKaW5kZXggNzMxNGEzODAyYTdkMjFlMzQ3YWM2YWI3YWViNGFkY2YxOWRmNjVhYS4uNzE2NTFl
YWFlZjUzY2Q2ZDBiOWUxMDdlYTA3NTA4NDU4NWY5M2Y3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTE4NjMsNyArMTg2Myw3IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpmaW5kUGx1Z2luKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHVpbnQzMl90IHByb2Nl
c3NUeXBlLCBjb25zCiAKICAgICBNRVNTQUdFX0NIRUNLX1VSTCh1cmxTdHJpbmcpOwogCi0gICAg
bmV3TWltZVR5cGUgPSBtaW1lVHlwZS5sb3dlcigpOworICAgIG5ld01pbWVUeXBlID0gbWltZVR5
cGUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKICAgICBwbHVnaW5Mb2FkUG9saWN5ID0gUGx1
Z2luTW9kdWxlTG9hZE5vcm1hbGx5OwogCiAgICAgUGx1Z2luRGF0YTo6QWxsb3dlZFBsdWdpblR5
cGVzIGFsbG93ZWRQbHVnaW5UeXBlcyA9IGFsbG93T25seUFwcGxpY2F0aW9uUGx1Z2lucyA/IFBs
dWdpbkRhdGE6Ok9ubHlBcHBsaWNhdGlvblBsdWdpbnMgOiBQbHVnaW5EYXRhOjpBbGxQbHVnaW5z
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKaW5kZXggNjJi
ODVlY2VhMDVkMTM4MTI2MGZiMDY2OWFkZjhkY2NiMWEyMGQ3MC4uYmYzY2U1ZDhkZmVjODIxYTIx
MDA4OWM1NjhjNmVlMGJjNzhmYmI4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Bvb2wuY3BwCkBAIC05MTMsOSArOTEzLDkgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
cmVnaXN0ZXJVUkxTY2hlbWVBc0NPUlNFbmFibGVkKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQog
ICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJVUkxT
Y2hlbWVBc0NPUlNFbmFibGVkKHVybFNjaGVtZSkpOwogfQogCi1IYXNoU2V0PFN0cmluZz4mIFdl
YlByb2Nlc3NQb29sOjpnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMo
KQorSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIFdlYlByb2Nlc3NQ
b29sOjpnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKQogewotICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZz4+IHNldDsKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4+
IHNldDsKICAgICByZXR1cm4gc2V0OwogfQogCkBAIC05MjQsMTAgKzkyNCw5IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2Nv
bEhhbmRsZXJzKGNvbnN0CiAgICAgaWYgKCF1cmxTY2hlbWUpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFN0cmluZyBzY2hlbWVMb3dlciA9IHVybFNjaGVtZS5sb3dlcigpOwotICAgIGdsb2JhbFVS
TFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpLmFkZChzY2hlbWVMb3dlcik7Cisg
ICAgZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkuYWRkKHVybFNj
aGVtZSk7CiAgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IGFsbFByb2Nlc3NQb29scygpKQot
ICAgICAgICBwcm9jZXNzUG9vbC0+cmVnaXN0ZXJTY2hlbWVGb3JDdXN0b21Qcm90b2NvbChzY2hl
bWVMb3dlcik7CisgICAgICAgIHByb2Nlc3NQb29sLT5yZWdpc3RlclNjaGVtZUZvckN1c3RvbVBy
b3RvY29sKHVybFNjaGVtZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJH
bG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMoY29uc3QgU3RyaW5n
JiB1cmxTY2hlbWUpCkBAIC05MzUsMTAgKzkzNCw5IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVu
cmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMoY29u
CiAgICAgaWYgKCF1cmxTY2hlbWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZyBzY2hl
bWVMb3dlciA9IHVybFNjaGVtZS5sb3dlcigpOwotICAgIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3Vz
dG9tUHJvdG9jb2xIYW5kbGVycygpLnJlbW92ZShzY2hlbWVMb3dlcik7CisgICAgZ2xvYmFsVVJM
U2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkucmVtb3ZlKHVybFNjaGVtZSk7CiAg
ICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IGFsbFByb2Nlc3NQb29scygpKQotICAgICAgICBw
cm9jZXNzUG9vbC0+dW5yZWdpc3RlclNjaGVtZUZvckN1c3RvbVByb3RvY29sKHNjaGVtZUxvd2Vy
KTsKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPnVucmVnaXN0ZXJTY2hlbWVGb3JDdXN0b21Qcm90b2Nv
bCh1cmxTY2hlbWUpOwogfQogCiAjaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKaW5kZXggZmYwNmNmNzU1MzUwNWM1
NGVkZGE2OWJmZTg0YTM4NzJmYWE3ZDAyMi4uYjdjNzVkNjA1NzE3OWJlYzA4ZjZhZWM2MDJkMzE5
ZTg3YzYyZTU4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nl
c3NQb29sLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgK
QEAgLTMxNyw3ICszMTcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWdpc3RlclNjaGVtZUZvckN1
c3RvbVByb3RvY29sKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgdW5yZWdpc3RlclNjaGVtZUZv
ckN1c3RvbVByb3RvY29sKGNvbnN0IFN0cmluZyYpOwogCi0gICAgc3RhdGljIEhhc2hTZXQ8U3Ry
aW5nPiYgZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCk7CisgICAg
c3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiBnbG9iYWxV
UkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKTsKICAgICBzdGF0aWMgdm9pZCBy
ZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhjb25z
dCBTdHJpbmcmKTsKICAgICBzdGF0aWMgdm9pZCB1bnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNI
YXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbnN0IFN0cmluZyYpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVn
aW4uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNj
YXBlUGx1Z2luLmNwcAppbmRleCAyNDgzOTgzMmMwNTdhYTVlYmZiYzc4MjhmZjkxZmFlOTcyNTI4
MDM3Li5iOWIyOTZjZTFiZTg2ZGRlMjc2ZDdmMjY0NDMwYzI1MDY4ZmE5OTRmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVn
aW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9O
ZXRzY2FwZVBsdWdpbi5jcHAKQEAgLTYzOCw3ICs2MzgsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2lu
Ojppbml0aWFsaXplKGNvbnN0IFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiAKICNpZiBQTFVHSU5f
QVJDSElURUNUVVJFKE1BQykKICAgICAgICAgaWYgKG1fcGx1Z2luTW9kdWxlLT5wbHVnaW5RdWly
a3MoKS5jb250YWlucyhQbHVnaW5RdWlya3M6OldhbnRzTG93ZXJjYXNlUGFyYW1ldGVyTmFtZXMp
KQotICAgICAgICAgICAgcGFyYW1ldGVyTmFtZSA9IHBhcmFtZXRlck5hbWUubG93ZXIoKTsKKyAg
ICAgICAgICAgIHBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXJOYW1lLmNvbnZlcnRUb0FTQ0lJTG93
ZXJjYXNlKCk7CiAjZW5kaWYKIAogICAgICAgICBwYXJhbU5hbWVzLmFwcGVuZChwYXJhbWV0ZXJO
YW1lLnV0ZjgoKSk7CkBAIC02NzUsNyArNjc1LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbjo6aW5p
dGlhbGl6ZShjb25zdCBQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogICAgIGlmIChtX3BsdWdpbk1v
ZHVsZS0+cGx1Z2luUXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtzOjpNYWtlT3BhcXVlVW5s
ZXNzVHJhbnNwYXJlbnRTaWx2ZXJsaWdodEJhY2tncm91bmRBdHRyaWJ1dGVFeGlzdHMpKSB7CiAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVycy5uYW1lcy5zaXplKCk7ICsr
aSkgewogICAgICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBhcmFt
ZXRlcnMubmFtZXNbaV0sICJiYWNrZ3JvdW5kIikpIHsKLSAgICAgICAgICAgICAgICBzZXRJc1Ry
YW5zcGFyZW50KGlzVHJhbnNwYXJlbnRTaWx2ZXJsaWdodEJhY2tncm91bmRWYWx1ZShwYXJhbWV0
ZXJzLnZhbHVlc1tpXS5sb3dlcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SXNUcmFuc3BhcmVu
dChpc1RyYW5zcGFyZW50U2lsdmVybGlnaHRCYWNrZ3JvdW5kVmFsdWUocGFyYW1ldGVycy52YWx1
ZXNbaV0uY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSkpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQu
Y3BwCmluZGV4IDk4ZmU5OThiMDFhZTRhYWYwMDZjMWUxZWQxNzJkZTA0ODA2MTI4ZDMuLmI4OWQ3
YTFiMzdlMzAzYzVhYTQ5NTYzY2U4NmFlMmFkZjRlOWViODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVM
b2FkZXJDbGllbnQuY3BwCkBAIC0xNTA4LDE0ICsxNTA4LDExIEBAIFBhc3NSZWZQdHI8V2lkZ2V0
PiBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBJbnRT
aXplJiBwCiAKIHN0YXRpYyBib29sIHBsdWdpblN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFBsdWdp
bkRhdGEmIHBsdWdpbkRhdGEsIGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKQogewotICAgIEFTU0VS
VChleHRlbnNpb24ubG93ZXIoKSA9PSBleHRlbnNpb24pOwotCisgICAgQVNTRVJUKGV4dGVuc2lv
bi5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpID09IGV4dGVuc2lvbik7CiAgICAgVmVjdG9yPE1p
bWVDbGFzc0luZm8+IG1pbWVzOwogICAgIFZlY3RvcjxzaXplX3Q+IG1pbWVQbHVnaW5JbmRpY2Vz
OwogICAgIHBsdWdpbkRhdGEuZ2V0V2ViVmlzaWJsZU1pbWVzQW5kUGx1Z2luSW5kaWNlcyhtaW1l
cywgbWltZVBsdWdpbkluZGljZXMpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWltZXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgTWltZUNsYXNzSW5mbyYgbWltZUNsYXNzSW5m
byA9IG1pbWVzW2ldOwotCisgICAgZm9yIChhdXRvJiBtaW1lQ2xhc3NJbmZvIDogbWltZXMpIHsK
ICAgICAgICAgaWYgKG1pbWVDbGFzc0luZm8uZXh0ZW5zaW9ucy5jb250YWlucyhleHRlbnNpb24p
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTUyNCw0MiArMTUyMSwzNyBA
QCBzdGF0aWMgYm9vbCBwbHVnaW5TdXBwb3J0c0V4dGVuc2lvbihjb25zdCBQbHVnaW5EYXRhJiBw
bHVnaW5EYXRhLCBjb25zdCBTdHJpbmcmCiAKIE9iamVjdENvbnRlbnRUeXBlIFdlYkZyYW1lTG9h
ZGVyQ2xpZW50OjpvYmplY3RDb250ZW50VHlwZShjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiBtaW1lVHlwZUluKQogewotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBtZXJnZWQgd2l0
aCBXZWJDb3JlOjpGcmFtZUxvYWRlcjo6ZGVmYXVsdE9iamVjdENvbnRlbnRUeXBlIHdoZW4gdGhl
IHBsdWdpbiBjb2RlCi0gICAgLy8gaXMgY29uc29saWRhdGVkLgorICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCBldmVudHVhbGx5IGJlIG1lcmdlZCB3aXRoIFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpk
ZWZhdWx0T2JqZWN0Q29udGVudFR5cGUuCiAKICAgICBTdHJpbmcgbWltZVR5cGUgPSBtaW1lVHlw
ZUluOwogICAgIGlmIChtaW1lVHlwZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgU3RyaW5nIGV4dGVu
c2lvbiA9IHVybC5wYXRoKCkuc3Vic3RyaW5nKHVybC5wYXRoKCkucmV2ZXJzZUZpbmQoJy4nKSAr
IDEpLmxvd2VyKCk7CisgICAgICAgIFN0cmluZyBwYXRoID0gdXJsLnBhdGgoKTsKKyAgICAgICAg
YXV0byBkb3RQb3NpdGlvbiA9IHBhdGgucmV2ZXJzZUZpbmQoJy4nKTsKKyAgICAgICAgaWYgKGRv
dFBvc2l0aW9uID09IG5vdEZvdW5kKQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdENvbnRlbnRG
cmFtZTsKKyAgICAgICAgU3RyaW5nIGV4dGVuc2lvbiA9IHBhdGguc3Vic3RyaW5nKGRvdFBvc2l0
aW9uICsgMSkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKIAogICAgICAgICAvLyBUcnkgdG8g
Z3Vlc3MgdGhlIE1JTUUgdHlwZSBmcm9tIHRoZSBleHRlbnNpb24uCiAgICAgICAgIG1pbWVUeXBl
ID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JFeHRlbnNpb24oZXh0ZW5zaW9uKTsK
LQogICAgICAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAvLyBDaGVj
ayBpZiB0aGVyZSdzIGEgcGx1Zy1pbiBhcm91bmQgdGhhdCBjYW4gaGFuZGxlIHRoZSBleHRlbnNp
b24uCiAgICAgICAgICAgICBpZiAoV2ViUGFnZSogd2ViUGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkg
ewogICAgICAgICAgICAgICAgIGlmIChwbHVnaW5TdXBwb3J0c0V4dGVuc2lvbih3ZWJQYWdlLT5j
b3JlUGFnZSgpLT5wbHVnaW5EYXRhKCksIGV4dGVuc2lvbikpCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBPYmplY3RDb250ZW50TmV0c2NhcGVQbHVnaW47CiAgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gT2JqZWN0Q29udGVudEZyYW1lOwogICAgICAgICB9CiAgICAgfQogCi0g
ICAgaWYgKG1pbWVUeXBlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIE9iamVjdENvbnRlbnRG
cmFtZTsKLQotICAgIGJvb2wgcGx1Z0luU3VwcG9ydHNNSU1FVHlwZSA9IGZhbHNlOwotICAgIGlm
IChXZWJQYWdlKiB3ZWJQYWdlID0gbV9mcmFtZS0+cGFnZSgpKSB7Ci0gICAgICAgIGNvbnN0IFBs
dWdpbkRhdGEmIHBsdWdpbkRhdGEgPSB3ZWJQYWdlLT5jb3JlUGFnZSgpLT5wbHVnaW5EYXRhKCk7
Ci0gICAgICAgIGlmIChwbHVnaW5EYXRhLnN1cHBvcnRzTWltZVR5cGUobWltZVR5cGUsIFBsdWdp
bkRhdGE6OkFsbFBsdWdpbnMpICYmIHdlYkZyYW1lKCktPmNvcmVGcmFtZSgpLT5sb2FkZXIoKS5z
dWJmcmFtZUxvYWRlcigpLmFsbG93UGx1Z2lucygpKQotICAgICAgICAgICAgcGx1Z0luU3VwcG9y
dHNNSU1FVHlwZSA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKHBsdWdpbkRhdGEuc3VwcG9ydHNN
aW1lVHlwZShtaW1lVHlwZSwgUGx1Z2luRGF0YTo6T25seUFwcGxpY2F0aW9uUGx1Z2lucykpCi0g
ICAgICAgICAgICBwbHVnSW5TdXBwb3J0c01JTUVUeXBlID0gdHJ1ZTsKLSAgICB9Ci0gICAgCiAg
ICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZShtaW1lVHlw
ZSkpCiAgICAgICAgIHJldHVybiBPYmplY3RDb250ZW50SW1hZ2U7CiAKLSAgICBpZiAocGx1Z0lu
U3VwcG9ydHNNSU1FVHlwZSkKLSAgICAgICAgcmV0dXJuIE9iamVjdENvbnRlbnROZXRzY2FwZVBs
dWdpbjsKKyAgICBpZiAoV2ViUGFnZSogd2ViUGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkgeworICAg
ICAgICBhdXRvIGFsbG93ZWRQbHVnaW5UeXBlcyA9IHdlYkZyYW1lKCktPmNvcmVGcmFtZSgpLT5s
b2FkZXIoKS5zdWJmcmFtZUxvYWRlcigpLmFsbG93UGx1Z2lucygpCisgICAgICAgICAgICA/IFBs
dWdpbkRhdGE6OkFsbFBsdWdpbnMgOiBQbHVnaW5EYXRhOjpPbmx5QXBwbGljYXRpb25QbHVnaW5z
OworICAgICAgICBpZiAod2ViUGFnZS0+Y29yZVBhZ2UoKS0+cGx1Z2luRGF0YSgpLnN1cHBvcnRz
TWltZVR5cGUobWltZVR5cGUsIGFsbG93ZWRQbHVnaW5UeXBlcykpCisgICAgICAgICAgICByZXR1
cm4gT2JqZWN0Q29udGVudE5ldHNjYXBlUGx1Z2luOworICAgIH0KIAogICAgIGlmIChNSU1FVHlw
ZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUobWltZVR5cGUpKQogICAgICAg
ICByZXR1cm4gT2JqZWN0Q29udGVudEZyYW1lOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270798</attachid>
            <date>2016-02-06 10:14:43 -0800</date>
            <delta_ts>2016-02-06 12:55:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-153905-20160206101419.patch</filename>
            <type>text/plain</type>
            <size>107057</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk2MjE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
NmU3ODY1NDVlMDdjZjg4YzUyNGUwMTYxNTA5OGVkZTE4MGVlNDk1Li5iN2FkMjFhY2NlNWFmZTA5
YmEwZTBlZGI3Nzc5Zjk4MzI0NmMyYjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAxNi0wMi0wNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgRmluaXNoIGF1ZGl0aW5nIGNhbGwgc2l0ZXMgb2YgdXBwZXIoKSBhbmQgbG93ZXIo
KSwgZWxpbWluYXRlIG1hbnksIGFuZCByZW5hbWUgdGhlIGZ1bmN0aW9ucworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzOTA1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBydW50aW1lL0ludGxPYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDOjpjYW5vbmljYWxMYW5nVGFnKTogVXNlIGNvbnZlclRvQVNDSUlV
cHBlcmNhc2Ugb24gdGhlIGxhbmd1YWdlIHRhZy4KKworICAgICAgICAqIHJ1bnRpbWUvU3RyaW5n
UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVG9Mb3dlckNhc2Up
OiBUd2VhayBzdHlsZSBhbmQgdXBkYXRlIGZvciBuYW1lIGNoYW5nZS4KKyAgICAgICAgKEpTQzo6
c3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2UpOiBEaXR0by4KKwogMjAxNi0wMi0wNiAgQ29tbWl0
IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cm9sbGluZyBvdXQgcjE5NjEwNC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIv
U291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggOTA5NzYxMzc0MmE1YWFmMTgwZjcxZGNiMmJiNTE3
MGI4MzBlOTc3ZS4uMWM3YmIyYjdhMGJjZDUwODExNmNiNDE3YzIzY2QwZjMxMjg0YWJiNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwzMCBAQAorMjAxNi0wMi0wNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5j
b20+CisKKyAgICAgICAgRmluaXNoIGF1ZGl0aW5nIGNhbGwgc2l0ZXMgb2YgdXBwZXIoKSBhbmQg
bG93ZXIoKSwgZWxpbWluYXRlIG1hbnksIGFuZCByZW5hbWUgdGhlIGZ1bmN0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzOTA1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvdGV4dC9BdG9t
aWNTdHJpbmcuY3BwOgorICAgICAgICAoV1RGOjpBdG9taWNTdHJpbmc6Omxvd2VyKTogRGVsZXRl
ZC4KKyAgICAgICAgKiB3dGYvdGV4dC9BdG9taWNTdHJpbmcuaDogRGVsZXRlZCB0aGUgbG93ZXIg
ZnVuY3Rpb24uCisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmNwcDoKKyAgICAgICAg
KFdURjo6U3RyaW5nSW1wbDo6Y29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZSk6IFJlbmFt
ZWQgZnJvbSBsb3dlci4KKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y29udmVydFRvVXBwZXJj
YXNlV2l0aG91dExvY2FsZSk6IFJlbmFtZWQgZnJvbSB1cHBlci4KKyAgICAgICAgKFdURjo6U3Ry
aW5nSW1wbDo6Y29udmVydFRvTG93ZXJjYXNlV2l0aExvY2FsZSk6IFJlbmFtZWQgZnJvbSBsb3dl
ci4KKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y29udmVydFRvVXBwZXJjYXNlV2l0aExvY2Fs
ZSk6IFJlbmFtZWQgZnJvbSB1cHBlci4KKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Zm9sZENh
c2UpOiBBZGRlZCBmYXN0IGNhc2VzIGZvciBBU0NJSSBzaW5jZSB0aGlzIGlzCisgICAgICAgIG5v
dyB1c2VkIGluIHNvbWUgbW9yZS1wZXJmb3JtYW5jZS1jcml0aWNhbCBjb2RlLgorICAgICAgICAq
IHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDogUmVuYW1lZCBsb3dlciBhbmQgdXBwZXIuCisKKyAgICAg
ICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmc6OmNvbnZl
cnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGUpOiBSZW5hbWVkIGZyb20gbG93ZXIuCisgICAgICAg
IChXVEY6OlN0cmluZzo6Y29udmVydFRvVXBwZXJjYXNlV2l0aG91dExvY2FsZSk6IFJlbmFtZWQg
ZnJvbSB1cHBlci4KKyAgICAgICAgKFdURjo6U3RyaW5nOjpjb252ZXJ0VG9Mb3dlcmNhc2VXaXRo
TG9jYWxlKTogUmVuYW1lZCBmcm9tIGxvd2VyLgorICAgICAgICAoV1RGOjpTdHJpbmc6OmNvbnZl
cnRUb1VwcGVyY2FzZVdpdGhMb2NhbGUpOiBSZW5hbWVkIGZyb20gdXBwZXIuCisgICAgICAgICog
d3RmL3RleHQvV1RGU3RyaW5nLmg6IFJlbmFtZWQgbG93ZXIgYW5kIHVwcGVyLiBSZW1vdmVkIHVu
bmVlZGVkIGNvbW1lbnQuCisKIDIwMTYtMDItMDMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIENvbnZlcnQgYW5vdGhlciBiYXRjaCBvZiBTdHJpbmc6Omxvd2VyIGNh
bGxzaXRlcyB0byBzb21ldGhpbmcgYmV0dGVyLCB0eXBpY2FsbHkgY29udmVydFRvQVNDSUlMb3dl
cmNhc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCA1NGQ4ZjY0OTNkOTgxYjU2YzI3MDQyNTFhNTA1YTdhMjkwNTQw
MGNjLi4wY2IwMTU3MThjZjMxYTI5ODQwNzI0OWFhODIyMDYwOWZhYzgxYzEwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTMwIEBACisyMDE2LTAyLTA2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxl
LmNvbT4KKworICAgICAgICBGaW5pc2ggYXVkaXRpbmcgY2FsbCBzaXRlcyBvZiB1cHBlcigpIGFu
ZCBsb3dlcigpLCBlbGltaW5hdGUgbWFueSwgYW5kIHJlbmFtZSB0aGUgZnVuY3Rpb25zCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTM5MDUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE1vZHVsZXMvbWVk
aWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2U6
OmlzVHlwZVN1cHBvcnRlZCk6IFVzZSBjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSBvbiBNSU1FIHR5
cGUuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0VGV4dCk6IFVzZSBu
ZXcgbmFtZXMgZm9yIGxvd2VyIGFuZCB1cHBlci4gQWxzbworICAgICAgICB0d2Vha2VkIHN0eWxl
IGEgdGlueSBiaXQgYW5kIHVzZWQgdV90b3VwcGVyIHJhdGhlciB0aGFuIGNvbnZlcnRpbmcgYW4g
ZW50aXJlCisgICAgICAgIHN0cmluZyB0byB1cHBlcmNhc2UuCisKKyAgICAgICAgKiBkb20vRG9j
dW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmFkZEltYWdlRWxlbWVudEJ5
Q2FzZUZvbGRlZFVzZW1hcCk6IFJlbmFtZWQgdG8gcmVmbGVjdCB0aGUgdXNlCisgICAgICAgIG9m
IGNhc2UgZm9sZGluZyByYXRoZXIgdGhhbiBsb3dlcmNhc2luZy4KKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50OjpyZW1vdmVJbWFnZUVsZW1lbnRCeUNhc2VGb2xkZWRVc2VtYXApOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjppbWFnZUVsZW1lbnRCeUNhc2VGb2xkZWRVc2Vt
YXApOiBEaXR0by4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDogRGl0dG8uCisgICAgICAgICog
ZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE9y
ZGVyZWRNYXA6OmdldEVsZW1lbnRCeUNhc2VGb2xkZWRNYXBOYW1lKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeUNhc2VGb2xkZWRVc2Vt
YXApOiBEaXR0by4KKyAgICAgICAgKiBkb20vRG9jdW1lbnRPcmRlcmVkTWFwLmg6IERpdHRvLgor
CisgICAgICAgICogZG9tL1RyZWVTY29wZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU2Nv
cGU6OmdldEltYWdlTWFwKTogUmVtb3ZlZCB1bm5lZWRlZCBzcGVjaWFsIGNhc2UgZm9yIG51bGwg
c3RyaW5nLgorICAgICAgICBTaW1wbGlmaWVkIGxvZ2ljIGZvciBjYXNlcyB3aGVyZSB0aGUgVVJM
IGRvZXMgbm90IGhhdmUgYSAiIyIgY2hhcmFjdGVyIGluIGl0LgorICAgICAgICBVc2UgY2FzZSBm
b2xkaW5nIGluc3RlYWQgb2YgbG93ZXJjYXNlLgorCisgICAgICAgICogZWRpdGluZy9jb2NvYS9I
VE1MQ29udmVydGVyLm1tOgorICAgICAgICAoSFRNTENvbnZlcnRlcjo6X3Byb2Nlc3NUZXh0KTog
UmVtb3ZlZCB1bm5lZGVkIHNwZWNpYWwgY2FzZSBmb3IgdGhlIGVtcHR5IHN0cmluZy4KKyAgICAg
ICAgVXNlIG1ha0NhcGl0YWxpemVkIGluc3RlYWQgb2YgQ29jb2EgZnVuY3Rpb24gZm9yICJjYXBp
dGFsaXplIi4gVXNlIHVwcGVyIGFuZCBsb3dlcgorICAgICAgICBmdW5jdGlvbnMgYnkgdGhlaXIg
bmV3IG5hbWVzLgorCisgICAgICAgICogaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKTogVXNlIGNhc2Ug
Zm9sZGluZyBpbnN0ZWFkIG9mCisgICAgICAgIGxvd2VyYXNpbmcgZm9yIHRoZSB1c2VtYXAgYXR0
cmlidXRlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6aW5zZXJ0ZWRJbnRv
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50OjpyZW1vdmVkRnJv
bSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6bWF0Y2hlc0Nh
c2VGb2xkZWRVc2VtYXApOiBEaXR0by4KKyAgICAgICAgKiBodG1sL0hUTUxJbWFnZUVsZW1lbnQu
aDogUmVuYW1lIHNpbmNlIHVzZW1hcCBpcyBjYXNlIGZvbGRlZCBub3csIG5vdCBsb3dlcmNhc2Vk
LgorCisgICAgICAgICogaHRtbC9IVE1MTWFwRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTWFwRWxlbWVudDo6aW1hZ2VFbGVtZW50KTogVXNlIGNhc2UgZm9sZGluZyBpbnN0ZWFk
IG9mIGxvd2VyY2FzaW5nCisgICAgICAgIGZvciB1c2VtYXAuCisgICAgICAgIChXZWJDb3JlOjpI
VE1MTWFwRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOiBEaXR0by4KKworICAgICAgICAqIHBsYXRm
b3JtL0xhbmd1YWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbm9uaWNhbExhbmd1YWdlSWRl
bnRpZmllcik6IFVzZSBjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSBmb3IgbGFuZ3VhZ2UgY29kZS4K
KyAgICAgICAgKFdlYkNvcmU6OmluZGV4T2ZCZXN0TWF0Y2hpbmdMYW5ndWFnZUluTGlzdCk6IERp
dHRvLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFw
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OnNoYXBlSGFyZkJ1enpS
dW5zKTogVXNlIG5ldyBuYW1lIGZvciB0aGUgdXBwZXIgZnVuY3Rpb24uCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNl
Q29udGVudFR5cGVPcHRpb25zSGVhZGVyKTogVXNlIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlIGluc3RlYWQKKyAgICAgICAgb2YgbG93ZXJjYXNpbmcgdG8gY2hlY2sgZm9yIGEgc3BlY2lm
aWMgaGVhZGVyIHZhbHVlLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9NSU1FSGVhZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJldHJpZXZlS2V5VmFsdWVQYWlycyk6IFVzZSBjb252
ZXJ0VG9BU0NJSUxvd2VyY2FzZSBmb3IgTUlNRSBoZWFkZXIgbmFtZS4KKyAgICAgICAgKFdlYkNv
cmU6Ok1JTUVIZWFkZXI6OnBhcnNlQ29udGVudFRyYW5zZmVyRW5jb2RpbmcpOiBVc2UgZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UKKyAgICAgICAgaW5zdGVhZCBvZiBsb3dlcmNhc2luZy4K
KworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjphbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlSG9zdHMpOiBNYWtl
IHRoaXMgaGFzaCBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlLgorICAgICAgICAoV2ViQ29yZTo6Y2xp
ZW50Q2VydGlmaWNhdGVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRs
ZTo6Y3JlYXRlQ0ZVUkxDb25uZWN0aW9uKTogUmVtb3ZlIGNhbGwgdG8gbG93ZXIgc2luY2UgdGhl
CisgICAgICAgIHNldCBpcyBub3cgQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZS4KKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlSGFuZGxlOjpzZXRIb3N0QWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNldENsaWVudENlcnRp
ZmljYXRlKTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2ll
SmFyQ3VybC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXROZXRzY2FwZUNvb2tpZUZvcm1hdCk6
IFVzZSBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSBpbnN0ZWFkIG9mCisgICAgICAgIGxv
d2VyY2FzaW5nLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL011bHRpcGFydEhh
bmRsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNdWx0aXBhcnRIYW5kbGU6OmRpZFJlY2VpdmVS
ZXNwb25zZSk6IFVzZSBjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSB0bworICAgICAgICBtYWtlIGEg
TUlNRSB0eXBlIGxvd2VyY2FzZS4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9S
ZXNvdXJjZUhhbmRsZUN1cmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OnNldEhvc3RBbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlKTogUmVtb3ZlZCB1bm5lZWRlZAorICAg
ICAgICBjb252ZXJzaW9uIHRvIGxvd2VyY2FzZSBub3cgdGhhdCB0aGUgc2V0IGlzIEFTQ0lJIGNh
c2UtaW5zZW5zaXRpdmUuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c2V0Q2xp
ZW50Q2VydGlmaWNhdGUpOiBSZW1vdmVkIGNvZGUgdGhhdCBwb3B1bGF0ZXMgYSBtYXAKKyAgICAg
ICAgdGhhdCBpcyB0aGVuIG5ldmVyIHVzZWQgZm9yIGFueXRoaW5nLgorCisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpoZWFkZXJDYWxsYmFjayk6IFVzZSBjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSBmb3Ig
TUlNRSB0eXBlLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1NTTEhhbmRsZS5j
cHA6IE1hZGUgaGFzaCBtYXBzIGtleWVkIGJ5IGhvc3QgbmFtZXMKKyAgICAgICAgQVNDSUkgY2Fz
ZS1pbnNlbnNpdGl2ZS4KKyAgICAgICAgKFdlYkNvcmU6OmFkZEFsbG93ZWRDbGllbnRDZXJ0aWZp
Y2F0ZSk6IFJlbW92ZWQgbG93ZXJjYXNpbmcgc2luY2UgdGhlIG1hcCBpdHNlbGYKKyAgICAgICAg
aXMgbm93IEFTQ0lJIGNhc2UgaW5zZW5zaXR2ZS4KKyAgICAgICAgKFdlYkNvcmU6OnNldFNTTENs
aWVudENlcnRpZmljYXRlKTogRGl0dG8uIEFsc28gdXNlIGF1dG8gZm9yIGl0ZXJhdG9yIHR5cGUg
c28gd2UKKyAgICAgICAgZG9uJ3QgaGF2ZSB0byB3cml0ZSBvdXQgdGhlIG1hcCB0eXBlLgorICAg
ICAgICAoV2ViQ29yZTo6c3NsSWdub3JlSFRUUFNDZXJ0aWZpY2F0ZSk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6Y2VydFZlcmlmeUNhbGxiYWNrKTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcDogTWFkZSBoYXNoIG1hcHMg
a2V5ZWQgYnkgaG9zdCBuYW1lcworICAgICAgICBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlLgorICAg
ICAgICAoV2ViQ29yZTo6YWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3RzKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpoYW5kbGVVbmlnbm9yZWRUTFNFcnJvcnMpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzZXRIb3N0QWxsb3dzQW55SFRUUFNDZXJ0aWZp
Y2F0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNldENsaWVu
dENlcnRpZmljYXRlKTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0xvY2FsZVRv
U2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwOiBNYWRlIGhhc2ggbWFwcyBrZXllZCBieSBzY3JpcHQK
KyAgICAgICAgbmFtZXMgQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZS4gVVNFIFdURl9BUlJBWV9MRU5H
VEggYXMgYXBwcm9wcmlhdGUuCisgICAgICAgIChXZWJDb3JlOjpzY3JpcHROYW1lVG9Db2RlKTog
VXNlIG1vZGVybiBzdHlsZSB0byBpbml0aWFsaXplIHRoZSBtYXAuIFJlbW92ZWQKKyAgICAgICAg
dW5uZWNlc3NhcnkgbG93ZXJjYXNpbmcgb2YgdGhlIHNjcmlwdCBuYW1lIGJlZm9yZSBsb29raW5n
IGF0IHRoZSBtYXAuCisgICAgICAgIChXZWJDb3JlOjpsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250
U2VsZWN0aW9uKTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L3dpbi9Mb2NhbGVX
aW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydExvY2FsZU5hbWVUb0xDSUQpOiBNYWRl
IG1hcCBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIGFuZCByZW1vdmVkCisgICAgICAgIHVubmVlZGVk
IGxvd2VyY2FzaW5nLgorCisgICAgICAgICogcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y2xpcGJvYXJkVHlwZUZyb21NSU1FVHlwZSk6IFVzZSBlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSBpbnN0ZWFkCisgICAgICAgIG9mIGxvd2VyY2FzaW5n
LgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6YXBwbHlUZXh0VHJhbnNmb3JtKTogVXNlIG5ldyBuYW1lcyBmb3IgdGhlIHVwcGVyIGFuZCBs
b3dlciBmdW5jdGlvbnMuCisKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlSXNYTUwpOiBSZW1vdmUgdW5u
ZWVkZWQgbG93ZXJjYXNpbmcsIHNpbmNlCisgICAgICAgIERPTUltcGxlbWVudGF0aW9uIG5vdyBo
YXMgQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZSBoYW5kbGluZyBvZiBNSU1FIHR5cGVzLgorCiAyMDE2
LTAyLTA2ICBLb25zdGFudGluIFRva2FyZXYgIDxhbm51bGVuQHlhbmRleC5ydT4KIAogICAgICAg
ICBBZGRlZCBpbXBsZW1lbnRhdGlvbnMgb2YgQVhPYmplY3RDYWNoZSBtZXRob2RzIGZvciAhSEFW
RShBQ0NFU1NJQklMSVRZKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCA3NGRmMThiYmQxOGJkY2FlMjM0
MDNhNTFlYTcxYWYxYTliNmRiOWQwLi40MDY0NDU2ZGJhYTVlYWY5ODk3ODkxMjJkZTFlMjZkYjgz
MDY4ODJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTYtMDItMDYgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIEZpbmlzaCBhdWRpdGluZyBj
YWxsIHNpdGVzIG9mIHVwcGVyKCkgYW5kIGxvd2VyKCksIGVsaW1pbmF0ZSBtYW55LCBhbmQgcmVu
YW1lIHRoZSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1MzkwNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogUGx1Z2lucy9XZWJCYXNlUGx1Z2luUGFja2FnZS5tbToKKyAgICAgICAgKC1b
V2ViQmFzZVBsdWdpblBhY2thZ2UgZ2V0UGx1Z2luSW5mb0Zyb21QTGlzdHNdKTogVXNlIG1vZGVy
biBmb3IgbG9vcHMuCisgICAgICAgICgtW1dlYkJhc2VQbHVnaW5QYWNrYWdlIHN1cHBvcnRzRXh0
ZW5zaW9uOl0pOiBVc2UgY29udmVydFRvQVNDSUlMb3dlcmNhc2UgZm9yIGV4dGVuc2lvbiBhc3Nl
cnQuCisgICAgICAgIEFsc28gdXNlIG1vZGVybiBmb3IgbG9vcC4KKyAgICAgICAgKC1bV2ViQmFz
ZVBsdWdpblBhY2thZ2Ugc3VwcG9ydHNNSU1FVHlwZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dl
YkJhc2VQbHVnaW5QYWNrYWdlIE1JTUVUeXBlRm9yRXh0ZW5zaW9uOl0pOiBEaXR0by4KKwogMjAx
Ni0wMi0wMyAgSmVzc2llIEJlcmxpbiAgPGpiZXJsaW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBC
dWlsZCBmaXguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKaW5kZXggMmNlNGE4NzZjYmI1ODQyMjhlOWE1NTZhZWRi
Y2Y3Y2NjZDJlZjAwMS4uNGFmNWQzMDQyZWU1ZTEwNzg4NDE4MzUyYmM5ODIyMmYxYzJmNmRmZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvd2luL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE2LTAyLTA2ICBEYXJpbiBBZGxl
ciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBGaW5pc2ggYXVkaXRpbmcgY2FsbCBzaXRl
cyBvZiB1cHBlcigpIGFuZCBsb3dlcigpLCBlbGltaW5hdGUgbWFueSwgYW5kIHJlbmFtZSB0aGUg
ZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTM5MDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFBsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
RGF0YWJhc2U6OnBsdWdpbkZvck1JTUVUeXBlKTogVXNlIEFTQ0lJIGNhc2UtaW5zZW5zaXRpdmUg
bWFwIHJhdGhlcgorICAgICAgICB0aGFuIGxvd2VyY2FzaW5nIHRoZSBNSU1FIHR5cGUuCisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6c2V0UHJlZmVycmVkUGx1Z2luRm9yTUlNRVR5
cGUpOiBEaXR0by4KKworICAgICAgICAqIFBsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaDogTWFrZSBt
X3ByZWZlcnJlZFBsdWdpbnMgdXNlIGFuIEFTQ0lJIGNhc2UtaW5zZW5zaXRpdmUgaGFzaC4KKwor
ICAgICAgICAqIFBsdWdpbnMvUGx1Z2luUGFja2FnZS5oOiBVc2UgQVNDSUkgY2FzZS1pbnNlbnNp
dGl2ZSBoYXNoIGZvciBtYXBzIGtleWVkIGJ5IE1JTUUgdHlwZS4KKworICAgICAgICAqIFBsdWdp
bnMvUGx1Z2luUGFja2FnZVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdl
OjpmZXRjaEluZm8pOiBVc2UgY29udmVydFRvQVNDSUlMb3dlcmNhc2UgdG8gbG93ZXJjYXNlIGEg
TUlNRSB0eXBlLgorCiAyMDE2LTAyLTA0ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBs
ZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogSW5zcGVjdG9yVGltZWxpbmVBZ2VudCBk
b2Vzbid0IG5lZWQgdG8gcmVjb21waWxlIGZ1bmN0aW9ucyBiZWNhdXNlIGl0IG5vdyB1c2VzIHRo
ZSBzYW1wbGluZyBwcm9maWxlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGNhYjhjMjhlM2QyNjVjZDFhMDBjMWM3
Mzc2N2NjNWM5ZDY2YjRiZDcuLjUyYTBlMDNlODRlMGIwNGIyM2IwYzU0NzFmNDA4YmNjOTIyMDFk
NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MCBAQAorMjAxNi0wMi0wNiAgRGFyaW4gQWRsZXIg
IDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgRmluaXNoIGF1ZGl0aW5nIGNhbGwgc2l0ZXMg
b2YgdXBwZXIoKSBhbmQgbG93ZXIoKSwgZWxpbWluYXRlIG1hbnksIGFuZCByZW5hbWUgdGhlIGZ1
bmN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTUzOTA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmg6
IFVzZSBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIGhhc2gKKyAgICAgICAgZm9yIHNldCBvZiByZWdp
c3RlcmVkIHNjaGVtZXMuCisKKyAgICAgICAgKiBTaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9tYWMv
TmV0c2NhcGVQbHVnaW5Nb2R1bGVNYWMubW06CisgICAgICAgIChXZWJLaXQ6OmdldFBsdWdpbklu
Zm9Gcm9tUHJvcGVydHlMaXN0cyk6IFVzZSBjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSBmb3IgTUlN
RSB0eXBlIGFuZAorICAgICAgICBmb3IgZmlsZSBleHRlbnNpb25zLgorCisgICAgICAgICogU2hh
cmVkL1BsdWdpbnMvTmV0c2NhcGUveDExL05ldHNjYXBlUGx1Z2luTW9kdWxlWDExLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5Nb2R1bGU6OnBhcnNlTUlNRURlc2NyaXB0aW9u
KTogVXNlIGNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlIGZvcgorICAgICAgICBNSU1FIGRlc2NyaXB0
aW9uLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwOgorICAg
ICAgICAoZXdrX2NvbnRleHRfcHJlZmVycmVkX2xhbmd1YWdlc19zZXQpOiBVc2UgY29udmVydFRv
QVNDSUlMb3dlcmNhc2UgZm9yIGxhbmd1YWdlLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViQ29udGV4dC5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX2NvbnRleHRfc2V0
X3ByZWZlcnJlZF9sYW5ndWFnZXMpOiBVc2UgY29udmVydFRvQVNDSUlMb3dlcmNhc2UgZm9yIGxh
bmd1YWdlLgorCisgICAgICAgICogVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luSW5mb1N0b3JlOjpmaW5kUGx1Z2luRm9yRXh0ZW5z
aW9uKTogVXNlIFZlY3Rvcjo6Y29udGFpbnMgaW5zdGVhZCBvZgorICAgICAgICB3cml0aW5nIGl0
IG91dCB1c2luZyBzdGQ6OmZpbmQuCisgICAgICAgIChXZWJLaXQ6OnBhdGhFeHRlbnNpb24pOiBM
b3dlcmNhc2UgdGhlIHJlc3VsdCB3aXRoIGNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlIGluc3RlYWQg
b2YKKyAgICAgICAgbGVhdmluZyB0aGF0IHRvIHRoZSBjYWxsZXIuCisgICAgICAgIChXZWJLaXQ6
OlBsdWdpbkluZm9TdG9yZTo6ZmluZFBsdWdpbik6IFJlbW92ZWQgY2FsbCB0byBsb3dlciBzaW5j
ZSBwYXRoRXh0ZW5zaW9uCisgICAgICAgIGhhbmRsZXMgdGhhdCBub3cuCisKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpmaW5kUGx1Z2luKTogVXNlIGNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlIGZvciBNSU1FIHR5cGUu
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6Z2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhh
bmRsZXJzKTogVXNlCisgICAgICAgIGFuIEFTQ0lJIGNhc2UtaW5zZW5zaXRpdmUgaGFzaC4KKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNI
YXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToKKyAgICAgICAgUmVtb3ZlIGxvd2VyY2FzaW5n
LCBzaW5jZSB0aGUgaGFzaCBpcyBub3cgQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZS4KKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmlu
Z0N1c3RvbVByb3RvY29sSGFuZGxlcnMpOgorICAgICAgICBEaXR0by4KKworICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOiBVc2UgYW4gQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZSBo
YXNoLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1
Z2luLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW46OmluaXRpYWxpemUpOiBV
c2UgY29udmVydFRvQVNDSUlMb3dlcmNhc2Ugb24gcGFyYW1ldGVyIG5hbWVzCisgICAgICAgIGFu
ZCB2YWx1ZXMuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
TG9hZGVyQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6cGx1Z2luU3VwcG9ydHNFeHRlbnNp
b24pOiBVc2UgY29udmVydFRvQVNDSUlMb3dlcmNhc2UgZm9yIGV4dGVuc2lvbiBhc3NlcnRpb24u
CisgICAgICAgIEFsc28gdXNlIGEgbW9kZXJuIGZvciBsb29wLgorICAgICAgICAoV2ViS2l0OjpX
ZWJGcmFtZUxvYWRlckNsaWVudDo6b2JqZWN0Q29udGVudFR5cGUpOiBNYWtlIHRoZSBjaGVja3Mg
Zm9yIGVtcHR5IE1JTUUgdHlwZXMKKyAgICAgICAgYSBsaXR0bGUgbGVzcyByZWR1bmRhbnQuIFJl
b3JkZXJlZCBsb2dpYyB0byBhdm9pZCBjaGVja2luZyB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgTUlN
RQorICAgICAgICB0eXBlcyBleHRyYSB0aW1lcywgYW5kIHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCBm
b3IgYSBib29sZWFuLiBVc2UgY29udmVydFRvQVNDSUlMb3dlcmNhc2UKKyAgICAgICAgb24gdGhl
IGV4dGVuc2lvbi4KKwogMjAxNi0wMi0wNiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lh
QGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gRml4IG1vcmUgaW5jb3JyZWN0IEFT
U0VSVCBpbnRyb2R1Y2VkIGluIHIxOTYwNTMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxPYmplY3QuY3BwCmluZGV4IGY5OGNkNTRmYTdhMDA5YWU2N2U3NmYzY2JkZTZjOWRi
OGQzNzQ5ZWQuLjllOGYwMzM2MzBiYmI3NTNkZDk0ZmU1YWNjY2JkYjk0NzEzYTI1NzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCkBAIC0zMjIsNyAr
MzIyLDcgQEAgc3RhdGljIFN0cmluZyBjYW5vbmljYWxMYW5nVGFnKGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBwYXJ0cykKICAgICAgICAgaWYgKGlzVmFsaWRSZWdpb24pIHsKICAgICAgICAgICAgICsr
Y3VycmVudEluZGV4OwogICAgICAgICAgICAgY2Fub25pY2FsLmFwcGVuZCgnLScpOwotICAgICAg
ICAgICAgY2Fub25pY2FsLmFwcGVuZChyZWdpb24udXBwZXIoKSk7CisgICAgICAgICAgICBjYW5v
bmljYWwuYXBwZW5kKHJlZ2lvbi5jb252ZXJ0VG9BU0NJSVVwcGVyY2FzZSgpKTsKICAgICAgICAg
fQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
aW5nUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1By
b3RvdHlwZS5jcHAKaW5kZXggMmQ1MDJiMDQ4YWZiMDE1NTAzZmE5NTI0N2JhMTMyZDgxZmIxOWYx
MS4uZDVkY2RiYjcxNDVhYTI0MmNiN2JkOGY0YTllMGQ0NTUyMjY5ZGVkMSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCkBAIC0xNDA2
LDE3ICsxNDA2LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9G
dW5jVG9Mb3dlckNhc2UoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihleGVjKTsKICAgICBKU1N0cmluZyogc1ZhbCA9IHRoaXNWYWx1ZS50b1N0cmluZyhl
eGVjKTsKICAgICBjb25zdCBTdHJpbmcmIHMgPSBzVmFsLT52YWx1ZShleGVjKTsKLQotICAgIGlu
dCBzU2l6ZSA9IHMubGVuZ3RoKCk7Ci0gICAgaWYgKCFzU2l6ZSkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShzVmFsKTsKLSAgICBSRUxFQVNFX0FTU0VSVChzU2l6ZSA+PSAwKTsKLQot
ICAgIFN0cmluZ0ltcGwqIG91ckltcGwgPSBzLmltcGwoKTsKLSAgICBSZWZQdHI8U3RyaW5nSW1w
bD4gbG93ZXIgPSBvdXJJbXBsLT5sb3dlcigpOwotICAgIGlmIChvdXJJbXBsID09IGxvd2VyKQor
ICAgIFN0cmluZyBsb3dlcmNhc2VkU3RyaW5nID0gcy5jb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0
TG9jYWxlKCk7CisgICAgaWYgKGxvd2VyY2FzZWRTdHJpbmcuaW1wbCgpID09IHMuaW1wbCgpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNWYWwpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNTdHJpbmcoZXhlYywgU3RyaW5nKGxvd2VyLnJlbGVhc2UoKSkpKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGxvd2VyY2FzZWRTdHJpbmcpKTsK
IH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUb1VwcGVy
Q2FzZShFeGVjU3RhdGUqIGV4ZWMpCkBAIC0xNDI2LDE2ICsxNDE5LDEwIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2UoRXhlY1N0YXRlKiBl
eGVjKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBKU1N0cmlu
Zyogc1ZhbCA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKICAgICBjb25zdCBTdHJpbmcmIHMg
PSBzVmFsLT52YWx1ZShleGVjKTsKLQotICAgIGludCBzU2l6ZSA9IHMubGVuZ3RoKCk7Ci0gICAg
aWYgKCFzU2l6ZSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzVmFsKTsKLQotICAg
IFN0cmluZ0ltcGwqIHNJbXBsID0gcy5pbXBsKCk7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHVw
cGVyID0gc0ltcGwtPnVwcGVyKCk7Ci0gICAgaWYgKHNJbXBsID09IHVwcGVyKQorICAgIFN0cmlu
ZyB1cHBlcmNhc2VkU3RyaW5nID0gcy5jb252ZXJ0VG9VcHBlcmNhc2VXaXRob3V0TG9jYWxlKCk7
CisgICAgaWYgKHVwcGVyY2FzZWRTdHJpbmcuaW1wbCgpID09IHMuaW1wbCgpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNWYWwpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNTdHJpbmcoZXhlYywgU3RyaW5nKHVwcGVyLnJlbGVhc2UoKSkpKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIHVwcGVyY2FzZWRTdHJpbmcpKTsKIH0KIAogRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNMb2NhbGVDb21wYXJlKEV4
ZWNTdGF0ZSogZXhlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3Ry
aW5nLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcAppbmRleCA5OWUw
ZDZlNTkxN2U4NGQ1ODA0ZDEwOTY5NDVlNzIxYWY3NGQ4ODUwLi5hOWZlZjE1MTc2ZDQ1MDgwMGU1
YTI1NzljNTQzN2YzZThkZDQ3MGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0
b21pY1N0cmluZy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmcuY3Bw
CkBAIC0zMiwyMiArMzIsNiBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAotQXRvbWljU3RyaW5nIEF0
b21pY1N0cmluZzo6bG93ZXIoKSBjb25zdAotewotICAgIC8vIE5vdGU6IFRoaXMgaXMgYSBob3Qg
ZnVuY3Rpb24gaW4gdGhlIERyb21hZW8gYmVuY2htYXJrLgotICAgIFN0cmluZ0ltcGwqIGltcGwg
PSB0aGlzLT5pbXBsKCk7Ci0gICAgaWYgKFVOTElLRUxZKCFpbXBsKSkKLSAgICAgICAgcmV0dXJu
IEF0b21pY1N0cmluZygpOwotCi0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IGxvd2VyY2FzZWRTdHJp
bmcgPSBpbXBsLT5sb3dlcigpOwotICAgIGlmIChMSUtFTFkobG93ZXJjYXNlZFN0cmluZyA9PSBp
bXBsKSkKLSAgICAgICAgcmV0dXJuICp0aGlzOwotCi0gICAgQXRvbWljU3RyaW5nIHJlc3VsdDsK
LSAgICByZXN1bHQubV9zdHJpbmcgPSBBdG9taWNTdHJpbmdJbXBsOjphZGQobG93ZXJjYXNlZFN0
cmluZy5nZXQoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogdGVtcGxhdGU8QXRvbWljU3Ry
aW5nOjpDYXNlQ29udmVydFR5cGUgdHlwZT4KIEFMV0FZU19JTkxJTkUgQXRvbWljU3RyaW5nIEF0
b21pY1N0cmluZzo6Y29udmVydEFTQ0lJQ2FzZSgpIGNvbnN0CiB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5oIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9t
aWNTdHJpbmcuaAppbmRleCBhOWU0MDY5MWJhNmNkYWRkYTY0NDA0ZTVlY2QwNWVjZjU2MDk2OGVh
Li5hYmJkYjQ1ZGVmMjk5ZjRhZGVmZmIwM2UzZDZlNGQ1OGFkNTA2Y2UyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvQXRvbWljU3RyaW5nLmgKQEAgLTE1NSw3ICsxNTUsNiBAQCBwdWJsaWM6CiAKICAgICBXVEZf
RVhQT1JUX1NUUklOR19BUEkgQXRvbWljU3RyaW5nIGNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkg
Y29uc3Q7CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIEF0b21pY1N0cmluZyBjb252ZXJ0VG9B
U0NJSVVwcGVyY2FzZSgpIGNvbnN0OwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBBdG9taWNT
dHJpbmcgbG93ZXIoKSBjb25zdDsKIAogICAgIGludCB0b0ludChib29sKiBvayA9IDApIGNvbnN0
IHsgcmV0dXJuIG1fc3RyaW5nLnRvSW50KG9rKTsgfQogICAgIGRvdWJsZSB0b0RvdWJsZShib29s
KiBvayA9IDApIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLnRvRG91YmxlKG9rKTsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L3RleHQvU3RyaW5nSW1wbC5jcHAKaW5kZXggY2IzZDAyNGJiYTkwOWYyYWJlODI1YTNmOWEwNDEy
M2RhNTM1M2EwYi4uN2Y3OTQ4OTA3YzY5OTMyMDQ0MWExODlmMWFiMmIyZGIyNjlkNzVlNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCkBAIC0zNjEsOSArMzYxLDkgQEAgVUNoYXIzMiBT
dHJpbmdJbXBsOjpjaGFyYWN0ZXJTdGFydGluZ0F0KHVuc2lnbmVkIGkpCiAgICAgcmV0dXJuIDA7
CiB9CiAKLVJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpsb3dlcigpCitSZWY8U3RyaW5nSW1w
bD4gU3RyaW5nSW1wbDo6Y29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZSgpCiB7Ci0gICAg
Ly8gTm90ZTogVGhpcyBpcyBhIGhvdCBmdW5jdGlvbiBpbiB0aGUgRHJvbWFlbyBiZW5jaG1hcmss
IHNwZWNpZmljYWxseSB0aGUKKyAgICAvLyBOb3RlOiBBdCBvbmUgdGltZSB0aGlzIHdhcyBhIGhv
dCBmdW5jdGlvbiBpbiB0aGUgRHJvbWFlbyBiZW5jaG1hcmssIHNwZWNpZmljYWxseSB0aGUKICAg
ICAvLyBuby1vcCBjb2RlIHBhdGggdXAgdGhyb3VnaCB0aGUgZmlyc3QgJ3JldHVybicgc3RhdGVt
ZW50LgogCiAgICAgLy8gRmlyc3Qgc2NhbiB0aGUgc3RyaW5nIGZvciB1cHBlcmNhc2UgYW5kIG5v
bi1BU0NJSSBjaGFyYWN0ZXJzOgpAQCAtNDQyLDExICs0NDIsMTIgQEAgU2xvd1BhdGg6CiAgICAg
cmV0dXJuIG5ld0ltcGwucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotUmVmPFN0cmluZ0ltcGw+IFN0
cmluZ0ltcGw6OnVwcGVyKCkKK1JlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjb252ZXJ0VG9V
cHBlcmNhc2VXaXRob3V0TG9jYWxlKCkKIHsKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGNvdWxkIGJl
IG9wdGltaXplZCBmb3Igbm8tb3AgY2FzZXMgdGhlIHdheSBsb3dlcigpIGlzLAotICAgIC8vIGJ1
dCBpbiBlbXBpcmljYWwgdGVzdGluZywgZmV3IGFjdHVhbCBjYWxscyB0byB1cHBlcigpIGFyZSBu
by1vcHMsIHNvCi0gICAgLy8gaXQgd291bGRuJ3QgYmUgd29ydGggdGhlIGV4dHJhIHRpbWUgZm9y
IHByZS1zY2FubmluZy4KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGNvdWxkIGJlIG9wdGltaXplZCBm
b3Igbm8tb3AgY2FzZXMgdGhlIHdheQorICAgIC8vIGNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRM
b2NhbGUoKSBpcywgYnV0IGluIGVtcGlyaWNhbCB0ZXN0aW5nLAorICAgIC8vIGZldyBhY3R1YWwg
Y2FsbHMgdG8gdXBwZXIoKSBhcmUgbm8tb3BzLCBzbyBpdCB3b3VsZG4ndCBiZSB3b3J0aAorICAg
IC8vIHRoZSBleHRyYSB0aW1lIGZvciBwcmUtc2Nhbm5pbmcuCiAKICAgICBpZiAobV9sZW5ndGgg
PiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4
KCkpKQogICAgICAgICBDUkFTSCgpOwpAQCAtNDc3LDcgKzQ3OCw3IEBAIFJlZjxTdHJpbmdJbXBs
PiBTdHJpbmdJbXBsOjp1cHBlcigpCiAgICAgICAgIGludCBudW1iZXJTaGFycFNDaGFyYWN0ZXJz
ID0gMDsKIAogICAgICAgICAvLyBUaGVyZSBhcmUgdHdvIHNwZWNpYWwgY2FzZXMuCi0gICAgICAg
IC8vICAxLiBsYXRpbi0xIGNoYXJhY3RlcnMgd2hlbiBjb252ZXJ0ZWQgdG8gdXBwZXIgY2FzZSBh
cmUgMTYgYml0IGNoYXJhY3RlcnMuCisgICAgICAgIC8vICAxLiBTb21lIExhdGluLTEgY2hhcmFj
dGVycyB3aGVuIGNvbnZlcnRlZCB0byB1cHBlciBjYXNlIGFyZSAxNiBiaXQgY2hhcmFjdGVycy4K
ICAgICAgICAgLy8gIDIuIExvd2VyIGNhc2Ugc2hhcnAtUyBjb252ZXJ0cyB0byAiU1MiICh0d28g
Y2hhcmFjdGVycykKICAgICAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
IHsKICAgICAgICAgICAgIExDaGFyIGMgPSBtX2RhdGE4W2ldOwpAQCAtNDg1LDcgKzQ4Niw3IEBA
IFJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjp1cHBlcigpCiAgICAgICAgICAgICAgICAgKytu
dW1iZXJTaGFycFNDaGFyYWN0ZXJzOwogICAgICAgICAgICAgQVNTRVJUKHVfdG91cHBlcihjKSA8
PSAweEZGRkYpOwogICAgICAgICAgICAgVUNoYXIgdXBwZXIgPSB1X3RvdXBwZXIoYyk7Ci0gICAg
ICAgICAgICBpZiAoVU5MSUtFTFkodXBwZXIgPiAweGZmKSkgeworICAgICAgICAgICAgaWYgKFVO
TElLRUxZKHVwcGVyID4gMHhGRikpIHsKICAgICAgICAgICAgICAgICAvLyBTaW5jZSB0aGlzIHVw
cGVyLWNhc2VkIGNoYXJhY3RlciBkb2VzIG5vdCBmaXQgaW4gYW4gOC1iaXQgc3RyaW5nLCB3ZSBu
ZWVkIHRvIHRha2UgdGhlIDE2LWJpdCBwYXRoLgogICAgICAgICAgICAgICAgIGdvdG8gdXBjb252
ZXJ0OwogICAgICAgICAgICAgfQpAQCAtNTU0LDE0ICs1NTUsMTQgQEAgc3RhdGljIGlubGluZSBi
b29sIG5lZWRzVHVya2lzaENhc2luZ1J1bGVzKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRl
bnRpZmllcikKICAgICAgICAgJiYgKGxvY2FsZUlkZW50aWZpZXIubGVuZ3RoKCkgPT0gMiB8fCBs
b2NhbGVJZGVudGlmaWVyWzJdID09ICctJyk7CiB9CiAKLVJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJ
bXBsOjpsb3dlcihjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpCitSZWY8U3Ry
aW5nSW1wbD4gU3RyaW5nSW1wbDo6Y29udmVydFRvTG93ZXJjYXNlV2l0aExvY2FsZShjb25zdCBB
dG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpCiB7CiAgICAgLy8gVXNlIHRoZSBtb3JlLW9w
dGltaXplZCBjb2RlIHBhdGggbW9zdCBvZiB0aGUgdGltZS4KICAgICAvLyBBc3N1bWluZyBoZXJl
IHRoYXQgdGhlIG9ubHkgbG9jYWxlLXNwZWNpZmljIGxvd2VyY2FzaW5nIGlzIHRoZSBUdXJraXNo
IGNhc2luZyBydWxlcy4KICAgICAvLyBGSVhNRTogQ291bGQgcG9zc2libHkgb3B0aW1pemUgZnVy
dGhlciBieSBsb29raW5nIGZvciB0aGUgc3BlY2lmaWMgc2VxdWVuY2VzCiAgICAgLy8gdGhhdCBo
YXZlIGxvY2FsZS1zcGVjaWZpYyBsb3dlcmNhc2luZy4gVGhlcmUgYXJlIG9ubHkgdGhyZWUgb2Yg
dGhlbS4KICAgICBpZiAoIW5lZWRzVHVya2lzaENhc2luZ1J1bGVzKGxvY2FsZUlkZW50aWZpZXIp
KQotICAgICAgICByZXR1cm4gbG93ZXIoKTsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0xvd2Vy
Y2FzZVdpdGhvdXRMb2NhbGUoKTsKIAogICAgIC8vIEZJWE1FOiBDb3VsZCBzaGFyZSBtb3JlIGNv
ZGUgd2l0aCB0aGUgbWFpbiBTdHJpbmdJbXBsOjpsb3dlciBieSBmYWN0b3Jpbmcgb3V0CiAgICAg
Ly8gdGhpcyBsYXN0IHBhcnQgaW50byBhIHNoYXJlZCBmdW5jdGlvbiB0aGF0IHRha2VzIGEgbG9j
YWxlIHN0cmluZywgc2luY2UgdGhpcyBpcwpAQCAtNTkwLDEzICs1OTEsMTMgQEAgUmVmPFN0cmlu
Z0ltcGw+IFN0cmluZ0ltcGw6Omxvd2VyKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRp
ZmllcikKICAgICByZXR1cm4gbmV3U3RyaW5nLnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKLVJlZjxT
dHJpbmdJbXBsPiBTdHJpbmdJbXBsOjp1cHBlcihjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlk
ZW50aWZpZXIpCitSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y29udmVydFRvVXBwZXJjYXNl
V2l0aExvY2FsZShjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpCiB7CiAgICAg
Ly8gVXNlIHRoZSBtb3JlLW9wdGltaXplZCBjb2RlIHBhdGggbW9zdCBvZiB0aGUgdGltZS4KICAg
ICAvLyBBc3N1bWluZyBoZXJlIHRoYXQgdGhlIG9ubHkgbG9jYWxlLXNwZWNpZmljIGxvd2VyY2Fz
aW5nIGlzIHRoZSBUdXJraXNoIGNhc2luZyBydWxlcywKICAgICAvLyBhbmQgdGhhdCB0aGUgb25s
eSBhZmZlY3RlZCBjaGFyYWN0ZXIgaXMgbG93ZXJjYXNlICJpIi4KICAgICBpZiAoIW5lZWRzVHVy
a2lzaENhc2luZ1J1bGVzKGxvY2FsZUlkZW50aWZpZXIpIHx8IGZpbmQoJ2knKSA9PSBub3RGb3Vu
ZCkKLSAgICAgICAgcmV0dXJuIHVwcGVyKCk7CisgICAgICAgIHJldHVybiBjb252ZXJ0VG9VcHBl
cmNhc2VXaXRob3V0TG9jYWxlKCk7CiAKICAgICBpZiAobV9sZW5ndGggPiBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpKQogICAgICAgICBD
UkFTSCgpOwpAQCAtNjIzLDYwICs2MjQsODYgQEAgUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6
OnVwcGVyKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcikKIAogUmVmPFN0cmlu
Z0ltcGw+IFN0cmluZ0ltcGw6OmZvbGRDYXNlKCkKIHsKLSAgICAvLyBGSVhNRTogV2h5IGRvZXNu
J3QgdGhpcyBmdW5jdGlvbiBoYXZlIGEgcHJlZmxpZ2h0IGxpa2UgdGhlIG9uZSBpbiBTdHJpbmdJ
bXBsOjpsb3dlcj8KLQotICAgIGlmIChtX2xlbmd0aCA+IHN0YXRpY19jYXN0PHVuc2lnbmVkPihz
dGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkpCi0gICAgICAgIENSQVNIKCk7Ci0g
ICAgaW50MzJfdCBsZW5ndGggPSBtX2xlbmd0aDsKLQogICAgIGlmIChpczhCaXQoKSkgewotICAg
ICAgICAvLyBEbyBhIGZhc3RlciBsb29wIGZvciB0aGUgY2FzZSB3aGVyZSBhbGwgdGhlIGNoYXJh
Y3RlcnMgYXJlIEFTQ0lJLgotICAgICAgICBMQ2hhciogZGF0YTsKLSAgICAgICAgYXV0byBuZXdJ
bXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YSk7Ci0gICAgICAgIExDaGFy
IG9yZWQgPSAwOwotCi0gICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KSB7Ci0gICAgICAgICAgICBMQ2hhciBjID0gbV9kYXRhOFtpXTsKLSAgICAgICAgICAgIGRhdGFb
aV0gPSB0b0FTQ0lJTG93ZXIoYyk7Ci0gICAgICAgICAgICBvcmVkIHw9IGM7CisgICAgICAgIHVu
c2lnbmVkIGZhaWxpbmdJbmRleDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8gY2hhcmFjdGVyID0gbV9kYXRhOFtpXTsK
KyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghaXNBU0NJSShjaGFyYWN0ZXIpIHx8IGlzQVNDSUlV
cHBlcihjaGFyYWN0ZXIpKSkgeworICAgICAgICAgICAgICAgIGZhaWxpbmdJbmRleCA9IGk7Cisg
ICAgICAgICAgICAgICAgZ290byBTbG93UGF0aDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQor
ICAgICAgICAvLyBTdHJpbmcgd2FzIGFsbCBBU0NJSSBhbmQgbm8gdXBwZXJjYXNlLCBzbyBqdXN0
IHJldHVybiBhcy1pcy4KKyAgICAgICAgcmV0dXJuICp0aGlzOwogCi0gICAgICAgIGlmICghKG9y
ZWQgJiB+MHg3RikpCi0gICAgICAgICAgICByZXR1cm4gbmV3SW1wbDsKLQotICAgICAgICAvLyBE
byBhIHNsb3dlciBpbXBsZW1lbnRhdGlvbiBmb3IgY2FzZXMgdGhhdCBpbmNsdWRlIG5vbi1BU0NJ
SSBMYXRpbi0xIGNoYXJhY3RlcnMuCi0gICAgICAgIC8vIEZJWE1FOiBTaG91bGRuJ3QgdGhpcyB1
c2UgdV9mb2xkQ2FzZSBpbnN0ZWFkIG9mIHVfdG9sb3dlcj8KLSAgICAgICAgZm9yIChpbnQzMl90
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIEFTU0VSVCh1X3RvbG93ZXIo
bV9kYXRhOFtpXSkgPD0gMHhGRik7Ci0gICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8
TENoYXI+KHVfdG9sb3dlcihtX2RhdGE4W2ldKSk7CitTbG93UGF0aDoKKyAgICAgICAgYm9vbCBu
ZWVkMTZCaXRDaGFyYWN0ZXJzID0gZmFsc2U7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGZh
aWxpbmdJbmRleDsgaSA8IG1fbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8gY2hhcmFj
dGVyID0gbV9kYXRhOFtpXTsKKyAgICAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gMHhCNSB8fCBj
aGFyYWN0ZXIgPT0gMHhERikgeworICAgICAgICAgICAgICAgIG5lZWQxNkJpdENoYXJhY3RlcnMg
PSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9
CiAKLSAgICAgICAgcmV0dXJuIG5ld0ltcGw7CisgICAgICAgIGlmICghbmVlZDE2Qml0Q2hhcmFj
dGVycykgeworICAgICAgICAgICAgTENoYXIqIGRhdGE4OworICAgICAgICAgICAgYXV0byBmb2xk
ZWQgPSBjcmVhdGVVbmluaXRpYWxpemVkSW50ZXJuYWxOb25FbXB0eShtX2xlbmd0aCwgZGF0YTgp
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZhaWxpbmdJbmRleDsgKytp
KQorICAgICAgICAgICAgICAgIGRhdGE4W2ldID0gbV9kYXRhOFtpXTsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGZhaWxpbmdJbmRleDsgaSA8IG1fbGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvIGNoYXJhY3RlciA9IG1fZGF0YThbaV07CisgICAgICAgICAgICAgICAg
aWYgKGlzQVNDSUkoY2hhcmFjdGVyKSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YThbaV0gPSB0
b0FTQ0lJTG93ZXIoY2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKHVfZm9sZENhc2UoY2hhcmFjdGVyLCBVX0ZPTERfQ0FTRV9ERUZB
VUxUKSA8PSAweEZGKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YThbaV0gPSBzdGF0aWNfY2Fz
dDxMQ2hhcj4odV9mb2xkQ2FzZShjaGFyYWN0ZXIsIFVfRk9MRF9DQVNFX0RFRkFVTFQpKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZm9sZGVk
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gRklYTUU6IFVuY2xlYXIgd2h5
IHdlIHVzZSBnb3RvIGluIHRoZSA4LWJpdCBjYXNlLCBhbmQgYSBkaWZmZXJlbnQgYXBwcm9hY2gg
aW4gdGhlIDE2LWJpdCBjYXNlLgorICAgICAgICBib29sIG5vVXBwZXIgPSB0cnVlOworICAgICAg
ICB1bnNpZ25lZCBvcmVkID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IG1fZGF0YTE2W2ld
OworICAgICAgICAgICAgaWYgKFVOTElLRUxZKGlzQVNDSUlVcHBlcihjaGFyYWN0ZXIpKSkKKyAg
ICAgICAgICAgICAgICBub1VwcGVyID0gZmFsc2U7CisgICAgICAgICAgICBvcmVkIHw9IGNoYXJh
Y3RlcjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIShvcmVkICYgfjB4N0YpKSB7CisgICAgICAg
ICAgICBpZiAobm9VcHBlcikgeworICAgICAgICAgICAgICAgIC8vIFN0cmluZyB3YXMgYWxsIEFT
Q0lJIGFuZCBubyB1cHBlcmNhc2UsIHNvIGp1c3QgcmV0dXJuIGFzLWlzLgorICAgICAgICAgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFVDaGFyKiBkYXRh
MTY7CisgICAgICAgICAgICBhdXRvIGZvbGRlZCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWRJbnRlcm5h
bE5vbkVtcHR5KG1fbGVuZ3RoLCBkYXRhMTYpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgZGF0YTE2W2ldID0gdG9B
U0NJSUxvd2VyKG1fZGF0YTE2W2ldKTsKKyAgICAgICAgICAgIHJldHVybiBmb2xkZWQ7CisgICAg
ICAgIH0KICAgICB9CiAKLSAgICAvLyBEbyBhIGZhc3RlciBsb29wIGZvciB0aGUgY2FzZSB3aGVy
ZSBhbGwgdGhlIGNoYXJhY3RlcnMgYXJlIEFTQ0lJLgotICAgIFVDaGFyKiBkYXRhOwotICAgIFJl
ZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwg
ZGF0YSk7Ci0gICAgVUNoYXIgb3JlZCA9IDA7Ci0gICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgVUNoYXIgYyA9IG1fZGF0YTE2W2ldOwotICAgICAgICBv
cmVkIHw9IGM7Ci0gICAgICAgIGRhdGFbaV0gPSB0b0FTQ0lJTG93ZXIoYyk7Ci0gICAgfQotICAg
IGlmICghKG9yZWQgJiB+MHg3RikpCi0gICAgICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2VOb25O
dWxsKCk7CisgICAgaWYgKG1fbGVuZ3RoID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSkKKyAgICAgICAgQ1JBU0goKTsKIAotICAgIC8v
IERvIGEgc2xvd2VyIGltcGxlbWVudGF0aW9uIGZvciBjYXNlcyB0aGF0IGluY2x1ZGUgbm9uLUFT
Q0lJIGNoYXJhY3RlcnMuCisgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdW
aWV3KCp0aGlzKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKKworICAgIFVDaGFyKiBkYXRhOwor
ICAgIGF1dG8gZm9sZGVkID0gY3JlYXRlVW5pbml0aWFsaXplZEludGVybmFsTm9uRW1wdHkobV9s
ZW5ndGgsIGRhdGEpOworICAgIGludDMyX3QgbGVuZ3RoID0gbV9sZW5ndGg7CiAgICAgVUVycm9y
Q29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgaW50MzJfdCByZWFsTGVuZ3RoID0gdV9z
dHJGb2xkQ2FzZShkYXRhLCBsZW5ndGgsIG1fZGF0YTE2LCBtX2xlbmd0aCwgVV9GT0xEX0NBU0Vf
REVGQVVMVCwgJnN0YXR1cyk7CisgICAgaW50MzJfdCByZWFsTGVuZ3RoID0gdV9zdHJGb2xkQ2Fz
ZShkYXRhLCBsZW5ndGgsIHVwY29udmVydGVkQ2hhcmFjdGVycywgbGVuZ3RoLCBVX0ZPTERfQ0FT
RV9ERUZBVUxULCAmc3RhdHVzKTsKICAgICBpZiAoVV9TVUNDRVNTKHN0YXR1cykgJiYgcmVhbExl
bmd0aCA9PSBsZW5ndGgpCi0gICAgICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2VOb25OdWxsKCk7
Ci0gICAgbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVhbExlbmd0aCwgZGF0YSk7Cisg
ICAgICAgIHJldHVybiBmb2xkZWQ7CisgICAgQVNTRVJUKHJlYWxMZW5ndGggPiBsZW5ndGgpOwor
ICAgIGZvbGRlZCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWRJbnRlcm5hbE5vbkVtcHR5KHJlYWxMZW5n
dGgsIGRhdGEpOwogICAgIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKLSAgICB1X3N0ckZvbGRDYXNl
KGRhdGEsIHJlYWxMZW5ndGgsIG1fZGF0YTE2LCBtX2xlbmd0aCwgVV9GT0xEX0NBU0VfREVGQVVM
VCwgJnN0YXR1cyk7CisgICAgdV9zdHJGb2xkQ2FzZShkYXRhLCByZWFsTGVuZ3RoLCB1cGNvbnZl
cnRlZENoYXJhY3RlcnMsIGxlbmd0aCwgVV9GT0xEX0NBU0VfREVGQVVMVCwgJnN0YXR1cyk7CiAg
ICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQogICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgcmV0
dXJuIG5ld0ltcGwucmVsZWFzZU5vbk51bGwoKTsKKyAgICByZXR1cm4gZm9sZGVkOwogfQogCiB0
ZW1wbGF0ZTxTdHJpbmdJbXBsOjpDYXNlQ29udmVydFR5cGUgdHlwZSwgdHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oIGIv
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKaW5kZXggZTY4NzBiYWY5NWUyNjk0MGY5
M2NlNWNkMWFlNzdmZTdhNjkzODQ0Yi4uMDYzY2U2MzJhNDJkNGJmOTM2YjdkMzY2ZDhjZmQ5YjFk
ZTljYmQ5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKKysr
IGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKQEAgLTY4MSwxMCArNjgxLDEwIEBA
IHB1YmxpYzoKIAogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBSZWY8U3RyaW5nSW1wbD4gY29u
dmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUmVmPFN0
cmluZ0ltcGw+IGNvbnZlcnRUb0FTQ0lJVXBwZXJjYXNlKCk7Ci0gICAgV1RGX0VYUE9SVF9TVFJJ
TkdfQVBJIFJlZjxTdHJpbmdJbXBsPiBsb3dlcigpOwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQ
SSBSZWY8U3RyaW5nSW1wbD4gdXBwZXIoKTsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUmVm
PFN0cmluZ0ltcGw+IGxvd2VyKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcik7
Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJlZjxTdHJpbmdJbXBsPiB1cHBlcihjb25zdCBB
dG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpOworICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQ
SSBSZWY8U3RyaW5nSW1wbD4gY29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZSgpOworICAg
IFdURl9FWFBPUlRfU1RSSU5HX0FQSSBSZWY8U3RyaW5nSW1wbD4gY29udmVydFRvVXBwZXJjYXNl
V2l0aG91dExvY2FsZSgpOworICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBSZWY8U3RyaW5nSW1w
bD4gY29udmVydFRvTG93ZXJjYXNlV2l0aExvY2FsZShjb25zdCBBdG9taWNTdHJpbmcmIGxvY2Fs
ZUlkZW50aWZpZXIpOworICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBSZWY8U3RyaW5nSW1wbD4g
Y29udmVydFRvVXBwZXJjYXNlV2l0aExvY2FsZShjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlk
ZW50aWZpZXIpOwogCiAgICAgUmVmPFN0cmluZ0ltcGw+IGZvbGRDYXNlKCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvV1RGU3RyaW5nLmNwcAppbmRleCAxYjQzMDU2NzYyYjI0ZDJmYTMyM2IyOThhMzk3MDc0YWFh
YzJkNzIwLi5jZTM3NmUyM2EwOTU5OWZkYzU1Y2VkNWU5YjkzMDg2ODQ0YTZlYTBiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKKysrIGIvU291cmNlL1dURi93
dGYvdGV4dC9XVEZTdHJpbmcuY3BwCkBAIC0zNTEsMzIgKzM1MSwzMiBAQCBTdHJpbmcgU3RyaW5n
Ojpjb252ZXJ0VG9BU0NJSVVwcGVyY2FzZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1faW1wbC0+Y29u
dmVydFRvQVNDSUlVcHBlcmNhc2UoKTsKIH0KIAotU3RyaW5nIFN0cmluZzo6bG93ZXIoKSBjb25z
dAorU3RyaW5nIFN0cmluZzo6Y29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZSgpIGNvbnN0
CiB7CiAgICAgaWYgKCFtX2ltcGwpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1
cm4gbV9pbXBsLT5sb3dlcigpOworICAgIHJldHVybiBtX2ltcGwtPmNvbnZlcnRUb0xvd2VyY2Fz
ZVdpdGhvdXRMb2NhbGUoKTsKIH0KIAotU3RyaW5nIFN0cmluZzo6dXBwZXIoKSBjb25zdAorU3Ry
aW5nIFN0cmluZzo6Y29udmVydFRvVXBwZXJjYXNlV2l0aG91dExvY2FsZSgpIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX2ltcGwpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gbV9p
bXBsLT51cHBlcigpOworICAgIHJldHVybiBtX2ltcGwtPmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhv
dXRMb2NhbGUoKTsKIH0KIAotU3RyaW5nIFN0cmluZzo6bG93ZXIoY29uc3QgQXRvbWljU3RyaW5n
JiBsb2NhbGVJZGVudGlmaWVyKSBjb25zdAorU3RyaW5nIFN0cmluZzo6Y29udmVydFRvTG93ZXJj
YXNlV2l0aExvY2FsZShjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpIGNvbnN0
CiB7CiAgICAgaWYgKCFtX2ltcGwpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1
cm4gbV9pbXBsLT5sb3dlcihsb2NhbGVJZGVudGlmaWVyKTsKKyAgICByZXR1cm4gbV9pbXBsLT5j
b252ZXJ0VG9Mb3dlcmNhc2VXaXRoTG9jYWxlKGxvY2FsZUlkZW50aWZpZXIpOwogfQogCi1TdHJp
bmcgU3RyaW5nOjp1cHBlcihjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpIGNv
bnN0CitTdHJpbmcgU3RyaW5nOjpjb252ZXJ0VG9VcHBlcmNhc2VXaXRoTG9jYWxlKGNvbnN0IEF0
b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcikgY29uc3QKIHsKICAgICBpZiAoIW1faW1wbCkK
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBtX2ltcGwtPnVwcGVyKGxvY2Fs
ZUlkZW50aWZpZXIpOworICAgIHJldHVybiBtX2ltcGwtPmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhM
b2NhbGUobG9jYWxlSWRlbnRpZmllcik7CiB9CiAKIFN0cmluZyBTdHJpbmc6OnN0cmlwV2hpdGVT
cGFjZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5o
IGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaAppbmRleCA4OGMxM2RhZjMzOTA1ODUw
ZTAxY2IyMWNkOTJhMGIyOTZhZTczNWNhLi4zYzU1OTA4MTFkYWYyMTBkYjllM2ZjYzk2MWFlYWM0
YTFhMmYxYWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgKQEAgLTMzMSwxNiArMzMxLDEyIEBA
IHB1YmxpYzoKICAgICBTdHJpbmcgbGVmdCh1bnNpZ25lZCBsZW4pIGNvbnN0IHsgcmV0dXJuIHN1
YnN0cmluZygwLCBsZW4pOyB9CiAgICAgU3RyaW5nIHJpZ2h0KHVuc2lnbmVkIGxlbikgY29uc3Qg
eyByZXR1cm4gc3Vic3RyaW5nKGxlbmd0aCgpIC0gbGVuLCBsZW4pOyB9CiAKLSAgICAvLyBSZXR1
cm5zIGEgbG93ZXJjYXNlL3VwcGVyY2FzZSB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcuCi0gICAgLy8g
VGhlIGNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlIGlzIHVzZWZ1bCBpbiBtYW55IGNvbnRleHRzIHN1
Y2ggYXMgSFRNTCB3aGVyZSB3ZSBkb24ndAotICAgIC8vIHdhbnQgdG8gZG8gYW55IGNvbnZlcnNp
b24gZm9yIG5vbi1BU0NJSSBsZXR0ZXJzLgogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJp
bmcgY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSBjb25zdDsKLSAgICBXVEZfRVhQT1JUX1NUUklO
R19BUEkgU3RyaW5nIGxvd2VyKCkgY29uc3Q7CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0
cmluZyBjb252ZXJ0VG9BU0NJSVVwcGVyY2FzZSgpIGNvbnN0OwotICAgIFdURl9FWFBPUlRfU1RS
SU5HX0FQSSBTdHJpbmcgdXBwZXIoKSBjb25zdDsKLQotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQ
SSBTdHJpbmcgbG93ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyKSBjb25z
dDsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgU3RyaW5nIHVwcGVyKGNvbnN0IEF0b21pY1N0
cmluZyYgbG9jYWxlSWRlbnRpZmllcikgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJ
IFN0cmluZyBjb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlKCkgY29uc3Q7CisgICAgV1RG
X0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyBjb252ZXJ0VG9VcHBlcmNhc2VXaXRob3V0TG9jYWxl
KCkgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyBjb252ZXJ0VG9Mb3dl
cmNhc2VXaXRoTG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcikgY29u
c3Q7CisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyBjb252ZXJ0VG9VcHBlcmNhc2VX
aXRoTG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcikgY29uc3Q7CiAK
ICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgU3RyaW5nIHN0cmlwV2hpdGVTcGFjZSgpIGNvbnN0
OwogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJpbmcgc3RyaXBXaGl0ZVNwYWNlKElzV2hp
dGVTcGFjZUZ1bmN0aW9uUHRyKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKaW5kZXggM2M5MTA1Zjk1OTVjODExODQzY2I3
NDYzYTBiZjZiYzk5OTIxMTkxYy4uYzBkMTRlMTY1N2FlZTgzMTJiOWY3MGQ1NzU1OTdiMDM3NTY3
ZTQ5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRp
YVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRp
YVNvdXJjZS5jcHAKQEAgLTczMyw3ICs3MzMsNyBAQCBib29sIE1lZGlhU291cmNlOjppc1R5cGVT
dXBwb3J0ZWQoY29uc3QgU3RyaW5nJiB0eXBlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICAvLyBGSVhNRTogV2h5IGRvIHdlIGNvbnZlcnQgdG8gbG93ZXJjYXNlIGhlcmUsIGJ1dCBub3Qg
aW4gTWVkaWFTb3VyY2U6OmFkZFNvdXJjZUJ1ZmZlcj8KLSAgICBDb250ZW50VHlwZSBjb250ZW50
VHlwZSh0eXBlLmxvd2VyKCkpOworICAgIENvbnRlbnRUeXBlIGNvbnRlbnRUeXBlKHR5cGUuY29u
dmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CiAgICAgU3RyaW5nIGNvZGVjcyA9IGNvbnRlbnRUeXBl
LnBhcmFtZXRlcigiY29kZWNzIik7CiAKICAgICAvLyAyLiBJZiB0eXBlIGRvZXMgbm90IGNvbnRh
aW4gYSB2YWxpZCBNSU1FIHR5cGUgc3RyaW5nLCB0aGVuIHJldHVybiBmYWxzZS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmlu
ZGV4IGIwNzk4OGVlZTMwYTRmMjgyMGZkMjFhNDAxNTIzNDJiZTQyYTMwMDcuLjA2YTQzMmFhYzI5
ZGU3OTU0YTI3NGE2NGFjZjJkMTM1ZmQ3ZGI4ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtNzYxLDMxICs3NjEs
MjggQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnNlbGVjdFRleHQoQWNjZXNzaWJpbGl0
eVNlbGVjdFRleHRDcml0ZXJpYSogY3JpdGVyaWEKICAgICAgICAgYm9vbCByZXBsYWNlU2VsZWN0
aW9uID0gZmFsc2U7CiAgICAgICAgIGlmIChmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRS
YW5nZShjbG9zZXN0U3RyaW5nUmFuZ2UuZ2V0KCksIERPV05TVFJFQU0sIHRydWUpKSB7CiAgICAg
ICAgICAgICBzd2l0Y2ggKGFjdGl2aXR5KSB7Ci0gICAgICAgICAgICBjYXNlIEZpbmRBbmRDYXBp
dGFsaXplOiB7CisgICAgICAgICAgICBjYXNlIEZpbmRBbmRDYXBpdGFsaXplOgogICAgICAgICAg
ICAgICAgIHJlcGxhY2VtZW50U3RyaW5nID0gY2xvc2VzdFN0cmluZzsKICAgICAgICAgICAgICAg
ICBtYWtlQ2FwaXRhbGl6ZWQoJnJlcGxhY2VtZW50U3RyaW5nLCAwKTsKICAgICAgICAgICAgICAg
ICByZXBsYWNlU2VsZWN0aW9uID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgRmluZEFuZFVwcGVyY2FzZToKLSAgICAgICAgICAg
ICAgICByZXBsYWNlbWVudFN0cmluZyA9IGNsb3Nlc3RTdHJpbmcudXBwZXIoKTsKKyAgICAgICAg
ICAgICAgICByZXBsYWNlbWVudFN0cmluZyA9IGNsb3Nlc3RTdHJpbmcuY29udmVydFRvVXBwZXJj
YXNlV2l0aG91dExvY2FsZSgpOyAvLyBGSVhNRTogTmVlZHMgbG9jYWxlIHRvIHdvcmsgY29ycmVj
dGx5LgogICAgICAgICAgICAgICAgIHJlcGxhY2VTZWxlY3Rpb24gPSB0cnVlOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBGaW5kQW5kTG93ZXJjYXNlOgotICAgICAg
ICAgICAgICAgIHJlcGxhY2VtZW50U3RyaW5nID0gY2xvc2VzdFN0cmluZy5sb3dlcigpOworICAg
ICAgICAgICAgICAgIHJlcGxhY2VtZW50U3RyaW5nID0gY2xvc2VzdFN0cmluZy5jb252ZXJ0VG9M
b3dlcmNhc2VXaXRob3V0TG9jYWxlKCk7IC8vIEZJWE1FOiBOZWVkcyBsb2NhbGUgdG8gd29yayBj
b3JyZWN0bHkuCiAgICAgICAgICAgICAgICAgcmVwbGFjZVNlbGVjdGlvbiA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEZpbmRBbmRSZXBsYWNlQWN0aXZp
dHk6IHsKICAgICAgICAgICAgICAgICByZXBsYWNlU2VsZWN0aW9uID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBXaGVuIGFwcGx5aW5nIGZpbmQgYW5kIHJlcGxh
Y2UgYWN0aXZpdGllcywgd2Ugd2FudCB0byBtYXRjaCB0aGUgY2FwaXRhbGl6YXRpb24gb2YgdGhl
IHJlcGxhY2VkIHRleHQsCiAgICAgICAgICAgICAgICAgLy8gKHVubGVzcyB3ZSdyZSByZXBsYWNp
bmcgd2l0aCBhbiBhYmJyZXZpYXRpb24uKQotICAgICAgICAgICAgICAgIFN0cmluZyB1cHBlcmNh
c2VSZXBsYWNlbWVudFN0cmluZyA9IHJlcGxhY2VtZW50U3RyaW5nLnVwcGVyKCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGNsb3Nlc3RTdHJpbmcubGVuZ3RoKCkgPiAwICYmIHJlcGxhY2VtZW50U3Ry
aW5nLmxlbmd0aCgpID4gMiAmJiByZXBsYWNlbWVudFN0cmluZyAhPSB1cHBlcmNhc2VSZXBsYWNl
bWVudFN0cmluZykgewotICAgICAgICAgICAgICAgICAgICBpZiAoY2xvc2VzdFN0cmluZ1swXSA9
PSBjbG9zZXN0U3RyaW5nLnVwcGVyKClbMF0pCisgICAgICAgICAgICAgICAgaWYgKGNsb3Nlc3RT
dHJpbmcubGVuZ3RoKCkgPiAwICYmIHJlcGxhY2VtZW50U3RyaW5nLmxlbmd0aCgpID4gMiAmJiBy
ZXBsYWNlbWVudFN0cmluZyAhPSByZXBsYWNlbWVudFN0cmluZy5jb252ZXJ0VG9VcHBlcmNhc2VX
aXRob3V0TG9jYWxlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNsb3Nlc3RTdHJpbmdb
MF0gPT0gdV90b3VwcGVyKGNsb3Nlc3RTdHJpbmdbMF0pKQogICAgICAgICAgICAgICAgICAgICAg
ICAgbWFrZUNhcGl0YWxpemVkKCZyZXBsYWNlbWVudFN0cmluZywgMCk7CiAgICAgICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50U3RyaW5nID0g
cmVwbGFjZW1lbnRTdHJpbmcubG93ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxh
Y2VtZW50U3RyaW5nID0gcmVwbGFjZW1lbnRTdHJpbmcuY29udmVydFRvTG93ZXJjYXNlV2l0aG91
dExvY2FsZSgpOyAvLyBGSVhNRTogTmVlZHMgbG9jYWxlIHRvIHdvcmsgY29ycmVjdGx5LgogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IGYwMDBiMWYyODg1MWNkMTBhZTA2M2NkZWU4ODcxYjVi
NzEyNjFhY2EuLjM3YzZlYmJmODY5N2M0M2RlM2YwNTUwM2JhOTMxMzEwZTk5NWJlMmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNzY2LDE5ICs3NjYsMTkgQEAgdm9pZCBEb2N1bWVudDo6
aW52YWxpZGF0ZUFjY2Vzc0tleU1hcCgpCiAgICAgbV9lbGVtZW50c0J5QWNjZXNzS2V5LmNsZWFy
KCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmFkZEltYWdlRWxlbWVudEJ5TG93ZXJjYXNlZFVzZW1h
cChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBuYW1lLCBIVE1MSW1hZ2VFbGVtZW50JiBlbGVtZW50
KQordm9pZCBEb2N1bWVudDo6YWRkSW1hZ2VFbGVtZW50QnlDYXNlRm9sZGVkVXNlbWFwKGNvbnN0
IEF0b21pY1N0cmluZ0ltcGwmIG5hbWUsIEhUTUxJbWFnZUVsZW1lbnQmIGVsZW1lbnQpCiB7CiAg
ICAgcmV0dXJuIG1faW1hZ2VzQnlVc2VtYXAuYWRkKG5hbWUsIGVsZW1lbnQsICp0aGlzKTsKIH0K
IAotdm9pZCBEb2N1bWVudDo6cmVtb3ZlSW1hZ2VFbGVtZW50QnlMb3dlcmNhc2VkVXNlbWFwKGNv
bnN0IEF0b21pY1N0cmluZ0ltcGwmIG5hbWUsIEhUTUxJbWFnZUVsZW1lbnQmIGVsZW1lbnQpCit2
b2lkIERvY3VtZW50OjpyZW1vdmVJbWFnZUVsZW1lbnRCeUNhc2VGb2xkZWRVc2VtYXAoY29uc3Qg
QXRvbWljU3RyaW5nSW1wbCYgbmFtZSwgSFRNTEltYWdlRWxlbWVudCYgZWxlbWVudCkKIHsKICAg
ICByZXR1cm4gbV9pbWFnZXNCeVVzZW1hcC5yZW1vdmUobmFtZSwgZWxlbWVudCk7CiB9CiAKLUhU
TUxJbWFnZUVsZW1lbnQqIERvY3VtZW50OjppbWFnZUVsZW1lbnRCeUxvd2VyY2FzZWRVc2VtYXAo
Y29uc3QgQXRvbWljU3RyaW5nSW1wbCYgbmFtZSkgY29uc3QKK0hUTUxJbWFnZUVsZW1lbnQqIERv
Y3VtZW50OjppbWFnZUVsZW1lbnRCeUNhc2VGb2xkZWRVc2VtYXAoY29uc3QgQXRvbWljU3RyaW5n
SW1wbCYgbmFtZSkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9pbWFnZXNCeVVzZW1hcC5nZXRFbGVt
ZW50QnlMb3dlcmNhc2VkVXNlbWFwKG5hbWUsICp0aGlzKTsKKyAgICByZXR1cm4gbV9pbWFnZXNC
eVVzZW1hcC5nZXRFbGVtZW50QnlDYXNlRm9sZGVkVXNlbWFwKG5hbWUsICp0aGlzKTsKIH0KIAog
U2VsZWN0b3JRdWVyeSogRG9jdW1lbnQ6OnNlbGVjdG9yUXVlcnlGb3JTdHJpbmcoY29uc3QgU3Ry
aW5nJiBzZWxlY3RvclN0cmluZywgRXhjZXB0aW9uQ29kZSYgZWMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5o
CmluZGV4IGNiNjJmZTg3NjM3YzFjN2FkMDYwZTY5NzYwNmI3OTM0MTBjM2I2MGEuLjcyY2JiY2Nm
YTk5NGYxMDBkMzUwMmM5YmQ5NzZiZDQwZTI5MDM5YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBA
IC0zNTAsOSArMzUwLDkgQEAgcHVibGljOgogICAgIEVsZW1lbnQqIGdldEVsZW1lbnRCeUFjY2Vz
c0tleShjb25zdCBTdHJpbmcmIGtleSk7CiAgICAgdm9pZCBpbnZhbGlkYXRlQWNjZXNzS2V5TWFw
KCk7CiAKLSAgICB2b2lkIGFkZEltYWdlRWxlbWVudEJ5TG93ZXJjYXNlZFVzZW1hcChjb25zdCBB
dG9taWNTdHJpbmdJbXBsJiwgSFRNTEltYWdlRWxlbWVudCYpOwotICAgIHZvaWQgcmVtb3ZlSW1h
Z2VFbGVtZW50QnlMb3dlcmNhc2VkVXNlbWFwKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmLCBIVE1M
SW1hZ2VFbGVtZW50Jik7Ci0gICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbGVtZW50QnlMb3dl
cmNhc2VkVXNlbWFwKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmKSBjb25zdDsKKyAgICB2b2lkIGFk
ZEltYWdlRWxlbWVudEJ5Q2FzZUZvbGRlZFVzZW1hcChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiwg
SFRNTEltYWdlRWxlbWVudCYpOworICAgIHZvaWQgcmVtb3ZlSW1hZ2VFbGVtZW50QnlDYXNlRm9s
ZGVkVXNlbWFwKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmLCBIVE1MSW1hZ2VFbGVtZW50Jik7Cisg
ICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbGVtZW50QnlDYXNlRm9sZGVkVXNlbWFwKGNvbnN0
IEF0b21pY1N0cmluZ0ltcGwmKSBjb25zdDsKIAogICAgIFNlbGVjdG9yUXVlcnkqIHNlbGVjdG9y
UXVlcnlGb3JTdHJpbmcoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQg
Y2xlYXJTZWxlY3RvclF1ZXJ5Q2FjaGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3Jk
ZXJlZE1hcC5jcHAKaW5kZXggM2UzNGI0ZTA5MWNlNThiYTI3NmYwOTcyNjJiZmEzNWEzMTlhMzU2
Mi4uZGE4ZTRmMjVlNzRjNDJmZWNlOGI5ZGUyMjljYzUwMDUyNGI3Y2QxNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHAKQEAgLTE0NywxOCArMTQ3LDE4IEBAIEhU
TUxNYXBFbGVtZW50KiBEb2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeU1hcE5hbWUoY29u
c3QgQXRvbWljU3RyaW5nSW1wbCYKICAgICB9KSk7CiB9CiAKLUhUTUxNYXBFbGVtZW50KiBEb2N1
bWVudE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeUxvd2VyY2FzZWRNYXBOYW1lKGNvbnN0IEF0b21p
Y1N0cmluZ0ltcGwmIGtleSwgY29uc3QgVHJlZVNjb3BlJiBzY29wZSkgY29uc3QKK0hUTUxNYXBF
bGVtZW50KiBEb2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeUNhc2VGb2xkZWRNYXBOYW1l
KGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIGtleSwgY29uc3QgVHJlZVNjb3BlJiBzY29wZSkgY29u
c3QKIHsKICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTE1hcEVsZW1lbnQ+KGdldChrZXksIHNjb3Bl
LCBbXSAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYga2V5LCBjb25zdCBFbGVtZW50JiBlbGVtZW50
KSB7Ci0gICAgICAgIHJldHVybiBpczxIVE1MTWFwRWxlbWVudD4oZWxlbWVudCkgJiYgZG93bmNh
c3Q8SFRNTE1hcEVsZW1lbnQ+KGVsZW1lbnQpLmdldE5hbWUoKS5sb3dlcigpLmltcGwoKSA9PSAm
a2V5OworICAgICAgICByZXR1cm4gaXM8SFRNTE1hcEVsZW1lbnQ+KGVsZW1lbnQpICYmIGVxdWFs
KGRvd25jYXN0PEhUTUxNYXBFbGVtZW50PihlbGVtZW50KS5nZXROYW1lKCkuc3RyaW5nKCkuZm9s
ZENhc2UoKS5pbXBsKCksICZrZXkpOwogICAgIH0pKTsKIH0KIAotSFRNTEltYWdlRWxlbWVudCog
RG9jdW1lbnRPcmRlcmVkTWFwOjpnZXRFbGVtZW50QnlMb3dlcmNhc2VkVXNlbWFwKGNvbnN0IEF0
b21pY1N0cmluZ0ltcGwmIGtleSwgY29uc3QgVHJlZVNjb3BlJiBzY29wZSkgY29uc3QKK0hUTUxJ
bWFnZUVsZW1lbnQqIERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5Q2FzZUZvbGRlZFVz
ZW1hcChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBrZXksIGNvbnN0IFRyZWVTY29wZSYgc2NvcGUp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbWFnZUVsZW1lbnQ+KGdldChrZXks
IHNjb3BlLCBbXSAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYga2V5LCBjb25zdCBFbGVtZW50JiBl
bGVtZW50KSB7CiAgICAgICAgIC8vIEZJWE1FOiBIVE1MNSBzcGVjaWZpY2F0aW9uIHNheXMgd2Ug
c2hvdWxkIG1hdGNoIGJvdGggaW1hZ2UgYW5kIG9iamVjdCBlbGVtZW50cy4KLSAgICAgICAgcmV0
dXJuIGlzPEhUTUxJbWFnZUVsZW1lbnQ+KGVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxJbWFnZUVs
ZW1lbnQ+KGVsZW1lbnQpLm1hdGNoZXNMb3dlcmNhc2VkVXNlbWFwKGtleSk7CisgICAgICAgIHJl
dHVybiBpczxIVE1MSW1hZ2VFbGVtZW50PihlbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MSW1hZ2VF
bGVtZW50PihlbGVtZW50KS5tYXRjaGVzQ2FzZUZvbGRlZFVzZW1hcChrZXkpOwogICAgIH0pKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5oCmluZGV4IDcyMDU1NWIy
OGQzOTVlMmViNzI0YTNmYmNjMzMyMzdiZjU5NTU5MDAuLmI0OTg4Y2M3NGI1Mzc2MjY5ZTc1NTIz
MDAzMTY2MzJmMDk4NWRjODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dE9yZGVyZWRNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFw
LmgKQEAgLTYwLDggKzYwLDggQEAgcHVibGljOgogICAgIEVsZW1lbnQqIGdldEVsZW1lbnRCeUlk
KGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmLCBjb25zdCBUcmVlU2NvcGUmKSBjb25zdDsKICAgICBF
bGVtZW50KiBnZXRFbGVtZW50QnlOYW1lKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmLCBjb25zdCBU
cmVlU2NvcGUmKSBjb25zdDsKICAgICBIVE1MTWFwRWxlbWVudCogZ2V0RWxlbWVudEJ5TWFwTmFt
ZShjb25zdCBBdG9taWNTdHJpbmdJbXBsJiwgY29uc3QgVHJlZVNjb3BlJikgY29uc3Q7Ci0gICAg
SFRNTE1hcEVsZW1lbnQqIGdldEVsZW1lbnRCeUxvd2VyY2FzZWRNYXBOYW1lKGNvbnN0IEF0b21p
Y1N0cmluZ0ltcGwmLCBjb25zdCBUcmVlU2NvcGUmKSBjb25zdDsKLSAgICBIVE1MSW1hZ2VFbGVt
ZW50KiBnZXRFbGVtZW50QnlMb3dlcmNhc2VkVXNlbWFwKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwm
LCBjb25zdCBUcmVlU2NvcGUmKSBjb25zdDsKKyAgICBIVE1MTWFwRWxlbWVudCogZ2V0RWxlbWVu
dEJ5Q2FzZUZvbGRlZE1hcE5hbWUoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYsIGNvbnN0IFRyZWVT
Y29wZSYpIGNvbnN0OworICAgIEhUTUxJbWFnZUVsZW1lbnQqIGdldEVsZW1lbnRCeUNhc2VGb2xk
ZWRVc2VtYXAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYsIGNvbnN0IFRyZWVTY29wZSYpIGNvbnN0
OwogICAgIEhUTUxMYWJlbEVsZW1lbnQqIGdldEVsZW1lbnRCeUxhYmVsRm9yQXR0cmlidXRlKGNv
bnN0IEF0b21pY1N0cmluZ0ltcGwmLCBjb25zdCBUcmVlU2NvcGUmKSBjb25zdDsKICAgICBFbGVt
ZW50KiBnZXRFbGVtZW50QnlXaW5kb3dOYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nSW1wbCYs
IGNvbnN0IFRyZWVTY29wZSYpIGNvbnN0OwogICAgIEVsZW1lbnQqIGdldEVsZW1lbnRCeURvY3Vt
ZW50TmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmLCBjb25zdCBUcmVlU2NvcGUmKSBj
b25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAKaW5kZXggZDQ2YTNhNmQ4ZDAwYjZjODFlZTg3
NmUxYjI5NjFlODgxZjFlNjFjYy4uYWZmNjg3N2E0ZGIxMGNkNWQ1MmM0NTg4NjQxNTVkMzkyZDgz
YjU5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAKQEAgLTIwMSwxOCArMjAxLDE2IEBAIHZv
aWQgVHJlZVNjb3BlOjpyZW1vdmVJbWFnZU1hcChIVE1MTWFwRWxlbWVudCYgaW1hZ2VNYXApCiAK
IEhUTUxNYXBFbGVtZW50KiBUcmVlU2NvcGU6OmdldEltYWdlTWFwKGNvbnN0IFN0cmluZyYgdXJs
KSBjb25zdAogewotICAgIGlmICh1cmwuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIGlmICghbV9pbWFnZU1hcHNCeU5hbWUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIHNpemVfdCBoYXNoUG9zID0gdXJsLmZpbmQoJyMnKTsKLSAgICBTdHJpbmcgbmFtZSA9ICho
YXNoUG9zID09IG5vdEZvdW5kID8gU3RyaW5nKCkgOiB1cmwuc3Vic3RyaW5nKGhhc2hQb3MgKyAx
KSkuaW1wbCgpOworICAgIGF1dG8gaGFzaFBvc2l0aW9uID0gdXJsLmZpbmQoJyMnKTsKKyAgICBp
ZiAoaGFzaFBvc2l0aW9uID09IG5vdEZvdW5kKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICBTdHJpbmcgbmFtZSA9IHVybC5zdWJzdHJpbmcoaGFzaFBvc2l0aW9uICsgMSk7CiAgICAgaWYg
KG5hbWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAobV9yb290
Tm9kZS5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkpIHsKLSAgICAgICAgQXRvbWljU3RyaW5n
IGxvd2VyY2FzZWROYW1lID0gbmFtZS5sb3dlcigpOwotICAgICAgICByZXR1cm4gbV9pbWFnZU1h
cHNCeU5hbWUtPmdldEVsZW1lbnRCeUxvd2VyY2FzZWRNYXBOYW1lKCpsb3dlcmNhc2VkTmFtZS5p
bXBsKCksICp0aGlzKTsKLSAgICB9CisgICAgaWYgKG1fcm9vdE5vZGUuZG9jdW1lbnQoKS5pc0hU
TUxEb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gbV9pbWFnZU1hcHNCeU5hbWUtPmdldEVsZW1l
bnRCeUNhc2VGb2xkZWRNYXBOYW1lKCpBdG9taWNTdHJpbmcobmFtZS5mb2xkQ2FzZSgpKS5pbXBs
KCksICp0aGlzKTsKICAgICByZXR1cm4gbV9pbWFnZU1hcHNCeU5hbWUtPmdldEVsZW1lbnRCeU1h
cE5hbWUoKkF0b21pY1N0cmluZyhuYW1lKS5pbXBsKCksICp0aGlzKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCmluZGV4IDVmNDVlNjNjYzkz
YTQzODg4NmY1MzgwYTMxNjY3YmJhNDMwN2Y1OTUuLmJjNThkOTA3ZWI2YzY0MWQ1MzNjODcwMWRk
MDVmNDRmMzBkNDViMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2Ev
SFRNTENvbnZlcnRlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxD
b252ZXJ0ZXIubW0KQEAgLTU2LDYgKzU2LDcgQEAKICNpbXBvcnQgIk5TQXR0cmlidXRlZFN0cmlu
Z1NQSS5oIgogI2ltcG9ydCAiUkdCQ29sb3IuaCIKICNpbXBvcnQgIlJlbmRlckltYWdlLmgiCisj
aW1wb3J0ICJSZW5kZXJUZXh0LmgiCiAjaW1wb3J0ICJTb2Z0TGlua2luZy5oIgogI2ltcG9ydCAi
U3R5bGVQcm9wZXJ0aWVzLmgiCiAjaW1wb3J0ICJTdHlsZWRFbGVtZW50LmgiCkBAIC0yMjc4LDE1
ICsyMjc5LDEyIEBAIHZvaWQgSFRNTENvbnZlcnRlcjo6X3Byb2Nlc3NUZXh0KENoYXJhY3RlckRh
dGEmIGNoYXJhY3RlckRhdGEpCiAKICAgICBpZiAob3V0cHV0U3RyaW5nLmxlbmd0aCgpKSB7CiAg
ICAgICAgIFN0cmluZyB0ZXh0VHJhbnNmb3JtID0gX2NhY2hlcy0+cHJvcGVydHlWYWx1ZUZvck5v
ZGUoY2hhcmFjdGVyRGF0YSwgQ1NTUHJvcGVydHlUZXh0VHJhbnNmb3JtKTsKLSAgICAgICAgaWYg
KHRleHRUcmFuc2Zvcm0ubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIGlmICh0ZXh0VHJhbnNmb3Jt
ID09ICJjYXBpdGFsaXplIikgey8vIEZJWE1FOiBUaGlzIGlzIGV4dHJlbWVseSBpbmVmZmljaWVu
dC4KLSAgICAgICAgICAgICAgICBOU1N0cmluZyAqdGVtcG9yYXJ5U3RyaW5nID0gb3V0cHV0U3Ry
aW5nOwotICAgICAgICAgICAgICAgIG91dHB1dFN0cmluZyA9IFt0ZW1wb3JhcnlTdHJpbmcgY2Fw
aXRhbGl6ZWRTdHJpbmddOwotICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXh0VHJhbnNmb3JtID09
ICJ1cHBlcmNhc2UiKQotICAgICAgICAgICAgICAgIG91dHB1dFN0cmluZyA9IG91dHB1dFN0cmlu
Zy51cHBlcigpOwotICAgICAgICAgICAgZWxzZSBpZiAodGV4dFRyYW5zZm9ybSA9PSAibG93ZXJj
YXNlIikKLSAgICAgICAgICAgICAgICBvdXRwdXRTdHJpbmcgPSBvdXRwdXRTdHJpbmcubG93ZXIo
KTsKLSAgICAgICAgfQorICAgICAgICBpZiAodGV4dFRyYW5zZm9ybSA9PSAiY2FwaXRhbGl6ZSIp
CisgICAgICAgICAgICBtYWtlQ2FwaXRhbGl6ZWQoJm91dHB1dFN0cmluZywgMCk7IC8vIEZJWE1F
OiBOZWVkcyB0byB0YWtlIGxvY2FsZSBpbnRvIGFjY291bnQgdG8gd29yayBjb3JyZWN0bHkuCisg
ICAgICAgIGVsc2UgaWYgKHRleHRUcmFuc2Zvcm0gPT0gInVwcGVyY2FzZSIpCisgICAgICAgICAg
ICBvdXRwdXRTdHJpbmcgPSBvdXRwdXRTdHJpbmcuY29udmVydFRvVXBwZXJjYXNlV2l0aG91dExv
Y2FsZSgpOyAvLyBGSVhNRTogTmVlZHMgbG9jYWxlIHRvIHdvcmsgY29ycmVjdGx5LgorICAgICAg
ICBlbHNlIGlmICh0ZXh0VHJhbnNmb3JtID09ICJsb3dlcmNhc2UiKQorICAgICAgICAgICAgb3V0
cHV0U3RyaW5nID0gb3V0cHV0U3RyaW5nLmNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGUo
KTsgLy8gRklYTUU6IE5lZWRzIGxvY2FsZSB0byB3b3JrIGNvcnJlY3RseS4KIAogICAgICAgICBb
X2F0dHJTdHIgcmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlOnJhbmdlVG9SZXBsYWNlIHdpdGhTdHJp
bmc6b3V0cHV0U3RyaW5nXTsKICAgICAgICAgcmFuZ2VUb1JlcGxhY2UubGVuZ3RoID0gb3V0cHV0
U3RyaW5nLmxlbmd0aCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1h
Z2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAK
aW5kZXggOGRlOTU2MzBmYmJkMGVlNGVjMTRlNDlkMGE2NmYzY2NiZjA3NzBkMi4uNDg4YzRlNmFm
OGU4NTE4ZTAxM2FlMTY3MmE3YzE0ZGNjNmM0OWU3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxJbWFnZUVsZW1lbnQuY3BwCkBAIC0yMDEsMjAgKzIwMSwyMCBAQCB2b2lkIEhUTUxJbWFnZUVs
ZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0
b21pY1N0cgogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBzcmNBdHRyIHx8IG5hbWUgPT0gc3Jjc2V0
QXR0ciB8fCBuYW1lID09IHNpemVzQXR0cikKICAgICAgICAgc2VsZWN0SW1hZ2VTb3VyY2UoKTsK
ICAgICBlbHNlIGlmIChuYW1lID09IHVzZW1hcEF0dHIpIHsKLSAgICAgICAgaWYgKGluRG9jdW1l
bnQoKSAmJiAhbV9sb3dlcmNhc2VkVXNlbWFwLmlzTnVsbCgpKQotICAgICAgICAgICAgZG9jdW1l
bnQoKS5yZW1vdmVJbWFnZUVsZW1lbnRCeUxvd2VyY2FzZWRVc2VtYXAoKm1fbG93ZXJjYXNlZFVz
ZW1hcC5pbXBsKCksICp0aGlzKTsKKyAgICAgICAgaWYgKGluRG9jdW1lbnQoKSAmJiAhbV9jYXNl
Rm9sZGVkVXNlbWFwLmlzTnVsbCgpKQorICAgICAgICAgICAgZG9jdW1lbnQoKS5yZW1vdmVJbWFn
ZUVsZW1lbnRCeUNhc2VGb2xkZWRVc2VtYXAoKm1fY2FzZUZvbGRlZFVzZW1hcC5pbXBsKCksICp0
aGlzKTsKIAogICAgICAgICAvLyBUaGUgSFRNTEltYWdlRWxlbWVudCdzIHVzZU1hcCgpIHZhbHVl
IGluY2x1ZGVzIHRoZSAnIycgc3ltYm9sIGF0IHRoZSBiZWdpbm5pbmcsIHdoaWNoIGhhcyB0byBi
ZSBzdHJpcHBlZCBvZmYuCiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY2hlY2sgdGhhdCB0
aGUgZmlyc3QgY2hhcmFjdGVyIGlzICcjJy4KLSAgICAgICAgLy8gRklYTUU6IEhUTUw1IHNwZWNp
ZmljYXRpb24gc2F5cyB3ZSBzaG91bGQgc3RyaXAgYW55IGxlYWRpbmcgc3RyaW5nIGJlZm9yZSAn
IycuCi0gICAgICAgIC8vIEZJWE1FOiBIVE1MNSBzcGVjaWZpY2F0aW9uIHNheXMgd2Ugc2hvdWxk
IGlnbm9yZSB1c2VtYXAgYXR0cmlidXRlcyB3aXRob3V0ICMuCisgICAgICAgIC8vIEZJWE1FOiBI
VE1MIHNwZWNpZmljYXRpb24gc2F5cyB3ZSBzaG91bGQgc3RyaXAgYW55IGxlYWRpbmcgc3RyaW5n
IGJlZm9yZSAnIycuCisgICAgICAgIC8vIEZJWE1FOiBIVE1MIHNwZWNpZmljYXRpb24gc2F5cyB3
ZSBzaG91bGQgaWdub3JlIHVzZW1hcCBhdHRyaWJ1dGVzIHdpdGhvdXQgJyMnLgogICAgICAgICBp
ZiAodmFsdWUubGVuZ3RoKCkgPiAxKQotICAgICAgICAgICAgbV9sb3dlcmNhc2VkVXNlbWFwID0g
dmFsdWUuc3RyaW5nKCkuc3Vic3RyaW5nKDEpLmxvd2VyKCk7CisgICAgICAgICAgICBtX2Nhc2VG
b2xkZWRVc2VtYXAgPSB2YWx1ZS5zdHJpbmcoKS5zdWJzdHJpbmcoMSkuZm9sZENhc2UoKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgbV9sb3dlcmNhc2VkVXNlbWFwID0gbnVsbEF0b207Cisg
ICAgICAgICAgICBtX2Nhc2VGb2xkZWRVc2VtYXAgPSBudWxsQXRvbTsKIAotICAgICAgICBpZiAo
aW5Eb2N1bWVudCgpICYmICFtX2xvd2VyY2FzZWRVc2VtYXAuaXNOdWxsKCkpCi0gICAgICAgICAg
ICBkb2N1bWVudCgpLmFkZEltYWdlRWxlbWVudEJ5TG93ZXJjYXNlZFVzZW1hcCgqbV9sb3dlcmNh
c2VkVXNlbWFwLmltcGwoKSwgKnRoaXMpOworICAgICAgICBpZiAoaW5Eb2N1bWVudCgpICYmICFt
X2Nhc2VGb2xkZWRVc2VtYXAuaXNOdWxsKCkpCisgICAgICAgICAgICBkb2N1bWVudCgpLmFkZElt
YWdlRWxlbWVudEJ5Q2FzZUZvbGRlZFVzZW1hcCgqbV9jYXNlRm9sZGVkVXNlbWFwLmltcGwoKSwg
KnRoaXMpOwogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBjb21wb3NpdGVBdHRyKSB7CiAgICAgICAg
IC8vIEZJWE1FOiBpbWFnZXMgZG9uJ3Qgc3VwcG9ydCBibGVuZCBtb2RlcyBpbiB0aGVpciBjb21w
b3NpdGluZyBhdHRyaWJ1dGUuCiAgICAgICAgIEJsZW5kTW9kZSBibGVuZE9wID0gQmxlbmRNb2Rl
Tm9ybWFsOwpAQCAtMzEyLDggKzMxMiw4IEBAIE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJl
cXVlc3QgSFRNTEltYWdlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmCiAgICAg
Ly8gaW4gY2FsbGJhY2tzIGJhY2sgdG8gdGhpcyBub2RlLgogICAgIE5vZGU6Okluc2VydGlvbk5v
dGlmaWNhdGlvblJlcXVlc3QgaW5zZXJ0Tm90aWZpY2F0aW9uUmVxdWVzdCA9IEhUTUxFbGVtZW50
OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uUG9pbnQpOwogCi0gICAgaWYgKGluc2VydGlvblBvaW50
LmluRG9jdW1lbnQoKSAmJiAhbV9sb3dlcmNhc2VkVXNlbWFwLmlzTnVsbCgpKQotICAgICAgICBk
b2N1bWVudCgpLmFkZEltYWdlRWxlbWVudEJ5TG93ZXJjYXNlZFVzZW1hcCgqbV9sb3dlcmNhc2Vk
VXNlbWFwLmltcGwoKSwgKnRoaXMpOworICAgIGlmIChpbnNlcnRpb25Qb2ludC5pbkRvY3VtZW50
KCkgJiYgIW1fY2FzZUZvbGRlZFVzZW1hcC5pc051bGwoKSkKKyAgICAgICAgZG9jdW1lbnQoKS5h
ZGRJbWFnZUVsZW1lbnRCeUNhc2VGb2xkZWRVc2VtYXAoKm1fY2FzZUZvbGRlZFVzZW1hcC5pbXBs
KCksICp0aGlzKTsKIAogICAgIGlmIChpczxIVE1MUGljdHVyZUVsZW1lbnQ+KHBhcmVudE5vZGUo
KSkpIHsKICAgICAgICAgc2V0UGljdHVyZUVsZW1lbnQoJmRvd25jYXN0PEhUTUxQaWN0dXJlRWxl
bWVudD4oKnBhcmVudE5vZGUoKSkpOwpAQCAtMzMzLDggKzMzMyw4IEBAIHZvaWQgSFRNTEltYWdl
RWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQpCiAgICAg
aWYgKG1fZm9ybSkKICAgICAgICAgbV9mb3JtLT5yZW1vdmVJbWdFbGVtZW50KHRoaXMpOwogCi0g
ICAgaWYgKGluc2VydGlvblBvaW50LmluRG9jdW1lbnQoKSAmJiAhbV9sb3dlcmNhc2VkVXNlbWFw
LmlzTnVsbCgpKQotICAgICAgICBkb2N1bWVudCgpLnJlbW92ZUltYWdlRWxlbWVudEJ5TG93ZXJj
YXNlZFVzZW1hcCgqbV9sb3dlcmNhc2VkVXNlbWFwLmltcGwoKSwgKnRoaXMpOworICAgIGlmIChp
bnNlcnRpb25Qb2ludC5pbkRvY3VtZW50KCkgJiYgIW1fY2FzZUZvbGRlZFVzZW1hcC5pc051bGwo
KSkKKyAgICAgICAgZG9jdW1lbnQoKS5yZW1vdmVJbWFnZUVsZW1lbnRCeUNhc2VGb2xkZWRVc2Vt
YXAoKm1fY2FzZUZvbGRlZFVzZW1hcC5pbXBsKCksICp0aGlzKTsKICAgICAKICAgICBpZiAoaXM8
SFRNTFBpY3R1cmVFbGVtZW50PihwYXJlbnROb2RlKCkpKQogICAgICAgICBzZXRQaWN0dXJlRWxl
bWVudChudWxscHRyKTsKQEAgLTQ3NCwxMCArNDc0LDEwIEBAIFN0cmluZyBIVE1MSW1hZ2VFbGVt
ZW50Ojpjb21wbGV0ZVVSTHNJbkF0dHJpYnV0ZVZhbHVlKGNvbnN0IFVSTCYgYmFzZSwgY29uc3Qg
QXR0CiAgICAgcmV0dXJuIEhUTUxFbGVtZW50Ojpjb21wbGV0ZVVSTHNJbkF0dHJpYnV0ZVZhbHVl
KGJhc2UsIGF0dHJpYnV0ZSk7CiB9CiAKLWJvb2wgSFRNTEltYWdlRWxlbWVudDo6bWF0Y2hlc0xv
d2VyY2FzZWRVc2VtYXAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYgbmFtZSkgY29uc3QKK2Jvb2wg
SFRNTEltYWdlRWxlbWVudDo6bWF0Y2hlc0Nhc2VGb2xkZWRVc2VtYXAoY29uc3QgQXRvbWljU3Ry
aW5nSW1wbCYgbmFtZSkgY29uc3QKIHsKLSAgICBBU1NFUlQoU3RyaW5nKCZjb25zdF9jYXN0PEF0
b21pY1N0cmluZ0ltcGwmPihuYW1lKSkubG93ZXIoKS5pbXBsKCkgPT0gJm5hbWUpOwotICAgIHJl
dHVybiBtX2xvd2VyY2FzZWRVc2VtYXAuaW1wbCgpID09ICZuYW1lOworICAgIEFTU0VSVChTdHJp
bmcoJmNvbnN0X2Nhc3Q8QXRvbWljU3RyaW5nSW1wbCY+KG5hbWUpKS5mb2xkQ2FzZSgpLmltcGwo
KSA9PSAmbmFtZSk7CisgICAgcmV0dXJuIG1fY2FzZUZvbGRlZFVzZW1hcC5pbXBsKCkgPT0gJm5h
bWU7CiB9CiAKIGNvbnN0IEF0b21pY1N0cmluZyYgSFRNTEltYWdlRWxlbWVudDo6YWx0KCkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgKaW5kZXggNDQ3YjYyNDNhZDY1
NzU4NzMxNTU0N2EwZDkwNDM3ODU4NmIzYWM3NC4uNjc5MzFiNWQ2MGI1Zjc4MDEzNWY1ZTg4YmVm
NzUwYjJhMzkxMzY3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VF
bGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgKQEAg
LTYwLDcgKzYwLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRMb2FkTWFudWFsbHkoYm9vbCBs
b2FkTWFudWFsbHkpIHsgbV9pbWFnZUxvYWRlci5zZXRMb2FkTWFudWFsbHkobG9hZE1hbnVhbGx5
KTsgfQogCi0gICAgYm9vbCBtYXRjaGVzTG93ZXJjYXNlZFVzZW1hcChjb25zdCBBdG9taWNTdHJp
bmdJbXBsJikgY29uc3Q7CisgICAgYm9vbCBtYXRjaGVzQ2FzZUZvbGRlZFVzZW1hcChjb25zdCBB
dG9taWNTdHJpbmdJbXBsJikgY29uc3Q7CiAKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFsdCgp
IGNvbnN0OwogCkBAIC0xMzQsNyArMTM0LDcgQEAgcHJpdmF0ZToKICAgICBDb21wb3NpdGVPcGVy
YXRvciBtX2NvbXBvc2l0ZU9wZXJhdG9yOwogICAgIEF0b21pY1N0cmluZyBtX2Jlc3RGaXRJbWFn
ZVVSTDsKICAgICBBdG9taWNTdHJpbmcgbV9jdXJyZW50U3JjOwotICAgIEF0b21pY1N0cmluZyBt
X2xvd2VyY2FzZWRVc2VtYXA7CisgICAgQXRvbWljU3RyaW5nIG1fY2FzZUZvbGRlZFVzZW1hcDsK
ICAgICBmbG9hdCBtX2ltYWdlRGV2aWNlUGl4ZWxSYXRpbzsKICAgICBib29sIG1fZXhwZXJpbWVu
dGFsSW1hZ2VNZW51RW5hYmxlZDsKICAgICBib29sIG1faGFkTmFtZUJlZm9yZUF0dHJpYnV0ZUNo
YW5nZWQgeyBmYWxzZSB9OyAvLyBGSVhNRTogV2Ugb25seSBuZWVkIHRoaXMgYmVjYXVzZSBwYXJz
ZUF0dHJpYnV0ZSgpIGNhbid0IHNlZSB0aGUgb2xkIHZhbHVlLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNYXBFbGVtZW50LmNwcAppbmRleCAzZWU2MWJhYTAwMWUyMzRhNGIzM2Y3ZDE1OGJjNjg2OTky
YzQ2Y2Y4Li5lY2M4NzUyOTZiNTNlMzBlMDI5MTRhYjVhZGE5NWRjM2RhNDI1Njk4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcApAQCAtNzgsMTAgKzc4LDggQEAgYm9vbCBI
VE1MTWFwRWxlbWVudDo6bWFwTW91c2VFdmVudChMYXlvdXRQb2ludCBsb2NhdGlvbiwgY29uc3Qg
TGF5b3V0U2l6ZSYgc2l6ZSwKIEhUTUxJbWFnZUVsZW1lbnQqIEhUTUxNYXBFbGVtZW50OjppbWFn
ZUVsZW1lbnQoKQogewogICAgIGlmIChtX25hbWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
MDsKLSAgICBBdG9taWNTdHJpbmcgbG93ZXJjYXNlZE5hbWUgPSBtX25hbWUubG93ZXIoKTsKLSAg
ICBBU1NFUlQobG93ZXJjYXNlZE5hbWUuaW1wbCgpKTsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS5p
bWFnZUVsZW1lbnRCeUxvd2VyY2FzZWRVc2VtYXAoKmxvd2VyY2FzZWROYW1lLmltcGwoKSk7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBkb2N1bWVudCgpLmltYWdlRWxlbWVu
dEJ5Q2FzZUZvbGRlZFVzZW1hcCgqQXRvbWljU3RyaW5nKG1fbmFtZS5zdHJpbmcoKS5mb2xkQ2Fz
ZSgpKS5pbXBsKCkpOwogfQogCiB2b2lkIEhUTUxNYXBFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQpAQCAt
MTAxLDcgKzk5LDcgQEAgdm9pZCBIVE1MTWFwRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW4KICAgICAgICAgU3RyaW5nIG1h
cE5hbWUgPSB2YWx1ZTsKICAgICAgICAgaWYgKG1hcE5hbWVbMF0gPT0gJyMnKQogICAgICAgICAg
ICAgbWFwTmFtZSA9IG1hcE5hbWUuc3Vic3RyaW5nKDEpOwotICAgICAgICBtX25hbWUgPSBkb2N1
bWVudCgpLmlzSFRNTERvY3VtZW50KCkgPyBtYXBOYW1lLmxvd2VyKCkgOiBtYXBOYW1lOworICAg
ICAgICBtX25hbWUgPSBkb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkgPyBtYXBOYW1lLmZvbGRD
YXNlKCkgOiBtYXBOYW1lOwogICAgICAgICBpZiAoaW5Eb2N1bWVudCgpKQogICAgICAgICAgICAg
dHJlZVNjb3BlKCkuYWRkSW1hZ2VNYXAoKnRoaXMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9MYW5ndWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MYW5n
dWFnZS5jcHAKaW5kZXggNjU1NzhkMGVjZGU2NGUyZmYwNTc1ZTgyYzQ4ZTQ1NTEyNmE4MzljZC4u
YThhZThlM2M4MDMyZmM0ZDRjZDk1MThjYmJhNWNjMjlmNjZmOTdkMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGFuZ3VhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0xhbmd1YWdlLmNwcApAQCAtOTksNyArOTksNyBAQCBWZWN0b3I8U3RyaW5nPiB1c2Vy
UHJlZmVycmVkTGFuZ3VhZ2VzKCkKIAogc3RhdGljIFN0cmluZyBjYW5vbmljYWxMYW5ndWFnZUlk
ZW50aWZpZXIoY29uc3QgU3RyaW5nJiBsYW5ndWFnZUNvZGUpCiB7Ci0gICAgU3RyaW5nIGxvd2Vy
Y2FzZUxhbmd1YWdlQ29kZSA9IGxhbmd1YWdlQ29kZS5sb3dlcigpOworICAgIFN0cmluZyBsb3dl
cmNhc2VMYW5ndWFnZUNvZGUgPSBsYW5ndWFnZUNvZGUuY29udmVydFRvQVNDSUlMb3dlcmNhc2Uo
KTsKICAgICAKICAgICBpZiAobG93ZXJjYXNlTGFuZ3VhZ2VDb2RlLmxlbmd0aCgpID49IDMgJiYg
bG93ZXJjYXNlTGFuZ3VhZ2VDb2RlWzJdID09ICdfJykKICAgICAgICAgbG93ZXJjYXNlTGFuZ3Vh
Z2VDb2RlLnJlcGxhY2UoMiwgMSwgIi0iKTsKQEAgLTEwOSw3ICsxMDksNyBAQCBzdGF0aWMgU3Ry
aW5nIGNhbm9uaWNhbExhbmd1YWdlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGxhbmd1YWdlQ29k
ZSkKIAogc2l6ZV90IGluZGV4T2ZCZXN0TWF0Y2hpbmdMYW5ndWFnZUluTGlzdChjb25zdCBTdHJp
bmcmIGxhbmd1YWdlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZ2VMaXN0LCBib29sJiBl
eGFjdE1hdGNoKQogewotICAgIFN0cmluZyBsb3dlcmNhc2VMYW5ndWFnZSA9IGxhbmd1YWdlLmxv
d2VyKCk7CisgICAgU3RyaW5nIGxvd2VyY2FzZUxhbmd1YWdlID0gbGFuZ3VhZ2UuY29udmVydFRv
QVNDSUlMb3dlcmNhc2UoKTsKICAgICBTdHJpbmcgbGFuZ3VhZ2VXaXRob3V0TG9jYWxlTWF0Y2g7
CiAgICAgU3RyaW5nIGxhbmd1YWdlTWF0Y2hCdXROb3RMb2NhbGU7CiAgICAgc2l6ZV90IGxhbmd1
YWdlV2l0aG91dExvY2FsZU1hdGNoSW5kZXggPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwCmlu
ZGV4IGZkZThlMDY5MzBkODcxMTRhMGRiYzg3YTRhZDVhMDNiMWZjYzU0OTAuLjViMWU3MmVmN2U1
YzcxOWM3ZTg5OGVlMzk2NTVhYTJiMjRmNWY3NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5jcHAK
QEAgLTQ4Miw3ICs0ODIsNyBAQCBib29sIEhhcmZCdXp6U2hhcGVyOjpzaGFwZUhhcmZCdXp6UnVu
cyhib29sIHNob3VsZFNldERpcmVjdGlvbikKICAgICAgICAgaGJfYnVmZmVyX2FkZF91dGYxNiho
YXJmQnV6ekJ1ZmZlci5nZXQoKSwgJnByZUNvbnRleHQsIDEsIDEsIDApOwogCiAgICAgICAgIGlm
IChtX2ZvbnQtPmlzU21hbGxDYXBzKCkgJiYgdV9pc2xvd2VyKG1fbm9ybWFsaXplZEJ1ZmZlcltj
dXJyZW50UnVuLT5zdGFydEluZGV4KCldKSkgewotICAgICAgICAgICAgU3RyaW5nIHVwcGVyVGV4
dCA9IFN0cmluZyhtX25vcm1hbGl6ZWRCdWZmZXIuZ2V0KCkgKyBjdXJyZW50UnVuLT5zdGFydElu
ZGV4KCksIGN1cnJlbnRSdW4tPm51bUNoYXJhY3RlcnMoKSkudXBwZXIoKTsKKyAgICAgICAgICAg
IFN0cmluZyB1cHBlclRleHQgPSBTdHJpbmcobV9ub3JtYWxpemVkQnVmZmVyLmdldCgpICsgY3Vy
cmVudFJ1bi0+c3RhcnRJbmRleCgpLCBjdXJyZW50UnVuLT5udW1DaGFyYWN0ZXJzKCkpLmNvbnZl
cnRUb1VwcGVyY2FzZVdpdGhvdXRMb2NhbGUoKTsKICAgICAgICAgICAgIGN1cnJlbnRGb250RGF0
YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHVwcGVyVGV4dFswXSwgZmFsc2UsIFNt
YWxsQ2Fwc1ZhcmlhbnQpLmZvbnQ7CiAgICAgICAgICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVy
cyA9IFN0cmluZ1ZpZXcodXBwZXJUZXh0KS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKICAgICAg
ICAgICAgIGhiX2J1ZmZlcl9hZGRfdXRmMTYoaGFyZkJ1enpCdWZmZXIuZ2V0KCksIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDE2X3QqPihjaGFyYWN0ZXJzKSwgY3VycmVudFJ1bi0+bnVtQ2hh
cmFjdGVycygpLCAwLCBjdXJyZW50UnVuLT5udW1DaGFyYWN0ZXJzKCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNwcAppbmRleCAxZDBlOWQwNjQz
Nzg2NGEyNDYyMTdiNGVmMjAwMzJkZmYyY2NkMjhmLi5iMjBjZmMzZDIyNzc3ZjY3NjZkNGNjM2Yx
NTgwYWVkN2Q0YWRlMWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0hUVFBQYXJzZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0hUVFBQYXJzZXJzLmNwcApAQCAtNDU2LDcgKzQ1Niw3IEBAIENvbnRlbnRTZWN1cml0eVBvbGlj
eTo6UmVmbGVjdGVkWFNTRGlzcG9zaXRpb24gcGFyc2VYU1NQcm90ZWN0aW9uSGVhZGVyKGNvbnN0
IFN0CiAjaWYgRU5BQkxFKE5PU05JRkYpCiBDb250ZW50VHlwZU9wdGlvbnNEaXNwb3NpdGlvbiBw
YXJzZUNvbnRlbnRUeXBlT3B0aW9uc0hlYWRlcihjb25zdCBTdHJpbmcmIGhlYWRlcikKIHsKLSAg
ICBpZiAoaGVhZGVyLnN0cmlwV2hpdGVTcGFjZSgpLmxvd2VyKCkgPT0gIm5vc25pZmYiKQorICAg
IGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShoZWFkZXIuc3RyaXBXaGl0ZVNwYWNl
KCksICJub3NuaWZmIikpCiAgICAgICAgIHJldHVybiBDb250ZW50VHlwZU9wdGlvbnNOb3NuaWZm
OwogICAgIHJldHVybiBDb250ZW50VHlwZU9wdGlvbnNOb25lOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvTUlNRUhlYWRlci5jcHAKaW5kZXggNTBlZWZiZDlhMTQyM2Uy
NjEyZjg1MGFiMDM1MDkwNTE4MGYyODI2MS4uM2E1OThjYzU4YmI2OTBjMGM2MzAxOWJjN2M4Zjlh
ODhmYjhjYTY4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9N
SU1FSGVhZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL01JTUVI
ZWFkZXIuY3BwCkBAIC03MCw3ICs3MCw3IEBAIHN0YXRpYyBLZXlWYWx1ZU1hcCByZXRyaWV2ZUtl
eVZhbHVlUGFpcnMoV2ViQ29yZTo6U2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIqIGJ1ZmZlCiAgICAg
ICAgICAgICAvLyBUaGlzIGlzIG5vdCBhIGtleSB2YWx1ZSBwYWlyLCBpZ25vcmUuCiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBrZXkgPSBsaW5lLnN1YnN0cmluZygw
LCBzZW1pQ29sb25JbmRleCkubG93ZXIoKS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICAgICAga2V5
ID0gbGluZS5zdWJzdHJpbmcoMCwgc2VtaUNvbG9uSW5kZXgpLmNvbnZlcnRUb0FTQ0lJTG93ZXJj
YXNlKCkuc3RyaXBXaGl0ZVNwYWNlKCk7CiAgICAgICAgIHZhbHVlLmFwcGVuZChsaW5lLnN1YnN0
cmluZyhzZW1pQ29sb25JbmRleCArIDEpKTsKICAgICB9CiAgICAgLy8gU3RvcmUgdGhlIGxhc3Qg
cHJvcGVydHkgaWYgdGhlcmUgaXMgb25lLgpAQCAtMTE0LDE0ICsxMTQsMTQgQEAgUGFzc1JlZlB0
cjxNSU1FSGVhZGVyPiBNSU1FSGVhZGVyOjpwYXJzZUhlYWRlcihTaGFyZWRCdWZmZXJDaHVua1Jl
YWRlciogYnVmZmVyKQogCiBNSU1FSGVhZGVyOjpFbmNvZGluZyBNSU1FSGVhZGVyOjpwYXJzZUNv
bnRlbnRUcmFuc2ZlckVuY29kaW5nKGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKLSAgICBTdHJpbmcg
ZW5jb2RpbmcgPSB0ZXh0LnN0cmlwV2hpdGVTcGFjZSgpLmxvd2VyKCk7Ci0gICAgaWYgKGVuY29k
aW5nID09ICJiYXNlNjQiKQorICAgIFN0cmluZyBlbmNvZGluZyA9IHRleHQuc3RyaXBXaGl0ZVNw
YWNlKCk7CisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGVuY29kaW5nLCAi
YmFzZTY0IikpCiAgICAgICAgIHJldHVybiBCYXNlNjQ7Ci0gICAgaWYgKGVuY29kaW5nID09ICJx
dW90ZWQtcHJpbnRhYmxlIikKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
ZW5jb2RpbmcsICJxdW90ZWQtcHJpbnRhYmxlIikpCiAgICAgICAgIHJldHVybiBRdW90ZWRQcmlu
dGFibGU7Ci0gICAgaWYgKGVuY29kaW5nID09ICI3Yml0IikKKyAgICBpZiAoZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UoZW5jb2RpbmcsICI3Yml0IikpCiAgICAgICAgIHJldHVybiBTZXZl
bkJpdDsKLSAgICBpZiAoZW5jb2RpbmcgPT0gImJpbmFyeSIpCisgICAgaWYgKGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKGVuY29kaW5nLCAiYmluYXJ5IikpCiAgICAgICAgIHJldHVybiBC
aW5hcnk7CiAgICAgTE9HX0VSUk9SKCJVbmtub3duIGVuY29kaW5nICclcycgZm91bmQgaW4gTUlN
RSBoZWFkZXIuIiwgdGV4dC5hc2NpaSgpLmRhdGEoKSk7CiAgICAgcmV0dXJuIFVua25vd247CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFu
ZGxlQ0ZOZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJj
ZUhhbmRsZUNGTmV0LmNwcAppbmRleCA1MTM5MGY2ZWQ3MDhlODVlMzlkYzQ2NDU5NmYzZjZkOWVl
ZWI2Y2QxLi5jOTVhNjU4MjNhYjk3MjY3OWMxNjliNmJkMGI4NzUxOGM2MTc4ZWQwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZO
ZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VI
YW5kbGVDRk5ldC5jcHAKQEAgLTgyLDE2ICs4MiwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICNpZiBVU0UoQ0ZORVRXT1JLKQogCi1zdGF0aWMgSGFzaFNldDxTdHJpbmc+JiBhbGxvd3NBbnlI
VFRQU0NlcnRpZmljYXRlSG9zdHMoKQorc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJ
bnNlbnNpdGl2ZUhhc2g+JiBhbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlSG9zdHMoKQogewotICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZz4+IGhvc3RzOworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNo
Pj4gaG9zdHM7CiAgICAgcmV0dXJuIGhvc3RzOwogfQogCi1zdGF0aWMgSGFzaE1hcDxTdHJpbmcs
IFJldGFpblB0cjxDRkRhdGFSZWY+PiYgY2xpZW50Q2VydHMoKQorc3RhdGljIEhhc2hNYXA8U3Ry
aW5nLCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiwgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgY2xp
ZW50Q2VydGlmaWNhdGVzKCkKIHsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZXRhaW5Q
dHI8Q0ZEYXRhUmVmPj4gQ2VydHNNYXA7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENlcnRz
TWFwPiBjZXJ0czsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxTdHJpbmcsIFJl
dGFpblB0cjxDRkRhdGFSZWY+LCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+PiBjZXJ0czsKICAg
ICByZXR1cm4gY2VydHM7CiB9CiAKQEAgLTE2OSw3ICsxNjgsNyBAQCB2b2lkIFJlc291cmNlSGFu
ZGxlOjpjcmVhdGVDRlVSTENvbm5lY3Rpb24oYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFn
ZSwgYm9vbAogI2lmIFBMQVRGT1JNKElPUykKICAgICBzc2xQcm9wcyA9IGFkb3B0Q0YoUmVzb3Vy
Y2VIYW5kbGU6OmNyZWF0ZVNTTFByb3BlcnRpZXNGcm9tTlNVUkxSZXF1ZXN0KGZpcnN0UmVxdWVz
dCgpKSk7CiAjZWxzZQotICAgIGlmIChhbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlSG9zdHMoKS5j
b250YWlucyhmaXJzdFJlcXVlc3QoKS51cmwoKS5ob3N0KCkubG93ZXIoKSkpIHsKKyAgICBpZiAo
YWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3RzKCkuY29udGFpbnMoZmlyc3RSZXF1ZXN0KCku
dXJsKCkuaG9zdCgpKSkgewogICAgICAgICBzc2xQcm9wcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5
Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURpY3Rpb25hcnlL
ZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CiAgICAgICAg
IENGRGljdGlvbmFyeUFkZFZhbHVlKHNzbFByb3BzLmdldCgpLCBrQ0ZTdHJlYW1TU0xBbGxvd3NB
bnlSb290LCBrQ0ZCb29sZWFuVHJ1ZSk7CiAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHNz
bFByb3BzLmdldCgpLCBrQ0ZTdHJlYW1TU0xBbGxvd3NFeHBpcmVkUm9vdHMsIGtDRkJvb2xlYW5U
cnVlKTsKQEAgLTE3Nyw4ICsxNzYsOCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpjcmVhdGVDRlVS
TENvbm5lY3Rpb24oYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwgYm9vbAogICAgICAg
ICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShzc2xQcm9wcy5nZXQoKSwga0NGU3RyZWFtU1NMVmFsaWRh
dGVzQ2VydGlmaWNhdGVDaGFpbiwga0NGQm9vbGVhbkZhbHNlKTsKICAgICB9CiAKLSAgICBIYXNo
TWFwPFN0cmluZywgUmV0YWluUHRyPENGRGF0YVJlZj4+OjppdGVyYXRvciBjbGllbnRDZXJ0ID0g
Y2xpZW50Q2VydHMoKS5maW5kKGZpcnN0UmVxdWVzdCgpLnVybCgpLmhvc3QoKS5sb3dlcigpKTsK
LSAgICBpZiAoY2xpZW50Q2VydCAhPSBjbGllbnRDZXJ0cygpLmVuZCgpKSB7CisgICAgYXV0byBj
bGllbnRDZXJ0ID0gY2xpZW50Q2VydGlmaWNhdGVzKCkuZmluZChmaXJzdFJlcXVlc3QoKS51cmwo
KS5ob3N0KCkpOworICAgIGlmIChjbGllbnRDZXJ0ICE9IGNsaWVudENlcnRpZmljYXRlcygpLmVu
ZCgpKSB7CiAgICAgICAgIGlmICghc3NsUHJvcHMpCiAgICAgICAgICAgICBzc2xQcm9wcyA9IGFk
b3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAm
a0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2Fs
bEJhY2tzKSk7CiAjaWYgUExBVEZPUk0oV0lOKQpAQCAtNjAzLDEyICs2MDIsMTIgQEAgdm9pZCBS
ZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtp
bmdDb250ZXh0KiBjb250ZXgKIAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0SG9zdEFsbG93c0Fu
eUhUVFBTQ2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJiBob3N0KQogewotICAgIGFsbG93c0FueUhU
VFBTQ2VydGlmaWNhdGVIb3N0cygpLmFkZChob3N0Lmxvd2VyKCkpOworICAgIGFsbG93c0FueUhU
VFBTQ2VydGlmaWNhdGVIb3N0cygpLmFkZChob3N0KTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRs
ZTo6c2V0Q2xpZW50Q2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJiBob3N0LCBDRkRhdGFSZWYgY2Vy
dCkKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldENsaWVudENlcnRpZmljYXRlKGNvbnN0IFN0cmlu
ZyYgaG9zdCwgQ0ZEYXRhUmVmIGNlcnRpZmljYXRlKQogewotICAgIGNsaWVudENlcnRzKCkuc2V0
KGhvc3QubG93ZXIoKSwgY2VydCk7CisgICAgY2xpZW50Q2VydGlmaWNhdGVzKCkuc2V0KGhvc3Qs
IGNlcnRpZmljYXRlKTsKIH0KIAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1TZXREZWZl
cnNMb2FkaW5nKGJvb2wgZGVmZXJzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCmluZGV4IGI5ZDZkZDRiYTc4MGVlMzU3
NWU5NDgxOTJmZDk4MmI0NDdlNWYyOTYuLmIyNzZjYTc1ZTRmYTgxYmQ4ZjBjYjhlYTMzMTllY2Vj
NGExYzhkZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9Db29raWVKYXJDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ29va2llSmFyQ3VybC5jcHAKQEAgLTE5NSwyMCArMTk1LDIwIEBAIHN0YXRpYyBTdHJp
bmcgZ2V0TmV0c2NhcGVDb29raWVGb3JtYXQoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYg
dmFsdWUpCiAgICAgICAgIGlmIChhdHRyaWJ1dGUtPmNvbnRhaW5zKCc9JykpIHsKICAgICAgICAg
ICAgIFZlY3RvcjxTdHJpbmc+IGtleVZhbHVlUGFpcjsKICAgICAgICAgICAgIGF0dHJpYnV0ZS0+
c3BsaXQoJz0nLCB0cnVlLCBrZXlWYWx1ZVBhaXIpOwotICAgICAgICAgICAgU3RyaW5nIGtleSA9
IGtleVZhbHVlUGFpclswXS5zdHJpcFdoaXRlU3BhY2UoKS5sb3dlcigpOworICAgICAgICAgICAg
U3RyaW5nIGtleSA9IGtleVZhbHVlUGFpclswXS5zdHJpcFdoaXRlU3BhY2UoKTsKICAgICAgICAg
ICAgIFN0cmluZyB2YWwgPSBrZXlWYWx1ZVBhaXJbMV0uc3RyaXBXaGl0ZVNwYWNlKCk7Ci0gICAg
ICAgICAgICBpZiAoa2V5ID09ICJleHBpcmVzIikgeworICAgICAgICAgICAgaWYgKGVxdWFsTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGtleSwgImV4cGlyZXMiKSkgewogICAgICAgICAgICAgICAg
IENTdHJpbmcgZGF0ZVN0cihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWwuY2hhcmFj
dGVyczgoKSksIHZhbC5sZW5ndGgoKSk7CiAgICAgICAgICAgICAgICAgZXhwaXJlcyA9IFdURjo6
cGFyc2VEYXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFjdGVycyhkYXRlU3RyLmRhdGEoKSkgLyBX
VEY6Om1zUGVyU2Vjb25kOwotICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gIm1heC1hZ2Ui
KQorICAgICAgICAgICAgfSBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShr
ZXksICJtYXgtYWdlIikpCiAgICAgICAgICAgICAgICAgZXhwaXJlcyA9IHRpbWUoMCkgKyB2YWwu
dG9JbnQoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZG9tYWluIikgCisgICAgICAg
ICAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShrZXksICJkb21haW4i
KSkKICAgICAgICAgICAgICAgICBkb21haW4gPSB2YWw7Ci0gICAgICAgICAgICBlbHNlIGlmIChr
ZXkgPT0gInBhdGgiKSAKKyAgICAgICAgICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKGtleSwgInBhdGgiKSkKICAgICAgICAgICAgICAgICBwYXRoID0gdmFsOwogICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgU3RyaW5nIGtleSA9IGF0dHJpYnV0ZS0+c3RyaXBX
aGl0ZVNwYWNlKCkubG93ZXIoKTsKLSAgICAgICAgICAgIGlmIChrZXkgPT0gInNlY3VyZSIpCisg
ICAgICAgICAgICBTdHJpbmcga2V5ID0gYXR0cmlidXRlLT5zdHJpcFdoaXRlU3BhY2UoKTsKKyAg
ICAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShrZXksICJzZWN1cmUi
KSkKICAgICAgICAgICAgICAgICBzZWN1cmUgPSAiVFJVRSI7CiAgICAgICAgIH0KICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvTXVsdGlwYXJ0
SGFuZGxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9NdWx0aXBh
cnRIYW5kbGUuY3BwCmluZGV4IDg5N2Y5NWMxOTBhNTQxNjViZDk1NDc5YzQ1NGUzOTQ2YmVlZjBj
YmEuLjkxMTFmYTBjZTQzMDg5N2QxYTFkNWY3NzdmZTE3NGRhM2JkNTI4NmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9NdWx0aXBhcnRIYW5kbGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9NdWx0aXBhcnRIYW5k
bGUuY3BwCkBAIC0zNDYsNyArMzQ2LDcgQEAgdm9pZCBNdWx0aXBhcnRIYW5kbGU6OmRpZFJlY2Vp
dmVSZXNwb25zZSgpCiAgICAgICAgIFN0cmluZyBjb250ZW50VHlwZSA9IG1faGVhZGVycy5nZXQo
SFRUUEhlYWRlck5hbWU6OkNvbnRlbnRUeXBlKTsKICAgICAgICAgU3RyaW5nIG1pbWVUeXBlID0g
ZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZShjb250ZW50VHlwZSk7CiAKLSAgICAgICAgcmVz
cG9uc2UtPnNldE1pbWVUeXBlKG1pbWVUeXBlLmxvd2VyKCkpOworICAgICAgICByZXNwb25zZS0+
c2V0TWltZVR5cGUobWltZVR5cGUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CiAgICAgICAg
IHJlc3BvbnNlLT5zZXRUZXh0RW5jb2RpbmdOYW1lKGV4dHJhY3RDaGFyc2V0RnJvbU1lZGlhVHlw
ZShjb250ZW50VHlwZSkpOwogCiAgICAgICAgIGQtPmNsaWVudCgpLT5kaWRSZWNlaXZlUmVzcG9u
c2UobV9yZXNvdXJjZUhhbmRsZSwgKnJlc3BvbnNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAKaW5k
ZXggNDY2NzAyYWEzMTY1NWE2ZThiYzgzMzcxNDUyMmViMmRiZTUyZGUzZi4uZjdhMDRlNjg1ZWE4
OTA3OGRhYTEzOTc1ZTMyNWViZjUzODlhMmJiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAKQEAg
LTEyMiw3ICsxMjIsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpjYW5jZWwoKQogCiB2b2lkIFJl
c291cmNlSGFuZGxlOjpzZXRIb3N0QWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZShjb25zdCBTdHJp
bmcmIGhvc3QpCiB7Ci0gICAgYWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3RzKGhvc3QubG93
ZXIoKSk7CisgICAgYWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3RzKGhvc3QpOwogfQogCiB2
b2lkIFJlc291cmNlSGFuZGxlOjpzZXRDbGllbnRDZXJ0aWZpY2F0ZUluZm8oY29uc3QgU3RyaW5n
JiBob3N0LCBjb25zdCBTdHJpbmcmIGNlcnRpZmljYXRlLCBjb25zdCBTdHJpbmcmIGtleSkKQEAg
LTEzNCwxOCArMTM0LDExIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldENsaWVudENlcnRpZmlj
YXRlSW5mbyhjb25zdCBTdHJpbmcmIGhvc3QsIGNvbnN0IFN0cmluZyYKIH0KIAogI2lmIFBMQVRG
T1JNKFdJTikgJiYgVVNFKENGKQotLy8gRklYTUU6ICBUaGUgQ0ZEYXRhUmVmIHdpbGwgbmVlZCB0
byBiZSBzb21ldGhpbmcgZWxzZSB3aGVuCi0vLyBidWlsZGluZyB3aXRob3V0IAotc3RhdGljIEhh
c2hNYXA8U3RyaW5nLCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiA+JiBjbGllbnRDZXJ0cygpCi17Ci0g
ICAgc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiA+IGNlcnRzOwot
ICAgIHJldHVybiBjZXJ0czsKLX0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0Q2xpZW50Q2Vy
dGlmaWNhdGUoY29uc3QgU3RyaW5nJiBob3N0LCBDRkRhdGFSZWYgY2VydCkKK3ZvaWQgUmVzb3Vy
Y2VIYW5kbGU6OnNldENsaWVudENlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYsIENGRGF0YVJlZikK
IHsKLSAgICBjbGllbnRDZXJ0cygpLnNldChob3N0Lmxvd2VyKCksIGNlcnQpOwogfQorCiAjZW5k
aWYKIAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1TZXREZWZlcnNMb2FkaW5nKGJvb2wg
ZGVmZXJzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAppbmRleCA0ZGYwZWE2OTZlYjJjNmU1
NmIyMDI2NzYyMmM2NDQ4NmQ4NWYzNzk2Li5hNjNhNTcyZjRjYTNmMTU5YzNkM2Y4NzYxMmI0ODM2
Y2EyOGZiYWI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcApAQCAtNDk3LDcgKzQ5Nyw3
IEBAIHN0YXRpYyBzaXplX3QgaGVhZGVyQ2FsbGJhY2soY2hhciogcHRyLCBzaXplX3Qgc2l6ZSwg
c2l6ZV90IG5tZW1iLCB2b2lkKiBkYXRhKQogICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldFVSTChV
UkwoUGFyc2VkVVJMU3RyaW5nLCBoZHIpKTsKIAogICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldEhU
VFBTdGF0dXNDb2RlKGh0dHBDb2RlKTsKLSAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRNaW1lVHlw
ZShleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKGQtPm1fcmVzcG9uc2UuaHR0cEhlYWRlckZp
ZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50VHlwZSkpLmxvd2VyKCkpOworICAgICAgICBkLT5t
X3Jlc3BvbnNlLnNldE1pbWVUeXBlKGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUoZC0+bV9y
ZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRUeXBlKSkuY29u
dmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CiAgICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0VGV4dEVu
Y29kaW5nTmFtZShleHRyYWN0Q2hhcnNldEZyb21NZWRpYVR5cGUoZC0+bV9yZXNwb25zZS5odHRw
SGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRUeXBlKSkpOwogCiAgICAgICAgIGlm
IChkLT5tX3Jlc3BvbnNlLmlzTXVsdGlwYXJ0KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9TU0xIYW5kbGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL1NTTEhhbmRsZS5jcHAKaW5kZXggYjQ2MmY4OTc3ZmQzNzhm
NmI1ODIxYjM5NWE3NmYwMTQ5MDZkYmNmNC4uZDViZDQ1ZDY3ZjE5ZGJjYWQyNTViOWQzNGVhODRm
ZTA0MDRkNDZlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL1NTTEhhbmRsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL1NTTEhhbmRsZS5jcHAKQEAgLTM5LDkgKzM5LDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi10eXBlZGVmIHN0ZDo6dHVwbGU8V1RGOjpTdHJpbmcsIFdURjo6U3RyaW5nPiBjbGllbnRD
ZXJ0aWZpY2F0ZTsKLXN0YXRpYyBIYXNoTWFwPFN0cmluZywgTGlzdEhhc2hTZXQ8U3RyaW5nPj4g
YWxsb3dlZEhvc3RzOwotc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBjbGllbnRDZXJ0aWZpY2F0ZT4g
YWxsb3dlZENsaWVudEhvc3RzOwordHlwZWRlZiBzdGQ6OnR1cGxlPFN0cmluZywgU3RyaW5nPiBj
bGllbnRDZXJ0aWZpY2F0ZTsKK3N0YXRpYyBIYXNoTWFwPFN0cmluZywgTGlzdEhhc2hTZXQ8U3Ry
aW5nPiwgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBhbGxvd2VkSG9zdHM7CitzdGF0aWMgSGFz
aE1hcDxTdHJpbmcsIGNsaWVudENlcnRpZmljYXRlLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+
IGFsbG93ZWRDbGllbnRIb3N0czsKIAogdm9pZCBhbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlSG9z
dHMoY29uc3QgU3RyaW5nJiBob3N0KQogewpAQCAtNTIsMTMgKzUyLDEzIEBAIHZvaWQgYWxsb3dz
QW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3RzKGNvbnN0IFN0cmluZyYgaG9zdCkKIHZvaWQgYWRkQWxs
b3dlZENsaWVudENlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYgaG9zdCwgY29uc3QgU3RyaW5nJiBj
ZXJ0aWZpY2F0ZSwgY29uc3QgU3RyaW5nJiBrZXkpCiB7CiAgICAgY2xpZW50Q2VydGlmaWNhdGUg
Y2xpZW50SW5mbyhjZXJ0aWZpY2F0ZSwga2V5KTsKLSAgICBhbGxvd2VkQ2xpZW50SG9zdHMuc2V0
KGhvc3QubG93ZXIoKSwgY2xpZW50SW5mbyk7CisgICAgYWxsb3dlZENsaWVudEhvc3RzLnNldCho
b3N0LCBjbGllbnRJbmZvKTsKIH0KIAogdm9pZCBzZXRTU0xDbGllbnRDZXJ0aWZpY2F0ZShSZXNv
dXJjZUhhbmRsZSogaGFuZGxlKQogewogICAgIFN0cmluZyBob3N0ID0gaGFuZGxlLT5maXJzdFJl
cXVlc3QoKS51cmwoKS5ob3N0KCk7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIGNsaWVudENlcnRpZmlj
YXRlPjo6aXRlcmF0b3IgaXQgPSBhbGxvd2VkQ2xpZW50SG9zdHMuZmluZChob3N0Lmxvd2VyKCkp
OworICAgIGF1dG8gaXQgPSBhbGxvd2VkQ2xpZW50SG9zdHMuZmluZChob3N0KTsKICAgICBpZiAo
aXQgPT0gYWxsb3dlZENsaWVudEhvc3RzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTcx
LDcgKzcxLDcgQEAgdm9pZCBzZXRTU0xDbGllbnRDZXJ0aWZpY2F0ZShSZXNvdXJjZUhhbmRsZSog
aGFuZGxlKQogCiBib29sIHNzbElnbm9yZUhUVFBTQ2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJiBo
b3N0LCBjb25zdCBMaXN0SGFzaFNldDxTdHJpbmc+JiBjZXJ0aWZpY2F0ZXMpCiB7Ci0gICAgSGFz
aE1hcDxTdHJpbmcsIExpc3RIYXNoU2V0PFN0cmluZz4+OjppdGVyYXRvciBpdCA9IGFsbG93ZWRI
b3N0cy5maW5kKGhvc3QpOworICAgIGF1dG8gaXQgPSBhbGxvd2VkSG9zdHMuZmluZChob3N0KTsK
ICAgICBpZiAoaXQgIT0gYWxsb3dlZEhvc3RzLmVuZCgpKSB7CiAgICAgICAgIGlmICgoaXQtPnZh
bHVlKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGl0LT52YWx1ZSA9IGNlcnRpZmljYXRlczsK
QEAgLTc5LDggKzc5LDggQEAgYm9vbCBzc2xJZ25vcmVIVFRQU0NlcnRpZmljYXRlKGNvbnN0IFN0
cmluZyYgaG9zdCwgY29uc3QgTGlzdEhhc2hTZXQ8U3RyaW5nPiYgY2UKICAgICAgICAgfQogICAg
ICAgICBpZiAoY2VydGlmaWNhdGVzLnNpemUoKSAhPSBpdC0+dmFsdWUuc2l6ZSgpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBMaXN0SGFzaFNldDxTdHJpbmc+Ojpjb25zdF9p
dGVyYXRvciBjZXJ0c0l0ZXIgPSBjZXJ0aWZpY2F0ZXMuYmVnaW4oKTsKLSAgICAgICAgTGlzdEhh
c2hTZXQ8U3RyaW5nPjo6aXRlcmF0b3IgdmFsdWVJdGVyID0gKGl0LT52YWx1ZSkuYmVnaW4oKTsK
KyAgICAgICAgYXV0byBjZXJ0c0l0ZXIgPSBjZXJ0aWZpY2F0ZXMuYmVnaW4oKTsKKyAgICAgICAg
YXV0byB2YWx1ZUl0ZXIgPSAoaXQtPnZhbHVlKS5iZWdpbigpOwogICAgICAgICBmb3IgKDsgdmFs
dWVJdGVyICE9IChpdC0+dmFsdWUpLmVuZCgpOyArK3ZhbHVlSXRlciwgKytjZXJ0c0l0ZXIpIHsK
ICAgICAgICAgICAgIGlmICgqY2VydHNJdGVyICE9ICp2YWx1ZUl0ZXIpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtMTk4LDEzICsxOTgsMTMgQEAgc3RhdGljIGludCBjZXJ0VmVy
aWZ5Q2FsbGJhY2soaW50IG9rLCBYNTA5X1NUT1JFX0NUWCogY3R4KQogICAgIGQtPm1fc3NsRXJy
b3JzID0gc3NsQ2VydGlmaWNhdGVGbGFnKGVycik7CiAKICNpZiBQTEFURk9STShXSU4pCi0gICAg
SGFzaE1hcDxTdHJpbmcsIExpc3RIYXNoU2V0PFN0cmluZz4+OjppdGVyYXRvciBpdCA9IGFsbG93
ZWRIb3N0cy5maW5kKGhvc3QpOworICAgIGF1dG8gaXQgPSBhbGxvd2VkSG9zdHMuZmluZChob3N0
KTsKICAgICBvayA9IChpdCAhPSBhbGxvd2VkSG9zdHMuZW5kKCkpOwogI2Vsc2UKICAgICBMaXN0
SGFzaFNldDxTdHJpbmc+IGNlcnRpZmljYXRlczsKICAgICBpZiAoIXBlbURhdGEoY3R4LCBjZXJ0
aWZpY2F0ZXMpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBvayA9IHNzbElnbm9yZUhUVFBTQ2Vy
dGlmaWNhdGUoaG9zdC5sb3dlcigpLCBjZXJ0aWZpY2F0ZXMpOworICAgIG9rID0gc3NsSWdub3Jl
SFRUUFNDZXJ0aWZpY2F0ZShob3N0LCBjZXJ0aWZpY2F0ZXMpOwogI2VuZGlmCiAKICAgICBpZiAo
b2spIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9S
ZXNvdXJjZUhhbmRsZVNvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKaW5kZXggYzUyYzczNmNiMmU1NjI1ZGI3M2M5OTZi
YjE4ZDYzZDdlZGIxZGU0OS4uYmM1OGNjNzJkNTUyYmNiODIyNTAwOWQzOTJiZjllZWMxMGI5ZThm
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291
cmNlSGFuZGxlU291cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKQEAgLTI0NCwxMyArMjQ0LDE0IEBAIHN0YXRpYyB2
b2lkIGNvbnRpbnVlQWZ0ZXJEaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqKTsKIAog
c3RhdGljIGJvb2wgZ0lnbm9yZVNTTEVycm9ycyA9IGZhbHNlOwogCi1zdGF0aWMgSGFzaFNldDxT
dHJpbmc+JiBhbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlSG9zdHMoKQordHlwZWRlZiBIYXNoU2V0
PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBIb3N0c1NldDsKK3N0YXRpYyBIb3N0
c1NldCYgYWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3RzKCkKIHsKLSAgICBERVBSRUNBVEVE
X0RFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxTdHJpbmc+LCBob3N0cywgKCkpOworICAgIERF
UFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChIb3N0c1NldCwgaG9zdHMsICgpKTsKICAgICBy
ZXR1cm4gaG9zdHM7CiB9CiAKLXR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIEhvc3RUTFNDZXJ0aWZp
Y2F0ZVNldD4gQ2VydGlmaWNhdGVzTWFwOwordHlwZWRlZiBIYXNoTWFwPFN0cmluZywgSG9zdFRM
U0NlcnRpZmljYXRlU2V0LCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+IENlcnRpZmljYXRlc01h
cDsKIHN0YXRpYyBDZXJ0aWZpY2F0ZXNNYXAmIGNsaWVudENlcnRpZmljYXRlcygpCiB7CiAgICAg
REVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKENlcnRpZmljYXRlc01hcCwgY2VydGlmaWNh
dGVzLCAoKSk7CkBAIC0zMjIsMTIgKzMyMywxMiBAQCBzdGF0aWMgYm9vbCBoYW5kbGVVbmlnbm9y
ZWRUTFNFcnJvcnMoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgU291cE1lc3NhZ2UqIG1lc3NhZwog
ICAgIGlmICghdGxzRXJyb3JzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTdHJpbmcg
bG93ZXJjYXNlSG9zdFVSTCA9IGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuaG9zdCgpLmxv
d2VyKCk7Ci0gICAgaWYgKGFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGVIb3N0cygpLmNvbnRhaW5z
KGxvd2VyY2FzZUhvc3RVUkwpKQorICAgIFN0cmluZyBob3N0ID0gaGFuZGxlLT5maXJzdFJlcXVl
c3QoKS51cmwoKS5ob3N0KCk7CisgICAgaWYgKGFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGVIb3N0
cygpLmNvbnRhaW5zKGhvc3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBXZSBh
cmVuJ3QgaWdub3JpbmcgZXJyb3JzIGdsb2JhbGx5LCBidXQgdGhlIHVzZXIgbWF5IGhhdmUgYWxy
ZWFkeSBkZWNpZGVkIHRvIGFjY2VwdCB0aGlzIGNlcnRpZmljYXRlLgotICAgIGF1dG8gaXQgPSBj
bGllbnRDZXJ0aWZpY2F0ZXMoKS5maW5kKGxvd2VyY2FzZUhvc3RVUkwpOworICAgIGF1dG8gaXQg
PSBjbGllbnRDZXJ0aWZpY2F0ZXMoKS5maW5kKGhvc3QpOwogICAgIGlmIChpdCAhPSBjbGllbnRD
ZXJ0aWZpY2F0ZXMoKS5lbmQoKSAmJiBpdC0+dmFsdWUuY29udGFpbnMoY2VydGlmaWNhdGUpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTEwODcsMTIgKzEwODgsMTIgQEAgYm9vbCBSZXNv
dXJjZUhhbmRsZTo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKQogCiB2b2lkIFJlc291cmNl
SGFuZGxlOjpzZXRIb3N0QWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmIGhv
c3QpCiB7Ci0gICAgYWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3RzKCkuYWRkKGhvc3QubG93
ZXIoKSk7CisgICAgYWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3RzKCkuYWRkKGhvc3QpOwog
fQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpzZXRDbGllbnRDZXJ0aWZpY2F0ZShjb25zdCBTdHJp
bmcmIGhvc3QsIEdUbHNDZXJ0aWZpY2F0ZSogY2VydGlmaWNhdGUpCiB7Ci0gICAgY2xpZW50Q2Vy
dGlmaWNhdGVzKCkuYWRkKGhvc3QubG93ZXIoKSwgSG9zdFRMU0NlcnRpZmljYXRlU2V0KCkpLml0
ZXJhdG9yLT52YWx1ZS5hZGQoY2VydGlmaWNhdGUpOworICAgIGNsaWVudENlcnRpZmljYXRlcygp
LmFkZChob3N0LCBIb3N0VExTQ2VydGlmaWNhdGVTZXQoKSkuaXRlcmF0b3ItPnZhbHVlLmFkZChj
ZXJ0aWZpY2F0ZSk7CiB9CiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldElnbm9yZVNTTEVycm9y
cyhib29sIGlnbm9yZVNTTEVycm9ycykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nRGVmYXVsdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwCmluZGV4IDVi
YzM2MGZjNTg2OWE2NGJlYTkzZTEyNGY2Mzg0NjdkYjljZjA0ZWMuLjU1M2RiY2UyNTQ3MTdjYjIw
MjFjMjlkYzE2NzI0MWUxNzNhYTNhODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nRGVmYXVsdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmdEZWZhdWx0LmNwcApAQCAt
MTU3LDIwICsxNTcsMjEgQEAgc3RhdGljIGNvbnN0IFNjcmlwdE5hbWVDb2RlIHNjcmlwdE5hbWVD
b2RlTGlzdFtdID0gewogfTsKIAogc3RydWN0IFNjcmlwdE5hbWVDb2RlTWFwSGFzaFRyYWl0cyA6
IHB1YmxpYyBIYXNoVHJhaXRzPFN0cmluZz4gewotICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11
bVRhYmxlU2l6ZSA9IFdURjo6SGFzaFRhYmxlQ2FwYWNpdHlGb3JTaXplPHNpemVvZihzY3JpcHRO
YW1lQ29kZUxpc3QpIC8gc2l6ZW9mKFNjcmlwdE5hbWVDb2RlKT46OnZhbHVlOworICAgIHN0YXRp
YyBjb25zdCBpbnQgbWluaW11bVRhYmxlU2l6ZSA9IFdURjo6SGFzaFRhYmxlQ2FwYWNpdHlGb3JT
aXplPFdURl9BUlJBWV9MRU5HVEgoc2NyaXB0TmFtZUNvZGVMaXN0KT46OnZhbHVlOwogfTsKIAot
dHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVVNjcmlwdENvZGUsIERlZmF1bHRIYXNoPFN0cmluZz46
Okhhc2gsIFNjcmlwdE5hbWVDb2RlTWFwSGFzaFRyYWl0cz4gU2NyaXB0TmFtZUNvZGVNYXA7Cit0
eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBVU2NyaXB0Q29kZSwgQVNDSUlDYXNlSW5zZW5zaXRpdmVI
YXNoLCBTY3JpcHROYW1lQ29kZU1hcEhhc2hUcmFpdHM+IFNjcmlwdE5hbWVDb2RlTWFwOwogCiBV
U2NyaXB0Q29kZSBzY3JpcHROYW1lVG9Db2RlKGNvbnN0IFN0cmluZyYgc2NyaXB0TmFtZSkKIHsK
LSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U2NyaXB0TmFtZUNvZGVNYXA+IHNjcmlwdE5hbWVD
b2RlTWFwOwotICAgIGlmIChzY3JpcHROYW1lQ29kZU1hcC5nZXQoKS5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2Yoc2NyaXB0TmFtZUNvZGVMaXN0KSAv
IHNpemVvZihTY3JpcHROYW1lQ29kZSk7ICsraSkKLSAgICAgICAgICAgIHNjcmlwdE5hbWVDb2Rl
TWFwLmdldCgpLnNldChBU0NJSUxpdGVyYWwoc2NyaXB0TmFtZUNvZGVMaXN0W2ldLm5hbWUpLCBz
Y3JpcHROYW1lQ29kZUxpc3RbaV0uY29kZSk7Ci0gICAgfQorICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxTY3JpcHROYW1lQ29kZU1hcD4gc2NyaXB0TmFtZUNvZGVNYXAgPSBbXSgpIHsKKyAgICAg
ICAgU2NyaXB0TmFtZUNvZGVNYXAgbWFwOworICAgICAgICBmb3IgKGF1dG8mIG5hbWVBbmRDb2Rl
IDogc2NyaXB0TmFtZUNvZGVMaXN0KQorICAgICAgICAgICAgbWFwLmFkZChBU0NJSUxpdGVyYWwo
bmFtZUFuZENvZGUubmFtZSksIG5hbWVBbmRDb2RlLmNvZGUpOworICAgICAgICByZXR1cm4gbWFw
OworICAgIH0oKTsKIAotICAgIFNjcmlwdE5hbWVDb2RlTWFwOjppdGVyYXRvciBpdCA9IHNjcmlw
dE5hbWVDb2RlTWFwLmdldCgpLmZpbmQoc2NyaXB0TmFtZS5sb3dlcigpKTsKKyAgICBhdXRvIGl0
ID0gc2NyaXB0TmFtZUNvZGVNYXAuZ2V0KCkuZmluZChzY3JpcHROYW1lKTsKICAgICBpZiAoaXQg
IT0gc2NyaXB0TmFtZUNvZGVNYXAuZ2V0KCkuZW5kKCkpCiAgICAgICAgIHJldHVybiBpdC0+dmFs
dWU7CiAgICAgcmV0dXJuIFVTQ1JJUFRfSU5WQUxJRF9DT0RFOwpAQCAtMzgzLDMxICszODQsMzMg
QEAgc3RhdGljIGNvbnN0IExvY2FsZVNjcmlwdCBsb2NhbGVTY3JpcHRMaXN0W10gPSB7CiB9Owog
CiBzdHJ1Y3QgTG9jYWxlU2NyaXB0TWFwSGFzaFRyYWl0cyA6IHB1YmxpYyBIYXNoVHJhaXRzPFN0
cmluZz4gewotICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11bVRhYmxlU2l6ZSA9IFdURjo6SGFz
aFRhYmxlQ2FwYWNpdHlGb3JTaXplPHNpemVvZihsb2NhbGVTY3JpcHRMaXN0KSAvIHNpemVvZihM
b2NhbGVTY3JpcHQpPjo6dmFsdWU7CisgICAgc3RhdGljIGNvbnN0IGludCBtaW5pbXVtVGFibGVT
aXplID0gV1RGOjpIYXNoVGFibGVDYXBhY2l0eUZvclNpemU8V1RGX0FSUkFZX0xFTkdUSChsb2Nh
bGVTY3JpcHRMaXN0KT46OnZhbHVlOwogfTsKIAotdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVVNj
cmlwdENvZGUsIERlZmF1bHRIYXNoPFN0cmluZz46Okhhc2gsIExvY2FsZVNjcmlwdE1hcEhhc2hU
cmFpdHM+IExvY2FsZVNjcmlwdE1hcDsKK3R5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFVTY3JpcHRD
b2RlLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2gsIExvY2FsZVNjcmlwdE1hcEhhc2hUcmFpdHM+
IExvY2FsZVNjcmlwdE1hcDsKIAogVVNjcmlwdENvZGUgbG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9u
dFNlbGVjdGlvbihjb25zdCBTdHJpbmcmIGxvY2FsZSkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8TG9jYWxlU2NyaXB0TWFwPiBsb2NhbGVTY3JpcHRNYXA7Ci0gICAgaWYgKGxvY2FsZVNj
cmlwdE1hcC5nZXQoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplb2YobG9jYWxlU2NyaXB0TGlzdCkgLyBzaXplb2YoTG9jYWxlU2NyaXB0KTsgKytpKQot
ICAgICAgICAgICAgbG9jYWxlU2NyaXB0TWFwLmdldCgpLnNldChBU0NJSUxpdGVyYWwobG9jYWxl
U2NyaXB0TGlzdFtpXS5sb2NhbGUpLCBsb2NhbGVTY3JpcHRMaXN0W2ldLnNjcmlwdCk7Ci0gICAg
fQorICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxMb2NhbGVTY3JpcHRNYXA+IGxvY2FsZVNjcmlw
dE1hcCA9IFtdKCkgeworICAgICAgICBMb2NhbGVTY3JpcHRNYXAgbWFwOworICAgICAgICBmb3Ig
KGF1dG8mIGxvY2FsZUFuZFNjcmlwdCA6IGxvY2FsZVNjcmlwdExpc3QpCisgICAgICAgICAgICBt
YXAuYWRkKEFTQ0lJTGl0ZXJhbChsb2NhbGVBbmRTY3JpcHQubG9jYWxlKSwgbG9jYWxlQW5kU2Ny
aXB0LnNjcmlwdCk7CisgICAgICAgIHJldHVybiBtYXA7CisgICAgfSgpOwogCi0gICAgU3RyaW5n
IGNhbm9uaWNhbExvY2FsZSA9IGxvY2FsZS5sb3dlcigpLnJlcGxhY2UoJy0nLCAnXycpOworICAg
IFN0cmluZyBjYW5vbmljYWxMb2NhbGUgPSBsb2NhbGU7CisgICAgY2Fub25pY2FsTG9jYWxlLnJl
cGxhY2UoJy0nLCAnXycpOwogICAgIHdoaWxlICghY2Fub25pY2FsTG9jYWxlLmlzRW1wdHkoKSkg
ewotICAgICAgICBMb2NhbGVTY3JpcHRNYXA6Oml0ZXJhdG9yIGl0ID0gbG9jYWxlU2NyaXB0TWFw
LmdldCgpLmZpbmQoY2Fub25pY2FsTG9jYWxlKTsKKyAgICAgICAgYXV0byBpdCA9IGxvY2FsZVNj
cmlwdE1hcC5nZXQoKS5maW5kKGNhbm9uaWNhbExvY2FsZSk7CiAgICAgICAgIGlmIChpdCAhPSBs
b2NhbGVTY3JpcHRNYXAuZ2V0KCkuZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gaXQtPnZhbHVl
OwotICAgICAgICBzaXplX3QgcG9zID0gY2Fub25pY2FsTG9jYWxlLnJldmVyc2VGaW5kKCdfJyk7
Ci0gICAgICAgIGlmIChwb3MgPT0gbm90Rm91bmQpCisgICAgICAgIGF1dG8gdW5kZXJzY29yZVBv
c2l0aW9uID0gY2Fub25pY2FsTG9jYWxlLnJldmVyc2VGaW5kKCdfJyk7CisgICAgICAgIGlmICh1
bmRlcnNjb3JlUG9zaXRpb24gPT0gbm90Rm91bmQpCiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgVVNjcmlwdENvZGUgY29kZSA9IHNjcmlwdE5hbWVUb0NvZGUoY2Fub25pY2FsTG9jYWxlLnN1
YnN0cmluZyhwb3MgKyAxKSk7CisgICAgICAgIFVTY3JpcHRDb2RlIGNvZGUgPSBzY3JpcHROYW1l
VG9Db2RlKGNhbm9uaWNhbExvY2FsZS5zdWJzdHJpbmcodW5kZXJzY29yZVBvc2l0aW9uICsgMSkp
OwogICAgICAgICBpZiAoY29kZSAhPSBVU0NSSVBUX0lOVkFMSURfQ09ERSAmJiBjb2RlICE9IFVT
Q1JJUFRfVU5LTk9XTikKICAgICAgICAgICAgIHJldHVybiBjb2RlOwotICAgICAgICBjYW5vbmlj
YWxMb2NhbGUgPSBjYW5vbmljYWxMb2NhbGUuc3Vic3RyaW5nKDAsIHBvcyk7CisgICAgICAgIGNh
bm9uaWNhbExvY2FsZSA9IGNhbm9uaWNhbExvY2FsZS5zdWJzdHJpbmcoMCwgdW5kZXJzY29yZVBv
c2l0aW9uKTsKICAgICB9CiAgICAgcmV0dXJuIFVTQ1JJUFRfQ09NTU9OOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC93aW4vTG9jYWxlV2luLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvd2luL0xvY2FsZVdpbi5jcHAKaW5kZXggY2NkNzRiYzQ3
YTUwOTdmYTAxM2QwOWE0YjVlYjcyNGM1MzlmNzY5MS4uZTY3ZTI2OTdlOWRiZGVlNjc5MDE5NjA1
MWIwNjg1ZTQxNTlmNzAzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC93aW4vTG9jYWxlV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dp
bi9Mb2NhbGVXaW4uY3BwCkBAIC00OCw3ICs0OCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIHR5cGVkZWYgTENJRCAoV0lOQVBJKiBMb2NhbGVOYW1lVG9M
Q0lEUHRyKShMUENXU1RSLCBEV09SRCk7Ci10eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBMQ0lEPiBO
YW1lVG9MQ0lETWFwOwordHlwZWRlZiBIYXNoTWFwPFN0cmluZywgTENJRCwgQVNDSUlDYXNlSW5z
ZW5zaXRpdmVIYXNoPiBOYW1lVG9MQ0lETWFwOwogCiBzdGF0aWMgU3RyaW5nIGV4dHJhY3RMYW5n
dWFnZUNvZGUoY29uc3QgU3RyaW5nJiBsb2NhbGUpCiB7CkBAIC0xMDcsNyArMTA3LDcgQEAgc3Rh
dGljIExDSUQgV0lOQVBJIGNvbnZlcnRMb2NhbGVOYW1lVG9MQ0lEKExQQ1dTVFIgbmFtZSwgRFdP
UkQpCiAgICAgICAgIHJldHVybiBMT0NBTEVfVVNFUl9ERUZBVUxUOwogICAgIERFUFJFQ0FURURf
REVGSU5FX1NUQVRJQ19MT0NBTChOYW1lVG9MQ0lETWFwLCBtYXAsICgpKTsKICAgICBlbnN1cmVO
YW1lVG9MQ0lETWFwKG1hcCk7Ci0gICAgU3RyaW5nIGxvY2FsZU5hbWUgPSBTdHJpbmcobmFtZSku
cmVwbGFjZSgnXycsICctJykubG93ZXIoKTsKKyAgICBTdHJpbmcgbG9jYWxlTmFtZSA9IFN0cmlu
ZyhuYW1lKS5yZXBsYWNlKCdfJywgJy0nKTsKICAgICBkbyB7CiAgICAgICAgIE5hbWVUb0xDSURN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yID0gbWFwLmZpbmQobG9jYWxlTmFtZSk7CiAgICAg
ICAgIGlmIChpdGVyYXRvciAhPSBtYXAuZW5kKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vUGFzdGVib2FyZFdpbi5jcHAKaW5kZXggM2M2OTljZGZkZGM5M2VmNmIzNjEwMGZmYzM4
OWJiODZjZTE5NzNlOC4uMDMxYmZkMjQ5NDJiNjQ3MjA2ODdkMjgzNWJlNjNmOGEwZThkZDg0NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcApAQCAt
MTgyLDE0ICsxODIsMTQgQEAgZW51bSBDbGlwYm9hcmREYXRhVHlwZSB7IENsaXBib2FyZERhdGFU
eXBlTm9uZSwgQ2xpcGJvYXJkRGF0YVR5cGVVUkwsIENsaXBib2FyZEQKIAogc3RhdGljIENsaXBi
b2FyZERhdGFUeXBlIGNsaXBib2FyZFR5cGVGcm9tTUlNRVR5cGUoY29uc3QgU3RyaW5nJiB0eXBl
KQogewotICAgIFN0cmluZyBxVHlwZSA9IHR5cGUuc3RyaXBXaGl0ZVNwYWNlKCkubG93ZXIoKTsK
KyAgICBTdHJpbmcgc3RyaXBwZWRUeXBlID0gdHlwZS5zdHJpcFdoaXRlU3BhY2UoKTsKIAogICAg
IC8vIHR3byBzcGVjaWFsIGNhc2VzIGZvciBJRSBjb21wYXRpYmlsaXR5Ci0gICAgaWYgKHFUeXBl
ID09ICJ0ZXh0IiB8fCBxVHlwZSA9PSAidGV4dC9wbGFpbiIgfHwgcVR5cGUuc3RhcnRzV2l0aCgi
dGV4dC9wbGFpbjsiKSkKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3Ry
aXBwZWRUeXBlLCAidGV4dCIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmlw
cGVkVHlwZSwgInRleHQvcGxhaW4iKSB8fCBzdHJpcHBlZFR5cGUuc3RhcnRzV2l0aCgidGV4dC9w
bGFpbjsiLCBmYWxzZSkpCiAgICAgICAgIHJldHVybiBDbGlwYm9hcmREYXRhVHlwZVRleHQ7Ci0g
ICAgaWYgKHFUeXBlID09ICJ1cmwiIHx8IHFUeXBlID09ICJ0ZXh0L3VyaS1saXN0IikKKyAgICBp
ZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3RyaXBwZWRUeXBlLCAidXJsIikgfHwg
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3RyaXBwZWRUeXBlLCAidGV4dC91cmktbGlz
dCIpKQogICAgICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVVUkw7Ci0gICAgaWYgKHFUeXBl
ID09ICJ0ZXh0L2h0bWwiKQorICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShz
dHJpcHBlZFR5cGUsICJ0ZXh0L2h0bWwiKSkKICAgICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFU
eXBlVGV4dEhUTUw7CiAKICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVOb25lOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCmluZGV4IDU3MzFjMGI3NDcwNjQ1NDFjOThi
ODk3NTBhOTViYmM2OGU5ZmM5MTguLjhjNGU4MjlhZDhkOGJkOWNmOGUyYjU3ZjJmYWIwMGIxZjA5
NzUxYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKQEAgLTEwMzUs
MTAgKzEwMzUsMTAgQEAgdm9pZCBhcHBseVRleHRUcmFuc2Zvcm0oY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlLCBTdHJpbmcmIHRleHQsIFVDaGFyIHByZXZpb3VzQ2gKICAgICAgICAgbWFrZUNhcGl0
YWxpemVkKCZ0ZXh0LCBwcmV2aW91c0NoYXJhY3Rlcik7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgVVBQRVJDQVNFOgotICAgICAgICB0ZXh0ID0gdGV4dC51cHBlcihzdHlsZS5sb2NhbGUoKSk7
CisgICAgICAgIHRleHQgPSB0ZXh0LmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhMb2NhbGUoc3R5bGUu
bG9jYWxlKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIExPV0VSQ0FTRToKLSAgICAgICAg
dGV4dCA9IHRleHQubG93ZXIoc3R5bGUubG9jYWxlKCkpOworICAgICAgICB0ZXh0ID0gdGV4dC5j
b252ZXJ0VG9Mb3dlcmNhc2VXaXRoTG9jYWxlKHN0eWxlLmxvY2FsZSgpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1
ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKaW5kZXggZjAz
NDAwNzExZTRiMjlkY2JkMjk1OTVhMjU1Zjk2ZWFkMTYwZGU2YS4uOWQ4MTdlMWJiODkzZDllOWEw
NGJjNDNmOWI5YjdlOTMzNjFkOWFlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hN
TEh0dHBSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3Qu
Y3BwCkBAIC0xMDMwLDkgKzEwMzAsNyBAQCBTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNl
TUlNRVR5cGUoKSBjb25zdAogCiBib29sIFhNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZUlzWE1MKCkg
Y29uc3QKIHsKLSAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBsb3dlcigpIGNhbGwgd2hlbiBET01J
bXBsZW1lbnRhdGlvbi5pc1hNTE1JTUVUeXBlKCkgaXMgbW9kaWZpZWQKLSAgICAvLyAgICAgICAg
dG8gZG8gY2FzZSBpbnNlbnNpdGl2ZSBNSU1FIHR5cGUgbWF0Y2hpbmcuCi0gICAgcmV0dXJuIERP
TUltcGxlbWVudGF0aW9uOjppc1hNTE1JTUVUeXBlKHJlc3BvbnNlTUlNRVR5cGUoKS5sb3dlcigp
KTsKKyAgICByZXR1cm4gRE9NSW1wbGVtZW50YXRpb246OmlzWE1MTUlNRVR5cGUocmVzcG9uc2VN
SU1FVHlwZSgpKTsKIH0KIAogaW50IFhNTEh0dHBSZXF1ZXN0OjpzdGF0dXMoKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJCYXNlUGx1Z2luUGFja2FnZS5t
bSBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViQmFzZVBsdWdpblBhY2thZ2UubW0KaW5k
ZXggNWJjZWUyNzIzZDY1NGEzOGQwNzMwNTBlYmE2N2U4NmY3MjJjODM1Mi4uZGU3OTZkOWVjY2I3
NDRiMzI3ZDM1OWRlYTYzNTIyNDhkMjM4ODIwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9t
YWMvUGx1Z2lucy9XZWJCYXNlUGx1Z2luUGFja2FnZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21h
Yy9QbHVnaW5zL1dlYkJhc2VQbHVnaW5QYWNrYWdlLm1tCkBAIC0yMTYsMTggKzIxNiwxNSBAQCAt
IChCT09MKWdldFBsdWdpbkluZm9Gcm9tUExpc3RzCiAgICAgICAgIE1pbWVDbGFzc0luZm8gbWlt
ZUNsYXNzSW5mbzsKICAgICAgICAgCiAgICAgICAgIE5TQXJyYXkgKmV4dGVuc2lvbnMgPSBbW01J
TUVEaWN0aW9uYXJ5IG9iamVjdEZvcktleTpXZWJQbHVnaW5FeHRlbnNpb25zS2V5XSBfd2ViX2xv
d2VyY2FzZVN0cmluZ3NdOwotICAgICAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBbZXh0
ZW5zaW9ucyBjb3VudF07ICsraSkgeworICAgICAgICBmb3IgKE5TU3RyaW5nICpleHRlbnNpb24g
aW4gZXh0ZW5zaW9ucykgewogICAgICAgICAgICAgLy8gVGhlIERpdlggcGx1Zy1pbiBsaXN0cyBt
dWx0aXBsZSBleHRlbnNpb25zIGluIGEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBpbnN0ZWFkIG9m
IHVzaW5nCiAgICAgICAgICAgICAvLyBtdWx0aXBsZSBhcnJheSBlbGVtZW50cyBpbiB0aGUgcHJv
cGVydHkgbGlzdC4gV29yayBhcm91bmQgdGhpcyBoZXJlIGJ5IHNwbGl0dGluZyB0aGUKICAgICAg
ICAgICAgIC8vIGV4dGVuc2lvbiBzdHJpbmcgaW50byBjb21wb25lbnRzLgotICAgICAgICAgICAg
TlNBcnJheSAqZXh0ZW5zaW9uQ29tcG9uZW50cyA9IFtbZXh0ZW5zaW9ucyBvYmplY3RBdEluZGV4
OmldIGNvbXBvbmVudHNTZXBhcmF0ZWRCeVN0cmluZzpAIiwiXTsKLQotICAgICAgICAgICAgZm9y
IChOU1N0cmluZyAqZXh0ZW5zaW9uIGluIGV4dGVuc2lvbkNvbXBvbmVudHMpCi0gICAgICAgICAg
ICAgICAgbWltZUNsYXNzSW5mby5leHRlbnNpb25zLmFwcGVuZChleHRlbnNpb24pOworICAgICAg
ICAgICAgZm9yIChOU1N0cmluZyAqY29tcG9uZW50IGluIFtleHRlbnNpb24gY29tcG9uZW50c1Nl
cGFyYXRlZEJ5U3RyaW5nOkAiLCJdKQorICAgICAgICAgICAgICAgIG1pbWVDbGFzc0luZm8uZXh0
ZW5zaW9ucy5hcHBlbmQoY29tcG9uZW50KTsKICAgICAgICAgfQogCi0gICAgICAgIG1pbWVDbGFz
c0luZm8udHlwZSA9IFN0cmluZyhNSU1FKS5sb3dlcigpOwotCisgICAgICAgIG1pbWVDbGFzc0lu
Zm8udHlwZSA9IFN0cmluZyhNSU1FKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOwogICAgICAg
ICBtaW1lQ2xhc3NJbmZvLmRlc2MgPSBbTUlNRURpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OldlYlBs
dWdpblR5cGVEZXNjcmlwdGlvbktleV07CiAKICAgICAgICAgcGx1Z2luSW5mby5taW1lcy5hcHBl
bmQobWltZUNsYXNzSW5mbyk7CkBAIC0yODQsMTIgKzI4MSwxMCBAQCAtIChjb25zdCBQbHVnaW5J
bmZvJilwbHVnaW5JbmZvCiAKIC0gKEJPT0wpc3VwcG9ydHNFeHRlbnNpb246KGNvbnN0IFN0cmlu
ZyYpZXh0ZW5zaW9uCiB7Ci0gICAgQVNTRVJUKGV4dGVuc2lvbi5sb3dlcigpID09IGV4dGVuc2lv
bik7CisgICAgQVNTRVJUKGV4dGVuc2lvbi5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpID09IGV4
dGVuc2lvbik7CiAgICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwbHVnaW5JbmZvLm1p
bWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBleHRlbnNp
b25zID0gcGx1Z2luSW5mby5taW1lc1tpXS5leHRlbnNpb25zOwotCi0gICAgICAgIGlmIChzdGQ6
OmZpbmQoZXh0ZW5zaW9ucy5iZWdpbigpLCBleHRlbnNpb25zLmVuZCgpLCBleHRlbnNpb24pICE9
IGV4dGVuc2lvbnMuZW5kKCkpCisgICAgZm9yIChhdXRvJiBlbnRyeSA6IHBsdWdpbkluZm8ubWlt
ZXMpIHsKKyAgICAgICAgaWYgKGVudHJ5LmV4dGVuc2lvbnMuY29udGFpbnMoZXh0ZW5zaW9uKSkK
ICAgICAgICAgICAgIHJldHVybiBZRVM7CiAgICAgfQogCkBAIC0yOTgsMjYgKzI5MywyMyBAQCAt
IChCT09MKXN1cHBvcnRzRXh0ZW5zaW9uOihjb25zdCBTdHJpbmcmKWV4dGVuc2lvbgogCiAtIChC
T09MKXN1cHBvcnRzTUlNRVR5cGU6KGNvbnN0IFdURjo6U3RyaW5nJiltaW1lVHlwZQogewotICAg
IEFTU0VSVChtaW1lVHlwZS5sb3dlcigpID09IG1pbWVUeXBlKTsKKyAgICBBU1NFUlQobWltZVR5
cGUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSA9PSBtaW1lVHlwZSk7CiAgICAgCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBwbHVnaW5JbmZvLm1pbWVzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIGlmIChwbHVnaW5JbmZvLm1pbWVzW2ldLnR5cGUgPT0gbWltZVR5cGUpCisgICAgZm9yIChh
dXRvJiBlbnRyeSA6IHBsdWdpbkluZm8ubWltZXMpIHsKKyAgICAgICAgaWYgKGVudHJ5LnR5cGUg
PT0gbWltZVR5cGUpCiAgICAgICAgICAgICByZXR1cm4gWUVTOwogICAgIH0KLSAgICAKKwogICAg
IHJldHVybiBOTzsKIH0KIAogLSAoTlNTdHJpbmcgKilNSU1FVHlwZUZvckV4dGVuc2lvbjooY29u
c3QgU3RyaW5nJilleHRlbnNpb24KIHsKLSAgICBBU1NFUlQoZXh0ZW5zaW9uLmxvd2VyKCkgPT0g
ZXh0ZW5zaW9uKTsKKyAgICBBU1NFUlQoZXh0ZW5zaW9uLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNl
KCkgPT0gZXh0ZW5zaW9uKTsKICAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBsdWdp
bkluZm8ubWltZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgTWltZUNsYXNzSW5mbyYg
bWltZUNsYXNzSW5mbyA9IHBsdWdpbkluZm8ubWltZXNbaV07Ci0gICAgICAgIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBleHRlbnNpb25zID0gbWltZUNsYXNzSW5mby5leHRlbnNpb25zOwotCi0gICAg
ICAgIGlmIChzdGQ6OmZpbmQoZXh0ZW5zaW9ucy5iZWdpbigpLCBleHRlbnNpb25zLmVuZCgpLCBl
eHRlbnNpb24pICE9IGV4dGVuc2lvbnMuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gbWltZUNs
YXNzSW5mby50eXBlOworICAgIGZvciAoYXV0byYgZW50cnkgOiBwbHVnaW5JbmZvLm1pbWVzKSB7
CisgICAgICAgIGlmIChlbnRyeS5leHRlbnNpb25zLmNvbnRhaW5zKGV4dGVuc2lvbikpCisgICAg
ICAgICAgICByZXR1cm4gZW50cnkudHlwZTsKICAgICB9CiAKICAgICByZXR1cm4gbmlsOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAgYi9T
b3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAppbmRleCAxYTBjN2U4
M2I4MjExY2JjZGY1NGY5ZDA2ZTM2MTM0MjhjMjhkZjcxLi4xNjliMTk3MTYxNmJkNmE0NGM5MjEx
NTk3OWQyZjkyZmZiM2I5NTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5z
L1BsdWdpbkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdp
bkRhdGFiYXNlLmNwcApAQCAtMTA0LDggKzEwNCw4IEBAIGJvb2wgUGx1Z2luRGF0YWJhc2U6OnJl
ZnJlc2goKQogICAgICAgICBnZXREZWxldGVkUGx1Z2lucyhwbHVnaW5zVG9VbmxvYWQpOwogCiAg
ICAgICAgIC8vIFVubG9hZCBwbHVnaW5zCi0gICAgICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gcGx1Z2luc1RvVW5sb2FkLmVuZCgpOwotICAgICAgICBmb3IgKFBsdWdpblNldDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBwbHVnaW5zVG9VbmxvYWQuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQorICAgICAgICBhdXRvIGVuZCA9IHBsdWdpbnNUb1VubG9hZC5lbmQoKTsKKyAgICAgICAg
Zm9yIChhdXRvIGl0ID0gcGx1Z2luc1RvVW5sb2FkLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
ICAgICAgICAgICAgIHJlbW92ZShpdC0+Z2V0KCkpOwogCiAgICAgICAgIHBsdWdpblNldENoYW5n
ZWQgPSAhcGx1Z2luc1RvVW5sb2FkLmlzRW1wdHkoKTsKQEAgLTEyMSw4ICsxMjEsOCBAQCBib29s
IFBsdWdpbkRhdGFiYXNlOjpyZWZyZXNoKCkKICAgICAvLyBvZiBSZWFsUGxheWVyIGluc3RhbGxl
ZCBhbmQganVzdCByZW1vdmVkIHRoZSBuZXdlciBvbmUsIHdlJ2xsIHBpY2sgdXAgdGhlIG9sZGVy
IG9uZS4KICAgICBib29sIHNob3VsZFNraXBVbmNoYW5nZWRGaWxlcyA9ICFwbHVnaW5TZXRDaGFu
Z2VkOwogCi0gICAgSGFzaFNldDxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwYXRoc0VuZCA9IHBh
dGhzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IHBhdGhzLmJlZ2luKCk7IGl0ICE9IHBhdGhzRW5kOyArK2l0KSB7CisgICAgYXV0byBwYXRoc0Vu
ZCA9IHBhdGhzLmVuZCgpOworICAgIGZvciAoYXV0byBpdCA9IHBhdGhzLmJlZ2luKCk7IGl0ICE9
IHBhdGhzRW5kOyArK2l0KSB7CiAgICAgICAgIHRpbWVfdCBsYXN0TW9kaWZpZWQ7CiAgICAgICAg
IGlmICghZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUoKml0LCBsYXN0TW9kaWZpZWQpKQogICAgICAg
ICAgICAgY29udGludWU7CkBAIC0xNTYsMTEgKzE1NiwxMSBAQCBib29sIFBsdWdpbkRhdGFiYXNl
OjpyZWZyZXNoKCkKICAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY2xlYXIoKTsKIAogICAgIC8v
IFJlZ2lzdGVyIHBsdWctaW4gTUlNRSB0eXBlcwotICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOwotICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBhdXRv
IGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAgICBmb3IgKGF1dG8gaXQgPSBtX3BsdWdpbnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIC8vIEdldCBNSU1FIHR5cGVzCi0gICAg
ICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2l0ID0gKCppdCkt
Pm1pbWVUb0Rlc2NyaXB0aW9ucygpLmJlZ2luKCk7Ci0gICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2VuZCA9ICgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMo
KS5lbmQoKTsKKyAgICAgICAgYXV0byBtYXBfaXQgPSAoKml0KS0+bWltZVRvRGVzY3JpcHRpb25z
KCkuYmVnaW4oKTsKKyAgICAgICAgYXV0byBtYXBfZW5kID0gKCppdCktPm1pbWVUb0Rlc2NyaXB0
aW9ucygpLmVuZCgpOwogICAgICAgICBmb3IgKDsgbWFwX2l0ICE9IG1hcF9lbmQ7ICsrbWFwX2l0
KQogICAgICAgICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmFkZChtYXBfaXQtPmtleSk7CiAg
ICAgfQpAQCAtMTcyLDggKzE3Miw4IEBAIFZlY3RvcjxQbHVnaW5QYWNrYWdlKj4gUGx1Z2luRGF0
YWJhc2U6OnBsdWdpbnMoKSBjb25zdAogewogICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlKj4gcmVz
dWx0OwogCi0gICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5k
KCk7Ci0gICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICBhdXRvIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsK
KyAgICBmb3IgKGF1dG8gaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQog
ICAgICAgICByZXN1bHQuYXBwZW5kKCgqaXQpLmdldCgpKTsKIAogICAgIHJldHVybiByZXN1bHQ7
CkBAIC0xOTAsMjYgKzE5MCwyNSBAQCBpbnQgUGx1Z2luRGF0YWJhc2U6OnByZWZlcnJlZFBsdWdp
bkNvbXBhcmUoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikKIFBsdWdpblBhY2thZ2UqIFBs
dWdpbkRhdGFiYXNlOjpwbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQog
ewogICAgIGlmIChtaW1lVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFN0cmluZyBrZXkgPSBtaW1lVHlwZS5sb3dlcigpOwot
ICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOwotICAg
IFBsdWdpblBhY2thZ2UqIHByZWZlcnJlZFBsdWdpbiA9IG1fcHJlZmVycmVkUGx1Z2lucy5nZXQo
a2V5KTsKKyAgICBQbHVnaW5QYWNrYWdlKiBwcmVmZXJyZWRQbHVnaW4gPSBtX3ByZWZlcnJlZFBs
dWdpbnMuZ2V0KG1pbWVUeXBlKTsKICAgICBpZiAocHJlZmVycmVkUGx1Z2luCiAgICAgICAgICYm
IHByZWZlcnJlZFBsdWdpbi0+aXNFbmFibGVkKCkKLSAgICAgICAgJiYgcHJlZmVycmVkUGx1Z2lu
LT5taW1lVG9EZXNjcmlwdGlvbnMoKS5jb250YWlucyhrZXkpKSB7CisgICAgICAgICYmIHByZWZl
cnJlZFBsdWdpbi0+bWltZVRvRGVzY3JpcHRpb25zKCkuY29udGFpbnMobWltZVR5cGUpKSB7CiAg
ICAgICAgIHJldHVybiBwcmVmZXJyZWRQbHVnaW47CiAgICAgfQogCiAgICAgVmVjdG9yPFBsdWdp
blBhY2thZ2UqLCAyPiBwbHVnaW5DaG9pY2VzOwogCi0gICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAg
IGF1dG8gZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoYXV0byBpdCA9IG1fcGx1Z2lu
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgUGx1Z2luUGFja2FnZSogcGx1
Z2luID0gKCppdCkuZ2V0KCk7CiAKICAgICAgICAgaWYgKCFwbHVnaW4tPmlzRW5hYmxlZCgpKQog
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKHBsdWdpbi0+bWltZVRvRGVzY3Jp
cHRpb25zKCkuY29udGFpbnMoa2V5KSkgeworICAgICAgICBpZiAocGx1Z2luLT5taW1lVG9EZXNj
cmlwdGlvbnMoKS5jb250YWlucyhtaW1lVHlwZSkpIHsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX01FVEFEQVRBX0NBQ0hFKQogICAgICAgICAgICAgaWYgKCFwbHVnaW4tPmVuc3VyZVBsdWdp
bkxvYWRlZCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjMxLDE4ICsyMzAsMTgg
QEAgU3RyaW5nIFBsdWdpbkRhdGFiYXNlOjpNSU1FVHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJp
bmcmIGV4dGVuc2lvbikgY29uc3QKICAgICBpZiAoZXh0ZW5zaW9uLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX3BsdWdpbnMuZW5kKCk7CisgICAgYXV0byBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CiAgICAg
U3RyaW5nIG1pbWVUeXBlOwogICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlKiwgMj4gcGx1Z2luQ2hv
aWNlczsKICAgICBIYXNoTWFwPFBsdWdpblBhY2thZ2UqLCBTdHJpbmc+IG1pbWVUeXBlRm9yUGx1
Z2luOwogCi0gICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5z
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgIGZvciAoYXV0byBpdCA9IG1fcGx1Z2lu
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgaWYgKCEoKml0KS0+aXNFbmFi
bGVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBNSU1FVG9FeHRlbnNpb25z
TWFwOjpjb25zdF9pdGVyYXRvciBtaW1lX2VuZCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCku
ZW5kKCk7CisgICAgICAgIGF1dG8gbWltZV9lbmQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygp
LmVuZCgpOwogCi0gICAgICAgIGZvciAoTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgbWltZV9pdCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuYmVnaW4oKTsgbWltZV9pdCAh
PSBtaW1lX2VuZDsgKyttaW1lX2l0KSB7CisgICAgICAgIGZvciAoYXV0byBtaW1lX2l0ID0gKCpp
dCktPm1pbWVUb0V4dGVuc2lvbnMoKS5iZWdpbigpOyBtaW1lX2l0ICE9IG1pbWVfZW5kOyArK21p
bWVfaXQpIHsKICAgICAgICAgICAgIG1pbWVUeXBlID0gbWltZV9pdC0+a2V5OwogICAgICAgICAg
ICAgUGx1Z2luUGFja2FnZSogcHJlZmVycmVkUGx1Z2luID0gbV9wcmVmZXJyZWRQbHVnaW5zLmdl
dChtaW1lVHlwZSk7CiAgICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXh0ZW5zaW9u
cyA9IG1pbWVfaXQtPnZhbHVlOwpAQCAtMzA1LDcgKzMwNCw3IEBAIFBsdWdpblBhY2thZ2UqIFBs
dWdpbkRhdGFiYXNlOjpmaW5kUGx1Z2luKGNvbnN0IFVSTCYgdXJsLCBTdHJpbmcmIG1pbWVUeXBl
KQogdm9pZCBQbHVnaW5EYXRhYmFzZTo6c2V0UHJlZmVycmVkUGx1Z2luRm9yTUlNRVR5cGUoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgUGx1Z2luUGFja2FnZSogcGx1Z2luKQogewogICAgIGlmICgh
cGx1Z2luIHx8IHBsdWdpbi0+bWltZVRvRXh0ZW5zaW9ucygpLmNvbnRhaW5zKG1pbWVUeXBlKSkK
LSAgICAgICAgbV9wcmVmZXJyZWRQbHVnaW5zLnNldChtaW1lVHlwZS5sb3dlcigpLCBwbHVnaW4p
OworICAgICAgICBtX3ByZWZlcnJlZFBsdWdpbnMuc2V0KG1pbWVUeXBlLCBwbHVnaW4pOwogfQog
CiBib29sIFBsdWdpbkRhdGFiYXNlOjpmaWxlRXhpc3RzQW5kSXNOb3REaXNhYmxlZChjb25zdCBT
dHJpbmcmIGZpbGVQYXRoKSBjb25zdApAQCAtMzE5LDggKzMxOCw4IEBAIGJvb2wgUGx1Z2luRGF0
YWJhc2U6OmZpbGVFeGlzdHNBbmRJc05vdERpc2FibGVkKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgp
IGNvbnN0CiAKIHZvaWQgUGx1Z2luRGF0YWJhc2U6OmdldERlbGV0ZWRQbHVnaW5zKFBsdWdpblNl
dCYgcGx1Z2lucykgY29uc3QKIHsKLSAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1fcGx1Z2lucy5lbmQoKTsKLSAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgYXV0byBlbmQgPSBt
X3BsdWdpbnMuZW5kKCk7CisgICAgZm9yIChhdXRvIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewogICAgICAgICBpZiAoIWZpbGVFeGlzdHNBbmRJc05vdERpc2FibGVk
KCgqaXQpLT5wYXRoKCkpKQogICAgICAgICAgICAgcGx1Z2lucy5hZGQoKml0KTsKICAgICB9CkBA
IC0zNDEsMTAgKzM0MCwxMCBAQCBib29sIFBsdWdpbkRhdGFiYXNlOjphZGQoUGFzc1JlZlB0cjxQ
bHVnaW5QYWNrYWdlPiBwcnBQYWNrYWdlKQogCiB2b2lkIFBsdWdpbkRhdGFiYXNlOjpyZW1vdmUo
UGx1Z2luUGFja2FnZSogcGFja2FnZSkKIHsKLSAgICBNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5iZWdpbigpOwotICAg
IE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHBhY2thZ2UtPm1pbWVU
b0V4dGVuc2lvbnMoKS5lbmQoKTsKKyAgICBhdXRvIGl0ID0gcGFja2FnZS0+bWltZVRvRXh0ZW5z
aW9ucygpLmJlZ2luKCk7CisgICAgYXV0byBlbmQgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25z
KCkuZW5kKCk7CiAgICAgZm9yICggOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUGx1Z2lu
UGFja2FnZUJ5TmFtZU1hcDo6aXRlcmF0b3IgcGFja2FnZUluTWFwID0gbV9wcmVmZXJyZWRQbHVn
aW5zLmZpbmQoaXQtPmtleSk7CisgICAgICAgIGF1dG8gcGFja2FnZUluTWFwID0gbV9wcmVmZXJy
ZWRQbHVnaW5zLmZpbmQoaXQtPmtleSk7CiAgICAgICAgIGlmIChwYWNrYWdlSW5NYXAgIT0gbV9w
cmVmZXJyZWRQbHVnaW5zLmVuZCgpICYmIHBhY2thZ2VJbk1hcC0+dmFsdWUgPT0gcGFja2FnZSkK
ICAgICAgICAgICAgIG1fcHJlZmVycmVkUGx1Z2lucy5yZW1vdmUocGFja2FnZUluTWFwKTsKICAg
ICB9CkBAIC00MDgsMTEgKzQwNywxMSBAQCB2b2lkIFBsdWdpbkRhdGFiYXNlOjpnZXRQbHVnaW5Q
YXRoc0luRGlyZWN0b3JpZXMoSGFzaFNldDxTdHJpbmc+JiBwYXRocykgY29uc3QKIAogICAgIFN0
cmluZyBmaWxlTmFtZUZpbHRlcigiIik7CiAKLSAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRl
cmF0b3IgZGlyc0VuZCA9IG1fcGx1Z2luRGlyZWN0b3JpZXMuZW5kKCk7Ci0gICAgZm9yIChWZWN0
b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZEl0ID0gbV9wbHVnaW5EaXJlY3Rvcmllcy5iZWdp
bigpOyBkSXQgIT0gZGlyc0VuZDsgKytkSXQpIHsKKyAgICBhdXRvIGRpcnNFbmQgPSBtX3BsdWdp
bkRpcmVjdG9yaWVzLmVuZCgpOworICAgIGZvciAoYXV0byBkSXQgPSBtX3BsdWdpbkRpcmVjdG9y
aWVzLmJlZ2luKCk7IGRJdCAhPSBkaXJzRW5kOyArK2RJdCkgewogICAgICAgICBWZWN0b3I8U3Ry
aW5nPiBwbHVnaW5QYXRocyA9IGxpc3REaXJlY3RvcnkoKmRJdCwgZmlsZU5hbWVGaWx0ZXIpOwot
ICAgICAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgcGx1Z2luc0VuZCA9IHBsdWdp
blBhdGhzLmVuZCgpOwotICAgICAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRv
ciBwSXQgPSBwbHVnaW5QYXRocy5iZWdpbigpOyBwSXQgIT0gcGx1Z2luc0VuZDsgKytwSXQpIHsK
KyAgICAgICAgYXV0byBwbHVnaW5zRW5kID0gcGx1Z2luUGF0aHMuZW5kKCk7CisgICAgICAgIGZv
ciAoYXV0byBwSXQgPSBwbHVnaW5QYXRocy5iZWdpbigpOyBwSXQgIT0gcGx1Z2luc0VuZDsgKytw
SXQpIHsKICAgICAgICAgICAgIGlmICghZmlsZUV4aXN0c0FuZElzTm90RGlzYWJsZWQoKnBJdCkp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTU4Myw4ICs1ODIsOCBAQCB2b2lkIFBs
dWdpbkRhdGFiYXNlOjp1cGRhdGVQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZSgpCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1
Z2lucy5lbmQoKTsKLSAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Bs
dWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgYXV0byBlbmQgPSBtX3BsdWdp
bnMuZW5kKCk7CisgICAgZm9yIChhdXRvIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewogICAgICAgICBpZiAoISh3cml0ZVVURjhTdHJpbmcoZmlsZSwgKCppdCktPnBh
dGgoKSkKICAgICAgICAgICAgICAgJiYgd3JpdGVUaW1lKGZpbGUsICgqaXQpLT5sYXN0TW9kaWZp
ZWQoKSkKICAgICAgICAgICAgICAgJiYgd3JpdGVVVEY4U3RyaW5nKGZpbGUsICgqaXQpLT5uYW1l
KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpbkRhdGFiYXNl
LmggYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmgKaW5kZXggYmZj
NDhlY2RmZjZjZjIyNDM1NTk0ZjhhZTg1MjMwMWE2MjYzY2Y4Ni4uZWI2YTg0MTEyNGQ2OTc3NWI2
Y2NjN2JlNDNmYmMwOWRiZjA5NzcxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vUGx1
Z2lucy9QbHVnaW5EYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1
Z2luRGF0YWJhc2UuaApAQCAtMTA3LDcgKzEwNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgUGx1Z2luU2V0IG1fcGx1Z2luczsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0
cjxQbHVnaW5QYWNrYWdlPiA+IG1fcGx1Z2luc0J5UGF0aDsKICAgICAgICAgSGFzaE1hcDxTdHJp
bmcsIHRpbWVfdD4gbV9wbHVnaW5QYXRoc1dpdGhUaW1lczsKLSAgICAgICAgSGFzaE1hcDxTdHJp
bmcsIFJlZlB0cjxQbHVnaW5QYWNrYWdlPiA+IG1fcHJlZmVycmVkUGx1Z2luczsKKyAgICAgICAg
SGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQbHVnaW5QYWNrYWdlPiwgQVNDSUlDYXNlSW5zZW5zaXRp
dmVIYXNoPiBtX3ByZWZlcnJlZFBsdWdpbnM7CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9N
RVRBREFUQV9DQUNIRSkKICAgICAgICAgYm9vbCBtX3BlcnNpc3RlbnRNZXRhZGF0YUNhY2hlSXNM
b2FkZWQ7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1
Z2luUGFja2FnZS5oIGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5QYWNrYWdlLmgK
aW5kZXggMjgzNDA1NzY3OTdhYTZiYzgzMTc3MmJjM2I0ZjljY2Y4Y2M4YmE2My4uZDc2ZWFmZDU3
OWJiMzYwZjc3NDJlZWE0ZGNjMTEyYThlNWM3MTVhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC93aW4vUGx1Z2lucy9QbHVnaW5QYWNrYWdlLmgKKysrIGIvU291cmNlL1dlYktpdC93aW4vUGx1
Z2lucy9QbHVnaW5QYWNrYWdlLmgKQEAgLTM5LDggKzM5LDkgQEAKICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIHR5cGVkZWYgSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz4gTUlNRVRvRGVzY3JpcHRpb25zTWFwOwotICAgIHR5cGVkZWYgSGFz
aE1hcDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+ID4gTUlNRVRvRXh0ZW5zaW9uc01hcDsKKworICAg
IHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNo
PiBNSU1FVG9EZXNjcmlwdGlvbnNNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVmVj
dG9yPFN0cmluZz4sIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4gTUlNRVRvRXh0ZW5zaW9uc01h
cDsKIAogICAgIGNsYXNzIFBsdWdpblBhY2thZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxQbHVnaW5Q
YWNrYWdlPiB7CiAgICAgcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vUGx1
Z2lucy9QbHVnaW5QYWNrYWdlV2luLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1
Z2luUGFja2FnZVdpbi5jcHAKaW5kZXggYzJiYmNjNDUwNTk4NDA1YzVjOGEyNGYwOGFlN2IyYTBi
ZTE3ODQ3Zi4uNzExOWQ4ODU0MTUxMTE2ZmM1ZGQ5ODRkM2FkMjJlMzVkYzU2MTFhYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5QYWNrYWdlV2luLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblBhY2thZ2VXaW4uY3BwCkBAIC0yMDAs
NyArMjAwLDcgQEAgYm9vbCBQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8oKQogICAgIGdldFZlcnNp
b25JbmZvKHZlcnNpb25JbmZvRGF0YS5nZXQoKSwgIkZpbGVPcGVuTmFtZSIpLnNwbGl0KCd8Jywg
ZGVzY3JpcHRpb25zKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0eXBlcy5zaXpl
KCk7IGkrKykgewotICAgICAgICBTdHJpbmcgdHlwZSA9IHR5cGVzW2ldLmxvd2VyKCk7CisgICAg
ICAgIFN0cmluZyB0eXBlID0gdHlwZXNbaV0uY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKICAg
ICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gaSA8IGRlc2NyaXB0aW9ucy5zaXplKCkgPyBkZXNj
cmlwdGlvbnNbaV0gOiAiIjsKICAgICAgICAgU3RyaW5nIGV4dGVuc2lvbkxpc3QgPSBpIDwgZXh0
ZW5zaW9uTGlzdHMuc2l6ZSgpID8gZXh0ZW5zaW9uTGlzdHNbaV0gOiAiIjsKIApAQCAtMzE5LDgg
KzMxOSw4IEBAIGJvb2wgUGx1Z2luUGFja2FnZTo6ZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZSYg
YSwgY29uc3QgUGx1Z2luUGFja2FnZSYgYikKICAgICBpZiAoYS5tX21pbWVUb0V4dGVuc2lvbnMu
c2l6ZSgpICE9IGIubV9taW1lVG9FeHRlbnNpb25zLnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3I6OktleXMgZW5k
ID0gYS5tX21pbWVUb0V4dGVuc2lvbnMuZW5kKCkua2V5cygpOwotICAgIGZvciAoTUlNRVRvRXh0
ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3I6OktleXMgaXQgPSBhLm1fbWltZVRvRXh0ZW5zaW9u
cy5iZWdpbigpLmtleXMoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgYXV0byBlbmQgPSBhLm1f
bWltZVRvRXh0ZW5zaW9ucy5lbmQoKS5rZXlzKCk7CisgICAgZm9yIChhdXRvIGl0ID0gYS5tX21p
bWVUb0V4dGVuc2lvbnMuYmVnaW4oKS5rZXlzKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAg
ICBpZiAoIWIubV9taW1lVG9FeHRlbnNpb25zLmNvbnRhaW5zKCppdCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL0N1c3RvbVByb3RvY29sTWFuYWdlci5oIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL0N1c3RvbVByb3RvY29sTWFuYWdl
ci5oCmluZGV4IDljZmRjMzk2ZTEzNjk3YzI5ZDhkODdmYzFjMmEwMGJjZWJkMmM2ZWUuLmJmMmJk
NDcyMDVjYTA4Zjk5M2ZiYmNmNzVmNGRmYjJkNjA5NDg1M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL0N1c3RvbVByb3RvY29scy9DdXN0b21Qcm90b2NvbE1hbmFn
ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMv
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmgKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogT0JKQ19DTEFTUyBO
U1VSTFNlc3Npb25Db25maWd1cmF0aW9uOwogT0JKQ19DTEFTUyBXS0N1c3RvbVByb3RvY29sOwog
I2Vsc2UKQEAgLTk5LDcgKzEwMCw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdvcmtRdWV1ZT4g
bV9tZXNzYWdlUXVldWU7CiAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBIYXNoU2V0PFN0cmlu
Zz4gbV9yZWdpc3RlcmVkU2NoZW1lczsKKyAgICBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5z
ZW5zaXRpdmVIYXNoPiBtX3JlZ2lzdGVyZWRTY2hlbWVzOwogICAgIExvY2sgbV9yZWdpc3RlcmVk
U2NoZW1lc011dGV4OwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBSZXRhaW5QdHI8
V0tDdXN0b21Qcm90b2NvbD4+IEN1c3RvbVByb3RvY29sTWFwOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvbWFjL05ldHNjYXBlUGx1Z2luTW9kdWxl
TWFjLm1tIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvbWFjL05ldHNj
YXBlUGx1Z2luTW9kdWxlTWFjLm1tCmluZGV4IDE1NjQxMzYxOWQzNmM1MjAzYWE1ZWJjYzg4NzJh
MmY5ZDZkNDNlYTQuLjMwNWY4NWFiNDNiNzVmMjcxMTYwOGNlYzVkNzZjNjE0ZThkYWUwNzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL21hYy9OZXRz
Y2FwZVBsdWdpbk1vZHVsZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lu
cy9OZXRzY2FwZS9tYWMvTmV0c2NhcGVQbHVnaW5Nb2R1bGVNYWMubW0KQEAgLTE4Niw3ICsxODYs
NyBAQCBzdGF0aWMgYm9vbCBnZXRQbHVnaW5JbmZvRnJvbVByb3BlcnR5TGlzdHMoQ0ZCdW5kbGVS
ZWYgYnVuZGxlLCBQbHVnaW5Nb2R1bGVJbmZvJgogICAgICAgICBpZiAobWltZVR5cGVEZXNjcmlw
dGlvbiAmJiBDRkdldFR5cGVJRChtaW1lVHlwZURlc2NyaXB0aW9uKSAhPSBDRlN0cmluZ0dldFR5
cGVJRCgpKQogICAgICAgICAgICAgbWltZVR5cGVEZXNjcmlwdGlvbiA9IDA7CiAKLSAgICAgICAg
bWltZUNsYXNzSW5mby50eXBlID0gU3RyaW5nKG1pbWVUeXBlKS5sb3dlcigpOworICAgICAgICBt
aW1lQ2xhc3NJbmZvLnR5cGUgPSBTdHJpbmcobWltZVR5cGUpLmNvbnZlcnRUb0FTQ0lJTG93ZXJj
YXNlKCk7CiAgICAgICAgIG1pbWVDbGFzc0luZm8uZGVzYyA9IG1pbWVUeXBlRGVzY3JpcHRpb247
CiAKICAgICAgICAgLy8gTm93IGdldCB0aGUgZXh0ZW5zaW9ucyBmb3IgdGhpcyBNSU1FIHR5cGUu
CkBAIC0yMDQsMTAgKzIwNCwxMCBAQCBzdGF0aWMgYm9vbCBnZXRQbHVnaW5JbmZvRnJvbVByb3Bl
cnR5TGlzdHMoQ0ZCdW5kbGVSZWYgYnVuZGxlLCBQbHVnaW5Nb2R1bGVJbmZvJgogICAgICAgICAg
ICAgLy8gbXVsdGlwbGUgYXJyYXkgZWxlbWVudHMgaW4gdGhlIHByb3BlcnR5IGxpc3QuIFdvcmsg
YXJvdW5kIHRoaXMgaGVyZSBieSBzcGxpdHRpbmcgdGhlCiAgICAgICAgICAgICAvLyBleHRlbnNp
b24gc3RyaW5nIGludG8gY29tcG9uZW50cy4KICAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4
dGVuc2lvbkNvbXBvbmVudHM7Ci0gICAgICAgICAgICBTdHJpbmcoZXh0ZW5zaW9uKS5sb3dlcigp
LnNwbGl0KCcsJywgZXh0ZW5zaW9uQ29tcG9uZW50cyk7CisgICAgICAgICAgICBTdHJpbmcoZXh0
ZW5zaW9uKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpLnNwbGl0KCcsJywgZXh0ZW5zaW9uQ29t
cG9uZW50cyk7CiAKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZXh0ZW5zaW9u
Q29tcG9uZW50cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBtaW1lQ2xhc3NJbmZvLmV4
dGVuc2lvbnMuYXBwZW5kKGV4dGVuc2lvbkNvbXBvbmVudHNbaV0pOworICAgICAgICAgICAgZm9y
IChhdXRvJiBjb21wb25lbnQgOiBleHRlbnNpb25Db21wb25lbnRzKQorICAgICAgICAgICAgICAg
IG1pbWVDbGFzc0luZm8uZXh0ZW5zaW9ucy5hcHBlbmQoY29tcG9uZW50KTsKICAgICAgICAgfQog
CiAgICAgICAgIC8vIEFkZCB0aGlzIE1JTUUgdHlwZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL3gxMS9OZXRzY2FwZVBsdWdpbk1vZHVsZVgxMS5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS94MTEvTmV0c2NhcGVQ
bHVnaW5Nb2R1bGVYMTEuY3BwCmluZGV4IDM2Mjc1MzkyYTNjMGI0N2U3OWNkY2EwZWI2MzMxMGFl
NmVmOGE5ZjQuLmFjZmNmMDAyMzM4NGEyOWJmYTc0YjI0YmZkY2QwZmEyODRmOWIxY2QgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL3gxMS9OZXRzY2Fw
ZVBsdWdpbk1vZHVsZVgxMS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMv
TmV0c2NhcGUveDExL05ldHNjYXBlUGx1Z2luTW9kdWxlWDExLmNwcApAQCAtNzYsNyArNzYsNyBA
QCB2b2lkIE5ldHNjYXBlUGx1Z2luTW9kdWxlOjpwYXJzZU1JTUVEZXNjcmlwdGlvbihjb25zdCBT
dHJpbmcmIG1pbWVEZXNjcmlwdGlvbiwgVgogICAgIEFTU0VSVF9BUkcocmVzdWx0LCByZXN1bHQu
aXNFbXB0eSgpKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOwotICAgIG1pbWVEZXNjcmlw
dGlvbi5sb3dlcigpLnNwbGl0KFVDaGFyKCc7JyksIGZhbHNlLCB0eXBlcyk7CisgICAgbWltZURl
c2NyaXB0aW9uLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkuc3BsaXQoVUNoYXIoJzsnKSwgZmFs
c2UsIHR5cGVzKTsKICAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh0eXBlcy5zaXpl
KCkpOwogCiAgICAgc2l6ZV90IG1pbWVJbmZvQ291bnQgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCmluZGV4IDQxNjk3NzY3Y2E3Y2U2
ZTNkNzYwMjg2OTczYzNlNDNmNGMxOWFiMTUuLjczYTA1OTkwYzQyMzc1N2IwZTNlMTk2YWFmMThh
ODk2MzM4OWE0MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19jb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfY29udGV4dC5jcHAKQEAgLTU2Myw3ICs1NjMsNyBAQCB2b2lkIGV3a19jb250ZXh0X3ByZWZl
cnJlZF9sYW5ndWFnZXNfc2V0KEVpbmFfTGlzdCogbGFuZ3VhZ2VzKQogICAgICAgICBFaW5hX0xp
c3QqIGw7CiAgICAgICAgIHZvaWQqIGRhdGE7CiAgICAgICAgIEVJTkFfTElTVF9GT1JFQUNIKGxh
bmd1YWdlcywgbCwgZGF0YSkKLSAgICAgICAgICAgIHByZWZlcnJlZExhbmd1YWdlcy5hcHBlbmQo
U3RyaW5nOjpmcm9tVVRGOChzdGF0aWNfY2FzdDxjaGFyKj4oZGF0YSkpLmxvd2VyKCkucmVwbGFj
ZSgiXyIsICItIikpOworICAgICAgICAgICAgcHJlZmVycmVkTGFuZ3VhZ2VzLmFwcGVuZChTdHJp
bmc6OmZyb21VVEY4KHN0YXRpY19jYXN0PGNoYXIqPihkYXRhKSkuY29udmVydFRvQVNDSUlMb3dl
cmNhc2UoKS5yZXBsYWNlKCJfIiwgIi0iKSk7CiAgICAgfQogCiAgICAgV2ViQ29yZTo6b3ZlcnJp
ZGVVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzKHByZWZlcnJlZExhbmd1YWdlcyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwCmlu
ZGV4IGQ2ZjVlMTM4NWU1ZDg5ZTM0MGVjNDI3MDE0MjQwNjNlNWFjOTE5NWEuLmFmNmQ4NzI3NjRh
OWIxMmJlZjYyMWFhMzdkNzQ5Mjc1NmI3NjFkNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwCkBAIC05NjgsNyArOTY4
LDcgQEAgdm9pZCB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3ByZWZlcnJlZF9sYW5ndWFnZXMoV2Vi
S2l0V2ViQ29udGV4dCogY29udGV4dCwgY29uc3QKIAogICAgIFZlY3RvcjxTdHJpbmc+IGxhbmd1
YWdlczsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgbGFuZ3VhZ2VMaXN0W2ldOyArK2kpCi0gICAg
ICAgIGxhbmd1YWdlcy5hcHBlbmQoU3RyaW5nOjpmcm9tVVRGOChsYW5ndWFnZUxpc3RbaV0pLmxv
d2VyKCkucmVwbGFjZSgiXyIsICItIikpOworICAgICAgICBsYW5ndWFnZXMuYXBwZW5kKFN0cmlu
Zzo6ZnJvbVVURjgobGFuZ3VhZ2VMaXN0W2ldKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpLnJl
cGxhY2UoIl8iLCAiLSIpKTsKIAogICAgIFdlYkNvcmU6Om92ZXJyaWRlVXNlclByZWZlcnJlZExh
bmd1YWdlcyhsYW5ndWFnZXMpOwogICAgIFdlYkNvcmU6Omxhbmd1YWdlRGlkQ2hhbmdlKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5JbmZvU3Rv
cmUuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luSW5mb1N0b3Jl
LmNwcAppbmRleCA2NWUzODQyNDY4ODAwMzYwZDc0NDE1Yjc2MDMzNjFlMDVjNWM4YTYyLi44YTk4
YzYyMDFhZDc4ZTc3NjExZjY4NzBkZTcyNzQ4ZTZjMmJlMWEyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbkluZm9TdG9yZS5jcHAKQEAgLTEzOCw5
ICsxMzgsNyBAQCBQbHVnaW5Nb2R1bGVJbmZvIFBsdWdpbkluZm9TdG9yZTo6ZmluZFBsdWdpbkZv
ckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbgogICAgICAgICAgICAgY29udGludWU7
CiAKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBtaW1lQ2xhc3NJbmZvIDogcGx1Z2luLmluZm8u
bWltZXMpIHsKLSAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBleHRlbnNpb25zID0g
bWltZUNsYXNzSW5mby5leHRlbnNpb25zOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
c3RkOjpmaW5kKGV4dGVuc2lvbnMuYmVnaW4oKSwgZXh0ZW5zaW9ucy5lbmQoKSwgZXh0ZW5zaW9u
KSAhPSBleHRlbnNpb25zLmVuZCgpKSB7CisgICAgICAgICAgICBpZiAobWltZUNsYXNzSW5mby5l
eHRlbnNpb25zLmNvbnRhaW5zKGV4dGVuc2lvbikpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBm
b3VuZCBhIHN1cHBvcnRlZCBleHRlbnNpb24sIHNldCB0aGUgY29ycmVjdCBNSU1FIHR5cGUuCiAg
ICAgICAgICAgICAgICAgbWltZVR5cGUgPSBtaW1lQ2xhc3NJbmZvLnR5cGU7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHBsdWdpbjsKQEAgLTE2MCwxMSArMTU4LDExIEBAIHN0YXRpYyBpbmxpbmUg
U3RyaW5nIHBhdGhFeHRlbnNpb24oY29uc3QgVVJMJiB1cmwpCiAgICAgICAgIGlmIChleHRlbnNp
b25Qb3MgIT0gbm90Rm91bmQpCiAgICAgICAgICAgICBleHRlbnNpb24gPSBmaWxlbmFtZS5zdWJz
dHJpbmcoZXh0ZW5zaW9uUG9zICsgMSk7CiAgICAgfQotICAgIAotICAgIHJldHVybiBleHRlbnNp
b247CisgICAgcmV0dXJuIGV4dGVuc2lvbi5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOwogfQog
CiAjaWYgIVBMQVRGT1JNKENPQ09BKQorCiBQbHVnaW5Nb2R1bGVMb2FkUG9saWN5IFBsdWdpbklu
Zm9TdG9yZTo6ZGVmYXVsdExvYWRQb2xpY3lGb3JQbHVnaW4oY29uc3QgUGx1Z2luTW9kdWxlSW5m
byYpCiB7CiAgICAgcmV0dXJuIFBsdWdpbk1vZHVsZUxvYWROb3JtYWxseTsKQEAgLTE5MCw3ICsx
ODgsNyBAQCBQbHVnaW5Nb2R1bGVJbmZvIFBsdWdpbkluZm9TdG9yZTo6ZmluZFBsdWdpbihTdHJp
bmcmIG1pbWVUeXBlLCBjb25zdCBVUkwmIHVybCwgUAogICAgIH0KIAogICAgIC8vIE5leHQsIGNo
ZWNrIGlmIGFueSBwbHVnLWlucyBjbGFpbSB0byBzdXBwb3J0IHRoZSBVUkwgZXh0ZW5zaW9uLgot
ICAgIFN0cmluZyBleHRlbnNpb24gPSBwYXRoRXh0ZW5zaW9uKHVybCkubG93ZXIoKTsKKyAgICBT
dHJpbmcgZXh0ZW5zaW9uID0gcGF0aEV4dGVuc2lvbih1cmwpOwogICAgIGlmICghZXh0ZW5zaW9u
LmlzTnVsbCgpICYmIG1pbWVUeXBlLmlzRW1wdHkoKSkgewogICAgICAgICBQbHVnaW5Nb2R1bGVJ
bmZvIHBsdWdpbiA9IGZpbmRQbHVnaW5Gb3JFeHRlbnNpb24oZXh0ZW5zaW9uLCBtaW1lVHlwZSwg
YWxsb3dlZFBsdWdpblR5cGVzKTsKICAgICAgICAgaWYgKCFwbHVnaW4ucGF0aC5pc051bGwoKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggNzMxNGEzODAy
YTdkMjFlMzQ3YWM2YWI3YWViNGFkY2YxOWRmNjVhYS4uNzE2NTFlYWFlZjUzY2Q2ZDBiOWUxMDdl
YTA3NTA4NDU4NWY5M2Y3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHAKQEAgLTE4NjMsNyArMTg2Myw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpmaW5kUGx1Z2lu
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHVpbnQzMl90IHByb2Nlc3NUeXBlLCBjb25zCiAKICAg
ICBNRVNTQUdFX0NIRUNLX1VSTCh1cmxTdHJpbmcpOwogCi0gICAgbmV3TWltZVR5cGUgPSBtaW1l
VHlwZS5sb3dlcigpOworICAgIG5ld01pbWVUeXBlID0gbWltZVR5cGUuY29udmVydFRvQVNDSUlM
b3dlcmNhc2UoKTsKICAgICBwbHVnaW5Mb2FkUG9saWN5ID0gUGx1Z2luTW9kdWxlTG9hZE5vcm1h
bGx5OwogCiAgICAgUGx1Z2luRGF0YTo6QWxsb3dlZFBsdWdpblR5cGVzIGFsbG93ZWRQbHVnaW5U
eXBlcyA9IGFsbG93T25seUFwcGxpY2F0aW9uUGx1Z2lucyA/IFBsdWdpbkRhdGE6Ok9ubHlBcHBs
aWNhdGlvblBsdWdpbnMgOiBQbHVnaW5EYXRhOjpBbGxQbHVnaW5zOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKaW5kZXggNjJiODVlY2VhMDVkMTM4MTI2MGZi
MDY2OWFkZjhkY2NiMWEyMGQ3MC4uYmYzY2U1ZDhkZmVjODIxYTIxMDA4OWM1NjhjNmVlMGJjNzhm
YmI4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29s
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCkBA
IC05MTMsOSArOTEzLDkgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVB
c0NPUlNFbmFibGVkKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQogICAgIHNlbmRUb0FsbFByb2Nl
c3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0NPUlNFbmFibGVk
KHVybFNjaGVtZSkpOwogfQogCi1IYXNoU2V0PFN0cmluZz4mIFdlYlByb2Nlc3NQb29sOjpnbG9i
YWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKQorSGFzaFNldDxTdHJpbmcs
IEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIFdlYlByb2Nlc3NQb29sOjpnbG9iYWxVUkxTY2hl
bWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxIYXNoU2V0PFN0cmluZz4+IHNldDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFz
aFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4+IHNldDsKICAgICByZXR1cm4g
c2V0OwogfQogCkBAIC05MjQsMTAgKzkyNCw5IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lz
dGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbnN0CiAg
ICAgaWYgKCF1cmxTY2hlbWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZyBzY2hlbWVM
b3dlciA9IHVybFNjaGVtZS5sb3dlcigpOwotICAgIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9t
UHJvdG9jb2xIYW5kbGVycygpLmFkZChzY2hlbWVMb3dlcik7CisgICAgZ2xvYmFsVVJMU2NoZW1l
c1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkuYWRkKHVybFNjaGVtZSk7CiAgICAgZm9yIChh
dXRvKiBwcm9jZXNzUG9vbCA6IGFsbFByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9v
bC0+cmVnaXN0ZXJTY2hlbWVGb3JDdXN0b21Qcm90b2NvbChzY2hlbWVMb3dlcik7CisgICAgICAg
IHByb2Nlc3NQb29sLT5yZWdpc3RlclNjaGVtZUZvckN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7
CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hh
dmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCkBAIC05
MzUsMTAgKzkzNCw5IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9iYWxVUkxT
Y2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMoY29uCiAgICAgaWYgKCF1cmxTY2hl
bWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZyBzY2hlbWVMb3dlciA9IHVybFNjaGVt
ZS5sb3dlcigpOwotICAgIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVy
cygpLnJlbW92ZShzY2hlbWVMb3dlcik7CisgICAgZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Q
cm90b2NvbEhhbmRsZXJzKCkucmVtb3ZlKHVybFNjaGVtZSk7CiAgICAgZm9yIChhdXRvKiBwcm9j
ZXNzUG9vbCA6IGFsbFByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+dW5yZWdp
c3RlclNjaGVtZUZvckN1c3RvbVByb3RvY29sKHNjaGVtZUxvd2VyKTsKKyAgICAgICAgcHJvY2Vz
c1Bvb2wtPnVucmVnaXN0ZXJTY2hlbWVGb3JDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUpOwogfQog
CiAjaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQb29sLmgKaW5kZXggZmYwNmNmNzU1MzUwNWM1NGVkZGE2OWJmZTg0YTM4NzJm
YWE3ZDAyMi4uYjdjNzVkNjA1NzE3OWJlYzA4ZjZhZWM2MDJkMzE5ZTg3YzYyZTU4NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKQEAgLTMxNyw3ICszMTcsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCByZWdpc3RlclNjaGVtZUZvckN1c3RvbVByb3RvY29sKGNvbnN0
IFN0cmluZyYpOwogICAgIHZvaWQgdW5yZWdpc3RlclNjaGVtZUZvckN1c3RvbVByb3RvY29sKGNv
bnN0IFN0cmluZyYpOwogCi0gICAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiYgZ2xvYmFsVVJMU2No
ZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCk7CisgICAgc3RhdGljIEhhc2hTZXQ8U3Ry
aW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3Rv
bVByb3RvY29sSGFuZGxlcnMoKTsKICAgICBzdGF0aWMgdm9pZCByZWdpc3Rlckdsb2JhbFVSTFNj
aGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhjb25zdCBTdHJpbmcmKTsKICAgICBz
dGF0aWMgdm9pZCB1bnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2Nv
bEhhbmRsZXJzKGNvbnN0IFN0cmluZyYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcAppbmRl
eCAyNDgzOTgzMmMwNTdhYTVlYmZiYzc4MjhmZjkxZmFlOTcyNTI4MDM3Li5iOWIyOTZjZTFiZTg2
ZGRlMjc2ZDdmMjY0NDMwYzI1MDY4ZmE5OTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAK
QEAgLTYzOCw3ICs2MzgsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luOjppbml0aWFsaXplKGNvbnN0
IFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiAKICNpZiBQTFVHSU5fQVJDSElURUNUVVJFKE1BQykK
ICAgICAgICAgaWYgKG1fcGx1Z2luTW9kdWxlLT5wbHVnaW5RdWlya3MoKS5jb250YWlucyhQbHVn
aW5RdWlya3M6OldhbnRzTG93ZXJjYXNlUGFyYW1ldGVyTmFtZXMpKQotICAgICAgICAgICAgcGFy
YW1ldGVyTmFtZSA9IHBhcmFtZXRlck5hbWUubG93ZXIoKTsKKyAgICAgICAgICAgIHBhcmFtZXRl
ck5hbWUgPSBwYXJhbWV0ZXJOYW1lLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCk7CiAjZW5kaWYK
IAogICAgICAgICBwYXJhbU5hbWVzLmFwcGVuZChwYXJhbWV0ZXJOYW1lLnV0ZjgoKSk7CkBAIC02
NzUsNyArNjc1LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbjo6aW5pdGlhbGl6ZShjb25zdCBQYXJh
bWV0ZXJzJiBwYXJhbWV0ZXJzKQogICAgIGlmIChtX3BsdWdpbk1vZHVsZS0+cGx1Z2luUXVpcmtz
KCkuY29udGFpbnMoUGx1Z2luUXVpcmtzOjpNYWtlT3BhcXVlVW5sZXNzVHJhbnNwYXJlbnRTaWx2
ZXJsaWdodEJhY2tncm91bmRBdHRyaWJ1dGVFeGlzdHMpKSB7CiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcGFyYW1ldGVycy5uYW1lcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAg
aWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBhcmFtZXRlcnMubmFtZXNbaV0sICJi
YWNrZ3JvdW5kIikpIHsKLSAgICAgICAgICAgICAgICBzZXRJc1RyYW5zcGFyZW50KGlzVHJhbnNw
YXJlbnRTaWx2ZXJsaWdodEJhY2tncm91bmRWYWx1ZShwYXJhbWV0ZXJzLnZhbHVlc1tpXS5sb3dl
cigpKSk7CisgICAgICAgICAgICAgICAgc2V0SXNUcmFuc3BhcmVudChpc1RyYW5zcGFyZW50U2ls
dmVybGlnaHRCYWNrZ3JvdW5kVmFsdWUocGFyYW1ldGVycy52YWx1ZXNbaV0uY29udmVydFRvQVND
SUlMb3dlcmNhc2UoKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCmluZGV4IDk4ZmU5OThi
MDFhZTRhYWYwMDZjMWUxZWQxNzJkZTA0ODA2MTI4ZDMuLmI4OWQ3YTFiMzdlMzAzYzVhYTQ5NTYz
Y2U4NmFlMmFkZjRlOWViODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCkBA
IC0xNTA4LDE0ICsxNTA4LDExIEBAIFBhc3NSZWZQdHI8V2lkZ2V0PiBXZWJGcmFtZUxvYWRlckNs
aWVudDo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBJbnRTaXplJiBwCiAKIHN0YXRpYyBi
b29sIHBsdWdpblN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFBsdWdpbkRhdGEmIHBsdWdpbkRhdGEs
IGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKQogewotICAgIEFTU0VSVChleHRlbnNpb24ubG93ZXIo
KSA9PSBleHRlbnNpb24pOwotCisgICAgQVNTRVJUKGV4dGVuc2lvbi5jb252ZXJ0VG9BU0NJSUxv
d2VyY2FzZSgpID09IGV4dGVuc2lvbik7CiAgICAgVmVjdG9yPE1pbWVDbGFzc0luZm8+IG1pbWVz
OwogICAgIFZlY3RvcjxzaXplX3Q+IG1pbWVQbHVnaW5JbmRpY2VzOwogICAgIHBsdWdpbkRhdGEu
Z2V0V2ViVmlzaWJsZU1pbWVzQW5kUGx1Z2luSW5kaWNlcyhtaW1lcywgbWltZVBsdWdpbkluZGlj
ZXMpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWltZXMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgY29uc3QgTWltZUNsYXNzSW5mbyYgbWltZUNsYXNzSW5mbyA9IG1pbWVzW2ldOwotCisg
ICAgZm9yIChhdXRvJiBtaW1lQ2xhc3NJbmZvIDogbWltZXMpIHsKICAgICAgICAgaWYgKG1pbWVD
bGFzc0luZm8uZXh0ZW5zaW9ucy5jb250YWlucyhleHRlbnNpb24pKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpAQCAtMTUyNCw0MiArMTUyMSwzNyBAQCBzdGF0aWMgYm9vbCBwbHVn
aW5TdXBwb3J0c0V4dGVuc2lvbihjb25zdCBQbHVnaW5EYXRhJiBwbHVnaW5EYXRhLCBjb25zdCBT
dHJpbmcmCiAKIE9iamVjdENvbnRlbnRUeXBlIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpvYmplY3RD
b250ZW50VHlwZShjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZUluKQogewot
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBtZXJnZWQgd2l0aCBXZWJDb3JlOjpGcmFtZUxv
YWRlcjo6ZGVmYXVsdE9iamVjdENvbnRlbnRUeXBlIHdoZW4gdGhlIHBsdWdpbiBjb2RlCi0gICAg
Ly8gaXMgY29uc29saWRhdGVkLgorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBldmVudHVhbGx5
IGJlIG1lcmdlZCB3aXRoIFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpkZWZhdWx0T2JqZWN0Q29udGVu
dFR5cGUuCiAKICAgICBTdHJpbmcgbWltZVR5cGUgPSBtaW1lVHlwZUluOwogICAgIGlmIChtaW1l
VHlwZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgU3RyaW5nIGV4dGVuc2lvbiA9IHVybC5wYXRoKCku
c3Vic3RyaW5nKHVybC5wYXRoKCkucmV2ZXJzZUZpbmQoJy4nKSArIDEpLmxvd2VyKCk7CisgICAg
ICAgIFN0cmluZyBwYXRoID0gdXJsLnBhdGgoKTsKKyAgICAgICAgYXV0byBkb3RQb3NpdGlvbiA9
IHBhdGgucmV2ZXJzZUZpbmQoJy4nKTsKKyAgICAgICAgaWYgKGRvdFBvc2l0aW9uID09IG5vdEZv
dW5kKQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdENvbnRlbnRGcmFtZTsKKyAgICAgICAgU3Ry
aW5nIGV4dGVuc2lvbiA9IHBhdGguc3Vic3RyaW5nKGRvdFBvc2l0aW9uICsgMSkuY29udmVydFRv
QVNDSUlMb3dlcmNhc2UoKTsKIAogICAgICAgICAvLyBUcnkgdG8gZ3Vlc3MgdGhlIE1JTUUgdHlw
ZSBmcm9tIHRoZSBleHRlbnNpb24uCiAgICAgICAgIG1pbWVUeXBlID0gTUlNRVR5cGVSZWdpc3Ry
eTo6Z2V0TUlNRVR5cGVGb3JFeHRlbnNpb24oZXh0ZW5zaW9uKTsKLQogICAgICAgICBpZiAobWlt
ZVR5cGUuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSdzIGEgcGx1
Zy1pbiBhcm91bmQgdGhhdCBjYW4gaGFuZGxlIHRoZSBleHRlbnNpb24uCiAgICAgICAgICAgICBp
ZiAoV2ViUGFnZSogd2ViUGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkgewogICAgICAgICAgICAgICAg
IGlmIChwbHVnaW5TdXBwb3J0c0V4dGVuc2lvbih3ZWJQYWdlLT5jb3JlUGFnZSgpLT5wbHVnaW5E
YXRhKCksIGV4dGVuc2lvbikpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3RDb250
ZW50TmV0c2NhcGVQbHVnaW47CiAgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gT2Jq
ZWN0Q29udGVudEZyYW1lOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1pbWVUeXBlLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIE9iamVjdENvbnRlbnRGcmFtZTsKLQotICAgIGJvb2wg
cGx1Z0luU3VwcG9ydHNNSU1FVHlwZSA9IGZhbHNlOwotICAgIGlmIChXZWJQYWdlKiB3ZWJQYWdl
ID0gbV9mcmFtZS0+cGFnZSgpKSB7Ci0gICAgICAgIGNvbnN0IFBsdWdpbkRhdGEmIHBsdWdpbkRh
dGEgPSB3ZWJQYWdlLT5jb3JlUGFnZSgpLT5wbHVnaW5EYXRhKCk7Ci0gICAgICAgIGlmIChwbHVn
aW5EYXRhLnN1cHBvcnRzTWltZVR5cGUobWltZVR5cGUsIFBsdWdpbkRhdGE6OkFsbFBsdWdpbnMp
ICYmIHdlYkZyYW1lKCktPmNvcmVGcmFtZSgpLT5sb2FkZXIoKS5zdWJmcmFtZUxvYWRlcigpLmFs
bG93UGx1Z2lucygpKQotICAgICAgICAgICAgcGx1Z0luU3VwcG9ydHNNSU1FVHlwZSA9IHRydWU7
Ci0gICAgICAgIGVsc2UgaWYgKHBsdWdpbkRhdGEuc3VwcG9ydHNNaW1lVHlwZShtaW1lVHlwZSwg
UGx1Z2luRGF0YTo6T25seUFwcGxpY2F0aW9uUGx1Z2lucykpCi0gICAgICAgICAgICBwbHVnSW5T
dXBwb3J0c01JTUVUeXBlID0gdHJ1ZTsKLSAgICB9Ci0gICAgCiAgICAgaWYgKE1JTUVUeXBlUmVn
aXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZShtaW1lVHlwZSkpCiAgICAgICAgIHJldHVy
biBPYmplY3RDb250ZW50SW1hZ2U7CiAKLSAgICBpZiAocGx1Z0luU3VwcG9ydHNNSU1FVHlwZSkK
LSAgICAgICAgcmV0dXJuIE9iamVjdENvbnRlbnROZXRzY2FwZVBsdWdpbjsKKyAgICBpZiAoV2Vi
UGFnZSogd2ViUGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkgeworICAgICAgICBhdXRvIGFsbG93ZWRQ
bHVnaW5UeXBlcyA9IHdlYkZyYW1lKCktPmNvcmVGcmFtZSgpLT5sb2FkZXIoKS5zdWJmcmFtZUxv
YWRlcigpLmFsbG93UGx1Z2lucygpCisgICAgICAgICAgICA/IFBsdWdpbkRhdGE6OkFsbFBsdWdp
bnMgOiBQbHVnaW5EYXRhOjpPbmx5QXBwbGljYXRpb25QbHVnaW5zOworICAgICAgICBpZiAod2Vi
UGFnZS0+Y29yZVBhZ2UoKS0+cGx1Z2luRGF0YSgpLnN1cHBvcnRzTWltZVR5cGUobWltZVR5cGUs
IGFsbG93ZWRQbHVnaW5UeXBlcykpCisgICAgICAgICAgICByZXR1cm4gT2JqZWN0Q29udGVudE5l
dHNjYXBlUGx1Z2luOworICAgIH0KIAogICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBv
cnRlZE5vbkltYWdlTUlNRVR5cGUobWltZVR5cGUpKQogICAgICAgICByZXR1cm4gT2JqZWN0Q29u
dGVudEZyYW1lOwo=
</data>
<flag name="review"
          id="295637"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>