<?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>204346</bug_id>
          
          <creation_ts>2019-11-19 03:07:00 -0800</creation_ts>
          <short_desc>[IndexedDB] IndexedDB&apos;s threading assertion should respect Web thread</short_desc>
          <delta_ts>2019-11-19 14:31:16 -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>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jsbell</cc>
    
    <cc>sihui_liu</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1591477</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-11-19 03:07:00 -0800</bug_when>
    <thetext>[IndexedDB] IndexedDB&apos;s threading assertion should respect Web thread</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591478</commentid>
    <comment_count>1</comment_count>
      <attachid>383854</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-11-19 03:10:15 -0800</bug_when>
    <thetext>Created attachment 383854
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591479</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-11-19 03:11:13 -0800</bug_when>
    <thetext>&lt;rdar://problem/57299449&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591481</commentid>
    <comment_count>3</comment_count>
      <attachid>383855</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-11-19 03:14:06 -0800</bug_when>
    <thetext>Created attachment 383855
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591618</commentid>
    <comment_count>4</comment_count>
      <attachid>383855</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-11-19 11:47:45 -0800</bug_when>
    <thetext>Comment on attachment 383855
Patch

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

This patch looks good.

&gt; Source/WebCore/Modules/indexeddb/IDBActiveDOMObject.h:41
&gt; +        ASSERT(canAccessThreadLocalDataForThread(m_originThread.get()));

Naming is ok-as is. The slightly less verbose name would be &quot;canAccessThreadLocalData&quot;. That&apos;s no need for &quot;ForThread&quot; as that can be implied by the passed argument.

&gt; Source/WebCore/Modules/indexeddb/client/TransactionOperation.h:54
&gt; +        ASSERT(canAccessThreadLocalDataForThread(m_originThread.get()));

This is ok as-is. The .get() is unnecessary because Ref&lt;&gt; overloads operator T&amp;().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591631</commentid>
    <comment_count>5</comment_count>
      <attachid>383855</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-11-19 12:01:09 -0800</bug_when>
    <thetext>Comment on attachment 383855
Patch

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

Thanks!

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBActiveDOMObject.h:41
&gt;&gt; +        ASSERT(canAccessThreadLocalDataForThread(m_originThread.get()));
&gt; 
&gt; Naming is ok-as is. The slightly less verbose name would be &quot;canAccessThreadLocalData&quot;. That&apos;s no need for &quot;ForThread&quot; as that can be implied by the passed argument.

I think this ForThread is a bit important since this function is returning true when the argument’s thread data can be accessed by the current thread. Without “ForThread”, the function name does not tell wether it is (1) checking access right from the current thread to the argument thread or (2) checking the access right from the argument thread to the current thread.

&gt;&gt; Source/WebCore/Modules/indexeddb/client/TransactionOperation.h:54
&gt;&gt; +        ASSERT(canAccessThreadLocalDataForThread(m_originThread.get()));
&gt; 
&gt; This is ok as-is. The .get() is unnecessary because Ref&lt;&gt; overloads operator T&amp;().

Thanks, will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591650</commentid>
    <comment_count>6</comment_count>
      <attachid>383855</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-11-19 12:46:29 -0800</bug_when>
    <thetext>Comment on attachment 383855
Patch

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

&gt;&gt;&gt; Source/WebCore/Modules/indexeddb/IDBActiveDOMObject.h:41
&gt;&gt;&gt; +        ASSERT(canAccessThreadLocalDataForThread(m_originThread.get()));
&gt;&gt; 
&gt;&gt; Naming is ok-as is. The slightly less verbose name would be &quot;canAccessThreadLocalData&quot;. That&apos;s no need for &quot;ForThread&quot; as that can be implied by the passed argument.
&gt; 
&gt; I think this ForThread is a bit important since this function is returning true when the argument’s thread data can be accessed by the current thread. Without “ForThread”, the function name does not tell wether it is (1) checking access right from the current thread to the argument thread or (2) checking the access right from the argument thread to the current thread.

Talked with Daniel, we should rename it to `canCurrentThreadAccessThreadLocalData`</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591656</commentid>
    <comment_count>7</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-11-19 12:53:41 -0800</bug_when>
    <thetext>Committed r252642: &lt;https://trac.webkit.org/changeset/252642&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591700</commentid>
    <comment_count>8</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-11-19 14:31:16 -0800</bug_when>
    <thetext>Committed r252651: &lt;https://trac.webkit.org/changeset/252651&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383854</attachid>
            <date>2019-11-19 03:10:15 -0800</date>
            <delta_ts>2019-11-19 03:14:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204346-20191119031014.patch</filename>
            <type>text/plain</type>
            <size>109250</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyNjIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGRmZjgxNTg5YTkwNmFm
MGY4ZTIzYTAwNzAzODlkMzUxNzYyZDViMC4uZGY1ZWY4ZGFlOTg5ZGRmZGNjM2RkYTIzODZjNWIx
Y2U5ZGE2MzBkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzNyBAQAorMjAxOS0xMS0xOSAgWXVz
dWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisgICAgICAgIFtJbmRleGVkREJdIElu
ZGV4ZWREQidzIHRocmVhZGluZyBhc3NlcnRpb24gc2hvdWxkIHJlc3BlY3QgV2ViIHRocmVhZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0MzQ2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJldmlvdXNs
eSB3ZSBhcmUgZG9pbmcgcG9pbnRlci1jb21wYXJpc29uIGJldHdlZW4gVGhyZWFkOjpjdXJyZW50
KCkgYW5kIG9yaWdpbi10aHJlYWQgdG8KKyAgICAgICAgYXNzZXJ0IHRoZSB0aHJlYWQgYWZmaW5p
dHkuIEJ1dCB0aGlzIGRvZXMgbm90IHJlc3BlY3QgV2ViIHRocmVhZDogd2UgY2FuIGNyZWF0ZSBh
biBvYmplY3QKKyAgICAgICAgaW4gV2ViIFRocmVhZCwgYW5kIHRvdWNoIGl0IGluIHRoZSBtYWlu
IHRocmVhZCBpZiB3ZWIgdGhyZWFkIGxvY2sgaXMgY29ycmVjdGx5IGhlbGQuCisKKyAgICAgICAg
VGhpcyBwYXRjaCByZXBsYWNlcyBwb2ludGVyLWNvbXBhcmlzb24gd2l0aCBXVEY6OmNhbkFjY2Vz
c1RocmVhZExvY2FsRGF0YUZvclRocmVhZCBoZWxwZXIKKyAgICAgICAgZnVuY3Rpb24gd2hpY2gg
YXBwcm9wcmlhdGVseSByZXNwZWN0cyBXZWIgdGhyZWFkIHN0YXR1cy4KKworICAgICAgICBObyBi
ZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJBY3RpdmVE
T01PYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkFjdGl2ZURPTU9iamVjdDo6cGVyZm9y
bUNhbGxiYWNrT25PcmlnaW5UaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQWN0aXZlRE9N
T2JqZWN0OjpjYWxsRnVuY3Rpb25Pbk9yaWdpblRocmVhZCk6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvSURCQ3Vyc29yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6SURC
Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6fklEQkN1cnNvcik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnNvdXJjZXNEZWxldGVkIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkN1cnNvcjo6dHJhbnNhY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCQ3Vyc29yOjp1cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjphZHZh
bmNlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6Y29udGludWVGdW5jdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnVuY2hlY2tlZEl0ZXJhdGVDdXJzb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjpkZWxldGVGdW5jdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpJREJDdXJzb3I6OnNldEdldFJlc3VsdCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6On5JREJE
YXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6aGFzUGVuZGluZ0FjdGl2
aXR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpuYW1lIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjp2ZXJzaW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkRhdGFiYXNlOjpvYmplY3RTdG9yZU5hbWVzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkRhdGFiYXNlOjpyZW5hbWVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0
YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNl
Ojp0cmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6ZGVsZXRlT2Jq
ZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmNsb3NlKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpjb25uZWN0aW9uVG9TZXJ2ZXJMb3N0KToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjptYXliZUNsb3NlSW5TZXJ2ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SURCRGF0YWJhc2U6OmFjdGl2ZURPTU9iamVjdE5hbWUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0
YWJhc2U6OnN0YXJ0VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkRhdGFiYXNlOjpkaWRTdGFydFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkRhdGFiYXNlOjp3aWxsQ29tbWl0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURC
RGF0YWJhc2U6OmRpZENvbW1pdFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRh
dGFiYXNlOjp3aWxsQWJvcnRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRh
YmFzZTo6ZGlkQWJvcnRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFz
ZTo6ZGlkQ29tbWl0T3JBYm9ydFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRh
dGFiYXNlOjpmaXJlVmVyc2lvbkNoYW5nZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRh
dGFiYXNlOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpk
aWRDcmVhdGVJbmRleEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmRpZERl
bGV0ZUluZGV4SW5mbyk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OklEQkluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkluZGV4Ojp+SURCSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6Om5h
bWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OnNldE5hbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCSW5kZXg6Om9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkluZGV4OjprZXlQYXRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4Ojp1bmlx
dWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6Om11bHRpRW50cnkgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OnJvbGxiYWNrSW5mb0ZvclZlcnNpb25DaGFu
Z2VBYm9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6ZG9PcGVuQ3Vyc29yKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkluZGV4Ojpkb09wZW5LZXlDdXJzb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCSW5kZXg6OmRvQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OmRv
R2V0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4Ojpkb0dldEtleSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJJbmRleDo6ZG9HZXRBbGwpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6
OmRvR2V0QWxsS2V5cyk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6bWFya0FzRGVsZXRl
ZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OklEQk9iamVjdFN0b3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjp+SURCT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCT2JqZWN0U3RvcmU6Om5hbWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURC
T2JqZWN0U3RvcmU6OnNldE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6
OmtleVBhdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmluZGV4
TmFtZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OnRyYW5zYWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjphdXRvSW5jcmVtZW50IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpkb09wZW5DdXJzb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmRvT3BlbktleUN1cnNvcik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OklE
Qk9iamVjdFN0b3JlOjpnZXRLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6
OnB1dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpkb0RlbGV0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6Y2xlYXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklE
Qk9iamVjdFN0b3JlOjppbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6
ZGVsZXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmRvQ291bnQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmRvR2V0QWxsKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpkb0dldEFsbEtleXMpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmU6Om1hcmtBc0RlbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURC
T2JqZWN0U3RvcmU6OnJvbGxiYWNrRm9yVmVyc2lvbkNoYW5nZUFib3J0KToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQk9wZW5EQlJlcXVlc3Q6On5JREJPcGVuREJSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQk9wZW5EQlJlcXVlc3Q6Om9uRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCT3BlbkRC
UmVxdWVzdDo6dmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uRGlkRmluaXNoKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQk9wZW5EQlJlcXVlc3Q6OmZpcmVTdWNjZXNzQWZ0ZXJWZXJzaW9uQ2hhbmdlQ29t
bWl0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9wZW5EQlJlcXVlc3Q6OmZpcmVFcnJvckFmdGVy
VmVyc2lvbkNoYW5nZUNvbXBsZXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCT3BlbkRCUmVx
dWVzdDo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPcGVuREJSZXF1ZXN0
OjpvblN1Y2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6SURCT3BlbkRCUmVxdWVzdDo6b25VcGdy
YWRlTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9wZW5EQlJlcXVlc3Q6Om9uRGVsZXRl
RGF0YWJhc2VTdWNjZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9wZW5EQlJlcXVlc3Q6OnJl
cXVlc3RDb21wbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT3BlbkRCUmVxdWVzdDo6cmVx
dWVzdEJsb2NrZWQpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6fklEQlJlcXVlc3QpOgorICAgICAgICAo
V2ViQ29yZTo6IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNldFNvdXJj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpzZXRWZXJzaW9uQ2hhbmdlVHJhbnNh
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6dHJhbnNhY3Rpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6c291cmNlT2JqZWN0U3RvcmVJZGVudGlm
aWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNvdXJjZUluZGV4SWRl
bnRpZmllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpyZXF1ZXN0ZWRP
YmplY3RTdG9yZVJlY29yZFR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVz
dDo6cmVxdWVzdGVkSW5kZXhSZWNvcmRUeXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlJlcXVlc3Q6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlJlcXVlc3Q6OmFjdGl2ZURPTU9iamVjdE5hbWUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCUmVxdWVzdDo6aGFzUGVuZGluZ0FjdGl2aXR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlJlcXVlc3Q6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6ZW5x
dWV1ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50
SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpzZXRSZXN1bHQpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6c2V0UmVzdWx0VG9TdHJ1Y3R1cmVkQ2xvbmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6c2V0UmVzdWx0VG9VbmRlZmluZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6cmVzdWx0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlJlcXVlc3Q6OndpbGxJdGVyYXRlQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlJlcXVlc3Q6OmRpZE9wZW5Pckl0ZXJhdGVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURC
UmVxdWVzdDo6Y29tcGxldGVSZXF1ZXN0QW5kRGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJSZXF1ZXN0OjpvbkVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6
Om9uU3VjY2Vzcyk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OklEQlRyYW5zYWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjp+SURCVHJhbnNhY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlTmFtZXMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmRiKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlRyYW5zYWN0aW9uOjplcnJvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbjo6b2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246
OmFib3J0RHVlVG9GYWlsZWRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0
aW9uOjp0cmFuc2l0aW9uZWRUb0ZpbmlzaGluZyk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbjo6YWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmludGVy
bmFsQWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmFib3J0T25TZXJ2
ZXJBbmRDYW5jZWxSZXF1ZXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6
YWN0aXZlRE9NT2JqZWN0TmFtZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2Fj
dGlvbjo6aGFzUGVuZGluZ0FjdGl2aXR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRy
YW5zYWN0aW9uOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjppc0Fj
dGl2ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6aXNGaW5pc2hl
ZE9yRmluaXNoaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjph
ZGRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpyZW1vdmVSZXF1
ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpzY2hlZHVsZU9wZXJhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6dHJ5U2NoZWR1bGVQZW5kaW5n
T3BlcmF0aW9uVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnBlbmRp
bmdPcGVyYXRpb25UaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9u
OjpvcGVyYXRpb25Db21wbGV0ZWRPblNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbjo6c2NoZWR1bGVDb21wbGV0ZWRPcGVyYXRpb25UaW1lcik6CisgICAgICAgIChXZWJD
b3JlOjpJREJUcmFuc2FjdGlvbjo6Y29tcGxldGVkT3BlcmF0aW9uVGltZXJGaXJlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6Y29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlRyYW5zYWN0aW9uOjpjb21taXRPblNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJU
cmFuc2FjdGlvbjo6ZmluaXNoQWJvcnRPckNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJU
cmFuc2FjdGlvbjo6ZGlkU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246
Om5vdGlmeURpZEFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkaWRB
Ym9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGlkQ29tbWl0KToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpmaXJlT25Db21wbGV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZmlyZU9uQWJvcnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCVHJhbnNhY3Rpb246OmVucXVldWVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJU
cmFuc2FjdGlvbjo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2Fj
dGlvbjo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rp
b246OmNyZWF0ZU9iamVjdFN0b3JlT25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJh
bnNhY3Rpb246OmRpZENyZWF0ZU9iamVjdFN0b3JlT25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCVHJhbnNhY3Rpb246OnJlbmFtZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlRyYW5zYWN0aW9uOjpyZW5hbWVPYmplY3RTdG9yZU9uU2VydmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkaWRSZW5hbWVPYmplY3RTdG9yZU9uU2VydmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6Y3JlYXRlSW5kZXhPblNlcnZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGlkQ3JlYXRlSW5kZXhPblNlcnZlcik6CisgICAgICAg
IChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6cmVuYW1lSW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCVHJhbnNhY3Rpb246OnJlbmFtZUluZGV4T25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCVHJhbnNhY3Rpb246OmRpZFJlbmFtZUluZGV4T25TZXJ2ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCVHJhbnNhY3Rpb246OnJlcXVlc3RPcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlRyYW5zYWN0aW9uOjpkb1JlcXVlc3RPcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlRyYW5zYWN0aW9uOjpvcGVuQ3Vyc29yT25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCVHJhbnNhY3Rpb246OmRpZE9wZW5DdXJzb3JPblNlcnZlcik6CisgICAgICAgIChXZWJD
b3JlOjpJREJUcmFuc2FjdGlvbjo6aXRlcmF0ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJUcmFuc2FjdGlvbjo6aXRlcmF0ZUN1cnNvck9uU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlRyYW5zYWN0aW9uOjpkaWRJdGVyYXRlQ3Vyc29yT25TZXJ2ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCVHJhbnNhY3Rpb246OnJlcXVlc3RHZXRBbGxPYmplY3RTdG9yZVJlY29yZHMpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnJlcXVlc3RHZXRBbGxJbmRleFJlY29y
ZHMpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmdldEFsbFJlY29yZHNPblNl
cnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGlkR2V0QWxsUmVjb3Jk
c09uU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0R2V0
UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0R2V0VmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnJlcXVlc3RHZXRLZXkpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnJlcXVlc3RJbmRleFJlY29yZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6Z2V0UmVjb3JkT25TZXJ2ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmRpZEdldFJlY29yZE9uU2VydmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0Q291bnQpOgorICAgICAgICAo
V2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmdldENvdW50T25TZXJ2ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCVHJhbnNhY3Rpb246OmRpZEdldENvdW50T25TZXJ2ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCVHJhbnNhY3Rpb246OnJlcXVlc3REZWxldGVSZWNvcmQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCVHJhbnNhY3Rpb246OmRlbGV0ZVJlY29yZE9uU2VydmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkaWREZWxldGVSZWNvcmRPblNlcnZlcik6CisgICAgICAg
IChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6cmVxdWVzdENsZWFyT2JqZWN0U3RvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmNsZWFyT2JqZWN0U3RvcmVPblNlcnZlcik6
CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGlkQ2xlYXJPYmplY3RTdG9yZU9u
U2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0UHV0T3JB
ZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnB1dE9yQWRkT25TZXJ2ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmRpZFB1dE9yQWRkT25TZXJ2ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmRlbGV0ZU9iamVjdFN0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkZWxldGVPYmplY3RTdG9yZU9uU2Vy
dmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkaWREZWxldGVPYmplY3RT
dG9yZU9uU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkZWxldGVJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGVsZXRlSW5kZXhPblNl
cnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGlkRGVsZXRlSW5kZXhP
blNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6b3BlcmF0aW9uQ29t
cGxldGVkT25DbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmVzdGFi
bGlzaE9uU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjphY3RpdmF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGVhY3RpdmF0ZSk6CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Qcm94eS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OnJlbW92ZUl0ZW1zTWF0Y2hpbmdDdXJyZW50VGhy
ZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6c2V0TWF0Y2hpbmdJdGVtc0NvbnRl
eHRTdXNwZW5kZWQpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9UcmFuc2Fj
dGlvbk9wZXJhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpUcmFuc2FjdGlv
bk9wZXJhdGlvbjo6flRyYW5zYWN0aW9uT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29y
ZTo6SURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbjo6dHJhbnNpdGlvblRvQ29tcGxldGVP
blRoaXNUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpUcmFuc2FjdGlvbk9w
ZXJhdGlvbjo6dHJhbnNpdGlvblRvQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xp
ZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbjo6ZG9Db21wbGV0ZSk6CisKIDIwMTktMTEtMTggIEpv
aG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CiAKICAgICAgICAgQ2hlY2sgaWYgSVRQ
IGlzIG9uIGJlZm9yZSBhcHBseWluZyB0aGlyZC1wYXJ0eSBjb29raWUgYmxvY2tpbmcKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFjdGl2ZURPTU9iamVj
dC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQWN0aXZlRE9NT2JqZWN0
LmgKaW5kZXggMmI0MmMwNmYzOTgzOGQwOThjNTM3ZmMxMzNiYzhhZDllNGQ4YzZlZC4uZjAzZWIw
ZjBmODFhZDJhOWMxOTk4MGNmNjY0NWM1MWJjODA0NWYzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQWN0aXZlRE9NT2JqZWN0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQWN0aXZlRE9NT2JqZWN0LmgKQEAgLTM4LDcg
KzM4LDcgQEAgY2xhc3MgSURCQWN0aXZlRE9NT2JqZWN0IDogcHVibGljIEFjdGl2ZURPTU9iamVj
dCB7CiAgICAgVGhyZWFkJiBvcmlnaW5UaHJlYWQoKSBjb25zdCB7IHJldHVybiBtX29yaWdpblRo
cmVhZC5nZXQoKTsgfQogCiAgICAgdm9pZCBjb250ZXh0RGVzdHJveWVkKCkgZmluYWwgewotICAg
ICAgICBBU1NFUlQobV9vcmlnaW5UaHJlYWQucHRyKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsK
KyAgICAgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX29yaWdp
blRocmVhZC5nZXQoKSkpOwogCiAgICAgICAgIExvY2tlcjxMb2NrPiBsb2NrKG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dExvY2spOwogICAgICAgICBBY3RpdmVET01PYmplY3Q6OmNvbnRleHREZXN0
cm95ZWQoKTsKQEAgLTQ5LDcgKzQ5LDcgQEAgY2xhc3MgSURCQWN0aXZlRE9NT2JqZWN0IDogcHVi
bGljIEFjdGl2ZURPTU9iamVjdCB7CiAgICAgewogICAgICAgICBBU1NFUlQoJm9yaWdpblRocmVh
ZCgpID09ICZvYmplY3Qub3JpZ2luVGhyZWFkKCkpOwogCi0gICAgICAgIGlmICgmb2JqZWN0Lm9y
aWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSkgeworICAgICAgICBpZiAoY2FuQWNj
ZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG9iamVjdC5vcmlnaW5UaHJlYWQoKSkpIHsKICAg
ICAgICAgICAgIChvYmplY3QuKm1ldGhvZCkoYXJndW1lbnRzLi4uKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQpAQCAtNjUsNyArNjUsNyBAQCBjbGFzcyBJREJBY3RpdmVET01PYmpl
Y3QgOiBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKIAogICAgIHZvaWQgY2FsbEZ1bmN0aW9uT25P
cmlnaW5UaHJlYWQoV1RGOjpGdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uKQogICAgIHsKLSAg
ICAgICAgaWYgKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpIHsKKyAgICAg
ICAgaWYgKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChvcmlnaW5UaHJlYWQoKSkp
IHsKICAgICAgICAgICAgIGZ1bmN0aW9uKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCmlu
ZGV4IDg3NzEwMjIyMGE2OWEwNmI5MmVkMjdjMmM1MzY2NDNmNWI0ZWM3NWIuLjE0Y2NmOTgxNGI3
ZTM4NzNiZTAwZTYxOGJlNWIzNmQ3OTBlZmJlOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcApAQCAtNjIsMjQgKzYyLDI0IEBAIElEQkN1cnNv
cjo6SURCQ3Vyc29yKElEQk9iamVjdFN0b3JlJiBvYmplY3RTdG9yZSwgY29uc3QgSURCQ3Vyc29y
SW5mbyYgaW5mbykKICAgICA6IG1faW5mbyhpbmZvKQogICAgICwgbV9zb3VyY2UoJm9iamVjdFN0
b3JlKQogewotICAgIEFTU0VSVCgmZWZmZWN0aXZlT2JqZWN0U3RvcmUoKS50cmFuc2FjdGlvbigp
LmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBB
U1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKGVmZmVjdGl2ZU9iamVjdFN0
b3JlKCkudHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpKSk7CiB9CiAKIElE
QkN1cnNvcjo6SURCQ3Vyc29yKElEQkluZGV4JiBpbmRleCwgY29uc3QgSURCQ3Vyc29ySW5mbyYg
aW5mbykKICAgICA6IG1faW5mbyhpbmZvKQogICAgICwgbV9zb3VyY2UoJmluZGV4KQogewotICAg
IEFTU0VSVCgmZWZmZWN0aXZlT2JqZWN0U3RvcmUoKS50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCku
b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNj
ZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKGVmZmVjdGl2ZU9iamVjdFN0b3JlKCkudHJhbnNh
Y3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpKSk7CiB9CiAKIElEQkN1cnNvcjo6fklE
QkN1cnNvcigpCiB7Ci0gICAgQVNTRVJUKCZlZmZlY3RpdmVPYmplY3RTdG9yZSgpLnRyYW5zYWN0
aW9uKCkuZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOwor
ICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQoZWZmZWN0aXZlT2Jq
ZWN0U3RvcmUoKS50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkpKTsKIH0K
IAogYm9vbCBJREJDdXJzb3I6OnNvdXJjZXNEZWxldGVkKCkgY29uc3QKIHsKLSAgICBBU1NFUlQo
JmVmZmVjdGl2ZU9iamVjdFN0b3JlKCkudHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRo
cmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVh
ZExvY2FsRGF0YUZvclRocmVhZChlZmZlY3RpdmVPYmplY3RTdG9yZSgpLnRyYW5zYWN0aW9uKCku
ZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24o
bV9zb3VyY2UsCiAgICAgICAgIFtdIChjb25zdCBSZWZQdHI8SURCT2JqZWN0U3RvcmU+JiBvYmpl
Y3RTdG9yZSkgeyByZXR1cm4gb2JqZWN0U3RvcmUtPmlzRGVsZXRlZCgpOyB9LApAQCAtOTcsMTQg
Kzk3LDE0IEBAIElEQk9iamVjdFN0b3JlJiBJREJDdXJzb3I6OmVmZmVjdGl2ZU9iamVjdFN0b3Jl
KCkgY29uc3QKIAogSURCVHJhbnNhY3Rpb24mIElEQkN1cnNvcjo6dHJhbnNhY3Rpb24oKSBjb25z
dAogewotICAgIEFTU0VSVCgmZWZmZWN0aXZlT2JqZWN0U3RvcmUoKS50cmFuc2FjdGlvbigpLmRh
dGFiYXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NF
UlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKGVmZmVjdGl2ZU9iamVjdFN0b3Jl
KCkudHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpKSk7CiAgICAgcmV0dXJu
IGVmZmVjdGl2ZU9iamVjdFN0b3JlKCkudHJhbnNhY3Rpb24oKTsKIH0KIAogRXhjZXB0aW9uT3I8
UmVmPElEQlJlcXVlc3Q+PiBJREJDdXJzb3I6OnVwZGF0ZShKU0dsb2JhbE9iamVjdCYgc3RhdGUs
IEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQkN1cnNvcjo6dXBkYXRl
Iik7Ci0gICAgQVNTRVJUKCZlZmZlY3RpdmVPYmplY3RTdG9yZSgpLnRyYW5zYWN0aW9uKCkuZGF0
YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VS
VChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQoZWZmZWN0aXZlT2JqZWN0U3RvcmUo
KS50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIGlmIChz
b3VyY2VzRGVsZXRlZCgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRl
RXJyb3IsICJGYWlsZWQgdG8gZXhlY3V0ZSAndXBkYXRlJyBvbiAnSURCQ3Vyc29yJzogVGhlIGN1
cnNvcidzIHNvdXJjZSBvciBlZmZlY3RpdmUgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQu
Il9zIH07CkBAIC0xNDQsNyArMTQ0LDcgQEAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJ
REJDdXJzb3I6OnVwZGF0ZShKU0dsb2JhbE9iamVjdCYgc3RhdGUsIEpTVmFsdWUgdmEKIEV4Y2Vw
dGlvbk9yPHZvaWQ+IElEQkN1cnNvcjo6YWR2YW5jZSh1bnNpZ25lZCBjb3VudCkKIHsKICAgICBM
T0coSW5kZXhlZERCLCAiSURCQ3Vyc29yOjphZHZhbmNlIik7Ci0gICAgQVNTRVJUKCZlZmZlY3Rp
dmVPYmplY3RTdG9yZSgpLnRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSA9
PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERh
dGFGb3JUaHJlYWQoZWZmZWN0aXZlT2JqZWN0U3RvcmUoKS50cmFuc2FjdGlvbigpLmRhdGFiYXNl
KCkub3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIGlmICghbV9yZXF1ZXN0KQogICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKQEAgLTIzMiw3ICsyMzIsNyBAQCBF
eGNlcHRpb25Pcjx2b2lkPiBJREJDdXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24oSlNHbG9iYWxPYmpl
Y3QmIGV4ZWNTdGF0ZSwgSlNWYWx1ZQogRXhjZXB0aW9uT3I8dm9pZD4gSURCQ3Vyc29yOjpjb250
aW51ZUZ1bmN0aW9uKGNvbnN0IElEQktleURhdGEmIGtleSkKIHsKICAgICBMT0coSW5kZXhlZERC
LCAiSURCQ3Vyc29yOjpjb250aW51ZUZ1bmN0aW9uICh0byBrZXkgJXMpIiwga2V5LmxvZ2dpbmdT
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBBU1NFUlQoJmVmZmVjdGl2ZU9iamVjdFN0b3Jl
KCkudHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1
cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChl
ZmZlY3RpdmVPYmplY3RTdG9yZSgpLnRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5vcmlnaW5UaHJl
YWQoKSkpOwogCiAgICAgaWYgKCFtX3JlcXVlc3QpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJbnZhbGlkU3RhdGVFcnJvciB9OwpAQCAtMjY3LDcgKzI2Nyw3IEBAIEV4Y2VwdGlvbk9yPHZv
aWQ+IElEQkN1cnNvcjo6Y29udGludWVGdW5jdGlvbihjb25zdCBJREJLZXlEYXRhJiBrZXkpCiB2
b2lkIElEQkN1cnNvcjo6dW5jaGVja2VkSXRlcmF0ZUN1cnNvcihjb25zdCBJREJLZXlEYXRhJiBr
ZXksIHVuc2lnbmVkIGNvdW50KQogewogICAgIEFTU0VSVChtX3JlcXVlc3QpOwotICAgIEFTU0VS
VCgmZWZmZWN0aXZlT2JqZWN0U3RvcmUoKS50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2lu
VGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhy
ZWFkTG9jYWxEYXRhRm9yVGhyZWFkKGVmZmVjdGl2ZU9iamVjdFN0b3JlKCkudHJhbnNhY3Rpb24o
KS5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBtX3JlcXVlc3QtPndpbGxJdGVy
YXRlQ3Vyc29yKCp0aGlzKTsKICAgICB0cmFuc2FjdGlvbigpLml0ZXJhdGVDdXJzb3IoKnRoaXMs
IHsga2V5LCB7IH0sIGNvdW50IH0pOwpAQCAtMjc2LDcgKzI3Niw3IEBAIHZvaWQgSURCQ3Vyc29y
Ojp1bmNoZWNrZWRJdGVyYXRlQ3Vyc29yKGNvbnN0IElEQktleURhdGEmIGtleSwgdW5zaWduZWQg
Y291bnQpCiB2b2lkIElEQkN1cnNvcjo6dW5jaGVja2VkSXRlcmF0ZUN1cnNvcihjb25zdCBJREJL
ZXlEYXRhJiBrZXksIGNvbnN0IElEQktleURhdGEmIHByaW1hcnlLZXkpCiB7CiAgICAgQVNTRVJU
KG1fcmVxdWVzdCk7Ci0gICAgQVNTRVJUKCZlZmZlY3RpdmVPYmplY3RTdG9yZSgpLnRyYW5zYWN0
aW9uKCkuZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOwor
ICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQoZWZmZWN0aXZlT2Jq
ZWN0U3RvcmUoKS50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkpKTsKIAog
ICAgIG1fcmVxdWVzdC0+d2lsbEl0ZXJhdGVDdXJzb3IoKnRoaXMpOwogICAgIHRyYW5zYWN0aW9u
KCkuaXRlcmF0ZUN1cnNvcigqdGhpcywgeyBrZXksIHByaW1hcnlLZXksIDAgfSk7CkBAIC0yODUs
NyArMjg1LDcgQEAgdm9pZCBJREJDdXJzb3I6OnVuY2hlY2tlZEl0ZXJhdGVDdXJzb3IoY29uc3Qg
SURCS2V5RGF0YSYga2V5LCBjb25zdCBJREJLZXlEYXRhJgogRXhjZXB0aW9uT3I8UmVmPFdlYkNv
cmU6OklEQlJlcXVlc3Q+PiBJREJDdXJzb3I6OmRlbGV0ZUZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0
JiBzdGF0ZSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCQ3Vyc29yOjpkZWxldGVGdW5jdGlv
biIpOwotICAgIEFTU0VSVCgmZWZmZWN0aXZlT2JqZWN0U3RvcmUoKS50cmFuc2FjdGlvbigpLmRh
dGFiYXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NF
UlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKGVmZmVjdGl2ZU9iamVjdFN0b3Jl
KCkudHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBpZiAo
c291cmNlc0RlbGV0ZWQoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0
ZUVycm9yLCAiRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZScgb24gJ0lEQkN1cnNvcic6IFRoZSBj
dXJzb3IncyBzb3VyY2Ugb3IgZWZmZWN0aXZlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVk
LiJfcyB9OwpAQCAtMzE1LDcgKzMxNSw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxXZWJDb3JlOjpJREJS
ZXF1ZXN0Pj4gSURCQ3Vyc29yOjpkZWxldGVGdW5jdGlvbihKU0dsb2JhbE9iamVjdCYKIGJvb2wg
SURCQ3Vyc29yOjpzZXRHZXRSZXN1bHQoSURCUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSURCR2V0
UmVzdWx0JiBnZXRSZXN1bHQpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQkN1cnNvcjo6c2V0
R2V0UmVzdWx0IC0gY3VycmVudCBrZXkgJXMiLCBnZXRSZXN1bHQua2V5RGF0YSgpLmxvZ2dpbmdT
dHJpbmcoKS5zdWJzdHJpbmcoMCwgMTAwKS51dGY4KCkuZGF0YSgpKTsKLSAgICBBU1NFUlQoJmVm
ZmVjdGl2ZU9iamVjdFN0b3JlKCkudHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVh
ZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExv
Y2FsRGF0YUZvclRocmVhZChlZmZlY3RpdmVPYmplY3RTdG9yZSgpLnRyYW5zYWN0aW9uKCkuZGF0
YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgYXV0byogY29udGV4dCA9IHJlcXVlc3Qu
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29udGV4dCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAppbmRleCBjNjYzZjg3
YmI2NmEwZTM1ZWY3NjdkNjMxYjg3ZDZjYTM1NmU5MmI1Li5jMDZkOTFmZGVmNmJmNzk3Y2Y0N2Mw
NDM3Mzk1ZWRmYWZhZTkxN2ZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2UuY3BwCkBAIC02Nyw3ICs2Nyw3IEBAIElEQkRhdGFiYXNlOjpJREJE
YXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJDbGllbnQ6OklEQkNv
bm5lY3RpCiAKIElEQkRhdGFiYXNlOjp+SURCRGF0YWJhc2UoKQogewotICAgIEFTU0VSVCgmb3Jp
Z2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNz
VGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG9yaWdpblRocmVhZCgpKSk7CiAKICAgICBpZiAoIW1f
Y2xvc2VkSW5TZXJ2ZXIpCiAgICAgICAgIG1fY29ubmVjdGlvblByb3h5LT5kYXRhYmFzZUNvbm5l
Y3Rpb25DbG9zZWQoKnRoaXMpOwpAQCAtNzcsNyArNzcsNyBAQCBJREJEYXRhYmFzZTo6fklEQkRh
dGFiYXNlKCkKIAogYm9vbCBJREJEYXRhYmFzZTo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QK
IHsKLSAgICBBU1NFUlQoJm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSB8fCBU
aHJlYWQ6Om1heUJlR0NUaHJlYWQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2Fs
RGF0YUZvclRocmVhZChvcmlnaW5UaHJlYWQoKSkgfHwgVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkp
OwogCiAgICAgaWYgKG1fY2xvc2VkSW5TZXJ2ZXIgfHwgaXNDb250ZXh0U3RvcHBlZCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC05MCwxOSArOTAsMTkgQEAgYm9vbCBJREJEYXRhYmFzZTo6
aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKIAogY29uc3QgU3RyaW5nIElEQkRhdGFiYXNlOjpu
YW1lKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoJm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1
cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChv
cmlnaW5UaHJlYWQoKSkpOwogICAgIHJldHVybiBtX2luZm8ubmFtZSgpOwogfQogCiB1aW50NjRf
dCBJREJEYXRhYmFzZTo6dmVyc2lvbigpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCZvcmlnaW5UaHJl
YWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRM
b2NhbERhdGFGb3JUaHJlYWQob3JpZ2luVGhyZWFkKCkpKTsKICAgICByZXR1cm4gbV9pbmZvLnZl
cnNpb24oKTsKIH0KIAogUmVmPERPTVN0cmluZ0xpc3Q+IElEQkRhdGFiYXNlOjpvYmplY3RTdG9y
ZU5hbWVzKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoJm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6
OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVh
ZChvcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgYXV0byBvYmplY3RTdG9yZU5hbWVzID0gRE9NU3Ry
aW5nTGlzdDo6Y3JlYXRlKCk7CiAgICAgZm9yIChhdXRvJiBuYW1lIDogbV9pbmZvLm9iamVjdFN0
b3JlTmFtZXMoKSkKQEAgLTExMyw3ICsxMTMsNyBAQCBSZWY8RE9NU3RyaW5nTGlzdD4gSURCRGF0
YWJhc2U6Om9iamVjdFN0b3JlTmFtZXMoKSBjb25zdAogCiB2b2lkIElEQkRhdGFiYXNlOjpyZW5h
bWVPYmplY3RTdG9yZShJREJPYmplY3RTdG9yZSYgb2JqZWN0U3RvcmUsIGNvbnN0IFN0cmluZyYg
bmV3TmFtZSkKIHsKLSAgICBBU1NFUlQoJm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJl
bnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChvcmln
aW5UaHJlYWQoKSkpOwogICAgIEFTU0VSVChtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik7CiAg
ICAgQVNTRVJUKG1faW5mby5oYXNPYmplY3RTdG9yZShvYmplY3RTdG9yZS5pbmZvKCkubmFtZSgp
KSk7CiAKQEAgLTEyNCw3ICsxMjQsNyBAQCB2b2lkIElEQkRhdGFiYXNlOjpyZW5hbWVPYmplY3RT
dG9yZShJREJPYmplY3RTdG9yZSYgb2JqZWN0U3RvcmUsIGNvbnN0IFN0cmluZyYgbgogCiB2b2lk
IElEQkRhdGFiYXNlOjpyZW5hbWVJbmRleChJREJJbmRleCYgaW5kZXgsIGNvbnN0IFN0cmluZyYg
bmV3TmFtZSkKIHsKLSAgICBBU1NFUlQoJm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJl
bnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChvcmln
aW5UaHJlYWQoKSkpOwogICAgIEFTU0VSVChtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik7CiAg
ICAgQVNTRVJUKG1faW5mby5oYXNPYmplY3RTdG9yZShpbmRleC5vYmplY3RTdG9yZSgpLmluZm8o
KS5uYW1lKCkpKTsKICAgICBBU1NFUlQobV9pbmZvLmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3Jl
KGluZGV4Lm9iamVjdFN0b3JlKCkuaW5mbygpLm5hbWUoKSktPmhhc0luZGV4KGluZGV4LmluZm8o
KS5uYW1lKCkpKTsKQEAgLTEzOCw3ICsxMzgsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCT2JqZWN0
U3RvcmU+PiBJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYQog
ewogICAgIExPRyhJbmRleGVkREIsICJJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUgLSAo
JXMgJXMpIiwgbV9pbmZvLm5hbWUoKS51dGY4KCkuZGF0YSgpLCBuYW1lLnV0ZjgoKS5kYXRhKCkp
OwogCi0gICAgQVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOwor
ICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQob3JpZ2luVGhyZWFk
KCkpKTsKICAgICBBU1NFUlQoIW1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uIHx8IG1fdmVyc2lv
bkNoYW5nZVRyYW5zYWN0aW9uLT5pc1ZlcnNpb25DaGFuZ2UoKSk7CiAKICAgICBpZiAoIW1fdmVy
c2lvbkNoYW5nZVRyYW5zYWN0aW9uKQpAQCAtMTY4LDcgKzE2OCw3IEBAIEV4Y2VwdGlvbk9yPFJl
ZjxJREJUcmFuc2FjdGlvbj4+IElEQkRhdGFiYXNlOjp0cmFuc2FjdGlvbihTdHJpbmdPclZlY3Rv
ck9mU3RyaW5nCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjp0cmFuc2FjdGlv
biIpOwogCi0gICAgQVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkp
OworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQob3JpZ2luVGhy
ZWFkKCkpKTsKIAogICAgIGlmIChtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiAmJiAhbV92ZXJz
aW9uQ2hhbmdlVHJhbnNhY3Rpb24tPmlzRmluaXNoZWRPckZpbmlzaGluZygpKQogICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJGYWlsZWQgdG8gZXhlY3V0ZSAn
dHJhbnNhY3Rpb24nIG9uICdJREJEYXRhYmFzZSc6IEEgdmVyc2lvbiBjaGFuZ2UgdHJhbnNhY3Rp
b24gaXMgcnVubmluZy4iX3MgfTsKQEAgLTIxOCw3ICsyMTgsNyBAQCBFeGNlcHRpb25Pcjx2b2lk
PiBJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBvYmplY3RTdG9y
ZU5hbWUpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RT
dG9yZSIpOwogCi0gICAgQVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50
KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQob3JpZ2lu
VGhyZWFkKCkpKTsKIAogICAgIGlmICghbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pCiAgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgIkZhaWxlZCB0byBleGVj
dXRlICdkZWxldGVPYmplY3RTdG9yZScgb24gJ0lEQkRhdGFiYXNlJzogVGhlIGRhdGFiYXNlIGlz
IG5vdCBydW5uaW5nIGEgdmVyc2lvbiBjaGFuZ2UgdHJhbnNhY3Rpb24uIl9zIH07CkBAIC0yMzks
NyArMjM5LDcgQEAgdm9pZCBJREJEYXRhYmFzZTo6Y2xvc2UoKQogewogICAgIExPRyhJbmRleGVk
REIsICJJREJEYXRhYmFzZTo6Y2xvc2UgLSAlIiBQUkl1NjQsIG1fZGF0YWJhc2VDb25uZWN0aW9u
SWRlbnRpZmllcik7CiAKLSAgICBBU1NFUlQoJm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1
cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChv
cmlnaW5UaHJlYWQoKSkpOwogCiAgICAgaWYgKCFtX2Nsb3NlUGVuZGluZykgewogICAgICAgICBt
X2Nsb3NlUGVuZGluZyA9IHRydWU7CkBAIC0yNjIsNyArMjYyLDcgQEAgdm9pZCBJREJEYXRhYmFz
ZTo6Y29ubmVjdGlvblRvU2VydmVyTG9zdChjb25zdCBJREJFcnJvciYgZXJyb3IpCiB7CiAgICAg
TE9HKEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjpjb25uZWN0aW9uVG9TZXJ2ZXJMb3N0IC0gJSIg
UFJJdTY0LCBtX2RhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIpOwogCi0gICAgQVNTRVJUKCZv
cmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nl
c3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQob3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIG1fY2xv
c2VQZW5kaW5nID0gdHJ1ZTsKICAgICBtX2Nsb3NlZEluU2VydmVyID0gdHJ1ZTsKQEAgLTI5Miw3
ICsyOTIsNyBAQCB2b2lkIElEQkRhdGFiYXNlOjptYXliZUNsb3NlSW5TZXJ2ZXIoKQogewogICAg
IExPRyhJbmRleGVkREIsICJJREJEYXRhYmFzZTo6bWF5YmVDbG9zZUluU2VydmVyIC0gJSIgUFJJ
dTY0LCBtX2RhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIpOwogCi0gICAgQVNTRVJUKCZvcmln
aW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NU
aHJlYWRMb2NhbERhdGFGb3JUaHJlYWQob3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIGlmIChtX2Ns
b3NlZEluU2VydmVyKQogICAgICAgICByZXR1cm47CkBAIC0zMDksNyArMzA5LDcgQEAgdm9pZCBJ
REJEYXRhYmFzZTo6bWF5YmVDbG9zZUluU2VydmVyKCkKIAogY29uc3QgY2hhciogSURCRGF0YWJh
c2U6OmFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdAogewotICAgIEFTU0VSVCgmb3JpZ2luVGhy
ZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFk
TG9jYWxEYXRhRm9yVGhyZWFkKG9yaWdpblRocmVhZCgpKSk7CiAgICAgcmV0dXJuICJJREJEYXRh
YmFzZSI7CiB9CiAKQEAgLTMxNyw3ICszMTcsNyBAQCB2b2lkIElEQkRhdGFiYXNlOjpzdG9wKCkK
IHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6OnN0b3AgLSAlIiBQUkl1NjQsIG1f
ZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllcik7CiAKLSAgICBBU1NFUlQoJm9yaWdpblRocmVh
ZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExv
Y2FsRGF0YUZvclRocmVhZChvcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgcmVtb3ZlQWxsRXZlbnRM
aXN0ZW5lcnMoKTsKIApAQCAtMzQwLDcgKzM0MCw3IEBAIFJlZjxJREJUcmFuc2FjdGlvbj4gSURC
RGF0YWJhc2U6OnN0YXJ0VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKGNvbnN0IElEQlRyYW5zYWN0
CiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjpzdGFydFZlcnNpb25DaGFuZ2VU
cmFuc2FjdGlvbiAlcyIsIGluZm8uaWRlbnRpZmllcigpLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKIAotICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVu
dCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG9yaWdp
blRocmVhZCgpKSk7CiAgICAgQVNTRVJUKCFtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik7CiAg
ICAgQVNTRVJUKGluZm8ubW9kZSgpID09IElEQlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbmNoYW5n
ZSk7CiAgICAgQVNTRVJUKCFtX2Nsb3NlUGVuZGluZyk7CkBAIC0zNTgsNyArMzU4LDcgQEAgdm9p
ZCBJREJEYXRhYmFzZTo6ZGlkU3RhcnRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24pCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjpkaWRTdGFydFRyYW5z
YWN0aW9uICVzIiwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKS5sb2dnaW5nU3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CiAgICAgQVNTRVJUKCFtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlv
bik7Ci0gICAgQVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOwor
ICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQob3JpZ2luVGhyZWFk
KCkpKTsKIAogICAgIC8vIEl0IGlzIHBvc3NpYmxlIGZvciB0aGUgY2xpZW50IHRvIGhhdmUgYWJv
cnRlZCBhIHRyYW5zYWN0aW9uIGJlZm9yZSB0aGUgc2VydmVyIHJlcGxpZXMgYmFjayB0aGF0IGl0
IGhhcyBzdGFydGVkLgogICAgIGlmIChtX2Fib3J0aW5nVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRy
YW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkpKQpAQCAtMzcxLDcgKzM3MSw3IEBAIHZvaWQg
SURCRGF0YWJhc2U6OndpbGxDb21taXRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24pCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjp3aWxsQ29tbWl0VHJh
bnNhY3Rpb24gJXMiLCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLmxvZ2dpbmdTdHJp
bmcoKS51dGY4KCkuZGF0YSgpKTsKIAotICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0gJlRo
cmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9y
VGhyZWFkKG9yaWdpblRocmVhZCgpKSk7CiAKICAgICBhdXRvIHJlZlRyYW5zYWN0aW9uID0gbV9h
Y3RpdmVUcmFuc2FjdGlvbnMudGFrZSh0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKTsK
ICAgICBBU1NFUlQocmVmVHJhbnNhY3Rpb24pOwpAQCAtMzgyLDcgKzM4Miw3IEBAIHZvaWQgSURC
RGF0YWJhc2U6OmRpZENvbW1pdFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlv
bikKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6OmRpZENvbW1pdFRyYW5zYWN0
aW9uICVzIiwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKS5sb2dnaW5nU3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7CiAKLSAgICBBU1NFUlQoJm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6
OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVh
ZChvcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgaWYgKG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9u
ID09ICZ0cmFuc2FjdGlvbikKICAgICAgICAgbV9pbmZvLnNldFZlcnNpb24odHJhbnNhY3Rpb24u
aW5mbygpLm5ld1ZlcnNpb24oKSk7CkBAIC0zOTQsNyArMzk0LDcgQEAgdm9pZCBJREJEYXRhYmFz
ZTo6d2lsbEFib3J0VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQogewog
ICAgIExPRyhJbmRleGVkREIsICJJREJEYXRhYmFzZTo6d2lsbEFib3J0VHJhbnNhY3Rpb24gJXMi
LCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKIAotICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVu
dCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG9yaWdp
blRocmVhZCgpKSk7CiAKICAgICBhdXRvIHJlZlRyYW5zYWN0aW9uID0gbV9hY3RpdmVUcmFuc2Fj
dGlvbnMudGFrZSh0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKTsKICAgICBpZiAoIXJl
ZlRyYW5zYWN0aW9uKQpAQCAtNDE0LDcgKzQxNCw3IEBAIHZvaWQgSURCRGF0YWJhc2U6OmRpZEFi
b3J0VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQogewogICAgIExPRyhJ
bmRleGVkREIsICJJREJEYXRhYmFzZTo6ZGlkQWJvcnRUcmFuc2FjdGlvbiAlcyIsIHRyYW5zYWN0
aW9uLmluZm8oKS5pZGVudGlmaWVyKCkubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwog
Ci0gICAgQVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAg
IEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQob3JpZ2luVGhyZWFkKCkp
KTsKIAogICAgIGlmICh0cmFuc2FjdGlvbi5pc1ZlcnNpb25DaGFuZ2UoKSkgewogICAgICAgICBB
U1NFUlQodHJhbnNhY3Rpb24ub3JpZ2luYWxEYXRhYmFzZUluZm8oKSk7CkBAIC00MzAsNyArNDMw
LDcgQEAgdm9pZCBJREJEYXRhYmFzZTo6ZGlkQ29tbWl0T3JBYm9ydFRyYW5zYWN0aW9uKElEQlRy
YW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJh
c2U6OmRpZENvbW1pdE9yQWJvcnRUcmFuc2FjdGlvbiAlcyIsIHRyYW5zYWN0aW9uLmluZm8oKS5p
ZGVudGlmaWVyKCkubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgQVNTRVJU
KCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5B
Y2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQob3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIGlm
IChtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiA9PSAmdHJhbnNhY3Rpb24pCiAgICAgICAgIG1f
dmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uID0gbnVsbHB0cjsKQEAgLTQ2MCw3ICs0NjAsNyBAQCB2
b2lkIElEQkRhdGFiYXNlOjpmaXJlVmVyc2lvbkNoYW5nZUV2ZW50KGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgcmVxdWVzdElkZQogICAgIHVpbnQ2NF90IGN1cnJlbnRWZXJzaW9uID0gbV9p
bmZvLnZlcnNpb24oKTsKICAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6OmZpcmVWZXJz
aW9uQ2hhbmdlRXZlbnQgLSBjdXJyZW50IHZlcnNpb24gJSIgUFJJdTY0ICIsIHJlcXVlc3RlZCB2
ZXJzaW9uICUiIFBSSXU2NCAiLCBjb25uZWN0aW9uICUiIFBSSXU2NCAiICglcCkiLCBjdXJyZW50
VmVyc2lvbiwgcmVxdWVzdGVkVmVyc2lvbiwgbV9kYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVy
LCB0aGlzKTsKIAotICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVu
dCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG9yaWdp
blRocmVhZCgpKSk7CiAKICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSB8fCBtX2Ns
b3NlUGVuZGluZykgewogICAgICAgICBjb25uZWN0aW9uUHJveHkoKS5kaWRGaXJlVmVyc2lvbkNo
YW5nZUV2ZW50KG1fZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllciwgcmVxdWVzdElkZW50aWZp
ZXIpOwpAQCAtNDc1LDcgKzQ3NSw3IEBAIHZvaWQgSURCRGF0YWJhc2U6OmZpcmVWZXJzaW9uQ2hh
bmdlRXZlbnQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiByZXF1ZXN0SWRlCiB2b2lkIElE
QkRhdGFiYXNlOjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkKIHsKICAgICBMT0coSW5kZXhl
ZERCLCAiSURCRGF0YWJhc2U6OmRpc3BhdGNoRXZlbnQgKCUiIFBSSXU2NCAiKSAoJXApIiwgbV9k
YXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyLCB0aGlzKTsKLSAgICBBU1NFUlQoJm9yaWdpblRo
cmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVh
ZExvY2FsRGF0YUZvclRocmVhZChvcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgYXV0byBwcm90ZWN0
ZWRUaGlzID0gbWFrZVJlZigqdGhpcyk7CiAKQEAgLTQ4Nyw3ICs0ODcsNyBAQCB2b2lkIElEQkRh
dGFiYXNlOjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkKIAogdm9pZCBJREJEYXRhYmFzZTo6
ZGlkQ3JlYXRlSW5kZXhJbmZvKGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbykKIHsKLSAgICBBU1NF
UlQoJm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNh
bkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChvcmlnaW5UaHJlYWQoKSkpOwogCiAgICAg
YXV0byogb2JqZWN0U3RvcmUgPSBtX2luZm8uaW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUoaW5m
by5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSk7CiAgICAgQVNTRVJUKG9iamVjdFN0b3JlKTsKQEAg
LTQ5Niw3ICs0OTYsNyBAQCB2b2lkIElEQkRhdGFiYXNlOjpkaWRDcmVhdGVJbmRleEluZm8oY29u
c3QgSURCSW5kZXhJbmZvJiBpbmZvKQogCiB2b2lkIElEQkRhdGFiYXNlOjpkaWREZWxldGVJbmRl
eEluZm8oY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvKQogewotICAgIEFTU0VSVCgmb3JpZ2luVGhy
ZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFk
TG9jYWxEYXRhRm9yVGhyZWFkKG9yaWdpblRocmVhZCgpKSk7CiAKICAgICBhdXRvKiBvYmplY3RT
dG9yZSA9IG1faW5mby5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShpbmZvLm9iamVjdFN0b3Jl
SWRlbnRpZmllcigpKTsKICAgICBBU1NFUlQob2JqZWN0U3RvcmUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwCmluZGV4IGVhNDI3MDI4MjVkMmY5YTI1
YmRkZTNkMTM4MzY2MDJkYmQyMjE2MTMuLmU4MTVkZjdkMGZkZjE1YjAzNDM0MWE1NmQzMDI4OWVm
ODUwNTYxYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkluZGV4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRl
eC5jcHAKQEAgLTQ3LDE0ICs0NywxNCBAQCBJREJJbmRleDo6SURCSW5kZXgoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvLCBJRAogICAgICwg
bV9vcmlnaW5hbEluZm8oaW5mbykKICAgICAsIG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCiB7
Ci0gICAgQVNTRVJUKCZtX29iamVjdFN0b3JlLnRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5vcmln
aW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NU
aHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9vYmplY3RTdG9yZS50cmFuc2FjdGlvbigpLmRhdGFi
YXNlKCkub3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIHN1c3BlbmRJZk5lZWRlZCgpOwogfQogCiBJ
REJJbmRleDo6fklEQkluZGV4KCkKIHsKLSAgICBBU1NFUlQoJm1fb2JqZWN0U3RvcmUudHJhbnNh
Y3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7
CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX29iamVjdFN0
b3JlLnRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSkpOwogfQogCiBjb25z
dCBjaGFyKiBJREJJbmRleDo6YWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0CkBAIC02OSwxMyAr
NjksMTMgQEAgYm9vbCBJREJJbmRleDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKIAogY29u
c3QgU3RyaW5nJiBJREJJbmRleDo6bmFtZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCZtX29iamVj
dFN0b3JlLnRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFk
OjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJl
YWQobV9vYmplY3RTdG9yZS50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkp
KTsKICAgICByZXR1cm4gbV9pbmZvLm5hbWUoKTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gSURC
SW5kZXg6OnNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIEFTU0VSVCgmbV9vYmpl
Y3RTdG9yZS50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRocmVh
ZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhy
ZWFkKG1fb2JqZWN0U3RvcmUudHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgp
KSk7CiAKICAgICBpZiAobV9kZWxldGVkKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52
YWxpZFN0YXRlRXJyb3IsICJGYWlsZWQgc2V0IHByb3BlcnR5ICduYW1lJyBvbiAnSURCSW5kZXgn
OiBUaGUgaW5kZXggaGFzIGJlZW4gZGVsZXRlZC4iX3MgfTsKQEAgLTEwMywzMSArMTAzLDMxIEBA
IEV4Y2VwdGlvbk9yPHZvaWQ+IElEQkluZGV4OjpzZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkK
IAogSURCT2JqZWN0U3RvcmUmIElEQkluZGV4OjpvYmplY3RTdG9yZSgpCiB7Ci0gICAgQVNTRVJU
KCZtX29iamVjdFN0b3JlLnRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSA9
PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERh
dGFGb3JUaHJlYWQobV9vYmplY3RTdG9yZS50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2lu
VGhyZWFkKCkpKTsKICAgICByZXR1cm4gbV9vYmplY3RTdG9yZTsKIH0KIAogY29uc3QgSURCS2V5
UGF0aCYgSURCSW5kZXg6OmtleVBhdGgoKSBjb25zdAogewotICAgIEFTU0VSVCgmbV9vYmplY3RT
dG9yZS50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6
Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFk
KG1fb2JqZWN0U3RvcmUudHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpKSk7
CiAgICAgcmV0dXJuIG1faW5mby5rZXlQYXRoKCk7CiB9CiAKIGJvb2wgSURCSW5kZXg6OnVuaXF1
ZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCZtX29iamVjdFN0b3JlLnRyYW5zYWN0aW9uKCkuZGF0
YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VS
VChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9vYmplY3RTdG9yZS50cmFuc2Fj
dGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkpKTsKICAgICByZXR1cm4gbV9pbmZvLnVu
aXF1ZSgpOwogfQogCiBib29sIElEQkluZGV4OjptdWx0aUVudHJ5KCkgY29uc3QKIHsKLSAgICBB
U1NFUlQoJm1fb2JqZWN0U3RvcmUudHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVh
ZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExv
Y2FsRGF0YUZvclRocmVhZChtX29iamVjdFN0b3JlLnRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5v
cmlnaW5UaHJlYWQoKSkpOwogICAgIHJldHVybiBtX2luZm8ubXVsdGlFbnRyeSgpOwogfQogCiB2
b2lkIElEQkluZGV4Ojpyb2xsYmFja0luZm9Gb3JWZXJzaW9uQ2hhbmdlQWJvcnQoKQogewotICAg
IEFTU0VSVCgmbV9vYmplY3RTdG9yZS50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhy
ZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFk
TG9jYWxEYXRhRm9yVGhyZWFkKG1fb2JqZWN0U3RvcmUudHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgp
Lm9yaWdpblRocmVhZCgpKSk7CiAKICAgICAvLyBPbmx5IHJvbGxiYWNrIHRvIHRoZSBvcmlnaW5h
bCBpbmZvIGlmIHRoaXMgaW5kZXggc3RpbGwgZXhpc3RzIGluIHRoZSByb2xsZWQtYmFjayBkYXRh
YmFzZSBpbmZvLgogICAgIGF1dG8qIG9iamVjdFN0b3JlSW5mbyA9IG1fb2JqZWN0U3RvcmUudHJh
bnNhY3Rpb24oKS5kYXRhYmFzZSgpLmluZm8oKS5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZSht
X29iamVjdFN0b3JlLmluZm8oKS5pZGVudGlmaWVyKCkpOwpAQCAtMTQ2LDcgKzE0Niw3IEBAIHZv
aWQgSURCSW5kZXg6OnJvbGxiYWNrSW5mb0ZvclZlcnNpb25DaGFuZ2VBYm9ydCgpCiBFeGNlcHRp
b25PcjxSZWY8SURCUmVxdWVzdD4+IElEQkluZGV4Ojpkb09wZW5DdXJzb3IoSlNHbG9iYWxPYmpl
Y3QmIGV4ZWNTdGF0ZSwgSURCQ3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiwgV1RGOjpGdW5jdGlv
bjxFeGNlcHRpb25PcjxSZWZQdHI8SURCS2V5UmFuZ2U+PigpPiYmIGZ1bmN0aW9uKQogewogICAg
IExPRyhJbmRleGVkREIsICJJREJJbmRleDo6b3BlbkN1cnNvciIpOwotICAgIEFTU0VSVCgmbV9v
YmplY3RTdG9yZS50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRo
cmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9y
VGhyZWFkKG1fb2JqZWN0U3RvcmUudHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVh
ZCgpKSk7CiAKICAgICBpZiAobV9kZWxldGVkIHx8IG1fb2JqZWN0U3RvcmUuaXNEZWxldGVkKCkp
CiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgIkZhaWxlZCB0
byBleGVjdXRlICdvcGVuQ3Vyc29yJyBvbiAnSURCSW5kZXgnOiBUaGUgaW5kZXggb3IgaXRzIG9i
amVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiJfcyB9OwpAQCAtMTg5LDcgKzE4OSw3IEBAIEV4
Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCSW5kZXg6Om9wZW5DdXJzb3IoSlNHbG9iYWxP
YmplY3QmIGV4ZWNTdGF0ZSwgSlNWCiBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQklu
ZGV4Ojpkb09wZW5LZXlDdXJzb3IoSlNHbG9iYWxPYmplY3QmIGV4ZWNTdGF0ZSwgSURCQ3Vyc29y
RGlyZWN0aW9uIGRpcmVjdGlvbiwgV1RGOjpGdW5jdGlvbjxFeGNlcHRpb25PcjxSZWZQdHI8SURC
S2V5UmFuZ2U+PigpPiYmIGZ1bmN0aW9uKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJJbmRl
eDo6b3BlbktleUN1cnNvciIpOwotICAgIEFTU0VSVCgmbV9vYmplY3RTdG9yZS50cmFuc2FjdGlv
bigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAg
ICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fb2JqZWN0U3RvcmUu
dHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBpZiAobV9k
ZWxldGVkIHx8IG1fb2JqZWN0U3RvcmUuaXNEZWxldGVkKCkpCiAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgIkZhaWxlZCB0byBleGVjdXRlICdvcGVuS2V5Q3Vy
c29yJyBvbiAnSURCSW5kZXgnOiBUaGUgaW5kZXggb3IgaXRzIG9iamVjdCBzdG9yZSBoYXMgYmVl
biBkZWxldGVkLiJfcyB9OwpAQCAtMjQzLDcgKzI0Myw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJS
ZXF1ZXN0Pj4gSURCSW5kZXg6OmNvdW50KEpTR2xvYmFsT2JqZWN0JiBleGVjU3RhdGUsIEpTVmFs
dWUKIAogRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJJbmRleDo6ZG9Db3VudChKU0ds
b2JhbE9iamVjdCYgZXhlY1N0YXRlLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlKQogewot
ICAgIEFTU0VSVCgmbV9vYmplY3RTdG9yZS50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2lu
VGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhy
ZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fb2JqZWN0U3RvcmUudHJhbnNhY3Rpb24oKS5kYXRhYmFz
ZSgpLm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBpZiAobV9kZWxldGVkIHx8IG1fb2JqZWN0U3Rv
cmUuaXNEZWxldGVkKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVF
cnJvciwgIkZhaWxlZCB0byBleGVjdXRlICdjb3VudCcgb24gJ0lEQkluZGV4JzogVGhlIGluZGV4
IG9yIGl0cyBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iX3MgfTsKQEAgLTI3OCw3ICsy
NzgsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQkluZGV4OjpnZXQoSlNHbG9i
YWxPYmplY3QmIGV4ZWNTdGF0ZSwgSlNWYWx1ZSBrZQogCiBFeGNlcHRpb25PcjxSZWY8SURCUmVx
dWVzdD4+IElEQkluZGV4Ojpkb0dldChKU0dsb2JhbE9iamVjdCYgZXhlY1N0YXRlLCBFeGNlcHRp
b25PcjxJREJLZXlSYW5nZURhdGE+IHJhbmdlKQogewotICAgIEFTU0VSVCgmbV9vYmplY3RTdG9y
ZS50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3Vy
cmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1f
b2JqZWN0U3RvcmUudHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpKSk7CiAK
ICAgICBpZiAobV9kZWxldGVkIHx8IG1fb2JqZWN0U3RvcmUuaXNEZWxldGVkKCkpCiAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgIkZhaWxlZCB0byBleGVjdXRl
ICdnZXQnIG9uICdJREJJbmRleCc6IFRoZSBpbmRleCBvciBpdHMgb2JqZWN0IHN0b3JlIGhhcyBi
ZWVuIGRlbGV0ZWQuIl9zIH07CkBAIC0zMTcsNyArMzE3LDcgQEAgRXhjZXB0aW9uT3I8UmVmPElE
QlJlcXVlc3Q+PiBJREJJbmRleDo6Z2V0S2V5KEpTR2xvYmFsT2JqZWN0JiBleGVjU3RhdGUsIEpT
VmFsdWUKIAogRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJJbmRleDo6ZG9HZXRLZXko
SlNHbG9iYWxPYmplY3QmIGV4ZWNTdGF0ZSwgRXhjZXB0aW9uT3I8SURCS2V5UmFuZ2VEYXRhPiBy
YW5nZSkKIHsKLSAgICBBU1NFUlQoJm1fb2JqZWN0U3RvcmUudHJhbnNhY3Rpb24oKS5kYXRhYmFz
ZSgpLm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNh
bkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX29iamVjdFN0b3JlLnRyYW5zYWN0aW9u
KCkuZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgaWYgKG1fZGVsZXRlZCB8fCBt
X29iamVjdFN0b3JlLmlzRGVsZXRlZCgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52
YWxpZFN0YXRlRXJyb3IsICJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0S2V5JyBvbiAnSURCSW5kZXgn
OiBUaGUgaW5kZXggb3IgaXRzIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiJfcyB9OwpA
QCAtMzM5LDcgKzMzOSw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCSW5kZXg6
OmRvR2V0S2V5KEpTR2xvYmFsT2JqZWN0JiBleGVjU3RhdGUsIEV4Y2VwCiBFeGNlcHRpb25PcjxS
ZWY8SURCUmVxdWVzdD4+IElEQkluZGV4Ojpkb0dldEFsbChKU0dsb2JhbE9iamVjdCYgZXhlY1N0
YXRlLCBPcHRpb25hbDx1aW50MzJfdD4gY291bnQsIFdURjo6RnVuY3Rpb248RXhjZXB0aW9uT3I8
UmVmUHRyPElEQktleVJhbmdlPj4oKT4mJiBmdW5jdGlvbikKIHsKICAgICBMT0coSW5kZXhlZERC
LCAiSURCSW5kZXg6OmdldEFsbCIpOwotICAgIEFTU0VSVCgmbV9vYmplY3RTdG9yZS50cmFuc2Fj
dGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsK
KyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fb2JqZWN0U3Rv
cmUudHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBpZiAo
bV9kZWxldGVkIHx8IG1fb2JqZWN0U3RvcmUuaXNEZWxldGVkKCkpCiAgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgIkZhaWxlZCB0byBleGVjdXRlICdnZXRBbGwn
IG9uICdJREJJbmRleCc6IFRoZSBpbmRleCBvciBpdHMgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRl
bGV0ZWQuIl9zIH07CkBAIC0zNzYsNyArMzc2LDcgQEAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVl
c3Q+PiBJREJJbmRleDo6Z2V0QWxsKEpTR2xvYmFsT2JqZWN0JiBleGVjU3RhdGUsIEpTVmFsdWUK
IEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCSW5kZXg6OmRvR2V0QWxsS2V5cyhKU0ds
b2JhbE9iamVjdCYgZXhlY1N0YXRlLCBPcHRpb25hbDx1aW50MzJfdD4gY291bnQsIFdURjo6RnVu
Y3Rpb248RXhjZXB0aW9uT3I8UmVmUHRyPElEQktleVJhbmdlPj4oKT4mJiBmdW5jdGlvbikKIHsK
ICAgICBMT0coSW5kZXhlZERCLCAiSURCSW5kZXg6OmdldEFsbEtleXMiKTsKLSAgICBBU1NFUlQo
Jm1fb2JqZWN0U3RvcmUudHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpID09
ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0
YUZvclRocmVhZChtX29iamVjdFN0b3JlLnRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5vcmlnaW5U
aHJlYWQoKSkpOwogCiAgICAgaWYgKG1fZGVsZXRlZCB8fCBtX29iamVjdFN0b3JlLmlzRGVsZXRl
ZCgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJGYWls
ZWQgdG8gZXhlY3V0ZSAnZ2V0QWxsS2V5cycgb24gJ0lEQkluZGV4JzogVGhlIGluZGV4IG9yIGl0
cyBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iX3MgfTsKQEAgLTQxMiw3ICs0MTIsNyBA
QCBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQkluZGV4OjpnZXRBbGxLZXlzKEpTR2xv
YmFsT2JqZWN0JiBleGVjU3RhdGUsIEpTVgogCiB2b2lkIElEQkluZGV4OjptYXJrQXNEZWxldGVk
KCkKIHsKLSAgICBBU1NFUlQoJm1fb2JqZWN0U3RvcmUudHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgp
Lm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFj
Y2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX29iamVjdFN0b3JlLnRyYW5zYWN0aW9uKCku
ZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgQVNTRVJUKCFtX2RlbGV0ZWQpOwog
ICAgIG1fZGVsZXRlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKaW5kZXggNjkwNjhhNDVjNzVhY2QwY2VhMGY4NjVi
YjU4MWI0ZDA4Yzg1ZWYzYS4uZTYzYWEwYzFkN2JhYmI1NjNmMTVkZTE1NWZmZDZkODVlOTg0NDNm
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVj
dFN0b3JlLmNwcApAQCAtNjAsMTQgKzYwLDE0IEBAIElEQk9iamVjdFN0b3JlOjpJREJPYmplY3RT
dG9yZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBJREJPYmplY3RTCiAg
ICAgLCBtX29yaWdpbmFsSW5mbyhpbmZvKQogICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlv
bikKIHsKLSAgICBBU1NFUlQoJm1fdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQo
KSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2Nh
bERhdGFGb3JUaHJlYWQobV90cmFuc2FjdGlvbi5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpKSk7
CiAKICAgICBzdXNwZW5kSWZOZWVkZWQoKTsKIH0KIAogSURCT2JqZWN0U3RvcmU6On5JREJPYmpl
Y3RTdG9yZSgpCiB7Ci0gICAgQVNTRVJUKCZtX3RyYW5zYWN0aW9uLmRhdGFiYXNlKCkub3JpZ2lu
VGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhy
ZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJl
YWQoKSkpOwogfQogCiBjb25zdCBjaGFyKiBJREJPYmplY3RTdG9yZTo6YWN0aXZlRE9NT2JqZWN0
TmFtZSgpIGNvbnN0CkBAIC04MiwxMyArODIsMTMgQEAgYm9vbCBJREJPYmplY3RTdG9yZTo6aGFz
UGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKIAogY29uc3QgU3RyaW5nJiBJREJPYmplY3RTdG9yZTo6
bmFtZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCZtX3RyYW5zYWN0aW9uLmRhdGFiYXNlKCkub3Jp
Z2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNz
VGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5U
aHJlYWQoKSkpOwogICAgIHJldHVybiBtX2luZm8ubmFtZSgpOwogfQogCiBFeGNlcHRpb25Pcjx2
b2lkPiBJREJPYmplY3RTdG9yZTo6c2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAg
QVNTRVJUKCZtX3RyYW5zYWN0aW9uLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRocmVh
ZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhy
ZWFkKG1fdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgaWYg
KG1fZGVsZXRlZCkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9y
LCAiRmFpbGVkIHNldCBwcm9wZXJ0eSAnbmFtZScgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIG9i
amVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiJfcyB9OwpAQCAtMTEzLDEzICsxMTMsMTMgQEAg
RXhjZXB0aW9uT3I8dm9pZD4gSURCT2JqZWN0U3RvcmU6OnNldE5hbWUoY29uc3QgU3RyaW5nJiBu
YW1lKQogCiBjb25zdCBPcHRpb25hbDxJREJLZXlQYXRoPiYgSURCT2JqZWN0U3RvcmU6OmtleVBh
dGgoKSBjb25zdAogewotICAgIEFTU0VSVCgmbV90cmFuc2FjdGlvbi5kYXRhYmFzZSgpLm9yaWdp
blRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1Ro
cmVhZExvY2FsRGF0YUZvclRocmVhZChtX3RyYW5zYWN0aW9uLmRhdGFiYXNlKCkub3JpZ2luVGhy
ZWFkKCkpKTsKICAgICByZXR1cm4gbV9pbmZvLmtleVBhdGgoKTsKIH0KIAogUmVmPERPTVN0cmlu
Z0xpc3Q+IElEQk9iamVjdFN0b3JlOjppbmRleE5hbWVzKCkgY29uc3QKIHsKLSAgICBBU1NFUlQo
Jm1fdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJy
ZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV90
cmFuc2FjdGlvbi5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBhdXRvIGluZGV4
TmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKIApAQCAtMTM0LDIwICsxMzQsMjAgQEAg
UmVmPERPTVN0cmluZ0xpc3Q+IElEQk9iamVjdFN0b3JlOjppbmRleE5hbWVzKCkgY29uc3QKIAog
SURCVHJhbnNhY3Rpb24mIElEQk9iamVjdFN0b3JlOjp0cmFuc2FjdGlvbigpCiB7Ci0gICAgQVNT
RVJUKCZtX3RyYW5zYWN0aW9uLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6
Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFk
KG1fdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSkpOwogICAgIHJldHVybiBt
X3RyYW5zYWN0aW9uOwogfQogCiBib29sIElEQk9iamVjdFN0b3JlOjphdXRvSW5jcmVtZW50KCkg
Y29uc3QKIHsKLSAgICBBU1NFUlQoJm1fdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJl
YWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRM
b2NhbERhdGFGb3JUaHJlYWQobV90cmFuc2FjdGlvbi5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgp
KSk7CiAgICAgcmV0dXJuIG1faW5mby5hdXRvSW5jcmVtZW50KCk7CiB9CiAKIEV4Y2VwdGlvbk9y
PFJlZjxJREJSZXF1ZXN0Pj4gSURCT2JqZWN0U3RvcmU6OmRvT3BlbkN1cnNvcihKU0dsb2JhbE9i
amVjdCYgZXhlY1N0YXRlLCBJREJDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uLCBXVEY6OkZ1bmN0
aW9uPEV4Y2VwdGlvbk9yPFJlZlB0cjxJREJLZXlSYW5nZT4+KCk+JiYgZnVuY3Rpb24pCiB7CiAg
ICAgTE9HKEluZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yIik7Ci0gICAgQVNT
RVJUKCZtX3RyYW5zYWN0aW9uLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6
Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFk
KG1fdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgaWYgKG1f
ZGVsZXRlZCkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAi
RmFpbGVkIHRvIGV4ZWN1dGUgJ29wZW5DdXJzb3InIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBv
YmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iX3MgfTsKQEAgLTE4NSw3ICsxODUsNyBAQCBF
eGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yKEpT
R2xvYmFsT2JqZWN0JiBleGVjU3RhdAogRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJP
YmplY3RTdG9yZTo6ZG9PcGVuS2V5Q3Vyc29yKEpTR2xvYmFsT2JqZWN0JiBleGVjU3RhdGUsIElE
QkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIFdURjo6RnVuY3Rpb248RXhjZXB0aW9uT3I8UmVm
UHRyPElEQktleVJhbmdlPj4oKT4mJiBmdW5jdGlvbikKIHsKICAgICBMT0coSW5kZXhlZERCLCAi
SURCT2JqZWN0U3RvcmU6Om9wZW5LZXlDdXJzb3IiKTsKLSAgICBBU1NFUlQoJm1fdHJhbnNhY3Rp
b24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAg
IEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV90cmFuc2FjdGlvbi5k
YXRhYmFzZSgpLm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBpZiAobV9kZWxldGVkKQogICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJGYWlsZWQgdG8gZXhlY3V0
ZSAnb3BlbktleUN1cnNvcicgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIG9iamVjdCBzdG9yZSBo
YXMgYmVlbiBkZWxldGVkLiJfcyB9OwpAQCAtMjIzLDcgKzIyMyw3IEBAIEV4Y2VwdGlvbk9yPFJl
ZjxJREJSZXF1ZXN0Pj4gSURCT2JqZWN0U3RvcmU6Om9wZW5LZXlDdXJzb3IoSlNHbG9iYWxPYmpl
Y3QmIGV4ZWNTCiBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpn
ZXQoSlNHbG9iYWxPYmplY3QmIGV4ZWNTdGF0ZSwgSlNWYWx1ZSBrZXkpCiB7CiAgICAgTE9HKElu
ZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjpnZXQiKTsKLSAgICBBU1NFUlQoJm1fdHJhbnNhY3Rp
b24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAg
IEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV90cmFuc2FjdGlvbi5k
YXRhYmFzZSgpLm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBpZiAobV9kZWxldGVkKQogICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJGYWlsZWQgdG8gZXhlY3V0
ZSAnZ2V0JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRl
bGV0ZWQuIl9zIH07CkBAIC0yNDEsNyArMjQxLDcgQEAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVl
c3Q+PiBJREJPYmplY3RTdG9yZTo6Z2V0KEpTR2xvYmFsT2JqZWN0JiBleGVjU3RhdGUsIEpTVmEK
IEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCT2JqZWN0U3RvcmU6OmdldChKU0dsb2Jh
bE9iamVjdCYgZXhlY1N0YXRlLCBJREJLZXlSYW5nZSoga2V5UmFuZ2UpCiB7CiAgICAgTE9HKElu
ZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjpnZXQiKTsKLSAgICBBU1NFUlQoJm1fdHJhbnNhY3Rp
b24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAg
IEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV90cmFuc2FjdGlvbi5k
YXRhYmFzZSgpLm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBpZiAobV9kZWxldGVkKQogICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJGYWlsZWQgdG8gZXhlY3V0
ZSAnZ2V0JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRl
bGV0ZWQuIl9zIH07CkBAIC0yNTksNyArMjU5LDcgQEAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVl
c3Q+PiBJREJPYmplY3RTdG9yZTo6Z2V0KEpTR2xvYmFsT2JqZWN0JiBleGVjU3RhdGUsIElEQksK
IEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCT2JqZWN0U3RvcmU6OmdldEtleShKU0ds
b2JhbE9iamVjdCYgZXhlY1N0YXRlLCBKU1ZhbHVlIGtleSkKIHsKICAgICBMT0coSW5kZXhlZERC
LCAiSURCT2JqZWN0U3RvcmU6OmdldEtleSIpOwotICAgIEFTU0VSVCgmbV90cmFuc2FjdGlvbi5k
YXRhYmFzZSgpLm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNT
RVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX3RyYW5zYWN0aW9uLmRhdGFi
YXNlKCkub3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIGlmIChtX2RlbGV0ZWQpCiAgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgIkZhaWxlZCB0byBleGVjdXRlICdn
ZXRLZXknIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVs
ZXRlZC4iX3MgfTsKQEAgLTI3Nyw3ICsyNzcsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVz
dD4+IElEQk9iamVjdFN0b3JlOjpnZXRLZXkoSlNHbG9iYWxPYmplY3QmIGV4ZWNTdGF0ZSwgSgog
RXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJPYmplY3RTdG9yZTo6Z2V0S2V5KEpTR2xv
YmFsT2JqZWN0JiBleGVjU3RhdGUsIElEQktleVJhbmdlKiBrZXlSYW5nZSkKIHsKICAgICBMT0co
SW5kZXhlZERCLCAiSURCT2JqZWN0U3RvcmU6OmdldEtleSIpOwotICAgIEFTU0VSVCgmbV90cmFu
c2FjdGlvbi5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7
CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX3RyYW5zYWN0
aW9uLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIGlmIChtX2RlbGV0ZWQpCiAg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgIkZhaWxlZCB0byBl
eGVjdXRlICdnZXRLZXknIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFz
IGJlZW4gZGVsZXRlZC4iX3MgfTsKQEAgLTMxOSw3ICszMTksNyBAQCBFeGNlcHRpb25PcjxSZWY8
SURCUmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpwdXRPckFkZChKU0dsb2JhbE9iamVjdCYgc3Rh
dGUsIEpTVgogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAg
IExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6cHV0T3JBZGQiKTsKLSAgICBBU1NFUlQo
Jm1fdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJy
ZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV90
cmFuc2FjdGlvbi5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBhdXRvIGNvbnRl
eHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0RnJvbUV4ZWNTdGF0ZSgmc3RhdGUpOwogICAgIGlm
ICghY29udGV4dCkKQEAgLTM4OSw3ICszODksNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVz
dD4+IElEQk9iamVjdFN0b3JlOjpkZWxldGVGdW5jdGlvbihKU0dsb2JhbE9iamVjdCYgZXhlYwog
RXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJPYmplY3RTdG9yZTo6ZG9EZWxldGUoSlNH
bG9iYWxPYmplY3QmIGV4ZWNTdGF0ZSwgV1RGOjpGdW5jdGlvbjxFeGNlcHRpb25PcjxSZWZQdHI8
SURCS2V5UmFuZ2U+PigpPiYmIGZ1bmN0aW9uKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJP
YmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24iKTsKLSAgICBBU1NFUlQoJm1fdHJhbnNhY3Rpb24u
ZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFT
U0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV90cmFuc2FjdGlvbi5kYXRh
YmFzZSgpLm9yaWdpblRocmVhZCgpKSk7CiAKICAgICAvLyBUaGUgSURCIHNwZWMgZm9yIHNldmVy
YWwgSURCT2JqZWN0U3RvcmUgbWV0aG9kcyBzdGF0ZXMgdGhhdCB0cmFuc2FjdGlvbiByZWxhdGVk
IGV4Y2VwdGlvbnMgc2hvdWxkIGZpcmUgYmVmb3JlCiAgICAgLy8gdGhlIGV4Y2VwdGlvbiBmb3Ig
YW4gb2JqZWN0IHN0b3JlIGJlaW5nIGRlbGV0ZWQuCkBAIC00MjksNyArNDI5LDcgQEAgRXhjZXB0
aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24oSlNH
bG9iYWxPYmplY3QmIGV4ZWMKIEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCT2JqZWN0
U3RvcmU6OmNsZWFyKEpTR2xvYmFsT2JqZWN0JiBleGVjU3RhdGUpCiB7CiAgICAgTE9HKEluZGV4
ZWREQiwgIklEQk9iamVjdFN0b3JlOjpjbGVhciIpOwotICAgIEFTU0VSVCgmbV90cmFuc2FjdGlv
bi5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAg
QVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX3RyYW5zYWN0aW9uLmRh
dGFiYXNlKCkub3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIC8vIFRoZSBJREIgc3BlYyBmb3Igc2V2
ZXJhbCBJREJPYmplY3RTdG9yZSBtZXRob2RzIHN0YXRlcyB0aGF0IHRyYW5zYWN0aW9uIHJlbGF0
ZWQgZXhjZXB0aW9ucyBzaG91bGQgZmlyZSBiZWZvcmUKICAgICAvLyB0aGUgZXhjZXB0aW9uIGZv
ciBhbiBvYmplY3Qgc3RvcmUgYmVpbmcgZGVsZXRlZC4KQEAgLTQ1MSw3ICs0NTEsNyBAQCBFeGNl
cHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpjbGVhcihKU0dsb2JhbE9i
amVjdCYgZXhlY1N0YXRlKQogRXhjZXB0aW9uT3I8UmVmPElEQkluZGV4Pj4gSURCT2JqZWN0U3Rv
cmU6OmNyZWF0ZUluZGV4KEpTR2xvYmFsT2JqZWN0JiwgY29uc3QgU3RyaW5nJiBuYW1lLCBJREJL
ZXlQYXRoJiYga2V5UGF0aCwgY29uc3QgSW5kZXhQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogewog
ICAgIExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXggJXMgKGtleVBh
dGg6ICVzLCB1bmlxdWU6ICVpLCBtdWx0aUVudHJ5OiAlaSkiLCBuYW1lLnV0ZjgoKS5kYXRhKCks
IGxvZ2dpbmdTdHJpbmcoa2V5UGF0aCkudXRmOCgpLmRhdGEoKSwgcGFyYW1ldGVycy51bmlxdWUs
IHBhcmFtZXRlcnMubXVsdGlFbnRyeSk7Ci0gICAgQVNTRVJUKCZtX3RyYW5zYWN0aW9uLmRhdGFi
YXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQo
Y2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fdHJhbnNhY3Rpb24uZGF0YWJhc2Uo
KS5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgaWYgKCFtX3RyYW5zYWN0aW9uLmlzVmVyc2lvbkNo
YW5nZSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJG
YWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlSW5kZXgnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBk
YXRhYmFzZSBpcyBub3QgcnVubmluZyBhIHZlcnNpb24gY2hhbmdlIHRyYW5zYWN0aW9uLiJfcyB9
OwpAQCAtNDkyLDcgKzQ5Miw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJJbmRleD4+IElEQk9iamVj
dFN0b3JlOjpjcmVhdGVJbmRleChKU0dsb2JhbE9iamVjdCYsIGNvbnN0IFN0CiBFeGNlcHRpb25P
cjxSZWY8SURCSW5kZXg+PiBJREJPYmplY3RTdG9yZTo6aW5kZXgoY29uc3QgU3RyaW5nJiBpbmRl
eE5hbWUpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjppbmRleCIpOwot
ICAgIEFTU0VSVCgmbV90cmFuc2FjdGlvbi5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpID09ICZU
aHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZv
clRocmVhZChtX3RyYW5zYWN0aW9uLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkpKTsKIAogICAg
IGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSW52YWxpZFN0YXRlRXJyb3IgfTsgLy8gRklYTUU6IElzIHRoaXMgY29kZSB0ZXN0ZWQ/IElz
IGl0ZXZlbiByZWFjaGFibGU/CkBAIC01MjQsNyArNTI0LDcgQEAgRXhjZXB0aW9uT3I8UmVmPElE
QkluZGV4Pj4gSURCT2JqZWN0U3RvcmU6OmluZGV4KGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKQog
RXhjZXB0aW9uT3I8dm9pZD4gSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KGNvbnN0IFN0cmlu
ZyYgbmFtZSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUlu
ZGV4ICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICBBU1NFUlQoJm1fdHJhbnNhY3Rpb24u
ZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFT
U0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV90cmFuc2FjdGlvbi5kYXRh
YmFzZSgpLm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBpZiAobV9kZWxldGVkKQogICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJGYWlsZWQgdG8gZXhlY3V0ZSAn
ZGVsZXRlSW5kZXgnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJl
ZW4gZGVsZXRlZC4iX3MgfTsKQEAgLTU3Niw3ICs1NzYsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURC
UmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpjb3VudChKU0dsb2JhbE9iamVjdCYgZXhlY1N0YXRl
LCBJRAogCiBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpkb0Nv
dW50KEpTR2xvYmFsT2JqZWN0JiBleGVjU3RhdGUsIGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFu
Z2UpCiB7Ci0gICAgQVNTRVJUKCZtX3RyYW5zYWN0aW9uLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFk
KCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9j
YWxEYXRhRm9yVGhyZWFkKG1fdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSkp
OwogCiAgICAgLy8gVGhlIElEQiBzcGVjIGZvciBzZXZlcmFsIElEQk9iamVjdFN0b3JlIG1ldGhv
ZHMgc3RhdGVzIHRoYXQgdHJhbnNhY3Rpb24gcmVsYXRlZCBleGNlcHRpb25zIHNob3VsZCBmaXJl
IGJlZm9yZQogICAgIC8vIHRoZSBleGNlcHRpb24gZm9yIGFuIG9iamVjdCBzdG9yZSBiZWluZyBk
ZWxldGVkLgpAQCAtNTk4LDcgKzU5OCw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4g
SURCT2JqZWN0U3RvcmU6OmRvQ291bnQoSlNHbG9iYWxPYmplY3QmIGV4ZWNTdGF0ZSwKIEV4Y2Vw
dGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCT2JqZWN0U3RvcmU6OmRvR2V0QWxsKEpTR2xvYmFs
T2JqZWN0JiBleGVjU3RhdGUsIE9wdGlvbmFsPHVpbnQzMl90PiBjb3VudCwgV1RGOjpGdW5jdGlv
bjxFeGNlcHRpb25PcjxSZWZQdHI8SURCS2V5UmFuZ2U+PigpPiYmIGZ1bmN0aW9uKQogewogICAg
IExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6Z2V0QWxsIik7Ci0gICAgQVNTRVJUKCZt
X3RyYW5zYWN0aW9uLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVu
dCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fdHJh
bnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgaWYgKG1fZGVsZXRl
ZCkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAiRmFpbGVk
IHRvIGV4ZWN1dGUgJ2dldEFsbCcgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIG9iamVjdCBzdG9y
ZSBoYXMgYmVlbiBkZWxldGVkLiJfcyB9OwpAQCAtNjM1LDcgKzYzNSw3IEBAIEV4Y2VwdGlvbk9y
PFJlZjxJREJSZXF1ZXN0Pj4gSURCT2JqZWN0U3RvcmU6OmdldEFsbChKU0dsb2JhbE9iamVjdCYg
ZXhlY1N0YXRlLCBKCiBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0b3Jl
Ojpkb0dldEFsbEtleXMoSlNHbG9iYWxPYmplY3QmIGV4ZWNTdGF0ZSwgT3B0aW9uYWw8dWludDMy
X3Q+IGNvdW50LCBXVEY6OkZ1bmN0aW9uPEV4Y2VwdGlvbk9yPFJlZlB0cjxJREJLZXlSYW5nZT4+
KCk+JiYgZnVuY3Rpb24pCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjpn
ZXRBbGxLZXlzIik7Ci0gICAgQVNTRVJUKCZtX3RyYW5zYWN0aW9uLmRhdGFiYXNlKCkub3JpZ2lu
VGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhy
ZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJl
YWQoKSkpOwogCiAgICAgaWYgKG1fZGVsZXRlZCkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IEludmFsaWRTdGF0ZUVycm9yLCAiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldEFsbEtleXMnIG9uICdJ
REJPYmplY3RTdG9yZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iX3MgfTsK
QEAgLTY3MSwxMyArNjcxLDEzIEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCT2Jq
ZWN0U3RvcmU6OmdldEFsbEtleXMoSlNHbG9iYWxPYmplY3QmIGV4ZWNTdGF0CiAKIHZvaWQgSURC
T2JqZWN0U3RvcmU6Om1hcmtBc0RlbGV0ZWQoKQogewotICAgIEFTU0VSVCgmbV90cmFuc2FjdGlv
bi5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAg
QVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX3RyYW5zYWN0aW9uLmRh
dGFiYXNlKCkub3JpZ2luVGhyZWFkKCkpKTsKICAgICBtX2RlbGV0ZWQgPSB0cnVlOwogfQogCiB2
b2lkIElEQk9iamVjdFN0b3JlOjpyb2xsYmFja0ZvclZlcnNpb25DaGFuZ2VBYm9ydCgpCiB7Ci0g
ICAgQVNTRVJUKCZtX3RyYW5zYWN0aW9uLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRo
cmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9y
VGhyZWFkKG1fdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAg
U3RyaW5nIGN1cnJlbnROYW1lID0gbV9pbmZvLm5hbWUoKTsKICAgICBtX2luZm8gPSBtX29yaWdp
bmFsSW5mbzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9wZW5EQlJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T3BlbkRCUmVxdWVzdC5jcHAKaW5kZXggZTU4OGZhZTlkZmMxOTVhODc5OTdhY2NiNTgyMjhkMjdj
ZDAyMzcxNi4uZjZiOGE3NGE1Mjg3OTQ2NjQ5M2JlNzk4NDU5ZTQ1ODhkYWVhYjhlZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVz
dC5jcHAKQEAgLTY2LDEyICs2NiwxMiBAQCBJREJPcGVuREJSZXF1ZXN0OjpJREJPcGVuREJSZXF1
ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQkNsaWVudDo6SQogCiBJREJP
cGVuREJSZXF1ZXN0Ojp+SURCT3BlbkRCUmVxdWVzdCgpCiB7Ci0gICAgQVNTRVJUKCZvcmlnaW5U
aHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJl
YWRMb2NhbERhdGFGb3JUaHJlYWQob3JpZ2luVGhyZWFkKCkpKTsKIH0KIAogdm9pZCBJREJPcGVu
REJSZXF1ZXN0OjpvbkVycm9yKGNvbnN0IElEQlJlc3VsdERhdGEmIGRhdGEpCiB7Ci0gICAgQVNT
RVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChj
YW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQob3JpZ2luVGhyZWFkKCkpKTsKIAogICAg
IG1fZG9tRXJyb3IgPSBkYXRhLmVycm9yKCkudG9ET01FeGNlcHRpb24oKTsKICAgICBlbnF1ZXVl
RXZlbnQoSURCUmVxdWVzdENvbXBsZXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lcnJv
ckV2ZW50LCBFdmVudDo6Q2FuQnViYmxlOjpZZXMsIEV2ZW50OjpJc0NhbmNlbGFibGU6Olllcywg
KnRoaXMpKTsKQEAgLTc5LDcgKzc5LDcgQEAgdm9pZCBJREJPcGVuREJSZXF1ZXN0OjpvbkVycm9y
KGNvbnN0IElEQlJlc3VsdERhdGEmIGRhdGEpCiAKIHZvaWQgSURCT3BlbkRCUmVxdWVzdDo6dmVy
c2lvbkNoYW5nZVRyYW5zYWN0aW9uRGlkRmluaXNoKCkKIHsKLSAgICBBU1NFUlQoJm9yaWdpblRo
cmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVh
ZExvY2FsRGF0YUZvclRocmVhZChvcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgLy8gMy4zLjcgInZl
cnNpb25jaGFuZ2UiIHRyYW5zYWN0aW9uIHN0ZXBzCiAgICAgLy8gV2hlbiB0aGUgdHJhbnNhY3Rp
b24gaXMgZmluaXNoZWQsIGFmdGVyIGZpcmluZyBjb21wbGV0ZS9hYm9ydCBvbiB0aGUgdHJhbnNh
Y3Rpb24sIGltbWVkaWF0ZWx5IHNldCByZXF1ZXN0J3MgdHJhbnNhY3Rpb24gcHJvcGVydHkgdG8g
bnVsbC4KQEAgLTkwLDcgKzkwLDcgQEAgdm9pZCBJREJPcGVuREJSZXF1ZXN0OjpmaXJlU3VjY2Vz
c0FmdGVyVmVyc2lvbkNoYW5nZUNvbW1pdCgpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQk9w
ZW5EQlJlcXVlc3Q6OmZpcmVTdWNjZXNzQWZ0ZXJWZXJzaW9uQ2hhbmdlQ29tbWl0KCkgLSAlcyIs
IHJlc291cmNlSWRlbnRpZmllcigpLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAot
ICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBB
U1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG9yaWdpblRocmVhZCgpKSk7
CiAgICAgQVNTRVJUKGhhc1BlbmRpbmdBY3Rpdml0eSgpKTsKICAgICBtX3RyYW5zYWN0aW9uLT5h
ZGRSZXF1ZXN0KCp0aGlzKTsKIApAQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgSURCT3BlbkRCUmVx
dWVzdDo6ZmlyZUVycm9yQWZ0ZXJWZXJzaW9uQ2hhbmdlQ29tcGxldGlvbigpCiB7CiAgICAgTE9H
KEluZGV4ZWREQiwgIklEQk9wZW5EQlJlcXVlc3Q6OmZpcmVFcnJvckFmdGVyVmVyc2lvbkNoYW5n
ZUNvbXBsZXRpb24oKSAtICVzIiwgcmVzb3VyY2VJZGVudGlmaWVyKCkubG9nZ2luZ1N0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgQVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFk
OjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJl
YWQob3JpZ2luVGhyZWFkKCkpKTsKICAgICBBU1NFUlQoaGFzUGVuZGluZ0FjdGl2aXR5KCkpOwog
CiAgICAgSURCRXJyb3IgaWRiRXJyb3IoQWJvcnRFcnJvcik7CkBAIC0xMjUsNyArMTI1LDcgQEAg
dm9pZCBJREJPcGVuREJSZXF1ZXN0OjpjYW5jZWxGb3JTdG9wKCkKIAogdm9pZCBJREJPcGVuREJS
ZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkKIHsKLSAgICBBU1NFUlQoJm9yaWdp
blRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1Ro
cmVhZExvY2FsRGF0YUZvclRocmVhZChvcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgYXV0byBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyk7CiAKQEAgLTEzOSw3ICsxMzksNyBAQCB2b2lkIElE
Qk9wZW5EQlJlcXVlc3Q6Om9uU3VjY2Vzcyhjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRh
KQogewogICAgIExPRyhJbmRleGVkREIsICJJREJPcGVuREJSZXF1ZXN0OjpvblN1Y2Nlc3MoKSIp
OwogCi0gICAgQVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOwor
ICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQob3JpZ2luVGhyZWFk
KCkpKTsKIAogICAgIHNldFJlc3VsdChJREJEYXRhYmFzZTo6Y3JlYXRlKCpzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCksIGNvbm5lY3Rpb25Qcm94eSgpLCByZXN1bHREYXRhKSk7CiAgICAgbV9yZWFk
eVN0YXRlID0gUmVhZHlTdGF0ZTo6RG9uZTsKQEAgLTE0OSw3ICsxNDksNyBAQCB2b2lkIElEQk9w
ZW5EQlJlcXVlc3Q6Om9uU3VjY2Vzcyhjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQog
CiB2b2lkIElEQk9wZW5EQlJlcXVlc3Q6Om9uVXBncmFkZU5lZWRlZChjb25zdCBJREJSZXN1bHRE
YXRhJiByZXN1bHREYXRhKQogewotICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0gJlRocmVh
ZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhy
ZWFkKG9yaWdpblRocmVhZCgpKSk7CiAKICAgICBSZWY8SURCRGF0YWJhc2U+IGRhdGFiYXNlID0g
SURCRGF0YWJhc2U6OmNyZWF0ZSgqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBjb25uZWN0aW9u
UHJveHkoKSwgcmVzdWx0RGF0YSk7CiAgICAgUmVmPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlv
biA9IGRhdGFiYXNlLT5zdGFydFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihyZXN1bHREYXRhLnRy
YW5zYWN0aW9uSW5mbygpLCAqdGhpcyk7CkBAIC0xNzIsNyArMTcyLDcgQEAgdm9pZCBJREJPcGVu
REJSZXF1ZXN0OjpvblVwZ3JhZGVOZWVkZWQoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0
YSkKIAogdm9pZCBJREJPcGVuREJSZXF1ZXN0OjpvbkRlbGV0ZURhdGFiYXNlU3VjY2Vzcyhjb25z
dCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQogewotICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFk
KCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9j
YWxEYXRhRm9yVGhyZWFkKG9yaWdpblRocmVhZCgpKSk7CiAKICAgICB1aW50NjRfdCBvbGRWZXJz
aW9uID0gcmVzdWx0RGF0YS5kYXRhYmFzZUluZm8oKS52ZXJzaW9uKCk7CiAKQEAgLTE4OCw3ICsx
ODgsNyBAQCB2b2lkIElEQk9wZW5EQlJlcXVlc3Q6OnJlcXVlc3RDb21wbGV0ZWQoY29uc3QgSURC
UmVzdWx0RGF0YSYgZGF0YSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCT3BlbkRCUmVxdWVz
dDo6cmVxdWVzdENvbXBsZXRlZCIpOwogCi0gICAgQVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAm
VGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFG
b3JUaHJlYWQob3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIG1faXNCbG9ja2VkID0gZmFsc2U7CiAK
QEAgLTIzMCw3ICsyMzAsNyBAQCB2b2lkIElEQk9wZW5EQlJlcXVlc3Q6OnJlcXVlc3RDb21wbGV0
ZWQoY29uc3QgSURCUmVzdWx0RGF0YSYgZGF0YSkKIAogdm9pZCBJREJPcGVuREJSZXF1ZXN0Ojpy
ZXF1ZXN0QmxvY2tlZCh1aW50NjRfdCBvbGRWZXJzaW9uLCB1aW50NjRfdCBuZXdWZXJzaW9uKQog
ewotICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAg
ICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG9yaWdpblRocmVhZCgp
KSk7CiAgICAgQVNTRVJUKCFtX2lzQmxvY2tlZCk7CiAKICAgICBtX2lzQmxvY2tlZCA9IHRydWU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCmlu
ZGV4IGQ4MWEwNTY5MzA4YWQxOTFjNjI5ZjU0MDJhNzUyN2YwNGQwYTM4ZWQuLmIxYmY3NmMwYmM4
NTVlNDVhOGMxODAwNmUzMWRjZjllMTc2ZGQ1NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCkBAIC0xNTIsNyArMTUyLDcgQEAgSURCUmVx
dWVzdDo6SURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJJbmRl
eCYgaW5kZXgsIEluZGV4ZWQKIAogSURCUmVxdWVzdDo6fklEQlJlcXVlc3QoKQogewotICAgIEFT
U0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQo
Y2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG9yaWdpblRocmVhZCgpKSk7CiAKICAg
ICBXVEY6OnN3aXRjaE9uKG1fcmVzdWx0LAogICAgICAgICBbXSAoUmVmUHRyPElEQkN1cnNvcj4m
IGN1cnNvcikgeyBjdXJzb3ItPmNsZWFyUmVxdWVzdCgpOyB9LApAQCAtMTcwLDcgKzE3MCw3IEBA
IEV4Y2VwdGlvbk9yPElEQlJlcXVlc3Q6OlJlc3VsdD4gSURCUmVxdWVzdDo6cmVzdWx0KCkgY29u
c3QKIAogRXhjZXB0aW9uT3I8RE9NRXhjZXB0aW9uKj4gSURCUmVxdWVzdDo6ZXJyb3IoKSBjb25z
dAogewotICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsK
KyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG9yaWdpblRocmVh
ZCgpKSk7CiAKICAgICBpZiAoIWlzRG9uZSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZFN0YXRlRXJyb3IsICJGYWlsZWQgdG8gcmVhZCB0aGUgJ2Vycm9yJyBwcm9wZXJ0eSBm
cm9tICdJREJSZXF1ZXN0JzogVGhlIHJlcXVlc3QgaGFzIG5vdCBmaW5pc2hlZC4iX3MgfTsKQEAg
LTE4MCwxNCArMTgwLDE0IEBAIEV4Y2VwdGlvbk9yPERPTUV4Y2VwdGlvbio+IElEQlJlcXVlc3Q6
OmVycm9yKCkgY29uc3QKIAogdm9pZCBJREJSZXF1ZXN0OjpzZXRTb3VyY2UoSURCQ3Vyc29yJiBj
dXJzb3IpCiB7Ci0gICAgQVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50
KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQob3JpZ2lu
VGhyZWFkKCkpKTsKIAogICAgIG1fc291cmNlID0gU291cmNlIHsgJmN1cnNvciB9OwogfQogCiB2
b2lkIElEQlJlcXVlc3Q6OnNldFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlv
biYgdHJhbnNhY3Rpb24pCiB7Ci0gICAgQVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFk
OjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJl
YWQob3JpZ2luVGhyZWFkKCkpKTsKICAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb24pOwogICAgIEFT
U0VSVCh0cmFuc2FjdGlvbi5pc1ZlcnNpb25DaGFuZ2UoKSk7CiAgICAgQVNTRVJUKCF0cmFuc2Fj
dGlvbi5pc0ZpbmlzaGVkT3JGaW5pc2hpbmcoKSk7CkBAIC0xOTcsMTMgKzE5NywxMyBAQCB2b2lk
IElEQlJlcXVlc3Q6OnNldFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiYg
dHJhbnNhY3Rpb24pCiAKIFJlZlB0cjxXZWJDb3JlOjpJREJUcmFuc2FjdGlvbj4gSURCUmVxdWVz
dDo6dHJhbnNhY3Rpb24oKSBjb25zdAogewotICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0g
JlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRh
Rm9yVGhyZWFkKG9yaWdpblRocmVhZCgpKSk7CiAgICAgcmV0dXJuIG1fc2hvdWxkRXhwb3NlVHJh
bnNhY3Rpb25Ub0RPTSA/IG1fdHJhbnNhY3Rpb24gOiBudWxscHRyOwogfQogCiB1aW50NjRfdCBJ
REJSZXF1ZXN0Ojpzb3VyY2VPYmplY3RTdG9yZUlkZW50aWZpZXIoKSBjb25zdAogewotICAgIEFT
U0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQo
Y2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG9yaWdpblRocmVhZCgpKSk7CiAKICAg
ICBpZiAoIW1fc291cmNlKQogICAgICAgICByZXR1cm4gMDsKQEAgLTIxNyw3ICsyMTcsNyBAQCB1
aW50NjRfdCBJREJSZXF1ZXN0Ojpzb3VyY2VPYmplY3RTdG9yZUlkZW50aWZpZXIoKSBjb25zdAog
CiB1aW50NjRfdCBJREJSZXF1ZXN0Ojpzb3VyY2VJbmRleElkZW50aWZpZXIoKSBjb25zdAogewot
ICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBB
U1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG9yaWdpblRocmVhZCgpKSk7
CiAKICAgICBpZiAoIW1fc291cmNlKQogICAgICAgICByZXR1cm4gMDsKQEAgLTIzMSwxNCArMjMx
LDE0IEBAIHVpbnQ2NF90IElEQlJlcXVlc3Q6OnNvdXJjZUluZGV4SWRlbnRpZmllcigpIGNvbnN0
CiAKIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVSZWNvcmRUeXBlIElEQlJlcXVlc3Q6OnJlcXVlc3Rl
ZE9iamVjdFN0b3JlUmVjb3JkVHlwZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCZvcmlnaW5UaHJl
YWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRM
b2NhbERhdGFGb3JUaHJlYWQob3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIHJldHVybiBtX3JlcXVl
c3RlZE9iamVjdFN0b3JlUmVjb3JkVHlwZTsKIH0KIAogSW5kZXhlZERCOjpJbmRleFJlY29yZFR5
cGUgSURCUmVxdWVzdDo6cmVxdWVzdGVkSW5kZXhSZWNvcmRUeXBlKCkgY29uc3QKIHsKLSAgICBB
U1NFUlQoJm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJU
KGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChvcmlnaW5UaHJlYWQoKSkpOwogICAg
IEFTU0VSVChtX3NvdXJjZSk7CiAgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVm
UHRyPElEQkluZGV4Pj4obV9zb3VyY2UudmFsdWUoKSkpOwogCkBAIC0yNDcsMjcgKzI0NywyNyBA
QCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSBJREJSZXF1ZXN0OjpyZXF1ZXN0ZWRJbmRleFJl
Y29yZFR5cGUoKSBjb25zdAogCiBFdmVudFRhcmdldEludGVyZmFjZSBJREJSZXF1ZXN0OjpldmVu
dFRhcmdldEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9
PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERh
dGFGb3JUaHJlYWQob3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIHJldHVybiBJREJSZXF1ZXN0RXZl
bnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCiBjb25zdCBjaGFyKiBJREJSZXF1ZXN0OjphY3Rp
dmVET01PYmplY3ROYW1lKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoJm9yaWdpblRocmVhZCgpID09
ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0
YUZvclRocmVhZChvcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgcmV0dXJuICJJREJSZXF1ZXN0IjsK
IH0KIAogYm9vbCBJREJSZXF1ZXN0OjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAogewotICAg
IEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpIHx8IFRocmVhZDo6
bWF5QmVHQ1RocmVhZCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9y
VGhyZWFkKG9yaWdpblRocmVhZCgpKSk7CiAgICAgcmV0dXJuICFtX2NvbnRleHRTdG9wcGVkICYm
IG1faGFzUGVuZGluZ0FjdGl2aXR5OwogfQogCiB2b2lkIElEQlJlcXVlc3Q6OnN0b3AoKQogewot
ICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBB
U1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG9yaWdpblRocmVhZCgpKSk7
CiAgICAgQVNTRVJUKCFtX2NvbnRleHRTdG9wcGVkKTsKIAogICAgIGNhbmNlbEZvclN0b3AoKTsK
QEAgLTI4Niw3ICsyODYsNyBAQCB2b2lkIElEQlJlcXVlc3Q6OmNhbmNlbEZvclN0b3AoKQogCiB2
b2lkIElEQlJlcXVlc3Q6OmVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCiB7Ci0gICAg
QVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VS
VChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQob3JpZ2luVGhyZWFkKCkpKTsKICAg
ICBpZiAobV9jb250ZXh0U3RvcHBlZCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yOTgsNyArMjk4
LDcgQEAgdm9pZCBJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkKIHsKICAg
ICBMT0coSW5kZXhlZERCLCAiSURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudCAtICVzICglcCkiLCBl
dmVudC50eXBlKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdGhpcyk7CiAKLSAgICBBU1NFUlQo
Jm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFj
Y2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChvcmlnaW5UaHJlYWQoKSkpOwogICAgIEFTU0VS
VChtX2hhc1BlbmRpbmdBY3Rpdml0eSk7CiAgICAgQVNTRVJUKCFtX2NvbnRleHRTdG9wcGVkKTsK
IApAQCAtMzQ5LDcgKzM0OSw3IEBAIHZvaWQgSURCUmVxdWVzdDo6dW5jYXVnaHRFeGNlcHRpb25J
bkV2ZW50SGFuZGxlcigpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlJlcXVlc3Q6OnVuY2F1
Z2h0RXhjZXB0aW9uSW5FdmVudEhhbmRsZXIiKTsKIAotICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFk
KCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9j
YWxEYXRhRm9yVGhyZWFkKG9yaWdpblRocmVhZCgpKSk7CiAKICAgICBpZiAobV9kaXNwYXRjaGlu
Z0V2ZW50KSB7CiAgICAgICAgIEFTU0VSVCghbV9oYXNVbmNhdWdodEV4Y2VwdGlvbik7CkBAIC0z
NjIsNyArMzYyLDcgQEAgdm9pZCBJREJSZXF1ZXN0Ojp1bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRI
YW5kbGVyKCkKIAogdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHQoY29uc3QgSURCS2V5RGF0YSYg
a2V5RGF0YSkKIHsKLSAgICBBU1NFUlQoJm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJl
bnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChvcmln
aW5UaHJlYWQoKSkpOwogCiAgICAgYXV0byogY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKICAgICBpZiAoIWNvbnRleHQpCkBAIC0zNzYsNyArMzc2LDcgQEAgdm9pZCBJREJSZXF1
ZXN0OjpzZXRSZXN1bHQoY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSkKIAogdm9pZCBJREJSZXF1
ZXN0OjpzZXRSZXN1bHQoY29uc3QgVmVjdG9yPElEQktleURhdGE+JiBrZXlEYXRhcykKIHsKLSAg
ICBBU1NFUlQoJm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNT
RVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChvcmlnaW5UaHJlYWQoKSkpOwog
CiAgICAgYXV0byogY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAo
IWNvbnRleHQpCkBAIC0zOTAsNyArMzkwLDcgQEAgdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHQo
Y29uc3QgVmVjdG9yPElEQktleURhdGE+JiBrZXlEYXRhcykKIAogdm9pZCBJREJSZXF1ZXN0Ojpz
ZXRSZXN1bHQoY29uc3QgSURCR2V0QWxsUmVzdWx0JiByZXN1bHQpCiB7Ci0gICAgQVNTRVJUKCZv
cmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nl
c3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQob3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIGF1dG8q
IGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQpA
QCAtNDA0LDcgKzQwNCw3IEBAIHZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0KGNvbnN0IElEQkdl
dEFsbFJlc3VsdCYgcmVzdWx0KQogCiB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdCh1aW50NjRf
dCBudW1iZXIpCiB7Ci0gICAgQVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJy
ZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQob3Jp
Z2luVGhyZWFkKCkpKTsKIAogICAgIGF1dG8qIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQpAQCAtNDE4LDcgKzQxOCw3IEBAIHZvaWQgSURCUmVx
dWVzdDo6c2V0UmVzdWx0KHVpbnQ2NF90IG51bWJlcikKIAogdm9pZCBJREJSZXF1ZXN0OjpzZXRS
ZXN1bHRUb1N0cnVjdHVyZWRDbG9uZShjb25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkKIHsKLSAg
ICBBU1NFUlQoJm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNT
RVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChvcmlnaW5UaHJlYWQoKSkpOwog
CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlJlcXVlc3Q6OnNldFJlc3VsdFRvU3RydWN0dXJlZENs
b25lIik7CiAKQEAgLTQzNCw3ICs0MzQsNyBAQCB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdFRv
U3RydWN0dXJlZENsb25lKGNvbnN0IElEQkdldFJlc3VsdCYgcmVzdWx0KQogCiB2b2lkIElEQlJl
cXVlc3Q6OnNldFJlc3VsdFRvVW5kZWZpbmVkKCkKIHsKLSAgICBBU1NFUlQoJm9yaWdpblRocmVh
ZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExv
Y2FsRGF0YUZvclRocmVhZChvcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgYXV0byogY29udGV4dCA9
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCkBAIC00NDgsNyAr
NDQ4LDcgQEAgdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHRUb1VuZGVmaW5lZCgpCiAKIElEQkN1
cnNvciogSURCUmVxdWVzdDo6cmVzdWx0Q3Vyc29yKCkKIHsKLSAgICBBU1NFUlQoJm9yaWdpblRo
cmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVh
ZExvY2FsRGF0YUZvclRocmVhZChvcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgcmV0dXJuIFdURjo6
c3dpdGNoT24obV9yZXN1bHQsCiAgICAgICAgIFtdIChjb25zdCBSZWZQdHI8SURCQ3Vyc29yPiYg
Y3Vyc29yKSAtPiBJREJDdXJzb3IqIHsgcmV0dXJuIGN1cnNvci5nZXQoKTsgfSwKQEAgLTQ1OCw3
ICs0NTgsNyBAQCBJREJDdXJzb3IqIElEQlJlcXVlc3Q6OnJlc3VsdEN1cnNvcigpCiAKIHZvaWQg
SURCUmVxdWVzdDo6d2lsbEl0ZXJhdGVDdXJzb3IoSURCQ3Vyc29yJiBjdXJzb3IpCiB7Ci0gICAg
QVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VS
VChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQob3JpZ2luVGhyZWFkKCkpKTsKICAg
ICBBU1NFUlQoaXNEb25lKCkpOwogICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkp
OwogICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uKTsKQEAgLTQ4Niw3ICs0ODYsNyBAQCB2b2lkIElE
QlJlcXVlc3Q6OndpbGxJdGVyYXRlQ3Vyc29yKElEQkN1cnNvciYgY3Vyc29yKQogCiB2b2lkIElE
QlJlcXVlc3Q6OmRpZE9wZW5Pckl0ZXJhdGVDdXJzb3IoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVz
dWx0RGF0YSkKIHsKLSAgICBBU1NFUlQoJm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJl
bnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChvcmln
aW5UaHJlYWQoKSkpOwogICAgIEFTU0VSVChtX3BlbmRpbmdDdXJzb3IpOwogCiAgICAgYXV0byog
Y29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKQEAgLTUxMyw3ICs1MTMsNyBAQCB2
b2lkIElEQlJlcXVlc3Q6OmRpZE9wZW5Pckl0ZXJhdGVDdXJzb3IoY29uc3QgSURCUmVzdWx0RGF0
YSYgcmVzdWx0RGF0YSkKIAogdm9pZCBJREJSZXF1ZXN0Ojpjb21wbGV0ZVJlcXVlc3RBbmREaXNw
YXRjaEV2ZW50KGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCiB7Ci0gICAgQVNTRVJU
KCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5B
Y2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQob3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIG1f
cmVhZHlTdGF0ZSA9IFJlYWR5U3RhdGU6OkRvbmU7CiAKQEAgLTUyOCw3ICs1MjgsNyBAQCB2b2lk
IElEQlJlcXVlc3Q6Om9uRXJyb3IoKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJSZXF1ZXN0
OjpvbkVycm9yIik7CiAKLSAgICBBU1NFUlQoJm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1
cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChv
cmlnaW5UaHJlYWQoKSkpOwogICAgIEFTU0VSVCghbV9pZGJFcnJvci5pc051bGwoKSk7CiAKICAg
ICBtX2RvbUVycm9yID0gbV9pZGJFcnJvci50b0RPTUV4Y2VwdGlvbigpOwpAQCAtNTM4LDEzICs1
MzgsMTMgQEAgdm9pZCBJREJSZXF1ZXN0OjpvbkVycm9yKCkKIHZvaWQgSURCUmVxdWVzdDo6b25T
dWNjZXNzKCkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCUmVxdWVzdDo6b25TdWNjZXNzIik7
Ci0gICAgQVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAg
IEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQob3JpZ2luVGhyZWFkKCkp
KTsKICAgICBlbnF1ZXVlRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3VjY2Vzc0V2
ZW50LCBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pKTsKIH0K
IAogdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHQoUmVmPElEQkRhdGFiYXNlPiYmIGRhdGFiYXNl
KQogewotICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsK
KyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG9yaWdpblRocmVh
ZCgpKSk7CiAKICAgICBhdXRvKiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwog
ICAgIGlmICghY29udGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAppbmRleCBkOWFkNzMyMTljMjY1NmNjMDJmZmQxYTFlMzdm
YWFlOWMxNzBhYzY3Li4yNTYyNjI1YWVkNjJiNGE1OTllMzBlNzMzNzRmZWMzNzQ4Mjg4ZTIyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rp
b24uY3BwCkBAIC04NSw3ICs4NSw3IEBAIElEQlRyYW5zYWN0aW9uOjpJREJUcmFuc2FjdGlvbihJ
REJEYXRhYmFzZSYgZGF0YWJhc2UsIGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYKIAogewogICAg
IExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6SURCVHJhbnNhY3Rpb24gLSAlcyIsIG1f
aW5mby5sb2dnaW5nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgQVNTRVJUKCZtX2RhdGFi
YXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChj
YW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFk
KCkpKTsKIAogICAgICsrbnVtYmVyT2ZJREJUcmFuc2FjdGlvbnM7CiAKQEAgLTExMyw3ICsxMTMs
NyBAQCBJREJUcmFuc2FjdGlvbjo6SURCVHJhbnNhY3Rpb24oSURCRGF0YWJhc2UmIGRhdGFiYXNl
LCBjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mCiBJREJUcmFuc2FjdGlvbjo6fklEQlRyYW5zYWN0
aW9uKCkKIHsKICAgICAtLW51bWJlck9mSURCVHJhbnNhY3Rpb25zOwotICAgIEFTU0VSVCgmbV9k
YXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NF
UlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRo
cmVhZCgpKSk7CiB9CiAKIElEQkNsaWVudDo6SURCQ29ubmVjdGlvblByb3h5JiBJREJUcmFuc2Fj
dGlvbjo6Y29ubmVjdGlvblByb3h5KCkKQEAgLTEyMyw3ICsxMjMsNyBAQCBJREJDbGllbnQ6OklE
QkNvbm5lY3Rpb25Qcm94eSYgSURCVHJhbnNhY3Rpb246OmNvbm5lY3Rpb25Qcm94eSgpCiAKIFJl
ZjxET01TdHJpbmdMaXN0PiBJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0
CiB7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpj
dXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQo
bV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+
IG5hbWVzID0gaXNWZXJzaW9uQ2hhbmdlKCkgPyBtX2RhdGFiYXNlLT5pbmZvKCkub2JqZWN0U3Rv
cmVOYW1lcygpIDogbV9pbmZvLm9iamVjdFN0b3JlcygpOwogCkBAIC0xMzcsMjAgKzEzNywyMCBA
QCBSZWY8RE9NU3RyaW5nTGlzdD4gSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlTmFtZXMoKSBj
b25zdAogCiBJREJEYXRhYmFzZSogSURCVHJhbnNhY3Rpb246OmRiKCkKIHsKLSAgICBBU1NFUlQo
Jm1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAg
QVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX2RhdGFiYXNlLT5vcmln
aW5UaHJlYWQoKSkpOwogICAgIHJldHVybiBtX2RhdGFiYXNlLnB0cigpOwogfQogCiBET01FeGNl
cHRpb24qIElEQlRyYW5zYWN0aW9uOjplcnJvcigpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCZtX2Rh
dGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VS
VChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhy
ZWFkKCkpKTsKICAgICByZXR1cm4gbV9kb21FcnJvci5nZXQoKTsKIH0KIAogRXhjZXB0aW9uT3I8
UmVmPElEQk9iamVjdFN0b3JlPj4gSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKGNvbnN0IFN0
cmluZyYgb2JqZWN0U3RvcmVOYW1lKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2Fj
dGlvbjo6b2JqZWN0U3RvcmUiKTsKLSAgICBBU1NFUlQoJm1fZGF0YWJhc2UtPm9yaWdpblRocmVh
ZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExv
Y2FsRGF0YUZvclRocmVhZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgaWYg
KCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkU3RhdGVFcnJvciB9OwpAQCAtMTkwLDcgKzE5MCw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxJ
REJPYmplY3RTdG9yZT4+IElEQlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZShjb25zdCBTdHJpbmcm
IG9iamVjCiB2b2lkIElEQlRyYW5zYWN0aW9uOjphYm9ydER1ZVRvRmFpbGVkUmVxdWVzdChET01F
eGNlcHRpb24mIGVycm9yKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6
YWJvcnREdWVUb0ZhaWxlZFJlcXVlc3QiKTsKLSAgICBBU1NFUlQoJm1fZGF0YWJhc2UtPm9yaWdp
blRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1Ro
cmVhZExvY2FsRGF0YUZvclRocmVhZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkpOwogCiAg
ICAgaWYgKGlzRmluaXNoZWRPckZpbmlzaGluZygpKQogICAgICAgICByZXR1cm47CkBAIC0yMDEs
NyArMjAxLDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6YWJvcnREdWVUb0ZhaWxlZFJlcXVlc3Qo
RE9NRXhjZXB0aW9uJiBlcnJvcikKIAogdm9pZCBJREJUcmFuc2FjdGlvbjo6dHJhbnNpdGlvbmVk
VG9GaW5pc2hpbmcoSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlIHN0YXRlKQogewotICAgIEFT
U0VSVCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsK
KyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJhc2Ut
Pm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBBU1NFUlQoIWlzRmluaXNoZWRPckZpbmlzaGluZygp
KTsKICAgICBtX3N0YXRlID0gc3RhdGU7CkBAIC0yMTEsNyArMjExLDcgQEAgdm9pZCBJREJUcmFu
c2FjdGlvbjo6dHJhbnNpdGlvbmVkVG9GaW5pc2hpbmcoSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0
YXRlIHN0YXRlKQogRXhjZXB0aW9uT3I8dm9pZD4gSURCVHJhbnNhY3Rpb246OmFib3J0KCkKIHsK
ICAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmFib3J0Iik7Ci0gICAgQVNTRVJU
KCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAg
IEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+b3Jp
Z2luVGhyZWFkKCkpKTsKIAogICAgIGlmIChpc0ZpbmlzaGVkT3JGaW5pc2hpbmcoKSkKICAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAiRmFpbGVkIHRvIGV4ZWN1
dGUgJ2Fib3J0JyBvbiAnSURCVHJhbnNhY3Rpb24nOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3Rp
dmUgb3IgZmluaXNoZWQuIl9zIH07CkBAIC0yMjQsNyArMjI0LDcgQEAgRXhjZXB0aW9uT3I8dm9p
ZD4gSURCVHJhbnNhY3Rpb246OmFib3J0KCkKIHZvaWQgSURCVHJhbnNhY3Rpb246OmludGVybmFs
QWJvcnQoKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6aW50ZXJuYWxB
Ym9ydCIpOwotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVh
ZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhy
ZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CiAgICAgQVNTRVJUKCFpc0ZpbmlzaGVk
T3JGaW5pc2hpbmcoKSk7CiAKICAgICBtX2RhdGFiYXNlLT53aWxsQWJvcnRUcmFuc2FjdGlvbigq
dGhpcyk7CkBAIC0yOTAsNyArMjkwLDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6YWJvcnRJblBy
b2dyZXNzT3BlcmF0aW9ucyhjb25zdCBJREJFcnJvciYgZXJyb3IpCiB2b2lkIElEQlRyYW5zYWN0
aW9uOjphYm9ydE9uU2VydmVyQW5kQ2FuY2VsUmVxdWVzdHMoSURCQ2xpZW50OjpUcmFuc2FjdGlv
bk9wZXJhdGlvbiYgb3BlcmF0aW9uKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2Fj
dGlvbjo6YWJvcnRPblNlcnZlckFuZENhbmNlbFJlcXVlc3RzIik7Ci0gICAgQVNTRVJUKCZtX2Rh
dGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VS
VChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhy
ZWFkKCkpKTsKICAgICBBU1NFUlQobV9wZW5kaW5nVHJhbnNhY3Rpb25PcGVyYXRpb25RdWV1ZS5p
c0VtcHR5KCkpOwogCiAgICAgbV9kYXRhYmFzZS0+Y29ubmVjdGlvblByb3h5KCkuYWJvcnRUcmFu
c2FjdGlvbigqdGhpcyk7CkBAIC0zMTksMjAgKzMxOSwyMCBAQCB2b2lkIElEQlRyYW5zYWN0aW9u
OjphYm9ydE9uU2VydmVyQW5kQ2FuY2VsUmVxdWVzdHMoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9w
ZXJhdAogCiBjb25zdCBjaGFyKiBJREJUcmFuc2FjdGlvbjo6YWN0aXZlRE9NT2JqZWN0TmFtZSgp
IGNvbnN0CiB7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhy
ZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JU
aHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKICAgICByZXR1cm4gIklEQlRyYW5z
YWN0aW9uIjsKIH0KIAogYm9vbCBJREJUcmFuc2FjdGlvbjo6aGFzUGVuZGluZ0FjdGl2aXR5KCkg
Y29uc3QKIHsKLSAgICBBU1NFUlQoJm1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpID09ICZUaHJl
YWQ6OmN1cnJlbnQoKSB8fCBUaHJlYWQ6Om1heUJlR0NUaHJlYWQoKSk7CisgICAgQVNTRVJUKGNh
bkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQo
KSkgfHwgVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkpOwogICAgIHJldHVybiAhbV9jb250ZXh0U3Rv
cHBlZCAmJiBtX3N0YXRlICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6RmluaXNoZWQ7
CiB9CiAKIHZvaWQgSURCVHJhbnNhY3Rpb246OnN0b3AoKQogewogICAgIExPRyhJbmRleGVkREIs
ICJJREJUcmFuc2FjdGlvbjo6c3RvcCAtICVzIiwgbV9pbmZvLmxvZ2dpbmdTdHJpbmcoKS51dGY4
KCkuZGF0YSgpKTsKLSAgICBBU1NFUlQoJm1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpID09ICZU
aHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZv
clRocmVhZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgLy8gSURCRGF0YWJh
c2U6OnN0b3AoKSBjYWxscyBJREJUcmFuc2FjdGlvbjo6c3RvcCgpIGZvciBlYWNoIG9mIGl0cyBh
Y3RpdmUgdHJhbnNhY3Rpb25zLgogICAgIC8vIFNpbmNlIHRoZSBvcmRlciBvZiBjYWxsaW5nIEFj
dGl2ZURPTU9iamVjdDo6c3RvcCgpIGlzIHJhbmRvbSwgd2UgbWlnaHQgYWxyZWFkeSBoYXZlIGJl
ZW4gc3RvcHBlZC4KQEAgLTM1NCwxMyArMzU0LDEzIEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OnN0
b3AoKQogCiBib29sIElEQlRyYW5zYWN0aW9uOjppc0FjdGl2ZSgpIGNvbnN0CiB7Ci0gICAgQVNT
RVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOwor
ICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+
b3JpZ2luVGhyZWFkKCkpKTsKICAgICByZXR1cm4gbV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5z
YWN0aW9uU3RhdGU6OkFjdGl2ZTsKIH0KIAogYm9vbCBJREJUcmFuc2FjdGlvbjo6aXNGaW5pc2hl
ZE9yRmluaXNoaW5nKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoJm1fZGF0YWJhc2UtPm9yaWdpblRo
cmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVh
ZExvY2FsRGF0YUZvclRocmVhZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAg
cmV0dXJuIG1fc3RhdGUgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpDb21taXR0aW5n
CiAgICAgICAgIHx8IG1fc3RhdGUgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpBYm9y
dGluZwpAQCAtMzY5LDEzICszNjksMTMgQEAgYm9vbCBJREJUcmFuc2FjdGlvbjo6aXNGaW5pc2hl
ZE9yRmluaXNoaW5nKCkgY29uc3QKIAogdm9pZCBJREJUcmFuc2FjdGlvbjo6YWRkUmVxdWVzdChJ
REJSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhy
ZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFk
TG9jYWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CiAgICAgbV9v
cGVuUmVxdWVzdHMuYWRkKCZyZXF1ZXN0KTsKIH0KIAogdm9pZCBJREJUcmFuc2FjdGlvbjo6cmVt
b3ZlUmVxdWVzdChJREJSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIEFTU0VSVCgmbV9kYXRhYmFz
ZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2Fu
QWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgp
KSk7CiAgICAgbV9vcGVuUmVxdWVzdHMucmVtb3ZlKCZyZXF1ZXN0KTsKIAogICAgIHRyeVNjaGVk
dWxlUGVuZGluZ09wZXJhdGlvblRpbWVyKCk7CkBAIC0zODQsNyArMzg0LDcgQEAgdm9pZCBJREJU
cmFuc2FjdGlvbjo6cmVtb3ZlUmVxdWVzdChJREJSZXF1ZXN0JiByZXF1ZXN0KQogdm9pZCBJREJU
cmFuc2FjdGlvbjo6c2NoZWR1bGVPcGVyYXRpb24oUmVmPElEQkNsaWVudDo6VHJhbnNhY3Rpb25P
cGVyYXRpb24+JiYgb3BlcmF0aW9uKQogewogICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbk9wZXJh
dGlvbk1hcC5jb250YWlucyhvcGVyYXRpb24tPmlkZW50aWZpZXIoKSkpOwotICAgIEFTU0VSVCgm
bV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBB
U1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdp
blRocmVhZCgpKSk7CiAKICAgICBhdXRvIGlkZW50aWZpZXIgPSBvcGVyYXRpb24tPmlkZW50aWZp
ZXIoKTsKICAgICBtX3BlbmRpbmdUcmFuc2FjdGlvbk9wZXJhdGlvblF1ZXVlLmFwcGVuZChvcGVy
YXRpb24uY29weVJlZigpKTsKQEAgLTM5NSw3ICszOTUsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9u
OjpzY2hlZHVsZU9wZXJhdGlvbihSZWY8SURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbj4m
JiBvcAogCiB2b2lkIElEQlRyYW5zYWN0aW9uOjp0cnlTY2hlZHVsZVBlbmRpbmdPcGVyYXRpb25U
aW1lcigpCiB7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhy
ZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JU
aHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIGlmICghbV9zdGFydGVk
T25TZXJ2ZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTQxNSw3ICs0MTUsNyBAQCB2b2lkIElEQlRy
YW5zYWN0aW9uOjp0cnlTY2hlZHVsZVBlbmRpbmdPcGVyYXRpb25UaW1lcigpCiB2b2lkIElEQlRy
YW5zYWN0aW9uOjpwZW5kaW5nT3BlcmF0aW9uVGltZXJGaXJlZCgpCiB7CiAgICAgTE9HKEluZGV4
ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpwZW5kaW5nT3BlcmF0aW9uVGltZXJGaXJlZCAoJXApIiwg
dGhpcyk7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFk
OjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJl
YWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIC8vIFdlIHdhbnQgdG8gYmF0
Y2ggb3BlcmF0aW9ucyB0b2dldGhlciB3aXRob3V0IHNwaW5uaW5nIHRoZSBydW5sb29wIGZvciBw
ZXJmb3JtYW5jZSwKICAgICAvLyBidXQgZG9uJ3Qgd2FudCB0byBhZmZlY3QgcmVzcG9uc2l2ZW5l
c3Mgb2YgdGhlIG1haW4gdGhyZWFkLgpAQCAtNDQxLDggKzQ0MSw4IEBAIHZvaWQgSURCVHJhbnNh
Y3Rpb246OnBlbmRpbmdPcGVyYXRpb25UaW1lckZpcmVkKCkKIAogdm9pZCBJREJUcmFuc2FjdGlv
bjo6b3BlcmF0aW9uQ29tcGxldGVkT25TZXJ2ZXIoY29uc3QgSURCUmVzdWx0RGF0YSYgZGF0YSwg
SURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uKQogewotICAgIEFTU0VS
VCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKLSAg
ICBBU1NFUlQoJm9wZXJhdGlvbi5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkp
OworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFz
ZS0+b3JpZ2luVGhyZWFkKCkpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRh
Rm9yVGhyZWFkKG9wZXJhdGlvbi5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgbV9jb21wbGV0ZWRP
blNlcnZlclF1ZXVlLmFwcGVuZCh7ICZvcGVyYXRpb24sIGRhdGEgfSk7CiAKQEAgLTQ1Miw3ICs0
NTIsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpvcGVyYXRpb25Db21wbGV0ZWRPblNlcnZlcihj
b25zdCBJREJSZXN1bHREYXRhJiBkYXRhLCBJREJDbAogCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpz
Y2hlZHVsZUNvbXBsZXRlZE9wZXJhdGlvblRpbWVyKCkKIHsKLSAgICBBU1NFUlQoJm1fZGF0YWJh
c2UtPm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNh
bkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQo
KSkpOwogCiAgICAgaWYgKCFtX2NvbXBsZXRlZE9wZXJhdGlvblRpbWVyLmlzQWN0aXZlKCkpCiAg
ICAgICAgIG1fY29tcGxldGVkT3BlcmF0aW9uVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CkBAIC00
NjEsNyArNDYxLDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6c2NoZWR1bGVDb21wbGV0ZWRPcGVy
YXRpb25UaW1lcigpCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpjb21wbGV0ZWRPcGVyYXRpb25UaW1l
ckZpcmVkKCkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmNvbXBsZXRl
ZE9wZXJhdGlvblRpbWVyRmlyZWQgKCVwKSIsIHRoaXMpOwotICAgIEFTU0VSVCgmbV9kYXRhYmFz
ZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2Fu
QWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgp
KSk7CiAKICAgICBpZiAobV9jb21wbGV0ZWRPblNlcnZlclF1ZXVlLmlzRW1wdHkoKSB8fCBtX2N1
cnJlbnRseUNvbXBsZXRpbmdSZXF1ZXN0KQogICAgICAgICByZXR1cm47CkBAIC01MDUsNyArNTA1
LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6ZmluaXNoZWREaXNwYXRjaEV2ZW50Rm9yUmVxdWVz
dChJREJSZXF1ZXN0JiByZXF1ZXN0KQogdm9pZCBJREJUcmFuc2FjdGlvbjo6Y29tbWl0KCkKIHsK
ICAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmNvbW1pdCIpOwotICAgIEFTU0VS
VCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAg
ICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9y
aWdpblRocmVhZCgpKSk7CiAgICAgQVNTRVJUKCFpc0ZpbmlzaGVkT3JGaW5pc2hpbmcoKSk7CiAK
ICAgICB0cmFuc2l0aW9uZWRUb0ZpbmlzaGluZyhJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6
OkNvbW1pdHRpbmcpOwpAQCAtNTIwLDcgKzUyMCw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OmNv
bW1pdCgpCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpjb21taXRPblNlcnZlcihJREJDbGllbnQ6OlRy
YW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24pCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklE
QlRyYW5zYWN0aW9uOjpjb21taXRPblNlcnZlciIpOwotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+
b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNj
ZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7
CiAKICAgICBtX2RhdGFiYXNlLT5jb25uZWN0aW9uUHJveHkoKS5jb21taXRUcmFuc2FjdGlvbigq
dGhpcyk7CiAKQEAgLTUzNSw3ICs1MzUsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpjb21taXRP
blNlcnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24pCiB2b2lk
IElEQlRyYW5zYWN0aW9uOjpmaW5pc2hBYm9ydE9yQ29tbWl0KCkKIHsKICAgICBBU1NFUlQobV9z
dGF0ZSAhPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkZpbmlzaGVkKTsKLSAgICBBU1NF
UlQoJm1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7Cisg
ICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX2RhdGFiYXNlLT5v
cmlnaW5UaHJlYWQoKSkpOwogCiAgICAgbV9zdGF0ZSA9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25T
dGF0ZTo6RmluaXNoZWQ7CiB9CkBAIC01NDMsNyArNTQzLDcgQEAgdm9pZCBJREJUcmFuc2FjdGlv
bjo6ZmluaXNoQWJvcnRPckNvbW1pdCgpCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRTdGFydChj
b25zdCBJREJFcnJvciYgZXJyb3IpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0
aW9uOjpkaWRTdGFydCIpOwotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkg
PT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxE
YXRhRm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBtX2RhdGFi
YXNlLT5kaWRTdGFydFRyYW5zYWN0aW9uKCp0aGlzKTsKIApAQCAtNTYxLDcgKzU2MSw3IEBAIHZv
aWQgSURCVHJhbnNhY3Rpb246OmRpZFN0YXJ0KGNvbnN0IElEQkVycm9yJiBlcnJvcikKIAogdm9p
ZCBJREJUcmFuc2FjdGlvbjo6bm90aWZ5RGlkQWJvcnQoY29uc3QgSURCRXJyb3ImIGVycm9yKQog
ewotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3Vy
cmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1f
ZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBtX2RhdGFiYXNlLT5kaWRBYm9ydFRy
YW5zYWN0aW9uKCp0aGlzKTsKICAgICBtX2lkYkVycm9yID0gZXJyb3I7CkBAIC01NzYsNyArNTc2
LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6bm90aWZ5RGlkQWJvcnQoY29uc3QgSURCRXJyb3Im
IGVycm9yKQogdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGlkQWJvcnQoY29uc3QgSURCRXJyb3ImIGVy
cm9yKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlkQWJvcnQiKTsK
LSAgICBBU1NFUlQoJm1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJl
bnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX2Rh
dGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgaWYgKG1fc3RhdGUgPT0gSW5kZXhlZERC
OjpUcmFuc2FjdGlvblN0YXRlOjpGaW5pc2hlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtNTg5LDcg
KzU4OSw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OmRpZEFib3J0KGNvbnN0IElEQkVycm9yJiBl
cnJvcikKIHZvaWQgSURCVHJhbnNhY3Rpb246OmRpZENvbW1pdChjb25zdCBJREJFcnJvciYgZXJy
b3IpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkaWRDb21taXQiKTsK
LSAgICBBU1NFUlQoJm1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJl
bnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX2Rh
dGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkpOwogICAgIEFTU0VSVChtX3N0YXRlID09IEluZGV4ZWRE
Qjo6VHJhbnNhY3Rpb25TdGF0ZTo6Q29tbWl0dGluZyk7CiAKICAgICBpZiAoZXJyb3IuaXNOdWxs
KCkpIHsKQEAgLTYwNiwyMSArNjA2LDIxIEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OmRpZENvbW1p
dChjb25zdCBJREJFcnJvciYgZXJyb3IpCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpmaXJlT25Db21w
bGV0ZSgpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpmaXJlT25Db21w
bGV0ZSIpOwotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVh
ZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhy
ZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CiAgICAgZW5xdWV1ZUV2ZW50KEV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLmNvbXBsZXRlRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5v
LCBFdmVudDo6SXNDYW5jZWxhYmxlOjpObykpOwogfQogCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpm
aXJlT25BYm9ydCgpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpmaXJl
T25BYm9ydCIpOwotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRo
cmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9y
VGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CiAgICAgZW5xdWV1ZUV2ZW50KEV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmFib3J0RXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Olll
cywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pKTsKIH0KIAogdm9pZCBJREJUcmFuc2FjdGlvbjo6
ZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJiBldmVudCkKIHsKICAgICBBU1NFUlQobV9zdGF0ZSAh
PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkZpbmlzaGVkKTsKLSAgICBBU1NFUlQoJm1f
ZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNT
RVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX2RhdGFiYXNlLT5vcmlnaW5U
aHJlYWQoKSkpOwogCiAgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgfHwgbV9jb250
ZXh0U3RvcHBlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtNjMzLDcgKzYzMyw3IEBAIHZvaWQgSURC
VHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQogewogICAgIExPRyhJbmRl
eGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlzcGF0Y2hFdmVudCIpOwogCi0gICAgQVNTRVJUKCZt
X2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFT
U0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2lu
VGhyZWFkKCkpKTsKICAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICBB
U1NFUlQoIW1fY29udGV4dFN0b3BwZWQpOwogICAgIEFTU0VSVChldmVudC50YXJnZXQoKSA9PSB0
aGlzKTsKQEAgLTY2NCw3ICs2NjQsNyBAQCBSZWY8SURCT2JqZWN0U3RvcmU+IElEQlRyYW5zYWN0
aW9uOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJPYmplY3RTdG9yZUluZm8mCiAgICAgTE9H
KEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpjcmVhdGVPYmplY3RTdG9yZSIpOwogICAgIEFT
U0VSVChpc1ZlcnNpb25DaGFuZ2UoKSk7CiAgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSk7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFk
OjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJl
YWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIExvY2tlcjxMb2NrPiBsb2Nr
ZXIobV9yZWZlcmVuY2VkT2JqZWN0U3RvcmVMb2NrKTsKIApAQCAtNjg1LDcgKzY4NSw3IEBAIFJl
ZjxJREJPYmplY3RTdG9yZT4gSURCVHJhbnNhY3Rpb246OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0
IElEQk9iamVjdFN0b3JlSW5mbyYKIHZvaWQgSURCVHJhbnNhY3Rpb246OmNyZWF0ZU9iamVjdFN0
b3JlT25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBj
b25zdCBJREJPYmplY3RTdG9yZUluZm8mIGluZm8pCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklE
QlRyYW5zYWN0aW9uOjpjcmVhdGVPYmplY3RTdG9yZU9uU2VydmVyIik7Ci0gICAgQVNTRVJUKCZt
X2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFT
U0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2lu
VGhyZWFkKCkpKTsKICAgICBBU1NFUlQoaXNWZXJzaW9uQ2hhbmdlKCkpOwogCiAgICAgbV9kYXRh
YmFzZS0+Y29ubmVjdGlvblByb3h5KCkuY3JlYXRlT2JqZWN0U3RvcmUob3BlcmF0aW9uLCBpbmZv
KTsKQEAgLTY5NCw3ICs2OTQsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpjcmVhdGVPYmplY3RT
dG9yZU9uU2VydmVyKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mCiB2b2lkIElEQlRy
YW5zYWN0aW9uOjpkaWRDcmVhdGVPYmplY3RTdG9yZU9uU2VydmVyKGNvbnN0IElEQlJlc3VsdERh
dGEmIHJlc3VsdERhdGEpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpk
aWRDcmVhdGVPYmplY3RTdG9yZU9uU2VydmVyIik7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5v
cmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nl
c3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsK
ICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdERhdGEsIHJlc3VsdERhdGEudHlwZSgpID09IElEQlJl
c3VsdFR5cGU6OkNyZWF0ZU9iamVjdFN0b3JlU3VjY2VzcyB8fCByZXN1bHREYXRhLnR5cGUoKSA9
PSBJREJSZXN1bHRUeXBlOjpFcnJvcik7CiB9CiAKQEAgLTcwNiw3ICs3MDYsNyBAQCB2b2lkIElE
QlRyYW5zYWN0aW9uOjpyZW5hbWVPYmplY3RTdG9yZShJREJPYmplY3RTdG9yZSYgb2JqZWN0U3Rv
cmUsIGNvbnN0IFN0cmluZwogCiAgICAgQVNTRVJUKGlzVmVyc2lvbkNoYW5nZSgpKTsKICAgICBB
U1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBBU1NFUlQoJm1fZGF0YWJhc2Ut
Pm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFj
Y2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkp
OwogCiAgICAgQVNTRVJUKG1fcmVmZXJlbmNlZE9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RT
dG9yZS5pbmZvKCkubmFtZSgpKSk7CiAgICAgQVNTRVJUKCFtX3JlZmVyZW5jZWRPYmplY3RTdG9y
ZXMuY29udGFpbnMobmV3TmFtZSkpOwpAQCAtNzI3LDcgKzcyNyw3IEBAIHZvaWQgSURCVHJhbnNh
Y3Rpb246OnJlbmFtZU9iamVjdFN0b3JlKElEQk9iamVjdFN0b3JlJiBvYmplY3RTdG9yZSwgY29u
c3QgU3RyaW5nCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpyZW5hbWVPYmplY3RTdG9yZU9uU2VydmVy
KElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mIG9wZXJhdGlvbiwgY29uc3QgdWludDY0
X3QmIG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lKQogewogICAg
IExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6cmVuYW1lT2JqZWN0U3RvcmVPblNlcnZl
ciIpOwotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6
Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFk
KG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CiAgICAgQVNTRVJUKGlzVmVyc2lvbkNoYW5n
ZSgpKTsKIAogICAgIG1fZGF0YWJhc2UtPmNvbm5lY3Rpb25Qcm94eSgpLnJlbmFtZU9iamVjdFN0
b3JlKG9wZXJhdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKTsKQEAgLTczNiw3
ICs3MzYsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpyZW5hbWVPYmplY3RTdG9yZU9uU2VydmVy
KElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpk
aWRSZW5hbWVPYmplY3RTdG9yZU9uU2VydmVyKGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdERh
dGEpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkaWRSZW5hbWVPYmpl
Y3RTdG9yZU9uU2VydmVyIik7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQo
KSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2Nh
bERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKICAgICBBU1NFUlRf
VU5VU0VEKHJlc3VsdERhdGEsIHJlc3VsdERhdGEudHlwZSgpID09IElEQlJlc3VsdFR5cGU6OlJl
bmFtZU9iamVjdFN0b3JlU3VjY2VzcyB8fCByZXN1bHREYXRhLnR5cGUoKSA9PSBJREJSZXN1bHRU
eXBlOjpFcnJvcik7CiB9CiAKQEAgLTc0NCw3ICs3NDQsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SURC
SW5kZXg+IElEQlRyYW5zYWN0aW9uOjpjcmVhdGVJbmRleChJREJPYmplY3RTdG9yZSYgb2JqZWN0
U3RvcgogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6Y3JlYXRlSW5kZXgi
KTsKICAgICBBU1NFUlQoaXNWZXJzaW9uQ2hhbmdlKCkpOwotICAgIEFTU0VSVCgmbV9kYXRhYmFz
ZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2Fu
QWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgp
KSk7CiAKICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CkBAIC03NjIsNyArNzYyLDcgQEAgc3RkOjp1bmlxdWVfcHRyPElEQkluZGV4PiBJ
REJUcmFuc2FjdGlvbjo6Y3JlYXRlSW5kZXgoSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0b3IKIHZv
aWQgSURCVHJhbnNhY3Rpb246OmNyZWF0ZUluZGV4T25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2Fj
dGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBjb25zdCBJREJJbmRleEluZm8mIGluZm8pCiB7CiAg
ICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpjcmVhdGVJbmRleE9uU2VydmVyIik7
Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJy
ZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9k
YXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKICAgICBBU1NFUlQoaXNWZXJzaW9uQ2hhbmdlKCkp
OwogCiAgICAgbV9kYXRhYmFzZS0+Y29ubmVjdGlvblByb3h5KCkuY3JlYXRlSW5kZXgob3BlcmF0
aW9uLCBpbmZvKTsKQEAgLTc3MSw3ICs3NzEsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpjcmVh
dGVJbmRleE9uU2VydmVyKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mIG9wZXJhdAog
dm9pZCBJREJUcmFuc2FjdGlvbjo6ZGlkQ3JlYXRlSW5kZXhPblNlcnZlcihjb25zdCBJREJSZXN1
bHREYXRhJiByZXN1bHREYXRhKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlv
bjo6ZGlkQ3JlYXRlSW5kZXhPblNlcnZlciIpOwotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+b3Jp
Z2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNz
VGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CiAK
ICAgICBpZiAocmVzdWx0RGF0YS50eXBlKCkgPT0gSURCUmVzdWx0VHlwZTo6Q3JlYXRlSW5kZXhT
dWNjZXNzKQogICAgICAgICByZXR1cm47CkBAIC03OTMsNyArNzkzLDcgQEAgdm9pZCBJREJUcmFu
c2FjdGlvbjo6cmVuYW1lSW5kZXgoSURCSW5kZXgmIGluZGV4LCBjb25zdCBTdHJpbmcmIG5ld05h
bWUpCiAKICAgICBBU1NFUlQoaXNWZXJzaW9uQ2hhbmdlKCkpOwogICAgIEFTU0VSVChzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpOwotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFk
KCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9j
YWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBBU1NF
UlQobV9yZWZlcmVuY2VkT2JqZWN0U3RvcmVzLmNvbnRhaW5zKGluZGV4Lm9iamVjdFN0b3JlKCku
aW5mbygpLm5hbWUoKSkpOwogICAgIEFTU0VSVChtX3JlZmVyZW5jZWRPYmplY3RTdG9yZXMuZ2V0
KGluZGV4Lm9iamVjdFN0b3JlKCkuaW5mbygpLm5hbWUoKSkgPT0gJmluZGV4Lm9iamVjdFN0b3Jl
KCkpOwpAQCAtODE0LDcgKzgxNCw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OnJlbmFtZUluZGV4
KElEQkluZGV4JiBpbmRleCwgY29uc3QgU3RyaW5nJiBuZXdOYW1lKQogdm9pZCBJREJUcmFuc2Fj
dGlvbjo6cmVuYW1lSW5kZXhPblNlcnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9u
JiBvcGVyYXRpb24sIGNvbnN0IHVpbnQ2NF90JiBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0
IHVpbnQ2NF90JiBpbmRleElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSkKIHsKICAg
ICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OnJlbmFtZUluZGV4T25TZXJ2ZXIiKTsK
LSAgICBBU1NFUlQoJm1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJl
bnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX2Rh
dGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkpOwogICAgIEFTU0VSVChpc1ZlcnNpb25DaGFuZ2UoKSk7
CiAKICAgICBtX2RhdGFiYXNlLT5jb25uZWN0aW9uUHJveHkoKS5yZW5hbWVJbmRleChvcGVyYXRp
b24sIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBuZXdOYW1lKTsKQEAg
LTgyMywxNCArODIzLDE0IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OnJlbmFtZUluZGV4T25TZXJ2
ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0CiB2b2lkIElEQlRyYW5z
YWN0aW9uOjpkaWRSZW5hbWVJbmRleE9uU2VydmVyKGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3Vs
dERhdGEpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkaWRSZW5hbWVJ
bmRleE9uU2VydmVyIik7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9
PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERh
dGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKICAgICBBU1NFUlRfVU5V
U0VEKHJlc3VsdERhdGEsIHJlc3VsdERhdGEudHlwZSgpID09IElEQlJlc3VsdFR5cGU6OlJlbmFt
ZUluZGV4U3VjY2VzcyB8fCByZXN1bHREYXRhLnR5cGUoKSA9PSBJREJSZXN1bHRUeXBlOjpFcnJv
cik7CiB9CiAKIFJlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdE9wZW5DdXJz
b3IoSlNHbG9iYWxPYmplY3QmIHN0YXRlLCBJREJPYmplY3RTdG9yZSYgb2JqZWN0U3RvcmUsIGNv
bnN0IElEQkN1cnNvckluZm8mIGluZm8pCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5z
YWN0aW9uOjpyZXF1ZXN0T3BlbkN1cnNvciIpOwotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+b3Jp
Z2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNz
VGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CiAK
ICAgICBpZiAoaW5mby5jdXJzb3JUeXBlKCkgPT0gSW5kZXhlZERCOjpDdXJzb3JUeXBlOjpLZXlP
bmx5KQogICAgICAgICByZXR1cm4gZG9SZXF1ZXN0T3BlbkN1cnNvcihzdGF0ZSwgSURCQ3Vyc29y
OjpjcmVhdGUob2JqZWN0U3RvcmUsIGluZm8pKTsKQEAgLTg0MSw3ICs4NDEsNyBAQCBSZWY8SURC
UmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVlc3RPcGVuQ3Vyc29yKEpTR2xvYmFsT2JqZWN0
JiBzdGF0ZSwgSURCT2JqZQogUmVmPElEQlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0
T3BlbkN1cnNvcihKU0dsb2JhbE9iamVjdCYgc3RhdGUsIElEQkluZGV4JiBpbmRleCwgY29uc3Qg
SURCQ3Vyc29ySW5mbyYgaW5mbykKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rp
b246OnJlcXVlc3RPcGVuQ3Vyc29yIik7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5U
aHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJl
YWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKIAogICAg
IGlmIChpbmZvLmN1cnNvclR5cGUoKSA9PSBJbmRleGVkREI6OkN1cnNvclR5cGU6OktleU9ubHkp
CiAgICAgICAgIHJldHVybiBkb1JlcXVlc3RPcGVuQ3Vyc29yKHN0YXRlLCBJREJDdXJzb3I6OmNy
ZWF0ZShpbmRleCwgaW5mbykpOwpAQCAtODUyLDcgKzg1Miw3IEBAIFJlZjxJREJSZXF1ZXN0PiBJ
REJUcmFuc2FjdGlvbjo6cmVxdWVzdE9wZW5DdXJzb3IoSlNHbG9iYWxPYmplY3QmIHN0YXRlLCBJ
REJJbmRlCiBSZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OmRvUmVxdWVzdE9wZW5DdXJz
b3IoSlNHbG9iYWxPYmplY3QmIHN0YXRlLCBSZWY8SURCQ3Vyc29yPiYmIGN1cnNvcikKIHsKICAg
ICBBU1NFUlQoaXNBY3RpdmUoKSk7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJl
YWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRM
b2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIEFT
U0VSVF9VTlVTRUQoc3RhdGUsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSBzY3JpcHRFeGVj
dXRpb25Db250ZXh0RnJvbUV4ZWNTdGF0ZSgmc3RhdGUpKTsKIApAQCAtODcyLDcgKzg3Miw3IEBA
IFJlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6ZG9SZXF1ZXN0T3BlbkN1cnNvcihKU0ds
b2JhbE9iamVjdCYgc3RhdGUsIFJlZjxJCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpvcGVuQ3Vyc29y
T25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBjb25z
dCBJREJDdXJzb3JJbmZvJiBpbmZvKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2Fj
dGlvbjo6b3BlbkN1cnNvck9uU2VydmVyIik7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmln
aW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NU
aHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKIAog
ICAgIG1fZGF0YWJhc2UtPmNvbm5lY3Rpb25Qcm94eSgpLm9wZW5DdXJzb3Iob3BlcmF0aW9uLCBp
bmZvKTsKIH0KQEAgLTg4MCw3ICs4ODAsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpvcGVuQ3Vy
c29yT25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aQogdm9p
ZCBJREJUcmFuc2FjdGlvbjo6ZGlkT3BlbkN1cnNvck9uU2VydmVyKElEQlJlcXVlc3QmIHJlcXVl
c3QsIGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCiB7CiAgICAgTE9HKEluZGV4ZWRE
QiwgIklEQlRyYW5zYWN0aW9uOjpkaWRPcGVuQ3Vyc29yT25TZXJ2ZXIiKTsKLSAgICBBU1NFUlQo
Jm1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAg
QVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX2RhdGFiYXNlLT5vcmln
aW5UaHJlYWQoKSkpOwogCiAgICAgY29tcGxldGVDdXJzb3JSZXF1ZXN0KHJlcXVlc3QsIHJlc3Vs
dERhdGEpOwogfQpAQCAtODkwLDcgKzg5MCw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246Oml0ZXJh
dGVDdXJzb3IoSURCQ3Vyc29yJiBjdXJzb3IsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhCiAg
ICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjppdGVyYXRlQ3Vyc29yIik7CiAgICAg
QVNTRVJUKGlzQWN0aXZlKCkpOwogICAgIEFTU0VSVChjdXJzb3IucmVxdWVzdCgpKTsKLSAgICBB
U1NFUlQoJm1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7
CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX2RhdGFiYXNl
LT5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgYWRkUmVxdWVzdCgqY3Vyc29yLnJlcXVlc3QoKSk7
CiAKQEAgLTkwNiw3ICs5MDYsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjppdGVyYXRlQ3Vyc29y
KElEQkN1cnNvciYgY3Vyc29yLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YQogdm9pZCBJREJU
cmFuc2FjdGlvbjo6aXRlcmF0ZUN1cnNvck9uU2VydmVyKElEQkNsaWVudDo6VHJhbnNhY3Rpb25P
cGVyYXRpb24mIG9wZXJhdGlvbiwgY29uc3QgSURCSXRlcmF0ZUN1cnNvckRhdGEmIGRhdGEpCiB7
CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjppdGVyYXRlQ3Vyc29yT25TZXJ2
ZXIiKTsKLSAgICBBU1NFUlQoJm1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6
OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVh
ZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgbV9kYXRhYmFzZS0+Y29ubmVj
dGlvblByb3h5KCkuaXRlcmF0ZUN1cnNvcihvcGVyYXRpb24sIGRhdGEpOwogfQpAQCAtOTE0LDcg
KzkxNCw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246Oml0ZXJhdGVDdXJzb3JPblNlcnZlcihJREJD
bGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpk
aWRJdGVyYXRlQ3Vyc29yT25TZXJ2ZXIoSURCUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSURCUmVz
dWx0RGF0YSYgcmVzdWx0RGF0YSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rp
b246OmRpZEl0ZXJhdGVDdXJzb3JPblNlcnZlciIpOwotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+
b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNj
ZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7
CiAKICAgICBjb21wbGV0ZUN1cnNvclJlcXVlc3QocmVxdWVzdCwgcmVzdWx0RGF0YSk7CiB9CkBA
IC05MjMsNyArOTIzLDcgQEAgUmVmPElEQlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0
R2V0QWxsT2JqZWN0U3RvcmVSZWNvcmRzKEpTQzo6SlNHbG9iYWxPYmoKIHsKICAgICBMT0coSW5k
ZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OnJlcXVlc3RHZXRBbGxPYmplY3RTdG9yZVJlY29yZHMi
KTsKICAgICBBU1NFUlQoaXNBY3RpdmUoKSk7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmln
aW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NU
aHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKIAog
ICAgIEFTU0VSVF9VTlVTRUQoc3RhdGUsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0RnJvbUV4ZWNTdGF0ZSgmc3RhdGUpKTsKIApAQCAtOTQ2LDcgKzk0
Niw3IEBAIFJlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdldEFsbEluZGV4
UmVjb3JkcyhKU0M6OkpTR2xvYmFsT2JqZWN0JiBzCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklE
QlRyYW5zYWN0aW9uOjpyZXF1ZXN0R2V0QWxsSW5kZXhSZWNvcmRzIik7CiAgICAgQVNTRVJUKGlz
QWN0aXZlKCkpOwotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRo
cmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9y
VGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBBU1NFUlRfVU5VU0VE
KHN0YXRlLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0gc2NyaXB0RXhlY3V0aW9uQ29udGV4
dEZyb21FeGVjU3RhdGUoJnN0YXRlKSk7CiAKQEAgLTk2OCw3ICs5NjgsNyBAQCBSZWY8SURCUmVx
dWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVlc3RHZXRBbGxJbmRleFJlY29yZHMoSlNDOjpKU0ds
b2JhbE9iamVjdCYgcwogdm9pZCBJREJUcmFuc2FjdGlvbjo6Z2V0QWxsUmVjb3Jkc09uU2VydmVy
KElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mIG9wZXJhdGlvbiwgY29uc3QgSURCR2V0
QWxsUmVjb3Jkc0RhdGEmIGdldEFsbFJlY29yZHNEYXRhKQogewogICAgIExPRyhJbmRleGVkREIs
ICJJREJUcmFuc2FjdGlvbjo6Z2V0QWxsUmVjb3Jkc09uU2VydmVyIik7Ci0gICAgQVNTRVJUKCZt
X2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFT
U0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2lu
VGhyZWFkKCkpKTsKIAogICAgIG1fZGF0YWJhc2UtPmNvbm5lY3Rpb25Qcm94eSgpLmdldEFsbFJl
Y29yZHMob3BlcmF0aW9uLCBnZXRBbGxSZWNvcmRzRGF0YSk7CiB9CkBAIC05NzYsNyArOTc2LDcg
QEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6Z2V0QWxsUmVjb3Jkc09uU2VydmVyKElEQkNsaWVudDo6
VHJhbnNhY3Rpb25PcGVyYXRpb24mIG9wZXIKIHZvaWQgSURCVHJhbnNhY3Rpb246OmRpZEdldEFs
bFJlY29yZHNPblNlcnZlcihJREJSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBJREJSZXN1bHREYXRh
JiByZXN1bHREYXRhKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlk
R2V0QWxsUmVjb3Jkc09uU2VydmVyIik7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5U
aHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJl
YWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKIAogICAg
IGlmIChyZXN1bHREYXRhLnR5cGUoKSA9PSBJREJSZXN1bHRUeXBlOjpFcnJvcikgewogICAgICAg
ICBjb21wbGV0ZU5vbmN1cnNvclJlcXVlc3QocmVxdWVzdCwgcmVzdWx0RGF0YSk7CkBAIC0xMDAz
LDcgKzEwMDMsNyBAQCBSZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVlc3RHZXRS
ZWNvcmQoSlNHbG9iYWxPYmplY3QmIHN0YXRlLCBJREJPYmplYwogICAgIExPRyhJbmRleGVkREIs
ICJJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdldFJlY29yZCIpOwogICAgIEFTU0VSVChpc0FjdGl2
ZSgpKTsKICAgICBBU1NFUlQoIWdldFJlY29yZERhdGEua2V5UmFuZ2VEYXRhLmlzTnVsbCk7Ci0g
ICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50
KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRh
YmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIEFTU0VSVF9VTlVTRUQoc3RhdGUsIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSA9PSBzY3JpcHRFeGVjdXRpb25Db250ZXh0RnJvbUV4ZWNTdGF0
ZSgmc3RhdGUpKTsKIApAQCAtMTAyNSw3ICsxMDI1LDcgQEAgUmVmPElEQlJlcXVlc3Q+IElEQlRy
YW5zYWN0aW9uOjpyZXF1ZXN0R2V0UmVjb3JkKEpTR2xvYmFsT2JqZWN0JiBzdGF0ZSwgSURCT2Jq
ZWMKIFJlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdldFZhbHVlKEpTR2xv
YmFsT2JqZWN0JiBzdGF0ZSwgSURCSW5kZXgmIGluZGV4LCBjb25zdCBJREJLZXlSYW5nZURhdGEm
IHJhbmdlKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdl
dFZhbHVlIik7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhy
ZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JU
aHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIHJldHVybiByZXF1ZXN0
SW5kZXhSZWNvcmQoc3RhdGUsIGluZGV4LCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZTo6VmFs
dWUsIHJhbmdlKTsKIH0KQEAgLTEwMzMsNyArMTAzMyw3IEBAIFJlZjxJREJSZXF1ZXN0PiBJREJU
cmFuc2FjdGlvbjo6cmVxdWVzdEdldFZhbHVlKEpTR2xvYmFsT2JqZWN0JiBzdGF0ZSwgSURCSW5k
ZXgmCiBSZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVlc3RHZXRLZXkoSlNHbG9i
YWxPYmplY3QmIHN0YXRlLCBJREJJbmRleCYgaW5kZXgsIGNvbnN0IElEQktleVJhbmdlRGF0YSYg
cmFuZ2UpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0R2V0
VmFsdWUiKTsKLSAgICBBU1NFUlQoJm1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpID09ICZUaHJl
YWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRo
cmVhZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgcmV0dXJuIHJlcXVlc3RJ
bmRleFJlY29yZChzdGF0ZSwgaW5kZXgsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlOjpLZXks
IHJhbmdlKTsKIH0KQEAgLTEwNDMsNyArMTA0Myw3IEBAIFJlZjxJREJSZXF1ZXN0PiBJREJUcmFu
c2FjdGlvbjo6cmVxdWVzdEluZGV4UmVjb3JkKEpTR2xvYmFsT2JqZWN0JiBzdGF0ZSwgSURCSW5k
CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0R2V0VmFsdWUiKTsK
ICAgICBBU1NFUlQoaXNBY3RpdmUoKSk7CiAgICAgQVNTRVJUKCFyYW5nZS5pc051bGwpOwotICAg
IEFTU0VSVCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgp
KTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJh
c2UtPm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBBU1NFUlRfVU5VU0VEKHN0YXRlLCBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkgPT0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dEZyb21FeGVjU3RhdGUo
JnN0YXRlKSk7CiAKQEAgLTEwNjUsNyArMTA2NSw3IEBAIFJlZjxJREJSZXF1ZXN0PiBJREJUcmFu
c2FjdGlvbjo6cmVxdWVzdEluZGV4UmVjb3JkKEpTR2xvYmFsT2JqZWN0JiBzdGF0ZSwgSURCSW5k
CiB2b2lkIElEQlRyYW5zYWN0aW9uOjpnZXRSZWNvcmRPblNlcnZlcihJREJDbGllbnQ6OlRyYW5z
YWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24sIGNvbnN0IElEQkdldFJlY29yZERhdGEmIGdldFJl
Y29yZERhdGEpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpnZXRSZWNv
cmRPblNlcnZlciIpOwotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0g
JlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRh
Rm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBtX2RhdGFiYXNl
LT5jb25uZWN0aW9uUHJveHkoKS5nZXRSZWNvcmQob3BlcmF0aW9uLCBnZXRSZWNvcmREYXRhKTsK
IH0KQEAgLTEwNzMsNyArMTA3Myw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OmdldFJlY29yZE9u
U2VydmVyKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mIG9wZXJhdGlvCiB2b2lkIElE
QlRyYW5zYWN0aW9uOjpkaWRHZXRSZWNvcmRPblNlcnZlcihJREJSZXF1ZXN0JiByZXF1ZXN0LCBj
b25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQogewogICAgIExPRyhJbmRleGVkREIsICJJ
REJUcmFuc2FjdGlvbjo6ZGlkR2V0UmVjb3JkT25TZXJ2ZXIiKTsKLSAgICBBU1NFUlQoJm1fZGF0
YWJhc2UtPm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJU
KGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJl
YWQoKSkpOwogCiAgICAgaWYgKHJlc3VsdERhdGEudHlwZSgpID09IElEQlJlc3VsdFR5cGU6OkVy
cm9yKSB7CiAgICAgICAgIGNvbXBsZXRlTm9uY3Vyc29yUmVxdWVzdChyZXF1ZXN0LCByZXN1bHRE
YXRhKTsKQEAgLTExMDgsNyArMTEwOCw3IEBAIFJlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlv
bjo6cmVxdWVzdENvdW50KEpTR2xvYmFsT2JqZWN0JiBzdGF0ZSwgSURCT2JqZWN0U3RvCiAgICAg
TE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0Q291bnQgKElEQk9iamVjdFN0
b3JlKSIpOwogICAgIEFTU0VSVChpc0FjdGl2ZSgpKTsKICAgICBBU1NFUlQoIXJhbmdlLmlzTnVs
bCk7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpj
dXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQo
bV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIEFTU0VSVF9VTlVTRUQoc3RhdGUs
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSBzY3JpcHRFeGVjdXRpb25Db250ZXh0RnJvbUV4
ZWNTdGF0ZSgmc3RhdGUpKTsKIApAQCAtMTEzMCw3ICsxMTMwLDcgQEAgUmVmPElEQlJlcXVlc3Q+
IElEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0Q291bnQoSlNHbG9iYWxPYmplY3QmIHN0YXRlLCBJREJJ
bmRleCYgaW4KICAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OnJlcXVlc3RDb3Vu
dCAoSURCSW5kZXgpIik7CiAgICAgQVNTRVJUKGlzQWN0aXZlKCkpOwogICAgIEFTU0VSVCghcmFu
Z2UuaXNOdWxsKTsKLSAgICBBU1NFUlQoJm1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpID09ICZU
aHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZv
clRocmVhZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgQVNTRVJUX1VOVVNF
RChzdGF0ZSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRGcm9tRXhlY1N0YXRlKCZzdGF0ZSkpOwogCkBAIC0xMTUwLDcgKzExNTAsNyBAQCBSZWY8SURC
UmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVlc3RDb3VudChKU0dsb2JhbE9iamVjdCYgc3Rh
dGUsIElEQkluZGV4JiBpbgogdm9pZCBJREJUcmFuc2FjdGlvbjo6Z2V0Q291bnRPblNlcnZlcihJ
REJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24sIGNvbnN0IElEQktleVJh
bmdlRGF0YSYga2V5UmFuZ2UpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9u
OjpnZXRDb3VudE9uU2VydmVyIik7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJl
YWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRM
b2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIG1f
ZGF0YWJhc2UtPmNvbm5lY3Rpb25Qcm94eSgpLmdldENvdW50KG9wZXJhdGlvbiwga2V5UmFuZ2Up
OwogfQpAQCAtMTE1OCw3ICsxMTU4LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6Z2V0Q291bnRP
blNlcnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24KIHZvaWQg
SURCVHJhbnNhY3Rpb246OmRpZEdldENvdW50T25TZXJ2ZXIoSURCUmVxdWVzdCYgcmVxdWVzdCwg
Y29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAi
SURCVHJhbnNhY3Rpb246OmRpZEdldENvdW50T25TZXJ2ZXIiKTsKLSAgICBBU1NFUlQoJm1fZGF0
YWJhc2UtPm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJU
KGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJl
YWQoKSkpOwogCiAgICAgcmVxdWVzdC5zZXRSZXN1bHQocmVzdWx0RGF0YS5yZXN1bHRJbnRlZ2Vy
KCkpOwogICAgIGNvbXBsZXRlTm9uY3Vyc29yUmVxdWVzdChyZXF1ZXN0LCByZXN1bHREYXRhKTsK
QEAgLTExNjksNyArMTE2OSw3IEBAIFJlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVx
dWVzdERlbGV0ZVJlY29yZChKU0dsb2JhbE9iamVjdCYgc3RhdGUsIElEQk9iCiAgICAgTE9HKElu
ZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0RGVsZXRlUmVjb3JkIik7CiAgICAgQVNT
RVJUKGlzQWN0aXZlKCkpOwogICAgIEFTU0VSVCghcmFuZ2UuaXNOdWxsKTsKLSAgICBBU1NFUlQo
Jm1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAg
QVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX2RhdGFiYXNlLT5vcmln
aW5UaHJlYWQoKSkpOwogCiAgICAgQVNTRVJUX1VOVVNFRChzdGF0ZSwgc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpID09IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHRGcm9tRXhlY1N0YXRlKCZzdGF0ZSkp
OwogCkBAIC0xMTg4LDcgKzExODgsNyBAQCBSZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rpb246
OnJlcXVlc3REZWxldGVSZWNvcmQoSlNHbG9iYWxPYmplY3QmIHN0YXRlLCBJREJPYgogdm9pZCBJ
REJUcmFuc2FjdGlvbjo6ZGVsZXRlUmVjb3JkT25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlv
bk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlKQog
ewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGVsZXRlUmVjb3JkT25TZXJ2
ZXIiKTsKLSAgICBBU1NFUlQoJm1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6
OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVh
ZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgbV9kYXRhYmFzZS0+Y29ubmVj
dGlvblByb3h5KCkuZGVsZXRlUmVjb3JkKG9wZXJhdGlvbiwga2V5UmFuZ2UpOwogfQpAQCAtMTE5
Niw3ICsxMTk2LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGVsZXRlUmVjb3JkT25TZXJ2ZXIo
SURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYgb3BlcmEKIHZvaWQgSURCVHJhbnNhY3Rp
b246OmRpZERlbGV0ZVJlY29yZE9uU2VydmVyKElEQlJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IElE
QlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5z
YWN0aW9uOjpkaWREZWxldGVSZWNvcmRPblNlcnZlciIpOwotICAgIEFTU0VSVCgmbV9kYXRhYmFz
ZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2Fu
QWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgp
KSk7CiAKICAgICByZXF1ZXN0LnNldFJlc3VsdFRvVW5kZWZpbmVkKCk7CiAgICAgY29tcGxldGVO
b25jdXJzb3JSZXF1ZXN0KHJlcXVlc3QsIHJlc3VsdERhdGEpOwpAQCAtMTIwNiw3ICsxMjA2LDcg
QEAgUmVmPElEQlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0Q2xlYXJPYmplY3RTdG9y
ZShKU0dsb2JhbE9iamVjdCYgc3RhdGUsIEkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCVHJh
bnNhY3Rpb246OnJlcXVlc3RDbGVhck9iamVjdFN0b3JlIik7CiAgICAgQVNTRVJUKGlzQWN0aXZl
KCkpOwotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6
Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFk
KG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBBU1NFUlRfVU5VU0VEKHN0YXRl
LCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dEZyb21F
eGVjU3RhdGUoJnN0YXRlKSk7CiAKQEAgLTEyMjgsNyArMTIyOCw3IEBAIFJlZjxJREJSZXF1ZXN0
PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdENsZWFyT2JqZWN0U3RvcmUoSlNHbG9iYWxPYmplY3Qm
IHN0YXRlLCBJCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpjbGVhck9iamVjdFN0b3JlT25TZXJ2ZXIo
SURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBjb25zdCB1aW50NjRf
dCYgb2JqZWN0U3RvcmVJZGVudGlmaWVyKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFu
c2FjdGlvbjo6Y2xlYXJPYmplY3RTdG9yZU9uU2VydmVyIik7Ci0gICAgQVNTRVJUKCZtX2RhdGFi
YXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChj
YW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFk
KCkpKTsKIAogICAgIG1fZGF0YWJhc2UtPmNvbm5lY3Rpb25Qcm94eSgpLmNsZWFyT2JqZWN0U3Rv
cmUob3BlcmF0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOwogfQpAQCAtMTIzNiw3ICsxMjM2
LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6Y2xlYXJPYmplY3RTdG9yZU9uU2VydmVyKElEQkNs
aWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mIG8KIHZvaWQgSURCVHJhbnNhY3Rpb246OmRpZENs
ZWFyT2JqZWN0U3RvcmVPblNlcnZlcihJREJSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBJREJSZXN1
bHREYXRhJiByZXN1bHREYXRhKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlv
bjo6ZGlkQ2xlYXJPYmplY3RTdG9yZU9uU2VydmVyIik7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNl
LT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5B
Y2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkp
KTsKIAogICAgIHJlcXVlc3Quc2V0UmVzdWx0VG9VbmRlZmluZWQoKTsKICAgICBjb21wbGV0ZU5v
bmN1cnNvclJlcXVlc3QocmVxdWVzdCwgcmVzdWx0RGF0YSk7CkBAIC0xMjQ4LDcgKzEyNDgsNyBA
QCBSZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVlc3RQdXRPckFkZChKU0dsb2Jh
bE9iamVjdCYgc3RhdGUsIElEQk9iamVjdAogICAgIEFTU0VSVChpc0FjdGl2ZSgpKTsKICAgICBB
U1NFUlQoIWlzUmVhZE9ubHkoKSk7CiAgICAgQVNTRVJUKG9iamVjdFN0b3JlLmluZm8oKS5hdXRv
SW5jcmVtZW50KCkgfHwga2V5KTsKLSAgICBBU1NFUlQoJm1fZGF0YWJhc2UtPm9yaWdpblRocmVh
ZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExv
Y2FsRGF0YUZvclRocmVhZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgQVNT
RVJUX1VOVVNFRChzdGF0ZSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRGcm9tRXhlY1N0YXRlKCZzdGF0ZSkpOwogCkBAIC0xMjY4LDcgKzEyNjgsNyBA
QCBSZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVlc3RQdXRPckFkZChKU0dsb2Jh
bE9iamVjdCYgc3RhdGUsIElEQk9iamVjdAogdm9pZCBJREJUcmFuc2FjdGlvbjo6cHV0T3JBZGRP
blNlcnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24sIFJlZlB0
cjxJREJLZXk+IGtleSwgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIGNvbnN0
IEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlJiBvdmVyd3JpdGVNb2RlKQogewog
ICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6cHV0T3JBZGRPblNlcnZlciIpOwot
ICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBB
U1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG9yaWdpblRocmVhZCgpKSk7
CiAgICAgQVNTRVJUKCFpc1JlYWRPbmx5KCkpOwogICAgIEFTU0VSVCh2YWx1ZSk7CiAKQEAgLTEz
MDEsNyArMTMwMSw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OnB1dE9yQWRkT25TZXJ2ZXIoSURC
Q2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uCiAgICAgb3BlcmF0aW9uLnNl
dE5leHRSZXF1ZXN0Q2FuR29Ub1NlcnZlcihmYWxzZSk7CiAKICAgICB2YWx1ZS0+d3JpdGVCbG9i
c1RvRGlza0ZvckluZGV4ZWREQihbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCB0aGlz
LCBwcm90ZWN0ZWRPcGVyYXRpb24gPSBSZWY8SURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlv
bj4ob3BlcmF0aW9uKSwga2V5RGF0YSA9IElEQktleURhdGEoa2V5LmdldCgpKS5pc29sYXRlZENv
cHkoKSwgb3ZlcndyaXRlTW9kZV0oSURCVmFsdWUmJiBpZGJWYWx1ZSkgbXV0YWJsZSB7Ci0gICAg
ICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICAg
ICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChvcmlnaW5UaHJlYWQo
KSkpOwogICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgICAgICBpZiAoaWRiVmFs
dWUuZGF0YSgpLmRhdGEoKSkgewogICAgICAgICAgICAgbV9kYXRhYmFzZS0+Y29ubmVjdGlvblBy
b3h5KCkucHV0T3JBZGQocHJvdGVjdGVkT3BlcmF0aW9uLmdldCgpLCBXVEZNb3ZlKGtleURhdGEp
LCBpZGJWYWx1ZSwgb3ZlcndyaXRlTW9kZSk7CkBAIC0xMzIwLDcgKzEzMjAsNyBAQCB2b2lkIElE
QlRyYW5zYWN0aW9uOjpwdXRPckFkZE9uU2VydmVyKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVy
YXRpb24mIG9wZXJhdGlvbgogdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGlkUHV0T3JBZGRPblNlcnZl
cihJREJSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQog
ewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlkUHV0T3JBZGRPblNlcnZl
ciIpOwotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6
Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFk
KG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBpZiAoYXV0byogcmVzdWx0ID0g
cmVzdWx0RGF0YS5yZXN1bHRLZXkoKSkKICAgICAgICAgcmVxdWVzdC5zZXRSZXN1bHQoKnJlc3Vs
dCk7CkBAIC0xMzMyLDcgKzEzMzIsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRQdXRPckFk
ZE9uU2VydmVyKElEQlJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IElEQlJlc3VsdERhdAogdm9pZCBJ
REJUcmFuc2FjdGlvbjo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBvYmplY3RTdG9y
ZU5hbWUpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkZWxldGVPYmpl
Y3RTdG9yZSIpOwotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRo
cmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9y
VGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CiAgICAgQVNTRVJUKGlzVmVyc2lv
bkNoYW5nZSgpKTsKIAogICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9yZWZlcmVuY2VkT2JqZWN0
U3RvcmVMb2NrKTsKQEAgLTEzNTUsNyArMTM1NSw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OmRl
bGV0ZU9iamVjdFN0b3JlT25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYK
IHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRlbGV0ZU9iamVjdFN0b3Jl
T25TZXJ2ZXIiKTsKICAgICBBU1NFUlQoaXNWZXJzaW9uQ2hhbmdlKCkpOwotICAgIEFTU0VSVCgm
bV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBB
U1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdp
blRocmVhZCgpKSk7CiAKICAgICBtX2RhdGFiYXNlLT5jb25uZWN0aW9uUHJveHkoKS5kZWxldGVP
YmplY3RTdG9yZShvcGVyYXRpb24sIG9iamVjdFN0b3JlTmFtZSk7CiB9CkBAIC0xMzYzLDE0ICsx
MzYzLDE0IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OmRlbGV0ZU9iamVjdFN0b3JlT25TZXJ2ZXIo
SURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYKIHZvaWQgSURCVHJhbnNhY3Rpb246OmRp
ZERlbGV0ZU9iamVjdFN0b3JlT25TZXJ2ZXIoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0
YSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRpZERlbGV0ZU9iamVj
dFN0b3JlT25TZXJ2ZXIiKTsKLSAgICBBU1NFUlQoJm1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgp
ID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2Fs
RGF0YUZvclRocmVhZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkpOwogICAgIEFTU0VSVF9V
TlVTRUQocmVzdWx0RGF0YSwgcmVzdWx0RGF0YS50eXBlKCkgPT0gSURCUmVzdWx0VHlwZTo6RGVs
ZXRlT2JqZWN0U3RvcmVTdWNjZXNzIHx8IHJlc3VsdERhdGEudHlwZSgpID09IElEQlJlc3VsdFR5
cGU6OkVycm9yKTsKIH0KIAogdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGVsZXRlSW5kZXgodWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSkKIHsKICAg
ICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRlbGV0ZUluZGV4Iik7Ci0gICAgQVNT
RVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOwor
ICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+
b3JpZ2luVGhyZWFkKCkpKTsKICAgICBBU1NFUlQoaXNWZXJzaW9uQ2hhbmdlKCkpOwogCiAgICAg
TE9HKEluZGV4ZWREQk9wZXJhdGlvbnMsICJJREIgZGVsZXRlIGluZGV4IG9wZXJhdGlvbjogJXMg
KCUiIFBSSXU2NCAiKSIsIGluZGV4TmFtZS51dGY4KCkuZGF0YSgpLCBvYmplY3RTdG9yZUlkZW50
aWZpZXIpOwpAQCAtMTM4NSw3ICsxMzg1LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGVsZXRl
SW5kZXhPblNlcnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXQKIHsK
ICAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRlbGV0ZUluZGV4T25TZXJ2ZXIi
KTsKICAgICBBU1NFUlQoaXNWZXJzaW9uQ2hhbmdlKCkpOwotICAgIEFTU0VSVCgmbV9kYXRhYmFz
ZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2Fu
QWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgp
KSk7CiAKICAgICBtX2RhdGFiYXNlLT5jb25uZWN0aW9uUHJveHkoKS5kZWxldGVJbmRleChvcGVy
YXRpb24sIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhOYW1lKTsKIH0KQEAgLTEzOTMsNyAr
MTM5Myw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OmRlbGV0ZUluZGV4T25TZXJ2ZXIoSURCQ2xp
ZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0CiB2b2lkIElEQlRyYW5zYWN0aW9uOjpk
aWREZWxldGVJbmRleE9uU2VydmVyKGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCiB7
CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkaWREZWxldGVJbmRleE9uU2Vy
dmVyIik7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFk
OjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJl
YWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKICAgICBBU1NFUlRfVU5VU0VEKHJlc3Vs
dERhdGEsIHJlc3VsdERhdGEudHlwZSgpID09IElEQlJlc3VsdFR5cGU6OkRlbGV0ZUluZGV4U3Vj
Y2VzcyB8fCByZXN1bHREYXRhLnR5cGUoKSA9PSBJREJSZXN1bHRUeXBlOjpFcnJvcik7CiB9CiAK
QEAgLTE0MDEsOCArMTQwMSw4IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246Om9wZXJhdGlvbkNvbXBs
ZXRlZE9uQ2xpZW50KElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mCiB7CiAgICAgTE9H
KEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpvcGVyYXRpb25Db21wbGV0ZWRPbkNsaWVudCIp
OwogCi0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpj
dXJyZW50KCkpOwotICAgIEFTU0VSVCgmb3BlcmF0aW9uLm9yaWdpblRocmVhZCgpID09ICZUaHJl
YWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRo
cmVhZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NU
aHJlYWRMb2NhbERhdGFGb3JUaHJlYWQob3BlcmF0aW9uLm9yaWdpblRocmVhZCgpKSk7CiAgICAg
QVNTRVJUKG1fdHJhbnNhY3Rpb25PcGVyYXRpb25NYXAuZ2V0KG9wZXJhdGlvbi5pZGVudGlmaWVy
KCkpID09ICZvcGVyYXRpb24pOwogICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uT3BlcmF0aW9uc0lu
UHJvZ3Jlc3NRdWV1ZS5maXJzdCgpID09ICZvcGVyYXRpb24pOwogCkBAIC0xNDE1LDE0ICsxNDE1
LDE0IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246Om9wZXJhdGlvbkNvbXBsZXRlZE9uQ2xpZW50KElE
QkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mCiB2b2lkIElEQlRyYW5zYWN0aW9uOjplc3Rh
Ymxpc2hPblNlcnZlcigpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpl
c3RhYmxpc2hPblNlcnZlciIpOwotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFk
KCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9j
YWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBtX2Rh
dGFiYXNlLT5jb25uZWN0aW9uUHJveHkoKS5lc3RhYmxpc2hUcmFuc2FjdGlvbigqdGhpcyk7CiB9
CiAKIHZvaWQgSURCVHJhbnNhY3Rpb246OmFjdGl2YXRlKCkKIHsKLSAgICBBU1NFUlQoJm1fZGF0
YWJhc2UtPm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJU
KGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJl
YWQoKSkpOwogCiAgICAgaWYgKGlzRmluaXNoZWRPckZpbmlzaGluZygpKQogICAgICAgICByZXR1
cm47CkBAIC0xNDMyLDcgKzE0MzIsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjphY3RpdmF0ZSgp
CiAKIHZvaWQgSURCVHJhbnNhY3Rpb246OmRlYWN0aXZhdGUoKQogewotICAgIEFTU0VSVCgmbV9k
YXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NF
UlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRo
cmVhZCgpKSk7CiAKICAgICBpZiAobV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3Rh
dGU6OkFjdGl2ZSkKICAgICAgICAgbV9zdGF0ZSA9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0
ZTo6SW5hY3RpdmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9jbGllbnQvSURCQ29ubmVjdGlvblByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uUHJveHkuY3BwCmluZGV4IGM2MGUwMTI5Nzdi
ZTM3NzYxNGZkNjc3ZmNmM2IyMWMzNzhmMjg1NWEuLmRjNTc4MWJhZTBiOTliMmRmMzk2ZTM5YTdm
MjI0MjZjZjAyMjQ0MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9JREJDb25uZWN0aW9uUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uUHJveHkuY3BwCkBAIC01NDgsNiAr
NTQ4LDggQEAgdm9pZCBJREJDb25uZWN0aW9uUHJveHk6OmZvcmdldFRyYW5zYWN0aW9uKElEQlRy
YW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKIHRlbXBsYXRlPHR5cGVuYW1lIEtleVR5cGUsIHR5cGVu
YW1lIFZhbHVlVHlwZT4KIHZvaWQgcmVtb3ZlSXRlbXNNYXRjaGluZ0N1cnJlbnRUaHJlYWQoSGFz
aE1hcDxLZXlUeXBlLCBWYWx1ZVR5cGU+JiBtYXApCiB7CisgICAgLy8gRklYTUU6IFJldmlzaXQg
d2hlbiBpbnRyb2R1Y2luZyBXZWJUaHJlYWQgYXdhcmUgdGhyZWFkIGNvbXBhcmlzb24uCisgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDM0NQogICAgIGF1
dG8mIGN1cnJlbnRUaHJlYWQgPSBUaHJlYWQ6OmN1cnJlbnQoKTsKIAogICAgIFZlY3RvcjxLZXlU
eXBlPiBrZXlzOwpAQCAtNTY0LDYgKzU2Niw4IEBAIHZvaWQgcmVtb3ZlSXRlbXNNYXRjaGluZ0N1
cnJlbnRUaHJlYWQoSGFzaE1hcDxLZXlUeXBlLCBWYWx1ZVR5cGU+JiBtYXApCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBWYWx1ZVR5cGU+CiB2b2lkIHNldE1hdGNoaW5nSXRl
bXNDb250ZXh0U3VzcGVuZGVkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGN1cnJlbnRDb250ZXh0
LCBIYXNoTWFwPEtleVR5cGUsIFZhbHVlVHlwZT4mIG1hcCwgYm9vbCBpc0NvbnRleHRTdXNwZW5k
ZWQpCiB7CisgICAgLy8gRklYTUU6IFJldmlzaXQgd2hlbiBpbnRyb2R1Y2luZyBXZWJUaHJlYWQg
YXdhcmUgdGhyZWFkIGNvbXBhcmlzb24uCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwNDM0NQogICAgIGF1dG8mIGN1cnJlbnRUaHJlYWQgPSBUaHJlYWQ6
OmN1cnJlbnQoKTsKICAgICBmb3IgKGF1dG8mIGl0ZXJhdG9yIDogbWFwKSB7CiAgICAgICAgIGlm
ICgmaXRlcmF0b3IudmFsdWUtPm9yaWdpblRocmVhZCgpICE9ICZjdXJyZW50VGhyZWFkKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L1RyYW5zYWN0
aW9uT3BlcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQv
VHJhbnNhY3Rpb25PcGVyYXRpb24uaAppbmRleCA5ZTczYTAxMTJjYzgxMmY2NWM5OTM0OTI3MWQy
N2FhNjBjMzhkNjJjLi41ZDg4OWQ2YTg5Njc0NjdkNDRlOTM5Y2FmZGJmYTkxNjFiNzkxYTdjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvVHJhbnNh
Y3Rpb25PcGVyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9j
bGllbnQvVHJhbnNhY3Rpb25PcGVyYXRpb24uaApAQCAtNTEsMTIgKzUxLDEyIEBAIGNsYXNzIFRy
YW5zYWN0aW9uT3BlcmF0aW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRyYW5zYWN0
aW9uT3BlcmF0aW9uPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+VHJhbnNhY3Rpb25PcGVyYXRp
b24oKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fb3JpZ2luVGhyZWFkLnB0cigpID09ICZUaHJl
YWQ6OmN1cnJlbnQoKSk7CisgICAgICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFG
b3JUaHJlYWQobV9vcmlnaW5UaHJlYWQuZ2V0KCkpKTsKICAgICB9CiAKICAgICB2b2lkIHBlcmZv
cm0oKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fb3JpZ2luVGhyZWFkLnB0cigpID09ICZUaHJl
YWQ6OmN1cnJlbnQoKSk7CisgICAgICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFG
b3JUaHJlYWQobV9vcmlnaW5UaHJlYWQuZ2V0KCkpKTsKICAgICAgICAgQVNTRVJUKG1fcGVyZm9y
bUZ1bmN0aW9uKTsKICAgICAgICAgbV9wZXJmb3JtRnVuY3Rpb24oKTsKICAgICAgICAgbV9wZXJm
b3JtRnVuY3Rpb24gPSB7IH07CkBAIC02NCw3ICs2NCw3IEBAIGNsYXNzIFRyYW5zYWN0aW9uT3Bl
cmF0aW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRyYW5zYWN0aW9uT3BlcmF0aW9u
PiB7CiAKICAgICB2b2lkIHRyYW5zaXRpb25Ub0NvbXBsZXRlT25UaGlzVGhyZWFkKGNvbnN0IElE
QlJlc3VsdERhdGEmIGRhdGEpCiAgICAgewotICAgICAgICBBU1NFUlQobV9vcmlnaW5UaHJlYWQu
cHRyKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICAgICAgQVNTRVJUKGNhbkFjY2Vzc1Ro
cmVhZExvY2FsRGF0YUZvclRocmVhZChtX29yaWdpblRocmVhZC5nZXQoKSkpOwogICAgICAgICBt
X3RyYW5zYWN0aW9uLT5vcGVyYXRpb25Db21wbGV0ZWRPblNlcnZlcihkYXRhLCAqdGhpcyk7CiAg
ICAgfQogCkBAIC03Miw3ICs3Miw3IEBAIGNsYXNzIFRyYW5zYWN0aW9uT3BlcmF0aW9uIDogcHVi
bGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRyYW5zYWN0aW9uT3BlcmF0aW9uPiB7CiAgICAgewog
ICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgICAgIGlmIChtX29yaWdpblRo
cmVhZC5wdHIoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpCisgICAgICAgIGlmIChjYW5BY2Nlc3NU
aHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9vcmlnaW5UaHJlYWQuZ2V0KCkpKQogICAgICAgICAg
ICAgdHJhbnNpdGlvblRvQ29tcGxldGVPblRoaXNUaHJlYWQoZGF0YSk7CiAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgbV90cmFuc2FjdGlvbi0+cGVyZm9ybUNhbGxiYWNrT25PcmlnaW5UaHJl
YWQoKnRoaXMsICZUcmFuc2FjdGlvbk9wZXJhdGlvbjo6dHJhbnNpdGlvblRvQ29tcGxldGVPblRo
aXNUaHJlYWQsIGRhdGEpOwpAQCAtODMsNyArODMsNyBAQCBjbGFzcyBUcmFuc2FjdGlvbk9wZXJh
dGlvbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUcmFuc2FjdGlvbk9wZXJhdGlvbj4g
ewogCiAgICAgdm9pZCBkb0NvbXBsZXRlKGNvbnN0IElEQlJlc3VsdERhdGEmIGRhdGEpCiAgICAg
ewotICAgICAgICBBU1NFUlQobV9vcmlnaW5UaHJlYWQucHRyKCkgPT0gJlRocmVhZDo6Y3VycmVu
dCgpKTsKKyAgICAgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZCht
X29yaWdpblRocmVhZC5nZXQoKSkpOwogCiAgICAgICAgIGlmIChtX3BlcmZvcm1GdW5jdGlvbikK
ICAgICAgICAgICAgIG1fcGVyZm9ybUZ1bmN0aW9uID0geyB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383855</attachid>
            <date>2019-11-19 03:14:06 -0800</date>
            <delta_ts>2019-11-19 11:47:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204346-20191119031405.patch</filename>
            <type>text/plain</type>
            <size>109277</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyNjIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGRmZjgxNTg5YTkwNmFm
MGY4ZTIzYTAwNzAzODlkMzUxNzYyZDViMC4uZGY1ZWY4ZGFlOTg5ZGRmZGNjM2RkYTIzODZjNWIx
Y2U5ZGE2MzBkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzNyBAQAorMjAxOS0xMS0xOSAgWXVz
dWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisgICAgICAgIFtJbmRleGVkREJdIElu
ZGV4ZWREQidzIHRocmVhZGluZyBhc3NlcnRpb24gc2hvdWxkIHJlc3BlY3QgV2ViIHRocmVhZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0MzQ2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJldmlvdXNs
eSB3ZSBhcmUgZG9pbmcgcG9pbnRlci1jb21wYXJpc29uIGJldHdlZW4gVGhyZWFkOjpjdXJyZW50
KCkgYW5kIG9yaWdpbi10aHJlYWQgdG8KKyAgICAgICAgYXNzZXJ0IHRoZSB0aHJlYWQgYWZmaW5p
dHkuIEJ1dCB0aGlzIGRvZXMgbm90IHJlc3BlY3QgV2ViIHRocmVhZDogd2UgY2FuIGNyZWF0ZSBh
biBvYmplY3QKKyAgICAgICAgaW4gV2ViIFRocmVhZCwgYW5kIHRvdWNoIGl0IGluIHRoZSBtYWlu
IHRocmVhZCBpZiB3ZWIgdGhyZWFkIGxvY2sgaXMgY29ycmVjdGx5IGhlbGQuCisKKyAgICAgICAg
VGhpcyBwYXRjaCByZXBsYWNlcyBwb2ludGVyLWNvbXBhcmlzb24gd2l0aCBXVEY6OmNhbkFjY2Vz
c1RocmVhZExvY2FsRGF0YUZvclRocmVhZCBoZWxwZXIKKyAgICAgICAgZnVuY3Rpb24gd2hpY2gg
YXBwcm9wcmlhdGVseSByZXNwZWN0cyBXZWIgdGhyZWFkIHN0YXR1cy4KKworICAgICAgICBObyBi
ZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJBY3RpdmVE
T01PYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkFjdGl2ZURPTU9iamVjdDo6cGVyZm9y
bUNhbGxiYWNrT25PcmlnaW5UaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQWN0aXZlRE9N
T2JqZWN0OjpjYWxsRnVuY3Rpb25Pbk9yaWdpblRocmVhZCk6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvSURCQ3Vyc29yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6SURC
Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6fklEQkN1cnNvcik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnNvdXJjZXNEZWxldGVkIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkN1cnNvcjo6dHJhbnNhY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCQ3Vyc29yOjp1cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjphZHZh
bmNlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6Y29udGludWVGdW5jdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnVuY2hlY2tlZEl0ZXJhdGVDdXJzb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjpkZWxldGVGdW5jdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpJREJDdXJzb3I6OnNldEdldFJlc3VsdCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6On5JREJE
YXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6aGFzUGVuZGluZ0FjdGl2
aXR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpuYW1lIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjp2ZXJzaW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkRhdGFiYXNlOjpvYmplY3RTdG9yZU5hbWVzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkRhdGFiYXNlOjpyZW5hbWVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0
YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNl
Ojp0cmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6ZGVsZXRlT2Jq
ZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmNsb3NlKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpjb25uZWN0aW9uVG9TZXJ2ZXJMb3N0KToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjptYXliZUNsb3NlSW5TZXJ2ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SURCRGF0YWJhc2U6OmFjdGl2ZURPTU9iamVjdE5hbWUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0
YWJhc2U6OnN0YXJ0VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkRhdGFiYXNlOjpkaWRTdGFydFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkRhdGFiYXNlOjp3aWxsQ29tbWl0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURC
RGF0YWJhc2U6OmRpZENvbW1pdFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRh
dGFiYXNlOjp3aWxsQWJvcnRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRh
YmFzZTo6ZGlkQWJvcnRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFz
ZTo6ZGlkQ29tbWl0T3JBYm9ydFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRh
dGFiYXNlOjpmaXJlVmVyc2lvbkNoYW5nZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRh
dGFiYXNlOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpk
aWRDcmVhdGVJbmRleEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmRpZERl
bGV0ZUluZGV4SW5mbyk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OklEQkluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkluZGV4Ojp+SURCSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6Om5h
bWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OnNldE5hbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCSW5kZXg6Om9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkluZGV4OjprZXlQYXRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4Ojp1bmlx
dWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6Om11bHRpRW50cnkgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OnJvbGxiYWNrSW5mb0ZvclZlcnNpb25DaGFu
Z2VBYm9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6ZG9PcGVuQ3Vyc29yKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkluZGV4Ojpkb09wZW5LZXlDdXJzb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCSW5kZXg6OmRvQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OmRv
R2V0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4Ojpkb0dldEtleSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJJbmRleDo6ZG9HZXRBbGwpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6
OmRvR2V0QWxsS2V5cyk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6bWFya0FzRGVsZXRl
ZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OklEQk9iamVjdFN0b3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjp+SURCT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCT2JqZWN0U3RvcmU6Om5hbWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURC
T2JqZWN0U3RvcmU6OnNldE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6
OmtleVBhdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmluZGV4
TmFtZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OnRyYW5zYWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjphdXRvSW5jcmVtZW50IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpkb09wZW5DdXJzb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmRvT3BlbktleUN1cnNvcik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OklE
Qk9iamVjdFN0b3JlOjpnZXRLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6
OnB1dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpkb0RlbGV0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6Y2xlYXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklE
Qk9iamVjdFN0b3JlOjppbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6
ZGVsZXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmRvQ291bnQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmRvR2V0QWxsKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpkb0dldEFsbEtleXMpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmU6Om1hcmtBc0RlbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURC
T2JqZWN0U3RvcmU6OnJvbGxiYWNrRm9yVmVyc2lvbkNoYW5nZUFib3J0KToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQk9wZW5EQlJlcXVlc3Q6On5JREJPcGVuREJSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQk9wZW5EQlJlcXVlc3Q6Om9uRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCT3BlbkRC
UmVxdWVzdDo6dmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uRGlkRmluaXNoKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQk9wZW5EQlJlcXVlc3Q6OmZpcmVTdWNjZXNzQWZ0ZXJWZXJzaW9uQ2hhbmdlQ29t
bWl0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9wZW5EQlJlcXVlc3Q6OmZpcmVFcnJvckFmdGVy
VmVyc2lvbkNoYW5nZUNvbXBsZXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCT3BlbkRCUmVx
dWVzdDo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPcGVuREJSZXF1ZXN0
OjpvblN1Y2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6SURCT3BlbkRCUmVxdWVzdDo6b25VcGdy
YWRlTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9wZW5EQlJlcXVlc3Q6Om9uRGVsZXRl
RGF0YWJhc2VTdWNjZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9wZW5EQlJlcXVlc3Q6OnJl
cXVlc3RDb21wbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT3BlbkRCUmVxdWVzdDo6cmVx
dWVzdEJsb2NrZWQpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6fklEQlJlcXVlc3QpOgorICAgICAgICAo
V2ViQ29yZTo6IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNldFNvdXJj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpzZXRWZXJzaW9uQ2hhbmdlVHJhbnNh
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6dHJhbnNhY3Rpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6c291cmNlT2JqZWN0U3RvcmVJZGVudGlm
aWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNvdXJjZUluZGV4SWRl
bnRpZmllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpyZXF1ZXN0ZWRP
YmplY3RTdG9yZVJlY29yZFR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVz
dDo6cmVxdWVzdGVkSW5kZXhSZWNvcmRUeXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlJlcXVlc3Q6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlJlcXVlc3Q6OmFjdGl2ZURPTU9iamVjdE5hbWUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCUmVxdWVzdDo6aGFzUGVuZGluZ0FjdGl2aXR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlJlcXVlc3Q6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6ZW5x
dWV1ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50
SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpzZXRSZXN1bHQpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6c2V0UmVzdWx0VG9TdHJ1Y3R1cmVkQ2xvbmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6c2V0UmVzdWx0VG9VbmRlZmluZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6cmVzdWx0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlJlcXVlc3Q6OndpbGxJdGVyYXRlQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlJlcXVlc3Q6OmRpZE9wZW5Pckl0ZXJhdGVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURC
UmVxdWVzdDo6Y29tcGxldGVSZXF1ZXN0QW5kRGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJSZXF1ZXN0OjpvbkVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6
Om9uU3VjY2Vzcyk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OklEQlRyYW5zYWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjp+SURCVHJhbnNhY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlTmFtZXMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmRiKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlRyYW5zYWN0aW9uOjplcnJvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbjo6b2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246
OmFib3J0RHVlVG9GYWlsZWRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0
aW9uOjp0cmFuc2l0aW9uZWRUb0ZpbmlzaGluZyk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbjo6YWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmludGVy
bmFsQWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmFib3J0T25TZXJ2
ZXJBbmRDYW5jZWxSZXF1ZXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6
YWN0aXZlRE9NT2JqZWN0TmFtZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2Fj
dGlvbjo6aGFzUGVuZGluZ0FjdGl2aXR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRy
YW5zYWN0aW9uOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjppc0Fj
dGl2ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6aXNGaW5pc2hl
ZE9yRmluaXNoaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjph
ZGRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpyZW1vdmVSZXF1
ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpzY2hlZHVsZU9wZXJhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6dHJ5U2NoZWR1bGVQZW5kaW5n
T3BlcmF0aW9uVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnBlbmRp
bmdPcGVyYXRpb25UaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9u
OjpvcGVyYXRpb25Db21wbGV0ZWRPblNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbjo6c2NoZWR1bGVDb21wbGV0ZWRPcGVyYXRpb25UaW1lcik6CisgICAgICAgIChXZWJD
b3JlOjpJREJUcmFuc2FjdGlvbjo6Y29tcGxldGVkT3BlcmF0aW9uVGltZXJGaXJlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6Y29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlRyYW5zYWN0aW9uOjpjb21taXRPblNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJU
cmFuc2FjdGlvbjo6ZmluaXNoQWJvcnRPckNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJU
cmFuc2FjdGlvbjo6ZGlkU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246
Om5vdGlmeURpZEFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkaWRB
Ym9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGlkQ29tbWl0KToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpmaXJlT25Db21wbGV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZmlyZU9uQWJvcnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCVHJhbnNhY3Rpb246OmVucXVldWVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJU
cmFuc2FjdGlvbjo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2Fj
dGlvbjo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rp
b246OmNyZWF0ZU9iamVjdFN0b3JlT25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJh
bnNhY3Rpb246OmRpZENyZWF0ZU9iamVjdFN0b3JlT25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCVHJhbnNhY3Rpb246OnJlbmFtZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlRyYW5zYWN0aW9uOjpyZW5hbWVPYmplY3RTdG9yZU9uU2VydmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkaWRSZW5hbWVPYmplY3RTdG9yZU9uU2VydmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6Y3JlYXRlSW5kZXhPblNlcnZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGlkQ3JlYXRlSW5kZXhPblNlcnZlcik6CisgICAgICAg
IChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6cmVuYW1lSW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCVHJhbnNhY3Rpb246OnJlbmFtZUluZGV4T25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCVHJhbnNhY3Rpb246OmRpZFJlbmFtZUluZGV4T25TZXJ2ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCVHJhbnNhY3Rpb246OnJlcXVlc3RPcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlRyYW5zYWN0aW9uOjpkb1JlcXVlc3RPcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlRyYW5zYWN0aW9uOjpvcGVuQ3Vyc29yT25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCVHJhbnNhY3Rpb246OmRpZE9wZW5DdXJzb3JPblNlcnZlcik6CisgICAgICAgIChXZWJD
b3JlOjpJREJUcmFuc2FjdGlvbjo6aXRlcmF0ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJUcmFuc2FjdGlvbjo6aXRlcmF0ZUN1cnNvck9uU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlRyYW5zYWN0aW9uOjpkaWRJdGVyYXRlQ3Vyc29yT25TZXJ2ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCVHJhbnNhY3Rpb246OnJlcXVlc3RHZXRBbGxPYmplY3RTdG9yZVJlY29yZHMpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnJlcXVlc3RHZXRBbGxJbmRleFJlY29y
ZHMpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmdldEFsbFJlY29yZHNPblNl
cnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGlkR2V0QWxsUmVjb3Jk
c09uU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0R2V0
UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0R2V0VmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnJlcXVlc3RHZXRLZXkpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnJlcXVlc3RJbmRleFJlY29yZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6Z2V0UmVjb3JkT25TZXJ2ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmRpZEdldFJlY29yZE9uU2VydmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0Q291bnQpOgorICAgICAgICAo
V2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmdldENvdW50T25TZXJ2ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCVHJhbnNhY3Rpb246OmRpZEdldENvdW50T25TZXJ2ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCVHJhbnNhY3Rpb246OnJlcXVlc3REZWxldGVSZWNvcmQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCVHJhbnNhY3Rpb246OmRlbGV0ZVJlY29yZE9uU2VydmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkaWREZWxldGVSZWNvcmRPblNlcnZlcik6CisgICAgICAg
IChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6cmVxdWVzdENsZWFyT2JqZWN0U3RvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmNsZWFyT2JqZWN0U3RvcmVPblNlcnZlcik6
CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGlkQ2xlYXJPYmplY3RTdG9yZU9u
U2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0UHV0T3JB
ZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnB1dE9yQWRkT25TZXJ2ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmRpZFB1dE9yQWRkT25TZXJ2ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmRlbGV0ZU9iamVjdFN0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkZWxldGVPYmplY3RTdG9yZU9uU2Vy
dmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkaWREZWxldGVPYmplY3RT
dG9yZU9uU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkZWxldGVJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGVsZXRlSW5kZXhPblNl
cnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGlkRGVsZXRlSW5kZXhP
blNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6b3BlcmF0aW9uQ29t
cGxldGVkT25DbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmVzdGFi
bGlzaE9uU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjphY3RpdmF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGVhY3RpdmF0ZSk6CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Qcm94eS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OnJlbW92ZUl0ZW1zTWF0Y2hpbmdDdXJyZW50VGhy
ZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6c2V0TWF0Y2hpbmdJdGVtc0NvbnRl
eHRTdXNwZW5kZWQpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9UcmFuc2Fj
dGlvbk9wZXJhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpUcmFuc2FjdGlv
bk9wZXJhdGlvbjo6flRyYW5zYWN0aW9uT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29y
ZTo6SURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbjo6dHJhbnNpdGlvblRvQ29tcGxldGVP
blRoaXNUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpUcmFuc2FjdGlvbk9w
ZXJhdGlvbjo6dHJhbnNpdGlvblRvQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xp
ZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbjo6ZG9Db21wbGV0ZSk6CisKIDIwMTktMTEtMTggIEpv
aG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CiAKICAgICAgICAgQ2hlY2sgaWYgSVRQ
IGlzIG9uIGJlZm9yZSBhcHBseWluZyB0aGlyZC1wYXJ0eSBjb29raWUgYmxvY2tpbmcKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFjdGl2ZURPTU9iamVj
dC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQWN0aXZlRE9NT2JqZWN0
LmgKaW5kZXggMmI0MmMwNmYzOTgzOGQwOThjNTM3ZmMxMzNiYzhhZDllNGQ4YzZlZC4uZjAzZWIw
ZjBmODFhZDJhOWMxOTk4MGNmNjY0NWM1MWJjODA0NWYzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQWN0aXZlRE9NT2JqZWN0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQWN0aXZlRE9NT2JqZWN0LmgKQEAgLTM4LDcg
KzM4LDcgQEAgY2xhc3MgSURCQWN0aXZlRE9NT2JqZWN0IDogcHVibGljIEFjdGl2ZURPTU9iamVj
dCB7CiAgICAgVGhyZWFkJiBvcmlnaW5UaHJlYWQoKSBjb25zdCB7IHJldHVybiBtX29yaWdpblRo
cmVhZC5nZXQoKTsgfQogCiAgICAgdm9pZCBjb250ZXh0RGVzdHJveWVkKCkgZmluYWwgewotICAg
ICAgICBBU1NFUlQobV9vcmlnaW5UaHJlYWQucHRyKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsK
KyAgICAgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX29yaWdp
blRocmVhZC5nZXQoKSkpOwogCiAgICAgICAgIExvY2tlcjxMb2NrPiBsb2NrKG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dExvY2spOwogICAgICAgICBBY3RpdmVET01PYmplY3Q6OmNvbnRleHREZXN0
cm95ZWQoKTsKQEAgLTQ5LDcgKzQ5LDcgQEAgY2xhc3MgSURCQWN0aXZlRE9NT2JqZWN0IDogcHVi
bGljIEFjdGl2ZURPTU9iamVjdCB7CiAgICAgewogICAgICAgICBBU1NFUlQoJm9yaWdpblRocmVh
ZCgpID09ICZvYmplY3Qub3JpZ2luVGhyZWFkKCkpOwogCi0gICAgICAgIGlmICgmb2JqZWN0Lm9y
aWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSkgeworICAgICAgICBpZiAoY2FuQWNj
ZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG9iamVjdC5vcmlnaW5UaHJlYWQoKSkpIHsKICAg
ICAgICAgICAgIChvYmplY3QuKm1ldGhvZCkoYXJndW1lbnRzLi4uKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQpAQCAtNjUsNyArNjUsNyBAQCBjbGFzcyBJREJBY3RpdmVET01PYmpl
Y3QgOiBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKIAogICAgIHZvaWQgY2FsbEZ1bmN0aW9uT25P
cmlnaW5UaHJlYWQoV1RGOjpGdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uKQogICAgIHsKLSAg
ICAgICAgaWYgKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpIHsKKyAgICAg
ICAgaWYgKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChvcmlnaW5UaHJlYWQoKSkp
IHsKICAgICAgICAgICAgIGZ1bmN0aW9uKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCmlu
ZGV4IDg3NzEwMjIyMGE2OWEwNmI5MmVkMjdjMmM1MzY2NDNmNWI0ZWM3NWIuLjE0Y2NmOTgxNGI3
ZTM4NzNiZTAwZTYxOGJlNWIzNmQ3OTBlZmJlOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcApAQCAtNjIsMjQgKzYyLDI0IEBAIElEQkN1cnNv
cjo6SURCQ3Vyc29yKElEQk9iamVjdFN0b3JlJiBvYmplY3RTdG9yZSwgY29uc3QgSURCQ3Vyc29y
SW5mbyYgaW5mbykKICAgICA6IG1faW5mbyhpbmZvKQogICAgICwgbV9zb3VyY2UoJm9iamVjdFN0
b3JlKQogewotICAgIEFTU0VSVCgmZWZmZWN0aXZlT2JqZWN0U3RvcmUoKS50cmFuc2FjdGlvbigp
LmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBB
U1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKGVmZmVjdGl2ZU9iamVjdFN0
b3JlKCkudHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpKSk7CiB9CiAKIElE
QkN1cnNvcjo6SURCQ3Vyc29yKElEQkluZGV4JiBpbmRleCwgY29uc3QgSURCQ3Vyc29ySW5mbyYg
aW5mbykKICAgICA6IG1faW5mbyhpbmZvKQogICAgICwgbV9zb3VyY2UoJmluZGV4KQogewotICAg
IEFTU0VSVCgmZWZmZWN0aXZlT2JqZWN0U3RvcmUoKS50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCku
b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNj
ZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKGVmZmVjdGl2ZU9iamVjdFN0b3JlKCkudHJhbnNh
Y3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpKSk7CiB9CiAKIElEQkN1cnNvcjo6fklE
QkN1cnNvcigpCiB7Ci0gICAgQVNTRVJUKCZlZmZlY3RpdmVPYmplY3RTdG9yZSgpLnRyYW5zYWN0
aW9uKCkuZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOwor
ICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQoZWZmZWN0aXZlT2Jq
ZWN0U3RvcmUoKS50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkpKTsKIH0K
IAogYm9vbCBJREJDdXJzb3I6OnNvdXJjZXNEZWxldGVkKCkgY29uc3QKIHsKLSAgICBBU1NFUlQo
JmVmZmVjdGl2ZU9iamVjdFN0b3JlKCkudHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRo
cmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVh
ZExvY2FsRGF0YUZvclRocmVhZChlZmZlY3RpdmVPYmplY3RTdG9yZSgpLnRyYW5zYWN0aW9uKCku
ZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24o
bV9zb3VyY2UsCiAgICAgICAgIFtdIChjb25zdCBSZWZQdHI8SURCT2JqZWN0U3RvcmU+JiBvYmpl
Y3RTdG9yZSkgeyByZXR1cm4gb2JqZWN0U3RvcmUtPmlzRGVsZXRlZCgpOyB9LApAQCAtOTcsMTQg
Kzk3LDE0IEBAIElEQk9iamVjdFN0b3JlJiBJREJDdXJzb3I6OmVmZmVjdGl2ZU9iamVjdFN0b3Jl
KCkgY29uc3QKIAogSURCVHJhbnNhY3Rpb24mIElEQkN1cnNvcjo6dHJhbnNhY3Rpb24oKSBjb25z
dAogewotICAgIEFTU0VSVCgmZWZmZWN0aXZlT2JqZWN0U3RvcmUoKS50cmFuc2FjdGlvbigpLmRh
dGFiYXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NF
UlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKGVmZmVjdGl2ZU9iamVjdFN0b3Jl
KCkudHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpKSk7CiAgICAgcmV0dXJu
IGVmZmVjdGl2ZU9iamVjdFN0b3JlKCkudHJhbnNhY3Rpb24oKTsKIH0KIAogRXhjZXB0aW9uT3I8
UmVmPElEQlJlcXVlc3Q+PiBJREJDdXJzb3I6OnVwZGF0ZShKU0dsb2JhbE9iamVjdCYgc3RhdGUs
IEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQkN1cnNvcjo6dXBkYXRl
Iik7Ci0gICAgQVNTRVJUKCZlZmZlY3RpdmVPYmplY3RTdG9yZSgpLnRyYW5zYWN0aW9uKCkuZGF0
YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VS
VChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQoZWZmZWN0aXZlT2JqZWN0U3RvcmUo
KS50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIGlmIChz
b3VyY2VzRGVsZXRlZCgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRl
RXJyb3IsICJGYWlsZWQgdG8gZXhlY3V0ZSAndXBkYXRlJyBvbiAnSURCQ3Vyc29yJzogVGhlIGN1
cnNvcidzIHNvdXJjZSBvciBlZmZlY3RpdmUgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQu
Il9zIH07CkBAIC0xNDQsNyArMTQ0LDcgQEAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJ
REJDdXJzb3I6OnVwZGF0ZShKU0dsb2JhbE9iamVjdCYgc3RhdGUsIEpTVmFsdWUgdmEKIEV4Y2Vw
dGlvbk9yPHZvaWQ+IElEQkN1cnNvcjo6YWR2YW5jZSh1bnNpZ25lZCBjb3VudCkKIHsKICAgICBM
T0coSW5kZXhlZERCLCAiSURCQ3Vyc29yOjphZHZhbmNlIik7Ci0gICAgQVNTRVJUKCZlZmZlY3Rp
dmVPYmplY3RTdG9yZSgpLnRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSA9
PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERh
dGFGb3JUaHJlYWQoZWZmZWN0aXZlT2JqZWN0U3RvcmUoKS50cmFuc2FjdGlvbigpLmRhdGFiYXNl
KCkub3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIGlmICghbV9yZXF1ZXN0KQogICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKQEAgLTIzMiw3ICsyMzIsNyBAQCBF
eGNlcHRpb25Pcjx2b2lkPiBJREJDdXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24oSlNHbG9iYWxPYmpl
Y3QmIGV4ZWNTdGF0ZSwgSlNWYWx1ZQogRXhjZXB0aW9uT3I8dm9pZD4gSURCQ3Vyc29yOjpjb250
aW51ZUZ1bmN0aW9uKGNvbnN0IElEQktleURhdGEmIGtleSkKIHsKICAgICBMT0coSW5kZXhlZERC
LCAiSURCQ3Vyc29yOjpjb250aW51ZUZ1bmN0aW9uICh0byBrZXkgJXMpIiwga2V5LmxvZ2dpbmdT
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBBU1NFUlQoJmVmZmVjdGl2ZU9iamVjdFN0b3Jl
KCkudHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1
cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChl
ZmZlY3RpdmVPYmplY3RTdG9yZSgpLnRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5vcmlnaW5UaHJl
YWQoKSkpOwogCiAgICAgaWYgKCFtX3JlcXVlc3QpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJbnZhbGlkU3RhdGVFcnJvciB9OwpAQCAtMjY3LDcgKzI2Nyw3IEBAIEV4Y2VwdGlvbk9yPHZv
aWQ+IElEQkN1cnNvcjo6Y29udGludWVGdW5jdGlvbihjb25zdCBJREJLZXlEYXRhJiBrZXkpCiB2
b2lkIElEQkN1cnNvcjo6dW5jaGVja2VkSXRlcmF0ZUN1cnNvcihjb25zdCBJREJLZXlEYXRhJiBr
ZXksIHVuc2lnbmVkIGNvdW50KQogewogICAgIEFTU0VSVChtX3JlcXVlc3QpOwotICAgIEFTU0VS
VCgmZWZmZWN0aXZlT2JqZWN0U3RvcmUoKS50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2lu
VGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhy
ZWFkTG9jYWxEYXRhRm9yVGhyZWFkKGVmZmVjdGl2ZU9iamVjdFN0b3JlKCkudHJhbnNhY3Rpb24o
KS5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBtX3JlcXVlc3QtPndpbGxJdGVy
YXRlQ3Vyc29yKCp0aGlzKTsKICAgICB0cmFuc2FjdGlvbigpLml0ZXJhdGVDdXJzb3IoKnRoaXMs
IHsga2V5LCB7IH0sIGNvdW50IH0pOwpAQCAtMjc2LDcgKzI3Niw3IEBAIHZvaWQgSURCQ3Vyc29y
Ojp1bmNoZWNrZWRJdGVyYXRlQ3Vyc29yKGNvbnN0IElEQktleURhdGEmIGtleSwgdW5zaWduZWQg
Y291bnQpCiB2b2lkIElEQkN1cnNvcjo6dW5jaGVja2VkSXRlcmF0ZUN1cnNvcihjb25zdCBJREJL
ZXlEYXRhJiBrZXksIGNvbnN0IElEQktleURhdGEmIHByaW1hcnlLZXkpCiB7CiAgICAgQVNTRVJU
KG1fcmVxdWVzdCk7Ci0gICAgQVNTRVJUKCZlZmZlY3RpdmVPYmplY3RTdG9yZSgpLnRyYW5zYWN0
aW9uKCkuZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOwor
ICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQoZWZmZWN0aXZlT2Jq
ZWN0U3RvcmUoKS50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkpKTsKIAog
ICAgIG1fcmVxdWVzdC0+d2lsbEl0ZXJhdGVDdXJzb3IoKnRoaXMpOwogICAgIHRyYW5zYWN0aW9u
KCkuaXRlcmF0ZUN1cnNvcigqdGhpcywgeyBrZXksIHByaW1hcnlLZXksIDAgfSk7CkBAIC0yODUs
NyArMjg1LDcgQEAgdm9pZCBJREJDdXJzb3I6OnVuY2hlY2tlZEl0ZXJhdGVDdXJzb3IoY29uc3Qg
SURCS2V5RGF0YSYga2V5LCBjb25zdCBJREJLZXlEYXRhJgogRXhjZXB0aW9uT3I8UmVmPFdlYkNv
cmU6OklEQlJlcXVlc3Q+PiBJREJDdXJzb3I6OmRlbGV0ZUZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0
JiBzdGF0ZSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCQ3Vyc29yOjpkZWxldGVGdW5jdGlv
biIpOwotICAgIEFTU0VSVCgmZWZmZWN0aXZlT2JqZWN0U3RvcmUoKS50cmFuc2FjdGlvbigpLmRh
dGFiYXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NF
UlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKGVmZmVjdGl2ZU9iamVjdFN0b3Jl
KCkudHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBpZiAo
c291cmNlc0RlbGV0ZWQoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0
ZUVycm9yLCAiRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZScgb24gJ0lEQkN1cnNvcic6IFRoZSBj
dXJzb3IncyBzb3VyY2Ugb3IgZWZmZWN0aXZlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVk
LiJfcyB9OwpAQCAtMzE1LDcgKzMxNSw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxXZWJDb3JlOjpJREJS
ZXF1ZXN0Pj4gSURCQ3Vyc29yOjpkZWxldGVGdW5jdGlvbihKU0dsb2JhbE9iamVjdCYKIGJvb2wg
SURCQ3Vyc29yOjpzZXRHZXRSZXN1bHQoSURCUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSURCR2V0
UmVzdWx0JiBnZXRSZXN1bHQpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQkN1cnNvcjo6c2V0
R2V0UmVzdWx0IC0gY3VycmVudCBrZXkgJXMiLCBnZXRSZXN1bHQua2V5RGF0YSgpLmxvZ2dpbmdT
dHJpbmcoKS5zdWJzdHJpbmcoMCwgMTAwKS51dGY4KCkuZGF0YSgpKTsKLSAgICBBU1NFUlQoJmVm
ZmVjdGl2ZU9iamVjdFN0b3JlKCkudHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVh
ZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExv
Y2FsRGF0YUZvclRocmVhZChlZmZlY3RpdmVPYmplY3RTdG9yZSgpLnRyYW5zYWN0aW9uKCkuZGF0
YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgYXV0byogY29udGV4dCA9IHJlcXVlc3Qu
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29udGV4dCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAppbmRleCBjNjYzZjg3
YmI2NmEwZTM1ZWY3NjdkNjMxYjg3ZDZjYTM1NmU5MmI1Li5jMDZkOTFmZGVmNmJmNzk3Y2Y0N2Mw
NDM3Mzk1ZWRmYWZhZTkxN2ZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2UuY3BwCkBAIC02Nyw3ICs2Nyw3IEBAIElEQkRhdGFiYXNlOjpJREJE
YXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJDbGllbnQ6OklEQkNv
bm5lY3RpCiAKIElEQkRhdGFiYXNlOjp+SURCRGF0YWJhc2UoKQogewotICAgIEFTU0VSVCgmb3Jp
Z2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNz
VGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG9yaWdpblRocmVhZCgpKSk7CiAKICAgICBpZiAoIW1f
Y2xvc2VkSW5TZXJ2ZXIpCiAgICAgICAgIG1fY29ubmVjdGlvblByb3h5LT5kYXRhYmFzZUNvbm5l
Y3Rpb25DbG9zZWQoKnRoaXMpOwpAQCAtNzcsNyArNzcsNyBAQCBJREJEYXRhYmFzZTo6fklEQkRh
dGFiYXNlKCkKIAogYm9vbCBJREJEYXRhYmFzZTo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QK
IHsKLSAgICBBU1NFUlQoJm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSB8fCBU
aHJlYWQ6Om1heUJlR0NUaHJlYWQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2Fs
RGF0YUZvclRocmVhZChvcmlnaW5UaHJlYWQoKSkgfHwgVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkp
OwogCiAgICAgaWYgKG1fY2xvc2VkSW5TZXJ2ZXIgfHwgaXNDb250ZXh0U3RvcHBlZCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC05MCwxOSArOTAsMTkgQEAgYm9vbCBJREJEYXRhYmFzZTo6
aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKIAogY29uc3QgU3RyaW5nIElEQkRhdGFiYXNlOjpu
YW1lKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoJm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1
cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChv
cmlnaW5UaHJlYWQoKSkpOwogICAgIHJldHVybiBtX2luZm8ubmFtZSgpOwogfQogCiB1aW50NjRf
dCBJREJEYXRhYmFzZTo6dmVyc2lvbigpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCZvcmlnaW5UaHJl
YWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRM
b2NhbERhdGFGb3JUaHJlYWQob3JpZ2luVGhyZWFkKCkpKTsKICAgICByZXR1cm4gbV9pbmZvLnZl
cnNpb24oKTsKIH0KIAogUmVmPERPTVN0cmluZ0xpc3Q+IElEQkRhdGFiYXNlOjpvYmplY3RTdG9y
ZU5hbWVzKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoJm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6
OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVh
ZChvcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgYXV0byBvYmplY3RTdG9yZU5hbWVzID0gRE9NU3Ry
aW5nTGlzdDo6Y3JlYXRlKCk7CiAgICAgZm9yIChhdXRvJiBuYW1lIDogbV9pbmZvLm9iamVjdFN0
b3JlTmFtZXMoKSkKQEAgLTExMyw3ICsxMTMsNyBAQCBSZWY8RE9NU3RyaW5nTGlzdD4gSURCRGF0
YWJhc2U6Om9iamVjdFN0b3JlTmFtZXMoKSBjb25zdAogCiB2b2lkIElEQkRhdGFiYXNlOjpyZW5h
bWVPYmplY3RTdG9yZShJREJPYmplY3RTdG9yZSYgb2JqZWN0U3RvcmUsIGNvbnN0IFN0cmluZyYg
bmV3TmFtZSkKIHsKLSAgICBBU1NFUlQoJm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJl
bnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChvcmln
aW5UaHJlYWQoKSkpOwogICAgIEFTU0VSVChtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik7CiAg
ICAgQVNTRVJUKG1faW5mby5oYXNPYmplY3RTdG9yZShvYmplY3RTdG9yZS5pbmZvKCkubmFtZSgp
KSk7CiAKQEAgLTEyNCw3ICsxMjQsNyBAQCB2b2lkIElEQkRhdGFiYXNlOjpyZW5hbWVPYmplY3RT
dG9yZShJREJPYmplY3RTdG9yZSYgb2JqZWN0U3RvcmUsIGNvbnN0IFN0cmluZyYgbgogCiB2b2lk
IElEQkRhdGFiYXNlOjpyZW5hbWVJbmRleChJREJJbmRleCYgaW5kZXgsIGNvbnN0IFN0cmluZyYg
bmV3TmFtZSkKIHsKLSAgICBBU1NFUlQoJm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJl
bnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChvcmln
aW5UaHJlYWQoKSkpOwogICAgIEFTU0VSVChtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik7CiAg
ICAgQVNTRVJUKG1faW5mby5oYXNPYmplY3RTdG9yZShpbmRleC5vYmplY3RTdG9yZSgpLmluZm8o
KS5uYW1lKCkpKTsKICAgICBBU1NFUlQobV9pbmZvLmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3Jl
KGluZGV4Lm9iamVjdFN0b3JlKCkuaW5mbygpLm5hbWUoKSktPmhhc0luZGV4KGluZGV4LmluZm8o
KS5uYW1lKCkpKTsKQEAgLTEzOCw3ICsxMzgsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCT2JqZWN0
U3RvcmU+PiBJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYQog
ewogICAgIExPRyhJbmRleGVkREIsICJJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUgLSAo
JXMgJXMpIiwgbV9pbmZvLm5hbWUoKS51dGY4KCkuZGF0YSgpLCBuYW1lLnV0ZjgoKS5kYXRhKCkp
OwogCi0gICAgQVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOwor
ICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQob3JpZ2luVGhyZWFk
KCkpKTsKICAgICBBU1NFUlQoIW1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uIHx8IG1fdmVyc2lv
bkNoYW5nZVRyYW5zYWN0aW9uLT5pc1ZlcnNpb25DaGFuZ2UoKSk7CiAKICAgICBpZiAoIW1fdmVy
c2lvbkNoYW5nZVRyYW5zYWN0aW9uKQpAQCAtMTY4LDcgKzE2OCw3IEBAIEV4Y2VwdGlvbk9yPFJl
ZjxJREJUcmFuc2FjdGlvbj4+IElEQkRhdGFiYXNlOjp0cmFuc2FjdGlvbihTdHJpbmdPclZlY3Rv
ck9mU3RyaW5nCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjp0cmFuc2FjdGlv
biIpOwogCi0gICAgQVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkp
OworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQob3JpZ2luVGhy
ZWFkKCkpKTsKIAogICAgIGlmIChtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiAmJiAhbV92ZXJz
aW9uQ2hhbmdlVHJhbnNhY3Rpb24tPmlzRmluaXNoZWRPckZpbmlzaGluZygpKQogICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJGYWlsZWQgdG8gZXhlY3V0ZSAn
dHJhbnNhY3Rpb24nIG9uICdJREJEYXRhYmFzZSc6IEEgdmVyc2lvbiBjaGFuZ2UgdHJhbnNhY3Rp
b24gaXMgcnVubmluZy4iX3MgfTsKQEAgLTIxOCw3ICsyMTgsNyBAQCBFeGNlcHRpb25Pcjx2b2lk
PiBJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBvYmplY3RTdG9y
ZU5hbWUpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RT
dG9yZSIpOwogCi0gICAgQVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50
KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQob3JpZ2lu
VGhyZWFkKCkpKTsKIAogICAgIGlmICghbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pCiAgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgIkZhaWxlZCB0byBleGVj
dXRlICdkZWxldGVPYmplY3RTdG9yZScgb24gJ0lEQkRhdGFiYXNlJzogVGhlIGRhdGFiYXNlIGlz
IG5vdCBydW5uaW5nIGEgdmVyc2lvbiBjaGFuZ2UgdHJhbnNhY3Rpb24uIl9zIH07CkBAIC0yMzks
NyArMjM5LDcgQEAgdm9pZCBJREJEYXRhYmFzZTo6Y2xvc2UoKQogewogICAgIExPRyhJbmRleGVk
REIsICJJREJEYXRhYmFzZTo6Y2xvc2UgLSAlIiBQUkl1NjQsIG1fZGF0YWJhc2VDb25uZWN0aW9u
SWRlbnRpZmllcik7CiAKLSAgICBBU1NFUlQoJm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1
cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChv
cmlnaW5UaHJlYWQoKSkpOwogCiAgICAgaWYgKCFtX2Nsb3NlUGVuZGluZykgewogICAgICAgICBt
X2Nsb3NlUGVuZGluZyA9IHRydWU7CkBAIC0yNjIsNyArMjYyLDcgQEAgdm9pZCBJREJEYXRhYmFz
ZTo6Y29ubmVjdGlvblRvU2VydmVyTG9zdChjb25zdCBJREJFcnJvciYgZXJyb3IpCiB7CiAgICAg
TE9HKEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjpjb25uZWN0aW9uVG9TZXJ2ZXJMb3N0IC0gJSIg
UFJJdTY0LCBtX2RhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIpOwogCi0gICAgQVNTRVJUKCZv
cmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nl
c3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQob3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIG1fY2xv
c2VQZW5kaW5nID0gdHJ1ZTsKICAgICBtX2Nsb3NlZEluU2VydmVyID0gdHJ1ZTsKQEAgLTI5Miw3
ICsyOTIsNyBAQCB2b2lkIElEQkRhdGFiYXNlOjptYXliZUNsb3NlSW5TZXJ2ZXIoKQogewogICAg
IExPRyhJbmRleGVkREIsICJJREJEYXRhYmFzZTo6bWF5YmVDbG9zZUluU2VydmVyIC0gJSIgUFJJ
dTY0LCBtX2RhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIpOwogCi0gICAgQVNTRVJUKCZvcmln
aW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NU
aHJlYWRMb2NhbERhdGFGb3JUaHJlYWQob3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIGlmIChtX2Ns
b3NlZEluU2VydmVyKQogICAgICAgICByZXR1cm47CkBAIC0zMDksNyArMzA5LDcgQEAgdm9pZCBJ
REJEYXRhYmFzZTo6bWF5YmVDbG9zZUluU2VydmVyKCkKIAogY29uc3QgY2hhciogSURCRGF0YWJh
c2U6OmFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdAogewotICAgIEFTU0VSVCgmb3JpZ2luVGhy
ZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFk
TG9jYWxEYXRhRm9yVGhyZWFkKG9yaWdpblRocmVhZCgpKSk7CiAgICAgcmV0dXJuICJJREJEYXRh
YmFzZSI7CiB9CiAKQEAgLTMxNyw3ICszMTcsNyBAQCB2b2lkIElEQkRhdGFiYXNlOjpzdG9wKCkK
IHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6OnN0b3AgLSAlIiBQUkl1NjQsIG1f
ZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllcik7CiAKLSAgICBBU1NFUlQoJm9yaWdpblRocmVh
ZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExv
Y2FsRGF0YUZvclRocmVhZChvcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgcmVtb3ZlQWxsRXZlbnRM
aXN0ZW5lcnMoKTsKIApAQCAtMzQwLDcgKzM0MCw3IEBAIFJlZjxJREJUcmFuc2FjdGlvbj4gSURC
RGF0YWJhc2U6OnN0YXJ0VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKGNvbnN0IElEQlRyYW5zYWN0
CiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjpzdGFydFZlcnNpb25DaGFuZ2VU
cmFuc2FjdGlvbiAlcyIsIGluZm8uaWRlbnRpZmllcigpLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKIAotICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVu
dCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG9yaWdp
blRocmVhZCgpKSk7CiAgICAgQVNTRVJUKCFtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik7CiAg
ICAgQVNTRVJUKGluZm8ubW9kZSgpID09IElEQlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbmNoYW5n
ZSk7CiAgICAgQVNTRVJUKCFtX2Nsb3NlUGVuZGluZyk7CkBAIC0zNTgsNyArMzU4LDcgQEAgdm9p
ZCBJREJEYXRhYmFzZTo6ZGlkU3RhcnRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24pCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjpkaWRTdGFydFRyYW5z
YWN0aW9uICVzIiwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKS5sb2dnaW5nU3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CiAgICAgQVNTRVJUKCFtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlv
bik7Ci0gICAgQVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOwor
ICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQob3JpZ2luVGhyZWFk
KCkpKTsKIAogICAgIC8vIEl0IGlzIHBvc3NpYmxlIGZvciB0aGUgY2xpZW50IHRvIGhhdmUgYWJv
cnRlZCBhIHRyYW5zYWN0aW9uIGJlZm9yZSB0aGUgc2VydmVyIHJlcGxpZXMgYmFjayB0aGF0IGl0
IGhhcyBzdGFydGVkLgogICAgIGlmIChtX2Fib3J0aW5nVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRy
YW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkpKQpAQCAtMzcxLDcgKzM3MSw3IEBAIHZvaWQg
SURCRGF0YWJhc2U6OndpbGxDb21taXRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24pCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjp3aWxsQ29tbWl0VHJh
bnNhY3Rpb24gJXMiLCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLmxvZ2dpbmdTdHJp
bmcoKS51dGY4KCkuZGF0YSgpKTsKIAotICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0gJlRo
cmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9y
VGhyZWFkKG9yaWdpblRocmVhZCgpKSk7CiAKICAgICBhdXRvIHJlZlRyYW5zYWN0aW9uID0gbV9h
Y3RpdmVUcmFuc2FjdGlvbnMudGFrZSh0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKTsK
ICAgICBBU1NFUlQocmVmVHJhbnNhY3Rpb24pOwpAQCAtMzgyLDcgKzM4Miw3IEBAIHZvaWQgSURC
RGF0YWJhc2U6OmRpZENvbW1pdFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlv
bikKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6OmRpZENvbW1pdFRyYW5zYWN0
aW9uICVzIiwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKS5sb2dnaW5nU3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7CiAKLSAgICBBU1NFUlQoJm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6
OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVh
ZChvcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgaWYgKG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9u
ID09ICZ0cmFuc2FjdGlvbikKICAgICAgICAgbV9pbmZvLnNldFZlcnNpb24odHJhbnNhY3Rpb24u
aW5mbygpLm5ld1ZlcnNpb24oKSk7CkBAIC0zOTQsNyArMzk0LDcgQEAgdm9pZCBJREJEYXRhYmFz
ZTo6d2lsbEFib3J0VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQogewog
ICAgIExPRyhJbmRleGVkREIsICJJREJEYXRhYmFzZTo6d2lsbEFib3J0VHJhbnNhY3Rpb24gJXMi
LCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKIAotICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVu
dCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG9yaWdp
blRocmVhZCgpKSk7CiAKICAgICBhdXRvIHJlZlRyYW5zYWN0aW9uID0gbV9hY3RpdmVUcmFuc2Fj
dGlvbnMudGFrZSh0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKTsKICAgICBpZiAoIXJl
ZlRyYW5zYWN0aW9uKQpAQCAtNDE0LDcgKzQxNCw3IEBAIHZvaWQgSURCRGF0YWJhc2U6OmRpZEFi
b3J0VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQogewogICAgIExPRyhJ
bmRleGVkREIsICJJREJEYXRhYmFzZTo6ZGlkQWJvcnRUcmFuc2FjdGlvbiAlcyIsIHRyYW5zYWN0
aW9uLmluZm8oKS5pZGVudGlmaWVyKCkubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwog
Ci0gICAgQVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAg
IEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQob3JpZ2luVGhyZWFkKCkp
KTsKIAogICAgIGlmICh0cmFuc2FjdGlvbi5pc1ZlcnNpb25DaGFuZ2UoKSkgewogICAgICAgICBB
U1NFUlQodHJhbnNhY3Rpb24ub3JpZ2luYWxEYXRhYmFzZUluZm8oKSk7CkBAIC00MzAsNyArNDMw
LDcgQEAgdm9pZCBJREJEYXRhYmFzZTo6ZGlkQ29tbWl0T3JBYm9ydFRyYW5zYWN0aW9uKElEQlRy
YW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJh
c2U6OmRpZENvbW1pdE9yQWJvcnRUcmFuc2FjdGlvbiAlcyIsIHRyYW5zYWN0aW9uLmluZm8oKS5p
ZGVudGlmaWVyKCkubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgQVNTRVJU
KCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5B
Y2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQob3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIGlm
IChtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiA9PSAmdHJhbnNhY3Rpb24pCiAgICAgICAgIG1f
dmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uID0gbnVsbHB0cjsKQEAgLTQ2MCw3ICs0NjAsNyBAQCB2
b2lkIElEQkRhdGFiYXNlOjpmaXJlVmVyc2lvbkNoYW5nZUV2ZW50KGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgcmVxdWVzdElkZQogICAgIHVpbnQ2NF90IGN1cnJlbnRWZXJzaW9uID0gbV9p
bmZvLnZlcnNpb24oKTsKICAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6OmZpcmVWZXJz
aW9uQ2hhbmdlRXZlbnQgLSBjdXJyZW50IHZlcnNpb24gJSIgUFJJdTY0ICIsIHJlcXVlc3RlZCB2
ZXJzaW9uICUiIFBSSXU2NCAiLCBjb25uZWN0aW9uICUiIFBSSXU2NCAiICglcCkiLCBjdXJyZW50
VmVyc2lvbiwgcmVxdWVzdGVkVmVyc2lvbiwgbV9kYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVy
LCB0aGlzKTsKIAotICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVu
dCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG9yaWdp
blRocmVhZCgpKSk7CiAKICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSB8fCBtX2Ns
b3NlUGVuZGluZykgewogICAgICAgICBjb25uZWN0aW9uUHJveHkoKS5kaWRGaXJlVmVyc2lvbkNo
YW5nZUV2ZW50KG1fZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllciwgcmVxdWVzdElkZW50aWZp
ZXIpOwpAQCAtNDc1LDcgKzQ3NSw3IEBAIHZvaWQgSURCRGF0YWJhc2U6OmZpcmVWZXJzaW9uQ2hh
bmdlRXZlbnQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiByZXF1ZXN0SWRlCiB2b2lkIElE
QkRhdGFiYXNlOjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkKIHsKICAgICBMT0coSW5kZXhl
ZERCLCAiSURCRGF0YWJhc2U6OmRpc3BhdGNoRXZlbnQgKCUiIFBSSXU2NCAiKSAoJXApIiwgbV9k
YXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyLCB0aGlzKTsKLSAgICBBU1NFUlQoJm9yaWdpblRo
cmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVh
ZExvY2FsRGF0YUZvclRocmVhZChvcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgYXV0byBwcm90ZWN0
ZWRUaGlzID0gbWFrZVJlZigqdGhpcyk7CiAKQEAgLTQ4Nyw3ICs0ODcsNyBAQCB2b2lkIElEQkRh
dGFiYXNlOjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkKIAogdm9pZCBJREJEYXRhYmFzZTo6
ZGlkQ3JlYXRlSW5kZXhJbmZvKGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbykKIHsKLSAgICBBU1NF
UlQoJm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNh
bkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChvcmlnaW5UaHJlYWQoKSkpOwogCiAgICAg
YXV0byogb2JqZWN0U3RvcmUgPSBtX2luZm8uaW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUoaW5m
by5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSk7CiAgICAgQVNTRVJUKG9iamVjdFN0b3JlKTsKQEAg
LTQ5Niw3ICs0OTYsNyBAQCB2b2lkIElEQkRhdGFiYXNlOjpkaWRDcmVhdGVJbmRleEluZm8oY29u
c3QgSURCSW5kZXhJbmZvJiBpbmZvKQogCiB2b2lkIElEQkRhdGFiYXNlOjpkaWREZWxldGVJbmRl
eEluZm8oY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvKQogewotICAgIEFTU0VSVCgmb3JpZ2luVGhy
ZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFk
TG9jYWxEYXRhRm9yVGhyZWFkKG9yaWdpblRocmVhZCgpKSk7CiAKICAgICBhdXRvKiBvYmplY3RT
dG9yZSA9IG1faW5mby5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShpbmZvLm9iamVjdFN0b3Jl
SWRlbnRpZmllcigpKTsKICAgICBBU1NFUlQob2JqZWN0U3RvcmUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwCmluZGV4IGVhNDI3MDI4MjVkMmY5YTI1
YmRkZTNkMTM4MzY2MDJkYmQyMjE2MTMuLmU4MTVkZjdkMGZkZjE1YjAzNDM0MWE1NmQzMDI4OWVm
ODUwNTYxYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkluZGV4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRl
eC5jcHAKQEAgLTQ3LDE0ICs0NywxNCBAQCBJREJJbmRleDo6SURCSW5kZXgoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvLCBJRAogICAgICwg
bV9vcmlnaW5hbEluZm8oaW5mbykKICAgICAsIG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCiB7
Ci0gICAgQVNTRVJUKCZtX29iamVjdFN0b3JlLnRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5vcmln
aW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NU
aHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9vYmplY3RTdG9yZS50cmFuc2FjdGlvbigpLmRhdGFi
YXNlKCkub3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIHN1c3BlbmRJZk5lZWRlZCgpOwogfQogCiBJ
REJJbmRleDo6fklEQkluZGV4KCkKIHsKLSAgICBBU1NFUlQoJm1fb2JqZWN0U3RvcmUudHJhbnNh
Y3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7
CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX29iamVjdFN0
b3JlLnRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSkpOwogfQogCiBjb25z
dCBjaGFyKiBJREJJbmRleDo6YWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0CkBAIC02OSwxMyAr
NjksMTMgQEAgYm9vbCBJREJJbmRleDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKIAogY29u
c3QgU3RyaW5nJiBJREJJbmRleDo6bmFtZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCZtX29iamVj
dFN0b3JlLnRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFk
OjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJl
YWQobV9vYmplY3RTdG9yZS50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkp
KTsKICAgICByZXR1cm4gbV9pbmZvLm5hbWUoKTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gSURC
SW5kZXg6OnNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIEFTU0VSVCgmbV9vYmpl
Y3RTdG9yZS50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRocmVh
ZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhy
ZWFkKG1fb2JqZWN0U3RvcmUudHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgp
KSk7CiAKICAgICBpZiAobV9kZWxldGVkKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52
YWxpZFN0YXRlRXJyb3IsICJGYWlsZWQgc2V0IHByb3BlcnR5ICduYW1lJyBvbiAnSURCSW5kZXgn
OiBUaGUgaW5kZXggaGFzIGJlZW4gZGVsZXRlZC4iX3MgfTsKQEAgLTEwMywzMSArMTAzLDMxIEBA
IEV4Y2VwdGlvbk9yPHZvaWQ+IElEQkluZGV4OjpzZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkK
IAogSURCT2JqZWN0U3RvcmUmIElEQkluZGV4OjpvYmplY3RTdG9yZSgpCiB7Ci0gICAgQVNTRVJU
KCZtX29iamVjdFN0b3JlLnRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSA9
PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERh
dGFGb3JUaHJlYWQobV9vYmplY3RTdG9yZS50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2lu
VGhyZWFkKCkpKTsKICAgICByZXR1cm4gbV9vYmplY3RTdG9yZTsKIH0KIAogY29uc3QgSURCS2V5
UGF0aCYgSURCSW5kZXg6OmtleVBhdGgoKSBjb25zdAogewotICAgIEFTU0VSVCgmbV9vYmplY3RT
dG9yZS50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6
Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFk
KG1fb2JqZWN0U3RvcmUudHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpKSk7
CiAgICAgcmV0dXJuIG1faW5mby5rZXlQYXRoKCk7CiB9CiAKIGJvb2wgSURCSW5kZXg6OnVuaXF1
ZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCZtX29iamVjdFN0b3JlLnRyYW5zYWN0aW9uKCkuZGF0
YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VS
VChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9vYmplY3RTdG9yZS50cmFuc2Fj
dGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkpKTsKICAgICByZXR1cm4gbV9pbmZvLnVu
aXF1ZSgpOwogfQogCiBib29sIElEQkluZGV4OjptdWx0aUVudHJ5KCkgY29uc3QKIHsKLSAgICBB
U1NFUlQoJm1fb2JqZWN0U3RvcmUudHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVh
ZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExv
Y2FsRGF0YUZvclRocmVhZChtX29iamVjdFN0b3JlLnRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5v
cmlnaW5UaHJlYWQoKSkpOwogICAgIHJldHVybiBtX2luZm8ubXVsdGlFbnRyeSgpOwogfQogCiB2
b2lkIElEQkluZGV4Ojpyb2xsYmFja0luZm9Gb3JWZXJzaW9uQ2hhbmdlQWJvcnQoKQogewotICAg
IEFTU0VSVCgmbV9vYmplY3RTdG9yZS50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhy
ZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFk
TG9jYWxEYXRhRm9yVGhyZWFkKG1fb2JqZWN0U3RvcmUudHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgp
Lm9yaWdpblRocmVhZCgpKSk7CiAKICAgICAvLyBPbmx5IHJvbGxiYWNrIHRvIHRoZSBvcmlnaW5h
bCBpbmZvIGlmIHRoaXMgaW5kZXggc3RpbGwgZXhpc3RzIGluIHRoZSByb2xsZWQtYmFjayBkYXRh
YmFzZSBpbmZvLgogICAgIGF1dG8qIG9iamVjdFN0b3JlSW5mbyA9IG1fb2JqZWN0U3RvcmUudHJh
bnNhY3Rpb24oKS5kYXRhYmFzZSgpLmluZm8oKS5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZSht
X29iamVjdFN0b3JlLmluZm8oKS5pZGVudGlmaWVyKCkpOwpAQCAtMTQ2LDcgKzE0Niw3IEBAIHZv
aWQgSURCSW5kZXg6OnJvbGxiYWNrSW5mb0ZvclZlcnNpb25DaGFuZ2VBYm9ydCgpCiBFeGNlcHRp
b25PcjxSZWY8SURCUmVxdWVzdD4+IElEQkluZGV4Ojpkb09wZW5DdXJzb3IoSlNHbG9iYWxPYmpl
Y3QmIGV4ZWNTdGF0ZSwgSURCQ3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiwgV1RGOjpGdW5jdGlv
bjxFeGNlcHRpb25PcjxSZWZQdHI8SURCS2V5UmFuZ2U+PigpPiYmIGZ1bmN0aW9uKQogewogICAg
IExPRyhJbmRleGVkREIsICJJREJJbmRleDo6b3BlbkN1cnNvciIpOwotICAgIEFTU0VSVCgmbV9v
YmplY3RTdG9yZS50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRo
cmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9y
VGhyZWFkKG1fb2JqZWN0U3RvcmUudHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVh
ZCgpKSk7CiAKICAgICBpZiAobV9kZWxldGVkIHx8IG1fb2JqZWN0U3RvcmUuaXNEZWxldGVkKCkp
CiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgIkZhaWxlZCB0
byBleGVjdXRlICdvcGVuQ3Vyc29yJyBvbiAnSURCSW5kZXgnOiBUaGUgaW5kZXggb3IgaXRzIG9i
amVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiJfcyB9OwpAQCAtMTg5LDcgKzE4OSw3IEBAIEV4
Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCSW5kZXg6Om9wZW5DdXJzb3IoSlNHbG9iYWxP
YmplY3QmIGV4ZWNTdGF0ZSwgSlNWCiBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQklu
ZGV4Ojpkb09wZW5LZXlDdXJzb3IoSlNHbG9iYWxPYmplY3QmIGV4ZWNTdGF0ZSwgSURCQ3Vyc29y
RGlyZWN0aW9uIGRpcmVjdGlvbiwgV1RGOjpGdW5jdGlvbjxFeGNlcHRpb25PcjxSZWZQdHI8SURC
S2V5UmFuZ2U+PigpPiYmIGZ1bmN0aW9uKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJJbmRl
eDo6b3BlbktleUN1cnNvciIpOwotICAgIEFTU0VSVCgmbV9vYmplY3RTdG9yZS50cmFuc2FjdGlv
bigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAg
ICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fb2JqZWN0U3RvcmUu
dHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBpZiAobV9k
ZWxldGVkIHx8IG1fb2JqZWN0U3RvcmUuaXNEZWxldGVkKCkpCiAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgIkZhaWxlZCB0byBleGVjdXRlICdvcGVuS2V5Q3Vy
c29yJyBvbiAnSURCSW5kZXgnOiBUaGUgaW5kZXggb3IgaXRzIG9iamVjdCBzdG9yZSBoYXMgYmVl
biBkZWxldGVkLiJfcyB9OwpAQCAtMjQzLDcgKzI0Myw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJS
ZXF1ZXN0Pj4gSURCSW5kZXg6OmNvdW50KEpTR2xvYmFsT2JqZWN0JiBleGVjU3RhdGUsIEpTVmFs
dWUKIAogRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJJbmRleDo6ZG9Db3VudChKU0ds
b2JhbE9iamVjdCYgZXhlY1N0YXRlLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlKQogewot
ICAgIEFTU0VSVCgmbV9vYmplY3RTdG9yZS50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2lu
VGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhy
ZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fb2JqZWN0U3RvcmUudHJhbnNhY3Rpb24oKS5kYXRhYmFz
ZSgpLm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBpZiAobV9kZWxldGVkIHx8IG1fb2JqZWN0U3Rv
cmUuaXNEZWxldGVkKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVF
cnJvciwgIkZhaWxlZCB0byBleGVjdXRlICdjb3VudCcgb24gJ0lEQkluZGV4JzogVGhlIGluZGV4
IG9yIGl0cyBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iX3MgfTsKQEAgLTI3OCw3ICsy
NzgsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQkluZGV4OjpnZXQoSlNHbG9i
YWxPYmplY3QmIGV4ZWNTdGF0ZSwgSlNWYWx1ZSBrZQogCiBFeGNlcHRpb25PcjxSZWY8SURCUmVx
dWVzdD4+IElEQkluZGV4Ojpkb0dldChKU0dsb2JhbE9iamVjdCYgZXhlY1N0YXRlLCBFeGNlcHRp
b25PcjxJREJLZXlSYW5nZURhdGE+IHJhbmdlKQogewotICAgIEFTU0VSVCgmbV9vYmplY3RTdG9y
ZS50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3Vy
cmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1f
b2JqZWN0U3RvcmUudHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpKSk7CiAK
ICAgICBpZiAobV9kZWxldGVkIHx8IG1fb2JqZWN0U3RvcmUuaXNEZWxldGVkKCkpCiAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgIkZhaWxlZCB0byBleGVjdXRl
ICdnZXQnIG9uICdJREJJbmRleCc6IFRoZSBpbmRleCBvciBpdHMgb2JqZWN0IHN0b3JlIGhhcyBi
ZWVuIGRlbGV0ZWQuIl9zIH07CkBAIC0zMTcsNyArMzE3LDcgQEAgRXhjZXB0aW9uT3I8UmVmPElE
QlJlcXVlc3Q+PiBJREJJbmRleDo6Z2V0S2V5KEpTR2xvYmFsT2JqZWN0JiBleGVjU3RhdGUsIEpT
VmFsdWUKIAogRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJJbmRleDo6ZG9HZXRLZXko
SlNHbG9iYWxPYmplY3QmIGV4ZWNTdGF0ZSwgRXhjZXB0aW9uT3I8SURCS2V5UmFuZ2VEYXRhPiBy
YW5nZSkKIHsKLSAgICBBU1NFUlQoJm1fb2JqZWN0U3RvcmUudHJhbnNhY3Rpb24oKS5kYXRhYmFz
ZSgpLm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNh
bkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX29iamVjdFN0b3JlLnRyYW5zYWN0aW9u
KCkuZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgaWYgKG1fZGVsZXRlZCB8fCBt
X29iamVjdFN0b3JlLmlzRGVsZXRlZCgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52
YWxpZFN0YXRlRXJyb3IsICJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0S2V5JyBvbiAnSURCSW5kZXgn
OiBUaGUgaW5kZXggb3IgaXRzIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiJfcyB9OwpA
QCAtMzM5LDcgKzMzOSw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCSW5kZXg6
OmRvR2V0S2V5KEpTR2xvYmFsT2JqZWN0JiBleGVjU3RhdGUsIEV4Y2VwCiBFeGNlcHRpb25PcjxS
ZWY8SURCUmVxdWVzdD4+IElEQkluZGV4Ojpkb0dldEFsbChKU0dsb2JhbE9iamVjdCYgZXhlY1N0
YXRlLCBPcHRpb25hbDx1aW50MzJfdD4gY291bnQsIFdURjo6RnVuY3Rpb248RXhjZXB0aW9uT3I8
UmVmUHRyPElEQktleVJhbmdlPj4oKT4mJiBmdW5jdGlvbikKIHsKICAgICBMT0coSW5kZXhlZERC
LCAiSURCSW5kZXg6OmdldEFsbCIpOwotICAgIEFTU0VSVCgmbV9vYmplY3RTdG9yZS50cmFuc2Fj
dGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsK
KyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fb2JqZWN0U3Rv
cmUudHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBpZiAo
bV9kZWxldGVkIHx8IG1fb2JqZWN0U3RvcmUuaXNEZWxldGVkKCkpCiAgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgIkZhaWxlZCB0byBleGVjdXRlICdnZXRBbGwn
IG9uICdJREJJbmRleCc6IFRoZSBpbmRleCBvciBpdHMgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRl
bGV0ZWQuIl9zIH07CkBAIC0zNzYsNyArMzc2LDcgQEAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVl
c3Q+PiBJREJJbmRleDo6Z2V0QWxsKEpTR2xvYmFsT2JqZWN0JiBleGVjU3RhdGUsIEpTVmFsdWUK
IEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCSW5kZXg6OmRvR2V0QWxsS2V5cyhKU0ds
b2JhbE9iamVjdCYgZXhlY1N0YXRlLCBPcHRpb25hbDx1aW50MzJfdD4gY291bnQsIFdURjo6RnVu
Y3Rpb248RXhjZXB0aW9uT3I8UmVmUHRyPElEQktleVJhbmdlPj4oKT4mJiBmdW5jdGlvbikKIHsK
ICAgICBMT0coSW5kZXhlZERCLCAiSURCSW5kZXg6OmdldEFsbEtleXMiKTsKLSAgICBBU1NFUlQo
Jm1fb2JqZWN0U3RvcmUudHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpID09
ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0
YUZvclRocmVhZChtX29iamVjdFN0b3JlLnRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5vcmlnaW5U
aHJlYWQoKSkpOwogCiAgICAgaWYgKG1fZGVsZXRlZCB8fCBtX29iamVjdFN0b3JlLmlzRGVsZXRl
ZCgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJGYWls
ZWQgdG8gZXhlY3V0ZSAnZ2V0QWxsS2V5cycgb24gJ0lEQkluZGV4JzogVGhlIGluZGV4IG9yIGl0
cyBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iX3MgfTsKQEAgLTQxMiw3ICs0MTIsNyBA
QCBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQkluZGV4OjpnZXRBbGxLZXlzKEpTR2xv
YmFsT2JqZWN0JiBleGVjU3RhdGUsIEpTVgogCiB2b2lkIElEQkluZGV4OjptYXJrQXNEZWxldGVk
KCkKIHsKLSAgICBBU1NFUlQoJm1fb2JqZWN0U3RvcmUudHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgp
Lm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFj
Y2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX29iamVjdFN0b3JlLnRyYW5zYWN0aW9uKCku
ZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgQVNTRVJUKCFtX2RlbGV0ZWQpOwog
ICAgIG1fZGVsZXRlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKaW5kZXggNjkwNjhhNDVjNzVhY2QwY2VhMGY4NjVi
YjU4MWI0ZDA4Yzg1ZWYzYS4uZTYzYWEwYzFkN2JhYmI1NjNmMTVkZTE1NWZmZDZkODVlOTg0NDNm
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVj
dFN0b3JlLmNwcApAQCAtNjAsMTQgKzYwLDE0IEBAIElEQk9iamVjdFN0b3JlOjpJREJPYmplY3RT
dG9yZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBJREJPYmplY3RTCiAg
ICAgLCBtX29yaWdpbmFsSW5mbyhpbmZvKQogICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlv
bikKIHsKLSAgICBBU1NFUlQoJm1fdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQo
KSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2Nh
bERhdGFGb3JUaHJlYWQobV90cmFuc2FjdGlvbi5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpKSk7
CiAKICAgICBzdXNwZW5kSWZOZWVkZWQoKTsKIH0KIAogSURCT2JqZWN0U3RvcmU6On5JREJPYmpl
Y3RTdG9yZSgpCiB7Ci0gICAgQVNTRVJUKCZtX3RyYW5zYWN0aW9uLmRhdGFiYXNlKCkub3JpZ2lu
VGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhy
ZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJl
YWQoKSkpOwogfQogCiBjb25zdCBjaGFyKiBJREJPYmplY3RTdG9yZTo6YWN0aXZlRE9NT2JqZWN0
TmFtZSgpIGNvbnN0CkBAIC04MiwxMyArODIsMTMgQEAgYm9vbCBJREJPYmplY3RTdG9yZTo6aGFz
UGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKIAogY29uc3QgU3RyaW5nJiBJREJPYmplY3RTdG9yZTo6
bmFtZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCZtX3RyYW5zYWN0aW9uLmRhdGFiYXNlKCkub3Jp
Z2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNz
VGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5U
aHJlYWQoKSkpOwogICAgIHJldHVybiBtX2luZm8ubmFtZSgpOwogfQogCiBFeGNlcHRpb25Pcjx2
b2lkPiBJREJPYmplY3RTdG9yZTo6c2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAg
QVNTRVJUKCZtX3RyYW5zYWN0aW9uLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRocmVh
ZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhy
ZWFkKG1fdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgaWYg
KG1fZGVsZXRlZCkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9y
LCAiRmFpbGVkIHNldCBwcm9wZXJ0eSAnbmFtZScgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIG9i
amVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiJfcyB9OwpAQCAtMTEzLDEzICsxMTMsMTMgQEAg
RXhjZXB0aW9uT3I8dm9pZD4gSURCT2JqZWN0U3RvcmU6OnNldE5hbWUoY29uc3QgU3RyaW5nJiBu
YW1lKQogCiBjb25zdCBPcHRpb25hbDxJREJLZXlQYXRoPiYgSURCT2JqZWN0U3RvcmU6OmtleVBh
dGgoKSBjb25zdAogewotICAgIEFTU0VSVCgmbV90cmFuc2FjdGlvbi5kYXRhYmFzZSgpLm9yaWdp
blRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1Ro
cmVhZExvY2FsRGF0YUZvclRocmVhZChtX3RyYW5zYWN0aW9uLmRhdGFiYXNlKCkub3JpZ2luVGhy
ZWFkKCkpKTsKICAgICByZXR1cm4gbV9pbmZvLmtleVBhdGgoKTsKIH0KIAogUmVmPERPTVN0cmlu
Z0xpc3Q+IElEQk9iamVjdFN0b3JlOjppbmRleE5hbWVzKCkgY29uc3QKIHsKLSAgICBBU1NFUlQo
Jm1fdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJy
ZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV90
cmFuc2FjdGlvbi5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBhdXRvIGluZGV4
TmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKIApAQCAtMTM0LDIwICsxMzQsMjAgQEAg
UmVmPERPTVN0cmluZ0xpc3Q+IElEQk9iamVjdFN0b3JlOjppbmRleE5hbWVzKCkgY29uc3QKIAog
SURCVHJhbnNhY3Rpb24mIElEQk9iamVjdFN0b3JlOjp0cmFuc2FjdGlvbigpCiB7Ci0gICAgQVNT
RVJUKCZtX3RyYW5zYWN0aW9uLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6
Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFk
KG1fdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSkpOwogICAgIHJldHVybiBt
X3RyYW5zYWN0aW9uOwogfQogCiBib29sIElEQk9iamVjdFN0b3JlOjphdXRvSW5jcmVtZW50KCkg
Y29uc3QKIHsKLSAgICBBU1NFUlQoJm1fdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJl
YWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRM
b2NhbERhdGFGb3JUaHJlYWQobV90cmFuc2FjdGlvbi5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgp
KSk7CiAgICAgcmV0dXJuIG1faW5mby5hdXRvSW5jcmVtZW50KCk7CiB9CiAKIEV4Y2VwdGlvbk9y
PFJlZjxJREJSZXF1ZXN0Pj4gSURCT2JqZWN0U3RvcmU6OmRvT3BlbkN1cnNvcihKU0dsb2JhbE9i
amVjdCYgZXhlY1N0YXRlLCBJREJDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uLCBXVEY6OkZ1bmN0
aW9uPEV4Y2VwdGlvbk9yPFJlZlB0cjxJREJLZXlSYW5nZT4+KCk+JiYgZnVuY3Rpb24pCiB7CiAg
ICAgTE9HKEluZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yIik7Ci0gICAgQVNT
RVJUKCZtX3RyYW5zYWN0aW9uLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6
Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFk
KG1fdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgaWYgKG1f
ZGVsZXRlZCkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAi
RmFpbGVkIHRvIGV4ZWN1dGUgJ29wZW5DdXJzb3InIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBv
YmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iX3MgfTsKQEAgLTE4NSw3ICsxODUsNyBAQCBF
eGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yKEpT
R2xvYmFsT2JqZWN0JiBleGVjU3RhdAogRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJP
YmplY3RTdG9yZTo6ZG9PcGVuS2V5Q3Vyc29yKEpTR2xvYmFsT2JqZWN0JiBleGVjU3RhdGUsIElE
QkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIFdURjo6RnVuY3Rpb248RXhjZXB0aW9uT3I8UmVm
UHRyPElEQktleVJhbmdlPj4oKT4mJiBmdW5jdGlvbikKIHsKICAgICBMT0coSW5kZXhlZERCLCAi
SURCT2JqZWN0U3RvcmU6Om9wZW5LZXlDdXJzb3IiKTsKLSAgICBBU1NFUlQoJm1fdHJhbnNhY3Rp
b24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAg
IEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV90cmFuc2FjdGlvbi5k
YXRhYmFzZSgpLm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBpZiAobV9kZWxldGVkKQogICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJGYWlsZWQgdG8gZXhlY3V0
ZSAnb3BlbktleUN1cnNvcicgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIG9iamVjdCBzdG9yZSBo
YXMgYmVlbiBkZWxldGVkLiJfcyB9OwpAQCAtMjIzLDcgKzIyMyw3IEBAIEV4Y2VwdGlvbk9yPFJl
ZjxJREJSZXF1ZXN0Pj4gSURCT2JqZWN0U3RvcmU6Om9wZW5LZXlDdXJzb3IoSlNHbG9iYWxPYmpl
Y3QmIGV4ZWNTCiBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpn
ZXQoSlNHbG9iYWxPYmplY3QmIGV4ZWNTdGF0ZSwgSlNWYWx1ZSBrZXkpCiB7CiAgICAgTE9HKElu
ZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjpnZXQiKTsKLSAgICBBU1NFUlQoJm1fdHJhbnNhY3Rp
b24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAg
IEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV90cmFuc2FjdGlvbi5k
YXRhYmFzZSgpLm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBpZiAobV9kZWxldGVkKQogICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJGYWlsZWQgdG8gZXhlY3V0
ZSAnZ2V0JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRl
bGV0ZWQuIl9zIH07CkBAIC0yNDEsNyArMjQxLDcgQEAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVl
c3Q+PiBJREJPYmplY3RTdG9yZTo6Z2V0KEpTR2xvYmFsT2JqZWN0JiBleGVjU3RhdGUsIEpTVmEK
IEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCT2JqZWN0U3RvcmU6OmdldChKU0dsb2Jh
bE9iamVjdCYgZXhlY1N0YXRlLCBJREJLZXlSYW5nZSoga2V5UmFuZ2UpCiB7CiAgICAgTE9HKElu
ZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjpnZXQiKTsKLSAgICBBU1NFUlQoJm1fdHJhbnNhY3Rp
b24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAg
IEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV90cmFuc2FjdGlvbi5k
YXRhYmFzZSgpLm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBpZiAobV9kZWxldGVkKQogICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJGYWlsZWQgdG8gZXhlY3V0
ZSAnZ2V0JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRl
bGV0ZWQuIl9zIH07CkBAIC0yNTksNyArMjU5LDcgQEAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVl
c3Q+PiBJREJPYmplY3RTdG9yZTo6Z2V0KEpTR2xvYmFsT2JqZWN0JiBleGVjU3RhdGUsIElEQksK
IEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCT2JqZWN0U3RvcmU6OmdldEtleShKU0ds
b2JhbE9iamVjdCYgZXhlY1N0YXRlLCBKU1ZhbHVlIGtleSkKIHsKICAgICBMT0coSW5kZXhlZERC
LCAiSURCT2JqZWN0U3RvcmU6OmdldEtleSIpOwotICAgIEFTU0VSVCgmbV90cmFuc2FjdGlvbi5k
YXRhYmFzZSgpLm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNT
RVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX3RyYW5zYWN0aW9uLmRhdGFi
YXNlKCkub3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIGlmIChtX2RlbGV0ZWQpCiAgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgIkZhaWxlZCB0byBleGVjdXRlICdn
ZXRLZXknIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVs
ZXRlZC4iX3MgfTsKQEAgLTI3Nyw3ICsyNzcsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVz
dD4+IElEQk9iamVjdFN0b3JlOjpnZXRLZXkoSlNHbG9iYWxPYmplY3QmIGV4ZWNTdGF0ZSwgSgog
RXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJPYmplY3RTdG9yZTo6Z2V0S2V5KEpTR2xv
YmFsT2JqZWN0JiBleGVjU3RhdGUsIElEQktleVJhbmdlKiBrZXlSYW5nZSkKIHsKICAgICBMT0co
SW5kZXhlZERCLCAiSURCT2JqZWN0U3RvcmU6OmdldEtleSIpOwotICAgIEFTU0VSVCgmbV90cmFu
c2FjdGlvbi5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7
CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX3RyYW5zYWN0
aW9uLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIGlmIChtX2RlbGV0ZWQpCiAg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgIkZhaWxlZCB0byBl
eGVjdXRlICdnZXRLZXknIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFz
IGJlZW4gZGVsZXRlZC4iX3MgfTsKQEAgLTMxOSw3ICszMTksNyBAQCBFeGNlcHRpb25PcjxSZWY8
SURCUmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpwdXRPckFkZChKU0dsb2JhbE9iamVjdCYgc3Rh
dGUsIEpTVgogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAg
IExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6cHV0T3JBZGQiKTsKLSAgICBBU1NFUlQo
Jm1fdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJy
ZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV90
cmFuc2FjdGlvbi5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBhdXRvIGNvbnRl
eHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0RnJvbUV4ZWNTdGF0ZSgmc3RhdGUpOwogICAgIGlm
ICghY29udGV4dCkKQEAgLTM4OSw3ICszODksNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVz
dD4+IElEQk9iamVjdFN0b3JlOjpkZWxldGVGdW5jdGlvbihKU0dsb2JhbE9iamVjdCYgZXhlYwog
RXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJPYmplY3RTdG9yZTo6ZG9EZWxldGUoSlNH
bG9iYWxPYmplY3QmIGV4ZWNTdGF0ZSwgV1RGOjpGdW5jdGlvbjxFeGNlcHRpb25PcjxSZWZQdHI8
SURCS2V5UmFuZ2U+PigpPiYmIGZ1bmN0aW9uKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJP
YmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24iKTsKLSAgICBBU1NFUlQoJm1fdHJhbnNhY3Rpb24u
ZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFT
U0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV90cmFuc2FjdGlvbi5kYXRh
YmFzZSgpLm9yaWdpblRocmVhZCgpKSk7CiAKICAgICAvLyBUaGUgSURCIHNwZWMgZm9yIHNldmVy
YWwgSURCT2JqZWN0U3RvcmUgbWV0aG9kcyBzdGF0ZXMgdGhhdCB0cmFuc2FjdGlvbiByZWxhdGVk
IGV4Y2VwdGlvbnMgc2hvdWxkIGZpcmUgYmVmb3JlCiAgICAgLy8gdGhlIGV4Y2VwdGlvbiBmb3Ig
YW4gb2JqZWN0IHN0b3JlIGJlaW5nIGRlbGV0ZWQuCkBAIC00MjksNyArNDI5LDcgQEAgRXhjZXB0
aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24oSlNH
bG9iYWxPYmplY3QmIGV4ZWMKIEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCT2JqZWN0
U3RvcmU6OmNsZWFyKEpTR2xvYmFsT2JqZWN0JiBleGVjU3RhdGUpCiB7CiAgICAgTE9HKEluZGV4
ZWREQiwgIklEQk9iamVjdFN0b3JlOjpjbGVhciIpOwotICAgIEFTU0VSVCgmbV90cmFuc2FjdGlv
bi5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAg
QVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX3RyYW5zYWN0aW9uLmRh
dGFiYXNlKCkub3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIC8vIFRoZSBJREIgc3BlYyBmb3Igc2V2
ZXJhbCBJREJPYmplY3RTdG9yZSBtZXRob2RzIHN0YXRlcyB0aGF0IHRyYW5zYWN0aW9uIHJlbGF0
ZWQgZXhjZXB0aW9ucyBzaG91bGQgZmlyZSBiZWZvcmUKICAgICAvLyB0aGUgZXhjZXB0aW9uIGZv
ciBhbiBvYmplY3Qgc3RvcmUgYmVpbmcgZGVsZXRlZC4KQEAgLTQ1MSw3ICs0NTEsNyBAQCBFeGNl
cHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpjbGVhcihKU0dsb2JhbE9i
amVjdCYgZXhlY1N0YXRlKQogRXhjZXB0aW9uT3I8UmVmPElEQkluZGV4Pj4gSURCT2JqZWN0U3Rv
cmU6OmNyZWF0ZUluZGV4KEpTR2xvYmFsT2JqZWN0JiwgY29uc3QgU3RyaW5nJiBuYW1lLCBJREJL
ZXlQYXRoJiYga2V5UGF0aCwgY29uc3QgSW5kZXhQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogewog
ICAgIExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXggJXMgKGtleVBh
dGg6ICVzLCB1bmlxdWU6ICVpLCBtdWx0aUVudHJ5OiAlaSkiLCBuYW1lLnV0ZjgoKS5kYXRhKCks
IGxvZ2dpbmdTdHJpbmcoa2V5UGF0aCkudXRmOCgpLmRhdGEoKSwgcGFyYW1ldGVycy51bmlxdWUs
IHBhcmFtZXRlcnMubXVsdGlFbnRyeSk7Ci0gICAgQVNTRVJUKCZtX3RyYW5zYWN0aW9uLmRhdGFi
YXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQo
Y2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fdHJhbnNhY3Rpb24uZGF0YWJhc2Uo
KS5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgaWYgKCFtX3RyYW5zYWN0aW9uLmlzVmVyc2lvbkNo
YW5nZSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJG
YWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlSW5kZXgnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBk
YXRhYmFzZSBpcyBub3QgcnVubmluZyBhIHZlcnNpb24gY2hhbmdlIHRyYW5zYWN0aW9uLiJfcyB9
OwpAQCAtNDkyLDcgKzQ5Miw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJJbmRleD4+IElEQk9iamVj
dFN0b3JlOjpjcmVhdGVJbmRleChKU0dsb2JhbE9iamVjdCYsIGNvbnN0IFN0CiBFeGNlcHRpb25P
cjxSZWY8SURCSW5kZXg+PiBJREJPYmplY3RTdG9yZTo6aW5kZXgoY29uc3QgU3RyaW5nJiBpbmRl
eE5hbWUpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjppbmRleCIpOwot
ICAgIEFTU0VSVCgmbV90cmFuc2FjdGlvbi5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpID09ICZU
aHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZv
clRocmVhZChtX3RyYW5zYWN0aW9uLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkpKTsKIAogICAg
IGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSW52YWxpZFN0YXRlRXJyb3IgfTsgLy8gRklYTUU6IElzIHRoaXMgY29kZSB0ZXN0ZWQ/IElz
IGl0ZXZlbiByZWFjaGFibGU/CkBAIC01MjQsNyArNTI0LDcgQEAgRXhjZXB0aW9uT3I8UmVmPElE
QkluZGV4Pj4gSURCT2JqZWN0U3RvcmU6OmluZGV4KGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKQog
RXhjZXB0aW9uT3I8dm9pZD4gSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KGNvbnN0IFN0cmlu
ZyYgbmFtZSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUlu
ZGV4ICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICBBU1NFUlQoJm1fdHJhbnNhY3Rpb24u
ZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFT
U0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV90cmFuc2FjdGlvbi5kYXRh
YmFzZSgpLm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBpZiAobV9kZWxldGVkKQogICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJGYWlsZWQgdG8gZXhlY3V0ZSAn
ZGVsZXRlSW5kZXgnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJl
ZW4gZGVsZXRlZC4iX3MgfTsKQEAgLTU3Niw3ICs1NzYsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURC
UmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpjb3VudChKU0dsb2JhbE9iamVjdCYgZXhlY1N0YXRl
LCBJRAogCiBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpkb0Nv
dW50KEpTR2xvYmFsT2JqZWN0JiBleGVjU3RhdGUsIGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFu
Z2UpCiB7Ci0gICAgQVNTRVJUKCZtX3RyYW5zYWN0aW9uLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFk
KCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9j
YWxEYXRhRm9yVGhyZWFkKG1fdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSkp
OwogCiAgICAgLy8gVGhlIElEQiBzcGVjIGZvciBzZXZlcmFsIElEQk9iamVjdFN0b3JlIG1ldGhv
ZHMgc3RhdGVzIHRoYXQgdHJhbnNhY3Rpb24gcmVsYXRlZCBleGNlcHRpb25zIHNob3VsZCBmaXJl
IGJlZm9yZQogICAgIC8vIHRoZSBleGNlcHRpb24gZm9yIGFuIG9iamVjdCBzdG9yZSBiZWluZyBk
ZWxldGVkLgpAQCAtNTk4LDcgKzU5OCw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4g
SURCT2JqZWN0U3RvcmU6OmRvQ291bnQoSlNHbG9iYWxPYmplY3QmIGV4ZWNTdGF0ZSwKIEV4Y2Vw
dGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCT2JqZWN0U3RvcmU6OmRvR2V0QWxsKEpTR2xvYmFs
T2JqZWN0JiBleGVjU3RhdGUsIE9wdGlvbmFsPHVpbnQzMl90PiBjb3VudCwgV1RGOjpGdW5jdGlv
bjxFeGNlcHRpb25PcjxSZWZQdHI8SURCS2V5UmFuZ2U+PigpPiYmIGZ1bmN0aW9uKQogewogICAg
IExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6Z2V0QWxsIik7Ci0gICAgQVNTRVJUKCZt
X3RyYW5zYWN0aW9uLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVu
dCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fdHJh
bnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgaWYgKG1fZGVsZXRl
ZCkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAiRmFpbGVk
IHRvIGV4ZWN1dGUgJ2dldEFsbCcgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIG9iamVjdCBzdG9y
ZSBoYXMgYmVlbiBkZWxldGVkLiJfcyB9OwpAQCAtNjM1LDcgKzYzNSw3IEBAIEV4Y2VwdGlvbk9y
PFJlZjxJREJSZXF1ZXN0Pj4gSURCT2JqZWN0U3RvcmU6OmdldEFsbChKU0dsb2JhbE9iamVjdCYg
ZXhlY1N0YXRlLCBKCiBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0b3Jl
Ojpkb0dldEFsbEtleXMoSlNHbG9iYWxPYmplY3QmIGV4ZWNTdGF0ZSwgT3B0aW9uYWw8dWludDMy
X3Q+IGNvdW50LCBXVEY6OkZ1bmN0aW9uPEV4Y2VwdGlvbk9yPFJlZlB0cjxJREJLZXlSYW5nZT4+
KCk+JiYgZnVuY3Rpb24pCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjpn
ZXRBbGxLZXlzIik7Ci0gICAgQVNTRVJUKCZtX3RyYW5zYWN0aW9uLmRhdGFiYXNlKCkub3JpZ2lu
VGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhy
ZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJl
YWQoKSkpOwogCiAgICAgaWYgKG1fZGVsZXRlZCkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IEludmFsaWRTdGF0ZUVycm9yLCAiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldEFsbEtleXMnIG9uICdJ
REJPYmplY3RTdG9yZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iX3MgfTsK
QEAgLTY3MSwxMyArNjcxLDEzIEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCT2Jq
ZWN0U3RvcmU6OmdldEFsbEtleXMoSlNHbG9iYWxPYmplY3QmIGV4ZWNTdGF0CiAKIHZvaWQgSURC
T2JqZWN0U3RvcmU6Om1hcmtBc0RlbGV0ZWQoKQogewotICAgIEFTU0VSVCgmbV90cmFuc2FjdGlv
bi5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAg
QVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX3RyYW5zYWN0aW9uLmRh
dGFiYXNlKCkub3JpZ2luVGhyZWFkKCkpKTsKICAgICBtX2RlbGV0ZWQgPSB0cnVlOwogfQogCiB2
b2lkIElEQk9iamVjdFN0b3JlOjpyb2xsYmFja0ZvclZlcnNpb25DaGFuZ2VBYm9ydCgpCiB7Ci0g
ICAgQVNTRVJUKCZtX3RyYW5zYWN0aW9uLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRo
cmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9y
VGhyZWFkKG1fdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAg
U3RyaW5nIGN1cnJlbnROYW1lID0gbV9pbmZvLm5hbWUoKTsKICAgICBtX2luZm8gPSBtX29yaWdp
bmFsSW5mbzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9wZW5EQlJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T3BlbkRCUmVxdWVzdC5jcHAKaW5kZXggZTU4OGZhZTlkZmMxOTVhODc5OTdhY2NiNTgyMjhkMjdj
ZDAyMzcxNi4uZjZiOGE3NGE1Mjg3OTQ2NjQ5M2JlNzk4NDU5ZTQ1ODhkYWVhYjhlZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVz
dC5jcHAKQEAgLTY2LDEyICs2NiwxMiBAQCBJREJPcGVuREJSZXF1ZXN0OjpJREJPcGVuREJSZXF1
ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQkNsaWVudDo6SQogCiBJREJP
cGVuREJSZXF1ZXN0Ojp+SURCT3BlbkRCUmVxdWVzdCgpCiB7Ci0gICAgQVNTRVJUKCZvcmlnaW5U
aHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJl
YWRMb2NhbERhdGFGb3JUaHJlYWQob3JpZ2luVGhyZWFkKCkpKTsKIH0KIAogdm9pZCBJREJPcGVu
REJSZXF1ZXN0OjpvbkVycm9yKGNvbnN0IElEQlJlc3VsdERhdGEmIGRhdGEpCiB7Ci0gICAgQVNT
RVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChj
YW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQob3JpZ2luVGhyZWFkKCkpKTsKIAogICAg
IG1fZG9tRXJyb3IgPSBkYXRhLmVycm9yKCkudG9ET01FeGNlcHRpb24oKTsKICAgICBlbnF1ZXVl
RXZlbnQoSURCUmVxdWVzdENvbXBsZXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lcnJv
ckV2ZW50LCBFdmVudDo6Q2FuQnViYmxlOjpZZXMsIEV2ZW50OjpJc0NhbmNlbGFibGU6Olllcywg
KnRoaXMpKTsKQEAgLTc5LDcgKzc5LDcgQEAgdm9pZCBJREJPcGVuREJSZXF1ZXN0OjpvbkVycm9y
KGNvbnN0IElEQlJlc3VsdERhdGEmIGRhdGEpCiAKIHZvaWQgSURCT3BlbkRCUmVxdWVzdDo6dmVy
c2lvbkNoYW5nZVRyYW5zYWN0aW9uRGlkRmluaXNoKCkKIHsKLSAgICBBU1NFUlQoJm9yaWdpblRo
cmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVh
ZExvY2FsRGF0YUZvclRocmVhZChvcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgLy8gMy4zLjcgInZl
cnNpb25jaGFuZ2UiIHRyYW5zYWN0aW9uIHN0ZXBzCiAgICAgLy8gV2hlbiB0aGUgdHJhbnNhY3Rp
b24gaXMgZmluaXNoZWQsIGFmdGVyIGZpcmluZyBjb21wbGV0ZS9hYm9ydCBvbiB0aGUgdHJhbnNh
Y3Rpb24sIGltbWVkaWF0ZWx5IHNldCByZXF1ZXN0J3MgdHJhbnNhY3Rpb24gcHJvcGVydHkgdG8g
bnVsbC4KQEAgLTkwLDcgKzkwLDcgQEAgdm9pZCBJREJPcGVuREJSZXF1ZXN0OjpmaXJlU3VjY2Vz
c0FmdGVyVmVyc2lvbkNoYW5nZUNvbW1pdCgpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQk9w
ZW5EQlJlcXVlc3Q6OmZpcmVTdWNjZXNzQWZ0ZXJWZXJzaW9uQ2hhbmdlQ29tbWl0KCkgLSAlcyIs
IHJlc291cmNlSWRlbnRpZmllcigpLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAot
ICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBB
U1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG9yaWdpblRocmVhZCgpKSk7
CiAgICAgQVNTRVJUKGhhc1BlbmRpbmdBY3Rpdml0eSgpKTsKICAgICBtX3RyYW5zYWN0aW9uLT5h
ZGRSZXF1ZXN0KCp0aGlzKTsKIApAQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgSURCT3BlbkRCUmVx
dWVzdDo6ZmlyZUVycm9yQWZ0ZXJWZXJzaW9uQ2hhbmdlQ29tcGxldGlvbigpCiB7CiAgICAgTE9H
KEluZGV4ZWREQiwgIklEQk9wZW5EQlJlcXVlc3Q6OmZpcmVFcnJvckFmdGVyVmVyc2lvbkNoYW5n
ZUNvbXBsZXRpb24oKSAtICVzIiwgcmVzb3VyY2VJZGVudGlmaWVyKCkubG9nZ2luZ1N0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgQVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFk
OjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJl
YWQob3JpZ2luVGhyZWFkKCkpKTsKICAgICBBU1NFUlQoaGFzUGVuZGluZ0FjdGl2aXR5KCkpOwog
CiAgICAgSURCRXJyb3IgaWRiRXJyb3IoQWJvcnRFcnJvcik7CkBAIC0xMjUsNyArMTI1LDcgQEAg
dm9pZCBJREJPcGVuREJSZXF1ZXN0OjpjYW5jZWxGb3JTdG9wKCkKIAogdm9pZCBJREJPcGVuREJS
ZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkKIHsKLSAgICBBU1NFUlQoJm9yaWdp
blRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1Ro
cmVhZExvY2FsRGF0YUZvclRocmVhZChvcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgYXV0byBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyk7CiAKQEAgLTEzOSw3ICsxMzksNyBAQCB2b2lkIElE
Qk9wZW5EQlJlcXVlc3Q6Om9uU3VjY2Vzcyhjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRh
KQogewogICAgIExPRyhJbmRleGVkREIsICJJREJPcGVuREJSZXF1ZXN0OjpvblN1Y2Nlc3MoKSIp
OwogCi0gICAgQVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOwor
ICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQob3JpZ2luVGhyZWFk
KCkpKTsKIAogICAgIHNldFJlc3VsdChJREJEYXRhYmFzZTo6Y3JlYXRlKCpzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCksIGNvbm5lY3Rpb25Qcm94eSgpLCByZXN1bHREYXRhKSk7CiAgICAgbV9yZWFk
eVN0YXRlID0gUmVhZHlTdGF0ZTo6RG9uZTsKQEAgLTE0OSw3ICsxNDksNyBAQCB2b2lkIElEQk9w
ZW5EQlJlcXVlc3Q6Om9uU3VjY2Vzcyhjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQog
CiB2b2lkIElEQk9wZW5EQlJlcXVlc3Q6Om9uVXBncmFkZU5lZWRlZChjb25zdCBJREJSZXN1bHRE
YXRhJiByZXN1bHREYXRhKQogewotICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0gJlRocmVh
ZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhy
ZWFkKG9yaWdpblRocmVhZCgpKSk7CiAKICAgICBSZWY8SURCRGF0YWJhc2U+IGRhdGFiYXNlID0g
SURCRGF0YWJhc2U6OmNyZWF0ZSgqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBjb25uZWN0aW9u
UHJveHkoKSwgcmVzdWx0RGF0YSk7CiAgICAgUmVmPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlv
biA9IGRhdGFiYXNlLT5zdGFydFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihyZXN1bHREYXRhLnRy
YW5zYWN0aW9uSW5mbygpLCAqdGhpcyk7CkBAIC0xNzIsNyArMTcyLDcgQEAgdm9pZCBJREJPcGVu
REJSZXF1ZXN0OjpvblVwZ3JhZGVOZWVkZWQoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0
YSkKIAogdm9pZCBJREJPcGVuREJSZXF1ZXN0OjpvbkRlbGV0ZURhdGFiYXNlU3VjY2Vzcyhjb25z
dCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQogewotICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFk
KCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9j
YWxEYXRhRm9yVGhyZWFkKG9yaWdpblRocmVhZCgpKSk7CiAKICAgICB1aW50NjRfdCBvbGRWZXJz
aW9uID0gcmVzdWx0RGF0YS5kYXRhYmFzZUluZm8oKS52ZXJzaW9uKCk7CiAKQEAgLTE4OCw3ICsx
ODgsNyBAQCB2b2lkIElEQk9wZW5EQlJlcXVlc3Q6OnJlcXVlc3RDb21wbGV0ZWQoY29uc3QgSURC
UmVzdWx0RGF0YSYgZGF0YSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCT3BlbkRCUmVxdWVz
dDo6cmVxdWVzdENvbXBsZXRlZCIpOwogCi0gICAgQVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAm
VGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFG
b3JUaHJlYWQob3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIG1faXNCbG9ja2VkID0gZmFsc2U7CiAK
QEAgLTIzMCw3ICsyMzAsNyBAQCB2b2lkIElEQk9wZW5EQlJlcXVlc3Q6OnJlcXVlc3RDb21wbGV0
ZWQoY29uc3QgSURCUmVzdWx0RGF0YSYgZGF0YSkKIAogdm9pZCBJREJPcGVuREJSZXF1ZXN0Ojpy
ZXF1ZXN0QmxvY2tlZCh1aW50NjRfdCBvbGRWZXJzaW9uLCB1aW50NjRfdCBuZXdWZXJzaW9uKQog
ewotICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAg
ICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG9yaWdpblRocmVhZCgp
KSk7CiAgICAgQVNTRVJUKCFtX2lzQmxvY2tlZCk7CiAKICAgICBtX2lzQmxvY2tlZCA9IHRydWU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCmlu
ZGV4IGQ4MWEwNTY5MzA4YWQxOTFjNjI5ZjU0MDJhNzUyN2YwNGQwYTM4ZWQuLmY5M2NmMWY0Zjk3
NWYxYzNiZjJhNjc5ZGQ2ZmNlZmQ3YzZmMzM2NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCkBAIC0xNTIsNyArMTUyLDcgQEAgSURCUmVx
dWVzdDo6SURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJJbmRl
eCYgaW5kZXgsIEluZGV4ZWQKIAogSURCUmVxdWVzdDo6fklEQlJlcXVlc3QoKQogewotICAgIEFT
U0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQo
Y2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG9yaWdpblRocmVhZCgpKSk7CiAKICAg
ICBXVEY6OnN3aXRjaE9uKG1fcmVzdWx0LAogICAgICAgICBbXSAoUmVmUHRyPElEQkN1cnNvcj4m
IGN1cnNvcikgeyBjdXJzb3ItPmNsZWFyUmVxdWVzdCgpOyB9LApAQCAtMTcwLDcgKzE3MCw3IEBA
IEV4Y2VwdGlvbk9yPElEQlJlcXVlc3Q6OlJlc3VsdD4gSURCUmVxdWVzdDo6cmVzdWx0KCkgY29u
c3QKIAogRXhjZXB0aW9uT3I8RE9NRXhjZXB0aW9uKj4gSURCUmVxdWVzdDo6ZXJyb3IoKSBjb25z
dAogewotICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsK
KyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG9yaWdpblRocmVh
ZCgpKSk7CiAKICAgICBpZiAoIWlzRG9uZSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZFN0YXRlRXJyb3IsICJGYWlsZWQgdG8gcmVhZCB0aGUgJ2Vycm9yJyBwcm9wZXJ0eSBm
cm9tICdJREJSZXF1ZXN0JzogVGhlIHJlcXVlc3QgaGFzIG5vdCBmaW5pc2hlZC4iX3MgfTsKQEAg
LTE4MCwxNCArMTgwLDE0IEBAIEV4Y2VwdGlvbk9yPERPTUV4Y2VwdGlvbio+IElEQlJlcXVlc3Q6
OmVycm9yKCkgY29uc3QKIAogdm9pZCBJREJSZXF1ZXN0OjpzZXRTb3VyY2UoSURCQ3Vyc29yJiBj
dXJzb3IpCiB7Ci0gICAgQVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50
KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQob3JpZ2lu
VGhyZWFkKCkpKTsKIAogICAgIG1fc291cmNlID0gU291cmNlIHsgJmN1cnNvciB9OwogfQogCiB2
b2lkIElEQlJlcXVlc3Q6OnNldFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlv
biYgdHJhbnNhY3Rpb24pCiB7Ci0gICAgQVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFk
OjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJl
YWQob3JpZ2luVGhyZWFkKCkpKTsKICAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb24pOwogICAgIEFT
U0VSVCh0cmFuc2FjdGlvbi5pc1ZlcnNpb25DaGFuZ2UoKSk7CiAgICAgQVNTRVJUKCF0cmFuc2Fj
dGlvbi5pc0ZpbmlzaGVkT3JGaW5pc2hpbmcoKSk7CkBAIC0xOTcsMTMgKzE5NywxMyBAQCB2b2lk
IElEQlJlcXVlc3Q6OnNldFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiYg
dHJhbnNhY3Rpb24pCiAKIFJlZlB0cjxXZWJDb3JlOjpJREJUcmFuc2FjdGlvbj4gSURCUmVxdWVz
dDo6dHJhbnNhY3Rpb24oKSBjb25zdAogewotICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0g
JlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRh
Rm9yVGhyZWFkKG9yaWdpblRocmVhZCgpKSk7CiAgICAgcmV0dXJuIG1fc2hvdWxkRXhwb3NlVHJh
bnNhY3Rpb25Ub0RPTSA/IG1fdHJhbnNhY3Rpb24gOiBudWxscHRyOwogfQogCiB1aW50NjRfdCBJ
REJSZXF1ZXN0Ojpzb3VyY2VPYmplY3RTdG9yZUlkZW50aWZpZXIoKSBjb25zdAogewotICAgIEFT
U0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQo
Y2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG9yaWdpblRocmVhZCgpKSk7CiAKICAg
ICBpZiAoIW1fc291cmNlKQogICAgICAgICByZXR1cm4gMDsKQEAgLTIxNyw3ICsyMTcsNyBAQCB1
aW50NjRfdCBJREJSZXF1ZXN0Ojpzb3VyY2VPYmplY3RTdG9yZUlkZW50aWZpZXIoKSBjb25zdAog
CiB1aW50NjRfdCBJREJSZXF1ZXN0Ojpzb3VyY2VJbmRleElkZW50aWZpZXIoKSBjb25zdAogewot
ICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBB
U1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG9yaWdpblRocmVhZCgpKSk7
CiAKICAgICBpZiAoIW1fc291cmNlKQogICAgICAgICByZXR1cm4gMDsKQEAgLTIzMSwxNCArMjMx
LDE0IEBAIHVpbnQ2NF90IElEQlJlcXVlc3Q6OnNvdXJjZUluZGV4SWRlbnRpZmllcigpIGNvbnN0
CiAKIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVSZWNvcmRUeXBlIElEQlJlcXVlc3Q6OnJlcXVlc3Rl
ZE9iamVjdFN0b3JlUmVjb3JkVHlwZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCZvcmlnaW5UaHJl
YWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRM
b2NhbERhdGFGb3JUaHJlYWQob3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIHJldHVybiBtX3JlcXVl
c3RlZE9iamVjdFN0b3JlUmVjb3JkVHlwZTsKIH0KIAogSW5kZXhlZERCOjpJbmRleFJlY29yZFR5
cGUgSURCUmVxdWVzdDo6cmVxdWVzdGVkSW5kZXhSZWNvcmRUeXBlKCkgY29uc3QKIHsKLSAgICBB
U1NFUlQoJm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJU
KGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChvcmlnaW5UaHJlYWQoKSkpOwogICAg
IEFTU0VSVChtX3NvdXJjZSk7CiAgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVm
UHRyPElEQkluZGV4Pj4obV9zb3VyY2UudmFsdWUoKSkpOwogCkBAIC0yNDcsMjcgKzI0NywyNyBA
QCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSBJREJSZXF1ZXN0OjpyZXF1ZXN0ZWRJbmRleFJl
Y29yZFR5cGUoKSBjb25zdAogCiBFdmVudFRhcmdldEludGVyZmFjZSBJREJSZXF1ZXN0OjpldmVu
dFRhcmdldEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9
PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERh
dGFGb3JUaHJlYWQob3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIHJldHVybiBJREJSZXF1ZXN0RXZl
bnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCiBjb25zdCBjaGFyKiBJREJSZXF1ZXN0OjphY3Rp
dmVET01PYmplY3ROYW1lKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoJm9yaWdpblRocmVhZCgpID09
ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0
YUZvclRocmVhZChvcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgcmV0dXJuICJJREJSZXF1ZXN0IjsK
IH0KIAogYm9vbCBJREJSZXF1ZXN0OjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAogewotICAg
IEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpIHx8IFRocmVhZDo6
bWF5QmVHQ1RocmVhZCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9y
VGhyZWFkKG9yaWdpblRocmVhZCgpKSB8fCBUaHJlYWQ6Om1heUJlR0NUaHJlYWQoKSk7CiAgICAg
cmV0dXJuICFtX2NvbnRleHRTdG9wcGVkICYmIG1faGFzUGVuZGluZ0FjdGl2aXR5OwogfQogCiB2
b2lkIElEQlJlcXVlc3Q6OnN0b3AoKQogewotICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0g
JlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRh
Rm9yVGhyZWFkKG9yaWdpblRocmVhZCgpKSk7CiAgICAgQVNTRVJUKCFtX2NvbnRleHRTdG9wcGVk
KTsKIAogICAgIGNhbmNlbEZvclN0b3AoKTsKQEAgLTI4Niw3ICsyODYsNyBAQCB2b2lkIElEQlJl
cXVlc3Q6OmNhbmNlbEZvclN0b3AoKQogCiB2b2lkIElEQlJlcXVlc3Q6OmVucXVldWVFdmVudChS
ZWY8RXZlbnQ+JiYgZXZlbnQpCiB7Ci0gICAgQVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhy
ZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JU
aHJlYWQob3JpZ2luVGhyZWFkKCkpKTsKICAgICBpZiAobV9jb250ZXh0U3RvcHBlZCkKICAgICAg
ICAgcmV0dXJuOwogCkBAIC0yOTgsNyArMjk4LDcgQEAgdm9pZCBJREJSZXF1ZXN0OjpkaXNwYXRj
aEV2ZW50KEV2ZW50JiBldmVudCkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCUmVxdWVzdDo6
ZGlzcGF0Y2hFdmVudCAtICVzICglcCkiLCBldmVudC50eXBlKCkuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSwgdGhpcyk7CiAKLSAgICBBU1NFUlQoJm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1
cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChv
cmlnaW5UaHJlYWQoKSkpOwogICAgIEFTU0VSVChtX2hhc1BlbmRpbmdBY3Rpdml0eSk7CiAgICAg
QVNTRVJUKCFtX2NvbnRleHRTdG9wcGVkKTsKIApAQCAtMzQ5LDcgKzM0OSw3IEBAIHZvaWQgSURC
UmVxdWVzdDo6dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFuZGxlcigpCiB7CiAgICAgTE9HKElu
ZGV4ZWREQiwgIklEQlJlcXVlc3Q6OnVuY2F1Z2h0RXhjZXB0aW9uSW5FdmVudEhhbmRsZXIiKTsK
IAotICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAg
ICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG9yaWdpblRocmVhZCgp
KSk7CiAKICAgICBpZiAobV9kaXNwYXRjaGluZ0V2ZW50KSB7CiAgICAgICAgIEFTU0VSVCghbV9o
YXNVbmNhdWdodEV4Y2VwdGlvbik7CkBAIC0zNjIsNyArMzYyLDcgQEAgdm9pZCBJREJSZXF1ZXN0
Ojp1bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyKCkKIAogdm9pZCBJREJSZXF1ZXN0Ojpz
ZXRSZXN1bHQoY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSkKIHsKLSAgICBBU1NFUlQoJm9yaWdp
blRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1Ro
cmVhZExvY2FsRGF0YUZvclRocmVhZChvcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgYXV0byogY29u
dGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCkBAIC0z
NzYsNyArMzc2LDcgQEAgdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHQoY29uc3QgSURCS2V5RGF0
YSYga2V5RGF0YSkKIAogdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHQoY29uc3QgVmVjdG9yPElE
QktleURhdGE+JiBrZXlEYXRhcykKIHsKLSAgICBBU1NFUlQoJm9yaWdpblRocmVhZCgpID09ICZU
aHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZv
clRocmVhZChvcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgYXV0byogY29udGV4dCA9IHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCkBAIC0zOTAsNyArMzkwLDcgQEAg
dm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHQoY29uc3QgVmVjdG9yPElEQktleURhdGE+JiBrZXlE
YXRhcykKIAogdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHQoY29uc3QgSURCR2V0QWxsUmVzdWx0
JiByZXN1bHQpCiB7Ci0gICAgQVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJy
ZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQob3Jp
Z2luVGhyZWFkKCkpKTsKIAogICAgIGF1dG8qIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQpAQCAtNDA0LDcgKzQwNCw3IEBAIHZvaWQgSURCUmVx
dWVzdDo6c2V0UmVzdWx0KGNvbnN0IElEQkdldEFsbFJlc3VsdCYgcmVzdWx0KQogCiB2b2lkIElE
QlJlcXVlc3Q6OnNldFJlc3VsdCh1aW50NjRfdCBudW1iZXIpCiB7Ci0gICAgQVNTRVJUKCZvcmln
aW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NU
aHJlYWRMb2NhbERhdGFGb3JUaHJlYWQob3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIGF1dG8qIGNv
bnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQpAQCAt
NDE4LDcgKzQxOCw3IEBAIHZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0KHVpbnQ2NF90IG51bWJl
cikKIAogdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHRUb1N0cnVjdHVyZWRDbG9uZShjb25zdCBJ
REJHZXRSZXN1bHQmIHJlc3VsdCkKIHsKLSAgICBBU1NFUlQoJm9yaWdpblRocmVhZCgpID09ICZU
aHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZv
clRocmVhZChvcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlJlcXVl
c3Q6OnNldFJlc3VsdFRvU3RydWN0dXJlZENsb25lIik7CiAKQEAgLTQzNCw3ICs0MzQsNyBAQCB2
b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdFRvU3RydWN0dXJlZENsb25lKGNvbnN0IElEQkdldFJl
c3VsdCYgcmVzdWx0KQogCiB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdFRvVW5kZWZpbmVkKCkK
IHsKLSAgICBBU1NFUlQoJm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7Cisg
ICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChvcmlnaW5UaHJlYWQo
KSkpOwogCiAgICAgYXV0byogY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAg
ICBpZiAoIWNvbnRleHQpCkBAIC00NDgsNyArNDQ4LDcgQEAgdm9pZCBJREJSZXF1ZXN0OjpzZXRS
ZXN1bHRUb1VuZGVmaW5lZCgpCiAKIElEQkN1cnNvciogSURCUmVxdWVzdDo6cmVzdWx0Q3Vyc29y
KCkKIHsKLSAgICBBU1NFUlQoJm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7
CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChvcmlnaW5UaHJl
YWQoKSkpOwogCiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9yZXN1bHQsCiAgICAgICAgIFtd
IChjb25zdCBSZWZQdHI8SURCQ3Vyc29yPiYgY3Vyc29yKSAtPiBJREJDdXJzb3IqIHsgcmV0dXJu
IGN1cnNvci5nZXQoKTsgfSwKQEAgLTQ1OCw3ICs0NTgsNyBAQCBJREJDdXJzb3IqIElEQlJlcXVl
c3Q6OnJlc3VsdEN1cnNvcigpCiAKIHZvaWQgSURCUmVxdWVzdDo6d2lsbEl0ZXJhdGVDdXJzb3Io
SURCQ3Vyc29yJiBjdXJzb3IpCiB7Ci0gICAgQVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhy
ZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JU
aHJlYWQob3JpZ2luVGhyZWFkKCkpKTsKICAgICBBU1NFUlQoaXNEb25lKCkpOwogICAgIEFTU0VS
VChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uKTsK
QEAgLTQ4Niw3ICs0ODYsNyBAQCB2b2lkIElEQlJlcXVlc3Q6OndpbGxJdGVyYXRlQ3Vyc29yKElE
QkN1cnNvciYgY3Vyc29yKQogCiB2b2lkIElEQlJlcXVlc3Q6OmRpZE9wZW5Pckl0ZXJhdGVDdXJz
b3IoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKIHsKLSAgICBBU1NFUlQoJm9yaWdp
blRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1Ro
cmVhZExvY2FsRGF0YUZvclRocmVhZChvcmlnaW5UaHJlYWQoKSkpOwogICAgIEFTU0VSVChtX3Bl
bmRpbmdDdXJzb3IpOwogCiAgICAgYXV0byogY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKQEAgLTUxMyw3ICs1MTMsNyBAQCB2b2lkIElEQlJlcXVlc3Q6OmRpZE9wZW5Pckl0ZXJh
dGVDdXJzb3IoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKIAogdm9pZCBJREJSZXF1
ZXN0Ojpjb21wbGV0ZVJlcXVlc3RBbmREaXNwYXRjaEV2ZW50KGNvbnN0IElEQlJlc3VsdERhdGEm
IHJlc3VsdERhdGEpCiB7Ci0gICAgQVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpj
dXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQo
b3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIG1fcmVhZHlTdGF0ZSA9IFJlYWR5U3RhdGU6OkRvbmU7
CiAKQEAgLTUyOCw3ICs1MjgsNyBAQCB2b2lkIElEQlJlcXVlc3Q6Om9uRXJyb3IoKQogewogICAg
IExPRyhJbmRleGVkREIsICJJREJSZXF1ZXN0OjpvbkVycm9yIik7CiAKLSAgICBBU1NFUlQoJm9y
aWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vz
c1RocmVhZExvY2FsRGF0YUZvclRocmVhZChvcmlnaW5UaHJlYWQoKSkpOwogICAgIEFTU0VSVCgh
bV9pZGJFcnJvci5pc051bGwoKSk7CiAKICAgICBtX2RvbUVycm9yID0gbV9pZGJFcnJvci50b0RP
TUV4Y2VwdGlvbigpOwpAQCAtNTM4LDEzICs1MzgsMTMgQEAgdm9pZCBJREJSZXF1ZXN0OjpvbkVy
cm9yKCkKIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKCkKIHsKICAgICBMT0coSW5kZXhlZERC
LCAiSURCUmVxdWVzdDo6b25TdWNjZXNzIik7Ci0gICAgQVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9
PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERh
dGFGb3JUaHJlYWQob3JpZ2luVGhyZWFkKCkpKTsKICAgICBlbnF1ZXVlRXZlbnQoRXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50LCBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZl
bnQ6OklzQ2FuY2VsYWJsZTo6Tm8pKTsKIH0KIAogdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHQo
UmVmPElEQkRhdGFiYXNlPiYmIGRhdGFiYXNlKQogewotICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFk
KCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9j
YWxEYXRhRm9yVGhyZWFkKG9yaWdpblRocmVhZCgpKSk7CiAKICAgICBhdXRvKiBjb250ZXh0ID0g
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29udGV4dCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAppbmRleCBk
OWFkNzMyMTljMjY1NmNjMDJmZmQxYTFlMzdmYWFlOWMxNzBhYzY3Li4yNTYyNjI1YWVkNjJiNGE1
OTllMzBlNzMzNzRmZWMzNzQ4Mjg4ZTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCkBAIC04NSw3ICs4NSw3IEBAIElEQlRy
YW5zYWN0aW9uOjpJREJUcmFuc2FjdGlvbihJREJEYXRhYmFzZSYgZGF0YWJhc2UsIGNvbnN0IElE
QlRyYW5zYWN0aW9uSW5mbyYKIAogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlv
bjo6SURCVHJhbnNhY3Rpb24gLSAlcyIsIG1faW5mby5sb2dnaW5nU3RyaW5nKCkudXRmOCgpLmRh
dGEoKSk7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFk
OjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJl
YWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKIAogICAgICsrbnVtYmVyT2ZJREJUcmFu
c2FjdGlvbnM7CiAKQEAgLTExMyw3ICsxMTMsNyBAQCBJREJUcmFuc2FjdGlvbjo6SURCVHJhbnNh
Y3Rpb24oSURCRGF0YWJhc2UmIGRhdGFiYXNlLCBjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mCiBJ
REJUcmFuc2FjdGlvbjo6fklEQlRyYW5zYWN0aW9uKCkKIHsKICAgICAtLW51bWJlck9mSURCVHJh
bnNhY3Rpb25zOwotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRo
cmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9y
VGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CiB9CiAKIElEQkNsaWVudDo6SURC
Q29ubmVjdGlvblByb3h5JiBJREJUcmFuc2FjdGlvbjo6Y29ubmVjdGlvblByb3h5KCkKQEAgLTEy
Myw3ICsxMjMsNyBAQCBJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Qcm94eSYgSURCVHJhbnNhY3Rp
b246OmNvbm5lY3Rpb25Qcm94eSgpCiAKIFJlZjxET01TdHJpbmdMaXN0PiBJREJUcmFuc2FjdGlv
bjo6b2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5v
cmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nl
c3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsK
IAogICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+IG5hbWVzID0gaXNWZXJzaW9uQ2hhbmdlKCkgPyBt
X2RhdGFiYXNlLT5pbmZvKCkub2JqZWN0U3RvcmVOYW1lcygpIDogbV9pbmZvLm9iamVjdFN0b3Jl
cygpOwogCkBAIC0xMzcsMjAgKzEzNywyMCBAQCBSZWY8RE9NU3RyaW5nTGlzdD4gSURCVHJhbnNh
Y3Rpb246Om9iamVjdFN0b3JlTmFtZXMoKSBjb25zdAogCiBJREJEYXRhYmFzZSogSURCVHJhbnNh
Y3Rpb246OmRiKCkKIHsKLSAgICBBU1NFUlQoJm1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpID09
ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0
YUZvclRocmVhZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkpOwogICAgIHJldHVybiBtX2Rh
dGFiYXNlLnB0cigpOwogfQogCiBET01FeGNlcHRpb24qIElEQlRyYW5zYWN0aW9uOjplcnJvcigp
IGNvbnN0CiB7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhy
ZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JU
aHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKICAgICByZXR1cm4gbV9kb21FcnJv
ci5nZXQoKTsKIH0KIAogRXhjZXB0aW9uT3I8UmVmPElEQk9iamVjdFN0b3JlPj4gSURCVHJhbnNh
Y3Rpb246Om9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lKQogewogICAg
IExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmUiKTsKLSAgICBBU1NF
UlQoJm1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7Cisg
ICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX2RhdGFiYXNlLT5v
cmlnaW5UaHJlYWQoKSkpOwogCiAgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCiAg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwpAQCAtMTkwLDcg
KzE5MCw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJPYmplY3RTdG9yZT4+IElEQlRyYW5zYWN0aW9u
OjpvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG9iamVjCiB2b2lkIElEQlRyYW5zYWN0aW9uOjph
Ym9ydER1ZVRvRmFpbGVkUmVxdWVzdChET01FeGNlcHRpb24mIGVycm9yKQogewogICAgIExPRyhJ
bmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6YWJvcnREdWVUb0ZhaWxlZFJlcXVlc3QiKTsKLSAg
ICBBU1NFUlQoJm1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQo
KSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX2RhdGFi
YXNlLT5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgaWYgKGlzRmluaXNoZWRPckZpbmlzaGluZygp
KQogICAgICAgICByZXR1cm47CkBAIC0yMDEsNyArMjAxLDcgQEAgdm9pZCBJREJUcmFuc2FjdGlv
bjo6YWJvcnREdWVUb0ZhaWxlZFJlcXVlc3QoRE9NRXhjZXB0aW9uJiBlcnJvcikKIAogdm9pZCBJ
REJUcmFuc2FjdGlvbjo6dHJhbnNpdGlvbmVkVG9GaW5pc2hpbmcoSW5kZXhlZERCOjpUcmFuc2Fj
dGlvblN0YXRlIHN0YXRlKQogewotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFk
KCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9j
YWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBBU1NF
UlQoIWlzRmluaXNoZWRPckZpbmlzaGluZygpKTsKICAgICBtX3N0YXRlID0gc3RhdGU7CkBAIC0y
MTEsNyArMjExLDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6dHJhbnNpdGlvbmVkVG9GaW5pc2hp
bmcoSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlIHN0YXRlKQogRXhjZXB0aW9uT3I8dm9pZD4g
SURCVHJhbnNhY3Rpb246OmFib3J0KCkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNh
Y3Rpb246OmFib3J0Iik7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9
PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERh
dGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIGlmIChpc0Zp
bmlzaGVkT3JGaW5pc2hpbmcoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRT
dGF0ZUVycm9yLCAiRmFpbGVkIHRvIGV4ZWN1dGUgJ2Fib3J0JyBvbiAnSURCVHJhbnNhY3Rpb24n
OiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3RpdmUgb3IgZmluaXNoZWQuIl9zIH07CkBAIC0yMjQs
NyArMjI0LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSURCVHJhbnNhY3Rpb246OmFib3J0KCkKIHZv
aWQgSURCVHJhbnNhY3Rpb246OmludGVybmFsQWJvcnQoKQogewogICAgIExPRyhJbmRleGVkREIs
ICJJREJUcmFuc2FjdGlvbjo6aW50ZXJuYWxBYm9ydCIpOwotICAgIEFTU0VSVCgmbV9kYXRhYmFz
ZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2Fu
QWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgp
KSk7CiAgICAgQVNTRVJUKCFpc0ZpbmlzaGVkT3JGaW5pc2hpbmcoKSk7CiAKICAgICBtX2RhdGFi
YXNlLT53aWxsQWJvcnRUcmFuc2FjdGlvbigqdGhpcyk7CkBAIC0yOTAsNyArMjkwLDcgQEAgdm9p
ZCBJREJUcmFuc2FjdGlvbjo6YWJvcnRJblByb2dyZXNzT3BlcmF0aW9ucyhjb25zdCBJREJFcnJv
ciYgZXJyb3IpCiB2b2lkIElEQlRyYW5zYWN0aW9uOjphYm9ydE9uU2VydmVyQW5kQ2FuY2VsUmVx
dWVzdHMoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uKQogewogICAg
IExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6YWJvcnRPblNlcnZlckFuZENhbmNlbFJl
cXVlc3RzIik7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhy
ZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JU
aHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKICAgICBBU1NFUlQobV9wZW5kaW5n
VHJhbnNhY3Rpb25PcGVyYXRpb25RdWV1ZS5pc0VtcHR5KCkpOwogCiAgICAgbV9kYXRhYmFzZS0+
Y29ubmVjdGlvblByb3h5KCkuYWJvcnRUcmFuc2FjdGlvbigqdGhpcyk7CkBAIC0zMTksMjAgKzMx
OSwyMCBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjphYm9ydE9uU2VydmVyQW5kQ2FuY2VsUmVxdWVz
dHMoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdAogCiBjb25zdCBjaGFyKiBJREJUcmFuc2Fj
dGlvbjo6YWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCZtX2RhdGFi
YXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChj
YW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFk
KCkpKTsKICAgICByZXR1cm4gIklEQlRyYW5zYWN0aW9uIjsKIH0KIAogYm9vbCBJREJUcmFuc2Fj
dGlvbjo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoJm1fZGF0YWJh
c2UtPm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSB8fCBUaHJlYWQ6Om1heUJl
R0NUaHJlYWQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVh
ZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkgfHwgVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkp
OwogICAgIHJldHVybiAhbV9jb250ZXh0U3RvcHBlZCAmJiBtX3N0YXRlICE9IEluZGV4ZWREQjo6
VHJhbnNhY3Rpb25TdGF0ZTo6RmluaXNoZWQ7CiB9CiAKIHZvaWQgSURCVHJhbnNhY3Rpb246OnN0
b3AoKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6c3RvcCAtICVzIiwg
bV9pbmZvLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBBU1NFUlQoJm1fZGF0
YWJhc2UtPm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJU
KGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJl
YWQoKSkpOwogCiAgICAgLy8gSURCRGF0YWJhc2U6OnN0b3AoKSBjYWxscyBJREJUcmFuc2FjdGlv
bjo6c3RvcCgpIGZvciBlYWNoIG9mIGl0cyBhY3RpdmUgdHJhbnNhY3Rpb25zLgogICAgIC8vIFNp
bmNlIHRoZSBvcmRlciBvZiBjYWxsaW5nIEFjdGl2ZURPTU9iamVjdDo6c3RvcCgpIGlzIHJhbmRv
bSwgd2UgbWlnaHQgYWxyZWFkeSBoYXZlIGJlZW4gc3RvcHBlZC4KQEAgLTM1NCwxMyArMzU0LDEz
IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OnN0b3AoKQogCiBib29sIElEQlRyYW5zYWN0aW9uOjpp
c0FjdGl2ZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQo
KSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2Nh
bERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKICAgICByZXR1cm4g
bV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkFjdGl2ZTsKIH0KIAogYm9v
bCBJREJUcmFuc2FjdGlvbjo6aXNGaW5pc2hlZE9yRmluaXNoaW5nKCkgY29uc3QKIHsKLSAgICBB
U1NFUlQoJm1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7
CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX2RhdGFiYXNl
LT5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgcmV0dXJuIG1fc3RhdGUgPT0gSW5kZXhlZERCOjpU
cmFuc2FjdGlvblN0YXRlOjpDb21taXR0aW5nCiAgICAgICAgIHx8IG1fc3RhdGUgPT0gSW5kZXhl
ZERCOjpUcmFuc2FjdGlvblN0YXRlOjpBYm9ydGluZwpAQCAtMzY5LDEzICszNjksMTMgQEAgYm9v
bCBJREJUcmFuc2FjdGlvbjo6aXNGaW5pc2hlZE9yRmluaXNoaW5nKCkgY29uc3QKIAogdm9pZCBJ
REJUcmFuc2FjdGlvbjo6YWRkUmVxdWVzdChJREJSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIEFT
U0VSVCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsK
KyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJhc2Ut
Pm9yaWdpblRocmVhZCgpKSk7CiAgICAgbV9vcGVuUmVxdWVzdHMuYWRkKCZyZXF1ZXN0KTsKIH0K
IAogdm9pZCBJREJUcmFuc2FjdGlvbjo6cmVtb3ZlUmVxdWVzdChJREJSZXF1ZXN0JiByZXF1ZXN0
KQogewotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6
Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFk
KG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CiAgICAgbV9vcGVuUmVxdWVzdHMucmVtb3Zl
KCZyZXF1ZXN0KTsKIAogICAgIHRyeVNjaGVkdWxlUGVuZGluZ09wZXJhdGlvblRpbWVyKCk7CkBA
IC0zODQsNyArMzg0LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6cmVtb3ZlUmVxdWVzdChJREJS
ZXF1ZXN0JiByZXF1ZXN0KQogdm9pZCBJREJUcmFuc2FjdGlvbjo6c2NoZWR1bGVPcGVyYXRpb24o
UmVmPElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24+JiYgb3BlcmF0aW9uKQogewogICAg
IEFTU0VSVCghbV90cmFuc2FjdGlvbk9wZXJhdGlvbk1hcC5jb250YWlucyhvcGVyYXRpb24tPmlk
ZW50aWZpZXIoKSkpOwotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0g
JlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRh
Rm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBhdXRvIGlkZW50
aWZpZXIgPSBvcGVyYXRpb24tPmlkZW50aWZpZXIoKTsKICAgICBtX3BlbmRpbmdUcmFuc2FjdGlv
bk9wZXJhdGlvblF1ZXVlLmFwcGVuZChvcGVyYXRpb24uY29weVJlZigpKTsKQEAgLTM5NSw3ICsz
OTUsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpzY2hlZHVsZU9wZXJhdGlvbihSZWY8SURCQ2xp
ZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbj4mJiBvcAogCiB2b2lkIElEQlRyYW5zYWN0aW9uOjp0
cnlTY2hlZHVsZVBlbmRpbmdPcGVyYXRpb25UaW1lcigpCiB7Ci0gICAgQVNTRVJUKCZtX2RhdGFi
YXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChj
YW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFk
KCkpKTsKIAogICAgIGlmICghbV9zdGFydGVkT25TZXJ2ZXIpCiAgICAgICAgIHJldHVybjsKQEAg
LTQxNSw3ICs0MTUsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjp0cnlTY2hlZHVsZVBlbmRpbmdP
cGVyYXRpb25UaW1lcigpCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpwZW5kaW5nT3BlcmF0aW9uVGlt
ZXJGaXJlZCgpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpwZW5kaW5n
T3BlcmF0aW9uVGltZXJGaXJlZCAoJXApIiwgdGhpcyk7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNl
LT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5B
Y2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkp
KTsKIAogICAgIC8vIFdlIHdhbnQgdG8gYmF0Y2ggb3BlcmF0aW9ucyB0b2dldGhlciB3aXRob3V0
IHNwaW5uaW5nIHRoZSBydW5sb29wIGZvciBwZXJmb3JtYW5jZSwKICAgICAvLyBidXQgZG9uJ3Qg
d2FudCB0byBhZmZlY3QgcmVzcG9uc2l2ZW5lc3Mgb2YgdGhlIG1haW4gdGhyZWFkLgpAQCAtNDQx
LDggKzQ0MSw4IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OnBlbmRpbmdPcGVyYXRpb25UaW1lckZp
cmVkKCkKIAogdm9pZCBJREJUcmFuc2FjdGlvbjo6b3BlcmF0aW9uQ29tcGxldGVkT25TZXJ2ZXIo
Y29uc3QgSURCUmVzdWx0RGF0YSYgZGF0YSwgSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlv
biYgb3BlcmF0aW9uKQogewotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkg
PT0gJlRocmVhZDo6Y3VycmVudCgpKTsKLSAgICBBU1NFUlQoJm9wZXJhdGlvbi5vcmlnaW5UaHJl
YWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRM
b2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKKyAgICBBU1NF
UlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG9wZXJhdGlvbi5vcmlnaW5UaHJl
YWQoKSkpOwogCiAgICAgbV9jb21wbGV0ZWRPblNlcnZlclF1ZXVlLmFwcGVuZCh7ICZvcGVyYXRp
b24sIGRhdGEgfSk7CiAKQEAgLTQ1Miw3ICs0NTIsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpv
cGVyYXRpb25Db21wbGV0ZWRPblNlcnZlcihjb25zdCBJREJSZXN1bHREYXRhJiBkYXRhLCBJREJD
bAogCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpzY2hlZHVsZUNvbXBsZXRlZE9wZXJhdGlvblRpbWVy
KCkKIHsKLSAgICBBU1NFUlQoJm1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6
OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVh
ZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgaWYgKCFtX2NvbXBsZXRlZE9w
ZXJhdGlvblRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fY29tcGxldGVkT3BlcmF0aW9uVGlt
ZXIuc3RhcnRPbmVTaG90KDBfcyk7CkBAIC00NjEsNyArNDYxLDcgQEAgdm9pZCBJREJUcmFuc2Fj
dGlvbjo6c2NoZWR1bGVDb21wbGV0ZWRPcGVyYXRpb25UaW1lcigpCiB2b2lkIElEQlRyYW5zYWN0
aW9uOjpjb21wbGV0ZWRPcGVyYXRpb25UaW1lckZpcmVkKCkKIHsKICAgICBMT0coSW5kZXhlZERC
LCAiSURCVHJhbnNhY3Rpb246OmNvbXBsZXRlZE9wZXJhdGlvblRpbWVyRmlyZWQgKCVwKSIsIHRo
aXMpOwotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6
Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFk
KG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBpZiAobV9jb21wbGV0ZWRPblNl
cnZlclF1ZXVlLmlzRW1wdHkoKSB8fCBtX2N1cnJlbnRseUNvbXBsZXRpbmdSZXF1ZXN0KQogICAg
ICAgICByZXR1cm47CkBAIC01MDUsNyArNTA1LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6Zmlu
aXNoZWREaXNwYXRjaEV2ZW50Rm9yUmVxdWVzdChJREJSZXF1ZXN0JiByZXF1ZXN0KQogdm9pZCBJ
REJUcmFuc2FjdGlvbjo6Y29tbWl0KCkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNh
Y3Rpb246OmNvbW1pdCIpOwotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkg
PT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxE
YXRhRm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CiAgICAgQVNTRVJUKCFp
c0ZpbmlzaGVkT3JGaW5pc2hpbmcoKSk7CiAKICAgICB0cmFuc2l0aW9uZWRUb0ZpbmlzaGluZyhJ
bmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkNvbW1pdHRpbmcpOwpAQCAtNTIwLDcgKzUyMCw3
IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OmNvbW1pdCgpCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpj
b21taXRPblNlcnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24p
CiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpjb21taXRPblNlcnZlciIp
OwotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3Vy
cmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1f
ZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBtX2RhdGFiYXNlLT5jb25uZWN0aW9u
UHJveHkoKS5jb21taXRUcmFuc2FjdGlvbigqdGhpcyk7CiAKQEAgLTUzNSw3ICs1MzUsNyBAQCB2
b2lkIElEQlRyYW5zYWN0aW9uOjpjb21taXRPblNlcnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9u
T3BlcmF0aW9uJiBvcGVyYXRpb24pCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpmaW5pc2hBYm9ydE9y
Q29tbWl0KCkKIHsKICAgICBBU1NFUlQobV9zdGF0ZSAhPSBJbmRleGVkREI6OlRyYW5zYWN0aW9u
U3RhdGU6OkZpbmlzaGVkKTsKLSAgICBBU1NFUlQoJm1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgp
ID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2Fs
RGF0YUZvclRocmVhZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgbV9zdGF0
ZSA9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6RmluaXNoZWQ7CiB9CkBAIC01NDMsNyAr
NTQzLDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6ZmluaXNoQWJvcnRPckNvbW1pdCgpCiB2b2lk
IElEQlRyYW5zYWN0aW9uOjpkaWRTdGFydChjb25zdCBJREJFcnJvciYgZXJyb3IpCiB7CiAgICAg
TE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkaWRTdGFydCIpOwotICAgIEFTU0VSVCgm
bV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBB
U1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdp
blRocmVhZCgpKSk7CiAKICAgICBtX2RhdGFiYXNlLT5kaWRTdGFydFRyYW5zYWN0aW9uKCp0aGlz
KTsKIApAQCAtNTYxLDcgKzU2MSw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OmRpZFN0YXJ0KGNv
bnN0IElEQkVycm9yJiBlcnJvcikKIAogdm9pZCBJREJUcmFuc2FjdGlvbjo6bm90aWZ5RGlkQWJv
cnQoY29uc3QgSURCRXJyb3ImIGVycm9yKQogewotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+b3Jp
Z2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNz
VGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CiAK
ICAgICBtX2RhdGFiYXNlLT5kaWRBYm9ydFRyYW5zYWN0aW9uKCp0aGlzKTsKICAgICBtX2lkYkVy
cm9yID0gZXJyb3I7CkBAIC01NzYsNyArNTc2LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6bm90
aWZ5RGlkQWJvcnQoY29uc3QgSURCRXJyb3ImIGVycm9yKQogdm9pZCBJREJUcmFuc2FjdGlvbjo6
ZGlkQWJvcnQoY29uc3QgSURCRXJyb3ImIGVycm9yKQogewogICAgIExPRyhJbmRleGVkREIsICJJ
REJUcmFuc2FjdGlvbjo6ZGlkQWJvcnQiKTsKLSAgICBBU1NFUlQoJm1fZGF0YWJhc2UtPm9yaWdp
blRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1Ro
cmVhZExvY2FsRGF0YUZvclRocmVhZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkpOwogCiAg
ICAgaWYgKG1fc3RhdGUgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpGaW5pc2hlZCkK
ICAgICAgICAgcmV0dXJuOwpAQCAtNTg5LDcgKzU4OSw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246
OmRpZEFib3J0KGNvbnN0IElEQkVycm9yJiBlcnJvcikKIHZvaWQgSURCVHJhbnNhY3Rpb246OmRp
ZENvbW1pdChjb25zdCBJREJFcnJvciYgZXJyb3IpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklE
QlRyYW5zYWN0aW9uOjpkaWRDb21taXQiKTsKLSAgICBBU1NFUlQoJm1fZGF0YWJhc2UtPm9yaWdp
blRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1Ro
cmVhZExvY2FsRGF0YUZvclRocmVhZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkpOwogICAg
IEFTU0VSVChtX3N0YXRlID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6Q29tbWl0dGlu
Zyk7CiAKICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpIHsKQEAgLTYwNiwyMSArNjA2LDIxIEBAIHZv
aWQgSURCVHJhbnNhY3Rpb246OmRpZENvbW1pdChjb25zdCBJREJFcnJvciYgZXJyb3IpCiB2b2lk
IElEQlRyYW5zYWN0aW9uOjpmaXJlT25Db21wbGV0ZSgpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwg
IklEQlRyYW5zYWN0aW9uOjpmaXJlT25Db21wbGV0ZSIpOwotICAgIEFTU0VSVCgmbV9kYXRhYmFz
ZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2Fu
QWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgp
KSk7CiAgICAgZW5xdWV1ZUV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNvbXBsZXRl
RXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpObykpOwog
fQogCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpmaXJlT25BYm9ydCgpCiB7CiAgICAgTE9HKEluZGV4
ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpmaXJlT25BYm9ydCIpOwotICAgIEFTU0VSVCgmbV9kYXRh
YmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQo
Y2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVh
ZCgpKSk7CiAgICAgZW5xdWV1ZUV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmFib3J0
RXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6OlllcywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pKTsK
IH0KIAogdm9pZCBJREJUcmFuc2FjdGlvbjo6ZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJiBldmVu
dCkKIHsKICAgICBBU1NFUlQobV9zdGF0ZSAhPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6
OkZpbmlzaGVkKTsKLSAgICBBU1NFUlQoJm1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpID09ICZU
aHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZv
clRocmVhZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgaWYgKCFzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkgfHwgbV9jb250ZXh0U3RvcHBlZCkKICAgICAgICAgcmV0dXJuOwpA
QCAtNjMzLDcgKzYzMyw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQoRXZl
bnQmIGV2ZW50KQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlzcGF0
Y2hFdmVudCIpOwogCi0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAm
VGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFG
b3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKICAgICBBU1NFUlQoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICBBU1NFUlQoIW1fY29udGV4dFN0b3BwZWQpOwogICAg
IEFTU0VSVChldmVudC50YXJnZXQoKSA9PSB0aGlzKTsKQEAgLTY2NCw3ICs2NjQsNyBAQCBSZWY8
SURCT2JqZWN0U3RvcmU+IElEQlRyYW5zYWN0aW9uOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJ
REJPYmplY3RTdG9yZUluZm8mCiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpj
cmVhdGVPYmplY3RTdG9yZSIpOwogICAgIEFTU0VSVChpc1ZlcnNpb25DaGFuZ2UoKSk7CiAgICAg
QVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNl
LT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5B
Y2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkp
KTsKIAogICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9yZWZlcmVuY2VkT2JqZWN0U3RvcmVMb2Nr
KTsKIApAQCAtNjg1LDcgKzY4NSw3IEBAIFJlZjxJREJPYmplY3RTdG9yZT4gSURCVHJhbnNhY3Rp
b246OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYKIHZvaWQgSURC
VHJhbnNhY3Rpb246OmNyZWF0ZU9iamVjdFN0b3JlT25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2Fj
dGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIGluZm8p
CiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpjcmVhdGVPYmplY3RTdG9y
ZU9uU2VydmVyIik7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAm
VGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFG
b3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKICAgICBBU1NFUlQoaXNWZXJz
aW9uQ2hhbmdlKCkpOwogCiAgICAgbV9kYXRhYmFzZS0+Y29ubmVjdGlvblByb3h5KCkuY3JlYXRl
T2JqZWN0U3RvcmUob3BlcmF0aW9uLCBpbmZvKTsKQEAgLTY5NCw3ICs2OTQsNyBAQCB2b2lkIElE
QlRyYW5zYWN0aW9uOjpjcmVhdGVPYmplY3RTdG9yZU9uU2VydmVyKElEQkNsaWVudDo6VHJhbnNh
Y3Rpb25PcGVyYXRpb24mCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRDcmVhdGVPYmplY3RTdG9y
ZU9uU2VydmVyKGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCiB7CiAgICAgTE9HKElu
ZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkaWRDcmVhdGVPYmplY3RTdG9yZU9uU2VydmVyIik7
Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJy
ZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9k
YXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdERhdGEs
IHJlc3VsdERhdGEudHlwZSgpID09IElEQlJlc3VsdFR5cGU6OkNyZWF0ZU9iamVjdFN0b3JlU3Vj
Y2VzcyB8fCByZXN1bHREYXRhLnR5cGUoKSA9PSBJREJSZXN1bHRUeXBlOjpFcnJvcik7CiB9CiAK
QEAgLTcwNiw3ICs3MDYsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpyZW5hbWVPYmplY3RTdG9y
ZShJREJPYmplY3RTdG9yZSYgb2JqZWN0U3RvcmUsIGNvbnN0IFN0cmluZwogCiAgICAgQVNTRVJU
KGlzVmVyc2lvbkNoYW5nZSgpKTsKICAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KTsKLSAgICBBU1NFUlQoJm1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1
cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZCht
X2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgQVNTRVJUKG1fcmVmZXJlbmNlZE9i
amVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZS5pbmZvKCkubmFtZSgpKSk7CiAgICAgQVNT
RVJUKCFtX3JlZmVyZW5jZWRPYmplY3RTdG9yZXMuY29udGFpbnMobmV3TmFtZSkpOwpAQCAtNzI3
LDcgKzcyNyw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OnJlbmFtZU9iamVjdFN0b3JlKElEQk9i
amVjdFN0b3JlJiBvYmplY3RTdG9yZSwgY29uc3QgU3RyaW5nCiB2b2lkIElEQlRyYW5zYWN0aW9u
OjpyZW5hbWVPYmplY3RTdG9yZU9uU2VydmVyKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRp
b24mIG9wZXJhdGlvbiwgY29uc3QgdWludDY0X3QmIG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiBuZXdOYW1lKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlv
bjo6cmVuYW1lT2JqZWN0U3RvcmVPblNlcnZlciIpOwotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+
b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNj
ZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7
CiAgICAgQVNTRVJUKGlzVmVyc2lvbkNoYW5nZSgpKTsKIAogICAgIG1fZGF0YWJhc2UtPmNvbm5l
Y3Rpb25Qcm94eSgpLnJlbmFtZU9iamVjdFN0b3JlKG9wZXJhdGlvbiwgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyLCBuZXdOYW1lKTsKQEAgLTczNiw3ICs3MzYsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9u
OjpyZW5hbWVPYmplY3RTdG9yZU9uU2VydmVyKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRp
b24mCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRSZW5hbWVPYmplY3RTdG9yZU9uU2VydmVyKGNv
bnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklE
QlRyYW5zYWN0aW9uOjpkaWRSZW5hbWVPYmplY3RTdG9yZU9uU2VydmVyIik7Ci0gICAgQVNTRVJU
KCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAg
IEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+b3Jp
Z2luVGhyZWFkKCkpKTsKICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdERhdGEsIHJlc3VsdERhdGEu
dHlwZSgpID09IElEQlJlc3VsdFR5cGU6OlJlbmFtZU9iamVjdFN0b3JlU3VjY2VzcyB8fCByZXN1
bHREYXRhLnR5cGUoKSA9PSBJREJSZXN1bHRUeXBlOjpFcnJvcik7CiB9CiAKQEAgLTc0NCw3ICs3
NDQsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SURCSW5kZXg+IElEQlRyYW5zYWN0aW9uOjpjcmVhdGVJ
bmRleChJREJPYmplY3RTdG9yZSYgb2JqZWN0U3RvcgogewogICAgIExPRyhJbmRleGVkREIsICJJ
REJUcmFuc2FjdGlvbjo6Y3JlYXRlSW5kZXgiKTsKICAgICBBU1NFUlQoaXNWZXJzaW9uQ2hhbmdl
KCkpOwotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6
Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFk
KG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC03NjIsNyArNzYyLDcgQEAg
c3RkOjp1bmlxdWVfcHRyPElEQkluZGV4PiBJREJUcmFuc2FjdGlvbjo6Y3JlYXRlSW5kZXgoSURC
T2JqZWN0U3RvcmUmIG9iamVjdFN0b3IKIHZvaWQgSURCVHJhbnNhY3Rpb246OmNyZWF0ZUluZGV4
T25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBjb25z
dCBJREJJbmRleEluZm8mIGluZm8pCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0
aW9uOjpjcmVhdGVJbmRleE9uU2VydmVyIik7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmln
aW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NU
aHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKICAg
ICBBU1NFUlQoaXNWZXJzaW9uQ2hhbmdlKCkpOwogCiAgICAgbV9kYXRhYmFzZS0+Y29ubmVjdGlv
blByb3h5KCkuY3JlYXRlSW5kZXgob3BlcmF0aW9uLCBpbmZvKTsKQEAgLTc3MSw3ICs3NzEsNyBA
QCB2b2lkIElEQlRyYW5zYWN0aW9uOjpjcmVhdGVJbmRleE9uU2VydmVyKElEQkNsaWVudDo6VHJh
bnNhY3Rpb25PcGVyYXRpb24mIG9wZXJhdAogdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGlkQ3JlYXRl
SW5kZXhPblNlcnZlcihjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQogewogICAgIExP
RyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlkQ3JlYXRlSW5kZXhPblNlcnZlciIpOwot
ICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVu
dCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fZGF0
YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBpZiAocmVzdWx0RGF0YS50eXBlKCkgPT0g
SURCUmVzdWx0VHlwZTo6Q3JlYXRlSW5kZXhTdWNjZXNzKQogICAgICAgICByZXR1cm47CkBAIC03
OTMsNyArNzkzLDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6cmVuYW1lSW5kZXgoSURCSW5kZXgm
IGluZGV4LCBjb25zdCBTdHJpbmcmIG5ld05hbWUpCiAKICAgICBBU1NFUlQoaXNWZXJzaW9uQ2hh
bmdlKCkpOwogICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAgIEFTU0VS
VCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAg
ICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9y
aWdpblRocmVhZCgpKSk7CiAKICAgICBBU1NFUlQobV9yZWZlcmVuY2VkT2JqZWN0U3RvcmVzLmNv
bnRhaW5zKGluZGV4Lm9iamVjdFN0b3JlKCkuaW5mbygpLm5hbWUoKSkpOwogICAgIEFTU0VSVCht
X3JlZmVyZW5jZWRPYmplY3RTdG9yZXMuZ2V0KGluZGV4Lm9iamVjdFN0b3JlKCkuaW5mbygpLm5h
bWUoKSkgPT0gJmluZGV4Lm9iamVjdFN0b3JlKCkpOwpAQCAtODE0LDcgKzgxNCw3IEBAIHZvaWQg
SURCVHJhbnNhY3Rpb246OnJlbmFtZUluZGV4KElEQkluZGV4JiBpbmRleCwgY29uc3QgU3RyaW5n
JiBuZXdOYW1lKQogdm9pZCBJREJUcmFuc2FjdGlvbjo6cmVuYW1lSW5kZXhPblNlcnZlcihJREJD
bGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24sIGNvbnN0IHVpbnQ2NF90JiBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IHVpbnQ2NF90JiBpbmRleElkZW50aWZpZXIsIGNv
bnN0IFN0cmluZyYgbmV3TmFtZSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rp
b246OnJlbmFtZUluZGV4T25TZXJ2ZXIiKTsKLSAgICBBU1NFUlQoJm1fZGF0YWJhc2UtPm9yaWdp
blRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1Ro
cmVhZExvY2FsRGF0YUZvclRocmVhZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkpOwogICAg
IEFTU0VSVChpc1ZlcnNpb25DaGFuZ2UoKSk7CiAKICAgICBtX2RhdGFiYXNlLT5jb25uZWN0aW9u
UHJveHkoKS5yZW5hbWVJbmRleChvcGVyYXRpb24sIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5k
ZXhJZGVudGlmaWVyLCBuZXdOYW1lKTsKQEAgLTgyMywxNCArODIzLDE0IEBAIHZvaWQgSURCVHJh
bnNhY3Rpb246OnJlbmFtZUluZGV4T25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJh
dGlvbiYgb3BlcmF0CiB2b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRSZW5hbWVJbmRleE9uU2VydmVy
KGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwg
IklEQlRyYW5zYWN0aW9uOjpkaWRSZW5hbWVJbmRleE9uU2VydmVyIik7Ci0gICAgQVNTRVJUKCZt
X2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFT
U0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2lu
VGhyZWFkKCkpKTsKICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdERhdGEsIHJlc3VsdERhdGEudHlw
ZSgpID09IElEQlJlc3VsdFR5cGU6OlJlbmFtZUluZGV4U3VjY2VzcyB8fCByZXN1bHREYXRhLnR5
cGUoKSA9PSBJREJSZXN1bHRUeXBlOjpFcnJvcik7CiB9CiAKIFJlZjxJREJSZXF1ZXN0PiBJREJU
cmFuc2FjdGlvbjo6cmVxdWVzdE9wZW5DdXJzb3IoSlNHbG9iYWxPYmplY3QmIHN0YXRlLCBJREJP
YmplY3RTdG9yZSYgb2JqZWN0U3RvcmUsIGNvbnN0IElEQkN1cnNvckluZm8mIGluZm8pCiB7CiAg
ICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0T3BlbkN1cnNvciIpOwot
ICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVu
dCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fZGF0
YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBpZiAoaW5mby5jdXJzb3JUeXBlKCkgPT0g
SW5kZXhlZERCOjpDdXJzb3JUeXBlOjpLZXlPbmx5KQogICAgICAgICByZXR1cm4gZG9SZXF1ZXN0
T3BlbkN1cnNvcihzdGF0ZSwgSURCQ3Vyc29yOjpjcmVhdGUob2JqZWN0U3RvcmUsIGluZm8pKTsK
QEAgLTg0MSw3ICs4NDEsNyBAQCBSZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVl
c3RPcGVuQ3Vyc29yKEpTR2xvYmFsT2JqZWN0JiBzdGF0ZSwgSURCT2JqZQogUmVmPElEQlJlcXVl
c3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0T3BlbkN1cnNvcihKU0dsb2JhbE9iamVjdCYgc3Rh
dGUsIElEQkluZGV4JiBpbmRleCwgY29uc3QgSURCQ3Vyc29ySW5mbyYgaW5mbykKIHsKICAgICBM
T0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OnJlcXVlc3RPcGVuQ3Vyc29yIik7Ci0gICAg
QVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkp
OworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFz
ZS0+b3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIGlmIChpbmZvLmN1cnNvclR5cGUoKSA9PSBJbmRl
eGVkREI6OkN1cnNvclR5cGU6OktleU9ubHkpCiAgICAgICAgIHJldHVybiBkb1JlcXVlc3RPcGVu
Q3Vyc29yKHN0YXRlLCBJREJDdXJzb3I6OmNyZWF0ZShpbmRleCwgaW5mbykpOwpAQCAtODUyLDcg
Kzg1Miw3IEBAIFJlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdE9wZW5DdXJz
b3IoSlNHbG9iYWxPYmplY3QmIHN0YXRlLCBJREJJbmRlCiBSZWY8SURCUmVxdWVzdD4gSURCVHJh
bnNhY3Rpb246OmRvUmVxdWVzdE9wZW5DdXJzb3IoSlNHbG9iYWxPYmplY3QmIHN0YXRlLCBSZWY8
SURCQ3Vyc29yPiYmIGN1cnNvcikKIHsKICAgICBBU1NFUlQoaXNBY3RpdmUoKSk7Ci0gICAgQVNT
RVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOwor
ICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+
b3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIEFTU0VSVF9VTlVTRUQoc3RhdGUsIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSA9PSBzY3JpcHRFeGVjdXRpb25Db250ZXh0RnJvbUV4ZWNTdGF0ZSgmc3Rh
dGUpKTsKIApAQCAtODcyLDcgKzg3Miw3IEBAIFJlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlv
bjo6ZG9SZXF1ZXN0T3BlbkN1cnNvcihKU0dsb2JhbE9iamVjdCYgc3RhdGUsIFJlZjxJCiB2b2lk
IElEQlRyYW5zYWN0aW9uOjpvcGVuQ3Vyc29yT25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlv
bk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBjb25zdCBJREJDdXJzb3JJbmZvJiBpbmZvKQogewogICAg
IExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6b3BlbkN1cnNvck9uU2VydmVyIik7Ci0g
ICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50
KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRh
YmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIG1fZGF0YWJhc2UtPmNvbm5lY3Rpb25Qcm94
eSgpLm9wZW5DdXJzb3Iob3BlcmF0aW9uLCBpbmZvKTsKIH0KQEAgLTg4MCw3ICs4ODAsNyBAQCB2
b2lkIElEQlRyYW5zYWN0aW9uOjpvcGVuQ3Vyc29yT25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2Fj
dGlvbk9wZXJhdGlvbiYgb3BlcmF0aQogdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGlkT3BlbkN1cnNv
ck9uU2VydmVyKElEQlJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3Vs
dERhdGEpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkaWRPcGVuQ3Vy
c29yT25TZXJ2ZXIiKTsKLSAgICBBU1NFUlQoJm1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpID09
ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0
YUZvclRocmVhZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgY29tcGxldGVD
dXJzb3JSZXF1ZXN0KHJlcXVlc3QsIHJlc3VsdERhdGEpOwogfQpAQCAtODkwLDcgKzg5MCw3IEBA
IHZvaWQgSURCVHJhbnNhY3Rpb246Oml0ZXJhdGVDdXJzb3IoSURCQ3Vyc29yJiBjdXJzb3IsIGNv
bnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhCiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0
aW9uOjppdGVyYXRlQ3Vyc29yIik7CiAgICAgQVNTRVJUKGlzQWN0aXZlKCkpOwogICAgIEFTU0VS
VChjdXJzb3IucmVxdWVzdCgpKTsKLSAgICBBU1NFUlQoJm1fZGF0YWJhc2UtPm9yaWdpblRocmVh
ZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExv
Y2FsRGF0YUZvclRocmVhZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgYWRk
UmVxdWVzdCgqY3Vyc29yLnJlcXVlc3QoKSk7CiAKQEAgLTkwNiw3ICs5MDYsNyBAQCB2b2lkIElE
QlRyYW5zYWN0aW9uOjppdGVyYXRlQ3Vyc29yKElEQkN1cnNvciYgY3Vyc29yLCBjb25zdCBJREJJ
dGVyYXRlQ3Vyc29yRGF0YQogdm9pZCBJREJUcmFuc2FjdGlvbjo6aXRlcmF0ZUN1cnNvck9uU2Vy
dmVyKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mIG9wZXJhdGlvbiwgY29uc3QgSURC
SXRlcmF0ZUN1cnNvckRhdGEmIGRhdGEpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5z
YWN0aW9uOjppdGVyYXRlQ3Vyc29yT25TZXJ2ZXIiKTsKLSAgICBBU1NFUlQoJm1fZGF0YWJhc2Ut
Pm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFj
Y2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkp
OwogCiAgICAgbV9kYXRhYmFzZS0+Y29ubmVjdGlvblByb3h5KCkuaXRlcmF0ZUN1cnNvcihvcGVy
YXRpb24sIGRhdGEpOwogfQpAQCAtOTE0LDcgKzkxNCw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246
Oml0ZXJhdGVDdXJzb3JPblNlcnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiBv
cGVyCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRJdGVyYXRlQ3Vyc29yT25TZXJ2ZXIoSURCUmVx
dWVzdCYgcmVxdWVzdCwgY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKIHsKICAgICBM
T0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRpZEl0ZXJhdGVDdXJzb3JPblNlcnZlciIp
OwotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3Vy
cmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1f
ZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBjb21wbGV0ZUN1cnNvclJlcXVlc3Qo
cmVxdWVzdCwgcmVzdWx0RGF0YSk7CiB9CkBAIC05MjMsNyArOTIzLDcgQEAgUmVmPElEQlJlcXVl
c3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0R2V0QWxsT2JqZWN0U3RvcmVSZWNvcmRzKEpTQzo6
SlNHbG9iYWxPYmoKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OnJlcXVl
c3RHZXRBbGxPYmplY3RTdG9yZVJlY29yZHMiKTsKICAgICBBU1NFUlQoaXNBY3RpdmUoKSk7Ci0g
ICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50
KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRh
YmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIEFTU0VSVF9VTlVTRUQoc3RhdGUsIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSA9PSBzY3JpcHRFeGVjdXRpb25Db250ZXh0RnJvbUV4ZWNTdGF0
ZSgmc3RhdGUpKTsKIApAQCAtOTQ2LDcgKzk0Niw3IEBAIFJlZjxJREJSZXF1ZXN0PiBJREJUcmFu
c2FjdGlvbjo6cmVxdWVzdEdldEFsbEluZGV4UmVjb3JkcyhKU0M6OkpTR2xvYmFsT2JqZWN0JiBz
CiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0R2V0QWxsSW5k
ZXhSZWNvcmRzIik7CiAgICAgQVNTRVJUKGlzQWN0aXZlKCkpOwotICAgIEFTU0VSVCgmbV9kYXRh
YmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQo
Y2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVh
ZCgpKSk7CiAKICAgICBBU1NFUlRfVU5VU0VEKHN0YXRlLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkgPT0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dEZyb21FeGVjU3RhdGUoJnN0YXRlKSk7CiAKQEAg
LTk2OCw3ICs5NjgsNyBAQCBSZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVlc3RH
ZXRBbGxJbmRleFJlY29yZHMoSlNDOjpKU0dsb2JhbE9iamVjdCYgcwogdm9pZCBJREJUcmFuc2Fj
dGlvbjo6Z2V0QWxsUmVjb3Jkc09uU2VydmVyKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRp
b24mIG9wZXJhdGlvbiwgY29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEmIGdldEFsbFJlY29yZHNE
YXRhKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6Z2V0QWxsUmVjb3Jk
c09uU2VydmVyIik7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAm
VGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFG
b3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIG1fZGF0YWJhc2Ut
PmNvbm5lY3Rpb25Qcm94eSgpLmdldEFsbFJlY29yZHMob3BlcmF0aW9uLCBnZXRBbGxSZWNvcmRz
RGF0YSk7CiB9CkBAIC05NzYsNyArOTc2LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6Z2V0QWxs
UmVjb3Jkc09uU2VydmVyKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mIG9wZXIKIHZv
aWQgSURCVHJhbnNhY3Rpb246OmRpZEdldEFsbFJlY29yZHNPblNlcnZlcihJREJSZXF1ZXN0JiBy
ZXF1ZXN0LCBjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQogewogICAgIExPRyhJbmRl
eGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlkR2V0QWxsUmVjb3Jkc09uU2VydmVyIik7Ci0gICAg
QVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkp
OworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFz
ZS0+b3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIGlmIChyZXN1bHREYXRhLnR5cGUoKSA9PSBJREJS
ZXN1bHRUeXBlOjpFcnJvcikgewogICAgICAgICBjb21wbGV0ZU5vbmN1cnNvclJlcXVlc3QocmVx
dWVzdCwgcmVzdWx0RGF0YSk7CkBAIC0xMDAzLDcgKzEwMDMsNyBAQCBSZWY8SURCUmVxdWVzdD4g
SURCVHJhbnNhY3Rpb246OnJlcXVlc3RHZXRSZWNvcmQoSlNHbG9iYWxPYmplY3QmIHN0YXRlLCBJ
REJPYmplYwogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdldFJl
Y29yZCIpOwogICAgIEFTU0VSVChpc0FjdGl2ZSgpKTsKICAgICBBU1NFUlQoIWdldFJlY29yZERh
dGEua2V5UmFuZ2VEYXRhLmlzTnVsbCk7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5U
aHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJl
YWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKIAogICAg
IEFTU0VSVF9VTlVTRUQoc3RhdGUsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSBzY3JpcHRF
eGVjdXRpb25Db250ZXh0RnJvbUV4ZWNTdGF0ZSgmc3RhdGUpKTsKIApAQCAtMTAyNSw3ICsxMDI1
LDcgQEAgUmVmPElEQlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0R2V0UmVjb3JkKEpT
R2xvYmFsT2JqZWN0JiBzdGF0ZSwgSURCT2JqZWMKIFJlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2Fj
dGlvbjo6cmVxdWVzdEdldFZhbHVlKEpTR2xvYmFsT2JqZWN0JiBzdGF0ZSwgSURCSW5kZXgmIGlu
ZGV4LCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlKQogewogICAgIExPRyhJbmRleGVkREIs
ICJJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdldFZhbHVlIik7Ci0gICAgQVNTRVJUKCZtX2RhdGFi
YXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChj
YW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFk
KCkpKTsKIAogICAgIHJldHVybiByZXF1ZXN0SW5kZXhSZWNvcmQoc3RhdGUsIGluZGV4LCBJbmRl
eGVkREI6OkluZGV4UmVjb3JkVHlwZTo6VmFsdWUsIHJhbmdlKTsKIH0KQEAgLTEwMzMsNyArMTAz
Myw3IEBAIFJlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdldFZhbHVlKEpT
R2xvYmFsT2JqZWN0JiBzdGF0ZSwgSURCSW5kZXgmCiBSZWY8SURCUmVxdWVzdD4gSURCVHJhbnNh
Y3Rpb246OnJlcXVlc3RHZXRLZXkoSlNHbG9iYWxPYmplY3QmIHN0YXRlLCBJREJJbmRleCYgaW5k
ZXgsIGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2UpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwg
IklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0R2V0VmFsdWUiKTsKLSAgICBBU1NFUlQoJm1fZGF0YWJh
c2UtPm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNh
bkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQo
KSkpOwogCiAgICAgcmV0dXJuIHJlcXVlc3RJbmRleFJlY29yZChzdGF0ZSwgaW5kZXgsIEluZGV4
ZWREQjo6SW5kZXhSZWNvcmRUeXBlOjpLZXksIHJhbmdlKTsKIH0KQEAgLTEwNDMsNyArMTA0Myw3
IEBAIFJlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEluZGV4UmVjb3JkKEpT
R2xvYmFsT2JqZWN0JiBzdGF0ZSwgSURCSW5kCiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5z
YWN0aW9uOjpyZXF1ZXN0R2V0VmFsdWUiKTsKICAgICBBU1NFUlQoaXNBY3RpdmUoKSk7CiAgICAg
QVNTRVJUKCFyYW5nZS5pc051bGwpOwotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhy
ZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFk
TG9jYWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBB
U1NFUlRfVU5VU0VEKHN0YXRlLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0gc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEZyb21FeGVjU3RhdGUoJnN0YXRlKSk7CiAKQEAgLTEwNjUsNyArMTA2NSw3
IEBAIFJlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEluZGV4UmVjb3JkKEpT
R2xvYmFsT2JqZWN0JiBzdGF0ZSwgSURCSW5kCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpnZXRSZWNv
cmRPblNlcnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24sIGNv
bnN0IElEQkdldFJlY29yZERhdGEmIGdldFJlY29yZERhdGEpCiB7CiAgICAgTE9HKEluZGV4ZWRE
QiwgIklEQlRyYW5zYWN0aW9uOjpnZXRSZWNvcmRPblNlcnZlciIpOwotICAgIEFTU0VSVCgmbV9k
YXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NF
UlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRo
cmVhZCgpKSk7CiAKICAgICBtX2RhdGFiYXNlLT5jb25uZWN0aW9uUHJveHkoKS5nZXRSZWNvcmQo
b3BlcmF0aW9uLCBnZXRSZWNvcmREYXRhKTsKIH0KQEAgLTEwNzMsNyArMTA3Myw3IEBAIHZvaWQg
SURCVHJhbnNhY3Rpb246OmdldFJlY29yZE9uU2VydmVyKElEQkNsaWVudDo6VHJhbnNhY3Rpb25P
cGVyYXRpb24mIG9wZXJhdGlvCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRHZXRSZWNvcmRPblNl
cnZlcihJREJSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRh
KQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlkR2V0UmVjb3JkT25T
ZXJ2ZXIiKTsKLSAgICBBU1NFUlQoJm1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpID09ICZUaHJl
YWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRo
cmVhZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgaWYgKHJlc3VsdERhdGEu
dHlwZSgpID09IElEQlJlc3VsdFR5cGU6OkVycm9yKSB7CiAgICAgICAgIGNvbXBsZXRlTm9uY3Vy
c29yUmVxdWVzdChyZXF1ZXN0LCByZXN1bHREYXRhKTsKQEAgLTExMDgsNyArMTEwOCw3IEBAIFJl
ZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdENvdW50KEpTR2xvYmFsT2JqZWN0
JiBzdGF0ZSwgSURCT2JqZWN0U3RvCiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9u
OjpyZXF1ZXN0Q291bnQgKElEQk9iamVjdFN0b3JlKSIpOwogICAgIEFTU0VSVChpc0FjdGl2ZSgp
KTsKICAgICBBU1NFUlQoIXJhbmdlLmlzTnVsbCk7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5v
cmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nl
c3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsK
IAogICAgIEFTU0VSVF9VTlVTRUQoc3RhdGUsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0RnJvbUV4ZWNTdGF0ZSgmc3RhdGUpKTsKIApAQCAtMTEzMCw3
ICsxMTMwLDcgQEAgUmVmPElEQlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0Q291bnQo
SlNHbG9iYWxPYmplY3QmIHN0YXRlLCBJREJJbmRleCYgaW4KICAgICBMT0coSW5kZXhlZERCLCAi
SURCVHJhbnNhY3Rpb246OnJlcXVlc3RDb3VudCAoSURCSW5kZXgpIik7CiAgICAgQVNTRVJUKGlz
QWN0aXZlKCkpOwogICAgIEFTU0VSVCghcmFuZ2UuaXNOdWxsKTsKLSAgICBBU1NFUlQoJm1fZGF0
YWJhc2UtPm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJU
KGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJl
YWQoKSkpOwogCiAgICAgQVNTRVJUX1VOVVNFRChzdGF0ZSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpID09IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHRGcm9tRXhlY1N0YXRlKCZzdGF0ZSkpOwogCkBA
IC0xMTUwLDcgKzExNTAsNyBAQCBSZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVl
c3RDb3VudChKU0dsb2JhbE9iamVjdCYgc3RhdGUsIElEQkluZGV4JiBpbgogdm9pZCBJREJUcmFu
c2FjdGlvbjo6Z2V0Q291bnRPblNlcnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9u
JiBvcGVyYXRpb24sIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2UpCiB7CiAgICAgTE9H
KEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpnZXRDb3VudE9uU2VydmVyIik7Ci0gICAgQVNT
RVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOwor
ICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+
b3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIG1fZGF0YWJhc2UtPmNvbm5lY3Rpb25Qcm94eSgpLmdl
dENvdW50KG9wZXJhdGlvbiwga2V5UmFuZ2UpOwogfQpAQCAtMTE1OCw3ICsxMTU4LDcgQEAgdm9p
ZCBJREJUcmFuc2FjdGlvbjo6Z2V0Q291bnRPblNlcnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9u
T3BlcmF0aW9uJiBvcGVyYXRpb24KIHZvaWQgSURCVHJhbnNhY3Rpb246OmRpZEdldENvdW50T25T
ZXJ2ZXIoSURCUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0
YSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRpZEdldENvdW50T25T
ZXJ2ZXIiKTsKLSAgICBBU1NFUlQoJm1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpID09ICZUaHJl
YWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRo
cmVhZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgcmVxdWVzdC5zZXRSZXN1
bHQocmVzdWx0RGF0YS5yZXN1bHRJbnRlZ2VyKCkpOwogICAgIGNvbXBsZXRlTm9uY3Vyc29yUmVx
dWVzdChyZXF1ZXN0LCByZXN1bHREYXRhKTsKQEAgLTExNjksNyArMTE2OSw3IEBAIFJlZjxJREJS
ZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdERlbGV0ZVJlY29yZChKU0dsb2JhbE9iamVj
dCYgc3RhdGUsIElEQk9iCiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpyZXF1
ZXN0RGVsZXRlUmVjb3JkIik7CiAgICAgQVNTRVJUKGlzQWN0aXZlKCkpOwogICAgIEFTU0VSVCgh
cmFuZ2UuaXNOdWxsKTsKLSAgICBBU1NFUlQoJm1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpID09
ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0
YUZvclRocmVhZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgQVNTRVJUX1VO
VVNFRChzdGF0ZSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRGcm9tRXhlY1N0YXRlKCZzdGF0ZSkpOwogCkBAIC0xMTg4LDcgKzExODgsNyBAQCBSZWY8
SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVlc3REZWxldGVSZWNvcmQoSlNHbG9iYWxP
YmplY3QmIHN0YXRlLCBJREJPYgogdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGVsZXRlUmVjb3JkT25T
ZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBjb25zdCBJ
REJLZXlSYW5nZURhdGEmIGtleVJhbmdlKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFu
c2FjdGlvbjo6ZGVsZXRlUmVjb3JkT25TZXJ2ZXIiKTsKLSAgICBBU1NFUlQoJm1fZGF0YWJhc2Ut
Pm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFj
Y2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkp
OwogCiAgICAgbV9kYXRhYmFzZS0+Y29ubmVjdGlvblByb3h5KCkuZGVsZXRlUmVjb3JkKG9wZXJh
dGlvbiwga2V5UmFuZ2UpOwogfQpAQCAtMTE5Niw3ICsxMTk2LDcgQEAgdm9pZCBJREJUcmFuc2Fj
dGlvbjo6ZGVsZXRlUmVjb3JkT25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlv
biYgb3BlcmEKIHZvaWQgSURCVHJhbnNhY3Rpb246OmRpZERlbGV0ZVJlY29yZE9uU2VydmVyKElE
QlJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCiB7CiAg
ICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkaWREZWxldGVSZWNvcmRPblNlcnZl
ciIpOwotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6
Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFk
KG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CiAKICAgICByZXF1ZXN0LnNldFJlc3VsdFRv
VW5kZWZpbmVkKCk7CiAgICAgY29tcGxldGVOb25jdXJzb3JSZXF1ZXN0KHJlcXVlc3QsIHJlc3Vs
dERhdGEpOwpAQCAtMTIwNiw3ICsxMjA2LDcgQEAgUmVmPElEQlJlcXVlc3Q+IElEQlRyYW5zYWN0
aW9uOjpyZXF1ZXN0Q2xlYXJPYmplY3RTdG9yZShKU0dsb2JhbE9iamVjdCYgc3RhdGUsIEkKIHsK
ICAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OnJlcXVlc3RDbGVhck9iamVjdFN0
b3JlIik7CiAgICAgQVNTRVJUKGlzQWN0aXZlKCkpOwotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+
b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNj
ZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7
CiAKICAgICBBU1NFUlRfVU5VU0VEKHN0YXRlLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0g
c2NyaXB0RXhlY3V0aW9uQ29udGV4dEZyb21FeGVjU3RhdGUoJnN0YXRlKSk7CiAKQEAgLTEyMjgs
NyArMTIyOCw3IEBAIFJlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdENsZWFy
T2JqZWN0U3RvcmUoSlNHbG9iYWxPYmplY3QmIHN0YXRlLCBJCiB2b2lkIElEQlRyYW5zYWN0aW9u
OjpjbGVhck9iamVjdFN0b3JlT25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlv
biYgb3BlcmF0aW9uLCBjb25zdCB1aW50NjRfdCYgb2JqZWN0U3RvcmVJZGVudGlmaWVyKQogewog
ICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6Y2xlYXJPYmplY3RTdG9yZU9uU2Vy
dmVyIik7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFk
OjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJl
YWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIG1fZGF0YWJhc2UtPmNvbm5l
Y3Rpb25Qcm94eSgpLmNsZWFyT2JqZWN0U3RvcmUob3BlcmF0aW9uLCBvYmplY3RTdG9yZUlkZW50
aWZpZXIpOwogfQpAQCAtMTIzNiw3ICsxMjM2LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6Y2xl
YXJPYmplY3RTdG9yZU9uU2VydmVyKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mIG8K
IHZvaWQgSURCVHJhbnNhY3Rpb246OmRpZENsZWFyT2JqZWN0U3RvcmVPblNlcnZlcihJREJSZXF1
ZXN0JiByZXF1ZXN0LCBjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQogewogICAgIExP
RyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlkQ2xlYXJPYmplY3RTdG9yZU9uU2VydmVy
Iik7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpj
dXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQo
bV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKIAogICAgIHJlcXVlc3Quc2V0UmVzdWx0VG9V
bmRlZmluZWQoKTsKICAgICBjb21wbGV0ZU5vbmN1cnNvclJlcXVlc3QocmVxdWVzdCwgcmVzdWx0
RGF0YSk7CkBAIC0xMjQ4LDcgKzEyNDgsNyBAQCBSZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rp
b246OnJlcXVlc3RQdXRPckFkZChKU0dsb2JhbE9iamVjdCYgc3RhdGUsIElEQk9iamVjdAogICAg
IEFTU0VSVChpc0FjdGl2ZSgpKTsKICAgICBBU1NFUlQoIWlzUmVhZE9ubHkoKSk7CiAgICAgQVNT
RVJUKG9iamVjdFN0b3JlLmluZm8oKS5hdXRvSW5jcmVtZW50KCkgfHwga2V5KTsKLSAgICBBU1NF
UlQoJm1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7Cisg
ICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX2RhdGFiYXNlLT5v
cmlnaW5UaHJlYWQoKSkpOwogCiAgICAgQVNTRVJUX1VOVVNFRChzdGF0ZSwgc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpID09IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHRGcm9tRXhlY1N0YXRlKCZzdGF0
ZSkpOwogCkBAIC0xMjY4LDcgKzEyNjgsNyBAQCBSZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rp
b246OnJlcXVlc3RQdXRPckFkZChKU0dsb2JhbE9iamVjdCYgc3RhdGUsIElEQk9iamVjdAogdm9p
ZCBJREJUcmFuc2FjdGlvbjo6cHV0T3JBZGRPblNlcnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9u
T3BlcmF0aW9uJiBvcGVyYXRpb24sIFJlZlB0cjxJREJLZXk+IGtleSwgUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIGNvbnN0IEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3Jp
dGVNb2RlJiBvdmVyd3JpdGVNb2RlKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2Fj
dGlvbjo6cHV0T3JBZGRPblNlcnZlciIpOwotICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0g
JlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRh
Rm9yVGhyZWFkKG9yaWdpblRocmVhZCgpKSk7CiAgICAgQVNTRVJUKCFpc1JlYWRPbmx5KCkpOwog
ICAgIEFTU0VSVCh2YWx1ZSk7CiAKQEAgLTEzMDEsNyArMTMwMSw3IEBAIHZvaWQgSURCVHJhbnNh
Y3Rpb246OnB1dE9yQWRkT25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYg
b3BlcmF0aW9uCiAgICAgb3BlcmF0aW9uLnNldE5leHRSZXF1ZXN0Q2FuR29Ub1NlcnZlcihmYWxz
ZSk7CiAKICAgICB2YWx1ZS0+d3JpdGVCbG9ic1RvRGlza0ZvckluZGV4ZWREQihbcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpLCB0aGlzLCBwcm90ZWN0ZWRPcGVyYXRpb24gPSBSZWY8SURC
Q2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbj4ob3BlcmF0aW9uKSwga2V5RGF0YSA9IElEQktl
eURhdGEoa2V5LmdldCgpKS5pc29sYXRlZENvcHkoKSwgb3ZlcndyaXRlTW9kZV0oSURCVmFsdWUm
JiBpZGJWYWx1ZSkgbXV0YWJsZSB7Ci0gICAgICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0g
JlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICAgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2Fs
RGF0YUZvclRocmVhZChvcmlnaW5UaHJlYWQoKSkpOwogICAgICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwogICAgICAgICBpZiAoaWRiVmFsdWUuZGF0YSgpLmRhdGEoKSkgewogICAgICAgICAg
ICAgbV9kYXRhYmFzZS0+Y29ubmVjdGlvblByb3h5KCkucHV0T3JBZGQocHJvdGVjdGVkT3BlcmF0
aW9uLmdldCgpLCBXVEZNb3ZlKGtleURhdGEpLCBpZGJWYWx1ZSwgb3ZlcndyaXRlTW9kZSk7CkBA
IC0xMzIwLDcgKzEzMjAsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpwdXRPckFkZE9uU2VydmVy
KElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mIG9wZXJhdGlvbgogdm9pZCBJREJUcmFu
c2FjdGlvbjo6ZGlkUHV0T3JBZGRPblNlcnZlcihJREJSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBJ
REJSZXN1bHREYXRhJiByZXN1bHREYXRhKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFu
c2FjdGlvbjo6ZGlkUHV0T3JBZGRPblNlcnZlciIpOwotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+
b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNj
ZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7
CiAKICAgICBpZiAoYXV0byogcmVzdWx0ID0gcmVzdWx0RGF0YS5yZXN1bHRLZXkoKSkKICAgICAg
ICAgcmVxdWVzdC5zZXRSZXN1bHQoKnJlc3VsdCk7CkBAIC0xMzMyLDcgKzEzMzIsNyBAQCB2b2lk
IElEQlRyYW5zYWN0aW9uOjpkaWRQdXRPckFkZE9uU2VydmVyKElEQlJlcXVlc3QmIHJlcXVlc3Qs
IGNvbnN0IElEQlJlc3VsdERhdAogdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGVsZXRlT2JqZWN0U3Rv
cmUoY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwg
IklEQlRyYW5zYWN0aW9uOjpkZWxldGVPYmplY3RTdG9yZSIpOwotICAgIEFTU0VSVCgmbV9kYXRh
YmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQo
Y2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVh
ZCgpKSk7CiAgICAgQVNTRVJUKGlzVmVyc2lvbkNoYW5nZSgpKTsKIAogICAgIExvY2tlcjxMb2Nr
PiBsb2NrZXIobV9yZWZlcmVuY2VkT2JqZWN0U3RvcmVMb2NrKTsKQEAgLTEzNTUsNyArMTM1NSw3
IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OmRlbGV0ZU9iamVjdFN0b3JlT25TZXJ2ZXIoSURCQ2xp
ZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCVHJh
bnNhY3Rpb246OmRlbGV0ZU9iamVjdFN0b3JlT25TZXJ2ZXIiKTsKICAgICBBU1NFUlQoaXNWZXJz
aW9uQ2hhbmdlKCkpOwotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0g
JlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRh
Rm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBtX2RhdGFiYXNl
LT5jb25uZWN0aW9uUHJveHkoKS5kZWxldGVPYmplY3RTdG9yZShvcGVyYXRpb24sIG9iamVjdFN0
b3JlTmFtZSk7CiB9CkBAIC0xMzYzLDE0ICsxMzYzLDE0IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246
OmRlbGV0ZU9iamVjdFN0b3JlT25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlv
biYKIHZvaWQgSURCVHJhbnNhY3Rpb246OmRpZERlbGV0ZU9iamVjdFN0b3JlT25TZXJ2ZXIoY29u
c3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURC
VHJhbnNhY3Rpb246OmRpZERlbGV0ZU9iamVjdFN0b3JlT25TZXJ2ZXIiKTsKLSAgICBBU1NFUlQo
Jm1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAg
QVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX2RhdGFiYXNlLT5vcmln
aW5UaHJlYWQoKSkpOwogICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0RGF0YSwgcmVzdWx0RGF0YS50
eXBlKCkgPT0gSURCUmVzdWx0VHlwZTo6RGVsZXRlT2JqZWN0U3RvcmVTdWNjZXNzIHx8IHJlc3Vs
dERhdGEudHlwZSgpID09IElEQlJlc3VsdFR5cGU6OkVycm9yKTsKIH0KIAogdm9pZCBJREJUcmFu
c2FjdGlvbjo6ZGVsZXRlSW5kZXgodWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25z
dCBTdHJpbmcmIGluZGV4TmFtZSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rp
b246OmRlbGV0ZUluZGV4Iik7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQo
KSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2Nh
bERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKICAgICBBU1NFUlQo
aXNWZXJzaW9uQ2hhbmdlKCkpOwogCiAgICAgTE9HKEluZGV4ZWREQk9wZXJhdGlvbnMsICJJREIg
ZGVsZXRlIGluZGV4IG9wZXJhdGlvbjogJXMgKCUiIFBSSXU2NCAiKSIsIGluZGV4TmFtZS51dGY4
KCkuZGF0YSgpLCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOwpAQCAtMTM4NSw3ICsxMzg1LDcgQEAg
dm9pZCBJREJUcmFuc2FjdGlvbjo6ZGVsZXRlSW5kZXhPblNlcnZlcihJREJDbGllbnQ6OlRyYW5z
YWN0aW9uT3BlcmF0aW9uJiBvcGVyYXQKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNh
Y3Rpb246OmRlbGV0ZUluZGV4T25TZXJ2ZXIiKTsKICAgICBBU1NFUlQoaXNWZXJzaW9uQ2hhbmdl
KCkpOwotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6
Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFk
KG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBtX2RhdGFiYXNlLT5jb25uZWN0
aW9uUHJveHkoKS5kZWxldGVJbmRleChvcGVyYXRpb24sIG9iamVjdFN0b3JlSWRlbnRpZmllciwg
aW5kZXhOYW1lKTsKIH0KQEAgLTEzOTMsNyArMTM5Myw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246
OmRlbGV0ZUluZGV4T25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYgb3Bl
cmF0CiB2b2lkIElEQlRyYW5zYWN0aW9uOjpkaWREZWxldGVJbmRleE9uU2VydmVyKGNvbnN0IElE
QlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5z
YWN0aW9uOjpkaWREZWxldGVJbmRleE9uU2VydmVyIik7Ci0gICAgQVNTRVJUKCZtX2RhdGFiYXNl
LT5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworICAgIEFTU0VSVChjYW5B
Y2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkp
KTsKICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdERhdGEsIHJlc3VsdERhdGEudHlwZSgpID09IElE
QlJlc3VsdFR5cGU6OkRlbGV0ZUluZGV4U3VjY2VzcyB8fCByZXN1bHREYXRhLnR5cGUoKSA9PSBJ
REJSZXN1bHRUeXBlOjpFcnJvcik7CiB9CiAKQEAgLTE0MDEsOCArMTQwMSw4IEBAIHZvaWQgSURC
VHJhbnNhY3Rpb246Om9wZXJhdGlvbkNvbXBsZXRlZE9uQ2xpZW50KElEQkNsaWVudDo6VHJhbnNh
Y3Rpb25PcGVyYXRpb24mCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpv
cGVyYXRpb25Db21wbGV0ZWRPbkNsaWVudCIpOwogCi0gICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5v
cmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOwotICAgIEFTU0VSVCgmb3BlcmF0
aW9uLm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNh
bkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQo
KSkpOworICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQob3BlcmF0
aW9uLm9yaWdpblRocmVhZCgpKSk7CiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25PcGVyYXRpb25N
YXAuZ2V0KG9wZXJhdGlvbi5pZGVudGlmaWVyKCkpID09ICZvcGVyYXRpb24pOwogICAgIEFTU0VS
VChtX3RyYW5zYWN0aW9uT3BlcmF0aW9uc0luUHJvZ3Jlc3NRdWV1ZS5maXJzdCgpID09ICZvcGVy
YXRpb24pOwogCkBAIC0xNDE1LDE0ICsxNDE1LDE0IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246Om9w
ZXJhdGlvbkNvbXBsZXRlZE9uQ2xpZW50KElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24m
CiB2b2lkIElEQlRyYW5zYWN0aW9uOjplc3RhYmxpc2hPblNlcnZlcigpCiB7CiAgICAgTE9HKElu
ZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjplc3RhYmxpc2hPblNlcnZlciIpOwotICAgIEFTU0VS
VCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAg
ICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fZGF0YWJhc2UtPm9y
aWdpblRocmVhZCgpKSk7CiAKICAgICBtX2RhdGFiYXNlLT5jb25uZWN0aW9uUHJveHkoKS5lc3Rh
Ymxpc2hUcmFuc2FjdGlvbigqdGhpcyk7CiB9CiAKIHZvaWQgSURCVHJhbnNhY3Rpb246OmFjdGl2
YXRlKCkKIHsKLSAgICBBU1NFUlQoJm1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpID09ICZUaHJl
YWQ6OmN1cnJlbnQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRo
cmVhZChtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkpOwogCiAgICAgaWYgKGlzRmluaXNoZWRP
ckZpbmlzaGluZygpKQogICAgICAgICByZXR1cm47CkBAIC0xNDMyLDcgKzE0MzIsNyBAQCB2b2lk
IElEQlRyYW5zYWN0aW9uOjphY3RpdmF0ZSgpCiAKIHZvaWQgSURCVHJhbnNhY3Rpb246OmRlYWN0
aXZhdGUoKQogewotICAgIEFTU0VSVCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRo
cmVhZDo6Y3VycmVudCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9y
VGhyZWFkKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CiAKICAgICBpZiAobV9zdGF0ZSA9
PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkFjdGl2ZSkKICAgICAgICAgbV9zdGF0ZSA9
IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6SW5hY3RpdmU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblByb3h5LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9u
UHJveHkuY3BwCmluZGV4IGM2MGUwMTI5NzdiZTM3NzYxNGZkNjc3ZmNmM2IyMWMzNzhmMjg1NWEu
LmRjNTc4MWJhZTBiOTliMmRmMzk2ZTM5YTdmMjI0MjZjZjAyMjQ0MjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25u
ZWN0aW9uUHJveHkuY3BwCkBAIC01NDgsNiArNTQ4LDggQEAgdm9pZCBJREJDb25uZWN0aW9uUHJv
eHk6OmZvcmdldFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKIHRlbXBs
YXRlPHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIFZhbHVlVHlwZT4KIHZvaWQgcmVtb3ZlSXRl
bXNNYXRjaGluZ0N1cnJlbnRUaHJlYWQoSGFzaE1hcDxLZXlUeXBlLCBWYWx1ZVR5cGU+JiBtYXAp
CiB7CisgICAgLy8gRklYTUU6IFJldmlzaXQgd2hlbiBpbnRyb2R1Y2luZyBXZWJUaHJlYWQgYXdh
cmUgdGhyZWFkIGNvbXBhcmlzb24uCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwNDM0NQogICAgIGF1dG8mIGN1cnJlbnRUaHJlYWQgPSBUaHJlYWQ6OmN1
cnJlbnQoKTsKIAogICAgIFZlY3RvcjxLZXlUeXBlPiBrZXlzOwpAQCAtNTY0LDYgKzU2Niw4IEBA
IHZvaWQgcmVtb3ZlSXRlbXNNYXRjaGluZ0N1cnJlbnRUaHJlYWQoSGFzaE1hcDxLZXlUeXBlLCBW
YWx1ZVR5cGU+JiBtYXApCiB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBWYWx1
ZVR5cGU+CiB2b2lkIHNldE1hdGNoaW5nSXRlbXNDb250ZXh0U3VzcGVuZGVkKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGN1cnJlbnRDb250ZXh0LCBIYXNoTWFwPEtleVR5cGUsIFZhbHVlVHlwZT4m
IG1hcCwgYm9vbCBpc0NvbnRleHRTdXNwZW5kZWQpCiB7CisgICAgLy8gRklYTUU6IFJldmlzaXQg
d2hlbiBpbnRyb2R1Y2luZyBXZWJUaHJlYWQgYXdhcmUgdGhyZWFkIGNvbXBhcmlzb24uCisgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDM0NQogICAgIGF1
dG8mIGN1cnJlbnRUaHJlYWQgPSBUaHJlYWQ6OmN1cnJlbnQoKTsKICAgICBmb3IgKGF1dG8mIGl0
ZXJhdG9yIDogbWFwKSB7CiAgICAgICAgIGlmICgmaXRlcmF0b3IudmFsdWUtPm9yaWdpblRocmVh
ZCgpICE9ICZjdXJyZW50VGhyZWFkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvY2xpZW50L1RyYW5zYWN0aW9uT3BlcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvVHJhbnNhY3Rpb25PcGVyYXRpb24uaAppbmRleCA5
ZTczYTAxMTJjYzgxMmY2NWM5OTM0OTI3MWQyN2FhNjBjMzhkNjJjLi41ZDg4OWQ2YTg5Njc0Njdk
NDRlOTM5Y2FmZGJmYTkxNjFiNzkxYTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvVHJhbnNhY3Rpb25PcGVyYXRpb24uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvVHJhbnNhY3Rpb25PcGVyYXRpb24uaApA
QCAtNTEsMTIgKzUxLDEyIEBAIGNsYXNzIFRyYW5zYWN0aW9uT3BlcmF0aW9uIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPFRyYW5zYWN0aW9uT3BlcmF0aW9uPiB7CiBwdWJsaWM6CiAgICAg
dmlydHVhbCB+VHJhbnNhY3Rpb25PcGVyYXRpb24oKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1f
b3JpZ2luVGhyZWFkLnB0cigpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgICAgIEFTU0VS
VChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9vcmlnaW5UaHJlYWQuZ2V0KCkp
KTsKICAgICB9CiAKICAgICB2b2lkIHBlcmZvcm0oKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1f
b3JpZ2luVGhyZWFkLnB0cigpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgICAgIEFTU0VS
VChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9vcmlnaW5UaHJlYWQuZ2V0KCkp
KTsKICAgICAgICAgQVNTRVJUKG1fcGVyZm9ybUZ1bmN0aW9uKTsKICAgICAgICAgbV9wZXJmb3Jt
RnVuY3Rpb24oKTsKICAgICAgICAgbV9wZXJmb3JtRnVuY3Rpb24gPSB7IH07CkBAIC02NCw3ICs2
NCw3IEBAIGNsYXNzIFRyYW5zYWN0aW9uT3BlcmF0aW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPFRyYW5zYWN0aW9uT3BlcmF0aW9uPiB7CiAKICAgICB2b2lkIHRyYW5zaXRpb25Ub0Nv
bXBsZXRlT25UaGlzVGhyZWFkKGNvbnN0IElEQlJlc3VsdERhdGEmIGRhdGEpCiAgICAgewotICAg
ICAgICBBU1NFUlQobV9vcmlnaW5UaHJlYWQucHRyKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsK
KyAgICAgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX29yaWdp
blRocmVhZC5nZXQoKSkpOwogICAgICAgICBtX3RyYW5zYWN0aW9uLT5vcGVyYXRpb25Db21wbGV0
ZWRPblNlcnZlcihkYXRhLCAqdGhpcyk7CiAgICAgfQogCkBAIC03Miw3ICs3Miw3IEBAIGNsYXNz
IFRyYW5zYWN0aW9uT3BlcmF0aW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRyYW5z
YWN0aW9uT3BlcmF0aW9uPiB7CiAgICAgewogICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogCi0gICAgICAgIGlmIChtX29yaWdpblRocmVhZC5wdHIoKSA9PSAmVGhyZWFkOjpjdXJyZW50
KCkpCisgICAgICAgIGlmIChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV9vcmln
aW5UaHJlYWQuZ2V0KCkpKQogICAgICAgICAgICAgdHJhbnNpdGlvblRvQ29tcGxldGVPblRoaXNU
aHJlYWQoZGF0YSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgbV90cmFuc2FjdGlvbi0+
cGVyZm9ybUNhbGxiYWNrT25PcmlnaW5UaHJlYWQoKnRoaXMsICZUcmFuc2FjdGlvbk9wZXJhdGlv
bjo6dHJhbnNpdGlvblRvQ29tcGxldGVPblRoaXNUaHJlYWQsIGRhdGEpOwpAQCAtODMsNyArODMs
NyBAQCBjbGFzcyBUcmFuc2FjdGlvbk9wZXJhdGlvbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxUcmFuc2FjdGlvbk9wZXJhdGlvbj4gewogCiAgICAgdm9pZCBkb0NvbXBsZXRlKGNvbnN0
IElEQlJlc3VsdERhdGEmIGRhdGEpCiAgICAgewotICAgICAgICBBU1NFUlQobV9vcmlnaW5UaHJl
YWQucHRyKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKyAgICAgICAgQVNTRVJUKGNhbkFjY2Vz
c1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX29yaWdpblRocmVhZC5nZXQoKSkpOwogCiAgICAg
ICAgIGlmIChtX3BlcmZvcm1GdW5jdGlvbikKICAgICAgICAgICAgIG1fcGVyZm9ybUZ1bmN0aW9u
ID0geyB9Owo=
</data>
<flag name="review"
          id="399622"
          type_id="1"
          status="+"
          setter="dbates"
    />
          </attachment>
      

    </bug>

</bugzilla>