<?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>208404</bug_id>
          
          <creation_ts>2020-02-28 21:58:22 -0800</creation_ts>
          <short_desc>[JSC] BuiltinNames&apos; HashMap should be small</short_desc>
          <delta_ts>2020-03-02 10:53:45 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1624230</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-28 21:58:22 -0800</bug_when>
    <thetext>[JSC] BuiltinNames&apos; HashMap should be small</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1624231</commentid>
    <comment_count>1</comment_count>
      <attachid>392049</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-28 22:18:54 -0800</bug_when>
    <thetext>Created attachment 392049
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1624237</commentid>
    <comment_count>2</comment_count>
      <attachid>392049</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-02-28 23:51:14 -0800</bug_when>
    <thetext>Comment on attachment 392049
Patch

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

Nice work.  r=me

&gt; Source/JavaScriptCore/ChangeLog:8
&gt; +        This patch makes public-to-private-name-map from HashMap&lt;RefPtr&lt;UniquedStringImpl&gt;, SymbolImpl*&gt; to HashSet&lt;String&gt; to save half of memory.

/makes/converts/.

&gt; Source/JavaScriptCore/builtins/BuiltinNames.cpp:66
&gt;  #define INITIALIZE_SYMBOL_PUBLIC_TO_PRIVATE_ENTRY(name) \

nit: can we rename this to INITIALIZE_WELL_KNOWN_SYMBOL_PUBLIC_TO_PRIVATE_ENTRY?  I think this make its purpose clearer.

&gt; Source/JavaScriptCore/builtins/BuiltinNames.h:239
&gt;  #ifndef NDEBUG

Let&apos;s change this to #if ASSERT_ENABLED

&gt; Source/JavaScriptCore/builtins/BuiltinNames.h:252
&gt; +    UNUSED_PARAM(publicName);
&gt; +    ASSERT(String(publicName.impl()) == String(privateName.impl()));

You can just use ASSERT_UNUSED(publicName, publicName.impl()) == String(privateName.impl()));

&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:715
&gt; +                    impl = symbol-&gt;substring(strlen(&quot;Symbol.&quot;));

Will the compiler fold strlen(&quot;Symbol.&quot;) into a constant?  If not, then maybe we should express this as:
     constexpr char symbolPrefix = &quot;Symbol.&quot;;
     constexpr size_t symbolPrefixLength = sizeof(symbolPrefix);
     impl = symbol-&gt;substring(symbolPrefixLength);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1624238</commentid>
    <comment_count>3</comment_count>
      <attachid>392049</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-28 23:57:47 -0800</bug_when>
    <thetext>Comment on attachment 392049
Patch

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

Thanks!

&gt;&gt; Source/JavaScriptCore/ChangeLog:8
&gt;&gt; +        This patch makes public-to-private-name-map from HashMap&lt;RefPtr&lt;UniquedStringImpl&gt;, SymbolImpl*&gt; to HashSet&lt;String&gt; to save half of memory.
&gt; 
&gt; /makes/converts/.

Fixed.

&gt;&gt; Source/JavaScriptCore/builtins/BuiltinNames.cpp:66
&gt;&gt;  #define INITIALIZE_SYMBOL_PUBLIC_TO_PRIVATE_ENTRY(name) \
&gt; 
&gt; nit: can we rename this to INITIALIZE_WELL_KNOWN_SYMBOL_PUBLIC_TO_PRIVATE_ENTRY?  I think this make its purpose clearer.

Fixed.

&gt;&gt; Source/JavaScriptCore/builtins/BuiltinNames.h:239
&gt;&gt;  #ifndef NDEBUG
&gt; 
&gt; Let&apos;s change this to #if ASSERT_ENABLED

Fixed.

&gt;&gt; Source/JavaScriptCore/builtins/BuiltinNames.h:252
&gt;&gt; +    ASSERT(String(publicName.impl()) == String(privateName.impl()));
&gt; 
&gt; You can just use ASSERT_UNUSED(publicName, publicName.impl()) == String(privateName.impl()));

Fixed.

&gt;&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:715
&gt;&gt; +                    impl = symbol-&gt;substring(strlen(&quot;Symbol.&quot;));
&gt; 
&gt; Will the compiler fold strlen(&quot;Symbol.&quot;) into a constant?  If not, then maybe we should express this as:
&gt;      constexpr char symbolPrefix = &quot;Symbol.&quot;;
&gt;      constexpr size_t symbolPrefixLength = sizeof(symbolPrefix);
&gt;      impl = symbol-&gt;substring(symbolPrefixLength);

Yes, typical compiler folds it into a constant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1624239</commentid>
    <comment_count>4</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-29 00:04:19 -0800</bug_when>
    <thetext>Committed r257681: &lt;https://trac.webkit.org/changeset/257681&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1624240</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-02-29 00:05:13 -0800</bug_when>
    <thetext>&lt;rdar://problem/59915238&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1624612</commentid>
    <comment_count>6</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-03-02 10:53:45 -0800</bug_when>
    <thetext>Committed r257719: &lt;https://trac.webkit.org/changeset/257719&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392049</attachid>
            <date>2020-02-28 22:18:54 -0800</date>
            <delta_ts>2020-02-28 23:51:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208404-20200228221853.patch</filename>
            <type>text/plain</type>
            <size>42006</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3NjY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NWM5ODRjZGI5NDYwM2ZhYWVhODgxYWZhOGMzM2E4M2QwNWY5NzU2Li5mNDQ1MzdkZTg4YjkwZjNl
