<?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>123027</bug_id>
          
          <creation_ts>2013-10-18 10:29:02 -0700</creation_ts>
          <short_desc>Make IDBDatabaseBackendLevelDB.cpp be cross platform</short_desc>
          <delta_ts>2013-10-23 11:12:48 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>123028</dependson>
    
    <dependson>123039</dependson>
    
    <dependson>123074</dependson>
    
    <dependson>123105</dependson>
    
    <dependson>123124</dependson>
    
    <dependson>123138</dependson>
    
    <dependson>123174</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>alecflett</cc>
    
    <cc>andersca</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jsbell</cc>
    
    <cc>kling</cc>
    
    <cc>rakuco</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>941260</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-10-18 10:29:02 -0700</bug_when>
    <thetext>Make IDBDatabaseBackendLevelDB.cpp be cross platform

This class has a lot of the main cross platform IDB logic in it, but it is also closely tied to LevelDB classes.

There&apos;s a few refactoring steps available that will let us make this cross platform.  I will file them as blocking bugs as they come up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942584</commentid>
    <comment_count>1</comment_count>
      <attachid>214927</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-10-22 22:01:09 -0700</bug_when>
    <thetext>Created attachment 214927
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942585</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-22 22:03:25 -0700</bug_when>
    <thetext>Attachment 214927 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBDatabaseBackendInterface.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBFactoryBackendInterface.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBLevelDBCoding.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBLevelDBCoding.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.h&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBFactoryBackend.cpp&apos;, u&apos;Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBFactoryBackend.h&apos;]&quot; exit_code: 1
Source/WebCore/Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h:33:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/Modules/indexeddb/IDBDatabaseBackendInterface.h:58:  Should have a space between // and comment  [whitespace/comments] [4]
Total errors found: 2 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942587</commentid>
    <comment_count>3</comment_count>
      <attachid>214929</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-10-22 22:24:31 -0700</bug_when>
    <thetext>Created attachment 214929
Patch v2 - More style, more building.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942753</commentid>
    <comment_count>4</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-10-23 11:12:48 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/157869</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214927</attachid>
            <date>2013-10-22 22:01:09 -0700</date>
            <delta_ts>2013-10-22 22:24:31 -0700</delta_ts>
            <desc>Patch v1 </desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>109964</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggY2E0ODY4NC4uNDdiZWUwOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTc2NSw2ICs3NjUsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNv
cldpdGhWYWx1ZS5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKKyAg
ICBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAogICAgIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5jcHAKICAgICBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9J
REJFdmVudERpc3BhdGNoZXIuY3BwCkBAIC03ODYsNyArNzg3LDYgQEAgc2V0KFdlYkNvcmVfU09V
UkNFUwogICAgIE1vZHVsZXMvaW5kZXhlZGRiL1dvcmtlckdsb2JhbFNjb3BlSW5kZXhlZERhdGFi
YXNlLmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlTGV2
ZWxEQi5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkN1cnNvckJhY2tlbmRM
ZXZlbERCLmNwcAotICAgIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRGF0YWJhc2VCYWNr
ZW5kTGV2ZWxEQi5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkZhY3RvcnlC
YWNrZW5kTGV2ZWxEQi5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkxldmVs
REJDb2RpbmcuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlv
bkJhY2tlbmRMZXZlbERCLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDU0MjkxZWUuLmFmYjZhOTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw1MCBAQAorMjAxMy0xMC0yMiAgQnJhZHkgRWlkc29uICA8YmVpZHNv
bkBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmNw
cCBiZSBjcm9zcyBwbGF0Zm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTIzMDI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTW92ZSBpdCBvdXQgb2YgdGhlIGluZGV4ZWRkYi9sZXZlbGRiIGRpcmVjdG9y
eSwgYW5kIHJlbmFtZSBpdCB0byBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLgorCisgICAgICAgIFBy
b2plY3QgZmlsZXM6CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFr
ZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9q
OgorICAgICAgICAqIFdlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRGF0YWJhc2VCYWNr
ZW5kTGV2ZWxEQi5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VC
YWNrZW5kSW1wbC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvbGV2ZWxkYi9JREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmguCisKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6aXNJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsKTogQWRkIHRvIHN1cHBvcnQgYSByZXF1aXJlZCBjYXN0IGluIExldmVsREIgY29kZS4KKwor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmg6
CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkN1cnNvckJhY2tlbmRM
ZXZlbERCLmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkN1cnNv
ckJhY2tlbmRMZXZlbERCLmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRi
L0lEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0
b3J5QmFja2VuZExldmVsREI6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkZhY3RvcnlCYWNrZW5kTGV2ZWxEQjo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0
b3J5QmFja2VuZExldmVsREI6Om1heWJlQ3JlYXRlVHJhbnNhY3Rpb25CYWNrZW5kKToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5o
OgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJMZXZlbERCQ29kaW5n
LmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkxldmVsREJDb2Rp
bmcuaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rp
b25CYWNrZW5kTGV2ZWxEQi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJh
Y2tlbmRMZXZlbERCOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25C
YWNrZW5kTGV2ZWxEQjo6SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpzY2hlZHVsZVZlcnNpb25DaGFu
Z2VPcGVyYXRpb24pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCVHJh
bnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5oOgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
bGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCT3BlcmF0aW9ucy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlT3BlcmF0
aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6
OlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCT3BlcmF0aW9u
cy5oOgorCiAyMDEzLTEwLTIyICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTU3ODI2LgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggZDI3OTAwMC4uODlhOGEwNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCkBAIC0xODAyLDggKzE4MDIsOCBAQCB3ZWJjb3JlX21vZHVsZXNfc291
cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmgg
XAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1
ZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkRhdGFi
YXNlQmFja2VuZExldmVsREIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9sZXZlbGRiL0lEQkRhdGFiYXNlQmFja2VuZExldmVsREIuaCBcCisJU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgXAorCVNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaCBcCiAJU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNl
LmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJh
Y2tzLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQ2Fs
bGJhY2tzSW1wbC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5iZTg4NTk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKQEAgLTAsMCAr
MSw2MjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCRGF0YWJh
c2VCYWNrZW5kSW1wbC5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNs
dWRlICJJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3MuaCIKKyNpbmNs
dWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5k
SW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCSW5kZXhXcml0ZXIuaCIKKyNpbmNsdWRlICJJREJL
ZXlSYW5nZS5oIgorI2luY2x1ZGUgIklEQlJlY29yZElkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1
ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OmNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQkJhY2tpbmdTdG9yZUlu
dGVyZmFjZSogYmFja2luZ1N0b3JlLCBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSogZmFjdG9y
eSwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKQoreworICAgIFJlZlB0cjxJREJEYXRh
YmFzZUJhY2tlbmRJbXBsPiBiYWNrZW5kID0gYWRvcHRSZWYobmV3IElEQkRhdGFiYXNlQmFja2Vu
ZEltcGwobmFtZSwgYmFja2luZ1N0b3JlLCBmYWN0b3J5LCB1bmlxdWVJZGVudGlmaWVyKSk7Cisg
ICAgaWYgKCFiYWNrZW5kLT5vcGVuSW50ZXJuYWwoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIGJhY2tlbmQucmVsZWFzZSgpOworfQorCitJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQmFja2luZ1N0b3Jl
SW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKiBmYWN0
b3J5LCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpCisgICAgOiBtX2JhY2tpbmdTdG9y
ZShiYWNraW5nU3RvcmUpCisgICAgLCBtX21ldGFkYXRhKG5hbWUsIEludmFsaWRJZCwgMCwgSW52
YWxpZElkKQorICAgICwgbV9pZGVudGlmaWVyKHVuaXF1ZUlkZW50aWZpZXIpCisgICAgLCBtX2Zh
Y3RvcnkoZmFjdG9yeSkKKyAgICAsIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvcihJREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yOjpjcmVhdGUoKSkKKyAgICAsIG1fY2xvc2luZ0Nvbm5lY3Rpb24oZmFs
c2UpCit7CisgICAgQVNTRVJUKCFtX21ldGFkYXRhLm5hbWUuaXNOdWxsKCkpOworfQorCit2b2lk
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmFkZE9iamVjdFN0b3JlKGNvbnN0IElEQk9iamVjdFN0
b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlLCBpbnQ2NF90IG5ld01heE9iamVjdFN0b3JlSWQpCit7
CisgICAgQVNTRVJUKCFtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9y
ZS5pZCkpOworICAgIGlmIChuZXdNYXhPYmplY3RTdG9yZUlkICE9IElEQk9iamVjdFN0b3JlTWV0
YWRhdGE6OkludmFsaWRJZCkgeworICAgICAgICBBU1NFUlQobV9tZXRhZGF0YS5tYXhPYmplY3RT
dG9yZUlkIDwgbmV3TWF4T2JqZWN0U3RvcmVJZCk7CisgICAgICAgIG1fbWV0YWRhdGEubWF4T2Jq
ZWN0U3RvcmVJZCA9IG5ld01heE9iamVjdFN0b3JlSWQ7CisgICAgfQorICAgIG1fbWV0YWRhdGEu
b2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZS5pZCwgb2JqZWN0U3RvcmUpOworfQorCit2b2lk
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlbW92ZU9iamVjdFN0b3JlKGludDY0X3Qgb2JqZWN0
U3RvcmVJZCkKK3sKKyAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMo
b2JqZWN0U3RvcmVJZCkpOworICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnJlbW92ZShvYmpl
Y3RTdG9yZUlkKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjphZGRJbmRleChp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4LCBpbnQ2
NF90IG5ld01heEluZGV4SWQpCit7CisgICAgQVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVz
LmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKKyAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9i
amVjdFN0b3JlID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOwor
CisgICAgQVNTRVJUKCFvYmplY3RTdG9yZS5pbmRleGVzLmNvbnRhaW5zKGluZGV4LmlkKSk7Cisg
ICAgb2JqZWN0U3RvcmUuaW5kZXhlcy5zZXQoaW5kZXguaWQsIGluZGV4KTsKKyAgICBpZiAobmV3
TWF4SW5kZXhJZCAhPSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKKyAgICAgICAgQVNT
RVJUKG9iamVjdFN0b3JlLm1heEluZGV4SWQgPCBuZXdNYXhJbmRleElkKTsKKyAgICAgICAgb2Jq
ZWN0U3RvcmUubWF4SW5kZXhJZCA9IG5ld01heEluZGV4SWQ7CisgICAgfQorICAgIG1fbWV0YWRh
dGEub2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZUlkLCBvYmplY3RTdG9yZSk7Cit9CisKK3Zv
aWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVtb3ZlSW5kZXgoaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQpCit7CisgICAgQVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0U3Rv
cmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKKyAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRh
IG9iamVjdFN0b3JlID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQp
OworCisgICAgQVNTRVJUKG9iamVjdFN0b3JlLmluZGV4ZXMuY29udGFpbnMoaW5kZXhJZCkpOwor
ICAgIG9iamVjdFN0b3JlLmluZGV4ZXMucmVtb3ZlKGluZGV4SWQpOworICAgIG1fbWV0YWRhdGEu
b2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZUlkLCBvYmplY3RTdG9yZSk7Cit9CisKK2Jvb2wg
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbkludGVybmFsKCkKK3sKKyAgICBib29sIHN1Y2Nl
c3MgPSBmYWxzZTsKKyAgICBib29sIG9rID0gbV9iYWNraW5nU3RvcmUtPmdldElEQkRhdGFiYXNl
TWV0YURhdGEobV9tZXRhZGF0YS5uYW1lLCAmbV9tZXRhZGF0YSwgc3VjY2Vzcyk7CisgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRShzdWNjZXNzID09IChtX21ldGFkYXRhLmlkICE9IEludmFsaWRJZCks
ICJzdWNjZXNzID0gJXMsIG1faWQgPSAlbGxkIiwgc3VjY2VzcyA/ICJ0cnVlIiA6ICJmYWxzZSIs
IHN0YXRpY19jYXN0PGxvbmcgbG9uZz4obV9tZXRhZGF0YS5pZCkpOworICAgIGlmICghb2spCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIG1f
YmFja2luZ1N0b3JlLT5nZXRPYmplY3RTdG9yZXMobV9tZXRhZGF0YS5pZCwgJm1fbWV0YWRhdGEu
b2JqZWN0U3RvcmVzKTsKKworICAgIHJldHVybiBtX2JhY2tpbmdTdG9yZS0+Y3JlYXRlSURCRGF0
YWJhc2VNZXRhRGF0YShtX21ldGFkYXRhLm5hbWUsIFN0cmluZzo6bnVtYmVyKG1fbWV0YWRhdGEu
dmVyc2lvbiksIG1fbWV0YWRhdGEudmVyc2lvbiwgbV9tZXRhZGF0YS5pZCk7Cit9CisKK0lEQkRh
dGFiYXNlQmFja2VuZEltcGw6On5JREJEYXRhYmFzZUJhY2tlbmRJbXBsKCkKK3sKK30KKworSURC
QmFja2luZ1N0b3JlSW50ZXJmYWNlKiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpiYWNraW5nU3Rv
cmUoKSBjb25zdAoreworICAgIHJldHVybiBtX2JhY2tpbmdTdG9yZS5nZXQoKTsKK30KKwordm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IHRyYW5z
YWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpCit7CisgICAgTE9HKFN0
b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9yZSIpOwor
ICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24gPSBtX3RyYW5z
YWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisgICAgaWYgKCF0cmFuc2FjdGlvbikKKyAgICAg
ICAgcmV0dXJuOworICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6
VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKTsKKworICAgIEFTU0VSVCghbV9tZXRhZGF0YS5vYmpl
Y3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAgIElEQk9iamVjdFN0b3JlTWV0
YWRhdGEgb2JqZWN0U3RvcmVNZXRhZGF0YShuYW1lLCBvYmplY3RTdG9yZUlkLCBrZXlQYXRoLCBh
dXRvSW5jcmVtZW50LCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6Ok1pbmltdW1JbmRleElk
KTsKKworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZUNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9u
KG9iamVjdFN0b3JlTWV0YWRhdGEpOworICAgIGFkZE9iamVjdFN0b3JlKG9iamVjdFN0b3JlTWV0
YWRhdGEsIG9iamVjdFN0b3JlSWQpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OmRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
ZGVsZXRlT2JqZWN0U3RvcmUiKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
IHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAgIGlm
ICghdHJhbnNhY3Rpb24pCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQodHJhbnNhY3Rpb24t
Pm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVyc2lvbkNoYW5nZSk7CisKKyAgICBB
U1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOwor
ICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEgPSBt
X21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7CisKKyAgICB0cmFuc2Fj
dGlvbi0+c2NoZWR1bGVEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbihvYmplY3RTdG9yZU1ldGFk
YXRhKTsKKyAgICByZW1vdmVPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkKTsKK30KKwordm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleChpbnQ2NF90IHRyYW5zYWN0aW9uSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50
cnkpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVh
dGVJbmRleCIpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rp
b24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisgICAgaWYgKCF0cmFuc2Fj
dGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09
IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKTsKKworICAgIEFTU0VSVChtX21l
dGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7CisgICAgY29uc3Qg
SURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmplY3RTdG9yZSA9IG1fbWV0YWRhdGEub2JqZWN0U3Rv
cmVzLmdldChvYmplY3RTdG9yZUlkKTsKKworICAgIEFTU0VSVCghb2JqZWN0U3RvcmUuaW5kZXhl
cy5jb250YWlucyhpbmRleElkKSk7CisgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBpbmRleE1l
dGFkYXRhKG5hbWUsIGluZGV4SWQsIGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSk7CisKKyAg
ICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVDcmVhdGVJbmRleE9wZXJhdGlvbihvYmplY3RTdG9yZUlk
LCBpbmRleE1ldGFkYXRhKTsKKworICAgIGFkZEluZGV4KG9iamVjdFN0b3JlSWQsIGluZGV4TWV0
YWRhdGEsIGluZGV4SWQpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0
ZUluZGV4KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpkZWxldGVJbmRleCIpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSog
dHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisgICAgaWYg
KCF0cmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+
bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKTsKKworICAgIEFT
U0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7Cisg
ICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmplY3RTdG9yZSA9IG1fbWV0YWRhdGEu
b2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKKworICAgIEFTU0VSVChvYmplY3RTdG9y
ZS5pbmRleGVzLmNvbnRhaW5zKGluZGV4SWQpKTsKKyAgICBjb25zdCBJREJJbmRleE1ldGFkYXRh
JiBpbmRleE1ldGFkYXRhID0gb2JqZWN0U3RvcmUuaW5kZXhlcy5nZXQoaW5kZXhJZCk7CisKKyAg
ICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVEZWxldGVJbmRleE9wZXJhdGlvbihvYmplY3RTdG9yZUlk
LCBpbmRleE1ldGFkYXRhKTsKKworICAgIHJlbW92ZUluZGV4KG9iamVjdFN0b3JlSWQsIGluZGV4
SWQpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNvbW1pdChpbnQ2NF90IHRy
YW5zYWN0aW9uSWQpCit7CisgICAgLy8gVGhlIGZyb250ZW5kIHN1Z2dlc3RzIHRoYXQgd2UgY29t
bWl0LCBidXQgd2UgbWF5IGhhdmUgcHJldmlvdXNseSBpbml0aWF0ZWQgYW4gYWJvcnQsIGFuZCBz
byBoYXZlIGRpc3Bvc2VkIG9mIHRoZSB0cmFuc2FjdGlvbi4gb25BYm9ydCBoYXMgYWxyZWFkeSBi
ZWVuIGRpc3BhdGNoZWQgdG8gdGhlIGZyb250ZW5kLCBzbyBpdCB3aWxsIGZpbmQgb3V0IGFib3V0
IHRoYXQgYXN5bmNocm9ub3VzbHkuCisgICAgaWYgKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRy
YW5zYWN0aW9uSWQpKQorICAgICAgICBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCkt
PmNvbW1pdCgpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmFib3J0KGludDY0
X3QgdHJhbnNhY3Rpb25JZCkKK3sKKyAgICAvLyBJZiB0aGUgdHJhbnNhY3Rpb24gaXMgdW5rbm93
biwgdGhlbiBpdCBoYXMgYWxyZWFkeSBiZWVuIGFib3J0ZWQgYnkgdGhlIGJhY2tlbmQgYmVmb3Jl
IHRoaXMgY2FsbCBzbyBpdCBpcyBzYWZlIHRvIGlnbm9yZSBpdC4KKyAgICBpZiAobV90cmFuc2Fj
dGlvbnMuY29udGFpbnModHJhbnNhY3Rpb25JZCkpCisgICAgICAgIG1fdHJhbnNhY3Rpb25zLmdl
dCh0cmFuc2FjdGlvbklkKS0+YWJvcnQoKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjphYm9ydChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VF
cnJvcj4gZXJyb3IpCit7CisgICAgLy8gSWYgdGhlIHRyYW5zYWN0aW9uIGlzIHVua25vd24sIHRo
ZW4gaXQgaGFzIGFscmVhZHkgYmVlbiBhYm9ydGVkIGJ5IHRoZSBiYWNrZW5kIGJlZm9yZSB0aGlz
IGNhbGwgc28gaXQgaXMgc2FmZSB0byBpZ25vcmUgaXQuCisgICAgaWYgKG1fdHJhbnNhY3Rpb25z
LmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKQorICAgICAgICBtX3RyYW5zYWN0aW9ucy5nZXQodHJh
bnNhY3Rpb25JZCktPmFib3J0KGVycm9yKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpnZXQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIGJvb2wga2V5
T25seSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBMT0coU3Rv
cmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmdldCIpOworICAgIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJh
bnNhY3Rpb25JZCk7CisgICAgaWYgKCF0cmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlR2V0T3BlcmF0aW9uKG1fbWV0YWRhdGEsIG9iamVjdFN0
b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBrZXlPbmx5ID8gSW5kZXhlZERCOjpDdXJzb3JLZXlP
bmx5IDogSW5kZXhlZERCOjpDdXJzb3JLZXlBbmRWYWx1ZSwgY2FsbGJhY2tzKTsKK30KKwordm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpwdXQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSwgUGFzc1Jl
ZlB0cjxJREJLZXk+IGtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0
b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6cHV0Iik7CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAg
ICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKHRyYW5zYWN0
aW9uLT5tb2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRPbmx5KTsKKworICAgIGNv
bnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IG1fbWV0YWRh
dGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKKworICAgIEFTU0VSVChvYmplY3RT
dG9yZU1ldGFkYXRhLmF1dG9JbmNyZW1lbnQgfHwga2V5LmdldCgpKTsKKworICAgIHRyYW5zYWN0
aW9uLT5zY2hlZHVsZVB1dE9wZXJhdGlvbihvYmplY3RTdG9yZU1ldGFkYXRhLCB2YWx1ZSwga2V5
LCBwdXRNb2RlLCBjYWxsYmFja3MsIGluZGV4SWRzLCBpbmRleEtleXMpOworfQorCit2b2lkIElE
QkRhdGFiYXNlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyhpbnQ2NF90IHRyYW5zYWN0aW9uSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXks
IGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+
JiBpbmRleEtleXMpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpzZXRJbmRleEtleXMiKTsKKyAgICBBU1NFUlQocHJwUHJpbWFyeUtleSk7CisKKyAgICBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlv
bnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAgIGlmICghdHJhbnNhY3Rpb24pCisgICAgICAgIHJl
dHVybjsKKyAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5z
YWN0aW9uVmVyc2lvbkNoYW5nZSk7CisKKyAgICBSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5ID0g
cHJwUHJpbWFyeUtleTsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlPiBzdG9y
ZSA9IGJhY2tpbmdTdG9yZSgpOworICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBjb3VsZCBiZSBh
c3luY2hyb25vdXMsIGJ1dCB3ZSBuZWVkIHRvIGV2YWx1YXRlIGlmIGl0J3Mgd29ydGggdGhlIGV4
dHJhIGNvbXBsZXhpdHkuCisgICAgUmVmUHRyPElEQlJlY29yZElkZW50aWZpZXI+IHJlY29yZElk
ZW50aWZpZXI7CisgICAgYm9vbCBvayA9IHN0b3JlLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKHRy
YW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX21ldGFkYXRhLmlkLCBvYmpl
Y3RTdG9yZUlkLCAqcHJpbWFyeUtleSwgcmVjb3JkSWRlbnRpZmllcik7CisgICAgaWYgKCFvaykg
eworICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBzZXR0aW5n
IGluZGV4IGtleXMuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghcmVjb3Jk
SWRlbnRpZmllcikgeworICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJ
REJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJv
ciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9yIHNldHRpbmcgaW5kZXgga2V5cyBmb3Ig
b2JqZWN0IHN0b3JlLiIpKTsKKyAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yLnJlbGVh
c2UoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8UmVmUHRyPElEQklu
ZGV4V3JpdGVyPj4gaW5kZXhXcml0ZXJzOworICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7CisgICAg
Ym9vbCBvYmV5c0NvbnN0cmFpbnRzID0gZmFsc2U7CisgICAgQVNTRVJUKG1fbWV0YWRhdGEub2Jq
ZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKKyAgICBjb25zdCBJREJPYmplY3RT
dG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhID0gbV9tZXRhZGF0YS5vYmplY3RTdG9y
ZXMuZ2V0KG9iamVjdFN0b3JlSWQpOworICAgIGJvb2wgYmFja2luZ1N0b3JlU3VjY2VzcyA9IHN0
b3JlLT5tYWtlSW5kZXhXcml0ZXJzKCp0cmFuc2FjdGlvbiwgaWQoKSwgb2JqZWN0U3RvcmVNZXRh
ZGF0YSwgKnByaW1hcnlLZXksIGZhbHNlLCBpbmRleElkcywgaW5kZXhLZXlzLCBpbmRleFdyaXRl
cnMsICZlcnJvck1lc3NhZ2UsIG9iZXlzQ29uc3RyYWludHMpOworICAgIGlmICghYmFja2luZ1N0
b3JlU3VjY2VzcykgeworICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBl
cnJvcjogYmFja2luZyBzdG9yZSBlcnJvciB1cGRhdGluZyBpbmRleCBrZXlzLiIpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW9iZXlzQ29uc3RyYWludHMpIHsKKyAgICAgICAg
dHJhbnNhY3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yLCBlcnJvck1lc3NhZ2UpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhXcml0ZXJzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIElEQkluZGV4V3JpdGVyKiBpbmRleFdyaXRlciA9IGluZGV4V3Jp
dGVyc1tpXS5nZXQoKTsKKyAgICAgICAgaW5kZXhXcml0ZXItPndyaXRlSW5kZXhLZXlzKHJlY29y
ZElkZW50aWZpZXIuZ2V0KCksICpzdG9yZS5nZXQoKSwgdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKCksIGlkKCksIG9iamVjdFN0b3JlSWQpOworICAgIH0KK30KKwordm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHkoaW50NjRfdCB0cmFuc2FjdGlv
bklkLCBpbnQ2NF90LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzKQoreworICAgIExP
RyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5Iik7
CisKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uID0gbV90
cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAgIGlmICghdHJhbnNhY3Rpb24pCisg
ICAgICAgIHJldHVybjsKKworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVNldEluZGV4ZXNSZWFk
eU9wZXJhdGlvbihpbmRleElkcy5zaXplKCkpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6Om9wZW5DdXJzb3IoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2Us
IEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCBrZXlPbmx5LCBUYXNr
VHlwZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAg
ICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5DdXJzb3IiKTsK
KyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uID0gbV90cmFu
c2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAgIGlmICghdHJhbnNhY3Rpb24pCisgICAg
ICAgIHJldHVybjsKKworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZU9wZW5DdXJzb3JPcGVyYXRp
b24ob2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwga2V5T25seSA/
IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSA6IEluZGV4ZWREQjo6Q3Vyc29yS2V5QW5kVmFsdWUs
IHRhc2tUeXBlLCBjYWxsYmFja3MpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OmNvdW50KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6Y291bnQiKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwor
ICAgIGlmICghdHJhbnNhY3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX21l
dGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7CisgICAgdHJhbnNh
Y3Rpb24tPnNjaGVkdWxlQ291bnRPcGVyYXRpb24ob2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5
UmFuZ2UsIGNhbGxiYWNrcyk7Cit9CisKKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpk
ZWxldGVSYW5nZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpkZWxldGVSYW5nZSIpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSog
dHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisgICAgaWYg
KCF0cmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+
bW9kZSgpICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25SZWFkT25seSk7CisKKyAgICB0cmFuc2Fj
dGlvbi0+c2NoZWR1bGVEZWxldGVSYW5nZU9wZXJhdGlvbihvYmplY3RTdG9yZUlkLCBrZXlSYW5n
ZSwgY2FsbGJhY2tzKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjbGVhcihp
bnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFi
YXNlQmFja2VuZEltcGw6OmNsZWFyIik7CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAg
ICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKHRyYW5zYWN0
aW9uLT5tb2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRPbmx5KTsKKworICAgIHRy
YW5zYWN0aW9uLT5zY2hlZHVsZUNsZWFyT3BlcmF0aW9uKG9iamVjdFN0b3JlSWQsIGNhbGxiYWNr
cyk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25TdGFydGVk
KElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24pCit7CisgICAgaWYg
KHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFu
Z2UpIHsKKyAgICAgICAgQVNTRVJUKCFtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24p
OworICAgICAgICBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlv
bjsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25G
aW5pc2hlZChJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHJhd1RyYW5zYWN0aW9uKQor
eworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9u
ID0gcmF3VHJhbnNhY3Rpb247CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRy
YW5zYWN0aW9uLT5pZCgpKSk7CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2Fj
dGlvbi0+aWQoKSkgPT0gdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIG1fdHJhbnNhY3Rpb25zLnJl
bW92ZSh0cmFuc2FjdGlvbi0+aWQoKSk7CisgICAgaWYgKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0g
SW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpIHsKKyAgICAgICAgQVNTRVJUKHRy
YW5zYWN0aW9uLmdldCgpID09IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5nZXQo
KSk7CisgICAgICAgIG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5jbGVhcigpOwor
ICAgIH0KK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvbkZpbmlz
aGVkQW5kQWJvcnRGaXJlZChJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHJhd1RyYW5z
YWN0aW9uKQoreworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRy
YW5zYWN0aW9uID0gcmF3VHJhbnNhY3Rpb247CisgICAgaWYgKHRyYW5zYWN0aW9uLT5tb2RlKCkg
PT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpIHsKKyAgICAgICAgLy8gSWYg
dGhpcyB3YXMgYW4gb3Blbi13aXRoLXZlcnNpb24gY2FsbCwgdGhlcmUgd2lsbCBiZSBhICJzZWNv
bmQKKyAgICAgICAgLy8gaGFsZiIgb3BlbiBjYWxsIHdhaXRpbmcgZm9yIHVzIGluIHByb2Nlc3NQ
ZW5kaW5nQ2FsbHMuCisgICAgICAgIC8vIEZJWE1FOiBXaGVuIHdlIG5vIGxvbmdlciBzdXBwb3J0
IHNldFZlcnNpb24sIGFzc2VydCBzdWNoIGEgdGhpbmcuCisgICAgICAgIGlmIChtX3BlbmRpbmdT
ZWNvbmRIYWxmT3BlbikgeworICAgICAgICAgICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4tPmNh
bGxiYWNrcygpLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6QWJvcnRFcnJvciwgIlZlcnNpb24gY2hhbmdlIHRyYW5zYWN0aW9uIHdhcyBhYm9y
dGVkIGluIHVwZ3JhZGVuZWVkZWQgZXZlbnQgaGFuZGxlci4iKSk7CisgICAgICAgICAgICBtX3Bl
bmRpbmdTZWNvbmRIYWxmT3Blbi5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICAgICAgcHJvY2Vz
c1BlbmRpbmdDYWxscygpOworICAgIH0KK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
Ojp0cmFuc2FjdGlvbkZpbmlzaGVkQW5kQ29tcGxldGVGaXJlZChJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqIHJhd1RyYW5zYWN0aW9uKQoreworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gcmF3VHJhbnNhY3Rpb247CisgICAgaWYg
KHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFu
Z2UpCisgICAgICAgIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKK30KKworc2l6ZV90IElEQkRhdGFi
YXNlQmFja2VuZEltcGw6OmNvbm5lY3Rpb25Db3VudCgpCit7CisgICAgLy8gVGhpcyBkb2VzIG5v
dCBpbmNsdWRlIHBlbmRpbmcgb3BlbiBjYWxscywgYXMgdGhvc2Ugc2hvdWxkIG5vdCBibG9jayB2
ZXJzaW9uIGNoYW5nZXMgYW5kIGRlbGV0ZXMuCisgICAgcmV0dXJuIG1fZGF0YWJhc2VDYWxsYmFj
a3NTZXQuc2l6ZSgpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnByb2Nlc3NQ
ZW5kaW5nQ2FsbHMoKQoreworICAgIGlmIChtX3BlbmRpbmdTZWNvbmRIYWxmT3BlbikgeworICAg
ICAgICAvLyBGSVhNRTogRGF0YWJhc2UgdmVyc2lvbnMgYXJlIG5vdyBvZiB0eXBlIHVpbnQ2NF90
LCBidXQgdGhpcyBjb2RlIGV4cGVjdGVkIGludDY0X3QuCisgICAgICAgIEFTU0VSVChtX3BlbmRp
bmdTZWNvbmRIYWxmT3Blbi0+dmVyc2lvbigpID09IChpbnQ2NF90KW1fbWV0YWRhdGEudmVyc2lv
bik7CisgICAgICAgIEFTU0VSVChtX21ldGFkYXRhLmlkICE9IEludmFsaWRJZCk7CisgICAgICAg
IG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLT5jYWxsYmFja3MoKS0+b25TdWNjZXNzKHRoaXMsIHRo
aXMtPm1ldGFkYXRhKCkpOworICAgICAgICBtX3BlbmRpbmdTZWNvbmRIYWxmT3Blbi5yZWxlYXNl
KCk7CisgICAgICAgIC8vIEZhbGwgdGhyb3VnaCB3aGVuIGNvbXBsZXRlLCBhcyBwZW5kaW5nIGRl
bGV0ZXMgbWF5IGJlIChwYXJ0aWFsbHkpIHVuYmxvY2tlZC4KKyAgICB9CisKKyAgICAvLyBOb3Rl
IHRoYXQgdGhpcyBjaGVjayBpcyBvbmx5IGFuIG9wdGltaXphdGlvbiB0byByZWR1Y2UgcXVldWUt
Y2h1cm4gYW5kCisgICAgLy8gbm90IG5lY2Vzc2FyeSBmb3IgY29ycmVjdG5lc3M7IGRlbGV0ZURh
dGFiYXNlIGFuZCBvcGVuQ29ubmVjdGlvbiB3aWxsCisgICAgLy8gcmVxdWV1ZSB0aGVpciBjYWxs
cyBpZiB0aGlzIGNvbmRpdGlvbiBpcyB0cnVlLgorICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hh
bmdlVHJhbnNhY3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9wZW5kaW5nRGVs
ZXRlQ2FsbHMuaXNFbXB0eSgpICYmIGlzRGVsZXRlRGF0YWJhc2VCbG9ja2VkKCkpCisgICAgICAg
IHJldHVybjsKKyAgICB3aGlsZSAoIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSkgewor
ICAgICAgICBPd25QdHI8UGVuZGluZ0RlbGV0ZUNhbGw+IHBlbmRpbmdEZWxldGVDYWxsID0gbV9w
ZW5kaW5nRGVsZXRlQ2FsbHMudGFrZUZpcnN0KCk7CisgICAgICAgIGRlbGV0ZURhdGFiYXNlRmlu
YWwocGVuZGluZ0RlbGV0ZUNhbGwtPmNhbGxiYWNrcygpKTsKKyAgICB9CisgICAgLy8gZGVsZXRl
RGF0YWJhc2VGaW5hbCBzaG91bGQgbmV2ZXIgcmUtcXVldWUgY2FsbHMuCisgICAgQVNTRVJUKG1f
cGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSk7CisKKyAgICAvLyBUaGlzIGNoZWNrIGlzIGFs
c28gbm90IHJlYWxseSBuZWVkZWQsIG9wZW5Db25uZWN0aW9uIHdvdWxkIGp1c3QgcmVxdWV1ZSBp
dHMgY2FsbHMuCisgICAgaWYgKG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gT3BlbiBjYWxscyBjYW4gYmUgcmVxdWV1ZWQgaWYgYW4g
b3BlbiBjYWxsIHN0YXJ0ZWQgYSB2ZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbi4KKyAgICBEZXF1
ZTxPd25QdHI8UGVuZGluZ09wZW5DYWxsPj4gcGVuZGluZ09wZW5DYWxsczsKKyAgICBtX3BlbmRp
bmdPcGVuQ2FsbHMuc3dhcChwZW5kaW5nT3BlbkNhbGxzKTsKKyAgICB3aGlsZSAoIXBlbmRpbmdP
cGVuQ2FsbHMuaXNFbXB0eSgpKSB7CisgICAgICAgIE93blB0cjxQZW5kaW5nT3BlbkNhbGw+IHBl
bmRpbmdPcGVuQ2FsbCA9IHBlbmRpbmdPcGVuQ2FsbHMudGFrZUZpcnN0KCk7CisgICAgICAgIG9w
ZW5Db25uZWN0aW9uKHBlbmRpbmdPcGVuQ2FsbC0+Y2FsbGJhY2tzKCksIHBlbmRpbmdPcGVuQ2Fs
bC0+ZGF0YWJhc2VDYWxsYmFja3MoKSwgcGVuZGluZ09wZW5DYWxsLT50cmFuc2FjdGlvbklkKCks
IHBlbmRpbmdPcGVuQ2FsbC0+dmVyc2lvbigpKTsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6Y3JlYXRlVHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0IFZlY3Rvcjxp
bnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIHVuc2lnbmVkIHNob3J0IG1vZGUpCit7CisgICAgUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSBtX2ZhY3Rv
cnktPm1heWJlQ3JlYXRlVHJhbnNhY3Rpb25CYWNrZW5kKHRoaXMsIHRyYW5zYWN0aW9uSWQsIGNh
bGxiYWNrcywgb2JqZWN0U3RvcmVJZHMsIHN0YXRpY19jYXN0PEluZGV4ZWREQjo6VHJhbnNhY3Rp
b25Nb2RlPihtb2RlKSk7CisKKyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47
CisKKyAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKTsK
KyAgICBtX3RyYW5zYWN0aW9ucy5hZGQodHJhbnNhY3Rpb25JZCwgdHJhbnNhY3Rpb24uZ2V0KCkp
OworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5Db25uZWN0aW9uKFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VD
YWxsYmFja3M+IHBycERhdGFiYXNlQ2FsbGJhY2tzLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGlu
dDY0X3QgdmVyc2lvbikKK3sKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUuZ2V0KCkpOworICAg
IFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBSZWZQ
dHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzID0gcHJwRGF0YWJhc2VD
YWxsYmFja3M7CisKKyAgICBpZiAoIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSB8fCBt
X3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pIHsKKyAgICAgICAgbV9wZW5kaW5nT3Bl
bkNhbGxzLmFwcGVuZChQZW5kaW5nT3BlbkNhbGw6OmNyZWF0ZShjYWxsYmFja3MsIGRhdGFiYXNl
Q2FsbGJhY2tzLCB0cmFuc2FjdGlvbklkLCB2ZXJzaW9uKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAobV9tZXRhZGF0YS5pZCA9PSBJbnZhbGlkSWQpIHsKKyAgICAgICAgLy8g
VGhlIGRhdGFiYXNlIHdhcyBkZWxldGVkIHRoZW4gaW1tZWRpYXRlbHkgcmUtb3BlbmVkOyBvcGVu
SW50ZXJuYWwoKSByZWNyZWF0ZXMgaXQgaW4gdGhlIGJhY2tpbmcgc3RvcmUuCisgICAgICAgIGlm
IChvcGVuSW50ZXJuYWwoKSkKKyAgICAgICAgICAgIEFTU0VSVChtX21ldGFkYXRhLnZlcnNpb24g
PT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBTdHJpbmcgbWVzc2FnZTsKKyAgICAgICAgICAgIFJlZlB0cjxJREJEYXRhYmFz
ZUVycm9yPiBlcnJvcjsKKyAgICAgICAgICAgIGlmICh2ZXJzaW9uID09IElEQkRhdGFiYXNlTWV0
YWRhdGE6Ok5vSW50VmVyc2lvbikKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gIkludGVybmFs
IGVycm9yIG9wZW5pbmcgZGF0YWJhc2Ugd2l0aCBubyB2ZXJzaW9uIHNwZWNpZmllZC4iOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgi
SW50ZXJuYWwgZXJyb3Igb3BlbmluZyBkYXRhYmFzZSB3aXRoIHZlcnNpb24gJWxsZCIsIHN0YXRp
Y19jYXN0PGxvbmcgbG9uZz4odmVyc2lvbikpOworICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVy
cm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93
bkVycm9yLCBtZXNzYWdlKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBXZSBpbmZlciB0aGF0IHRoZSBkYXRhYmFzZSBkaWRuJ3QgZXhpc3QgZnJvbSBp
dHMgbGFjayBvZiBlaXRoZXIgdHlwZSBvZiB2ZXJzaW9uLgorICAgIGJvb2wgaXNOZXdEYXRhYmFz
ZSA9IG1fbWV0YWRhdGEudmVyc2lvbiA9PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNp
b247CisKKyAgICBpZiAodmVyc2lvbiA9PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpEZWZhdWx0SW50
VmVyc2lvbikgeworICAgICAgICAvLyBGSVhNRTogdGhpcyBjb21tZW50cyB3YXMgcmVsYXRlZCB0
byBDaHJvbWl1bSBjb2RlLiBJdCBtYXkgYmUgaW5jb3JyZWN0CisgICAgICAgIC8vIEZvciB1bml0
IHRlc3RzIG9ubHkgLSBza2lwIHVwZ3JhZGUgc3RlcHMuIENhbGxpbmcgZnJvbSBzY3JpcHQgd2l0
aCBEZWZhdWx0SW50VmVyc2lvbiB0aHJvd3MgZXhjZXB0aW9uLgorICAgICAgICBBU1NFUlQoaXNO
ZXdEYXRhYmFzZSk7CisgICAgICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKGRhdGFiYXNl
Q2FsbGJhY2tzKTsKKyAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3ModGhpcywgdGhpcy0+bWV0
YWRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodmVyc2lvbiA9PSBJ
REJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24pIHsKKyAgICAgICAgaWYgKCFpc05ld0Rh
dGFiYXNlKSB7CisgICAgICAgICAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmFkZChSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+KGRhdGFiYXNlQ2FsbGJhY2tzKSk7CisgICAgICAgICAgICBj
YWxsYmFja3MtPm9uU3VjY2Vzcyh0aGlzLCB0aGlzLT5tZXRhZGF0YSgpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBTcGVjIHNheXM6IElmIG5vIHZlcnNpb24g
aXMgc3BlY2lmaWVkIGFuZCBubyBkYXRhYmFzZSBleGlzdHMsIHNldCBkYXRhYmFzZSB2ZXJzaW9u
IHRvIDEuCisgICAgICAgIHZlcnNpb24gPSAxOworICAgIH0KKworICAgIC8vIEZJWE1FOiBEYXRh
YmFzZSB2ZXJzaW9ucyBhcmUgbm93IG9mIHR5cGUgdWludDY0X3QsIGJ1dCB0aGlzIGNvZGUgZXhw
ZWN0ZWQgaW50NjRfdC4KKyAgICBpZiAodmVyc2lvbiA+IChpbnQ2NF90KW1fbWV0YWRhdGEudmVy
c2lvbikgeworICAgICAgICBydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oY2FsbGJhY2tz
LCBkYXRhYmFzZUNhbGxiYWNrcywgdHJhbnNhY3Rpb25JZCwgdmVyc2lvbik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogRGF0YWJhc2UgdmVyc2lvbnMgYXJlIG5vdyBv
ZiB0eXBlIHVpbnQ2NF90LCBidXQgdGhpcyBjb2RlIGV4cGVjdGVkIGludDY0X3QuCisgICAgaWYg
KHZlcnNpb24gPCAoaW50NjRfdCltX21ldGFkYXRhLnZlcnNpb24pIHsKKyAgICAgICAgY2FsbGJh
Y2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VmVyc2lvbkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiVGhlIHJlcXVlc3RlZCB2ZXJzaW9uICgl
bGxkKSBpcyBsZXNzIHRoYW4gdGhlIGV4aXN0aW5nIHZlcnNpb24gKCVsbGQpLiIsIHN0YXRpY19j
YXN0PGxvbmcgbG9uZz4odmVyc2lvbiksIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4obV9tZXRhZGF0
YS52ZXJzaW9uKSkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBE
YXRhYmFzZSB2ZXJzaW9ucyBhcmUgbm93IG9mIHR5cGUgdWludDY0X3QsIGJ1dCB0aGlzIGNvZGUg
ZXhwZWN0ZWQgaW50NjRfdC4KKyAgICBBU1NFUlQodmVyc2lvbiA9PSAoaW50NjRfdCltX21ldGFk
YXRhLnZlcnNpb24pOworICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKGRhdGFiYXNlQ2Fs
bGJhY2tzKTsKKyAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyh0aGlzLCB0aGlzLT5tZXRhZGF0YSgp
KTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpydW5JbnRWZXJzaW9uQ2hhbmdl
VHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwRGF0YWJhc2VDYWxsYmFja3MsIGludDY0X3Qg
dHJhbnNhY3Rpb25JZCwgaW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKQoreworICAgIFJlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBSZWZQdHI8SURCRGF0
YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzID0gcHJwRGF0YWJhc2VDYWxsYmFja3M7
CisgICAgQVNTRVJUKGNhbGxiYWNrcyk7CisgICAgZm9yIChEYXRhYmFzZUNhbGxiYWNrc1NldDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmJlZ2luKCk7IGl0ICE9
IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgLy8gRnJvbnQg
ZW5kIGVuc3VyZXMgdGhlIGV2ZW50IGlzIG5vdCBmaXJlZCBhdCBjb25uZWN0aW9ucyB0aGF0IGhh
dmUgY2xvc2VQZW5kaW5nIHNldC4KKyAgICAgICAgaWYgKCppdCAhPSBkYXRhYmFzZUNhbGxiYWNr
cykKKyAgICAgICAgICAgICgqaXQpLT5vblZlcnNpb25DaGFuZ2UobV9tZXRhZGF0YS52ZXJzaW9u
LCByZXF1ZXN0ZWRWZXJzaW9uLCBJbmRleGVkREI6Ok51bGxWZXJzaW9uKTsKKyAgICB9CisgICAg
Ly8gVGhlIHNwZWMgZGljdGF0ZXMgd2Ugd2FpdCB1bnRpbCBhbGwgdGhlIHZlcnNpb24gY2hhbmdl
IGV2ZW50cyBhcmUKKyAgICAvLyBkZWxpdmVyZWQgYW5kIHRoZW4gY2hlY2sgbV9kYXRhYmFzZUNh
bGxiYWNrcy5lbXB0eSgpIGJlZm9yZSBwcm9jZWVkaW5nCisgICAgLy8gb3IgZmlyaW5nIGEgYmxv
Y2tlZCBldmVudCwgYnV0IGluc3RlYWQgd2Ugc2hvdWxkIGJlIGNvbnNpc3RlbnQgd2l0aCBob3cK
KyAgICAvLyB0aGUgb2xkIHNldFZlcnNpb24gKGluY29ycmVjdGx5KSBkaWQgaXQuCisgICAgLy8g
RklYTUU6IFJlbW92ZSB0aGUgY2FsbCB0byBvbkJsb2NrZWQgYW5kIGluc3RlYWQgd2FpdCB1bnRp
bCB0aGUgZnJvbnRlbmQKKyAgICAvLyB0ZWxscyB1cyB0aGF0IGFsbCB0aGUgYmxvY2tlZCBldmVu
dHMgaGF2ZSBiZWVuIGRlbGl2ZXJlZC4gU2VlCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTcxMTMwCisgICAgaWYgKGNvbm5lY3Rpb25Db3VudCgpKQorICAg
ICAgICBjYWxsYmFja3MtPm9uQmxvY2tlZChtX21ldGFkYXRhLnZlcnNpb24pOworICAgIC8vIEZJ
WE1FOiBBZGQgdGVzdCBmb3IgbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLgorICAg
IGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwgY29ubmVjdGlvbkNvdW50
KCkpIHsKKyAgICAgICAgbV9wZW5kaW5nT3BlbkNhbGxzLmFwcGVuZChQZW5kaW5nT3BlbkNhbGw6
OmNyZWF0ZShjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzLCB0cmFuc2FjdGlvbklkLCByZXF1
ZXN0ZWRWZXJzaW9uKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8aW50
NjRfdD4gb2JqZWN0U3RvcmVJZHM7CisgICAgY3JlYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25J
ZCwgZGF0YWJhc2VDYWxsYmFja3MsIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0
aW9uVmVyc2lvbkNoYW5nZSk7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZT4gdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisK
KyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uKHRyYW5zYWN0
aW9uSWQsIHJlcXVlc3RlZFZlcnNpb24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MsIG1f
bWV0YWRhdGEpOworCisgICAgQVNTRVJUKCFtX3BlbmRpbmdTZWNvbmRIYWxmT3Blbik7CisgICAg
bV9kYXRhYmFzZUNhbGxiYWNrc1NldC5hZGQoZGF0YWJhc2VDYWxsYmFja3MpOworfQorCit2b2lk
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBwcnBDYWxsYmFja3MpCit7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzID0gcHJwQ2FsbGJhY2tzOworICAgIGlmIChpc0RlbGV0ZURhdGFiYXNlQmxvY2tlZCgpKSB7
CisgICAgICAgIGZvciAoRGF0YWJhc2VDYWxsYmFja3NTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9kYXRhYmFzZUNhbGxiYWNrc1NldC5iZWdpbigpOyBpdCAhPSBtX2RhdGFiYXNlQ2FsbGJhY2tz
U2V0LmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICAvLyBGcm9udCBlbmQgZW5zdXJlcyB0aGUg
ZXZlbnQgaXMgbm90IGZpcmVkIGF0IGNvbm5lY3Rpb25zIHRoYXQgaGF2ZSBjbG9zZVBlbmRpbmcg
c2V0LgorICAgICAgICAgICAgKCppdCktPm9uVmVyc2lvbkNoYW5nZShtX21ldGFkYXRhLnZlcnNp
b24sIDAsIEluZGV4ZWREQjo6TnVsbFZlcnNpb24pOworICAgICAgICB9CisgICAgICAgIC8vIEZJ
WE1FOiBPbmx5IGZpcmUgb25CbG9ja2VkIGlmIHRoZXJlIGFyZSBvcGVuIGNvbm5lY3Rpb25zIGFm
dGVyIHRoZQorICAgICAgICAvLyBWZXJzaW9uQ2hhbmdlRXZlbnRzIGFyZSByZWNlaXZlZCwgbm90
IGp1c3Qgc2V0IHVwIHRvIGZpcmUuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03MTEzMAorICAgICAgICBjYWxsYmFja3MtPm9uQmxvY2tlZChtX21l
dGFkYXRhLnZlcnNpb24pOworICAgICAgICBtX3BlbmRpbmdEZWxldGVDYWxscy5hcHBlbmQoUGVu
ZGluZ0RlbGV0ZUNhbGw6OmNyZWF0ZShjYWxsYmFja3MucmVsZWFzZSgpKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgZGVsZXRlRGF0YWJhc2VGaW5hbChjYWxsYmFja3MucmVsZWFzZSgp
KTsKK30KKworYm9vbCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjppc0RlbGV0ZURhdGFiYXNlQmxv
Y2tlZCgpCit7CisgICAgcmV0dXJuIGNvbm5lY3Rpb25Db3VudCgpOworfQorCit2b2lkIElEQkRh
dGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlRmluYWwoUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBBU1NFUlQoIWlzRGVsZXRlRGF0YWJhc2VCbG9ja2Vk
KCkpOworICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7CisgICAgaWYgKCFtX2JhY2tpbmdTdG9y
ZS0+ZGVsZXRlRGF0YWJhc2UobV9tZXRhZGF0YS5uYW1lKSkgeworICAgICAgICBjYWxsYmFja3Mt
Pm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpV
bmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBkZWxldGluZyBkYXRhYmFzZS4iKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgbV9tZXRhZGF0YS5pZCA9IEludmFsaWRJZDsKKyAgICBt
X21ldGFkYXRhLnZlcnNpb24gPSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb247Cisg
ICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY2xlYXIoKTsKKyAgICBjYWxsYmFja3MtPm9uU3Vj
Y2VzcygpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNsb3NlKFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IHBycENhbGxiYWNrcykKK3sKKyAgICBSZWZQdHI8SURC
RGF0YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBBU1NFUlQo
bV9kYXRhYmFzZUNhbGxiYWNrc1NldC5jb250YWlucyhjYWxsYmFja3MpKTsKKworICAgIG1fZGF0
YWJhc2VDYWxsYmFja3NTZXQucmVtb3ZlKGNhbGxiYWNrcyk7CisgICAgaWYgKG1fcGVuZGluZ1Nl
Y29uZEhhbGZPcGVuICYmIG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLT5kYXRhYmFzZUNhbGxiYWNr
cygpID09IGNhbGxiYWNrcykgeworICAgICAgICBtX3BlbmRpbmdTZWNvbmRIYWxmT3Blbi0+Y2Fs
bGJhY2tzKCktPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpBYm9ydEVycm9yLCAiVGhlIGNvbm5lY3Rpb24gd2FzIGNsb3NlZC4iKSk7CisgICAg
ICAgIG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLnJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAo
Y29ubmVjdGlvbkNvdW50KCkgPiAxKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBwcm9jZXNz
UGVuZGluZ0NhbGxzIGFsbG93cyB0aGUgaW5zcGVjdG9yIHRvIHByb2Nlc3MgYSBwZW5kaW5nIG9w
ZW4gY2FsbAorICAgIC8vIGFuZCBjYWxsIGNsb3NlLCByZWVudGVyaW5nIElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OmNsb3NlLiBUaGVuIHRoZQorICAgIC8vIGJhY2tlbmQgd291bGQgYmUgcmVtb3Zl
ZCBib3RoIGJ5IHRoZSBpbnNwZWN0b3IgY2xvc2luZyBpdHMgY29ubmVjdGlvbiwgYW5kCisgICAg
Ly8gYnkgdGhlIGNvbm5lY3Rpb24gdGhhdCBmaXJzdCBjYWxsZWQgY2xvc2UuCisgICAgLy8gVG8g
YXZvaWQgdGhhdCBzaXR1YXRpb24sIGRvbid0IHByb2NlZWQgaW4gY2FzZSBvZiByZWVudHJhbmN5
LgorICAgIGlmIChtX2Nsb3NpbmdDb25uZWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgVGVt
cG9yYXJ5Q2hhbmdlPGJvb2w+IGNsb3NpbmdDb25uZWN0aW9uKG1fY2xvc2luZ0Nvbm5lY3Rpb24s
IHRydWUpOworICAgIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKKworICAgIC8vIEZJWE1FOiBBZGQg
YSB0ZXN0IGZvciB0aGUgbV9wZW5kaW5nT3BlbkNhbGxzIGNhc2VzIGJlbG93LgorICAgIGlmICgh
Y29ubmVjdGlvbkNvdW50KCkgJiYgIW1fcGVuZGluZ09wZW5DYWxscy5zaXplKCkgJiYgIW1fcGVu
ZGluZ0RlbGV0ZUNhbGxzLnNpemUoKSkgeworICAgICAgICBUcmFuc2FjdGlvbk1hcCB0cmFuc2Fj
dGlvbnMobV90cmFuc2FjdGlvbnMpOworICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4g
ZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVu
a25vd25FcnJvciwgIkNvbm5lY3Rpb24gaXMgY2xvc2luZy4iKTsKKyAgICAgICAgZm9yIChUcmFu
c2FjdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3I6OlZhbHVlcyBpdCA9IHRyYW5zYWN0aW9ucy52YWx1
ZXMoKS5iZWdpbigpLCBlbmQgPSB0cmFuc2FjdGlvbnMudmFsdWVzKCkuZW5kKCk7IGl0ICE9IGVu
ZDsgKytpdCkKKyAgICAgICAgICAgICgqaXQpLT5hYm9ydChlcnJvcik7CisKKyAgICAgICAgQVNT
RVJUKG1fdHJhbnNhY3Rpb25zLmlzRW1wdHkoKSk7CisKKyAgICAgICAgbV9iYWNraW5nU3RvcmUu
Y2xlYXIoKTsKKworICAgICAgICAvLyBUaGlzIGNoZWNrIHNob3VsZCBvbmx5IGJlIGZhbHNlIGlu
IHVuaXQgdGVzdHMuCisgICAgICAgIEFTU0VSVChtX2ZhY3RvcnkpOworICAgICAgICBpZiAobV9m
YWN0b3J5KQorICAgICAgICAgICAgbV9mYWN0b3J5LT5yZW1vdmVJREJEYXRhYmFzZUJhY2tlbmQo
bV9pZGVudGlmaWVyKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNzM2M2YKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgK
QEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQkRhdGFiYXNlQmFja2VuZEltcGxf
aAorI2RlZmluZSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsX2gKKworI2luY2x1ZGUgIklEQkNhbGxi
YWNrcy5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiSURC
TWV0YWRhdGEuaCIKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgor
CisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOworY2xhc3MgSURCRGF0YWJhc2U7CitjbGFz
cyBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZTsKK2NsYXNzIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZTsKK2NsYXNzIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I7CisKK2NsYXNzIElE
QkRhdGFiYXNlQmFja2VuZEltcGwgRklOQUwgOiBwdWJsaWMgSURCRGF0YWJhc2VCYWNrZW5kSW50
ZXJmYWNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tl
bmRJbXBsPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmVJbnRlcmZh
Y2UqLCBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSosIGNvbnN0IFN0cmluZyYgdW5pcXVlSWRl
bnRpZmllcik7CisgICAgdmlydHVhbCB+SURCRGF0YWJhc2VCYWNrZW5kSW1wbCgpOworCisgICAg
SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUoKSBjb25zdDsKKworICAgIHN0
YXRpYyBjb25zdCBpbnQ2NF90IEludmFsaWRJZCA9IDA7CisgICAgaW50NjRfdCBpZCgpIGNvbnN0
IHsgcmV0dXJuIG1fbWV0YWRhdGEuaWQ7IH0KKyAgICB2b2lkIGFkZE9iamVjdFN0b3JlKGNvbnN0
IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBpbnQ2NF90IG5ld01heE9iamVjdFN0b3JlSWQpOwor
ICAgIHZvaWQgcmVtb3ZlT2JqZWN0U3RvcmUoaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKKyAgICB2
b2lkIGFkZEluZGV4KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0
YSYsIGludDY0X3QgbmV3TWF4SW5kZXhJZCk7CisgICAgdm9pZCByZW1vdmVJbmRleChpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCk7CisKKyAgICB2b2lkIG9wZW5Db25uZWN0
aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxi
YWNrcz4sIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCB2ZXJzaW9uKTsKKyAgICB2b2lk
IGRlbGV0ZURhdGFiYXNlKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAgY29uc3QgSURC
RGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhOyB9
CisKKyAgICAvLyBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UKKyAgICB2aXJ0dWFsIHZvaWQg
Y3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0lu
Y3JlbWVudCk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QgdHJh
bnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3Jl
YXRlVHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgdW5z
aWduZWQgc2hvcnQgbW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlKFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VDYWxsYmFja3M+KTsKKworICAgIHZpcnR1YWwgdm9pZCBjb21taXQoaW50NjRfdCB0
cmFuc2FjdGlvbklkKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoaW50NjRfdCB0cmFuc2FjdGlv
bklkKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNz
UmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KTsKKworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJbmRl
eChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIHVuaXF1
ZSwgYm9vbCBtdWx0aUVudHJ5KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoaW50NjRf
dCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCk7
CisKKyAgICBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiB0cmFuc2FjdGlvbkNvb3JkaW5hdG9y
KCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpOyB9CisgICAg
dm9pZCB0cmFuc2FjdGlvblN0YXJ0ZWQoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7
CisgICAgdm9pZCB0cmFuc2FjdGlvbkZpbmlzaGVkKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSopOworICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZEFuZENvbXBsZXRlRmlyZWQoSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7CisgICAgdm9pZCB0cmFuc2FjdGlvbkZpbmlz
aGVkQW5kQWJvcnRGaXJlZChJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKKworICAg
IHZpcnR1YWwgdm9pZCBnZXQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIGJvb2wga2V5
T25seSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgcHV0KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRz
LCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRJbmRleEtleXMoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8aW50NjRfdD4m
IGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBzZXRJbmRleGVzUmVhZHkoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
LCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiwgYm9vbCBrZXlPbmx5LCBUYXNrVHlwZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY291bnQo
aW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPikg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVJhbmdlKGludDY0X3QgdHJhbnNhY3Rp
b25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXIo
aW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsKCkgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgY2xhc3MgVmVy
c2lvbkNoYW5nZU9wZXJhdGlvbjsKKyAgICBjbGFzcyBWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRp
b247CisKK3ByaXZhdGU6CisgICAgSURCRGF0YWJhc2VCYWNrZW5kSW1wbChjb25zdCBTdHJpbmcm
IG5hbWUsIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSosIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJm
YWNlKiwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKTsKKworICAgIGJvb2wgb3Blbklu
dGVybmFsKCk7CisgICAgdm9pZCBydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgaW50
NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24pOworICAgIHNpemVf
dCBjb25uZWN0aW9uQ291bnQoKTsKKyAgICB2b2lkIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKKwor
ICAgIGJvb2wgaXNEZWxldGVEYXRhYmFzZUJsb2NrZWQoKTsKKyAgICB2b2lkIGRlbGV0ZURhdGFi
YXNlRmluYWwoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKworICAgIFJlZlB0cjxJREJCYWNr
aW5nU3RvcmVJbnRlcmZhY2U+IG1fYmFja2luZ1N0b3JlOworICAgIElEQkRhdGFiYXNlTWV0YWRh
dGEgbV9tZXRhZGF0YTsKKworICAgIFN0cmluZyBtX2lkZW50aWZpZXI7CisgICAgLy8gVGhpcyBt
aWdodCBub3QgbmVlZCB0byBiZSBhIFJlZlB0ciBzaW5jZSB0aGUgZmFjdG9yeSdzIGxpZmV0aW1l
IGlzIHRoYXQgb2YgdGhlIHBhZ2UgZ3JvdXAsIGJ1dCBpdCdzIGJldHRlciB0byBiZSBjb25zZXJ2
aXRpdmUgdGhhbiBzb3JyeS4KKyAgICBSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+
IG1fZmFjdG9yeTsKKworICAgIE93blB0cjxJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yPiBtX3Ry
YW5zYWN0aW9uQ29vcmRpbmF0b3I7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZT4gbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uOworCisgICAgdHlwZWRl
ZiBIYXNoTWFwPGludDY0X3QsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSo+IFRyYW5z
YWN0aW9uTWFwOworICAgIFRyYW5zYWN0aW9uTWFwIG1fdHJhbnNhY3Rpb25zOworCisgICAgY2xh
c3MgUGVuZGluZ09wZW5DYWxsIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzT3du
UHRyPFBlbmRpbmdPcGVuQ2FsbD4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tz
LCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3QgdmVyc2lvbikKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQZW5kaW5nT3BlbkNhbGwoY2FsbGJhY2tzLCBk
YXRhYmFzZUNhbGxiYWNrcywgdHJhbnNhY3Rpb25JZCwgdmVyc2lvbikpOworICAgICAgICB9Cisg
ICAgICAgIElEQkNhbGxiYWNrcyogY2FsbGJhY2tzKCkgeyByZXR1cm4gbV9jYWxsYmFja3MuZ2V0
KCk7IH0KKyAgICAgICAgSURCRGF0YWJhc2VDYWxsYmFja3MqIGRhdGFiYXNlQ2FsbGJhY2tzKCkg
eyByZXR1cm4gbV9kYXRhYmFzZUNhbGxiYWNrcy5nZXQoKTsgfQorICAgICAgICBpbnQ2NF90IHZl
cnNpb24oKSB7IHJldHVybiBtX3ZlcnNpb247IH0KKyAgICAgICAgaW50NjRfdCB0cmFuc2FjdGlv
bklkKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbklkOyB9CisKKyAgICBwcml2YXRlOgor
ICAgICAgICBQZW5kaW5nT3BlbkNhbGwoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MsIGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCB2ZXJzaW9uKQorICAgICAgICAgICAgOiBtX2Nh
bGxiYWNrcyhjYWxsYmFja3MpCisgICAgICAgICAgICAsIG1fZGF0YWJhc2VDYWxsYmFja3MoZGF0
YWJhc2VDYWxsYmFja3MpCisgICAgICAgICAgICAsIG1fdmVyc2lvbih2ZXJzaW9uKQorICAgICAg
ICAgICAgLCBtX3RyYW5zYWN0aW9uSWQodHJhbnNhY3Rpb25JZCkKKyAgICAgICAgeworICAgICAg
ICB9CisgICAgICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOworICAgICAgICBS
ZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IG1fZGF0YWJhc2VDYWxsYmFja3M7CisgICAgICAg
IGludDY0X3QgbV92ZXJzaW9uOworICAgICAgICBjb25zdCBpbnQ2NF90IG1fdHJhbnNhY3Rpb25J
ZDsKKyAgICB9OworCisgICAgRGVxdWU8T3duUHRyPFBlbmRpbmdPcGVuQ2FsbD4+IG1fcGVuZGlu
Z09wZW5DYWxsczsKKyAgICBPd25QdHI8UGVuZGluZ09wZW5DYWxsPiBtX3BlbmRpbmdTZWNvbmRI
YWxmT3BlbjsKKworICAgIGNsYXNzIFBlbmRpbmdEZWxldGVDYWxsIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPFBlbmRpbmdEZWxldGVDYWxsPiBjcmVhdGUoUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBQZW5kaW5nRGVsZXRlQ2FsbChjYWxsYmFja3MpKTsKKyAgICAgICAg
fQorICAgICAgICBJREJDYWxsYmFja3MqIGNhbGxiYWNrcygpIHsgcmV0dXJuIG1fY2FsbGJhY2tz
LmdldCgpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBQZW5kaW5nRGVsZXRlQ2FsbChQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgICAgICAgICAgOiBtX2NhbGxiYWNr
cyhjYWxsYmFja3MpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICBSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBtX2NhbGxiYWNrczsKKyAgICB9OworCisgICAgRGVxdWU8T3duUHRyPFBlbmRpbmdE
ZWxldGVDYWxsPj4gbV9wZW5kaW5nRGVsZXRlQ2FsbHM7CisKKyAgICB0eXBlZGVmIExpc3RIYXNo
U2V0PFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4+IERhdGFiYXNlQ2FsbGJhY2tzU2V0Owor
ICAgIERhdGFiYXNlQ2FsbGJhY2tzU2V0IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQ7CisKKyAgICBi
b29sIG1fY2xvc2luZ0Nvbm5lY3Rpb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2VuZGlmIC8vIElEQkRhdGFi
YXNlQmFja2VuZEltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaAppbmRleCA2ZDRlY2Fk
Li4zYTg2ODE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaApAQCAtMzYsNiArMzYsNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIElEQkJhY2tpbmdTdG9yZUludGVyZmFj
ZTsKIGNsYXNzIElEQkNhbGxiYWNrczsKIGNsYXNzIElEQkRhdGFiYXNlQ2FsbGJhY2tzOwogY2xh
c3MgSURCS2V5OwpAQCAtNTQsNiArNTUsOCBAQCBjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbnRl
cmZhY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhYwogcHVi
bGljOgogICAgIHZpcnR1YWwgfklEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZSgpIHsgfQogCisg
ICAgLy92aXJ0dWFsIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlKCkgY29u
c3QgPSAwOworCiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgdHJh
bnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVHJhbnNhY3Rpb24oaW50NjRf
dCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29uc3Qg
VmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgdW5zaWduZWQgc2hvcnQgbW9kZSkgPSAw
OwpAQCAtODksNiArOTIsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNvdW50KGludDY0
X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUmFuZ2UoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoaW50NjRfdCB0cmFuc2Fj
dGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPikg
PSAwOworCisgICAgdmlydHVhbCBib29sIGlzSURCRGF0YWJhc2VCYWNrZW5kSW1wbCgpIHsgcmV0
dXJuIGZhbHNlOyB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJ
bnRlcmZhY2UuaAppbmRleCA3OTIyMzk4Li4yZjAxM2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJm
YWNlLmgKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSURCQmFj
a2luZ1N0b3JlSW50ZXJmYWNlOwogY2xhc3MgSURCQ2FsbGJhY2tzOwogY2xhc3MgSURCRGF0YWJh
c2U7Ci1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOyAvLyBGSVhNRTogVGhpcyBpcyBh
IExldmVsREIgc3BlY2lmaWMgdHlwZSBmb3Igbm93LiBodHRwOi8vd2Via2l0Lm9yZy9iLzEyMzAy
NyB3aWxsIGZpeCB0aGF0LgorY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOwogY2xh
c3MgSURCRGF0YWJhc2VDYWxsYmFja3M7CiBjbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2U7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUlEQkRhdGFiYXNlQmFja2VuZChjb25zdCBTdHJpbmcm
IHVuaXF1ZUlkZW50aWZpZXIpID0gMDsKIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZVRyYW5zYWN0aW9uQmFja2VuZChJREJEYXRh
YmFzZUJhY2tlbmRMZXZlbERCKiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlk
cywgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBtYXliZUNyZWF0ZVRyYW5zYWN0aW9u
QmFja2VuZChJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UqLCBpbnQ2NF90IHRyYW5zYWN0aW9u
SWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBjb25zdCBWZWN0b3I8aW50NjRf
dD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSkgPSAwOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkN1cnNvckJhY2tlbmRMZXZl
bERCLmNwcAppbmRleCAyOWE1OTgwLi40MjQ1NzdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkN1cnNvckJhY2tlbmRMZXZlbERCLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkN1cnNvckJh
Y2tlbmRMZXZlbERCLmNwcApAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiSURCQmFja2lu
Z1N0b3JlTGV2ZWxEQi5oIgogI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgotI2luY2x1ZGUgIklE
QkRhdGFiYXNlQmFja2VuZExldmVsREIuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3MuaCIKICNpbmNsdWRlICJJREJE
YXRhYmFzZUVycm9yLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQ3Vyc29y
QmFja2VuZExldmVsREIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVs
ZGIvSURCQ3Vyc29yQmFja2VuZExldmVsREIuaAppbmRleCBiMmRlZWEzLi43ZjcxMzQ2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkN1cnNv
ckJhY2tlbmRMZXZlbERCLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
bGV2ZWxkYi9JREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5oCkBAIC0zMSw3ICszMSw3IEBACiAKICNp
bmNsdWRlICJJREJCYWNraW5nU3RvcmVMZXZlbERCLmgiCiAjaW5jbHVkZSAiSURCQ3Vyc29yQmFj
a2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZExldmVsREIuaCIK
KyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNh
Y3Rpb25CYWNrZW5kTGV2ZWxEQi5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTc2LDcgKzc2LDcgQEAgcHJpdmF0ZToKIAogICAgIElEQkRh
dGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgbV90YXNrVHlwZTsKICAgICBJbmRleGVk
REI6OkN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOwotICAgIGNvbnN0IFJlZlB0cjxJREJEYXRhYmFz
ZUJhY2tlbmRMZXZlbERCPiBtX2RhdGFiYXNlOworICAgIGNvbnN0IFJlZlB0cjxJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsPiBtX2RhdGFiYXNlOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRMZXZlbERCPiBtX3RyYW5zYWN0aW9uOwogICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9y
ZUlkOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZl
bGRiL0lEQkRhdGFiYXNlQmFja2VuZExldmVsREIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGV2ZWxkYi9JREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0NDU4Zi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkRhdGFiYXNlQmFja2VuZExldmVsREIu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjIxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQi5oIgotCi0jaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJCYWNraW5nU3RvcmVJbnRlcmZh
Y2UuaCIKLSNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAi
SURCRGF0YWJhc2VDYWxsYmFja3MuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5o
IgotI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiSURC
SW5kZXhXcml0ZXIuaCIKLSNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgotI2luY2x1ZGUgIklEQlJl
Y29yZElkZW50aWZpZXIuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCi0jaW5jbHVkZSAi
TG9nZ2luZy5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9UZW1w
b3JhcnlDaGFuZ2UuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzUmVmUHRyPElEQkRh
dGFiYXNlQmFja2VuZExldmVsREI+IElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmNyZWF0ZShj
b25zdCBTdHJpbmcmIG5hbWUsIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3Jl
LCBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSogZmFjdG9yeSwgY29uc3QgU3RyaW5nJiB1bmlx
dWVJZGVudGlmaWVyKQotewotICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCPiBi
YWNrZW5kID0gYWRvcHRSZWYobmV3IElEQkRhdGFiYXNlQmFja2VuZExldmVsREIobmFtZSwgYmFj
a2luZ1N0b3JlLCBmYWN0b3J5LCB1bmlxdWVJZGVudGlmaWVyKSk7Ci0gICAgaWYgKCFiYWNrZW5k
LT5vcGVuSW50ZXJuYWwoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGJhY2tlbmQu
cmVsZWFzZSgpOwotfQotCi1JREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpJREJEYXRhYmFzZUJh
Y2tlbmRMZXZlbERCKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNl
KiBiYWNraW5nU3RvcmUsIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKiBmYWN0b3J5LCBjb25z
dCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpCi0gICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5n
U3RvcmUpCi0gICAgLCBtX21ldGFkYXRhKG5hbWUsIEludmFsaWRJZCwgMCwgSW52YWxpZElkKQot
ICAgICwgbV9pZGVudGlmaWVyKHVuaXF1ZUlkZW50aWZpZXIpCi0gICAgLCBtX2ZhY3RvcnkoZmFj
dG9yeSkKLSAgICAsIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvcihJREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yOjpjcmVhdGUoKSkKLSAgICAsIG1fY2xvc2luZ0Nvbm5lY3Rpb24oZmFsc2UpCi17Ci0g
ICAgQVNTRVJUKCFtX21ldGFkYXRhLm5hbWUuaXNOdWxsKCkpOwotfQotCi12b2lkIElEQkRhdGFi
YXNlQmFja2VuZExldmVsREI6OmFkZE9iamVjdFN0b3JlKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0
YWRhdGEmIG9iamVjdFN0b3JlLCBpbnQ2NF90IG5ld01heE9iamVjdFN0b3JlSWQpCi17Ci0gICAg
QVNTRVJUKCFtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZS5pZCkp
OwotICAgIGlmIChuZXdNYXhPYmplY3RTdG9yZUlkICE9IElEQk9iamVjdFN0b3JlTWV0YWRhdGE6
OkludmFsaWRJZCkgewotICAgICAgICBBU1NFUlQobV9tZXRhZGF0YS5tYXhPYmplY3RTdG9yZUlk
IDwgbmV3TWF4T2JqZWN0U3RvcmVJZCk7Ci0gICAgICAgIG1fbWV0YWRhdGEubWF4T2JqZWN0U3Rv
cmVJZCA9IG5ld01heE9iamVjdFN0b3JlSWQ7Ci0gICAgfQotICAgIG1fbWV0YWRhdGEub2JqZWN0
U3RvcmVzLnNldChvYmplY3RTdG9yZS5pZCwgb2JqZWN0U3RvcmUpOwotfQotCi12b2lkIElEQkRh
dGFiYXNlQmFja2VuZExldmVsREI6OnJlbW92ZU9iamVjdFN0b3JlKGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCkKLXsKLSAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2Jq
ZWN0U3RvcmVJZCkpOwotICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnJlbW92ZShvYmplY3RT
dG9yZUlkKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjphZGRJbmRleChp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4LCBpbnQ2
NF90IG5ld01heEluZGV4SWQpCi17Ci0gICAgQVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVz
LmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKLSAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9i
amVjdFN0b3JlID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOwot
Ci0gICAgQVNTRVJUKCFvYmplY3RTdG9yZS5pbmRleGVzLmNvbnRhaW5zKGluZGV4LmlkKSk7Ci0g
ICAgb2JqZWN0U3RvcmUuaW5kZXhlcy5zZXQoaW5kZXguaWQsIGluZGV4KTsKLSAgICBpZiAobmV3
TWF4SW5kZXhJZCAhPSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKLSAgICAgICAgQVNT
RVJUKG9iamVjdFN0b3JlLm1heEluZGV4SWQgPCBuZXdNYXhJbmRleElkKTsKLSAgICAgICAgb2Jq
ZWN0U3RvcmUubWF4SW5kZXhJZCA9IG5ld01heEluZGV4SWQ7Ci0gICAgfQotICAgIG1fbWV0YWRh
dGEub2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZUlkLCBvYmplY3RTdG9yZSk7Ci19Ci0KLXZv
aWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6cmVtb3ZlSW5kZXgoaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCi17Ci0gICAgQVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0
U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKLSAgICBJREJPYmplY3RTdG9yZU1ldGFk
YXRhIG9iamVjdFN0b3JlID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3Jl
SWQpOwotCi0gICAgQVNTRVJUKG9iamVjdFN0b3JlLmluZGV4ZXMuY29udGFpbnMoaW5kZXhJZCkp
OwotICAgIG9iamVjdFN0b3JlLmluZGV4ZXMucmVtb3ZlKGluZGV4SWQpOwotICAgIG1fbWV0YWRh
dGEub2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZUlkLCBvYmplY3RTdG9yZSk7Ci19Ci0KLWJv
b2wgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6b3BlbkludGVybmFsKCkKLXsKLSAgICBib29s
IHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBib29sIG9rID0gbV9iYWNraW5nU3RvcmUtPmdldElEQkRh
dGFiYXNlTWV0YURhdGEobV9tZXRhZGF0YS5uYW1lLCAmbV9tZXRhZGF0YSwgc3VjY2Vzcyk7Ci0g
ICAgQVNTRVJUX1dJVEhfTUVTU0FHRShzdWNjZXNzID09IChtX21ldGFkYXRhLmlkICE9IEludmFs
aWRJZCksICJzdWNjZXNzID0gJXMsIG1faWQgPSAlbGxkIiwgc3VjY2VzcyA/ICJ0cnVlIiA6ICJm
YWxzZSIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4obV9tZXRhZGF0YS5pZCkpOwotICAgIGlmICgh
b2spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoc3VjY2VzcykKLSAgICAgICAgcmV0
dXJuIG1fYmFja2luZ1N0b3JlLT5nZXRPYmplY3RTdG9yZXMobV9tZXRhZGF0YS5pZCwgJm1fbWV0
YWRhdGEub2JqZWN0U3RvcmVzKTsKLQotICAgIHJldHVybiBtX2JhY2tpbmdTdG9yZS0+Y3JlYXRl
SURCRGF0YWJhc2VNZXRhRGF0YShtX21ldGFkYXRhLm5hbWUsIFN0cmluZzo6bnVtYmVyKG1fbWV0
YWRhdGEudmVyc2lvbiksIG1fbWV0YWRhdGEudmVyc2lvbiwgbV9tZXRhZGF0YS5pZCk7Ci19Ci0K
LUlEQkRhdGFiYXNlQmFja2VuZExldmVsREI6On5JREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCKCkK
LXsKLX0KLQotSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBJREJEYXRhYmFzZUJhY2tlbmRMZXZl
bERCOjpiYWNraW5nU3RvcmUoKSBjb25zdAotewotICAgIHJldHVybiBtX2JhY2tpbmdTdG9yZS5n
ZXQoKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpjcmVhdGVPYmplY3RT
dG9yZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1l
bnQpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpj
cmVhdGVPYmplY3RTdG9yZSIpOwotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSog
dHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7Ci0gICAgaWYg
KCF0cmFuc2FjdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+
bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKTsKLQotICAgIEFT
U0VSVCghbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOwot
ICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmVNZXRhZGF0YShuYW1lLCBvYmpl
Y3RTdG9yZUlkLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50LCBJREJEYXRhYmFzZUJhY2tlbmRJbnRl
cmZhY2U6Ok1pbmltdW1JbmRleElkKTsKLQotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZUNyZWF0
ZU9iamVjdFN0b3JlT3BlcmF0aW9uKG9iamVjdFN0b3JlTWV0YWRhdGEpOwotICAgIGFkZE9iamVj
dFN0b3JlKG9iamVjdFN0b3JlTWV0YWRhdGEsIG9iamVjdFN0b3JlSWQpOwotfQotCi12b2lkIElE
QkRhdGFiYXNlQmFja2VuZExldmVsREI6OmRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QgdHJhbnNh
Y3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAi
SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6ZGVsZXRlT2JqZWN0U3RvcmUiKTsKLSAgICBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMu
Z2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVy
bjsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0
aW9uVmVyc2lvbkNoYW5nZSk7Ci0KLSAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMu
Y29udGFpbnMob2JqZWN0U3RvcmVJZCkpOwotICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRh
dGEmIG9iamVjdFN0b3JlTWV0YWRhdGEgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2Jq
ZWN0U3RvcmVJZCk7Ci0KLSAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVEZWxldGVPYmplY3RTdG9y
ZU9wZXJhdGlvbihvYmplY3RTdG9yZU1ldGFkYXRhKTsKLSAgICByZW1vdmVPYmplY3RTdG9yZShv
YmplY3RTdG9yZUlkKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpjcmVh
dGVJbmRleChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBh
dGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEks
ICJJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpjcmVhdGVJbmRleCIpOwotICAgIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQo
dHJhbnNhY3Rpb25JZCk7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbikKLSAgICAgICAgcmV0dXJuOwot
ICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25W
ZXJzaW9uQ2hhbmdlKTsKLQotICAgIEFTU0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250
YWlucyhvYmplY3RTdG9yZUlkKSk7Ci0gICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBv
YmplY3RTdG9yZSA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsK
LQotICAgIEFTU0VSVCghb2JqZWN0U3RvcmUuaW5kZXhlcy5jb250YWlucyhpbmRleElkKSk7Ci0g
ICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBpbmRleE1ldGFkYXRhKG5hbWUsIGluZGV4SWQsIGtl
eVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSk7Ci0KLSAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVD
cmVhdGVJbmRleE9wZXJhdGlvbihvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKTsKLQotICAg
IGFkZEluZGV4KG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEsIGluZGV4SWQpOwotfQotCi12
b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmRlbGV0ZUluZGV4KGludDY0X3QgdHJhbnNh
Y3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCi17Ci0gICAg
TE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpkZWxldGVJbmRleCIp
OwotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24gPSBtX3Ry
YW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbikKLSAg
ICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWRE
Qjo6VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKTsKLQotICAgIEFTU0VSVChtX21ldGFkYXRhLm9i
amVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7Ci0gICAgY29uc3QgSURCT2JqZWN0
U3RvcmVNZXRhZGF0YSBvYmplY3RTdG9yZSA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChv
YmplY3RTdG9yZUlkKTsKLQotICAgIEFTU0VSVChvYmplY3RTdG9yZS5pbmRleGVzLmNvbnRhaW5z
KGluZGV4SWQpKTsKLSAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhID0g
b2JqZWN0U3RvcmUuaW5kZXhlcy5nZXQoaW5kZXhJZCk7Ci0KLSAgICB0cmFuc2FjdGlvbi0+c2No
ZWR1bGVEZWxldGVJbmRleE9wZXJhdGlvbihvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKTsK
LQotICAgIHJlbW92ZUluZGV4KG9iamVjdFN0b3JlSWQsIGluZGV4SWQpOwotfQotCi12b2lkIElE
QkRhdGFiYXNlQmFja2VuZExldmVsREI6OmNvbW1pdChpbnQ2NF90IHRyYW5zYWN0aW9uSWQpCi17
Ci0gICAgLy8gVGhlIGZyb250ZW5kIHN1Z2dlc3RzIHRoYXQgd2UgY29tbWl0LCBidXQgd2UgbWF5
IGhhdmUgcHJldmlvdXNseSBpbml0aWF0ZWQgYW4gYWJvcnQsIGFuZCBzbyBoYXZlIGRpc3Bvc2Vk
IG9mIHRoZSB0cmFuc2FjdGlvbi4gb25BYm9ydCBoYXMgYWxyZWFkeSBiZWVuIGRpc3BhdGNoZWQg
dG8gdGhlIGZyb250ZW5kLCBzbyBpdCB3aWxsIGZpbmQgb3V0IGFib3V0IHRoYXQgYXN5bmNocm9u
b3VzbHkuCi0gICAgaWYgKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKQot
ICAgICAgICBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCktPmNvbW1pdCgpOwotfQot
Ci12b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmFib3J0KGludDY0X3QgdHJhbnNhY3Rp
b25JZCkKLXsKLSAgICAvLyBJZiB0aGUgdHJhbnNhY3Rpb24gaXMgdW5rbm93biwgdGhlbiBpdCBo
YXMgYWxyZWFkeSBiZWVuIGFib3J0ZWQgYnkgdGhlIGJhY2tlbmQgYmVmb3JlIHRoaXMgY2FsbCBz
byBpdCBpcyBzYWZlIHRvIGlnbm9yZSBpdC4KLSAgICBpZiAobV90cmFuc2FjdGlvbnMuY29udGFp
bnModHJhbnNhY3Rpb25JZCkpCi0gICAgICAgIG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlv
bklkKS0+YWJvcnQoKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjphYm9y
dChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJy
b3IpCi17Ci0gICAgLy8gSWYgdGhlIHRyYW5zYWN0aW9uIGlzIHVua25vd24sIHRoZW4gaXQgaGFz
IGFscmVhZHkgYmVlbiBhYm9ydGVkIGJ5IHRoZSBiYWNrZW5kIGJlZm9yZSB0aGlzIGNhbGwgc28g
aXQgaXMgc2FmZSB0byBpZ25vcmUgaXQuCi0gICAgaWYgKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5z
KHRyYW5zYWN0aW9uSWQpKQotICAgICAgICBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25J
ZCktPmFib3J0KGVycm9yKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpn
ZXQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIGJvb2wga2V5T25seSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBMT0coU3RvcmFnZUFQ
SSwgIklEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmdldCIpOwotICAgIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNh
Y3Rpb25JZCk7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
dHJhbnNhY3Rpb24tPnNjaGVkdWxlR2V0T3BlcmF0aW9uKG1fbWV0YWRhdGEsIG9iamVjdFN0b3Jl
SWQsIGluZGV4SWQsIGtleVJhbmdlLCBrZXlPbmx5ID8gSW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5
IDogSW5kZXhlZERCOjpDdXJzb3JLZXlBbmRWYWx1ZSwgY2FsbGJhY2tzKTsKLX0KLQotdm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpwdXQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSwgUGFzc1Jl
ZlB0cjxJREJLZXk+IGtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0
b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0
YWJhc2VCYWNrZW5kTGV2ZWxEQjo6cHV0Iik7Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsK
LSAgICBpZiAoIXRyYW5zYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKHRyYW5z
YWN0aW9uLT5tb2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRPbmx5KTsKLQotICAg
IGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IG1fbWV0
YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKLQotICAgIEFTU0VSVChvYmpl
Y3RTdG9yZU1ldGFkYXRhLmF1dG9JbmNyZW1lbnQgfHwga2V5LmdldCgpKTsKLQotICAgIHRyYW5z
YWN0aW9uLT5zY2hlZHVsZVB1dE9wZXJhdGlvbihvYmplY3RTdG9yZU1ldGFkYXRhLCB2YWx1ZSwg
a2V5LCBwdXRNb2RlLCBjYWxsYmFja3MsIGluZGV4SWRzLCBpbmRleEtleXMpOwotfQotCi12b2lk
IElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OnNldEluZGV4S2V5cyhpbnQ2NF90IHRyYW5zYWN0
aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1h
cnlLZXksIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRl
eEtleXM+JiBpbmRleEtleXMpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJh
Y2tlbmRMZXZlbERCOjpzZXRJbmRleEtleXMiKTsKLSAgICBBU1NFUlQocHJwUHJpbWFyeUtleSk7
Ci0KLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uID0gbV90
cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIGlmICghdHJhbnNhY3Rpb24pCi0g
ICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVk
REI6OlRyYW5zYWN0aW9uVmVyc2lvbkNoYW5nZSk7Ci0KLSAgICBSZWZQdHI8SURCS2V5PiBwcmlt
YXJ5S2V5ID0gcHJwUHJpbWFyeUtleTsKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlSW50ZXJm
YWNlPiBzdG9yZSA9IGJhY2tpbmdTdG9yZSgpOwotICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBj
b3VsZCBiZSBhc3luY2hyb25vdXMsIGJ1dCB3ZSBuZWVkIHRvIGV2YWx1YXRlIGlmIGl0J3Mgd29y
dGggdGhlIGV4dHJhIGNvbXBsZXhpdHkuCi0gICAgUmVmUHRyPElEQlJlY29yZElkZW50aWZpZXI+
IHJlY29yZElkZW50aWZpZXI7Ci0gICAgYm9vbCBvayA9IHN0b3JlLT5rZXlFeGlzdHNJbk9iamVj
dFN0b3JlKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX21ldGFkYXRh
LmlkLCBvYmplY3RTdG9yZUlkLCAqcHJpbWFyeUtleSwgcmVjb3JkSWRlbnRpZmllcik7Ci0gICAg
aWYgKCFvaykgewotICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoSURCRGF0YWJhc2VFcnJvcjo6
Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJv
ciBzZXR0aW5nIGluZGV4IGtleXMuIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlm
ICghcmVjb3JkSWRlbnRpZmllcikgewotICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4g
ZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVu
a25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9yIHNldHRpbmcgaW5kZXgg
a2V5cyBmb3Igb2JqZWN0IHN0b3JlLiIpKTsKLSAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KGVy
cm9yLnJlbGVhc2UoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBWZWN0b3I8UmVm
UHRyPElEQkluZGV4V3JpdGVyPj4gaW5kZXhXcml0ZXJzOwotICAgIFN0cmluZyBlcnJvck1lc3Nh
Z2U7Ci0gICAgYm9vbCBvYmV5c0NvbnN0cmFpbnRzID0gZmFsc2U7Ci0gICAgQVNTRVJUKG1fbWV0
YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKLSAgICBjb25zdCBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhID0gbV9tZXRhZGF0YS5v
YmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOwotICAgIGJvb2wgYmFja2luZ1N0b3JlU3Vj
Y2VzcyA9IHN0b3JlLT5tYWtlSW5kZXhXcml0ZXJzKCp0cmFuc2FjdGlvbiwgaWQoKSwgb2JqZWN0
U3RvcmVNZXRhZGF0YSwgKnByaW1hcnlLZXksIGZhbHNlLCBpbmRleElkcywgaW5kZXhLZXlzLCBp
bmRleFdyaXRlcnMsICZlcnJvck1lc3NhZ2UsIG9iZXlzQ29uc3RyYWludHMpOwotICAgIGlmICgh
YmFja2luZ1N0b3JlU3VjY2VzcykgewotICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoSURCRGF0
YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJ
bnRlcm5hbCBlcnJvcjogYmFja2luZyBzdG9yZSBlcnJvciB1cGRhdGluZyBpbmRleCBrZXlzLiIp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIW9iZXlzQ29uc3RyYWludHMpIHsK
LSAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yLCBlcnJvck1lc3NhZ2UpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhXcml0
ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIElEQkluZGV4V3JpdGVyKiBpbmRleFdyaXRlciA9
IGluZGV4V3JpdGVyc1tpXS5nZXQoKTsKLSAgICAgICAgaW5kZXhXcml0ZXItPndyaXRlSW5kZXhL
ZXlzKHJlY29yZElkZW50aWZpZXIuZ2V0KCksICpzdG9yZS5nZXQoKSwgdHJhbnNhY3Rpb24tPmJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGlkKCksIG9iamVjdFN0b3JlSWQpOwotICAgIH0KLX0K
LQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpzZXRJbmRleGVzUmVhZHkoaW50NjRf
dCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRz
KQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6c2V0
SW5kZXhlc1JlYWR5Iik7Ci0KLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRy
YW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIGlmICgh
dHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVs
ZVNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbihpbmRleElkcy5zaXplKCkpOwotfQotCi12b2lkIElE
QkRhdGFiYXNlQmFja2VuZExldmVsREI6Om9wZW5DdXJzb3IoaW50NjRfdCB0cmFuc2FjdGlvbklk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiwg
Ym9vbCBrZXlPbmx5LCBUYXNrVHlwZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZExl
dmVsREI6Om9wZW5DdXJzb3IiKTsKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
IHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIGlm
ICghdHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIHRyYW5zYWN0aW9uLT5zY2hl
ZHVsZU9wZW5DdXJzb3JPcGVyYXRpb24ob2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2Us
IGRpcmVjdGlvbiwga2V5T25seSA/IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSA6IEluZGV4ZWRE
Qjo6Q3Vyc29yS2V5QW5kVmFsdWUsIHRhc2tUeXBlLCBjYWxsYmFja3MpOwotfQotCi12b2lkIElE
QkRhdGFiYXNlQmFja2VuZExldmVsREI6OmNvdW50KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAg
IExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6Y291bnQiKTsKLSAg
ICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uID0gbV90cmFuc2Fj
dGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAgICAg
IHJldHVybjsKLQotICAgIEFTU0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhv
YmplY3RTdG9yZUlkKSk7Ci0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlQ291bnRPcGVyYXRpb24o
b2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGNhbGxiYWNrcyk7Ci19Ci0KLQotdm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpkZWxldGVSYW5nZShpbnQ2NF90IHRyYW5zYWN0
aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5
UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgTE9HKFN0
b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpkZWxldGVSYW5nZSIpOwotICAg
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0
aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbikKLSAgICAgICAg
cmV0dXJuOwotICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IEluZGV4ZWREQjo6VHJh
bnNhY3Rpb25SZWFkT25seSk7Ci0KLSAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVEZWxldGVSYW5n
ZU9wZXJhdGlvbihvYmplY3RTdG9yZUlkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKTsKLX0KLQotdm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpjbGVhcihpbnQ2NF90IHRyYW5zYWN0aW9uSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmNs
ZWFyIik7Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiA9
IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9u
KQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSW5k
ZXhlZERCOjpUcmFuc2FjdGlvblJlYWRPbmx5KTsKLQotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVs
ZUNsZWFyT3BlcmF0aW9uKG9iamVjdFN0b3JlSWQsIGNhbGxiYWNrcyk7Ci19Ci0KLXZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6dHJhbnNhY3Rpb25TdGFydGVkKElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24pCi17Ci0gICAgaWYgKHRyYW5zYWN0aW9uLT5t
b2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpIHsKLSAgICAgICAg
QVNTRVJUKCFtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pOwotICAgICAgICBtX3J1
bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjsKLSAgICB9Ci19Ci0K
LXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6dHJhbnNhY3Rpb25GaW5pc2hlZChJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHJhd1RyYW5zYWN0aW9uKQotewotICAgIFJlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gcmF3VHJhbnNh
Y3Rpb247Ci0gICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uLT5p
ZCgpKSk7Ci0gICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbi0+aWQoKSkg
PT0gdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fdHJhbnNhY3Rpb25zLnJlbW92ZSh0cmFuc2Fj
dGlvbi0+aWQoKSk7Ci0gICAgaWYgKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpU
cmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpIHsKLSAgICAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLmdl
dCgpID09IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgICAg
IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5jbGVhcigpOwotICAgIH0KLX0KLQot
dm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjp0cmFuc2FjdGlvbkZpbmlzaGVkQW5kQWJv
cnRGaXJlZChJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHJhd1RyYW5zYWN0aW9uKQot
ewotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9u
ID0gcmF3VHJhbnNhY3Rpb247Ci0gICAgaWYgKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhl
ZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpIHsKLSAgICAgICAgLy8gSWYgdGhpcyB3YXMg
YW4gb3Blbi13aXRoLXZlcnNpb24gY2FsbCwgdGhlcmUgd2lsbCBiZSBhICJzZWNvbmQKLSAgICAg
ICAgLy8gaGFsZiIgb3BlbiBjYWxsIHdhaXRpbmcgZm9yIHVzIGluIHByb2Nlc3NQZW5kaW5nQ2Fs
bHMuCi0gICAgICAgIC8vIEZJWE1FOiBXaGVuIHdlIG5vIGxvbmdlciBzdXBwb3J0IHNldFZlcnNp
b24sIGFzc2VydCBzdWNoIGEgdGhpbmcuCi0gICAgICAgIGlmIChtX3BlbmRpbmdTZWNvbmRIYWxm
T3BlbikgewotICAgICAgICAgICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4tPmNhbGxiYWNrcygp
LT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
QWJvcnRFcnJvciwgIlZlcnNpb24gY2hhbmdlIHRyYW5zYWN0aW9uIHdhcyBhYm9ydGVkIGluIHVw
Z3JhZGVuZWVkZWQgZXZlbnQgaGFuZGxlci4iKSk7Ci0gICAgICAgICAgICBtX3BlbmRpbmdTZWNv
bmRIYWxmT3Blbi5yZWxlYXNlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcHJvY2Vzc1BlbmRpbmdD
YWxscygpOwotICAgIH0KLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjp0cmFu
c2FjdGlvbkZpbmlzaGVkQW5kQ29tcGxldGVGaXJlZChJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqIHJhd1RyYW5zYWN0aW9uKQotewotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gcmF3VHJhbnNhY3Rpb247Ci0gICAgaWYgKHRyYW5z
YWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpCi0g
ICAgICAgIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKLX0KLQotc2l6ZV90IElEQkRhdGFiYXNlQmFj
a2VuZExldmVsREI6OmNvbm5lY3Rpb25Db3VudCgpCi17Ci0gICAgLy8gVGhpcyBkb2VzIG5vdCBp
bmNsdWRlIHBlbmRpbmcgb3BlbiBjYWxscywgYXMgdGhvc2Ugc2hvdWxkIG5vdCBibG9jayB2ZXJz
aW9uIGNoYW5nZXMgYW5kIGRlbGV0ZXMuCi0gICAgcmV0dXJuIG1fZGF0YWJhc2VDYWxsYmFja3NT
ZXQuc2l6ZSgpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OnByb2Nlc3NQ
ZW5kaW5nQ2FsbHMoKQotewotICAgIGlmIChtX3BlbmRpbmdTZWNvbmRIYWxmT3BlbikgewotICAg
ICAgICAvLyBGSVhNRTogRGF0YWJhc2UgdmVyc2lvbnMgYXJlIG5vdyBvZiB0eXBlIHVpbnQ2NF90
LCBidXQgdGhpcyBjb2RlIGV4cGVjdGVkIGludDY0X3QuCi0gICAgICAgIEFTU0VSVChtX3BlbmRp
bmdTZWNvbmRIYWxmT3Blbi0+dmVyc2lvbigpID09IChpbnQ2NF90KW1fbWV0YWRhdGEudmVyc2lv
bik7Ci0gICAgICAgIEFTU0VSVChtX21ldGFkYXRhLmlkICE9IEludmFsaWRJZCk7Ci0gICAgICAg
IG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLT5jYWxsYmFja3MoKS0+b25TdWNjZXNzKHRoaXMsIHRo
aXMtPm1ldGFkYXRhKCkpOwotICAgICAgICBtX3BlbmRpbmdTZWNvbmRIYWxmT3Blbi5yZWxlYXNl
KCk7Ci0gICAgICAgIC8vIEZhbGwgdGhyb3VnaCB3aGVuIGNvbXBsZXRlLCBhcyBwZW5kaW5nIGRl
bGV0ZXMgbWF5IGJlIChwYXJ0aWFsbHkpIHVuYmxvY2tlZC4KLSAgICB9Ci0KLSAgICAvLyBOb3Rl
IHRoYXQgdGhpcyBjaGVjayBpcyBvbmx5IGFuIG9wdGltaXphdGlvbiB0byByZWR1Y2UgcXVldWUt
Y2h1cm4gYW5kCi0gICAgLy8gbm90IG5lY2Vzc2FyeSBmb3IgY29ycmVjdG5lc3M7IGRlbGV0ZURh
dGFiYXNlIGFuZCBvcGVuQ29ubmVjdGlvbiB3aWxsCi0gICAgLy8gcmVxdWV1ZSB0aGVpciBjYWxs
cyBpZiB0aGlzIGNvbmRpdGlvbiBpcyB0cnVlLgotICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hh
bmdlVHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9wZW5kaW5nRGVs
ZXRlQ2FsbHMuaXNFbXB0eSgpICYmIGlzRGVsZXRlRGF0YWJhc2VCbG9ja2VkKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICB3aGlsZSAoIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSkgewot
ICAgICAgICBPd25QdHI8UGVuZGluZ0RlbGV0ZUNhbGw+IHBlbmRpbmdEZWxldGVDYWxsID0gbV9w
ZW5kaW5nRGVsZXRlQ2FsbHMudGFrZUZpcnN0KCk7Ci0gICAgICAgIGRlbGV0ZURhdGFiYXNlRmlu
YWwocGVuZGluZ0RlbGV0ZUNhbGwtPmNhbGxiYWNrcygpKTsKLSAgICB9Ci0gICAgLy8gZGVsZXRl
RGF0YWJhc2VGaW5hbCBzaG91bGQgbmV2ZXIgcmUtcXVldWUgY2FsbHMuCi0gICAgQVNTRVJUKG1f
cGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSk7Ci0KLSAgICAvLyBUaGlzIGNoZWNrIGlzIGFs
c28gbm90IHJlYWxseSBuZWVkZWQsIG9wZW5Db25uZWN0aW9uIHdvdWxkIGp1c3QgcmVxdWV1ZSBp
dHMgY2FsbHMuCi0gICAgaWYgKG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gT3BlbiBjYWxscyBjYW4gYmUgcmVxdWV1ZWQgaWYgYW4g
b3BlbiBjYWxsIHN0YXJ0ZWQgYSB2ZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbi4KLSAgICBEZXF1
ZTxPd25QdHI8UGVuZGluZ09wZW5DYWxsPj4gcGVuZGluZ09wZW5DYWxsczsKLSAgICBtX3BlbmRp
bmdPcGVuQ2FsbHMuc3dhcChwZW5kaW5nT3BlbkNhbGxzKTsKLSAgICB3aGlsZSAoIXBlbmRpbmdP
cGVuQ2FsbHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIE93blB0cjxQZW5kaW5nT3BlbkNhbGw+IHBl
bmRpbmdPcGVuQ2FsbCA9IHBlbmRpbmdPcGVuQ2FsbHMudGFrZUZpcnN0KCk7Ci0gICAgICAgIG9w
ZW5Db25uZWN0aW9uKHBlbmRpbmdPcGVuQ2FsbC0+Y2FsbGJhY2tzKCksIHBlbmRpbmdPcGVuQ2Fs
bC0+ZGF0YWJhc2VDYWxsYmFja3MoKSwgcGVuZGluZ09wZW5DYWxsLT50cmFuc2FjdGlvbklkKCks
IHBlbmRpbmdPcGVuQ2FsbC0+dmVyc2lvbigpKTsKLSAgICB9Ci19Ci0KLXZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kTGV2ZWxEQjo6Y3JlYXRlVHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklk
LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0IFZlY3Rv
cjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIHVuc2lnbmVkIHNob3J0IG1vZGUpCi17Ci0gICAg
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSBtX2Zh
Y3RvcnktPmNyZWF0ZVRyYW5zYWN0aW9uQmFja2VuZCh0aGlzLCB0cmFuc2FjdGlvbklkLCBjYWxs
YmFja3MsIG9iamVjdFN0b3JlSWRzLCBzdGF0aWNfY2FzdDxJbmRleGVkREI6OlRyYW5zYWN0aW9u
TW9kZT4obW9kZSkpOwotCi0gICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFu
c2FjdGlvbklkKSk7Ci0gICAgbV90cmFuc2FjdGlvbnMuYWRkKHRyYW5zYWN0aW9uSWQsIHRyYW5z
YWN0aW9uLmdldCgpKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpvcGVu
Q29ubmVjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBQYXNzUmVm
UHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBwcnBEYXRhYmFzZUNhbGxiYWNrcywgaW50NjRfdCB0
cmFuc2FjdGlvbklkLCBpbnQ2NF90IHZlcnNpb24pCi17Ci0gICAgQVNTRVJUKG1fYmFja2luZ1N0
b3JlLmdldCgpKTsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxs
YmFja3M7Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNr
cyA9IHBycERhdGFiYXNlQ2FsbGJhY2tzOwotCi0gICAgaWYgKCFtX3BlbmRpbmdEZWxldGVDYWxs
cy5pc0VtcHR5KCkgfHwgbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKSB7Ci0gICAg
ICAgIG1fcGVuZGluZ09wZW5DYWxscy5hcHBlbmQoUGVuZGluZ09wZW5DYWxsOjpjcmVhdGUoY2Fs
bGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcywgdHJhbnNhY3Rpb25JZCwgdmVyc2lvbikpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fbWV0YWRhdGEuaWQgPT0gSW52YWxpZElk
KSB7Ci0gICAgICAgIC8vIFRoZSBkYXRhYmFzZSB3YXMgZGVsZXRlZCB0aGVuIGltbWVkaWF0ZWx5
IHJlLW9wZW5lZDsgb3BlbkludGVybmFsKCkgcmVjcmVhdGVzIGl0IGluIHRoZSBiYWNraW5nIHN0
b3JlLgotICAgICAgICBpZiAob3BlbkludGVybmFsKCkpCi0gICAgICAgICAgICBBU1NFUlQobV9t
ZXRhZGF0YS52ZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbik7Ci0g
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2U7Ci0gICAgICAgICAgICBS
ZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3I7Ci0gICAgICAgICAgICBpZiAodmVyc2lvbiA9
PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24pCi0gICAgICAgICAgICAgICAgbWVz
c2FnZSA9ICJJbnRlcm5hbCBlcnJvciBvcGVuaW5nIGRhdGFiYXNlIHdpdGggbm8gdmVyc2lvbiBz
cGVjaWZpZWQuIjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtZXNzYWdlID0g
U3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9yIG9wZW5pbmcgZGF0YWJhc2Ugd2l0aCB2ZXJz
aW9uICVsbGQiLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHZlcnNpb24pKTsKLSAgICAgICAgICAg
IGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OlVua25vd25FcnJvciwgbWVzc2FnZSkpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gV2UgaW5mZXIgdGhhdCB0aGUgZGF0YWJhc2UgZGlk
bid0IGV4aXN0IGZyb20gaXRzIGxhY2sgb2YgZWl0aGVyIHR5cGUgb2YgdmVyc2lvbi4KLSAgICBi
b29sIGlzTmV3RGF0YWJhc2UgPSBtX21ldGFkYXRhLnZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRh
ZGF0YTo6Tm9JbnRWZXJzaW9uOwotCi0gICAgaWYgKHZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRh
ZGF0YTo6RGVmYXVsdEludFZlcnNpb24pIHsKLSAgICAgICAgLy8gRklYTUU6IHRoaXMgY29tbWVu
dHMgd2FzIHJlbGF0ZWQgdG8gQ2hyb21pdW0gY29kZS4gSXQgbWF5IGJlIGluY29ycmVjdAotICAg
ICAgICAvLyBGb3IgdW5pdCB0ZXN0cyBvbmx5IC0gc2tpcCB1cGdyYWRlIHN0ZXBzLiBDYWxsaW5n
IGZyb20gc2NyaXB0IHdpdGggRGVmYXVsdEludFZlcnNpb24gdGhyb3dzIGV4Y2VwdGlvbi4KLSAg
ICAgICAgQVNTRVJUKGlzTmV3RGF0YWJhc2UpOwotICAgICAgICBtX2RhdGFiYXNlQ2FsbGJhY2tz
U2V0LmFkZChkYXRhYmFzZUNhbGxiYWNrcyk7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNz
KHRoaXMsIHRoaXMtPm1ldGFkYXRhKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKHZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKSB7Ci0gICAg
ICAgIGlmICghaXNOZXdEYXRhYmFzZSkgewotICAgICAgICAgICAgbV9kYXRhYmFzZUNhbGxiYWNr
c1NldC5hZGQoUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPihkYXRhYmFzZUNhbGxiYWNrcykp
OwotICAgICAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3ModGhpcywgdGhpcy0+bWV0YWRhdGEo
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gU3BlYyBzYXlz
OiBJZiBubyB2ZXJzaW9uIGlzIHNwZWNpZmllZCBhbmQgbm8gZGF0YWJhc2UgZXhpc3RzLCBzZXQg
ZGF0YWJhc2UgdmVyc2lvbiB0byAxLgotICAgICAgICB2ZXJzaW9uID0gMTsKLSAgICB9Ci0KLSAg
ICAvLyBGSVhNRTogRGF0YWJhc2UgdmVyc2lvbnMgYXJlIG5vdyBvZiB0eXBlIHVpbnQ2NF90LCBi
dXQgdGhpcyBjb2RlIGV4cGVjdGVkIGludDY0X3QuCi0gICAgaWYgKHZlcnNpb24gPiAoaW50NjRf
dCltX21ldGFkYXRhLnZlcnNpb24pIHsKLSAgICAgICAgcnVuSW50VmVyc2lvbkNoYW5nZVRyYW5z
YWN0aW9uKGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MsIHRyYW5zYWN0aW9uSWQsIHZlcnNp
b24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IERhdGFiYXNlIHZl
cnNpb25zIGFyZSBub3cgb2YgdHlwZSB1aW50NjRfdCwgYnV0IHRoaXMgY29kZSBleHBlY3RlZCBp
bnQ2NF90LgotICAgIGlmICh2ZXJzaW9uIDwgKGludDY0X3QpbV9tZXRhZGF0YS52ZXJzaW9uKSB7
Ci0gICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246OlZlcnNpb25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIlRoZSByZXF1
ZXN0ZWQgdmVyc2lvbiAoJWxsZCkgaXMgbGVzcyB0aGFuIHRoZSBleGlzdGluZyB2ZXJzaW9uICgl
bGxkKS4iLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHZlcnNpb24pLCBzdGF0aWNfY2FzdDxsb25n
IGxvbmc+KG1fbWV0YWRhdGEudmVyc2lvbikpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICAvLyBGSVhNRTogRGF0YWJhc2UgdmVyc2lvbnMgYXJlIG5vdyBvZiB0eXBlIHVpbnQ2NF90
LCBidXQgdGhpcyBjb2RlIGV4cGVjdGVkIGludDY0X3QuCi0gICAgQVNTRVJUKHZlcnNpb24gPT0g
KGludDY0X3QpbV9tZXRhZGF0YS52ZXJzaW9uKTsKLSAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0
LmFkZChkYXRhYmFzZUNhbGxiYWNrcyk7Ci0gICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3ModGhpcywg
dGhpcy0+bWV0YWRhdGEoKSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6
cnVuSW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBw
cnBDYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IHBycERhdGFiYXNl
Q2FsbGJhY2tzLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3QgcmVxdWVzdGVkVmVyc2lv
bikKLXsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7
Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcyA9IHBy
cERhdGFiYXNlQ2FsbGJhY2tzOwotICAgIEFTU0VSVChjYWxsYmFja3MpOwotICAgIGZvciAoRGF0
YWJhc2VDYWxsYmFja3NTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZUNhbGxiYWNr
c1NldC5iZWdpbigpOyBpdCAhPSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmVuZCgpOyArK2l0KSB7
Ci0gICAgICAgIC8vIEZyb250IGVuZCBlbnN1cmVzIHRoZSBldmVudCBpcyBub3QgZmlyZWQgYXQg
Y29ubmVjdGlvbnMgdGhhdCBoYXZlIGNsb3NlUGVuZGluZyBzZXQuCi0gICAgICAgIGlmICgqaXQg
IT0gZGF0YWJhc2VDYWxsYmFja3MpCi0gICAgICAgICAgICAoKml0KS0+b25WZXJzaW9uQ2hhbmdl
KG1fbWV0YWRhdGEudmVyc2lvbiwgcmVxdWVzdGVkVmVyc2lvbiwgSW5kZXhlZERCOjpOdWxsVmVy
c2lvbik7Ci0gICAgfQotICAgIC8vIFRoZSBzcGVjIGRpY3RhdGVzIHdlIHdhaXQgdW50aWwgYWxs
IHRoZSB2ZXJzaW9uIGNoYW5nZSBldmVudHMgYXJlCi0gICAgLy8gZGVsaXZlcmVkIGFuZCB0aGVu
IGNoZWNrIG1fZGF0YWJhc2VDYWxsYmFja3MuZW1wdHkoKSBiZWZvcmUgcHJvY2VlZGluZwotICAg
IC8vIG9yIGZpcmluZyBhIGJsb2NrZWQgZXZlbnQsIGJ1dCBpbnN0ZWFkIHdlIHNob3VsZCBiZSBj
b25zaXN0ZW50IHdpdGggaG93Ci0gICAgLy8gdGhlIG9sZCBzZXRWZXJzaW9uIChpbmNvcnJlY3Rs
eSkgZGlkIGl0LgotICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIGNhbGwgdG8gb25CbG9ja2VkIGFu
ZCBpbnN0ZWFkIHdhaXQgdW50aWwgdGhlIGZyb250ZW5kCi0gICAgLy8gdGVsbHMgdXMgdGhhdCBh
bGwgdGhlIGJsb2NrZWQgZXZlbnRzIGhhdmUgYmVlbiBkZWxpdmVyZWQuIFNlZQotICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTEzMAotICAgIGlmIChjb25u
ZWN0aW9uQ291bnQoKSkKLSAgICAgICAgY2FsbGJhY2tzLT5vbkJsb2NrZWQobV9tZXRhZGF0YS52
ZXJzaW9uKTsKLSAgICAvLyBGSVhNRTogQWRkIHRlc3QgZm9yIG1fcnVubmluZ1ZlcnNpb25DaGFu
Z2VUcmFuc2FjdGlvbi4KLSAgICBpZiAobV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9u
IHx8IGNvbm5lY3Rpb25Db3VudCgpKSB7Ci0gICAgICAgIG1fcGVuZGluZ09wZW5DYWxscy5hcHBl
bmQoUGVuZGluZ09wZW5DYWxsOjpjcmVhdGUoY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcywg
dHJhbnNhY3Rpb25JZCwgcmVxdWVzdGVkVmVyc2lvbikpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgVmVjdG9yPGludDY0X3Q+IG9iamVjdFN0b3JlSWRzOwotICAgIGNyZWF0ZVRyYW5z
YWN0aW9uKHRyYW5zYWN0aW9uSWQsIGRhdGFiYXNlQ2FsbGJhY2tzLCBvYmplY3RTdG9yZUlkcywg
SW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpOwotICAgIFJlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0
KHRyYW5zYWN0aW9uSWQpOwotCi0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVmVyc2lvbkNoYW5n
ZU9wZXJhdGlvbih0cmFuc2FjdGlvbklkLCByZXF1ZXN0ZWRWZXJzaW9uLCBjYWxsYmFja3MsIGRh
dGFiYXNlQ2FsbGJhY2tzLCBtX21ldGFkYXRhKTsKLQotICAgIEFTU0VSVCghbV9wZW5kaW5nU2Vj
b25kSGFsZk9wZW4pOwotICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKGRhdGFiYXNlQ2Fs
bGJhY2tzKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpkZWxldGVEYXRh
YmFzZShQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzKQotewotICAgIFJlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBpZiAoaXNEZWxl
dGVEYXRhYmFzZUJsb2NrZWQoKSkgewotICAgICAgICBmb3IgKERhdGFiYXNlQ2FsbGJhY2tzU2V0
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYmVnaW4oKTsgaXQg
IT0gbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgLy8g
RnJvbnQgZW5kIGVuc3VyZXMgdGhlIGV2ZW50IGlzIG5vdCBmaXJlZCBhdCBjb25uZWN0aW9ucyB0
aGF0IGhhdmUgY2xvc2VQZW5kaW5nIHNldC4KLSAgICAgICAgICAgICgqaXQpLT5vblZlcnNpb25D
aGFuZ2UobV9tZXRhZGF0YS52ZXJzaW9uLCAwLCBJbmRleGVkREI6Ok51bGxWZXJzaW9uKTsKLSAg
ICAgICAgfQotICAgICAgICAvLyBGSVhNRTogT25seSBmaXJlIG9uQmxvY2tlZCBpZiB0aGVyZSBh
cmUgb3BlbiBjb25uZWN0aW9ucyBhZnRlciB0aGUKLSAgICAgICAgLy8gVmVyc2lvbkNoYW5nZUV2
ZW50cyBhcmUgcmVjZWl2ZWQsIG5vdCBqdXN0IHNldCB1cCB0byBmaXJlLgotICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzExMzAKLSAgICAgICAgY2Fs
bGJhY2tzLT5vbkJsb2NrZWQobV9tZXRhZGF0YS52ZXJzaW9uKTsKLSAgICAgICAgbV9wZW5kaW5n
RGVsZXRlQ2FsbHMuYXBwZW5kKFBlbmRpbmdEZWxldGVDYWxsOjpjcmVhdGUoY2FsbGJhY2tzLnJl
bGVhc2UoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGRlbGV0ZURhdGFiYXNlRmlu
YWwoY2FsbGJhY2tzLnJlbGVhc2UoKSk7Ci19Ci0KLWJvb2wgSURCRGF0YWJhc2VCYWNrZW5kTGV2
ZWxEQjo6aXNEZWxldGVEYXRhYmFzZUJsb2NrZWQoKQotewotICAgIHJldHVybiBjb25uZWN0aW9u
Q291bnQoKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpkZWxldGVEYXRh
YmFzZUZpbmFsKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgQVNT
RVJUKCFpc0RlbGV0ZURhdGFiYXNlQmxvY2tlZCgpKTsKLSAgICBBU1NFUlQobV9iYWNraW5nU3Rv
cmUpOwotICAgIGlmICghbV9iYWNraW5nU3RvcmUtPmRlbGV0ZURhdGFiYXNlKG1fbWV0YWRhdGEu
bmFtZSkpIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3Ig
ZGVsZXRpbmcgZGF0YWJhc2UuIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fbWV0
YWRhdGEuaWQgPSBJbnZhbGlkSWQ7Ci0gICAgbV9tZXRhZGF0YS52ZXJzaW9uID0gSURCRGF0YWJh
c2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uOwotICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNs
ZWFyKCk7Ci0gICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKLX0KLQotdm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmRMZXZlbERCOjpjbG9zZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBw
cnBDYWxsYmFja3MpCi17Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFj
a3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuY29u
dGFpbnMoY2FsbGJhY2tzKSk7Ci0KLSAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LnJlbW92ZShj
YWxsYmFja3MpOwotICAgIGlmIChtX3BlbmRpbmdTZWNvbmRIYWxmT3BlbiAmJiBtX3BlbmRpbmdT
ZWNvbmRIYWxmT3Blbi0+ZGF0YWJhc2VDYWxsYmFja3MoKSA9PSBjYWxsYmFja3MpIHsKLSAgICAg
ICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4tPmNhbGxiYWNrcygpLT5vbkVycm9yKElEQkRhdGFi
YXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6QWJvcnRFcnJvciwgIlRoZSBj
b25uZWN0aW9uIHdhcyBjbG9zZWQuIikpOwotICAgICAgICBtX3BlbmRpbmdTZWNvbmRIYWxmT3Bl
bi5yZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgaWYgKGNvbm5lY3Rpb25Db3VudCgpID4gMSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gcHJvY2Vzc1BlbmRpbmdDYWxscyBhbGxvd3MgdGhlIGlu
c3BlY3RvciB0byBwcm9jZXNzIGEgcGVuZGluZyBvcGVuIGNhbGwKLSAgICAvLyBhbmQgY2FsbCBj
bG9zZSwgcmVlbnRlcmluZyBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpjbG9zZS4gVGhlbiB0
aGUKLSAgICAvLyBiYWNrZW5kIHdvdWxkIGJlIHJlbW92ZWQgYm90aCBieSB0aGUgaW5zcGVjdG9y
IGNsb3NpbmcgaXRzIGNvbm5lY3Rpb24sIGFuZAotICAgIC8vIGJ5IHRoZSBjb25uZWN0aW9uIHRo
YXQgZmlyc3QgY2FsbGVkIGNsb3NlLgotICAgIC8vIFRvIGF2b2lkIHRoYXQgc2l0dWF0aW9uLCBk
b24ndCBwcm9jZWVkIGluIGNhc2Ugb2YgcmVlbnRyYW5jeS4KLSAgICBpZiAobV9jbG9zaW5nQ29u
bmVjdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIFRlbXBvcmFyeUNoYW5nZTxib29sPiBjbG9z
aW5nQ29ubmVjdGlvbihtX2Nsb3NpbmdDb25uZWN0aW9uLCB0cnVlKTsKLSAgICBwcm9jZXNzUGVu
ZGluZ0NhbGxzKCk7Ci0KLSAgICAvLyBGSVhNRTogQWRkIGEgdGVzdCBmb3IgdGhlIG1fcGVuZGlu
Z09wZW5DYWxscyBjYXNlcyBiZWxvdy4KLSAgICBpZiAoIWNvbm5lY3Rpb25Db3VudCgpICYmICFt
X3BlbmRpbmdPcGVuQ2FsbHMuc2l6ZSgpICYmICFtX3BlbmRpbmdEZWxldGVDYWxscy5zaXplKCkp
IHsKLSAgICAgICAgVHJhbnNhY3Rpb25NYXAgdHJhbnNhY3Rpb25zKG1fdHJhbnNhY3Rpb25zKTsK
LSAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJDb25uZWN0aW9u
IGlzIGNsb3NpbmcuIik7Ci0gICAgICAgIGZvciAoVHJhbnNhY3Rpb25NYXA6OmNvbnN0X2l0ZXJh
dG9yOjpWYWx1ZXMgaXQgPSB0cmFuc2FjdGlvbnMudmFsdWVzKCkuYmVnaW4oKSwgZW5kID0gdHJh
bnNhY3Rpb25zLnZhbHVlcygpLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAo
Kml0KS0+YWJvcnQoZXJyb3IpOwotCi0gICAgICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5pc0Vt
cHR5KCkpOwotCi0gICAgICAgIG1fYmFja2luZ1N0b3JlLmNsZWFyKCk7Ci0KLSAgICAgICAgLy8g
VGhpcyBjaGVjayBzaG91bGQgb25seSBiZSBmYWxzZSBpbiB1bml0IHRlc3RzLgotICAgICAgICBB
U1NFUlQobV9mYWN0b3J5KTsKLSAgICAgICAgaWYgKG1fZmFjdG9yeSkKLSAgICAgICAgICAgIG1f
ZmFjdG9yeS0+cmVtb3ZlSURCRGF0YWJhc2VCYWNrZW5kKG1faWRlbnRpZmllcik7Ci0gICAgfQot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xl
dmVsZGIvSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGV2ZWxkYi9JREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5MTIyYzMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwxNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCRGF0YWJh
c2VCYWNrZW5kTGV2ZWxEQl9oCi0jZGVmaW5lIElEQkRhdGFiYXNlQmFja2VuZExldmVsREJfaAot
Ci0jaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFj
a3MuaCIKLSNpbmNsdWRlICJJREJNZXRhZGF0YS5oIgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2lu
Y2x1ZGUgPHd0Zi9EZXF1ZS5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8
d3RmL0xpc3RIYXNoU2V0Lmg+Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U7Ci1jbGFz
cyBJREJEYXRhYmFzZTsKLWNsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOwotY2xhc3Mg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOwotY2xhc3MgSURCVHJhbnNhY3Rpb25Db29y
ZGluYXRvcjsKLQotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQiA6IHB1YmxpYyBJREJE
YXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQmFja2VuZExldmVsREI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUsIElE
QkJhY2tpbmdTdG9yZUludGVyZmFjZSosIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKiwgY29u
c3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKTsKLSAgICB2aXJ0dWFsIH5JREJEYXRhYmFzZUJh
Y2tlbmRMZXZlbERCKCk7Ci0KLSAgICBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdT
dG9yZSgpIGNvbnN0OwotCi0gICAgc3RhdGljIGNvbnN0IGludDY0X3QgSW52YWxpZElkID0gMDsK
LSAgICBpbnQ2NF90IGlkKCkgY29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YS5pZDsgfQotICAgIHZv
aWQgYWRkT2JqZWN0U3RvcmUoY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYsIGludDY0X3Qg
bmV3TWF4T2JqZWN0U3RvcmVJZCk7Ci0gICAgdm9pZCByZW1vdmVPYmplY3RTdG9yZShpbnQ2NF90
IG9iamVjdFN0b3JlSWQpOwotICAgIHZvaWQgYWRkSW5kZXgoaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiwgaW50NjRfdCBuZXdNYXhJbmRleElkKTsKLSAgICB2
b2lkIHJlbW92ZUluZGV4KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKTsK
LQotICAgIHZvaWQgb3BlbkNvbm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNz
UmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2
NF90IHZlcnNpb24pOwotICAgIHZvaWQgZGVsZXRlRGF0YWJhc2UoUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+KTsKLSAgICBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fbWV0YWRhdGE7IH0KLQotICAgIC8vIElEQkRhdGFiYXNlQmFja2VuZEludGVy
ZmFjZQotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IHRyYW5zYWN0
aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJ
REJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
T2JqZWN0U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQp
OwotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9u
SWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBjb25zdCBWZWN0b3I8aW50NjRf
dD4mIG9iamVjdFN0b3JlSWRzLCB1bnNpZ25lZCBzaG9ydCBtb2RlKTsKLSAgICB2aXJ0dWFsIHZv
aWQgY2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4pOwotCi0gICAgdmlydHVh
bCB2b2lkIGNvbW1pdChpbnQ2NF90IHRyYW5zYWN0aW9uSWQpOwotICAgIHZpcnR1YWwgdm9pZCBh
Ym9ydChpbnQ2NF90IHRyYW5zYWN0aW9uSWQpOwotICAgIHZpcnR1YWwgdm9pZCBhYm9ydChpbnQ2
NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pOwotCi0gICAg
dmlydHVhbCB2b2lkIGNyZWF0ZUluZGV4KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
SURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkpOwotICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVJbmRleChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkKTsKLQotICAgIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3Iq
IHRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuZ2V0KCk7IH0KLSAgICB2b2lkIHRyYW5zYWN0aW9uU3RhcnRlZChJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKLSAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWQoSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7Ci0gICAgdm9pZCB0cmFuc2FjdGlvbkZpbmlz
aGVkQW5kQ29tcGxldGVGaXJlZChJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKLSAg
ICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWRBbmRBYm9ydEZpcmVkKElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSopOwotCi0gICAgdmlydHVhbCB2b2lkIGdldChpbnQ2NF90IHRyYW5zYWN0
aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiwgYm9vbCBrZXlPbmx5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pIE9W
RVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBwdXQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSwgUGFzc1Jl
ZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIGNvbnN0IFZl
Y3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JikgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEluZGV4S2V5cyhpbnQ2NF90IHRyYW5zYWN0aW9uSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXks
IGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+
JikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEluZGV4ZXNSZWFkeShpbnQ2NF90IHRy
YW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgVmVjdG9yPGludDY0X3Q+
JiBpbmRleElkcykgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoaW50NjRf
dCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uLCBib29s
IGtleU9ubHksIFRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pIE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgdm9pZCBjb3VudChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
UmFuZ2UoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pIE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgdm9pZCBjbGVhcihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KSBPVkVSUklERTsKLQotICAgIGNs
YXNzIFZlcnNpb25DaGFuZ2VPcGVyYXRpb247Ci0gICAgY2xhc3MgVmVyc2lvbkNoYW5nZUFib3J0
T3BlcmF0aW9uOwotCi1wcml2YXRlOgotICAgIElEQkRhdGFiYXNlQmFja2VuZExldmVsREIoY29u
c3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqLCBJREJGYWN0b3J5QmFj
a2VuZEludGVyZmFjZSosIGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllcik7Ci0KLSAgICBi
b29sIG9wZW5JbnRlcm5hbCgpOwotICAgIHZvaWQgcnVuSW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0
aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxi
YWNrcz4sIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKTsK
LSAgICBzaXplX3QgY29ubmVjdGlvbkNvdW50KCk7Ci0gICAgdm9pZCBwcm9jZXNzUGVuZGluZ0Nh
bGxzKCk7Ci0KLSAgICBib29sIGlzRGVsZXRlRGF0YWJhc2VCbG9ja2VkKCk7Ci0gICAgdm9pZCBk
ZWxldGVEYXRhYmFzZUZpbmFsKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Ci0KLSAgICBSZWZQ
dHI8SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlPiBtX2JhY2tpbmdTdG9yZTsKLSAgICBJREJEYXRh
YmFzZU1ldGFkYXRhIG1fbWV0YWRhdGE7Ci0KLSAgICBTdHJpbmcgbV9pZGVudGlmaWVyOwotICAg
IC8vIFRoaXMgbWlnaHQgbm90IG5lZWQgdG8gYmUgYSBSZWZQdHIgc2luY2UgdGhlIGZhY3Rvcnkn
cyBsaWZldGltZSBpcyB0aGF0IG9mIHRoZSBwYWdlIGdyb3VwLCBidXQgaXQncyBiZXR0ZXIgdG8g
YmUgY29uc2Vydml0aXZlIHRoYW4gc29ycnkuCi0gICAgUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5k
SW50ZXJmYWNlPiBtX2ZhY3Rvcnk7Ci0KLSAgICBPd25QdHI8SURCVHJhbnNhY3Rpb25Db29yZGlu
YXRvcj4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2U+IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbjsKLQot
ICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqPiBUcmFuc2FjdGlvbk1hcDsKLSAgICBUcmFuc2FjdGlvbk1hcCBtX3RyYW5zYWN0aW9uczsK
LQotICAgIGNsYXNzIFBlbmRpbmdPcGVuQ2FsbCB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0
aWMgUGFzc093blB0cjxQZW5kaW5nT3BlbkNhbGw+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFz
ZUNhbGxiYWNrcywgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IHZlcnNpb24pCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGVuZGluZ09wZW5DYWxsKGNh
bGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MsIHRyYW5zYWN0aW9uSWQsIHZlcnNpb24pKTsKLSAg
ICAgICAgfQotICAgICAgICBJREJDYWxsYmFja3MqIGNhbGxiYWNrcygpIHsgcmV0dXJuIG1fY2Fs
bGJhY2tzLmdldCgpOyB9Ci0gICAgICAgIElEQkRhdGFiYXNlQ2FsbGJhY2tzKiBkYXRhYmFzZUNh
bGxiYWNrcygpIHsgcmV0dXJuIG1fZGF0YWJhc2VDYWxsYmFja3MuZ2V0KCk7IH0KLSAgICAgICAg
aW50NjRfdCB2ZXJzaW9uKCkgeyByZXR1cm4gbV92ZXJzaW9uOyB9Ci0gICAgICAgIGludDY0X3Qg
dHJhbnNhY3Rpb25JZCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25JZDsgfQotCi0gICAg
cHJpdmF0ZToKLSAgICAgICAgUGVuZGluZ09wZW5DYWxsKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2Fs
bGJhY2tzLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3QgdmVyc2lvbikKLSAgICAgICAg
ICAgIDogbV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAgICAgICAgICAgLCBtX2RhdGFiYXNlQ2Fs
bGJhY2tzKGRhdGFiYXNlQ2FsbGJhY2tzKQotICAgICAgICAgICAgLCBtX3ZlcnNpb24odmVyc2lv
bikKLSAgICAgICAgICAgICwgbV90cmFuc2FjdGlvbklkKHRyYW5zYWN0aW9uSWQpCi0gICAgICAg
IHsKLSAgICAgICAgfQotICAgICAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsK
LSAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBtX2RhdGFiYXNlQ2FsbGJhY2tz
OwotICAgICAgICBpbnQ2NF90IG1fdmVyc2lvbjsKLSAgICAgICAgY29uc3QgaW50NjRfdCBtX3Ry
YW5zYWN0aW9uSWQ7Ci0gICAgfTsKLQotICAgIERlcXVlPE93blB0cjxQZW5kaW5nT3BlbkNhbGw+
PiBtX3BlbmRpbmdPcGVuQ2FsbHM7Ci0gICAgT3duUHRyPFBlbmRpbmdPcGVuQ2FsbD4gbV9wZW5k
aW5nU2Vjb25kSGFsZk9wZW47Ci0KLSAgICBjbGFzcyBQZW5kaW5nRGVsZXRlQ2FsbCB7Ci0gICAg
cHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc093blB0cjxQZW5kaW5nRGVsZXRlQ2FsbD4gY3Jl
YXRlKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGVuZGluZ0RlbGV0ZUNhbGwoY2FsbGJhY2tzKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MoKSB7IHJldHVybiBt
X2NhbGxiYWNrcy5nZXQoKTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUGVuZGluZ0RlbGV0
ZUNhbGwoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAgICAgICAgIDog
bV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgUmVm
UHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci0gICAgfTsKLQotICAgIERlcXVlPE93blB0
cjxQZW5kaW5nRGVsZXRlQ2FsbD4+IG1fcGVuZGluZ0RlbGV0ZUNhbGxzOwotCi0gICAgdHlwZWRl
ZiBMaXN0SGFzaFNldDxSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+PiBEYXRhYmFzZUNhbGxi
YWNrc1NldDsKLSAgICBEYXRhYmFzZUNhbGxiYWNrc1NldCBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0
OwotCi0gICAgYm9vbCBtX2Nsb3NpbmdDb25uZWN0aW9uOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNlbmRpZiAv
LyBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRmFjdG9yeUJhY2tl
bmRMZXZlbERCLmNwcAppbmRleCAwNGU0YzFiLi44NjQ5NjFkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkZhY3RvcnlCYWNrZW5kTGV2ZWxE
Qi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJG
YWN0b3J5QmFja2VuZExldmVsREIuY3BwCkBAIC0zMSw3ICszMSw3IEBACiAKICNpbmNsdWRlICJE
T01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oIgotI2lu
Y2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZExldmVsREIuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKICNpbmNs
dWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5oIgpAQCAtMTE5LDcgKzExOSw3IEBAIHZvaWQgSURCRmFjdG9yeUJh
Y2tlbmRMZXZlbERCOjpkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQ
dHI8SURCCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8SURCRGF0YWJhc2VC
YWNrZW5kTGV2ZWxEQj4gZGF0YWJhc2VCYWNrZW5kID0gSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxE
Qjo6Y3JlYXRlKG5hbWUsIGJhY2tpbmdTdG9yZS5nZXQoKSwgdGhpcywgdW5pcXVlSWRlbnRpZmll
cik7CisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlQmFja2VuZCA9
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZShuYW1lLCBiYWNraW5nU3RvcmUuZ2V0KCks
IHRoaXMsIHVuaXF1ZUlkZW50aWZpZXIpOwogICAgIGlmIChkYXRhYmFzZUJhY2tlbmQpIHsKICAg
ICAgICAgbV9kYXRhYmFzZUJhY2tlbmRNYXAuc2V0KHVuaXF1ZUlkZW50aWZpZXIsIGRhdGFiYXNl
QmFja2VuZC5nZXQoKSk7CiAgICAgICAgIGRhdGFiYXNlQmFja2VuZC0+ZGVsZXRlRGF0YWJhc2Uo
Y2FsbGJhY2tzKTsKQEAgLTE2NSw3ICsxNjUsNyBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5kTGV2
ZWxEQjo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIGludDY0X3QgdmVyc2lvbiwgaW50NjRfdAog
ICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4gPSBwcnBTZWN1cml0eU9y
aWdpbjsKICAgICBjb25zdCBTdHJpbmcgdW5pcXVlSWRlbnRpZmllciA9IGNvbXB1dGVVbmlxdWVJ
ZGVudGlmaWVyKG5hbWUsIHNlY3VyaXR5T3JpZ2luLmdldCgpKTsKIAotICAgIFJlZlB0cjxJREJE
YXRhYmFzZUJhY2tlbmRMZXZlbERCPiBkYXRhYmFzZUJhY2tlbmQ7CisgICAgUmVmUHRyPElEQkRh
dGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlQmFja2VuZDsKICAgICBJREJEYXRhYmFzZUJhY2tl
bmRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZUJhY2tlbmRNYXAuZmluZCh1bmlxdWVJZGVu
dGlmaWVyKTsKICAgICBpZiAoaXQgPT0gbV9kYXRhYmFzZUJhY2tlbmRNYXAuZW5kKCkpIHsKICAg
ICAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZUxldmVsREI+IGJhY2tpbmdTdG9yZSA9IG9wZW5C
YWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3RvcnkpOwpAQCAtMTc0LDcgKzE3
NCw3IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCOjpvcGVuKGNvbnN0IFN0cmluZyYg
bmFtZSwgaW50NjRfdCB2ZXJzaW9uLCBpbnQ2NF90CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIAotICAgICAgICBkYXRhYmFzZUJhY2tlbmQgPSBJREJEYXRhYmFzZUJhY2tlbmRMZXZl
bERCOjpjcmVhdGUobmFtZSwgYmFja2luZ1N0b3JlLmdldCgpLCB0aGlzLCB1bmlxdWVJZGVudGlm
aWVyKTsKKyAgICAgICAgZGF0YWJhc2VCYWNrZW5kID0gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
Y3JlYXRlKG5hbWUsIGJhY2tpbmdTdG9yZS5nZXQoKSwgdGhpcywgdW5pcXVlSWRlbnRpZmllcik7
CiAgICAgICAgIGlmIChkYXRhYmFzZUJhY2tlbmQpCiAgICAgICAgICAgICBtX2RhdGFiYXNlQmFj
a2VuZE1hcC5zZXQodW5pcXVlSWRlbnRpZmllciwgZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsKICAg
ICAgICAgZWxzZSB7CkBAIC0xODcsOSArMTg3LDEyIEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRM
ZXZlbERCOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgaW50NjRfdCB2ZXJzaW9uLCBpbnQ2NF90
CiAgICAgZGF0YWJhc2VCYWNrZW5kLT5vcGVuQ29ubmVjdGlvbihjYWxsYmFja3MsIGRhdGFiYXNl
Q2FsbGJhY2tzLCB0cmFuc2FjdGlvbklkLCB2ZXJzaW9uKTsKIH0KIAotUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQjo6Y3Jl
YXRlVHJhbnNhY3Rpb25CYWNrZW5kKElEQkRhdGFiYXNlQmFja2VuZExldmVsREIqIGJhY2tlbmQs
IGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4g
ZGF0YWJhc2VDYWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMs
IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUpCitQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZT4gSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCOjptYXliZUNyZWF0
ZVRyYW5zYWN0aW9uQmFja2VuZChJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UqIGJhY2tlbmQs
IGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4g
ZGF0YWJhc2VDYWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMs
IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUpCiB7Ci0gICAgcmV0dXJuIElEQlRyYW5z
YWN0aW9uQmFja2VuZExldmVsREI6OmNyZWF0ZShiYWNrZW5kLCB0cmFuc2FjdGlvbklkLCBkYXRh
YmFzZUNhbGxiYWNrcywgb2JqZWN0U3RvcmVJZHMsIG1vZGUpOworICAgIGlmICghYmFja2VuZC0+
aXNJREJEYXRhYmFzZUJhY2tlbmRJbXBsKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0
dXJuIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6OmNyZWF0ZShzdGF0aWNfY2FzdDxJREJE
YXRhYmFzZUJhY2tlbmRJbXBsKj4oYmFja2VuZCksIHRyYW5zYWN0aW9uSWQsIGRhdGFiYXNlQ2Fs
bGJhY2tzLCBvYmplY3RTdG9yZUlkcywgbW9kZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIv
SURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZXZlbGRiL0lEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5oCmluZGV4IDdhMzMwYTMuLjAz
Y2FhZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVs
ZGIvSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGV2ZWxkYi9JREJGYWN0b3J5QmFja2VuZExldmVsREIuaApAQCAtNDUsNyAr
NDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBET01TdHJpbmdMaXN0OwogCiBjbGFz
cyBJREJCYWNraW5nU3RvcmVMZXZlbERCOwotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxE
QjsKK2NsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw7CiAKIGNsYXNzIElEQkZhY3RvcnlCYWNr
ZW5kTGV2ZWxEQiA6IHB1YmxpYyBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSB7CiBwdWJsaWM6
CkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRh
YmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1Jl
ZlB0cjxTZWN1cml0eU9yaWdpbj4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJp
bmcmIGRhdGFEaXIpIE9WRVJSSURFIEZJTkFMOwogCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gY3JlYXRlVHJhbnNhY3Rpb25CYWNrZW5kKElE
QkRhdGFiYXNlQmFja2VuZExldmVsREIqLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mLCBJbmRleGVk
REI6OlRyYW5zYWN0aW9uTW9kZSkgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gbWF5YmVDcmVhdGVUcmFuc2FjdGlv
bkJhY2tlbmQoSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlKiwgaW50NjRfdCB0cmFuc2FjdGlv
bklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0
X3Q+JiwgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUpIE9WRVJSSURFIEZJTkFMOwogCiAKIHBy
b3RlY3RlZDoKQEAgLTcxLDcgKzcxLDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxJREJCYWNraW5nU3RvcmVMZXZlbERCPiBvcGVuQmFja2luZ1N0b3JlKFBhc3NSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+LCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOwogCiBwcml2YXRlOgotICAg
IHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERC
PiA+IElEQkRhdGFiYXNlQmFja2VuZE1hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBS
ZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gPiBJREJEYXRhYmFzZUJhY2tlbmRNYXA7CiAg
ICAgSURCRGF0YWJhc2VCYWNrZW5kTWFwIG1fZGF0YWJhc2VCYWNrZW5kTWFwOwogCiAgICAgdHlw
ZWRlZiBIYXNoTWFwPFN0cmluZywgV2Vha1B0cjxJREJCYWNraW5nU3RvcmVMZXZlbERCPiA+IElE
QkJhY2tpbmdTdG9yZUxldmVsREJNYXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkxldmVsREJDb2RpbmcuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJMZXZlbERCQ29kaW5nLmNwcAppbmRleCA0
NjM3OWM1Li41NjBkMTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZXZlbGRiL0lEQkxldmVsREJDb2RpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCTGV2ZWxEQkNvZGluZy5jcHAKQEAgLTE1MjEsNyAr
MTUyMSw3IEBAIGludDY0X3QgSW5kZXhGcmVlTGlzdEtleTo6aW5kZXhJZCgpIGNvbnN0CiB9CiAK
IC8vIEZJWE1FOiBXZSBuZXZlciB1c2UgdGhpcyB0byBsb29rIHVwIG9iamVjdCBzdG9yZSBpZHMs
IGJlY2F1c2UgYSBtYXBwaW5nCi0vLyBpcyBrZXB0IGluIHRoZSBJREJEYXRhYmFzZUJhY2tlbmRM
ZXZlbERCLiBDYW4gdGhlIG1hcHBpbmcgYmVjb21lIHVucmVsaWFibGU/CisvLyBpcyBrZXB0IGlu
IHRoZSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLiBDYW4gdGhlIG1hcHBpbmcgYmVjb21lIHVucmVs
aWFibGU/CiAvLyBDYW4gd2UgcmVtb3ZlIHRoaXM/CiBjb25zdCBjaGFyKiBPYmplY3RTdG9yZU5h
bWVzS2V5OjpkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBPYmpl
Y3RTdG9yZU5hbWVzS2V5KiByZXN1bHQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkxldmVsREJDb2RpbmcuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCTGV2ZWxEQkNvZGluZy5oCmluZGV4IGFk
MjJmMTEuLjI3OGQwZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2xldmVsZGIvSURCTGV2ZWxEQkNvZGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCTGV2ZWxEQkNvZGluZy5oCkBAIC0yODEsNyArMjgxLDcg
QEAgcHJpdmF0ZToKIGNsYXNzIE9iamVjdFN0b3JlTmFtZXNLZXkgewogcHVibGljOgogICAgIC8v
IEZJWE1FOiBXZSBuZXZlciB1c2UgdGhpcyB0byBsb29rIHVwIG9iamVjdCBzdG9yZSBpZHMsIGJl
Y2F1c2UgYSBtYXBwaW5nCi0gICAgLy8gaXMga2VwdCBpbiB0aGUgSURCRGF0YWJhc2VCYWNrZW5k
TGV2ZWxEQi4gQ2FuIHRoZSBtYXBwaW5nIGJlY29tZSB1bnJlbGlhYmxlPworICAgIC8vIGlzIGtl
cHQgaW4gdGhlIElEQkRhdGFiYXNlQmFja2VuZEltcGwuIENhbiB0aGUgbWFwcGluZyBiZWNvbWUg
dW5yZWxpYWJsZT8KICAgICAvLyBDYW4gd2UgcmVtb3ZlIHRoaXM/CiAgICAgc3RhdGljIGNvbnN0
IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIE9iamVj
dFN0b3JlTmFtZXNLZXkqIHJlc3VsdCk7CiAgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUo
aW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5z
YWN0aW9uQmFja2VuZExldmVsREIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmNwcAppbmRleCAxYmE5Y2Ji
Li45YWEyNTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9s
ZXZlbGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxE
Qi5jcHAKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZUxldmVs
REIuaCIKICNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5oIgotI2luY2x1ZGUgIklE
QkRhdGFiYXNlQmFja2VuZExldmVsREIuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3MuaCIKICNpbmNsdWRlICJJREJE
YXRhYmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCkBAIC00MCw3ICs0
MCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRMZXZlbERCPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpjcmVhdGUoSURC
RGF0YWJhc2VCYWNrZW5kTGV2ZWxEQiogZGF0YWJhc2VCYWNrZW5kLCBpbnQ2NF90IGlkLCBQYXNz
UmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2
NF90PiYgb2JqZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUpCitQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI+IElEQlRyYW5zYWN0aW9uQmFj
a2VuZExldmVsREI6OmNyZWF0ZShJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZUJhY2tl
bmQsIGludDY0X3QgaWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNr
cywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgSW5kZXhlZERCOjpUcmFu
c2FjdGlvbk1vZGUgbW9kZSkKIHsKICAgICBIYXNoU2V0PGludDY0X3Q+IG9iamVjdFN0b3JlSGFz
aFNldDsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFN0b3JlSWRzLnNpemUoKTsg
KytpKQpAQCAtNDksNyArNDksNyBAQCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExl
dmVsREI+IElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6OmNyZWF0ZShJRAogICAgIHJldHVy
biBhZG9wdFJlZihuZXcgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQihkYXRhYmFzZUJhY2tl
bmQsIGlkLCBjYWxsYmFja3MsIG9iamVjdFN0b3JlSGFzaFNldCwgbW9kZSkpOwogfQogCi1JREJU
cmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKElE
QkRhdGFiYXNlQmFja2VuZExldmVsREIqIGRhdGFiYXNlQmFja2VuZCwgaW50NjRfdCBpZCwgUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBIYXNoU2V0PGlu
dDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUgbW9kZSkK
K0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6OklEQlRyYW5zYWN0aW9uQmFja2VuZExldmVs
REIoSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2VCYWNrZW5kLCBpbnQ2NF90IGlkLCBQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0IEhhc2hTZXQ8
aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSBtb2Rl
KQogICAgIDogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKGlkKQogICAgICwgbV9vYmpl
Y3RTdG9yZUlkcyhvYmplY3RTdG9yZUlkcykKICAgICAsIG1fbW9kZShtb2RlKQpAQCAtMjgyLDcg
KzI4Miw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6c2NoZWR1bGVEZWxl
dGVPYmplY3RTdG9yZU9wZXJhdGlvbihjb25zdCBJREJPCiAKIHZvaWQgSURCVHJhbnNhY3Rpb25C
YWNrZW5kTGV2ZWxEQjo6c2NoZWR1bGVWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uKGludDY0X3QgdHJh
bnNhY3Rpb25JZCwgaW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFz
ZUNhbGxiYWNrcywgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEpCiB7Ci0gICAg
c2NoZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OlZlcnNpb25DaGFuZ2VPcGVy
YXRpb246OmNyZWF0ZSh0aGlzLCB0cmFuc2FjdGlvbklkLCByZXF1ZXN0ZWRWZXJzaW9uLCBjYWxs
YmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzKSwgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6VmVy
c2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgU3RyaW5nOjpudW1iZXIobWV0
YWRhdGEudmVyc2lvbiksIG1ldGFkYXRhLnZlcnNpb24pKTsKKyAgICBzY2hlZHVsZVRhc2soSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMs
IHRyYW5zYWN0aW9uSWQsIHJlcXVlc3RlZFZlcnNpb24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxs
YmFja3MpLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRp
b246OmNyZWF0ZSh0aGlzLCBTdHJpbmc6Om51bWJlcihtZXRhZGF0YS52ZXJzaW9uKSwgbWV0YWRh
dGEudmVyc2lvbikpOwogfQogCiB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6OnNj
aGVkdWxlQ3JlYXRlSW5kZXhPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJ
REJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERC
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0
aW9uQmFja2VuZExldmVsREIuaAppbmRleCA1ZTY1OWVhLi45MmJmYTczIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZExldmVsREIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZl
bGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuaApAQCAtMzAsNyArMzAsNyBAQAogCiAj
aW5jbHVkZSAiSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNl
QmFja2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZExldmVsREIu
aCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCRGF0
YWJhc2VFcnJvci5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5o
IgogI2luY2x1ZGUgIlRpbWVyLmgiCkBAIC00Niw3ICs0Niw3IEBAIGNsYXNzIElEQkRhdGFiYXNl
Q2FsbGJhY2tzOwogCiBjbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCIEZJTkFMIDog
cHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4gY3JlYXRlKElEQkRh
dGFiYXNlQmFja2VuZExldmVsREIqLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3Jl
SWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4gY3JlYXRlKElEQkRhdGFiYXNlQmFja2VuZElt
cGwqLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFj
a3M+LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRy
YW5zYWN0aW9uTW9kZSk7CiAgICAgdmlydHVhbCB+SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxE
QigpOwogCiAgICAgdmlydHVhbCB2b2lkIGNvbW1pdCgpIE9WRVJSSURFIEZJTkFMOwpAQCAtNzAs
NyArNzAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRDb21wbGV0ZVByZWVtcHRpdmVFdmVudCgp
IHsgbV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cy0tOyBBU1NFUlQobV9wZW5kaW5nUHJlZW1wdGl2
ZUV2ZW50cyA+PSAwKTsgfQogICAgIHZpcnR1YWwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpU
cmFuc2FjdGlvbiogYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSB7IHJldHVybiAmbV90cmFuc2Fj
dGlvbjsgfQogCi0gICAgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQiogZGF0YWJhc2UoKSBjb25z
dCB7IHJldHVybiBtX2RhdGFiYXNlLmdldCgpOyB9CisgICAgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bCogZGF0YWJhc2UoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNlLmdldCgpOyB9CiAKICAgICB2
aXJ0dWFsIHZvaWQgc2NoZWR1bGVDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbihjb25zdCBJREJP
YmplY3RTdG9yZU1ldGFkYXRhJikgT1ZFUlJJREUgRklOQUw7CiAgICAgdmlydHVhbCB2b2lkIHNj
aGVkdWxlRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oY29uc3QgSURCT2JqZWN0U3RvcmVNZXRh
ZGF0YSYpIE9WRVJSSURFIEZJTkFMOwpAQCAtODYsNyArODYsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHNjaGVkdWxlQ2xlYXJPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pIE9WRVJSSURFIEZJTkFMOwogICAgIAogcHJpdmF0ZToK
LSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKElEQkRhdGFiYXNlQmFja2VuZExldmVs
REIqLCBpbnQ2NF90IGlkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29uc3Qg
SGFzaFNldDxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25N
b2RlKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKElEQkRhdGFiYXNlQmFja2Vu
ZEltcGwqLCBpbnQ2NF90IGlkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29u
c3QgSGFzaFNldDxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rp
b25Nb2RlKTsKIAogICAgIGVudW0gU3RhdGUgewogICAgICAgICBVbnVzZWQsIC8vIENyZWF0ZWQs
IGJ1dCBubyB0YXNrcyB5ZXQuCkBAIC0xMDksNyArMTA5LDcgQEAgcHJpdmF0ZToKICAgICBTdGF0
ZSBtX3N0YXRlOwogICAgIGJvb2wgbV9jb21taXRQZW5kaW5nOwogICAgIFJlZlB0cjxJREJEYXRh
YmFzZUNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2Vu
ZExldmVsREI+IG1fZGF0YWJhc2U7CisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+
IG1fZGF0YWJhc2U7CiAKICAgICB0eXBlZGVmIERlcXVlPE93blB0cjxPcGVyYXRpb24+PiBUYXNr
UXVldWU7CiAgICAgVGFza1F1ZXVlIG1fdGFza1F1ZXVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZl
bERCT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZl
bGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREJPcGVyYXRpb25zLmNwcAppbmRleCBkZWVi
NjI3Li5kYWQ2NTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREJPcGVyYXRpb25zLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9u
QmFja2VuZExldmVsREJPcGVyYXRpb25zLmNwcApAQCAtMzQwLDEwICszNDAsMTAgQEAgdm9pZCBE
ZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybSgpCiAgICAgfQogfQogCi12b2lkIElE
QkRhdGFiYXNlQmFja2VuZExldmVsREI6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb246OnBlcmZvcm0o
KQordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjpw
ZXJmb3JtKCkKIHsKICAgICBMT0coU3RvcmFnZUFQSSwgIlZlcnNpb25DaGFuZ2VPcGVyYXRpb24i
KTsKLSAgICBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCKiBkYXRhYmFzZSA9IG1fdHJhbnNhY3Rp
b24tPmRhdGFiYXNlKCk7CisgICAgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2UgPSBt
X3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIGludDY0X3QgZGF0YWJhc2VJZCA9IGRhdGFi
YXNlLT5pZCgpOwogICAgIHVpbnQ2NF90IG9sZFZlcnNpb24gPSBkYXRhYmFzZS0+bV9tZXRhZGF0
YS52ZXJzaW9uOwogCkBAIC0zNzMsNyArMzczLDcgQEAgdm9pZCBEZWxldGVPYmplY3RTdG9yZUFi
b3J0T3BlcmF0aW9uOjpwZXJmb3JtKCkKICAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5h
ZGRPYmplY3RTdG9yZShtX29iamVjdFN0b3JlTWV0YWRhdGEsIElEQk9iamVjdFN0b3JlTWV0YWRh
dGE6OkludmFsaWRJZCk7CiB9CiAKLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6VmVy
c2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKCkKK3ZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6VmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKCkKIHsKICAgICBM
T0coU3RvcmFnZUFQSSwgIlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbiIpOwogICAgIG1fdHJh
bnNhY3Rpb24tPmRhdGFiYXNlKCktPm1fbWV0YWRhdGEudmVyc2lvbiA9IG1fcHJldmlvdXNJbnRW
ZXJzaW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2
ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCT3BlcmF0aW9ucy5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZl
bERCT3BlcmF0aW9ucy5oCmluZGV4IGJjZjcyZmQuLmM5ZDg5YzEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5k
TGV2ZWxEQk9wZXJhdGlvbnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREJPcGVyYXRpb25zLmgKQEAgLTcy
LDcgKzcyLDcgQEAgcHJpdmF0ZToKICAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1f
b2JqZWN0U3RvcmVNZXRhZGF0YTsKIH07CiAKLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZExldmVs
REI6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5k
TGV2ZWxEQjo6T3BlcmF0aW9uIHsKK2NsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZlcnNp
b25DaGFuZ2VPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6
T3BlcmF0aW9uIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRMZXZlbERCOjpPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmRM
ZXZlbERCKiB0cmFuc2FjdGlvbiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IHZlcnNp
b24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0
YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzKQogICAgIHsKQEAgLTEzMiw3ICsxMzIs
NyBAQCBwcml2YXRlOgogICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbV9vYmplY3RTdG9yZU1l
dGFkYXRhOwogfTsKIAotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6VmVyc2lvbkNo
YW5nZUFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6
Ok9wZXJhdGlvbiB7CitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdl
QWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6T3Bl
cmF0aW9uIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRMZXZlbERCOjpPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZl
bERCKiB0cmFuc2FjdGlvbiwgY29uc3QgU3RyaW5nJiBwcmV2aW91c1ZlcnNpb24sIGludDY0X3Qg
cHJldmlvdXNJbnRWZXJzaW9uKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
eHByb2ovV2ViQ29yZS52Y3hwcm9qCmluZGV4IGNlNDM2YTcuLmQ1ZjA2NjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagpAQCAtNjU0NSw3ICs2
NTQ1LDYgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElE
QkN1cnNvci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGluZGV4
ZWRkYlxsZXZlbGRiXElEQkN1cnNvckJhY2tlbmRMZXZlbERCLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkRhdGFiYXNlLmNwcCIgLz4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXGxldmVsZGJcSURCRGF0
YWJhc2VCYWNrZW5kTGV2ZWxEQi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxN
b2R1bGVzXGluZGV4ZWRkYlxJREJGYWN0b3J5LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXGxldmVsZGJcSURCRmFjdG9yeUJhY2tlbmRMZXZlbERC
LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNwcCIgLz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwppbmRleCA4MTI3NDll
Li40OGIzNTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2Vi
Q29yZS52Y3hwcm9qLmZpbHRlcnMKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9q
L1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCkBAIC02ODg2LDkgKzY4ODYsNiBAQAogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xpbmRleGVkZGJcbGV2ZWxkYlxJREJDdXJzb3JCYWNr
ZW5kTGV2ZWxEQi5jcHAiPgogICAgICAgPEZpbHRlcj5Nb2R1bGVzXGluZGV4ZWRkYlxsZXZlbGRi
PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxN
b2R1bGVzXGluZGV4ZWRkYlxsZXZlbGRiXElEQkRhdGFiYXNlQmFja2VuZExldmVsREIuY3BwIj4K
LSAgICAgIDxGaWx0ZXI+TW9kdWxlc1xpbmRleGVkZGJcbGV2ZWxkYjwvRmlsdGVyPgotICAgIDwv
Q2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xpbmRleGVkZGJc
bGV2ZWxkYlxJREJGYWN0b3J5QmFja2VuZExldmVsREIuY3BwIj4KICAgICAgIDxGaWx0ZXI+TW9k
dWxlc1xpbmRleGVkZGJcbGV2ZWxkYjwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDgz
NDZlMTQuLjE4YjkwOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTE2NDEsNiArMTY0MSw4IEBACiAJCTUxMEQ0QTM4MTAzMTY1
RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEQ0QTMyMTAzMTY1RUUwMDQ5RUE1NCAv
KiBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQuaCAqLzsgfTsKIAkJNTEwRUM0MkExODE3MEM3NTAw
Qzg5N0Q2IC8qIElEQkluZGV4V3JpdGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEVDNDI4MTgxNzBDNzUwMEM4OTdENiAvKiBJREJJbmRleFdy
aXRlci5jcHAgKi87IH07CiAJCTUxMEVDNDJCMTgxNzBDNzUwMEM4OTdENiAvKiBJREJJbmRleFdy
aXRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEw
RUM0MjkxODE3MEM3NTAwQzg5N0Q2IC8qIElEQkluZGV4V3JpdGVyLmggKi87IH07CisJCTUxMEVD
NDRGMTgxNzc5RDUwMEM4OTdENiAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEVDNDREMTgxNzc5RDUw
MEM4OTdENiAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCAqLzsgfTsKKwkJNTEwRUM0NTAx
ODE3NzlENTAwQzg5N0Q2IC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEVDNDRFMTgxNzc5RDUwMEM4OTdE
NiAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTExMjkzNUYzRDU0QjRCNTJGQUY5NzNGIC8qIEluc3Bl
Y3RvckhlYXBQcm9maWxlckFnZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxMTI5MzYxM0Q2REI0QjUyRkFGOTczRiAvKiBJbnNwZWN0b3JIZWFw
UHJvZmlsZXJBZ2VudC5jcHAgKi87IH07CiAJCTUxMTI5MzYwM0Q2MEI0QjUyRkFGOTczRiAvKiBJ
bnNwZWN0b3JIZWFwUHJvZmlsZXJBZ2VudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTExMjkzNjIzRDg1QjRCNTJGQUY5NzNGIC8qIEluc3BlY3Rvckhl
YXBQcm9maWxlckFnZW50LmggKi87IH07CiAJCTUxMUVGMkMwMTdGMEZEMzUwMEU0RkExNiAvKiBK
U0lEQkFueS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTFFRjJBODE3RjBGQzQ4MDBFNEZBMTYgLyogSlNJREJBbnkuY3BwICovOyB9OwpAQCAtODIx
OCw2ICs4MjIwLDggQEAKIAkJNTEwRDRBMzIxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVh
bUhhbmRsZUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb2NrZXRT
dHJlYW1IYW5kbGVDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwRUM0
MjgxODE3MEM3NTAwQzg5N0Q2IC8qIElEQkluZGV4V3JpdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQkluZGV4V3JpdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTEwRUM0MjkxODE3MEM3NTAwQzg5N0Q2IC8qIElEQkluZGV4V3JpdGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQkluZGV4V3JpdGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxMEVDNDREMTgxNzc5RDUwMEM4OTdENiAvKiBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IElEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MTBFQzQ0RTE4MTc3OUQ1MDBDODk3RDYgLyogSURCRGF0YWJhc2VCYWNrZW5kSW1w
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMTI5MzYxM0Q2REI0QjUyRkFG
OTczRiAvKiBJbnNwZWN0b3JIZWFwUHJvZmlsZXJBZ2VudC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JIZWFwUHJvZmlsZXJBZ2VudC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMTI5MzYyM0Q4NUI0QjUyRkFGOTczRiAvKiBJbnNw
ZWN0b3JIZWFwUHJvZmlsZXJBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbnNwZWN0b3JIZWFwUHJvZmlsZXJBZ2VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MTFFRjJBODE3RjBGQzQ4MDBFNEZBMTYgLyogSlNJREJBbnkuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNJREJBbnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY3
MTUsNiArMTY3MTksOCBAQAogCQkJCTUxRDcxOTdDMTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRh
YmFzZS5jcHAgKi8sCiAJCQkJNTFENzE5N0QxODExMDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNl
LmggKi8sCiAJCQkJNTFENzE5N0UxODExMDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNlLmlkbCAq
LywKKwkJCQk1MTBFQzQ0RDE4MTc3OUQ1MDBDODk3RDYgLyogSURCRGF0YWJhc2VCYWNrZW5kSW1w
bC5jcHAgKi8sCisJCQkJNTEwRUM0NEUxODE3NzlENTAwQzg5N0Q2IC8qIElEQkRhdGFiYXNlQmFj
a2VuZEltcGwuaCAqLywKIAkJCQk1MUQ3MTk3RjE4MTEwNkRGMDAxNkRDNTEgLyogSURCRGF0YWJh
c2VCYWNrZW5kSW50ZXJmYWNlLmggKi8sCiAJCQkJNTFENzE5ODAxODExMDZERjAwMTZEQzUxIC8q
IElEQkRhdGFiYXNlQ2FsbGJhY2tzLmggKi8sCiAJCQkJNTFENzE5ODExODExMDZERjAwMTZEQzUx
IC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5jcHAgKi8sCkBAIC0yMzQ2OSw2ICsyMzQ3NSw3
IEBACiAJCQkJOTM1QzQ3NjMwOUFDNENFNjAwQTZBQUI0IC8qIE1vdXNlRXZlbnRXaXRoSGl0VGVz
dFJlc3VsdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDMxQjQ4MEE0NEVGQzcwMEY5OTJFMCAv
KiBNb3VzZVJlbGF0ZWRFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlERkMwOTlFNjQ5
MjAwNTZFNTgxIC8qIE1vdmVTZWxlY3Rpb25Db21tYW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQk1
MTBFQzQ1MDE4MTc3OUQ1MDBDODk3RDYgLyogSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRkRCMTcwMDYxNEEyQkFCMjAwQTJCNUQ5IC8qIE11bHRpQ2hhbm5lbFJl
c2FtcGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzZGMDkwMEExNDMyN0I2MTAwNjg1ODQ5IC8q
IE11dGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDMxQjRBMEE0NEVGQzcw
MEY5OTJFMCAvKiBNdXRhdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI3NjA1LDYgKzI3
NjEyLDcgQEAKIAkJCQkwNzhFMDkxMTE3RDE0Q0VFMDA0MjBBQTEgLyogUlRDVm9pZFJlcXVlc3RJ
bXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5ODM5MTU4MEYxRTc3NjkwMEMyMzc4MiAvKiBX
ZWJLaXRDU1NNYXRyaXguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI0QkY3N0MxNUNDM0JBRjAw
MzE5MUYyIC8qIFdlYktpdENTU01peEZ1bmN0aW9uVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNTEwRUM0NEYxODE3NzlENTAwQzg5N0Q2IC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOEFBNjFDRkYxNDRENTk1QjAwRjM3MzUwIC8qIFdlYktpdENT
U1JlZ2lvblJ1bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTAzOEJDMDcxNDcxMUNEQjAwOTVF
MEQxIC8qIFdlYktpdENTU1NoYWRlclZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA1NjJG
OTQ2MTU3M0VDRUIwMDMxQ0ExNiAvKiBXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlLmNwcCBpbiBT
b3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDk4ODcyNWIuLjQwODM4YWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNCBAQAorMjAxMy0xMC0yMiAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5j
b20+CisKKyAgICAgICAgTWFrZSBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmNwcCBiZSBjcm9z
cyBwbGF0Zm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTIzMDI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCRmFjdG9yeUJhY2tlbmQu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJGYWN0b3J5QmFja2VuZDo6bWF5YmVDcmVhdGVU
cmFuc2FjdGlvbkJhY2tlbmQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4
ZWREQi9XZWJJREJGYWN0b3J5QmFja2VuZC5oOgorCiAyMDEzLTEwLTIyICBSeXVhbiBDaG9pICA8
cnl1YW4uY2hvaUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIGJ1aWxkIGZpeCBh
dHRlbXB0IG9uIEVGTCBwb3J0IGFmdGVyIHIxNTc4NDIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCRmFjdG9yeUJhY2tlbmQu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklE
QkZhY3RvcnlCYWNrZW5kLmNwcAppbmRleCAxMzdjYWNjLi5hM2U4ZWUyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCRmFjdG9y
eUJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0lu
ZGV4ZWREQi9XZWJJREJGYWN0b3J5QmFja2VuZC5jcHAKQEAgLTEwMCw3ICsxMDAsNyBAQCB2b2lk
IFdlYklEQkZhY3RvcnlCYWNrZW5kOjpyZW1vdmVJREJEYXRhYmFzZUJhY2tlbmQoY29uc3QgU3Ry
aW5nJikKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1QYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZT4gV2ViSURCRmFjdG9yeUJhY2tlbmQ6OmNyZWF0ZVRyYW5zYWN0
aW9uQmFja2VuZChJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCKiwgaW50NjRfdCB0cmFuc2FjdGlv
bklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0
X3Q+JiwgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUpCitQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZT4gV2ViSURCRmFjdG9yeUJhY2tlbmQ6Om1heWJlQ3JlYXRlVHJh
bnNhY3Rpb25CYWNrZW5kKElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZSosIGludDY0X3QgdHJh
bnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IFZlY3Rv
cjxpbnQ2NF90PiYsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlKQogewogICAgIG5vdEltcGxl
bWVudGVkKCk7CiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCRmFjdG9yeUJhY2tlbmQuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJGYWN0b3J5QmFj
a2VuZC5oCmluZGV4IDdlMjUyYzguLmRkNTA0NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJGYWN0b3J5QmFja2VuZC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJG
YWN0b3J5QmFja2VuZC5oCkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVJREJEYXRhYmFzZUJhY2tlbmQoY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlm
aWVyKSBPVkVSUklERSBGSU5BTDsKIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZVRyYW5zYWN0aW9uQmFja2VuZChX
ZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCKiwgaW50NjRfdCB0cmFuc2FjdGlvbklk
LCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9y
PGludDY0X3Q+JiwgV2ViQ29yZTo6SW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUpOworICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+
IG1heWJlQ3JlYXRlVHJhbnNhY3Rpb25CYWNrZW5kKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2Vu
ZEludGVyZmFjZSosIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJ
REJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIFdlYkNvcmU6Oklu
ZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlKTsKIAogcHJpdmF0ZToKICAgICBXZWJJREJGYWN0b3J5
QmFja2VuZCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214929</attachid>
            <date>2013-10-22 22:24:31 -0700</date>
            <delta_ts>2013-10-23 11:10:34 -0700</delta_ts>
            <desc>Patch v2 - More style, more building.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>109392</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggY2E0ODY4NC4uNDdiZWUwOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTc2NSw2ICs3NjUsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNv
cldpdGhWYWx1ZS5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKKyAg
ICBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAogICAgIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5jcHAKICAgICBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9J
REJFdmVudERpc3BhdGNoZXIuY3BwCkBAIC03ODYsNyArNzg3LDYgQEAgc2V0KFdlYkNvcmVfU09V
UkNFUwogICAgIE1vZHVsZXMvaW5kZXhlZGRiL1dvcmtlckdsb2JhbFNjb3BlSW5kZXhlZERhdGFi
YXNlLmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlTGV2
ZWxEQi5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkN1cnNvckJhY2tlbmRM
ZXZlbERCLmNwcAotICAgIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRGF0YWJhc2VCYWNr
ZW5kTGV2ZWxEQi5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkZhY3RvcnlC
YWNrZW5kTGV2ZWxEQi5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkxldmVs
REJDb2RpbmcuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlv
bkJhY2tlbmRMZXZlbERCLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDU0MjkxZWUuLmFmYjZhOTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw1MCBAQAorMjAxMy0xMC0yMiAgQnJhZHkgRWlkc29uICA8YmVpZHNv
bkBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmNw
cCBiZSBjcm9zcyBwbGF0Zm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTIzMDI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTW92ZSBpdCBvdXQgb2YgdGhlIGluZGV4ZWRkYi9sZXZlbGRiIGRpcmVjdG9y
eSwgYW5kIHJlbmFtZSBpdCB0byBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLgorCisgICAgICAgIFBy
b2plY3QgZmlsZXM6CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFr
ZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9q
OgorICAgICAgICAqIFdlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRGF0YWJhc2VCYWNr
ZW5kTGV2ZWxEQi5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VC
YWNrZW5kSW1wbC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvbGV2ZWxkYi9JREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmguCisKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6aXNJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsKTogQWRkIHRvIHN1cHBvcnQgYSByZXF1aXJlZCBjYXN0IGluIExldmVsREIgY29kZS4KKwor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmg6
CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkN1cnNvckJhY2tlbmRM
ZXZlbERCLmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkN1cnNv
ckJhY2tlbmRMZXZlbERCLmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRi
L0lEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0
b3J5QmFja2VuZExldmVsREI6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkZhY3RvcnlCYWNrZW5kTGV2ZWxEQjo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0
b3J5QmFja2VuZExldmVsREI6Om1heWJlQ3JlYXRlVHJhbnNhY3Rpb25CYWNrZW5kKToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5o
OgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJMZXZlbERCQ29kaW5n
LmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkxldmVsREJDb2Rp
bmcuaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rp
b25CYWNrZW5kTGV2ZWxEQi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJh
Y2tlbmRMZXZlbERCOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25C
YWNrZW5kTGV2ZWxEQjo6SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpzY2hlZHVsZVZlcnNpb25DaGFu
Z2VPcGVyYXRpb24pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCVHJh
bnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5oOgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
bGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCT3BlcmF0aW9ucy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlT3BlcmF0
aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6
OlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCT3BlcmF0aW9u
cy5oOgorCiAyMDEzLTEwLTIyICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTU3ODI2LgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggZDI3OTAwMC4uODlhOGEwNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCkBAIC0xODAyLDggKzE4MDIsOCBAQCB3ZWJjb3JlX21vZHVsZXNfc291
cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmgg
XAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1
ZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkRhdGFi
YXNlQmFja2VuZExldmVsREIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9sZXZlbGRiL0lEQkRhdGFiYXNlQmFja2VuZExldmVsREIuaCBcCisJU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgXAorCVNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaCBcCiAJU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNl
LmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJh
Y2tzLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQ2Fs
bGJhY2tzSW1wbC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5iZTg4NTk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKQEAgLTAsMCAr
MSw2MjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCRGF0YWJh
c2VCYWNrZW5kSW1wbC5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNs
dWRlICJJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3MuaCIKKyNpbmNs
dWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5k
SW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCSW5kZXhXcml0ZXIuaCIKKyNpbmNsdWRlICJJREJL
ZXlSYW5nZS5oIgorI2luY2x1ZGUgIklEQlJlY29yZElkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1
ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OmNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQkJhY2tpbmdTdG9yZUlu
dGVyZmFjZSogYmFja2luZ1N0b3JlLCBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSogZmFjdG9y
eSwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKQoreworICAgIFJlZlB0cjxJREJEYXRh
YmFzZUJhY2tlbmRJbXBsPiBiYWNrZW5kID0gYWRvcHRSZWYobmV3IElEQkRhdGFiYXNlQmFja2Vu
ZEltcGwobmFtZSwgYmFja2luZ1N0b3JlLCBmYWN0b3J5LCB1bmlxdWVJZGVudGlmaWVyKSk7Cisg
ICAgaWYgKCFiYWNrZW5kLT5vcGVuSW50ZXJuYWwoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIGJhY2tlbmQucmVsZWFzZSgpOworfQorCitJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQmFja2luZ1N0b3Jl
SW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKiBmYWN0
b3J5LCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpCisgICAgOiBtX2JhY2tpbmdTdG9y
ZShiYWNraW5nU3RvcmUpCisgICAgLCBtX21ldGFkYXRhKG5hbWUsIEludmFsaWRJZCwgMCwgSW52
YWxpZElkKQorICAgICwgbV9pZGVudGlmaWVyKHVuaXF1ZUlkZW50aWZpZXIpCisgICAgLCBtX2Zh
Y3RvcnkoZmFjdG9yeSkKKyAgICAsIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvcihJREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yOjpjcmVhdGUoKSkKKyAgICAsIG1fY2xvc2luZ0Nvbm5lY3Rpb24oZmFs
c2UpCit7CisgICAgQVNTRVJUKCFtX21ldGFkYXRhLm5hbWUuaXNOdWxsKCkpOworfQorCit2b2lk
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmFkZE9iamVjdFN0b3JlKGNvbnN0IElEQk9iamVjdFN0
b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlLCBpbnQ2NF90IG5ld01heE9iamVjdFN0b3JlSWQpCit7
CisgICAgQVNTRVJUKCFtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9y
ZS5pZCkpOworICAgIGlmIChuZXdNYXhPYmplY3RTdG9yZUlkICE9IElEQk9iamVjdFN0b3JlTWV0
YWRhdGE6OkludmFsaWRJZCkgeworICAgICAgICBBU1NFUlQobV9tZXRhZGF0YS5tYXhPYmplY3RT
dG9yZUlkIDwgbmV3TWF4T2JqZWN0U3RvcmVJZCk7CisgICAgICAgIG1fbWV0YWRhdGEubWF4T2Jq
ZWN0U3RvcmVJZCA9IG5ld01heE9iamVjdFN0b3JlSWQ7CisgICAgfQorICAgIG1fbWV0YWRhdGEu
b2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZS5pZCwgb2JqZWN0U3RvcmUpOworfQorCit2b2lk
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlbW92ZU9iamVjdFN0b3JlKGludDY0X3Qgb2JqZWN0
U3RvcmVJZCkKK3sKKyAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMo
b2JqZWN0U3RvcmVJZCkpOworICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnJlbW92ZShvYmpl
Y3RTdG9yZUlkKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjphZGRJbmRleChp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4LCBpbnQ2
NF90IG5ld01heEluZGV4SWQpCit7CisgICAgQVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVz
LmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKKyAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9i
amVjdFN0b3JlID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOwor
CisgICAgQVNTRVJUKCFvYmplY3RTdG9yZS5pbmRleGVzLmNvbnRhaW5zKGluZGV4LmlkKSk7Cisg
ICAgb2JqZWN0U3RvcmUuaW5kZXhlcy5zZXQoaW5kZXguaWQsIGluZGV4KTsKKyAgICBpZiAobmV3
TWF4SW5kZXhJZCAhPSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKKyAgICAgICAgQVNT
RVJUKG9iamVjdFN0b3JlLm1heEluZGV4SWQgPCBuZXdNYXhJbmRleElkKTsKKyAgICAgICAgb2Jq
ZWN0U3RvcmUubWF4SW5kZXhJZCA9IG5ld01heEluZGV4SWQ7CisgICAgfQorICAgIG1fbWV0YWRh
dGEub2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZUlkLCBvYmplY3RTdG9yZSk7Cit9CisKK3Zv
aWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVtb3ZlSW5kZXgoaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQpCit7CisgICAgQVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0U3Rv
cmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKKyAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRh
IG9iamVjdFN0b3JlID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQp
OworCisgICAgQVNTRVJUKG9iamVjdFN0b3JlLmluZGV4ZXMuY29udGFpbnMoaW5kZXhJZCkpOwor
ICAgIG9iamVjdFN0b3JlLmluZGV4ZXMucmVtb3ZlKGluZGV4SWQpOworICAgIG1fbWV0YWRhdGEu
b2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZUlkLCBvYmplY3RTdG9yZSk7Cit9CisKK2Jvb2wg
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbkludGVybmFsKCkKK3sKKyAgICBib29sIHN1Y2Nl
c3MgPSBmYWxzZTsKKyAgICBib29sIG9rID0gbV9iYWNraW5nU3RvcmUtPmdldElEQkRhdGFiYXNl
TWV0YURhdGEobV9tZXRhZGF0YS5uYW1lLCAmbV9tZXRhZGF0YSwgc3VjY2Vzcyk7CisgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRShzdWNjZXNzID09IChtX21ldGFkYXRhLmlkICE9IEludmFsaWRJZCks
ICJzdWNjZXNzID0gJXMsIG1faWQgPSAlbGxkIiwgc3VjY2VzcyA/ICJ0cnVlIiA6ICJmYWxzZSIs
IHN0YXRpY19jYXN0PGxvbmcgbG9uZz4obV9tZXRhZGF0YS5pZCkpOworICAgIGlmICghb2spCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIG1f
YmFja2luZ1N0b3JlLT5nZXRPYmplY3RTdG9yZXMobV9tZXRhZGF0YS5pZCwgJm1fbWV0YWRhdGEu
b2JqZWN0U3RvcmVzKTsKKworICAgIHJldHVybiBtX2JhY2tpbmdTdG9yZS0+Y3JlYXRlSURCRGF0
YWJhc2VNZXRhRGF0YShtX21ldGFkYXRhLm5hbWUsIFN0cmluZzo6bnVtYmVyKG1fbWV0YWRhdGEu
dmVyc2lvbiksIG1fbWV0YWRhdGEudmVyc2lvbiwgbV9tZXRhZGF0YS5pZCk7Cit9CisKK0lEQkRh
dGFiYXNlQmFja2VuZEltcGw6On5JREJEYXRhYmFzZUJhY2tlbmRJbXBsKCkKK3sKK30KKworSURC
QmFja2luZ1N0b3JlSW50ZXJmYWNlKiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpiYWNraW5nU3Rv
cmUoKSBjb25zdAoreworICAgIHJldHVybiBtX2JhY2tpbmdTdG9yZS5nZXQoKTsKK30KKwordm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IHRyYW5z
YWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpCit7CisgICAgTE9HKFN0
b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9yZSIpOwor
ICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24gPSBtX3RyYW5z
YWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisgICAgaWYgKCF0cmFuc2FjdGlvbikKKyAgICAg
ICAgcmV0dXJuOworICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6
VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKTsKKworICAgIEFTU0VSVCghbV9tZXRhZGF0YS5vYmpl
Y3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAgIElEQk9iamVjdFN0b3JlTWV0
YWRhdGEgb2JqZWN0U3RvcmVNZXRhZGF0YShuYW1lLCBvYmplY3RTdG9yZUlkLCBrZXlQYXRoLCBh
dXRvSW5jcmVtZW50LCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6Ok1pbmltdW1JbmRleElk
KTsKKworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZUNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9u
KG9iamVjdFN0b3JlTWV0YWRhdGEpOworICAgIGFkZE9iamVjdFN0b3JlKG9iamVjdFN0b3JlTWV0
YWRhdGEsIG9iamVjdFN0b3JlSWQpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OmRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
ZGVsZXRlT2JqZWN0U3RvcmUiKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
IHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAgIGlm
ICghdHJhbnNhY3Rpb24pCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQodHJhbnNhY3Rpb24t
Pm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVyc2lvbkNoYW5nZSk7CisKKyAgICBB
U1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOwor
ICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEgPSBt
X21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7CisKKyAgICB0cmFuc2Fj
dGlvbi0+c2NoZWR1bGVEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbihvYmplY3RTdG9yZU1ldGFk
YXRhKTsKKyAgICByZW1vdmVPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkKTsKK30KKwordm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleChpbnQ2NF90IHRyYW5zYWN0aW9uSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50
cnkpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVh
dGVJbmRleCIpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rp
b24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisgICAgaWYgKCF0cmFuc2Fj
dGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09
IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKTsKKworICAgIEFTU0VSVChtX21l
dGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7CisgICAgY29uc3Qg
SURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmplY3RTdG9yZSA9IG1fbWV0YWRhdGEub2JqZWN0U3Rv
cmVzLmdldChvYmplY3RTdG9yZUlkKTsKKworICAgIEFTU0VSVCghb2JqZWN0U3RvcmUuaW5kZXhl
cy5jb250YWlucyhpbmRleElkKSk7CisgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBpbmRleE1l
dGFkYXRhKG5hbWUsIGluZGV4SWQsIGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSk7CisKKyAg
ICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVDcmVhdGVJbmRleE9wZXJhdGlvbihvYmplY3RTdG9yZUlk
LCBpbmRleE1ldGFkYXRhKTsKKworICAgIGFkZEluZGV4KG9iamVjdFN0b3JlSWQsIGluZGV4TWV0
YWRhdGEsIGluZGV4SWQpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0
ZUluZGV4KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpkZWxldGVJbmRleCIpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSog
dHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisgICAgaWYg
KCF0cmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+
bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKTsKKworICAgIEFT
U0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7Cisg
ICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmplY3RTdG9yZSA9IG1fbWV0YWRhdGEu
b2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKKworICAgIEFTU0VSVChvYmplY3RTdG9y
ZS5pbmRleGVzLmNvbnRhaW5zKGluZGV4SWQpKTsKKyAgICBjb25zdCBJREJJbmRleE1ldGFkYXRh
JiBpbmRleE1ldGFkYXRhID0gb2JqZWN0U3RvcmUuaW5kZXhlcy5nZXQoaW5kZXhJZCk7CisKKyAg
ICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVEZWxldGVJbmRleE9wZXJhdGlvbihvYmplY3RTdG9yZUlk
LCBpbmRleE1ldGFkYXRhKTsKKworICAgIHJlbW92ZUluZGV4KG9iamVjdFN0b3JlSWQsIGluZGV4
SWQpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNvbW1pdChpbnQ2NF90IHRy
YW5zYWN0aW9uSWQpCit7CisgICAgLy8gVGhlIGZyb250ZW5kIHN1Z2dlc3RzIHRoYXQgd2UgY29t
bWl0LCBidXQgd2UgbWF5IGhhdmUgcHJldmlvdXNseSBpbml0aWF0ZWQgYW4gYWJvcnQsIGFuZCBz
byBoYXZlIGRpc3Bvc2VkIG9mIHRoZSB0cmFuc2FjdGlvbi4gb25BYm9ydCBoYXMgYWxyZWFkeSBi
ZWVuIGRpc3BhdGNoZWQgdG8gdGhlIGZyb250ZW5kLCBzbyBpdCB3aWxsIGZpbmQgb3V0IGFib3V0
IHRoYXQgYXN5bmNocm9ub3VzbHkuCisgICAgaWYgKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRy
YW5zYWN0aW9uSWQpKQorICAgICAgICBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCkt
PmNvbW1pdCgpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmFib3J0KGludDY0
X3QgdHJhbnNhY3Rpb25JZCkKK3sKKyAgICAvLyBJZiB0aGUgdHJhbnNhY3Rpb24gaXMgdW5rbm93
biwgdGhlbiBpdCBoYXMgYWxyZWFkeSBiZWVuIGFib3J0ZWQgYnkgdGhlIGJhY2tlbmQgYmVmb3Jl
IHRoaXMgY2FsbCBzbyBpdCBpcyBzYWZlIHRvIGlnbm9yZSBpdC4KKyAgICBpZiAobV90cmFuc2Fj
dGlvbnMuY29udGFpbnModHJhbnNhY3Rpb25JZCkpCisgICAgICAgIG1fdHJhbnNhY3Rpb25zLmdl
dCh0cmFuc2FjdGlvbklkKS0+YWJvcnQoKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjphYm9ydChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VF
cnJvcj4gZXJyb3IpCit7CisgICAgLy8gSWYgdGhlIHRyYW5zYWN0aW9uIGlzIHVua25vd24sIHRo
ZW4gaXQgaGFzIGFscmVhZHkgYmVlbiBhYm9ydGVkIGJ5IHRoZSBiYWNrZW5kIGJlZm9yZSB0aGlz
IGNhbGwgc28gaXQgaXMgc2FmZSB0byBpZ25vcmUgaXQuCisgICAgaWYgKG1fdHJhbnNhY3Rpb25z
LmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKQorICAgICAgICBtX3RyYW5zYWN0aW9ucy5nZXQodHJh
bnNhY3Rpb25JZCktPmFib3J0KGVycm9yKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpnZXQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIGJvb2wga2V5
T25seSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBMT0coU3Rv
cmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmdldCIpOworICAgIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJh
bnNhY3Rpb25JZCk7CisgICAgaWYgKCF0cmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlR2V0T3BlcmF0aW9uKG1fbWV0YWRhdGEsIG9iamVjdFN0
b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBrZXlPbmx5ID8gSW5kZXhlZERCOjpDdXJzb3JLZXlP
bmx5IDogSW5kZXhlZERCOjpDdXJzb3JLZXlBbmRWYWx1ZSwgY2FsbGJhY2tzKTsKK30KKwordm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpwdXQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSwgUGFzc1Jl
ZlB0cjxJREJLZXk+IGtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0
b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6cHV0Iik7CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAg
ICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKHRyYW5zYWN0
aW9uLT5tb2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRPbmx5KTsKKworICAgIGNv
bnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IG1fbWV0YWRh
dGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKKworICAgIEFTU0VSVChvYmplY3RT
dG9yZU1ldGFkYXRhLmF1dG9JbmNyZW1lbnQgfHwga2V5LmdldCgpKTsKKworICAgIHRyYW5zYWN0
aW9uLT5zY2hlZHVsZVB1dE9wZXJhdGlvbihvYmplY3RTdG9yZU1ldGFkYXRhLCB2YWx1ZSwga2V5
LCBwdXRNb2RlLCBjYWxsYmFja3MsIGluZGV4SWRzLCBpbmRleEtleXMpOworfQorCit2b2lkIElE
QkRhdGFiYXNlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyhpbnQ2NF90IHRyYW5zYWN0aW9uSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXks
IGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+
JiBpbmRleEtleXMpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpzZXRJbmRleEtleXMiKTsKKyAgICBBU1NFUlQocHJwUHJpbWFyeUtleSk7CisKKyAgICBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlv
bnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAgIGlmICghdHJhbnNhY3Rpb24pCisgICAgICAgIHJl
dHVybjsKKyAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5z
YWN0aW9uVmVyc2lvbkNoYW5nZSk7CisKKyAgICBSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5ID0g
cHJwUHJpbWFyeUtleTsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlPiBzdG9y
ZSA9IGJhY2tpbmdTdG9yZSgpOworICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBjb3VsZCBiZSBh
c3luY2hyb25vdXMsIGJ1dCB3ZSBuZWVkIHRvIGV2YWx1YXRlIGlmIGl0J3Mgd29ydGggdGhlIGV4
dHJhIGNvbXBsZXhpdHkuCisgICAgUmVmUHRyPElEQlJlY29yZElkZW50aWZpZXI+IHJlY29yZElk
ZW50aWZpZXI7CisgICAgYm9vbCBvayA9IHN0b3JlLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKHRy
YW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX21ldGFkYXRhLmlkLCBvYmpl
Y3RTdG9yZUlkLCAqcHJpbWFyeUtleSwgcmVjb3JkSWRlbnRpZmllcik7CisgICAgaWYgKCFvaykg
eworICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBzZXR0aW5n
IGluZGV4IGtleXMuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghcmVjb3Jk
SWRlbnRpZmllcikgeworICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJ
REJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJv
ciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9yIHNldHRpbmcgaW5kZXgga2V5cyBmb3Ig
b2JqZWN0IHN0b3JlLiIpKTsKKyAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yLnJlbGVh
c2UoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8UmVmUHRyPElEQklu
ZGV4V3JpdGVyPj4gaW5kZXhXcml0ZXJzOworICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7CisgICAg
Ym9vbCBvYmV5c0NvbnN0cmFpbnRzID0gZmFsc2U7CisgICAgQVNTRVJUKG1fbWV0YWRhdGEub2Jq
ZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKKyAgICBjb25zdCBJREJPYmplY3RT
dG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhID0gbV9tZXRhZGF0YS5vYmplY3RTdG9y
ZXMuZ2V0KG9iamVjdFN0b3JlSWQpOworICAgIGJvb2wgYmFja2luZ1N0b3JlU3VjY2VzcyA9IHN0
b3JlLT5tYWtlSW5kZXhXcml0ZXJzKCp0cmFuc2FjdGlvbiwgaWQoKSwgb2JqZWN0U3RvcmVNZXRh
ZGF0YSwgKnByaW1hcnlLZXksIGZhbHNlLCBpbmRleElkcywgaW5kZXhLZXlzLCBpbmRleFdyaXRl
cnMsICZlcnJvck1lc3NhZ2UsIG9iZXlzQ29uc3RyYWludHMpOworICAgIGlmICghYmFja2luZ1N0
b3JlU3VjY2VzcykgeworICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBl
cnJvcjogYmFja2luZyBzdG9yZSBlcnJvciB1cGRhdGluZyBpbmRleCBrZXlzLiIpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW9iZXlzQ29uc3RyYWludHMpIHsKKyAgICAgICAg
dHJhbnNhY3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yLCBlcnJvck1lc3NhZ2UpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhXcml0ZXJzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIElEQkluZGV4V3JpdGVyKiBpbmRleFdyaXRlciA9IGluZGV4V3Jp
dGVyc1tpXS5nZXQoKTsKKyAgICAgICAgaW5kZXhXcml0ZXItPndyaXRlSW5kZXhLZXlzKHJlY29y
ZElkZW50aWZpZXIuZ2V0KCksICpzdG9yZS5nZXQoKSwgdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKCksIGlkKCksIG9iamVjdFN0b3JlSWQpOworICAgIH0KK30KKwordm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHkoaW50NjRfdCB0cmFuc2FjdGlv
bklkLCBpbnQ2NF90LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzKQoreworICAgIExP
RyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5Iik7
CisKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uID0gbV90
cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAgIGlmICghdHJhbnNhY3Rpb24pCisg
ICAgICAgIHJldHVybjsKKworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVNldEluZGV4ZXNSZWFk
eU9wZXJhdGlvbihpbmRleElkcy5zaXplKCkpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6Om9wZW5DdXJzb3IoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2Us
IEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCBrZXlPbmx5LCBUYXNr
VHlwZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAg
ICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5DdXJzb3IiKTsK
KyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uID0gbV90cmFu
c2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAgIGlmICghdHJhbnNhY3Rpb24pCisgICAg
ICAgIHJldHVybjsKKworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZU9wZW5DdXJzb3JPcGVyYXRp
b24ob2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwga2V5T25seSA/
IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSA6IEluZGV4ZWREQjo6Q3Vyc29yS2V5QW5kVmFsdWUs
IHRhc2tUeXBlLCBjYWxsYmFja3MpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OmNvdW50KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6Y291bnQiKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwor
ICAgIGlmICghdHJhbnNhY3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX21l
dGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7CisgICAgdHJhbnNh
Y3Rpb24tPnNjaGVkdWxlQ291bnRPcGVyYXRpb24ob2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5
UmFuZ2UsIGNhbGxiYWNrcyk7Cit9CisKKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpk
ZWxldGVSYW5nZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpkZWxldGVSYW5nZSIpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSog
dHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisgICAgaWYg
KCF0cmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+
bW9kZSgpICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25SZWFkT25seSk7CisKKyAgICB0cmFuc2Fj
dGlvbi0+c2NoZWR1bGVEZWxldGVSYW5nZU9wZXJhdGlvbihvYmplY3RTdG9yZUlkLCBrZXlSYW5n
ZSwgY2FsbGJhY2tzKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjbGVhcihp
bnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFi
YXNlQmFja2VuZEltcGw6OmNsZWFyIik7CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAg
ICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKHRyYW5zYWN0
aW9uLT5tb2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRPbmx5KTsKKworICAgIHRy
YW5zYWN0aW9uLT5zY2hlZHVsZUNsZWFyT3BlcmF0aW9uKG9iamVjdFN0b3JlSWQsIGNhbGxiYWNr
cyk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25TdGFydGVk
KElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24pCit7CisgICAgaWYg
KHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFu
Z2UpIHsKKyAgICAgICAgQVNTRVJUKCFtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24p
OworICAgICAgICBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlv
bjsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25G
aW5pc2hlZChJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHJhd1RyYW5zYWN0aW9uKQor
eworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9u
ID0gcmF3VHJhbnNhY3Rpb247CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRy
YW5zYWN0aW9uLT5pZCgpKSk7CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2Fj
dGlvbi0+aWQoKSkgPT0gdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIG1fdHJhbnNhY3Rpb25zLnJl
bW92ZSh0cmFuc2FjdGlvbi0+aWQoKSk7CisgICAgaWYgKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0g
SW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpIHsKKyAgICAgICAgQVNTRVJUKHRy
YW5zYWN0aW9uLmdldCgpID09IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5nZXQo
KSk7CisgICAgICAgIG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5jbGVhcigpOwor
ICAgIH0KK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvbkZpbmlz
aGVkQW5kQWJvcnRGaXJlZChJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHJhd1RyYW5z
YWN0aW9uKQoreworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRy
YW5zYWN0aW9uID0gcmF3VHJhbnNhY3Rpb247CisgICAgaWYgKHRyYW5zYWN0aW9uLT5tb2RlKCkg
PT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpIHsKKyAgICAgICAgLy8gSWYg
dGhpcyB3YXMgYW4gb3Blbi13aXRoLXZlcnNpb24gY2FsbCwgdGhlcmUgd2lsbCBiZSBhICJzZWNv
bmQKKyAgICAgICAgLy8gaGFsZiIgb3BlbiBjYWxsIHdhaXRpbmcgZm9yIHVzIGluIHByb2Nlc3NQ
ZW5kaW5nQ2FsbHMuCisgICAgICAgIC8vIEZJWE1FOiBXaGVuIHdlIG5vIGxvbmdlciBzdXBwb3J0
IHNldFZlcnNpb24sIGFzc2VydCBzdWNoIGEgdGhpbmcuCisgICAgICAgIGlmIChtX3BlbmRpbmdT
ZWNvbmRIYWxmT3BlbikgeworICAgICAgICAgICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4tPmNh
bGxiYWNrcygpLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6QWJvcnRFcnJvciwgIlZlcnNpb24gY2hhbmdlIHRyYW5zYWN0aW9uIHdhcyBhYm9y
dGVkIGluIHVwZ3JhZGVuZWVkZWQgZXZlbnQgaGFuZGxlci4iKSk7CisgICAgICAgICAgICBtX3Bl
bmRpbmdTZWNvbmRIYWxmT3Blbi5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICAgICAgcHJvY2Vz
c1BlbmRpbmdDYWxscygpOworICAgIH0KK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
Ojp0cmFuc2FjdGlvbkZpbmlzaGVkQW5kQ29tcGxldGVGaXJlZChJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqIHJhd1RyYW5zYWN0aW9uKQoreworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gcmF3VHJhbnNhY3Rpb247CisgICAgaWYg
KHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFu
Z2UpCisgICAgICAgIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKK30KKworc2l6ZV90IElEQkRhdGFi
YXNlQmFja2VuZEltcGw6OmNvbm5lY3Rpb25Db3VudCgpCit7CisgICAgLy8gVGhpcyBkb2VzIG5v
dCBpbmNsdWRlIHBlbmRpbmcgb3BlbiBjYWxscywgYXMgdGhvc2Ugc2hvdWxkIG5vdCBibG9jayB2
ZXJzaW9uIGNoYW5nZXMgYW5kIGRlbGV0ZXMuCisgICAgcmV0dXJuIG1fZGF0YWJhc2VDYWxsYmFj
a3NTZXQuc2l6ZSgpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnByb2Nlc3NQ
ZW5kaW5nQ2FsbHMoKQoreworICAgIGlmIChtX3BlbmRpbmdTZWNvbmRIYWxmT3BlbikgeworICAg
ICAgICAvLyBGSVhNRTogRGF0YWJhc2UgdmVyc2lvbnMgYXJlIG5vdyBvZiB0eXBlIHVpbnQ2NF90
LCBidXQgdGhpcyBjb2RlIGV4cGVjdGVkIGludDY0X3QuCisgICAgICAgIEFTU0VSVChtX3BlbmRp
bmdTZWNvbmRIYWxmT3Blbi0+dmVyc2lvbigpID09IChpbnQ2NF90KW1fbWV0YWRhdGEudmVyc2lv
bik7CisgICAgICAgIEFTU0VSVChtX21ldGFkYXRhLmlkICE9IEludmFsaWRJZCk7CisgICAgICAg
IG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLT5jYWxsYmFja3MoKS0+b25TdWNjZXNzKHRoaXMsIHRo
aXMtPm1ldGFkYXRhKCkpOworICAgICAgICBtX3BlbmRpbmdTZWNvbmRIYWxmT3Blbi5yZWxlYXNl
KCk7CisgICAgICAgIC8vIEZhbGwgdGhyb3VnaCB3aGVuIGNvbXBsZXRlLCBhcyBwZW5kaW5nIGRl
bGV0ZXMgbWF5IGJlIChwYXJ0aWFsbHkpIHVuYmxvY2tlZC4KKyAgICB9CisKKyAgICAvLyBOb3Rl
IHRoYXQgdGhpcyBjaGVjayBpcyBvbmx5IGFuIG9wdGltaXphdGlvbiB0byByZWR1Y2UgcXVldWUt
Y2h1cm4gYW5kCisgICAgLy8gbm90IG5lY2Vzc2FyeSBmb3IgY29ycmVjdG5lc3M7IGRlbGV0ZURh
dGFiYXNlIGFuZCBvcGVuQ29ubmVjdGlvbiB3aWxsCisgICAgLy8gcmVxdWV1ZSB0aGVpciBjYWxs
cyBpZiB0aGlzIGNvbmRpdGlvbiBpcyB0cnVlLgorICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hh
bmdlVHJhbnNhY3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9wZW5kaW5nRGVs
ZXRlQ2FsbHMuaXNFbXB0eSgpICYmIGlzRGVsZXRlRGF0YWJhc2VCbG9ja2VkKCkpCisgICAgICAg
IHJldHVybjsKKyAgICB3aGlsZSAoIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSkgewor
ICAgICAgICBPd25QdHI8UGVuZGluZ0RlbGV0ZUNhbGw+IHBlbmRpbmdEZWxldGVDYWxsID0gbV9w
ZW5kaW5nRGVsZXRlQ2FsbHMudGFrZUZpcnN0KCk7CisgICAgICAgIGRlbGV0ZURhdGFiYXNlRmlu
YWwocGVuZGluZ0RlbGV0ZUNhbGwtPmNhbGxiYWNrcygpKTsKKyAgICB9CisgICAgLy8gZGVsZXRl
RGF0YWJhc2VGaW5hbCBzaG91bGQgbmV2ZXIgcmUtcXVldWUgY2FsbHMuCisgICAgQVNTRVJUKG1f
cGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSk7CisKKyAgICAvLyBUaGlzIGNoZWNrIGlzIGFs
c28gbm90IHJlYWxseSBuZWVkZWQsIG9wZW5Db25uZWN0aW9uIHdvdWxkIGp1c3QgcmVxdWV1ZSBp
dHMgY2FsbHMuCisgICAgaWYgKG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gT3BlbiBjYWxscyBjYW4gYmUgcmVxdWV1ZWQgaWYgYW4g
b3BlbiBjYWxsIHN0YXJ0ZWQgYSB2ZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbi4KKyAgICBEZXF1
ZTxPd25QdHI8UGVuZGluZ09wZW5DYWxsPj4gcGVuZGluZ09wZW5DYWxsczsKKyAgICBtX3BlbmRp
bmdPcGVuQ2FsbHMuc3dhcChwZW5kaW5nT3BlbkNhbGxzKTsKKyAgICB3aGlsZSAoIXBlbmRpbmdP
cGVuQ2FsbHMuaXNFbXB0eSgpKSB7CisgICAgICAgIE93blB0cjxQZW5kaW5nT3BlbkNhbGw+IHBl
bmRpbmdPcGVuQ2FsbCA9IHBlbmRpbmdPcGVuQ2FsbHMudGFrZUZpcnN0KCk7CisgICAgICAgIG9w
ZW5Db25uZWN0aW9uKHBlbmRpbmdPcGVuQ2FsbC0+Y2FsbGJhY2tzKCksIHBlbmRpbmdPcGVuQ2Fs
bC0+ZGF0YWJhc2VDYWxsYmFja3MoKSwgcGVuZGluZ09wZW5DYWxsLT50cmFuc2FjdGlvbklkKCks
IHBlbmRpbmdPcGVuQ2FsbC0+dmVyc2lvbigpKTsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6Y3JlYXRlVHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0IFZlY3Rvcjxp
bnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIHVuc2lnbmVkIHNob3J0IG1vZGUpCit7CisgICAgUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSBtX2ZhY3Rv
cnktPm1heWJlQ3JlYXRlVHJhbnNhY3Rpb25CYWNrZW5kKHRoaXMsIHRyYW5zYWN0aW9uSWQsIGNh
bGxiYWNrcywgb2JqZWN0U3RvcmVJZHMsIHN0YXRpY19jYXN0PEluZGV4ZWREQjo6VHJhbnNhY3Rp
b25Nb2RlPihtb2RlKSk7CisKKyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47
CisKKyAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKTsK
KyAgICBtX3RyYW5zYWN0aW9ucy5hZGQodHJhbnNhY3Rpb25JZCwgdHJhbnNhY3Rpb24uZ2V0KCkp
OworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5Db25uZWN0aW9uKFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VD
YWxsYmFja3M+IHBycERhdGFiYXNlQ2FsbGJhY2tzLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGlu
dDY0X3QgdmVyc2lvbikKK3sKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUuZ2V0KCkpOworICAg
IFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBSZWZQ
dHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzID0gcHJwRGF0YWJhc2VD
YWxsYmFja3M7CisKKyAgICBpZiAoIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSB8fCBt
X3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pIHsKKyAgICAgICAgbV9wZW5kaW5nT3Bl
bkNhbGxzLmFwcGVuZChQZW5kaW5nT3BlbkNhbGw6OmNyZWF0ZShjYWxsYmFja3MsIGRhdGFiYXNl
Q2FsbGJhY2tzLCB0cmFuc2FjdGlvbklkLCB2ZXJzaW9uKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAobV9tZXRhZGF0YS5pZCA9PSBJbnZhbGlkSWQpIHsKKyAgICAgICAgLy8g
VGhlIGRhdGFiYXNlIHdhcyBkZWxldGVkIHRoZW4gaW1tZWRpYXRlbHkgcmUtb3BlbmVkOyBvcGVu
SW50ZXJuYWwoKSByZWNyZWF0ZXMgaXQgaW4gdGhlIGJhY2tpbmcgc3RvcmUuCisgICAgICAgIGlm
IChvcGVuSW50ZXJuYWwoKSkKKyAgICAgICAgICAgIEFTU0VSVChtX21ldGFkYXRhLnZlcnNpb24g
PT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBTdHJpbmcgbWVzc2FnZTsKKyAgICAgICAgICAgIFJlZlB0cjxJREJEYXRhYmFz
ZUVycm9yPiBlcnJvcjsKKyAgICAgICAgICAgIGlmICh2ZXJzaW9uID09IElEQkRhdGFiYXNlTWV0
YWRhdGE6Ok5vSW50VmVyc2lvbikKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gIkludGVybmFs
IGVycm9yIG9wZW5pbmcgZGF0YWJhc2Ugd2l0aCBubyB2ZXJzaW9uIHNwZWNpZmllZC4iOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgi
SW50ZXJuYWwgZXJyb3Igb3BlbmluZyBkYXRhYmFzZSB3aXRoIHZlcnNpb24gJWxsZCIsIHN0YXRp
Y19jYXN0PGxvbmcgbG9uZz4odmVyc2lvbikpOworICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVy
cm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93
bkVycm9yLCBtZXNzYWdlKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBXZSBpbmZlciB0aGF0IHRoZSBkYXRhYmFzZSBkaWRuJ3QgZXhpc3QgZnJvbSBp
dHMgbGFjayBvZiBlaXRoZXIgdHlwZSBvZiB2ZXJzaW9uLgorICAgIGJvb2wgaXNOZXdEYXRhYmFz
ZSA9IG1fbWV0YWRhdGEudmVyc2lvbiA9PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNp
b247CisKKyAgICBpZiAodmVyc2lvbiA9PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpEZWZhdWx0SW50
VmVyc2lvbikgeworICAgICAgICAvLyBGSVhNRTogdGhpcyBjb21tZW50cyB3YXMgcmVsYXRlZCB0
byBDaHJvbWl1bSBjb2RlLiBJdCBtYXkgYmUgaW5jb3JyZWN0CisgICAgICAgIC8vIEZvciB1bml0
IHRlc3RzIG9ubHkgLSBza2lwIHVwZ3JhZGUgc3RlcHMuIENhbGxpbmcgZnJvbSBzY3JpcHQgd2l0
aCBEZWZhdWx0SW50VmVyc2lvbiB0aHJvd3MgZXhjZXB0aW9uLgorICAgICAgICBBU1NFUlQoaXNO
ZXdEYXRhYmFzZSk7CisgICAgICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKGRhdGFiYXNl
Q2FsbGJhY2tzKTsKKyAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3ModGhpcywgdGhpcy0+bWV0
YWRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodmVyc2lvbiA9PSBJ
REJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24pIHsKKyAgICAgICAgaWYgKCFpc05ld0Rh
dGFiYXNlKSB7CisgICAgICAgICAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmFkZChSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+KGRhdGFiYXNlQ2FsbGJhY2tzKSk7CisgICAgICAgICAgICBj
YWxsYmFja3MtPm9uU3VjY2Vzcyh0aGlzLCB0aGlzLT5tZXRhZGF0YSgpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBTcGVjIHNheXM6IElmIG5vIHZlcnNpb24g
aXMgc3BlY2lmaWVkIGFuZCBubyBkYXRhYmFzZSBleGlzdHMsIHNldCBkYXRhYmFzZSB2ZXJzaW9u
IHRvIDEuCisgICAgICAgIHZlcnNpb24gPSAxOworICAgIH0KKworICAgIC8vIEZJWE1FOiBEYXRh
YmFzZSB2ZXJzaW9ucyBhcmUgbm93IG9mIHR5cGUgdWludDY0X3QsIGJ1dCB0aGlzIGNvZGUgZXhw
ZWN0ZWQgaW50NjRfdC4KKyAgICBpZiAodmVyc2lvbiA+IChpbnQ2NF90KW1fbWV0YWRhdGEudmVy
c2lvbikgeworICAgICAgICBydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oY2FsbGJhY2tz
LCBkYXRhYmFzZUNhbGxiYWNrcywgdHJhbnNhY3Rpb25JZCwgdmVyc2lvbik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogRGF0YWJhc2UgdmVyc2lvbnMgYXJlIG5vdyBv
ZiB0eXBlIHVpbnQ2NF90LCBidXQgdGhpcyBjb2RlIGV4cGVjdGVkIGludDY0X3QuCisgICAgaWYg
KHZlcnNpb24gPCAoaW50NjRfdCltX21ldGFkYXRhLnZlcnNpb24pIHsKKyAgICAgICAgY2FsbGJh
Y2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VmVyc2lvbkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiVGhlIHJlcXVlc3RlZCB2ZXJzaW9uICgl
bGxkKSBpcyBsZXNzIHRoYW4gdGhlIGV4aXN0aW5nIHZlcnNpb24gKCVsbGQpLiIsIHN0YXRpY19j
YXN0PGxvbmcgbG9uZz4odmVyc2lvbiksIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4obV9tZXRhZGF0
YS52ZXJzaW9uKSkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBE
YXRhYmFzZSB2ZXJzaW9ucyBhcmUgbm93IG9mIHR5cGUgdWludDY0X3QsIGJ1dCB0aGlzIGNvZGUg
ZXhwZWN0ZWQgaW50NjRfdC4KKyAgICBBU1NFUlQodmVyc2lvbiA9PSAoaW50NjRfdCltX21ldGFk
YXRhLnZlcnNpb24pOworICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKGRhdGFiYXNlQ2Fs
bGJhY2tzKTsKKyAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyh0aGlzLCB0aGlzLT5tZXRhZGF0YSgp
KTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpydW5JbnRWZXJzaW9uQ2hhbmdl
VHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwRGF0YWJhc2VDYWxsYmFja3MsIGludDY0X3Qg
dHJhbnNhY3Rpb25JZCwgaW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKQoreworICAgIFJlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBSZWZQdHI8SURCRGF0
YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzID0gcHJwRGF0YWJhc2VDYWxsYmFja3M7
CisgICAgQVNTRVJUKGNhbGxiYWNrcyk7CisgICAgZm9yIChEYXRhYmFzZUNhbGxiYWNrc1NldDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmJlZ2luKCk7IGl0ICE9
IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgLy8gRnJvbnQg
ZW5kIGVuc3VyZXMgdGhlIGV2ZW50IGlzIG5vdCBmaXJlZCBhdCBjb25uZWN0aW9ucyB0aGF0IGhh
dmUgY2xvc2VQZW5kaW5nIHNldC4KKyAgICAgICAgaWYgKCppdCAhPSBkYXRhYmFzZUNhbGxiYWNr
cykKKyAgICAgICAgICAgICgqaXQpLT5vblZlcnNpb25DaGFuZ2UobV9tZXRhZGF0YS52ZXJzaW9u
LCByZXF1ZXN0ZWRWZXJzaW9uLCBJbmRleGVkREI6Ok51bGxWZXJzaW9uKTsKKyAgICB9CisgICAg
Ly8gVGhlIHNwZWMgZGljdGF0ZXMgd2Ugd2FpdCB1bnRpbCBhbGwgdGhlIHZlcnNpb24gY2hhbmdl
IGV2ZW50cyBhcmUKKyAgICAvLyBkZWxpdmVyZWQgYW5kIHRoZW4gY2hlY2sgbV9kYXRhYmFzZUNh
bGxiYWNrcy5lbXB0eSgpIGJlZm9yZSBwcm9jZWVkaW5nCisgICAgLy8gb3IgZmlyaW5nIGEgYmxv
Y2tlZCBldmVudCwgYnV0IGluc3RlYWQgd2Ugc2hvdWxkIGJlIGNvbnNpc3RlbnQgd2l0aCBob3cK
KyAgICAvLyB0aGUgb2xkIHNldFZlcnNpb24gKGluY29ycmVjdGx5KSBkaWQgaXQuCisgICAgLy8g
RklYTUU6IFJlbW92ZSB0aGUgY2FsbCB0byBvbkJsb2NrZWQgYW5kIGluc3RlYWQgd2FpdCB1bnRp
bCB0aGUgZnJvbnRlbmQKKyAgICAvLyB0ZWxscyB1cyB0aGF0IGFsbCB0aGUgYmxvY2tlZCBldmVu
dHMgaGF2ZSBiZWVuIGRlbGl2ZXJlZC4gU2VlCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTcxMTMwCisgICAgaWYgKGNvbm5lY3Rpb25Db3VudCgpKQorICAg
ICAgICBjYWxsYmFja3MtPm9uQmxvY2tlZChtX21ldGFkYXRhLnZlcnNpb24pOworICAgIC8vIEZJ
WE1FOiBBZGQgdGVzdCBmb3IgbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLgorICAg
IGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwgY29ubmVjdGlvbkNvdW50
KCkpIHsKKyAgICAgICAgbV9wZW5kaW5nT3BlbkNhbGxzLmFwcGVuZChQZW5kaW5nT3BlbkNhbGw6
OmNyZWF0ZShjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzLCB0cmFuc2FjdGlvbklkLCByZXF1
ZXN0ZWRWZXJzaW9uKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8aW50
NjRfdD4gb2JqZWN0U3RvcmVJZHM7CisgICAgY3JlYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25J
ZCwgZGF0YWJhc2VDYWxsYmFja3MsIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0
aW9uVmVyc2lvbkNoYW5nZSk7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZT4gdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisK
KyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uKHRyYW5zYWN0
aW9uSWQsIHJlcXVlc3RlZFZlcnNpb24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MsIG1f
bWV0YWRhdGEpOworCisgICAgQVNTRVJUKCFtX3BlbmRpbmdTZWNvbmRIYWxmT3Blbik7CisgICAg
bV9kYXRhYmFzZUNhbGxiYWNrc1NldC5hZGQoZGF0YWJhc2VDYWxsYmFja3MpOworfQorCit2b2lk
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBwcnBDYWxsYmFja3MpCit7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzID0gcHJwQ2FsbGJhY2tzOworICAgIGlmIChpc0RlbGV0ZURhdGFiYXNlQmxvY2tlZCgpKSB7
CisgICAgICAgIGZvciAoRGF0YWJhc2VDYWxsYmFja3NTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9kYXRhYmFzZUNhbGxiYWNrc1NldC5iZWdpbigpOyBpdCAhPSBtX2RhdGFiYXNlQ2FsbGJhY2tz
U2V0LmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICAvLyBGcm9udCBlbmQgZW5zdXJlcyB0aGUg
ZXZlbnQgaXMgbm90IGZpcmVkIGF0IGNvbm5lY3Rpb25zIHRoYXQgaGF2ZSBjbG9zZVBlbmRpbmcg
c2V0LgorICAgICAgICAgICAgKCppdCktPm9uVmVyc2lvbkNoYW5nZShtX21ldGFkYXRhLnZlcnNp
b24sIDAsIEluZGV4ZWREQjo6TnVsbFZlcnNpb24pOworICAgICAgICB9CisgICAgICAgIC8vIEZJ
WE1FOiBPbmx5IGZpcmUgb25CbG9ja2VkIGlmIHRoZXJlIGFyZSBvcGVuIGNvbm5lY3Rpb25zIGFm
dGVyIHRoZQorICAgICAgICAvLyBWZXJzaW9uQ2hhbmdlRXZlbnRzIGFyZSByZWNlaXZlZCwgbm90
IGp1c3Qgc2V0IHVwIHRvIGZpcmUuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03MTEzMAorICAgICAgICBjYWxsYmFja3MtPm9uQmxvY2tlZChtX21l
dGFkYXRhLnZlcnNpb24pOworICAgICAgICBtX3BlbmRpbmdEZWxldGVDYWxscy5hcHBlbmQoUGVu
ZGluZ0RlbGV0ZUNhbGw6OmNyZWF0ZShjYWxsYmFja3MucmVsZWFzZSgpKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgZGVsZXRlRGF0YWJhc2VGaW5hbChjYWxsYmFja3MucmVsZWFzZSgp
KTsKK30KKworYm9vbCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjppc0RlbGV0ZURhdGFiYXNlQmxv
Y2tlZCgpCit7CisgICAgcmV0dXJuIGNvbm5lY3Rpb25Db3VudCgpOworfQorCit2b2lkIElEQkRh
dGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlRmluYWwoUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBBU1NFUlQoIWlzRGVsZXRlRGF0YWJhc2VCbG9ja2Vk
KCkpOworICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7CisgICAgaWYgKCFtX2JhY2tpbmdTdG9y
ZS0+ZGVsZXRlRGF0YWJhc2UobV9tZXRhZGF0YS5uYW1lKSkgeworICAgICAgICBjYWxsYmFja3Mt
Pm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpV
bmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBkZWxldGluZyBkYXRhYmFzZS4iKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgbV9tZXRhZGF0YS5pZCA9IEludmFsaWRJZDsKKyAgICBt
X21ldGFkYXRhLnZlcnNpb24gPSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb247Cisg
ICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY2xlYXIoKTsKKyAgICBjYWxsYmFja3MtPm9uU3Vj
Y2VzcygpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNsb3NlKFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IHBycENhbGxiYWNrcykKK3sKKyAgICBSZWZQdHI8SURC
RGF0YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBBU1NFUlQo
bV9kYXRhYmFzZUNhbGxiYWNrc1NldC5jb250YWlucyhjYWxsYmFja3MpKTsKKworICAgIG1fZGF0
YWJhc2VDYWxsYmFja3NTZXQucmVtb3ZlKGNhbGxiYWNrcyk7CisgICAgaWYgKG1fcGVuZGluZ1Nl
Y29uZEhhbGZPcGVuICYmIG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLT5kYXRhYmFzZUNhbGxiYWNr
cygpID09IGNhbGxiYWNrcykgeworICAgICAgICBtX3BlbmRpbmdTZWNvbmRIYWxmT3Blbi0+Y2Fs
bGJhY2tzKCktPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpBYm9ydEVycm9yLCAiVGhlIGNvbm5lY3Rpb24gd2FzIGNsb3NlZC4iKSk7CisgICAg
ICAgIG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLnJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAo
Y29ubmVjdGlvbkNvdW50KCkgPiAxKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBwcm9jZXNz
UGVuZGluZ0NhbGxzIGFsbG93cyB0aGUgaW5zcGVjdG9yIHRvIHByb2Nlc3MgYSBwZW5kaW5nIG9w
ZW4gY2FsbAorICAgIC8vIGFuZCBjYWxsIGNsb3NlLCByZWVudGVyaW5nIElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OmNsb3NlLiBUaGVuIHRoZQorICAgIC8vIGJhY2tlbmQgd291bGQgYmUgcmVtb3Zl
ZCBib3RoIGJ5IHRoZSBpbnNwZWN0b3IgY2xvc2luZyBpdHMgY29ubmVjdGlvbiwgYW5kCisgICAg
Ly8gYnkgdGhlIGNvbm5lY3Rpb24gdGhhdCBmaXJzdCBjYWxsZWQgY2xvc2UuCisgICAgLy8gVG8g
YXZvaWQgdGhhdCBzaXR1YXRpb24sIGRvbid0IHByb2NlZWQgaW4gY2FzZSBvZiByZWVudHJhbmN5
LgorICAgIGlmIChtX2Nsb3NpbmdDb25uZWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgVGVt
cG9yYXJ5Q2hhbmdlPGJvb2w+IGNsb3NpbmdDb25uZWN0aW9uKG1fY2xvc2luZ0Nvbm5lY3Rpb24s
IHRydWUpOworICAgIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKKworICAgIC8vIEZJWE1FOiBBZGQg
YSB0ZXN0IGZvciB0aGUgbV9wZW5kaW5nT3BlbkNhbGxzIGNhc2VzIGJlbG93LgorICAgIGlmICgh
Y29ubmVjdGlvbkNvdW50KCkgJiYgIW1fcGVuZGluZ09wZW5DYWxscy5zaXplKCkgJiYgIW1fcGVu
ZGluZ0RlbGV0ZUNhbGxzLnNpemUoKSkgeworICAgICAgICBUcmFuc2FjdGlvbk1hcCB0cmFuc2Fj
dGlvbnMobV90cmFuc2FjdGlvbnMpOworICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4g
ZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVu
a25vd25FcnJvciwgIkNvbm5lY3Rpb24gaXMgY2xvc2luZy4iKTsKKyAgICAgICAgZm9yIChUcmFu
c2FjdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3I6OlZhbHVlcyBpdCA9IHRyYW5zYWN0aW9ucy52YWx1
ZXMoKS5iZWdpbigpLCBlbmQgPSB0cmFuc2FjdGlvbnMudmFsdWVzKCkuZW5kKCk7IGl0ICE9IGVu
ZDsgKytpdCkKKyAgICAgICAgICAgICgqaXQpLT5hYm9ydChlcnJvcik7CisKKyAgICAgICAgQVNT
RVJUKG1fdHJhbnNhY3Rpb25zLmlzRW1wdHkoKSk7CisKKyAgICAgICAgbV9iYWNraW5nU3RvcmUu
Y2xlYXIoKTsKKworICAgICAgICAvLyBUaGlzIGNoZWNrIHNob3VsZCBvbmx5IGJlIGZhbHNlIGlu
IHVuaXQgdGVzdHMuCisgICAgICAgIEFTU0VSVChtX2ZhY3RvcnkpOworICAgICAgICBpZiAobV9m
YWN0b3J5KQorICAgICAgICAgICAgbV9mYWN0b3J5LT5yZW1vdmVJREJEYXRhYmFzZUJhY2tlbmQo
bV9pZGVudGlmaWVyKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNzM2M2YKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgK
QEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQkRhdGFiYXNlQmFja2VuZEltcGxf
aAorI2RlZmluZSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsX2gKKworI2luY2x1ZGUgIklEQkNhbGxi
YWNrcy5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiSURC
TWV0YWRhdGEuaCIKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgor
CisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOworY2xhc3MgSURCRGF0YWJhc2U7CitjbGFz
cyBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZTsKK2NsYXNzIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZTsKK2NsYXNzIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I7CisKK2NsYXNzIElE
QkRhdGFiYXNlQmFja2VuZEltcGwgRklOQUwgOiBwdWJsaWMgSURCRGF0YWJhc2VCYWNrZW5kSW50
ZXJmYWNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tl
bmRJbXBsPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmVJbnRlcmZh
Y2UqLCBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSosIGNvbnN0IFN0cmluZyYgdW5pcXVlSWRl
bnRpZmllcik7CisgICAgdmlydHVhbCB+SURCRGF0YWJhc2VCYWNrZW5kSW1wbCgpOworCisgICAg
SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUoKSBjb25zdDsKKworICAgIHN0
YXRpYyBjb25zdCBpbnQ2NF90IEludmFsaWRJZCA9IDA7CisgICAgaW50NjRfdCBpZCgpIGNvbnN0
IHsgcmV0dXJuIG1fbWV0YWRhdGEuaWQ7IH0KKyAgICB2b2lkIGFkZE9iamVjdFN0b3JlKGNvbnN0
IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBpbnQ2NF90IG5ld01heE9iamVjdFN0b3JlSWQpOwor
ICAgIHZvaWQgcmVtb3ZlT2JqZWN0U3RvcmUoaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKKyAgICB2
b2lkIGFkZEluZGV4KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0
YSYsIGludDY0X3QgbmV3TWF4SW5kZXhJZCk7CisgICAgdm9pZCByZW1vdmVJbmRleChpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCk7CisKKyAgICB2b2lkIG9wZW5Db25uZWN0
aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxi
YWNrcz4sIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCB2ZXJzaW9uKTsKKyAgICB2b2lk
IGRlbGV0ZURhdGFiYXNlKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAgY29uc3QgSURC
RGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhOyB9
CisKKyAgICAvLyBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UKKyAgICB2aXJ0dWFsIHZvaWQg
Y3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0lu
Y3JlbWVudCk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QgdHJh
bnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3Jl
YXRlVHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgdW5z
aWduZWQgc2hvcnQgbW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlKFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VDYWxsYmFja3M+KTsKKworICAgIHZpcnR1YWwgdm9pZCBjb21taXQoaW50NjRfdCB0
cmFuc2FjdGlvbklkKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoaW50NjRfdCB0cmFuc2FjdGlv
bklkKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNz
UmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KTsKKworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJbmRl
eChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIHVuaXF1
ZSwgYm9vbCBtdWx0aUVudHJ5KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoaW50NjRf
dCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCk7
CisKKyAgICBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiB0cmFuc2FjdGlvbkNvb3JkaW5hdG9y
KCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpOyB9CisgICAg
dm9pZCB0cmFuc2FjdGlvblN0YXJ0ZWQoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7
CisgICAgdm9pZCB0cmFuc2FjdGlvbkZpbmlzaGVkKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSopOworICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZEFuZENvbXBsZXRlRmlyZWQoSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7CisgICAgdm9pZCB0cmFuc2FjdGlvbkZpbmlz
aGVkQW5kQWJvcnRGaXJlZChJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKKworICAg
IHZpcnR1YWwgdm9pZCBnZXQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIGJvb2wga2V5
T25seSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgcHV0KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRz
LCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRJbmRleEtleXMoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8aW50NjRfdD4m
IGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBzZXRJbmRleGVzUmVhZHkoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
LCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiwgYm9vbCBrZXlPbmx5LCBUYXNrVHlwZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY291bnQo
aW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPikg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVJhbmdlKGludDY0X3QgdHJhbnNhY3Rp
b25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXIo
aW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsKCkgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgY2xhc3MgVmVy
c2lvbkNoYW5nZU9wZXJhdGlvbjsKKyAgICBjbGFzcyBWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRp
b247CisKK3ByaXZhdGU6CisgICAgSURCRGF0YWJhc2VCYWNrZW5kSW1wbChjb25zdCBTdHJpbmcm
IG5hbWUsIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSosIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJm
YWNlKiwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKTsKKworICAgIGJvb2wgb3Blbklu
dGVybmFsKCk7CisgICAgdm9pZCBydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgaW50
NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24pOworICAgIHNpemVf
dCBjb25uZWN0aW9uQ291bnQoKTsKKyAgICB2b2lkIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKKwor
ICAgIGJvb2wgaXNEZWxldGVEYXRhYmFzZUJsb2NrZWQoKTsKKyAgICB2b2lkIGRlbGV0ZURhdGFi
YXNlRmluYWwoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKworICAgIFJlZlB0cjxJREJCYWNr
aW5nU3RvcmVJbnRlcmZhY2U+IG1fYmFja2luZ1N0b3JlOworICAgIElEQkRhdGFiYXNlTWV0YWRh
dGEgbV9tZXRhZGF0YTsKKworICAgIFN0cmluZyBtX2lkZW50aWZpZXI7CisgICAgLy8gVGhpcyBt
aWdodCBub3QgbmVlZCB0byBiZSBhIFJlZlB0ciBzaW5jZSB0aGUgZmFjdG9yeSdzIGxpZmV0aW1l
IGlzIHRoYXQgb2YgdGhlIHBhZ2UgZ3JvdXAsIGJ1dCBpdCdzIGJldHRlciB0byBiZSBjb25zZXJ2
aXRpdmUgdGhhbiBzb3JyeS4KKyAgICBSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+
IG1fZmFjdG9yeTsKKworICAgIE93blB0cjxJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yPiBtX3Ry
YW5zYWN0aW9uQ29vcmRpbmF0b3I7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZT4gbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uOworCisgICAgdHlwZWRl
ZiBIYXNoTWFwPGludDY0X3QsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSo+IFRyYW5z
YWN0aW9uTWFwOworICAgIFRyYW5zYWN0aW9uTWFwIG1fdHJhbnNhY3Rpb25zOworCisgICAgY2xh
c3MgUGVuZGluZ09wZW5DYWxsIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzT3du
UHRyPFBlbmRpbmdPcGVuQ2FsbD4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tz
LCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3QgdmVyc2lvbikKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQZW5kaW5nT3BlbkNhbGwoY2FsbGJhY2tzLCBk
YXRhYmFzZUNhbGxiYWNrcywgdHJhbnNhY3Rpb25JZCwgdmVyc2lvbikpOworICAgICAgICB9Cisg
ICAgICAgIElEQkNhbGxiYWNrcyogY2FsbGJhY2tzKCkgeyByZXR1cm4gbV9jYWxsYmFja3MuZ2V0
KCk7IH0KKyAgICAgICAgSURCRGF0YWJhc2VDYWxsYmFja3MqIGRhdGFiYXNlQ2FsbGJhY2tzKCkg
eyByZXR1cm4gbV9kYXRhYmFzZUNhbGxiYWNrcy5nZXQoKTsgfQorICAgICAgICBpbnQ2NF90IHZl
cnNpb24oKSB7IHJldHVybiBtX3ZlcnNpb247IH0KKyAgICAgICAgaW50NjRfdCB0cmFuc2FjdGlv
bklkKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbklkOyB9CisKKyAgICBwcml2YXRlOgor
ICAgICAgICBQZW5kaW5nT3BlbkNhbGwoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MsIGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCB2ZXJzaW9uKQorICAgICAgICAgICAgOiBtX2Nh
bGxiYWNrcyhjYWxsYmFja3MpCisgICAgICAgICAgICAsIG1fZGF0YWJhc2VDYWxsYmFja3MoZGF0
YWJhc2VDYWxsYmFja3MpCisgICAgICAgICAgICAsIG1fdmVyc2lvbih2ZXJzaW9uKQorICAgICAg
ICAgICAgLCBtX3RyYW5zYWN0aW9uSWQodHJhbnNhY3Rpb25JZCkKKyAgICAgICAgeworICAgICAg
ICB9CisgICAgICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOworICAgICAgICBS
ZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IG1fZGF0YWJhc2VDYWxsYmFja3M7CisgICAgICAg
IGludDY0X3QgbV92ZXJzaW9uOworICAgICAgICBjb25zdCBpbnQ2NF90IG1fdHJhbnNhY3Rpb25J
ZDsKKyAgICB9OworCisgICAgRGVxdWU8T3duUHRyPFBlbmRpbmdPcGVuQ2FsbD4+IG1fcGVuZGlu
Z09wZW5DYWxsczsKKyAgICBPd25QdHI8UGVuZGluZ09wZW5DYWxsPiBtX3BlbmRpbmdTZWNvbmRI
YWxmT3BlbjsKKworICAgIGNsYXNzIFBlbmRpbmdEZWxldGVDYWxsIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPFBlbmRpbmdEZWxldGVDYWxsPiBjcmVhdGUoUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBQZW5kaW5nRGVsZXRlQ2FsbChjYWxsYmFja3MpKTsKKyAgICAgICAg
fQorICAgICAgICBJREJDYWxsYmFja3MqIGNhbGxiYWNrcygpIHsgcmV0dXJuIG1fY2FsbGJhY2tz
LmdldCgpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBQZW5kaW5nRGVsZXRlQ2FsbChQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgICAgICAgICAgOiBtX2NhbGxiYWNr
cyhjYWxsYmFja3MpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICBSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBtX2NhbGxiYWNrczsKKyAgICB9OworCisgICAgRGVxdWU8T3duUHRyPFBlbmRpbmdE
ZWxldGVDYWxsPj4gbV9wZW5kaW5nRGVsZXRlQ2FsbHM7CisKKyAgICB0eXBlZGVmIExpc3RIYXNo
U2V0PFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4+IERhdGFiYXNlQ2FsbGJhY2tzU2V0Owor
ICAgIERhdGFiYXNlQ2FsbGJhY2tzU2V0IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQ7CisKKyAgICBi
b29sIG1fY2xvc2luZ0Nvbm5lY3Rpb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2VuZGlmIC8vIElEQkRhdGFi
YXNlQmFja2VuZEltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaAppbmRleCA2ZDRlY2Fk
Li4xNDc1ZGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaApAQCAtMzYsNiArMzYsNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIElEQkJhY2tpbmdTdG9yZUludGVyZmFj
ZTsKIGNsYXNzIElEQkNhbGxiYWNrczsKIGNsYXNzIElEQkRhdGFiYXNlQ2FsbGJhY2tzOwogY2xh
c3MgSURCS2V5OwpAQCAtODksNiArOTAsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNv
dW50KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUmFuZ2UoaW50NjRfdCB0cmFuc2FjdGlv
bklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoaW50NjRf
dCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPikgPSAwOworCisgICAgdmlydHVhbCBib29sIGlzSURCRGF0YWJhc2VCYWNrZW5kSW1w
bCgpIHsgcmV0dXJuIGZhbHNlOyB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9y
eUJhY2tlbmRJbnRlcmZhY2UuaAppbmRleCA3OTIyMzk4Li4yZjAxM2QzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNr
ZW5kSW50ZXJmYWNlLmgKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xh
c3MgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOwogY2xhc3MgSURCQ2FsbGJhY2tzOwogY2xhc3Mg
SURCRGF0YWJhc2U7Ci1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOyAvLyBGSVhNRTog
VGhpcyBpcyBhIExldmVsREIgc3BlY2lmaWMgdHlwZSBmb3Igbm93LiBodHRwOi8vd2Via2l0Lm9y
Zy9iLzEyMzAyNyB3aWxsIGZpeCB0aGF0LgorY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJm
YWNlOwogY2xhc3MgSURCRGF0YWJhc2VDYWxsYmFja3M7CiBjbGFzcyBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKQEAgLTY0LDcgKzY0LDcgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUlEQkRhdGFiYXNlQmFja2VuZChjb25z
dCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpID0gMDsKIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZVRyYW5zYWN0aW9uQmFja2Vu
ZChJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCKiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNz
UmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmpl
Y3RTdG9yZUlkcywgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUpID0gMDsKKyAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBtYXliZUNyZWF0ZVRy
YW5zYWN0aW9uQmFja2VuZChJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UqLCBpbnQ2NF90IHRy
YW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBjb25zdCBWZWN0
b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSkg
PSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkN1cnNvckJh
Y2tlbmRMZXZlbERCLmNwcAppbmRleCAyOWE1OTgwLi40MjQ1NzdkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkN1cnNvckJhY2tlbmRMZXZl
bERCLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lE
QkN1cnNvckJhY2tlbmRMZXZlbERCLmNwcApAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAi
SURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oIgogI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgotI2lu
Y2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZExldmVsREIuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3MuaCIKICNpbmNs
dWRlICJJREJEYXRhYmFzZUVycm9yLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24u
aCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIv
SURCQ3Vyc29yQmFja2VuZExldmVsREIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2xldmVsZGIvSURCQ3Vyc29yQmFja2VuZExldmVsREIuaAppbmRleCBiMmRlZWEzLi43Zjcx
MzQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRi
L0lEQkN1cnNvckJhY2tlbmRMZXZlbERCLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvbGV2ZWxkYi9JREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5oCkBAIC0zMSw3ICszMSw3
IEBACiAKICNpbmNsdWRlICJJREJCYWNraW5nU3RvcmVMZXZlbERCLmgiCiAjaW5jbHVkZSAiSURC
Q3Vyc29yQmFja2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZExl
dmVsREIuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAi
SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5o
IgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTc2LDcgKzc2LDcgQEAgcHJpdmF0ZToKIAog
ICAgIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgbV90YXNrVHlwZTsKICAg
ICBJbmRleGVkREI6OkN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOwotICAgIGNvbnN0IFJlZlB0cjxJ
REJEYXRhYmFzZUJhY2tlbmRMZXZlbERCPiBtX2RhdGFiYXNlOworICAgIGNvbnN0IFJlZlB0cjxJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsPiBtX2RhdGFiYXNlOwogICAgIFJlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRMZXZlbERCPiBtX3RyYW5zYWN0aW9uOwogICAgIGNvbnN0IGludDY0X3QgbV9v
YmplY3RTdG9yZUlkOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZXZlbGRiL0lEQkRhdGFiYXNlQmFja2VuZExldmVsREIuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0NDU4Zi4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkRhdGFiYXNlQmFja2Vu
ZExldmVsREIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjIxICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQi5oIgot
Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJCYWNraW5nU3Rv
cmVJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmgiCi0j
aW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3MuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4
Y2VwdGlvbi5oIgotI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5j
bHVkZSAiSURCSW5kZXhXcml0ZXIuaCIKLSNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgotI2luY2x1
ZGUgIklEQlJlY29yZElkZW50aWZpZXIuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCi0j
aW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUg
PHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzUmVm
UHRyPElEQkRhdGFiYXNlQmFja2VuZExldmVsREI+IElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6
OmNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFj
a2luZ1N0b3JlLCBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSogZmFjdG9yeSwgY29uc3QgU3Ry
aW5nJiB1bmlxdWVJZGVudGlmaWVyKQotewotICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRM
ZXZlbERCPiBiYWNrZW5kID0gYWRvcHRSZWYobmV3IElEQkRhdGFiYXNlQmFja2VuZExldmVsREIo
bmFtZSwgYmFja2luZ1N0b3JlLCBmYWN0b3J5LCB1bmlxdWVJZGVudGlmaWVyKSk7Ci0gICAgaWYg
KCFiYWNrZW5kLT5vcGVuSW50ZXJuYWwoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IGJhY2tlbmQucmVsZWFzZSgpOwotfQotCi1JREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpJREJE
YXRhYmFzZUJhY2tlbmRMZXZlbERCKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQmFja2luZ1N0b3Jl
SW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKiBmYWN0
b3J5LCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpCi0gICAgOiBtX2JhY2tpbmdTdG9y
ZShiYWNraW5nU3RvcmUpCi0gICAgLCBtX21ldGFkYXRhKG5hbWUsIEludmFsaWRJZCwgMCwgSW52
YWxpZElkKQotICAgICwgbV9pZGVudGlmaWVyKHVuaXF1ZUlkZW50aWZpZXIpCi0gICAgLCBtX2Zh
Y3RvcnkoZmFjdG9yeSkKLSAgICAsIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvcihJREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yOjpjcmVhdGUoKSkKLSAgICAsIG1fY2xvc2luZ0Nvbm5lY3Rpb24oZmFs
c2UpCi17Ci0gICAgQVNTRVJUKCFtX21ldGFkYXRhLm5hbWUuaXNOdWxsKCkpOwotfQotCi12b2lk
IElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmFkZE9iamVjdFN0b3JlKGNvbnN0IElEQk9iamVj
dFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlLCBpbnQ2NF90IG5ld01heE9iamVjdFN0b3JlSWQp
Ci17Ci0gICAgQVNTRVJUKCFtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RT
dG9yZS5pZCkpOwotICAgIGlmIChuZXdNYXhPYmplY3RTdG9yZUlkICE9IElEQk9iamVjdFN0b3Jl
TWV0YWRhdGE6OkludmFsaWRJZCkgewotICAgICAgICBBU1NFUlQobV9tZXRhZGF0YS5tYXhPYmpl
Y3RTdG9yZUlkIDwgbmV3TWF4T2JqZWN0U3RvcmVJZCk7Ci0gICAgICAgIG1fbWV0YWRhdGEubWF4
T2JqZWN0U3RvcmVJZCA9IG5ld01heE9iamVjdFN0b3JlSWQ7Ci0gICAgfQotICAgIG1fbWV0YWRh
dGEub2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZS5pZCwgb2JqZWN0U3RvcmUpOwotfQotCi12
b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OnJlbW92ZU9iamVjdFN0b3JlKGludDY0X3Qg
b2JqZWN0U3RvcmVJZCkKLXsKLSAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29u
dGFpbnMob2JqZWN0U3RvcmVJZCkpOwotICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnJlbW92
ZShvYmplY3RTdG9yZUlkKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjph
ZGRJbmRleChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGlu
ZGV4LCBpbnQ2NF90IG5ld01heEluZGV4SWQpCi17Ci0gICAgQVNTRVJUKG1fbWV0YWRhdGEub2Jq
ZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKLSAgICBJREJPYmplY3RTdG9yZU1l
dGFkYXRhIG9iamVjdFN0b3JlID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0
b3JlSWQpOwotCi0gICAgQVNTRVJUKCFvYmplY3RTdG9yZS5pbmRleGVzLmNvbnRhaW5zKGluZGV4
LmlkKSk7Ci0gICAgb2JqZWN0U3RvcmUuaW5kZXhlcy5zZXQoaW5kZXguaWQsIGluZGV4KTsKLSAg
ICBpZiAobmV3TWF4SW5kZXhJZCAhPSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKLSAg
ICAgICAgQVNTRVJUKG9iamVjdFN0b3JlLm1heEluZGV4SWQgPCBuZXdNYXhJbmRleElkKTsKLSAg
ICAgICAgb2JqZWN0U3RvcmUubWF4SW5kZXhJZCA9IG5ld01heEluZGV4SWQ7Ci0gICAgfQotICAg
IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZUlkLCBvYmplY3RTdG9yZSk7
Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6cmVtb3ZlSW5kZXgoaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCi17Ci0gICAgQVNTRVJUKG1fbWV0YWRh
dGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKLSAgICBJREJPYmplY3RT
dG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9i
amVjdFN0b3JlSWQpOwotCi0gICAgQVNTRVJUKG9iamVjdFN0b3JlLmluZGV4ZXMuY29udGFpbnMo
aW5kZXhJZCkpOwotICAgIG9iamVjdFN0b3JlLmluZGV4ZXMucmVtb3ZlKGluZGV4SWQpOwotICAg
IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZUlkLCBvYmplY3RTdG9yZSk7
Ci19Ci0KLWJvb2wgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6b3BlbkludGVybmFsKCkKLXsK
LSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBib29sIG9rID0gbV9iYWNraW5nU3RvcmUt
PmdldElEQkRhdGFiYXNlTWV0YURhdGEobV9tZXRhZGF0YS5uYW1lLCAmbV9tZXRhZGF0YSwgc3Vj
Y2Vzcyk7Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShzdWNjZXNzID09IChtX21ldGFkYXRhLmlk
ICE9IEludmFsaWRJZCksICJzdWNjZXNzID0gJXMsIG1faWQgPSAlbGxkIiwgc3VjY2VzcyA/ICJ0
cnVlIiA6ICJmYWxzZSIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4obV9tZXRhZGF0YS5pZCkpOwot
ICAgIGlmICghb2spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoc3VjY2VzcykKLSAg
ICAgICAgcmV0dXJuIG1fYmFja2luZ1N0b3JlLT5nZXRPYmplY3RTdG9yZXMobV9tZXRhZGF0YS5p
ZCwgJm1fbWV0YWRhdGEub2JqZWN0U3RvcmVzKTsKLQotICAgIHJldHVybiBtX2JhY2tpbmdTdG9y
ZS0+Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShtX21ldGFkYXRhLm5hbWUsIFN0cmluZzo6bnVt
YmVyKG1fbWV0YWRhdGEudmVyc2lvbiksIG1fbWV0YWRhdGEudmVyc2lvbiwgbV9tZXRhZGF0YS5p
ZCk7Ci19Ci0KLUlEQkRhdGFiYXNlQmFja2VuZExldmVsREI6On5JREJEYXRhYmFzZUJhY2tlbmRM
ZXZlbERCKCkKLXsKLX0KLQotSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBJREJEYXRhYmFzZUJh
Y2tlbmRMZXZlbERCOjpiYWNraW5nU3RvcmUoKSBjb25zdAotewotICAgIHJldHVybiBtX2JhY2tp
bmdTdG9yZS5nZXQoKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpjcmVh
dGVPYmplY3RTdG9yZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1
dG9JbmNyZW1lbnQpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmRM
ZXZlbERCOjpjcmVhdGVPYmplY3RTdG9yZSIpOwotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7
Ci0gICAgaWYgKCF0cmFuc2FjdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCh0cmFu
c2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKTsK
LQotICAgIEFTU0VSVCghbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3Rv
cmVJZCkpOwotICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmVNZXRhZGF0YShu
YW1lLCBvYmplY3RTdG9yZUlkLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50LCBJREJEYXRhYmFzZUJh
Y2tlbmRJbnRlcmZhY2U6Ok1pbmltdW1JbmRleElkKTsKLQotICAgIHRyYW5zYWN0aW9uLT5zY2hl
ZHVsZUNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKG9iamVjdFN0b3JlTWV0YWRhdGEpOwotICAg
IGFkZE9iamVjdFN0b3JlKG9iamVjdFN0b3JlTWV0YWRhdGEsIG9iamVjdFN0b3JlSWQpOwotfQot
Ci12b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmRlbGV0ZU9iamVjdFN0b3JlKGludDY0
X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQotewotICAgIExPRyhTdG9y
YWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6ZGVsZXRlT2JqZWN0U3RvcmUiKTsK
LSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uID0gbV90cmFu
c2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAg
ICAgIHJldHVybjsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6
OlRyYW5zYWN0aW9uVmVyc2lvbkNoYW5nZSk7Ci0KLSAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmpl
Y3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOwotICAgIGNvbnN0IElEQk9iamVjdFN0
b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jl
cy5nZXQob2JqZWN0U3RvcmVJZCk7Ci0KLSAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVEZWxldGVP
YmplY3RTdG9yZU9wZXJhdGlvbihvYmplY3RTdG9yZU1ldGFkYXRhKTsKLSAgICByZW1vdmVPYmpl
Y3RTdG9yZShvYmplY3RTdG9yZUlkKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZl
bERCOjpjcmVhdGVJbmRleChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBh
dGgmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkpCi17Ci0gICAgTE9HKFN0
b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpjcmVhdGVJbmRleCIpOwotICAg
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0
aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbikKLSAgICAgICAg
cmV0dXJuOwotICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJh
bnNhY3Rpb25WZXJzaW9uQ2hhbmdlKTsKLQotICAgIEFTU0VSVChtX21ldGFkYXRhLm9iamVjdFN0
b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7Ci0gICAgY29uc3QgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSBvYmplY3RTdG9yZSA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RT
dG9yZUlkKTsKLQotICAgIEFTU0VSVCghb2JqZWN0U3RvcmUuaW5kZXhlcy5jb250YWlucyhpbmRl
eElkKSk7Ci0gICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBpbmRleE1ldGFkYXRhKG5hbWUsIGlu
ZGV4SWQsIGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSk7Ci0KLSAgICB0cmFuc2FjdGlvbi0+
c2NoZWR1bGVDcmVhdGVJbmRleE9wZXJhdGlvbihvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRh
KTsKLQotICAgIGFkZEluZGV4KG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEsIGluZGV4SWQp
OwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmRlbGV0ZUluZGV4KGludDY0
X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQp
Ci17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpkZWxl
dGVJbmRleCIpOwotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rp
b24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7Ci0gICAgaWYgKCF0cmFuc2Fj
dGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09
IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKTsKLQotICAgIEFTU0VSVChtX21l
dGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7Ci0gICAgY29uc3Qg
SURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmplY3RTdG9yZSA9IG1fbWV0YWRhdGEub2JqZWN0U3Rv
cmVzLmdldChvYmplY3RTdG9yZUlkKTsKLQotICAgIEFTU0VSVChvYmplY3RTdG9yZS5pbmRleGVz
LmNvbnRhaW5zKGluZGV4SWQpKTsKLSAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1l
dGFkYXRhID0gb2JqZWN0U3RvcmUuaW5kZXhlcy5nZXQoaW5kZXhJZCk7Ci0KLSAgICB0cmFuc2Fj
dGlvbi0+c2NoZWR1bGVEZWxldGVJbmRleE9wZXJhdGlvbihvYmplY3RTdG9yZUlkLCBpbmRleE1l
dGFkYXRhKTsKLQotICAgIHJlbW92ZUluZGV4KG9iamVjdFN0b3JlSWQsIGluZGV4SWQpOwotfQot
Ci12b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmNvbW1pdChpbnQ2NF90IHRyYW5zYWN0
aW9uSWQpCi17Ci0gICAgLy8gVGhlIGZyb250ZW5kIHN1Z2dlc3RzIHRoYXQgd2UgY29tbWl0LCBi
dXQgd2UgbWF5IGhhdmUgcHJldmlvdXNseSBpbml0aWF0ZWQgYW4gYWJvcnQsIGFuZCBzbyBoYXZl
IGRpc3Bvc2VkIG9mIHRoZSB0cmFuc2FjdGlvbi4gb25BYm9ydCBoYXMgYWxyZWFkeSBiZWVuIGRp
c3BhdGNoZWQgdG8gdGhlIGZyb250ZW5kLCBzbyBpdCB3aWxsIGZpbmQgb3V0IGFib3V0IHRoYXQg
YXN5bmNocm9ub3VzbHkuCi0gICAgaWYgKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0
aW9uSWQpKQotICAgICAgICBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCktPmNvbW1p
dCgpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmFib3J0KGludDY0X3Qg
dHJhbnNhY3Rpb25JZCkKLXsKLSAgICAvLyBJZiB0aGUgdHJhbnNhY3Rpb24gaXMgdW5rbm93biwg
dGhlbiBpdCBoYXMgYWxyZWFkeSBiZWVuIGFib3J0ZWQgYnkgdGhlIGJhY2tlbmQgYmVmb3JlIHRo
aXMgY2FsbCBzbyBpdCBpcyBzYWZlIHRvIGlnbm9yZSBpdC4KLSAgICBpZiAobV90cmFuc2FjdGlv
bnMuY29udGFpbnModHJhbnNhY3Rpb25JZCkpCi0gICAgICAgIG1fdHJhbnNhY3Rpb25zLmdldCh0
cmFuc2FjdGlvbklkKS0+YWJvcnQoKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZl
bERCOjphYm9ydChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VF
cnJvcj4gZXJyb3IpCi17Ci0gICAgLy8gSWYgdGhlIHRyYW5zYWN0aW9uIGlzIHVua25vd24sIHRo
ZW4gaXQgaGFzIGFscmVhZHkgYmVlbiBhYm9ydGVkIGJ5IHRoZSBiYWNrZW5kIGJlZm9yZSB0aGlz
IGNhbGwgc28gaXQgaXMgc2FmZSB0byBpZ25vcmUgaXQuCi0gICAgaWYgKG1fdHJhbnNhY3Rpb25z
LmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKQotICAgICAgICBtX3RyYW5zYWN0aW9ucy5nZXQodHJh
bnNhY3Rpb25JZCktPmFib3J0KGVycm9yKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRM
ZXZlbERCOjpnZXQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIGJvb2wg
a2V5T25seSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBMT0co
U3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmdldCIpOwotICAgIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5n
ZXQodHJhbnNhY3Rpb25JZCk7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlR2V0T3BlcmF0aW9uKG1fbWV0YWRhdGEsIG9i
amVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBrZXlPbmx5ID8gSW5kZXhlZERCOjpDdXJz
b3JLZXlPbmx5IDogSW5kZXhlZERCOjpDdXJzb3JLZXlBbmRWYWx1ZSwgY2FsbGJhY2tzKTsKLX0K
LQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpwdXQoaW50NjRfdCB0cmFuc2FjdGlv
bklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1
ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBj
b25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQotewotICAgIExPRyhTdG9yYWdlQVBJ
LCAiSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6cHV0Iik7Ci0gICAgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2Fj
dGlvbklkKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgQVNT
RVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRPbmx5
KTsKLQotICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmVNZXRhZGF0
YSA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKLQotICAgIEFT
U0VSVChvYmplY3RTdG9yZU1ldGFkYXRhLmF1dG9JbmNyZW1lbnQgfHwga2V5LmdldCgpKTsKLQot
ICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVB1dE9wZXJhdGlvbihvYmplY3RTdG9yZU1ldGFkYXRh
LCB2YWx1ZSwga2V5LCBwdXRNb2RlLCBjYWxsYmFja3MsIGluZGV4SWRzLCBpbmRleEtleXMpOwot
fQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OnNldEluZGV4S2V5cyhpbnQ2NF90
IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXk+
IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZl
Y3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJE
YXRhYmFzZUJhY2tlbmRMZXZlbERCOjpzZXRJbmRleEtleXMiKTsKLSAgICBBU1NFUlQocHJwUHJp
bWFyeUtleSk7Ci0KLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0
aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIGlmICghdHJhbnNh
Y3Rpb24pCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9
PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVyc2lvbkNoYW5nZSk7Ci0KLSAgICBSZWZQdHI8SURC
S2V5PiBwcmltYXJ5S2V5ID0gcHJwUHJpbWFyeUtleTsKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0
b3JlSW50ZXJmYWNlPiBzdG9yZSA9IGJhY2tpbmdTdG9yZSgpOwotICAgIC8vIEZJWE1FOiBUaGlz
IG1ldGhvZCBjb3VsZCBiZSBhc3luY2hyb25vdXMsIGJ1dCB3ZSBuZWVkIHRvIGV2YWx1YXRlIGlm
IGl0J3Mgd29ydGggdGhlIGV4dHJhIGNvbXBsZXhpdHkuCi0gICAgUmVmUHRyPElEQlJlY29yZElk
ZW50aWZpZXI+IHJlY29yZElkZW50aWZpZXI7Ci0gICAgYm9vbCBvayA9IHN0b3JlLT5rZXlFeGlz
dHNJbk9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBt
X21ldGFkYXRhLmlkLCBvYmplY3RTdG9yZUlkLCAqcHJpbWFyeUtleSwgcmVjb3JkSWRlbnRpZmll
cik7Ci0gICAgaWYgKCFvaykgewotICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRl
cm5hbCBlcnJvciBzZXR0aW5nIGluZGV4IGtleXMuIikpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGlmICghcmVjb3JkSWRlbnRpZmllcikgewotICAgICAgICBSZWZQdHI8SURCRGF0YWJh
c2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNl
cHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9yIHNldHRp
bmcgaW5kZXgga2V5cyBmb3Igb2JqZWN0IHN0b3JlLiIpKTsKLSAgICAgICAgdHJhbnNhY3Rpb24t
PmFib3J0KGVycm9yLnJlbGVhc2UoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBW
ZWN0b3I8UmVmUHRyPElEQkluZGV4V3JpdGVyPj4gaW5kZXhXcml0ZXJzOwotICAgIFN0cmluZyBl
cnJvck1lc3NhZ2U7Ci0gICAgYm9vbCBvYmV5c0NvbnN0cmFpbnRzID0gZmFsc2U7Ci0gICAgQVNT
RVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKLSAg
ICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhID0gbV9t
ZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOwotICAgIGJvb2wgYmFja2lu
Z1N0b3JlU3VjY2VzcyA9IHN0b3JlLT5tYWtlSW5kZXhXcml0ZXJzKCp0cmFuc2FjdGlvbiwgaWQo
KSwgb2JqZWN0U3RvcmVNZXRhZGF0YSwgKnByaW1hcnlLZXksIGZhbHNlLCBpbmRleElkcywgaW5k
ZXhLZXlzLCBpbmRleFdyaXRlcnMsICZlcnJvck1lc3NhZ2UsIG9iZXlzQ29uc3RyYWludHMpOwot
ICAgIGlmICghYmFja2luZ1N0b3JlU3VjY2VzcykgewotICAgICAgICB0cmFuc2FjdGlvbi0+YWJv
cnQoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3du
RXJyb3IsICJJbnRlcm5hbCBlcnJvcjogYmFja2luZyBzdG9yZSBlcnJvciB1cGRhdGluZyBpbmRl
eCBrZXlzLiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIW9iZXlzQ29uc3Ry
YWludHMpIHsKLSAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yLCBlcnJvck1lc3NhZ2Up
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
aW5kZXhXcml0ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIElEQkluZGV4V3JpdGVyKiBpbmRl
eFdyaXRlciA9IGluZGV4V3JpdGVyc1tpXS5nZXQoKTsKLSAgICAgICAgaW5kZXhXcml0ZXItPndy
aXRlSW5kZXhLZXlzKHJlY29yZElkZW50aWZpZXIuZ2V0KCksICpzdG9yZS5nZXQoKSwgdHJhbnNh
Y3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGlkKCksIG9iamVjdFN0b3JlSWQpOwot
ICAgIH0KLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpzZXRJbmRleGVzUmVh
ZHkoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90LCBjb25zdCBWZWN0b3I8aW50NjRfdD4m
IGluZGV4SWRzKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kTGV2
ZWxEQjo6c2V0SW5kZXhlc1JlYWR5Iik7Ci0KLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwot
ICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIHRyYW5zYWN0aW9u
LT5zY2hlZHVsZVNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbihpbmRleElkcy5zaXplKCkpOwotfQot
Ci12b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6Om9wZW5DdXJzb3IoaW50NjRfdCB0cmFu
c2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRp
cmVjdGlvbiwgYm9vbCBrZXlPbmx5LCBUYXNrVHlwZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNl
QmFja2VuZExldmVsREI6Om9wZW5DdXJzb3IiKTsKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQp
OwotICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIHRyYW5zYWN0
aW9uLT5zY2hlZHVsZU9wZW5DdXJzb3JPcGVyYXRpb24ob2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwg
a2V5UmFuZ2UsIGRpcmVjdGlvbiwga2V5T25seSA/IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSA6
IEluZGV4ZWREQjo6Q3Vyc29yS2V5QW5kVmFsdWUsIHRhc2tUeXBlLCBjYWxsYmFja3MpOwotfQot
Ci12b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmNvdW50KGludDY0X3QgdHJhbnNhY3Rp
b25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
KQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6Y291
bnQiKTsKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uID0g
bV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIGlmICghdHJhbnNhY3Rpb24p
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5j
b250YWlucyhvYmplY3RTdG9yZUlkKSk7Ci0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlQ291bnRP
cGVyYXRpb24ob2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGNhbGxiYWNrcyk7Ci19
Ci0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpkZWxldGVSYW5nZShpbnQ2NF90
IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0g
ICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpkZWxldGVSYW5n
ZSIpOwotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24gPSBt
X3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbikK
LSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IEluZGV4
ZWREQjo6VHJhbnNhY3Rpb25SZWFkT25seSk7Ci0KLSAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVE
ZWxldGVSYW5nZU9wZXJhdGlvbihvYmplY3RTdG9yZUlkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKTsK
LX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpjbGVhcihpbnQ2NF90IHRyYW5z
YWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZExl
dmVsREI6OmNsZWFyIik7Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFu
c2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKLSAgICBpZiAoIXRy
YW5zYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2Rl
KCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRPbmx5KTsKLQotICAgIHRyYW5zYWN0aW9u
LT5zY2hlZHVsZUNsZWFyT3BlcmF0aW9uKG9iamVjdFN0b3JlSWQsIGNhbGxiYWNrcyk7Ci19Ci0K
LXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6dHJhbnNhY3Rpb25TdGFydGVkKElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24pCi17Ci0gICAgaWYgKHRyYW5z
YWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpIHsK
LSAgICAgICAgQVNTRVJUKCFtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pOwotICAg
ICAgICBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjsKLSAg
ICB9Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6dHJhbnNhY3Rpb25GaW5p
c2hlZChJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHJhd1RyYW5zYWN0aW9uKQotewot
ICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0g
cmF3VHJhbnNhY3Rpb247Ci0gICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5z
YWN0aW9uLT5pZCgpKSk7Ci0gICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlv
bi0+aWQoKSkgPT0gdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fdHJhbnNhY3Rpb25zLnJlbW92
ZSh0cmFuc2FjdGlvbi0+aWQoKSk7Ci0gICAgaWYgKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5k
ZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpIHsKLSAgICAgICAgQVNTRVJUKHRyYW5z
YWN0aW9uLmdldCgpID09IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5nZXQoKSk7
Ci0gICAgICAgIG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5jbGVhcigpOwotICAg
IH0KLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjp0cmFuc2FjdGlvbkZpbmlz
aGVkQW5kQWJvcnRGaXJlZChJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHJhd1RyYW5z
YWN0aW9uKQotewotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRy
YW5zYWN0aW9uID0gcmF3VHJhbnNhY3Rpb247Ci0gICAgaWYgKHRyYW5zYWN0aW9uLT5tb2RlKCkg
PT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpIHsKLSAgICAgICAgLy8gSWYg
dGhpcyB3YXMgYW4gb3Blbi13aXRoLXZlcnNpb24gY2FsbCwgdGhlcmUgd2lsbCBiZSBhICJzZWNv
bmQKLSAgICAgICAgLy8gaGFsZiIgb3BlbiBjYWxsIHdhaXRpbmcgZm9yIHVzIGluIHByb2Nlc3NQ
ZW5kaW5nQ2FsbHMuCi0gICAgICAgIC8vIEZJWE1FOiBXaGVuIHdlIG5vIGxvbmdlciBzdXBwb3J0
IHNldFZlcnNpb24sIGFzc2VydCBzdWNoIGEgdGhpbmcuCi0gICAgICAgIGlmIChtX3BlbmRpbmdT
ZWNvbmRIYWxmT3BlbikgewotICAgICAgICAgICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4tPmNh
bGxiYWNrcygpLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6QWJvcnRFcnJvciwgIlZlcnNpb24gY2hhbmdlIHRyYW5zYWN0aW9uIHdhcyBhYm9y
dGVkIGluIHVwZ3JhZGVuZWVkZWQgZXZlbnQgaGFuZGxlci4iKSk7Ci0gICAgICAgICAgICBtX3Bl
bmRpbmdTZWNvbmRIYWxmT3Blbi5yZWxlYXNlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcHJvY2Vz
c1BlbmRpbmdDYWxscygpOwotICAgIH0KLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZl
bERCOjp0cmFuc2FjdGlvbkZpbmlzaGVkQW5kQ29tcGxldGVGaXJlZChJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqIHJhd1RyYW5zYWN0aW9uKQotewotICAgIFJlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gcmF3VHJhbnNhY3Rpb247Ci0gICAg
aWYgKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25D
aGFuZ2UpCi0gICAgICAgIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKLX0KLQotc2l6ZV90IElEQkRh
dGFiYXNlQmFja2VuZExldmVsREI6OmNvbm5lY3Rpb25Db3VudCgpCi17Ci0gICAgLy8gVGhpcyBk
b2VzIG5vdCBpbmNsdWRlIHBlbmRpbmcgb3BlbiBjYWxscywgYXMgdGhvc2Ugc2hvdWxkIG5vdCBi
bG9jayB2ZXJzaW9uIGNoYW5nZXMgYW5kIGRlbGV0ZXMuCi0gICAgcmV0dXJuIG1fZGF0YWJhc2VD
YWxsYmFja3NTZXQuc2l6ZSgpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6
OnByb2Nlc3NQZW5kaW5nQ2FsbHMoKQotewotICAgIGlmIChtX3BlbmRpbmdTZWNvbmRIYWxmT3Bl
bikgewotICAgICAgICAvLyBGSVhNRTogRGF0YWJhc2UgdmVyc2lvbnMgYXJlIG5vdyBvZiB0eXBl
IHVpbnQ2NF90LCBidXQgdGhpcyBjb2RlIGV4cGVjdGVkIGludDY0X3QuCi0gICAgICAgIEFTU0VS
VChtX3BlbmRpbmdTZWNvbmRIYWxmT3Blbi0+dmVyc2lvbigpID09IChpbnQ2NF90KW1fbWV0YWRh
dGEudmVyc2lvbik7Ci0gICAgICAgIEFTU0VSVChtX21ldGFkYXRhLmlkICE9IEludmFsaWRJZCk7
Ci0gICAgICAgIG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLT5jYWxsYmFja3MoKS0+b25TdWNjZXNz
KHRoaXMsIHRoaXMtPm1ldGFkYXRhKCkpOwotICAgICAgICBtX3BlbmRpbmdTZWNvbmRIYWxmT3Bl
bi5yZWxlYXNlKCk7Ci0gICAgICAgIC8vIEZhbGwgdGhyb3VnaCB3aGVuIGNvbXBsZXRlLCBhcyBw
ZW5kaW5nIGRlbGV0ZXMgbWF5IGJlIChwYXJ0aWFsbHkpIHVuYmxvY2tlZC4KLSAgICB9Ci0KLSAg
ICAvLyBOb3RlIHRoYXQgdGhpcyBjaGVjayBpcyBvbmx5IGFuIG9wdGltaXphdGlvbiB0byByZWR1
Y2UgcXVldWUtY2h1cm4gYW5kCi0gICAgLy8gbm90IG5lY2Vzc2FyeSBmb3IgY29ycmVjdG5lc3M7
IGRlbGV0ZURhdGFiYXNlIGFuZCBvcGVuQ29ubmVjdGlvbiB3aWxsCi0gICAgLy8gcmVxdWV1ZSB0
aGVpciBjYWxscyBpZiB0aGlzIGNvbmRpdGlvbiBpcyB0cnVlLgotICAgIGlmIChtX3J1bm5pbmdW
ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9w
ZW5kaW5nRGVsZXRlQ2FsbHMuaXNFbXB0eSgpICYmIGlzRGVsZXRlRGF0YWJhc2VCbG9ja2VkKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICB3aGlsZSAoIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1w
dHkoKSkgewotICAgICAgICBPd25QdHI8UGVuZGluZ0RlbGV0ZUNhbGw+IHBlbmRpbmdEZWxldGVD
YWxsID0gbV9wZW5kaW5nRGVsZXRlQ2FsbHMudGFrZUZpcnN0KCk7Ci0gICAgICAgIGRlbGV0ZURh
dGFiYXNlRmluYWwocGVuZGluZ0RlbGV0ZUNhbGwtPmNhbGxiYWNrcygpKTsKLSAgICB9Ci0gICAg
Ly8gZGVsZXRlRGF0YWJhc2VGaW5hbCBzaG91bGQgbmV2ZXIgcmUtcXVldWUgY2FsbHMuCi0gICAg
QVNTRVJUKG1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSk7Ci0KLSAgICAvLyBUaGlzIGNo
ZWNrIGlzIGFsc28gbm90IHJlYWxseSBuZWVkZWQsIG9wZW5Db25uZWN0aW9uIHdvdWxkIGp1c3Qg
cmVxdWV1ZSBpdHMgY2FsbHMuCi0gICAgaWYgKG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gT3BlbiBjYWxscyBjYW4gYmUgcmVxdWV1
ZWQgaWYgYW4gb3BlbiBjYWxsIHN0YXJ0ZWQgYSB2ZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbi4K
LSAgICBEZXF1ZTxPd25QdHI8UGVuZGluZ09wZW5DYWxsPj4gcGVuZGluZ09wZW5DYWxsczsKLSAg
ICBtX3BlbmRpbmdPcGVuQ2FsbHMuc3dhcChwZW5kaW5nT3BlbkNhbGxzKTsKLSAgICB3aGlsZSAo
IXBlbmRpbmdPcGVuQ2FsbHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIE93blB0cjxQZW5kaW5nT3Bl
bkNhbGw+IHBlbmRpbmdPcGVuQ2FsbCA9IHBlbmRpbmdPcGVuQ2FsbHMudGFrZUZpcnN0KCk7Ci0g
ICAgICAgIG9wZW5Db25uZWN0aW9uKHBlbmRpbmdPcGVuQ2FsbC0+Y2FsbGJhY2tzKCksIHBlbmRp
bmdPcGVuQ2FsbC0+ZGF0YWJhc2VDYWxsYmFja3MoKSwgcGVuZGluZ09wZW5DYWxsLT50cmFuc2Fj
dGlvbklkKCksIHBlbmRpbmdPcGVuQ2FsbC0+dmVyc2lvbigpKTsKLSAgICB9Ci19Ci0KLXZvaWQg
SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6Y3JlYXRlVHJhbnNhY3Rpb24oaW50NjRfdCB0cmFu
c2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNv
bnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIHVuc2lnbmVkIHNob3J0IG1vZGUp
Ci17Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rp
b24gPSBtX2ZhY3RvcnktPmNyZWF0ZVRyYW5zYWN0aW9uQmFja2VuZCh0aGlzLCB0cmFuc2FjdGlv
bklkLCBjYWxsYmFja3MsIG9iamVjdFN0b3JlSWRzLCBzdGF0aWNfY2FzdDxJbmRleGVkREI6OlRy
YW5zYWN0aW9uTW9kZT4obW9kZSkpOwotCi0gICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9ucy5jb250
YWlucyh0cmFuc2FjdGlvbklkKSk7Ci0gICAgbV90cmFuc2FjdGlvbnMuYWRkKHRyYW5zYWN0aW9u
SWQsIHRyYW5zYWN0aW9uLmdldCgpKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZl
bERCOjpvcGVuQ29ubmVjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tz
LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBwcnBEYXRhYmFzZUNhbGxiYWNrcywg
aW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IHZlcnNpb24pCi17Ci0gICAgQVNTRVJUKG1f
YmFja2luZ1N0b3JlLmdldCgpKTsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Mg
PSBwcnBDYWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFz
ZUNhbGxiYWNrcyA9IHBycERhdGFiYXNlQ2FsbGJhY2tzOwotCi0gICAgaWYgKCFtX3BlbmRpbmdE
ZWxldGVDYWxscy5pc0VtcHR5KCkgfHwgbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9u
KSB7Ci0gICAgICAgIG1fcGVuZGluZ09wZW5DYWxscy5hcHBlbmQoUGVuZGluZ09wZW5DYWxsOjpj
cmVhdGUoY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcywgdHJhbnNhY3Rpb25JZCwgdmVyc2lv
bikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fbWV0YWRhdGEuaWQgPT0g
SW52YWxpZElkKSB7Ci0gICAgICAgIC8vIFRoZSBkYXRhYmFzZSB3YXMgZGVsZXRlZCB0aGVuIGlt
bWVkaWF0ZWx5IHJlLW9wZW5lZDsgb3BlbkludGVybmFsKCkgcmVjcmVhdGVzIGl0IGluIHRoZSBi
YWNraW5nIHN0b3JlLgotICAgICAgICBpZiAob3BlbkludGVybmFsKCkpCi0gICAgICAgICAgICBB
U1NFUlQobV9tZXRhZGF0YS52ZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVy
c2lvbik7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2U7Ci0gICAg
ICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3I7Ci0gICAgICAgICAgICBpZiAo
dmVyc2lvbiA9PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24pCi0gICAgICAgICAg
ICAgICAgbWVzc2FnZSA9ICJJbnRlcm5hbCBlcnJvciBvcGVuaW5nIGRhdGFiYXNlIHdpdGggbm8g
dmVyc2lvbiBzcGVjaWZpZWQuIjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBt
ZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9yIG9wZW5pbmcgZGF0YWJhc2Ug
d2l0aCB2ZXJzaW9uICVsbGQiLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHZlcnNpb24pKTsKLSAg
ICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgbWVzc2FnZSkpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gV2UgaW5mZXIgdGhhdCB0aGUgZGF0
YWJhc2UgZGlkbid0IGV4aXN0IGZyb20gaXRzIGxhY2sgb2YgZWl0aGVyIHR5cGUgb2YgdmVyc2lv
bi4KLSAgICBib29sIGlzTmV3RGF0YWJhc2UgPSBtX21ldGFkYXRhLnZlcnNpb24gPT0gSURCRGF0
YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uOwotCi0gICAgaWYgKHZlcnNpb24gPT0gSURCRGF0
YWJhc2VNZXRhZGF0YTo6RGVmYXVsdEludFZlcnNpb24pIHsKLSAgICAgICAgLy8gRklYTUU6IHRo
aXMgY29tbWVudHMgd2FzIHJlbGF0ZWQgdG8gQ2hyb21pdW0gY29kZS4gSXQgbWF5IGJlIGluY29y
cmVjdAotICAgICAgICAvLyBGb3IgdW5pdCB0ZXN0cyBvbmx5IC0gc2tpcCB1cGdyYWRlIHN0ZXBz
LiBDYWxsaW5nIGZyb20gc2NyaXB0IHdpdGggRGVmYXVsdEludFZlcnNpb24gdGhyb3dzIGV4Y2Vw
dGlvbi4KLSAgICAgICAgQVNTRVJUKGlzTmV3RGF0YWJhc2UpOwotICAgICAgICBtX2RhdGFiYXNl
Q2FsbGJhY2tzU2V0LmFkZChkYXRhYmFzZUNhbGxiYWNrcyk7Ci0gICAgICAgIGNhbGxiYWNrcy0+
b25TdWNjZXNzKHRoaXMsIHRoaXMtPm1ldGFkYXRhKCkpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWYgKHZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9u
KSB7Ci0gICAgICAgIGlmICghaXNOZXdEYXRhYmFzZSkgewotICAgICAgICAgICAgbV9kYXRhYmFz
ZUNhbGxiYWNrc1NldC5hZGQoUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPihkYXRhYmFzZUNh
bGxiYWNrcykpOwotICAgICAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3ModGhpcywgdGhpcy0+
bWV0YWRhdGEoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8g
U3BlYyBzYXlzOiBJZiBubyB2ZXJzaW9uIGlzIHNwZWNpZmllZCBhbmQgbm8gZGF0YWJhc2UgZXhp
c3RzLCBzZXQgZGF0YWJhc2UgdmVyc2lvbiB0byAxLgotICAgICAgICB2ZXJzaW9uID0gMTsKLSAg
ICB9Ci0KLSAgICAvLyBGSVhNRTogRGF0YWJhc2UgdmVyc2lvbnMgYXJlIG5vdyBvZiB0eXBlIHVp
bnQ2NF90LCBidXQgdGhpcyBjb2RlIGV4cGVjdGVkIGludDY0X3QuCi0gICAgaWYgKHZlcnNpb24g
PiAoaW50NjRfdCltX21ldGFkYXRhLnZlcnNpb24pIHsKLSAgICAgICAgcnVuSW50VmVyc2lvbkNo
YW5nZVRyYW5zYWN0aW9uKGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MsIHRyYW5zYWN0aW9u
SWQsIHZlcnNpb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IERh
dGFiYXNlIHZlcnNpb25zIGFyZSBub3cgb2YgdHlwZSB1aW50NjRfdCwgYnV0IHRoaXMgY29kZSBl
eHBlY3RlZCBpbnQ2NF90LgotICAgIGlmICh2ZXJzaW9uIDwgKGludDY0X3QpbV9tZXRhZGF0YS52
ZXJzaW9uKSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpj
cmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlZlcnNpb25FcnJvciwgU3RyaW5nOjpmb3JtYXQo
IlRoZSByZXF1ZXN0ZWQgdmVyc2lvbiAoJWxsZCkgaXMgbGVzcyB0aGFuIHRoZSBleGlzdGluZyB2
ZXJzaW9uICglbGxkKS4iLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHZlcnNpb24pLCBzdGF0aWNf
Y2FzdDxsb25nIGxvbmc+KG1fbWV0YWRhdGEudmVyc2lvbikpKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICAvLyBGSVhNRTogRGF0YWJhc2UgdmVyc2lvbnMgYXJlIG5vdyBvZiB0eXBl
IHVpbnQ2NF90LCBidXQgdGhpcyBjb2RlIGV4cGVjdGVkIGludDY0X3QuCi0gICAgQVNTRVJUKHZl
cnNpb24gPT0gKGludDY0X3QpbV9tZXRhZGF0YS52ZXJzaW9uKTsKLSAgICBtX2RhdGFiYXNlQ2Fs
bGJhY2tzU2V0LmFkZChkYXRhYmFzZUNhbGxiYWNrcyk7Ci0gICAgY2FsbGJhY2tzLT5vblN1Y2Nl
c3ModGhpcywgdGhpcy0+bWV0YWRhdGEoKSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
TGV2ZWxEQjo6cnVuSW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBwcnBDYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IHBy
cERhdGFiYXNlQ2FsbGJhY2tzLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3QgcmVxdWVz
dGVkVmVyc2lvbikKLXsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBD
YWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxi
YWNrcyA9IHBycERhdGFiYXNlQ2FsbGJhY2tzOwotICAgIEFTU0VSVChjYWxsYmFja3MpOwotICAg
IGZvciAoRGF0YWJhc2VDYWxsYmFja3NTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhYmFz
ZUNhbGxiYWNrc1NldC5iZWdpbigpOyBpdCAhPSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmVuZCgp
OyArK2l0KSB7Ci0gICAgICAgIC8vIEZyb250IGVuZCBlbnN1cmVzIHRoZSBldmVudCBpcyBub3Qg
ZmlyZWQgYXQgY29ubmVjdGlvbnMgdGhhdCBoYXZlIGNsb3NlUGVuZGluZyBzZXQuCi0gICAgICAg
IGlmICgqaXQgIT0gZGF0YWJhc2VDYWxsYmFja3MpCi0gICAgICAgICAgICAoKml0KS0+b25WZXJz
aW9uQ2hhbmdlKG1fbWV0YWRhdGEudmVyc2lvbiwgcmVxdWVzdGVkVmVyc2lvbiwgSW5kZXhlZERC
OjpOdWxsVmVyc2lvbik7Ci0gICAgfQotICAgIC8vIFRoZSBzcGVjIGRpY3RhdGVzIHdlIHdhaXQg
dW50aWwgYWxsIHRoZSB2ZXJzaW9uIGNoYW5nZSBldmVudHMgYXJlCi0gICAgLy8gZGVsaXZlcmVk
IGFuZCB0aGVuIGNoZWNrIG1fZGF0YWJhc2VDYWxsYmFja3MuZW1wdHkoKSBiZWZvcmUgcHJvY2Vl
ZGluZwotICAgIC8vIG9yIGZpcmluZyBhIGJsb2NrZWQgZXZlbnQsIGJ1dCBpbnN0ZWFkIHdlIHNo
b3VsZCBiZSBjb25zaXN0ZW50IHdpdGggaG93Ci0gICAgLy8gdGhlIG9sZCBzZXRWZXJzaW9uIChp
bmNvcnJlY3RseSkgZGlkIGl0LgotICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIGNhbGwgdG8gb25C
bG9ja2VkIGFuZCBpbnN0ZWFkIHdhaXQgdW50aWwgdGhlIGZyb250ZW5kCi0gICAgLy8gdGVsbHMg
dXMgdGhhdCBhbGwgdGhlIGJsb2NrZWQgZXZlbnRzIGhhdmUgYmVlbiBkZWxpdmVyZWQuIFNlZQot
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTEzMAotICAg
IGlmIChjb25uZWN0aW9uQ291bnQoKSkKLSAgICAgICAgY2FsbGJhY2tzLT5vbkJsb2NrZWQobV9t
ZXRhZGF0YS52ZXJzaW9uKTsKLSAgICAvLyBGSVhNRTogQWRkIHRlc3QgZm9yIG1fcnVubmluZ1Zl
cnNpb25DaGFuZ2VUcmFuc2FjdGlvbi4KLSAgICBpZiAobV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRy
YW5zYWN0aW9uIHx8IGNvbm5lY3Rpb25Db3VudCgpKSB7Ci0gICAgICAgIG1fcGVuZGluZ09wZW5D
YWxscy5hcHBlbmQoUGVuZGluZ09wZW5DYWxsOjpjcmVhdGUoY2FsbGJhY2tzLCBkYXRhYmFzZUNh
bGxiYWNrcywgdHJhbnNhY3Rpb25JZCwgcmVxdWVzdGVkVmVyc2lvbikpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgVmVjdG9yPGludDY0X3Q+IG9iamVjdFN0b3JlSWRzOwotICAgIGNy
ZWF0ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWQsIGRhdGFiYXNlQ2FsbGJhY2tzLCBvYmplY3RT
dG9yZUlkcywgSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpOwotICAgIFJlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gbV90cmFuc2Fj
dGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotCi0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVmVy
c2lvbkNoYW5nZU9wZXJhdGlvbih0cmFuc2FjdGlvbklkLCByZXF1ZXN0ZWRWZXJzaW9uLCBjYWxs
YmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzLCBtX21ldGFkYXRhKTsKLQotICAgIEFTU0VSVCghbV9w
ZW5kaW5nU2Vjb25kSGFsZk9wZW4pOwotICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKGRh
dGFiYXNlQ2FsbGJhY2tzKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpk
ZWxldGVEYXRhYmFzZShQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzKQotewot
ICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBp
ZiAoaXNEZWxldGVEYXRhYmFzZUJsb2NrZWQoKSkgewotICAgICAgICBmb3IgKERhdGFiYXNlQ2Fs
bGJhY2tzU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYmVn
aW4oKTsgaXQgIT0gbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5lbmQoKTsgKytpdCkgewotICAgICAg
ICAgICAgLy8gRnJvbnQgZW5kIGVuc3VyZXMgdGhlIGV2ZW50IGlzIG5vdCBmaXJlZCBhdCBjb25u
ZWN0aW9ucyB0aGF0IGhhdmUgY2xvc2VQZW5kaW5nIHNldC4KLSAgICAgICAgICAgICgqaXQpLT5v
blZlcnNpb25DaGFuZ2UobV9tZXRhZGF0YS52ZXJzaW9uLCAwLCBJbmRleGVkREI6Ok51bGxWZXJz
aW9uKTsKLSAgICAgICAgfQotICAgICAgICAvLyBGSVhNRTogT25seSBmaXJlIG9uQmxvY2tlZCBp
ZiB0aGVyZSBhcmUgb3BlbiBjb25uZWN0aW9ucyBhZnRlciB0aGUKLSAgICAgICAgLy8gVmVyc2lv
bkNoYW5nZUV2ZW50cyBhcmUgcmVjZWl2ZWQsIG5vdCBqdXN0IHNldCB1cCB0byBmaXJlLgotICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzExMzAKLSAg
ICAgICAgY2FsbGJhY2tzLT5vbkJsb2NrZWQobV9tZXRhZGF0YS52ZXJzaW9uKTsKLSAgICAgICAg
bV9wZW5kaW5nRGVsZXRlQ2FsbHMuYXBwZW5kKFBlbmRpbmdEZWxldGVDYWxsOjpjcmVhdGUoY2Fs
bGJhY2tzLnJlbGVhc2UoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGRlbGV0ZURh
dGFiYXNlRmluYWwoY2FsbGJhY2tzLnJlbGVhc2UoKSk7Ci19Ci0KLWJvb2wgSURCRGF0YWJhc2VC
YWNrZW5kTGV2ZWxEQjo6aXNEZWxldGVEYXRhYmFzZUJsb2NrZWQoKQotewotICAgIHJldHVybiBj
b25uZWN0aW9uQ291bnQoKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpk
ZWxldGVEYXRhYmFzZUZpbmFsKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17
Ci0gICAgQVNTRVJUKCFpc0RlbGV0ZURhdGFiYXNlQmxvY2tlZCgpKTsKLSAgICBBU1NFUlQobV9i
YWNraW5nU3RvcmUpOwotICAgIGlmICghbV9iYWNraW5nU3RvcmUtPmRlbGV0ZURhdGFiYXNlKG1f
bWV0YWRhdGEubmFtZSkpIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNl
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJu
YWwgZXJyb3IgZGVsZXRpbmcgZGF0YWJhc2UuIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIG1fbWV0YWRhdGEuaWQgPSBJbnZhbGlkSWQ7Ci0gICAgbV9tZXRhZGF0YS52ZXJzaW9uID0g
SURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uOwotICAgIG1fbWV0YWRhdGEub2JqZWN0
U3RvcmVzLmNsZWFyKCk7Ci0gICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKLX0KLQotdm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpjbG9zZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2Fs
bGJhY2tzPiBwcnBDYWxsYmFja3MpCi17Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tz
PiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VDYWxsYmFj
a3NTZXQuY29udGFpbnMoY2FsbGJhY2tzKSk7Ci0KLSAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0
LnJlbW92ZShjYWxsYmFja3MpOwotICAgIGlmIChtX3BlbmRpbmdTZWNvbmRIYWxmT3BlbiAmJiBt
X3BlbmRpbmdTZWNvbmRIYWxmT3Blbi0+ZGF0YWJhc2VDYWxsYmFja3MoKSA9PSBjYWxsYmFja3Mp
IHsKLSAgICAgICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4tPmNhbGxiYWNrcygpLT5vbkVycm9y
KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6QWJvcnRFcnJv
ciwgIlRoZSBjb25uZWN0aW9uIHdhcyBjbG9zZWQuIikpOwotICAgICAgICBtX3BlbmRpbmdTZWNv
bmRIYWxmT3Blbi5yZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgaWYgKGNvbm5lY3Rpb25Db3VudCgp
ID4gMSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gcHJvY2Vzc1BlbmRpbmdDYWxscyBhbGxv
d3MgdGhlIGluc3BlY3RvciB0byBwcm9jZXNzIGEgcGVuZGluZyBvcGVuIGNhbGwKLSAgICAvLyBh
bmQgY2FsbCBjbG9zZSwgcmVlbnRlcmluZyBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpjbG9z
ZS4gVGhlbiB0aGUKLSAgICAvLyBiYWNrZW5kIHdvdWxkIGJlIHJlbW92ZWQgYm90aCBieSB0aGUg
aW5zcGVjdG9yIGNsb3NpbmcgaXRzIGNvbm5lY3Rpb24sIGFuZAotICAgIC8vIGJ5IHRoZSBjb25u
ZWN0aW9uIHRoYXQgZmlyc3QgY2FsbGVkIGNsb3NlLgotICAgIC8vIFRvIGF2b2lkIHRoYXQgc2l0
dWF0aW9uLCBkb24ndCBwcm9jZWVkIGluIGNhc2Ugb2YgcmVlbnRyYW5jeS4KLSAgICBpZiAobV9j
bG9zaW5nQ29ubmVjdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIFRlbXBvcmFyeUNoYW5nZTxi
b29sPiBjbG9zaW5nQ29ubmVjdGlvbihtX2Nsb3NpbmdDb25uZWN0aW9uLCB0cnVlKTsKLSAgICBw
cm9jZXNzUGVuZGluZ0NhbGxzKCk7Ci0KLSAgICAvLyBGSVhNRTogQWRkIGEgdGVzdCBmb3IgdGhl
IG1fcGVuZGluZ09wZW5DYWxscyBjYXNlcyBiZWxvdy4KLSAgICBpZiAoIWNvbm5lY3Rpb25Db3Vu
dCgpICYmICFtX3BlbmRpbmdPcGVuQ2FsbHMuc2l6ZSgpICYmICFtX3BlbmRpbmdEZWxldGVDYWxs
cy5zaXplKCkpIHsKLSAgICAgICAgVHJhbnNhY3Rpb25NYXAgdHJhbnNhY3Rpb25zKG1fdHJhbnNh
Y3Rpb25zKTsKLSAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0
YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJD
b25uZWN0aW9uIGlzIGNsb3NpbmcuIik7Ci0gICAgICAgIGZvciAoVHJhbnNhY3Rpb25NYXA6OmNv
bnN0X2l0ZXJhdG9yOjpWYWx1ZXMgaXQgPSB0cmFuc2FjdGlvbnMudmFsdWVzKCkuYmVnaW4oKSwg
ZW5kID0gdHJhbnNhY3Rpb25zLnZhbHVlcygpLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgICAgICAoKml0KS0+YWJvcnQoZXJyb3IpOwotCi0gICAgICAgIEFTU0VSVChtX3RyYW5zYWN0
aW9ucy5pc0VtcHR5KCkpOwotCi0gICAgICAgIG1fYmFja2luZ1N0b3JlLmNsZWFyKCk7Ci0KLSAg
ICAgICAgLy8gVGhpcyBjaGVjayBzaG91bGQgb25seSBiZSBmYWxzZSBpbiB1bml0IHRlc3RzLgot
ICAgICAgICBBU1NFUlQobV9mYWN0b3J5KTsKLSAgICAgICAgaWYgKG1fZmFjdG9yeSkKLSAgICAg
ICAgICAgIG1fZmFjdG9yeS0+cmVtb3ZlSURCRGF0YWJhc2VCYWNrZW5kKG1faWRlbnRpZmllcik7
Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2xldmVsZGIvSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQi5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5MTIyYzMuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJEYXRhYmFzZUJhY2tlbmRM
ZXZlbERCLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQl9oCi0jZGVmaW5lIElEQkRhdGFiYXNlQmFja2VuZExl
dmVsREJfaAotCi0jaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJh
c2VDYWxsYmFja3MuaCIKLSNpbmNsdWRlICJJREJNZXRhZGF0YS5oIgotI2luY2x1ZGUgPHN0ZGlu
dC5oPgotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0j
aW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJCYWNraW5nU3RvcmVJbnRlcmZh
Y2U7Ci1jbGFzcyBJREJEYXRhYmFzZTsKLWNsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNl
OwotY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOwotY2xhc3MgSURCVHJhbnNh
Y3Rpb25Db29yZGluYXRvcjsKLQotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQiA6IHB1
YmxpYyBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UgewotcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZExldmVsREI+IGNyZWF0ZShjb25zdCBTdHJpbmcm
IG5hbWUsIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSosIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJm
YWNlKiwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKTsKLSAgICB2aXJ0dWFsIH5JREJE
YXRhYmFzZUJhY2tlbmRMZXZlbERCKCk7Ci0KLSAgICBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2Uq
IGJhY2tpbmdTdG9yZSgpIGNvbnN0OwotCi0gICAgc3RhdGljIGNvbnN0IGludDY0X3QgSW52YWxp
ZElkID0gMDsKLSAgICBpbnQ2NF90IGlkKCkgY29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YS5pZDsg
fQotICAgIHZvaWQgYWRkT2JqZWN0U3RvcmUoY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYs
IGludDY0X3QgbmV3TWF4T2JqZWN0U3RvcmVJZCk7Ci0gICAgdm9pZCByZW1vdmVPYmplY3RTdG9y
ZShpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwotICAgIHZvaWQgYWRkSW5kZXgoaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiwgaW50NjRfdCBuZXdNYXhJbmRleElk
KTsKLSAgICB2b2lkIHJlbW92ZUluZGV4KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkKTsKLQotICAgIHZvaWQgb3BlbkNvbm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgaW50NjRfdCB0cmFuc2FjdGlv
bklkLCBpbnQ2NF90IHZlcnNpb24pOwotICAgIHZvaWQgZGVsZXRlRGF0YWJhc2UoUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+KTsKLSAgICBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0
YSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGE7IH0KLQotICAgIC8vIElEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZQotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90
IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50KTsKLSAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQpOwotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUcmFuc2FjdGlvbihpbnQ2NF90IHRy
YW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBjb25zdCBWZWN0
b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCB1bnNpZ25lZCBzaG9ydCBtb2RlKTsKLSAgICB2
aXJ0dWFsIHZvaWQgY2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4pOwotCi0g
ICAgdmlydHVhbCB2b2lkIGNvbW1pdChpbnQ2NF90IHRyYW5zYWN0aW9uSWQpOwotICAgIHZpcnR1
YWwgdm9pZCBhYm9ydChpbnQ2NF90IHRyYW5zYWN0aW9uSWQpOwotICAgIHZpcnR1YWwgdm9pZCBh
Ym9ydChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4p
OwotCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZUluZGV4KGludDY0X3QgdHJhbnNhY3Rpb25JZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkpOwotICAg
IHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKTsKLQotICAgIElEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IqIHRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3RyYW5z
YWN0aW9uQ29vcmRpbmF0b3IuZ2V0KCk7IH0KLSAgICB2b2lkIHRyYW5zYWN0aW9uU3RhcnRlZChJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKLSAgICB2b2lkIHRyYW5zYWN0aW9uRmlu
aXNoZWQoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7Ci0gICAgdm9pZCB0cmFuc2Fj
dGlvbkZpbmlzaGVkQW5kQ29tcGxldGVGaXJlZChJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqKTsKLSAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWRBbmRBYm9ydEZpcmVkKElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSopOwotCi0gICAgdmlydHVhbCB2b2lkIGdldChpbnQ2NF90
IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiwgYm9vbCBrZXlPbmx5LCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4pIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBwdXQoaW50NjRfdCB0cmFuc2FjdGlv
bklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1
ZSwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+
JikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEluZGV4S2V5cyhpbnQ2NF90IHRyYW5z
YWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXk+IHBycFBy
aW1hcnlLZXksIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJ
bmRleEtleXM+JikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEluZGV4ZXNSZWFkeShp
bnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgVmVjdG9y
PGludDY0X3Q+JiBpbmRleElkcykgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIG9wZW5DdXJz
b3IoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0
aW9uLCBib29sIGtleU9ubHksIFRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pIE9W
RVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBjb3VudChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJh
bmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlUmFuZ2UoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pIE9W
RVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhcihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KSBPVkVSUklERTsK
LQotICAgIGNsYXNzIFZlcnNpb25DaGFuZ2VPcGVyYXRpb247Ci0gICAgY2xhc3MgVmVyc2lvbkNo
YW5nZUFib3J0T3BlcmF0aW9uOwotCi1wcml2YXRlOgotICAgIElEQkRhdGFiYXNlQmFja2VuZExl
dmVsREIoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqLCBJREJG
YWN0b3J5QmFja2VuZEludGVyZmFjZSosIGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllcik7
Ci0KLSAgICBib29sIG9wZW5JbnRlcm5hbCgpOwotICAgIHZvaWQgcnVuSW50VmVyc2lvbkNoYW5n
ZVRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUNhbGxiYWNrcz4sIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCByZXF1ZXN0ZWRW
ZXJzaW9uKTsKLSAgICBzaXplX3QgY29ubmVjdGlvbkNvdW50KCk7Ci0gICAgdm9pZCBwcm9jZXNz
UGVuZGluZ0NhbGxzKCk7Ci0KLSAgICBib29sIGlzRGVsZXRlRGF0YWJhc2VCbG9ja2VkKCk7Ci0g
ICAgdm9pZCBkZWxldGVEYXRhYmFzZUZpbmFsKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Ci0K
LSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlPiBtX2JhY2tpbmdTdG9yZTsKLSAg
ICBJREJEYXRhYmFzZU1ldGFkYXRhIG1fbWV0YWRhdGE7Ci0KLSAgICBTdHJpbmcgbV9pZGVudGlm
aWVyOwotICAgIC8vIFRoaXMgbWlnaHQgbm90IG5lZWQgdG8gYmUgYSBSZWZQdHIgc2luY2UgdGhl
IGZhY3RvcnkncyBsaWZldGltZSBpcyB0aGF0IG9mIHRoZSBwYWdlIGdyb3VwLCBidXQgaXQncyBi
ZXR0ZXIgdG8gYmUgY29uc2Vydml0aXZlIHRoYW4gc29ycnkuCi0gICAgUmVmUHRyPElEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlPiBtX2ZhY3Rvcnk7Ci0KLSAgICBPd25QdHI8SURCVHJhbnNhY3Rp
b25Db29yZGluYXRvcj4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yOwotICAgIFJlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbjsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqPiBUcmFuc2FjdGlvbk1hcDsKLSAgICBUcmFuc2FjdGlvbk1hcCBtX3RyYW5z
YWN0aW9uczsKLQotICAgIGNsYXNzIFBlbmRpbmdPcGVuQ2FsbCB7Ci0gICAgcHVibGljOgotICAg
ICAgICBzdGF0aWMgUGFzc093blB0cjxQZW5kaW5nT3BlbkNhbGw+IGNyZWF0ZShQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tz
PiBkYXRhYmFzZUNhbGxiYWNrcywgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IHZlcnNp
b24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGVuZGluZ09w
ZW5DYWxsKGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MsIHRyYW5zYWN0aW9uSWQsIHZlcnNp
b24pKTsKLSAgICAgICAgfQotICAgICAgICBJREJDYWxsYmFja3MqIGNhbGxiYWNrcygpIHsgcmV0
dXJuIG1fY2FsbGJhY2tzLmdldCgpOyB9Ci0gICAgICAgIElEQkRhdGFiYXNlQ2FsbGJhY2tzKiBk
YXRhYmFzZUNhbGxiYWNrcygpIHsgcmV0dXJuIG1fZGF0YWJhc2VDYWxsYmFja3MuZ2V0KCk7IH0K
LSAgICAgICAgaW50NjRfdCB2ZXJzaW9uKCkgeyByZXR1cm4gbV92ZXJzaW9uOyB9Ci0gICAgICAg
IGludDY0X3QgdHJhbnNhY3Rpb25JZCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25JZDsg
fQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUGVuZGluZ09wZW5DYWxsKFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRh
dGFiYXNlQ2FsbGJhY2tzLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3QgdmVyc2lvbikK
LSAgICAgICAgICAgIDogbV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAgICAgICAgICAgLCBtX2Rh
dGFiYXNlQ2FsbGJhY2tzKGRhdGFiYXNlQ2FsbGJhY2tzKQotICAgICAgICAgICAgLCBtX3ZlcnNp
b24odmVyc2lvbikKLSAgICAgICAgICAgICwgbV90cmFuc2FjdGlvbklkKHRyYW5zYWN0aW9uSWQp
Ci0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2Nh
bGxiYWNrczsKLSAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBtX2RhdGFiYXNl
Q2FsbGJhY2tzOwotICAgICAgICBpbnQ2NF90IG1fdmVyc2lvbjsKLSAgICAgICAgY29uc3QgaW50
NjRfdCBtX3RyYW5zYWN0aW9uSWQ7Ci0gICAgfTsKLQotICAgIERlcXVlPE93blB0cjxQZW5kaW5n
T3BlbkNhbGw+PiBtX3BlbmRpbmdPcGVuQ2FsbHM7Ci0gICAgT3duUHRyPFBlbmRpbmdPcGVuQ2Fs
bD4gbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW47Ci0KLSAgICBjbGFzcyBQZW5kaW5nRGVsZXRlQ2Fs
bCB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc093blB0cjxQZW5kaW5nRGVsZXRl
Q2FsbD4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGVuZGluZ0RlbGV0ZUNhbGwoY2Fs
bGJhY2tzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MoKSB7
IHJldHVybiBtX2NhbGxiYWNrcy5nZXQoKTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUGVu
ZGluZ0RlbGV0ZUNhbGwoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAg
ICAgICAgIDogbV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAg
ICAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci0gICAgfTsKLQotICAgIERl
cXVlPE93blB0cjxQZW5kaW5nRGVsZXRlQ2FsbD4+IG1fcGVuZGluZ0RlbGV0ZUNhbGxzOwotCi0g
ICAgdHlwZWRlZiBMaXN0SGFzaFNldDxSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+PiBEYXRh
YmFzZUNhbGxiYWNrc1NldDsKLSAgICBEYXRhYmFzZUNhbGxiYWNrc1NldCBtX2RhdGFiYXNlQ2Fs
bGJhY2tzU2V0OwotCi0gICAgYm9vbCBtX2Nsb3NpbmdDb25uZWN0aW9uOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0K
LSNlbmRpZiAvLyBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRmFjdG9yeUJhY2tlbmRMZXZl
bERCLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRmFj
dG9yeUJhY2tlbmRMZXZlbERCLmNwcAppbmRleCAwNGU0YzFiLi44NjQ5NjFkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkZhY3RvcnlCYWNr
ZW5kTGV2ZWxEQi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2
ZWxkYi9JREJGYWN0b3J5QmFja2VuZExldmVsREIuY3BwCkBAIC0zMSw3ICszMSw3IEBACiAKICNp
bmNsdWRlICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlTGV2ZWxE
Qi5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZExldmVsREIuaCIKKyNpbmNsdWRlICJJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24u
aCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmgiCiAjaW5jbHVkZSAi
SURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgpAQCAtMTE5LDcgKzExOSw3IEBAIHZvaWQgSURC
RmFjdG9yeUJhY2tlbmRMZXZlbERCOjpkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUs
IFBhc3NSZWZQdHI8SURCCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8SURC
RGF0YWJhc2VCYWNrZW5kTGV2ZWxEQj4gZGF0YWJhc2VCYWNrZW5kID0gSURCRGF0YWJhc2VCYWNr
ZW5kTGV2ZWxEQjo6Y3JlYXRlKG5hbWUsIGJhY2tpbmdTdG9yZS5nZXQoKSwgdGhpcywgdW5pcXVl
SWRlbnRpZmllcik7CisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNl
QmFja2VuZCA9IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZShuYW1lLCBiYWNraW5nU3Rv
cmUuZ2V0KCksIHRoaXMsIHVuaXF1ZUlkZW50aWZpZXIpOwogICAgIGlmIChkYXRhYmFzZUJhY2tl
bmQpIHsKICAgICAgICAgbV9kYXRhYmFzZUJhY2tlbmRNYXAuc2V0KHVuaXF1ZUlkZW50aWZpZXIs
IGRhdGFiYXNlQmFja2VuZC5nZXQoKSk7CiAgICAgICAgIGRhdGFiYXNlQmFja2VuZC0+ZGVsZXRl
RGF0YWJhc2UoY2FsbGJhY2tzKTsKQEAgLTE2NSw3ICsxNjUsNyBAQCB2b2lkIElEQkZhY3RvcnlC
YWNrZW5kTGV2ZWxEQjo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIGludDY0X3QgdmVyc2lvbiwg
aW50NjRfdAogICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4gPSBwcnBT
ZWN1cml0eU9yaWdpbjsKICAgICBjb25zdCBTdHJpbmcgdW5pcXVlSWRlbnRpZmllciA9IGNvbXB1
dGVVbmlxdWVJZGVudGlmaWVyKG5hbWUsIHNlY3VyaXR5T3JpZ2luLmdldCgpKTsKIAotICAgIFJl
ZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCPiBkYXRhYmFzZUJhY2tlbmQ7CisgICAgUmVm
UHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlQmFja2VuZDsKICAgICBJREJEYXRh
YmFzZUJhY2tlbmRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZUJhY2tlbmRNYXAuZmluZCh1
bmlxdWVJZGVudGlmaWVyKTsKICAgICBpZiAoaXQgPT0gbV9kYXRhYmFzZUJhY2tlbmRNYXAuZW5k
KCkpIHsKICAgICAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZUxldmVsREI+IGJhY2tpbmdTdG9y
ZSA9IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3RvcnkpOwpAQCAt
MTc0LDcgKzE3NCw3IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCOjpvcGVuKGNvbnN0
IFN0cmluZyYgbmFtZSwgaW50NjRfdCB2ZXJzaW9uLCBpbnQ2NF90CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAotICAgICAgICBkYXRhYmFzZUJhY2tlbmQgPSBJREJEYXRhYmFzZUJh
Y2tlbmRMZXZlbERCOjpjcmVhdGUobmFtZSwgYmFja2luZ1N0b3JlLmdldCgpLCB0aGlzLCB1bmlx
dWVJZGVudGlmaWVyKTsKKyAgICAgICAgZGF0YWJhc2VCYWNrZW5kID0gSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6Y3JlYXRlKG5hbWUsIGJhY2tpbmdTdG9yZS5nZXQoKSwgdGhpcywgdW5pcXVlSWRl
bnRpZmllcik7CiAgICAgICAgIGlmIChkYXRhYmFzZUJhY2tlbmQpCiAgICAgICAgICAgICBtX2Rh
dGFiYXNlQmFja2VuZE1hcC5zZXQodW5pcXVlSWRlbnRpZmllciwgZGF0YWJhc2VCYWNrZW5kLmdl
dCgpKTsKICAgICAgICAgZWxzZSB7CkBAIC0xODcsOSArMTg3LDEyIEBAIHZvaWQgSURCRmFjdG9y
eUJhY2tlbmRMZXZlbERCOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgaW50NjRfdCB2ZXJzaW9u
LCBpbnQ2NF90CiAgICAgZGF0YWJhc2VCYWNrZW5kLT5vcGVuQ29ubmVjdGlvbihjYWxsYmFja3Ms
IGRhdGFiYXNlQ2FsbGJhY2tzLCB0cmFuc2FjdGlvbklkLCB2ZXJzaW9uKTsKIH0KIAotUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IElEQkZhY3RvcnlCYWNrZW5kTGV2
ZWxEQjo6Y3JlYXRlVHJhbnNhY3Rpb25CYWNrZW5kKElEQkRhdGFiYXNlQmFja2VuZExldmVsREIq
IGJhY2tlbmQsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNh
bGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0
U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUpCitQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCOjpt
YXliZUNyZWF0ZVRyYW5zYWN0aW9uQmFja2VuZChJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2Uq
IGJhY2tlbmQsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNh
bGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0
U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUpCiB7Ci0gICAgcmV0dXJu
IElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6OmNyZWF0ZShiYWNrZW5kLCB0cmFuc2FjdGlv
bklkLCBkYXRhYmFzZUNhbGxiYWNrcywgb2JqZWN0U3RvcmVJZHMsIG1vZGUpOworICAgIGlmICgh
YmFja2VuZC0+aXNJREJEYXRhYmFzZUJhY2tlbmRJbXBsKCkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgcmV0dXJuIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6OmNyZWF0ZShzdGF0aWNf
Y2FzdDxJREJEYXRhYmFzZUJhY2tlbmRJbXBsKj4oYmFja2VuZCksIHRyYW5zYWN0aW9uSWQsIGRh
dGFiYXNlQ2FsbGJhY2tzLCBvYmplY3RTdG9yZUlkcywgbW9kZSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2xldmVsZGIvSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5oCmluZGV4IDdh
MzMwYTMuLjAzY2FhZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2xldmVsZGIvSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJGYWN0b3J5QmFja2VuZExldmVsREIuaApA
QCAtNDUsNyArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBET01TdHJpbmdMaXN0
OwogCiBjbGFzcyBJREJCYWNraW5nU3RvcmVMZXZlbERCOwotY2xhc3MgSURCRGF0YWJhc2VCYWNr
ZW5kTGV2ZWxEQjsKK2NsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw7CiAKIGNsYXNzIElEQkZh
Y3RvcnlCYWNrZW5kTGV2ZWxEQiA6IHB1YmxpYyBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSB7
CiBwdWJsaWM6CkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBj
b25zdCBTdHJpbmcmIGRhdGFEaXIpIE9WRVJSSURFIEZJTkFMOwogCi0gICAgdmlydHVhbCBQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gY3JlYXRlVHJhbnNhY3Rpb25C
YWNrZW5kKElEQkRhdGFiYXNlQmFja2VuZExldmVsREIqLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQs
IFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBjb25zdCBWZWN0b3I8aW50NjRfdD4m
LCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSkgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVh
bCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gbWF5YmVDcmVhdGVU
cmFuc2FjdGlvbkJhY2tlbmQoSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlKiwgaW50NjRfdCB0
cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29uc3QgVmVj
dG9yPGludDY0X3Q+JiwgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUpIE9WRVJSSURFIEZJTkFM
OwogCiAKIHByb3RlY3RlZDoKQEAgLTcxLDcgKzcxLDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmVMZXZlbERCPiBvcGVuQmFja2luZ1N0b3JlKFBh
c3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOwogCiBwcml2
YXRlOgotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tl
bmRMZXZlbERCPiA+IElEQkRhdGFiYXNlQmFja2VuZE1hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8
U3RyaW5nLCBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gPiBJREJEYXRhYmFzZUJhY2tl
bmRNYXA7CiAgICAgSURCRGF0YWJhc2VCYWNrZW5kTWFwIG1fZGF0YWJhc2VCYWNrZW5kTWFwOwog
CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgV2Vha1B0cjxJREJCYWNraW5nU3RvcmVMZXZl
bERCPiA+IElEQkJhY2tpbmdTdG9yZUxldmVsREJNYXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkxldmVsREJDb2RpbmcuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJMZXZlbERCQ29kaW5nLmNw
cAppbmRleCA0NjM3OWM1Li41NjBkMTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkxldmVsREJDb2RpbmcuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCTGV2ZWxEQkNvZGluZy5jcHAKQEAg
LTE1MjEsNyArMTUyMSw3IEBAIGludDY0X3QgSW5kZXhGcmVlTGlzdEtleTo6aW5kZXhJZCgpIGNv
bnN0CiB9CiAKIC8vIEZJWE1FOiBXZSBuZXZlciB1c2UgdGhpcyB0byBsb29rIHVwIG9iamVjdCBz
dG9yZSBpZHMsIGJlY2F1c2UgYSBtYXBwaW5nCi0vLyBpcyBrZXB0IGluIHRoZSBJREJEYXRhYmFz
ZUJhY2tlbmRMZXZlbERCLiBDYW4gdGhlIG1hcHBpbmcgYmVjb21lIHVucmVsaWFibGU/CisvLyBp
cyBrZXB0IGluIHRoZSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLiBDYW4gdGhlIG1hcHBpbmcgYmVj
b21lIHVucmVsaWFibGU/CiAvLyBDYW4gd2UgcmVtb3ZlIHRoaXM/CiBjb25zdCBjaGFyKiBPYmpl
Y3RTdG9yZU5hbWVzS2V5OjpkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxp
bWl0LCBPYmplY3RTdG9yZU5hbWVzS2V5KiByZXN1bHQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkxldmVsREJDb2RpbmcuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCTGV2ZWxEQkNvZGluZy5o
CmluZGV4IGFkMjJmMTEuLjI3OGQwZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCTGV2ZWxEQkNvZGluZy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCTGV2ZWxEQkNvZGluZy5oCkBAIC0yODEs
NyArMjgxLDcgQEAgcHJpdmF0ZToKIGNsYXNzIE9iamVjdFN0b3JlTmFtZXNLZXkgewogcHVibGlj
OgogICAgIC8vIEZJWE1FOiBXZSBuZXZlciB1c2UgdGhpcyB0byBsb29rIHVwIG9iamVjdCBzdG9y
ZSBpZHMsIGJlY2F1c2UgYSBtYXBwaW5nCi0gICAgLy8gaXMga2VwdCBpbiB0aGUgSURCRGF0YWJh
c2VCYWNrZW5kTGV2ZWxEQi4gQ2FuIHRoZSBtYXBwaW5nIGJlY29tZSB1bnJlbGlhYmxlPworICAg
IC8vIGlzIGtlcHQgaW4gdGhlIElEQkRhdGFiYXNlQmFja2VuZEltcGwuIENhbiB0aGUgbWFwcGlu
ZyBiZWNvbWUgdW5yZWxpYWJsZT8KICAgICAvLyBDYW4gd2UgcmVtb3ZlIHRoaXM/CiAgICAgc3Rh
dGljIGNvbnN0IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGlt
aXQsIE9iamVjdFN0b3JlTmFtZXNLZXkqIHJlc3VsdCk7CiAgICAgc3RhdGljIFZlY3RvcjxjaGFy
PiBlbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFt
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRi
L0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmNwcAppbmRl
eCAxYmE5Y2JiLi45YWEyNTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rpb25CYWNr
ZW5kTGV2ZWxEQi5jcHAKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgIklEQkJhY2tpbmdT
dG9yZUxldmVsREIuaCIKICNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5oIgotI2lu
Y2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZExldmVsREIuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3MuaCIKICNpbmNs
dWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCkBA
IC00MCw3ICs0MCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpj
cmVhdGUoSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQiogZGF0YWJhc2VCYWNrZW5kLCBpbnQ2NF90
IGlkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0IFZl
Y3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2Rl
IG1vZGUpCitQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI+IElEQlRyYW5z
YWN0aW9uQmFja2VuZExldmVsREI6OmNyZWF0ZShJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRh
YmFzZUJhY2tlbmQsIGludDY0X3QgaWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+
IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgSW5kZXhl
ZERCOjpUcmFuc2FjdGlvbk1vZGUgbW9kZSkKIHsKICAgICBIYXNoU2V0PGludDY0X3Q+IG9iamVj
dFN0b3JlSGFzaFNldDsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFN0b3JlSWRz
LnNpemUoKTsgKytpKQpAQCAtNDksNyArNDksNyBAQCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZExldmVsREI+IElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6OmNyZWF0ZShJRAog
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQihkYXRh
YmFzZUJhY2tlbmQsIGlkLCBjYWxsYmFja3MsIG9iamVjdFN0b3JlSGFzaFNldCwgbW9kZSkpOwog
fQogCi1JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRM
ZXZlbERCKElEQkRhdGFiYXNlQmFja2VuZExldmVsREIqIGRhdGFiYXNlQmFja2VuZCwgaW50NjRf
dCBpZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBI
YXNoU2V0PGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1v
ZGUgbW9kZSkKK0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6OklEQlRyYW5zYWN0aW9uQmFj
a2VuZExldmVsREIoSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2VCYWNrZW5kLCBpbnQ2
NF90IGlkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0
IEhhc2hTZXQ8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9u
TW9kZSBtb2RlKQogICAgIDogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKGlkKQogICAg
ICwgbV9vYmplY3RTdG9yZUlkcyhvYmplY3RTdG9yZUlkcykKICAgICAsIG1fbW9kZShtb2RlKQpA
QCAtMjgyLDcgKzI4Miw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6c2No
ZWR1bGVEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbihjb25zdCBJREJPCiAKIHZvaWQgSURCVHJh
bnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6c2NoZWR1bGVWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uKGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tz
PiBkYXRhYmFzZUNhbGxiYWNrcywgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEp
CiB7Ci0gICAgc2NoZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OlZlcnNpb25D
aGFuZ2VPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCB0cmFuc2FjdGlvbklkLCByZXF1ZXN0ZWRWZXJz
aW9uLCBjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzKSwgSURCRGF0YWJhc2VCYWNrZW5kTGV2
ZWxEQjo6VmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgU3RyaW5nOjpu
dW1iZXIobWV0YWRhdGEudmVyc2lvbiksIG1ldGFkYXRhLnZlcnNpb24pKTsKKyAgICBzY2hlZHVs
ZVRhc2soSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbjo6Y3Jl
YXRlKHRoaXMsIHRyYW5zYWN0aW9uSWQsIHJlcXVlc3RlZFZlcnNpb24sIGNhbGxiYWNrcywgZGF0
YWJhc2VDYWxsYmFja3MpLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlQWJv
cnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBTdHJpbmc6Om51bWJlcihtZXRhZGF0YS52ZXJzaW9u
KSwgbWV0YWRhdGEudmVyc2lvbikpOwogfQogCiB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZExl
dmVsREI6OnNjaGVkdWxlQ3JlYXRlSW5kZXhPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tl
bmRMZXZlbERCLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lE
QlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuaAppbmRleCA1ZTY1OWVhLi4wMjQ2MGEzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5z
YWN0aW9uQmFja2VuZExldmVsREIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuaApAQCAtMjksOCArMjks
OCBAQAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBVU0UoTEVWRUxEQikKIAogI2lu
Y2x1ZGUgIklEQkJhY2tpbmdTdG9yZUxldmVsREIuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgiCi0j
aW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQi5oIgogI2luY2x1ZGUgIklEQkRhdGFi
YXNlRXJyb3IuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCIK
ICNpbmNsdWRlICJUaW1lci5oIgpAQCAtNDYsNyArNDYsNyBAQCBjbGFzcyBJREJEYXRhYmFzZUNh
bGxiYWNrczsKIAogY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiBGSU5BTCA6IHB1
YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UgewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI+IGNyZWF0ZShJREJEYXRh
YmFzZUJhY2tlbmRMZXZlbERCKiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlk
cywgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI+IGNyZWF0ZShJREJEYXRhYmFzZUJhY2tlbmRJbXBs
KiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tz
PiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgSW5kZXhlZERCOjpUcmFu
c2FjdGlvbk1vZGUpOwogICAgIHZpcnR1YWwgfklEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIo
KTsKIAogICAgIHZpcnR1YWwgdm9pZCBjb21taXQoKSBPVkVSUklERSBGSU5BTDsKQEAgLTcwLDcg
KzcwLDcgQEAgcHVibGljOgogICAgIHZvaWQgZGlkQ29tcGxldGVQcmVlbXB0aXZlRXZlbnQoKSB7
IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMtLTsgQVNTRVJUKG1fcGVuZGluZ1ByZWVtcHRpdmVF
dmVudHMgPj0gMCk7IH0KICAgICB2aXJ0dWFsIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJh
bnNhY3Rpb24qIGJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCkgeyByZXR1cm4gJm1fdHJhbnNhY3Rp
b247IH0KIAotICAgIElEQkRhdGFiYXNlQmFja2VuZExldmVsREIqIGRhdGFiYXNlKCkgY29uc3Qg
eyByZXR1cm4gbV9kYXRhYmFzZS5nZXQoKTsgfQorICAgIElEQkRhdGFiYXNlQmFja2VuZEltcGwq
IGRhdGFiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZS5nZXQoKTsgfQogCiAgICAgdmly
dHVhbCB2b2lkIHNjaGVkdWxlQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oY29uc3QgSURCT2Jq
ZWN0U3RvcmVNZXRhZGF0YSYpIE9WRVJSSURFIEZJTkFMOwogICAgIHZpcnR1YWwgdm9pZCBzY2hl
ZHVsZURlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRh
dGEmKSBPVkVSUklERSBGSU5BTDsKQEAgLTg2LDcgKzg2LDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBzY2hlZHVsZUNsZWFyT3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+KSBPVkVSUklERSBGSU5BTDsKICAgICAKIHByaXZhdGU6Ci0g
ICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQihJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERC
KiwgaW50NjRfdCBpZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IEhh
c2hTZXQ8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9k
ZSk7CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQihJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsKiwgaW50NjRfdCBpZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0
IEhhc2hTZXQ8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9u
TW9kZSk7CiAKICAgICBlbnVtIFN0YXRlIHsKICAgICAgICAgVW51c2VkLCAvLyBDcmVhdGVkLCBi
dXQgbm8gdGFza3MgeWV0LgpAQCAtMTA5LDcgKzEwOSw3IEBAIHByaXZhdGU6CiAgICAgU3RhdGUg
bV9zdGF0ZTsKICAgICBib29sIG1fY29tbWl0UGVuZGluZzsKICAgICBSZWZQdHI8SURCRGF0YWJh
c2VDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwotICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRM
ZXZlbERCPiBtX2RhdGFiYXNlOworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBt
X2RhdGFiYXNlOwogCiAgICAgdHlwZWRlZiBEZXF1ZTxPd25QdHI8T3BlcmF0aW9uPj4gVGFza1F1
ZXVlOwogICAgIFRhc2tRdWV1ZSBtX3Rhc2tRdWV1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxE
Qk9wZXJhdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxk
Yi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCT3BlcmF0aW9ucy5jcHAKaW5kZXggZGVlYjYy
Ny4uZGFkNjUwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
bGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCT3BlcmF0aW9ucy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRMZXZlbERCT3BlcmF0aW9ucy5jcHAKQEAgLTM0MCwxMCArMzQwLDEwIEBAIHZvaWQgRGVs
ZXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0oKQogICAgIH0KIH0KIAotdm9pZCBJREJE
YXRhYmFzZUJhY2tlbmRMZXZlbERCOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjpwZXJmb3JtKCkK
K3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbjo6cGVy
Zm9ybSgpCiB7CiAgICAgTE9HKFN0b3JhZ2VBUEksICJWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uIik7
Ci0gICAgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQiogZGF0YWJhc2UgPSBtX3RyYW5zYWN0aW9u
LT5kYXRhYmFzZSgpOworICAgIElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNlID0gbV90
cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBpbnQ2NF90IGRhdGFiYXNlSWQgPSBkYXRhYmFz
ZS0+aWQoKTsKICAgICB1aW50NjRfdCBvbGRWZXJzaW9uID0gZGF0YWJhc2UtPm1fbWV0YWRhdGEu
dmVyc2lvbjsKIApAQCAtMzczLDcgKzM3Myw3IEBAIHZvaWQgRGVsZXRlT2JqZWN0U3RvcmVBYm9y
dE9wZXJhdGlvbjo6cGVyZm9ybSgpCiAgICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS0+YWRk
T2JqZWN0U3RvcmUobV9vYmplY3RTdG9yZU1ldGFkYXRhLCBJREJPYmplY3RTdG9yZU1ldGFkYXRh
OjpJbnZhbGlkSWQpOwogfQogCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OlZlcnNp
b25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSgpCit2b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSgpCiB7CiAgICAgTE9H
KFN0b3JhZ2VBUEksICJWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRpb24iKTsKICAgICBtX3RyYW5z
YWN0aW9uLT5kYXRhYmFzZSgpLT5tX21ldGFkYXRhLnZlcnNpb24gPSBtX3ByZXZpb3VzSW50VmVy
c2lvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVs
ZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQk9wZXJhdGlvbnMuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxE
Qk9wZXJhdGlvbnMuaAppbmRleCBiY2Y3MmZkLi5jOWQ4OWMxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZExl
dmVsREJPcGVyYXRpb25zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
bGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCT3BlcmF0aW9ucy5oCkBAIC03Miw3
ICs3Miw3IEBAIHByaXZhdGU6CiAgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtX29i
amVjdFN0b3JlTWV0YWRhdGE7CiB9OwogCi1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERC
OjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZExl
dmVsREI6Ok9wZXJhdGlvbiB7CitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9u
Q2hhbmdlT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6Ok9w
ZXJhdGlvbiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kTGV2ZWxEQjo6T3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2
ZWxEQiogdHJhbnNhY3Rpb24sIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCB2ZXJzaW9u
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcykKICAgICB7CkBAIC0xMzIsNyArMTMyLDcg
QEAgcHJpdmF0ZToKICAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1fb2JqZWN0U3RvcmVNZXRh
ZGF0YTsKIH07CiAKLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OlZlcnNpb25DaGFu
Z2VBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpP
cGVyYXRpb24geworY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5nZUFi
b3J0T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6Ok9wZXJh
dGlvbiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kTGV2ZWxEQjo6T3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxE
QiogdHJhbnNhY3Rpb24sIGNvbnN0IFN0cmluZyYgcHJldmlvdXNWZXJzaW9uLCBpbnQ2NF90IHBy
ZXZpb3VzSW50VmVyc2lvbikKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hw
cm9qL1dlYkNvcmUudmN4cHJvagppbmRleCBjZTQzNmE3Li5kNWYwNjY5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKQEAgLTY1NDUsNyArNjU0
NSw2IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJD
dXJzb3IuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xpbmRleGVk
ZGJcbGV2ZWxkYlxJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJEYXRhYmFzZS5jcHAiIC8+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxsZXZlbGRiXElEQkRhdGFi
YXNlQmFja2VuZExldmVsREIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9k
dWxlc1xpbmRleGVkZGJcSURCRmFjdG9yeS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxsZXZlbGRiXElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJG
YWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAiIC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKaW5kZXggODEyNzQ5ZS4u
NDhiMzUwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNv
cmUudmN4cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9X
ZWJDb3JlLnZjeHByb2ouZmlsdGVycwpAQCAtNjg4Niw5ICs2ODg2LDYgQEAKICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXGxldmVsZGJcSURCQ3Vyc29yQmFja2Vu
ZExldmVsREIuY3BwIj4KICAgICAgIDxGaWx0ZXI+TW9kdWxlc1xpbmRleGVkZGJcbGV2ZWxkYjwv
RmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9k
dWxlc1xpbmRleGVkZGJcbGV2ZWxkYlxJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmNwcCI+Ci0g
ICAgICA8RmlsdGVyPk1vZHVsZXNcaW5kZXhlZGRiXGxldmVsZGI8L0ZpbHRlcj4KLSAgICA8L0Ns
Q29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXGxl
dmVsZGJcSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmNwcCI+CiAgICAgICA8RmlsdGVyPk1vZHVs
ZXNcaW5kZXhlZGRiXGxldmVsZGI8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4MzQ2
ZTE0Li4xOGI5MDkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC0xNjQxLDYgKzE2NDEsOCBAQAogCQk1MTBENEEzODEwMzE2NUVF
MDA0OUVBNTQgLyogU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTBENEEzMjEwMzE2NUVFMDA0OUVBNTQgLyog
U29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50LmggKi87IH07CiAJCTUxMEVDNDJBMTgxNzBDNzUwMEM4
OTdENiAvKiBJREJJbmRleFdyaXRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTBFQzQyODE4MTcwQzc1MDBDODk3RDYgLyogSURCSW5kZXhXcml0
ZXIuY3BwICovOyB9OwogCQk1MTBFQzQyQjE4MTcwQzc1MDBDODk3RDYgLyogSURCSW5kZXhXcml0
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEVD
NDI5MTgxNzBDNzUwMEM4OTdENiAvKiBJREJJbmRleFdyaXRlci5oICovOyB9OworCQk1MTBFQzQ0
RjE4MTc3OUQ1MDBDODk3RDYgLyogSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTBFQzQ0RDE4MTc3OUQ1MDBD
ODk3RDYgLyogSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgKi87IH07CisJCTUxMEVDNDUwMTgx
Nzc5RDUwMEM4OTdENiAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTBFQzQ0RTE4MTc3OUQ1MDBDODk3RDYg
LyogSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTUxMTI5MzVGM0Q1NEI0QjUyRkFGOTczRiAvKiBJbnNwZWN0
b3JIZWFwUHJvZmlsZXJBZ2VudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTEyOTM2MTNENkRCNEI1MkZBRjk3M0YgLyogSW5zcGVjdG9ySGVhcFBy
b2ZpbGVyQWdlbnQuY3BwICovOyB9OwogCQk1MTEyOTM2MDNENjBCNEI1MkZBRjk3M0YgLyogSW5z
cGVjdG9ySGVhcFByb2ZpbGVyQWdlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxMTI5MzYyM0Q4NUI0QjUyRkFGOTczRiAvKiBJbnNwZWN0b3JIZWFw
UHJvZmlsZXJBZ2VudC5oICovOyB9OwogCQk1MTFFRjJDMDE3RjBGRDM1MDBFNEZBMTYgLyogSlNJ
REJBbnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTExRUYyQTgxN0YwRkM0ODAwRTRGQTE2IC8qIEpTSURCQW55LmNwcCAqLzsgfTsKQEAgLTgyMTgs
NiArODIyMCw4IEBACiAJCTUxMEQ0QTMyMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1I
YW5kbGVDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU29ja2V0U3Ry
ZWFtSGFuZGxlQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMEVDNDI4
MTgxNzBDNzUwMEM4OTdENiAvKiBJREJJbmRleFdyaXRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBJREJJbmRleFdyaXRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUxMEVDNDI5MTgxNzBDNzUwMEM4OTdENiAvKiBJREJJbmRleFdyaXRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJJbmRleFdyaXRlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTBFQzQ0RDE4MTc3OUQ1MDBDODk3RDYgLyogSURC
RGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTEwRUM0NEUxODE3NzlENTAwQzg5N0Q2IC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCRGF0YWJhc2VCYWNrZW5kSW1w
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTEyOTM2MTNENkRCNEI1MkZBRjk3
M0YgLyogSW5zcGVjdG9ySGVhcFByb2ZpbGVyQWdlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9ySGVhcFByb2ZpbGVyQWdlbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MTEyOTM2MjNEODVCNEI1MkZBRjk3M0YgLyogSW5zcGVj
dG9ySGVhcFByb2ZpbGVyQWdlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW5zcGVjdG9ySGVhcFByb2ZpbGVyQWdlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTExRUYyQTgxN0YwRkM0ODAwRTRGQTE2IC8qIEpTSURCQW55LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTSURCQW55LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NzE1
LDYgKzE2NzE5LDggQEAKIAkJCQk1MUQ3MTk3QzE4MTEwNkRGMDAxNkRDNTEgLyogSURCRGF0YWJh
c2UuY3BwICovLAogCQkJCTUxRDcxOTdEMTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZS5o
ICovLAogCQkJCTUxRDcxOTdFMTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZS5pZGwgKi8s
CisJCQkJNTEwRUM0NEQxODE3NzlENTAwQzg5N0Q2IC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwu
Y3BwICovLAorCQkJCTUxMEVDNDRFMTgxNzc5RDUwMEM4OTdENiAvKiBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsLmggKi8sCiAJCQkJNTFENzE5N0YxODExMDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNl
QmFja2VuZEludGVyZmFjZS5oICovLAogCQkJCTUxRDcxOTgwMTgxMTA2REYwMDE2REM1MSAvKiBJ
REJEYXRhYmFzZUNhbGxiYWNrcy5oICovLAogCQkJCTUxRDcxOTgxMTgxMTA2REYwMDE2REM1MSAv
KiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwICovLApAQCAtMjM0NjksNiArMjM0NzUsNyBA
QAogCQkJCTkzNUM0NzYzMDlBQzRDRTYwMEE2QUFCNCAvKiBNb3VzZUV2ZW50V2l0aEhpdFRlc3RS
ZXN1bHRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTAzMUI0ODBBNDRFRkM3MDBGOTkyRTAgLyog
TW91c2VSZWxhdGVkRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5REZDMDk5RTY0OTIw
MDU2RTU4MSAvKiBNb3ZlU2VsZWN0aW9uQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTEw
RUM0NTAxODE3NzlENTAwQzg5N0Q2IC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUZEQjE3MDA2MTRBMkJBQjIwMEEyQjVEOSAvKiBNdWx0aUNoYW5uZWxSZXNh
bXBsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUM2RjA5MDBBMTQzMjdCNjEwMDY4NTg0OSAvKiBN
dXRhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTAzMUI0QTBBNDRFRkM3MDBG
OTkyRTAgLyogTXV0YXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzYwNSw2ICsyNzYx
Miw3IEBACiAJCQkJMDc4RTA5MTExN0QxNENFRTAwNDIwQUExIC8qIFJUQ1ZvaWRSZXF1ZXN0SW1w
bC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OTgzOTE1ODBGMUU3NzY5MDBDMjM3ODIgLyogV2Vi
S2l0Q1NTTWF0cml4LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEyNEJGNzdDMTVDQzNCQUYwMDMx
OTFGMiAvKiBXZWJLaXRDU1NNaXhGdW5jdGlvblZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTUxMEVDNDRGMTgxNzc5RDUwMEM4OTdENiAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCThBQTYxQ0ZGMTQ0RDU5NUIwMEYzNzM1MCAvKiBXZWJLaXRDU1NS
ZWdpb25SdWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUwMzhCQzA3MTQ3MTFDREIwMDk1RTBE
MSAvKiBXZWJLaXRDU1NTaGFkZXJWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNTYyRjk0
NjE1NzNFQ0VCMDAzMUNBMTYgLyogV2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZS5jcHAgaW4gU291
cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwppbmRleCA5ODg3MjViLi40MDgzOGFhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMTMtMTAtMjIgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29t
PgorCisgICAgICAgIE1ha2UgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQi5jcHAgYmUgY3Jvc3Mg
cGxhdGZvcm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEyMzAyNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQkZhY3RvcnlCYWNrZW5kLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViSURCRmFjdG9yeUJhY2tlbmQ6Om1heWJlQ3JlYXRlVHJh
bnNhY3Rpb25CYWNrZW5kKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVk
REIvV2ViSURCRmFjdG9yeUJhY2tlbmQuaDoKKwogMjAxMy0xMC0yMiAgUnl1YW4gQ2hvaSAgPHJ5
dWFuLmNob2lAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXggYXR0
ZW1wdCBvbiBFRkwgcG9ydCBhZnRlciByMTU3ODQyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQkZhY3RvcnlCYWNrZW5kLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJG
YWN0b3J5QmFja2VuZC5jcHAKaW5kZXggMTM3Y2FjYy4uYTNlOGVlMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQkZhY3RvcnlC
YWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRl
eGVkREIvV2ViSURCRmFjdG9yeUJhY2tlbmQuY3BwCkBAIC0xMDAsNyArMTAwLDcgQEAgdm9pZCBX
ZWJJREJGYWN0b3J5QmFja2VuZDo6cmVtb3ZlSURCRGF0YWJhc2VCYWNrZW5kKGNvbnN0IFN0cmlu
ZyYpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2U+IFdlYklEQkZhY3RvcnlCYWNrZW5kOjpjcmVhdGVUcmFuc2FjdGlv
bkJhY2tlbmQoSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQiosIGludDY0X3QgdHJhbnNhY3Rpb25J
ZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90
PiYsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlKQorUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2U+IFdlYklEQkZhY3RvcnlCYWNrZW5kOjptYXliZUNyZWF0ZVRyYW5z
YWN0aW9uQmFja2VuZChJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UqLCBpbnQ2NF90IHRyYW5z
YWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBjb25zdCBWZWN0b3I8
aW50NjRfdD4mLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSkKIHsKICAgICBub3RJbXBsZW1l
bnRlZCgpOwogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQkZhY3RvcnlCYWNrZW5kLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCRmFjdG9yeUJhY2tl
bmQuaAppbmRleCA3ZTI1MmM4Li5kZDUwNDYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCRmFjdG9yeUJhY2tlbmQuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCRmFj
dG9yeUJhY2tlbmQuaApAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlSURCRGF0YWJhc2VCYWNrZW5kKGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmll
cikgT1ZFUlJJREUgRklOQUw7CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBjcmVhdGVUcmFuc2FjdGlvbkJhY2tlbmQoV2Vi
Q29yZTo6SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQiosIGludDY0X3QgdHJhbnNhY3Rpb25JZCwg
UGFzc1JlZlB0cjxXZWJDb3JlOjpJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IFZlY3Rvcjxp
bnQ2NF90PiYsIFdlYkNvcmU6OkluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlKTsKKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBt
YXliZUNyZWF0ZVRyYW5zYWN0aW9uQmFja2VuZChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJ
bnRlcmZhY2UqLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURC
RGF0YWJhc2VDYWxsYmFja3M+LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mLCBXZWJDb3JlOjpJbmRl
eGVkREI6OlRyYW5zYWN0aW9uTW9kZSk7CiAKIHByaXZhdGU6CiAgICAgV2ViSURCRmFjdG9yeUJh
Y2tlbmQoKTsK
</data>
<flag name="review"
          id="237548"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
      

    </bug>

</bugzilla>