<?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>193640</bug_id>
          
          <creation_ts>2019-01-20 19:19:35 -0800</creation_ts>
          <short_desc>Rollout r240210: It broke tests on iOS</short_desc>
          <delta_ts>2019-01-20 20:38:29 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>192782</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1496477</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-20 19:19:35 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496479</commentid>
    <comment_count>1</comment_count>
      <attachid>359665</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-20 19:24:26 -0800</bug_when>
    <thetext>Created attachment 359665
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496488</commentid>
    <comment_count>2</comment_count>
      <attachid>359665</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-01-20 19:50:04 -0800</bug_when>
    <thetext>Comment on attachment 359665
patch for landing

Rejecting attachment 359665 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-02&apos;, &apos;validate-changelog&apos;, &apos;--check-oops&apos;, &apos;--non-interactive&apos;, 359665, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

ChangeLog entry in Source/WTF/ChangeLog contains OOPS!.

Full output: https://webkit-queues.webkit.org/results/10824700</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496493</commentid>
    <comment_count>3</comment_count>
      <attachid>359666</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-20 19:58:35 -0800</bug_when>
    <thetext>Created attachment 359666
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496503</commentid>
    <comment_count>4</comment_count>
      <attachid>359666</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-01-20 20:37:09 -0800</bug_when>
    <thetext>Comment on attachment 359666
patch for landing

Clearing flags on attachment: 359666

Committed r240224: &lt;https://trac.webkit.org/changeset/240224&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496504</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-01-20 20:37:11 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496505</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-01-20 20:38:29 -0800</bug_when>
    <thetext>&lt;rdar://problem/47420043&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359665</attachid>
            <date>2019-01-20 19:24:26 -0800</date>
            <delta_ts>2019-01-20 19:58:35 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>135734</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQwMjIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1NCBA
QAorMjAxOS0wMS0yMCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBSb2xsb3V0IHIyNDAyMTA6IEl0IGJyb2tlIHRlc3RzIG9uIGlPUworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkzNjQwCisKKyAgICAgICAgVW5yZXZp
ZXdlZC4gfjI2NTAgdGVzdHMgYXJlIGZhaWxpbmcgb24gaU9TLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBidWlsdGlucy9CdWlsdGlu
TmFtZXMuY3BwOgorICAgICAgICAoSlNDOjpCdWlsdGluTmFtZXM6OkJ1aWx0aW5OYW1lcyk6Cisg
ICAgICAgICogYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmg6CisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRDb25zdGFudElkZW50aWZp
ZXJTZXRSZWdpc3RlcnMpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAg
ICAqIGJ5dGVjb2RlL0hhbmRsZXJJbmZvLmg6CisgICAgICAgICogYnl0ZWNvZGUvSW5zdHJ1Y3Rp
b25TdHJlYW0uaDoKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oOgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkU2V0Q29uc3RhbnQpOgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29uc3RhbnRJZGVudGlmaWVyU2V0cyk6CisgICAgICAg
ICogYnl0ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUv
VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlLmg6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRHbG9iYWxD
b2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRHbG9iYWxDb2RlQmxvY2s6OlVubGlu
a2VkR2xvYmFsQ29kZUJsb2NrKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRh
VGFibGUuaDoKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2suaDoKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaDoKKyAg
ICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgICoganNjLmNwcDoK
KyAgICAgICAgKGZ1bmN0aW9uUXVpdCk6CisgICAgICAgIChydW5KU0MpOgorICAgICAgICAqIHBh
cnNlci9Tb3VyY2VDb2RlLmg6CisgICAgICAgICogcGFyc2VyL1NvdXJjZUNvZGVLZXkuaDoKKyAg
ICAgICAgKEpTQzo6U291cmNlQ29kZUtleTo6b3BlcmF0b3IhPSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGFyc2VyL1VubGlua2VkU291cmNlQ29kZS5oOgorICAgICAgICAqIHBhcnNlci9W
YXJpYWJsZUVudmlyb25tZW50Lmg6CisgICAgICAgICogcnVudGltZS9DYWNoZWRUeXBlcy5jcHA6
CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpFbmNvZGVyOjpBbGxvY2F0aW9u
OjpidWZmZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpFbmNvZGVyOjpBbGxvY2F0
aW9uOjpvZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpFbmNvZGVyOjpBbGxv
Y2F0aW9uOjpBbGxvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6RW5j
b2Rlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkVuY29kZXI6OnZtKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6RW5jb2Rlcjo6bWFsbG9jKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RW5j
b2Rlcjo6b2Zmc2V0T2YpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpFbmNvZGVyOjpjYWNoZVB0
cik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkVuY29kZXI6Om9mZnNldEZvclB0cik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkVuY29kZXI6OnJlbGVhc2UpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpFbmNvZGVyOjpQYWdlOjpQYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RW5jb2Rl
cjo6UGFnZTo6bWFsbG9jKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6UGFnZTo6
YnVmZmVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6UGFnZTo6c2l6
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkVuY29kZXI6OlBhZ2U6OmdldE9mZnNl
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkVuY29kZXI6OmFsbG9jYXRlTmV3UGFn
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRlY29kZXI6OkRlY29kZXIpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpEZWNvZGVyOjp+RGVjb2Rlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkRlY29kZXI6OnZtKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RGVjb2Rlcjo6b2Zmc2V0T2Yp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpEZWNvZGVyOjpjYWNoZU9mZnNldCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkRlY29kZXI6OmFkZEZpbmFsaXplcik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmRlY29kZSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OlZhcmlhYmxlTGVuZ3RoT2JqZWN0OjpidWZmZXIgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpWYXJpYWJsZUxlbmd0aE9iamVjdDo6YWxsb2NhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRQdHI6OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNhY2hlZFB0cjo6ZGVjb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q2FjaGVkUHRyOjpvcGVyYXRvci0+IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2Fj
aGVkUHRyOjpnZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRSZWZQdHI6
OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZFJlZlB0cjo6ZGVjb2RlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkV3JpdGVCYXJyaWVyOjplbmNvZGUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRXcml0ZUJhcnJpZXI6OmRlY29kZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZFZlY3Rvcjo6ZW5jb2RlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkVmVjdG9yOjpkZWNvZGUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDYWNoZWRQYWlyOjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDYWNoZWRQYWlyOjpkZWNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNo
ZWRIYXNoTWFwOjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRIYXNoTWFw
OjpkZWNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRVbmlxdWVkU3Ry
aW5nSW1wbDo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkVW5pcXVlZFN0
cmluZ0ltcGw6OmRlY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZFN0
cmluZ0ltcGw6OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZFN0cmluZ0lt
cGw6OmRlY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZFN0cmluZzo6
ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nOjpkZWNvZGUgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRJZGVudGlmaWVyOjplbmNvZGUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRJZGVudGlmaWVyOjpkZWNvZGUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRPcHRpb25hbDo6ZW5jb2RlKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q2FjaGVkT3B0aW9uYWw6OmRlY29kZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNhY2hlZE9wdGlvbmFsOjpkZWNvZGVBc1B0ciBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNhY2hlZFNpbXBsZUp1bXBUYWJsZTo6ZW5jb2RlKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q2FjaGVkU2ltcGxlSnVtcFRhYmxlOjpkZWNvZGUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRTdHJpbmdKdW1wVGFibGU6OmVuY29kZSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZFN0cmluZ0p1bXBUYWJsZTo6ZGVjb2RlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrUmFyZURhdGE6OmVuY29kZSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9ja1JhcmVEYXRhOjpkZWNvZGUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRCaXRWZWN0b3I6OmVuY29kZSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZEJpdFZlY3Rvcjo6ZGVjb2RlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkSGFzaFNldDo6ZW5jb2RlKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q2FjaGVkSGFzaFNldDo6ZGVjb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q2FjaGVkQ29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk6OmVuY29kZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5Ojpk
ZWNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRWYXJpYWJsZUVudmly
b25tZW50OjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRWYXJpYWJsZUVu
dmlyb25tZW50OjpkZWNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRB
cnJheTo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkQXJyYXk6OmRlY29k
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZFNjb3BlZEFyZ3VtZW50c1Rh
YmxlOjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRTY29wZWRBcmd1bWVu
dHNUYWJsZTo6ZGVjb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkU3lt
Ym9sVGFibGVFbnRyeTo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkU3lt
Ym9sVGFibGVFbnRyeTo6ZGVjb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2Fj
aGVkU3ltYm9sVGFibGU6OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZFN5
bWJvbFRhYmxlOjpkZWNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRJ
bW11dGFibGVCdXR0ZXJmbHk6OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hl
ZEltbXV0YWJsZUJ1dHRlcmZseTo6ZGVjb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6Q2FjaGVkUmVnRXhwOjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRS
ZWdFeHA6OmRlY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZFRlbXBs
YXRlT2JqZWN0RGVzY3JpcHRvcjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2Fj
aGVkVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOjpkZWNvZGUgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDYWNoZWRCaWdJbnQ6OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNhY2hlZEJpZ0ludDo6ZGVjb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2Fj
aGVkSlNWYWx1ZTo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkSlNWYWx1
ZTo6ZGVjb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkSW5zdHJ1Y3Rp
b25TdHJlYW06OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZEluc3RydWN0
aW9uU3RyZWFtOjpkZWNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRN
ZXRhZGF0YVRhYmxlOjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRNZXRh
ZGF0YVRhYmxlOjpkZWNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRT
b3VyY2VPcmlnaW46OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZFNvdXJj
ZU9yaWdpbjo6ZGVjb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkVGV4
dFBvc2l0aW9uOjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRUZXh0UG9z
aXRpb246OmRlY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZFNvdXJj
ZVByb3ZpZGVyU2hhcGU6OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZFNv
dXJjZVByb3ZpZGVyU2hhcGU6OmRlY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNhY2hlZFN0cmluZ1NvdXJjZVByb3ZpZGVyOjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDYWNoZWRTdHJpbmdTb3VyY2VQcm92aWRlcjo6ZGVjb2RlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q2FjaGVkV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlcjo6ZW5jb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlcjo6
ZGVjb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlUHJvdmlk
ZXI6OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZFNvdXJjZVByb3ZpZGVy
OjpkZWNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRVbmxpbmtlZFNv
dXJjZUNvZGVTaGFwZTo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkVW5s
aW5rZWRTb3VyY2VDb2RlU2hhcGU6OmRlY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkNhY2hlZFNvdXJjZUNvZGU6OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNh
Y2hlZFNvdXJjZUNvZGU6OmRlY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNh
Y2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Zmlyc3RMaW5lT2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpsaW5lQ291bnQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnVubGlu
a2VkRnVuY3Rpb25OYW1lU3RhcnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNo
ZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnVubGlua2VkQm9keVN0YXJ0Q29sdW1uIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjp1bmxpbmtlZEJv
ZHlFbmRDb2x1bW4gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlv
bkV4ZWN1dGFibGU6OnN0YXJ0T2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpzb3VyY2VMZW5ndGggY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnBhcmFtZXRlcnNTdGFydE9m
ZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0
YWJsZTo6dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjp0eXBlUHJvZmlsaW5nRW5kT2Zmc2V0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpw
YXJhbWV0ZXJDb3VudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0
aW9uRXhlY3V0YWJsZTo6ZmVhdHVyZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
YWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnNvdXJjZVBhcnNlTW9kZSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6aXNJblN0cmljdENvbnRl
eHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFi
bGU6Omhhc0NhcHR1cmVkVmFyaWFibGVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjppc0J1aWx0aW5GdW5jdGlvbiBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6aXNCdWlsdGluRGVm
YXVsdENsYXNzQ29uc3RydWN0b3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNo
ZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbnN0cnVjdEFiaWxpdHkgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbnN0cnVjdG9yS2luZCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6
ZnVuY3Rpb25Nb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rp
b25FeGVjdXRhYmxlOjpzY3JpcHRNb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpzdXBlckJpbmRpbmcgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmRlcml2ZWRDb250ZXh0VHlw
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6bmFtZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6ZWNtYU5hbWUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRG
dW5jdGlvbkV4ZWN1dGFibGU6OmluZmVycmVkTmFtZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNhY2hlZENvZGVCbG9jazo6aW5zdHJ1Y3Rpb25zIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjp0aGlzUmVnaXN0ZXIgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OnNjb3BlUmVnaXN0ZXIgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6Omdsb2JhbE9iamVjdFJlZ2lz
dGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpzb3Vy
Y2VVUkxEaXJlY3RpdmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRDb2Rl
QmxvY2s6OnNvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OnVzZXNFdmFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjppc1N0cmljdE1vZGUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OmlzQ29uc3RydWN0b3IgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6Omhhc0NhcHR1cmVkVmFyaWFibGVz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjppc0J1aWx0
aW5GdW5jdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9j
azo6c3VwZXJCaW5kaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29k
ZUJsb2NrOjpzY3JpcHRNb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVk
Q29kZUJsb2NrOjppc0Fycm93RnVuY3Rpb25Db250ZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjppc0NsYXNzQ29udGV4dCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6d2FzQ29tcGlsZWRXaXRoRGVidWdnaW5n
T3Bjb2RlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6
Y29uc3RydWN0b3JLaW5kIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29k
ZUJsb2NrOjpkZXJpdmVkQ29udGV4dFR5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDYWNoZWRDb2RlQmxvY2s6OmV2YWxDb250ZXh0VHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6aGFzVGFpbENhbGxzIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpsaW5lQ291bnQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OmVuZENvbHVtbiBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6bnVtVmFycyBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6bnVtQ2FsbGVlTG9jYWxzIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpudW1QYXJhbWV0ZXJz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpmZWF0dXJl
cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6cGFyc2VN
b2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpjb2Rl
VHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6cmFy
ZURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRQcm9ncmFtQ29kZUJs
b2NrOjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRQcm9ncmFtQ29kZUJs
b2NrOjpkZWNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRNb2R1bGVD
b2RlQmxvY2s6OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZE1vZHVsZUNv
ZGVCbG9jazo6ZGVjb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkRXZh
bENvZGVCbG9jazo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkRXZhbENv
ZGVCbG9jazo6ZGVjb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVu
Y3Rpb25Db2RlQmxvY2s6OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZEZ1
bmN0aW9uQ29kZUJsb2NrOjpkZWNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpV
bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2Nr
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrPENvZGVCbG9ja1R5cGU+
OjpkZWNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZFByb2dyYW1D
b2RlQmxvY2s6OlVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6VW5saW5rZWRNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRFdmFsQ29kZUJsb2Nr
OjpVbmxpbmtlZEV2YWxDb2RlQmxvY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRG
dW5jdGlvbkV4ZWN1dGFibGU6OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hl
ZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVjb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrPENvZGVCbG9ja1R5cGU+
OjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRTb3VyY2VDb2RlS2V5Ojpl
bmNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRTb3VyY2VDb2RlS2V5OjpkZWNv
ZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZUVudHJ5OjplbmNvZGUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZUVudHJ5OjogY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjogY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjplbmNvZGVDb2RlQmxv
Y2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpkZWNvZGVDb2RlQmxvY2tJbXBsKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBydW50aW1lL0NhY2hlZFR5cGVzLmg6CisgICAgICAgIChKU0M6OmRlY29k
ZUNvZGVCbG9jayk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9Db2RlQ2FjaGUuY3BwOgor
ICAgICAgICAoSlNDOjpDb2RlQ2FjaGVNYXA6OnBydW5lU2xvd0Nhc2UpOgorICAgICAgICAoSlND
OjpDb2RlQ2FjaGU6OmdldFVubGlua2VkR2xvYmFsQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6
Q29kZUNhY2hlOjpnZXRVbmxpbmtlZEdsb2JhbEZ1bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAg
IChKU0M6OkNvZGVDYWNoZTo6d3JpdGUpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvQ29k
ZUNhY2hlLmg6CisgICAgICAgIChKU0M6OkNvZGVDYWNoZU1hcDo6ZmluZENhY2hlQW5kVXBkYXRl
QWdlKToKKyAgICAgICAgKEpTQzo6Q29kZUNhY2hlOjpjbGVhcik6CisgICAgICAgIChKU0M6OkNv
ZGVDYWNoZU1hcDo6YmVnaW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGVNYXA6
OmVuZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVDYWNoZU1hcDo6ZmV0Y2hGcm9tRGlz
a0ltcGwpOiBEZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6d3Jp
dGVDb2RlQmxvY2spOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQuY3BwOgor
ICAgICAgICAoSlNDOjpKU0JpZ0ludDo6b2Zmc2V0T2ZEYXRhKToKKyAgICAgICAgKEpTQzo6SlNC
aWdJbnQ6OmRhdGFTdG9yYWdlKToKKyAgICAgICAgKiBydW50aW1lL0pTQmlnSW50Lmg6CisgICAg
ICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5k
ZW50T3B0aW9ucyk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICogcnVu
dGltZS9SZWdFeHAuaDoKKyAgICAgICAgKiBydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmg6
CisgICAgICAgICogcnVudGltZS9TdGFja0ZyYW1lLmg6CisgICAgICAgICogcnVudGltZS9TdHJ1
Y3R1cmVJbmxpbmVzLmg6CisgICAgICAgICogcnVudGltZS9TeW1ib2xUYWJsZS5oOgorCiAyMDE5
LTAxLTIwICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pT
Q10gSW52YWxpZGF0ZSBvbGQgc2NvcGUgb3BlcmF0aW9ucyB1c2luZyBnbG9iYWwgbGV4aWNhbCBi
aW5kaW5nIGVwb2NoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZp
c2lvbiAyNDAyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTgzMyw3ICs4MzMsNiBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFU
RV9GUkFNRVdPUktfSEVBCiAgICAgcnVudGltZS9KU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5o
CiAgICAgcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCiAgICAgcnVudGltZS9KU0dsb2JhbE9iamVj
dElubGluZXMuaAotICAgIHJ1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaAogICAgIHJ1bnRp
bWUvSlNJbnRlcm5hbFByb21pc2UuaAogICAgIHJ1bnRpbWUvSlNJbnRlcm5hbFByb21pc2VEZWZl
cnJlZC5oCiAgICAgcnVudGltZS9KU01pY3JvdGFzay5oCkBAIC04NDksNyArODQ4LDYgQEAgc2V0
KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQQogICAgIHJ1bnRpbWUvSlNQcm9t
aXNlLmgKICAgICBydW50aW1lL0pTUHJvbWlzZUNvbnN0cnVjdG9yLmgKICAgICBydW50aW1lL0pT
UHJvbWlzZURlZmVycmVkLmgKLSAgICBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5o
CiAgICAgcnVudGltZS9KU1Byb3h5LmgKICAgICBydW50aW1lL0pTUnVuTG9vcFRpbWVyLmgKICAg
ICBydW50aW1lL0pTU2NvcGUuaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2
aXNpb24gMjQwMjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC03MTMsNyArNzEzLDYgQEAgcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3Iu
Y3BwCiBydW50aW1lL0Jvb2xlYW5PYmplY3QuY3BwCiBydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUu
Y3BwCiBydW50aW1lL0NhbGxEYXRhLmNwcAotcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKIHJ1bnRp
bWUvQ2F0Y2hTY29wZS5jcHAKIHJ1bnRpbWUvQ2xhc3NJbmZvLmNwcAogcnVudGltZS9DbG9uZWRB
cmd1bWVudHMuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24gMjQwMjIwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcg
KzI4LDYgQEAKICNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ2F0Y2hT
Y29wZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgog
I2luY2x1ZGUgIkNvbXBsZXRpb24uaCIKICNpbmNsdWRlICJDb25maWdGaWxlLmgiCiAjaW5jbHVk
ZSAiRGlzYXNzZW1ibGVyLmgiCkBAIC0xOTg5LDExICsxOTg4LDggQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkZhaQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25R
dWl0KEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25RdWl0KEV4ZWNTdGF0ZSopCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICB2bS5j
b2RlQ2FjaGUoKS0+d3JpdGUodm0pOwotCiAgICAganNjRXhpdChFWElUX1NVQ0NFU1MpOwogCiAj
aWYgQ09NUElMRVIoTVNWQykKQEAgLTI4ODAsOCArMjg3Niw2IEBAIGludCBydW5KU0MoY29uc3Qg
Q29tbWFuZExpbmUmIG9wdGlvbnMsIGIKICNlbmRpZgogICAgIH0KIAotICAgIHZtLmNvZGVDYWNo
ZSgpLT53cml0ZSh2bSk7Ci0KICAgICBpZiAoaXNXb3JrZXIpIHsKICAgICAgICAgSlNMb2NrSG9s
ZGVyIGxvY2tlcih2bSk7CiAgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugd2UgZG9u
J3Qgd2FudCB0aGUgd29ya2VyJ3MgbWFpbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDI0MDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04MjYsNyAr
ODI2LDcgQEAKIAkJMjYyRDg1QjcxQzBENjUwRjAwNkFDQjYxIC8qIEFpckZpeFBhcnRpYWxSZWdp
c3RlclN0YWxscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMjYyRDg1QjUxQzBENjUwRjAwNkFDQjYxIC8qIEFpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxs
cy5oICovOyB9OwogCQkyNjg0RDQzODFDMDAxNjFDMDA4MUQ2NjMgLyogQWlyTGl2ZW5lc3MuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2ODRENDM3MUMw
MDE2MUMwMDgxRDY2MyAvKiBBaXJMaXZlbmVzcy5oICovOyB9OwogCQkyNjlENjM2RTFCRkJFNUQx
MDAxMDFCMUQgLyogRlRMT3V0cHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyNjlENjM2RDFCRkJFNUQwMDAxMDFCMUQgLyogRlRMT3V0cHV0LmggKi87
IH07Ci0JCTJBMDVBQkQ2MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBMDVB
QkQ0MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkyQTA1QUJENjE5NjFE
RjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTA1QUJENDE5NjFERjI0MDAzNDE3NTAg
LyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmggKi87IH07CiAJCTJBMTExMjQ2MTkyRkNFNzkw
MDVFRTE4RCAvKiBDdXN0b21HZXR0ZXJTZXR0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBMTExMjQ0MTkyRkNFNzkwMDVFRTE4RCAvKiBDdXN0b21H
ZXR0ZXJTZXR0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkyQTQ4RDE5MTE3NzIzNjVCMDBDNjVBNUYgLyogQVBJQ2FsbGJhY2tGdW5jdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIxMUI1NzQx
NzZBMjI0RDAwMEUyQTIzIC8qIEFQSUNhbGxiYWNrRnVuY3Rpb24uaCAqLzsgfTsKIAkJMkE0QkI3
RjMxOEE0MTE3OTAwOEEwRkNEIC8qIEpTTWFuYWdlZFZhbHVlSW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBNEJCN0YyMThBNDExNzkwMDhB
MEZDRCAvKiBKU01hbmFnZWRWYWx1ZUludGVybmFsLmggKi87IH07CkBAIC0xMDYyLDcgKzEwNjIs
NyBAQAogCQk1M0VBRkUyRjIwOERGQUI0MDA3RDUyNEIgLyogdGVzdGFwaS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzFENEUxOTFGNTlDREQyMDBF
QzgzNkMgLyogdGVzdGFwaS5jcHAgKi87IH07CiAJCTUzRUUwMUI2MjE4RjY5MTYwMEFEMUY4RCAv
KiBKU1NjcmlwdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTNFRTAxQjUyMThGNjkwRjAwQUQxRjhEIC8qIEpTU2NyaXB0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTNFRTAxQjgyMThGN0VGRjAwQUQx
RjhEIC8qIEpTU2NyaXB0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzRUUwMUI3MjE4RjdFRkYwMEFEMUY4RCAvKiBKU1NjcmlwdEludGVy
bmFsLmggKi87IH07Ci0JCTUzRjExRjQxMjA5MTM4RDcwMEU0MTFBNyAvKiBKU0ltbXV0YWJsZUJ1
dHRlcmZseS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTNGMTFGNDAyMDkxMzhENzAwRTQxMUE3IC8qIEpTSW1tdXRhYmxlQnV0dGVyZmx5LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTNGMTFGNDEyMDkx
MzhENzAwRTQxMUE3IC8qIEpTSW1tdXRhYmxlQnV0dGVyZmx5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0YxMUY0MDIwOTEzOEQ3MDBFNDExQTcgLyog
SlNJbW11dGFibGVCdXR0ZXJmbHkuaCAqLzsgfTsKIAkJNTNGNDBFODUxRDU4Rjk3NzAwOTlBMUI2
IC8qIFdhc21TZWN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTNGNDBFODQxRDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9ucy5oICovOyB9
OwogCQk1M0Y0MEU4QjFENTkwMUJCMDA5OUExQjYgLyogV2FzbUZ1bmN0aW9uUGFyc2VyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU4QTFENTkw
MUJCMDA5OUExQjYgLyogV2FzbUZ1bmN0aW9uUGFyc2VyLmggKi87IH07CiAJCTUzRjQwRThEMUQ1
OTAxRjIwMDk5QTFCNiAvKiBXYXNtUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU4QzFENTkwMUYyMDA5OUExQjYgLyogV2FzbVBhcnNl
ci5oICovOyB9OwpAQCAtMzEyOCw3ICszMTI4LDYgQEAKIAkJMTQzODZBNzMxREQ2OTg5NTAwODY1
MkM0IC8qIERpcmVjdEV2YWxFeGVjdXRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERpcmVjdEV2YWxFeGVjdXRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTE0Mzg2QTc2MURENjk4OUMwMDg2NTJDNCAvKiBJbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluZGlyZWN0RXZhbEV4ZWN1
dGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDM4NkE3NzFERDY5ODlD
MDA4NjUyQzQgLyogSW5kaXJlY3RFdmFsRXhlY3V0YWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTE0M0JFMjY1MjFDODU3NzcwMDIwQ0QxNyAvKiBDYWNoZWRUeXBlcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRUeXBlcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNDQwMDUxRjBBNTMxRDNCMDAwNUYwNjEgLyogTm9kZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOb2RlLmg7IHBhdGggPSB0ZXN0cy9Ob2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NDAwNTIwMEE1MzFEM0IwMDA1RjA2
MSAvKiBOb2RlLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IE5vZGUuYzsgcGF0
aCA9IHRlc3RzL05vZGUuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0MDA3NDgw
QTUzNkNDMjAwMDVGMDYxIC8qIE5vZGVMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IE5vZGVMaXN0Lmg7IHBhdGggPSB0ZXN0cy9Ob2RlTGlzdC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMzI0Myw3ICszMjQyLDYgQEAKIAkJMTREODU3NzQwQTQ2OTZDODAw
MzIxNDZDIC8qIHRlc3RhcGkuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IG5h
bWUgPSB0ZXN0YXBpLmpzOyBwYXRoID0gQVBJL3Rlc3RzL3Rlc3RhcGkuanM7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTE0REE4MThFMEQ5OUZEMjAwMEIwQTRGQiAvKiBKU0xleGljYWxF
bnZpcm9ubWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0xleGljYWxF
bnZpcm9ubWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNERBODE4RjBEOTlG
RDIwMDBCMEE0RkIgLyogSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkxNERBRkE0NTIxRTNCODcxMDA0QjY4RjcgLyogQ2FjaGVkVHlw
ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FjaGVkVHlwZXMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNERFMEQ2ODBEMDI0MzE0MDBBQUND
QTIgLyogSlNHbG9iYWxPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBs
aW5lRW5kaW5nID0gMDsgcGF0aCA9IEpTR2xvYmFsT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgeGNMYW5ndWFnZVNwZWNpZmljYXRpb25JZGVudGlmaWVyID0geGNvZGUubGFuZy5j
cHA7IH07CiAJCTE0REYwNEQ5MTZCMzk5NkQwMDE2QTUxMyAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5
c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YXRpY1Byb3BlcnR5QW5h
bHlzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRFODRGOTkxNEVFMUFDQzAw
RDZENUQ0IC8qIFdlYWtCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXZWFrQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjYwMiw4
ICs2NjAwLDYgQEAKIAkJCQk5RTcyOTQwOTE5MEYwMzA2MDAxQTkxQjUgLyogQnVuZGxlUGF0aC5t
bSAqLywKIAkJCQkwRkI3RjM4QjE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggKi8sCiAJ
CQkJMEZCN0YzOEMxNUVEOEUzODAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZXMuaCAqLywKLQkJ
CQkxNERBRkE0NTIxRTNCODcxMDA0QjY4RjcgLyogQ2FjaGVkVHlwZXMuY3BwICovLAotCQkJCTE0
M0JFMjY1MjFDODU3NzcwMDIwQ0QxNyAvKiBDYWNoZWRUeXBlcy5oICovLAogCQkJCTBGRUMzQzVG
MUYzNzlGNTMwMEY1OUI2QyAvKiBDYWdlZEJhcnJpZXJQdHIuaCAqLywKIAkJCQlCQ0E2MkRGRTBF
MjgyNjIzMDAwNEYzMEQgLyogQ2FsbERhdGEuY3BwICovLAogCQkJCTE0NUM1MDdGMEQ5REY2M0Iw
MDg4RjZCOSAvKiBDYWxsRGF0YS5oICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J1
aWx0aW5zL0J1aWx0aW5OYW1lcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5jcHAJKHJldmlzaW9uIDI0MDIyMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02Myw3ICs2Myw2IEBAIEJ1aWx0aW5OYW1lczo6QnVpbHRpbk5hbWVzKFZNKiB2bSwgQ29t
bW8KICAgICBKU0NfQ09NTU9OX1BSSVZBVEVfSURFTlRJRklFUlNfRUFDSF9QUk9QRVJUWV9OQU1F
KElOSVRJQUxJWkVfUFJJVkFURV9UT19QVUJMSUNfRU5UUlkpCiAgICAgSlNDX0ZPUkVBQ0hfQlVJ
TFRJTl9GVU5DVElPTl9OQU1FKElOSVRJQUxJWkVfUFVCTElDX1RPX1BSSVZBVEVfRU5UUlkpCiAg
ICAgSlNDX0NPTU1PTl9QUklWQVRFX0lERU5USUZJRVJTX0VBQ0hfUFJPUEVSVFlfTkFNRShJTklU
SUFMSVpFX1BVQkxJQ19UT19QUklWQVRFX0VOVFJZKQotICAgIEpTQ19DT01NT05fUFJJVkFURV9J
REVOVElGSUVSU19FQUNIX1dFTExfS05PV05fU1lNQk9MKElOSVRJQUxJWkVfU1lNQk9MX1BSSVZB
VEVfVE9fUFVCTElDX0VOVFJZKQogICAgIEpTQ19DT01NT05fUFJJVkFURV9JREVOVElGSUVSU19F
QUNIX1dFTExfS05PV05fU1lNQk9MKElOSVRJQUxJWkVfU1lNQk9MX1BVQkxJQ19UT19QUklWQVRF
X0VOVFJZKQogICAgIG1fcHJpdmF0ZVRvUHVibGljTWFwLmFkZChtX2RvbGxhclZNUHJpdmF0ZU5h
bWUuaW1wbCgpLCAmbV9kb2xsYXJWTU5hbWUpOwogICAgIG1fcHVibGljVG9Qcml2YXRlTWFwLmFk
ZChtX2RvbGxhclZNTmFtZS5pbXBsKCksICZtX2RvbGxhclZNUHJpdmF0ZU5hbWUpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAkocmV2aXNp
b24gMjQwMjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsNyArMjEzLDYgQEAgZXh0ZXJuIFN5bWJvbEltcGw6
OlN0YXRpY1N5bWJvbEltcGwgcG9seQogLy8gV2UgY29tbWFuZGVlciB0aGUgcHVibGljVG9Qcml2
YXRlTWFwIHRvIGFsbG93IHVzIHRvIGNvbnZlcnQgcHJpdmF0ZSBzeW1ib2wgbmFtZXMgaW50byB0
aGUgYXBwcm9wcmlhdGUgc3ltYm9sLgogLy8gZS5nLiBAaXRlcmF0b3JTeW1ib2wgcG9pbnRzIHRv
IFN5bWJvbC5pdGVyYXRvciBpbiB0aGlzIG1hcCByYXRoZXIgdGhhbiB0byBhIGFuIGFjdHVhbCBw
cml2YXRlIG5hbWUuCiAvLyBGSVhNRTogVGhpcyBpcyBhIHdlaXJkIGhhY2sgYW5kIHdlIHNob3Vs
ZG4ndCBuZWVkIHRvIGRvIHRoaXMuCi0jZGVmaW5lIElOSVRJQUxJWkVfU1lNQk9MX1BSSVZBVEVf
VE9fUFVCTElDX0VOVFJZKG5hbWUpIG1fcHJpdmF0ZVRvUHVibGljTWFwLmFkZChtXyMjbmFtZSMj
U3ltYm9sLmltcGwoKSwgJm1fIyNuYW1lIyNTeW1ib2xQcml2YXRlSWRlbnRpZmllcik7CiAjZGVm
aW5lIElOSVRJQUxJWkVfU1lNQk9MX1BVQkxJQ19UT19QUklWQVRFX0VOVFJZKG5hbWUpIG1fcHVi
bGljVG9Qcml2YXRlTWFwLmFkZChtXyMjbmFtZSMjU3ltYm9sUHJpdmF0ZUlkZW50aWZpZXIuaW1w
bCgpLCAmbV8jI25hbWUjI1N5bWJvbCk7CiAKIGNsYXNzIEJ1aWx0aW5OYW1lcyB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24g
MjQwMjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg2OSw3ICs4NjksNyBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2so
KQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpzZXRDb25zdGFu
dElkZW50aWZpZXJTZXRSZWdpc3RlcnMoVk0mIHZtLCBjb25zdCBWZWN0b3I8Q29uc3RhbnRJZGVu
dGlmaWVyU2V0RW50cnk+JiBjb25zdGFudHMpCit2b2lkIENvZGVCbG9jazo6c2V0Q29uc3RhbnRJ
ZGVudGlmaWVyU2V0UmVnaXN0ZXJzKFZNJiB2bSwgY29uc3QgVmVjdG9yPENvbnN0YW50SW5kZW50
aWZpZXJTZXRFbnRyeT4mIGNvbnN0YW50cykKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ2xv
YmFsT2JqZWN0LmdldCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkocmV2aXNpb24gMjQwMjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC04OTAsNyArODkwLDcgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgdXBkYXRlQWxsUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKHVu
c2lnbmVkJiBudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIHVuc2lnbmVkJiBu
dW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzKTsKIAotICAgIHZvaWQgc2V0Q29uc3RhbnRJZGVudGlm
aWVyU2V0UmVnaXN0ZXJzKFZNJiwgY29uc3QgVmVjdG9yPENvbnN0YW50SWRlbnRpZmllclNldEVu
dHJ5PiYgY29uc3RhbnRzKTsKKyAgICB2b2lkIHNldENvbnN0YW50SWRlbnRpZmllclNldFJlZ2lz
dGVycyhWTSYsIGNvbnN0IFZlY3RvcjxDb25zdGFudEluZGVudGlmaWVyU2V0RW50cnk+JiBjb25z
dGFudHMpOwogCiAgICAgdm9pZCBzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBWZWN0b3I8V3Jp
dGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRzLCBjb25zdCBWZWN0b3I8U291cmNlQ29kZVJl
cHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgJKHJldmlz
aW9uIDI0MDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5m
by5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSwxMCArODksNiBAQCBzdHJ1Y3QgSGFuZGxlckluZm9C
YXNlIHsKIH07CiAKIHN0cnVjdCBVbmxpbmtlZEhhbmRsZXJJbmZvIDogcHVibGljIEhhbmRsZXJJ
bmZvQmFzZSB7Ci0gICAgVW5saW5rZWRIYW5kbGVySW5mbygpCi0gICAgewotICAgIH0KLQogICAg
IFVubGlua2VkSGFuZGxlckluZm8odWludDMyX3Qgc3RhcnQsIHVpbnQzMl90IGVuZCwgdWludDMy
X3QgdGFyZ2V0LCBIYW5kbGVyVHlwZSBoYW5kbGVyVHlwZSkKICAgICB7CiAgICAgICAgIHRoaXMt
PnN0YXJ0ID0gc3RhcnQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5z
dHJ1Y3Rpb25TdHJlYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uaAkocmV2aXNpb24gMjQwMjIwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uU3RyZWFtLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDcgKzM5LDYgQEAgY2xhc3MgSW5zdHJ1Y3Rpb25TdHJlYW0gewogICAgIHVzaW5nIElu
c3RydWN0aW9uQnVmZmVyID0gVmVjdG9yPHVpbnQ4X3QsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93
PjsKIAogICAgIGZyaWVuZCBjbGFzcyBJbnN0cnVjdGlvblN0cmVhbVdyaXRlcjsKLSAgICBmcmll
bmQgY2xhc3MgQ2FjaGVkSW5zdHJ1Y3Rpb25TdHJlYW07CiBwdWJsaWM6CiAgICAgc2l6ZV90IHNp
emVJbkJ5dGVzKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCShyZXZpc2lvbiAyNDAyMjApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtNjUsMTUgKzY1LDEyIEBAIGNsYXNzIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s7
CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTsKIHN0cnVjdCBFeGVjdXRhYmxlSW5m
bzsKIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KLWNsYXNzIENhY2hlZENvZGVC
bG9jazsKLQogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZFZhbHVlUHJvZmlsZTsKIHR5cGVkZWYg
dW5zaWduZWQgVW5saW5rZWRBcnJheVByb2ZpbGU7CiB0eXBlZGVmIHVuc2lnbmVkIFVubGlua2Vk
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKIHR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRPYmplY3RB
bGxvY2F0aW9uUHJvZmlsZTsKIHR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRMTEludENhbGxMaW5r
SW5mbzsKLXVzaW5nIENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5ID0gc3RkOjpwYWlyPElkZW50
aWZpZXJTZXQsIHVuc2lnbmVkPjsKK3VzaW5nIENvbnN0YW50SW5kZW50aWZpZXJTZXRFbnRyeSA9
IHN0ZDo6cGFpcjxJZGVudGlmaWVyU2V0LCB1bnNpZ25lZD47CiAKIHN0cnVjdCBVbmxpbmtlZFN0
cmluZ0p1bXBUYWJsZSB7CiAgICAgc3RydWN0IE9mZnNldExvY2F0aW9uIHsKQEAgLTE3MSw3ICsx
NjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRSZWdp
c3RlcnMuc2l6ZSgpOwogICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmFwcGVuZChXcml0ZUJh
cnJpZXI8VW5rbm93bj4oKSk7CiAgICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uLmFwcGVuZChTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyKTsKLSAgICAgICAg
bV9jb25zdGFudElkZW50aWZpZXJTZXRzLmFwcGVuZChDb25zdGFudElkZW50aWZpZXJTZXRFbnRy
eShzZXQsIHJlc3VsdCkpOworICAgICAgICBtX2NvbnN0YW50SWRlbnRpZmllclNldHMuYXBwZW5k
KENvbnN0YW50SW5kZW50aWZpZXJTZXRFbnRyeShzZXQsIHJlc3VsdCkpOwogICAgIH0KIAogICAg
IHVuc2lnbmVkIGFkZENvbnN0YW50KEpTVmFsdWUgdiwgU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
IHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiA9IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3Ro
ZXIpCkBAIC0yMDUsNyArMjAyLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9saW5rVGlt
ZUNvbnN0YW50c1tpbmRleF07CiAgICAgfQogICAgIGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8
VW5rbm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3Rl
cnM7IH0KLSAgICBjb25zdCBWZWN0b3I8Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+JiBjb25z
dGFudElkZW50aWZpZXJTZXRzKCkgeyByZXR1cm4gbV9jb25zdGFudElkZW50aWZpZXJTZXRzOyB9
CisgICAgY29uc3QgVmVjdG9yPENvbnN0YW50SW5kZW50aWZpZXJTZXRFbnRyeT4mIGNvbnN0YW50
SWRlbnRpZmllclNldHMoKSB7IHJldHVybiBtX2NvbnN0YW50SWRlbnRpZmllclNldHM7IH0KICAg
ICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoaW50IGluZGV4
KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFu
dFJlZ2lzdGVySW5kZXhdOyB9CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzQ29uc3RhbnRSZWdp
c3RlckluZGV4KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXggPj0gRmlyc3RDb25zdGFu
dFJlZ2lzdGVySW5kZXg7IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQo
aW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmly
c3RDb25zdGFudFJlZ2lzdGVySW5kZXhdLmdldCgpOyB9CkBAIC0zNzAsMTAgKzM2Nyw2IEBAIHB1
YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIFVubGlua2VkQ29kZUJsb2NrKFZNKiwgU3RydWN0dXJl
KiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiwgRGVidWdnZXJNb2RlKTsKLQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Ci0gICAgVW5saW5rZWRDb2RlQmxvY2so
RGVjb2RlciYsIFN0cnVjdHVyZSosIGNvbnN0IENhY2hlZENvZGVCbG9jazxDb2RlQmxvY2tUeXBl
PiYpOwotCiAgICAgflVubGlua2VkQ29kZUJsb2NrKCk7CiAKICAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiB2bSkKQEAgLTM4NSw5ICszNzgsNiBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBCeXRlY29kZVJld3JpdGVyOwogICAgIGZyaWVuZCBjbGFzcyBCeXRlY29kZUdlbmVyYXRvcjsK
IAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Ci0gICAgZnJpZW5kIGNsYXNz
IENhY2hlZENvZGVCbG9jazsKLQogICAgIHZvaWQgYXBwbHlNb2RpZmljYXRpb24oQnl0ZWNvZGVS
ZXdyaXRlciYsIEluc3RydWN0aW9uU3RyZWFtV3JpdGVyJik7CiAKICAgICB2b2lkIGNyZWF0ZVJh
cmVEYXRhSWZOZWNlc3NhcnkoKQpAQCAtNDU0LDcgKzQ0NCw3IEBAIHByaXZhdGU6CiAgICAgVmVj
dG9yPElkZW50aWZpZXI+IG1faWRlbnRpZmllcnM7CiAgICAgVmVjdG9yPEJpdFZlY3Rvcj4gbV9i
aXRWZWN0b3JzOwogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+IG1fY29uc3RhbnRS
ZWdpc3RlcnM7Ci0gICAgVmVjdG9yPENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiBtX2NvbnN0
YW50SWRlbnRpZmllclNldHM7CisgICAgVmVjdG9yPENvbnN0YW50SW5kZW50aWZpZXJTZXRFbnRy
eT4gbV9jb25zdGFudElkZW50aWZpZXJTZXRzOwogICAgIFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24+IG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOwogICAgIHR5cGVk
ZWYgVmVjdG9yPFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4+IEZ1bmN0
aW9uRXhwcmVzc2lvblZlY3RvcjsKICAgICBGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3IgbV9mdW5j
dGlvbkRlY2xzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
RXZhbENvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZEV2YWxDb2RlQmxvY2suaAkocmV2aXNpb24gMjQwMjIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRXZhbENvZGVCbG9jay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw4ICsyOSw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBDYWNo
ZWRFdmFsQ29kZUJsb2NrOwotCiBjbGFzcyBVbmxpbmtlZEV2YWxDb2RlQmxvY2sgZmluYWwgOiBw
dWJsaWMgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgewogcHVibGljOgogICAgIHR5cGVkZWYgVW5s
aW5rZWRHbG9iYWxDb2RlQmxvY2sgQmFzZTsKQEAgLTYxLDE1ICs1OSwxMSBAQCBwdWJsaWM6CiAg
ICAgICAgIG1fZnVuY3Rpb25Ib2lzdGluZ0NhbmRpZGF0ZXMgPSBXVEZNb3ZlKGZ1bmN0aW9uSG9p
c3RpbmdDYW5kaWRhdGVzKTsKICAgICB9CiBwcml2YXRlOgotICAgIGZyaWVuZCBDYWNoZWRFdmFs
Q29kZUJsb2NrOwotCiAgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBEZWJ1Z2dlck1vZGUgZGVi
dWdnZXJNb2RlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgRXZhbENvZGUsIGluZm8s
IGRlYnVnZ2VyTW9kZSkKICAgICB7CiAgICAgfQogCi0gICAgVW5saW5rZWRFdmFsQ29kZUJsb2Nr
KERlY29kZXImLCBjb25zdCBDYWNoZWRFdmFsQ29kZUJsb2NrJik7Ci0KICAgICBWZWN0b3I8SWRl
bnRpZmllciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fdmFyaWFibGVzOwogICAgIFZlY3Rv
cjxJZGVudGlmaWVyLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9mdW5jdGlvbkhvaXN0aW5n
Q2FuZGlkYXRlczsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jay5oCShyZXZpc2lvbiAyNDAyMjAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkNvZGVC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw2IEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCi1jbGFzcyBDYWNoZWRGdW5jdGlvbkNvZGVCbG9jazsKLQogY2xhc3MgVW5saW5rZWRGdW5j
dGlvbkNvZGVCbG9jayBmaW5hbCA6IHB1YmxpYyBVbmxpbmtlZENvZGVCbG9jayB7CiBwdWJsaWM6
CiAgICAgdHlwZWRlZiBVbmxpbmtlZENvZGVCbG9jayBCYXNlOwpAQCAtNDYsMTQgKzQ0LDEwIEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiBwcml2YXRlOgot
ICAgIGZyaWVuZCBDYWNoZWRGdW5jdGlvbkNvZGVCbG9jazsKLQogICAgIFVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUgY29kZVR5
cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2Rl
KQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgY29kZVR5cGUsIGluZm8sIGRlYnVnZ2Vy
TW9kZSkKICAgICB7CiAgICAgfQotCi0gICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayhEZWNv
ZGVyJiwgY29uc3QgQ2FjaGVkRnVuY3Rpb25Db2RlQmxvY2smKTsKICAgICAKIHB1YmxpYzoKICAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
LmgJKHJldmlzaW9uIDI0MDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMyArMzks
MTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIERlY29kZXI7CiBjbGFzcyBGdW5jdGlv
bk1ldGFkYXRhTm9kZTsKIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKIGNsYXNzIFBhcnNlckVy
cm9yOwogY2xhc3MgU291cmNlUHJvdmlkZXI7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrOwotY2xhc3MgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOwogCiBlbnVtIFVubGlua2VkRnVu
Y3Rpb25LaW5kIHsKICAgICBVbmxpbmtlZE5vcm1hbEZ1bmN0aW9uLApAQCAtNTYsNyArNTQsNiBA
QCBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSBmaW5hbCA6CiBwdWJsaWM6CiAgICAg
ZnJpZW5kIGNsYXNzIENvZGVDYWNoZTsKICAgICBmcmllbmQgY2xhc3MgVk07Ci0gICAgZnJpZW5k
IENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTsKIAogICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CiAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwpAQCAtMTUwLDcgKzE0Nyw2IEBAIHB1YmxpYzoK
IAogcHJpdmF0ZToKICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShWTSosIFN0cnVjdHVy
ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBGdW5jdGlvbk1ldGFkYXRhTm9kZSosIFVubGlua2VkRnVu
Y3Rpb25LaW5kLCBDb25zdHJ1Y3RBYmlsaXR5LCBKU1BhcnNlclNjcmlwdE1vZGUsIFZhcmlhYmxl
RW52aXJvbm1lbnQmLCAgSlNDOjpEZXJpdmVkQ29udGV4dFR5cGUsIGJvb2wgaXNCdWlsdGluRGVm
YXVsdENsYXNzQ29uc3RydWN0b3IpOwotICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKERl
Y29kZXImLCBWYXJpYWJsZUVudmlyb25tZW50JiwgY29uc3QgQ2FjaGVkRnVuY3Rpb25FeGVjdXRh
YmxlJik7CiAKICAgICB1bnNpZ25lZCBtX2ZpcnN0TGluZU9mZnNldDsKICAgICB1bnNpZ25lZCBt
X2xpbmVDb3VudDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZEdsb2JhbENvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZEdsb2JhbENvZGVCbG9jay5oCShyZXZpc2lvbiAyNDAyMjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRHbG9iYWxDb2RlQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMzgsMTIgKzM4LDYgQEAgcHJvdGVjdGVkOgogICAgICAgICA6IEJh
c2Uodm0sIHN0cnVjdHVyZSwgY29kZVR5cGUsIGluZm8sIGRlYnVnZ2VyTW9kZSkKICAgICB7CiAg
ICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KLSAgICBVbmxpbmtl
ZEdsb2JhbENvZGVCbG9jayhEZWNvZGVyJiBkZWNvZGVyLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
Y29uc3QgQ2FjaGVkQ29kZUJsb2NrPENvZGVCbG9ja1R5cGU+JiBjYWNoZWRDb2RlQmxvY2spCi0g
ICAgICAgIDogQmFzZShkZWNvZGVyLCBzdHJ1Y3R1cmUsIGNhY2hlZENvZGVCbG9jaykKLSAgICB7
Ci0gICAgfQogfTsKIAogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkTWV0YWRhdGFUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAkocmV2aXNpb24gMjQwMjIwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw2IEBAIGNsYXNzIE1ldGFkYXRhVGFibGU7CiBjbGFz
cyBVbmxpbmtlZE1ldGFkYXRhVGFibGUgewogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7CiAgICAgZnJpZW5kIGNsYXNzIE1ldGFkYXRhVGFibGU7Ci0gICAgZnJpZW5kIGNs
YXNzIENhY2hlZE1ldGFkYXRhVGFibGU7CiAKIHB1YmxpYzoKICAgICBzdHJ1Y3QgTGlua2luZ0Rh
dGEgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTW9kdWxl
UHJvZ3JhbUNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suaAkocmV2aXNpb24gMjQwMjIw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTW9kdWxlUHJvZ3Jh
bUNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw5ICsyOSw2IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCi1jbGFzcyBEZWNvZGVyOwotY2xhc3MgQ2FjaGVkTW9kdWxlQ29kZUJsb2NrOwot
CiBjbGFzcyBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sgZmluYWwgOiBwdWJsaWMgVW5s
aW5rZWRHbG9iYWxDb2RlQmxvY2sgewogcHVibGljOgogICAgIHR5cGVkZWYgVW5saW5rZWRHbG9i
YWxDb2RlQmxvY2sgQmFzZTsKQEAgLTc3LDE1ICs3NCwxMSBAQCBwdWJsaWM6CiAgICAgfQogCiBw
cml2YXRlOgotICAgIGZyaWVuZCBDYWNoZWRNb2R1bGVDb2RlQmxvY2s7Ci0KICAgICBVbmxpbmtl
ZE1vZHVsZVByb2dyYW1Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29u
c3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUpCiAgICAg
ICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBNb2R1bGVDb2RlLCBpbmZvLCBkZWJ1Z2dlck1vZGUp
CiAgICAgewogICAgIH0KIAotICAgIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayhEZWNv
ZGVyJiwgY29uc3QgQ2FjaGVkTW9kdWxlQ29kZUJsb2NrJik7Ci0KICAgICBpbnQgbV9tb2R1bGVF
bnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldCB7IDAgfTsKIAogcHVi
bGljOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkUHJvZ3Jh
bUNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaAkocmV2aXNpb24gMjQwMjIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBD
YWNoZWRQcm9ncmFtQ29kZUJsb2NrOwotCiBjbGFzcyBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sg
ZmluYWwgOiBwdWJsaWMgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgewogcHVibGljOgogICAgIHR5
cGVkZWYgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgQmFzZTsKQEAgLTUyLDE1ICs1MCwxMSBAQCBw
dWJsaWM6CiAgICAgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbERlY2xhcmF0aW9u
cygpIGNvbnN0IHsgcmV0dXJuIG1fbGV4aWNhbERlY2xhcmF0aW9uczsgfQogCiBwcml2YXRlOgot
ICAgIGZyaWVuZCBDYWNoZWRQcm9ncmFtQ29kZUJsb2NrOwotCiAgICAgVW5saW5rZWRQcm9ncmFt
Q29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJ
bmZvJiBpbmZvLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQogICAgICAgICA6IEJhc2Uodm0s
IHN0cnVjdHVyZSwgR2xvYmFsQ29kZSwgaW5mbywgZGVidWdnZXJNb2RlKQogICAgIHsKICAgICB9
CiAKLSAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2soRGVjb2RlciYsIGNvbnN0IENhY2hlZFBy
b2dyYW1Db2RlQmxvY2smKTsKLQogICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgbV92YXJEZWNsYXJh
dGlvbnM7CiAgICAgVmFyaWFibGVFbnZpcm9ubWVudCBtX2xleGljYWxEZWNsYXJhdGlvbnM7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcAkocmV2aXNpb24gMjQwMjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNiBAQAog
I2luY2x1ZGUgIkNhbGxGcmFtZUNsb3N1cmUuaCIKICNpbmNsdWRlICJDYXRjaFNjb3BlLmgiCiAj
aW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiQ29kZUNhY2hlLmgiCiAjaW5jbHVkZSAi
RGlyZWN0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkRlYnVnZ2Vy
LmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGUuaAkocmV2
aXNpb24gMjQwMjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDggKzMzLDYgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgY2xhc3MgU291cmNlQ29kZSA6IHB1YmxpYyBVbmxpbmtlZFNvdXJjZUNvZGUgewotICAgICAg
ICBmcmllbmQgY2xhc3MgQ2FjaGVkU291cmNlQ29kZTsKLQogICAgIHB1YmxpYzoKICAgICAgICAg
U291cmNlQ29kZSgpCiAgICAgICAgICAgICA6IFVubGlua2VkU291cmNlQ29kZSgpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGVLZXkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGVLZXkuaAkocmV2aXNpb24g
MjQwMjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2RlS2V5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDYgQEAgZW51bSBjbGFzcyBUeXBlUHJvZmlsZXJF
bmFibGVkIHsgTm8sIFllcwogZW51bSBjbGFzcyBDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZCB7
IE5vLCBZZXMgfTsKIAogY2xhc3MgU291cmNlQ29kZUZsYWdzIHsKLSAgICBmcmllbmQgY2xhc3Mg
Q2FjaGVkU291cmNlQ29kZUtleTsKLQogcHVibGljOgogICAgIFNvdXJjZUNvZGVGbGFncygpID0g
ZGVmYXVsdDsKIApAQCAtNzIsOCArNzAsNiBAQCBwcml2YXRlOgogfTsKIAogY2xhc3MgU291cmNl
Q29kZUtleSB7Ci0gICAgZnJpZW5kIGNsYXNzIENhY2hlZFNvdXJjZUNvZGVLZXk7Ci0KIHB1Ymxp
YzoKICAgICBTb3VyY2VDb2RlS2V5KCkKICAgICB7CkBAIC0xMTgsMTEgKzExNCw2IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICYmIHN0cmluZygpID09IG90aGVyLnN0cmluZygpOwogICAgIH0KIAot
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTb3VyY2VDb2RlS2V5JiBvdGhlcikgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKLSAgICB9Ci0KICAgICBzdHJ1
Y3QgSGFzaCB7CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFNvdXJjZUNvZGVL
ZXkmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQogICAgICAgICBzdGF0aWMgYm9vbCBlcXVh
bChjb25zdCBTb3VyY2VDb2RlS2V5JiBhLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBiKSB7IHJldHVy
biBhID09IGI7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVW5saW5rZWRT
b3VyY2VDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9V
bmxpbmtlZFNvdXJjZUNvZGUuaAkocmV2aXNpb24gMjQwMjIwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9VbmxpbmtlZFNvdXJjZUNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzUs
OSArMzUsNiBAQAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBVbmxpbmtlZFNvdXJjZUNv
ZGUgewotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTb3VyY2VUeXBlPgotICAgICAgICBmcmll
bmQgY2xhc3MgQ2FjaGVkVW5saW5rZWRTb3VyY2VDb2RlU2hhcGU7Ci0KICAgICBwdWJsaWM6CiAg
ICAgICAgIFVubGlua2VkU291cmNlQ29kZSgpCiAgICAgICAgICAgICA6IG1fcHJvdmlkZXIoMCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVmFyaWFibGVFbnZpcm9ubWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVmFyaWFibGVFbnZp
cm9ubWVudC5oCShyZXZpc2lvbiAyNDAyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDggKzExNiw2
IEBAIHB1YmxpYzoKICAgICBib29sIGlzRXZlcnl0aGluZ0NhcHR1cmVkKCkgY29uc3QgeyByZXR1
cm4gbV9pc0V2ZXJ5dGhpbmdDYXB0dXJlZDsgfQogCiBwcml2YXRlOgotICAgIGZyaWVuZCBjbGFz
cyBDYWNoZWRWYXJpYWJsZUVudmlyb25tZW50OwotCiAgICAgTWFwIG1fbWFwOwogICAgIGJvb2wg
bV9pc0V2ZXJ5dGhpbmdDYXB0dXJlZCB7IGZhbHNlIH07CiB9OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAkocmV2aXNpb24gMjQwMjIwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDIwMjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDYWNoZWRUeXBl
cy5oIgotCi0jaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCi0jaW5jbHVkZSAi
SlNDYXN0LmgiCi0jaW5jbHVkZSAiSlNJbW11dGFibGVCdXR0ZXJmbHkuaCIKLSNpbmNsdWRlICJK
U1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5oIgotI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50c1Rh
YmxlLmgiCi0jaW5jbHVkZSAiU291cmNlQ29kZUtleS5oIgotI2luY2x1ZGUgIlVubGlua2VkRXZh
bENvZGVCbG9jay5oIgotI2luY2x1ZGUgIlVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suaCIKLSNp
bmNsdWRlICJVbmxpbmtlZE1ldGFkYXRhVGFibGVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiVW5saW5r
ZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiVW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrLmgiCi0jaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KLSNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0
b21pY1N0cmluZ0ltcGwuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBULCB0eXBlbmFtZSA9IHZvaWQ+Ci1zdHJ1Y3QgU291cmNlVHlwZUltcGwgewotICAgIHVzaW5n
IHR5cGUgPSBUOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBTb3VyY2VUeXBl
SW1wbDxULCBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX2Z1bmRhbWVudGFsPFQ+Ojp2YWx1ZSAm
JiAhc3RkOjppc19zYW1lPHR5cGVuYW1lIFQ6OlNvdXJjZVR5cGVfLCB2b2lkPjo6dmFsdWU+PiB7
Ci0gICAgdXNpbmcgdHlwZSA9IHR5cGVuYW1lIFQ6OlNvdXJjZVR5cGVfOwotCi19OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotdXNpbmcgU291cmNlVHlwZSA9IHR5cGVuYW1lIFNvdXJjZVR5cGVJ
bXBsPFQ+Ojp0eXBlOwotCi1jbGFzcyBFbmNvZGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShFbmNvZGVyKTsKLSAgICBXVEZfRk9SQklEX0hFQVBfQUxMT0NBVElPTjsKLQotcHVibGljOgot
ICAgIGNsYXNzIEFsbG9jYXRpb24gewotICAgICAgICBmcmllbmQgY2xhc3MgRW5jb2RlcjsKLQot
ICAgIHB1YmxpYzoKLSAgICAgICAgdWludDhfdCogYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9i
dWZmZXI7IH0KLSAgICAgICAgcHRyZGlmZl90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zm
c2V0OyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBBbGxvY2F0aW9uKHVpbnQ4X3QqIGJ1ZmZl
ciwgcHRyZGlmZl90IG9mZnNldCkKLSAgICAgICAgICAgIDogbV9idWZmZXIoYnVmZmVyKQotICAg
ICAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAg
ICAgIHVpbnQ4X3QqIG1fYnVmZmVyOwotICAgICAgICBwdHJkaWZmX3QgbV9vZmZzZXQ7Ci0gICAg
fTsKLQotICAgIEVuY29kZXIoVk0mIHZtKQotICAgICAgICA6IG1fdm0odm0pCi0gICAgICAgICwg
bV9iYXNlT2Zmc2V0KDApCi0gICAgICAgICwgbV9jdXJyZW50UGFnZShudWxscHRyKQotICAgIHsK
LSAgICAgICAgYWxsb2NhdGVOZXdQYWdlKCk7Ci0gICAgfQotCi0gICAgVk0mIHZtKCkgeyByZXR1
cm4gbV92bTsgfQotCi0gICAgQWxsb2NhdGlvbiBtYWxsb2ModW5zaWduZWQgc2l6ZSkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChzaXplKTsKLSAgICAgICAgcHRyZGlmZl90IG9mZnNldDsKLSAgICAg
ICAgaWYgKG1fY3VycmVudFBhZ2UtPm1hbGxvYyhzaXplLCBvZmZzZXQpKQotICAgICAgICAgICAg
cmV0dXJuIEFsbG9jYXRpb24geyBtX2N1cnJlbnRQYWdlLT5idWZmZXIoKSArIG9mZnNldCwgbV9i
YXNlT2Zmc2V0ICsgb2Zmc2V0IH07Ci0gICAgICAgIGFsbG9jYXRlTmV3UGFnZShzaXplKTsKLSAg
ICAgICAgcmV0dXJuIG1hbGxvYyhzaXplKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotICAgIFQqIG1hbGxvYygpCi0gICAgewotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxUKj4obWFsbG9jKHNpemVvZihUKSkuYnVmZmVyKCkpOwotICAgIH0KLQotICAgIHB0cmRp
ZmZfdCBvZmZzZXRPZihjb25zdCB2b2lkKiBhZGRyZXNzKQotICAgIHsKLSAgICAgICAgcHRyZGlm
Zl90IG9mZnNldDsKLSAgICAgICAgcHRyZGlmZl90IGJhc2VPZmZzZXQgPSAwOwotICAgICAgICBm
b3IgKGNvbnN0IGF1dG8mIHBhZ2UgOiBtX3BhZ2VzKSB7Ci0gICAgICAgICAgICBpZiAocGFnZS5n
ZXRPZmZzZXQoYWRkcmVzcywgb2Zmc2V0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYmFzZU9m
ZnNldCArIG9mZnNldDsKLSAgICAgICAgICAgIGJhc2VPZmZzZXQgKz0gcGFnZS5zaXplKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotCi0gICAgdm9pZCBjYWNoZVB0cihjb25zdCB2b2lkKiBwdHIsIHB0
cmRpZmZfdCBvZmZzZXQpCi0gICAgewotICAgICAgICBtX3B0clRvT2Zmc2V0TWFwLmFkZChwdHIs
IG9mZnNldCk7Ci0gICAgfQotCi0gICAgV1RGOjpPcHRpb25hbDxwdHJkaWZmX3Q+IG9mZnNldEZv
clB0cihjb25zdCB2b2lkKiBwdHIpCi0gICAgewotICAgICAgICBhdXRvIGl0ID0gbV9wdHJUb09m
ZnNldE1hcC5maW5kKHB0cik7Ci0gICAgICAgIGlmIChpdCA9PSBtX3B0clRvT2Zmc2V0TWFwLmVu
ZCgpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIHsg
aXQtPnZhbHVlIH07Ci0gICAgfQotCi0gICAgc3RkOjpwYWlyPE1hbGxvY1B0cjx1aW50OF90Piwg
c2l6ZV90PiByZWxlYXNlKCkKLSAgICB7Ci0gICAgICAgIHNpemVfdCBzaXplID0gbV9iYXNlT2Zm
c2V0ICsgbV9jdXJyZW50UGFnZS0+c2l6ZSgpOwotICAgICAgICBNYWxsb2NQdHI8dWludDhfdD4g
YnVmZmVyID0gTWFsbG9jUHRyPHVpbnQ4X3Q+OjptYWxsb2Moc2l6ZSk7Ci0gICAgICAgIHVuc2ln
bmVkIG9mZnNldCA9IDA7Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYgcGFnZSA6IG1fcGFnZXMp
IHsKLSAgICAgICAgICAgIG1lbWNweShidWZmZXIuZ2V0KCkgKyBvZmZzZXQsIHBhZ2UuYnVmZmVy
KCksIHBhZ2Uuc2l6ZSgpKTsKLSAgICAgICAgICAgIG9mZnNldCArPSBwYWdlLnNpemUoKTsKLSAg
ICAgICAgfQotICAgICAgICBSRUxFQVNFX0FTU0VSVChvZmZzZXQgPT0gc2l6ZSk7Ci0gICAgICAg
IHJldHVybiB7IFdURk1vdmUoYnVmZmVyKSwgc2l6ZSB9OwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICBjbGFzcyBQYWdlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFBhZ2Uoc2l6ZV90IHNpemUpCi0g
ICAgICAgICAgICA6IG1fb2Zmc2V0KDApCi0gICAgICAgICAgICAsIG1fY2FwYWNpdHkoc2l6ZSkK
LSAgICAgICAgewotICAgICAgICAgICAgbV9idWZmZXIgPSBNYWxsb2NQdHI8dWludDhfdD46Om1h
bGxvYyhzaXplKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgbWFsbG9jKHNpemVfdCBzaXpl
LCBwdHJkaWZmX3QmIHJlc3VsdCkKLSAgICAgICAgewotICAgICAgICAgICAgc2l6ZV90IGFsaWdu
bWVudCA9IHN0ZDo6bWluKGFsaWdub2Yoc3RkOjptYXhfYWxpZ25fdCksIHN0YXRpY19jYXN0PHNp
emVfdD4oV1RGOjpyb3VuZFVwVG9Qb3dlck9mVHdvKHNpemUpKSk7Ci0gICAgICAgICAgICBwdHJk
aWZmX3Qgb2Zmc2V0ID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKGFsaWdubWVudCwgbV9vZmZz
ZXQpOwotICAgICAgICAgICAgc2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihhbGlnbm1l
bnQsIHNpemUpOwotICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4ob2Zmc2V0ICsg
c2l6ZSkgPiBtX2NhcGFjaXR5KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICAgICAgICAgcmVzdWx0ID0gb2Zmc2V0OwotICAgICAgICAgICAgbV9vZmZzZXQgPSBvZmZzZXQg
KyBzaXplOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICB1
aW50OF90KiBidWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5nZXQoKTsgfQotICAgICAg
ICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4obV9vZmZz
ZXQpOyB9Ci0KLSAgICAgICAgYm9vbCBnZXRPZmZzZXQoY29uc3Qgdm9pZCogYWRkcmVzcywgcHRy
ZGlmZl90JiByZXN1bHQpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4
X3QqIGFkZHIgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYWRkcmVzcyk7Ci0gICAgICAg
ICAgICBpZiAoYWRkciA+PSBtX2J1ZmZlci5nZXQoKSAmJiBhZGRyIDwgbV9idWZmZXIuZ2V0KCkg
KyBtX29mZnNldCkgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGFkZHIgLSBtX2J1ZmZlci5n
ZXQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAg
TWFsbG9jUHRyPHVpbnQ4X3Q+IG1fYnVmZmVyOwotICAgICAgICBwdHJkaWZmX3QgbV9vZmZzZXQ7
Ci0gICAgICAgIHNpemVfdCBtX2NhcGFjaXR5OwotICAgIH07Ci0KLSAgICB2b2lkIGFsbG9jYXRl
TmV3UGFnZShzaXplX3Qgc2l6ZSA9IDApCi0gICAgewotICAgICAgICBzdGF0aWMgc2l6ZV90IG1p
blBhZ2VTaXplID0gV1RGOjpwYWdlU2l6ZSgpOwotICAgICAgICBpZiAobV9jdXJyZW50UGFnZSkK
LSAgICAgICAgICAgIG1fYmFzZU9mZnNldCArPSBtX2N1cnJlbnRQYWdlLT5zaXplKCk7Ci0gICAg
ICAgIGlmIChzaXplIDwgbWluUGFnZVNpemUpCi0gICAgICAgICAgICBzaXplID0gbWluUGFnZVNp
emU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRp
cGxlT2YobWluUGFnZVNpemUsIHNpemUpOwotICAgICAgICBtX3BhZ2VzLmFwcGVuZChQYWdlIHsg
c2l6ZSB9KTsKLSAgICAgICAgbV9jdXJyZW50UGFnZSA9ICZtX3BhZ2VzLmxhc3QoKTsKLSAgICB9
Ci0KLSAgICBWTSYgbV92bTsKLSAgICBwdHJkaWZmX3QgbV9iYXNlT2Zmc2V0OwotICAgIFBhZ2Uq
IG1fY3VycmVudFBhZ2U7Ci0gICAgVmVjdG9yPFBhZ2U+IG1fcGFnZXM7Ci0gICAgSGFzaE1hcDxj
b25zdCB2b2lkKiwgcHRyZGlmZl90PiBtX3B0clRvT2Zmc2V0TWFwOwotfTsKLQotY2xhc3MgRGVj
b2RlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGVjb2Rlcik7Ci0gICAgV1RGX0ZPUkJJ
RF9IRUFQX0FMTE9DQVRJT047Ci0KLXB1YmxpYzoKLSAgICBEZWNvZGVyKFZNJiB2bSwgY29uc3Qg
dm9pZCogYmFzZUFkZHJlc3MsIHNpemVfdCBzaXplKQotICAgICAgICA6IG1fdm0odm0pCi0gICAg
ICAgICwgbV9iYXNlQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihiYXNl
QWRkcmVzcykpCi0jaWZuZGVmIE5ERUJVRwotICAgICAgICAsIG1fc2l6ZShzaXplKQotI2VuZGlm
Ci0gICAgewotICAgICAgICBVTlVTRURfUEFSQU0oc2l6ZSk7Ci0gICAgfQotCi0gICAgfkRlY29k
ZXIoKQotICAgIHsKLSAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9maW5hbGl6ZXJzKQotICAg
ICAgICAgICAgcGFpci52YWx1ZSgpOwotICAgIH0KLQotICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1f
dm07IH0KLQotICAgIHB0cmRpZmZfdCBvZmZzZXRPZihjb25zdCB2b2lkKiBwdHIpCi0gICAgewot
ICAgICAgICBjb25zdCB1aW50OF90KiBhZGRyID0gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+
KHB0cik7Ci0gICAgICAgIEFTU0VSVChhZGRyID49IG1fYmFzZUFkZHJlc3MgJiYgYWRkciA8IG1f
YmFzZUFkZHJlc3MgKyBtX3NpemUpOwotICAgICAgICByZXR1cm4gYWRkciAtIG1fYmFzZUFkZHJl
c3M7Ci0gICAgfQotCi0gICAgdm9pZCBjYWNoZU9mZnNldChwdHJkaWZmX3Qgb2Zmc2V0LCB2b2lk
KiBwdHIpCi0gICAgewotICAgICAgICBtX29mZnNldFRvUHRyTWFwLmFkZChvZmZzZXQsIHB0cik7
Ci0gICAgfQotCi0gICAgV1RGOjpPcHRpb25hbDx2b2lkKj4gcHRyRm9yT2Zmc2V0KHB0cmRpZmZf
dCBvZmZzZXQpCi0gICAgewotICAgICAgICBhdXRvIGl0ID0gbV9vZmZzZXRUb1B0ck1hcC5maW5k
KG9mZnNldCk7Ci0gICAgICAgIGlmIChpdCA9PSBtX29mZnNldFRvUHRyTWFwLmVuZCgpKQotICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIHsgaXQtPnZhbHVl
IH07Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGFk
ZEZpbmFsaXplcihwdHJkaWZmX3Qgb2Zmc2V0LCBjb25zdCBGdW5jdG9yJiBmbikKLSAgICB7Ci0g
ICAgICAgIG1fZmluYWxpemVycy5hZGQob2Zmc2V0LCBmbik7Ci0gICAgfQotCi1wcml2YXRlOgot
ICAgIFZNJiBtX3ZtOwotICAgIGNvbnN0IHVpbnQ4X3QqIG1fYmFzZUFkZHJlc3M7Ci0jaWZuZGVm
IE5ERUJVRwotICAgIHNpemVfdCBtX3NpemU7Ci0jZW5kaWYKLSAgICBIYXNoTWFwPHB0cmRpZmZf
dCwgdm9pZCo+IG1fb2Zmc2V0VG9QdHJNYXA7Ci0gICAgSGFzaE1hcDxwdHJkaWZmX3QsIHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPj4gbV9maW5hbGl6ZXJzOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLXN0YXRpYyBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxULCBTb3VyY2VUeXBlPFQ+
Pjo6dmFsdWU+IGVuY29kZShFbmNvZGVyJiwgVCYgZHN0LCBjb25zdCBTb3VyY2VUeXBlPFQ+JiBz
cmMpCi17Ci0gICAgZHN0ID0gc3JjOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RhdGlj
IHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZTxULCBTb3VyY2VUeXBlPFQ+Pjo6dmFsdWU+
IGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBUJiBkc3QsIGNvbnN0IFNvdXJjZVR5cGU8VD4mIHNy
YykKLXsKLSAgICBkc3QuZW5jb2RlKGVuY29kZXIsIHNyYyk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3M+Ci1zdGF0aWMgc3RkOjplbmFibGVfaWZfdDxzdGQ6Omlz
X3NhbWU8VCwgU291cmNlVHlwZTxUPj46OnZhbHVlPiBkZWNvZGUoRGVjb2RlciYsIGNvbnN0IFQm
IHNyYywgU291cmNlVHlwZTxUPiYgZHN0LCBBcmdzLi4uKQotewotICAgIGRzdCA9IHNyYzsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJncz4KLXN0YXRpYyBzdGQ6OmVu
YWJsZV9pZl90PCFzdGQ6OmlzX3NhbWU8VCwgU291cmNlVHlwZTxUPj46OnZhbHVlPiBkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgY29uc3QgVCYgc3JjLCBTb3VyY2VUeXBlPFQ+JiBkc3QsIEFyZ3Mu
Li4gYXJncykKLXsKLSAgICBzcmMuZGVjb2RlKGRlY29kZXIsIGRzdCwgYXJncy4uLik7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3Nh
bWU8VCwgU291cmNlVHlwZTxUPj46OnZhbHVlLCBUPiBkZWNvZGUoRGVjb2RlciYsIFQgc3JjKQot
ewotICAgIHJldHVybiBzcmM7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgc3Rk
OjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lPFQsIFNvdXJjZVR5cGU8VD4+Ojp2YWx1ZSwgU291
cmNlVHlwZTxUPj4mJiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgY29uc3QgVCYgc3JjKQotewot
ICAgIHJldHVybiBzcmMuZGVjb2RlKGRlY29kZXIpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBT
b3VyY2U+Ci1jbGFzcyBDYWNoZWRPYmplY3QgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENh
Y2hlZE9iamVjdDxTb3VyY2U+KTsKLSAgICBXVEZfRk9SQklEX0hFQVBfQUxMT0NBVElPTjsKLQot
cHVibGljOgotICAgIHVzaW5nIFNvdXJjZVR5cGVfID0gU291cmNlOwotfTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgU291cmNlPgotY2xhc3MgVmFyaWFibGVMZW5ndGhPYmplY3QgOiBwdWJsaWMgQ2Fj
aGVkT2JqZWN0PFNvdXJjZT4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZT4KLSAg
ICBmcmllbmQgc3RydWN0IENhY2hlZFB0cjsKLQotcHJvdGVjdGVkOgotICAgIGNvbnN0IHVpbnQ4
X3QqIGJ1ZmZlcigpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV9vZmZzZXQgIT0gc19p
bnZhbGlkT2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KHRoaXMpICsgbV9vZmZzZXQ7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLSAgICBjb25zdCBUKiBidWZmZXIoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KGJ1ZmZlcigpKTsKLSAgICB9Ci0KLSAgICB1aW50OF90
KiBhbGxvY2F0ZShFbmNvZGVyJiBlbmNvZGVyLCBzaXplX3Qgc2l6ZSkKLSAgICB7Ci0gICAgICAg
IGlmICghc2l6ZSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHB0cmRp
ZmZfdCBvZmZzZXRPZmZzZXQgPSBlbmNvZGVyLm9mZnNldE9mKCZtX29mZnNldCk7Ci0gICAgICAg
IGF1dG8gcmVzdWx0ID0gZW5jb2Rlci5tYWxsb2Moc2l6ZSk7Ci0gICAgICAgIG1fb2Zmc2V0ID0g
cmVzdWx0Lm9mZnNldCgpIC0gb2Zmc2V0T2Zmc2V0OwotICAgICAgICByZXR1cm4gcmVzdWx0LmJ1
ZmZlcigpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgVCogYWxsb2Nh
dGUoRW5jb2RlciYgZW5jb2RlciwgdW5zaWduZWQgc2l6ZSA9IDEpCi0gICAgewotICAgICAgICB1
aW50OF90KiByZXN1bHQgPSBhbGxvY2F0ZShlbmNvZGVyLCBzaXplb2YoVCkgKiBzaXplKTsKLSAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHJlc3VsdCk7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIGNvbnN0ZXhwciBzdGF0aWMgcHRyZGlmZl90IHNfaW52YWxpZE9mZnNldCA9IHN0
ZDo6bnVtZXJpY19saW1pdHM8cHRyZGlmZl90Pjo6bWF4KCk7Ci0KLSAgICBwdHJkaWZmX3QgbV9v
ZmZzZXQgeyBzX2ludmFsaWRPZmZzZXQgfTsKLQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgU291cmNlID0gU291cmNlVHlwZTxUPj4KLWNsYXNzIENhY2hlZFB0ciA6IHB1Ymxp
YyBWYXJpYWJsZUxlbmd0aE9iamVjdDxTb3VyY2UqPiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUs
IHR5cGVuYW1lPgotICAgIGZyaWVuZCBzdHJ1Y3QgQ2FjaGVkUmVmUHRyOwotCi1wdWJsaWM6Ci0g
ICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU291cmNlKiBzcmMpCi0gICAg
ewotICAgICAgICBtX2lzRW1wdHkgPSAhc3JjOwotICAgICAgICBpZiAobV9pc0VtcHR5KQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChXVEY6Ok9wdGlvbmFsPHB0cmRpZmZfdD4g
b2Zmc2V0ID0gZW5jb2Rlci5vZmZzZXRGb3JQdHIoc3JjKSkgewotICAgICAgICAgICAgdGhpcy0+
bV9vZmZzZXQgPSAqb2Zmc2V0IC0gZW5jb2Rlci5vZmZzZXRPZigmdGhpcy0+bV9vZmZzZXQpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgVCogY2FjaGVkT2JqZWN0
ID0gdGhpcy0+dGVtcGxhdGUgYWxsb2NhdGU8VD4oZW5jb2Rlcik7Ci0gICAgICAgIGNhY2hlZE9i
amVjdC0+ZW5jb2RlKGVuY29kZXIsICpzcmMpOwotICAgICAgICBlbmNvZGVyLmNhY2hlUHRyKHNy
YywgZW5jb2Rlci5vZmZzZXRPZihjYWNoZWRPYmplY3QpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZS4uLiBBcmdzPgotICAgIFNvdXJjZSogZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IEFyZ3MuLi4gYXJncykgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChtX2lzRW1wdHkpCi0gICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBwdHJkaWZmX3QgYnVmZmVyT2Zmc2V0
ID0gZGVjb2Rlci5vZmZzZXRPZih0aGlzLT5idWZmZXIoKSk7Ci0gICAgICAgIGlmIChXVEY6Ok9w
dGlvbmFsPHZvaWQqPiBwdHIgPSBkZWNvZGVyLnB0ckZvck9mZnNldChidWZmZXJPZmZzZXQpKQot
ICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U291cmNlKj4oKnB0cik7Ci0KLSAg
ICAgICAgU291cmNlKiBwdHIgPSBnZXQoKS0+ZGVjb2RlKGRlY29kZXIsIGFyZ3MuLi4pOwotICAg
ICAgICBkZWNvZGVyLmNhY2hlT2Zmc2V0KGJ1ZmZlck9mZnNldCwgcHRyKTsKLSAgICAgICAgcmV0
dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBjb25zdCBUKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1
cm4gZ2V0KCk7IH0KLQotcHJpdmF0ZToKLSAgICBjb25zdCBUKiBnZXQoKSBjb25zdAotICAgIHsK
LSAgICAgICAgaWYgKG1faXNFbXB0eSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICByZXR1cm4gdGhpcy0+dGVtcGxhdGUgYnVmZmVyPFQ+KCk7Ci0gICAgfQotCi0gICAgYm9v
bCBtX2lzRW1wdHk7Ci0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFNvdXJj
ZSA9IFNvdXJjZVR5cGU8VD4+Ci1jbGFzcyBDYWNoZWRSZWZQdHIgOiBwdWJsaWMgQ2FjaGVkT2Jq
ZWN0PFJlZlB0cjxTb3VyY2U+PiB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBlbmNvZGUoRW5jb2RlciYg
ZW5jb2RlciwgY29uc3QgU291cmNlKiBzcmMpCi0gICAgewotICAgICAgICBtX3B0ci5lbmNvZGUo
ZW5jb2Rlciwgc3JjKTsKLSAgICB9Ci0KLSAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBSZWZQdHI8U291cmNlPiBzcmMpCi0gICAgewotICAgICAgICBlbmNvZGUoZW5jb2Rl
ciwgc3JjLmdldCgpKTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8U291cmNlPiBkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIFNvdXJjZSogZGVjb2RlZFB0ciA9IG1f
cHRyLmRlY29kZShkZWNvZGVyKTsKLSAgICAgICAgaWYgKCFkZWNvZGVkUHRyKQotICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGRlY29kZXIuYWRkRmluYWxpemVyKGRlY29kZXIu
b2Zmc2V0T2YobV9wdHIuYnVmZmVyKCkpLCBbPV0geyBkZXJlZklmTm90TnVsbChkZWNvZGVkUHRy
KTsgfSk7Ci0gICAgICAgIHJlZklmTm90TnVsbChkZWNvZGVkUHRyKTsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKGRlY29kZWRQdHIpOwotICAgIH0KLQotICAgIHZvaWQgZGVjb2RlKERlY29kZXIm
IGRlY29kZXIsIFJlZlB0cjxTb3VyY2U+JiBzcmMpIGNvbnN0Ci0gICAgewotICAgICAgICBzcmMg
PSBkZWNvZGUoZGVjb2Rlcik7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIENhY2hlZFB0cjxULCBT
b3VyY2U+IG1fcHRyOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgU291cmNl
ID0gU291cmNlVHlwZTxUPj4KLWNsYXNzIENhY2hlZFdyaXRlQmFycmllciA6IHB1YmxpYyBDYWNo
ZWRPYmplY3Q8V3JpdGVCYXJyaWVyPFNvdXJjZT4+IHsKLXB1YmxpYzoKLSAgICB2b2lkIGVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXcml0ZUJhcnJpZXI8U291cmNlPiBzcmMpCi0gICAg
ewotICAgICAgICBtX3B0ci5lbmNvZGUoZW5jb2Rlciwgc3JjLmdldCgpKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXcml0ZUJhcnJpZXI8U291cmNlPiYgc3Jj
LCBjb25zdCBKU0NlbGwqIG93bmVyKSBjb25zdAotICAgIHsKLSAgICAgICAgU291cmNlKiBkZWNv
ZGVkUHRyID0gbV9wdHIuZGVjb2RlKGRlY29kZXIpOwotICAgICAgICBpZiAoZGVjb2RlZFB0cikK
LSAgICAgICAgICAgIHNyYy5zZXQoZGVjb2Rlci52bSgpLCBvd25lciwgZGVjb2RlZFB0cik7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIENhY2hlZFB0cjxULCBTb3VyY2U+IG1fcHRyOwotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IElubGluZUNhcGFjaXR5ID0gMCwgdHlwZW5hbWUg
T3ZlcmZsb3dIYW5kbGVyID0gQ3Jhc2hPbk92ZXJmbG93PgotY2xhc3MgQ2FjaGVkVmVjdG9yIDog
cHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFZlY3RvcjxTb3VyY2VUeXBlPFQ+LCBJbmxpbmVD
YXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPj4gewotcHVibGljOgotICAgIHZvaWQgZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIsIGNvbnN0IFZlY3RvcjxTb3VyY2VUeXBlPFQ+LCBJbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGVyPiYgdmVjdG9yKQotICAgIHsKLSAgICAgICAgbV9zaXplID0gdmVj
dG9yLnNpemUoKTsKLSAgICAgICAgVCogYnVmZmVyID0gdGhpcy0+dGVtcGxhdGUgYWxsb2NhdGU8
VD4oZW5jb2RlciwgbV9zaXplKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
c2l6ZTsgKytpKQotICAgICAgICAgICAgOjpKU0M6OmVuY29kZShlbmNvZGVyLCBidWZmZXJbaV0s
IHZlY3RvcltpXSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KLSAg
ICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBWZWN0b3I8U291cmNlVHlwZTxUPiwgSW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj4mIHZlY3RvciwgQXJncy4uLiBhcmdzKSBjb25z
dAotICAgIHsKLSAgICAgICAgdmVjdG9yLnJlc2l6ZVRvRml0KG1fc2l6ZSk7Ci0gICAgICAgIGNv
bnN0IFQqIGJ1ZmZlciA9IHRoaXMtPnRlbXBsYXRlIGJ1ZmZlcjxUPigpOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zaXplOyArK2kpCi0gICAgICAgICAgICA6OkpTQzo6ZGVj
b2RlKGRlY29kZXIsIGJ1ZmZlcltpXSwgdmVjdG9yW2ldLCBhcmdzLi4uKTsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgdW5zaWduZWQgbV9zaXplOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgRmly
c3QsIHR5cGVuYW1lIFNlY29uZD4KLWNsYXNzIENhY2hlZFBhaXIgOiBwdWJsaWMgQ2FjaGVkT2Jq
ZWN0PHN0ZDo6cGFpcjxTb3VyY2VUeXBlPEZpcnN0PiwgU291cmNlVHlwZTxTZWNvbmQ+Pj4gewot
cHVibGljOgotICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IHN0ZDo6cGFp
cjxTb3VyY2VUeXBlPEZpcnN0PiwgU291cmNlVHlwZTxTZWNvbmQ+PiYgcGFpcikKLSAgICB7Ci0g
ICAgICAgIDo6SlNDOjplbmNvZGUoZW5jb2RlciwgbV9maXJzdCwgcGFpci5maXJzdCk7Ci0gICAg
ICAgIDo6SlNDOjplbmNvZGUoZW5jb2RlciwgbV9zZWNvbmQsIHBhaXIuc2Vjb25kKTsKLSAgICB9
Ci0KLSAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnBhaXI8U291cmNlVHlw
ZTxGaXJzdD4sIFNvdXJjZVR5cGU8U2Vjb25kPj4mIHBhaXIpIGNvbnN0Ci0gICAgewotICAgICAg
ICA6OkpTQzo6ZGVjb2RlKGRlY29kZXIsIG1fZmlyc3QsIHBhaXIuZmlyc3QpOwotICAgICAgICA6
OkpTQzo6ZGVjb2RlKGRlY29kZXIsIG1fc2Vjb25kLCBwYWlyLnNlY29uZCk7Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIEZpcnN0IG1fZmlyc3Q7Ci0gICAgU2Vjb25kIG1fc2Vjb25kOwotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEFyZyA9
IHR5cGVuYW1lIERlZmF1bHRIYXNoPFNvdXJjZVR5cGU8S2V5Pj46Okhhc2gsIHR5cGVuYW1lIEtl
eVRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8U291cmNlVHlwZTxLZXk+PiwgdHlwZW5hbWUgTWFwcGVk
VHJhaXRzQXJnID0gSGFzaFRyYWl0czxTb3VyY2VUeXBlPFZhbHVlPj4+Ci1jbGFzcyBDYWNoZWRI
YXNoTWFwIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PEhhc2hNYXA8U291cmNlVHlwZTxL
ZXk+LCBTb3VyY2VUeXBlPFZhbHVlPiwgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFp
dHNBcmc+PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4KLSAgICB1c2lu
ZyBNYXAgPSBIYXNoTWFwPEssIFYsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRz
QXJnPjsKLQotcHVibGljOgotICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0
IE1hcDxTb3VyY2VUeXBlPEtleT4sIFNvdXJjZVR5cGU8VmFsdWU+PiYgbWFwKQotICAgIHsKLSAg
ICAgICAgU291cmNlVHlwZTxkZWNsdHlwZShtX2VudHJpZXMpPiBlbnRyaWVzVmVjdG9yKG1hcC5z
aXplKCkpOwotICAgICAgICB1bnNpZ25lZCBpID0gMDsKLSAgICAgICAgZm9yIChjb25zdCBhdXRv
JiBpdCA6IG1hcCkKLSAgICAgICAgICAgIGVudHJpZXNWZWN0b3JbaSsrXSA9IHsgaXQua2V5LCBp
dC52YWx1ZSB9OwotICAgICAgICBtX2VudHJpZXMuZW5jb2RlKGVuY29kZXIsIGVudHJpZXNWZWN0
b3IpOwotICAgIH0KLQotICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIE1hcDxTb3Vy
Y2VUeXBlPEtleT4sIFNvdXJjZVR5cGU8VmFsdWU+PiYgbWFwKSBjb25zdAotICAgIHsKLSAgICAg
ICAgU291cmNlVHlwZTxkZWNsdHlwZShtX2VudHJpZXMpPiBkZWNvZGVkRW50cmllczsKLSAgICAg
ICAgbV9lbnRyaWVzLmRlY29kZShkZWNvZGVyLCBkZWNvZGVkRW50cmllcyk7Ci0gICAgICAgIGZv
ciAoY29uc3QgYXV0byYgcGFpciA6IGRlY29kZWRFbnRyaWVzKQotICAgICAgICAgICAgbWFwLnNl
dChwYWlyLmZpcnN0LCBwYWlyLnNlY29uZCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIENhY2hl
ZFZlY3RvcjxDYWNoZWRQYWlyPEtleSwgVmFsdWU+PiBtX2VudHJpZXM7Ci19OwotCi1jbGFzcyBD
YWNoZWRVbmlxdWVkU3RyaW5nSW1wbCA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxVbmlx
dWVkU3RyaW5nSW1wbD4gewotcHVibGljOgotICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IFN0cmluZ0ltcGwmIHN0cmluZykKLSAgICB7Ci0gICAgICAgIG1faXNBdG9taWMg
PSBzdHJpbmcuaXNBdG9taWMoKTsKLSAgICAgICAgbV9pc1N5bWJvbCA9IHN0cmluZy5pc1N5bWJv
bCgpOwotICAgICAgICBTdHJpbmdJbXBsKiBpbXBsID0gY29uc3RfY2FzdDxTdHJpbmdJbXBsKj4o
JnN0cmluZyk7Ci0gICAgICAgIGlmIChtX2lzU3ltYm9sKSB7Ci0gICAgICAgICAgICBTeW1ib2xJ
bXBsKiBzeW1ib2wgPSBzdGF0aWNfY2FzdDxTeW1ib2xJbXBsKj4oaW1wbCk7Ci0gICAgICAgICAg
ICBpZiAoIXN5bWJvbC0+aXNOdWxsU3ltYm9sKCkpIHsKLSAgICAgICAgICAgICAgICBJZGVudGlm
aWVyIHVpZCA9IElkZW50aWZpZXI6OmZyb21VaWQoJmVuY29kZXIudm0oKSwgc3ltYm9sKTsKLSAg
ICAgICAgICAgICAgICBpbXBsID0gZW5jb2Rlci52bSgpLnByb3BlcnR5TmFtZXMtPmxvb2tVcFB1
YmxpY05hbWUodWlkKS5zdHJpbmcoKS5pbXBsKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBtX2lzOEJpdCA9IGltcGwtPmlzOEJpdCgpOwotICAgICAgICBtX2xlbmd0aCA9
IGltcGwtPmxlbmd0aCgpOwotCi0gICAgICAgIGlmICghbV9sZW5ndGgpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1fbGVuZ3RoOwotICAgICAgICBjb25z
dCB2b2lkKiBwYXlsb2FkOwotICAgICAgICBpZiAobV9pczhCaXQpCi0gICAgICAgICAgICBwYXls
b2FkID0gaW1wbC0+Y2hhcmFjdGVyczgoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBw
YXlsb2FkID0gaW1wbC0+Y2hhcmFjdGVyczE2KCk7Ci0gICAgICAgICAgICBzaXplICo9IDI7Ci0g
ICAgICAgIH0KLQotICAgICAgICB1aW50OF90KiBidWZmZXIgPSB0aGlzLT5hbGxvY2F0ZShlbmNv
ZGVyLCBzaXplKTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlciwgcGF5bG9hZCwgc2l6ZSk7Ci0gICAg
fQotCi0gICAgVW5pcXVlZFN0cmluZ0ltcGwqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25z
dAotICAgIHsKLSAgICAgICAgYXV0byBjcmVhdGUgPSBbJl0oY29uc3QgYXV0byogYnVmZmVyKSAt
PiBVbmlxdWVkU3RyaW5nSW1wbCogewotICAgICAgICAgICAgaWYgKCFtX2lzU3ltYm9sKQotICAg
ICAgICAgICAgICAgIHJldHVybiBBdG9taWNTdHJpbmdJbXBsOjphZGQoYnVmZmVyLCBtX2xlbmd0
aCkubGVha1JlZigpOwotCi0gICAgICAgICAgICBpZiAoIW1fbGVuZ3RoKQotICAgICAgICAgICAg
ICAgIHJldHVybiAmU3ltYm9sSW1wbDo6Y3JlYXRlTnVsbFN5bWJvbCgpLmxlYWtSZWYoKTsKLQot
ICAgICAgICAgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmRl
Y29kZXIudm0oKSwgYnVmZmVyLCBtX2xlbmd0aCk7Ci0gICAgICAgICAgICBTdHJpbmcgc3RyID0g
ZGVjb2Rlci52bSgpLnByb3BlcnR5TmFtZXMtPmxvb2tVcFByaXZhdGVOYW1lKGlkZW50KS0+c3Ry
aW5nKCk7Ci0gICAgICAgICAgICBTdHJpbmdJbXBsKiBpbXBsID0gc3RyLnJlbGVhc2VJbXBsKCku
Z2V0KCk7Ci0gICAgICAgICAgICBBU1NFUlQoaW1wbC0+aXNTeW1ib2woKSk7Ci0gICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8VW5pcXVlZFN0cmluZ0ltcGwqPihpbXBsKTsKLSAgICAgICAg
fTsKLQotICAgICAgICBpZiAobV9pczhCaXQpCi0gICAgICAgICAgICByZXR1cm4gY3JlYXRlKHRo
aXMtPmJ1ZmZlcjxMQ2hhcj4oKSk7Ci0gICAgICAgIHJldHVybiBjcmVhdGUodGhpcy0+YnVmZmVy
PFVDaGFyPigpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBtX2lzOEJpdCA6IDE7Ci0g
ICAgYm9vbCBtX2lzU3ltYm9sIDogMTsKLSAgICBib29sIG1faXNBdG9taWMgOiAxOwotICAgIHVu
c2lnbmVkIG1fbGVuZ3RoOwotfTsKLQotY2xhc3MgQ2FjaGVkU3RyaW5nSW1wbCA6IHB1YmxpYyBW
YXJpYWJsZUxlbmd0aE9iamVjdDxTdHJpbmdJbXBsPiB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBlbmNv
ZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU3RyaW5nSW1wbCYgaW1wbCkKLSAgICB7Ci0gICAg
ICAgIG1fdW5pcXVlZFN0cmluZ0ltcGwuZW5jb2RlKGVuY29kZXIsIGltcGwpOwotICAgIH0KLQot
ICAgIFN0cmluZ0ltcGwqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fdW5pcXVlZFN0cmluZ0ltcGwuZGVjb2RlKGRlY29kZXIpOwotICAgIH0K
LQotcHJpdmF0ZToKLSAgICBDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbCBtX3VuaXF1ZWRTdHJpbmdJ
bXBsOwotfTsKLQotY2xhc3MgQ2FjaGVkU3RyaW5nIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2Jq
ZWN0PFN0cmluZz4gewotcHVibGljOgotICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIs
IGNvbnN0IFN0cmluZyYgc3RyaW5nKQotICAgIHsKLSAgICAgICAgbV9pbXBsLmVuY29kZShlbmNv
ZGVyLCBzdGF0aWNfY2FzdDxVbmlxdWVkU3RyaW5nSW1wbCo+KHN0cmluZy5pbXBsKCkpKTsKLSAg
ICB9Ci0KLSAgICBTdHJpbmcgZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gU3RyaW5nKHN0YXRpY19jYXN0PFJlZlB0cjxTdHJpbmdJbXBsPj4obV9p
bXBsLmRlY29kZShkZWNvZGVyKSkpOwotICAgIH0KLQotICAgIHZvaWQgZGVjb2RlKERlY29kZXIm
IGRlY29kZXIsIFN0cmluZyYgZHN0KSBjb25zdAotICAgIHsKLSAgICAgICAgZHN0ID0gZGVjb2Rl
KGRlY29kZXIpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBDYWNoZWRSZWZQdHI8Q2FjaGVkVW5p
cXVlZFN0cmluZ0ltcGw+IG1faW1wbDsKLX07Ci0KLWNsYXNzIENhY2hlZElkZW50aWZpZXIgOiBw
dWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8SWRlbnRpZmllcj4gewotcHVibGljOgotICAgIHZv
aWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIp
Ci0gICAgewotICAgICAgICBtX3N0cmluZy5lbmNvZGUoZW5jb2RlciwgaWRlbnRpZmllci5zdHJp
bmcoKSk7Ci0gICAgfQotCi0gICAgSWRlbnRpZmllciBkZWNvZGUoRGVjb2RlciYgZGVjb2Rlcikg
Y29uc3QKLSAgICB7Ci0gICAgICAgIFN0cmluZyBzdHIgPSBtX3N0cmluZy5kZWNvZGUoZGVjb2Rl
cik7Ci0gICAgICAgIGlmIChzdHIuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gSWRlbnRp
ZmllcigpOwotCi0gICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tVWlkKCZkZWNvZGVyLnZt
KCksIChVbmlxdWVkU3RyaW5nSW1wbCopc3RyLmltcGwoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSWRlbnRpZmllciYgaWRlbnQpIGNvbnN0Ci0gICAgewot
ICAgICAgICBpZGVudCA9IGRlY29kZShkZWNvZGVyKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAg
Q2FjaGVkU3RyaW5nIG1fc3RyaW5nOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWNsYXNz
IENhY2hlZE9wdGlvbmFsIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFdURjo6T3B0aW9u
YWw8U291cmNlVHlwZTxUPj4+IHsKLXB1YmxpYzoKLSAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBXVEY6Ok9wdGlvbmFsPFNvdXJjZVR5cGU8VD4+JiBzb3VyY2UpCi0gICAg
ewotICAgICAgICBtX2lzRW1wdHkgPSAhc291cmNlOwotCi0gICAgICAgIGlmIChtX2lzRW1wdHkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy0+dGVtcGxhdGUgYWxsb2NhdGU8
VD4oZW5jb2RlciktPmVuY29kZShlbmNvZGVyLCAqc291cmNlKTsKLSAgICB9Ci0KLSAgICBXVEY6
Ok9wdGlvbmFsPFNvdXJjZVR5cGU8VD4+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAot
ICAgIHsKLSAgICAgICAgaWYgKG1faXNFbXB0eSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci0KLSAgICAgICAgcmV0dXJuIHsgdGhpcy0+dGVtcGxhdGUgYnVmZmVyPFQ+KCktPmRl
Y29kZShkZWNvZGVyKSB9OwotICAgIH0KLQotICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29k
ZXIsIFdURjo6T3B0aW9uYWw8U291cmNlVHlwZTxUPj4mIGRzdCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIGRzdCA9IGRlY29kZShkZWNvZGVyKTsKLSAgICB9Ci0KLSAgICB2b2lkIGVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyLCBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8U291cmNlVHlwZTxUPj4mIHNvdXJj
ZSkKLSAgICB7Ci0gICAgICAgIGlmICghc291cmNlKQotICAgICAgICAgICAgZW5jb2RlKGVuY29k
ZXIsIFdURjo6bnVsbG9wdCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVuY29kZShlbmNv
ZGVyLCB7ICpzb3VyY2UgfSk7Ci0gICAgfQotCi0gICAgU291cmNlVHlwZTxUPiogZGVjb2RlQXNQ
dHIoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChtX2lzRW1wdHkp
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICByZXR1cm4gdGhpcy0+dGVt
cGxhdGUgYnVmZmVyPFQ+KCktPmRlY29kZShkZWNvZGVyKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgYm9vbCBtX2lzRW1wdHk7Ci19OwotCi1jbGFzcyBDYWNoZWRTaW1wbGVKdW1wVGFibGUgOiBw
dWJsaWMgQ2FjaGVkT2JqZWN0PFVubGlua2VkU2ltcGxlSnVtcFRhYmxlPiB7Ci1wdWJsaWM6Ci0g
ICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1w
VGFibGUmIGp1bXBUYWJsZSkKLSAgICB7Ci0gICAgICAgIG1fbWluID0ganVtcFRhYmxlLm1pbjsK
LSAgICAgICAgbV9icmFuY2hPZmZzZXRzLmVuY29kZShlbmNvZGVyLCBqdW1wVGFibGUuYnJhbmNo
T2Zmc2V0cyk7Ci0gICAgfQotCi0gICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVW5s
aW5rZWRTaW1wbGVKdW1wVGFibGUmIGp1bXBUYWJsZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIGp1
bXBUYWJsZS5taW4gPSBtX21pbjsKLSAgICAgICAgbV9icmFuY2hPZmZzZXRzLmRlY29kZShkZWNv
ZGVyLCBqdW1wVGFibGUuYnJhbmNoT2Zmc2V0cyk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlu
dDMyX3QgbV9taW47Ci0gICAgQ2FjaGVkVmVjdG9yPGludDMyX3Q+IG1fYnJhbmNoT2Zmc2V0czsK
LX07Ci0KLWNsYXNzIENhY2hlZFN0cmluZ0p1bXBUYWJsZSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8
VW5saW5rZWRTdHJpbmdKdW1wVGFibGU+IHsKLXB1YmxpYzoKLSAgICB2b2lkIGVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyLCBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYganVtcFRhYmxlKQot
ICAgIHsKLSAgICAgICAgbV9vZmZzZXRUYWJsZS5lbmNvZGUoZW5jb2RlciwganVtcFRhYmxlLm9m
ZnNldFRhYmxlKTsKLSAgICB9Ci0KLSAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBV
bmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYganVtcFRhYmxlKSBjb25zdAotICAgIHsKLSAgICAgICAg
bV9vZmZzZXRUYWJsZS5kZWNvZGUoZGVjb2RlciwganVtcFRhYmxlLm9mZnNldFRhYmxlKTsKLSAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgQ2FjaGVkSGFzaE1hcDxDYWNoZWRSZWZQdHI8Q2FjaGVkU3Ry
aW5nSW1wbD4sIFVubGlua2VkU3RyaW5nSnVtcFRhYmxlOjogT2Zmc2V0TG9jYXRpb24+IG1fb2Zm
c2V0VGFibGU7Ci19OwotCi1jbGFzcyBDYWNoZWRDb2RlQmxvY2tSYXJlRGF0YSA6IHB1YmxpYyBD
YWNoZWRPYmplY3Q8VW5saW5rZWRDb2RlQmxvY2s6OlJhcmVEYXRhPiB7Ci1wdWJsaWM6Ci0gICAg
dm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVW5saW5rZWRDb2RlQmxvY2s6OlJh
cmVEYXRhJiByYXJlRGF0YSkKLSAgICB7Ci0gICAgICAgIG1fZXhjZXB0aW9uSGFuZGxlcnMuZW5j
b2RlKGVuY29kZXIsIHJhcmVEYXRhLm1fZXhjZXB0aW9uSGFuZGxlcnMpOwotICAgICAgICBtX3N3
aXRjaEp1bXBUYWJsZXMuZW5jb2RlKGVuY29kZXIsIHJhcmVEYXRhLm1fc3dpdGNoSnVtcFRhYmxl
cyk7Ci0gICAgICAgIG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5lbmNvZGUoZW5jb2RlciwgcmFy
ZURhdGEubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKLSAgICAgICAgbV9leHByZXNzaW9uSW5m
b0ZhdFBvc2l0aW9ucy5lbmNvZGUoZW5jb2RlciwgcmFyZURhdGEubV9leHByZXNzaW9uSW5mb0Zh
dFBvc2l0aW9ucyk7Ci0gICAgICAgIG1fdHlwZVByb2ZpbGVySW5mb01hcC5lbmNvZGUoZW5jb2Rl
ciwgcmFyZURhdGEubV90eXBlUHJvZmlsZXJJbmZvTWFwKTsKLSAgICAgICAgbV9vcFByb2ZpbGVD
b250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cy5lbmNvZGUoZW5jb2RlciwgcmFyZURhdGEubV9vcFBy
b2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cyk7Ci0gICAgfQotCi0gICAgVW5saW5rZWRD
b2RlQmxvY2s6OlJhcmVEYXRhKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKLSAgICB7
Ci0gICAgICAgIFVubGlua2VkQ29kZUJsb2NrOjpSYXJlRGF0YSogcmFyZURhdGEgPSBuZXcgVW5s
aW5rZWRDb2RlQmxvY2s6OlJhcmVEYXRhIHsgfTsKLSAgICAgICAgbV9leGNlcHRpb25IYW5kbGVy
cy5kZWNvZGUoZGVjb2RlciwgcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMpOwotICAgICAg
ICBtX3N3aXRjaEp1bXBUYWJsZXMuZGVjb2RlKGRlY29kZXIsIHJhcmVEYXRhLT5tX3N3aXRjaEp1
bXBUYWJsZXMpOwotICAgICAgICBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuZGVjb2RlKGRlY29k
ZXIsIHJhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMpOwotICAgICAgICBtX2V4cHJl
c3Npb25JbmZvRmF0UG9zaXRpb25zLmRlY29kZShkZWNvZGVyLCByYXJlRGF0YS0+bV9leHByZXNz
aW9uSW5mb0ZhdFBvc2l0aW9ucyk7Ci0gICAgICAgIG1fdHlwZVByb2ZpbGVySW5mb01hcC5kZWNv
ZGUoZGVjb2RlciwgcmFyZURhdGEtPm1fdHlwZVByb2ZpbGVySW5mb01hcCk7Ci0gICAgICAgIG1f
b3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMuZGVjb2RlKGRlY29kZXIsIHJhcmVE
YXRhLT5tX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzKTsKLSAgICAgICAgcmV0
dXJuIHJhcmVEYXRhOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBDYWNoZWRWZWN0b3I8VW5saW5r
ZWRIYW5kbGVySW5mbz4gbV9leGNlcHRpb25IYW5kbGVyczsKLSAgICBDYWNoZWRWZWN0b3I8Q2Fj
aGVkU2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7Ci0gICAgQ2FjaGVkVmVjdG9y
PENhY2hlZFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOwotICAgIENh
Y2hlZFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRQb3NpdGlvbj4gbV9leHByZXNzaW9u
SW5mb0ZhdFBvc2l0aW9uczsKLSAgICBDYWNoZWRIYXNoTWFwPHVuc2lnbmVkLCBVbmxpbmtlZENv
ZGVCbG9jazo6UmFyZURhdGE6OlR5cGVQcm9maWxlckV4cHJlc3Npb25SYW5nZT4gbV90eXBlUHJv
ZmlsZXJJbmZvTWFwOwotICAgIENhY2hlZFZlY3RvcjxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0
PiBtX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzOwotfTsKLQotY2xhc3MgQ2Fj
aGVkQml0VmVjdG9yIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PEJpdFZlY3Rvcj4gewot
cHVibGljOgotICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEJpdFZlY3Rv
ciYgYml0VmVjdG9yKQotICAgIHsKLSAgICAgICAgbV9zaXplID0gYml0VmVjdG9yLnNpemUoKTsK
LSAgICAgICAgdWludDhfdCogYnVmZmVyID0gdGhpcy0+YWxsb2NhdGUoZW5jb2RlciwgbV9zaXpl
KTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlciwgYml0VmVjdG9yLmJpdHMoKSwgbV9zaXplKTsKLSAg
ICB9Ci0KLSAgICB2b2lkIGRlY29kZShEZWNvZGVyJiwgQml0VmVjdG9yJiBiaXRWZWN0b3IpIGNv
bnN0Ci0gICAgewotICAgICAgICBiaXRWZWN0b3IuZW5zdXJlU2l6ZShtX3NpemUpOwotICAgICAg
ICBtZW1jcHkoYml0VmVjdG9yLmJpdHMoKSwgdGhpcy0+YnVmZmVyKCksIG1fc2l6ZSk7Ci0gICAg
fQotCi1wcml2YXRlOgotICAgIHVuc2lnbmVkIG1fc2l6ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEhhc2hBcmcgPSB0eXBlbmFtZSBEZWZhdWx0SGFzaDxUPjo6SGFzaD4K
LWNsYXNzIENhY2hlZEhhc2hTZXQgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PEhhc2hTZXQ8U291cmNl
VHlwZTxUPiwgSGFzaEFyZz4+IHsKLXB1YmxpYzoKLSAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBIYXNoU2V0PFNvdXJjZVR5cGU8VD4sIEhhc2hBcmc+JiBzZXQpCi0gICAg
ewotICAgICAgICBTb3VyY2VUeXBlPGRlY2x0eXBlKG1fZW50cmllcyk+IGVudHJpZXNWZWN0b3Io
c2V0LnNpemUoKSk7Ci0gICAgICAgIHVuc2lnbmVkIGkgPSAwOwotICAgICAgICBmb3IgKGNvbnN0
IGF1dG8mIGl0ZW0gOiBzZXQpCi0gICAgICAgICAgICBlbnRyaWVzVmVjdG9yW2krK10gPSBpdGVt
OwotICAgICAgICBtX2VudHJpZXMuZW5jb2RlKGVuY29kZXIsIGVudHJpZXNWZWN0b3IpOwotICAg
IH0KLQotICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEhhc2hTZXQ8U291cmNlVHlw
ZTxUPiwgSGFzaEFyZz4mIHNldCkgY29uc3QKLSAgICB7Ci0gICAgICAgIFNvdXJjZVR5cGU8ZGVj
bHR5cGUobV9lbnRyaWVzKT4gZW50cmllc1ZlY3RvcjsKLSAgICAgICAgbV9lbnRyaWVzLmRlY29k
ZShkZWNvZGVyLCBlbnRyaWVzVmVjdG9yKTsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpdGVt
IDogZW50cmllc1ZlY3RvcikKLSAgICAgICAgICAgIHNldC5hZGQoaXRlbSk7Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIENhY2hlZFZlY3RvcjxUPiBtX2VudHJpZXM7Ci19OwotCi1jbGFzcyBDYWNo
ZWRDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeSA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVj
dDxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4gewotcHVibGljOgotICAgIHZvaWQgZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIsIGNvbnN0IENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5JiBlbnRy
eSkKLSAgICB7Ci0gICAgICAgIG1fY29uc3RhbnQgPSBlbnRyeS5zZWNvbmQ7Ci0gICAgICAgIG1f
c2V0LmVuY29kZShlbmNvZGVyLCBlbnRyeS5maXJzdCk7Ci0gICAgfQotCi0gICAgdm9pZCBkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlciwgQ29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnkmIGVudHJ5KSBj
b25zdAotICAgIHsKLSAgICAgICAgZW50cnkuc2Vjb25kID0gbV9jb25zdGFudDsKLSAgICAgICAg
bV9zZXQuZGVjb2RlKGRlY29kZXIsIGVudHJ5LmZpcnN0KTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgdW5zaWduZWQgbV9jb25zdGFudDsKLSAgICBDYWNoZWRIYXNoU2V0PENhY2hlZFJlZlB0cjxD
YWNoZWRVbmlxdWVkU3RyaW5nSW1wbD4sIElkZW50aWZpZXJSZXBIYXNoPiBtX3NldDsKLX07Ci0K
LWNsYXNzIENhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFZh
cmlhYmxlRW52aXJvbm1lbnQ+IHsKLXB1YmxpYzoKLSAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBlbnYpCi0gICAgewotICAgICAgICBt
X2lzRXZlcnl0aGluZ0NhcHR1cmVkID0gZW52Lm1faXNFdmVyeXRoaW5nQ2FwdHVyZWQ7Ci0gICAg
ICAgIG1fbWFwLmVuY29kZShlbmNvZGVyLCBlbnYubV9tYXApOwotICAgIH0KLQotICAgIHZvaWQg
ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFZhcmlhYmxlRW52aXJvbm1lbnQmIGVudikgY29uc3QK
LSAgICB7Ci0gICAgICAgIGVudi5tX2lzRXZlcnl0aGluZ0NhcHR1cmVkID0gbV9pc0V2ZXJ5dGhp
bmdDYXB0dXJlZDsKLSAgICAgICAgbV9tYXAuZGVjb2RlKGRlY29kZXIsIGVudi5tX21hcCk7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIGJvb2wgbV9pc0V2ZXJ5dGhpbmdDYXB0dXJlZDsKLSAgICBD
YWNoZWRIYXNoTWFwPENhY2hlZFJlZlB0cjxDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbD4sIFZhcmlh
YmxlRW52aXJvbm1lbnRFbnRyeSwgSWRlbnRpZmllclJlcEhhc2gsIEhhc2hUcmFpdHM8UmVmUHRy
PFVuaXF1ZWRTdHJpbmdJbXBsPj4sIFZhcmlhYmxlRW52aXJvbm1lbnRFbnRyeUhhc2hUcmFpdHM+
IG1fbWFwOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgU291cmNlID0gU291
cmNlVHlwZTxUPj4KLWNsYXNzIENhY2hlZEFycmF5IDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2Jq
ZWN0PFNvdXJjZSo+IHsKLXB1YmxpYzoKLSAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBTb3VyY2UqIGFycmF5LCB1bnNpZ25lZCBzaXplKQotICAgIHsKLSAgICAgICAgVCog
ZHN0ID0gdGhpcy0+dGVtcGxhdGUgYWxsb2NhdGU8VD4oZW5jb2Rlciwgc2l6ZSk7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgICAgICA6OkpTQzo6
ZW5jb2RlKGVuY29kZXIsIGRzdFtpXSwgYXJyYXlbaV0pOwotICAgIH0KLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lLi4uIEFyZ3M+Ci0gICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgU291
cmNlKiBhcnJheSwgdW5zaWduZWQgc2l6ZSwgQXJncy4uLiBhcmdzKSBjb25zdAotICAgIHsKLSAg
ICAgICAgY29uc3QgVCogYnVmZmVyID0gdGhpcy0+dGVtcGxhdGUgYnVmZmVyPFQ+KCk7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgICAgICA6OkpT
Qzo6ZGVjb2RlKGRlY29kZXIsIGJ1ZmZlcltpXSwgYXJyYXlbaV0sIGFyZ3MuLi4pOwotICAgIH0K
LX07Ci0KLWNsYXNzIENhY2hlZFNjb3BlZEFyZ3VtZW50c1RhYmxlIDogcHVibGljIENhY2hlZE9i
amVjdDxTY29wZWRBcmd1bWVudHNUYWJsZT4gewotcHVibGljOgotICAgIHZvaWQgZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIsIGNvbnN0IFNjb3BlZEFyZ3VtZW50c1RhYmxlJiBzY29wZWRBcmd1bWVu
dHNUYWJsZSkKLSAgICB7Ci0gICAgICAgIG1fbGVuZ3RoID0gc2NvcGVkQXJndW1lbnRzVGFibGUu
bV9sZW5ndGg7Ci0gICAgICAgIG1fYXJndW1lbnRzLmVuY29kZShlbmNvZGVyLCBzY29wZWRBcmd1
bWVudHNUYWJsZS5tX2FyZ3VtZW50cy5nZXQoKSwgbV9sZW5ndGgpOwotICAgIH0KLQotICAgIFNj
b3BlZEFyZ3VtZW50c1RhYmxlKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKLSAgICB7
Ci0gICAgICAgIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiBzY29wZWRBcmd1bWVudHNUYWJsZSA9IFNj
b3BlZEFyZ3VtZW50c1RhYmxlOjpjcmVhdGUoZGVjb2Rlci52bSgpLCBtX2xlbmd0aCk7Ci0gICAg
ICAgIG1fYXJndW1lbnRzLmRlY29kZShkZWNvZGVyLCBzY29wZWRBcmd1bWVudHNUYWJsZS0+bV9h
cmd1bWVudHMuZ2V0KCksIG1fbGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIHNjb3BlZEFyZ3VtZW50
c1RhYmxlOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICB1aW50MzJfdCBtX2xlbmd0aDsKLSAgICBD
YWNoZWRBcnJheTxTY29wZU9mZnNldD4gbV9hcmd1bWVudHM7Ci19OwotCi1jbGFzcyBDYWNoZWRT
eW1ib2xUYWJsZUVudHJ5IDogcHVibGljIENhY2hlZE9iamVjdDxTeW1ib2xUYWJsZUVudHJ5PiB7
Ci1wdWJsaWM6Ci0gICAgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFN5bWJvbFRhYmxlRW50
cnkmIHN5bWJvbFRhYmxlRW50cnkpCi0gICAgewotICAgICAgICBtX2JpdHMgPSBzeW1ib2xUYWJs
ZUVudHJ5Lm1fYml0cyB8IFN5bWJvbFRhYmxlRW50cnk6OlNsaW1GbGFnOwotICAgIH0KLQotICAg
IHZvaWQgZGVjb2RlKERlY29kZXImLCBTeW1ib2xUYWJsZUVudHJ5JiBzeW1ib2xUYWJsZUVudHJ5
KSBjb25zdAotICAgIHsKLSAgICAgICAgc3ltYm9sVGFibGVFbnRyeS5tX2JpdHMgPSBtX2JpdHM7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGludHB0cl90IG1fYml0czsKLX07Ci0KLWNsYXNzIENh
Y2hlZFN5bWJvbFRhYmxlIDogcHVibGljIENhY2hlZE9iamVjdDxTeW1ib2xUYWJsZT4gewotcHVi
bGljOgotICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFN5bWJvbFRhYmxl
JiBzeW1ib2xUYWJsZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghc3ltYm9sVGFibGUubV9yYXJl
RGF0YSk7Ci0gICAgICAgIG1fbWFwLmVuY29kZShlbmNvZGVyLCBzeW1ib2xUYWJsZS5tX21hcCk7
Ci0gICAgICAgIG1fbWF4U2NvcGVPZmZzZXQgPSBzeW1ib2xUYWJsZS5tX21heFNjb3BlT2Zmc2V0
OwotICAgICAgICBtX3VzZXNOb25TdHJpY3RFdmFsID0gc3ltYm9sVGFibGUubV91c2VzTm9uU3Ry
aWN0RXZhbDsKLSAgICAgICAgbV9uZXN0ZWRMZXhpY2FsU2NvcGUgPSBzeW1ib2xUYWJsZS5tX25l
c3RlZExleGljYWxTY29wZTsKLSAgICAgICAgbV9zY29wZVR5cGUgPSBzeW1ib2xUYWJsZS5tX3Nj
b3BlVHlwZTsKLSAgICAgICAgbV9hcmd1bWVudHMuZW5jb2RlKGVuY29kZXIsIHN5bWJvbFRhYmxl
Lm1fYXJndW1lbnRzLmdldCgpKTsKLSAgICB9Ci0KLSAgICBTeW1ib2xUYWJsZSogZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9s
VGFibGUgPSBTeW1ib2xUYWJsZTo6Y3JlYXRlKGRlY29kZXIudm0oKSk7Ci0gICAgICAgIG1fbWFw
LmRlY29kZShkZWNvZGVyLCBzeW1ib2xUYWJsZS0+bV9tYXApOwotICAgICAgICBzeW1ib2xUYWJs
ZS0+bV9tYXhTY29wZU9mZnNldCA9IG1fbWF4U2NvcGVPZmZzZXQ7Ci0gICAgICAgIHN5bWJvbFRh
YmxlLT5tX3VzZXNOb25TdHJpY3RFdmFsID0gbV91c2VzTm9uU3RyaWN0RXZhbDsKLSAgICAgICAg
c3ltYm9sVGFibGUtPm1fbmVzdGVkTGV4aWNhbFNjb3BlID0gbV9uZXN0ZWRMZXhpY2FsU2NvcGU7
Ci0gICAgICAgIHN5bWJvbFRhYmxlLT5tX3Njb3BlVHlwZSA9IG1fc2NvcGVUeXBlOwotICAgICAg
ICBTY29wZWRBcmd1bWVudHNUYWJsZSogc2NvcGVkQXJndW1lbnRzVGFibGUgPSBtX2FyZ3VtZW50
cy5kZWNvZGUoZGVjb2Rlcik7Ci0gICAgICAgIGlmIChzY29wZWRBcmd1bWVudHNUYWJsZSkKLSAg
ICAgICAgICAgIHN5bWJvbFRhYmxlLT5tX2FyZ3VtZW50cy5zZXQoZGVjb2Rlci52bSgpLCBzeW1i
b2xUYWJsZSwgc2NvcGVkQXJndW1lbnRzVGFibGUpOwotICAgICAgICByZXR1cm4gc3ltYm9sVGFi
bGU7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIENhY2hlZEhhc2hNYXA8Q2FjaGVkUmVmUHRyPENh
Y2hlZFVuaXF1ZWRTdHJpbmdJbXBsPiwgQ2FjaGVkU3ltYm9sVGFibGVFbnRyeSwgSWRlbnRpZmll
clJlcEhhc2gsIEhhc2hUcmFpdHM8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPj4sIFN5bWJvbFRh
YmxlSW5kZXhIYXNoVHJhaXRzPiBtX21hcDsKLSAgICBTY29wZU9mZnNldCBtX21heFNjb3BlT2Zm
c2V0OwotICAgIHVuc2lnbmVkIG1fdXNlc05vblN0cmljdEV2YWwgOiAxOwotICAgIHVuc2lnbmVk
IG1fbmVzdGVkTGV4aWNhbFNjb3BlIDogMTsKLSAgICB1bnNpZ25lZCBtX3Njb3BlVHlwZSA6IDM7
Ci0gICAgLy8gRklYTUU6IGRvIHdlIG5lZWQgdG8gY2FjaGVkIHRoaXMgZXZlbnR1YWxseT8KLSAg
ICAvLyBDYWNoZWRQdHI8U3ltYm9sVGFibGVSYXJlRGF0YT4gcmFyZURhdGE7Ci0gICAgQ2FjaGVk
UHRyPENhY2hlZFNjb3BlZEFyZ3VtZW50c1RhYmxlPiBtX2FyZ3VtZW50czsKLX07Ci0KLWNsYXNz
IENhY2hlZEpTVmFsdWU7Ci1jbGFzcyBDYWNoZWRJbW11dGFibGVCdXR0ZXJmbHkgOiBwdWJsaWMg
Q2FjaGVkT2JqZWN0PEpTSW1tdXRhYmxlQnV0dGVyZmx5PiB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgSlNJbW11dGFibGVCdXR0ZXJmbHkmIGltbXV0YWJsZUJ1
dHRlcmZseSkKLSAgICB7Ci0gICAgICAgIG1fbGVuZ3RoID0gaW1tdXRhYmxlQnV0dGVyZmx5Lmxl
bmd0aCgpOwotICAgICAgICBtX2luZGV4aW5nVHlwZSA9IGltbXV0YWJsZUJ1dHRlcmZseS5pbmRl
eGluZ1R5cGVBbmRNaXNjKCk7Ci0gICAgICAgIGlmIChoYXNEb3VibGUobV9pbmRleGluZ1R5cGUp
KQotICAgICAgICAgICAgbV9jYWNoZWREb3VibGVzLmVuY29kZShlbmNvZGVyLCBpbW11dGFibGVC
dXR0ZXJmbHkudG9CdXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSwgbV9sZW5n
dGgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2NhY2hlZFZhbHVlcy5lbmNvZGUoZW5j
b2RlciwgaW1tdXRhYmxlQnV0dGVyZmx5LnRvQnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKS5kYXRh
KCksIG1fbGVuZ3RoKTsKLSAgICB9Ci0KLSAgICBKU0ltbXV0YWJsZUJ1dHRlcmZseSogZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBKU0ltbXV0YWJsZUJ1dHRl
cmZseSogaW1tdXRhYmxlQnV0dGVyZmx5ID0gSlNJbW11dGFibGVCdXR0ZXJmbHk6OmNyZWF0ZShk
ZWNvZGVyLnZtKCksIG1faW5kZXhpbmdUeXBlLCBtX2xlbmd0aCk7Ci0gICAgICAgIGlmIChoYXNE
b3VibGUobV9pbmRleGluZ1R5cGUpKQotICAgICAgICAgICAgbV9jYWNoZWREb3VibGVzLmRlY29k
ZShkZWNvZGVyLCBpbW11dGFibGVCdXR0ZXJmbHktPnRvQnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNE
b3VibGUoKS5kYXRhKCksIG1fbGVuZ3RoLCBpbW11dGFibGVCdXR0ZXJmbHkpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtX2NhY2hlZFZhbHVlcy5kZWNvZGUoZGVjb2RlciwgaW1tdXRhYmxl
QnV0dGVyZmx5LT50b0J1dHRlcmZseSgpLT5jb250aWd1b3VzKCkuZGF0YSgpLCBtX2xlbmd0aCwg
aW1tdXRhYmxlQnV0dGVyZmx5KTsKLSAgICAgICAgcmV0dXJuIGltbXV0YWJsZUJ1dHRlcmZseTsK
LSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgSW5kZXhpbmdUeXBlIG1faW5kZXhpbmdUeXBlOwotICAg
IHVuc2lnbmVkIG1fbGVuZ3RoOwotICAgIHVuaW9uIHsKLSAgICAgICAgQ2FjaGVkQXJyYXk8ZG91
YmxlPiBtX2NhY2hlZERvdWJsZXM7Ci0gICAgICAgIENhY2hlZEFycmF5PENhY2hlZEpTVmFsdWUs
IFdyaXRlQmFycmllcjxVbmtub3duPj4gbV9jYWNoZWRWYWx1ZXM7Ci0gICAgfTsKLX07Ci0KLWNs
YXNzIENhY2hlZFJlZ0V4cCA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8UmVnRXhwPiB7Ci1wdWJsaWM6
Ci0gICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgUmVnRXhwJiByZWdFeHAp
Ci0gICAgewotICAgICAgICBtX3BhdHRlcm5TdHJpbmcuZW5jb2RlKGVuY29kZXIsIHJlZ0V4cC5t
X3BhdHRlcm5TdHJpbmcpOwotICAgICAgICBtX2ZsYWdzID0gcmVnRXhwLm1fZmxhZ3M7Ci0gICAg
fQotCi0gICAgUmVnRXhwKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKLSAgICB7Ci0g
ICAgICAgIFN0cmluZyBwYXR0ZXJuIHsgbV9wYXR0ZXJuU3RyaW5nLmRlY29kZShkZWNvZGVyKSB9
OwotICAgICAgICByZXR1cm4gUmVnRXhwOjpjcmVhdGUoZGVjb2Rlci52bSgpLCBwYXR0ZXJuLCBt
X2ZsYWdzKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQ2FjaGVkU3RyaW5nIG1fcGF0dGVyblN0
cmluZzsKLSAgICBSZWdFeHBGbGFncyBtX2ZsYWdzOwotfTsKLQotY2xhc3MgQ2FjaGVkVGVtcGxh
dGVPYmplY3REZXNjcmlwdG9yIDogcHVibGljIENhY2hlZE9iamVjdDxUZW1wbGF0ZU9iamVjdERl
c2NyaXB0b3I+IHsKLXB1YmxpYzoKLSAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBj
b25zdCBUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3ImIHRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcikK
LSAgICB7Ci0gICAgICAgIG1fcmF3U3RyaW5ncy5lbmNvZGUoZW5jb2RlciwgdGVtcGxhdGVPYmpl
Y3REZXNjcmlwdG9yLnJhd1N0cmluZ3MoKSk7Ci0gICAgICAgIG1fY29va2VkU3RyaW5ncy5lbmNv
ZGUoZW5jb2RlciwgdGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmNvb2tlZFN0cmluZ3MoKSk7Ci0g
ICAgfQotCi0gICAgUmVmPFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcj4gZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6
OlN0cmluZ1ZlY3RvciBkZWNvZGVkUmF3U3RyaW5nczsKLSAgICAgICAgVGVtcGxhdGVPYmplY3RE
ZXNjcmlwdG9yOjpPcHRpb25hbFN0cmluZ1ZlY3RvciBkZWNvZGVkQ29va2VkU3RyaW5nczsKLSAg
ICAgICAgbV9yYXdTdHJpbmdzLmRlY29kZShkZWNvZGVyLCBkZWNvZGVkUmF3U3RyaW5ncyk7Ci0g
ICAgICAgIG1fY29va2VkU3RyaW5ncy5kZWNvZGUoZGVjb2RlciwgZGVjb2RlZENvb2tlZFN0cmlu
Z3MpOwotICAgICAgICByZXR1cm4gVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOjpjcmVhdGUoV1RG
TW92ZShkZWNvZGVkUmF3U3RyaW5ncyksIFdURk1vdmUoZGVjb2RlZENvb2tlZFN0cmluZ3MpKTsK
LSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQ2FjaGVkVmVjdG9yPENhY2hlZFN0cmluZywgND4gbV9y
YXdTdHJpbmdzOwotICAgIENhY2hlZFZlY3RvcjxDYWNoZWRPcHRpb25hbDxDYWNoZWRTdHJpbmc+
LCA0PiBtX2Nvb2tlZFN0cmluZ3M7Ci19OwotCi1jbGFzcyBDYWNoZWRCaWdJbnQgOiBwdWJsaWMg
VmFyaWFibGVMZW5ndGhPYmplY3Q8SlNCaWdJbnQ+IHsKLXB1YmxpYzoKLSAgICB2b2lkIGVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBKU0JpZ0ludCYgYmlnSW50KQotICAgIHsKLSAgICAgICAgbV9s
ZW5ndGggPSBiaWdJbnQubGVuZ3RoKCk7Ci0gICAgICAgIG1fc2lnbiA9IGJpZ0ludC5zaWduKCk7
Ci0KLSAgICAgICAgaWYgKCFtX2xlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICB1bnNpZ25lZCBzaXplID0gc2l6ZW9mKEpTQmlnSW50OjpEaWdpdCkgKiBtX2xlbmd0aDsKLSAg
ICAgICAgdWludDhfdCogYnVmZmVyID0gdGhpcy0+YWxsb2NhdGUoZW5jb2Rlciwgc2l6ZSk7Ci0g
ICAgICAgIG1lbWNweShidWZmZXIsIGJpZ0ludC5kYXRhU3RvcmFnZSgpLCBzaXplKTsKLSAgICB9
Ci0KLSAgICBKU0JpZ0ludCogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0Ci0gICAgewot
ICAgICAgICBKU0JpZ0ludCogYmlnSW50ID0gSlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGhVbmNo
ZWNrZWQoZGVjb2Rlci52bSgpLCBtX2xlbmd0aCk7Ci0gICAgICAgIGJpZ0ludC0+c2V0U2lnbiht
X3NpZ24pOwotICAgICAgICBtZW1jcHkoYmlnSW50LT5kYXRhU3RvcmFnZSgpLCB0aGlzLT5idWZm
ZXIoKSwgc2l6ZW9mKEpTQmlnSW50OjpEaWdpdCkgKiBtX2xlbmd0aCk7Ci0gICAgICAgIHJldHVy
biBiaWdJbnQ7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwotICAg
IGJvb2wgbV9zaWduOwotfTsKLQotY2xhc3MgQ2FjaGVkSlNWYWx1ZSA6IHB1YmxpYyBWYXJpYWJs
ZUxlbmd0aE9iamVjdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4+IHsKLXB1YmxpYzoKLSAgICB2b2lk
IGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4gdmFs
dWUpCi0gICAgewotICAgICAgICBKU1ZhbHVlIHYgPSB2YWx1ZS5nZXQoKTsKLQotICAgICAgICBp
ZiAoIXYuaXNDZWxsKCkgfHwgdi5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIG1fdHlwZSA9IEVu
Y29kZWRUeXBlOjpKU1ZhbHVlOwotICAgICAgICAgICAgKnRoaXMtPmFsbG9jYXRlPEVuY29kZWRK
U1ZhbHVlPihlbmNvZGVyKSA9IEpTVmFsdWU6OmVuY29kZSh2KTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIEpTQ2VsbCogY2VsbCA9IHYuYXNDZWxsKCk7Ci0gICAg
ICAgIFZNJiB2bSA9IGVuY29kZXIudm0oKTsKLQotICAgICAgICBpZiAoYXV0byogc3ltYm9sVGFi
bGUgPSBqc0R5bmFtaWNDYXN0PFN5bWJvbFRhYmxlKj4odm0sIGNlbGwpKSB7Ci0gICAgICAgICAg
ICBtX3R5cGUgPSBFbmNvZGVkVHlwZTo6U3ltYm9sVGFibGU7Ci0gICAgICAgICAgICB0aGlzLT5h
bGxvY2F0ZTxDYWNoZWRTeW1ib2xUYWJsZT4oZW5jb2RlciktPmVuY29kZShlbmNvZGVyLCAqc3lt
Ym9sVGFibGUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGF1dG8qIHN0cmluZyA9IGpzRHluYW1pY0Nhc3Q8SlNTdHJpbmcqPih2bSwgY2VsbCkpIHsKLSAg
ICAgICAgICAgIG1fdHlwZSA9IEVuY29kZWRUeXBlOjpTdHJpbmc7Ci0gICAgICAgICAgICBTdHJp
bmdJbXBsKiBpbXBsID0gc3RyaW5nLT50cnlHZXRWYWx1ZSgpLmltcGwoKTsKLSAgICAgICAgICAg
IHRoaXMtPmFsbG9jYXRlPENhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsPihlbmNvZGVyKS0+ZW5jb2Rl
KGVuY29kZXIsICppbXBsKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChhdXRvKiBpbW11dGFibGVCdXR0ZXJmbHkgPSBqc0R5bmFtaWNDYXN0PEpTSW1tdXRh
YmxlQnV0dGVyZmx5Kj4odm0sIGNlbGwpKSB7Ci0gICAgICAgICAgICBtX3R5cGUgPSBFbmNvZGVk
VHlwZTo6SW1tdXRhYmxlQnV0dGVyZmx5OwotICAgICAgICAgICAgdGhpcy0+YWxsb2NhdGU8Q2Fj
aGVkSW1tdXRhYmxlQnV0dGVyZmx5PihlbmNvZGVyKS0+ZW5jb2RlKGVuY29kZXIsICppbW11dGFi
bGVCdXR0ZXJmbHkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKGF1dG8qIHJlZ2V4cCA9IGpzRHluYW1pY0Nhc3Q8UmVnRXhwKj4odm0sIGNlbGwpKSB7Ci0g
ICAgICAgICAgICBtX3R5cGUgPSBFbmNvZGVkVHlwZTo6UmVnRXhwOwotICAgICAgICAgICAgdGhp
cy0+YWxsb2NhdGU8Q2FjaGVkUmVnRXhwPihlbmNvZGVyKS0+ZW5jb2RlKGVuY29kZXIsICpyZWdl
eHApOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGF1dG8q
IHRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvciA9IGpzRHluYW1pY0Nhc3Q8SlNUZW1wbGF0ZU9iamVj
dERlc2NyaXB0b3IqPih2bSwgY2VsbCkpIHsKLSAgICAgICAgICAgIG1fdHlwZSA9IEVuY29kZWRU
eXBlOjpUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I7Ci0gICAgICAgICAgICB0aGlzLT5hbGxvY2F0
ZTxDYWNoZWRUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I+KGVuY29kZXIpLT5lbmNvZGUoZW5jb2Rl
ciwgdGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLT5kZXNjcmlwdG9yKCkpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGF1dG8qIGJpZ0ludCA9IGpzRHluYW1p
Y0Nhc3Q8SlNCaWdJbnQqPih2bSwgY2VsbCkpIHsKLSAgICAgICAgICAgIG1fdHlwZSA9IEVuY29k
ZWRUeXBlOjpCaWdJbnQ7Ci0gICAgICAgICAgICB0aGlzLT5hbGxvY2F0ZTxDYWNoZWRCaWdJbnQ+
KGVuY29kZXIpLT5lbmNvZGUoZW5jb2RlciwgKmJpZ0ludCk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IH0KLQotICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdyaXRlQmFycmllcjxVbmtu
b3duPiYgdmFsdWUsIGNvbnN0IEpTQ2VsbCogb3duZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBK
U1ZhbHVlIHY7Ci0gICAgICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgICAgIGNhc2UgRW5jb2Rl
ZFR5cGU6OkpTVmFsdWU6Ci0gICAgICAgICAgICB2ID0gSlNWYWx1ZTo6ZGVjb2RlKCp0aGlzLT5i
dWZmZXI8RW5jb2RlZEpTVmFsdWU+KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRW5jb2RlZFR5cGU6OlN5bWJvbFRhYmxlOgotICAgICAgICAgICAgdiA9IHRoaXMtPmJ1ZmZl
cjxDYWNoZWRTeW1ib2xUYWJsZT4oKS0+ZGVjb2RlKGRlY29kZXIpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgRW5jb2RlZFR5cGU6OlN0cmluZzogewotICAgICAgICAgICAgVW5p
cXVlZFN0cmluZ0ltcGwqIGltcGwgPSB0aGlzLT5idWZmZXI8Q2FjaGVkVW5pcXVlZFN0cmluZ0lt
cGw+KCktPmRlY29kZShkZWNvZGVyKTsKLSAgICAgICAgICAgIHYgPSBKU1N0cmluZzo6Y3JlYXRl
KGRlY29kZXIudm0oKSwgYWRvcHRSZWYoKmltcGwpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgRW5jb2RlZFR5cGU6OkltbXV0YWJsZUJ1dHRlcmZseToKLSAg
ICAgICAgICAgIHYgPSB0aGlzLT5idWZmZXI8Q2FjaGVkSW1tdXRhYmxlQnV0dGVyZmx5PigpLT5k
ZWNvZGUoZGVjb2Rlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFbmNvZGVk
VHlwZTo6UmVnRXhwOgotICAgICAgICAgICAgdiA9IHRoaXMtPmJ1ZmZlcjxDYWNoZWRSZWdFeHA+
KCktPmRlY29kZShkZWNvZGVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVu
Y29kZWRUeXBlOjpUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6Ci0gICAgICAgICAgICB2ID0gSlNU
ZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6OmNyZWF0ZShkZWNvZGVyLnZtKCksIHRoaXMtPmJ1ZmZl
cjxDYWNoZWRUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I+KCktPmRlY29kZShkZWNvZGVyKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFbmNvZGVkVHlwZTo6QmlnSW50OgotICAg
ICAgICAgICAgdiA9IHRoaXMtPmJ1ZmZlcjxDYWNoZWRCaWdJbnQ+KCktPmRlY29kZShkZWNvZGVy
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgICAgICB2YWx1ZS5zZXQo
ZGVjb2Rlci52bSgpLCBvd25lciwgdik7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGVudW0gY2xh
c3MgRW5jb2RlZFR5cGUgOiB1aW50OF90IHsKLSAgICAgICAgSlNWYWx1ZSwKLSAgICAgICAgU3lt
Ym9sVGFibGUsCi0gICAgICAgIFN0cmluZywKLSAgICAgICAgSW1tdXRhYmxlQnV0dGVyZmx5LAot
ICAgICAgICBSZWdFeHAsCi0gICAgICAgIFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvciwKLSAgICAg
ICAgQmlnSW50LAotICAgIH07Ci0KLSAgICBFbmNvZGVkVHlwZSBtX3R5cGU7Ci19OwotCi1jbGFz
cyBDYWNoZWRJbnN0cnVjdGlvblN0cmVhbSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8SW5zdHJ1Y3Rp
b25TdHJlYW0+IHsKLXB1YmxpYzoKLSAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBj
b25zdCBJbnN0cnVjdGlvblN0cmVhbSYgc3RyZWFtKQotICAgIHsKLSAgICAgICAgbV9pbnN0cnVj
dGlvbnMuZW5jb2RlKGVuY29kZXIsIHN0cmVhbS5tX2luc3RydWN0aW9ucyk7Ci0gICAgfQotCi0g
ICAgSW5zdHJ1Y3Rpb25TdHJlYW0qIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAotICAg
IHsKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3QsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBpbnN0
cnVjdGlvbnNWZWN0b3I7Ci0gICAgICAgIG1faW5zdHJ1Y3Rpb25zLmRlY29kZShkZWNvZGVyLCBp
bnN0cnVjdGlvbnNWZWN0b3IpOwotICAgICAgICByZXR1cm4gbmV3IEluc3RydWN0aW9uU3RyZWFt
KFdURk1vdmUoaW5zdHJ1Y3Rpb25zVmVjdG9yKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIENh
Y2hlZFZlY3Rvcjx1aW50OF90LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9pbnN0cnVjdGlv
bnM7Ci19OwotCi1jbGFzcyBDYWNoZWRNZXRhZGF0YVRhYmxlIDogcHVibGljIENhY2hlZE9iamVj
dDxVbmxpbmtlZE1ldGFkYXRhVGFibGU+IHsKLXB1YmxpYzoKLSAgICB2b2lkIGVuY29kZShFbmNv
ZGVyJiwgY29uc3QgVW5saW5rZWRNZXRhZGF0YVRhYmxlJiBtZXRhZGF0YVRhYmxlKQotICAgIHsK
LSAgICAgICAgQVNTRVJUKG1ldGFkYXRhVGFibGUubV9pc0ZpbmFsaXplZCk7Ci0gICAgICAgIG1f
aGFzTWV0YWRhdGEgPSBtZXRhZGF0YVRhYmxlLm1faGFzTWV0YWRhdGE7Ci0gICAgICAgIGlmICgh
bV9oYXNNZXRhZGF0YSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gVW5saW5rZWRNZXRhZGF0YVRhYmxlOjpzX29mZnNldFRhYmxlRW50cmllczsgaS0tOykK
LSAgICAgICAgICAgIG1fbWV0YWRhdGFbaV0gPSBtZXRhZGF0YVRhYmxlLmJ1ZmZlcigpW2ldOwot
ICAgIH0KLQotICAgIHZvaWQgZGVjb2RlKERlY29kZXImLCBVbmxpbmtlZE1ldGFkYXRhVGFibGUm
IG1ldGFkYXRhVGFibGUpIGNvbnN0Ci0gICAgewotICAgICAgICBtZXRhZGF0YVRhYmxlLm1faXNG
aW5hbGl6ZWQgPSB0cnVlOwotICAgICAgICBtZXRhZGF0YVRhYmxlLm1faXNMaW5rZWQgPSBmYWxz
ZTsKLSAgICAgICAgbWV0YWRhdGFUYWJsZS5tX2hhc01ldGFkYXRhID0gbV9oYXNNZXRhZGF0YTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gVW5saW5rZWRNZXRhZGF0YVRhYmxlOjpzX29mZnNl
dFRhYmxlRW50cmllczsgaS0tOykKLSAgICAgICAgICAgIG1ldGFkYXRhVGFibGUuYnVmZmVyKClb
aV0gPSBtX21ldGFkYXRhW2ldOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBib29sIG1faGFzTWV0
YWRhdGE7Ci0gICAgc3RkOjphcnJheTx1bnNpZ25lZCwgVW5saW5rZWRNZXRhZGF0YVRhYmxlOjpz
X29mZnNldFRhYmxlRW50cmllcz4gbV9tZXRhZGF0YTsKLX07Ci0KLWNsYXNzIENhY2hlZFNvdXJj
ZU9yaWdpbiA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8U291cmNlT3JpZ2luPiB7Ci1wdWJsaWM6Ci0g
ICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU291cmNlT3JpZ2luJiBzb3Vy
Y2VPcmlnaW4pCi0gICAgewotICAgICAgICBtX3N0cmluZy5lbmNvZGUoZW5jb2Rlciwgc291cmNl
T3JpZ2luLnN0cmluZygpKTsKLSAgICB9Ci0KLSAgICBTb3VyY2VPcmlnaW4gZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gU291cmNlT3JpZ2luIHsg
bV9zdHJpbmcuZGVjb2RlKGRlY29kZXIpIH07Ci0gICAgfQotCi1wcml2YXRlOgotICAgIENhY2hl
ZFN0cmluZyBtX3N0cmluZzsKLX07Ci0KLWNsYXNzIENhY2hlZFRleHRQb3NpdGlvbiA6IHB1Ymxp
YyBDYWNoZWRPYmplY3Q8VGV4dFBvc2l0aW9uPiB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBlbmNvZGUo
RW5jb2RlciYsIFRleHRQb3NpdGlvbiB0ZXh0UG9zaXRpb24pCi0gICAgewotICAgICAgICBtX2xp
bmUgPSB0ZXh0UG9zaXRpb24ubV9saW5lLnplcm9CYXNlZEludCgpOwotICAgICAgICBtX2NvbHVt
biA9IHRleHRQb3NpdGlvbi5tX2NvbHVtbi56ZXJvQmFzZWRJbnQoKTsKLSAgICB9Ci0KLSAgICBU
ZXh0UG9zaXRpb24gZGVjb2RlKERlY29kZXImKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IFRleHRQb3NpdGlvbiB7IE9yZGluYWxOdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQobV9saW5lKSwg
T3JkaW5hbE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChtX2NvbHVtbikgfTsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgaW50IG1fbGluZTsKLSAgICBpbnQgbV9jb2x1bW47Ci19OwotCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgU291cmNlLCB0eXBlbmFtZSBDYWNoZWRUeXBlPgotY2xhc3MgQ2FjaGVkU291
cmNlUHJvdmlkZXJTaGFwZSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8U291cmNlPiB7Ci1wdWJsaWM6
Ci0gICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU291cmNlUHJvdmlkZXIm
IHNvdXJjZVByb3ZpZGVyKQotICAgIHsKLSAgICAgICAgbV92YWxpZGF0ZWQgPSBzb3VyY2VQcm92
aWRlci5pc1ZhbGlkKCk7Ci0gICAgICAgIG1fc291cmNlT3JpZ2luLmVuY29kZShlbmNvZGVyLCBz
b3VyY2VQcm92aWRlci5zb3VyY2VPcmlnaW4oKSk7Ci0gICAgICAgIG1fdXJsLmVuY29kZShlbmNv
ZGVyLCBzb3VyY2VQcm92aWRlci51cmwoKSk7Ci0gICAgICAgIG1fc291cmNlVVJMRGlyZWN0aXZl
LmVuY29kZShlbmNvZGVyLCBzb3VyY2VQcm92aWRlci5zb3VyY2VVUkwoKSk7Ci0gICAgICAgIG1f
c291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZS5lbmNvZGUoZW5jb2Rlciwgc291cmNlUHJvdmlkZXIu
c291cmNlTWFwcGluZ1VSTCgpKTsKLSAgICAgICAgbV9zdGFydFBvc2l0aW9uLmVuY29kZShlbmNv
ZGVyLCBzb3VyY2VQcm92aWRlci5zdGFydFBvc2l0aW9uKCkpOwotICAgIH0KLQotICAgIHZvaWQg
ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNvdXJjZVByb3ZpZGVyJiBzb3VyY2VQcm92aWRlcikg
Y29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChtX3ZhbGlkYXRlZCkKLSAgICAgICAgICAgIHNvdXJj
ZVByb3ZpZGVyLnNldFZhbGlkKCk7Ci0gICAgICAgIHNvdXJjZVByb3ZpZGVyLnNldFNvdXJjZVVS
TERpcmVjdGl2ZShtX3NvdXJjZVVSTERpcmVjdGl2ZS5kZWNvZGUoZGVjb2RlcikpOwotICAgICAg
ICBzb3VyY2VQcm92aWRlci5zZXRTb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlKG1fc291cmNlTWFw
cGluZ1VSTERpcmVjdGl2ZS5kZWNvZGUoZGVjb2RlcikpOwotICAgIH0KLQotcHJvdGVjdGVkOgot
ICAgIGJvb2wgbV92YWxpZGF0ZWQgOiAxOwotICAgIENhY2hlZFNvdXJjZU9yaWdpbiBtX3NvdXJj
ZU9yaWdpbjsKLSAgICBDYWNoZWRTdHJpbmcgbV91cmw7Ci0gICAgQ2FjaGVkU3RyaW5nIG1fc291
cmNlVVJMRGlyZWN0aXZlOwotICAgIENhY2hlZFN0cmluZyBtX3NvdXJjZU1hcHBpbmdVUkxEaXJl
Y3RpdmU7Ci0gICAgQ2FjaGVkVGV4dFBvc2l0aW9uIG1fc3RhcnRQb3NpdGlvbjsKLX07Ci0KLWNs
YXNzIENhY2hlZFN0cmluZ1NvdXJjZVByb3ZpZGVyIDogcHVibGljIENhY2hlZFNvdXJjZVByb3Zp
ZGVyU2hhcGU8U3RyaW5nU291cmNlUHJvdmlkZXIsIENhY2hlZFN0cmluZ1NvdXJjZVByb3ZpZGVy
PiB7Ci0gICAgdXNpbmcgQmFzZSA9IENhY2hlZFNvdXJjZVByb3ZpZGVyU2hhcGU8U3RyaW5nU291
cmNlUHJvdmlkZXIsIENhY2hlZFN0cmluZ1NvdXJjZVByb3ZpZGVyPjsKLQotcHVibGljOgotICAg
IHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFN0cmluZ1NvdXJjZVByb3ZpZGVy
JiBzb3VyY2VQcm92aWRlcikKLSAgICB7Ci0gICAgICAgIEJhc2U6OmVuY29kZShlbmNvZGVyLCBz
b3VyY2VQcm92aWRlcik7Ci0gICAgICAgIG1fc291cmNlLmVuY29kZShlbmNvZGVyLCBzb3VyY2VQ
cm92aWRlci5zb3VyY2UoKS50b1N0cmluZygpKTsKLSAgICB9Ci0KLSAgICBTdHJpbmdTb3VyY2VQ
cm92aWRlciogZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNvdXJjZVByb3ZpZGVyU291cmNlVHlw
ZSBzb3VyY2VUeXBlKSBjb25zdAotICAgIHsKLSAgICAgICAgU3RyaW5nIGRlY29kZWRTb3VyY2Ug
PSBtX3NvdXJjZS5kZWNvZGUoZGVjb2Rlcik7Ci0gICAgICAgIFNvdXJjZU9yaWdpbiBkZWNvZGVk
U291cmNlT3JpZ2luID0gbV9zb3VyY2VPcmlnaW4uZGVjb2RlKGRlY29kZXIpOwotICAgICAgICBT
dHJpbmcgZGVjb2RlZFVSTCA9IG1fdXJsLmRlY29kZShkZWNvZGVyKTsKLSAgICAgICAgVGV4dFBv
c2l0aW9uIGRlY29kZWRTdGFydFBvc2l0aW9uID0gbV9zdGFydFBvc2l0aW9uLmRlY29kZShkZWNv
ZGVyKTsKLQotICAgICAgICBSZWY8U3RyaW5nU291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVy
ID0gU3RyaW5nU291cmNlUHJvdmlkZXI6OmNyZWF0ZShkZWNvZGVkU291cmNlLCBkZWNvZGVkU291
cmNlT3JpZ2luLCBVUkwoVVJMKCksIGRlY29kZWRVUkwpLCBkZWNvZGVkU3RhcnRQb3NpdGlvbiwg
c291cmNlVHlwZSk7Ci0gICAgICAgIEJhc2U6OmRlY29kZShkZWNvZGVyLCBzb3VyY2VQcm92aWRl
ci5nZXQoKSk7Ci0gICAgICAgIHJldHVybiAmc291cmNlUHJvdmlkZXIubGVha1JlZigpOwotICAg
IH0KLQotcHJpdmF0ZToKLSAgICBDYWNoZWRTdHJpbmcgbV9zb3VyY2U7Ci19OwotCi0jaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQotY2xhc3MgQ2FjaGVkV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlciA6
IHB1YmxpYyBDYWNoZWRTb3VyY2VQcm92aWRlclNoYXBlPFdlYkFzc2VtYmx5U291cmNlUHJvdmlk
ZXIsIENhY2hlZFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXI+IHsKLSAgICB1c2luZyBCYXNlID0g
Q2FjaGVkU291cmNlUHJvdmlkZXJTaGFwZTxXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyLCBDYWNo
ZWRXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyPjsKLQotcHVibGljOgotICAgIHZvaWQgZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXImIHNvdXJj
ZVByb3ZpZGVyKQotICAgIHsKLSAgICAgICAgQmFzZTo6ZW5jb2RlKGVuY29kZXIsIHNvdXJjZVBy
b3ZpZGVyKTsKLSAgICAgICAgbV9kYXRhLmVuY29kZShlbmNvZGVyLCBzb3VyY2VQcm92aWRlci5k
YXRhKCkpOwotICAgIH0KLQotICAgIFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXIqIGRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRl
Y29kZWREYXRhOwotICAgICAgICBTb3VyY2VPcmlnaW4gZGVjb2RlZFNvdXJjZU9yaWdpbiA9IG1f
c291cmNlT3JpZ2luLmRlY29kZShkZWNvZGVyKTsKLSAgICAgICAgU3RyaW5nIGRlY29kZWRVUkwg
PSBtX3VybC5kZWNvZGUoZGVjb2Rlcik7Ci0KLSAgICAgICAgbV9kYXRhLmRlY29kZShkZWNvZGVy
LCBkZWNvZGVkRGF0YSk7Ci0KLSAgICAgICAgUmVmPFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXI+
IHNvdXJjZVByb3ZpZGVyID0gV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKFdURk1v
dmUoZGVjb2RlZERhdGEpLCBkZWNvZGVkU291cmNlT3JpZ2luLCBVUkwoVVJMKCksIGRlY29kZWRV
UkwpKTsKLSAgICAgICAgQmFzZTo6ZGVjb2RlKGRlY29kZXIsIHNvdXJjZVByb3ZpZGVyLmdldCgp
KTsKLQotICAgICAgICByZXR1cm4gJnNvdXJjZVByb3ZpZGVyLmxlYWtSZWYoKTsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgQ2FjaGVkVmVjdG9yPHVpbnQ4X3Q+IG1fZGF0YTsKLX07Ci0jZW5kaWYK
LQotY2xhc3MgQ2FjaGVkU291cmNlUHJvdmlkZXIgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmpl
Y3Q8U291cmNlUHJvdmlkZXI+IHsKLXB1YmxpYzoKLSAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBTb3VyY2VQcm92aWRlciYgc291cmNlUHJvdmlkZXIpCi0gICAgewotICAg
ICAgICBtX3NvdXJjZVR5cGUgPSBzb3VyY2VQcm92aWRlci5zb3VyY2VUeXBlKCk7Ci0gICAgICAg
IHN3aXRjaCAobV9zb3VyY2VUeXBlKSB7Ci0gICAgICAgIGNhc2UgU291cmNlUHJvdmlkZXJTb3Vy
Y2VUeXBlOjpQcm9ncmFtOgotICAgICAgICBjYXNlIFNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6
TW9kdWxlOgotICAgICAgICAgICAgdGhpcy0+YWxsb2NhdGU8Q2FjaGVkU3RyaW5nU291cmNlUHJv
dmlkZXI+KGVuY29kZXIpLT5lbmNvZGUoZW5jb2RlciwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBT
dHJpbmdTb3VyY2VQcm92aWRlciY+KHNvdXJjZVByb3ZpZGVyKSk7Ci0gICAgICAgICAgICBicmVh
azsKLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgICAgIGNhc2UgU291cmNlUHJvdmlkZXJT
b3VyY2VUeXBlOjpXZWJBc3NlbWJseToKLSAgICAgICAgICAgIHRoaXMtPmFsbG9jYXRlPENhY2hl
ZFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXI+KGVuY29kZXIpLT5lbmNvZGUoZW5jb2RlciwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyJj4oc291cmNlUHJv
dmlkZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgU291cmNlUHJvdmlkZXIqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAot
ICAgIHsKLSAgICAgICAgc3dpdGNoIChtX3NvdXJjZVR5cGUpIHsKLSAgICAgICAgY2FzZSBTb3Vy
Y2VQcm92aWRlclNvdXJjZVR5cGU6OlByb2dyYW06Ci0gICAgICAgIGNhc2UgU291cmNlUHJvdmlk
ZXJTb3VyY2VUeXBlOjpNb2R1bGU6Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy0+YnVmZmVyPENh
Y2hlZFN0cmluZ1NvdXJjZVByb3ZpZGVyPigpLT5kZWNvZGUoZGVjb2RlciwgbV9zb3VyY2VUeXBl
KTsKLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgICAgIGNhc2UgU291cmNlUHJvdmlkZXJT
b3VyY2VUeXBlOjpXZWJBc3NlbWJseToKLSAgICAgICAgICAgIHJldHVybiB0aGlzLT5idWZmZXI8
Q2FjaGVkV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlcj4oKS0+ZGVjb2RlKGRlY29kZXIpOwotI2Vu
ZGlmCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICB9Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFNvdXJjZVByb3ZpZGVy
U291cmNlVHlwZSBtX3NvdXJjZVR5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBTb3VyY2U+
Ci1jbGFzcyBDYWNoZWRVbmxpbmtlZFNvdXJjZUNvZGVTaGFwZSA6IHB1YmxpYyBDYWNoZWRPYmpl
Y3Q8U291cmNlPiB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgVW5saW5rZWRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKQotICAgIHsKLSAgICAgICAgbV9w
cm92aWRlci5lbmNvZGUoZW5jb2Rlciwgc291cmNlQ29kZS5tX3Byb3ZpZGVyLmdldCgpKTsKLSAg
ICAgICAgbV9zdGFydE9mZnNldCA9IHNvdXJjZUNvZGUuc3RhcnRPZmZzZXQoKTsKLSAgICAgICAg
bV9lbmRPZmZzZXQgPSBzb3VyY2VDb2RlLmVuZE9mZnNldCgpOwotICAgIH0KLQotICAgIHZvaWQg
ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFVubGlua2VkU291cmNlQ29kZSYgc291cmNlQ29kZSkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHNvdXJjZUNvZGUubV9wcm92aWRlciA9IG1fcHJvdmlkZXIu
ZGVjb2RlKGRlY29kZXIpOwotICAgICAgICBzb3VyY2VDb2RlLm1fc3RhcnRPZmZzZXQgPSBtX3N0
YXJ0T2Zmc2V0OwotICAgICAgICBzb3VyY2VDb2RlLm1fZW5kT2Zmc2V0ID0gbV9lbmRPZmZzZXQ7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIENhY2hlZFB0cjxDYWNoZWRTb3VyY2VQcm92aWRlcj4g
bV9wcm92aWRlcjsKLSAgICBpbnQgbV9zdGFydE9mZnNldDsKLSAgICBpbnQgbV9lbmRPZmZzZXQ7
Ci19OwotCi0KLWNsYXNzIENhY2hlZFVubGlua2VkU291cmNlQ29kZSA6IHB1YmxpYyBDYWNoZWRV
bmxpbmtlZFNvdXJjZUNvZGVTaGFwZTxVbmxpbmtlZFNvdXJjZUNvZGU+IHsgfTsKLQotY2xhc3Mg
Q2FjaGVkU291cmNlQ29kZSA6IHB1YmxpYyBDYWNoZWRVbmxpbmtlZFNvdXJjZUNvZGVTaGFwZTxT
b3VyY2VDb2RlPiB7Ci0gICAgdXNpbmcgQmFzZSA9IENhY2hlZFVubGlua2VkU291cmNlQ29kZVNo
YXBlPFNvdXJjZUNvZGU+OwotCi1wdWJsaWM6Ci0gICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5j
b2RlciwgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSkKLSAgICB7Ci0gICAgICAgIEJhc2U6
OmVuY29kZShlbmNvZGVyLCBzb3VyY2VDb2RlKTsKLSAgICAgICAgbV9maXJzdExpbmUgPSBzb3Vy
Y2VDb2RlLmZpcnN0TGluZSgpLnplcm9CYXNlZEludCgpOwotICAgICAgICBtX3N0YXJ0Q29sdW1u
ID0gc291cmNlQ29kZS5zdGFydENvbHVtbigpLnplcm9CYXNlZEludCgpOwotICAgIH0KLQotICAg
IHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpIGNv
bnN0Ci0gICAgewotICAgICAgICBCYXNlOjpkZWNvZGUoZGVjb2Rlciwgc291cmNlQ29kZSk7Ci0g
ICAgICAgIHNvdXJjZUNvZGUubV9maXJzdExpbmUgPSBPcmRpbmFsTnVtYmVyOjpmcm9tWmVyb0Jh
c2VkSW50KG1fZmlyc3RMaW5lKTsKLSAgICAgICAgc291cmNlQ29kZS5tX3N0YXJ0Q29sdW1uID0g
T3JkaW5hbE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChtX3N0YXJ0Q29sdW1uKTsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgaW50IG1fZmlyc3RMaW5lOwotICAgIGludCBtX3N0YXJ0Q29sdW1uOwot
fTsKLQotY2xhc3MgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlIDogcHVibGljIENhY2hlZE9iamVj
dDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4gewotcHVibGljOgotICAgIHZvaWQgZW5jb2Rl
KEVuY29kZXImLCBjb25zdCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSYpOwotICAgIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBkZWNvZGUoRGVjb2RlciYpIGNvbnN0OwotCi0gICAgdW5z
aWduZWQgZmlyc3RMaW5lT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9maXJzdExpbmVPZmZzZXQ7
IH0KLSAgICB1bnNpZ25lZCBsaW5lQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDb3VudDsg
fQotICAgIHVuc2lnbmVkIHVubGlua2VkRnVuY3Rpb25OYW1lU3RhcnQoKSBjb25zdCB7IHJldHVy
biBtX3VubGlua2VkRnVuY3Rpb25OYW1lU3RhcnQ7IH0KLSAgICB1bnNpZ25lZCB1bmxpbmtlZEJv
ZHlTdGFydENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRCb2R5U3RhcnRDb2x1bW47
IH0KLSAgICB1bnNpZ25lZCB1bmxpbmtlZEJvZHlFbmRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBt
X3VubGlua2VkQm9keUVuZENvbHVtbjsgfQotICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gbV9zdGFydE9mZnNldDsgfQotICAgIHVuc2lnbmVkIHNvdXJjZUxlbmd0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fc291cmNlTGVuZ3RoOyB9Ci0gICAgdW5zaWduZWQgcGFyYW1ldGVy
c1N0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzU3RhcnRPZmZzZXQ7IH0K
LSAgICB1bnNpZ25lZCB0eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X3R5cGVQcm9maWxpbmdTdGFydE9mZnNldDsgfQotICAgIHVuc2lnbmVkIHR5cGVQcm9maWxpbmdF
bmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3R5cGVQcm9maWxpbmdFbmRPZmZzZXQ7IH0KLSAg
ICB1bnNpZ25lZCBwYXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVyQ291
bnQ7IH0KLQotICAgIENvZGVGZWF0dXJlcyBmZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVh
dHVyZXM7IH0KLSAgICBTb3VyY2VQYXJzZU1vZGUgc291cmNlUGFyc2VNb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zb3VyY2VQYXJzZU1vZGU7IH0KLQotICAgIHVuc2lnbmVkIGlzSW5TdHJpY3RDb250
ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pc0luU3RyaWN0Q29udGV4dDsgfQotICAgIHVuc2lnbmVk
IGhhc0NhcHR1cmVkVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDYXB0dXJlZFZhcmlh
YmxlczsgfQotICAgIHVuc2lnbmVkIGlzQnVpbHRpbkZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9pc0J1aWx0aW5GdW5jdGlvbjsgfQotICAgIHVuc2lnbmVkIGlzQnVpbHRpbkRlZmF1bHRDbGFz
c0NvbnN0cnVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9pc0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25z
dHJ1Y3RvcjsgfQotICAgIHVuc2lnbmVkIGNvbnN0cnVjdEFiaWxpdHkoKSBjb25zdCB7IHJldHVy
biBtX2NvbnN0cnVjdEFiaWxpdHk7IH0KLSAgICB1bnNpZ25lZCBjb25zdHJ1Y3RvcktpbmQoKSBj
b25zdCB7IHJldHVybiBtX2NvbnN0cnVjdG9yS2luZDsgfQotICAgIHVuc2lnbmVkIGZ1bmN0aW9u
TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rpb25Nb2RlOyB9Ci0gICAgdW5zaWduZWQgc2Ny
aXB0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NyaXB0TW9kZTsgfQotICAgIHVuc2lnbmVkIHN1
cGVyQmluZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fc3VwZXJCaW5kaW5nOyB9Ci0gICAgdW5zaWdu
ZWQgZGVyaXZlZENvbnRleHRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9kZXJpdmVkQ29udGV4dFR5
cGU7IH0KLQotICAgIElkZW50aWZpZXIgbmFtZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdCB7IHJl
dHVybiBtX25hbWUuZGVjb2RlKGRlY29kZXIpOyB9Ci0gICAgSWRlbnRpZmllciBlY21hTmFtZShE
ZWNvZGVyJiBkZWNvZGVyKSBjb25zdCB7IHJldHVybiBtX2VjbWFOYW1lLmRlY29kZShkZWNvZGVy
KTsgfQotICAgIElkZW50aWZpZXIgaW5mZXJyZWROYW1lKERlY29kZXImIGRlY29kZXIpIGNvbnN0
IHsgcmV0dXJuIG1faW5mZXJyZWROYW1lLmRlY29kZShkZWNvZGVyKTsgfQotCi1wcml2YXRlOgot
ICAgIHVuc2lnbmVkIG1fZmlyc3RMaW5lT2Zmc2V0OwotICAgIHVuc2lnbmVkIG1fbGluZUNvdW50
OwotICAgIHVuc2lnbmVkIG1fdW5saW5rZWRGdW5jdGlvbk5hbWVTdGFydDsKLSAgICB1bnNpZ25l
ZCBtX3VubGlua2VkQm9keVN0YXJ0Q29sdW1uOwotICAgIHVuc2lnbmVkIG1fdW5saW5rZWRCb2R5
RW5kQ29sdW1uOwotICAgIHVuc2lnbmVkIG1fc3RhcnRPZmZzZXQ7Ci0gICAgdW5zaWduZWQgbV9z
b3VyY2VMZW5ndGg7Ci0gICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJzU3RhcnRPZmZzZXQ7Ci0gICAg
dW5zaWduZWQgbV90eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQ7Ci0gICAgdW5zaWduZWQgbV90eXBl
UHJvZmlsaW5nRW5kT2Zmc2V0OwotICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyQ291bnQ7Ci0gICAg
Q29kZUZlYXR1cmVzIG1fZmVhdHVyZXM7Ci0gICAgU291cmNlUGFyc2VNb2RlIG1fc291cmNlUGFy
c2VNb2RlOwotICAgIHVuc2lnbmVkIG1faXNJblN0cmljdENvbnRleHQgOiAxOwotICAgIHVuc2ln
bmVkIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgOiAxOwotICAgIHVuc2lnbmVkIG1faXNCdWlsdGlu
RnVuY3Rpb24gOiAxOwotICAgIHVuc2lnbmVkIG1faXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3Ry
dWN0b3IgOiAxOwotICAgIHVuc2lnbmVkIG1fY29uc3RydWN0QWJpbGl0eTogMTsKLSAgICB1bnNp
Z25lZCBtX2NvbnN0cnVjdG9yS2luZCA6IDI7Ci0gICAgdW5zaWduZWQgbV9mdW5jdGlvbk1vZGUg
OiAyOyAvLyBGdW5jdGlvbk1vZGUKLSAgICB1bnNpZ25lZCBtX3NjcmlwdE1vZGU6IDE7IC8vIEpT
UGFyc2VyU2NyaXB0TW9kZQotICAgIHVuc2lnbmVkIG1fc3VwZXJCaW5kaW5nIDogMTsKLSAgICB1
bnNpZ25lZCBtX2Rlcml2ZWRDb250ZXh0VHlwZTogMjsKLQotICAgIENhY2hlZFNvdXJjZUNvZGUg
bV9jbGFzc1NvdXJjZTsKLQotICAgIENhY2hlZElkZW50aWZpZXIgbV9uYW1lOwotICAgIENhY2hl
ZElkZW50aWZpZXIgbV9lY21hTmFtZTsKLSAgICBDYWNoZWRJZGVudGlmaWVyIG1faW5mZXJyZWRO
YW1lOwotCi0gICAgQ2FjaGVkVmFyaWFibGVFbnZpcm9ubWVudCBtX3BhcmVudFNjb3BlVERaVmFy
aWFibGVzOwotCi0gICAgQ2FjaGVkV3JpdGVCYXJyaWVyPENhY2hlZEZ1bmN0aW9uQ29kZUJsb2Nr
LCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrPiBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ2FsbDsK
LSAgICBDYWNoZWRXcml0ZUJhcnJpZXI8Q2FjaGVkRnVuY3Rpb25Db2RlQmxvY2ssIFVubGlua2Vk
RnVuY3Rpb25Db2RlQmxvY2s+IG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7Ci19Owot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgotY2xhc3MgQ2FjaGVkQ29kZUJsb2Nr
IDogcHVibGljIENhY2hlZE9iamVjdDxDb2RlQmxvY2tUeXBlPiB7Ci1wdWJsaWM6Ci0gICAgdm9p
ZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFVubGlua2VkQ29kZUJsb2NrJik7Ci0gICAgdm9pZCBk
ZWNvZGUoRGVjb2RlciYsIFVubGlua2VkQ29kZUJsb2NrJikgY29uc3Q7Ci0KLSAgICBJbnN0cnVj
dGlvblN0cmVhbSogaW5zdHJ1Y3Rpb25zKERlY29kZXImIGRlY29kZXIpIGNvbnN0IHsgcmV0dXJu
IG1faW5zdHJ1Y3Rpb25zLmRlY29kZShkZWNvZGVyKTsgfQotCi0gICAgVmlydHVhbFJlZ2lzdGVy
IHRoaXNSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fdGhpc1JlZ2lzdGVyOyB9Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlUmVnaXN0
ZXI7IH0KLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZ2xvYmFsT2JqZWN0UmVnaXN0ZXIoKSBjb25zdCB7
IHJldHVybiBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyOyB9Ci0KLSAgICBTdHJpbmcgc291cmNlVVJM
RGlyZWN0aXZlKERlY29kZXImIGRlY29kZXIpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlVVJMRGly
ZWN0aXZlLmRlY29kZShkZWNvZGVyKTsgfQotICAgIFN0cmluZyBzb3VyY2VNYXBwaW5nVVJMRGly
ZWN0aXZlKERlY29kZXImIGRlY29kZXIpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlTWFwcGluZ1VS
TERpcmVjdGl2ZS5kZWNvZGUoZGVjb2Rlcik7IH0KLQotICAgIHVuc2lnbmVkIHVzZXNFdmFsKCkg
Y29uc3QgeyByZXR1cm4gbV91c2VzRXZhbDsgfQotICAgIHVuc2lnbmVkIGlzU3RyaWN0TW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1faXNTdHJpY3RNb2RlOyB9Ci0gICAgdW5zaWduZWQgaXNDb25zdHJ1
Y3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faXNDb25zdHJ1Y3RvcjsgfQotICAgIHVuc2lnbmVkIGhh
c0NhcHR1cmVkVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDYXB0dXJlZFZhcmlhYmxl
czsgfQotICAgIHVuc2lnbmVkIGlzQnVpbHRpbkZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9p
c0J1aWx0aW5GdW5jdGlvbjsgfQotICAgIHVuc2lnbmVkIHN1cGVyQmluZGluZygpIGNvbnN0IHsg
cmV0dXJuIG1fc3VwZXJCaW5kaW5nOyB9Ci0gICAgdW5zaWduZWQgc2NyaXB0TW9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2NyaXB0TW9kZTsgfQotICAgIHVuc2lnbmVkIGlzQXJyb3dGdW5jdGlvbkNv
bnRleHQoKSBjb25zdCB7IHJldHVybiBtX2lzQXJyb3dGdW5jdGlvbkNvbnRleHQ7IH0KLSAgICB1
bnNpZ25lZCBpc0NsYXNzQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDbGFzc0NvbnRleHQ7
IH0KLSAgICB1bnNpZ25lZCB3YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkgY29uc3Qg
eyByZXR1cm4gbV93YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzOyB9Ci0gICAgdW5zaWdu
ZWQgY29uc3RydWN0b3JLaW5kKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdHJ1Y3RvcktpbmQ7IH0K
LSAgICB1bnNpZ25lZCBkZXJpdmVkQ29udGV4dFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2Rlcml2
ZWRDb250ZXh0VHlwZTsgfQotICAgIHVuc2lnbmVkIGV2YWxDb250ZXh0VHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZXZhbENvbnRleHRUeXBlOyB9Ci0gICAgdW5zaWduZWQgaGFzVGFpbENhbGxzKCkg
Y29uc3QgeyByZXR1cm4gbV9oYXNUYWlsQ2FsbHM7IH0KLSAgICB1bnNpZ25lZCBsaW5lQ291bnQo
KSBjb25zdCB7IHJldHVybiBtX2xpbmVDb3VudDsgfQotICAgIHVuc2lnbmVkIGVuZENvbHVtbigp
IGNvbnN0IHsgcmV0dXJuIG1fZW5kQ29sdW1uOyB9Ci0KLSAgICBpbnQgbnVtVmFycygpIGNvbnN0
IHsgcmV0dXJuIG1fbnVtVmFyczsgfQotICAgIGludCBudW1DYWxsZWVMb2NhbHMoKSBjb25zdCB7
IHJldHVybiBtX251bUNhbGxlZUxvY2FsczsgfQotICAgIGludCBudW1QYXJhbWV0ZXJzKCkgY29u
c3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9Ci0KLSAgICBDb2RlRmVhdHVyZXMgZmVhdHVy
ZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzOyB9Ci0gICAgU291cmNlUGFyc2VNb2RlIHBh
cnNlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyc2VNb2RlOyB9Ci0gICAgQ29kZVR5cGUgY29k
ZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVUeXBlOyB9Ci0KLSAgICBVbmxpbmtlZENvZGVC
bG9jazo6UmFyZURhdGEqIHJhcmVEYXRhKERlY29kZXImIGRlY29kZXIpIGNvbnN0IHsgcmV0dXJu
IG1fcmFyZURhdGEuZGVjb2RlQXNQdHIoZGVjb2Rlcik7IH0KLQotcHJpdmF0ZToKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgbV90aGlzUmVnaXN0ZXI7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG1fc2NvcGVS
ZWdpc3RlcjsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9nbG9iYWxPYmplY3RSZWdpc3RlcjsKLQot
ICAgIHVuc2lnbmVkIG1fdXNlc0V2YWwgOiAxOwotICAgIHVuc2lnbmVkIG1faXNTdHJpY3RNb2Rl
IDogMTsKLSAgICB1bnNpZ25lZCBtX2lzQ29uc3RydWN0b3IgOiAxOwotICAgIHVuc2lnbmVkIG1f
aGFzQ2FwdHVyZWRWYXJpYWJsZXMgOiAxOwotICAgIHVuc2lnbmVkIG1faXNCdWlsdGluRnVuY3Rp
b24gOiAxOwotICAgIHVuc2lnbmVkIG1fc3VwZXJCaW5kaW5nIDogMTsKLSAgICB1bnNpZ25lZCBt
X3NjcmlwdE1vZGU6IDE7Ci0gICAgdW5zaWduZWQgbV9pc0Fycm93RnVuY3Rpb25Db250ZXh0IDog
MTsKLSAgICB1bnNpZ25lZCBtX2lzQ2xhc3NDb250ZXh0IDogMTsKLSAgICB1bnNpZ25lZCBtX3dh
c0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMgOiAxOwotICAgIHVuc2lnbmVkIG1fY29uc3Ry
dWN0b3JLaW5kIDogMjsKLSAgICB1bnNpZ25lZCBtX2Rlcml2ZWRDb250ZXh0VHlwZSA6IDI7Ci0g
ICAgdW5zaWduZWQgbV9ldmFsQ29udGV4dFR5cGUgOiAyOwotICAgIHVuc2lnbmVkIG1faGFzVGFp
bENhbGxzIDogMTsKLQotICAgIHVuc2lnbmVkIG1fbGluZUNvdW50OwotICAgIHVuc2lnbmVkIG1f
ZW5kQ29sdW1uOwotCi0gICAgaW50IG1fbnVtVmFyczsKLSAgICBpbnQgbV9udW1DYWxsZWVMb2Nh
bHM7Ci0gICAgaW50IG1fbnVtUGFyYW1ldGVyczsKLQotICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1
cmVzOwotICAgIFNvdXJjZVBhcnNlTW9kZSBtX3BhcnNlTW9kZTsKLSAgICBDb2RlVHlwZSBtX2Nv
ZGVUeXBlOwotCi0gICAgc3RkOjphcnJheTx1bnNpZ25lZCwgTGlua1RpbWVDb25zdGFudENvdW50
PiBtX2xpbmtUaW1lQ29uc3RhbnRzOwotICAgIENhY2hlZE1ldGFkYXRhVGFibGUgbV9tZXRhZGF0
YTsKLQotICAgIENhY2hlZE9wdGlvbmFsPENhY2hlZENvZGVCbG9ja1JhcmVEYXRhPiBtX3JhcmVE
YXRhOwotCi0gICAgQ2FjaGVkU3RyaW5nIG1fc291cmNlVVJMRGlyZWN0aXZlOwotICAgIENhY2hl
ZFN0cmluZyBtX3NvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmU7Ci0KLSAgICBDYWNoZWRQdHI8Q2Fj
aGVkSW5zdHJ1Y3Rpb25TdHJlYW0+IG1faW5zdHJ1Y3Rpb25zOwotICAgIENhY2hlZFZlY3RvcjxJ
bnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0PiBtX2p1bXBUYXJnZXRzOwotICAgIENhY2hlZFZlY3Rv
cjxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0PiBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25z
OwotICAgIENhY2hlZFZlY3RvcjxDYWNoZWRKU1ZhbHVlPiBtX2NvbnN0YW50UmVnaXN0ZXJzOwot
ICAgIENhY2hlZFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+IG1fY29uc3RhbnRzU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uOwotICAgIENhY2hlZFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJ
bmZvPiBtX2V4cHJlc3Npb25JbmZvOwotICAgIENhY2hlZEhhc2hNYXA8SW5zdHJ1Y3Rpb25TdHJl
YW06Ok9mZnNldCwgaW50PiBtX291dE9mTGluZUp1bXBUYXJnZXRzOwotCi0gICAgQ2FjaGVkVmVj
dG9yPENhY2hlZENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiBtX2NvbnN0YW50SWRlbnRpZmll
clNldHM7Ci0gICAgQ2FjaGVkVmVjdG9yPENhY2hlZElkZW50aWZpZXI+IG1faWRlbnRpZmllcnM7
Ci0gICAgQ2FjaGVkVmVjdG9yPENhY2hlZEJpdFZlY3Rvcj4gbV9iaXRWZWN0b3JzOwotICAgIENh
Y2hlZFZlY3RvcjxDYWNoZWRXcml0ZUJhcnJpZXI8Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlPj4g
bV9mdW5jdGlvbkRlY2xzOwotICAgIENhY2hlZFZlY3RvcjxDYWNoZWRXcml0ZUJhcnJpZXI8Q2Fj
aGVkRnVuY3Rpb25FeGVjdXRhYmxlPj4gbV9mdW5jdGlvbkV4cHJzOwotfTsKLQotY2xhc3MgQ2Fj
aGVkUHJvZ3JhbUNvZGVCbG9jayA6IHB1YmxpYyBDYWNoZWRDb2RlQmxvY2s8VW5saW5rZWRQcm9n
cmFtQ29kZUJsb2NrPiB7Ci0gICAgdXNpbmcgQmFzZSA9IENhY2hlZENvZGVCbG9jazxVbmxpbmtl
ZFByb2dyYW1Db2RlQmxvY2s+OwotCi1wdWJsaWM6Ci0gICAgdm9pZCBlbmNvZGUoRW5jb2RlciYg
ZW5jb2RlciwgY29uc3QgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrJiBjb2RlQmxvY2spCi0gICAg
ewotICAgICAgICBCYXNlOjplbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrKTsKLSAgICAgICAgbV92
YXJEZWNsYXJhdGlvbnMuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX3ZhckRlY2xhcmF0aW9u
cyk7Ci0gICAgICAgIG1fbGV4aWNhbERlY2xhcmF0aW9ucy5lbmNvZGUoZW5jb2RlciwgY29kZUJs
b2NrLm1fbGV4aWNhbERlY2xhcmF0aW9ucyk7Ci0gICAgfQotCi0gICAgVW5saW5rZWRQcm9ncmFt
Q29kZUJsb2NrKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKLSAgICB7Ci0gICAgICAg
IFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPihkZWNvZGVyLnZtKCkuaGVhcCkpIFVu
bGlua2VkUHJvZ3JhbUNvZGVCbG9jayhkZWNvZGVyLCAqdGhpcyk7Ci0gICAgICAgIGNvZGVCbG9j
ay0+ZmluaXNoQ3JlYXRpb24oZGVjb2Rlci52bSgpKTsKLSAgICAgICAgQmFzZTo6ZGVjb2RlKGRl
Y29kZXIsICpjb2RlQmxvY2spOwotICAgICAgICBtX3ZhckRlY2xhcmF0aW9ucy5kZWNvZGUoZGVj
b2RlciwgY29kZUJsb2NrLT5tX3ZhckRlY2xhcmF0aW9ucyk7Ci0gICAgICAgIG1fbGV4aWNhbERl
Y2xhcmF0aW9ucy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLT5tX2xleGljYWxEZWNsYXJhdGlv
bnMpOwotICAgICAgICByZXR1cm4gY29kZUJsb2NrOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBD
YWNoZWRWYXJpYWJsZUVudmlyb25tZW50IG1fdmFyRGVjbGFyYXRpb25zOwotICAgIENhY2hlZFZh
cmlhYmxlRW52aXJvbm1lbnQgbV9sZXhpY2FsRGVjbGFyYXRpb25zOwotfTsKLQotY2xhc3MgQ2Fj
aGVkTW9kdWxlQ29kZUJsb2NrIDogcHVibGljIENhY2hlZENvZGVCbG9jazxVbmxpbmtlZE1vZHVs
ZVByb2dyYW1Db2RlQmxvY2s+IHsKLSAgICB1c2luZyBCYXNlID0gQ2FjaGVkQ29kZUJsb2NrPFVu
bGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz47Ci0KLXB1YmxpYzoKLSAgICB2b2lkIGVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sm
IGNvZGVCbG9jaykKLSAgICB7Ci0gICAgICAgIEJhc2U6OmVuY29kZShlbmNvZGVyLCBjb2RlQmxv
Y2spOwotICAgICAgICBtX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lz
dGVyT2Zmc2V0ID0gY29kZUJsb2NrLm1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0
YW50UmVnaXN0ZXJPZmZzZXQ7Ci0gICAgfQotCi0gICAgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIFVu
bGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPihkZWNvZGVyLnZtKCku
aGVhcCkpIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayhkZWNvZGVyLCAqdGhpcyk7Ci0g
ICAgICAgIGNvZGVCbG9jay0+ZmluaXNoQ3JlYXRpb24oZGVjb2Rlci52bSgpKTsKLSAgICAgICAg
QmFzZTo6ZGVjb2RlKGRlY29kZXIsICpjb2RlQmxvY2spOwotICAgICAgICBjb2RlQmxvY2stPm1f
bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQgPSBtX21v
ZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0OwotICAgICAg
ICByZXR1cm4gY29kZUJsb2NrOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbnQgbV9tb2R1bGVF
bnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldDsKLX07Ci0KLWNsYXNz
IENhY2hlZEV2YWxDb2RlQmxvY2sgOiBwdWJsaWMgQ2FjaGVkQ29kZUJsb2NrPFVubGlua2VkRXZh
bENvZGVCbG9jaz4gewotICAgIHVzaW5nIEJhc2UgPSBDYWNoZWRDb2RlQmxvY2s8VW5saW5rZWRF
dmFsQ29kZUJsb2NrPjsKLQotcHVibGljOgotICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IFVubGlua2VkRXZhbENvZGVCbG9jayYgY29kZUJsb2NrKQotICAgIHsKLSAgICAg
ICAgQmFzZTo6ZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jayk7Ci0gICAgICAgIG1fdmFyaWFibGVz
LmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV92YXJpYWJsZXMpOwotICAgICAgICBtX2Z1bmN0
aW9uSG9pc3RpbmdDYW5kaWRhdGVzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9mdW5jdGlv
bkhvaXN0aW5nQ2FuZGlkYXRlcyk7Ci0gICAgfQotCi0gICAgVW5saW5rZWRFdmFsQ29kZUJsb2Nr
KiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIFVubGlua2Vk
RXZhbENvZGVCbG9jayogY29kZUJsb2NrID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5s
aW5rZWRFdmFsQ29kZUJsb2NrPihkZWNvZGVyLnZtKCkuaGVhcCkpIFVubGlua2VkRXZhbENvZGVC
bG9jayhkZWNvZGVyLCAqdGhpcyk7Ci0gICAgICAgIGNvZGVCbG9jay0+ZmluaXNoQ3JlYXRpb24o
ZGVjb2Rlci52bSgpKTsKLSAgICAgICAgQmFzZTo6ZGVjb2RlKGRlY29kZXIsICpjb2RlQmxvY2sp
OwotICAgICAgICBtX3ZhcmlhYmxlcy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLT5tX3Zhcmlh
Ymxlcyk7Ci0gICAgICAgIG1fZnVuY3Rpb25Ib2lzdGluZ0NhbmRpZGF0ZXMuZGVjb2RlKGRlY29k
ZXIsIGNvZGVCbG9jay0+bV9mdW5jdGlvbkhvaXN0aW5nQ2FuZGlkYXRlcyk7Ci0gICAgICAgIHJl
dHVybiBjb2RlQmxvY2s7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIENhY2hlZFZlY3RvcjxDYWNo
ZWRJZGVudGlmaWVyLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV92YXJpYWJsZXM7Ci0gICAg
Q2FjaGVkVmVjdG9yPENhY2hlZElkZW50aWZpZXIsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBt
X2Z1bmN0aW9uSG9pc3RpbmdDYW5kaWRhdGVzOwotfTsKLQotY2xhc3MgQ2FjaGVkRnVuY3Rpb25D
b2RlQmxvY2sgOiBwdWJsaWMgQ2FjaGVkQ29kZUJsb2NrPFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2s+IHsKLSAgICB1c2luZyBCYXNlID0gQ2FjaGVkQ29kZUJsb2NrPFVubGlua2VkRnVuY3Rpb25D
b2RlQmxvY2s+OwotCi1wdWJsaWM6Ci0gICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayYgY29kZUJsb2NrKQotICAgIHsKLSAgICAg
ICAgQmFzZTo6ZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jayk7Ci0gICAgfQotCi0gICAgVW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9jayogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0Ci0gICAg
ewotICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrPihkZWNvZGVyLnZt
KCkuaGVhcCkpIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2soZGVjb2RlciwgKnRoaXMpOwotICAg
ICAgICBjb2RlQmxvY2stPmZpbmlzaENyZWF0aW9uKGRlY29kZXIudm0oKSk7Ci0gICAgICAgIEJh
c2U6OmRlY29kZShkZWNvZGVyLCAqY29kZUJsb2NrKTsKLSAgICAgICAgcmV0dXJuIGNvZGVCbG9j
azsKLSAgICB9Ci19OwotCi1BTFdBWVNfSU5MSU5FIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6
OlVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2soRGVjb2RlciYgZGVjb2RlciwgY29uc3QgQ2FjaGVk
RnVuY3Rpb25Db2RlQmxvY2smIGNhY2hlZENvZGVCbG9jaykKLSAgICA6IEJhc2UoZGVjb2Rlciwg
ZGVjb2Rlci52bSgpLnVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGNh
Y2hlZENvZGVCbG9jaykKLXsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBDYWNo
ZWRDb2RlQmxvY2tUeXBlSW1wbDsKLQotZW51bSBDYWNoZWRDb2RlQmxvY2tUYWcgewotICAgIENh
Y2hlZFByb2dyYW1Db2RlQmxvY2tUYWcsCi0gICAgQ2FjaGVkTW9kdWxlQ29kZUJsb2NrVGFnLAot
ICAgIENhY2hlZEV2YWxDb2RlQmxvY2tUYWcsCi19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgQ2Fj
aGVkQ29kZUJsb2NrVHlwZUltcGw8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPiB7Ci0gICAgdXNp
bmcgdHlwZSA9IENhY2hlZFByb2dyYW1Db2RlQmxvY2s7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBD
YWNoZWRDb2RlQmxvY2tUYWcgdGFnID0gQ2FjaGVkUHJvZ3JhbUNvZGVCbG9ja1RhZzsKLX07Ci0K
LXRlbXBsYXRlPD4KLXN0cnVjdCBDYWNoZWRDb2RlQmxvY2tUeXBlSW1wbDxVbmxpbmtlZE1vZHVs
ZVByb2dyYW1Db2RlQmxvY2s+IHsKLSAgICB1c2luZyB0eXBlID0gQ2FjaGVkTW9kdWxlQ29kZUJs
b2NrOwotICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVkQ29kZUJsb2NrVGFnIHRhZyA9IENhY2hl
ZE1vZHVsZUNvZGVCbG9ja1RhZzsKLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBDYWNoZWRDb2Rl
QmxvY2tUeXBlSW1wbDxVbmxpbmtlZEV2YWxDb2RlQmxvY2s+IHsKLSAgICB1c2luZyB0eXBlID0g
Q2FjaGVkRXZhbENvZGVCbG9jazsKLSAgICBzdGF0aWMgY29uc3RleHByIENhY2hlZENvZGVCbG9j
a1RhZyB0YWcgPSBDYWNoZWRFdmFsQ29kZUJsb2NrVGFnOwotfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLXVzaW5nIENhY2hlZENvZGVCbG9ja1R5cGUgPSB0eXBlbmFtZSBDYWNoZWRDb2RlQmxv
Y2tUeXBlSW1wbDxUPjo6dHlwZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4K
LUFMV0FZU19JTkxJTkUgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKERlY29k
ZXImIGRlY29kZXIsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBDYWNoZWRDb2RlQmxvY2s8
Q29kZUJsb2NrVHlwZT4mIGNhY2hlZENvZGVCbG9jaykKLSAgICA6IEJhc2UoZGVjb2Rlci52bSgp
LCBzdHJ1Y3R1cmUpCi0gICAgLCBtX2luc3RydWN0aW9ucyhjYWNoZWRDb2RlQmxvY2suaW5zdHJ1
Y3Rpb25zKGRlY29kZXIpKQotICAgICwgbV9saXZlbmVzcyhudWxscHRyKQotICAgICwgbV90aGlz
UmVnaXN0ZXIoY2FjaGVkQ29kZUJsb2NrLnRoaXNSZWdpc3RlcigpKQotICAgICwgbV9zY29wZVJl
Z2lzdGVyKGNhY2hlZENvZGVCbG9jay5zY29wZVJlZ2lzdGVyKCkpCi0gICAgLCBtX2dsb2JhbE9i
amVjdFJlZ2lzdGVyKGNhY2hlZENvZGVCbG9jay5nbG9iYWxPYmplY3RSZWdpc3RlcigpKQotCi0g
ICAgLCBtX3NvdXJjZVVSTERpcmVjdGl2ZShjYWNoZWRDb2RlQmxvY2suc291cmNlVVJMRGlyZWN0
aXZlKGRlY29kZXIpKQotICAgICwgbV9zb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlKGNhY2hlZENv
ZGVCbG9jay5zb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlKGRlY29kZXIpKQotCi0gICAgLCBtX3Vz
ZXNFdmFsKGNhY2hlZENvZGVCbG9jay51c2VzRXZhbCgpKQotICAgICwgbV9pc1N0cmljdE1vZGUo
Y2FjaGVkQ29kZUJsb2NrLmlzU3RyaWN0TW9kZSgpKQotICAgICwgbV9pc0NvbnN0cnVjdG9yKGNh
Y2hlZENvZGVCbG9jay5pc0NvbnN0cnVjdG9yKCkpCi0gICAgLCBtX2hhc0NhcHR1cmVkVmFyaWFi
bGVzKGNhY2hlZENvZGVCbG9jay5oYXNDYXB0dXJlZFZhcmlhYmxlcygpKQotICAgICwgbV9pc0J1
aWx0aW5GdW5jdGlvbihjYWNoZWRDb2RlQmxvY2suaXNCdWlsdGluRnVuY3Rpb24oKSkKLSAgICAs
IG1fc3VwZXJCaW5kaW5nKGNhY2hlZENvZGVCbG9jay5zdXBlckJpbmRpbmcoKSkKLSAgICAsIG1f
c2NyaXB0TW9kZShjYWNoZWRDb2RlQmxvY2suc2NyaXB0TW9kZSgpKQotICAgICwgbV9pc0Fycm93
RnVuY3Rpb25Db250ZXh0KGNhY2hlZENvZGVCbG9jay5pc0Fycm93RnVuY3Rpb25Db250ZXh0KCkp
Ci0gICAgLCBtX2lzQ2xhc3NDb250ZXh0KGNhY2hlZENvZGVCbG9jay5pc0NsYXNzQ29udGV4dCgp
KQotICAgICwgbV93YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKGNhY2hlZENvZGVCbG9j
ay53YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkpCi0gICAgLCBtX2NvbnN0cnVjdG9y
S2luZChjYWNoZWRDb2RlQmxvY2suY29uc3RydWN0b3JLaW5kKCkpCi0gICAgLCBtX2Rlcml2ZWRD
b250ZXh0VHlwZShjYWNoZWRDb2RlQmxvY2suZGVyaXZlZENvbnRleHRUeXBlKCkpCi0gICAgLCBt
X2V2YWxDb250ZXh0VHlwZShjYWNoZWRDb2RlQmxvY2suZXZhbENvbnRleHRUeXBlKCkpCi0gICAg
LCBtX2hhc1RhaWxDYWxscyhjYWNoZWRDb2RlQmxvY2suaGFzVGFpbENhbGxzKCkpCi0gICAgLCBt
X2xpbmVDb3VudChjYWNoZWRDb2RlQmxvY2subGluZUNvdW50KCkpCi0gICAgLCBtX2VuZENvbHVt
bihjYWNoZWRDb2RlQmxvY2suZW5kQ29sdW1uKCkpCi0gICAgLCBtX251bVZhcnMoY2FjaGVkQ29k
ZUJsb2NrLm51bVZhcnMoKSkKLSAgICAsIG1fbnVtQ2FsbGVlTG9jYWxzKGNhY2hlZENvZGVCbG9j
ay5udW1DYWxsZWVMb2NhbHMoKSkKLSAgICAsIG1fbnVtUGFyYW1ldGVycyhjYWNoZWRDb2RlQmxv
Y2subnVtUGFyYW1ldGVycygpKQotICAgICwgbV9mZWF0dXJlcyhjYWNoZWRDb2RlQmxvY2suZmVh
dHVyZXMoKSkKLSAgICAsIG1fcGFyc2VNb2RlKGNhY2hlZENvZGVCbG9jay5wYXJzZU1vZGUoKSkK
LSAgICAsIG1fY29kZVR5cGUoY2FjaGVkQ29kZUJsb2NrLmNvZGVUeXBlKCkpCi0gICAgLCBtX3Jh
cmVEYXRhKGNhY2hlZENvZGVCbG9jay5yYXJlRGF0YShkZWNvZGVyKSkKLXsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KLUFMV0FZU19JTkxJTkUgdm9pZCBDYWNoZWRDb2Rl
QmxvY2s8Q29kZUJsb2NrVHlwZT46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBVbmxpbmtlZENv
ZGVCbG9jayYgY29kZUJsb2NrKSBjb25zdAotewotICAgIGZvciAodW5zaWduZWQgaSA9IExpbmtU
aW1lQ29uc3RhbnRDb3VudDsgaS0tOykKLSAgICAgICAgY29kZUJsb2NrLm1fbGlua1RpbWVDb25z
dGFudHNbaV0gPSBtX2xpbmtUaW1lQ29uc3RhbnRzW2ldOwotCi0gICAgbV9tZXRhZGF0YS5kZWNv
ZGUoZGVjb2RlciwgY29kZUJsb2NrLm1fbWV0YWRhdGEpOwotICAgIG1fcHJvcGVydHlBY2Nlc3NJ
bnN0cnVjdGlvbnMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX3Byb3BlcnR5QWNjZXNzSW5z
dHJ1Y3Rpb25zKTsKLSAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmRlY29kZShkZWNvZGVyLCBjb2Rl
QmxvY2subV9jb25zdGFudFJlZ2lzdGVycywgJmNvZGVCbG9jayk7Ci0gICAgbV9jb25zdGFudHNT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24uZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX2NvbnN0
YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbik7Ci0gICAgbV9leHByZXNzaW9uSW5mby5kZWNv
ZGUoZGVjb2RlciwgY29kZUJsb2NrLm1fZXhwcmVzc2lvbkluZm8pOwotICAgIG1fb3V0T2ZMaW5l
SnVtcFRhcmdldHMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX291dE9mTGluZUp1bXBUYXJn
ZXRzKTsKLSAgICBtX2p1bXBUYXJnZXRzLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9qdW1w
VGFyZ2V0cyk7Ci0gICAgbV9jb25zdGFudElkZW50aWZpZXJTZXRzLmRlY29kZShkZWNvZGVyLCBj
b2RlQmxvY2subV9jb25zdGFudElkZW50aWZpZXJTZXRzKTsKLSAgICBtX2lkZW50aWZpZXJzLmRl
Y29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9pZGVudGlmaWVycyk7Ci0gICAgbV9iaXRWZWN0b3Jz
LmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9iaXRWZWN0b3JzKTsKLSAgICBtX2Z1bmN0aW9u
RGVjbHMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX2Z1bmN0aW9uRGVjbHMsICZjb2RlQmxv
Y2spOwotICAgIG1fZnVuY3Rpb25FeHBycy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLm1fZnVu
Y3Rpb25FeHBycywgJmNvZGVCbG9jayk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgVW5saW5rZWRQcm9n
cmFtQ29kZUJsb2NrOjpVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2soRGVjb2RlciYgZGVjb2Rlciwg
Y29uc3QgQ2FjaGVkUHJvZ3JhbUNvZGVCbG9jayYgY2FjaGVkQ29kZUJsb2NrKQotICAgIDogQmFz
ZShkZWNvZGVyLCBkZWNvZGVyLnZtKCkudW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJl
LmdldCgpLCBjYWNoZWRDb2RlQmxvY2spCi17Ci19Ci0KLUFMV0FZU19JTkxJTkUgVW5saW5rZWRN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2soRGVj
b2RlciYgZGVjb2RlciwgY29uc3QgQ2FjaGVkTW9kdWxlQ29kZUJsb2NrJiBjYWNoZWRDb2RlQmxv
Y2spCi0gICAgOiBCYXNlKGRlY29kZXIsIGRlY29kZXIudm0oKS51bmxpbmtlZE1vZHVsZVByb2dy
YW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGNhY2hlZENvZGVCbG9jaykKLXsKLX0KLQotQUxX
QVlTX0lOTElORSBVbmxpbmtlZEV2YWxDb2RlQmxvY2s6OlVubGlua2VkRXZhbENvZGVCbG9jayhE
ZWNvZGVyJiBkZWNvZGVyLCBjb25zdCBDYWNoZWRFdmFsQ29kZUJsb2NrJiBjYWNoZWRDb2RlQmxv
Y2spCi0gICAgOiBCYXNlKGRlY29kZXIsIGRlY29kZXIudm0oKS51bmxpbmtlZEV2YWxDb2RlQmxv
Y2tTdHJ1Y3R1cmUuZ2V0KCksIGNhY2hlZENvZGVCbG9jaykKLXsKLX0KLQotQUxXQVlTX0lOTElO
RSB2b2lkIENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIs
IGNvbnN0IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlJiBleGVjdXRhYmxlKQotewotICAgIG1f
Zmlyc3RMaW5lT2Zmc2V0ID0gZXhlY3V0YWJsZS5tX2ZpcnN0TGluZU9mZnNldDsKLSAgICBtX2xp
bmVDb3VudCA9IGV4ZWN1dGFibGUubV9saW5lQ291bnQ7Ci0gICAgbV91bmxpbmtlZEZ1bmN0aW9u
TmFtZVN0YXJ0ID0gZXhlY3V0YWJsZS5tX3VubGlua2VkRnVuY3Rpb25OYW1lU3RhcnQ7Ci0gICAg
bV91bmxpbmtlZEJvZHlTdGFydENvbHVtbiA9IGV4ZWN1dGFibGUubV91bmxpbmtlZEJvZHlTdGFy
dENvbHVtbjsKLSAgICBtX3VubGlua2VkQm9keUVuZENvbHVtbiA9IGV4ZWN1dGFibGUubV91bmxp
bmtlZEJvZHlFbmRDb2x1bW47Ci0gICAgbV9zdGFydE9mZnNldCA9IGV4ZWN1dGFibGUubV9zdGFy
dE9mZnNldDsKLSAgICBtX3NvdXJjZUxlbmd0aCA9IGV4ZWN1dGFibGUubV9zb3VyY2VMZW5ndGg7
Ci0gICAgbV9wYXJhbWV0ZXJzU3RhcnRPZmZzZXQgPSBleGVjdXRhYmxlLm1fcGFyYW1ldGVyc1N0
YXJ0T2Zmc2V0OwotICAgIG1fdHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0ID0gZXhlY3V0YWJsZS5t
X3R5cGVQcm9maWxpbmdTdGFydE9mZnNldDsKLSAgICBtX3R5cGVQcm9maWxpbmdFbmRPZmZzZXQg
PSBleGVjdXRhYmxlLm1fdHlwZVByb2ZpbGluZ0VuZE9mZnNldDsKLSAgICBtX3BhcmFtZXRlckNv
dW50ID0gZXhlY3V0YWJsZS5tX3BhcmFtZXRlckNvdW50OwotCi0gICAgbV9mZWF0dXJlcyA9IGV4
ZWN1dGFibGUubV9mZWF0dXJlczsKLSAgICBtX3NvdXJjZVBhcnNlTW9kZSA9IGV4ZWN1dGFibGUu
bV9zb3VyY2VQYXJzZU1vZGU7Ci0KLSAgICBtX2lzSW5TdHJpY3RDb250ZXh0ID0gZXhlY3V0YWJs
ZS5tX2lzSW5TdHJpY3RDb250ZXh0OwotICAgIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgPSBleGVj
dXRhYmxlLm1faGFzQ2FwdHVyZWRWYXJpYWJsZXM7Ci0gICAgbV9pc0J1aWx0aW5GdW5jdGlvbiA9
IGV4ZWN1dGFibGUubV9pc0J1aWx0aW5GdW5jdGlvbjsKLSAgICBtX2lzQnVpbHRpbkRlZmF1bHRD
bGFzc0NvbnN0cnVjdG9yID0gZXhlY3V0YWJsZS5tX2lzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0
cnVjdG9yOwotICAgIG1fY29uc3RydWN0QWJpbGl0eSA9IGV4ZWN1dGFibGUubV9jb25zdHJ1Y3RB
YmlsaXR5OwotICAgIG1fY29uc3RydWN0b3JLaW5kID0gZXhlY3V0YWJsZS5tX2NvbnN0cnVjdG9y
S2luZDsKLSAgICBtX2Z1bmN0aW9uTW9kZSA9IGV4ZWN1dGFibGUubV9mdW5jdGlvbk1vZGU7Ci0g
ICAgbV9zY3JpcHRNb2RlID0gZXhlY3V0YWJsZS5tX3NjcmlwdE1vZGU7Ci0gICAgbV9zdXBlckJp
bmRpbmcgPSBleGVjdXRhYmxlLm1fc3VwZXJCaW5kaW5nOwotICAgIG1fZGVyaXZlZENvbnRleHRU
eXBlID0gZXhlY3V0YWJsZS5tX2Rlcml2ZWRDb250ZXh0VHlwZTsKLQotICAgIG1fY2xhc3NTb3Vy
Y2UuZW5jb2RlKGVuY29kZXIsIGV4ZWN1dGFibGUubV9jbGFzc1NvdXJjZSk7Ci0KLSAgICBtX25h
bWUuZW5jb2RlKGVuY29kZXIsIGV4ZWN1dGFibGUubmFtZSgpKTsKLSAgICBtX2VjbWFOYW1lLmVu
Y29kZShlbmNvZGVyLCBleGVjdXRhYmxlLmVjbWFOYW1lKCkpOwotICAgIG1faW5mZXJyZWROYW1l
LmVuY29kZShlbmNvZGVyLCBleGVjdXRhYmxlLmluZmVycmVkTmFtZSgpKTsKLQotICAgIG1fcGFy
ZW50U2NvcGVURFpWYXJpYWJsZXMuZW5jb2RlKGVuY29kZXIsIGV4ZWN1dGFibGUucGFyZW50U2Nv
cGVURFpWYXJpYWJsZXMoKSk7Ci0KLSAgICBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ2FsbC5lbmNv
ZGUoZW5jb2RlciwgZXhlY3V0YWJsZS5tX3VubGlua2VkQ29kZUJsb2NrRm9yQ2FsbCk7Ci0gICAg
bV91bmxpbmtlZENvZGVCbG9ja0ZvckNvbnN0cnVjdC5lbmNvZGUoZW5jb2RlciwgZXhlY3V0YWJs
ZS5tX3VubGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0KTsKLX0KLQotQUxXQVlTX0lOTElORSBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKLXsKLSAgICBWYXJpYWJsZUVudmlyb25tZW50IGVu
djsKLSAgICBtX3BhcmVudFNjb3BlVERaVmFyaWFibGVzLmRlY29kZShkZWNvZGVyLCBlbnYpOwot
Ci0gICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oZGVjb2Rlci52bSgp
LmhlYXApKSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShkZWNvZGVyLCBlbnYsICp0aGlzKTsK
LSAgICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbihkZWNvZGVyLnZtKCkpOwotCi0gICAgbV9j
bGFzc1NvdXJjZS5kZWNvZGUoZGVjb2RlciwgZXhlY3V0YWJsZS0+bV9jbGFzc1NvdXJjZSk7Ci0g
ICAgbV91bmxpbmtlZENvZGVCbG9ja0ZvckNhbGwuZGVjb2RlKGRlY29kZXIsIGV4ZWN1dGFibGUt
Pm1fdW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsLCBleGVjdXRhYmxlKTsKLSAgICBtX3VubGlua2Vk
Q29kZUJsb2NrRm9yQ29uc3RydWN0LmRlY29kZShkZWNvZGVyLCBleGVjdXRhYmxlLT5tX3VubGlu
a2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0LCBleGVjdXRhYmxlKTsKLQotICAgIHJldHVybiBleGVj
dXRhYmxlOwotfQotCi1BTFdBWVNfSU5MSU5FIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShEZWNvZGVyJiBkZWNvZGVyLCBWYXJpYWJsZUVudmly
b25tZW50JiBwYXJlbnRTY29wZVREWlZhcmlhYmxlcywgY29uc3QgQ2FjaGVkRnVuY3Rpb25FeGVj
dXRhYmxlJiBjYWNoZWRFeGVjdXRhYmxlKQotICAgIDogQmFzZShkZWNvZGVyLnZtKCksIGRlY29k
ZXIudm0oKS51bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQoKSkKLSAgICAs
IG1fZmlyc3RMaW5lT2Zmc2V0KGNhY2hlZEV4ZWN1dGFibGUuZmlyc3RMaW5lT2Zmc2V0KCkpCi0g
ICAgLCBtX2xpbmVDb3VudChjYWNoZWRFeGVjdXRhYmxlLmxpbmVDb3VudCgpKQotICAgICwgbV91
bmxpbmtlZEZ1bmN0aW9uTmFtZVN0YXJ0KGNhY2hlZEV4ZWN1dGFibGUudW5saW5rZWRGdW5jdGlv
bk5hbWVTdGFydCgpKQotICAgICwgbV91bmxpbmtlZEJvZHlTdGFydENvbHVtbihjYWNoZWRFeGVj
dXRhYmxlLnVubGlua2VkQm9keVN0YXJ0Q29sdW1uKCkpCi0gICAgLCBtX3VubGlua2VkQm9keUVu
ZENvbHVtbihjYWNoZWRFeGVjdXRhYmxlLnVubGlua2VkQm9keUVuZENvbHVtbigpKQotICAgICwg
bV9zdGFydE9mZnNldChjYWNoZWRFeGVjdXRhYmxlLnN0YXJ0T2Zmc2V0KCkpCi0gICAgLCBtX3Nv
dXJjZUxlbmd0aChjYWNoZWRFeGVjdXRhYmxlLnNvdXJjZUxlbmd0aCgpKQotICAgICwgbV9wYXJh
bWV0ZXJzU3RhcnRPZmZzZXQoY2FjaGVkRXhlY3V0YWJsZS5wYXJhbWV0ZXJzU3RhcnRPZmZzZXQo
KSkKLSAgICAsIG1fdHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KGNhY2hlZEV4ZWN1dGFibGUudHlw
ZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCkpCi0gICAgLCBtX3R5cGVQcm9maWxpbmdFbmRPZmZzZXQo
Y2FjaGVkRXhlY3V0YWJsZS50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpCi0gICAgLCBtX3BhcmFt
ZXRlckNvdW50KGNhY2hlZEV4ZWN1dGFibGUucGFyYW1ldGVyQ291bnQoKSkKLSAgICAsIG1fZmVh
dHVyZXMoY2FjaGVkRXhlY3V0YWJsZS5mZWF0dXJlcygpKQotICAgICwgbV9zb3VyY2VQYXJzZU1v
ZGUoY2FjaGVkRXhlY3V0YWJsZS5zb3VyY2VQYXJzZU1vZGUoKSkKLSAgICAsIG1faXNJblN0cmlj
dENvbnRleHQoY2FjaGVkRXhlY3V0YWJsZS5pc0luU3RyaWN0Q29udGV4dCgpKQotICAgICwgbV9o
YXNDYXB0dXJlZFZhcmlhYmxlcyhjYWNoZWRFeGVjdXRhYmxlLmhhc0NhcHR1cmVkVmFyaWFibGVz
KCkpCi0gICAgLCBtX2lzQnVpbHRpbkZ1bmN0aW9uKGNhY2hlZEV4ZWN1dGFibGUuaXNCdWlsdGlu
RnVuY3Rpb24oKSkKLSAgICAsIG1faXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IoY2Fj
aGVkRXhlY3V0YWJsZS5pc0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3RvcigpKQotICAgICwg
bV9jb25zdHJ1Y3RBYmlsaXR5KGNhY2hlZEV4ZWN1dGFibGUuY29uc3RydWN0QWJpbGl0eSgpKQot
ICAgICwgbV9jb25zdHJ1Y3RvcktpbmQoY2FjaGVkRXhlY3V0YWJsZS5jb25zdHJ1Y3RvcktpbmQo
KSkKLSAgICAsIG1fZnVuY3Rpb25Nb2RlKGNhY2hlZEV4ZWN1dGFibGUuZnVuY3Rpb25Nb2RlKCkp
Ci0gICAgLCBtX3NjcmlwdE1vZGUoY2FjaGVkRXhlY3V0YWJsZS5zY3JpcHRNb2RlKCkpCi0gICAg
LCBtX3N1cGVyQmluZGluZyhjYWNoZWRFeGVjdXRhYmxlLnN1cGVyQmluZGluZygpKQotICAgICwg
bV9kZXJpdmVkQ29udGV4dFR5cGUoY2FjaGVkRXhlY3V0YWJsZS5kZXJpdmVkQ29udGV4dFR5cGUo
KSkKLQotICAgICwgbV9uYW1lKGNhY2hlZEV4ZWN1dGFibGUubmFtZShkZWNvZGVyKSkKLSAgICAs
IG1fZWNtYU5hbWUoY2FjaGVkRXhlY3V0YWJsZS5lY21hTmFtZShkZWNvZGVyKSkKLSAgICAsIG1f
aW5mZXJyZWROYW1lKGNhY2hlZEV4ZWN1dGFibGUuaW5mZXJyZWROYW1lKGRlY29kZXIpKQotCi0g
ICAgLCBtX3BhcmVudFNjb3BlVERaVmFyaWFibGVzKGRlY29kZXIudm0oKS5tX2NvbXBhY3RWYXJp
YWJsZU1hcC0+Z2V0KHBhcmVudFNjb3BlVERaVmFyaWFibGVzKSkKLXsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KLUFMV0FZU19JTkxJTkUgdm9pZCBDYWNoZWRDb2RlQmxv
Y2s8Q29kZUJsb2NrVHlwZT46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBVbmxpbmtl
ZENvZGVCbG9jayYgY29kZUJsb2NrKQotewotICAgIG1fdGhpc1JlZ2lzdGVyID0gY29kZUJsb2Nr
Lm1fdGhpc1JlZ2lzdGVyOwotICAgIG1fc2NvcGVSZWdpc3RlciA9IGNvZGVCbG9jay5tX3Njb3Bl
UmVnaXN0ZXI7Ci0gICAgbV9nbG9iYWxPYmplY3RSZWdpc3RlciA9IGNvZGVCbG9jay5tX2dsb2Jh
bE9iamVjdFJlZ2lzdGVyOwotICAgIG1fdXNlc0V2YWwgPSBjb2RlQmxvY2subV91c2VzRXZhbDsK
LSAgICBtX2lzU3RyaWN0TW9kZSA9IGNvZGVCbG9jay5tX2lzU3RyaWN0TW9kZTsKLSAgICBtX2lz
Q29uc3RydWN0b3IgPSBjb2RlQmxvY2subV9pc0NvbnN0cnVjdG9yOwotICAgIG1faGFzQ2FwdHVy
ZWRWYXJpYWJsZXMgPSBjb2RlQmxvY2subV9oYXNDYXB0dXJlZFZhcmlhYmxlczsKLSAgICBtX2lz
QnVpbHRpbkZ1bmN0aW9uID0gY29kZUJsb2NrLm1faXNCdWlsdGluRnVuY3Rpb247Ci0gICAgbV9z
dXBlckJpbmRpbmcgPSBjb2RlQmxvY2subV9zdXBlckJpbmRpbmc7Ci0gICAgbV9zY3JpcHRNb2Rl
ID0gY29kZUJsb2NrLm1fc2NyaXB0TW9kZTsKLSAgICBtX2lzQXJyb3dGdW5jdGlvbkNvbnRleHQg
PSBjb2RlQmxvY2subV9pc0Fycm93RnVuY3Rpb25Db250ZXh0OwotICAgIG1faXNDbGFzc0NvbnRl
eHQgPSBjb2RlQmxvY2subV9pc0NsYXNzQ29udGV4dDsKLSAgICBtX3dhc0NvbXBpbGVkV2l0aERl
YnVnZ2luZ09wY29kZXMgPSBjb2RlQmxvY2subV93YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNv
ZGVzOwotICAgIG1fY29uc3RydWN0b3JLaW5kID0gY29kZUJsb2NrLm1fY29uc3RydWN0b3JLaW5k
OwotICAgIG1fZGVyaXZlZENvbnRleHRUeXBlID0gY29kZUJsb2NrLm1fZGVyaXZlZENvbnRleHRU
eXBlOwotICAgIG1fZXZhbENvbnRleHRUeXBlID0gY29kZUJsb2NrLm1fZXZhbENvbnRleHRUeXBl
OwotICAgIG1faGFzVGFpbENhbGxzID0gY29kZUJsb2NrLm1faGFzVGFpbENhbGxzOwotICAgIG1f
bGluZUNvdW50ID0gY29kZUJsb2NrLm1fbGluZUNvdW50OwotICAgIG1fZW5kQ29sdW1uID0gY29k
ZUJsb2NrLm1fZW5kQ29sdW1uOwotICAgIG1fbnVtVmFycyA9IGNvZGVCbG9jay5tX251bVZhcnM7
Ci0gICAgbV9udW1DYWxsZWVMb2NhbHMgPSBjb2RlQmxvY2subV9udW1DYWxsZWVMb2NhbHM7Ci0g
ICAgbV9udW1QYXJhbWV0ZXJzID0gY29kZUJsb2NrLm1fbnVtUGFyYW1ldGVyczsKLSAgICBtX2Zl
YXR1cmVzID0gY29kZUJsb2NrLm1fZmVhdHVyZXM7Ci0gICAgbV9wYXJzZU1vZGUgPSBjb2RlQmxv
Y2subV9wYXJzZU1vZGU7Ci0gICAgbV9jb2RlVHlwZSA9IGNvZGVCbG9jay5tX2NvZGVUeXBlOwot
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gTGlua1RpbWVDb25zdGFudENvdW50OyBpLS07KQotICAg
ICAgICBtX2xpbmtUaW1lQ29uc3RhbnRzW2ldID0gY29kZUJsb2NrLm1fbGlua1RpbWVDb25zdGFu
dHNbaV07Ci0KLSAgICBtX21ldGFkYXRhLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9tZXRh
ZGF0YSk7Ci0gICAgbV9yYXJlRGF0YS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fcmFyZURh
dGEpOwotCi0gICAgbV9zb3VyY2VVUkxEaXJlY3RpdmUuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9j
ay5tX3NvdXJjZVVSTERpcmVjdGl2ZS5pbXBsKCkpOwotICAgIG1fc291cmNlTWFwcGluZ1VSTERp
cmVjdGl2ZS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fc291cmNlVVJMRGlyZWN0aXZlLmlt
cGwoKSk7Ci0KLSAgICBtX2luc3RydWN0aW9ucy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1f
aW5zdHJ1Y3Rpb25zLmdldCgpKTsKLSAgICBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLmVu
Y29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucyk7Ci0g
ICAgbV9jb25zdGFudFJlZ2lzdGVycy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fY29uc3Rh
bnRSZWdpc3RlcnMpOwotICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLmVu
Y29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24pOwotICAgIG1fZXhwcmVzc2lvbkluZm8uZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX2V4
cHJlc3Npb25JbmZvKTsKLSAgICBtX2p1bXBUYXJnZXRzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxv
Y2subV9qdW1wVGFyZ2V0cyk7Ci0gICAgbV9vdXRPZkxpbmVKdW1wVGFyZ2V0cy5lbmNvZGUoZW5j
b2RlciwgY29kZUJsb2NrLm1fb3V0T2ZMaW5lSnVtcFRhcmdldHMpOwotCi0gICAgbV9jb25zdGFu
dElkZW50aWZpZXJTZXRzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9jb25zdGFudElkZW50
aWZpZXJTZXRzKTsKLSAgICBtX2lkZW50aWZpZXJzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2su
bV9pZGVudGlmaWVycyk7Ci0gICAgbV9iaXRWZWN0b3JzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxv
Y2subV9iaXRWZWN0b3JzKTsKLSAgICBtX2Z1bmN0aW9uRGVjbHMuZW5jb2RlKGVuY29kZXIsIGNv
ZGVCbG9jay5tX2Z1bmN0aW9uRGVjbHMpOwotICAgIG1fZnVuY3Rpb25FeHBycy5lbmNvZGUoZW5j
b2RlciwgY29kZUJsb2NrLm1fZnVuY3Rpb25FeHBycyk7Ci19Ci0KLWNsYXNzIENhY2hlZFNvdXJj
ZUNvZGVLZXkgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFNvdXJjZUNvZGVLZXk+IHsKLXB1YmxpYzoK
LSAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBr
ZXkpCi0gICAgewotICAgICAgICBtX3NvdXJjZUNvZGUuZW5jb2RlKGVuY29kZXIsIGtleS5tX3Nv
dXJjZUNvZGUpOwotICAgICAgICBtX25hbWUuZW5jb2RlKGVuY29kZXIsIGtleS5tX25hbWUpOwot
ICAgICAgICBtX2ZsYWdzID0ga2V5Lm1fZmxhZ3MubV9mbGFnczsKLSAgICAgICAgbV9oYXNoID0g
a2V5Lmhhc2goKTsKLSAgICAgICAgbV9mdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBv
c2l0aW9uID0ga2V5Lm1fZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbjsK
LSAgICB9Ci0KLSAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTb3VyY2VDb2RlS2V5
JiBrZXkpIGNvbnN0Ci0gICAgewotICAgICAgICBtX3NvdXJjZUNvZGUuZGVjb2RlKGRlY29kZXIs
IGtleS5tX3NvdXJjZUNvZGUpOwotICAgICAgICBtX25hbWUuZGVjb2RlKGRlY29kZXIsIGtleS5t
X25hbWUpOwotICAgICAgICBrZXkubV9mbGFncy5tX2ZsYWdzID0gbV9mbGFnczsKLSAgICAgICAg
a2V5Lm1faGFzaCA9IG1faGFzaDsKLSAgICAgICAga2V5Lm1fZnVuY3Rpb25Db25zdHJ1Y3RvclBh
cmFtZXRlcnNFbmRQb3NpdGlvbiA9IG1fZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQ
b3NpdGlvbjsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQ2FjaGVkVW5saW5rZWRTb3VyY2VDb2Rl
IG1fc291cmNlQ29kZTsKLSAgICBDYWNoZWRTdHJpbmcgbV9uYW1lOwotICAgIHVuc2lnbmVkIG1f
ZmxhZ3M7Ci0gICAgdW5zaWduZWQgbV9oYXNoOwotICAgIGludCBtX2Z1bmN0aW9uQ29uc3RydWN0
b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb247Ci19OwotCi1jbGFzcyBHZW5lcmljQ2FjaGVFbnRyeSB7
Ci1wdWJsaWM6Ci0gICAgc3RkOjpwYWlyPFNvdXJjZUNvZGVLZXksIFVubGlua2VkQ29kZUJsb2Nr
Kj4gZGVjb2RlKERlY29kZXImKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIENhY2hlZENvZGVC
bG9ja1RhZyBtX3RhZzsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFVubGlua2VkQ29kZUJsb2Nr
VHlwZT4KLWNsYXNzIENhY2hlRW50cnkgOiBwdWJsaWMgR2VuZXJpY0NhY2hlRW50cnkgewotcHVi
bGljOgotICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIHN0ZDo6cGFpcjxTb3VyY2VD
b2RlS2V5LCBjb25zdCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqPiBwYWlyKQotICAgIHsKLSAgICAg
ICAgbV90YWcgPSBDYWNoZWRDb2RlQmxvY2tUeXBlSW1wbDxVbmxpbmtlZENvZGVCbG9ja1R5cGU+
Ojp0YWc7Ci0gICAgICAgIG1fa2V5LmVuY29kZShlbmNvZGVyLCBwYWlyLmZpcnN0KTsKLSAgICAg
ICAgbV9jb2RlQmxvY2suZW5jb2RlKGVuY29kZXIsIHBhaXIuc2Vjb25kKTsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgZnJpZW5kIEdlbmVyaWNDYWNoZUVudHJ5OwotCi0gICAgc3RkOjpwYWlyPFNv
dXJjZUNvZGVLZXksIFVubGlua2VkQ29kZUJsb2NrVHlwZSo+IGRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdGFnID09IENhY2hlZENvZGVCbG9j
a1R5cGVJbXBsPFVubGlua2VkQ29kZUJsb2NrVHlwZT46OnRhZyk7Ci0gICAgICAgIFNvdXJjZUNv
ZGVLZXkgZGVjb2RlZEtleTsKLSAgICAgICAgbV9rZXkuZGVjb2RlKGRlY29kZXIsIGRlY29kZWRL
ZXkpOwotICAgICAgICByZXR1cm4geyBXVEZNb3ZlKGRlY29kZWRLZXkpLCBtX2NvZGVCbG9jay5k
ZWNvZGUoZGVjb2RlcikgfTsKLSAgICB9Ci0KLSAgICBDYWNoZWRTb3VyY2VDb2RlS2V5IG1fa2V5
OwotICAgIENhY2hlZFB0cjxDYWNoZWRDb2RlQmxvY2tUeXBlPFVubGlua2VkQ29kZUJsb2NrVHlw
ZT4+IG1fY29kZUJsb2NrOwotfTsKLQotc3RkOjpwYWlyPFNvdXJjZUNvZGVLZXksIFVubGlua2Vk
Q29kZUJsb2NrKj4gR2VuZXJpY0NhY2hlRW50cnk6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBj
b25zdAotewotICAgIHN3aXRjaCAobV90YWcpIHsKLSAgICBjYXNlIENhY2hlZFByb2dyYW1Db2Rl
QmxvY2tUYWc6Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IENhY2hlRW50
cnk8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPio+KHRoaXMpLT5kZWNvZGUoZGVjb2Rlcik7Ci0g
ICAgY2FzZSBDYWNoZWRNb2R1bGVDb2RlQmxvY2tUYWc6Ci0gICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PGNvbnN0IENhY2hlRW50cnk8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
Pio+KHRoaXMpLT5kZWNvZGUoZGVjb2Rlcik7Ci0gICAgY2FzZSBDYWNoZWRFdmFsQ29kZUJsb2Nr
VGFnOgotICAgICAgICAvLyBXZSBkbyBub3QgY2FjaGUgZXZhbCBjb2RlIGJsb2NrcwotICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSNpZiBDT01QSUxFUihNU1ZD
KQotICAgIC8vIFdpdGhvdXQgdGhpcywgTVNWQyB3aWxsIGNvbXBsYWluIHRoYXQgdGhpcyBwYXRo
IGRvZXMgbm90IHJldHVybiBhIHZhbHVlLgotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNv
bnN0IENhY2hlRW50cnk8VW5saW5rZWRFdmFsQ29kZUJsb2NrPio+KHRoaXMpLT5kZWNvZGUoZGVj
b2Rlcik7Ci0jZW5kaWYKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVW5saW5rZWRDb2RlQmxvY2tU
eXBlPgotdm9pZCBlbmNvZGVDb2RlQmxvY2soRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU291cmNl
Q29kZUtleSYga2V5LCBjb25zdCBVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQotewotICAg
IGF1dG8qIGVudHJ5ID0gZW5jb2Rlci50ZW1wbGF0ZSBtYWxsb2M8Q2FjaGVFbnRyeTxVbmxpbmtl
ZENvZGVCbG9ja1R5cGU+PigpOwotICAgIGVudHJ5LT5lbmNvZGUoZW5jb2RlciwgIHsga2V5LCBq
c0Nhc3Q8Y29uc3QgVW5saW5rZWRDb2RlQmxvY2tUeXBlKj4oY29kZUJsb2NrKSB9KTsKLX0KLQot
c3RkOjpwYWlyPE1hbGxvY1B0cjx1aW50OF90Piwgc2l6ZV90PiBlbmNvZGVDb2RlQmxvY2soVk0m
IHZtLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXksIGNvbnN0IFVubGlua2VkQ29kZUJsb2NrKiBj
b2RlQmxvY2spCi17Ci0gICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8gPSBjb2RlQmxvY2st
PmNsYXNzSW5mbyh2bSk7Ci0KLSAgICBFbmNvZGVyIGVuY29kZXIodm0pOwotICAgIGlmIChjbGFz
c0luZm8gPT0gVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjppbmZvKCkpCi0gICAgICAgIGVuY29k
ZUNvZGVCbG9jazxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+KGVuY29kZXIsIGtleSwgY29kZUJs
b2NrKTsKLSAgICBlbHNlIGlmIChjbGFzc0luZm8gPT0gVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrOjppbmZvKCkpCi0gICAgICAgIGVuY29kZUNvZGVCbG9jazxVbmxpbmtlZE1vZHVsZVBy
b2dyYW1Db2RlQmxvY2s+KGVuY29kZXIsIGtleSwgY29kZUJsb2NrKTsKLSAgICBlbHNlCi0gICAg
ICAgIEFTU0VSVChjbGFzc0luZm8gPT0gVW5saW5rZWRFdmFsQ29kZUJsb2NrOjppbmZvKCkpOwot
Ci0gICAgcmV0dXJuIGVuY29kZXIucmVsZWFzZSgpOwotfQotCi1VbmxpbmtlZENvZGVCbG9jayog
ZGVjb2RlQ29kZUJsb2NrSW1wbChWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSwgY29u
c3Qgdm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBjb25zdCBhdXRvKiBjYWNoZWRF
bnRyeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR2VuZXJpY0NhY2hlRW50cnkqPihidWZmZXIp
OwotICAgIERlY29kZXIgZGVjb2Rlcih2bSwgYnVmZmVyLCBzaXplKTsKLSAgICBzdGQ6OnBhaXI8
U291cmNlQ29kZUtleSwgVW5saW5rZWRDb2RlQmxvY2sqPiBlbnRyeTsKLSAgICB7Ci0gICAgICAg
IERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICAgICAgZW50cnkgPSBjYWNoZWRFbnRyeS0+
ZGVjb2RlKGRlY29kZXIpOwotICAgIH0KLQotICAgIGlmIChlbnRyeS5maXJzdCAhPSBrZXkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBlbnRyeS5zZWNvbmQ7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fj
aGVkVHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
YWNoZWRUeXBlcy5oCShyZXZpc2lvbiAyNDAyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYWNoZWRUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ2ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgIkpTQ2FzdC5oIgotI2luY2x1ZGUgPHd0Zi9NYWxsb2NQdHIuaD4KLQotbmFt
ZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIFNvdXJjZUNvZGVLZXk7Ci1jbGFzcyBVbmxpbmtlZENvZGVC
bG9jazsKLQotc3RkOjpwYWlyPE1hbGxvY1B0cjx1aW50OF90Piwgc2l6ZV90PiBlbmNvZGVDb2Rl
QmxvY2soVk0mLCBjb25zdCBTb3VyY2VDb2RlS2V5JiwgY29uc3QgVW5saW5rZWRDb2RlQmxvY2sq
KTsKLVVubGlua2VkQ29kZUJsb2NrKiBkZWNvZGVDb2RlQmxvY2tJbXBsKFZNJiwgY29uc3QgU291
cmNlQ29kZUtleSYsIGNvbnN0IHZvaWQqLCBzaXplX3QpOwotCi0KLXRlbXBsYXRlPHR5cGVuYW1l
IFVubGlua2VkQ29kZUJsb2NrVHlwZT4KLVVubGlua2VkQ29kZUJsb2NrVHlwZSogZGVjb2RlQ29k
ZUJsb2NrKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5LCBjb25zdCB2b2lkKiBidWZm
ZXIsIHNpemVfdCBzaXplKQotewotICAgIHJldHVybiBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2tU
eXBlKj4oZGVjb2RlQ29kZUJsb2NrSW1wbCh2bSwga2V5LCBidWZmZXIsIHNpemUpKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b2RlQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvZGVDYWNoZS5jcHAJKHJldmlzaW9uIDI0MDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDkgKzQzLDYgQEAg
dm9pZCBDb2RlQ2FjaGVNYXA6OnBydW5lU2xvd0Nhc2UoKQogCiAgICAgd2hpbGUgKG1fc2l6ZSA+
IG1fY2FwYWNpdHkgfHwgIWNhblBydW5lUXVpY2tseSgpKSB7CiAgICAgICAgIE1hcFR5cGU6Oml0
ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4oKTsKLQotICAgICAgICB3cml0ZUNvZGVCbG9jaygqaXQt
PnZhbHVlLmNlbGwtPnZtKCksIGl0LT5rZXksIGl0LT52YWx1ZSk7Ci0KICAgICAgICAgbV9zaXpl
IC09IGl0LT5rZXkubGVuZ3RoKCk7CiAgICAgICAgIG1fbWFwLnJlbW92ZShpdCk7CiAgICAgfQpA
QCAtNjIsOCArNTksOSBAQCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIENvZGVDYWNoZTo6Z2V0VW5s
CiAgICAgICAgIHZtLnR5cGVQcm9maWxlcigpID8gVHlwZVByb2ZpbGVyRW5hYmxlZDo6WWVzIDog
VHlwZVByb2ZpbGVyRW5hYmxlZDo6Tm8sIAogICAgICAgICB2bS5jb250cm9sRmxvd1Byb2ZpbGVy
KCkgPyBDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZDo6WWVzIDogQ29udHJvbEZsb3dQcm9maWxl
ckVuYWJsZWQ6Ok5vLAogICAgICAgICBXVEY6Om51bGxvcHQpOwotICAgIFVubGlua2VkQ29kZUJs
b2NrVHlwZSogdW5saW5rZWRDb2RlQmxvY2sgPSBtX3NvdXJjZUNvZGUuZmluZENhY2hlQW5kVXBk
YXRlQWdlPFVubGlua2VkQ29kZUJsb2NrVHlwZT4odm0sIGtleSk7Ci0gICAgaWYgKHVubGlua2Vk
Q29kZUJsb2NrICYmIE9wdGlvbnM6OnVzZUNvZGVDYWNoZSgpKSB7CisgICAgU291cmNlQ29kZVZh
bHVlKiBjYWNoZSA9IG1fc291cmNlQ29kZS5maW5kQ2FjaGVBbmRVcGRhdGVBZ2Uoa2V5KTsKKyAg
ICBpZiAoY2FjaGUgJiYgT3B0aW9uczo6dXNlQ29kZUNhY2hlKCkpIHsKKyAgICAgICAgVW5saW5r
ZWRDb2RlQmxvY2tUeXBlKiB1bmxpbmtlZENvZGVCbG9jayA9IGpzQ2FzdDxVbmxpbmtlZENvZGVC
bG9ja1R5cGUqPihjYWNoZS0+Y2VsbC5nZXQoKSk7CiAgICAgICAgIHVuc2lnbmVkIGxpbmVDb3Vu
dCA9IHVubGlua2VkQ29kZUJsb2NrLT5saW5lQ291bnQoKTsKICAgICAgICAgdW5zaWduZWQgc3Rh
cnRDb2x1bW4gPSB1bmxpbmtlZENvZGVCbG9jay0+c3RhcnRDb2x1bW4oKSArIHNvdXJjZS5zdGFy
dENvbHVtbigpLm9uZUJhc2VkSW50KCk7CiAgICAgICAgIGJvb2wgZW5kQ29sdW1uSXNPblN0YXJ0
TGluZSA9ICFsaW5lQ291bnQ7CkBAIC03Myw5ICs3MSw5IEBAIFVubGlua2VkQ29kZUJsb2NrVHlw
ZSogQ29kZUNhY2hlOjpnZXRVbmwKICAgICAgICAgc291cmNlLnByb3ZpZGVyKCktPnNldFNvdXJj
ZU1hcHBpbmdVUkxEaXJlY3RpdmUodW5saW5rZWRDb2RlQmxvY2stPnNvdXJjZU1hcHBpbmdVUkxE
aXJlY3RpdmUoKSk7CiAgICAgICAgIHJldHVybiB1bmxpbmtlZENvZGVCbG9jazsKICAgICB9Ci0K
KyAgICAKICAgICBWYXJpYWJsZUVudmlyb25tZW50IHZhcmlhYmxlc1VuZGVyVERaOwotICAgIHVu
bGlua2VkQ29kZUJsb2NrID0gZ2VuZXJhdGVVbmxpbmtlZENvZGVCbG9jazxVbmxpbmtlZENvZGVC
bG9ja1R5cGUsIEV4ZWN1dGFibGVUeXBlPih2bSwgZXhlY3V0YWJsZSwgc291cmNlLCBzdHJpY3RN
b2RlLCBzY3JpcHRNb2RlLCBkZWJ1Z2dlck1vZGUsIGVycm9yLCBldmFsQ29udGV4dFR5cGUsICZ2
YXJpYWJsZXNVbmRlclREWik7CisgICAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiB1bmxpbmtlZENv
ZGVCbG9jayA9IGdlbmVyYXRlVW5saW5rZWRDb2RlQmxvY2s8VW5saW5rZWRDb2RlQmxvY2tUeXBl
LCBFeGVjdXRhYmxlVHlwZT4odm0sIGV4ZWN1dGFibGUsIHNvdXJjZSwgc3RyaWN0TW9kZSwgc2Ny
aXB0TW9kZSwgZGVidWdnZXJNb2RlLCBlcnJvciwgZXZhbENvbnRleHRUeXBlLCAmdmFyaWFibGVz
VW5kZXJURFopOwogCiAgICAgaWYgKHVubGlua2VkQ29kZUJsb2NrICYmIE9wdGlvbnM6OnVzZUNv
ZGVDYWNoZSgpKQogICAgICAgICBtX3NvdXJjZUNvZGUuYWRkQ2FjaGUoa2V5LCBTb3VyY2VDb2Rl
VmFsdWUodm0sIHVubGlua2VkQ29kZUJsb2NrLCBtX3NvdXJjZUNvZGUuYWdlKCkpKTsKQEAgLTEx
Miw4ICsxMTAsOSBAQCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogQ29kZUNhY2hlOjpnCiAg
ICAgICAgIHZtLnR5cGVQcm9maWxlcigpID8gVHlwZVByb2ZpbGVyRW5hYmxlZDo6WWVzIDogVHlw
ZVByb2ZpbGVyRW5hYmxlZDo6Tm8sIAogICAgICAgICB2bS5jb250cm9sRmxvd1Byb2ZpbGVyKCkg
PyBDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZDo6WWVzIDogQ29udHJvbEZsb3dQcm9maWxlckVu
YWJsZWQ6Ok5vLAogICAgICAgICBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0
aW9uKTsKLSAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG1fc291
cmNlQ29kZS5maW5kQ2FjaGVBbmRVcGRhdGVBZ2U8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+
KHZtLCBrZXkpOwotICAgIGlmIChleGVjdXRhYmxlICYmIE9wdGlvbnM6OnVzZUNvZGVDYWNoZSgp
KSB7CisgICAgU291cmNlQ29kZVZhbHVlKiBjYWNoZSA9IG1fc291cmNlQ29kZS5maW5kQ2FjaGVB
bmRVcGRhdGVBZ2Uoa2V5KTsKKyAgICBpZiAoY2FjaGUgJiYgT3B0aW9uczo6dXNlQ29kZUNhY2hl
KCkpIHsKKyAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBq
c0Nhc3Q8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqPihjYWNoZS0+Y2VsbC5nZXQoKSk7CiAg
ICAgICAgIHNvdXJjZS5wcm92aWRlcigpLT5zZXRTb3VyY2VVUkxEaXJlY3RpdmUoZXhlY3V0YWJs
ZS0+c291cmNlVVJMRGlyZWN0aXZlKCkpOwogICAgICAgICBzb3VyY2UucHJvdmlkZXIoKS0+c2V0
U291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZShleGVjdXRhYmxlLT5zb3VyY2VNYXBwaW5nVVJMRGly
ZWN0aXZlKCkpOwogICAgICAgICByZXR1cm4gZXhlY3V0YWJsZTsKQEAgLTE1NiwxMCArMTU1LDQg
QEAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIENvZGVDYWNoZTo6ZwogICAgIHJldHVybiBm
dW5jdGlvbkV4ZWN1dGFibGU7CiB9CiAKLXZvaWQgQ29kZUNhY2hlOjp3cml0ZShWTSYgdm0pCi17
Ci0gICAgZm9yIChjb25zdCBhdXRvJiBpdCA6IG1fc291cmNlQ29kZSkKLSAgICAgICAgd3JpdGVD
b2RlQmxvY2sodm0sIGl0LmtleSwgaXQudmFsdWUpOwotfQotCiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaAkocmV2aXNpb24gMjQwMjIwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDcgKzI2LDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0
b3IuaCIKLSNpbmNsdWRlICJDYWNoZWRUeXBlcy5oIgogI2luY2x1ZGUgIkV4ZWN1dGFibGVJbmZv
LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIlBhcnNlci5oIgpAQCAtMzgs
NyArMzcsNiBAQAogI2luY2x1ZGUgIlVubGlua2VkRXZhbENvZGVCbG9jay5oIgogI2luY2x1ZGUg
IlVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oIgogI2luY2x1ZGUgIlVubGlua2VkUHJv
Z3JhbUNvZGVCbG9jay5oIgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtOTEsNzYgKzg5
LDEzIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJl
dHVybiBtX21hcC5iZWdpbigpOyB9Ci0gICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9tYXAu
ZW5kKCk7IH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFVubGlua2VkQ29kZUJsb2NrVHlwZT4K
LSAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGZldGNoRnJvbURpc2tJbXBsKFZNJiB2bSwgY29u
c3QgU291cmNlQ29kZUtleSYga2V5KQotICAgIHsKLSNpZiBPUyhEQVJXSU4pCi0gICAgICAgIGNv
bnN0IGNoYXIqIGNhY2hlUGF0aCA9IE9wdGlvbnM6OmRpc2tDYWNoZVBhdGgoKTsKLSAgICAgICAg
aWYgKCFjYWNoZVBhdGgpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICB1
bnNpZ25lZCBoYXNoID0ga2V5Lmhhc2goKTsKLSAgICAgICAgY2hhciBmaWxlbmFtZVs1MTJdOwot
ICAgICAgICBpbnQgY291bnQgPSBzbnByaW50ZihmaWxlbmFtZSwgNTEyLCAiJXMvJXUuY2FjaGUi
LCBjYWNoZVBhdGgsIGhhc2gpOwotICAgICAgICBpZiAoY291bnQgPCAwIHx8IGNvdW50ID4gNTEy
KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgaW50IGZkID0gb3Blbihm
aWxlbmFtZSwgT19SRE9OTFkpOwotICAgICAgICBpZiAoZmQgPT0gLTEpCi0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBpbnQgcmMgPSBmbG9jayhmZCwgTE9DS19TSCB8IExP
Q0tfTkIpOwotICAgICAgICBpZiAocmMpIHsKLSAgICAgICAgICAgIGNsb3NlKGZkKTsKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RydWN0IHN0YXQg
c2I7Ci0gICAgICAgIGludCByZXMgPSBmc3RhdChmZCwgJnNiKTsKLSAgICAgICAgc2l6ZV90IHNp
emUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHNiLnN0X3NpemUpOwotICAgICAgICBpZiAocmVzIHx8
ICFzaXplKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgY29uc3Qgdm9p
ZCogYnVmZmVyID0gbW1hcChudWxscHRyLCBzaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBm
ZCwgMCk7Ci0gICAgICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSogdW5saW5rZWRDb2RlQmxvY2sg
PSBkZWNvZGVDb2RlQmxvY2s8VW5saW5rZWRDb2RlQmxvY2tUeXBlPih2bSwga2V5LCBidWZmZXIs
IHNpemUpOwotCi0gICAgICAgIGlmICghdW5saW5rZWRDb2RlQmxvY2spCi0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBhZGRDYWNoZShrZXksIFNvdXJjZUNvZGVWYWx1ZSh2
bSwgdW5saW5rZWRDb2RlQmxvY2ssIG1fYWdlKSk7Ci0gICAgICAgIHJldHVybiB1bmxpbmtlZENv
ZGVCbG9jazsKLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTSh2bSk7Ci0gICAgICAgIFVOVVNF
RF9QQVJBTShrZXkpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSNlbmRpZgotICAgIH0KLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFVubGlua2VkQ29kZUJsb2NrVHlwZT4KLSAgICBzdGQ6OmVu
YWJsZV9pZl90PHN0ZDo6aXNfYmFzZV9vZjxVbmxpbmtlZENvZGVCbG9jaywgVW5saW5rZWRDb2Rl
QmxvY2tUeXBlPjo6dmFsdWUgJiYgIXN0ZDo6aXNfc2FtZTxVbmxpbmtlZENvZGVCbG9ja1R5cGUs
IFVubGlua2VkRXZhbENvZGVCbG9jaz46OnZhbHVlLCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqPgot
ICAgIGZldGNoRnJvbURpc2soVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXkpCi0gICAg
ewotICAgICAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jayA9IGZldGNoRnJvbURp
c2tJbXBsPFVubGlua2VkQ29kZUJsb2NrVHlwZT4odm0sIGtleSk7Ci0gICAgICAgIGlmIChVTkxJ
S0VMWShPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgpKSkKLSAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGNvZGVCbG9jayk7Ci0gICAgICAgIHJldHVybiBjb2RlQmxvY2s7Ci0gICAgfQotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX2Jhc2Vf
b2Y8VW5saW5rZWRDb2RlQmxvY2ssIFQ+Ojp2YWx1ZSB8fCBzdGQ6OmlzX3NhbWU8VCwgVW5saW5r
ZWRFdmFsQ29kZUJsb2NrPjo6dmFsdWUsIFQqPgotICAgIGZldGNoRnJvbURpc2soVk0mLCBjb25z
dCBTb3VyY2VDb2RlS2V5JikgeyByZXR1cm4gbnVsbHB0cjsgfQotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVW5saW5rZWRDb2RlQmxvY2tUeXBlPgotICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSog
ZmluZENhY2hlQW5kVXBkYXRlQWdlKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5KQor
ICAgIFNvdXJjZUNvZGVWYWx1ZSogZmluZENhY2hlQW5kVXBkYXRlQWdlKGNvbnN0IFNvdXJjZUNv
ZGVLZXkmIGtleSkKICAgICB7CiAgICAgICAgIHBydW5lKCk7CiAKICAgICAgICAgaXRlcmF0b3Ig
ZmluZFJlc3VsdCA9IG1fbWFwLmZpbmQoa2V5KTsKICAgICAgICAgaWYgKGZpbmRSZXN1bHQgPT0g
bV9tYXAuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gZmV0Y2hGcm9tRGlzazxVbmxpbmtlZENv
ZGVCbG9ja1R5cGU+KHZtLCBrZXkpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAg
ICAgICAgaW50NjRfdCBhZ2UgPSBtX2FnZSAtIGZpbmRSZXN1bHQtPnZhbHVlLmFnZTsKICAgICAg
ICAgaWYgKGFnZSA+IG1fY2FwYWNpdHkpIHsKQEAgLTE4MCw3ICsxMTUsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIGZpbmRSZXN1bHQtPnZhbHVlLmFnZSA9IG1fYWdlOwogICAgICAgICBtX2FnZSArPSBr
ZXkubGVuZ3RoKCk7CiAKLSAgICAgICAgcmV0dXJuIGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9ja1R5
cGUqPihmaW5kUmVzdWx0LT52YWx1ZS5jZWxsLmdldCgpKTsKKyAgICAgICAgcmV0dXJuICZmaW5k
UmVzdWx0LT52YWx1ZTsKICAgICB9CiAKICAgICBBZGRSZXN1bHQgYWRkQ2FjaGUoY29uc3QgU291
cmNlQ29kZUtleSYga2V5LCBjb25zdCBTb3VyY2VDb2RlVmFsdWUmIHZhbHVlKQpAQCAtMjYyLDcg
KzE5Nyw2IEBAIHB1YmxpYzoKICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZ2V0VW5s
aW5rZWRHbG9iYWxGdW5jdGlvbkV4ZWN1dGFibGUoVk0mLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgU291cmNlQ29kZSYsIERlYnVnZ2VyTW9kZSwgT3B0aW9uYWw8aW50PiBmdW5jdGlvbkNvbnN0
cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uLCBQYXJzZXJFcnJvciYpOwogCiAgICAgdm9pZCBj
bGVhcigpIHsgbV9zb3VyY2VDb2RlLmNsZWFyKCk7IH0KLSAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIHdyaXRlKFZNJik7CiAKIHByaXZhdGU6CiAgICAgdGVtcGxhdGUgPGNsYXNzIFVubGlua2Vk
Q29kZUJsb2NrVHlwZSwgY2xhc3MgRXhlY3V0YWJsZVR5cGU+IApAQCAtMzIyLDM2ICsyNTYsNCBA
QCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGdlbmVyYXRlVW5saW5rZWRDCiAgICAgcmV0dXJuIHVu
bGlua2VkQ29kZUJsb2NrOwogfQogCi1BTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIHdyaXRlQ29k
ZUJsb2NrKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5LCBjb25zdCBTb3VyY2VDb2Rl
VmFsdWUmIHZhbHVlKQotewotI2lmIE9TKERBUldJTikKLSAgICBjb25zdCBjaGFyKiBjYWNoZVBh
dGggPSBPcHRpb25zOjpkaXNrQ2FjaGVQYXRoKCk7Ci0gICAgaWYgKExJS0VMWSghY2FjaGVQYXRo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGpzRHluYW1pY0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2sqPih2bSwgdmFsdWUuY2VsbC5nZXQoKSk7
Ci0gICAgaWYgKCFjb2RlQmxvY2spCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIGhh
c2ggPSBrZXkuaGFzaCgpOwotICAgIGNoYXIgZmlsZW5hbWVbNTEyXTsKLSAgICBpbnQgY291bnQg
PSBzbnByaW50ZihmaWxlbmFtZSwgNTEyLCAiJXMvJXUuY2FjaGUiLCBjYWNoZVBhdGgsIGhhc2gp
OwotICAgIGlmIChjb3VudCA8IDAgfHwgY291bnQgPiA1MTIpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHN0ZDo6cGFpcjxNYWxsb2NQdHI8dWludDhfdD4sIHNpemVfdD4gcmVzdWx0ID0gZW5jb2Rl
Q29kZUJsb2NrKHZtLCBrZXksIGNvZGVCbG9jayk7Ci0KLSAgICBpbnQgZmQgPSBvcGVuKGZpbGVu
YW1lLCBPX0NSRUFUIHwgT19XUk9OTFksIDA2NjYpOwotICAgIGludCByYyA9IGZsb2NrKGZkLCBM
T0NLX0VYIHwgTE9DS19OQik7Ci0gICAgaWYgKCFyYykKLSAgICAgICAgOjp3cml0ZShmZCwgcmVz
dWx0LmZpcnN0LmdldCgpLCByZXN1bHQuc2Vjb25kKTsKLSAgICBjbG9zZShmZCk7Ci0jZWxzZQot
ICAgIFVOVVNFRF9QQVJBTSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKGtleSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHZhbHVlKTsKLSNlbmRpZgotfQotCi0KIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAkocmV2aXNpb24gMjQw
MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjg4LDYgKzE2ODgsMTEgQEAgYm9vbCBKU0JpZ0ludDo6Z2V0UHJpbWl0
aXZlTnVtYmVyKEV4ZWNTdAogICAgIHJldHVybiB0cnVlOwogfQogCitpbmxpbmUgc2l6ZV90IEpT
QmlnSW50OjpvZmZzZXRPZkRhdGEoKQoreworICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRp
cGxlT2Y8c2l6ZW9mKERpZ2l0KT4oc2l6ZW9mKEpTQmlnSW50KSk7Cit9CisKIHRlbXBsYXRlIDx0
eXBlbmFtZSBDaGFyVHlwZT4KIEpTQmlnSW50KiBKU0JpZ0ludDo6cGFyc2VJbnQoRXhlY1N0YXRl
KiBleGVjLCBDaGFyVHlwZSogIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgRXJyb3JQYXJzZU1vZGUg
ZXJyb3JQYXJzZU1vZGUpCiB7CkBAIC0xNzkwLDYgKzE3OTUsMTEgQEAgSlNCaWdJbnQqIEpTQmln
SW50OjpwYXJzZUludChFeGVjU3RhdGUqIAogICAgIHJldHVybiBudWxscHRyOwogfQogCitpbmxp
bmUgSlNCaWdJbnQ6OkRpZ2l0KiBKU0JpZ0ludDo6ZGF0YVN0b3JhZ2UoKQoreworICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PERpZ2l0Kj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcykg
KyBvZmZzZXRPZkRhdGEoKSk7Cit9CisKIGlubGluZSBKU0JpZ0ludDo6RGlnaXQgSlNCaWdJbnQ6
OmRpZ2l0KHVuc2lnbmVkIG4pCiB7CiAgICAgQVNTRVJUKG4gPCBsZW5ndGgoKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgJKHJldmlzaW9uIDI0MDIyMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDcgKzM4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBKU0JpZ0ludCBmaW5h
bCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHVzaW5nIEJhc2UgPSBKU0NlbGw7CiAgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBT
dHJ1Y3R1cmVJc0ltbW9ydGFsIHwgT3ZlcnJpZGVzVG9UaGlzOwotICAgIGZyaWVuZCBjbGFzcyBD
YWNoZWRCaWdJbnQ7CiAKIHB1YmxpYzoKIApAQCAtMjI5LDE1ICsyMjgsOCBAQCBwcml2YXRlOgog
ICAgIHN0YXRpYyBPcHRpb25hbDxEaWdpdD4gdG9TaGlmdEFtb3VudChKU0JpZ0ludCogeCk7CiAK
ICAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAg
aW5saW5lIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZEYXRhKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKERpZ2l0KT4oc2l6ZW9mKEpTQmlnSW50
KSk7Ci0gICAgfQotCi0gICAgaW5saW5lIERpZ2l0KiBkYXRhU3RvcmFnZSgpCi0gICAgewotICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxEaWdpdCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KHRoaXMpICsgb2Zmc2V0T2ZEYXRhKCkpOwotICAgIH0KKyAgICBzdGF0aWMgc2l6ZV90IG9m
ZnNldE9mRGF0YSgpOworICAgIERpZ2l0KiBkYXRhU3RvcmFnZSgpOwogCiAgICAgRGlnaXQgZGln
aXQodW5zaWduZWQpOwogICAgIHZvaWQgc2V0RGlnaXQodW5zaWduZWQsIERpZ2l0KTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAyNDAy
MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTI0LDEyICs1MjQsNiBAQCBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRl
bnRPcHRpb25zKCkKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc3OTU2CiAgICAgT3B0aW9uczo6dXNlUHJvYmVPU1JFeGl0KCkgPSBmYWxzZTsKICNlbmRp
ZgotCi0gICAgaWYgKCFPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkKLSAgICAgICAgT3B0aW9uczo6
ZGlza0NhY2hlUGF0aCgpID0gbnVsbHB0cjsKLQotICAgIGlmICghT3B0aW9uczo6ZGlza0NhY2hl
UGF0aCgpKQotICAgICAgICBPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgpID0gZmFsc2U7CiB9CiAK
IHZvaWQgT3B0aW9uczo6aW5pdGlhbGl6ZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAyNDAyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwOCw4ICs1MDgsNiBAQCBj
b25zdGV4cHIgYm9vbCBlbmFibGVXZWJBc3NlbWJseVN0cmVhbWluCiAgICAgdihib29sLCB0cmFj
ZUxMSW50RXhlY3V0aW9uLCBmYWxzZSwgQ29uZmlndXJhYmxlLCBudWxscHRyKSBcCiAgICAgdihi
b29sLCB0cmFjZUxMSW50U2xvd1BhdGgsIGZhbHNlLCBDb25maWd1cmFibGUsIG51bGxwdHIpIFwK
ICAgICB2KGJvb2wsIHRyYWNlQmFzZWxpbmVKSVRFeGVjdXRpb24sIGZhbHNlLCBOb3JtYWwsIG51
bGxwdHIpIFwKLSAgICB2KG9wdGlvblN0cmluZywgZGlza0NhY2hlUGF0aCwgbnVsbHB0ciwgUmVz
dHJpY3RlZCwgIiIpIFwKLSAgICB2KGJvb2wsIGZvcmNlRGlza0NhY2hlLCBmYWxzZSwgUmVzdHJp
Y3RlZCwgIiIpIFwKICAgICB2KHVuc2lnbmVkLCB0aHJlc2hvbGRGb3JHbG9iYWxMZXhpY2FsQmlu
ZGluZ0Vwb2NoLCBVSU5UX01BWCwgTm9ybWFsLCAiVGhyZXNob2xkIGZvciBnbG9iYWwgbGV4aWNh
bCBiaW5kaW5nIGVwb2NoLiBJZiB0aGUgZXBvY2ggcmVhY2hlcyB0byB0aGlzIHZhbHVlLCBDb2Rl
QmxvY2sgbWV0YWRhdGEgZm9yIHNjb3BlIG9wZXJhdGlvbnMgd2lsbCBiZSByZXZpc2VkIGdsb2Jh
bGx5LiBJdCBuZWVkcyB0byBiZSBncmVhdGVyIHRoYW4gMS4iKSBcCiAKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgJKHJldmlzaW9uIDI0MDIyMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw4
ICs0MSw2IEBAIGNsYXNzIFZNOwogSlNfRVhQT1JUX1BSSVZBVEUgUmVnRXhwRmxhZ3MgcmVnRXhw
RmxhZ3MoY29uc3QgU3RyaW5nJik7CiAKIGNsYXNzIFJlZ0V4cCBmaW5hbCA6IHB1YmxpYyBKU0Nl
bGwgewotICAgIGZyaWVuZCBjbGFzcyBDYWNoZWRSZWdFeHA7Ci0KIHB1YmxpYzoKICAgICB0eXBl
ZGVmIEpTQ2VsbCBCYXNlOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzVGFi
bGUuaAkocmV2aXNpb24gMjQwMjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2NvcGVkQXJndW1lbnRzVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksNiBAQCBu
YW1lc3BhY2UgSlNDIHsKIC8vIG1ha2VzIHNlbnNlIGJlY2F1c2Ugc3VjaCBtb2RpZmljYXRpb25z
IGFyZSBzbyB1bmNvbW1vbi4gWW91J2QgaGF2ZSB0byBkbyBzb21ldGhpbmcgY3JhenkgbGlrZQog
Ly8gImRlbGV0ZSBhcmd1bWVudHNbaV0iIG9yIHNvbWUgdmFyaWFudCBvZiBkZWZpbmVPd25Qcm9w
ZXJ0eS4KIGNsYXNzIFNjb3BlZEFyZ3VtZW50c1RhYmxlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7
Ci0gICAgZnJpZW5kIGNsYXNzIENhY2hlZFNjb3BlZEFyZ3VtZW50c1RhYmxlOwotCiBwdWJsaWM6
CiAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5oCShyZXZp
c2lvbiAyNDAyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1l
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDYgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNp
bmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiV2FzbUluZGV4T3JOYW1lLmgiCiAjaW5jbHVkZSAi
V3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVkZSA8bGltaXRzLmg+CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCShyZXZpc2lvbiAyNDAy
MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJQcm9wZXJ0eU1hcEhh
c2hUYWJsZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUNo
YWluLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRh
YmxlLmgJKHJldmlzaW9uIDI0MDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N5bWJvbFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDggKzczLDYgQEAgc3RhdGljIEFM
V0FZU19JTkxJTkUgaW50IG1pc3NpbmdTeW1ib2xNYQogLy8gY29weTogICAgIFN5bWJvbFRhYmxl
RW50cnkgLS0+IEZhdEVudHJ5IC0tLS0tXgogCiBzdHJ1Y3QgU3ltYm9sVGFibGVFbnRyeSB7Ci0g
ICAgZnJpZW5kIGNsYXNzIENhY2hlZFN5bWJvbFRhYmxlRW50cnk7Ci0KIHByaXZhdGU6CiAgICAg
c3RhdGljIFZhck9mZnNldCB2YXJPZmZzZXRGcm9tQml0cyhpbnRwdHJfdCBiaXRzKQogICAgIHsK
QEAgLTQzOCw4ICs0MzYsNiBAQCBzdHJ1Y3QgU3ltYm9sVGFibGVJbmRleEhhc2hUcmFpdHMgOiBI
YXNoCiB9OwogCiBjbGFzcyBTeW1ib2xUYWJsZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewotICAg
IGZyaWVuZCBjbGFzcyBDYWNoZWRTeW1ib2xUYWJsZTsKLQogcHVibGljOgogICAgIHR5cGVkZWYg
SlNDZWxsIEJhc2U7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwpJbmRleDogU291cmNl
L1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlz
aW9uIDI0MDIyMCkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTIgQEAKKzIwMTktMDEtMjAgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+
CisKKyAgICAgICAgUm9sbG91dCByMjQwMjEwOiBJdCBicm9rZSB0ZXN0cyBvbiBpT1MKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MzY0MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0JpdFZlY3Rv
ci5oOgorCiAyMDE5LTAxLTIwICBUYWRldSBaYWdhbGxvICA8dHphZ2FsbG9AYXBwbGUuY29tPgog
CiAgICAgICAgIENhY2hlIGJ5dGVjb2RlIHRvIGRpc2sKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Jp
dFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCShyZXZp
c2lvbiAyNDAyMjApCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMzMsMTAgKzMzLDYgQEAKICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKLW5hbWVzcGFjZSBKU0MgewotY2xhc3MgQ2FjaGVk
Qml0VmVjdG9yOwotfQotCiBuYW1lc3BhY2UgV1RGIHsKIAogLy8gVGhpcyBpcyBhIHNwYWNlLWVm
ZmljaWVudCwgcmVzaXplYWJsZSBiaXR2ZWN0b3IgY2xhc3MuIEluIHRoZSBjb21tb24gY2FzZSBp
dApAQCAtMzQyLDggKzMzOCw2IEBAIHB1YmxpYzogCiAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3Qg
eyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KICAgICAgICAgCiBwcml2YXRlOgot
ICAgIGZyaWVuZCBjbGFzcyBKU0M6OkNhY2hlZEJpdFZlY3RvcjsKLQogICAgIHN0YXRpYyB1bnNp
Z25lZCBiaXRzSW5Qb2ludGVyKCkKICAgICB7CiAgICAgICAgIHJldHVybiBzaXplb2Yodm9pZCop
IDw8IDM7CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdl
TG9nCShyZXZpc2lvbiAyNDAyMjApCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxMyBAQAorMjAxOS0wMS0yMCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxl
LmNvbT4KKworICAgICAgICBSb2xsb3V0IHIyNDAyMTA6IEl0IGJyb2tlIHRlc3RzIG9uIGlPUwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkzNjQwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRz
L2pzYy1zdHJlc3MtdGVzdC1oZWxwZXJzL2J5dGVjb2RlLWNhY2hlLXRlc3QtaGVscGVyOgorICAg
ICAgICAqIFNjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHM6CisKIDIwMTktMDEtMjAgIGNocmlz
IGZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAogICAgICAgICBBWDogU3VwcG9ydCBy
ZXR1cm5pbmcgcmVsYXRpdmUgZnJhbWVzIGZvciBhY2Nlc3NpYmlsaXR5CkluZGV4OiBUb29scy9T
Y3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
cnVuLWpzYy1zdHJlc3MtdGVzdHMJKHJldmlzaW9uIDI0MDIyMCkKKysrIFRvb2xzL1NjcmlwdHMv
cnVuLWpzYy1zdHJlc3MtdGVzdHMJKHdvcmtpbmcgY29weSkKQEAgLTY1NSwxNSArNjU1LDYgQEAg
ZGVmIHJ1bkRlZmF1bHQoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aQogICAgIHJ1bigiZGVmYXVs
dCIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogZW5kCiAK
LWRlZiBydW5CeXRlY29kZUNhY2hlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0gICAg
dW5sZXNzICRob3N0T1MgPT0gImRhcndpbiIKLSAgICAgICAgc2tpcAotICAgICAgICByZXR1cm4K
LSAgICBlbmQKLSAgICBvcHRpb25zID0gQkFTRV9PUFRJT05TICsgJHRlc3RTcGVjaWZpY1JlcXVp
cmVkT3B0aW9ucyArIEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zCi0g
ICAgYWRkUnVuQ29tbWFuZCgiYnl0ZWNvZGUtY2FjaGUiLCBbInJ1YnkiLCAocGF0aFRvSGVscGVy
cyArICJieXRlY29kZS1jYWNoZS10ZXN0LWhlbHBlciIpLnRvX3MsIHBhdGhUb1ZNLnRvX3MsICRi
ZW5jaG1hcmsudG9fc10gKyBvcHRpb25zLCBzaWxlbnRPdXRwdXRIYW5kbGVyLCBzaW1wbGVFcnJv
ckhhbmRsZXIpCi1lbmQKLQogZGVmIHJ1bkJpZ0ludEVuYWJsZWQoKm9wdGlvbmFsVGVzdFNwZWNp
ZmljT3B0aW9ucykKICAgICAjIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNDAzMzExMjE+CiAgICAg
aWYgJHJlbW90ZSBvciAoJGFyY2hpdGVjdHVyZSAhfiAveDg2L2kgYW5kICRob3N0T1MgPT0gImRh
cndpbiIpCkBAIC03NjAsNyArNzUxLDYgQEAgZGVmIGRlZmF1bHRSdW4KICAgICAgICAgZGVmYXVs
dFF1aWNrUnVuCiAgICAgZWxzZQogICAgICAgICBydW5EZWZhdWx0Ci0gICAgICAgIHJ1bkJ5dGVj
b2RlQ2FjaGUKICAgICAgICAgaWYgJGppdFRlc3RzCiAgICAgICAgICAgICBydW5Ob0xMSW50CiAg
ICAgICAgICAgICBydW5Ob0NKSVRWYWxpZGF0ZVBoYXNlcwpJbmRleDogVG9vbHMvU2NyaXB0cy9q
c2Mtc3RyZXNzLXRlc3QtaGVscGVycy9ieXRlY29kZS1jYWNoZS10ZXN0LWhlbHBlcgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL2pzYy1zdHJlc3MtdGVzdC1oZWxwZXJzL2J5dGVjb2RlLWNh
Y2hlLXRlc3QtaGVscGVyCShyZXZpc2lvbiAyNDAyMjApCisrKyBUb29scy9TY3JpcHRzL2pzYy1z
dHJlc3MtdGVzdC1oZWxwZXJzL2J5dGVjb2RlLWNhY2hlLXRlc3QtaGVscGVyCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDQ4ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHJ1YnkKLQotIyBDb3B5cmlnaHQg
KEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jCi0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0jIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0jIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0jIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
LSMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECi0jIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgotIyBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotCi1yZXF1aXJlICdydWJ5Z2VtcycKLXJlcXVpcmUgJ2ZpbGV1dGls
cycKLXJlcXVpcmUgJ2pzb24nCi1yZXF1aXJlICdzaGVsbHdvcmRzJwotcmVxdWlyZSAndG1wZGly
JwotCi1kZWYgbXlzeXMoKmNtZCkKLSAgICByYWlzZSAiQ29tbWFuZCAje2NtZC5pbnNwZWN0fSBm
YWlsZWQ6ICN7JD8uaW5zcGVjdH0iIHVubGVzcyBzeXN0ZW0oKmNtZCkKLWVuZAotCi1wYXRoVG9W
TSA9IEFSR1ZbMF0KLWlucHV0RmlsZSA9IEFSR1ZbMV0KLWV4dHJhT3B0aW9ucyA9IEFSR1ZbMi4u
LTFdCi1kaXNrQ2FjaGVQYXRoID0gRGlyLm1rdG1wZGlyIFtpbnB1dEZpbGUsICdieXRlY29kZS1j
YWNoZSddCi0KLWJlZ2luCi0gICAgRU5WWyJKU0NfZGlza0NhY2hlUGF0aCJdID0gZGlza0NhY2hl
UGF0aAotICAgIG15c3lzKHBhdGhUb1ZNLCBpbnB1dEZpbGUsICpleHRyYU9wdGlvbnMpCi0gICAg
RU5WWyJKU0NfZm9yY2VEaXNrQ2FjaGUiXSA9ICJ0cnVlIgotICAgIG15c3lzKHBhdGhUb1ZNLCBp
bnB1dEZpbGUsICpleHRyYU9wdGlvbnMpCi1lbnN1cmUKLSAgICBGaWxlVXRpbHMucm1fcmYoZGlz
a0NhY2hlUGF0aCkKLWVuZAo=
</data>
<flag name="commit-queue"
          id="376409"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359666</attachid>
            <date>2019-01-20 19:58:35 -0800</date>
            <delta_ts>2019-01-20 20:37:09 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>135702</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQwMjIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1NCBA
QAorMjAxOS0wMS0yMCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBSb2xsb3V0IHIyNDAyMTA6IEl0IGJyb2tlIHRlc3RzIG9uIGlPUworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkzNjQwCisKKyAgICAgICAgVW5yZXZp
ZXdlZC4gfjI2NTAgdGVzdHMgYXJlIGZhaWxpbmcgb24gaU9TLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBidWlsdGlucy9CdWlsdGlu
TmFtZXMuY3BwOgorICAgICAgICAoSlNDOjpCdWlsdGluTmFtZXM6OkJ1aWx0aW5OYW1lcyk6Cisg
ICAgICAgICogYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmg6CisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRDb25zdGFudElkZW50aWZp
ZXJTZXRSZWdpc3RlcnMpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAg
ICAqIGJ5dGVjb2RlL0hhbmRsZXJJbmZvLmg6CisgICAgICAgICogYnl0ZWNvZGUvSW5zdHJ1Y3Rp
b25TdHJlYW0uaDoKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oOgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkU2V0Q29uc3RhbnQpOgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29uc3RhbnRJZGVudGlmaWVyU2V0cyk6CisgICAgICAg
ICogYnl0ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUv
VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlLmg6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRHbG9iYWxD
b2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRHbG9iYWxDb2RlQmxvY2s6OlVubGlu
a2VkR2xvYmFsQ29kZUJsb2NrKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRh
VGFibGUuaDoKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2suaDoKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaDoKKyAg
ICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgICoganNjLmNwcDoK
KyAgICAgICAgKGZ1bmN0aW9uUXVpdCk6CisgICAgICAgIChydW5KU0MpOgorICAgICAgICAqIHBh
cnNlci9Tb3VyY2VDb2RlLmg6CisgICAgICAgICogcGFyc2VyL1NvdXJjZUNvZGVLZXkuaDoKKyAg
ICAgICAgKEpTQzo6U291cmNlQ29kZUtleTo6b3BlcmF0b3IhPSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGFyc2VyL1VubGlua2VkU291cmNlQ29kZS5oOgorICAgICAgICAqIHBhcnNlci9W
YXJpYWJsZUVudmlyb25tZW50Lmg6CisgICAgICAgICogcnVudGltZS9DYWNoZWRUeXBlcy5jcHA6
CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpFbmNvZGVyOjpBbGxvY2F0aW9u
OjpidWZmZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpFbmNvZGVyOjpBbGxvY2F0
aW9uOjpvZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpFbmNvZGVyOjpBbGxv
Y2F0aW9uOjpBbGxvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6RW5j
b2Rlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkVuY29kZXI6OnZtKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6RW5jb2Rlcjo6bWFsbG9jKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RW5j
b2Rlcjo6b2Zmc2V0T2YpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpFbmNvZGVyOjpjYWNoZVB0
cik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkVuY29kZXI6Om9mZnNldEZvclB0cik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkVuY29kZXI6OnJlbGVhc2UpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpFbmNvZGVyOjpQYWdlOjpQYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RW5jb2Rl
cjo6UGFnZTo6bWFsbG9jKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6UGFnZTo6
YnVmZmVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6UGFnZTo6c2l6
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkVuY29kZXI6OlBhZ2U6OmdldE9mZnNl
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkVuY29kZXI6OmFsbG9jYXRlTmV3UGFn
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRlY29kZXI6OkRlY29kZXIpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpEZWNvZGVyOjp+RGVjb2Rlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkRlY29kZXI6OnZtKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RGVjb2Rlcjo6b2Zmc2V0T2Yp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpEZWNvZGVyOjpjYWNoZU9mZnNldCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkRlY29kZXI6OmFkZEZpbmFsaXplcik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmRlY29kZSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OlZhcmlhYmxlTGVuZ3RoT2JqZWN0OjpidWZmZXIgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpWYXJpYWJsZUxlbmd0aE9iamVjdDo6YWxsb2NhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRQdHI6OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNhY2hlZFB0cjo6ZGVjb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q2FjaGVkUHRyOjpvcGVyYXRvci0+IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2Fj
aGVkUHRyOjpnZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRSZWZQdHI6
OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZFJlZlB0cjo6ZGVjb2RlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkV3JpdGVCYXJyaWVyOjplbmNvZGUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRXcml0ZUJhcnJpZXI6OmRlY29kZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZFZlY3Rvcjo6ZW5jb2RlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkVmVjdG9yOjpkZWNvZGUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDYWNoZWRQYWlyOjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDYWNoZWRQYWlyOjpkZWNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNo
ZWRIYXNoTWFwOjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRIYXNoTWFw
OjpkZWNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRVbmlxdWVkU3Ry
aW5nSW1wbDo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkVW5pcXVlZFN0
cmluZ0ltcGw6OmRlY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZFN0
cmluZ0ltcGw6OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZFN0cmluZ0lt
cGw6OmRlY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZFN0cmluZzo6
ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nOjpkZWNvZGUgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRJZGVudGlmaWVyOjplbmNvZGUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRJZGVudGlmaWVyOjpkZWNvZGUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRPcHRpb25hbDo6ZW5jb2RlKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q2FjaGVkT3B0aW9uYWw6OmRlY29kZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNhY2hlZE9wdGlvbmFsOjpkZWNvZGVBc1B0ciBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNhY2hlZFNpbXBsZUp1bXBUYWJsZTo6ZW5jb2RlKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q2FjaGVkU2ltcGxlSnVtcFRhYmxlOjpkZWNvZGUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRTdHJpbmdKdW1wVGFibGU6OmVuY29kZSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZFN0cmluZ0p1bXBUYWJsZTo6ZGVjb2RlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrUmFyZURhdGE6OmVuY29kZSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9ja1JhcmVEYXRhOjpkZWNvZGUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRCaXRWZWN0b3I6OmVuY29kZSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZEJpdFZlY3Rvcjo6ZGVjb2RlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkSGFzaFNldDo6ZW5jb2RlKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q2FjaGVkSGFzaFNldDo6ZGVjb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q2FjaGVkQ29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk6OmVuY29kZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5Ojpk
ZWNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRWYXJpYWJsZUVudmly
b25tZW50OjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRWYXJpYWJsZUVu
dmlyb25tZW50OjpkZWNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRB
cnJheTo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkQXJyYXk6OmRlY29k
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZFNjb3BlZEFyZ3VtZW50c1Rh
YmxlOjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRTY29wZWRBcmd1bWVu
dHNUYWJsZTo6ZGVjb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkU3lt
Ym9sVGFibGVFbnRyeTo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkU3lt
Ym9sVGFibGVFbnRyeTo6ZGVjb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2Fj
aGVkU3ltYm9sVGFibGU6OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZFN5
bWJvbFRhYmxlOjpkZWNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRJ
bW11dGFibGVCdXR0ZXJmbHk6OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hl
ZEltbXV0YWJsZUJ1dHRlcmZseTo6ZGVjb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6Q2FjaGVkUmVnRXhwOjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRS
ZWdFeHA6OmRlY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZFRlbXBs
YXRlT2JqZWN0RGVzY3JpcHRvcjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2Fj
aGVkVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOjpkZWNvZGUgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDYWNoZWRCaWdJbnQ6OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNhY2hlZEJpZ0ludDo6ZGVjb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2Fj
aGVkSlNWYWx1ZTo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkSlNWYWx1
ZTo6ZGVjb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkSW5zdHJ1Y3Rp
b25TdHJlYW06OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZEluc3RydWN0
aW9uU3RyZWFtOjpkZWNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRN
ZXRhZGF0YVRhYmxlOjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRNZXRh
ZGF0YVRhYmxlOjpkZWNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRT
b3VyY2VPcmlnaW46OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZFNvdXJj
ZU9yaWdpbjo6ZGVjb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkVGV4
dFBvc2l0aW9uOjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRUZXh0UG9z
aXRpb246OmRlY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZFNvdXJj
ZVByb3ZpZGVyU2hhcGU6OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZFNv
dXJjZVByb3ZpZGVyU2hhcGU6OmRlY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNhY2hlZFN0cmluZ1NvdXJjZVByb3ZpZGVyOjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDYWNoZWRTdHJpbmdTb3VyY2VQcm92aWRlcjo6ZGVjb2RlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q2FjaGVkV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlcjo6ZW5jb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlcjo6
ZGVjb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlUHJvdmlk
ZXI6OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZFNvdXJjZVByb3ZpZGVy
OjpkZWNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRVbmxpbmtlZFNv
dXJjZUNvZGVTaGFwZTo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkVW5s
aW5rZWRTb3VyY2VDb2RlU2hhcGU6OmRlY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkNhY2hlZFNvdXJjZUNvZGU6OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNh
Y2hlZFNvdXJjZUNvZGU6OmRlY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNh
Y2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Zmlyc3RMaW5lT2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpsaW5lQ291bnQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnVubGlu
a2VkRnVuY3Rpb25OYW1lU3RhcnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNo
ZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnVubGlua2VkQm9keVN0YXJ0Q29sdW1uIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjp1bmxpbmtlZEJv
ZHlFbmRDb2x1bW4gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlv
bkV4ZWN1dGFibGU6OnN0YXJ0T2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpzb3VyY2VMZW5ndGggY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnBhcmFtZXRlcnNTdGFydE9m
ZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0
YWJsZTo6dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjp0eXBlUHJvZmlsaW5nRW5kT2Zmc2V0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpw
YXJhbWV0ZXJDb3VudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0
aW9uRXhlY3V0YWJsZTo6ZmVhdHVyZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
YWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnNvdXJjZVBhcnNlTW9kZSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6aXNJblN0cmljdENvbnRl
eHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFi
bGU6Omhhc0NhcHR1cmVkVmFyaWFibGVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjppc0J1aWx0aW5GdW5jdGlvbiBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6aXNCdWlsdGluRGVm
YXVsdENsYXNzQ29uc3RydWN0b3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNo
ZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbnN0cnVjdEFiaWxpdHkgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbnN0cnVjdG9yS2luZCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6
ZnVuY3Rpb25Nb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rp
b25FeGVjdXRhYmxlOjpzY3JpcHRNb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpzdXBlckJpbmRpbmcgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmRlcml2ZWRDb250ZXh0VHlw
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6bmFtZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6ZWNtYU5hbWUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRG
dW5jdGlvbkV4ZWN1dGFibGU6OmluZmVycmVkTmFtZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNhY2hlZENvZGVCbG9jazo6aW5zdHJ1Y3Rpb25zIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjp0aGlzUmVnaXN0ZXIgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OnNjb3BlUmVnaXN0ZXIgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6Omdsb2JhbE9iamVjdFJlZ2lz
dGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpzb3Vy
Y2VVUkxEaXJlY3RpdmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRDb2Rl
QmxvY2s6OnNvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OnVzZXNFdmFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjppc1N0cmljdE1vZGUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OmlzQ29uc3RydWN0b3IgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6Omhhc0NhcHR1cmVkVmFyaWFibGVz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjppc0J1aWx0
aW5GdW5jdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9j
azo6c3VwZXJCaW5kaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29k
ZUJsb2NrOjpzY3JpcHRNb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVk
Q29kZUJsb2NrOjppc0Fycm93RnVuY3Rpb25Db250ZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjppc0NsYXNzQ29udGV4dCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6d2FzQ29tcGlsZWRXaXRoRGVidWdnaW5n
T3Bjb2RlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6
Y29uc3RydWN0b3JLaW5kIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29k
ZUJsb2NrOjpkZXJpdmVkQ29udGV4dFR5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDYWNoZWRDb2RlQmxvY2s6OmV2YWxDb250ZXh0VHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6aGFzVGFpbENhbGxzIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpsaW5lQ291bnQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OmVuZENvbHVtbiBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6bnVtVmFycyBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6bnVtQ2FsbGVlTG9jYWxzIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpudW1QYXJhbWV0ZXJz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpmZWF0dXJl
cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6cGFyc2VN
b2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpjb2Rl
VHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6cmFy
ZURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRQcm9ncmFtQ29kZUJs
b2NrOjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRQcm9ncmFtQ29kZUJs
b2NrOjpkZWNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRNb2R1bGVD
b2RlQmxvY2s6OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZE1vZHVsZUNv
ZGVCbG9jazo6ZGVjb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkRXZh
bENvZGVCbG9jazo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkRXZhbENv
ZGVCbG9jazo6ZGVjb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVu
Y3Rpb25Db2RlQmxvY2s6OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZEZ1
bmN0aW9uQ29kZUJsb2NrOjpkZWNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpV
bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2Nr
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrPENvZGVCbG9ja1R5cGU+
OjpkZWNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZFByb2dyYW1D
b2RlQmxvY2s6OlVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6VW5saW5rZWRNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRFdmFsQ29kZUJsb2Nr
OjpVbmxpbmtlZEV2YWxDb2RlQmxvY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRG
dW5jdGlvbkV4ZWN1dGFibGU6OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hl
ZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVjb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrPENvZGVCbG9ja1R5cGU+
OjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRTb3VyY2VDb2RlS2V5Ojpl
bmNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZWRTb3VyY2VDb2RlS2V5OjpkZWNv
ZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZUVudHJ5OjplbmNvZGUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDYWNoZUVudHJ5OjogY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjogY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjplbmNvZGVDb2RlQmxv
Y2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpkZWNvZGVDb2RlQmxvY2tJbXBsKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBydW50aW1lL0NhY2hlZFR5cGVzLmg6CisgICAgICAgIChKU0M6OmRlY29k
ZUNvZGVCbG9jayk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9Db2RlQ2FjaGUuY3BwOgor
ICAgICAgICAoSlNDOjpDb2RlQ2FjaGVNYXA6OnBydW5lU2xvd0Nhc2UpOgorICAgICAgICAoSlND
OjpDb2RlQ2FjaGU6OmdldFVubGlua2VkR2xvYmFsQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6
Q29kZUNhY2hlOjpnZXRVbmxpbmtlZEdsb2JhbEZ1bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAg
IChKU0M6OkNvZGVDYWNoZTo6d3JpdGUpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvQ29k
ZUNhY2hlLmg6CisgICAgICAgIChKU0M6OkNvZGVDYWNoZU1hcDo6ZmluZENhY2hlQW5kVXBkYXRl
QWdlKToKKyAgICAgICAgKEpTQzo6Q29kZUNhY2hlOjpjbGVhcik6CisgICAgICAgIChKU0M6OkNv
ZGVDYWNoZU1hcDo6YmVnaW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGVNYXA6
OmVuZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVDYWNoZU1hcDo6ZmV0Y2hGcm9tRGlz
a0ltcGwpOiBEZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6d3Jp
dGVDb2RlQmxvY2spOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQuY3BwOgor
ICAgICAgICAoSlNDOjpKU0JpZ0ludDo6b2Zmc2V0T2ZEYXRhKToKKyAgICAgICAgKEpTQzo6SlNC
aWdJbnQ6OmRhdGFTdG9yYWdlKToKKyAgICAgICAgKiBydW50aW1lL0pTQmlnSW50Lmg6CisgICAg
ICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5k
ZW50T3B0aW9ucyk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICogcnVu
dGltZS9SZWdFeHAuaDoKKyAgICAgICAgKiBydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmg6
CisgICAgICAgICogcnVudGltZS9TdGFja0ZyYW1lLmg6CisgICAgICAgICogcnVudGltZS9TdHJ1
Y3R1cmVJbmxpbmVzLmg6CisgICAgICAgICogcnVudGltZS9TeW1ib2xUYWJsZS5oOgorCiAyMDE5
LTAxLTIwICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pT
Q10gSW52YWxpZGF0ZSBvbGQgc2NvcGUgb3BlcmF0aW9ucyB1c2luZyBnbG9iYWwgbGV4aWNhbCBi
aW5kaW5nIGVwb2NoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZp
c2lvbiAyNDAyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTgzMyw3ICs4MzMsNiBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFU
RV9GUkFNRVdPUktfSEVBCiAgICAgcnVudGltZS9KU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5o
CiAgICAgcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCiAgICAgcnVudGltZS9KU0dsb2JhbE9iamVj
dElubGluZXMuaAotICAgIHJ1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaAogICAgIHJ1bnRp
bWUvSlNJbnRlcm5hbFByb21pc2UuaAogICAgIHJ1bnRpbWUvSlNJbnRlcm5hbFByb21pc2VEZWZl
cnJlZC5oCiAgICAgcnVudGltZS9KU01pY3JvdGFzay5oCkBAIC04NDksNyArODQ4LDYgQEAgc2V0
KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQQogICAgIHJ1bnRpbWUvSlNQcm9t
aXNlLmgKICAgICBydW50aW1lL0pTUHJvbWlzZUNvbnN0cnVjdG9yLmgKICAgICBydW50aW1lL0pT
UHJvbWlzZURlZmVycmVkLmgKLSAgICBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5o
CiAgICAgcnVudGltZS9KU1Byb3h5LmgKICAgICBydW50aW1lL0pTUnVuTG9vcFRpbWVyLmgKICAg
ICBydW50aW1lL0pTU2NvcGUuaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2
aXNpb24gMjQwMjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC03MTMsNyArNzEzLDYgQEAgcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3Iu
Y3BwCiBydW50aW1lL0Jvb2xlYW5PYmplY3QuY3BwCiBydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUu
Y3BwCiBydW50aW1lL0NhbGxEYXRhLmNwcAotcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKIHJ1bnRp
bWUvQ2F0Y2hTY29wZS5jcHAKIHJ1bnRpbWUvQ2xhc3NJbmZvLmNwcAogcnVudGltZS9DbG9uZWRB
cmd1bWVudHMuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24gMjQwMjIwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcg
KzI4LDYgQEAKICNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ2F0Y2hT
Y29wZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgog
I2luY2x1ZGUgIkNvbXBsZXRpb24uaCIKICNpbmNsdWRlICJDb25maWdGaWxlLmgiCiAjaW5jbHVk
ZSAiRGlzYXNzZW1ibGVyLmgiCkBAIC0xOTg5LDExICsxOTg4LDggQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkZhaQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25R
dWl0KEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25RdWl0KEV4ZWNTdGF0ZSopCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICB2bS5j
b2RlQ2FjaGUoKS0+d3JpdGUodm0pOwotCiAgICAganNjRXhpdChFWElUX1NVQ0NFU1MpOwogCiAj
aWYgQ09NUElMRVIoTVNWQykKQEAgLTI4ODAsOCArMjg3Niw2IEBAIGludCBydW5KU0MoY29uc3Qg
Q29tbWFuZExpbmUmIG9wdGlvbnMsIGIKICNlbmRpZgogICAgIH0KIAotICAgIHZtLmNvZGVDYWNo
ZSgpLT53cml0ZSh2bSk7Ci0KICAgICBpZiAoaXNXb3JrZXIpIHsKICAgICAgICAgSlNMb2NrSG9s
ZGVyIGxvY2tlcih2bSk7CiAgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugd2UgZG9u
J3Qgd2FudCB0aGUgd29ya2VyJ3MgbWFpbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDI0MDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04MjYsNyAr
ODI2LDcgQEAKIAkJMjYyRDg1QjcxQzBENjUwRjAwNkFDQjYxIC8qIEFpckZpeFBhcnRpYWxSZWdp
c3RlclN0YWxscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMjYyRDg1QjUxQzBENjUwRjAwNkFDQjYxIC8qIEFpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxs
cy5oICovOyB9OwogCQkyNjg0RDQzODFDMDAxNjFDMDA4MUQ2NjMgLyogQWlyTGl2ZW5lc3MuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2ODRENDM3MUMw
MDE2MUMwMDgxRDY2MyAvKiBBaXJMaXZlbmVzcy5oICovOyB9OwogCQkyNjlENjM2RTFCRkJFNUQx
MDAxMDFCMUQgLyogRlRMT3V0cHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyNjlENjM2RDFCRkJFNUQwMDAxMDFCMUQgLyogRlRMT3V0cHV0LmggKi87
IH07Ci0JCTJBMDVBQkQ2MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBMDVB
QkQ0MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkyQTA1QUJENjE5NjFE
RjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTA1QUJENDE5NjFERjI0MDAzNDE3NTAg
LyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmggKi87IH07CiAJCTJBMTExMjQ2MTkyRkNFNzkw
MDVFRTE4RCAvKiBDdXN0b21HZXR0ZXJTZXR0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBMTExMjQ0MTkyRkNFNzkwMDVFRTE4RCAvKiBDdXN0b21H
ZXR0ZXJTZXR0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkyQTQ4RDE5MTE3NzIzNjVCMDBDNjVBNUYgLyogQVBJQ2FsbGJhY2tGdW5jdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIxMUI1NzQx
NzZBMjI0RDAwMEUyQTIzIC8qIEFQSUNhbGxiYWNrRnVuY3Rpb24uaCAqLzsgfTsKIAkJMkE0QkI3
RjMxOEE0MTE3OTAwOEEwRkNEIC8qIEpTTWFuYWdlZFZhbHVlSW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBNEJCN0YyMThBNDExNzkwMDhB
MEZDRCAvKiBKU01hbmFnZWRWYWx1ZUludGVybmFsLmggKi87IH07CkBAIC0xMDYyLDcgKzEwNjIs
NyBAQAogCQk1M0VBRkUyRjIwOERGQUI0MDA3RDUyNEIgLyogdGVzdGFwaS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzFENEUxOTFGNTlDREQyMDBF
QzgzNkMgLyogdGVzdGFwaS5jcHAgKi87IH07CiAJCTUzRUUwMUI2MjE4RjY5MTYwMEFEMUY4RCAv
KiBKU1NjcmlwdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTNFRTAxQjUyMThGNjkwRjAwQUQxRjhEIC8qIEpTU2NyaXB0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTNFRTAxQjgyMThGN0VGRjAwQUQx
RjhEIC8qIEpTU2NyaXB0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzRUUwMUI3MjE4RjdFRkYwMEFEMUY4RCAvKiBKU1NjcmlwdEludGVy
bmFsLmggKi87IH07Ci0JCTUzRjExRjQxMjA5MTM4RDcwMEU0MTFBNyAvKiBKU0ltbXV0YWJsZUJ1
dHRlcmZseS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTNGMTFGNDAyMDkxMzhENzAwRTQxMUE3IC8qIEpTSW1tdXRhYmxlQnV0dGVyZmx5LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTNGMTFGNDEyMDkx
MzhENzAwRTQxMUE3IC8qIEpTSW1tdXRhYmxlQnV0dGVyZmx5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0YxMUY0MDIwOTEzOEQ3MDBFNDExQTcgLyog
SlNJbW11dGFibGVCdXR0ZXJmbHkuaCAqLzsgfTsKIAkJNTNGNDBFODUxRDU4Rjk3NzAwOTlBMUI2
IC8qIFdhc21TZWN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTNGNDBFODQxRDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9ucy5oICovOyB9
OwogCQk1M0Y0MEU4QjFENTkwMUJCMDA5OUExQjYgLyogV2FzbUZ1bmN0aW9uUGFyc2VyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU4QTFENTkw
MUJCMDA5OUExQjYgLyogV2FzbUZ1bmN0aW9uUGFyc2VyLmggKi87IH07CiAJCTUzRjQwRThEMUQ1
OTAxRjIwMDk5QTFCNiAvKiBXYXNtUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU4QzFENTkwMUYyMDA5OUExQjYgLyogV2FzbVBhcnNl
ci5oICovOyB9OwpAQCAtMzEyOCw3ICszMTI4LDYgQEAKIAkJMTQzODZBNzMxREQ2OTg5NTAwODY1
MkM0IC8qIERpcmVjdEV2YWxFeGVjdXRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERpcmVjdEV2YWxFeGVjdXRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTE0Mzg2QTc2MURENjk4OUMwMDg2NTJDNCAvKiBJbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluZGlyZWN0RXZhbEV4ZWN1
dGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDM4NkE3NzFERDY5ODlD
MDA4NjUyQzQgLyogSW5kaXJlY3RFdmFsRXhlY3V0YWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTE0M0JFMjY1MjFDODU3NzcwMDIwQ0QxNyAvKiBDYWNoZWRUeXBlcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRUeXBlcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNDQwMDUxRjBBNTMxRDNCMDAwNUYwNjEgLyogTm9kZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOb2RlLmg7IHBhdGggPSB0ZXN0cy9Ob2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NDAwNTIwMEE1MzFEM0IwMDA1RjA2
MSAvKiBOb2RlLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IE5vZGUuYzsgcGF0
aCA9IHRlc3RzL05vZGUuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0MDA3NDgw
QTUzNkNDMjAwMDVGMDYxIC8qIE5vZGVMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IE5vZGVMaXN0Lmg7IHBhdGggPSB0ZXN0cy9Ob2RlTGlzdC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMzI0Myw3ICszMjQyLDYgQEAKIAkJMTREODU3NzQwQTQ2OTZDODAw
MzIxNDZDIC8qIHRlc3RhcGkuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IG5h
bWUgPSB0ZXN0YXBpLmpzOyBwYXRoID0gQVBJL3Rlc3RzL3Rlc3RhcGkuanM7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTE0REE4MThFMEQ5OUZEMjAwMEIwQTRGQiAvKiBKU0xleGljYWxF
bnZpcm9ubWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0xleGljYWxF
bnZpcm9ubWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNERBODE4RjBEOTlG
RDIwMDBCMEE0RkIgLyogSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkxNERBRkE0NTIxRTNCODcxMDA0QjY4RjcgLyogQ2FjaGVkVHlw
ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FjaGVkVHlwZXMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNERFMEQ2ODBEMDI0MzE0MDBBQUND
QTIgLyogSlNHbG9iYWxPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBs
aW5lRW5kaW5nID0gMDsgcGF0aCA9IEpTR2xvYmFsT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgeGNMYW5ndWFnZVNwZWNpZmljYXRpb25JZGVudGlmaWVyID0geGNvZGUubGFuZy5j
cHA7IH07CiAJCTE0REYwNEQ5MTZCMzk5NkQwMDE2QTUxMyAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5
c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YXRpY1Byb3BlcnR5QW5h
bHlzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRFODRGOTkxNEVFMUFDQzAw
RDZENUQ0IC8qIFdlYWtCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXZWFrQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjYwMiw4
ICs2NjAwLDYgQEAKIAkJCQk5RTcyOTQwOTE5MEYwMzA2MDAxQTkxQjUgLyogQnVuZGxlUGF0aC5t
bSAqLywKIAkJCQkwRkI3RjM4QjE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggKi8sCiAJ
CQkJMEZCN0YzOEMxNUVEOEUzODAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZXMuaCAqLywKLQkJ
CQkxNERBRkE0NTIxRTNCODcxMDA0QjY4RjcgLyogQ2FjaGVkVHlwZXMuY3BwICovLAotCQkJCTE0
M0JFMjY1MjFDODU3NzcwMDIwQ0QxNyAvKiBDYWNoZWRUeXBlcy5oICovLAogCQkJCTBGRUMzQzVG
MUYzNzlGNTMwMEY1OUI2QyAvKiBDYWdlZEJhcnJpZXJQdHIuaCAqLywKIAkJCQlCQ0E2MkRGRTBF
MjgyNjIzMDAwNEYzMEQgLyogQ2FsbERhdGEuY3BwICovLAogCQkJCTE0NUM1MDdGMEQ5REY2M0Iw
MDg4RjZCOSAvKiBDYWxsRGF0YS5oICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J1
aWx0aW5zL0J1aWx0aW5OYW1lcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5jcHAJKHJldmlzaW9uIDI0MDIyMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02Myw3ICs2Myw2IEBAIEJ1aWx0aW5OYW1lczo6QnVpbHRpbk5hbWVzKFZNKiB2bSwgQ29t
bW8KICAgICBKU0NfQ09NTU9OX1BSSVZBVEVfSURFTlRJRklFUlNfRUFDSF9QUk9QRVJUWV9OQU1F
KElOSVRJQUxJWkVfUFJJVkFURV9UT19QVUJMSUNfRU5UUlkpCiAgICAgSlNDX0ZPUkVBQ0hfQlVJ
TFRJTl9GVU5DVElPTl9OQU1FKElOSVRJQUxJWkVfUFVCTElDX1RPX1BSSVZBVEVfRU5UUlkpCiAg
ICAgSlNDX0NPTU1PTl9QUklWQVRFX0lERU5USUZJRVJTX0VBQ0hfUFJPUEVSVFlfTkFNRShJTklU
SUFMSVpFX1BVQkxJQ19UT19QUklWQVRFX0VOVFJZKQotICAgIEpTQ19DT01NT05fUFJJVkFURV9J
REVOVElGSUVSU19FQUNIX1dFTExfS05PV05fU1lNQk9MKElOSVRJQUxJWkVfU1lNQk9MX1BSSVZB
VEVfVE9fUFVCTElDX0VOVFJZKQogICAgIEpTQ19DT01NT05fUFJJVkFURV9JREVOVElGSUVSU19F
QUNIX1dFTExfS05PV05fU1lNQk9MKElOSVRJQUxJWkVfU1lNQk9MX1BVQkxJQ19UT19QUklWQVRF
X0VOVFJZKQogICAgIG1fcHJpdmF0ZVRvUHVibGljTWFwLmFkZChtX2RvbGxhclZNUHJpdmF0ZU5h
bWUuaW1wbCgpLCAmbV9kb2xsYXJWTU5hbWUpOwogICAgIG1fcHVibGljVG9Qcml2YXRlTWFwLmFk
ZChtX2RvbGxhclZNTmFtZS5pbXBsKCksICZtX2RvbGxhclZNUHJpdmF0ZU5hbWUpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAkocmV2aXNp
b24gMjQwMjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsNyArMjEzLDYgQEAgZXh0ZXJuIFN5bWJvbEltcGw6
OlN0YXRpY1N5bWJvbEltcGwgcG9seQogLy8gV2UgY29tbWFuZGVlciB0aGUgcHVibGljVG9Qcml2
YXRlTWFwIHRvIGFsbG93IHVzIHRvIGNvbnZlcnQgcHJpdmF0ZSBzeW1ib2wgbmFtZXMgaW50byB0
aGUgYXBwcm9wcmlhdGUgc3ltYm9sLgogLy8gZS5nLiBAaXRlcmF0b3JTeW1ib2wgcG9pbnRzIHRv
IFN5bWJvbC5pdGVyYXRvciBpbiB0aGlzIG1hcCByYXRoZXIgdGhhbiB0byBhIGFuIGFjdHVhbCBw
cml2YXRlIG5hbWUuCiAvLyBGSVhNRTogVGhpcyBpcyBhIHdlaXJkIGhhY2sgYW5kIHdlIHNob3Vs
ZG4ndCBuZWVkIHRvIGRvIHRoaXMuCi0jZGVmaW5lIElOSVRJQUxJWkVfU1lNQk9MX1BSSVZBVEVf
VE9fUFVCTElDX0VOVFJZKG5hbWUpIG1fcHJpdmF0ZVRvUHVibGljTWFwLmFkZChtXyMjbmFtZSMj
U3ltYm9sLmltcGwoKSwgJm1fIyNuYW1lIyNTeW1ib2xQcml2YXRlSWRlbnRpZmllcik7CiAjZGVm
aW5lIElOSVRJQUxJWkVfU1lNQk9MX1BVQkxJQ19UT19QUklWQVRFX0VOVFJZKG5hbWUpIG1fcHVi
bGljVG9Qcml2YXRlTWFwLmFkZChtXyMjbmFtZSMjU3ltYm9sUHJpdmF0ZUlkZW50aWZpZXIuaW1w
bCgpLCAmbV8jI25hbWUjI1N5bWJvbCk7CiAKIGNsYXNzIEJ1aWx0aW5OYW1lcyB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24g
MjQwMjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg2OSw3ICs4NjksNyBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2so
KQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpzZXRDb25zdGFu
dElkZW50aWZpZXJTZXRSZWdpc3RlcnMoVk0mIHZtLCBjb25zdCBWZWN0b3I8Q29uc3RhbnRJZGVu
dGlmaWVyU2V0RW50cnk+JiBjb25zdGFudHMpCit2b2lkIENvZGVCbG9jazo6c2V0Q29uc3RhbnRJ
ZGVudGlmaWVyU2V0UmVnaXN0ZXJzKFZNJiB2bSwgY29uc3QgVmVjdG9yPENvbnN0YW50SW5kZW50
aWZpZXJTZXRFbnRyeT4mIGNvbnN0YW50cykKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ2xv
YmFsT2JqZWN0LmdldCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkocmV2aXNpb24gMjQwMjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC04OTAsNyArODkwLDcgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgdXBkYXRlQWxsUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKHVu
c2lnbmVkJiBudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIHVuc2lnbmVkJiBu
dW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzKTsKIAotICAgIHZvaWQgc2V0Q29uc3RhbnRJZGVudGlm
aWVyU2V0UmVnaXN0ZXJzKFZNJiwgY29uc3QgVmVjdG9yPENvbnN0YW50SWRlbnRpZmllclNldEVu
dHJ5PiYgY29uc3RhbnRzKTsKKyAgICB2b2lkIHNldENvbnN0YW50SWRlbnRpZmllclNldFJlZ2lz
dGVycyhWTSYsIGNvbnN0IFZlY3RvcjxDb25zdGFudEluZGVudGlmaWVyU2V0RW50cnk+JiBjb25z
dGFudHMpOwogCiAgICAgdm9pZCBzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBWZWN0b3I8V3Jp
dGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRzLCBjb25zdCBWZWN0b3I8U291cmNlQ29kZVJl
cHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgJKHJldmlz
aW9uIDI0MDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5m
by5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSwxMCArODksNiBAQCBzdHJ1Y3QgSGFuZGxlckluZm9C
YXNlIHsKIH07CiAKIHN0cnVjdCBVbmxpbmtlZEhhbmRsZXJJbmZvIDogcHVibGljIEhhbmRsZXJJ
bmZvQmFzZSB7Ci0gICAgVW5saW5rZWRIYW5kbGVySW5mbygpCi0gICAgewotICAgIH0KLQogICAg
IFVubGlua2VkSGFuZGxlckluZm8odWludDMyX3Qgc3RhcnQsIHVpbnQzMl90IGVuZCwgdWludDMy
X3QgdGFyZ2V0LCBIYW5kbGVyVHlwZSBoYW5kbGVyVHlwZSkKICAgICB7CiAgICAgICAgIHRoaXMt
PnN0YXJ0ID0gc3RhcnQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5z
dHJ1Y3Rpb25TdHJlYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uaAkocmV2aXNpb24gMjQwMjIwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uU3RyZWFtLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDcgKzM5LDYgQEAgY2xhc3MgSW5zdHJ1Y3Rpb25TdHJlYW0gewogICAgIHVzaW5nIElu
c3RydWN0aW9uQnVmZmVyID0gVmVjdG9yPHVpbnQ4X3QsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93
PjsKIAogICAgIGZyaWVuZCBjbGFzcyBJbnN0cnVjdGlvblN0cmVhbVdyaXRlcjsKLSAgICBmcmll
bmQgY2xhc3MgQ2FjaGVkSW5zdHJ1Y3Rpb25TdHJlYW07CiBwdWJsaWM6CiAgICAgc2l6ZV90IHNp
emVJbkJ5dGVzKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCShyZXZpc2lvbiAyNDAyMjApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtNjUsMTUgKzY1LDEyIEBAIGNsYXNzIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s7
CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTsKIHN0cnVjdCBFeGVjdXRhYmxlSW5m
bzsKIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KLWNsYXNzIENhY2hlZENvZGVC
bG9jazsKLQogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZFZhbHVlUHJvZmlsZTsKIHR5cGVkZWYg
dW5zaWduZWQgVW5saW5rZWRBcnJheVByb2ZpbGU7CiB0eXBlZGVmIHVuc2lnbmVkIFVubGlua2Vk
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKIHR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRPYmplY3RB
bGxvY2F0aW9uUHJvZmlsZTsKIHR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRMTEludENhbGxMaW5r
SW5mbzsKLXVzaW5nIENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5ID0gc3RkOjpwYWlyPElkZW50
aWZpZXJTZXQsIHVuc2lnbmVkPjsKK3VzaW5nIENvbnN0YW50SW5kZW50aWZpZXJTZXRFbnRyeSA9
IHN0ZDo6cGFpcjxJZGVudGlmaWVyU2V0LCB1bnNpZ25lZD47CiAKIHN0cnVjdCBVbmxpbmtlZFN0
cmluZ0p1bXBUYWJsZSB7CiAgICAgc3RydWN0IE9mZnNldExvY2F0aW9uIHsKQEAgLTE3MSw3ICsx
NjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRSZWdp
c3RlcnMuc2l6ZSgpOwogICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmFwcGVuZChXcml0ZUJh
cnJpZXI8VW5rbm93bj4oKSk7CiAgICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uLmFwcGVuZChTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyKTsKLSAgICAgICAg
bV9jb25zdGFudElkZW50aWZpZXJTZXRzLmFwcGVuZChDb25zdGFudElkZW50aWZpZXJTZXRFbnRy
eShzZXQsIHJlc3VsdCkpOworICAgICAgICBtX2NvbnN0YW50SWRlbnRpZmllclNldHMuYXBwZW5k
KENvbnN0YW50SW5kZW50aWZpZXJTZXRFbnRyeShzZXQsIHJlc3VsdCkpOwogICAgIH0KIAogICAg
IHVuc2lnbmVkIGFkZENvbnN0YW50KEpTVmFsdWUgdiwgU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
IHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiA9IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3Ro
ZXIpCkBAIC0yMDUsNyArMjAyLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9saW5rVGlt
ZUNvbnN0YW50c1tpbmRleF07CiAgICAgfQogICAgIGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8
VW5rbm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3Rl
cnM7IH0KLSAgICBjb25zdCBWZWN0b3I8Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+JiBjb25z
dGFudElkZW50aWZpZXJTZXRzKCkgeyByZXR1cm4gbV9jb25zdGFudElkZW50aWZpZXJTZXRzOyB9
CisgICAgY29uc3QgVmVjdG9yPENvbnN0YW50SW5kZW50aWZpZXJTZXRFbnRyeT4mIGNvbnN0YW50
SWRlbnRpZmllclNldHMoKSB7IHJldHVybiBtX2NvbnN0YW50SWRlbnRpZmllclNldHM7IH0KICAg
ICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoaW50IGluZGV4
KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFu
dFJlZ2lzdGVySW5kZXhdOyB9CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzQ29uc3RhbnRSZWdp
c3RlckluZGV4KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXggPj0gRmlyc3RDb25zdGFu
dFJlZ2lzdGVySW5kZXg7IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQo
aW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmly
c3RDb25zdGFudFJlZ2lzdGVySW5kZXhdLmdldCgpOyB9CkBAIC0zNzAsMTAgKzM2Nyw2IEBAIHB1
YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIFVubGlua2VkQ29kZUJsb2NrKFZNKiwgU3RydWN0dXJl
KiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiwgRGVidWdnZXJNb2RlKTsKLQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Ci0gICAgVW5saW5rZWRDb2RlQmxvY2so
RGVjb2RlciYsIFN0cnVjdHVyZSosIGNvbnN0IENhY2hlZENvZGVCbG9jazxDb2RlQmxvY2tUeXBl
PiYpOwotCiAgICAgflVubGlua2VkQ29kZUJsb2NrKCk7CiAKICAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiB2bSkKQEAgLTM4NSw5ICszNzgsNiBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBCeXRlY29kZVJld3JpdGVyOwogICAgIGZyaWVuZCBjbGFzcyBCeXRlY29kZUdlbmVyYXRvcjsK
IAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Ci0gICAgZnJpZW5kIGNsYXNz
IENhY2hlZENvZGVCbG9jazsKLQogICAgIHZvaWQgYXBwbHlNb2RpZmljYXRpb24oQnl0ZWNvZGVS
ZXdyaXRlciYsIEluc3RydWN0aW9uU3RyZWFtV3JpdGVyJik7CiAKICAgICB2b2lkIGNyZWF0ZVJh
cmVEYXRhSWZOZWNlc3NhcnkoKQpAQCAtNDU0LDcgKzQ0NCw3IEBAIHByaXZhdGU6CiAgICAgVmVj
dG9yPElkZW50aWZpZXI+IG1faWRlbnRpZmllcnM7CiAgICAgVmVjdG9yPEJpdFZlY3Rvcj4gbV9i
aXRWZWN0b3JzOwogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+IG1fY29uc3RhbnRS
ZWdpc3RlcnM7Ci0gICAgVmVjdG9yPENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiBtX2NvbnN0
YW50SWRlbnRpZmllclNldHM7CisgICAgVmVjdG9yPENvbnN0YW50SW5kZW50aWZpZXJTZXRFbnRy
eT4gbV9jb25zdGFudElkZW50aWZpZXJTZXRzOwogICAgIFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24+IG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOwogICAgIHR5cGVk
ZWYgVmVjdG9yPFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4+IEZ1bmN0
aW9uRXhwcmVzc2lvblZlY3RvcjsKICAgICBGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3IgbV9mdW5j
dGlvbkRlY2xzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
RXZhbENvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZEV2YWxDb2RlQmxvY2suaAkocmV2aXNpb24gMjQwMjIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRXZhbENvZGVCbG9jay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw4ICsyOSw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBDYWNo
ZWRFdmFsQ29kZUJsb2NrOwotCiBjbGFzcyBVbmxpbmtlZEV2YWxDb2RlQmxvY2sgZmluYWwgOiBw
dWJsaWMgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgewogcHVibGljOgogICAgIHR5cGVkZWYgVW5s
aW5rZWRHbG9iYWxDb2RlQmxvY2sgQmFzZTsKQEAgLTYxLDE1ICs1OSwxMSBAQCBwdWJsaWM6CiAg
ICAgICAgIG1fZnVuY3Rpb25Ib2lzdGluZ0NhbmRpZGF0ZXMgPSBXVEZNb3ZlKGZ1bmN0aW9uSG9p
c3RpbmdDYW5kaWRhdGVzKTsKICAgICB9CiBwcml2YXRlOgotICAgIGZyaWVuZCBDYWNoZWRFdmFs
Q29kZUJsb2NrOwotCiAgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBEZWJ1Z2dlck1vZGUgZGVi
dWdnZXJNb2RlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgRXZhbENvZGUsIGluZm8s
IGRlYnVnZ2VyTW9kZSkKICAgICB7CiAgICAgfQogCi0gICAgVW5saW5rZWRFdmFsQ29kZUJsb2Nr
KERlY29kZXImLCBjb25zdCBDYWNoZWRFdmFsQ29kZUJsb2NrJik7Ci0KICAgICBWZWN0b3I8SWRl
bnRpZmllciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fdmFyaWFibGVzOwogICAgIFZlY3Rv
cjxJZGVudGlmaWVyLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9mdW5jdGlvbkhvaXN0aW5n
Q2FuZGlkYXRlczsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jay5oCShyZXZpc2lvbiAyNDAyMjAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkNvZGVC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw2IEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCi1jbGFzcyBDYWNoZWRGdW5jdGlvbkNvZGVCbG9jazsKLQogY2xhc3MgVW5saW5rZWRGdW5j
dGlvbkNvZGVCbG9jayBmaW5hbCA6IHB1YmxpYyBVbmxpbmtlZENvZGVCbG9jayB7CiBwdWJsaWM6
CiAgICAgdHlwZWRlZiBVbmxpbmtlZENvZGVCbG9jayBCYXNlOwpAQCAtNDYsMTQgKzQ0LDEwIEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiBwcml2YXRlOgot
ICAgIGZyaWVuZCBDYWNoZWRGdW5jdGlvbkNvZGVCbG9jazsKLQogICAgIFVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUgY29kZVR5
cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2Rl
KQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgY29kZVR5cGUsIGluZm8sIGRlYnVnZ2Vy
TW9kZSkKICAgICB7CiAgICAgfQotCi0gICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayhEZWNv
ZGVyJiwgY29uc3QgQ2FjaGVkRnVuY3Rpb25Db2RlQmxvY2smKTsKICAgICAKIHB1YmxpYzoKICAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
LmgJKHJldmlzaW9uIDI0MDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMyArMzks
MTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIERlY29kZXI7CiBjbGFzcyBGdW5jdGlv
bk1ldGFkYXRhTm9kZTsKIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKIGNsYXNzIFBhcnNlckVy
cm9yOwogY2xhc3MgU291cmNlUHJvdmlkZXI7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrOwotY2xhc3MgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOwogCiBlbnVtIFVubGlua2VkRnVu
Y3Rpb25LaW5kIHsKICAgICBVbmxpbmtlZE5vcm1hbEZ1bmN0aW9uLApAQCAtNTYsNyArNTQsNiBA
QCBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSBmaW5hbCA6CiBwdWJsaWM6CiAgICAg
ZnJpZW5kIGNsYXNzIENvZGVDYWNoZTsKICAgICBmcmllbmQgY2xhc3MgVk07Ci0gICAgZnJpZW5k
IENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTsKIAogICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CiAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwpAQCAtMTUwLDcgKzE0Nyw2IEBAIHB1YmxpYzoK
IAogcHJpdmF0ZToKICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShWTSosIFN0cnVjdHVy
ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBGdW5jdGlvbk1ldGFkYXRhTm9kZSosIFVubGlua2VkRnVu
Y3Rpb25LaW5kLCBDb25zdHJ1Y3RBYmlsaXR5LCBKU1BhcnNlclNjcmlwdE1vZGUsIFZhcmlhYmxl
RW52aXJvbm1lbnQmLCAgSlNDOjpEZXJpdmVkQ29udGV4dFR5cGUsIGJvb2wgaXNCdWlsdGluRGVm
YXVsdENsYXNzQ29uc3RydWN0b3IpOwotICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKERl
Y29kZXImLCBWYXJpYWJsZUVudmlyb25tZW50JiwgY29uc3QgQ2FjaGVkRnVuY3Rpb25FeGVjdXRh
YmxlJik7CiAKICAgICB1bnNpZ25lZCBtX2ZpcnN0TGluZU9mZnNldDsKICAgICB1bnNpZ25lZCBt
X2xpbmVDb3VudDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZEdsb2JhbENvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZEdsb2JhbENvZGVCbG9jay5oCShyZXZpc2lvbiAyNDAyMjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRHbG9iYWxDb2RlQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMzgsMTIgKzM4LDYgQEAgcHJvdGVjdGVkOgogICAgICAgICA6IEJh
c2Uodm0sIHN0cnVjdHVyZSwgY29kZVR5cGUsIGluZm8sIGRlYnVnZ2VyTW9kZSkKICAgICB7CiAg
ICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KLSAgICBVbmxpbmtl
ZEdsb2JhbENvZGVCbG9jayhEZWNvZGVyJiBkZWNvZGVyLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
Y29uc3QgQ2FjaGVkQ29kZUJsb2NrPENvZGVCbG9ja1R5cGU+JiBjYWNoZWRDb2RlQmxvY2spCi0g
ICAgICAgIDogQmFzZShkZWNvZGVyLCBzdHJ1Y3R1cmUsIGNhY2hlZENvZGVCbG9jaykKLSAgICB7
Ci0gICAgfQogfTsKIAogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkTWV0YWRhdGFUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAkocmV2aXNpb24gMjQwMjIwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw2IEBAIGNsYXNzIE1ldGFkYXRhVGFibGU7CiBjbGFz
cyBVbmxpbmtlZE1ldGFkYXRhVGFibGUgewogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7CiAgICAgZnJpZW5kIGNsYXNzIE1ldGFkYXRhVGFibGU7Ci0gICAgZnJpZW5kIGNs
YXNzIENhY2hlZE1ldGFkYXRhVGFibGU7CiAKIHB1YmxpYzoKICAgICBzdHJ1Y3QgTGlua2luZ0Rh
dGEgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTW9kdWxl
UHJvZ3JhbUNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suaAkocmV2aXNpb24gMjQwMjIw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTW9kdWxlUHJvZ3Jh
bUNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw5ICsyOSw2IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCi1jbGFzcyBEZWNvZGVyOwotY2xhc3MgQ2FjaGVkTW9kdWxlQ29kZUJsb2NrOwot
CiBjbGFzcyBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sgZmluYWwgOiBwdWJsaWMgVW5s
aW5rZWRHbG9iYWxDb2RlQmxvY2sgewogcHVibGljOgogICAgIHR5cGVkZWYgVW5saW5rZWRHbG9i
YWxDb2RlQmxvY2sgQmFzZTsKQEAgLTc3LDE1ICs3NCwxMSBAQCBwdWJsaWM6CiAgICAgfQogCiBw
cml2YXRlOgotICAgIGZyaWVuZCBDYWNoZWRNb2R1bGVDb2RlQmxvY2s7Ci0KICAgICBVbmxpbmtl
ZE1vZHVsZVByb2dyYW1Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29u
c3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUpCiAgICAg
ICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBNb2R1bGVDb2RlLCBpbmZvLCBkZWJ1Z2dlck1vZGUp
CiAgICAgewogICAgIH0KIAotICAgIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayhEZWNv
ZGVyJiwgY29uc3QgQ2FjaGVkTW9kdWxlQ29kZUJsb2NrJik7Ci0KICAgICBpbnQgbV9tb2R1bGVF
bnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldCB7IDAgfTsKIAogcHVi
bGljOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkUHJvZ3Jh
bUNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaAkocmV2aXNpb24gMjQwMjIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBD
YWNoZWRQcm9ncmFtQ29kZUJsb2NrOwotCiBjbGFzcyBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sg
ZmluYWwgOiBwdWJsaWMgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgewogcHVibGljOgogICAgIHR5
cGVkZWYgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgQmFzZTsKQEAgLTUyLDE1ICs1MCwxMSBAQCBw
dWJsaWM6CiAgICAgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbERlY2xhcmF0aW9u
cygpIGNvbnN0IHsgcmV0dXJuIG1fbGV4aWNhbERlY2xhcmF0aW9uczsgfQogCiBwcml2YXRlOgot
ICAgIGZyaWVuZCBDYWNoZWRQcm9ncmFtQ29kZUJsb2NrOwotCiAgICAgVW5saW5rZWRQcm9ncmFt
Q29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJ
bmZvJiBpbmZvLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQogICAgICAgICA6IEJhc2Uodm0s
IHN0cnVjdHVyZSwgR2xvYmFsQ29kZSwgaW5mbywgZGVidWdnZXJNb2RlKQogICAgIHsKICAgICB9
CiAKLSAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2soRGVjb2RlciYsIGNvbnN0IENhY2hlZFBy
b2dyYW1Db2RlQmxvY2smKTsKLQogICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgbV92YXJEZWNsYXJh
dGlvbnM7CiAgICAgVmFyaWFibGVFbnZpcm9ubWVudCBtX2xleGljYWxEZWNsYXJhdGlvbnM7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcAkocmV2aXNpb24gMjQwMjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNiBAQAog
I2luY2x1ZGUgIkNhbGxGcmFtZUNsb3N1cmUuaCIKICNpbmNsdWRlICJDYXRjaFNjb3BlLmgiCiAj
aW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiQ29kZUNhY2hlLmgiCiAjaW5jbHVkZSAi
RGlyZWN0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkRlYnVnZ2Vy
LmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGUuaAkocmV2
aXNpb24gMjQwMjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDggKzMzLDYgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgY2xhc3MgU291cmNlQ29kZSA6IHB1YmxpYyBVbmxpbmtlZFNvdXJjZUNvZGUgewotICAgICAg
ICBmcmllbmQgY2xhc3MgQ2FjaGVkU291cmNlQ29kZTsKLQogICAgIHB1YmxpYzoKICAgICAgICAg
U291cmNlQ29kZSgpCiAgICAgICAgICAgICA6IFVubGlua2VkU291cmNlQ29kZSgpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGVLZXkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGVLZXkuaAkocmV2aXNpb24g
MjQwMjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2RlS2V5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDYgQEAgZW51bSBjbGFzcyBUeXBlUHJvZmlsZXJF
bmFibGVkIHsgTm8sIFllcwogZW51bSBjbGFzcyBDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZCB7
IE5vLCBZZXMgfTsKIAogY2xhc3MgU291cmNlQ29kZUZsYWdzIHsKLSAgICBmcmllbmQgY2xhc3Mg
Q2FjaGVkU291cmNlQ29kZUtleTsKLQogcHVibGljOgogICAgIFNvdXJjZUNvZGVGbGFncygpID0g
ZGVmYXVsdDsKIApAQCAtNzIsOCArNzAsNiBAQCBwcml2YXRlOgogfTsKIAogY2xhc3MgU291cmNl
Q29kZUtleSB7Ci0gICAgZnJpZW5kIGNsYXNzIENhY2hlZFNvdXJjZUNvZGVLZXk7Ci0KIHB1Ymxp
YzoKICAgICBTb3VyY2VDb2RlS2V5KCkKICAgICB7CkBAIC0xMTgsMTEgKzExNCw2IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICYmIHN0cmluZygpID09IG90aGVyLnN0cmluZygpOwogICAgIH0KIAot
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTb3VyY2VDb2RlS2V5JiBvdGhlcikgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKLSAgICB9Ci0KICAgICBzdHJ1
Y3QgSGFzaCB7CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFNvdXJjZUNvZGVL
ZXkmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQogICAgICAgICBzdGF0aWMgYm9vbCBlcXVh
bChjb25zdCBTb3VyY2VDb2RlS2V5JiBhLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBiKSB7IHJldHVy
biBhID09IGI7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVW5saW5rZWRT
b3VyY2VDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9V
bmxpbmtlZFNvdXJjZUNvZGUuaAkocmV2aXNpb24gMjQwMjIwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9VbmxpbmtlZFNvdXJjZUNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzUs
OSArMzUsNiBAQAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBVbmxpbmtlZFNvdXJjZUNv
ZGUgewotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTb3VyY2VUeXBlPgotICAgICAgICBmcmll
bmQgY2xhc3MgQ2FjaGVkVW5saW5rZWRTb3VyY2VDb2RlU2hhcGU7Ci0KICAgICBwdWJsaWM6CiAg
ICAgICAgIFVubGlua2VkU291cmNlQ29kZSgpCiAgICAgICAgICAgICA6IG1fcHJvdmlkZXIoMCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVmFyaWFibGVFbnZpcm9ubWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVmFyaWFibGVFbnZp
cm9ubWVudC5oCShyZXZpc2lvbiAyNDAyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDggKzExNiw2
IEBAIHB1YmxpYzoKICAgICBib29sIGlzRXZlcnl0aGluZ0NhcHR1cmVkKCkgY29uc3QgeyByZXR1
cm4gbV9pc0V2ZXJ5dGhpbmdDYXB0dXJlZDsgfQogCiBwcml2YXRlOgotICAgIGZyaWVuZCBjbGFz
cyBDYWNoZWRWYXJpYWJsZUVudmlyb25tZW50OwotCiAgICAgTWFwIG1fbWFwOwogICAgIGJvb2wg
bV9pc0V2ZXJ5dGhpbmdDYXB0dXJlZCB7IGZhbHNlIH07CiB9OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAkocmV2aXNpb24gMjQwMjIwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDIwMjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDYWNoZWRUeXBl
cy5oIgotCi0jaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCi0jaW5jbHVkZSAi
SlNDYXN0LmgiCi0jaW5jbHVkZSAiSlNJbW11dGFibGVCdXR0ZXJmbHkuaCIKLSNpbmNsdWRlICJK
U1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5oIgotI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50c1Rh
YmxlLmgiCi0jaW5jbHVkZSAiU291cmNlQ29kZUtleS5oIgotI2luY2x1ZGUgIlVubGlua2VkRXZh
bENvZGVCbG9jay5oIgotI2luY2x1ZGUgIlVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suaCIKLSNp
bmNsdWRlICJVbmxpbmtlZE1ldGFkYXRhVGFibGVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiVW5saW5r
ZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiVW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrLmgiCi0jaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KLSNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0
b21pY1N0cmluZ0ltcGwuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBULCB0eXBlbmFtZSA9IHZvaWQ+Ci1zdHJ1Y3QgU291cmNlVHlwZUltcGwgewotICAgIHVzaW5n
IHR5cGUgPSBUOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBTb3VyY2VUeXBl
SW1wbDxULCBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX2Z1bmRhbWVudGFsPFQ+Ojp2YWx1ZSAm
JiAhc3RkOjppc19zYW1lPHR5cGVuYW1lIFQ6OlNvdXJjZVR5cGVfLCB2b2lkPjo6dmFsdWU+PiB7
Ci0gICAgdXNpbmcgdHlwZSA9IHR5cGVuYW1lIFQ6OlNvdXJjZVR5cGVfOwotCi19OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotdXNpbmcgU291cmNlVHlwZSA9IHR5cGVuYW1lIFNvdXJjZVR5cGVJ
bXBsPFQ+Ojp0eXBlOwotCi1jbGFzcyBFbmNvZGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShFbmNvZGVyKTsKLSAgICBXVEZfRk9SQklEX0hFQVBfQUxMT0NBVElPTjsKLQotcHVibGljOgot
ICAgIGNsYXNzIEFsbG9jYXRpb24gewotICAgICAgICBmcmllbmQgY2xhc3MgRW5jb2RlcjsKLQot
ICAgIHB1YmxpYzoKLSAgICAgICAgdWludDhfdCogYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9i
dWZmZXI7IH0KLSAgICAgICAgcHRyZGlmZl90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zm
c2V0OyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBBbGxvY2F0aW9uKHVpbnQ4X3QqIGJ1ZmZl
ciwgcHRyZGlmZl90IG9mZnNldCkKLSAgICAgICAgICAgIDogbV9idWZmZXIoYnVmZmVyKQotICAg
ICAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAg
ICAgIHVpbnQ4X3QqIG1fYnVmZmVyOwotICAgICAgICBwdHJkaWZmX3QgbV9vZmZzZXQ7Ci0gICAg
fTsKLQotICAgIEVuY29kZXIoVk0mIHZtKQotICAgICAgICA6IG1fdm0odm0pCi0gICAgICAgICwg
bV9iYXNlT2Zmc2V0KDApCi0gICAgICAgICwgbV9jdXJyZW50UGFnZShudWxscHRyKQotICAgIHsK
LSAgICAgICAgYWxsb2NhdGVOZXdQYWdlKCk7Ci0gICAgfQotCi0gICAgVk0mIHZtKCkgeyByZXR1
cm4gbV92bTsgfQotCi0gICAgQWxsb2NhdGlvbiBtYWxsb2ModW5zaWduZWQgc2l6ZSkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChzaXplKTsKLSAgICAgICAgcHRyZGlmZl90IG9mZnNldDsKLSAgICAg
ICAgaWYgKG1fY3VycmVudFBhZ2UtPm1hbGxvYyhzaXplLCBvZmZzZXQpKQotICAgICAgICAgICAg
cmV0dXJuIEFsbG9jYXRpb24geyBtX2N1cnJlbnRQYWdlLT5idWZmZXIoKSArIG9mZnNldCwgbV9i
YXNlT2Zmc2V0ICsgb2Zmc2V0IH07Ci0gICAgICAgIGFsbG9jYXRlTmV3UGFnZShzaXplKTsKLSAg
ICAgICAgcmV0dXJuIG1hbGxvYyhzaXplKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotICAgIFQqIG1hbGxvYygpCi0gICAgewotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxUKj4obWFsbG9jKHNpemVvZihUKSkuYnVmZmVyKCkpOwotICAgIH0KLQotICAgIHB0cmRp
ZmZfdCBvZmZzZXRPZihjb25zdCB2b2lkKiBhZGRyZXNzKQotICAgIHsKLSAgICAgICAgcHRyZGlm
Zl90IG9mZnNldDsKLSAgICAgICAgcHRyZGlmZl90IGJhc2VPZmZzZXQgPSAwOwotICAgICAgICBm
b3IgKGNvbnN0IGF1dG8mIHBhZ2UgOiBtX3BhZ2VzKSB7Ci0gICAgICAgICAgICBpZiAocGFnZS5n
ZXRPZmZzZXQoYWRkcmVzcywgb2Zmc2V0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYmFzZU9m
ZnNldCArIG9mZnNldDsKLSAgICAgICAgICAgIGJhc2VPZmZzZXQgKz0gcGFnZS5zaXplKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotCi0gICAgdm9pZCBjYWNoZVB0cihjb25zdCB2b2lkKiBwdHIsIHB0
cmRpZmZfdCBvZmZzZXQpCi0gICAgewotICAgICAgICBtX3B0clRvT2Zmc2V0TWFwLmFkZChwdHIs
IG9mZnNldCk7Ci0gICAgfQotCi0gICAgV1RGOjpPcHRpb25hbDxwdHJkaWZmX3Q+IG9mZnNldEZv
clB0cihjb25zdCB2b2lkKiBwdHIpCi0gICAgewotICAgICAgICBhdXRvIGl0ID0gbV9wdHJUb09m
ZnNldE1hcC5maW5kKHB0cik7Ci0gICAgICAgIGlmIChpdCA9PSBtX3B0clRvT2Zmc2V0TWFwLmVu
ZCgpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIHsg
aXQtPnZhbHVlIH07Ci0gICAgfQotCi0gICAgc3RkOjpwYWlyPE1hbGxvY1B0cjx1aW50OF90Piwg
c2l6ZV90PiByZWxlYXNlKCkKLSAgICB7Ci0gICAgICAgIHNpemVfdCBzaXplID0gbV9iYXNlT2Zm
c2V0ICsgbV9jdXJyZW50UGFnZS0+c2l6ZSgpOwotICAgICAgICBNYWxsb2NQdHI8dWludDhfdD4g
YnVmZmVyID0gTWFsbG9jUHRyPHVpbnQ4X3Q+OjptYWxsb2Moc2l6ZSk7Ci0gICAgICAgIHVuc2ln
bmVkIG9mZnNldCA9IDA7Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYgcGFnZSA6IG1fcGFnZXMp
IHsKLSAgICAgICAgICAgIG1lbWNweShidWZmZXIuZ2V0KCkgKyBvZmZzZXQsIHBhZ2UuYnVmZmVy
KCksIHBhZ2Uuc2l6ZSgpKTsKLSAgICAgICAgICAgIG9mZnNldCArPSBwYWdlLnNpemUoKTsKLSAg
ICAgICAgfQotICAgICAgICBSRUxFQVNFX0FTU0VSVChvZmZzZXQgPT0gc2l6ZSk7Ci0gICAgICAg
IHJldHVybiB7IFdURk1vdmUoYnVmZmVyKSwgc2l6ZSB9OwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICBjbGFzcyBQYWdlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFBhZ2Uoc2l6ZV90IHNpemUpCi0g
ICAgICAgICAgICA6IG1fb2Zmc2V0KDApCi0gICAgICAgICAgICAsIG1fY2FwYWNpdHkoc2l6ZSkK
LSAgICAgICAgewotICAgICAgICAgICAgbV9idWZmZXIgPSBNYWxsb2NQdHI8dWludDhfdD46Om1h
bGxvYyhzaXplKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgbWFsbG9jKHNpemVfdCBzaXpl
LCBwdHJkaWZmX3QmIHJlc3VsdCkKLSAgICAgICAgewotICAgICAgICAgICAgc2l6ZV90IGFsaWdu
bWVudCA9IHN0ZDo6bWluKGFsaWdub2Yoc3RkOjptYXhfYWxpZ25fdCksIHN0YXRpY19jYXN0PHNp
emVfdD4oV1RGOjpyb3VuZFVwVG9Qb3dlck9mVHdvKHNpemUpKSk7Ci0gICAgICAgICAgICBwdHJk
aWZmX3Qgb2Zmc2V0ID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKGFsaWdubWVudCwgbV9vZmZz
ZXQpOwotICAgICAgICAgICAgc2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihhbGlnbm1l
bnQsIHNpemUpOwotICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4ob2Zmc2V0ICsg
c2l6ZSkgPiBtX2NhcGFjaXR5KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICAgICAgICAgcmVzdWx0ID0gb2Zmc2V0OwotICAgICAgICAgICAgbV9vZmZzZXQgPSBvZmZzZXQg
KyBzaXplOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICB1
aW50OF90KiBidWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5nZXQoKTsgfQotICAgICAg
ICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4obV9vZmZz
ZXQpOyB9Ci0KLSAgICAgICAgYm9vbCBnZXRPZmZzZXQoY29uc3Qgdm9pZCogYWRkcmVzcywgcHRy
ZGlmZl90JiByZXN1bHQpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4
X3QqIGFkZHIgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYWRkcmVzcyk7Ci0gICAgICAg
ICAgICBpZiAoYWRkciA+PSBtX2J1ZmZlci5nZXQoKSAmJiBhZGRyIDwgbV9idWZmZXIuZ2V0KCkg
KyBtX29mZnNldCkgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGFkZHIgLSBtX2J1ZmZlci5n
ZXQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAg
TWFsbG9jUHRyPHVpbnQ4X3Q+IG1fYnVmZmVyOwotICAgICAgICBwdHJkaWZmX3QgbV9vZmZzZXQ7
Ci0gICAgICAgIHNpemVfdCBtX2NhcGFjaXR5OwotICAgIH07Ci0KLSAgICB2b2lkIGFsbG9jYXRl
TmV3UGFnZShzaXplX3Qgc2l6ZSA9IDApCi0gICAgewotICAgICAgICBzdGF0aWMgc2l6ZV90IG1p
blBhZ2VTaXplID0gV1RGOjpwYWdlU2l6ZSgpOwotICAgICAgICBpZiAobV9jdXJyZW50UGFnZSkK
LSAgICAgICAgICAgIG1fYmFzZU9mZnNldCArPSBtX2N1cnJlbnRQYWdlLT5zaXplKCk7Ci0gICAg
ICAgIGlmIChzaXplIDwgbWluUGFnZVNpemUpCi0gICAgICAgICAgICBzaXplID0gbWluUGFnZVNp
emU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRp
cGxlT2YobWluUGFnZVNpemUsIHNpemUpOwotICAgICAgICBtX3BhZ2VzLmFwcGVuZChQYWdlIHsg
c2l6ZSB9KTsKLSAgICAgICAgbV9jdXJyZW50UGFnZSA9ICZtX3BhZ2VzLmxhc3QoKTsKLSAgICB9
Ci0KLSAgICBWTSYgbV92bTsKLSAgICBwdHJkaWZmX3QgbV9iYXNlT2Zmc2V0OwotICAgIFBhZ2Uq
IG1fY3VycmVudFBhZ2U7Ci0gICAgVmVjdG9yPFBhZ2U+IG1fcGFnZXM7Ci0gICAgSGFzaE1hcDxj
b25zdCB2b2lkKiwgcHRyZGlmZl90PiBtX3B0clRvT2Zmc2V0TWFwOwotfTsKLQotY2xhc3MgRGVj
b2RlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGVjb2Rlcik7Ci0gICAgV1RGX0ZPUkJJ
RF9IRUFQX0FMTE9DQVRJT047Ci0KLXB1YmxpYzoKLSAgICBEZWNvZGVyKFZNJiB2bSwgY29uc3Qg
dm9pZCogYmFzZUFkZHJlc3MsIHNpemVfdCBzaXplKQotICAgICAgICA6IG1fdm0odm0pCi0gICAg
ICAgICwgbV9iYXNlQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihiYXNl
QWRkcmVzcykpCi0jaWZuZGVmIE5ERUJVRwotICAgICAgICAsIG1fc2l6ZShzaXplKQotI2VuZGlm
Ci0gICAgewotICAgICAgICBVTlVTRURfUEFSQU0oc2l6ZSk7Ci0gICAgfQotCi0gICAgfkRlY29k
ZXIoKQotICAgIHsKLSAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9maW5hbGl6ZXJzKQotICAg
ICAgICAgICAgcGFpci52YWx1ZSgpOwotICAgIH0KLQotICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1f
dm07IH0KLQotICAgIHB0cmRpZmZfdCBvZmZzZXRPZihjb25zdCB2b2lkKiBwdHIpCi0gICAgewot
ICAgICAgICBjb25zdCB1aW50OF90KiBhZGRyID0gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+
KHB0cik7Ci0gICAgICAgIEFTU0VSVChhZGRyID49IG1fYmFzZUFkZHJlc3MgJiYgYWRkciA8IG1f
YmFzZUFkZHJlc3MgKyBtX3NpemUpOwotICAgICAgICByZXR1cm4gYWRkciAtIG1fYmFzZUFkZHJl
c3M7Ci0gICAgfQotCi0gICAgdm9pZCBjYWNoZU9mZnNldChwdHJkaWZmX3Qgb2Zmc2V0LCB2b2lk
KiBwdHIpCi0gICAgewotICAgICAgICBtX29mZnNldFRvUHRyTWFwLmFkZChvZmZzZXQsIHB0cik7
Ci0gICAgfQotCi0gICAgV1RGOjpPcHRpb25hbDx2b2lkKj4gcHRyRm9yT2Zmc2V0KHB0cmRpZmZf
dCBvZmZzZXQpCi0gICAgewotICAgICAgICBhdXRvIGl0ID0gbV9vZmZzZXRUb1B0ck1hcC5maW5k
KG9mZnNldCk7Ci0gICAgICAgIGlmIChpdCA9PSBtX29mZnNldFRvUHRyTWFwLmVuZCgpKQotICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIHsgaXQtPnZhbHVl
IH07Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGFk
ZEZpbmFsaXplcihwdHJkaWZmX3Qgb2Zmc2V0LCBjb25zdCBGdW5jdG9yJiBmbikKLSAgICB7Ci0g
ICAgICAgIG1fZmluYWxpemVycy5hZGQob2Zmc2V0LCBmbik7Ci0gICAgfQotCi1wcml2YXRlOgot
ICAgIFZNJiBtX3ZtOwotICAgIGNvbnN0IHVpbnQ4X3QqIG1fYmFzZUFkZHJlc3M7Ci0jaWZuZGVm
IE5ERUJVRwotICAgIHNpemVfdCBtX3NpemU7Ci0jZW5kaWYKLSAgICBIYXNoTWFwPHB0cmRpZmZf
dCwgdm9pZCo+IG1fb2Zmc2V0VG9QdHJNYXA7Ci0gICAgSGFzaE1hcDxwdHJkaWZmX3QsIHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPj4gbV9maW5hbGl6ZXJzOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLXN0YXRpYyBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxULCBTb3VyY2VUeXBlPFQ+
Pjo6dmFsdWU+IGVuY29kZShFbmNvZGVyJiwgVCYgZHN0LCBjb25zdCBTb3VyY2VUeXBlPFQ+JiBz
cmMpCi17Ci0gICAgZHN0ID0gc3JjOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RhdGlj
IHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZTxULCBTb3VyY2VUeXBlPFQ+Pjo6dmFsdWU+
IGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBUJiBkc3QsIGNvbnN0IFNvdXJjZVR5cGU8VD4mIHNy
YykKLXsKLSAgICBkc3QuZW5jb2RlKGVuY29kZXIsIHNyYyk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3M+Ci1zdGF0aWMgc3RkOjplbmFibGVfaWZfdDxzdGQ6Omlz
X3NhbWU8VCwgU291cmNlVHlwZTxUPj46OnZhbHVlPiBkZWNvZGUoRGVjb2RlciYsIGNvbnN0IFQm
IHNyYywgU291cmNlVHlwZTxUPiYgZHN0LCBBcmdzLi4uKQotewotICAgIGRzdCA9IHNyYzsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJncz4KLXN0YXRpYyBzdGQ6OmVu
YWJsZV9pZl90PCFzdGQ6OmlzX3NhbWU8VCwgU291cmNlVHlwZTxUPj46OnZhbHVlPiBkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgY29uc3QgVCYgc3JjLCBTb3VyY2VUeXBlPFQ+JiBkc3QsIEFyZ3Mu
Li4gYXJncykKLXsKLSAgICBzcmMuZGVjb2RlKGRlY29kZXIsIGRzdCwgYXJncy4uLik7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3Nh
bWU8VCwgU291cmNlVHlwZTxUPj46OnZhbHVlLCBUPiBkZWNvZGUoRGVjb2RlciYsIFQgc3JjKQot
ewotICAgIHJldHVybiBzcmM7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgc3Rk
OjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lPFQsIFNvdXJjZVR5cGU8VD4+Ojp2YWx1ZSwgU291
cmNlVHlwZTxUPj4mJiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgY29uc3QgVCYgc3JjKQotewot
ICAgIHJldHVybiBzcmMuZGVjb2RlKGRlY29kZXIpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBT
b3VyY2U+Ci1jbGFzcyBDYWNoZWRPYmplY3QgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENh
Y2hlZE9iamVjdDxTb3VyY2U+KTsKLSAgICBXVEZfRk9SQklEX0hFQVBfQUxMT0NBVElPTjsKLQot
cHVibGljOgotICAgIHVzaW5nIFNvdXJjZVR5cGVfID0gU291cmNlOwotfTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgU291cmNlPgotY2xhc3MgVmFyaWFibGVMZW5ndGhPYmplY3QgOiBwdWJsaWMgQ2Fj
aGVkT2JqZWN0PFNvdXJjZT4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZT4KLSAg
ICBmcmllbmQgc3RydWN0IENhY2hlZFB0cjsKLQotcHJvdGVjdGVkOgotICAgIGNvbnN0IHVpbnQ4
X3QqIGJ1ZmZlcigpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV9vZmZzZXQgIT0gc19p
bnZhbGlkT2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KHRoaXMpICsgbV9vZmZzZXQ7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLSAgICBjb25zdCBUKiBidWZmZXIoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KGJ1ZmZlcigpKTsKLSAgICB9Ci0KLSAgICB1aW50OF90
KiBhbGxvY2F0ZShFbmNvZGVyJiBlbmNvZGVyLCBzaXplX3Qgc2l6ZSkKLSAgICB7Ci0gICAgICAg
IGlmICghc2l6ZSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHB0cmRp
ZmZfdCBvZmZzZXRPZmZzZXQgPSBlbmNvZGVyLm9mZnNldE9mKCZtX29mZnNldCk7Ci0gICAgICAg
IGF1dG8gcmVzdWx0ID0gZW5jb2Rlci5tYWxsb2Moc2l6ZSk7Ci0gICAgICAgIG1fb2Zmc2V0ID0g
cmVzdWx0Lm9mZnNldCgpIC0gb2Zmc2V0T2Zmc2V0OwotICAgICAgICByZXR1cm4gcmVzdWx0LmJ1
ZmZlcigpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgVCogYWxsb2Nh
dGUoRW5jb2RlciYgZW5jb2RlciwgdW5zaWduZWQgc2l6ZSA9IDEpCi0gICAgewotICAgICAgICB1
aW50OF90KiByZXN1bHQgPSBhbGxvY2F0ZShlbmNvZGVyLCBzaXplb2YoVCkgKiBzaXplKTsKLSAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHJlc3VsdCk7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIGNvbnN0ZXhwciBzdGF0aWMgcHRyZGlmZl90IHNfaW52YWxpZE9mZnNldCA9IHN0
ZDo6bnVtZXJpY19saW1pdHM8cHRyZGlmZl90Pjo6bWF4KCk7Ci0KLSAgICBwdHJkaWZmX3QgbV9v
ZmZzZXQgeyBzX2ludmFsaWRPZmZzZXQgfTsKLQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgU291cmNlID0gU291cmNlVHlwZTxUPj4KLWNsYXNzIENhY2hlZFB0ciA6IHB1Ymxp
YyBWYXJpYWJsZUxlbmd0aE9iamVjdDxTb3VyY2UqPiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUs
IHR5cGVuYW1lPgotICAgIGZyaWVuZCBzdHJ1Y3QgQ2FjaGVkUmVmUHRyOwotCi1wdWJsaWM6Ci0g
ICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU291cmNlKiBzcmMpCi0gICAg
ewotICAgICAgICBtX2lzRW1wdHkgPSAhc3JjOwotICAgICAgICBpZiAobV9pc0VtcHR5KQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChXVEY6Ok9wdGlvbmFsPHB0cmRpZmZfdD4g
b2Zmc2V0ID0gZW5jb2Rlci5vZmZzZXRGb3JQdHIoc3JjKSkgewotICAgICAgICAgICAgdGhpcy0+
bV9vZmZzZXQgPSAqb2Zmc2V0IC0gZW5jb2Rlci5vZmZzZXRPZigmdGhpcy0+bV9vZmZzZXQpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgVCogY2FjaGVkT2JqZWN0
ID0gdGhpcy0+dGVtcGxhdGUgYWxsb2NhdGU8VD4oZW5jb2Rlcik7Ci0gICAgICAgIGNhY2hlZE9i
amVjdC0+ZW5jb2RlKGVuY29kZXIsICpzcmMpOwotICAgICAgICBlbmNvZGVyLmNhY2hlUHRyKHNy
YywgZW5jb2Rlci5vZmZzZXRPZihjYWNoZWRPYmplY3QpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZS4uLiBBcmdzPgotICAgIFNvdXJjZSogZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IEFyZ3MuLi4gYXJncykgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChtX2lzRW1wdHkpCi0gICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBwdHJkaWZmX3QgYnVmZmVyT2Zmc2V0
ID0gZGVjb2Rlci5vZmZzZXRPZih0aGlzLT5idWZmZXIoKSk7Ci0gICAgICAgIGlmIChXVEY6Ok9w
dGlvbmFsPHZvaWQqPiBwdHIgPSBkZWNvZGVyLnB0ckZvck9mZnNldChidWZmZXJPZmZzZXQpKQot
ICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U291cmNlKj4oKnB0cik7Ci0KLSAg
ICAgICAgU291cmNlKiBwdHIgPSBnZXQoKS0+ZGVjb2RlKGRlY29kZXIsIGFyZ3MuLi4pOwotICAg
ICAgICBkZWNvZGVyLmNhY2hlT2Zmc2V0KGJ1ZmZlck9mZnNldCwgcHRyKTsKLSAgICAgICAgcmV0
dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBjb25zdCBUKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1
cm4gZ2V0KCk7IH0KLQotcHJpdmF0ZToKLSAgICBjb25zdCBUKiBnZXQoKSBjb25zdAotICAgIHsK
LSAgICAgICAgaWYgKG1faXNFbXB0eSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICByZXR1cm4gdGhpcy0+dGVtcGxhdGUgYnVmZmVyPFQ+KCk7Ci0gICAgfQotCi0gICAgYm9v
bCBtX2lzRW1wdHk7Ci0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFNvdXJj
ZSA9IFNvdXJjZVR5cGU8VD4+Ci1jbGFzcyBDYWNoZWRSZWZQdHIgOiBwdWJsaWMgQ2FjaGVkT2Jq
ZWN0PFJlZlB0cjxTb3VyY2U+PiB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBlbmNvZGUoRW5jb2RlciYg
ZW5jb2RlciwgY29uc3QgU291cmNlKiBzcmMpCi0gICAgewotICAgICAgICBtX3B0ci5lbmNvZGUo
ZW5jb2Rlciwgc3JjKTsKLSAgICB9Ci0KLSAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBSZWZQdHI8U291cmNlPiBzcmMpCi0gICAgewotICAgICAgICBlbmNvZGUoZW5jb2Rl
ciwgc3JjLmdldCgpKTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8U291cmNlPiBkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIFNvdXJjZSogZGVjb2RlZFB0ciA9IG1f
cHRyLmRlY29kZShkZWNvZGVyKTsKLSAgICAgICAgaWYgKCFkZWNvZGVkUHRyKQotICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGRlY29kZXIuYWRkRmluYWxpemVyKGRlY29kZXIu
b2Zmc2V0T2YobV9wdHIuYnVmZmVyKCkpLCBbPV0geyBkZXJlZklmTm90TnVsbChkZWNvZGVkUHRy
KTsgfSk7Ci0gICAgICAgIHJlZklmTm90TnVsbChkZWNvZGVkUHRyKTsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKGRlY29kZWRQdHIpOwotICAgIH0KLQotICAgIHZvaWQgZGVjb2RlKERlY29kZXIm
IGRlY29kZXIsIFJlZlB0cjxTb3VyY2U+JiBzcmMpIGNvbnN0Ci0gICAgewotICAgICAgICBzcmMg
PSBkZWNvZGUoZGVjb2Rlcik7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIENhY2hlZFB0cjxULCBT
b3VyY2U+IG1fcHRyOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgU291cmNl
ID0gU291cmNlVHlwZTxUPj4KLWNsYXNzIENhY2hlZFdyaXRlQmFycmllciA6IHB1YmxpYyBDYWNo
ZWRPYmplY3Q8V3JpdGVCYXJyaWVyPFNvdXJjZT4+IHsKLXB1YmxpYzoKLSAgICB2b2lkIGVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXcml0ZUJhcnJpZXI8U291cmNlPiBzcmMpCi0gICAg
ewotICAgICAgICBtX3B0ci5lbmNvZGUoZW5jb2Rlciwgc3JjLmdldCgpKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXcml0ZUJhcnJpZXI8U291cmNlPiYgc3Jj
LCBjb25zdCBKU0NlbGwqIG93bmVyKSBjb25zdAotICAgIHsKLSAgICAgICAgU291cmNlKiBkZWNv
ZGVkUHRyID0gbV9wdHIuZGVjb2RlKGRlY29kZXIpOwotICAgICAgICBpZiAoZGVjb2RlZFB0cikK
LSAgICAgICAgICAgIHNyYy5zZXQoZGVjb2Rlci52bSgpLCBvd25lciwgZGVjb2RlZFB0cik7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIENhY2hlZFB0cjxULCBTb3VyY2U+IG1fcHRyOwotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IElubGluZUNhcGFjaXR5ID0gMCwgdHlwZW5hbWUg
T3ZlcmZsb3dIYW5kbGVyID0gQ3Jhc2hPbk92ZXJmbG93PgotY2xhc3MgQ2FjaGVkVmVjdG9yIDog
cHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFZlY3RvcjxTb3VyY2VUeXBlPFQ+LCBJbmxpbmVD
YXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPj4gewotcHVibGljOgotICAgIHZvaWQgZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIsIGNvbnN0IFZlY3RvcjxTb3VyY2VUeXBlPFQ+LCBJbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGVyPiYgdmVjdG9yKQotICAgIHsKLSAgICAgICAgbV9zaXplID0gdmVj
dG9yLnNpemUoKTsKLSAgICAgICAgVCogYnVmZmVyID0gdGhpcy0+dGVtcGxhdGUgYWxsb2NhdGU8
VD4oZW5jb2RlciwgbV9zaXplKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
c2l6ZTsgKytpKQotICAgICAgICAgICAgOjpKU0M6OmVuY29kZShlbmNvZGVyLCBidWZmZXJbaV0s
IHZlY3RvcltpXSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KLSAg
ICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBWZWN0b3I8U291cmNlVHlwZTxUPiwgSW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj4mIHZlY3RvciwgQXJncy4uLiBhcmdzKSBjb25z
dAotICAgIHsKLSAgICAgICAgdmVjdG9yLnJlc2l6ZVRvRml0KG1fc2l6ZSk7Ci0gICAgICAgIGNv
bnN0IFQqIGJ1ZmZlciA9IHRoaXMtPnRlbXBsYXRlIGJ1ZmZlcjxUPigpOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zaXplOyArK2kpCi0gICAgICAgICAgICA6OkpTQzo6ZGVj
b2RlKGRlY29kZXIsIGJ1ZmZlcltpXSwgdmVjdG9yW2ldLCBhcmdzLi4uKTsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgdW5zaWduZWQgbV9zaXplOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgRmly
c3QsIHR5cGVuYW1lIFNlY29uZD4KLWNsYXNzIENhY2hlZFBhaXIgOiBwdWJsaWMgQ2FjaGVkT2Jq
ZWN0PHN0ZDo6cGFpcjxTb3VyY2VUeXBlPEZpcnN0PiwgU291cmNlVHlwZTxTZWNvbmQ+Pj4gewot
cHVibGljOgotICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IHN0ZDo6cGFp
cjxTb3VyY2VUeXBlPEZpcnN0PiwgU291cmNlVHlwZTxTZWNvbmQ+PiYgcGFpcikKLSAgICB7Ci0g
ICAgICAgIDo6SlNDOjplbmNvZGUoZW5jb2RlciwgbV9maXJzdCwgcGFpci5maXJzdCk7Ci0gICAg
ICAgIDo6SlNDOjplbmNvZGUoZW5jb2RlciwgbV9zZWNvbmQsIHBhaXIuc2Vjb25kKTsKLSAgICB9
Ci0KLSAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnBhaXI8U291cmNlVHlw
ZTxGaXJzdD4sIFNvdXJjZVR5cGU8U2Vjb25kPj4mIHBhaXIpIGNvbnN0Ci0gICAgewotICAgICAg
ICA6OkpTQzo6ZGVjb2RlKGRlY29kZXIsIG1fZmlyc3QsIHBhaXIuZmlyc3QpOwotICAgICAgICA6
OkpTQzo6ZGVjb2RlKGRlY29kZXIsIG1fc2Vjb25kLCBwYWlyLnNlY29uZCk7Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIEZpcnN0IG1fZmlyc3Q7Ci0gICAgU2Vjb25kIG1fc2Vjb25kOwotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEFyZyA9
IHR5cGVuYW1lIERlZmF1bHRIYXNoPFNvdXJjZVR5cGU8S2V5Pj46Okhhc2gsIHR5cGVuYW1lIEtl
eVRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8U291cmNlVHlwZTxLZXk+PiwgdHlwZW5hbWUgTWFwcGVk
VHJhaXRzQXJnID0gSGFzaFRyYWl0czxTb3VyY2VUeXBlPFZhbHVlPj4+Ci1jbGFzcyBDYWNoZWRI
YXNoTWFwIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PEhhc2hNYXA8U291cmNlVHlwZTxL
ZXk+LCBTb3VyY2VUeXBlPFZhbHVlPiwgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFp
dHNBcmc+PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4KLSAgICB1c2lu
ZyBNYXAgPSBIYXNoTWFwPEssIFYsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRz
QXJnPjsKLQotcHVibGljOgotICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0
IE1hcDxTb3VyY2VUeXBlPEtleT4sIFNvdXJjZVR5cGU8VmFsdWU+PiYgbWFwKQotICAgIHsKLSAg
ICAgICAgU291cmNlVHlwZTxkZWNsdHlwZShtX2VudHJpZXMpPiBlbnRyaWVzVmVjdG9yKG1hcC5z
aXplKCkpOwotICAgICAgICB1bnNpZ25lZCBpID0gMDsKLSAgICAgICAgZm9yIChjb25zdCBhdXRv
JiBpdCA6IG1hcCkKLSAgICAgICAgICAgIGVudHJpZXNWZWN0b3JbaSsrXSA9IHsgaXQua2V5LCBp
dC52YWx1ZSB9OwotICAgICAgICBtX2VudHJpZXMuZW5jb2RlKGVuY29kZXIsIGVudHJpZXNWZWN0
b3IpOwotICAgIH0KLQotICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIE1hcDxTb3Vy
Y2VUeXBlPEtleT4sIFNvdXJjZVR5cGU8VmFsdWU+PiYgbWFwKSBjb25zdAotICAgIHsKLSAgICAg
ICAgU291cmNlVHlwZTxkZWNsdHlwZShtX2VudHJpZXMpPiBkZWNvZGVkRW50cmllczsKLSAgICAg
ICAgbV9lbnRyaWVzLmRlY29kZShkZWNvZGVyLCBkZWNvZGVkRW50cmllcyk7Ci0gICAgICAgIGZv
ciAoY29uc3QgYXV0byYgcGFpciA6IGRlY29kZWRFbnRyaWVzKQotICAgICAgICAgICAgbWFwLnNl
dChwYWlyLmZpcnN0LCBwYWlyLnNlY29uZCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIENhY2hl
ZFZlY3RvcjxDYWNoZWRQYWlyPEtleSwgVmFsdWU+PiBtX2VudHJpZXM7Ci19OwotCi1jbGFzcyBD
YWNoZWRVbmlxdWVkU3RyaW5nSW1wbCA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxVbmlx
dWVkU3RyaW5nSW1wbD4gewotcHVibGljOgotICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IFN0cmluZ0ltcGwmIHN0cmluZykKLSAgICB7Ci0gICAgICAgIG1faXNBdG9taWMg
PSBzdHJpbmcuaXNBdG9taWMoKTsKLSAgICAgICAgbV9pc1N5bWJvbCA9IHN0cmluZy5pc1N5bWJv
bCgpOwotICAgICAgICBTdHJpbmdJbXBsKiBpbXBsID0gY29uc3RfY2FzdDxTdHJpbmdJbXBsKj4o
JnN0cmluZyk7Ci0gICAgICAgIGlmIChtX2lzU3ltYm9sKSB7Ci0gICAgICAgICAgICBTeW1ib2xJ
bXBsKiBzeW1ib2wgPSBzdGF0aWNfY2FzdDxTeW1ib2xJbXBsKj4oaW1wbCk7Ci0gICAgICAgICAg
ICBpZiAoIXN5bWJvbC0+aXNOdWxsU3ltYm9sKCkpIHsKLSAgICAgICAgICAgICAgICBJZGVudGlm
aWVyIHVpZCA9IElkZW50aWZpZXI6OmZyb21VaWQoJmVuY29kZXIudm0oKSwgc3ltYm9sKTsKLSAg
ICAgICAgICAgICAgICBpbXBsID0gZW5jb2Rlci52bSgpLnByb3BlcnR5TmFtZXMtPmxvb2tVcFB1
YmxpY05hbWUodWlkKS5zdHJpbmcoKS5pbXBsKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBtX2lzOEJpdCA9IGltcGwtPmlzOEJpdCgpOwotICAgICAgICBtX2xlbmd0aCA9
IGltcGwtPmxlbmd0aCgpOwotCi0gICAgICAgIGlmICghbV9sZW5ndGgpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1fbGVuZ3RoOwotICAgICAgICBjb25z
dCB2b2lkKiBwYXlsb2FkOwotICAgICAgICBpZiAobV9pczhCaXQpCi0gICAgICAgICAgICBwYXls
b2FkID0gaW1wbC0+Y2hhcmFjdGVyczgoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBw
YXlsb2FkID0gaW1wbC0+Y2hhcmFjdGVyczE2KCk7Ci0gICAgICAgICAgICBzaXplICo9IDI7Ci0g
ICAgICAgIH0KLQotICAgICAgICB1aW50OF90KiBidWZmZXIgPSB0aGlzLT5hbGxvY2F0ZShlbmNv
ZGVyLCBzaXplKTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlciwgcGF5bG9hZCwgc2l6ZSk7Ci0gICAg
fQotCi0gICAgVW5pcXVlZFN0cmluZ0ltcGwqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25z
dAotICAgIHsKLSAgICAgICAgYXV0byBjcmVhdGUgPSBbJl0oY29uc3QgYXV0byogYnVmZmVyKSAt
PiBVbmlxdWVkU3RyaW5nSW1wbCogewotICAgICAgICAgICAgaWYgKCFtX2lzU3ltYm9sKQotICAg
ICAgICAgICAgICAgIHJldHVybiBBdG9taWNTdHJpbmdJbXBsOjphZGQoYnVmZmVyLCBtX2xlbmd0
aCkubGVha1JlZigpOwotCi0gICAgICAgICAgICBpZiAoIW1fbGVuZ3RoKQotICAgICAgICAgICAg
ICAgIHJldHVybiAmU3ltYm9sSW1wbDo6Y3JlYXRlTnVsbFN5bWJvbCgpLmxlYWtSZWYoKTsKLQot
ICAgICAgICAgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmRl
Y29kZXIudm0oKSwgYnVmZmVyLCBtX2xlbmd0aCk7Ci0gICAgICAgICAgICBTdHJpbmcgc3RyID0g
ZGVjb2Rlci52bSgpLnByb3BlcnR5TmFtZXMtPmxvb2tVcFByaXZhdGVOYW1lKGlkZW50KS0+c3Ry
aW5nKCk7Ci0gICAgICAgICAgICBTdHJpbmdJbXBsKiBpbXBsID0gc3RyLnJlbGVhc2VJbXBsKCku
Z2V0KCk7Ci0gICAgICAgICAgICBBU1NFUlQoaW1wbC0+aXNTeW1ib2woKSk7Ci0gICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8VW5pcXVlZFN0cmluZ0ltcGwqPihpbXBsKTsKLSAgICAgICAg
fTsKLQotICAgICAgICBpZiAobV9pczhCaXQpCi0gICAgICAgICAgICByZXR1cm4gY3JlYXRlKHRo
aXMtPmJ1ZmZlcjxMQ2hhcj4oKSk7Ci0gICAgICAgIHJldHVybiBjcmVhdGUodGhpcy0+YnVmZmVy
PFVDaGFyPigpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBtX2lzOEJpdCA6IDE7Ci0g
ICAgYm9vbCBtX2lzU3ltYm9sIDogMTsKLSAgICBib29sIG1faXNBdG9taWMgOiAxOwotICAgIHVu
c2lnbmVkIG1fbGVuZ3RoOwotfTsKLQotY2xhc3MgQ2FjaGVkU3RyaW5nSW1wbCA6IHB1YmxpYyBW
YXJpYWJsZUxlbmd0aE9iamVjdDxTdHJpbmdJbXBsPiB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBlbmNv
ZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU3RyaW5nSW1wbCYgaW1wbCkKLSAgICB7Ci0gICAg
ICAgIG1fdW5pcXVlZFN0cmluZ0ltcGwuZW5jb2RlKGVuY29kZXIsIGltcGwpOwotICAgIH0KLQot
ICAgIFN0cmluZ0ltcGwqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fdW5pcXVlZFN0cmluZ0ltcGwuZGVjb2RlKGRlY29kZXIpOwotICAgIH0K
LQotcHJpdmF0ZToKLSAgICBDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbCBtX3VuaXF1ZWRTdHJpbmdJ
bXBsOwotfTsKLQotY2xhc3MgQ2FjaGVkU3RyaW5nIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2Jq
ZWN0PFN0cmluZz4gewotcHVibGljOgotICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIs
IGNvbnN0IFN0cmluZyYgc3RyaW5nKQotICAgIHsKLSAgICAgICAgbV9pbXBsLmVuY29kZShlbmNv
ZGVyLCBzdGF0aWNfY2FzdDxVbmlxdWVkU3RyaW5nSW1wbCo+KHN0cmluZy5pbXBsKCkpKTsKLSAg
ICB9Ci0KLSAgICBTdHJpbmcgZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gU3RyaW5nKHN0YXRpY19jYXN0PFJlZlB0cjxTdHJpbmdJbXBsPj4obV9p
bXBsLmRlY29kZShkZWNvZGVyKSkpOwotICAgIH0KLQotICAgIHZvaWQgZGVjb2RlKERlY29kZXIm
IGRlY29kZXIsIFN0cmluZyYgZHN0KSBjb25zdAotICAgIHsKLSAgICAgICAgZHN0ID0gZGVjb2Rl
KGRlY29kZXIpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBDYWNoZWRSZWZQdHI8Q2FjaGVkVW5p
cXVlZFN0cmluZ0ltcGw+IG1faW1wbDsKLX07Ci0KLWNsYXNzIENhY2hlZElkZW50aWZpZXIgOiBw
dWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8SWRlbnRpZmllcj4gewotcHVibGljOgotICAgIHZv
aWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIp
Ci0gICAgewotICAgICAgICBtX3N0cmluZy5lbmNvZGUoZW5jb2RlciwgaWRlbnRpZmllci5zdHJp
bmcoKSk7Ci0gICAgfQotCi0gICAgSWRlbnRpZmllciBkZWNvZGUoRGVjb2RlciYgZGVjb2Rlcikg
Y29uc3QKLSAgICB7Ci0gICAgICAgIFN0cmluZyBzdHIgPSBtX3N0cmluZy5kZWNvZGUoZGVjb2Rl
cik7Ci0gICAgICAgIGlmIChzdHIuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gSWRlbnRp
ZmllcigpOwotCi0gICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tVWlkKCZkZWNvZGVyLnZt
KCksIChVbmlxdWVkU3RyaW5nSW1wbCopc3RyLmltcGwoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSWRlbnRpZmllciYgaWRlbnQpIGNvbnN0Ci0gICAgewot
ICAgICAgICBpZGVudCA9IGRlY29kZShkZWNvZGVyKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAg
Q2FjaGVkU3RyaW5nIG1fc3RyaW5nOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWNsYXNz
IENhY2hlZE9wdGlvbmFsIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFdURjo6T3B0aW9u
YWw8U291cmNlVHlwZTxUPj4+IHsKLXB1YmxpYzoKLSAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBXVEY6Ok9wdGlvbmFsPFNvdXJjZVR5cGU8VD4+JiBzb3VyY2UpCi0gICAg
ewotICAgICAgICBtX2lzRW1wdHkgPSAhc291cmNlOwotCi0gICAgICAgIGlmIChtX2lzRW1wdHkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy0+dGVtcGxhdGUgYWxsb2NhdGU8
VD4oZW5jb2RlciktPmVuY29kZShlbmNvZGVyLCAqc291cmNlKTsKLSAgICB9Ci0KLSAgICBXVEY6
Ok9wdGlvbmFsPFNvdXJjZVR5cGU8VD4+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAot
ICAgIHsKLSAgICAgICAgaWYgKG1faXNFbXB0eSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci0KLSAgICAgICAgcmV0dXJuIHsgdGhpcy0+dGVtcGxhdGUgYnVmZmVyPFQ+KCktPmRl
Y29kZShkZWNvZGVyKSB9OwotICAgIH0KLQotICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29k
ZXIsIFdURjo6T3B0aW9uYWw8U291cmNlVHlwZTxUPj4mIGRzdCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIGRzdCA9IGRlY29kZShkZWNvZGVyKTsKLSAgICB9Ci0KLSAgICB2b2lkIGVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyLCBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8U291cmNlVHlwZTxUPj4mIHNvdXJj
ZSkKLSAgICB7Ci0gICAgICAgIGlmICghc291cmNlKQotICAgICAgICAgICAgZW5jb2RlKGVuY29k
ZXIsIFdURjo6bnVsbG9wdCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVuY29kZShlbmNv
ZGVyLCB7ICpzb3VyY2UgfSk7Ci0gICAgfQotCi0gICAgU291cmNlVHlwZTxUPiogZGVjb2RlQXNQ
dHIoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChtX2lzRW1wdHkp
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICByZXR1cm4gdGhpcy0+dGVt
cGxhdGUgYnVmZmVyPFQ+KCktPmRlY29kZShkZWNvZGVyKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgYm9vbCBtX2lzRW1wdHk7Ci19OwotCi1jbGFzcyBDYWNoZWRTaW1wbGVKdW1wVGFibGUgOiBw
dWJsaWMgQ2FjaGVkT2JqZWN0PFVubGlua2VkU2ltcGxlSnVtcFRhYmxlPiB7Ci1wdWJsaWM6Ci0g
ICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1w
VGFibGUmIGp1bXBUYWJsZSkKLSAgICB7Ci0gICAgICAgIG1fbWluID0ganVtcFRhYmxlLm1pbjsK
LSAgICAgICAgbV9icmFuY2hPZmZzZXRzLmVuY29kZShlbmNvZGVyLCBqdW1wVGFibGUuYnJhbmNo
T2Zmc2V0cyk7Ci0gICAgfQotCi0gICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVW5s
aW5rZWRTaW1wbGVKdW1wVGFibGUmIGp1bXBUYWJsZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIGp1
bXBUYWJsZS5taW4gPSBtX21pbjsKLSAgICAgICAgbV9icmFuY2hPZmZzZXRzLmRlY29kZShkZWNv
ZGVyLCBqdW1wVGFibGUuYnJhbmNoT2Zmc2V0cyk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlu
dDMyX3QgbV9taW47Ci0gICAgQ2FjaGVkVmVjdG9yPGludDMyX3Q+IG1fYnJhbmNoT2Zmc2V0czsK
LX07Ci0KLWNsYXNzIENhY2hlZFN0cmluZ0p1bXBUYWJsZSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8
VW5saW5rZWRTdHJpbmdKdW1wVGFibGU+IHsKLXB1YmxpYzoKLSAgICB2b2lkIGVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyLCBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYganVtcFRhYmxlKQot
ICAgIHsKLSAgICAgICAgbV9vZmZzZXRUYWJsZS5lbmNvZGUoZW5jb2RlciwganVtcFRhYmxlLm9m
ZnNldFRhYmxlKTsKLSAgICB9Ci0KLSAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBV
bmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYganVtcFRhYmxlKSBjb25zdAotICAgIHsKLSAgICAgICAg
bV9vZmZzZXRUYWJsZS5kZWNvZGUoZGVjb2RlciwganVtcFRhYmxlLm9mZnNldFRhYmxlKTsKLSAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgQ2FjaGVkSGFzaE1hcDxDYWNoZWRSZWZQdHI8Q2FjaGVkU3Ry
aW5nSW1wbD4sIFVubGlua2VkU3RyaW5nSnVtcFRhYmxlOjogT2Zmc2V0TG9jYXRpb24+IG1fb2Zm
c2V0VGFibGU7Ci19OwotCi1jbGFzcyBDYWNoZWRDb2RlQmxvY2tSYXJlRGF0YSA6IHB1YmxpYyBD
YWNoZWRPYmplY3Q8VW5saW5rZWRDb2RlQmxvY2s6OlJhcmVEYXRhPiB7Ci1wdWJsaWM6Ci0gICAg
dm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVW5saW5rZWRDb2RlQmxvY2s6OlJh
cmVEYXRhJiByYXJlRGF0YSkKLSAgICB7Ci0gICAgICAgIG1fZXhjZXB0aW9uSGFuZGxlcnMuZW5j
b2RlKGVuY29kZXIsIHJhcmVEYXRhLm1fZXhjZXB0aW9uSGFuZGxlcnMpOwotICAgICAgICBtX3N3
aXRjaEp1bXBUYWJsZXMuZW5jb2RlKGVuY29kZXIsIHJhcmVEYXRhLm1fc3dpdGNoSnVtcFRhYmxl
cyk7Ci0gICAgICAgIG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5lbmNvZGUoZW5jb2RlciwgcmFy
ZURhdGEubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKLSAgICAgICAgbV9leHByZXNzaW9uSW5m
b0ZhdFBvc2l0aW9ucy5lbmNvZGUoZW5jb2RlciwgcmFyZURhdGEubV9leHByZXNzaW9uSW5mb0Zh
dFBvc2l0aW9ucyk7Ci0gICAgICAgIG1fdHlwZVByb2ZpbGVySW5mb01hcC5lbmNvZGUoZW5jb2Rl
ciwgcmFyZURhdGEubV90eXBlUHJvZmlsZXJJbmZvTWFwKTsKLSAgICAgICAgbV9vcFByb2ZpbGVD
b250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cy5lbmNvZGUoZW5jb2RlciwgcmFyZURhdGEubV9vcFBy
b2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cyk7Ci0gICAgfQotCi0gICAgVW5saW5rZWRD
b2RlQmxvY2s6OlJhcmVEYXRhKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKLSAgICB7
Ci0gICAgICAgIFVubGlua2VkQ29kZUJsb2NrOjpSYXJlRGF0YSogcmFyZURhdGEgPSBuZXcgVW5s
aW5rZWRDb2RlQmxvY2s6OlJhcmVEYXRhIHsgfTsKLSAgICAgICAgbV9leGNlcHRpb25IYW5kbGVy
cy5kZWNvZGUoZGVjb2RlciwgcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMpOwotICAgICAg
ICBtX3N3aXRjaEp1bXBUYWJsZXMuZGVjb2RlKGRlY29kZXIsIHJhcmVEYXRhLT5tX3N3aXRjaEp1
bXBUYWJsZXMpOwotICAgICAgICBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuZGVjb2RlKGRlY29k
ZXIsIHJhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMpOwotICAgICAgICBtX2V4cHJl
c3Npb25JbmZvRmF0UG9zaXRpb25zLmRlY29kZShkZWNvZGVyLCByYXJlRGF0YS0+bV9leHByZXNz
aW9uSW5mb0ZhdFBvc2l0aW9ucyk7Ci0gICAgICAgIG1fdHlwZVByb2ZpbGVySW5mb01hcC5kZWNv
ZGUoZGVjb2RlciwgcmFyZURhdGEtPm1fdHlwZVByb2ZpbGVySW5mb01hcCk7Ci0gICAgICAgIG1f
b3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMuZGVjb2RlKGRlY29kZXIsIHJhcmVE
YXRhLT5tX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzKTsKLSAgICAgICAgcmV0
dXJuIHJhcmVEYXRhOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBDYWNoZWRWZWN0b3I8VW5saW5r
ZWRIYW5kbGVySW5mbz4gbV9leGNlcHRpb25IYW5kbGVyczsKLSAgICBDYWNoZWRWZWN0b3I8Q2Fj
aGVkU2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7Ci0gICAgQ2FjaGVkVmVjdG9y
PENhY2hlZFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOwotICAgIENh
Y2hlZFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRQb3NpdGlvbj4gbV9leHByZXNzaW9u
SW5mb0ZhdFBvc2l0aW9uczsKLSAgICBDYWNoZWRIYXNoTWFwPHVuc2lnbmVkLCBVbmxpbmtlZENv
ZGVCbG9jazo6UmFyZURhdGE6OlR5cGVQcm9maWxlckV4cHJlc3Npb25SYW5nZT4gbV90eXBlUHJv
ZmlsZXJJbmZvTWFwOwotICAgIENhY2hlZFZlY3RvcjxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0
PiBtX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzOwotfTsKLQotY2xhc3MgQ2Fj
aGVkQml0VmVjdG9yIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PEJpdFZlY3Rvcj4gewot
cHVibGljOgotICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEJpdFZlY3Rv
ciYgYml0VmVjdG9yKQotICAgIHsKLSAgICAgICAgbV9zaXplID0gYml0VmVjdG9yLnNpemUoKTsK
LSAgICAgICAgdWludDhfdCogYnVmZmVyID0gdGhpcy0+YWxsb2NhdGUoZW5jb2RlciwgbV9zaXpl
KTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlciwgYml0VmVjdG9yLmJpdHMoKSwgbV9zaXplKTsKLSAg
ICB9Ci0KLSAgICB2b2lkIGRlY29kZShEZWNvZGVyJiwgQml0VmVjdG9yJiBiaXRWZWN0b3IpIGNv
bnN0Ci0gICAgewotICAgICAgICBiaXRWZWN0b3IuZW5zdXJlU2l6ZShtX3NpemUpOwotICAgICAg
ICBtZW1jcHkoYml0VmVjdG9yLmJpdHMoKSwgdGhpcy0+YnVmZmVyKCksIG1fc2l6ZSk7Ci0gICAg
fQotCi1wcml2YXRlOgotICAgIHVuc2lnbmVkIG1fc2l6ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEhhc2hBcmcgPSB0eXBlbmFtZSBEZWZhdWx0SGFzaDxUPjo6SGFzaD4K
LWNsYXNzIENhY2hlZEhhc2hTZXQgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PEhhc2hTZXQ8U291cmNl
VHlwZTxUPiwgSGFzaEFyZz4+IHsKLXB1YmxpYzoKLSAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBIYXNoU2V0PFNvdXJjZVR5cGU8VD4sIEhhc2hBcmc+JiBzZXQpCi0gICAg
ewotICAgICAgICBTb3VyY2VUeXBlPGRlY2x0eXBlKG1fZW50cmllcyk+IGVudHJpZXNWZWN0b3Io
c2V0LnNpemUoKSk7Ci0gICAgICAgIHVuc2lnbmVkIGkgPSAwOwotICAgICAgICBmb3IgKGNvbnN0
IGF1dG8mIGl0ZW0gOiBzZXQpCi0gICAgICAgICAgICBlbnRyaWVzVmVjdG9yW2krK10gPSBpdGVt
OwotICAgICAgICBtX2VudHJpZXMuZW5jb2RlKGVuY29kZXIsIGVudHJpZXNWZWN0b3IpOwotICAg
IH0KLQotICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEhhc2hTZXQ8U291cmNlVHlw
ZTxUPiwgSGFzaEFyZz4mIHNldCkgY29uc3QKLSAgICB7Ci0gICAgICAgIFNvdXJjZVR5cGU8ZGVj
bHR5cGUobV9lbnRyaWVzKT4gZW50cmllc1ZlY3RvcjsKLSAgICAgICAgbV9lbnRyaWVzLmRlY29k
ZShkZWNvZGVyLCBlbnRyaWVzVmVjdG9yKTsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpdGVt
IDogZW50cmllc1ZlY3RvcikKLSAgICAgICAgICAgIHNldC5hZGQoaXRlbSk7Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIENhY2hlZFZlY3RvcjxUPiBtX2VudHJpZXM7Ci19OwotCi1jbGFzcyBDYWNo
ZWRDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeSA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVj
dDxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4gewotcHVibGljOgotICAgIHZvaWQgZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIsIGNvbnN0IENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5JiBlbnRy
eSkKLSAgICB7Ci0gICAgICAgIG1fY29uc3RhbnQgPSBlbnRyeS5zZWNvbmQ7Ci0gICAgICAgIG1f
c2V0LmVuY29kZShlbmNvZGVyLCBlbnRyeS5maXJzdCk7Ci0gICAgfQotCi0gICAgdm9pZCBkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlciwgQ29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnkmIGVudHJ5KSBj
b25zdAotICAgIHsKLSAgICAgICAgZW50cnkuc2Vjb25kID0gbV9jb25zdGFudDsKLSAgICAgICAg
bV9zZXQuZGVjb2RlKGRlY29kZXIsIGVudHJ5LmZpcnN0KTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgdW5zaWduZWQgbV9jb25zdGFudDsKLSAgICBDYWNoZWRIYXNoU2V0PENhY2hlZFJlZlB0cjxD
YWNoZWRVbmlxdWVkU3RyaW5nSW1wbD4sIElkZW50aWZpZXJSZXBIYXNoPiBtX3NldDsKLX07Ci0K
LWNsYXNzIENhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFZh
cmlhYmxlRW52aXJvbm1lbnQ+IHsKLXB1YmxpYzoKLSAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBlbnYpCi0gICAgewotICAgICAgICBt
X2lzRXZlcnl0aGluZ0NhcHR1cmVkID0gZW52Lm1faXNFdmVyeXRoaW5nQ2FwdHVyZWQ7Ci0gICAg
ICAgIG1fbWFwLmVuY29kZShlbmNvZGVyLCBlbnYubV9tYXApOwotICAgIH0KLQotICAgIHZvaWQg
ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFZhcmlhYmxlRW52aXJvbm1lbnQmIGVudikgY29uc3QK
LSAgICB7Ci0gICAgICAgIGVudi5tX2lzRXZlcnl0aGluZ0NhcHR1cmVkID0gbV9pc0V2ZXJ5dGhp
bmdDYXB0dXJlZDsKLSAgICAgICAgbV9tYXAuZGVjb2RlKGRlY29kZXIsIGVudi5tX21hcCk7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIGJvb2wgbV9pc0V2ZXJ5dGhpbmdDYXB0dXJlZDsKLSAgICBD
YWNoZWRIYXNoTWFwPENhY2hlZFJlZlB0cjxDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbD4sIFZhcmlh
YmxlRW52aXJvbm1lbnRFbnRyeSwgSWRlbnRpZmllclJlcEhhc2gsIEhhc2hUcmFpdHM8UmVmUHRy
PFVuaXF1ZWRTdHJpbmdJbXBsPj4sIFZhcmlhYmxlRW52aXJvbm1lbnRFbnRyeUhhc2hUcmFpdHM+
IG1fbWFwOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgU291cmNlID0gU291
cmNlVHlwZTxUPj4KLWNsYXNzIENhY2hlZEFycmF5IDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2Jq
ZWN0PFNvdXJjZSo+IHsKLXB1YmxpYzoKLSAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBTb3VyY2UqIGFycmF5LCB1bnNpZ25lZCBzaXplKQotICAgIHsKLSAgICAgICAgVCog
ZHN0ID0gdGhpcy0+dGVtcGxhdGUgYWxsb2NhdGU8VD4oZW5jb2Rlciwgc2l6ZSk7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgICAgICA6OkpTQzo6
ZW5jb2RlKGVuY29kZXIsIGRzdFtpXSwgYXJyYXlbaV0pOwotICAgIH0KLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lLi4uIEFyZ3M+Ci0gICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgU291
cmNlKiBhcnJheSwgdW5zaWduZWQgc2l6ZSwgQXJncy4uLiBhcmdzKSBjb25zdAotICAgIHsKLSAg
ICAgICAgY29uc3QgVCogYnVmZmVyID0gdGhpcy0+dGVtcGxhdGUgYnVmZmVyPFQ+KCk7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgICAgICA6OkpT
Qzo6ZGVjb2RlKGRlY29kZXIsIGJ1ZmZlcltpXSwgYXJyYXlbaV0sIGFyZ3MuLi4pOwotICAgIH0K
LX07Ci0KLWNsYXNzIENhY2hlZFNjb3BlZEFyZ3VtZW50c1RhYmxlIDogcHVibGljIENhY2hlZE9i
amVjdDxTY29wZWRBcmd1bWVudHNUYWJsZT4gewotcHVibGljOgotICAgIHZvaWQgZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIsIGNvbnN0IFNjb3BlZEFyZ3VtZW50c1RhYmxlJiBzY29wZWRBcmd1bWVu
dHNUYWJsZSkKLSAgICB7Ci0gICAgICAgIG1fbGVuZ3RoID0gc2NvcGVkQXJndW1lbnRzVGFibGUu
bV9sZW5ndGg7Ci0gICAgICAgIG1fYXJndW1lbnRzLmVuY29kZShlbmNvZGVyLCBzY29wZWRBcmd1
bWVudHNUYWJsZS5tX2FyZ3VtZW50cy5nZXQoKSwgbV9sZW5ndGgpOwotICAgIH0KLQotICAgIFNj
b3BlZEFyZ3VtZW50c1RhYmxlKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKLSAgICB7
Ci0gICAgICAgIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiBzY29wZWRBcmd1bWVudHNUYWJsZSA9IFNj
b3BlZEFyZ3VtZW50c1RhYmxlOjpjcmVhdGUoZGVjb2Rlci52bSgpLCBtX2xlbmd0aCk7Ci0gICAg
ICAgIG1fYXJndW1lbnRzLmRlY29kZShkZWNvZGVyLCBzY29wZWRBcmd1bWVudHNUYWJsZS0+bV9h
cmd1bWVudHMuZ2V0KCksIG1fbGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIHNjb3BlZEFyZ3VtZW50
c1RhYmxlOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICB1aW50MzJfdCBtX2xlbmd0aDsKLSAgICBD
YWNoZWRBcnJheTxTY29wZU9mZnNldD4gbV9hcmd1bWVudHM7Ci19OwotCi1jbGFzcyBDYWNoZWRT
eW1ib2xUYWJsZUVudHJ5IDogcHVibGljIENhY2hlZE9iamVjdDxTeW1ib2xUYWJsZUVudHJ5PiB7
Ci1wdWJsaWM6Ci0gICAgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFN5bWJvbFRhYmxlRW50
cnkmIHN5bWJvbFRhYmxlRW50cnkpCi0gICAgewotICAgICAgICBtX2JpdHMgPSBzeW1ib2xUYWJs
ZUVudHJ5Lm1fYml0cyB8IFN5bWJvbFRhYmxlRW50cnk6OlNsaW1GbGFnOwotICAgIH0KLQotICAg
IHZvaWQgZGVjb2RlKERlY29kZXImLCBTeW1ib2xUYWJsZUVudHJ5JiBzeW1ib2xUYWJsZUVudHJ5
KSBjb25zdAotICAgIHsKLSAgICAgICAgc3ltYm9sVGFibGVFbnRyeS5tX2JpdHMgPSBtX2JpdHM7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGludHB0cl90IG1fYml0czsKLX07Ci0KLWNsYXNzIENh
Y2hlZFN5bWJvbFRhYmxlIDogcHVibGljIENhY2hlZE9iamVjdDxTeW1ib2xUYWJsZT4gewotcHVi
bGljOgotICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFN5bWJvbFRhYmxl
JiBzeW1ib2xUYWJsZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghc3ltYm9sVGFibGUubV9yYXJl
RGF0YSk7Ci0gICAgICAgIG1fbWFwLmVuY29kZShlbmNvZGVyLCBzeW1ib2xUYWJsZS5tX21hcCk7
Ci0gICAgICAgIG1fbWF4U2NvcGVPZmZzZXQgPSBzeW1ib2xUYWJsZS5tX21heFNjb3BlT2Zmc2V0
OwotICAgICAgICBtX3VzZXNOb25TdHJpY3RFdmFsID0gc3ltYm9sVGFibGUubV91c2VzTm9uU3Ry
aWN0RXZhbDsKLSAgICAgICAgbV9uZXN0ZWRMZXhpY2FsU2NvcGUgPSBzeW1ib2xUYWJsZS5tX25l
c3RlZExleGljYWxTY29wZTsKLSAgICAgICAgbV9zY29wZVR5cGUgPSBzeW1ib2xUYWJsZS5tX3Nj
b3BlVHlwZTsKLSAgICAgICAgbV9hcmd1bWVudHMuZW5jb2RlKGVuY29kZXIsIHN5bWJvbFRhYmxl
Lm1fYXJndW1lbnRzLmdldCgpKTsKLSAgICB9Ci0KLSAgICBTeW1ib2xUYWJsZSogZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9s
VGFibGUgPSBTeW1ib2xUYWJsZTo6Y3JlYXRlKGRlY29kZXIudm0oKSk7Ci0gICAgICAgIG1fbWFw
LmRlY29kZShkZWNvZGVyLCBzeW1ib2xUYWJsZS0+bV9tYXApOwotICAgICAgICBzeW1ib2xUYWJs
ZS0+bV9tYXhTY29wZU9mZnNldCA9IG1fbWF4U2NvcGVPZmZzZXQ7Ci0gICAgICAgIHN5bWJvbFRh
YmxlLT5tX3VzZXNOb25TdHJpY3RFdmFsID0gbV91c2VzTm9uU3RyaWN0RXZhbDsKLSAgICAgICAg
c3ltYm9sVGFibGUtPm1fbmVzdGVkTGV4aWNhbFNjb3BlID0gbV9uZXN0ZWRMZXhpY2FsU2NvcGU7
Ci0gICAgICAgIHN5bWJvbFRhYmxlLT5tX3Njb3BlVHlwZSA9IG1fc2NvcGVUeXBlOwotICAgICAg
ICBTY29wZWRBcmd1bWVudHNUYWJsZSogc2NvcGVkQXJndW1lbnRzVGFibGUgPSBtX2FyZ3VtZW50
cy5kZWNvZGUoZGVjb2Rlcik7Ci0gICAgICAgIGlmIChzY29wZWRBcmd1bWVudHNUYWJsZSkKLSAg
ICAgICAgICAgIHN5bWJvbFRhYmxlLT5tX2FyZ3VtZW50cy5zZXQoZGVjb2Rlci52bSgpLCBzeW1i
b2xUYWJsZSwgc2NvcGVkQXJndW1lbnRzVGFibGUpOwotICAgICAgICByZXR1cm4gc3ltYm9sVGFi
bGU7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIENhY2hlZEhhc2hNYXA8Q2FjaGVkUmVmUHRyPENh
Y2hlZFVuaXF1ZWRTdHJpbmdJbXBsPiwgQ2FjaGVkU3ltYm9sVGFibGVFbnRyeSwgSWRlbnRpZmll
clJlcEhhc2gsIEhhc2hUcmFpdHM8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPj4sIFN5bWJvbFRh
YmxlSW5kZXhIYXNoVHJhaXRzPiBtX21hcDsKLSAgICBTY29wZU9mZnNldCBtX21heFNjb3BlT2Zm
c2V0OwotICAgIHVuc2lnbmVkIG1fdXNlc05vblN0cmljdEV2YWwgOiAxOwotICAgIHVuc2lnbmVk
IG1fbmVzdGVkTGV4aWNhbFNjb3BlIDogMTsKLSAgICB1bnNpZ25lZCBtX3Njb3BlVHlwZSA6IDM7
Ci0gICAgLy8gRklYTUU6IGRvIHdlIG5lZWQgdG8gY2FjaGVkIHRoaXMgZXZlbnR1YWxseT8KLSAg
ICAvLyBDYWNoZWRQdHI8U3ltYm9sVGFibGVSYXJlRGF0YT4gcmFyZURhdGE7Ci0gICAgQ2FjaGVk
UHRyPENhY2hlZFNjb3BlZEFyZ3VtZW50c1RhYmxlPiBtX2FyZ3VtZW50czsKLX07Ci0KLWNsYXNz
IENhY2hlZEpTVmFsdWU7Ci1jbGFzcyBDYWNoZWRJbW11dGFibGVCdXR0ZXJmbHkgOiBwdWJsaWMg
Q2FjaGVkT2JqZWN0PEpTSW1tdXRhYmxlQnV0dGVyZmx5PiB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgSlNJbW11dGFibGVCdXR0ZXJmbHkmIGltbXV0YWJsZUJ1
dHRlcmZseSkKLSAgICB7Ci0gICAgICAgIG1fbGVuZ3RoID0gaW1tdXRhYmxlQnV0dGVyZmx5Lmxl
bmd0aCgpOwotICAgICAgICBtX2luZGV4aW5nVHlwZSA9IGltbXV0YWJsZUJ1dHRlcmZseS5pbmRl
eGluZ1R5cGVBbmRNaXNjKCk7Ci0gICAgICAgIGlmIChoYXNEb3VibGUobV9pbmRleGluZ1R5cGUp
KQotICAgICAgICAgICAgbV9jYWNoZWREb3VibGVzLmVuY29kZShlbmNvZGVyLCBpbW11dGFibGVC
dXR0ZXJmbHkudG9CdXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSwgbV9sZW5n
dGgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2NhY2hlZFZhbHVlcy5lbmNvZGUoZW5j
b2RlciwgaW1tdXRhYmxlQnV0dGVyZmx5LnRvQnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKS5kYXRh
KCksIG1fbGVuZ3RoKTsKLSAgICB9Ci0KLSAgICBKU0ltbXV0YWJsZUJ1dHRlcmZseSogZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBKU0ltbXV0YWJsZUJ1dHRl
cmZseSogaW1tdXRhYmxlQnV0dGVyZmx5ID0gSlNJbW11dGFibGVCdXR0ZXJmbHk6OmNyZWF0ZShk
ZWNvZGVyLnZtKCksIG1faW5kZXhpbmdUeXBlLCBtX2xlbmd0aCk7Ci0gICAgICAgIGlmIChoYXNE
b3VibGUobV9pbmRleGluZ1R5cGUpKQotICAgICAgICAgICAgbV9jYWNoZWREb3VibGVzLmRlY29k
ZShkZWNvZGVyLCBpbW11dGFibGVCdXR0ZXJmbHktPnRvQnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNE
b3VibGUoKS5kYXRhKCksIG1fbGVuZ3RoLCBpbW11dGFibGVCdXR0ZXJmbHkpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtX2NhY2hlZFZhbHVlcy5kZWNvZGUoZGVjb2RlciwgaW1tdXRhYmxl
QnV0dGVyZmx5LT50b0J1dHRlcmZseSgpLT5jb250aWd1b3VzKCkuZGF0YSgpLCBtX2xlbmd0aCwg
aW1tdXRhYmxlQnV0dGVyZmx5KTsKLSAgICAgICAgcmV0dXJuIGltbXV0YWJsZUJ1dHRlcmZseTsK
LSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgSW5kZXhpbmdUeXBlIG1faW5kZXhpbmdUeXBlOwotICAg
IHVuc2lnbmVkIG1fbGVuZ3RoOwotICAgIHVuaW9uIHsKLSAgICAgICAgQ2FjaGVkQXJyYXk8ZG91
YmxlPiBtX2NhY2hlZERvdWJsZXM7Ci0gICAgICAgIENhY2hlZEFycmF5PENhY2hlZEpTVmFsdWUs
IFdyaXRlQmFycmllcjxVbmtub3duPj4gbV9jYWNoZWRWYWx1ZXM7Ci0gICAgfTsKLX07Ci0KLWNs
YXNzIENhY2hlZFJlZ0V4cCA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8UmVnRXhwPiB7Ci1wdWJsaWM6
Ci0gICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgUmVnRXhwJiByZWdFeHAp
Ci0gICAgewotICAgICAgICBtX3BhdHRlcm5TdHJpbmcuZW5jb2RlKGVuY29kZXIsIHJlZ0V4cC5t
X3BhdHRlcm5TdHJpbmcpOwotICAgICAgICBtX2ZsYWdzID0gcmVnRXhwLm1fZmxhZ3M7Ci0gICAg
fQotCi0gICAgUmVnRXhwKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKLSAgICB7Ci0g
ICAgICAgIFN0cmluZyBwYXR0ZXJuIHsgbV9wYXR0ZXJuU3RyaW5nLmRlY29kZShkZWNvZGVyKSB9
OwotICAgICAgICByZXR1cm4gUmVnRXhwOjpjcmVhdGUoZGVjb2Rlci52bSgpLCBwYXR0ZXJuLCBt
X2ZsYWdzKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQ2FjaGVkU3RyaW5nIG1fcGF0dGVyblN0
cmluZzsKLSAgICBSZWdFeHBGbGFncyBtX2ZsYWdzOwotfTsKLQotY2xhc3MgQ2FjaGVkVGVtcGxh
dGVPYmplY3REZXNjcmlwdG9yIDogcHVibGljIENhY2hlZE9iamVjdDxUZW1wbGF0ZU9iamVjdERl
c2NyaXB0b3I+IHsKLXB1YmxpYzoKLSAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBj
b25zdCBUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3ImIHRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcikK
LSAgICB7Ci0gICAgICAgIG1fcmF3U3RyaW5ncy5lbmNvZGUoZW5jb2RlciwgdGVtcGxhdGVPYmpl
Y3REZXNjcmlwdG9yLnJhd1N0cmluZ3MoKSk7Ci0gICAgICAgIG1fY29va2VkU3RyaW5ncy5lbmNv
ZGUoZW5jb2RlciwgdGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmNvb2tlZFN0cmluZ3MoKSk7Ci0g
ICAgfQotCi0gICAgUmVmPFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcj4gZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6
OlN0cmluZ1ZlY3RvciBkZWNvZGVkUmF3U3RyaW5nczsKLSAgICAgICAgVGVtcGxhdGVPYmplY3RE
ZXNjcmlwdG9yOjpPcHRpb25hbFN0cmluZ1ZlY3RvciBkZWNvZGVkQ29va2VkU3RyaW5nczsKLSAg
ICAgICAgbV9yYXdTdHJpbmdzLmRlY29kZShkZWNvZGVyLCBkZWNvZGVkUmF3U3RyaW5ncyk7Ci0g
ICAgICAgIG1fY29va2VkU3RyaW5ncy5kZWNvZGUoZGVjb2RlciwgZGVjb2RlZENvb2tlZFN0cmlu
Z3MpOwotICAgICAgICByZXR1cm4gVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOjpjcmVhdGUoV1RG
TW92ZShkZWNvZGVkUmF3U3RyaW5ncyksIFdURk1vdmUoZGVjb2RlZENvb2tlZFN0cmluZ3MpKTsK
LSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQ2FjaGVkVmVjdG9yPENhY2hlZFN0cmluZywgND4gbV9y
YXdTdHJpbmdzOwotICAgIENhY2hlZFZlY3RvcjxDYWNoZWRPcHRpb25hbDxDYWNoZWRTdHJpbmc+
LCA0PiBtX2Nvb2tlZFN0cmluZ3M7Ci19OwotCi1jbGFzcyBDYWNoZWRCaWdJbnQgOiBwdWJsaWMg
VmFyaWFibGVMZW5ndGhPYmplY3Q8SlNCaWdJbnQ+IHsKLXB1YmxpYzoKLSAgICB2b2lkIGVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBKU0JpZ0ludCYgYmlnSW50KQotICAgIHsKLSAgICAgICAgbV9s
ZW5ndGggPSBiaWdJbnQubGVuZ3RoKCk7Ci0gICAgICAgIG1fc2lnbiA9IGJpZ0ludC5zaWduKCk7
Ci0KLSAgICAgICAgaWYgKCFtX2xlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICB1bnNpZ25lZCBzaXplID0gc2l6ZW9mKEpTQmlnSW50OjpEaWdpdCkgKiBtX2xlbmd0aDsKLSAg
ICAgICAgdWludDhfdCogYnVmZmVyID0gdGhpcy0+YWxsb2NhdGUoZW5jb2Rlciwgc2l6ZSk7Ci0g
ICAgICAgIG1lbWNweShidWZmZXIsIGJpZ0ludC5kYXRhU3RvcmFnZSgpLCBzaXplKTsKLSAgICB9
Ci0KLSAgICBKU0JpZ0ludCogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0Ci0gICAgewot
ICAgICAgICBKU0JpZ0ludCogYmlnSW50ID0gSlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGhVbmNo
ZWNrZWQoZGVjb2Rlci52bSgpLCBtX2xlbmd0aCk7Ci0gICAgICAgIGJpZ0ludC0+c2V0U2lnbiht
X3NpZ24pOwotICAgICAgICBtZW1jcHkoYmlnSW50LT5kYXRhU3RvcmFnZSgpLCB0aGlzLT5idWZm
ZXIoKSwgc2l6ZW9mKEpTQmlnSW50OjpEaWdpdCkgKiBtX2xlbmd0aCk7Ci0gICAgICAgIHJldHVy
biBiaWdJbnQ7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwotICAg
IGJvb2wgbV9zaWduOwotfTsKLQotY2xhc3MgQ2FjaGVkSlNWYWx1ZSA6IHB1YmxpYyBWYXJpYWJs
ZUxlbmd0aE9iamVjdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4+IHsKLXB1YmxpYzoKLSAgICB2b2lk
IGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4gdmFs
dWUpCi0gICAgewotICAgICAgICBKU1ZhbHVlIHYgPSB2YWx1ZS5nZXQoKTsKLQotICAgICAgICBp
ZiAoIXYuaXNDZWxsKCkgfHwgdi5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIG1fdHlwZSA9IEVu
Y29kZWRUeXBlOjpKU1ZhbHVlOwotICAgICAgICAgICAgKnRoaXMtPmFsbG9jYXRlPEVuY29kZWRK
U1ZhbHVlPihlbmNvZGVyKSA9IEpTVmFsdWU6OmVuY29kZSh2KTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIEpTQ2VsbCogY2VsbCA9IHYuYXNDZWxsKCk7Ci0gICAg
ICAgIFZNJiB2bSA9IGVuY29kZXIudm0oKTsKLQotICAgICAgICBpZiAoYXV0byogc3ltYm9sVGFi
bGUgPSBqc0R5bmFtaWNDYXN0PFN5bWJvbFRhYmxlKj4odm0sIGNlbGwpKSB7Ci0gICAgICAgICAg
ICBtX3R5cGUgPSBFbmNvZGVkVHlwZTo6U3ltYm9sVGFibGU7Ci0gICAgICAgICAgICB0aGlzLT5h
bGxvY2F0ZTxDYWNoZWRTeW1ib2xUYWJsZT4oZW5jb2RlciktPmVuY29kZShlbmNvZGVyLCAqc3lt
Ym9sVGFibGUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGF1dG8qIHN0cmluZyA9IGpzRHluYW1pY0Nhc3Q8SlNTdHJpbmcqPih2bSwgY2VsbCkpIHsKLSAg
ICAgICAgICAgIG1fdHlwZSA9IEVuY29kZWRUeXBlOjpTdHJpbmc7Ci0gICAgICAgICAgICBTdHJp
bmdJbXBsKiBpbXBsID0gc3RyaW5nLT50cnlHZXRWYWx1ZSgpLmltcGwoKTsKLSAgICAgICAgICAg
IHRoaXMtPmFsbG9jYXRlPENhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsPihlbmNvZGVyKS0+ZW5jb2Rl
KGVuY29kZXIsICppbXBsKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChhdXRvKiBpbW11dGFibGVCdXR0ZXJmbHkgPSBqc0R5bmFtaWNDYXN0PEpTSW1tdXRh
YmxlQnV0dGVyZmx5Kj4odm0sIGNlbGwpKSB7Ci0gICAgICAgICAgICBtX3R5cGUgPSBFbmNvZGVk
VHlwZTo6SW1tdXRhYmxlQnV0dGVyZmx5OwotICAgICAgICAgICAgdGhpcy0+YWxsb2NhdGU8Q2Fj
aGVkSW1tdXRhYmxlQnV0dGVyZmx5PihlbmNvZGVyKS0+ZW5jb2RlKGVuY29kZXIsICppbW11dGFi
bGVCdXR0ZXJmbHkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKGF1dG8qIHJlZ2V4cCA9IGpzRHluYW1pY0Nhc3Q8UmVnRXhwKj4odm0sIGNlbGwpKSB7Ci0g
ICAgICAgICAgICBtX3R5cGUgPSBFbmNvZGVkVHlwZTo6UmVnRXhwOwotICAgICAgICAgICAgdGhp
cy0+YWxsb2NhdGU8Q2FjaGVkUmVnRXhwPihlbmNvZGVyKS0+ZW5jb2RlKGVuY29kZXIsICpyZWdl
eHApOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGF1dG8q
IHRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvciA9IGpzRHluYW1pY0Nhc3Q8SlNUZW1wbGF0ZU9iamVj
dERlc2NyaXB0b3IqPih2bSwgY2VsbCkpIHsKLSAgICAgICAgICAgIG1fdHlwZSA9IEVuY29kZWRU
eXBlOjpUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I7Ci0gICAgICAgICAgICB0aGlzLT5hbGxvY2F0
ZTxDYWNoZWRUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I+KGVuY29kZXIpLT5lbmNvZGUoZW5jb2Rl
ciwgdGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLT5kZXNjcmlwdG9yKCkpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGF1dG8qIGJpZ0ludCA9IGpzRHluYW1p
Y0Nhc3Q8SlNCaWdJbnQqPih2bSwgY2VsbCkpIHsKLSAgICAgICAgICAgIG1fdHlwZSA9IEVuY29k
ZWRUeXBlOjpCaWdJbnQ7Ci0gICAgICAgICAgICB0aGlzLT5hbGxvY2F0ZTxDYWNoZWRCaWdJbnQ+
KGVuY29kZXIpLT5lbmNvZGUoZW5jb2RlciwgKmJpZ0ludCk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IH0KLQotICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdyaXRlQmFycmllcjxVbmtu
b3duPiYgdmFsdWUsIGNvbnN0IEpTQ2VsbCogb3duZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBK
U1ZhbHVlIHY7Ci0gICAgICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgICAgIGNhc2UgRW5jb2Rl
ZFR5cGU6OkpTVmFsdWU6Ci0gICAgICAgICAgICB2ID0gSlNWYWx1ZTo6ZGVjb2RlKCp0aGlzLT5i
dWZmZXI8RW5jb2RlZEpTVmFsdWU+KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRW5jb2RlZFR5cGU6OlN5bWJvbFRhYmxlOgotICAgICAgICAgICAgdiA9IHRoaXMtPmJ1ZmZl
cjxDYWNoZWRTeW1ib2xUYWJsZT4oKS0+ZGVjb2RlKGRlY29kZXIpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgRW5jb2RlZFR5cGU6OlN0cmluZzogewotICAgICAgICAgICAgVW5p
cXVlZFN0cmluZ0ltcGwqIGltcGwgPSB0aGlzLT5idWZmZXI8Q2FjaGVkVW5pcXVlZFN0cmluZ0lt
cGw+KCktPmRlY29kZShkZWNvZGVyKTsKLSAgICAgICAgICAgIHYgPSBKU1N0cmluZzo6Y3JlYXRl
KGRlY29kZXIudm0oKSwgYWRvcHRSZWYoKmltcGwpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgRW5jb2RlZFR5cGU6OkltbXV0YWJsZUJ1dHRlcmZseToKLSAg
ICAgICAgICAgIHYgPSB0aGlzLT5idWZmZXI8Q2FjaGVkSW1tdXRhYmxlQnV0dGVyZmx5PigpLT5k
ZWNvZGUoZGVjb2Rlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFbmNvZGVk
VHlwZTo6UmVnRXhwOgotICAgICAgICAgICAgdiA9IHRoaXMtPmJ1ZmZlcjxDYWNoZWRSZWdFeHA+
KCktPmRlY29kZShkZWNvZGVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVu
Y29kZWRUeXBlOjpUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6Ci0gICAgICAgICAgICB2ID0gSlNU
ZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6OmNyZWF0ZShkZWNvZGVyLnZtKCksIHRoaXMtPmJ1ZmZl
cjxDYWNoZWRUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I+KCktPmRlY29kZShkZWNvZGVyKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFbmNvZGVkVHlwZTo6QmlnSW50OgotICAg
ICAgICAgICAgdiA9IHRoaXMtPmJ1ZmZlcjxDYWNoZWRCaWdJbnQ+KCktPmRlY29kZShkZWNvZGVy
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgICAgICB2YWx1ZS5zZXQo
ZGVjb2Rlci52bSgpLCBvd25lciwgdik7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGVudW0gY2xh
c3MgRW5jb2RlZFR5cGUgOiB1aW50OF90IHsKLSAgICAgICAgSlNWYWx1ZSwKLSAgICAgICAgU3lt
Ym9sVGFibGUsCi0gICAgICAgIFN0cmluZywKLSAgICAgICAgSW1tdXRhYmxlQnV0dGVyZmx5LAot
ICAgICAgICBSZWdFeHAsCi0gICAgICAgIFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvciwKLSAgICAg
ICAgQmlnSW50LAotICAgIH07Ci0KLSAgICBFbmNvZGVkVHlwZSBtX3R5cGU7Ci19OwotCi1jbGFz
cyBDYWNoZWRJbnN0cnVjdGlvblN0cmVhbSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8SW5zdHJ1Y3Rp
b25TdHJlYW0+IHsKLXB1YmxpYzoKLSAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBj
b25zdCBJbnN0cnVjdGlvblN0cmVhbSYgc3RyZWFtKQotICAgIHsKLSAgICAgICAgbV9pbnN0cnVj
dGlvbnMuZW5jb2RlKGVuY29kZXIsIHN0cmVhbS5tX2luc3RydWN0aW9ucyk7Ci0gICAgfQotCi0g
ICAgSW5zdHJ1Y3Rpb25TdHJlYW0qIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAotICAg
IHsKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3QsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBpbnN0
cnVjdGlvbnNWZWN0b3I7Ci0gICAgICAgIG1faW5zdHJ1Y3Rpb25zLmRlY29kZShkZWNvZGVyLCBp
bnN0cnVjdGlvbnNWZWN0b3IpOwotICAgICAgICByZXR1cm4gbmV3IEluc3RydWN0aW9uU3RyZWFt
KFdURk1vdmUoaW5zdHJ1Y3Rpb25zVmVjdG9yKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIENh
Y2hlZFZlY3Rvcjx1aW50OF90LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9pbnN0cnVjdGlv
bnM7Ci19OwotCi1jbGFzcyBDYWNoZWRNZXRhZGF0YVRhYmxlIDogcHVibGljIENhY2hlZE9iamVj
dDxVbmxpbmtlZE1ldGFkYXRhVGFibGU+IHsKLXB1YmxpYzoKLSAgICB2b2lkIGVuY29kZShFbmNv
ZGVyJiwgY29uc3QgVW5saW5rZWRNZXRhZGF0YVRhYmxlJiBtZXRhZGF0YVRhYmxlKQotICAgIHsK
LSAgICAgICAgQVNTRVJUKG1ldGFkYXRhVGFibGUubV9pc0ZpbmFsaXplZCk7Ci0gICAgICAgIG1f
aGFzTWV0YWRhdGEgPSBtZXRhZGF0YVRhYmxlLm1faGFzTWV0YWRhdGE7Ci0gICAgICAgIGlmICgh
bV9oYXNNZXRhZGF0YSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gVW5saW5rZWRNZXRhZGF0YVRhYmxlOjpzX29mZnNldFRhYmxlRW50cmllczsgaS0tOykK
LSAgICAgICAgICAgIG1fbWV0YWRhdGFbaV0gPSBtZXRhZGF0YVRhYmxlLmJ1ZmZlcigpW2ldOwot
ICAgIH0KLQotICAgIHZvaWQgZGVjb2RlKERlY29kZXImLCBVbmxpbmtlZE1ldGFkYXRhVGFibGUm
IG1ldGFkYXRhVGFibGUpIGNvbnN0Ci0gICAgewotICAgICAgICBtZXRhZGF0YVRhYmxlLm1faXNG
aW5hbGl6ZWQgPSB0cnVlOwotICAgICAgICBtZXRhZGF0YVRhYmxlLm1faXNMaW5rZWQgPSBmYWxz
ZTsKLSAgICAgICAgbWV0YWRhdGFUYWJsZS5tX2hhc01ldGFkYXRhID0gbV9oYXNNZXRhZGF0YTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gVW5saW5rZWRNZXRhZGF0YVRhYmxlOjpzX29mZnNl
dFRhYmxlRW50cmllczsgaS0tOykKLSAgICAgICAgICAgIG1ldGFkYXRhVGFibGUuYnVmZmVyKClb
aV0gPSBtX21ldGFkYXRhW2ldOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBib29sIG1faGFzTWV0
YWRhdGE7Ci0gICAgc3RkOjphcnJheTx1bnNpZ25lZCwgVW5saW5rZWRNZXRhZGF0YVRhYmxlOjpz
X29mZnNldFRhYmxlRW50cmllcz4gbV9tZXRhZGF0YTsKLX07Ci0KLWNsYXNzIENhY2hlZFNvdXJj
ZU9yaWdpbiA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8U291cmNlT3JpZ2luPiB7Ci1wdWJsaWM6Ci0g
ICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU291cmNlT3JpZ2luJiBzb3Vy
Y2VPcmlnaW4pCi0gICAgewotICAgICAgICBtX3N0cmluZy5lbmNvZGUoZW5jb2Rlciwgc291cmNl
T3JpZ2luLnN0cmluZygpKTsKLSAgICB9Ci0KLSAgICBTb3VyY2VPcmlnaW4gZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gU291cmNlT3JpZ2luIHsg
bV9zdHJpbmcuZGVjb2RlKGRlY29kZXIpIH07Ci0gICAgfQotCi1wcml2YXRlOgotICAgIENhY2hl
ZFN0cmluZyBtX3N0cmluZzsKLX07Ci0KLWNsYXNzIENhY2hlZFRleHRQb3NpdGlvbiA6IHB1Ymxp
YyBDYWNoZWRPYmplY3Q8VGV4dFBvc2l0aW9uPiB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBlbmNvZGUo
RW5jb2RlciYsIFRleHRQb3NpdGlvbiB0ZXh0UG9zaXRpb24pCi0gICAgewotICAgICAgICBtX2xp
bmUgPSB0ZXh0UG9zaXRpb24ubV9saW5lLnplcm9CYXNlZEludCgpOwotICAgICAgICBtX2NvbHVt
biA9IHRleHRQb3NpdGlvbi5tX2NvbHVtbi56ZXJvQmFzZWRJbnQoKTsKLSAgICB9Ci0KLSAgICBU
ZXh0UG9zaXRpb24gZGVjb2RlKERlY29kZXImKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IFRleHRQb3NpdGlvbiB7IE9yZGluYWxOdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQobV9saW5lKSwg
T3JkaW5hbE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChtX2NvbHVtbikgfTsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgaW50IG1fbGluZTsKLSAgICBpbnQgbV9jb2x1bW47Ci19OwotCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgU291cmNlLCB0eXBlbmFtZSBDYWNoZWRUeXBlPgotY2xhc3MgQ2FjaGVkU291
cmNlUHJvdmlkZXJTaGFwZSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8U291cmNlPiB7Ci1wdWJsaWM6
Ci0gICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU291cmNlUHJvdmlkZXIm
IHNvdXJjZVByb3ZpZGVyKQotICAgIHsKLSAgICAgICAgbV92YWxpZGF0ZWQgPSBzb3VyY2VQcm92
aWRlci5pc1ZhbGlkKCk7Ci0gICAgICAgIG1fc291cmNlT3JpZ2luLmVuY29kZShlbmNvZGVyLCBz
b3VyY2VQcm92aWRlci5zb3VyY2VPcmlnaW4oKSk7Ci0gICAgICAgIG1fdXJsLmVuY29kZShlbmNv
ZGVyLCBzb3VyY2VQcm92aWRlci51cmwoKSk7Ci0gICAgICAgIG1fc291cmNlVVJMRGlyZWN0aXZl
LmVuY29kZShlbmNvZGVyLCBzb3VyY2VQcm92aWRlci5zb3VyY2VVUkwoKSk7Ci0gICAgICAgIG1f
c291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZS5lbmNvZGUoZW5jb2Rlciwgc291cmNlUHJvdmlkZXIu
c291cmNlTWFwcGluZ1VSTCgpKTsKLSAgICAgICAgbV9zdGFydFBvc2l0aW9uLmVuY29kZShlbmNv
ZGVyLCBzb3VyY2VQcm92aWRlci5zdGFydFBvc2l0aW9uKCkpOwotICAgIH0KLQotICAgIHZvaWQg
ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNvdXJjZVByb3ZpZGVyJiBzb3VyY2VQcm92aWRlcikg
Y29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChtX3ZhbGlkYXRlZCkKLSAgICAgICAgICAgIHNvdXJj
ZVByb3ZpZGVyLnNldFZhbGlkKCk7Ci0gICAgICAgIHNvdXJjZVByb3ZpZGVyLnNldFNvdXJjZVVS
TERpcmVjdGl2ZShtX3NvdXJjZVVSTERpcmVjdGl2ZS5kZWNvZGUoZGVjb2RlcikpOwotICAgICAg
ICBzb3VyY2VQcm92aWRlci5zZXRTb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlKG1fc291cmNlTWFw
cGluZ1VSTERpcmVjdGl2ZS5kZWNvZGUoZGVjb2RlcikpOwotICAgIH0KLQotcHJvdGVjdGVkOgot
ICAgIGJvb2wgbV92YWxpZGF0ZWQgOiAxOwotICAgIENhY2hlZFNvdXJjZU9yaWdpbiBtX3NvdXJj
ZU9yaWdpbjsKLSAgICBDYWNoZWRTdHJpbmcgbV91cmw7Ci0gICAgQ2FjaGVkU3RyaW5nIG1fc291
cmNlVVJMRGlyZWN0aXZlOwotICAgIENhY2hlZFN0cmluZyBtX3NvdXJjZU1hcHBpbmdVUkxEaXJl
Y3RpdmU7Ci0gICAgQ2FjaGVkVGV4dFBvc2l0aW9uIG1fc3RhcnRQb3NpdGlvbjsKLX07Ci0KLWNs
YXNzIENhY2hlZFN0cmluZ1NvdXJjZVByb3ZpZGVyIDogcHVibGljIENhY2hlZFNvdXJjZVByb3Zp
ZGVyU2hhcGU8U3RyaW5nU291cmNlUHJvdmlkZXIsIENhY2hlZFN0cmluZ1NvdXJjZVByb3ZpZGVy
PiB7Ci0gICAgdXNpbmcgQmFzZSA9IENhY2hlZFNvdXJjZVByb3ZpZGVyU2hhcGU8U3RyaW5nU291
cmNlUHJvdmlkZXIsIENhY2hlZFN0cmluZ1NvdXJjZVByb3ZpZGVyPjsKLQotcHVibGljOgotICAg
IHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFN0cmluZ1NvdXJjZVByb3ZpZGVy
JiBzb3VyY2VQcm92aWRlcikKLSAgICB7Ci0gICAgICAgIEJhc2U6OmVuY29kZShlbmNvZGVyLCBz
b3VyY2VQcm92aWRlcik7Ci0gICAgICAgIG1fc291cmNlLmVuY29kZShlbmNvZGVyLCBzb3VyY2VQ
cm92aWRlci5zb3VyY2UoKS50b1N0cmluZygpKTsKLSAgICB9Ci0KLSAgICBTdHJpbmdTb3VyY2VQ
cm92aWRlciogZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNvdXJjZVByb3ZpZGVyU291cmNlVHlw
ZSBzb3VyY2VUeXBlKSBjb25zdAotICAgIHsKLSAgICAgICAgU3RyaW5nIGRlY29kZWRTb3VyY2Ug
PSBtX3NvdXJjZS5kZWNvZGUoZGVjb2Rlcik7Ci0gICAgICAgIFNvdXJjZU9yaWdpbiBkZWNvZGVk
U291cmNlT3JpZ2luID0gbV9zb3VyY2VPcmlnaW4uZGVjb2RlKGRlY29kZXIpOwotICAgICAgICBT
dHJpbmcgZGVjb2RlZFVSTCA9IG1fdXJsLmRlY29kZShkZWNvZGVyKTsKLSAgICAgICAgVGV4dFBv
c2l0aW9uIGRlY29kZWRTdGFydFBvc2l0aW9uID0gbV9zdGFydFBvc2l0aW9uLmRlY29kZShkZWNv
ZGVyKTsKLQotICAgICAgICBSZWY8U3RyaW5nU291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVy
ID0gU3RyaW5nU291cmNlUHJvdmlkZXI6OmNyZWF0ZShkZWNvZGVkU291cmNlLCBkZWNvZGVkU291
cmNlT3JpZ2luLCBVUkwoVVJMKCksIGRlY29kZWRVUkwpLCBkZWNvZGVkU3RhcnRQb3NpdGlvbiwg
c291cmNlVHlwZSk7Ci0gICAgICAgIEJhc2U6OmRlY29kZShkZWNvZGVyLCBzb3VyY2VQcm92aWRl
ci5nZXQoKSk7Ci0gICAgICAgIHJldHVybiAmc291cmNlUHJvdmlkZXIubGVha1JlZigpOwotICAg
IH0KLQotcHJpdmF0ZToKLSAgICBDYWNoZWRTdHJpbmcgbV9zb3VyY2U7Ci19OwotCi0jaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQotY2xhc3MgQ2FjaGVkV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlciA6
IHB1YmxpYyBDYWNoZWRTb3VyY2VQcm92aWRlclNoYXBlPFdlYkFzc2VtYmx5U291cmNlUHJvdmlk
ZXIsIENhY2hlZFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXI+IHsKLSAgICB1c2luZyBCYXNlID0g
Q2FjaGVkU291cmNlUHJvdmlkZXJTaGFwZTxXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyLCBDYWNo
ZWRXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyPjsKLQotcHVibGljOgotICAgIHZvaWQgZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXImIHNvdXJj
ZVByb3ZpZGVyKQotICAgIHsKLSAgICAgICAgQmFzZTo6ZW5jb2RlKGVuY29kZXIsIHNvdXJjZVBy
b3ZpZGVyKTsKLSAgICAgICAgbV9kYXRhLmVuY29kZShlbmNvZGVyLCBzb3VyY2VQcm92aWRlci5k
YXRhKCkpOwotICAgIH0KLQotICAgIFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXIqIGRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRl
Y29kZWREYXRhOwotICAgICAgICBTb3VyY2VPcmlnaW4gZGVjb2RlZFNvdXJjZU9yaWdpbiA9IG1f
c291cmNlT3JpZ2luLmRlY29kZShkZWNvZGVyKTsKLSAgICAgICAgU3RyaW5nIGRlY29kZWRVUkwg
PSBtX3VybC5kZWNvZGUoZGVjb2Rlcik7Ci0KLSAgICAgICAgbV9kYXRhLmRlY29kZShkZWNvZGVy
LCBkZWNvZGVkRGF0YSk7Ci0KLSAgICAgICAgUmVmPFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXI+
IHNvdXJjZVByb3ZpZGVyID0gV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKFdURk1v
dmUoZGVjb2RlZERhdGEpLCBkZWNvZGVkU291cmNlT3JpZ2luLCBVUkwoVVJMKCksIGRlY29kZWRV
UkwpKTsKLSAgICAgICAgQmFzZTo6ZGVjb2RlKGRlY29kZXIsIHNvdXJjZVByb3ZpZGVyLmdldCgp
KTsKLQotICAgICAgICByZXR1cm4gJnNvdXJjZVByb3ZpZGVyLmxlYWtSZWYoKTsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgQ2FjaGVkVmVjdG9yPHVpbnQ4X3Q+IG1fZGF0YTsKLX07Ci0jZW5kaWYK
LQotY2xhc3MgQ2FjaGVkU291cmNlUHJvdmlkZXIgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmpl
Y3Q8U291cmNlUHJvdmlkZXI+IHsKLXB1YmxpYzoKLSAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBTb3VyY2VQcm92aWRlciYgc291cmNlUHJvdmlkZXIpCi0gICAgewotICAg
ICAgICBtX3NvdXJjZVR5cGUgPSBzb3VyY2VQcm92aWRlci5zb3VyY2VUeXBlKCk7Ci0gICAgICAg
IHN3aXRjaCAobV9zb3VyY2VUeXBlKSB7Ci0gICAgICAgIGNhc2UgU291cmNlUHJvdmlkZXJTb3Vy
Y2VUeXBlOjpQcm9ncmFtOgotICAgICAgICBjYXNlIFNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6
TW9kdWxlOgotICAgICAgICAgICAgdGhpcy0+YWxsb2NhdGU8Q2FjaGVkU3RyaW5nU291cmNlUHJv
dmlkZXI+KGVuY29kZXIpLT5lbmNvZGUoZW5jb2RlciwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBT
dHJpbmdTb3VyY2VQcm92aWRlciY+KHNvdXJjZVByb3ZpZGVyKSk7Ci0gICAgICAgICAgICBicmVh
azsKLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgICAgIGNhc2UgU291cmNlUHJvdmlkZXJT
b3VyY2VUeXBlOjpXZWJBc3NlbWJseToKLSAgICAgICAgICAgIHRoaXMtPmFsbG9jYXRlPENhY2hl
ZFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXI+KGVuY29kZXIpLT5lbmNvZGUoZW5jb2RlciwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyJj4oc291cmNlUHJv
dmlkZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgU291cmNlUHJvdmlkZXIqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAot
ICAgIHsKLSAgICAgICAgc3dpdGNoIChtX3NvdXJjZVR5cGUpIHsKLSAgICAgICAgY2FzZSBTb3Vy
Y2VQcm92aWRlclNvdXJjZVR5cGU6OlByb2dyYW06Ci0gICAgICAgIGNhc2UgU291cmNlUHJvdmlk
ZXJTb3VyY2VUeXBlOjpNb2R1bGU6Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy0+YnVmZmVyPENh
Y2hlZFN0cmluZ1NvdXJjZVByb3ZpZGVyPigpLT5kZWNvZGUoZGVjb2RlciwgbV9zb3VyY2VUeXBl
KTsKLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgICAgIGNhc2UgU291cmNlUHJvdmlkZXJT
b3VyY2VUeXBlOjpXZWJBc3NlbWJseToKLSAgICAgICAgICAgIHJldHVybiB0aGlzLT5idWZmZXI8
Q2FjaGVkV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlcj4oKS0+ZGVjb2RlKGRlY29kZXIpOwotI2Vu
ZGlmCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICB9Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFNvdXJjZVByb3ZpZGVy
U291cmNlVHlwZSBtX3NvdXJjZVR5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBTb3VyY2U+
Ci1jbGFzcyBDYWNoZWRVbmxpbmtlZFNvdXJjZUNvZGVTaGFwZSA6IHB1YmxpYyBDYWNoZWRPYmpl
Y3Q8U291cmNlPiB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgVW5saW5rZWRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKQotICAgIHsKLSAgICAgICAgbV9w
cm92aWRlci5lbmNvZGUoZW5jb2Rlciwgc291cmNlQ29kZS5tX3Byb3ZpZGVyLmdldCgpKTsKLSAg
ICAgICAgbV9zdGFydE9mZnNldCA9IHNvdXJjZUNvZGUuc3RhcnRPZmZzZXQoKTsKLSAgICAgICAg
bV9lbmRPZmZzZXQgPSBzb3VyY2VDb2RlLmVuZE9mZnNldCgpOwotICAgIH0KLQotICAgIHZvaWQg
ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFVubGlua2VkU291cmNlQ29kZSYgc291cmNlQ29kZSkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHNvdXJjZUNvZGUubV9wcm92aWRlciA9IG1fcHJvdmlkZXIu
ZGVjb2RlKGRlY29kZXIpOwotICAgICAgICBzb3VyY2VDb2RlLm1fc3RhcnRPZmZzZXQgPSBtX3N0
YXJ0T2Zmc2V0OwotICAgICAgICBzb3VyY2VDb2RlLm1fZW5kT2Zmc2V0ID0gbV9lbmRPZmZzZXQ7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIENhY2hlZFB0cjxDYWNoZWRTb3VyY2VQcm92aWRlcj4g
bV9wcm92aWRlcjsKLSAgICBpbnQgbV9zdGFydE9mZnNldDsKLSAgICBpbnQgbV9lbmRPZmZzZXQ7
Ci19OwotCi0KLWNsYXNzIENhY2hlZFVubGlua2VkU291cmNlQ29kZSA6IHB1YmxpYyBDYWNoZWRV
bmxpbmtlZFNvdXJjZUNvZGVTaGFwZTxVbmxpbmtlZFNvdXJjZUNvZGU+IHsgfTsKLQotY2xhc3Mg
Q2FjaGVkU291cmNlQ29kZSA6IHB1YmxpYyBDYWNoZWRVbmxpbmtlZFNvdXJjZUNvZGVTaGFwZTxT
b3VyY2VDb2RlPiB7Ci0gICAgdXNpbmcgQmFzZSA9IENhY2hlZFVubGlua2VkU291cmNlQ29kZVNo
YXBlPFNvdXJjZUNvZGU+OwotCi1wdWJsaWM6Ci0gICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5j
b2RlciwgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSkKLSAgICB7Ci0gICAgICAgIEJhc2U6
OmVuY29kZShlbmNvZGVyLCBzb3VyY2VDb2RlKTsKLSAgICAgICAgbV9maXJzdExpbmUgPSBzb3Vy
Y2VDb2RlLmZpcnN0TGluZSgpLnplcm9CYXNlZEludCgpOwotICAgICAgICBtX3N0YXJ0Q29sdW1u
ID0gc291cmNlQ29kZS5zdGFydENvbHVtbigpLnplcm9CYXNlZEludCgpOwotICAgIH0KLQotICAg
IHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpIGNv
bnN0Ci0gICAgewotICAgICAgICBCYXNlOjpkZWNvZGUoZGVjb2Rlciwgc291cmNlQ29kZSk7Ci0g
ICAgICAgIHNvdXJjZUNvZGUubV9maXJzdExpbmUgPSBPcmRpbmFsTnVtYmVyOjpmcm9tWmVyb0Jh
c2VkSW50KG1fZmlyc3RMaW5lKTsKLSAgICAgICAgc291cmNlQ29kZS5tX3N0YXJ0Q29sdW1uID0g
T3JkaW5hbE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChtX3N0YXJ0Q29sdW1uKTsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgaW50IG1fZmlyc3RMaW5lOwotICAgIGludCBtX3N0YXJ0Q29sdW1uOwot
fTsKLQotY2xhc3MgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlIDogcHVibGljIENhY2hlZE9iamVj
dDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4gewotcHVibGljOgotICAgIHZvaWQgZW5jb2Rl
KEVuY29kZXImLCBjb25zdCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSYpOwotICAgIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBkZWNvZGUoRGVjb2RlciYpIGNvbnN0OwotCi0gICAgdW5z
aWduZWQgZmlyc3RMaW5lT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9maXJzdExpbmVPZmZzZXQ7
IH0KLSAgICB1bnNpZ25lZCBsaW5lQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDb3VudDsg
fQotICAgIHVuc2lnbmVkIHVubGlua2VkRnVuY3Rpb25OYW1lU3RhcnQoKSBjb25zdCB7IHJldHVy
biBtX3VubGlua2VkRnVuY3Rpb25OYW1lU3RhcnQ7IH0KLSAgICB1bnNpZ25lZCB1bmxpbmtlZEJv
ZHlTdGFydENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRCb2R5U3RhcnRDb2x1bW47
IH0KLSAgICB1bnNpZ25lZCB1bmxpbmtlZEJvZHlFbmRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBt
X3VubGlua2VkQm9keUVuZENvbHVtbjsgfQotICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gbV9zdGFydE9mZnNldDsgfQotICAgIHVuc2lnbmVkIHNvdXJjZUxlbmd0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fc291cmNlTGVuZ3RoOyB9Ci0gICAgdW5zaWduZWQgcGFyYW1ldGVy
c1N0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzU3RhcnRPZmZzZXQ7IH0K
LSAgICB1bnNpZ25lZCB0eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X3R5cGVQcm9maWxpbmdTdGFydE9mZnNldDsgfQotICAgIHVuc2lnbmVkIHR5cGVQcm9maWxpbmdF
bmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3R5cGVQcm9maWxpbmdFbmRPZmZzZXQ7IH0KLSAg
ICB1bnNpZ25lZCBwYXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVyQ291
bnQ7IH0KLQotICAgIENvZGVGZWF0dXJlcyBmZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVh
dHVyZXM7IH0KLSAgICBTb3VyY2VQYXJzZU1vZGUgc291cmNlUGFyc2VNb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zb3VyY2VQYXJzZU1vZGU7IH0KLQotICAgIHVuc2lnbmVkIGlzSW5TdHJpY3RDb250
ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pc0luU3RyaWN0Q29udGV4dDsgfQotICAgIHVuc2lnbmVk
IGhhc0NhcHR1cmVkVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDYXB0dXJlZFZhcmlh
YmxlczsgfQotICAgIHVuc2lnbmVkIGlzQnVpbHRpbkZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9pc0J1aWx0aW5GdW5jdGlvbjsgfQotICAgIHVuc2lnbmVkIGlzQnVpbHRpbkRlZmF1bHRDbGFz
c0NvbnN0cnVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9pc0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25z
dHJ1Y3RvcjsgfQotICAgIHVuc2lnbmVkIGNvbnN0cnVjdEFiaWxpdHkoKSBjb25zdCB7IHJldHVy
biBtX2NvbnN0cnVjdEFiaWxpdHk7IH0KLSAgICB1bnNpZ25lZCBjb25zdHJ1Y3RvcktpbmQoKSBj
b25zdCB7IHJldHVybiBtX2NvbnN0cnVjdG9yS2luZDsgfQotICAgIHVuc2lnbmVkIGZ1bmN0aW9u
TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rpb25Nb2RlOyB9Ci0gICAgdW5zaWduZWQgc2Ny
aXB0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NyaXB0TW9kZTsgfQotICAgIHVuc2lnbmVkIHN1
cGVyQmluZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fc3VwZXJCaW5kaW5nOyB9Ci0gICAgdW5zaWdu
ZWQgZGVyaXZlZENvbnRleHRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9kZXJpdmVkQ29udGV4dFR5
cGU7IH0KLQotICAgIElkZW50aWZpZXIgbmFtZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdCB7IHJl
dHVybiBtX25hbWUuZGVjb2RlKGRlY29kZXIpOyB9Ci0gICAgSWRlbnRpZmllciBlY21hTmFtZShE
ZWNvZGVyJiBkZWNvZGVyKSBjb25zdCB7IHJldHVybiBtX2VjbWFOYW1lLmRlY29kZShkZWNvZGVy
KTsgfQotICAgIElkZW50aWZpZXIgaW5mZXJyZWROYW1lKERlY29kZXImIGRlY29kZXIpIGNvbnN0
IHsgcmV0dXJuIG1faW5mZXJyZWROYW1lLmRlY29kZShkZWNvZGVyKTsgfQotCi1wcml2YXRlOgot
ICAgIHVuc2lnbmVkIG1fZmlyc3RMaW5lT2Zmc2V0OwotICAgIHVuc2lnbmVkIG1fbGluZUNvdW50
OwotICAgIHVuc2lnbmVkIG1fdW5saW5rZWRGdW5jdGlvbk5hbWVTdGFydDsKLSAgICB1bnNpZ25l
ZCBtX3VubGlua2VkQm9keVN0YXJ0Q29sdW1uOwotICAgIHVuc2lnbmVkIG1fdW5saW5rZWRCb2R5
RW5kQ29sdW1uOwotICAgIHVuc2lnbmVkIG1fc3RhcnRPZmZzZXQ7Ci0gICAgdW5zaWduZWQgbV9z
b3VyY2VMZW5ndGg7Ci0gICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJzU3RhcnRPZmZzZXQ7Ci0gICAg
dW5zaWduZWQgbV90eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQ7Ci0gICAgdW5zaWduZWQgbV90eXBl
UHJvZmlsaW5nRW5kT2Zmc2V0OwotICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyQ291bnQ7Ci0gICAg
Q29kZUZlYXR1cmVzIG1fZmVhdHVyZXM7Ci0gICAgU291cmNlUGFyc2VNb2RlIG1fc291cmNlUGFy
c2VNb2RlOwotICAgIHVuc2lnbmVkIG1faXNJblN0cmljdENvbnRleHQgOiAxOwotICAgIHVuc2ln
bmVkIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgOiAxOwotICAgIHVuc2lnbmVkIG1faXNCdWlsdGlu
RnVuY3Rpb24gOiAxOwotICAgIHVuc2lnbmVkIG1faXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3Ry
dWN0b3IgOiAxOwotICAgIHVuc2lnbmVkIG1fY29uc3RydWN0QWJpbGl0eTogMTsKLSAgICB1bnNp
Z25lZCBtX2NvbnN0cnVjdG9yS2luZCA6IDI7Ci0gICAgdW5zaWduZWQgbV9mdW5jdGlvbk1vZGUg
OiAyOyAvLyBGdW5jdGlvbk1vZGUKLSAgICB1bnNpZ25lZCBtX3NjcmlwdE1vZGU6IDE7IC8vIEpT
UGFyc2VyU2NyaXB0TW9kZQotICAgIHVuc2lnbmVkIG1fc3VwZXJCaW5kaW5nIDogMTsKLSAgICB1
bnNpZ25lZCBtX2Rlcml2ZWRDb250ZXh0VHlwZTogMjsKLQotICAgIENhY2hlZFNvdXJjZUNvZGUg
bV9jbGFzc1NvdXJjZTsKLQotICAgIENhY2hlZElkZW50aWZpZXIgbV9uYW1lOwotICAgIENhY2hl
ZElkZW50aWZpZXIgbV9lY21hTmFtZTsKLSAgICBDYWNoZWRJZGVudGlmaWVyIG1faW5mZXJyZWRO
YW1lOwotCi0gICAgQ2FjaGVkVmFyaWFibGVFbnZpcm9ubWVudCBtX3BhcmVudFNjb3BlVERaVmFy
aWFibGVzOwotCi0gICAgQ2FjaGVkV3JpdGVCYXJyaWVyPENhY2hlZEZ1bmN0aW9uQ29kZUJsb2Nr
LCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrPiBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ2FsbDsK
LSAgICBDYWNoZWRXcml0ZUJhcnJpZXI8Q2FjaGVkRnVuY3Rpb25Db2RlQmxvY2ssIFVubGlua2Vk
RnVuY3Rpb25Db2RlQmxvY2s+IG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7Ci19Owot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgotY2xhc3MgQ2FjaGVkQ29kZUJsb2Nr
IDogcHVibGljIENhY2hlZE9iamVjdDxDb2RlQmxvY2tUeXBlPiB7Ci1wdWJsaWM6Ci0gICAgdm9p
ZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFVubGlua2VkQ29kZUJsb2NrJik7Ci0gICAgdm9pZCBk
ZWNvZGUoRGVjb2RlciYsIFVubGlua2VkQ29kZUJsb2NrJikgY29uc3Q7Ci0KLSAgICBJbnN0cnVj
dGlvblN0cmVhbSogaW5zdHJ1Y3Rpb25zKERlY29kZXImIGRlY29kZXIpIGNvbnN0IHsgcmV0dXJu
IG1faW5zdHJ1Y3Rpb25zLmRlY29kZShkZWNvZGVyKTsgfQotCi0gICAgVmlydHVhbFJlZ2lzdGVy
IHRoaXNSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fdGhpc1JlZ2lzdGVyOyB9Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlUmVnaXN0
ZXI7IH0KLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZ2xvYmFsT2JqZWN0UmVnaXN0ZXIoKSBjb25zdCB7
IHJldHVybiBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyOyB9Ci0KLSAgICBTdHJpbmcgc291cmNlVVJM
RGlyZWN0aXZlKERlY29kZXImIGRlY29kZXIpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlVVJMRGly
ZWN0aXZlLmRlY29kZShkZWNvZGVyKTsgfQotICAgIFN0cmluZyBzb3VyY2VNYXBwaW5nVVJMRGly
ZWN0aXZlKERlY29kZXImIGRlY29kZXIpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlTWFwcGluZ1VS
TERpcmVjdGl2ZS5kZWNvZGUoZGVjb2Rlcik7IH0KLQotICAgIHVuc2lnbmVkIHVzZXNFdmFsKCkg
Y29uc3QgeyByZXR1cm4gbV91c2VzRXZhbDsgfQotICAgIHVuc2lnbmVkIGlzU3RyaWN0TW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1faXNTdHJpY3RNb2RlOyB9Ci0gICAgdW5zaWduZWQgaXNDb25zdHJ1
Y3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faXNDb25zdHJ1Y3RvcjsgfQotICAgIHVuc2lnbmVkIGhh
c0NhcHR1cmVkVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDYXB0dXJlZFZhcmlhYmxl
czsgfQotICAgIHVuc2lnbmVkIGlzQnVpbHRpbkZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9p
c0J1aWx0aW5GdW5jdGlvbjsgfQotICAgIHVuc2lnbmVkIHN1cGVyQmluZGluZygpIGNvbnN0IHsg
cmV0dXJuIG1fc3VwZXJCaW5kaW5nOyB9Ci0gICAgdW5zaWduZWQgc2NyaXB0TW9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2NyaXB0TW9kZTsgfQotICAgIHVuc2lnbmVkIGlzQXJyb3dGdW5jdGlvbkNv
bnRleHQoKSBjb25zdCB7IHJldHVybiBtX2lzQXJyb3dGdW5jdGlvbkNvbnRleHQ7IH0KLSAgICB1
bnNpZ25lZCBpc0NsYXNzQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDbGFzc0NvbnRleHQ7
IH0KLSAgICB1bnNpZ25lZCB3YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkgY29uc3Qg
eyByZXR1cm4gbV93YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzOyB9Ci0gICAgdW5zaWdu
ZWQgY29uc3RydWN0b3JLaW5kKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdHJ1Y3RvcktpbmQ7IH0K
LSAgICB1bnNpZ25lZCBkZXJpdmVkQ29udGV4dFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2Rlcml2
ZWRDb250ZXh0VHlwZTsgfQotICAgIHVuc2lnbmVkIGV2YWxDb250ZXh0VHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZXZhbENvbnRleHRUeXBlOyB9Ci0gICAgdW5zaWduZWQgaGFzVGFpbENhbGxzKCkg
Y29uc3QgeyByZXR1cm4gbV9oYXNUYWlsQ2FsbHM7IH0KLSAgICB1bnNpZ25lZCBsaW5lQ291bnQo
KSBjb25zdCB7IHJldHVybiBtX2xpbmVDb3VudDsgfQotICAgIHVuc2lnbmVkIGVuZENvbHVtbigp
IGNvbnN0IHsgcmV0dXJuIG1fZW5kQ29sdW1uOyB9Ci0KLSAgICBpbnQgbnVtVmFycygpIGNvbnN0
IHsgcmV0dXJuIG1fbnVtVmFyczsgfQotICAgIGludCBudW1DYWxsZWVMb2NhbHMoKSBjb25zdCB7
IHJldHVybiBtX251bUNhbGxlZUxvY2FsczsgfQotICAgIGludCBudW1QYXJhbWV0ZXJzKCkgY29u
c3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9Ci0KLSAgICBDb2RlRmVhdHVyZXMgZmVhdHVy
ZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzOyB9Ci0gICAgU291cmNlUGFyc2VNb2RlIHBh
cnNlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyc2VNb2RlOyB9Ci0gICAgQ29kZVR5cGUgY29k
ZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVUeXBlOyB9Ci0KLSAgICBVbmxpbmtlZENvZGVC
bG9jazo6UmFyZURhdGEqIHJhcmVEYXRhKERlY29kZXImIGRlY29kZXIpIGNvbnN0IHsgcmV0dXJu
IG1fcmFyZURhdGEuZGVjb2RlQXNQdHIoZGVjb2Rlcik7IH0KLQotcHJpdmF0ZToKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgbV90aGlzUmVnaXN0ZXI7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG1fc2NvcGVS
ZWdpc3RlcjsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9nbG9iYWxPYmplY3RSZWdpc3RlcjsKLQot
ICAgIHVuc2lnbmVkIG1fdXNlc0V2YWwgOiAxOwotICAgIHVuc2lnbmVkIG1faXNTdHJpY3RNb2Rl
IDogMTsKLSAgICB1bnNpZ25lZCBtX2lzQ29uc3RydWN0b3IgOiAxOwotICAgIHVuc2lnbmVkIG1f
aGFzQ2FwdHVyZWRWYXJpYWJsZXMgOiAxOwotICAgIHVuc2lnbmVkIG1faXNCdWlsdGluRnVuY3Rp
b24gOiAxOwotICAgIHVuc2lnbmVkIG1fc3VwZXJCaW5kaW5nIDogMTsKLSAgICB1bnNpZ25lZCBt
X3NjcmlwdE1vZGU6IDE7Ci0gICAgdW5zaWduZWQgbV9pc0Fycm93RnVuY3Rpb25Db250ZXh0IDog
MTsKLSAgICB1bnNpZ25lZCBtX2lzQ2xhc3NDb250ZXh0IDogMTsKLSAgICB1bnNpZ25lZCBtX3dh
c0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMgOiAxOwotICAgIHVuc2lnbmVkIG1fY29uc3Ry
dWN0b3JLaW5kIDogMjsKLSAgICB1bnNpZ25lZCBtX2Rlcml2ZWRDb250ZXh0VHlwZSA6IDI7Ci0g
ICAgdW5zaWduZWQgbV9ldmFsQ29udGV4dFR5cGUgOiAyOwotICAgIHVuc2lnbmVkIG1faGFzVGFp
bENhbGxzIDogMTsKLQotICAgIHVuc2lnbmVkIG1fbGluZUNvdW50OwotICAgIHVuc2lnbmVkIG1f
ZW5kQ29sdW1uOwotCi0gICAgaW50IG1fbnVtVmFyczsKLSAgICBpbnQgbV9udW1DYWxsZWVMb2Nh
bHM7Ci0gICAgaW50IG1fbnVtUGFyYW1ldGVyczsKLQotICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1
cmVzOwotICAgIFNvdXJjZVBhcnNlTW9kZSBtX3BhcnNlTW9kZTsKLSAgICBDb2RlVHlwZSBtX2Nv
ZGVUeXBlOwotCi0gICAgc3RkOjphcnJheTx1bnNpZ25lZCwgTGlua1RpbWVDb25zdGFudENvdW50
PiBtX2xpbmtUaW1lQ29uc3RhbnRzOwotICAgIENhY2hlZE1ldGFkYXRhVGFibGUgbV9tZXRhZGF0
YTsKLQotICAgIENhY2hlZE9wdGlvbmFsPENhY2hlZENvZGVCbG9ja1JhcmVEYXRhPiBtX3JhcmVE
YXRhOwotCi0gICAgQ2FjaGVkU3RyaW5nIG1fc291cmNlVVJMRGlyZWN0aXZlOwotICAgIENhY2hl
ZFN0cmluZyBtX3NvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmU7Ci0KLSAgICBDYWNoZWRQdHI8Q2Fj
aGVkSW5zdHJ1Y3Rpb25TdHJlYW0+IG1faW5zdHJ1Y3Rpb25zOwotICAgIENhY2hlZFZlY3RvcjxJ
bnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0PiBtX2p1bXBUYXJnZXRzOwotICAgIENhY2hlZFZlY3Rv
cjxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0PiBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25z
OwotICAgIENhY2hlZFZlY3RvcjxDYWNoZWRKU1ZhbHVlPiBtX2NvbnN0YW50UmVnaXN0ZXJzOwot
ICAgIENhY2hlZFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+IG1fY29uc3RhbnRzU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uOwotICAgIENhY2hlZFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJ
bmZvPiBtX2V4cHJlc3Npb25JbmZvOwotICAgIENhY2hlZEhhc2hNYXA8SW5zdHJ1Y3Rpb25TdHJl
YW06Ok9mZnNldCwgaW50PiBtX291dE9mTGluZUp1bXBUYXJnZXRzOwotCi0gICAgQ2FjaGVkVmVj
dG9yPENhY2hlZENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiBtX2NvbnN0YW50SWRlbnRpZmll
clNldHM7Ci0gICAgQ2FjaGVkVmVjdG9yPENhY2hlZElkZW50aWZpZXI+IG1faWRlbnRpZmllcnM7
Ci0gICAgQ2FjaGVkVmVjdG9yPENhY2hlZEJpdFZlY3Rvcj4gbV9iaXRWZWN0b3JzOwotICAgIENh
Y2hlZFZlY3RvcjxDYWNoZWRXcml0ZUJhcnJpZXI8Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlPj4g
bV9mdW5jdGlvbkRlY2xzOwotICAgIENhY2hlZFZlY3RvcjxDYWNoZWRXcml0ZUJhcnJpZXI8Q2Fj
aGVkRnVuY3Rpb25FeGVjdXRhYmxlPj4gbV9mdW5jdGlvbkV4cHJzOwotfTsKLQotY2xhc3MgQ2Fj
aGVkUHJvZ3JhbUNvZGVCbG9jayA6IHB1YmxpYyBDYWNoZWRDb2RlQmxvY2s8VW5saW5rZWRQcm9n
cmFtQ29kZUJsb2NrPiB7Ci0gICAgdXNpbmcgQmFzZSA9IENhY2hlZENvZGVCbG9jazxVbmxpbmtl
ZFByb2dyYW1Db2RlQmxvY2s+OwotCi1wdWJsaWM6Ci0gICAgdm9pZCBlbmNvZGUoRW5jb2RlciYg
ZW5jb2RlciwgY29uc3QgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrJiBjb2RlQmxvY2spCi0gICAg
ewotICAgICAgICBCYXNlOjplbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrKTsKLSAgICAgICAgbV92
YXJEZWNsYXJhdGlvbnMuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX3ZhckRlY2xhcmF0aW9u
cyk7Ci0gICAgICAgIG1fbGV4aWNhbERlY2xhcmF0aW9ucy5lbmNvZGUoZW5jb2RlciwgY29kZUJs
b2NrLm1fbGV4aWNhbERlY2xhcmF0aW9ucyk7Ci0gICAgfQotCi0gICAgVW5saW5rZWRQcm9ncmFt
Q29kZUJsb2NrKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKLSAgICB7Ci0gICAgICAg
IFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPihkZWNvZGVyLnZtKCkuaGVhcCkpIFVu
bGlua2VkUHJvZ3JhbUNvZGVCbG9jayhkZWNvZGVyLCAqdGhpcyk7Ci0gICAgICAgIGNvZGVCbG9j
ay0+ZmluaXNoQ3JlYXRpb24oZGVjb2Rlci52bSgpKTsKLSAgICAgICAgQmFzZTo6ZGVjb2RlKGRl
Y29kZXIsICpjb2RlQmxvY2spOwotICAgICAgICBtX3ZhckRlY2xhcmF0aW9ucy5kZWNvZGUoZGVj
b2RlciwgY29kZUJsb2NrLT5tX3ZhckRlY2xhcmF0aW9ucyk7Ci0gICAgICAgIG1fbGV4aWNhbERl
Y2xhcmF0aW9ucy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLT5tX2xleGljYWxEZWNsYXJhdGlv
bnMpOwotICAgICAgICByZXR1cm4gY29kZUJsb2NrOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBD
YWNoZWRWYXJpYWJsZUVudmlyb25tZW50IG1fdmFyRGVjbGFyYXRpb25zOwotICAgIENhY2hlZFZh
cmlhYmxlRW52aXJvbm1lbnQgbV9sZXhpY2FsRGVjbGFyYXRpb25zOwotfTsKLQotY2xhc3MgQ2Fj
aGVkTW9kdWxlQ29kZUJsb2NrIDogcHVibGljIENhY2hlZENvZGVCbG9jazxVbmxpbmtlZE1vZHVs
ZVByb2dyYW1Db2RlQmxvY2s+IHsKLSAgICB1c2luZyBCYXNlID0gQ2FjaGVkQ29kZUJsb2NrPFVu
bGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz47Ci0KLXB1YmxpYzoKLSAgICB2b2lkIGVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sm
IGNvZGVCbG9jaykKLSAgICB7Ci0gICAgICAgIEJhc2U6OmVuY29kZShlbmNvZGVyLCBjb2RlQmxv
Y2spOwotICAgICAgICBtX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lz
dGVyT2Zmc2V0ID0gY29kZUJsb2NrLm1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0
YW50UmVnaXN0ZXJPZmZzZXQ7Ci0gICAgfQotCi0gICAgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIFVu
bGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPihkZWNvZGVyLnZtKCku
aGVhcCkpIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayhkZWNvZGVyLCAqdGhpcyk7Ci0g
ICAgICAgIGNvZGVCbG9jay0+ZmluaXNoQ3JlYXRpb24oZGVjb2Rlci52bSgpKTsKLSAgICAgICAg
QmFzZTo6ZGVjb2RlKGRlY29kZXIsICpjb2RlQmxvY2spOwotICAgICAgICBjb2RlQmxvY2stPm1f
bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQgPSBtX21v
ZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0OwotICAgICAg
ICByZXR1cm4gY29kZUJsb2NrOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbnQgbV9tb2R1bGVF
bnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldDsKLX07Ci0KLWNsYXNz
IENhY2hlZEV2YWxDb2RlQmxvY2sgOiBwdWJsaWMgQ2FjaGVkQ29kZUJsb2NrPFVubGlua2VkRXZh
bENvZGVCbG9jaz4gewotICAgIHVzaW5nIEJhc2UgPSBDYWNoZWRDb2RlQmxvY2s8VW5saW5rZWRF
dmFsQ29kZUJsb2NrPjsKLQotcHVibGljOgotICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IFVubGlua2VkRXZhbENvZGVCbG9jayYgY29kZUJsb2NrKQotICAgIHsKLSAgICAg
ICAgQmFzZTo6ZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jayk7Ci0gICAgICAgIG1fdmFyaWFibGVz
LmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV92YXJpYWJsZXMpOwotICAgICAgICBtX2Z1bmN0
aW9uSG9pc3RpbmdDYW5kaWRhdGVzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9mdW5jdGlv
bkhvaXN0aW5nQ2FuZGlkYXRlcyk7Ci0gICAgfQotCi0gICAgVW5saW5rZWRFdmFsQ29kZUJsb2Nr
KiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIFVubGlua2Vk
RXZhbENvZGVCbG9jayogY29kZUJsb2NrID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5s
aW5rZWRFdmFsQ29kZUJsb2NrPihkZWNvZGVyLnZtKCkuaGVhcCkpIFVubGlua2VkRXZhbENvZGVC
bG9jayhkZWNvZGVyLCAqdGhpcyk7Ci0gICAgICAgIGNvZGVCbG9jay0+ZmluaXNoQ3JlYXRpb24o
ZGVjb2Rlci52bSgpKTsKLSAgICAgICAgQmFzZTo6ZGVjb2RlKGRlY29kZXIsICpjb2RlQmxvY2sp
OwotICAgICAgICBtX3ZhcmlhYmxlcy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLT5tX3Zhcmlh
Ymxlcyk7Ci0gICAgICAgIG1fZnVuY3Rpb25Ib2lzdGluZ0NhbmRpZGF0ZXMuZGVjb2RlKGRlY29k
ZXIsIGNvZGVCbG9jay0+bV9mdW5jdGlvbkhvaXN0aW5nQ2FuZGlkYXRlcyk7Ci0gICAgICAgIHJl
dHVybiBjb2RlQmxvY2s7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIENhY2hlZFZlY3RvcjxDYWNo
ZWRJZGVudGlmaWVyLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV92YXJpYWJsZXM7Ci0gICAg
Q2FjaGVkVmVjdG9yPENhY2hlZElkZW50aWZpZXIsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBt
X2Z1bmN0aW9uSG9pc3RpbmdDYW5kaWRhdGVzOwotfTsKLQotY2xhc3MgQ2FjaGVkRnVuY3Rpb25D
b2RlQmxvY2sgOiBwdWJsaWMgQ2FjaGVkQ29kZUJsb2NrPFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2s+IHsKLSAgICB1c2luZyBCYXNlID0gQ2FjaGVkQ29kZUJsb2NrPFVubGlua2VkRnVuY3Rpb25D
b2RlQmxvY2s+OwotCi1wdWJsaWM6Ci0gICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayYgY29kZUJsb2NrKQotICAgIHsKLSAgICAg
ICAgQmFzZTo6ZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jayk7Ci0gICAgfQotCi0gICAgVW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9jayogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0Ci0gICAg
ewotICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrPihkZWNvZGVyLnZt
KCkuaGVhcCkpIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2soZGVjb2RlciwgKnRoaXMpOwotICAg
ICAgICBjb2RlQmxvY2stPmZpbmlzaENyZWF0aW9uKGRlY29kZXIudm0oKSk7Ci0gICAgICAgIEJh
c2U6OmRlY29kZShkZWNvZGVyLCAqY29kZUJsb2NrKTsKLSAgICAgICAgcmV0dXJuIGNvZGVCbG9j
azsKLSAgICB9Ci19OwotCi1BTFdBWVNfSU5MSU5FIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6
OlVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2soRGVjb2RlciYgZGVjb2RlciwgY29uc3QgQ2FjaGVk
RnVuY3Rpb25Db2RlQmxvY2smIGNhY2hlZENvZGVCbG9jaykKLSAgICA6IEJhc2UoZGVjb2Rlciwg
ZGVjb2Rlci52bSgpLnVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGNh
Y2hlZENvZGVCbG9jaykKLXsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBDYWNo
ZWRDb2RlQmxvY2tUeXBlSW1wbDsKLQotZW51bSBDYWNoZWRDb2RlQmxvY2tUYWcgewotICAgIENh
Y2hlZFByb2dyYW1Db2RlQmxvY2tUYWcsCi0gICAgQ2FjaGVkTW9kdWxlQ29kZUJsb2NrVGFnLAot
ICAgIENhY2hlZEV2YWxDb2RlQmxvY2tUYWcsCi19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgQ2Fj
aGVkQ29kZUJsb2NrVHlwZUltcGw8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPiB7Ci0gICAgdXNp
bmcgdHlwZSA9IENhY2hlZFByb2dyYW1Db2RlQmxvY2s7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBD
YWNoZWRDb2RlQmxvY2tUYWcgdGFnID0gQ2FjaGVkUHJvZ3JhbUNvZGVCbG9ja1RhZzsKLX07Ci0K
LXRlbXBsYXRlPD4KLXN0cnVjdCBDYWNoZWRDb2RlQmxvY2tUeXBlSW1wbDxVbmxpbmtlZE1vZHVs
ZVByb2dyYW1Db2RlQmxvY2s+IHsKLSAgICB1c2luZyB0eXBlID0gQ2FjaGVkTW9kdWxlQ29kZUJs
b2NrOwotICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVkQ29kZUJsb2NrVGFnIHRhZyA9IENhY2hl
ZE1vZHVsZUNvZGVCbG9ja1RhZzsKLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBDYWNoZWRDb2Rl
QmxvY2tUeXBlSW1wbDxVbmxpbmtlZEV2YWxDb2RlQmxvY2s+IHsKLSAgICB1c2luZyB0eXBlID0g
Q2FjaGVkRXZhbENvZGVCbG9jazsKLSAgICBzdGF0aWMgY29uc3RleHByIENhY2hlZENvZGVCbG9j
a1RhZyB0YWcgPSBDYWNoZWRFdmFsQ29kZUJsb2NrVGFnOwotfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLXVzaW5nIENhY2hlZENvZGVCbG9ja1R5cGUgPSB0eXBlbmFtZSBDYWNoZWRDb2RlQmxv
Y2tUeXBlSW1wbDxUPjo6dHlwZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4K
LUFMV0FZU19JTkxJTkUgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKERlY29k
ZXImIGRlY29kZXIsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBDYWNoZWRDb2RlQmxvY2s8
Q29kZUJsb2NrVHlwZT4mIGNhY2hlZENvZGVCbG9jaykKLSAgICA6IEJhc2UoZGVjb2Rlci52bSgp
LCBzdHJ1Y3R1cmUpCi0gICAgLCBtX2luc3RydWN0aW9ucyhjYWNoZWRDb2RlQmxvY2suaW5zdHJ1
Y3Rpb25zKGRlY29kZXIpKQotICAgICwgbV9saXZlbmVzcyhudWxscHRyKQotICAgICwgbV90aGlz
UmVnaXN0ZXIoY2FjaGVkQ29kZUJsb2NrLnRoaXNSZWdpc3RlcigpKQotICAgICwgbV9zY29wZVJl
Z2lzdGVyKGNhY2hlZENvZGVCbG9jay5zY29wZVJlZ2lzdGVyKCkpCi0gICAgLCBtX2dsb2JhbE9i
amVjdFJlZ2lzdGVyKGNhY2hlZENvZGVCbG9jay5nbG9iYWxPYmplY3RSZWdpc3RlcigpKQotCi0g
ICAgLCBtX3NvdXJjZVVSTERpcmVjdGl2ZShjYWNoZWRDb2RlQmxvY2suc291cmNlVVJMRGlyZWN0
aXZlKGRlY29kZXIpKQotICAgICwgbV9zb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlKGNhY2hlZENv
ZGVCbG9jay5zb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlKGRlY29kZXIpKQotCi0gICAgLCBtX3Vz
ZXNFdmFsKGNhY2hlZENvZGVCbG9jay51c2VzRXZhbCgpKQotICAgICwgbV9pc1N0cmljdE1vZGUo
Y2FjaGVkQ29kZUJsb2NrLmlzU3RyaWN0TW9kZSgpKQotICAgICwgbV9pc0NvbnN0cnVjdG9yKGNh
Y2hlZENvZGVCbG9jay5pc0NvbnN0cnVjdG9yKCkpCi0gICAgLCBtX2hhc0NhcHR1cmVkVmFyaWFi
bGVzKGNhY2hlZENvZGVCbG9jay5oYXNDYXB0dXJlZFZhcmlhYmxlcygpKQotICAgICwgbV9pc0J1
aWx0aW5GdW5jdGlvbihjYWNoZWRDb2RlQmxvY2suaXNCdWlsdGluRnVuY3Rpb24oKSkKLSAgICAs
IG1fc3VwZXJCaW5kaW5nKGNhY2hlZENvZGVCbG9jay5zdXBlckJpbmRpbmcoKSkKLSAgICAsIG1f
c2NyaXB0TW9kZShjYWNoZWRDb2RlQmxvY2suc2NyaXB0TW9kZSgpKQotICAgICwgbV9pc0Fycm93
RnVuY3Rpb25Db250ZXh0KGNhY2hlZENvZGVCbG9jay5pc0Fycm93RnVuY3Rpb25Db250ZXh0KCkp
Ci0gICAgLCBtX2lzQ2xhc3NDb250ZXh0KGNhY2hlZENvZGVCbG9jay5pc0NsYXNzQ29udGV4dCgp
KQotICAgICwgbV93YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKGNhY2hlZENvZGVCbG9j
ay53YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkpCi0gICAgLCBtX2NvbnN0cnVjdG9y
S2luZChjYWNoZWRDb2RlQmxvY2suY29uc3RydWN0b3JLaW5kKCkpCi0gICAgLCBtX2Rlcml2ZWRD
b250ZXh0VHlwZShjYWNoZWRDb2RlQmxvY2suZGVyaXZlZENvbnRleHRUeXBlKCkpCi0gICAgLCBt
X2V2YWxDb250ZXh0VHlwZShjYWNoZWRDb2RlQmxvY2suZXZhbENvbnRleHRUeXBlKCkpCi0gICAg
LCBtX2hhc1RhaWxDYWxscyhjYWNoZWRDb2RlQmxvY2suaGFzVGFpbENhbGxzKCkpCi0gICAgLCBt
X2xpbmVDb3VudChjYWNoZWRDb2RlQmxvY2subGluZUNvdW50KCkpCi0gICAgLCBtX2VuZENvbHVt
bihjYWNoZWRDb2RlQmxvY2suZW5kQ29sdW1uKCkpCi0gICAgLCBtX251bVZhcnMoY2FjaGVkQ29k
ZUJsb2NrLm51bVZhcnMoKSkKLSAgICAsIG1fbnVtQ2FsbGVlTG9jYWxzKGNhY2hlZENvZGVCbG9j
ay5udW1DYWxsZWVMb2NhbHMoKSkKLSAgICAsIG1fbnVtUGFyYW1ldGVycyhjYWNoZWRDb2RlQmxv
Y2subnVtUGFyYW1ldGVycygpKQotICAgICwgbV9mZWF0dXJlcyhjYWNoZWRDb2RlQmxvY2suZmVh
dHVyZXMoKSkKLSAgICAsIG1fcGFyc2VNb2RlKGNhY2hlZENvZGVCbG9jay5wYXJzZU1vZGUoKSkK
LSAgICAsIG1fY29kZVR5cGUoY2FjaGVkQ29kZUJsb2NrLmNvZGVUeXBlKCkpCi0gICAgLCBtX3Jh
cmVEYXRhKGNhY2hlZENvZGVCbG9jay5yYXJlRGF0YShkZWNvZGVyKSkKLXsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KLUFMV0FZU19JTkxJTkUgdm9pZCBDYWNoZWRDb2Rl
QmxvY2s8Q29kZUJsb2NrVHlwZT46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBVbmxpbmtlZENv
ZGVCbG9jayYgY29kZUJsb2NrKSBjb25zdAotewotICAgIGZvciAodW5zaWduZWQgaSA9IExpbmtU
aW1lQ29uc3RhbnRDb3VudDsgaS0tOykKLSAgICAgICAgY29kZUJsb2NrLm1fbGlua1RpbWVDb25z
dGFudHNbaV0gPSBtX2xpbmtUaW1lQ29uc3RhbnRzW2ldOwotCi0gICAgbV9tZXRhZGF0YS5kZWNv
ZGUoZGVjb2RlciwgY29kZUJsb2NrLm1fbWV0YWRhdGEpOwotICAgIG1fcHJvcGVydHlBY2Nlc3NJ
bnN0cnVjdGlvbnMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX3Byb3BlcnR5QWNjZXNzSW5z
dHJ1Y3Rpb25zKTsKLSAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmRlY29kZShkZWNvZGVyLCBjb2Rl
QmxvY2subV9jb25zdGFudFJlZ2lzdGVycywgJmNvZGVCbG9jayk7Ci0gICAgbV9jb25zdGFudHNT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24uZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX2NvbnN0
YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbik7Ci0gICAgbV9leHByZXNzaW9uSW5mby5kZWNv
ZGUoZGVjb2RlciwgY29kZUJsb2NrLm1fZXhwcmVzc2lvbkluZm8pOwotICAgIG1fb3V0T2ZMaW5l
SnVtcFRhcmdldHMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX291dE9mTGluZUp1bXBUYXJn
ZXRzKTsKLSAgICBtX2p1bXBUYXJnZXRzLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9qdW1w
VGFyZ2V0cyk7Ci0gICAgbV9jb25zdGFudElkZW50aWZpZXJTZXRzLmRlY29kZShkZWNvZGVyLCBj
b2RlQmxvY2subV9jb25zdGFudElkZW50aWZpZXJTZXRzKTsKLSAgICBtX2lkZW50aWZpZXJzLmRl
Y29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9pZGVudGlmaWVycyk7Ci0gICAgbV9iaXRWZWN0b3Jz
LmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9iaXRWZWN0b3JzKTsKLSAgICBtX2Z1bmN0aW9u
RGVjbHMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX2Z1bmN0aW9uRGVjbHMsICZjb2RlQmxv
Y2spOwotICAgIG1fZnVuY3Rpb25FeHBycy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLm1fZnVu
Y3Rpb25FeHBycywgJmNvZGVCbG9jayk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgVW5saW5rZWRQcm9n
cmFtQ29kZUJsb2NrOjpVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2soRGVjb2RlciYgZGVjb2Rlciwg
Y29uc3QgQ2FjaGVkUHJvZ3JhbUNvZGVCbG9jayYgY2FjaGVkQ29kZUJsb2NrKQotICAgIDogQmFz
ZShkZWNvZGVyLCBkZWNvZGVyLnZtKCkudW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJl
LmdldCgpLCBjYWNoZWRDb2RlQmxvY2spCi17Ci19Ci0KLUFMV0FZU19JTkxJTkUgVW5saW5rZWRN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2soRGVj
b2RlciYgZGVjb2RlciwgY29uc3QgQ2FjaGVkTW9kdWxlQ29kZUJsb2NrJiBjYWNoZWRDb2RlQmxv
Y2spCi0gICAgOiBCYXNlKGRlY29kZXIsIGRlY29kZXIudm0oKS51bmxpbmtlZE1vZHVsZVByb2dy
YW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGNhY2hlZENvZGVCbG9jaykKLXsKLX0KLQotQUxX
QVlTX0lOTElORSBVbmxpbmtlZEV2YWxDb2RlQmxvY2s6OlVubGlua2VkRXZhbENvZGVCbG9jayhE
ZWNvZGVyJiBkZWNvZGVyLCBjb25zdCBDYWNoZWRFdmFsQ29kZUJsb2NrJiBjYWNoZWRDb2RlQmxv
Y2spCi0gICAgOiBCYXNlKGRlY29kZXIsIGRlY29kZXIudm0oKS51bmxpbmtlZEV2YWxDb2RlQmxv
Y2tTdHJ1Y3R1cmUuZ2V0KCksIGNhY2hlZENvZGVCbG9jaykKLXsKLX0KLQotQUxXQVlTX0lOTElO
RSB2b2lkIENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIs
IGNvbnN0IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlJiBleGVjdXRhYmxlKQotewotICAgIG1f
Zmlyc3RMaW5lT2Zmc2V0ID0gZXhlY3V0YWJsZS5tX2ZpcnN0TGluZU9mZnNldDsKLSAgICBtX2xp
bmVDb3VudCA9IGV4ZWN1dGFibGUubV9saW5lQ291bnQ7Ci0gICAgbV91bmxpbmtlZEZ1bmN0aW9u
TmFtZVN0YXJ0ID0gZXhlY3V0YWJsZS5tX3VubGlua2VkRnVuY3Rpb25OYW1lU3RhcnQ7Ci0gICAg
bV91bmxpbmtlZEJvZHlTdGFydENvbHVtbiA9IGV4ZWN1dGFibGUubV91bmxpbmtlZEJvZHlTdGFy
dENvbHVtbjsKLSAgICBtX3VubGlua2VkQm9keUVuZENvbHVtbiA9IGV4ZWN1dGFibGUubV91bmxp
bmtlZEJvZHlFbmRDb2x1bW47Ci0gICAgbV9zdGFydE9mZnNldCA9IGV4ZWN1dGFibGUubV9zdGFy
dE9mZnNldDsKLSAgICBtX3NvdXJjZUxlbmd0aCA9IGV4ZWN1dGFibGUubV9zb3VyY2VMZW5ndGg7
Ci0gICAgbV9wYXJhbWV0ZXJzU3RhcnRPZmZzZXQgPSBleGVjdXRhYmxlLm1fcGFyYW1ldGVyc1N0
YXJ0T2Zmc2V0OwotICAgIG1fdHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0ID0gZXhlY3V0YWJsZS5t
X3R5cGVQcm9maWxpbmdTdGFydE9mZnNldDsKLSAgICBtX3R5cGVQcm9maWxpbmdFbmRPZmZzZXQg
PSBleGVjdXRhYmxlLm1fdHlwZVByb2ZpbGluZ0VuZE9mZnNldDsKLSAgICBtX3BhcmFtZXRlckNv
dW50ID0gZXhlY3V0YWJsZS5tX3BhcmFtZXRlckNvdW50OwotCi0gICAgbV9mZWF0dXJlcyA9IGV4
ZWN1dGFibGUubV9mZWF0dXJlczsKLSAgICBtX3NvdXJjZVBhcnNlTW9kZSA9IGV4ZWN1dGFibGUu
bV9zb3VyY2VQYXJzZU1vZGU7Ci0KLSAgICBtX2lzSW5TdHJpY3RDb250ZXh0ID0gZXhlY3V0YWJs
ZS5tX2lzSW5TdHJpY3RDb250ZXh0OwotICAgIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgPSBleGVj
dXRhYmxlLm1faGFzQ2FwdHVyZWRWYXJpYWJsZXM7Ci0gICAgbV9pc0J1aWx0aW5GdW5jdGlvbiA9
IGV4ZWN1dGFibGUubV9pc0J1aWx0aW5GdW5jdGlvbjsKLSAgICBtX2lzQnVpbHRpbkRlZmF1bHRD
bGFzc0NvbnN0cnVjdG9yID0gZXhlY3V0YWJsZS5tX2lzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0
cnVjdG9yOwotICAgIG1fY29uc3RydWN0QWJpbGl0eSA9IGV4ZWN1dGFibGUubV9jb25zdHJ1Y3RB
YmlsaXR5OwotICAgIG1fY29uc3RydWN0b3JLaW5kID0gZXhlY3V0YWJsZS5tX2NvbnN0cnVjdG9y
S2luZDsKLSAgICBtX2Z1bmN0aW9uTW9kZSA9IGV4ZWN1dGFibGUubV9mdW5jdGlvbk1vZGU7Ci0g
ICAgbV9zY3JpcHRNb2RlID0gZXhlY3V0YWJsZS5tX3NjcmlwdE1vZGU7Ci0gICAgbV9zdXBlckJp
bmRpbmcgPSBleGVjdXRhYmxlLm1fc3VwZXJCaW5kaW5nOwotICAgIG1fZGVyaXZlZENvbnRleHRU
eXBlID0gZXhlY3V0YWJsZS5tX2Rlcml2ZWRDb250ZXh0VHlwZTsKLQotICAgIG1fY2xhc3NTb3Vy
Y2UuZW5jb2RlKGVuY29kZXIsIGV4ZWN1dGFibGUubV9jbGFzc1NvdXJjZSk7Ci0KLSAgICBtX25h
bWUuZW5jb2RlKGVuY29kZXIsIGV4ZWN1dGFibGUubmFtZSgpKTsKLSAgICBtX2VjbWFOYW1lLmVu
Y29kZShlbmNvZGVyLCBleGVjdXRhYmxlLmVjbWFOYW1lKCkpOwotICAgIG1faW5mZXJyZWROYW1l
LmVuY29kZShlbmNvZGVyLCBleGVjdXRhYmxlLmluZmVycmVkTmFtZSgpKTsKLQotICAgIG1fcGFy
ZW50U2NvcGVURFpWYXJpYWJsZXMuZW5jb2RlKGVuY29kZXIsIGV4ZWN1dGFibGUucGFyZW50U2Nv
cGVURFpWYXJpYWJsZXMoKSk7Ci0KLSAgICBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ2FsbC5lbmNv
ZGUoZW5jb2RlciwgZXhlY3V0YWJsZS5tX3VubGlua2VkQ29kZUJsb2NrRm9yQ2FsbCk7Ci0gICAg
bV91bmxpbmtlZENvZGVCbG9ja0ZvckNvbnN0cnVjdC5lbmNvZGUoZW5jb2RlciwgZXhlY3V0YWJs
ZS5tX3VubGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0KTsKLX0KLQotQUxXQVlTX0lOTElORSBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKLXsKLSAgICBWYXJpYWJsZUVudmlyb25tZW50IGVu
djsKLSAgICBtX3BhcmVudFNjb3BlVERaVmFyaWFibGVzLmRlY29kZShkZWNvZGVyLCBlbnYpOwot
Ci0gICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oZGVjb2Rlci52bSgp
LmhlYXApKSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShkZWNvZGVyLCBlbnYsICp0aGlzKTsK
LSAgICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbihkZWNvZGVyLnZtKCkpOwotCi0gICAgbV9j
bGFzc1NvdXJjZS5kZWNvZGUoZGVjb2RlciwgZXhlY3V0YWJsZS0+bV9jbGFzc1NvdXJjZSk7Ci0g
ICAgbV91bmxpbmtlZENvZGVCbG9ja0ZvckNhbGwuZGVjb2RlKGRlY29kZXIsIGV4ZWN1dGFibGUt
Pm1fdW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsLCBleGVjdXRhYmxlKTsKLSAgICBtX3VubGlua2Vk
Q29kZUJsb2NrRm9yQ29uc3RydWN0LmRlY29kZShkZWNvZGVyLCBleGVjdXRhYmxlLT5tX3VubGlu
a2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0LCBleGVjdXRhYmxlKTsKLQotICAgIHJldHVybiBleGVj
dXRhYmxlOwotfQotCi1BTFdBWVNfSU5MSU5FIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShEZWNvZGVyJiBkZWNvZGVyLCBWYXJpYWJsZUVudmly
b25tZW50JiBwYXJlbnRTY29wZVREWlZhcmlhYmxlcywgY29uc3QgQ2FjaGVkRnVuY3Rpb25FeGVj
dXRhYmxlJiBjYWNoZWRFeGVjdXRhYmxlKQotICAgIDogQmFzZShkZWNvZGVyLnZtKCksIGRlY29k
ZXIudm0oKS51bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQoKSkKLSAgICAs
IG1fZmlyc3RMaW5lT2Zmc2V0KGNhY2hlZEV4ZWN1dGFibGUuZmlyc3RMaW5lT2Zmc2V0KCkpCi0g
ICAgLCBtX2xpbmVDb3VudChjYWNoZWRFeGVjdXRhYmxlLmxpbmVDb3VudCgpKQotICAgICwgbV91
bmxpbmtlZEZ1bmN0aW9uTmFtZVN0YXJ0KGNhY2hlZEV4ZWN1dGFibGUudW5saW5rZWRGdW5jdGlv
bk5hbWVTdGFydCgpKQotICAgICwgbV91bmxpbmtlZEJvZHlTdGFydENvbHVtbihjYWNoZWRFeGVj
dXRhYmxlLnVubGlua2VkQm9keVN0YXJ0Q29sdW1uKCkpCi0gICAgLCBtX3VubGlua2VkQm9keUVu
ZENvbHVtbihjYWNoZWRFeGVjdXRhYmxlLnVubGlua2VkQm9keUVuZENvbHVtbigpKQotICAgICwg
bV9zdGFydE9mZnNldChjYWNoZWRFeGVjdXRhYmxlLnN0YXJ0T2Zmc2V0KCkpCi0gICAgLCBtX3Nv
dXJjZUxlbmd0aChjYWNoZWRFeGVjdXRhYmxlLnNvdXJjZUxlbmd0aCgpKQotICAgICwgbV9wYXJh
bWV0ZXJzU3RhcnRPZmZzZXQoY2FjaGVkRXhlY3V0YWJsZS5wYXJhbWV0ZXJzU3RhcnRPZmZzZXQo
KSkKLSAgICAsIG1fdHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KGNhY2hlZEV4ZWN1dGFibGUudHlw
ZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCkpCi0gICAgLCBtX3R5cGVQcm9maWxpbmdFbmRPZmZzZXQo
Y2FjaGVkRXhlY3V0YWJsZS50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpCi0gICAgLCBtX3BhcmFt
ZXRlckNvdW50KGNhY2hlZEV4ZWN1dGFibGUucGFyYW1ldGVyQ291bnQoKSkKLSAgICAsIG1fZmVh
dHVyZXMoY2FjaGVkRXhlY3V0YWJsZS5mZWF0dXJlcygpKQotICAgICwgbV9zb3VyY2VQYXJzZU1v
ZGUoY2FjaGVkRXhlY3V0YWJsZS5zb3VyY2VQYXJzZU1vZGUoKSkKLSAgICAsIG1faXNJblN0cmlj
dENvbnRleHQoY2FjaGVkRXhlY3V0YWJsZS5pc0luU3RyaWN0Q29udGV4dCgpKQotICAgICwgbV9o
YXNDYXB0dXJlZFZhcmlhYmxlcyhjYWNoZWRFeGVjdXRhYmxlLmhhc0NhcHR1cmVkVmFyaWFibGVz
KCkpCi0gICAgLCBtX2lzQnVpbHRpbkZ1bmN0aW9uKGNhY2hlZEV4ZWN1dGFibGUuaXNCdWlsdGlu
RnVuY3Rpb24oKSkKLSAgICAsIG1faXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IoY2Fj
aGVkRXhlY3V0YWJsZS5pc0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3RvcigpKQotICAgICwg
bV9jb25zdHJ1Y3RBYmlsaXR5KGNhY2hlZEV4ZWN1dGFibGUuY29uc3RydWN0QWJpbGl0eSgpKQot
ICAgICwgbV9jb25zdHJ1Y3RvcktpbmQoY2FjaGVkRXhlY3V0YWJsZS5jb25zdHJ1Y3RvcktpbmQo
KSkKLSAgICAsIG1fZnVuY3Rpb25Nb2RlKGNhY2hlZEV4ZWN1dGFibGUuZnVuY3Rpb25Nb2RlKCkp
Ci0gICAgLCBtX3NjcmlwdE1vZGUoY2FjaGVkRXhlY3V0YWJsZS5zY3JpcHRNb2RlKCkpCi0gICAg
LCBtX3N1cGVyQmluZGluZyhjYWNoZWRFeGVjdXRhYmxlLnN1cGVyQmluZGluZygpKQotICAgICwg
bV9kZXJpdmVkQ29udGV4dFR5cGUoY2FjaGVkRXhlY3V0YWJsZS5kZXJpdmVkQ29udGV4dFR5cGUo
KSkKLQotICAgICwgbV9uYW1lKGNhY2hlZEV4ZWN1dGFibGUubmFtZShkZWNvZGVyKSkKLSAgICAs
IG1fZWNtYU5hbWUoY2FjaGVkRXhlY3V0YWJsZS5lY21hTmFtZShkZWNvZGVyKSkKLSAgICAsIG1f
aW5mZXJyZWROYW1lKGNhY2hlZEV4ZWN1dGFibGUuaW5mZXJyZWROYW1lKGRlY29kZXIpKQotCi0g
ICAgLCBtX3BhcmVudFNjb3BlVERaVmFyaWFibGVzKGRlY29kZXIudm0oKS5tX2NvbXBhY3RWYXJp
YWJsZU1hcC0+Z2V0KHBhcmVudFNjb3BlVERaVmFyaWFibGVzKSkKLXsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KLUFMV0FZU19JTkxJTkUgdm9pZCBDYWNoZWRDb2RlQmxv
Y2s8Q29kZUJsb2NrVHlwZT46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBVbmxpbmtl
ZENvZGVCbG9jayYgY29kZUJsb2NrKQotewotICAgIG1fdGhpc1JlZ2lzdGVyID0gY29kZUJsb2Nr
Lm1fdGhpc1JlZ2lzdGVyOwotICAgIG1fc2NvcGVSZWdpc3RlciA9IGNvZGVCbG9jay5tX3Njb3Bl
UmVnaXN0ZXI7Ci0gICAgbV9nbG9iYWxPYmplY3RSZWdpc3RlciA9IGNvZGVCbG9jay5tX2dsb2Jh
bE9iamVjdFJlZ2lzdGVyOwotICAgIG1fdXNlc0V2YWwgPSBjb2RlQmxvY2subV91c2VzRXZhbDsK
LSAgICBtX2lzU3RyaWN0TW9kZSA9IGNvZGVCbG9jay5tX2lzU3RyaWN0TW9kZTsKLSAgICBtX2lz
Q29uc3RydWN0b3IgPSBjb2RlQmxvY2subV9pc0NvbnN0cnVjdG9yOwotICAgIG1faGFzQ2FwdHVy
ZWRWYXJpYWJsZXMgPSBjb2RlQmxvY2subV9oYXNDYXB0dXJlZFZhcmlhYmxlczsKLSAgICBtX2lz
QnVpbHRpbkZ1bmN0aW9uID0gY29kZUJsb2NrLm1faXNCdWlsdGluRnVuY3Rpb247Ci0gICAgbV9z
dXBlckJpbmRpbmcgPSBjb2RlQmxvY2subV9zdXBlckJpbmRpbmc7Ci0gICAgbV9zY3JpcHRNb2Rl
ID0gY29kZUJsb2NrLm1fc2NyaXB0TW9kZTsKLSAgICBtX2lzQXJyb3dGdW5jdGlvbkNvbnRleHQg
PSBjb2RlQmxvY2subV9pc0Fycm93RnVuY3Rpb25Db250ZXh0OwotICAgIG1faXNDbGFzc0NvbnRl
eHQgPSBjb2RlQmxvY2subV9pc0NsYXNzQ29udGV4dDsKLSAgICBtX3dhc0NvbXBpbGVkV2l0aERl
YnVnZ2luZ09wY29kZXMgPSBjb2RlQmxvY2subV93YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNv
ZGVzOwotICAgIG1fY29uc3RydWN0b3JLaW5kID0gY29kZUJsb2NrLm1fY29uc3RydWN0b3JLaW5k
OwotICAgIG1fZGVyaXZlZENvbnRleHRUeXBlID0gY29kZUJsb2NrLm1fZGVyaXZlZENvbnRleHRU
eXBlOwotICAgIG1fZXZhbENvbnRleHRUeXBlID0gY29kZUJsb2NrLm1fZXZhbENvbnRleHRUeXBl
OwotICAgIG1faGFzVGFpbENhbGxzID0gY29kZUJsb2NrLm1faGFzVGFpbENhbGxzOwotICAgIG1f
bGluZUNvdW50ID0gY29kZUJsb2NrLm1fbGluZUNvdW50OwotICAgIG1fZW5kQ29sdW1uID0gY29k
ZUJsb2NrLm1fZW5kQ29sdW1uOwotICAgIG1fbnVtVmFycyA9IGNvZGVCbG9jay5tX251bVZhcnM7
Ci0gICAgbV9udW1DYWxsZWVMb2NhbHMgPSBjb2RlQmxvY2subV9udW1DYWxsZWVMb2NhbHM7Ci0g
ICAgbV9udW1QYXJhbWV0ZXJzID0gY29kZUJsb2NrLm1fbnVtUGFyYW1ldGVyczsKLSAgICBtX2Zl
YXR1cmVzID0gY29kZUJsb2NrLm1fZmVhdHVyZXM7Ci0gICAgbV9wYXJzZU1vZGUgPSBjb2RlQmxv
Y2subV9wYXJzZU1vZGU7Ci0gICAgbV9jb2RlVHlwZSA9IGNvZGVCbG9jay5tX2NvZGVUeXBlOwot
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gTGlua1RpbWVDb25zdGFudENvdW50OyBpLS07KQotICAg
ICAgICBtX2xpbmtUaW1lQ29uc3RhbnRzW2ldID0gY29kZUJsb2NrLm1fbGlua1RpbWVDb25zdGFu
dHNbaV07Ci0KLSAgICBtX21ldGFkYXRhLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9tZXRh
ZGF0YSk7Ci0gICAgbV9yYXJlRGF0YS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fcmFyZURh
dGEpOwotCi0gICAgbV9zb3VyY2VVUkxEaXJlY3RpdmUuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9j
ay5tX3NvdXJjZVVSTERpcmVjdGl2ZS5pbXBsKCkpOwotICAgIG1fc291cmNlTWFwcGluZ1VSTERp
cmVjdGl2ZS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fc291cmNlVVJMRGlyZWN0aXZlLmlt
cGwoKSk7Ci0KLSAgICBtX2luc3RydWN0aW9ucy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1f
aW5zdHJ1Y3Rpb25zLmdldCgpKTsKLSAgICBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLmVu
Y29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucyk7Ci0g
ICAgbV9jb25zdGFudFJlZ2lzdGVycy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fY29uc3Rh
bnRSZWdpc3RlcnMpOwotICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLmVu
Y29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24pOwotICAgIG1fZXhwcmVzc2lvbkluZm8uZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX2V4
cHJlc3Npb25JbmZvKTsKLSAgICBtX2p1bXBUYXJnZXRzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxv
Y2subV9qdW1wVGFyZ2V0cyk7Ci0gICAgbV9vdXRPZkxpbmVKdW1wVGFyZ2V0cy5lbmNvZGUoZW5j
b2RlciwgY29kZUJsb2NrLm1fb3V0T2ZMaW5lSnVtcFRhcmdldHMpOwotCi0gICAgbV9jb25zdGFu
dElkZW50aWZpZXJTZXRzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9jb25zdGFudElkZW50
aWZpZXJTZXRzKTsKLSAgICBtX2lkZW50aWZpZXJzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2su
bV9pZGVudGlmaWVycyk7Ci0gICAgbV9iaXRWZWN0b3JzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxv
Y2subV9iaXRWZWN0b3JzKTsKLSAgICBtX2Z1bmN0aW9uRGVjbHMuZW5jb2RlKGVuY29kZXIsIGNv
ZGVCbG9jay5tX2Z1bmN0aW9uRGVjbHMpOwotICAgIG1fZnVuY3Rpb25FeHBycy5lbmNvZGUoZW5j
b2RlciwgY29kZUJsb2NrLm1fZnVuY3Rpb25FeHBycyk7Ci19Ci0KLWNsYXNzIENhY2hlZFNvdXJj
ZUNvZGVLZXkgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFNvdXJjZUNvZGVLZXk+IHsKLXB1YmxpYzoK
LSAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBr
ZXkpCi0gICAgewotICAgICAgICBtX3NvdXJjZUNvZGUuZW5jb2RlKGVuY29kZXIsIGtleS5tX3Nv
dXJjZUNvZGUpOwotICAgICAgICBtX25hbWUuZW5jb2RlKGVuY29kZXIsIGtleS5tX25hbWUpOwot
ICAgICAgICBtX2ZsYWdzID0ga2V5Lm1fZmxhZ3MubV9mbGFnczsKLSAgICAgICAgbV9oYXNoID0g
a2V5Lmhhc2goKTsKLSAgICAgICAgbV9mdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBv
c2l0aW9uID0ga2V5Lm1fZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbjsK
LSAgICB9Ci0KLSAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTb3VyY2VDb2RlS2V5
JiBrZXkpIGNvbnN0Ci0gICAgewotICAgICAgICBtX3NvdXJjZUNvZGUuZGVjb2RlKGRlY29kZXIs
IGtleS5tX3NvdXJjZUNvZGUpOwotICAgICAgICBtX25hbWUuZGVjb2RlKGRlY29kZXIsIGtleS5t
X25hbWUpOwotICAgICAgICBrZXkubV9mbGFncy5tX2ZsYWdzID0gbV9mbGFnczsKLSAgICAgICAg
a2V5Lm1faGFzaCA9IG1faGFzaDsKLSAgICAgICAga2V5Lm1fZnVuY3Rpb25Db25zdHJ1Y3RvclBh
cmFtZXRlcnNFbmRQb3NpdGlvbiA9IG1fZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQ
b3NpdGlvbjsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQ2FjaGVkVW5saW5rZWRTb3VyY2VDb2Rl
IG1fc291cmNlQ29kZTsKLSAgICBDYWNoZWRTdHJpbmcgbV9uYW1lOwotICAgIHVuc2lnbmVkIG1f
ZmxhZ3M7Ci0gICAgdW5zaWduZWQgbV9oYXNoOwotICAgIGludCBtX2Z1bmN0aW9uQ29uc3RydWN0
b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb247Ci19OwotCi1jbGFzcyBHZW5lcmljQ2FjaGVFbnRyeSB7
Ci1wdWJsaWM6Ci0gICAgc3RkOjpwYWlyPFNvdXJjZUNvZGVLZXksIFVubGlua2VkQ29kZUJsb2Nr
Kj4gZGVjb2RlKERlY29kZXImKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIENhY2hlZENvZGVC
bG9ja1RhZyBtX3RhZzsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFVubGlua2VkQ29kZUJsb2Nr
VHlwZT4KLWNsYXNzIENhY2hlRW50cnkgOiBwdWJsaWMgR2VuZXJpY0NhY2hlRW50cnkgewotcHVi
bGljOgotICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIHN0ZDo6cGFpcjxTb3VyY2VD
b2RlS2V5LCBjb25zdCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqPiBwYWlyKQotICAgIHsKLSAgICAg
ICAgbV90YWcgPSBDYWNoZWRDb2RlQmxvY2tUeXBlSW1wbDxVbmxpbmtlZENvZGVCbG9ja1R5cGU+
Ojp0YWc7Ci0gICAgICAgIG1fa2V5LmVuY29kZShlbmNvZGVyLCBwYWlyLmZpcnN0KTsKLSAgICAg
ICAgbV9jb2RlQmxvY2suZW5jb2RlKGVuY29kZXIsIHBhaXIuc2Vjb25kKTsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgZnJpZW5kIEdlbmVyaWNDYWNoZUVudHJ5OwotCi0gICAgc3RkOjpwYWlyPFNv
dXJjZUNvZGVLZXksIFVubGlua2VkQ29kZUJsb2NrVHlwZSo+IGRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdGFnID09IENhY2hlZENvZGVCbG9j
a1R5cGVJbXBsPFVubGlua2VkQ29kZUJsb2NrVHlwZT46OnRhZyk7Ci0gICAgICAgIFNvdXJjZUNv
ZGVLZXkgZGVjb2RlZEtleTsKLSAgICAgICAgbV9rZXkuZGVjb2RlKGRlY29kZXIsIGRlY29kZWRL
ZXkpOwotICAgICAgICByZXR1cm4geyBXVEZNb3ZlKGRlY29kZWRLZXkpLCBtX2NvZGVCbG9jay5k
ZWNvZGUoZGVjb2RlcikgfTsKLSAgICB9Ci0KLSAgICBDYWNoZWRTb3VyY2VDb2RlS2V5IG1fa2V5
OwotICAgIENhY2hlZFB0cjxDYWNoZWRDb2RlQmxvY2tUeXBlPFVubGlua2VkQ29kZUJsb2NrVHlw
ZT4+IG1fY29kZUJsb2NrOwotfTsKLQotc3RkOjpwYWlyPFNvdXJjZUNvZGVLZXksIFVubGlua2Vk
Q29kZUJsb2NrKj4gR2VuZXJpY0NhY2hlRW50cnk6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBj
b25zdAotewotICAgIHN3aXRjaCAobV90YWcpIHsKLSAgICBjYXNlIENhY2hlZFByb2dyYW1Db2Rl
QmxvY2tUYWc6Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IENhY2hlRW50
cnk8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPio+KHRoaXMpLT5kZWNvZGUoZGVjb2Rlcik7Ci0g
ICAgY2FzZSBDYWNoZWRNb2R1bGVDb2RlQmxvY2tUYWc6Ci0gICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PGNvbnN0IENhY2hlRW50cnk8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
Pio+KHRoaXMpLT5kZWNvZGUoZGVjb2Rlcik7Ci0gICAgY2FzZSBDYWNoZWRFdmFsQ29kZUJsb2Nr
VGFnOgotICAgICAgICAvLyBXZSBkbyBub3QgY2FjaGUgZXZhbCBjb2RlIGJsb2NrcwotICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSNpZiBDT01QSUxFUihNU1ZD
KQotICAgIC8vIFdpdGhvdXQgdGhpcywgTVNWQyB3aWxsIGNvbXBsYWluIHRoYXQgdGhpcyBwYXRo
IGRvZXMgbm90IHJldHVybiBhIHZhbHVlLgotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNv
bnN0IENhY2hlRW50cnk8VW5saW5rZWRFdmFsQ29kZUJsb2NrPio+KHRoaXMpLT5kZWNvZGUoZGVj
b2Rlcik7Ci0jZW5kaWYKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVW5saW5rZWRDb2RlQmxvY2tU
eXBlPgotdm9pZCBlbmNvZGVDb2RlQmxvY2soRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU291cmNl
Q29kZUtleSYga2V5LCBjb25zdCBVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQotewotICAg
IGF1dG8qIGVudHJ5ID0gZW5jb2Rlci50ZW1wbGF0ZSBtYWxsb2M8Q2FjaGVFbnRyeTxVbmxpbmtl
ZENvZGVCbG9ja1R5cGU+PigpOwotICAgIGVudHJ5LT5lbmNvZGUoZW5jb2RlciwgIHsga2V5LCBq
c0Nhc3Q8Y29uc3QgVW5saW5rZWRDb2RlQmxvY2tUeXBlKj4oY29kZUJsb2NrKSB9KTsKLX0KLQot
c3RkOjpwYWlyPE1hbGxvY1B0cjx1aW50OF90Piwgc2l6ZV90PiBlbmNvZGVDb2RlQmxvY2soVk0m
IHZtLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXksIGNvbnN0IFVubGlua2VkQ29kZUJsb2NrKiBj
b2RlQmxvY2spCi17Ci0gICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8gPSBjb2RlQmxvY2st
PmNsYXNzSW5mbyh2bSk7Ci0KLSAgICBFbmNvZGVyIGVuY29kZXIodm0pOwotICAgIGlmIChjbGFz
c0luZm8gPT0gVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjppbmZvKCkpCi0gICAgICAgIGVuY29k
ZUNvZGVCbG9jazxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+KGVuY29kZXIsIGtleSwgY29kZUJs
b2NrKTsKLSAgICBlbHNlIGlmIChjbGFzc0luZm8gPT0gVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrOjppbmZvKCkpCi0gICAgICAgIGVuY29kZUNvZGVCbG9jazxVbmxpbmtlZE1vZHVsZVBy
b2dyYW1Db2RlQmxvY2s+KGVuY29kZXIsIGtleSwgY29kZUJsb2NrKTsKLSAgICBlbHNlCi0gICAg
ICAgIEFTU0VSVChjbGFzc0luZm8gPT0gVW5saW5rZWRFdmFsQ29kZUJsb2NrOjppbmZvKCkpOwot
Ci0gICAgcmV0dXJuIGVuY29kZXIucmVsZWFzZSgpOwotfQotCi1VbmxpbmtlZENvZGVCbG9jayog
ZGVjb2RlQ29kZUJsb2NrSW1wbChWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSwgY29u
c3Qgdm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBjb25zdCBhdXRvKiBjYWNoZWRF
bnRyeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR2VuZXJpY0NhY2hlRW50cnkqPihidWZmZXIp
OwotICAgIERlY29kZXIgZGVjb2Rlcih2bSwgYnVmZmVyLCBzaXplKTsKLSAgICBzdGQ6OnBhaXI8
U291cmNlQ29kZUtleSwgVW5saW5rZWRDb2RlQmxvY2sqPiBlbnRyeTsKLSAgICB7Ci0gICAgICAg
IERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICAgICAgZW50cnkgPSBjYWNoZWRFbnRyeS0+
ZGVjb2RlKGRlY29kZXIpOwotICAgIH0KLQotICAgIGlmIChlbnRyeS5maXJzdCAhPSBrZXkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBlbnRyeS5zZWNvbmQ7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fj
aGVkVHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
YWNoZWRUeXBlcy5oCShyZXZpc2lvbiAyNDAyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYWNoZWRUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ2ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgIkpTQ2FzdC5oIgotI2luY2x1ZGUgPHd0Zi9NYWxsb2NQdHIuaD4KLQotbmFt
ZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIFNvdXJjZUNvZGVLZXk7Ci1jbGFzcyBVbmxpbmtlZENvZGVC
bG9jazsKLQotc3RkOjpwYWlyPE1hbGxvY1B0cjx1aW50OF90Piwgc2l6ZV90PiBlbmNvZGVDb2Rl
QmxvY2soVk0mLCBjb25zdCBTb3VyY2VDb2RlS2V5JiwgY29uc3QgVW5saW5rZWRDb2RlQmxvY2sq
KTsKLVVubGlua2VkQ29kZUJsb2NrKiBkZWNvZGVDb2RlQmxvY2tJbXBsKFZNJiwgY29uc3QgU291
cmNlQ29kZUtleSYsIGNvbnN0IHZvaWQqLCBzaXplX3QpOwotCi0KLXRlbXBsYXRlPHR5cGVuYW1l
IFVubGlua2VkQ29kZUJsb2NrVHlwZT4KLVVubGlua2VkQ29kZUJsb2NrVHlwZSogZGVjb2RlQ29k
ZUJsb2NrKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5LCBjb25zdCB2b2lkKiBidWZm
ZXIsIHNpemVfdCBzaXplKQotewotICAgIHJldHVybiBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2tU
eXBlKj4oZGVjb2RlQ29kZUJsb2NrSW1wbCh2bSwga2V5LCBidWZmZXIsIHNpemUpKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b2RlQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvZGVDYWNoZS5jcHAJKHJldmlzaW9uIDI0MDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDkgKzQzLDYgQEAg
dm9pZCBDb2RlQ2FjaGVNYXA6OnBydW5lU2xvd0Nhc2UoKQogCiAgICAgd2hpbGUgKG1fc2l6ZSA+
IG1fY2FwYWNpdHkgfHwgIWNhblBydW5lUXVpY2tseSgpKSB7CiAgICAgICAgIE1hcFR5cGU6Oml0
ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4oKTsKLQotICAgICAgICB3cml0ZUNvZGVCbG9jaygqaXQt
PnZhbHVlLmNlbGwtPnZtKCksIGl0LT5rZXksIGl0LT52YWx1ZSk7Ci0KICAgICAgICAgbV9zaXpl
IC09IGl0LT5rZXkubGVuZ3RoKCk7CiAgICAgICAgIG1fbWFwLnJlbW92ZShpdCk7CiAgICAgfQpA
QCAtNjIsOCArNTksOSBAQCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIENvZGVDYWNoZTo6Z2V0VW5s
CiAgICAgICAgIHZtLnR5cGVQcm9maWxlcigpID8gVHlwZVByb2ZpbGVyRW5hYmxlZDo6WWVzIDog
VHlwZVByb2ZpbGVyRW5hYmxlZDo6Tm8sIAogICAgICAgICB2bS5jb250cm9sRmxvd1Byb2ZpbGVy
KCkgPyBDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZDo6WWVzIDogQ29udHJvbEZsb3dQcm9maWxl
ckVuYWJsZWQ6Ok5vLAogICAgICAgICBXVEY6Om51bGxvcHQpOwotICAgIFVubGlua2VkQ29kZUJs
b2NrVHlwZSogdW5saW5rZWRDb2RlQmxvY2sgPSBtX3NvdXJjZUNvZGUuZmluZENhY2hlQW5kVXBk
YXRlQWdlPFVubGlua2VkQ29kZUJsb2NrVHlwZT4odm0sIGtleSk7Ci0gICAgaWYgKHVubGlua2Vk
Q29kZUJsb2NrICYmIE9wdGlvbnM6OnVzZUNvZGVDYWNoZSgpKSB7CisgICAgU291cmNlQ29kZVZh
bHVlKiBjYWNoZSA9IG1fc291cmNlQ29kZS5maW5kQ2FjaGVBbmRVcGRhdGVBZ2Uoa2V5KTsKKyAg
ICBpZiAoY2FjaGUgJiYgT3B0aW9uczo6dXNlQ29kZUNhY2hlKCkpIHsKKyAgICAgICAgVW5saW5r
ZWRDb2RlQmxvY2tUeXBlKiB1bmxpbmtlZENvZGVCbG9jayA9IGpzQ2FzdDxVbmxpbmtlZENvZGVC
bG9ja1R5cGUqPihjYWNoZS0+Y2VsbC5nZXQoKSk7CiAgICAgICAgIHVuc2lnbmVkIGxpbmVDb3Vu
dCA9IHVubGlua2VkQ29kZUJsb2NrLT5saW5lQ291bnQoKTsKICAgICAgICAgdW5zaWduZWQgc3Rh
cnRDb2x1bW4gPSB1bmxpbmtlZENvZGVCbG9jay0+c3RhcnRDb2x1bW4oKSArIHNvdXJjZS5zdGFy
dENvbHVtbigpLm9uZUJhc2VkSW50KCk7CiAgICAgICAgIGJvb2wgZW5kQ29sdW1uSXNPblN0YXJ0
TGluZSA9ICFsaW5lQ291bnQ7CkBAIC03Myw5ICs3MSw5IEBAIFVubGlua2VkQ29kZUJsb2NrVHlw
ZSogQ29kZUNhY2hlOjpnZXRVbmwKICAgICAgICAgc291cmNlLnByb3ZpZGVyKCktPnNldFNvdXJj
ZU1hcHBpbmdVUkxEaXJlY3RpdmUodW5saW5rZWRDb2RlQmxvY2stPnNvdXJjZU1hcHBpbmdVUkxE
aXJlY3RpdmUoKSk7CiAgICAgICAgIHJldHVybiB1bmxpbmtlZENvZGVCbG9jazsKICAgICB9Ci0K
KyAgICAKICAgICBWYXJpYWJsZUVudmlyb25tZW50IHZhcmlhYmxlc1VuZGVyVERaOwotICAgIHVu
bGlua2VkQ29kZUJsb2NrID0gZ2VuZXJhdGVVbmxpbmtlZENvZGVCbG9jazxVbmxpbmtlZENvZGVC
bG9ja1R5cGUsIEV4ZWN1dGFibGVUeXBlPih2bSwgZXhlY3V0YWJsZSwgc291cmNlLCBzdHJpY3RN
b2RlLCBzY3JpcHRNb2RlLCBkZWJ1Z2dlck1vZGUsIGVycm9yLCBldmFsQ29udGV4dFR5cGUsICZ2
YXJpYWJsZXNVbmRlclREWik7CisgICAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiB1bmxpbmtlZENv
ZGVCbG9jayA9IGdlbmVyYXRlVW5saW5rZWRDb2RlQmxvY2s8VW5saW5rZWRDb2RlQmxvY2tUeXBl
LCBFeGVjdXRhYmxlVHlwZT4odm0sIGV4ZWN1dGFibGUsIHNvdXJjZSwgc3RyaWN0TW9kZSwgc2Ny
aXB0TW9kZSwgZGVidWdnZXJNb2RlLCBlcnJvciwgZXZhbENvbnRleHRUeXBlLCAmdmFyaWFibGVz
VW5kZXJURFopOwogCiAgICAgaWYgKHVubGlua2VkQ29kZUJsb2NrICYmIE9wdGlvbnM6OnVzZUNv
ZGVDYWNoZSgpKQogICAgICAgICBtX3NvdXJjZUNvZGUuYWRkQ2FjaGUoa2V5LCBTb3VyY2VDb2Rl
VmFsdWUodm0sIHVubGlua2VkQ29kZUJsb2NrLCBtX3NvdXJjZUNvZGUuYWdlKCkpKTsKQEAgLTEx
Miw4ICsxMTAsOSBAQCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogQ29kZUNhY2hlOjpnCiAg
ICAgICAgIHZtLnR5cGVQcm9maWxlcigpID8gVHlwZVByb2ZpbGVyRW5hYmxlZDo6WWVzIDogVHlw
ZVByb2ZpbGVyRW5hYmxlZDo6Tm8sIAogICAgICAgICB2bS5jb250cm9sRmxvd1Byb2ZpbGVyKCkg
PyBDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZDo6WWVzIDogQ29udHJvbEZsb3dQcm9maWxlckVu
YWJsZWQ6Ok5vLAogICAgICAgICBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0
aW9uKTsKLSAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG1fc291
cmNlQ29kZS5maW5kQ2FjaGVBbmRVcGRhdGVBZ2U8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+
KHZtLCBrZXkpOwotICAgIGlmIChleGVjdXRhYmxlICYmIE9wdGlvbnM6OnVzZUNvZGVDYWNoZSgp
KSB7CisgICAgU291cmNlQ29kZVZhbHVlKiBjYWNoZSA9IG1fc291cmNlQ29kZS5maW5kQ2FjaGVB
bmRVcGRhdGVBZ2Uoa2V5KTsKKyAgICBpZiAoY2FjaGUgJiYgT3B0aW9uczo6dXNlQ29kZUNhY2hl
KCkpIHsKKyAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBq
c0Nhc3Q8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqPihjYWNoZS0+Y2VsbC5nZXQoKSk7CiAg
ICAgICAgIHNvdXJjZS5wcm92aWRlcigpLT5zZXRTb3VyY2VVUkxEaXJlY3RpdmUoZXhlY3V0YWJs
ZS0+c291cmNlVVJMRGlyZWN0aXZlKCkpOwogICAgICAgICBzb3VyY2UucHJvdmlkZXIoKS0+c2V0
U291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZShleGVjdXRhYmxlLT5zb3VyY2VNYXBwaW5nVVJMRGly
ZWN0aXZlKCkpOwogICAgICAgICByZXR1cm4gZXhlY3V0YWJsZTsKQEAgLTE1NiwxMCArMTU1LDQg
QEAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIENvZGVDYWNoZTo6ZwogICAgIHJldHVybiBm
dW5jdGlvbkV4ZWN1dGFibGU7CiB9CiAKLXZvaWQgQ29kZUNhY2hlOjp3cml0ZShWTSYgdm0pCi17
Ci0gICAgZm9yIChjb25zdCBhdXRvJiBpdCA6IG1fc291cmNlQ29kZSkKLSAgICAgICAgd3JpdGVD
b2RlQmxvY2sodm0sIGl0LmtleSwgaXQudmFsdWUpOwotfQotCiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaAkocmV2aXNpb24gMjQwMjIwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDcgKzI2LDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0
b3IuaCIKLSNpbmNsdWRlICJDYWNoZWRUeXBlcy5oIgogI2luY2x1ZGUgIkV4ZWN1dGFibGVJbmZv
LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIlBhcnNlci5oIgpAQCAtMzgs
NyArMzcsNiBAQAogI2luY2x1ZGUgIlVubGlua2VkRXZhbENvZGVCbG9jay5oIgogI2luY2x1ZGUg
IlVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oIgogI2luY2x1ZGUgIlVubGlua2VkUHJv
Z3JhbUNvZGVCbG9jay5oIgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtOTEsNzYgKzg5
LDEzIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJl
dHVybiBtX21hcC5iZWdpbigpOyB9Ci0gICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9tYXAu
ZW5kKCk7IH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFVubGlua2VkQ29kZUJsb2NrVHlwZT4K
LSAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGZldGNoRnJvbURpc2tJbXBsKFZNJiB2bSwgY29u
c3QgU291cmNlQ29kZUtleSYga2V5KQotICAgIHsKLSNpZiBPUyhEQVJXSU4pCi0gICAgICAgIGNv
bnN0IGNoYXIqIGNhY2hlUGF0aCA9IE9wdGlvbnM6OmRpc2tDYWNoZVBhdGgoKTsKLSAgICAgICAg
aWYgKCFjYWNoZVBhdGgpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICB1
bnNpZ25lZCBoYXNoID0ga2V5Lmhhc2goKTsKLSAgICAgICAgY2hhciBmaWxlbmFtZVs1MTJdOwot
ICAgICAgICBpbnQgY291bnQgPSBzbnByaW50ZihmaWxlbmFtZSwgNTEyLCAiJXMvJXUuY2FjaGUi
LCBjYWNoZVBhdGgsIGhhc2gpOwotICAgICAgICBpZiAoY291bnQgPCAwIHx8IGNvdW50ID4gNTEy
KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgaW50IGZkID0gb3Blbihm
aWxlbmFtZSwgT19SRE9OTFkpOwotICAgICAgICBpZiAoZmQgPT0gLTEpCi0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBpbnQgcmMgPSBmbG9jayhmZCwgTE9DS19TSCB8IExP
Q0tfTkIpOwotICAgICAgICBpZiAocmMpIHsKLSAgICAgICAgICAgIGNsb3NlKGZkKTsKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RydWN0IHN0YXQg
c2I7Ci0gICAgICAgIGludCByZXMgPSBmc3RhdChmZCwgJnNiKTsKLSAgICAgICAgc2l6ZV90IHNp
emUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHNiLnN0X3NpemUpOwotICAgICAgICBpZiAocmVzIHx8
ICFzaXplKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgY29uc3Qgdm9p
ZCogYnVmZmVyID0gbW1hcChudWxscHRyLCBzaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBm
ZCwgMCk7Ci0gICAgICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSogdW5saW5rZWRDb2RlQmxvY2sg
PSBkZWNvZGVDb2RlQmxvY2s8VW5saW5rZWRDb2RlQmxvY2tUeXBlPih2bSwga2V5LCBidWZmZXIs
IHNpemUpOwotCi0gICAgICAgIGlmICghdW5saW5rZWRDb2RlQmxvY2spCi0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBhZGRDYWNoZShrZXksIFNvdXJjZUNvZGVWYWx1ZSh2
bSwgdW5saW5rZWRDb2RlQmxvY2ssIG1fYWdlKSk7Ci0gICAgICAgIHJldHVybiB1bmxpbmtlZENv
ZGVCbG9jazsKLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTSh2bSk7Ci0gICAgICAgIFVOVVNF
RF9QQVJBTShrZXkpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSNlbmRpZgotICAgIH0KLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFVubGlua2VkQ29kZUJsb2NrVHlwZT4KLSAgICBzdGQ6OmVu
YWJsZV9pZl90PHN0ZDo6aXNfYmFzZV9vZjxVbmxpbmtlZENvZGVCbG9jaywgVW5saW5rZWRDb2Rl
QmxvY2tUeXBlPjo6dmFsdWUgJiYgIXN0ZDo6aXNfc2FtZTxVbmxpbmtlZENvZGVCbG9ja1R5cGUs
IFVubGlua2VkRXZhbENvZGVCbG9jaz46OnZhbHVlLCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqPgot
ICAgIGZldGNoRnJvbURpc2soVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXkpCi0gICAg
ewotICAgICAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jayA9IGZldGNoRnJvbURp
c2tJbXBsPFVubGlua2VkQ29kZUJsb2NrVHlwZT4odm0sIGtleSk7Ci0gICAgICAgIGlmIChVTkxJ
S0VMWShPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgpKSkKLSAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGNvZGVCbG9jayk7Ci0gICAgICAgIHJldHVybiBjb2RlQmxvY2s7Ci0gICAgfQotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX2Jhc2Vf
b2Y8VW5saW5rZWRDb2RlQmxvY2ssIFQ+Ojp2YWx1ZSB8fCBzdGQ6OmlzX3NhbWU8VCwgVW5saW5r
ZWRFdmFsQ29kZUJsb2NrPjo6dmFsdWUsIFQqPgotICAgIGZldGNoRnJvbURpc2soVk0mLCBjb25z
dCBTb3VyY2VDb2RlS2V5JikgeyByZXR1cm4gbnVsbHB0cjsgfQotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVW5saW5rZWRDb2RlQmxvY2tUeXBlPgotICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSog
ZmluZENhY2hlQW5kVXBkYXRlQWdlKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5KQor
ICAgIFNvdXJjZUNvZGVWYWx1ZSogZmluZENhY2hlQW5kVXBkYXRlQWdlKGNvbnN0IFNvdXJjZUNv
ZGVLZXkmIGtleSkKICAgICB7CiAgICAgICAgIHBydW5lKCk7CiAKICAgICAgICAgaXRlcmF0b3Ig
ZmluZFJlc3VsdCA9IG1fbWFwLmZpbmQoa2V5KTsKICAgICAgICAgaWYgKGZpbmRSZXN1bHQgPT0g
bV9tYXAuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gZmV0Y2hGcm9tRGlzazxVbmxpbmtlZENv
ZGVCbG9ja1R5cGU+KHZtLCBrZXkpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAg
ICAgICAgaW50NjRfdCBhZ2UgPSBtX2FnZSAtIGZpbmRSZXN1bHQtPnZhbHVlLmFnZTsKICAgICAg
ICAgaWYgKGFnZSA+IG1fY2FwYWNpdHkpIHsKQEAgLTE4MCw3ICsxMTUsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIGZpbmRSZXN1bHQtPnZhbHVlLmFnZSA9IG1fYWdlOwogICAgICAgICBtX2FnZSArPSBr
ZXkubGVuZ3RoKCk7CiAKLSAgICAgICAgcmV0dXJuIGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9ja1R5
cGUqPihmaW5kUmVzdWx0LT52YWx1ZS5jZWxsLmdldCgpKTsKKyAgICAgICAgcmV0dXJuICZmaW5k
UmVzdWx0LT52YWx1ZTsKICAgICB9CiAKICAgICBBZGRSZXN1bHQgYWRkQ2FjaGUoY29uc3QgU291
cmNlQ29kZUtleSYga2V5LCBjb25zdCBTb3VyY2VDb2RlVmFsdWUmIHZhbHVlKQpAQCAtMjYyLDcg
KzE5Nyw2IEBAIHB1YmxpYzoKICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZ2V0VW5s
aW5rZWRHbG9iYWxGdW5jdGlvbkV4ZWN1dGFibGUoVk0mLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgU291cmNlQ29kZSYsIERlYnVnZ2VyTW9kZSwgT3B0aW9uYWw8aW50PiBmdW5jdGlvbkNvbnN0
cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uLCBQYXJzZXJFcnJvciYpOwogCiAgICAgdm9pZCBj
bGVhcigpIHsgbV9zb3VyY2VDb2RlLmNsZWFyKCk7IH0KLSAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIHdyaXRlKFZNJik7CiAKIHByaXZhdGU6CiAgICAgdGVtcGxhdGUgPGNsYXNzIFVubGlua2Vk
Q29kZUJsb2NrVHlwZSwgY2xhc3MgRXhlY3V0YWJsZVR5cGU+IApAQCAtMzIyLDM2ICsyNTYsNCBA
QCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGdlbmVyYXRlVW5saW5rZWRDCiAgICAgcmV0dXJuIHVu
bGlua2VkQ29kZUJsb2NrOwogfQogCi1BTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIHdyaXRlQ29k
ZUJsb2NrKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5LCBjb25zdCBTb3VyY2VDb2Rl
VmFsdWUmIHZhbHVlKQotewotI2lmIE9TKERBUldJTikKLSAgICBjb25zdCBjaGFyKiBjYWNoZVBh
dGggPSBPcHRpb25zOjpkaXNrQ2FjaGVQYXRoKCk7Ci0gICAgaWYgKExJS0VMWSghY2FjaGVQYXRo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGpzRHluYW1pY0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2sqPih2bSwgdmFsdWUuY2VsbC5nZXQoKSk7
Ci0gICAgaWYgKCFjb2RlQmxvY2spCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIGhh
c2ggPSBrZXkuaGFzaCgpOwotICAgIGNoYXIgZmlsZW5hbWVbNTEyXTsKLSAgICBpbnQgY291bnQg
PSBzbnByaW50ZihmaWxlbmFtZSwgNTEyLCAiJXMvJXUuY2FjaGUiLCBjYWNoZVBhdGgsIGhhc2gp
OwotICAgIGlmIChjb3VudCA8IDAgfHwgY291bnQgPiA1MTIpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHN0ZDo6cGFpcjxNYWxsb2NQdHI8dWludDhfdD4sIHNpemVfdD4gcmVzdWx0ID0gZW5jb2Rl
Q29kZUJsb2NrKHZtLCBrZXksIGNvZGVCbG9jayk7Ci0KLSAgICBpbnQgZmQgPSBvcGVuKGZpbGVu
YW1lLCBPX0NSRUFUIHwgT19XUk9OTFksIDA2NjYpOwotICAgIGludCByYyA9IGZsb2NrKGZkLCBM
T0NLX0VYIHwgTE9DS19OQik7Ci0gICAgaWYgKCFyYykKLSAgICAgICAgOjp3cml0ZShmZCwgcmVz
dWx0LmZpcnN0LmdldCgpLCByZXN1bHQuc2Vjb25kKTsKLSAgICBjbG9zZShmZCk7Ci0jZWxzZQot
ICAgIFVOVVNFRF9QQVJBTSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKGtleSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHZhbHVlKTsKLSNlbmRpZgotfQotCi0KIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAkocmV2aXNpb24gMjQw
MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjg4LDYgKzE2ODgsMTEgQEAgYm9vbCBKU0JpZ0ludDo6Z2V0UHJpbWl0
aXZlTnVtYmVyKEV4ZWNTdAogICAgIHJldHVybiB0cnVlOwogfQogCitpbmxpbmUgc2l6ZV90IEpT
QmlnSW50OjpvZmZzZXRPZkRhdGEoKQoreworICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRp
cGxlT2Y8c2l6ZW9mKERpZ2l0KT4oc2l6ZW9mKEpTQmlnSW50KSk7Cit9CisKIHRlbXBsYXRlIDx0
eXBlbmFtZSBDaGFyVHlwZT4KIEpTQmlnSW50KiBKU0JpZ0ludDo6cGFyc2VJbnQoRXhlY1N0YXRl
KiBleGVjLCBDaGFyVHlwZSogIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgRXJyb3JQYXJzZU1vZGUg
ZXJyb3JQYXJzZU1vZGUpCiB7CkBAIC0xNzkwLDYgKzE3OTUsMTEgQEAgSlNCaWdJbnQqIEpTQmln
SW50OjpwYXJzZUludChFeGVjU3RhdGUqIAogICAgIHJldHVybiBudWxscHRyOwogfQogCitpbmxp
bmUgSlNCaWdJbnQ6OkRpZ2l0KiBKU0JpZ0ludDo6ZGF0YVN0b3JhZ2UoKQoreworICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PERpZ2l0Kj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcykg
KyBvZmZzZXRPZkRhdGEoKSk7Cit9CisKIGlubGluZSBKU0JpZ0ludDo6RGlnaXQgSlNCaWdJbnQ6
OmRpZ2l0KHVuc2lnbmVkIG4pCiB7CiAgICAgQVNTRVJUKG4gPCBsZW5ndGgoKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgJKHJldmlzaW9uIDI0MDIyMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDcgKzM4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBKU0JpZ0ludCBmaW5h
bCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHVzaW5nIEJhc2UgPSBKU0NlbGw7CiAgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBT
dHJ1Y3R1cmVJc0ltbW9ydGFsIHwgT3ZlcnJpZGVzVG9UaGlzOwotICAgIGZyaWVuZCBjbGFzcyBD
YWNoZWRCaWdJbnQ7CiAKIHB1YmxpYzoKIApAQCAtMjI5LDE1ICsyMjgsOCBAQCBwcml2YXRlOgog
ICAgIHN0YXRpYyBPcHRpb25hbDxEaWdpdD4gdG9TaGlmdEFtb3VudChKU0JpZ0ludCogeCk7CiAK
ICAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAg
aW5saW5lIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZEYXRhKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKERpZ2l0KT4oc2l6ZW9mKEpTQmlnSW50
KSk7Ci0gICAgfQotCi0gICAgaW5saW5lIERpZ2l0KiBkYXRhU3RvcmFnZSgpCi0gICAgewotICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxEaWdpdCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KHRoaXMpICsgb2Zmc2V0T2ZEYXRhKCkpOwotICAgIH0KKyAgICBzdGF0aWMgc2l6ZV90IG9m
ZnNldE9mRGF0YSgpOworICAgIERpZ2l0KiBkYXRhU3RvcmFnZSgpOwogCiAgICAgRGlnaXQgZGln
aXQodW5zaWduZWQpOwogICAgIHZvaWQgc2V0RGlnaXQodW5zaWduZWQsIERpZ2l0KTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAyNDAy
MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTI0LDEyICs1MjQsNiBAQCBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRl
bnRPcHRpb25zKCkKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc3OTU2CiAgICAgT3B0aW9uczo6dXNlUHJvYmVPU1JFeGl0KCkgPSBmYWxzZTsKICNlbmRp
ZgotCi0gICAgaWYgKCFPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkKLSAgICAgICAgT3B0aW9uczo6
ZGlza0NhY2hlUGF0aCgpID0gbnVsbHB0cjsKLQotICAgIGlmICghT3B0aW9uczo6ZGlza0NhY2hl
UGF0aCgpKQotICAgICAgICBPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgpID0gZmFsc2U7CiB9CiAK
IHZvaWQgT3B0aW9uczo6aW5pdGlhbGl6ZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAyNDAyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwOCw4ICs1MDgsNiBAQCBj
b25zdGV4cHIgYm9vbCBlbmFibGVXZWJBc3NlbWJseVN0cmVhbWluCiAgICAgdihib29sLCB0cmFj
ZUxMSW50RXhlY3V0aW9uLCBmYWxzZSwgQ29uZmlndXJhYmxlLCBudWxscHRyKSBcCiAgICAgdihi
b29sLCB0cmFjZUxMSW50U2xvd1BhdGgsIGZhbHNlLCBDb25maWd1cmFibGUsIG51bGxwdHIpIFwK
ICAgICB2KGJvb2wsIHRyYWNlQmFzZWxpbmVKSVRFeGVjdXRpb24sIGZhbHNlLCBOb3JtYWwsIG51
bGxwdHIpIFwKLSAgICB2KG9wdGlvblN0cmluZywgZGlza0NhY2hlUGF0aCwgbnVsbHB0ciwgUmVz
dHJpY3RlZCwgIiIpIFwKLSAgICB2KGJvb2wsIGZvcmNlRGlza0NhY2hlLCBmYWxzZSwgUmVzdHJp
Y3RlZCwgIiIpIFwKICAgICB2KHVuc2lnbmVkLCB0aHJlc2hvbGRGb3JHbG9iYWxMZXhpY2FsQmlu
ZGluZ0Vwb2NoLCBVSU5UX01BWCwgTm9ybWFsLCAiVGhyZXNob2xkIGZvciBnbG9iYWwgbGV4aWNh
bCBiaW5kaW5nIGVwb2NoLiBJZiB0aGUgZXBvY2ggcmVhY2hlcyB0byB0aGlzIHZhbHVlLCBDb2Rl
QmxvY2sgbWV0YWRhdGEgZm9yIHNjb3BlIG9wZXJhdGlvbnMgd2lsbCBiZSByZXZpc2VkIGdsb2Jh
bGx5LiBJdCBuZWVkcyB0byBiZSBncmVhdGVyIHRoYW4gMS4iKSBcCiAKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgJKHJldmlzaW9uIDI0MDIyMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw4
ICs0MSw2IEBAIGNsYXNzIFZNOwogSlNfRVhQT1JUX1BSSVZBVEUgUmVnRXhwRmxhZ3MgcmVnRXhw
RmxhZ3MoY29uc3QgU3RyaW5nJik7CiAKIGNsYXNzIFJlZ0V4cCBmaW5hbCA6IHB1YmxpYyBKU0Nl
bGwgewotICAgIGZyaWVuZCBjbGFzcyBDYWNoZWRSZWdFeHA7Ci0KIHB1YmxpYzoKICAgICB0eXBl
ZGVmIEpTQ2VsbCBCYXNlOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzVGFi
bGUuaAkocmV2aXNpb24gMjQwMjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2NvcGVkQXJndW1lbnRzVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksNiBAQCBu
YW1lc3BhY2UgSlNDIHsKIC8vIG1ha2VzIHNlbnNlIGJlY2F1c2Ugc3VjaCBtb2RpZmljYXRpb25z
IGFyZSBzbyB1bmNvbW1vbi4gWW91J2QgaGF2ZSB0byBkbyBzb21ldGhpbmcgY3JhenkgbGlrZQog
Ly8gImRlbGV0ZSBhcmd1bWVudHNbaV0iIG9yIHNvbWUgdmFyaWFudCBvZiBkZWZpbmVPd25Qcm9w
ZXJ0eS4KIGNsYXNzIFNjb3BlZEFyZ3VtZW50c1RhYmxlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7
Ci0gICAgZnJpZW5kIGNsYXNzIENhY2hlZFNjb3BlZEFyZ3VtZW50c1RhYmxlOwotCiBwdWJsaWM6
CiAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5oCShyZXZp
c2lvbiAyNDAyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1l
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDYgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNp
bmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiV2FzbUluZGV4T3JOYW1lLmgiCiAjaW5jbHVkZSAi
V3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVkZSA8bGltaXRzLmg+CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCShyZXZpc2lvbiAyNDAy
MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJQcm9wZXJ0eU1hcEhh
c2hUYWJsZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUNo
YWluLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRh
YmxlLmgJKHJldmlzaW9uIDI0MDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N5bWJvbFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDggKzczLDYgQEAgc3RhdGljIEFM
V0FZU19JTkxJTkUgaW50IG1pc3NpbmdTeW1ib2xNYQogLy8gY29weTogICAgIFN5bWJvbFRhYmxl
RW50cnkgLS0+IEZhdEVudHJ5IC0tLS0tXgogCiBzdHJ1Y3QgU3ltYm9sVGFibGVFbnRyeSB7Ci0g
ICAgZnJpZW5kIGNsYXNzIENhY2hlZFN5bWJvbFRhYmxlRW50cnk7Ci0KIHByaXZhdGU6CiAgICAg
c3RhdGljIFZhck9mZnNldCB2YXJPZmZzZXRGcm9tQml0cyhpbnRwdHJfdCBiaXRzKQogICAgIHsK
QEAgLTQzOCw4ICs0MzYsNiBAQCBzdHJ1Y3QgU3ltYm9sVGFibGVJbmRleEhhc2hUcmFpdHMgOiBI
YXNoCiB9OwogCiBjbGFzcyBTeW1ib2xUYWJsZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewotICAg
IGZyaWVuZCBjbGFzcyBDYWNoZWRTeW1ib2xUYWJsZTsKLQogcHVibGljOgogICAgIHR5cGVkZWYg
SlNDZWxsIEJhc2U7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwpJbmRleDogU291cmNl
L1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlz
aW9uIDI0MDIyMCkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTIgQEAKKzIwMTktMDEtMjAgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+
CisKKyAgICAgICAgUm9sbG91dCByMjQwMjEwOiBJdCBicm9rZSB0ZXN0cyBvbiBpT1MKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MzY0MAorCisgICAg
ICAgIFVucmV2aWV3ZWQuCisKKyAgICAgICAgKiB3dGYvQml0VmVjdG9yLmg6CisKIDIwMTktMDEt
MjAgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5jb20+CiAKICAgICAgICAgQ2FjaGUg
Ynl0ZWNvZGUgdG8gZGlzawpJbmRleDogU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHJldmlzaW9uIDI0MDIyMCkKKysr
IFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMCArMzMs
NiBAQAogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KIAotbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBDYWNoZWRCaXRWZWN0b3I7Ci19Ci0K
IG5hbWVzcGFjZSBXVEYgewogCiAvLyBUaGlzIGlzIGEgc3BhY2UtZWZmaWNpZW50LCByZXNpemVh
YmxlIGJpdHZlY3RvciBjbGFzcy4gSW4gdGhlIGNvbW1vbiBjYXNlIGl0CkBAIC0zNDIsOCArMzM4
LDYgQEAgcHVibGljOiAKICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRv
cigqdGhpcywgc2l6ZSgpKTsgfQogICAgICAgICAKIHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNz
IEpTQzo6Q2FjaGVkQml0VmVjdG9yOwotCiAgICAgc3RhdGljIHVuc2lnbmVkIGJpdHNJblBvaW50
ZXIoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHNpemVvZih2b2lkKikgPDwgMzsKSW5kZXg6IFRv
b2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0
MDIyMCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBA
CisyMDE5LTAxLTIwICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFJvbGxvdXQgcjI0MDIxMDogSXQgYnJva2UgdGVzdHMgb24gaU9TCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTM2NDAKKworICAgICAgICBVbnJldmll
d2VkLgorCisgICAgICAgICogU2NyaXB0cy9qc2Mtc3RyZXNzLXRlc3QtaGVscGVycy9ieXRlY29k
ZS1jYWNoZS10ZXN0LWhlbHBlcjoKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRl
c3RzOgorCiAyMDE5LTAxLTIwICBjaHJpcyBmbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+
CiAKICAgICAgICAgQVg6IFN1cHBvcnQgcmV0dXJuaW5nIHJlbGF0aXZlIGZyYW1lcyBmb3IgYWNj
ZXNzaWJpbGl0eQpJbmRleDogVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCShyZXZpc2lvbiAy
NDAyMjApCisrKyBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCSh3b3JraW5nIGNv
cHkpCkBAIC02NTUsMTUgKzY1NSw2IEBAIGRlZiBydW5EZWZhdWx0KCpvcHRpb25hbFRlc3RTcGVj
aWZpY09wdGkKICAgICBydW4oImRlZmF1bHQiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0
U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCi1kZWYgcnVuQnl0ZWNvZGVDYWNoZSgqb3B0aW9uYWxU
ZXN0U3BlY2lmaWNPcHRpb25zKQotICAgIHVubGVzcyAkaG9zdE9TID09ICJkYXJ3aW4iCi0gICAg
ICAgIHNraXAKLSAgICAgICAgcmV0dXJuCi0gICAgZW5kCi0gICAgb3B0aW9ucyA9IEJBU0VfT1BU
SU9OUyArICR0ZXN0U3BlY2lmaWNSZXF1aXJlZE9wdGlvbnMgKyBGVExfT1BUSU9OUyArIG9wdGlv
bmFsVGVzdFNwZWNpZmljT3B0aW9ucwotICAgIGFkZFJ1bkNvbW1hbmQoImJ5dGVjb2RlLWNhY2hl
IiwgWyJydWJ5IiwgKHBhdGhUb0hlbHBlcnMgKyAiYnl0ZWNvZGUtY2FjaGUtdGVzdC1oZWxwZXIi
KS50b19zLCBwYXRoVG9WTS50b19zLCAkYmVuY2htYXJrLnRvX3NdICsgb3B0aW9ucywgc2lsZW50
T3V0cHV0SGFuZGxlciwgc2ltcGxlRXJyb3JIYW5kbGVyKQotZW5kCi0KIGRlZiBydW5CaWdJbnRF
bmFibGVkKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCiAgICAgIyBGSVhNRTogPHJkYXI6
Ly9wcm9ibGVtLzQwMzMxMTIxPgogICAgIGlmICRyZW1vdGUgb3IgKCRhcmNoaXRlY3R1cmUgIX4g
L3g4Ni9pIGFuZCAkaG9zdE9TID09ICJkYXJ3aW4iKQpAQCAtNzYwLDcgKzc1MSw2IEBAIGRlZiBk
ZWZhdWx0UnVuCiAgICAgICAgIGRlZmF1bHRRdWlja1J1bgogICAgIGVsc2UKICAgICAgICAgcnVu
RGVmYXVsdAotICAgICAgICBydW5CeXRlY29kZUNhY2hlCiAgICAgICAgIGlmICRqaXRUZXN0cwog
ICAgICAgICAgICAgcnVuTm9MTEludAogICAgICAgICAgICAgcnVuTm9DSklUVmFsaWRhdGVQaGFz
ZXMKSW5kZXg6IFRvb2xzL1NjcmlwdHMvanNjLXN0cmVzcy10ZXN0LWhlbHBlcnMvYnl0ZWNvZGUt
Y2FjaGUtdGVzdC1oZWxwZXIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9qc2Mtc3RyZXNz
LXRlc3QtaGVscGVycy9ieXRlY29kZS1jYWNoZS10ZXN0LWhlbHBlcgkocmV2aXNpb24gMjQwMjIw
KQorKysgVG9vbHMvU2NyaXB0cy9qc2Mtc3RyZXNzLXRlc3QtaGVscGVycy9ieXRlY29kZS1jYWNo
ZS10ZXN0LWhlbHBlcgkod29ya2luZyBjb3B5KQpAQCAtMSw0OCArMCwwIEBACi0jIS91c3IvYmlu
L2VudiBydWJ5Ci0KLSMgQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIwotIyAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0j
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotIyBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0jIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotIyBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0jIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotIyBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSMgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotcmVxdWlyZSAncnVi
eWdlbXMnCi1yZXF1aXJlICdmaWxldXRpbHMnCi1yZXF1aXJlICdqc29uJwotcmVxdWlyZSAnc2hl
bGx3b3JkcycKLXJlcXVpcmUgJ3RtcGRpcicKLQotZGVmIG15c3lzKCpjbWQpCi0gICAgcmFpc2Ug
IkNvbW1hbmQgI3tjbWQuaW5zcGVjdH0gZmFpbGVkOiAjeyQ/Lmluc3BlY3R9IiB1bmxlc3Mgc3lz
dGVtKCpjbWQpCi1lbmQKLQotcGF0aFRvVk0gPSBBUkdWWzBdCi1pbnB1dEZpbGUgPSBBUkdWWzFd
Ci1leHRyYU9wdGlvbnMgPSBBUkdWWzIuLi0xXQotZGlza0NhY2hlUGF0aCA9IERpci5ta3RtcGRp
ciBbaW5wdXRGaWxlLCAnYnl0ZWNvZGUtY2FjaGUnXQotCi1iZWdpbgotICAgIEVOVlsiSlNDX2Rp
c2tDYWNoZVBhdGgiXSA9IGRpc2tDYWNoZVBhdGgKLSAgICBteXN5cyhwYXRoVG9WTSwgaW5wdXRG
aWxlLCAqZXh0cmFPcHRpb25zKQotICAgIEVOVlsiSlNDX2ZvcmNlRGlza0NhY2hlIl0gPSAidHJ1
ZSIKLSAgICBteXN5cyhwYXRoVG9WTSwgaW5wdXRGaWxlLCAqZXh0cmFPcHRpb25zKQotZW5zdXJl
Ci0gICAgRmlsZVV0aWxzLnJtX3JmKGRpc2tDYWNoZVBhdGgpCi1lbmQK
</data>

          </attachment>
      

    </bug>

</bugzilla>