<?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>148662</bug_id>
          
          <creation_ts>2015-08-31 17:51:29 -0700</creation_ts>
          <short_desc>[ES6] Tail call fast path should efficiently reuse the frame&apos;s stack space</short_desc>
          <delta_ts>2015-09-18 16:51:54 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>148334</dependson>
    
    <dependson>148335</dependson>
    
    <dependson>148337</dependson>
    
    <dependson>148448</dependson>
    
    <dependson>148661</dependson>
          <blocked>148663</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Basile Clement">basile_clement</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>msaboff</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1122393</commentid>
    <comment_count>0</comment_count>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-08-31 17:51:29 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1123655</commentid>
    <comment_count>1</comment_count>
      <attachid>260626</attachid>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-09-04 15:00:28 -0700</bug_when>
    <thetext>Created attachment 260626
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126542</commentid>
    <comment_count>2</comment_count>
      <attachid>261344</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-09-16 18:06:45 -0700</bug_when>
    <thetext>Created attachment 261344
Rebased patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126544</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-16 18:09:47 -0700</bug_when>
    <thetext>Attachment 261344 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/CallFrameShuffler.cpp:42:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/CallFrameShuffler.h:604:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/CallFrameShuffler.h:627:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/CallFrameShuffler.h:648:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 4 in 19 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>1126587</commentid>
    <comment_count>4</comment_count>
      <attachid>261360</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-09-16 20:35:49 -0700</bug_when>
    <thetext>Created attachment 261360
Patch with fix for 32 bit debug build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126589</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-16 20:38:06 -0700</bug_when>
    <thetext>Attachment 261360 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/CallFrameShuffler.cpp:42:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/CallFrameShuffler.h:604:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/CallFrameShuffler.h:627:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/CallFrameShuffler.h:648:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 4 in 19 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>1126612</commentid>
    <comment_count>6</comment_count>
      <attachid>261368</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-09-16 22:31:28 -0700</bug_when>
    <thetext>Created attachment 261368
Patch with speculative build fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126615</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-16 22:33:04 -0700</bug_when>
    <thetext>Attachment 261368 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/CallFrameShuffler.cpp:42:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/CallFrameShuffler.h:604:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/CallFrameShuffler.h:627:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/CallFrameShuffler.h:648:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 4 in 20 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>1127162</commentid>
    <comment_count>8</comment_count>
      <attachid>261368</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-09-18 11:13:29 -0700</bug_when>
    <thetext>Comment on attachment 261368
Patch with speculative build fixes

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

r=me

&gt; Source/JavaScriptCore/jit/CallFrameShuffler.h:45
&gt; +class CachedRecovery {

Please move this class to its own file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127263</commentid>
    <comment_count>9</comment_count>
      <attachid>261533</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-09-18 15:51:25 -0700</bug_when>
    <thetext>Created attachment 261533
Patch for Landing (and EWS testing)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127264</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-18 15:53:11 -0700</bug_when>
    <thetext>Attachment 261533 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/CachedRecovery.cpp:34:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/jit/CallFrameShuffler.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/jit/CallFrameShuffler.cpp:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/CallFrameShuffler.h:507:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/CallFrameShuffler.h:530:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/CallFrameShuffler.h:551:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 6 in 22 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>1127299</commentid>
    <comment_count>11</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-09-18 16:51:54 -0700</bug_when>
    <thetext>Committed r189999: &lt;http://trac.webkit.org/changeset/189999&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260626</attachid>
            <date>2015-09-04 15:00:28 -0700</date>
            <delta_ts>2015-09-16 18:06:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-148662-20150904150027.patch</filename>
            <type>text/plain</type>
            <size>125050</size>
            <attacher name="Basile Clement">basile_clement</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg3NjE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
NDEyOGQwYTcyMTk1ZmUwMjAxOWIyNzNlOTM2OTk3ODdlZGQ0NTZmLi5jYzU5MWY5ZGJiNWEzY2Fl
OTY4ZWEyYTQ3ZTZmMWIwZWEyZTRjODg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSwxMjkgQEAKIDIwMTUtMDktMDQgIEJhc2lsZSBDbGVtZW50ICA8YmFzaWxlX2NsZW1lbnRA
YXBwbGUuY29tPgogCisgICAgICAgIFtFUzZdIFRhaWwgY2FsbCBmYXN0IHBhdGggc2hvdWxkIGVm
ZmljaWVudGx5IHJldXNlIHRoZSBmcmFtZSdzIHN0YWNrIHNwYWNlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg2NjIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGludHJvZHVjZXMgYSBuZXcgY2xh
c3MgKENhbGxGcmFtZVNodWZmbGVyKSB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvcgorICAgICAgICBl
ZmZpY2llbnRseSBidWlsZGluZyB0aGUgbmV3IGZyYW1lcyB3aGVuIHBlcmZvcm1pbmcgYSB0YWls
IGNhbGwuIEluCisgICAgICAgIG9yZGVyIGZvciBSZXBhdGNoIHRvIGtub3cgYWJvdXQgdGhlIHBv
c2l0aW9uIG9mIGFyZ3VtZW50cyBvbiB0aGUKKyAgICAgICAgc3RhY2svcmVnaXN0ZXJzIChlLmcu
IGZvciBwb2x5bW9ycGhpYyBjYWxsIGlubGluZSBjYWNoZXMpLCB3ZSBzdG9yZSBhCisgICAgICAg
IENhbGxGcmFtZVNodWZmbGVEYXRhIGluIHRoZSBDYWxsTGlua0luZm8uIE90aGVyd2lzZSwgdGhl
IEpJVCBhbmQgREZHCisgICAgICAgIGNvbXBpbGVyIGFyZSBub3cgdXNpbmcgQ2FsbEZyYW1lU2h1
ZmZsZXIgaW5zdGVhZCBvZgorICAgICAgICBDQ2FsbEhlbHBlcnM6OnByZXBhcmVGb3JUYWlsQ2Fs
bFNsb3coKSB0byBidWlsZCB0aGUgZnJhbWUgZm9yIGEgdGFpbAorICAgICAgICBjYWxsLgorCisg
ICAgICAgIFdoZW4gdGFraW5nIGEgc2xvdyBwYXRoLCB3ZSBzdGlsbCBidWlsZCB0aGUgZnJhbWUg
YXMgaWYgZG9pbmcgYSByZWd1bGFyCisgICAgICAgIGNhbGwsIGJlY2F1c2Ugd2UgY291bGQgdGhy
b3cgYW4gZXhjZXB0aW9uIGFuZCBuZWVkIHRoZSBjYWxsZXIncyBmcmFtZQorICAgICAgICBhdCB0
aGF0IHBvaW50LiBUaGlzIG1lYW5zIHRoYXQgZm9yIHZpcnR1YWwgY2FsbHMsIHdlIGRvbid0IGJl
bmVmaXQgZnJvbQorICAgICAgICB0aGUgZWZmaWNpZW50IGZyYW1lIG1vdmUgZm9yIG5vdy4KKwor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hw
cm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBKYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFzc2VtYmxlci9BYm9y
dFJlYXNvbi5oOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5oOgorICAgICAgICAo
SlNDOjpDYWxsTGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEpOgorICAgICAgICAoSlNDOjpD
YWxsTGlua0luZm86OmZyYW1lU2h1ZmZsZURhdGEpOgorICAgICAgICAqIGRmZy9ERkdHZW5lcmF0
aW9uSW5mby5oOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjpyZWNvdmVyeSk6
CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcDogQWRkZWQuCisgICAgICAg
IChKU0M6OkNhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMpOgor
ICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKiBq
aXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1l
U2h1ZmZsZXI6OkNhbGxGcmFtZVNodWZmbGVyKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1
ZmZsZXI6OmR1bXApOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6Z2V0Q2FjaGVk
UmVjb3ZlcnkpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c2V0Q2FjaGVkUmVj
b3ZlcnkpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c3BpbGwpOgorICAgICAg
ICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6ZW1pdERlbHRhQ2hlY2spOgorICAgICAgICAoSlND
OjpDYWxsRnJhbWVTaHVmZmxlcjo6cHJlcGFyZUZvclNsb3dQYXRoKToKKyAgICAgICAgKEpTQzo6
Q2FsbEZyYW1lU2h1ZmZsZXI6OnByZXBhcmVGb3JUYWlsQ2FsbCk6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZVNodWZmbGVyOjp0cnlXcml0ZXMpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVm
Zmxlcjo6cGVyZm9ybVNhZmVXcml0ZXMpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxl
cjo6cHJlcGFyZUFueSk6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVyLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpDYWNoZWRSZWNvdmVyeTo6Q2FjaGVkUmVjb3ZlcnkpOgorICAgICAg
ICAoSlNDOjpDYWNoZWRSZWNvdmVyeTo6dGFyZ2V0cyk6CisgICAgICAgIChKU0M6OkNhY2hlZFJl
Y292ZXJ5OjphZGRUYXJnZXQpOgorICAgICAgICAoSlNDOjpDYWNoZWRSZWNvdmVyeTo6cmVtb3Zl
VGFyZ2V0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVjb3Zlcnk6OmNsZWFyVGFyZ2V0cyk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5OjpzZXRXYW50ZWRKU1ZhbHVlUmVncyk6CisgICAg
ICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5OjpzZXRXYW50ZWRGUFIpOgorICAgICAgICAoSlNDOjpD
YWNoZWRSZWNvdmVyeTo6Ym94aW5nUmVxdWlyZXNHUFIpOgorICAgICAgICAoSlNDOjpDYWNoZWRS
ZWNvdmVyeTo6Ym94aW5nUmVxdWlyZXNGUFIpOgorICAgICAgICAoSlNDOjpDYWNoZWRSZWNvdmVy
eTo6cmVjb3ZlcnkpOgorICAgICAgICAoSlNDOjpDYWNoZWRSZWNvdmVyeTo6c2V0UmVjb3Zlcnkp
OgorICAgICAgICAoSlNDOjpDYWNoZWRSZWNvdmVyeTo6d2FudGVkSlNWYWx1ZVJlZ3MpOgorICAg
ICAgICAoSlNDOjpDYWNoZWRSZWNvdmVyeTo6d2FudGVkRlBSKToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lU2h1ZmZsZXI6OmxvY2tHUFIpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxl
cjo6YWNxdWlyZUdQUik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpyZWxlYXNl
R1BSKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OnNuYXBzaG90KToKKyAgICAg
ICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OnNldENhbGxlZUpTVmFsdWVSZWdzKToKKyAgICAg
ICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmFzc3VtZUNhbGxlZUlzQ2VsbCk6CisgICAgICAg
IChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpjYW5Cb3gpOgorICAgICAgICAoSlNDOjpDYWxsRnJh
bWVTaHVmZmxlcjo6ZW5zdXJlQm94KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6
OmVuc3VyZUxvYWQpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6Y2FuTG9hZEFu
ZEJveCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjp1cGRhdGVSZWNvdmVyeSk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpjbGVhckNhY2hlZFJlY292ZXJ5KToK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmFkZENhY2hlZFJlY292ZXJ5KToKKyAg
ICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6Om51bUxvY2Fscyk6CisgICAgICAgIChKU0M6
OkNhbGxGcmFtZVNodWZmbGVyOjpnZXRPbGQpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVm
Zmxlcjo6c2V0T2xkKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmZpcnN0T2xk
KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6Omxhc3RPbGQpOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6aXNWYWxpZE9sZCk6CisgICAgICAgIChKU0M6OkNhbGxG
cmFtZVNodWZmbGVyOjphcmdDb3VudCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVy
OjpnZXROZXcpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c2V0TmV3KToKKyAg
ICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmFkZE5ldyk6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZVNodWZmbGVyOjpmaXJzdE5ldyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZm
bGVyOjpsYXN0TmV3KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmlzVmFsaWRO
ZXcpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6bmV3QXNPbGQpOgorICAgICAg
ICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6Z2V0RnJlZVJlZ2lzdGVyKToKKyAgICAgICAgKEpT
Qzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmdldEZyZWVHUFIpOgorICAgICAgICAoSlNDOjpDYWxsRnJh
bWVTaHVmZmxlcjo6Z2V0RnJlZUZQUik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVy
OjpoYXNGcmVlUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6ZW5z
dXJlUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6ZW5zdXJlR1BS
KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmVuc3VyZUZQUik6CisgICAgICAg
IChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjphZGRyZXNzRm9yT2xkKToKKyAgICAgICAgKEpTQzo6
Q2FsbEZyYW1lU2h1ZmZsZXI6OmlzVW5kZWNpZGVkKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1l
U2h1ZmZsZXI6OmlzU2xvd1BhdGgpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6
YWRkcmVzc0Zvck5ldyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpkYW5nZXJG
cm9udGllcik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjppc0Rhbmdlck5ldyk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjp1cGRhdGVEYW5nZXJGcm9udGllcik6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpoYXNPbmx5U2FmZVdyaXRlcyk6Cisg
ICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVyMzJfNjQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXRTdG9yZSk6CisgICAgICAgIChKU0M6OkNhbGxG
cmFtZVNodWZmbGVyOjplbWl0Qm94KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6
OmVtaXRMb2FkKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmNhbkxvYWQpOgor
ICAgICAgICAoSlNDOjpDYWNoZWRSZWNvdmVyeTo6bG9hZHNJbnRvRlBSKToKKyAgICAgICAgKEpT
Qzo6Q2FjaGVkUmVjb3Zlcnk6OmxvYWRzSW50b0dQUik6CisgICAgICAgIChKU0M6OkNhbGxGcmFt
ZVNodWZmbGVyOjplbWl0RGlzcGxhY2UpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxl
cjY0LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjplbWl0U3Rv
cmUpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6ZW1pdEJveCk6CisgICAgICAg
IChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjplbWl0TG9hZCk6CisgICAgICAgIChKU0M6OkNhbGxG
cmFtZVNodWZmbGVyOjpjYW5Mb2FkKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVjb3Zlcnk6Omxv
YWRzSW50b0ZQUik6CisgICAgICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5Ojpsb2Fkc0ludG9HUFIp
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6ZW1pdERpc3BsYWNlKToKKyAgICAg
ICAgKiBqaXQvSklUQ2FsbC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6
CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAgKiBq
aXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OmxpbmtQb2x5bW9ycGhpY0NhbGwpOgorCisy
MDE1LTA5LTA0ICBCYXNpbGUgQ2xlbWVudCAgPGJhc2lsZV9jbGVtZW50QGFwcGxlLmNvbT4KKwog
ICAgICAgICBbRVM2XSBJbXBsZW1lbnQgdGFpbCBjYWxscyBpbiB0aGUgTExJbnQgYW5kIEJhc2Vs
aW5lIEpJVAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQ4NjYxCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBhZWRkZGI1NDli
OTBhNTlmYzY2MDEyZWUyOWM2NjIzNDY1M2UwYTExLi40ZjczOGM3MTE1MmExNWE2OWQ4YzNkMzNl
NTMyZmY1NmJkYzU4NmMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0z
NjAsNiArMzYwLDEwIEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaml0L0FjY2Vz
c29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCiAg
ICAgaml0L0JpbmFyeVN3aXRjaC5jcHAKKyAgICBqaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3Bw
CisgICAgaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAorICAgIGppdC9DYWxsRnJhbWVTaHVmZmxl
cjMyXzY0LmNwcAorICAgIGppdC9DYWxsRnJhbWVTaHVmZmxlcjY0LmNwcAogICAgIGppdC9FeGVj
dXRhYmxlQWxsb2NhdGlvbkZ1enouY3BwCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3Bw
CiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRD
b3JlLnZjeHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCmluZGV4IGY2NmM2ZDQ4MjEyMWNlY2UyYTFkNWEzZjk2
NDFhNTZhNGVmZmRmZjEuLmZkYzAxYzJhMWJiMjIyNjQxNzMwODk1YzdiNTA5N2EzOWY0YTJkMDQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
L0phdmFTY3JpcHRDb3JlLnZjeHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagpAQCAtNjIwLDYgKzYyMCwx
MCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEFjY2Vzc29yQ2FsbEpJVFN0dWJS
b3V0aW5lLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxBc3NlbWJseUhl
bHBlcnMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEJpbmFyeVN3aXRj
aC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcQ2FsbEZyYW1lU2h1ZmZs
ZURhdGEuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XENhbGxGcmFtZVNo
dWZmbGVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxDYWxsRnJhbWVT
aHVmZmxlcjMyXzY0LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxDYWxs
RnJhbWVTaHVmZmxlcjY0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxF
eGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5caml0XEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5caml0XEV4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAiIC8+CkBAIC0xNDE5
LDYgKzE0MjMsOCBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEFjY2Vzc29yQ2Fs
bEpJVFN0dWJSb3V0aW5lLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcQXNz
ZW1ibHlIZWxwZXJzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcQmluYXJ5
U3dpdGNoLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcQ2FsbEZyYW1lU2h1
ZmZsZURhdGEuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxDYWxsRnJhbWVT
aHVmZmxlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XENDYWxsSGVscGVy
cy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XENvbXBhY3RKSVRDb2RlTWFw
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcRXhlY3V0YWJsZUFsbG9jYXRp
b25GdXp6LmgiIC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
LmZpbHRlcnMKaW5kZXggZTBhMzk2N2NmYTAxNjY3MDFkMjY1NGJlYTZkYzNhZjc5NDRhYjQ3MS4u
MGNiN2I2YTkzMWMyZWM0OGI3N2Y1ZGE0NTNjNzEzM2ExOGFlYmYzOCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwpAQCAtMzkzLDYgKzM5Mywx
OCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEhvc3RDYWxsUmV0dXJuVmFsdWUu
Y3BwIj4KICAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwIj4KKyAg
ICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxqaXRcQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+
aml0PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxqaXRcQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAiPgorICAgICAgPEZpbHRlcj5qaXQ8L0Zp
bHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxD
YWxsRnJhbWVTaHVmZmxlcjY0LmNwcCI+CisgICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgorICAg
IDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVC5jcHAiPgog
ICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggZGFmZGY3YzZlZjAwMTQyYzliNThhYmZkYjE2ZGY5NTQxMThh
ZDQ3My4uNGMyYzBmOTQwZTFmMTUwMTVjMmU2NGE2MzI0N2I2NGRmZmNlNTBkZCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTk3Niw3ICs5NzYsMTMgQEAKIAkJNjI3NjczMjQxQjY4
MEMxRTAwRkQ5RjJFIC8qIENhbGxNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2Mjc2NzMyMjFCNjgwQzFFMDBGRDlGMkUgLyogQ2FsbE1vZGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2MkQyRDM4
RjFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MkQyRDM4RDFBREYxMDNGMDAwMjA2QzEg
LyogRnVuY3Rpb25SYXJlRGF0YS5jcHAgKi87IH07CiAJCTYyRDJEMzkwMUFERjEwM0YwMDAyMDZD
MSAvKiBGdW5jdGlvblJhcmVEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2MkQyRDM4RTFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0
YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTYy
RDc1NUQ0MUI4NEZCM0QwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlcjY0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyRDc1NUQzMUI4NEZCMzkw
MDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlcjY0LmNwcCAqLzsgfTsKKwkJNjJENzU1RDUxQjg0
RkI0MDAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjJENzU1RDIxQjg0RkIzOTAwMTgwMUZB
IC8qIENhbGxGcmFtZVNodWZmbGVyMzJfNjQuY3BwICovOyB9OworCQk2MkQ3NTVENjFCODRGQjQ2
MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjJENzU1RDAxQjg0RkIzOTAwMTgwMUZBIC8qIENhbGxG
cmFtZVNodWZmbGVyLmNwcCAqLzsgfTsKKwkJNjJENzU1RDcxQjg0RkI0QTAwMTgwMUZBIC8qIENh
bGxGcmFtZVNodWZmbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2MkQ3NTVEMTFCODRGQjM5MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIuaCAq
LzsgfTsKIAkJNjJFM0Q1RjAxQjhEMEI3MzAwQjg2OEJCIC8qIERhdGFGb3JtYXQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjJFM0Q1RUYxQjhEMEI3
MzAwQjg2OEJCIC8qIERhdGFGb3JtYXQuY3BwICovOyB9OworCQk2MkVDOUJCNjFCN0VCMDdDMDAz
MDNBRDEgLyogQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjJFQzlCQjQxQjdFQjA3QzAwMzAzQUQxIC8qIENhbGxG
cmFtZVNodWZmbGVEYXRhLmNwcCAqLzsgfTsKKwkJNjJFQzlCQjcxQjdFQjA3QzAwMzAzQUQxIC8q
IENhbGxGcmFtZVNodWZmbGVEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2MkVDOUJCNTFCN0VCMDdDMDAzMDNBRDEgLyogQ2FsbEZyYW1lU2h1ZmZs
ZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk2MkYyQUEzNzFCMEJFREUzMDA2MTBDN0EgLyogREZHTGF6eU5vZGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjJBOUEyOUUxQjBCRUQ0ODAwQkQ1
NENBIC8qIERGR0xhenlOb2RlLmNwcCAqLzsgfTsKIAkJNjJGMkFBMzgxQjBCRURFMzAwNjEwQzdB
IC8qIERGR0xhenlOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2MkE5QTI5RjFCMEJFRDQ4MDBCRDU0Q0EgLyogREZHTGF6eU5vZGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2NTA3RDI5RTBFODcx
RTVFMDBEN0Q4OTYgLyogSlNUeXBlSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNjUwN0QyOTcwRTg3MUU0QTAwRDdEODk2IC8qIEpTVHlwZUluZm8u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjc4
MSw3ICsyNzg3LDEzIEBACiAJCTYyQTlBMjlGMUIwQkVENDgwMEJENTRDQSAvKiBERkdMYXp5Tm9k
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdMYXp5Tm9kZS5oOyBwYXRo
ID0gZGZnL0RGR0xhenlOb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTYyRDJE
MzhEMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0aW9uUmFyZURhdGEuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk2MkQyRDM4RTFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25S
YXJlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGdW5jdGlvblJhcmVE
YXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTYyRDc1NUQwMUI4NEZCMzkwMDE4
MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDYWxsRnJhbWVTaHVmZmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTYyRDc1NUQxMUI4NEZCMzkwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsRnJhbWVTaHVmZmxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2MkQ3NTVEMjFCODRGQjM5MDAxODAxRkEgLyogQ2Fs
bEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDYWxsRnJhbWVTaHVmZmxlcjMyXzY0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNjJENzU1RDMxQjg0RkIzOTAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyNjQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbEZyYW1lU2h1ZmZsZXI2
NC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTYyRTNENUVGMUI4RDBCNzMwMEI4
NjhCQiAvKiBEYXRhRm9ybWF0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IERhdGFGb3JtYXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2MkVDOUJC
NDFCN0VCMDdDMDAzMDNBRDEgLyogQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2MkVDOUJCNTFCN0VCMDdDMDAzMDNBRDEgLyogQ2Fs
bEZyYW1lU2h1ZmZsZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2Fs
bEZyYW1lU2h1ZmZsZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUwN0Qy
OTcwRTg3MUU0QTAwRDdEODk2IC8qIEpTVHlwZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNUeXBlSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2
NTExMjJFNTE0MDQ2OUJBMDAyQjEwMUQgLyogdGVzdFJlZ0V4cC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSB0ZXN0UmVnRXhwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNjUxMTIzMDUxNDA0NkE0QzAwMkIxMDFEIC8qIHRlc3RSZWdFeHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNo
LW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IHRlc3RSZWdFeHA7IHNv
dXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC00MDg3LDE2ICs0MDk5LDIyIEBA
CiAJCTE0MjlEOTJDMEVEMjJENzAwMEI4OTYxOSAvKiBqaXQgKi8gPSB7CiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTBGRjA1NEY3MUFDMzVCNDQwMEU1QkU1NyAvKiBF
eGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouY3BwICovLAotCQkJCTBGRjA1NEY4MUFDMzVCNDQwMEU1
QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouaCAqLywKIAkJCQkwRjc1NzZEMDE4RTFG
RUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwICovLAogCQkJCTBG
NzU3NkQxMThFMUZFRTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oICov
LAogCQkJCTBGMjRFNTNCMTdFQTlGNTkwMEFCQjIxNyAvKiBBc3NlbWJseUhlbHBlcnMuY3BwICov
LAogCQkJCTBGMjRFNTNDMTdFQTlGNTkwMEFCQjIxNyAvKiBBc3NlbWJseUhlbHBlcnMuaCAqLywK
IAkJCQkwRjY0QjI2RjFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmNwcCAqLywKIAkJ
CQkwRjY0QjI3MDFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmggKi8sCisJCQkJNjJF
QzlCQjQxQjdFQjA3QzAwMzAzQUQxIC8qIENhbGxGcmFtZVNodWZmbGVEYXRhLmNwcCAqLywKKwkJ
CQk2MkVDOUJCNTFCN0VCMDdDMDAzMDNBRDEgLyogQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaCAqLywK
KwkJCQk2MkQ3NTVEMDFCODRGQjM5MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwICov
LAorCQkJCTYyRDc1NUQxMUI4NEZCMzkwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlci5oICov
LAorCQkJCTYyRDc1NUQyMUI4NEZCMzkwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlcjMyXzY0
LmNwcCAqLywKKwkJCQk2MkQ3NTVEMzFCODRGQjM5MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZs
ZXI2NC5jcHAgKi8sCiAJCQkJMEYyNEU1M0QxN0VBOUY1OTAwQUJCMjE3IC8qIENDYWxsSGVscGVy
cy5oICovLAogCQkJCTBGRDgyRTM3MTQxQUIxNDIwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1h
cC5oICovLAorCQkJCTBGRjA1NEY3MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2Nh
dGlvbkZ1enouY3BwICovLAorCQkJCTBGRjA1NEY4MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRh
YmxlQWxsb2NhdGlvbkZ1enouaCAqLywKIAkJCQlBN0I0OERCNjBFRTc0Q0ZDMDBEQ0JEQjYgLyog
RXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJQTdCNDhEQjUwRUU3NENGQzAwRENCREI2
IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuaCAqLywKIAkJCQk4NkRCNjQ2MzBGOTVDNkZDMDBEN0Q5
MjEgLyogRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCAqLywKQEAgLTU5NTYsNiAr
NTk3NCw3IEBACiAJCQkJQzRGNEI2RjQxQTA1Qzk0NDAwNUNBQjc2IC8qIGNwcF9nZW5lcmF0b3Iu
cHkgaW4gSGVhZGVycyAqLywKIAkJCQlBNTMyNDM5NDE4NTY5NzA5MDAyRUQ2OTIgLyogZ2VuZXJh
dGUtY29tYmluZWQtaW5zcGVjdG9yLWpzb24ucHkgaW4gSGVhZGVycyAqLywKIAkJCQlBNTg0MEUy
NzE4N0M5ODFFMDA4NDNCMTAgLyogY3NzbWluLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJNjJENzU1
RDcxQjg0RkI0QTAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNUVBNzEwNDE5RjZERTcyMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLywKIAkJCQlDNDcwM0NENTE5
Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICovLAog
CQkJCUE1RUE3MTA1MTlGNkRFNzQwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRp
b25faGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCkBAIC02MTE2LDYgKzYxMzUsNyBAQAogCQkJCTBG
M0IzQTI4MTU0NEM5OTcwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzdBNDI0MDE3QTBCQkZEMDBBOERCODEgLyogREZHQ2xvYmJlcml6
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3QTQyNDIxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Ns
b2JiZXJTZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTYyRUM5QkI3MUI3RUIwN0MwMDMwM0FEMSAv
KiBDYWxsRnJhbWVTaHVmZmxlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3QjI5NEQxNEMz
Q0Q0QzAwN0MzREIxIC8qIERGR0NvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMzIx
NzBENDBCRjAwQkI3MjJDIC8qIERGR0NvbW1vbkRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MzhCMDE4MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC03NDY4LDYgKzc0ODgsNyBAQAogCQkJCTBGRjBGMTlEMTZCNzJBMDgwMDVERjk1QiAv
KiBERkdDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMzExNzBENDBCRjAwQkI3
MjJDIC8qIERGR0NvbW1vbkRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzOEIwMTcxN0NG
RTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTYyRUM5QkI2MUI3RUIwN0MwMDMwM0FEMSAvKiBDYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjM4QjAxOTE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRp
b25Nb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExQjlFMjNCMUI0RTBENjcwMEJDN0ZFRCAv
KiBJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjNCM0Ex
QTE1M0U2OEYyMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC03NTIxLDYgKzc1NDIsNyBAQAogCQkJCTBGRjBGMTlDMTZCNzJBMDMwMDVERjk1
QiAvKiBERkdOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQTU4MUJBMTUwRTk1MkMwMEI5
QTJEOSAvKiBERkdOb2RlRmxhZ3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQ0YxMzI4
REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNjJE
NzU1RDYxQjg0RkI0NjAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3RDg5Q0ZEMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdPU1JBdmFpbGFiaWxpdHlB
bmFseXNpc1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDgyRTU2MTQxREFGMDgwMDE3
OUM5NCAvKiBERkdPU1JFbnRyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMyNTE3RDUx
RjU3MDBDQTJDNDAgLyogREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC03NjUxLDYgKzc2NzMsNyBAQAogCQkJCTdCMDI0NzU2MUI4NjgyRTEwMDU0MjQ0
MCAvKiBXQVNNRnVuY3Rpb25QYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGMEYxOUYx
NkI3MkExNzAwNURGOTVCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTJCMzEwRkQxOTc0QUU4NzAwODA4NTdDIC8qIEZ1bmN0aW9uSGFzRXhlY3V0ZWRD
YWNoZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2MkQ3NTVENTFCODRGQjQwMDAxODAxRkEgLyog
Q2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDQzEw
N0VDMzc2MDA0MjdBNDggLyogRnVuY3Rpb25Qcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY2NEIyNzExQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjc2NkQyRjE1QThEQ0UwMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0
aW5lLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzc3NCw2ICs3Nzk3LDcgQEAKIAkJCQlBNzI3MDA5
MDBEQUM2QkJDMDBFNTQ4RDcgLyogSlNOb3RBbk9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDdGMzlENDEwN0VDMzc2MDA0MjdBNDggLyogSlNPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQ4MkI3RTQwQTQzMDc2MDAwNTE3Q0ZDIC8qIEpTT2JqZWN0UmVmLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTYyRDc1NUQ0MUI4NEZCM0QwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxl
cjY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Rjk5MzYwMEZENzMyNTEwMEEwQjJEMCAvKiBK
U09OT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkI2QzM4MUFGNDhEREMwMERCMUJG
NyAvKiBUeXBlb2ZUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk1RjZFNjk1MEU1QjVGOTcw
MDkxRTg2MCAvKiBKU1Byb2ZpbGVyUHJpdmF0ZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJvcnRSZWFzb24uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJvcnRSZWFzb24uaAppbmRleCA2OTJhZDZlNjYx
Yzg2MWFiNWY4Mzg5MTE2NjZlMzFkYzE3ZmVmNDMzLi4xNDA1ZWMxYWIyMzQ3YTQ3OWMzMDk3MzNl
NWE2ODY3ZTQ1MDM5ZWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0Fib3J0UmVhc29uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9B
Ym9ydFJlYXNvbi5oCkBAIC02NCw2ICs2NCw3IEBAIGVudW0gQWJvcnRSZWFzb24gewogICAgIEpJ
VE5vdFN1cHBvcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAyNjAsCiAg
ICAgSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDI3
MCwKICAgICBKSVRVbmNvdWdodEV4Y2VwdGlvbkFmdGVyQ2FsbCAgICAgICAgICAgICAgICAgICAg
ID0gMjc1LAorICAgIEpJVFVuZXhwZWN0ZWRDYWxsRnJhbWVTaXplICAgICAgICAgICAgICAgICAg
ICAgICAgPSAyNzcsCiAgICAgSklUVW5yZWFzb25hYmxlTG9vcEhpbnRKdW1wVGFyZ2V0ICAgICAg
ICAgICAgICAgICA9IDI4MCwKICAgICBSUFdVbnJlYXNvbmFibGVKdW1wVGFyZ2V0ICAgICAgICAg
ICAgICAgICAgICAgICAgID0gMjkwLAogICAgIFJlcGF0Y2hJbmVmZmVjdGl2ZVdhdGNocG9pbnQg
ICAgICAgICAgICAgICAgICAgICAgPSAzMDAsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ2FsbExpbmtJbmZvLmgKaW5kZXggYTBhY2UwNTdiZjMxYjRmMWU5MTU1NGZiNjM0NmY4
MDE5MzA3YTBkZi4uZDY5MDkzNTZiM2RhZjY3NjIzNjczZjA2ZDIwMjE3YTk1YzA0MTZiMCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaApAQCAtMjYs
NiArMjYsNyBAQAogI2lmbmRlZiBDYWxsTGlua0luZm9faAogI2RlZmluZSBDYWxsTGlua0luZm9f
aAogCisjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaCIKICNpbmNsdWRlICJDYWxsTW9k
ZS5oIgogI2luY2x1ZGUgIkNvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIkNvZGVTcGVjaWFsaXph
dGlvbktpbmQuaCIKQEAgLTMyNyw2ICszMjgsMTYgQEAgcHVibGljOgogCiAgICAgdm9pZCB2aXNp
dFdlYWsoVk0mKTsKIAorICAgIHZvaWQgc2V0RnJhbWVTaHVmZmxlRGF0YShjb25zdCBDYWxsRnJh
bWVTaHVmZmxlRGF0YSYgc2h1ZmZsZURhdGEpCisgICAgeworICAgICAgICBtX2ZyYW1lU2h1ZmZs
ZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPihzaHVmZmxlRGF0
YSk7CisgICAgfQorCisgICAgY29uc3QgQ2FsbEZyYW1lU2h1ZmZsZURhdGEqIGZyYW1lU2h1ZmZs
ZURhdGEoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZnJhbWVTaHVmZmxlRGF0YS5nZXQoKTsK
KyAgICB9CisKIHByaXZhdGU6CiAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgbV9jYWxsUmV0dXJu
TG9jYXRpb247CiAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIG1faG90UGF0aEJlZ2luOwpA
QCAtMzM1LDYgKzM0Niw3IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+
IG1fbGFzdFNlZW5DYWxsZWU7CiAgICAgUmVmUHRyPFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5l
PiBtX3N0dWI7CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3Nsb3dTdHViOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gbV9mcmFtZVNodWZmbGVEYXRhOwog
ICAgIHVuc2lnbmVkIG1fcmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIDogMTsgLy8gUmVhbCB0eXBl
IGlzIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZQogICAgIGJvb2wgbV9oYXNTZWVuU2hvdWxkUmVw
YXRjaCA6IDE7CiAgICAgYm9vbCBtX2hhc1NlZW5DbG9zdXJlIDogMTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAppbmRleCA2MzkwY2RhZjQ4OTkxMDdi
YWQxMjZlZmRkZjFmOTcyNjIxNmMyZTVhLi40MGMxY2Q5YTRiNTc5YjM3ZjIwMzM3ZWY1ZmE2OTA0
Mjk1YmU4YWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVy
YXRpb25JbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9u
SW5mby5oCkBAIC0zNzgsNiArMzc4LDI5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fdXNl
Q291bnQ7CiAgICAgfQogCisgICAgVmFsdWVSZWNvdmVyeSByZWNvdmVyeShWaXJ0dWFsUmVnaXN0
ZXIgc3BpbGxTbG90KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1faXNDb25zdGFudCkKKyAg
ICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChtX25vZGUtPmNvbnN0YW50
KCktPnZhbHVlKCkpOworCisgICAgICAgIGlmIChtX3JlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3Jt
YXREb3VibGUpCisgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6aW5GUFIodS5mcHIs
IERhdGFGb3JtYXREb3VibGUpOworCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgaWYg
KG1fcmVnaXN0ZXJGb3JtYXQgJiBEYXRhRm9ybWF0SlMpIHsKKyAgICAgICAgICAgIGlmIChtX3Jl
Z2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRKUykKKyAgICAgICAgICAgICAgICByZXR1cm4gVmFs
dWVSZWNvdmVyeTo6aW5QYWlyKHUudi50YWdHUFIsIHUudi5wYXlsb2FkR1BSKTsKKyAgICAgICAg
ICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjppbkdQUih1LnYucGF5bG9hZEdQUiwgc3RhdGljX2Nh
c3Q8RGF0YUZvcm1hdD4obV9yZWdpc3RlckZvcm1hdCAmIH5EYXRhRm9ybWF0SlMpKTsKKyAgICAg
ICAgfQorI2VuZGlmCisgICAgICAgIGlmIChtX3JlZ2lzdGVyRm9ybWF0KQorICAgICAgICAgICAg
cmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmluR1BSKHUuZ3ByLCBtX3JlZ2lzdGVyRm9ybWF0KTsKKwor
ICAgICAgICBBU1NFUlQobV9zcGlsbEZvcm1hdCk7CisKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVj
b3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjayhzcGlsbFNsb3QsIG1fc3BpbGxGb3JtYXQpOworICAg
IH0KKwogcHJpdmF0ZToKICAgICB2b2lkIGFwcGVuZEJpcnRoKFZhcmlhYmxlRXZlbnRTdHJlYW0m
IHN0cmVhbSkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nh
bGxGcmFtZVNodWZmbGVEYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZy
YW1lU2h1ZmZsZURhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1NGFlMDNmMTZhNDZhNDMwNzNhZmUwYWI0
Mjc3OTZlZjc4NjBiNjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlRGF0YS5oIgorCisjaWYgRU5BQkxFKEpJVCkKKwor
I2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZs
ZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sK
KyAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlUmVnaXN0ZXJzIHsgUmVnaXN0ZXJTZXQ6OmFsbFZN
Q2FsbGVlU2F2ZVJlZ2lzdGVycygpIH07CisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lz
dGVyU2F2ZUxvY2F0aW9ucyA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWdpc3RlclNhdmVMb2NhdGlvbnMtPnNpemUoKTsg
KytpKSB7CisgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgeyByZWdpc3RlclNhdmVMb2Nh
dGlvbnMtPmF0KGkpIH07CisgICAgICAgIGlmICghY2FsbGVlU2F2ZVJlZ2lzdGVycy5nZXQoZW50
cnkucmVnKCkpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIHNhdmVTbG90IHsgZW50cnkub2Zmc2V0QXNJbmRleCgpIH07CisgICAgICAgIHJlZ2lzdGVy
c1tlbnRyeS5yZWcoKV0KKyAgICAgICAgICAgID0gVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5K
U1N0YWNrKHNhdmVTbG90LCBEYXRhRm9ybWF0SlMpOworICAgIH0KKworICAgIGZvciAoUmVnIHJl
ZyA9IFJlZzo6Zmlyc3QoKTsgcmVnIDw9IFJlZzo6bGFzdCgpOyByZWcgPSByZWcubmV4dCgpKSB7
CisgICAgICAgIGlmICghY2FsbGVlU2F2ZVJlZ2lzdGVycy5nZXQocmVnKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgIGlmIChyZWdpc3RlcnNbcmVnXSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIHJlZ2lzdGVyc1tyZWddID0gVmFsdWVSZWNvdmVyeTo6aW5SZWdp
c3RlcihyZWcsIERhdGFGb3JtYXRKUyk7CisgICAgfQorfQorCisjZW5kaWYgLy8gVVNFKEpTVkFM
VUU2NCkKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjQ0ODAyZTg2ZDE0YWU5OWFkMzA5YjRhY2ZmMzIwZTEzNjQyMzUwNDcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRh
LmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIENhbGxGcmFtZVNodWZmbGVEYXRhX2gKKyNkZWZpbmUgQ2FsbEZy
YW1lU2h1ZmZsZURhdGFfaAorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIlJlZ2lzdGVy
TWFwLmgiCisjaW5jbHVkZSAiVmFsdWVSZWNvdmVyeS5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
c3RydWN0IENhbGxGcmFtZVNodWZmbGVEYXRhIHsKKyAgICB1bnNpZ25lZCBudW1Mb2NhbHM7Cisg
ICAgVmFsdWVSZWNvdmVyeSBjYWxsZWU7CisgICAgVmVjdG9yPFZhbHVlUmVjb3Zlcnk+IGFyZ3M7
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBSZWdpc3Rlck1hcDxWYWx1ZVJlY292ZXJ5PiByZWdp
c3RlcnM7CisKKyAgICB2b2lkIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxvY2sqKTsK
KyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklU
KQorCisjZW5kaWYgLy8gQ2FsbEZyYW1lU2h1ZmZsZURhdGFfaApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YjI0NmQ3M2Qz
NmE5ODAyZmYzNzljZWMyMDBlNTlhYmI1YjJiYTQyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAKQEAgLTAsMCArMSw3MDcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVyLmgiCisKKyNpZiBFTkFC
TEUoSklUKQorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiQ29kZUJsb2Nr
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1lU2h1
ZmZsZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IENhbGxGcmFtZVNodWZmbGVEYXRhJiBkYXRh
KQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vbGRGcmFtZShkYXRhLm51bUxvY2FscyArIEpT
U3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplLCBudWxscHRyKQorICAgICwgbV9uZXdGcmFtZShk
YXRhLmFyZ3Muc2l6ZSgpICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSwgbnVsbHB0cikK
KyAgICAsIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZShKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXpl
CisgICAgICAgICsgcm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGppdC5jb2RlQmxvY2so
KS0+bnVtUGFyYW1ldGVycygpKSkKKyAgICAsIG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZShKU1N0YWNr
OjpDYWxsRnJhbWVIZWFkZXJTaXplCisgICAgICAgICsgcm91bmRBcmd1bWVudENvdW50VG9BbGln
bkZyYW1lKGRhdGEuYXJncy5zaXplKCkpKQorICAgICwgbV9mcmFtZURlbHRhKG1fYWxpZ25lZE5l
d0ZyYW1lU2l6ZSAtIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZSkKKyAgICAsIG1fbG9ja2VkUmVnaXN0
ZXJzKFJlZ2lzdGVyU2V0OjphbGxSZWdpc3RlcnMoKSkKK3sKKyAgICAvLyBXZSBhcmUgYWxsb3dl
ZCBhbGwgdGhlIHVzdWFsIHJlZ2lzdGVycy4uLgorICAgIGZvciAodW5zaWduZWQgaSA9IEdQUklu
Zm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07ICkKKyAgICAgICAgbV9sb2NrZWRSZWdpc3RlcnMu
Y2xlYXIoR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gRlBS
SW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTsgKQorICAgICAgICBtX2xvY2tlZFJlZ2lzdGVy
cy5jbGVhcihGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyAgICAvLyAuLi4gYXMgd2VsbCBhcyB0
aGUgcnVudGltZSByZWdpc3RlcnMuCisgICAgbV9sb2NrZWRSZWdpc3RlcnMuZXhjbHVkZShSZWdp
c3RlclNldDo6YWxsVk1DYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworCisgICAgQVNTRVJUKCFkYXRh
LmNhbGxlZS5pc0luSlNTdGFjaygpIHx8IGRhdGEuY2FsbGVlLnZpcnR1YWxSZWdpc3RlcigpLmlz
TG9jYWwoKSk7CisgICAgYWRkTmV3KFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpDYWxsZWUpLCBk
YXRhLmNhbGxlZSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhdGEuYXJncy5zaXpl
KCk7ICsraSkgeworICAgICAgICBBU1NFUlQoIWRhdGEuYXJnc1tpXS5pc0luSlNTdGFjaygpIHx8
IGRhdGEuYXJnc1tpXS52aXJ0dWFsUmVnaXN0ZXIoKS5pc0xvY2FsKCkpOworICAgICAgICBhZGRO
ZXcodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSksIGRhdGEuYXJnc1tpXSk7CisgICAgfQor
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBmb3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJl
ZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVnLm5leHQoKSkgeworICAgICAgICBpZiAoIWRhdGEu
cmVnaXN0ZXJzW3JlZ10uaXNTZXQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgIGFkZE5ldyhKU1ZhbHVlUmVncyhyZWcuZ3By
KCkpLCBkYXRhLnJlZ2lzdGVyc1tyZWddKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWRk
TmV3KHJlZy5mcHIoKSwgZGF0YS5yZWdpc3RlcnNbcmVnXSk7CisgICAgfQorI2VuZGlmCit9CisK
K3ZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBzdGF0aWMgY29uc3QgY2hhciogZGVsaW1pdGVyICAgICAgICAgICAgID0gIiArLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgIjsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZGFu
Z2VyRGVsaW1pdGVyICAgICAgID0gIiBYLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVgg
IjsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZGFuZ2VyQm91bmRzRGVsaW1pdGVyID0gIiBYWFhY
WFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFggIjsKKyAgICBzdGF0aWMgY29uc3QgY2hhciog
ZW1wdHlTcGFjZSAgICAgICAgICAgID0gIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIjsKKyAgICBBU1NFUlQobV9hbGlnbmVkTmV3RnJhbWVTaXplIDw9IG51bUxvY2FscygpKTsK
KyAgICBvdXQucHJpbnQoIiAgICAgICAgICAiKTsKKyAgICBvdXQucHJpbnQoIiAgICAgICAgICAg
T2xkIGZyYW1lICAgICAgICAgICAgICAgIik7CisgICAgb3V0LnByaW50KCIgICAgICAgICAgIE5l
dyBmcmFtZSAgICAgICAgICAgICAgICIpOworICAgIG91dC5wcmludCgiXG4iKTsKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG1fYWxpZ25lZE9sZEZyYW1lU2l6ZSArIG51bUxvY2FscygpICsgMzsg
KytpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvbGQgeyBtX2FsaWduZWRPbGRGcmFtZVNp
emUgLSBpIC0gMSB9OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbmV3UmVnIHsgb2xkICsgbV9m
cmFtZURlbHRhIH07CisKKyAgICAgICAgaWYgKCFpc1ZhbGlkT2xkKG9sZCkgJiYgb2xkICE9IGZp
cnN0T2xkKCkgLSAxCisgICAgICAgICAgICAmJiAhaXNWYWxpZE5ldyhuZXdSZWcpICYmIG5ld1Jl
ZyAhPSBmaXJzdE5ldygpIC0gMSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIG91
dC5wcmludCgiICAgICAgICAiKTsKKyAgICAgICAgaWYgKGRhbmdlckZyb250aWVyKCkgPj0gZmly
c3ROZXcoKQorICAgICAgICAgICAgJiYgKG5ld1JlZyA9PSBkYW5nZXJGcm9udGllcigpIHx8IG5l
d1JlZyA9PSBmaXJzdE5ldygpIC0gMSkpCisgICAgICAgICAgICBvdXQucHJpbnQoZGFuZ2VyQm91
bmRzRGVsaW1pdGVyKTsKKyAgICAgICAgZWxzZSBpZiAoaXNWYWxpZE9sZChvbGQpKQorICAgICAg
ICAgICAgb3V0LnByaW50KGlzVmFsaWROZXcobmV3UmVnKSAmJiBpc0Rhbmdlck5ldyhuZXdSZWcp
ID8gZGFuZ2VyRGVsaW1pdGVyIDogZGVsaW1pdGVyKTsKKyAgICAgICAgZWxzZSBpZiAob2xkID09
IGZpcnN0T2xkKCkgLSAxKQorICAgICAgICAgICAgb3V0LnByaW50KGRlbGltaXRlcik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludChlbXB0eVNwYWNlKTsKKyAgICAgICAgaWYg
KGRhbmdlckZyb250aWVyKCkgPj0gZmlyc3ROZXcoKQorICAgICAgICAgICAgJiYgKG5ld1JlZyA9
PSBkYW5nZXJGcm9udGllcigpIHx8IG5ld1JlZyA9PSBmaXJzdE5ldygpIC0gMSkpCisgICAgICAg
ICAgICBvdXQucHJpbnQoZGFuZ2VyQm91bmRzRGVsaW1pdGVyKTsKKyAgICAgICAgZWxzZSBpZiAo
aXNWYWxpZE5ldyhuZXdSZWcpIHx8IG5ld1JlZyA9PSBmaXJzdE5ldygpIC0gMSkKKyAgICAgICAg
ICAgIG91dC5wcmludChpc0Rhbmdlck5ldyhuZXdSZWcpID8gZGFuZ2VyRGVsaW1pdGVyIDogZGVs
aW1pdGVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KGVtcHR5U3BhY2Up
OworICAgICAgICBvdXQucHJpbnQoIlxuIik7CisgICAgICAgIGlmIChvbGQgPT0gZmlyc3RPbGQo
KSkKKyAgICAgICAgICAgIG91dC5wcmludCgiIHNwIC0tPiAiKTsKKyAgICAgICAgZWxzZSBpZiAo
IW9sZC5vZmZzZXQoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiIGZwIC0tPiAiKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCIgICAgICAgICIpOworICAgICAgICBpZiAo
aXNWYWxpZE9sZChvbGQpKSB7CisgICAgICAgICAgICBpZiAoZ2V0T2xkKG9sZCkpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvIHN0ciA9IHRvQ1N0cmluZyhvbGQpOworICAgICAgICAgICAgICAgIGlm
IChpc1ZhbGlkTmV3KG5ld1JlZykgJiYgaXNEYW5nZXJOZXcobmV3UmVnKSkKKyAgICAgICAgICAg
ICAgICAgICAgb3V0LnByaW50ZigiIFggICAgICAlMThzICAgICAgIFggIiwgc3RyLmRhdGEoKSk7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIg
fCAgICAgICUxOHMgICAgICAgfCAiLCBzdHIuZGF0YSgpKTsKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAoaXNWYWxpZE5ldyhuZXdSZWcpICYmIGlzRGFuZ2VyTmV3KG5ld1JlZykpCisgICAgICAgICAg
ICAgICAgb3V0LnByaW50ZigiIFglMzBzIFggIiwgIiIpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIG91dC5wcmludGYoIiB8JTMwcyB8ICIsICIiKTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBvdXQucHJpbnQoZW1wdHlTcGFjZSk7CisgICAgICAgIGlmIChpc1ZhbGlk
TmV3KG5ld1JlZykpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgZCA9IGlzRGFuZ2VyTmV3KG5l
d1JlZykgPyAnWCcgOiAnfCc7CisgICAgICAgICAgICBhdXRvIHN0ciA9IHRvQ1N0cmluZyhuZXdS
ZWcpOworICAgICAgICAgICAgaWYgKGdldE5ldyhuZXdSZWcpKSB7CisgICAgICAgICAgICAgICAg
aWYgKGdldE5ldyhuZXdSZWcpLT5yZWNvdmVyeSgpLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgb3V0LnByaW50ZigiICVjJThzIDwtICAgICAgICAgICBjb25zdGFudCAlYyAiLCBk
LCBzdHIuZGF0YSgpLCBkKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgYXV0byByZWNvdmVyeVN0ciA9IHRvQ1N0cmluZyhnZXROZXcobmV3UmVnKS0+cmVjb3Zl
cnkoKSk7CisgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiAlYyU4cyA8LSAlMThzICVj
ICIsIGQsIHN0ci5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgICAgICByZWNvdmVyeVN0ci5k
YXRhKCksIGQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAobmV3
UmVnID09IFZpcnR1YWxSZWdpc3RlciB7IEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgfSkKKyAgICAg
ICAgICAgICAgICBvdXQucHJpbnRmKCIgJWMlOHMgPC0gJTE4enUgJWMgIiwgZCwgc3RyLmRhdGEo
KSwgYXJnQ291bnQoKSwgZCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgb3V0
LnByaW50ZigiICVjJTMwcyAlYyAiLCBkLCAiIiwgZCk7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgb3V0LnByaW50KGVtcHR5U3BhY2UpOworICAgICAgICBpZiAobmV3UmVnID09IGZpcnN0
TmV3KCkgLSBtX25ld0ZyYW1lT2Zmc2V0ICYmICFpc1Nsb3dQYXRoKCkpCisgICAgICAgICAgICBv
dXQucHJpbnQoIiA8LS0gbmV3IHNwIGJlZm9yZSBqdW1wIChjdXJyZW50ICIsIG1fbmV3RnJhbWVC
YXNlLCAiKSAiKTsKKyAgICAgICAgaWYgKG5ld1JlZyA9PSBmaXJzdE5ldygpKQorICAgICAgICAg
ICAgb3V0LnByaW50KCIgPC0tIG5ldyBmcCBhZnRlciBwcm9sb2d1ZSIpOworICAgICAgICBvdXQu
cHJpbnQoIlxuIik7CisgICAgfQorICAgIG91dC5wcmludCgiICAgICAgICAgICIpOworICAgIG91
dC5wcmludCgiICAgICAgICBMaXZlIHJlZ2lzdGVycyAgICAgICAgICAgICAiKTsKKyAgICBvdXQu
cHJpbnQoIiAgICAgICAgV2FudGVkIHJlZ2lzdGVycyAgICAgICAgICAgIik7CisgICAgb3V0LnBy
aW50KCJcbiIpOworICAgIGZvciAoUmVnIHJlZyA9IFJlZzo6Zmlyc3QoKTsgcmVnIDw9IFJlZzo6
bGFzdCgpOyByZWcgPSByZWcubmV4dCgpKSB7CisgICAgICAgIENhY2hlZFJlY292ZXJ5KiBvbGRD
YWNoZWRSZWNvdmVyeSB7IG1fcmVnaXN0ZXJzW3JlZ10gfTsKKyAgICAgICAgQ2FjaGVkUmVjb3Zl
cnkqIG5ld0NhY2hlZFJlY292ZXJ5IHsgbV9uZXdSZWdpc3RlcnNbcmVnXSB9OworICAgICAgICBp
ZiAoIW9sZENhY2hlZFJlY292ZXJ5ICYmICFuZXdDYWNoZWRSZWNvdmVyeSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBvdXQucHJpbnQoIiAgICAgICAgICAiKTsKKyAgICAgICAgaWYg
KG9sZENhY2hlZFJlY292ZXJ5KSB7CisgICAgICAgICAgICBhdXRvIHN0ciA9IHRvQ1N0cmluZyhy
ZWcpOworICAgICAgICAgICAgb3V0LnByaW50ZigiICAgICAgICAgJThzICAgICAgICAgICAgICAg
ICAgIiwgc3RyLmRhdGEoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgb3V0LnByaW50
KGVtcHR5U3BhY2UpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIGlmIChuZXdDYWNo
ZWRSZWNvdmVyeSkgeworICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mgd2FudGVkSlNWYWx1ZVJlZ3Mg
eyBuZXdDYWNoZWRSZWNvdmVyeS0+d2FudGVkSlNWYWx1ZVJlZ3MoKSB9OworICAgICAgICAgICAg
aWYgKHJlZy5pc0ZQUigpKQorICAgICAgICAgICAgICAgIG91dC5wcmludChyZWcsICIgPC0gIiwg
bmV3Q2FjaGVkUmVjb3ZlcnktPnJlY292ZXJ5KCkpOworICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgaWYgKHJlZy5ncHIoKSA9PSB3YW50ZWRKU1ZhbHVlUmVncy50YWdHUFIoKSkK
KyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KHJlZy5ncHIoKSwgIiA8LSB0YWcoIiwgbmV3
Q2FjaGVkUmVjb3ZlcnktPnJlY292ZXJ5KCksICIpIik7CisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQocmVnLmdwcigpLCAiIDwtIHBheWxvYWQoIiwg
bmV3Q2FjaGVkUmVjb3ZlcnktPnJlY292ZXJ5KCksICIpIik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyNlbHNlCisgICAgICAgIGlmIChuZXdDYWNoZWRSZWNvdmVyeSkKKyAgICAgICAgICAg
IG91dC5wcmludCgiICAgICAgICAgIiwgcmVnLCAiIDwtICIsIG5ld0NhY2hlZFJlY292ZXJ5LT5y
ZWNvdmVyeSgpKTsKKyNlbmRpZgorICAgICAgICBvdXQucHJpbnQoIlxuIik7CisgICAgfQorICAg
IG91dC5wcmludCgiICBMb2NrZWQgcmVnaXN0ZXJzOiAiKTsKKyAgICBib29sIGZpcnN0TG9ja2Vk
IHsgdHJ1ZSB9OworICAgIGZvciAoUmVnIHJlZyA9IFJlZzo6Zmlyc3QoKTsgcmVnIDw9IFJlZzo6
bGFzdCgpOyByZWcgPSByZWcubmV4dCgpKSB7CisgICAgICAgIGlmIChtX2xvY2tlZFJlZ2lzdGVy
cy5nZXQocmVnKSkgeworICAgICAgICAgICAgb3V0LnByaW50KGZpcnN0TG9ja2VkID8gIiIgOiAi
LCAiLCByZWcpOworICAgICAgICAgICAgZmlyc3RMb2NrZWQgPSBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBvdXQucHJpbnQoIlxuIik7CisKKyAgICBpZiAoaXNTbG93UGF0aCgpKQorICAg
ICAgICBvdXQucHJpbnQoIiAgVXNpbmcgZnAtcmVsYXRpdmUgYWRkcmVzc2luZyBmb3Igc2xvdyBw
YXRoIGNhbGxcbiIpOworICAgIGVsc2UKKyAgICAgICAgb3V0LnByaW50KCIgIFVzaW5nIHNwLXJl
bGF0aXZlIGFkZHJlc3NpbmcgZm9yIGp1bXAgKHVzaW5nICIsIG1fbmV3RnJhbWVCYXNlLCAiIGFz
IG5ldyBzcClcbiIpOworICAgIGlmIChtX29sZEZyYW1lT2Zmc2V0KQorICAgICAgICBvdXQucHJp
bnQoIiAgIE9sZCBmcmFtZSBvZmZzZXQgaXMgIiwgbV9vbGRGcmFtZU9mZnNldCwgIlxuIik7Cisg
ICAgaWYgKG1fbmV3RnJhbWVPZmZzZXQpCisgICAgICAgIG91dC5wcmludCgiICAgTmV3IGZyYW1l
IG9mZnNldCBpcyAiLCBtX25ld0ZyYW1lT2Zmc2V0LCAiXG4iKTsKK30KKworQ2FjaGVkUmVjb3Zl
cnkqIENhbGxGcmFtZVNodWZmbGVyOjpnZXRDYWNoZWRSZWNvdmVyeShWYWx1ZVJlY292ZXJ5IHJl
Y292ZXJ5KQoreworICAgIEFTU0VSVCghcmVjb3ZlcnkuaXNDb25zdGFudCgpKTsKKyAgICBpZiAo
cmVjb3ZlcnkuaXNJbkdQUigpKQorICAgICAgICByZXR1cm4gbV9yZWdpc3RlcnNbcmVjb3Zlcnku
Z3ByKCldOworICAgIGlmIChyZWNvdmVyeS5pc0luRlBSKCkpCisgICAgICAgIHJldHVybiBtX3Jl
Z2lzdGVyc1tyZWNvdmVyeS5mcHIoKV07CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBpZiAo
cmVjb3ZlcnkudGVjaG5pcXVlKCkgPT0gSW5QYWlyKSB7CisgICAgICAgIEFTU0VSVChtX3JlZ2lz
dGVyc1tyZWNvdmVyeS50YWdHUFIoKV0gPT0gbV9yZWdpc3RlcnNbcmVjb3ZlcnkucGF5bG9hZEdQ
UigpXSk7CisgICAgICAgIHJldHVybiBtX3JlZ2lzdGVyc1tyZWNvdmVyeS5wYXlsb2FkR1BSKCld
OworICAgIH0KKyNlbmRpZgorICAgIEFTU0VSVChyZWNvdmVyeS5pc0luSlNTdGFjaygpKTsKKyAg
ICByZXR1cm4gZ2V0T2xkKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKTsKK30KKworQ2FjaGVk
UmVjb3ZlcnkqIENhbGxGcmFtZVNodWZmbGVyOjpzZXRDYWNoZWRSZWNvdmVyeShWYWx1ZVJlY292
ZXJ5IHJlY292ZXJ5LCBDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkpCit7CisgICAgQVNT
RVJUKCFyZWNvdmVyeS5pc0NvbnN0YW50KCkpOworICAgIGlmIChyZWNvdmVyeS5pc0luR1BSKCkp
CisgICAgICAgIHJldHVybiBtX3JlZ2lzdGVyc1tyZWNvdmVyeS5ncHIoKV0gPSBjYWNoZWRSZWNv
dmVyeTsKKyAgICBpZiAocmVjb3ZlcnkuaXNJbkZQUigpKQorICAgICAgICByZXR1cm4gbV9yZWdp
c3RlcnNbcmVjb3ZlcnkuZnByKCldID0gY2FjaGVkUmVjb3Zlcnk7CisjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKKyAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgPT0gSW5QYWlyKSB7CisgICAgICAg
IG1fcmVnaXN0ZXJzW3JlY292ZXJ5LnRhZ0dQUigpXSA9IGNhY2hlZFJlY292ZXJ5OworICAgICAg
ICByZXR1cm4gbV9yZWdpc3RlcnNbcmVjb3ZlcnkucGF5bG9hZEdQUigpXSA9IGNhY2hlZFJlY292
ZXJ5OworICAgIH0KKyNlbmRpZgorICAgIEFTU0VSVChyZWNvdmVyeS5pc0luSlNTdGFjaygpKTsK
KyAgICBzZXRPbGQocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCksIGNhY2hlZFJlY292ZXJ5KTsK
KyAgICByZXR1cm4gY2FjaGVkUmVjb3Zlcnk7Cit9CisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6
OnNwaWxsKENhY2hlZFJlY292ZXJ5JiBjYWNoZWRSZWNvdmVyeSkKK3sKKyAgICBBU1NFUlQoIWlz
U2xvd1BhdGgoKSk7CisgICAgQVNTRVJUKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuaXNJblJl
Z2lzdGVycygpKTsKKworICAgIFZpcnR1YWxSZWdpc3RlciBzcGlsbFNsb3QgeyAwIH07CisgICAg
Zm9yIChWaXJ0dWFsUmVnaXN0ZXIgc2xvdCA9IGZpcnN0T2xkKCk7IHNsb3QgPD0gbGFzdE9sZCgp
OyBzbG90IC09IDEpIHsKKyAgICAgICAgQVNTRVJUKHNsb3QgPCBuZXdBc09sZChmaXJzdE5ldygp
KSk7CisgICAgICAgIGlmIChnZXRPbGQoc2xvdCkpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBzcGlsbFNsb3QgPSBzbG90OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgLy8g
V2UgbXVzdCBoYXZlIGVub3VnaCBzbG90cyB0byBiZSBhYmxlIHRvIGZpdCB0aGUgd2hvbGUKKyAg
ICAvLyBjYWxsZWUncyBmcmFtZSBmb3IgdGhlIHNsb3cgcGF0aC4KKyAgICBSRUxFQVNFX0FTU0VS
VChzcGlsbFNsb3QuaXNMb2NhbCgpKTsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRh
TG9nKCIgICAqIFNwaWxsaW5nICIsIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCksICIgaW50byAi
LCBzcGlsbFNsb3QsICJcbiIpOworICAgIGF1dG8gZm9ybWF0ID0gZW1pdFN0b3JlKGNhY2hlZFJl
Y292ZXJ5LCBhZGRyZXNzRm9yT2xkKHNwaWxsU2xvdCkpOworICAgIEFTU0VSVChmb3JtYXQgIT0g
RGF0YUZvcm1hdE5vbmUpOworICAgIHVwZGF0ZVJlY292ZXJ5KGNhY2hlZFJlY292ZXJ5LCBWYWx1
ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soc3BpbGxTbG90LCBmb3JtYXQpKTsKK30KKwor
dm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6ZW1pdERlbHRhQ2hlY2soKQoreworICAgIGlmIChBU1NF
UlRfRElTQUJMRUQpCisgICAgICAgIHJldHVybjsKKworICAgIEdQUlJlZyBzY3JhdGNoR1BSIHsg
Z2V0RnJlZUdQUigpIH07CisgICAgaWYgKHNjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJlZykgewor
ICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgVXNpbmcgIiwgc2Ny
YXRjaEdQUiwgIiBmb3IgdGhlIGZwLXNwIGRlbHRhIGNoZWNrXG4iKTsKKyAgICAgICAgbV9qaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBtX2ppdC5zdWJQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHNjcmF0Y2hH
UFIpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvayA9IG1faml0LmJyYW5jaDMyKAor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBzY3JhdGNoR1BSLAorICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigtbnVtTG9jYWxzKCkgKiBzaXplb2YoUmVn
aXN0ZXIpKSk7CisgICAgICAgIG1faml0LmFib3J0V2l0aFJlYXNvbihKSVRVbmV4cGVjdGVkQ2Fs
bEZyYW1lU2l6ZSk7CisgICAgICAgIG9rLmxpbmsoJm1faml0KTsKKyAgICB9IGVsc2UgaWYgKHZl
cmJvc2UpCisgICAgICAgIGRhdGFMb2coIiAgU2tpcHBpbmcgdGhlIGZwLXNwIGRlbHRhIGNoZWNr
IHNpbmNlIHRoZXJlIGlzIHRvbyBtdWNoIHByZXNzdXJlIik7Cit9CisKK3ZvaWQgQ2FsbEZyYW1l
U2h1ZmZsZXI6OnByZXBhcmVGb3JTbG93UGF0aCgpCit7CisgICAgQVNTRVJUKGlzVW5kZWNpZGVk
KCkpOworICAgIGVtaXREZWx0YUNoZWNrKCk7CisKKyAgICBtX2ZyYW1lRGVsdGEgPSBudW1Mb2Nh
bHMoKSArIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplOworICAgIG1fbmV3RnJhbWVCYXNl
ID0gTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyOworICAgIG1fbmV3RnJhbWVP
ZmZzZXQgPSAtSlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1NpemU7CisKKyAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgZGF0YUxvZygiXG5cblByZXBhcmluZyBmcmFtZSBmb3Igc2xvdyBwYXRoIGNh
bGw6XG4iLCAqdGhpcyk7CisKKyAgICBwcmVwYXJlQW55KCk7CisKKyAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgZGF0YUxvZygiUmVhZHkgZm9yIHNsb3cgcGF0aCBjYWxsIVxuIik7Cit9CisKK3Zv
aWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OnByZXBhcmVGb3JUYWlsQ2FsbCgpCit7CisgICAgQVNTRVJU
KGlzVW5kZWNpZGVkKCkpOworICAgIGVtaXREZWx0YUNoZWNrKCk7CisKKyAgICAvLyBXZSdsbCB1
c2Ugc3AtYmFzZWQgaW5kZXhpbmcgc28gdGhhdCB3ZSBjYW4gbG9hZCB0aGUKKyAgICAvLyBjYWxs
ZXIncyBmcmFtZSBwb2ludGVyIGludG8gdGhlIGZwciBpbW1lZGlhdGVseQorICAgIG1fb2xkRnJh
bWVCYXNlID0gTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyOworICAgIG1fb2xk
RnJhbWVPZmZzZXQgPSBudW1Mb2NhbHMoKTsKKyAgICBtX25ld0ZyYW1lQmFzZSA9IGFjcXVpcmVH
UFIoKTsKKyNpZiBDUFUoWDg2KQorICAgIC8vIFdlIGxvYWQgdGhlIGZyYW1lIHBvaW50ZXIgbWFu
dWFsbHksIGJ1dCB3ZSBuZWVkIHRvIGFzayB0aGUKKyAgICAvLyBhbGdvcml0aG0gdG8gbW92ZSB0
aGUgcmV0dXJuIFBDIGZvciB1cyAoaXQnZCBwcm9iYWJseQorICAgIC8vIHJlcXVpcmUgYSB3cml0
ZSB0byB0aGUgZGFuZ2VyIHpvbmUpLiBTaW5jZSBpdCdkIGJlIGF3a3dhcmQKKyAgICAvLyB0byBh
c2sgZm9yIGhhbGYgYSB2YWx1ZSBtb3ZlLCB3ZSBhc2sgdGhhdCB0aGUgd2hvbGUgdGhpbmcKKyAg
ICAvLyBiZSBtb3ZlZCBmb3IgdXMuCisgICAgYWRkTmV3KFZpcnR1YWxSZWdpc3RlciB7IDAgfSwK
KyAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKFZpcnR1YWxSZWdpc3Rl
cigwKSwgRGF0YUZvcm1hdEpTKSk7CisKKyAgICAvLyBzcCB3aWxsIHBvaW50IHRvIGhlYWQwIGFu
ZCB3ZSB3aWxsIG1vdmUgaXQgdXAgaGFsZiBhIHNsb3QKKyAgICAvLyBtYW51YWxseQorICAgIG1f
bmV3RnJhbWVPZmZzZXQgPSAwOworI2VsaWYgQ1BVKEFSTSkgfHwgQ1BVKFNINCkgfHwgQ1BVKE1J
UFMpCisgICAgLy8gV2UgbG9hZCB0aGUgdGhlIGZyYW1lIHBvaW50ZXIgYW5kIGxpbmsgcmVnaXN0
ZXIKKyAgICAvLyBtYW51YWxseS4gV2UgY291bGQgYXNrIHRoZSBhbGdvcml0aG0gdG8gbG9hZCB0
aGVtIGZvciB1cywKKyAgICAvLyBhbmQgaXQgd291bGQgYWxsb3cgdXMgdG8gdXNlIHRoZSBsaW5r
IHJlZ2lzdGVyIGFzIGFuIGV4dHJhCisgICAgLy8gdGVtcG9yYXJ5IC0gYnV0IGl0J2QgbWVhbiB0
aGF0IHRoZSBmcmFtZSBwb2ludGVyIGNhbiBhbHNvCisgICAgLy8gYmUgdXNlZCBhcyBhbiBleHRy
YSB0ZW1wb3JhcnksIHNvIHdlIGtlZXAgdGhlIGxpbmsgcmVnaXN0ZXIKKyAgICAvLyBsb2NrZWQg
aW5zdGVhZC4KKworICAgIC8vIHNwIHdpbGwgcG9pbnQgdG8gaGVhZDEgc2luY2UgdGhlIGNhbGxl
ZSdzIHByb2xvZ3VlIHB1c2hlcworICAgIC8vIHRoZSBjYWxsIGZyYW1lIGFuZCBsaW5rIHJlZ2lz
dGVyLgorICAgIG1fbmV3RnJhbWVPZmZzZXQgPSAtMTsKKyNlbGlmIENQVShBUk02NCkKKyAgICAv
LyBXZSBsb2FkIHRoZSBmcmFtZSBwb2ludGVyIGFuZCBsaW5rIHJlZ2lzdGVyIG1hbnVhbGx5LiBX
ZQorICAgIC8vIGNvdWxkIGFzayB0aGUgYWxnb3JpdGhtIHRvIGxvYWQgdGhlIGxpbmsgcmVnaXN0
ZXIgZm9yIHVzCisgICAgLy8gKHdoaWNoIHdvdWxkIGFsbG93IGZvciBpdHMgdXNlIGFzIGFuIGV4
dHJhIHRlbXBvcmFyeSksIGJ1dAorICAgIC8vIHNpbmNlIGl0cyBub3QgaW4gR1BSSW5mbywgd2Ug
Y2FuJ3QgZG8gaXQuCisKKyAgICAvLyBzcCB3aWxsIHBvaW50IHRvIGhlYWQyIHNpbmNlIHRoZSBj
YWxsZWUncyBwcm9sb2d1ZSBwdXNoZXMgdGhlCisgICAgLy8gY2FsbCBmcmFtZSBhbmQgbGluayBy
ZWdpc3RlcgorICAgIG1fbmV3RnJhbWVPZmZzZXQgPSAtMjsKKyNlbGlmIENQVShYODZfNjQpCisg
ICAgLy8gV2UgbG9hZCB0aGUgZnJhbWUgcG9pbnRlciBtYW51YWxseSwgYnV0IHdlIGFzayB0aGUK
KyAgICAvLyBhbGdvcml0aG0gdG8gbW92ZSB0aGUgcmV0dXJuIFBDIGZvciB1cyAoaXQnZCBwcm9i
YWJseQorICAgIC8vIHJlcXVpcmUgYSB3cml0ZSBpbiB0aGUgZGFuZ2VyIHpvbmUpCisgICAgYWRk
TmV3KFZpcnR1YWxSZWdpc3RlciB7IDEgfSwKKyAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxh
Y2VkSW5KU1N0YWNrKFZpcnR1YWxSZWdpc3RlcigxKSwgRGF0YUZvcm1hdEpTKSk7CisKKyAgICAv
LyBzcCB3aWxsIHBvaW50IHRvIGhlYWQxIHNpbmNlIHRoZSBjYWxsZWUncyBwcm9sb2d1ZSBwdXNo
ZXMKKyAgICAvLyB0aGUgY2FsbCBmcmFtZSByZWdpc3RlcgorICAgIG1fbmV3RnJhbWVPZmZzZXQg
PSAtMTsKKyNlbHNlCisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisjZW5kaWYKKwor
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCIgIEVtaXR0aW5nIGNvZGUgZm9yIGNv
bXB1dGluZyB0aGUgbmV3IGZyYW1lIGJhc2VcbiIpOworCisgICAgLy8gV2UgY29tcHV0ZSB0aGUg
bmV3IGZyYW1lIGJhc2UgYnkgZmlyc3QgY29tcHV0aW5nIHRoZSB0b3Agb2YgdGhlCisgICAgLy8g
b2xkIGZyYW1lICh0YWtpbmcgaW50byBhY2NvdW50IGFuIGFyZ3VtZW50IGNvdW50IGhpZ2hlciB0
aGFuCisgICAgLy8gdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzKSwgdGhlbiBzdWJzdHJhY3Rpbmcg
dG8gaXQgdGhlIGFsaWduZWQKKyAgICAvLyBuZXcgZnJhbWUgc2l6ZSAoYWRqdXN0ZWQpLgorICAg
IG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgSlNTdGFjazo6QXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9m
KFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgbV9uZXdGcmFtZUJhc2UpOworICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGFyZ3VtZW50Q291bnRPSyA9CisgICAgICAgIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwsIG1fbmV3RnJhbWVCYXNlLAorICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFy
YW1ldGVycygpKSk7CisgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpIC0gMSArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRl
clNpemUpLCBtX25ld0ZyYW1lQmFzZSk7CisgICAgbV9qaXQuYW5kMzIoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMigtc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSksIG1fbmV3RnJhbWVCYXNl
KTsKKyAgICBtX2ppdC5tdWwzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihS
ZWdpc3RlcikpLCBtX25ld0ZyYW1lQmFzZSwgbV9uZXdGcmFtZUJhc2UpOworICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgYXJndW1lbnRDb3VudE9LLmxp
bmsoJm1faml0KTsKKyAgICBtX2ppdC5tb3ZlKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKG1fYWxpZ25lZE9sZEZyYW1lU2l6ZSAqIHNpemVvZihSZWdpc3RlcikpLAorICAg
ICAgICBtX25ld0ZyYW1lQmFzZSk7CisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyAgICBtX2pp
dC5hZGRQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIG1fbmV3RnJhbWVCYXNlKTsKKyAg
ICBtX2ppdC5zdWJQdHIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoCisg
ICAgICAgICAgICAobV9hbGlnbmVkTmV3RnJhbWVTaXplICsgbV9uZXdGcmFtZU9mZnNldCkgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgCisgICAgICAgIG1fbmV3RnJhbWVCYXNlKTsKKworICAgIC8vIFdl
IGxvYWQgdGhlIGxpbmsgcmVnaXN0ZXIgbWFudWFsbHkgZm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBo
YXZlIG9uZQorI2lmIENQVShBUk0pIHx8IENQVShTSDQpIHx8IENQVShBUk02NCkKKyAgICBtX2pp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBv
aW50ZXJSZWdpc3Rlciwgc2l6ZW9mKHZvaWQqKSksCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjps
aW5rUmVnaXN0ZXIpOworI2VsaWYgQ1BVKE1JUFMpCisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIHNp
emVvZih2b2lkKikpLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmV0dXJuQWRkcmVzc1JlZ2lz
dGVyKTsKKyNlbmRpZgorCisgICAgLy8gV2Ugd2FudCB0aGUgZnJhbWUgcG9pbnRlciB0byBhbHdh
eXMgcG9pbnQgdG8gYSB2YWxpZCBmcmFtZSwgYW5kCisgICAgLy8gd2UgYXJlIGdvaW5nIHRvIHRy
YXNoIHRoZSBjdXJyZW50IG9uZS4gTGV0J3MgbWFrZSBpdCBwb2ludCB0bworICAgIC8vIG91ciBj
YWxsZXIncyBmcmFtZSwgc2luY2UgdGhhdCdzIHdoYXQgd2Ugd2FudCB0byBlbmQgdXAgd2l0aC4K
KyAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVy
OjpmcmFtZVBvaW50ZXJSZWdpc3RlciksCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBv
aW50ZXJSZWdpc3Rlcik7CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiUHJl
cGFyaW5nIGZyYW1lIGZvciB0YWlsIGNhbGw6XG4iLCAqdGhpcyk7CisKKyAgICBwcmVwYXJlQW55
KCk7CisKKyNpZiBDUFUoWDg2KQorICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCIg
IFNpbXVsYXRpbmcgcG9wIG9mIHRoZSBjYWxsIGZyYW1lIHJlZ2lzdGVyXG4iKTsKKyAgICBtX2pp
dC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2Yodm9pZCopKSwgTWFj
cm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyNlbmRpZgorCisgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgIGRhdGFMb2coIlJlYWR5IGZvciB0YWlsIGNhbGwhXG4iKTsKK30KKwor
Ym9vbCBDYWxsRnJhbWVTaHVmZmxlcjo6dHJ5V3JpdGVzKENhY2hlZFJlY292ZXJ5JiBjYWNoZWRS
ZWNvdmVyeSkKK3sKKyAgICBBU1NFUlQobV9uZXdGcmFtZUJhc2UgIT0gSW52YWxpZEdQUlJlZyk7
CisKKyAgICAvLyBJZiB0aGUgdmFsdWUgaXMgYWxyZWFkeSBzZXQgdXAgY29ycmVjdGx5LCB3ZSBk
b24ndCBoYXZlCisgICAgLy8gYW55dGhpbmcgdG8gZG8uCisgICAgaWYgKGlzU2xvd1BhdGgoKSAm
JiBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmlzSW5KU1N0YWNrKCkKKyAgICAgICAgJiYgY2Fj
aGVkUmVjb3ZlcnkudGFyZ2V0cygpLnNpemUoKSA9PSAxCisgICAgICAgICYmIG5ld0FzT2xkKGNh
Y2hlZFJlY292ZXJ5LnRhcmdldHMoKVswXSkgPT0gY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS52
aXJ0dWFsUmVnaXN0ZXIoKSkgeworICAgICAgICBjYWNoZWRSZWNvdmVyeS5jbGVhclRhcmdldHMo
KTsKKyAgICAgICAgaWYgKCFjYWNoZWRSZWNvdmVyeS53YW50ZWRKU1ZhbHVlUmVncygpICYmIGNh
Y2hlZFJlY292ZXJ5LndhbnRlZEZQUigpID09IEludmFsaWRGUFJSZWcpCisgICAgICAgICAgICBj
bGVhckNhY2hlZFJlY292ZXJ5KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIWNhbkxvYWRBbmRCb3goY2FjaGVkUmVjb3Zl
cnkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBlbWl0TG9hZChjYWNoZWRSZWNvdmVy
eSk7CisgICAgZW1pdEJveChjYWNoZWRSZWNvdmVyeSk7CisgICAgQVNTRVJUKGNhY2hlZFJlY292
ZXJ5LnJlY292ZXJ5KCkuaXNJblJlZ2lzdGVycygpCisgICAgICAgIHx8IGNhY2hlZFJlY292ZXJ5
LnJlY292ZXJ5KCkuaXNDb25zdGFudCgpKTsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBk
YXRhTG9nKCIgICAqIFN0b3JpbmcgIiwgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKSk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBjYWNoZWRSZWNvdmVyeS50YXJnZXRzKCkuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHRhcmdldCB7IGNhY2hlZFJlY292ZXJ5LnRh
cmdldHMoKVtpXSB9OworICAgICAgICBBU1NFUlQoIWlzRGFuZ2VyTmV3KHRhcmdldCkpOworICAg
ICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIWkgPyAiIGludG8gIiA6ICIs
IGFuZCAiLCAiTkVXICIsIHRhcmdldCk7CisgICAgICAgIGVtaXRTdG9yZShjYWNoZWRSZWNvdmVy
eSwgYWRkcmVzc0Zvck5ldyh0YXJnZXQpKTsKKyAgICAgICAgc2V0TmV3KHRhcmdldCwgbnVsbHB0
cik7CisgICAgfQorICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJcbiIpOworICAg
IGNhY2hlZFJlY292ZXJ5LmNsZWFyVGFyZ2V0cygpOworICAgIGlmICghY2FjaGVkUmVjb3Zlcnku
d2FudGVkSlNWYWx1ZVJlZ3MoKSAmJiBjYWNoZWRSZWNvdmVyeS53YW50ZWRGUFIoKSA9PSBJbnZh
bGlkRlBSUmVnKQorICAgICAgICBjbGVhckNhY2hlZFJlY292ZXJ5KGNhY2hlZFJlY292ZXJ5LnJl
Y292ZXJ5KCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ2FsbEZyYW1lU2h1ZmZs
ZXI6OnBlcmZvcm1TYWZlV3JpdGVzKCkKK3sKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RTYWZl
OworICAgIFZpcnR1YWxSZWdpc3RlciBlbmQgeyBsYXN0TmV3KCkgKyAxIH07CisgICAgVmVjdG9y
PFZpcnR1YWxSZWdpc3Rlcj4gZmFpbHVyZXM7CisKKyAgICAvLyBGb3IgYWxsIGNhY2hlZFJlY292
ZXJpZXMgdGhhdCB3cml0ZXMgdG8gdGhlIHNhZmUgem9uZSwgaWYgaXQKKyAgICAvLyBkb2Vzbid0
IGFsc28gd3JpdGUgdG8gdGhlIGRhbmdlciB6b25lLCB3ZSB0cnkgdG8gcGVyZm9ybQorICAgIC8v
IHRoZSB3cml0ZXMuIFRoaXMgbWF5IGZyZWUgdXAgZGFuZ2VyIHNsb3RzLCBzbyB3ZSBpdGVyYXRl
CisgICAgLy8gYWdhaW4gdW50aWwgaXQgZG9lc24ndCBoYXBwZW4gYW55bW9yZS4KKyAgICAvLwor
ICAgIC8vIE5vdGUgdGhhdCBldmVuIHRob3VnaCB3ZSBoYXZlIGEgd2hpbGUgYmxvY2ssIHdlIGxv
b2sgYXQKKyAgICAvLyBlYWNoIHNsb3Qgb2YgdGhlIG5ldyBjYWxsIGZyYW1lIGF0IG1vc3Qgb25j
ZSBzaW5jZSBpbiBlYWNoCisgICAgLy8gaXRlcmF0aW9uIGJleW9uZCB0aGUgZmlyc3QsIHdlIG9u
bHkgbG9hZCB1cCB0aGUgcG9ydGlvbiBvZgorICAgIC8vIHRoZSBuZXcgY2FsbCBmcmFtZSB0aGF0
IHdhcyBkYW5nZXJvdXMgYW5kIGJlY2FtZSBzYWZlIGR1ZQorICAgIC8vIHRvIHRoZSBwcmV2aW91
cyBpdGVyYXRpb24uCisgICAgZG8geworICAgICAgICBmaXJzdFNhZmUgPSBkYW5nZXJGcm9udGll
cigpICsgMTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgIFRy
eWluZyBzYWZlIHdyaXRlcyAoYmV0d2VlbiBORVcgIiwgZmlyc3RTYWZlLCAiIGFuZCBORVcgIiwg
ZW5kIC0gMSwgIilcbiIpOworICAgICAgICBib29sIGRpZFByb2dyZXNzID0gZmFsc2U7CisgICAg
ICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIHJlZyA9IGZpcnN0U2FmZTsgcmVnIDwgZW5kOyByZWcg
Kz0gMSkgeworICAgICAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5ID0gZ2V0
TmV3KHJlZyk7CisgICAgICAgICAgICBpZiAoIWNhY2hlZFJlY292ZXJ5KSB7CisgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICsgIiwg
cmVnLCAiIGlzIE9LLlxuIik7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoIWhhc09ubHlTYWZlV3JpdGVzKCpjYWNoZWRSZWNvdmVyeSkp
IHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICAtICIsIGNhY2hlZFJlY292ZXJ5LT5yZWNvdmVyeSgpLCAiIHdyaXRlcyB0byBO
RVcgIiwgcmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgIiBidXQgYWxzbyBoYXMgZGFuZ2Vy
b3VzIHdyaXRlcy5cbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS0+d2Fu
dGVkSlNWYWx1ZVJlZ3MoKSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIC0gIiwgY2FjaGVkUmVjb3ZlcnktPnJlY292ZXJ5
KCksICIgd3JpdGVzIHRvIE5FVyAiLCByZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAiIGJ1
dCBpcyBhbHNvIG5lZWRlZCBpbiByZWdpc3RlcnMuXG4iKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
Y2FjaGVkUmVjb3ZlcnktPndhbnRlZEZQUigpICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAt
ICIsIGNhY2hlZFJlY292ZXJ5LT5yZWNvdmVyeSgpLCAiIHdyaXRlcyB0byBORVcgIiwgcmVnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIiBidXQgaXMgYWxzbyBuZWVkZWQgaW4gYW4gRlBSLlxu
Iik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKCF0cnlXcml0ZXMoKmNhY2hlZFJlY292ZXJ5KSkgewor
ICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCIgICAtIFVuYWJsZSB0byB3cml0ZSB0byBORVcgIiwgcmVnLCAiIGZyb20gIiwgY2FjaGVkUmVj
b3ZlcnktPnJlY292ZXJ5KCksICJcbiIpOworICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVu
ZChyZWcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGlkUHJvZ3Jlc3MgPSB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIGVuZCA9IGZpcnN0U2FmZTsKKworICAgICAgICAvLyBJZiB3ZSBo
YXZlIGNhY2hlZFJlY292ZXJpZXMgdGhhdCBmYWlsZWQgdG8gd3JpdGUsIGl0IGlzCisgICAgICAg
IC8vIGJlY2F1c2UgdGhleSBhcmUgb24gdGhlIHN0YWNrIGFuZCB3ZSBkaWRuJ3QgaGF2ZSBlbm91
Z2gKKyAgICAgICAgLy8gcmVnaXN0ZXJzIGF2YWlsYWJsZSBhdCB0aGUgdGltZSB0byBsb2FkIHRo
ZW0gaW50by4gSWYKKyAgICAgICAgLy8gd2UgaGF2ZSBhIGZyZWUgcmVnaXN0ZXIsIHdlIHNob3Vs
ZCB0cnkgYWdhaW4gYmVjYXVzZSBpdAorICAgICAgICAvLyBjb3VsZCBmcmVlIHVwIHNvbWUgZGFu
Z2VyIHNsb3RzLgorICAgICAgICBpZiAoZGlkUHJvZ3Jlc3MgJiYgaGFzRnJlZVJlZ2lzdGVyKCkp
IHsKKyAgICAgICAgICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+IHN0aWxsRmFpbGluZzsKKyAg
ICAgICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIGZhaWxlZCA6IGZhaWx1cmVzKSB7CisgICAg
ICAgICAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5ID0gZ2V0TmV3KGZhaWxl
ZCk7CisgICAgICAgICAgICAgICAgLy8gSXQgY291bGQgaGF2ZSBiZWVuIGhhbmRsZWQgbGF0ZXIg
aWYgaXQgaGFkCisgICAgICAgICAgICAgICAgLy8gc2V2ZXJhbCB0YXJnZXRzCisgICAgICAgICAg
ICAgICAgaWYgKCFjYWNoZWRSZWNvdmVyeSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgICAgICAgICBBU1NFUlQoaGFzT25seVNhZmVXcml0ZXMoKmNhY2hlZFJlY292
ZXJ5KQorICAgICAgICAgICAgICAgICAgICAmJiAhY2FjaGVkUmVjb3ZlcnktPndhbnRlZEpTVmFs
dWVSZWdzKCkKKyAgICAgICAgICAgICAgICAgICAgJiYgY2FjaGVkUmVjb3ZlcnktPndhbnRlZEZQ
UigpID09IEludmFsaWRGUFJSZWcpOworICAgICAgICAgICAgICAgIGlmICghdHJ5V3JpdGVzKCpj
YWNoZWRSZWNvdmVyeSkpCisgICAgICAgICAgICAgICAgICAgIHN0aWxsRmFpbGluZy5hcHBlbmQo
ZmFpbGVkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZhaWx1cmVzID0gV1RGOjptb3Zl
KHN0aWxsRmFpbGluZyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZlcmJvc2UgJiYgZmlyc3RT
YWZlICE9IGRhbmdlckZyb250aWVyKCkgKyAxKQorICAgICAgICAgICAgZGF0YUxvZygiICBXZSBm
cmVlZCB1cCBkYW5nZXIgc2xvdHMhXG4iKTsKKyAgICB9IHdoaWxlIChmaXJzdFNhZmUgIT0gZGFu
Z2VyRnJvbnRpZXIoKSArIDEpOworCisgICAgcmV0dXJuIGZhaWx1cmVzLmlzRW1wdHkoKTsKK30K
Kwordm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6cHJlcGFyZUFueSgpCit7CisgICAgQVNTRVJUKCFp
c1VuZGVjaWRlZCgpKTsKKworICAgIHVwZGF0ZURhbmdlckZyb250aWVyKCk7CisKKyAgICAvLyBG
aXJzdCwgd2UgdHJ5IHRvIHN0b3JlIGFueSB2YWx1ZSB0aGF0IGdvZXMgYWJvdmUgdGhlIGRhbmdl
cgorICAgIC8vIGZyb250aWVyLiBUaGlzIHdpbGwgbmV2ZXIgdXNlIG1vcmUgcmVnaXN0ZXJzIHNp
bmNlIHdlIGFyZSBvbmx5CisgICAgLy8gbG9hZGluZytzdG9yaW5nIGlmIHdlIGVuc3VyZSB0aGF0
IGFueSByZWdpc3RlciB1c2VkIGZvciB0aGUgbG9hZAorICAgIC8vIHdpbGwgYmUgZnJlZWQgdXAg
YWZ0ZXIgdGhlIHN0b3JlcyAoaS5lLiwgYWxsIHN0b3JlcyBhcmUgYWJvdmUKKyAgICAvLyB0aGUg
ZGFuZ2VyIGZyb250aWVyLCBhbmQgdGhlcmUgaXMgbm8gd2FudGVkIHJlZ2lzdGVyKS4KKyAgICBw
ZXJmb3JtU2FmZVdyaXRlcygpOworCisgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgY291bGRuJ3Qg
aGF2ZSBtb3JlIGF2YWlsYWJsZSByZWdpc3RlcnMgdGhhbgorICAgIC8vIHdlIGhhdmUgd2l0aG91
dGggc3BpbGxpbmc6IGFsbCB2YWx1ZXMgY3VycmVudGx5IGluIHJlZ2lzdGVycworICAgIC8vIGVp
dGhlciByZXF1aXJlIGEgd3JpdGUgdG8gdGhlIGRhbmdlciB6b25lLCBvciBoYXZlIGEgd2FudGVk
CisgICAgLy8gcmVnaXN0ZXIsIHdoaWNoIG1lYW5zIHRoYXQgaW4gYW55IGNhc2UgdGhleSB3aWxs
IGhhdmUgdG8gZ28KKyAgICAvLyB0aHJvdWdoIHJlZ2lzdGVycyBhZ2Fpbi4KKworICAgIC8vIFdl
IG5vdyBzbG93bHkgZnJlZSB1cCB0aGUgZGFuZ2VyIHpvbmUgYnkgZmlyc3QgbG9hZGluZyB0aGUg
b2xkCisgICAgLy8gdmFsdWUgb24gdGhlIGRhbmdlciBmcm9udGllciwgc3BpbGxpbmcgYXMgbWFu
eSByZWdpc3RlcnMgYXMKKyAgICAvLyBuZWVkZWQgdG8gZG8gc28gYW5kIGVuc3VyaW5nIHRoYXQg
dGhlIGNvcnJlc3BvbmRpbmcgc2xvdCBpbiB0aGUKKyAgICAvLyBuZXcgZnJhbWUgaXMgbm93IHJl
YWR5IHRvIGJlIHdyaXR0ZW4uIFRoZW4sIHdlIHN0b3JlIHRoZSBvbGQKKyAgICAvLyB2YWx1ZSB0
byBpdHMgdGFyZ2V0IGxvY2F0aW9uIGlmIHBvc3NpYmxlICh3ZSBjb3VsZCBoYXZlIGZhaWxlZAor
ICAgIC8vIHRvIGxvYWQgaXQgcHJldmlvdXNseSBkdWUgdG8gaGlnaCBwcmVzc3VyZSkuIEZpbmFs
bHksIHdlIHdyaXRlCisgICAgLy8gdG8gYW55IG9mIHRoZSBuZXdseSBzYWZlIHNsb3RzIHRoYXQg
d2UgY2FuLCB3aGljaCBjb3VsZCBmcmVlIHVwCisgICAgLy8gcmVnaXN0ZXJzIChoZW5jZSB3aHkg
d2UgZG8gaXQgZWFnZXJseSkuCisgICAgZm9yIChWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gZGFuZ2Vy
RnJvbnRpZXIoKTsgcmVnID49IGZpcnN0TmV3KCk7IHJlZyAtPSAxKSB7CisgICAgICAgIGlmIChy
ZWcgPT0gZGFuZ2VyRnJvbnRpZXIoKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICAgICAgZGF0YUxvZygiICBOZXh0IHNsb3QgKE5FVyAiLCByZWcsICIpIGlzIHRoZSBk
YW5nZXIgZnJvbnRpZXJcbiIpOworICAgICAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJl
Y292ZXJ5IHsgZ2V0T2xkKG5ld0FzT2xkKGRhbmdlckZyb250aWVyKCkpKSB9OworICAgICAgICAg
ICAgQVNTRVJUKGNhY2hlZFJlY292ZXJ5KTsKKyAgICAgICAgICAgIGVuc3VyZUxvYWQoKmNhY2hl
ZFJlY292ZXJ5KTsKKyAgICAgICAgICAgIGVtaXRMb2FkKCpjYWNoZWRSZWNvdmVyeSk7CisgICAg
ICAgICAgICBlbnN1cmVCb3goKmNhY2hlZFJlY292ZXJ5KTsKKyAgICAgICAgICAgIGVtaXRCb3go
KmNhY2hlZFJlY292ZXJ5KTsKKyAgICAgICAgICAgIGlmIChoYXNPbmx5U2FmZVdyaXRlcygqY2Fj
aGVkUmVjb3ZlcnkpKQorICAgICAgICAgICAgICAgIHRyeVdyaXRlcygqY2FjaGVkUmVjb3Zlcnkp
OworICAgICAgICB9IGVsc2UgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgIE5l
eHQgc2xvdCBpcyBORVcgIiwgcmVnLCAiXG4iKTsKKworICAgICAgICBBU1NFUlQoIWlzRGFuZ2Vy
TmV3KHJlZykpOworICAgICAgICBDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkgPSBnZXRO
ZXcocmVnKTsKKyAgICAgICAgLy8gVGhpcyBjb3VsZCBiZSBvbmUgb2YgdGhlIGhlYWRlciBzbG90
cyB3ZSBkb24ndCBjYXJlIGFib3V0LgorICAgICAgICBpZiAoIWNhY2hlZFJlY292ZXJ5KSB7Cisg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICArICIs
IHJlZywgIiBpcyBPS1xuIik7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChjYW5Mb2FkQW5kQm94KCpjYWNoZWRSZWNvdmVyeSkgJiYgaGFzT25seVNhZmVX
cml0ZXMoKmNhY2hlZFJlY292ZXJ5KQorICAgICAgICAgICAgJiYgIWNhY2hlZFJlY292ZXJ5LT53
YW50ZWRKU1ZhbHVlUmVncygpCisgICAgICAgICAgICAmJiBjYWNoZWRSZWNvdmVyeS0+d2FudGVk
RlBSKCkgPT0gSW52YWxpZEZQUlJlZykgeworICAgICAgICAgICAgZW1pdExvYWQoKmNhY2hlZFJl
Y292ZXJ5KTsKKyAgICAgICAgICAgIGVtaXRCb3goKmNhY2hlZFJlY292ZXJ5KTsKKyAgICAgICAg
ICAgIGJvb2wgd3JpdGVzT0sgPSB0cnlXcml0ZXMoKmNhY2hlZFJlY292ZXJ5KTsKKyAgICAgICAg
ICAgIEFTU0VSVF9VTlVTRUQod3JpdGVzT0ssIHdyaXRlc09LKTsKKyAgICAgICAgfSBlbHNlIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICAgLSAiLCBjYWNoZWRSZWNvdmVyeS0+
cmVjb3ZlcnkoKSwgIiBjYW4ndCBiZSBoYW5kbGVkIGp1c3QgeWV0LlxuIik7CisgICAgfQorICAg
IEFTU0VSVChkYW5nZXJGcm9udGllcigpIDwgZmlyc3ROZXcoKSk7CisKKyAgICAvLyBOb3csIHRo
ZSBkYW5nZXIgem9uZSBpcyBlbXB0eSwgYnV0IHdlIHN0aWxsIGhhdmUgYSBjb3VwbGUgb2YKKyAg
ICAvLyB0aGluZ3MgdG8gZG86CisgICAgLy8KKyAgICAvLyAxKSBUaGVyZSBjb3VsZCBiZSByZW1h
aW5pbmcgc2FmZSB3cml0ZXMgdGhhdCBmYWlsZWQgZWFybGllciBkdWUKKyAgICAvLyAgICB0byBo
aWdoIHJlZ2lzdGVyIHByZXNzdXJlIGFuZCBoYWQgbm90aGluZyB0byBkbyB3aXRoIHRoZQorICAg
IC8vICAgIGRhbmdlciB6b25lIHdoYXRzb2V2ZXIuCisgICAgLy8KKyAgICAvLyAyKSBTb21lIHdh
bnRlZCByZWdpc3RlcnMgY291bGQgaGF2ZSB0byBiZSBsb2FkZWQgKHRoaXMgY291bGQKKyAgICAv
LyAgICBoYXBwZW4gZWl0aGVyIHdoZW4gbWFraW5nIGEgY2FsbCB0byBhIG5ldyBmdW5jdGlvbiB3
aXRoIGEKKyAgICAvLyAgICBsb3dlciBudW1iZXIgb2YgYXJndW1lbnRzIC0gc2luY2UgYWJvdmUg
aGVyZSwgd2Ugb25seSBsb2FkCisgICAgLy8gICAgd2FudGVkIHJlZ2lzdGVycyB3aGVuIHRoZXkg
YXJlIGF0IHRoZSBkYW5nZXIgZnJvbnRpZXIgLSwgb3IKKyAgICAvLyAgICBpZiBhIHdhbnRlZCBy
ZWdpc3RlciBnb3Qgc3BpbGxlZCkuCisgICAgLy8KKyAgICAvLyAzKSBTb21lIHdhbnRlZCByZWdp
c3RlcnMgY291bGQgaGF2ZSBiZWVuIGxvYWRlZCBpbiB0aGUgd3JvbmcKKyAgICAvLyAgICByZWdp
c3RlcnMKKyAgICAvLworICAgIC8vIDQpIFdlIGhhdmUgdG8gdGFrZSBjYXJlIG9mIHNvbWUgYm9v
a2tlZXBpbmcgLSBuYW1lbHksIHN0b3JpbmcKKyAgICAvLyAgICB0aGUgYXJndW1lbnQgY291bnQg
YW5kIHVwZGF0aW5nIHRoZSBzdGFjayBwb2ludGVyLgorCisgICAgLy8gQXQgdGhpcyBwb2ludCwg
d2UgbXVzdCBoYXZlIGVub3VnaCByZWdpc3RlcnMgYXZhaWxhYmxlIGZvcgorICAgIC8vIGhhbmRs
aW5nIDEpLiBOb25lIG9mIHRoZSBsb2FkcyBjYW4gZmFpbCBiZWNhdXNlIHdlIGhhdmUgYmVlbgor
ICAgIC8vIGVhZ2VybHkgZnJlZWluZyB1cCByZWdpc3RlcnMgaW4gYWxsIHRoZSBwcmV2aW91cyBw
aGFzZXMgLSBzbworICAgIC8vIHRoZSBvbmx5IHZhbHVlcyB0aGF0IGFyZSBpbiByZWdpc3RlcnMg
YXQgdGhpcyBwb2ludCBtdXN0IGhhdmUKKyAgICAvLyB3YW50ZWQgcmVnaXN0ZXJzLgorICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCIgIERhbmdlciB6b25lIGlzIGNsZWFyLCBwZXJm
b3JtaW5nIHJlbWFpbmluZyB3cml0ZXMuXG4iKTsKKyAgICBmb3IgKFZpcnR1YWxSZWdpc3RlciBy
ZWcgPSBmaXJzdE5ldygpOyByZWcgPD0gbGFzdE5ldygpOyByZWcgKz0gMSkgeworICAgICAgICBD
YWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkgeyBnZXROZXcocmVnKSB9OworICAgICAgICBp
ZiAoIWNhY2hlZFJlY292ZXJ5KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZW1p
dExvYWQoKmNhY2hlZFJlY292ZXJ5KTsKKyAgICAgICAgZW1pdEJveCgqY2FjaGVkUmVjb3Zlcnkp
OworICAgICAgICBib29sIHdyaXRlc09LID0gdHJ5V3JpdGVzKCpjYWNoZWRSZWNvdmVyeSk7Cisg
ICAgICAgIEFTU0VSVF9VTlVTRUQod3JpdGVzT0ssIHdyaXRlc09LKTsKKyAgICB9CisKKyAgICAv
LyBIYW5kbGUgMikgYnkgbG9hZGluZyBhbGwgcmVnaXN0ZXJzLiBXZSBkb24ndCBoYXZlIHRvIGRv
IGFueQorICAgIC8vIHdyaXRlcywgc2luY2UgdGhleSBoYXZlIGJlZW4gdGFrZW4gY2FyZSBvZiBh
Ym92ZS4KKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiICBMb2FkaW5nIHdhbnRl
ZCByZWdpc3RlcnMgaW50byByZWdpc3RlcnNcbiIpOworICAgIGZvciAoUmVnIHJlZyA9IFJlZzo6
Zmlyc3QoKTsgcmVnIDw9IFJlZzo6bGFzdCgpOyByZWcgPSByZWcubmV4dCgpKSB7CisgICAgICAg
IENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSB7IG1fbmV3UmVnaXN0ZXJzW3JlZ10gfTsK
KyAgICAgICAgaWYgKCFjYWNoZWRSZWNvdmVyeSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIGVtaXRMb2FkKCpjYWNoZWRSZWNvdmVyeSk7CisgICAgICAgIGVtaXRCb3goKmNhY2hl
ZFJlY292ZXJ5KTsKKyAgICAgICAgQVNTRVJUKGNhY2hlZFJlY292ZXJ5LT50YXJnZXRzKCkuaXNF
bXB0eSgpKTsKKyAgICB9CisKKyAgICAvLyBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIHJlYWQgZXZl
cnl0aGluZyB3ZSBjYXJlZCBhYm91dCBmcm9tIHRoZQorICAgIC8vIHN0YWNrLCBhbmQgd3JpdHRl
biBldmVyeXRoaW5nIHdlIGhhZCB0byB0byB0aGUgc3RhY2suCisgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgIGRhdGFMb2coIiAgQ2FsbGVlIGZyYW1lIGlzIGZ1bGx5IHNldCB1cFxuIik7CisgICAg
aWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgZm9yIChWaXJ0dWFsUmVnaXN0ZXIgcmVn
ID0gZmlyc3ROZXcoKTsgcmVnIDw9IGxhc3ROZXcoKTsgcmVnICs9IDEpCisgICAgICAgICAgICBB
U1NFUlRfVU5VU0VEKHJlZywgIWdldE5ldyhyZWcpKTsKKworICAgICAgICBmb3IgKENhY2hlZFJl
Y292ZXJ5KiBjYWNoZWRSZWNvdmVyeSA6IG1fY2FjaGVkUmVjb3ZlcmllcykgeworICAgICAgICAg
ICAgQVNTRVJUX1VOVVNFRChjYWNoZWRSZWNvdmVyeSwgY2FjaGVkUmVjb3ZlcnktPnRhcmdldHMo
KS5pc0VtcHR5KCkpOworICAgICAgICAgICAgQVNTRVJUKCFjYWNoZWRSZWNvdmVyeS0+cmVjb3Zl
cnkoKS5pc0luSlNTdGFjaygpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFdlIG5lZWQg
dG8gaGFuZGxlIDQpIGZpcnN0IGJlY2F1c2UgaXQgaW1wbGllcyByZWxlYXNpbmcKKyAgICAvLyBt
X25ld0ZyYW1lQmFzZSwgd2hpY2ggY291bGQgYmUgYSB3YW50ZWQgcmVnaXN0ZXIuCisgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIiAgICogU3RvcmluZyB0aGUgYXJndW1lbnQgY291
bnQgaW50byAiLCBWaXJ0dWFsUmVnaXN0ZXIgeyBKU1N0YWNrOjpBcmd1bWVudENvdW50IH0sICJc
biIpOworICAgIG1faml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSwK
KyAgICAgICAgYWRkcmVzc0Zvck5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyBKU1N0YWNrOjpBcmd1bWVu
dENvdW50IH0pLndpdGhPZmZzZXQoVGFnT2Zmc2V0KSk7CisgICAgbV9qaXQuc3RvcmUzMihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGFyZ0NvdW50KCkpLAorICAgICAgICBhZGRyZXNzRm9y
TmV3KFZpcnR1YWxSZWdpc3RlciB7IEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgfSkud2l0aE9mZnNl
dChQYXlsb2FkT2Zmc2V0KSk7CisKKyAgICBpZiAoIWlzU2xvd1BhdGgoKSkgeworICAgICAgICBB
U1NFUlQobV9uZXdGcmFtZUJhc2UgIT0gTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgIFJlbGVh
c2luZyB0aGUgbmV3IGZyYW1lIGJhc2UgcG9pbnRlclxuIik7CisgICAgICAgIG1faml0Lm1vdmUo
bV9uZXdGcmFtZUJhc2UsIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgICAgIHJlbGVhc2VHUFIobV9uZXdGcmFtZUJhc2UpOworICAgIH0KKworICAgIC8vIEZpbmFs
bHkgd2UgaGFuZGxlIDMpCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIiAgRW5z
dXJpbmcgd2FudGVkIHJlZ2lzdGVycyBhcmUgaW4gdGhlIHJpZ2h0IHJlZ2lzdGVyXG4iKTsKKyAg
ICBmb3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0g
cmVnLm5leHQoKSkgeworICAgICAgICBDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkgeyBt
X25ld1JlZ2lzdGVyc1tyZWddIH07CisgICAgICAgIGlmICghY2FjaGVkUmVjb3ZlcnkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICBlbWl0RGlzcGxhY2UoKmNhY2hlZFJlY292ZXJ5
KTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZs
ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4zNDA2NWYwNzJkNWI4YzY1MTM4N2MwYjc0ZTdhYzA2ZTA5MjVkNWFmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5o
CkBAIC0wLDAgKzEsODI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQ2FsbEZyYW1lU2h1ZmZsZXJfaAorI2RlZmluZSBDYWxsRnJhbWVT
aHVmZmxlcl9oCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZs
ZURhdGEuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIlJlZ2lzdGVy
U2V0LmgiCisjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKKyNpbmNsdWRlICJWYWx1ZVJlY292
ZXJ5LmgiCisjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gQSBDYWNoZWRSZWNvdmVyeSBpcyBhIHdyYXBw
ZXIgYXJvdW5kIGEgVmFsdWVSZWNvdmVyeSB0aGF0IHJlY29yZHMgd2hlcmUgc2FpZAorLy8gdmFs
dWUgc2hvdWxkIGdvIG9uIHRoZSBzdGFjayBhbmQvb3IgaW4gcmVnaXN0ZXJzLiBXaGVuZXZlciB3
ZSBwZXJmb3JtIGFuCisvLyBvcGVyYXRpb24gY2hhbmdpbmcgdGhlIFZhbHVlUmVjb3ZlcnksIHdl
IHVwZGF0ZSB0aGUgQ2FjaGVkUmVjb3ZlcnkncyBtZW1iZXIKKy8vIGluIHBsYWNlLgorY2xhc3Mg
Q2FjaGVkUmVjb3ZlcnkgeworcHVibGljOgorICAgIENhY2hlZFJlY292ZXJ5KFZhbHVlUmVjb3Zl
cnkgcmVjb3ZlcnkpCisgICAgICAgIDogbV9yZWNvdmVyeSB7IHJlY292ZXJ5IH0KKyAgICB7Cisg
ICAgfQorCisgICAgQ2FjaGVkUmVjb3ZlcnkoQ2FjaGVkUmVjb3ZlcnkmKSA9IGRlbGV0ZTsKKyAg
ICBDYWNoZWRSZWNvdmVyeShDYWNoZWRSZWNvdmVyeSYmKSA9IGRlbGV0ZTsKKyAgICBDYWNoZWRS
ZWNvdmVyeSYgb3BlcmF0b3I9KENhY2hlZFJlY292ZXJ5JikgPSBkZWxldGU7CisgICAgQ2FjaGVk
UmVjb3ZlcnkmIG9wZXJhdG9yPShDYWNoZWRSZWNvdmVyeSYmKSA9IGRlbGV0ZTsKKworICAgIGNv
bnN0IFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXIsIDE+JiB0YXJnZXRzKCkgY29uc3QgeyByZXR1cm4g
bV90YXJnZXRzOyB9CisKKyAgICB2b2lkIGFkZFRhcmdldChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdGFyZ2V0cy5pc0VtcHR5KCkgfHwgbV90YXJnZXRzLmxh
c3QoKSA8IHJlZyk7CisgICAgICAgIG1fdGFyZ2V0cy5hcHBlbmQocmVnKTsKKyAgICB9CisKKyAg
ICB2b2lkIHJlbW92ZVRhcmdldChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQorICAgIHsKKyAgICAgICAg
QVNTRVJUX1VOVVNFRChyZWcsIG1fdGFyZ2V0cy5sYXN0KCkgPT0gcmVnKTsKKyAgICAgICAgbV90
YXJnZXRzLnNocmluayhtX3RhcmdldHMuc2l6ZSgpIC0gMSk7CisgICAgfQorCisgICAgdm9pZCBj
bGVhclRhcmdldHMoKQorICAgIHsKKyAgICAgICAgbV90YXJnZXRzLmNsZWFyKCk7CisgICAgfQor
CisgICAgdm9pZCBzZXRXYW50ZWRKU1ZhbHVlUmVncyhKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncykK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX3dhbnRlZEZQUiA9PSBJbnZhbGlkRlBSUmVnKTsKKyAg
ICAgICAgbV93YW50ZWRKU1ZhbHVlUmVncyA9IGpzVmFsdWVSZWdzOworICAgIH0KKworICAgIHZv
aWQgc2V0V2FudGVkRlBSKEZQUlJlZyBmcHIpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fd2Fu
dGVkSlNWYWx1ZVJlZ3MpOworICAgICAgICBtX3dhbnRlZEZQUiA9IGZwcjsKKyAgICB9CisKKyAg
ICAvLyBEZXRlcm1pbmUgd2hldGhlciBjb252ZXJ0aW5nIHRoaXMgcmVjb3ZlcnkgaW50byBhIEpT
VmFsdWUgd2lsbAorICAgIC8vIHJlcXVpcmUgYWRkaXRpb25hbCBHUFJzIGFuZC9vciBGUFJzLgor
ICAgIC8vIFRoaXMgaXMgZ3VhcmFudGVlZCB0byBvbmx5IGRlcGVuZCBvbiB0aGUgRGF0YUZvcm1h
dCwgYW5kIHRoZQorICAgIC8vIHJlc3VsdCBvZiB0aGVzZSBjYWxscyB3aWxsIHN0YXkgdmFsaWQg
YWZ0ZXIgbG9hZHMgYW5kL29yIHN0b3Jlcy4KKyAgICBib29sIGJveGluZ1JlcXVpcmVzR1BSKCkg
Y29uc3QKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgcmV0dXJuIHJlY292ZXJ5
KCkuZGF0YUZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGU7CisjZWxzZQorICAgICAgICByZXR1
cm4gZmFsc2U7CisjZW5kaWYKKyAgICB9CisgICAgYm9vbCBib3hpbmdSZXF1aXJlc0ZQUigpIGNv
bnN0CisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHN3aXRjaCAocmVjb3Zlcnko
KS5kYXRhRm9ybWF0KCkpIHsKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0SW50NTI6CisgICAgICAg
IGNhc2UgRGF0YUZvcm1hdFN0cmljdEludDUyOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
I2Vsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisgICAgfQorICAgIAorICAgIC8v
IFRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hhdCBraW5kIG9mIHJlZ2lzdGVyIHdlIG5lZWQg
dG8gYmUKKyAgICAvLyBhYmxlIHRvIGxvYWQgYSByZWNvdmVyeS4gV2Ugb25seSB1c2UgaXQgd2hl
biBhIGRpcmVjdCBsb2FkIGlzCisgICAgLy8gY3VycmVudGx5IGltcG9zc2libGUsIHRvIGRldGVy
bWluZSB3aGV0aGVyIHdlIHNob3VsZCBzcGlsbCBhCisgICAgLy8gR1BSIG9yIGFuIEZQUiBmb3Ig
bG9hZGluZyB0aGlzIHZhbHVlLgorICAgIGJvb2wgbG9hZHNJbnRvR1BSKCkgY29uc3Q7CisgICAg
Ym9vbCBsb2Fkc0ludG9GUFIoKSBjb25zdDsKKworICAgIFZhbHVlUmVjb3ZlcnkgcmVjb3Zlcnko
KSBjb25zdCB7IHJldHVybiBtX3JlY292ZXJ5OyB9CisKKyAgICB2b2lkIHNldFJlY292ZXJ5KFZh
bHVlUmVjb3ZlcnkgcmVjb3ZlcnkpIHsgbV9yZWNvdmVyeSA9IHJlY292ZXJ5OyB9CisKKyAgICBK
U1ZhbHVlUmVncyB3YW50ZWRKU1ZhbHVlUmVncygpIGNvbnN0IHsgcmV0dXJuIG1fd2FudGVkSlNW
YWx1ZVJlZ3M7IH0KKworICAgIEZQUlJlZyB3YW50ZWRGUFIoKSBjb25zdCB7IHJldHVybiBtX3dh
bnRlZEZQUjsgfQorcHJpdmF0ZToKKyAgICBWYWx1ZVJlY292ZXJ5IG1fcmVjb3Zlcnk7CisgICAg
SlNWYWx1ZVJlZ3MgbV93YW50ZWRKU1ZhbHVlUmVnczsKKyAgICBGUFJSZWcgbV93YW50ZWRGUFIg
eyBJbnZhbGlkRlBSUmVnIH07CisgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgMT4gbV90YXJn
ZXRzOworfTsKKworY2xhc3MgQ2FsbEZyYW1lU2h1ZmZsZXIgeworcHVibGljOgorICAgIENhbGxG
cmFtZVNodWZmbGVyKENDYWxsSGVscGVycyYsIGNvbnN0IENhbGxGcmFtZVNodWZmbGVEYXRhJik7
CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIC8vIEFueSByZWdp
c3RlciB0aGF0IGhhcyBiZWVuIGxvY2tlZCBvciBhY3F1aXJlZCBtdXN0IGJlIHJlbGVhc2VkCisg
ICAgLy8gYmVmb3JlIGNhbGxpbmcgcHJlcGFyZUZvclRhaWxDYWxsKCkgb3IgcHJlcGFyZUZvclNs
b3dQYXRoKCkuCisgICAgdm9pZCBsb2NrR1BSKEdQUlJlZyBncHIpCisgICAgeworICAgICAgICBB
U1NFUlQoIW1fbG9ja2VkUmVnaXN0ZXJzLmdldChncHIpKTsKKyAgICAgICAgbV9sb2NrZWRSZWdp
c3RlcnMuc2V0KGdwcik7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxv
ZygiICAgKiBMb2NraW5nICIsIGdwciwgIlxuIik7CisgICAgfQorCisgICAgR1BSUmVnIGFjcXVp
cmVHUFIoKQorICAgIHsKKyAgICAgICAgZW5zdXJlR1BSKCk7CisgICAgICAgIEdQUlJlZyBncHIg
eyBnZXRGcmVlR1BSKCkgfTsKKyAgICAgICAgQVNTRVJUKCFtX3JlZ2lzdGVyc1tncHJdKTsKKyAg
ICAgICAgbG9ja0dQUihncHIpOworICAgICAgICByZXR1cm4gZ3ByOworICAgIH0KKworICAgIHZv
aWQgcmVsZWFzZUdQUihHUFJSZWcgZ3ByKQorICAgIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsK
KyAgICAgICAgICAgIGlmIChtX2xvY2tlZFJlZ2lzdGVycy5nZXQoZ3ByKSkKKyAgICAgICAgICAg
ICAgICBkYXRhTG9nKCIgICAqIFJlbGVhc2luZyAiLCBncHIsICJcbiIpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICogIiwgZ3ByLCAiIHdhcyBub3QgbG9j
a2VkXG4iKTsKKyAgICAgICAgfQorICAgICAgICBtX2xvY2tlZFJlZ2lzdGVycy5jbGVhcihncHIp
OworICAgIH0KKworICAgIC8vIFlvdSBjYW4gb25seSB0YWtlIGEgc25hcHNob3QgaWYgdGhlIHJl
Y292ZXJ5IGhhcyBub3Qgc3RhcnRlZAorICAgIC8vIHlldC4gVGhlIG9ubHkgb3BlcmF0aW9ucyB0
aGF0IGFyZSB2YWxpZCBiZWZvcmUgdGFraW5nIGEKKyAgICAvLyBzbmFwc2hvdCBhcmUgbG9ja0dQ
UigpLCBhY3F1aXJlR1BSKCkgYW5kIHJlbGVhc2VHUFIoKS4KKyAgICAvLworICAgIC8vIExvY2tp
bmcgc3RhdHVzIGlzICpOT1QqIHByZXNlcnZlZCBieSB0aGUgc25hcHNob3Q6IGl0IG9ubHkKKyAg
ICAvLyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB3aGVyZSB0aGUKKyAgICAvLyBhcmd1bWVu
dHMvY2FsbGVlL2NhbGxlZS1zYXZlIHJlZ2lzdGVycyBhcmUgYnkgdGFraW5nIGludG8KKyAgICAv
LyBhY2NvdW50IGFueSBzcGlsbGluZyB0aGF0IGFjcXVpcmVHUFIoKSBjb3VsZCBoYXZlIGRvbmUu
CisgICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgc25hcHNob3QoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGlzVW5kZWNpZGVkKCkpOworCisgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRh
IGRhdGE7CisgICAgICAgIGRhdGEubnVtTG9jYWxzID0gbnVtTG9jYWxzKCk7CisgICAgICAgIGRh
dGEuY2FsbGVlID0gZ2V0TmV3KFZpcnR1YWxSZWdpc3RlciB7IEpTU3RhY2s6OkNhbGxlZSB9KS0+
cmVjb3ZlcnkoKTsKKyAgICAgICAgZGF0YS5hcmdzLnJlc2l6ZShhcmdDb3VudCgpKTsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdDb3VudCgpOyArK2kpCisgICAgICAgICAgICBk
YXRhLmFyZ3NbaV0gPSBnZXROZXcodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpLT5yZWNv
dmVyeSgpOworICAgICAgICBmb3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6
Omxhc3QoKTsgcmVnID0gcmVnLm5leHQoKSkgeworICAgICAgICAgICAgQ2FjaGVkUmVjb3Zlcnkq
IGNhY2hlZFJlY292ZXJ5IHsgbV9uZXdSZWdpc3RlcnNbcmVnXSB9OworICAgICAgICAgICAgaWYg
KCFjYWNoZWRSZWNvdmVyeSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgICAgICAgICBkYXRhLnJlZ2lzdGVyc1tyZWddID0gY2FjaGVkUmVjb3Zl
cnktPnJlY292ZXJ5KCk7CisjZWxzZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIHJldHVybiBXVEY6Om1vdmUoZGF0
YSk7CisgICAgfQorCisgICAgLy8gQXNrIHRoZSBzaHVmZmxlciB0byBwdXQgdGhlIGNhbGxlZSBp
bnRvIHNvbWUgcmVnaXN0ZXJzIG9uY2UgdGhlCisgICAgLy8gc2h1ZmZsaW5nIGlzIGRvbmUuIFlv
dSBzaG91bGQgY2FsbCB0aGlzIGJlZm9yZSBhbnkgb2YgdGhlCisgICAgLy8gcHJlcGFyZSgpIG1l
dGhvZHMsIGFuZCBtdXN0IG5vdCB0YWtlIGEgc25hcHNob3QgYWZ0ZXJ3YXJkcywgYXMKKyAgICAv
LyB0aGlzIHdvdWxkIGNyYXNoIDMyYml0cyBwbGF0Zm9ybXMuCisgICAgdm9pZCBzZXRDYWxsZWVK
U1ZhbHVlUmVncyhKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncykKKyAgICB7CisgICAgICAgIEFTU0VS
VChpc1VuZGVjaWRlZCgpKTsKKyAgICAgICAgQVNTRVJUKCFnZXROZXcoanNWYWx1ZVJlZ3MpKTsK
KyAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5IHsgZ2V0TmV3KFZpcnR1YWxS
ZWdpc3RlcihKU1N0YWNrOjpDYWxsZWUpKSB9OworICAgICAgICBBU1NFUlQoY2FjaGVkUmVjb3Zl
cnkpOworICAgICAgICBhZGROZXcoanNWYWx1ZVJlZ3MsIGNhY2hlZFJlY292ZXJ5LT5yZWNvdmVy
eSgpKTsKKyAgICB9CisKKyAgICAvLyBBc2sgdGhlIHN1aGZmbGVyIHRvIGFzc3VtZSB0aGUgY2Fs
bGVlIGhhcyBhbHJlYWR5IGJlIGNoZWNrZWQgdG8KKyAgICAvLyBiZSBhIGNlbGwuIFRoaXMgaXMg
YSBuby1vcCBvbiA2NGJpdCBwbGF0Zm9ybXMsIGJ1dCBhbGxvd3MgdG8KKyAgICAvLyBmcmVlIHVw
IGEgR1BSIG9uIDMyYml0IHBsYXRmb3Jtcy4KKyAgICAvLyBZb3Ugb2J2aW91c2x5IG11c3QgaGF2
ZSBlbnN1cmVkIHRoYXQgdGhpcyBpcyB0aGUgY2FzZSBiZWZvcmUKKyAgICAvLyBydW5uaW5nIGFu
eSBvZiB0aGUgcHJlcGFyZSBtZXRob2RzLgorICAgIHZvaWQgYXNzdW1lQ2FsbGVlSXNDZWxsKCkK
KyAgICB7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgQ2FjaGVkUmVjb3ZlcnkmIGNh
bGxlZUNhY2hlZFJlY292ZXJ5IHsgKmdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6Q2Fs
bGVlKSkgfTsKKyAgICAgICAgc3dpdGNoIChjYWxsZWVDYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgp
LnRlY2huaXF1ZSgpKSB7CisgICAgICAgIGNhc2UgSW5QYWlyOgorICAgICAgICAgICAgdXBkYXRl
UmVjb3ZlcnkoCisgICAgICAgICAgICAgICAgY2FsbGVlQ2FjaGVkUmVjb3ZlcnksCisgICAgICAg
ICAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIoCisgICAgICAgICAgICAgICAgICAgIGNhbGxl
ZUNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkucGF5bG9hZEdQUigpLAorICAgICAgICAgICAgICAg
ICAgICBEYXRhRm9ybWF0Q2VsbCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICAgICAgdXBkYXRlUmVjb3ZlcnkoCisgICAgICAg
ICAgICAgICAgY2FsbGVlQ2FjaGVkUmVjb3ZlcnksCisgICAgICAgICAgICAgICAgVmFsdWVSZWNv
dmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAorICAgICAgICAgICAgICAgICAgICBjYWxsZWVDYWNo
ZWRSZWNvdmVyeS5yZWNvdmVyeSgpLnZpcnR1YWxSZWdpc3RlcigpLAorICAgICAgICAgICAgICAg
ICAgICBEYXRhRm9ybWF0Q2VsbCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
SW5GUFI6CisgICAgICAgIGNhc2UgVW5ib3hlZENlbGxJbkdQUjoKKyAgICAgICAgY2FzZSBDZWxs
RGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29u
c3RhbnQ6CisgICAgICAgICAgICBBU1NFUlQoY2FsbGVlQ2FjaGVkUmVjb3ZlcnkucmVjb3Zlcnko
KS5jb25zdGFudCgpLmlzQ2VsbCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBUaGlzIHdpbGwg
ZW1pdCBjb2RlIHRvIGJ1aWxkIHRoZSBuZXcgZnJhbWUgb3ZlciB0aGUgb2xkIG9uZS4KKyAgICB2
b2lkIHByZXBhcmVGb3JUYWlsQ2FsbCgpOworCisgICAgLy8gVGhpcyB3aWxsIGVtaXQgY29kZSB0
byBidWlsZCB0aGUgbmV3IGZyYW1lIGFzIGlmIHBlcmZvcm1pbmcgYQorICAgIC8vIHJlZ3VsYXIg
Y2FsbC4gSG93ZXZlciwgdGhlIGNhbGxlZSBzYXZlIHJlZ2lzdGVycyB3aWxsIGJlCisgICAgLy8g
cmVzdG9yZWQsIGFuZCBhbnkgbG9jYWxzIChub3QgdGhlIGhlYWRlciBvciBhcmd1bWVudHMpIG9m
IHRoZQorICAgIC8vIGN1cnJlbnQgZnJhbWUgY2FuIGJlIG92ZXJ3cml0dGVuLgorICAgIC8vCisg
ICAgLy8gQSBmcmFtZSBidWlsdCB1c2luZyBwcmVwYXJlRm9yU2xvd1BhdGgoKSBzaG91bGQgYmUg
dXNlZCBlaXRoZXIKKyAgICAvLyB0byB0aHJvdyBhbiBleGNlcHRpb24gaW4sIG9yIGRlc3Ryb3ll
ZCB1c2luZworICAgIC8vIENDYWxsSGVscGVyczo6cHJlcGFyZUZvclRhaWxDYWxsU2xvdygpIGZv
bGxvd2VkIGJ5IGEgdGFpbCBjYWxsLgorICAgIHZvaWQgcHJlcGFyZUZvclNsb3dQYXRoKCk7CisK
K3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCisgICAg
Q0NhbGxIZWxwZXJzJiBtX2ppdDsKKworICAgIHZvaWQgcHJlcGFyZUFueSgpOworCisgICAgdm9p
ZCBzcGlsbChDYWNoZWRSZWNvdmVyeSYpOworCisgICAgLy8gImJveCIgaXMgYXJndWFibHkgYSBi
YWQgbmFtZSBoZXJlLiBUaGUgbWVhbmluZyBpcyB0aGF0IGFmdGVyCisgICAgLy8gY2FsbGluZyBl
bWl0Qm94KCksIHlvdXIgZW5zdXJlIHRoYXQgc3Vic2VxdWVudGx5IGNhbGxpbmcKKyAgICAvLyBl
bWl0U3RvcmUoKSB3aWxsIGJlIGFibGUgdG8gc3RvcmUgdGhlIHZhbHVlIHdpdGhvdXQgYWRkaXRp
b25hbAorICAgIC8vIHRyYW5zZm9ybWF0aW9uLiBJbiBwYXJ0aWN1bGFyLCB0aGlzIGlzIGEgbm8t
b3AgZm9yIGNvbnN0YW50cywKKyAgICAvLyBhbmQgaXMgYSBjb21wbGV0ZSBuby1vcCBvbiAzMmJp
dHMgc2luY2UgYW55IHVuYm94ZWQgdmFsdWUgY2FuCisgICAgLy8gc3RpbGwgYmUgc3RvcmVkIGJ5
IHN0b3JpbmcgdGhlIHBheWxvYWQgYW5kIGEgc3RhdGljYWxseSBrbm93bgorICAgIC8vIHRhZy4K
KyAgICB2b2lkIGVtaXRCb3goQ2FjaGVkUmVjb3ZlcnkmKTsKKworICAgIGJvb2wgY2FuQm94KENh
Y2hlZFJlY292ZXJ5JiBjYWNoZWRSZWNvdmVyeSkKKyAgICB7CisgICAgICAgIGlmIChjYWNoZWRS
ZWNvdmVyeS5ib3hpbmdSZXF1aXJlc0dQUigpICYmIGdldEZyZWVHUFIoKSA9PSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChjYWNoZWRSZWNv
dmVyeS5ib3hpbmdSZXF1aXJlc0ZQUigpICYmIGdldEZyZWVGUFIoKSA9PSBJbnZhbGlkRlBSUmVn
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIHZvaWQgZW5zdXJlQm94KENhY2hlZFJlY292ZXJ5JiBjYWNoZWRSZWNvdmVyeSkK
KyAgICB7CisgICAgICAgIGlmIChjYW5Cb3goY2FjaGVkUmVjb3ZlcnkpKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS5ib3hpbmdSZXF1aXJlc0dQUigp
KQorICAgICAgICAgICAgZW5zdXJlR1BSKCk7CisKKyAgICAgICAgaWYgKGNhY2hlZFJlY292ZXJ5
LmJveGluZ1JlcXVpcmVzRlBSKCkpCisgICAgICAgICAgICBlbnN1cmVGUFIoKTsKKyAgICB9CisK
KyAgICB2b2lkIGVtaXRMb2FkKENhY2hlZFJlY292ZXJ5Jik7CisKKyAgICBib29sIGNhbkxvYWQo
Q2FjaGVkUmVjb3ZlcnkmKTsKKworICAgIHZvaWQgZW5zdXJlTG9hZChDYWNoZWRSZWNvdmVyeSYg
Y2FjaGVkUmVjb3ZlcnkpCisgICAgeworICAgICAgICBpZiAoY2FuTG9hZChjYWNoZWRSZWNvdmVy
eSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQVNTRVJUKGNhY2hlZFJlY292ZXJ5
LmxvYWRzSW50b0dQUigpIHx8IGNhY2hlZFJlY292ZXJ5LmxvYWRzSW50b0ZQUigpKTsKKworICAg
ICAgICBpZiAoY2FjaGVkUmVjb3ZlcnkubG9hZHNJbnRvRlBSKCkpIHsKKyAgICAgICAgICAgIGlm
IChjYWNoZWRSZWNvdmVyeS5sb2Fkc0ludG9HUFIoKSkKKyAgICAgICAgICAgICAgICBlbnN1cmVS
ZWdpc3RlcigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGVuc3VyZUZQUigp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGVuc3VyZUdQUigpOworICAgIH0KKworICAg
IGJvb2wgY2FuTG9hZEFuZEJveChDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3ZlcnkpCisgICAg
eworICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGludGVyZmVyaW5nIGxvYWRzICYgYm94ZXMKKyAg
ICAgICAgQVNTRVJUKCFjYWNoZWRSZWNvdmVyeS5sb2Fkc0ludG9GUFIoKSB8fCAhY2FjaGVkUmVj
b3ZlcnkuYm94aW5nUmVxdWlyZXNGUFIoKSk7CisgICAgICAgIEFTU0VSVCghY2FjaGVkUmVjb3Zl
cnkubG9hZHNJbnRvR1BSKCkgfHwgIWNhY2hlZFJlY292ZXJ5LmJveGluZ1JlcXVpcmVzR1BSKCkp
OworCisgICAgICAgIHJldHVybiBjYW5Mb2FkKGNhY2hlZFJlY292ZXJ5KSAmJiBjYW5Cb3goY2Fj
aGVkUmVjb3ZlcnkpOworICAgIH0KKworICAgIERhdGFGb3JtYXQgZW1pdFN0b3JlKENhY2hlZFJl
Y292ZXJ5JiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MpOworCisgICAgdm9pZCBlbWl0RGlzcGxh
Y2UoQ2FjaGVkUmVjb3ZlcnkmKTsKKworICAgIHZvaWQgZW1pdERlbHRhQ2hlY2soKTsKKworICAg
IEJhZzxDYWNoZWRSZWNvdmVyeT4gbV9jYWNoZWRSZWNvdmVyaWVzOworCisgICAgdm9pZCB1cGRh
dGVSZWNvdmVyeShDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3ZlcnksIFZhbHVlUmVjb3Zlcnkg
cmVjb3ZlcnkpCisgICAgeworICAgICAgICBjbGVhckNhY2hlZFJlY292ZXJ5KGNhY2hlZFJlY292
ZXJ5LnJlY292ZXJ5KCkpOworICAgICAgICBjYWNoZWRSZWNvdmVyeS5zZXRSZWNvdmVyeShyZWNv
dmVyeSk7CisgICAgICAgIHNldENhY2hlZFJlY292ZXJ5KHJlY292ZXJ5LCAmY2FjaGVkUmVjb3Zl
cnkpOworICAgIH0KKworICAgIENhY2hlZFJlY292ZXJ5KiBnZXRDYWNoZWRSZWNvdmVyeShWYWx1
ZVJlY292ZXJ5KTsKKworICAgIENhY2hlZFJlY292ZXJ5KiBzZXRDYWNoZWRSZWNvdmVyeShWYWx1
ZVJlY292ZXJ5LCBDYWNoZWRSZWNvdmVyeSopOworCisgICAgdm9pZCBjbGVhckNhY2hlZFJlY292
ZXJ5KFZhbHVlUmVjb3ZlcnkgcmVjb3ZlcnkpCisgICAgeworICAgICAgICBpZiAoIXJlY292ZXJ5
LmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHNldENhY2hlZFJlY292ZXJ5KHJlY292ZXJ5LCBu
dWxscHRyKTsKKyAgICB9CisKKyAgICBDYWNoZWRSZWNvdmVyeSogYWRkQ2FjaGVkUmVjb3Zlcnko
VmFsdWVSZWNvdmVyeSByZWNvdmVyeSkKKyAgICB7CisgICAgICAgIGlmIChyZWNvdmVyeS5pc0Nv
bnN0YW50KCkpCisgICAgICAgICAgICByZXR1cm4gbV9jYWNoZWRSZWNvdmVyaWVzLmFkZChyZWNv
dmVyeSk7CisgICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSA9IGdldENhY2hl
ZFJlY292ZXJ5KHJlY292ZXJ5KTsKKyAgICAgICAgaWYgKCFjYWNoZWRSZWNvdmVyeSkKKyAgICAg
ICAgICAgIHJldHVybiBzZXRDYWNoZWRSZWNvdmVyeShyZWNvdmVyeSwgbV9jYWNoZWRSZWNvdmVy
aWVzLmFkZChyZWNvdmVyeSkpOworICAgICAgICByZXR1cm4gY2FjaGVkUmVjb3Zlcnk7CisgICAg
fQorCisgICAgLy8gVGhpcyBpcyB0aGUgY3VycmVudCByZWNvdmVyaWVzIHByZXNlbnQgaW4gdGhl
IG9sZCBmcmFtZSdzCisgICAgLy8gc2xvdHMuIEEgbnVsbCBDYWNoZWRSZWNvdmVyeSBtZWFucyB3
ZSBjYW4gdHJhc2ggdGhlIGN1cnJlbnQKKyAgICAvLyB2YWx1ZSBhcyB3ZSBkb24ndCBjYXJlIGFi
b3V0IGl0LgorICAgIFZlY3RvcjxDYWNoZWRSZWNvdmVyeSo+IG1fb2xkRnJhbWU7CisKKyAgICBp
bnQgbnVtTG9jYWxzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29sZEZyYW1lLnNp
emUoKSAtIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplOworICAgIH0KKworICAgIENhY2hl
ZFJlY292ZXJ5KiBnZXRPbGQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX29sZEZyYW1lW0pTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplIC0gcmVn
Lm9mZnNldCgpIC0gMV07CisgICAgfQorCisgICAgdm9pZCBzZXRPbGQoVmlydHVhbFJlZ2lzdGVy
IHJlZywgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5KQorICAgIHsKKyAgICAgICAgbV9v
bGRGcmFtZVtKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSAtIHJlZy5vZmZzZXQoKSAtIDFd
ID0gY2FjaGVkUmVjb3Zlcnk7CisgICAgfQorCisgICAgVmlydHVhbFJlZ2lzdGVyIGZpcnN0T2xk
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIgeyBzdGF0aWNf
Y2FzdDxpbnQ+KC1udW1Mb2NhbHMoKSkgfTsKKyAgICB9CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
bGFzdE9sZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyIHsg
SlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1NpemUgLSAxIH07CisgICAgfQorCisgICAgYm9vbCBp
c1ZhbGlkT2xkKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gcmVnID49IGZpcnN0T2xkKCkgJiYgcmVnIDw9IGxhc3RPbGQoKTsKKyAgICB9CisKKyAgICAv
LyBUaGlzIHN0b3JlcywgZm9yIGVhY2ggc2xvdCBpbiB0aGUgbmV3IGZyYW1lLCBpbmZvcm1hdGlv
biBhYm91dAorICAgIC8vIHRoZSByZWNvdmVyeSBmb3IgdGhlIHZhbHVlIHRoYXQgc2hvdWxkIGV2
ZW50dWFsbHkgZ28gaW50byB0aGF0CisgICAgLy8gc2xvdC4KKyAgICAvLworICAgIC8vIE9uY2Ug
dGhlIHNsb3QgaGFzIGJlZW4gd3JpdHRlbiwgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4KKyAg
ICAvLyBtX25ld0ZyYW1lIHdpbGwgYmUgZW1wdHkuCisgICAgVmVjdG9yPENhY2hlZFJlY292ZXJ5
Kj4gbV9uZXdGcmFtZTsKKworICAgIHNpemVfdCBhcmdDb3VudCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9uZXdGcmFtZS5zaXplKCkgLSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJT
aXplOworICAgIH0KKworICAgIENhY2hlZFJlY292ZXJ5KiBnZXROZXcoVmlydHVhbFJlZ2lzdGVy
IG5ld1JlZ2lzdGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbmV3RnJhbWVbbmV3
UmVnaXN0ZXIub2Zmc2V0KCldOworICAgIH0KKworICAgIHZvaWQgc2V0TmV3KFZpcnR1YWxSZWdp
c3RlciBuZXdSZWdpc3RlciwgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5KQorICAgIHsK
KyAgICAgICAgbV9uZXdGcmFtZVtuZXdSZWdpc3Rlci5vZmZzZXQoKV0gPSBjYWNoZWRSZWNvdmVy
eTsKKyAgICB9CisKKyAgICB2b2lkIGFkZE5ldyhWaXJ0dWFsUmVnaXN0ZXIgbmV3UmVnaXN0ZXIs
IFZhbHVlUmVjb3ZlcnkgcmVjb3ZlcnkpCisgICAgeworICAgICAgICBDYWNoZWRSZWNvdmVyeSog
Y2FjaGVkUmVjb3ZlcnkgPSBhZGRDYWNoZWRSZWNvdmVyeShyZWNvdmVyeSk7CisgICAgICAgIGNh
Y2hlZFJlY292ZXJ5LT5hZGRUYXJnZXQobmV3UmVnaXN0ZXIpOworICAgICAgICBzZXROZXcobmV3
UmVnaXN0ZXIsIGNhY2hlZFJlY292ZXJ5KTsKKyAgICB9CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
Zmlyc3ROZXcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlciB7
IDAgfTsKKyAgICB9CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGFzdE5ldygpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyIHsgc3RhdGljX2Nhc3Q8aW50PihtX25l
d0ZyYW1lLnNpemUoKSkgLSAxIH07CisgICAgfQorCisgICAgYm9vbCBpc1ZhbGlkTmV3KFZpcnR1
YWxSZWdpc3RlciByZWcpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gcmVnID49IGZpcnN0
TmV3KCkgJiYgcmVnIDw9IGxhc3ROZXcoKTsKKyAgICB9CisKKworICAgIGludCBtX2FsaWduZWRP
bGRGcmFtZVNpemU7CisgICAgaW50IG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZTsKKworICAgIC8vIFRo
aXMgaXMgdGhlIGRpc3RhbmNlLCBpbiBzbG90cywgYmV0d2VlbiB0aGUgYmFzZSBvZiB0aGUgbmV3
CisgICAgLy8gZnJhbWUgYW5kIHRoZSBiYXNlIG9mIHRoZSBvbGQgZnJhbWUuIEl0IGNvdWxkIGJl
IG5lZ2F0aXZlIHdoZW4KKyAgICAvLyBwcmVwYXJpbmcgZm9yIGEgdGFpbCBjYWxsIHRvIGEgZnVu
Y3Rpb24gd2l0aCBzbWFsbGVyIGFyZ3VtZW50CisgICAgLy8gY291bnQuCisgICAgLy8KKyAgICAv
LyBXZSB3aWxsIG92ZXJ3cml0ZSB0aGlzIGFwcHJvcHJpYXRlbHkgZm9yIHNsb3cgcGF0aCBjYWxs
cywgYnV0CisgICAgLy8gd2UgaW5pdGlhbGl6ZSBpdCBhcyBpZiBkb2luZyBhIGZhc3QgcGF0aCBm
b3IgdGhlIHNwaWxscyB3ZQorICAgIC8vIGNvdWxkIGRvIHdoaWxlIHVuZGVjaWRlZCAodHlwaWNh
bGx5IHdoaWxlIGNhbGxpbmcgYWNxdWlyZUdQUigpCisgICAgLy8gZm9yIGEgcG9seW1vcnBoaWMg
Y2FsbCkuCisgICAgaW50IG1fZnJhbWVEZWx0YTsKKworICAgIFZpcnR1YWxSZWdpc3RlciBuZXdB
c09sZChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJl
ZyAtIG1fZnJhbWVEZWx0YTsKKyAgICB9CisKKyAgICAvLyBUaGlzIHN0b3JlcyB0aGUgc2V0IG9m
IGxvY2tlZCByZWdpc3RlcnMsIGkuZS4gcmVnaXN0ZXJzIGZvcgorICAgIC8vIHdoaWNoIHdlIGhh
dmUgYW4gaW1wbGljaXQgcmVxdWlyZW1lbnQgdGhhdCB0aGV5IGFyZSBub3QgY2hhbmdlZC4KKyAg
ICAvLworICAgIC8vIFRoaXMgd2lsbCB1c3VhbGx5IGNvbnRhaW5zIHRoZSBsaW5rIHJlZ2lzdGVy
IG9uIGFyY2hpdGVjdHVyZXMKKyAgICAvLyB0aGF0IGhhdmUgb25lLCBhbnkgc2NyYXRjaCByZWdp
c3RlciB1c2VkIGJ5IHRoZSBtYWNybyBhc3NlbWJsZXIKKyAgICAvLyAoZS5nLiByMTEgb24gWDg2
XzY0KSwgYXMgd2VsbCBhcyBhbnkgcmVnaXN0ZXIgdGhhdCB3ZSB1c2UgZm9yCisgICAgLy8gYWRk
cmVzc2luZyAoc2VlIG1fb2xkRnJhbWVCYXNlIGFuZCBtX25ld0ZyYW1lQmFzZSkuCisgICAgLy8K
KyAgICAvLyBXZSBhbHNvIHVzZSB0aGlzIHRvIGxvY2sgcmVnaXN0ZXJzIHRlbXBvcmFyaWx5LCBm
b3IgaW5zdGFuY2UgdG8KKyAgICAvLyBlbnN1cmUgdGhhdCB3ZSBoYXZlIGF0IGxlYXN0IDIgYXZh
aWxhYmxlIHJlZ2lzdGVycyBmb3IgbG9hZGluZworICAgIC8vIGEgcGFpciBvbiAzMmJpdHMuCisg
ICAgUmVnaXN0ZXJTZXQgbV9sb2NrZWRSZWdpc3RlcnM7CisKKyAgICAvLyBUaGlzIHN0b3JlcyB0
aGUgY3VycmVudCByZWNvdmVyaWVzIHByZXNlbnQgaW4gcmVnaXN0ZXJzLiBBIG51bGwKKyAgICAv
LyBDYWNoZWRSZWNvdmVyeSBtZWFucyB3ZSBjYW4gdHJhc2ggdGhlIGN1cnJlbnQgdmFsdWUgYXMg
d2UgZG9uJ3QKKyAgICAvLyBjYXJlIGFib3V0IGl0LiAKKyAgICBSZWdpc3Rlck1hcDxDYWNoZWRS
ZWNvdmVyeSo+IG1fcmVnaXN0ZXJzOworCisgICAgLy8gVGhpcyBzdG9yZXMsIGZvciBlYWNoIHJl
Z2lzdGVyLCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVjb3ZlcnkKKyAgICAvLyBmb3IgdGhlIHZh
bHVlIHRoYXQgc2hvdWxkIGV2ZW50dWFsbHkgZ28gaW50byB0aGF0IHJlZ2lzdGVyLiBUaGUKKyAg
ICAvLyBvbmx5IHJlZ2lzdGVycyB0aGF0IGhhdmUgYSB0YXJnZXQgcmVjb3Zlcnkgd2lsbCBiZSBj
YWxsZWUtc2F2ZQorICAgIC8vIHJlZ2lzdGVycywgYXMgd2VsbCBhcyBwb3NzaWJseSBvbmUgSlNW
YWx1ZVJlZ3MgZm9yIGhvbGRpbmcgdGhlCisgICAgLy8gY2FsbGVlLgorICAgIC8vCisgICAgLy8g
T25jZSB0aGUgY29ycmVjdCB2YWx1ZSBoYXMgYmVlbiBwdXQgaW50byB0aGUgcmVnaXN0ZXJzLCBh
bmQKKyAgICAvLyBjb250cmFyeSB0byB3aGF0IHdlIGRvIHdpdGggbV9uZXdGcmFtZSwgd2Uga2Vl
cCB0aGUgZW50cnkgaW4KKyAgICAvLyBtX25ld1JlZ2lzdGVycyB0byBzaW1wbGlmeSBzcGlsbGlu
Zy4KKyAgICBSZWdpc3Rlck1hcDxDYWNoZWRSZWNvdmVyeSo+IG1fbmV3UmVnaXN0ZXJzOworCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tGdW5jdG9yPgorICAgIFJlZyBnZXRGcmVlUmVnaXN0
ZXIoY29uc3QgQ2hlY2tGdW5jdG9yJiBjaGVjaykgY29uc3QKKyAgICB7CisgICAgICAgIFJlZyBu
b25UZW1wIHsgfTsKKyAgICAgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0g
UmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKKyAgICAgICAgICAgIGlmIChtX2xvY2tl
ZFJlZ2lzdGVycy5nZXQocmVnKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgaWYgKCFjaGVjayhyZWcpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgICAgICBpZiAoIW1fcmVnaXN0ZXJzW3JlZ10pIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1f
bmV3UmVnaXN0ZXJzW3JlZ10pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWc7CisgICAg
ICAgICAgICAgICAgaWYgKCFub25UZW1wKQorICAgICAgICAgICAgICAgICAgICBub25UZW1wID0g
cmVnOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBub25UZW1wOwor
ICAgIH0KKworICAgIEdQUlJlZyBnZXRGcmVlR1BSKCkgY29uc3QKKyAgICB7CisgICAgICAgIFJl
ZyBmcmVlR1BSIHsgZ2V0RnJlZVJlZ2lzdGVyKFtdIChSZWcgcmVnKSB7IHJldHVybiByZWcuaXNH
UFIoKTsgfSkgfTsKKyAgICAgICAgaWYgKCFmcmVlR1BSKQorICAgICAgICAgICAgcmV0dXJuIElu
dmFsaWRHUFJSZWc7CisgICAgICAgIHJldHVybiBmcmVlR1BSLmdwcigpOworICAgIH0KKworICAg
IEZQUlJlZyBnZXRGcmVlRlBSKCkgY29uc3QKKyAgICB7CisgICAgICAgIFJlZyBmcmVlRlBSIHsg
Z2V0RnJlZVJlZ2lzdGVyKFtdIChSZWcgcmVnKSB7IHJldHVybiByZWcuaXNGUFIoKTsgfSkgfTsK
KyAgICAgICAgaWYgKCFmcmVlRlBSKQorICAgICAgICAgICAgcmV0dXJuIEludmFsaWRGUFJSZWc7
CisgICAgICAgIHJldHVybiBmcmVlRlBSLmZwcigpOworICAgIH0KKworICAgIGJvb2wgaGFzRnJl
ZVJlZ2lzdGVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29s
PihnZXRGcmVlUmVnaXN0ZXIoW10gKFJlZykgeyByZXR1cm4gdHJ1ZTsgfSkpOworICAgIH0KKwor
ICAgIC8vIFRoaXMgZnJlZXMgdXAgYSByZWdpc3RlciBzYXRpc2Z5aW5nIHRoZSBjaGVjayBmdW5j
dG9yICh0aGlzCisgICAgLy8gZnVuY3RvciBjb3VsZCB0aGVvcmV0aWNhbGx5IGhhdmUgYW55IGtp
bmQgb2YgbG9naWMsIGJ1dCBpdCBtdXN0CisgICAgLy8gZW5zdXJlIHRoYXQgaXQgd2lsbCBvbmx5
IHJldHVybiB0cnVlIGZvciByZWdpc3RlcnMgLSBzcGlsbAorICAgIC8vIGFzc3VtZXMgYW5kIGFz
c2VydHMgdGhhdCBpdCBpcyBwYXNzZWQgYSBjYWNoZWRSZWNvdmVyeSBzdG9yZWQgaW4gYQorICAg
IC8vIHJlZ2lzdGVyKS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja0Z1bmN0b3I+CisgICAg
dm9pZCBlbnN1cmVSZWdpc3Rlcihjb25zdCBDaGVja0Z1bmN0b3ImIGNoZWNrKQorICAgIHsKKyAg
ICAgICAgLy8gSWYgd2UgY2FuIHNwaWxsIGEgY2FsbGVlLXNhdmUsIHRoYXQncyBiZXN0LCBiZWNh
dXNlIGl0IHdpbGwKKyAgICAgICAgLy8gZnJlZSB1cCBhIHJlZ2lzdGVyIHRoYXQgd291bGQgb3Ro
ZXJ3aXNlIGJlZW4gdGFrZW4gZm9yIHRoZQorICAgICAgICAvLyBsb25nZXN0IGFtb3VudCBvZiB0
aW1lLgorICAgICAgICAvLworICAgICAgICAvLyBXZSBjb3VsZCB0cnkgdG8gYmlhcyB0b3dhcmRz
IHRob3NlIHRoYXQgYXJlIG5vdCBpbiB0aGVpcgorICAgICAgICAvLyB0YXJnZXQgcmVnaXN0ZXJz
IHlldCwgYnV0IHRoZSBnYWluIGlzIHByb2JhYmx5IHN1cGVyCisgICAgICAgIC8vIHNtYWxsLiBV
bmxlc3MgeW91IGhhdmUgYSBodWdlIG51bWJlciBvZiBhcmd1bWVudCAoYXQgbGVhc3QKKyAgICAg
ICAgLy8gYXJvdW5kIHR3aWNlIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIHJlZ2lzdGVycyBvbiB5
b3VyCisgICAgICAgIC8vIGFyY2hpdGVjdHVyZSksIG5vIHNwaWxsaW5nIGlzIGdvaW5nIHRvIHRh
a2UgcGxhY2UgYW55d2F5cy4KKyAgICAgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyBy
ZWcgPD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKKyAgICAgICAgICAgIGlmICht
X2xvY2tlZFJlZ2lzdGVycy5nZXQocmVnKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5IHsgbV9uZXdSZWdpc3Rl
cnNbcmVnXSB9OworICAgICAgICAgICAgaWYgKCFjYWNoZWRSZWNvdmVyeSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKGNoZWNrKCpjYWNoZWRSZWNvdmVyeSkp
IHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZygiICAiLCBjYWNoZWRSZWNvdmVyeS0+cmVjb3ZlcnkoKSwgIiBsb29rcyBsaWtlIGEgZ29v
ZCBzcGlsbCBjYW5kaWRhdGVcbiIpOworICAgICAgICAgICAgICAgIHNwaWxsKCpjYWNoZWRSZWNv
dmVyeSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgLy8gV2UgdXNlIHRoZSBjYWNoZWRSZWNvdmVyeSBhc3NvY2lhdGVkIHdpdGgg
dGhlIGZpcnN0IG5ldyBzbG90IHdlCisgICAgICAgIC8vIGNhbiwgYmVjYXVzZSB0aGF0IGlzIHRo
ZSBvbmUgZm9yIHdoaWNoIGEgd3JpdGUgd2lsbCBiZQorICAgICAgICAvLyBwb3NzaWJsZSB0aGUg
bGF0ZXN0LCBpLmUuIHRoYXQgaXMgdGhlIG9uZSB0aGF0IHdlIHdvdWxkCisgICAgICAgIC8vIGhh
dmUgaGFkIHRvIHJldGFpbiBpbiByZWdpc3RlcnMgZm9yIHRoZSBsb25nZXN0LgorICAgICAgICBm
b3IgKFZpcnR1YWxSZWdpc3RlciByZWcgPSBmaXJzdE5ldygpOyByZWcgPD0gbGFzdE5ldygpOyBy
ZWcgKz0gMSkgeworICAgICAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5IHsg
Z2V0TmV3KHJlZykgfTsKKyAgICAgICAgICAgIGlmICghY2FjaGVkUmVjb3ZlcnkpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmIChjaGVjaygqY2FjaGVkUmVjb3Zl
cnkpKSB7CisgICAgICAgICAgICAgICAgc3BpbGwoKmNhY2hlZFJlY292ZXJ5KTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHZvaWQgZW5zdXJlUmVnaXN0
ZXIoKQorICAgIHsKKyAgICAgICAgaWYgKGhhc0ZyZWVSZWdpc3RlcigpKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICBG
aW5kaW5nIGEgcmVnaXN0ZXIgdG8gc3BpbGxcbiIpOworICAgICAgICBlbnN1cmVSZWdpc3RlcigK
KyAgICAgICAgICAgIFt0aGlzXSAoY29uc3QgQ2FjaGVkUmVjb3ZlcnkmIGNhY2hlZFJlY292ZXJ5
KSB7CisgICAgICAgICAgICAgICAgaWYgKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuaXNJbkdQ
UigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIW1fbG9ja2VkUmVnaXN0ZXJzLmdldChj
YWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpKTsKKyAgICAgICAgICAgICAgICBpZiAoY2Fj
aGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5pc0luRlBSKCkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAhbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZnBy
KCkpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgICAgICAgICAgaWYgKGNhY2hlZFJl
Y292ZXJ5LnJlY292ZXJ5KCkudGVjaG5pcXVlKCkgPT0gSW5QYWlyKSB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAhbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KGNhY2hlZFJlY292ZXJ5LnJlY292
ZXJ5KCkudGFnR1BSKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAhbV9sb2NrZWRSZWdp
c3RlcnMuZ2V0KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkucGF5bG9hZEdQUigpKTsKKyAgICAg
ICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICB9KTsKKyAgICB9CisKKyAgICB2b2lkIGVuc3VyZUdQUigpCisgICAgeworICAgICAg
ICBpZiAoZ2V0RnJlZUdQUigpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgIEZpbmRpbmcg
YSBHUFIgdG8gc3BpbGxcbiIpOworICAgICAgICBlbnN1cmVSZWdpc3RlcigKKyAgICAgICAgICAg
IFt0aGlzXSAoY29uc3QgQ2FjaGVkUmVjb3ZlcnkmIGNhY2hlZFJlY292ZXJ5KSB7CisgICAgICAg
ICAgICAgICAgaWYgKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuaXNJbkdQUigpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gIW1fbG9ja2VkUmVnaXN0ZXJzLmdldChjYWNoZWRSZWNvdmVy
eS5yZWNvdmVyeSgpLmdwcigpKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICAgICAg
ICAgIGlmIChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLnRlY2huaXF1ZSgpID09IEluUGFpcikg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gIW1fbG9ja2VkUmVnaXN0ZXJzLmdldChjYWNo
ZWRSZWNvdmVyeS5yZWNvdmVyeSgpLnRhZ0dQUigpKQorICAgICAgICAgICAgICAgICAgICAgICAg
JiYgIW1fbG9ja2VkUmVnaXN0ZXJzLmdldChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLnBheWxv
YWRHUFIoKSk7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAgdm9pZCBlbnN1cmVGUFIo
KQorICAgIHsKKyAgICAgICAgaWYgKGdldEZyZWVGUFIoKSAhPSBJbnZhbGlkRlBSUmVnKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0
YUxvZygiICBGaW5kaW5nIGFuIEZQUiB0byBzcGlsbFxuIik7CisgICAgICAgIGVuc3VyZVJlZ2lz
dGVyKAorICAgICAgICAgICAgW3RoaXNdIChjb25zdCBDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVj
b3ZlcnkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5p
c0luRlBSKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAhbV9sb2NrZWRSZWdpc3RlcnMu
Z2V0KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZnByKCkpOworICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKworICAgIENhY2hlZFJlY292ZXJ5
KiBnZXROZXcoSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MpIGNvbnN0CisgICAgeworI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgICAgIHJldHVybiBtX25ld1JlZ2lzdGVyc1tqc1ZhbHVlUmVncy5ncHIo
KV07CisjZWxzZQorICAgICAgICBBU1NFUlQoCisgICAgICAgICAgICBqc1ZhbHVlUmVncy50YWdH
UFIoKSA9PSBJbnZhbGlkR1BSUmVnIHx8IGpzVmFsdWVSZWdzLnBheWxvYWRHUFIoKSA9PSBJbnZh
bGlkR1BSUmVnCisgICAgICAgICAgICB8fCBtX25ld1JlZ2lzdGVyc1tqc1ZhbHVlUmVncy5wYXls
b2FkR1BSKCldID09IG1fbmV3UmVnaXN0ZXJzW2pzVmFsdWVSZWdzLnRhZ0dQUigpXSk7CisgICAg
ICAgIGlmIChqc1ZhbHVlUmVncy5wYXlsb2FkR1BSKCkgPT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgICAgIHJldHVybiBtX25ld1JlZ2lzdGVyc1tqc1ZhbHVlUmVncy50YWdHUFIoKV07CisgICAg
ICAgIHJldHVybiBtX25ld1JlZ2lzdGVyc1tqc1ZhbHVlUmVncy5wYXlsb2FkR1BSKCldOworI2Vu
ZGlmCisgICAgfQorCisgICAgdm9pZCBhZGROZXcoSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIFZh
bHVlUmVjb3ZlcnkgcmVjb3ZlcnkpCisgICAgeworICAgICAgICBBU1NFUlQoanNWYWx1ZVJlZ3Mg
JiYgIWdldE5ldyhqc1ZhbHVlUmVncykpOworICAgICAgICBDYWNoZWRSZWNvdmVyeSogY2FjaGVk
UmVjb3ZlcnkgPSBhZGRDYWNoZWRSZWNvdmVyeShyZWNvdmVyeSk7CisgICAgICAgIEFTU0VSVCgh
Y2FjaGVkUmVjb3ZlcnktPndhbnRlZEpTVmFsdWVSZWdzKCkpOworICAgICAgICBjYWNoZWRSZWNv
dmVyeS0+c2V0V2FudGVkSlNWYWx1ZVJlZ3MoanNWYWx1ZVJlZ3MpOworI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgICAgIG1fbmV3UmVnaXN0ZXJzW2pzVmFsdWVSZWdzLmdwcigpXSA9IGNhY2hlZFJl
Y292ZXJ5OworI2Vsc2UKKyAgICAgICAgaWYgKGpzVmFsdWVSZWdzLnBheWxvYWRHUFIoKSAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgbV9uZXdSZWdpc3RlcnNbanNWYWx1ZVJlZ3MucGF5
bG9hZEdQUigpXSA9IGNhY2hlZFJlY292ZXJ5OworICAgICAgICBpZiAoanNWYWx1ZVJlZ3MudGFn
R1BSKCkgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIG1fbmV3UmVnaXN0ZXJzW2pzVmFs
dWVSZWdzLnRhZ0dQUigpXSA9IGNhY2hlZFJlY292ZXJ5OworI2VuZGlmCisgICAgfQorCisgICAg
dm9pZCBhZGROZXcoRlBSUmVnIGZwciwgVmFsdWVSZWNvdmVyeSByZWNvdmVyeSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChmcHIgIT0gSW52YWxpZEZQUlJlZyAmJiAhbV9uZXdSZWdpc3RlcnNbZnBy
XSk7CisgICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSA9IGFkZENhY2hlZFJl
Y292ZXJ5KHJlY292ZXJ5KTsKKyAgICAgICAgbV9uZXdSZWdpc3RlcnNbZnByXSA9IGNhY2hlZFJl
Y292ZXJ5OworICAgICAgICBBU1NFUlQoY2FjaGVkUmVjb3ZlcnktPndhbnRlZEZQUigpID09IElu
dmFsaWRGUFJSZWcpOworICAgICAgICBjYWNoZWRSZWNvdmVyeS0+c2V0V2FudGVkRlBSKGZwcik7
CisgICAgfQorCisgICAgLy8gbV9vbGRGcmFtZUJhc2UgaXMgdGhlIHJlZ2lzdGVyIHJlbGF0aXZl
IHRvIHdoaWNoIHdlIGFjY2VzcworICAgIC8vIHNsb3RzIGluIHRoZSBvbGQgY2FsbCBmcmFtZSwg
d2l0aCBhbiBhZGRpdGlvbmFsIG9mZnNldCBvZgorICAgIC8vIG1fb2xkRnJhbWVPZmZzZXQuCisg
ICAgLy8KKyAgICAvLyAgLSBGb3IgYW4gYWN0dWFsIHRhaWwgY2FsbCwgbV9vbGRGcmFtZUJhc2Ug
aXMgdGhlIHN0YWNrCisgICAgLy8gICAgcG9pbnRlciwgYW5kIG1fb2xkRnJhbWVPZmZzZXQgaXMg
dGhlIG51bWJlciBvZiBsb2NhbHMgb2YgdGhlCisgICAgLy8gICAgdGFpbCBjYWxsZXIncyBmcmFt
ZS4gV2UgdXNlIHN1Y2ggc3RhY2sgcG9pbnRlci1iYXNlZAorICAgIC8vICAgIGFkZHJlc3Npbmcg
YmVjYXVzZSBpdCBhbGxvd3MgdXMgdG8gbG9hZCB0aGUgdGFpbCBjYWxsZXIncworICAgIC8vICAg
IGNhbGxlcidzIGZyYW1lIHBvaW50ZXIgaW4gdGhlIGZyYW1lIHBvaW50ZXIgcmVnaXN0ZXIKKyAg
ICAvLyAgICBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIGF3a3dhcmRseSBrZWVwaW5nIGl0IGFyb3Vu
ZCBvbiB0aGUKKyAgICAvLyAgICBzdGFjay4KKyAgICAvLworICAgIC8vICAtIEZvciBhIHNsb3cg
cGF0aCBjYWxsLCBtX29sZEZyYW1lQmFzZSBpcyBqdXN0IHRoZSBmcmFtZQorICAgIC8vICAgIHBv
aW50ZXIsIGFuZCBtX29sZEZyYW1lT2Zmc2V0IGlzIDAuCisgICAgR1BSUmVnIG1fb2xkRnJhbWVC
YXNlIHsgTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyIH07CisgICAgaW50IG1f
b2xkRnJhbWVPZmZzZXQgeyAwIH07CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBhZGRy
ZXNzRm9yT2xkKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9vbGRGcmFtZUJhc2UsCisgICAgICAgICAgICAo
bV9vbGRGcmFtZU9mZnNldCArIHJlZy5vZmZzZXQoKSkgKiBzaXplb2YoUmVnaXN0ZXIpKTsKKyAg
ICB9CisKKyAgICAvLyBtX25ld0ZyYW1lQmFzZSBpcyB0aGUgcmVnaXN0ZXIgcmVsYXRpdmUgdG8g
d2hpY2ggd2UgYWNjZXNzCisgICAgLy8gc2xvdHMgaW4gdGhlIG5ldyBjYWxsIGZyYW1lLCBhbmQg
d2UgYWx3YXlzIG1ha2UgaXQgcG9pbnQgdG8KKyAgICAvLyB3aGVyZXZlciB0aGUgc3RhY2sgcG9p
bnRlciB3aWxsIGJlIHJpZ2h0IGJlZm9yZSBtYWtpbmcgdGhlCisgICAgLy8gYWN0dWFsIGNhbGwv
anVtcC4gVGhlIGFjdHVhbCBiYXNlIG9mIHRoZSBuZXcgZnJhbWUgaXMgYXQgb2Zmc2V0CisgICAg
Ly8gbV9uZXdGcmFtZU9mZnNldCByZWxhdGl2ZSB0byBtX25ld0ZyYW1lQmFzZS4KKyAgICAvLwor
ICAgIC8vICAtIEZvciBhbiBhY3R1YWwgdGFpbCBjYWxsLCBtX25ld0ZyYW1lQmFzZSBpcyBjb21w
dXRlZAorICAgIC8vICAgIGR5bmFtaWNhbGx5LCBhbmQgbV9uZXdGcmFtZU9mZnNldCB2YXJpZXMg
YmV0d2VlbiAwIGFuZCAtMgorICAgIC8vICAgIGRlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJl
J3MgY2FsbGluZyBjb252ZW50aW9uIChzZWUKKyAgICAvLyAgICBwcmVwYXJlRm9yVGFpbENhbGwp
LgorICAgIC8vCisgICAgLy8gIC0gRm9yIGEgc2xvdyBwYXRoIGNhbGwsIG1fbmV3RnJhbWVCYXNl
IGlzIHRoZSBhY3R1YWwgc3RhY2sKKyAgICAvLyAgICBwb2ludGVyLCBhbmQgbV9uZXdGcmFtZU9m
ZnNldCBpcyAtIENhbGxlckZyYW1lQW5kUENTaXplLAorICAgIC8vICAgIGZvbGxvd2luZyB0aGUg
Y29udmVudGlvbiBmb3IgYSByZWd1bGFyIGNhbGwuCisgICAgR1BSUmVnIG1fbmV3RnJhbWVCYXNl
IHsgSW52YWxpZEdQUlJlZyB9OworICAgIGludCBtX25ld0ZyYW1lT2Zmc2V0IHsgMH07CisKKyAg
ICBib29sIGlzVW5kZWNpZGVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX25ld0Zy
YW1lQmFzZSA9PSBJbnZhbGlkR1BSUmVnOworICAgIH0KKworICAgIGJvb2wgaXNTbG93UGF0aCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9uZXdGcmFtZUJhc2UgPT0gTWFjcm9Bc3Nl
bWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyOworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzIGFkZHJlc3NGb3JOZXcoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX25ld0ZyYW1lQmFzZSwK
KyAgICAgICAgICAgIChtX25ld0ZyYW1lT2Zmc2V0ICsgcmVnLm9mZnNldCgpKSAqIHNpemVvZihS
ZWdpc3RlcikpOworICAgIH0KKworICAgIC8vIFdlIHVzZSBhIGNvbmNlcHQgb2YgImRhbmdlciB6
b25lIi4gVGhlIGRhbmdlciB6b25lIGNvbnNpc3RzIG9mCisgICAgLy8gYWxsIHRoZSB3cml0ZXMg
aW4gdGhlIG5ldyBmcmFtZSB0aGF0IGNvdWxkIG92ZXJsYXAgd2l0aCByZWFkcworICAgIC8vIGlu
IHRoZSBvbGQgZnJhbWUuCisgICAgLy8KKyAgICAvLyBCZWNhdXNlIHdlIGNvdWxkIGhhdmUgYSBo
aWdoZXIgYWN0dWFsIG51bWJlciBvZiBhcmd1bWVudHMgdGhhbgorICAgIC8vIHBhcmFtZXRlcnMs
IHdoZW4gcHJlcGFyaW5nIGEgdGFpbCBjYWxsLCB3ZSBuZWVkIHRvIGFzc3VtZSB0aGF0CisgICAg
Ly8gd3JpdGluZyB0byBhIHNsb3Qgb24gdGhlIG5ldyBmcmFtZSBjb3VsZCBvdmVybGFwIG5vdCBv
bmx5IHdpdGgKKyAgICAvLyB0aGUgY29ycmVzcG9uZGluZyBzbG90IGluIHRoZSBvbGQgZnJhbWUs
IGJ1dCBhbHNvIHdpdGggYW55IHNsb3QKKyAgICAvLyBhYm92ZSBpdC4gVGh1cywgdGhlIGRhbmdl
ciB6b25lIGNvbnNpc3RzIG9mIGFsbCB3cml0ZXMgYmV0d2VlbgorICAgIC8vIHRoZSBmaXJzdCB3
cml0ZSBhbmQgd2hhdCBJIGNhbGwgdGhlICJkYW5nZXIgZnJvbnRpZXIiOiB0aGUKKyAgICAvLyBo
aWdoZXN0IHNsb3QgaW4gdGhlIG9sZCBmcmFtZSB3ZSBzdGlsbCBjYXJlIGFib3V0LiBUaHVzLCB0
aGUKKyAgICAvLyBkYW5nZXIgem9uZSBjb250YWlucyBhbGwgdGhlIHNsb3RzIGJldHdlZW4gdGhl
IGZpcnN0IHNsb3Qgb2YKKyAgICAvLyB0aGUgbmV3IGZyYW1lIGFuZCB0aGUgZGFuZ2VyIGZyb250
aWVyLiBCZWNhdXNlIHRoZSBkYW5nZXIKKyAgICAvLyBmcm9udGllciBpcyByZWxhdGVkIHRvIHRo
ZSBuZXcgZnJhbWUsIGl0IGlzIHN0b3JlZCBhcyBhIHZpcnR1YWwKKyAgICAvLyByZWdpc3RlciAq
aW4gdGhlIG5ldyBmcmFtZSouCisgICAgVmlydHVhbFJlZ2lzdGVyIG1fZGFuZ2VyRnJvbnRpZXI7
CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZGFuZ2VyRnJvbnRpZXIoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKCFpc1VuZGVjaWRlZCgpKTsKKworICAgICAgICByZXR1cm4gbV9kYW5nZXJG
cm9udGllcjsKKyAgICB9CisKKyAgICBib29sIGlzRGFuZ2VyTmV3KFZpcnR1YWxSZWdpc3RlciBy
ZWcpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoIWlzVW5kZWNpZGVkKCkgJiYgaXNWYWxp
ZE5ldyhyZWcpKTsKKyAgICAgICAgcmV0dXJuIHJlZyA8PSBkYW5nZXJGcm9udGllcigpOworICAg
IH0KKworICAgIHZvaWQgdXBkYXRlRGFuZ2VyRnJvbnRpZXIoKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKCFpc1VuZGVjaWRlZCgpKTsKKworICAgICAgICBtX2RhbmdlckZyb250aWVyID0gZmlyc3RO
ZXcoKSAtIDE7CisgICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIHJlZyA9IGxhc3ROZXcoKTsg
cmVnID49IGZpcnN0TmV3KCk7IHJlZyAtPSAxKSB7CisgICAgICAgICAgICBpZiAoIWdldE5ldyhy
ZWcpIHx8ICFpc1ZhbGlkT2xkKG5ld0FzT2xkKHJlZykpIHx8ICFnZXRPbGQobmV3QXNPbGQocmVn
KSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIG1fZGFuZ2VyRnJv
bnRpZXIgPSByZWc7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgIERhbmdlciBmcm9udGllciBub3cgYXQgTkVXICIsIG1fZGFuZ2VyRnJvbnRpZXIs
ICJcbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgIEFsbCBjbGVhciEgRGFuZ2VyIHpvbmUgaXMgZW1w
dHkuXG4iKTsKKyAgICB9CisKKyAgICAvLyBBIHNhZmUgd3JpdGUgaXMgYSB3cml0ZSB0aGF0IG5l
dmVyIHdyaXRlcyBpbnRvIHRoZSBkYW5nZXIgem9uZS4KKyAgICBib29sIGhhc09ubHlTYWZlV3Jp
dGVzKENhY2hlZFJlY292ZXJ5JiBjYWNoZWRSZWNvdmVyeSkgY29uc3QKKyAgICB7CisgICAgICAg
IGZvciAoVmlydHVhbFJlZ2lzdGVyIHRhcmdldCA6IGNhY2hlZFJlY292ZXJ5LnRhcmdldHMoKSkg
eworICAgICAgICAgICAgaWYgKGlzRGFuZ2VyTmV3KHRhcmdldCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIC8vIFlvdSBtdXN0IGVuc3VyZSB0aGF0IHRoZXJlIGlzIG5vIGRhbmdlcm91cyB3cml0ZXMg
YmVmb3JlCisgICAgLy8gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICAgIGJvb2wgdHJ5V3JpdGVz
KENhY2hlZFJlY292ZXJ5Jik7CisKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIGVuc3Vy
ZSB0aGF0IHRoZXJlIGlzIG5vIGxvbmdlciBhbnkKKyAgICAvLyBwb3NzaWJsZSBzYWZlIHdyaXRl
LCBpLmUuIGFsbCByZW1haW5pbmcgd3JpdGVzIGFyZSBlaXRoZXIgdG8KKyAgICAvLyB0aGUgZGFu
Z2VyIHpvbmUgb3IgY2FsbGVlIHNhdmUgcmVzdG9yYXRpb25zLgorICAgIC8vCisgICAgLy8gSXQg
cmV0dXJucyBmYWxzZSBpZiBpdCB3YXMgdW5hYmxlIHRvIHBlcmZvcm0gc29tZSBzYWZlIHdyaXRl
cworICAgIC8vIGR1ZSB0byBoaWdoIHJlZ2lzdGVyIHByZXNzdXJlLgorICAgIGJvb2wgcGVyZm9y
bVNhZmVXcml0ZXMoKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKKworI2VuZGlmIC8vIENhbGxGcmFtZVNodWZmbGVyX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyMzJfNjQuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjgxMzNiY2FiYTJiZTQzYzFlZjE0YTRlMTc5YThiYjRkNDZhZjUzYzcKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyMzJfNjQu
Y3BwCkBAIC0wLDAgKzEsMzMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZm
bGVyLmgiCisKKyNpZiBFTkFCTEUoSklUKSAmJiBVU0UoSlNWQUxVRTMyXzY0KQorCisjaW5jbHVk
ZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiRGF0YUZvcm1hdC5oIgorI2luY2x1ZGUgIkpT
Q0pTVmFsdWVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitEYXRhRm9ybWF0IENhbGxG
cmFtZVNodWZmbGVyOjplbWl0U3RvcmUoQ2FjaGVkUmVjb3ZlcnkmIGxvY2F0aW9uLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyBhZGRyZXNzKQoreworICAgIEFTU0VSVCghbG9jYXRpb24ucmVjb3Zl
cnkoKS5pc0luSlNTdGFjaygpKTsKKworICAgIHN3aXRjaCAobG9jYXRpb24ucmVjb3ZlcnkoKS50
ZWNobmlxdWUoKSkgeworICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CisgICAgICAgIG1faml0
LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyks
CisgICAgICAgICAgICBhZGRyZXNzLndpdGhPZmZzZXQoVGFnT2Zmc2V0KSk7CisgICAgICAgIG1f
aml0LnN0b3JlMzIobG9jYXRpb24ucmVjb3ZlcnkoKS5ncHIoKSwgYWRkcmVzcy53aXRoT2Zmc2V0
KFBheWxvYWRPZmZzZXQpKTsKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRJbnQzMjsKKyAgICBj
YXNlIFVuYm94ZWRDZWxsSW5HUFI6CisgICAgICAgIG1faml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwKKyAgICAgICAgICAgIGFkZHJlc3Mu
d2l0aE9mZnNldChUYWdPZmZzZXQpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihsb2NhdGlvbi5y
ZWNvdmVyeSgpLmdwcigpLCBhZGRyZXNzLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCkpOworICAg
ICAgICByZXR1cm4gRGF0YUZvcm1hdENlbGw7CisgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAg
bV9qaXQuc3RvcmVUcnVzdGVkVmFsdWUobG9jYXRpb24ucmVjb3ZlcnkoKS5jb25zdGFudCgpLCBh
ZGRyZXNzKTsKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRKUzsKKyAgICBjYXNlIEluUGFpcjoK
KyAgICAgICAgbV9qaXQuc3RvcmVWYWx1ZShsb2NhdGlvbi5yZWNvdmVyeSgpLmpzVmFsdWVSZWdz
KCksIGFkZHJlc3MpOworICAgICAgICByZXR1cm4gRGF0YUZvcm1hdEpTOworICAgIGNhc2UgVW5i
b3hlZEJvb2xlYW5JbkdQUjoKKyAgICAgICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpLAorICAgICAgICAgICAgYWRkcmVzcy53
aXRoT2Zmc2V0KFRhZ09mZnNldCkpOworICAgICAgICBtX2ppdC5zdG9yZTMyKGxvY2F0aW9uLnJl
Y292ZXJ5KCkuZ3ByKCksIGFkZHJlc3Mud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KSk7CisgICAg
ICAgIHJldHVybiBEYXRhRm9ybWF0Qm9vbGVhbjsKKyAgICBjYXNlIEluRlBSOgorICAgIGNhc2Ug
VW5ib3hlZERvdWJsZUluRlBSOgorICAgICAgICBtX2ppdC5zdG9yZURvdWJsZShsb2NhdGlvbi5y
ZWNvdmVyeSgpLmZwcigpLCBhZGRyZXNzKTsKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRKUzsK
KyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KK30KKwordm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6ZW1pdEJveChDYWNoZWRSZWNvdmVyeSYg
bG9jYXRpb24pCit7CisgICAgLy8gTm90aGluZyB0byBkbywgd2UncmUgZ29vZCEgSlNWYWx1ZXMg
YW5kIGRvdWJsZXMgY2FuIGJlIHN0b3JlZAorICAgIC8vIGltbWVkaWF0ZWx5LCBhbmQgb3RoZXIg
Zm9ybWF0cyBkb24ndCBuZWVkIGFueSB0cmFuc2Zvcm1hdGlvbiAtCisgICAgLy8ganVzdCBzdG9y
aW5nIGEgY29uc3RhbnQgdGFnIHNlcGFyYXRlbHkuCisgICAgQVNTRVJUKGNhbkJveChsb2NhdGlv
bikpOworfQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVyOjplbWl0TG9hZChDYWNoZWRSZWNvdmVy
eSYgbG9jYXRpb24pCit7CisgICAgaWYgKCFsb2NhdGlvbi5yZWNvdmVyeSgpLmlzSW5KU1N0YWNr
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9n
KCIgICAqIExvYWRpbmcgIiwgbG9jYXRpb24ucmVjb3ZlcnkoKSwgIiBpbnRvICIpOworICAgIFZp
cnR1YWxSZWdpc3RlciByZWcgeyBsb2NhdGlvbi5yZWNvdmVyeSgpLnZpcnR1YWxSZWdpc3Rlcigp
IH07CisgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgYWRkcmVzcyB7IGFkZHJlc3NGb3JPbGQo
cmVnKSB9OworCisgICAgYm9vbCB0cnlGUFIgeyB0cnVlIH07CisgICAgSlNWYWx1ZVJlZ3Mgd2Fu
dGVkSlNWYWx1ZVJlZ3MgeyBsb2NhdGlvbi53YW50ZWRKU1ZhbHVlUmVncygpIH07CisgICAgaWYg
KHdhbnRlZEpTVmFsdWVSZWdzKSB7CisgICAgICAgIGlmICh3YW50ZWRKU1ZhbHVlUmVncy5wYXls
b2FkR1BSKCkgIT0gSW52YWxpZEdQUlJlZworICAgICAgICAgICAgJiYgIW1fcmVnaXN0ZXJzW3dh
bnRlZEpTVmFsdWVSZWdzLnBheWxvYWRHUFIoKV0KKyAgICAgICAgICAgICYmICFtX2xvY2tlZFJl
Z2lzdGVycy5nZXQod2FudGVkSlNWYWx1ZVJlZ3MucGF5bG9hZEdQUigpKSkKKyAgICAgICAgICAg
IHRyeUZQUiA9IGZhbHNlOworICAgICAgICBpZiAod2FudGVkSlNWYWx1ZVJlZ3MudGFnR1BSKCkg
IT0gSW52YWxpZEdQUlJlZworICAgICAgICAgICAgJiYgIW1fcmVnaXN0ZXJzW3dhbnRlZEpTVmFs
dWVSZWdzLnRhZ0dQUigpXQorICAgICAgICAgICAgJiYgIW1fbG9ja2VkUmVnaXN0ZXJzLmdldCh3
YW50ZWRKU1ZhbHVlUmVncy50YWdHUFIoKSkpCisgICAgICAgICAgICB0cnlGUFIgPSBmYWxzZTsK
KyAgICB9CisKKyAgICBpZiAodHJ5RlBSICYmIGxvY2F0aW9uLmxvYWRzSW50b0ZQUigpKSB7Cisg
ICAgICAgIEZQUlJlZyByZXN1bHRGUFIgPSBsb2NhdGlvbi53YW50ZWRGUFIoKTsKKyAgICAgICAg
aWYgKHJlc3VsdEZQUiA9PSBJbnZhbGlkR1BSIHx8IG1fcmVnaXN0ZXJzW3Jlc3VsdEZQUl0gfHwg
bV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHJlc3VsdEZQUikpCisgICAgICAgICAgICByZXN1bHRGUFIg
PSBnZXRGcmVlRlBSKCk7CisgICAgICAgIGlmIChyZXN1bHRGUFIgIT0gSW52YWxpZEZQUlJlZykg
eworICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShhZGRyZXNzLCByZXN1bHRGUFIpOworICAg
ICAgICAgICAgRGF0YUZvcm1hdCBkYXRhRm9ybWF0ID0gRGF0YUZvcm1hdEpTOworICAgICAgICAg
ICAgaWYgKGxvY2F0aW9uLnJlY292ZXJ5KCkuZGF0YUZvcm1hdCgpID09IERhdGFGb3JtYXREb3Vi
bGUpCisgICAgICAgICAgICAgICAgZGF0YUZvcm1hdCA9IERhdGFGb3JtYXREb3VibGU7CisgICAg
ICAgICAgICB1cGRhdGVSZWNvdmVyeShsb2NhdGlvbiwgCisgICAgICAgICAgICAgICAgVmFsdWVS
ZWNvdmVyeTo6aW5GUFIocmVzdWx0RlBSLCBkYXRhRm9ybWF0KSk7CisgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKGxvY2F0aW9uLnJlY292ZXJ5KCksICJc
biIpOworICAgICAgICAgICAgaWYgKHJlZyA9PSBuZXdBc09sZChkYW5nZXJGcm9udGllcigpKSkK
KyAgICAgICAgICAgICAgICB1cGRhdGVEYW5nZXJGcm9udGllcigpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGxvY2F0aW9uLmxvYWRzSW50b0dQUigp
KSB7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgeyB3YW50ZWRKU1ZhbHVlUmVncy5wYXlsb2Fk
R1BSKCkgfTsKKyAgICAgICAgaWYgKHJlc3VsdEdQUiA9PSBJbnZhbGlkR1BSUmVnIHx8IG1fcmVn
aXN0ZXJzW3Jlc3VsdEdQUl0gfHwgbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHJlc3VsdEdQUikpCisg
ICAgICAgICAgICByZXN1bHRHUFIgPSBnZXRGcmVlR1BSKCk7CisgICAgICAgIEFTU0VSVChyZXN1
bHRHUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIG1faml0LmxvYWRQdHIoYWRkcmVzcy53
aXRoT2Zmc2V0KFBheWxvYWRPZmZzZXQpLCByZXN1bHRHUFIpOworICAgICAgICB1cGRhdGVSZWNv
dmVyeShsb2NhdGlvbiwgCisgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZXN1bHRH
UFIsIGxvY2F0aW9uLnJlY292ZXJ5KCkuZGF0YUZvcm1hdCgpKSk7CisgICAgICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICAgICAgZGF0YUxvZyhsb2NhdGlvbi5yZWNvdmVyeSgpLCAiXG4iKTsKKyAg
ICAgICAgaWYgKHJlZyA9PSBuZXdBc09sZChkYW5nZXJGcm9udGllcigpKSkKKyAgICAgICAgICAg
IHVwZGF0ZURhbmdlckZyb250aWVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBB
U1NFUlQobG9jYXRpb24ucmVjb3ZlcnkoKS50ZWNobmlxdWUoKSA9PSBEaXNwbGFjZWRJbkpTU3Rh
Y2spOworICAgIEdQUlJlZyBwYXlsb2FkR1BSIHsgd2FudGVkSlNWYWx1ZVJlZ3MucGF5bG9hZEdQ
UigpIH07CisgICAgR1BSUmVnIHRhZ0dQUiB7IHdhbnRlZEpTVmFsdWVSZWdzLnRhZ0dQUigpIH07
CisgICAgaWYgKHBheWxvYWRHUFIgPT0gSW52YWxpZEdQUlJlZyB8fCBtX3JlZ2lzdGVyc1twYXls
b2FkR1BSXSB8fCBtX2xvY2tlZFJlZ2lzdGVycy5nZXQocGF5bG9hZEdQUikpCisgICAgICAgIHBh
eWxvYWRHUFIgPSBnZXRGcmVlR1BSKCk7CisgICAgbV9sb2NrZWRSZWdpc3RlcnMuc2V0KHBheWxv
YWRHUFIpOworICAgIGlmICh0YWdHUFIgPT0gSW52YWxpZEdQUlJlZyB8fCBtX3JlZ2lzdGVyc1t0
YWdHUFJdIHx8IG1fbG9ja2VkUmVnaXN0ZXJzLmdldCh0YWdHUFIpKQorICAgICAgICB0YWdHUFIg
PSBnZXRGcmVlR1BSKCk7CisgICAgbV9sb2NrZWRSZWdpc3RlcnMuY2xlYXIocGF5bG9hZEdQUik7
CisgICAgQVNTRVJUKHBheWxvYWRHUFIgIT0gSW52YWxpZEdQUlJlZyAmJiB0YWdHUFIgIT0gSW52
YWxpZEdQUlJlZyAmJiB0YWdHUFIgIT0gcGF5bG9hZEdQUik7CisgICAgbV9qaXQubG9hZFB0cihh
ZGRyZXNzLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCksIHBheWxvYWRHUFIpOworICAgIG1faml0
LmxvYWRQdHIoYWRkcmVzcy53aXRoT2Zmc2V0KFRhZ09mZnNldCksIHRhZ0dQUik7CisgICAgdXBk
YXRlUmVjb3ZlcnkobG9jYXRpb24sIAorICAgICAgICBWYWx1ZVJlY292ZXJ5OjppblBhaXIodGFn
R1BSLCBwYXlsb2FkR1BSKSk7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2cobG9j
YXRpb24ucmVjb3ZlcnkoKSwgIlxuIik7CisgICAgaWYgKHJlZyA9PSBuZXdBc09sZChkYW5nZXJG
cm9udGllcigpKSkKKyAgICAgICAgdXBkYXRlRGFuZ2VyRnJvbnRpZXIoKTsKK30KKworYm9vbCBD
YWxsRnJhbWVTaHVmZmxlcjo6Y2FuTG9hZChDYWNoZWRSZWNvdmVyeSYgbG9jYXRpb24pCit7Cisg
ICAgaWYgKCFsb2NhdGlvbi5yZWNvdmVyeSgpLmlzSW5KU1N0YWNrKCkpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgaWYgKGxvY2F0aW9uLmxvYWRzSW50b0ZQUigpICYmIGdldEZyZWVGUFIo
KSAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChsb2Nh
dGlvbi5sb2Fkc0ludG9HUFIoKSAmJiBnZXRGcmVlR1BSKCkgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAobG9jYXRpb24ucmVjb3ZlcnkoKS50ZWNobmlx
dWUoKSA9PSBEaXNwbGFjZWRJbkpTU3RhY2spIHsKKyAgICAgICAgR1BSUmVnIHBheWxvYWRHUFIg
eyBnZXRGcmVlR1BSKCkgfTsKKyAgICAgICAgaWYgKHBheWxvYWRHUFIgPT0gSW52YWxpZEdQUlJl
ZykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbV9sb2NrZWRSZWdpc3RlcnMu
c2V0KHBheWxvYWRHUFIpOworICAgICAgICBHUFJSZWcgdGFnR1BSIHsgZ2V0RnJlZUdQUigpIH07
CisgICAgICAgIG1fbG9ja2VkUmVnaXN0ZXJzLmNsZWFyKHBheWxvYWRHUFIpOworICAgICAgICBy
ZXR1cm4gdGFnR1BSICE9IEludmFsaWRHUFJSZWc7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNl
OworfQorCisvLyBXZSBwcmVmZXIgbG9hZGluZyBkb3VibGVzIGFuZCB1bmRldGVybWluZWQgSlNW
YWx1ZXMgaW50byBGUFJzCisvLyBiZWNhdXNlIGl0IHdvdWxkIG90aGVyd2lzZSB1c2UgdXAgdHdv
IEdQUnMuCitib29sIENhY2hlZFJlY292ZXJ5Ojpsb2Fkc0ludG9GUFIoKSBjb25zdAoreworICAg
IHN3aXRjaCAocmVjb3ZlcnkoKS50ZWNobmlxdWUoKSkgeworICAgIGNhc2UgRG91YmxlRGlzcGxh
Y2VkSW5KU1N0YWNrOgorICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
CisKKy8vIEludGVnZXJzLCBib29sZWFucyBhbmQgY2VsbHMgY2FuIGJlIGxvYWRlZCBpbnRvIGEg
c2luZ2xlIEdQUgorYm9vbCBDYWNoZWRSZWNvdmVyeTo6bG9hZHNJbnRvR1BSKCkgY29uc3QKK3sK
KyAgICBzd2l0Y2ggKHJlY292ZXJ5KCkudGVjaG5pcXVlKCkpIHsKKyAgICBjYXNlIEludDMyRGlz
cGxhY2VkSW5KU1N0YWNrOgorICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazoKKyAg
ICBjYXNlIENlbGxEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwordm9pZCBDYWxs
RnJhbWVTaHVmZmxlcjo6ZW1pdERpc3BsYWNlKENhY2hlZFJlY292ZXJ5JiBsb2NhdGlvbikKK3sK
KyAgICBBU1NFUlQobG9jYXRpb24ucmVjb3ZlcnkoKS5pc0luUmVnaXN0ZXJzKCkpOworICAgIEpT
VmFsdWVSZWdzIHdhbnRlZEpTVmFsdWVSZWdzIHsgbG9jYXRpb24ud2FudGVkSlNWYWx1ZVJlZ3Mo
KSB9OworICAgIEFTU0VSVCh3YW50ZWRKU1ZhbHVlUmVncyk7IC8vIFdlIGRvbid0IHN1cHBvcnQg
d2FudGVkIEZQUnMgb24gMzJiaXQgcGxhdGZvcm1zCisKKyAgICBHUFJSZWcgd2FudGVkVGFnR1BS
IHsgd2FudGVkSlNWYWx1ZVJlZ3MudGFnR1BSKCkgfTsKKyAgICBHUFJSZWcgd2FudGVkUGF5bG9h
ZEdQUiB7IHdhbnRlZEpTVmFsdWVSZWdzLnBheWxvYWRHUFIoKSB9OworICAgIAorICAgIGlmICh3
YW50ZWRUYWdHUFIgIT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICBBU1NFUlQoIW1fbG9ja2Vk
UmVnaXN0ZXJzLmdldCh3YW50ZWRUYWdHUFIpKTsKKyAgICAgICAgaWYgKENhY2hlZFJlY292ZXJ5
KiBjdXJyZW50VGFnIHsgbV9yZWdpc3RlcnNbd2FudGVkVGFnR1BSXSB9KSB7CisgICAgICAgICAg
ICBpZiAoY3VycmVudFRhZyA9PSAmbG9jYXRpb24pIHsKKyAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgKyAiLCB3YW50ZWRUYWdHUFIs
ICIgaXMgT0tcbiIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBU
aGlzIGNhbiBuZXZlciBoYXBwZW4gb24gMzJiaXQgcGxhdGZvcm1zIHNpbmNlIHdlCisgICAgICAg
ICAgICAgICAgLy8gaGF2ZSBhdCBtb3N0IG9uZSB3YW50ZWQgSlNWYWx1ZVJlZ3MsIGZvciB0aGUK
KyAgICAgICAgICAgICAgICAvLyBjYWxsZWUsIGFuZCBubyBjYWxsZWUtc2F2ZSByZWdpc3RlcnMu
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh3YW50ZWRQYXlsb2FkR1BSICE9IElu
dmFsaWRHUFJSZWcpIHsKKyAgICAgICAgQVNTRVJUKCFtX2xvY2tlZFJlZ2lzdGVycy5nZXQod2Fu
dGVkUGF5bG9hZEdQUikpOworICAgICAgICBpZiAoQ2FjaGVkUmVjb3ZlcnkqIGN1cnJlbnRQYXls
b2FkIHsgbV9yZWdpc3RlcnNbd2FudGVkUGF5bG9hZEdQUl0gfSkgeworICAgICAgICAgICAgaWYg
KGN1cnJlbnRQYXlsb2FkID09ICZsb2NhdGlvbikgeworICAgICAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICArICIsIHdhbnRlZFBheWxvYWRH
UFIsICIgaXMgT0tcbiIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAv
LyBTZWUgYWJvdmUKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGxvY2F0aW9uLnJl
Y292ZXJ5KCkudGVjaG5pcXVlKCkgPT0gSW5QYWlyCisgICAgICAgIHx8IGxvY2F0aW9uLnJlY292
ZXJ5KCkuaXNJbkdQUigpKSB7CisgICAgICAgIEdQUlJlZyBwYXlsb2FkR1BSOworICAgICAgICBp
ZiAobG9jYXRpb24ucmVjb3ZlcnkoKS50ZWNobmlxdWUoKSA9PSBJblBhaXIpCisgICAgICAgICAg
ICBwYXlsb2FkR1BSID0gbG9jYXRpb24ucmVjb3ZlcnkoKS5wYXlsb2FkR1BSKCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHBheWxvYWRHUFIgPSBsb2NhdGlvbi5yZWNvdmVyeSgpLmdwcigp
OworCisgICAgICAgIGlmICh3YW50ZWRQYXlsb2FkR1BSID09IEludmFsaWRHUFJSZWcpCisgICAg
ICAgICAgICB3YW50ZWRQYXlsb2FkR1BSID0gcGF5bG9hZEdQUjsKKworICAgICAgICBpZiAocGF5
bG9hZEdQUiAhPSB3YW50ZWRQYXlsb2FkR1BSKSB7CisgICAgICAgICAgICBpZiAobG9jYXRpb24u
cmVjb3ZlcnkoKS50ZWNobmlxdWUoKSA9PSBJblBhaXIKKyAgICAgICAgICAgICAgICAmJiB3YW50
ZWRQYXlsb2FkR1BSID09IGxvY2F0aW9uLnJlY292ZXJ5KCkudGFnR1BSKCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgKiBT
d2FwcGluZyAiLCBwYXlsb2FkR1BSLCAiIGFuZCAiLCB3YW50ZWRQYXlsb2FkR1BSLCAiXG4iKTsK
KyAgICAgICAgICAgICAgICBtX2ppdC5zd2FwKHBheWxvYWRHUFIsIHdhbnRlZFBheWxvYWRHUFIp
OworICAgICAgICAgICAgICAgIHVwZGF0ZVJlY292ZXJ5KGxvY2F0aW9uLCAKKyAgICAgICAgICAg
ICAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5QYWlyKHBheWxvYWRHUFIsIHdhbnRlZFBheWxvYWRH
UFIpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICogTW92aW5nICIsIHBheWxvYWRHUFIs
ICIgaW50byAiLCB3YW50ZWRQYXlsb2FkR1BSLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBtX2pp
dC5tb3ZlKHBheWxvYWRHUFIsIHdhbnRlZFBheWxvYWRHUFIpOworICAgICAgICAgICAgICAgIGlm
IChsb2NhdGlvbi5yZWNvdmVyeSgpLnRlY2huaXF1ZSgpID09IEluUGFpcikgeworICAgICAgICAg
ICAgICAgICAgICB1cGRhdGVSZWNvdmVyeShsb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFZhbHVlUmVjb3Zlcnk6OmluUGFpcihsb2NhdGlvbi5yZWNvdmVyeSgpLnRhZ0dQUigpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnRlZFBheWxvYWRHUFIpKTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB1cGRhdGVSZWNvdmVyeShsb2Nh
dGlvbiwgCisgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUih3YW50
ZWRQYXlsb2FkR1BSLCBsb2NhdGlvbi5yZWNvdmVyeSgpLmRhdGFGb3JtYXQoKSkpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICh3YW50
ZWRUYWdHUFIgPT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIHdhbnRlZFRhZ0dQUiA9IGdl
dEZyZWVHUFIoKTsKKyAgICAgICAgc3dpdGNoIChsb2NhdGlvbi5yZWNvdmVyeSgpLmRhdGFGb3Jt
YXQoKSkgeworICAgICAgICBjYXNlIERhdGFGb3JtYXRJbnQzMjoKKyAgICAgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICogTW92aW5nIGludDMyIHRhZyBp
bnRvICIsIHdhbnRlZFRhZ0dQUiwgIlxuIik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLAorICAgICAgICAgICAg
ICAgIHdhbnRlZFRhZ0dQUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEYXRh
Rm9ybWF0Q2VsbDoKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRh
dGFMb2coIiAgICogTW92aW5nIGNlbGwgdGFnIGludG8gIiwgd2FudGVkVGFnR1BSLCAiXG4iKTsK
KyAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpDZWxsVGFnKSwKKyAgICAgICAgICAgICAgICB3YW50ZWRUYWdHUFIpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46CisgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAqIE1vdmluZyBib29sZWFu
IHRhZyBpbnRvICIsIHdhbnRlZFRhZ0dQUiwgIlxuIik7CisgICAgICAgICAgICBtX2ppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyksCisgICAg
ICAgICAgICAgICAgd2FudGVkVGFnR1BSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIERhdGFGb3JtYXRKUzoKKyAgICAgICAgICAgIEFTU0VSVCh3YW50ZWRUYWdHUFIgIT0gbG9j
YXRpb24ucmVjb3ZlcnkoKS5wYXlsb2FkR1BSKCkpOworICAgICAgICAgICAgaWYgKHdhbnRlZFRh
Z0dQUiAhPSBsb2NhdGlvbi5yZWNvdmVyeSgpLnRhZ0dQUigpKSB7CisgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICogTW92aW5nICIs
IGxvY2F0aW9uLnJlY292ZXJ5KCkudGFnR1BSKCksICIgaW50byAiLCB3YW50ZWRUYWdHUFIsICJc
biIpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUobG9jYXRpb24ucmVjb3ZlcnkoKS50YWdH
UFIoKSwgd2FudGVkVGFnR1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGxvY2F0aW9uLnJl
Y292ZXJ5KCkuaXNJbkZQUigpKTsKKyAgICAgICAgaWYgKHdhbnRlZFRhZ0dQUiA9PSBJbnZhbGlk
R1BSUmVnKSB7CisgICAgICAgICAgICBBU1NFUlQod2FudGVkUGF5bG9hZEdQUiAhPSBJbnZhbGlk
R1BSUmVnKTsKKyAgICAgICAgICAgIG1fbG9ja2VkUmVnaXN0ZXJzLnNldCh3YW50ZWRQYXlsb2Fk
R1BSKTsKKyAgICAgICAgICAgIHdhbnRlZFRhZ0dQUiA9IGdldEZyZWVHUFIoKTsKKyAgICAgICAg
ICAgIG1fbG9ja2VkUmVnaXN0ZXJzLmNsZWFyKHdhbnRlZFBheWxvYWRHUFIpOworICAgICAgICB9
CisgICAgICAgIGlmICh3YW50ZWRQYXlsb2FkR1BSID09IEludmFsaWRHUFJSZWcpIHsKKyAgICAg
ICAgICAgIG1fbG9ja2VkUmVnaXN0ZXJzLnNldCh3YW50ZWRUYWdHUFIpOworICAgICAgICAgICAg
d2FudGVkUGF5bG9hZEdQUiA9IGdldEZyZWVHUFIoKTsKKyAgICAgICAgICAgIG1fbG9ja2VkUmVn
aXN0ZXJzLmNsZWFyKHdhbnRlZFRhZ0dQUik7CisgICAgICAgIH0KKyAgICAgICAgbV9qaXQuYm94
RG91YmxlKGxvY2F0aW9uLnJlY292ZXJ5KCkuZnByKCksIHdhbnRlZFRhZ0dQUiwgd2FudGVkUGF5
bG9hZEdQUik7CisgICAgfQorICAgIHVwZGF0ZVJlY292ZXJ5KGxvY2F0aW9uLCBWYWx1ZVJlY292
ZXJ5OjppblBhaXIod2FudGVkVGFnR1BSLCB3YW50ZWRQYXlsb2FkR1BSKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkgJiYgVVNFKEpTVkFMVUUzMl82
NCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZs
ZXI2NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyNjQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjMwYzk0YTJmYWVkOGZhYzk0ODA0Yjk1YjQ5NWYwOTM1NzAzMjYxYmUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNo
dWZmbGVyNjQuY3BwCkBAIC0wLDAgKzEsMzcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWxs
RnJhbWVTaHVmZmxlci5oIgorCisjaWYgRU5BQkxFKEpJVCkgJiYgVVNFKEpTVkFMVUU2NCkKKwor
I2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkRhdGFGb3JtYXQuaCIKKyNpbmNs
dWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworRGF0YUZvcm1h
dCBDYWxsRnJhbWVTaHVmZmxlcjo6ZW1pdFN0b3JlKAorICAgIENhY2hlZFJlY292ZXJ5JiBjYWNo
ZWRSZWNvdmVyeSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgYWRkcmVzcykKK3sKKyAgICBBU1NF
UlQoIWNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuaXNJbkpTU3RhY2soKSk7CisKKyAgICBzd2l0
Y2ggKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkudGVjaG5pcXVlKCkpIHsKKyAgICBjYXNlIElu
R1BSOgorICAgICAgICBtX2ppdC5zdG9yZVB0cihjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdw
cigpLCBhZGRyZXNzKTsKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRKUzsKKyAgICBjYXNlIFVu
Ym94ZWRJbnQzMkluR1BSOgorICAgICAgICBtX2ppdC5zdG9yZTMyKGNhY2hlZFJlY292ZXJ5LnJl
Y292ZXJ5KCkuZ3ByKCksIGFkZHJlc3Mud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KSk7CisgICAg
ICAgIHJldHVybiBEYXRhRm9ybWF0SW50MzI7CisgICAgY2FzZSBVbmJveGVkSW50NTJJbkdQUjoK
KyAgICAgICAgbV9qaXQucnNoaWZ0NjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1Zh
bHVlOjppbnQ1MlNoaWZ0QW1vdW50KSwKKyAgICAgICAgICAgIGNhY2hlZFJlY292ZXJ5LnJlY292
ZXJ5KCkuZ3ByKCkpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFVuYm94ZWRTdHJp
Y3RJbnQ1MkluR1BSOgorICAgICAgICBtX2ppdC5zdG9yZVB0cihjYWNoZWRSZWNvdmVyeS5yZWNv
dmVyeSgpLmdwcigpLCBhZGRyZXNzKTsKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRTdHJpY3RJ
bnQ1MjsKKyAgICBjYXNlIFVuYm94ZWRCb29sZWFuSW5HUFI6CisgICAgICAgIG1faml0LnN0b3Jl
UHRyKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCksIGFkZHJlc3MpOworICAgICAgICBy
ZXR1cm4gRGF0YUZvcm1hdEJvb2xlYW47CisgICAgY2FzZSBVbmJveGVkQ2VsbEluR1BSOgorICAg
ICAgICBtX2ppdC5zdG9yZVB0cihjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpLCBhZGRy
ZXNzKTsKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRDZWxsOworICAgIGNhc2UgVW5ib3hlZERv
dWJsZUluRlBSOgorICAgICAgICBtX2ppdC5zdG9yZURvdWJsZShjYWNoZWRSZWNvdmVyeS5yZWNv
dmVyeSgpLmZwcigpLCBhZGRyZXNzKTsKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXREb3VibGU7
CisgICAgY2FzZSBJbkZQUjoKKyAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUoY2FjaGVkUmVjb3Zl
cnkucmVjb3ZlcnkoKS5mcHIoKSwgYWRkcmVzcyk7CisgICAgICAgIHJldHVybiBEYXRhRm9ybWF0
SlM7CisgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgbV9qaXQuc3RvcmVUcnVzdGVkVmFsdWUo
Y2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5jb25zdGFudCgpLCBhZGRyZXNzKTsKKyAgICAgICAg
cmV0dXJuIERhdGFGb3JtYXRKUzsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6ZW1p
dEJveChDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3ZlcnkpCit7CisgICAgQVNTRVJUKGNhbkJv
eChjYWNoZWRSZWNvdmVyeSkpOworICAgIGlmIChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmlz
Q29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGNhY2hlZFJlY292ZXJ5LnJl
Y292ZXJ5KCkuaXNJbkdQUigpKSB7CisgICAgICAgIHN3aXRjaCAoY2FjaGVkUmVjb3ZlcnkucmVj
b3ZlcnkoKS5kYXRhRm9ybWF0KCkpIHsKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0SW50MzI6Cisg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAqIEJv
eGluZyAiLCBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpKTsKKyAgICAgICAgICAgIG1faml0Lnpl
cm9FeHRlbmQzMlRvUHRyKAorICAgICAgICAgICAgICAgIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5
KCkuZ3ByKCksCisgICAgICAgICAgICAgICAgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIo
KSk7CisgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGRvIHRoaXMgdGhlIGhhcmQgd2F5LgorICAg
ICAgICAgICAgbV9qaXQub3I2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVO
dW1iZXIpLAorICAgICAgICAgICAgICAgIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCkp
OworICAgICAgICAgICAgY2FjaGVkUmVjb3Zlcnkuc2V0UmVjb3ZlcnkoCisgICAgICAgICAgICAg
ICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSwg
RGF0YUZvcm1hdEpTKSk7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIgaW50byAiLCBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLCAiXG4iKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0SW50NTI6CisgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAqIEJveGluZyAi
LCBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpKTsKKyAgICAgICAgICAgIG1faml0LnJzaGlmdDY0
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6aW50NTJTaGlmdEFtb3VudCks
CisgICAgICAgICAgICAgICAgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSk7CisgICAg
ICAgICAgICBjYWNoZWRSZWNvdmVyeS5zZXRSZWNvdmVyeSgKKyAgICAgICAgICAgICAgICBWYWx1
ZVJlY292ZXJ5OjppbkdQUihjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpLCBEYXRhRm9y
bWF0U3RyaWN0SW50NTIpKTsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAg
ICAgIGRhdGFMb2coIiBpbnRvICIsIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCksICJcbiIpOwor
ICAgICAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdFN0cmljdElu
dDUyOiB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9n
KCIgICAqIEJveGluZyAiLCBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpKTsKKyAgICAgICAgICAg
IEZQUlJlZyByZXN1bHRGUFIgPSBnZXRGcmVlRlBSKCk7CisgICAgICAgICAgICBBU1NFUlQocmVz
dWx0RlBSICE9IEludmFsaWRGUFJSZWcpOworICAgICAgICAgICAgbV9qaXQuY29udmVydEludDY0
VG9Eb3VibGUoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSwgcmVzdWx0RlBSKTsKKyAg
ICAgICAgICAgIHVwZGF0ZVJlY292ZXJ5KGNhY2hlZFJlY292ZXJ5LCBWYWx1ZVJlY292ZXJ5Ojpp
bkZQUihyZXN1bHRGUFIsIERhdGFGb3JtYXREb3VibGUpKTsKKyAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiBpbnRvICIsIGNhY2hlZFJlY292ZXJ5LnJl
Y292ZXJ5KCksICJcbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjoKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICogQm94aW5nICIsIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5
KCkpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihWYWx1ZUZhbHNlKSwKKyAgICAgICAgICAgICAgICBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgp
LmdwcigpKTsKKyAgICAgICAgICAgIGNhY2hlZFJlY292ZXJ5LnNldFJlY292ZXJ5KAorICAgICAg
ICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCku
Z3ByKCksIERhdGFGb3JtYXRKUykpOworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgZGF0YUxvZygiIGludG8gIiwgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKSwgIlxu
Iik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY2FjaGVkUmVjb3ZlcnkucmVjb3Zl
cnkoKS5pc0luRlBSKCkpIHsKKyAgICAgICAgaWYgKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCku
ZGF0YUZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpIHsKKyAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICogQm94aW5nICIsIGNhY2hlZFJlY292
ZXJ5LnJlY292ZXJ5KCkpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IGNhY2hlZFJl
Y292ZXJ5LndhbnRlZEpTVmFsdWVSZWdzKCkuZ3ByKCk7CisgICAgICAgICAgICBpZiAocmVzdWx0
R1BSID09IEludmFsaWRHUFJSZWcgfHwgbV9yZWdpc3RlcnNbcmVzdWx0R1BSXSkKKyAgICAgICAg
ICAgICAgICByZXN1bHRHUFIgPSBnZXRGcmVlR1BSKCk7CisgICAgICAgICAgICBBU1NFUlQocmVz
dWx0R1BSICE9IEludmFsaWRHUFJSZWcpOworICAgICAgICAgICAgbV9qaXQucHVyaWZ5TmFOKGNh
Y2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZnByKCkpOworICAgICAgICAgICAgbV9qaXQubW92ZURv
dWJsZVRvNjQoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5mcHIoKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIG1faml0LnN1YjY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVGFnVHlw
ZU51bWJlciksIHJlc3VsdEdQUik7CisgICAgICAgICAgICB1cGRhdGVSZWNvdmVyeShjYWNoZWRS
ZWNvdmVyeSwgVmFsdWVSZWNvdmVyeTo6aW5HUFIocmVzdWx0R1BSLCBEYXRhRm9ybWF0SlMpKTsK
KyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiBpbnRv
ICIsIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCksICJcbiIpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIEFTU0VSVChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmRh
dGFGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SlMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBDYWxsRnJhbWVTaHVm
Zmxlcjo6ZW1pdExvYWQoQ2FjaGVkUmVjb3ZlcnkmIGNhY2hlZFJlY292ZXJ5KQoreworICAgIGlm
ICghY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5pc0luSlNTdGFjaygpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiICAgKiBMb2FkaW5nICIs
IGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCksICIgaW50byAiKTsKKworICAgIFZpcnR1YWxSZWdp
c3RlciByZWcgPSBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLnZpcnR1YWxSZWdpc3RlcigpOwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFkZHJlc3MgeyBhZGRyZXNzRm9yT2xkKHJlZykg
fTsKKyAgICBib29sIHRyeUZQUiB7IHRydWUgfTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSIHsgY2Fj
aGVkUmVjb3Zlcnkud2FudGVkSlNWYWx1ZVJlZ3MoKS5ncHIoKSB9OworCisgICAgLy8gSWYgd2Ug
d2FudCBhIEdQUiBhbmQgaXQncyBhdmFpbGFibGUsIHRoYXQncyBiZXR0ZXIgdGhhbiBsb2FkaW5n
CisgICAgLy8gaW50byBhbiBGUFIuCisgICAgaWYgKHJlc3VsdEdQUiAhPSBJbnZhbGlkR1BSUmVn
ICYmICFtX3JlZ2lzdGVyc1tyZXN1bHRHUFJdCisgICAgICAgICYmICFtX2xvY2tlZFJlZ2lzdGVy
cy5nZXQocmVzdWx0R1BSKSAmJiBjYWNoZWRSZWNvdmVyeS5sb2Fkc0ludG9HUFIoKSkKKyAgICAg
ICAgdHJ5RlBSID0gZmFsc2U7CisKKyAgICAvLyBPdGhlcndpc2UsIHdlIHByZWZlciBsb2FkaW5n
IGludG8gRlBScyBpZiBwb3NzaWJsZQorICAgIGlmICh0cnlGUFIgJiYgY2FjaGVkUmVjb3Zlcnku
bG9hZHNJbnRvRlBSKCkpIHsKKyAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiB7IGNhY2hlZFJlY292
ZXJ5LndhbnRlZEZQUigpIH07CisgICAgICAgIGlmIChyZXN1bHRGUFIgPT0gSW52YWxpZEZQUlJl
ZyB8fCBtX3JlZ2lzdGVyc1tyZXN1bHRGUFJdIHx8IG1fbG9ja2VkUmVnaXN0ZXJzLmdldChyZXN1
bHRGUFIpKQorICAgICAgICAgICAgcmVzdWx0RlBSID0gZ2V0RnJlZUZQUigpOworICAgICAgICBp
ZiAocmVzdWx0RlBSICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgIG1faml0LmxvYWRE
b3VibGUoYWRkcmVzcywgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZGF0YUZv
cm1hdCA9IERhdGFGb3JtYXRKUzsKKyAgICAgICAgICAgIC8vIFdlIGNvdWxkIGJlIHRyYW5zZm9y
bWluZyBhIERhdGFGb3JtYXRDZWxsIGludG8gYQorICAgICAgICAgICAgLy8gRGF0YUZvcm1hdEpT
IGhlcmUgLSBidXQgdGhhdCdzIE9LLgorICAgICAgICAgICAgaWYgKGNhY2hlZFJlY292ZXJ5LnJl
Y292ZXJ5KCkuZGF0YUZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpCisgICAgICAgICAgICAg
ICAgZGF0YUZvcm1hdCA9IERhdGFGb3JtYXREb3VibGU7CisgICAgICAgICAgICB1cGRhdGVSZWNv
dmVyeShjYWNoZWRSZWNvdmVyeSwKKyAgICAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkZQ
UihyZXN1bHRGUFIsIGRhdGFGb3JtYXQpKTsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICAgICAgICAgIGRhdGFMb2coY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKSwgIlxuIik7Cisg
ICAgICAgICAgICBpZiAocmVnID09IG5ld0FzT2xkKGRhbmdlckZyb250aWVyKCkpKQorICAgICAg
ICAgICAgICAgIHVwZGF0ZURhbmdlckZyb250aWVyKCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBBU1NFUlQoY2FjaGVkUmVjb3ZlcnkubG9hZHNJbnRvR1BS
KCkpOworICAgIGlmIChyZXN1bHRHUFIgPT0gSW52YWxpZEdQUlJlZyB8fCBtX3JlZ2lzdGVyc1ty
ZXN1bHRHUFJdIHx8IG1fbG9ja2VkUmVnaXN0ZXJzLmdldChyZXN1bHRHUFIpKQorICAgICAgICBy
ZXN1bHRHUFIgPSBnZXRGcmVlR1BSKCk7CisgICAgQVNTRVJUKHJlc3VsdEdQUiAhPSBJbnZhbGlk
R1BSUmVnKTsKKyAgICBtX2ppdC5sb2FkUHRyKGFkZHJlc3MsIHJlc3VsdEdQUik7CisgICAgdXBk
YXRlUmVjb3ZlcnkoY2FjaGVkUmVjb3ZlcnksCisgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluR1BS
KHJlc3VsdEdQUiwgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5kYXRhRm9ybWF0KCkpKTsKKyAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZyhjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgp
LCAiXG4iKTsKKyAgICBpZiAocmVnID09IG5ld0FzT2xkKGRhbmdlckZyb250aWVyKCkpKQorICAg
ICAgICB1cGRhdGVEYW5nZXJGcm9udGllcigpOworfQorCitib29sIENhbGxGcmFtZVNodWZmbGVy
OjpjYW5Mb2FkKENhY2hlZFJlY292ZXJ5JiBjYWNoZWRSZWNvdmVyeSkKK3sKKyAgICBpZiAoIWNh
Y2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuaXNJbkpTU3RhY2soKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBBU1NFUlQoY2FjaGVkUmVjb3ZlcnkubG9hZHNJbnRvRlBSKCkgfHwgY2FjaGVk
UmVjb3ZlcnkubG9hZHNJbnRvR1BSKCkpOworCisgICAgaWYgKGNhY2hlZFJlY292ZXJ5LmxvYWRz
SW50b0ZQUigpICYmIGdldEZyZWVGUFIoKSAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIGlmIChjYWNoZWRSZWNvdmVyeS5sb2Fkc0ludG9HUFIoKSAmJiBnZXRG
cmVlR1BSKCkgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQ2FjaGVkUmVjb3Zlcnk6OmxvYWRzSW50b0ZQUigpIGNv
bnN0Cit7CisgICAgc3dpdGNoIChyZWNvdmVyeSgpLnRlY2huaXF1ZSgpKSB7CisgICAgY2FzZSBE
b3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6Cisg
ICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgQ2Fj
aGVkUmVjb3Zlcnk6OmxvYWRzSW50b0dQUigpIGNvbnN0Cit7CisgICAgc3dpdGNoIChyZWNvdmVy
eSgpLnRlY2huaXF1ZSgpKSB7CisgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFjazoKKyAg
ICBjYXNlIEludDUyRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgIGNhc2UgU3RyaWN0SW50NTJEaXNw
bGFjZWRJbkpTU3RhY2s6CisgICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5KU1N0YWNrOgorICAg
IGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFj
azoKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorfQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVyOjplbWl0RGlzcGxhY2Uo
Q2FjaGVkUmVjb3ZlcnkmIGNhY2hlZFJlY292ZXJ5KQoreworICAgIFJlZyB3YW50ZWRSZWc7Cisg
ICAgaWYgKCEod2FudGVkUmVnID0gUmVnIHsgY2FjaGVkUmVjb3Zlcnkud2FudGVkSlNWYWx1ZVJl
Z3MoKS5ncHIoKSB9KSkKKyAgICAgICAgd2FudGVkUmVnID0gUmVnIHsgY2FjaGVkUmVjb3Zlcnku
d2FudGVkRlBSKCkgfTsKKyAgICBBU1NFUlQod2FudGVkUmVnKTsKKyAgICBBU1NFUlQoIW1fbG9j
a2VkUmVnaXN0ZXJzLmdldCh3YW50ZWRSZWcpKTsKKworICAgIGlmIChDYWNoZWRSZWNvdmVyeSog
Y3VycmVudCA9IG1fcmVnaXN0ZXJzW3dhbnRlZFJlZ10pIHsKKyAgICAgICAgaWYgKGN1cnJlbnQg
PT0gJmNhY2hlZFJlY292ZXJ5KSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIgICArICIsIHdhbnRlZFJlZywgIiBpcyBPS1xuIik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gV2UgY291bGQgZG8gYSBtb3JlIGNv
bXBsZXggdGhpbmcgYnkgZmluZGluZyBjeWNsZXMKKyAgICAgICAgLy8gZXRjLiBpbiB0aGF0IGNh
c2UuCisgICAgICAgIC8vIEhvd2V2ZXIsIGVuZGluZyB1cCBpbiB0aGlzIHNpdHVhdGlvbiB3aWxs
IGJlIHN1cGVyCisgICAgICAgIC8vIHJhcmUsIGFuZCBzaG91bGQgYWN0dWFsbHkgYmUgb3V0cmln
aHQgaW1wb3NzaWJsZSBmb3IKKyAgICAgICAgLy8gbm9uLUZUTCB0aWVycywgc2luY2U6CisgICAg
ICAgIC8vICAoYSkgQWxsIGRvdWJsZXMgaGF2ZSBiZWVuIGNvbnZlcnRlZCBpbnRvIEpTVmFsdWVz
IHdpdGgKKyAgICAgICAgLy8gICAgICBWYWx1ZVJlcCBub2Rlcywgc28gRlBScyBhcmUgaW5pdGlh
bGx5IGZyZWUKKyAgICAgICAgLy8KKyAgICAgICAgLy8gIChiKSBUaGUgb25seSByZWNvdmVyaWVz
IHdpdGggd2FudGVkIHJlZ2lzdGVycyBhcmUgdGhlCisgICAgICAgIC8vICAgICAgY2FsbGVlICh3
aGljaCBhbHdheXMgc3RhcnRzIG91dCBpbiBhIHJlZ2lzdGVyKSBhbmQKKyAgICAgICAgLy8gICAg
ICB0aGUgY2FsbGVlLXNhdmUgcmVnaXN0ZXJzCisgICAgICAgIC8vCisgICAgICAgIC8vICAoYykg
VGhlIGNhbGxlZS1zYXZlIHJlZ2lzdGVycyBhcmUgdGhlIGZpcnN0IHRoaW5ncyB3ZQorICAgICAg
ICAvLyAgICAgIGxvYWQgKGFmdGVyIHRoZSByZXR1cm4gUEMpLCBhbmQgdGhleSBhcmUgbG9hZGVk
IGFzIEpTVmFsdWVzCisgICAgICAgIC8vCisgICAgICAgIC8vICAoZCkgV2UgcHJlZmVyIGxvYWRp
bmcgSlNWYWx1ZXMgaW50byBGUFJzIGlmIHRoZWlyCisgICAgICAgIC8vICAgICAgd2FudGVkIEdQ
UiBpcyBub3QgYXZhaWxhYmxlCisgICAgICAgIC8vCisgICAgICAgIC8vICAoZSkgSWYgd2UgZW5k
IHVwIHNwaWxsaW5nIHNvbWUgcmVnaXN0ZXJzIHdpdGggYQorICAgICAgICAvLyAgICAgIHRhcmdl
dCwgd2Ugd29uJ3QgbG9hZCB0aGVtIGFnYWluIGJlZm9yZSB0aGUgdmVyeQorICAgICAgICAvLyAg
ICAgIGVuZCBvZiB0aGUgYWxnb3JpdGhtCisgICAgICAgIC8vCisgICAgICAgIC8vIENvbWJpbmVk
LCB0aGlzIG1lYW5zIHRoYXQgd2Ugd2lsbCBuZXZlciBsb2FkIGEgcmVjb3ZlcnkKKyAgICAgICAg
Ly8gd2l0aCBhIHdhbnRlZCBHUFIgaW50byBhbnkgR1BSIG90aGVyIHRoYW4gaXRzIHdhbnRlZAor
ICAgICAgICAvLyBHUFIuIFRoZSBjYWxsZWUgY291bGQgaG93ZXZlciBoYXZlIGJlZW4gaW5pdGlh
bGx5IGluCisgICAgICAgIC8vIG9uZSBvZiB0aGUgY2FsbGVlLXNhdmUgcmVnaXN0ZXJzIC0gYnV0
IHNpbmNlIHRoZSB3YW50ZWQKKyAgICAgICAgLy8gR1BSIGZvciB0aGUgY2FsbGVlIGlzIGFsd2F5
cyByZWdUMCwgaXQgd2lsbCBiZSB0aGUKKyAgICAgICAgLy8gZmlyc3Qgb25lIHRvIGJlIGRpc3Bs
YWNlZCwgYW5kIHdlIHdvbid0IHNlZSBpdCB3aGVuCisgICAgICAgIC8vIGhhbmRsaW5nIGFueSBv
ZiB0aGUgY2FsbGVlLXNhdmUgcmVnaXN0ZXJzLgorICAgICAgICAvLworICAgICAgICAvLyBUaHVz
LCB0aGUgb25seSB3YXkgd2UgY291bGQgZXZlciByZWFjaCB0aGlzIHBhdGggaXMgaW4KKyAgICAg
ICAgLy8gdGhlIEZUTCwgd2hlbiB0aGVyZSBpcyBzbyBtdWNoIHByZXNzdXJlIHRoYXQgd2UKKyAg
ICAgICAgLy8gYWJzb2x1dGVseSBuZWVkIHRvIGxvYWQgdGhlIGNhbGxlZS1zYXZlIHJlZ2lzdGVy
cyBpbnRvCisgICAgICAgIC8vIGRpZmZlcmVudCBHUFJzIGluaXRpYWxseSBidXQgbm90IGVub3Vn
aCBwcmVzc3VyZSB0bworICAgICAgICAvLyB0aGVuIGhhdmUgdG8gc3BpbGwgYWxsIG9mIHRoZW0u
IEFuZCBldmVuIGluIHRoYXQgY2FzZSwKKyAgICAgICAgLy8gZGVwZW5kaW5nIG9uIHRoZSBvcmRl
ciBpbiB3aGljaCBMTFZNIHNhdmVzIHRoZQorICAgICAgICAvLyBjYWxsZWUtc2F2ZXMsIHdlIHdp
bGwgcHJvYmFibHkgc3RpbGwgYmUgc2FmZS4gQW55d2F5LAorICAgICAgICAvLyB0aGUgY291cGxl
IGV4dHJhIG1vdmUgaW5zdHJ1Y3Rpb25zIGNvbXBhcmVkIHRvIGFuCisgICAgICAgIC8vIGVmZmlj
aWVudCBjeWNsZS1iYXNlZCBhbGdvcml0aG0gYXJlIG5vdCBnb2luZyB0byBodXJ0CisgICAgICAg
IC8vIHVzLgorICAgICAgICBpZiAod2FudGVkUmVnLmlzRlBSKCkpIHsKKyAgICAgICAgICAgIEZQ
UlJlZyB0ZW1wRlBSID0gZ2V0RnJlZUZQUigpOworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAqIE1vdmluZyAiLCB3YW50ZWRSZWcsICIgaW50byAi
LCB0ZW1wRlBSLCAiXG4iKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUod2FudGVkUmVn
LmZwcigpLCB0ZW1wRlBSKTsKKyAgICAgICAgICAgIHVwZGF0ZVJlY292ZXJ5KCpjdXJyZW50LAor
ICAgICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluRlBSKHRlbXBGUFIsIGN1cnJlbnQtPnJl
Y292ZXJ5KCkuZGF0YUZvcm1hdCgpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBH
UFJSZWcgdGVtcEdQUiA9IGdldEZyZWVHUFIoKTsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgKiBNb3ZpbmcgIiwgd2FudGVkUmVnLmdwcigpLCAi
IGludG8gIiwgdGVtcEdQUiwgIlxuIik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKHdhbnRlZFJl
Zy5ncHIoKSwgdGVtcEdQUik7CisgICAgICAgICAgICB1cGRhdGVSZWNvdmVyeSgqY3VycmVudCwK
KyAgICAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUih0ZW1wR1BSLCBjdXJyZW50LT5y
ZWNvdmVyeSgpLmRhdGFGb3JtYXQoKSkpOworICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVCgh
bV9yZWdpc3RlcnNbd2FudGVkUmVnXSk7CisKKyAgICBpZiAoY2FjaGVkUmVjb3ZlcnkucmVjb3Zl
cnkoKS5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgLy8gV2Ugb25seSBjYXJlIGFib3V0IGNhbGxl
ZSBzYXZlcyBmb3Igd2FudGVkIEZQUnMsIGFuZCB0aG9zZSBhcmUgbmV2ZXIgY29uc3RhbnRzCisg
ICAgICAgIEFTU0VSVCh3YW50ZWRSZWcuaXNHUFIoKSk7CisgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgZGF0YUxvZygiICAgKiBMb2FkaW5nICIsIGNhY2hlZFJlY292ZXJ5LnJlY292
ZXJ5KCkuY29uc3RhbnQoKSwgIiBpbnRvICIsIHdhbnRlZFJlZywgIlxuIik7CisgICAgICAgIG1f
aml0Lm1vdmVUcnVzdGVkVmFsdWUoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5jb25zdGFudCgp
LCBKU1ZhbHVlUmVncyB7IHdhbnRlZFJlZy5ncHIoKSB9KTsKKyAgICAgICAgdXBkYXRlUmVjb3Zl
cnkoCisgICAgICAgICAgICBjYWNoZWRSZWNvdmVyeSwKKyAgICAgICAgICAgIFZhbHVlUmVjb3Zl
cnk6OmluUmVnaXN0ZXIod2FudGVkUmVnLCBEYXRhRm9ybWF0SlMpKTsKKyAgICB9IGVsc2UgaWYg
KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuaXNJbkdQUigpKSB7CisgICAgICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICAgKiBNb3ZpbmcgIiwgY2FjaGVkUmVjb3Zlcnku
cmVjb3ZlcnkoKSwgIiBpbnRvICIsIHdhbnRlZFJlZywgIlxuIik7CisgICAgICAgIGlmICh3YW50
ZWRSZWcuaXNHUFIoKSkKKyAgICAgICAgICAgIG1faml0Lm1vdmUoY2FjaGVkUmVjb3ZlcnkucmVj
b3ZlcnkoKS5ncHIoKSwgd2FudGVkUmVnLmdwcigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgbV9qaXQubW92ZTY0VG9Eb3VibGUoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSwg
d2FudGVkUmVnLmZwcigpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FjaGVkUmVjb3Zlcnku
cmVjb3ZlcnkoKS5kYXRhRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgdXBkYXRl
UmVjb3ZlcnkoY2FjaGVkUmVjb3ZlcnksCisgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjppblJl
Z2lzdGVyKHdhbnRlZFJlZywgRGF0YUZvcm1hdEpTKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
QVNTRVJUKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuaXNJbkZQUigpKTsKKyAgICAgICAgaWYg
KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZGF0YUZvcm1hdCgpID09IERhdGFGb3JtYXREb3Vi
bGUpIHsKKyAgICAgICAgICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCBjYWxsZWUgc2F2ZXMgZm9y
IHdhbnRlZCBGUFJzLCBhbmQgdGhvc2UgYXJlIGFsd2F5cyBEYXRhRm9ybWF0SlMKKyAgICAgICAg
ICAgIEFTU0VSVCh3YW50ZWRSZWcuaXNHUFIoKSk7CisgICAgICAgICAgICAvLyBUaGlzIHdpbGwg
YXV0b21hdGljYWxseSBwaWNrIHRoZSB3YW50ZWQgR1BSCisgICAgICAgICAgICBlbWl0Qm94KGNh
Y2hlZFJlY292ZXJ5KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICogTW92aW5nICIsIGNhY2hlZFJlY292ZXJ5
LnJlY292ZXJ5KCkuZnByKCksICIgaW50byAiLCB3YW50ZWRSZWcsICJcbiIpOworICAgICAgICAg
ICAgaWYgKHdhbnRlZFJlZy5pc0dQUigpKQorICAgICAgICAgICAgICAgIG1faml0Lm1vdmVEb3Vi
bGVUbzY0KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZnByKCksIHdhbnRlZFJlZy5ncHIoKSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9qaXQubW92ZURvdWJsZShjYWNo
ZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmZwcigpLCB3YW50ZWRSZWcuZnByKCkpOworICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5kYXRhRm9ybWF0KCkg
PT0gRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgIHVwZGF0ZVJlY292ZXJ5KGNhY2hlZFJlY292
ZXJ5LAorICAgICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluUmVnaXN0ZXIod2FudGVkUmVn
LCBEYXRhRm9ybWF0SlMpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEFTU0VSVChtX3JlZ2lz
dGVyc1t3YW50ZWRSZWddID09ICZjYWNoZWRSZWNvdmVyeSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkgJiYgVVNFKEpTVkFMVUU2NCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwuY3BwCmluZGV4IDViNTA5OWFlYmU5MTY0Zjg0ODNmMDYyZmYw
NTc5MjM4YTA4MDljZGQuLjNmZmU3NWQ0ZDYzYmIyZWI0OGU5NGU1ZmFhNjQ0ODc2YzE0MzgwNDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcApAQCAtMjksNiArMjksNyBAQAog
I2lmIFVTRShKU1ZBTFVFNjQpCiAjaW5jbHVkZSAiSklULmgiCiAKKyNpbmNsdWRlICJDYWxsRnJh
bWVTaHVmZmxlci5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkpJVElubGlu
ZXMuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCkBAIC0xODAsOSArMTgxLDYgQEAgdm9pZCBKSVQ6
OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSUQsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgdW5zaWduZWQgY2EKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MpCi0g
ICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLQogICAgIERhdGFMYWJlbFB0ciBhZGRy
ZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrOwogICAgIEp1bXAgc2xvd0Nhc2UgPSBicmFuY2hQdHJX
aXRoUGF0Y2goTm90RXF1YWwsIHJlZ1QwLCBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrLCBU
cnVzdGVkSW1tUHRyKDApKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZSk7CkBAIC0xOTMsNyAr
MTkxLDI4IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUlELCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhCiAgICAgbV9jYWxsQ29tcGlsYXRpb25J
bmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoQmVnaW4gPSBhZGRyZXNzT2ZMaW5rZWRGdW5j
dGlvbkNoZWNrOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0u
Y2FsbExpbmtJbmZvID0gaW5mbzsKIAotICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwg
fHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MpIHsKKyAgICBpZiAob3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsKSB7CisgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVE
YXRhOworICAgICAgICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMgPQorICAgICAgICAgICAgaW5zdHJ1
Y3Rpb25bNF0udS5vcGVyYW5kIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJl
Z2lzdGVyKTsKKyAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUoaW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQ7ICsraSkgeworICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJnc1tpXSA9CisgICAg
ICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAorICAgICAgICAg
ICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSAtIGluc3RydWN0aW9uWzRd
LnUub3BlcmFuZCwKKyAgICAgICAgICAgICAgICAgICAgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAg
fQorICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPQorICAgICAgICAgICAgVmFsdWVSZWNvdmVy
eTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7CisgICAgICAgIHNodWZmbGVEYXRhLnNldHVw
Q2FsbGVlU2F2ZVJlZ2lzdGVycyhtX2NvZGVCbG9jayk7CisgICAgICAgIGluZm8tPnNldEZyYW1l
U2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOworICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigqdGhp
cywgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgICAgICBtX2NhbGxDb21w
aWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhPdGhlciA9IGVtaXROYWtlZFRh
aWxDYWxsKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAob3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsX3ZhcmFyZ3MpIHsKKyAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
OwogICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CiAgICAgICAgIG1fY2FsbENvbXBp
bGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aE90aGVyID0gZW1pdE5ha2VkVGFp
bENhbGwoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjE4LDYgKzIzNyw5IEBAIHZvaWQgSklUOjpj
b21waWxlT3BDYWxsU2xvd0Nhc2UoT3Bjb2RlSUQgb3Bjb2RlSUQsIEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgVmVjCiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAKKyAgICBpZiAob3Bjb2Rl
SUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzKQor
ICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisKICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8p
LCByZWdUMik7CiAKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhd
LmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1YihsaW5r
Q2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZXBhdGNoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRj
aC5jcHAKaW5kZXggYjBkOWM2MjRjY2JmZjViZjRlODhjNGU0ODU2YmMwODU4MjIzZGRiOC4uZjQ5
NjI1MjkzZGJiYTZmODYyOTM1YzIwYzVhYjkwYWU0NmNiNDg4NSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlcGF0Y2guY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQWNjZXNzb3JD
YWxsSklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJCaW5hcnlTd2l0Y2guaCIKICNpbmNsdWRl
ICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgogI2luY2x1
ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJERkdTcGVjdWxhdGl2ZUpJVC5oIgogI2lu
Y2x1ZGUgIkZUTFRodW5rcy5oIgpAQCAtMTc1NywyNiArMTc1OCwzMiBAQCB2b2lkIGxpbmtQb2x5
bW9ycGhpY0NhbGwoCiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsK
ICAgICAKLSAgICBwdHJkaWZmX3Qgb2Zmc2V0VG9GcmFtZSA9IC1zaXplb2YoQ2FsbGVyRnJhbWVB
bmRQQyk7Ci0KLSAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXAgb2tBcmd1bWVudENvdW50ID0gc3R1YkppdC5icmFuY2gzMigKLSAgICAgICAgICAg
IENDYWxsSGVscGVyczo6QmVsb3csIENDYWxsSGVscGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBlcnM6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdp
c3RlcikgKiBKU1N0YWNrOjpBcmd1bWVudENvdW50KSArIG9mZnNldFRvRnJhbWUgKyBQYXlsb2Fk
T2Zmc2V0KSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMTAwMDAwMDApKTsKLSAgICAgICAg
c3R1YkppdC5hYm9ydFdpdGhSZWFzb24oUmVwYXRjaEluc2FuZUFyZ3VtZW50Q291bnQpOwotICAg
ICAgICBva0FyZ3VtZW50Q291bnQubGluaygmc3R1YkppdCk7CisgICAgc3RkOjp1bmlxdWVfcHRy
PENhbGxGcmFtZVNodWZmbGVyPiBmcmFtZVNodWZmbGVyOworICAgIGlmIChjYWxsTGlua0luZm8u
ZnJhbWVTaHVmZmxlRGF0YSgpKSB7CisgICAgICAgIEFTU0VSVChjYWxsTGlua0luZm8uaXNUYWls
Q2FsbCgpKTsKKyAgICAgICAgZnJhbWVTaHVmZmxlciA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbEZy
YW1lU2h1ZmZsZXI+KHN0dWJKaXQsICpjYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSgpKTsK
KyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICAvLyBXZSB3b3VsZCBoYXZlIGFscmVhZHkg
Y2hlY2tlZCB0aGF0IHRoZSBjYWxsZWUgaXMgYSBjZWxsLCBhbmQgd2UgY2FuCisgICAgICAgIC8v
IHVzZSB0aGUgYWRkaXRpb25hbCByZWdpc3RlciB0aGlzIGJ1eXMgdXMuCisgICAgICAgIGZyYW1l
U2h1ZmZsZXItPmFzc3VtZUNhbGxlZUlzQ2VsbCgpOworI2VuZGlmCisgICAgICAgIGZyYW1lU2h1
ZmZsZXItPmxvY2tHUFIoY2FsbGVlR1BSKTsKICAgICB9Ci0gICAgCi0gICAgR1BSUmVnIHNjcmF0
Y2ggPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoY2FsbGVlR1BSKTsKICAgICBH
UFJSZWcgY29tcGFyaXNvblZhbHVlR1BSOwogICAgIAogICAgIGlmIChpc0Nsb3N1cmVDYWxsKSB7
Ci0gICAgICAgIC8vIFZlcmlmeSB0aGF0IHdlIGhhdmUgYSBmdW5jdGlvbiBhbmQgc3Rhc2ggdGhl
IGV4ZWN1dGFibGUgaW4gc2NyYXRjaC4KKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAg
ICAgIGlmIChmcmFtZVNodWZmbGVyKQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IGZyYW1lU2h1
ZmZsZXItPmFjcXVpcmVHUFIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQ
UiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihjYWxsZWVHUFIpOworICAgICAg
ICAvLyBWZXJpZnkgdGhhdCB3ZSBoYXZlIGEgZnVuY3Rpb24gYW5kIHN0YXNoIHRoZSBleGVjdXRh
YmxlIGluIHNjcmF0Y2hHUFIuCiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAvLyBXZSBj
YW4gc2FmZWx5IGNsb2JiZXIgZXZlcnl0aGluZyBleGNlcHQgdGhlIGNhbGxlZUdQUi4gV2UgY2Fu
J3QgcmVseSBvbiB0YWdNYXNrUmVnaXN0ZXIKLSAgICAgICAgLy8gYmVpbmcgc2V0LiBTbyB3ZSBk
byB0aGlzIHRoZSBoYXJkIHdheS4KLSAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tNjQoVGFnTWFzayksIHNjcmF0Y2gpOwotICAgICAgICBzbG93UGF0aC5hcHBl
bmQoc3R1YkppdC5icmFuY2hUZXN0NjQoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBjYWxsZWVHUFIs
IHNjcmF0Y2gpKTsKKyAgICAgICAgLy8gV2UgY2FuJ3QgcmVseSBvbiB0YWdNYXNrUmVnaXN0ZXIg
YmVpbmcgc2V0LCBzbyB3ZSBkbyB0aGlzIHRoZSBoYXJkCisgICAgICAgIC8vIHdheS4KKyAgICAg
ICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVGFnTWFzayksIHNj
cmF0Y2hHUFIpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hUZXN0NjQo
Q0NhbGxIZWxwZXJzOjpOb25aZXJvLCBjYWxsZWVHUFIsIHNjcmF0Y2hHUFIpKTsKICNlbHNlCiAg
ICAgICAgIC8vIFdlIHdvdWxkIGhhdmUgYWxyZWFkeSBjaGVja2VkIHRoYXQgdGhlIGNhbGxlZSBp
cyBhIGNlbGwuCiAjZW5kaWYKQEAgLTE3ODksOSArMTc5Niw5IEBAIHZvaWQgbGlua1BvbHltb3Jw
aGljQ2FsbCgKICAgICAKICAgICAgICAgc3R1YkppdC5sb2FkUHRyKAogICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRh
YmxlKCkpLAotICAgICAgICAgICAgc2NyYXRjaCk7CisgICAgICAgICAgICBzY3JhdGNoR1BSKTsK
ICAgICAgICAgCi0gICAgICAgIGNvbXBhcmlzb25WYWx1ZUdQUiA9IHNjcmF0Y2g7CisgICAgICAg
IGNvbXBhcmlzb25WYWx1ZUdQUiA9IHNjcmF0Y2hHUFI7CiAgICAgfSBlbHNlCiAgICAgICAgIGNv
bXBhcmlzb25WYWx1ZUdQUiA9IGNhbGxlZUdQUjsKICAgICAKQEAgLTE4MzMsOCArMTg0MCwxMyBA
QCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiAgICAgICAgIGNhc2VWYWx1ZXNbaV0gPSBuZXdD
YXNlVmFsdWU7CiAgICAgfQogICAgIAotICAgIEdQUlJlZyBmYXN0Q291bnRzQmFzZUdQUiA9Ci0g
ICAgICAgIEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihjYWxsZWVHUFIsIGNvbXBh
cmlzb25WYWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDMpOworICAgIEdQUlJlZyBmYXN0Q291bnRzQmFz
ZUdQUjsKKyAgICBpZiAoZnJhbWVTaHVmZmxlcikKKyAgICAgICAgZmFzdENvdW50c0Jhc2VHUFIg
PSBmcmFtZVNodWZmbGVyLT5hY3F1aXJlR1BSKCk7CisgICAgZWxzZSB7CisgICAgICAgIGZhc3RD
b3VudHNCYXNlR1BSID0KKyAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRj
aEdQUihjYWxsZWVHUFIsIGNvbXBhcmlzb25WYWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDMpOworICAg
IH0KICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGZhc3RDb3Vu
dHMuZ2V0KCkpLCBmYXN0Q291bnRzQmFzZUdQUik7CiAgICAgCiAgICAgQmluYXJ5U3dpdGNoIGJp
bmFyeVN3aXRjaChjb21wYXJpc29uVmFsdWVHUFIsIGNhc2VWYWx1ZXMsIEJpbmFyeVN3aXRjaDo6
SW50UHRyKTsKQEAgLTE4NTQsNyArMTg2NiwxMSBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwo
CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksCiAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGZhc3RDb3VudHNCYXNlR1BSLCBjYXNlSW5k
ZXggKiBzaXplb2YodWludDMyX3QpKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGNhbGxMaW5r
SW5mby5pc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgaWYgKGZyYW1lU2h1ZmZsZXIpIHsKKyAgICAg
ICAgICAgIENhbGxGcmFtZVNodWZmbGVyKHN0dWJKaXQsIGZyYW1lU2h1ZmZsZXItPnNuYXBzaG90
KCkpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgICAgICAgICAgY2FsbHNbY2FzZUluZGV4XS5j
YWxsID0gc3R1YkppdC5uZWFyVGFpbENhbGwoKTsKKyAgICAgICAgfSBlbHNlIGlmIChjYWxsTGlu
a0luZm8uaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgICAgICBzdHViSml0LmVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMoKTsKICAgICAgICAgICAgIHN0dWJKaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygp
OwogICAgICAgICAgICAgY2FsbHNbY2FzZUluZGV4XS5jYWxsID0gc3R1YkppdC5uZWFyVGFpbENh
bGwoKTsKICAgICAgICAgfSBlbHNlCkBAIC0xODY1LDEwICsxODgxLDIzIEBAIHZvaWQgbGlua1Bv
bHltb3JwaGljQ2FsbCgKICAgICAKICAgICBzbG93UGF0aC5saW5rKCZzdHViSml0KTsKICAgICBi
aW5hcnlTd2l0Y2guZmFsbFRocm91Z2goKS5saW5rKCZzdHViSml0KTsKLSAgICBzdHViSml0Lm1v
dmUoY2FsbGVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICBpZiAoZnJhbWVTaHVmZmxlcikg
eworICAgICAgICBmcmFtZVNodWZmbGVyLT5yZWxlYXNlR1BSKGNhbGxlZUdQUik7CisgICAgICAg
IGZyYW1lU2h1ZmZsZXItPnJlbGVhc2VHUFIoY29tcGFyaXNvblZhbHVlR1BSKTsKKyAgICAgICAg
ZnJhbWVTaHVmZmxlci0+cmVsZWFzZUdQUihmYXN0Q291bnRzQmFzZUdQUik7CiAjaWYgVVNFKEpT
VkFMVUUzMl82NCkKLSAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Q2VsbFRhZyksIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgZnJhbWVTaHVmZmxl
ci0+c2V0Q2FsbGVlSlNWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDEsIEdQUklu
Zm86OnJlZ1QwKSk7CisjZWxzZQorICAgICAgICBmcmFtZVNodWZmbGVyLT5zZXRDYWxsZWVKU1Zh
bHVlUmVncyhKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUMCkpOwogI2VuZGlmCisgICAgICAgIGZy
YW1lU2h1ZmZsZXItPnByZXBhcmVGb3JTbG93UGF0aCgpOworICAgIH0gZWxzZSB7CisgICAgICAg
IHN0dWJKaXQubW92ZShjYWxsZWVHUFIsIEdQUkluZm86OnJlZ1QwKTsKKyNpZiBVU0UoSlNWQUxV
RTMyXzY0KQorICAgICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Q2VsbFRhZyksIEdQUkluZm86OnJlZ1QxKTsKKyNlbmRpZgorICAgIH0KICAgICBz
dHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZjYWxsTGlua0luZm8pLCBH
UFJJbmZvOjpyZWdUMik7CiAgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSksIEdQUkluZm86OnJlZ1Q0KTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
VGh1bmtHZW5lcmF0b3JzLmNwcAppbmRleCA5Nzg1YjU5NzYzMjE5NTcwMDI5M2Q0NmRkMTIzM2Vl
ZTZjYzI4MzI4Li44NTk2YTQyODQzYmM2Njg3YjEzZWRiNjJiNGQ4YzM1ZTEzMDRiMzczIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCkBAIC0xMzgs
NiArMTM4LDEwIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rUG9seW1vcnBoaWNDYWxsVGh1
bmtHZW5lcmF0b3IoVk0qIHZtKQogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVy
LCAoIkxpbmsgcG9seW1vcnBoaWMgY2FsbCBzbG93IHBhdGggdGh1bmsiKSk7CiB9CiAKKy8vIEZJ
WE1FOiBXZSBzaG91bGQgZGlzdGluZ3Vpc2ggYmV0d2VlbiBhIG1lZ2Ftb3JwaGljIHZpcnR1YWwg
Y2FsbCB2cy4gYSBzbG93CisvLyBwYXRoIHZpcnR1YWwgY2FsbCBzbyB0aGF0IHdlIGNhbiBlbmFi
bGUgZmFzdCB0YWlsIGNhbGxzIGZvciBtZWdhbW9ycGhpYworLy8gdmlydHVhbCBjYWxscyBieSB1
c2luZyB0aGUgc2h1ZmZsZXIuCisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQ4ODMxCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbFRodW5rRm9yKFZNKiB2
bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7CiAgICAgLy8gVGhlIGNhbGxlZSBpcyBp
biByZWdUMCAoZm9yIEpTVkFMVUUzMl82NCwgdGhlIHRhZyBpcyBpbiByZWdUMSkuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261344</attachid>
            <date>2015-09-16 18:06:45 -0700</date>
            <delta_ts>2015-09-16 20:35:49 -0700</delta_ts>
            <desc>Rebased patch</desc>
            <filename>148662-2.patch</filename>
            <type>text/plain</type>
            <size>125882</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg5ODg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNCBA
QAorMjAxNS0wOS0xNiAgQmFzaWxlIENsZW1lbnQgIDxiYXNpbGVfY2xlbWVudEBhcHBsZS5jb20+
CisKKyAgICAgICAgW0VTNl0gVGFpbCBjYWxsIGZhc3QgcGF0aCBzaG91bGQgZWZmaWNpZW50bHkg
cmV1c2UgdGhlIGZyYW1lJ3Mgc3RhY2sgc3BhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODY2MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaW50cm9kdWNlcyBhIG5ldyBjbGFzcyAoQ2FsbEZy
YW1lU2h1ZmZsZXIpIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yCisgICAgICAgIGVmZmljaWVudGx5
IGJ1aWxkaW5nIHRoZSBuZXcgZnJhbWVzIHdoZW4gcGVyZm9ybWluZyBhIHRhaWwgY2FsbC4gSW4K
KyAgICAgICAgb3JkZXIgZm9yIFJlcGF0Y2ggdG8ga25vdyBhYm91dCB0aGUgcG9zaXRpb24gb2Yg
YXJndW1lbnRzIG9uIHRoZQorICAgICAgICBzdGFjay9yZWdpc3RlcnMgKGUuZy4gZm9yIHBvbHlt
b3JwaGljIGNhbGwgaW5saW5lIGNhY2hlcyksIHdlIHN0b3JlIGEKKyAgICAgICAgQ2FsbEZyYW1l
U2h1ZmZsZURhdGEgaW4gdGhlIENhbGxMaW5rSW5mby4gT3RoZXJ3aXNlLCB0aGUgSklUIGFuZCBE
RkcKKyAgICAgICAgY29tcGlsZXIgYXJlIG5vdyB1c2luZyBDYWxsRnJhbWVTaHVmZmxlciBpbnN0
ZWFkIG9mCisgICAgICAgIENDYWxsSGVscGVyczo6cHJlcGFyZUZvclRhaWxDYWxsU2xvdygpIHRv
IGJ1aWxkIHRoZSBmcmFtZSBmb3IgYSB0YWlsCisgICAgICAgIGNhbGwuCisKKyAgICAgICAgV2hl
biB0YWtpbmcgYSBzbG93IHBhdGgsIHdlIHN0aWxsIGJ1aWxkIHRoZSBmcmFtZSBhcyBpZiBkb2lu
ZyBhIHJlZ3VsYXIKKyAgICAgICAgY2FsbCwgYmVjYXVzZSB3ZSBjb3VsZCB0aHJvdyBhbiBleGNl
cHRpb24gYW5kIG5lZWQgdGhlIGNhbGxlcidzIGZyYW1lCisgICAgICAgIGF0IHRoYXQgcG9pbnQu
IFRoaXMgbWVhbnMgdGhhdCBmb3IgdmlydHVhbCBjYWxscywgd2UgZG9uJ3QgYmVuZWZpdCBmcm9t
CisgICAgICAgIHRoZSBlZmZpY2llbnQgZnJhbWUgbW92ZSBmb3Igbm93LgorCisgICAgICAgICog
Q01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvai5maWx0ZXJzOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVy
Lmg6CisgICAgICAgIChKU0M6OkFSTXY3QXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKToKKyAgICAg
ICAgKEpTQzo6QVJNdjdBc3NlbWJsZXI6Omxhc3RSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkFS
TXY3QXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2Vt
Ymxlcjo6bGFzdEZQUmVnaXN0ZXIpOgorICAgICAgICAqIGFzc2VtYmxlci9BYm9ydFJlYXNvbi5o
OgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5oOgorICAgICAgICAoSlNDOjpDYWxs
TGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0lu
Zm86OmZyYW1lU2h1ZmZsZURhdGEpOgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUmVjb3Zlcnku
aDoKKyAgICAgICAgKEpTQzo6VmFsdWVSZWNvdmVyeTo6aW5SZWdpc3Rlcik6CisgICAgICAgICog
ZGZnL0RGR0dlbmVyYXRpb25JbmZvLmg6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbklu
Zm86OnJlY292ZXJ5KToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2
ZVJlZ2lzdGVycyk6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmg6IEFkZGVk
LgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1lU2h1ZmZsZXIpOgorICAgICAgICAoSlND
OjpDYWxsRnJhbWVTaHVmZmxlcjo6ZHVtcCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZm
bGVyOjpnZXRDYWNoZWRSZWNvdmVyeSk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVy
OjpzZXRDYWNoZWRSZWNvdmVyeSk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpz
cGlsbCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjplbWl0RGVsdGFDaGVjayk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlRm9yU2xvd1BhdGgpOgor
ICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6cHJlcGFyZUZvclRhaWxDYWxsKToKKyAg
ICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OnRyeVdyaXRlcyk6CisgICAgICAgIChKU0M6
OkNhbGxGcmFtZVNodWZmbGVyOjpwZXJmb3JtU2FmZVdyaXRlcyk6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlQW55KToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1lU2h1
ZmZsZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5OjpDYWNoZWRSZWNv
dmVyeSk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5Ojp0YXJnZXRzKToKKyAgICAgICAg
KEpTQzo6Q2FjaGVkUmVjb3Zlcnk6OmFkZFRhcmdldCk6CisgICAgICAgIChKU0M6OkNhY2hlZFJl
Y292ZXJ5OjpyZW1vdmVUYXJnZXQpOgorICAgICAgICAoSlNDOjpDYWNoZWRSZWNvdmVyeTo6Y2xl
YXJUYXJnZXRzKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVjb3Zlcnk6OnNldFdhbnRlZEpTVmFs
dWVSZWdzKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVjb3Zlcnk6OnNldFdhbnRlZEZQUik6Cisg
ICAgICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5Ojpib3hpbmdSZXF1aXJlc0dQUik6CisgICAgICAg
IChKU0M6OkNhY2hlZFJlY292ZXJ5Ojpib3hpbmdSZXF1aXJlc0ZQUik6CisgICAgICAgIChKU0M6
OkNhY2hlZFJlY292ZXJ5OjpyZWNvdmVyeSk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5
OjpzZXRSZWNvdmVyeSk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5Ojp3YW50ZWRKU1Zh
bHVlUmVncyk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5Ojp3YW50ZWRGUFIpOgorICAg
ICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6bG9ja0dQUik6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZVNodWZmbGVyOjphY3F1aXJlR1BSKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1
ZmZsZXI6OnJlbGVhc2VHUFIpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c25h
cHNob3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c2V0Q2FsbGVlSlNWYWx1
ZVJlZ3MpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6YXNzdW1lQ2FsbGVlSXND
ZWxsKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmNhbkJveCk6CisgICAgICAg
IChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjplbnN1cmVCb3gpOgorICAgICAgICAoSlNDOjpDYWxs
RnJhbWVTaHVmZmxlcjo6ZW5zdXJlTG9hZCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZm
bGVyOjpjYW5Mb2FkQW5kQm94KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OnVw
ZGF0ZVJlY292ZXJ5KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmNsZWFyQ2Fj
aGVkUmVjb3ZlcnkpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6YWRkQ2FjaGVk
UmVjb3ZlcnkpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6bnVtTG9jYWxzKToK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmdldE9sZCk6CisgICAgICAgIChKU0M6
OkNhbGxGcmFtZVNodWZmbGVyOjpzZXRPbGQpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVm
Zmxlcjo6Zmlyc3RPbGQpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6bGFzdE9s
ZCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjppc1ZhbGlkT2xkKToKKyAgICAg
ICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmFyZ0NvdW50KToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lU2h1ZmZsZXI6OmdldE5ldyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVy
OjpzZXROZXcpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6YWRkTmV3KToKKyAg
ICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmZpcnN0TmV3KToKKyAgICAgICAgKEpTQzo6
Q2FsbEZyYW1lU2h1ZmZsZXI6Omxhc3ROZXcpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVm
Zmxlcjo6aXNWYWxpZE5ldyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpuZXdB
c09sZCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpnZXRGcmVlUmVnaXN0ZXIp
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6Z2V0RnJlZUdQUik6CisgICAgICAg
IChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpnZXRGcmVlRlBSKToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lU2h1ZmZsZXI6Omhhc0ZyZWVSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkNhbGxGcmFt
ZVNodWZmbGVyOjplbnN1cmVSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZm
bGVyOjplbnN1cmVHUFIpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6ZW5zdXJl
RlBSKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmFkZHJlc3NGb3JPbGQpOgor
ICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6aXNVbmRlY2lkZWQpOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6aXNTbG93UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxG
cmFtZVNodWZmbGVyOjphZGRyZXNzRm9yTmV3KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1
ZmZsZXI6OmRhbmdlckZyb250aWVyKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6
OmlzRGFuZ2VyTmV3KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OnVwZGF0ZURh
bmdlckZyb250aWVyKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6Omhhc09ubHlT
YWZlV3JpdGVzKToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHA6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6ZW1pdFN0b3JlKToKKyAgICAg
ICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXRCb3gpOgorICAgICAgICAoSlNDOjpDYWxs
RnJhbWVTaHVmZmxlcjo6ZW1pdExvYWQpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxl
cjo6Y2FuTG9hZCk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5Ojpsb2Fkc0ludG9GUFIp
OgorICAgICAgICAoSlNDOjpDYWNoZWRSZWNvdmVyeTo6bG9hZHNJbnRvR1BSKToKKyAgICAgICAg
KEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXREaXNwbGFjZSk6CisgICAgICAgICogaml0L0Nh
bGxGcmFtZVNodWZmbGVyNjQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1
ZmZsZXI6OmVtaXRTdG9yZSk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjplbWl0
Qm94KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXRMb2FkKToKKyAgICAg
ICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmNhbkxvYWQpOgorICAgICAgICAoSlNDOjpDYWNo
ZWRSZWNvdmVyeTo6bG9hZHNJbnRvRlBSKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVjb3Zlcnk6
OmxvYWRzSW50b0dQUik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjplbWl0RGlz
cGxhY2UpOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpj
b21waWxlT3BDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2Up
OgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6bGlua1BvbHltb3Jw
aGljQ2FsbCk6CisKIDIwMTUtMDktMTYgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNv
bT4KIAogICAgICAgICBKYXZhU2NyaXB0Q29yZSBzaG91bGQgZGlzY2FyZCBiYXNlbGluZSBjb2Rl
IGFmdGVyIHNvbWUgdGltZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAko
cmV2aXNpb24gMTg5ODg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0zNjAsNiArMzYwLDEwIEBAIHNldChKYXZhU2NyaXB0Q29yZV9T
T1VSQ0VTCiAKICAgICBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAogICAgIGppdC9CaW5hcnlTd2l0
Y2guY3BwCisgICAgaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAorICAgIGppdC9DYWxsRnJh
bWVTaHVmZmxlci5jcHAKKyAgICBqaXQvQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAKKyAgICBq
aXQvQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAKICAgICBqaXQvRXhlY3V0YWJsZUFsbG9jYXRpb25G
dXp6LmNwcAogICAgIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAogICAgIGppdC9FeGVjdXRh
YmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE4OTg4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTYyMCw2ICs2MjAsMTAgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGlu
dGVycHJldGVyXFN0YWNrVmlzaXRvci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxqaXRcQXNzZW1ibHlIZWxwZXJzLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGppdFxCaW5hcnlTd2l0Y2guY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0
XENhbGxGcmFtZVNodWZmbGVEYXRhLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGppdFxDYWxsRnJhbWVTaHVmZmxlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxqaXRcQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxqaXRcQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxqaXRcRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGppdFxFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxFeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wu
Y3BwIiAvPgpAQCAtMTQyMCw2ICsxNDI0LDggQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGludGVycHJldGVyXFN0YWNrVmlzaXRvci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caml0XEFzc2VtYmx5SGVscGVycy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aml0XEJpbmFyeVN3aXRjaC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XENh
bGxGcmFtZVNodWZmbGVEYXRhLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRc
Q2FsbEZyYW1lU2h1ZmZsZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxD
Q2FsbEhlbHBlcnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxDb21wYWN0
SklUQ29kZU1hcC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEV4ZWN1dGFi
bGVBbGxvY2F0aW9uRnV6ei5oIiAvPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkocmV2aXNpb24gMTg5ODg1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJv
ai5maWx0ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsNiArMzk2LDE4IEBACiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxqaXRcSG9zdENhbGxSZXR1cm5WYWx1ZS5jcHAiPgogICAgICAgPEZp
bHRlcj5qaXQ8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGppdFxDYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAiPgorICAgICAgPEZpbHRlcj5qaXQ8
L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGpp
dFxDYWxsRnJhbWVTaHVmZmxlci5jcHAiPgorICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KKyAg
ICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxDYWxsRnJhbWVT
aHVmZmxlcjMyXzY0LmNwcCI+CisgICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgorICAgIDwvQ2xD
b21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XENhbGxGcmFtZVNodWZmbGVy
NjQuY3BwIj4KKyAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklULmNwcCI+CiAgICAgICA8RmlsdGVyPmpp
dDwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDE4OTg4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05NzMs
NyArOTczLDEzIEBACiAJCTYyNzY3MzI0MUI2ODBDMUUwMEZEOUYyRSAvKiBDYWxsTW9kZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjI3NjczMjIxQjY4
MEMxRTAwRkQ5RjJFIC8qIENhbGxNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjJEMkQzOEYxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9u
UmFyZURhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNjJEMkQzOEQxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURhdGEuY3BwICovOyB9
OwogCQk2MkQyRDM5MDFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjJEMkQzOEUxQURGMTAz
RjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk2MkQ3NTVENDFCODRGQjNEMDAxODAxRkEgLyogQ2Fs
bEZyYW1lU2h1ZmZsZXI2NC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2MkQ3NTVEMzFCODRGQjM5MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXI2
NC5jcHAgKi87IH07CisJCTYyRDc1NUQ1MUI4NEZCNDAwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVm
ZmxlcjMyXzY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDYyRDc1NUQyMUI4NEZCMzkwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlcjMyXzY0LmNw
cCAqLzsgfTsKKwkJNjJENzU1RDYxQjg0RkI0NjAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyRDc1
NUQwMUI4NEZCMzkwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlci5jcHAgKi87IH07CisJCTYy
RDc1NUQ3MUI4NEZCNEEwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjJENzU1RDExQjg0RkIzOTAwMTgw
MUZBIC8qIENhbGxGcmFtZVNodWZmbGVyLmggKi87IH07CiAJCTYyRTNENUYwMUI4RDBCNzMwMEI4
NjhCQiAvKiBEYXRhRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDYyRTNENUVGMUI4RDBCNzMwMEI4NjhCQiAvKiBEYXRhRm9ybWF0LmNwcCAq
LzsgfTsKKwkJNjJFQzlCQjYxQjdFQjA3QzAwMzAzQUQxIC8qIENhbGxGcmFtZVNodWZmbGVEYXRh
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyRUM5
QkI0MUI3RUIwN0MwMDMwM0FEMSAvKiBDYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAgKi87IH07CisJ
CTYyRUM5QkI3MUI3RUIwN0MwMDMwM0FEMSAvKiBDYWxsRnJhbWVTaHVmZmxlRGF0YS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjJFQzlCQjUxQjdFQjA3
QzAwMzAzQUQxIC8qIENhbGxGcmFtZVNodWZmbGVEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjJGMkFBMzcxQjBCRURFMzAwNjEwQzdBIC8q
IERGR0xhenlOb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDYyQTlBMjlFMUIwQkVENDgwMEJENTRDQSAvKiBERkdMYXp5Tm9kZS5jcHAgKi87IH07
CiAJCTYyRjJBQTM4MUIwQkVERTMwMDYxMEM3QSAvKiBERkdMYXp5Tm9kZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjJBOUEyOUYxQjBCRUQ0ODAwQkQ1
NENBIC8qIERGR0xhenlOb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNjUwN0QyOUUwRTg3MUU1RTAwRDdEODk2IC8qIEpTVHlwZUluZm8uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MDdEMjk3MEU4
NzFFNEEwMEQ3RDg5NiAvKiBKU1R5cGVJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI3ODAsNyArMjc4NiwxMyBAQAogCQk2MkE5QTI5RjFC
MEJFRDQ4MDBCRDU0Q0EgLyogREZHTGF6eU5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHTGF6eU5vZGUuaDsgcGF0aCA9IGRmZy9ERkdMYXp5Tm9kZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk2MkQyRDM4RDFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rp
b25SYXJlRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGdW5j
dGlvblJhcmVEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjJEMkQzOEUx
QURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRnVuY3Rpb25SYXJlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk2MkQ3NTVEMDFCODRGQjM5MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbEZyYW1lU2h1ZmZsZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2MkQ3NTVEMTFCODRGQjM5MDAxODAx
RkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ2FsbEZyYW1lU2h1ZmZsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjJE
NzU1RDIxQjg0RkIzOTAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyMzJfNjQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTYyRDc1NUQzMUI4NEZCMzkwMDE4MDFG
QSAvKiBDYWxsRnJhbWVTaHVmZmxlcjY0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENhbGxGcmFtZVNodWZmbGVyNjQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk2MkUzRDVFRjFCOEQwQjczMDBCODY4QkIgLyogRGF0YUZvcm1hdC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRhRm9ybWF0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjJFQzlCQjQxQjdFQjA3QzAwMzAzQUQxIC8qIENhbGxGcmFt
ZVNodWZmbGVEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENh
bGxGcmFtZVNodWZmbGVEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjJF
QzlCQjUxQjdFQjA3QzAwMzAzQUQxIC8qIENhbGxGcmFtZVNodWZmbGVEYXRhLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxGcmFtZVNodWZmbGVEYXRhLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1MDdEMjk3MEU4NzFFNEEwMEQ3RDg5NiAvKiBKU1R5cGVJ
bmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVHlwZUluZm8uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUxMTIyRTUxNDA0NjlCQTAwMkIxMDFEIC8qIHRl
c3RSZWdFeHAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gdGVzdFJl
Z0V4cC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1MTEyMzA1MTQwNDZBNEMw
MDJCMTAxRCAvKiB0ZXN0UmVnRXhwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxp
Y2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRl
eCA9IDA7IHBhdGggPSB0ZXN0UmVnRXhwOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElS
OyB9OwpAQCAtNDA5OCw2ICs0MTEwLDEyIEBACiAJCQkJMEYyNEU1M0MxN0VBOUY1OTAwQUJCMjE3
IC8qIEFzc2VtYmx5SGVscGVycy5oICovLAogCQkJCTBGNjRCMjZGMUE3ODRCQUYwMDZFNEU2NiAv
KiBCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBGNjRCMjcwMUE3ODRCQUYwMDZFNEU2NiAvKiBC
aW5hcnlTd2l0Y2guaCAqLywKKwkJCQk2MkVDOUJCNDFCN0VCMDdDMDAzMDNBRDEgLyogQ2FsbEZy
YW1lU2h1ZmZsZURhdGEuY3BwICovLAorCQkJCTYyRUM5QkI1MUI3RUIwN0MwMDMwM0FEMSAvKiBD
YWxsRnJhbWVTaHVmZmxlRGF0YS5oICovLAorCQkJCTYyRDc1NUQwMUI4NEZCMzkwMDE4MDFGQSAv
KiBDYWxsRnJhbWVTaHVmZmxlci5jcHAgKi8sCisJCQkJNjJENzU1RDExQjg0RkIzOTAwMTgwMUZB
IC8qIENhbGxGcmFtZVNodWZmbGVyLmggKi8sCisJCQkJNjJENzU1RDIxQjg0RkIzOTAwMTgwMUZB
IC8qIENhbGxGcmFtZVNodWZmbGVyMzJfNjQuY3BwICovLAorCQkJCTYyRDc1NUQzMUI4NEZCMzkw
MDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlcjY0LmNwcCAqLywKIAkJCQkwRjI0RTUzRDE3RUE5
RjU5MDBBQkIyMTcgLyogQ0NhbGxIZWxwZXJzLmggKi8sCiAJCQkJMEZEODJFMzcxNDFBQjE0MjAw
MTc5Qzk0IC8qIENvbXBhY3RKSVRDb2RlTWFwLmggKi8sCiAJCQkJMEZGMDU0RjcxQUMzNUI0NDAw
RTVCRTU3IC8qIEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5jcHAgKi8sCkBAIC01OTY1LDYgKzU5
ODMsNyBAQAogCQkJCUM0RjRCNkY0MUEwNUM5NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yLnB5
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzMjQzOTQxODU2OTcwOTAwMkVENjkyIC8qIGdlbmVyYXRl
LWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NDBFMjcx
ODdDOTgxRTAwODQzQjEwIC8qIGNzc21pbi5weSBpbiBIZWFkZXJzICovLAorCQkJCTYyRDc1NUQ3
MUI4NEZCNEEwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTVFQTcxMDQxOUY2REU3MjAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfYmFja2VuZF9kaXNw
YXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJQzQ3MDNDRDUxOTI4
NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvcl90ZW1wbGF0ZXMucHkgaW4gSGVhZGVycyAqLywKIAkJ
CQlBNUVBNzEwNTE5RjZERTc0MDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9u
X2hlYWRlci5weSBpbiBIZWFkZXJzICovLApAQCAtNjEyNSw2ICs2MTQ0LDcgQEAKIAkJCQkwRjNC
M0EyODE1NDRDOTk3MDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTc3QTQyNDAxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Nsb2JiZXJpemUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0E0MjQyMTdBMEJCRkQwMEE4REI4MSAvKiBERkdDbG9i
YmVyU2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQk2MkVDOUJCNzFCN0VCMDdDMDAzMDNBRDEgLyog
Q2FsbEZyYW1lU2h1ZmZsZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0IyOTREMTRDM0NE
NEMwMDdDM0RCMSAvKiBERkdDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTMyMTcw
RDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM4
QjAxODE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25LZXkuaCBpbiBIZWFkZXJzICov
LApAQCAtNzQ3Nyw2ICs3NDk3LDcgQEAKIAkJCQkwRkYwRjE5RDE2QjcyQTA4MDA1REY5NUIgLyog
REZHQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTMxMTcwRDQwQkYwMEJCNzIy
QyAvKiBERkdDb21tb25EYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzhCMDE3MTdDRkU3
NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2
MkVDOUJCNjFCN0VCMDdDMDAzMDNBRDEgLyogQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYzOEIwMTkxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9u
TW9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMUI5RTIzQjFCNEUwRDY3MDBCQzdGRUQgLyog
SW50bENvbGxhdG9yQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQjNBMUEx
NTNFNjhGMjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtNzUzMiw2ICs3NTUzLDcgQEAKIAkJCQkwRkYwRjE5QzE2QjcyQTAzMDA1REY5NUIg
LyogREZHTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE1ODFCQTE1MEU5NTJDMDBCOUEy
RDkgLyogREZHTm9kZUZsYWdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5RENGMTMyOERG
ODIwMDJCMkFENyAvKiBERkdPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTYyRDc1
NUQ2MUI4NEZCNDYwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBN0Q4OUNGRDE3QTBCOENDMDA3NzNBRDggLyogREZHT1NSQXZhaWxhYmlsaXR5QW5h
bHlzaXNQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4MkU1NjE0MURBRjA4MDAxNzlD
OTQgLyogREZHT1NSRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEzMjUxN0Q1MUY1
NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtNzY2Miw2ICs3Njg0LDcgQEAKIAkJCQk3QjAyNDc1NjFCODY4MkUxMDA1NDI0NDAg
LyogV0FTTUZ1bmN0aW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlGMTZC
NzJBMTcwMDVERjk1QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTUyQjMxMEZEMTk3NEFFODcwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2Fj
aGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNjJENzU1RDUxQjg0RkI0MDAwMTgwMUZBIC8qIENh
bGxGcmFtZVNodWZmbGVyMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5Q0MxMDdF
QzM3NjAwNDI3QTQ4IC8qIEZ1bmN0aW9uUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGNjRCMjcxMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY3NjZEMkYxNUE4RENFMDAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGlu
ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc3ODUsNiArNzgwOCw3IEBACiAJCQkJQTcyNzAwOTAw
REFDNkJCQzAwRTU0OEQ3IC8qIEpTTm90QW5PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5RDQxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0ODJCN0U0MEE0MzA3NjAwMDUxN0NGQyAvKiBKU09iamVjdFJlZi5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk2MkQ3NTVENDFCODRGQjNEMDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXI2
NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Y5OTM2MDBGRDczMjUxMDBBMEIyRDAgLyogSlNP
Tk9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZCNkMzODFBRjQ4RERDMDBEQjFCRjcg
LyogVHlwZW9mVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NUY2RTY5NTBFNUI1Rjk3MDA5
MUU4NjAgLyogSlNQcm9maWxlclByaXZhdGUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCShyZXZp
c2lvbiAxODk4ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTXY3QXNz
ZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1MywxMSArNDUzLDExIEBAIHB1YmxpYzoKICAg
ICB0eXBlZGVmIEFSTVJlZ2lzdGVyczo6RlBRdWFkUmVnaXN0ZXJJRCBGUFF1YWRSZWdpc3RlcklE
OwogICAgIHR5cGVkZWYgRlBEb3VibGVSZWdpc3RlcklEIEZQUmVnaXN0ZXJJRDsKICAgICAKLSAg
ICBzdGF0aWMgUmVnaXN0ZXJJRCBmaXJzdFJlZ2lzdGVyKCkgeyByZXR1cm4gQVJNUmVnaXN0ZXJz
OjpyMDsgfQotICAgIHN0YXRpYyBSZWdpc3RlcklEIGxhc3RSZWdpc3RlcigpIHsgcmV0dXJuIEFS
TVJlZ2lzdGVyczo6cjEzOyB9Ci0gICAgCi0gICAgc3RhdGljIEZQUmVnaXN0ZXJJRCBmaXJzdEZQ
UmVnaXN0ZXIoKSB7IHJldHVybiBBUk1SZWdpc3RlcnM6OmQwOyB9Ci0gICAgc3RhdGljIEZQUmVn
aXN0ZXJJRCBsYXN0RlBSZWdpc3RlcigpIHsgcmV0dXJuIEFSTVJlZ2lzdGVyczo6ZDMxOyB9Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGZpcnN0UmVnaXN0ZXIoKSB7IHJldHVybiBB
Uk1SZWdpc3RlcnM6OnIwOyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGxhc3RS
ZWdpc3RlcigpIHsgcmV0dXJuIEFSTVJlZ2lzdGVyczo6cjEzOyB9CisKKyAgICBzdGF0aWMgY29u
c3RleHByIEZQUmVnaXN0ZXJJRCBmaXJzdEZQUmVnaXN0ZXIoKSB7IHJldHVybiBBUk1SZWdpc3Rl
cnM6OmQwOyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBGUFJlZ2lzdGVySUQgbGFzdEZQUmVnaXN0
ZXIoKSB7IHJldHVybiBBUk1SZWdpc3RlcnM6OmQzMTsgfQogCiAgICAgLy8gKEhTLCBMTywgSEks
IExTKSAtPiAoQUUsIEIsIEEsIEJFKQogICAgIC8vIChWUywgVkMpIC0+IChPLCBOTykKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJvcnRSZWFzb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fib3J0UmVhc29uLmgJKHJldmlz
aW9uIDE4OTg4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJvcnRSZWFz
b24uaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsNyBAQCBlbnVtIEFib3J0UmVhc29uIHsK
ICAgICBKSVROb3RTdXBwb3J0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0g
MjYwLAogICAgIEpJVE9mZnNldElzTm90T3V0T2ZMaW5lICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPSAyNzAsCiAgICAgSklUVW5jb3VnaHRFeGNlcHRpb25BZnRlckNhbGwgICAgICAgICAgICAg
ICAgICAgICA9IDI3NSwKKyAgICBKSVRVbmV4cGVjdGVkQ2FsbEZyYW1lU2l6ZSAgICAgICAgICAg
ICAgICAgICAgICAgID0gMjc3LAogICAgIEpJVFVucmVhc29uYWJsZUxvb3BIaW50SnVtcFRhcmdl
dCAgICAgICAgICAgICAgICAgPSAyODAsCiAgICAgUlBXVW5yZWFzb25hYmxlSnVtcFRhcmdldCAg
ICAgICAgICAgICAgICAgICAgICAgICA9IDI5MCwKICAgICBSZXBhdGNoSW5lZmZlY3RpdmVXYXRj
aHBvaW50ICAgICAgICAgICAgICAgICAgICAgID0gMzAwLApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkocmV2aXNpb24gMTg5ODg1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIENhbGxMaW5rSW5mb19oCiAjZGVmaW5lIENh
bGxMaW5rSW5mb19oCiAKKyNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlRGF0YS5oIgogI2luY2x1
ZGUgIkNhbGxNb2RlLmgiCiAjaW5jbHVkZSAiQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiQ29k
ZVNwZWNpYWxpemF0aW9uS2luZC5oIgpAQCAtMzM4LDYgKzMzOSwxNiBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIHZpc2l0V2VhayhWTSYpOwogCisgICAgdm9pZCBzZXRGcmFtZVNodWZmbGVEYXRhKGNv
bnN0IENhbGxGcmFtZVNodWZmbGVEYXRhJiBzaHVmZmxlRGF0YSkKKyAgICB7CisgICAgICAgIG1f
ZnJhbWVTaHVmZmxlRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+
KHNodWZmbGVEYXRhKTsKKyAgICB9CisKKyAgICBjb25zdCBDYWxsRnJhbWVTaHVmZmxlRGF0YSog
ZnJhbWVTaHVmZmxlRGF0YSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9mcmFtZVNodWZmbGVE
YXRhLmdldCgpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBt
X2NhbGxSZXR1cm5Mb2NhdGlvbjsKICAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgbV9ob3RQ
YXRoQmVnaW47CkBAIC0zNDYsNiArMzU3LDcgQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8
SlNGdW5jdGlvbj4gbV9sYXN0U2VlbkNhbGxlZTsKICAgICBSZWZQdHI8UG9seW1vcnBoaWNDYWxs
U3R1YlJvdXRpbmU+IG1fc3R1YjsKICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc2xvd1N0
dWI7CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBtX2ZyYW1lU2h1
ZmZsZURhdGE7CiAgICAgdW5zaWduZWQgbV9yZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgOiAxOyAv
LyBSZWFsIHR5cGUgaXMgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlCiAgICAgYm9vbCBtX2hhc1Nl
ZW5TaG91bGRSZXBhdGNoIDogMTsKICAgICBib29sIG1faGFzU2VlbkNsb3N1cmUgOiAxOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCShy
ZXZpc2lvbiAxODk4ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVS
ZWNvdmVyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaWYgRU5BQkxFKEpJ
VCkKICNpbmNsdWRlICJHUFJJbmZvLmgiCiAjaW5jbHVkZSAiRlBSSW5mby5oIgorI2luY2x1ZGUg
IlJlZy5oIgogI2VuZGlmCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIk1hY3Jv
QXNzZW1ibGVyLmgiCkBAIC04Myw2ICs4NCwxOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBp
c1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVjaG5pcXVlICE9IERvbnRLbm93OyB9CiAgICAgYm9v
bCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQorCisjaWYgRU5BQkxFKEpJ
VCkKKyAgICBzdGF0aWMgVmFsdWVSZWNvdmVyeSBpblJlZ2lzdGVyKFJlZyByZWcsIERhdGFGb3Jt
YXQgZGF0YUZvcm1hdCkKKyAgICB7CisgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAg
ICAgIHJldHVybiBpbkdQUihyZWcuZ3ByKCksIGRhdGFGb3JtYXQpOworCisgICAgICAgIEFTU0VS
VChyZWcuaXNGUFIoKSk7CisgICAgICAgIHJldHVybiBpbkZQUihyZWcuZnByKCksIGRhdGFGb3Jt
YXQpOworICAgIH0KKyNlbmRpZgorCiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0
IHsgcmV0dXJuIGlzU2V0KCk7IH0KICAgICAKICAgICBzdGF0aWMgVmFsdWVSZWNvdmVyeSBpbkdQ
UihNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBncHIsIERhdGFGb3JtYXQgZGF0YUZvcm1hdCkK
QEAgLTMwMCw2ICszMTMsMTIgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdGVj
aG5pcXVlID09IEluUGFpcjsKICAgICB9CisKKyAgICBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncygp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbkpTVmFsdWVSZWdzKCkpOworICAgICAg
ICByZXR1cm4gSlNWYWx1ZVJlZ3ModGFnR1BSKCksIHBheWxvYWRHUFIoKSk7CisgICAgfQogI2Vs
c2UKICAgICBib29sIGlzSW5KU1ZhbHVlUmVncygpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAkocmV2aXNpb24gMTg5
ODg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNzgsNiArMzc4LDI5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IG1fdXNlQ291bnQ7CiAgICAgfQogCisgICAgVmFsdWVSZWNvdmVyeSByZWNvdmVyeShWaXJ0dWFs
UmVnaXN0ZXIgc3BpbGxTbG90KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1faXNDb25zdGFu
dCkKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChtX25vZGUtPmNv
bnN0YW50KCktPnZhbHVlKCkpOworCisgICAgICAgIGlmIChtX3JlZ2lzdGVyRm9ybWF0ID09IERh
dGFGb3JtYXREb3VibGUpCisgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6aW5GUFIo
dS5mcHIsIERhdGFGb3JtYXREb3VibGUpOworCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAg
ICAgaWYgKG1fcmVnaXN0ZXJGb3JtYXQgJiBEYXRhRm9ybWF0SlMpIHsKKyAgICAgICAgICAgIGlm
IChtX3JlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRKUykKKyAgICAgICAgICAgICAgICByZXR1
cm4gVmFsdWVSZWNvdmVyeTo6aW5QYWlyKHUudi50YWdHUFIsIHUudi5wYXlsb2FkR1BSKTsKKyAg
ICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjppbkdQUih1LnYucGF5bG9hZEdQUiwgc3Rh
dGljX2Nhc3Q8RGF0YUZvcm1hdD4obV9yZWdpc3RlckZvcm1hdCAmIH5EYXRhRm9ybWF0SlMpKTsK
KyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGlmIChtX3JlZ2lzdGVyRm9ybWF0KQorICAgICAg
ICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmluR1BSKHUuZ3ByLCBtX3JlZ2lzdGVyRm9ybWF0
KTsKKworICAgICAgICBBU1NFUlQobV9zcGlsbEZvcm1hdCk7CisKKyAgICAgICAgcmV0dXJuIFZh
bHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjayhzcGlsbFNsb3QsIG1fc3BpbGxGb3JtYXQp
OworICAgIH0KKwogcHJpdmF0ZToKICAgICB2b2lkIGFwcGVuZEJpcnRoKFZhcmlhYmxlRXZlbnRT
dHJlYW0mIHN0cmVhbSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nh
bGxGcmFtZVNodWZmbGVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVE
YXRhLmgiCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisj
aW5jbHVkZSAiQ29kZUJsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisjaWYgVVNFKEpTVkFM
VUU2NCkKKwordm9pZCBDYWxsRnJhbWVTaHVmZmxlRGF0YTo6c2V0dXBDYWxsZWVTYXZlUmVnaXN0
ZXJzKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVS
ZWdpc3RlcnMgeyBSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCkgfTsKKyAgICBS
ZWdpc3RlckF0T2Zmc2V0TGlzdCogcmVnaXN0ZXJTYXZlTG9jYXRpb25zID0gY29kZUJsb2NrLT5j
YWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZ2lz
dGVyU2F2ZUxvY2F0aW9ucy0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgUmVnaXN0ZXJBdE9mZnNl
dCBlbnRyeSB7IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+YXQoaSkgfTsKKyAgICAgICAgaWYgKCFj
YWxsZWVTYXZlUmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2F2ZVNsb3QgeyBlbnRyeS5vZmZzZXRBc0lu
ZGV4KCkgfTsKKyAgICAgICAgcmVnaXN0ZXJzW2VudHJ5LnJlZygpXQorICAgICAgICAgICAgPSBW
YWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soc2F2ZVNsb3QsIERhdGFGb3JtYXRKUyk7
CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjps
YXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKKyAgICAgICAgaWYgKCFjYWxsZWVTYXZlUmVnaXN0
ZXJzLmdldChyZWcpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHJlZ2lz
dGVyc1tyZWddKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgcmVnaXN0ZXJzW3Jl
Z10gPSBWYWx1ZVJlY292ZXJ5OjppblJlZ2lzdGVyKHJlZywgRGF0YUZvcm1hdEpTKTsKKyAgICB9
Cit9CisKKyNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nh
bGxGcmFtZVNodWZmbGVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBDYWxsRnJhbWVTaHVmZmxlRGF0YV9oCisjZGVmaW5lIENhbGxGcmFtZVNodWZm
bGVEYXRhX2gKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJSZWdpc3Rlck1hcC5oIgor
I2luY2x1ZGUgIlZhbHVlUmVjb3ZlcnkuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBD
YWxsRnJhbWVTaHVmZmxlRGF0YSB7CisgICAgdW5zaWduZWQgbnVtTG9jYWxzOworICAgIFZhbHVl
UmVjb3ZlcnkgY2FsbGVlOworICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiBhcmdzOworI2lmIFVT
RShKU1ZBTFVFNjQpCisgICAgUmVnaXN0ZXJNYXA8VmFsdWVSZWNvdmVyeT4gcmVnaXN0ZXJzOwor
CisgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoQ29kZUJsb2NrKik7CisjZW5kaWYK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworI2Vu
ZGlmIC8vIENhbGxGcmFtZVNodWZmbGVEYXRhX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlcjMyXzY0LmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2Fs
bEZyYW1lU2h1ZmZsZXIuaCIKKworI2lmIEVOQUJMRShKSVQpICYmIFVTRShKU1ZBTFVFMzJfNjQp
CisKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJEYXRhRm9ybWF0LmgiCisj
aW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0RhdGFG
b3JtYXQgQ2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXRTdG9yZShDYWNoZWRSZWNvdmVyeSYgbG9jYXRp
b24sIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFkZHJlc3MpCit7CisgICAgQVNTRVJUKCFsb2Nh
dGlvbi5yZWNvdmVyeSgpLmlzSW5KU1N0YWNrKCkpOworCisgICAgc3dpdGNoIChsb2NhdGlvbi5y
ZWNvdmVyeSgpLnRlY2huaXF1ZSgpKSB7CisgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAg
ICAgICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkludDMyVGFnKSwKKyAgICAgICAgICAgIGFkZHJlc3Mud2l0aE9mZnNldChUYWdPZmZzZXQpKTsK
KyAgICAgICAgbV9qaXQuc3RvcmUzMihsb2NhdGlvbi5yZWNvdmVyeSgpLmdwcigpLCBhZGRyZXNz
LndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCkpOworICAgICAgICByZXR1cm4gRGF0YUZvcm1hdElu
dDMyOworICAgIGNhc2UgVW5ib3hlZENlbGxJbkdQUjoKKyAgICAgICAgbV9qaXQuc3RvcmUzMihN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLAorICAgICAgICAg
ICAgYWRkcmVzcy53aXRoT2Zmc2V0KFRhZ09mZnNldCkpOworICAgICAgICBtX2ppdC5zdG9yZTMy
KGxvY2F0aW9uLnJlY292ZXJ5KCkuZ3ByKCksIGFkZHJlc3Mud2l0aE9mZnNldChQYXlsb2FkT2Zm
c2V0KSk7CisgICAgICAgIHJldHVybiBEYXRhRm9ybWF0Q2VsbDsKKyAgICBjYXNlIENvbnN0YW50
OgorICAgICAgICBtX2ppdC5zdG9yZVRydXN0ZWRWYWx1ZShsb2NhdGlvbi5yZWNvdmVyeSgpLmNv
bnN0YW50KCksIGFkZHJlc3MpOworICAgICAgICByZXR1cm4gRGF0YUZvcm1hdEpTOworICAgIGNh
c2UgSW5QYWlyOgorICAgICAgICBtX2ppdC5zdG9yZVZhbHVlKGxvY2F0aW9uLnJlY292ZXJ5KCku
anNWYWx1ZVJlZ3MoKSwgYWRkcmVzcyk7CisgICAgICAgIHJldHVybiBEYXRhRm9ybWF0SlM7Cisg
ICAgY2FzZSBVbmJveGVkQm9vbGVhbkluR1BSOgorICAgICAgICBtX2ppdC5zdG9yZTMyKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyksCisgICAgICAgICAg
ICBhZGRyZXNzLndpdGhPZmZzZXQoVGFnT2Zmc2V0KSk7CisgICAgICAgIG1faml0LnN0b3JlMzIo
bG9jYXRpb24ucmVjb3ZlcnkoKS5ncHIoKSwgYWRkcmVzcy53aXRoT2Zmc2V0KFBheWxvYWRPZmZz
ZXQpKTsKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRCb29sZWFuOworICAgIGNhc2UgSW5GUFI6
CisgICAgY2FzZSBVbmJveGVkRG91YmxlSW5GUFI6CisgICAgICAgIG1faml0LnN0b3JlRG91Ymxl
KGxvY2F0aW9uLnJlY292ZXJ5KCkuZnByKCksIGFkZHJlc3MpOworICAgICAgICByZXR1cm4gRGF0
YUZvcm1hdEpTOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorfQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVyOjplbWl0Qm94KENhY2hl
ZFJlY292ZXJ5JiBsb2NhdGlvbikKK3sKKyAgICAvLyBOb3RoaW5nIHRvIGRvLCB3ZSdyZSBnb29k
ISBKU1ZhbHVlcyBhbmQgZG91YmxlcyBjYW4gYmUgc3RvcmVkCisgICAgLy8gaW1tZWRpYXRlbHks
IGFuZCBvdGhlciBmb3JtYXRzIGRvbid0IG5lZWQgYW55IHRyYW5zZm9ybWF0aW9uIC0KKyAgICAv
LyBqdXN0IHN0b3JpbmcgYSBjb25zdGFudCB0YWcgc2VwYXJhdGVseS4KKyAgICBBU1NFUlQoY2Fu
Qm94KGxvY2F0aW9uKSk7Cit9CisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXRMb2FkKENh
Y2hlZFJlY292ZXJ5JiBsb2NhdGlvbikKK3sKKyAgICBpZiAoIWxvY2F0aW9uLnJlY292ZXJ5KCku
aXNJbkpTU3RhY2soKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgIGRhdGFMb2coIiAgICogTG9hZGluZyAiLCBsb2NhdGlvbi5yZWNvdmVyeSgpLCAiIGludG8g
Iik7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyB7IGxvY2F0aW9uLnJlY292ZXJ5KCkudmlydHVh
bFJlZ2lzdGVyKCkgfTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBhZGRyZXNzIHsgYWRk
cmVzc0Zvck9sZChyZWcpIH07CisKKyAgICBib29sIHRyeUZQUiB7IHRydWUgfTsKKyAgICBKU1Zh
bHVlUmVncyB3YW50ZWRKU1ZhbHVlUmVncyB7IGxvY2F0aW9uLndhbnRlZEpTVmFsdWVSZWdzKCkg
fTsKKyAgICBpZiAod2FudGVkSlNWYWx1ZVJlZ3MpIHsKKyAgICAgICAgaWYgKHdhbnRlZEpTVmFs
dWVSZWdzLnBheWxvYWRHUFIoKSAhPSBJbnZhbGlkR1BSUmVnCisgICAgICAgICAgICAmJiAhbV9y
ZWdpc3RlcnNbd2FudGVkSlNWYWx1ZVJlZ3MucGF5bG9hZEdQUigpXQorICAgICAgICAgICAgJiYg
IW1fbG9ja2VkUmVnaXN0ZXJzLmdldCh3YW50ZWRKU1ZhbHVlUmVncy5wYXlsb2FkR1BSKCkpKQor
ICAgICAgICAgICAgdHJ5RlBSID0gZmFsc2U7CisgICAgICAgIGlmICh3YW50ZWRKU1ZhbHVlUmVn
cy50YWdHUFIoKSAhPSBJbnZhbGlkR1BSUmVnCisgICAgICAgICAgICAmJiAhbV9yZWdpc3RlcnNb
d2FudGVkSlNWYWx1ZVJlZ3MudGFnR1BSKCldCisgICAgICAgICAgICAmJiAhbV9sb2NrZWRSZWdp
c3RlcnMuZ2V0KHdhbnRlZEpTVmFsdWVSZWdzLnRhZ0dQUigpKSkKKyAgICAgICAgICAgIHRyeUZQ
UiA9IGZhbHNlOworICAgIH0KKworICAgIGlmICh0cnlGUFIgJiYgbG9jYXRpb24ubG9hZHNJbnRv
RlBSKCkpIHsKKyAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IGxvY2F0aW9uLndhbnRlZEZQUigp
OworICAgICAgICBpZiAocmVzdWx0RlBSID09IEludmFsaWRGUFJSZWcgfHwgbV9yZWdpc3RlcnNb
cmVzdWx0RlBSXSB8fCBtX2xvY2tlZFJlZ2lzdGVycy5nZXQocmVzdWx0RlBSKSkKKyAgICAgICAg
ICAgIHJlc3VsdEZQUiA9IGdldEZyZWVGUFIoKTsKKyAgICAgICAgaWYgKHJlc3VsdEZQUiAhPSBJ
bnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKGFkZHJlc3MsIHJl
c3VsdEZQUik7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGRhdGFGb3JtYXQgPSBEYXRhRm9ybWF0
SlM7CisgICAgICAgICAgICBpZiAobG9jYXRpb24ucmVjb3ZlcnkoKS5kYXRhRm9ybWF0KCkgPT0g
RGF0YUZvcm1hdERvdWJsZSkKKyAgICAgICAgICAgICAgICBkYXRhRm9ybWF0ID0gRGF0YUZvcm1h
dERvdWJsZTsKKyAgICAgICAgICAgIHVwZGF0ZVJlY292ZXJ5KGxvY2F0aW9uLCAKKyAgICAgICAg
ICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkZQUihyZXN1bHRGUFIsIGRhdGFGb3JtYXQpKTsKKyAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2cobG9jYXRpb24u
cmVjb3ZlcnkoKSwgIlxuIik7CisgICAgICAgICAgICBpZiAocmVnID09IG5ld0FzT2xkKGRhbmdl
ckZyb250aWVyKCkpKQorICAgICAgICAgICAgICAgIHVwZGF0ZURhbmdlckZyb250aWVyKCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobG9jYXRpb24u
bG9hZHNJbnRvR1BSKCkpIHsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiB7IHdhbnRlZEpTVmFs
dWVSZWdzLnBheWxvYWRHUFIoKSB9OworICAgICAgICBpZiAocmVzdWx0R1BSID09IEludmFsaWRH
UFJSZWcgfHwgbV9yZWdpc3RlcnNbcmVzdWx0R1BSXSB8fCBtX2xvY2tlZFJlZ2lzdGVycy5nZXQo
cmVzdWx0R1BSKSkKKyAgICAgICAgICAgIHJlc3VsdEdQUiA9IGdldEZyZWVHUFIoKTsKKyAgICAg
ICAgQVNTRVJUKHJlc3VsdEdQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgbV9qaXQubG9h
ZFB0cihhZGRyZXNzLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCksIHJlc3VsdEdQUik7CisgICAg
ICAgIHVwZGF0ZVJlY292ZXJ5KGxvY2F0aW9uLCAKKyAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6
OmluR1BSKHJlc3VsdEdQUiwgbG9jYXRpb24ucmVjb3ZlcnkoKS5kYXRhRm9ybWF0KCkpKTsKKyAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKGxvY2F0aW9uLnJlY292ZXJ5
KCksICJcbiIpOworICAgICAgICBpZiAocmVnID09IG5ld0FzT2xkKGRhbmdlckZyb250aWVyKCkp
KQorICAgICAgICAgICAgdXBkYXRlRGFuZ2VyRnJvbnRpZXIoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEFTU0VSVChsb2NhdGlvbi5yZWNvdmVyeSgpLnRlY2huaXF1ZSgpID09IERp
c3BsYWNlZEluSlNTdGFjayk7CisgICAgR1BSUmVnIHBheWxvYWRHUFIgeyB3YW50ZWRKU1ZhbHVl
UmVncy5wYXlsb2FkR1BSKCkgfTsKKyAgICBHUFJSZWcgdGFnR1BSIHsgd2FudGVkSlNWYWx1ZVJl
Z3MudGFnR1BSKCkgfTsKKyAgICBpZiAocGF5bG9hZEdQUiA9PSBJbnZhbGlkR1BSUmVnIHx8IG1f
cmVnaXN0ZXJzW3BheWxvYWRHUFJdIHx8IG1fbG9ja2VkUmVnaXN0ZXJzLmdldChwYXlsb2FkR1BS
KSkKKyAgICAgICAgcGF5bG9hZEdQUiA9IGdldEZyZWVHUFIoKTsKKyAgICBtX2xvY2tlZFJlZ2lz
dGVycy5zZXQocGF5bG9hZEdQUik7CisgICAgaWYgKHRhZ0dQUiA9PSBJbnZhbGlkR1BSUmVnIHx8
IG1fcmVnaXN0ZXJzW3RhZ0dQUl0gfHwgbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHRhZ0dQUikpCisg
ICAgICAgIHRhZ0dQUiA9IGdldEZyZWVHUFIoKTsKKyAgICBtX2xvY2tlZFJlZ2lzdGVycy5jbGVh
cihwYXlsb2FkR1BSKTsKKyAgICBBU1NFUlQocGF5bG9hZEdQUiAhPSBJbnZhbGlkR1BSUmVnICYm
IHRhZ0dQUiAhPSBJbnZhbGlkR1BSUmVnICYmIHRhZ0dQUiAhPSBwYXlsb2FkR1BSKTsKKyAgICBt
X2ppdC5sb2FkUHRyKGFkZHJlc3Mud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KSwgcGF5bG9hZEdQ
Uik7CisgICAgbV9qaXQubG9hZFB0cihhZGRyZXNzLndpdGhPZmZzZXQoVGFnT2Zmc2V0KSwgdGFn
R1BSKTsKKyAgICB1cGRhdGVSZWNvdmVyeShsb2NhdGlvbiwgCisgICAgICAgIFZhbHVlUmVjb3Zl
cnk6OmluUGFpcih0YWdHUFIsIHBheWxvYWRHUFIpKTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgZGF0YUxvZyhsb2NhdGlvbi5yZWNvdmVyeSgpLCAiXG4iKTsKKyAgICBpZiAocmVnID09IG5l
d0FzT2xkKGRhbmdlckZyb250aWVyKCkpKQorICAgICAgICB1cGRhdGVEYW5nZXJGcm9udGllcigp
OworfQorCitib29sIENhbGxGcmFtZVNodWZmbGVyOjpjYW5Mb2FkKENhY2hlZFJlY292ZXJ5JiBs
b2NhdGlvbikKK3sKKyAgICBpZiAoIWxvY2F0aW9uLnJlY292ZXJ5KCkuaXNJbkpTU3RhY2soKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAobG9jYXRpb24ubG9hZHNJbnRvRlBSKCkg
JiYgZ2V0RnJlZUZQUigpICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgaWYgKGxvY2F0aW9uLmxvYWRzSW50b0dQUigpICYmIGdldEZyZWVHUFIoKSAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChsb2NhdGlvbi5yZWNv
dmVyeSgpLnRlY2huaXF1ZSgpID09IERpc3BsYWNlZEluSlNTdGFjaykgeworICAgICAgICBHUFJS
ZWcgcGF5bG9hZEdQUiB7IGdldEZyZWVHUFIoKSB9OworICAgICAgICBpZiAocGF5bG9hZEdQUiA9
PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX2xv
Y2tlZFJlZ2lzdGVycy5zZXQocGF5bG9hZEdQUik7CisgICAgICAgIEdQUlJlZyB0YWdHUFIgeyBn
ZXRGcmVlR1BSKCkgfTsKKyAgICAgICAgbV9sb2NrZWRSZWdpc3RlcnMuY2xlYXIocGF5bG9hZEdQ
Uik7CisgICAgICAgIHJldHVybiB0YWdHUFIgIT0gSW52YWxpZEdQUlJlZzsKKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFdlIHByZWZlciBsb2FkaW5nIGRvdWJsZXMgYW5kIHVu
ZGV0ZXJtaW5lZCBKU1ZhbHVlcyBpbnRvIEZQUnMKKy8vIGJlY2F1c2UgaXQgd291bGQgb3RoZXJ3
aXNlIHVzZSB1cCB0d28gR1BScy4KK2Jvb2wgQ2FjaGVkUmVjb3Zlcnk6OmxvYWRzSW50b0ZQUigp
IGNvbnN0Cit7CisgICAgc3dpdGNoIChyZWNvdmVyeSgpLnRlY2huaXF1ZSgpKSB7CisgICAgY2Fz
ZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKworLy8gSW50ZWdlcnMsIGJvb2xlYW5zIGFuZCBjZWxscyBjYW4gYmUg
bG9hZGVkIGludG8gYSBzaW5nbGUgR1BSCitib29sIENhY2hlZFJlY292ZXJ5Ojpsb2Fkc0ludG9H
UFIoKSBjb25zdAoreworICAgIHN3aXRjaCAocmVjb3ZlcnkoKS50ZWNobmlxdWUoKSkgeworICAg
IGNhc2UgSW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgY2FzZSBCb29sZWFuRGlzcGxhY2Vk
SW5KU1N0YWNrOgorICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
fQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVyOjplbWl0RGlzcGxhY2UoQ2FjaGVkUmVjb3Zlcnkm
IGxvY2F0aW9uKQoreworICAgIEFTU0VSVChsb2NhdGlvbi5yZWNvdmVyeSgpLmlzSW5SZWdpc3Rl
cnMoKSk7CisgICAgSlNWYWx1ZVJlZ3Mgd2FudGVkSlNWYWx1ZVJlZ3MgeyBsb2NhdGlvbi53YW50
ZWRKU1ZhbHVlUmVncygpIH07CisgICAgQVNTRVJUKHdhbnRlZEpTVmFsdWVSZWdzKTsgLy8gV2Ug
ZG9uJ3Qgc3VwcG9ydCB3YW50ZWQgRlBScyBvbiAzMmJpdCBwbGF0Zm9ybXMKKworICAgIEdQUlJl
ZyB3YW50ZWRUYWdHUFIgeyB3YW50ZWRKU1ZhbHVlUmVncy50YWdHUFIoKSB9OworICAgIEdQUlJl
ZyB3YW50ZWRQYXlsb2FkR1BSIHsgd2FudGVkSlNWYWx1ZVJlZ3MucGF5bG9hZEdQUigpIH07Cisg
ICAgCisgICAgaWYgKHdhbnRlZFRhZ0dQUiAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIEFT
U0VSVCghbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHdhbnRlZFRhZ0dQUikpOworICAgICAgICBpZiAo
Q2FjaGVkUmVjb3ZlcnkqIGN1cnJlbnRUYWcgeyBtX3JlZ2lzdGVyc1t3YW50ZWRUYWdHUFJdIH0p
IHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50VGFnID09ICZsb2NhdGlvbikgeworICAgICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICArICIs
IHdhbnRlZFRhZ0dQUiwgIiBpcyBPS1xuIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIC8vIFRoaXMgY2FuIG5ldmVyIGhhcHBlbiBvbiAzMmJpdCBwbGF0Zm9ybXMgc2lu
Y2Ugd2UKKyAgICAgICAgICAgICAgICAvLyBoYXZlIGF0IG1vc3Qgb25lIHdhbnRlZCBKU1ZhbHVl
UmVncywgZm9yIHRoZQorICAgICAgICAgICAgICAgIC8vIGNhbGxlZSwgYW5kIG5vIGNhbGxlZS1z
YXZlIHJlZ2lzdGVycy4KKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHdhbnRlZFBh
eWxvYWRHUFIgIT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICBBU1NFUlQoIW1fbG9ja2VkUmVn
aXN0ZXJzLmdldCh3YW50ZWRQYXlsb2FkR1BSKSk7CisgICAgICAgIGlmIChDYWNoZWRSZWNvdmVy
eSogY3VycmVudFBheWxvYWQgeyBtX3JlZ2lzdGVyc1t3YW50ZWRQYXlsb2FkR1BSXSB9KSB7Cisg
ICAgICAgICAgICBpZiAoY3VycmVudFBheWxvYWQgPT0gJmxvY2F0aW9uKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICsgIiwg
d2FudGVkUGF5bG9hZEdQUiwgIiBpcyBPS1xuIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIC8vIFNlZSBhYm92ZQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAobG9jYXRpb24ucmVjb3ZlcnkoKS50ZWNobmlxdWUoKSA9PSBJblBhaXIKKyAgICAgICAgfHwg
bG9jYXRpb24ucmVjb3ZlcnkoKS5pc0luR1BSKCkpIHsKKyAgICAgICAgR1BSUmVnIHBheWxvYWRH
UFI7CisgICAgICAgIGlmIChsb2NhdGlvbi5yZWNvdmVyeSgpLnRlY2huaXF1ZSgpID09IEluUGFp
cikKKyAgICAgICAgICAgIHBheWxvYWRHUFIgPSBsb2NhdGlvbi5yZWNvdmVyeSgpLnBheWxvYWRH
UFIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGF5bG9hZEdQUiA9IGxvY2F0aW9uLnJl
Y292ZXJ5KCkuZ3ByKCk7CisKKyAgICAgICAgaWYgKHdhbnRlZFBheWxvYWRHUFIgPT0gSW52YWxp
ZEdQUlJlZykKKyAgICAgICAgICAgIHdhbnRlZFBheWxvYWRHUFIgPSBwYXlsb2FkR1BSOworCisg
ICAgICAgIGlmIChwYXlsb2FkR1BSICE9IHdhbnRlZFBheWxvYWRHUFIpIHsKKyAgICAgICAgICAg
IGlmIChsb2NhdGlvbi5yZWNvdmVyeSgpLnRlY2huaXF1ZSgpID09IEluUGFpcgorICAgICAgICAg
ICAgICAgICYmIHdhbnRlZFBheWxvYWRHUFIgPT0gbG9jYXRpb24ucmVjb3ZlcnkoKS50YWdHUFIo
KSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICAqIFN3YXBwaW5nICIsIHBheWxvYWRHUFIsICIgYW5kICIsIHdhbnRlZFBheWxv
YWRHUFIsICJcbiIpOworICAgICAgICAgICAgICAgIG1faml0LnN3YXAocGF5bG9hZEdQUiwgd2Fu
dGVkUGF5bG9hZEdQUik7CisgICAgICAgICAgICAgICAgdXBkYXRlUmVjb3ZlcnkobG9jYXRpb24s
IAorICAgICAgICAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjppblBhaXIocGF5bG9hZEdQUiwg
d2FudGVkUGF5bG9hZEdQUikpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgKiBNb3Zpbmcg
IiwgcGF5bG9hZEdQUiwgIiBpbnRvICIsIHdhbnRlZFBheWxvYWRHUFIsICJcbiIpOworICAgICAg
ICAgICAgICAgIG1faml0Lm1vdmUocGF5bG9hZEdQUiwgd2FudGVkUGF5bG9hZEdQUik7CisgICAg
ICAgICAgICAgICAgaWYgKGxvY2F0aW9uLnJlY292ZXJ5KCkudGVjaG5pcXVlKCkgPT0gSW5QYWly
KSB7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVJlY292ZXJ5KGxvY2F0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5QYWlyKGxvY2F0aW9uLnJlY292ZXJ5
KCkudGFnR1BSKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FudGVkUGF5bG9hZEdQ
UikpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0
ZVJlY292ZXJ5KGxvY2F0aW9uLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlUmVjb3Zl
cnk6OmluR1BSKHdhbnRlZFBheWxvYWRHUFIsIGxvY2F0aW9uLnJlY292ZXJ5KCkuZGF0YUZvcm1h
dCgpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHdhbnRlZFRhZ0dQUiA9PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgd2Fu
dGVkVGFnR1BSID0gZ2V0RnJlZUdQUigpOworICAgICAgICBzd2l0Y2ggKGxvY2F0aW9uLnJlY292
ZXJ5KCkuZGF0YUZvcm1hdCgpKSB7CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEludDMyOgorICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgKiBNb3Zp
bmcgaW50MzIgdGFnIGludG8gIiwgd2FudGVkVGFnR1BSLCAiXG4iKTsKKyAgICAgICAgICAgIG1f
aml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyks
CisgICAgICAgICAgICAgICAgd2FudGVkVGFnR1BSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICAgICAgZGF0YUxvZygiICAgKiBNb3ZpbmcgY2VsbCB0YWcgaW50byAiLCB3YW50ZWRU
YWdHUFIsICJcbiIpOworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLAorICAgICAgICAgICAgICAgIHdhbnRlZFRhZ0dQ
Uik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjoK
KyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICog
TW92aW5nIGJvb2xlYW4gdGFnIGludG8gIiwgd2FudGVkVGFnR1BSLCAiXG4iKTsKKyAgICAgICAg
ICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29s
ZWFuVGFnKSwKKyAgICAgICAgICAgICAgICB3YW50ZWRUYWdHUFIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEpTOgorICAgICAgICAgICAgQVNTRVJUKHdhbnRl
ZFRhZ0dQUiAhPSBsb2NhdGlvbi5yZWNvdmVyeSgpLnBheWxvYWRHUFIoKSk7CisgICAgICAgICAg
ICBpZiAod2FudGVkVGFnR1BSICE9IGxvY2F0aW9uLnJlY292ZXJ5KCkudGFnR1BSKCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
ICAgKiBNb3ZpbmcgIiwgbG9jYXRpb24ucmVjb3ZlcnkoKS50YWdHUFIoKSwgIiBpbnRvICIsIHdh
bnRlZFRhZ0dQUiwgIlxuIik7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShsb2NhdGlvbi5y
ZWNvdmVyeSgpLnRhZ0dQUigpLCB3YW50ZWRUYWdHUFIpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBBU1NF
UlQobG9jYXRpb24ucmVjb3ZlcnkoKS5pc0luRlBSKCkpOworICAgICAgICBpZiAod2FudGVkVGFn
R1BSID09IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgICAgIEFTU0VSVCh3YW50ZWRQYXlsb2Fk
R1BSICE9IEludmFsaWRHUFJSZWcpOworICAgICAgICAgICAgbV9sb2NrZWRSZWdpc3RlcnMuc2V0
KHdhbnRlZFBheWxvYWRHUFIpOworICAgICAgICAgICAgd2FudGVkVGFnR1BSID0gZ2V0RnJlZUdQ
UigpOworICAgICAgICAgICAgbV9sb2NrZWRSZWdpc3RlcnMuY2xlYXIod2FudGVkUGF5bG9hZEdQ
Uik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHdhbnRlZFBheWxvYWRHUFIgPT0gSW52YWxpZEdQ
UlJlZykgeworICAgICAgICAgICAgbV9sb2NrZWRSZWdpc3RlcnMuc2V0KHdhbnRlZFRhZ0dQUik7
CisgICAgICAgICAgICB3YW50ZWRQYXlsb2FkR1BSID0gZ2V0RnJlZUdQUigpOworICAgICAgICAg
ICAgbV9sb2NrZWRSZWdpc3RlcnMuY2xlYXIod2FudGVkVGFnR1BSKTsKKyAgICAgICAgfQorICAg
ICAgICBtX2ppdC5ib3hEb3VibGUobG9jYXRpb24ucmVjb3ZlcnkoKS5mcHIoKSwgd2FudGVkVGFn
R1BSLCB3YW50ZWRQYXlsb2FkR1BSKTsKKyAgICB9CisgICAgdXBkYXRlUmVjb3ZlcnkobG9jYXRp
b24sIFZhbHVlUmVjb3Zlcnk6OmluUGFpcih3YW50ZWRUYWdHUFIsIHdhbnRlZFBheWxvYWRHUFIp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKSAmJiBV
U0UoSlNWQUxVRTMyXzY0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJh
bWVTaHVmZmxlcjY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NhbGxGcmFtZVNodWZmbGVyNjQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlcjY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDM3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZXIuaCIKKwor
I2lmIEVOQUJMRShKSVQpICYmIFVTRShKU1ZBTFVFNjQpCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBl
cnMuaCIKKyNpbmNsdWRlICJEYXRhRm9ybWF0LmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGlu
ZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0RhdGFGb3JtYXQgQ2FsbEZyYW1lU2h1ZmZsZXI6
OmVtaXRTdG9yZSgKKyAgICBDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3ZlcnksIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzIGFkZHJlc3MpCit7CisgICAgQVNTRVJUKCFjYWNoZWRSZWNvdmVyeS5y
ZWNvdmVyeSgpLmlzSW5KU1N0YWNrKCkpOworCisgICAgc3dpdGNoIChjYWNoZWRSZWNvdmVyeS5y
ZWNvdmVyeSgpLnRlY2huaXF1ZSgpKSB7CisgICAgY2FzZSBJbkdQUjoKKyAgICAgICAgbV9qaXQu
c3RvcmVQdHIoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSwgYWRkcmVzcyk7CisgICAg
ICAgIHJldHVybiBEYXRhRm9ybWF0SlM7CisgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAg
ICAgICAgbV9qaXQuc3RvcmUzMihjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpLCBhZGRy
ZXNzLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCkpOworICAgICAgICByZXR1cm4gRGF0YUZvcm1h
dEludDMyOworICAgIGNhc2UgVW5ib3hlZEludDUySW5HUFI6CisgICAgICAgIG1faml0LnJzaGlm
dDY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6aW50NTJTaGlmdEFtb3Vu
dCksCisgICAgICAgICAgICBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpKTsKKyAgICAg
ICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBVbmJveGVkU3RyaWN0SW50NTJJbkdQUjoKKyAgICAg
ICAgbV9qaXQuc3RvcmVQdHIoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSwgYWRkcmVz
cyk7CisgICAgICAgIHJldHVybiBEYXRhRm9ybWF0U3RyaWN0SW50NTI7CisgICAgY2FzZSBVbmJv
eGVkQm9vbGVhbkluR1BSOgorICAgICAgICBtX2ppdC5zdG9yZVB0cihjYWNoZWRSZWNvdmVyeS5y
ZWNvdmVyeSgpLmdwcigpLCBhZGRyZXNzKTsKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRCb29s
ZWFuOworICAgIGNhc2UgVW5ib3hlZENlbGxJbkdQUjoKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIo
Y2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSwgYWRkcmVzcyk7CisgICAgICAgIHJldHVy
biBEYXRhRm9ybWF0Q2VsbDsKKyAgICBjYXNlIFVuYm94ZWREb3VibGVJbkZQUjoKKyAgICAgICAg
bV9qaXQuc3RvcmVEb3VibGUoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5mcHIoKSwgYWRkcmVz
cyk7CisgICAgICAgIHJldHVybiBEYXRhRm9ybWF0RG91YmxlOworICAgIGNhc2UgSW5GUFI6Cisg
ICAgICAgIG1faml0LnN0b3JlRG91YmxlKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZnByKCks
IGFkZHJlc3MpOworICAgICAgICByZXR1cm4gRGF0YUZvcm1hdEpTOworICAgIGNhc2UgQ29uc3Rh
bnQ6CisgICAgICAgIG1faml0LnN0b3JlVHJ1c3RlZFZhbHVlKGNhY2hlZFJlY292ZXJ5LnJlY292
ZXJ5KCkuY29uc3RhbnQoKSwgYWRkcmVzcyk7CisgICAgICAgIHJldHVybiBEYXRhRm9ybWF0SlM7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9Cit9CisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXRCb3goQ2FjaGVkUmVjb3Zlcnkm
IGNhY2hlZFJlY292ZXJ5KQoreworICAgIEFTU0VSVChjYW5Cb3goY2FjaGVkUmVjb3ZlcnkpKTsK
KyAgICBpZiAoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5pc0NvbnN0YW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmlzSW5HUFIoKSkg
eworICAgICAgICBzd2l0Y2ggKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZGF0YUZvcm1hdCgp
KSB7CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEludDMyOgorICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgKiBCb3hpbmcgIiwgY2FjaGVkUmVjb3Zl
cnkucmVjb3ZlcnkoKSk7CisgICAgICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cigKKyAg
ICAgICAgICAgICAgICBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpLAorICAgICAgICAg
ICAgICAgIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCkpOworICAgICAgICAgICAgLy8g
V2UgaGF2ZSB0byBkbyB0aGlzIHRoZSBoYXJkIHdheS4KKyAgICAgICAgICAgIG1faml0Lm9yNjQo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSwKKyAgICAgICAgICAg
ICAgICBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpKTsKKyAgICAgICAgICAgIGNhY2hl
ZFJlY292ZXJ5LnNldFJlY292ZXJ5KAorICAgICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6Omlu
R1BSKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCksIERhdGFGb3JtYXRKUykpOworICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiIGludG8gIiwg
Y2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKSwgIlxuIik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGNhc2UgRGF0YUZvcm1hdEludDUyOgorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgKiBCb3hpbmcgIiwgY2FjaGVkUmVjb3ZlcnkucmVj
b3ZlcnkoKSk7CisgICAgICAgICAgICBtX2ppdC5yc2hpZnQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKEpTVmFsdWU6OmludDUyU2hpZnRBbW91bnQpLAorICAgICAgICAgICAgICAgIGNh
Y2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCkpOworICAgICAgICAgICAgY2FjaGVkUmVjb3Zl
cnkuc2V0UmVjb3ZlcnkoCisgICAgICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2Fj
aGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSwgRGF0YUZvcm1hdFN0cmljdEludDUyKSk7Cisg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgaW50byAi
LCBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLCAiXG4iKTsKKyAgICAgICAgICAgIEZBTExUSFJP
VUdIOworICAgICAgICBjYXNlIERhdGFGb3JtYXRTdHJpY3RJbnQ1MjogeworICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgKiBCb3hpbmcgIiwgY2Fj
aGVkUmVjb3ZlcnkucmVjb3ZlcnkoKSk7CisgICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0g
Z2V0RnJlZUZQUigpOworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdEZQUiAhPSBJbnZhbGlkRlBS
UmVnKTsKKyAgICAgICAgICAgIG1faml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKGNhY2hlZFJlY292
ZXJ5LnJlY292ZXJ5KCkuZ3ByKCksIHJlc3VsdEZQUik7CisgICAgICAgICAgICB1cGRhdGVSZWNv
dmVyeShjYWNoZWRSZWNvdmVyeSwgVmFsdWVSZWNvdmVyeTo6aW5GUFIocmVzdWx0RlBSLCBEYXRh
Rm9ybWF0RG91YmxlKSk7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIgaW50byAiLCBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLCAiXG4iKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEJvb2xl
YW46CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIg
ICAqIEJveGluZyAiLCBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpKTsKKyAgICAgICAgICAgIG1f
aml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksCisgICAg
ICAgICAgICAgICAgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSk7CisgICAgICAgICAg
ICBjYWNoZWRSZWNvdmVyeS5zZXRSZWNvdmVyeSgKKyAgICAgICAgICAgICAgICBWYWx1ZVJlY292
ZXJ5OjppbkdQUihjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpLCBEYXRhRm9ybWF0SlMp
KTsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiBp
bnRvICIsIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCksICJcbiIpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuaXNJbkZQUigpKSB7Cisg
ICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmRhdGFGb3JtYXQoKSA9PSBEYXRh
Rm9ybWF0RG91YmxlKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIgICAqIEJveGluZyAiLCBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpKTsKKyAg
ICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBjYWNoZWRSZWNvdmVyeS53YW50ZWRKU1ZhbHVl
UmVncygpLmdwcigpOworICAgICAgICAgICAgaWYgKHJlc3VsdEdQUiA9PSBJbnZhbGlkR1BSUmVn
IHx8IG1fcmVnaXN0ZXJzW3Jlc3VsdEdQUl0pCisgICAgICAgICAgICAgICAgcmVzdWx0R1BSID0g
Z2V0RnJlZUdQUigpOworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdEdQUiAhPSBJbnZhbGlkR1BS
UmVnKTsKKyAgICAgICAgICAgIG1faml0LnB1cmlmeU5hTihjYWNoZWRSZWNvdmVyeS5yZWNvdmVy
eSgpLmZwcigpKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGVUbzY0KGNhY2hlZFJlY292
ZXJ5LnJlY292ZXJ5KCkuZnByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtX2ppdC5zdWI2
NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgdXBkYXRlUmVjb3ZlcnkoY2FjaGVkUmVjb3ZlcnksIFZhbHVlUmVjb3Zl
cnk6OmluR1BSKHJlc3VsdEdQUiwgRGF0YUZvcm1hdEpTKSk7CisgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgaW50byAiLCBjYWNoZWRSZWNvdmVyeS5y
ZWNvdmVyeSgpLCAiXG4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBBU1NFUlQoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5kYXRhRm9ybWF0KCkgPT0gRGF0YUZv
cm1hdEpTKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXRMb2FkKENhY2hl
ZFJlY292ZXJ5JiBjYWNoZWRSZWNvdmVyeSkKK3sKKyAgICBpZiAoIWNhY2hlZFJlY292ZXJ5LnJl
Y292ZXJ5KCkuaXNJbkpTU3RhY2soKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgIGRhdGFMb2coIiAgICogTG9hZGluZyAiLCBjYWNoZWRSZWNvdmVyeS5yZWNv
dmVyeSgpLCAiIGludG8gIik7CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gY2FjaGVkUmVj
b3ZlcnkucmVjb3ZlcnkoKS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyBhZGRyZXNzIHsgYWRkcmVzc0Zvck9sZChyZWcpIH07CisgICAgYm9vbCB0cnlGUFIg
eyB0cnVlIH07CisgICAgR1BSUmVnIHJlc3VsdEdQUiB7IGNhY2hlZFJlY292ZXJ5LndhbnRlZEpT
VmFsdWVSZWdzKCkuZ3ByKCkgfTsKKworICAgIC8vIElmIHdlIHdhbnQgYSBHUFIgYW5kIGl0J3Mg
YXZhaWxhYmxlLCB0aGF0J3MgYmV0dGVyIHRoYW4gbG9hZGluZworICAgIC8vIGludG8gYW4gRlBS
LgorICAgIGlmIChyZXN1bHRHUFIgIT0gSW52YWxpZEdQUlJlZyAmJiAhbV9yZWdpc3RlcnNbcmVz
dWx0R1BSXQorICAgICAgICAmJiAhbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHJlc3VsdEdQUikgJiYg
Y2FjaGVkUmVjb3ZlcnkubG9hZHNJbnRvR1BSKCkpCisgICAgICAgIHRyeUZQUiA9IGZhbHNlOwor
CisgICAgLy8gT3RoZXJ3aXNlLCB3ZSBwcmVmZXIgbG9hZGluZyBpbnRvIEZQUnMgaWYgcG9zc2li
bGUKKyAgICBpZiAodHJ5RlBSICYmIGNhY2hlZFJlY292ZXJ5LmxvYWRzSW50b0ZQUigpKSB7Cisg
ICAgICAgIEZQUlJlZyByZXN1bHRGUFIgeyBjYWNoZWRSZWNvdmVyeS53YW50ZWRGUFIoKSB9Owor
ICAgICAgICBpZiAocmVzdWx0RlBSID09IEludmFsaWRGUFJSZWcgfHwgbV9yZWdpc3RlcnNbcmVz
dWx0RlBSXSB8fCBtX2xvY2tlZFJlZ2lzdGVycy5nZXQocmVzdWx0RlBSKSkKKyAgICAgICAgICAg
IHJlc3VsdEZQUiA9IGdldEZyZWVGUFIoKTsKKyAgICAgICAgaWYgKHJlc3VsdEZQUiAhPSBJbnZh
bGlkRlBSUmVnKSB7CisgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKGFkZHJlc3MsIHJlc3Vs
dEZQUik7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGRhdGFGb3JtYXQgPSBEYXRhRm9ybWF0SlM7
CisgICAgICAgICAgICAvLyBXZSBjb3VsZCBiZSB0cmFuc2Zvcm1pbmcgYSBEYXRhRm9ybWF0Q2Vs
bCBpbnRvIGEKKyAgICAgICAgICAgIC8vIERhdGFGb3JtYXRKUyBoZXJlIC0gYnV0IHRoYXQncyBP
Sy4KKyAgICAgICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmRhdGFGb3JtYXQo
KSA9PSBEYXRhRm9ybWF0RG91YmxlKQorICAgICAgICAgICAgICAgIGRhdGFGb3JtYXQgPSBEYXRh
Rm9ybWF0RG91YmxlOworICAgICAgICAgICAgdXBkYXRlUmVjb3ZlcnkoY2FjaGVkUmVjb3Zlcnks
CisgICAgICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5GUFIocmVzdWx0RlBSLCBkYXRhRm9y
bWF0KSk7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9n
KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCksICJcbiIpOworICAgICAgICAgICAgaWYgKHJlZyA9
PSBuZXdBc09sZChkYW5nZXJGcm9udGllcigpKSkKKyAgICAgICAgICAgICAgICB1cGRhdGVEYW5n
ZXJGcm9udGllcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisg
ICAgQVNTRVJUKGNhY2hlZFJlY292ZXJ5LmxvYWRzSW50b0dQUigpKTsKKyAgICBpZiAocmVzdWx0
R1BSID09IEludmFsaWRHUFJSZWcgfHwgbV9yZWdpc3RlcnNbcmVzdWx0R1BSXSB8fCBtX2xvY2tl
ZFJlZ2lzdGVycy5nZXQocmVzdWx0R1BSKSkKKyAgICAgICAgcmVzdWx0R1BSID0gZ2V0RnJlZUdQ
UigpOworICAgIEFTU0VSVChyZXN1bHRHUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgbV9qaXQu
bG9hZFB0cihhZGRyZXNzLCByZXN1bHRHUFIpOworICAgIHVwZGF0ZVJlY292ZXJ5KGNhY2hlZFJl
Y292ZXJ5LAorICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZXN1bHRHUFIsIGNhY2hlZFJl
Y292ZXJ5LnJlY292ZXJ5KCkuZGF0YUZvcm1hdCgpKSk7CisgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgIGRhdGFMb2coY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKSwgIlxuIik7CisgICAgaWYgKHJl
ZyA9PSBuZXdBc09sZChkYW5nZXJGcm9udGllcigpKSkKKyAgICAgICAgdXBkYXRlRGFuZ2VyRnJv
bnRpZXIoKTsKK30KKworYm9vbCBDYWxsRnJhbWVTaHVmZmxlcjo6Y2FuTG9hZChDYWNoZWRSZWNv
dmVyeSYgY2FjaGVkUmVjb3ZlcnkpCit7CisgICAgaWYgKCFjYWNoZWRSZWNvdmVyeS5yZWNvdmVy
eSgpLmlzSW5KU1N0YWNrKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgQVNTRVJUKGNh
Y2hlZFJlY292ZXJ5LmxvYWRzSW50b0ZQUigpIHx8IGNhY2hlZFJlY292ZXJ5LmxvYWRzSW50b0dQ
UigpKTsKKworICAgIGlmIChjYWNoZWRSZWNvdmVyeS5sb2Fkc0ludG9GUFIoKSAmJiBnZXRGcmVl
RlBSKCkgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAo
Y2FjaGVkUmVjb3ZlcnkubG9hZHNJbnRvR1BSKCkgJiYgZ2V0RnJlZUdQUigpICE9IEludmFsaWRH
UFJSZWcpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCiti
b29sIENhY2hlZFJlY292ZXJ5Ojpsb2Fkc0ludG9GUFIoKSBjb25zdAoreworICAgIHN3aXRjaCAo
cmVjb3ZlcnkoKS50ZWNobmlxdWUoKSkgeworICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5KU1N0
YWNrOgorICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgIGNhc2UgQ2VsbERpc3BsYWNl
ZEluSlNTdGFjazoKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIENhY2hlZFJlY292ZXJ5Ojpsb2Fkc0lu
dG9HUFIoKSBjb25zdAoreworICAgIHN3aXRjaCAocmVjb3ZlcnkoKS50ZWNobmlxdWUoKSkgewor
ICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgY2FzZSBJbnQ1MkRpc3BsYWNl
ZEluSlNTdGFjazoKKyAgICBjYXNlIFN0cmljdEludDUyRGlzcGxhY2VkSW5KU1N0YWNrOgorICAg
IGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazoKKyAgICBjYXNlIERpc3BsYWNlZEluSlNT
dGFjazoKKyAgICBjYXNlIENlbGxEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwor
dm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6ZW1pdERpc3BsYWNlKENhY2hlZFJlY292ZXJ5JiBjYWNo
ZWRSZWNvdmVyeSkKK3sKKyAgICBSZWcgd2FudGVkUmVnOworICAgIGlmICghKHdhbnRlZFJlZyA9
IFJlZyB7IGNhY2hlZFJlY292ZXJ5LndhbnRlZEpTVmFsdWVSZWdzKCkuZ3ByKCkgfSkpCisgICAg
ICAgIHdhbnRlZFJlZyA9IFJlZyB7IGNhY2hlZFJlY292ZXJ5LndhbnRlZEZQUigpIH07CisgICAg
QVNTRVJUKHdhbnRlZFJlZyk7CisgICAgQVNTRVJUKCFtX2xvY2tlZFJlZ2lzdGVycy5nZXQod2Fu
dGVkUmVnKSk7CisKKyAgICBpZiAoQ2FjaGVkUmVjb3ZlcnkqIGN1cnJlbnQgPSBtX3JlZ2lzdGVy
c1t3YW50ZWRSZWddKSB7CisgICAgICAgIGlmIChjdXJyZW50ID09ICZjYWNoZWRSZWNvdmVyeSkg
eworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAg
KyAiLCB3YW50ZWRSZWcsICIgaXMgT0tcbiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIC8vIFdlIGNvdWxkIGRvIGEgbW9yZSBjb21wbGV4IHRoaW5nIGJ5IGZpbmRp
bmcgY3ljbGVzCisgICAgICAgIC8vIGV0Yy4gaW4gdGhhdCBjYXNlLgorICAgICAgICAvLyBIb3dl
dmVyLCBlbmRpbmcgdXAgaW4gdGhpcyBzaXR1YXRpb24gd2lsbCBiZSBzdXBlcgorICAgICAgICAv
LyByYXJlLCBhbmQgc2hvdWxkIGFjdHVhbGx5IGJlIG91dHJpZ2h0IGltcG9zc2libGUgZm9yCisg
ICAgICAgIC8vIG5vbi1GVEwgdGllcnMsIHNpbmNlOgorICAgICAgICAvLyAgKGEpIEFsbCBkb3Vi
bGVzIGhhdmUgYmVlbiBjb252ZXJ0ZWQgaW50byBKU1ZhbHVlcyB3aXRoCisgICAgICAgIC8vICAg
ICAgVmFsdWVSZXAgbm9kZXMsIHNvIEZQUnMgYXJlIGluaXRpYWxseSBmcmVlCisgICAgICAgIC8v
CisgICAgICAgIC8vICAoYikgVGhlIG9ubHkgcmVjb3ZlcmllcyB3aXRoIHdhbnRlZCByZWdpc3Rl
cnMgYXJlIHRoZQorICAgICAgICAvLyAgICAgIGNhbGxlZSAod2hpY2ggYWx3YXlzIHN0YXJ0cyBv
dXQgaW4gYSByZWdpc3RlcikgYW5kCisgICAgICAgIC8vICAgICAgdGhlIGNhbGxlZS1zYXZlIHJl
Z2lzdGVycworICAgICAgICAvLworICAgICAgICAvLyAgKGMpIFRoZSBjYWxsZWUtc2F2ZSByZWdp
c3RlcnMgYXJlIHRoZSBmaXJzdCB0aGluZ3Mgd2UKKyAgICAgICAgLy8gICAgICBsb2FkIChhZnRl
ciB0aGUgcmV0dXJuIFBDKSwgYW5kIHRoZXkgYXJlIGxvYWRlZCBhcyBKU1ZhbHVlcworICAgICAg
ICAvLworICAgICAgICAvLyAgKGQpIFdlIHByZWZlciBsb2FkaW5nIEpTVmFsdWVzIGludG8gRlBS
cyBpZiB0aGVpcgorICAgICAgICAvLyAgICAgIHdhbnRlZCBHUFIgaXMgbm90IGF2YWlsYWJsZQor
ICAgICAgICAvLworICAgICAgICAvLyAgKGUpIElmIHdlIGVuZCB1cCBzcGlsbGluZyBzb21lIHJl
Z2lzdGVycyB3aXRoIGEKKyAgICAgICAgLy8gICAgICB0YXJnZXQsIHdlIHdvbid0IGxvYWQgdGhl
bSBhZ2FpbiBiZWZvcmUgdGhlIHZlcnkKKyAgICAgICAgLy8gICAgICBlbmQgb2YgdGhlIGFsZ29y
aXRobQorICAgICAgICAvLworICAgICAgICAvLyBDb21iaW5lZCwgdGhpcyBtZWFucyB0aGF0IHdl
IHdpbGwgbmV2ZXIgbG9hZCBhIHJlY292ZXJ5CisgICAgICAgIC8vIHdpdGggYSB3YW50ZWQgR1BS
IGludG8gYW55IEdQUiBvdGhlciB0aGFuIGl0cyB3YW50ZWQKKyAgICAgICAgLy8gR1BSLiBUaGUg
Y2FsbGVlIGNvdWxkIGhvd2V2ZXIgaGF2ZSBiZWVuIGluaXRpYWxseSBpbgorICAgICAgICAvLyBv
bmUgb2YgdGhlIGNhbGxlZS1zYXZlIHJlZ2lzdGVycyAtIGJ1dCBzaW5jZSB0aGUgd2FudGVkCisg
ICAgICAgIC8vIEdQUiBmb3IgdGhlIGNhbGxlZSBpcyBhbHdheXMgcmVnVDAsIGl0IHdpbGwgYmUg
dGhlCisgICAgICAgIC8vIGZpcnN0IG9uZSB0byBiZSBkaXNwbGFjZWQsIGFuZCB3ZSB3b24ndCBz
ZWUgaXQgd2hlbgorICAgICAgICAvLyBoYW5kbGluZyBhbnkgb2YgdGhlIGNhbGxlZS1zYXZlIHJl
Z2lzdGVycy4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGh1cywgdGhlIG9ubHkgd2F5IHdlIGNv
dWxkIGV2ZXIgcmVhY2ggdGhpcyBwYXRoIGlzIGluCisgICAgICAgIC8vIHRoZSBGVEwsIHdoZW4g
dGhlcmUgaXMgc28gbXVjaCBwcmVzc3VyZSB0aGF0IHdlCisgICAgICAgIC8vIGFic29sdXRlbHkg
bmVlZCB0byBsb2FkIHRoZSBjYWxsZWUtc2F2ZSByZWdpc3RlcnMgaW50bworICAgICAgICAvLyBk
aWZmZXJlbnQgR1BScyBpbml0aWFsbHkgYnV0IG5vdCBlbm91Z2ggcHJlc3N1cmUgdG8KKyAgICAg
ICAgLy8gdGhlbiBoYXZlIHRvIHNwaWxsIGFsbCBvZiB0aGVtLiBBbmQgZXZlbiBpbiB0aGF0IGNh
c2UsCisgICAgICAgIC8vIGRlcGVuZGluZyBvbiB0aGUgb3JkZXIgaW4gd2hpY2ggTExWTSBzYXZl
cyB0aGUKKyAgICAgICAgLy8gY2FsbGVlLXNhdmVzLCB3ZSB3aWxsIHByb2JhYmx5IHN0aWxsIGJl
IHNhZmUuIEFueXdheSwKKyAgICAgICAgLy8gdGhlIGNvdXBsZSBleHRyYSBtb3ZlIGluc3RydWN0
aW9ucyBjb21wYXJlZCB0byBhbgorICAgICAgICAvLyBlZmZpY2llbnQgY3ljbGUtYmFzZWQgYWxn
b3JpdGhtIGFyZSBub3QgZ29pbmcgdG8gaHVydAorICAgICAgICAvLyB1cy4KKyAgICAgICAgaWYg
KHdhbnRlZFJlZy5pc0ZQUigpKSB7CisgICAgICAgICAgICBGUFJSZWcgdGVtcEZQUiA9IGdldEZy
ZWVGUFIoKTsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFM
b2coIiAgKiBNb3ZpbmcgIiwgd2FudGVkUmVnLCAiIGludG8gIiwgdGVtcEZQUiwgIlxuIik7Cisg
ICAgICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKHdhbnRlZFJlZy5mcHIoKSwgdGVtcEZQUik7Cisg
ICAgICAgICAgICB1cGRhdGVSZWNvdmVyeSgqY3VycmVudCwKKyAgICAgICAgICAgICAgICBWYWx1
ZVJlY292ZXJ5OjppbkZQUih0ZW1wRlBSLCBjdXJyZW50LT5yZWNvdmVyeSgpLmRhdGFGb3JtYXQo
KSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSBnZXRG
cmVlR1BSKCk7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICogTW92aW5nICIsIHdhbnRlZFJlZy5ncHIoKSwgIiBpbnRvICIsIHRlbXBHUFIsICJc
biIpOworICAgICAgICAgICAgbV9qaXQubW92ZSh3YW50ZWRSZWcuZ3ByKCksIHRlbXBHUFIpOwor
ICAgICAgICAgICAgdXBkYXRlUmVjb3ZlcnkoKmN1cnJlbnQsCisgICAgICAgICAgICAgICAgVmFs
dWVSZWNvdmVyeTo6aW5HUFIodGVtcEdQUiwgY3VycmVudC0+cmVjb3ZlcnkoKS5kYXRhRm9ybWF0
KCkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlQoIW1fcmVnaXN0ZXJzW3dhbnRlZFJl
Z10pOworCisgICAgaWYgKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuaXNDb25zdGFudCgpKSB7
CisgICAgICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCBjYWxsZWUgc2F2ZXMgZm9yIHdhbnRlZCBG
UFJzLCBhbmQgdGhvc2UgYXJlIG5ldmVyIGNvbnN0YW50cworICAgICAgICBBU1NFUlQod2FudGVk
UmVnLmlzR1BSKCkpOworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2co
IiAgICogTG9hZGluZyAiLCBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmNvbnN0YW50KCksICIg
aW50byAiLCB3YW50ZWRSZWcsICJcbiIpOworICAgICAgICBtX2ppdC5tb3ZlVHJ1c3RlZFZhbHVl
KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuY29uc3RhbnQoKSwgSlNWYWx1ZVJlZ3MgeyB3YW50
ZWRSZWcuZ3ByKCkgfSk7CisgICAgICAgIHVwZGF0ZVJlY292ZXJ5KAorICAgICAgICAgICAgY2Fj
aGVkUmVjb3ZlcnksCisgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjppblJlZ2lzdGVyKHdhbnRl
ZFJlZywgRGF0YUZvcm1hdEpTKSk7CisgICAgfSBlbHNlIGlmIChjYWNoZWRSZWNvdmVyeS5yZWNv
dmVyeSgpLmlzSW5HUFIoKSkgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRh
dGFMb2coIiAgICogTW92aW5nICIsIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCksICIgaW50byAi
LCB3YW50ZWRSZWcsICJcbiIpOworICAgICAgICBpZiAod2FudGVkUmVnLmlzR1BSKCkpCisgICAg
ICAgICAgICBtX2ppdC5tb3ZlKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCksIHdhbnRl
ZFJlZy5ncHIoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1faml0Lm1vdmU2NFRvRG91
YmxlKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCksIHdhbnRlZFJlZy5mcHIoKSk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZGF0YUZvcm1h
dCgpID09IERhdGFGb3JtYXRKUyk7CisgICAgICAgIHVwZGF0ZVJlY292ZXJ5KGNhY2hlZFJlY292
ZXJ5LAorICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5SZWdpc3Rlcih3YW50ZWRSZWcsIERh
dGFGb3JtYXRKUykpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChjYWNoZWRSZWNvdmVy
eS5yZWNvdmVyeSgpLmlzSW5GUFIoKSk7CisgICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS5yZWNv
dmVyeSgpLmRhdGFGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKSB7CisgICAgICAgICAgICAv
LyBXZSBvbmx5IGNhcmUgYWJvdXQgY2FsbGVlIHNhdmVzIGZvciB3YW50ZWQgRlBScywgYW5kIHRo
b3NlIGFyZSBhbHdheXMgRGF0YUZvcm1hdEpTCisgICAgICAgICAgICBBU1NFUlQod2FudGVkUmVn
LmlzR1BSKCkpOworICAgICAgICAgICAgLy8gVGhpcyB3aWxsIGF1dG9tYXRpY2FsbHkgcGljayB0
aGUgd2FudGVkIEdQUgorICAgICAgICAgICAgZW1pdEJveChjYWNoZWRSZWNvdmVyeSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICAqIE1vdmluZyAiLCBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmZwcigpLCAi
IGludG8gIiwgd2FudGVkUmVnLCAiXG4iKTsKKyAgICAgICAgICAgIGlmICh3YW50ZWRSZWcuaXNH
UFIoKSkKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlRG91YmxlVG82NChjYWNoZWRSZWNvdmVy
eS5yZWNvdmVyeSgpLmZwcigpLCB3YW50ZWRSZWcuZ3ByKCkpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUoY2FjaGVkUmVjb3ZlcnkucmVjb3Zlcnko
KS5mcHIoKSwgd2FudGVkUmVnLmZwcigpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNh
Y2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZGF0YUZvcm1hdCgpID09IERhdGFGb3JtYXRKUyk7Cisg
ICAgICAgICAgICB1cGRhdGVSZWNvdmVyeShjYWNoZWRSZWNvdmVyeSwKKyAgICAgICAgICAgICAg
ICBWYWx1ZVJlY292ZXJ5OjppblJlZ2lzdGVyKHdhbnRlZFJlZywgRGF0YUZvcm1hdEpTKSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBBU1NFUlQobV9yZWdpc3RlcnNbd2FudGVkUmVnXSA9PSAm
Y2FjaGVkUmVjb3ZlcnkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVO
QUJMRShKSVQpICYmIFVTRShKU1ZBTFVFNjQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNzA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5o
IgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1
ZGUgIkNvZGVCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworQ2FsbEZyYW1lU2h1ZmZsZXI6
OkNhbGxGcmFtZVNodWZmbGVyKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBDYWxsRnJhbWVTaHVm
ZmxlRGF0YSYgZGF0YSkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb2xkRnJhbWUoZGF0YS5u
dW1Mb2NhbHMgKyBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgbnVsbHB0cikKKyAgICAs
IG1fbmV3RnJhbWUoZGF0YS5hcmdzLnNpemUoKSArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNp
emUsIG51bGxwdHIpCisgICAgLCBtX2FsaWduZWRPbGRGcmFtZVNpemUoSlNTdGFjazo6Q2FsbEZy
YW1lSGVhZGVyU2l6ZQorICAgICAgICArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShq
aXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkpCisgICAgLCBtX2FsaWduZWROZXdGcmFt
ZVNpemUoSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZQorICAgICAgICArIHJvdW5kQXJndW1l
bnRDb3VudFRvQWxpZ25GcmFtZShkYXRhLmFyZ3Muc2l6ZSgpKSkKKyAgICAsIG1fZnJhbWVEZWx0
YShtX2FsaWduZWROZXdGcmFtZVNpemUgLSBtX2FsaWduZWRPbGRGcmFtZVNpemUpCisgICAgLCBt
X2xvY2tlZFJlZ2lzdGVycyhSZWdpc3RlclNldDo6YWxsUmVnaXN0ZXJzKCkpCit7CisgICAgLy8g
V2UgYXJlIGFsbG93ZWQgYWxsIHRoZSB1c3VhbCByZWdpc3RlcnMuLi4KKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOyApCisgICAgICAgIG1fbG9j
a2VkUmVnaXN0ZXJzLmNsZWFyKEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOworICAgIGZvciAodW5z
aWduZWQgaSA9IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07ICkKKyAgICAgICAgbV9s
b2NrZWRSZWdpc3RlcnMuY2xlYXIoRlBSSW5mbzo6dG9SZWdpc3RlcihpKSk7CisgICAgLy8gLi4u
IGFzIHdlbGwgYXMgdGhlIHJ1bnRpbWUgcmVnaXN0ZXJzLgorICAgIG1fbG9ja2VkUmVnaXN0ZXJz
LmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKworICAgIEFT
U0VSVCghZGF0YS5jYWxsZWUuaXNJbkpTU3RhY2soKSB8fCBkYXRhLmNhbGxlZS52aXJ0dWFsUmVn
aXN0ZXIoKS5pc0xvY2FsKCkpOworICAgIGFkZE5ldyhWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6
Q2FsbGVlKSwgZGF0YS5jYWxsZWUpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXRh
LmFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQVNTRVJUKCFkYXRhLmFyZ3NbaV0uaXNJbkpT
U3RhY2soKSB8fCBkYXRhLmFyZ3NbaV0udmlydHVhbFJlZ2lzdGVyKCkuaXNMb2NhbCgpKTsKKyAg
ICAgICAgYWRkTmV3KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpLCBkYXRhLmFyZ3NbaV0p
OworICAgIH0KKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgZm9yIChSZWcgcmVnID0gUmVnOjpm
aXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKKyAgICAgICAg
aWYgKCFkYXRhLnJlZ2lzdGVyc1tyZWddLmlzU2V0KCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAgICAgICAgICBhZGROZXcoSlNWYWx1ZVJl
Z3MocmVnLmdwcigpKSwgZGF0YS5yZWdpc3RlcnNbcmVnXSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGFkZE5ldyhyZWcuZnByKCksIGRhdGEucmVnaXN0ZXJzW3JlZ10pOworICAgIH0KKyNl
bmRpZgorfQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlbGltaXRlciAgICAgICAgICAgICA9
ICIgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICI7CisgICAgc3RhdGljIGNvbnN0
IGNoYXIqIGRhbmdlckRlbGltaXRlciAgICAgICA9ICIgWC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS1YICI7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRhbmdlckJvdW5kc0RlbGltaXRl
ciA9ICIgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYICI7CisgICAgc3RhdGljIGNv
bnN0IGNoYXIqIGVtcHR5U3BhY2UgICAgICAgICAgICA9ICIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICI7CisgICAgQVNTRVJUKG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZSA8PSBudW1M
b2NhbHMoKSk7CisgICAgb3V0LnByaW50KCIgICAgICAgICAgIik7CisgICAgb3V0LnByaW50KCIg
ICAgICAgICAgIE9sZCBmcmFtZSAgICAgICAgICAgICAgICIpOworICAgIG91dC5wcmludCgiICAg
ICAgICAgICBOZXcgZnJhbWUgICAgICAgICAgICAgICAiKTsKKyAgICBvdXQucHJpbnQoIlxuIik7
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2FsaWduZWRPbGRGcmFtZVNpemUgKyBudW1Mb2Nh
bHMoKSArIDM7ICsraSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb2xkIHsgbV9hbGlnbmVk
T2xkRnJhbWVTaXplIC0gaSAtIDEgfTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG5ld1JlZyB7
IG9sZCArIG1fZnJhbWVEZWx0YSB9OworCisgICAgICAgIGlmICghaXNWYWxpZE9sZChvbGQpICYm
IG9sZCAhPSBmaXJzdE9sZCgpIC0gMQorICAgICAgICAgICAgJiYgIWlzVmFsaWROZXcobmV3UmVn
KSAmJiBuZXdSZWcgIT0gZmlyc3ROZXcoKSAtIDEpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBvdXQucHJpbnQoIiAgICAgICAgIik7CisgICAgICAgIGlmIChkYW5nZXJGcm9udGll
cigpID49IGZpcnN0TmV3KCkKKyAgICAgICAgICAgICYmIChuZXdSZWcgPT0gZGFuZ2VyRnJvbnRp
ZXIoKSB8fCBuZXdSZWcgPT0gZmlyc3ROZXcoKSAtIDEpKQorICAgICAgICAgICAgb3V0LnByaW50
KGRhbmdlckJvdW5kc0RlbGltaXRlcik7CisgICAgICAgIGVsc2UgaWYgKGlzVmFsaWRPbGQob2xk
KSkKKyAgICAgICAgICAgIG91dC5wcmludChpc1ZhbGlkTmV3KG5ld1JlZykgJiYgaXNEYW5nZXJO
ZXcobmV3UmVnKSA/IGRhbmdlckRlbGltaXRlciA6IGRlbGltaXRlcik7CisgICAgICAgIGVsc2Ug
aWYgKG9sZCA9PSBmaXJzdE9sZCgpIC0gMSkKKyAgICAgICAgICAgIG91dC5wcmludChkZWxpbWl0
ZXIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoZW1wdHlTcGFjZSk7Cisg
ICAgICAgIGlmIChkYW5nZXJGcm9udGllcigpID49IGZpcnN0TmV3KCkKKyAgICAgICAgICAgICYm
IChuZXdSZWcgPT0gZGFuZ2VyRnJvbnRpZXIoKSB8fCBuZXdSZWcgPT0gZmlyc3ROZXcoKSAtIDEp
KQorICAgICAgICAgICAgb3V0LnByaW50KGRhbmdlckJvdW5kc0RlbGltaXRlcik7CisgICAgICAg
IGVsc2UgaWYgKGlzVmFsaWROZXcobmV3UmVnKSB8fCBuZXdSZWcgPT0gZmlyc3ROZXcoKSAtIDEp
CisgICAgICAgICAgICBvdXQucHJpbnQoaXNEYW5nZXJOZXcobmV3UmVnKSA/IGRhbmdlckRlbGlt
aXRlciA6IGRlbGltaXRlcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludChl
bXB0eVNwYWNlKTsKKyAgICAgICAgb3V0LnByaW50KCJcbiIpOworICAgICAgICBpZiAob2xkID09
IGZpcnN0T2xkKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIiBzcCAtLT4gIik7CisgICAgICAg
IGVsc2UgaWYgKCFvbGQub2Zmc2V0KCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIiBmcCAtLT4g
Iik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgICAgICAiKTsKKyAg
ICAgICAgaWYgKGlzVmFsaWRPbGQob2xkKSkgeworICAgICAgICAgICAgaWYgKGdldE9sZChvbGQp
KSB7CisgICAgICAgICAgICAgICAgYXV0byBzdHIgPSB0b0NTdHJpbmcob2xkKTsKKyAgICAgICAg
ICAgICAgICBpZiAoaXNWYWxpZE5ldyhuZXdSZWcpICYmIGlzRGFuZ2VyTmV3KG5ld1JlZykpCisg
ICAgICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiBYICAgICAgJTE4cyAgICAgICBYICIsIHN0
ci5kYXRhKCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgb3V0
LnByaW50ZigiIHwgICAgICAlMThzICAgICAgIHwgIiwgc3RyLmRhdGEoKSk7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKGlzVmFsaWROZXcobmV3UmVnKSAmJiBpc0Rhbmdlck5ldyhuZXdSZWcpKQor
ICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiBYJTMwcyBYICIsICIiKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIgfCUzMHMgfCAiLCAiIik7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KGVtcHR5U3BhY2UpOworICAgICAgICBp
ZiAoaXNWYWxpZE5ldyhuZXdSZWcpKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyIGQgPSBpc0Rh
bmdlck5ldyhuZXdSZWcpID8gJ1gnIDogJ3wnOworICAgICAgICAgICAgYXV0byBzdHIgPSB0b0NT
dHJpbmcobmV3UmVnKTsKKyAgICAgICAgICAgIGlmIChnZXROZXcobmV3UmVnKSkgeworICAgICAg
ICAgICAgICAgIGlmIChnZXROZXcobmV3UmVnKS0+cmVjb3ZlcnkoKS5pc0NvbnN0YW50KCkpCisg
ICAgICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiAlYyU4cyA8LSAgICAgICAgICAgY29uc3Rh
bnQgJWMgIiwgZCwgc3RyLmRhdGEoKSwgZCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gcmVjb3ZlcnlTdHIgPSB0b0NTdHJpbmcoZ2V0TmV3KG5ld1Jl
ZyktPnJlY292ZXJ5KCkpOworICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIgJWMlOHMg
PC0gJTE4cyAlYyAiLCBkLCBzdHIuZGF0YSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVj
b3ZlcnlTdHIuZGF0YSgpLCBkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVs
c2UgaWYgKG5ld1JlZyA9PSBWaXJ0dWFsUmVnaXN0ZXIgeyBKU1N0YWNrOjpBcmd1bWVudENvdW50
IH0pCisgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiICVjJThzIDwtICUxOHp1ICVjICIsIGQs
IHN0ci5kYXRhKCksIGFyZ0NvdW50KCksIGQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIG91dC5wcmludGYoIiAlYyUzMHMgJWMgIiwgZCwgIiIsIGQpOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIG91dC5wcmludChlbXB0eVNwYWNlKTsKKyAgICAgICAgaWYgKG5ld1Jl
ZyA9PSBmaXJzdE5ldygpIC0gbV9uZXdGcmFtZU9mZnNldCAmJiAhaXNTbG93UGF0aCgpKQorICAg
ICAgICAgICAgb3V0LnByaW50KCIgPC0tIG5ldyBzcCBiZWZvcmUganVtcCAoY3VycmVudCAiLCBt
X25ld0ZyYW1lQmFzZSwgIikgIik7CisgICAgICAgIGlmIChuZXdSZWcgPT0gZmlyc3ROZXcoKSkK
KyAgICAgICAgICAgIG91dC5wcmludCgiIDwtLSBuZXcgZnAgYWZ0ZXIgcHJvbG9ndWUiKTsKKyAg
ICAgICAgb3V0LnByaW50KCJcbiIpOworICAgIH0KKyAgICBvdXQucHJpbnQoIiAgICAgICAgICAi
KTsKKyAgICBvdXQucHJpbnQoIiAgICAgICAgTGl2ZSByZWdpc3RlcnMgICAgICAgICAgICAgIik7
CisgICAgb3V0LnByaW50KCIgICAgICAgIFdhbnRlZCByZWdpc3RlcnMgICAgICAgICAgICIpOwor
ICAgIG91dC5wcmludCgiXG4iKTsKKyAgICBmb3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJl
ZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVnLm5leHQoKSkgeworICAgICAgICBDYWNoZWRSZWNv
dmVyeSogb2xkQ2FjaGVkUmVjb3ZlcnkgeyBtX3JlZ2lzdGVyc1tyZWddIH07CisgICAgICAgIENh
Y2hlZFJlY292ZXJ5KiBuZXdDYWNoZWRSZWNvdmVyeSB7IG1fbmV3UmVnaXN0ZXJzW3JlZ10gfTsK
KyAgICAgICAgaWYgKCFvbGRDYWNoZWRSZWNvdmVyeSAmJiAhbmV3Q2FjaGVkUmVjb3ZlcnkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgb3V0LnByaW50KCIgICAgICAgICAgIik7Cisg
ICAgICAgIGlmIChvbGRDYWNoZWRSZWNvdmVyeSkgeworICAgICAgICAgICAgYXV0byBzdHIgPSB0
b0NTdHJpbmcocmVnKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiAgICAgICAgICU4cyAgICAg
ICAgICAgICAgICAgICIsIHN0ci5kYXRhKCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IG91dC5wcmludChlbXB0eVNwYWNlKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBp
ZiAobmV3Q2FjaGVkUmVjb3ZlcnkpIHsKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHdhbnRlZEpT
VmFsdWVSZWdzIHsgbmV3Q2FjaGVkUmVjb3ZlcnktPndhbnRlZEpTVmFsdWVSZWdzKCkgfTsKKyAg
ICAgICAgICAgIGlmIChyZWcuaXNGUFIoKSkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQocmVn
LCAiIDwtICIsIG5ld0NhY2hlZFJlY292ZXJ5LT5yZWNvdmVyeSgpKTsKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIGlmIChyZWcuZ3ByKCkgPT0gd2FudGVkSlNWYWx1ZVJlZ3Mu
dGFnR1BSKCkpCisgICAgICAgICAgICAgICAgICAgIG91dC5wcmludChyZWcuZ3ByKCksICIgPC0g
dGFnKCIsIG5ld0NhY2hlZFJlY292ZXJ5LT5yZWNvdmVyeSgpLCAiKSIpOworICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KHJlZy5ncHIoKSwgIiA8LSBw
YXlsb2FkKCIsIG5ld0NhY2hlZFJlY292ZXJ5LT5yZWNvdmVyeSgpLCAiKSIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisjZWxzZQorICAgICAgICBpZiAobmV3Q2FjaGVkUmVjb3ZlcnkpCisg
ICAgICAgICAgICBvdXQucHJpbnQoIiAgICAgICAgICIsIHJlZywgIiA8LSAiLCBuZXdDYWNoZWRS
ZWNvdmVyeS0+cmVjb3ZlcnkoKSk7CisjZW5kaWYKKyAgICAgICAgb3V0LnByaW50KCJcbiIpOwor
ICAgIH0KKyAgICBvdXQucHJpbnQoIiAgTG9ja2VkIHJlZ2lzdGVyczogIik7CisgICAgYm9vbCBm
aXJzdExvY2tlZCB7IHRydWUgfTsKKyAgICBmb3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJl
ZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVnLm5leHQoKSkgeworICAgICAgICBpZiAobV9sb2Nr
ZWRSZWdpc3RlcnMuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgIG91dC5wcmludChmaXJzdExvY2tl
ZCA/ICIiIDogIiwgIiwgcmVnKTsKKyAgICAgICAgICAgIGZpcnN0TG9ja2VkID0gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgb3V0LnByaW50KCJcbiIpOworCisgICAgaWYgKGlzU2xvd1Bh
dGgoKSkKKyAgICAgICAgb3V0LnByaW50KCIgIFVzaW5nIGZwLXJlbGF0aXZlIGFkZHJlc3Npbmcg
Zm9yIHNsb3cgcGF0aCBjYWxsXG4iKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludCgiICBV
c2luZyBzcC1yZWxhdGl2ZSBhZGRyZXNzaW5nIGZvciBqdW1wICh1c2luZyAiLCBtX25ld0ZyYW1l
QmFzZSwgIiBhcyBuZXcgc3ApXG4iKTsKKyAgICBpZiAobV9vbGRGcmFtZU9mZnNldCkKKyAgICAg
ICAgb3V0LnByaW50KCIgICBPbGQgZnJhbWUgb2Zmc2V0IGlzICIsIG1fb2xkRnJhbWVPZmZzZXQs
ICJcbiIpOworICAgIGlmIChtX25ld0ZyYW1lT2Zmc2V0KQorICAgICAgICBvdXQucHJpbnQoIiAg
IE5ldyBmcmFtZSBvZmZzZXQgaXMgIiwgbV9uZXdGcmFtZU9mZnNldCwgIlxuIik7Cit9CisKK0Nh
Y2hlZFJlY292ZXJ5KiBDYWxsRnJhbWVTaHVmZmxlcjo6Z2V0Q2FjaGVkUmVjb3ZlcnkoVmFsdWVS
ZWNvdmVyeSByZWNvdmVyeSkKK3sKKyAgICBBU1NFUlQoIXJlY292ZXJ5LmlzQ29uc3RhbnQoKSk7
CisgICAgaWYgKHJlY292ZXJ5LmlzSW5HUFIoKSkKKyAgICAgICAgcmV0dXJuIG1fcmVnaXN0ZXJz
W3JlY292ZXJ5LmdwcigpXTsKKyAgICBpZiAocmVjb3ZlcnkuaXNJbkZQUigpKQorICAgICAgICBy
ZXR1cm4gbV9yZWdpc3RlcnNbcmVjb3ZlcnkuZnByKCldOworI2lmIFVTRShKU1ZBTFVFMzJfNjQp
CisgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpID09IEluUGFpcikgeworICAgICAgICBBU1NF
UlQobV9yZWdpc3RlcnNbcmVjb3ZlcnkudGFnR1BSKCldID09IG1fcmVnaXN0ZXJzW3JlY292ZXJ5
LnBheWxvYWRHUFIoKV0pOworICAgICAgICByZXR1cm4gbV9yZWdpc3RlcnNbcmVjb3ZlcnkucGF5
bG9hZEdQUigpXTsKKyAgICB9CisjZW5kaWYKKyAgICBBU1NFUlQocmVjb3ZlcnkuaXNJbkpTU3Rh
Y2soKSk7CisgICAgcmV0dXJuIGdldE9sZChyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSk7Cit9
CisKK0NhY2hlZFJlY292ZXJ5KiBDYWxsRnJhbWVTaHVmZmxlcjo6c2V0Q2FjaGVkUmVjb3Zlcnko
VmFsdWVSZWNvdmVyeSByZWNvdmVyeSwgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5KQor
eworICAgIEFTU0VSVCghcmVjb3ZlcnkuaXNDb25zdGFudCgpKTsKKyAgICBpZiAocmVjb3Zlcnku
aXNJbkdQUigpKQorICAgICAgICByZXR1cm4gbV9yZWdpc3RlcnNbcmVjb3ZlcnkuZ3ByKCldID0g
Y2FjaGVkUmVjb3Zlcnk7CisgICAgaWYgKHJlY292ZXJ5LmlzSW5GUFIoKSkKKyAgICAgICAgcmV0
dXJuIG1fcmVnaXN0ZXJzW3JlY292ZXJ5LmZwcigpXSA9IGNhY2hlZFJlY292ZXJ5OworI2lmIFVT
RShKU1ZBTFVFMzJfNjQpCisgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpID09IEluUGFpcikg
eworICAgICAgICBtX3JlZ2lzdGVyc1tyZWNvdmVyeS50YWdHUFIoKV0gPSBjYWNoZWRSZWNvdmVy
eTsKKyAgICAgICAgcmV0dXJuIG1fcmVnaXN0ZXJzW3JlY292ZXJ5LnBheWxvYWRHUFIoKV0gPSBj
YWNoZWRSZWNvdmVyeTsKKyAgICB9CisjZW5kaWYKKyAgICBBU1NFUlQocmVjb3ZlcnkuaXNJbkpT
U3RhY2soKSk7CisgICAgc2V0T2xkKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpLCBjYWNoZWRS
ZWNvdmVyeSk7CisgICAgcmV0dXJuIGNhY2hlZFJlY292ZXJ5OworfQorCit2b2lkIENhbGxGcmFt
ZVNodWZmbGVyOjpzcGlsbChDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3ZlcnkpCit7CisgICAg
QVNTRVJUKCFpc1Nsb3dQYXRoKCkpOworICAgIEFTU0VSVChjYWNoZWRSZWNvdmVyeS5yZWNvdmVy
eSgpLmlzSW5SZWdpc3RlcnMoKSk7CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3BpbGxTbG90IHsg
MCB9OworICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIHNsb3QgPSBmaXJzdE9sZCgpOyBzbG90IDw9
IGxhc3RPbGQoKTsgc2xvdCAtPSAxKSB7CisgICAgICAgIEFTU0VSVChzbG90IDwgbmV3QXNPbGQo
Zmlyc3ROZXcoKSkpOworICAgICAgICBpZiAoZ2V0T2xkKHNsb3QpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgc3BpbGxTbG90ID0gc2xvdDsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIC8vIFdlIG11c3QgaGF2ZSBlbm91Z2ggc2xvdHMgdG8gYmUgYWJsZSB0byBmaXQgdGhl
IHdob2xlCisgICAgLy8gY2FsbGVlJ3MgZnJhbWUgZm9yIHRoZSBzbG93IHBhdGguCisgICAgUkVM
RUFTRV9BU1NFUlQoc3BpbGxTbG90LmlzTG9jYWwoKSk7CisKKyAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgZGF0YUxvZygiICAgKiBTcGlsbGluZyAiLCBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgp
LCAiIGludG8gIiwgc3BpbGxTbG90LCAiXG4iKTsKKyAgICBhdXRvIGZvcm1hdCA9IGVtaXRTdG9y
ZShjYWNoZWRSZWNvdmVyeSwgYWRkcmVzc0Zvck9sZChzcGlsbFNsb3QpKTsKKyAgICBBU1NFUlQo
Zm9ybWF0ICE9IERhdGFGb3JtYXROb25lKTsKKyAgICB1cGRhdGVSZWNvdmVyeShjYWNoZWRSZWNv
dmVyeSwgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKHNwaWxsU2xvdCwgZm9ybWF0
KSk7Cit9CisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXREZWx0YUNoZWNrKCkKK3sKKyAg
ICBpZiAoQVNTRVJUX0RJU0FCTEVEKQorICAgICAgICByZXR1cm47CisKKyAgICBHUFJSZWcgc2Ny
YXRjaEdQUiB7IGdldEZyZWVHUFIoKSB9OworICAgIGlmIChzY3JhdGNoR1BSICE9IEludmFsaWRH
UFJSZWcpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgIFVz
aW5nICIsIHNjcmF0Y2hHUFIsICIgZm9yIHRoZSBmcC1zcCBkZWx0YSBjaGVja1xuIik7CisgICAg
ICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgbV9qaXQuc3ViUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb2sgPSBtX2ppdC5i
cmFuY2gzMigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgc2NyYXRjaEdQUiwK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLW51bUxvY2FscygpICog
c2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgICAgICBtX2ppdC5hYm9ydFdpdGhSZWFzb24oSklUVW5l
eHBlY3RlZENhbGxGcmFtZVNpemUpOworICAgICAgICBvay5saW5rKCZtX2ppdCk7CisgICAgfSBl
bHNlIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCIgIFNraXBwaW5nIHRoZSBmcC1zcCBk
ZWx0YSBjaGVjayBzaW5jZSB0aGVyZSBpcyB0b28gbXVjaCBwcmVzc3VyZSIpOworfQorCit2b2lk
IENhbGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlRm9yU2xvd1BhdGgoKQoreworICAgIEFTU0VSVChp
c1VuZGVjaWRlZCgpKTsKKyAgICBlbWl0RGVsdGFDaGVjaygpOworCisgICAgbV9mcmFtZURlbHRh
ID0gbnVtTG9jYWxzKCkgKyBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZTsKKyAgICBtX25l
d0ZyYW1lQmFzZSA9IE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlcjsKKyAgICBt
X25ld0ZyYW1lT2Zmc2V0ID0gLUpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplOworCisgICAg
aWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIlxuXG5QcmVwYXJpbmcgZnJhbWUgZm9yIHNs
b3cgcGF0aCBjYWxsOlxuIiwgKnRoaXMpOworCisgICAgcHJlcGFyZUFueSgpOworCisgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIlJlYWR5IGZvciBzbG93IHBhdGggY2FsbCFcbiIp
OworfQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlRm9yVGFpbENhbGwoKQorewor
ICAgIEFTU0VSVChpc1VuZGVjaWRlZCgpKTsKKyAgICBlbWl0RGVsdGFDaGVjaygpOworCisgICAg
Ly8gV2UnbGwgdXNlIHNwLWJhc2VkIGluZGV4aW5nIHNvIHRoYXQgd2UgY2FuIGxvYWQgdGhlCisg
ICAgLy8gY2FsbGVyJ3MgZnJhbWUgcG9pbnRlciBpbnRvIHRoZSBmcHIgaW1tZWRpYXRlbHkKKyAg
ICBtX29sZEZyYW1lQmFzZSA9IE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlcjsK
KyAgICBtX29sZEZyYW1lT2Zmc2V0ID0gbnVtTG9jYWxzKCk7CisgICAgbV9uZXdGcmFtZUJhc2Ug
PSBhY3F1aXJlR1BSKCk7CisjaWYgQ1BVKFg4NikKKyAgICAvLyBXZSBsb2FkIHRoZSBmcmFtZSBw
b2ludGVyIG1hbnVhbGx5LCBidXQgd2UgbmVlZCB0byBhc2sgdGhlCisgICAgLy8gYWxnb3JpdGht
IHRvIG1vdmUgdGhlIHJldHVybiBQQyBmb3IgdXMgKGl0J2QgcHJvYmFibHkKKyAgICAvLyByZXF1
aXJlIGEgd3JpdGUgdG8gdGhlIGRhbmdlciB6b25lKS4gU2luY2UgaXQnZCBiZSBhd2t3YXJkCisg
ICAgLy8gdG8gYXNrIGZvciBoYWxmIGEgdmFsdWUgbW92ZSwgd2UgYXNrIHRoYXQgdGhlIHdob2xl
IHRoaW5nCisgICAgLy8gYmUgbW92ZWQgZm9yIHVzLgorICAgIGFkZE5ldyhWaXJ0dWFsUmVnaXN0
ZXIgeyAwIH0sCisgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjayhWaXJ0
dWFsUmVnaXN0ZXIoMCksIERhdGFGb3JtYXRKUykpOworCisgICAgLy8gc3Agd2lsbCBwb2ludCB0
byBoZWFkMCBhbmQgd2Ugd2lsbCBtb3ZlIGl0IHVwIGhhbGYgYSBzbG90CisgICAgLy8gbWFudWFs
bHkKKyAgICBtX25ld0ZyYW1lT2Zmc2V0ID0gMDsKKyNlbGlmIENQVShBUk0pIHx8IENQVShTSDQp
IHx8IENQVShNSVBTKQorICAgIC8vIFdlIGxvYWQgdGhlIHRoZSBmcmFtZSBwb2ludGVyIGFuZCBs
aW5rIHJlZ2lzdGVyCisgICAgLy8gbWFudWFsbHkuIFdlIGNvdWxkIGFzayB0aGUgYWxnb3JpdGht
IHRvIGxvYWQgdGhlbSBmb3IgdXMsCisgICAgLy8gYW5kIGl0IHdvdWxkIGFsbG93IHVzIHRvIHVz
ZSB0aGUgbGluayByZWdpc3RlciBhcyBhbiBleHRyYQorICAgIC8vIHRlbXBvcmFyeSAtIGJ1dCBp
dCdkIG1lYW4gdGhhdCB0aGUgZnJhbWUgcG9pbnRlciBjYW4gYWxzbworICAgIC8vIGJlIHVzZWQg
YXMgYW4gZXh0cmEgdGVtcG9yYXJ5LCBzbyB3ZSBrZWVwIHRoZSBsaW5rIHJlZ2lzdGVyCisgICAg
Ly8gbG9ja2VkIGluc3RlYWQuCisKKyAgICAvLyBzcCB3aWxsIHBvaW50IHRvIGhlYWQxIHNpbmNl
IHRoZSBjYWxsZWUncyBwcm9sb2d1ZSBwdXNoZXMKKyAgICAvLyB0aGUgY2FsbCBmcmFtZSBhbmQg
bGluayByZWdpc3Rlci4KKyAgICBtX25ld0ZyYW1lT2Zmc2V0ID0gLTE7CisjZWxpZiBDUFUoQVJN
NjQpCisgICAgLy8gV2UgbG9hZCB0aGUgZnJhbWUgcG9pbnRlciBhbmQgbGluayByZWdpc3RlciBt
YW51YWxseS4gV2UKKyAgICAvLyBjb3VsZCBhc2sgdGhlIGFsZ29yaXRobSB0byBsb2FkIHRoZSBs
aW5rIHJlZ2lzdGVyIGZvciB1cworICAgIC8vICh3aGljaCB3b3VsZCBhbGxvdyBmb3IgaXRzIHVz
ZSBhcyBhbiBleHRyYSB0ZW1wb3JhcnkpLCBidXQKKyAgICAvLyBzaW5jZSBpdHMgbm90IGluIEdQ
UkluZm8sIHdlIGNhbid0IGRvIGl0LgorCisgICAgLy8gc3Agd2lsbCBwb2ludCB0byBoZWFkMiBz
aW5jZSB0aGUgY2FsbGVlJ3MgcHJvbG9ndWUgcHVzaGVzIHRoZQorICAgIC8vIGNhbGwgZnJhbWUg
YW5kIGxpbmsgcmVnaXN0ZXIKKyAgICBtX25ld0ZyYW1lT2Zmc2V0ID0gLTI7CisjZWxpZiBDUFUo
WDg2XzY0KQorICAgIC8vIFdlIGxvYWQgdGhlIGZyYW1lIHBvaW50ZXIgbWFudWFsbHksIGJ1dCB3
ZSBhc2sgdGhlCisgICAgLy8gYWxnb3JpdGhtIHRvIG1vdmUgdGhlIHJldHVybiBQQyBmb3IgdXMg
KGl0J2QgcHJvYmFibHkKKyAgICAvLyByZXF1aXJlIGEgd3JpdGUgaW4gdGhlIGRhbmdlciB6b25l
KQorICAgIGFkZE5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyAxIH0sCisgICAgICAgIFZhbHVlUmVjb3Zl
cnk6OmRpc3BsYWNlZEluSlNTdGFjayhWaXJ0dWFsUmVnaXN0ZXIoMSksIERhdGFGb3JtYXRKUykp
OworCisgICAgLy8gc3Agd2lsbCBwb2ludCB0byBoZWFkMSBzaW5jZSB0aGUgY2FsbGVlJ3MgcHJv
bG9ndWUgcHVzaGVzCisgICAgLy8gdGhlIGNhbGwgZnJhbWUgcmVnaXN0ZXIKKyAgICBtX25ld0Zy
YW1lT2Zmc2V0ID0gLTE7CisjZWxzZQorICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwor
I2VuZGlmCisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiICBFbWl0dGluZyBj
b2RlIGZvciBjb21wdXRpbmcgdGhlIG5ldyBmcmFtZSBiYXNlXG4iKTsKKworICAgIC8vIFdlIGNv
bXB1dGUgdGhlIG5ldyBmcmFtZSBiYXNlIGJ5IGZpcnN0IGNvbXB1dGluZyB0aGUgdG9wIG9mIHRo
ZQorICAgIC8vIG9sZCBmcmFtZSAodGFraW5nIGludG8gYWNjb3VudCBhbiBhcmd1bWVudCBjb3Vu
dCBoaWdoZXIgdGhhbgorICAgIC8vIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyksIHRoZW4gc3Vi
c3RyYWN0aW5nIHRvIGl0IHRoZSBhbGlnbmVkCisgICAgLy8gbmV3IGZyYW1lIHNpemUgKGFkanVz
dGVkKS4KKyAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2FzdDxp
bnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCksIG1fbmV3RnJhbWVCYXNlKTsK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBhcmd1bWVudENvdW50T0sgPQorICAgICAgICBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsLCBtX25ld0ZyYW1lQmFzZSwK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobV9qaXQuY29kZUJsb2Nr
KCktPm51bVBhcmFtZXRlcnMoKSkpOworICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSAtIDEgKyBKU1N0YWNrOjpDYWxs
RnJhbWVIZWFkZXJTaXplKSwgbV9uZXdGcmFtZUJhc2UpOworICAgIG1faml0LmFuZDMyKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLXN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkpLCBtX25l
d0ZyYW1lQmFzZSk7CisgICAgbV9qaXQubXVsMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihzaXplb2YoUmVnaXN0ZXIpKSwgbV9uZXdGcmFtZUJhc2UsIG1fbmV3RnJhbWVCYXNlKTsKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgIGFyZ3VtZW50
Q291bnRPSy5saW5rKCZtX2ppdCk7CisgICAgbV9qaXQubW92ZSgKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihtX2FsaWduZWRPbGRGcmFtZVNpemUgKiBzaXplb2YoUmVnaXN0
ZXIpKSwKKyAgICAgICAgbV9uZXdGcmFtZUJhc2UpOworICAgIGRvbmUubGluaygmbV9qaXQpOwor
CisgICAgbV9qaXQuYWRkUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBtX25ld0ZyYW1l
QmFzZSk7CisgICAgbV9qaXQuc3ViUHRyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKAorICAgICAgICAgICAgKG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZSArIG1fbmV3RnJhbWVP
ZmZzZXQpICogc2l6ZW9mKFJlZ2lzdGVyKSksIAorICAgICAgICBtX25ld0ZyYW1lQmFzZSk7CisK
KyAgICAvLyBXZSBsb2FkIHRoZSBsaW5rIHJlZ2lzdGVyIG1hbnVhbGx5IGZvciBhcmNoaXRlY3R1
cmVzIHRoYXQgaGF2ZSBvbmUKKyNpZiBDUFUoQVJNKSB8fCBDUFUoU0g0KSB8fCBDUFUoQVJNNjQp
CisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxl
cjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIHNpemVvZih2b2lkKikpLAorICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6bGlua1JlZ2lzdGVyKTsKKyNlbGlmIENQVShNSVBTKQorICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJl
Z2lzdGVyLCBzaXplb2Yodm9pZCopKSwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJldHVybkFk
ZHJlc3NSZWdpc3Rlcik7CisjZW5kaWYKKworICAgIC8vIFdlIHdhbnQgdGhlIGZyYW1lIHBvaW50
ZXIgdG8gYWx3YXlzIHBvaW50IHRvIGEgdmFsaWQgZnJhbWUsIGFuZAorICAgIC8vIHdlIGFyZSBn
b2luZyB0byB0cmFzaCB0aGUgY3VycmVudCBvbmUuIExldCdzIG1ha2UgaXQgcG9pbnQgdG8KKyAg
ICAvLyBvdXIgY2FsbGVyJ3MgZnJhbWUsIHNpbmNlIHRoYXQncyB3aGF0IHdlIHdhbnQgdG8gZW5k
IHVwIHdpdGguCisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNy
b0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIpLAorICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRh
dGFMb2coIlByZXBhcmluZyBmcmFtZSBmb3IgdGFpbCBjYWxsOlxuIiwgKnRoaXMpOworCisgICAg
cHJlcGFyZUFueSgpOworCisjaWYgQ1BVKFg4NikKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ZGF0YUxvZygiICBTaW11bGF0aW5nIHBvcCBvZiB0aGUgY2FsbCBmcmFtZSByZWdpc3RlclxuIik7
CisgICAgbV9qaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKHZv
aWQqKSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisjZW5kaWYKKwor
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJSZWFkeSBmb3IgdGFpbCBjYWxsIVxu
Iik7Cit9CisKK2Jvb2wgQ2FsbEZyYW1lU2h1ZmZsZXI6OnRyeVdyaXRlcyhDYWNoZWRSZWNvdmVy
eSYgY2FjaGVkUmVjb3ZlcnkpCit7CisgICAgQVNTRVJUKG1fbmV3RnJhbWVCYXNlICE9IEludmFs
aWRHUFJSZWcpOworCisgICAgLy8gSWYgdGhlIHZhbHVlIGlzIGFscmVhZHkgc2V0IHVwIGNvcnJl
Y3RseSwgd2UgZG9uJ3QgaGF2ZQorICAgIC8vIGFueXRoaW5nIHRvIGRvLgorICAgIGlmIChpc1Ns
b3dQYXRoKCkgJiYgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5pc0luSlNTdGFjaygpCisgICAg
ICAgICYmIGNhY2hlZFJlY292ZXJ5LnRhcmdldHMoKS5zaXplKCkgPT0gMQorICAgICAgICAmJiBu
ZXdBc09sZChjYWNoZWRSZWNvdmVyeS50YXJnZXRzKClbMF0pID09IGNhY2hlZFJlY292ZXJ5LnJl
Y292ZXJ5KCkudmlydHVhbFJlZ2lzdGVyKCkpIHsKKyAgICAgICAgY2FjaGVkUmVjb3ZlcnkuY2xl
YXJUYXJnZXRzKCk7CisgICAgICAgIGlmICghY2FjaGVkUmVjb3Zlcnkud2FudGVkSlNWYWx1ZVJl
Z3MoKSAmJiBjYWNoZWRSZWNvdmVyeS53YW50ZWRGUFIoKSA9PSBJbnZhbGlkRlBSUmVnKQorICAg
ICAgICAgICAgY2xlYXJDYWNoZWRSZWNvdmVyeShjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKCFjYW5Mb2FkQW5kQm94KGNh
Y2hlZFJlY292ZXJ5KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZW1pdExvYWQoY2Fj
aGVkUmVjb3ZlcnkpOworICAgIGVtaXRCb3goY2FjaGVkUmVjb3ZlcnkpOworICAgIEFTU0VSVChj
YWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmlzSW5SZWdpc3RlcnMoKQorICAgICAgICB8fCBjYWNo
ZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmlzQ29uc3RhbnQoKSk7CisKKyAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgZGF0YUxvZygiICAgKiBTdG9yaW5nICIsIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5
KCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FjaGVkUmVjb3ZlcnkudGFyZ2V0cygp
LnNpemUoKTsgKytpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB0YXJnZXQgeyBjYWNoZWRS
ZWNvdmVyeS50YXJnZXRzKClbaV0gfTsKKyAgICAgICAgQVNTRVJUKCFpc0Rhbmdlck5ldyh0YXJn
ZXQpKTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCFpID8gIiBp
bnRvICIgOiAiLCBhbmQgIiwgIk5FVyAiLCB0YXJnZXQpOworICAgICAgICBlbWl0U3RvcmUoY2Fj
aGVkUmVjb3ZlcnksIGFkZHJlc3NGb3JOZXcodGFyZ2V0KSk7CisgICAgICAgIHNldE5ldyh0YXJn
ZXQsIG51bGxwdHIpOworICAgIH0KKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygi
XG4iKTsKKyAgICBjYWNoZWRSZWNvdmVyeS5jbGVhclRhcmdldHMoKTsKKyAgICBpZiAoIWNhY2hl
ZFJlY292ZXJ5LndhbnRlZEpTVmFsdWVSZWdzKCkgJiYgY2FjaGVkUmVjb3Zlcnkud2FudGVkRlBS
KCkgPT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgY2xlYXJDYWNoZWRSZWNvdmVyeShjYWNoZWRS
ZWNvdmVyeS5yZWNvdmVyeSgpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENhbGxG
cmFtZVNodWZmbGVyOjpwZXJmb3JtU2FmZVdyaXRlcygpCit7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGZpcnN0U2FmZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW5kIHsgbGFzdE5ldygpICsgMSB9Owor
ICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+IGZhaWx1cmVzOworCisgICAgLy8gRm9yIGFsbCBj
YWNoZWRSZWNvdmVyaWVzIHRoYXQgd3JpdGVzIHRvIHRoZSBzYWZlIHpvbmUsIGlmIGl0CisgICAg
Ly8gZG9lc24ndCBhbHNvIHdyaXRlIHRvIHRoZSBkYW5nZXIgem9uZSwgd2UgdHJ5IHRvIHBlcmZv
cm0KKyAgICAvLyB0aGUgd3JpdGVzLiBUaGlzIG1heSBmcmVlIHVwIGRhbmdlciBzbG90cywgc28g
d2UgaXRlcmF0ZQorICAgIC8vIGFnYWluIHVudGlsIGl0IGRvZXNuJ3QgaGFwcGVuIGFueW1vcmUu
CisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgZXZlbiB0aG91Z2ggd2UgaGF2ZSBhIHdoaWxlIGJs
b2NrLCB3ZSBsb29rIGF0CisgICAgLy8gZWFjaCBzbG90IG9mIHRoZSBuZXcgY2FsbCBmcmFtZSBh
dCBtb3N0IG9uY2Ugc2luY2UgaW4gZWFjaAorICAgIC8vIGl0ZXJhdGlvbiBiZXlvbmQgdGhlIGZp
cnN0LCB3ZSBvbmx5IGxvYWQgdXAgdGhlIHBvcnRpb24gb2YKKyAgICAvLyB0aGUgbmV3IGNhbGwg
ZnJhbWUgdGhhdCB3YXMgZGFuZ2Vyb3VzIGFuZCBiZWNhbWUgc2FmZSBkdWUKKyAgICAvLyB0byB0
aGUgcHJldmlvdXMgaXRlcmF0aW9uLgorICAgIGRvIHsKKyAgICAgICAgZmlyc3RTYWZlID0gZGFu
Z2VyRnJvbnRpZXIoKSArIDE7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0
YUxvZygiICBUcnlpbmcgc2FmZSB3cml0ZXMgKGJldHdlZW4gTkVXICIsIGZpcnN0U2FmZSwgIiBh
bmQgTkVXICIsIGVuZCAtIDEsICIpXG4iKTsKKyAgICAgICAgYm9vbCBkaWRQcm9ncmVzcyA9IGZh
bHNlOworICAgICAgICBmb3IgKFZpcnR1YWxSZWdpc3RlciByZWcgPSBmaXJzdFNhZmU7IHJlZyA8
IGVuZDsgcmVnICs9IDEpIHsKKyAgICAgICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNv
dmVyeSA9IGdldE5ldyhyZWcpOworICAgICAgICAgICAgaWYgKCFjYWNoZWRSZWNvdmVyeSkgewor
ICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCIgICArICIsIHJlZywgIiBpcyBPSy5cbiIpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFoYXNPbmx5U2FmZVdyaXRlcygqY2FjaGVk
UmVjb3ZlcnkpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgLSAiLCBjYWNoZWRSZWNvdmVyeS0+cmVjb3ZlcnkoKSwgIiB3
cml0ZXMgdG8gTkVXICIsIHJlZywKKyAgICAgICAgICAgICAgICAgICAgICAgICIgYnV0IGFsc28g
aGFzIGRhbmdlcm91cyB3cml0ZXMuXG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2FjaGVkUmVj
b3ZlcnktPndhbnRlZEpTVmFsdWVSZWdzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9z
ZSkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAtICIsIGNhY2hlZFJlY292ZXJ5
LT5yZWNvdmVyeSgpLCAiIHdyaXRlcyB0byBORVcgIiwgcmVnLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIiBidXQgaXMgYWxzbyBuZWVkZWQgaW4gcmVnaXN0ZXJzLlxuIik7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGNhY2hlZFJlY292ZXJ5LT53YW50ZWRGUFIoKSAhPSBJbnZhbGlkRlBSUmVnKSB7
CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZygiICAgLSAiLCBjYWNoZWRSZWNvdmVyeS0+cmVjb3ZlcnkoKSwgIiB3cml0ZXMgdG8gTkVX
ICIsIHJlZywKKyAgICAgICAgICAgICAgICAgICAgICAgICIgYnV0IGlzIGFsc28gbmVlZGVkIGlu
IGFuIEZQUi5cbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghdHJ5V3JpdGVzKCpjYWNoZWRSZWNv
dmVyeSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiICAgLSBVbmFibGUgdG8gd3JpdGUgdG8gTkVXICIsIHJlZywgIiBmcm9tICIs
IGNhY2hlZFJlY292ZXJ5LT5yZWNvdmVyeSgpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBmYWls
dXJlcy5hcHBlbmQocmVnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRpZFByb2dyZXNz
ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbmQgPSBmaXJzdFNhZmU7CisKKyAgICAgICAg
Ly8gSWYgd2UgaGF2ZSBjYWNoZWRSZWNvdmVyaWVzIHRoYXQgZmFpbGVkIHRvIHdyaXRlLCBpdCBp
cworICAgICAgICAvLyBiZWNhdXNlIHRoZXkgYXJlIG9uIHRoZSBzdGFjayBhbmQgd2UgZGlkbid0
IGhhdmUgZW5vdWdoCisgICAgICAgIC8vIHJlZ2lzdGVycyBhdmFpbGFibGUgYXQgdGhlIHRpbWUg
dG8gbG9hZCB0aGVtIGludG8uIElmCisgICAgICAgIC8vIHdlIGhhdmUgYSBmcmVlIHJlZ2lzdGVy
LCB3ZSBzaG91bGQgdHJ5IGFnYWluIGJlY2F1c2UgaXQKKyAgICAgICAgLy8gY291bGQgZnJlZSB1
cCBzb21lIGRhbmdlciBzbG90cy4KKyAgICAgICAgaWYgKGRpZFByb2dyZXNzICYmIGhhc0ZyZWVS
ZWdpc3RlcigpKSB7CisgICAgICAgICAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyPiBzdGlsbEZh
aWxpbmc7CisgICAgICAgICAgICBmb3IgKFZpcnR1YWxSZWdpc3RlciBmYWlsZWQgOiBmYWlsdXJl
cykgeworICAgICAgICAgICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSA9IGdl
dE5ldyhmYWlsZWQpOworICAgICAgICAgICAgICAgIC8vIEl0IGNvdWxkIGhhdmUgYmVlbiBoYW5k
bGVkIGxhdGVyIGlmIGl0IGhhZAorICAgICAgICAgICAgICAgIC8vIHNldmVyYWwgdGFyZ2V0cwor
ICAgICAgICAgICAgICAgIGlmICghY2FjaGVkUmVjb3ZlcnkpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgQVNTRVJUKGhhc09ubHlTYWZlV3JpdGVzKCpj
YWNoZWRSZWNvdmVyeSkKKyAgICAgICAgICAgICAgICAgICAgJiYgIWNhY2hlZFJlY292ZXJ5LT53
YW50ZWRKU1ZhbHVlUmVncygpCisgICAgICAgICAgICAgICAgICAgICYmIGNhY2hlZFJlY292ZXJ5
LT53YW50ZWRGUFIoKSA9PSBJbnZhbGlkRlBSUmVnKTsKKyAgICAgICAgICAgICAgICBpZiAoIXRy
eVdyaXRlcygqY2FjaGVkUmVjb3ZlcnkpKQorICAgICAgICAgICAgICAgICAgICBzdGlsbEZhaWxp
bmcuYXBwZW5kKGZhaWxlZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmYWlsdXJlcyA9
IFdURjo6bW92ZShzdGlsbEZhaWxpbmcpOworICAgICAgICB9CisgICAgICAgIGlmICh2ZXJib3Nl
ICYmIGZpcnN0U2FmZSAhPSBkYW5nZXJGcm9udGllcigpICsgMSkKKyAgICAgICAgICAgIGRhdGFM
b2coIiAgV2UgZnJlZWQgdXAgZGFuZ2VyIHNsb3RzIVxuIik7CisgICAgfSB3aGlsZSAoZmlyc3RT
YWZlICE9IGRhbmdlckZyb250aWVyKCkgKyAxKTsKKworICAgIHJldHVybiBmYWlsdXJlcy5pc0Vt
cHR5KCk7Cit9CisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OnByZXBhcmVBbnkoKQoreworICAg
IEFTU0VSVCghaXNVbmRlY2lkZWQoKSk7CisKKyAgICB1cGRhdGVEYW5nZXJGcm9udGllcigpOwor
CisgICAgLy8gRmlyc3QsIHdlIHRyeSB0byBzdG9yZSBhbnkgdmFsdWUgdGhhdCBnb2VzIGFib3Zl
IHRoZSBkYW5nZXIKKyAgICAvLyBmcm9udGllci4gVGhpcyB3aWxsIG5ldmVyIHVzZSBtb3JlIHJl
Z2lzdGVycyBzaW5jZSB3ZSBhcmUgb25seQorICAgIC8vIGxvYWRpbmcrc3RvcmluZyBpZiB3ZSBl
bnN1cmUgdGhhdCBhbnkgcmVnaXN0ZXIgdXNlZCBmb3IgdGhlIGxvYWQKKyAgICAvLyB3aWxsIGJl
IGZyZWVkIHVwIGFmdGVyIHRoZSBzdG9yZXMgKGkuZS4sIGFsbCBzdG9yZXMgYXJlIGFib3ZlCisg
ICAgLy8gdGhlIGRhbmdlciBmcm9udGllciwgYW5kIHRoZXJlIGlzIG5vIHdhbnRlZCByZWdpc3Rl
cikuCisgICAgcGVyZm9ybVNhZmVXcml0ZXMoKTsKKworICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdl
IGNvdWxkbid0IGhhdmUgbW9yZSBhdmFpbGFibGUgcmVnaXN0ZXJzIHRoYW4KKyAgICAvLyB3ZSBo
YXZlIHdpdGhvdXRoIHNwaWxsaW5nOiBhbGwgdmFsdWVzIGN1cnJlbnRseSBpbiByZWdpc3RlcnMK
KyAgICAvLyBlaXRoZXIgcmVxdWlyZSBhIHdyaXRlIHRvIHRoZSBkYW5nZXIgem9uZSwgb3IgaGF2
ZSBhIHdhbnRlZAorICAgIC8vIHJlZ2lzdGVyLCB3aGljaCBtZWFucyB0aGF0IGluIGFueSBjYXNl
IHRoZXkgd2lsbCBoYXZlIHRvIGdvCisgICAgLy8gdGhyb3VnaCByZWdpc3RlcnMgYWdhaW4uCisK
KyAgICAvLyBXZSBub3cgc2xvd2x5IGZyZWUgdXAgdGhlIGRhbmdlciB6b25lIGJ5IGZpcnN0IGxv
YWRpbmcgdGhlIG9sZAorICAgIC8vIHZhbHVlIG9uIHRoZSBkYW5nZXIgZnJvbnRpZXIsIHNwaWxs
aW5nIGFzIG1hbnkgcmVnaXN0ZXJzIGFzCisgICAgLy8gbmVlZGVkIHRvIGRvIHNvIGFuZCBlbnN1
cmluZyB0aGF0IHRoZSBjb3JyZXNwb25kaW5nIHNsb3QgaW4gdGhlCisgICAgLy8gbmV3IGZyYW1l
IGlzIG5vdyByZWFkeSB0byBiZSB3cml0dGVuLiBUaGVuLCB3ZSBzdG9yZSB0aGUgb2xkCisgICAg
Ly8gdmFsdWUgdG8gaXRzIHRhcmdldCBsb2NhdGlvbiBpZiBwb3NzaWJsZSAod2UgY291bGQgaGF2
ZSBmYWlsZWQKKyAgICAvLyB0byBsb2FkIGl0IHByZXZpb3VzbHkgZHVlIHRvIGhpZ2ggcHJlc3N1
cmUpLiBGaW5hbGx5LCB3ZSB3cml0ZQorICAgIC8vIHRvIGFueSBvZiB0aGUgbmV3bHkgc2FmZSBz
bG90cyB0aGF0IHdlIGNhbiwgd2hpY2ggY291bGQgZnJlZSB1cAorICAgIC8vIHJlZ2lzdGVycyAo
aGVuY2Ugd2h5IHdlIGRvIGl0IGVhZ2VybHkpLgorICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIHJl
ZyA9IGRhbmdlckZyb250aWVyKCk7IHJlZyA+PSBmaXJzdE5ldygpOyByZWcgLT0gMSkgeworICAg
ICAgICBpZiAocmVnID09IGRhbmdlckZyb250aWVyKCkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgTmV4dCBzbG90IChORVcgIiwgcmVnLCAi
KSBpcyB0aGUgZGFuZ2VyIGZyb250aWVyXG4iKTsKKyAgICAgICAgICAgIENhY2hlZFJlY292ZXJ5
KiBjYWNoZWRSZWNvdmVyeSB7IGdldE9sZChuZXdBc09sZChkYW5nZXJGcm9udGllcigpKSkgfTsK
KyAgICAgICAgICAgIEFTU0VSVChjYWNoZWRSZWNvdmVyeSk7CisgICAgICAgICAgICBlbnN1cmVM
b2FkKCpjYWNoZWRSZWNvdmVyeSk7CisgICAgICAgICAgICBlbWl0TG9hZCgqY2FjaGVkUmVjb3Zl
cnkpOworICAgICAgICAgICAgZW5zdXJlQm94KCpjYWNoZWRSZWNvdmVyeSk7CisgICAgICAgICAg
ICBlbWl0Qm94KCpjYWNoZWRSZWNvdmVyeSk7CisgICAgICAgICAgICBpZiAoaGFzT25seVNhZmVX
cml0ZXMoKmNhY2hlZFJlY292ZXJ5KSkKKyAgICAgICAgICAgICAgICB0cnlXcml0ZXMoKmNhY2hl
ZFJlY292ZXJ5KTsKKyAgICAgICAgfSBlbHNlIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0
YUxvZygiICBOZXh0IHNsb3QgaXMgTkVXICIsIHJlZywgIlxuIik7CisKKyAgICAgICAgQVNTRVJU
KCFpc0Rhbmdlck5ldyhyZWcpKTsKKyAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292
ZXJ5ID0gZ2V0TmV3KHJlZyk7CisgICAgICAgIC8vIFRoaXMgY291bGQgYmUgb25lIG9mIHRoZSBo
ZWFkZXIgc2xvdHMgd2UgZG9uJ3QgY2FyZSBhYm91dC4KKyAgICAgICAgaWYgKCFjYWNoZWRSZWNv
dmVyeSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxv
ZygiICAgKyAiLCByZWcsICIgaXMgT0tcbiIpOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoY2FuTG9hZEFuZEJveCgqY2FjaGVkUmVjb3ZlcnkpICYmIGhh
c09ubHlTYWZlV3JpdGVzKCpjYWNoZWRSZWNvdmVyeSkKKyAgICAgICAgICAgICYmICFjYWNoZWRS
ZWNvdmVyeS0+d2FudGVkSlNWYWx1ZVJlZ3MoKQorICAgICAgICAgICAgJiYgY2FjaGVkUmVjb3Zl
cnktPndhbnRlZEZQUigpID09IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgIGVtaXRMb2Fk
KCpjYWNoZWRSZWNvdmVyeSk7CisgICAgICAgICAgICBlbWl0Qm94KCpjYWNoZWRSZWNvdmVyeSk7
CisgICAgICAgICAgICBib29sIHdyaXRlc09LID0gdHJ5V3JpdGVzKCpjYWNoZWRSZWNvdmVyeSk7
CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHdyaXRlc09LLCB3cml0ZXNPSyk7CisgICAgICAg
IH0gZWxzZSBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgIC0gIiwgY2FjaGVk
UmVjb3ZlcnktPnJlY292ZXJ5KCksICIgY2FuJ3QgYmUgaGFuZGxlZCBqdXN0IHlldC5cbiIpOwor
ICAgIH0KKyAgICBBU1NFUlQoZGFuZ2VyRnJvbnRpZXIoKSA8IGZpcnN0TmV3KCkpOworCisgICAg
Ly8gTm93LCB0aGUgZGFuZ2VyIHpvbmUgaXMgZW1wdHksIGJ1dCB3ZSBzdGlsbCBoYXZlIGEgY291
cGxlIG9mCisgICAgLy8gdGhpbmdzIHRvIGRvOgorICAgIC8vCisgICAgLy8gMSkgVGhlcmUgY291
bGQgYmUgcmVtYWluaW5nIHNhZmUgd3JpdGVzIHRoYXQgZmFpbGVkIGVhcmxpZXIgZHVlCisgICAg
Ly8gICAgdG8gaGlnaCByZWdpc3RlciBwcmVzc3VyZSBhbmQgaGFkIG5vdGhpbmcgdG8gZG8gd2l0
aCB0aGUKKyAgICAvLyAgICBkYW5nZXIgem9uZSB3aGF0c29ldmVyLgorICAgIC8vCisgICAgLy8g
MikgU29tZSB3YW50ZWQgcmVnaXN0ZXJzIGNvdWxkIGhhdmUgdG8gYmUgbG9hZGVkICh0aGlzIGNv
dWxkCisgICAgLy8gICAgaGFwcGVuIGVpdGhlciB3aGVuIG1ha2luZyBhIGNhbGwgdG8gYSBuZXcg
ZnVuY3Rpb24gd2l0aCBhCisgICAgLy8gICAgbG93ZXIgbnVtYmVyIG9mIGFyZ3VtZW50cyAtIHNp
bmNlIGFib3ZlIGhlcmUsIHdlIG9ubHkgbG9hZAorICAgIC8vICAgIHdhbnRlZCByZWdpc3RlcnMg
d2hlbiB0aGV5IGFyZSBhdCB0aGUgZGFuZ2VyIGZyb250aWVyIC0sIG9yCisgICAgLy8gICAgaWYg
YSB3YW50ZWQgcmVnaXN0ZXIgZ290IHNwaWxsZWQpLgorICAgIC8vCisgICAgLy8gMykgU29tZSB3
YW50ZWQgcmVnaXN0ZXJzIGNvdWxkIGhhdmUgYmVlbiBsb2FkZWQgaW4gdGhlIHdyb25nCisgICAg
Ly8gICAgcmVnaXN0ZXJzCisgICAgLy8KKyAgICAvLyA0KSBXZSBoYXZlIHRvIHRha2UgY2FyZSBv
ZiBzb21lIGJvb2trZWVwaW5nIC0gbmFtZWx5LCBzdG9yaW5nCisgICAgLy8gICAgdGhlIGFyZ3Vt
ZW50IGNvdW50IGFuZCB1cGRhdGluZyB0aGUgc3RhY2sgcG9pbnRlci4KKworICAgIC8vIEF0IHRo
aXMgcG9pbnQsIHdlIG11c3QgaGF2ZSBlbm91Z2ggcmVnaXN0ZXJzIGF2YWlsYWJsZSBmb3IKKyAg
ICAvLyBoYW5kbGluZyAxKS4gTm9uZSBvZiB0aGUgbG9hZHMgY2FuIGZhaWwgYmVjYXVzZSB3ZSBo
YXZlIGJlZW4KKyAgICAvLyBlYWdlcmx5IGZyZWVpbmcgdXAgcmVnaXN0ZXJzIGluIGFsbCB0aGUg
cHJldmlvdXMgcGhhc2VzIC0gc28KKyAgICAvLyB0aGUgb25seSB2YWx1ZXMgdGhhdCBhcmUgaW4g
cmVnaXN0ZXJzIGF0IHRoaXMgcG9pbnQgbXVzdCBoYXZlCisgICAgLy8gd2FudGVkIHJlZ2lzdGVy
cy4KKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiICBEYW5nZXIgem9uZSBpcyBj
bGVhciwgcGVyZm9ybWluZyByZW1haW5pbmcgd3JpdGVzLlxuIik7CisgICAgZm9yIChWaXJ0dWFs
UmVnaXN0ZXIgcmVnID0gZmlyc3ROZXcoKTsgcmVnIDw9IGxhc3ROZXcoKTsgcmVnICs9IDEpIHsK
KyAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5IHsgZ2V0TmV3KHJlZykgfTsK
KyAgICAgICAgaWYgKCFjYWNoZWRSZWNvdmVyeSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIGVtaXRMb2FkKCpjYWNoZWRSZWNvdmVyeSk7CisgICAgICAgIGVtaXRCb3goKmNhY2hl
ZFJlY292ZXJ5KTsKKyAgICAgICAgYm9vbCB3cml0ZXNPSyA9IHRyeVdyaXRlcygqY2FjaGVkUmVj
b3ZlcnkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHdyaXRlc09LLCB3cml0ZXNPSyk7CisgICAg
fQorCisgICAgLy8gSGFuZGxlIDIpIGJ5IGxvYWRpbmcgYWxsIHJlZ2lzdGVycy4gV2UgZG9uJ3Qg
aGF2ZSB0byBkbyBhbnkKKyAgICAvLyB3cml0ZXMsIHNpbmNlIHRoZXkgaGF2ZSBiZWVuIHRha2Vu
IGNhcmUgb2YgYWJvdmUuCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIiAgTG9h
ZGluZyB3YW50ZWQgcmVnaXN0ZXJzIGludG8gcmVnaXN0ZXJzXG4iKTsKKyAgICBmb3IgKFJlZyBy
ZWcgPSBSZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVnLm5leHQoKSkg
eworICAgICAgICBDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkgeyBtX25ld1JlZ2lzdGVy
c1tyZWddIH07CisgICAgICAgIGlmICghY2FjaGVkUmVjb3ZlcnkpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICBlbWl0TG9hZCgqY2FjaGVkUmVjb3ZlcnkpOworICAgICAgICBlbWl0
Qm94KCpjYWNoZWRSZWNvdmVyeSk7CisgICAgICAgIEFTU0VSVChjYWNoZWRSZWNvdmVyeS0+dGFy
Z2V0cygpLmlzRW1wdHkoKSk7CisgICAgfQorCisgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgaGF2
ZSByZWFkIGV2ZXJ5dGhpbmcgd2UgY2FyZWQgYWJvdXQgZnJvbSB0aGUKKyAgICAvLyBzdGFjaywg
YW5kIHdyaXR0ZW4gZXZlcnl0aGluZyB3ZSBoYWQgdG8gdG8gdGhlIHN0YWNrLgorICAgIGlmICh2
ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCIgIENhbGxlZSBmcmFtZSBpcyBmdWxseSBzZXQgdXBc
biIpOworICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgIGZvciAoVmlydHVhbFJl
Z2lzdGVyIHJlZyA9IGZpcnN0TmV3KCk7IHJlZyA8PSBsYXN0TmV3KCk7IHJlZyArPSAxKQorICAg
ICAgICAgICAgQVNTRVJUX1VOVVNFRChyZWcsICFnZXROZXcocmVnKSk7CisKKyAgICAgICAgZm9y
IChDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkgOiBtX2NhY2hlZFJlY292ZXJpZXMpIHsK
KyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoY2FjaGVkUmVjb3ZlcnksIGNhY2hlZFJlY292ZXJ5
LT50YXJnZXRzKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghY2FjaGVkUmVjb3Zl
cnktPnJlY292ZXJ5KCkuaXNJbkpTU3RhY2soKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv
LyBXZSBuZWVkIHRvIGhhbmRsZSA0KSBmaXJzdCBiZWNhdXNlIGl0IGltcGxpZXMgcmVsZWFzaW5n
CisgICAgLy8gbV9uZXdGcmFtZUJhc2UsIHdoaWNoIGNvdWxkIGJlIGEgd2FudGVkIHJlZ2lzdGVy
LgorICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCIgICAqIFN0b3JpbmcgdGhlIGFy
Z3VtZW50IGNvdW50IGludG8gIiwgVmlydHVhbFJlZ2lzdGVyIHsgSlNTdGFjazo6QXJndW1lbnRD
b3VudCB9LCAiXG4iKTsKKyAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoMCksCisgICAgICAgIGFkZHJlc3NGb3JOZXcoVmlydHVhbFJlZ2lzdGVyIHsgSlNTdGFj
azo6QXJndW1lbnRDb3VudCB9KS53aXRoT2Zmc2V0KFRhZ09mZnNldCkpOworICAgIG1faml0LnN0
b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihhcmdDb3VudCgpKSwKKyAgICAgICAg
YWRkcmVzc0Zvck5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyBKU1N0YWNrOjpBcmd1bWVudENvdW50IH0p
LndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCkpOworCisgICAgaWYgKCFpc1Nsb3dQYXRoKCkpIHsK
KyAgICAgICAgQVNTRVJUKG1fbmV3RnJhbWVCYXNlICE9IE1hY3JvQXNzZW1ibGVyOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxv
ZygiICBSZWxlYXNpbmcgdGhlIG5ldyBmcmFtZSBiYXNlIHBvaW50ZXJcbiIpOworICAgICAgICBt
X2ppdC5tb3ZlKG1fbmV3RnJhbWVCYXNlLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworICAgICAgICByZWxlYXNlR1BSKG1fbmV3RnJhbWVCYXNlKTsKKyAgICB9CisKKyAg
ICAvLyBGaW5hbGx5IHdlIGhhbmRsZSAzKQorICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRh
TG9nKCIgIEVuc3VyaW5nIHdhbnRlZCByZWdpc3RlcnMgYXJlIGluIHRoZSByaWdodCByZWdpc3Rl
clxuIik7CisgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0
KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKKyAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJl
Y292ZXJ5IHsgbV9uZXdSZWdpc3RlcnNbcmVnXSB9OworICAgICAgICBpZiAoIWNhY2hlZFJlY292
ZXJ5KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZW1pdERpc3BsYWNlKCpjYWNo
ZWRSZWNvdmVyeSk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNo
dWZmbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJh
bWVTaHVmZmxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
YWxsRnJhbWVTaHVmZmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODI1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQ2FsbEZy
YW1lU2h1ZmZsZXJfaAorI2RlZmluZSBDYWxsRnJhbWVTaHVmZmxlcl9oCisKKyNpZiBFTkFCTEUo
SklUKQorCisjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaCIKKyNpbmNsdWRlICJNYWNy
b0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisjaW5jbHVkZSAiU3RhY2tB
bGlnbm1lbnQuaCIKKyNpbmNsdWRlICJWYWx1ZVJlY292ZXJ5LmgiCisjaW5jbHVkZSAiVmlydHVh
bFJlZ2lzdGVyLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsK
KworLy8gQSBDYWNoZWRSZWNvdmVyeSBpcyBhIHdyYXBwZXIgYXJvdW5kIGEgVmFsdWVSZWNvdmVy
eSB0aGF0IHJlY29yZHMgd2hlcmUgc2FpZAorLy8gdmFsdWUgc2hvdWxkIGdvIG9uIHRoZSBzdGFj
ayBhbmQvb3IgaW4gcmVnaXN0ZXJzLiBXaGVuZXZlciB3ZSBwZXJmb3JtIGFuCisvLyBvcGVyYXRp
b24gY2hhbmdpbmcgdGhlIFZhbHVlUmVjb3ZlcnksIHdlIHVwZGF0ZSB0aGUgQ2FjaGVkUmVjb3Zl
cnkncyBtZW1iZXIKKy8vIGluIHBsYWNlLgorY2xhc3MgQ2FjaGVkUmVjb3ZlcnkgeworcHVibGlj
OgorICAgIENhY2hlZFJlY292ZXJ5KFZhbHVlUmVjb3ZlcnkgcmVjb3ZlcnkpCisgICAgICAgIDog
bV9yZWNvdmVyeSB7IHJlY292ZXJ5IH0KKyAgICB7CisgICAgfQorCisgICAgQ2FjaGVkUmVjb3Zl
cnkoQ2FjaGVkUmVjb3ZlcnkmKSA9IGRlbGV0ZTsKKyAgICBDYWNoZWRSZWNvdmVyeShDYWNoZWRS
ZWNvdmVyeSYmKSA9IGRlbGV0ZTsKKyAgICBDYWNoZWRSZWNvdmVyeSYgb3BlcmF0b3I9KENhY2hl
ZFJlY292ZXJ5JikgPSBkZWxldGU7CisgICAgQ2FjaGVkUmVjb3ZlcnkmIG9wZXJhdG9yPShDYWNo
ZWRSZWNvdmVyeSYmKSA9IGRlbGV0ZTsKKworICAgIGNvbnN0IFZlY3RvcjxWaXJ0dWFsUmVnaXN0
ZXIsIDE+JiB0YXJnZXRzKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRzOyB9CisKKyAgICB2b2lk
IGFkZFRhcmdldChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
dGFyZ2V0cy5pc0VtcHR5KCkgfHwgbV90YXJnZXRzLmxhc3QoKSA8IHJlZyk7CisgICAgICAgIG1f
dGFyZ2V0cy5hcHBlbmQocmVnKTsKKyAgICB9CisKKyAgICB2b2lkIHJlbW92ZVRhcmdldChWaXJ0
dWFsUmVnaXN0ZXIgcmVnKQorICAgIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyZWcsIG1fdGFy
Z2V0cy5sYXN0KCkgPT0gcmVnKTsKKyAgICAgICAgbV90YXJnZXRzLnNocmluayhtX3RhcmdldHMu
c2l6ZSgpIC0gMSk7CisgICAgfQorCisgICAgdm9pZCBjbGVhclRhcmdldHMoKQorICAgIHsKKyAg
ICAgICAgbV90YXJnZXRzLmNsZWFyKCk7CisgICAgfQorCisgICAgdm9pZCBzZXRXYW50ZWRKU1Zh
bHVlUmVncyhKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncykKKyAgICB7CisgICAgICAgIEFTU0VSVCht
X3dhbnRlZEZQUiA9PSBJbnZhbGlkRlBSUmVnKTsKKyAgICAgICAgbV93YW50ZWRKU1ZhbHVlUmVn
cyA9IGpzVmFsdWVSZWdzOworICAgIH0KKworICAgIHZvaWQgc2V0V2FudGVkRlBSKEZQUlJlZyBm
cHIpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fd2FudGVkSlNWYWx1ZVJlZ3MpOworICAgICAg
ICBtX3dhbnRlZEZQUiA9IGZwcjsKKyAgICB9CisKKyAgICAvLyBEZXRlcm1pbmUgd2hldGhlciBj
b252ZXJ0aW5nIHRoaXMgcmVjb3ZlcnkgaW50byBhIEpTVmFsdWUgd2lsbAorICAgIC8vIHJlcXVp
cmUgYWRkaXRpb25hbCBHUFJzIGFuZC9vciBGUFJzLgorICAgIC8vIFRoaXMgaXMgZ3VhcmFudGVl
ZCB0byBvbmx5IGRlcGVuZCBvbiB0aGUgRGF0YUZvcm1hdCwgYW5kIHRoZQorICAgIC8vIHJlc3Vs
dCBvZiB0aGVzZSBjYWxscyB3aWxsIHN0YXkgdmFsaWQgYWZ0ZXIgbG9hZHMgYW5kL29yIHN0b3Jl
cy4KKyAgICBib29sIGJveGluZ1JlcXVpcmVzR1BSKCkgY29uc3QKKyAgICB7CisjaWYgVVNFKEpT
VkFMVUU2NCkKKyAgICAgICAgcmV0dXJuIHJlY292ZXJ5KCkuZGF0YUZvcm1hdCgpID09IERhdGFG
b3JtYXREb3VibGU7CisjZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAgICB9
CisgICAgYm9vbCBib3hpbmdSZXF1aXJlc0ZQUigpIGNvbnN0CisgICAgeworI2lmIFVTRShKU1ZB
TFVFNjQpCisgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkoKS5kYXRhRm9ybWF0KCkpIHsKKyAgICAg
ICAgY2FzZSBEYXRhRm9ybWF0SW50NTI6CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdFN0cmljdElu
dDUyOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworI2VuZGlmCisgICAgfQorICAgIAorICAgIC8vIFRoaXMgaXMgdXNlZCB0byBkZXRlcm1p
bmUgd2hhdCBraW5kIG9mIHJlZ2lzdGVyIHdlIG5lZWQgdG8gYmUKKyAgICAvLyBhYmxlIHRvIGxv
YWQgYSByZWNvdmVyeS4gV2Ugb25seSB1c2UgaXQgd2hlbiBhIGRpcmVjdCBsb2FkIGlzCisgICAg
Ly8gY3VycmVudGx5IGltcG9zc2libGUsIHRvIGRldGVybWluZSB3aGV0aGVyIHdlIHNob3VsZCBz
cGlsbCBhCisgICAgLy8gR1BSIG9yIGFuIEZQUiBmb3IgbG9hZGluZyB0aGlzIHZhbHVlLgorICAg
IGJvb2wgbG9hZHNJbnRvR1BSKCkgY29uc3Q7CisgICAgYm9vbCBsb2Fkc0ludG9GUFIoKSBjb25z
dDsKKworICAgIFZhbHVlUmVjb3ZlcnkgcmVjb3ZlcnkoKSBjb25zdCB7IHJldHVybiBtX3JlY292
ZXJ5OyB9CisKKyAgICB2b2lkIHNldFJlY292ZXJ5KFZhbHVlUmVjb3ZlcnkgcmVjb3ZlcnkpIHsg
bV9yZWNvdmVyeSA9IHJlY292ZXJ5OyB9CisKKyAgICBKU1ZhbHVlUmVncyB3YW50ZWRKU1ZhbHVl
UmVncygpIGNvbnN0IHsgcmV0dXJuIG1fd2FudGVkSlNWYWx1ZVJlZ3M7IH0KKworICAgIEZQUlJl
ZyB3YW50ZWRGUFIoKSBjb25zdCB7IHJldHVybiBtX3dhbnRlZEZQUjsgfQorcHJpdmF0ZToKKyAg
ICBWYWx1ZVJlY292ZXJ5IG1fcmVjb3Zlcnk7CisgICAgSlNWYWx1ZVJlZ3MgbV93YW50ZWRKU1Zh
bHVlUmVnczsKKyAgICBGUFJSZWcgbV93YW50ZWRGUFIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAg
VmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgMT4gbV90YXJnZXRzOworfTsKKworY2xhc3MgQ2FsbEZy
YW1lU2h1ZmZsZXIgeworcHVibGljOgorICAgIENhbGxGcmFtZVNodWZmbGVyKENDYWxsSGVscGVy
cyYsIGNvbnN0IENhbGxGcmFtZVNodWZmbGVEYXRhJik7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKworICAgIC8vIEFueSByZWdpc3RlciB0aGF0IGhhcyBiZWVuIGxvY2tl
ZCBvciBhY3F1aXJlZCBtdXN0IGJlIHJlbGVhc2VkCisgICAgLy8gYmVmb3JlIGNhbGxpbmcgcHJl
cGFyZUZvclRhaWxDYWxsKCkgb3IgcHJlcGFyZUZvclNsb3dQYXRoKCkuCisgICAgdm9pZCBsb2Nr
R1BSKEdQUlJlZyBncHIpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fbG9ja2VkUmVnaXN0ZXJz
LmdldChncHIpKTsKKyAgICAgICAgbV9sb2NrZWRSZWdpc3RlcnMuc2V0KGdwcik7CisgICAgICAg
IGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICAgKiBMb2NraW5nICIsIGdwciwg
IlxuIik7CisgICAgfQorCisgICAgR1BSUmVnIGFjcXVpcmVHUFIoKQorICAgIHsKKyAgICAgICAg
ZW5zdXJlR1BSKCk7CisgICAgICAgIEdQUlJlZyBncHIgeyBnZXRGcmVlR1BSKCkgfTsKKyAgICAg
ICAgQVNTRVJUKCFtX3JlZ2lzdGVyc1tncHJdKTsKKyAgICAgICAgbG9ja0dQUihncHIpOworICAg
ICAgICByZXR1cm4gZ3ByOworICAgIH0KKworICAgIHZvaWQgcmVsZWFzZUdQUihHUFJSZWcgZ3By
KQorICAgIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgIGlmIChtX2xvY2tl
ZFJlZ2lzdGVycy5nZXQoZ3ByKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAqIFJlbGVh
c2luZyAiLCBncHIsICJcbiIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRh
dGFMb2coIiAgICogIiwgZ3ByLCAiIHdhcyBub3QgbG9ja2VkXG4iKTsKKyAgICAgICAgfQorICAg
ICAgICBtX2xvY2tlZFJlZ2lzdGVycy5jbGVhcihncHIpOworICAgIH0KKworICAgIC8vIFlvdSBj
YW4gb25seSB0YWtlIGEgc25hcHNob3QgaWYgdGhlIHJlY292ZXJ5IGhhcyBub3Qgc3RhcnRlZAor
ICAgIC8vIHlldC4gVGhlIG9ubHkgb3BlcmF0aW9ucyB0aGF0IGFyZSB2YWxpZCBiZWZvcmUgdGFr
aW5nIGEKKyAgICAvLyBzbmFwc2hvdCBhcmUgbG9ja0dQUigpLCBhY3F1aXJlR1BSKCkgYW5kIHJl
bGVhc2VHUFIoKS4KKyAgICAvLworICAgIC8vIExvY2tpbmcgc3RhdHVzIGlzICpOT1QqIHByZXNl
cnZlZCBieSB0aGUgc25hcHNob3Q6IGl0IG9ubHkKKyAgICAvLyBjb250YWlucyBpbmZvcm1hdGlv
biBhYm91dCB3aGVyZSB0aGUKKyAgICAvLyBhcmd1bWVudHMvY2FsbGVlL2NhbGxlZS1zYXZlIHJl
Z2lzdGVycyBhcmUgYnkgdGFraW5nIGludG8KKyAgICAvLyBhY2NvdW50IGFueSBzcGlsbGluZyB0
aGF0IGFjcXVpcmVHUFIoKSBjb3VsZCBoYXZlIGRvbmUuCisgICAgQ2FsbEZyYW1lU2h1ZmZsZURh
dGEgc25hcHNob3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzVW5kZWNpZGVkKCkp
OworCisgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIGRhdGE7CisgICAgICAgIGRhdGEubnVt
TG9jYWxzID0gbnVtTG9jYWxzKCk7CisgICAgICAgIGRhdGEuY2FsbGVlID0gZ2V0TmV3KFZpcnR1
YWxSZWdpc3RlciB7IEpTU3RhY2s6OkNhbGxlZSB9KS0+cmVjb3ZlcnkoKTsKKyAgICAgICAgZGF0
YS5hcmdzLnJlc2l6ZShhcmdDb3VudCgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBhcmdDb3VudCgpOyArK2kpCisgICAgICAgICAgICBkYXRhLmFyZ3NbaV0gPSBnZXROZXcodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpLT5yZWNvdmVyeSgpOworICAgICAgICBmb3IgKFJl
ZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVnLm5leHQo
KSkgeworICAgICAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5IHsgbV9uZXdS
ZWdpc3RlcnNbcmVnXSB9OworICAgICAgICAgICAgaWYgKCFjYWNoZWRSZWNvdmVyeSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBk
YXRhLnJlZ2lzdGVyc1tyZWddID0gY2FjaGVkUmVjb3ZlcnktPnJlY292ZXJ5KCk7CisjZWxzZQor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorICAgICAg
ICB9CisgICAgICAgIHJldHVybiBXVEY6Om1vdmUoZGF0YSk7CisgICAgfQorCisgICAgLy8gQXNr
IHRoZSBzaHVmZmxlciB0byBwdXQgdGhlIGNhbGxlZSBpbnRvIHNvbWUgcmVnaXN0ZXJzIG9uY2Ug
dGhlCisgICAgLy8gc2h1ZmZsaW5nIGlzIGRvbmUuIFlvdSBzaG91bGQgY2FsbCB0aGlzIGJlZm9y
ZSBhbnkgb2YgdGhlCisgICAgLy8gcHJlcGFyZSgpIG1ldGhvZHMsIGFuZCBtdXN0IG5vdCB0YWtl
IGEgc25hcHNob3QgYWZ0ZXJ3YXJkcywgYXMKKyAgICAvLyB0aGlzIHdvdWxkIGNyYXNoIDMyYml0
cyBwbGF0Zm9ybXMuCisgICAgdm9pZCBzZXRDYWxsZWVKU1ZhbHVlUmVncyhKU1ZhbHVlUmVncyBq
c1ZhbHVlUmVncykKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1VuZGVjaWRlZCgpKTsKKyAgICAg
ICAgQVNTRVJUKCFnZXROZXcoanNWYWx1ZVJlZ3MpKTsKKyAgICAgICAgQ2FjaGVkUmVjb3Zlcnkq
IGNhY2hlZFJlY292ZXJ5IHsgZ2V0TmV3KFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpDYWxsZWUp
KSB9OworICAgICAgICBBU1NFUlQoY2FjaGVkUmVjb3ZlcnkpOworICAgICAgICBhZGROZXcoanNW
YWx1ZVJlZ3MsIGNhY2hlZFJlY292ZXJ5LT5yZWNvdmVyeSgpKTsKKyAgICB9CisKKyAgICAvLyBB
c2sgdGhlIHN1aGZmbGVyIHRvIGFzc3VtZSB0aGUgY2FsbGVlIGhhcyBhbHJlYWR5IGJlIGNoZWNr
ZWQgdG8KKyAgICAvLyBiZSBhIGNlbGwuIFRoaXMgaXMgYSBuby1vcCBvbiA2NGJpdCBwbGF0Zm9y
bXMsIGJ1dCBhbGxvd3MgdG8KKyAgICAvLyBmcmVlIHVwIGEgR1BSIG9uIDMyYml0IHBsYXRmb3Jt
cy4KKyAgICAvLyBZb3Ugb2J2aW91c2x5IG11c3QgaGF2ZSBlbnN1cmVkIHRoYXQgdGhpcyBpcyB0
aGUgY2FzZSBiZWZvcmUKKyAgICAvLyBydW5uaW5nIGFueSBvZiB0aGUgcHJlcGFyZSBtZXRob2Rz
LgorICAgIHZvaWQgYXNzdW1lQ2FsbGVlSXNDZWxsKCkKKyAgICB7CisjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKKyAgICAgICAgQ2FjaGVkUmVjb3ZlcnkmIGNhbGxlZUNhY2hlZFJlY292ZXJ5IHsgKmdl
dE5ldyhWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6Q2FsbGVlKSkgfTsKKyAgICAgICAgc3dpdGNo
IChjYWxsZWVDYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLnRlY2huaXF1ZSgpKSB7CisgICAgICAg
IGNhc2UgSW5QYWlyOgorICAgICAgICAgICAgdXBkYXRlUmVjb3ZlcnkoCisgICAgICAgICAgICAg
ICAgY2FsbGVlQ2FjaGVkUmVjb3ZlcnksCisgICAgICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6
aW5HUFIoCisgICAgICAgICAgICAgICAgICAgIGNhbGxlZUNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5
KCkucGF5bG9hZEdQUigpLAorICAgICAgICAgICAgICAgICAgICBEYXRhRm9ybWF0Q2VsbCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgorICAg
ICAgICAgICAgdXBkYXRlUmVjb3ZlcnkoCisgICAgICAgICAgICAgICAgY2FsbGVlQ2FjaGVkUmVj
b3ZlcnksCisgICAgICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNr
KAorICAgICAgICAgICAgICAgICAgICBjYWxsZWVDYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLnZp
cnR1YWxSZWdpc3RlcigpLAorICAgICAgICAgICAgICAgICAgICBEYXRhRm9ybWF0Q2VsbCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5GUFI6CisgICAgICAgIGNhc2UgVW5i
b3hlZENlbGxJbkdQUjoKKyAgICAgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5KU1N0YWNrOgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29uc3RhbnQ6CisgICAgICAgICAgICBBU1NF
UlQoY2FsbGVlQ2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5jb25zdGFudCgpLmlzQ2VsbCgpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisj
ZW5kaWYKKyAgICB9CisKKyAgICAvLyBUaGlzIHdpbGwgZW1pdCBjb2RlIHRvIGJ1aWxkIHRoZSBu
ZXcgZnJhbWUgb3ZlciB0aGUgb2xkIG9uZS4KKyAgICB2b2lkIHByZXBhcmVGb3JUYWlsQ2FsbCgp
OworCisgICAgLy8gVGhpcyB3aWxsIGVtaXQgY29kZSB0byBidWlsZCB0aGUgbmV3IGZyYW1lIGFz
IGlmIHBlcmZvcm1pbmcgYQorICAgIC8vIHJlZ3VsYXIgY2FsbC4gSG93ZXZlciwgdGhlIGNhbGxl
ZSBzYXZlIHJlZ2lzdGVycyB3aWxsIGJlCisgICAgLy8gcmVzdG9yZWQsIGFuZCBhbnkgbG9jYWxz
IChub3QgdGhlIGhlYWRlciBvciBhcmd1bWVudHMpIG9mIHRoZQorICAgIC8vIGN1cnJlbnQgZnJh
bWUgY2FuIGJlIG92ZXJ3cml0dGVuLgorICAgIC8vCisgICAgLy8gQSBmcmFtZSBidWlsdCB1c2lu
ZyBwcmVwYXJlRm9yU2xvd1BhdGgoKSBzaG91bGQgYmUgdXNlZCBlaXRoZXIKKyAgICAvLyB0byB0
aHJvdyBhbiBleGNlcHRpb24gaW4sIG9yIGRlc3Ryb3llZCB1c2luZworICAgIC8vIENDYWxsSGVs
cGVyczo6cHJlcGFyZUZvclRhaWxDYWxsU2xvdygpIGZvbGxvd2VkIGJ5IGEgdGFpbCBjYWxsLgor
ICAgIHZvaWQgcHJlcGFyZUZvclNsb3dQYXRoKCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGNv
bnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCisgICAgQ0NhbGxIZWxwZXJzJiBtX2ppdDsKKwor
ICAgIHZvaWQgcHJlcGFyZUFueSgpOworCisgICAgdm9pZCBzcGlsbChDYWNoZWRSZWNvdmVyeSYp
OworCisgICAgLy8gImJveCIgaXMgYXJndWFibHkgYSBiYWQgbmFtZSBoZXJlLiBUaGUgbWVhbmlu
ZyBpcyB0aGF0IGFmdGVyCisgICAgLy8gY2FsbGluZyBlbWl0Qm94KCksIHlvdXIgZW5zdXJlIHRo
YXQgc3Vic2VxdWVudGx5IGNhbGxpbmcKKyAgICAvLyBlbWl0U3RvcmUoKSB3aWxsIGJlIGFibGUg
dG8gc3RvcmUgdGhlIHZhbHVlIHdpdGhvdXQgYWRkaXRpb25hbAorICAgIC8vIHRyYW5zZm9ybWF0
aW9uLiBJbiBwYXJ0aWN1bGFyLCB0aGlzIGlzIGEgbm8tb3AgZm9yIGNvbnN0YW50cywKKyAgICAv
LyBhbmQgaXMgYSBjb21wbGV0ZSBuby1vcCBvbiAzMmJpdHMgc2luY2UgYW55IHVuYm94ZWQgdmFs
dWUgY2FuCisgICAgLy8gc3RpbGwgYmUgc3RvcmVkIGJ5IHN0b3JpbmcgdGhlIHBheWxvYWQgYW5k
IGEgc3RhdGljYWxseSBrbm93bgorICAgIC8vIHRhZy4KKyAgICB2b2lkIGVtaXRCb3goQ2FjaGVk
UmVjb3ZlcnkmKTsKKworICAgIGJvb2wgY2FuQm94KENhY2hlZFJlY292ZXJ5JiBjYWNoZWRSZWNv
dmVyeSkKKyAgICB7CisgICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS5ib3hpbmdSZXF1aXJlc0dQ
UigpICYmIGdldEZyZWVHUFIoKSA9PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS5ib3hpbmdSZXF1aXJlc0ZQUigp
ICYmIGdldEZyZWVGUFIoKSA9PSBJbnZhbGlkRlBSUmVnKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZvaWQgZW5zdXJlQm94
KENhY2hlZFJlY292ZXJ5JiBjYWNoZWRSZWNvdmVyeSkKKyAgICB7CisgICAgICAgIGlmIChjYW5C
b3goY2FjaGVkUmVjb3ZlcnkpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChj
YWNoZWRSZWNvdmVyeS5ib3hpbmdSZXF1aXJlc0dQUigpKQorICAgICAgICAgICAgZW5zdXJlR1BS
KCk7CisKKyAgICAgICAgaWYgKGNhY2hlZFJlY292ZXJ5LmJveGluZ1JlcXVpcmVzRlBSKCkpCisg
ICAgICAgICAgICBlbnN1cmVGUFIoKTsKKyAgICB9CisKKyAgICB2b2lkIGVtaXRMb2FkKENhY2hl
ZFJlY292ZXJ5Jik7CisKKyAgICBib29sIGNhbkxvYWQoQ2FjaGVkUmVjb3ZlcnkmKTsKKworICAg
IHZvaWQgZW5zdXJlTG9hZChDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3ZlcnkpCisgICAgewor
ICAgICAgICBpZiAoY2FuTG9hZChjYWNoZWRSZWNvdmVyeSkpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgQVNTRVJUKGNhY2hlZFJlY292ZXJ5LmxvYWRzSW50b0dQUigpIHx8IGNhY2hl
ZFJlY292ZXJ5LmxvYWRzSW50b0ZQUigpKTsKKworICAgICAgICBpZiAoY2FjaGVkUmVjb3Zlcnku
bG9hZHNJbnRvRlBSKCkpIHsKKyAgICAgICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS5sb2Fkc0lu
dG9HUFIoKSkKKyAgICAgICAgICAgICAgICBlbnN1cmVSZWdpc3RlcigpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIGVuc3VyZUZQUigpOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIGVuc3VyZUdQUigpOworICAgIH0KKworICAgIGJvb2wgY2FuTG9hZEFuZEJveChDYWNo
ZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3ZlcnkpCisgICAgeworICAgICAgICAvLyBXZSBkb24ndCBo
YXZlIGludGVyZmVyaW5nIGxvYWRzICYgYm94ZXMKKyAgICAgICAgQVNTRVJUKCFjYWNoZWRSZWNv
dmVyeS5sb2Fkc0ludG9GUFIoKSB8fCAhY2FjaGVkUmVjb3ZlcnkuYm94aW5nUmVxdWlyZXNGUFIo
KSk7CisgICAgICAgIEFTU0VSVCghY2FjaGVkUmVjb3ZlcnkubG9hZHNJbnRvR1BSKCkgfHwgIWNh
Y2hlZFJlY292ZXJ5LmJveGluZ1JlcXVpcmVzR1BSKCkpOworCisgICAgICAgIHJldHVybiBjYW5M
b2FkKGNhY2hlZFJlY292ZXJ5KSAmJiBjYW5Cb3goY2FjaGVkUmVjb3ZlcnkpOworICAgIH0KKwor
ICAgIERhdGFGb3JtYXQgZW1pdFN0b3JlKENhY2hlZFJlY292ZXJ5JiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MpOworCisgICAgdm9pZCBlbWl0RGlzcGxhY2UoQ2FjaGVkUmVjb3ZlcnkmKTsKKwor
ICAgIHZvaWQgZW1pdERlbHRhQ2hlY2soKTsKKworICAgIEJhZzxDYWNoZWRSZWNvdmVyeT4gbV9j
YWNoZWRSZWNvdmVyaWVzOworCisgICAgdm9pZCB1cGRhdGVSZWNvdmVyeShDYWNoZWRSZWNvdmVy
eSYgY2FjaGVkUmVjb3ZlcnksIFZhbHVlUmVjb3ZlcnkgcmVjb3ZlcnkpCisgICAgeworICAgICAg
ICBjbGVhckNhY2hlZFJlY292ZXJ5KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkpOworICAgICAg
ICBjYWNoZWRSZWNvdmVyeS5zZXRSZWNvdmVyeShyZWNvdmVyeSk7CisgICAgICAgIHNldENhY2hl
ZFJlY292ZXJ5KHJlY292ZXJ5LCAmY2FjaGVkUmVjb3ZlcnkpOworICAgIH0KKworICAgIENhY2hl
ZFJlY292ZXJ5KiBnZXRDYWNoZWRSZWNvdmVyeShWYWx1ZVJlY292ZXJ5KTsKKworICAgIENhY2hl
ZFJlY292ZXJ5KiBzZXRDYWNoZWRSZWNvdmVyeShWYWx1ZVJlY292ZXJ5LCBDYWNoZWRSZWNvdmVy
eSopOworCisgICAgdm9pZCBjbGVhckNhY2hlZFJlY292ZXJ5KFZhbHVlUmVjb3ZlcnkgcmVjb3Zl
cnkpCisgICAgeworICAgICAgICBpZiAoIXJlY292ZXJ5LmlzQ29uc3RhbnQoKSkKKyAgICAgICAg
ICAgIHNldENhY2hlZFJlY292ZXJ5KHJlY292ZXJ5LCBudWxscHRyKTsKKyAgICB9CisKKyAgICBD
YWNoZWRSZWNvdmVyeSogYWRkQ2FjaGVkUmVjb3ZlcnkoVmFsdWVSZWNvdmVyeSByZWNvdmVyeSkK
KyAgICB7CisgICAgICAgIGlmIChyZWNvdmVyeS5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gbV9jYWNoZWRSZWNvdmVyaWVzLmFkZChyZWNvdmVyeSk7CisgICAgICAgIENhY2hlZFJl
Y292ZXJ5KiBjYWNoZWRSZWNvdmVyeSA9IGdldENhY2hlZFJlY292ZXJ5KHJlY292ZXJ5KTsKKyAg
ICAgICAgaWYgKCFjYWNoZWRSZWNvdmVyeSkKKyAgICAgICAgICAgIHJldHVybiBzZXRDYWNoZWRS
ZWNvdmVyeShyZWNvdmVyeSwgbV9jYWNoZWRSZWNvdmVyaWVzLmFkZChyZWNvdmVyeSkpOworICAg
ICAgICByZXR1cm4gY2FjaGVkUmVjb3Zlcnk7CisgICAgfQorCisgICAgLy8gVGhpcyBpcyB0aGUg
Y3VycmVudCByZWNvdmVyaWVzIHByZXNlbnQgaW4gdGhlIG9sZCBmcmFtZSdzCisgICAgLy8gc2xv
dHMuIEEgbnVsbCBDYWNoZWRSZWNvdmVyeSBtZWFucyB3ZSBjYW4gdHJhc2ggdGhlIGN1cnJlbnQK
KyAgICAvLyB2YWx1ZSBhcyB3ZSBkb24ndCBjYXJlIGFib3V0IGl0LgorICAgIFZlY3RvcjxDYWNo
ZWRSZWNvdmVyeSo+IG1fb2xkRnJhbWU7CisKKyAgICBpbnQgbnVtTG9jYWxzKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX29sZEZyYW1lLnNpemUoKSAtIEpTU3RhY2s6OkNhbGxlckZy
YW1lQW5kUENTaXplOworICAgIH0KKworICAgIENhY2hlZFJlY292ZXJ5KiBnZXRPbGQoVmlydHVh
bFJlZ2lzdGVyIHJlZykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29sZEZyYW1lW0pT
U3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplIC0gcmVnLm9mZnNldCgpIC0gMV07CisgICAgfQor
CisgICAgdm9pZCBzZXRPbGQoVmlydHVhbFJlZ2lzdGVyIHJlZywgQ2FjaGVkUmVjb3ZlcnkqIGNh
Y2hlZFJlY292ZXJ5KQorICAgIHsKKyAgICAgICAgbV9vbGRGcmFtZVtKU1N0YWNrOjpDYWxsZXJG
cmFtZUFuZFBDU2l6ZSAtIHJlZy5vZmZzZXQoKSAtIDFdID0gY2FjaGVkUmVjb3Zlcnk7CisgICAg
fQorCisgICAgVmlydHVhbFJlZ2lzdGVyIGZpcnN0T2xkKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIgeyBzdGF0aWNfY2FzdDxpbnQ+KC1udW1Mb2NhbHMoKSkg
fTsKKyAgICB9CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGFzdE9sZCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyIHsgSlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRQ
Q1NpemUgLSAxIH07CisgICAgfQorCisgICAgYm9vbCBpc1ZhbGlkT2xkKFZpcnR1YWxSZWdpc3Rl
ciByZWcpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gcmVnID49IGZpcnN0T2xkKCkgJiYg
cmVnIDw9IGxhc3RPbGQoKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIHN0b3JlcywgZm9yIGVhY2gg
c2xvdCBpbiB0aGUgbmV3IGZyYW1lLCBpbmZvcm1hdGlvbiBhYm91dAorICAgIC8vIHRoZSByZWNv
dmVyeSBmb3IgdGhlIHZhbHVlIHRoYXQgc2hvdWxkIGV2ZW50dWFsbHkgZ28gaW50byB0aGF0Cisg
ICAgLy8gc2xvdC4KKyAgICAvLworICAgIC8vIE9uY2UgdGhlIHNsb3QgaGFzIGJlZW4gd3JpdHRl
biwgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4KKyAgICAvLyBtX25ld0ZyYW1lIHdpbGwgYmUg
ZW1wdHkuCisgICAgVmVjdG9yPENhY2hlZFJlY292ZXJ5Kj4gbV9uZXdGcmFtZTsKKworICAgIHNp
emVfdCBhcmdDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9uZXdGcmFtZS5z
aXplKCkgLSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgIH0KKworICAgIENhY2hl
ZFJlY292ZXJ5KiBnZXROZXcoVmlydHVhbFJlZ2lzdGVyIG5ld1JlZ2lzdGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fbmV3RnJhbWVbbmV3UmVnaXN0ZXIub2Zmc2V0KCldOworICAg
IH0KKworICAgIHZvaWQgc2V0TmV3KFZpcnR1YWxSZWdpc3RlciBuZXdSZWdpc3RlciwgQ2FjaGVk
UmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5KQorICAgIHsKKyAgICAgICAgbV9uZXdGcmFtZVtuZXdS
ZWdpc3Rlci5vZmZzZXQoKV0gPSBjYWNoZWRSZWNvdmVyeTsKKyAgICB9CisKKyAgICB2b2lkIGFk
ZE5ldyhWaXJ0dWFsUmVnaXN0ZXIgbmV3UmVnaXN0ZXIsIFZhbHVlUmVjb3ZlcnkgcmVjb3Zlcnkp
CisgICAgeworICAgICAgICBDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkgPSBhZGRDYWNo
ZWRSZWNvdmVyeShyZWNvdmVyeSk7CisgICAgICAgIGNhY2hlZFJlY292ZXJ5LT5hZGRUYXJnZXQo
bmV3UmVnaXN0ZXIpOworICAgICAgICBzZXROZXcobmV3UmVnaXN0ZXIsIGNhY2hlZFJlY292ZXJ5
KTsKKyAgICB9CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3ROZXcoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlciB7IDAgfTsKKyAgICB9CisKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgbGFzdE5ldygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gVmlydHVh
bFJlZ2lzdGVyIHsgc3RhdGljX2Nhc3Q8aW50PihtX25ld0ZyYW1lLnNpemUoKSkgLSAxIH07Cisg
ICAgfQorCisgICAgYm9vbCBpc1ZhbGlkTmV3KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gcmVnID49IGZpcnN0TmV3KCkgJiYgcmVnIDw9IGxhc3ROZXco
KTsKKyAgICB9CisKKworICAgIGludCBtX2FsaWduZWRPbGRGcmFtZVNpemU7CisgICAgaW50IG1f
YWxpZ25lZE5ld0ZyYW1lU2l6ZTsKKworICAgIC8vIFRoaXMgaXMgdGhlIGRpc3RhbmNlLCBpbiBz
bG90cywgYmV0d2VlbiB0aGUgYmFzZSBvZiB0aGUgbmV3CisgICAgLy8gZnJhbWUgYW5kIHRoZSBi
YXNlIG9mIHRoZSBvbGQgZnJhbWUuIEl0IGNvdWxkIGJlIG5lZ2F0aXZlIHdoZW4KKyAgICAvLyBw
cmVwYXJpbmcgZm9yIGEgdGFpbCBjYWxsIHRvIGEgZnVuY3Rpb24gd2l0aCBzbWFsbGVyIGFyZ3Vt
ZW50CisgICAgLy8gY291bnQuCisgICAgLy8KKyAgICAvLyBXZSB3aWxsIG92ZXJ3cml0ZSB0aGlz
IGFwcHJvcHJpYXRlbHkgZm9yIHNsb3cgcGF0aCBjYWxscywgYnV0CisgICAgLy8gd2UgaW5pdGlh
bGl6ZSBpdCBhcyBpZiBkb2luZyBhIGZhc3QgcGF0aCBmb3IgdGhlIHNwaWxscyB3ZQorICAgIC8v
IGNvdWxkIGRvIHdoaWxlIHVuZGVjaWRlZCAodHlwaWNhbGx5IHdoaWxlIGNhbGxpbmcgYWNxdWly
ZUdQUigpCisgICAgLy8gZm9yIGEgcG9seW1vcnBoaWMgY2FsbCkuCisgICAgaW50IG1fZnJhbWVE
ZWx0YTsKKworICAgIFZpcnR1YWxSZWdpc3RlciBuZXdBc09sZChWaXJ0dWFsUmVnaXN0ZXIgcmVn
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlZyAtIG1fZnJhbWVEZWx0YTsKKyAgICB9
CisKKyAgICAvLyBUaGlzIHN0b3JlcyB0aGUgc2V0IG9mIGxvY2tlZCByZWdpc3RlcnMsIGkuZS4g
cmVnaXN0ZXJzIGZvcgorICAgIC8vIHdoaWNoIHdlIGhhdmUgYW4gaW1wbGljaXQgcmVxdWlyZW1l
bnQgdGhhdCB0aGV5IGFyZSBub3QgY2hhbmdlZC4KKyAgICAvLworICAgIC8vIFRoaXMgd2lsbCB1
c3VhbGx5IGNvbnRhaW5zIHRoZSBsaW5rIHJlZ2lzdGVyIG9uIGFyY2hpdGVjdHVyZXMKKyAgICAv
LyB0aGF0IGhhdmUgb25lLCBhbnkgc2NyYXRjaCByZWdpc3RlciB1c2VkIGJ5IHRoZSBtYWNybyBh
c3NlbWJsZXIKKyAgICAvLyAoZS5nLiByMTEgb24gWDg2XzY0KSwgYXMgd2VsbCBhcyBhbnkgcmVn
aXN0ZXIgdGhhdCB3ZSB1c2UgZm9yCisgICAgLy8gYWRkcmVzc2luZyAoc2VlIG1fb2xkRnJhbWVC
YXNlIGFuZCBtX25ld0ZyYW1lQmFzZSkuCisgICAgLy8KKyAgICAvLyBXZSBhbHNvIHVzZSB0aGlz
IHRvIGxvY2sgcmVnaXN0ZXJzIHRlbXBvcmFyaWx5LCBmb3IgaW5zdGFuY2UgdG8KKyAgICAvLyBl
bnN1cmUgdGhhdCB3ZSBoYXZlIGF0IGxlYXN0IDIgYXZhaWxhYmxlIHJlZ2lzdGVycyBmb3IgbG9h
ZGluZworICAgIC8vIGEgcGFpciBvbiAzMmJpdHMuCisgICAgUmVnaXN0ZXJTZXQgbV9sb2NrZWRS
ZWdpc3RlcnM7CisKKyAgICAvLyBUaGlzIHN0b3JlcyB0aGUgY3VycmVudCByZWNvdmVyaWVzIHBy
ZXNlbnQgaW4gcmVnaXN0ZXJzLiBBIG51bGwKKyAgICAvLyBDYWNoZWRSZWNvdmVyeSBtZWFucyB3
ZSBjYW4gdHJhc2ggdGhlIGN1cnJlbnQgdmFsdWUgYXMgd2UgZG9uJ3QKKyAgICAvLyBjYXJlIGFi
b3V0IGl0LiAKKyAgICBSZWdpc3Rlck1hcDxDYWNoZWRSZWNvdmVyeSo+IG1fcmVnaXN0ZXJzOwor
CisgICAgLy8gVGhpcyBzdG9yZXMsIGZvciBlYWNoIHJlZ2lzdGVyLCBpbmZvcm1hdGlvbiBhYm91
dCB0aGUgcmVjb3ZlcnkKKyAgICAvLyBmb3IgdGhlIHZhbHVlIHRoYXQgc2hvdWxkIGV2ZW50dWFs
bHkgZ28gaW50byB0aGF0IHJlZ2lzdGVyLiBUaGUKKyAgICAvLyBvbmx5IHJlZ2lzdGVycyB0aGF0
IGhhdmUgYSB0YXJnZXQgcmVjb3Zlcnkgd2lsbCBiZSBjYWxsZWUtc2F2ZQorICAgIC8vIHJlZ2lz
dGVycywgYXMgd2VsbCBhcyBwb3NzaWJseSBvbmUgSlNWYWx1ZVJlZ3MgZm9yIGhvbGRpbmcgdGhl
CisgICAgLy8gY2FsbGVlLgorICAgIC8vCisgICAgLy8gT25jZSB0aGUgY29ycmVjdCB2YWx1ZSBo
YXMgYmVlbiBwdXQgaW50byB0aGUgcmVnaXN0ZXJzLCBhbmQKKyAgICAvLyBjb250cmFyeSB0byB3
aGF0IHdlIGRvIHdpdGggbV9uZXdGcmFtZSwgd2Uga2VlcCB0aGUgZW50cnkgaW4KKyAgICAvLyBt
X25ld1JlZ2lzdGVycyB0byBzaW1wbGlmeSBzcGlsbGluZy4KKyAgICBSZWdpc3Rlck1hcDxDYWNo
ZWRSZWNvdmVyeSo+IG1fbmV3UmVnaXN0ZXJzOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hl
Y2tGdW5jdG9yPgorICAgIFJlZyBnZXRGcmVlUmVnaXN0ZXIoY29uc3QgQ2hlY2tGdW5jdG9yJiBj
aGVjaykgY29uc3QKKyAgICB7CisgICAgICAgIFJlZyBub25UZW1wIHsgfTsKKyAgICAgICAgZm9y
IChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5u
ZXh0KCkpIHsKKyAgICAgICAgICAgIGlmIChtX2xvY2tlZFJlZ2lzdGVycy5nZXQocmVnKSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKCFjaGVjayhyZWcpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAoIW1fcmVnaXN0ZXJz
W3JlZ10pIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fbmV3UmVnaXN0ZXJzW3JlZ10pCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZWc7CisgICAgICAgICAgICAgICAgaWYgKCFub25UZW1w
KQorICAgICAgICAgICAgICAgICAgICBub25UZW1wID0gcmVnOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHJldHVybiBub25UZW1wOworICAgIH0KKworICAgIEdQUlJlZyBnZXRG
cmVlR1BSKCkgY29uc3QKKyAgICB7CisgICAgICAgIFJlZyBmcmVlR1BSIHsgZ2V0RnJlZVJlZ2lz
dGVyKFtdIChSZWcgcmVnKSB7IHJldHVybiByZWcuaXNHUFIoKTsgfSkgfTsKKyAgICAgICAgaWYg
KCFmcmVlR1BSKQorICAgICAgICAgICAgcmV0dXJuIEludmFsaWRHUFJSZWc7CisgICAgICAgIHJl
dHVybiBmcmVlR1BSLmdwcigpOworICAgIH0KKworICAgIEZQUlJlZyBnZXRGcmVlRlBSKCkgY29u
c3QKKyAgICB7CisgICAgICAgIFJlZyBmcmVlRlBSIHsgZ2V0RnJlZVJlZ2lzdGVyKFtdIChSZWcg
cmVnKSB7IHJldHVybiByZWcuaXNGUFIoKTsgfSkgfTsKKyAgICAgICAgaWYgKCFmcmVlRlBSKQor
ICAgICAgICAgICAgcmV0dXJuIEludmFsaWRGUFJSZWc7CisgICAgICAgIHJldHVybiBmcmVlRlBS
LmZwcigpOworICAgIH0KKworICAgIGJvb2wgaGFzRnJlZVJlZ2lzdGVyKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPihnZXRGcmVlUmVnaXN0ZXIoW10gKFJl
ZykgeyByZXR1cm4gdHJ1ZTsgfSkpOworICAgIH0KKworICAgIC8vIFRoaXMgZnJlZXMgdXAgYSBy
ZWdpc3RlciBzYXRpc2Z5aW5nIHRoZSBjaGVjayBmdW5jdG9yICh0aGlzCisgICAgLy8gZnVuY3Rv
ciBjb3VsZCB0aGVvcmV0aWNhbGx5IGhhdmUgYW55IGtpbmQgb2YgbG9naWMsIGJ1dCBpdCBtdXN0
CisgICAgLy8gZW5zdXJlIHRoYXQgaXQgd2lsbCBvbmx5IHJldHVybiB0cnVlIGZvciByZWdpc3Rl
cnMgLSBzcGlsbAorICAgIC8vIGFzc3VtZXMgYW5kIGFzc2VydHMgdGhhdCBpdCBpcyBwYXNzZWQg
YSBjYWNoZWRSZWNvdmVyeSBzdG9yZWQgaW4gYQorICAgIC8vIHJlZ2lzdGVyKS4KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGVja0Z1bmN0b3I+CisgICAgdm9pZCBlbnN1cmVSZWdpc3Rlcihjb25z
dCBDaGVja0Z1bmN0b3ImIGNoZWNrKQorICAgIHsKKyAgICAgICAgLy8gSWYgd2UgY2FuIHNwaWxs
IGEgY2FsbGVlLXNhdmUsIHRoYXQncyBiZXN0LCBiZWNhdXNlIGl0IHdpbGwKKyAgICAgICAgLy8g
ZnJlZSB1cCBhIHJlZ2lzdGVyIHRoYXQgd291bGQgb3RoZXJ3aXNlIGJlZW4gdGFrZW4gZm9yIHRo
ZQorICAgICAgICAvLyBsb25nZXN0IGFtb3VudCBvZiB0aW1lLgorICAgICAgICAvLworICAgICAg
ICAvLyBXZSBjb3VsZCB0cnkgdG8gYmlhcyB0b3dhcmRzIHRob3NlIHRoYXQgYXJlIG5vdCBpbiB0
aGVpcgorICAgICAgICAvLyB0YXJnZXQgcmVnaXN0ZXJzIHlldCwgYnV0IHRoZSBnYWluIGlzIHBy
b2JhYmx5IHN1cGVyCisgICAgICAgIC8vIHNtYWxsLiBVbmxlc3MgeW91IGhhdmUgYSBodWdlIG51
bWJlciBvZiBhcmd1bWVudCAoYXQgbGVhc3QKKyAgICAgICAgLy8gYXJvdW5kIHR3aWNlIHRoZSBu
dW1iZXIgb2YgYXZhaWxhYmxlIHJlZ2lzdGVycyBvbiB5b3VyCisgICAgICAgIC8vIGFyY2hpdGVj
dHVyZSksIG5vIHNwaWxsaW5nIGlzIGdvaW5nIHRvIHRha2UgcGxhY2UgYW55d2F5cy4KKyAgICAg
ICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7IHJlZyA9
IHJlZy5uZXh0KCkpIHsKKyAgICAgICAgICAgIGlmIChtX2xvY2tlZFJlZ2lzdGVycy5nZXQocmVn
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgQ2FjaGVkUmVjb3Zl
cnkqIGNhY2hlZFJlY292ZXJ5IHsgbV9uZXdSZWdpc3RlcnNbcmVnXSB9OworICAgICAgICAgICAg
aWYgKCFjYWNoZWRSZWNvdmVyeSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgaWYgKGNoZWNrKCpjYWNoZWRSZWNvdmVyeSkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAiLCBjYWNoZWRSZWNvdmVy
eS0+cmVjb3ZlcnkoKSwgIiBsb29rcyBsaWtlIGEgZ29vZCBzcGlsbCBjYW5kaWRhdGVcbiIpOwor
ICAgICAgICAgICAgICAgIHNwaWxsKCpjYWNoZWRSZWNvdmVyeSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgdXNlIHRo
ZSBjYWNoZWRSZWNvdmVyeSBhc3NvY2lhdGVkIHdpdGggdGhlIGZpcnN0IG5ldyBzbG90IHdlCisg
ICAgICAgIC8vIGNhbiwgYmVjYXVzZSB0aGF0IGlzIHRoZSBvbmUgZm9yIHdoaWNoIGEgd3JpdGUg
d2lsbCBiZQorICAgICAgICAvLyBwb3NzaWJsZSB0aGUgbGF0ZXN0LCBpLmUuIHRoYXQgaXMgdGhl
IG9uZSB0aGF0IHdlIHdvdWxkCisgICAgICAgIC8vIGhhdmUgaGFkIHRvIHJldGFpbiBpbiByZWdp
c3RlcnMgZm9yIHRoZSBsb25nZXN0LgorICAgICAgICBmb3IgKFZpcnR1YWxSZWdpc3RlciByZWcg
PSBmaXJzdE5ldygpOyByZWcgPD0gbGFzdE5ldygpOyByZWcgKz0gMSkgeworICAgICAgICAgICAg
Q2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5IHsgZ2V0TmV3KHJlZykgfTsKKyAgICAgICAg
ICAgIGlmICghY2FjaGVkUmVjb3ZlcnkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgICAgIGlmIChjaGVjaygqY2FjaGVkUmVjb3ZlcnkpKSB7CisgICAgICAgICAgICAgICAg
c3BpbGwoKmNhY2hlZFJlY292ZXJ5KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KKworICAgIHZvaWQgZW5zdXJlUmVnaXN0ZXIoKQorICAgIHsKKyAgICAgICAgaWYg
KGhhc0ZyZWVSZWdpc3RlcigpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICBGaW5kaW5nIGEgcmVnaXN0ZXIgdG8gc3Bp
bGxcbiIpOworICAgICAgICBlbnN1cmVSZWdpc3RlcigKKyAgICAgICAgICAgIFt0aGlzXSAoY29u
c3QgQ2FjaGVkUmVjb3ZlcnkmIGNhY2hlZFJlY292ZXJ5KSB7CisgICAgICAgICAgICAgICAgaWYg
KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuaXNJbkdQUigpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gIW1fbG9ja2VkUmVnaXN0ZXJzLmdldChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgp
LmdwcigpKTsKKyAgICAgICAgICAgICAgICBpZiAoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5p
c0luRlBSKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAhbV9sb2NrZWRSZWdpc3RlcnMu
Z2V0KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZnByKCkpOworI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCisgICAgICAgICAgICAgICAgaWYgKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkudGVjaG5p
cXVlKCkgPT0gSW5QYWlyKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAhbV9sb2NrZWRS
ZWdpc3RlcnMuZ2V0KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkudGFnR1BSKCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAmJiAhbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KGNhY2hlZFJlY292ZXJ5
LnJlY292ZXJ5KCkucGF5bG9hZEdQUigpKTsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9KTsKKyAgICB9CisKKyAg
ICB2b2lkIGVuc3VyZUdQUigpCisgICAgeworICAgICAgICBpZiAoZ2V0RnJlZUdQUigpICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgICAgICBkYXRhTG9nKCIgIEZpbmRpbmcgYSBHUFIgdG8gc3BpbGxcbiIpOworICAg
ICAgICBlbnN1cmVSZWdpc3RlcigKKyAgICAgICAgICAgIFt0aGlzXSAoY29uc3QgQ2FjaGVkUmVj
b3ZlcnkmIGNhY2hlZFJlY292ZXJ5KSB7CisgICAgICAgICAgICAgICAgaWYgKGNhY2hlZFJlY292
ZXJ5LnJlY292ZXJ5KCkuaXNJbkdQUigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIW1f
bG9ja2VkUmVnaXN0ZXJzLmdldChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpKTsKKyNp
ZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICAgICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS5y
ZWNvdmVyeSgpLnRlY2huaXF1ZSgpID09IEluUGFpcikgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gIW1fbG9ja2VkUmVnaXN0ZXJzLmdldChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLnRh
Z0dQUigpKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgIW1fbG9ja2VkUmVnaXN0ZXJzLmdl
dChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLnBheWxvYWRHUFIoKSk7CisgICAgICAgICAgICAg
ICAgfQorI2VuZGlmCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
fSk7CisgICAgfQorCisgICAgdm9pZCBlbnN1cmVGUFIoKQorICAgIHsKKyAgICAgICAgaWYgKGdl
dEZyZWVGUFIoKSAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICBGaW5kaW5nIGFuIEZQUiB0
byBzcGlsbFxuIik7CisgICAgICAgIGVuc3VyZVJlZ2lzdGVyKAorICAgICAgICAgICAgW3RoaXNd
IChjb25zdCBDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3ZlcnkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5pc0luRlBSKCkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAhbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KGNhY2hlZFJlY292ZXJ5LnJlY292
ZXJ5KCkuZnByKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0pOworICAgIH0KKworICAgIENhY2hlZFJlY292ZXJ5KiBnZXROZXcoSlNWYWx1ZVJlZ3MganNW
YWx1ZVJlZ3MpIGNvbnN0CisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHJldHVy
biBtX25ld1JlZ2lzdGVyc1tqc1ZhbHVlUmVncy5ncHIoKV07CisjZWxzZQorICAgICAgICBBU1NF
UlQoCisgICAgICAgICAgICBqc1ZhbHVlUmVncy50YWdHUFIoKSA9PSBJbnZhbGlkR1BSUmVnIHx8
IGpzVmFsdWVSZWdzLnBheWxvYWRHUFIoKSA9PSBJbnZhbGlkR1BSUmVnCisgICAgICAgICAgICB8
fCBtX25ld1JlZ2lzdGVyc1tqc1ZhbHVlUmVncy5wYXlsb2FkR1BSKCldID09IG1fbmV3UmVnaXN0
ZXJzW2pzVmFsdWVSZWdzLnRhZ0dQUigpXSk7CisgICAgICAgIGlmIChqc1ZhbHVlUmVncy5wYXls
b2FkR1BSKCkgPT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIHJldHVybiBtX25ld1JlZ2lz
dGVyc1tqc1ZhbHVlUmVncy50YWdHUFIoKV07CisgICAgICAgIHJldHVybiBtX25ld1JlZ2lzdGVy
c1tqc1ZhbHVlUmVncy5wYXlsb2FkR1BSKCldOworI2VuZGlmCisgICAgfQorCisgICAgdm9pZCBh
ZGROZXcoSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIFZhbHVlUmVjb3ZlcnkgcmVjb3ZlcnkpCisg
ICAgeworICAgICAgICBBU1NFUlQoanNWYWx1ZVJlZ3MgJiYgIWdldE5ldyhqc1ZhbHVlUmVncykp
OworICAgICAgICBDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkgPSBhZGRDYWNoZWRSZWNv
dmVyeShyZWNvdmVyeSk7CisgICAgICAgIEFTU0VSVCghY2FjaGVkUmVjb3ZlcnktPndhbnRlZEpT
VmFsdWVSZWdzKCkpOworICAgICAgICBjYWNoZWRSZWNvdmVyeS0+c2V0V2FudGVkSlNWYWx1ZVJl
Z3MoanNWYWx1ZVJlZ3MpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIG1fbmV3UmVnaXN0
ZXJzW2pzVmFsdWVSZWdzLmdwcigpXSA9IGNhY2hlZFJlY292ZXJ5OworI2Vsc2UKKyAgICAgICAg
aWYgKGpzVmFsdWVSZWdzLnBheWxvYWRHUFIoKSAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAg
ICAgbV9uZXdSZWdpc3RlcnNbanNWYWx1ZVJlZ3MucGF5bG9hZEdQUigpXSA9IGNhY2hlZFJlY292
ZXJ5OworICAgICAgICBpZiAoanNWYWx1ZVJlZ3MudGFnR1BSKCkgIT0gSW52YWxpZEdQUlJlZykK
KyAgICAgICAgICAgIG1fbmV3UmVnaXN0ZXJzW2pzVmFsdWVSZWdzLnRhZ0dQUigpXSA9IGNhY2hl
ZFJlY292ZXJ5OworI2VuZGlmCisgICAgfQorCisgICAgdm9pZCBhZGROZXcoRlBSUmVnIGZwciwg
VmFsdWVSZWNvdmVyeSByZWNvdmVyeSkKKyAgICB7CisgICAgICAgIEFTU0VSVChmcHIgIT0gSW52
YWxpZEZQUlJlZyAmJiAhbV9uZXdSZWdpc3RlcnNbZnByXSk7CisgICAgICAgIENhY2hlZFJlY292
ZXJ5KiBjYWNoZWRSZWNvdmVyeSA9IGFkZENhY2hlZFJlY292ZXJ5KHJlY292ZXJ5KTsKKyAgICAg
ICAgbV9uZXdSZWdpc3RlcnNbZnByXSA9IGNhY2hlZFJlY292ZXJ5OworICAgICAgICBBU1NFUlQo
Y2FjaGVkUmVjb3ZlcnktPndhbnRlZEZQUigpID09IEludmFsaWRGUFJSZWcpOworICAgICAgICBj
YWNoZWRSZWNvdmVyeS0+c2V0V2FudGVkRlBSKGZwcik7CisgICAgfQorCisgICAgLy8gbV9vbGRG
cmFtZUJhc2UgaXMgdGhlIHJlZ2lzdGVyIHJlbGF0aXZlIHRvIHdoaWNoIHdlIGFjY2VzcworICAg
IC8vIHNsb3RzIGluIHRoZSBvbGQgY2FsbCBmcmFtZSwgd2l0aCBhbiBhZGRpdGlvbmFsIG9mZnNl
dCBvZgorICAgIC8vIG1fb2xkRnJhbWVPZmZzZXQuCisgICAgLy8KKyAgICAvLyAgLSBGb3IgYW4g
YWN0dWFsIHRhaWwgY2FsbCwgbV9vbGRGcmFtZUJhc2UgaXMgdGhlIHN0YWNrCisgICAgLy8gICAg
cG9pbnRlciwgYW5kIG1fb2xkRnJhbWVPZmZzZXQgaXMgdGhlIG51bWJlciBvZiBsb2NhbHMgb2Yg
dGhlCisgICAgLy8gICAgdGFpbCBjYWxsZXIncyBmcmFtZS4gV2UgdXNlIHN1Y2ggc3RhY2sgcG9p
bnRlci1iYXNlZAorICAgIC8vICAgIGFkZHJlc3NpbmcgYmVjYXVzZSBpdCBhbGxvd3MgdXMgdG8g
bG9hZCB0aGUgdGFpbCBjYWxsZXIncworICAgIC8vICAgIGNhbGxlcidzIGZyYW1lIHBvaW50ZXIg
aW4gdGhlIGZyYW1lIHBvaW50ZXIgcmVnaXN0ZXIKKyAgICAvLyAgICBpbW1lZGlhdGVseSBpbnN0
ZWFkIG9mIGF3a3dhcmRseSBrZWVwaW5nIGl0IGFyb3VuZCBvbiB0aGUKKyAgICAvLyAgICBzdGFj
ay4KKyAgICAvLworICAgIC8vICAtIEZvciBhIHNsb3cgcGF0aCBjYWxsLCBtX29sZEZyYW1lQmFz
ZSBpcyBqdXN0IHRoZSBmcmFtZQorICAgIC8vICAgIHBvaW50ZXIsIGFuZCBtX29sZEZyYW1lT2Zm
c2V0IGlzIDAuCisgICAgR1BSUmVnIG1fb2xkRnJhbWVCYXNlIHsgTWFjcm9Bc3NlbWJsZXI6OmZy
YW1lUG9pbnRlclJlZ2lzdGVyIH07CisgICAgaW50IG1fb2xkRnJhbWVPZmZzZXQgeyAwIH07CisK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBhZGRyZXNzRm9yT2xkKFZpcnR1YWxSZWdpc3Rl
ciByZWcpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MobV9vbGRGcmFtZUJhc2UsCisgICAgICAgICAgICAobV9vbGRGcmFtZU9mZnNldCArIHJlZy5v
ZmZzZXQoKSkgKiBzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICB9CisKKyAgICAvLyBtX25ld0ZyYW1l
QmFzZSBpcyB0aGUgcmVnaXN0ZXIgcmVsYXRpdmUgdG8gd2hpY2ggd2UgYWNjZXNzCisgICAgLy8g
c2xvdHMgaW4gdGhlIG5ldyBjYWxsIGZyYW1lLCBhbmQgd2UgYWx3YXlzIG1ha2UgaXQgcG9pbnQg
dG8KKyAgICAvLyB3aGVyZXZlciB0aGUgc3RhY2sgcG9pbnRlciB3aWxsIGJlIHJpZ2h0IGJlZm9y
ZSBtYWtpbmcgdGhlCisgICAgLy8gYWN0dWFsIGNhbGwvanVtcC4gVGhlIGFjdHVhbCBiYXNlIG9m
IHRoZSBuZXcgZnJhbWUgaXMgYXQgb2Zmc2V0CisgICAgLy8gbV9uZXdGcmFtZU9mZnNldCByZWxh
dGl2ZSB0byBtX25ld0ZyYW1lQmFzZS4KKyAgICAvLworICAgIC8vICAtIEZvciBhbiBhY3R1YWwg
dGFpbCBjYWxsLCBtX25ld0ZyYW1lQmFzZSBpcyBjb21wdXRlZAorICAgIC8vICAgIGR5bmFtaWNh
bGx5LCBhbmQgbV9uZXdGcmFtZU9mZnNldCB2YXJpZXMgYmV0d2VlbiAwIGFuZCAtMgorICAgIC8v
ICAgIGRlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlJ3MgY2FsbGluZyBjb252ZW50aW9uIChz
ZWUKKyAgICAvLyAgICBwcmVwYXJlRm9yVGFpbENhbGwpLgorICAgIC8vCisgICAgLy8gIC0gRm9y
IGEgc2xvdyBwYXRoIGNhbGwsIG1fbmV3RnJhbWVCYXNlIGlzIHRoZSBhY3R1YWwgc3RhY2sKKyAg
ICAvLyAgICBwb2ludGVyLCBhbmQgbV9uZXdGcmFtZU9mZnNldCBpcyAtIENhbGxlckZyYW1lQW5k
UENTaXplLAorICAgIC8vICAgIGZvbGxvd2luZyB0aGUgY29udmVudGlvbiBmb3IgYSByZWd1bGFy
IGNhbGwuCisgICAgR1BSUmVnIG1fbmV3RnJhbWVCYXNlIHsgSW52YWxpZEdQUlJlZyB9OworICAg
IGludCBtX25ld0ZyYW1lT2Zmc2V0IHsgMH07CisKKyAgICBib29sIGlzVW5kZWNpZGVkKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX25ld0ZyYW1lQmFzZSA9PSBJbnZhbGlkR1BSUmVn
OworICAgIH0KKworICAgIGJvb2wgaXNTbG93UGF0aCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9uZXdGcmFtZUJhc2UgPT0gTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lz
dGVyOworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFkZHJlc3NGb3JOZXco
VmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhtX25ld0ZyYW1lQmFzZSwKKyAgICAgICAgICAgIChtX25ld0ZyYW1l
T2Zmc2V0ICsgcmVnLm9mZnNldCgpKSAqIHNpemVvZihSZWdpc3RlcikpOworICAgIH0KKworICAg
IC8vIFdlIHVzZSBhIGNvbmNlcHQgb2YgImRhbmdlciB6b25lIi4gVGhlIGRhbmdlciB6b25lIGNv
bnNpc3RzIG9mCisgICAgLy8gYWxsIHRoZSB3cml0ZXMgaW4gdGhlIG5ldyBmcmFtZSB0aGF0IGNv
dWxkIG92ZXJsYXAgd2l0aCByZWFkcworICAgIC8vIGluIHRoZSBvbGQgZnJhbWUuCisgICAgLy8K
KyAgICAvLyBCZWNhdXNlIHdlIGNvdWxkIGhhdmUgYSBoaWdoZXIgYWN0dWFsIG51bWJlciBvZiBh
cmd1bWVudHMgdGhhbgorICAgIC8vIHBhcmFtZXRlcnMsIHdoZW4gcHJlcGFyaW5nIGEgdGFpbCBj
YWxsLCB3ZSBuZWVkIHRvIGFzc3VtZSB0aGF0CisgICAgLy8gd3JpdGluZyB0byBhIHNsb3Qgb24g
dGhlIG5ldyBmcmFtZSBjb3VsZCBvdmVybGFwIG5vdCBvbmx5IHdpdGgKKyAgICAvLyB0aGUgY29y
cmVzcG9uZGluZyBzbG90IGluIHRoZSBvbGQgZnJhbWUsIGJ1dCBhbHNvIHdpdGggYW55IHNsb3QK
KyAgICAvLyBhYm92ZSBpdC4gVGh1cywgdGhlIGRhbmdlciB6b25lIGNvbnNpc3RzIG9mIGFsbCB3
cml0ZXMgYmV0d2VlbgorICAgIC8vIHRoZSBmaXJzdCB3cml0ZSBhbmQgd2hhdCBJIGNhbGwgdGhl
ICJkYW5nZXIgZnJvbnRpZXIiOiB0aGUKKyAgICAvLyBoaWdoZXN0IHNsb3QgaW4gdGhlIG9sZCBm
cmFtZSB3ZSBzdGlsbCBjYXJlIGFib3V0LiBUaHVzLCB0aGUKKyAgICAvLyBkYW5nZXIgem9uZSBj
b250YWlucyBhbGwgdGhlIHNsb3RzIGJldHdlZW4gdGhlIGZpcnN0IHNsb3Qgb2YKKyAgICAvLyB0
aGUgbmV3IGZyYW1lIGFuZCB0aGUgZGFuZ2VyIGZyb250aWVyLiBCZWNhdXNlIHRoZSBkYW5nZXIK
KyAgICAvLyBmcm9udGllciBpcyByZWxhdGVkIHRvIHRoZSBuZXcgZnJhbWUsIGl0IGlzIHN0b3Jl
ZCBhcyBhIHZpcnR1YWwKKyAgICAvLyByZWdpc3RlciAqaW4gdGhlIG5ldyBmcmFtZSouCisgICAg
VmlydHVhbFJlZ2lzdGVyIG1fZGFuZ2VyRnJvbnRpZXI7CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZGFuZ2VyRnJvbnRpZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc1VuZGVjaWRl
ZCgpKTsKKworICAgICAgICByZXR1cm4gbV9kYW5nZXJGcm9udGllcjsKKyAgICB9CisKKyAgICBi
b29sIGlzRGFuZ2VyTmV3KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoIWlzVW5kZWNpZGVkKCkgJiYgaXNWYWxpZE5ldyhyZWcpKTsKKyAgICAgICAgcmV0
dXJuIHJlZyA8PSBkYW5nZXJGcm9udGllcigpOworICAgIH0KKworICAgIHZvaWQgdXBkYXRlRGFu
Z2VyRnJvbnRpZXIoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc1VuZGVjaWRlZCgpKTsKKwor
ICAgICAgICBtX2RhbmdlckZyb250aWVyID0gZmlyc3ROZXcoKSAtIDE7CisgICAgICAgIGZvciAo
VmlydHVhbFJlZ2lzdGVyIHJlZyA9IGxhc3ROZXcoKTsgcmVnID49IGZpcnN0TmV3KCk7IHJlZyAt
PSAxKSB7CisgICAgICAgICAgICBpZiAoIWdldE5ldyhyZWcpIHx8ICFpc1ZhbGlkT2xkKG5ld0Fz
T2xkKHJlZykpIHx8ICFnZXRPbGQobmV3QXNPbGQocmVnKSkpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgICAgIG1fZGFuZ2VyRnJvbnRpZXIgPSByZWc7CisgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgIERhbmdlciBmcm9udGll
ciBub3cgYXQgTkVXICIsIG1fZGFuZ2VyRnJvbnRpZXIsICJcbiIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9n
KCIgIEFsbCBjbGVhciEgRGFuZ2VyIHpvbmUgaXMgZW1wdHkuXG4iKTsKKyAgICB9CisKKyAgICAv
LyBBIHNhZmUgd3JpdGUgaXMgYSB3cml0ZSB0aGF0IG5ldmVyIHdyaXRlcyBpbnRvIHRoZSBkYW5n
ZXIgem9uZS4KKyAgICBib29sIGhhc09ubHlTYWZlV3JpdGVzKENhY2hlZFJlY292ZXJ5JiBjYWNo
ZWRSZWNvdmVyeSkgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIHRh
cmdldCA6IGNhY2hlZFJlY292ZXJ5LnRhcmdldHMoKSkgeworICAgICAgICAgICAgaWYgKGlzRGFu
Z2VyTmV3KHRhcmdldCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIFlvdSBtdXN0IGVuc3VyZSB0
aGF0IHRoZXJlIGlzIG5vIGRhbmdlcm91cyB3cml0ZXMgYmVmb3JlCisgICAgLy8gY2FsbGluZyB0
aGlzIGZ1bmN0aW9uLgorICAgIGJvb2wgdHJ5V3JpdGVzKENhY2hlZFJlY292ZXJ5Jik7CisKKyAg
ICAvLyBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIGVuc3VyZSB0aGF0IHRoZXJlIGlzIG5vIGxvbmdl
ciBhbnkKKyAgICAvLyBwb3NzaWJsZSBzYWZlIHdyaXRlLCBpLmUuIGFsbCByZW1haW5pbmcgd3Jp
dGVzIGFyZSBlaXRoZXIgdG8KKyAgICAvLyB0aGUgZGFuZ2VyIHpvbmUgb3IgY2FsbGVlIHNhdmUg
cmVzdG9yYXRpb25zLgorICAgIC8vCisgICAgLy8gSXQgcmV0dXJucyBmYWxzZSBpZiBpdCB3YXMg
dW5hYmxlIHRvIHBlcmZvcm0gc29tZSBzYWZlIHdyaXRlcworICAgIC8vIGR1ZSB0byBoaWdoIHJl
Z2lzdGVyIHByZXNzdXJlLgorICAgIGJvb2wgcGVyZm9ybVNhZmVXcml0ZXMoKTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworI2VuZGlmIC8vIENh
bGxGcmFtZVNodWZmbGVyX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2Fs
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNw
cAkocmV2aXNpb24gMTg5ODg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIFVTRShKU1ZBTFVFNjQp
CiAjaW5jbHVkZSAiSklULmgiCiAKKyNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgogI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJK
U0FycmF5LmgiCkBAIC0xODAsOSArMTgxLDYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bj
b2RlSUQgb3Bjb2RlSQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncykKLSAg
ICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotCiAgICAgRGF0YUxhYmVsUHRyIGFkZHJl
c3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2s7CiAgICAgSnVtcCBzbG93Q2FzZSA9IGJyYW5jaFB0cldp
dGhQYXRjaChOb3RFcXVhbCwgcmVnVDAsIGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2ssIFRy
dXN0ZWRJbW1QdHIoMCkpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlKTsKQEAgLTE5Myw3ICsx
OTEsMjggQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogICAgIG1f
Y2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aEJlZ2luID0gYWRk
cmVzc09mTGlua2VkRnVuY3Rpb25DaGVjazsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2Fs
bExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyA9IGluZm87CiAKLSAgICBpZiAob3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzKSB7Cisg
ICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCkgeworICAgICAgICBDYWxsRnJhbWVTaHVm
ZmxlRGF0YSBzaHVmZmxlRGF0YTsKKyAgICAgICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0KKyAg
ICAgICAgICAgIGluc3RydWN0aW9uWzRdLnUub3BlcmFuZCAtIHNpemVvZihDYWxsZXJGcmFtZUFu
ZFBDKSAvIHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXpl
KGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
aW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOyArK2kpIHsKKyAgICAgICAgICAgIHNodWZmbGVEYXRh
LmFyZ3NbaV0gPQorICAgICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNT
dGFjaygKKyAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkg
LSBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQsCisgICAgICAgICAgICAgICAgICAgIERhdGFGb3Jt
YXRKUyk7CisgICAgICAgIH0KKyAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0KKyAgICAgICAg
ICAgIFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOworICAgICAgICBz
aHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMobV9jb2RlQmxvY2spOworICAgICAg
ICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKKyAgICAgICAgQ2FsbEZy
YW1lU2h1ZmZsZXIoKnRoaXMsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAg
ICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoT3Ro
ZXIgPSBlbWl0TmFrZWRUYWlsQ2FsbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzKSB7CisgICAgICAgIGVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAg
ICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhPdGhl
ciA9IGVtaXROYWtlZFRhaWxDYWxsKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTIxOCw2ICsyMzcs
OSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlECiAKICAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7CiAKKyAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzKQorICAgICAgICBlbWl0UmVzdG9yZUNhbGxl
ZVNhdmVzKCk7CisKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jYWxsQ29tcGlsYXRpb25JbmZv
W2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8pLCByZWdUMik7CiAKICAgICBtX2NhbGxD
b21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGVt
aXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2Rl
KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAx
ODk4ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJCaW5hcnlTd2l0Y2guaCIKICNp
bmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgog
I2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJERkdTcGVjdWxhdGl2ZUpJVC5o
IgogI2luY2x1ZGUgIkZUTFRodW5rcy5oIgpAQCAtNzA2LDI2ICs3MDcsMzIgQEAgdm9pZCBsaW5r
UG9seW1vcnBoaWNDYWxsKAogICAgIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1Bh
dGg7CiAgICAgCi0gICAgcHRyZGlmZl90IG9mZnNldFRvRnJhbWUgPSAtc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpOwotCi0gICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wIG9rQXJndW1lbnRDb3VudCA9IHN0dWJKaXQuYnJhbmNoMzIoCi0gICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkJlbG93LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxIZWxw
ZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2Yo
UmVnaXN0ZXIpICogSlNTdGFjazo6QXJndW1lbnRDb3VudCkgKyBvZmZzZXRUb0ZyYW1lICsgUGF5
bG9hZE9mZnNldCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEwMDAwMDAwKSk7Ci0gICAg
ICAgIHN0dWJKaXQuYWJvcnRXaXRoUmVhc29uKFJlcGF0Y2hJbnNhbmVBcmd1bWVudENvdW50KTsK
LSAgICAgICAgb2tBcmd1bWVudENvdW50LmxpbmsoJnN0dWJKaXQpOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxDYWxsRnJhbWVTaHVmZmxlcj4gZnJhbWVTaHVmZmxlcjsKKyAgICBpZiAoY2FsbExpbmtJ
bmZvLmZyYW1lU2h1ZmZsZURhdGEoKSkgeworICAgICAgICBBU1NFUlQoY2FsbExpbmtJbmZvLmlz
VGFpbENhbGwoKSk7CisgICAgICAgIGZyYW1lU2h1ZmZsZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPENh
bGxGcmFtZVNodWZmbGVyPihzdHViSml0LCAqY2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEo
KSk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgLy8gV2Ugd291bGQgaGF2ZSBhbHJl
YWR5IGNoZWNrZWQgdGhhdCB0aGUgY2FsbGVlIGlzIGEgY2VsbCwgYW5kIHdlIGNhbgorICAgICAg
ICAvLyB1c2UgdGhlIGFkZGl0aW9uYWwgcmVnaXN0ZXIgdGhpcyBidXlzIHVzLgorICAgICAgICBm
cmFtZVNodWZmbGVyLT5hc3N1bWVDYWxsZWVJc0NlbGwoKTsKKyNlbmRpZgorICAgICAgICBmcmFt
ZVNodWZmbGVyLT5sb2NrR1BSKGNhbGxlZUdQUik7CiAgICAgfQotICAgIAotICAgIEdQUlJlZyBz
Y3JhdGNoID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGNhbGxlZUdQUik7CiAg
ICAgR1BSUmVnIGNvbXBhcmlzb25WYWx1ZUdQUjsKICAgICAKICAgICBpZiAoaXNDbG9zdXJlQ2Fs
bCkgewotICAgICAgICAvLyBWZXJpZnkgdGhhdCB3ZSBoYXZlIGEgZnVuY3Rpb24gYW5kIHN0YXNo
IHRoZSBleGVjdXRhYmxlIGluIHNjcmF0Y2guCisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOwor
ICAgICAgICBpZiAoZnJhbWVTaHVmZmxlcikKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBmcmFt
ZVNodWZmbGVyLT5hY3F1aXJlR1BSKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNjcmF0
Y2hHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoY2FsbGVlR1BSKTsKKyAg
ICAgICAgLy8gVmVyaWZ5IHRoYXQgd2UgaGF2ZSBhIGZ1bmN0aW9uIGFuZCBzdGFzaCB0aGUgZXhl
Y3V0YWJsZSBpbiBzY3JhdGNoR1BSLgogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgLy8g
V2UgY2FuIHNhZmVseSBjbG9iYmVyIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBjYWxsZWVHUFIuIFdl
IGNhbid0IHJlbHkgb24gdGFnTWFza1JlZ2lzdGVyCi0gICAgICAgIC8vIGJlaW5nIHNldC4gU28g
d2UgZG8gdGhpcyB0aGUgaGFyZCB3YXkuCi0gICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTY0KFRhZ01hc2spLCBzY3JhdGNoKTsKLSAgICAgICAgc2xvd1BhdGgu
YXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVzdDY0KENDYWxsSGVscGVyczo6Tm9uWmVybywgY2FsbGVl
R1BSLCBzY3JhdGNoKSk7CisgICAgICAgIC8vIFdlIGNhbid0IHJlbHkgb24gdGFnTWFza1JlZ2lz
dGVyIGJlaW5nIHNldCwgc28gd2UgZG8gdGhpcyB0aGUgaGFyZAorICAgICAgICAvLyB3YXkuCisg
ICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFRhZ01hc2sp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVz
dDY0KENDYWxsSGVscGVyczo6Tm9uWmVybywgY2FsbGVlR1BSLCBzY3JhdGNoR1BSKSk7CiAjZWxz
ZQogICAgICAgICAvLyBXZSB3b3VsZCBoYXZlIGFscmVhZHkgY2hlY2tlZCB0aGF0IHRoZSBjYWxs
ZWUgaXMgYSBjZWxsLgogI2VuZGlmCkBAIC03MzgsOSArNzQ1LDkgQEAgdm9pZCBsaW5rUG9seW1v
cnBoaWNDYWxsKAogICAgIAogICAgICAgICBzdHViSml0LmxvYWRQdHIoCiAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1
dGFibGUoKSksCi0gICAgICAgICAgICBzY3JhdGNoKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIp
OwogICAgICAgICAKLSAgICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0gc2NyYXRjaDsKKyAgICAg
ICAgY29tcGFyaXNvblZhbHVlR1BSID0gc2NyYXRjaEdQUjsKICAgICB9IGVsc2UKICAgICAgICAg
Y29tcGFyaXNvblZhbHVlR1BSID0gY2FsbGVlR1BSOwogICAgIApAQCAtNzgyLDggKzc4OSwxMyBA
QCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiAgICAgICAgIGNhc2VWYWx1ZXNbaV0gPSBuZXdD
YXNlVmFsdWU7CiAgICAgfQogICAgIAotICAgIEdQUlJlZyBmYXN0Q291bnRzQmFzZUdQUiA9Ci0g
ICAgICAgIEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihjYWxsZWVHUFIsIGNvbXBh
cmlzb25WYWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDMpOworICAgIEdQUlJlZyBmYXN0Q291bnRzQmFz
ZUdQUjsKKyAgICBpZiAoZnJhbWVTaHVmZmxlcikKKyAgICAgICAgZmFzdENvdW50c0Jhc2VHUFIg
PSBmcmFtZVNodWZmbGVyLT5hY3F1aXJlR1BSKCk7CisgICAgZWxzZSB7CisgICAgICAgIGZhc3RD
b3VudHNCYXNlR1BSID0KKyAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRj
aEdQUihjYWxsZWVHUFIsIGNvbXBhcmlzb25WYWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDMpOworICAg
IH0KICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGZhc3RDb3Vu
dHMuZ2V0KCkpLCBmYXN0Q291bnRzQmFzZUdQUik7CiAgICAgCiAgICAgQmluYXJ5U3dpdGNoIGJp
bmFyeVN3aXRjaChjb21wYXJpc29uVmFsdWVHUFIsIGNhc2VWYWx1ZXMsIEJpbmFyeVN3aXRjaDo6
SW50UHRyKTsKQEAgLTgwMyw3ICs4MTUsMTEgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAog
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLAogICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhmYXN0Q291bnRzQmFzZUdQUiwgY2FzZUluZGV4
ICogc2l6ZW9mKHVpbnQzMl90KSkpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChjYWxsTGlua0lu
Zm8uaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlmIChmcmFtZVNodWZmbGVyKSB7CisgICAgICAg
ICAgICBDYWxsRnJhbWVTaHVmZmxlcihzdHViSml0LCBmcmFtZVNodWZmbGVyLT5zbmFwc2hvdCgp
KS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICAgICAgICAgIGNhbGxzW2Nhc2VJbmRleF0uY2Fs
bCA9IHN0dWJKaXQubmVhclRhaWxDYWxsKCk7CisgICAgICAgIH0gZWxzZSBpZiAoY2FsbExpbmtJ
bmZvLmlzVGFpbENhbGwoKSkgeworICAgICAgICAgICAgc3R1YkppdC5lbWl0UmVzdG9yZUNhbGxl
ZVNhdmVzKCk7CiAgICAgICAgICAgICBzdHViSml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsK
ICAgICAgICAgICAgIGNhbGxzW2Nhc2VJbmRleF0uY2FsbCA9IHN0dWJKaXQubmVhclRhaWxDYWxs
KCk7CiAgICAgICAgIH0gZWxzZQpAQCAtODE0LDEwICs4MzAsMjMgQEAgdm9pZCBsaW5rUG9seW1v
cnBoaWNDYWxsKAogICAgIAogICAgIHNsb3dQYXRoLmxpbmsoJnN0dWJKaXQpOwogICAgIGJpbmFy
eVN3aXRjaC5mYWxsVGhyb3VnaCgpLmxpbmsoJnN0dWJKaXQpOwotICAgIHN0dWJKaXQubW92ZShj
YWxsZWVHUFIsIEdQUkluZm86OnJlZ1QwKTsKKworICAgIGlmIChmcmFtZVNodWZmbGVyKSB7Cisg
ICAgICAgIGZyYW1lU2h1ZmZsZXItPnJlbGVhc2VHUFIoY2FsbGVlR1BSKTsKKyAgICAgICAgZnJh
bWVTaHVmZmxlci0+cmVsZWFzZUdQUihjb21wYXJpc29uVmFsdWVHUFIpOworICAgICAgICBmcmFt
ZVNodWZmbGVyLT5yZWxlYXNlR1BSKGZhc3RDb3VudHNCYXNlR1BSKTsKICNpZiBVU0UoSlNWQUxV
RTMyXzY0KQotICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpDZWxsVGFnKSwgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICBmcmFtZVNodWZmbGVyLT5z
ZXRDYWxsZWVKU1ZhbHVlUmVncyhKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6
cmVnVDApKTsKKyNlbHNlCisgICAgICAgIGZyYW1lU2h1ZmZsZXItPnNldENhbGxlZUpTVmFsdWVS
ZWdzKEpTVmFsdWVSZWdzKEdQUkluZm86OnJlZ1QwKSk7CiAjZW5kaWYKKyAgICAgICAgZnJhbWVT
aHVmZmxlci0+cHJlcGFyZUZvclNsb3dQYXRoKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3R1
YkppdC5tb3ZlKGNhbGxlZUdQUiwgR1BSSW5mbzo6cmVnVDApOworI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCisgICAgICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpDZWxsVGFnKSwgR1BSSW5mbzo6cmVnVDEpOworI2VuZGlmCisgICAgfQogICAgIHN0dWJK
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmNhbGxMaW5rSW5mbyksIEdQUklu
Zm86OnJlZ1QyKTsKICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24oKS5leGVjdXRhYmxlQWRkcmVzcygpKSwg
R1BSSW5mbzo6cmVnVDQpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9U
aHVua0dlbmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMTg5ODg1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUs
NiArMTU1LDEwIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rUG9seW1vcnBoaWNDYWwKICAg
ICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJMaW5rIHBvbHltb3JwaGljIGNh
bGwgc2xvdyBwYXRoIHRodW5rIikpOwogfQogCisvLyBGSVhNRTogV2Ugc2hvdWxkIGRpc3Rpbmd1
aXNoIGJldHdlZW4gYSBtZWdhbW9ycGhpYyB2aXJ0dWFsIGNhbGwgdnMuIGEgc2xvdworLy8gcGF0
aCB2aXJ0dWFsIGNhbGwgc28gdGhhdCB3ZSBjYW4gZW5hYmxlIGZhc3QgdGFpbCBjYWxscyBmb3Ig
bWVnYW1vcnBoaWMKKy8vIHZpcnR1YWwgY2FsbHMgYnkgdXNpbmcgdGhlIHNodWZmbGVyLgorLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODgzMQogTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIHZpcnR1YWxUaHVua0ZvcihWTSogdm0sIENhbGxMaW5rSW5mbyYgY2FsbExp
bmtJbmZvKQogewogICAgIC8vIFRoZSBjYWxsZWUgaXMgaW4gcmVnVDAgKGZvciBKU1ZBTFVFMzJf
NjQsIHRoZSB0YWcgaXMgaW4gcmVnVDEpLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261360</attachid>
            <date>2015-09-16 20:35:49 -0700</date>
            <delta_ts>2015-09-16 22:31:28 -0700</delta_ts>
            <desc>Patch with fix for 32 bit debug build</desc>
            <filename>148662-3.patch</filename>
            <type>text/plain</type>
            <size>125897</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg5ODg0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNCBA
QAorMjAxNS0wOS0xNiAgQmFzaWxlIENsZW1lbnQgIDxiYXNpbGVfY2xlbWVudEBhcHBsZS5jb20+
CisKKyAgICAgICAgW0VTNl0gVGFpbCBjYWxsIGZhc3QgcGF0aCBzaG91bGQgZWZmaWNpZW50bHkg
cmV1c2UgdGhlIGZyYW1lJ3Mgc3RhY2sgc3BhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODY2MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaW50cm9kdWNlcyBhIG5ldyBjbGFzcyAoQ2FsbEZy
YW1lU2h1ZmZsZXIpIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yCisgICAgICAgIGVmZmljaWVudGx5
IGJ1aWxkaW5nIHRoZSBuZXcgZnJhbWVzIHdoZW4gcGVyZm9ybWluZyBhIHRhaWwgY2FsbC4gSW4K
KyAgICAgICAgb3JkZXIgZm9yIFJlcGF0Y2ggdG8ga25vdyBhYm91dCB0aGUgcG9zaXRpb24gb2Yg
YXJndW1lbnRzIG9uIHRoZQorICAgICAgICBzdGFjay9yZWdpc3RlcnMgKGUuZy4gZm9yIHBvbHlt
b3JwaGljIGNhbGwgaW5saW5lIGNhY2hlcyksIHdlIHN0b3JlIGEKKyAgICAgICAgQ2FsbEZyYW1l
U2h1ZmZsZURhdGEgaW4gdGhlIENhbGxMaW5rSW5mby4gT3RoZXJ3aXNlLCB0aGUgSklUIGFuZCBE
RkcKKyAgICAgICAgY29tcGlsZXIgYXJlIG5vdyB1c2luZyBDYWxsRnJhbWVTaHVmZmxlciBpbnN0
ZWFkIG9mCisgICAgICAgIENDYWxsSGVscGVyczo6cHJlcGFyZUZvclRhaWxDYWxsU2xvdygpIHRv
IGJ1aWxkIHRoZSBmcmFtZSBmb3IgYSB0YWlsCisgICAgICAgIGNhbGwuCisKKyAgICAgICAgV2hl
biB0YWtpbmcgYSBzbG93IHBhdGgsIHdlIHN0aWxsIGJ1aWxkIHRoZSBmcmFtZSBhcyBpZiBkb2lu
ZyBhIHJlZ3VsYXIKKyAgICAgICAgY2FsbCwgYmVjYXVzZSB3ZSBjb3VsZCB0aHJvdyBhbiBleGNl
cHRpb24gYW5kIG5lZWQgdGhlIGNhbGxlcidzIGZyYW1lCisgICAgICAgIGF0IHRoYXQgcG9pbnQu
IFRoaXMgbWVhbnMgdGhhdCBmb3IgdmlydHVhbCBjYWxscywgd2UgZG9uJ3QgYmVuZWZpdCBmcm9t
CisgICAgICAgIHRoZSBlZmZpY2llbnQgZnJhbWUgbW92ZSBmb3Igbm93LgorCisgICAgICAgICog
Q01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvai5maWx0ZXJzOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVy
Lmg6CisgICAgICAgIChKU0M6OkFSTXY3QXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKToKKyAgICAg
ICAgKEpTQzo6QVJNdjdBc3NlbWJsZXI6Omxhc3RSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkFS
TXY3QXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2Vt
Ymxlcjo6bGFzdEZQUmVnaXN0ZXIpOgorICAgICAgICAqIGFzc2VtYmxlci9BYm9ydFJlYXNvbi5o
OgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5oOgorICAgICAgICAoSlNDOjpDYWxs
TGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0lu
Zm86OmZyYW1lU2h1ZmZsZURhdGEpOgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUmVjb3Zlcnku
aDoKKyAgICAgICAgKEpTQzo6VmFsdWVSZWNvdmVyeTo6aW5SZWdpc3Rlcik6CisgICAgICAgICog
ZGZnL0RGR0dlbmVyYXRpb25JbmZvLmg6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbklu
Zm86OnJlY292ZXJ5KToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2
ZVJlZ2lzdGVycyk6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmg6IEFkZGVk
LgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1lU2h1ZmZsZXIpOgorICAgICAgICAoSlND
OjpDYWxsRnJhbWVTaHVmZmxlcjo6ZHVtcCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZm
bGVyOjpnZXRDYWNoZWRSZWNvdmVyeSk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVy
OjpzZXRDYWNoZWRSZWNvdmVyeSk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpz
cGlsbCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjplbWl0RGVsdGFDaGVjayk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlRm9yU2xvd1BhdGgpOgor
ICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6cHJlcGFyZUZvclRhaWxDYWxsKToKKyAg
ICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OnRyeVdyaXRlcyk6CisgICAgICAgIChKU0M6
OkNhbGxGcmFtZVNodWZmbGVyOjpwZXJmb3JtU2FmZVdyaXRlcyk6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlQW55KToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1lU2h1
ZmZsZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5OjpDYWNoZWRSZWNv
dmVyeSk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5Ojp0YXJnZXRzKToKKyAgICAgICAg
KEpTQzo6Q2FjaGVkUmVjb3Zlcnk6OmFkZFRhcmdldCk6CisgICAgICAgIChKU0M6OkNhY2hlZFJl
Y292ZXJ5OjpyZW1vdmVUYXJnZXQpOgorICAgICAgICAoSlNDOjpDYWNoZWRSZWNvdmVyeTo6Y2xl
YXJUYXJnZXRzKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVjb3Zlcnk6OnNldFdhbnRlZEpTVmFs
dWVSZWdzKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVjb3Zlcnk6OnNldFdhbnRlZEZQUik6Cisg
ICAgICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5Ojpib3hpbmdSZXF1aXJlc0dQUik6CisgICAgICAg
IChKU0M6OkNhY2hlZFJlY292ZXJ5Ojpib3hpbmdSZXF1aXJlc0ZQUik6CisgICAgICAgIChKU0M6
OkNhY2hlZFJlY292ZXJ5OjpyZWNvdmVyeSk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5
OjpzZXRSZWNvdmVyeSk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5Ojp3YW50ZWRKU1Zh
bHVlUmVncyk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5Ojp3YW50ZWRGUFIpOgorICAg
ICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6bG9ja0dQUik6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZVNodWZmbGVyOjphY3F1aXJlR1BSKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1
ZmZsZXI6OnJlbGVhc2VHUFIpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c25h
cHNob3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c2V0Q2FsbGVlSlNWYWx1
ZVJlZ3MpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6YXNzdW1lQ2FsbGVlSXND
ZWxsKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmNhbkJveCk6CisgICAgICAg
IChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjplbnN1cmVCb3gpOgorICAgICAgICAoSlNDOjpDYWxs
RnJhbWVTaHVmZmxlcjo6ZW5zdXJlTG9hZCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZm
bGVyOjpjYW5Mb2FkQW5kQm94KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OnVw
ZGF0ZVJlY292ZXJ5KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmNsZWFyQ2Fj
aGVkUmVjb3ZlcnkpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6YWRkQ2FjaGVk
UmVjb3ZlcnkpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6bnVtTG9jYWxzKToK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmdldE9sZCk6CisgICAgICAgIChKU0M6
OkNhbGxGcmFtZVNodWZmbGVyOjpzZXRPbGQpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVm
Zmxlcjo6Zmlyc3RPbGQpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6bGFzdE9s
ZCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjppc1ZhbGlkT2xkKToKKyAgICAg
ICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmFyZ0NvdW50KToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lU2h1ZmZsZXI6OmdldE5ldyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVy
OjpzZXROZXcpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6YWRkTmV3KToKKyAg
ICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmZpcnN0TmV3KToKKyAgICAgICAgKEpTQzo6
Q2FsbEZyYW1lU2h1ZmZsZXI6Omxhc3ROZXcpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVm
Zmxlcjo6aXNWYWxpZE5ldyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpuZXdB
c09sZCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpnZXRGcmVlUmVnaXN0ZXIp
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6Z2V0RnJlZUdQUik6CisgICAgICAg
IChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpnZXRGcmVlRlBSKToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lU2h1ZmZsZXI6Omhhc0ZyZWVSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkNhbGxGcmFt
ZVNodWZmbGVyOjplbnN1cmVSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZm
bGVyOjplbnN1cmVHUFIpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6ZW5zdXJl
RlBSKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmFkZHJlc3NGb3JPbGQpOgor
ICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6aXNVbmRlY2lkZWQpOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6aXNTbG93UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxG
cmFtZVNodWZmbGVyOjphZGRyZXNzRm9yTmV3KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1
ZmZsZXI6OmRhbmdlckZyb250aWVyKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6
OmlzRGFuZ2VyTmV3KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OnVwZGF0ZURh
bmdlckZyb250aWVyKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6Omhhc09ubHlT
YWZlV3JpdGVzKToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHA6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6ZW1pdFN0b3JlKToKKyAgICAg
ICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXRCb3gpOgorICAgICAgICAoSlNDOjpDYWxs
RnJhbWVTaHVmZmxlcjo6ZW1pdExvYWQpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxl
cjo6Y2FuTG9hZCk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5Ojpsb2Fkc0ludG9GUFIp
OgorICAgICAgICAoSlNDOjpDYWNoZWRSZWNvdmVyeTo6bG9hZHNJbnRvR1BSKToKKyAgICAgICAg
KEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXREaXNwbGFjZSk6CisgICAgICAgICogaml0L0Nh
bGxGcmFtZVNodWZmbGVyNjQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1
ZmZsZXI6OmVtaXRTdG9yZSk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjplbWl0
Qm94KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXRMb2FkKToKKyAgICAg
ICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmNhbkxvYWQpOgorICAgICAgICAoSlNDOjpDYWNo
ZWRSZWNvdmVyeTo6bG9hZHNJbnRvRlBSKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVjb3Zlcnk6
OmxvYWRzSW50b0dQUik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjplbWl0RGlz
cGxhY2UpOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpj
b21waWxlT3BDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2Up
OgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6bGlua1BvbHltb3Jw
aGljQ2FsbCk6CisKIDIwMTUtMDktMTYgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5j
b20+CiAKICAgICAgICAgW0VTNl0gSW1wbGVtZW50IHRhaWwgY2FsbHMgaW4gdGhlIExMSW50IGFu
ZCBCYXNlbGluZSBKSVQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJl
dmlzaW9uIDE4OTg4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMzYwLDYgKzM2MCwxMCBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09V
UkNFUwogCiAgICAgaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKICAgICBqaXQvQmluYXJ5U3dpdGNo
LmNwcAorICAgIGppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAKKyAgICBqaXQvQ2FsbEZyYW1l
U2h1ZmZsZXIuY3BwCisgICAgaml0L0NhbGxGcmFtZVNodWZmbGVyMzJfNjQuY3BwCisgICAgaml0
L0NhbGxGcmFtZVNodWZmbGVyNjQuY3BwCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0aW9uRnV6
ei5jcHAKICAgICBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKICAgICBqaXQvRXhlY3V0YWJs
ZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxODk4ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC02MjAsNiArNjIwLDEwIEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnRl
cnByZXRlclxTdGFja1Zpc2l0b3IuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aml0XEFzc2VtYmx5SGVscGVycy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxq
aXRcQmluYXJ5U3dpdGNoLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxD
YWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxq
aXRcQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aml0XENhbGxGcmFtZVNodWZmbGVyMzJfNjQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5caml0XENhbGxGcmFtZVNodWZmbGVyNjQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5caml0XEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxqaXRcRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNw
cCIgLz4KQEAgLTE0MjAsNiArMTQyNCw4IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxp
bnRlcnByZXRlclxTdGFja1Zpc2l0b3IuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGppdFxBc3NlbWJseUhlbHBlcnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGpp
dFxCaW5hcnlTd2l0Y2guaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxDYWxs
RnJhbWVTaHVmZmxlRGF0YS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XENh
bGxGcmFtZVNodWZmbGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcQ0Nh
bGxIZWxwZXJzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcQ29tcGFjdEpJ
VENvZGVNYXAuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxFeGVjdXRhYmxl
QWxsb2NhdGlvbkZ1enouaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDE4OTg4NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ou
ZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtMzk2LDYgKzM5NiwxOCBAQAogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5caml0XEhvc3RDYWxsUmV0dXJuVmFsdWUuY3BwIj4KICAgICAgIDxGaWx0
ZXI+aml0PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxqaXRcQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwIj4KKyAgICAgIDxGaWx0ZXI+aml0PC9G
aWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRc
Q2FsbEZyYW1lU2h1ZmZsZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+CisgICAg
PC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcQ2FsbEZyYW1lU2h1
ZmZsZXIzMl82NC5jcHAiPgorICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29t
cGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxDYWxsRnJhbWVTaHVmZmxlcjY0
LmNwcCI+CisgICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVC5jcHAiPgogICAgICAgPEZpbHRlcj5qaXQ8
L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxODk4ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtOTczLDcg
Kzk3MywxMyBAQAogCQk2Mjc2NzMyNDFCNjgwQzFFMDBGRDlGMkUgLyogQ2FsbE1vZGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyNzY3MzIyMUI2ODBD
MUUwMEZEOUYyRSAvKiBDYWxsTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTYyRDJEMzhGMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJh
cmVEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDYyRDJEMzhEMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmNwcCAqLzsgfTsK
IAkJNjJEMkQzOTAxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURhdGEuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyRDJEMzhFMUFERjEwM0Yw
MDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNjJENzU1RDQxQjg0RkIzRDAwMTgwMUZBIC8qIENhbGxG
cmFtZVNodWZmbGVyNjQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNjJENzU1RDMxQjg0RkIzOTAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyNjQu
Y3BwICovOyB9OworCQk2MkQ3NTVENTFCODRGQjQwMDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZs
ZXIzMl82NC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2MkQ3NTVEMjFCODRGQjM5MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAg
Ki87IH07CisJCTYyRDc1NUQ2MUI4NEZCNDYwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MkQ3NTVE
MDFCODRGQjM5MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwICovOyB9OworCQk2MkQ3
NTVENzFCODRGQjRBMDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyRDc1NUQxMUI4NEZCMzkwMDE4MDFG
QSAvKiBDYWxsRnJhbWVTaHVmZmxlci5oICovOyB9OwogCQk2MkUzRDVGMDFCOEQwQjczMDBCODY4
QkIgLyogRGF0YUZvcm1hdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2MkUzRDVFRjFCOEQwQjczMDBCODY4QkIgLyogRGF0YUZvcm1hdC5jcHAgKi87
IH07CisJCTYyRUM5QkI2MUI3RUIwN0MwMDMwM0FEMSAvKiBDYWxsRnJhbWVTaHVmZmxlRGF0YS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MkVDOUJC
NDFCN0VCMDdDMDAzMDNBRDEgLyogQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwICovOyB9OworCQk2
MkVDOUJCNzFCN0VCMDdDMDAzMDNBRDEgLyogQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyRUM5QkI1MUI3RUIwN0Mw
MDMwM0FEMSAvKiBDYWxsRnJhbWVTaHVmZmxlRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTYyRjJBQTM3MUIwQkVERTMwMDYxMEM3QSAvKiBE
RkdMYXp5Tm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2MkE5QTI5RTFCMEJFRDQ4MDBCRDU0Q0EgLyogREZHTGF6eU5vZGUuY3BwICovOyB9Owog
CQk2MkYyQUEzODFCMEJFREUzMDA2MTBDN0EgLyogREZHTGF6eU5vZGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyQTlBMjlGMUIwQkVENDgwMEJENTRD
QSAvKiBERkdMYXp5Tm9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTY1MDdEMjlFMEU4NzFFNUUwMEQ3RDg5NiAvKiBKU1R5cGVJbmZvLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTA3RDI5NzBFODcx
RTRBMDBEN0Q4OTYgLyogSlNUeXBlSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0yNzgwLDcgKzI3ODYsMTMgQEAKIAkJNjJBOUEyOUYxQjBC
RUQ0ODAwQkQ1NENBIC8qIERGR0xhenlOb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0xhenlOb2RlLmg7IHBhdGggPSBkZmcvREZHTGF6eU5vZGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjJEMkQzOEQxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9u
UmFyZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRnVuY3Rp
b25SYXJlRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTYyRDJEMzhFMUFE
RjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZ1bmN0aW9uUmFyZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNjJENzU1RDAxQjg0RkIzOTAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGxGcmFtZVNodWZmbGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjJENzU1RDExQjg0RkIzOTAwMTgwMUZB
IC8qIENhbGxGcmFtZVNodWZmbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENhbGxGcmFtZVNodWZmbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTYyRDc1
NUQyMUI4NEZCMzkwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlcjMyXzY0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGxGcmFtZVNodWZmbGVyMzJfNjQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2MkQ3NTVEMzFCODRGQjM5MDAxODAxRkEg
LyogQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDYWxsRnJhbWVTaHVmZmxlcjY0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNjJFM0Q1RUYxQjhEMEI3MzAwQjg2OEJCIC8qIERhdGFGb3JtYXQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0YUZvcm1hdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTYyRUM5QkI0MUI3RUIwN0MwMDMwM0FEMSAvKiBDYWxsRnJhbWVT
aHVmZmxlRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxs
RnJhbWVTaHVmZmxlRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTYyRUM5
QkI1MUI3RUIwN0MwMDMwM0FEMSAvKiBDYWxsRnJhbWVTaHVmZmxlRGF0YS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsRnJhbWVTaHVmZmxlRGF0YS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk2NTA3RDI5NzBFODcxRTRBMDBEN0Q4OTYgLyogSlNUeXBlSW5m
by5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVJbmZvLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1MTEyMkU1MTQwNDY5QkEwMDJCMTAxRCAvKiB0ZXN0
UmVnRXhwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHRlc3RSZWdF
eHAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTExMjMwNTE0MDQ2QTRDMDAy
QjEwMUQgLyogdGVzdFJlZ0V4cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNp
dEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXgg
PSAwOyBwYXRoID0gdGVzdFJlZ0V4cDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKQEAgLTQwOTgsNiArNDExMCwxMiBAQAogCQkJCTBGMjRFNTNDMTdFQTlGNTkwMEFCQjIxNyAv
KiBBc3NlbWJseUhlbHBlcnMuaCAqLywKIAkJCQkwRjY0QjI2RjFBNzg0QkFGMDA2RTRFNjYgLyog
QmluYXJ5U3dpdGNoLmNwcCAqLywKIAkJCQkwRjY0QjI3MDFBNzg0QkFGMDA2RTRFNjYgLyogQmlu
YXJ5U3dpdGNoLmggKi8sCisJCQkJNjJFQzlCQjQxQjdFQjA3QzAwMzAzQUQxIC8qIENhbGxGcmFt
ZVNodWZmbGVEYXRhLmNwcCAqLywKKwkJCQk2MkVDOUJCNTFCN0VCMDdDMDAzMDNBRDEgLyogQ2Fs
bEZyYW1lU2h1ZmZsZURhdGEuaCAqLywKKwkJCQk2MkQ3NTVEMDFCODRGQjM5MDAxODAxRkEgLyog
Q2FsbEZyYW1lU2h1ZmZsZXIuY3BwICovLAorCQkJCTYyRDc1NUQxMUI4NEZCMzkwMDE4MDFGQSAv
KiBDYWxsRnJhbWVTaHVmZmxlci5oICovLAorCQkJCTYyRDc1NUQyMUI4NEZCMzkwMDE4MDFGQSAv
KiBDYWxsRnJhbWVTaHVmZmxlcjMyXzY0LmNwcCAqLywKKwkJCQk2MkQ3NTVEMzFCODRGQjM5MDAx
ODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAgKi8sCiAJCQkJMEYyNEU1M0QxN0VBOUY1
OTAwQUJCMjE3IC8qIENDYWxsSGVscGVycy5oICovLAogCQkJCTBGRDgyRTM3MTQxQUIxNDIwMDE3
OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oICovLAogCQkJCTBGRjA1NEY3MUFDMzVCNDQwMEU1
QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouY3BwICovLApAQCAtNTk2NSw2ICs1OTgz
LDcgQEAKIAkJCQlDNEY0QjZGNDFBMDVDOTQ0MDA1Q0FCNzYgLyogY3BwX2dlbmVyYXRvci5weSBp
biBIZWFkZXJzICovLAogCQkJCUE1MzI0Mzk0MTg1Njk3MDkwMDJFRDY5MiAvKiBnZW5lcmF0ZS1j
b21iaW5lZC1pbnNwZWN0b3ItanNvbi5weSBpbiBIZWFkZXJzICovLAogCQkJCUE1ODQwRTI3MTg3
Qzk4MUUwMDg0M0IxMCAvKiBjc3NtaW4ucHkgaW4gSGVhZGVycyAqLywKKwkJCQk2MkQ3NTVENzFC
ODRGQjRBMDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1RUE3MTA0MTlGNkRFNzIwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0
Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovLAogCQkJCUM0NzAzQ0Q1MTkyODQ0
Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTVFQTcxMDUxOUY2REU3NDAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9o
ZWFkZXIucHkgaW4gSGVhZGVycyAqLywKQEAgLTYxMjUsNiArNjE0NCw3IEBACiAJCQkJMEYzQjNB
MjgxNTQ0Qzk5NzAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3N0E0MjQwMTdBMEJCRkQwMEE4REI4MSAvKiBERkdDbG9iYmVyaXplLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNzdBNDI0MjE3QTBCQkZEMDBBOERCODEgLyogREZHQ2xvYmJl
clNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNjJFQzlCQjcxQjdFQjA3QzAwMzAzQUQxIC8qIENh
bGxGcmFtZVNodWZmbGVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdCMjk0RDE0QzNDRDRD
MDA3QzNEQjEgLyogREZHQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEEzMjE3MEQ0
MEJGMDBCQjcyMkMgLyogREZHQ29tbW9uRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzOEIw
MTgxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5LmggaW4gSGVhZGVycyAqLywK
QEAgLTc0NzcsNiArNzQ5Nyw3IEBACiAJCQkJMEZGMEYxOUQxNkI3MkEwODAwNURGOTVCIC8qIERG
R0NvbW1vbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEzMTE3MEQ0MEJGMDBCQjcyMkMg
LyogREZHQ29tbW9uRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjM4QjAxNzE3Q0ZFNzU1
MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25LZXkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNjJF
QzlCQjYxQjdFQjA3QzAwMzAzQUQxIC8qIENhbGxGcmFtZVNodWZmbGVEYXRhLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGMzhCMDE5MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1v
ZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTFCOUUyM0IxQjRFMEQ2NzAwQkM3RkVEIC8qIElu
dGxDb2xsYXRvckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGM0IzQTFBMTUz
RTY4RjIwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTc1MzIsNiArNzU1Myw3IEBACiAJCQkJMEZGMEYxOUMxNkI3MkEwMzAwNURGOTVCIC8q
IERGR05vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZBNTgxQkExNTBFOTUyQzAwQjlBMkQ5
IC8qIERGR05vZGVGbGFncy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVDOURDRjEzMjhERjgy
MDAyQjJBRDcgLyogREZHT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2MkQ3NTVE
NjFCODRGQjQ2MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTdEODlDRkQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5
c2lzUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFNTYxNDFEQUYwODAwMTc5Qzk0
IC8qIERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDhBMzI1MTdENTFGNTcw
MENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTc2NjIsNiArNzY4NCw3IEBACiAJCQkJN0IwMjQ3NTYxQjg2ODJFMTAwNTQyNDQwIC8q
IFdBU01GdW5jdGlvblBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkYwRjE5RjE2Qjcy
QTE3MDA1REY5NUIgLyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1MkIzMTBGRDE5NzRBRTg3MDA4MDg1N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTYyRDc1NUQ1MUI4NEZCNDAwMDE4MDFGQSAvKiBDYWxs
RnJhbWVTaHVmZmxlcjMyXzY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUNDMTA3RUMz
NzYwMDQyN0E0OCAvKiBGdW5jdGlvblByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjY0QjI3MTFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGNzY2RDJGMTVBOERDRTAwMDhGMzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC03Nzg1LDYgKzc4MDgsNyBAQAogCQkJCUE3MjcwMDkwMERB
QzZCQkMwMEU1NDhENyAvKiBKU05vdEFuT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
N0YzOUQ0MTA3RUMzNzYwMDQyN0E0OCAvKiBKU09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDgyQjdFNDBBNDMwNzYwMDA1MTdDRkMgLyogSlNPYmplY3RSZWYuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJNjJENzU1RDQxQjg0RkIzRDAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyNjQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdGOTkzNjAwRkQ3MzI1MTAwQTBCMkQwIC8qIEpTT05P
YmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGQjZDMzgxQUY0OEREQzAwREIxQkY3IC8q
IFR5cGVvZlR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTVGNkU2OTUwRTVCNUY5NzAwOTFF
ODYwIC8qIEpTUHJvZmlsZXJQcml2YXRlLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaAkocmV2aXNp
b24gMTg5ODgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2Vt
Ymxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NTMsMTEgKzQ1MywxMSBAQCBwdWJsaWM6CiAgICAg
dHlwZWRlZiBBUk1SZWdpc3RlcnM6OkZQUXVhZFJlZ2lzdGVySUQgRlBRdWFkUmVnaXN0ZXJJRDsK
ICAgICB0eXBlZGVmIEZQRG91YmxlUmVnaXN0ZXJJRCBGUFJlZ2lzdGVySUQ7CiAgICAgCi0gICAg
c3RhdGljIFJlZ2lzdGVySUQgZmlyc3RSZWdpc3RlcigpIHsgcmV0dXJuIEFSTVJlZ2lzdGVyczo6
cjA7IH0KLSAgICBzdGF0aWMgUmVnaXN0ZXJJRCBsYXN0UmVnaXN0ZXIoKSB7IHJldHVybiBBUk1S
ZWdpc3RlcnM6OnIxMzsgfQotICAgIAotICAgIHN0YXRpYyBGUFJlZ2lzdGVySUQgZmlyc3RGUFJl
Z2lzdGVyKCkgeyByZXR1cm4gQVJNUmVnaXN0ZXJzOjpkMDsgfQotICAgIHN0YXRpYyBGUFJlZ2lz
dGVySUQgbGFzdEZQUmVnaXN0ZXIoKSB7IHJldHVybiBBUk1SZWdpc3RlcnM6OmQzMTsgfQorICAg
IHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBmaXJzdFJlZ2lzdGVyKCkgeyByZXR1cm4gQVJN
UmVnaXN0ZXJzOjpyMDsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBsYXN0UmVn
aXN0ZXIoKSB7IHJldHVybiBBUk1SZWdpc3RlcnM6OnIxMzsgfQorCisgICAgc3RhdGljIGNvbnN0
ZXhwciBGUFJlZ2lzdGVySUQgZmlyc3RGUFJlZ2lzdGVyKCkgeyByZXR1cm4gQVJNUmVnaXN0ZXJz
OjpkMDsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgRlBSZWdpc3RlcklEIGxhc3RGUFJlZ2lzdGVy
KCkgeyByZXR1cm4gQVJNUmVnaXN0ZXJzOjpkMzE7IH0KIAogICAgIC8vIChIUywgTE8sIEhJLCBM
UykgLT4gKEFFLCBCLCBBLCBCRSkKICAgICAvLyAoVlMsIFZDKSAtPiAoTywgTk8pCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fib3J0UmVhc29uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYm9ydFJlYXNvbi5oCShyZXZpc2lv
biAxODk4ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fib3J0UmVhc29u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDcgQEAgZW51bSBBYm9ydFJlYXNvbiB7CiAg
ICAgSklUTm90U3VwcG9ydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDI2
MCwKICAgICBKSVRPZmZzZXRJc05vdE91dE9mTGluZSAgICAgICAgICAgICAgICAgICAgICAgICAg
ID0gMjcwLAogICAgIEpJVFVuY291Z2h0RXhjZXB0aW9uQWZ0ZXJDYWxsICAgICAgICAgICAgICAg
ICAgICAgPSAyNzUsCisgICAgSklUVW5leHBlY3RlZENhbGxGcmFtZVNpemUgICAgICAgICAgICAg
ICAgICAgICAgICA9IDI3NywKICAgICBKSVRVbnJlYXNvbmFibGVMb29wSGludEp1bXBUYXJnZXQg
ICAgICAgICAgICAgICAgID0gMjgwLAogICAgIFJQV1VucmVhc29uYWJsZUp1bXBUYXJnZXQgICAg
ICAgICAgICAgICAgICAgICAgICAgPSAyOTAsCiAgICAgUmVwYXRjaEluZWZmZWN0aXZlV2F0Y2hw
b2ludCAgICAgICAgICAgICAgICAgICAgICA9IDMwMCwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDE4OTg4NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5
KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBDYWxsTGlua0luZm9faAogI2RlZmluZSBDYWxs
TGlua0luZm9faAogCisjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaCIKICNpbmNsdWRl
ICJDYWxsTW9kZS5oIgogI2luY2x1ZGUgIkNvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIkNvZGVT
cGVjaWFsaXphdGlvbktpbmQuaCIKQEAgLTMzOCw2ICszMzksMTYgQEAgcHVibGljOgogCiAgICAg
dm9pZCB2aXNpdFdlYWsoVk0mKTsKIAorICAgIHZvaWQgc2V0RnJhbWVTaHVmZmxlRGF0YShjb25z
dCBDYWxsRnJhbWVTaHVmZmxlRGF0YSYgc2h1ZmZsZURhdGEpCisgICAgeworICAgICAgICBtX2Zy
YW1lU2h1ZmZsZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPihz
aHVmZmxlRGF0YSk7CisgICAgfQorCisgICAgY29uc3QgQ2FsbEZyYW1lU2h1ZmZsZURhdGEqIGZy
YW1lU2h1ZmZsZURhdGEoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZnJhbWVTaHVmZmxlRGF0
YS5nZXQoKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgbV9j
YWxsUmV0dXJuTG9jYXRpb247CiAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIG1faG90UGF0
aEJlZ2luOwpAQCAtMzQ2LDYgKzM1Nyw3IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPEpT
RnVuY3Rpb24+IG1fbGFzdFNlZW5DYWxsZWU7CiAgICAgUmVmUHRyPFBvbHltb3JwaGljQ2FsbFN0
dWJSb3V0aW5lPiBtX3N0dWI7CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3Nsb3dTdHVi
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gbV9mcmFtZVNodWZm
bGVEYXRhOwogICAgIHVuc2lnbmVkIG1fcmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIDogMTsgLy8g
UmVhbCB0eXBlIGlzIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZQogICAgIGJvb2wgbV9oYXNTZWVu
U2hvdWxkUmVwYXRjaCA6IDE7CiAgICAgYm9vbCBtX2hhc1NlZW5DbG9zdXJlIDogMTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAkocmV2
aXNpb24gMTg5ODgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVj
b3ZlcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lmIEVOQUJMRShKSVQp
CiAjaW5jbHVkZSAiR1BSSW5mby5oIgogI2luY2x1ZGUgIkZQUkluZm8uaCIKKyNpbmNsdWRlICJS
ZWcuaCIKICNlbmRpZgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJNYWNyb0Fz
c2VtYmxlci5oIgpAQCAtODMsNiArODQsMTggQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaXNT
ZXQoKSBjb25zdCB7IHJldHVybiBtX3RlY2huaXF1ZSAhPSBEb250S25vdzsgfQogICAgIGJvb2wg
b3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KKworI2lmIEVOQUJMRShKSVQp
CisgICAgc3RhdGljIFZhbHVlUmVjb3ZlcnkgaW5SZWdpc3RlcihSZWcgcmVnLCBEYXRhRm9ybWF0
IGRhdGFGb3JtYXQpCisgICAgeworICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAgICAgICAg
ICByZXR1cm4gaW5HUFIocmVnLmdwcigpLCBkYXRhRm9ybWF0KTsKKworICAgICAgICBBU1NFUlQo
cmVnLmlzRlBSKCkpOworICAgICAgICByZXR1cm4gaW5GUFIocmVnLmZwcigpLCBkYXRhRm9ybWF0
KTsKKyAgICB9CisjZW5kaWYKKwogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7
IHJldHVybiBpc1NldCgpOyB9CiAgICAgCiAgICAgc3RhdGljIFZhbHVlUmVjb3ZlcnkgaW5HUFIo
TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgZ3ByLCBEYXRhRm9ybWF0IGRhdGFGb3JtYXQpCkBA
IC0zMDAsNiArMzEzLDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBtX3RlY2hu
aXF1ZSA9PSBJblBhaXI7CiAgICAgfQorCisgICAgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW5KU1ZhbHVlUmVncygpKTsKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWVSZWdzKHRhZ0dQUigpLCBwYXlsb2FkR1BSKCkpOworICAgIH0KICNlbHNl
CiAgICAgYm9vbCBpc0luSlNWYWx1ZVJlZ3MoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgJKHJldmlzaW9uIDE4OTg4
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAkod29y
a2luZyBjb3B5KQpAQCAtMzc4LDYgKzM3OCwyOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBt
X3VzZUNvdW50OwogICAgIH0KIAorICAgIFZhbHVlUmVjb3ZlcnkgcmVjb3ZlcnkoVmlydHVhbFJl
Z2lzdGVyIHNwaWxsU2xvdCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2lzQ29uc3RhbnQp
CisgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQobV9ub2RlLT5jb25z
dGFudCgpLT52YWx1ZSgpKTsKKworICAgICAgICBpZiAobV9yZWdpc3RlckZvcm1hdCA9PSBEYXRh
Rm9ybWF0RG91YmxlKQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmluRlBSKHUu
ZnByLCBEYXRhRm9ybWF0RG91YmxlKTsKKworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAg
IGlmIChtX3JlZ2lzdGVyRm9ybWF0ICYgRGF0YUZvcm1hdEpTKSB7CisgICAgICAgICAgICBpZiAo
bV9yZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SlMpCisgICAgICAgICAgICAgICAgcmV0dXJu
IFZhbHVlUmVjb3Zlcnk6OmluUGFpcih1LnYudGFnR1BSLCB1LnYucGF5bG9hZEdQUik7CisgICAg
ICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6aW5HUFIodS52LnBheWxvYWRHUFIsIHN0YXRp
Y19jYXN0PERhdGFGb3JtYXQ+KG1fcmVnaXN0ZXJGb3JtYXQgJiB+RGF0YUZvcm1hdEpTKSk7Cisg
ICAgICAgIH0KKyNlbmRpZgorICAgICAgICBpZiAobV9yZWdpc3RlckZvcm1hdCkKKyAgICAgICAg
ICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjppbkdQUih1LmdwciwgbV9yZWdpc3RlckZvcm1hdCk7
CisKKyAgICAgICAgQVNTRVJUKG1fc3BpbGxGb3JtYXQpOworCisgICAgICAgIHJldHVybiBWYWx1
ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soc3BpbGxTbG90LCBtX3NwaWxsRm9ybWF0KTsK
KyAgICB9CisKIHByaXZhdGU6CiAgICAgdm9pZCBhcHBlbmRCaXJ0aChWYXJpYWJsZUV2ZW50U3Ry
ZWFtJiBzdHJlYW0pCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxs
RnJhbWVTaHVmZmxlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlRGF0
YS5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworI2lmIFVTRShKU1ZBTFVF
NjQpCisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVy
cyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlUmVn
aXN0ZXJzIHsgUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVycygpIH07CisgICAgUmVn
aXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucyA9IGNvZGVCbG9jay0+Y2Fs
bGVlU2F2ZVJlZ2lzdGVycygpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWdpc3Rl
clNhdmVMb2NhdGlvbnMtPnNpemUoKTsgKytpKSB7CisgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQg
ZW50cnkgeyByZWdpc3RlclNhdmVMb2NhdGlvbnMtPmF0KGkpIH07CisgICAgICAgIGlmICghY2Fs
bGVlU2F2ZVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNhdmVTbG90IHsgZW50cnkub2Zmc2V0QXNJbmRl
eCgpIH07CisgICAgICAgIHJlZ2lzdGVyc1tlbnRyeS5yZWcoKV0KKyAgICAgICAgICAgID0gVmFs
dWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKHNhdmVTbG90LCBEYXRhRm9ybWF0SlMpOwor
ICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA9IFJlZzo6Zmlyc3QoKTsgcmVnIDw9IFJlZzo6bGFz
dCgpOyByZWcgPSByZWcubmV4dCgpKSB7CisgICAgICAgIGlmICghY2FsbGVlU2F2ZVJlZ2lzdGVy
cy5nZXQocmVnKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChyZWdpc3Rl
cnNbcmVnXSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHJlZ2lzdGVyc1tyZWdd
ID0gVmFsdWVSZWNvdmVyeTo6aW5SZWdpc3RlcihyZWcsIERhdGFGb3JtYXRKUyk7CisgICAgfQor
fQorCisjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxs
RnJhbWVTaHVmZmxlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQ2FsbEZyYW1lU2h1ZmZsZURhdGFfaAorI2RlZmluZSBDYWxsRnJhbWVTaHVmZmxl
RGF0YV9oCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiUmVnaXN0ZXJNYXAuaCIKKyNp
bmNsdWRlICJWYWx1ZVJlY292ZXJ5LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgQ2Fs
bEZyYW1lU2h1ZmZsZURhdGEgeworICAgIHVuc2lnbmVkIG51bUxvY2FsczsKKyAgICBWYWx1ZVJl
Y292ZXJ5IGNhbGxlZTsKKyAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeT4gYXJnczsKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgIFJlZ2lzdGVyTWFwPFZhbHVlUmVjb3Zlcnk+IHJlZ2lzdGVyczsKKwor
ICAgIHZvaWQgc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKENvZGVCbG9jayopOworI2VuZGlmCit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyNlbmRp
ZiAvLyBDYWxsRnJhbWVTaHVmZmxlRGF0YV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NhbGxGcmFtZVNodWZmbGVyMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyMzJfNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbGxG
cmFtZVNodWZmbGVyLmgiCisKKyNpZiBFTkFCTEUoSklUKSAmJiBVU0UoSlNWQUxVRTMyXzY0KQor
CisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiRGF0YUZvcm1hdC5oIgorI2lu
Y2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitEYXRhRm9y
bWF0IENhbGxGcmFtZVNodWZmbGVyOjplbWl0U3RvcmUoQ2FjaGVkUmVjb3ZlcnkmIGxvY2F0aW9u
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBhZGRyZXNzKQoreworICAgIEFTU0VSVCghbG9jYXRp
b24ucmVjb3ZlcnkoKS5pc0luSlNTdGFjaygpKTsKKworICAgIHN3aXRjaCAobG9jYXRpb24ucmVj
b3ZlcnkoKS50ZWNobmlxdWUoKSkgeworICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CisgICAg
ICAgIG1faml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJ
bnQzMlRhZyksCisgICAgICAgICAgICBhZGRyZXNzLndpdGhPZmZzZXQoVGFnT2Zmc2V0KSk7Cisg
ICAgICAgIG1faml0LnN0b3JlMzIobG9jYXRpb24ucmVjb3ZlcnkoKS5ncHIoKSwgYWRkcmVzcy53
aXRoT2Zmc2V0KFBheWxvYWRPZmZzZXQpKTsKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRJbnQz
MjsKKyAgICBjYXNlIFVuYm94ZWRDZWxsSW5HUFI6CisgICAgICAgIG1faml0LnN0b3JlMzIoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwKKyAgICAgICAgICAg
IGFkZHJlc3Mud2l0aE9mZnNldChUYWdPZmZzZXQpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihs
b2NhdGlvbi5yZWNvdmVyeSgpLmdwcigpLCBhZGRyZXNzLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNl
dCkpOworICAgICAgICByZXR1cm4gRGF0YUZvcm1hdENlbGw7CisgICAgY2FzZSBDb25zdGFudDoK
KyAgICAgICAgbV9qaXQuc3RvcmVUcnVzdGVkVmFsdWUobG9jYXRpb24ucmVjb3ZlcnkoKS5jb25z
dGFudCgpLCBhZGRyZXNzKTsKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRKUzsKKyAgICBjYXNl
IEluUGFpcjoKKyAgICAgICAgbV9qaXQuc3RvcmVWYWx1ZShsb2NhdGlvbi5yZWNvdmVyeSgpLmpz
VmFsdWVSZWdzKCksIGFkZHJlc3MpOworICAgICAgICByZXR1cm4gRGF0YUZvcm1hdEpTOworICAg
IGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQUjoKKyAgICAgICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpLAorICAgICAgICAgICAg
YWRkcmVzcy53aXRoT2Zmc2V0KFRhZ09mZnNldCkpOworICAgICAgICBtX2ppdC5zdG9yZTMyKGxv
Y2F0aW9uLnJlY292ZXJ5KCkuZ3ByKCksIGFkZHJlc3Mud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0
KSk7CisgICAgICAgIHJldHVybiBEYXRhRm9ybWF0Qm9vbGVhbjsKKyAgICBjYXNlIEluRlBSOgor
ICAgIGNhc2UgVW5ib3hlZERvdWJsZUluRlBSOgorICAgICAgICBtX2ppdC5zdG9yZURvdWJsZShs
b2NhdGlvbi5yZWNvdmVyeSgpLmZwcigpLCBhZGRyZXNzKTsKKyAgICAgICAgcmV0dXJuIERhdGFG
b3JtYXRKUzsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH0KK30KKwordm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6ZW1pdEJveChDYWNoZWRS
ZWNvdmVyeSYgbG9jYXRpb24pCit7CisgICAgLy8gTm90aGluZyB0byBkbywgd2UncmUgZ29vZCEg
SlNWYWx1ZXMgYW5kIGRvdWJsZXMgY2FuIGJlIHN0b3JlZAorICAgIC8vIGltbWVkaWF0ZWx5LCBh
bmQgb3RoZXIgZm9ybWF0cyBkb24ndCBuZWVkIGFueSB0cmFuc2Zvcm1hdGlvbiAtCisgICAgLy8g
anVzdCBzdG9yaW5nIGEgY29uc3RhbnQgdGFnIHNlcGFyYXRlbHkuCisgICAgQVNTRVJUX1VOVVNF
RChsb2NhdGlvbiwgY2FuQm94KGxvY2F0aW9uKSk7Cit9CisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZs
ZXI6OmVtaXRMb2FkKENhY2hlZFJlY292ZXJ5JiBsb2NhdGlvbikKK3sKKyAgICBpZiAoIWxvY2F0
aW9uLnJlY292ZXJ5KCkuaXNJbkpTU3RhY2soKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIiAgICogTG9hZGluZyAiLCBsb2NhdGlvbi5yZWNv
dmVyeSgpLCAiIGludG8gIik7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyB7IGxvY2F0aW9uLnJl
Y292ZXJ5KCkudmlydHVhbFJlZ2lzdGVyKCkgfTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyBhZGRyZXNzIHsgYWRkcmVzc0Zvck9sZChyZWcpIH07CisKKyAgICBib29sIHRyeUZQUiB7IHRy
dWUgfTsKKyAgICBKU1ZhbHVlUmVncyB3YW50ZWRKU1ZhbHVlUmVncyB7IGxvY2F0aW9uLndhbnRl
ZEpTVmFsdWVSZWdzKCkgfTsKKyAgICBpZiAod2FudGVkSlNWYWx1ZVJlZ3MpIHsKKyAgICAgICAg
aWYgKHdhbnRlZEpTVmFsdWVSZWdzLnBheWxvYWRHUFIoKSAhPSBJbnZhbGlkR1BSUmVnCisgICAg
ICAgICAgICAmJiAhbV9yZWdpc3RlcnNbd2FudGVkSlNWYWx1ZVJlZ3MucGF5bG9hZEdQUigpXQor
ICAgICAgICAgICAgJiYgIW1fbG9ja2VkUmVnaXN0ZXJzLmdldCh3YW50ZWRKU1ZhbHVlUmVncy5w
YXlsb2FkR1BSKCkpKQorICAgICAgICAgICAgdHJ5RlBSID0gZmFsc2U7CisgICAgICAgIGlmICh3
YW50ZWRKU1ZhbHVlUmVncy50YWdHUFIoKSAhPSBJbnZhbGlkR1BSUmVnCisgICAgICAgICAgICAm
JiAhbV9yZWdpc3RlcnNbd2FudGVkSlNWYWx1ZVJlZ3MudGFnR1BSKCldCisgICAgICAgICAgICAm
JiAhbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHdhbnRlZEpTVmFsdWVSZWdzLnRhZ0dQUigpKSkKKyAg
ICAgICAgICAgIHRyeUZQUiA9IGZhbHNlOworICAgIH0KKworICAgIGlmICh0cnlGUFIgJiYgbG9j
YXRpb24ubG9hZHNJbnRvRlBSKCkpIHsKKyAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IGxvY2F0
aW9uLndhbnRlZEZQUigpOworICAgICAgICBpZiAocmVzdWx0RlBSID09IEludmFsaWRGUFJSZWcg
fHwgbV9yZWdpc3RlcnNbcmVzdWx0RlBSXSB8fCBtX2xvY2tlZFJlZ2lzdGVycy5nZXQocmVzdWx0
RlBSKSkKKyAgICAgICAgICAgIHJlc3VsdEZQUiA9IGdldEZyZWVGUFIoKTsKKyAgICAgICAgaWYg
KHJlc3VsdEZQUiAhPSBJbnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICBtX2ppdC5sb2FkRG91
YmxlKGFkZHJlc3MsIHJlc3VsdEZQUik7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGRhdGFGb3Jt
YXQgPSBEYXRhRm9ybWF0SlM7CisgICAgICAgICAgICBpZiAobG9jYXRpb24ucmVjb3ZlcnkoKS5k
YXRhRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkKKyAgICAgICAgICAgICAgICBkYXRhRm9y
bWF0ID0gRGF0YUZvcm1hdERvdWJsZTsKKyAgICAgICAgICAgIHVwZGF0ZVJlY292ZXJ5KGxvY2F0
aW9uLCAKKyAgICAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkZQUihyZXN1bHRGUFIsIGRh
dGFGb3JtYXQpKTsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRh
dGFMb2cobG9jYXRpb24ucmVjb3ZlcnkoKSwgIlxuIik7CisgICAgICAgICAgICBpZiAocmVnID09
IG5ld0FzT2xkKGRhbmdlckZyb250aWVyKCkpKQorICAgICAgICAgICAgICAgIHVwZGF0ZURhbmdl
ckZyb250aWVyKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAobG9jYXRpb24ubG9hZHNJbnRvR1BSKCkpIHsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiB7IHdhbnRlZEpTVmFsdWVSZWdzLnBheWxvYWRHUFIoKSB9OworICAgICAgICBpZiAocmVzdWx0
R1BSID09IEludmFsaWRHUFJSZWcgfHwgbV9yZWdpc3RlcnNbcmVzdWx0R1BSXSB8fCBtX2xvY2tl
ZFJlZ2lzdGVycy5nZXQocmVzdWx0R1BSKSkKKyAgICAgICAgICAgIHJlc3VsdEdQUiA9IGdldEZy
ZWVHUFIoKTsKKyAgICAgICAgQVNTRVJUKHJlc3VsdEdQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAg
ICAgICAgbV9qaXQubG9hZFB0cihhZGRyZXNzLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCksIHJl
c3VsdEdQUik7CisgICAgICAgIHVwZGF0ZVJlY292ZXJ5KGxvY2F0aW9uLCAKKyAgICAgICAgICAg
IFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlc3VsdEdQUiwgbG9jYXRpb24ucmVjb3ZlcnkoKS5kYXRh
Rm9ybWF0KCkpKTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKGxv
Y2F0aW9uLnJlY292ZXJ5KCksICJcbiIpOworICAgICAgICBpZiAocmVnID09IG5ld0FzT2xkKGRh
bmdlckZyb250aWVyKCkpKQorICAgICAgICAgICAgdXBkYXRlRGFuZ2VyRnJvbnRpZXIoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChsb2NhdGlvbi5yZWNvdmVyeSgpLnRl
Y2huaXF1ZSgpID09IERpc3BsYWNlZEluSlNTdGFjayk7CisgICAgR1BSUmVnIHBheWxvYWRHUFIg
eyB3YW50ZWRKU1ZhbHVlUmVncy5wYXlsb2FkR1BSKCkgfTsKKyAgICBHUFJSZWcgdGFnR1BSIHsg
d2FudGVkSlNWYWx1ZVJlZ3MudGFnR1BSKCkgfTsKKyAgICBpZiAocGF5bG9hZEdQUiA9PSBJbnZh
bGlkR1BSUmVnIHx8IG1fcmVnaXN0ZXJzW3BheWxvYWRHUFJdIHx8IG1fbG9ja2VkUmVnaXN0ZXJz
LmdldChwYXlsb2FkR1BSKSkKKyAgICAgICAgcGF5bG9hZEdQUiA9IGdldEZyZWVHUFIoKTsKKyAg
ICBtX2xvY2tlZFJlZ2lzdGVycy5zZXQocGF5bG9hZEdQUik7CisgICAgaWYgKHRhZ0dQUiA9PSBJ
bnZhbGlkR1BSUmVnIHx8IG1fcmVnaXN0ZXJzW3RhZ0dQUl0gfHwgbV9sb2NrZWRSZWdpc3RlcnMu
Z2V0KHRhZ0dQUikpCisgICAgICAgIHRhZ0dQUiA9IGdldEZyZWVHUFIoKTsKKyAgICBtX2xvY2tl
ZFJlZ2lzdGVycy5jbGVhcihwYXlsb2FkR1BSKTsKKyAgICBBU1NFUlQocGF5bG9hZEdQUiAhPSBJ
bnZhbGlkR1BSUmVnICYmIHRhZ0dQUiAhPSBJbnZhbGlkR1BSUmVnICYmIHRhZ0dQUiAhPSBwYXls
b2FkR1BSKTsKKyAgICBtX2ppdC5sb2FkUHRyKGFkZHJlc3Mud2l0aE9mZnNldChQYXlsb2FkT2Zm
c2V0KSwgcGF5bG9hZEdQUik7CisgICAgbV9qaXQubG9hZFB0cihhZGRyZXNzLndpdGhPZmZzZXQo
VGFnT2Zmc2V0KSwgdGFnR1BSKTsKKyAgICB1cGRhdGVSZWNvdmVyeShsb2NhdGlvbiwgCisgICAg
ICAgIFZhbHVlUmVjb3Zlcnk6OmluUGFpcih0YWdHUFIsIHBheWxvYWRHUFIpKTsKKyAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZyhsb2NhdGlvbi5yZWNvdmVyeSgpLCAiXG4iKTsKKyAg
ICBpZiAocmVnID09IG5ld0FzT2xkKGRhbmdlckZyb250aWVyKCkpKQorICAgICAgICB1cGRhdGVE
YW5nZXJGcm9udGllcigpOworfQorCitib29sIENhbGxGcmFtZVNodWZmbGVyOjpjYW5Mb2FkKENh
Y2hlZFJlY292ZXJ5JiBsb2NhdGlvbikKK3sKKyAgICBpZiAoIWxvY2F0aW9uLnJlY292ZXJ5KCku
aXNJbkpTU3RhY2soKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAobG9jYXRpb24u
bG9hZHNJbnRvRlBSKCkgJiYgZ2V0RnJlZUZQUigpICE9IEludmFsaWRGUFJSZWcpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgaWYgKGxvY2F0aW9uLmxvYWRzSW50b0dQUigpICYmIGdldEZy
ZWVHUFIoKSAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlm
IChsb2NhdGlvbi5yZWNvdmVyeSgpLnRlY2huaXF1ZSgpID09IERpc3BsYWNlZEluSlNTdGFjaykg
eworICAgICAgICBHUFJSZWcgcGF5bG9hZEdQUiB7IGdldEZyZWVHUFIoKSB9OworICAgICAgICBp
ZiAocGF5bG9hZEdQUiA9PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBtX2xvY2tlZFJlZ2lzdGVycy5zZXQocGF5bG9hZEdQUik7CisgICAgICAgIEdQ
UlJlZyB0YWdHUFIgeyBnZXRGcmVlR1BSKCkgfTsKKyAgICAgICAgbV9sb2NrZWRSZWdpc3RlcnMu
Y2xlYXIocGF5bG9hZEdQUik7CisgICAgICAgIHJldHVybiB0YWdHUFIgIT0gSW52YWxpZEdQUlJl
ZzsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFdlIHByZWZlciBsb2FkaW5n
IGRvdWJsZXMgYW5kIHVuZGV0ZXJtaW5lZCBKU1ZhbHVlcyBpbnRvIEZQUnMKKy8vIGJlY2F1c2Ug
aXQgd291bGQgb3RoZXJ3aXNlIHVzZSB1cCB0d28gR1BScy4KK2Jvb2wgQ2FjaGVkUmVjb3Zlcnk6
OmxvYWRzSW50b0ZQUigpIGNvbnN0Cit7CisgICAgc3dpdGNoIChyZWNvdmVyeSgpLnRlY2huaXF1
ZSgpKSB7CisgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgY2FzZSBEaXNw
bGFjZWRJbkpTU3RhY2s6CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworLy8gSW50ZWdlcnMsIGJvb2xlYW5zIGFu
ZCBjZWxscyBjYW4gYmUgbG9hZGVkIGludG8gYSBzaW5nbGUgR1BSCitib29sIENhY2hlZFJlY292
ZXJ5Ojpsb2Fkc0ludG9HUFIoKSBjb25zdAoreworICAgIHN3aXRjaCAocmVjb3ZlcnkoKS50ZWNo
bmlxdWUoKSkgeworICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgY2FzZSBC
b29sZWFuRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFj
azoKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorfQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVyOjplbWl0RGlzcGxhY2Uo
Q2FjaGVkUmVjb3ZlcnkmIGxvY2F0aW9uKQoreworICAgIEFTU0VSVChsb2NhdGlvbi5yZWNvdmVy
eSgpLmlzSW5SZWdpc3RlcnMoKSk7CisgICAgSlNWYWx1ZVJlZ3Mgd2FudGVkSlNWYWx1ZVJlZ3Mg
eyBsb2NhdGlvbi53YW50ZWRKU1ZhbHVlUmVncygpIH07CisgICAgQVNTRVJUKHdhbnRlZEpTVmFs
dWVSZWdzKTsgLy8gV2UgZG9uJ3Qgc3VwcG9ydCB3YW50ZWQgRlBScyBvbiAzMmJpdCBwbGF0Zm9y
bXMKKworICAgIEdQUlJlZyB3YW50ZWRUYWdHUFIgeyB3YW50ZWRKU1ZhbHVlUmVncy50YWdHUFIo
KSB9OworICAgIEdQUlJlZyB3YW50ZWRQYXlsb2FkR1BSIHsgd2FudGVkSlNWYWx1ZVJlZ3MucGF5
bG9hZEdQUigpIH07CisgICAgCisgICAgaWYgKHdhbnRlZFRhZ0dQUiAhPSBJbnZhbGlkR1BSUmVn
KSB7CisgICAgICAgIEFTU0VSVCghbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHdhbnRlZFRhZ0dQUikp
OworICAgICAgICBpZiAoQ2FjaGVkUmVjb3ZlcnkqIGN1cnJlbnRUYWcgeyBtX3JlZ2lzdGVyc1t3
YW50ZWRUYWdHUFJdIH0pIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50VGFnID09ICZsb2NhdGlv
bikgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICArICIsIHdhbnRlZFRhZ0dQUiwgIiBpcyBPS1xuIik7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgY2FuIG5ldmVyIGhhcHBlbiBvbiAzMmJp
dCBwbGF0Zm9ybXMgc2luY2Ugd2UKKyAgICAgICAgICAgICAgICAvLyBoYXZlIGF0IG1vc3Qgb25l
IHdhbnRlZCBKU1ZhbHVlUmVncywgZm9yIHRoZQorICAgICAgICAgICAgICAgIC8vIGNhbGxlZSwg
YW5kIG5vIGNhbGxlZS1zYXZlIHJlZ2lzdGVycy4KKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKHdhbnRlZFBheWxvYWRHUFIgIT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICBBU1NF
UlQoIW1fbG9ja2VkUmVnaXN0ZXJzLmdldCh3YW50ZWRQYXlsb2FkR1BSKSk7CisgICAgICAgIGlm
IChDYWNoZWRSZWNvdmVyeSogY3VycmVudFBheWxvYWQgeyBtX3JlZ2lzdGVyc1t3YW50ZWRQYXls
b2FkR1BSXSB9KSB7CisgICAgICAgICAgICBpZiAoY3VycmVudFBheWxvYWQgPT0gJmxvY2F0aW9u
KSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2coIiAgICsgIiwgd2FudGVkUGF5bG9hZEdQUiwgIiBpcyBPS1xuIik7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFNlZSBhYm92ZQorICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAobG9jYXRpb24ucmVjb3ZlcnkoKS50ZWNobmlxdWUoKSA9PSBJblBh
aXIKKyAgICAgICAgfHwgbG9jYXRpb24ucmVjb3ZlcnkoKS5pc0luR1BSKCkpIHsKKyAgICAgICAg
R1BSUmVnIHBheWxvYWRHUFI7CisgICAgICAgIGlmIChsb2NhdGlvbi5yZWNvdmVyeSgpLnRlY2hu
aXF1ZSgpID09IEluUGFpcikKKyAgICAgICAgICAgIHBheWxvYWRHUFIgPSBsb2NhdGlvbi5yZWNv
dmVyeSgpLnBheWxvYWRHUFIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGF5bG9hZEdQ
UiA9IGxvY2F0aW9uLnJlY292ZXJ5KCkuZ3ByKCk7CisKKyAgICAgICAgaWYgKHdhbnRlZFBheWxv
YWRHUFIgPT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIHdhbnRlZFBheWxvYWRHUFIgPSBw
YXlsb2FkR1BSOworCisgICAgICAgIGlmIChwYXlsb2FkR1BSICE9IHdhbnRlZFBheWxvYWRHUFIp
IHsKKyAgICAgICAgICAgIGlmIChsb2NhdGlvbi5yZWNvdmVyeSgpLnRlY2huaXF1ZSgpID09IElu
UGFpcgorICAgICAgICAgICAgICAgICYmIHdhbnRlZFBheWxvYWRHUFIgPT0gbG9jYXRpb24ucmVj
b3ZlcnkoKS50YWdHUFIoKSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKCIgICAqIFN3YXBwaW5nICIsIHBheWxvYWRHUFIsICIgYW5k
ICIsIHdhbnRlZFBheWxvYWRHUFIsICJcbiIpOworICAgICAgICAgICAgICAgIG1faml0LnN3YXAo
cGF5bG9hZEdQUiwgd2FudGVkUGF5bG9hZEdQUik7CisgICAgICAgICAgICAgICAgdXBkYXRlUmVj
b3ZlcnkobG9jYXRpb24sIAorICAgICAgICAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjppblBh
aXIocGF5bG9hZEdQUiwgd2FudGVkUGF5bG9hZEdQUikpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiICAgKiBNb3ZpbmcgIiwgcGF5bG9hZEdQUiwgIiBpbnRvICIsIHdhbnRlZFBheWxvYWRHUFIs
ICJcbiIpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUocGF5bG9hZEdQUiwgd2FudGVkUGF5
bG9hZEdQUik7CisgICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uLnJlY292ZXJ5KCkudGVjaG5p
cXVlKCkgPT0gSW5QYWlyKSB7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVJlY292ZXJ5KGxv
Y2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5QYWlyKGxv
Y2F0aW9uLnJlY292ZXJ5KCkudGFnR1BSKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d2FudGVkUGF5bG9hZEdQUikpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIHVwZGF0ZVJlY292ZXJ5KGxvY2F0aW9uLCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFZhbHVlUmVjb3Zlcnk6OmluR1BSKHdhbnRlZFBheWxvYWRHUFIsIGxvY2F0aW9uLnJlY292
ZXJ5KCkuZGF0YUZvcm1hdCgpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHdhbnRlZFRhZ0dQUiA9PSBJbnZhbGlkR1BSUmVnKQor
ICAgICAgICAgICAgd2FudGVkVGFnR1BSID0gZ2V0RnJlZUdQUigpOworICAgICAgICBzd2l0Y2gg
KGxvY2F0aW9uLnJlY292ZXJ5KCkuZGF0YUZvcm1hdCgpKSB7CisgICAgICAgIGNhc2UgRGF0YUZv
cm1hdEludDMyOgorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0
YUxvZygiICAgKiBNb3ZpbmcgaW50MzIgdGFnIGludG8gIiwgd2FudGVkVGFnR1BSLCAiXG4iKTsK
KyAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpJbnQzMlRhZyksCisgICAgICAgICAgICAgICAgd2FudGVkVGFnR1BSKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgorICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgKiBNb3ZpbmcgY2VsbCB0YWcg
aW50byAiLCB3YW50ZWRUYWdHUFIsICJcbiIpOworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLAorICAgICAgICAgICAg
ICAgIHdhbnRlZFRhZ0dQUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEYXRh
Rm9ybWF0Qm9vbGVhbjoKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgICogTW92aW5nIGJvb2xlYW4gdGFnIGludG8gIiwgd2FudGVkVGFnR1BSLCAi
XG4iKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpCb29sZWFuVGFnKSwKKyAgICAgICAgICAgICAgICB3YW50ZWRUYWdHUFIpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEpTOgorICAgICAgICAg
ICAgQVNTRVJUKHdhbnRlZFRhZ0dQUiAhPSBsb2NhdGlvbi5yZWNvdmVyeSgpLnBheWxvYWRHUFIo
KSk7CisgICAgICAgICAgICBpZiAod2FudGVkVGFnR1BSICE9IGxvY2F0aW9uLnJlY292ZXJ5KCku
dGFnR1BSKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiICAgKiBNb3ZpbmcgIiwgbG9jYXRpb24ucmVjb3ZlcnkoKS50YWdHUFIo
KSwgIiBpbnRvICIsIHdhbnRlZFRhZ0dQUiwgIlxuIik7CisgICAgICAgICAgICAgICAgbV9qaXQu
bW92ZShsb2NhdGlvbi5yZWNvdmVyeSgpLnRhZ0dQUigpLCB3YW50ZWRUYWdHUFIpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
eworICAgICAgICBBU1NFUlQobG9jYXRpb24ucmVjb3ZlcnkoKS5pc0luRlBSKCkpOworICAgICAg
ICBpZiAod2FudGVkVGFnR1BSID09IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgICAgIEFTU0VS
VCh3YW50ZWRQYXlsb2FkR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgICAgICAgICAgbV9sb2Nr
ZWRSZWdpc3RlcnMuc2V0KHdhbnRlZFBheWxvYWRHUFIpOworICAgICAgICAgICAgd2FudGVkVGFn
R1BSID0gZ2V0RnJlZUdQUigpOworICAgICAgICAgICAgbV9sb2NrZWRSZWdpc3RlcnMuY2xlYXIo
d2FudGVkUGF5bG9hZEdQUik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHdhbnRlZFBheWxvYWRH
UFIgPT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICAgICAgbV9sb2NrZWRSZWdpc3RlcnMuc2V0
KHdhbnRlZFRhZ0dQUik7CisgICAgICAgICAgICB3YW50ZWRQYXlsb2FkR1BSID0gZ2V0RnJlZUdQ
UigpOworICAgICAgICAgICAgbV9sb2NrZWRSZWdpc3RlcnMuY2xlYXIod2FudGVkVGFnR1BSKTsK
KyAgICAgICAgfQorICAgICAgICBtX2ppdC5ib3hEb3VibGUobG9jYXRpb24ucmVjb3ZlcnkoKS5m
cHIoKSwgd2FudGVkVGFnR1BSLCB3YW50ZWRQYXlsb2FkR1BSKTsKKyAgICB9CisgICAgdXBkYXRl
UmVjb3ZlcnkobG9jYXRpb24sIFZhbHVlUmVjb3Zlcnk6OmluUGFpcih3YW50ZWRUYWdHUFIsIHdh
bnRlZFBheWxvYWRHUFIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBF
TkFCTEUoSklUKSAmJiBVU0UoSlNWQUxVRTMyXzY0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlcjY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyNjQuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlcjY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDM3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FsbEZyYW1l
U2h1ZmZsZXIuaCIKKworI2lmIEVOQUJMRShKSVQpICYmIFVTRShKU1ZBTFVFNjQpCisKKyNpbmNs
dWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJEYXRhRm9ybWF0LmgiCisjaW5jbHVkZSAi
SlNDSlNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0RhdGFGb3JtYXQgQ2Fs
bEZyYW1lU2h1ZmZsZXI6OmVtaXRTdG9yZSgKKyAgICBDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVj
b3ZlcnksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFkZHJlc3MpCit7CisgICAgQVNTRVJUKCFj
YWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmlzSW5KU1N0YWNrKCkpOworCisgICAgc3dpdGNoIChj
YWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLnRlY2huaXF1ZSgpKSB7CisgICAgY2FzZSBJbkdQUjoK
KyAgICAgICAgbV9qaXQuc3RvcmVQdHIoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSwg
YWRkcmVzcyk7CisgICAgICAgIHJldHVybiBEYXRhRm9ybWF0SlM7CisgICAgY2FzZSBVbmJveGVk
SW50MzJJbkdQUjoKKyAgICAgICAgbV9qaXQuc3RvcmUzMihjYWNoZWRSZWNvdmVyeS5yZWNvdmVy
eSgpLmdwcigpLCBhZGRyZXNzLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCkpOworICAgICAgICBy
ZXR1cm4gRGF0YUZvcm1hdEludDMyOworICAgIGNhc2UgVW5ib3hlZEludDUySW5HUFI6CisgICAg
ICAgIG1faml0LnJzaGlmdDY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
aW50NTJTaGlmdEFtb3VudCksCisgICAgICAgICAgICBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgp
LmdwcigpKTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBVbmJveGVkU3RyaWN0SW50
NTJJbkdQUjoKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIoY2FjaGVkUmVjb3ZlcnkucmVjb3Zlcnko
KS5ncHIoKSwgYWRkcmVzcyk7CisgICAgICAgIHJldHVybiBEYXRhRm9ybWF0U3RyaWN0SW50NTI7
CisgICAgY2FzZSBVbmJveGVkQm9vbGVhbkluR1BSOgorICAgICAgICBtX2ppdC5zdG9yZVB0cihj
YWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpLCBhZGRyZXNzKTsKKyAgICAgICAgcmV0dXJu
IERhdGFGb3JtYXRCb29sZWFuOworICAgIGNhc2UgVW5ib3hlZENlbGxJbkdQUjoKKyAgICAgICAg
bV9qaXQuc3RvcmVQdHIoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSwgYWRkcmVzcyk7
CisgICAgICAgIHJldHVybiBEYXRhRm9ybWF0Q2VsbDsKKyAgICBjYXNlIFVuYm94ZWREb3VibGVJ
bkZQUjoKKyAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUoY2FjaGVkUmVjb3ZlcnkucmVjb3Zlcnko
KS5mcHIoKSwgYWRkcmVzcyk7CisgICAgICAgIHJldHVybiBEYXRhRm9ybWF0RG91YmxlOworICAg
IGNhc2UgSW5GUFI6CisgICAgICAgIG1faml0LnN0b3JlRG91YmxlKGNhY2hlZFJlY292ZXJ5LnJl
Y292ZXJ5KCkuZnByKCksIGFkZHJlc3MpOworICAgICAgICByZXR1cm4gRGF0YUZvcm1hdEpTOwor
ICAgIGNhc2UgQ29uc3RhbnQ6CisgICAgICAgIG1faml0LnN0b3JlVHJ1c3RlZFZhbHVlKGNhY2hl
ZFJlY292ZXJ5LnJlY292ZXJ5KCkuY29uc3RhbnQoKSwgYWRkcmVzcyk7CisgICAgICAgIHJldHVy
biBEYXRhRm9ybWF0SlM7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXRCb3go
Q2FjaGVkUmVjb3ZlcnkmIGNhY2hlZFJlY292ZXJ5KQoreworICAgIEFTU0VSVChjYW5Cb3goY2Fj
aGVkUmVjb3ZlcnkpKTsKKyAgICBpZiAoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5pc0NvbnN0
YW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjYWNoZWRSZWNvdmVyeS5yZWNvdmVy
eSgpLmlzSW5HUFIoKSkgeworICAgICAgICBzd2l0Y2ggKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5
KCkuZGF0YUZvcm1hdCgpKSB7CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEludDMyOgorICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgKiBCb3hpbmcg
IiwgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKSk7CisgICAgICAgICAgICBtX2ppdC56ZXJvRXh0
ZW5kMzJUb1B0cigKKyAgICAgICAgICAgICAgICBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdw
cigpLAorICAgICAgICAgICAgICAgIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCkpOwor
ICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBkbyB0aGlzIHRoZSBoYXJkIHdheS4KKyAgICAgICAg
ICAgIG1faml0Lm9yNjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVy
KSwKKyAgICAgICAgICAgICAgICBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpKTsKKyAg
ICAgICAgICAgIGNhY2hlZFJlY292ZXJ5LnNldFJlY292ZXJ5KAorICAgICAgICAgICAgICAgIFZh
bHVlUmVjb3Zlcnk6OmluR1BSKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCksIERhdGFG
b3JtYXRKUykpOworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0
YUxvZygiIGludG8gIiwgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKSwgIlxuIik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEludDUyOgorICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgKiBCb3hpbmcgIiwgY2Fj
aGVkUmVjb3ZlcnkucmVjb3ZlcnkoKSk7CisgICAgICAgICAgICBtX2ppdC5yc2hpZnQ2NChNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OmludDUyU2hpZnRBbW91bnQpLAorICAg
ICAgICAgICAgICAgIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCkpOworICAgICAgICAg
ICAgY2FjaGVkUmVjb3Zlcnkuc2V0UmVjb3ZlcnkoCisgICAgICAgICAgICAgICAgVmFsdWVSZWNv
dmVyeTo6aW5HUFIoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSwgRGF0YUZvcm1hdFN0
cmljdEludDUyKSk7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgaW50byAiLCBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLCAiXG4iKTsKKyAgICAg
ICAgICAgIEZBTExUSFJPVUdIOworICAgICAgICBjYXNlIERhdGFGb3JtYXRTdHJpY3RJbnQ1Mjog
eworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAg
KiBCb3hpbmcgIiwgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKSk7CisgICAgICAgICAgICBGUFJS
ZWcgcmVzdWx0RlBSID0gZ2V0RnJlZUZQUigpOworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdEZQ
UiAhPSBJbnZhbGlkRlBSUmVnKTsKKyAgICAgICAgICAgIG1faml0LmNvbnZlcnRJbnQ2NFRvRG91
YmxlKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCksIHJlc3VsdEZQUik7CisgICAgICAg
ICAgICB1cGRhdGVSZWNvdmVyeShjYWNoZWRSZWNvdmVyeSwgVmFsdWVSZWNvdmVyeTo6aW5GUFIo
cmVzdWx0RlBSLCBEYXRhRm9ybWF0RG91YmxlKSk7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgaW50byAiLCBjYWNoZWRSZWNvdmVyeS5yZWNvdmVy
eSgpLCAiXG4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
RGF0YUZvcm1hdEJvb2xlYW46CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICBkYXRhTG9nKCIgICAqIEJveGluZyAiLCBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpKTsK
KyAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoVmFs
dWVGYWxzZSksCisgICAgICAgICAgICAgICAgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIo
KSk7CisgICAgICAgICAgICBjYWNoZWRSZWNvdmVyeS5zZXRSZWNvdmVyeSgKKyAgICAgICAgICAg
ICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUihjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigp
LCBEYXRhRm9ybWF0SlMpKTsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAg
ICAgIGRhdGFMb2coIiBpbnRvICIsIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCksICJcbiIpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCku
aXNJbkZQUigpKSB7CisgICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmRhdGFG
b3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAqIEJveGluZyAiLCBjYWNoZWRSZWNvdmVyeS5y
ZWNvdmVyeSgpKTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBjYWNoZWRSZWNvdmVy
eS53YW50ZWRKU1ZhbHVlUmVncygpLmdwcigpOworICAgICAgICAgICAgaWYgKHJlc3VsdEdQUiA9
PSBJbnZhbGlkR1BSUmVnIHx8IG1fcmVnaXN0ZXJzW3Jlc3VsdEdQUl0pCisgICAgICAgICAgICAg
ICAgcmVzdWx0R1BSID0gZ2V0RnJlZUdQUigpOworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdEdQ
UiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgICAgIG1faml0LnB1cmlmeU5hTihjYWNoZWRS
ZWNvdmVyeS5yZWNvdmVyeSgpLmZwcigpKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGVU
bzY0KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZnByKCksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBtX2ppdC5zdWI2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1i
ZXIpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgdXBkYXRlUmVjb3ZlcnkoY2FjaGVkUmVjb3Zl
cnksIFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlc3VsdEdQUiwgRGF0YUZvcm1hdEpTKSk7CisgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgaW50byAiLCBj
YWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLCAiXG4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBBU1NFUlQoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5kYXRhRm9y
bWF0KCkgPT0gRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6
OmVtaXRMb2FkKENhY2hlZFJlY292ZXJ5JiBjYWNoZWRSZWNvdmVyeSkKK3sKKyAgICBpZiAoIWNh
Y2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuaXNJbkpTU3RhY2soKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIiAgICogTG9hZGluZyAiLCBjYWNo
ZWRSZWNvdmVyeS5yZWNvdmVyeSgpLCAiIGludG8gIik7CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVnID0gY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBhZGRyZXNzIHsgYWRkcmVzc0Zvck9sZChyZWcpIH07Cisg
ICAgYm9vbCB0cnlGUFIgeyB0cnVlIH07CisgICAgR1BSUmVnIHJlc3VsdEdQUiB7IGNhY2hlZFJl
Y292ZXJ5LndhbnRlZEpTVmFsdWVSZWdzKCkuZ3ByKCkgfTsKKworICAgIC8vIElmIHdlIHdhbnQg
YSBHUFIgYW5kIGl0J3MgYXZhaWxhYmxlLCB0aGF0J3MgYmV0dGVyIHRoYW4gbG9hZGluZworICAg
IC8vIGludG8gYW4gRlBSLgorICAgIGlmIChyZXN1bHRHUFIgIT0gSW52YWxpZEdQUlJlZyAmJiAh
bV9yZWdpc3RlcnNbcmVzdWx0R1BSXQorICAgICAgICAmJiAhbV9sb2NrZWRSZWdpc3RlcnMuZ2V0
KHJlc3VsdEdQUikgJiYgY2FjaGVkUmVjb3ZlcnkubG9hZHNJbnRvR1BSKCkpCisgICAgICAgIHRy
eUZQUiA9IGZhbHNlOworCisgICAgLy8gT3RoZXJ3aXNlLCB3ZSBwcmVmZXIgbG9hZGluZyBpbnRv
IEZQUnMgaWYgcG9zc2libGUKKyAgICBpZiAodHJ5RlBSICYmIGNhY2hlZFJlY292ZXJ5LmxvYWRz
SW50b0ZQUigpKSB7CisgICAgICAgIEZQUlJlZyByZXN1bHRGUFIgeyBjYWNoZWRSZWNvdmVyeS53
YW50ZWRGUFIoKSB9OworICAgICAgICBpZiAocmVzdWx0RlBSID09IEludmFsaWRGUFJSZWcgfHwg
bV9yZWdpc3RlcnNbcmVzdWx0RlBSXSB8fCBtX2xvY2tlZFJlZ2lzdGVycy5nZXQocmVzdWx0RlBS
KSkKKyAgICAgICAgICAgIHJlc3VsdEZQUiA9IGdldEZyZWVGUFIoKTsKKyAgICAgICAgaWYgKHJl
c3VsdEZQUiAhPSBJbnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICBtX2ppdC5sb2FkRG91Ymxl
KGFkZHJlc3MsIHJlc3VsdEZQUik7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGRhdGFGb3JtYXQg
PSBEYXRhRm9ybWF0SlM7CisgICAgICAgICAgICAvLyBXZSBjb3VsZCBiZSB0cmFuc2Zvcm1pbmcg
YSBEYXRhRm9ybWF0Q2VsbCBpbnRvIGEKKyAgICAgICAgICAgIC8vIERhdGFGb3JtYXRKUyBoZXJl
IC0gYnV0IHRoYXQncyBPSy4KKyAgICAgICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS5yZWNvdmVy
eSgpLmRhdGFGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKQorICAgICAgICAgICAgICAgIGRh
dGFGb3JtYXQgPSBEYXRhRm9ybWF0RG91YmxlOworICAgICAgICAgICAgdXBkYXRlUmVjb3Zlcnko
Y2FjaGVkUmVjb3ZlcnksCisgICAgICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5GUFIocmVz
dWx0RlBSLCBkYXRhRm9ybWF0KSk7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICBkYXRhTG9nKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCksICJcbiIpOworICAgICAg
ICAgICAgaWYgKHJlZyA9PSBuZXdBc09sZChkYW5nZXJGcm9udGllcigpKSkKKyAgICAgICAgICAg
ICAgICB1cGRhdGVEYW5nZXJGcm9udGllcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfQorCisgICAgQVNTRVJUKGNhY2hlZFJlY292ZXJ5LmxvYWRzSW50b0dQUigpKTsK
KyAgICBpZiAocmVzdWx0R1BSID09IEludmFsaWRHUFJSZWcgfHwgbV9yZWdpc3RlcnNbcmVzdWx0
R1BSXSB8fCBtX2xvY2tlZFJlZ2lzdGVycy5nZXQocmVzdWx0R1BSKSkKKyAgICAgICAgcmVzdWx0
R1BSID0gZ2V0RnJlZUdQUigpOworICAgIEFTU0VSVChyZXN1bHRHUFIgIT0gSW52YWxpZEdQUlJl
Zyk7CisgICAgbV9qaXQubG9hZFB0cihhZGRyZXNzLCByZXN1bHRHUFIpOworICAgIHVwZGF0ZVJl
Y292ZXJ5KGNhY2hlZFJlY292ZXJ5LAorICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZXN1
bHRHUFIsIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZGF0YUZvcm1hdCgpKSk7CisgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKSwgIlxu
Iik7CisgICAgaWYgKHJlZyA9PSBuZXdBc09sZChkYW5nZXJGcm9udGllcigpKSkKKyAgICAgICAg
dXBkYXRlRGFuZ2VyRnJvbnRpZXIoKTsKK30KKworYm9vbCBDYWxsRnJhbWVTaHVmZmxlcjo6Y2Fu
TG9hZChDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3ZlcnkpCit7CisgICAgaWYgKCFjYWNoZWRS
ZWNvdmVyeS5yZWNvdmVyeSgpLmlzSW5KU1N0YWNrKCkpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgQVNTRVJUKGNhY2hlZFJlY292ZXJ5LmxvYWRzSW50b0ZQUigpIHx8IGNhY2hlZFJlY292
ZXJ5LmxvYWRzSW50b0dQUigpKTsKKworICAgIGlmIChjYWNoZWRSZWNvdmVyeS5sb2Fkc0ludG9G
UFIoKSAmJiBnZXRGcmVlRlBSKCkgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBpZiAoY2FjaGVkUmVjb3ZlcnkubG9hZHNJbnRvR1BSKCkgJiYgZ2V0RnJlZUdQ
UigpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIENhY2hlZFJlY292ZXJ5Ojpsb2Fkc0ludG9GUFIoKSBjb25zdAor
eworICAgIHN3aXRjaCAocmVjb3ZlcnkoKS50ZWNobmlxdWUoKSkgeworICAgIGNhc2UgRG91Ymxl
RGlzcGxhY2VkSW5KU1N0YWNrOgorICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgIGNh
c2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIENhY2hlZFJl
Y292ZXJ5Ojpsb2Fkc0ludG9HUFIoKSBjb25zdAoreworICAgIHN3aXRjaCAocmVjb3ZlcnkoKS50
ZWNobmlxdWUoKSkgeworICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgY2Fz
ZSBJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKKyAgICBjYXNlIFN0cmljdEludDUyRGlzcGxhY2Vk
SW5KU1N0YWNrOgorICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazoKKyAgICBjYXNl
IERpc3BsYWNlZEluSlNTdGFjazoKKyAgICBjYXNlIENlbGxEaXNwbGFjZWRJbkpTU3RhY2s6Cisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKwordm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6ZW1pdERpc3BsYWNlKENhY2hl
ZFJlY292ZXJ5JiBjYWNoZWRSZWNvdmVyeSkKK3sKKyAgICBSZWcgd2FudGVkUmVnOworICAgIGlm
ICghKHdhbnRlZFJlZyA9IFJlZyB7IGNhY2hlZFJlY292ZXJ5LndhbnRlZEpTVmFsdWVSZWdzKCku
Z3ByKCkgfSkpCisgICAgICAgIHdhbnRlZFJlZyA9IFJlZyB7IGNhY2hlZFJlY292ZXJ5LndhbnRl
ZEZQUigpIH07CisgICAgQVNTRVJUKHdhbnRlZFJlZyk7CisgICAgQVNTRVJUKCFtX2xvY2tlZFJl
Z2lzdGVycy5nZXQod2FudGVkUmVnKSk7CisKKyAgICBpZiAoQ2FjaGVkUmVjb3ZlcnkqIGN1cnJl
bnQgPSBtX3JlZ2lzdGVyc1t3YW50ZWRSZWddKSB7CisgICAgICAgIGlmIChjdXJyZW50ID09ICZj
YWNoZWRSZWNvdmVyeSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgZGF0YUxvZygiICAgKyAiLCB3YW50ZWRSZWcsICIgaXMgT0tcbiIpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIFdlIGNvdWxkIGRvIGEgbW9yZSBjb21wbGV4
IHRoaW5nIGJ5IGZpbmRpbmcgY3ljbGVzCisgICAgICAgIC8vIGV0Yy4gaW4gdGhhdCBjYXNlLgor
ICAgICAgICAvLyBIb3dldmVyLCBlbmRpbmcgdXAgaW4gdGhpcyBzaXR1YXRpb24gd2lsbCBiZSBz
dXBlcgorICAgICAgICAvLyByYXJlLCBhbmQgc2hvdWxkIGFjdHVhbGx5IGJlIG91dHJpZ2h0IGlt
cG9zc2libGUgZm9yCisgICAgICAgIC8vIG5vbi1GVEwgdGllcnMsIHNpbmNlOgorICAgICAgICAv
LyAgKGEpIEFsbCBkb3VibGVzIGhhdmUgYmVlbiBjb252ZXJ0ZWQgaW50byBKU1ZhbHVlcyB3aXRo
CisgICAgICAgIC8vICAgICAgVmFsdWVSZXAgbm9kZXMsIHNvIEZQUnMgYXJlIGluaXRpYWxseSBm
cmVlCisgICAgICAgIC8vCisgICAgICAgIC8vICAoYikgVGhlIG9ubHkgcmVjb3ZlcmllcyB3aXRo
IHdhbnRlZCByZWdpc3RlcnMgYXJlIHRoZQorICAgICAgICAvLyAgICAgIGNhbGxlZSAod2hpY2gg
YWx3YXlzIHN0YXJ0cyBvdXQgaW4gYSByZWdpc3RlcikgYW5kCisgICAgICAgIC8vICAgICAgdGhl
IGNhbGxlZS1zYXZlIHJlZ2lzdGVycworICAgICAgICAvLworICAgICAgICAvLyAgKGMpIFRoZSBj
YWxsZWUtc2F2ZSByZWdpc3RlcnMgYXJlIHRoZSBmaXJzdCB0aGluZ3Mgd2UKKyAgICAgICAgLy8g
ICAgICBsb2FkIChhZnRlciB0aGUgcmV0dXJuIFBDKSwgYW5kIHRoZXkgYXJlIGxvYWRlZCBhcyBK
U1ZhbHVlcworICAgICAgICAvLworICAgICAgICAvLyAgKGQpIFdlIHByZWZlciBsb2FkaW5nIEpT
VmFsdWVzIGludG8gRlBScyBpZiB0aGVpcgorICAgICAgICAvLyAgICAgIHdhbnRlZCBHUFIgaXMg
bm90IGF2YWlsYWJsZQorICAgICAgICAvLworICAgICAgICAvLyAgKGUpIElmIHdlIGVuZCB1cCBz
cGlsbGluZyBzb21lIHJlZ2lzdGVycyB3aXRoIGEKKyAgICAgICAgLy8gICAgICB0YXJnZXQsIHdl
IHdvbid0IGxvYWQgdGhlbSBhZ2FpbiBiZWZvcmUgdGhlIHZlcnkKKyAgICAgICAgLy8gICAgICBl
bmQgb2YgdGhlIGFsZ29yaXRobQorICAgICAgICAvLworICAgICAgICAvLyBDb21iaW5lZCwgdGhp
cyBtZWFucyB0aGF0IHdlIHdpbGwgbmV2ZXIgbG9hZCBhIHJlY292ZXJ5CisgICAgICAgIC8vIHdp
dGggYSB3YW50ZWQgR1BSIGludG8gYW55IEdQUiBvdGhlciB0aGFuIGl0cyB3YW50ZWQKKyAgICAg
ICAgLy8gR1BSLiBUaGUgY2FsbGVlIGNvdWxkIGhvd2V2ZXIgaGF2ZSBiZWVuIGluaXRpYWxseSBp
bgorICAgICAgICAvLyBvbmUgb2YgdGhlIGNhbGxlZS1zYXZlIHJlZ2lzdGVycyAtIGJ1dCBzaW5j
ZSB0aGUgd2FudGVkCisgICAgICAgIC8vIEdQUiBmb3IgdGhlIGNhbGxlZSBpcyBhbHdheXMgcmVn
VDAsIGl0IHdpbGwgYmUgdGhlCisgICAgICAgIC8vIGZpcnN0IG9uZSB0byBiZSBkaXNwbGFjZWQs
IGFuZCB3ZSB3b24ndCBzZWUgaXQgd2hlbgorICAgICAgICAvLyBoYW5kbGluZyBhbnkgb2YgdGhl
IGNhbGxlZS1zYXZlIHJlZ2lzdGVycy4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGh1cywgdGhl
IG9ubHkgd2F5IHdlIGNvdWxkIGV2ZXIgcmVhY2ggdGhpcyBwYXRoIGlzIGluCisgICAgICAgIC8v
IHRoZSBGVEwsIHdoZW4gdGhlcmUgaXMgc28gbXVjaCBwcmVzc3VyZSB0aGF0IHdlCisgICAgICAg
IC8vIGFic29sdXRlbHkgbmVlZCB0byBsb2FkIHRoZSBjYWxsZWUtc2F2ZSByZWdpc3RlcnMgaW50
bworICAgICAgICAvLyBkaWZmZXJlbnQgR1BScyBpbml0aWFsbHkgYnV0IG5vdCBlbm91Z2ggcHJl
c3N1cmUgdG8KKyAgICAgICAgLy8gdGhlbiBoYXZlIHRvIHNwaWxsIGFsbCBvZiB0aGVtLiBBbmQg
ZXZlbiBpbiB0aGF0IGNhc2UsCisgICAgICAgIC8vIGRlcGVuZGluZyBvbiB0aGUgb3JkZXIgaW4g
d2hpY2ggTExWTSBzYXZlcyB0aGUKKyAgICAgICAgLy8gY2FsbGVlLXNhdmVzLCB3ZSB3aWxsIHBy
b2JhYmx5IHN0aWxsIGJlIHNhZmUuIEFueXdheSwKKyAgICAgICAgLy8gdGhlIGNvdXBsZSBleHRy
YSBtb3ZlIGluc3RydWN0aW9ucyBjb21wYXJlZCB0byBhbgorICAgICAgICAvLyBlZmZpY2llbnQg
Y3ljbGUtYmFzZWQgYWxnb3JpdGhtIGFyZSBub3QgZ29pbmcgdG8gaHVydAorICAgICAgICAvLyB1
cy4KKyAgICAgICAgaWYgKHdhbnRlZFJlZy5pc0ZQUigpKSB7CisgICAgICAgICAgICBGUFJSZWcg
dGVtcEZQUiA9IGdldEZyZWVGUFIoKTsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgKiBNb3ZpbmcgIiwgd2FudGVkUmVnLCAiIGludG8gIiwgdGVt
cEZQUiwgIlxuIik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKHdhbnRlZFJlZy5mcHIo
KSwgdGVtcEZQUik7CisgICAgICAgICAgICB1cGRhdGVSZWNvdmVyeSgqY3VycmVudCwKKyAgICAg
ICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkZQUih0ZW1wRlBSLCBjdXJyZW50LT5yZWNvdmVy
eSgpLmRhdGFGb3JtYXQoKSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgR1BSUmVn
IHRlbXBHUFIgPSBnZXRGcmVlR1BSKCk7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIgICogTW92aW5nICIsIHdhbnRlZFJlZy5ncHIoKSwgIiBpbnRv
ICIsIHRlbXBHUFIsICJcbiIpOworICAgICAgICAgICAgbV9qaXQubW92ZSh3YW50ZWRSZWcuZ3By
KCksIHRlbXBHUFIpOworICAgICAgICAgICAgdXBkYXRlUmVjb3ZlcnkoKmN1cnJlbnQsCisgICAg
ICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIodGVtcEdQUiwgY3VycmVudC0+cmVjb3Zl
cnkoKS5kYXRhRm9ybWF0KCkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlQoIW1fcmVn
aXN0ZXJzW3dhbnRlZFJlZ10pOworCisgICAgaWYgKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCku
aXNDb25zdGFudCgpKSB7CisgICAgICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCBjYWxsZWUgc2F2
ZXMgZm9yIHdhbnRlZCBGUFJzLCBhbmQgdGhvc2UgYXJlIG5ldmVyIGNvbnN0YW50cworICAgICAg
ICBBU1NFUlQod2FudGVkUmVnLmlzR1BSKCkpOworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgICAgIGRhdGFMb2coIiAgICogTG9hZGluZyAiLCBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgp
LmNvbnN0YW50KCksICIgaW50byAiLCB3YW50ZWRSZWcsICJcbiIpOworICAgICAgICBtX2ppdC5t
b3ZlVHJ1c3RlZFZhbHVlKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuY29uc3RhbnQoKSwgSlNW
YWx1ZVJlZ3MgeyB3YW50ZWRSZWcuZ3ByKCkgfSk7CisgICAgICAgIHVwZGF0ZVJlY292ZXJ5KAor
ICAgICAgICAgICAgY2FjaGVkUmVjb3ZlcnksCisgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5Ojpp
blJlZ2lzdGVyKHdhbnRlZFJlZywgRGF0YUZvcm1hdEpTKSk7CisgICAgfSBlbHNlIGlmIChjYWNo
ZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmlzSW5HUFIoKSkgeworICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgIGRhdGFMb2coIiAgICogTW92aW5nICIsIGNhY2hlZFJlY292ZXJ5LnJlY292
ZXJ5KCksICIgaW50byAiLCB3YW50ZWRSZWcsICJcbiIpOworICAgICAgICBpZiAod2FudGVkUmVn
LmlzR1BSKCkpCisgICAgICAgICAgICBtX2ppdC5tb3ZlKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5
KCkuZ3ByKCksIHdhbnRlZFJlZy5ncHIoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1f
aml0Lm1vdmU2NFRvRG91YmxlKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCksIHdhbnRl
ZFJlZy5mcHIoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhY2hlZFJlY292ZXJ5LnJlY292
ZXJ5KCkuZGF0YUZvcm1hdCgpID09IERhdGFGb3JtYXRKUyk7CisgICAgICAgIHVwZGF0ZVJlY292
ZXJ5KGNhY2hlZFJlY292ZXJ5LAorICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5SZWdpc3Rl
cih3YW50ZWRSZWcsIERhdGFGb3JtYXRKUykpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VS
VChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmlzSW5GUFIoKSk7CisgICAgICAgIGlmIChjYWNo
ZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmRhdGFGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKSB7
CisgICAgICAgICAgICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgY2FsbGVlIHNhdmVzIGZvciB3YW50
ZWQgRlBScywgYW5kIHRob3NlIGFyZSBhbHdheXMgRGF0YUZvcm1hdEpTCisgICAgICAgICAgICBB
U1NFUlQod2FudGVkUmVnLmlzR1BSKCkpOworICAgICAgICAgICAgLy8gVGhpcyB3aWxsIGF1dG9t
YXRpY2FsbHkgcGljayB0aGUgd2FudGVkIEdQUgorICAgICAgICAgICAgZW1pdEJveChjYWNoZWRS
ZWNvdmVyeSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nKCIgICAqIE1vdmluZyAiLCBjYWNoZWRSZWNvdmVyeS5yZWNv
dmVyeSgpLmZwcigpLCAiIGludG8gIiwgd2FudGVkUmVnLCAiXG4iKTsKKyAgICAgICAgICAgIGlm
ICh3YW50ZWRSZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlRG91YmxlVG82
NChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmZwcigpLCB3YW50ZWRSZWcuZ3ByKCkpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUoY2FjaGVkUmVj
b3ZlcnkucmVjb3ZlcnkoKS5mcHIoKSwgd2FudGVkUmVnLmZwcigpKTsKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZGF0YUZvcm1hdCgpID09IERh
dGFGb3JtYXRKUyk7CisgICAgICAgICAgICB1cGRhdGVSZWNvdmVyeShjYWNoZWRSZWNvdmVyeSwK
KyAgICAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjppblJlZ2lzdGVyKHdhbnRlZFJlZywgRGF0
YUZvcm1hdEpTKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBU1NFUlQobV9yZWdpc3RlcnNb
d2FudGVkUmVnXSA9PSAmY2FjaGVkUmVjb3ZlcnkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIEVOQUJMRShKSVQpICYmIFVTRShKU1ZBTFVFNjQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWxs
RnJhbWVTaHVmZmxlci5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkNDYWxsSGVs
cGVycy5oIgorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworQ2Fs
bEZyYW1lU2h1ZmZsZXI6OkNhbGxGcmFtZVNodWZmbGVyKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBDYWxsRnJhbWVTaHVmZmxlRGF0YSYgZGF0YSkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1f
b2xkRnJhbWUoZGF0YS5udW1Mb2NhbHMgKyBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSwg
bnVsbHB0cikKKyAgICAsIG1fbmV3RnJhbWUoZGF0YS5hcmdzLnNpemUoKSArIEpTU3RhY2s6OkNh
bGxGcmFtZUhlYWRlclNpemUsIG51bGxwdHIpCisgICAgLCBtX2FsaWduZWRPbGRGcmFtZVNpemUo
SlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZQorICAgICAgICArIHJvdW5kQXJndW1lbnRDb3Vu
dFRvQWxpZ25GcmFtZShqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkpCisgICAgLCBt
X2FsaWduZWROZXdGcmFtZVNpemUoSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZQorICAgICAg
ICArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShkYXRhLmFyZ3Muc2l6ZSgpKSkKKyAg
ICAsIG1fZnJhbWVEZWx0YShtX2FsaWduZWROZXdGcmFtZVNpemUgLSBtX2FsaWduZWRPbGRGcmFt
ZVNpemUpCisgICAgLCBtX2xvY2tlZFJlZ2lzdGVycyhSZWdpc3RlclNldDo6YWxsUmVnaXN0ZXJz
KCkpCit7CisgICAgLy8gV2UgYXJlIGFsbG93ZWQgYWxsIHRoZSB1c3VhbCByZWdpc3RlcnMuLi4K
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOyAp
CisgICAgICAgIG1fbG9ja2VkUmVnaXN0ZXJzLmNsZWFyKEdQUkluZm86OnRvUmVnaXN0ZXIoaSkp
OworICAgIGZvciAodW5zaWduZWQgaSA9IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07
ICkKKyAgICAgICAgbV9sb2NrZWRSZWdpc3RlcnMuY2xlYXIoRlBSSW5mbzo6dG9SZWdpc3Rlcihp
KSk7CisgICAgLy8gLi4uIGFzIHdlbGwgYXMgdGhlIHJ1bnRpbWUgcmVnaXN0ZXJzLgorICAgIG1f
bG9ja2VkUmVnaXN0ZXJzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVy
cygpKTsKKworICAgIEFTU0VSVCghZGF0YS5jYWxsZWUuaXNJbkpTU3RhY2soKSB8fCBkYXRhLmNh
bGxlZS52aXJ0dWFsUmVnaXN0ZXIoKS5pc0xvY2FsKCkpOworICAgIGFkZE5ldyhWaXJ0dWFsUmVn
aXN0ZXIoSlNTdGFjazo6Q2FsbGVlKSwgZGF0YS5jYWxsZWUpOworCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBkYXRhLmFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQVNTRVJUKCFkYXRh
LmFyZ3NbaV0uaXNJbkpTU3RhY2soKSB8fCBkYXRhLmFyZ3NbaV0udmlydHVhbFJlZ2lzdGVyKCku
aXNMb2NhbCgpKTsKKyAgICAgICAgYWRkTmV3KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkp
LCBkYXRhLmFyZ3NbaV0pOworICAgIH0KKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgZm9yIChS
ZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0
KCkpIHsKKyAgICAgICAgaWYgKCFkYXRhLnJlZ2lzdGVyc1tyZWddLmlzU2V0KCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAgICAgICAgICBh
ZGROZXcoSlNWYWx1ZVJlZ3MocmVnLmdwcigpKSwgZGF0YS5yZWdpc3RlcnNbcmVnXSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGFkZE5ldyhyZWcuZnByKCksIGRhdGEucmVnaXN0ZXJzW3Jl
Z10pOworICAgIH0KKyNlbmRpZgorfQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlbGltaXRl
ciAgICAgICAgICAgICA9ICIgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICI7Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGRhbmdlckRlbGltaXRlciAgICAgICA9ICIgWC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1YICI7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRhbmdl
ckJvdW5kc0RlbGltaXRlciA9ICIgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYICI7
CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGVtcHR5U3BhY2UgICAgICAgICAgICA9ICIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICI7CisgICAgQVNTRVJUKG1fYWxpZ25lZE5ld0Zy
YW1lU2l6ZSA8PSBudW1Mb2NhbHMoKSk7CisgICAgb3V0LnByaW50KCIgICAgICAgICAgIik7Cisg
ICAgb3V0LnByaW50KCIgICAgICAgICAgIE9sZCBmcmFtZSAgICAgICAgICAgICAgICIpOworICAg
IG91dC5wcmludCgiICAgICAgICAgICBOZXcgZnJhbWUgICAgICAgICAgICAgICAiKTsKKyAgICBv
dXQucHJpbnQoIlxuIik7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2FsaWduZWRPbGRGcmFt
ZVNpemUgKyBudW1Mb2NhbHMoKSArIDM7ICsraSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b2xkIHsgbV9hbGlnbmVkT2xkRnJhbWVTaXplIC0gaSAtIDEgfTsKKyAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG5ld1JlZyB7IG9sZCArIG1fZnJhbWVEZWx0YSB9OworCisgICAgICAgIGlmICghaXNW
YWxpZE9sZChvbGQpICYmIG9sZCAhPSBmaXJzdE9sZCgpIC0gMQorICAgICAgICAgICAgJiYgIWlz
VmFsaWROZXcobmV3UmVnKSAmJiBuZXdSZWcgIT0gZmlyc3ROZXcoKSAtIDEpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBvdXQucHJpbnQoIiAgICAgICAgIik7CisgICAgICAgIGlm
IChkYW5nZXJGcm9udGllcigpID49IGZpcnN0TmV3KCkKKyAgICAgICAgICAgICYmIChuZXdSZWcg
PT0gZGFuZ2VyRnJvbnRpZXIoKSB8fCBuZXdSZWcgPT0gZmlyc3ROZXcoKSAtIDEpKQorICAgICAg
ICAgICAgb3V0LnByaW50KGRhbmdlckJvdW5kc0RlbGltaXRlcik7CisgICAgICAgIGVsc2UgaWYg
KGlzVmFsaWRPbGQob2xkKSkKKyAgICAgICAgICAgIG91dC5wcmludChpc1ZhbGlkTmV3KG5ld1Jl
ZykgJiYgaXNEYW5nZXJOZXcobmV3UmVnKSA/IGRhbmdlckRlbGltaXRlciA6IGRlbGltaXRlcik7
CisgICAgICAgIGVsc2UgaWYgKG9sZCA9PSBmaXJzdE9sZCgpIC0gMSkKKyAgICAgICAgICAgIG91
dC5wcmludChkZWxpbWl0ZXIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQo
ZW1wdHlTcGFjZSk7CisgICAgICAgIGlmIChkYW5nZXJGcm9udGllcigpID49IGZpcnN0TmV3KCkK
KyAgICAgICAgICAgICYmIChuZXdSZWcgPT0gZGFuZ2VyRnJvbnRpZXIoKSB8fCBuZXdSZWcgPT0g
Zmlyc3ROZXcoKSAtIDEpKQorICAgICAgICAgICAgb3V0LnByaW50KGRhbmdlckJvdW5kc0RlbGlt
aXRlcik7CisgICAgICAgIGVsc2UgaWYgKGlzVmFsaWROZXcobmV3UmVnKSB8fCBuZXdSZWcgPT0g
Zmlyc3ROZXcoKSAtIDEpCisgICAgICAgICAgICBvdXQucHJpbnQoaXNEYW5nZXJOZXcobmV3UmVn
KSA/IGRhbmdlckRlbGltaXRlciA6IGRlbGltaXRlcik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIG91dC5wcmludChlbXB0eVNwYWNlKTsKKyAgICAgICAgb3V0LnByaW50KCJcbiIpOworICAg
ICAgICBpZiAob2xkID09IGZpcnN0T2xkKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIiBzcCAt
LT4gIik7CisgICAgICAgIGVsc2UgaWYgKCFvbGQub2Zmc2V0KCkpCisgICAgICAgICAgICBvdXQu
cHJpbnQoIiBmcCAtLT4gIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgi
ICAgICAgICAiKTsKKyAgICAgICAgaWYgKGlzVmFsaWRPbGQob2xkKSkgeworICAgICAgICAgICAg
aWYgKGdldE9sZChvbGQpKSB7CisgICAgICAgICAgICAgICAgYXV0byBzdHIgPSB0b0NTdHJpbmco
b2xkKTsKKyAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZE5ldyhuZXdSZWcpICYmIGlzRGFuZ2Vy
TmV3KG5ld1JlZykpCisgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiBYICAgICAgJTE4
cyAgICAgICBYICIsIHN0ci5kYXRhKCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgb3V0LnByaW50ZigiIHwgICAgICAlMThzICAgICAgIHwgIiwgc3RyLmRhdGEo
KSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzVmFsaWROZXcobmV3UmVnKSAmJiBpc0Rhbmdl
ck5ldyhuZXdSZWcpKQorICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiBYJTMwcyBYICIsICIi
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIgfCUzMHMg
fCAiLCAiIik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KGVtcHR5U3Bh
Y2UpOworICAgICAgICBpZiAoaXNWYWxpZE5ldyhuZXdSZWcpKSB7CisgICAgICAgICAgICBjb25z
dCBjaGFyIGQgPSBpc0Rhbmdlck5ldyhuZXdSZWcpID8gJ1gnIDogJ3wnOworICAgICAgICAgICAg
YXV0byBzdHIgPSB0b0NTdHJpbmcobmV3UmVnKTsKKyAgICAgICAgICAgIGlmIChnZXROZXcobmV3
UmVnKSkgeworICAgICAgICAgICAgICAgIGlmIChnZXROZXcobmV3UmVnKS0+cmVjb3ZlcnkoKS5p
c0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiAlYyU4cyA8LSAg
ICAgICAgICAgY29uc3RhbnQgJWMgIiwgZCwgc3RyLmRhdGEoKSwgZCk7CisgICAgICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gcmVjb3ZlcnlTdHIgPSB0b0NTdHJp
bmcoZ2V0TmV3KG5ld1JlZyktPnJlY292ZXJ5KCkpOworICAgICAgICAgICAgICAgICAgICBvdXQu
cHJpbnRmKCIgJWMlOHMgPC0gJTE4cyAlYyAiLCBkLCBzdHIuZGF0YSgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgcmVjb3ZlcnlTdHIuZGF0YSgpLCBkKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKG5ld1JlZyA9PSBWaXJ0dWFsUmVnaXN0ZXIgeyBKU1N0YWNr
OjpBcmd1bWVudENvdW50IH0pCisgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiICVjJThzIDwt
ICUxOHp1ICVjICIsIGQsIHN0ci5kYXRhKCksIGFyZ0NvdW50KCksIGQpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiAlYyUzMHMgJWMgIiwgZCwgIiIsIGQp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludChlbXB0eVNwYWNlKTsKKyAg
ICAgICAgaWYgKG5ld1JlZyA9PSBmaXJzdE5ldygpIC0gbV9uZXdGcmFtZU9mZnNldCAmJiAhaXNT
bG93UGF0aCgpKQorICAgICAgICAgICAgb3V0LnByaW50KCIgPC0tIG5ldyBzcCBiZWZvcmUganVt
cCAoY3VycmVudCAiLCBtX25ld0ZyYW1lQmFzZSwgIikgIik7CisgICAgICAgIGlmIChuZXdSZWcg
PT0gZmlyc3ROZXcoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiIDwtLSBuZXcgZnAgYWZ0ZXIg
cHJvbG9ndWUiKTsKKyAgICAgICAgb3V0LnByaW50KCJcbiIpOworICAgIH0KKyAgICBvdXQucHJp
bnQoIiAgICAgICAgICAiKTsKKyAgICBvdXQucHJpbnQoIiAgICAgICAgTGl2ZSByZWdpc3RlcnMg
ICAgICAgICAgICAgIik7CisgICAgb3V0LnByaW50KCIgICAgICAgIFdhbnRlZCByZWdpc3RlcnMg
ICAgICAgICAgICIpOworICAgIG91dC5wcmludCgiXG4iKTsKKyAgICBmb3IgKFJlZyByZWcgPSBS
ZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVnLm5leHQoKSkgeworICAg
ICAgICBDYWNoZWRSZWNvdmVyeSogb2xkQ2FjaGVkUmVjb3ZlcnkgeyBtX3JlZ2lzdGVyc1tyZWdd
IH07CisgICAgICAgIENhY2hlZFJlY292ZXJ5KiBuZXdDYWNoZWRSZWNvdmVyeSB7IG1fbmV3UmVn
aXN0ZXJzW3JlZ10gfTsKKyAgICAgICAgaWYgKCFvbGRDYWNoZWRSZWNvdmVyeSAmJiAhbmV3Q2Fj
aGVkUmVjb3ZlcnkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgb3V0LnByaW50KCIg
ICAgICAgICAgIik7CisgICAgICAgIGlmIChvbGRDYWNoZWRSZWNvdmVyeSkgeworICAgICAgICAg
ICAgYXV0byBzdHIgPSB0b0NTdHJpbmcocmVnKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiAg
ICAgICAgICU4cyAgICAgICAgICAgICAgICAgICIsIHN0ci5kYXRhKCkpOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIG91dC5wcmludChlbXB0eVNwYWNlKTsKKyNpZiBVU0UoSlNWQUxVRTMy
XzY0KQorICAgICAgICBpZiAobmV3Q2FjaGVkUmVjb3ZlcnkpIHsKKyAgICAgICAgICAgIEpTVmFs
dWVSZWdzIHdhbnRlZEpTVmFsdWVSZWdzIHsgbmV3Q2FjaGVkUmVjb3ZlcnktPndhbnRlZEpTVmFs
dWVSZWdzKCkgfTsKKyAgICAgICAgICAgIGlmIChyZWcuaXNGUFIoKSkKKyAgICAgICAgICAgICAg
ICBvdXQucHJpbnQocmVnLCAiIDwtICIsIG5ld0NhY2hlZFJlY292ZXJ5LT5yZWNvdmVyeSgpKTsK
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChyZWcuZ3ByKCkgPT0gd2Fu
dGVkSlNWYWx1ZVJlZ3MudGFnR1BSKCkpCisgICAgICAgICAgICAgICAgICAgIG91dC5wcmludChy
ZWcuZ3ByKCksICIgPC0gdGFnKCIsIG5ld0NhY2hlZFJlY292ZXJ5LT5yZWNvdmVyeSgpLCAiKSIp
OworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KHJl
Zy5ncHIoKSwgIiA8LSBwYXlsb2FkKCIsIG5ld0NhY2hlZFJlY292ZXJ5LT5yZWNvdmVyeSgpLCAi
KSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZWxzZQorICAgICAgICBpZiAobmV3Q2Fj
aGVkUmVjb3ZlcnkpCisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAgICAgICIsIHJlZywgIiA8
LSAiLCBuZXdDYWNoZWRSZWNvdmVyeS0+cmVjb3ZlcnkoKSk7CisjZW5kaWYKKyAgICAgICAgb3V0
LnByaW50KCJcbiIpOworICAgIH0KKyAgICBvdXQucHJpbnQoIiAgTG9ja2VkIHJlZ2lzdGVyczog
Iik7CisgICAgYm9vbCBmaXJzdExvY2tlZCB7IHRydWUgfTsKKyAgICBmb3IgKFJlZyByZWcgPSBS
ZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVnLm5leHQoKSkgeworICAg
ICAgICBpZiAobV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgIG91dC5w
cmludChmaXJzdExvY2tlZCA/ICIiIDogIiwgIiwgcmVnKTsKKyAgICAgICAgICAgIGZpcnN0TG9j
a2VkID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgb3V0LnByaW50KCJcbiIpOworCisg
ICAgaWYgKGlzU2xvd1BhdGgoKSkKKyAgICAgICAgb3V0LnByaW50KCIgIFVzaW5nIGZwLXJlbGF0
aXZlIGFkZHJlc3NpbmcgZm9yIHNsb3cgcGF0aCBjYWxsXG4iKTsKKyAgICBlbHNlCisgICAgICAg
IG91dC5wcmludCgiICBVc2luZyBzcC1yZWxhdGl2ZSBhZGRyZXNzaW5nIGZvciBqdW1wICh1c2lu
ZyAiLCBtX25ld0ZyYW1lQmFzZSwgIiBhcyBuZXcgc3ApXG4iKTsKKyAgICBpZiAobV9vbGRGcmFt
ZU9mZnNldCkKKyAgICAgICAgb3V0LnByaW50KCIgICBPbGQgZnJhbWUgb2Zmc2V0IGlzICIsIG1f
b2xkRnJhbWVPZmZzZXQsICJcbiIpOworICAgIGlmIChtX25ld0ZyYW1lT2Zmc2V0KQorICAgICAg
ICBvdXQucHJpbnQoIiAgIE5ldyBmcmFtZSBvZmZzZXQgaXMgIiwgbV9uZXdGcmFtZU9mZnNldCwg
IlxuIik7Cit9CisKK0NhY2hlZFJlY292ZXJ5KiBDYWxsRnJhbWVTaHVmZmxlcjo6Z2V0Q2FjaGVk
UmVjb3ZlcnkoVmFsdWVSZWNvdmVyeSByZWNvdmVyeSkKK3sKKyAgICBBU1NFUlQoIXJlY292ZXJ5
LmlzQ29uc3RhbnQoKSk7CisgICAgaWYgKHJlY292ZXJ5LmlzSW5HUFIoKSkKKyAgICAgICAgcmV0
dXJuIG1fcmVnaXN0ZXJzW3JlY292ZXJ5LmdwcigpXTsKKyAgICBpZiAocmVjb3ZlcnkuaXNJbkZQ
UigpKQorICAgICAgICByZXR1cm4gbV9yZWdpc3RlcnNbcmVjb3ZlcnkuZnByKCldOworI2lmIFVT
RShKU1ZBTFVFMzJfNjQpCisgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpID09IEluUGFpcikg
eworICAgICAgICBBU1NFUlQobV9yZWdpc3RlcnNbcmVjb3ZlcnkudGFnR1BSKCldID09IG1fcmVn
aXN0ZXJzW3JlY292ZXJ5LnBheWxvYWRHUFIoKV0pOworICAgICAgICByZXR1cm4gbV9yZWdpc3Rl
cnNbcmVjb3ZlcnkucGF5bG9hZEdQUigpXTsKKyAgICB9CisjZW5kaWYKKyAgICBBU1NFUlQocmVj
b3ZlcnkuaXNJbkpTU3RhY2soKSk7CisgICAgcmV0dXJuIGdldE9sZChyZWNvdmVyeS52aXJ0dWFs
UmVnaXN0ZXIoKSk7Cit9CisKK0NhY2hlZFJlY292ZXJ5KiBDYWxsRnJhbWVTaHVmZmxlcjo6c2V0
Q2FjaGVkUmVjb3ZlcnkoVmFsdWVSZWNvdmVyeSByZWNvdmVyeSwgQ2FjaGVkUmVjb3ZlcnkqIGNh
Y2hlZFJlY292ZXJ5KQoreworICAgIEFTU0VSVCghcmVjb3ZlcnkuaXNDb25zdGFudCgpKTsKKyAg
ICBpZiAocmVjb3ZlcnkuaXNJbkdQUigpKQorICAgICAgICByZXR1cm4gbV9yZWdpc3RlcnNbcmVj
b3ZlcnkuZ3ByKCldID0gY2FjaGVkUmVjb3Zlcnk7CisgICAgaWYgKHJlY292ZXJ5LmlzSW5GUFIo
KSkKKyAgICAgICAgcmV0dXJuIG1fcmVnaXN0ZXJzW3JlY292ZXJ5LmZwcigpXSA9IGNhY2hlZFJl
Y292ZXJ5OworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1
ZSgpID09IEluUGFpcikgeworICAgICAgICBtX3JlZ2lzdGVyc1tyZWNvdmVyeS50YWdHUFIoKV0g
PSBjYWNoZWRSZWNvdmVyeTsKKyAgICAgICAgcmV0dXJuIG1fcmVnaXN0ZXJzW3JlY292ZXJ5LnBh
eWxvYWRHUFIoKV0gPSBjYWNoZWRSZWNvdmVyeTsKKyAgICB9CisjZW5kaWYKKyAgICBBU1NFUlQo
cmVjb3ZlcnkuaXNJbkpTU3RhY2soKSk7CisgICAgc2V0T2xkKHJlY292ZXJ5LnZpcnR1YWxSZWdp
c3RlcigpLCBjYWNoZWRSZWNvdmVyeSk7CisgICAgcmV0dXJuIGNhY2hlZFJlY292ZXJ5OworfQor
Cit2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpzcGlsbChDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVj
b3ZlcnkpCit7CisgICAgQVNTRVJUKCFpc1Nsb3dQYXRoKCkpOworICAgIEFTU0VSVChjYWNoZWRS
ZWNvdmVyeS5yZWNvdmVyeSgpLmlzSW5SZWdpc3RlcnMoKSk7CisKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3BpbGxTbG90IHsgMCB9OworICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIHNsb3QgPSBmaXJz
dE9sZCgpOyBzbG90IDw9IGxhc3RPbGQoKTsgc2xvdCAtPSAxKSB7CisgICAgICAgIEFTU0VSVChz
bG90IDwgbmV3QXNPbGQoZmlyc3ROZXcoKSkpOworICAgICAgICBpZiAoZ2V0T2xkKHNsb3QpKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgc3BpbGxTbG90ID0gc2xvdDsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIC8vIFdlIG11c3QgaGF2ZSBlbm91Z2ggc2xvdHMgdG8gYmUg
YWJsZSB0byBmaXQgdGhlIHdob2xlCisgICAgLy8gY2FsbGVlJ3MgZnJhbWUgZm9yIHRoZSBzbG93
IHBhdGguCisgICAgUkVMRUFTRV9BU1NFUlQoc3BpbGxTbG90LmlzTG9jYWwoKSk7CisKKyAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiICAgKiBTcGlsbGluZyAiLCBjYWNoZWRSZWNv
dmVyeS5yZWNvdmVyeSgpLCAiIGludG8gIiwgc3BpbGxTbG90LCAiXG4iKTsKKyAgICBhdXRvIGZv
cm1hdCA9IGVtaXRTdG9yZShjYWNoZWRSZWNvdmVyeSwgYWRkcmVzc0Zvck9sZChzcGlsbFNsb3Qp
KTsKKyAgICBBU1NFUlQoZm9ybWF0ICE9IERhdGFGb3JtYXROb25lKTsKKyAgICB1cGRhdGVSZWNv
dmVyeShjYWNoZWRSZWNvdmVyeSwgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKHNw
aWxsU2xvdCwgZm9ybWF0KSk7Cit9CisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXREZWx0
YUNoZWNrKCkKK3sKKyAgICBpZiAoQVNTRVJUX0RJU0FCTEVEKQorICAgICAgICByZXR1cm47CisK
KyAgICBHUFJSZWcgc2NyYXRjaEdQUiB7IGdldEZyZWVHUFIoKSB9OworICAgIGlmIChzY3JhdGNo
R1BSICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAg
ICBkYXRhTG9nKCIgIFVzaW5nICIsIHNjcmF0Y2hHUFIsICIgZm9yIHRoZSBmcC1zcCBkZWx0YSBj
aGVja1xuIik7CisgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbV9qaXQuc3ViUHRyKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgb2sgPSBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCwgc2NyYXRjaEdQUiwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
LW51bUxvY2FscygpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgICAgICBtX2ppdC5hYm9ydFdp
dGhSZWFzb24oSklUVW5leHBlY3RlZENhbGxGcmFtZVNpemUpOworICAgICAgICBvay5saW5rKCZt
X2ppdCk7CisgICAgfSBlbHNlIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCIgIFNraXBw
aW5nIHRoZSBmcC1zcCBkZWx0YSBjaGVjayBzaW5jZSB0aGVyZSBpcyB0b28gbXVjaCBwcmVzc3Vy
ZSIpOworfQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlRm9yU2xvd1BhdGgoKQor
eworICAgIEFTU0VSVChpc1VuZGVjaWRlZCgpKTsKKyAgICBlbWl0RGVsdGFDaGVjaygpOworCisg
ICAgbV9mcmFtZURlbHRhID0gbnVtTG9jYWxzKCkgKyBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBD
U2l6ZTsKKyAgICBtX25ld0ZyYW1lQmFzZSA9IE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJS
ZWdpc3RlcjsKKyAgICBtX25ld0ZyYW1lT2Zmc2V0ID0gLUpTU3RhY2s6OkNhbGxlckZyYW1lQW5k
UENTaXplOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIlxuXG5QcmVwYXJp
bmcgZnJhbWUgZm9yIHNsb3cgcGF0aCBjYWxsOlxuIiwgKnRoaXMpOworCisgICAgcHJlcGFyZUFu
eSgpOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIlJlYWR5IGZvciBzbG93
IHBhdGggY2FsbCFcbiIpOworfQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlRm9y
VGFpbENhbGwoKQoreworICAgIEFTU0VSVChpc1VuZGVjaWRlZCgpKTsKKyAgICBlbWl0RGVsdGFD
aGVjaygpOworCisgICAgLy8gV2UnbGwgdXNlIHNwLWJhc2VkIGluZGV4aW5nIHNvIHRoYXQgd2Ug
Y2FuIGxvYWQgdGhlCisgICAgLy8gY2FsbGVyJ3MgZnJhbWUgcG9pbnRlciBpbnRvIHRoZSBmcHIg
aW1tZWRpYXRlbHkKKyAgICBtX29sZEZyYW1lQmFzZSA9IE1hY3JvQXNzZW1ibGVyOjpzdGFja1Bv
aW50ZXJSZWdpc3RlcjsKKyAgICBtX29sZEZyYW1lT2Zmc2V0ID0gbnVtTG9jYWxzKCk7CisgICAg
bV9uZXdGcmFtZUJhc2UgPSBhY3F1aXJlR1BSKCk7CisjaWYgQ1BVKFg4NikKKyAgICAvLyBXZSBs
b2FkIHRoZSBmcmFtZSBwb2ludGVyIG1hbnVhbGx5LCBidXQgd2UgbmVlZCB0byBhc2sgdGhlCisg
ICAgLy8gYWxnb3JpdGhtIHRvIG1vdmUgdGhlIHJldHVybiBQQyBmb3IgdXMgKGl0J2QgcHJvYmFi
bHkKKyAgICAvLyByZXF1aXJlIGEgd3JpdGUgdG8gdGhlIGRhbmdlciB6b25lKS4gU2luY2UgaXQn
ZCBiZSBhd2t3YXJkCisgICAgLy8gdG8gYXNrIGZvciBoYWxmIGEgdmFsdWUgbW92ZSwgd2UgYXNr
IHRoYXQgdGhlIHdob2xlIHRoaW5nCisgICAgLy8gYmUgbW92ZWQgZm9yIHVzLgorICAgIGFkZE5l
dyhWaXJ0dWFsUmVnaXN0ZXIgeyAwIH0sCisgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNl
ZEluSlNTdGFjayhWaXJ0dWFsUmVnaXN0ZXIoMCksIERhdGFGb3JtYXRKUykpOworCisgICAgLy8g
c3Agd2lsbCBwb2ludCB0byBoZWFkMCBhbmQgd2Ugd2lsbCBtb3ZlIGl0IHVwIGhhbGYgYSBzbG90
CisgICAgLy8gbWFudWFsbHkKKyAgICBtX25ld0ZyYW1lT2Zmc2V0ID0gMDsKKyNlbGlmIENQVShB
Uk0pIHx8IENQVShTSDQpIHx8IENQVShNSVBTKQorICAgIC8vIFdlIGxvYWQgdGhlIHRoZSBmcmFt
ZSBwb2ludGVyIGFuZCBsaW5rIHJlZ2lzdGVyCisgICAgLy8gbWFudWFsbHkuIFdlIGNvdWxkIGFz
ayB0aGUgYWxnb3JpdGhtIHRvIGxvYWQgdGhlbSBmb3IgdXMsCisgICAgLy8gYW5kIGl0IHdvdWxk
IGFsbG93IHVzIHRvIHVzZSB0aGUgbGluayByZWdpc3RlciBhcyBhbiBleHRyYQorICAgIC8vIHRl
bXBvcmFyeSAtIGJ1dCBpdCdkIG1lYW4gdGhhdCB0aGUgZnJhbWUgcG9pbnRlciBjYW4gYWxzbwor
ICAgIC8vIGJlIHVzZWQgYXMgYW4gZXh0cmEgdGVtcG9yYXJ5LCBzbyB3ZSBrZWVwIHRoZSBsaW5r
IHJlZ2lzdGVyCisgICAgLy8gbG9ja2VkIGluc3RlYWQuCisKKyAgICAvLyBzcCB3aWxsIHBvaW50
IHRvIGhlYWQxIHNpbmNlIHRoZSBjYWxsZWUncyBwcm9sb2d1ZSBwdXNoZXMKKyAgICAvLyB0aGUg
Y2FsbCBmcmFtZSBhbmQgbGluayByZWdpc3Rlci4KKyAgICBtX25ld0ZyYW1lT2Zmc2V0ID0gLTE7
CisjZWxpZiBDUFUoQVJNNjQpCisgICAgLy8gV2UgbG9hZCB0aGUgZnJhbWUgcG9pbnRlciBhbmQg
bGluayByZWdpc3RlciBtYW51YWxseS4gV2UKKyAgICAvLyBjb3VsZCBhc2sgdGhlIGFsZ29yaXRo
bSB0byBsb2FkIHRoZSBsaW5rIHJlZ2lzdGVyIGZvciB1cworICAgIC8vICh3aGljaCB3b3VsZCBh
bGxvdyBmb3IgaXRzIHVzZSBhcyBhbiBleHRyYSB0ZW1wb3JhcnkpLCBidXQKKyAgICAvLyBzaW5j
ZSBpdHMgbm90IGluIEdQUkluZm8sIHdlIGNhbid0IGRvIGl0LgorCisgICAgLy8gc3Agd2lsbCBw
b2ludCB0byBoZWFkMiBzaW5jZSB0aGUgY2FsbGVlJ3MgcHJvbG9ndWUgcHVzaGVzIHRoZQorICAg
IC8vIGNhbGwgZnJhbWUgYW5kIGxpbmsgcmVnaXN0ZXIKKyAgICBtX25ld0ZyYW1lT2Zmc2V0ID0g
LTI7CisjZWxpZiBDUFUoWDg2XzY0KQorICAgIC8vIFdlIGxvYWQgdGhlIGZyYW1lIHBvaW50ZXIg
bWFudWFsbHksIGJ1dCB3ZSBhc2sgdGhlCisgICAgLy8gYWxnb3JpdGhtIHRvIG1vdmUgdGhlIHJl
dHVybiBQQyBmb3IgdXMgKGl0J2QgcHJvYmFibHkKKyAgICAvLyByZXF1aXJlIGEgd3JpdGUgaW4g
dGhlIGRhbmdlciB6b25lKQorICAgIGFkZE5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyAxIH0sCisgICAg
ICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjayhWaXJ0dWFsUmVnaXN0ZXIoMSks
IERhdGFGb3JtYXRKUykpOworCisgICAgLy8gc3Agd2lsbCBwb2ludCB0byBoZWFkMSBzaW5jZSB0
aGUgY2FsbGVlJ3MgcHJvbG9ndWUgcHVzaGVzCisgICAgLy8gdGhlIGNhbGwgZnJhbWUgcmVnaXN0
ZXIKKyAgICBtX25ld0ZyYW1lT2Zmc2V0ID0gLTE7CisjZWxzZQorICAgIFVOUkVBQ0hBQkxFX0ZP
Ul9QTEFURk9STSgpOworI2VuZGlmCisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxv
ZygiICBFbWl0dGluZyBjb2RlIGZvciBjb21wdXRpbmcgdGhlIG5ldyBmcmFtZSBiYXNlXG4iKTsK
KworICAgIC8vIFdlIGNvbXB1dGUgdGhlIG5ldyBmcmFtZSBiYXNlIGJ5IGZpcnN0IGNvbXB1dGlu
ZyB0aGUgdG9wIG9mIHRoZQorICAgIC8vIG9sZCBmcmFtZSAodGFraW5nIGludG8gYWNjb3VudCBh
biBhcmd1bWVudCBjb3VudCBoaWdoZXIgdGhhbgorICAgIC8vIHRoZSBudW1iZXIgb2YgcGFyYW1l
dGVycyksIHRoZW4gc3Vic3RyYWN0aW5nIHRvIGl0IHRoZSBhbGlnbmVkCisgICAgLy8gbmV3IGZy
YW1lIHNpemUgKGFkanVzdGVkKS4KKyAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCksIG1f
bmV3RnJhbWVCYXNlKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBhcmd1bWVudENvdW50T0sg
PQorICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsLCBt
X25ld0ZyYW1lQmFzZSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
bV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkpOworICAgIG1faml0LmFkZDMyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSAtIDEg
KyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplKSwgbV9uZXdGcmFtZUJhc2UpOworICAgIG1f
aml0LmFuZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLXN0YWNrQWxpZ25tZW50UmVn
aXN0ZXJzKCkpLCBtX25ld0ZyYW1lQmFzZSk7CisgICAgbV9qaXQubXVsMzIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoUmVnaXN0ZXIpKSwgbV9uZXdGcmFtZUJhc2UsIG1fbmV3
RnJhbWVCYXNlKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgp
OworICAgIGFyZ3VtZW50Q291bnRPSy5saW5rKCZtX2ppdCk7CisgICAgbV9qaXQubW92ZSgKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtX2FsaWduZWRPbGRGcmFtZVNpemUg
KiBzaXplb2YoUmVnaXN0ZXIpKSwKKyAgICAgICAgbV9uZXdGcmFtZUJhc2UpOworICAgIGRvbmUu
bGluaygmbV9qaXQpOworCisgICAgbV9qaXQuYWRkUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBtX25ld0ZyYW1lQmFzZSk7CisgICAgbV9qaXQuc3ViUHRyKAorICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKAorICAgICAgICAgICAgKG1fYWxpZ25lZE5ld0ZyYW1lU2l6
ZSArIG1fbmV3RnJhbWVPZmZzZXQpICogc2l6ZW9mKFJlZ2lzdGVyKSksIAorICAgICAgICBtX25l
d0ZyYW1lQmFzZSk7CisKKyAgICAvLyBXZSBsb2FkIHRoZSBsaW5rIHJlZ2lzdGVyIG1hbnVhbGx5
IGZvciBhcmNoaXRlY3R1cmVzIHRoYXQgaGF2ZSBvbmUKKyNpZiBDUFUoQVJNKSB8fCBDUFUoU0g0
KSB8fCBDUFUoQVJNNjQpCisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIHNpemVvZih2b2lkKikpLAor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6bGlua1JlZ2lzdGVyKTsKKyNlbGlmIENQVShNSVBTKQor
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6
OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBzaXplb2Yodm9pZCopKSwKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJldHVybkFkZHJlc3NSZWdpc3Rlcik7CisjZW5kaWYKKworICAgIC8vIFdlIHdhbnQg
dGhlIGZyYW1lIHBvaW50ZXIgdG8gYWx3YXlzIHBvaW50IHRvIGEgdmFsaWQgZnJhbWUsIGFuZAor
ICAgIC8vIHdlIGFyZSBnb2luZyB0byB0cmFzaCB0aGUgY3VycmVudCBvbmUuIExldCdzIG1ha2Ug
aXQgcG9pbnQgdG8KKyAgICAvLyBvdXIgY2FsbGVyJ3MgZnJhbWUsIHNpbmNlIHRoYXQncyB3aGF0
IHdlIHdhbnQgdG8gZW5kIHVwIHdpdGguCisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIpLAorICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOworCisgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgIGRhdGFMb2coIlByZXBhcmluZyBmcmFtZSBmb3IgdGFpbCBjYWxsOlxuIiwg
KnRoaXMpOworCisgICAgcHJlcGFyZUFueSgpOworCisjaWYgQ1BVKFg4NikKKyAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgZGF0YUxvZygiICBTaW11bGF0aW5nIHBvcCBvZiB0aGUgY2FsbCBmcmFt
ZSByZWdpc3RlclxuIik7CisgICAgbV9qaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoc2l6ZW9mKHZvaWQqKSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisjZW5kaWYKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJSZWFkeSBm
b3IgdGFpbCBjYWxsIVxuIik7Cit9CisKK2Jvb2wgQ2FsbEZyYW1lU2h1ZmZsZXI6OnRyeVdyaXRl
cyhDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3ZlcnkpCit7CisgICAgQVNTRVJUKG1fbmV3RnJh
bWVCYXNlICE9IEludmFsaWRHUFJSZWcpOworCisgICAgLy8gSWYgdGhlIHZhbHVlIGlzIGFscmVh
ZHkgc2V0IHVwIGNvcnJlY3RseSwgd2UgZG9uJ3QgaGF2ZQorICAgIC8vIGFueXRoaW5nIHRvIGRv
LgorICAgIGlmIChpc1Nsb3dQYXRoKCkgJiYgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5pc0lu
SlNTdGFjaygpCisgICAgICAgICYmIGNhY2hlZFJlY292ZXJ5LnRhcmdldHMoKS5zaXplKCkgPT0g
MQorICAgICAgICAmJiBuZXdBc09sZChjYWNoZWRSZWNvdmVyeS50YXJnZXRzKClbMF0pID09IGNh
Y2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkudmlydHVhbFJlZ2lzdGVyKCkpIHsKKyAgICAgICAgY2Fj
aGVkUmVjb3ZlcnkuY2xlYXJUYXJnZXRzKCk7CisgICAgICAgIGlmICghY2FjaGVkUmVjb3Zlcnku
d2FudGVkSlNWYWx1ZVJlZ3MoKSAmJiBjYWNoZWRSZWNvdmVyeS53YW50ZWRGUFIoKSA9PSBJbnZh
bGlkRlBSUmVnKQorICAgICAgICAgICAgY2xlYXJDYWNoZWRSZWNvdmVyeShjYWNoZWRSZWNvdmVy
eS5yZWNvdmVyeSgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKCFj
YW5Mb2FkQW5kQm94KGNhY2hlZFJlY292ZXJ5KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgZW1pdExvYWQoY2FjaGVkUmVjb3ZlcnkpOworICAgIGVtaXRCb3goY2FjaGVkUmVjb3Zlcnkp
OworICAgIEFTU0VSVChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmlzSW5SZWdpc3RlcnMoKQor
ICAgICAgICB8fCBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmlzQ29uc3RhbnQoKSk7CisKKyAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiICAgKiBTdG9yaW5nICIsIGNhY2hlZFJl
Y292ZXJ5LnJlY292ZXJ5KCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FjaGVkUmVj
b3ZlcnkudGFyZ2V0cygpLnNpemUoKTsgKytpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB0
YXJnZXQgeyBjYWNoZWRSZWNvdmVyeS50YXJnZXRzKClbaV0gfTsKKyAgICAgICAgQVNTRVJUKCFp
c0Rhbmdlck5ldyh0YXJnZXQpKTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBk
YXRhTG9nKCFpID8gIiBpbnRvICIgOiAiLCBhbmQgIiwgIk5FVyAiLCB0YXJnZXQpOworICAgICAg
ICBlbWl0U3RvcmUoY2FjaGVkUmVjb3ZlcnksIGFkZHJlc3NGb3JOZXcodGFyZ2V0KSk7CisgICAg
ICAgIHNldE5ldyh0YXJnZXQsIG51bGxwdHIpOworICAgIH0KKyAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICBjYWNoZWRSZWNvdmVyeS5jbGVhclRhcmdldHMoKTsK
KyAgICBpZiAoIWNhY2hlZFJlY292ZXJ5LndhbnRlZEpTVmFsdWVSZWdzKCkgJiYgY2FjaGVkUmVj
b3Zlcnkud2FudGVkRlBSKCkgPT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgY2xlYXJDYWNoZWRS
ZWNvdmVyeShjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpKTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIENhbGxGcmFtZVNodWZmbGVyOjpwZXJmb3JtU2FmZVdyaXRlcygpCit7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGZpcnN0U2FmZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW5kIHsgbGFz
dE5ldygpICsgMSB9OworICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+IGZhaWx1cmVzOworCisg
ICAgLy8gRm9yIGFsbCBjYWNoZWRSZWNvdmVyaWVzIHRoYXQgd3JpdGVzIHRvIHRoZSBzYWZlIHpv
bmUsIGlmIGl0CisgICAgLy8gZG9lc24ndCBhbHNvIHdyaXRlIHRvIHRoZSBkYW5nZXIgem9uZSwg
d2UgdHJ5IHRvIHBlcmZvcm0KKyAgICAvLyB0aGUgd3JpdGVzLiBUaGlzIG1heSBmcmVlIHVwIGRh
bmdlciBzbG90cywgc28gd2UgaXRlcmF0ZQorICAgIC8vIGFnYWluIHVudGlsIGl0IGRvZXNuJ3Qg
aGFwcGVuIGFueW1vcmUuCisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgZXZlbiB0aG91Z2ggd2Ug
aGF2ZSBhIHdoaWxlIGJsb2NrLCB3ZSBsb29rIGF0CisgICAgLy8gZWFjaCBzbG90IG9mIHRoZSBu
ZXcgY2FsbCBmcmFtZSBhdCBtb3N0IG9uY2Ugc2luY2UgaW4gZWFjaAorICAgIC8vIGl0ZXJhdGlv
biBiZXlvbmQgdGhlIGZpcnN0LCB3ZSBvbmx5IGxvYWQgdXAgdGhlIHBvcnRpb24gb2YKKyAgICAv
LyB0aGUgbmV3IGNhbGwgZnJhbWUgdGhhdCB3YXMgZGFuZ2Vyb3VzIGFuZCBiZWNhbWUgc2FmZSBk
dWUKKyAgICAvLyB0byB0aGUgcHJldmlvdXMgaXRlcmF0aW9uLgorICAgIGRvIHsKKyAgICAgICAg
Zmlyc3RTYWZlID0gZGFuZ2VyRnJvbnRpZXIoKSArIDE7CisgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgZGF0YUxvZygiICBUcnlpbmcgc2FmZSB3cml0ZXMgKGJldHdlZW4gTkVXICIs
IGZpcnN0U2FmZSwgIiBhbmQgTkVXICIsIGVuZCAtIDEsICIpXG4iKTsKKyAgICAgICAgYm9vbCBk
aWRQcm9ncmVzcyA9IGZhbHNlOworICAgICAgICBmb3IgKFZpcnR1YWxSZWdpc3RlciByZWcgPSBm
aXJzdFNhZmU7IHJlZyA8IGVuZDsgcmVnICs9IDEpIHsKKyAgICAgICAgICAgIENhY2hlZFJlY292
ZXJ5KiBjYWNoZWRSZWNvdmVyeSA9IGdldE5ldyhyZWcpOworICAgICAgICAgICAgaWYgKCFjYWNo
ZWRSZWNvdmVyeSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIgICArICIsIHJlZywgIiBpcyBPSy5cbiIpOworICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFoYXNPbmx5U2Fm
ZVdyaXRlcygqY2FjaGVkUmVjb3ZlcnkpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2Up
IHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgLSAiLCBjYWNoZWRSZWNvdmVyeS0+
cmVjb3ZlcnkoKSwgIiB3cml0ZXMgdG8gTkVXICIsIHJlZywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICIgYnV0IGFsc28gaGFzIGRhbmdlcm91cyB3cml0ZXMuXG4iKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoY2FjaGVkUmVjb3ZlcnktPndhbnRlZEpTVmFsdWVSZWdzKCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAtICIs
IGNhY2hlZFJlY292ZXJ5LT5yZWNvdmVyeSgpLCAiIHdyaXRlcyB0byBORVcgIiwgcmVnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIiBidXQgaXMgYWxzbyBuZWVkZWQgaW4gcmVnaXN0ZXJzLlxu
Iik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKGNhY2hlZFJlY292ZXJ5LT53YW50ZWRGUFIoKSAhPSBJ
bnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiICAgLSAiLCBjYWNoZWRSZWNvdmVyeS0+cmVjb3ZlcnkoKSwg
IiB3cml0ZXMgdG8gTkVXICIsIHJlZywKKyAgICAgICAgICAgICAgICAgICAgICAgICIgYnV0IGlz
IGFsc28gbmVlZGVkIGluIGFuIEZQUi5cbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghdHJ5V3Jp
dGVzKCpjYWNoZWRSZWNvdmVyeSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgLSBVbmFibGUgdG8gd3JpdGUgdG8gTkVXICIs
IHJlZywgIiBmcm9tICIsIGNhY2hlZFJlY292ZXJ5LT5yZWNvdmVyeSgpLCAiXG4iKTsKKyAgICAg
ICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQocmVnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGRpZFByb2dyZXNzID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbmQgPSBmaXJzdFNh
ZmU7CisKKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBjYWNoZWRSZWNvdmVyaWVzIHRoYXQgZmFpbGVk
IHRvIHdyaXRlLCBpdCBpcworICAgICAgICAvLyBiZWNhdXNlIHRoZXkgYXJlIG9uIHRoZSBzdGFj
ayBhbmQgd2UgZGlkbid0IGhhdmUgZW5vdWdoCisgICAgICAgIC8vIHJlZ2lzdGVycyBhdmFpbGFi
bGUgYXQgdGhlIHRpbWUgdG8gbG9hZCB0aGVtIGludG8uIElmCisgICAgICAgIC8vIHdlIGhhdmUg
YSBmcmVlIHJlZ2lzdGVyLCB3ZSBzaG91bGQgdHJ5IGFnYWluIGJlY2F1c2UgaXQKKyAgICAgICAg
Ly8gY291bGQgZnJlZSB1cCBzb21lIGRhbmdlciBzbG90cy4KKyAgICAgICAgaWYgKGRpZFByb2dy
ZXNzICYmIGhhc0ZyZWVSZWdpc3RlcigpKSB7CisgICAgICAgICAgICBWZWN0b3I8VmlydHVhbFJl
Z2lzdGVyPiBzdGlsbEZhaWxpbmc7CisgICAgICAgICAgICBmb3IgKFZpcnR1YWxSZWdpc3RlciBm
YWlsZWQgOiBmYWlsdXJlcykgeworICAgICAgICAgICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNo
ZWRSZWNvdmVyeSA9IGdldE5ldyhmYWlsZWQpOworICAgICAgICAgICAgICAgIC8vIEl0IGNvdWxk
IGhhdmUgYmVlbiBoYW5kbGVkIGxhdGVyIGlmIGl0IGhhZAorICAgICAgICAgICAgICAgIC8vIHNl
dmVyYWwgdGFyZ2V0cworICAgICAgICAgICAgICAgIGlmICghY2FjaGVkUmVjb3ZlcnkpCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgQVNTRVJUKGhhc09u
bHlTYWZlV3JpdGVzKCpjYWNoZWRSZWNvdmVyeSkKKyAgICAgICAgICAgICAgICAgICAgJiYgIWNh
Y2hlZFJlY292ZXJ5LT53YW50ZWRKU1ZhbHVlUmVncygpCisgICAgICAgICAgICAgICAgICAgICYm
IGNhY2hlZFJlY292ZXJ5LT53YW50ZWRGUFIoKSA9PSBJbnZhbGlkRlBSUmVnKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIXRyeVdyaXRlcygqY2FjaGVkUmVjb3ZlcnkpKQorICAgICAgICAgICAgICAg
ICAgICBzdGlsbEZhaWxpbmcuYXBwZW5kKGZhaWxlZCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBmYWlsdXJlcyA9IFdURjo6bW92ZShzdGlsbEZhaWxpbmcpOworICAgICAgICB9CisgICAg
ICAgIGlmICh2ZXJib3NlICYmIGZpcnN0U2FmZSAhPSBkYW5nZXJGcm9udGllcigpICsgMSkKKyAg
ICAgICAgICAgIGRhdGFMb2coIiAgV2UgZnJlZWQgdXAgZGFuZ2VyIHNsb3RzIVxuIik7CisgICAg
fSB3aGlsZSAoZmlyc3RTYWZlICE9IGRhbmdlckZyb250aWVyKCkgKyAxKTsKKworICAgIHJldHVy
biBmYWlsdXJlcy5pc0VtcHR5KCk7Cit9CisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OnByZXBh
cmVBbnkoKQoreworICAgIEFTU0VSVCghaXNVbmRlY2lkZWQoKSk7CisKKyAgICB1cGRhdGVEYW5n
ZXJGcm9udGllcigpOworCisgICAgLy8gRmlyc3QsIHdlIHRyeSB0byBzdG9yZSBhbnkgdmFsdWUg
dGhhdCBnb2VzIGFib3ZlIHRoZSBkYW5nZXIKKyAgICAvLyBmcm9udGllci4gVGhpcyB3aWxsIG5l
dmVyIHVzZSBtb3JlIHJlZ2lzdGVycyBzaW5jZSB3ZSBhcmUgb25seQorICAgIC8vIGxvYWRpbmcr
c3RvcmluZyBpZiB3ZSBlbnN1cmUgdGhhdCBhbnkgcmVnaXN0ZXIgdXNlZCBmb3IgdGhlIGxvYWQK
KyAgICAvLyB3aWxsIGJlIGZyZWVkIHVwIGFmdGVyIHRoZSBzdG9yZXMgKGkuZS4sIGFsbCBzdG9y
ZXMgYXJlIGFib3ZlCisgICAgLy8gdGhlIGRhbmdlciBmcm9udGllciwgYW5kIHRoZXJlIGlzIG5v
IHdhbnRlZCByZWdpc3RlcikuCisgICAgcGVyZm9ybVNhZmVXcml0ZXMoKTsKKworICAgIC8vIEF0
IHRoaXMgcG9pbnQsIHdlIGNvdWxkbid0IGhhdmUgbW9yZSBhdmFpbGFibGUgcmVnaXN0ZXJzIHRo
YW4KKyAgICAvLyB3ZSBoYXZlIHdpdGhvdXRoIHNwaWxsaW5nOiBhbGwgdmFsdWVzIGN1cnJlbnRs
eSBpbiByZWdpc3RlcnMKKyAgICAvLyBlaXRoZXIgcmVxdWlyZSBhIHdyaXRlIHRvIHRoZSBkYW5n
ZXIgem9uZSwgb3IgaGF2ZSBhIHdhbnRlZAorICAgIC8vIHJlZ2lzdGVyLCB3aGljaCBtZWFucyB0
aGF0IGluIGFueSBjYXNlIHRoZXkgd2lsbCBoYXZlIHRvIGdvCisgICAgLy8gdGhyb3VnaCByZWdp
c3RlcnMgYWdhaW4uCisKKyAgICAvLyBXZSBub3cgc2xvd2x5IGZyZWUgdXAgdGhlIGRhbmdlciB6
b25lIGJ5IGZpcnN0IGxvYWRpbmcgdGhlIG9sZAorICAgIC8vIHZhbHVlIG9uIHRoZSBkYW5nZXIg
ZnJvbnRpZXIsIHNwaWxsaW5nIGFzIG1hbnkgcmVnaXN0ZXJzIGFzCisgICAgLy8gbmVlZGVkIHRv
IGRvIHNvIGFuZCBlbnN1cmluZyB0aGF0IHRoZSBjb3JyZXNwb25kaW5nIHNsb3QgaW4gdGhlCisg
ICAgLy8gbmV3IGZyYW1lIGlzIG5vdyByZWFkeSB0byBiZSB3cml0dGVuLiBUaGVuLCB3ZSBzdG9y
ZSB0aGUgb2xkCisgICAgLy8gdmFsdWUgdG8gaXRzIHRhcmdldCBsb2NhdGlvbiBpZiBwb3NzaWJs
ZSAod2UgY291bGQgaGF2ZSBmYWlsZWQKKyAgICAvLyB0byBsb2FkIGl0IHByZXZpb3VzbHkgZHVl
IHRvIGhpZ2ggcHJlc3N1cmUpLiBGaW5hbGx5LCB3ZSB3cml0ZQorICAgIC8vIHRvIGFueSBvZiB0
aGUgbmV3bHkgc2FmZSBzbG90cyB0aGF0IHdlIGNhbiwgd2hpY2ggY291bGQgZnJlZSB1cAorICAg
IC8vIHJlZ2lzdGVycyAoaGVuY2Ugd2h5IHdlIGRvIGl0IGVhZ2VybHkpLgorICAgIGZvciAoVmly
dHVhbFJlZ2lzdGVyIHJlZyA9IGRhbmdlckZyb250aWVyKCk7IHJlZyA+PSBmaXJzdE5ldygpOyBy
ZWcgLT0gMSkgeworICAgICAgICBpZiAocmVnID09IGRhbmdlckZyb250aWVyKCkpIHsKKyAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgTmV4dCBzbG90
IChORVcgIiwgcmVnLCAiKSBpcyB0aGUgZGFuZ2VyIGZyb250aWVyXG4iKTsKKyAgICAgICAgICAg
IENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSB7IGdldE9sZChuZXdBc09sZChkYW5nZXJG
cm9udGllcigpKSkgfTsKKyAgICAgICAgICAgIEFTU0VSVChjYWNoZWRSZWNvdmVyeSk7CisgICAg
ICAgICAgICBlbnN1cmVMb2FkKCpjYWNoZWRSZWNvdmVyeSk7CisgICAgICAgICAgICBlbWl0TG9h
ZCgqY2FjaGVkUmVjb3ZlcnkpOworICAgICAgICAgICAgZW5zdXJlQm94KCpjYWNoZWRSZWNvdmVy
eSk7CisgICAgICAgICAgICBlbWl0Qm94KCpjYWNoZWRSZWNvdmVyeSk7CisgICAgICAgICAgICBp
ZiAoaGFzT25seVNhZmVXcml0ZXMoKmNhY2hlZFJlY292ZXJ5KSkKKyAgICAgICAgICAgICAgICB0
cnlXcml0ZXMoKmNhY2hlZFJlY292ZXJ5KTsKKyAgICAgICAgfSBlbHNlIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgZGF0YUxvZygiICBOZXh0IHNsb3QgaXMgTkVXICIsIHJlZywgIlxuIik7CisK
KyAgICAgICAgQVNTRVJUKCFpc0Rhbmdlck5ldyhyZWcpKTsKKyAgICAgICAgQ2FjaGVkUmVjb3Zl
cnkqIGNhY2hlZFJlY292ZXJ5ID0gZ2V0TmV3KHJlZyk7CisgICAgICAgIC8vIFRoaXMgY291bGQg
YmUgb25lIG9mIHRoZSBoZWFkZXIgc2xvdHMgd2UgZG9uJ3QgY2FyZSBhYm91dC4KKyAgICAgICAg
aWYgKCFjYWNoZWRSZWNvdmVyeSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgKyAiLCByZWcsICIgaXMgT0tcbiIpOworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2FuTG9hZEFuZEJveCgqY2FjaGVk
UmVjb3ZlcnkpICYmIGhhc09ubHlTYWZlV3JpdGVzKCpjYWNoZWRSZWNvdmVyeSkKKyAgICAgICAg
ICAgICYmICFjYWNoZWRSZWNvdmVyeS0+d2FudGVkSlNWYWx1ZVJlZ3MoKQorICAgICAgICAgICAg
JiYgY2FjaGVkUmVjb3ZlcnktPndhbnRlZEZQUigpID09IEludmFsaWRGUFJSZWcpIHsKKyAgICAg
ICAgICAgIGVtaXRMb2FkKCpjYWNoZWRSZWNvdmVyeSk7CisgICAgICAgICAgICBlbWl0Qm94KCpj
YWNoZWRSZWNvdmVyeSk7CisgICAgICAgICAgICBib29sIHdyaXRlc09LID0gdHJ5V3JpdGVzKCpj
YWNoZWRSZWNvdmVyeSk7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHdyaXRlc09LLCB3cml0
ZXNPSyk7CisgICAgICAgIH0gZWxzZSBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2co
IiAgIC0gIiwgY2FjaGVkUmVjb3ZlcnktPnJlY292ZXJ5KCksICIgY2FuJ3QgYmUgaGFuZGxlZCBq
dXN0IHlldC5cbiIpOworICAgIH0KKyAgICBBU1NFUlQoZGFuZ2VyRnJvbnRpZXIoKSA8IGZpcnN0
TmV3KCkpOworCisgICAgLy8gTm93LCB0aGUgZGFuZ2VyIHpvbmUgaXMgZW1wdHksIGJ1dCB3ZSBz
dGlsbCBoYXZlIGEgY291cGxlIG9mCisgICAgLy8gdGhpbmdzIHRvIGRvOgorICAgIC8vCisgICAg
Ly8gMSkgVGhlcmUgY291bGQgYmUgcmVtYWluaW5nIHNhZmUgd3JpdGVzIHRoYXQgZmFpbGVkIGVh
cmxpZXIgZHVlCisgICAgLy8gICAgdG8gaGlnaCByZWdpc3RlciBwcmVzc3VyZSBhbmQgaGFkIG5v
dGhpbmcgdG8gZG8gd2l0aCB0aGUKKyAgICAvLyAgICBkYW5nZXIgem9uZSB3aGF0c29ldmVyLgor
ICAgIC8vCisgICAgLy8gMikgU29tZSB3YW50ZWQgcmVnaXN0ZXJzIGNvdWxkIGhhdmUgdG8gYmUg
bG9hZGVkICh0aGlzIGNvdWxkCisgICAgLy8gICAgaGFwcGVuIGVpdGhlciB3aGVuIG1ha2luZyBh
IGNhbGwgdG8gYSBuZXcgZnVuY3Rpb24gd2l0aCBhCisgICAgLy8gICAgbG93ZXIgbnVtYmVyIG9m
IGFyZ3VtZW50cyAtIHNpbmNlIGFib3ZlIGhlcmUsIHdlIG9ubHkgbG9hZAorICAgIC8vICAgIHdh
bnRlZCByZWdpc3RlcnMgd2hlbiB0aGV5IGFyZSBhdCB0aGUgZGFuZ2VyIGZyb250aWVyIC0sIG9y
CisgICAgLy8gICAgaWYgYSB3YW50ZWQgcmVnaXN0ZXIgZ290IHNwaWxsZWQpLgorICAgIC8vCisg
ICAgLy8gMykgU29tZSB3YW50ZWQgcmVnaXN0ZXJzIGNvdWxkIGhhdmUgYmVlbiBsb2FkZWQgaW4g
dGhlIHdyb25nCisgICAgLy8gICAgcmVnaXN0ZXJzCisgICAgLy8KKyAgICAvLyA0KSBXZSBoYXZl
IHRvIHRha2UgY2FyZSBvZiBzb21lIGJvb2trZWVwaW5nIC0gbmFtZWx5LCBzdG9yaW5nCisgICAg
Ly8gICAgdGhlIGFyZ3VtZW50IGNvdW50IGFuZCB1cGRhdGluZyB0aGUgc3RhY2sgcG9pbnRlci4K
KworICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlIG11c3QgaGF2ZSBlbm91Z2ggcmVnaXN0ZXJzIGF2
YWlsYWJsZSBmb3IKKyAgICAvLyBoYW5kbGluZyAxKS4gTm9uZSBvZiB0aGUgbG9hZHMgY2FuIGZh
aWwgYmVjYXVzZSB3ZSBoYXZlIGJlZW4KKyAgICAvLyBlYWdlcmx5IGZyZWVpbmcgdXAgcmVnaXN0
ZXJzIGluIGFsbCB0aGUgcHJldmlvdXMgcGhhc2VzIC0gc28KKyAgICAvLyB0aGUgb25seSB2YWx1
ZXMgdGhhdCBhcmUgaW4gcmVnaXN0ZXJzIGF0IHRoaXMgcG9pbnQgbXVzdCBoYXZlCisgICAgLy8g
d2FudGVkIHJlZ2lzdGVycy4KKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiICBE
YW5nZXIgem9uZSBpcyBjbGVhciwgcGVyZm9ybWluZyByZW1haW5pbmcgd3JpdGVzLlxuIik7Cisg
ICAgZm9yIChWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gZmlyc3ROZXcoKTsgcmVnIDw9IGxhc3ROZXco
KTsgcmVnICs9IDEpIHsKKyAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5IHsg
Z2V0TmV3KHJlZykgfTsKKyAgICAgICAgaWYgKCFjYWNoZWRSZWNvdmVyeSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgIGVtaXRMb2FkKCpjYWNoZWRSZWNvdmVyeSk7CisgICAgICAg
IGVtaXRCb3goKmNhY2hlZFJlY292ZXJ5KTsKKyAgICAgICAgYm9vbCB3cml0ZXNPSyA9IHRyeVdy
aXRlcygqY2FjaGVkUmVjb3ZlcnkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHdyaXRlc09LLCB3
cml0ZXNPSyk7CisgICAgfQorCisgICAgLy8gSGFuZGxlIDIpIGJ5IGxvYWRpbmcgYWxsIHJlZ2lz
dGVycy4gV2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnkKKyAgICAvLyB3cml0ZXMsIHNpbmNlIHRoZXkg
aGF2ZSBiZWVuIHRha2VuIGNhcmUgb2YgYWJvdmUuCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
IGRhdGFMb2coIiAgTG9hZGluZyB3YW50ZWQgcmVnaXN0ZXJzIGludG8gcmVnaXN0ZXJzXG4iKTsK
KyAgICBmb3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVn
ID0gcmVnLm5leHQoKSkgeworICAgICAgICBDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3Zlcnkg
eyBtX25ld1JlZ2lzdGVyc1tyZWddIH07CisgICAgICAgIGlmICghY2FjaGVkUmVjb3ZlcnkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBlbWl0TG9hZCgqY2FjaGVkUmVjb3Zlcnkp
OworICAgICAgICBlbWl0Qm94KCpjYWNoZWRSZWNvdmVyeSk7CisgICAgICAgIEFTU0VSVChjYWNo
ZWRSZWNvdmVyeS0+dGFyZ2V0cygpLmlzRW1wdHkoKSk7CisgICAgfQorCisgICAgLy8gQXQgdGhp
cyBwb2ludCwgd2UgaGF2ZSByZWFkIGV2ZXJ5dGhpbmcgd2UgY2FyZWQgYWJvdXQgZnJvbSB0aGUK
KyAgICAvLyBzdGFjaywgYW5kIHdyaXR0ZW4gZXZlcnl0aGluZyB3ZSBoYWQgdG8gdG8gdGhlIHN0
YWNrLgorICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCIgIENhbGxlZSBmcmFtZSBp
cyBmdWxseSBzZXQgdXBcbiIpOworICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAg
IGZvciAoVmlydHVhbFJlZ2lzdGVyIHJlZyA9IGZpcnN0TmV3KCk7IHJlZyA8PSBsYXN0TmV3KCk7
IHJlZyArPSAxKQorICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChyZWcsICFnZXROZXcocmVnKSk7
CisKKyAgICAgICAgZm9yIChDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkgOiBtX2NhY2hl
ZFJlY292ZXJpZXMpIHsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoY2FjaGVkUmVjb3Zlcnks
IGNhY2hlZFJlY292ZXJ5LT50YXJnZXRzKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIEFTU0VS
VCghY2FjaGVkUmVjb3ZlcnktPnJlY292ZXJ5KCkuaXNJbkpTU3RhY2soKSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLyBXZSBuZWVkIHRvIGhhbmRsZSA0KSBmaXJzdCBiZWNhdXNlIGl0IGlt
cGxpZXMgcmVsZWFzaW5nCisgICAgLy8gbV9uZXdGcmFtZUJhc2UsIHdoaWNoIGNvdWxkIGJlIGEg
d2FudGVkIHJlZ2lzdGVyLgorICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCIgICAq
IFN0b3JpbmcgdGhlIGFyZ3VtZW50IGNvdW50IGludG8gIiwgVmlydHVhbFJlZ2lzdGVyIHsgSlNT
dGFjazo6QXJndW1lbnRDb3VudCB9LCAiXG4iKTsKKyAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCksCisgICAgICAgIGFkZHJlc3NGb3JOZXcoVmlydHVhbFJl
Z2lzdGVyIHsgSlNTdGFjazo6QXJndW1lbnRDb3VudCB9KS53aXRoT2Zmc2V0KFRhZ09mZnNldCkp
OworICAgIG1faml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihhcmdDb3Vu
dCgpKSwKKyAgICAgICAgYWRkcmVzc0Zvck5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyBKU1N0YWNrOjpB
cmd1bWVudENvdW50IH0pLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCkpOworCisgICAgaWYgKCFp
c1Nsb3dQYXRoKCkpIHsKKyAgICAgICAgQVNTRVJUKG1fbmV3RnJhbWVCYXNlICE9IE1hY3JvQXNz
ZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICAgICAgZGF0YUxvZygiICBSZWxlYXNpbmcgdGhlIG5ldyBmcmFtZSBiYXNlIHBvaW50ZXJc
biIpOworICAgICAgICBtX2ppdC5tb3ZlKG1fbmV3RnJhbWVCYXNlLCBNYWNyb0Fzc2VtYmxlcjo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICByZWxlYXNlR1BSKG1fbmV3RnJhbWVCYXNl
KTsKKyAgICB9CisKKyAgICAvLyBGaW5hbGx5IHdlIGhhbmRsZSAzKQorICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICBkYXRhTG9nKCIgIEVuc3VyaW5nIHdhbnRlZCByZWdpc3RlcnMgYXJlIGluIHRo
ZSByaWdodCByZWdpc3RlclxuIik7CisgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyBy
ZWcgPD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKKyAgICAgICAgQ2FjaGVkUmVj
b3ZlcnkqIGNhY2hlZFJlY292ZXJ5IHsgbV9uZXdSZWdpc3RlcnNbcmVnXSB9OworICAgICAgICBp
ZiAoIWNhY2hlZFJlY292ZXJ5KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZW1p
dERpc3BsYWNlKCpjYWNoZWRSZWNvdmVyeSk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NhbGxGcmFtZVNodWZmbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsODI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQ2FsbEZyYW1lU2h1ZmZsZXJfaAorI2RlZmluZSBDYWxsRnJhbWVTaHVmZmxlcl9o
CisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaCIK
KyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisj
aW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKKyNpbmNsdWRlICJWYWx1ZVJlY292ZXJ5LmgiCisj
aW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgSlNDIHsKKworLy8gQSBDYWNoZWRSZWNvdmVyeSBpcyBhIHdyYXBwZXIgYXJvdW5k
IGEgVmFsdWVSZWNvdmVyeSB0aGF0IHJlY29yZHMgd2hlcmUgc2FpZAorLy8gdmFsdWUgc2hvdWxk
IGdvIG9uIHRoZSBzdGFjayBhbmQvb3IgaW4gcmVnaXN0ZXJzLiBXaGVuZXZlciB3ZSBwZXJmb3Jt
IGFuCisvLyBvcGVyYXRpb24gY2hhbmdpbmcgdGhlIFZhbHVlUmVjb3ZlcnksIHdlIHVwZGF0ZSB0
aGUgQ2FjaGVkUmVjb3ZlcnkncyBtZW1iZXIKKy8vIGluIHBsYWNlLgorY2xhc3MgQ2FjaGVkUmVj
b3ZlcnkgeworcHVibGljOgorICAgIENhY2hlZFJlY292ZXJ5KFZhbHVlUmVjb3ZlcnkgcmVjb3Zl
cnkpCisgICAgICAgIDogbV9yZWNvdmVyeSB7IHJlY292ZXJ5IH0KKyAgICB7CisgICAgfQorCisg
ICAgQ2FjaGVkUmVjb3ZlcnkoQ2FjaGVkUmVjb3ZlcnkmKSA9IGRlbGV0ZTsKKyAgICBDYWNoZWRS
ZWNvdmVyeShDYWNoZWRSZWNvdmVyeSYmKSA9IGRlbGV0ZTsKKyAgICBDYWNoZWRSZWNvdmVyeSYg
b3BlcmF0b3I9KENhY2hlZFJlY292ZXJ5JikgPSBkZWxldGU7CisgICAgQ2FjaGVkUmVjb3Zlcnkm
IG9wZXJhdG9yPShDYWNoZWRSZWNvdmVyeSYmKSA9IGRlbGV0ZTsKKworICAgIGNvbnN0IFZlY3Rv
cjxWaXJ0dWFsUmVnaXN0ZXIsIDE+JiB0YXJnZXRzKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRz
OyB9CisKKyAgICB2b2lkIGFkZFRhcmdldChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKG1fdGFyZ2V0cy5pc0VtcHR5KCkgfHwgbV90YXJnZXRzLmxhc3QoKSA8IHJl
Zyk7CisgICAgICAgIG1fdGFyZ2V0cy5hcHBlbmQocmVnKTsKKyAgICB9CisKKyAgICB2b2lkIHJl
bW92ZVRhcmdldChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQorICAgIHsKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChyZWcsIG1fdGFyZ2V0cy5sYXN0KCkgPT0gcmVnKTsKKyAgICAgICAgbV90YXJnZXRzLnNo
cmluayhtX3RhcmdldHMuc2l6ZSgpIC0gMSk7CisgICAgfQorCisgICAgdm9pZCBjbGVhclRhcmdl
dHMoKQorICAgIHsKKyAgICAgICAgbV90YXJnZXRzLmNsZWFyKCk7CisgICAgfQorCisgICAgdm9p
ZCBzZXRXYW50ZWRKU1ZhbHVlUmVncyhKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncykKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChtX3dhbnRlZEZQUiA9PSBJbnZhbGlkRlBSUmVnKTsKKyAgICAgICAgbV93
YW50ZWRKU1ZhbHVlUmVncyA9IGpzVmFsdWVSZWdzOworICAgIH0KKworICAgIHZvaWQgc2V0V2Fu
dGVkRlBSKEZQUlJlZyBmcHIpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fd2FudGVkSlNWYWx1
ZVJlZ3MpOworICAgICAgICBtX3dhbnRlZEZQUiA9IGZwcjsKKyAgICB9CisKKyAgICAvLyBEZXRl
cm1pbmUgd2hldGhlciBjb252ZXJ0aW5nIHRoaXMgcmVjb3ZlcnkgaW50byBhIEpTVmFsdWUgd2ls
bAorICAgIC8vIHJlcXVpcmUgYWRkaXRpb25hbCBHUFJzIGFuZC9vciBGUFJzLgorICAgIC8vIFRo
aXMgaXMgZ3VhcmFudGVlZCB0byBvbmx5IGRlcGVuZCBvbiB0aGUgRGF0YUZvcm1hdCwgYW5kIHRo
ZQorICAgIC8vIHJlc3VsdCBvZiB0aGVzZSBjYWxscyB3aWxsIHN0YXkgdmFsaWQgYWZ0ZXIgbG9h
ZHMgYW5kL29yIHN0b3Jlcy4KKyAgICBib29sIGJveGluZ1JlcXVpcmVzR1BSKCkgY29uc3QKKyAg
ICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgcmV0dXJuIHJlY292ZXJ5KCkuZGF0YUZv
cm1hdCgpID09IERhdGFGb3JtYXREb3VibGU7CisjZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7
CisjZW5kaWYKKyAgICB9CisgICAgYm9vbCBib3hpbmdSZXF1aXJlc0ZQUigpIGNvbnN0CisgICAg
eworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkoKS5kYXRhRm9y
bWF0KCkpIHsKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0SW50NTI6CisgICAgICAgIGNhc2UgRGF0
YUZvcm1hdFN0cmljdEludDUyOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorI2Vsc2UKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisgICAgfQorICAgIAorICAgIC8vIFRoaXMgaXMg
dXNlZCB0byBkZXRlcm1pbmUgd2hhdCBraW5kIG9mIHJlZ2lzdGVyIHdlIG5lZWQgdG8gYmUKKyAg
ICAvLyBhYmxlIHRvIGxvYWQgYSByZWNvdmVyeS4gV2Ugb25seSB1c2UgaXQgd2hlbiBhIGRpcmVj
dCBsb2FkIGlzCisgICAgLy8gY3VycmVudGx5IGltcG9zc2libGUsIHRvIGRldGVybWluZSB3aGV0
aGVyIHdlIHNob3VsZCBzcGlsbCBhCisgICAgLy8gR1BSIG9yIGFuIEZQUiBmb3IgbG9hZGluZyB0
aGlzIHZhbHVlLgorICAgIGJvb2wgbG9hZHNJbnRvR1BSKCkgY29uc3Q7CisgICAgYm9vbCBsb2Fk
c0ludG9GUFIoKSBjb25zdDsKKworICAgIFZhbHVlUmVjb3ZlcnkgcmVjb3ZlcnkoKSBjb25zdCB7
IHJldHVybiBtX3JlY292ZXJ5OyB9CisKKyAgICB2b2lkIHNldFJlY292ZXJ5KFZhbHVlUmVjb3Zl
cnkgcmVjb3ZlcnkpIHsgbV9yZWNvdmVyeSA9IHJlY292ZXJ5OyB9CisKKyAgICBKU1ZhbHVlUmVn
cyB3YW50ZWRKU1ZhbHVlUmVncygpIGNvbnN0IHsgcmV0dXJuIG1fd2FudGVkSlNWYWx1ZVJlZ3M7
IH0KKworICAgIEZQUlJlZyB3YW50ZWRGUFIoKSBjb25zdCB7IHJldHVybiBtX3dhbnRlZEZQUjsg
fQorcHJpdmF0ZToKKyAgICBWYWx1ZVJlY292ZXJ5IG1fcmVjb3Zlcnk7CisgICAgSlNWYWx1ZVJl
Z3MgbV93YW50ZWRKU1ZhbHVlUmVnczsKKyAgICBGUFJSZWcgbV93YW50ZWRGUFIgeyBJbnZhbGlk
RlBSUmVnIH07CisgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgMT4gbV90YXJnZXRzOworfTsK
KworY2xhc3MgQ2FsbEZyYW1lU2h1ZmZsZXIgeworcHVibGljOgorICAgIENhbGxGcmFtZVNodWZm
bGVyKENDYWxsSGVscGVycyYsIGNvbnN0IENhbGxGcmFtZVNodWZmbGVEYXRhJik7CisKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIC8vIEFueSByZWdpc3RlciB0aGF0
IGhhcyBiZWVuIGxvY2tlZCBvciBhY3F1aXJlZCBtdXN0IGJlIHJlbGVhc2VkCisgICAgLy8gYmVm
b3JlIGNhbGxpbmcgcHJlcGFyZUZvclRhaWxDYWxsKCkgb3IgcHJlcGFyZUZvclNsb3dQYXRoKCku
CisgICAgdm9pZCBsb2NrR1BSKEdQUlJlZyBncHIpCisgICAgeworICAgICAgICBBU1NFUlQoIW1f
bG9ja2VkUmVnaXN0ZXJzLmdldChncHIpKTsKKyAgICAgICAgbV9sb2NrZWRSZWdpc3RlcnMuc2V0
KGdwcik7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICAgKiBM
b2NraW5nICIsIGdwciwgIlxuIik7CisgICAgfQorCisgICAgR1BSUmVnIGFjcXVpcmVHUFIoKQor
ICAgIHsKKyAgICAgICAgZW5zdXJlR1BSKCk7CisgICAgICAgIEdQUlJlZyBncHIgeyBnZXRGcmVl
R1BSKCkgfTsKKyAgICAgICAgQVNTRVJUKCFtX3JlZ2lzdGVyc1tncHJdKTsKKyAgICAgICAgbG9j
a0dQUihncHIpOworICAgICAgICByZXR1cm4gZ3ByOworICAgIH0KKworICAgIHZvaWQgcmVsZWFz
ZUdQUihHUFJSZWcgZ3ByKQorICAgIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAg
ICAgIGlmIChtX2xvY2tlZFJlZ2lzdGVycy5nZXQoZ3ByKSkKKyAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICAqIFJlbGVhc2luZyAiLCBncHIsICJcbiIpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIGRhdGFMb2coIiAgICogIiwgZ3ByLCAiIHdhcyBub3QgbG9ja2VkXG4iKTsK
KyAgICAgICAgfQorICAgICAgICBtX2xvY2tlZFJlZ2lzdGVycy5jbGVhcihncHIpOworICAgIH0K
KworICAgIC8vIFlvdSBjYW4gb25seSB0YWtlIGEgc25hcHNob3QgaWYgdGhlIHJlY292ZXJ5IGhh
cyBub3Qgc3RhcnRlZAorICAgIC8vIHlldC4gVGhlIG9ubHkgb3BlcmF0aW9ucyB0aGF0IGFyZSB2
YWxpZCBiZWZvcmUgdGFraW5nIGEKKyAgICAvLyBzbmFwc2hvdCBhcmUgbG9ja0dQUigpLCBhY3F1
aXJlR1BSKCkgYW5kIHJlbGVhc2VHUFIoKS4KKyAgICAvLworICAgIC8vIExvY2tpbmcgc3RhdHVz
IGlzICpOT1QqIHByZXNlcnZlZCBieSB0aGUgc25hcHNob3Q6IGl0IG9ubHkKKyAgICAvLyBjb250
YWlucyBpbmZvcm1hdGlvbiBhYm91dCB3aGVyZSB0aGUKKyAgICAvLyBhcmd1bWVudHMvY2FsbGVl
L2NhbGxlZS1zYXZlIHJlZ2lzdGVycyBhcmUgYnkgdGFraW5nIGludG8KKyAgICAvLyBhY2NvdW50
IGFueSBzcGlsbGluZyB0aGF0IGFjcXVpcmVHUFIoKSBjb3VsZCBoYXZlIGRvbmUuCisgICAgQ2Fs
bEZyYW1lU2h1ZmZsZURhdGEgc25hcHNob3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KGlzVW5kZWNpZGVkKCkpOworCisgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIGRhdGE7Cisg
ICAgICAgIGRhdGEubnVtTG9jYWxzID0gbnVtTG9jYWxzKCk7CisgICAgICAgIGRhdGEuY2FsbGVl
ID0gZ2V0TmV3KFZpcnR1YWxSZWdpc3RlciB7IEpTU3RhY2s6OkNhbGxlZSB9KS0+cmVjb3Zlcnko
KTsKKyAgICAgICAgZGF0YS5hcmdzLnJlc2l6ZShhcmdDb3VudCgpKTsKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBhcmdDb3VudCgpOyArK2kpCisgICAgICAgICAgICBkYXRhLmFyZ3Nb
aV0gPSBnZXROZXcodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpLT5yZWNvdmVyeSgpOwor
ICAgICAgICBmb3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTsg
cmVnID0gcmVnLm5leHQoKSkgeworICAgICAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJl
Y292ZXJ5IHsgbV9uZXdSZWdpc3RlcnNbcmVnXSB9OworICAgICAgICAgICAgaWYgKCFjYWNoZWRS
ZWNvdmVyeSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworI2lmIFVTRShKU1ZBTFVFNjQp
CisgICAgICAgICAgICBkYXRhLnJlZ2lzdGVyc1tyZWddID0gY2FjaGVkUmVjb3ZlcnktPnJlY292
ZXJ5KCk7CisjZWxzZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyNlbmRpZgorICAgICAgICB9CisgICAgICAgIHJldHVybiBXVEY6Om1vdmUoZGF0YSk7CisgICAg
fQorCisgICAgLy8gQXNrIHRoZSBzaHVmZmxlciB0byBwdXQgdGhlIGNhbGxlZSBpbnRvIHNvbWUg
cmVnaXN0ZXJzIG9uY2UgdGhlCisgICAgLy8gc2h1ZmZsaW5nIGlzIGRvbmUuIFlvdSBzaG91bGQg
Y2FsbCB0aGlzIGJlZm9yZSBhbnkgb2YgdGhlCisgICAgLy8gcHJlcGFyZSgpIG1ldGhvZHMsIGFu
ZCBtdXN0IG5vdCB0YWtlIGEgc25hcHNob3QgYWZ0ZXJ3YXJkcywgYXMKKyAgICAvLyB0aGlzIHdv
dWxkIGNyYXNoIDMyYml0cyBwbGF0Zm9ybXMuCisgICAgdm9pZCBzZXRDYWxsZWVKU1ZhbHVlUmVn
cyhKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncykKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1VuZGVj
aWRlZCgpKTsKKyAgICAgICAgQVNTRVJUKCFnZXROZXcoanNWYWx1ZVJlZ3MpKTsKKyAgICAgICAg
Q2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5IHsgZ2V0TmV3KFZpcnR1YWxSZWdpc3RlcihK
U1N0YWNrOjpDYWxsZWUpKSB9OworICAgICAgICBBU1NFUlQoY2FjaGVkUmVjb3ZlcnkpOworICAg
ICAgICBhZGROZXcoanNWYWx1ZVJlZ3MsIGNhY2hlZFJlY292ZXJ5LT5yZWNvdmVyeSgpKTsKKyAg
ICB9CisKKyAgICAvLyBBc2sgdGhlIHN1aGZmbGVyIHRvIGFzc3VtZSB0aGUgY2FsbGVlIGhhcyBh
bHJlYWR5IGJlIGNoZWNrZWQgdG8KKyAgICAvLyBiZSBhIGNlbGwuIFRoaXMgaXMgYSBuby1vcCBv
biA2NGJpdCBwbGF0Zm9ybXMsIGJ1dCBhbGxvd3MgdG8KKyAgICAvLyBmcmVlIHVwIGEgR1BSIG9u
IDMyYml0IHBsYXRmb3Jtcy4KKyAgICAvLyBZb3Ugb2J2aW91c2x5IG11c3QgaGF2ZSBlbnN1cmVk
IHRoYXQgdGhpcyBpcyB0aGUgY2FzZSBiZWZvcmUKKyAgICAvLyBydW5uaW5nIGFueSBvZiB0aGUg
cHJlcGFyZSBtZXRob2RzLgorICAgIHZvaWQgYXNzdW1lQ2FsbGVlSXNDZWxsKCkKKyAgICB7Cisj
aWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgQ2FjaGVkUmVjb3ZlcnkmIGNhbGxlZUNhY2hl
ZFJlY292ZXJ5IHsgKmdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6Q2FsbGVlKSkgfTsK
KyAgICAgICAgc3dpdGNoIChjYWxsZWVDYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLnRlY2huaXF1
ZSgpKSB7CisgICAgICAgIGNhc2UgSW5QYWlyOgorICAgICAgICAgICAgdXBkYXRlUmVjb3Zlcnko
CisgICAgICAgICAgICAgICAgY2FsbGVlQ2FjaGVkUmVjb3ZlcnksCisgICAgICAgICAgICAgICAg
VmFsdWVSZWNvdmVyeTo6aW5HUFIoCisgICAgICAgICAgICAgICAgICAgIGNhbGxlZUNhY2hlZFJl
Y292ZXJ5LnJlY292ZXJ5KCkucGF5bG9hZEdQUigpLAorICAgICAgICAgICAgICAgICAgICBEYXRh
Rm9ybWF0Q2VsbCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRGlzcGxhY2Vk
SW5KU1N0YWNrOgorICAgICAgICAgICAgdXBkYXRlUmVjb3ZlcnkoCisgICAgICAgICAgICAgICAg
Y2FsbGVlQ2FjaGVkUmVjb3ZlcnksCisgICAgICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlz
cGxhY2VkSW5KU1N0YWNrKAorICAgICAgICAgICAgICAgICAgICBjYWxsZWVDYWNoZWRSZWNvdmVy
eS5yZWNvdmVyeSgpLnZpcnR1YWxSZWdpc3RlcigpLAorICAgICAgICAgICAgICAgICAgICBEYXRh
Rm9ybWF0Q2VsbCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5GUFI6Cisg
ICAgICAgIGNhc2UgVW5ib3hlZENlbGxJbkdQUjoKKyAgICAgICAgY2FzZSBDZWxsRGlzcGxhY2Vk
SW5KU1N0YWNrOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29uc3RhbnQ6Cisg
ICAgICAgICAgICBBU1NFUlQoY2FsbGVlQ2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5jb25zdGFu
dCgpLmlzQ2VsbCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBUaGlzIHdpbGwgZW1pdCBjb2Rl
IHRvIGJ1aWxkIHRoZSBuZXcgZnJhbWUgb3ZlciB0aGUgb2xkIG9uZS4KKyAgICB2b2lkIHByZXBh
cmVGb3JUYWlsQ2FsbCgpOworCisgICAgLy8gVGhpcyB3aWxsIGVtaXQgY29kZSB0byBidWlsZCB0
aGUgbmV3IGZyYW1lIGFzIGlmIHBlcmZvcm1pbmcgYQorICAgIC8vIHJlZ3VsYXIgY2FsbC4gSG93
ZXZlciwgdGhlIGNhbGxlZSBzYXZlIHJlZ2lzdGVycyB3aWxsIGJlCisgICAgLy8gcmVzdG9yZWQs
IGFuZCBhbnkgbG9jYWxzIChub3QgdGhlIGhlYWRlciBvciBhcmd1bWVudHMpIG9mIHRoZQorICAg
IC8vIGN1cnJlbnQgZnJhbWUgY2FuIGJlIG92ZXJ3cml0dGVuLgorICAgIC8vCisgICAgLy8gQSBm
cmFtZSBidWlsdCB1c2luZyBwcmVwYXJlRm9yU2xvd1BhdGgoKSBzaG91bGQgYmUgdXNlZCBlaXRo
ZXIKKyAgICAvLyB0byB0aHJvdyBhbiBleGNlcHRpb24gaW4sIG9yIGRlc3Ryb3llZCB1c2luZwor
ICAgIC8vIENDYWxsSGVscGVyczo6cHJlcGFyZUZvclRhaWxDYWxsU2xvdygpIGZvbGxvd2VkIGJ5
IGEgdGFpbCBjYWxsLgorICAgIHZvaWQgcHJlcGFyZUZvclNsb3dQYXRoKCk7CisKK3ByaXZhdGU6
CisgICAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCisgICAgQ0NhbGxIZWxw
ZXJzJiBtX2ppdDsKKworICAgIHZvaWQgcHJlcGFyZUFueSgpOworCisgICAgdm9pZCBzcGlsbChD
YWNoZWRSZWNvdmVyeSYpOworCisgICAgLy8gImJveCIgaXMgYXJndWFibHkgYSBiYWQgbmFtZSBo
ZXJlLiBUaGUgbWVhbmluZyBpcyB0aGF0IGFmdGVyCisgICAgLy8gY2FsbGluZyBlbWl0Qm94KCks
IHlvdXIgZW5zdXJlIHRoYXQgc3Vic2VxdWVudGx5IGNhbGxpbmcKKyAgICAvLyBlbWl0U3RvcmUo
KSB3aWxsIGJlIGFibGUgdG8gc3RvcmUgdGhlIHZhbHVlIHdpdGhvdXQgYWRkaXRpb25hbAorICAg
IC8vIHRyYW5zZm9ybWF0aW9uLiBJbiBwYXJ0aWN1bGFyLCB0aGlzIGlzIGEgbm8tb3AgZm9yIGNv
bnN0YW50cywKKyAgICAvLyBhbmQgaXMgYSBjb21wbGV0ZSBuby1vcCBvbiAzMmJpdHMgc2luY2Ug
YW55IHVuYm94ZWQgdmFsdWUgY2FuCisgICAgLy8gc3RpbGwgYmUgc3RvcmVkIGJ5IHN0b3Jpbmcg
dGhlIHBheWxvYWQgYW5kIGEgc3RhdGljYWxseSBrbm93bgorICAgIC8vIHRhZy4KKyAgICB2b2lk
IGVtaXRCb3goQ2FjaGVkUmVjb3ZlcnkmKTsKKworICAgIGJvb2wgY2FuQm94KENhY2hlZFJlY292
ZXJ5JiBjYWNoZWRSZWNvdmVyeSkKKyAgICB7CisgICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS5i
b3hpbmdSZXF1aXJlc0dQUigpICYmIGdldEZyZWVHUFIoKSA9PSBJbnZhbGlkR1BSUmVnKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS5ib3hp
bmdSZXF1aXJlc0ZQUigpICYmIGdldEZyZWVGUFIoKSA9PSBJbnZhbGlkRlBSUmVnKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IHZvaWQgZW5zdXJlQm94KENhY2hlZFJlY292ZXJ5JiBjYWNoZWRSZWNvdmVyeSkKKyAgICB7Cisg
ICAgICAgIGlmIChjYW5Cb3goY2FjaGVkUmVjb3ZlcnkpKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS5ib3hpbmdSZXF1aXJlc0dQUigpKQorICAgICAg
ICAgICAgZW5zdXJlR1BSKCk7CisKKyAgICAgICAgaWYgKGNhY2hlZFJlY292ZXJ5LmJveGluZ1Jl
cXVpcmVzRlBSKCkpCisgICAgICAgICAgICBlbnN1cmVGUFIoKTsKKyAgICB9CisKKyAgICB2b2lk
IGVtaXRMb2FkKENhY2hlZFJlY292ZXJ5Jik7CisKKyAgICBib29sIGNhbkxvYWQoQ2FjaGVkUmVj
b3ZlcnkmKTsKKworICAgIHZvaWQgZW5zdXJlTG9hZChDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVj
b3ZlcnkpCisgICAgeworICAgICAgICBpZiAoY2FuTG9hZChjYWNoZWRSZWNvdmVyeSkpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgQVNTRVJUKGNhY2hlZFJlY292ZXJ5LmxvYWRzSW50
b0dQUigpIHx8IGNhY2hlZFJlY292ZXJ5LmxvYWRzSW50b0ZQUigpKTsKKworICAgICAgICBpZiAo
Y2FjaGVkUmVjb3ZlcnkubG9hZHNJbnRvRlBSKCkpIHsKKyAgICAgICAgICAgIGlmIChjYWNoZWRS
ZWNvdmVyeS5sb2Fkc0ludG9HUFIoKSkKKyAgICAgICAgICAgICAgICBlbnN1cmVSZWdpc3Rlcigp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGVuc3VyZUZQUigpOworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIGVuc3VyZUdQUigpOworICAgIH0KKworICAgIGJvb2wgY2Fu
TG9hZEFuZEJveChDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3ZlcnkpCisgICAgeworICAgICAg
ICAvLyBXZSBkb24ndCBoYXZlIGludGVyZmVyaW5nIGxvYWRzICYgYm94ZXMKKyAgICAgICAgQVNT
RVJUKCFjYWNoZWRSZWNvdmVyeS5sb2Fkc0ludG9GUFIoKSB8fCAhY2FjaGVkUmVjb3ZlcnkuYm94
aW5nUmVxdWlyZXNGUFIoKSk7CisgICAgICAgIEFTU0VSVCghY2FjaGVkUmVjb3ZlcnkubG9hZHNJ
bnRvR1BSKCkgfHwgIWNhY2hlZFJlY292ZXJ5LmJveGluZ1JlcXVpcmVzR1BSKCkpOworCisgICAg
ICAgIHJldHVybiBjYW5Mb2FkKGNhY2hlZFJlY292ZXJ5KSAmJiBjYW5Cb3goY2FjaGVkUmVjb3Zl
cnkpOworICAgIH0KKworICAgIERhdGFGb3JtYXQgZW1pdFN0b3JlKENhY2hlZFJlY292ZXJ5Jiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MpOworCisgICAgdm9pZCBlbWl0RGlzcGxhY2UoQ2FjaGVk
UmVjb3ZlcnkmKTsKKworICAgIHZvaWQgZW1pdERlbHRhQ2hlY2soKTsKKworICAgIEJhZzxDYWNo
ZWRSZWNvdmVyeT4gbV9jYWNoZWRSZWNvdmVyaWVzOworCisgICAgdm9pZCB1cGRhdGVSZWNvdmVy
eShDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3ZlcnksIFZhbHVlUmVjb3ZlcnkgcmVjb3Zlcnkp
CisgICAgeworICAgICAgICBjbGVhckNhY2hlZFJlY292ZXJ5KGNhY2hlZFJlY292ZXJ5LnJlY292
ZXJ5KCkpOworICAgICAgICBjYWNoZWRSZWNvdmVyeS5zZXRSZWNvdmVyeShyZWNvdmVyeSk7Cisg
ICAgICAgIHNldENhY2hlZFJlY292ZXJ5KHJlY292ZXJ5LCAmY2FjaGVkUmVjb3ZlcnkpOworICAg
IH0KKworICAgIENhY2hlZFJlY292ZXJ5KiBnZXRDYWNoZWRSZWNvdmVyeShWYWx1ZVJlY292ZXJ5
KTsKKworICAgIENhY2hlZFJlY292ZXJ5KiBzZXRDYWNoZWRSZWNvdmVyeShWYWx1ZVJlY292ZXJ5
LCBDYWNoZWRSZWNvdmVyeSopOworCisgICAgdm9pZCBjbGVhckNhY2hlZFJlY292ZXJ5KFZhbHVl
UmVjb3ZlcnkgcmVjb3ZlcnkpCisgICAgeworICAgICAgICBpZiAoIXJlY292ZXJ5LmlzQ29uc3Rh
bnQoKSkKKyAgICAgICAgICAgIHNldENhY2hlZFJlY292ZXJ5KHJlY292ZXJ5LCBudWxscHRyKTsK
KyAgICB9CisKKyAgICBDYWNoZWRSZWNvdmVyeSogYWRkQ2FjaGVkUmVjb3ZlcnkoVmFsdWVSZWNv
dmVyeSByZWNvdmVyeSkKKyAgICB7CisgICAgICAgIGlmIChyZWNvdmVyeS5pc0NvbnN0YW50KCkp
CisgICAgICAgICAgICByZXR1cm4gbV9jYWNoZWRSZWNvdmVyaWVzLmFkZChyZWNvdmVyeSk7Cisg
ICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSA9IGdldENhY2hlZFJlY292ZXJ5
KHJlY292ZXJ5KTsKKyAgICAgICAgaWYgKCFjYWNoZWRSZWNvdmVyeSkKKyAgICAgICAgICAgIHJl
dHVybiBzZXRDYWNoZWRSZWNvdmVyeShyZWNvdmVyeSwgbV9jYWNoZWRSZWNvdmVyaWVzLmFkZChy
ZWNvdmVyeSkpOworICAgICAgICByZXR1cm4gY2FjaGVkUmVjb3Zlcnk7CisgICAgfQorCisgICAg
Ly8gVGhpcyBpcyB0aGUgY3VycmVudCByZWNvdmVyaWVzIHByZXNlbnQgaW4gdGhlIG9sZCBmcmFt
ZSdzCisgICAgLy8gc2xvdHMuIEEgbnVsbCBDYWNoZWRSZWNvdmVyeSBtZWFucyB3ZSBjYW4gdHJh
c2ggdGhlIGN1cnJlbnQKKyAgICAvLyB2YWx1ZSBhcyB3ZSBkb24ndCBjYXJlIGFib3V0IGl0Lgor
ICAgIFZlY3RvcjxDYWNoZWRSZWNvdmVyeSo+IG1fb2xkRnJhbWU7CisKKyAgICBpbnQgbnVtTG9j
YWxzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29sZEZyYW1lLnNpemUoKSAtIEpT
U3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplOworICAgIH0KKworICAgIENhY2hlZFJlY292ZXJ5
KiBnZXRPbGQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX29sZEZyYW1lW0pTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplIC0gcmVnLm9mZnNldCgp
IC0gMV07CisgICAgfQorCisgICAgdm9pZCBzZXRPbGQoVmlydHVhbFJlZ2lzdGVyIHJlZywgQ2Fj
aGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5KQorICAgIHsKKyAgICAgICAgbV9vbGRGcmFtZVtK
U1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSAtIHJlZy5vZmZzZXQoKSAtIDFdID0gY2FjaGVk
UmVjb3Zlcnk7CisgICAgfQorCisgICAgVmlydHVhbFJlZ2lzdGVyIGZpcnN0T2xkKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIgeyBzdGF0aWNfY2FzdDxpbnQ+
KC1udW1Mb2NhbHMoKSkgfTsKKyAgICB9CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGFzdE9sZCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyIHsgSlNTdGFjazo6
Q2FsbGVyRnJhbWVBbmRQQ1NpemUgLSAxIH07CisgICAgfQorCisgICAgYm9vbCBpc1ZhbGlkT2xk
KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gcmVnID49
IGZpcnN0T2xkKCkgJiYgcmVnIDw9IGxhc3RPbGQoKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIHN0
b3JlcywgZm9yIGVhY2ggc2xvdCBpbiB0aGUgbmV3IGZyYW1lLCBpbmZvcm1hdGlvbiBhYm91dAor
ICAgIC8vIHRoZSByZWNvdmVyeSBmb3IgdGhlIHZhbHVlIHRoYXQgc2hvdWxkIGV2ZW50dWFsbHkg
Z28gaW50byB0aGF0CisgICAgLy8gc2xvdC4KKyAgICAvLworICAgIC8vIE9uY2UgdGhlIHNsb3Qg
aGFzIGJlZW4gd3JpdHRlbiwgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4KKyAgICAvLyBtX25l
d0ZyYW1lIHdpbGwgYmUgZW1wdHkuCisgICAgVmVjdG9yPENhY2hlZFJlY292ZXJ5Kj4gbV9uZXdG
cmFtZTsKKworICAgIHNpemVfdCBhcmdDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9uZXdGcmFtZS5zaXplKCkgLSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAg
IH0KKworICAgIENhY2hlZFJlY292ZXJ5KiBnZXROZXcoVmlydHVhbFJlZ2lzdGVyIG5ld1JlZ2lz
dGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbmV3RnJhbWVbbmV3UmVnaXN0ZXIu
b2Zmc2V0KCldOworICAgIH0KKworICAgIHZvaWQgc2V0TmV3KFZpcnR1YWxSZWdpc3RlciBuZXdS
ZWdpc3RlciwgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5KQorICAgIHsKKyAgICAgICAg
bV9uZXdGcmFtZVtuZXdSZWdpc3Rlci5vZmZzZXQoKV0gPSBjYWNoZWRSZWNvdmVyeTsKKyAgICB9
CisKKyAgICB2b2lkIGFkZE5ldyhWaXJ0dWFsUmVnaXN0ZXIgbmV3UmVnaXN0ZXIsIFZhbHVlUmVj
b3ZlcnkgcmVjb3ZlcnkpCisgICAgeworICAgICAgICBDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVj
b3ZlcnkgPSBhZGRDYWNoZWRSZWNvdmVyeShyZWNvdmVyeSk7CisgICAgICAgIGNhY2hlZFJlY292
ZXJ5LT5hZGRUYXJnZXQobmV3UmVnaXN0ZXIpOworICAgICAgICBzZXROZXcobmV3UmVnaXN0ZXIs
IGNhY2hlZFJlY292ZXJ5KTsKKyAgICB9CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3ROZXco
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlciB7IDAgfTsKKyAg
ICB9CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGFzdE5ldygpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyIHsgc3RhdGljX2Nhc3Q8aW50PihtX25ld0ZyYW1lLnNp
emUoKSkgLSAxIH07CisgICAgfQorCisgICAgYm9vbCBpc1ZhbGlkTmV3KFZpcnR1YWxSZWdpc3Rl
ciByZWcpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gcmVnID49IGZpcnN0TmV3KCkgJiYg
cmVnIDw9IGxhc3ROZXcoKTsKKyAgICB9CisKKworICAgIGludCBtX2FsaWduZWRPbGRGcmFtZVNp
emU7CisgICAgaW50IG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZTsKKworICAgIC8vIFRoaXMgaXMgdGhl
IGRpc3RhbmNlLCBpbiBzbG90cywgYmV0d2VlbiB0aGUgYmFzZSBvZiB0aGUgbmV3CisgICAgLy8g
ZnJhbWUgYW5kIHRoZSBiYXNlIG9mIHRoZSBvbGQgZnJhbWUuIEl0IGNvdWxkIGJlIG5lZ2F0aXZl
IHdoZW4KKyAgICAvLyBwcmVwYXJpbmcgZm9yIGEgdGFpbCBjYWxsIHRvIGEgZnVuY3Rpb24gd2l0
aCBzbWFsbGVyIGFyZ3VtZW50CisgICAgLy8gY291bnQuCisgICAgLy8KKyAgICAvLyBXZSB3aWxs
IG92ZXJ3cml0ZSB0aGlzIGFwcHJvcHJpYXRlbHkgZm9yIHNsb3cgcGF0aCBjYWxscywgYnV0Cisg
ICAgLy8gd2UgaW5pdGlhbGl6ZSBpdCBhcyBpZiBkb2luZyBhIGZhc3QgcGF0aCBmb3IgdGhlIHNw
aWxscyB3ZQorICAgIC8vIGNvdWxkIGRvIHdoaWxlIHVuZGVjaWRlZCAodHlwaWNhbGx5IHdoaWxl
IGNhbGxpbmcgYWNxdWlyZUdQUigpCisgICAgLy8gZm9yIGEgcG9seW1vcnBoaWMgY2FsbCkuCisg
ICAgaW50IG1fZnJhbWVEZWx0YTsKKworICAgIFZpcnR1YWxSZWdpc3RlciBuZXdBc09sZChWaXJ0
dWFsUmVnaXN0ZXIgcmVnKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlZyAtIG1fZnJh
bWVEZWx0YTsKKyAgICB9CisKKyAgICAvLyBUaGlzIHN0b3JlcyB0aGUgc2V0IG9mIGxvY2tlZCBy
ZWdpc3RlcnMsIGkuZS4gcmVnaXN0ZXJzIGZvcgorICAgIC8vIHdoaWNoIHdlIGhhdmUgYW4gaW1w
bGljaXQgcmVxdWlyZW1lbnQgdGhhdCB0aGV5IGFyZSBub3QgY2hhbmdlZC4KKyAgICAvLworICAg
IC8vIFRoaXMgd2lsbCB1c3VhbGx5IGNvbnRhaW5zIHRoZSBsaW5rIHJlZ2lzdGVyIG9uIGFyY2hp
dGVjdHVyZXMKKyAgICAvLyB0aGF0IGhhdmUgb25lLCBhbnkgc2NyYXRjaCByZWdpc3RlciB1c2Vk
IGJ5IHRoZSBtYWNybyBhc3NlbWJsZXIKKyAgICAvLyAoZS5nLiByMTEgb24gWDg2XzY0KSwgYXMg
d2VsbCBhcyBhbnkgcmVnaXN0ZXIgdGhhdCB3ZSB1c2UgZm9yCisgICAgLy8gYWRkcmVzc2luZyAo
c2VlIG1fb2xkRnJhbWVCYXNlIGFuZCBtX25ld0ZyYW1lQmFzZSkuCisgICAgLy8KKyAgICAvLyBX
ZSBhbHNvIHVzZSB0aGlzIHRvIGxvY2sgcmVnaXN0ZXJzIHRlbXBvcmFyaWx5LCBmb3IgaW5zdGFu
Y2UgdG8KKyAgICAvLyBlbnN1cmUgdGhhdCB3ZSBoYXZlIGF0IGxlYXN0IDIgYXZhaWxhYmxlIHJl
Z2lzdGVycyBmb3IgbG9hZGluZworICAgIC8vIGEgcGFpciBvbiAzMmJpdHMuCisgICAgUmVnaXN0
ZXJTZXQgbV9sb2NrZWRSZWdpc3RlcnM7CisKKyAgICAvLyBUaGlzIHN0b3JlcyB0aGUgY3VycmVu
dCByZWNvdmVyaWVzIHByZXNlbnQgaW4gcmVnaXN0ZXJzLiBBIG51bGwKKyAgICAvLyBDYWNoZWRS
ZWNvdmVyeSBtZWFucyB3ZSBjYW4gdHJhc2ggdGhlIGN1cnJlbnQgdmFsdWUgYXMgd2UgZG9uJ3QK
KyAgICAvLyBjYXJlIGFib3V0IGl0LiAKKyAgICBSZWdpc3Rlck1hcDxDYWNoZWRSZWNvdmVyeSo+
IG1fcmVnaXN0ZXJzOworCisgICAgLy8gVGhpcyBzdG9yZXMsIGZvciBlYWNoIHJlZ2lzdGVyLCBp
bmZvcm1hdGlvbiBhYm91dCB0aGUgcmVjb3ZlcnkKKyAgICAvLyBmb3IgdGhlIHZhbHVlIHRoYXQg
c2hvdWxkIGV2ZW50dWFsbHkgZ28gaW50byB0aGF0IHJlZ2lzdGVyLiBUaGUKKyAgICAvLyBvbmx5
IHJlZ2lzdGVycyB0aGF0IGhhdmUgYSB0YXJnZXQgcmVjb3Zlcnkgd2lsbCBiZSBjYWxsZWUtc2F2
ZQorICAgIC8vIHJlZ2lzdGVycywgYXMgd2VsbCBhcyBwb3NzaWJseSBvbmUgSlNWYWx1ZVJlZ3Mg
Zm9yIGhvbGRpbmcgdGhlCisgICAgLy8gY2FsbGVlLgorICAgIC8vCisgICAgLy8gT25jZSB0aGUg
Y29ycmVjdCB2YWx1ZSBoYXMgYmVlbiBwdXQgaW50byB0aGUgcmVnaXN0ZXJzLCBhbmQKKyAgICAv
LyBjb250cmFyeSB0byB3aGF0IHdlIGRvIHdpdGggbV9uZXdGcmFtZSwgd2Uga2VlcCB0aGUgZW50
cnkgaW4KKyAgICAvLyBtX25ld1JlZ2lzdGVycyB0byBzaW1wbGlmeSBzcGlsbGluZy4KKyAgICBS
ZWdpc3Rlck1hcDxDYWNoZWRSZWNvdmVyeSo+IG1fbmV3UmVnaXN0ZXJzOworCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2hlY2tGdW5jdG9yPgorICAgIFJlZyBnZXRGcmVlUmVnaXN0ZXIoY29uc3Qg
Q2hlY2tGdW5jdG9yJiBjaGVjaykgY29uc3QKKyAgICB7CisgICAgICAgIFJlZyBub25UZW1wIHsg
fTsKKyAgICAgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0
KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKKyAgICAgICAgICAgIGlmIChtX2xvY2tlZFJlZ2lzdGVy
cy5nZXQocmVnKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYg
KCFjaGVjayhyZWcpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBp
ZiAoIW1fcmVnaXN0ZXJzW3JlZ10pIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fbmV3UmVnaXN0
ZXJzW3JlZ10pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWc7CisgICAgICAgICAgICAg
ICAgaWYgKCFub25UZW1wKQorICAgICAgICAgICAgICAgICAgICBub25UZW1wID0gcmVnOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBub25UZW1wOworICAgIH0KKwor
ICAgIEdQUlJlZyBnZXRGcmVlR1BSKCkgY29uc3QKKyAgICB7CisgICAgICAgIFJlZyBmcmVlR1BS
IHsgZ2V0RnJlZVJlZ2lzdGVyKFtdIChSZWcgcmVnKSB7IHJldHVybiByZWcuaXNHUFIoKTsgfSkg
fTsKKyAgICAgICAgaWYgKCFmcmVlR1BSKQorICAgICAgICAgICAgcmV0dXJuIEludmFsaWRHUFJS
ZWc7CisgICAgICAgIHJldHVybiBmcmVlR1BSLmdwcigpOworICAgIH0KKworICAgIEZQUlJlZyBn
ZXRGcmVlRlBSKCkgY29uc3QKKyAgICB7CisgICAgICAgIFJlZyBmcmVlRlBSIHsgZ2V0RnJlZVJl
Z2lzdGVyKFtdIChSZWcgcmVnKSB7IHJldHVybiByZWcuaXNGUFIoKTsgfSkgfTsKKyAgICAgICAg
aWYgKCFmcmVlRlBSKQorICAgICAgICAgICAgcmV0dXJuIEludmFsaWRGUFJSZWc7CisgICAgICAg
IHJldHVybiBmcmVlRlBSLmZwcigpOworICAgIH0KKworICAgIGJvb2wgaGFzRnJlZVJlZ2lzdGVy
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPihnZXRGcmVl
UmVnaXN0ZXIoW10gKFJlZykgeyByZXR1cm4gdHJ1ZTsgfSkpOworICAgIH0KKworICAgIC8vIFRo
aXMgZnJlZXMgdXAgYSByZWdpc3RlciBzYXRpc2Z5aW5nIHRoZSBjaGVjayBmdW5jdG9yICh0aGlz
CisgICAgLy8gZnVuY3RvciBjb3VsZCB0aGVvcmV0aWNhbGx5IGhhdmUgYW55IGtpbmQgb2YgbG9n
aWMsIGJ1dCBpdCBtdXN0CisgICAgLy8gZW5zdXJlIHRoYXQgaXQgd2lsbCBvbmx5IHJldHVybiB0
cnVlIGZvciByZWdpc3RlcnMgLSBzcGlsbAorICAgIC8vIGFzc3VtZXMgYW5kIGFzc2VydHMgdGhh
dCBpdCBpcyBwYXNzZWQgYSBjYWNoZWRSZWNvdmVyeSBzdG9yZWQgaW4gYQorICAgIC8vIHJlZ2lz
dGVyKS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja0Z1bmN0b3I+CisgICAgdm9pZCBlbnN1
cmVSZWdpc3Rlcihjb25zdCBDaGVja0Z1bmN0b3ImIGNoZWNrKQorICAgIHsKKyAgICAgICAgLy8g
SWYgd2UgY2FuIHNwaWxsIGEgY2FsbGVlLXNhdmUsIHRoYXQncyBiZXN0LCBiZWNhdXNlIGl0IHdp
bGwKKyAgICAgICAgLy8gZnJlZSB1cCBhIHJlZ2lzdGVyIHRoYXQgd291bGQgb3RoZXJ3aXNlIGJl
ZW4gdGFrZW4gZm9yIHRoZQorICAgICAgICAvLyBsb25nZXN0IGFtb3VudCBvZiB0aW1lLgorICAg
ICAgICAvLworICAgICAgICAvLyBXZSBjb3VsZCB0cnkgdG8gYmlhcyB0b3dhcmRzIHRob3NlIHRo
YXQgYXJlIG5vdCBpbiB0aGVpcgorICAgICAgICAvLyB0YXJnZXQgcmVnaXN0ZXJzIHlldCwgYnV0
IHRoZSBnYWluIGlzIHByb2JhYmx5IHN1cGVyCisgICAgICAgIC8vIHNtYWxsLiBVbmxlc3MgeW91
IGhhdmUgYSBodWdlIG51bWJlciBvZiBhcmd1bWVudCAoYXQgbGVhc3QKKyAgICAgICAgLy8gYXJv
dW5kIHR3aWNlIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIHJlZ2lzdGVycyBvbiB5b3VyCisgICAg
ICAgIC8vIGFyY2hpdGVjdHVyZSksIG5vIHNwaWxsaW5nIGlzIGdvaW5nIHRvIHRha2UgcGxhY2Ug
YW55d2F5cy4KKyAgICAgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVn
OjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKKyAgICAgICAgICAgIGlmIChtX2xvY2tlZFJl
Z2lzdGVycy5nZXQocmVnKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAg
ICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5IHsgbV9uZXdSZWdpc3RlcnNbcmVnXSB9
OworICAgICAgICAgICAgaWYgKCFjYWNoZWRSZWNvdmVyeSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICAgICAgaWYgKGNoZWNrKCpjYWNoZWRSZWNvdmVyeSkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAi
LCBjYWNoZWRSZWNvdmVyeS0+cmVjb3ZlcnkoKSwgIiBsb29rcyBsaWtlIGEgZ29vZCBzcGlsbCBj
YW5kaWRhdGVcbiIpOworICAgICAgICAgICAgICAgIHNwaWxsKCpjYWNoZWRSZWNvdmVyeSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgLy8gV2UgdXNlIHRoZSBjYWNoZWRSZWNvdmVyeSBhc3NvY2lhdGVkIHdpdGggdGhlIGZpcnN0
IG5ldyBzbG90IHdlCisgICAgICAgIC8vIGNhbiwgYmVjYXVzZSB0aGF0IGlzIHRoZSBvbmUgZm9y
IHdoaWNoIGEgd3JpdGUgd2lsbCBiZQorICAgICAgICAvLyBwb3NzaWJsZSB0aGUgbGF0ZXN0LCBp
LmUuIHRoYXQgaXMgdGhlIG9uZSB0aGF0IHdlIHdvdWxkCisgICAgICAgIC8vIGhhdmUgaGFkIHRv
IHJldGFpbiBpbiByZWdpc3RlcnMgZm9yIHRoZSBsb25nZXN0LgorICAgICAgICBmb3IgKFZpcnR1
YWxSZWdpc3RlciByZWcgPSBmaXJzdE5ldygpOyByZWcgPD0gbGFzdE5ldygpOyByZWcgKz0gMSkg
eworICAgICAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5IHsgZ2V0TmV3KHJl
ZykgfTsKKyAgICAgICAgICAgIGlmICghY2FjaGVkUmVjb3ZlcnkpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgICAgIGlmIChjaGVjaygqY2FjaGVkUmVjb3ZlcnkpKSB7Cisg
ICAgICAgICAgICAgICAgc3BpbGwoKmNhY2hlZFJlY292ZXJ5KTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHZvaWQgZW5zdXJlUmVnaXN0ZXIoKQorICAg
IHsKKyAgICAgICAgaWYgKGhhc0ZyZWVSZWdpc3RlcigpKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICBGaW5kaW5nIGEg
cmVnaXN0ZXIgdG8gc3BpbGxcbiIpOworICAgICAgICBlbnN1cmVSZWdpc3RlcigKKyAgICAgICAg
ICAgIFt0aGlzXSAoY29uc3QgQ2FjaGVkUmVjb3ZlcnkmIGNhY2hlZFJlY292ZXJ5KSB7CisgICAg
ICAgICAgICAgICAgaWYgKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuaXNJbkdQUigpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gIW1fbG9ja2VkUmVnaXN0ZXJzLmdldChjYWNoZWRSZWNv
dmVyeS5yZWNvdmVyeSgpLmdwcigpKTsKKyAgICAgICAgICAgICAgICBpZiAoY2FjaGVkUmVjb3Zl
cnkucmVjb3ZlcnkoKS5pc0luRlBSKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAhbV9s
b2NrZWRSZWdpc3RlcnMuZ2V0KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZnByKCkpOworI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgICAgICAgICAgaWYgKGNhY2hlZFJlY292ZXJ5LnJl
Y292ZXJ5KCkudGVjaG5pcXVlKCkgPT0gSW5QYWlyKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAhbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkudGFn
R1BSKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAhbV9sb2NrZWRSZWdpc3RlcnMuZ2V0
KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkucGF5bG9hZEdQUigpKTsKKyAgICAgICAgICAgICAg
ICB9CisjZW5kaWYKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
KTsKKyAgICB9CisKKyAgICB2b2lkIGVuc3VyZUdQUigpCisgICAgeworICAgICAgICBpZiAoZ2V0
RnJlZUdQUigpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgIEZpbmRpbmcgYSBHUFIgdG8g
c3BpbGxcbiIpOworICAgICAgICBlbnN1cmVSZWdpc3RlcigKKyAgICAgICAgICAgIFt0aGlzXSAo
Y29uc3QgQ2FjaGVkUmVjb3ZlcnkmIGNhY2hlZFJlY292ZXJ5KSB7CisgICAgICAgICAgICAgICAg
aWYgKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuaXNJbkdQUigpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gIW1fbG9ja2VkUmVnaXN0ZXJzLmdldChjYWNoZWRSZWNvdmVyeS5yZWNvdmVy
eSgpLmdwcigpKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICAgICAgICAgIGlmIChj
YWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLnRlY2huaXF1ZSgpID09IEluUGFpcikgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gIW1fbG9ja2VkUmVnaXN0ZXJzLmdldChjYWNoZWRSZWNvdmVy
eS5yZWNvdmVyeSgpLnRhZ0dQUigpKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgIW1fbG9j
a2VkUmVnaXN0ZXJzLmdldChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLnBheWxvYWRHUFIoKSk7
CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAgdm9pZCBlbnN1cmVGUFIoKQorICAgIHsK
KyAgICAgICAgaWYgKGdldEZyZWVGUFIoKSAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICBG
aW5kaW5nIGFuIEZQUiB0byBzcGlsbFxuIik7CisgICAgICAgIGVuc3VyZVJlZ2lzdGVyKAorICAg
ICAgICAgICAgW3RoaXNdIChjb25zdCBDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3ZlcnkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5pc0luRlBSKCkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAhbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KGNhY2hl
ZFJlY292ZXJ5LnJlY292ZXJ5KCkuZnByKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKworICAgIENhY2hlZFJlY292ZXJ5KiBnZXROZXco
SlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MpIGNvbnN0CisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQp
CisgICAgICAgIHJldHVybiBtX25ld1JlZ2lzdGVyc1tqc1ZhbHVlUmVncy5ncHIoKV07CisjZWxz
ZQorICAgICAgICBBU1NFUlQoCisgICAgICAgICAgICBqc1ZhbHVlUmVncy50YWdHUFIoKSA9PSBJ
bnZhbGlkR1BSUmVnIHx8IGpzVmFsdWVSZWdzLnBheWxvYWRHUFIoKSA9PSBJbnZhbGlkR1BSUmVn
CisgICAgICAgICAgICB8fCBtX25ld1JlZ2lzdGVyc1tqc1ZhbHVlUmVncy5wYXlsb2FkR1BSKCld
ID09IG1fbmV3UmVnaXN0ZXJzW2pzVmFsdWVSZWdzLnRhZ0dQUigpXSk7CisgICAgICAgIGlmIChq
c1ZhbHVlUmVncy5wYXlsb2FkR1BSKCkgPT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIHJl
dHVybiBtX25ld1JlZ2lzdGVyc1tqc1ZhbHVlUmVncy50YWdHUFIoKV07CisgICAgICAgIHJldHVy
biBtX25ld1JlZ2lzdGVyc1tqc1ZhbHVlUmVncy5wYXlsb2FkR1BSKCldOworI2VuZGlmCisgICAg
fQorCisgICAgdm9pZCBhZGROZXcoSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIFZhbHVlUmVjb3Zl
cnkgcmVjb3ZlcnkpCisgICAgeworICAgICAgICBBU1NFUlQoanNWYWx1ZVJlZ3MgJiYgIWdldE5l
dyhqc1ZhbHVlUmVncykpOworICAgICAgICBDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3Zlcnkg
PSBhZGRDYWNoZWRSZWNvdmVyeShyZWNvdmVyeSk7CisgICAgICAgIEFTU0VSVCghY2FjaGVkUmVj
b3ZlcnktPndhbnRlZEpTVmFsdWVSZWdzKCkpOworICAgICAgICBjYWNoZWRSZWNvdmVyeS0+c2V0
V2FudGVkSlNWYWx1ZVJlZ3MoanNWYWx1ZVJlZ3MpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
ICAgIG1fbmV3UmVnaXN0ZXJzW2pzVmFsdWVSZWdzLmdwcigpXSA9IGNhY2hlZFJlY292ZXJ5Owor
I2Vsc2UKKyAgICAgICAgaWYgKGpzVmFsdWVSZWdzLnBheWxvYWRHUFIoKSAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICAgICAgbV9uZXdSZWdpc3RlcnNbanNWYWx1ZVJlZ3MucGF5bG9hZEdQUigp
XSA9IGNhY2hlZFJlY292ZXJ5OworICAgICAgICBpZiAoanNWYWx1ZVJlZ3MudGFnR1BSKCkgIT0g
SW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIG1fbmV3UmVnaXN0ZXJzW2pzVmFsdWVSZWdzLnRh
Z0dQUigpXSA9IGNhY2hlZFJlY292ZXJ5OworI2VuZGlmCisgICAgfQorCisgICAgdm9pZCBhZGRO
ZXcoRlBSUmVnIGZwciwgVmFsdWVSZWNvdmVyeSByZWNvdmVyeSkKKyAgICB7CisgICAgICAgIEFT
U0VSVChmcHIgIT0gSW52YWxpZEZQUlJlZyAmJiAhbV9uZXdSZWdpc3RlcnNbZnByXSk7CisgICAg
ICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSA9IGFkZENhY2hlZFJlY292ZXJ5KHJl
Y292ZXJ5KTsKKyAgICAgICAgbV9uZXdSZWdpc3RlcnNbZnByXSA9IGNhY2hlZFJlY292ZXJ5Owor
ICAgICAgICBBU1NFUlQoY2FjaGVkUmVjb3ZlcnktPndhbnRlZEZQUigpID09IEludmFsaWRGUFJS
ZWcpOworICAgICAgICBjYWNoZWRSZWNvdmVyeS0+c2V0V2FudGVkRlBSKGZwcik7CisgICAgfQor
CisgICAgLy8gbV9vbGRGcmFtZUJhc2UgaXMgdGhlIHJlZ2lzdGVyIHJlbGF0aXZlIHRvIHdoaWNo
IHdlIGFjY2VzcworICAgIC8vIHNsb3RzIGluIHRoZSBvbGQgY2FsbCBmcmFtZSwgd2l0aCBhbiBh
ZGRpdGlvbmFsIG9mZnNldCBvZgorICAgIC8vIG1fb2xkRnJhbWVPZmZzZXQuCisgICAgLy8KKyAg
ICAvLyAgLSBGb3IgYW4gYWN0dWFsIHRhaWwgY2FsbCwgbV9vbGRGcmFtZUJhc2UgaXMgdGhlIHN0
YWNrCisgICAgLy8gICAgcG9pbnRlciwgYW5kIG1fb2xkRnJhbWVPZmZzZXQgaXMgdGhlIG51bWJl
ciBvZiBsb2NhbHMgb2YgdGhlCisgICAgLy8gICAgdGFpbCBjYWxsZXIncyBmcmFtZS4gV2UgdXNl
IHN1Y2ggc3RhY2sgcG9pbnRlci1iYXNlZAorICAgIC8vICAgIGFkZHJlc3NpbmcgYmVjYXVzZSBp
dCBhbGxvd3MgdXMgdG8gbG9hZCB0aGUgdGFpbCBjYWxsZXIncworICAgIC8vICAgIGNhbGxlcidz
IGZyYW1lIHBvaW50ZXIgaW4gdGhlIGZyYW1lIHBvaW50ZXIgcmVnaXN0ZXIKKyAgICAvLyAgICBp
bW1lZGlhdGVseSBpbnN0ZWFkIG9mIGF3a3dhcmRseSBrZWVwaW5nIGl0IGFyb3VuZCBvbiB0aGUK
KyAgICAvLyAgICBzdGFjay4KKyAgICAvLworICAgIC8vICAtIEZvciBhIHNsb3cgcGF0aCBjYWxs
LCBtX29sZEZyYW1lQmFzZSBpcyBqdXN0IHRoZSBmcmFtZQorICAgIC8vICAgIHBvaW50ZXIsIGFu
ZCBtX29sZEZyYW1lT2Zmc2V0IGlzIDAuCisgICAgR1BSUmVnIG1fb2xkRnJhbWVCYXNlIHsgTWFj
cm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyIH07CisgICAgaW50IG1fb2xkRnJhbWVP
ZmZzZXQgeyAwIH07CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBhZGRyZXNzRm9yT2xk
KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MobV9vbGRGcmFtZUJhc2UsCisgICAgICAgICAgICAobV9vbGRGcmFt
ZU9mZnNldCArIHJlZy5vZmZzZXQoKSkgKiBzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICB9CisKKyAg
ICAvLyBtX25ld0ZyYW1lQmFzZSBpcyB0aGUgcmVnaXN0ZXIgcmVsYXRpdmUgdG8gd2hpY2ggd2Ug
YWNjZXNzCisgICAgLy8gc2xvdHMgaW4gdGhlIG5ldyBjYWxsIGZyYW1lLCBhbmQgd2UgYWx3YXlz
IG1ha2UgaXQgcG9pbnQgdG8KKyAgICAvLyB3aGVyZXZlciB0aGUgc3RhY2sgcG9pbnRlciB3aWxs
IGJlIHJpZ2h0IGJlZm9yZSBtYWtpbmcgdGhlCisgICAgLy8gYWN0dWFsIGNhbGwvanVtcC4gVGhl
IGFjdHVhbCBiYXNlIG9mIHRoZSBuZXcgZnJhbWUgaXMgYXQgb2Zmc2V0CisgICAgLy8gbV9uZXdG
cmFtZU9mZnNldCByZWxhdGl2ZSB0byBtX25ld0ZyYW1lQmFzZS4KKyAgICAvLworICAgIC8vICAt
IEZvciBhbiBhY3R1YWwgdGFpbCBjYWxsLCBtX25ld0ZyYW1lQmFzZSBpcyBjb21wdXRlZAorICAg
IC8vICAgIGR5bmFtaWNhbGx5LCBhbmQgbV9uZXdGcmFtZU9mZnNldCB2YXJpZXMgYmV0d2VlbiAw
IGFuZCAtMgorICAgIC8vICAgIGRlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlJ3MgY2FsbGlu
ZyBjb252ZW50aW9uIChzZWUKKyAgICAvLyAgICBwcmVwYXJlRm9yVGFpbENhbGwpLgorICAgIC8v
CisgICAgLy8gIC0gRm9yIGEgc2xvdyBwYXRoIGNhbGwsIG1fbmV3RnJhbWVCYXNlIGlzIHRoZSBh
Y3R1YWwgc3RhY2sKKyAgICAvLyAgICBwb2ludGVyLCBhbmQgbV9uZXdGcmFtZU9mZnNldCBpcyAt
IENhbGxlckZyYW1lQW5kUENTaXplLAorICAgIC8vICAgIGZvbGxvd2luZyB0aGUgY29udmVudGlv
biBmb3IgYSByZWd1bGFyIGNhbGwuCisgICAgR1BSUmVnIG1fbmV3RnJhbWVCYXNlIHsgSW52YWxp
ZEdQUlJlZyB9OworICAgIGludCBtX25ld0ZyYW1lT2Zmc2V0IHsgMH07CisKKyAgICBib29sIGlz
VW5kZWNpZGVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX25ld0ZyYW1lQmFzZSA9
PSBJbnZhbGlkR1BSUmVnOworICAgIH0KKworICAgIGJvb2wgaXNTbG93UGF0aCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9uZXdGcmFtZUJhc2UgPT0gTWFjcm9Bc3NlbWJsZXI6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyOworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
IGFkZHJlc3NGb3JOZXcoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX25ld0ZyYW1lQmFzZSwKKyAgICAgICAg
ICAgIChtX25ld0ZyYW1lT2Zmc2V0ICsgcmVnLm9mZnNldCgpKSAqIHNpemVvZihSZWdpc3Rlcikp
OworICAgIH0KKworICAgIC8vIFdlIHVzZSBhIGNvbmNlcHQgb2YgImRhbmdlciB6b25lIi4gVGhl
IGRhbmdlciB6b25lIGNvbnNpc3RzIG9mCisgICAgLy8gYWxsIHRoZSB3cml0ZXMgaW4gdGhlIG5l
dyBmcmFtZSB0aGF0IGNvdWxkIG92ZXJsYXAgd2l0aCByZWFkcworICAgIC8vIGluIHRoZSBvbGQg
ZnJhbWUuCisgICAgLy8KKyAgICAvLyBCZWNhdXNlIHdlIGNvdWxkIGhhdmUgYSBoaWdoZXIgYWN0
dWFsIG51bWJlciBvZiBhcmd1bWVudHMgdGhhbgorICAgIC8vIHBhcmFtZXRlcnMsIHdoZW4gcHJl
cGFyaW5nIGEgdGFpbCBjYWxsLCB3ZSBuZWVkIHRvIGFzc3VtZSB0aGF0CisgICAgLy8gd3JpdGlu
ZyB0byBhIHNsb3Qgb24gdGhlIG5ldyBmcmFtZSBjb3VsZCBvdmVybGFwIG5vdCBvbmx5IHdpdGgK
KyAgICAvLyB0aGUgY29ycmVzcG9uZGluZyBzbG90IGluIHRoZSBvbGQgZnJhbWUsIGJ1dCBhbHNv
IHdpdGggYW55IHNsb3QKKyAgICAvLyBhYm92ZSBpdC4gVGh1cywgdGhlIGRhbmdlciB6b25lIGNv
bnNpc3RzIG9mIGFsbCB3cml0ZXMgYmV0d2VlbgorICAgIC8vIHRoZSBmaXJzdCB3cml0ZSBhbmQg
d2hhdCBJIGNhbGwgdGhlICJkYW5nZXIgZnJvbnRpZXIiOiB0aGUKKyAgICAvLyBoaWdoZXN0IHNs
b3QgaW4gdGhlIG9sZCBmcmFtZSB3ZSBzdGlsbCBjYXJlIGFib3V0LiBUaHVzLCB0aGUKKyAgICAv
LyBkYW5nZXIgem9uZSBjb250YWlucyBhbGwgdGhlIHNsb3RzIGJldHdlZW4gdGhlIGZpcnN0IHNs
b3Qgb2YKKyAgICAvLyB0aGUgbmV3IGZyYW1lIGFuZCB0aGUgZGFuZ2VyIGZyb250aWVyLiBCZWNh
dXNlIHRoZSBkYW5nZXIKKyAgICAvLyBmcm9udGllciBpcyByZWxhdGVkIHRvIHRoZSBuZXcgZnJh
bWUsIGl0IGlzIHN0b3JlZCBhcyBhIHZpcnR1YWwKKyAgICAvLyByZWdpc3RlciAqaW4gdGhlIG5l
dyBmcmFtZSouCisgICAgVmlydHVhbFJlZ2lzdGVyIG1fZGFuZ2VyRnJvbnRpZXI7CisKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZGFuZ2VyRnJvbnRpZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKCFpc1VuZGVjaWRlZCgpKTsKKworICAgICAgICByZXR1cm4gbV9kYW5nZXJGcm9udGllcjsK
KyAgICB9CisKKyAgICBib29sIGlzRGFuZ2VyTmV3KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoIWlzVW5kZWNpZGVkKCkgJiYgaXNWYWxpZE5ldyhyZWcp
KTsKKyAgICAgICAgcmV0dXJuIHJlZyA8PSBkYW5nZXJGcm9udGllcigpOworICAgIH0KKworICAg
IHZvaWQgdXBkYXRlRGFuZ2VyRnJvbnRpZXIoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc1Vu
ZGVjaWRlZCgpKTsKKworICAgICAgICBtX2RhbmdlckZyb250aWVyID0gZmlyc3ROZXcoKSAtIDE7
CisgICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIHJlZyA9IGxhc3ROZXcoKTsgcmVnID49IGZp
cnN0TmV3KCk7IHJlZyAtPSAxKSB7CisgICAgICAgICAgICBpZiAoIWdldE5ldyhyZWcpIHx8ICFp
c1ZhbGlkT2xkKG5ld0FzT2xkKHJlZykpIHx8ICFnZXRPbGQobmV3QXNPbGQocmVnKSkpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIG1fZGFuZ2VyRnJvbnRpZXIgPSBy
ZWc7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIg
IERhbmdlciBmcm9udGllciBub3cgYXQgTkVXICIsIG1fZGFuZ2VyRnJvbnRpZXIsICJcbiIpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICBkYXRhTG9nKCIgIEFsbCBjbGVhciEgRGFuZ2VyIHpvbmUgaXMgZW1wdHkuXG4iKTsK
KyAgICB9CisKKyAgICAvLyBBIHNhZmUgd3JpdGUgaXMgYSB3cml0ZSB0aGF0IG5ldmVyIHdyaXRl
cyBpbnRvIHRoZSBkYW5nZXIgem9uZS4KKyAgICBib29sIGhhc09ubHlTYWZlV3JpdGVzKENhY2hl
ZFJlY292ZXJ5JiBjYWNoZWRSZWNvdmVyeSkgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAoVmly
dHVhbFJlZ2lzdGVyIHRhcmdldCA6IGNhY2hlZFJlY292ZXJ5LnRhcmdldHMoKSkgeworICAgICAg
ICAgICAgaWYgKGlzRGFuZ2VyTmV3KHRhcmdldCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIFlv
dSBtdXN0IGVuc3VyZSB0aGF0IHRoZXJlIGlzIG5vIGRhbmdlcm91cyB3cml0ZXMgYmVmb3JlCisg
ICAgLy8gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICAgIGJvb2wgdHJ5V3JpdGVzKENhY2hlZFJl
Y292ZXJ5Jik7CisKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIGVuc3VyZSB0aGF0IHRo
ZXJlIGlzIG5vIGxvbmdlciBhbnkKKyAgICAvLyBwb3NzaWJsZSBzYWZlIHdyaXRlLCBpLmUuIGFs
bCByZW1haW5pbmcgd3JpdGVzIGFyZSBlaXRoZXIgdG8KKyAgICAvLyB0aGUgZGFuZ2VyIHpvbmUg
b3IgY2FsbGVlIHNhdmUgcmVzdG9yYXRpb25zLgorICAgIC8vCisgICAgLy8gSXQgcmV0dXJucyBm
YWxzZSBpZiBpdCB3YXMgdW5hYmxlIHRvIHBlcmZvcm0gc29tZSBzYWZlIHdyaXRlcworICAgIC8v
IGR1ZSB0byBoaWdoIHJlZ2lzdGVyIHByZXNzdXJlLgorICAgIGJvb2wgcGVyZm9ybVNhZmVXcml0
ZXMoKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
KworI2VuZGlmIC8vIENhbGxGcmFtZVNodWZmbGVyX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMTg5ODg0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lm
IFVTRShKU1ZBTFVFNjQpCiAjaW5jbHVkZSAiSklULmgiCiAKKyNpbmNsdWRlICJDYWxsRnJhbWVT
aHVmZmxlci5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkpJVElubGluZXMu
aCIKICNpbmNsdWRlICJKU0FycmF5LmgiCkBAIC0xODAsOSArMTgxLDYgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGxfdmFyYXJncykKLSAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotCiAgICAgRGF0
YUxhYmVsUHRyIGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2s7CiAgICAgSnVtcCBzbG93Q2Fz
ZSA9IGJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwgcmVnVDAsIGFkZHJlc3NPZkxpbmtlZEZ1
bmN0aW9uQ2hlY2ssIFRydXN0ZWRJbW1QdHIoMCkpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNl
KTsKQEAgLTE5Myw3ICsxOTEsMjggQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQg
b3Bjb2RlSQogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90
UGF0aEJlZ2luID0gYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjazsKICAgICBtX2NhbGxDb21w
aWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyA9IGluZm87CiAKLSAg
ICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF92YXJhcmdzKSB7CisgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCkgeworICAgICAg
ICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0YTsKKyAgICAgICAgc2h1ZmZsZURhdGEu
bnVtTG9jYWxzID0KKyAgICAgICAgICAgIGluc3RydWN0aW9uWzRdLnUub3BlcmFuZCAtIHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKSAvIHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgIHNodWZmbGVE
YXRhLmFyZ3MucmVzaXplKGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOyArK2kpIHsKKyAgICAgICAg
ICAgIHNodWZmbGVEYXRhLmFyZ3NbaV0gPQorICAgICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6
OmRpc3BsYWNlZEluSlNTdGFjaygKKyAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoaSkgLSBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQsCisgICAgICAgICAgICAg
ICAgICAgIERhdGFGb3JtYXRKUyk7CisgICAgICAgIH0KKyAgICAgICAgc2h1ZmZsZURhdGEuY2Fs
bGVlID0KKyAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0
SlMpOworICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMobV9jb2Rl
QmxvY2spOworICAgICAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsK
KyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9y
VGFpbENhbGwoKTsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0lu
ZGV4XS5ob3RQYXRoT3RoZXIgPSBlbWl0TmFrZWRUYWlsQ2FsbCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzKSB7Cisg
ICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgcHJlcGFyZUZvclRhaWxD
YWxsU2xvdygpOwogICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5k
ZXhdLmhvdFBhdGhPdGhlciA9IGVtaXROYWtlZFRhaWxDYWxsKCk7CiAgICAgICAgIHJldHVybjsK
QEAgLTIxOCw2ICsyMzcsOSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29k
ZUlECiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAKKyAgICBpZiAob3Bjb2RlSUQgPT0gb3Bf
dGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzKQorICAgICAgICBl
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jYWxs
Q29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8pLCByZWdUMik7
CiAKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1
cm5Mb2NhdGlvbiA9IGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5r
R2VuZXJhdG9yKS5jb2RlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2gu
Y3BwCShyZXZpc2lvbiAxODk4ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0
Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJCaW5h
cnlTd2l0Y2guaCIKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJDYWxsRnJh
bWVTaHVmZmxlci5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJERkdT
cGVjdWxhdGl2ZUpJVC5oIgogI2luY2x1ZGUgIkZUTFRodW5rcy5oIgpAQCAtNzA2LDI2ICs3MDcs
MzIgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAogICAgIAogICAgIENDYWxsSGVscGVyczo6
SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgCi0gICAgcHRyZGlmZl90IG9mZnNldFRvRnJhbWUgPSAt
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOwotCi0gICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsK
LSAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG9rQXJndW1lbnRDb3VudCA9IHN0dWJKaXQuYnJh
bmNoMzIoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkJlbG93LCBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwgc3RhdGljX2Nhc3Q8cHRy
ZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpICogSlNTdGFjazo6QXJndW1lbnRDb3VudCkgKyBvZmZz
ZXRUb0ZyYW1lICsgUGF5bG9hZE9mZnNldCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEw
MDAwMDAwKSk7Ci0gICAgICAgIHN0dWJKaXQuYWJvcnRXaXRoUmVhc29uKFJlcGF0Y2hJbnNhbmVB
cmd1bWVudENvdW50KTsKLSAgICAgICAgb2tBcmd1bWVudENvdW50LmxpbmsoJnN0dWJKaXQpOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlcj4gZnJhbWVTaHVmZmxlcjsKKyAg
ICBpZiAoY2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEoKSkgeworICAgICAgICBBU1NFUlQo
Y2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSk7CisgICAgICAgIGZyYW1lU2h1ZmZsZXIgPSBzdGQ6
Om1ha2VfdW5pcXVlPENhbGxGcmFtZVNodWZmbGVyPihzdHViSml0LCAqY2FsbExpbmtJbmZvLmZy
YW1lU2h1ZmZsZURhdGEoKSk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgLy8gV2Ug
d291bGQgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgY2FsbGVlIGlzIGEgY2VsbCwgYW5k
IHdlIGNhbgorICAgICAgICAvLyB1c2UgdGhlIGFkZGl0aW9uYWwgcmVnaXN0ZXIgdGhpcyBidXlz
IHVzLgorICAgICAgICBmcmFtZVNodWZmbGVyLT5hc3N1bWVDYWxsZWVJc0NlbGwoKTsKKyNlbmRp
ZgorICAgICAgICBmcmFtZVNodWZmbGVyLT5sb2NrR1BSKGNhbGxlZUdQUik7CiAgICAgfQotICAg
IAotICAgIEdQUlJlZyBzY3JhdGNoID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BS
KGNhbGxlZUdQUik7CiAgICAgR1BSUmVnIGNvbXBhcmlzb25WYWx1ZUdQUjsKICAgICAKICAgICBp
ZiAoaXNDbG9zdXJlQ2FsbCkgewotICAgICAgICAvLyBWZXJpZnkgdGhhdCB3ZSBoYXZlIGEgZnVu
Y3Rpb24gYW5kIHN0YXNoIHRoZSBleGVjdXRhYmxlIGluIHNjcmF0Y2guCisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAoZnJhbWVTaHVmZmxlcikKKyAgICAgICAgICAgIHNj
cmF0Y2hHUFIgPSBmcmFtZVNodWZmbGVyLT5hY3F1aXJlR1BSKCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIo
Y2FsbGVlR1BSKTsKKyAgICAgICAgLy8gVmVyaWZ5IHRoYXQgd2UgaGF2ZSBhIGZ1bmN0aW9uIGFu
ZCBzdGFzaCB0aGUgZXhlY3V0YWJsZSBpbiBzY3JhdGNoR1BSLgogCiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICAgICAgLy8gV2UgY2FuIHNhZmVseSBjbG9iYmVyIGV2ZXJ5dGhpbmcgZXhjZXB0IHRo
ZSBjYWxsZWVHUFIuIFdlIGNhbid0IHJlbHkgb24gdGFnTWFza1JlZ2lzdGVyCi0gICAgICAgIC8v
IGJlaW5nIHNldC4gU28gd2UgZG8gdGhpcyB0aGUgaGFyZCB3YXkuCi0gICAgICAgIHN0dWJKaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFRhZ01hc2spLCBzY3JhdGNoKTsKLSAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVzdDY0KENDYWxsSGVscGVyczo6
Tm9uWmVybywgY2FsbGVlR1BSLCBzY3JhdGNoKSk7CisgICAgICAgIC8vIFdlIGNhbid0IHJlbHkg
b24gdGFnTWFza1JlZ2lzdGVyIGJlaW5nIHNldCwgc28gd2UgZG8gdGhpcyB0aGUgaGFyZAorICAg
ICAgICAvLyB3YXkuCisgICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTY0KFRhZ01hc2spLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKHN0
dWJKaXQuYnJhbmNoVGVzdDY0KENDYWxsSGVscGVyczo6Tm9uWmVybywgY2FsbGVlR1BSLCBzY3Jh
dGNoR1BSKSk7CiAjZWxzZQogICAgICAgICAvLyBXZSB3b3VsZCBoYXZlIGFscmVhZHkgY2hlY2tl
ZCB0aGF0IHRoZSBjYWxsZWUgaXMgYSBjZWxsLgogI2VuZGlmCkBAIC03MzgsOSArNzQ1LDkgQEAg
dm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAogICAgIAogICAgICAgICBzdHViSml0LmxvYWRQdHIo
CiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9u
OjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksCi0gICAgICAgICAgICBzY3JhdGNoKTsKKyAgICAgICAg
ICAgIHNjcmF0Y2hHUFIpOwogICAgICAgICAKLSAgICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0g
c2NyYXRjaDsKKyAgICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0gc2NyYXRjaEdQUjsKICAgICB9
IGVsc2UKICAgICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0gY2FsbGVlR1BSOwogICAgIApAQCAt
NzgyLDggKzc4OSwxMyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiAgICAgICAgIGNhc2VW
YWx1ZXNbaV0gPSBuZXdDYXNlVmFsdWU7CiAgICAgfQogICAgIAotICAgIEdQUlJlZyBmYXN0Q291
bnRzQmFzZUdQUiA9Ci0gICAgICAgIEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihj
YWxsZWVHUFIsIGNvbXBhcmlzb25WYWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDMpOworICAgIEdQUlJl
ZyBmYXN0Q291bnRzQmFzZUdQUjsKKyAgICBpZiAoZnJhbWVTaHVmZmxlcikKKyAgICAgICAgZmFz
dENvdW50c0Jhc2VHUFIgPSBmcmFtZVNodWZmbGVyLT5hY3F1aXJlR1BSKCk7CisgICAgZWxzZSB7
CisgICAgICAgIGZhc3RDb3VudHNCYXNlR1BSID0KKyAgICAgICAgICAgIEFzc2VtYmx5SGVscGVy
czo6c2VsZWN0U2NyYXRjaEdQUihjYWxsZWVHUFIsIGNvbXBhcmlzb25WYWx1ZUdQUiwgR1BSSW5m
bzo6cmVnVDMpOworICAgIH0KICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGZhc3RDb3VudHMuZ2V0KCkpLCBmYXN0Q291bnRzQmFzZUdQUik7CiAgICAgCiAgICAg
QmluYXJ5U3dpdGNoIGJpbmFyeVN3aXRjaChjb21wYXJpc29uVmFsdWVHUFIsIGNhc2VWYWx1ZXMs
IEJpbmFyeVN3aXRjaDo6SW50UHRyKTsKQEAgLTgwMyw3ICs4MTUsMTEgQEAgdm9pZCBsaW5rUG9s
eW1vcnBoaWNDYWxsKAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KDEpLAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhmYXN0Q291bnRzQmFz
ZUdQUiwgY2FzZUluZGV4ICogc2l6ZW9mKHVpbnQzMl90KSkpOwogICAgICAgICB9Ci0gICAgICAg
IGlmIChjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlmIChmcmFtZVNodWZm
bGVyKSB7CisgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihzdHViSml0LCBmcmFtZVNodWZm
bGVyLT5zbmFwc2hvdCgpKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICAgICAgICAgIGNhbGxz
W2Nhc2VJbmRleF0uY2FsbCA9IHN0dWJKaXQubmVhclRhaWxDYWxsKCk7CisgICAgICAgIH0gZWxz
ZSBpZiAoY2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSkgeworICAgICAgICAgICAgc3R1YkppdC5l
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICBzdHViSml0LnByZXBhcmVGb3JU
YWlsQ2FsbFNsb3coKTsKICAgICAgICAgICAgIGNhbGxzW2Nhc2VJbmRleF0uY2FsbCA9IHN0dWJK
aXQubmVhclRhaWxDYWxsKCk7CiAgICAgICAgIH0gZWxzZQpAQCAtODE0LDEwICs4MzAsMjMgQEAg
dm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAogICAgIAogICAgIHNsb3dQYXRoLmxpbmsoJnN0dWJK
aXQpOwogICAgIGJpbmFyeVN3aXRjaC5mYWxsVGhyb3VnaCgpLmxpbmsoJnN0dWJKaXQpOwotICAg
IHN0dWJKaXQubW92ZShjYWxsZWVHUFIsIEdQUkluZm86OnJlZ1QwKTsKKworICAgIGlmIChmcmFt
ZVNodWZmbGVyKSB7CisgICAgICAgIGZyYW1lU2h1ZmZsZXItPnJlbGVhc2VHUFIoY2FsbGVlR1BS
KTsKKyAgICAgICAgZnJhbWVTaHVmZmxlci0+cmVsZWFzZUdQUihjb21wYXJpc29uVmFsdWVHUFIp
OworICAgICAgICBmcmFtZVNodWZmbGVyLT5yZWxlYXNlR1BSKGZhc3RDb3VudHNCYXNlR1BSKTsK
ICNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICBm
cmFtZVNodWZmbGVyLT5zZXRDYWxsZWVKU1ZhbHVlUmVncyhKU1ZhbHVlUmVncyhHUFJJbmZvOjpy
ZWdUMSwgR1BSSW5mbzo6cmVnVDApKTsKKyNlbHNlCisgICAgICAgIGZyYW1lU2h1ZmZsZXItPnNl
dENhbGxlZUpTVmFsdWVSZWdzKEpTVmFsdWVSZWdzKEdQUkluZm86OnJlZ1QwKSk7CiAjZW5kaWYK
KyAgICAgICAgZnJhbWVTaHVmZmxlci0+cHJlcGFyZUZvclNsb3dQYXRoKCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgc3R1YkppdC5tb3ZlKGNhbGxlZUdQUiwgR1BSSW5mbzo6cmVnVDApOworI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgR1BSSW5mbzo6cmVnVDEpOworI2VuZGlmCisg
ICAgfQogICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmNhbGxM
aW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24oKS5leGVjdXRh
YmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDQpOwogICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMTg5ODg0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTUsNiArMTU1LDEwIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rUG9s
eW1vcnBoaWNDYWwKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJMaW5r
IHBvbHltb3JwaGljIGNhbGwgc2xvdyBwYXRoIHRodW5rIikpOwogfQogCisvLyBGSVhNRTogV2Ug
c2hvdWxkIGRpc3Rpbmd1aXNoIGJldHdlZW4gYSBtZWdhbW9ycGhpYyB2aXJ0dWFsIGNhbGwgdnMu
IGEgc2xvdworLy8gcGF0aCB2aXJ0dWFsIGNhbGwgc28gdGhhdCB3ZSBjYW4gZW5hYmxlIGZhc3Qg
dGFpbCBjYWxscyBmb3IgbWVnYW1vcnBoaWMKKy8vIHZpcnR1YWwgY2FsbHMgYnkgdXNpbmcgdGhl
IHNodWZmbGVyLgorLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
ODgzMQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxUaHVua0ZvcihWTSogdm0sIENhbGxM
aW5rSW5mbyYgY2FsbExpbmtJbmZvKQogewogICAgIC8vIFRoZSBjYWxsZWUgaXMgaW4gcmVnVDAg
KGZvciBKU1ZBTFVFMzJfNjQsIHRoZSB0YWcgaXMgaW4gcmVnVDEpLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261368</attachid>
            <date>2015-09-16 22:31:28 -0700</date>
            <delta_ts>2015-09-18 15:51:25 -0700</delta_ts>
            <desc>Patch with speculative build fixes</desc>
            <filename>148662-4.patch</filename>
            <type>text/plain</type>
            <size>128796</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg5OTAxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzOCBA
QAorMjAxNS0wOS0xNiAgQmFzaWxlIENsZW1lbnQgIDxiYXNpbGVfY2xlbWVudEBhcHBsZS5jb20+
CisKKyAgICAgICAgW0VTNl0gVGFpbCBjYWxsIGZhc3QgcGF0aCBzaG91bGQgZWZmaWNpZW50bHkg
cmV1c2UgdGhlIGZyYW1lJ3Mgc3RhY2sgc3BhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODY2MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaW50cm9kdWNlcyBhIG5ldyBjbGFzcyAoQ2FsbEZy
YW1lU2h1ZmZsZXIpIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yCisgICAgICAgIGVmZmljaWVudGx5
IGJ1aWxkaW5nIHRoZSBuZXcgZnJhbWVzIHdoZW4gcGVyZm9ybWluZyBhIHRhaWwgY2FsbC4gSW4K
KyAgICAgICAgb3JkZXIgZm9yIFJlcGF0Y2ggdG8ga25vdyBhYm91dCB0aGUgcG9zaXRpb24gb2Yg
YXJndW1lbnRzIG9uIHRoZQorICAgICAgICBzdGFjay9yZWdpc3RlcnMgKGUuZy4gZm9yIHBvbHlt
b3JwaGljIGNhbGwgaW5saW5lIGNhY2hlcyksIHdlIHN0b3JlIGEKKyAgICAgICAgQ2FsbEZyYW1l
U2h1ZmZsZURhdGEgaW4gdGhlIENhbGxMaW5rSW5mby4gT3RoZXJ3aXNlLCB0aGUgSklUIGFuZCBE
RkcKKyAgICAgICAgY29tcGlsZXIgYXJlIG5vdyB1c2luZyBDYWxsRnJhbWVTaHVmZmxlciBpbnN0
ZWFkIG9mCisgICAgICAgIENDYWxsSGVscGVyczo6cHJlcGFyZUZvclRhaWxDYWxsU2xvdygpIHRv
IGJ1aWxkIHRoZSBmcmFtZSBmb3IgYSB0YWlsCisgICAgICAgIGNhbGwuCisKKyAgICAgICAgV2hl
biB0YWtpbmcgYSBzbG93IHBhdGgsIHdlIHN0aWxsIGJ1aWxkIHRoZSBmcmFtZSBhcyBpZiBkb2lu
ZyBhIHJlZ3VsYXIKKyAgICAgICAgY2FsbCwgYmVjYXVzZSB3ZSBjb3VsZCB0aHJvdyBhbiBleGNl
cHRpb24gYW5kIG5lZWQgdGhlIGNhbGxlcidzIGZyYW1lCisgICAgICAgIGF0IHRoYXQgcG9pbnQu
IFRoaXMgbWVhbnMgdGhhdCBmb3IgdmlydHVhbCBjYWxscywgd2UgZG9uJ3QgYmVuZWZpdCBmcm9t
CisgICAgICAgIHRoZSBlZmZpY2llbnQgZnJhbWUgbW92ZSBmb3Igbm93LgorCisgICAgICAgICog
Q01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvai5maWx0ZXJzOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVy
Lmg6CisgICAgICAgIChKU0M6OkFSTXY3QXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKToKKyAgICAg
ICAgKEpTQzo6QVJNdjdBc3NlbWJsZXI6Omxhc3RSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkFS
TXY3QXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2Vt
Ymxlcjo6bGFzdEZQUmVnaXN0ZXIpOgorICAgICAgICAqIGFzc2VtYmxlci9BYm9ydFJlYXNvbi5o
OgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5oOgorICAgICAgICAoSlNDOjpDYWxs
TGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0lu
Zm86OmZyYW1lU2h1ZmZsZURhdGEpOgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUmVjb3Zlcnku
aDoKKyAgICAgICAgKEpTQzo6VmFsdWVSZWNvdmVyeTo6aW5SZWdpc3Rlcik6CisgICAgICAgICog
ZGZnL0RGR0dlbmVyYXRpb25JbmZvLmg6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbklu
Zm86OnJlY292ZXJ5KToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2
ZVJlZ2lzdGVycyk6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmg6IEFkZGVk
LgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1lU2h1ZmZsZXIpOgorICAgICAgICAoSlND
OjpDYWxsRnJhbWVTaHVmZmxlcjo6ZHVtcCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZm
bGVyOjpnZXRDYWNoZWRSZWNvdmVyeSk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVy
OjpzZXRDYWNoZWRSZWNvdmVyeSk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpz
cGlsbCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjplbWl0RGVsdGFDaGVjayk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlRm9yU2xvd1BhdGgpOgor
ICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6cHJlcGFyZUZvclRhaWxDYWxsKToKKyAg
ICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OnRyeVdyaXRlcyk6CisgICAgICAgIChKU0M6
OkNhbGxGcmFtZVNodWZmbGVyOjpwZXJmb3JtU2FmZVdyaXRlcyk6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlQW55KToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1lU2h1
ZmZsZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5OjpDYWNoZWRSZWNv
dmVyeSk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5Ojp0YXJnZXRzKToKKyAgICAgICAg
KEpTQzo6Q2FjaGVkUmVjb3Zlcnk6OmFkZFRhcmdldCk6CisgICAgICAgIChKU0M6OkNhY2hlZFJl
Y292ZXJ5OjpyZW1vdmVUYXJnZXQpOgorICAgICAgICAoSlNDOjpDYWNoZWRSZWNvdmVyeTo6Y2xl
YXJUYXJnZXRzKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVjb3Zlcnk6OnNldFdhbnRlZEpTVmFs
dWVSZWdzKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVjb3Zlcnk6OnNldFdhbnRlZEZQUik6Cisg
ICAgICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5Ojpib3hpbmdSZXF1aXJlc0dQUik6CisgICAgICAg
IChKU0M6OkNhY2hlZFJlY292ZXJ5Ojpib3hpbmdSZXF1aXJlc0ZQUik6CisgICAgICAgIChKU0M6
OkNhY2hlZFJlY292ZXJ5OjpyZWNvdmVyeSk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5
OjpzZXRSZWNvdmVyeSk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5Ojp3YW50ZWRKU1Zh
bHVlUmVncyk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5Ojp3YW50ZWRGUFIpOgorICAg
ICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6bG9ja0dQUik6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZVNodWZmbGVyOjphY3F1aXJlR1BSKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1
ZmZsZXI6OnJlbGVhc2VHUFIpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c25h
cHNob3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c2V0Q2FsbGVlSlNWYWx1
ZVJlZ3MpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6YXNzdW1lQ2FsbGVlSXND
ZWxsKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmNhbkJveCk6CisgICAgICAg
IChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjplbnN1cmVCb3gpOgorICAgICAgICAoSlNDOjpDYWxs
RnJhbWVTaHVmZmxlcjo6ZW5zdXJlTG9hZCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZm
bGVyOjpjYW5Mb2FkQW5kQm94KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OnVw
ZGF0ZVJlY292ZXJ5KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmNsZWFyQ2Fj
aGVkUmVjb3ZlcnkpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6YWRkQ2FjaGVk
UmVjb3ZlcnkpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6bnVtTG9jYWxzKToK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmdldE9sZCk6CisgICAgICAgIChKU0M6
OkNhbGxGcmFtZVNodWZmbGVyOjpzZXRPbGQpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVm
Zmxlcjo6Zmlyc3RPbGQpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6bGFzdE9s
ZCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjppc1ZhbGlkT2xkKToKKyAgICAg
ICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmFyZ0NvdW50KToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lU2h1ZmZsZXI6OmdldE5ldyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVy
OjpzZXROZXcpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6YWRkTmV3KToKKyAg
ICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmZpcnN0TmV3KToKKyAgICAgICAgKEpTQzo6
Q2FsbEZyYW1lU2h1ZmZsZXI6Omxhc3ROZXcpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVm
Zmxlcjo6aXNWYWxpZE5ldyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpuZXdB
c09sZCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpnZXRGcmVlUmVnaXN0ZXIp
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6Z2V0RnJlZUdQUik6CisgICAgICAg
IChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpnZXRGcmVlRlBSKToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lU2h1ZmZsZXI6Omhhc0ZyZWVSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkNhbGxGcmFt
ZVNodWZmbGVyOjplbnN1cmVSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZm
bGVyOjplbnN1cmVHUFIpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6ZW5zdXJl
RlBSKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmFkZHJlc3NGb3JPbGQpOgor
ICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6aXNVbmRlY2lkZWQpOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6aXNTbG93UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxG
cmFtZVNodWZmbGVyOjphZGRyZXNzRm9yTmV3KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1
ZmZsZXI6OmRhbmdlckZyb250aWVyKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6
OmlzRGFuZ2VyTmV3KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OnVwZGF0ZURh
bmdlckZyb250aWVyKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6Omhhc09ubHlT
YWZlV3JpdGVzKToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHA6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6ZW1pdFN0b3JlKToKKyAgICAg
ICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXRCb3gpOgorICAgICAgICAoSlNDOjpDYWxs
RnJhbWVTaHVmZmxlcjo6ZW1pdExvYWQpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxl
cjo6Y2FuTG9hZCk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5Ojpsb2Fkc0ludG9GUFIp
OgorICAgICAgICAoSlNDOjpDYWNoZWRSZWNvdmVyeTo6bG9hZHNJbnRvR1BSKToKKyAgICAgICAg
KEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXREaXNwbGFjZSk6CisgICAgICAgICogaml0L0Nh
bGxGcmFtZVNodWZmbGVyNjQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1
ZmZsZXI6OmVtaXRTdG9yZSk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjplbWl0
Qm94KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXRMb2FkKToKKyAgICAg
ICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmNhbkxvYWQpOgorICAgICAgICAoSlNDOjpDYWNo
ZWRSZWNvdmVyeTo6bG9hZHNJbnRvRlBSKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVjb3Zlcnk6
OmxvYWRzSW50b0dQUik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjplbWl0RGlz
cGxhY2UpOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpj
b21waWxlT3BDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2Up
OgorICAgICAgICAqIGppdC9SZWdpc3Rlck1hcC5jcHA6CisgICAgICAgIChKU0M6OlJlZ2lzdGVy
TWFwOjpSZWdpc3Rlck1hcCk6CisgICAgICAgIChKU0M6OkdQUk1hcDo6R1BSTWFwKToKKyAgICAg
ICAgKEpTQzo6RlBSTWFwOjpGUFJNYXApOgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAg
ICAgICAgKEpTQzo6bGlua1BvbHltb3JwaGljQ2FsbCk6CisKIDIwMTUtMDktMTYgIFN1a29sc2Fr
IFNha3NodXdvbmcgIDxzdWtvbHNha0BnbWFpbC5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IGlu
ZGlyZWN0IGNhbGxzIGluIFdlYkFzc2VtYmx5CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiAxODk5MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTM2MCw2ICszNjAsMTAgQEAgc2V0KEphdmFT
Y3JpcHRDb3JlX1NPVVJDRVMKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCiAgICAgaml0
L0JpbmFyeVN3aXRjaC5jcHAKKyAgICBqaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCisgICAg
aml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAorICAgIGppdC9DYWxsRnJhbWVTaHVmZmxlcjMyXzY0
LmNwcAorICAgIGppdC9DYWxsRnJhbWVTaHVmZmxlcjY0LmNwcAogICAgIGppdC9FeGVjdXRhYmxl
QWxsb2NhdGlvbkZ1enouY3BwCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCiAgICAg
aml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTg5OTAxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtNjIwLDYgKzYyMCwxMCBAQAogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5caW50ZXJwcmV0ZXJcU3RhY2tWaXNpdG9yLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGppdFxBc3NlbWJseUhlbHBlcnMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5caml0XEJpbmFyeVN3aXRjaC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxqaXRcQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwIiAvPgorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5caml0XENhbGxGcmFtZVNodWZmbGVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGppdFxDYWxsRnJhbWVTaHVmZmxlcjMyXzY0LmNwcCIgLz4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGppdFxDYWxsRnJhbWVTaHVmZmxlcjY0LmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEV4ZWN1dGFibGVBbGxvY2F0b3IuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEV4ZWN1dGFibGVBbGxvY2F0b3JG
aXhlZFZNUG9vbC5jcHAiIC8+CkBAIC0xNDIwLDYgKzE0MjQsOCBAQAogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcU3RhY2tWaXNpdG9yLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxqaXRcQXNzZW1ibHlIZWxwZXJzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxqaXRcQmluYXJ5U3dpdGNoLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxqaXRcQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGppdFxDYWxsRnJhbWVTaHVmZmxlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5caml0XENDYWxsSGVscGVycy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aml0XENvbXBhY3RKSVRDb2RlTWFwLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxq
aXRcRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRl
cnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
eHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAxODk5MDEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHdvcmtpbmcgY29weSkKQEAgLTM5Niw2ICszOTYsMTggQEAK
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxIb3N0Q2FsbFJldHVyblZhbHVlLmNwcCI+
CiAgICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5caml0XENhbGxGcmFtZVNodWZmbGVEYXRhLmNwcCI+CisgICAgICA8
RmlsdGVyPmppdDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5caml0XENhbGxGcmFtZVNodWZmbGVyLmNwcCI+CisgICAgICA8RmlsdGVyPmppdDwv
RmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0
XENhbGxGcmFtZVNodWZmbGVyMzJfNjQuY3BwIj4KKyAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+
CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcQ2FsbEZy
YW1lU2h1ZmZsZXI2NC5jcHAiPgorICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KKyAgICA8L0Ns
Q29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVQuY3BwIj4KICAgICAg
IDxGaWx0ZXI+aml0PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTg5OTAxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTk2OCwxMiArOTY4LDE4IEBACiAJCTVEQkIxNTFCMTMxRDBCMzEwMDU2QUQzNiAvKiB0
ZXN0YXBpLmpzIGluIENvcHkgU3VwcG9ydCBTY3JpcHQgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTREODU3NzQwQTQ2OTZDODAwMzIxNDZDIC8qIHRlc3RhcGkuanMgKi87IH07
CiAJCTVEQkIxNTI1MTMxRDBCRDcwMDU2QUQzNiAvKiBtaW5pZG9tLmpzIGluIENvcHkgU3VwcG9y
dCBTY3JpcHQgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxMjExMEQwQTQ4
Nzg4NzAwNDgwMjU1IC8qIG1pbmlkb20uanMgKi87IH07CiAJCTVERTZFNUIzMEUxNzI4RUMwMDE4
MDQwNyAvKiBjcmVhdGVfaGFzaF90YWJsZSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY2OTJBODU0MDI1NTU5N0QwMUZGNjBGNyAvKiBjcmVhdGVfaGFzaF90
YWJsZSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwotCQk2MjNBMzdFQzFC
ODdBN0MwMDA3NTQyMDkgLyogUmVnaXN0ZXJNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyM0EzN0VCMUI4N0E3QkQwMDc1NDIwOSAvKiBSZWdpc3Rl
ck1hcC5oICovOyB9OworCQk2MjNBMzdFQzFCODdBN0MwMDA3NTQyMDkgLyogUmVnaXN0ZXJNYXAu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyM0EzN0VC
MUI4N0E3QkQwMDc1NDIwOSAvKiBSZWdpc3Rlck1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTYyNzY3MzIzMUI2ODBDMUUwMEZEOUYyRSAvKiBD
YWxsTW9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2Mjc2NzMyMTFCNjgwQzFFMDBGRDlGMkUgLyogQ2FsbE1vZGUuY3BwICovOyB9OwogCQk2Mjc2
NzMyNDFCNjgwQzFFMDBGRDlGMkUgLyogQ2FsbE1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyNzY3MzIyMUI2ODBDMUUwMEZEOUYyRSAvKiBDYWxs
TW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTYyRDJEMzhGMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyRDJEMzhEMUFERjEwM0Yw
MDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmNwcCAqLzsgfTsKIAkJNjJEMkQzOTAxQURGMTAz
RjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyRDJEMzhFMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlv
blJhcmVEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNjJENzU1RDQxQjg0RkIzRDAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyNjQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjJENzU1RDMx
Qjg0RkIzOTAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyNjQuY3BwICovOyB9OworCQk2MkQ3
NTVENTFCODRGQjQwMDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MkQ3NTVEMjFCODRGQjM5
MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAgKi87IH07CisJCTYyRDc1NUQ2
MUI4NEZCNDYwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MkQ3NTVEMDFCODRGQjM5MDAxODAxRkEg
LyogQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwICovOyB9OworCQk2MkQ3NTVENzFCODRGQjRBMDAxODAx
RkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDYyRDc1NUQxMUI4NEZCMzkwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVm
Zmxlci5oICovOyB9OwogCQk2MkUzRDVGMDFCOEQwQjczMDBCODY4QkIgLyogRGF0YUZvcm1hdC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MkUzRDVF
RjFCOEQwQjczMDBCODY4QkIgLyogRGF0YUZvcm1hdC5jcHAgKi87IH07CisJCTYyRUM5QkI2MUI3
RUIwN0MwMDMwM0FEMSAvKiBDYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MkVDOUJCNDFCN0VCMDdDMDAzMDNBRDEg
LyogQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwICovOyB9OworCQk2MkVDOUJCNzFCN0VCMDdDMDAz
MDNBRDEgLyogQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyRUM5QkI1MUI3RUIwN0MwMDMwM0FEMSAvKiBDYWxsRnJh
bWVTaHVmZmxlRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTYyRjJBQTM3MUIwQkVERTMwMDYxMEM3QSAvKiBERkdMYXp5Tm9kZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MkE5QTI5RTFCMEJF
RDQ4MDBCRDU0Q0EgLyogREZHTGF6eU5vZGUuY3BwICovOyB9OwogCQk2MkYyQUEzODFCMEJFREUz
MDA2MTBDN0EgLyogREZHTGF6eU5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDYyQTlBMjlGMUIwQkVENDgwMEJENTRDQSAvKiBERkdMYXp5Tm9kZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTY1MDdE
MjlFMEU4NzFFNUUwMEQ3RDg5NiAvKiBKU1R5cGVJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTA3RDI5NzBFODcxRTRBMDBEN0Q4OTYgLyogSlNU
eXBlSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC0yNzgwLDcgKzI3ODYsMTMgQEAKIAkJNjJBOUEyOUYxQjBCRUQ0ODAwQkQ1NENBIC8qIERG
R0xhenlOb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xhenlOb2Rl
Lmg7IHBhdGggPSBkZmcvREZHTGF6eU5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNjJEMkQzOEQxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURhdGEuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRnVuY3Rpb25SYXJlRGF0YS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTYyRDJEMzhFMUFERjEwM0YwMDAyMDZDMSAvKiBG
dW5jdGlvblJhcmVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1bmN0
aW9uUmFyZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjJENzU1RDAxQjg0
RkIzOTAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENhbGxGcmFtZVNodWZmbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNjJENzU1RDExQjg0RkIzOTAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZm
bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxGcmFtZVNodWZmbGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTYyRDc1NUQyMUI4NEZCMzkwMDE4MDFG
QSAvKiBDYWxsRnJhbWVTaHVmZmxlcjMyXzY0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENhbGxGcmFtZVNodWZmbGVyMzJfNjQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk2MkQ3NTVEMzFCODRGQjM5MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZs
ZXI2NC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsRnJhbWVT
aHVmZmxlcjY0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjJFM0Q1RUYxQjhE
MEI3MzAwQjg2OEJCIC8qIERhdGFGb3JtYXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRGF0YUZvcm1hdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTYyRUM5QkI0MUI3RUIwN0MwMDMwM0FEMSAvKiBDYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsRnJhbWVTaHVmZmxlRGF0YS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTYyRUM5QkI1MUI3RUIwN0MwMDMwM0FE
MSAvKiBDYWxsRnJhbWVTaHVmZmxlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDYWxsRnJhbWVTaHVmZmxlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2NTA3RDI5NzBFODcxRTRBMDBEN0Q4OTYgLyogSlNUeXBlSW5mby5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTY1MTEyMkU1MTQwNDY5QkEwMDJCMTAxRCAvKiB0ZXN0UmVnRXhwLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHRlc3RSZWdFeHAuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk2NTExMjMwNTE0MDQ2QTRDMDAyQjEwMUQgLyogdGVzdFJlZ0V4
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBp
bGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gdGVzdFJl
Z0V4cDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTQwOTgsNiArNDEx
MCwxMiBAQAogCQkJCTBGMjRFNTNDMTdFQTlGNTkwMEFCQjIxNyAvKiBBc3NlbWJseUhlbHBlcnMu
aCAqLywKIAkJCQkwRjY0QjI2RjFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmNwcCAq
LywKIAkJCQkwRjY0QjI3MDFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmggKi8sCisJ
CQkJNjJFQzlCQjQxQjdFQjA3QzAwMzAzQUQxIC8qIENhbGxGcmFtZVNodWZmbGVEYXRhLmNwcCAq
LywKKwkJCQk2MkVDOUJCNTFCN0VCMDdDMDAzMDNBRDEgLyogQ2FsbEZyYW1lU2h1ZmZsZURhdGEu
aCAqLywKKwkJCQk2MkQ3NTVEMDFCODRGQjM5MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIu
Y3BwICovLAorCQkJCTYyRDc1NUQxMUI4NEZCMzkwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxl
ci5oICovLAorCQkJCTYyRDc1NUQyMUI4NEZCMzkwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxl
cjMyXzY0LmNwcCAqLywKKwkJCQk2MkQ3NTVEMzFCODRGQjM5MDAxODAxRkEgLyogQ2FsbEZyYW1l
U2h1ZmZsZXI2NC5jcHAgKi8sCiAJCQkJMEYyNEU1M0QxN0VBOUY1OTAwQUJCMjE3IC8qIENDYWxs
SGVscGVycy5oICovLAogCQkJCTBGRDgyRTM3MTQxQUIxNDIwMDE3OUM5NCAvKiBDb21wYWN0SklU
Q29kZU1hcC5oICovLAogCQkJCTBGRjA1NEY3MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxl
QWxsb2NhdGlvbkZ1enouY3BwICovLApAQCAtNTkzMCw2ICs1OTQ4LDcgQEAKIAkJCQk3OTdFMDdB
QTFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRTA1MDI4MUFBOTA5NTYwMEQzM0IzMyAvKiBTY29wZWRBcmd1bWVudHMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTUyQzA2MTFGMUFBNTFFMUMwMEI0QURCQSAvKiBSdW50aW1l
VHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNjIzQTM3RUMxQjg3QTdDMDAwNzU0MjA5IC8qIFJl
Z2lzdGVyTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTRENTVCODFBRTcxNkNBMDA1MkU0NTkg
LyogSXRlcmF0aW9uU3RhdHVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTUwNjg2NTFBRTI0NjM5
MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNDQy
Q0IyNTFBNkNEQjhDMDA1RDNEN0MgLyogSlNJbnB1dHMuanNvbiBpbiBIZWFkZXJzICovLApAQCAt
NTk2NSw2ICs1OTg0LDcgQEAKIAkJCQlDNEY0QjZGNDFBMDVDOTQ0MDA1Q0FCNzYgLyogY3BwX2dl
bmVyYXRvci5weSBpbiBIZWFkZXJzICovLAogCQkJCUE1MzI0Mzk0MTg1Njk3MDkwMDJFRDY5MiAv
KiBnZW5lcmF0ZS1jb21iaW5lZC1pbnNwZWN0b3ItanNvbi5weSBpbiBIZWFkZXJzICovLAogCQkJ
CUE1ODQwRTI3MTg3Qzk4MUUwMDg0M0IxMCAvKiBjc3NtaW4ucHkgaW4gSGVhZGVycyAqLywKKwkJ
CQk2MkQ3NTVENzFCODRGQjRBMDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE1RUE3MTA0MTlGNkRFNzIwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovLAogCQkJCUM0
NzAzQ0Q1MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGluIEhlYWRl
cnMgKi8sCiAJCQkJQTVFQTcxMDUxOUY2REU3NDAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfY29u
ZmlndXJhdGlvbl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLywKQEAgLTYxMjUsNiArNjE0NSw3IEBA
CiAJCQkJMEYzQjNBMjgxNTQ0Qzk5NzAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhh
c2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0E0MjQwMTdBMEJCRkQwMEE4REI4MSAvKiBERkdD
bG9iYmVyaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzdBNDI0MjE3QTBCQkZEMDBBOERCODEg
LyogREZHQ2xvYmJlclNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNjJFQzlCQjcxQjdFQjA3QzAw
MzAzQUQxIC8qIENhbGxGcmFtZVNodWZmbGVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdC
Mjk0RDE0QzNDRDRDMDA3QzNEQjEgLyogREZHQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVBMEEzMjE3MEQ0MEJGMDBCQjcyMkMgLyogREZHQ29tbW9uRGF0YS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYzOEIwMTgxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5LmggaW4g
SGVhZGVycyAqLywKQEAgLTY0NDYsNyArNjQ2Nyw2IEBACiAJCQkJRkVGNjgzNjExNzQzNDNDQzAw
QTMyRTI1IC8qIEpJVFN0dWJzWDg2LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUY2ODM2MDE3NDM0
M0NDMDBBMzJFMjUgLyogSklUU3R1YnNYODZfNjQuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEREIx
RjYzMThENzdEQkUwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0LmggaW4gSGVhZGVycyAqLywKLQkJ
CQk2MjNBMzdFQzFCODdBN0MwMDA3NTQyMDkgLyogUmVnaXN0ZXJNYXAuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3QTRBRTEwMTc5NzNCNEQwMDU2MTJCMSAvKiBKSVRTdHVic1g4NkNvbW1vbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY1RUY5MUYxNjg3OEY3RDAwM0U1QzI1IC8qIEpJVFRodW5rcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDNzEyRTMxN0NEODc5MzAwOENDOTNDIC8qIEpJVFRvREZH
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKQEAgLTc0NzcsNiAr
NzQ5Nyw3IEBACiAJCQkJMEZGMEYxOUQxNkI3MkEwODAwNURGOTVCIC8qIERGR0NvbW1vbi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEzMTE3MEQ0MEJGMDBCQjcyMkMgLyogREZHQ29tbW9u
RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjM4QjAxNzE3Q0ZFNzU1MDBCMTQ0RDMgLyog
REZHQ29tcGlsYXRpb25LZXkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNjJFQzlCQjYxQjdFQjA3
QzAwMzAzQUQxIC8qIENhbGxGcmFtZVNodWZmbGVEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGMzhCMDE5MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTFCOUUyM0IxQjRFMEQ2NzAwQkM3RkVEIC8qIEludGxDb2xsYXRvckNv
bnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGM0IzQTFBMTUzRTY4RjIwMDNFRDBG
RiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc1MzIs
NiArNzU1Myw3IEBACiAJCQkJMEZGMEYxOUMxNkI3MkEwMzAwNURGOTVCIC8qIERGR05vZGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZBNTgxQkExNTBFOTUyQzAwQjlBMkQ5IC8qIERGR05vZGVG
bGFncy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVDOURDRjEzMjhERjgyMDAyQjJBRDcgLyog
REZHT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2MkQ3NTVENjFCODRGQjQ2MDAx
ODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlD
RkQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFNTYxNDFEQUYwODAwMTc5Qzk0IC8qIERGR09TUkVu
dHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDhBMzI1MTdENTFGNTcwMENBMkM0MCAvKiBE
RkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc2NjIs
NiArNzY4NCw3IEBACiAJCQkJN0IwMjQ3NTYxQjg2ODJFMTAwNTQyNDQwIC8qIFdBU01GdW5jdGlv
blBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkYwRjE5RjE2QjcyQTE3MDA1REY5NUIg
LyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MkIzMTBG
RDE5NzRBRTg3MDA4MDg1N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTYyRDc1NUQ1MUI4NEZCNDAwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxl
cjMyXzY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUNDMTA3RUMzNzYwMDQyN0E0OCAv
KiBGdW5jdGlvblByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjY0QjI3MTFBNzg0
QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzY2
RDJGMTVBOERDRTAwMDhGMzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC03Nzg1LDYgKzc4MDgsNyBAQAogCQkJCUE3MjcwMDkwMERBQzZCQkMwMEU1NDhE
NyAvKiBKU05vdEFuT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQ0MTA3RUMz
NzYwMDQyN0E0OCAvKiBKU09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDgyQjdFNDBB
NDMwNzYwMDA1MTdDRkMgLyogSlNPYmplY3RSZWYuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNjJE
NzU1RDQxQjg0RkIzRDAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyNjQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTdGOTkzNjAwRkQ3MzI1MTAwQTBCMkQwIC8qIEpTT05PYmplY3QuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZGQjZDMzgxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTVGNkU2OTUwRTVCNUY5NzAwOTFFODYwIC8qIEpTUHJv
ZmlsZXJQcml2YXRlLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaAkocmV2aXNpb24gMTg5OTAxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NTMsMTEgKzQ1MywxMSBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBBUk1S
ZWdpc3RlcnM6OkZQUXVhZFJlZ2lzdGVySUQgRlBRdWFkUmVnaXN0ZXJJRDsKICAgICB0eXBlZGVm
IEZQRG91YmxlUmVnaXN0ZXJJRCBGUFJlZ2lzdGVySUQ7CiAgICAgCi0gICAgc3RhdGljIFJlZ2lz
dGVySUQgZmlyc3RSZWdpc3RlcigpIHsgcmV0dXJuIEFSTVJlZ2lzdGVyczo6cjA7IH0KLSAgICBz
dGF0aWMgUmVnaXN0ZXJJRCBsYXN0UmVnaXN0ZXIoKSB7IHJldHVybiBBUk1SZWdpc3RlcnM6OnIx
MzsgfQotICAgIAotICAgIHN0YXRpYyBGUFJlZ2lzdGVySUQgZmlyc3RGUFJlZ2lzdGVyKCkgeyBy
ZXR1cm4gQVJNUmVnaXN0ZXJzOjpkMDsgfQotICAgIHN0YXRpYyBGUFJlZ2lzdGVySUQgbGFzdEZQ
UmVnaXN0ZXIoKSB7IHJldHVybiBBUk1SZWdpc3RlcnM6OmQzMTsgfQorICAgIHN0YXRpYyBjb25z
dGV4cHIgUmVnaXN0ZXJJRCBmaXJzdFJlZ2lzdGVyKCkgeyByZXR1cm4gQVJNUmVnaXN0ZXJzOjpy
MDsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBsYXN0UmVnaXN0ZXIoKSB7IHJl
dHVybiBBUk1SZWdpc3RlcnM6OnIxMzsgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciBGUFJlZ2lz
dGVySUQgZmlyc3RGUFJlZ2lzdGVyKCkgeyByZXR1cm4gQVJNUmVnaXN0ZXJzOjpkMDsgfQorICAg
IHN0YXRpYyBjb25zdGV4cHIgRlBSZWdpc3RlcklEIGxhc3RGUFJlZ2lzdGVyKCkgeyByZXR1cm4g
QVJNUmVnaXN0ZXJzOjpkMzE7IH0KIAogICAgIC8vIChIUywgTE8sIEhJLCBMUykgLT4gKEFFLCBC
LCBBLCBCRSkKICAgICAvLyAoVlMsIFZDKSAtPiAoTywgTk8pCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fib3J0UmVhc29uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYm9ydFJlYXNvbi5oCShyZXZpc2lvbiAxODk5MDEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fib3J0UmVhc29uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY0LDYgKzY0LDcgQEAgZW51bSBBYm9ydFJlYXNvbiB7CiAgICAgSklUTm90U3Vw
cG9ydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDI2MCwKICAgICBKSVRP
ZmZzZXRJc05vdE91dE9mTGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMjcwLAogICAg
IEpJVFVuY291Z2h0RXhjZXB0aW9uQWZ0ZXJDYWxsICAgICAgICAgICAgICAgICAgICAgPSAyNzUs
CisgICAgSklUVW5leHBlY3RlZENhbGxGcmFtZVNpemUgICAgICAgICAgICAgICAgICAgICAgICA9
IDI3NywKICAgICBKSVRVbnJlYXNvbmFibGVMb29wSGludEp1bXBUYXJnZXQgICAgICAgICAgICAg
ICAgID0gMjgwLAogICAgIFJQV1VucmVhc29uYWJsZUp1bXBUYXJnZXQgICAgICAgICAgICAgICAg
ICAgICAgICAgPSAyOTAsCiAgICAgUmVwYXRjaEluZWZmZWN0aXZlV2F0Y2hwb2ludCAgICAgICAg
ICAgICAgICAgICAgICA9IDMwMCwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDE4OTkwMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsNyBAQAogI2lmbmRlZiBDYWxsTGlua0luZm9faAogI2RlZmluZSBDYWxsTGlua0luZm9faAog
CisjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaCIKICNpbmNsdWRlICJDYWxsTW9kZS5o
IgogI2luY2x1ZGUgIkNvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIkNvZGVTcGVjaWFsaXphdGlv
bktpbmQuaCIKQEAgLTMzOCw2ICszMzksMTYgQEAgcHVibGljOgogCiAgICAgdm9pZCB2aXNpdFdl
YWsoVk0mKTsKIAorICAgIHZvaWQgc2V0RnJhbWVTaHVmZmxlRGF0YShjb25zdCBDYWxsRnJhbWVT
aHVmZmxlRGF0YSYgc2h1ZmZsZURhdGEpCisgICAgeworICAgICAgICBtX2ZyYW1lU2h1ZmZsZURh
dGEgPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPihzaHVmZmxlRGF0YSk7
CisgICAgfQorCisgICAgY29uc3QgQ2FsbEZyYW1lU2h1ZmZsZURhdGEqIGZyYW1lU2h1ZmZsZURh
dGEoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZnJhbWVTaHVmZmxlRGF0YS5nZXQoKTsKKyAg
ICB9CisKIHByaXZhdGU6CiAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgbV9jYWxsUmV0dXJuTG9j
YXRpb247CiAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIG1faG90UGF0aEJlZ2luOwpAQCAt
MzQ2LDYgKzM1Nyw3IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+IG1f
bGFzdFNlZW5DYWxsZWU7CiAgICAgUmVmUHRyPFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lPiBt
X3N0dWI7CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3Nsb3dTdHViOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gbV9mcmFtZVNodWZmbGVEYXRhOwogICAg
IHVuc2lnbmVkIG1fcmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIDogMTsgLy8gUmVhbCB0eXBlIGlz
IFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZQogICAgIGJvb2wgbV9oYXNTZWVuU2hvdWxkUmVwYXRj
aCA6IDE7CiAgICAgYm9vbCBtX2hhc1NlZW5DbG9zdXJlIDogMTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAkocmV2aXNpb24gMTg5OTAx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lmIEVOQUJMRShKSVQpCiAjaW5jbHVkZSAi
R1BSSW5mby5oIgogI2luY2x1ZGUgIkZQUkluZm8uaCIKKyNpbmNsdWRlICJSZWcuaCIKICNlbmRp
ZgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgpA
QCAtODMsNiArODQsMTggQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7
IHJldHVybiBtX3RlY2huaXF1ZSAhPSBEb250S25vdzsgfQogICAgIGJvb2wgb3BlcmF0b3IhKCkg
Y29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KKworI2lmIEVOQUJMRShKSVQpCisgICAgc3RhdGlj
IFZhbHVlUmVjb3ZlcnkgaW5SZWdpc3RlcihSZWcgcmVnLCBEYXRhRm9ybWF0IGRhdGFGb3JtYXQp
CisgICAgeworICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAgICAgICAgICByZXR1cm4gaW5H
UFIocmVnLmdwcigpLCBkYXRhRm9ybWF0KTsKKworICAgICAgICBBU1NFUlQocmVnLmlzRlBSKCkp
OworICAgICAgICByZXR1cm4gaW5GUFIocmVnLmZwcigpLCBkYXRhRm9ybWF0KTsKKyAgICB9Cisj
ZW5kaWYKKwogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBpc1Nl
dCgpOyB9CiAgICAgCiAgICAgc3RhdGljIFZhbHVlUmVjb3ZlcnkgaW5HUFIoTWFjcm9Bc3NlbWJs
ZXI6OlJlZ2lzdGVySUQgZ3ByLCBEYXRhRm9ybWF0IGRhdGFGb3JtYXQpCkBAIC0zMDAsNiArMzEz
LDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBtX3RlY2huaXF1ZSA9PSBJblBh
aXI7CiAgICAgfQorCisgICAgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKGlzSW5KU1ZhbHVlUmVncygpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWVSZWdzKHRhZ0dQUigpLCBwYXlsb2FkR1BSKCkpOworICAgIH0KICNlbHNlCiAgICAgYm9vbCBp
c0luSlNWYWx1ZVJlZ3MoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgJKHJldmlzaW9uIDE4OTkwMSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAkod29ya2luZyBjb3B5KQpA
QCAtMzc4LDYgKzM3OCwyOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3VzZUNvdW50Owog
ICAgIH0KIAorICAgIFZhbHVlUmVjb3ZlcnkgcmVjb3ZlcnkoVmlydHVhbFJlZ2lzdGVyIHNwaWxs
U2xvdCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2lzQ29uc3RhbnQpCisgICAgICAgICAg
ICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQobV9ub2RlLT5jb25zdGFudCgpLT52YWx1
ZSgpKTsKKworICAgICAgICBpZiAobV9yZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0RG91Ymxl
KQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmluRlBSKHUuZnByLCBEYXRhRm9y
bWF0RG91YmxlKTsKKworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIGlmIChtX3JlZ2lz
dGVyRm9ybWF0ICYgRGF0YUZvcm1hdEpTKSB7CisgICAgICAgICAgICBpZiAobV9yZWdpc3RlckZv
cm1hdCA9PSBEYXRhRm9ybWF0SlMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zl
cnk6OmluUGFpcih1LnYudGFnR1BSLCB1LnYucGF5bG9hZEdQUik7CisgICAgICAgICAgICByZXR1
cm4gVmFsdWVSZWNvdmVyeTo6aW5HUFIodS52LnBheWxvYWRHUFIsIHN0YXRpY19jYXN0PERhdGFG
b3JtYXQ+KG1fcmVnaXN0ZXJGb3JtYXQgJiB+RGF0YUZvcm1hdEpTKSk7CisgICAgICAgIH0KKyNl
bmRpZgorICAgICAgICBpZiAobV9yZWdpc3RlckZvcm1hdCkKKyAgICAgICAgICAgIHJldHVybiBW
YWx1ZVJlY292ZXJ5OjppbkdQUih1LmdwciwgbV9yZWdpc3RlckZvcm1hdCk7CisKKyAgICAgICAg
QVNTRVJUKG1fc3BpbGxGb3JtYXQpOworCisgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpk
aXNwbGFjZWRJbkpTU3RhY2soc3BpbGxTbG90LCBtX3NwaWxsRm9ybWF0KTsKKyAgICB9CisKIHBy
aXZhdGU6CiAgICAgdm9pZCBhcHBlbmRCaXJ0aChWYXJpYWJsZUV2ZW50U3RyZWFtJiBzdHJlYW0p
CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxl
RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJh
bWVTaHVmZmxlRGF0YS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlRGF0YS5oIgorCisjaWYg
RU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisKK3ZvaWQg
Q2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxvY2sq
IGNvZGVCbG9jaykKK3sKKyAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlUmVnaXN0ZXJzIHsgUmVn
aXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVycygpIH07CisgICAgUmVnaXN0ZXJBdE9mZnNl
dExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucyA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lz
dGVycygpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWdpc3RlclNhdmVMb2NhdGlv
bnMtPnNpemUoKTsgKytpKSB7CisgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgeyByZWdp
c3RlclNhdmVMb2NhdGlvbnMtPmF0KGkpIH07CisgICAgICAgIGlmICghY2FsbGVlU2F2ZVJlZ2lz
dGVycy5nZXQoZW50cnkucmVnKCkpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIHNhdmVTbG90IHsgZW50cnkub2Zmc2V0QXNJbmRleCgpIH07CisgICAg
ICAgIHJlZ2lzdGVyc1tlbnRyeS5yZWcoKV0KKyAgICAgICAgICAgID0gVmFsdWVSZWNvdmVyeTo6
ZGlzcGxhY2VkSW5KU1N0YWNrKHNhdmVTbG90LCBEYXRhRm9ybWF0SlMpOworICAgIH0KKworICAg
IGZvciAoUmVnIHJlZyA9IFJlZzo6Zmlyc3QoKTsgcmVnIDw9IFJlZzo6bGFzdCgpOyByZWcgPSBy
ZWcubmV4dCgpKSB7CisgICAgICAgIGlmICghY2FsbGVlU2F2ZVJlZ2lzdGVycy5nZXQocmVnKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChyZWdpc3RlcnNbcmVnXSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHJlZ2lzdGVyc1tyZWddID0gVmFsdWVSZWNv
dmVyeTo6aW5SZWdpc3RlcihyZWcsIERhdGFGb3JtYXRKUyk7CisgICAgfQorfQorCisjZW5kaWYg
Ly8gVVNFKEpTVkFMVUU2NCkKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFC
TEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxl
RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1l
U2h1ZmZsZURhdGEuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
Q2FsbEZyYW1lU2h1ZmZsZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQ2Fs
bEZyYW1lU2h1ZmZsZURhdGFfaAorI2RlZmluZSBDYWxsRnJhbWVTaHVmZmxlRGF0YV9oCisKKyNp
ZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiUmVnaXN0ZXJNYXAuaCIKKyNpbmNsdWRlICJWYWx1
ZVJlY292ZXJ5LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgQ2FsbEZyYW1lU2h1ZmZs
ZURhdGEgeworICAgIHVuc2lnbmVkIG51bUxvY2FsczsKKyAgICBWYWx1ZVJlY292ZXJ5IGNhbGxl
ZTsKKyAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeT4gYXJnczsKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgIFJlZ2lzdGVyTWFwPFZhbHVlUmVjb3Zlcnk+IHJlZ2lzdGVyczsKKworICAgIHZvaWQgc2V0
dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKENvZGVCbG9jayopOworI2VuZGlmCit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyNlbmRpZiAvLyBDYWxsRnJh
bWVTaHVmZmxlRGF0YV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFt
ZVNodWZmbGVyMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVy
LmgiCisKKyNpZiBFTkFCTEUoSklUKSAmJiBVU0UoSlNWQUxVRTMyXzY0KQorCisjaW5jbHVkZSAi
Q0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiRGF0YUZvcm1hdC5oIgorI2luY2x1ZGUgIkpTQ0pT
VmFsdWVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitEYXRhRm9ybWF0IENhbGxGcmFt
ZVNodWZmbGVyOjplbWl0U3RvcmUoQ2FjaGVkUmVjb3ZlcnkmIGxvY2F0aW9uLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyBhZGRyZXNzKQoreworICAgIEFTU0VSVCghbG9jYXRpb24ucmVjb3Zlcnko
KS5pc0luSlNTdGFjaygpKTsKKworICAgIHN3aXRjaCAobG9jYXRpb24ucmVjb3ZlcnkoKS50ZWNo
bmlxdWUoKSkgeworICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CisgICAgICAgIG1faml0LnN0
b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksCisg
ICAgICAgICAgICBhZGRyZXNzLndpdGhPZmZzZXQoVGFnT2Zmc2V0KSk7CisgICAgICAgIG1faml0
LnN0b3JlMzIobG9jYXRpb24ucmVjb3ZlcnkoKS5ncHIoKSwgYWRkcmVzcy53aXRoT2Zmc2V0KFBh
eWxvYWRPZmZzZXQpKTsKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRJbnQzMjsKKyAgICBjYXNl
IFVuYm94ZWRDZWxsSW5HUFI6CisgICAgICAgIG1faml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwKKyAgICAgICAgICAgIGFkZHJlc3Mud2l0
aE9mZnNldChUYWdPZmZzZXQpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihsb2NhdGlvbi5yZWNv
dmVyeSgpLmdwcigpLCBhZGRyZXNzLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCkpOworICAgICAg
ICByZXR1cm4gRGF0YUZvcm1hdENlbGw7CisgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgbV9q
aXQuc3RvcmVUcnVzdGVkVmFsdWUobG9jYXRpb24ucmVjb3ZlcnkoKS5jb25zdGFudCgpLCBhZGRy
ZXNzKTsKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRKUzsKKyAgICBjYXNlIEluUGFpcjoKKyAg
ICAgICAgbV9qaXQuc3RvcmVWYWx1ZShsb2NhdGlvbi5yZWNvdmVyeSgpLmpzVmFsdWVSZWdzKCks
IGFkZHJlc3MpOworICAgICAgICByZXR1cm4gRGF0YUZvcm1hdEpTOworICAgIGNhc2UgVW5ib3hl
ZEJvb2xlYW5JbkdQUjoKKyAgICAgICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpLAorICAgICAgICAgICAgYWRkcmVzcy53aXRo
T2Zmc2V0KFRhZ09mZnNldCkpOworICAgICAgICBtX2ppdC5zdG9yZTMyKGxvY2F0aW9uLnJlY292
ZXJ5KCkuZ3ByKCksIGFkZHJlc3Mud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KSk7CisgICAgICAg
IHJldHVybiBEYXRhRm9ybWF0Qm9vbGVhbjsKKyAgICBjYXNlIEluRlBSOgorICAgIGNhc2UgVW5i
b3hlZERvdWJsZUluRlBSOgorICAgICAgICBtX2ppdC5zdG9yZURvdWJsZShsb2NhdGlvbi5yZWNv
dmVyeSgpLmZwcigpLCBhZGRyZXNzKTsKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRKUzsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
K30KKwordm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6ZW1pdEJveChDYWNoZWRSZWNvdmVyeSYgbG9j
YXRpb24pCit7CisgICAgLy8gTm90aGluZyB0byBkbywgd2UncmUgZ29vZCEgSlNWYWx1ZXMgYW5k
IGRvdWJsZXMgY2FuIGJlIHN0b3JlZAorICAgIC8vIGltbWVkaWF0ZWx5LCBhbmQgb3RoZXIgZm9y
bWF0cyBkb24ndCBuZWVkIGFueSB0cmFuc2Zvcm1hdGlvbiAtCisgICAgLy8ganVzdCBzdG9yaW5n
IGEgY29uc3RhbnQgdGFnIHNlcGFyYXRlbHkuCisgICAgQVNTRVJUX1VOVVNFRChsb2NhdGlvbiwg
Y2FuQm94KGxvY2F0aW9uKSk7Cit9CisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXRMb2Fk
KENhY2hlZFJlY292ZXJ5JiBsb2NhdGlvbikKK3sKKyAgICBpZiAoIWxvY2F0aW9uLnJlY292ZXJ5
KCkuaXNJbkpTU3RhY2soKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgIGRhdGFMb2coIiAgICogTG9hZGluZyAiLCBsb2NhdGlvbi5yZWNvdmVyeSgpLCAiIGlu
dG8gIik7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyB7IGxvY2F0aW9uLnJlY292ZXJ5KCkudmly
dHVhbFJlZ2lzdGVyKCkgfTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBhZGRyZXNzIHsg
YWRkcmVzc0Zvck9sZChyZWcpIH07CisKKyAgICBib29sIHRyeUZQUiB7IHRydWUgfTsKKyAgICBK
U1ZhbHVlUmVncyB3YW50ZWRKU1ZhbHVlUmVncyB7IGxvY2F0aW9uLndhbnRlZEpTVmFsdWVSZWdz
KCkgfTsKKyAgICBpZiAod2FudGVkSlNWYWx1ZVJlZ3MpIHsKKyAgICAgICAgaWYgKHdhbnRlZEpT
VmFsdWVSZWdzLnBheWxvYWRHUFIoKSAhPSBJbnZhbGlkR1BSUmVnCisgICAgICAgICAgICAmJiAh
bV9yZWdpc3RlcnNbd2FudGVkSlNWYWx1ZVJlZ3MucGF5bG9hZEdQUigpXQorICAgICAgICAgICAg
JiYgIW1fbG9ja2VkUmVnaXN0ZXJzLmdldCh3YW50ZWRKU1ZhbHVlUmVncy5wYXlsb2FkR1BSKCkp
KQorICAgICAgICAgICAgdHJ5RlBSID0gZmFsc2U7CisgICAgICAgIGlmICh3YW50ZWRKU1ZhbHVl
UmVncy50YWdHUFIoKSAhPSBJbnZhbGlkR1BSUmVnCisgICAgICAgICAgICAmJiAhbV9yZWdpc3Rl
cnNbd2FudGVkSlNWYWx1ZVJlZ3MudGFnR1BSKCldCisgICAgICAgICAgICAmJiAhbV9sb2NrZWRS
ZWdpc3RlcnMuZ2V0KHdhbnRlZEpTVmFsdWVSZWdzLnRhZ0dQUigpKSkKKyAgICAgICAgICAgIHRy
eUZQUiA9IGZhbHNlOworICAgIH0KKworICAgIGlmICh0cnlGUFIgJiYgbG9jYXRpb24ubG9hZHNJ
bnRvRlBSKCkpIHsKKyAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IGxvY2F0aW9uLndhbnRlZEZQ
UigpOworICAgICAgICBpZiAocmVzdWx0RlBSID09IEludmFsaWRGUFJSZWcgfHwgbV9yZWdpc3Rl
cnNbcmVzdWx0RlBSXSB8fCBtX2xvY2tlZFJlZ2lzdGVycy5nZXQocmVzdWx0RlBSKSkKKyAgICAg
ICAgICAgIHJlc3VsdEZQUiA9IGdldEZyZWVGUFIoKTsKKyAgICAgICAgaWYgKHJlc3VsdEZQUiAh
PSBJbnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKGFkZHJlc3Ms
IHJlc3VsdEZQUik7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGRhdGFGb3JtYXQgPSBEYXRhRm9y
bWF0SlM7CisgICAgICAgICAgICBpZiAobG9jYXRpb24ucmVjb3ZlcnkoKS5kYXRhRm9ybWF0KCkg
PT0gRGF0YUZvcm1hdERvdWJsZSkKKyAgICAgICAgICAgICAgICBkYXRhRm9ybWF0ID0gRGF0YUZv
cm1hdERvdWJsZTsKKyAgICAgICAgICAgIHVwZGF0ZVJlY292ZXJ5KGxvY2F0aW9uLCAKKyAgICAg
ICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkZQUihyZXN1bHRGUFIsIGRhdGFGb3JtYXQpKTsK
KyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2cobG9jYXRp
b24ucmVjb3ZlcnkoKSwgIlxuIik7CisgICAgICAgICAgICBpZiAocmVnID09IG5ld0FzT2xkKGRh
bmdlckZyb250aWVyKCkpKQorICAgICAgICAgICAgICAgIHVwZGF0ZURhbmdlckZyb250aWVyKCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobG9jYXRp
b24ubG9hZHNJbnRvR1BSKCkpIHsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiB7IHdhbnRlZEpT
VmFsdWVSZWdzLnBheWxvYWRHUFIoKSB9OworICAgICAgICBpZiAocmVzdWx0R1BSID09IEludmFs
aWRHUFJSZWcgfHwgbV9yZWdpc3RlcnNbcmVzdWx0R1BSXSB8fCBtX2xvY2tlZFJlZ2lzdGVycy5n
ZXQocmVzdWx0R1BSKSkKKyAgICAgICAgICAgIHJlc3VsdEdQUiA9IGdldEZyZWVHUFIoKTsKKyAg
ICAgICAgQVNTRVJUKHJlc3VsdEdQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgbV9qaXQu
bG9hZFB0cihhZGRyZXNzLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCksIHJlc3VsdEdQUik7Cisg
ICAgICAgIHVwZGF0ZVJlY292ZXJ5KGxvY2F0aW9uLCAKKyAgICAgICAgICAgIFZhbHVlUmVjb3Zl
cnk6OmluR1BSKHJlc3VsdEdQUiwgbG9jYXRpb24ucmVjb3ZlcnkoKS5kYXRhRm9ybWF0KCkpKTsK
KyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKGxvY2F0aW9uLnJlY292
ZXJ5KCksICJcbiIpOworICAgICAgICBpZiAocmVnID09IG5ld0FzT2xkKGRhbmdlckZyb250aWVy
KCkpKQorICAgICAgICAgICAgdXBkYXRlRGFuZ2VyRnJvbnRpZXIoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEFTU0VSVChsb2NhdGlvbi5yZWNvdmVyeSgpLnRlY2huaXF1ZSgpID09
IERpc3BsYWNlZEluSlNTdGFjayk7CisgICAgR1BSUmVnIHBheWxvYWRHUFIgeyB3YW50ZWRKU1Zh
bHVlUmVncy5wYXlsb2FkR1BSKCkgfTsKKyAgICBHUFJSZWcgdGFnR1BSIHsgd2FudGVkSlNWYWx1
ZVJlZ3MudGFnR1BSKCkgfTsKKyAgICBpZiAocGF5bG9hZEdQUiA9PSBJbnZhbGlkR1BSUmVnIHx8
IG1fcmVnaXN0ZXJzW3BheWxvYWRHUFJdIHx8IG1fbG9ja2VkUmVnaXN0ZXJzLmdldChwYXlsb2Fk
R1BSKSkKKyAgICAgICAgcGF5bG9hZEdQUiA9IGdldEZyZWVHUFIoKTsKKyAgICBtX2xvY2tlZFJl
Z2lzdGVycy5zZXQocGF5bG9hZEdQUik7CisgICAgaWYgKHRhZ0dQUiA9PSBJbnZhbGlkR1BSUmVn
IHx8IG1fcmVnaXN0ZXJzW3RhZ0dQUl0gfHwgbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHRhZ0dQUikp
CisgICAgICAgIHRhZ0dQUiA9IGdldEZyZWVHUFIoKTsKKyAgICBtX2xvY2tlZFJlZ2lzdGVycy5j
bGVhcihwYXlsb2FkR1BSKTsKKyAgICBBU1NFUlQocGF5bG9hZEdQUiAhPSBJbnZhbGlkR1BSUmVn
ICYmIHRhZ0dQUiAhPSBJbnZhbGlkR1BSUmVnICYmIHRhZ0dQUiAhPSBwYXlsb2FkR1BSKTsKKyAg
ICBtX2ppdC5sb2FkUHRyKGFkZHJlc3Mud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KSwgcGF5bG9h
ZEdQUik7CisgICAgbV9qaXQubG9hZFB0cihhZGRyZXNzLndpdGhPZmZzZXQoVGFnT2Zmc2V0KSwg
dGFnR1BSKTsKKyAgICB1cGRhdGVSZWNvdmVyeShsb2NhdGlvbiwgCisgICAgICAgIFZhbHVlUmVj
b3Zlcnk6OmluUGFpcih0YWdHUFIsIHBheWxvYWRHUFIpKTsKKyAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgZGF0YUxvZyhsb2NhdGlvbi5yZWNvdmVyeSgpLCAiXG4iKTsKKyAgICBpZiAocmVnID09
IG5ld0FzT2xkKGRhbmdlckZyb250aWVyKCkpKQorICAgICAgICB1cGRhdGVEYW5nZXJGcm9udGll
cigpOworfQorCitib29sIENhbGxGcmFtZVNodWZmbGVyOjpjYW5Mb2FkKENhY2hlZFJlY292ZXJ5
JiBsb2NhdGlvbikKK3sKKyAgICBpZiAoIWxvY2F0aW9uLnJlY292ZXJ5KCkuaXNJbkpTU3RhY2so
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAobG9jYXRpb24ubG9hZHNJbnRvRlBS
KCkgJiYgZ2V0RnJlZUZQUigpICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgaWYgKGxvY2F0aW9uLmxvYWRzSW50b0dQUigpICYmIGdldEZyZWVHUFIoKSAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChsb2NhdGlvbi5y
ZWNvdmVyeSgpLnRlY2huaXF1ZSgpID09IERpc3BsYWNlZEluSlNTdGFjaykgeworICAgICAgICBH
UFJSZWcgcGF5bG9hZEdQUiB7IGdldEZyZWVHUFIoKSB9OworICAgICAgICBpZiAocGF5bG9hZEdQ
UiA9PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBt
X2xvY2tlZFJlZ2lzdGVycy5zZXQocGF5bG9hZEdQUik7CisgICAgICAgIEdQUlJlZyB0YWdHUFIg
eyBnZXRGcmVlR1BSKCkgfTsKKyAgICAgICAgbV9sb2NrZWRSZWdpc3RlcnMuY2xlYXIocGF5bG9h
ZEdQUik7CisgICAgICAgIHJldHVybiB0YWdHUFIgIT0gSW52YWxpZEdQUlJlZzsKKyAgICB9CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFdlIHByZWZlciBsb2FkaW5nIGRvdWJsZXMgYW5k
IHVuZGV0ZXJtaW5lZCBKU1ZhbHVlcyBpbnRvIEZQUnMKKy8vIGJlY2F1c2UgaXQgd291bGQgb3Ro
ZXJ3aXNlIHVzZSB1cCB0d28gR1BScy4KK2Jvb2wgQ2FjaGVkUmVjb3Zlcnk6OmxvYWRzSW50b0ZQ
UigpIGNvbnN0Cit7CisgICAgc3dpdGNoIChyZWNvdmVyeSgpLnRlY2huaXF1ZSgpKSB7CisgICAg
Y2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3Rh
Y2s6CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKworLy8gSW50ZWdlcnMsIGJvb2xlYW5zIGFuZCBjZWxscyBjYW4g
YmUgbG9hZGVkIGludG8gYSBzaW5nbGUgR1BSCitib29sIENhY2hlZFJlY292ZXJ5Ojpsb2Fkc0lu
dG9HUFIoKSBjb25zdAoreworICAgIHN3aXRjaCAocmVjb3ZlcnkoKS50ZWNobmlxdWUoKSkgewor
ICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgY2FzZSBCb29sZWFuRGlzcGxh
Y2VkSW5KU1N0YWNrOgorICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVyOjplbWl0RGlzcGxhY2UoQ2FjaGVkUmVjb3Zl
cnkmIGxvY2F0aW9uKQoreworICAgIEFTU0VSVChsb2NhdGlvbi5yZWNvdmVyeSgpLmlzSW5SZWdp
c3RlcnMoKSk7CisgICAgSlNWYWx1ZVJlZ3Mgd2FudGVkSlNWYWx1ZVJlZ3MgeyBsb2NhdGlvbi53
YW50ZWRKU1ZhbHVlUmVncygpIH07CisgICAgQVNTRVJUKHdhbnRlZEpTVmFsdWVSZWdzKTsgLy8g
V2UgZG9uJ3Qgc3VwcG9ydCB3YW50ZWQgRlBScyBvbiAzMmJpdCBwbGF0Zm9ybXMKKworICAgIEdQ
UlJlZyB3YW50ZWRUYWdHUFIgeyB3YW50ZWRKU1ZhbHVlUmVncy50YWdHUFIoKSB9OworICAgIEdQ
UlJlZyB3YW50ZWRQYXlsb2FkR1BSIHsgd2FudGVkSlNWYWx1ZVJlZ3MucGF5bG9hZEdQUigpIH07
CisgICAgCisgICAgaWYgKHdhbnRlZFRhZ0dQUiAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAg
IEFTU0VSVCghbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHdhbnRlZFRhZ0dQUikpOworICAgICAgICBp
ZiAoQ2FjaGVkUmVjb3ZlcnkqIGN1cnJlbnRUYWcgeyBtX3JlZ2lzdGVyc1t3YW50ZWRUYWdHUFJd
IH0pIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50VGFnID09ICZsb2NhdGlvbikgeworICAgICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAr
ICIsIHdhbnRlZFRhZ0dQUiwgIiBpcyBPS1xuIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIC8vIFRoaXMgY2FuIG5ldmVyIGhhcHBlbiBvbiAzMmJpdCBwbGF0Zm9ybXMg
c2luY2Ugd2UKKyAgICAgICAgICAgICAgICAvLyBoYXZlIGF0IG1vc3Qgb25lIHdhbnRlZCBKU1Zh
bHVlUmVncywgZm9yIHRoZQorICAgICAgICAgICAgICAgIC8vIGNhbGxlZSwgYW5kIG5vIGNhbGxl
ZS1zYXZlIHJlZ2lzdGVycy4KKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHdhbnRl
ZFBheWxvYWRHUFIgIT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICBBU1NFUlQoIW1fbG9ja2Vk
UmVnaXN0ZXJzLmdldCh3YW50ZWRQYXlsb2FkR1BSKSk7CisgICAgICAgIGlmIChDYWNoZWRSZWNv
dmVyeSogY3VycmVudFBheWxvYWQgeyBtX3JlZ2lzdGVyc1t3YW50ZWRQYXlsb2FkR1BSXSB9KSB7
CisgICAgICAgICAgICBpZiAoY3VycmVudFBheWxvYWQgPT0gJmxvY2F0aW9uKSB7CisgICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICsg
Iiwgd2FudGVkUGF5bG9hZEdQUiwgIiBpcyBPS1xuIik7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIC8vIFNlZSBhYm92ZQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAobG9jYXRpb24ucmVjb3ZlcnkoKS50ZWNobmlxdWUoKSA9PSBJblBhaXIKKyAgICAgICAg
fHwgbG9jYXRpb24ucmVjb3ZlcnkoKS5pc0luR1BSKCkpIHsKKyAgICAgICAgR1BSUmVnIHBheWxv
YWRHUFI7CisgICAgICAgIGlmIChsb2NhdGlvbi5yZWNvdmVyeSgpLnRlY2huaXF1ZSgpID09IElu
UGFpcikKKyAgICAgICAgICAgIHBheWxvYWRHUFIgPSBsb2NhdGlvbi5yZWNvdmVyeSgpLnBheWxv
YWRHUFIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGF5bG9hZEdQUiA9IGxvY2F0aW9u
LnJlY292ZXJ5KCkuZ3ByKCk7CisKKyAgICAgICAgaWYgKHdhbnRlZFBheWxvYWRHUFIgPT0gSW52
YWxpZEdQUlJlZykKKyAgICAgICAgICAgIHdhbnRlZFBheWxvYWRHUFIgPSBwYXlsb2FkR1BSOwor
CisgICAgICAgIGlmIChwYXlsb2FkR1BSICE9IHdhbnRlZFBheWxvYWRHUFIpIHsKKyAgICAgICAg
ICAgIGlmIChsb2NhdGlvbi5yZWNvdmVyeSgpLnRlY2huaXF1ZSgpID09IEluUGFpcgorICAgICAg
ICAgICAgICAgICYmIHdhbnRlZFBheWxvYWRHUFIgPT0gbG9jYXRpb24ucmVjb3ZlcnkoKS50YWdH
UFIoKSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIgICAqIFN3YXBwaW5nICIsIHBheWxvYWRHUFIsICIgYW5kICIsIHdhbnRlZFBh
eWxvYWRHUFIsICJcbiIpOworICAgICAgICAgICAgICAgIG1faml0LnN3YXAocGF5bG9hZEdQUiwg
d2FudGVkUGF5bG9hZEdQUik7CisgICAgICAgICAgICAgICAgdXBkYXRlUmVjb3ZlcnkobG9jYXRp
b24sIAorICAgICAgICAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjppblBhaXIocGF5bG9hZEdQ
Uiwgd2FudGVkUGF5bG9hZEdQUikpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgKiBNb3Zp
bmcgIiwgcGF5bG9hZEdQUiwgIiBpbnRvICIsIHdhbnRlZFBheWxvYWRHUFIsICJcbiIpOworICAg
ICAgICAgICAgICAgIG1faml0Lm1vdmUocGF5bG9hZEdQUiwgd2FudGVkUGF5bG9hZEdQUik7Cisg
ICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uLnJlY292ZXJ5KCkudGVjaG5pcXVlKCkgPT0gSW5Q
YWlyKSB7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVJlY292ZXJ5KGxvY2F0aW9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5QYWlyKGxvY2F0aW9uLnJlY292
ZXJ5KCkudGFnR1BSKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FudGVkUGF5bG9h
ZEdQUikpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHVw
ZGF0ZVJlY292ZXJ5KGxvY2F0aW9uLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlUmVj
b3Zlcnk6OmluR1BSKHdhbnRlZFBheWxvYWRHUFIsIGxvY2F0aW9uLnJlY292ZXJ5KCkuZGF0YUZv
cm1hdCgpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgaWYgKHdhbnRlZFRhZ0dQUiA9PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAg
d2FudGVkVGFnR1BSID0gZ2V0RnJlZUdQUigpOworICAgICAgICBzd2l0Y2ggKGxvY2F0aW9uLnJl
Y292ZXJ5KCkuZGF0YUZvcm1hdCgpKSB7CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEludDMyOgor
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgKiBN
b3ZpbmcgaW50MzIgdGFnIGludG8gIiwgd2FudGVkVGFnR1BSLCAiXG4iKTsKKyAgICAgICAgICAg
IG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRh
ZyksCisgICAgICAgICAgICAgICAgd2FudGVkVGFnR1BSKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgKiBNb3ZpbmcgY2VsbCB0YWcgaW50byAiLCB3YW50
ZWRUYWdHUFIsICJcbiIpOworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLAorICAgICAgICAgICAgICAgIHdhbnRlZFRh
Z0dQUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVh
bjoKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
ICogTW92aW5nIGJvb2xlYW4gdGFnIGludG8gIiwgd2FudGVkVGFnR1BSLCAiXG4iKTsKKyAgICAg
ICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpC
b29sZWFuVGFnKSwKKyAgICAgICAgICAgICAgICB3YW50ZWRUYWdHUFIpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEpTOgorICAgICAgICAgICAgQVNTRVJUKHdh
bnRlZFRhZ0dQUiAhPSBsb2NhdGlvbi5yZWNvdmVyeSgpLnBheWxvYWRHUFIoKSk7CisgICAgICAg
ICAgICBpZiAod2FudGVkVGFnR1BSICE9IGxvY2F0aW9uLnJlY292ZXJ5KCkudGFnR1BSKCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiICAgKiBNb3ZpbmcgIiwgbG9jYXRpb24ucmVjb3ZlcnkoKS50YWdHUFIoKSwgIiBpbnRvICIs
IHdhbnRlZFRhZ0dQUiwgIlxuIik7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShsb2NhdGlv
bi5yZWNvdmVyeSgpLnRhZ0dQUigpLCB3YW50ZWRUYWdHUFIpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBB
U1NFUlQobG9jYXRpb24ucmVjb3ZlcnkoKS5pc0luRlBSKCkpOworICAgICAgICBpZiAod2FudGVk
VGFnR1BSID09IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgICAgIEFTU0VSVCh3YW50ZWRQYXls
b2FkR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgICAgICAgICAgbV9sb2NrZWRSZWdpc3RlcnMu
c2V0KHdhbnRlZFBheWxvYWRHUFIpOworICAgICAgICAgICAgd2FudGVkVGFnR1BSID0gZ2V0RnJl
ZUdQUigpOworICAgICAgICAgICAgbV9sb2NrZWRSZWdpc3RlcnMuY2xlYXIod2FudGVkUGF5bG9h
ZEdQUik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHdhbnRlZFBheWxvYWRHUFIgPT0gSW52YWxp
ZEdQUlJlZykgeworICAgICAgICAgICAgbV9sb2NrZWRSZWdpc3RlcnMuc2V0KHdhbnRlZFRhZ0dQ
Uik7CisgICAgICAgICAgICB3YW50ZWRQYXlsb2FkR1BSID0gZ2V0RnJlZUdQUigpOworICAgICAg
ICAgICAgbV9sb2NrZWRSZWdpc3RlcnMuY2xlYXIod2FudGVkVGFnR1BSKTsKKyAgICAgICAgfQor
ICAgICAgICBtX2ppdC5ib3hEb3VibGUobG9jYXRpb24ucmVjb3ZlcnkoKS5mcHIoKSwgd2FudGVk
VGFnR1BSLCB3YW50ZWRQYXlsb2FkR1BSKTsKKyAgICB9CisgICAgdXBkYXRlUmVjb3ZlcnkobG9j
YXRpb24sIFZhbHVlUmVjb3Zlcnk6OmluUGFpcih3YW50ZWRUYWdHUFIsIHdhbnRlZFBheWxvYWRH
UFIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKSAm
JiBVU0UoSlNWQUxVRTMyXzY0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxs
RnJhbWVTaHVmZmxlcjY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NhbGxGcmFtZVNodWZmbGVyNjQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlcjY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDM3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZXIuaCIK
KworI2lmIEVOQUJMRShKSVQpICYmIFVTRShKU1ZBTFVFNjQpCisKKyNpbmNsdWRlICJDQ2FsbEhl
bHBlcnMuaCIKKyNpbmNsdWRlICJEYXRhRm9ybWF0LmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZUlu
bGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0RhdGFGb3JtYXQgQ2FsbEZyYW1lU2h1ZmZs
ZXI6OmVtaXRTdG9yZSgKKyAgICBDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3ZlcnksIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzIGFkZHJlc3MpCit7CisgICAgQVNTRVJUKCFjYWNoZWRSZWNvdmVy
eS5yZWNvdmVyeSgpLmlzSW5KU1N0YWNrKCkpOworCisgICAgc3dpdGNoIChjYWNoZWRSZWNvdmVy
eS5yZWNvdmVyeSgpLnRlY2huaXF1ZSgpKSB7CisgICAgY2FzZSBJbkdQUjoKKyAgICAgICAgbV9q
aXQuc3RvcmVQdHIoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSwgYWRkcmVzcyk7Cisg
ICAgICAgIHJldHVybiBEYXRhRm9ybWF0SlM7CisgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoK
KyAgICAgICAgbV9qaXQuc3RvcmUzMihjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpLCBh
ZGRyZXNzLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCkpOworICAgICAgICByZXR1cm4gRGF0YUZv
cm1hdEludDMyOworICAgIGNhc2UgVW5ib3hlZEludDUySW5HUFI6CisgICAgICAgIG1faml0LnJz
aGlmdDY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6aW50NTJTaGlmdEFt
b3VudCksCisgICAgICAgICAgICBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpKTsKKyAg
ICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBVbmJveGVkU3RyaWN0SW50NTJJbkdQUjoKKyAg
ICAgICAgbV9qaXQuc3RvcmVQdHIoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSwgYWRk
cmVzcyk7CisgICAgICAgIHJldHVybiBEYXRhRm9ybWF0U3RyaWN0SW50NTI7CisgICAgY2FzZSBV
bmJveGVkQm9vbGVhbkluR1BSOgorICAgICAgICBtX2ppdC5zdG9yZVB0cihjYWNoZWRSZWNvdmVy
eS5yZWNvdmVyeSgpLmdwcigpLCBhZGRyZXNzKTsKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRC
b29sZWFuOworICAgIGNhc2UgVW5ib3hlZENlbGxJbkdQUjoKKyAgICAgICAgbV9qaXQuc3RvcmVQ
dHIoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSwgYWRkcmVzcyk7CisgICAgICAgIHJl
dHVybiBEYXRhRm9ybWF0Q2VsbDsKKyAgICBjYXNlIFVuYm94ZWREb3VibGVJbkZQUjoKKyAgICAg
ICAgbV9qaXQuc3RvcmVEb3VibGUoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5mcHIoKSwgYWRk
cmVzcyk7CisgICAgICAgIHJldHVybiBEYXRhRm9ybWF0RG91YmxlOworICAgIGNhc2UgSW5GUFI6
CisgICAgICAgIG1faml0LnN0b3JlRG91YmxlKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZnBy
KCksIGFkZHJlc3MpOworICAgICAgICByZXR1cm4gRGF0YUZvcm1hdEpTOworICAgIGNhc2UgQ29u
c3RhbnQ6CisgICAgICAgIG1faml0LnN0b3JlVHJ1c3RlZFZhbHVlKGNhY2hlZFJlY292ZXJ5LnJl
Y292ZXJ5KCkuY29uc3RhbnQoKSwgYWRkcmVzcyk7CisgICAgICAgIHJldHVybiBEYXRhRm9ybWF0
SlM7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9Cit9CisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXRCb3goQ2FjaGVkUmVjb3Zl
cnkmIGNhY2hlZFJlY292ZXJ5KQoreworICAgIEFTU0VSVChjYW5Cb3goY2FjaGVkUmVjb3Zlcnkp
KTsKKyAgICBpZiAoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5pc0NvbnN0YW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmlzSW5HUFIo
KSkgeworICAgICAgICBzd2l0Y2ggKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZGF0YUZvcm1h
dCgpKSB7CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEludDMyOgorICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgKiBCb3hpbmcgIiwgY2FjaGVkUmVj
b3ZlcnkucmVjb3ZlcnkoKSk7CisgICAgICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cigK
KyAgICAgICAgICAgICAgICBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpLAorICAgICAg
ICAgICAgICAgIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCkpOworICAgICAgICAgICAg
Ly8gV2UgaGF2ZSB0byBkbyB0aGlzIHRoZSBoYXJkIHdheS4KKyAgICAgICAgICAgIG1faml0Lm9y
NjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSwKKyAgICAgICAg
ICAgICAgICBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpKTsKKyAgICAgICAgICAgIGNh
Y2hlZFJlY292ZXJ5LnNldFJlY292ZXJ5KAorICAgICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6
OmluR1BSKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCksIERhdGFGb3JtYXRKUykpOwor
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiIGludG8g
IiwgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKSwgIlxuIik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEludDUyOgorICAgICAgICAgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgKiBCb3hpbmcgIiwgY2FjaGVkUmVjb3Zlcnku
cmVjb3ZlcnkoKSk7CisgICAgICAgICAgICBtX2ppdC5yc2hpZnQ2NChNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OmludDUyU2hpZnRBbW91bnQpLAorICAgICAgICAgICAgICAg
IGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCkpOworICAgICAgICAgICAgY2FjaGVkUmVj
b3Zlcnkuc2V0UmVjb3ZlcnkoCisgICAgICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIo
Y2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSwgRGF0YUZvcm1hdFN0cmljdEludDUyKSk7
CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgaW50
byAiLCBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLCAiXG4iKTsKKyAgICAgICAgICAgIEZBTExU
SFJPVUdIOworICAgICAgICBjYXNlIERhdGFGb3JtYXRTdHJpY3RJbnQ1MjogeworICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgKiBCb3hpbmcgIiwg
Y2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKSk7CisgICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBS
ID0gZ2V0RnJlZUZQUigpOworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdEZQUiAhPSBJbnZhbGlk
RlBSUmVnKTsKKyAgICAgICAgICAgIG1faml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKGNhY2hlZFJl
Y292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCksIHJlc3VsdEZQUik7CisgICAgICAgICAgICB1cGRhdGVS
ZWNvdmVyeShjYWNoZWRSZWNvdmVyeSwgVmFsdWVSZWNvdmVyeTo6aW5GUFIocmVzdWx0RlBSLCBE
YXRhRm9ybWF0RG91YmxlKSk7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICBkYXRhTG9nKCIgaW50byAiLCBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLCAiXG4iKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEJv
b2xlYW46CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9n
KCIgICAqIEJveGluZyAiLCBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpKTsKKyAgICAgICAgICAg
IG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksCisg
ICAgICAgICAgICAgICAgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSk7CisgICAgICAg
ICAgICBjYWNoZWRSZWNvdmVyeS5zZXRSZWNvdmVyeSgKKyAgICAgICAgICAgICAgICBWYWx1ZVJl
Y292ZXJ5OjppbkdQUihjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpLCBEYXRhRm9ybWF0
SlMpKTsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2co
IiBpbnRvICIsIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCksICJcbiIpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgfQorCisgICAgaWYgKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuaXNJbkZQUigpKSB7
CisgICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmRhdGFGb3JtYXQoKSA9PSBE
YXRhRm9ybWF0RG91YmxlKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICBkYXRhTG9nKCIgICAqIEJveGluZyAiLCBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpKTsK
KyAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBjYWNoZWRSZWNvdmVyeS53YW50ZWRKU1Zh
bHVlUmVncygpLmdwcigpOworICAgICAgICAgICAgaWYgKHJlc3VsdEdQUiA9PSBJbnZhbGlkR1BS
UmVnIHx8IG1fcmVnaXN0ZXJzW3Jlc3VsdEdQUl0pCisgICAgICAgICAgICAgICAgcmVzdWx0R1BS
ID0gZ2V0RnJlZUdQUigpOworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdEdQUiAhPSBJbnZhbGlk
R1BSUmVnKTsKKyAgICAgICAgICAgIG1faml0LnB1cmlmeU5hTihjYWNoZWRSZWNvdmVyeS5yZWNv
dmVyeSgpLmZwcigpKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGVUbzY0KGNhY2hlZFJl
Y292ZXJ5LnJlY292ZXJ5KCkuZnByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtX2ppdC5z
dWI2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgdXBkYXRlUmVjb3ZlcnkoY2FjaGVkUmVjb3ZlcnksIFZhbHVlUmVj
b3Zlcnk6OmluR1BSKHJlc3VsdEdQUiwgRGF0YUZvcm1hdEpTKSk7CisgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgaW50byAiLCBjYWNoZWRSZWNvdmVy
eS5yZWNvdmVyeSgpLCAiXG4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBBU1NFUlQoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5kYXRhRm9ybWF0KCkgPT0gRGF0
YUZvcm1hdEpTKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXRMb2FkKENh
Y2hlZFJlY292ZXJ5JiBjYWNoZWRSZWNvdmVyeSkKK3sKKyAgICBpZiAoIWNhY2hlZFJlY292ZXJ5
LnJlY292ZXJ5KCkuaXNJbkpTU3RhY2soKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgIGRhdGFMb2coIiAgICogTG9hZGluZyAiLCBjYWNoZWRSZWNvdmVyeS5y
ZWNvdmVyeSgpLCAiIGludG8gIik7CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gY2FjaGVk
UmVjb3ZlcnkucmVjb3ZlcnkoKS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyBhZGRyZXNzIHsgYWRkcmVzc0Zvck9sZChyZWcpIH07CisgICAgYm9vbCB0cnlG
UFIgeyB0cnVlIH07CisgICAgR1BSUmVnIHJlc3VsdEdQUiB7IGNhY2hlZFJlY292ZXJ5LndhbnRl
ZEpTVmFsdWVSZWdzKCkuZ3ByKCkgfTsKKworICAgIC8vIElmIHdlIHdhbnQgYSBHUFIgYW5kIGl0
J3MgYXZhaWxhYmxlLCB0aGF0J3MgYmV0dGVyIHRoYW4gbG9hZGluZworICAgIC8vIGludG8gYW4g
RlBSLgorICAgIGlmIChyZXN1bHRHUFIgIT0gSW52YWxpZEdQUlJlZyAmJiAhbV9yZWdpc3RlcnNb
cmVzdWx0R1BSXQorICAgICAgICAmJiAhbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHJlc3VsdEdQUikg
JiYgY2FjaGVkUmVjb3ZlcnkubG9hZHNJbnRvR1BSKCkpCisgICAgICAgIHRyeUZQUiA9IGZhbHNl
OworCisgICAgLy8gT3RoZXJ3aXNlLCB3ZSBwcmVmZXIgbG9hZGluZyBpbnRvIEZQUnMgaWYgcG9z
c2libGUKKyAgICBpZiAodHJ5RlBSICYmIGNhY2hlZFJlY292ZXJ5LmxvYWRzSW50b0ZQUigpKSB7
CisgICAgICAgIEZQUlJlZyByZXN1bHRGUFIgeyBjYWNoZWRSZWNvdmVyeS53YW50ZWRGUFIoKSB9
OworICAgICAgICBpZiAocmVzdWx0RlBSID09IEludmFsaWRGUFJSZWcgfHwgbV9yZWdpc3RlcnNb
cmVzdWx0RlBSXSB8fCBtX2xvY2tlZFJlZ2lzdGVycy5nZXQocmVzdWx0RlBSKSkKKyAgICAgICAg
ICAgIHJlc3VsdEZQUiA9IGdldEZyZWVGUFIoKTsKKyAgICAgICAgaWYgKHJlc3VsdEZQUiAhPSBJ
bnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKGFkZHJlc3MsIHJl
c3VsdEZQUik7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGRhdGFGb3JtYXQgPSBEYXRhRm9ybWF0
SlM7CisgICAgICAgICAgICAvLyBXZSBjb3VsZCBiZSB0cmFuc2Zvcm1pbmcgYSBEYXRhRm9ybWF0
Q2VsbCBpbnRvIGEKKyAgICAgICAgICAgIC8vIERhdGFGb3JtYXRKUyBoZXJlIC0gYnV0IHRoYXQn
cyBPSy4KKyAgICAgICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmRhdGFGb3Jt
YXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKQorICAgICAgICAgICAgICAgIGRhdGFGb3JtYXQgPSBE
YXRhRm9ybWF0RG91YmxlOworICAgICAgICAgICAgdXBkYXRlUmVjb3ZlcnkoY2FjaGVkUmVjb3Zl
cnksCisgICAgICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5GUFIocmVzdWx0RlBSLCBkYXRh
Rm9ybWF0KSk7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRh
TG9nKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCksICJcbiIpOworICAgICAgICAgICAgaWYgKHJl
ZyA9PSBuZXdBc09sZChkYW5nZXJGcm9udGllcigpKSkKKyAgICAgICAgICAgICAgICB1cGRhdGVE
YW5nZXJGcm9udGllcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQor
CisgICAgQVNTRVJUKGNhY2hlZFJlY292ZXJ5LmxvYWRzSW50b0dQUigpKTsKKyAgICBpZiAocmVz
dWx0R1BSID09IEludmFsaWRHUFJSZWcgfHwgbV9yZWdpc3RlcnNbcmVzdWx0R1BSXSB8fCBtX2xv
Y2tlZFJlZ2lzdGVycy5nZXQocmVzdWx0R1BSKSkKKyAgICAgICAgcmVzdWx0R1BSID0gZ2V0RnJl
ZUdQUigpOworICAgIEFTU0VSVChyZXN1bHRHUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgbV9q
aXQubG9hZFB0cihhZGRyZXNzLCByZXN1bHRHUFIpOworICAgIHVwZGF0ZVJlY292ZXJ5KGNhY2hl
ZFJlY292ZXJ5LAorICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZXN1bHRHUFIsIGNhY2hl
ZFJlY292ZXJ5LnJlY292ZXJ5KCkuZGF0YUZvcm1hdCgpKSk7CisgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgIGRhdGFMb2coY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKSwgIlxuIik7CisgICAgaWYg
KHJlZyA9PSBuZXdBc09sZChkYW5nZXJGcm9udGllcigpKSkKKyAgICAgICAgdXBkYXRlRGFuZ2Vy
RnJvbnRpZXIoKTsKK30KKworYm9vbCBDYWxsRnJhbWVTaHVmZmxlcjo6Y2FuTG9hZChDYWNoZWRS
ZWNvdmVyeSYgY2FjaGVkUmVjb3ZlcnkpCit7CisgICAgaWYgKCFjYWNoZWRSZWNvdmVyeS5yZWNv
dmVyeSgpLmlzSW5KU1N0YWNrKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgQVNTRVJU
KGNhY2hlZFJlY292ZXJ5LmxvYWRzSW50b0ZQUigpIHx8IGNhY2hlZFJlY292ZXJ5LmxvYWRzSW50
b0dQUigpKTsKKworICAgIGlmIChjYWNoZWRSZWNvdmVyeS5sb2Fkc0ludG9GUFIoKSAmJiBnZXRG
cmVlRlBSKCkgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBp
ZiAoY2FjaGVkUmVjb3ZlcnkubG9hZHNJbnRvR1BSKCkgJiYgZ2V0RnJlZUdQUigpICE9IEludmFs
aWRHUFJSZWcpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIENhY2hlZFJlY292ZXJ5Ojpsb2Fkc0ludG9GUFIoKSBjb25zdAoreworICAgIHN3aXRj
aCAocmVjb3ZlcnkoKS50ZWNobmlxdWUoKSkgeworICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5K
U1N0YWNrOgorICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgIGNhc2UgQ2VsbERpc3Bs
YWNlZEluSlNTdGFjazoKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIENhY2hlZFJlY292ZXJ5Ojpsb2Fk
c0ludG9HUFIoKSBjb25zdAoreworICAgIHN3aXRjaCAocmVjb3ZlcnkoKS50ZWNobmlxdWUoKSkg
eworICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgY2FzZSBJbnQ1MkRpc3Bs
YWNlZEluSlNTdGFjazoKKyAgICBjYXNlIFN0cmljdEludDUyRGlzcGxhY2VkSW5KU1N0YWNrOgor
ICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazoKKyAgICBjYXNlIERpc3BsYWNlZElu
SlNTdGFjazoKKyAgICBjYXNlIENlbGxEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30K
Kwordm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6ZW1pdERpc3BsYWNlKENhY2hlZFJlY292ZXJ5JiBj
YWNoZWRSZWNvdmVyeSkKK3sKKyAgICBSZWcgd2FudGVkUmVnOworICAgIGlmICghKHdhbnRlZFJl
ZyA9IFJlZyB7IGNhY2hlZFJlY292ZXJ5LndhbnRlZEpTVmFsdWVSZWdzKCkuZ3ByKCkgfSkpCisg
ICAgICAgIHdhbnRlZFJlZyA9IFJlZyB7IGNhY2hlZFJlY292ZXJ5LndhbnRlZEZQUigpIH07Cisg
ICAgQVNTRVJUKHdhbnRlZFJlZyk7CisgICAgQVNTRVJUKCFtX2xvY2tlZFJlZ2lzdGVycy5nZXQo
d2FudGVkUmVnKSk7CisKKyAgICBpZiAoQ2FjaGVkUmVjb3ZlcnkqIGN1cnJlbnQgPSBtX3JlZ2lz
dGVyc1t3YW50ZWRSZWddKSB7CisgICAgICAgIGlmIChjdXJyZW50ID09ICZjYWNoZWRSZWNvdmVy
eSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygi
ICAgKyAiLCB3YW50ZWRSZWcsICIgaXMgT0tcbiIpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIC8vIFdlIGNvdWxkIGRvIGEgbW9yZSBjb21wbGV4IHRoaW5nIGJ5IGZp
bmRpbmcgY3ljbGVzCisgICAgICAgIC8vIGV0Yy4gaW4gdGhhdCBjYXNlLgorICAgICAgICAvLyBI
b3dldmVyLCBlbmRpbmcgdXAgaW4gdGhpcyBzaXR1YXRpb24gd2lsbCBiZSBzdXBlcgorICAgICAg
ICAvLyByYXJlLCBhbmQgc2hvdWxkIGFjdHVhbGx5IGJlIG91dHJpZ2h0IGltcG9zc2libGUgZm9y
CisgICAgICAgIC8vIG5vbi1GVEwgdGllcnMsIHNpbmNlOgorICAgICAgICAvLyAgKGEpIEFsbCBk
b3VibGVzIGhhdmUgYmVlbiBjb252ZXJ0ZWQgaW50byBKU1ZhbHVlcyB3aXRoCisgICAgICAgIC8v
ICAgICAgVmFsdWVSZXAgbm9kZXMsIHNvIEZQUnMgYXJlIGluaXRpYWxseSBmcmVlCisgICAgICAg
IC8vCisgICAgICAgIC8vICAoYikgVGhlIG9ubHkgcmVjb3ZlcmllcyB3aXRoIHdhbnRlZCByZWdp
c3RlcnMgYXJlIHRoZQorICAgICAgICAvLyAgICAgIGNhbGxlZSAod2hpY2ggYWx3YXlzIHN0YXJ0
cyBvdXQgaW4gYSByZWdpc3RlcikgYW5kCisgICAgICAgIC8vICAgICAgdGhlIGNhbGxlZS1zYXZl
IHJlZ2lzdGVycworICAgICAgICAvLworICAgICAgICAvLyAgKGMpIFRoZSBjYWxsZWUtc2F2ZSBy
ZWdpc3RlcnMgYXJlIHRoZSBmaXJzdCB0aGluZ3Mgd2UKKyAgICAgICAgLy8gICAgICBsb2FkIChh
ZnRlciB0aGUgcmV0dXJuIFBDKSwgYW5kIHRoZXkgYXJlIGxvYWRlZCBhcyBKU1ZhbHVlcworICAg
ICAgICAvLworICAgICAgICAvLyAgKGQpIFdlIHByZWZlciBsb2FkaW5nIEpTVmFsdWVzIGludG8g
RlBScyBpZiB0aGVpcgorICAgICAgICAvLyAgICAgIHdhbnRlZCBHUFIgaXMgbm90IGF2YWlsYWJs
ZQorICAgICAgICAvLworICAgICAgICAvLyAgKGUpIElmIHdlIGVuZCB1cCBzcGlsbGluZyBzb21l
IHJlZ2lzdGVycyB3aXRoIGEKKyAgICAgICAgLy8gICAgICB0YXJnZXQsIHdlIHdvbid0IGxvYWQg
dGhlbSBhZ2FpbiBiZWZvcmUgdGhlIHZlcnkKKyAgICAgICAgLy8gICAgICBlbmQgb2YgdGhlIGFs
Z29yaXRobQorICAgICAgICAvLworICAgICAgICAvLyBDb21iaW5lZCwgdGhpcyBtZWFucyB0aGF0
IHdlIHdpbGwgbmV2ZXIgbG9hZCBhIHJlY292ZXJ5CisgICAgICAgIC8vIHdpdGggYSB3YW50ZWQg
R1BSIGludG8gYW55IEdQUiBvdGhlciB0aGFuIGl0cyB3YW50ZWQKKyAgICAgICAgLy8gR1BSLiBU
aGUgY2FsbGVlIGNvdWxkIGhvd2V2ZXIgaGF2ZSBiZWVuIGluaXRpYWxseSBpbgorICAgICAgICAv
LyBvbmUgb2YgdGhlIGNhbGxlZS1zYXZlIHJlZ2lzdGVycyAtIGJ1dCBzaW5jZSB0aGUgd2FudGVk
CisgICAgICAgIC8vIEdQUiBmb3IgdGhlIGNhbGxlZSBpcyBhbHdheXMgcmVnVDAsIGl0IHdpbGwg
YmUgdGhlCisgICAgICAgIC8vIGZpcnN0IG9uZSB0byBiZSBkaXNwbGFjZWQsIGFuZCB3ZSB3b24n
dCBzZWUgaXQgd2hlbgorICAgICAgICAvLyBoYW5kbGluZyBhbnkgb2YgdGhlIGNhbGxlZS1zYXZl
IHJlZ2lzdGVycy4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGh1cywgdGhlIG9ubHkgd2F5IHdl
IGNvdWxkIGV2ZXIgcmVhY2ggdGhpcyBwYXRoIGlzIGluCisgICAgICAgIC8vIHRoZSBGVEwsIHdo
ZW4gdGhlcmUgaXMgc28gbXVjaCBwcmVzc3VyZSB0aGF0IHdlCisgICAgICAgIC8vIGFic29sdXRl
bHkgbmVlZCB0byBsb2FkIHRoZSBjYWxsZWUtc2F2ZSByZWdpc3RlcnMgaW50bworICAgICAgICAv
LyBkaWZmZXJlbnQgR1BScyBpbml0aWFsbHkgYnV0IG5vdCBlbm91Z2ggcHJlc3N1cmUgdG8KKyAg
ICAgICAgLy8gdGhlbiBoYXZlIHRvIHNwaWxsIGFsbCBvZiB0aGVtLiBBbmQgZXZlbiBpbiB0aGF0
IGNhc2UsCisgICAgICAgIC8vIGRlcGVuZGluZyBvbiB0aGUgb3JkZXIgaW4gd2hpY2ggTExWTSBz
YXZlcyB0aGUKKyAgICAgICAgLy8gY2FsbGVlLXNhdmVzLCB3ZSB3aWxsIHByb2JhYmx5IHN0aWxs
IGJlIHNhZmUuIEFueXdheSwKKyAgICAgICAgLy8gdGhlIGNvdXBsZSBleHRyYSBtb3ZlIGluc3Ry
dWN0aW9ucyBjb21wYXJlZCB0byBhbgorICAgICAgICAvLyBlZmZpY2llbnQgY3ljbGUtYmFzZWQg
YWxnb3JpdGhtIGFyZSBub3QgZ29pbmcgdG8gaHVydAorICAgICAgICAvLyB1cy4KKyAgICAgICAg
aWYgKHdhbnRlZFJlZy5pc0ZQUigpKSB7CisgICAgICAgICAgICBGUFJSZWcgdGVtcEZQUiA9IGdl
dEZyZWVGUFIoKTsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRh
dGFMb2coIiAgKiBNb3ZpbmcgIiwgd2FudGVkUmVnLCAiIGludG8gIiwgdGVtcEZQUiwgIlxuIik7
CisgICAgICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKHdhbnRlZFJlZy5mcHIoKSwgdGVtcEZQUik7
CisgICAgICAgICAgICB1cGRhdGVSZWNvdmVyeSgqY3VycmVudCwKKyAgICAgICAgICAgICAgICBW
YWx1ZVJlY292ZXJ5OjppbkZQUih0ZW1wRlBSLCBjdXJyZW50LT5yZWNvdmVyeSgpLmRhdGFGb3Jt
YXQoKSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSBn
ZXRGcmVlR1BSKCk7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICogTW92aW5nICIsIHdhbnRlZFJlZy5ncHIoKSwgIiBpbnRvICIsIHRlbXBHUFIs
ICJcbiIpOworICAgICAgICAgICAgbV9qaXQubW92ZSh3YW50ZWRSZWcuZ3ByKCksIHRlbXBHUFIp
OworICAgICAgICAgICAgdXBkYXRlUmVjb3ZlcnkoKmN1cnJlbnQsCisgICAgICAgICAgICAgICAg
VmFsdWVSZWNvdmVyeTo6aW5HUFIodGVtcEdQUiwgY3VycmVudC0+cmVjb3ZlcnkoKS5kYXRhRm9y
bWF0KCkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlQoIW1fcmVnaXN0ZXJzW3dhbnRl
ZFJlZ10pOworCisgICAgaWYgKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuaXNDb25zdGFudCgp
KSB7CisgICAgICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCBjYWxsZWUgc2F2ZXMgZm9yIHdhbnRl
ZCBGUFJzLCBhbmQgdGhvc2UgYXJlIG5ldmVyIGNvbnN0YW50cworICAgICAgICBBU1NFUlQod2Fu
dGVkUmVnLmlzR1BSKCkpOworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFM
b2coIiAgICogTG9hZGluZyAiLCBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmNvbnN0YW50KCks
ICIgaW50byAiLCB3YW50ZWRSZWcsICJcbiIpOworICAgICAgICBtX2ppdC5tb3ZlVHJ1c3RlZFZh
bHVlKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuY29uc3RhbnQoKSwgSlNWYWx1ZVJlZ3MgeyB3
YW50ZWRSZWcuZ3ByKCkgfSk7CisgICAgICAgIHVwZGF0ZVJlY292ZXJ5KAorICAgICAgICAgICAg
Y2FjaGVkUmVjb3ZlcnksCisgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjppblJlZ2lzdGVyKHdh
bnRlZFJlZywgRGF0YUZvcm1hdEpTKSk7CisgICAgfSBlbHNlIGlmIChjYWNoZWRSZWNvdmVyeS5y
ZWNvdmVyeSgpLmlzSW5HUFIoKSkgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
IGRhdGFMb2coIiAgICogTW92aW5nICIsIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCksICIgaW50
byAiLCB3YW50ZWRSZWcsICJcbiIpOworICAgICAgICBpZiAod2FudGVkUmVnLmlzR1BSKCkpCisg
ICAgICAgICAgICBtX2ppdC5tb3ZlKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCksIHdh
bnRlZFJlZy5ncHIoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1faml0Lm1vdmU2NFRv
RG91YmxlKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCksIHdhbnRlZFJlZy5mcHIoKSk7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZGF0YUZv
cm1hdCgpID09IERhdGFGb3JtYXRKUyk7CisgICAgICAgIHVwZGF0ZVJlY292ZXJ5KGNhY2hlZFJl
Y292ZXJ5LAorICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5SZWdpc3Rlcih3YW50ZWRSZWcs
IERhdGFGb3JtYXRKUykpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChjYWNoZWRSZWNv
dmVyeS5yZWNvdmVyeSgpLmlzSW5GUFIoKSk7CisgICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS5y
ZWNvdmVyeSgpLmRhdGFGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKSB7CisgICAgICAgICAg
ICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgY2FsbGVlIHNhdmVzIGZvciB3YW50ZWQgRlBScywgYW5k
IHRob3NlIGFyZSBhbHdheXMgRGF0YUZvcm1hdEpTCisgICAgICAgICAgICBBU1NFUlQod2FudGVk
UmVnLmlzR1BSKCkpOworICAgICAgICAgICAgLy8gVGhpcyB3aWxsIGF1dG9tYXRpY2FsbHkgcGlj
ayB0aGUgd2FudGVkIEdQUgorICAgICAgICAgICAgZW1pdEJveChjYWNoZWRSZWNvdmVyeSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIgICAqIE1vdmluZyAiLCBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmZwcigp
LCAiIGludG8gIiwgd2FudGVkUmVnLCAiXG4iKTsKKyAgICAgICAgICAgIGlmICh3YW50ZWRSZWcu
aXNHUFIoKSkKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlRG91YmxlVG82NChjYWNoZWRSZWNv
dmVyeS5yZWNvdmVyeSgpLmZwcigpLCB3YW50ZWRSZWcuZ3ByKCkpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUoY2FjaGVkUmVjb3ZlcnkucmVjb3Zl
cnkoKS5mcHIoKSwgd2FudGVkUmVnLmZwcigpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZGF0YUZvcm1hdCgpID09IERhdGFGb3JtYXRKUyk7
CisgICAgICAgICAgICB1cGRhdGVSZWNvdmVyeShjYWNoZWRSZWNvdmVyeSwKKyAgICAgICAgICAg
ICAgICBWYWx1ZVJlY292ZXJ5OjppblJlZ2lzdGVyKHdhbnRlZFJlZywgRGF0YUZvcm1hdEpTKSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBU1NFUlQobV9yZWdpc3RlcnNbd2FudGVkUmVnXSA9
PSAmY2FjaGVkUmVjb3ZlcnkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEVOQUJMRShKSVQpICYmIFVTRShKU1ZBTFVFNjQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNzA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxl
ci5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworQ2FsbEZyYW1lU2h1ZmZs
ZXI6OkNhbGxGcmFtZVNodWZmbGVyKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBDYWxsRnJhbWVT
aHVmZmxlRGF0YSYgZGF0YSkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb2xkRnJhbWUoZGF0
YS5udW1Mb2NhbHMgKyBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgbnVsbHB0cikKKyAg
ICAsIG1fbmV3RnJhbWUoZGF0YS5hcmdzLnNpemUoKSArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRl
clNpemUsIG51bGxwdHIpCisgICAgLCBtX2FsaWduZWRPbGRGcmFtZVNpemUoSlNTdGFjazo6Q2Fs
bEZyYW1lSGVhZGVyU2l6ZQorICAgICAgICArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFt
ZShqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkpCisgICAgLCBtX2FsaWduZWROZXdG
cmFtZVNpemUoSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZQorICAgICAgICArIHJvdW5kQXJn
dW1lbnRDb3VudFRvQWxpZ25GcmFtZShkYXRhLmFyZ3Muc2l6ZSgpKSkKKyAgICAsIG1fZnJhbWVE
ZWx0YShtX2FsaWduZWROZXdGcmFtZVNpemUgLSBtX2FsaWduZWRPbGRGcmFtZVNpemUpCisgICAg
LCBtX2xvY2tlZFJlZ2lzdGVycyhSZWdpc3RlclNldDo6YWxsUmVnaXN0ZXJzKCkpCit7CisgICAg
Ly8gV2UgYXJlIGFsbG93ZWQgYWxsIHRoZSB1c3VhbCByZWdpc3RlcnMuLi4KKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOyApCisgICAgICAgIG1f
bG9ja2VkUmVnaXN0ZXJzLmNsZWFyKEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07ICkKKyAgICAgICAg
bV9sb2NrZWRSZWdpc3RlcnMuY2xlYXIoRlBSSW5mbzo6dG9SZWdpc3RlcihpKSk7CisgICAgLy8g
Li4uIGFzIHdlbGwgYXMgdGhlIHJ1bnRpbWUgcmVnaXN0ZXJzLgorICAgIG1fbG9ja2VkUmVnaXN0
ZXJzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKworICAg
IEFTU0VSVCghZGF0YS5jYWxsZWUuaXNJbkpTU3RhY2soKSB8fCBkYXRhLmNhbGxlZS52aXJ0dWFs
UmVnaXN0ZXIoKS5pc0xvY2FsKCkpOworICAgIGFkZE5ldyhWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFj
azo6Q2FsbGVlKSwgZGF0YS5jYWxsZWUpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBk
YXRhLmFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQVNTRVJUKCFkYXRhLmFyZ3NbaV0uaXNJ
bkpTU3RhY2soKSB8fCBkYXRhLmFyZ3NbaV0udmlydHVhbFJlZ2lzdGVyKCkuaXNMb2NhbCgpKTsK
KyAgICAgICAgYWRkTmV3KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpLCBkYXRhLmFyZ3Nb
aV0pOworICAgIH0KKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgZm9yIChSZWcgcmVnID0gUmVn
OjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKKyAgICAg
ICAgaWYgKCFkYXRhLnJlZ2lzdGVyc1tyZWddLmlzU2V0KCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAgICAgICAgICBhZGROZXcoSlNWYWx1
ZVJlZ3MocmVnLmdwcigpKSwgZGF0YS5yZWdpc3RlcnNbcmVnXSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGFkZE5ldyhyZWcuZnByKCksIGRhdGEucmVnaXN0ZXJzW3JlZ10pOworICAgIH0K
KyNlbmRpZgorfQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlbGltaXRlciAgICAgICAgICAg
ICA9ICIgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICI7CisgICAgc3RhdGljIGNv
bnN0IGNoYXIqIGRhbmdlckRlbGltaXRlciAgICAgICA9ICIgWC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS1YICI7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRhbmdlckJvdW5kc0RlbGlt
aXRlciA9ICIgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYICI7CisgICAgc3RhdGlj
IGNvbnN0IGNoYXIqIGVtcHR5U3BhY2UgICAgICAgICAgICA9ICIgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICI7CisgICAgQVNTRVJUKG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZSA8PSBu
dW1Mb2NhbHMoKSk7CisgICAgb3V0LnByaW50KCIgICAgICAgICAgIik7CisgICAgb3V0LnByaW50
KCIgICAgICAgICAgIE9sZCBmcmFtZSAgICAgICAgICAgICAgICIpOworICAgIG91dC5wcmludCgi
ICAgICAgICAgICBOZXcgZnJhbWUgICAgICAgICAgICAgICAiKTsKKyAgICBvdXQucHJpbnQoIlxu
Iik7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2FsaWduZWRPbGRGcmFtZVNpemUgKyBudW1M
b2NhbHMoKSArIDM7ICsraSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb2xkIHsgbV9hbGln
bmVkT2xkRnJhbWVTaXplIC0gaSAtIDEgfTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG5ld1Jl
ZyB7IG9sZCArIG1fZnJhbWVEZWx0YSB9OworCisgICAgICAgIGlmICghaXNWYWxpZE9sZChvbGQp
ICYmIG9sZCAhPSBmaXJzdE9sZCgpIC0gMQorICAgICAgICAgICAgJiYgIWlzVmFsaWROZXcobmV3
UmVnKSAmJiBuZXdSZWcgIT0gZmlyc3ROZXcoKSAtIDEpCisgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICBvdXQucHJpbnQoIiAgICAgICAgIik7CisgICAgICAgIGlmIChkYW5nZXJGcm9u
dGllcigpID49IGZpcnN0TmV3KCkKKyAgICAgICAgICAgICYmIChuZXdSZWcgPT0gZGFuZ2VyRnJv
bnRpZXIoKSB8fCBuZXdSZWcgPT0gZmlyc3ROZXcoKSAtIDEpKQorICAgICAgICAgICAgb3V0LnBy
aW50KGRhbmdlckJvdW5kc0RlbGltaXRlcik7CisgICAgICAgIGVsc2UgaWYgKGlzVmFsaWRPbGQo
b2xkKSkKKyAgICAgICAgICAgIG91dC5wcmludChpc1ZhbGlkTmV3KG5ld1JlZykgJiYgaXNEYW5n
ZXJOZXcobmV3UmVnKSA/IGRhbmdlckRlbGltaXRlciA6IGRlbGltaXRlcik7CisgICAgICAgIGVs
c2UgaWYgKG9sZCA9PSBmaXJzdE9sZCgpIC0gMSkKKyAgICAgICAgICAgIG91dC5wcmludChkZWxp
bWl0ZXIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoZW1wdHlTcGFjZSk7
CisgICAgICAgIGlmIChkYW5nZXJGcm9udGllcigpID49IGZpcnN0TmV3KCkKKyAgICAgICAgICAg
ICYmIChuZXdSZWcgPT0gZGFuZ2VyRnJvbnRpZXIoKSB8fCBuZXdSZWcgPT0gZmlyc3ROZXcoKSAt
IDEpKQorICAgICAgICAgICAgb3V0LnByaW50KGRhbmdlckJvdW5kc0RlbGltaXRlcik7CisgICAg
ICAgIGVsc2UgaWYgKGlzVmFsaWROZXcobmV3UmVnKSB8fCBuZXdSZWcgPT0gZmlyc3ROZXcoKSAt
IDEpCisgICAgICAgICAgICBvdXQucHJpbnQoaXNEYW5nZXJOZXcobmV3UmVnKSA/IGRhbmdlckRl
bGltaXRlciA6IGRlbGltaXRlcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmlu
dChlbXB0eVNwYWNlKTsKKyAgICAgICAgb3V0LnByaW50KCJcbiIpOworICAgICAgICBpZiAob2xk
ID09IGZpcnN0T2xkKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIiBzcCAtLT4gIik7CisgICAg
ICAgIGVsc2UgaWYgKCFvbGQub2Zmc2V0KCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIiBmcCAt
LT4gIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgICAgICAiKTsK
KyAgICAgICAgaWYgKGlzVmFsaWRPbGQob2xkKSkgeworICAgICAgICAgICAgaWYgKGdldE9sZChv
bGQpKSB7CisgICAgICAgICAgICAgICAgYXV0byBzdHIgPSB0b0NTdHJpbmcob2xkKTsKKyAgICAg
ICAgICAgICAgICBpZiAoaXNWYWxpZE5ldyhuZXdSZWcpICYmIGlzRGFuZ2VyTmV3KG5ld1JlZykp
CisgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiBYICAgICAgJTE4cyAgICAgICBYICIs
IHN0ci5kYXRhKCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
b3V0LnByaW50ZigiIHwgICAgICAlMThzICAgICAgIHwgIiwgc3RyLmRhdGEoKSk7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKGlzVmFsaWROZXcobmV3UmVnKSAmJiBpc0Rhbmdlck5ldyhuZXdSZWcp
KQorICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiBYJTMwcyBYICIsICIiKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIgfCUzMHMgfCAiLCAiIik7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KGVtcHR5U3BhY2UpOworICAgICAg
ICBpZiAoaXNWYWxpZE5ldyhuZXdSZWcpKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyIGQgPSBp
c0Rhbmdlck5ldyhuZXdSZWcpID8gJ1gnIDogJ3wnOworICAgICAgICAgICAgYXV0byBzdHIgPSB0
b0NTdHJpbmcobmV3UmVnKTsKKyAgICAgICAgICAgIGlmIChnZXROZXcobmV3UmVnKSkgeworICAg
ICAgICAgICAgICAgIGlmIChnZXROZXcobmV3UmVnKS0+cmVjb3ZlcnkoKS5pc0NvbnN0YW50KCkp
CisgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiAlYyU4cyA8LSAgICAgICAgICAgY29u
c3RhbnQgJWMgIiwgZCwgc3RyLmRhdGEoKSwgZCk7CisgICAgICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIGF1dG8gcmVjb3ZlcnlTdHIgPSB0b0NTdHJpbmcoZ2V0TmV3KG5l
d1JlZyktPnJlY292ZXJ5KCkpOworICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIgJWMl
OHMgPC0gJTE4cyAlYyAiLCBkLCBzdHIuZGF0YSgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
cmVjb3ZlcnlTdHIuZGF0YSgpLCBkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
IGVsc2UgaWYgKG5ld1JlZyA9PSBWaXJ0dWFsUmVnaXN0ZXIgeyBKU1N0YWNrOjpBcmd1bWVudENv
dW50IH0pCisgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiICVjJThzIDwtICUxOHp1ICVjICIs
IGQsIHN0ci5kYXRhKCksIGFyZ0NvdW50KCksIGQpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIG91dC5wcmludGYoIiAlYyUzMHMgJWMgIiwgZCwgIiIsIGQpOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludChlbXB0eVNwYWNlKTsKKyAgICAgICAgaWYgKG5l
d1JlZyA9PSBmaXJzdE5ldygpIC0gbV9uZXdGcmFtZU9mZnNldCAmJiAhaXNTbG93UGF0aCgpKQor
ICAgICAgICAgICAgb3V0LnByaW50KCIgPC0tIG5ldyBzcCBiZWZvcmUganVtcCAoY3VycmVudCAi
LCBtX25ld0ZyYW1lQmFzZSwgIikgIik7CisgICAgICAgIGlmIChuZXdSZWcgPT0gZmlyc3ROZXco
KSkKKyAgICAgICAgICAgIG91dC5wcmludCgiIDwtLSBuZXcgZnAgYWZ0ZXIgcHJvbG9ndWUiKTsK
KyAgICAgICAgb3V0LnByaW50KCJcbiIpOworICAgIH0KKyAgICBvdXQucHJpbnQoIiAgICAgICAg
ICAiKTsKKyAgICBvdXQucHJpbnQoIiAgICAgICAgTGl2ZSByZWdpc3RlcnMgICAgICAgICAgICAg
Iik7CisgICAgb3V0LnByaW50KCIgICAgICAgIFdhbnRlZCByZWdpc3RlcnMgICAgICAgICAgICIp
OworICAgIG91dC5wcmludCgiXG4iKTsKKyAgICBmb3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0KCk7
IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVnLm5leHQoKSkgeworICAgICAgICBDYWNoZWRS
ZWNvdmVyeSogb2xkQ2FjaGVkUmVjb3ZlcnkgeyBtX3JlZ2lzdGVyc1tyZWddIH07CisgICAgICAg
IENhY2hlZFJlY292ZXJ5KiBuZXdDYWNoZWRSZWNvdmVyeSB7IG1fbmV3UmVnaXN0ZXJzW3JlZ10g
fTsKKyAgICAgICAgaWYgKCFvbGRDYWNoZWRSZWNvdmVyeSAmJiAhbmV3Q2FjaGVkUmVjb3Zlcnkp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgb3V0LnByaW50KCIgICAgICAgICAgIik7
CisgICAgICAgIGlmIChvbGRDYWNoZWRSZWNvdmVyeSkgeworICAgICAgICAgICAgYXV0byBzdHIg
PSB0b0NTdHJpbmcocmVnKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiAgICAgICAgICU4cyAg
ICAgICAgICAgICAgICAgICIsIHN0ci5kYXRhKCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIG91dC5wcmludChlbXB0eVNwYWNlKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAg
ICBpZiAobmV3Q2FjaGVkUmVjb3ZlcnkpIHsKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHdhbnRl
ZEpTVmFsdWVSZWdzIHsgbmV3Q2FjaGVkUmVjb3ZlcnktPndhbnRlZEpTVmFsdWVSZWdzKCkgfTsK
KyAgICAgICAgICAgIGlmIChyZWcuaXNGUFIoKSkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQo
cmVnLCAiIDwtICIsIG5ld0NhY2hlZFJlY292ZXJ5LT5yZWNvdmVyeSgpKTsKKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChyZWcuZ3ByKCkgPT0gd2FudGVkSlNWYWx1ZVJl
Z3MudGFnR1BSKCkpCisgICAgICAgICAgICAgICAgICAgIG91dC5wcmludChyZWcuZ3ByKCksICIg
PC0gdGFnKCIsIG5ld0NhY2hlZFJlY292ZXJ5LT5yZWNvdmVyeSgpLCAiKSIpOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KHJlZy5ncHIoKSwgIiA8
LSBwYXlsb2FkKCIsIG5ld0NhY2hlZFJlY292ZXJ5LT5yZWNvdmVyeSgpLCAiKSIpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisjZWxzZQorICAgICAgICBpZiAobmV3Q2FjaGVkUmVjb3Zlcnkp
CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAgICAgICIsIHJlZywgIiA8LSAiLCBuZXdDYWNo
ZWRSZWNvdmVyeS0+cmVjb3ZlcnkoKSk7CisjZW5kaWYKKyAgICAgICAgb3V0LnByaW50KCJcbiIp
OworICAgIH0KKyAgICBvdXQucHJpbnQoIiAgTG9ja2VkIHJlZ2lzdGVyczogIik7CisgICAgYm9v
bCBmaXJzdExvY2tlZCB7IHRydWUgfTsKKyAgICBmb3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0KCk7
IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVnLm5leHQoKSkgeworICAgICAgICBpZiAobV9s
b2NrZWRSZWdpc3RlcnMuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgIG91dC5wcmludChmaXJzdExv
Y2tlZCA/ICIiIDogIiwgIiwgcmVnKTsKKyAgICAgICAgICAgIGZpcnN0TG9ja2VkID0gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisgICAgb3V0LnByaW50KCJcbiIpOworCisgICAgaWYgKGlzU2xv
d1BhdGgoKSkKKyAgICAgICAgb3V0LnByaW50KCIgIFVzaW5nIGZwLXJlbGF0aXZlIGFkZHJlc3Np
bmcgZm9yIHNsb3cgcGF0aCBjYWxsXG4iKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludCgi
ICBVc2luZyBzcC1yZWxhdGl2ZSBhZGRyZXNzaW5nIGZvciBqdW1wICh1c2luZyAiLCBtX25ld0Zy
YW1lQmFzZSwgIiBhcyBuZXcgc3ApXG4iKTsKKyAgICBpZiAobV9vbGRGcmFtZU9mZnNldCkKKyAg
ICAgICAgb3V0LnByaW50KCIgICBPbGQgZnJhbWUgb2Zmc2V0IGlzICIsIG1fb2xkRnJhbWVPZmZz
ZXQsICJcbiIpOworICAgIGlmIChtX25ld0ZyYW1lT2Zmc2V0KQorICAgICAgICBvdXQucHJpbnQo
IiAgIE5ldyBmcmFtZSBvZmZzZXQgaXMgIiwgbV9uZXdGcmFtZU9mZnNldCwgIlxuIik7Cit9CisK
K0NhY2hlZFJlY292ZXJ5KiBDYWxsRnJhbWVTaHVmZmxlcjo6Z2V0Q2FjaGVkUmVjb3ZlcnkoVmFs
dWVSZWNvdmVyeSByZWNvdmVyeSkKK3sKKyAgICBBU1NFUlQoIXJlY292ZXJ5LmlzQ29uc3RhbnQo
KSk7CisgICAgaWYgKHJlY292ZXJ5LmlzSW5HUFIoKSkKKyAgICAgICAgcmV0dXJuIG1fcmVnaXN0
ZXJzW3JlY292ZXJ5LmdwcigpXTsKKyAgICBpZiAocmVjb3ZlcnkuaXNJbkZQUigpKQorICAgICAg
ICByZXR1cm4gbV9yZWdpc3RlcnNbcmVjb3ZlcnkuZnByKCldOworI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCisgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpID09IEluUGFpcikgeworICAgICAgICBB
U1NFUlQobV9yZWdpc3RlcnNbcmVjb3ZlcnkudGFnR1BSKCldID09IG1fcmVnaXN0ZXJzW3JlY292
ZXJ5LnBheWxvYWRHUFIoKV0pOworICAgICAgICByZXR1cm4gbV9yZWdpc3RlcnNbcmVjb3Zlcnku
cGF5bG9hZEdQUigpXTsKKyAgICB9CisjZW5kaWYKKyAgICBBU1NFUlQocmVjb3ZlcnkuaXNJbkpT
U3RhY2soKSk7CisgICAgcmV0dXJuIGdldE9sZChyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSk7
Cit9CisKK0NhY2hlZFJlY292ZXJ5KiBDYWxsRnJhbWVTaHVmZmxlcjo6c2V0Q2FjaGVkUmVjb3Zl
cnkoVmFsdWVSZWNvdmVyeSByZWNvdmVyeSwgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5
KQoreworICAgIEFTU0VSVCghcmVjb3ZlcnkuaXNDb25zdGFudCgpKTsKKyAgICBpZiAocmVjb3Zl
cnkuaXNJbkdQUigpKQorICAgICAgICByZXR1cm4gbV9yZWdpc3RlcnNbcmVjb3ZlcnkuZ3ByKCld
ID0gY2FjaGVkUmVjb3Zlcnk7CisgICAgaWYgKHJlY292ZXJ5LmlzSW5GUFIoKSkKKyAgICAgICAg
cmV0dXJuIG1fcmVnaXN0ZXJzW3JlY292ZXJ5LmZwcigpXSA9IGNhY2hlZFJlY292ZXJ5OworI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCisgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpID09IEluUGFp
cikgeworICAgICAgICBtX3JlZ2lzdGVyc1tyZWNvdmVyeS50YWdHUFIoKV0gPSBjYWNoZWRSZWNv
dmVyeTsKKyAgICAgICAgcmV0dXJuIG1fcmVnaXN0ZXJzW3JlY292ZXJ5LnBheWxvYWRHUFIoKV0g
PSBjYWNoZWRSZWNvdmVyeTsKKyAgICB9CisjZW5kaWYKKyAgICBBU1NFUlQocmVjb3ZlcnkuaXNJ
bkpTU3RhY2soKSk7CisgICAgc2V0T2xkKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpLCBjYWNo
ZWRSZWNvdmVyeSk7CisgICAgcmV0dXJuIGNhY2hlZFJlY292ZXJ5OworfQorCit2b2lkIENhbGxG
cmFtZVNodWZmbGVyOjpzcGlsbChDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3ZlcnkpCit7Cisg
ICAgQVNTRVJUKCFpc1Nsb3dQYXRoKCkpOworICAgIEFTU0VSVChjYWNoZWRSZWNvdmVyeS5yZWNv
dmVyeSgpLmlzSW5SZWdpc3RlcnMoKSk7CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3BpbGxTbG90
IHsgMCB9OworICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIHNsb3QgPSBmaXJzdE9sZCgpOyBzbG90
IDw9IGxhc3RPbGQoKTsgc2xvdCAtPSAxKSB7CisgICAgICAgIEFTU0VSVChzbG90IDwgbmV3QXNP
bGQoZmlyc3ROZXcoKSkpOworICAgICAgICBpZiAoZ2V0T2xkKHNsb3QpKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgc3BpbGxTbG90ID0gc2xvdDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIC8vIFdlIG11c3QgaGF2ZSBlbm91Z2ggc2xvdHMgdG8gYmUgYWJsZSB0byBmaXQg
dGhlIHdob2xlCisgICAgLy8gY2FsbGVlJ3MgZnJhbWUgZm9yIHRoZSBzbG93IHBhdGguCisgICAg
UkVMRUFTRV9BU1NFUlQoc3BpbGxTbG90LmlzTG9jYWwoKSk7CisKKyAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgZGF0YUxvZygiICAgKiBTcGlsbGluZyAiLCBjYWNoZWRSZWNvdmVyeS5yZWNvdmVy
eSgpLCAiIGludG8gIiwgc3BpbGxTbG90LCAiXG4iKTsKKyAgICBhdXRvIGZvcm1hdCA9IGVtaXRT
dG9yZShjYWNoZWRSZWNvdmVyeSwgYWRkcmVzc0Zvck9sZChzcGlsbFNsb3QpKTsKKyAgICBBU1NF
UlQoZm9ybWF0ICE9IERhdGFGb3JtYXROb25lKTsKKyAgICB1cGRhdGVSZWNvdmVyeShjYWNoZWRS
ZWNvdmVyeSwgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKHNwaWxsU2xvdCwgZm9y
bWF0KSk7Cit9CisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXREZWx0YUNoZWNrKCkKK3sK
KyAgICBpZiAoQVNTRVJUX0RJU0FCTEVEKQorICAgICAgICByZXR1cm47CisKKyAgICBHUFJSZWcg
c2NyYXRjaEdQUiB7IGdldEZyZWVHUFIoKSB9OworICAgIGlmIChzY3JhdGNoR1BSICE9IEludmFs
aWRHUFJSZWcpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIg
IFVzaW5nICIsIHNjcmF0Y2hHUFIsICIgZm9yIHRoZSBmcC1zcCBkZWx0YSBjaGVja1xuIik7Cisg
ICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgbV9qaXQuc3ViUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb2sgPSBtX2pp
dC5icmFuY2gzMigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgc2NyYXRjaEdQ
UiwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLW51bUxvY2Fscygp
ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgICAgICBtX2ppdC5hYm9ydFdpdGhSZWFzb24oSklU
VW5leHBlY3RlZENhbGxGcmFtZVNpemUpOworICAgICAgICBvay5saW5rKCZtX2ppdCk7CisgICAg
fSBlbHNlIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCIgIFNraXBwaW5nIHRoZSBmcC1z
cCBkZWx0YSBjaGVjayBzaW5jZSB0aGVyZSBpcyB0b28gbXVjaCBwcmVzc3VyZSIpOworfQorCit2
b2lkIENhbGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlRm9yU2xvd1BhdGgoKQoreworICAgIEFTU0VS
VChpc1VuZGVjaWRlZCgpKTsKKyAgICBlbWl0RGVsdGFDaGVjaygpOworCisgICAgbV9mcmFtZURl
bHRhID0gbnVtTG9jYWxzKCkgKyBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZTsKKyAgICBt
X25ld0ZyYW1lQmFzZSA9IE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlcjsKKyAg
ICBtX25ld0ZyYW1lT2Zmc2V0ID0gLUpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplOworCisg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIlxuXG5QcmVwYXJpbmcgZnJhbWUgZm9y
IHNsb3cgcGF0aCBjYWxsOlxuIiwgKnRoaXMpOworCisgICAgcHJlcGFyZUFueSgpOworCisgICAg
aWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIlJlYWR5IGZvciBzbG93IHBhdGggY2FsbCFc
biIpOworfQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlRm9yVGFpbENhbGwoKQor
eworICAgIEFTU0VSVChpc1VuZGVjaWRlZCgpKTsKKyAgICBlbWl0RGVsdGFDaGVjaygpOworCisg
ICAgLy8gV2UnbGwgdXNlIHNwLWJhc2VkIGluZGV4aW5nIHNvIHRoYXQgd2UgY2FuIGxvYWQgdGhl
CisgICAgLy8gY2FsbGVyJ3MgZnJhbWUgcG9pbnRlciBpbnRvIHRoZSBmcHIgaW1tZWRpYXRlbHkK
KyAgICBtX29sZEZyYW1lQmFzZSA9IE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rl
cjsKKyAgICBtX29sZEZyYW1lT2Zmc2V0ID0gbnVtTG9jYWxzKCk7CisgICAgbV9uZXdGcmFtZUJh
c2UgPSBhY3F1aXJlR1BSKCk7CisjaWYgQ1BVKFg4NikKKyAgICAvLyBXZSBsb2FkIHRoZSBmcmFt
ZSBwb2ludGVyIG1hbnVhbGx5LCBidXQgd2UgbmVlZCB0byBhc2sgdGhlCisgICAgLy8gYWxnb3Jp
dGhtIHRvIG1vdmUgdGhlIHJldHVybiBQQyBmb3IgdXMgKGl0J2QgcHJvYmFibHkKKyAgICAvLyBy
ZXF1aXJlIGEgd3JpdGUgdG8gdGhlIGRhbmdlciB6b25lKS4gU2luY2UgaXQnZCBiZSBhd2t3YXJk
CisgICAgLy8gdG8gYXNrIGZvciBoYWxmIGEgdmFsdWUgbW92ZSwgd2UgYXNrIHRoYXQgdGhlIHdo
b2xlIHRoaW5nCisgICAgLy8gYmUgbW92ZWQgZm9yIHVzLgorICAgIGFkZE5ldyhWaXJ0dWFsUmVn
aXN0ZXIgeyAwIH0sCisgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjayhW
aXJ0dWFsUmVnaXN0ZXIoMCksIERhdGFGb3JtYXRKUykpOworCisgICAgLy8gc3Agd2lsbCBwb2lu
dCB0byBoZWFkMCBhbmQgd2Ugd2lsbCBtb3ZlIGl0IHVwIGhhbGYgYSBzbG90CisgICAgLy8gbWFu
dWFsbHkKKyAgICBtX25ld0ZyYW1lT2Zmc2V0ID0gMDsKKyNlbGlmIENQVShBUk0pIHx8IENQVShT
SDQpIHx8IENQVShNSVBTKQorICAgIC8vIFdlIGxvYWQgdGhlIHRoZSBmcmFtZSBwb2ludGVyIGFu
ZCBsaW5rIHJlZ2lzdGVyCisgICAgLy8gbWFudWFsbHkuIFdlIGNvdWxkIGFzayB0aGUgYWxnb3Jp
dGhtIHRvIGxvYWQgdGhlbSBmb3IgdXMsCisgICAgLy8gYW5kIGl0IHdvdWxkIGFsbG93IHVzIHRv
IHVzZSB0aGUgbGluayByZWdpc3RlciBhcyBhbiBleHRyYQorICAgIC8vIHRlbXBvcmFyeSAtIGJ1
dCBpdCdkIG1lYW4gdGhhdCB0aGUgZnJhbWUgcG9pbnRlciBjYW4gYWxzbworICAgIC8vIGJlIHVz
ZWQgYXMgYW4gZXh0cmEgdGVtcG9yYXJ5LCBzbyB3ZSBrZWVwIHRoZSBsaW5rIHJlZ2lzdGVyCisg
ICAgLy8gbG9ja2VkIGluc3RlYWQuCisKKyAgICAvLyBzcCB3aWxsIHBvaW50IHRvIGhlYWQxIHNp
bmNlIHRoZSBjYWxsZWUncyBwcm9sb2d1ZSBwdXNoZXMKKyAgICAvLyB0aGUgY2FsbCBmcmFtZSBh
bmQgbGluayByZWdpc3Rlci4KKyAgICBtX25ld0ZyYW1lT2Zmc2V0ID0gLTE7CisjZWxpZiBDUFUo
QVJNNjQpCisgICAgLy8gV2UgbG9hZCB0aGUgZnJhbWUgcG9pbnRlciBhbmQgbGluayByZWdpc3Rl
ciBtYW51YWxseS4gV2UKKyAgICAvLyBjb3VsZCBhc2sgdGhlIGFsZ29yaXRobSB0byBsb2FkIHRo
ZSBsaW5rIHJlZ2lzdGVyIGZvciB1cworICAgIC8vICh3aGljaCB3b3VsZCBhbGxvdyBmb3IgaXRz
IHVzZSBhcyBhbiBleHRyYSB0ZW1wb3JhcnkpLCBidXQKKyAgICAvLyBzaW5jZSBpdHMgbm90IGlu
IEdQUkluZm8sIHdlIGNhbid0IGRvIGl0LgorCisgICAgLy8gc3Agd2lsbCBwb2ludCB0byBoZWFk
MiBzaW5jZSB0aGUgY2FsbGVlJ3MgcHJvbG9ndWUgcHVzaGVzIHRoZQorICAgIC8vIGNhbGwgZnJh
bWUgYW5kIGxpbmsgcmVnaXN0ZXIKKyAgICBtX25ld0ZyYW1lT2Zmc2V0ID0gLTI7CisjZWxpZiBD
UFUoWDg2XzY0KQorICAgIC8vIFdlIGxvYWQgdGhlIGZyYW1lIHBvaW50ZXIgbWFudWFsbHksIGJ1
dCB3ZSBhc2sgdGhlCisgICAgLy8gYWxnb3JpdGhtIHRvIG1vdmUgdGhlIHJldHVybiBQQyBmb3Ig
dXMgKGl0J2QgcHJvYmFibHkKKyAgICAvLyByZXF1aXJlIGEgd3JpdGUgaW4gdGhlIGRhbmdlciB6
b25lKQorICAgIGFkZE5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyAxIH0sCisgICAgICAgIFZhbHVlUmVj
b3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjayhWaXJ0dWFsUmVnaXN0ZXIoMSksIERhdGFGb3JtYXRK
UykpOworCisgICAgLy8gc3Agd2lsbCBwb2ludCB0byBoZWFkMSBzaW5jZSB0aGUgY2FsbGVlJ3Mg
cHJvbG9ndWUgcHVzaGVzCisgICAgLy8gdGhlIGNhbGwgZnJhbWUgcmVnaXN0ZXIKKyAgICBtX25l
d0ZyYW1lT2Zmc2V0ID0gLTE7CisjZWxzZQorICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgp
OworI2VuZGlmCisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiICBFbWl0dGlu
ZyBjb2RlIGZvciBjb21wdXRpbmcgdGhlIG5ldyBmcmFtZSBiYXNlXG4iKTsKKworICAgIC8vIFdl
IGNvbXB1dGUgdGhlIG5ldyBmcmFtZSBiYXNlIGJ5IGZpcnN0IGNvbXB1dGluZyB0aGUgdG9wIG9m
IHRoZQorICAgIC8vIG9sZCBmcmFtZSAodGFraW5nIGludG8gYWNjb3VudCBhbiBhcmd1bWVudCBj
b3VudCBoaWdoZXIgdGhhbgorICAgIC8vIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyksIHRoZW4g
c3Vic3RyYWN0aW5nIHRvIGl0IHRoZSBhbGlnbmVkCisgICAgLy8gbmV3IGZyYW1lIHNpemUgKGFk
anVzdGVkKS4KKyAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCksIG1fbmV3RnJhbWVCYXNl
KTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBhcmd1bWVudENvdW50T0sgPQorICAgICAgICBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsLCBtX25ld0ZyYW1lQmFz
ZSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobV9qaXQuY29kZUJs
b2NrKCktPm51bVBhcmFtZXRlcnMoKSkpOworICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSAtIDEgKyBKU1N0YWNrOjpD
YWxsRnJhbWVIZWFkZXJTaXplKSwgbV9uZXdGcmFtZUJhc2UpOworICAgIG1faml0LmFuZDMyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLXN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkpLCBt
X25ld0ZyYW1lQmFzZSk7CisgICAgbV9qaXQubXVsMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMihzaXplb2YoUmVnaXN0ZXIpKSwgbV9uZXdGcmFtZUJhc2UsIG1fbmV3RnJhbWVCYXNlKTsK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgIGFyZ3Vt
ZW50Q291bnRPSy5saW5rKCZtX2ppdCk7CisgICAgbV9qaXQubW92ZSgKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtX2FsaWduZWRPbGRGcmFtZVNpemUgKiBzaXplb2YoUmVn
aXN0ZXIpKSwKKyAgICAgICAgbV9uZXdGcmFtZUJhc2UpOworICAgIGRvbmUubGluaygmbV9qaXQp
OworCisgICAgbV9qaXQuYWRkUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBtX25ld0Zy
YW1lQmFzZSk7CisgICAgbV9qaXQuc3ViUHRyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKAorICAgICAgICAgICAgKG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZSArIG1fbmV3RnJh
bWVPZmZzZXQpICogc2l6ZW9mKFJlZ2lzdGVyKSksIAorICAgICAgICBtX25ld0ZyYW1lQmFzZSk7
CisKKyAgICAvLyBXZSBsb2FkIHRoZSBsaW5rIHJlZ2lzdGVyIG1hbnVhbGx5IGZvciBhcmNoaXRl
Y3R1cmVzIHRoYXQgaGF2ZSBvbmUKKyNpZiBDUFUoQVJNKSB8fCBDUFUoU0g0KSB8fCBDUFUoQVJN
NjQpCisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2Vt
Ymxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIHNpemVvZih2b2lkKikpLAorICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6bGlua1JlZ2lzdGVyKTsKKyNlbGlmIENQVShNSVBTKQorICAgIG1faml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRl
clJlZ2lzdGVyLCBzaXplb2Yodm9pZCopKSwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJldHVy
bkFkZHJlc3NSZWdpc3Rlcik7CisjZW5kaWYKKworICAgIC8vIFdlIHdhbnQgdGhlIGZyYW1lIHBv
aW50ZXIgdG8gYWx3YXlzIHBvaW50IHRvIGEgdmFsaWQgZnJhbWUsIGFuZAorICAgIC8vIHdlIGFy
ZSBnb2luZyB0byB0cmFzaCB0aGUgY3VycmVudCBvbmUuIExldCdzIG1ha2UgaXQgcG9pbnQgdG8K
KyAgICAvLyBvdXIgY2FsbGVyJ3MgZnJhbWUsIHNpbmNlIHRoYXQncyB3aGF0IHdlIHdhbnQgdG8g
ZW5kIHVwIHdpdGguCisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhN
YWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIpLAorICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
IGRhdGFMb2coIlByZXBhcmluZyBmcmFtZSBmb3IgdGFpbCBjYWxsOlxuIiwgKnRoaXMpOworCisg
ICAgcHJlcGFyZUFueSgpOworCisjaWYgQ1BVKFg4NikKKyAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgZGF0YUxvZygiICBTaW11bGF0aW5nIHBvcCBvZiB0aGUgY2FsbCBmcmFtZSByZWdpc3Rlclxu
Iik7CisgICAgbV9qaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9m
KHZvaWQqKSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisjZW5kaWYK
KworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJSZWFkeSBmb3IgdGFpbCBjYWxs
IVxuIik7Cit9CisKK2Jvb2wgQ2FsbEZyYW1lU2h1ZmZsZXI6OnRyeVdyaXRlcyhDYWNoZWRSZWNv
dmVyeSYgY2FjaGVkUmVjb3ZlcnkpCit7CisgICAgQVNTRVJUKG1fbmV3RnJhbWVCYXNlICE9IElu
dmFsaWRHUFJSZWcpOworCisgICAgLy8gSWYgdGhlIHZhbHVlIGlzIGFscmVhZHkgc2V0IHVwIGNv
cnJlY3RseSwgd2UgZG9uJ3QgaGF2ZQorICAgIC8vIGFueXRoaW5nIHRvIGRvLgorICAgIGlmIChp
c1Nsb3dQYXRoKCkgJiYgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5pc0luSlNTdGFjaygpCisg
ICAgICAgICYmIGNhY2hlZFJlY292ZXJ5LnRhcmdldHMoKS5zaXplKCkgPT0gMQorICAgICAgICAm
JiBuZXdBc09sZChjYWNoZWRSZWNvdmVyeS50YXJnZXRzKClbMF0pID09IGNhY2hlZFJlY292ZXJ5
LnJlY292ZXJ5KCkudmlydHVhbFJlZ2lzdGVyKCkpIHsKKyAgICAgICAgY2FjaGVkUmVjb3Zlcnku
Y2xlYXJUYXJnZXRzKCk7CisgICAgICAgIGlmICghY2FjaGVkUmVjb3Zlcnkud2FudGVkSlNWYWx1
ZVJlZ3MoKSAmJiBjYWNoZWRSZWNvdmVyeS53YW50ZWRGUFIoKSA9PSBJbnZhbGlkRlBSUmVnKQor
ICAgICAgICAgICAgY2xlYXJDYWNoZWRSZWNvdmVyeShjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgp
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKCFjYW5Mb2FkQW5kQm94
KGNhY2hlZFJlY292ZXJ5KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZW1pdExvYWQo
Y2FjaGVkUmVjb3ZlcnkpOworICAgIGVtaXRCb3goY2FjaGVkUmVjb3ZlcnkpOworICAgIEFTU0VS
VChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmlzSW5SZWdpc3RlcnMoKQorICAgICAgICB8fCBj
YWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmlzQ29uc3RhbnQoKSk7CisKKyAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgZGF0YUxvZygiICAgKiBTdG9yaW5nICIsIGNhY2hlZFJlY292ZXJ5LnJlY292
ZXJ5KCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FjaGVkUmVjb3ZlcnkudGFyZ2V0
cygpLnNpemUoKTsgKytpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB0YXJnZXQgeyBjYWNo
ZWRSZWNvdmVyeS50YXJnZXRzKClbaV0gfTsKKyAgICAgICAgQVNTRVJUKCFpc0Rhbmdlck5ldyh0
YXJnZXQpKTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCFpID8g
IiBpbnRvICIgOiAiLCBhbmQgIiwgIk5FVyAiLCB0YXJnZXQpOworICAgICAgICBlbWl0U3RvcmUo
Y2FjaGVkUmVjb3ZlcnksIGFkZHJlc3NGb3JOZXcodGFyZ2V0KSk7CisgICAgICAgIHNldE5ldyh0
YXJnZXQsIG51bGxwdHIpOworICAgIH0KKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxv
ZygiXG4iKTsKKyAgICBjYWNoZWRSZWNvdmVyeS5jbGVhclRhcmdldHMoKTsKKyAgICBpZiAoIWNh
Y2hlZFJlY292ZXJ5LndhbnRlZEpTVmFsdWVSZWdzKCkgJiYgY2FjaGVkUmVjb3Zlcnkud2FudGVk
RlBSKCkgPT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgY2xlYXJDYWNoZWRSZWNvdmVyeShjYWNo
ZWRSZWNvdmVyeS5yZWNvdmVyeSgpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENh
bGxGcmFtZVNodWZmbGVyOjpwZXJmb3JtU2FmZVdyaXRlcygpCit7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGZpcnN0U2FmZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW5kIHsgbGFzdE5ldygpICsgMSB9
OworICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+IGZhaWx1cmVzOworCisgICAgLy8gRm9yIGFs
bCBjYWNoZWRSZWNvdmVyaWVzIHRoYXQgd3JpdGVzIHRvIHRoZSBzYWZlIHpvbmUsIGlmIGl0Cisg
ICAgLy8gZG9lc24ndCBhbHNvIHdyaXRlIHRvIHRoZSBkYW5nZXIgem9uZSwgd2UgdHJ5IHRvIHBl
cmZvcm0KKyAgICAvLyB0aGUgd3JpdGVzLiBUaGlzIG1heSBmcmVlIHVwIGRhbmdlciBzbG90cywg
c28gd2UgaXRlcmF0ZQorICAgIC8vIGFnYWluIHVudGlsIGl0IGRvZXNuJ3QgaGFwcGVuIGFueW1v
cmUuCisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgZXZlbiB0aG91Z2ggd2UgaGF2ZSBhIHdoaWxl
IGJsb2NrLCB3ZSBsb29rIGF0CisgICAgLy8gZWFjaCBzbG90IG9mIHRoZSBuZXcgY2FsbCBmcmFt
ZSBhdCBtb3N0IG9uY2Ugc2luY2UgaW4gZWFjaAorICAgIC8vIGl0ZXJhdGlvbiBiZXlvbmQgdGhl
IGZpcnN0LCB3ZSBvbmx5IGxvYWQgdXAgdGhlIHBvcnRpb24gb2YKKyAgICAvLyB0aGUgbmV3IGNh
bGwgZnJhbWUgdGhhdCB3YXMgZGFuZ2Vyb3VzIGFuZCBiZWNhbWUgc2FmZSBkdWUKKyAgICAvLyB0
byB0aGUgcHJldmlvdXMgaXRlcmF0aW9uLgorICAgIGRvIHsKKyAgICAgICAgZmlyc3RTYWZlID0g
ZGFuZ2VyRnJvbnRpZXIoKSArIDE7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAg
ZGF0YUxvZygiICBUcnlpbmcgc2FmZSB3cml0ZXMgKGJldHdlZW4gTkVXICIsIGZpcnN0U2FmZSwg
IiBhbmQgTkVXICIsIGVuZCAtIDEsICIpXG4iKTsKKyAgICAgICAgYm9vbCBkaWRQcm9ncmVzcyA9
IGZhbHNlOworICAgICAgICBmb3IgKFZpcnR1YWxSZWdpc3RlciByZWcgPSBmaXJzdFNhZmU7IHJl
ZyA8IGVuZDsgcmVnICs9IDEpIHsKKyAgICAgICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRS
ZWNvdmVyeSA9IGdldE5ldyhyZWcpOworICAgICAgICAgICAgaWYgKCFjYWNoZWRSZWNvdmVyeSkg
eworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICArICIsIHJlZywgIiBpcyBPSy5cbiIpOworICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFoYXNPbmx5U2FmZVdyaXRlcygqY2Fj
aGVkUmVjb3ZlcnkpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiICAgLSAiLCBjYWNoZWRSZWNvdmVyeS0+cmVjb3ZlcnkoKSwg
IiB3cml0ZXMgdG8gTkVXICIsIHJlZywKKyAgICAgICAgICAgICAgICAgICAgICAgICIgYnV0IGFs
c28gaGFzIGRhbmdlcm91cyB3cml0ZXMuXG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2FjaGVk
UmVjb3ZlcnktPndhbnRlZEpTVmFsdWVSZWdzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAtICIsIGNhY2hlZFJlY292
ZXJ5LT5yZWNvdmVyeSgpLCAiIHdyaXRlcyB0byBORVcgIiwgcmVnLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIiBidXQgaXMgYWxzbyBuZWVkZWQgaW4gcmVnaXN0ZXJzLlxuIik7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKGNhY2hlZFJlY292ZXJ5LT53YW50ZWRGUFIoKSAhPSBJbnZhbGlkRlBSUmVn
KSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiICAgLSAiLCBjYWNoZWRSZWNvdmVyeS0+cmVjb3ZlcnkoKSwgIiB3cml0ZXMgdG8g
TkVXICIsIHJlZywKKyAgICAgICAgICAgICAgICAgICAgICAgICIgYnV0IGlzIGFsc28gbmVlZGVk
IGluIGFuIEZQUi5cbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghdHJ5V3JpdGVzKCpjYWNoZWRS
ZWNvdmVyeSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiICAgLSBVbmFibGUgdG8gd3JpdGUgdG8gTkVXICIsIHJlZywgIiBmcm9t
ICIsIGNhY2hlZFJlY292ZXJ5LT5yZWNvdmVyeSgpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBm
YWlsdXJlcy5hcHBlbmQocmVnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRpZFByb2dy
ZXNzID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbmQgPSBmaXJzdFNhZmU7CisKKyAgICAg
ICAgLy8gSWYgd2UgaGF2ZSBjYWNoZWRSZWNvdmVyaWVzIHRoYXQgZmFpbGVkIHRvIHdyaXRlLCBp
dCBpcworICAgICAgICAvLyBiZWNhdXNlIHRoZXkgYXJlIG9uIHRoZSBzdGFjayBhbmQgd2UgZGlk
bid0IGhhdmUgZW5vdWdoCisgICAgICAgIC8vIHJlZ2lzdGVycyBhdmFpbGFibGUgYXQgdGhlIHRp
bWUgdG8gbG9hZCB0aGVtIGludG8uIElmCisgICAgICAgIC8vIHdlIGhhdmUgYSBmcmVlIHJlZ2lz
dGVyLCB3ZSBzaG91bGQgdHJ5IGFnYWluIGJlY2F1c2UgaXQKKyAgICAgICAgLy8gY291bGQgZnJl
ZSB1cCBzb21lIGRhbmdlciBzbG90cy4KKyAgICAgICAgaWYgKGRpZFByb2dyZXNzICYmIGhhc0Zy
ZWVSZWdpc3RlcigpKSB7CisgICAgICAgICAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyPiBzdGls
bEZhaWxpbmc7CisgICAgICAgICAgICBmb3IgKFZpcnR1YWxSZWdpc3RlciBmYWlsZWQgOiBmYWls
dXJlcykgeworICAgICAgICAgICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSA9
IGdldE5ldyhmYWlsZWQpOworICAgICAgICAgICAgICAgIC8vIEl0IGNvdWxkIGhhdmUgYmVlbiBo
YW5kbGVkIGxhdGVyIGlmIGl0IGhhZAorICAgICAgICAgICAgICAgIC8vIHNldmVyYWwgdGFyZ2V0
cworICAgICAgICAgICAgICAgIGlmICghY2FjaGVkUmVjb3ZlcnkpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgQVNTRVJUKGhhc09ubHlTYWZlV3JpdGVz
KCpjYWNoZWRSZWNvdmVyeSkKKyAgICAgICAgICAgICAgICAgICAgJiYgIWNhY2hlZFJlY292ZXJ5
LT53YW50ZWRKU1ZhbHVlUmVncygpCisgICAgICAgICAgICAgICAgICAgICYmIGNhY2hlZFJlY292
ZXJ5LT53YW50ZWRGUFIoKSA9PSBJbnZhbGlkRlBSUmVnKTsKKyAgICAgICAgICAgICAgICBpZiAo
IXRyeVdyaXRlcygqY2FjaGVkUmVjb3ZlcnkpKQorICAgICAgICAgICAgICAgICAgICBzdGlsbEZh
aWxpbmcuYXBwZW5kKGZhaWxlZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmYWlsdXJl
cyA9IFdURjo6bW92ZShzdGlsbEZhaWxpbmcpOworICAgICAgICB9CisgICAgICAgIGlmICh2ZXJi
b3NlICYmIGZpcnN0U2FmZSAhPSBkYW5nZXJGcm9udGllcigpICsgMSkKKyAgICAgICAgICAgIGRh
dGFMb2coIiAgV2UgZnJlZWQgdXAgZGFuZ2VyIHNsb3RzIVxuIik7CisgICAgfSB3aGlsZSAoZmly
c3RTYWZlICE9IGRhbmdlckZyb250aWVyKCkgKyAxKTsKKworICAgIHJldHVybiBmYWlsdXJlcy5p
c0VtcHR5KCk7Cit9CisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OnByZXBhcmVBbnkoKQorewor
ICAgIEFTU0VSVCghaXNVbmRlY2lkZWQoKSk7CisKKyAgICB1cGRhdGVEYW5nZXJGcm9udGllcigp
OworCisgICAgLy8gRmlyc3QsIHdlIHRyeSB0byBzdG9yZSBhbnkgdmFsdWUgdGhhdCBnb2VzIGFi
b3ZlIHRoZSBkYW5nZXIKKyAgICAvLyBmcm9udGllci4gVGhpcyB3aWxsIG5ldmVyIHVzZSBtb3Jl
IHJlZ2lzdGVycyBzaW5jZSB3ZSBhcmUgb25seQorICAgIC8vIGxvYWRpbmcrc3RvcmluZyBpZiB3
ZSBlbnN1cmUgdGhhdCBhbnkgcmVnaXN0ZXIgdXNlZCBmb3IgdGhlIGxvYWQKKyAgICAvLyB3aWxs
IGJlIGZyZWVkIHVwIGFmdGVyIHRoZSBzdG9yZXMgKGkuZS4sIGFsbCBzdG9yZXMgYXJlIGFib3Zl
CisgICAgLy8gdGhlIGRhbmdlciBmcm9udGllciwgYW5kIHRoZXJlIGlzIG5vIHdhbnRlZCByZWdp
c3RlcikuCisgICAgcGVyZm9ybVNhZmVXcml0ZXMoKTsKKworICAgIC8vIEF0IHRoaXMgcG9pbnQs
IHdlIGNvdWxkbid0IGhhdmUgbW9yZSBhdmFpbGFibGUgcmVnaXN0ZXJzIHRoYW4KKyAgICAvLyB3
ZSBoYXZlIHdpdGhvdXRoIHNwaWxsaW5nOiBhbGwgdmFsdWVzIGN1cnJlbnRseSBpbiByZWdpc3Rl
cnMKKyAgICAvLyBlaXRoZXIgcmVxdWlyZSBhIHdyaXRlIHRvIHRoZSBkYW5nZXIgem9uZSwgb3Ig
aGF2ZSBhIHdhbnRlZAorICAgIC8vIHJlZ2lzdGVyLCB3aGljaCBtZWFucyB0aGF0IGluIGFueSBj
YXNlIHRoZXkgd2lsbCBoYXZlIHRvIGdvCisgICAgLy8gdGhyb3VnaCByZWdpc3RlcnMgYWdhaW4u
CisKKyAgICAvLyBXZSBub3cgc2xvd2x5IGZyZWUgdXAgdGhlIGRhbmdlciB6b25lIGJ5IGZpcnN0
IGxvYWRpbmcgdGhlIG9sZAorICAgIC8vIHZhbHVlIG9uIHRoZSBkYW5nZXIgZnJvbnRpZXIsIHNw
aWxsaW5nIGFzIG1hbnkgcmVnaXN0ZXJzIGFzCisgICAgLy8gbmVlZGVkIHRvIGRvIHNvIGFuZCBl
bnN1cmluZyB0aGF0IHRoZSBjb3JyZXNwb25kaW5nIHNsb3QgaW4gdGhlCisgICAgLy8gbmV3IGZy
YW1lIGlzIG5vdyByZWFkeSB0byBiZSB3cml0dGVuLiBUaGVuLCB3ZSBzdG9yZSB0aGUgb2xkCisg
ICAgLy8gdmFsdWUgdG8gaXRzIHRhcmdldCBsb2NhdGlvbiBpZiBwb3NzaWJsZSAod2UgY291bGQg
aGF2ZSBmYWlsZWQKKyAgICAvLyB0byBsb2FkIGl0IHByZXZpb3VzbHkgZHVlIHRvIGhpZ2ggcHJl
c3N1cmUpLiBGaW5hbGx5LCB3ZSB3cml0ZQorICAgIC8vIHRvIGFueSBvZiB0aGUgbmV3bHkgc2Fm
ZSBzbG90cyB0aGF0IHdlIGNhbiwgd2hpY2ggY291bGQgZnJlZSB1cAorICAgIC8vIHJlZ2lzdGVy
cyAoaGVuY2Ugd2h5IHdlIGRvIGl0IGVhZ2VybHkpLgorICAgIGZvciAoVmlydHVhbFJlZ2lzdGVy
IHJlZyA9IGRhbmdlckZyb250aWVyKCk7IHJlZyA+PSBmaXJzdE5ldygpOyByZWcgLT0gMSkgewor
ICAgICAgICBpZiAocmVnID09IGRhbmdlckZyb250aWVyKCkpIHsKKyAgICAgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgTmV4dCBzbG90IChORVcgIiwgcmVn
LCAiKSBpcyB0aGUgZGFuZ2VyIGZyb250aWVyXG4iKTsKKyAgICAgICAgICAgIENhY2hlZFJlY292
ZXJ5KiBjYWNoZWRSZWNvdmVyeSB7IGdldE9sZChuZXdBc09sZChkYW5nZXJGcm9udGllcigpKSkg
fTsKKyAgICAgICAgICAgIEFTU0VSVChjYWNoZWRSZWNvdmVyeSk7CisgICAgICAgICAgICBlbnN1
cmVMb2FkKCpjYWNoZWRSZWNvdmVyeSk7CisgICAgICAgICAgICBlbWl0TG9hZCgqY2FjaGVkUmVj
b3ZlcnkpOworICAgICAgICAgICAgZW5zdXJlQm94KCpjYWNoZWRSZWNvdmVyeSk7CisgICAgICAg
ICAgICBlbWl0Qm94KCpjYWNoZWRSZWNvdmVyeSk7CisgICAgICAgICAgICBpZiAoaGFzT25seVNh
ZmVXcml0ZXMoKmNhY2hlZFJlY292ZXJ5KSkKKyAgICAgICAgICAgICAgICB0cnlXcml0ZXMoKmNh
Y2hlZFJlY292ZXJ5KTsKKyAgICAgICAgfSBlbHNlIGlmICh2ZXJib3NlKQorICAgICAgICAgICAg
ZGF0YUxvZygiICBOZXh0IHNsb3QgaXMgTkVXICIsIHJlZywgIlxuIik7CisKKyAgICAgICAgQVNT
RVJUKCFpc0Rhbmdlck5ldyhyZWcpKTsKKyAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJl
Y292ZXJ5ID0gZ2V0TmV3KHJlZyk7CisgICAgICAgIC8vIFRoaXMgY291bGQgYmUgb25lIG9mIHRo
ZSBoZWFkZXIgc2xvdHMgd2UgZG9uJ3QgY2FyZSBhYm91dC4KKyAgICAgICAgaWYgKCFjYWNoZWRS
ZWNvdmVyeSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0
YUxvZygiICAgKyAiLCByZWcsICIgaXMgT0tcbiIpOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoY2FuTG9hZEFuZEJveCgqY2FjaGVkUmVjb3ZlcnkpICYm
IGhhc09ubHlTYWZlV3JpdGVzKCpjYWNoZWRSZWNvdmVyeSkKKyAgICAgICAgICAgICYmICFjYWNo
ZWRSZWNvdmVyeS0+d2FudGVkSlNWYWx1ZVJlZ3MoKQorICAgICAgICAgICAgJiYgY2FjaGVkUmVj
b3ZlcnktPndhbnRlZEZQUigpID09IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgIGVtaXRM
b2FkKCpjYWNoZWRSZWNvdmVyeSk7CisgICAgICAgICAgICBlbWl0Qm94KCpjYWNoZWRSZWNvdmVy
eSk7CisgICAgICAgICAgICBib29sIHdyaXRlc09LID0gdHJ5V3JpdGVzKCpjYWNoZWRSZWNvdmVy
eSk7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHdyaXRlc09LLCB3cml0ZXNPSyk7CisgICAg
ICAgIH0gZWxzZSBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgIC0gIiwgY2Fj
aGVkUmVjb3ZlcnktPnJlY292ZXJ5KCksICIgY2FuJ3QgYmUgaGFuZGxlZCBqdXN0IHlldC5cbiIp
OworICAgIH0KKyAgICBBU1NFUlQoZGFuZ2VyRnJvbnRpZXIoKSA8IGZpcnN0TmV3KCkpOworCisg
ICAgLy8gTm93LCB0aGUgZGFuZ2VyIHpvbmUgaXMgZW1wdHksIGJ1dCB3ZSBzdGlsbCBoYXZlIGEg
Y291cGxlIG9mCisgICAgLy8gdGhpbmdzIHRvIGRvOgorICAgIC8vCisgICAgLy8gMSkgVGhlcmUg
Y291bGQgYmUgcmVtYWluaW5nIHNhZmUgd3JpdGVzIHRoYXQgZmFpbGVkIGVhcmxpZXIgZHVlCisg
ICAgLy8gICAgdG8gaGlnaCByZWdpc3RlciBwcmVzc3VyZSBhbmQgaGFkIG5vdGhpbmcgdG8gZG8g
d2l0aCB0aGUKKyAgICAvLyAgICBkYW5nZXIgem9uZSB3aGF0c29ldmVyLgorICAgIC8vCisgICAg
Ly8gMikgU29tZSB3YW50ZWQgcmVnaXN0ZXJzIGNvdWxkIGhhdmUgdG8gYmUgbG9hZGVkICh0aGlz
IGNvdWxkCisgICAgLy8gICAgaGFwcGVuIGVpdGhlciB3aGVuIG1ha2luZyBhIGNhbGwgdG8gYSBu
ZXcgZnVuY3Rpb24gd2l0aCBhCisgICAgLy8gICAgbG93ZXIgbnVtYmVyIG9mIGFyZ3VtZW50cyAt
IHNpbmNlIGFib3ZlIGhlcmUsIHdlIG9ubHkgbG9hZAorICAgIC8vICAgIHdhbnRlZCByZWdpc3Rl
cnMgd2hlbiB0aGV5IGFyZSBhdCB0aGUgZGFuZ2VyIGZyb250aWVyIC0sIG9yCisgICAgLy8gICAg
aWYgYSB3YW50ZWQgcmVnaXN0ZXIgZ290IHNwaWxsZWQpLgorICAgIC8vCisgICAgLy8gMykgU29t
ZSB3YW50ZWQgcmVnaXN0ZXJzIGNvdWxkIGhhdmUgYmVlbiBsb2FkZWQgaW4gdGhlIHdyb25nCisg
ICAgLy8gICAgcmVnaXN0ZXJzCisgICAgLy8KKyAgICAvLyA0KSBXZSBoYXZlIHRvIHRha2UgY2Fy
ZSBvZiBzb21lIGJvb2trZWVwaW5nIC0gbmFtZWx5LCBzdG9yaW5nCisgICAgLy8gICAgdGhlIGFy
Z3VtZW50IGNvdW50IGFuZCB1cGRhdGluZyB0aGUgc3RhY2sgcG9pbnRlci4KKworICAgIC8vIEF0
IHRoaXMgcG9pbnQsIHdlIG11c3QgaGF2ZSBlbm91Z2ggcmVnaXN0ZXJzIGF2YWlsYWJsZSBmb3IK
KyAgICAvLyBoYW5kbGluZyAxKS4gTm9uZSBvZiB0aGUgbG9hZHMgY2FuIGZhaWwgYmVjYXVzZSB3
ZSBoYXZlIGJlZW4KKyAgICAvLyBlYWdlcmx5IGZyZWVpbmcgdXAgcmVnaXN0ZXJzIGluIGFsbCB0
aGUgcHJldmlvdXMgcGhhc2VzIC0gc28KKyAgICAvLyB0aGUgb25seSB2YWx1ZXMgdGhhdCBhcmUg
aW4gcmVnaXN0ZXJzIGF0IHRoaXMgcG9pbnQgbXVzdCBoYXZlCisgICAgLy8gd2FudGVkIHJlZ2lz
dGVycy4KKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiICBEYW5nZXIgem9uZSBp
cyBjbGVhciwgcGVyZm9ybWluZyByZW1haW5pbmcgd3JpdGVzLlxuIik7CisgICAgZm9yIChWaXJ0
dWFsUmVnaXN0ZXIgcmVnID0gZmlyc3ROZXcoKTsgcmVnIDw9IGxhc3ROZXcoKTsgcmVnICs9IDEp
IHsKKyAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5IHsgZ2V0TmV3KHJlZykg
fTsKKyAgICAgICAgaWYgKCFjYWNoZWRSZWNvdmVyeSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIGVtaXRMb2FkKCpjYWNoZWRSZWNvdmVyeSk7CisgICAgICAgIGVtaXRCb3goKmNh
Y2hlZFJlY292ZXJ5KTsKKyAgICAgICAgYm9vbCB3cml0ZXNPSyA9IHRyeVdyaXRlcygqY2FjaGVk
UmVjb3ZlcnkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHdyaXRlc09LLCB3cml0ZXNPSyk7Cisg
ICAgfQorCisgICAgLy8gSGFuZGxlIDIpIGJ5IGxvYWRpbmcgYWxsIHJlZ2lzdGVycy4gV2UgZG9u
J3QgaGF2ZSB0byBkbyBhbnkKKyAgICAvLyB3cml0ZXMsIHNpbmNlIHRoZXkgaGF2ZSBiZWVuIHRh
a2VuIGNhcmUgb2YgYWJvdmUuCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIiAg
TG9hZGluZyB3YW50ZWQgcmVnaXN0ZXJzIGludG8gcmVnaXN0ZXJzXG4iKTsKKyAgICBmb3IgKFJl
ZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVnLm5leHQo
KSkgeworICAgICAgICBDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkgeyBtX25ld1JlZ2lz
dGVyc1tyZWddIH07CisgICAgICAgIGlmICghY2FjaGVkUmVjb3ZlcnkpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBlbWl0TG9hZCgqY2FjaGVkUmVjb3ZlcnkpOworICAgICAgICBl
bWl0Qm94KCpjYWNoZWRSZWNvdmVyeSk7CisgICAgICAgIEFTU0VSVChjYWNoZWRSZWNvdmVyeS0+
dGFyZ2V0cygpLmlzRW1wdHkoKSk7CisgICAgfQorCisgICAgLy8gQXQgdGhpcyBwb2ludCwgd2Ug
aGF2ZSByZWFkIGV2ZXJ5dGhpbmcgd2UgY2FyZWQgYWJvdXQgZnJvbSB0aGUKKyAgICAvLyBzdGFj
aywgYW5kIHdyaXR0ZW4gZXZlcnl0aGluZyB3ZSBoYWQgdG8gdG8gdGhlIHN0YWNrLgorICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCIgIENhbGxlZSBmcmFtZSBpcyBmdWxseSBzZXQg
dXBcbiIpOworICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgIGZvciAoVmlydHVh
bFJlZ2lzdGVyIHJlZyA9IGZpcnN0TmV3KCk7IHJlZyA8PSBsYXN0TmV3KCk7IHJlZyArPSAxKQor
ICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChyZWcsICFnZXROZXcocmVnKSk7CisKKyAgICAgICAg
Zm9yIChDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkgOiBtX2NhY2hlZFJlY292ZXJpZXMp
IHsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoY2FjaGVkUmVjb3ZlcnksIGNhY2hlZFJlY292
ZXJ5LT50YXJnZXRzKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghY2FjaGVkUmVj
b3ZlcnktPnJlY292ZXJ5KCkuaXNJbkpTU3RhY2soKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAvLyBXZSBuZWVkIHRvIGhhbmRsZSA0KSBmaXJzdCBiZWNhdXNlIGl0IGltcGxpZXMgcmVsZWFz
aW5nCisgICAgLy8gbV9uZXdGcmFtZUJhc2UsIHdoaWNoIGNvdWxkIGJlIGEgd2FudGVkIHJlZ2lz
dGVyLgorICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCIgICAqIFN0b3JpbmcgdGhl
IGFyZ3VtZW50IGNvdW50IGludG8gIiwgVmlydHVhbFJlZ2lzdGVyIHsgSlNTdGFjazo6QXJndW1l
bnRDb3VudCB9LCAiXG4iKTsKKyAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoMCksCisgICAgICAgIGFkZHJlc3NGb3JOZXcoVmlydHVhbFJlZ2lzdGVyIHsgSlNT
dGFjazo6QXJndW1lbnRDb3VudCB9KS53aXRoT2Zmc2V0KFRhZ09mZnNldCkpOworICAgIG1faml0
LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihhcmdDb3VudCgpKSwKKyAgICAg
ICAgYWRkcmVzc0Zvck5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyBKU1N0YWNrOjpBcmd1bWVudENvdW50
IH0pLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCkpOworCisgICAgaWYgKCFpc1Nsb3dQYXRoKCkp
IHsKKyAgICAgICAgQVNTRVJUKG1fbmV3RnJhbWVCYXNlICE9IE1hY3JvQXNzZW1ibGVyOjpzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0
YUxvZygiICBSZWxlYXNpbmcgdGhlIG5ldyBmcmFtZSBiYXNlIHBvaW50ZXJcbiIpOworICAgICAg
ICBtX2ppdC5tb3ZlKG1fbmV3RnJhbWVCYXNlLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworICAgICAgICByZWxlYXNlR1BSKG1fbmV3RnJhbWVCYXNlKTsKKyAgICB9CisK
KyAgICAvLyBGaW5hbGx5IHdlIGhhbmRsZSAzKQorICAgIGlmICh2ZXJib3NlKQorICAgICAgICBk
YXRhTG9nKCIgIEVuc3VyaW5nIHdhbnRlZCByZWdpc3RlcnMgYXJlIGluIHRoZSByaWdodCByZWdp
c3RlclxuIik7CisgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjps
YXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKKyAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hl
ZFJlY292ZXJ5IHsgbV9uZXdSZWdpc3RlcnNbcmVnXSB9OworICAgICAgICBpZiAoIWNhY2hlZFJl
Y292ZXJ5KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZW1pdERpc3BsYWNlKCpj
YWNoZWRSZWNvdmVyeSk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFt
ZVNodWZmbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxs
RnJhbWVTaHVmZmxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9DYWxsRnJhbWVTaHVmZmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODI1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQ2Fs
bEZyYW1lU2h1ZmZsZXJfaAorI2RlZmluZSBDYWxsRnJhbWVTaHVmZmxlcl9oCisKKyNpZiBFTkFC
TEUoSklUKQorCisjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaCIKKyNpbmNsdWRlICJN
YWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisjaW5jbHVkZSAiU3Rh
Y2tBbGlnbm1lbnQuaCIKKyNpbmNsdWRlICJWYWx1ZVJlY292ZXJ5LmgiCisjaW5jbHVkZSAiVmly
dHVhbFJlZ2lzdGVyLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlND
IHsKKworLy8gQSBDYWNoZWRSZWNvdmVyeSBpcyBhIHdyYXBwZXIgYXJvdW5kIGEgVmFsdWVSZWNv
dmVyeSB0aGF0IHJlY29yZHMgd2hlcmUgc2FpZAorLy8gdmFsdWUgc2hvdWxkIGdvIG9uIHRoZSBz
dGFjayBhbmQvb3IgaW4gcmVnaXN0ZXJzLiBXaGVuZXZlciB3ZSBwZXJmb3JtIGFuCisvLyBvcGVy
YXRpb24gY2hhbmdpbmcgdGhlIFZhbHVlUmVjb3ZlcnksIHdlIHVwZGF0ZSB0aGUgQ2FjaGVkUmVj
b3ZlcnkncyBtZW1iZXIKKy8vIGluIHBsYWNlLgorY2xhc3MgQ2FjaGVkUmVjb3ZlcnkgeworcHVi
bGljOgorICAgIENhY2hlZFJlY292ZXJ5KFZhbHVlUmVjb3ZlcnkgcmVjb3ZlcnkpCisgICAgICAg
IDogbV9yZWNvdmVyeSB7IHJlY292ZXJ5IH0KKyAgICB7CisgICAgfQorCisgICAgQ2FjaGVkUmVj
b3ZlcnkoQ2FjaGVkUmVjb3ZlcnkmKSA9IGRlbGV0ZTsKKyAgICBDYWNoZWRSZWNvdmVyeShDYWNo
ZWRSZWNvdmVyeSYmKSA9IGRlbGV0ZTsKKyAgICBDYWNoZWRSZWNvdmVyeSYgb3BlcmF0b3I9KENh
Y2hlZFJlY292ZXJ5JikgPSBkZWxldGU7CisgICAgQ2FjaGVkUmVjb3ZlcnkmIG9wZXJhdG9yPShD
YWNoZWRSZWNvdmVyeSYmKSA9IGRlbGV0ZTsKKworICAgIGNvbnN0IFZlY3RvcjxWaXJ0dWFsUmVn
aXN0ZXIsIDE+JiB0YXJnZXRzKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRzOyB9CisKKyAgICB2
b2lkIGFkZFRhcmdldChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KG1fdGFyZ2V0cy5pc0VtcHR5KCkgfHwgbV90YXJnZXRzLmxhc3QoKSA8IHJlZyk7CisgICAgICAg
IG1fdGFyZ2V0cy5hcHBlbmQocmVnKTsKKyAgICB9CisKKyAgICB2b2lkIHJlbW92ZVRhcmdldChW
aXJ0dWFsUmVnaXN0ZXIgcmVnKQorICAgIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyZWcsIG1f
dGFyZ2V0cy5sYXN0KCkgPT0gcmVnKTsKKyAgICAgICAgbV90YXJnZXRzLnNocmluayhtX3Rhcmdl
dHMuc2l6ZSgpIC0gMSk7CisgICAgfQorCisgICAgdm9pZCBjbGVhclRhcmdldHMoKQorICAgIHsK
KyAgICAgICAgbV90YXJnZXRzLmNsZWFyKCk7CisgICAgfQorCisgICAgdm9pZCBzZXRXYW50ZWRK
U1ZhbHVlUmVncyhKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncykKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX3dhbnRlZEZQUiA9PSBJbnZhbGlkRlBSUmVnKTsKKyAgICAgICAgbV93YW50ZWRKU1ZhbHVl
UmVncyA9IGpzVmFsdWVSZWdzOworICAgIH0KKworICAgIHZvaWQgc2V0V2FudGVkRlBSKEZQUlJl
ZyBmcHIpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fd2FudGVkSlNWYWx1ZVJlZ3MpOworICAg
ICAgICBtX3dhbnRlZEZQUiA9IGZwcjsKKyAgICB9CisKKyAgICAvLyBEZXRlcm1pbmUgd2hldGhl
ciBjb252ZXJ0aW5nIHRoaXMgcmVjb3ZlcnkgaW50byBhIEpTVmFsdWUgd2lsbAorICAgIC8vIHJl
cXVpcmUgYWRkaXRpb25hbCBHUFJzIGFuZC9vciBGUFJzLgorICAgIC8vIFRoaXMgaXMgZ3VhcmFu
dGVlZCB0byBvbmx5IGRlcGVuZCBvbiB0aGUgRGF0YUZvcm1hdCwgYW5kIHRoZQorICAgIC8vIHJl
c3VsdCBvZiB0aGVzZSBjYWxscyB3aWxsIHN0YXkgdmFsaWQgYWZ0ZXIgbG9hZHMgYW5kL29yIHN0
b3Jlcy4KKyAgICBib29sIGJveGluZ1JlcXVpcmVzR1BSKCkgY29uc3QKKyAgICB7CisjaWYgVVNF
KEpTVkFMVUU2NCkKKyAgICAgICAgcmV0dXJuIHJlY292ZXJ5KCkuZGF0YUZvcm1hdCgpID09IERh
dGFGb3JtYXREb3VibGU7CisjZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAg
ICB9CisgICAgYm9vbCBib3hpbmdSZXF1aXJlc0ZQUigpIGNvbnN0CisgICAgeworI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkoKS5kYXRhRm9ybWF0KCkpIHsKKyAg
ICAgICAgY2FzZSBEYXRhRm9ybWF0SW50NTI6CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdFN0cmlj
dEludDUyOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworI2VuZGlmCisgICAgfQorICAgIAorICAgIC8vIFRoaXMgaXMgdXNlZCB0byBkZXRl
cm1pbmUgd2hhdCBraW5kIG9mIHJlZ2lzdGVyIHdlIG5lZWQgdG8gYmUKKyAgICAvLyBhYmxlIHRv
IGxvYWQgYSByZWNvdmVyeS4gV2Ugb25seSB1c2UgaXQgd2hlbiBhIGRpcmVjdCBsb2FkIGlzCisg
ICAgLy8gY3VycmVudGx5IGltcG9zc2libGUsIHRvIGRldGVybWluZSB3aGV0aGVyIHdlIHNob3Vs
ZCBzcGlsbCBhCisgICAgLy8gR1BSIG9yIGFuIEZQUiBmb3IgbG9hZGluZyB0aGlzIHZhbHVlLgor
ICAgIGJvb2wgbG9hZHNJbnRvR1BSKCkgY29uc3Q7CisgICAgYm9vbCBsb2Fkc0ludG9GUFIoKSBj
b25zdDsKKworICAgIFZhbHVlUmVjb3ZlcnkgcmVjb3ZlcnkoKSBjb25zdCB7IHJldHVybiBtX3Jl
Y292ZXJ5OyB9CisKKyAgICB2b2lkIHNldFJlY292ZXJ5KFZhbHVlUmVjb3ZlcnkgcmVjb3Zlcnkp
IHsgbV9yZWNvdmVyeSA9IHJlY292ZXJ5OyB9CisKKyAgICBKU1ZhbHVlUmVncyB3YW50ZWRKU1Zh
bHVlUmVncygpIGNvbnN0IHsgcmV0dXJuIG1fd2FudGVkSlNWYWx1ZVJlZ3M7IH0KKworICAgIEZQ
UlJlZyB3YW50ZWRGUFIoKSBjb25zdCB7IHJldHVybiBtX3dhbnRlZEZQUjsgfQorcHJpdmF0ZToK
KyAgICBWYWx1ZVJlY292ZXJ5IG1fcmVjb3Zlcnk7CisgICAgSlNWYWx1ZVJlZ3MgbV93YW50ZWRK
U1ZhbHVlUmVnczsKKyAgICBGUFJSZWcgbV93YW50ZWRGUFIgeyBJbnZhbGlkRlBSUmVnIH07Cisg
ICAgVmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgMT4gbV90YXJnZXRzOworfTsKKworY2xhc3MgQ2Fs
bEZyYW1lU2h1ZmZsZXIgeworcHVibGljOgorICAgIENhbGxGcmFtZVNodWZmbGVyKENDYWxsSGVs
cGVycyYsIGNvbnN0IENhbGxGcmFtZVNodWZmbGVEYXRhJik7CisKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKworICAgIC8vIEFueSByZWdpc3RlciB0aGF0IGhhcyBiZWVuIGxv
Y2tlZCBvciBhY3F1aXJlZCBtdXN0IGJlIHJlbGVhc2VkCisgICAgLy8gYmVmb3JlIGNhbGxpbmcg
cHJlcGFyZUZvclRhaWxDYWxsKCkgb3IgcHJlcGFyZUZvclNsb3dQYXRoKCkuCisgICAgdm9pZCBs
b2NrR1BSKEdQUlJlZyBncHIpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fbG9ja2VkUmVnaXN0
ZXJzLmdldChncHIpKTsKKyAgICAgICAgbV9sb2NrZWRSZWdpc3RlcnMuc2V0KGdwcik7CisgICAg
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICAgKiBMb2NraW5nICIsIGdw
ciwgIlxuIik7CisgICAgfQorCisgICAgR1BSUmVnIGFjcXVpcmVHUFIoKQorICAgIHsKKyAgICAg
ICAgZW5zdXJlR1BSKCk7CisgICAgICAgIEdQUlJlZyBncHIgeyBnZXRGcmVlR1BSKCkgfTsKKyAg
ICAgICAgQVNTRVJUKCFtX3JlZ2lzdGVyc1tncHJdKTsKKyAgICAgICAgbG9ja0dQUihncHIpOwor
ICAgICAgICByZXR1cm4gZ3ByOworICAgIH0KKworICAgIHZvaWQgcmVsZWFzZUdQUihHUFJSZWcg
Z3ByKQorICAgIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgIGlmIChtX2xv
Y2tlZFJlZ2lzdGVycy5nZXQoZ3ByKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAqIFJl
bGVhc2luZyAiLCBncHIsICJcbiIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgICogIiwgZ3ByLCAiIHdhcyBub3QgbG9ja2VkXG4iKTsKKyAgICAgICAgfQor
ICAgICAgICBtX2xvY2tlZFJlZ2lzdGVycy5jbGVhcihncHIpOworICAgIH0KKworICAgIC8vIFlv
dSBjYW4gb25seSB0YWtlIGEgc25hcHNob3QgaWYgdGhlIHJlY292ZXJ5IGhhcyBub3Qgc3RhcnRl
ZAorICAgIC8vIHlldC4gVGhlIG9ubHkgb3BlcmF0aW9ucyB0aGF0IGFyZSB2YWxpZCBiZWZvcmUg
dGFraW5nIGEKKyAgICAvLyBzbmFwc2hvdCBhcmUgbG9ja0dQUigpLCBhY3F1aXJlR1BSKCkgYW5k
IHJlbGVhc2VHUFIoKS4KKyAgICAvLworICAgIC8vIExvY2tpbmcgc3RhdHVzIGlzICpOT1QqIHBy
ZXNlcnZlZCBieSB0aGUgc25hcHNob3Q6IGl0IG9ubHkKKyAgICAvLyBjb250YWlucyBpbmZvcm1h
dGlvbiBhYm91dCB3aGVyZSB0aGUKKyAgICAvLyBhcmd1bWVudHMvY2FsbGVlL2NhbGxlZS1zYXZl
IHJlZ2lzdGVycyBhcmUgYnkgdGFraW5nIGludG8KKyAgICAvLyBhY2NvdW50IGFueSBzcGlsbGlu
ZyB0aGF0IGFjcXVpcmVHUFIoKSBjb3VsZCBoYXZlIGRvbmUuCisgICAgQ2FsbEZyYW1lU2h1ZmZs
ZURhdGEgc25hcHNob3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzVW5kZWNpZGVk
KCkpOworCisgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIGRhdGE7CisgICAgICAgIGRhdGEu
bnVtTG9jYWxzID0gbnVtTG9jYWxzKCk7CisgICAgICAgIGRhdGEuY2FsbGVlID0gZ2V0TmV3KFZp
cnR1YWxSZWdpc3RlciB7IEpTU3RhY2s6OkNhbGxlZSB9KS0+cmVjb3ZlcnkoKTsKKyAgICAgICAg
ZGF0YS5hcmdzLnJlc2l6ZShhcmdDb3VudCgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBhcmdDb3VudCgpOyArK2kpCisgICAgICAgICAgICBkYXRhLmFyZ3NbaV0gPSBnZXROZXco
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpLT5yZWNvdmVyeSgpOworICAgICAgICBmb3Ig
KFJlZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVnLm5l
eHQoKSkgeworICAgICAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5IHsgbV9u
ZXdSZWdpc3RlcnNbcmVnXSB9OworICAgICAgICAgICAgaWYgKCFjYWNoZWRSZWNvdmVyeSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAg
ICBkYXRhLnJlZ2lzdGVyc1tyZWddID0gY2FjaGVkUmVjb3ZlcnktPnJlY292ZXJ5KCk7CisjZWxz
ZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorICAg
ICAgICB9CisgICAgICAgIHJldHVybiBXVEY6Om1vdmUoZGF0YSk7CisgICAgfQorCisgICAgLy8g
QXNrIHRoZSBzaHVmZmxlciB0byBwdXQgdGhlIGNhbGxlZSBpbnRvIHNvbWUgcmVnaXN0ZXJzIG9u
Y2UgdGhlCisgICAgLy8gc2h1ZmZsaW5nIGlzIGRvbmUuIFlvdSBzaG91bGQgY2FsbCB0aGlzIGJl
Zm9yZSBhbnkgb2YgdGhlCisgICAgLy8gcHJlcGFyZSgpIG1ldGhvZHMsIGFuZCBtdXN0IG5vdCB0
YWtlIGEgc25hcHNob3QgYWZ0ZXJ3YXJkcywgYXMKKyAgICAvLyB0aGlzIHdvdWxkIGNyYXNoIDMy
Yml0cyBwbGF0Zm9ybXMuCisgICAgdm9pZCBzZXRDYWxsZWVKU1ZhbHVlUmVncyhKU1ZhbHVlUmVn
cyBqc1ZhbHVlUmVncykKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1VuZGVjaWRlZCgpKTsKKyAg
ICAgICAgQVNTRVJUKCFnZXROZXcoanNWYWx1ZVJlZ3MpKTsKKyAgICAgICAgQ2FjaGVkUmVjb3Zl
cnkqIGNhY2hlZFJlY292ZXJ5IHsgZ2V0TmV3KFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpDYWxs
ZWUpKSB9OworICAgICAgICBBU1NFUlQoY2FjaGVkUmVjb3ZlcnkpOworICAgICAgICBhZGROZXco
anNWYWx1ZVJlZ3MsIGNhY2hlZFJlY292ZXJ5LT5yZWNvdmVyeSgpKTsKKyAgICB9CisKKyAgICAv
LyBBc2sgdGhlIHN1aGZmbGVyIHRvIGFzc3VtZSB0aGUgY2FsbGVlIGhhcyBhbHJlYWR5IGJlIGNo
ZWNrZWQgdG8KKyAgICAvLyBiZSBhIGNlbGwuIFRoaXMgaXMgYSBuby1vcCBvbiA2NGJpdCBwbGF0
Zm9ybXMsIGJ1dCBhbGxvd3MgdG8KKyAgICAvLyBmcmVlIHVwIGEgR1BSIG9uIDMyYml0IHBsYXRm
b3Jtcy4KKyAgICAvLyBZb3Ugb2J2aW91c2x5IG11c3QgaGF2ZSBlbnN1cmVkIHRoYXQgdGhpcyBp
cyB0aGUgY2FzZSBiZWZvcmUKKyAgICAvLyBydW5uaW5nIGFueSBvZiB0aGUgcHJlcGFyZSBtZXRo
b2RzLgorICAgIHZvaWQgYXNzdW1lQ2FsbGVlSXNDZWxsKCkKKyAgICB7CisjaWYgVVNFKEpTVkFM
VUUzMl82NCkKKyAgICAgICAgQ2FjaGVkUmVjb3ZlcnkmIGNhbGxlZUNhY2hlZFJlY292ZXJ5IHsg
KmdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6Q2FsbGVlKSkgfTsKKyAgICAgICAgc3dp
dGNoIChjYWxsZWVDYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLnRlY2huaXF1ZSgpKSB7CisgICAg
ICAgIGNhc2UgSW5QYWlyOgorICAgICAgICAgICAgdXBkYXRlUmVjb3ZlcnkoCisgICAgICAgICAg
ICAgICAgY2FsbGVlQ2FjaGVkUmVjb3ZlcnksCisgICAgICAgICAgICAgICAgVmFsdWVSZWNvdmVy
eTo6aW5HUFIoCisgICAgICAgICAgICAgICAgICAgIGNhbGxlZUNhY2hlZFJlY292ZXJ5LnJlY292
ZXJ5KCkucGF5bG9hZEdQUigpLAorICAgICAgICAgICAgICAgICAgICBEYXRhRm9ybWF0Q2VsbCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgor
ICAgICAgICAgICAgdXBkYXRlUmVjb3ZlcnkoCisgICAgICAgICAgICAgICAgY2FsbGVlQ2FjaGVk
UmVjb3ZlcnksCisgICAgICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0
YWNrKAorICAgICAgICAgICAgICAgICAgICBjYWxsZWVDYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgp
LnZpcnR1YWxSZWdpc3RlcigpLAorICAgICAgICAgICAgICAgICAgICBEYXRhRm9ybWF0Q2VsbCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5GUFI6CisgICAgICAgIGNhc2Ug
VW5ib3hlZENlbGxJbkdQUjoKKyAgICAgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5KU1N0YWNrOgor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29uc3RhbnQ6CisgICAgICAgICAgICBB
U1NFUlQoY2FsbGVlQ2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5jb25zdGFudCgpLmlzQ2VsbCgp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBUaGlzIHdpbGwgZW1pdCBjb2RlIHRvIGJ1aWxkIHRo
ZSBuZXcgZnJhbWUgb3ZlciB0aGUgb2xkIG9uZS4KKyAgICB2b2lkIHByZXBhcmVGb3JUYWlsQ2Fs
bCgpOworCisgICAgLy8gVGhpcyB3aWxsIGVtaXQgY29kZSB0byBidWlsZCB0aGUgbmV3IGZyYW1l
IGFzIGlmIHBlcmZvcm1pbmcgYQorICAgIC8vIHJlZ3VsYXIgY2FsbC4gSG93ZXZlciwgdGhlIGNh
bGxlZSBzYXZlIHJlZ2lzdGVycyB3aWxsIGJlCisgICAgLy8gcmVzdG9yZWQsIGFuZCBhbnkgbG9j
YWxzIChub3QgdGhlIGhlYWRlciBvciBhcmd1bWVudHMpIG9mIHRoZQorICAgIC8vIGN1cnJlbnQg
ZnJhbWUgY2FuIGJlIG92ZXJ3cml0dGVuLgorICAgIC8vCisgICAgLy8gQSBmcmFtZSBidWlsdCB1
c2luZyBwcmVwYXJlRm9yU2xvd1BhdGgoKSBzaG91bGQgYmUgdXNlZCBlaXRoZXIKKyAgICAvLyB0
byB0aHJvdyBhbiBleGNlcHRpb24gaW4sIG9yIGRlc3Ryb3llZCB1c2luZworICAgIC8vIENDYWxs
SGVscGVyczo6cHJlcGFyZUZvclRhaWxDYWxsU2xvdygpIGZvbGxvd2VkIGJ5IGEgdGFpbCBjYWxs
LgorICAgIHZvaWQgcHJlcGFyZUZvclNsb3dQYXRoKCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGlj
IGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCisgICAgQ0NhbGxIZWxwZXJzJiBtX2ppdDsK
KworICAgIHZvaWQgcHJlcGFyZUFueSgpOworCisgICAgdm9pZCBzcGlsbChDYWNoZWRSZWNvdmVy
eSYpOworCisgICAgLy8gImJveCIgaXMgYXJndWFibHkgYSBiYWQgbmFtZSBoZXJlLiBUaGUgbWVh
bmluZyBpcyB0aGF0IGFmdGVyCisgICAgLy8gY2FsbGluZyBlbWl0Qm94KCksIHlvdXIgZW5zdXJl
IHRoYXQgc3Vic2VxdWVudGx5IGNhbGxpbmcKKyAgICAvLyBlbWl0U3RvcmUoKSB3aWxsIGJlIGFi
bGUgdG8gc3RvcmUgdGhlIHZhbHVlIHdpdGhvdXQgYWRkaXRpb25hbAorICAgIC8vIHRyYW5zZm9y
bWF0aW9uLiBJbiBwYXJ0aWN1bGFyLCB0aGlzIGlzIGEgbm8tb3AgZm9yIGNvbnN0YW50cywKKyAg
ICAvLyBhbmQgaXMgYSBjb21wbGV0ZSBuby1vcCBvbiAzMmJpdHMgc2luY2UgYW55IHVuYm94ZWQg
dmFsdWUgY2FuCisgICAgLy8gc3RpbGwgYmUgc3RvcmVkIGJ5IHN0b3JpbmcgdGhlIHBheWxvYWQg
YW5kIGEgc3RhdGljYWxseSBrbm93bgorICAgIC8vIHRhZy4KKyAgICB2b2lkIGVtaXRCb3goQ2Fj
aGVkUmVjb3ZlcnkmKTsKKworICAgIGJvb2wgY2FuQm94KENhY2hlZFJlY292ZXJ5JiBjYWNoZWRS
ZWNvdmVyeSkKKyAgICB7CisgICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS5ib3hpbmdSZXF1aXJl
c0dQUigpICYmIGdldEZyZWVHUFIoKSA9PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS5ib3hpbmdSZXF1aXJlc0ZQ
UigpICYmIGdldEZyZWVGUFIoKSA9PSBJbnZhbGlkRlBSUmVnKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZvaWQgZW5zdXJl
Qm94KENhY2hlZFJlY292ZXJ5JiBjYWNoZWRSZWNvdmVyeSkKKyAgICB7CisgICAgICAgIGlmIChj
YW5Cb3goY2FjaGVkUmVjb3ZlcnkpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlm
IChjYWNoZWRSZWNvdmVyeS5ib3hpbmdSZXF1aXJlc0dQUigpKQorICAgICAgICAgICAgZW5zdXJl
R1BSKCk7CisKKyAgICAgICAgaWYgKGNhY2hlZFJlY292ZXJ5LmJveGluZ1JlcXVpcmVzRlBSKCkp
CisgICAgICAgICAgICBlbnN1cmVGUFIoKTsKKyAgICB9CisKKyAgICB2b2lkIGVtaXRMb2FkKENh
Y2hlZFJlY292ZXJ5Jik7CisKKyAgICBib29sIGNhbkxvYWQoQ2FjaGVkUmVjb3ZlcnkmKTsKKwor
ICAgIHZvaWQgZW5zdXJlTG9hZChDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3ZlcnkpCisgICAg
eworICAgICAgICBpZiAoY2FuTG9hZChjYWNoZWRSZWNvdmVyeSkpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgQVNTRVJUKGNhY2hlZFJlY292ZXJ5LmxvYWRzSW50b0dQUigpIHx8IGNh
Y2hlZFJlY292ZXJ5LmxvYWRzSW50b0ZQUigpKTsKKworICAgICAgICBpZiAoY2FjaGVkUmVjb3Zl
cnkubG9hZHNJbnRvRlBSKCkpIHsKKyAgICAgICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS5sb2Fk
c0ludG9HUFIoKSkKKyAgICAgICAgICAgICAgICBlbnN1cmVSZWdpc3RlcigpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGVuc3VyZUZQUigpOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIGVuc3VyZUdQUigpOworICAgIH0KKworICAgIGJvb2wgY2FuTG9hZEFuZEJveChD
YWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3ZlcnkpCisgICAgeworICAgICAgICAvLyBXZSBkb24n
dCBoYXZlIGludGVyZmVyaW5nIGxvYWRzICYgYm94ZXMKKyAgICAgICAgQVNTRVJUKCFjYWNoZWRS
ZWNvdmVyeS5sb2Fkc0ludG9GUFIoKSB8fCAhY2FjaGVkUmVjb3ZlcnkuYm94aW5nUmVxdWlyZXNG
UFIoKSk7CisgICAgICAgIEFTU0VSVCghY2FjaGVkUmVjb3ZlcnkubG9hZHNJbnRvR1BSKCkgfHwg
IWNhY2hlZFJlY292ZXJ5LmJveGluZ1JlcXVpcmVzR1BSKCkpOworCisgICAgICAgIHJldHVybiBj
YW5Mb2FkKGNhY2hlZFJlY292ZXJ5KSAmJiBjYW5Cb3goY2FjaGVkUmVjb3ZlcnkpOworICAgIH0K
KworICAgIERhdGFGb3JtYXQgZW1pdFN0b3JlKENhY2hlZFJlY292ZXJ5JiwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MpOworCisgICAgdm9pZCBlbWl0RGlzcGxhY2UoQ2FjaGVkUmVjb3ZlcnkmKTsK
KworICAgIHZvaWQgZW1pdERlbHRhQ2hlY2soKTsKKworICAgIEJhZzxDYWNoZWRSZWNvdmVyeT4g
bV9jYWNoZWRSZWNvdmVyaWVzOworCisgICAgdm9pZCB1cGRhdGVSZWNvdmVyeShDYWNoZWRSZWNv
dmVyeSYgY2FjaGVkUmVjb3ZlcnksIFZhbHVlUmVjb3ZlcnkgcmVjb3ZlcnkpCisgICAgeworICAg
ICAgICBjbGVhckNhY2hlZFJlY292ZXJ5KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkpOworICAg
ICAgICBjYWNoZWRSZWNvdmVyeS5zZXRSZWNvdmVyeShyZWNvdmVyeSk7CisgICAgICAgIHNldENh
Y2hlZFJlY292ZXJ5KHJlY292ZXJ5LCAmY2FjaGVkUmVjb3ZlcnkpOworICAgIH0KKworICAgIENh
Y2hlZFJlY292ZXJ5KiBnZXRDYWNoZWRSZWNvdmVyeShWYWx1ZVJlY292ZXJ5KTsKKworICAgIENh
Y2hlZFJlY292ZXJ5KiBzZXRDYWNoZWRSZWNvdmVyeShWYWx1ZVJlY292ZXJ5LCBDYWNoZWRSZWNv
dmVyeSopOworCisgICAgdm9pZCBjbGVhckNhY2hlZFJlY292ZXJ5KFZhbHVlUmVjb3ZlcnkgcmVj
b3ZlcnkpCisgICAgeworICAgICAgICBpZiAoIXJlY292ZXJ5LmlzQ29uc3RhbnQoKSkKKyAgICAg
ICAgICAgIHNldENhY2hlZFJlY292ZXJ5KHJlY292ZXJ5LCBudWxscHRyKTsKKyAgICB9CisKKyAg
ICBDYWNoZWRSZWNvdmVyeSogYWRkQ2FjaGVkUmVjb3ZlcnkoVmFsdWVSZWNvdmVyeSByZWNvdmVy
eSkKKyAgICB7CisgICAgICAgIGlmIChyZWNvdmVyeS5pc0NvbnN0YW50KCkpCisgICAgICAgICAg
ICByZXR1cm4gbV9jYWNoZWRSZWNvdmVyaWVzLmFkZChyZWNvdmVyeSk7CisgICAgICAgIENhY2hl
ZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSA9IGdldENhY2hlZFJlY292ZXJ5KHJlY292ZXJ5KTsK
KyAgICAgICAgaWYgKCFjYWNoZWRSZWNvdmVyeSkKKyAgICAgICAgICAgIHJldHVybiBzZXRDYWNo
ZWRSZWNvdmVyeShyZWNvdmVyeSwgbV9jYWNoZWRSZWNvdmVyaWVzLmFkZChyZWNvdmVyeSkpOwor
ICAgICAgICByZXR1cm4gY2FjaGVkUmVjb3Zlcnk7CisgICAgfQorCisgICAgLy8gVGhpcyBpcyB0
aGUgY3VycmVudCByZWNvdmVyaWVzIHByZXNlbnQgaW4gdGhlIG9sZCBmcmFtZSdzCisgICAgLy8g
c2xvdHMuIEEgbnVsbCBDYWNoZWRSZWNvdmVyeSBtZWFucyB3ZSBjYW4gdHJhc2ggdGhlIGN1cnJl
bnQKKyAgICAvLyB2YWx1ZSBhcyB3ZSBkb24ndCBjYXJlIGFib3V0IGl0LgorICAgIFZlY3RvcjxD
YWNoZWRSZWNvdmVyeSo+IG1fb2xkRnJhbWU7CisKKyAgICBpbnQgbnVtTG9jYWxzKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX29sZEZyYW1lLnNpemUoKSAtIEpTU3RhY2s6OkNhbGxl
ckZyYW1lQW5kUENTaXplOworICAgIH0KKworICAgIENhY2hlZFJlY292ZXJ5KiBnZXRPbGQoVmly
dHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29sZEZyYW1l
W0pTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplIC0gcmVnLm9mZnNldCgpIC0gMV07CisgICAg
fQorCisgICAgdm9pZCBzZXRPbGQoVmlydHVhbFJlZ2lzdGVyIHJlZywgQ2FjaGVkUmVjb3Zlcnkq
IGNhY2hlZFJlY292ZXJ5KQorICAgIHsKKyAgICAgICAgbV9vbGRGcmFtZVtKU1N0YWNrOjpDYWxs
ZXJGcmFtZUFuZFBDU2l6ZSAtIHJlZy5vZmZzZXQoKSAtIDFdID0gY2FjaGVkUmVjb3Zlcnk7Cisg
ICAgfQorCisgICAgVmlydHVhbFJlZ2lzdGVyIGZpcnN0T2xkKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIgeyBzdGF0aWNfY2FzdDxpbnQ+KC1udW1Mb2NhbHMo
KSkgfTsKKyAgICB9CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGFzdE9sZCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyIHsgSlNTdGFjazo6Q2FsbGVyRnJhbWVB
bmRQQ1NpemUgLSAxIH07CisgICAgfQorCisgICAgYm9vbCBpc1ZhbGlkT2xkKFZpcnR1YWxSZWdp
c3RlciByZWcpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gcmVnID49IGZpcnN0T2xkKCkg
JiYgcmVnIDw9IGxhc3RPbGQoKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIHN0b3JlcywgZm9yIGVh
Y2ggc2xvdCBpbiB0aGUgbmV3IGZyYW1lLCBpbmZvcm1hdGlvbiBhYm91dAorICAgIC8vIHRoZSBy
ZWNvdmVyeSBmb3IgdGhlIHZhbHVlIHRoYXQgc2hvdWxkIGV2ZW50dWFsbHkgZ28gaW50byB0aGF0
CisgICAgLy8gc2xvdC4KKyAgICAvLworICAgIC8vIE9uY2UgdGhlIHNsb3QgaGFzIGJlZW4gd3Jp
dHRlbiwgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4KKyAgICAvLyBtX25ld0ZyYW1lIHdpbGwg
YmUgZW1wdHkuCisgICAgVmVjdG9yPENhY2hlZFJlY292ZXJ5Kj4gbV9uZXdGcmFtZTsKKworICAg
IHNpemVfdCBhcmdDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9uZXdGcmFt
ZS5zaXplKCkgLSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgIH0KKworICAgIENh
Y2hlZFJlY292ZXJ5KiBnZXROZXcoVmlydHVhbFJlZ2lzdGVyIG5ld1JlZ2lzdGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbmV3RnJhbWVbbmV3UmVnaXN0ZXIub2Zmc2V0KCldOwor
ICAgIH0KKworICAgIHZvaWQgc2V0TmV3KFZpcnR1YWxSZWdpc3RlciBuZXdSZWdpc3RlciwgQ2Fj
aGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5KQorICAgIHsKKyAgICAgICAgbV9uZXdGcmFtZVtu
ZXdSZWdpc3Rlci5vZmZzZXQoKV0gPSBjYWNoZWRSZWNvdmVyeTsKKyAgICB9CisKKyAgICB2b2lk
IGFkZE5ldyhWaXJ0dWFsUmVnaXN0ZXIgbmV3UmVnaXN0ZXIsIFZhbHVlUmVjb3ZlcnkgcmVjb3Zl
cnkpCisgICAgeworICAgICAgICBDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkgPSBhZGRD
YWNoZWRSZWNvdmVyeShyZWNvdmVyeSk7CisgICAgICAgIGNhY2hlZFJlY292ZXJ5LT5hZGRUYXJn
ZXQobmV3UmVnaXN0ZXIpOworICAgICAgICBzZXROZXcobmV3UmVnaXN0ZXIsIGNhY2hlZFJlY292
ZXJ5KTsKKyAgICB9CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3ROZXcoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlciB7IDAgfTsKKyAgICB9CisKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgbGFzdE5ldygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyIHsgc3RhdGljX2Nhc3Q8aW50PihtX25ld0ZyYW1lLnNpemUoKSkgLSAxIH07
CisgICAgfQorCisgICAgYm9vbCBpc1ZhbGlkTmV3KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gcmVnID49IGZpcnN0TmV3KCkgJiYgcmVnIDw9IGxhc3RO
ZXcoKTsKKyAgICB9CisKKworICAgIGludCBtX2FsaWduZWRPbGRGcmFtZVNpemU7CisgICAgaW50
IG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZTsKKworICAgIC8vIFRoaXMgaXMgdGhlIGRpc3RhbmNlLCBp
biBzbG90cywgYmV0d2VlbiB0aGUgYmFzZSBvZiB0aGUgbmV3CisgICAgLy8gZnJhbWUgYW5kIHRo
ZSBiYXNlIG9mIHRoZSBvbGQgZnJhbWUuIEl0IGNvdWxkIGJlIG5lZ2F0aXZlIHdoZW4KKyAgICAv
LyBwcmVwYXJpbmcgZm9yIGEgdGFpbCBjYWxsIHRvIGEgZnVuY3Rpb24gd2l0aCBzbWFsbGVyIGFy
Z3VtZW50CisgICAgLy8gY291bnQuCisgICAgLy8KKyAgICAvLyBXZSB3aWxsIG92ZXJ3cml0ZSB0
aGlzIGFwcHJvcHJpYXRlbHkgZm9yIHNsb3cgcGF0aCBjYWxscywgYnV0CisgICAgLy8gd2UgaW5p
dGlhbGl6ZSBpdCBhcyBpZiBkb2luZyBhIGZhc3QgcGF0aCBmb3IgdGhlIHNwaWxscyB3ZQorICAg
IC8vIGNvdWxkIGRvIHdoaWxlIHVuZGVjaWRlZCAodHlwaWNhbGx5IHdoaWxlIGNhbGxpbmcgYWNx
dWlyZUdQUigpCisgICAgLy8gZm9yIGEgcG9seW1vcnBoaWMgY2FsbCkuCisgICAgaW50IG1fZnJh
bWVEZWx0YTsKKworICAgIFZpcnR1YWxSZWdpc3RlciBuZXdBc09sZChWaXJ0dWFsUmVnaXN0ZXIg
cmVnKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlZyAtIG1fZnJhbWVEZWx0YTsKKyAg
ICB9CisKKyAgICAvLyBUaGlzIHN0b3JlcyB0aGUgc2V0IG9mIGxvY2tlZCByZWdpc3RlcnMsIGku
ZS4gcmVnaXN0ZXJzIGZvcgorICAgIC8vIHdoaWNoIHdlIGhhdmUgYW4gaW1wbGljaXQgcmVxdWly
ZW1lbnQgdGhhdCB0aGV5IGFyZSBub3QgY2hhbmdlZC4KKyAgICAvLworICAgIC8vIFRoaXMgd2ls
bCB1c3VhbGx5IGNvbnRhaW5zIHRoZSBsaW5rIHJlZ2lzdGVyIG9uIGFyY2hpdGVjdHVyZXMKKyAg
ICAvLyB0aGF0IGhhdmUgb25lLCBhbnkgc2NyYXRjaCByZWdpc3RlciB1c2VkIGJ5IHRoZSBtYWNy
byBhc3NlbWJsZXIKKyAgICAvLyAoZS5nLiByMTEgb24gWDg2XzY0KSwgYXMgd2VsbCBhcyBhbnkg
cmVnaXN0ZXIgdGhhdCB3ZSB1c2UgZm9yCisgICAgLy8gYWRkcmVzc2luZyAoc2VlIG1fb2xkRnJh
bWVCYXNlIGFuZCBtX25ld0ZyYW1lQmFzZSkuCisgICAgLy8KKyAgICAvLyBXZSBhbHNvIHVzZSB0
aGlzIHRvIGxvY2sgcmVnaXN0ZXJzIHRlbXBvcmFyaWx5LCBmb3IgaW5zdGFuY2UgdG8KKyAgICAv
LyBlbnN1cmUgdGhhdCB3ZSBoYXZlIGF0IGxlYXN0IDIgYXZhaWxhYmxlIHJlZ2lzdGVycyBmb3Ig
bG9hZGluZworICAgIC8vIGEgcGFpciBvbiAzMmJpdHMuCisgICAgUmVnaXN0ZXJTZXQgbV9sb2Nr
ZWRSZWdpc3RlcnM7CisKKyAgICAvLyBUaGlzIHN0b3JlcyB0aGUgY3VycmVudCByZWNvdmVyaWVz
IHByZXNlbnQgaW4gcmVnaXN0ZXJzLiBBIG51bGwKKyAgICAvLyBDYWNoZWRSZWNvdmVyeSBtZWFu
cyB3ZSBjYW4gdHJhc2ggdGhlIGN1cnJlbnQgdmFsdWUgYXMgd2UgZG9uJ3QKKyAgICAvLyBjYXJl
IGFib3V0IGl0LiAKKyAgICBSZWdpc3Rlck1hcDxDYWNoZWRSZWNvdmVyeSo+IG1fcmVnaXN0ZXJz
OworCisgICAgLy8gVGhpcyBzdG9yZXMsIGZvciBlYWNoIHJlZ2lzdGVyLCBpbmZvcm1hdGlvbiBh
Ym91dCB0aGUgcmVjb3ZlcnkKKyAgICAvLyBmb3IgdGhlIHZhbHVlIHRoYXQgc2hvdWxkIGV2ZW50
dWFsbHkgZ28gaW50byB0aGF0IHJlZ2lzdGVyLiBUaGUKKyAgICAvLyBvbmx5IHJlZ2lzdGVycyB0
aGF0IGhhdmUgYSB0YXJnZXQgcmVjb3Zlcnkgd2lsbCBiZSBjYWxsZWUtc2F2ZQorICAgIC8vIHJl
Z2lzdGVycywgYXMgd2VsbCBhcyBwb3NzaWJseSBvbmUgSlNWYWx1ZVJlZ3MgZm9yIGhvbGRpbmcg
dGhlCisgICAgLy8gY2FsbGVlLgorICAgIC8vCisgICAgLy8gT25jZSB0aGUgY29ycmVjdCB2YWx1
ZSBoYXMgYmVlbiBwdXQgaW50byB0aGUgcmVnaXN0ZXJzLCBhbmQKKyAgICAvLyBjb250cmFyeSB0
byB3aGF0IHdlIGRvIHdpdGggbV9uZXdGcmFtZSwgd2Uga2VlcCB0aGUgZW50cnkgaW4KKyAgICAv
LyBtX25ld1JlZ2lzdGVycyB0byBzaW1wbGlmeSBzcGlsbGluZy4KKyAgICBSZWdpc3Rlck1hcDxD
YWNoZWRSZWNvdmVyeSo+IG1fbmV3UmVnaXN0ZXJzOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2hlY2tGdW5jdG9yPgorICAgIFJlZyBnZXRGcmVlUmVnaXN0ZXIoY29uc3QgQ2hlY2tGdW5jdG9y
JiBjaGVjaykgY29uc3QKKyAgICB7CisgICAgICAgIFJlZyBub25UZW1wIHsgfTsKKyAgICAgICAg
Zm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJl
Zy5uZXh0KCkpIHsKKyAgICAgICAgICAgIGlmIChtX2xvY2tlZFJlZ2lzdGVycy5nZXQocmVnKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKCFjaGVjayhyZWcp
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAoIW1fcmVnaXN0
ZXJzW3JlZ10pIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fbmV3UmVnaXN0ZXJzW3JlZ10pCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiByZWc7CisgICAgICAgICAgICAgICAgaWYgKCFub25U
ZW1wKQorICAgICAgICAgICAgICAgICAgICBub25UZW1wID0gcmVnOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBub25UZW1wOworICAgIH0KKworICAgIEdQUlJlZyBn
ZXRGcmVlR1BSKCkgY29uc3QKKyAgICB7CisgICAgICAgIFJlZyBmcmVlR1BSIHsgZ2V0RnJlZVJl
Z2lzdGVyKFtdIChSZWcgcmVnKSB7IHJldHVybiByZWcuaXNHUFIoKTsgfSkgfTsKKyAgICAgICAg
aWYgKCFmcmVlR1BSKQorICAgICAgICAgICAgcmV0dXJuIEludmFsaWRHUFJSZWc7CisgICAgICAg
IHJldHVybiBmcmVlR1BSLmdwcigpOworICAgIH0KKworICAgIEZQUlJlZyBnZXRGcmVlRlBSKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIFJlZyBmcmVlRlBSIHsgZ2V0RnJlZVJlZ2lzdGVyKFtdIChS
ZWcgcmVnKSB7IHJldHVybiByZWcuaXNGUFIoKTsgfSkgfTsKKyAgICAgICAgaWYgKCFmcmVlRlBS
KQorICAgICAgICAgICAgcmV0dXJuIEludmFsaWRGUFJSZWc7CisgICAgICAgIHJldHVybiBmcmVl
RlBSLmZwcigpOworICAgIH0KKworICAgIGJvb2wgaGFzRnJlZVJlZ2lzdGVyKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPihnZXRGcmVlUmVnaXN0ZXIoW10g
KFJlZykgeyByZXR1cm4gdHJ1ZTsgfSkpOworICAgIH0KKworICAgIC8vIFRoaXMgZnJlZXMgdXAg
YSByZWdpc3RlciBzYXRpc2Z5aW5nIHRoZSBjaGVjayBmdW5jdG9yICh0aGlzCisgICAgLy8gZnVu
Y3RvciBjb3VsZCB0aGVvcmV0aWNhbGx5IGhhdmUgYW55IGtpbmQgb2YgbG9naWMsIGJ1dCBpdCBt
dXN0CisgICAgLy8gZW5zdXJlIHRoYXQgaXQgd2lsbCBvbmx5IHJldHVybiB0cnVlIGZvciByZWdp
c3RlcnMgLSBzcGlsbAorICAgIC8vIGFzc3VtZXMgYW5kIGFzc2VydHMgdGhhdCBpdCBpcyBwYXNz
ZWQgYSBjYWNoZWRSZWNvdmVyeSBzdG9yZWQgaW4gYQorICAgIC8vIHJlZ2lzdGVyKS4KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja0Z1bmN0b3I+CisgICAgdm9pZCBlbnN1cmVSZWdpc3Rlcihj
b25zdCBDaGVja0Z1bmN0b3ImIGNoZWNrKQorICAgIHsKKyAgICAgICAgLy8gSWYgd2UgY2FuIHNw
aWxsIGEgY2FsbGVlLXNhdmUsIHRoYXQncyBiZXN0LCBiZWNhdXNlIGl0IHdpbGwKKyAgICAgICAg
Ly8gZnJlZSB1cCBhIHJlZ2lzdGVyIHRoYXQgd291bGQgb3RoZXJ3aXNlIGJlZW4gdGFrZW4gZm9y
IHRoZQorICAgICAgICAvLyBsb25nZXN0IGFtb3VudCBvZiB0aW1lLgorICAgICAgICAvLworICAg
ICAgICAvLyBXZSBjb3VsZCB0cnkgdG8gYmlhcyB0b3dhcmRzIHRob3NlIHRoYXQgYXJlIG5vdCBp
biB0aGVpcgorICAgICAgICAvLyB0YXJnZXQgcmVnaXN0ZXJzIHlldCwgYnV0IHRoZSBnYWluIGlz
IHByb2JhYmx5IHN1cGVyCisgICAgICAgIC8vIHNtYWxsLiBVbmxlc3MgeW91IGhhdmUgYSBodWdl
IG51bWJlciBvZiBhcmd1bWVudCAoYXQgbGVhc3QKKyAgICAgICAgLy8gYXJvdW5kIHR3aWNlIHRo
ZSBudW1iZXIgb2YgYXZhaWxhYmxlIHJlZ2lzdGVycyBvbiB5b3VyCisgICAgICAgIC8vIGFyY2hp
dGVjdHVyZSksIG5vIHNwaWxsaW5nIGlzIGdvaW5nIHRvIHRha2UgcGxhY2UgYW55d2F5cy4KKyAg
ICAgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7IHJl
ZyA9IHJlZy5uZXh0KCkpIHsKKyAgICAgICAgICAgIGlmIChtX2xvY2tlZFJlZ2lzdGVycy5nZXQo
cmVnKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgQ2FjaGVkUmVj
b3ZlcnkqIGNhY2hlZFJlY292ZXJ5IHsgbV9uZXdSZWdpc3RlcnNbcmVnXSB9OworICAgICAgICAg
ICAgaWYgKCFjYWNoZWRSZWNvdmVyeSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICAgICAgaWYgKGNoZWNrKCpjYWNoZWRSZWNvdmVyeSkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAiLCBjYWNoZWRSZWNv
dmVyeS0+cmVjb3ZlcnkoKSwgIiBsb29rcyBsaWtlIGEgZ29vZCBzcGlsbCBjYW5kaWRhdGVcbiIp
OworICAgICAgICAgICAgICAgIHNwaWxsKCpjYWNoZWRSZWNvdmVyeSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgdXNl
IHRoZSBjYWNoZWRSZWNvdmVyeSBhc3NvY2lhdGVkIHdpdGggdGhlIGZpcnN0IG5ldyBzbG90IHdl
CisgICAgICAgIC8vIGNhbiwgYmVjYXVzZSB0aGF0IGlzIHRoZSBvbmUgZm9yIHdoaWNoIGEgd3Jp
dGUgd2lsbCBiZQorICAgICAgICAvLyBwb3NzaWJsZSB0aGUgbGF0ZXN0LCBpLmUuIHRoYXQgaXMg
dGhlIG9uZSB0aGF0IHdlIHdvdWxkCisgICAgICAgIC8vIGhhdmUgaGFkIHRvIHJldGFpbiBpbiBy
ZWdpc3RlcnMgZm9yIHRoZSBsb25nZXN0LgorICAgICAgICBmb3IgKFZpcnR1YWxSZWdpc3RlciBy
ZWcgPSBmaXJzdE5ldygpOyByZWcgPD0gbGFzdE5ldygpOyByZWcgKz0gMSkgeworICAgICAgICAg
ICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5IHsgZ2V0TmV3KHJlZykgfTsKKyAgICAg
ICAgICAgIGlmICghY2FjaGVkUmVjb3ZlcnkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgICAgIGlmIChjaGVjaygqY2FjaGVkUmVjb3ZlcnkpKSB7CisgICAgICAgICAgICAg
ICAgc3BpbGwoKmNhY2hlZFJlY292ZXJ5KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH0KKworICAgIHZvaWQgZW5zdXJlUmVnaXN0ZXIoKQorICAgIHsKKyAgICAgICAg
aWYgKGhhc0ZyZWVSZWdpc3RlcigpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICBGaW5kaW5nIGEgcmVnaXN0ZXIgdG8g
c3BpbGxcbiIpOworICAgICAgICBlbnN1cmVSZWdpc3RlcigKKyAgICAgICAgICAgIFt0aGlzXSAo
Y29uc3QgQ2FjaGVkUmVjb3ZlcnkmIGNhY2hlZFJlY292ZXJ5KSB7CisgICAgICAgICAgICAgICAg
aWYgKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuaXNJbkdQUigpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gIW1fbG9ja2VkUmVnaXN0ZXJzLmdldChjYWNoZWRSZWNvdmVyeS5yZWNvdmVy
eSgpLmdwcigpKTsKKyAgICAgICAgICAgICAgICBpZiAoY2FjaGVkUmVjb3ZlcnkucmVjb3Zlcnko
KS5pc0luRlBSKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAhbV9sb2NrZWRSZWdpc3Rl
cnMuZ2V0KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZnByKCkpOworI2lmIFVTRShKU1ZBTFVF
MzJfNjQpCisgICAgICAgICAgICAgICAgaWYgKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkudGVj
aG5pcXVlKCkgPT0gSW5QYWlyKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAhbV9sb2Nr
ZWRSZWdpc3RlcnMuZ2V0KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkudGFnR1BSKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAmJiAhbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KGNhY2hlZFJlY292
ZXJ5LnJlY292ZXJ5KCkucGF5bG9hZEdQUigpKTsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9KTsKKyAgICB9CisK
KyAgICB2b2lkIGVuc3VyZUdQUigpCisgICAgeworICAgICAgICBpZiAoZ2V0RnJlZUdQUigpICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgIEZpbmRpbmcgYSBHUFIgdG8gc3BpbGxcbiIpOwor
ICAgICAgICBlbnN1cmVSZWdpc3RlcigKKyAgICAgICAgICAgIFt0aGlzXSAoY29uc3QgQ2FjaGVk
UmVjb3ZlcnkmIGNhY2hlZFJlY292ZXJ5KSB7CisgICAgICAgICAgICAgICAgaWYgKGNhY2hlZFJl
Y292ZXJ5LnJlY292ZXJ5KCkuaXNJbkdQUigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
IW1fbG9ja2VkUmVnaXN0ZXJzLmdldChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpKTsK
KyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICAgICAgICAgIGlmIChjYWNoZWRSZWNvdmVy
eS5yZWNvdmVyeSgpLnRlY2huaXF1ZSgpID09IEluUGFpcikgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gIW1fbG9ja2VkUmVnaXN0ZXJzLmdldChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgp
LnRhZ0dQUigpKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgIW1fbG9ja2VkUmVnaXN0ZXJz
LmdldChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLnBheWxvYWRHUFIoKSk7CisgICAgICAgICAg
ICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfSk7CisgICAgfQorCisgICAgdm9pZCBlbnN1cmVGUFIoKQorICAgIHsKKyAgICAgICAgaWYg
KGdldEZyZWVGUFIoKSAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICBGaW5kaW5nIGFuIEZQ
UiB0byBzcGlsbFxuIik7CisgICAgICAgIGVuc3VyZVJlZ2lzdGVyKAorICAgICAgICAgICAgW3Ro
aXNdIChjb25zdCBDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3ZlcnkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5pc0luRlBSKCkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAhbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KGNhY2hlZFJlY292ZXJ5LnJl
Y292ZXJ5KCkuZnByKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIH0pOworICAgIH0KKworICAgIENhY2hlZFJlY292ZXJ5KiBnZXROZXcoSlNWYWx1ZVJlZ3Mg
anNWYWx1ZVJlZ3MpIGNvbnN0CisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHJl
dHVybiBtX25ld1JlZ2lzdGVyc1tqc1ZhbHVlUmVncy5ncHIoKV07CisjZWxzZQorICAgICAgICBB
U1NFUlQoCisgICAgICAgICAgICBqc1ZhbHVlUmVncy50YWdHUFIoKSA9PSBJbnZhbGlkR1BSUmVn
IHx8IGpzVmFsdWVSZWdzLnBheWxvYWRHUFIoKSA9PSBJbnZhbGlkR1BSUmVnCisgICAgICAgICAg
ICB8fCBtX25ld1JlZ2lzdGVyc1tqc1ZhbHVlUmVncy5wYXlsb2FkR1BSKCldID09IG1fbmV3UmVn
aXN0ZXJzW2pzVmFsdWVSZWdzLnRhZ0dQUigpXSk7CisgICAgICAgIGlmIChqc1ZhbHVlUmVncy5w
YXlsb2FkR1BSKCkgPT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIHJldHVybiBtX25ld1Jl
Z2lzdGVyc1tqc1ZhbHVlUmVncy50YWdHUFIoKV07CisgICAgICAgIHJldHVybiBtX25ld1JlZ2lz
dGVyc1tqc1ZhbHVlUmVncy5wYXlsb2FkR1BSKCldOworI2VuZGlmCisgICAgfQorCisgICAgdm9p
ZCBhZGROZXcoSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIFZhbHVlUmVjb3ZlcnkgcmVjb3Zlcnkp
CisgICAgeworICAgICAgICBBU1NFUlQoanNWYWx1ZVJlZ3MgJiYgIWdldE5ldyhqc1ZhbHVlUmVn
cykpOworICAgICAgICBDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkgPSBhZGRDYWNoZWRS
ZWNvdmVyeShyZWNvdmVyeSk7CisgICAgICAgIEFTU0VSVCghY2FjaGVkUmVjb3ZlcnktPndhbnRl
ZEpTVmFsdWVSZWdzKCkpOworICAgICAgICBjYWNoZWRSZWNvdmVyeS0+c2V0V2FudGVkSlNWYWx1
ZVJlZ3MoanNWYWx1ZVJlZ3MpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIG1fbmV3UmVn
aXN0ZXJzW2pzVmFsdWVSZWdzLmdwcigpXSA9IGNhY2hlZFJlY292ZXJ5OworI2Vsc2UKKyAgICAg
ICAgaWYgKGpzVmFsdWVSZWdzLnBheWxvYWRHUFIoKSAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAg
ICAgICAgbV9uZXdSZWdpc3RlcnNbanNWYWx1ZVJlZ3MucGF5bG9hZEdQUigpXSA9IGNhY2hlZFJl
Y292ZXJ5OworICAgICAgICBpZiAoanNWYWx1ZVJlZ3MudGFnR1BSKCkgIT0gSW52YWxpZEdQUlJl
ZykKKyAgICAgICAgICAgIG1fbmV3UmVnaXN0ZXJzW2pzVmFsdWVSZWdzLnRhZ0dQUigpXSA9IGNh
Y2hlZFJlY292ZXJ5OworI2VuZGlmCisgICAgfQorCisgICAgdm9pZCBhZGROZXcoRlBSUmVnIGZw
ciwgVmFsdWVSZWNvdmVyeSByZWNvdmVyeSkKKyAgICB7CisgICAgICAgIEFTU0VSVChmcHIgIT0g
SW52YWxpZEZQUlJlZyAmJiAhbV9uZXdSZWdpc3RlcnNbZnByXSk7CisgICAgICAgIENhY2hlZFJl
Y292ZXJ5KiBjYWNoZWRSZWNvdmVyeSA9IGFkZENhY2hlZFJlY292ZXJ5KHJlY292ZXJ5KTsKKyAg
ICAgICAgbV9uZXdSZWdpc3RlcnNbZnByXSA9IGNhY2hlZFJlY292ZXJ5OworICAgICAgICBBU1NF
UlQoY2FjaGVkUmVjb3ZlcnktPndhbnRlZEZQUigpID09IEludmFsaWRGUFJSZWcpOworICAgICAg
ICBjYWNoZWRSZWNvdmVyeS0+c2V0V2FudGVkRlBSKGZwcik7CisgICAgfQorCisgICAgLy8gbV9v
bGRGcmFtZUJhc2UgaXMgdGhlIHJlZ2lzdGVyIHJlbGF0aXZlIHRvIHdoaWNoIHdlIGFjY2Vzcwor
ICAgIC8vIHNsb3RzIGluIHRoZSBvbGQgY2FsbCBmcmFtZSwgd2l0aCBhbiBhZGRpdGlvbmFsIG9m
ZnNldCBvZgorICAgIC8vIG1fb2xkRnJhbWVPZmZzZXQuCisgICAgLy8KKyAgICAvLyAgLSBGb3Ig
YW4gYWN0dWFsIHRhaWwgY2FsbCwgbV9vbGRGcmFtZUJhc2UgaXMgdGhlIHN0YWNrCisgICAgLy8g
ICAgcG9pbnRlciwgYW5kIG1fb2xkRnJhbWVPZmZzZXQgaXMgdGhlIG51bWJlciBvZiBsb2NhbHMg
b2YgdGhlCisgICAgLy8gICAgdGFpbCBjYWxsZXIncyBmcmFtZS4gV2UgdXNlIHN1Y2ggc3RhY2sg
cG9pbnRlci1iYXNlZAorICAgIC8vICAgIGFkZHJlc3NpbmcgYmVjYXVzZSBpdCBhbGxvd3MgdXMg
dG8gbG9hZCB0aGUgdGFpbCBjYWxsZXIncworICAgIC8vICAgIGNhbGxlcidzIGZyYW1lIHBvaW50
ZXIgaW4gdGhlIGZyYW1lIHBvaW50ZXIgcmVnaXN0ZXIKKyAgICAvLyAgICBpbW1lZGlhdGVseSBp
bnN0ZWFkIG9mIGF3a3dhcmRseSBrZWVwaW5nIGl0IGFyb3VuZCBvbiB0aGUKKyAgICAvLyAgICBz
dGFjay4KKyAgICAvLworICAgIC8vICAtIEZvciBhIHNsb3cgcGF0aCBjYWxsLCBtX29sZEZyYW1l
QmFzZSBpcyBqdXN0IHRoZSBmcmFtZQorICAgIC8vICAgIHBvaW50ZXIsIGFuZCBtX29sZEZyYW1l
T2Zmc2V0IGlzIDAuCisgICAgR1BSUmVnIG1fb2xkRnJhbWVCYXNlIHsgTWFjcm9Bc3NlbWJsZXI6
OmZyYW1lUG9pbnRlclJlZ2lzdGVyIH07CisgICAgaW50IG1fb2xkRnJhbWVPZmZzZXQgeyAwIH07
CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBhZGRyZXNzRm9yT2xkKFZpcnR1YWxSZWdp
c3RlciByZWcpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MobV9vbGRGcmFtZUJhc2UsCisgICAgICAgICAgICAobV9vbGRGcmFtZU9mZnNldCArIHJl
Zy5vZmZzZXQoKSkgKiBzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICB9CisKKyAgICAvLyBtX25ld0Zy
YW1lQmFzZSBpcyB0aGUgcmVnaXN0ZXIgcmVsYXRpdmUgdG8gd2hpY2ggd2UgYWNjZXNzCisgICAg
Ly8gc2xvdHMgaW4gdGhlIG5ldyBjYWxsIGZyYW1lLCBhbmQgd2UgYWx3YXlzIG1ha2UgaXQgcG9p
bnQgdG8KKyAgICAvLyB3aGVyZXZlciB0aGUgc3RhY2sgcG9pbnRlciB3aWxsIGJlIHJpZ2h0IGJl
Zm9yZSBtYWtpbmcgdGhlCisgICAgLy8gYWN0dWFsIGNhbGwvanVtcC4gVGhlIGFjdHVhbCBiYXNl
IG9mIHRoZSBuZXcgZnJhbWUgaXMgYXQgb2Zmc2V0CisgICAgLy8gbV9uZXdGcmFtZU9mZnNldCBy
ZWxhdGl2ZSB0byBtX25ld0ZyYW1lQmFzZS4KKyAgICAvLworICAgIC8vICAtIEZvciBhbiBhY3R1
YWwgdGFpbCBjYWxsLCBtX25ld0ZyYW1lQmFzZSBpcyBjb21wdXRlZAorICAgIC8vICAgIGR5bmFt
aWNhbGx5LCBhbmQgbV9uZXdGcmFtZU9mZnNldCB2YXJpZXMgYmV0d2VlbiAwIGFuZCAtMgorICAg
IC8vICAgIGRlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlJ3MgY2FsbGluZyBjb252ZW50aW9u
IChzZWUKKyAgICAvLyAgICBwcmVwYXJlRm9yVGFpbENhbGwpLgorICAgIC8vCisgICAgLy8gIC0g
Rm9yIGEgc2xvdyBwYXRoIGNhbGwsIG1fbmV3RnJhbWVCYXNlIGlzIHRoZSBhY3R1YWwgc3RhY2sK
KyAgICAvLyAgICBwb2ludGVyLCBhbmQgbV9uZXdGcmFtZU9mZnNldCBpcyAtIENhbGxlckZyYW1l
QW5kUENTaXplLAorICAgIC8vICAgIGZvbGxvd2luZyB0aGUgY29udmVudGlvbiBmb3IgYSByZWd1
bGFyIGNhbGwuCisgICAgR1BSUmVnIG1fbmV3RnJhbWVCYXNlIHsgSW52YWxpZEdQUlJlZyB9Owor
ICAgIGludCBtX25ld0ZyYW1lT2Zmc2V0IHsgMH07CisKKyAgICBib29sIGlzVW5kZWNpZGVkKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX25ld0ZyYW1lQmFzZSA9PSBJbnZhbGlkR1BS
UmVnOworICAgIH0KKworICAgIGJvb2wgaXNTbG93UGF0aCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9uZXdGcmFtZUJhc2UgPT0gTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyOworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFkZHJlc3NGb3JO
ZXcoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhtX25ld0ZyYW1lQmFzZSwKKyAgICAgICAgICAgIChtX25ld0Zy
YW1lT2Zmc2V0ICsgcmVnLm9mZnNldCgpKSAqIHNpemVvZihSZWdpc3RlcikpOworICAgIH0KKwor
ICAgIC8vIFdlIHVzZSBhIGNvbmNlcHQgb2YgImRhbmdlciB6b25lIi4gVGhlIGRhbmdlciB6b25l
IGNvbnNpc3RzIG9mCisgICAgLy8gYWxsIHRoZSB3cml0ZXMgaW4gdGhlIG5ldyBmcmFtZSB0aGF0
IGNvdWxkIG92ZXJsYXAgd2l0aCByZWFkcworICAgIC8vIGluIHRoZSBvbGQgZnJhbWUuCisgICAg
Ly8KKyAgICAvLyBCZWNhdXNlIHdlIGNvdWxkIGhhdmUgYSBoaWdoZXIgYWN0dWFsIG51bWJlciBv
ZiBhcmd1bWVudHMgdGhhbgorICAgIC8vIHBhcmFtZXRlcnMsIHdoZW4gcHJlcGFyaW5nIGEgdGFp
bCBjYWxsLCB3ZSBuZWVkIHRvIGFzc3VtZSB0aGF0CisgICAgLy8gd3JpdGluZyB0byBhIHNsb3Qg
b24gdGhlIG5ldyBmcmFtZSBjb3VsZCBvdmVybGFwIG5vdCBvbmx5IHdpdGgKKyAgICAvLyB0aGUg
Y29ycmVzcG9uZGluZyBzbG90IGluIHRoZSBvbGQgZnJhbWUsIGJ1dCBhbHNvIHdpdGggYW55IHNs
b3QKKyAgICAvLyBhYm92ZSBpdC4gVGh1cywgdGhlIGRhbmdlciB6b25lIGNvbnNpc3RzIG9mIGFs
bCB3cml0ZXMgYmV0d2VlbgorICAgIC8vIHRoZSBmaXJzdCB3cml0ZSBhbmQgd2hhdCBJIGNhbGwg
dGhlICJkYW5nZXIgZnJvbnRpZXIiOiB0aGUKKyAgICAvLyBoaWdoZXN0IHNsb3QgaW4gdGhlIG9s
ZCBmcmFtZSB3ZSBzdGlsbCBjYXJlIGFib3V0LiBUaHVzLCB0aGUKKyAgICAvLyBkYW5nZXIgem9u
ZSBjb250YWlucyBhbGwgdGhlIHNsb3RzIGJldHdlZW4gdGhlIGZpcnN0IHNsb3Qgb2YKKyAgICAv
LyB0aGUgbmV3IGZyYW1lIGFuZCB0aGUgZGFuZ2VyIGZyb250aWVyLiBCZWNhdXNlIHRoZSBkYW5n
ZXIKKyAgICAvLyBmcm9udGllciBpcyByZWxhdGVkIHRvIHRoZSBuZXcgZnJhbWUsIGl0IGlzIHN0
b3JlZCBhcyBhIHZpcnR1YWwKKyAgICAvLyByZWdpc3RlciAqaW4gdGhlIG5ldyBmcmFtZSouCisg
ICAgVmlydHVhbFJlZ2lzdGVyIG1fZGFuZ2VyRnJvbnRpZXI7CisKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZGFuZ2VyRnJvbnRpZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc1VuZGVj
aWRlZCgpKTsKKworICAgICAgICByZXR1cm4gbV9kYW5nZXJGcm9udGllcjsKKyAgICB9CisKKyAg
ICBib29sIGlzRGFuZ2VyTmV3KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoIWlzVW5kZWNpZGVkKCkgJiYgaXNWYWxpZE5ldyhyZWcpKTsKKyAgICAgICAg
cmV0dXJuIHJlZyA8PSBkYW5nZXJGcm9udGllcigpOworICAgIH0KKworICAgIHZvaWQgdXBkYXRl
RGFuZ2VyRnJvbnRpZXIoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc1VuZGVjaWRlZCgpKTsK
KworICAgICAgICBtX2RhbmdlckZyb250aWVyID0gZmlyc3ROZXcoKSAtIDE7CisgICAgICAgIGZv
ciAoVmlydHVhbFJlZ2lzdGVyIHJlZyA9IGxhc3ROZXcoKTsgcmVnID49IGZpcnN0TmV3KCk7IHJl
ZyAtPSAxKSB7CisgICAgICAgICAgICBpZiAoIWdldE5ldyhyZWcpIHx8ICFpc1ZhbGlkT2xkKG5l
d0FzT2xkKHJlZykpIHx8ICFnZXRPbGQobmV3QXNPbGQocmVnKSkpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgICAgIG1fZGFuZ2VyRnJvbnRpZXIgPSByZWc7CisgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgIERhbmdlciBmcm9u
dGllciBub3cgYXQgTkVXICIsIG1fZGFuZ2VyRnJvbnRpZXIsICJcbiIpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRh
TG9nKCIgIEFsbCBjbGVhciEgRGFuZ2VyIHpvbmUgaXMgZW1wdHkuXG4iKTsKKyAgICB9CisKKyAg
ICAvLyBBIHNhZmUgd3JpdGUgaXMgYSB3cml0ZSB0aGF0IG5ldmVyIHdyaXRlcyBpbnRvIHRoZSBk
YW5nZXIgem9uZS4KKyAgICBib29sIGhhc09ubHlTYWZlV3JpdGVzKENhY2hlZFJlY292ZXJ5JiBj
YWNoZWRSZWNvdmVyeSkgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVy
IHRhcmdldCA6IGNhY2hlZFJlY292ZXJ5LnRhcmdldHMoKSkgeworICAgICAgICAgICAgaWYgKGlz
RGFuZ2VyTmV3KHRhcmdldCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIFlvdSBtdXN0IGVuc3Vy
ZSB0aGF0IHRoZXJlIGlzIG5vIGRhbmdlcm91cyB3cml0ZXMgYmVmb3JlCisgICAgLy8gY2FsbGlu
ZyB0aGlzIGZ1bmN0aW9uLgorICAgIGJvb2wgdHJ5V3JpdGVzKENhY2hlZFJlY292ZXJ5Jik7CisK
KyAgICAvLyBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIGVuc3VyZSB0aGF0IHRoZXJlIGlzIG5vIGxv
bmdlciBhbnkKKyAgICAvLyBwb3NzaWJsZSBzYWZlIHdyaXRlLCBpLmUuIGFsbCByZW1haW5pbmcg
d3JpdGVzIGFyZSBlaXRoZXIgdG8KKyAgICAvLyB0aGUgZGFuZ2VyIHpvbmUgb3IgY2FsbGVlIHNh
dmUgcmVzdG9yYXRpb25zLgorICAgIC8vCisgICAgLy8gSXQgcmV0dXJucyBmYWxzZSBpZiBpdCB3
YXMgdW5hYmxlIHRvIHBlcmZvcm0gc29tZSBzYWZlIHdyaXRlcworICAgIC8vIGR1ZSB0byBoaWdo
IHJlZ2lzdGVyIHByZXNzdXJlLgorICAgIGJvb2wgcGVyZm9ybVNhZmVXcml0ZXMoKTsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworI2VuZGlmIC8v
IENhbGxGcmFtZVNodWZmbGVyX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcAkocmV2aXNpb24gMTg5OTAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
YWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIFVTRShKU1ZBTFVF
NjQpCiAjaW5jbHVkZSAiSklULmgiCiAKKyNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRl
ICJKU0FycmF5LmgiCkBAIC0xODAsOSArMTgxLDYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwo
T3Bjb2RlSUQgb3Bjb2RlSQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncykK
LSAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotCiAgICAgRGF0YUxhYmVsUHRyIGFk
ZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2s7CiAgICAgSnVtcCBzbG93Q2FzZSA9IGJyYW5jaFB0
cldpdGhQYXRjaChOb3RFcXVhbCwgcmVnVDAsIGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2ss
IFRydXN0ZWRJbW1QdHIoMCkpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlKTsKQEAgLTE5Myw3
ICsxOTEsMjggQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogICAg
IG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aEJlZ2luID0g
YWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjazsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyA9IGluZm87CiAKLSAgICBpZiAob3Bjb2Rl
SUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzKSB7
CisgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCkgeworICAgICAgICBDYWxsRnJhbWVT
aHVmZmxlRGF0YSBzaHVmZmxlRGF0YTsKKyAgICAgICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0K
KyAgICAgICAgICAgIGluc3RydWN0aW9uWzRdLnUub3BlcmFuZCAtIHNpemVvZihDYWxsZXJGcmFt
ZUFuZFBDKSAvIHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVz
aXplKGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOyArK2kpIHsKKyAgICAgICAgICAgIHNodWZmbGVE
YXRhLmFyZ3NbaV0gPQorICAgICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZElu
SlNTdGFjaygKKyAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
aSkgLSBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQsCisgICAgICAgICAgICAgICAgICAgIERhdGFG
b3JtYXRKUyk7CisgICAgICAgIH0KKyAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0KKyAgICAg
ICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOworICAgICAg
ICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMobV9jb2RlQmxvY2spOworICAg
ICAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKKyAgICAgICAgQ2Fs
bEZyYW1lU2h1ZmZsZXIoKnRoaXMsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsK
KyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQYXRo
T3RoZXIgPSBlbWl0TmFrZWRUYWlsQ2FsbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzKSB7CisgICAgICAgIGVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwog
ICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhP
dGhlciA9IGVtaXROYWtlZFRhaWxDYWxsKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTIxOCw2ICsy
MzcsOSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlECiAKICAgICBs
aW5rU2xvd0Nhc2UoaXRlcik7CiAKKyAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8
IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzKQorICAgICAgICBlbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKCk7CisKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jYWxsQ29tcGlsYXRpb25J
bmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8pLCByZWdUMik7CiAKICAgICBtX2Nh
bGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9
IGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5j
b2RlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAkocmV2
aXNpb24gMTg5OTAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZh
dGU6Ci0gICAgc3RkOjphcnJheTxULCBNYWNyb0Fzc2VtYmxlcjo6dG90YWxOdW1iZXJPZlJlZ2lz
dGVycygpPiBtX21hcCB7IH07CisgICAgc3RkOjphcnJheTxULCBNYWNyb0Fzc2VtYmxlcjo6dG90
YWxOdW1iZXJPZlJlZ2lzdGVycygpPiBtX21hcDsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CkBAIC04Niw3ICs4Niw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgc3RkOjph
cnJheTxULCBNYWNyb0Fzc2VtYmxlcjo6bnVtYmVyT2ZSZWdpc3RlcnMoKT4gbV9tYXAgeyB9Owor
ICAgIHN0ZDo6YXJyYXk8VCwgTWFjcm9Bc3NlbWJsZXI6Om51bWJlck9mUmVnaXN0ZXJzKCk+IG1f
bWFwOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTEwMyw3ICsxMDMsNyBAQCBwdWJs
aWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIHN0ZDo6YXJyYXk8VCwgTWFjcm9Bc3NlbWJsZXI6
Om51bWJlck9mRlBSZWdpc3RlcnMoKT4gbV9tYXAgeyB9OworICAgIHN0ZDo6YXJyYXk8VCwgTWFj
cm9Bc3NlbWJsZXI6Om51bWJlck9mRlBSZWdpc3RlcnMoKT4gbV9tYXA7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2
aXNpb24gMTg5OTAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQmluYXJ5U3dpdGNo
LmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZs
ZXIuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiREZHU3BlY3VsYXRp
dmVKSVQuaCIKICNpbmNsdWRlICJGVExUaHVua3MuaCIKQEAgLTcwNiwyNiArNzA3LDMyIEBAIHZv
aWQgbGlua1BvbHltb3JwaGljQ2FsbCgKICAgICAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
IHNsb3dQYXRoOwogICAgIAotICAgIHB0cmRpZmZfdCBvZmZzZXRUb0ZyYW1lID0gLXNpemVvZihD
YWxsZXJGcmFtZUFuZFBDKTsKLQotICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Ci0gICAgICAg
IENDYWxsSGVscGVyczo6SnVtcCBva0FyZ3VtZW50Q291bnQgPSBzdHViSml0LmJyYW5jaDMyKAot
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpCZWxvdywgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEND
YWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
c2l6ZW9mKFJlZ2lzdGVyKSAqIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpICsgb2Zmc2V0VG9GcmFt
ZSArIFBheWxvYWRPZmZzZXQpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxMDAwMDAwMCkp
OwotICAgICAgICBzdHViSml0LmFib3J0V2l0aFJlYXNvbihSZXBhdGNoSW5zYW5lQXJndW1lbnRD
b3VudCk7Ci0gICAgICAgIG9rQXJndW1lbnRDb3VudC5saW5rKCZzdHViSml0KTsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZXI+IGZyYW1lU2h1ZmZsZXI7CisgICAgaWYgKGNh
bGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKCkpIHsKKyAgICAgICAgQVNTRVJUKGNhbGxMaW5r
SW5mby5pc1RhaWxDYWxsKCkpOworICAgICAgICBmcmFtZVNodWZmbGVyID0gc3RkOjptYWtlX3Vu
aXF1ZTxDYWxsRnJhbWVTaHVmZmxlcj4oc3R1YkppdCwgKmNhbGxMaW5rSW5mby5mcmFtZVNodWZm
bGVEYXRhKCkpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIC8vIFdlIHdvdWxkIGhh
dmUgYWxyZWFkeSBjaGVja2VkIHRoYXQgdGhlIGNhbGxlZSBpcyBhIGNlbGwsIGFuZCB3ZSBjYW4K
KyAgICAgICAgLy8gdXNlIHRoZSBhZGRpdGlvbmFsIHJlZ2lzdGVyIHRoaXMgYnV5cyB1cy4KKyAg
ICAgICAgZnJhbWVTaHVmZmxlci0+YXNzdW1lQ2FsbGVlSXNDZWxsKCk7CisjZW5kaWYKKyAgICAg
ICAgZnJhbWVTaHVmZmxlci0+bG9ja0dQUihjYWxsZWVHUFIpOwogICAgIH0KLSAgICAKLSAgICBH
UFJSZWcgc2NyYXRjaCA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihjYWxsZWVH
UFIpOwogICAgIEdQUlJlZyBjb21wYXJpc29uVmFsdWVHUFI7CiAgICAgCiAgICAgaWYgKGlzQ2xv
c3VyZUNhbGwpIHsKLSAgICAgICAgLy8gVmVyaWZ5IHRoYXQgd2UgaGF2ZSBhIGZ1bmN0aW9uIGFu
ZCBzdGFzaCB0aGUgZXhlY3V0YWJsZSBpbiBzY3JhdGNoLgorICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUjsKKyAgICAgICAgaWYgKGZyYW1lU2h1ZmZsZXIpCisgICAgICAgICAgICBzY3JhdGNoR1BS
ID0gZnJhbWVTaHVmZmxlci0+YWNxdWlyZUdQUigpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBzY3JhdGNoR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGNhbGxlZUdQ
Uik7CisgICAgICAgIC8vIFZlcmlmeSB0aGF0IHdlIGhhdmUgYSBmdW5jdGlvbiBhbmQgc3Rhc2gg
dGhlIGV4ZWN1dGFibGUgaW4gc2NyYXRjaEdQUi4KIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ICAgIC8vIFdlIGNhbiBzYWZlbHkgY2xvYmJlciBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgY2FsbGVl
R1BSLiBXZSBjYW4ndCByZWx5IG9uIHRhZ01hc2tSZWdpc3RlcgotICAgICAgICAvLyBiZWluZyBz
ZXQuIFNvIHdlIGRvIHRoaXMgdGhlIGhhcmQgd2F5LgotICAgICAgICBzdHViSml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChUYWdNYXNrKSwgc2NyYXRjaCk7Ci0gICAgICAgIHNs
b3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaFRlc3Q2NChDQ2FsbEhlbHBlcnM6Ok5vblplcm8s
IGNhbGxlZUdQUiwgc2NyYXRjaCkpOworICAgICAgICAvLyBXZSBjYW4ndCByZWx5IG9uIHRhZ01h
c2tSZWdpc3RlciBiZWluZyBzZXQsIHNvIHdlIGRvIHRoaXMgdGhlIGhhcmQKKyAgICAgICAgLy8g
d2F5LgorICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChU
YWdNYXNrKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJy
YW5jaFRlc3Q2NChDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIGNhbGxlZUdQUiwgc2NyYXRjaEdQUikp
OwogI2Vsc2UKICAgICAgICAgLy8gV2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0
aGUgY2FsbGVlIGlzIGEgY2VsbC4KICNlbmRpZgpAQCAtNzM4LDkgKzc0NSw5IEBAIHZvaWQgbGlu
a1BvbHltb3JwaGljQ2FsbCgKICAgICAKICAgICAgICAgc3R1YkppdC5sb2FkUHRyKAogICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0
T2ZFeGVjdXRhYmxlKCkpLAotICAgICAgICAgICAgc2NyYXRjaCk7CisgICAgICAgICAgICBzY3Jh
dGNoR1BSKTsKICAgICAgICAgCi0gICAgICAgIGNvbXBhcmlzb25WYWx1ZUdQUiA9IHNjcmF0Y2g7
CisgICAgICAgIGNvbXBhcmlzb25WYWx1ZUdQUiA9IHNjcmF0Y2hHUFI7CiAgICAgfSBlbHNlCiAg
ICAgICAgIGNvbXBhcmlzb25WYWx1ZUdQUiA9IGNhbGxlZUdQUjsKICAgICAKQEAgLTc4Miw4ICs3
ODksMTMgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAogICAgICAgICBjYXNlVmFsdWVzW2ld
ID0gbmV3Q2FzZVZhbHVlOwogICAgIH0KICAgICAKLSAgICBHUFJSZWcgZmFzdENvdW50c0Jhc2VH
UFIgPQotICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoY2FsbGVlR1BS
LCBjb21wYXJpc29uVmFsdWVHUFIsIEdQUkluZm86OnJlZ1QzKTsKKyAgICBHUFJSZWcgZmFzdENv
dW50c0Jhc2VHUFI7CisgICAgaWYgKGZyYW1lU2h1ZmZsZXIpCisgICAgICAgIGZhc3RDb3VudHNC
YXNlR1BSID0gZnJhbWVTaHVmZmxlci0+YWNxdWlyZUdQUigpOworICAgIGVsc2UgeworICAgICAg
ICBmYXN0Q291bnRzQmFzZUdQUiA9CisgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnNlbGVj
dFNjcmF0Y2hHUFIoY2FsbGVlR1BSLCBjb21wYXJpc29uVmFsdWVHUFIsIEdQUkluZm86OnJlZ1Qz
KTsKKyAgICB9CiAgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihm
YXN0Q291bnRzLmdldCgpKSwgZmFzdENvdW50c0Jhc2VHUFIpOwogICAgIAogICAgIEJpbmFyeVN3
aXRjaCBiaW5hcnlTd2l0Y2goY29tcGFyaXNvblZhbHVlR1BSLCBjYXNlVmFsdWVzLCBCaW5hcnlT
d2l0Y2g6OkludFB0cik7CkBAIC04MDMsNyArODE1LDExIEBAIHZvaWQgbGlua1BvbHltb3JwaGlj
Q2FsbCgKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwKICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoZmFzdENvdW50c0Jhc2VHUFIsIGNh
c2VJbmRleCAqIHNpemVvZih1aW50MzJfdCkpKTsKICAgICAgICAgfQotICAgICAgICBpZiAoY2Fs
bExpbmtJbmZvLmlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAoZnJhbWVTaHVmZmxlcikgewor
ICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoc3R1YkppdCwgZnJhbWVTaHVmZmxlci0+c25h
cHNob3QoKSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgICAgICAgICBjYWxsc1tjYXNlSW5k
ZXhdLmNhbGwgPSBzdHViSml0Lm5lYXJUYWlsQ2FsbCgpOworICAgICAgICB9IGVsc2UgaWYgKGNh
bGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgICAgIHN0dWJKaXQuZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgc3R1YkppdC5wcmVwYXJlRm9yVGFpbENhbGxT
bG93KCk7CiAgICAgICAgICAgICBjYWxsc1tjYXNlSW5kZXhdLmNhbGwgPSBzdHViSml0Lm5lYXJU
YWlsQ2FsbCgpOwogICAgICAgICB9IGVsc2UKQEAgLTgxNCwxMCArODMwLDIzIEBAIHZvaWQgbGlu
a1BvbHltb3JwaGljQ2FsbCgKICAgICAKICAgICBzbG93UGF0aC5saW5rKCZzdHViSml0KTsKICAg
ICBiaW5hcnlTd2l0Y2guZmFsbFRocm91Z2goKS5saW5rKCZzdHViSml0KTsKLSAgICBzdHViSml0
Lm1vdmUoY2FsbGVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICBpZiAoZnJhbWVTaHVmZmxl
cikgeworICAgICAgICBmcmFtZVNodWZmbGVyLT5yZWxlYXNlR1BSKGNhbGxlZUdQUik7CisgICAg
ICAgIGZyYW1lU2h1ZmZsZXItPnJlbGVhc2VHUFIoY29tcGFyaXNvblZhbHVlR1BSKTsKKyAgICAg
ICAgZnJhbWVTaHVmZmxlci0+cmVsZWFzZUdQUihmYXN0Q291bnRzQmFzZUdQUik7CiAjaWYgVVNF
KEpTVkFMVUUzMl82NCkKLSAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgZnJhbWVTaHVm
Zmxlci0+c2V0Q2FsbGVlSlNWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDEsIEdQ
UkluZm86OnJlZ1QwKSk7CisjZWxzZQorICAgICAgICBmcmFtZVNodWZmbGVyLT5zZXRDYWxsZWVK
U1ZhbHVlUmVncyhKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUMCkpOwogI2VuZGlmCisgICAgICAg
IGZyYW1lU2h1ZmZsZXItPnByZXBhcmVGb3JTbG93UGF0aCgpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIHN0dWJKaXQubW92ZShjYWxsZWVHUFIsIEdQUkluZm86OnJlZ1QwKTsKKyNpZiBVU0UoSlNW
QUxVRTMyXzY0KQorICAgICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEdQUkluZm86OnJlZ1QxKTsKKyNlbmRpZgorICAgIH0KICAg
ICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZjYWxsTGlua0luZm8p
LCBHUFJJbmZvOjpyZWdUMik7CiAgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKCkuZXhlY3V0YWJsZUFkZHJl
c3MoKSksIEdQUkluZm86OnJlZ1Q0KTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9uIDE4OTkwMSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTU1LDYgKzE1NSwxMCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua1BvbHltb3JwaGlj
Q2FsCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiTGluayBwb2x5bW9y
cGhpYyBjYWxsIHNsb3cgcGF0aCB0aHVuayIpKTsKIH0KIAorLy8gRklYTUU6IFdlIHNob3VsZCBk
aXN0aW5ndWlzaCBiZXR3ZWVuIGEgbWVnYW1vcnBoaWMgdmlydHVhbCBjYWxsIHZzLiBhIHNsb3cK
Ky8vIHBhdGggdmlydHVhbCBjYWxsIHNvIHRoYXQgd2UgY2FuIGVuYWJsZSBmYXN0IHRhaWwgY2Fs
bHMgZm9yIG1lZ2Ftb3JwaGljCisvLyB2aXJ0dWFsIGNhbGxzIGJ5IHVzaW5nIHRoZSBzaHVmZmxl
ci4KKy8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg4MzEKIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsVGh1bmtGb3IoVk0qIHZtLCBDYWxsTGlua0luZm8m
IGNhbGxMaW5rSW5mbykKIHsKICAgICAvLyBUaGUgY2FsbGVlIGlzIGluIHJlZ1QwIChmb3IgSlNW
QUxVRTMyXzY0LCB0aGUgdGFnIGlzIGluIHJlZ1QxKS4K
</data>
<flag name="review"
          id="286579"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261533</attachid>
            <date>2015-09-18 15:51:25 -0700</date>
            <delta_ts>2015-09-18 15:51:25 -0700</delta_ts>
            <desc>Patch for Landing (and EWS testing)</desc>
            <filename>148662-7.patch</filename>
            <type>text/plain</type>
            <size>136266</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg5OTkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzOCBA
QAorMjAxNS0wOS0xOCAgQmFzaWxlIENsZW1lbnQgIDxiYXNpbGVfY2xlbWVudEBhcHBsZS5jb20+
CisKKyAgICAgICAgW0VTNl0gVGFpbCBjYWxsIGZhc3QgcGF0aCBzaG91bGQgZWZmaWNpZW50bHkg
cmV1c2UgdGhlIGZyYW1lJ3Mgc3RhY2sgc3BhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODY2MgorCisgICAgICAgIFJldmlld2VkIGJ5IEdlb2Zm
cmV5IEdhcmVuLgorCisgICAgICAgIFRoaXMgaW50cm9kdWNlcyBhIG5ldyBjbGFzcyAoQ2FsbEZy
YW1lU2h1ZmZsZXIpIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yCisgICAgICAgIGVmZmljaWVudGx5
IGJ1aWxkaW5nIHRoZSBuZXcgZnJhbWVzIHdoZW4gcGVyZm9ybWluZyBhIHRhaWwgY2FsbC4gSW4K
KyAgICAgICAgb3JkZXIgZm9yIFJlcGF0Y2ggdG8ga25vdyBhYm91dCB0aGUgcG9zaXRpb24gb2Yg
YXJndW1lbnRzIG9uIHRoZQorICAgICAgICBzdGFjay9yZWdpc3RlcnMgKGUuZy4gZm9yIHBvbHlt
b3JwaGljIGNhbGwgaW5saW5lIGNhY2hlcyksIHdlIHN0b3JlIGEKKyAgICAgICAgQ2FsbEZyYW1l
U2h1ZmZsZURhdGEgaW4gdGhlIENhbGxMaW5rSW5mby4gT3RoZXJ3aXNlLCB0aGUgSklUIGFuZCBE
RkcKKyAgICAgICAgY29tcGlsZXIgYXJlIG5vdyB1c2luZyBDYWxsRnJhbWVTaHVmZmxlciBpbnN0
ZWFkIG9mCisgICAgICAgIENDYWxsSGVscGVyczo6cHJlcGFyZUZvclRhaWxDYWxsU2xvdygpIHRv
IGJ1aWxkIHRoZSBmcmFtZSBmb3IgYSB0YWlsCisgICAgICAgIGNhbGwuCisKKyAgICAgICAgV2hl
biB0YWtpbmcgYSBzbG93IHBhdGgsIHdlIHN0aWxsIGJ1aWxkIHRoZSBmcmFtZSBhcyBpZiBkb2lu
ZyBhIHJlZ3VsYXIKKyAgICAgICAgY2FsbCwgYmVjYXVzZSB3ZSBjb3VsZCB0aHJvdyBhbiBleGNl
cHRpb24gYW5kIG5lZWQgdGhlIGNhbGxlcidzIGZyYW1lCisgICAgICAgIGF0IHRoYXQgcG9pbnQu
IFRoaXMgbWVhbnMgdGhhdCBmb3IgdmlydHVhbCBjYWxscywgd2UgZG9uJ3QgYmVuZWZpdCBmcm9t
CisgICAgICAgIHRoZSBlZmZpY2llbnQgZnJhbWUgbW92ZSBmb3Igbm93LgorCisgICAgICAgICog
Q01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvai5maWx0ZXJzOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVy
Lmg6CisgICAgICAgIChKU0M6OkFSTXY3QXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKToKKyAgICAg
ICAgKEpTQzo6QVJNdjdBc3NlbWJsZXI6Omxhc3RSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkFS
TXY3QXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2Vt
Ymxlcjo6bGFzdEZQUmVnaXN0ZXIpOgorICAgICAgICAqIGFzc2VtYmxlci9BYm9ydFJlYXNvbi5o
OgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5oOgorICAgICAgICAoSlNDOjpDYWxs
TGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0lu
Zm86OmZyYW1lU2h1ZmZsZURhdGEpOgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUmVjb3Zlcnku
aDoKKyAgICAgICAgKEpTQzo6VmFsdWVSZWNvdmVyeTo6aW5SZWdpc3Rlcik6CisgICAgICAgICog
ZGZnL0RGR0dlbmVyYXRpb25JbmZvLmg6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbklu
Zm86OnJlY292ZXJ5KToKKyAgICAgICAgKiBqaXQvQ2FjaGVkUmVjb3ZlcnkuY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6Q2FjaGVkUmVjb3Zlcnk6OmxvYWRzSW50b0ZQUik6CisgICAgICAgIChK
U0M6OkNhY2hlZFJlY292ZXJ5Ojpsb2Fkc0ludG9HUFIpOgorICAgICAgICAqIGppdC9DYWNoZWRS
ZWNvdmVyeS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVjb3Zlcnk6OkNhY2hlZFJl
Y292ZXJ5KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVjb3Zlcnk6OnRhcmdldHMpOgorICAgICAg
ICAoSlNDOjpDYWNoZWRSZWNvdmVyeTo6YWRkVGFyZ2V0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVk
UmVjb3Zlcnk6OnJlbW92ZVRhcmdldCk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5Ojpj
bGVhclRhcmdldHMpOgorICAgICAgICAoSlNDOjpDYWNoZWRSZWNvdmVyeTo6c2V0V2FudGVkSlNW
YWx1ZVJlZ3MpOgorICAgICAgICAoSlNDOjpDYWNoZWRSZWNvdmVyeTo6c2V0V2FudGVkRlBSKToK
KyAgICAgICAgKEpTQzo6Q2FjaGVkUmVjb3Zlcnk6OmJveGluZ1JlcXVpcmVzR1BSKToKKyAgICAg
ICAgKEpTQzo6Q2FjaGVkUmVjb3Zlcnk6OmJveGluZ1JlcXVpcmVzRlBSKToKKyAgICAgICAgKEpT
Qzo6Q2FjaGVkUmVjb3Zlcnk6OnJlY292ZXJ5KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVjb3Zl
cnk6OnNldFJlY292ZXJ5KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVjb3Zlcnk6OndhbnRlZEpT
VmFsdWVSZWdzKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVjb3Zlcnk6OndhbnRlZEZQUik6Cisg
ICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChK
U0M6OkNhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMpOgorICAg
ICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKiBqaXQv
Q2FsbEZyYW1lU2h1ZmZsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1
ZmZsZXI6OkNhbGxGcmFtZVNodWZmbGVyKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZs
ZXI6OmR1bXApOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6Z2V0Q2FjaGVkUmVj
b3ZlcnkpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c2V0Q2FjaGVkUmVjb3Zl
cnkpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c3BpbGwpOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6ZW1pdERlbHRhQ2hlY2spOgorICAgICAgICAoSlNDOjpD
YWxsRnJhbWVTaHVmZmxlcjo6cHJlcGFyZUZvclNsb3dQYXRoKToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lU2h1ZmZsZXI6OnByZXBhcmVGb3JUYWlsQ2FsbCk6CisgICAgICAgIChKU0M6OkNhbGxG
cmFtZVNodWZmbGVyOjp0cnlXcml0ZXMpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxl
cjo6cGVyZm9ybVNhZmVXcml0ZXMpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6
cHJlcGFyZUFueSk6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVyLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6bG9ja0dQUik6CisgICAgICAgIChKU0M6
OkNhbGxGcmFtZVNodWZmbGVyOjphY3F1aXJlR1BSKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1l
U2h1ZmZsZXI6OnJlbGVhc2VHUFIpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6
c25hcHNob3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c2V0Q2FsbGVlSlNW
YWx1ZVJlZ3MpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6YXNzdW1lQ2FsbGVl
SXNDZWxsKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmNhbkJveCk6CisgICAg
ICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjplbnN1cmVCb3gpOgorICAgICAgICAoSlNDOjpD
YWxsRnJhbWVTaHVmZmxlcjo6ZW5zdXJlTG9hZCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNo
dWZmbGVyOjpjYW5Mb2FkQW5kQm94KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6
OnVwZGF0ZVJlY292ZXJ5KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmNsZWFy
Q2FjaGVkUmVjb3ZlcnkpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6YWRkQ2Fj
aGVkUmVjb3ZlcnkpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6bnVtTG9jYWxz
KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmdldE9sZCk6CisgICAgICAgIChK
U0M6OkNhbGxGcmFtZVNodWZmbGVyOjpzZXRPbGQpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVT
aHVmZmxlcjo6Zmlyc3RPbGQpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6bGFz
dE9sZCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjppc1ZhbGlkT2xkKToKKyAg
ICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmFyZ0NvdW50KToKKyAgICAgICAgKEpTQzo6
Q2FsbEZyYW1lU2h1ZmZsZXI6OmdldE5ldyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZm
bGVyOjpzZXROZXcpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6YWRkTmV3KToK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmZpcnN0TmV3KToKKyAgICAgICAgKEpT
Qzo6Q2FsbEZyYW1lU2h1ZmZsZXI6Omxhc3ROZXcpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVT
aHVmZmxlcjo6aXNWYWxpZE5ldyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpu
ZXdBc09sZCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpnZXRGcmVlUmVnaXN0
ZXIpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6Z2V0RnJlZUdQUik6CisgICAg
ICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpnZXRGcmVlRlBSKToKKyAgICAgICAgKEpTQzo6
Q2FsbEZyYW1lU2h1ZmZsZXI6Omhhc0ZyZWVSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkNhbGxG
cmFtZVNodWZmbGVyOjplbnN1cmVSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNo
dWZmbGVyOjplbnN1cmVHUFIpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6ZW5z
dXJlRlBSKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmFkZHJlc3NGb3JPbGQp
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6aXNVbmRlY2lkZWQpOgorICAgICAg
ICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6aXNTbG93UGF0aCk6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZVNodWZmbGVyOjphZGRyZXNzRm9yTmV3KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1l
U2h1ZmZsZXI6OmRhbmdlckZyb250aWVyKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZs
ZXI6OmlzRGFuZ2VyTmV3KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OnVwZGF0
ZURhbmdlckZyb250aWVyKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6Omhhc09u
bHlTYWZlV3JpdGVzKToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6ZW1pdFN0b3JlKToKKyAg
ICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXRCb3gpOgorICAgICAgICAoSlNDOjpD
YWxsRnJhbWVTaHVmZmxlcjo6ZW1pdExvYWQpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVm
Zmxlcjo6Y2FuTG9hZCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjplbWl0RGlz
cGxhY2UpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlcjY0LmNwcDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjplbWl0U3RvcmUpOgorICAgICAgICAoSlND
OjpDYWxsRnJhbWVTaHVmZmxlcjo6ZW1pdEJveCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNo
dWZmbGVyOjplbWl0TG9hZCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpjYW5M
b2FkKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXREaXNwbGFjZSk6Cisg
ICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENh
bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZSk6CisgICAgICAg
ICogaml0L1JlZ2lzdGVyTWFwLmNwcDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJNYXA6OlJlZ2lz
dGVyTWFwKToKKyAgICAgICAgKEpTQzo6R1BSTWFwOjpHUFJNYXApOgorICAgICAgICAoSlNDOjpG
UFJNYXA6OkZQUk1hcCk6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlND
OjpsaW5rUG9seW1vcnBoaWNDYWxsKToKKwogMjAxNS0wOS0xOCAgU3Vrb2xzYWsgU2Frc2h1d29u
ZyAgPHN1a29sc2FrQGdtYWlsLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQgdHlwZSBjb252ZXJz
aW9uIGluc3RydWN0aW9ucyBpbiBXZWJBc3NlbWJseQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTg5OTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zNjAsNiArMzYwLDExIEBAIHNldChK
YXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAKICAgICBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAogICAg
IGppdC9CaW5hcnlTd2l0Y2guY3BwCisgICAgaml0L0NhY2hlZFJlY292ZXJ5LmNwcAorICAgIGpp
dC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAKKyAgICBqaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3Bw
CisgICAgaml0L0NhbGxGcmFtZVNodWZmbGVyMzJfNjQuY3BwCisgICAgaml0L0NhbGxGcmFtZVNo
dWZmbGVyNjQuY3BwCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5jcHAKICAgICBq
aXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKICAgICBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZp
eGVkVk1Qb29sLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
CShyZXZpc2lvbiAxODk5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02MjAs
NiArNjIwLDExIEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxTdGFj
a1Zpc2l0b3IuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEFzc2VtYmx5
SGVscGVycy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcQmluYXJ5U3dp
dGNoLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxDYWNoZWRSZWNvdmVy
eS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcQ2FsbEZyYW1lU2h1ZmZs
ZURhdGEuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XENhbGxGcmFtZVNo
dWZmbGVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxDYWxsRnJhbWVT
aHVmZmxlcjMyXzY0LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxDYWxs
RnJhbWVTaHVmZmxlcjY0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxF
eGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5caml0XEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5caml0XEV4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAiIC8+CkBAIC0xNDE5
LDYgKzE0MjQsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcU3Rh
Y2tWaXNpdG9yLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcQXNzZW1ibHlI
ZWxwZXJzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcQmluYXJ5U3dpdGNo
LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcQ2FjaGVkUmVjb3ZlcnkuaCIg
Lz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxDYWxsRnJhbWVTaHVmZmxlRGF0YS5o
IiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XENhbGxGcmFtZVNodWZmbGVyLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcQ0NhbGxIZWxwZXJzLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcQ29tcGFjdEpJVENvZGVNYXAuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouaCIg
Lz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZp
bHRlcnMJKHJldmlzaW9uIDE4OTk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBj
b3B5KQpAQCAtMzk2LDYgKzM5NiwyMSBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0
XEhvc3RDYWxsUmV0dXJuVmFsdWUuY3BwIj4KICAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+CiAg
ICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcQ2FjaGVkUmVj
b3ZlcnkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3Bw
Ij4KKyAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwIj4KKyAgICAgIDxG
aWx0ZXI+aml0PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxqaXRcQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAiPgorICAgICAgPEZpbHRlcj5q
aXQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGppdFxDYWxsRnJhbWVTaHVmZmxlcjY0LmNwcCI+CisgICAgICA8RmlsdGVyPmppdDwvRmlsdGVy
PgorICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVC5j
cHAiPgogICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODk5OTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtOTY1LDEyICs5NjUsMTggQEAKIAkJNURCQjE1MUIxMzFEMEIzMTAw
NTZBRDM2IC8qIHRlc3RhcGkuanMgaW4gQ29weSBTdXBwb3J0IFNjcmlwdCAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQ4NTc3NDBBNDY5NkM4MDAzMjE0NkMgLyogdGVzdGFw
aS5qcyAqLzsgfTsKIAkJNURCQjE1MjUxMzFEMEJENzAwNTZBRDM2IC8qIG1pbmlkb20uanMgaW4g
Q29weSBTdXBwb3J0IFNjcmlwdCAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NDEyMTEwRDBBNDg3ODg3MDA0ODAyNTUgLyogbWluaWRvbS5qcyAqLzsgfTsKIAkJNURFNkU1QjMw
RTE3MjhFQzAwMTgwNDA3IC8qIGNyZWF0ZV9oYXNoX3RhYmxlIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjY5MkE4NTQwMjU1NTk3RDAxRkY2MEY3IC8qIGNy
ZWF0ZV9oYXNoX3RhYmxlICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07Ci0J
CTYyM0EzN0VDMUI4N0E3QzAwMDc1NDIwOSAvKiBSZWdpc3Rlck1hcC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjIzQTM3RUIxQjg3QTdCRDAwNzU0MjA5
IC8qIFJlZ2lzdGVyTWFwLmggKi87IH07CisJCTYyM0EzN0VDMUI4N0E3QzAwMDc1NDIwOSAvKiBS
ZWdpc3Rlck1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNjIzQTM3RUIxQjg3QTdCRDAwNzU0MjA5IC8qIFJlZ2lzdGVyTWFwLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjI3NjczMjMxQjY4MEMxRTAw
RkQ5RjJFIC8qIENhbGxNb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDYyNzY3MzIxMUI2ODBDMUUwMEZEOUYyRSAvKiBDYWxsTW9kZS5jcHAgKi87
IH07CiAJCTYyNzY3MzI0MUI2ODBDMUUwMEZEOUYyRSAvKiBDYWxsTW9kZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjI3NjczMjIxQjY4MEMxRTAwRkQ5
RjJFIC8qIENhbGxNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNjJEMkQzOEYxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURhdGEu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjJEMkQz
OEQxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURhdGEuY3BwICovOyB9OwogCQk2MkQy
RDM5MDFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjJEMkQzOEUxQURGMTAzRjAwMDIwNkMx
IC8qIEZ1bmN0aW9uUmFyZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk2MkQ3NTVENDFCODRGQjNEMDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1
ZmZsZXI2NC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2MkQ3NTVEMzFCODRGQjM5MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAgKi87
IH07CisJCTYyRDc1NUQ1MUI4NEZCNDAwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlcjMyXzY0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyRDc1
NUQyMUI4NEZCMzkwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlcjMyXzY0LmNwcCAqLzsgfTsK
KwkJNjJENzU1RDYxQjg0RkI0NjAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyRDc1NUQwMUI4NEZC
MzkwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlci5jcHAgKi87IH07CisJCTYyRDc1NUQ3MUI4
NEZCNEEwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjJENzU1RDExQjg0RkIzOTAwMTgwMUZBIC8qIENh
bGxGcmFtZVNodWZmbGVyLmggKi87IH07CiAJCTYyRTNENUYwMUI4RDBCNzMwMEI4NjhCQiAvKiBE
YXRhRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDYyRTNENUVGMUI4RDBCNzMwMEI4NjhCQiAvKiBEYXRhRm9ybWF0LmNwcCAqLzsgfTsKKwkJ
NjJFQzlCQjYxQjdFQjA3QzAwMzAzQUQxIC8qIENhbGxGcmFtZVNodWZmbGVEYXRhLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyRUM5QkI0MUI3RUIw
N0MwMDMwM0FEMSAvKiBDYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAgKi87IH07CisJCTYyRUM5QkI3
MUI3RUIwN0MwMDMwM0FEMSAvKiBDYWxsRnJhbWVTaHVmZmxlRGF0YS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjJFQzlCQjUxQjdFQjA3QzAwMzAzQUQx
IC8qIENhbGxGcmFtZVNodWZmbGVEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjJGMkFBMzcxQjBCRURFMzAwNjEwQzdBIC8qIERGR0xhenlO
b2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYy
QTlBMjlFMUIwQkVENDgwMEJENTRDQSAvKiBERkdMYXp5Tm9kZS5jcHAgKi87IH07CiAJCTYyRjJB
QTM4MUIwQkVERTMwMDYxMEM3QSAvKiBERkdMYXp5Tm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjJBOUEyOUYxQjBCRUQ0ODAwQkQ1NENBIC8qIERG
R0xhenlOb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNjUwN0QyOUUwRTg3MUU1RTAwRDdEODk2IC8qIEpTVHlwZUluZm8uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MDdEMjk3MEU4NzFFNEEwMEQ3
RDg5NiAvKiBKU1R5cGVJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTk5MCw2ICs5OTYsOCBAQAogCQk2NTdDRjQ1ODE5QkY2NjYyMDA0QUNC
RjIgLyogSlNDYWxsZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNjU3Q0Y0NTYxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmNwcCAqLzsgfTsK
IAkJNjU3Q0Y0NTkxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTdDRjQ1NzE5QkY2NjYyMDA0QUNCRjIg
LyogSlNDYWxsZWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk2NThEM0E1NjE5NjM4MjY4MDAzQzQ1RDYgLyogVk1FbnRyeVJlY29yZC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU4RDNBNTUxOTYzODI2
ODAwM0M0NUQ2IC8qIFZNRW50cnlSZWNvcmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQk2NUI4MzkyRTFCQUNBRDM2MDA0NEU4MjQgLyogQ2FjaGVk
UmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDY1QjgzOTJDMUJBQ0E5MkEwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5oICovOyB9OworCQk2
NUI4MzkyRjFCQUNBRDZBMDA0NEU4MjQgLyogQ2FjaGVkUmVjb3ZlcnkuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVCODM5MkQxQkFDQTlEMzAwNDRF
ODI0IC8qIENhY2hlZFJlY292ZXJ5LmNwcCAqLzsgfTsKIAkJNjVDMDI4NTAxNzE3OTVFMjAwMzUx
RTM1IC8qIEFSTXY3RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDY1QzAyODRGMTcxNzk1RTIwMDM1MUUzNSAvKiBBUk12N0Rpc2Fz
c2VtYmxlci5jcHAgKi87IH07CiAJCTY1QzAyODVDMTcxNzk2NjgwMDM1MUUzNSAvKiBBUk12N0RP
cGNvZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NjVDMDI4NUExNzE3OTY2ODAwMzUxRTM1IC8qIEFSTXY3RE9wY29kZS5jcHAgKi87IH07CiAJCTY1
QzAyODVEMTcxNzk2NjgwMDM1MUUzNSAvKiBBUk12N0RPcGNvZGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1QzAyODVCMTcxNzk2NjgwMDM1MUUzNSAv
KiBBUk12N0RPcGNvZGUuaCAqLzsgfTsKQEAgLTI3NzQsNyArMjc4MiwxMyBAQAogCQk2MkE5QTI5
RjFCMEJFRDQ4MDBCRDU0Q0EgLyogREZHTGF6eU5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHTGF6eU5vZGUuaDsgcGF0aCA9IGRmZy9ERkdMYXp5Tm9kZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2MkQyRDM4RDFBREYxMDNGMDAwMjA2QzEgLyogRnVu
Y3Rpb25SYXJlRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBG
dW5jdGlvblJhcmVEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjJEMkQz
OEUxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRnVuY3Rpb25SYXJlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk2MkQ3NTVEMDFCODRGQjM5MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbEZyYW1lU2h1ZmZs
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2MkQ3NTVEMTFCODRGQjM5MDAx
ODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ2FsbEZyYW1lU2h1ZmZsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NjJENzU1RDIxQjg0RkIzOTAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyMzJfNjQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbEZyYW1lU2h1ZmZsZXIzMl82
NC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTYyRDc1NUQzMUI4NEZCMzkwMDE4
MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlcjY0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENhbGxGcmFtZVNodWZmbGVyNjQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2MkUzRDVFRjFCOEQwQjczMDBCODY4QkIgLyogRGF0YUZvcm1hdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRhRm9ybWF0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjJFQzlCQjQxQjdFQjA3QzAwMzAzQUQxIC8qIENhbGxG
cmFtZVNodWZmbGVEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENhbGxGcmFtZVNodWZmbGVEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NjJFQzlCQjUxQjdFQjA3QzAwMzAzQUQxIC8qIENhbGxGcmFtZVNodWZmbGVEYXRhLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxGcmFtZVNodWZmbGVEYXRhLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1MDdEMjk3MEU4NzFFNEEwMEQ3RDg5NiAvKiBKU1R5
cGVJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVHlwZUluZm8uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUxMTIyRTUxNDA0NjlCQTAwMkIxMDFEIC8q
IHRlc3RSZWdFeHAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gdGVz
dFJlZ0V4cC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1MTEyMzA1MTQwNDZB
NEMwMDJCMTAxRCAvKiB0ZXN0UmVnRXhwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4
cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5J
bmRleCA9IDA7IHBhdGggPSB0ZXN0UmVnRXhwOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNf
RElSOyB9OwpAQCAtMjgwOSw2ICsyODIzLDggQEAKIAkJNjU4RDNBNTUxOTYzODI2ODAwM0M0NUQ2
IC8qIFZNRW50cnlSZWNvcmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBsaW5lRW5kaW5n
ID0gMDsgcGF0aCA9IFZNRW50cnlSZWNvcmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgeGNM
YW5ndWFnZVNwZWNpZmljYXRpb25JZGVudGlmaWVyID0geGNvZGUubGFuZy5vYmpjcHA7IH07CiAJ
CTY1OTg3RjJDMTY3RkU4NEIwMDNDMkY4RCAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRDb21waWxhdGlvbklu
Zm8uaDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTY1OTg3RjJGMTY4MjhBN0UwMDNDMkY4RCAvKiBVbnVzZWRQb2lu
dGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVudXNlZFBvaW50ZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjVCODM5MkMxQkFDQTkyQTAwNDRFODI0IC8q
IENhY2hlZFJlY292ZXJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hl
ZFJlY292ZXJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTY1QjgzOTJEMUJBQ0E5
RDMwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBDYWNoZWRSZWNvdmVyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTY1QzAyODRGMTcxNzk1RTIwMDM1MUUzNSAvKiBBUk12N0Rpc2Fzc2VtYmxlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBUk12N0Rpc2Fzc2VtYmxlci5j
cHA7IHBhdGggPSBkaXNhc3NlbWJsZXIvQVJNdjdEaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk2NUMwMjg1QTE3MTc5NjY4MDAzNTFFMzUgLyogQVJNdjdET3Bj
b2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFSTXY3RE9wY29k
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1QzAyODVCMTcxNzk2NjgwMDM1
MUUzNSAvKiBBUk12N0RPcGNvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QVJNdjdET3Bjb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00MDkyLDYgKzQx
MDgsMTQgQEAKIAkJCQkwRjI0RTUzQzE3RUE5RjU5MDBBQkIyMTcgLyogQXNzZW1ibHlIZWxwZXJz
LmggKi8sCiAJCQkJMEY2NEIyNkYxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAg
Ki8sCiAJCQkJMEY2NEIyNzAxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovLAor
CQkJCTY1QjgzOTJDMUJBQ0E5MkEwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5oICovLAorCQkJ
CTY1QjgzOTJEMUJBQ0E5RDMwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8sCisJCQkJ
NjJFQzlCQjQxQjdFQjA3QzAwMzAzQUQxIC8qIENhbGxGcmFtZVNodWZmbGVEYXRhLmNwcCAqLywK
KwkJCQk2MkVDOUJCNTFCN0VCMDdDMDAzMDNBRDEgLyogQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaCAq
LywKKwkJCQk2MkQ3NTVEMDFCODRGQjM5MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIuY3Bw
ICovLAorCQkJCTYyRDc1NUQxMUI4NEZCMzkwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlci5o
ICovLAorCQkJCTYyRDc1NUQyMUI4NEZCMzkwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlcjMy
XzY0LmNwcCAqLywKKwkJCQk2MkQ3NTVEMzFCODRGQjM5MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1
ZmZsZXI2NC5jcHAgKi8sCiAJCQkJMEYyNEU1M0QxN0VBOUY1OTAwQUJCMjE3IC8qIENDYWxsSGVs
cGVycy5oICovLAogCQkJCTBGRDgyRTM3MTQxQUIxNDIwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29k
ZU1hcC5oICovLAogCQkJCTBGRjA1NEY3MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxs
b2NhdGlvbkZ1enouY3BwICovLApAQCAtNTkyMSw2ICs1OTQ1LDcgQEAKIAkJCQk3OTdFMDdBQTFC
OEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRTA1MDI4MUFBOTA5NTYwMEQzM0IzMyAvKiBTY29wZWRBcmd1bWVudHMuaCBp
biBIZWFkZXJzICovLAogCQkJCTUyQzA2MTFGMUFBNTFFMUMwMEI0QURCQSAvKiBSdW50aW1lVHlw
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNjIzQTM3RUMxQjg3QTdDMDAwNzU0MjA5IC8qIFJlZ2lz
dGVyTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTRENTVCODFBRTcxNkNBMDA1MkU0NTkgLyog
SXRlcmF0aW9uU3RhdHVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTUwNjg2NTFBRTI0NjM5MDAw
OURBQjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNDQyQ0Iy
NTFBNkNEQjhDMDA1RDNEN0MgLyogSlNJbnB1dHMuanNvbiBpbiBIZWFkZXJzICovLApAQCAtNTk1
Niw2ICs1OTgxLDcgQEAKIAkJCQlDNEY0QjZGNDFBMDVDOTQ0MDA1Q0FCNzYgLyogY3BwX2dlbmVy
YXRvci5weSBpbiBIZWFkZXJzICovLAogCQkJCUE1MzI0Mzk0MTg1Njk3MDkwMDJFRDY5MiAvKiBn
ZW5lcmF0ZS1jb21iaW5lZC1pbnNwZWN0b3ItanNvbi5weSBpbiBIZWFkZXJzICovLAogCQkJCUE1
ODQwRTI3MTg3Qzk4MUUwMDg0M0IxMCAvKiBjc3NtaW4ucHkgaW4gSGVhZGVycyAqLywKKwkJCQk2
MkQ3NTVENzFCODRGQjRBMDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE1RUE3MTA0MTlGNkRFNzIwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2JhY2tl
bmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovLAogCQkJCUM0NzAz
Q0Q1MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTVFQTcxMDUxOUY2REU3NDAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfY29uZmln
dXJhdGlvbl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLywKQEAgLTYxMTYsNiArNjE0Miw3IEBACiAJ
CQkJMEYzQjNBMjgxNTQ0Qzk5NzAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0E0MjQwMTdBMEJCRkQwMEE4REI4MSAvKiBERkdDbG9i
YmVyaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzdBNDI0MjE3QTBCQkZEMDBBOERCODEgLyog
REZHQ2xvYmJlclNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNjJFQzlCQjcxQjdFQjA3QzAwMzAz
QUQxIC8qIENhbGxGcmFtZVNodWZmbGVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdCMjk0
RDE0QzNDRDRDMDA3QzNEQjEgLyogREZHQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVB
MEEzMjE3MEQ0MEJGMDBCQjcyMkMgLyogREZHQ29tbW9uRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYzOEIwMTgxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5LmggaW4gSGVh
ZGVycyAqLywKQEAgLTY0MzcsNyArNjQ2NCw2IEBACiAJCQkJRkVGNjgzNjExNzQzNDNDQzAwQTMy
RTI1IC8qIEpJVFN0dWJzWDg2LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUY2ODM2MDE3NDM0M0ND
MDBBMzJFMjUgLyogSklUU3R1YnNYODZfNjQuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEREIxRjYz
MThENzdEQkUwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0LmggaW4gSGVhZGVycyAqLywKLQkJCQk2
MjNBMzdFQzFCODdBN0MwMDA3NTQyMDkgLyogUmVnaXN0ZXJNYXAuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3QTRBRTEwMTc5NzNCNEQwMDU2MTJCMSAvKiBKSVRTdHVic1g4NkNvbW1vbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY1RUY5MUYxNjg3OEY3RDAwM0U1QzI1IC8qIEpJVFRodW5rcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZDNzEyRTMxN0NEODc5MzAwOENDOTNDIC8qIEpJVFRvREZHRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKQEAgLTY3NTQsNiArNjc4
MCw3IEBACiAJCQkJMTQyOUQ4ODYwRUQyMUMzRDAwQjg5NjE5IC8qIFNhbXBsaW5nVG9vbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZFMjU0RjcxQUJEREQyMjAwQTdDNkQyIC8qIERGR1ZhcmFyZ3NG
b3J3YXJkaW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRFNTUyMTdFRTI3NDkwMEFC
QjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTY1
QjgzOTJFMUJBQ0FEMzYwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTVGRDAwNjgxODlBRkU5QzAwNjMzMjMxIC8qIFNjcmlwdEFyZ3VtZW50cy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTUwM0ZBMjExODhFRkY2ODAwMTEwRjE0IC8qIFNjcmlwdEJyZWFrcG9p
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RkQwMDZFMTg5QjAwQUEwMDYzMzIzMSAvKiBTY3Jp
cHRDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICovLApAQCAtNzM4Niw2ICs3NDEzLDcgQEAKIAkJCQkw
RjEyREUwRjE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDdGMzlCRjEwN0VDMzc2MDA0MjdBNDggLyogQXJyYXlDb25zdHJ1Y3Rvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBN0JEQUVDODE3RjRFQTE0MDBGNjE0MEMgLyogQXJyYXlJdGVy
YXRvclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2NUI4MzkyRjFCQUNBRDZBMDA0
NEU4MjQgLyogQ2FjaGVkUmVjb3ZlcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2Mzk0NTQx
NUQwNzA1NTAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDdGMzlDMDEwN0VDMzc2MDA0MjdBNDggLyogQXJyYXlQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEYyNEU1NDAxN0VBOUY1OTAwQUJCMjE3IC8qIEFzc2VtYmx5SGVscGVycy5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTc0NjYsNiArNzQ5NCw3IEBACiAJCQkJMEZGMEYxOUQxNkI3MkEw
ODAwNURGOTVCIC8qIERGR0NvbW1vbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEzMTE3
MEQ0MEJGMDBCQjcyMkMgLyogREZHQ29tbW9uRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjM4QjAxNzE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25LZXkuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJNjJFQzlCQjYxQjdFQjA3QzAwMzAzQUQxIC8qIENhbGxGcmFtZVNodWZmbGVE
YXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzhCMDE5MTdDRkU3NTUwMEIxNDREMyAvKiBE
RkdDb21waWxhdGlvbk1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTFCOUUyM0IxQjRFMEQ2
NzAwQkM3RkVEIC8qIEludGxDb2xsYXRvckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGM0IzQTFBMTUzRTY4RjIwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTc1MjEsNiArNzU1MCw3IEBACiAJCQkJMEZGMEYxOUMxNkI3
MkEwMzAwNURGOTVCIC8qIERGR05vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZBNTgxQkEx
NTBFOTUyQzAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4
NkVDOURDRjEzMjhERjgyMDAyQjJBRDcgLyogREZHT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk2MkQ3NTVENjFCODRGQjQ2MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRkQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR09TUkF2
YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFNTYx
NDFEQUYwODAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RDhBMzI1MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTc2NTEsNiArNzY4MSw3IEBACiAJCQkJN0IwMjQ3NTYxQjg2
ODJFMTAwNTQyNDQwIC8qIFdBU01GdW5jdGlvblBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkYwRjE5RjE2QjcyQTE3MDA1REY5NUIgLyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1MkIzMTBGRDE5NzRBRTg3MDA4MDg1N0MgLyogRnVuY3Rpb25I
YXNFeGVjdXRlZENhY2hlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTYyRDc1NUQ1MUI4NEZCNDAw
MDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlcjMyXzY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0N0YzOUNDMTA3RUMzNzYwMDQyN0E0OCAvKiBGdW5jdGlvblByb3RvdHlwZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjY0QjI3MTFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzY2RDJGMTVBOERDRTAwMDhGMzYzRSAvKiBHQ0F3YXJl
SklUU3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03Nzc0LDYgKzc4MDUsNyBAQAog
CQkJCUE3MjcwMDkwMERBQzZCQkMwMEU1NDhENyAvKiBKU05vdEFuT2JqZWN0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0N0YzOUQ0MTA3RUMzNzYwMDQyN0E0OCAvKiBKU09iamVjdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDgyQjdFNDBBNDMwNzYwMDA1MTdDRkMgLyogSlNPYmplY3RSZWYu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNjJENzU1RDQxQjg0RkIzRDAwMTgwMUZBIC8qIENhbGxG
cmFtZVNodWZmbGVyNjQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdGOTkzNjAwRkQ3MzI1MTAw
QTBCMkQwIC8qIEpTT05PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGQjZDMzgxQUY0
OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTVGNkU2
OTUwRTVCNUY5NzAwOTFFODYwIC8qIEpTUHJvZmlsZXJQcml2YXRlLmNwcCBpbiBTb3VyY2VzICov
LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3Nl
bWJsZXIuaAkocmV2aXNpb24gMTg5OTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9BUk12N0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NTMsMTEgKzQ1MywxMSBA
QCBwdWJsaWM6CiAgICAgdHlwZWRlZiBBUk1SZWdpc3RlcnM6OkZQUXVhZFJlZ2lzdGVySUQgRlBR
dWFkUmVnaXN0ZXJJRDsKICAgICB0eXBlZGVmIEZQRG91YmxlUmVnaXN0ZXJJRCBGUFJlZ2lzdGVy
SUQ7CiAgICAgCi0gICAgc3RhdGljIFJlZ2lzdGVySUQgZmlyc3RSZWdpc3RlcigpIHsgcmV0dXJu
IEFSTVJlZ2lzdGVyczo6cjA7IH0KLSAgICBzdGF0aWMgUmVnaXN0ZXJJRCBsYXN0UmVnaXN0ZXIo
KSB7IHJldHVybiBBUk1SZWdpc3RlcnM6OnIxMzsgfQotICAgIAotICAgIHN0YXRpYyBGUFJlZ2lz
dGVySUQgZmlyc3RGUFJlZ2lzdGVyKCkgeyByZXR1cm4gQVJNUmVnaXN0ZXJzOjpkMDsgfQotICAg
IHN0YXRpYyBGUFJlZ2lzdGVySUQgbGFzdEZQUmVnaXN0ZXIoKSB7IHJldHVybiBBUk1SZWdpc3Rl
cnM6OmQzMTsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBmaXJzdFJlZ2lzdGVy
KCkgeyByZXR1cm4gQVJNUmVnaXN0ZXJzOjpyMDsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgUmVn
aXN0ZXJJRCBsYXN0UmVnaXN0ZXIoKSB7IHJldHVybiBBUk1SZWdpc3RlcnM6OnIxMzsgfQorCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBGUFJlZ2lzdGVySUQgZmlyc3RGUFJlZ2lzdGVyKCkgeyByZXR1
cm4gQVJNUmVnaXN0ZXJzOjpkMDsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgRlBSZWdpc3RlcklE
IGxhc3RGUFJlZ2lzdGVyKCkgeyByZXR1cm4gQVJNUmVnaXN0ZXJzOjpkMzE7IH0KIAogICAgIC8v
IChIUywgTE8sIEhJLCBMUykgLT4gKEFFLCBCLCBBLCBCRSkKICAgICAvLyAoVlMsIFZDKSAtPiAo
TywgTk8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fib3J0UmVhc29u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYm9ydFJl
YXNvbi5oCShyZXZpc2lvbiAxODk5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0Fib3J0UmVhc29uLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDcgQEAgZW51bSBB
Ym9ydFJlYXNvbiB7CiAgICAgSklUTm90U3VwcG9ydGVkICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA9IDI2MCwKICAgICBKSVRPZmZzZXRJc05vdE91dE9mTGluZSAgICAgICAgICAg
ICAgICAgICAgICAgICAgID0gMjcwLAogICAgIEpJVFVuY291Z2h0RXhjZXB0aW9uQWZ0ZXJDYWxs
ICAgICAgICAgICAgICAgICAgICAgPSAyNzUsCisgICAgSklUVW5leHBlY3RlZENhbGxGcmFtZVNp
emUgICAgICAgICAgICAgICAgICAgICAgICA9IDI3NywKICAgICBKSVRVbnJlYXNvbmFibGVMb29w
SGludEp1bXBUYXJnZXQgICAgICAgICAgICAgICAgID0gMjgwLAogICAgIFJQV1VucmVhc29uYWJs
ZUp1bXBUYXJnZXQgICAgICAgICAgICAgICAgICAgICAgICAgPSAyOTAsCiAgICAgUmVwYXRjaElu
ZWZmZWN0aXZlV2F0Y2hwb2ludCAgICAgICAgICAgICAgICAgICAgICA9IDMwMCwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9u
IDE4OTk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8u
aAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBDYWxsTGlua0luZm9f
aAogI2RlZmluZSBDYWxsTGlua0luZm9faAogCisjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZURh
dGEuaCIKICNpbmNsdWRlICJDYWxsTW9kZS5oIgogI2luY2x1ZGUgIkNvZGVMb2NhdGlvbi5oIgog
I2luY2x1ZGUgIkNvZGVTcGVjaWFsaXphdGlvbktpbmQuaCIKQEAgLTMzMSw2ICszMzIsMTYgQEAg
cHVibGljOgogCiAgICAgdm9pZCB2aXNpdFdlYWsoVk0mKTsKIAorICAgIHZvaWQgc2V0RnJhbWVT
aHVmZmxlRGF0YShjb25zdCBDYWxsRnJhbWVTaHVmZmxlRGF0YSYgc2h1ZmZsZURhdGEpCisgICAg
eworICAgICAgICBtX2ZyYW1lU2h1ZmZsZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxGcmFt
ZVNodWZmbGVEYXRhPihzaHVmZmxlRGF0YSk7CisgICAgfQorCisgICAgY29uc3QgQ2FsbEZyYW1l
U2h1ZmZsZURhdGEqIGZyYW1lU2h1ZmZsZURhdGEoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
ZnJhbWVTaHVmZmxlRGF0YS5nZXQoKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgQ29kZUxvY2F0
aW9uTmVhckNhbGwgbV9jYWxsUmV0dXJuTG9jYXRpb247CiAgICAgQ29kZUxvY2F0aW9uRGF0YUxh
YmVsUHRyIG1faG90UGF0aEJlZ2luOwpAQCAtMzM5LDYgKzM1MCw3IEBAIHByaXZhdGU6CiAgICAg
V3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+IG1fbGFzdFNlZW5DYWxsZWU7CiAgICAgUmVmUHRyPFBv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lPiBtX3N0dWI7CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0
aW5lPiBtX3Nsb3dTdHViOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0
YT4gbV9mcmFtZVNodWZmbGVEYXRhOwogICAgIGJvb2wgbV9oYXNTZWVuU2hvdWxkUmVwYXRjaCA6
IDE7CiAgICAgYm9vbCBtX2hhc1NlZW5DbG9zdXJlIDogMTsKICAgICBib29sIG1fY2xlYXJlZEJ5
R0MgOiAxOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3Zl
cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVS
ZWNvdmVyeS5oCShyZXZpc2lvbiAxODk5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAj
aWYgRU5BQkxFKEpJVCkKICNpbmNsdWRlICJHUFJJbmZvLmgiCiAjaW5jbHVkZSAiRlBSSW5mby5o
IgorI2luY2x1ZGUgIlJlZy5oIgogI2VuZGlmCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2lu
Y2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCkBAIC04Myw2ICs4NCwxOCBAQCBwdWJsaWM6CiAgICAg
CiAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVjaG5pcXVlICE9IERvbnRLbm93
OyB9CiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQorCisj
aWYgRU5BQkxFKEpJVCkKKyAgICBzdGF0aWMgVmFsdWVSZWNvdmVyeSBpblJlZ2lzdGVyKFJlZyBy
ZWcsIERhdGFGb3JtYXQgZGF0YUZvcm1hdCkKKyAgICB7CisgICAgICAgIGlmIChyZWcuaXNHUFIo
KSkKKyAgICAgICAgICAgIHJldHVybiBpbkdQUihyZWcuZ3ByKCksIGRhdGFGb3JtYXQpOworCisg
ICAgICAgIEFTU0VSVChyZWcuaXNGUFIoKSk7CisgICAgICAgIHJldHVybiBpbkZQUihyZWcuZnBy
KCksIGRhdGFGb3JtYXQpOworICAgIH0KKyNlbmRpZgorCiAgICAgZXhwbGljaXQgb3BlcmF0b3Ig
Ym9vbCgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0KCk7IH0KICAgICAKICAgICBzdGF0aWMgVmFsdWVS
ZWNvdmVyeSBpbkdQUihNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBncHIsIERhdGFGb3JtYXQg
ZGF0YUZvcm1hdCkKQEAgLTMwMCw2ICszMTMsMTIgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
cmV0dXJuIG1fdGVjaG5pcXVlID09IEluUGFpcjsKICAgICB9CisKKyAgICBKU1ZhbHVlUmVncyBq
c1ZhbHVlUmVncygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbkpTVmFsdWVSZWdz
KCkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZVJlZ3ModGFnR1BSKCksIHBheWxvYWRHUFIoKSk7
CisgICAgfQogI2Vsc2UKICAgICBib29sIGlzSW5KU1ZhbHVlUmVncygpIGNvbnN0CiAgICAgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAko
cmV2aXNpb24gMTg5OTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0
aW9uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNzgsNiArMzc4LDI5IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIG1fdXNlQ291bnQ7CiAgICAgfQogCisgICAgVmFsdWVSZWNvdmVyeSByZWNv
dmVyeShWaXJ0dWFsUmVnaXN0ZXIgc3BpbGxTbG90KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KG1faXNDb25zdGFudCkKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFu
dChtX25vZGUtPmNvbnN0YW50KCktPnZhbHVlKCkpOworCisgICAgICAgIGlmIChtX3JlZ2lzdGVy
Rm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUpCisgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNv
dmVyeTo6aW5GUFIodS5mcHIsIERhdGFGb3JtYXREb3VibGUpOworCisjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKKyAgICAgICAgaWYgKG1fcmVnaXN0ZXJGb3JtYXQgJiBEYXRhRm9ybWF0SlMpIHsKKyAg
ICAgICAgICAgIGlmIChtX3JlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRKUykKKyAgICAgICAg
ICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6aW5QYWlyKHUudi50YWdHUFIsIHUudi5wYXls
b2FkR1BSKTsKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjppbkdQUih1LnYucGF5
bG9hZEdQUiwgc3RhdGljX2Nhc3Q8RGF0YUZvcm1hdD4obV9yZWdpc3RlckZvcm1hdCAmIH5EYXRh
Rm9ybWF0SlMpKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGlmIChtX3JlZ2lzdGVyRm9y
bWF0KQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmluR1BSKHUuZ3ByLCBtX3Jl
Z2lzdGVyRm9ybWF0KTsKKworICAgICAgICBBU1NFUlQobV9zcGlsbEZvcm1hdCk7CisKKyAgICAg
ICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjayhzcGlsbFNsb3QsIG1f
c3BpbGxGb3JtYXQpOworICAgIH0KKwogcHJpdmF0ZToKICAgICB2b2lkIGFwcGVuZEJpcnRoKFZh
cmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NhY2hlZFJlY292ZXJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NhY2hlZFJlY292ZXJ5LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ2FjaGVkUmVjb3ZlcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhY2hlZFJlY292ZXJ5LmgiCisKKyNp
ZiBFTkFCTEUoSklUKQorCituYW1lc3BhY2UgSlNDIHsKKworLy8gV2UgcHJlZmVyIGxvYWRpbmcg
ZG91YmxlcyBhbmQgdW5kZXRlcm1pbmVkIEpTVmFsdWVzIGludG8gRlBScworLy8gYmVjYXVzZSBp
dCB3b3VsZCBvdGhlcndpc2UgdXNlIHVwIEdQUnMuICBUd28gaW4gSlNWQUxVRTMyXzY0LgorYm9v
bCBDYWNoZWRSZWNvdmVyeTo6bG9hZHNJbnRvRlBSKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHJl
Y292ZXJ5KCkudGVjaG5pcXVlKCkpIHsKKyAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluSlNTdGFj
azoKKyAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazoKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
IGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoKKyNlbmRpZgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKKy8v
IEludGVnZXJzLCBib29sZWFucyBhbmQgY2VsbHMgY2FuIGJlIGxvYWRlZCBpbnRvIEdQUnMKK2Jv
b2wgQ2FjaGVkUmVjb3Zlcnk6OmxvYWRzSW50b0dQUigpIGNvbnN0Cit7CisgICAgc3dpdGNoIChy
ZWNvdmVyeSgpLnRlY2huaXF1ZSgpKSB7CisgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFj
azoKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGNhc2UgSW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6
CisgICAgY2FzZSBTdHJpY3RJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKKyAgICBjYXNlIERpc3Bs
YWNlZEluSlNTdGFjazoKKyNlbmRpZgorICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNTdGFj
azoKKyAgICBjYXNlIENlbGxEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9DYWNoZWRSZWNvdmVyeS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ2FjaGVkUmVjb3ZlcnkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FjaGVkUmVjb3ZlcnkuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIENhY2hlZFJlY292ZXJ5X2gKKyNkZWZpbmUgQ2FjaGVkUmVjb3ZlcnlfaAor
CisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIlZhbHVlUmVjb3ZlcnkuaCIKKyNpbmNsdWRl
ICJWaXJ0dWFsUmVnaXN0ZXIuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCisvLyBBIENhY2hlZFJlY292ZXJ5IGlzIGEgd3JhcHBlciBhcm91bmQgYSBWYWx1
ZVJlY292ZXJ5IHRoYXQgcmVjb3JkcyB3aGVyZSBzYWlkCisvLyB2YWx1ZSBzaG91bGQgZ28gb24g
dGhlIHN0YWNrIGFuZC9vciBpbiByZWdpc3RlcnMuIFdoZW5ldmVyIHdlIHBlcmZvcm0gYW4KKy8v
IG9wZXJhdGlvbiBjaGFuZ2luZyB0aGUgVmFsdWVSZWNvdmVyeSwgd2UgdXBkYXRlIHRoZSBDYWNo
ZWRSZWNvdmVyeSdzIG1lbWJlcgorLy8gaW4gcGxhY2UuCitjbGFzcyBDYWNoZWRSZWNvdmVyeSB7
CitwdWJsaWM6CisgICAgQ2FjaGVkUmVjb3ZlcnkoVmFsdWVSZWNvdmVyeSByZWNvdmVyeSkKKyAg
ICAgICAgOiBtX3JlY292ZXJ5IHsgcmVjb3ZlcnkgfQorICAgIHsKKyAgICB9CisKKyAgICBDYWNo
ZWRSZWNvdmVyeShDYWNoZWRSZWNvdmVyeSYpID0gZGVsZXRlOworICAgIENhY2hlZFJlY292ZXJ5
KENhY2hlZFJlY292ZXJ5JiYpID0gZGVsZXRlOworICAgIENhY2hlZFJlY292ZXJ5JiBvcGVyYXRv
cj0oQ2FjaGVkUmVjb3ZlcnkmKSA9IGRlbGV0ZTsKKyAgICBDYWNoZWRSZWNvdmVyeSYgb3BlcmF0
b3I9KENhY2hlZFJlY292ZXJ5JiYpID0gZGVsZXRlOworCisgICAgY29uc3QgVmVjdG9yPFZpcnR1
YWxSZWdpc3RlciwgMT4mIHRhcmdldHMoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldHM7IH0KKwor
ICAgIHZvaWQgYWRkVGFyZ2V0KFZpcnR1YWxSZWdpc3RlciByZWcpCisgICAgeworICAgICAgICBB
U1NFUlQobV90YXJnZXRzLmlzRW1wdHkoKSB8fCBtX3RhcmdldHMubGFzdCgpIDwgcmVnKTsKKyAg
ICAgICAgbV90YXJnZXRzLmFwcGVuZChyZWcpOworICAgIH0KKworICAgIHZvaWQgcmVtb3ZlVGFy
Z2V0KFZpcnR1YWxSZWdpc3RlciByZWcpCisgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKHJl
ZywgbV90YXJnZXRzLmxhc3QoKSA9PSByZWcpOworICAgICAgICBtX3RhcmdldHMuc2hyaW5rKG1f
dGFyZ2V0cy5zaXplKCkgLSAxKTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyVGFyZ2V0cygpCisg
ICAgeworICAgICAgICBtX3RhcmdldHMuY2xlYXIoKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFdh
bnRlZEpTVmFsdWVSZWdzKEpTVmFsdWVSZWdzIGpzVmFsdWVSZWdzKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKG1fd2FudGVkRlBSID09IEludmFsaWRGUFJSZWcpOworICAgICAgICBtX3dhbnRlZEpT
VmFsdWVSZWdzID0ganNWYWx1ZVJlZ3M7CisgICAgfQorCisgICAgdm9pZCBzZXRXYW50ZWRGUFIo
RlBSUmVnIGZwcikKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV93YW50ZWRKU1ZhbHVlUmVncyk7
CisgICAgICAgIG1fd2FudGVkRlBSID0gZnByOworICAgIH0KKworICAgIC8vIERldGVybWluZSB3
aGV0aGVyIGNvbnZlcnRpbmcgdGhpcyByZWNvdmVyeSBpbnRvIGEgSlNWYWx1ZSB3aWxsCisgICAg
Ly8gcmVxdWlyZSBhZGRpdGlvbmFsIEdQUnMgYW5kL29yIEZQUnMuCisgICAgLy8gVGhpcyBpcyBn
dWFyYW50ZWVkIHRvIG9ubHkgZGVwZW5kIG9uIHRoZSBEYXRhRm9ybWF0LCBhbmQgdGhlCisgICAg
Ly8gcmVzdWx0IG9mIHRoZXNlIGNhbGxzIHdpbGwgc3RheSB2YWxpZCBhZnRlciBsb2FkcyBhbmQv
b3Igc3RvcmVzLgorICAgIGJvb2wgYm94aW5nUmVxdWlyZXNHUFIoKSBjb25zdAorICAgIHsKKyNp
ZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICByZXR1cm4gcmVjb3ZlcnkoKS5kYXRhRm9ybWF0KCkg
PT0gRGF0YUZvcm1hdERvdWJsZTsKKyNlbHNlCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRp
ZgorICAgIH0KKyAgICBib29sIGJveGluZ1JlcXVpcmVzRlBSKCkgY29uc3QKKyAgICB7CisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICAgICAgc3dpdGNoIChyZWNvdmVyeSgpLmRhdGFGb3JtYXQoKSkg
eworICAgICAgICBjYXNlIERhdGFGb3JtYXRJbnQ1MjoKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0
U3RyaWN0SW50NTI6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisjZWxzZQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAgICB9CisgICAgCisgICAgLy8gVGhpcyBpcyB1c2VkIHRv
IGRldGVybWluZSB3aGF0IGtpbmQgb2YgcmVnaXN0ZXIgd2UgbmVlZCB0byBiZQorICAgIC8vIGFi
bGUgdG8gbG9hZCBhIHJlY292ZXJ5LiBXZSBvbmx5IHVzZSBpdCB3aGVuIGEgZGlyZWN0IGxvYWQg
aXMKKyAgICAvLyBjdXJyZW50bHkgaW1wb3NzaWJsZSwgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgd2Ug
c2hvdWxkIHNwaWxsIGEKKyAgICAvLyBHUFIgb3IgYW4gRlBSIGZvciBsb2FkaW5nIHRoaXMgdmFs
dWUuCisgICAgYm9vbCBsb2Fkc0ludG9HUFIoKSBjb25zdDsKKyAgICBib29sIGxvYWRzSW50b0ZQ
UigpIGNvbnN0OworCisgICAgVmFsdWVSZWNvdmVyeSByZWNvdmVyeSgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVjb3Zlcnk7IH0KKworICAgIHZvaWQgc2V0UmVjb3ZlcnkoVmFsdWVSZWNvdmVyeSByZWNv
dmVyeSkgeyBtX3JlY292ZXJ5ID0gcmVjb3Zlcnk7IH0KKworICAgIEpTVmFsdWVSZWdzIHdhbnRl
ZEpTVmFsdWVSZWdzKCkgY29uc3QgeyByZXR1cm4gbV93YW50ZWRKU1ZhbHVlUmVnczsgfQorCisg
ICAgRlBSUmVnIHdhbnRlZEZQUigpIGNvbnN0IHsgcmV0dXJuIG1fd2FudGVkRlBSOyB9Citwcml2
YXRlOgorICAgIFZhbHVlUmVjb3ZlcnkgbV9yZWNvdmVyeTsKKyAgICBKU1ZhbHVlUmVncyBtX3dh
bnRlZEpTVmFsdWVSZWdzOworICAgIEZQUlJlZyBtX3dhbnRlZEZQUiB7IEludmFsaWRGUFJSZWcg
fTsKKyAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyLCAxPiBtX3RhcmdldHM7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyNlbmRpZiAvLyBDYWNo
ZWRSZWNvdmVyeV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNo
dWZmbGVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nh
bGxGcmFtZVNodWZmbGVEYXRhLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVEYXRhLmgiCisK
KyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAi
Q29kZUJsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisjaWYgVVNFKEpTVkFMVUU2NCkKKwor
dm9pZCBDYWxsRnJhbWVTaHVmZmxlRGF0YTo6c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKENvZGVC
bG9jayogY29kZUJsb2NrKQoreworICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVSZWdpc3RlcnMg
eyBSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCkgfTsKKyAgICBSZWdpc3RlckF0
T2Zmc2V0TGlzdCogcmVnaXN0ZXJTYXZlTG9jYXRpb25zID0gY29kZUJsb2NrLT5jYWxsZWVTYXZl
UmVnaXN0ZXJzKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZ2lzdGVyU2F2ZUxv
Y2F0aW9ucy0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSB7
IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+YXQoaSkgfTsKKyAgICAgICAgaWYgKCFjYWxsZWVTYXZl
UmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2F2ZVNsb3QgeyBlbnRyeS5vZmZzZXRBc0luZGV4KCkgfTsK
KyAgICAgICAgcmVnaXN0ZXJzW2VudHJ5LnJlZygpXQorICAgICAgICAgICAgPSBWYWx1ZVJlY292
ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soc2F2ZVNsb3QsIERhdGFGb3JtYXRKUyk7CisgICAgfQor
CisgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7IHJl
ZyA9IHJlZy5uZXh0KCkpIHsKKyAgICAgICAgaWYgKCFjYWxsZWVTYXZlUmVnaXN0ZXJzLmdldChy
ZWcpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHJlZ2lzdGVyc1tyZWdd
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgcmVnaXN0ZXJzW3JlZ10gPSBWYWx1
ZVJlY292ZXJ5OjppblJlZ2lzdGVyKHJlZywgRGF0YUZvcm1hdEpTKTsKKyAgICB9Cit9CisKKyNl
bmRpZiAvLyBVU0UoSlNWQUxVRTY0KQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNo
dWZmbGVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxs
RnJhbWVTaHVmZmxlRGF0YS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBDYWxsRnJhbWVTaHVmZmxlRGF0YV9oCisjZGVmaW5lIENhbGxGcmFtZVNodWZmbGVEYXRhX2gK
KworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJSZWdpc3Rlck1hcC5oIgorI2luY2x1ZGUg
IlZhbHVlUmVjb3ZlcnkuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBDYWxsRnJhbWVT
aHVmZmxlRGF0YSB7CisgICAgdW5zaWduZWQgbnVtTG9jYWxzOworICAgIFZhbHVlUmVjb3Zlcnkg
Y2FsbGVlOworICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiBhcmdzOworI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgUmVnaXN0ZXJNYXA8VmFsdWVSZWNvdmVyeT4gcmVnaXN0ZXJzOworCisgICAgdm9p
ZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoQ29kZUJsb2NrKik7CisjZW5kaWYKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworI2VuZGlmIC8vIENh
bGxGcmFtZVNodWZmbGVEYXRhX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2Fs
bEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlcjMyXzY0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwzMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1
ZmZsZXIuaCIKKworI2lmIEVOQUJMRShKSVQpICYmIFVTRShKU1ZBTFVFMzJfNjQpCisKKyNpbmNs
dWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJEYXRhRm9ybWF0LmgiCisjaW5jbHVkZSAi
SlNDSlNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0RhdGFGb3JtYXQgQ2Fs
bEZyYW1lU2h1ZmZsZXI6OmVtaXRTdG9yZShDYWNoZWRSZWNvdmVyeSYgbG9jYXRpb24sIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzIGFkZHJlc3MpCit7CisgICAgQVNTRVJUKCFsb2NhdGlvbi5yZWNv
dmVyeSgpLmlzSW5KU1N0YWNrKCkpOworCisgICAgc3dpdGNoIChsb2NhdGlvbi5yZWNvdmVyeSgp
LnRlY2huaXF1ZSgpKSB7CisgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAgbV9q
aXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFn
KSwKKyAgICAgICAgICAgIGFkZHJlc3Mud2l0aE9mZnNldChUYWdPZmZzZXQpKTsKKyAgICAgICAg
bV9qaXQuc3RvcmUzMihsb2NhdGlvbi5yZWNvdmVyeSgpLmdwcigpLCBhZGRyZXNzLndpdGhPZmZz
ZXQoUGF5bG9hZE9mZnNldCkpOworICAgICAgICByZXR1cm4gRGF0YUZvcm1hdEludDMyOworICAg
IGNhc2UgVW5ib3hlZENlbGxJbkdQUjoKKyAgICAgICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLAorICAgICAgICAgICAgYWRkcmVz
cy53aXRoT2Zmc2V0KFRhZ09mZnNldCkpOworICAgICAgICBtX2ppdC5zdG9yZTMyKGxvY2F0aW9u
LnJlY292ZXJ5KCkuZ3ByKCksIGFkZHJlc3Mud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KSk7Cisg
ICAgICAgIHJldHVybiBEYXRhRm9ybWF0Q2VsbDsKKyAgICBjYXNlIENvbnN0YW50OgorICAgICAg
ICBtX2ppdC5zdG9yZVRydXN0ZWRWYWx1ZShsb2NhdGlvbi5yZWNvdmVyeSgpLmNvbnN0YW50KCks
IGFkZHJlc3MpOworICAgICAgICByZXR1cm4gRGF0YUZvcm1hdEpTOworICAgIGNhc2UgSW5QYWly
OgorICAgICAgICBtX2ppdC5zdG9yZVZhbHVlKGxvY2F0aW9uLnJlY292ZXJ5KCkuanNWYWx1ZVJl
Z3MoKSwgYWRkcmVzcyk7CisgICAgICAgIHJldHVybiBEYXRhRm9ybWF0SlM7CisgICAgY2FzZSBV
bmJveGVkQm9vbGVhbkluR1BSOgorICAgICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyksCisgICAgICAgICAgICBhZGRyZXNz
LndpdGhPZmZzZXQoVGFnT2Zmc2V0KSk7CisgICAgICAgIG1faml0LnN0b3JlMzIobG9jYXRpb24u
cmVjb3ZlcnkoKS5ncHIoKSwgYWRkcmVzcy53aXRoT2Zmc2V0KFBheWxvYWRPZmZzZXQpKTsKKyAg
ICAgICAgcmV0dXJuIERhdGFGb3JtYXRCb29sZWFuOworICAgIGNhc2UgSW5GUFI6CisgICAgY2Fz
ZSBVbmJveGVkRG91YmxlSW5GUFI6CisgICAgICAgIG1faml0LnN0b3JlRG91YmxlKGxvY2F0aW9u
LnJlY292ZXJ5KCkuZnByKCksIGFkZHJlc3MpOworICAgICAgICByZXR1cm4gRGF0YUZvcm1hdEpT
OworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorfQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVyOjplbWl0Qm94KENhY2hlZFJlY292ZXJ5
JiBsb2NhdGlvbikKK3sKKyAgICAvLyBOb3RoaW5nIHRvIGRvLCB3ZSdyZSBnb29kISBKU1ZhbHVl
cyBhbmQgZG91YmxlcyBjYW4gYmUgc3RvcmVkCisgICAgLy8gaW1tZWRpYXRlbHksIGFuZCBvdGhl
ciBmb3JtYXRzIGRvbid0IG5lZWQgYW55IHRyYW5zZm9ybWF0aW9uIC0KKyAgICAvLyBqdXN0IHN0
b3JpbmcgYSBjb25zdGFudCB0YWcgc2VwYXJhdGVseS4KKyAgICBBU1NFUlRfVU5VU0VEKGxvY2F0
aW9uLCBjYW5Cb3gobG9jYXRpb24pKTsKK30KKwordm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6ZW1p
dExvYWQoQ2FjaGVkUmVjb3ZlcnkmIGxvY2F0aW9uKQoreworICAgIGlmICghbG9jYXRpb24ucmVj
b3ZlcnkoKS5pc0luSlNTdGFjaygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgZGF0YUxvZygiICAgKiBMb2FkaW5nICIsIGxvY2F0aW9uLnJlY292ZXJ5KCks
ICIgaW50byAiKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnIHsgbG9jYXRpb24ucmVjb3Zlcnko
KS52aXJ0dWFsUmVnaXN0ZXIoKSB9OworICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFkZHJl
c3MgeyBhZGRyZXNzRm9yT2xkKHJlZykgfTsKKworICAgIGJvb2wgdHJ5RlBSIHsgdHJ1ZSB9Owor
ICAgIEpTVmFsdWVSZWdzIHdhbnRlZEpTVmFsdWVSZWdzIHsgbG9jYXRpb24ud2FudGVkSlNWYWx1
ZVJlZ3MoKSB9OworICAgIGlmICh3YW50ZWRKU1ZhbHVlUmVncykgeworICAgICAgICBpZiAod2Fu
dGVkSlNWYWx1ZVJlZ3MucGF5bG9hZEdQUigpICE9IEludmFsaWRHUFJSZWcKKyAgICAgICAgICAg
ICYmICFtX3JlZ2lzdGVyc1t3YW50ZWRKU1ZhbHVlUmVncy5wYXlsb2FkR1BSKCldCisgICAgICAg
ICAgICAmJiAhbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHdhbnRlZEpTVmFsdWVSZWdzLnBheWxvYWRH
UFIoKSkpCisgICAgICAgICAgICB0cnlGUFIgPSBmYWxzZTsKKyAgICAgICAgaWYgKHdhbnRlZEpT
VmFsdWVSZWdzLnRhZ0dQUigpICE9IEludmFsaWRHUFJSZWcKKyAgICAgICAgICAgICYmICFtX3Jl
Z2lzdGVyc1t3YW50ZWRKU1ZhbHVlUmVncy50YWdHUFIoKV0KKyAgICAgICAgICAgICYmICFtX2xv
Y2tlZFJlZ2lzdGVycy5nZXQod2FudGVkSlNWYWx1ZVJlZ3MudGFnR1BSKCkpKQorICAgICAgICAg
ICAgdHJ5RlBSID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHRyeUZQUiAmJiBsb2NhdGlvbi5s
b2Fkc0ludG9GUFIoKSkgeworICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gbG9jYXRpb24ud2Fu
dGVkRlBSKCk7CisgICAgICAgIGlmIChyZXN1bHRGUFIgPT0gSW52YWxpZEZQUlJlZyB8fCBtX3Jl
Z2lzdGVyc1tyZXN1bHRGUFJdIHx8IG1fbG9ja2VkUmVnaXN0ZXJzLmdldChyZXN1bHRGUFIpKQor
ICAgICAgICAgICAgcmVzdWx0RlBSID0gZ2V0RnJlZUZQUigpOworICAgICAgICBpZiAocmVzdWx0
RlBSICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoYWRk
cmVzcywgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZGF0YUZvcm1hdCA9IERh
dGFGb3JtYXRKUzsKKyAgICAgICAgICAgIGlmIChsb2NhdGlvbi5yZWNvdmVyeSgpLmRhdGFGb3Jt
YXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKQorICAgICAgICAgICAgICAgIGRhdGFGb3JtYXQgPSBE
YXRhRm9ybWF0RG91YmxlOworICAgICAgICAgICAgdXBkYXRlUmVjb3ZlcnkobG9jYXRpb24sIAor
ICAgICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluRlBSKHJlc3VsdEZQUiwgZGF0YUZvcm1h
dCkpOworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZyhs
b2NhdGlvbi5yZWNvdmVyeSgpLCAiXG4iKTsKKyAgICAgICAgICAgIGlmIChyZWcgPT0gbmV3QXNP
bGQoZGFuZ2VyRnJvbnRpZXIoKSkpCisgICAgICAgICAgICAgICAgdXBkYXRlRGFuZ2VyRnJvbnRp
ZXIoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChs
b2NhdGlvbi5sb2Fkc0ludG9HUFIoKSkgeworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSIHsgd2Fu
dGVkSlNWYWx1ZVJlZ3MucGF5bG9hZEdQUigpIH07CisgICAgICAgIGlmIChyZXN1bHRHUFIgPT0g
SW52YWxpZEdQUlJlZyB8fCBtX3JlZ2lzdGVyc1tyZXN1bHRHUFJdIHx8IG1fbG9ja2VkUmVnaXN0
ZXJzLmdldChyZXN1bHRHUFIpKQorICAgICAgICAgICAgcmVzdWx0R1BSID0gZ2V0RnJlZUdQUigp
OworICAgICAgICBBU1NFUlQocmVzdWx0R1BSICE9IEludmFsaWRHUFJSZWcpOworICAgICAgICBt
X2ppdC5sb2FkUHRyKGFkZHJlc3Mud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgdXBkYXRlUmVjb3ZlcnkobG9jYXRpb24sIAorICAgICAgICAgICAgVmFsdWVS
ZWNvdmVyeTo6aW5HUFIocmVzdWx0R1BSLCBsb2NhdGlvbi5yZWNvdmVyeSgpLmRhdGFGb3JtYXQo
KSkpOworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2cobG9jYXRpb24u
cmVjb3ZlcnkoKSwgIlxuIik7CisgICAgICAgIGlmIChyZWcgPT0gbmV3QXNPbGQoZGFuZ2VyRnJv
bnRpZXIoKSkpCisgICAgICAgICAgICB1cGRhdGVEYW5nZXJGcm9udGllcigpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKGxvY2F0aW9uLnJlY292ZXJ5KCkudGVjaG5pcXVl
KCkgPT0gRGlzcGxhY2VkSW5KU1N0YWNrKTsKKyAgICBHUFJSZWcgcGF5bG9hZEdQUiB7IHdhbnRl
ZEpTVmFsdWVSZWdzLnBheWxvYWRHUFIoKSB9OworICAgIEdQUlJlZyB0YWdHUFIgeyB3YW50ZWRK
U1ZhbHVlUmVncy50YWdHUFIoKSB9OworICAgIGlmIChwYXlsb2FkR1BSID09IEludmFsaWRHUFJS
ZWcgfHwgbV9yZWdpc3RlcnNbcGF5bG9hZEdQUl0gfHwgbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHBh
eWxvYWRHUFIpKQorICAgICAgICBwYXlsb2FkR1BSID0gZ2V0RnJlZUdQUigpOworICAgIG1fbG9j
a2VkUmVnaXN0ZXJzLnNldChwYXlsb2FkR1BSKTsKKyAgICBpZiAodGFnR1BSID09IEludmFsaWRH
UFJSZWcgfHwgbV9yZWdpc3RlcnNbdGFnR1BSXSB8fCBtX2xvY2tlZFJlZ2lzdGVycy5nZXQodGFn
R1BSKSkKKyAgICAgICAgdGFnR1BSID0gZ2V0RnJlZUdQUigpOworICAgIG1fbG9ja2VkUmVnaXN0
ZXJzLmNsZWFyKHBheWxvYWRHUFIpOworICAgIEFTU0VSVChwYXlsb2FkR1BSICE9IEludmFsaWRH
UFJSZWcgJiYgdGFnR1BSICE9IEludmFsaWRHUFJSZWcgJiYgdGFnR1BSICE9IHBheWxvYWRHUFIp
OworICAgIG1faml0LmxvYWRQdHIoYWRkcmVzcy53aXRoT2Zmc2V0KFBheWxvYWRPZmZzZXQpLCBw
YXlsb2FkR1BSKTsKKyAgICBtX2ppdC5sb2FkUHRyKGFkZHJlc3Mud2l0aE9mZnNldChUYWdPZmZz
ZXQpLCB0YWdHUFIpOworICAgIHVwZGF0ZVJlY292ZXJ5KGxvY2F0aW9uLCAKKyAgICAgICAgVmFs
dWVSZWNvdmVyeTo6aW5QYWlyKHRhZ0dQUiwgcGF5bG9hZEdQUikpOworICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICBkYXRhTG9nKGxvY2F0aW9uLnJlY292ZXJ5KCksICJcbiIpOworICAgIGlmIChy
ZWcgPT0gbmV3QXNPbGQoZGFuZ2VyRnJvbnRpZXIoKSkpCisgICAgICAgIHVwZGF0ZURhbmdlckZy
b250aWVyKCk7Cit9CisKK2Jvb2wgQ2FsbEZyYW1lU2h1ZmZsZXI6OmNhbkxvYWQoQ2FjaGVkUmVj
b3ZlcnkmIGxvY2F0aW9uKQoreworICAgIGlmICghbG9jYXRpb24ucmVjb3ZlcnkoKS5pc0luSlNT
dGFjaygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChsb2NhdGlvbi5sb2Fkc0lu
dG9GUFIoKSAmJiBnZXRGcmVlRlBSKCkgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBpZiAobG9jYXRpb24ubG9hZHNJbnRvR1BSKCkgJiYgZ2V0RnJlZUdQUigp
ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGxvY2F0
aW9uLnJlY292ZXJ5KCkudGVjaG5pcXVlKCkgPT0gRGlzcGxhY2VkSW5KU1N0YWNrKSB7CisgICAg
ICAgIEdQUlJlZyBwYXlsb2FkR1BSIHsgZ2V0RnJlZUdQUigpIH07CisgICAgICAgIGlmIChwYXls
b2FkR1BSID09IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIG1fbG9ja2VkUmVnaXN0ZXJzLnNldChwYXlsb2FkR1BSKTsKKyAgICAgICAgR1BSUmVnIHRh
Z0dQUiB7IGdldEZyZWVHUFIoKSB9OworICAgICAgICBtX2xvY2tlZFJlZ2lzdGVycy5jbGVhcihw
YXlsb2FkR1BSKTsKKyAgICAgICAgcmV0dXJuIHRhZ0dQUiAhPSBJbnZhbGlkR1BSUmVnOworICAg
IH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6ZW1p
dERpc3BsYWNlKENhY2hlZFJlY292ZXJ5JiBsb2NhdGlvbikKK3sKKyAgICBBU1NFUlQobG9jYXRp
b24ucmVjb3ZlcnkoKS5pc0luUmVnaXN0ZXJzKCkpOworICAgIEpTVmFsdWVSZWdzIHdhbnRlZEpT
VmFsdWVSZWdzIHsgbG9jYXRpb24ud2FudGVkSlNWYWx1ZVJlZ3MoKSB9OworICAgIEFTU0VSVCh3
YW50ZWRKU1ZhbHVlUmVncyk7IC8vIFdlIGRvbid0IHN1cHBvcnQgd2FudGVkIEZQUnMgb24gMzJi
aXQgcGxhdGZvcm1zCisKKyAgICBHUFJSZWcgd2FudGVkVGFnR1BSIHsgd2FudGVkSlNWYWx1ZVJl
Z3MudGFnR1BSKCkgfTsKKyAgICBHUFJSZWcgd2FudGVkUGF5bG9hZEdQUiB7IHdhbnRlZEpTVmFs
dWVSZWdzLnBheWxvYWRHUFIoKSB9OworICAgIAorICAgIGlmICh3YW50ZWRUYWdHUFIgIT0gSW52
YWxpZEdQUlJlZykgeworICAgICAgICBBU1NFUlQoIW1fbG9ja2VkUmVnaXN0ZXJzLmdldCh3YW50
ZWRUYWdHUFIpKTsKKyAgICAgICAgaWYgKENhY2hlZFJlY292ZXJ5KiBjdXJyZW50VGFnIHsgbV9y
ZWdpc3RlcnNbd2FudGVkVGFnR1BSXSB9KSB7CisgICAgICAgICAgICBpZiAoY3VycmVudFRhZyA9
PSAmbG9jYXRpb24pIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgKyAiLCB3YW50ZWRUYWdHUFIsICIgaXMgT0tcbiIpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGNhbiBuZXZlciBoYXBw
ZW4gb24gMzJiaXQgcGxhdGZvcm1zIHNpbmNlIHdlCisgICAgICAgICAgICAgICAgLy8gaGF2ZSBh
dCBtb3N0IG9uZSB3YW50ZWQgSlNWYWx1ZVJlZ3MsIGZvciB0aGUKKyAgICAgICAgICAgICAgICAv
LyBjYWxsZWUsIGFuZCBubyBjYWxsZWUtc2F2ZSByZWdpc3RlcnMuCisgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmICh3YW50ZWRQYXlsb2FkR1BSICE9IEludmFsaWRHUFJSZWcpIHsKKyAg
ICAgICAgQVNTRVJUKCFtX2xvY2tlZFJlZ2lzdGVycy5nZXQod2FudGVkUGF5bG9hZEdQUikpOwor
ICAgICAgICBpZiAoQ2FjaGVkUmVjb3ZlcnkqIGN1cnJlbnRQYXlsb2FkIHsgbV9yZWdpc3RlcnNb
d2FudGVkUGF5bG9hZEdQUl0gfSkgeworICAgICAgICAgICAgaWYgKGN1cnJlbnRQYXlsb2FkID09
ICZsb2NhdGlvbikgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIgICArICIsIHdhbnRlZFBheWxvYWRHUFIsICIgaXMgT0tcbiIpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBTZWUgYWJvdmUKKyAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGxvY2F0aW9uLnJlY292ZXJ5KCkudGVjaG5pcXVl
KCkgPT0gSW5QYWlyCisgICAgICAgIHx8IGxvY2F0aW9uLnJlY292ZXJ5KCkuaXNJbkdQUigpKSB7
CisgICAgICAgIEdQUlJlZyBwYXlsb2FkR1BSOworICAgICAgICBpZiAobG9jYXRpb24ucmVjb3Zl
cnkoKS50ZWNobmlxdWUoKSA9PSBJblBhaXIpCisgICAgICAgICAgICBwYXlsb2FkR1BSID0gbG9j
YXRpb24ucmVjb3ZlcnkoKS5wYXlsb2FkR1BSKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHBheWxvYWRHUFIgPSBsb2NhdGlvbi5yZWNvdmVyeSgpLmdwcigpOworCisgICAgICAgIGlmICh3
YW50ZWRQYXlsb2FkR1BSID09IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICB3YW50ZWRQYXls
b2FkR1BSID0gcGF5bG9hZEdQUjsKKworICAgICAgICBpZiAocGF5bG9hZEdQUiAhPSB3YW50ZWRQ
YXlsb2FkR1BSKSB7CisgICAgICAgICAgICBpZiAobG9jYXRpb24ucmVjb3ZlcnkoKS50ZWNobmlx
dWUoKSA9PSBJblBhaXIKKyAgICAgICAgICAgICAgICAmJiB3YW50ZWRQYXlsb2FkR1BSID09IGxv
Y2F0aW9uLnJlY292ZXJ5KCkudGFnR1BSKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgKiBTd2FwcGluZyAiLCBwYXlsb2Fk
R1BSLCAiIGFuZCAiLCB3YW50ZWRQYXlsb2FkR1BSLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBt
X2ppdC5zd2FwKHBheWxvYWRHUFIsIHdhbnRlZFBheWxvYWRHUFIpOworICAgICAgICAgICAgICAg
IHVwZGF0ZVJlY292ZXJ5KGxvY2F0aW9uLCAKKyAgICAgICAgICAgICAgICAgICAgVmFsdWVSZWNv
dmVyeTo6aW5QYWlyKHBheWxvYWRHUFIsIHdhbnRlZFBheWxvYWRHUFIpKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIiAgICogTW92aW5nICIsIHBheWxvYWRHUFIsICIgaW50byAiLCB3YW50ZWRQ
YXlsb2FkR1BSLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKHBheWxvYWRHUFIs
IHdhbnRlZFBheWxvYWRHUFIpOworICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbi5yZWNvdmVy
eSgpLnRlY2huaXF1ZSgpID09IEluUGFpcikgeworICAgICAgICAgICAgICAgICAgICB1cGRhdGVS
ZWNvdmVyeShsb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6
OmluUGFpcihsb2NhdGlvbi5yZWNvdmVyeSgpLnRhZ0dQUigpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdhbnRlZFBheWxvYWRHUFIpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICB1cGRhdGVSZWNvdmVyeShsb2NhdGlvbiwgCisgICAgICAgICAg
ICAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUih3YW50ZWRQYXlsb2FkR1BSLCBsb2Nh
dGlvbi5yZWNvdmVyeSgpLmRhdGFGb3JtYXQoKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICh3YW50ZWRUYWdHUFIgPT0gSW52YWxp
ZEdQUlJlZykKKyAgICAgICAgICAgIHdhbnRlZFRhZ0dQUiA9IGdldEZyZWVHUFIoKTsKKyAgICAg
ICAgc3dpdGNoIChsb2NhdGlvbi5yZWNvdmVyeSgpLmRhdGFGb3JtYXQoKSkgeworICAgICAgICBj
YXNlIERhdGFGb3JtYXRJbnQzMjoKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAg
ICAgICAgIGRhdGFMb2coIiAgICogTW92aW5nIGludDMyIHRhZyBpbnRvICIsIHdhbnRlZFRhZ0dQ
UiwgIlxuIik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLAorICAgICAgICAgICAgICAgIHdhbnRlZFRhZ0dQUik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0Q2VsbDoKKyAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICogTW92aW5n
IGNlbGwgdGFnIGludG8gIiwgd2FudGVkVGFnR1BSLCAiXG4iKTsKKyAgICAgICAgICAgIG1faml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwKKyAg
ICAgICAgICAgICAgICB3YW50ZWRUYWdHUFIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIgICAqIE1vdmluZyBib29sZWFuIHRhZyBpbnRvICIsIHdhbnRl
ZFRhZ0dQUiwgIlxuIik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyksCisgICAgICAgICAgICAgICAgd2FudGVk
VGFnR1BSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERhdGFGb3JtYXRKUzoK
KyAgICAgICAgICAgIEFTU0VSVCh3YW50ZWRUYWdHUFIgIT0gbG9jYXRpb24ucmVjb3ZlcnkoKS5w
YXlsb2FkR1BSKCkpOworICAgICAgICAgICAgaWYgKHdhbnRlZFRhZ0dQUiAhPSBsb2NhdGlvbi5y
ZWNvdmVyeSgpLnRhZ0dQUigpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICogTW92aW5nICIsIGxvY2F0aW9uLnJlY292ZXJ5
KCkudGFnR1BSKCksICIgaW50byAiLCB3YW50ZWRUYWdHUFIsICJcbiIpOworICAgICAgICAgICAg
ICAgIG1faml0Lm1vdmUobG9jYXRpb24ucmVjb3ZlcnkoKS50YWdHUFIoKSwgd2FudGVkVGFnR1BS
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGxvY2F0aW9uLnJlY292ZXJ5KCkuaXNJbkZQUigp
KTsKKyAgICAgICAgaWYgKHdhbnRlZFRhZ0dQUiA9PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAg
ICAgICBBU1NFUlQod2FudGVkUGF5bG9hZEdQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAg
ICAgIG1fbG9ja2VkUmVnaXN0ZXJzLnNldCh3YW50ZWRQYXlsb2FkR1BSKTsKKyAgICAgICAgICAg
IHdhbnRlZFRhZ0dQUiA9IGdldEZyZWVHUFIoKTsKKyAgICAgICAgICAgIG1fbG9ja2VkUmVnaXN0
ZXJzLmNsZWFyKHdhbnRlZFBheWxvYWRHUFIpOworICAgICAgICB9CisgICAgICAgIGlmICh3YW50
ZWRQYXlsb2FkR1BSID09IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgICAgIG1fbG9ja2VkUmVn
aXN0ZXJzLnNldCh3YW50ZWRUYWdHUFIpOworICAgICAgICAgICAgd2FudGVkUGF5bG9hZEdQUiA9
IGdldEZyZWVHUFIoKTsKKyAgICAgICAgICAgIG1fbG9ja2VkUmVnaXN0ZXJzLmNsZWFyKHdhbnRl
ZFRhZ0dQUik7CisgICAgICAgIH0KKyAgICAgICAgbV9qaXQuYm94RG91YmxlKGxvY2F0aW9uLnJl
Y292ZXJ5KCkuZnByKCksIHdhbnRlZFRhZ0dQUiwgd2FudGVkUGF5bG9hZEdQUik7CisgICAgfQor
ICAgIHVwZGF0ZVJlY292ZXJ5KGxvY2F0aW9uLCBWYWx1ZVJlY292ZXJ5OjppblBhaXIod2FudGVk
VGFnR1BSLCB3YW50ZWRQYXlsb2FkR1BSKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gRU5BQkxFKEpJVCkgJiYgVVNFKEpTVkFMVUUzMl82NCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlcjY0LmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXI2NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkNhbGxGcmFtZVNodWZmbGVyLmgiCisKKyNpZiBFTkFCTEUoSklUKSAmJiBVU0UoSlNWQUxVRTY0
KQorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiRGF0YUZvcm1hdC5oIgor
I2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitEYXRh
Rm9ybWF0IENhbGxGcmFtZVNodWZmbGVyOjplbWl0U3RvcmUoCisgICAgQ2FjaGVkUmVjb3Zlcnkm
IGNhY2hlZFJlY292ZXJ5LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBhZGRyZXNzKQoreworICAg
IEFTU0VSVCghY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5pc0luSlNTdGFjaygpKTsKKworICAg
IHN3aXRjaCAoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS50ZWNobmlxdWUoKSkgeworICAgIGNh
c2UgSW5HUFI6CisgICAgICAgIG1faml0LnN0b3JlUHRyKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5
KCkuZ3ByKCksIGFkZHJlc3MpOworICAgICAgICByZXR1cm4gRGF0YUZvcm1hdEpTOworICAgIGNh
c2UgVW5ib3hlZEludDMySW5HUFI6CisgICAgICAgIG1faml0LnN0b3JlMzIoY2FjaGVkUmVjb3Zl
cnkucmVjb3ZlcnkoKS5ncHIoKSwgYWRkcmVzcy53aXRoT2Zmc2V0KFBheWxvYWRPZmZzZXQpKTsK
KyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRJbnQzMjsKKyAgICBjYXNlIFVuYm94ZWRJbnQ1Mklu
R1BSOgorICAgICAgICBtX2ppdC5yc2hpZnQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KEpTVmFsdWU6OmludDUyU2hpZnRBbW91bnQpLAorICAgICAgICAgICAgY2FjaGVkUmVjb3Zlcnku
cmVjb3ZlcnkoKS5ncHIoKSk7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgVW5ib3hl
ZFN0cmljdEludDUySW5HUFI6CisgICAgICAgIG1faml0LnN0b3JlUHRyKGNhY2hlZFJlY292ZXJ5
LnJlY292ZXJ5KCkuZ3ByKCksIGFkZHJlc3MpOworICAgICAgICByZXR1cm4gRGF0YUZvcm1hdFN0
cmljdEludDUyOworICAgIGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQUjoKKyAgICAgICAgbV9qaXQu
c3RvcmVQdHIoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSwgYWRkcmVzcyk7CisgICAg
ICAgIHJldHVybiBEYXRhRm9ybWF0Qm9vbGVhbjsKKyAgICBjYXNlIFVuYm94ZWRDZWxsSW5HUFI6
CisgICAgICAgIG1faml0LnN0b3JlUHRyKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCks
IGFkZHJlc3MpOworICAgICAgICByZXR1cm4gRGF0YUZvcm1hdENlbGw7CisgICAgY2FzZSBVbmJv
eGVkRG91YmxlSW5GUFI6CisgICAgICAgIG1faml0LnN0b3JlRG91YmxlKGNhY2hlZFJlY292ZXJ5
LnJlY292ZXJ5KCkuZnByKCksIGFkZHJlc3MpOworICAgICAgICByZXR1cm4gRGF0YUZvcm1hdERv
dWJsZTsKKyAgICBjYXNlIEluRlBSOgorICAgICAgICBtX2ppdC5zdG9yZURvdWJsZShjYWNoZWRS
ZWNvdmVyeS5yZWNvdmVyeSgpLmZwcigpLCBhZGRyZXNzKTsKKyAgICAgICAgcmV0dXJuIERhdGFG
b3JtYXRKUzsKKyAgICBjYXNlIENvbnN0YW50OgorICAgICAgICBtX2ppdC5zdG9yZVRydXN0ZWRW
YWx1ZShjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmNvbnN0YW50KCksIGFkZHJlc3MpOworICAg
ICAgICByZXR1cm4gRGF0YUZvcm1hdEpTOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVy
OjplbWl0Qm94KENhY2hlZFJlY292ZXJ5JiBjYWNoZWRSZWNvdmVyeSkKK3sKKyAgICBBU1NFUlQo
Y2FuQm94KGNhY2hlZFJlY292ZXJ5KSk7CisgICAgaWYgKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5
KCkuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoY2FjaGVkUmVjb3Zl
cnkucmVjb3ZlcnkoKS5pc0luR1BSKCkpIHsKKyAgICAgICAgc3dpdGNoIChjYWNoZWRSZWNvdmVy
eS5yZWNvdmVyeSgpLmRhdGFGb3JtYXQoKSkgeworICAgICAgICBjYXNlIERhdGFGb3JtYXRJbnQz
MjoKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
ICogQm94aW5nICIsIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkpOworICAgICAgICAgICAgbV9q
aXQuemVyb0V4dGVuZDMyVG9QdHIoCisgICAgICAgICAgICAgICAgY2FjaGVkUmVjb3ZlcnkucmVj
b3ZlcnkoKS5ncHIoKSwKKyAgICAgICAgICAgICAgICBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgp
LmdwcigpKTsKKyAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gZG8gdGhpcyB0aGUgaGFyZCB3YXku
CisgICAgICAgICAgICBtX2ppdC5vcjY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVGFn
VHlwZU51bWJlciksCisgICAgICAgICAgICAgICAgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5n
cHIoKSk7CisgICAgICAgICAgICBjYWNoZWRSZWNvdmVyeS5zZXRSZWNvdmVyeSgKKyAgICAgICAg
ICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUihjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdw
cigpLCBEYXRhRm9ybWF0SlMpKTsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAg
ICAgICAgIGRhdGFMb2coIiBpbnRvICIsIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCksICJcbiIp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIERhdGFGb3JtYXRJbnQ1MjoKKyAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICogQm94
aW5nICIsIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkpOworICAgICAgICAgICAgbV9qaXQucnNo
aWZ0NjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjppbnQ1MlNoaWZ0QW1v
dW50KSwKKyAgICAgICAgICAgICAgICBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpKTsK
KyAgICAgICAgICAgIGNhY2hlZFJlY292ZXJ5LnNldFJlY292ZXJ5KAorICAgICAgICAgICAgICAg
IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCksIERh
dGFGb3JtYXRTdHJpY3RJbnQ1MikpOworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgZGF0YUxvZygiIGludG8gIiwgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKSwgIlxu
Iik7CisgICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0U3Ry
aWN0SW50NTI6IHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRh
dGFMb2coIiAgICogQm94aW5nICIsIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkpOworICAgICAg
ICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IGdldEZyZWVGUFIoKTsKKyAgICAgICAgICAgIEFTU0VS
VChyZXN1bHRGUFIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgICAgICAgICBtX2ppdC5jb252ZXJ0
SW50NjRUb0RvdWJsZShjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpLCByZXN1bHRGUFIp
OworICAgICAgICAgICAgdXBkYXRlUmVjb3ZlcnkoY2FjaGVkUmVjb3ZlcnksIFZhbHVlUmVjb3Zl
cnk6OmluRlBSKHJlc3VsdEZQUiwgRGF0YUZvcm1hdERvdWJsZSkpOworICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiIGludG8gIiwgY2FjaGVkUmVjb3Zl
cnkucmVjb3ZlcnkoKSwgIlxuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgKiBCb3hpbmcgIiwgY2FjaGVkUmVjb3ZlcnkucmVj
b3ZlcnkoKSk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKFZhbHVlRmFsc2UpLAorICAgICAgICAgICAgICAgIGNhY2hlZFJlY292ZXJ5LnJlY292
ZXJ5KCkuZ3ByKCkpOworICAgICAgICAgICAgY2FjaGVkUmVjb3Zlcnkuc2V0UmVjb3ZlcnkoCisg
ICAgICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FjaGVkUmVjb3ZlcnkucmVjb3Zl
cnkoKS5ncHIoKSwgRGF0YUZvcm1hdEpTKSk7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nKCIgaW50byAiLCBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgp
LCAiXG4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChjYWNoZWRSZWNvdmVyeS5y
ZWNvdmVyeSgpLmlzSW5GUFIoKSkgeworICAgICAgICBpZiAoY2FjaGVkUmVjb3ZlcnkucmVjb3Zl
cnkoKS5kYXRhRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkgeworICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgKiBCb3hpbmcgIiwgY2FjaGVk
UmVjb3ZlcnkucmVjb3ZlcnkoKSk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gY2Fj
aGVkUmVjb3Zlcnkud2FudGVkSlNWYWx1ZVJlZ3MoKS5ncHIoKTsKKyAgICAgICAgICAgIGlmIChy
ZXN1bHRHUFIgPT0gSW52YWxpZEdQUlJlZyB8fCBtX3JlZ2lzdGVyc1tyZXN1bHRHUFJdKQorICAg
ICAgICAgICAgICAgIHJlc3VsdEdQUiA9IGdldEZyZWVHUFIoKTsKKyAgICAgICAgICAgIEFTU0VS
VChyZXN1bHRHUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgICAgICBtX2ppdC5wdXJpZnlO
YU4oY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5mcHIoKSk7CisgICAgICAgICAgICBtX2ppdC5t
b3ZlRG91YmxlVG82NChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmZwcigpLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgbV9qaXQuc3ViNjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChU
YWdUeXBlTnVtYmVyKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHVwZGF0ZVJlY292ZXJ5KGNh
Y2hlZFJlY292ZXJ5LCBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZXN1bHRHUFIsIERhdGFGb3JtYXRK
UykpOworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygi
IGludG8gIiwgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKSwgIlxuIik7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5
KCkuZGF0YUZvcm1hdCgpID09IERhdGFGb3JtYXRKUyk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIENhbGxGcmFt
ZVNodWZmbGVyOjplbWl0TG9hZChDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3ZlcnkpCit7Cisg
ICAgaWYgKCFjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmlzSW5KU1N0YWNrKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCIgICAqIExvYWRp
bmcgIiwgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKSwgIiBpbnRvICIpOworCisgICAgVmlydHVh
bFJlZ2lzdGVyIHJlZyA9IGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkudmlydHVhbFJlZ2lzdGVy
KCk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgYWRkcmVzcyB7IGFkZHJlc3NGb3JPbGQo
cmVnKSB9OworICAgIGJvb2wgdHJ5RlBSIHsgdHJ1ZSB9OworICAgIEdQUlJlZyByZXN1bHRHUFIg
eyBjYWNoZWRSZWNvdmVyeS53YW50ZWRKU1ZhbHVlUmVncygpLmdwcigpIH07CisKKyAgICAvLyBJ
ZiB3ZSB3YW50IGEgR1BSIGFuZCBpdCdzIGF2YWlsYWJsZSwgdGhhdCdzIGJldHRlciB0aGFuIGxv
YWRpbmcKKyAgICAvLyBpbnRvIGFuIEZQUi4KKyAgICBpZiAocmVzdWx0R1BSICE9IEludmFsaWRH
UFJSZWcgJiYgIW1fcmVnaXN0ZXJzW3Jlc3VsdEdQUl0KKyAgICAgICAgJiYgIW1fbG9ja2VkUmVn
aXN0ZXJzLmdldChyZXN1bHRHUFIpICYmIGNhY2hlZFJlY292ZXJ5LmxvYWRzSW50b0dQUigpKQor
ICAgICAgICB0cnlGUFIgPSBmYWxzZTsKKworICAgIC8vIE90aGVyd2lzZSwgd2UgcHJlZmVyIGxv
YWRpbmcgaW50byBGUFJzIGlmIHBvc3NpYmxlCisgICAgaWYgKHRyeUZQUiAmJiBjYWNoZWRSZWNv
dmVyeS5sb2Fkc0ludG9GUFIoKSkgeworICAgICAgICBGUFJSZWcgcmVzdWx0RlBSIHsgY2FjaGVk
UmVjb3Zlcnkud2FudGVkRlBSKCkgfTsKKyAgICAgICAgaWYgKHJlc3VsdEZQUiA9PSBJbnZhbGlk
RlBSUmVnIHx8IG1fcmVnaXN0ZXJzW3Jlc3VsdEZQUl0gfHwgbV9sb2NrZWRSZWdpc3RlcnMuZ2V0
KHJlc3VsdEZQUikpCisgICAgICAgICAgICByZXN1bHRGUFIgPSBnZXRGcmVlRlBSKCk7CisgICAg
ICAgIGlmIChyZXN1bHRGUFIgIT0gSW52YWxpZEZQUlJlZykgeworICAgICAgICAgICAgbV9qaXQu
bG9hZERvdWJsZShhZGRyZXNzLCByZXN1bHRGUFIpOworICAgICAgICAgICAgRGF0YUZvcm1hdCBk
YXRhRm9ybWF0ID0gRGF0YUZvcm1hdEpTOworICAgICAgICAgICAgLy8gV2UgY291bGQgYmUgdHJh
bnNmb3JtaW5nIGEgRGF0YUZvcm1hdENlbGwgaW50byBhCisgICAgICAgICAgICAvLyBEYXRhRm9y
bWF0SlMgaGVyZSAtIGJ1dCB0aGF0J3MgT0suCisgICAgICAgICAgICBpZiAoY2FjaGVkUmVjb3Zl
cnkucmVjb3ZlcnkoKS5kYXRhRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkKKyAgICAgICAg
ICAgICAgICBkYXRhRm9ybWF0ID0gRGF0YUZvcm1hdERvdWJsZTsKKyAgICAgICAgICAgIHVwZGF0
ZVJlY292ZXJ5KGNhY2hlZFJlY292ZXJ5LAorICAgICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6
OmluRlBSKHJlc3VsdEZQUiwgZGF0YUZvcm1hdCkpOworICAgICAgICAgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgICAgICAgICAgZGF0YUxvZyhjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLCAiXG4i
KTsKKyAgICAgICAgICAgIGlmIChyZWcgPT0gbmV3QXNPbGQoZGFuZ2VyRnJvbnRpZXIoKSkpCisg
ICAgICAgICAgICAgICAgdXBkYXRlRGFuZ2VyRnJvbnRpZXIoKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEFTU0VSVChjYWNoZWRSZWNvdmVyeS5sb2Fkc0lu
dG9HUFIoKSk7CisgICAgaWYgKHJlc3VsdEdQUiA9PSBJbnZhbGlkR1BSUmVnIHx8IG1fcmVnaXN0
ZXJzW3Jlc3VsdEdQUl0gfHwgbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHJlc3VsdEdQUikpCisgICAg
ICAgIHJlc3VsdEdQUiA9IGdldEZyZWVHUFIoKTsKKyAgICBBU1NFUlQocmVzdWx0R1BSICE9IElu
dmFsaWRHUFJSZWcpOworICAgIG1faml0LmxvYWRQdHIoYWRkcmVzcywgcmVzdWx0R1BSKTsKKyAg
ICB1cGRhdGVSZWNvdmVyeShjYWNoZWRSZWNvdmVyeSwKKyAgICAgICAgVmFsdWVSZWNvdmVyeTo6
aW5HUFIocmVzdWx0R1BSLCBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmRhdGFGb3JtYXQoKSkp
OworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKGNhY2hlZFJlY292ZXJ5LnJlY292
ZXJ5KCksICJcbiIpOworICAgIGlmIChyZWcgPT0gbmV3QXNPbGQoZGFuZ2VyRnJvbnRpZXIoKSkp
CisgICAgICAgIHVwZGF0ZURhbmdlckZyb250aWVyKCk7Cit9CisKK2Jvb2wgQ2FsbEZyYW1lU2h1
ZmZsZXI6OmNhbkxvYWQoQ2FjaGVkUmVjb3ZlcnkmIGNhY2hlZFJlY292ZXJ5KQoreworICAgIGlm
ICghY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5pc0luSlNTdGFjaygpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIEFTU0VSVChjYWNoZWRSZWNvdmVyeS5sb2Fkc0ludG9GUFIoKSB8fCBj
YWNoZWRSZWNvdmVyeS5sb2Fkc0ludG9HUFIoKSk7CisKKyAgICBpZiAoY2FjaGVkUmVjb3Zlcnku
bG9hZHNJbnRvRlBSKCkgJiYgZ2V0RnJlZUZQUigpICE9IEludmFsaWRGUFJSZWcpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgaWYgKGNhY2hlZFJlY292ZXJ5LmxvYWRzSW50b0dQUigpICYm
IGdldEZyZWVHUFIoKSAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6ZW1pdERpc3Bs
YWNlKENhY2hlZFJlY292ZXJ5JiBjYWNoZWRSZWNvdmVyeSkKK3sKKyAgICBSZWcgd2FudGVkUmVn
OworICAgIGlmICghKHdhbnRlZFJlZyA9IFJlZyB7IGNhY2hlZFJlY292ZXJ5LndhbnRlZEpTVmFs
dWVSZWdzKCkuZ3ByKCkgfSkpCisgICAgICAgIHdhbnRlZFJlZyA9IFJlZyB7IGNhY2hlZFJlY292
ZXJ5LndhbnRlZEZQUigpIH07CisgICAgQVNTRVJUKHdhbnRlZFJlZyk7CisgICAgQVNTRVJUKCFt
X2xvY2tlZFJlZ2lzdGVycy5nZXQod2FudGVkUmVnKSk7CisKKyAgICBpZiAoQ2FjaGVkUmVjb3Zl
cnkqIGN1cnJlbnQgPSBtX3JlZ2lzdGVyc1t3YW50ZWRSZWddKSB7CisgICAgICAgIGlmIChjdXJy
ZW50ID09ICZjYWNoZWRSZWNvdmVyeSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICAgICAgZGF0YUxvZygiICAgKyAiLCB3YW50ZWRSZWcsICIgaXMgT0tcbiIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIFdlIGNvdWxkIGRvIGEgbW9y
ZSBjb21wbGV4IHRoaW5nIGJ5IGZpbmRpbmcgY3ljbGVzCisgICAgICAgIC8vIGV0Yy4gaW4gdGhh
dCBjYXNlLgorICAgICAgICAvLyBIb3dldmVyLCBlbmRpbmcgdXAgaW4gdGhpcyBzaXR1YXRpb24g
d2lsbCBiZSBzdXBlcgorICAgICAgICAvLyByYXJlLCBhbmQgc2hvdWxkIGFjdHVhbGx5IGJlIG91
dHJpZ2h0IGltcG9zc2libGUgZm9yCisgICAgICAgIC8vIG5vbi1GVEwgdGllcnMsIHNpbmNlOgor
ICAgICAgICAvLyAgKGEpIEFsbCBkb3VibGVzIGhhdmUgYmVlbiBjb252ZXJ0ZWQgaW50byBKU1Zh
bHVlcyB3aXRoCisgICAgICAgIC8vICAgICAgVmFsdWVSZXAgbm9kZXMsIHNvIEZQUnMgYXJlIGlu
aXRpYWxseSBmcmVlCisgICAgICAgIC8vCisgICAgICAgIC8vICAoYikgVGhlIG9ubHkgcmVjb3Zl
cmllcyB3aXRoIHdhbnRlZCByZWdpc3RlcnMgYXJlIHRoZQorICAgICAgICAvLyAgICAgIGNhbGxl
ZSAod2hpY2ggYWx3YXlzIHN0YXJ0cyBvdXQgaW4gYSByZWdpc3RlcikgYW5kCisgICAgICAgIC8v
ICAgICAgdGhlIGNhbGxlZS1zYXZlIHJlZ2lzdGVycworICAgICAgICAvLworICAgICAgICAvLyAg
KGMpIFRoZSBjYWxsZWUtc2F2ZSByZWdpc3RlcnMgYXJlIHRoZSBmaXJzdCB0aGluZ3Mgd2UKKyAg
ICAgICAgLy8gICAgICBsb2FkIChhZnRlciB0aGUgcmV0dXJuIFBDKSwgYW5kIHRoZXkgYXJlIGxv
YWRlZCBhcyBKU1ZhbHVlcworICAgICAgICAvLworICAgICAgICAvLyAgKGQpIFdlIHByZWZlciBs
b2FkaW5nIEpTVmFsdWVzIGludG8gRlBScyBpZiB0aGVpcgorICAgICAgICAvLyAgICAgIHdhbnRl
ZCBHUFIgaXMgbm90IGF2YWlsYWJsZQorICAgICAgICAvLworICAgICAgICAvLyAgKGUpIElmIHdl
IGVuZCB1cCBzcGlsbGluZyBzb21lIHJlZ2lzdGVycyB3aXRoIGEKKyAgICAgICAgLy8gICAgICB0
YXJnZXQsIHdlIHdvbid0IGxvYWQgdGhlbSBhZ2FpbiBiZWZvcmUgdGhlIHZlcnkKKyAgICAgICAg
Ly8gICAgICBlbmQgb2YgdGhlIGFsZ29yaXRobQorICAgICAgICAvLworICAgICAgICAvLyBDb21i
aW5lZCwgdGhpcyBtZWFucyB0aGF0IHdlIHdpbGwgbmV2ZXIgbG9hZCBhIHJlY292ZXJ5CisgICAg
ICAgIC8vIHdpdGggYSB3YW50ZWQgR1BSIGludG8gYW55IEdQUiBvdGhlciB0aGFuIGl0cyB3YW50
ZWQKKyAgICAgICAgLy8gR1BSLiBUaGUgY2FsbGVlIGNvdWxkIGhvd2V2ZXIgaGF2ZSBiZWVuIGlu
aXRpYWxseSBpbgorICAgICAgICAvLyBvbmUgb2YgdGhlIGNhbGxlZS1zYXZlIHJlZ2lzdGVycyAt
IGJ1dCBzaW5jZSB0aGUgd2FudGVkCisgICAgICAgIC8vIEdQUiBmb3IgdGhlIGNhbGxlZSBpcyBh
bHdheXMgcmVnVDAsIGl0IHdpbGwgYmUgdGhlCisgICAgICAgIC8vIGZpcnN0IG9uZSB0byBiZSBk
aXNwbGFjZWQsIGFuZCB3ZSB3b24ndCBzZWUgaXQgd2hlbgorICAgICAgICAvLyBoYW5kbGluZyBh
bnkgb2YgdGhlIGNhbGxlZS1zYXZlIHJlZ2lzdGVycy4KKyAgICAgICAgLy8KKyAgICAgICAgLy8g
VGh1cywgdGhlIG9ubHkgd2F5IHdlIGNvdWxkIGV2ZXIgcmVhY2ggdGhpcyBwYXRoIGlzIGluCisg
ICAgICAgIC8vIHRoZSBGVEwsIHdoZW4gdGhlcmUgaXMgc28gbXVjaCBwcmVzc3VyZSB0aGF0IHdl
CisgICAgICAgIC8vIGFic29sdXRlbHkgbmVlZCB0byBsb2FkIHRoZSBjYWxsZWUtc2F2ZSByZWdp
c3RlcnMgaW50bworICAgICAgICAvLyBkaWZmZXJlbnQgR1BScyBpbml0aWFsbHkgYnV0IG5vdCBl
bm91Z2ggcHJlc3N1cmUgdG8KKyAgICAgICAgLy8gdGhlbiBoYXZlIHRvIHNwaWxsIGFsbCBvZiB0
aGVtLiBBbmQgZXZlbiBpbiB0aGF0IGNhc2UsCisgICAgICAgIC8vIGRlcGVuZGluZyBvbiB0aGUg
b3JkZXIgaW4gd2hpY2ggTExWTSBzYXZlcyB0aGUKKyAgICAgICAgLy8gY2FsbGVlLXNhdmVzLCB3
ZSB3aWxsIHByb2JhYmx5IHN0aWxsIGJlIHNhZmUuIEFueXdheSwKKyAgICAgICAgLy8gdGhlIGNv
dXBsZSBleHRyYSBtb3ZlIGluc3RydWN0aW9ucyBjb21wYXJlZCB0byBhbgorICAgICAgICAvLyBl
ZmZpY2llbnQgY3ljbGUtYmFzZWQgYWxnb3JpdGhtIGFyZSBub3QgZ29pbmcgdG8gaHVydAorICAg
ICAgICAvLyB1cy4KKyAgICAgICAgaWYgKHdhbnRlZFJlZy5pc0ZQUigpKSB7CisgICAgICAgICAg
ICBGUFJSZWcgdGVtcEZQUiA9IGdldEZyZWVGUFIoKTsKKyAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgKiBNb3ZpbmcgIiwgd2FudGVkUmVnLCAiIGlu
dG8gIiwgdGVtcEZQUiwgIlxuIik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKHdhbnRl
ZFJlZy5mcHIoKSwgdGVtcEZQUik7CisgICAgICAgICAgICB1cGRhdGVSZWNvdmVyeSgqY3VycmVu
dCwKKyAgICAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkZQUih0ZW1wRlBSLCBjdXJyZW50
LT5yZWNvdmVyeSgpLmRhdGFGb3JtYXQoKSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgR1BSUmVnIHRlbXBHUFIgPSBnZXRGcmVlR1BSKCk7CisgICAgICAgICAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICogTW92aW5nICIsIHdhbnRlZFJlZy5ncHIo
KSwgIiBpbnRvICIsIHRlbXBHUFIsICJcbiIpOworICAgICAgICAgICAgbV9qaXQubW92ZSh3YW50
ZWRSZWcuZ3ByKCksIHRlbXBHUFIpOworICAgICAgICAgICAgdXBkYXRlUmVjb3ZlcnkoKmN1cnJl
bnQsCisgICAgICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIodGVtcEdQUiwgY3VycmVu
dC0+cmVjb3ZlcnkoKS5kYXRhRm9ybWF0KCkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NF
UlQoIW1fcmVnaXN0ZXJzW3dhbnRlZFJlZ10pOworCisgICAgaWYgKGNhY2hlZFJlY292ZXJ5LnJl
Y292ZXJ5KCkuaXNDb25zdGFudCgpKSB7CisgICAgICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCBj
YWxsZWUgc2F2ZXMgZm9yIHdhbnRlZCBGUFJzLCBhbmQgdGhvc2UgYXJlIG5ldmVyIGNvbnN0YW50
cworICAgICAgICBBU1NFUlQod2FudGVkUmVnLmlzR1BSKCkpOworICAgICAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICogTG9hZGluZyAiLCBjYWNoZWRSZWNvdmVyeS5y
ZWNvdmVyeSgpLmNvbnN0YW50KCksICIgaW50byAiLCB3YW50ZWRSZWcsICJcbiIpOworICAgICAg
ICBtX2ppdC5tb3ZlVHJ1c3RlZFZhbHVlKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuY29uc3Rh
bnQoKSwgSlNWYWx1ZVJlZ3MgeyB3YW50ZWRSZWcuZ3ByKCkgfSk7CisgICAgICAgIHVwZGF0ZVJl
Y292ZXJ5KAorICAgICAgICAgICAgY2FjaGVkUmVjb3ZlcnksCisgICAgICAgICAgICBWYWx1ZVJl
Y292ZXJ5OjppblJlZ2lzdGVyKHdhbnRlZFJlZywgRGF0YUZvcm1hdEpTKSk7CisgICAgfSBlbHNl
IGlmIChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmlzSW5HUFIoKSkgeworICAgICAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICogTW92aW5nICIsIGNhY2hlZFJlY292
ZXJ5LnJlY292ZXJ5KCksICIgaW50byAiLCB3YW50ZWRSZWcsICJcbiIpOworICAgICAgICBpZiAo
d2FudGVkUmVnLmlzR1BSKCkpCisgICAgICAgICAgICBtX2ppdC5tb3ZlKGNhY2hlZFJlY292ZXJ5
LnJlY292ZXJ5KCkuZ3ByKCksIHdhbnRlZFJlZy5ncHIoKSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG1faml0Lm1vdmU2NFRvRG91YmxlKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3By
KCksIHdhbnRlZFJlZy5mcHIoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhY2hlZFJlY292
ZXJ5LnJlY292ZXJ5KCkuZGF0YUZvcm1hdCgpID09IERhdGFGb3JtYXRKUyk7CisgICAgICAgIHVw
ZGF0ZVJlY292ZXJ5KGNhY2hlZFJlY292ZXJ5LAorICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6
aW5SZWdpc3Rlcih3YW50ZWRSZWcsIERhdGFGb3JtYXRKUykpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIEFTU0VSVChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmlzSW5GUFIoKSk7CisgICAgICAg
IGlmIChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmRhdGFGb3JtYXQoKSA9PSBEYXRhRm9ybWF0
RG91YmxlKSB7CisgICAgICAgICAgICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgY2FsbGVlIHNhdmVz
IGZvciB3YW50ZWQgRlBScywgYW5kIHRob3NlIGFyZSBhbHdheXMgRGF0YUZvcm1hdEpTCisgICAg
ICAgICAgICBBU1NFUlQod2FudGVkUmVnLmlzR1BSKCkpOworICAgICAgICAgICAgLy8gVGhpcyB3
aWxsIGF1dG9tYXRpY2FsbHkgcGljayB0aGUgd2FudGVkIEdQUgorICAgICAgICAgICAgZW1pdEJv
eChjYWNoZWRSZWNvdmVyeSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAqIE1vdmluZyAiLCBjYWNoZWRSZWNv
dmVyeS5yZWNvdmVyeSgpLmZwcigpLCAiIGludG8gIiwgd2FudGVkUmVnLCAiXG4iKTsKKyAgICAg
ICAgICAgIGlmICh3YW50ZWRSZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3Zl
RG91YmxlVG82NChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmZwcigpLCB3YW50ZWRSZWcuZ3By
KCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUo
Y2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5mcHIoKSwgd2FudGVkUmVnLmZwcigpKTsKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZGF0YUZvcm1h
dCgpID09IERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICB1cGRhdGVSZWNvdmVyeShjYWNoZWRS
ZWNvdmVyeSwKKyAgICAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjppblJlZ2lzdGVyKHdhbnRl
ZFJlZywgRGF0YUZvcm1hdEpTKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBU1NFUlQobV9y
ZWdpc3RlcnNbd2FudGVkUmVnXSA9PSAmY2FjaGVkUmVjb3ZlcnkpOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpICYmIFVTRShKU1ZBTFVFNjQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZs
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzA4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUg
IkNhY2hlZFJlY292ZXJ5LmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAi
Q29kZUJsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitDYWxsRnJhbWVTaHVmZmxlcjo6Q2Fs
bEZyYW1lU2h1ZmZsZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IENhbGxGcmFtZVNodWZmbGVE
YXRhJiBkYXRhKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vbGRGcmFtZShkYXRhLm51bUxv
Y2FscyArIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplLCBudWxscHRyKQorICAgICwgbV9u
ZXdGcmFtZShkYXRhLmFyZ3Muc2l6ZSgpICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSwg
bnVsbHB0cikKKyAgICAsIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZShKU1N0YWNrOjpDYWxsRnJhbWVI
ZWFkZXJTaXplCisgICAgICAgICsgcm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGppdC5j
b2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKSkKKyAgICAsIG1fYWxpZ25lZE5ld0ZyYW1lU2l6
ZShKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplCisgICAgICAgICsgcm91bmRBcmd1bWVudENv
dW50VG9BbGlnbkZyYW1lKGRhdGEuYXJncy5zaXplKCkpKQorICAgICwgbV9mcmFtZURlbHRhKG1f
YWxpZ25lZE5ld0ZyYW1lU2l6ZSAtIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZSkKKyAgICAsIG1fbG9j
a2VkUmVnaXN0ZXJzKFJlZ2lzdGVyU2V0OjphbGxSZWdpc3RlcnMoKSkKK3sKKyAgICAvLyBXZSBh
cmUgYWxsb3dlZCBhbGwgdGhlIHVzdWFsIHJlZ2lzdGVycy4uLgorICAgIGZvciAodW5zaWduZWQg
aSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07ICkKKyAgICAgICAgbV9sb2NrZWRS
ZWdpc3RlcnMuY2xlYXIoR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTsgKQorICAgICAgICBtX2xvY2tl
ZFJlZ2lzdGVycy5jbGVhcihGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyAgICAvLyAuLi4gYXMg
d2VsbCBhcyB0aGUgcnVudGltZSByZWdpc3RlcnMuCisgICAgbV9sb2NrZWRSZWdpc3RlcnMuZXhj
bHVkZShSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworCisgICAgQVNTRVJU
KCFkYXRhLmNhbGxlZS5pc0luSlNTdGFjaygpIHx8IGRhdGEuY2FsbGVlLnZpcnR1YWxSZWdpc3Rl
cigpLmlzTG9jYWwoKSk7CisgICAgYWRkTmV3KFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpDYWxs
ZWUpLCBkYXRhLmNhbGxlZSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhdGEuYXJn
cy5zaXplKCk7ICsraSkgeworICAgICAgICBBU1NFUlQoIWRhdGEuYXJnc1tpXS5pc0luSlNTdGFj
aygpIHx8IGRhdGEuYXJnc1tpXS52aXJ0dWFsUmVnaXN0ZXIoKS5pc0xvY2FsKCkpOworICAgICAg
ICBhZGROZXcodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSksIGRhdGEuYXJnc1tpXSk7Cisg
ICAgfQorCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBmb3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0
KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVnLm5leHQoKSkgeworICAgICAgICBpZiAo
IWRhdGEucmVnaXN0ZXJzW3JlZ10uaXNTZXQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgIGFkZE5ldyhKU1ZhbHVlUmVncyhy
ZWcuZ3ByKCkpLCBkYXRhLnJlZ2lzdGVyc1tyZWddKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgYWRkTmV3KHJlZy5mcHIoKSwgZGF0YS5yZWdpc3RlcnNbcmVnXSk7CisgICAgfQorI2VuZGlm
Cit9CisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZGVsaW1pdGVyICAgICAgICAgICAgID0gIiAr
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgIjsKKyAgICBzdGF0aWMgY29uc3QgY2hh
ciogZGFuZ2VyRGVsaW1pdGVyICAgICAgID0gIiBYLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLVggIjsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZGFuZ2VyQm91bmRzRGVsaW1pdGVyID0g
IiBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFggIjsKKyAgICBzdGF0aWMgY29uc3Qg
Y2hhciogZW1wdHlTcGFjZSAgICAgICAgICAgID0gIiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIjsKKyAgICBBU1NFUlQobV9hbGlnbmVkTmV3RnJhbWVTaXplIDw9IG51bUxvY2Fs
cygpKTsKKyAgICBvdXQucHJpbnQoIiAgICAgICAgICAiKTsKKyAgICBvdXQucHJpbnQoIiAgICAg
ICAgICAgT2xkIGZyYW1lICAgICAgICAgICAgICAgIik7CisgICAgb3V0LnByaW50KCIgICAgICAg
ICAgIE5ldyBmcmFtZSAgICAgICAgICAgICAgICIpOworICAgIG91dC5wcmludCgiXG4iKTsKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG1fYWxpZ25lZE9sZEZyYW1lU2l6ZSArIG51bUxvY2Fscygp
ICsgMzsgKytpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvbGQgeyBtX2FsaWduZWRPbGRG
cmFtZVNpemUgLSBpIC0gMSB9OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbmV3UmVnIHsgb2xk
ICsgbV9mcmFtZURlbHRhIH07CisKKyAgICAgICAgaWYgKCFpc1ZhbGlkT2xkKG9sZCkgJiYgb2xk
ICE9IGZpcnN0T2xkKCkgLSAxCisgICAgICAgICAgICAmJiAhaXNWYWxpZE5ldyhuZXdSZWcpICYm
IG5ld1JlZyAhPSBmaXJzdE5ldygpIC0gMSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIG91dC5wcmludCgiICAgICAgICAiKTsKKyAgICAgICAgaWYgKGRhbmdlckZyb250aWVyKCkg
Pj0gZmlyc3ROZXcoKQorICAgICAgICAgICAgJiYgKG5ld1JlZyA9PSBkYW5nZXJGcm9udGllcigp
IHx8IG5ld1JlZyA9PSBmaXJzdE5ldygpIC0gMSkpCisgICAgICAgICAgICBvdXQucHJpbnQoZGFu
Z2VyQm91bmRzRGVsaW1pdGVyKTsKKyAgICAgICAgZWxzZSBpZiAoaXNWYWxpZE9sZChvbGQpKQor
ICAgICAgICAgICAgb3V0LnByaW50KGlzVmFsaWROZXcobmV3UmVnKSAmJiBpc0Rhbmdlck5ldyhu
ZXdSZWcpID8gZGFuZ2VyRGVsaW1pdGVyIDogZGVsaW1pdGVyKTsKKyAgICAgICAgZWxzZSBpZiAo
b2xkID09IGZpcnN0T2xkKCkgLSAxKQorICAgICAgICAgICAgb3V0LnByaW50KGRlbGltaXRlcik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludChlbXB0eVNwYWNlKTsKKyAgICAg
ICAgaWYgKGRhbmdlckZyb250aWVyKCkgPj0gZmlyc3ROZXcoKQorICAgICAgICAgICAgJiYgKG5l
d1JlZyA9PSBkYW5nZXJGcm9udGllcigpIHx8IG5ld1JlZyA9PSBmaXJzdE5ldygpIC0gMSkpCisg
ICAgICAgICAgICBvdXQucHJpbnQoZGFuZ2VyQm91bmRzRGVsaW1pdGVyKTsKKyAgICAgICAgZWxz
ZSBpZiAoaXNWYWxpZE5ldyhuZXdSZWcpIHx8IG5ld1JlZyA9PSBmaXJzdE5ldygpIC0gMSkKKyAg
ICAgICAgICAgIG91dC5wcmludChpc0Rhbmdlck5ldyhuZXdSZWcpID8gZGFuZ2VyRGVsaW1pdGVy
IDogZGVsaW1pdGVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KGVtcHR5
U3BhY2UpOworICAgICAgICBvdXQucHJpbnQoIlxuIik7CisgICAgICAgIGlmIChvbGQgPT0gZmly
c3RPbGQoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiIHNwIC0tPiAiKTsKKyAgICAgICAgZWxz
ZSBpZiAoIW9sZC5vZmZzZXQoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiIGZwIC0tPiAiKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCIgICAgICAgICIpOworICAgICAg
ICBpZiAoaXNWYWxpZE9sZChvbGQpKSB7CisgICAgICAgICAgICBpZiAoZ2V0T2xkKG9sZCkpIHsK
KyAgICAgICAgICAgICAgICBhdXRvIHN0ciA9IHRvQ1N0cmluZyhvbGQpOworICAgICAgICAgICAg
ICAgIGlmIChpc1ZhbGlkTmV3KG5ld1JlZykgJiYgaXNEYW5nZXJOZXcobmV3UmVnKSkKKyAgICAg
ICAgICAgICAgICAgICAgb3V0LnByaW50ZigiIFggICAgICAlMThzICAgICAgIFggIiwgc3RyLmRh
dGEoKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBvdXQucHJp
bnRmKCIgfCAgICAgICUxOHMgICAgICAgfCAiLCBzdHIuZGF0YSgpKTsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoaXNWYWxpZE5ldyhuZXdSZWcpICYmIGlzRGFuZ2VyTmV3KG5ld1JlZykpCisgICAg
ICAgICAgICAgICAgb3V0LnByaW50ZigiIFglMzBzIFggIiwgIiIpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiB8JTMwcyB8ICIsICIiKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoZW1wdHlTcGFjZSk7CisgICAgICAgIGlmIChp
c1ZhbGlkTmV3KG5ld1JlZykpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgZCA9IGlzRGFuZ2Vy
TmV3KG5ld1JlZykgPyAnWCcgOiAnfCc7CisgICAgICAgICAgICBhdXRvIHN0ciA9IHRvQ1N0cmlu
ZyhuZXdSZWcpOworICAgICAgICAgICAgaWYgKGdldE5ldyhuZXdSZWcpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGdldE5ldyhuZXdSZWcpLT5yZWNvdmVyeSgpLmlzQ29uc3RhbnQoKSkKKyAgICAg
ICAgICAgICAgICAgICAgb3V0LnByaW50ZigiICVjJThzIDwtICAgICAgICAgICBjb25zdGFudCAl
YyAiLCBkLCBzdHIuZGF0YSgpLCBkKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgYXV0byByZWNvdmVyeVN0ciA9IHRvQ1N0cmluZyhnZXROZXcobmV3UmVnKS0+
cmVjb3ZlcnkoKSk7CisgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiAlYyU4cyA8LSAl
MThzICVjICIsIGQsIHN0ci5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgICAgICByZWNvdmVy
eVN0ci5kYXRhKCksIGQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAobmV3UmVnID09IFZpcnR1YWxSZWdpc3RlciB7IEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgfSkK
KyAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIgJWMlOHMgPC0gJTE4enUgJWMgIiwgZCwgc3Ry
LmRhdGEoKSwgYXJnQ291bnQoKSwgZCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgb3V0LnByaW50ZigiICVjJTMwcyAlYyAiLCBkLCAiIiwgZCk7CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgb3V0LnByaW50KGVtcHR5U3BhY2UpOworICAgICAgICBpZiAobmV3UmVnID09
IGZpcnN0TmV3KCkgLSBtX25ld0ZyYW1lT2Zmc2V0ICYmICFpc1Nsb3dQYXRoKCkpCisgICAgICAg
ICAgICBvdXQucHJpbnQoIiA8LS0gbmV3IHNwIGJlZm9yZSBqdW1wIChjdXJyZW50ICIsIG1fbmV3
RnJhbWVCYXNlLCAiKSAiKTsKKyAgICAgICAgaWYgKG5ld1JlZyA9PSBmaXJzdE5ldygpKQorICAg
ICAgICAgICAgb3V0LnByaW50KCIgPC0tIG5ldyBmcCBhZnRlciBwcm9sb2d1ZSIpOworICAgICAg
ICBvdXQucHJpbnQoIlxuIik7CisgICAgfQorICAgIG91dC5wcmludCgiICAgICAgICAgICIpOwor
ICAgIG91dC5wcmludCgiICAgICAgICBMaXZlIHJlZ2lzdGVycyAgICAgICAgICAgICAiKTsKKyAg
ICBvdXQucHJpbnQoIiAgICAgICAgV2FudGVkIHJlZ2lzdGVycyAgICAgICAgICAgIik7CisgICAg
b3V0LnByaW50KCJcbiIpOworICAgIGZvciAoUmVnIHJlZyA9IFJlZzo6Zmlyc3QoKTsgcmVnIDw9
IFJlZzo6bGFzdCgpOyByZWcgPSByZWcubmV4dCgpKSB7CisgICAgICAgIENhY2hlZFJlY292ZXJ5
KiBvbGRDYWNoZWRSZWNvdmVyeSB7IG1fcmVnaXN0ZXJzW3JlZ10gfTsKKyAgICAgICAgQ2FjaGVk
UmVjb3ZlcnkqIG5ld0NhY2hlZFJlY292ZXJ5IHsgbV9uZXdSZWdpc3RlcnNbcmVnXSB9OworICAg
ICAgICBpZiAoIW9sZENhY2hlZFJlY292ZXJ5ICYmICFuZXdDYWNoZWRSZWNvdmVyeSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBvdXQucHJpbnQoIiAgICAgICAgICAiKTsKKyAgICAg
ICAgaWYgKG9sZENhY2hlZFJlY292ZXJ5KSB7CisgICAgICAgICAgICBhdXRvIHN0ciA9IHRvQ1N0
cmluZyhyZWcpOworICAgICAgICAgICAgb3V0LnByaW50ZigiICAgICAgICAgJThzICAgICAgICAg
ICAgICAgICAgIiwgc3RyLmRhdGEoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgb3V0
LnByaW50KGVtcHR5U3BhY2UpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIGlmIChu
ZXdDYWNoZWRSZWNvdmVyeSkgeworICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mgd2FudGVkSlNWYWx1
ZVJlZ3MgeyBuZXdDYWNoZWRSZWNvdmVyeS0+d2FudGVkSlNWYWx1ZVJlZ3MoKSB9OworICAgICAg
ICAgICAgaWYgKHJlZy5pc0ZQUigpKQorICAgICAgICAgICAgICAgIG91dC5wcmludChyZWcsICIg
PC0gIiwgbmV3Q2FjaGVkUmVjb3ZlcnktPnJlY292ZXJ5KCkpOworICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgaWYgKHJlZy5ncHIoKSA9PSB3YW50ZWRKU1ZhbHVlUmVncy50YWdH
UFIoKSkKKyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KHJlZy5ncHIoKSwgIiA8LSB0YWco
IiwgbmV3Q2FjaGVkUmVjb3ZlcnktPnJlY292ZXJ5KCksICIpIik7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQocmVnLmdwcigpLCAiIDwtIHBheWxv
YWQoIiwgbmV3Q2FjaGVkUmVjb3ZlcnktPnJlY292ZXJ5KCksICIpIik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIGlmIChuZXdDYWNoZWRSZWNvdmVyeSkKKyAgICAg
ICAgICAgIG91dC5wcmludCgiICAgICAgICAgIiwgcmVnLCAiIDwtICIsIG5ld0NhY2hlZFJlY292
ZXJ5LT5yZWNvdmVyeSgpKTsKKyNlbmRpZgorICAgICAgICBvdXQucHJpbnQoIlxuIik7CisgICAg
fQorICAgIG91dC5wcmludCgiICBMb2NrZWQgcmVnaXN0ZXJzOiAiKTsKKyAgICBib29sIGZpcnN0
TG9ja2VkIHsgdHJ1ZSB9OworICAgIGZvciAoUmVnIHJlZyA9IFJlZzo6Zmlyc3QoKTsgcmVnIDw9
IFJlZzo6bGFzdCgpOyByZWcgPSByZWcubmV4dCgpKSB7CisgICAgICAgIGlmIChtX2xvY2tlZFJl
Z2lzdGVycy5nZXQocmVnKSkgeworICAgICAgICAgICAgb3V0LnByaW50KGZpcnN0TG9ja2VkID8g
IiIgOiAiLCAiLCByZWcpOworICAgICAgICAgICAgZmlyc3RMb2NrZWQgPSBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBvdXQucHJpbnQoIlxuIik7CisKKyAgICBpZiAoaXNTbG93UGF0aCgp
KQorICAgICAgICBvdXQucHJpbnQoIiAgVXNpbmcgZnAtcmVsYXRpdmUgYWRkcmVzc2luZyBmb3Ig
c2xvdyBwYXRoIGNhbGxcbiIpOworICAgIGVsc2UKKyAgICAgICAgb3V0LnByaW50KCIgIFVzaW5n
IHNwLXJlbGF0aXZlIGFkZHJlc3NpbmcgZm9yIGp1bXAgKHVzaW5nICIsIG1fbmV3RnJhbWVCYXNl
LCAiIGFzIG5ldyBzcClcbiIpOworICAgIGlmIChtX29sZEZyYW1lT2Zmc2V0KQorICAgICAgICBv
dXQucHJpbnQoIiAgIE9sZCBmcmFtZSBvZmZzZXQgaXMgIiwgbV9vbGRGcmFtZU9mZnNldCwgIlxu
Iik7CisgICAgaWYgKG1fbmV3RnJhbWVPZmZzZXQpCisgICAgICAgIG91dC5wcmludCgiICAgTmV3
IGZyYW1lIG9mZnNldCBpcyAiLCBtX25ld0ZyYW1lT2Zmc2V0LCAiXG4iKTsKK30KKworQ2FjaGVk
UmVjb3ZlcnkqIENhbGxGcmFtZVNodWZmbGVyOjpnZXRDYWNoZWRSZWNvdmVyeShWYWx1ZVJlY292
ZXJ5IHJlY292ZXJ5KQoreworICAgIEFTU0VSVCghcmVjb3ZlcnkuaXNDb25zdGFudCgpKTsKKyAg
ICBpZiAocmVjb3ZlcnkuaXNJbkdQUigpKQorICAgICAgICByZXR1cm4gbV9yZWdpc3RlcnNbcmVj
b3ZlcnkuZ3ByKCldOworICAgIGlmIChyZWNvdmVyeS5pc0luRlBSKCkpCisgICAgICAgIHJldHVy
biBtX3JlZ2lzdGVyc1tyZWNvdmVyeS5mcHIoKV07CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgPT0gSW5QYWlyKSB7CisgICAgICAgIEFTU0VSVCht
X3JlZ2lzdGVyc1tyZWNvdmVyeS50YWdHUFIoKV0gPT0gbV9yZWdpc3RlcnNbcmVjb3ZlcnkucGF5
bG9hZEdQUigpXSk7CisgICAgICAgIHJldHVybiBtX3JlZ2lzdGVyc1tyZWNvdmVyeS5wYXlsb2Fk
R1BSKCldOworICAgIH0KKyNlbmRpZgorICAgIEFTU0VSVChyZWNvdmVyeS5pc0luSlNTdGFjaygp
KTsKKyAgICByZXR1cm4gZ2V0T2xkKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKTsKK30KKwor
Q2FjaGVkUmVjb3ZlcnkqIENhbGxGcmFtZVNodWZmbGVyOjpzZXRDYWNoZWRSZWNvdmVyeShWYWx1
ZVJlY292ZXJ5IHJlY292ZXJ5LCBDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkpCit7Cisg
ICAgQVNTRVJUKCFyZWNvdmVyeS5pc0NvbnN0YW50KCkpOworICAgIGlmIChyZWNvdmVyeS5pc0lu
R1BSKCkpCisgICAgICAgIHJldHVybiBtX3JlZ2lzdGVyc1tyZWNvdmVyeS5ncHIoKV0gPSBjYWNo
ZWRSZWNvdmVyeTsKKyAgICBpZiAocmVjb3ZlcnkuaXNJbkZQUigpKQorICAgICAgICByZXR1cm4g
bV9yZWdpc3RlcnNbcmVjb3ZlcnkuZnByKCldID0gY2FjaGVkUmVjb3Zlcnk7CisjaWYgVVNFKEpT
VkFMVUUzMl82NCkKKyAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgPT0gSW5QYWlyKSB7Cisg
ICAgICAgIG1fcmVnaXN0ZXJzW3JlY292ZXJ5LnRhZ0dQUigpXSA9IGNhY2hlZFJlY292ZXJ5Owor
ICAgICAgICByZXR1cm4gbV9yZWdpc3RlcnNbcmVjb3ZlcnkucGF5bG9hZEdQUigpXSA9IGNhY2hl
ZFJlY292ZXJ5OworICAgIH0KKyNlbmRpZgorICAgIEFTU0VSVChyZWNvdmVyeS5pc0luSlNTdGFj
aygpKTsKKyAgICBzZXRPbGQocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCksIGNhY2hlZFJlY292
ZXJ5KTsKKyAgICByZXR1cm4gY2FjaGVkUmVjb3Zlcnk7Cit9CisKK3ZvaWQgQ2FsbEZyYW1lU2h1
ZmZsZXI6OnNwaWxsKENhY2hlZFJlY292ZXJ5JiBjYWNoZWRSZWNvdmVyeSkKK3sKKyAgICBBU1NF
UlQoIWlzU2xvd1BhdGgoKSk7CisgICAgQVNTRVJUKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCku
aXNJblJlZ2lzdGVycygpKTsKKworICAgIFZpcnR1YWxSZWdpc3RlciBzcGlsbFNsb3QgeyAwIH07
CisgICAgZm9yIChWaXJ0dWFsUmVnaXN0ZXIgc2xvdCA9IGZpcnN0T2xkKCk7IHNsb3QgPD0gbGFz
dE9sZCgpOyBzbG90IC09IDEpIHsKKyAgICAgICAgQVNTRVJUKHNsb3QgPCBuZXdBc09sZChmaXJz
dE5ldygpKSk7CisgICAgICAgIGlmIChnZXRPbGQoc2xvdCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBzcGlsbFNsb3QgPSBzbG90OworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgLy8gV2UgbXVzdCBoYXZlIGVub3VnaCBzbG90cyB0byBiZSBhYmxlIHRvIGZpdCB0aGUgd2hv
bGUKKyAgICAvLyBjYWxsZWUncyBmcmFtZSBmb3IgdGhlIHNsb3cgcGF0aC4KKyAgICBSRUxFQVNF
X0FTU0VSVChzcGlsbFNsb3QuaXNMb2NhbCgpKTsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICBkYXRhTG9nKCIgICAqIFNwaWxsaW5nICIsIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCksICIg
aW50byAiLCBzcGlsbFNsb3QsICJcbiIpOworICAgIGF1dG8gZm9ybWF0ID0gZW1pdFN0b3JlKGNh
Y2hlZFJlY292ZXJ5LCBhZGRyZXNzRm9yT2xkKHNwaWxsU2xvdCkpOworICAgIEFTU0VSVChmb3Jt
YXQgIT0gRGF0YUZvcm1hdE5vbmUpOworICAgIHVwZGF0ZVJlY292ZXJ5KGNhY2hlZFJlY292ZXJ5
LCBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soc3BpbGxTbG90LCBmb3JtYXQpKTsK
K30KKwordm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6ZW1pdERlbHRhQ2hlY2soKQoreworICAgIGlm
IChBU1NFUlRfRElTQUJMRUQpCisgICAgICAgIHJldHVybjsKKworICAgIEdQUlJlZyBzY3JhdGNo
R1BSIHsgZ2V0RnJlZUdQUigpIH07CisgICAgaWYgKHNjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJl
ZykgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgVXNpbmcg
Iiwgc2NyYXRjaEdQUiwgIiBmb3IgdGhlIGZwLXNwIGRlbHRhIGNoZWNrXG4iKTsKKyAgICAgICAg
bV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNjcmF0Y2hH
UFIpOworICAgICAgICBtX2ppdC5zdWJQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHNj
cmF0Y2hHUFIpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvayA9IG1faml0LmJyYW5j
aDMyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBzY3JhdGNoR1BSLAorICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigtbnVtTG9jYWxzKCkgKiBzaXpl
b2YoUmVnaXN0ZXIpKSk7CisgICAgICAgIG1faml0LmFib3J0V2l0aFJlYXNvbihKSVRVbmV4cGVj
dGVkQ2FsbEZyYW1lU2l6ZSk7CisgICAgICAgIG9rLmxpbmsoJm1faml0KTsKKyAgICB9IGVsc2Ug
aWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIiAgU2tpcHBpbmcgdGhlIGZwLXNwIGRlbHRh
IGNoZWNrIHNpbmNlIHRoZXJlIGlzIHRvbyBtdWNoIHByZXNzdXJlIik7Cit9CisKK3ZvaWQgQ2Fs
bEZyYW1lU2h1ZmZsZXI6OnByZXBhcmVGb3JTbG93UGF0aCgpCit7CisgICAgQVNTRVJUKGlzVW5k
ZWNpZGVkKCkpOworICAgIGVtaXREZWx0YUNoZWNrKCk7CisKKyAgICBtX2ZyYW1lRGVsdGEgPSBu
dW1Mb2NhbHMoKSArIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplOworICAgIG1fbmV3RnJh
bWVCYXNlID0gTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyOworICAgIG1fbmV3
RnJhbWVPZmZzZXQgPSAtSlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1NpemU7CisKKyAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiXG5cblByZXBhcmluZyBmcmFtZSBmb3Igc2xvdyBw
YXRoIGNhbGw6XG4iLCAqdGhpcyk7CisKKyAgICBwcmVwYXJlQW55KCk7CisKKyAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgZGF0YUxvZygiUmVhZHkgZm9yIHNsb3cgcGF0aCBjYWxsIVxuIik7Cit9
CisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OnByZXBhcmVGb3JUYWlsQ2FsbCgpCit7CisgICAg
QVNTRVJUKGlzVW5kZWNpZGVkKCkpOworICAgIGVtaXREZWx0YUNoZWNrKCk7CisKKyAgICAvLyBX
ZSdsbCB1c2Ugc3AtYmFzZWQgaW5kZXhpbmcgc28gdGhhdCB3ZSBjYW4gbG9hZCB0aGUKKyAgICAv
LyBjYWxsZXIncyBmcmFtZSBwb2ludGVyIGludG8gdGhlIGZwciBpbW1lZGlhdGVseQorICAgIG1f
b2xkRnJhbWVCYXNlID0gTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyOworICAg
IG1fb2xkRnJhbWVPZmZzZXQgPSBudW1Mb2NhbHMoKTsKKyAgICBtX25ld0ZyYW1lQmFzZSA9IGFj
cXVpcmVHUFIoKTsKKyNpZiBDUFUoWDg2KQorICAgIC8vIFdlIGxvYWQgdGhlIGZyYW1lIHBvaW50
ZXIgbWFudWFsbHksIGJ1dCB3ZSBuZWVkIHRvIGFzayB0aGUKKyAgICAvLyBhbGdvcml0aG0gdG8g
bW92ZSB0aGUgcmV0dXJuIFBDIGZvciB1cyAoaXQnZCBwcm9iYWJseQorICAgIC8vIHJlcXVpcmUg
YSB3cml0ZSB0byB0aGUgZGFuZ2VyIHpvbmUpLiBTaW5jZSBpdCdkIGJlIGF3a3dhcmQKKyAgICAv
LyB0byBhc2sgZm9yIGhhbGYgYSB2YWx1ZSBtb3ZlLCB3ZSBhc2sgdGhhdCB0aGUgd2hvbGUgdGhp
bmcKKyAgICAvLyBiZSBtb3ZlZCBmb3IgdXMuCisgICAgYWRkTmV3KFZpcnR1YWxSZWdpc3RlciB7
IDAgfSwKKyAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKFZpcnR1YWxS
ZWdpc3RlcigwKSwgRGF0YUZvcm1hdEpTKSk7CisKKyAgICAvLyBzcCB3aWxsIHBvaW50IHRvIGhl
YWQwIGFuZCB3ZSB3aWxsIG1vdmUgaXQgdXAgaGFsZiBhIHNsb3QKKyAgICAvLyBtYW51YWxseQor
ICAgIG1fbmV3RnJhbWVPZmZzZXQgPSAwOworI2VsaWYgQ1BVKEFSTSkgfHwgQ1BVKFNINCkgfHwg
Q1BVKE1JUFMpCisgICAgLy8gV2UgbG9hZCB0aGUgdGhlIGZyYW1lIHBvaW50ZXIgYW5kIGxpbmsg
cmVnaXN0ZXIKKyAgICAvLyBtYW51YWxseS4gV2UgY291bGQgYXNrIHRoZSBhbGdvcml0aG0gdG8g
bG9hZCB0aGVtIGZvciB1cywKKyAgICAvLyBhbmQgaXQgd291bGQgYWxsb3cgdXMgdG8gdXNlIHRo
ZSBsaW5rIHJlZ2lzdGVyIGFzIGFuIGV4dHJhCisgICAgLy8gdGVtcG9yYXJ5IC0gYnV0IGl0J2Qg
bWVhbiB0aGF0IHRoZSBmcmFtZSBwb2ludGVyIGNhbiBhbHNvCisgICAgLy8gYmUgdXNlZCBhcyBh
biBleHRyYSB0ZW1wb3JhcnksIHNvIHdlIGtlZXAgdGhlIGxpbmsgcmVnaXN0ZXIKKyAgICAvLyBs
b2NrZWQgaW5zdGVhZC4KKworICAgIC8vIHNwIHdpbGwgcG9pbnQgdG8gaGVhZDEgc2luY2UgdGhl
IGNhbGxlZSdzIHByb2xvZ3VlIHB1c2hlcworICAgIC8vIHRoZSBjYWxsIGZyYW1lIGFuZCBsaW5r
IHJlZ2lzdGVyLgorICAgIG1fbmV3RnJhbWVPZmZzZXQgPSAtMTsKKyNlbGlmIENQVShBUk02NCkK
KyAgICAvLyBXZSBsb2FkIHRoZSBmcmFtZSBwb2ludGVyIGFuZCBsaW5rIHJlZ2lzdGVyIG1hbnVh
bGx5LiBXZQorICAgIC8vIGNvdWxkIGFzayB0aGUgYWxnb3JpdGhtIHRvIGxvYWQgdGhlIGxpbmsg
cmVnaXN0ZXIgZm9yIHVzCisgICAgLy8gKHdoaWNoIHdvdWxkIGFsbG93IGZvciBpdHMgdXNlIGFz
IGFuIGV4dHJhIHRlbXBvcmFyeSksIGJ1dAorICAgIC8vIHNpbmNlIGl0cyBub3QgaW4gR1BSSW5m
bywgd2UgY2FuJ3QgZG8gaXQuCisKKyAgICAvLyBzcCB3aWxsIHBvaW50IHRvIGhlYWQyIHNpbmNl
IHRoZSBjYWxsZWUncyBwcm9sb2d1ZSBwdXNoZXMgdGhlCisgICAgLy8gY2FsbCBmcmFtZSBhbmQg
bGluayByZWdpc3RlcgorICAgIG1fbmV3RnJhbWVPZmZzZXQgPSAtMjsKKyNlbGlmIENQVShYODZf
NjQpCisgICAgLy8gV2UgbG9hZCB0aGUgZnJhbWUgcG9pbnRlciBtYW51YWxseSwgYnV0IHdlIGFz
ayB0aGUKKyAgICAvLyBhbGdvcml0aG0gdG8gbW92ZSB0aGUgcmV0dXJuIFBDIGZvciB1cyAoaXQn
ZCBwcm9iYWJseQorICAgIC8vIHJlcXVpcmUgYSB3cml0ZSBpbiB0aGUgZGFuZ2VyIHpvbmUpCisg
ICAgYWRkTmV3KFZpcnR1YWxSZWdpc3RlciB7IDEgfSwKKyAgICAgICAgVmFsdWVSZWNvdmVyeTo6
ZGlzcGxhY2VkSW5KU1N0YWNrKFZpcnR1YWxSZWdpc3RlcigxKSwgRGF0YUZvcm1hdEpTKSk7CisK
KyAgICAvLyBzcCB3aWxsIHBvaW50IHRvIGhlYWQxIHNpbmNlIHRoZSBjYWxsZWUncyBwcm9sb2d1
ZSBwdXNoZXMKKyAgICAvLyB0aGUgY2FsbCBmcmFtZSByZWdpc3RlcgorICAgIG1fbmV3RnJhbWVP
ZmZzZXQgPSAtMTsKKyNlbHNlCisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisjZW5k
aWYKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCIgIEVtaXR0aW5nIGNvZGUg
Zm9yIGNvbXB1dGluZyB0aGUgbmV3IGZyYW1lIGJhc2VcbiIpOworCisgICAgLy8gV2UgY29tcHV0
ZSB0aGUgbmV3IGZyYW1lIGJhc2UgYnkgZmlyc3QgY29tcHV0aW5nIHRoZSB0b3Agb2YgdGhlCisg
ICAgLy8gb2xkIGZyYW1lICh0YWtpbmcgaW50byBhY2NvdW50IGFuIGFyZ3VtZW50IGNvdW50IGhp
Z2hlciB0aGFuCisgICAgLy8gdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzKSwgdGhlbiBzdWJzdHJh
Y3RpbmcgdG8gaXQgdGhlIGFsaWduZWQKKyAgICAvLyBuZXcgZnJhbWUgc2l6ZSAoYWRqdXN0ZWQp
LgorICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgSlNTdGFjazo6QXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4o
c2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgbV9uZXdGcmFtZUJhc2UpOworICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGFyZ3VtZW50Q291bnRPSyA9CisgICAgICAgIG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwsIG1fbmV3RnJhbWVCYXNlLAorICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+
bnVtUGFyYW1ldGVycygpKSk7CisgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpIC0gMSArIEpTU3RhY2s6OkNhbGxGcmFt
ZUhlYWRlclNpemUpLCBtX25ld0ZyYW1lQmFzZSk7CisgICAgbV9qaXQuYW5kMzIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMigtc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSksIG1fbmV3RnJh
bWVCYXNlKTsKKyAgICBtX2ppdC5tdWwzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNp
emVvZihSZWdpc3RlcikpLCBtX25ld0ZyYW1lQmFzZSwgbV9uZXdGcmFtZUJhc2UpOworICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgYXJndW1lbnRDb3Vu
dE9LLmxpbmsoJm1faml0KTsKKyAgICBtX2ppdC5tb3ZlKAorICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKG1fYWxpZ25lZE9sZEZyYW1lU2l6ZSAqIHNpemVvZihSZWdpc3Rlcikp
LAorICAgICAgICBtX25ld0ZyYW1lQmFzZSk7CisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyAg
ICBtX2ppdC5hZGRQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIG1fbmV3RnJhbWVCYXNl
KTsKKyAgICBtX2ppdC5zdWJQdHIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoCisgICAgICAgICAgICAobV9hbGlnbmVkTmV3RnJhbWVTaXplICsgbV9uZXdGcmFtZU9mZnNl
dCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgCisgICAgICAgIG1fbmV3RnJhbWVCYXNlKTsKKworICAg
IC8vIFdlIGxvYWQgdGhlIGxpbmsgcmVnaXN0ZXIgbWFudWFsbHkgZm9yIGFyY2hpdGVjdHVyZXMg
dGhhdCBoYXZlIG9uZQorI2lmIENQVShBUk0pIHx8IENQVShTSDQpIHx8IENQVShBUk02NCkKKyAg
ICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpm
cmFtZVBvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKHZvaWQqKSksCisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpsaW5rUmVnaXN0ZXIpOworI2VsaWYgQ1BVKE1JUFMpCisgICAgbV9qaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0
ZXIsIHNpemVvZih2b2lkKikpLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmV0dXJuQWRkcmVz
c1JlZ2lzdGVyKTsKKyNlbmRpZgorCisgICAgLy8gV2Ugd2FudCB0aGUgZnJhbWUgcG9pbnRlciB0
byBhbHdheXMgcG9pbnQgdG8gYSB2YWxpZCBmcmFtZSwgYW5kCisgICAgLy8gd2UgYXJlIGdvaW5n
IHRvIHRyYXNoIHRoZSBjdXJyZW50IG9uZS4gTGV0J3MgbWFrZSBpdCBwb2ludCB0bworICAgIC8v
IG91ciBjYWxsZXIncyBmcmFtZSwgc2luY2UgdGhhdCdzIHdoYXQgd2Ugd2FudCB0byBlbmQgdXAg
d2l0aC4KKyAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNz
ZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3RlciksCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpm
cmFtZVBvaW50ZXJSZWdpc3Rlcik7CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxv
ZygiUHJlcGFyaW5nIGZyYW1lIGZvciB0YWlsIGNhbGw6XG4iLCAqdGhpcyk7CisKKyAgICBwcmVw
YXJlQW55KCk7CisKKyNpZiBDUFUoWDg2KQorICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRh
TG9nKCIgIFNpbXVsYXRpbmcgcG9wIG9mIHRoZSBjYWxsIGZyYW1lIHJlZ2lzdGVyXG4iKTsKKyAg
ICBtX2ppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2Yodm9pZCop
KSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyNlbmRpZgorCisgICAg
aWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIlJlYWR5IGZvciB0YWlsIGNhbGwhXG4iKTsK
K30KKworYm9vbCBDYWxsRnJhbWVTaHVmZmxlcjo6dHJ5V3JpdGVzKENhY2hlZFJlY292ZXJ5JiBj
YWNoZWRSZWNvdmVyeSkKK3sKKyAgICBBU1NFUlQobV9uZXdGcmFtZUJhc2UgIT0gSW52YWxpZEdQ
UlJlZyk7CisKKyAgICAvLyBJZiB0aGUgdmFsdWUgaXMgYWxyZWFkeSBzZXQgdXAgY29ycmVjdGx5
LCB3ZSBkb24ndCBoYXZlCisgICAgLy8gYW55dGhpbmcgdG8gZG8uCisgICAgaWYgKGlzU2xvd1Bh
dGgoKSAmJiBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmlzSW5KU1N0YWNrKCkKKyAgICAgICAg
JiYgY2FjaGVkUmVjb3ZlcnkudGFyZ2V0cygpLnNpemUoKSA9PSAxCisgICAgICAgICYmIG5ld0Fz
T2xkKGNhY2hlZFJlY292ZXJ5LnRhcmdldHMoKVswXSkgPT0gY2FjaGVkUmVjb3ZlcnkucmVjb3Zl
cnkoKS52aXJ0dWFsUmVnaXN0ZXIoKSkgeworICAgICAgICBjYWNoZWRSZWNvdmVyeS5jbGVhclRh
cmdldHMoKTsKKyAgICAgICAgaWYgKCFjYWNoZWRSZWNvdmVyeS53YW50ZWRKU1ZhbHVlUmVncygp
ICYmIGNhY2hlZFJlY292ZXJ5LndhbnRlZEZQUigpID09IEludmFsaWRGUFJSZWcpCisgICAgICAg
ICAgICBjbGVhckNhY2hlZFJlY292ZXJ5KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIWNhbkxvYWRBbmRCb3goY2FjaGVk
UmVjb3ZlcnkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBlbWl0TG9hZChjYWNoZWRS
ZWNvdmVyeSk7CisgICAgZW1pdEJveChjYWNoZWRSZWNvdmVyeSk7CisgICAgQVNTRVJUKGNhY2hl
ZFJlY292ZXJ5LnJlY292ZXJ5KCkuaXNJblJlZ2lzdGVycygpCisgICAgICAgIHx8IGNhY2hlZFJl
Y292ZXJ5LnJlY292ZXJ5KCkuaXNDb25zdGFudCgpKTsKKworICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICBkYXRhTG9nKCIgICAqIFN0b3JpbmcgIiwgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKSk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjYWNoZWRSZWNvdmVyeS50YXJnZXRzKCkuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHRhcmdldCB7IGNhY2hlZFJlY292
ZXJ5LnRhcmdldHMoKVtpXSB9OworICAgICAgICBBU1NFUlQoIWlzRGFuZ2VyTmV3KHRhcmdldCkp
OworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIWkgPyAiIGludG8g
IiA6ICIsIGFuZCAiLCAiTkVXICIsIHRhcmdldCk7CisgICAgICAgIGVtaXRTdG9yZShjYWNoZWRS
ZWNvdmVyeSwgYWRkcmVzc0Zvck5ldyh0YXJnZXQpKTsKKyAgICAgICAgc2V0TmV3KHRhcmdldCwg
bnVsbHB0cik7CisgICAgfQorICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJcbiIp
OworICAgIGNhY2hlZFJlY292ZXJ5LmNsZWFyVGFyZ2V0cygpOworICAgIGlmICghY2FjaGVkUmVj
b3Zlcnkud2FudGVkSlNWYWx1ZVJlZ3MoKSAmJiBjYWNoZWRSZWNvdmVyeS53YW50ZWRGUFIoKSA9
PSBJbnZhbGlkRlBSUmVnKQorICAgICAgICBjbGVhckNhY2hlZFJlY292ZXJ5KGNhY2hlZFJlY292
ZXJ5LnJlY292ZXJ5KCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ2FsbEZyYW1l
U2h1ZmZsZXI6OnBlcmZvcm1TYWZlV3JpdGVzKCkKK3sKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZmly
c3RTYWZlOworICAgIFZpcnR1YWxSZWdpc3RlciBlbmQgeyBsYXN0TmV3KCkgKyAxIH07CisgICAg
VmVjdG9yPFZpcnR1YWxSZWdpc3Rlcj4gZmFpbHVyZXM7CisKKyAgICAvLyBGb3IgYWxsIGNhY2hl
ZFJlY292ZXJpZXMgdGhhdCB3cml0ZXMgdG8gdGhlIHNhZmUgem9uZSwgaWYgaXQKKyAgICAvLyBk
b2Vzbid0IGFsc28gd3JpdGUgdG8gdGhlIGRhbmdlciB6b25lLCB3ZSB0cnkgdG8gcGVyZm9ybQor
ICAgIC8vIHRoZSB3cml0ZXMuIFRoaXMgbWF5IGZyZWUgdXAgZGFuZ2VyIHNsb3RzLCBzbyB3ZSBp
dGVyYXRlCisgICAgLy8gYWdhaW4gdW50aWwgaXQgZG9lc24ndCBoYXBwZW4gYW55bW9yZS4KKyAg
ICAvLworICAgIC8vIE5vdGUgdGhhdCBldmVuIHRob3VnaCB3ZSBoYXZlIGEgd2hpbGUgYmxvY2ss
IHdlIGxvb2sgYXQKKyAgICAvLyBlYWNoIHNsb3Qgb2YgdGhlIG5ldyBjYWxsIGZyYW1lIGF0IG1v
c3Qgb25jZSBzaW5jZSBpbiBlYWNoCisgICAgLy8gaXRlcmF0aW9uIGJleW9uZCB0aGUgZmlyc3Qs
IHdlIG9ubHkgbG9hZCB1cCB0aGUgcG9ydGlvbiBvZgorICAgIC8vIHRoZSBuZXcgY2FsbCBmcmFt
ZSB0aGF0IHdhcyBkYW5nZXJvdXMgYW5kIGJlY2FtZSBzYWZlIGR1ZQorICAgIC8vIHRvIHRoZSBw
cmV2aW91cyBpdGVyYXRpb24uCisgICAgZG8geworICAgICAgICBmaXJzdFNhZmUgPSBkYW5nZXJG
cm9udGllcigpICsgMTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9n
KCIgIFRyeWluZyBzYWZlIHdyaXRlcyAoYmV0d2VlbiBORVcgIiwgZmlyc3RTYWZlLCAiIGFuZCBO
RVcgIiwgZW5kIC0gMSwgIilcbiIpOworICAgICAgICBib29sIGRpZFByb2dyZXNzID0gZmFsc2U7
CisgICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIHJlZyA9IGZpcnN0U2FmZTsgcmVnIDwgZW5k
OyByZWcgKz0gMSkgeworICAgICAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5
ID0gZ2V0TmV3KHJlZyk7CisgICAgICAgICAgICBpZiAoIWNhY2hlZFJlY292ZXJ5KSB7CisgICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
ICsgIiwgcmVnLCAiIGlzIE9LLlxuIik7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWhhc09ubHlTYWZlV3JpdGVzKCpjYWNoZWRSZWNv
dmVyeSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCIgICAtICIsIGNhY2hlZFJlY292ZXJ5LT5yZWNvdmVyeSgpLCAiIHdyaXRl
cyB0byBORVcgIiwgcmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgIiBidXQgYWxzbyBoYXMg
ZGFuZ2Vyb3VzIHdyaXRlcy5cbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjYWNoZWRSZWNvdmVy
eS0+d2FudGVkSlNWYWx1ZVJlZ3MoKSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7
CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIC0gIiwgY2FjaGVkUmVjb3ZlcnktPnJl
Y292ZXJ5KCksICIgd3JpdGVzIHRvIE5FVyAiLCByZWcsCisgICAgICAgICAgICAgICAgICAgICAg
ICAiIGJ1dCBpcyBhbHNvIG5lZWRlZCBpbiByZWdpc3RlcnMuXG4iKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoY2FjaGVkUmVjb3ZlcnktPndhbnRlZEZQUigpICE9IEludmFsaWRGUFJSZWcpIHsKKyAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCIgICAtICIsIGNhY2hlZFJlY292ZXJ5LT5yZWNvdmVyeSgpLCAiIHdyaXRlcyB0byBORVcgIiwg
cmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgIiBidXQgaXMgYWxzbyBuZWVkZWQgaW4gYW4g
RlBSLlxuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCF0cnlXcml0ZXMoKmNhY2hlZFJlY292ZXJ5
KSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICAtIFVuYWJsZSB0byB3cml0ZSB0byBORVcgIiwgcmVnLCAiIGZyb20gIiwgY2Fj
aGVkUmVjb3ZlcnktPnJlY292ZXJ5KCksICJcbiIpOworICAgICAgICAgICAgICAgIGZhaWx1cmVz
LmFwcGVuZChyZWcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGlkUHJvZ3Jlc3MgPSB0
cnVlOworICAgICAgICB9CisgICAgICAgIGVuZCA9IGZpcnN0U2FmZTsKKworICAgICAgICAvLyBJ
ZiB3ZSBoYXZlIGNhY2hlZFJlY292ZXJpZXMgdGhhdCBmYWlsZWQgdG8gd3JpdGUsIGl0IGlzCisg
ICAgICAgIC8vIGJlY2F1c2UgdGhleSBhcmUgb24gdGhlIHN0YWNrIGFuZCB3ZSBkaWRuJ3QgaGF2
ZSBlbm91Z2gKKyAgICAgICAgLy8gcmVnaXN0ZXJzIGF2YWlsYWJsZSBhdCB0aGUgdGltZSB0byBs
b2FkIHRoZW0gaW50by4gSWYKKyAgICAgICAgLy8gd2UgaGF2ZSBhIGZyZWUgcmVnaXN0ZXIsIHdl
IHNob3VsZCB0cnkgYWdhaW4gYmVjYXVzZSBpdAorICAgICAgICAvLyBjb3VsZCBmcmVlIHVwIHNv
bWUgZGFuZ2VyIHNsb3RzLgorICAgICAgICBpZiAoZGlkUHJvZ3Jlc3MgJiYgaGFzRnJlZVJlZ2lz
dGVyKCkpIHsKKyAgICAgICAgICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+IHN0aWxsRmFpbGlu
ZzsKKyAgICAgICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIGZhaWxlZCA6IGZhaWx1cmVzKSB7
CisgICAgICAgICAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5ID0gZ2V0TmV3
KGZhaWxlZCk7CisgICAgICAgICAgICAgICAgLy8gSXQgY291bGQgaGF2ZSBiZWVuIGhhbmRsZWQg
bGF0ZXIgaWYgaXQgaGFkCisgICAgICAgICAgICAgICAgLy8gc2V2ZXJhbCB0YXJnZXRzCisgICAg
ICAgICAgICAgICAgaWYgKCFjYWNoZWRSZWNvdmVyeSkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQoaGFzT25seVNhZmVXcml0ZXMoKmNhY2hl
ZFJlY292ZXJ5KQorICAgICAgICAgICAgICAgICAgICAmJiAhY2FjaGVkUmVjb3ZlcnktPndhbnRl
ZEpTVmFsdWVSZWdzKCkKKyAgICAgICAgICAgICAgICAgICAgJiYgY2FjaGVkUmVjb3ZlcnktPndh
bnRlZEZQUigpID09IEludmFsaWRGUFJSZWcpOworICAgICAgICAgICAgICAgIGlmICghdHJ5V3Jp
dGVzKCpjYWNoZWRSZWNvdmVyeSkpCisgICAgICAgICAgICAgICAgICAgIHN0aWxsRmFpbGluZy5h
cHBlbmQoZmFpbGVkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZhaWx1cmVzID0gV1RG
Ojptb3ZlKHN0aWxsRmFpbGluZyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZlcmJvc2UgJiYg
Zmlyc3RTYWZlICE9IGRhbmdlckZyb250aWVyKCkgKyAxKQorICAgICAgICAgICAgZGF0YUxvZygi
ICBXZSBmcmVlZCB1cCBkYW5nZXIgc2xvdHMhXG4iKTsKKyAgICB9IHdoaWxlIChmaXJzdFNhZmUg
IT0gZGFuZ2VyRnJvbnRpZXIoKSArIDEpOworCisgICAgcmV0dXJuIGZhaWx1cmVzLmlzRW1wdHko
KTsKK30KKwordm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6cHJlcGFyZUFueSgpCit7CisgICAgQVNT
RVJUKCFpc1VuZGVjaWRlZCgpKTsKKworICAgIHVwZGF0ZURhbmdlckZyb250aWVyKCk7CisKKyAg
ICAvLyBGaXJzdCwgd2UgdHJ5IHRvIHN0b3JlIGFueSB2YWx1ZSB0aGF0IGdvZXMgYWJvdmUgdGhl
IGRhbmdlcgorICAgIC8vIGZyb250aWVyLiBUaGlzIHdpbGwgbmV2ZXIgdXNlIG1vcmUgcmVnaXN0
ZXJzIHNpbmNlIHdlIGFyZSBvbmx5CisgICAgLy8gbG9hZGluZytzdG9yaW5nIGlmIHdlIGVuc3Vy
ZSB0aGF0IGFueSByZWdpc3RlciB1c2VkIGZvciB0aGUgbG9hZAorICAgIC8vIHdpbGwgYmUgZnJl
ZWQgdXAgYWZ0ZXIgdGhlIHN0b3JlcyAoaS5lLiwgYWxsIHN0b3JlcyBhcmUgYWJvdmUKKyAgICAv
LyB0aGUgZGFuZ2VyIGZyb250aWVyLCBhbmQgdGhlcmUgaXMgbm8gd2FudGVkIHJlZ2lzdGVyKS4K
KyAgICBwZXJmb3JtU2FmZVdyaXRlcygpOworCisgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgY291
bGRuJ3QgaGF2ZSBtb3JlIGF2YWlsYWJsZSByZWdpc3RlcnMgdGhhbgorICAgIC8vIHdlIGhhdmUg
d2l0aG91dGggc3BpbGxpbmc6IGFsbCB2YWx1ZXMgY3VycmVudGx5IGluIHJlZ2lzdGVycworICAg
IC8vIGVpdGhlciByZXF1aXJlIGEgd3JpdGUgdG8gdGhlIGRhbmdlciB6b25lLCBvciBoYXZlIGEg
d2FudGVkCisgICAgLy8gcmVnaXN0ZXIsIHdoaWNoIG1lYW5zIHRoYXQgaW4gYW55IGNhc2UgdGhl
eSB3aWxsIGhhdmUgdG8gZ28KKyAgICAvLyB0aHJvdWdoIHJlZ2lzdGVycyBhZ2Fpbi4KKworICAg
IC8vIFdlIG5vdyBzbG93bHkgZnJlZSB1cCB0aGUgZGFuZ2VyIHpvbmUgYnkgZmlyc3QgbG9hZGlu
ZyB0aGUgb2xkCisgICAgLy8gdmFsdWUgb24gdGhlIGRhbmdlciBmcm9udGllciwgc3BpbGxpbmcg
YXMgbWFueSByZWdpc3RlcnMgYXMKKyAgICAvLyBuZWVkZWQgdG8gZG8gc28gYW5kIGVuc3VyaW5n
IHRoYXQgdGhlIGNvcnJlc3BvbmRpbmcgc2xvdCBpbiB0aGUKKyAgICAvLyBuZXcgZnJhbWUgaXMg
bm93IHJlYWR5IHRvIGJlIHdyaXR0ZW4uIFRoZW4sIHdlIHN0b3JlIHRoZSBvbGQKKyAgICAvLyB2
YWx1ZSB0byBpdHMgdGFyZ2V0IGxvY2F0aW9uIGlmIHBvc3NpYmxlICh3ZSBjb3VsZCBoYXZlIGZh
aWxlZAorICAgIC8vIHRvIGxvYWQgaXQgcHJldmlvdXNseSBkdWUgdG8gaGlnaCBwcmVzc3VyZSku
IEZpbmFsbHksIHdlIHdyaXRlCisgICAgLy8gdG8gYW55IG9mIHRoZSBuZXdseSBzYWZlIHNsb3Rz
IHRoYXQgd2UgY2FuLCB3aGljaCBjb3VsZCBmcmVlIHVwCisgICAgLy8gcmVnaXN0ZXJzIChoZW5j
ZSB3aHkgd2UgZG8gaXQgZWFnZXJseSkuCisgICAgZm9yIChWaXJ0dWFsUmVnaXN0ZXIgcmVnID0g
ZGFuZ2VyRnJvbnRpZXIoKTsgcmVnID49IGZpcnN0TmV3KCk7IHJlZyAtPSAxKSB7CisgICAgICAg
IGlmIChyZWcgPT0gZGFuZ2VyRnJvbnRpZXIoKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICBOZXh0IHNsb3QgKE5FVyAiLCByZWcsICIpIGlz
IHRoZSBkYW5nZXIgZnJvbnRpZXJcbiIpOworICAgICAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNh
Y2hlZFJlY292ZXJ5IHsgZ2V0T2xkKG5ld0FzT2xkKGRhbmdlckZyb250aWVyKCkpKSB9OworICAg
ICAgICAgICAgQVNTRVJUKGNhY2hlZFJlY292ZXJ5KTsKKyAgICAgICAgICAgIGVuc3VyZUxvYWQo
KmNhY2hlZFJlY292ZXJ5KTsKKyAgICAgICAgICAgIGVtaXRMb2FkKCpjYWNoZWRSZWNvdmVyeSk7
CisgICAgICAgICAgICBlbnN1cmVCb3goKmNhY2hlZFJlY292ZXJ5KTsKKyAgICAgICAgICAgIGVt
aXRCb3goKmNhY2hlZFJlY292ZXJ5KTsKKyAgICAgICAgICAgIGlmIChoYXNPbmx5U2FmZVdyaXRl
cygqY2FjaGVkUmVjb3ZlcnkpKQorICAgICAgICAgICAgICAgIHRyeVdyaXRlcygqY2FjaGVkUmVj
b3ZlcnkpOworICAgICAgICB9IGVsc2UgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9n
KCIgIE5leHQgc2xvdCBpcyBORVcgIiwgcmVnLCAiXG4iKTsKKworICAgICAgICBBU1NFUlQoIWlz
RGFuZ2VyTmV3KHJlZykpOworICAgICAgICBDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3Zlcnkg
PSBnZXROZXcocmVnKTsKKyAgICAgICAgLy8gVGhpcyBjb3VsZCBiZSBvbmUgb2YgdGhlIGhlYWRl
ciBzbG90cyB3ZSBkb24ndCBjYXJlIGFib3V0LgorICAgICAgICBpZiAoIWNhY2hlZFJlY292ZXJ5
KSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIg
ICArICIsIHJlZywgIiBpcyBPS1xuIik7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChjYW5Mb2FkQW5kQm94KCpjYWNoZWRSZWNvdmVyeSkgJiYgaGFzT25s
eVNhZmVXcml0ZXMoKmNhY2hlZFJlY292ZXJ5KQorICAgICAgICAgICAgJiYgIWNhY2hlZFJlY292
ZXJ5LT53YW50ZWRKU1ZhbHVlUmVncygpCisgICAgICAgICAgICAmJiBjYWNoZWRSZWNvdmVyeS0+
d2FudGVkRlBSKCkgPT0gSW52YWxpZEZQUlJlZykgeworICAgICAgICAgICAgZW1pdExvYWQoKmNh
Y2hlZFJlY292ZXJ5KTsKKyAgICAgICAgICAgIGVtaXRCb3goKmNhY2hlZFJlY292ZXJ5KTsKKyAg
ICAgICAgICAgIGJvb2wgd3JpdGVzT0sgPSB0cnlXcml0ZXMoKmNhY2hlZFJlY292ZXJ5KTsKKyAg
ICAgICAgICAgIEFTU0VSVF9VTlVTRUQod3JpdGVzT0ssIHdyaXRlc09LKTsKKyAgICAgICAgfSBl
bHNlIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICAgLSAiLCBjYWNoZWRSZWNv
dmVyeS0+cmVjb3ZlcnkoKSwgIiBjYW4ndCBiZSBoYW5kbGVkIGp1c3QgeWV0LlxuIik7CisgICAg
fQorICAgIEFTU0VSVChkYW5nZXJGcm9udGllcigpIDwgZmlyc3ROZXcoKSk7CisKKyAgICAvLyBO
b3csIHRoZSBkYW5nZXIgem9uZSBpcyBlbXB0eSwgYnV0IHdlIHN0aWxsIGhhdmUgYSBjb3VwbGUg
b2YKKyAgICAvLyB0aGluZ3MgdG8gZG86CisgICAgLy8KKyAgICAvLyAxKSBUaGVyZSBjb3VsZCBi
ZSByZW1haW5pbmcgc2FmZSB3cml0ZXMgdGhhdCBmYWlsZWQgZWFybGllciBkdWUKKyAgICAvLyAg
ICB0byBoaWdoIHJlZ2lzdGVyIHByZXNzdXJlIGFuZCBoYWQgbm90aGluZyB0byBkbyB3aXRoIHRo
ZQorICAgIC8vICAgIGRhbmdlciB6b25lIHdoYXRzb2V2ZXIuCisgICAgLy8KKyAgICAvLyAyKSBT
b21lIHdhbnRlZCByZWdpc3RlcnMgY291bGQgaGF2ZSB0byBiZSBsb2FkZWQgKHRoaXMgY291bGQK
KyAgICAvLyAgICBoYXBwZW4gZWl0aGVyIHdoZW4gbWFraW5nIGEgY2FsbCB0byBhIG5ldyBmdW5j
dGlvbiB3aXRoIGEKKyAgICAvLyAgICBsb3dlciBudW1iZXIgb2YgYXJndW1lbnRzIC0gc2luY2Ug
YWJvdmUgaGVyZSwgd2Ugb25seSBsb2FkCisgICAgLy8gICAgd2FudGVkIHJlZ2lzdGVycyB3aGVu
IHRoZXkgYXJlIGF0IHRoZSBkYW5nZXIgZnJvbnRpZXIgLSwgb3IKKyAgICAvLyAgICBpZiBhIHdh
bnRlZCByZWdpc3RlciBnb3Qgc3BpbGxlZCkuCisgICAgLy8KKyAgICAvLyAzKSBTb21lIHdhbnRl
ZCByZWdpc3RlcnMgY291bGQgaGF2ZSBiZWVuIGxvYWRlZCBpbiB0aGUgd3JvbmcKKyAgICAvLyAg
ICByZWdpc3RlcnMKKyAgICAvLworICAgIC8vIDQpIFdlIGhhdmUgdG8gdGFrZSBjYXJlIG9mIHNv
bWUgYm9va2tlZXBpbmcgLSBuYW1lbHksIHN0b3JpbmcKKyAgICAvLyAgICB0aGUgYXJndW1lbnQg
Y291bnQgYW5kIHVwZGF0aW5nIHRoZSBzdGFjayBwb2ludGVyLgorCisgICAgLy8gQXQgdGhpcyBw
b2ludCwgd2UgbXVzdCBoYXZlIGVub3VnaCByZWdpc3RlcnMgYXZhaWxhYmxlIGZvcgorICAgIC8v
IGhhbmRsaW5nIDEpLiBOb25lIG9mIHRoZSBsb2FkcyBjYW4gZmFpbCBiZWNhdXNlIHdlIGhhdmUg
YmVlbgorICAgIC8vIGVhZ2VybHkgZnJlZWluZyB1cCByZWdpc3RlcnMgaW4gYWxsIHRoZSBwcmV2
aW91cyBwaGFzZXMgLSBzbworICAgIC8vIHRoZSBvbmx5IHZhbHVlcyB0aGF0IGFyZSBpbiByZWdp
c3RlcnMgYXQgdGhpcyBwb2ludCBtdXN0IGhhdmUKKyAgICAvLyB3YW50ZWQgcmVnaXN0ZXJzLgor
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCIgIERhbmdlciB6b25lIGlzIGNsZWFy
LCBwZXJmb3JtaW5nIHJlbWFpbmluZyB3cml0ZXMuXG4iKTsKKyAgICBmb3IgKFZpcnR1YWxSZWdp
c3RlciByZWcgPSBmaXJzdE5ldygpOyByZWcgPD0gbGFzdE5ldygpOyByZWcgKz0gMSkgeworICAg
ICAgICBDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkgeyBnZXROZXcocmVnKSB9OworICAg
ICAgICBpZiAoIWNhY2hlZFJlY292ZXJ5KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgZW1pdExvYWQoKmNhY2hlZFJlY292ZXJ5KTsKKyAgICAgICAgZW1pdEJveCgqY2FjaGVkUmVj
b3ZlcnkpOworICAgICAgICBib29sIHdyaXRlc09LID0gdHJ5V3JpdGVzKCpjYWNoZWRSZWNvdmVy
eSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQod3JpdGVzT0ssIHdyaXRlc09LKTsKKyAgICB9CisK
KyAgICAvLyBIYW5kbGUgMikgYnkgbG9hZGluZyBhbGwgcmVnaXN0ZXJzLiBXZSBkb24ndCBoYXZl
IHRvIGRvIGFueQorICAgIC8vIHdyaXRlcywgc2luY2UgdGhleSBoYXZlIGJlZW4gdGFrZW4gY2Fy
ZSBvZiBhYm92ZS4KKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiICBMb2FkaW5n
IHdhbnRlZCByZWdpc3RlcnMgaW50byByZWdpc3RlcnNcbiIpOworICAgIGZvciAoUmVnIHJlZyA9
IFJlZzo6Zmlyc3QoKTsgcmVnIDw9IFJlZzo6bGFzdCgpOyByZWcgPSByZWcubmV4dCgpKSB7Cisg
ICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSB7IG1fbmV3UmVnaXN0ZXJzW3Jl
Z10gfTsKKyAgICAgICAgaWYgKCFjYWNoZWRSZWNvdmVyeSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgIGVtaXRMb2FkKCpjYWNoZWRSZWNvdmVyeSk7CisgICAgICAgIGVtaXRCb3go
KmNhY2hlZFJlY292ZXJ5KTsKKyAgICAgICAgQVNTRVJUKGNhY2hlZFJlY292ZXJ5LT50YXJnZXRz
KCkuaXNFbXB0eSgpKTsKKyAgICB9CisKKyAgICAvLyBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIHJl
YWQgZXZlcnl0aGluZyB3ZSBjYXJlZCBhYm91dCBmcm9tIHRoZQorICAgIC8vIHN0YWNrLCBhbmQg
d3JpdHRlbiBldmVyeXRoaW5nIHdlIGhhZCB0byB0byB0aGUgc3RhY2suCisgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgIGRhdGFMb2coIiAgQ2FsbGVlIGZyYW1lIGlzIGZ1bGx5IHNldCB1cFxuIik7
CisgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgZm9yIChWaXJ0dWFsUmVnaXN0
ZXIgcmVnID0gZmlyc3ROZXcoKTsgcmVnIDw9IGxhc3ROZXcoKTsgcmVnICs9IDEpCisgICAgICAg
ICAgICBBU1NFUlRfVU5VU0VEKHJlZywgIWdldE5ldyhyZWcpKTsKKworICAgICAgICBmb3IgKENh
Y2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSA6IG1fY2FjaGVkUmVjb3ZlcmllcykgeworICAg
ICAgICAgICAgQVNTRVJUX1VOVVNFRChjYWNoZWRSZWNvdmVyeSwgY2FjaGVkUmVjb3ZlcnktPnRh
cmdldHMoKS5pc0VtcHR5KCkpOworICAgICAgICAgICAgQVNTRVJUKCFjYWNoZWRSZWNvdmVyeS0+
cmVjb3ZlcnkoKS5pc0luSlNTdGFjaygpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFdl
IG5lZWQgdG8gaGFuZGxlIDQpIGZpcnN0IGJlY2F1c2UgaXQgaW1wbGllcyByZWxlYXNpbmcKKyAg
ICAvLyBtX25ld0ZyYW1lQmFzZSwgd2hpY2ggY291bGQgYmUgYSB3YW50ZWQgcmVnaXN0ZXIuCisg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIiAgICogU3RvcmluZyB0aGUgYXJndW1l
bnQgY291bnQgaW50byAiLCBWaXJ0dWFsUmVnaXN0ZXIgeyBKU1N0YWNrOjpBcmd1bWVudENvdW50
IH0sICJcbiIpOworICAgIG1faml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MigwKSwKKyAgICAgICAgYWRkcmVzc0Zvck5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyBKU1N0YWNrOjpB
cmd1bWVudENvdW50IH0pLndpdGhPZmZzZXQoVGFnT2Zmc2V0KSk7CisgICAgbV9qaXQuc3RvcmUz
MihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGFyZ0NvdW50KCkpLAorICAgICAgICBhZGRy
ZXNzRm9yTmV3KFZpcnR1YWxSZWdpc3RlciB7IEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgfSkud2l0
aE9mZnNldChQYXlsb2FkT2Zmc2V0KSk7CisKKyAgICBpZiAoIWlzU2xvd1BhdGgoKSkgeworICAg
ICAgICBBU1NFUlQobV9uZXdGcmFtZUJhc2UgIT0gTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIg
IFJlbGVhc2luZyB0aGUgbmV3IGZyYW1lIGJhc2UgcG9pbnRlclxuIik7CisgICAgICAgIG1faml0
Lm1vdmUobV9uZXdGcmFtZUJhc2UsIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisgICAgICAgIHJlbGVhc2VHUFIobV9uZXdGcmFtZUJhc2UpOworICAgIH0KKworICAgIC8v
IEZpbmFsbHkgd2UgaGFuZGxlIDMpCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2co
IiAgRW5zdXJpbmcgd2FudGVkIHJlZ2lzdGVycyBhcmUgaW4gdGhlIHJpZ2h0IHJlZ2lzdGVyXG4i
KTsKKyAgICBmb3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTsg
cmVnID0gcmVnLm5leHQoKSkgeworICAgICAgICBDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3Zl
cnkgeyBtX25ld1JlZ2lzdGVyc1tyZWddIH07CisgICAgICAgIGlmICghY2FjaGVkUmVjb3Zlcnkp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBlbWl0RGlzcGxhY2UoKmNhY2hlZFJl
Y292ZXJ5KTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNo
dWZmbGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxG
cmFtZVNodWZmbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MjggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDYWxsRnJhbWVT
aHVmZmxlcl9oCisjZGVmaW5lIENhbGxGcmFtZVNodWZmbGVyX2gKKworI2lmIEVOQUJMRShKSVQp
CisKKyNpbmNsdWRlICJDYWNoZWRSZWNvdmVyeS5oIgorI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZm
bGVEYXRhLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJSZWdpc3Rl
clNldC5oIgorI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ2FsbEZyYW1lU2h1ZmZsZXIgeworcHVi
bGljOgorICAgIENhbGxGcmFtZVNodWZmbGVyKENDYWxsSGVscGVycyYsIGNvbnN0IENhbGxGcmFt
ZVNodWZmbGVEYXRhJik7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKwor
ICAgIC8vIEFueSByZWdpc3RlciB0aGF0IGhhcyBiZWVuIGxvY2tlZCBvciBhY3F1aXJlZCBtdXN0
IGJlIHJlbGVhc2VkCisgICAgLy8gYmVmb3JlIGNhbGxpbmcgcHJlcGFyZUZvclRhaWxDYWxsKCkg
b3IgcHJlcGFyZUZvclNsb3dQYXRoKCkuCisgICAgdm9pZCBsb2NrR1BSKEdQUlJlZyBncHIpCisg
ICAgeworICAgICAgICBBU1NFUlQoIW1fbG9ja2VkUmVnaXN0ZXJzLmdldChncHIpKTsKKyAgICAg
ICAgbV9sb2NrZWRSZWdpc3RlcnMuc2V0KGdwcik7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICAgICAgZGF0YUxvZygiICAgKiBMb2NraW5nICIsIGdwciwgIlxuIik7CisgICAgfQorCisg
ICAgR1BSUmVnIGFjcXVpcmVHUFIoKQorICAgIHsKKyAgICAgICAgZW5zdXJlR1BSKCk7CisgICAg
ICAgIEdQUlJlZyBncHIgeyBnZXRGcmVlR1BSKCkgfTsKKyAgICAgICAgQVNTRVJUKCFtX3JlZ2lz
dGVyc1tncHJdKTsKKyAgICAgICAgbG9ja0dQUihncHIpOworICAgICAgICByZXR1cm4gZ3ByOwor
ICAgIH0KKworICAgIHZvaWQgcmVsZWFzZUdQUihHUFJSZWcgZ3ByKQorICAgIHsKKyAgICAgICAg
aWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgIGlmIChtX2xvY2tlZFJlZ2lzdGVycy5nZXQoZ3By
KSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAqIFJlbGVhc2luZyAiLCBncHIsICJcbiIp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICogIiwgZ3By
LCAiIHdhcyBub3QgbG9ja2VkXG4iKTsKKyAgICAgICAgfQorICAgICAgICBtX2xvY2tlZFJlZ2lz
dGVycy5jbGVhcihncHIpOworICAgIH0KKworICAgIC8vIFlvdSBjYW4gb25seSB0YWtlIGEgc25h
cHNob3QgaWYgdGhlIHJlY292ZXJ5IGhhcyBub3Qgc3RhcnRlZAorICAgIC8vIHlldC4gVGhlIG9u
bHkgb3BlcmF0aW9ucyB0aGF0IGFyZSB2YWxpZCBiZWZvcmUgdGFraW5nIGEKKyAgICAvLyBzbmFw
c2hvdCBhcmUgbG9ja0dQUigpLCBhY3F1aXJlR1BSKCkgYW5kIHJlbGVhc2VHUFIoKS4KKyAgICAv
LworICAgIC8vIExvY2tpbmcgc3RhdHVzIGlzICpOT1QqIHByZXNlcnZlZCBieSB0aGUgc25hcHNo
b3Q6IGl0IG9ubHkKKyAgICAvLyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB3aGVyZSB0aGUK
KyAgICAvLyBhcmd1bWVudHMvY2FsbGVlL2NhbGxlZS1zYXZlIHJlZ2lzdGVycyBhcmUgYnkgdGFr
aW5nIGludG8KKyAgICAvLyBhY2NvdW50IGFueSBzcGlsbGluZyB0aGF0IGFjcXVpcmVHUFIoKSBj
b3VsZCBoYXZlIGRvbmUuCisgICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgc25hcHNob3QoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzVW5kZWNpZGVkKCkpOworCisgICAgICAgIENhbGxG
cmFtZVNodWZmbGVEYXRhIGRhdGE7CisgICAgICAgIGRhdGEubnVtTG9jYWxzID0gbnVtTG9jYWxz
KCk7CisgICAgICAgIGRhdGEuY2FsbGVlID0gZ2V0TmV3KFZpcnR1YWxSZWdpc3RlciB7IEpTU3Rh
Y2s6OkNhbGxlZSB9KS0+cmVjb3ZlcnkoKTsKKyAgICAgICAgZGF0YS5hcmdzLnJlc2l6ZShhcmdD
b3VudCgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdDb3VudCgpOyArK2kp
CisgICAgICAgICAgICBkYXRhLmFyZ3NbaV0gPSBnZXROZXcodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoaSkpLT5yZWNvdmVyeSgpOworICAgICAgICBmb3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0
KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVnLm5leHQoKSkgeworICAgICAgICAgICAg
Q2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5IHsgbV9uZXdSZWdpc3RlcnNbcmVnXSB9Owor
ICAgICAgICAgICAgaWYgKCFjYWNoZWRSZWNvdmVyeSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBkYXRhLnJlZ2lzdGVyc1tyZWdd
ID0gY2FjaGVkUmVjb3ZlcnktPnJlY292ZXJ5KCk7CisjZWxzZQorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIHJldHVy
biBXVEY6Om1vdmUoZGF0YSk7CisgICAgfQorCisgICAgLy8gQXNrIHRoZSBzaHVmZmxlciB0byBw
dXQgdGhlIGNhbGxlZSBpbnRvIHNvbWUgcmVnaXN0ZXJzIG9uY2UgdGhlCisgICAgLy8gc2h1ZmZs
aW5nIGlzIGRvbmUuIFlvdSBzaG91bGQgY2FsbCB0aGlzIGJlZm9yZSBhbnkgb2YgdGhlCisgICAg
Ly8gcHJlcGFyZSgpIG1ldGhvZHMsIGFuZCBtdXN0IG5vdCB0YWtlIGEgc25hcHNob3QgYWZ0ZXJ3
YXJkcywgYXMKKyAgICAvLyB0aGlzIHdvdWxkIGNyYXNoIDMyYml0cyBwbGF0Zm9ybXMuCisgICAg
dm9pZCBzZXRDYWxsZWVKU1ZhbHVlUmVncyhKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncykKKyAgICB7
CisgICAgICAgIEFTU0VSVChpc1VuZGVjaWRlZCgpKTsKKyAgICAgICAgQVNTRVJUKCFnZXROZXco
anNWYWx1ZVJlZ3MpKTsKKyAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5IHsg
Z2V0TmV3KFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpDYWxsZWUpKSB9OworICAgICAgICBBU1NF
UlQoY2FjaGVkUmVjb3ZlcnkpOworICAgICAgICBhZGROZXcoanNWYWx1ZVJlZ3MsIGNhY2hlZFJl
Y292ZXJ5LT5yZWNvdmVyeSgpKTsKKyAgICB9CisKKyAgICAvLyBBc2sgdGhlIHN1aGZmbGVyIHRv
IGFzc3VtZSB0aGUgY2FsbGVlIGhhcyBhbHJlYWR5IGJlIGNoZWNrZWQgdG8KKyAgICAvLyBiZSBh
IGNlbGwuIFRoaXMgaXMgYSBuby1vcCBvbiA2NGJpdCBwbGF0Zm9ybXMsIGJ1dCBhbGxvd3MgdG8K
KyAgICAvLyBmcmVlIHVwIGEgR1BSIG9uIDMyYml0IHBsYXRmb3Jtcy4KKyAgICAvLyBZb3Ugb2J2
aW91c2x5IG11c3QgaGF2ZSBlbnN1cmVkIHRoYXQgdGhpcyBpcyB0aGUgY2FzZSBiZWZvcmUKKyAg
ICAvLyBydW5uaW5nIGFueSBvZiB0aGUgcHJlcGFyZSBtZXRob2RzLgorICAgIHZvaWQgYXNzdW1l
Q2FsbGVlSXNDZWxsKCkKKyAgICB7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgQ2Fj
aGVkUmVjb3ZlcnkmIGNhbGxlZUNhY2hlZFJlY292ZXJ5IHsgKmdldE5ldyhWaXJ0dWFsUmVnaXN0
ZXIoSlNTdGFjazo6Q2FsbGVlKSkgfTsKKyAgICAgICAgc3dpdGNoIChjYWxsZWVDYWNoZWRSZWNv
dmVyeS5yZWNvdmVyeSgpLnRlY2huaXF1ZSgpKSB7CisgICAgICAgIGNhc2UgSW5QYWlyOgorICAg
ICAgICAgICAgdXBkYXRlUmVjb3ZlcnkoCisgICAgICAgICAgICAgICAgY2FsbGVlQ2FjaGVkUmVj
b3ZlcnksCisgICAgICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIoCisgICAgICAgICAg
ICAgICAgICAgIGNhbGxlZUNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkucGF5bG9hZEdQUigpLAor
ICAgICAgICAgICAgICAgICAgICBEYXRhRm9ybWF0Q2VsbCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICAgICAgdXBkYXRlUmVj
b3ZlcnkoCisgICAgICAgICAgICAgICAgY2FsbGVlQ2FjaGVkUmVjb3ZlcnksCisgICAgICAgICAg
ICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAorICAgICAgICAgICAgICAg
ICAgICBjYWxsZWVDYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLnZpcnR1YWxSZWdpc3RlcigpLAor
ICAgICAgICAgICAgICAgICAgICBEYXRhRm9ybWF0Q2VsbCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgSW5GUFI6CisgICAgICAgIGNhc2UgVW5ib3hlZENlbGxJbkdQUjoKKyAg
ICAgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ29uc3RhbnQ6CisgICAgICAgICAgICBBU1NFUlQoY2FsbGVlQ2FjaGVkUmVj
b3ZlcnkucmVjb3ZlcnkoKS5jb25zdGFudCgpLmlzQ2VsbCgpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisKKyAg
ICAvLyBUaGlzIHdpbGwgZW1pdCBjb2RlIHRvIGJ1aWxkIHRoZSBuZXcgZnJhbWUgb3ZlciB0aGUg
b2xkIG9uZS4KKyAgICB2b2lkIHByZXBhcmVGb3JUYWlsQ2FsbCgpOworCisgICAgLy8gVGhpcyB3
aWxsIGVtaXQgY29kZSB0byBidWlsZCB0aGUgbmV3IGZyYW1lIGFzIGlmIHBlcmZvcm1pbmcgYQor
ICAgIC8vIHJlZ3VsYXIgY2FsbC4gSG93ZXZlciwgdGhlIGNhbGxlZSBzYXZlIHJlZ2lzdGVycyB3
aWxsIGJlCisgICAgLy8gcmVzdG9yZWQsIGFuZCBhbnkgbG9jYWxzIChub3QgdGhlIGhlYWRlciBv
ciBhcmd1bWVudHMpIG9mIHRoZQorICAgIC8vIGN1cnJlbnQgZnJhbWUgY2FuIGJlIG92ZXJ3cml0
dGVuLgorICAgIC8vCisgICAgLy8gQSBmcmFtZSBidWlsdCB1c2luZyBwcmVwYXJlRm9yU2xvd1Bh
dGgoKSBzaG91bGQgYmUgdXNlZCBlaXRoZXIKKyAgICAvLyB0byB0aHJvdyBhbiBleGNlcHRpb24g
aW4sIG9yIGRlc3Ryb3llZCB1c2luZworICAgIC8vIENDYWxsSGVscGVyczo6cHJlcGFyZUZvclRh
aWxDYWxsU2xvdygpIGZvbGxvd2VkIGJ5IGEgdGFpbCBjYWxsLgorICAgIHZvaWQgcHJlcGFyZUZv
clNsb3dQYXRoKCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9
IGZhbHNlOworCisgICAgQ0NhbGxIZWxwZXJzJiBtX2ppdDsKKworICAgIHZvaWQgcHJlcGFyZUFu
eSgpOworCisgICAgdm9pZCBzcGlsbChDYWNoZWRSZWNvdmVyeSYpOworCisgICAgLy8gImJveCIg
aXMgYXJndWFibHkgYSBiYWQgbmFtZSBoZXJlLiBUaGUgbWVhbmluZyBpcyB0aGF0IGFmdGVyCisg
ICAgLy8gY2FsbGluZyBlbWl0Qm94KCksIHlvdXIgZW5zdXJlIHRoYXQgc3Vic2VxdWVudGx5IGNh
bGxpbmcKKyAgICAvLyBlbWl0U3RvcmUoKSB3aWxsIGJlIGFibGUgdG8gc3RvcmUgdGhlIHZhbHVl
IHdpdGhvdXQgYWRkaXRpb25hbAorICAgIC8vIHRyYW5zZm9ybWF0aW9uLiBJbiBwYXJ0aWN1bGFy
LCB0aGlzIGlzIGEgbm8tb3AgZm9yIGNvbnN0YW50cywKKyAgICAvLyBhbmQgaXMgYSBjb21wbGV0
ZSBuby1vcCBvbiAzMmJpdHMgc2luY2UgYW55IHVuYm94ZWQgdmFsdWUgY2FuCisgICAgLy8gc3Rp
bGwgYmUgc3RvcmVkIGJ5IHN0b3JpbmcgdGhlIHBheWxvYWQgYW5kIGEgc3RhdGljYWxseSBrbm93
bgorICAgIC8vIHRhZy4KKyAgICB2b2lkIGVtaXRCb3goQ2FjaGVkUmVjb3ZlcnkmKTsKKworICAg
IGJvb2wgY2FuQm94KENhY2hlZFJlY292ZXJ5JiBjYWNoZWRSZWNvdmVyeSkKKyAgICB7CisgICAg
ICAgIGlmIChjYWNoZWRSZWNvdmVyeS5ib3hpbmdSZXF1aXJlc0dQUigpICYmIGdldEZyZWVHUFIo
KSA9PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
IGlmIChjYWNoZWRSZWNvdmVyeS5ib3hpbmdSZXF1aXJlc0ZQUigpICYmIGdldEZyZWVGUFIoKSA9
PSBJbnZhbGlkRlBSUmVnKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIHZvaWQgZW5zdXJlQm94KENhY2hlZFJlY292ZXJ5JiBj
YWNoZWRSZWNvdmVyeSkKKyAgICB7CisgICAgICAgIGlmIChjYW5Cb3goY2FjaGVkUmVjb3Zlcnkp
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS5ib3hp
bmdSZXF1aXJlc0dQUigpKQorICAgICAgICAgICAgZW5zdXJlR1BSKCk7CisKKyAgICAgICAgaWYg
KGNhY2hlZFJlY292ZXJ5LmJveGluZ1JlcXVpcmVzRlBSKCkpCisgICAgICAgICAgICBlbnN1cmVG
UFIoKTsKKyAgICB9CisKKyAgICB2b2lkIGVtaXRMb2FkKENhY2hlZFJlY292ZXJ5Jik7CisKKyAg
ICBib29sIGNhbkxvYWQoQ2FjaGVkUmVjb3ZlcnkmKTsKKworICAgIHZvaWQgZW5zdXJlTG9hZChD
YWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3ZlcnkpCisgICAgeworICAgICAgICBpZiAoY2FuTG9h
ZChjYWNoZWRSZWNvdmVyeSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQVNTRVJU
KGNhY2hlZFJlY292ZXJ5LmxvYWRzSW50b0dQUigpIHx8IGNhY2hlZFJlY292ZXJ5LmxvYWRzSW50
b0ZQUigpKTsKKworICAgICAgICBpZiAoY2FjaGVkUmVjb3ZlcnkubG9hZHNJbnRvRlBSKCkpIHsK
KyAgICAgICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS5sb2Fkc0ludG9HUFIoKSkKKyAgICAgICAg
ICAgICAgICBlbnN1cmVSZWdpc3RlcigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIGVuc3VyZUZQUigpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGVuc3VyZUdQUigp
OworICAgIH0KKworICAgIGJvb2wgY2FuTG9hZEFuZEJveChDYWNoZWRSZWNvdmVyeSYgY2FjaGVk
UmVjb3ZlcnkpCisgICAgeworICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGludGVyZmVyaW5nIGxv
YWRzICYgYm94ZXMKKyAgICAgICAgQVNTRVJUKCFjYWNoZWRSZWNvdmVyeS5sb2Fkc0ludG9GUFIo
KSB8fCAhY2FjaGVkUmVjb3ZlcnkuYm94aW5nUmVxdWlyZXNGUFIoKSk7CisgICAgICAgIEFTU0VS
VCghY2FjaGVkUmVjb3ZlcnkubG9hZHNJbnRvR1BSKCkgfHwgIWNhY2hlZFJlY292ZXJ5LmJveGlu
Z1JlcXVpcmVzR1BSKCkpOworCisgICAgICAgIHJldHVybiBjYW5Mb2FkKGNhY2hlZFJlY292ZXJ5
KSAmJiBjYW5Cb3goY2FjaGVkUmVjb3ZlcnkpOworICAgIH0KKworICAgIERhdGFGb3JtYXQgZW1p
dFN0b3JlKENhY2hlZFJlY292ZXJ5JiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MpOworCisgICAg
dm9pZCBlbWl0RGlzcGxhY2UoQ2FjaGVkUmVjb3ZlcnkmKTsKKworICAgIHZvaWQgZW1pdERlbHRh
Q2hlY2soKTsKKworICAgIEJhZzxDYWNoZWRSZWNvdmVyeT4gbV9jYWNoZWRSZWNvdmVyaWVzOwor
CisgICAgdm9pZCB1cGRhdGVSZWNvdmVyeShDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3Zlcnks
IFZhbHVlUmVjb3ZlcnkgcmVjb3ZlcnkpCisgICAgeworICAgICAgICBjbGVhckNhY2hlZFJlY292
ZXJ5KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkpOworICAgICAgICBjYWNoZWRSZWNvdmVyeS5z
ZXRSZWNvdmVyeShyZWNvdmVyeSk7CisgICAgICAgIHNldENhY2hlZFJlY292ZXJ5KHJlY292ZXJ5
LCAmY2FjaGVkUmVjb3ZlcnkpOworICAgIH0KKworICAgIENhY2hlZFJlY292ZXJ5KiBnZXRDYWNo
ZWRSZWNvdmVyeShWYWx1ZVJlY292ZXJ5KTsKKworICAgIENhY2hlZFJlY292ZXJ5KiBzZXRDYWNo
ZWRSZWNvdmVyeShWYWx1ZVJlY292ZXJ5LCBDYWNoZWRSZWNvdmVyeSopOworCisgICAgdm9pZCBj
bGVhckNhY2hlZFJlY292ZXJ5KFZhbHVlUmVjb3ZlcnkgcmVjb3ZlcnkpCisgICAgeworICAgICAg
ICBpZiAoIXJlY292ZXJ5LmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHNldENhY2hlZFJlY292
ZXJ5KHJlY292ZXJ5LCBudWxscHRyKTsKKyAgICB9CisKKyAgICBDYWNoZWRSZWNvdmVyeSogYWRk
Q2FjaGVkUmVjb3ZlcnkoVmFsdWVSZWNvdmVyeSByZWNvdmVyeSkKKyAgICB7CisgICAgICAgIGlm
IChyZWNvdmVyeS5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICByZXR1cm4gbV9jYWNoZWRSZWNv
dmVyaWVzLmFkZChyZWNvdmVyeSk7CisgICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNv
dmVyeSA9IGdldENhY2hlZFJlY292ZXJ5KHJlY292ZXJ5KTsKKyAgICAgICAgaWYgKCFjYWNoZWRS
ZWNvdmVyeSkKKyAgICAgICAgICAgIHJldHVybiBzZXRDYWNoZWRSZWNvdmVyeShyZWNvdmVyeSwg
bV9jYWNoZWRSZWNvdmVyaWVzLmFkZChyZWNvdmVyeSkpOworICAgICAgICByZXR1cm4gY2FjaGVk
UmVjb3Zlcnk7CisgICAgfQorCisgICAgLy8gVGhpcyBpcyB0aGUgY3VycmVudCByZWNvdmVyaWVz
IHByZXNlbnQgaW4gdGhlIG9sZCBmcmFtZSdzCisgICAgLy8gc2xvdHMuIEEgbnVsbCBDYWNoZWRS
ZWNvdmVyeSBtZWFucyB3ZSBjYW4gdHJhc2ggdGhlIGN1cnJlbnQKKyAgICAvLyB2YWx1ZSBhcyB3
ZSBkb24ndCBjYXJlIGFib3V0IGl0LgorICAgIFZlY3RvcjxDYWNoZWRSZWNvdmVyeSo+IG1fb2xk
RnJhbWU7CisKKyAgICBpbnQgbnVtTG9jYWxzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX29sZEZyYW1lLnNpemUoKSAtIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplOworICAg
IH0KKworICAgIENhY2hlZFJlY292ZXJ5KiBnZXRPbGQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29sZEZyYW1lW0pTU3RhY2s6OkNhbGxlckZyYW1l
QW5kUENTaXplIC0gcmVnLm9mZnNldCgpIC0gMV07CisgICAgfQorCisgICAgdm9pZCBzZXRPbGQo
VmlydHVhbFJlZ2lzdGVyIHJlZywgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5KQorICAg
IHsKKyAgICAgICAgbV9vbGRGcmFtZVtKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSAtIHJl
Zy5vZmZzZXQoKSAtIDFdID0gY2FjaGVkUmVjb3Zlcnk7CisgICAgfQorCisgICAgVmlydHVhbFJl
Z2lzdGVyIGZpcnN0T2xkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBWaXJ0dWFsUmVn
aXN0ZXIgeyBzdGF0aWNfY2FzdDxpbnQ+KC1udW1Mb2NhbHMoKSkgfTsKKyAgICB9CisKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgbGFzdE9sZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyIHsgSlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1NpemUgLSAxIH07CisgICAg
fQorCisgICAgYm9vbCBpc1ZhbGlkT2xkKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gcmVnID49IGZpcnN0T2xkKCkgJiYgcmVnIDw9IGxhc3RPbGQoKTsK
KyAgICB9CisKKyAgICAvLyBUaGlzIHN0b3JlcywgZm9yIGVhY2ggc2xvdCBpbiB0aGUgbmV3IGZy
YW1lLCBpbmZvcm1hdGlvbiBhYm91dAorICAgIC8vIHRoZSByZWNvdmVyeSBmb3IgdGhlIHZhbHVl
IHRoYXQgc2hvdWxkIGV2ZW50dWFsbHkgZ28gaW50byB0aGF0CisgICAgLy8gc2xvdC4KKyAgICAv
LworICAgIC8vIE9uY2UgdGhlIHNsb3QgaGFzIGJlZW4gd3JpdHRlbiwgdGhlIGNvcnJlc3BvbmRp
bmcgZW50cnkgaW4KKyAgICAvLyBtX25ld0ZyYW1lIHdpbGwgYmUgZW1wdHkuCisgICAgVmVjdG9y
PENhY2hlZFJlY292ZXJ5Kj4gbV9uZXdGcmFtZTsKKworICAgIHNpemVfdCBhcmdDb3VudCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9uZXdGcmFtZS5zaXplKCkgLSBKU1N0YWNrOjpD
YWxsRnJhbWVIZWFkZXJTaXplOworICAgIH0KKworICAgIENhY2hlZFJlY292ZXJ5KiBnZXROZXco
VmlydHVhbFJlZ2lzdGVyIG5ld1JlZ2lzdGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fbmV3RnJhbWVbbmV3UmVnaXN0ZXIub2Zmc2V0KCldOworICAgIH0KKworICAgIHZvaWQgc2V0
TmV3KFZpcnR1YWxSZWdpc3RlciBuZXdSZWdpc3RlciwgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJl
Y292ZXJ5KQorICAgIHsKKyAgICAgICAgbV9uZXdGcmFtZVtuZXdSZWdpc3Rlci5vZmZzZXQoKV0g
PSBjYWNoZWRSZWNvdmVyeTsKKyAgICB9CisKKyAgICB2b2lkIGFkZE5ldyhWaXJ0dWFsUmVnaXN0
ZXIgbmV3UmVnaXN0ZXIsIFZhbHVlUmVjb3ZlcnkgcmVjb3ZlcnkpCisgICAgeworICAgICAgICBD
YWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkgPSBhZGRDYWNoZWRSZWNvdmVyeShyZWNvdmVy
eSk7CisgICAgICAgIGNhY2hlZFJlY292ZXJ5LT5hZGRUYXJnZXQobmV3UmVnaXN0ZXIpOworICAg
ICAgICBzZXROZXcobmV3UmVnaXN0ZXIsIGNhY2hlZFJlY292ZXJ5KTsKKyAgICB9CisKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZmlyc3ROZXcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFZp
cnR1YWxSZWdpc3RlciB7IDAgfTsKKyAgICB9CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGFzdE5l
dygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyIHsgc3RhdGlj
X2Nhc3Q8aW50PihtX25ld0ZyYW1lLnNpemUoKSkgLSAxIH07CisgICAgfQorCisgICAgYm9vbCBp
c1ZhbGlkTmV3KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gcmVnID49IGZpcnN0TmV3KCkgJiYgcmVnIDw9IGxhc3ROZXcoKTsKKyAgICB9CisKKworICAg
IGludCBtX2FsaWduZWRPbGRGcmFtZVNpemU7CisgICAgaW50IG1fYWxpZ25lZE5ld0ZyYW1lU2l6
ZTsKKworICAgIC8vIFRoaXMgaXMgdGhlIGRpc3RhbmNlLCBpbiBzbG90cywgYmV0d2VlbiB0aGUg
YmFzZSBvZiB0aGUgbmV3CisgICAgLy8gZnJhbWUgYW5kIHRoZSBiYXNlIG9mIHRoZSBvbGQgZnJh
bWUuIEl0IGNvdWxkIGJlIG5lZ2F0aXZlIHdoZW4KKyAgICAvLyBwcmVwYXJpbmcgZm9yIGEgdGFp
bCBjYWxsIHRvIGEgZnVuY3Rpb24gd2l0aCBzbWFsbGVyIGFyZ3VtZW50CisgICAgLy8gY291bnQu
CisgICAgLy8KKyAgICAvLyBXZSB3aWxsIG92ZXJ3cml0ZSB0aGlzIGFwcHJvcHJpYXRlbHkgZm9y
IHNsb3cgcGF0aCBjYWxscywgYnV0CisgICAgLy8gd2UgaW5pdGlhbGl6ZSBpdCBhcyBpZiBkb2lu
ZyBhIGZhc3QgcGF0aCBmb3IgdGhlIHNwaWxscyB3ZQorICAgIC8vIGNvdWxkIGRvIHdoaWxlIHVu
ZGVjaWRlZCAodHlwaWNhbGx5IHdoaWxlIGNhbGxpbmcgYWNxdWlyZUdQUigpCisgICAgLy8gZm9y
IGEgcG9seW1vcnBoaWMgY2FsbCkuCisgICAgaW50IG1fZnJhbWVEZWx0YTsKKworICAgIFZpcnR1
YWxSZWdpc3RlciBuZXdBc09sZChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHJlZyAtIG1fZnJhbWVEZWx0YTsKKyAgICB9CisKKyAgICAvLyBUaGlzIHN0
b3JlcyB0aGUgc2V0IG9mIGxvY2tlZCByZWdpc3RlcnMsIGkuZS4gcmVnaXN0ZXJzIGZvcgorICAg
IC8vIHdoaWNoIHdlIGhhdmUgYW4gaW1wbGljaXQgcmVxdWlyZW1lbnQgdGhhdCB0aGV5IGFyZSBu
b3QgY2hhbmdlZC4KKyAgICAvLworICAgIC8vIFRoaXMgd2lsbCB1c3VhbGx5IGNvbnRhaW5zIHRo
ZSBsaW5rIHJlZ2lzdGVyIG9uIGFyY2hpdGVjdHVyZXMKKyAgICAvLyB0aGF0IGhhdmUgb25lLCBh
bnkgc2NyYXRjaCByZWdpc3RlciB1c2VkIGJ5IHRoZSBtYWNybyBhc3NlbWJsZXIKKyAgICAvLyAo
ZS5nLiByMTEgb24gWDg2XzY0KSwgYXMgd2VsbCBhcyBhbnkgcmVnaXN0ZXIgdGhhdCB3ZSB1c2Ug
Zm9yCisgICAgLy8gYWRkcmVzc2luZyAoc2VlIG1fb2xkRnJhbWVCYXNlIGFuZCBtX25ld0ZyYW1l
QmFzZSkuCisgICAgLy8KKyAgICAvLyBXZSBhbHNvIHVzZSB0aGlzIHRvIGxvY2sgcmVnaXN0ZXJz
IHRlbXBvcmFyaWx5LCBmb3IgaW5zdGFuY2UgdG8KKyAgICAvLyBlbnN1cmUgdGhhdCB3ZSBoYXZl
IGF0IGxlYXN0IDIgYXZhaWxhYmxlIHJlZ2lzdGVycyBmb3IgbG9hZGluZworICAgIC8vIGEgcGFp
ciBvbiAzMmJpdHMuCisgICAgUmVnaXN0ZXJTZXQgbV9sb2NrZWRSZWdpc3RlcnM7CisKKyAgICAv
LyBUaGlzIHN0b3JlcyB0aGUgY3VycmVudCByZWNvdmVyaWVzIHByZXNlbnQgaW4gcmVnaXN0ZXJz
LiBBIG51bGwKKyAgICAvLyBDYWNoZWRSZWNvdmVyeSBtZWFucyB3ZSBjYW4gdHJhc2ggdGhlIGN1
cnJlbnQgdmFsdWUgYXMgd2UgZG9uJ3QKKyAgICAvLyBjYXJlIGFib3V0IGl0LiAKKyAgICBSZWdp
c3Rlck1hcDxDYWNoZWRSZWNvdmVyeSo+IG1fcmVnaXN0ZXJzOworCisgICAgLy8gVGhpcyBzdG9y
ZXMsIGZvciBlYWNoIHJlZ2lzdGVyLCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVjb3ZlcnkKKyAg
ICAvLyBmb3IgdGhlIHZhbHVlIHRoYXQgc2hvdWxkIGV2ZW50dWFsbHkgZ28gaW50byB0aGF0IHJl
Z2lzdGVyLiBUaGUKKyAgICAvLyBvbmx5IHJlZ2lzdGVycyB0aGF0IGhhdmUgYSB0YXJnZXQgcmVj
b3Zlcnkgd2lsbCBiZSBjYWxsZWUtc2F2ZQorICAgIC8vIHJlZ2lzdGVycywgYXMgd2VsbCBhcyBw
b3NzaWJseSBvbmUgSlNWYWx1ZVJlZ3MgZm9yIGhvbGRpbmcgdGhlCisgICAgLy8gY2FsbGVlLgor
ICAgIC8vCisgICAgLy8gT25jZSB0aGUgY29ycmVjdCB2YWx1ZSBoYXMgYmVlbiBwdXQgaW50byB0
aGUgcmVnaXN0ZXJzLCBhbmQKKyAgICAvLyBjb250cmFyeSB0byB3aGF0IHdlIGRvIHdpdGggbV9u
ZXdGcmFtZSwgd2Uga2VlcCB0aGUgZW50cnkgaW4KKyAgICAvLyBtX25ld1JlZ2lzdGVycyB0byBz
aW1wbGlmeSBzcGlsbGluZy4KKyAgICBSZWdpc3Rlck1hcDxDYWNoZWRSZWNvdmVyeSo+IG1fbmV3
UmVnaXN0ZXJzOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tGdW5jdG9yPgorICAgIFJl
ZyBnZXRGcmVlUmVnaXN0ZXIoY29uc3QgQ2hlY2tGdW5jdG9yJiBjaGVjaykgY29uc3QKKyAgICB7
CisgICAgICAgIFJlZyBub25UZW1wIHsgfTsKKyAgICAgICAgZm9yIChSZWcgcmVnID0gUmVnOjpm
aXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKKyAgICAgICAg
ICAgIGlmIChtX2xvY2tlZFJlZ2lzdGVycy5nZXQocmVnKSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICAgICAgaWYgKCFjaGVjayhyZWcpKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICBpZiAoIW1fcmVnaXN0ZXJzW3JlZ10pIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIW1fbmV3UmVnaXN0ZXJzW3JlZ10pCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiByZWc7CisgICAgICAgICAgICAgICAgaWYgKCFub25UZW1wKQorICAgICAgICAgICAgICAg
ICAgICBub25UZW1wID0gcmVnOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJl
dHVybiBub25UZW1wOworICAgIH0KKworICAgIEdQUlJlZyBnZXRGcmVlR1BSKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIFJlZyBmcmVlR1BSIHsgZ2V0RnJlZVJlZ2lzdGVyKFtdIChSZWcgcmVnKSB7
IHJldHVybiByZWcuaXNHUFIoKTsgfSkgfTsKKyAgICAgICAgaWYgKCFmcmVlR1BSKQorICAgICAg
ICAgICAgcmV0dXJuIEludmFsaWRHUFJSZWc7CisgICAgICAgIHJldHVybiBmcmVlR1BSLmdwcigp
OworICAgIH0KKworICAgIEZQUlJlZyBnZXRGcmVlRlBSKCkgY29uc3QKKyAgICB7CisgICAgICAg
IFJlZyBmcmVlRlBSIHsgZ2V0RnJlZVJlZ2lzdGVyKFtdIChSZWcgcmVnKSB7IHJldHVybiByZWcu
aXNGUFIoKTsgfSkgfTsKKyAgICAgICAgaWYgKCFmcmVlRlBSKQorICAgICAgICAgICAgcmV0dXJu
IEludmFsaWRGUFJSZWc7CisgICAgICAgIHJldHVybiBmcmVlRlBSLmZwcigpOworICAgIH0KKwor
ICAgIGJvb2wgaGFzRnJlZVJlZ2lzdGVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxib29sPihnZXRGcmVlUmVnaXN0ZXIoW10gKFJlZykgeyByZXR1cm4gdHJ1ZTsg
fSkpOworICAgIH0KKworICAgIC8vIFRoaXMgZnJlZXMgdXAgYSByZWdpc3RlciBzYXRpc2Z5aW5n
IHRoZSBjaGVjayBmdW5jdG9yICh0aGlzCisgICAgLy8gZnVuY3RvciBjb3VsZCB0aGVvcmV0aWNh
bGx5IGhhdmUgYW55IGtpbmQgb2YgbG9naWMsIGJ1dCBpdCBtdXN0CisgICAgLy8gZW5zdXJlIHRo
YXQgaXQgd2lsbCBvbmx5IHJldHVybiB0cnVlIGZvciByZWdpc3RlcnMgLSBzcGlsbAorICAgIC8v
IGFzc3VtZXMgYW5kIGFzc2VydHMgdGhhdCBpdCBpcyBwYXNzZWQgYSBjYWNoZWRSZWNvdmVyeSBz
dG9yZWQgaW4gYQorICAgIC8vIHJlZ2lzdGVyKS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVj
a0Z1bmN0b3I+CisgICAgdm9pZCBlbnN1cmVSZWdpc3Rlcihjb25zdCBDaGVja0Z1bmN0b3ImIGNo
ZWNrKQorICAgIHsKKyAgICAgICAgLy8gSWYgd2UgY2FuIHNwaWxsIGEgY2FsbGVlLXNhdmUsIHRo
YXQncyBiZXN0LCBiZWNhdXNlIGl0IHdpbGwKKyAgICAgICAgLy8gZnJlZSB1cCBhIHJlZ2lzdGVy
IHRoYXQgd291bGQgb3RoZXJ3aXNlIGJlZW4gdGFrZW4gZm9yIHRoZQorICAgICAgICAvLyBsb25n
ZXN0IGFtb3VudCBvZiB0aW1lLgorICAgICAgICAvLworICAgICAgICAvLyBXZSBjb3VsZCB0cnkg
dG8gYmlhcyB0b3dhcmRzIHRob3NlIHRoYXQgYXJlIG5vdCBpbiB0aGVpcgorICAgICAgICAvLyB0
YXJnZXQgcmVnaXN0ZXJzIHlldCwgYnV0IHRoZSBnYWluIGlzIHByb2JhYmx5IHN1cGVyCisgICAg
ICAgIC8vIHNtYWxsLiBVbmxlc3MgeW91IGhhdmUgYSBodWdlIG51bWJlciBvZiBhcmd1bWVudCAo
YXQgbGVhc3QKKyAgICAgICAgLy8gYXJvdW5kIHR3aWNlIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxl
IHJlZ2lzdGVycyBvbiB5b3VyCisgICAgICAgIC8vIGFyY2hpdGVjdHVyZSksIG5vIHNwaWxsaW5n
IGlzIGdvaW5nIHRvIHRha2UgcGxhY2UgYW55d2F5cy4KKyAgICAgICAgZm9yIChSZWcgcmVnID0g
UmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKKyAg
ICAgICAgICAgIGlmIChtX2xvY2tlZFJlZ2lzdGVycy5nZXQocmVnKSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5
IHsgbV9uZXdSZWdpc3RlcnNbcmVnXSB9OworICAgICAgICAgICAgaWYgKCFjYWNoZWRSZWNvdmVy
eSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKGNoZWNrKCpj
YWNoZWRSZWNvdmVyeSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiICAiLCBjYWNoZWRSZWNvdmVyeS0+cmVjb3ZlcnkoKSwgIiBs
b29rcyBsaWtlIGEgZ29vZCBzcGlsbCBjYW5kaWRhdGVcbiIpOworICAgICAgICAgICAgICAgIHNw
aWxsKCpjYWNoZWRSZWNvdmVyeSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgdXNlIHRoZSBjYWNoZWRSZWNvdmVyeSBh
c3NvY2lhdGVkIHdpdGggdGhlIGZpcnN0IG5ldyBzbG90IHdlCisgICAgICAgIC8vIGNhbiwgYmVj
YXVzZSB0aGF0IGlzIHRoZSBvbmUgZm9yIHdoaWNoIGEgd3JpdGUgd2lsbCBiZQorICAgICAgICAv
LyBwb3NzaWJsZSB0aGUgbGF0ZXN0LCBpLmUuIHRoYXQgaXMgdGhlIG9uZSB0aGF0IHdlIHdvdWxk
CisgICAgICAgIC8vIGhhdmUgaGFkIHRvIHJldGFpbiBpbiByZWdpc3RlcnMgZm9yIHRoZSBsb25n
ZXN0LgorICAgICAgICBmb3IgKFZpcnR1YWxSZWdpc3RlciByZWcgPSBmaXJzdE5ldygpOyByZWcg
PD0gbGFzdE5ldygpOyByZWcgKz0gMSkgeworICAgICAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNh
Y2hlZFJlY292ZXJ5IHsgZ2V0TmV3KHJlZykgfTsKKyAgICAgICAgICAgIGlmICghY2FjaGVkUmVj
b3ZlcnkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmIChjaGVj
aygqY2FjaGVkUmVjb3ZlcnkpKSB7CisgICAgICAgICAgICAgICAgc3BpbGwoKmNhY2hlZFJlY292
ZXJ5KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHZv
aWQgZW5zdXJlUmVnaXN0ZXIoKQorICAgIHsKKyAgICAgICAgaWYgKGhhc0ZyZWVSZWdpc3Rlcigp
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAg
ICAgZGF0YUxvZygiICBGaW5kaW5nIGEgcmVnaXN0ZXIgdG8gc3BpbGxcbiIpOworICAgICAgICBl
bnN1cmVSZWdpc3RlcigKKyAgICAgICAgICAgIFt0aGlzXSAoY29uc3QgQ2FjaGVkUmVjb3Zlcnkm
IGNhY2hlZFJlY292ZXJ5KSB7CisgICAgICAgICAgICAgICAgaWYgKGNhY2hlZFJlY292ZXJ5LnJl
Y292ZXJ5KCkuaXNJbkdQUigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIW1fbG9ja2Vk
UmVnaXN0ZXJzLmdldChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpKTsKKyAgICAgICAg
ICAgICAgICBpZiAoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5pc0luRlBSKCkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAhbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KGNhY2hlZFJlY292ZXJ5
LnJlY292ZXJ5KCkuZnByKCkpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgICAgICAg
ICAgaWYgKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkudGVjaG5pcXVlKCkgPT0gSW5QYWlyKSB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAhbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KGNhY2hl
ZFJlY292ZXJ5LnJlY292ZXJ5KCkudGFnR1BSKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAm
JiAhbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkucGF5bG9h
ZEdQUigpKTsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9KTsKKyAgICB9CisKKyAgICB2b2lkIGVuc3VyZUdQUigp
CisgICAgeworICAgICAgICBpZiAoZ2V0RnJlZUdQUigpICE9IEludmFsaWRHUFJSZWcpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRh
TG9nKCIgIEZpbmRpbmcgYSBHUFIgdG8gc3BpbGxcbiIpOworICAgICAgICBlbnN1cmVSZWdpc3Rl
cigKKyAgICAgICAgICAgIFt0aGlzXSAoY29uc3QgQ2FjaGVkUmVjb3ZlcnkmIGNhY2hlZFJlY292
ZXJ5KSB7CisgICAgICAgICAgICAgICAgaWYgKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuaXNJ
bkdQUigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIW1fbG9ja2VkUmVnaXN0ZXJzLmdl
dChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0
KQorICAgICAgICAgICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLnRlY2huaXF1
ZSgpID09IEluUGFpcikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gIW1fbG9ja2VkUmVn
aXN0ZXJzLmdldChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLnRhZ0dQUigpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgJiYgIW1fbG9ja2VkUmVnaXN0ZXJzLmdldChjYWNoZWRSZWNvdmVyeS5y
ZWNvdmVyeSgpLnBheWxvYWRHUFIoKSk7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAg
dm9pZCBlbnN1cmVGUFIoKQorICAgIHsKKyAgICAgICAgaWYgKGdldEZyZWVGUFIoKSAhPSBJbnZh
bGlkRlBSUmVnKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgZGF0YUxvZygiICBGaW5kaW5nIGFuIEZQUiB0byBzcGlsbFxuIik7CisgICAg
ICAgIGVuc3VyZVJlZ2lzdGVyKAorICAgICAgICAgICAgW3RoaXNdIChjb25zdCBDYWNoZWRSZWNv
dmVyeSYgY2FjaGVkUmVjb3ZlcnkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2FjaGVkUmVjb3Zl
cnkucmVjb3ZlcnkoKS5pc0luRlBSKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAhbV9s
b2NrZWRSZWdpc3RlcnMuZ2V0KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZnByKCkpOworICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKworICAg
IENhY2hlZFJlY292ZXJ5KiBnZXROZXcoSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MpIGNvbnN0Cisg
ICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHJldHVybiBtX25ld1JlZ2lzdGVyc1tq
c1ZhbHVlUmVncy5ncHIoKV07CisjZWxzZQorICAgICAgICBBU1NFUlQoCisgICAgICAgICAgICBq
c1ZhbHVlUmVncy50YWdHUFIoKSA9PSBJbnZhbGlkR1BSUmVnIHx8IGpzVmFsdWVSZWdzLnBheWxv
YWRHUFIoKSA9PSBJbnZhbGlkR1BSUmVnCisgICAgICAgICAgICB8fCBtX25ld1JlZ2lzdGVyc1tq
c1ZhbHVlUmVncy5wYXlsb2FkR1BSKCldID09IG1fbmV3UmVnaXN0ZXJzW2pzVmFsdWVSZWdzLnRh
Z0dQUigpXSk7CisgICAgICAgIGlmIChqc1ZhbHVlUmVncy5wYXlsb2FkR1BSKCkgPT0gSW52YWxp
ZEdQUlJlZykKKyAgICAgICAgICAgIHJldHVybiBtX25ld1JlZ2lzdGVyc1tqc1ZhbHVlUmVncy50
YWdHUFIoKV07CisgICAgICAgIHJldHVybiBtX25ld1JlZ2lzdGVyc1tqc1ZhbHVlUmVncy5wYXls
b2FkR1BSKCldOworI2VuZGlmCisgICAgfQorCisgICAgdm9pZCBhZGROZXcoSlNWYWx1ZVJlZ3Mg
anNWYWx1ZVJlZ3MsIFZhbHVlUmVjb3ZlcnkgcmVjb3ZlcnkpCisgICAgeworICAgICAgICBBU1NF
UlQoanNWYWx1ZVJlZ3MgJiYgIWdldE5ldyhqc1ZhbHVlUmVncykpOworICAgICAgICBDYWNoZWRS
ZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkgPSBhZGRDYWNoZWRSZWNvdmVyeShyZWNvdmVyeSk7Cisg
ICAgICAgIEFTU0VSVCghY2FjaGVkUmVjb3ZlcnktPndhbnRlZEpTVmFsdWVSZWdzKCkpOworICAg
ICAgICBjYWNoZWRSZWNvdmVyeS0+c2V0V2FudGVkSlNWYWx1ZVJlZ3MoanNWYWx1ZVJlZ3MpOwor
I2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIG1fbmV3UmVnaXN0ZXJzW2pzVmFsdWVSZWdzLmdw
cigpXSA9IGNhY2hlZFJlY292ZXJ5OworI2Vsc2UKKyAgICAgICAgaWYgKGpzVmFsdWVSZWdzLnBh
eWxvYWRHUFIoKSAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgbV9uZXdSZWdpc3RlcnNb
anNWYWx1ZVJlZ3MucGF5bG9hZEdQUigpXSA9IGNhY2hlZFJlY292ZXJ5OworICAgICAgICBpZiAo
anNWYWx1ZVJlZ3MudGFnR1BSKCkgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIG1fbmV3
UmVnaXN0ZXJzW2pzVmFsdWVSZWdzLnRhZ0dQUigpXSA9IGNhY2hlZFJlY292ZXJ5OworI2VuZGlm
CisgICAgfQorCisgICAgdm9pZCBhZGROZXcoRlBSUmVnIGZwciwgVmFsdWVSZWNvdmVyeSByZWNv
dmVyeSkKKyAgICB7CisgICAgICAgIEFTU0VSVChmcHIgIT0gSW52YWxpZEZQUlJlZyAmJiAhbV9u
ZXdSZWdpc3RlcnNbZnByXSk7CisgICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVy
eSA9IGFkZENhY2hlZFJlY292ZXJ5KHJlY292ZXJ5KTsKKyAgICAgICAgbV9uZXdSZWdpc3RlcnNb
ZnByXSA9IGNhY2hlZFJlY292ZXJ5OworICAgICAgICBBU1NFUlQoY2FjaGVkUmVjb3ZlcnktPndh
bnRlZEZQUigpID09IEludmFsaWRGUFJSZWcpOworICAgICAgICBjYWNoZWRSZWNvdmVyeS0+c2V0
V2FudGVkRlBSKGZwcik7CisgICAgfQorCisgICAgLy8gbV9vbGRGcmFtZUJhc2UgaXMgdGhlIHJl
Z2lzdGVyIHJlbGF0aXZlIHRvIHdoaWNoIHdlIGFjY2VzcworICAgIC8vIHNsb3RzIGluIHRoZSBv
bGQgY2FsbCBmcmFtZSwgd2l0aCBhbiBhZGRpdGlvbmFsIG9mZnNldCBvZgorICAgIC8vIG1fb2xk
RnJhbWVPZmZzZXQuCisgICAgLy8KKyAgICAvLyAgLSBGb3IgYW4gYWN0dWFsIHRhaWwgY2FsbCwg
bV9vbGRGcmFtZUJhc2UgaXMgdGhlIHN0YWNrCisgICAgLy8gICAgcG9pbnRlciwgYW5kIG1fb2xk
RnJhbWVPZmZzZXQgaXMgdGhlIG51bWJlciBvZiBsb2NhbHMgb2YgdGhlCisgICAgLy8gICAgdGFp
bCBjYWxsZXIncyBmcmFtZS4gV2UgdXNlIHN1Y2ggc3RhY2sgcG9pbnRlci1iYXNlZAorICAgIC8v
ICAgIGFkZHJlc3NpbmcgYmVjYXVzZSBpdCBhbGxvd3MgdXMgdG8gbG9hZCB0aGUgdGFpbCBjYWxs
ZXIncworICAgIC8vICAgIGNhbGxlcidzIGZyYW1lIHBvaW50ZXIgaW4gdGhlIGZyYW1lIHBvaW50
ZXIgcmVnaXN0ZXIKKyAgICAvLyAgICBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIGF3a3dhcmRseSBr
ZWVwaW5nIGl0IGFyb3VuZCBvbiB0aGUKKyAgICAvLyAgICBzdGFjay4KKyAgICAvLworICAgIC8v
ICAtIEZvciBhIHNsb3cgcGF0aCBjYWxsLCBtX29sZEZyYW1lQmFzZSBpcyBqdXN0IHRoZSBmcmFt
ZQorICAgIC8vICAgIHBvaW50ZXIsIGFuZCBtX29sZEZyYW1lT2Zmc2V0IGlzIDAuCisgICAgR1BS
UmVnIG1fb2xkRnJhbWVCYXNlIHsgTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVy
IH07CisgICAgaW50IG1fb2xkRnJhbWVPZmZzZXQgeyAwIH07CisKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyBhZGRyZXNzRm9yT2xkKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9vbGRGcmFtZUJhc2Us
CisgICAgICAgICAgICAobV9vbGRGcmFtZU9mZnNldCArIHJlZy5vZmZzZXQoKSkgKiBzaXplb2Yo
UmVnaXN0ZXIpKTsKKyAgICB9CisKKyAgICAvLyBtX25ld0ZyYW1lQmFzZSBpcyB0aGUgcmVnaXN0
ZXIgcmVsYXRpdmUgdG8gd2hpY2ggd2UgYWNjZXNzCisgICAgLy8gc2xvdHMgaW4gdGhlIG5ldyBj
YWxsIGZyYW1lLCBhbmQgd2UgYWx3YXlzIG1ha2UgaXQgcG9pbnQgdG8KKyAgICAvLyB3aGVyZXZl
ciB0aGUgc3RhY2sgcG9pbnRlciB3aWxsIGJlIHJpZ2h0IGJlZm9yZSBtYWtpbmcgdGhlCisgICAg
Ly8gYWN0dWFsIGNhbGwvanVtcC4gVGhlIGFjdHVhbCBiYXNlIG9mIHRoZSBuZXcgZnJhbWUgaXMg
YXQgb2Zmc2V0CisgICAgLy8gbV9uZXdGcmFtZU9mZnNldCByZWxhdGl2ZSB0byBtX25ld0ZyYW1l
QmFzZS4KKyAgICAvLworICAgIC8vICAtIEZvciBhbiBhY3R1YWwgdGFpbCBjYWxsLCBtX25ld0Zy
YW1lQmFzZSBpcyBjb21wdXRlZAorICAgIC8vICAgIGR5bmFtaWNhbGx5LCBhbmQgbV9uZXdGcmFt
ZU9mZnNldCB2YXJpZXMgYmV0d2VlbiAwIGFuZCAtMgorICAgIC8vICAgIGRlcGVuZGluZyBvbiB0
aGUgYXJjaGl0ZWN0dXJlJ3MgY2FsbGluZyBjb252ZW50aW9uIChzZWUKKyAgICAvLyAgICBwcmVw
YXJlRm9yVGFpbENhbGwpLgorICAgIC8vCisgICAgLy8gIC0gRm9yIGEgc2xvdyBwYXRoIGNhbGws
IG1fbmV3RnJhbWVCYXNlIGlzIHRoZSBhY3R1YWwgc3RhY2sKKyAgICAvLyAgICBwb2ludGVyLCBh
bmQgbV9uZXdGcmFtZU9mZnNldCBpcyAtIENhbGxlckZyYW1lQW5kUENTaXplLAorICAgIC8vICAg
IGZvbGxvd2luZyB0aGUgY29udmVudGlvbiBmb3IgYSByZWd1bGFyIGNhbGwuCisgICAgR1BSUmVn
IG1fbmV3RnJhbWVCYXNlIHsgSW52YWxpZEdQUlJlZyB9OworICAgIGludCBtX25ld0ZyYW1lT2Zm
c2V0IHsgMH07CisKKyAgICBib29sIGlzVW5kZWNpZGVkKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX25ld0ZyYW1lQmFzZSA9PSBJbnZhbGlkR1BSUmVnOworICAgIH0KKworICAgIGJv
b2wgaXNTbG93UGF0aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9uZXdGcmFtZUJh
c2UgPT0gTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyOworICAgIH0KKworICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFkZHJlc3NGb3JOZXcoVmlydHVhbFJlZ2lzdGVyIHJl
ZykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyht
X25ld0ZyYW1lQmFzZSwKKyAgICAgICAgICAgIChtX25ld0ZyYW1lT2Zmc2V0ICsgcmVnLm9mZnNl
dCgpKSAqIHNpemVvZihSZWdpc3RlcikpOworICAgIH0KKworICAgIC8vIFdlIHVzZSBhIGNvbmNl
cHQgb2YgImRhbmdlciB6b25lIi4gVGhlIGRhbmdlciB6b25lIGNvbnNpc3RzIG9mCisgICAgLy8g
YWxsIHRoZSB3cml0ZXMgaW4gdGhlIG5ldyBmcmFtZSB0aGF0IGNvdWxkIG92ZXJsYXAgd2l0aCBy
ZWFkcworICAgIC8vIGluIHRoZSBvbGQgZnJhbWUuCisgICAgLy8KKyAgICAvLyBCZWNhdXNlIHdl
IGNvdWxkIGhhdmUgYSBoaWdoZXIgYWN0dWFsIG51bWJlciBvZiBhcmd1bWVudHMgdGhhbgorICAg
IC8vIHBhcmFtZXRlcnMsIHdoZW4gcHJlcGFyaW5nIGEgdGFpbCBjYWxsLCB3ZSBuZWVkIHRvIGFz
c3VtZSB0aGF0CisgICAgLy8gd3JpdGluZyB0byBhIHNsb3Qgb24gdGhlIG5ldyBmcmFtZSBjb3Vs
ZCBvdmVybGFwIG5vdCBvbmx5IHdpdGgKKyAgICAvLyB0aGUgY29ycmVzcG9uZGluZyBzbG90IGlu
IHRoZSBvbGQgZnJhbWUsIGJ1dCBhbHNvIHdpdGggYW55IHNsb3QKKyAgICAvLyBhYm92ZSBpdC4g
VGh1cywgdGhlIGRhbmdlciB6b25lIGNvbnNpc3RzIG9mIGFsbCB3cml0ZXMgYmV0d2VlbgorICAg
IC8vIHRoZSBmaXJzdCB3cml0ZSBhbmQgd2hhdCBJIGNhbGwgdGhlICJkYW5nZXIgZnJvbnRpZXIi
OiB0aGUKKyAgICAvLyBoaWdoZXN0IHNsb3QgaW4gdGhlIG9sZCBmcmFtZSB3ZSBzdGlsbCBjYXJl
IGFib3V0LiBUaHVzLCB0aGUKKyAgICAvLyBkYW5nZXIgem9uZSBjb250YWlucyBhbGwgdGhlIHNs
b3RzIGJldHdlZW4gdGhlIGZpcnN0IHNsb3Qgb2YKKyAgICAvLyB0aGUgbmV3IGZyYW1lIGFuZCB0
aGUgZGFuZ2VyIGZyb250aWVyLiBCZWNhdXNlIHRoZSBkYW5nZXIKKyAgICAvLyBmcm9udGllciBp
cyByZWxhdGVkIHRvIHRoZSBuZXcgZnJhbWUsIGl0IGlzIHN0b3JlZCBhcyBhIHZpcnR1YWwKKyAg
ICAvLyByZWdpc3RlciAqaW4gdGhlIG5ldyBmcmFtZSouCisgICAgVmlydHVhbFJlZ2lzdGVyIG1f
ZGFuZ2VyRnJvbnRpZXI7CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZGFuZ2VyRnJvbnRpZXIoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc1VuZGVjaWRlZCgpKTsKKworICAgICAgICBy
ZXR1cm4gbV9kYW5nZXJGcm9udGllcjsKKyAgICB9CisKKyAgICBib29sIGlzRGFuZ2VyTmV3KFZp
cnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoIWlzVW5kZWNp
ZGVkKCkgJiYgaXNWYWxpZE5ldyhyZWcpKTsKKyAgICAgICAgcmV0dXJuIHJlZyA8PSBkYW5nZXJG
cm9udGllcigpOworICAgIH0KKworICAgIHZvaWQgdXBkYXRlRGFuZ2VyRnJvbnRpZXIoKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKCFpc1VuZGVjaWRlZCgpKTsKKworICAgICAgICBtX2RhbmdlckZy
b250aWVyID0gZmlyc3ROZXcoKSAtIDE7CisgICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIHJl
ZyA9IGxhc3ROZXcoKTsgcmVnID49IGZpcnN0TmV3KCk7IHJlZyAtPSAxKSB7CisgICAgICAgICAg
ICBpZiAoIWdldE5ldyhyZWcpIHx8ICFpc1ZhbGlkT2xkKG5ld0FzT2xkKHJlZykpIHx8ICFnZXRP
bGQobmV3QXNPbGQocmVnKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
ICAgIG1fZGFuZ2VyRnJvbnRpZXIgPSByZWc7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nKCIgIERhbmdlciBmcm9udGllciBub3cgYXQgTkVXICIsIG1f
ZGFuZ2VyRnJvbnRpZXIsICJcbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgIEFsbCBjbGVhciEgRGFu
Z2VyIHpvbmUgaXMgZW1wdHkuXG4iKTsKKyAgICB9CisKKyAgICAvLyBBIHNhZmUgd3JpdGUgaXMg
YSB3cml0ZSB0aGF0IG5ldmVyIHdyaXRlcyBpbnRvIHRoZSBkYW5nZXIgem9uZS4KKyAgICBib29s
IGhhc09ubHlTYWZlV3JpdGVzKENhY2hlZFJlY292ZXJ5JiBjYWNoZWRSZWNvdmVyeSkgY29uc3QK
KyAgICB7CisgICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIHRhcmdldCA6IGNhY2hlZFJlY292
ZXJ5LnRhcmdldHMoKSkgeworICAgICAgICAgICAgaWYgKGlzRGFuZ2VyTmV3KHRhcmdldCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIC8vIFlvdSBtdXN0IGVuc3VyZSB0aGF0IHRoZXJlIGlzIG5vIGRh
bmdlcm91cyB3cml0ZXMgYmVmb3JlCisgICAgLy8gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICAg
IGJvb2wgdHJ5V3JpdGVzKENhY2hlZFJlY292ZXJ5Jik7CisKKyAgICAvLyBUaGlzIGZ1bmN0aW9u
IHRyaWVzIHRvIGVuc3VyZSB0aGF0IHRoZXJlIGlzIG5vIGxvbmdlciBhbnkKKyAgICAvLyBwb3Nz
aWJsZSBzYWZlIHdyaXRlLCBpLmUuIGFsbCByZW1haW5pbmcgd3JpdGVzIGFyZSBlaXRoZXIgdG8K
KyAgICAvLyB0aGUgZGFuZ2VyIHpvbmUgb3IgY2FsbGVlIHNhdmUgcmVzdG9yYXRpb25zLgorICAg
IC8vCisgICAgLy8gSXQgcmV0dXJucyBmYWxzZSBpZiBpdCB3YXMgdW5hYmxlIHRvIHBlcmZvcm0g
c29tZSBzYWZlIHdyaXRlcworICAgIC8vIGR1ZSB0byBoaWdoIHJlZ2lzdGVyIHByZXNzdXJlLgor
ICAgIGJvb2wgcGVyZm9ybVNhZmVXcml0ZXMoKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworI2VuZGlmIC8vIENhbGxGcmFtZVNodWZmbGVyX2gK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMTg5OTkw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjksNiArMjksNyBAQAogI2lmIFVTRShKU1ZBTFVFNjQpCiAjaW5jbHVkZSAiSklULmgi
CiAKKyNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCkBAIC0xODAs
OSArMTgxLDYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8
fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncykKLSAgICAgICAgZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpOwotCiAgICAgRGF0YUxhYmVsUHRyIGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9u
Q2hlY2s7CiAgICAgSnVtcCBzbG93Q2FzZSA9IGJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwg
cmVnVDAsIGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2ssIFRydXN0ZWRJbW1QdHIoMCkpOwog
ICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlKTsKQEAgLTE5Myw3ICsxOTEsMjggQEAgdm9pZCBKSVQ6
OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5m
b1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aEJlZ2luID0gYWRkcmVzc09mTGlua2VkRnVuY3Rp
b25DaGVjazsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNh
bGxMaW5rSW5mbyA9IGluZm87CiAKLSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8
IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzKSB7CisgICAgaWYgKG9wY29kZUlEID09
IG9wX3RhaWxfY2FsbCkgeworICAgICAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0
YTsKKyAgICAgICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0KKyAgICAgICAgICAgIGluc3RydWN0
aW9uWzRdLnUub3BlcmFuZCAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSAvIHNpemVvZihSZWdp
c3Rlcik7CisgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKGluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kOyArK2kpIHsKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3NbaV0gPQorICAgICAg
ICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygKKyAgICAgICAgICAg
ICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkgLSBpbnN0cnVjdGlvbls0XS51
Lm9wZXJhbmQsCisgICAgICAgICAgICAgICAgICAgIERhdGFGb3JtYXRKUyk7CisgICAgICAgIH0K
KyAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0KKyAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6
OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOworICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENh
bGxlZVNhdmVSZWdpc3RlcnMobV9jb2RlQmxvY2spOworICAgICAgICBpbmZvLT5zZXRGcmFtZVNo
dWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKKyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMs
IHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICAgICAgbV9jYWxsQ29tcGls
YXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoT3RoZXIgPSBlbWl0TmFrZWRUYWls
Q2FsbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG9wY29kZUlEID09IG9w
X3RhaWxfY2FsbF92YXJhcmdzKSB7CisgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsK
ICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAgICBtX2NhbGxDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhPdGhlciA9IGVtaXROYWtlZFRhaWxD
YWxsKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTIxOCw2ICsyMzcsOSBAQCB2b2lkIEpJVDo6Y29t
cGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlECiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAK
KyAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxf
Y2FsbF92YXJhcmdzKQorICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisKICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4
XS5jYWxsTGlua0luZm8pLCByZWdUMik7CiAKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2Fs
bExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGVtaXROYWtlZENhbGwobV92bS0+
Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAkocmV2aXNpb24gMTg5OTkwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC02
OSw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgc3RkOjphcnJheTxU
LCBNYWNyb0Fzc2VtYmxlcjo6dG90YWxOdW1iZXJPZlJlZ2lzdGVycygpPiBtX21hcCB7IH07Cisg
ICAgc3RkOjphcnJheTxULCBNYWNyb0Fzc2VtYmxlcjo6dG90YWxOdW1iZXJPZlJlZ2lzdGVycygp
PiBtX21hcCB7IHsgfSB9OwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTg2LDcgKzg2
LDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBzdGQ6OmFycmF5PFQsIE1hY3Jv
QXNzZW1ibGVyOjpudW1iZXJPZlJlZ2lzdGVycygpPiBtX21hcCB7IH07CisgICAgc3RkOjphcnJh
eTxULCBNYWNyb0Fzc2VtYmxlcjo6bnVtYmVyT2ZSZWdpc3RlcnMoKT4gbV9tYXAgeyB7IH0gfTsK
IH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC0xMDMsNyArMTAzLDcgQEAgcHVibGljOgog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICBzdGQ6OmFycmF5PFQsIE1hY3JvQXNzZW1ibGVyOjpudW1i
ZXJPZkZQUmVnaXN0ZXJzKCk+IG1fbWFwIHsgfTsKKyAgICBzdGQ6OmFycmF5PFQsIE1hY3JvQXNz
ZW1ibGVyOjpudW1iZXJPZkZQUmVnaXN0ZXJzKCk+IG1fbWFwIHsgeyB9IH07CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAko
cmV2aXNpb24gMTg5OTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQmluYXJ5U3dp
dGNoLmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1
ZmZsZXIuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiREZHU3BlY3Vs
YXRpdmVKSVQuaCIKICNpbmNsdWRlICJGVExUaHVua3MuaCIKQEAgLTcwNiwyNiArNzA3LDMyIEBA
IHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbCgKICAgICAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBM
aXN0IHNsb3dQYXRoOwogICAgIAotICAgIHB0cmRpZmZfdCBvZmZzZXRUb0ZyYW1lID0gLXNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKTsKLQotICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Ci0gICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcCBva0FyZ3VtZW50Q291bnQgPSBzdHViSml0LmJyYW5jaDMy
KAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpCZWxvdywgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHN0YXRpY19jYXN0PHB0cmRpZmZf
dD4oc2l6ZW9mKFJlZ2lzdGVyKSAqIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpICsgb2Zmc2V0VG9G
cmFtZSArIFBheWxvYWRPZmZzZXQpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxMDAwMDAw
MCkpOwotICAgICAgICBzdHViSml0LmFib3J0V2l0aFJlYXNvbihSZXBhdGNoSW5zYW5lQXJndW1l
bnRDb3VudCk7Ci0gICAgICAgIG9rQXJndW1lbnRDb3VudC5saW5rKCZzdHViSml0KTsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZXI+IGZyYW1lU2h1ZmZsZXI7CisgICAgaWYg
KGNhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKCkpIHsKKyAgICAgICAgQVNTRVJUKGNhbGxM
aW5rSW5mby5pc1RhaWxDYWxsKCkpOworICAgICAgICBmcmFtZVNodWZmbGVyID0gc3RkOjptYWtl
X3VuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlcj4oc3R1YkppdCwgKmNhbGxMaW5rSW5mby5mcmFtZVNo
dWZmbGVEYXRhKCkpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIC8vIFdlIHdvdWxk
IGhhdmUgYWxyZWFkeSBjaGVja2VkIHRoYXQgdGhlIGNhbGxlZSBpcyBhIGNlbGwsIGFuZCB3ZSBj
YW4KKyAgICAgICAgLy8gdXNlIHRoZSBhZGRpdGlvbmFsIHJlZ2lzdGVyIHRoaXMgYnV5cyB1cy4K
KyAgICAgICAgZnJhbWVTaHVmZmxlci0+YXNzdW1lQ2FsbGVlSXNDZWxsKCk7CisjZW5kaWYKKyAg
ICAgICAgZnJhbWVTaHVmZmxlci0+bG9ja0dQUihjYWxsZWVHUFIpOwogICAgIH0KLSAgICAKLSAg
ICBHUFJSZWcgc2NyYXRjaCA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihjYWxs
ZWVHUFIpOwogICAgIEdQUlJlZyBjb21wYXJpc29uVmFsdWVHUFI7CiAgICAgCiAgICAgaWYgKGlz
Q2xvc3VyZUNhbGwpIHsKLSAgICAgICAgLy8gVmVyaWZ5IHRoYXQgd2UgaGF2ZSBhIGZ1bmN0aW9u
IGFuZCBzdGFzaCB0aGUgZXhlY3V0YWJsZSBpbiBzY3JhdGNoLgorICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUjsKKyAgICAgICAgaWYgKGZyYW1lU2h1ZmZsZXIpCisgICAgICAgICAgICBzY3JhdGNo
R1BSID0gZnJhbWVTaHVmZmxlci0+YWNxdWlyZUdQUigpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBzY3JhdGNoR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGNhbGxl
ZUdQUik7CisgICAgICAgIC8vIFZlcmlmeSB0aGF0IHdlIGhhdmUgYSBmdW5jdGlvbiBhbmQgc3Rh
c2ggdGhlIGV4ZWN1dGFibGUgaW4gc2NyYXRjaEdQUi4KIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgIC8vIFdlIGNhbiBzYWZlbHkgY2xvYmJlciBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgY2Fs
bGVlR1BSLiBXZSBjYW4ndCByZWx5IG9uIHRhZ01hc2tSZWdpc3RlcgotICAgICAgICAvLyBiZWlu
ZyBzZXQuIFNvIHdlIGRvIHRoaXMgdGhlIGhhcmQgd2F5LgotICAgICAgICBzdHViSml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChUYWdNYXNrKSwgc2NyYXRjaCk7Ci0gICAgICAg
IHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaFRlc3Q2NChDQ2FsbEhlbHBlcnM6Ok5vblpl
cm8sIGNhbGxlZUdQUiwgc2NyYXRjaCkpOworICAgICAgICAvLyBXZSBjYW4ndCByZWx5IG9uIHRh
Z01hc2tSZWdpc3RlciBiZWluZyBzZXQsIHNvIHdlIGRvIHRoaXMgdGhlIGhhcmQKKyAgICAgICAg
Ly8gd2F5LgorICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02
NChUYWdNYXNrKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0
LmJyYW5jaFRlc3Q2NChDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIGNhbGxlZUdQUiwgc2NyYXRjaEdQ
UikpOwogI2Vsc2UKICAgICAgICAgLy8gV2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhh
dCB0aGUgY2FsbGVlIGlzIGEgY2VsbC4KICNlbmRpZgpAQCAtNzM4LDkgKzc0NSw5IEBAIHZvaWQg
bGlua1BvbHltb3JwaGljQ2FsbCgKICAgICAKICAgICAgICAgc3R1YkppdC5sb2FkUHRyKAogICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zm
c2V0T2ZFeGVjdXRhYmxlKCkpLAotICAgICAgICAgICAgc2NyYXRjaCk7CisgICAgICAgICAgICBz
Y3JhdGNoR1BSKTsKICAgICAgICAgCi0gICAgICAgIGNvbXBhcmlzb25WYWx1ZUdQUiA9IHNjcmF0
Y2g7CisgICAgICAgIGNvbXBhcmlzb25WYWx1ZUdQUiA9IHNjcmF0Y2hHUFI7CiAgICAgfSBlbHNl
CiAgICAgICAgIGNvbXBhcmlzb25WYWx1ZUdQUiA9IGNhbGxlZUdQUjsKICAgICAKQEAgLTc4Miw4
ICs3ODksMTMgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAogICAgICAgICBjYXNlVmFsdWVz
W2ldID0gbmV3Q2FzZVZhbHVlOwogICAgIH0KICAgICAKLSAgICBHUFJSZWcgZmFzdENvdW50c0Jh
c2VHUFIgPQotICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoY2FsbGVl
R1BSLCBjb21wYXJpc29uVmFsdWVHUFIsIEdQUkluZm86OnJlZ1QzKTsKKyAgICBHUFJSZWcgZmFz
dENvdW50c0Jhc2VHUFI7CisgICAgaWYgKGZyYW1lU2h1ZmZsZXIpCisgICAgICAgIGZhc3RDb3Vu
dHNCYXNlR1BSID0gZnJhbWVTaHVmZmxlci0+YWNxdWlyZUdQUigpOworICAgIGVsc2UgeworICAg
ICAgICBmYXN0Q291bnRzQmFzZUdQUiA9CisgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnNl
bGVjdFNjcmF0Y2hHUFIoY2FsbGVlR1BSLCBjb21wYXJpc29uVmFsdWVHUFIsIEdQUkluZm86OnJl
Z1QzKTsKKyAgICB9CiAgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihmYXN0Q291bnRzLmdldCgpKSwgZmFzdENvdW50c0Jhc2VHUFIpOwogICAgIAogICAgIEJpbmFy
eVN3aXRjaCBiaW5hcnlTd2l0Y2goY29tcGFyaXNvblZhbHVlR1BSLCBjYXNlVmFsdWVzLCBCaW5h
cnlTd2l0Y2g6OkludFB0cik7CkBAIC04MDIsNyArODE0LDExIEBAIHZvaWQgbGlua1BvbHltb3Jw
aGljQ2FsbCgKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwK
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoZmFzdENvdW50c0Jhc2VHUFIs
IGNhc2VJbmRleCAqIHNpemVvZih1aW50MzJfdCkpKTsKICAgICAgICAgfQotICAgICAgICBpZiAo
Y2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAoZnJhbWVTaHVmZmxlcikg
eworICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoc3R1YkppdCwgZnJhbWVTaHVmZmxlci0+
c25hcHNob3QoKSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgICAgICAgICBjYWxsc1tjYXNl
SW5kZXhdLmNhbGwgPSBzdHViSml0Lm5lYXJUYWlsQ2FsbCgpOworICAgICAgICB9IGVsc2UgaWYg
KGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgICAgIHN0dWJKaXQuZW1pdFJl
c3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgc3R1YkppdC5wcmVwYXJlRm9yVGFpbENh
bGxTbG93KCk7CiAgICAgICAgICAgICBjYWxsc1tjYXNlSW5kZXhdLmNhbGwgPSBzdHViSml0Lm5l
YXJUYWlsQ2FsbCgpOwogICAgICAgICB9IGVsc2UKQEAgLTgxMywxMCArODI5LDIzIEBAIHZvaWQg
bGlua1BvbHltb3JwaGljQ2FsbCgKICAgICAKICAgICBzbG93UGF0aC5saW5rKCZzdHViSml0KTsK
ICAgICBiaW5hcnlTd2l0Y2guZmFsbFRocm91Z2goKS5saW5rKCZzdHViSml0KTsKLSAgICBzdHVi
Sml0Lm1vdmUoY2FsbGVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICBpZiAoZnJhbWVTaHVm
ZmxlcikgeworICAgICAgICBmcmFtZVNodWZmbGVyLT5yZWxlYXNlR1BSKGNhbGxlZUdQUik7Cisg
ICAgICAgIGZyYW1lU2h1ZmZsZXItPnJlbGVhc2VHUFIoY29tcGFyaXNvblZhbHVlR1BSKTsKKyAg
ICAgICAgZnJhbWVTaHVmZmxlci0+cmVsZWFzZUdQUihmYXN0Q291bnRzQmFzZUdQUik7CiAjaWYg
VVNFKEpTVkFMVUUzMl82NCkKLSAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgZnJhbWVT
aHVmZmxlci0+c2V0Q2FsbGVlSlNWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDEs
IEdQUkluZm86OnJlZ1QwKSk7CisjZWxzZQorICAgICAgICBmcmFtZVNodWZmbGVyLT5zZXRDYWxs
ZWVKU1ZhbHVlUmVncyhKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUMCkpOwogI2VuZGlmCisgICAg
ICAgIGZyYW1lU2h1ZmZsZXItPnByZXBhcmVGb3JTbG93UGF0aCgpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHN0dWJKaXQubW92ZShjYWxsZWVHUFIsIEdQUkluZm86OnJlZ1QwKTsKKyNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQorICAgICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEdQUkluZm86OnJlZ1QxKTsKKyNlbmRpZgorICAgIH0K
ICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZjYWxsTGlua0lu
Zm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSksIEdQUkluZm86OnJlZ1Q0KTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9uIDE4OTk5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTU1LDYgKzE1NSwxMCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua1BvbHltb3Jw
aGljQ2FsCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiTGluayBwb2x5
bW9ycGhpYyBjYWxsIHNsb3cgcGF0aCB0aHVuayIpKTsKIH0KIAorLy8gRklYTUU6IFdlIHNob3Vs
ZCBkaXN0aW5ndWlzaCBiZXR3ZWVuIGEgbWVnYW1vcnBoaWMgdmlydHVhbCBjYWxsIHZzLiBhIHNs
b3cKKy8vIHBhdGggdmlydHVhbCBjYWxsIHNvIHRoYXQgd2UgY2FuIGVuYWJsZSBmYXN0IHRhaWwg
Y2FsbHMgZm9yIG1lZ2Ftb3JwaGljCisvLyB2aXJ0dWFsIGNhbGxzIGJ5IHVzaW5nIHRoZSBzaHVm
Zmxlci4KKy8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg4MzEK
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsVGh1bmtGb3IoVk0qIHZtLCBDYWxsTGlua0lu
Zm8mIGNhbGxMaW5rSW5mbykKIHsKICAgICAvLyBUaGUgY2FsbGVlIGlzIGluIHJlZ1QwIChmb3Ig
SlNWQUxVRTMyXzY0LCB0aGUgdGFnIGlzIGluIHJlZ1QxKS4K
</data>

          </attachment>
      

    </bug>

</bugzilla>