ZThjODVlZjY5M2Q4YjcyOWE5MTJiOGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4MSBAQAorMjAyMC0wMi0yOCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIEJ1aWx0aW5OYW1lcycgSGFzaE1hcCBzaG91bGQgYmUgc21hbGwK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODQwNAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggbWFrZXMgcHVibGljLXRvLXByaXZhdGUtbmFtZS1tYXAgZnJvbSBIYXNoTWFwPFJlZlB0cjxV
bmlxdWVkU3RyaW5nSW1wbD4sIFN5bWJvbEltcGwqPiB0byBIYXNoU2V0PFN0cmluZz4gdG8gc2F2
ZSBoYWxmIG9mIG1lbW9yeS4KKyAgICAgICAgVGhlIGtleSBpcyB0aGF0IHByaXZhdGUgbmFtZXMg
aGF2ZSB0aGUgc2FtZSBzdHJpbmcgY29udGVudCB0byB0aGUgcHVibGljIG5hbWVzLiBXZSBjYW4g
anVzdCBxdWVyeSB3aXRoIHN0cmluZyBjb250ZW50IHRvIHRoZSBIYXNoU2V0IG9mCisgICAgICAg
IHByaXZhdGUgbmFtZXMsIGFuZCB3ZSBjYW4gZ2V0IHByaXZhdGUgbmFtZXMuCisKKyAgICAgICAg
VGhlIHByb2JsZW0gaXMgdGhhdCB3ZSBhbHNvIGhhdmUgYSBoYWNrIGluc2VydGluZyBzdHJpbmcg
PC0+IG5vbi1wcml2YXRlIHdlbGwta25vd24gU3ltYm9sIG1hcHBpbmdzIGludG8gdGhpcyB0YWJs
ZS4gVGhlc2Ugc3ltYm9scyBkbyBub3QgaGF2ZQorICAgICAgICB0aGUgc2FtZSBjb250ZW50IHRv
IHRoZSBwdWJsaWMgc3RyaW5nLiBTbyB0aGUgYWJvdmUgYXNzdW1wdGlvbiBpcyBicm9rZW4uCisK
KyAgICAgICAgVG8gbWFrZSB0aGUgYWJvdmUgYXNzdW1wdGlvbiB2YWxpZCwgd2UgaGF2ZSBhIHNl
cGFyYXRlIHNtYWxsIEhhc2hNYXAgd2hpY2ggaG9sZHMgc3RyaW5nIDwtPiBub24tcHJpdmF0ZSB3
ZWxsLWtub3duIFN5bWJvbCBtYXBwaW5ncy4gU2luY2UgIyBvZgorICAgICAgICB3ZWxsLWtub3du
IFN5bWJvbHMgYXJlIG9ubHkgMTMsIHRoaXMgbmV3IEhhc2hNYXAgaXMgdGFraW5nIGF0IG1vc3Qg
NTEyQiBmb3IgZW50cmllcywgd2hpY2ggaXMgbXVjaCBzbWFsbGVyIGNvbXBhcmVkIHRvIHRoZSBz
YXZlZCBtZW1vcnkgYnkKKyAgICAgICAgY29udmVydGluZyBIYXNoTWFwIHRvIEhhc2hTZXQgZm9y
IHByaXZhdGUgbmFtZXMgKDMyS0IpLgorCisgICAgICAgIFRvIGFsbG93IGl0LCB3ZSBpbnRyb2R1
Y2UgbmV3IHdlbGwta25vd24gU3ltYm9sIGlkZW50aWZpZXIgc3ludGF4IHRvIGJ1aWx0aW4gSlMs
IHdoaWNoIGlzICJAQGl0ZXJhdG9yIiBmb3JtYXQuIElmIHRoZXJlIGlzIHR3byAiQCIsIHdlIHBh
cnNlIHRoaXMKKyAgICAgICAgaWRlbnRpZmllciBhcyBhIHdlbGwta25vd24gU3ltYm9sLgorCisg
ICAgICAgICogYnVpbHRpbnMvQXJyYXlDb25zdHJ1Y3Rvci5qczoKKyAgICAgICAgKGZyb20ud3Jh
cHBlci5pdGVyYXRvcik6CisgICAgICAgIChmcm9tKToKKyAgICAgICAgKGZyb20ud3JhcHBlci5p
dGVyYXRvclN5bWJvbCk6IERlbGV0ZWQuCisgICAgICAgICogYnVpbHRpbnMvQXJyYXlQcm90b3R5
cGUuanM6CisgICAgICAgIChnbG9iYWxQcml2YXRlLmNvbmNhdFNsb3dQYXRoKToKKyAgICAgICAg
KGNvbmNhdCk6CisgICAgICAgICogYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmNwcDoKKyAgICAgICAg
KEpTQzo6QnVpbHRpbk5hbWVzOjpCdWlsdGluTmFtZXMpOgorICAgICAgICAoSlNDOjpDaGFyQnVm
ZmVyU2VhY2hlcjo6aGFzaCk6CisgICAgICAgIChKU0M6OkNoYXJCdWZmZXJTZWFjaGVyOjplcXVh
bCk6CisgICAgICAgIChKU0M6Omxvb2tVcFByaXZhdGVOYW1lSW1wbCk6CisgICAgICAgIChKU0M6
Omxvb2tVcFdlbGxLbm93blN5bWJvbEltcGwpOgorICAgICAgICAoSlNDOjpCdWlsdGluTmFtZXM6
Omxvb2tVcFByaXZhdGVOYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QnVpbHRpbk5hbWVzOjps
b29rVXBXZWxsS25vd25TeW1ib2wgY29uc3QpOgorICAgICAgICAqIGJ1aWx0aW5zL0J1aWx0aW5O
YW1lcy5oOgorICAgICAgICAoSlNDOjpCdWlsdGluTmFtZXM6Omxvb2tVcFByaXZhdGVOYW1lIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6QnVpbHRpbk5hbWVzOjpsb29rVXBXZWxsS25vd25TeW1ib2wg
Y29uc3QpOgorICAgICAgICAoSlNDOjpCdWlsdGluTmFtZXM6OmNoZWNrUHVibGljVG9Qcml2YXRl
TWFwQ29uc2lzdGVuY3kpOgorICAgICAgICAoSlNDOjpCdWlsdGluTmFtZXM6OmFwcGVuZEV4dGVy
bmFsTmFtZSk6CisgICAgICAgIChKU0M6OkJ1aWx0aW5OYW1lczo6Z2V0UHVibGljTmFtZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogYnVpbHRpbnMvR2xvYmFsT3BlcmF0aW9ucy5qczoKKyAg
ICAgICAgKGdsb2JhbFByaXZhdGUuc3BlY2llc0NvbnN0cnVjdG9yKToKKyAgICAgICAgKiBidWls
dGlucy9JdGVyYXRvckhlbHBlcnMuanM6CisgICAgICAgIChwZXJmb3JtSXRlcmF0aW9uKToKKyAg
ICAgICAgKiBidWlsdGlucy9TdHJpbmdQcm90b3R5cGUuanM6CisgICAgICAgIChtYXRjaCk6Cisg
ICAgICAgIChtYXRjaEFsbCk6CisgICAgICAgIChpbnRyaW5zaWMuU3RyaW5nUHJvdG90eXBlUmVw
bGFjZUludHJpbnNpYy5yZXBsYWNlKToKKyAgICAgICAgKHJlcGxhY2VBbGwpOgorICAgICAgICAo
c2VhcmNoKToKKyAgICAgICAgKHNwbGl0KToKKyAgICAgICAgKiBidWlsdGlucy9UeXBlZEFycmF5
Q29uc3RydWN0b3IuanM6CisgICAgICAgIChmcm9tLndyYXBwZXIuaXRlcmF0b3IpOgorICAgICAg
ICAoZnJvbSk6CisgICAgICAgIChmcm9tLndyYXBwZXIuaXRlcmF0b3JTeW1ib2wpOiBEZWxldGVk
LgorICAgICAgICAqIGJ1aWx0aW5zL1R5cGVkQXJyYXlQcm90b3R5cGUuanM6CisgICAgICAgIChn
bG9iYWxQcml2YXRlLnR5cGVkQXJyYXlTcGVjaWVzQ29uc3RydWN0b3IpOgorICAgICAgICAobWFw
KToKKyAgICAgICAgKGZpbHRlcik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdl
bi5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW50cmluc2ljTm9kZTo6ZW1pdF9pbnRyaW5z
aWNfZ2V0QnlJZERpcmVjdFByaXZhdGUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUludHJpbnNp
Y05vZGU6OmVtaXRfaW50cmluc2ljX3B1dEJ5SWREaXJlY3RQcml2YXRlKToKKyAgICAgICAgKiBw
YXJzZXIvTGV4ZXIuY3BwOgorICAgICAgICAoSlNDOjpMZXhlcjxMQ2hhcj46OnBhcnNlSWRlbnRp
Zmllcik6CisgICAgICAgIChKU0M6OkxleGVyPFVDaGFyPjo6cGFyc2VJZGVudGlmaWVyKToKKyAg
ICAgICAgKiBydW50aW1lL0NhY2hlZFR5cGVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVkVW5p
cXVlZFN0cmluZ0ltcGxCYXNlOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRVbmlxdWVk
U3RyaW5nSW1wbEJhc2U6OmRlY29kZSBjb25zdCk6CisgICAgICAgICogcnVudGltZS9Db21tb25J
ZGVudGlmaWVycy5jcHA6CisgICAgICAgIChKU0M6OkNvbW1vbklkZW50aWZpZXJzOjpDb21tb25J
ZGVudGlmaWVycyk6CisgICAgICAgIChKU0M6OkNvbW1vbklkZW50aWZpZXJzOjpsb29rVXBQcml2
YXRlTmFtZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvbW1vbklkZW50aWZpZXJz
OjpnZXRQdWJsaWNOYW1lIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0NvbW1v
bklkZW50aWZpZXJzLmg6CisgICAgICAgICogdG9vbHMvSlNEb2xsYXJWTS5jcHA6CisgICAgICAg
IChKU0M6OmZ1bmN0aW9uR2V0UHJpdmF0ZVByb3BlcnR5KToKKwogMjAyMC0wMi0yOCAgU2FhbSBC
YXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBDbGVhbiB1cCBjb2RlIHdpdGgg
aG93IHdlIGNob29zZSBHaWdhY2FnZSBzaXplcyBhbmQgd2hldGhlciBvciBub3QgdG8gdXNlIFdh
c20gZmFzdCBtZW1vcnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNl
L1dURi9DaGFuZ2VMb2cKaW5kZXggM2EzYTE4NzZmZjRkMWExZTQ1YTM1NWJkMzNkZDg1NDhhMzM2
YWY3ZS4uM2ZiODNhNjljZDA4OWVkNTc1ZDJmY2EzODA5Y2MyZjdkMzRhNmJlOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNSBAQAorMjAyMC0wMi0yOCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIEJ1aWx0aW5OYW1lcycgSGFzaE1hcCBzaG91bGQgYmUgc21hbGwK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODQwNAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL3Rl
eHQvQXRvbVN0cmluZ0ltcGwuY3BwOgorICAgICAgICAoV1RGOjpIYXNoVHJhbnNsYXRvckNoYXJC
dWZmZXI6Okhhc2hUcmFuc2xhdG9yQ2hhckJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgICogd3Rm
L3RleHQvU3RyaW5nSW1wbC5oOgorICAgICAgICAoV1RGOjpIYXNoVHJhbnNsYXRvckNoYXJCdWZm
ZXI6Okhhc2hUcmFuc2xhdG9yQ2hhckJ1ZmZlcik6CisKIDIwMjAtMDItMjcgIEJhc3VrZSBTdXp1
a2kgIDxiYXN1a2Uuc3V6dWtpQHNvbnkuY29tPgogCiAgICAgICAgIFtXaW5DYWlyb10gRml4IFJl
bW90ZUluc3BlY3RvciByZWNvbm5lY3QgaXNzdWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9idWlsdGlucy9BcnJheUNvbnN0cnVjdG9yLmpzIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J1aWx0aW5zL0FycmF5Q29uc3RydWN0b3IuanMKaW5kZXggYTk2YTAwY2VkOTg1YTRlNGZl
NjNhMDIxODlmZjIwOGQ2NTRiMWFmMy4uODg3N2ViZjlhMzA1ODBmY2E2NDQ1MzUwMzlmZjJlNTVh
NjJjMzg2NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0FycmF5
Q29uc3RydWN0b3IuanMKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0FycmF5
Q29uc3RydWN0b3IuanMKQEAgLTU0LDcgKzU0LDcgQEAgZnVuY3Rpb24gZnJvbShpdGVtcyAvKiwg
bWFwRm4sIHRoaXNBcmcgKi8pCiAKICAgICB2YXIgYXJyYXlMaWtlID0gQHRvT2JqZWN0KGl0ZW1z
LCAiQXJyYXkuZnJvbSByZXF1aXJlcyBhbiBhcnJheS1saWtlIG9iamVjdCAtIG5vdCBudWxsIG9y
IHVuZGVmaW5lZCIpOwogCi0gICAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gaXRlbXMuQGl0ZXJhdG9y
U3ltYm9sOworICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZW1zLkBAaXRlcmF0b3I7CiAgICAg
aWYgKGl0ZXJhdG9yTWV0aG9kICE9IG51bGwpIHsKICAgICAgICAgaWYgKHR5cGVvZiBpdGVyYXRv
ck1ldGhvZCAhPT0gImZ1bmN0aW9uIikKICAgICAgICAgICAgIEB0aHJvd1R5cGVFcnJvcigiQXJy
YXkuZnJvbSByZXF1aXJlcyB0aGF0IHRoZSBwcm9wZXJ0eSBvZiB0aGUgZmlyc3QgYXJndW1lbnQs
IGl0ZW1zW1N5bWJvbC5pdGVyYXRvcl0sIHdoZW4gZXhpc3RzLCBiZSBhIGZ1bmN0aW9uIik7CkBA
IC02OCw3ICs2OCw3IEBAIGZ1bmN0aW9uIGZyb20oaXRlbXMgLyosIG1hcEZuLCB0aGlzQXJnICov
KQogICAgICAgICAvLyBpdCBjb3VsZCBiZSBvYnNlcnZhYmxlIGlmIHRoZSB1c2VyIGRlZmluZXMg
YSBnZXR0ZXIgZm9yIEBAaXRlcmF0b3IuCiAgICAgICAgIC8vIFRvIGF2b2lkIHRoaXMgc2l0dWF0
aW9uLCB3ZSBkZWZpbmUgYSB3cmFwcGVyIG9iamVjdCB0aGF0IEBAaXRlcmF0b3IganVzdCByZXR1
cm5zIGEgZ2l2ZW4gaXRlcmF0b3IuCiAgICAgICAgIHZhciB3cmFwcGVyID0ge30KLSAgICAgICAg
d3JhcHBlci5AaXRlcmF0b3JTeW1ib2wgPSBmdW5jdGlvbigpIHsgcmV0dXJuIGl0ZXJhdG9yOyB9
OworICAgICAgICB3cmFwcGVyLkBAaXRlcmF0b3IgPSBmdW5jdGlvbigpIHsgcmV0dXJuIGl0ZXJh
dG9yOyB9OwogCiAgICAgICAgIGZvciAodmFyIHZhbHVlIG9mIHdyYXBwZXIpIHsKICAgICAgICAg
ICAgIGlmIChtYXBGbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlu
cy9BcnJheVByb3RvdHlwZS5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9BcnJh
eVByb3RvdHlwZS5qcwppbmRleCA0OGY2YzNlODkzOTQ3YmQ3YTRjN2ExZGI4NWMyYjk5ZWE5YjBj
NTA2Li41MGQwMDUxOTg2ZDEwMmExYjc1YmM2NmJhODQ2OGQ2ZWI1ODUwYzczIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQXJyYXlQcm90b3R5cGUuanMKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0FycmF5UHJvdG90eXBlLmpzCkBAIC01NTUs
NyArNTU1LDcgQEAgZnVuY3Rpb24gY29uY2F0U2xvd1BhdGgoKQogICAgIHZhciBhcmdJbmRleCA9
IDA7CiAKICAgICBkbyB7Ci0gICAgICAgIHZhciBzcHJlYWRhYmxlID0gQGlzT2JqZWN0KGN1cnJl
bnRFbGVtZW50KSAmJiBjdXJyZW50RWxlbWVudC5AaXNDb25jYXRTcHJlYWRhYmxlU3ltYm9sOwor
ICAgICAgICB2YXIgc3ByZWFkYWJsZSA9IEBpc09iamVjdChjdXJyZW50RWxlbWVudCkgJiYgY3Vy
cmVudEVsZW1lbnQuQEBpc0NvbmNhdFNwcmVhZGFibGU7CiAgICAgICAgIGlmICgoc3ByZWFkYWJs
ZSA9PT0gQHVuZGVmaW5lZCAmJiBAaXNBcnJheShjdXJyZW50RWxlbWVudCkpIHx8IHNwcmVhZGFi
bGUpIHsKICAgICAgICAgICAgIHZhciBsZW5ndGggPSBAdG9MZW5ndGgoY3VycmVudEVsZW1lbnQu
bGVuZ3RoKTsKICAgICAgICAgICAgIGlmIChsZW5ndGggKyByZXN1bHRJbmRleCA+IEBNQVhfQVJS
QVlfSU5ERVgpCkBAIC01ODgsOCArNTg4LDggQEAgZnVuY3Rpb24gY29uY2F0KGZpcnN0KQogCiAg
ICAgaWYgKEBhcmd1bWVudENvdW50KCkgPT09IDEKICAgICAgICAgJiYgQGlzSlNBcnJheSh0aGlz
KQotICAgICAgICAmJiB0aGlzLkBpc0NvbmNhdFNwcmVhZGFibGVTeW1ib2wgPT09IEB1bmRlZmlu
ZWQKLSAgICAgICAgJiYgKCFAaXNPYmplY3QoZmlyc3QpIHx8ICghQGlzUHJveHlPYmplY3QoZmly
c3QpICYmIGZpcnN0LkBpc0NvbmNhdFNwcmVhZGFibGVTeW1ib2wgPT09IEB1bmRlZmluZWQpKSkg
eworICAgICAgICAmJiB0aGlzLkBAaXNDb25jYXRTcHJlYWRhYmxlID09PSBAdW5kZWZpbmVkCisg
ICAgICAgICYmICghQGlzT2JqZWN0KGZpcnN0KSB8fCAoIUBpc1Byb3h5T2JqZWN0KGZpcnN0KSAm
JiBmaXJzdC5AQGlzQ29uY2F0U3ByZWFkYWJsZSA9PT0gQHVuZGVmaW5lZCkpKSB7CiAKICAgICAg
ICAgdmFyIHJlc3VsdCA9IEBjb25jYXRNZW1jcHkodGhpcywgZmlyc3QpOwogICAgICAgICBpZiAo
cmVzdWx0ICE9PSBudWxsKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0
aW5zL0J1aWx0aW5OYW1lcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVp
bHRpbk5hbWVzLmNwcAppbmRleCBkOGZmZWU5OTNlZjFhYzFlYjBiMWMwYzZkYjM5YmUxMWNlM2I2
ZjAyLi4yM2YxNTc1ZGM5MGFjMTg0ZTIwMDFiZTZmNjVkZmRkNWJlMDZhNzA2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmNwcApAQCAtNTIsMjMg
KzUyLDIxIEBAIFN5bWJvbEltcGw6OlN0YXRpY1N5bWJvbEltcGwgcG9seVByb3RvUHJpdmF0ZU5h
bWUgeyAiUG9seVByb3RvIiwgU3ltYm9sSW1wbDo6c19mCiB9IC8vIG5hbWVzcGFjZSBTeW1ib2xz
CiAKICNkZWZpbmUgSU5JVElBTElaRV9CVUlMVElOX05BTUVTX0lOX0pTQyhuYW1lKSAsIG1fIyNu
YW1lKEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgI25hbWUpKQotI2RlZmluZSBJTklU
SUFMSVpFX0JVSUxUSU5fU1lNQk9MU19JTl9KU0MobmFtZSkgLCBtXyMjbmFtZSMjU3ltYm9sKEpT
Qzo6SWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgJnN0YXRpY19jYXN0PFN5bWJvbEltcGwmPihKU0M6
OlN5bWJvbHM6Om5hbWUjI1N5bWJvbCkpKSwgbV8jI25hbWUjI1N5bWJvbFByaXZhdGVJZGVudGlm
aWVyKEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgI25hbWUgIlN5bWJvbCIpKQorI2Rl
ZmluZSBJTklUSUFMSVpFX0JVSUxUSU5fU1lNQk9MU19JTl9KU0MobmFtZSkgXAorICAgICwgbV8j
I25hbWUjI1N5bWJvbChKU0M6OklkZW50aWZpZXI6OmZyb21VaWQodm0sICZzdGF0aWNfY2FzdDxT
eW1ib2xJbXBsJj4oSlNDOjpTeW1ib2xzOjpuYW1lIyNTeW1ib2wpKSkgXAorICAgICwgbV8jI25h
bWUjI1N5bWJvbFByaXZhdGVJZGVudGlmaWVyKEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgI25hbWUpKQogCiAjZGVmaW5lIElOSVRJQUxJWkVfUFVCTElDX1RPX1BSSVZBVEVfRU5UUlko
bmFtZSkgXAogICAgIGRvIHsgXAogICAgICAgICBTeW1ib2xJbXBsKiBzeW1ib2wgPSAmc3RhdGlj
X2Nhc3Q8U3ltYm9sSW1wbCY+KEpTQzo6U3ltYm9sczo6bmFtZSMjUHJpdmF0ZU5hbWUpOyBcCi0g
ICAgICAgIGNoZWNrUHVibGljVG9Qcml2YXRlTWFwQ29uc2lzdGVuY3kobV8jI25hbWUuaW1wbCgp
LCBzeW1ib2wpOyBcCi0gICAgICAgIG1fcHVibGljVG9Qcml2YXRlTWFwLmFkZChtXyMjbmFtZS5p
bXBsKCksIHN5bWJvbCk7IFwKKyAgICAgICAgY2hlY2tQdWJsaWNUb1ByaXZhdGVNYXBDb25zaXN0
ZW5jeShzeW1ib2wpOyBcCisgICAgICAgIG1fcHJpdmF0ZU5hbWVTZXQuYWRkKHN5bWJvbCk7IFwK
ICAgICB9IHdoaWxlICgwKTsKIAotLy8gV2UgY29tbWFuZGVlciB0aGUgcHVibGljVG9Qcml2YXRl
TWFwIHRvIGFsbG93IHVzIHRvIGNvbnZlcnQgcHJpdmF0ZSBzeW1ib2wgbmFtZXMgaW50byB0aGUg
YXBwcm9wcmlhdGUgc3ltYm9sLgotLy8gZS5nLiBAaXRlcmF0b3JTeW1ib2wgcG9pbnRzIHRvIFN5
bWJvbC5pdGVyYXRvciBpbiB0aGlzIG1hcCByYXRoZXIgdGhhbiB0byBhIGFuIGFjdHVhbCBwcml2
YXRlIG5hbWUuCi0vLyBGSVhNRTogVGhpcyBpcyBhIHdlaXJkIGhhY2sgYW5kIHdlIHNob3VsZG4n
dCBuZWVkIHRvIGRvIHRoaXMuCiAjZGVmaW5lIElOSVRJQUxJWkVfU1lNQk9MX1BVQkxJQ19UT19Q
UklWQVRFX0VOVFJZKG5hbWUpIFwKICAgICBkbyB7IFwKICAgICAgICAgU3ltYm9sSW1wbCogc3lt
Ym9sID0gc3RhdGljX2Nhc3Q8U3ltYm9sSW1wbCo+KG1fIyNuYW1lIyNTeW1ib2wuaW1wbCgpKTsg
XAotICAgICAgICBjaGVja1B1YmxpY1RvUHJpdmF0ZU1hcENvbnNpc3RlbmN5KG1fIyNuYW1lIyNT
eW1ib2xQcml2YXRlSWRlbnRpZmllci5pbXBsKCksIHN5bWJvbCk7IFwKLSAgICAgICAgbV9wdWJs
aWNUb1ByaXZhdGVNYXAuYWRkKG1fIyNuYW1lIyNTeW1ib2xQcml2YXRlSWRlbnRpZmllci5pbXBs
KCksIHN5bWJvbCk7IFwKKyAgICAgICAgbV93ZWxsS25vd25TeW1ib2xzTWFwLmFkZChtXyMjbmFt
ZSMjU3ltYm9sUHJpdmF0ZUlkZW50aWZpZXIuaW1wbCgpLCBzeW1ib2wpOyBcCiAgICAgfSB3aGls
ZSAoMCk7CiAKIC8vIFdlIHRyZWF0IHRoZSBkb2xsYXJWTSBuYW1lIGFzIGEgc3BlY2lhbCBjYXNl
IGJlbG93IGZvciAkdm0gKGJlY2F1c2UgQ29tbW9uSWRlbnRpZmllcnMgZG9lcyBub3QKQEAgLTg1
LDcgKzgzLDcgQEAgQnVpbHRpbk5hbWVzOjpCdWlsdGluTmFtZXMoVk0mIHZtLCBDb21tb25JZGVu
dGlmaWVycyogY29tbW9uSWRlbnRpZmllcnMpCiAgICAgSlNDX0ZPUkVBQ0hfQlVJTFRJTl9GVU5D
VElPTl9OQU1FKElOSVRJQUxJWkVfUFVCTElDX1RPX1BSSVZBVEVfRU5UUlkpCiAgICAgSlNDX0NP
TU1PTl9QUklWQVRFX0lERU5USUZJRVJTX0VBQ0hfUFJPUEVSVFlfTkFNRShJTklUSUFMSVpFX1BV
QkxJQ19UT19QUklWQVRFX0VOVFJZKQogICAgIEpTQ19DT01NT05fUFJJVkFURV9JREVOVElGSUVS
U19FQUNIX1dFTExfS05PV05fU1lNQk9MKElOSVRJQUxJWkVfU1lNQk9MX1BVQkxJQ19UT19QUklW
QVRFX0VOVFJZKQotICAgIG1fcHVibGljVG9Qcml2YXRlTWFwLmFkZChtX2RvbGxhclZNTmFtZS5p
bXBsKCksIHN0YXRpY19jYXN0PFN5bWJvbEltcGwqPihtX2RvbGxhclZNUHJpdmF0ZU5hbWUuaW1w
bCgpKSk7CisgICAgbV9wcml2YXRlTmFtZVNldC5hZGQoc3RhdGljX2Nhc3Q8U3ltYm9sSW1wbCo+
KG1fZG9sbGFyVk1Qcml2YXRlTmFtZS5pbXBsKCkpKTsKIH0KIAogI3VuZGVmIElOSVRJQUxJWkVf
QlVJTFRJTl9OQU1FU19JTl9KU0MKQEAgLTkzLDYgKzkxLDkwIEBAIEJ1aWx0aW5OYW1lczo6QnVp
bHRpbk5hbWVzKFZNJiB2bSwgQ29tbW9uSWRlbnRpZmllcnMqIGNvbW1vbklkZW50aWZpZXJzKQog
I3VuZGVmIElOSVRJQUxJWkVfUFVCTElDX1RPX1BSSVZBVEVfRU5UUlkKICN1bmRlZiBJTklUSUFM
SVpFX1NZTUJPTF9QVUJMSUNfVE9fUFJJVkFURV9FTlRSWQogCisKK3VzaW5nIExDaGFyQnVmZmVy
ID0gV1RGOjpIYXNoVHJhbnNsYXRvckNoYXJCdWZmZXI8TENoYXI+OwordXNpbmcgVUNoYXJCdWZm
ZXIgPSBXVEY6Okhhc2hUcmFuc2xhdG9yQ2hhckJ1ZmZlcjxVQ2hhcj47CisKK3RlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdHJ1Y3QgQ2hhckJ1ZmZlclNlYWNoZXIgeworICAgIHVz
aW5nIEJ1ZmZlciA9IFdURjo6SGFzaFRyYW5zbGF0b3JDaGFyQnVmZmVyPENoYXJhY3RlclR5cGU+
OworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEJ1ZmZlciYgYnVmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGJ1Zi5oYXNoOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGVxdWFsKGNv
bnN0IFN0cmluZyYgc3RyLCBjb25zdCBCdWZmZXImIGJ1ZikKKyAgICB7CisgICAgICAgIHJldHVy
biBXVEY6OmVxdWFsKHN0ci5pbXBsKCksIGJ1Zi5jaGFyYWN0ZXJzLCBidWYubGVuZ3RoKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorc3RhdGljIFByaXZh
dGVTeW1ib2xJbXBsKiBsb29rVXBQcml2YXRlTmFtZUltcGwoY29uc3QgSGFzaFNldDxTdHJpbmc+
JiBzZXQsIGNvbnN0IFdURjo6SGFzaFRyYW5zbGF0b3JDaGFyQnVmZmVyPENoYXJhY3RlclR5cGU+
JiBidWZmZXIpCit7CisgICAgYXV0byBpdGVyYXRvciA9IHNldC5maW5kPENoYXJCdWZmZXJTZWFj
aGVyPENoYXJhY3RlclR5cGU+PihidWZmZXIpOworICAgIGlmIChpdGVyYXRvciA9PSBzZXQuZW5k
KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIFN0cmluZ0ltcGwqIGltcGwgPSBpdGVy
YXRvci0+aW1wbCgpOworICAgIEFTU0VSVChpbXBsLT5pc1N5bWJvbCgpKTsKKyAgICBTeW1ib2xJ
bXBsKiBzeW1ib2wgPSBzdGF0aWNfY2FzdDxTeW1ib2xJbXBsKj4oaW1wbCk7CisgICAgQVNTRVJU
KHN5bWJvbC0+aXNQcml2YXRlKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxQcml2YXRlU3lt
Ym9sSW1wbCo+KHN5bWJvbCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
CitzdGF0aWMgU3ltYm9sSW1wbCogbG9va1VwV2VsbEtub3duU3ltYm9sSW1wbChjb25zdCBIYXNo
TWFwPFN0cmluZywgU3ltYm9sSW1wbCo+JiBtYXAsIGNvbnN0IFdURjo6SGFzaFRyYW5zbGF0b3JD
aGFyQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIpCit7CisgICAgYXV0byBpdGVyYXRvciA9
IG1hcC5maW5kPENoYXJCdWZmZXJTZWFjaGVyPENoYXJhY3RlclR5cGU+PihidWZmZXIpOworICAg
IGlmIChpdGVyYXRvciA9PSBtYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IHJldHVybiBpdGVyYXRvci0+dmFsdWU7Cit9CisKK1ByaXZhdGVTeW1ib2xJbXBsKiBCdWlsdGlu
TmFtZXM6Omxvb2tVcFByaXZhdGVOYW1lKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25l
ZCBsZW5ndGgpIGNvbnN0Cit7CisgICAgTENoYXJCdWZmZXIgYnVmZmVyIHsgY2hhcmFjdGVycywg
bGVuZ3RoIH07CisgICAgcmV0dXJuIGxvb2tVcFByaXZhdGVOYW1lSW1wbChtX3ByaXZhdGVOYW1l
U2V0LCBidWZmZXIpOworfQorCitQcml2YXRlU3ltYm9sSW1wbCogQnVpbHRpbk5hbWVzOjpsb29r
VXBQcml2YXRlTmFtZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKSBj
b25zdAoreworICAgIFVDaGFyQnVmZmVyIGJ1ZmZlciB7IGNoYXJhY3RlcnMsIGxlbmd0aCB9Owor
ICAgIHJldHVybiBsb29rVXBQcml2YXRlTmFtZUltcGwobV9wcml2YXRlTmFtZVNldCwgYnVmZmVy
KTsKK30KKworUHJpdmF0ZVN5bWJvbEltcGwqIEJ1aWx0aW5OYW1lczo6bG9va1VwUHJpdmF0ZU5h
bWUoY29uc3QgU3RyaW5nJiBzdHJpbmcpIGNvbnN0Cit7CisgICAgaWYgKHN0cmluZy5pczhCaXQo
KSkgeworICAgICAgICBMQ2hhckJ1ZmZlciBidWZmZXIgeyBzdHJpbmcuY2hhcmFjdGVyczgoKSwg
c3RyaW5nLmxlbmd0aCgpLCBzdHJpbmcuaGFzaCgpIH07CisgICAgICAgIHJldHVybiBsb29rVXBQ
cml2YXRlTmFtZUltcGwobV9wcml2YXRlTmFtZVNldCwgYnVmZmVyKTsKKyAgICB9CisgICAgVUNo
YXJCdWZmZXIgYnVmZmVyIHsgc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcubGVuZ3RoKCks
IHN0cmluZy5oYXNoKCkgfTsKKyAgICByZXR1cm4gbG9va1VwUHJpdmF0ZU5hbWVJbXBsKG1fcHJp
dmF0ZU5hbWVTZXQsIGJ1ZmZlcik7Cit9CisKK1N5bWJvbEltcGwqIEJ1aWx0aW5OYW1lczo6bG9v
a1VwV2VsbEtub3duU3ltYm9sKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5n
dGgpIGNvbnN0Cit7CisgICAgTENoYXJCdWZmZXIgYnVmZmVyIHsgY2hhcmFjdGVycywgbGVuZ3Ro
IH07CisgICAgcmV0dXJuIGxvb2tVcFdlbGxLbm93blN5bWJvbEltcGwobV93ZWxsS25vd25TeW1i
b2xzTWFwLCBidWZmZXIpOworfQorCitTeW1ib2xJbXBsKiBCdWlsdGluTmFtZXM6Omxvb2tVcFdl
bGxLbm93blN5bWJvbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKSBj
b25zdAoreworICAgIFVDaGFyQnVmZmVyIGJ1ZmZlciB7IGNoYXJhY3RlcnMsIGxlbmd0aCB9Owor
ICAgIHJldHVybiBsb29rVXBXZWxsS25vd25TeW1ib2xJbXBsKG1fd2VsbEtub3duU3ltYm9sc01h
cCwgYnVmZmVyKTsKK30KKworU3ltYm9sSW1wbCogQnVpbHRpbk5hbWVzOjpsb29rVXBXZWxsS25v
d25TeW1ib2woY29uc3QgU3RyaW5nJiBzdHJpbmcpIGNvbnN0Cit7CisgICAgaWYgKHN0cmluZy5p
czhCaXQoKSkgeworICAgICAgICBMQ2hhckJ1ZmZlciBidWZmZXIgeyBzdHJpbmcuY2hhcmFjdGVy
czgoKSwgc3RyaW5nLmxlbmd0aCgpLCBzdHJpbmcuaGFzaCgpIH07CisgICAgICAgIHJldHVybiBs
b29rVXBXZWxsS25vd25TeW1ib2xJbXBsKG1fd2VsbEtub3duU3ltYm9sc01hcCwgYnVmZmVyKTsK
KyAgICB9CisgICAgVUNoYXJCdWZmZXIgYnVmZmVyIHsgc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBz
dHJpbmcubGVuZ3RoKCksIHN0cmluZy5oYXNoKCkgfTsKKyAgICByZXR1cm4gbG9va1VwV2VsbEtu
b3duU3ltYm9sSW1wbChtX3dlbGxLbm93blN5bWJvbHNNYXAsIGJ1ZmZlcik7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCiAjaWYgQ09NUElMRVIoTVNWQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAppbmRleCAxMDgzMDdmMzY1ZDg5OThhNTEyNDAw
YjY3ZTZmYjAxYzE0MDA3OGMxLi44YjM3MTAwNWNkMDMwNzMzNjk4NzNkOWE3MDFmN2ExOGI2ODJl
YWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5h
bWVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5o
CkBAIC0xODksOCArMTg5LDE1IEBAIGNsYXNzIEJ1aWx0aW5OYW1lcyB7CiBwdWJsaWM6CiAgICAg
QnVpbHRpbk5hbWVzKFZNJiwgQ29tbW9uSWRlbnRpZmllcnMqKTsKIAotICAgIFN5bWJvbEltcGwq
IGxvb2tVcFByaXZhdGVOYW1lKGNvbnN0IElkZW50aWZpZXImKSBjb25zdDsKLSAgICBJZGVudGlm
aWVyIGdldFB1YmxpY05hbWUoVk0mLCBTeW1ib2xJbXBsKikgY29uc3Q7CisgICAgUHJpdmF0ZVN5
bWJvbEltcGwqIGxvb2tVcFByaXZhdGVOYW1lKGNvbnN0IElkZW50aWZpZXImKSBjb25zdDsKKyAg
ICBQcml2YXRlU3ltYm9sSW1wbCogbG9va1VwUHJpdmF0ZU5hbWUoY29uc3QgU3RyaW5nJikgY29u
c3Q7CisgICAgUHJpdmF0ZVN5bWJvbEltcGwqIGxvb2tVcFByaXZhdGVOYW1lKGNvbnN0IExDaGFy
KiwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKKyAgICBQcml2YXRlU3ltYm9sSW1wbCogbG9va1Vw
UHJpdmF0ZU5hbWUoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0OworCisgICAg
U3ltYm9sSW1wbCogbG9va1VwV2VsbEtub3duU3ltYm9sKGNvbnN0IElkZW50aWZpZXImKSBjb25z
dDsKKyAgICBTeW1ib2xJbXBsKiBsb29rVXBXZWxsS25vd25TeW1ib2woY29uc3QgU3RyaW5nJikg
Y29uc3Q7CisgICAgU3ltYm9sSW1wbCogbG9va1VwV2VsbEtub3duU3ltYm9sKGNvbnN0IExDaGFy
KiwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKKyAgICBTeW1ib2xJbXBsKiBsb29rVXBXZWxsS25v
d25TeW1ib2woY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0OwogICAgIAogICAg
IHZvaWQgYXBwZW5kRXh0ZXJuYWxOYW1lKGNvbnN0IElkZW50aWZpZXImIHB1YmxpY05hbWUsIGNv
bnN0IElkZW50aWZpZXImIHByaXZhdGVOYW1lKTsKIApAQCAtMjAyLDcgKzIwOSw3IEBAIGNsYXNz
IEJ1aWx0aW5OYW1lcyB7CiAgICAgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwb2x5UHJvdG9OYW1l
KCkgY29uc3QgeyByZXR1cm4gbV9wb2x5UHJvdG9Qcml2YXRlTmFtZTsgfQogCiBwcml2YXRlOgot
ICAgIHZvaWQgY2hlY2tQdWJsaWNUb1ByaXZhdGVNYXBDb25zaXN0ZW5jeShVbmlxdWVkU3RyaW5n
SW1wbCogcHVibGljTmFtZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHByaXZhdGVOYW1lKTsKKyAgICB2
b2lkIGNoZWNrUHVibGljVG9Qcml2YXRlTWFwQ29uc2lzdGVuY3koVW5pcXVlZFN0cmluZ0ltcGwq
IHByaXZhdGVOYW1lKTsKIAogICAgIElkZW50aWZpZXIgbV9lbXB0eUlkZW50aWZpZXI7CiAgICAg
SlNDX0ZPUkVBQ0hfQlVJTFRJTl9GVU5DVElPTl9OQU1FKERFQ0xBUkVfQlVJTFRJTl9OQU1FU19J
Tl9KU0MpCkBAIC0yMTEsNTQgKzIxOCw0MCBAQCBjbGFzcyBCdWlsdGluTmFtZXMgewogICAgIGNv
bnN0IEpTQzo6SWRlbnRpZmllciBtX2RvbGxhclZNTmFtZTsKICAgICBjb25zdCBKU0M6OklkZW50
aWZpZXIgbV9kb2xsYXJWTVByaXZhdGVOYW1lOwogICAgIGNvbnN0IEpTQzo6SWRlbnRpZmllciBt
X3BvbHlQcm90b1ByaXZhdGVOYW1lOwotICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8VW5pcXVl
ZFN0cmluZ0ltcGw+LCBTeW1ib2xJbXBsKiwgSWRlbnRpZmllclJlcEhhc2g+IEJ1aWx0aW5OYW1l
c01hcDsKLSAgICBCdWlsdGluTmFtZXNNYXAgbV9wdWJsaWNUb1ByaXZhdGVNYXA7CisgICAgdXNp
bmcgUHJpdmF0ZU5hbWVTZXQgPSBIYXNoU2V0PFN0cmluZz47CisgICAgdXNpbmcgV2VsbEtub3du
U3ltYm9sTWFwID0gSGFzaE1hcDxTdHJpbmcsIFN5bWJvbEltcGwqPjsKKyAgICBQcml2YXRlTmFt
ZVNldCBtX3ByaXZhdGVOYW1lU2V0OworICAgIFdlbGxLbm93blN5bWJvbE1hcCBtX3dlbGxLbm93
blN5bWJvbHNNYXA7CiB9OwogCi1pbmxpbmUgU3ltYm9sSW1wbCogQnVpbHRpbk5hbWVzOjpsb29r
VXBQcml2YXRlTmFtZShjb25zdCBJZGVudGlmaWVyJiBpZGVudCkgY29uc3QKK2lubGluZSBQcml2
YXRlU3ltYm9sSW1wbCogQnVpbHRpbk5hbWVzOjpsb29rVXBQcml2YXRlTmFtZShjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCkgY29uc3QKIHsKLSAgICBhdXRvIGl0ZXIgPSBtX3B1YmxpY1RvUHJpdmF0
ZU1hcC5maW5kKGlkZW50LmltcGwoKSk7Ci0gICAgaWYgKGl0ZXIgIT0gbV9wdWJsaWNUb1ByaXZh
dGVNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdGVyLT52YWx1ZTsKLSAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICByZXR1cm4gbG9va1VwUHJpdmF0ZU5hbWUoaWRlbnQuaW1wbCgpKTsKIH0KIAot
aW5saW5lIElkZW50aWZpZXIgQnVpbHRpbk5hbWVzOjpnZXRQdWJsaWNOYW1lKFZNJiB2bSwgU3lt
Ym9sSW1wbCogc3ltYm9sKSBjb25zdAoraW5saW5lIFN5bWJvbEltcGwqIEJ1aWx0aW5OYW1lczo6
bG9va1VwV2VsbEtub3duU3ltYm9sKGNvbnN0IElkZW50aWZpZXImIGlkZW50KSBjb25zdAogewot
ICAgIGlmIChzeW1ib2wtPmlzUHJpdmF0ZSgpKQotICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgc3ltYm9sKTsKLSAgICAvLyBXZSBoYXZlIHNwZWNpYWwgaGFuZGxpbmcg
Zm9yIHdlbGwta25vd24gc3ltYm9scy4KLSAgICBBU1NFUlQoc3ltYm9sLT5zdGFydHNXaXRoKCJT
eW1ib2wuIikpOwotICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBtYWtlU3Ry
aW5nKFN0cmluZyhzeW1ib2wtPnN1YnN0cmluZyhzdHJsZW4oIlN5bWJvbC4iKSkpLCAiU3ltYm9s
IikpOworICAgIHJldHVybiBsb29rVXBXZWxsS25vd25TeW1ib2woaWRlbnQuaW1wbCgpKTsKIH0K
IAotaW5saW5lIHZvaWQgQnVpbHRpbk5hbWVzOjpjaGVja1B1YmxpY1RvUHJpdmF0ZU1hcENvbnNp
c3RlbmN5KFVuaXF1ZWRTdHJpbmdJbXBsKiBwdWJsaWNOYW1lLCBVbmlxdWVkU3RyaW5nSW1wbCog
cHJpdmF0ZU5hbWUpCitpbmxpbmUgdm9pZCBCdWlsdGluTmFtZXM6OmNoZWNrUHVibGljVG9Qcml2
YXRlTWFwQ29uc2lzdGVuY3koVW5pcXVlZFN0cmluZ0ltcGwqIHByaXZhdGVOYW1lKQogewogI2lm
bmRlZiBOREVCVUcKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IG1fcHVibGljVG9Qcml2YXRl
TWFwLmtleXMoKSkKLSAgICAgICAgQVNTRVJUKFN0cmluZyhwdWJsaWNOYW1lKSAhPSAqa2V5KTsK
LQorICAgIGZvciAoY29uc3QgYXV0byYga2V5IDogbV9wcml2YXRlTmFtZVNldCkKKyAgICAgICAg
QVNTRVJUKFN0cmluZyhwcml2YXRlTmFtZSkgIT0ga2V5KTsKICAgICBBU1NFUlQocHJpdmF0ZU5h
bWUtPmlzU3ltYm9sKCkpOwotICAgIFN5bWJvbEltcGwqIHN5bWJvbCA9IHN0YXRpY19jYXN0PFN5
bWJvbEltcGwqPihwcml2YXRlTmFtZSk7Ci0gICAgaWYgKHN5bWJvbC0+aXNQcml2YXRlKCkpIHsK
LSAgICAgICAgLy8gVGhpcyBndWFyYW50ZWVzIHRoYXQgd2UgY2FuIGdldCBwdWJsaWMgc3ltYm9s
cyBmcm9tIHByaXZhdGUgc3ltYm9scyBieSB1c2luZyBjb250ZW50IG9mIHByaXZhdGUgc3ltYm9s
cy4KLSAgICAgICAgQVNTRVJUKFN0cmluZyhzeW1ib2wpID09ICpwdWJsaWNOYW1lKTsKLSAgICB9
IGVsc2UgewotICAgICAgICAvLyBXZSBoYXZlIGEgaGFjayBpbiBtX3B1YmxpY1RvUHJpdmF0ZU1h
cDogYWRkaW5nIG5vbi1wcml2YXRlIFN5bWJvbCB3aXRoIHJlYWRhYmxlIG5hbWUgdG8gdXNlIGl0
Ci0gICAgICAgIC8vIGluIGJ1aWx0aW4gY29kZS4gVGhlIGV4YW1wbGUgaXMgQGl0ZXJhdG9yU3lt
Ym9sID0+IFN5bWJvbC5pdGVyYXRvciBtYXBwaW5nLiBUbyBhbGxvdyB0aGUgcmV2ZXJzZQotICAg
ICAgICAvLyB0cmFuc2Zvcm1hdGlvbiwgd2UgZW5zdXJlIHRoYXQgbm9uLXByaXZhdGUgc3ltYm9s
IG1hcHBpbmcgaGFzIHh4eFN5bWJvbCA9PiBTeW1ib2wueHh4LgotICAgICAgICBBU1NFUlQobWFr
ZVN0cmluZyhTdHJpbmcoc3ltYm9sKSwgIlN5bWJvbCIpID09IG1ha2VTdHJpbmcoIlN5bWJvbC4i
LCBTdHJpbmcocHVibGljTmFtZSkpKTsKLSAgICB9CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PFN5
bWJvbEltcGwqPihwcml2YXRlTmFtZSktPmlzUHJpdmF0ZSgpKTsKICNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKHB1YmxpY05hbWUpOwogICAgIFVOVVNFRF9QQVJBTShwcml2YXRlTmFtZSk7CiAjZW5k
aWYKIH0KIAogaW5saW5lIHZvaWQgQnVpbHRpbk5hbWVzOjphcHBlbmRFeHRlcm5hbE5hbWUoY29u
c3QgSWRlbnRpZmllciYgcHVibGljTmFtZSwgY29uc3QgSWRlbnRpZmllciYgcHJpdmF0ZU5hbWUp
CiB7Ci0gICAgY2hlY2tQdWJsaWNUb1ByaXZhdGVNYXBDb25zaXN0ZW5jeShwdWJsaWNOYW1lLmlt
cGwoKSwgcHJpdmF0ZU5hbWUuaW1wbCgpKTsKLSAgICBtX3B1YmxpY1RvUHJpdmF0ZU1hcC5hZGQo
cHVibGljTmFtZS5pbXBsKCksIHN0YXRpY19jYXN0PFN5bWJvbEltcGwqPihwcml2YXRlTmFtZS5p
bXBsKCkpKTsKKyAgICBVTlVTRURfUEFSQU0ocHVibGljTmFtZSk7CisgICAgQVNTRVJUKFN0cmlu
ZyhwdWJsaWNOYW1lLmltcGwoKSkgPT0gU3RyaW5nKHByaXZhdGVOYW1lLmltcGwoKSkpOworICAg
IGNoZWNrUHVibGljVG9Qcml2YXRlTWFwQ29uc2lzdGVuY3kocHJpdmF0ZU5hbWUuaW1wbCgpKTsK
KyAgICBtX3ByaXZhdGVOYW1lU2V0LmFkZChwcml2YXRlTmFtZS5pbXBsKCkpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlu
cy9HbG9iYWxPcGVyYXRpb25zLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0ds
b2JhbE9wZXJhdGlvbnMuanMKaW5kZXggNThjMTliMzgyODMyOGMzYmMzNTdmNWViNzk1MzU1NDI1
NzVkNTBiNy4uYTRmZjA4ZGNlODY3NTNlM2ZjMWVlMGJhOWQwMDhhMDcxMWU3OGUzMCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0dsb2JhbE9wZXJhdGlvbnMuanMK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0dsb2JhbE9wZXJhdGlvbnMuanMK
QEAgLTc2LDcgKzc2LDcgQEAgZnVuY3Rpb24gc3BlY2llc0NvbnN0cnVjdG9yKG9iaiwgZGVmYXVs
dENvbnN0cnVjdG9yKQogICAgICAgICByZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yOwogICAgIGlm
ICghQGlzT2JqZWN0KGNvbnN0cnVjdG9yKSkKICAgICAgICAgQHRocm93VHlwZUVycm9yKCJ8dGhp
c3wuY29uc3RydWN0b3IgaXMgbm90IGFuIE9iamVjdCBvciB1bmRlZmluZWQiKTsKLSAgICBjb25z
dHJ1Y3RvciA9IGNvbnN0cnVjdG9yLkBzcGVjaWVzU3ltYm9sOworICAgIGNvbnN0cnVjdG9yID0g
Y29uc3RydWN0b3IuQEBzcGVjaWVzOwogICAgIGlmIChAaXNVbmRlZmluZWRPck51bGwoY29uc3Ry
dWN0b3IpKQogICAgICAgICByZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yOwogICAgIGlmIChAaXND
b25zdHJ1Y3Rvcihjb25zdHJ1Y3RvcikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnVpbHRpbnMvSXRlcmF0b3JIZWxwZXJzLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1
aWx0aW5zL0l0ZXJhdG9ySGVscGVycy5qcwppbmRleCAwZmJhNTJiZDQyYTQ0ODk4YTU2NjE4Njkx
NGQyMmIxNzkxODdlOThiLi4zMzE2NjEyNDYyMzA3OWRlYjUzYWQ4NTY4MTdkMzZlOWM0MDg4ZWJi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvSXRlcmF0b3JIZWxw
ZXJzLmpzCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9JdGVyYXRvckhlbHBl
cnMuanMKQEAgLTMyLDcgKzMyLDcgQEAgZnVuY3Rpb24gcGVyZm9ybUl0ZXJhdGlvbihpdGVyYWJs
ZSkKIAogICAgIHZhciByZXN1bHQgPSBbXTsKIAotICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhYmxl
LkBpdGVyYXRvclN5bWJvbCgpOworICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhYmxlLkBAaXRlcmF0
b3IoKTsKICAgICB2YXIgbmV4dCA9IGl0ZXJhdG9yLm5leHQ7CiAgICAgdmFyIGl0ZW07CiAgICAg
dmFyIGluZGV4ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlu
cy9TdHJpbmdQcm90b3R5cGUuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvU3Ry
aW5nUHJvdG90eXBlLmpzCmluZGV4IDNkOGFlYWY1Y2M3MzhmMDFiYTFiYjg4ZWYwZjlkODExNGE1
OGNlYWMuLjlkNmNhZGNlMWRjYmZkZWQyZDI1YmY5MjgwY2E3M2YwYmQwYmYxYmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9TdHJpbmdQcm90b3R5cGUuanMKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1N0cmluZ1Byb3RvdHlwZS5qcwpAQCAt
MzMsMTQgKzMzLDE0IEBAIGZ1bmN0aW9uIG1hdGNoKHJlZ2V4cCkKICAgICAgICAgQHRocm93VHlw
ZUVycm9yKCJTdHJpbmcucHJvdG90eXBlLm1hdGNoIHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBi
ZSBudWxsIG9yIHVuZGVmaW5lZCIpOwogCiAgICAgaWYgKHJlZ2V4cCAhPSBudWxsKSB7Ci0gICAg
ICAgIHZhciBtYXRjaGVyID0gcmVnZXhwLkBtYXRjaFN5bWJvbDsKKyAgICAgICAgdmFyIG1hdGNo
ZXIgPSByZWdleHAuQEBtYXRjaDsKICAgICAgICAgaWYgKG1hdGNoZXIgIT0gQHVuZGVmaW5lZCkK
ICAgICAgICAgICAgIHJldHVybiBtYXRjaGVyLkBjYWxsKHJlZ2V4cCwgdGhpcyk7CiAgICAgfQog
CiAgICAgdmFyIHRoaXNTdHJpbmcgPSBAdG9TdHJpbmcodGhpcyk7CiAgICAgdmFyIGNyZWF0ZWRS
ZWdFeHAgPSBAcmVnRXhwQ3JlYXRlKHJlZ2V4cCwgQHVuZGVmaW5lZCk7Ci0gICAgcmV0dXJuIGNy
ZWF0ZWRSZWdFeHAuQG1hdGNoU3ltYm9sKHRoaXNTdHJpbmcpOworICAgIHJldHVybiBjcmVhdGVk
UmVnRXhwLkBAbWF0Y2godGhpc1N0cmluZyk7CiB9CiAKIGZ1bmN0aW9uIG1hdGNoQWxsKGFyZykK
QEAgLTU0LDE0ICs1NCwxNCBAQCBmdW5jdGlvbiBtYXRjaEFsbChhcmcpCiAgICAgICAgIGlmIChA
aXNSZWdFeHAoYXJnKSAmJiAhQHN0cmluZ0luY2x1ZGVzSW50ZXJuYWwuQGNhbGwoQHRvU3RyaW5n
KGFyZy5mbGFncyksICJnIikpCiAgICAgICAgICAgICBAdGhyb3dUeXBlRXJyb3IoIlN0cmluZy5w
cm90b3R5cGUubWF0Y2hBbGwgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBub24tZ2xvYmFsIHJlZ3Vs
YXIgZXhwcmVzc2lvbiIpOwogCi0gICAgICAgIHZhciBtYXRjaGVyID0gYXJnLkBtYXRjaEFsbFN5
bWJvbDsKKyAgICAgICAgdmFyIG1hdGNoZXIgPSBhcmcuQEBtYXRjaEFsbDsKICAgICAgICAgaWYg
KCFAaXNVbmRlZmluZWRPck51bGwobWF0Y2hlcikpCiAgICAgICAgICAgICByZXR1cm4gbWF0Y2hl
ci5AY2FsbChhcmcsIHRoaXMpOwogICAgIH0KIAogICAgIHZhciBzdHJpbmcgPSBAdG9TdHJpbmco
dGhpcyk7CiAgICAgdmFyIHJlZ0V4cCA9IEByZWdFeHBDcmVhdGUoYXJnLCAiZyIpOwotICAgIHJl
dHVybiByZWdFeHAuQG1hdGNoQWxsU3ltYm9sKHN0cmluZyk7CisgICAgcmV0dXJuIHJlZ0V4cC5A
QG1hdGNoQWxsKHN0cmluZyk7CiB9CiAKIEBnbG9iYWxQcml2YXRlCkBAIC0yNDYsNyArMjQ2LDcg
QEAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2gsIHJlcGxhY2UpCiAgICAgICAgIEB0aHJvd1R5cGVF
cnJvcigiU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlIHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBi
ZSBudWxsIG9yIHVuZGVmaW5lZCIpOwogCiAgICAgaWYgKHNlYXJjaCAhPSBudWxsKSB7Ci0gICAg
ICAgIHZhciByZXBsYWNlciA9IHNlYXJjaC5AcmVwbGFjZVN5bWJvbDsKKyAgICAgICAgdmFyIHJl
cGxhY2VyID0gc2VhcmNoLkBAcmVwbGFjZTsKICAgICAgICAgaWYgKHJlcGxhY2VyICE9PSBAdW5k
ZWZpbmVkKSB7CiAgICAgICAgICAgICBpZiAoIUBoYXNPYnNlcnZhYmxlU2lkZUVmZmVjdHNGb3JT
dHJpbmdSZXBsYWNlKHNlYXJjaCwgcmVwbGFjZXIpKQogICAgICAgICAgICAgICAgIHJldHVybiBA
dG9TdHJpbmcodGhpcykuQHJlcGxhY2VVc2luZ1JlZ0V4cChzZWFyY2gsIHJlcGxhY2UpOwpAQCAt
MjcwLDcgKzI3MCw3IEBAIGZ1bmN0aW9uIHJlcGxhY2VBbGwoc2VhcmNoLCByZXBsYWNlKQogICAg
ICAgICBpZiAoQGlzUmVnRXhwKHNlYXJjaCkgJiYgIUBzdHJpbmdJbmNsdWRlc0ludGVybmFsLkBj
YWxsKEB0b1N0cmluZyhzZWFyY2guZmxhZ3MpLCAiZyIpKQogICAgICAgICAgICAgQHRocm93VHlw
ZUVycm9yKCJTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VBbGwgYXJndW1lbnQgbXVzdCBub3QgYmUg
YSBub24tZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbiIpOwogCi0gICAgICAgIHZhciByZXBsYWNl
ciA9IHNlYXJjaC5AcmVwbGFjZVN5bWJvbDsKKyAgICAgICAgdmFyIHJlcGxhY2VyID0gc2VhcmNo
LkBAcmVwbGFjZTsKICAgICAgICAgaWYgKHJlcGxhY2VyICE9PSBAdW5kZWZpbmVkKSB7CiAgICAg
ICAgICAgICBpZiAoIUBoYXNPYnNlcnZhYmxlU2lkZUVmZmVjdHNGb3JTdHJpbmdSZXBsYWNlKHNl
YXJjaCwgcmVwbGFjZXIpKQogICAgICAgICAgICAgICAgIHJldHVybiBAdG9TdHJpbmcodGhpcyku
QHJlcGxhY2VVc2luZ1JlZ0V4cChzZWFyY2gsIHJlcGxhY2UpOwpAQCAtMjkxLDE0ICsyOTEsMTQg
QEAgZnVuY3Rpb24gc2VhcmNoKHJlZ2V4cCkKICAgICAgICAgQHRocm93VHlwZUVycm9yKCJTdHJp
bmcucHJvdG90eXBlLnNlYXJjaCByZXF1aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUgbnVsbCBvciB1
bmRlZmluZWQiKTsKIAogICAgIGlmIChyZWdleHAgIT0gbnVsbCkgewotICAgICAgICB2YXIgc2Vh
cmNoZXIgPSByZWdleHAuQHNlYXJjaFN5bWJvbDsKKyAgICAgICAgdmFyIHNlYXJjaGVyID0gcmVn
ZXhwLkBAc2VhcmNoOwogICAgICAgICBpZiAoc2VhcmNoZXIgIT0gQHVuZGVmaW5lZCkKICAgICAg
ICAgICAgIHJldHVybiBzZWFyY2hlci5AY2FsbChyZWdleHAsIHRoaXMpOwogICAgIH0KIAogICAg
IHZhciB0aGlzU3RyaW5nID0gQHRvU3RyaW5nKHRoaXMpOwogICAgIHZhciBjcmVhdGVkUmVnRXhw
ID0gQHJlZ0V4cENyZWF0ZShyZWdleHAsIEB1bmRlZmluZWQpOwotICAgIHJldHVybiBjcmVhdGVk
UmVnRXhwLkBzZWFyY2hTeW1ib2wodGhpc1N0cmluZyk7CisgICAgcmV0dXJuIGNyZWF0ZWRSZWdF
eHAuQEBzZWFyY2godGhpc1N0cmluZyk7CiB9CiAKIGZ1bmN0aW9uIHNwbGl0KHNlcGFyYXRvciwg
bGltaXQpCkBAIC0zMDksNyArMzA5LDcgQEAgZnVuY3Rpb24gc3BsaXQoc2VwYXJhdG9yLCBsaW1p
dCkKICAgICAgICAgQHRocm93VHlwZUVycm9yKCJTdHJpbmcucHJvdG90eXBlLnNwbGl0IHJlcXVp
cmVzIHRoYXQgfHRoaXN8IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZCIpOwogICAgIAogICAgIGlm
IChzZXBhcmF0b3IgIT0gbnVsbCkgewotICAgICAgICB2YXIgc3BsaXR0ZXIgPSBzZXBhcmF0b3Iu
QHNwbGl0U3ltYm9sOworICAgICAgICB2YXIgc3BsaXR0ZXIgPSBzZXBhcmF0b3IuQEBzcGxpdDsK
ICAgICAgICAgaWYgKHNwbGl0dGVyICE9IEB1bmRlZmluZWQpCiAgICAgICAgICAgICByZXR1cm4g
c3BsaXR0ZXIuQGNhbGwoc2VwYXJhdG9yLCB0aGlzLCBsaW1pdCk7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1R5cGVkQXJyYXlDb25zdHJ1Y3Rvci5q
cyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9UeXBlZEFycmF5Q29uc3RydWN0b3Iu
anMKaW5kZXggMzJlOTZlYzIyNDNmZTBkZjViYzFlOTJiYzU5MTdmMWY4NzkwOTM5YS4uOTRhYzY3
OWM1MTE4ZjQ1ODI4NjdiY2ZhYjgwNmNkYmI3YjI1ODEzZiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J1aWx0aW5zL1R5cGVkQXJyYXlDb25zdHJ1Y3Rvci5qcworKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvVHlwZWRBcnJheUNvbnN0cnVjdG9yLmpzCkBAIC02
MSw3ICs2MSw3IEBAIGZ1bmN0aW9uIGZyb20oaXRlbXMgLyogWyAsIG1hcGZuIFsgLCB0aGlzQXJn
IF0gXSAqLykKIAogICAgIHZhciBhcnJheUxpa2UgPSBAdG9PYmplY3QoaXRlbXMsICJUeXBlZEFy
cmF5LmZyb20gcmVxdWlyZXMgYW4gYXJyYXktbGlrZSBvYmplY3QgLSBub3QgbnVsbCBvciB1bmRl
ZmluZWQiKTsKIAotICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZW1zLkBpdGVyYXRvclN5bWJv
bDsKKyAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVtcy5AQGl0ZXJhdG9yOwogICAgIGlmIChp
dGVyYXRvck1ldGhvZCAhPSBudWxsKSB7CiAgICAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3JNZXRo
b2QgIT09ICJmdW5jdGlvbiIpCiAgICAgICAgICAgICBAdGhyb3dUeXBlRXJyb3IoIlR5cGVkQXJy
YXkuZnJvbSByZXF1aXJlcyB0aGF0IHRoZSBwcm9wZXJ0eSBvZiB0aGUgZmlyc3QgYXJndW1lbnQs
IGl0ZW1zW1N5bWJvbC5pdGVyYXRvcl0sIHdoZW4gZXhpc3RzLCBiZSBhIGZ1bmN0aW9uIik7CkBA
IC03NSw3ICs3NSw3IEBAIGZ1bmN0aW9uIGZyb20oaXRlbXMgLyogWyAsIG1hcGZuIFsgLCB0aGlz
QXJnIF0gXSAqLykKICAgICAgICAgLy8gaXQgY291bGQgYmUgb2JzZXJ2YWJsZSBpZiB0aGUgdXNl
ciBkZWZpbmVzIGEgZ2V0dGVyIGZvciBAQGl0ZXJhdG9yLgogICAgICAgICAvLyBUbyBhdm9pZCB0
aGlzIHNpdHVhdGlvbiwgd2UgZGVmaW5lIGEgd3JhcHBlciBvYmplY3QgdGhhdCBAQGl0ZXJhdG9y
IGp1c3QgcmV0dXJucyBhIGdpdmVuIGl0ZXJhdG9yLgogICAgICAgICB2YXIgd3JhcHBlciA9IHt9
OwotICAgICAgICB3cmFwcGVyLkBpdGVyYXRvclN5bWJvbCA9IGZ1bmN0aW9uKCkgeyByZXR1cm4g
aXRlcmF0b3I7IH0KKyAgICAgICAgd3JhcHBlci5AQGl0ZXJhdG9yID0gZnVuY3Rpb24oKSB7IHJl
dHVybiBpdGVyYXRvcjsgfQogCiAgICAgICAgIGZvciAodmFyIHZhbHVlIG9mIHdyYXBwZXIpIHsK
ICAgICAgICAgICAgIGlmIChtYXBGbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9idWlsdGlucy9UeXBlZEFycmF5UHJvdG90eXBlLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J1aWx0aW5zL1R5cGVkQXJyYXlQcm90b3R5cGUuanMKaW5kZXggM2I3ODFkYzBlMGQ5YjUyZGI0
ZWViMGJkMWUwNGRmOTZkOTlkNTllNC4uZWIwZDE2MmI4YTUzZDdhMDk3YjU4NWY3Y2YyZmVjNTZj
YjBlYzAwMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1R5cGVk
QXJyYXlQcm90b3R5cGUuanMKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1R5
cGVkQXJyYXlQcm90b3R5cGUuanMKQEAgLTQyLDcgKzQyLDcgQEAgZnVuY3Rpb24gdHlwZWRBcnJh
eVNwZWNpZXNDb25zdHJ1Y3Rvcih2YWx1ZSkKICAgICBpZiAoIUBpc09iamVjdChjb25zdHJ1Y3Rv
cikpCiAgICAgICAgIEB0aHJvd1R5cGVFcnJvcigifHRoaXN8LmNvbnN0cnVjdG9yIGlzIG5vdCBh
biBPYmplY3Qgb3IgdW5kZWZpbmVkIik7CiAKLSAgICBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9y
LkBzcGVjaWVzU3ltYm9sOworICAgIGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3IuQEBzcGVjaWVz
OwogICAgIGlmIChAaXNVbmRlZmluZWRPck51bGwoY29uc3RydWN0b3IpKQogICAgICAgICByZXR1
cm4gQHR5cGVkQXJyYXlHZXRPcmlnaW5hbENvbnN0cnVjdG9yKHZhbHVlKTsKICAgICAvLyBUaGUg
bGFjayBvZiBhbiBAaXNDb25zdHJ1Y3Rvcihjb25zdHJ1Y3RvcikgY2hlY2sgaGVyZSBpcyBub3Qg
b2JzZXJ2YWJsZSBiZWNhdXNlCkBAIC0zMTgsNyArMzE4LDcgQEAgZnVuY3Rpb24gbWFwKGNhbGxi
YWNrIC8qLCB0aGlzQXJnICovKQogICAgIGlmIChjb25zdHJ1Y3RvciA9PT0gQHVuZGVmaW5lZCkK
ICAgICAgICAgcmVzdWx0ID0gbmV3IChAdHlwZWRBcnJheUdldE9yaWdpbmFsQ29uc3RydWN0b3Io
dGhpcykpKGxlbmd0aCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHZhciBzcGVjaWVzQ29uc3RydWN0
b3IgPSBjb25zdHJ1Y3Rvci5Ac3BlY2llc1N5bWJvbDsKKyAgICAgICAgdmFyIHNwZWNpZXNDb25z
dHJ1Y3RvciA9IGNvbnN0cnVjdG9yLkBAc3BlY2llczsKICAgICAgICAgaWYgKEBpc1VuZGVmaW5l
ZE9yTnVsbChzcGVjaWVzQ29uc3RydWN0b3IpKQogICAgICAgICAgICAgcmVzdWx0ID0gbmV3IChA
dHlwZWRBcnJheUdldE9yaWdpbmFsQ29uc3RydWN0b3IodGhpcykpKGxlbmd0aCk7CiAgICAgICAg
IGVsc2UgewpAQCAtMzU5LDcgKzM1OSw3IEBAIGZ1bmN0aW9uIGZpbHRlcihjYWxsYmFjayAvKiwg
dGhpc0FyZyAqLykKICAgICBpZiAoY29uc3RydWN0b3IgPT09IEB1bmRlZmluZWQpCiAgICAgICAg
IHJlc3VsdCA9IG5ldyAoQHR5cGVkQXJyYXlHZXRPcmlnaW5hbENvbnN0cnVjdG9yKHRoaXMpKShy
ZXN1bHRMZW5ndGgpOwogICAgIGVsc2UgewotICAgICAgICB2YXIgc3BlY2llc0NvbnN0cnVjdG9y
ID0gY29uc3RydWN0b3IuQHNwZWNpZXNTeW1ib2w7CisgICAgICAgIHZhciBzcGVjaWVzQ29uc3Ry
dWN0b3IgPSBjb25zdHJ1Y3Rvci5AQHNwZWNpZXM7CiAgICAgICAgIGlmIChAaXNVbmRlZmluZWRP
ck51bGwoc3BlY2llc0NvbnN0cnVjdG9yKSkKICAgICAgICAgICAgIHJlc3VsdCA9IG5ldyAoQHR5
cGVkQXJyYXlHZXRPcmlnaW5hbENvbnN0cnVjdG9yKHRoaXMpKShyZXN1bHRMZW5ndGgpOwogICAg
ICAgICBlbHNlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvTm9kZXNDb2RlZ2VuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Tm9kZXNDb2RlZ2VuLmNwcAppbmRleCBlMTMzOTRhNmVkMmRiNmUxNGViYmE0Yjc4NWZkNzA1MDhk
MWU3MjRiLi43YWYzMTA4N2IxMjY0MmRiMGY5OGUwZGJhZmFlY2MzMWRmMTI1MWZhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3Bw
CkBAIC0xMDc2LDcgKzEwNzYsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUludHJpbnNpY05vZGU6
OmVtaXRfaW50cmluc2ljX2dldEJ5SWREaXJlY3RQcml2YXRlKEJ5dGVjb2RlRwogICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG5vZGUpOwogICAgIG5vZGUg
PSBub2RlLT5tX25leHQ7CiAgICAgQVNTRVJUKG5vZGUtPm1fZXhwci0+aXNTdHJpbmcoKSk7Ci0g
ICAgU3ltYm9sSW1wbCogc3ltYm9sID0gZ2VuZXJhdG9yLnZtKCkucHJvcGVydHlOYW1lcy0+bG9v
a1VwUHJpdmF0ZU5hbWUoc3RhdGljX2Nhc3Q8U3RyaW5nTm9kZSo+KG5vZGUtPm1fZXhwciktPnZh
bHVlKCkpOworICAgIFN5bWJvbEltcGwqIHN5bWJvbCA9IGdlbmVyYXRvci52bSgpLnByb3BlcnR5
TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmxvb2tVcFByaXZhdGVOYW1lKHN0YXRpY19jYXN0PFN0cmlu
Z05vZGUqPihub2RlLT5tX2V4cHIpLT52YWx1ZSgpKTsKICAgICBBU1NFUlQoc3ltYm9sKTsKICAg
ICBBU1NFUlQoIW5vZGUtPm1fbmV4dCk7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0RGlyZWN0
R2V0QnlJZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCBnZW5l
cmF0b3IucGFyc2VyQXJlbmEoKS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlSWRlbnRpZmllcihnZW5l
cmF0b3Iudm0oKSwgc3ltYm9sKSk7CkBAIC0xMjYzLDcgKzEyNjMsNyBAQCBSZWdpc3RlcklEKiBC
eXRlY29kZUludHJpbnNpY05vZGU6OmVtaXRfaW50cmluc2ljX3B1dEJ5SWREaXJlY3RQcml2YXRl
KEJ5dGVjb2RlRwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXRO
b2RlKG5vZGUpOwogICAgIG5vZGUgPSBub2RlLT5tX25leHQ7CiAgICAgQVNTRVJUKG5vZGUtPm1f
ZXhwci0+aXNTdHJpbmcoKSk7Ci0gICAgU3ltYm9sSW1wbCogc3ltYm9sID0gZ2VuZXJhdG9yLnZt
KCkucHJvcGVydHlOYW1lcy0+bG9va1VwUHJpdmF0ZU5hbWUoc3RhdGljX2Nhc3Q8U3RyaW5nTm9k
ZSo+KG5vZGUtPm1fZXhwciktPnZhbHVlKCkpOworICAgIFN5bWJvbEltcGwqIHN5bWJvbCA9IGdl
bmVyYXRvci52bSgpLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmxvb2tVcFByaXZhdGVO
YW1lKHN0YXRpY19jYXN0PFN0cmluZ05vZGUqPihub2RlLT5tX2V4cHIpLT52YWx1ZSgpKTsKICAg
ICBBU1NFUlQoc3ltYm9sKTsKICAgICBub2RlID0gbm9kZS0+bV9uZXh0OwogICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShub2RlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9MZXhlci5jcHAKaW5kZXggOTdjYWJlMWMyNGNjYTYxNDI3NzZiY2I2MTBj
ODI0MDY2OGMxOWRmYS4uYjA4MzVmMzA0NTE3ZDc5ZTkyMWNlYjA2NjJmNzkyODdkN2JjY2YxZCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAKQEAgLTk0MSw4ICs5NDEsMTUg
QEAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQ3JlYXRlSWRlbnRpZmllcj4gQUxXQVlTX0lOTElORSBK
U1Rva2VuVHlwZSBMZXhlcjxMQ2hhcj46OnAKICAgICB9CiAgICAgCiAgICAgYm9vbCBpc1ByaXZh
dGVOYW1lID0gbV9jdXJyZW50ID09ICdAJyAmJiBtX3BhcnNpbmdCdWlsdGluRnVuY3Rpb247Ci0g
ICAgaWYgKGlzUHJpdmF0ZU5hbWUpCisgICAgYm9vbCBpc1dlbGxLbm93blN5bWJvbCA9IGZhbHNl
OworICAgIGlmIChpc1ByaXZhdGVOYW1lKSB7CisgICAgICAgIEFTU0VSVChtX3BhcnNpbmdCdWls
dGluRnVuY3Rpb24pOwogICAgICAgICBzaGlmdCgpOworICAgICAgICBpZiAobV9jdXJyZW50ID09
ICdAJykgeworICAgICAgICAgICAgaXNXZWxsS25vd25TeW1ib2wgPSB0cnVlOworICAgICAgICAg
ICAgc2hpZnQoKTsKKyAgICAgICAgfQorICAgIH0KICAgICAKICAgICBjb25zdCBMQ2hhciogaWRl
bnRpZmllclN0YXJ0ID0gY3VycmVudFNvdXJjZVB0cigpOwogICAgIHVuc2lnbmVkIGlkZW50aWZp
ZXJMaW5lU3RhcnQgPSBjdXJyZW50TGluZVN0YXJ0T2Zmc2V0KCk7CkBAIC05NTksMTggKzk2Niwy
MyBAQCB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRDcmVhdGVJZGVudGlmaWVyPiBBTFdBWVNfSU5MSU5F
IEpTVG9rZW5UeXBlIExleGVyPExDaGFyPjo6cAogICAgIAogICAgIGlmIChzaG91bGRDcmVhdGVJ
ZGVudGlmaWVyIHx8IG1fcGFyc2luZ0J1aWx0aW5GdW5jdGlvbikgewogICAgICAgICBpbnQgaWRl
bnRpZmllckxlbmd0aCA9IGN1cnJlbnRTb3VyY2VQdHIoKSAtIGlkZW50aWZpZXJTdGFydDsKLSAg
ICAgICAgaWRlbnQgPSBtYWtlSWRlbnRpZmllcihpZGVudGlmaWVyU3RhcnQsIGlkZW50aWZpZXJM
ZW5ndGgpOwotICAgICAgICBpZiAobV9wYXJzaW5nQnVpbHRpbkZ1bmN0aW9uKSB7Ci0gICAgICAg
ICAgICBpZiAoIWlzU2FmZUJ1aWx0aW5JZGVudGlmaWVyKG1fdm0sIGlkZW50KSAmJiAhaXNQcml2
YXRlTmFtZSkgewotICAgICAgICAgICAgICAgIG1fbGV4RXJyb3JNZXNzYWdlID0gbWFrZVN0cmlu
ZygiVGhlIHVzZSBvZiAnIiwgaWRlbnQtPnN0cmluZygpLCAiJyBpcyBkaXNhbGxvd2VkIGluIGJ1
aWx0aW4gZnVuY3Rpb25zLiIpOwotICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUlRPSzsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpc1ByaXZhdGVOYW1lKQotICAgICAgICAgICAg
ICAgIGlkZW50ID0gJm1fYXJlbmEtPm1ha2VJZGVudGlmaWVyKG1fdm0sIG1fdm0ucHJvcGVydHlO
YW1lcy0+bG9va1VwUHJpdmF0ZU5hbWUoKmlkZW50KSk7Ci0gICAgICAgICAgICBlbHNlIGlmICgq
aWRlbnQgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT51bmRlZmluZWRLZXl3b3JkKQotICAgICAgICAg
ICAgICAgIHRva2VuRGF0YS0+aWRlbnQgPSAmbV92bS5wcm9wZXJ0eU5hbWVzLT51bmRlZmluZWRQ
cml2YXRlTmFtZTsKKyAgICAgICAgaWYgKG1fcGFyc2luZ0J1aWx0aW5GdW5jdGlvbiAmJiBpc1By
aXZhdGVOYW1lKSB7CisgICAgICAgICAgICBpZiAoaXNXZWxsS25vd25TeW1ib2wpCisgICAgICAg
ICAgICAgICAgaWRlbnQgPSAmbV9hcmVuYS0+bWFrZUlkZW50aWZpZXIobV92bSwgbV92bS5wcm9w
ZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5sb29rVXBXZWxsS25vd25TeW1ib2woaWRlbnRpZmll
clN0YXJ0LCBpZGVudGlmaWVyTGVuZ3RoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgaWRlbnQgPSAmbV9hcmVuYS0+bWFrZUlkZW50aWZpZXIobV92bSwgbV92bS5wcm9wZXJ0
eU5hbWVzLT5idWlsdGluTmFtZXMoKS5sb29rVXBQcml2YXRlTmFtZShpZGVudGlmaWVyU3RhcnQs
IGlkZW50aWZpZXJMZW5ndGgpKTsKICAgICAgICAgICAgIGlmICghaWRlbnQpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIElOVkFMSURfUFJJVkFURV9OQU1FX0VSUk9SVE9LOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgaWRlbnQgPSBtYWtlSWRlbnRpZmllcihpZGVudGlmaWVyU3RhcnQs
IGlkZW50aWZpZXJMZW5ndGgpOworICAgICAgICAgICAgaWYgKG1fcGFyc2luZ0J1aWx0aW5GdW5j
dGlvbikgeworICAgICAgICAgICAgICAgIGlmICghaXNTYWZlQnVpbHRpbklkZW50aWZpZXIobV92
bSwgaWRlbnQpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fbGV4RXJyb3JNZXNzYWdlID0gbWFr
ZVN0cmluZygiVGhlIHVzZSBvZiAnIiwgaWRlbnQtPnN0cmluZygpLCAiJyBpcyBkaXNhbGxvd2Vk
IGluIGJ1aWx0aW4gZnVuY3Rpb25zLiIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gRVJS
T1JUT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgqaWRlbnQgPT0g
bV92bS5wcm9wZXJ0eU5hbWVzLT51bmRlZmluZWRLZXl3b3JkKQorICAgICAgICAgICAgICAgICAg
ICB0b2tlbkRhdGEtPmlkZW50ID0gJm1fdm0ucHJvcGVydHlOYW1lcy0+dW5kZWZpbmVkUHJpdmF0
ZU5hbWU7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgdG9rZW5EYXRhLT5pZGVu
dCA9IGlkZW50OwogICAgIH0gZWxzZQpAQCAtMTAwNiw4ICsxMDE4LDE2IEBAIHRlbXBsYXRlIDxi
b29sIHNob3VsZENyZWF0ZUlkZW50aWZpZXI+IEFMV0FZU19JTkxJTkUgSlNUb2tlblR5cGUgTGV4
ZXI8VUNoYXI+OjpwCiAgICAgfQogICAgIAogICAgIGJvb2wgaXNQcml2YXRlTmFtZSA9IG1fY3Vy
cmVudCA9PSAnQCcgJiYgbV9wYXJzaW5nQnVpbHRpbkZ1bmN0aW9uOwotICAgIGlmIChpc1ByaXZh
dGVOYW1lKQorICAgIGJvb2wgaXNXZWxsS25vd25TeW1ib2wgPSBmYWxzZTsKKyAgICBpZiAoaXNQ
cml2YXRlTmFtZSkgeworICAgICAgICBBU1NFUlQobV9wYXJzaW5nQnVpbHRpbkZ1bmN0aW9uKTsK
ICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgaWYgKG1fY3VycmVudCA9PSAnQCcpIHsKKyAgICAg
ICAgICAgIGlzV2VsbEtub3duU3ltYm9sID0gdHJ1ZTsKKyAgICAgICAgICAgIHNoaWZ0KCk7Cisg
ICAgICAgIH0KKyAgICB9CisKIAogICAgIGNvbnN0IFVDaGFyKiBpZGVudGlmaWVyU3RhcnQgPSBj
dXJyZW50U291cmNlUHRyKCk7CiAgICAgaW50IGlkZW50aWZpZXJMaW5lU3RhcnQgPSBjdXJyZW50
TGluZVN0YXJ0T2Zmc2V0KCk7CkBAIC0xMDM0LDIxICsxMDU0LDI2IEBAIHRlbXBsYXRlIDxib29s
IHNob3VsZENyZWF0ZUlkZW50aWZpZXI+IEFMV0FZU19JTkxJTkUgSlNUb2tlblR5cGUgTGV4ZXI8
VUNoYXI+OjpwCiAgICAgCiAgICAgaWYgKHNob3VsZENyZWF0ZUlkZW50aWZpZXIgfHwgbV9wYXJz
aW5nQnVpbHRpbkZ1bmN0aW9uKSB7CiAgICAgICAgIGludCBpZGVudGlmaWVyTGVuZ3RoID0gY3Vy
cmVudFNvdXJjZVB0cigpIC0gaWRlbnRpZmllclN0YXJ0OwotICAgICAgICBpZiAoaXNBbGw4Qml0
KQotICAgICAgICAgICAgaWRlbnQgPSBtYWtlSWRlbnRpZmllckxDaGFyRnJvbVVDaGFyKGlkZW50
aWZpZXJTdGFydCwgaWRlbnRpZmllckxlbmd0aCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGlkZW50ID0gbWFrZUlkZW50aWZpZXIoaWRlbnRpZmllclN0YXJ0LCBpZGVudGlmaWVyTGVuZ3Ro
KTsKLSAgICAgICAgaWYgKG1fcGFyc2luZ0J1aWx0aW5GdW5jdGlvbikgewotICAgICAgICAgICAg
aWYgKCFpc1NhZmVCdWlsdGluSWRlbnRpZmllcihtX3ZtLCBpZGVudCkgJiYgIWlzUHJpdmF0ZU5h
bWUpIHsKLSAgICAgICAgICAgICAgICBtX2xleEVycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIlRo
ZSB1c2Ugb2YgJyIsIGlkZW50LT5zdHJpbmcoKSwgIicgaXMgZGlzYWxsb3dlZCBpbiBidWlsdGlu
IGZ1bmN0aW9ucy4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JUT0s7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoaXNQcml2YXRlTmFtZSkKLSAgICAgICAgICAgICAgICBp
ZGVudCA9ICZtX2FyZW5hLT5tYWtlSWRlbnRpZmllcihtX3ZtLCBtX3ZtLnByb3BlcnR5TmFtZXMt
Pmxvb2tVcFByaXZhdGVOYW1lKCppZGVudCkpOwotICAgICAgICAgICAgZWxzZSBpZiAoKmlkZW50
ID09IG1fdm0ucHJvcGVydHlOYW1lcy0+dW5kZWZpbmVkS2V5d29yZCkKLSAgICAgICAgICAgICAg
ICB0b2tlbkRhdGEtPmlkZW50ID0gJm1fdm0ucHJvcGVydHlOYW1lcy0+dW5kZWZpbmVkUHJpdmF0
ZU5hbWU7CisgICAgICAgIGlmIChtX3BhcnNpbmdCdWlsdGluRnVuY3Rpb24gJiYgaXNQcml2YXRl
TmFtZSkgeworICAgICAgICAgICAgaWYgKGlzV2VsbEtub3duU3ltYm9sKQorICAgICAgICAgICAg
ICAgIGlkZW50ID0gJm1fYXJlbmEtPm1ha2VJZGVudGlmaWVyKG1fdm0sIG1fdm0ucHJvcGVydHlO
YW1lcy0+YnVpbHRpbk5hbWVzKCkubG9va1VwV2VsbEtub3duU3ltYm9sKGlkZW50aWZpZXJTdGFy
dCwgaWRlbnRpZmllckxlbmd0aCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGlkZW50ID0gJm1fYXJlbmEtPm1ha2VJZGVudGlmaWVyKG1fdm0sIG1fdm0ucHJvcGVydHlOYW1l
cy0+YnVpbHRpbk5hbWVzKCkubG9va1VwUHJpdmF0ZU5hbWUoaWRlbnRpZmllclN0YXJ0LCBpZGVu
dGlmaWVyTGVuZ3RoKSk7CiAgICAgICAgICAgICBpZiAoIWlkZW50KQogICAgICAgICAgICAgICAg
IHJldHVybiBJTlZBTElEX1BSSVZBVEVfTkFNRV9FUlJPUlRPSzsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGlmIChpc0FsbDhCaXQpCisgICAgICAgICAgICAgICAgaWRlbnQgPSBtYWtl
SWRlbnRpZmllckxDaGFyRnJvbVVDaGFyKGlkZW50aWZpZXJTdGFydCwgaWRlbnRpZmllckxlbmd0
aCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaWRlbnQgPSBtYWtlSWRlbnRp
ZmllcihpZGVudGlmaWVyU3RhcnQsIGlkZW50aWZpZXJMZW5ndGgpOworICAgICAgICAgICAgaWYg
KG1fcGFyc2luZ0J1aWx0aW5GdW5jdGlvbikgeworICAgICAgICAgICAgICAgIGlmICghaXNTYWZl
QnVpbHRpbklkZW50aWZpZXIobV92bSwgaWRlbnQpKSB7CisgICAgICAgICAgICAgICAgICAgIG1f
bGV4RXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiVGhlIHVzZSBvZiAnIiwgaWRlbnQtPnN0cmlu
ZygpLCAiJyBpcyBkaXNhbGxvd2VkIGluIGJ1aWx0aW4gZnVuY3Rpb25zLiIpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gRVJST1JUT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmICgqaWRlbnQgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT51bmRlZmluZWRLZXl3b3Jk
KQorICAgICAgICAgICAgICAgICAgICB0b2tlbkRhdGEtPmlkZW50ID0gJm1fdm0ucHJvcGVydHlO
YW1lcy0+dW5kZWZpbmVkUHJpdmF0ZU5hbWU7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICAgICAgdG9rZW5EYXRhLT5pZGVudCA9IGlkZW50OwogICAgIH0gZWxzZQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCmluZGV4IDlhNzliYzY3MTNhYmRh
YTY4NjFlYjRmYjYxOWNmZThlNTg1Yzg0MTYuLmJkYzZlM2E0MTYyYWIwNDIzZTNjNWEwMmYxNTE2
MmU3M2U2YjRiNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nh
Y2hlZFR5cGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRU
eXBlcy5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJDYWNoZWRUeXBlcy5oIgogCisjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAi
Qnl0ZWNvZGVDYWNoZUVycm9yLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgpAQCAtNzAyLDE0ICs3MDMsMTcgQEAgY2xhc3Mg
Q2FjaGVkVW5pcXVlZFN0cmluZ0ltcGxCYXNlIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0
PFQ+IHsKICAgICB7CiAgICAgICAgIG1faXNBdG9taWMgPSBzdHJpbmcuaXNBdG9tKCk7CiAgICAg
ICAgIG1faXNTeW1ib2wgPSBzdHJpbmcuaXNTeW1ib2woKTsKKyAgICAgICAgbV9pc1dlbGxLbm93
blN5bWJvbCA9IGZhbHNlOwogICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gaW1wbCA9IGNvbnN0
X2Nhc3Q8U3RyaW5nSW1wbCo+KCZzdHJpbmcpOwogCiAgICAgICAgIGlmIChtX2lzU3ltYm9sKSB7
CiAgICAgICAgICAgICBTeW1ib2xJbXBsKiBzeW1ib2wgPSBzdGF0aWNfY2FzdDxTeW1ib2xJbXBs
Kj4oaW1wbC5nZXQoKSk7CiAgICAgICAgICAgICBpZiAoIXN5bWJvbC0+aXNOdWxsU3ltYm9sKCkp
IHsKICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHdlbGwt
a25vd24gc3ltYm9scy4KLSAgICAgICAgICAgICAgICBpZiAoIXN5bWJvbC0+aXNQcml2YXRlKCkp
Ci0gICAgICAgICAgICAgICAgICAgIGltcGwgPSBlbmNvZGVyLnZtKCkucHJvcGVydHlOYW1lcy0+
Z2V0UHVibGljTmFtZShlbmNvZGVyLnZtKCksIHN5bWJvbCkuaW1wbCgpOworICAgICAgICAgICAg
ICAgIGlmICghc3ltYm9sLT5pc1ByaXZhdGUoKSkgeworICAgICAgICAgICAgICAgICAgICBtX2lz
V2VsbEtub3duU3ltYm9sID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgaW1wbCA9IHN5bWJv
bC0+c3Vic3RyaW5nKHN0cmxlbigiU3ltYm9sLiIpKTsKKyAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtNzM4LDEwICs3NDIsMTcgQEAgY2xhc3MgQ2FjaGVk
VW5pcXVlZFN0cmluZ0ltcGxCYXNlIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFQ+IHsK
ICAgICAgICAgICAgIGlmICghbV9pc1N5bWJvbCkKICAgICAgICAgICAgICAgICByZXR1cm4gQXRv
bVN0cmluZ0ltcGw6OmFkZChidWZmZXIsIG1fbGVuZ3RoKS5sZWFrUmVmKCk7CiAKLSAgICAgICAg
ICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGRlY29kZXIudm0o
KSwgYnVmZmVyLCBtX2xlbmd0aCk7Ci0gICAgICAgICAgICBTdHJpbmcgc3RyID0gZGVjb2Rlci52
bSgpLnByb3BlcnR5TmFtZXMtPmxvb2tVcFByaXZhdGVOYW1lKGlkZW50KTsKKyAgICAgICAgICAg
IFN0cmluZyBzdHI7CisgICAgICAgICAgICBpZiAobV9pc1dlbGxLbm93blN5bWJvbCkKKyAgICAg
ICAgICAgICAgICBzdHIgPSBkZWNvZGVyLnZtKCkucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVz
KCkubG9va1VwV2VsbEtub3duU3ltYm9sKGJ1ZmZlciwgbV9sZW5ndGgpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHN0ciA9IGRlY29kZXIudm0oKS5wcm9wZXJ0eU5hbWVzLT5i
dWlsdGluTmFtZXMoKS5sb29rVXBQcml2YXRlTmFtZShidWZmZXIsIG1fbGVuZ3RoKTsKICAgICAg
ICAgICAgIFN0cmluZ0ltcGwqIGltcGwgPSBzdHIucmVsZWFzZUltcGwoKS5nZXQoKTsKICAgICAg
ICAgICAgIEFTU0VSVChpbXBsLT5pc1N5bWJvbCgpKTsKKyAgICAgICAgICAgIGlmIChtX2lzV2Vs
bEtub3duU3ltYm9sKQorICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxTeW1ib2xJ
bXBsKj4oaW1wbCktPmlzUHJpdmF0ZSgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoIXN0YXRpY19jYXN0PFN5bWJvbEltcGwqPihpbXBsKS0+aXNQcml2YXRlKCkp
OwogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFVuaXF1ZWRTdHJpbmdJbXBsKj4oaW1w
bCk7CiAgICAgICAgIH07CiAKQEAgLTc1OSw2ICs3NzAsNyBAQCBjbGFzcyBDYWNoZWRVbmlxdWVk
U3RyaW5nSW1wbEJhc2UgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8VD4gewogcHJpdmF0
ZToKICAgICBib29sIG1faXM4Qml0IDogMTsKICAgICBib29sIG1faXNTeW1ib2wgOiAxOworICAg
IGJvb2wgbV9pc1dlbGxLbm93blN5bWJvbCA6IDE7CiAgICAgYm9vbCBtX2lzQXRvbWljIDogMTsK
ICAgICB1bnNpZ25lZCBtX2xlbmd0aDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5jcHAKaW5kZXggYzYzYTAyOTExMTcyOTVkMTkx
OWJhMjgwMmEyYzM5MGFjNTE2NjcwOC4uNjJjMGQ1OTU3M2E2YTYzOTkwOTM5ZjFjZWY5NGQ5MTlk
N2Q3M2M2ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
SWRlbnRpZmllcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1v
bklkZW50aWZpZXJzLmNwcApAQCAtNDAsNyArNDAsNyBAQCBDb21tb25JZGVudGlmaWVyczo6Q29t
bW9uSWRlbnRpZmllcnMoVk0mIHZtKQogICAgICwgdGhpc0lkZW50aWZpZXIoSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgInRoaXMiKSkKICAgICAsIHVzZVN0cmljdElkZW50aWZpZXIoSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgInVzZSBzdHJpY3QiKSkKICAgICAsIHRpbWVzSWRlbnRpZmll
cihJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiKiIpKQotICAgICwgbV9idWlsdGluTmFtZXMo
bmV3IEJ1aWx0aW5OYW1lcyh2bSwgdGhpcykpCisgICAgLCBtX2J1aWx0aW5OYW1lcyhtYWtlVW5p
cXVlPEJ1aWx0aW5OYW1lcz4odm0sIHRoaXMpKQogICAgIEpTQ19QQVJTRVJfUFJJVkFURV9OQU1F
UyhJTklUSUFMSVpFX1BSSVZBVEVfTkFNRSkKICAgICBKU0NfQ09NTU9OX0lERU5USUZJRVJTX0VB
Q0hfS0VZV09SRChJTklUSUFMSVpFX0tFWVdPUkQpCiAgICAgSlNDX0NPTU1PTl9JREVOVElGSUVS
U19FQUNIX1BST1BFUlRZX05BTUUoSU5JVElBTElaRV9QUk9QRVJUWV9OQU1FKQpAQCAtNTIsMTYg
KzUyLDYgQEAgQ29tbW9uSWRlbnRpZmllcnM6On5Db21tb25JZGVudGlmaWVycygpCiB7CiB9CiAK
LVN5bWJvbEltcGwqIENvbW1vbklkZW50aWZpZXJzOjpsb29rVXBQcml2YXRlTmFtZShjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9idWlsdGluTmFtZXMtPmxv
b2tVcFByaXZhdGVOYW1lKGlkZW50KTsKLX0KLQotSWRlbnRpZmllciBDb21tb25JZGVudGlmaWVy
czo6Z2V0UHVibGljTmFtZShWTSYgdm0sIFN5bWJvbEltcGwqIHN5bWJvbCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9idWlsdGluTmFtZXMtPmdldFB1YmxpY05hbWUodm0sIHN5bWJvbCk7Ci19Ci0K
IHZvaWQgQ29tbW9uSWRlbnRpZmllcnM6OmFwcGVuZEV4dGVybmFsTmFtZShjb25zdCBJZGVudGlm
aWVyJiBwdWJsaWNOYW1lLCBjb25zdCBJZGVudGlmaWVyJiBwcml2YXRlTmFtZSkKIHsKICAgICBt
X2J1aWx0aW5OYW1lcy0+YXBwZW5kRXh0ZXJuYWxOYW1lKHB1YmxpY05hbWUsIHByaXZhdGVOYW1l
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50
aWZpZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVy
cy5oCmluZGV4IDQ3MDIwMmY5MTc5MjVkNmQzY2IyYmZmOGI0OWMxZGY5ODJlNzNkZjguLmRmMDFm
MmExMTg3NDA0MTI2MzJiZjJhZGFiOGFlMDRmMjZhYzk3ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaApAQCAtMzE5LDkgKzMxOSw2
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU0NfQ09NTU9OX1BSSVZBVEVfSURFTlRJRklF
UlNfRUFDSF9XRUxMX0tOT1dOX1NZTUJPTChKU0NfSURFTlRJRklFUl9ERUNMQVJFX1BSSVZBVEVf
V0VMTF9LTk9XTl9TWU1CT0xfR0xPQkFMKQogI3VuZGVmIEpTQ19JREVOVElGSUVSX0RFQ0xBUkVf
UFJJVkFURV9XRUxMX0tOT1dOX1NZTUJPTF9HTE9CQUwKIAotICAgICAgICBTeW1ib2xJbXBsKiBs
b29rVXBQcml2YXRlTmFtZShjb25zdCBJZGVudGlmaWVyJikgY29uc3Q7Ci0gICAgICAgIElkZW50
aWZpZXIgZ2V0UHVibGljTmFtZShWTSYsIFN5bWJvbEltcGwqKSBjb25zdDsKLQogICAgICAgICAv
LyBDYWxsZXJzIG9mIHRoaXMgbWV0aG9kIHNob3VsZCBtYWtlIHN1cmUgdGhhdCBpZGVudGlmaWVy
cyBnaXZlbiB0byB0aGlzIG1ldGhvZCAKICAgICAgICAgLy8gc3Vydml2ZSB0aGUgbGlmZXRpbWUg
b2YgQ29tbW9uSWRlbnRpZmllcnMgYW5kIHJlbGF0ZWQgVk0uCiAgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgYXBwZW5kRXh0ZXJuYWxOYW1lKGNvbnN0IElkZW50aWZpZXImIHB1YmxpY05h
bWUsIGNvbnN0IElkZW50aWZpZXImIHByaXZhdGVOYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9KU0RvbGxhclZNLmNwcAppbmRleCA5MTIxYmM2NjA4OTRkMjk2ZmJmYTRlMGQyOGM3
OGExODZhZmE1YWFmLi44ZDBlZGEyZWMyMDM0OTkxNTQ4NGI0NmVmNTA5Y2JlZTBiMTg2ODE3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCkBAIC0yNyw2ICsy
Nyw3IEBACiAjaW5jbHVkZSAiSlNEb2xsYXJWTS5oIgogCiAjaW5jbHVkZSAiQnVpbHRpbkV4ZWN1
dGFibGVDcmVhdG9yLmgiCisjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCiAjaW5jbHVkZSAiRE9NQXR0cmlidXRlR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVk
ZSAiRE9NSklUR2V0dGVyU2V0dGVyLmgiCkBAIC0yMzc5LDggKzIzODAsOSBAQCBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdldFByaXZhdGVQcm9wZXJ0eShKU0ds
b2JhbE9iamVjdCogZwogICAgICAgICByZXR1cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7CiAKICAg
ICBTdHJpbmcgc3RyID0gYXNTdHJpbmcoY2FsbEZyYW1lLT5hcmd1bWVudCgxKSktPnZhbHVlKGds
b2JhbE9iamVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CiAKLSAgICBTeW1ib2xJbXBsKiBzeW1ib2wgPSB2bS5wcm9wZXJ0eU5hbWVzLT5sb29r
VXBQcml2YXRlTmFtZShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBzdHIpKTsKKyAgICBTeW1i
b2xJbXBsKiBzeW1ib2wgPSB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5sb29rVXBQ
cml2YXRlTmFtZShzdHIpOwogICAgIGlmICghc3ltYm9sKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJVbmtub3duIHByaXZhdGUgbmFtZS4iKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSW1wbC5jcHAgYi9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcAppbmRleCAzNWIzYjRjMDJmZDY3ODVk
Mjk1YjgzNjU1OWQwOTY2MGNlN2FkYmRmLi5lYjQwZDhiN2RhZWM2MjE2MTJlNDI4ZDFiODRjMGFh
ZjM3ZDFlMGE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcApAQCAtMTIz
LDI3ICsxMjMsNiBAQCBSZWZQdHI8QXRvbVN0cmluZ0ltcGw+IEF0b21TdHJpbmdJbXBsOjphZGQo
Y29uc3QgTENoYXIqIGNoYXJhY3RlcnMpCiAgICAgcmV0dXJuIGFkZFRvU3RyaW5nVGFibGU8Y29u
c3QgTENoYXIqLCBDU3RyaW5nVHJhbnNsYXRvcj4oY2hhcmFjdGVycyk7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdHJ1Y3QgSGFzaFRyYW5zbGF0b3JDaGFyQnVmZmVy
IHsKLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzOwotICAgIHVuc2lnbmVkIGxl
bmd0aDsKLSAgICB1bnNpZ25lZCBoYXNoOwotCi0gICAgSGFzaFRyYW5zbGF0b3JDaGFyQnVmZmVy
KGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICAg
ICAgOiBjaGFyYWN0ZXJzKGNoYXJhY3RlcnMpCi0gICAgICAgICwgbGVuZ3RoKGxlbmd0aCkKLSAg
ICAgICAgLCBoYXNoKFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMoY2hh
cmFjdGVycywgbGVuZ3RoKSkKLSAgICB7Ci0gICAgfQotCi0gICAgSGFzaFRyYW5zbGF0b3JDaGFy
QnVmZmVyKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwg
dW5zaWduZWQgaGFzaCkKLSAgICAgICAgOiBjaGFyYWN0ZXJzKGNoYXJhY3RlcnMpCi0gICAgICAg
ICwgbGVuZ3RoKGxlbmd0aCkKLSAgICAgICAgLCBoYXNoKGhhc2gpCi0gICAgewotICAgIH0KLX07
Ci0KIHVzaW5nIFVDaGFyQnVmZmVyID0gSGFzaFRyYW5zbGF0b3JDaGFyQnVmZmVyPFVDaGFyPjsK
IHN0cnVjdCBVQ2hhckJ1ZmZlclRyYW5zbGF0b3IgewogICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNo
KGNvbnN0IFVDaGFyQnVmZmVyJiBidWYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0
L1N0cmluZ0ltcGwuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCmluZGV4IDAw
NDM1NjM0MWY3NDcxOTY0NmYxNTgxNDUzNmY3NTA3ZDQxMmYzNDAuLmQxNGZmYTViMTRlZGI5OGRl
NmMzNDE5OWJmY2M1NWVhNjA5NTAzNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nSW1wbC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCkBAIC01
NDAsNiArNTQwLDI3IEBAIHVzaW5nIFN0YXRpY1N0cmluZ0ltcGwgPSBTdHJpbmdJbXBsOjpTdGF0
aWNTdHJpbmdJbXBsOwogCiBzdGF0aWNfYXNzZXJ0KHNpemVvZihTdHJpbmdJbXBsKSA9PSBzaXpl
b2YoU3RhdGljU3RyaW5nSW1wbCksICIiKTsKIAordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4KK3N0cnVjdCBIYXNoVHJhbnNsYXRvckNoYXJCdWZmZXIgeworICAgIGNvbnN0IENoYXJh
Y3RlclR5cGUqIGNoYXJhY3RlcnM7CisgICAgdW5zaWduZWQgbGVuZ3RoOworICAgIHVuc2lnbmVk
IGhhc2g7CisKKyAgICBIYXNoVHJhbnNsYXRvckNoYXJCdWZmZXIoY29uc3QgQ2hhcmFjdGVyVHlw
ZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQorICAgICAgICA6IGNoYXJhY3RlcnMoY2hh
cmFjdGVycykKKyAgICAgICAgLCBsZW5ndGgobGVuZ3RoKQorICAgICAgICAsIGhhc2goU3RyaW5n
SGFzaGVyOjpjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0cyhjaGFyYWN0ZXJzLCBsZW5ndGgpKQor
ICAgIHsKKyAgICB9CisKKyAgICBIYXNoVHJhbnNsYXRvckNoYXJCdWZmZXIoY29uc3QgQ2hhcmFj
dGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBoYXNoKQorICAg
ICAgICA6IGNoYXJhY3RlcnMoY2hhcmFjdGVycykKKyAgICAgICAgLCBsZW5ndGgobGVuZ3RoKQor
ICAgICAgICAsIGhhc2goaGFzaCkKKyAgICB7CisgICAgfQorfTsKKwogI2lmIEFTU0VSVF9FTkFC
TEVECiAKIC8vIFN0cmluZ0ltcGxzIGNyZWF0ZWQgZnJvbSBTdGF0aWNTdHJpbmdJbXBsIHdpbGwg
QVNTRVJUIGluIHRoZSBnZW5lcmljIFZhbHVlQ2hlY2s8VD46OmNoZWNrQ29uc2lzdGVuY3kK
</data>
<flag name="review"
          id="407539"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>