<?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>233268</bug_id>
          
          <creation_ts>2021-11-17 11:51:50 -0800</creation_ts>
          <short_desc>Implement most of redirect and modify-headers action types</short_desc>
          <delta_ts>2021-11-17 21:39:21 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>berto</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>timothy</cc>
    
    <cc>toyoshim</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>yutak</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1816041</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-11-17 11:51:50 -0800</bug_when>
    <thetext>Implement most of redirect and modify-headers action types</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816083</commentid>
    <comment_count>1</comment_count>
      <attachid>444559</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-11-17 13:20:56 -0800</bug_when>
    <thetext>Created attachment 444559
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816097</commentid>
    <comment_count>2</comment_count>
      <attachid>444567</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-11-17 13:51:52 -0800</bug_when>
    <thetext>Created attachment 444567
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816130</commentid>
    <comment_count>3</comment_count>
      <attachid>444578</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-11-17 14:30:36 -0800</bug_when>
    <thetext>Created attachment 444578
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816162</commentid>
    <comment_count>4</comment_count>
      <attachid>444591</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-11-17 15:39:02 -0800</bug_when>
    <thetext>Created attachment 444591
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816166</commentid>
    <comment_count>5</comment_count>
      <attachid>444591</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2021-11-17 15:49:54 -0800</bug_when>
    <thetext>Comment on attachment 444591
Patch

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

&gt; Source/WebCore/contentextensions/ContentExtensionError.cpp:107
&gt; +                return &quot;A redirect ur lscheme must be a valid scheme&quot;;

&quot;ur lscheme&quot; =&gt; &quot;url scheme&quot;

&gt; Source/WebKit/UIProcess/API/APIWebsitePolicies.cpp:106
&gt; +        activeContentRuleListActionsPatterns(),

Should this (and in other places) be &quot;activeContentRuleListActionPatterns&quot; (to avoid the double plural)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816197</commentid>
    <comment_count>6</comment_count>
      <attachid>444600</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-11-17 16:32:38 -0800</bug_when>
    <thetext>Created attachment 444600
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816227</commentid>
    <comment_count>7</comment_count>
      <attachid>444612</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-11-17 17:06:35 -0800</bug_when>
    <thetext>Created attachment 444612
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816291</commentid>
    <comment_count>8</comment_count>
      <attachid>444633</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-11-17 20:18:36 -0800</bug_when>
    <thetext>Created attachment 444633
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816292</commentid>
    <comment_count>9</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2021-11-17 20:19:53 -0800</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See https://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816305</commentid>
    <comment_count>10</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-11-17 21:38:53 -0800</bug_when>
    <thetext>r285980</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816306</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-11-17 21:39:21 -0800</bug_when>
    <thetext>&lt;rdar://problem/85534516&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444559</attachid>
            <date>2021-11-17 13:20:56 -0800</date>
            <delta_ts>2021-11-17 13:51:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233268-20211117132055.patch</filename>
            <type>text/plain</type>
            <size>98604</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1NjA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTQzOGIxNGE5YmFmNmNl
NDY1NjI0NDUxNDRhMTkzNTRhZjQxODM1Zi4uMDI2ZTljNTk0ZGZmZTQxOTlkZGRlODEyZTNiY2E5
MTE5MTRjYzZiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDIxLTExLTE3ICBBbGV4
IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVt
ZW50IG1vc3Qgb2YgcmVkaXJlY3QgYW5kIG1vZGlmeS1oZWFkZXJzIGFjdGlvbiB0eXBlcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzMjY4CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpbXBsZW1l
bnRzIG1vZGlmeS1oZWFkZXJzIGFuZCByZWRpcmVjdCBhY3Rpb25zIGV4Y2VwdCBmb3IgZXh0ZW5z
aW9uLXBhdGggYW5kIHJlZ2V4LXN1YnN0aXR1dGlvbiB2YXJpYW50cyBvZiByZWRpcmVjdGluZywK
KyAgICAgICAgd2hpY2ggYXJlIGJpZyBlbm91Z2ggdG8gYmUgaW1wbGVtZW50ZWQgaW4gdGhlaXIg
b3duIHBhdGNoLiAgSW4gb3JkZXIgdG8gZW5hYmxlIHRoZXNlIGFjdGlvbnMsIHRoZSBXS0NvbnRl
bnRSdWxlTGlzdCBuZWVkcyB0bworICAgICAgICBiZSBjb21waWxlZCB3aXRoIG5ldyBTUEkgd2hl
cmUgeW91IHNwZWNpZnkgd2hpY2ggc2NoZW1lcyBhcmUgYWxsb3dlZCB0byBiZSByZWRpcmVjdGVk
IHRvLCBhbmQgU1BJIGluIFdLV2VicGFnZVByZWZlcmVuY2VzIGFsbG93cworICAgICAgICBhZGRp
dGlvbiBvZiBhIHNldCBvZiBwYXR0ZXJucyB0byBzcGVjaWZ5IHdoaWNoIFVSTHMgYXJlIGFsbG93
ZWQgdG8gYmUgbW9kaWZpZWQuICBBbiBlbXB0eSBzZXQgbWVhbnMgbm8gYWN0aXZlIGFjdGlvbnMg
YXJlIGFsbG93ZWQsCisgICAgICAgIHdoaWNoIGlzIHRoZSBkZWZhdWx0LCB3aGVyZWFzIGEgbnVs
bCBzZXQgbWVhbnMgYWxsIGFjdGl2ZSBhY3Rpb25zIGFyZSBhbGxvd2VkLgorCisgICAgICAgIEkg
YWxzbyBtYWRlIHRoZSBwYXJzZXIgYSBsaXR0bGUgYml0IHN0cmljdGVyLCBzdWNoIGFzIG9ubHkg
YWxsb3dpbmcgdmFsaWQgcG9ydHMsIHF1ZXJpZXMsIGFuZCBmcmFnbWVudHMuCisKKyAgICAgICAg
KiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHA6CisgICAgICAgICogY29u
dGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkFjdGlvbnMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6Ok1vZGlmeUhlYWRlcnNBY3Rpb246Om9wZXJhdG9yPT0g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Ok1vZGlmeUhlYWRl
cnNBY3Rpb246OmFwcGx5VG9SZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpNb2RpZnlIZWFkZXJzQWN0aW9uOjpNb2RpZnlIZWFkZXJJbmZvOjphcHBseVRvUmVx
dWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6UmVkaXJlY3RBY3Rp
b246OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpSZWRpcmVj
dEFjdGlvbjo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0
ZW5zaW9uczo6UmVkaXJlY3RBY3Rpb246OmFwcGx5VG9SZXF1ZXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpSZWRpcmVjdEFjdGlvbjo6VVJMVHJhbnNmb3JtQWN0aW9u
OjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6UmVkaXJlY3RB
Y3Rpb246OlVSTFRyYW5zZm9ybUFjdGlvbjo6c2VyaWFsaXplIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpSZWRpcmVjdEFjdGlvbjo6VVJMVHJhbnNmb3JtQWN0
aW9uOjpkZXNlcmlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6
UmVkaXJlY3RBY3Rpb246OlVSTFRyYW5zZm9ybUFjdGlvbjo6YXBwbHlUb1VSTCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6UmVkaXJlY3RBY3Rpb246OlVSTFRy
YW5zZm9ybUFjdGlvbjo6UXVlcnlUcmFuc2Zvcm06OmFwcGx5VG9VUkwgY29uc3QpOgorICAgICAg
ICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25BY3Rpb25zLmg6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VmFyaWFudEhhc2hlcjo6aGFzaCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VmVjdG9ySGFzaGVyOjpoYXNoKToKKyAg
ICAgICAgKFdURjo6RGVmYXVsdEhhc2g8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlJlZGly
ZWN0QWN0aW9uPjo6aGFzaCk6CisgICAgICAgIChXVEY6OkRlZmF1bHRIYXNoPFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpSZWRpcmVjdEFjdGlvbj46OmVxdWFsKToKKyAgICAgICAgKFdURjo6
RGVmYXVsdEhhc2g8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Ok1vZGlmeUhlYWRlcnNBY3Rp
b24+OjpoYXNoKToKKyAgICAgICAgKFdURjo6RGVmYXVsdEhhc2g8V2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6Ok1vZGlmeUhlYWRlcnNBY3Rpb24+OjplcXVhbCk6CisgICAgICAgICogY29udGVu
dGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpzZXJpYWxpemVBY3Rpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpjb21waWxlUnVsZUxpc3QpOgorICAgICAgICAqIGNvbnRl
bnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6Y29udGVudEV4dGVuc2lvbkVycm9yQ2F0ZWdvcnkpOgorICAg
ICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5oOgorICAgICAg
ICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmxvYWRBY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmxvYWRSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpsb2FkRW5jb2RlZFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpwYXJzZVJ1bGVMaXN0KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5z
aW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmg6CisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OnByb2Nlc3NDb250ZW50UnVs
ZUxpc3RzRm9yTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29u
dGVudEV4dGVuc2lvbnNCYWNrZW5kOjpwcm9jZXNzQ29udGVudFJ1bGVMaXN0c0ZvclBpbmdMb2Fk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjphcHBseVJlc3VsdHNUb1Jl
cXVlc3QpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRSdWxlTGlzdFJlc3Vs
dHMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRSdWxlTGlzdFJlc3VsdHM6OlN1bW1hcnk6
OmRlY29kZSk6CisgICAgICAgICogY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHA6CisgICAgICAg
ICogbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
TG9hZGVyOjpzZXRBY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OmFsbG93c0FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFj
dGlvbnNGb3JVUkwgY29uc3QpOgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpyZW1vdmVIVFRQSGVhZGVyRmllbGQp
OgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oOgorCiAy
MDIxLTExLTEwICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgogCiAgICAgICAg
IFRoZSBjc3NUZXh0IHByb3BlcnR5IGZvciBhIGNvbXB1dGVkIHN0eWxlIHNob3VsZCByZXR1cm4g
YW4gZW1wdHkgc3RyaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGE1MzE3MTMyODE0NTRiMDA0YjJlOTQzYTYyZjVh
YTVkMjM2ZWM5YzguLjFkZmQyYjg0OGFkMzE4YzlhMzQyOTYwMGRlNTFhMWJjNTcyZjc5MTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDQgQEAKKzIwMjEtMTEtMTcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxh
Y2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBJbXBsZW1lbnQgbW9zdCBvZiByZWRp
cmVjdCBhbmQgbW9kaWZ5LWhlYWRlcnMgYWN0aW9uIHR5cGVzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzMyNjgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9XZWJzaXRlUG9saWNpZXNEYXRh
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZVBvbGljaWVzRGF0YTo6ZW5jb2RlIGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZVBvbGljaWVzRGF0YTo6ZGVjb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZVBvbGljaWVzRGF0YTo6YXBwbHlUb0RvY3VtZW50TG9hZGVyKToK
KyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZVBvbGljaWVzRGF0YS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuY3BwOgorICAgICAgICAoQVBJOjpDb250
ZW50UnVsZUxpc3RTdG9yZTo6bG9va3VwQ29udGVudFJ1bGVMaXN0KToKKyAgICAgICAgKEFQSTo6
Q29udGVudFJ1bGVMaXN0U3RvcmU6OmNvbXBpbGVDb250ZW50UnVsZUxpc3QpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0FQSVdlYnNpdGVQb2xpY2llcy5jcHA6CisgICAgICAgIChBUEk6OldlYnNpdGVQ
b2xpY2llczo6Y29weSBjb25zdCk6CisgICAgICAgIChBUEk6OldlYnNpdGVQb2xpY2llczo6ZGF0
YSk6CisgICAgICAgIChBUEk6OldlYnNpdGVQb2xpY2llczo6fldlYnNpdGVQb2xpY2llcyk6IERl
bGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElXZWJzaXRlUG9saWNpZXMuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUmVmLmNw
cDoKKyAgICAgICAgKFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvbXBpbGUpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3RTdG9yZS5tbToKKyAgICAg
ICAgKC1bV0tDb250ZW50UnVsZUxpc3RTdG9yZSBjb21waWxlQ29udGVudFJ1bGVMaXN0Rm9ySWRl
bnRpZmllcjplbmNvZGVkQ29udGVudFJ1bGVMaXN0OmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAg
ICAgICAoLVtXS0NvbnRlbnRSdWxlTGlzdFN0b3JlIF9jb21waWxlQ29udGVudFJ1bGVMaXN0Rm9y
SWRlbnRpZmllcjplbmNvZGVkQ29udGVudFJ1bGVMaXN0OmFsbG93ZWRSZWRpcmVjdFNjaGVtZXM6
Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLQ29udGVudFJ1bGVMaXN0U3RvcmUg
X2NvbXBpbGVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOmVuY29kZWRDb250ZW50UnVsZUxp
c3Q6Y29tcGxldGlvbkhhbmRsZXI6XSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJwYWdlUHJlZmVyZW5jZXMubW06CisgICAgICAgICgtW1dLV2Vi
cGFnZVByZWZlcmVuY2VzIF9zZXRBY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnM6
XSk6CisgICAgICAgICgtW1dLV2VicGFnZVByZWZlcmVuY2VzIF9hY3RpdmVDb250ZW50UnVsZUxp
c3RBY3Rpb25zUGF0dGVybnNdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vi
cGFnZVByZWZlcmVuY2VzUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
X1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbToKKyAgICAgICAgKC1bX1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZSBjb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6ZW5j
b2RlZENvbnRlbnRFeHRlbnNpb246Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViTG9hZGVyU3RyYXRlZ3k6OnJlbW92ZSk6CisgICAgICAgIEZpeCBhIHJlZ3Jlc3Npb24gZnJv
bSBodHRwczovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjc2MTkzL3dlYmtpdAorICAgICAg
ICBXaGVuIGZldGNoaW5nIGEgcmVzb3VyY2Ugd2l0aCBhIGZvcmJpZGRlbiBwb3J0IGFuZCBhIGN1
c3RvbSBzY2hlbWUgYW5kIHttb2RlOiJuby1jb3JzIn0sCisgICAgICAgIFdlYkxvYWRlclN0cmF0
ZWd5OjpyZW1vdmUgaXMgY2FsbGVkIHdpdGggYSByZXNvdXJjZSB0aGF0IGRvZXNuJ3QgaGF2ZSBh
biBpZGVudGlmaWVyLgorICAgICAgICBNeSB0ZXN0IGhpdCB0aGlzLCBzbyBJIG1vdmVkIHRoZSBj
aGVjayB0byBiZWZvcmUgdGhlIGlkZW50aWZpZXIgaXMgdXNlZC4KKwogMjAyMS0xMS0xMCAgUGVy
IEFybmUgVm9sbGFuIDxwdm9sbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbbWFjT1NdW0dQVVBd
IFJlbW92ZSBhY2Nlc3MgdG8gc3lzY3RsIHByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcAppbmRleCAyYmE3
MjEyYTI3MTM5MWQzMzE2NTFhZDY1ZTY2NjUzZmFhZmQ0NzRjLi4zMzg1ZDI3NjY0NWIxMmRkNjU0
MDQ2MWE2YzY3ZjI4NTJiOTVkYjQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwCkBAIC0zMyw3ICszMyw2IEBACiAj
aW5jbHVkZSAiV2ViU29ja2V0Q2hhbm5lbC5oIgogCiAjaW5jbHVkZSAiQmxvYi5oIgotI2luY2x1
ZGUgIkNvbnRlbnRSdWxlTGlzdFJlc3VsdHMuaCIKICNpbmNsdWRlICJDb29raWVKYXIuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25BY3Rp
b25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNp
b25BY3Rpb25zLmNwcAppbmRleCA1MzVmMzZiNTdhMjUxYWI2MTI5ZmJiN2NkZGJkOGRhMTJiMDNh
ZTczLi41MTVhNjAzNjY3MmRlOTRlYjY0YWIxN2EwZjc5MDdmYmNmMmE0NGJhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQWN0aW9u
cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVu
c2lvbkFjdGlvbnMuY3BwCkBAIC0zMCw2ICszMCw4IEBACiAKICNpbmNsdWRlICJDb250ZW50RXh0
ZW5zaW9uRXJyb3IuaCIKICNpbmNsdWRlIDx3dGYvQ3Jvc3NUaHJlYWRDb3BpZXIuaD4KKyNpbmNs
dWRlIDx3dGYvVVJMUGFyc2VyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVG9JbnRlZ2Vy
Q29udmVyc2lvbi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnMgewog
CkBAIC0xMjAsNyArMTIyLDggQEAgTW9kaWZ5SGVhZGVyc0FjdGlvbiBNb2RpZnlIZWFkZXJzQWN0
aW9uOjppc29sYXRlZENvcHkoKSBjb25zdAogCiBib29sIE1vZGlmeUhlYWRlcnNBY3Rpb246Om9w
ZXJhdG9yPT0oY29uc3QgTW9kaWZ5SGVhZGVyc0FjdGlvbiYgb3RoZXIpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG90aGVyLnJlcXVlc3RIZWFkZXJzID09IHRoaXMtPnJlcXVlc3RIZWFkZXJzCisgICAg
cmV0dXJuIG90aGVyLmhhc2hUYWJsZVR5cGUgPT0gdGhpcy0+aGFzaFRhYmxlVHlwZQorICAgICAg
ICAmJiBvdGhlci5yZXF1ZXN0SGVhZGVycyA9PSB0aGlzLT5yZXF1ZXN0SGVhZGVycwogICAgICAg
ICAmJiBvdGhlci5yZXNwb25zZUhlYWRlcnMgPT0gdGhpcy0+cmVzcG9uc2VIZWFkZXJzOwogfQog
CkBAIC0xNjUsNiArMTY4LDI3IEBAIHNpemVfdCBNb2RpZnlIZWFkZXJzQWN0aW9uOjpzZXJpYWxp
emVkTGVuZ3RoKFNwYW48Y29uc3QgdWludDhfdD4gc3BhbikKICAgICByZXR1cm4gZGVzZXJpYWxp
emVMZW5ndGgoc3BhbiwgMCk7CiB9CiAKK3ZvaWQgTW9kaWZ5SGVhZGVyc0FjdGlvbjo6YXBwbHlU
b1JlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIGZvciAoYXV0byYgaW5m
byA6IHJlcXVlc3RIZWFkZXJzKQorICAgICAgICBpbmZvLmFwcGx5VG9SZXF1ZXN0KHJlcXVlc3Qp
OworfQorCit2b2lkIE1vZGlmeUhlYWRlcnNBY3Rpb246Ok1vZGlmeUhlYWRlckluZm86OmFwcGx5
VG9SZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBzdGQ6OnZpc2l0KFdU
Rjo6bWFrZVZpc2l0b3IoWyZdIChjb25zdCBBcHBlbmRPcGVyYXRpb24mIG9wZXJhdGlvbikgewor
ICAgICAgICBhdXRvIGV4aXN0aW5nVmFsdWUgPSByZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZChvcGVy
YXRpb24uaGVhZGVyKTsKKyAgICAgICAgaWYgKGV4aXN0aW5nVmFsdWUuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQob3BlcmF0aW9uLmhlYWRlciwgb3Bl
cmF0aW9uLnZhbHVlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVxdWVzdC5zZXRIVFRQ
SGVhZGVyRmllbGQob3BlcmF0aW9uLmhlYWRlciwgbWFrZVN0cmluZyhleGlzdGluZ1ZhbHVlLCAi
OyAiLCBvcGVyYXRpb24udmFsdWUpKTsKKyAgICB9LCBbJl0gKGNvbnN0IFNldE9wZXJhdGlvbiYg
b3BlcmF0aW9uKSB7CisgICAgICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKG9wZXJhdGlv
bi5oZWFkZXIsIG9wZXJhdGlvbi52YWx1ZSk7CisgICAgfSwgWyZdIChjb25zdCBSZW1vdmVPcGVy
YXRpb24mIG9wZXJhdGlvbikgeworICAgICAgICByZXF1ZXN0LnJlbW92ZUhUVFBIZWFkZXJGaWVs
ZChvcGVyYXRpb24uaGVhZGVyKTsKKyAgICB9KSwgb3BlcmF0aW9uKTsKK30KKwogYXV0byBNb2Rp
ZnlIZWFkZXJzQWN0aW9uOjpNb2RpZnlIZWFkZXJJbmZvOjpwYXJzZShjb25zdCBKU09OOjpWYWx1
ZSYgaW5mb1ZhbHVlKSAtPiBFeHBlY3RlZDxNb2RpZnlIZWFkZXJJbmZvLCBzdGQ6OmVycm9yX2Nv
ZGU+CiB7CiAgICAgYXV0byBvYmplY3QgPSBpbmZvVmFsdWUuYXNPYmplY3QoKTsKQEAgLTI1NCw3
ICsyNzgsNyBAQCBzaXplX3QgTW9kaWZ5SGVhZGVyc0FjdGlvbjo6TW9kaWZ5SGVhZGVySW5mbzo6
c2VyaWFsaXplZExlbmd0aChTcGFuPGNvbnN0IHVpbnQ4XwogICAgIHJldHVybiBkZXNlcmlhbGl6
ZUxlbmd0aChzcGFuLCAwKTsKIH0KIAotRXhwZWN0ZWQ8UmVkaXJlY3RBY3Rpb24sIHN0ZDo6ZXJy
b3JfY29kZT4gUmVkaXJlY3RBY3Rpb246OnBhcnNlKGNvbnN0IEpTT046Ok9iamVjdCYgcmVkaXJl
Y3RPYmplY3QsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1l
cykKK0V4cGVjdGVkPFJlZGlyZWN0QWN0aW9uLCBzdGQ6OmVycm9yX2NvZGU+IFJlZGlyZWN0QWN0
aW9uOjpwYXJzZShjb25zdCBKU09OOjpPYmplY3QmIHJlZGlyZWN0T2JqZWN0LCBjb25zdCBzdGQ6
Om9wdGlvbmFsPEhhc2hTZXQ8U3RyaW5nPj4mIGFsbG93ZWRSZWRpcmVjdFVSTFNjaGVtZXMpCiB7
CiAgICAgYXV0byByZWRpcmVjdCA9IHJlZGlyZWN0T2JqZWN0LmdldE9iamVjdCgicmVkaXJlY3Qi
KTsKICAgICBpZiAoIXJlZGlyZWN0KQpAQCAtMjc2LDEwICszMDAsMTMgQEAgRXhwZWN0ZWQ8UmVk
aXJlY3RBY3Rpb24sIHN0ZDo6ZXJyb3JfY29kZT4gUmVkaXJlY3RBY3Rpb246OnBhcnNlKGNvbnN0
IEpTT046Ok9iamUKICAgICAgICAgcmV0dXJuIFJlZGlyZWN0QWN0aW9uIHsgV1RGTW92ZSgqcGFy
c2VkVHJhbnNmb3JtKSB9OwogICAgIH0KIAotICAgIGlmIChhdXRvIHVybCA9IHJlZGlyZWN0LT5n
ZXRTdHJpbmcoInVybCIpOyAhIXVybCkgewotICAgICAgICBpZiAoIWFsbG93ZWRSZWRpcmVjdFVS
TFNjaGVtZXMuY29udGFpbnMoVVJMKFVSTCgpLCB1cmwpLnByb3RvY29sKCkudG9TdHJpbmdXaXRo
b3V0Q29weWluZygpKSkKKyAgICBpZiAoYXV0byB1cmxTdHJpbmcgPSByZWRpcmVjdC0+Z2V0U3Ry
aW5nKCJ1cmwiKTsgISF1cmxTdHJpbmcpIHsKKyAgICAgICAgYXV0byB1cmwgPSBVUkwoVVJMKCks
IHVybFN0cmluZyk7CisgICAgICAgIGlmICghdXJsLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVS
TEludmFsaWQpOworICAgICAgICBpZiAoYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcyAmJiAhYWxs
b3dlZFJlZGlyZWN0VVJMU2NoZW1lcy0+Y29udGFpbnModXJsLnByb3RvY29sKCkudG9TdHJpbmdX
aXRob3V0Q29weWluZygpKSkKICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250
ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTFNjaGVtZU5vdEFsbG93ZWQpOwotICAg
ICAgICByZXR1cm4gUmVkaXJlY3RBY3Rpb24geyBVUkxBY3Rpb24geyBXVEZNb3ZlKHVybCkgfSB9
OworICAgICAgICByZXR1cm4gUmVkaXJlY3RBY3Rpb24geyBVUkxBY3Rpb24geyBXVEZNb3ZlKHVy
bFN0cmluZykgfSB9OwogICAgIH0KIAogICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50
RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdEludmFsaWRUeXBlKTsKQEAgLTI5NCw3ICszMjEs
OCBAQCBSZWRpcmVjdEFjdGlvbiBSZWRpcmVjdEFjdGlvbjo6aXNvbGF0ZWRDb3B5KCkgY29uc3QK
IAogYm9vbCBSZWRpcmVjdEFjdGlvbjo6b3BlcmF0b3I9PShjb25zdCBSZWRpcmVjdEFjdGlvbiYg
b3RoZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG90aGVyLmFjdGlvbiA9PSB0aGlzLT5hY3Rpb247
CisgICAgcmV0dXJuIG90aGVyLmhhc2hUYWJsZVR5cGUgPT0gdGhpcy0+aGFzaFRhYmxlVHlwZQor
ICAgICAgICAmJiBvdGhlci5hY3Rpb24gPT0gdGhpcy0+YWN0aW9uOwogfQogCiB2b2lkIFJlZGly
ZWN0QWN0aW9uOjpzZXJpYWxpemUoVmVjdG9yPHVpbnQ4X3Q+JiB2ZWN0b3IpIGNvbnN0CkBAIC0z
MzksMjYgKzM2Nyw2NCBAQCBzaXplX3QgUmVkaXJlY3RBY3Rpb246OnNlcmlhbGl6ZWRMZW5ndGgo
U3Bhbjxjb25zdCB1aW50OF90PiBzcGFuKQogICAgIHJldHVybiBkZXNlcmlhbGl6ZUxlbmd0aChz
cGFuLCAwKTsKIH0KIAotYXV0byBSZWRpcmVjdEFjdGlvbjo6VVJMVHJhbnNmb3JtQWN0aW9uOjpw
YXJzZShjb25zdCBKU09OOjpPYmplY3QmIHRyYW5zZm9ybSwgY29uc3QgSGFzaFNldDxTdHJpbmc+
JiBhbGxvd2VkUmVkaXJlY3RVUkxTY2hlbWVzKSAtPiBFeHBlY3RlZDxVUkxUcmFuc2Zvcm1BY3Rp
b24sIHN0ZDo6ZXJyb3JfY29kZT4KK3ZvaWQgUmVkaXJlY3RBY3Rpb246OmFwcGx5VG9SZXF1ZXN0
KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBzdGQ6OnZpc2l0KFdURjo6bWFrZVZp
c2l0b3IoW10oY29uc3QgRXh0ZW5zaW9uUGF0aEFjdGlvbiYpIHsKKyAgICAgICAgLy8gRklYTUU6
IEltcGxlbWVudC4gV2UgbmVlZCB0byBrbm93IHRoZSBiYXNlIFVSTCBvZiB0aGUgZXh0ZW5zaW9u
IGhlcmUgZnJvbSBuZXcgU1BJLgorICAgIH0sIFsmXSAoY29uc3QgUmVnZXhTdWJzdGl0dXRpb25B
Y3Rpb24mKSB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQsIGlkZWFsbHkgaW4gYSB3YXkg
dGhhdCBkb2Vzbid0IHJlcXVpcmUgbWFraW5nIGEgbmV3IFZNIGFuZCBnbG9iYWwgb2JqZWN0IGZv
ciBlYWNoIHJlZGlyZWN0IG9wZXJhdGlvbi4KKyAgICB9LCBbJl0gKGNvbnN0IFVSTFRyYW5zZm9y
bUFjdGlvbiYgYWN0aW9uKSB7CisgICAgICAgIGF1dG8gdXJsID0gcmVxdWVzdC51cmwoKTsKKyAg
ICAgICAgYWN0aW9uLmFwcGx5VG9VUkwodXJsKTsKKyAgICAgICAgcmVxdWVzdC5zZXRVUkwoV1RG
TW92ZSh1cmwpKTsKKyAgICB9LCBbJl0gKGNvbnN0IFVSTEFjdGlvbiYgYWN0aW9uKSB7CisgICAg
ICAgIHJlcXVlc3Quc2V0VVJMKFVSTChVUkwoKSwgYWN0aW9uLnVybCkpOworICAgIH0pLCBhY3Rp
b24pOworfQorCithdXRvIFJlZGlyZWN0QWN0aW9uOjpVUkxUcmFuc2Zvcm1BY3Rpb246OnBhcnNl
KGNvbnN0IEpTT046Ok9iamVjdCYgdHJhbnNmb3JtLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEhhc2hT
ZXQ8U3RyaW5nPj4mIGFsbG93ZWRSZWRpcmVjdFVSTFNjaGVtZXMpIC0+IEV4cGVjdGVkPFVSTFRy
YW5zZm9ybUFjdGlvbiwgc3RkOjplcnJvcl9jb2RlPgogewogICAgIFVSTFRyYW5zZm9ybUFjdGlv
biBhY3Rpb247Ci0gICAgYWN0aW9uLmZyYWdtZW50ID0gdHJhbnNmb3JtLmdldFN0cmluZygiZnJh
Z21lbnQiKTsKKyAgICBpZiAoYXV0byBmcmFnbWVudCA9IHRyYW5zZm9ybS5nZXRTdHJpbmcoImZy
YWdtZW50Iik7ICEhZnJhZ21lbnQpIHsKKyAgICAgICAgaWYgKCFmcmFnbWVudC5pc0VtcHR5KCkg
JiYgIWZyYWdtZW50LnN0YXJ0c1dpdGgoJyMnKSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdEludmFsaWRGcmFnbWVu
dCk7CisgICAgICAgIGFjdGlvbi5mcmFnbWVudCA9IFdURk1vdmUoZnJhZ21lbnQpOworICAgIH0K
ICAgICBhY3Rpb24uaG9zdCA9IHRyYW5zZm9ybS5nZXRTdHJpbmcoImhvc3QiKTsKICAgICBhY3Rp
b24ucGFzc3dvcmQgPSB0cmFuc2Zvcm0uZ2V0U3RyaW5nKCJwYXNzd29yZCIpOwogICAgIGFjdGlv
bi5wYXRoID0gdHJhbnNmb3JtLmdldFN0cmluZygicGF0aCIpOwotICAgIGFjdGlvbi5wb3J0ID0g
dHJhbnNmb3JtLmdldFN0cmluZygicG9ydCIpOwotICAgIGF1dG8gc2NoZW1lID0gdHJhbnNmb3Jt
LmdldFN0cmluZygic2NoZW1lIik7Ci0gICAgaWYgKCEhc2NoZW1lICYmICFhbGxvd2VkUmVkaXJl
Y3RVUkxTY2hlbWVzLmNvbnRhaW5zKHNjaGVtZSkpCi0gICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTFNjaGVtZU5vdEFsbG93
ZWQpOwotICAgIGFjdGlvbi5zY2hlbWUgPSBXVEZNb3ZlKHNjaGVtZSk7CisgICAgYXV0byBwb3J0
ID0gdHJhbnNmb3JtLmdldFN0cmluZygicG9ydCIpOworICAgIGlmICghIXBvcnQpIHsKKyAgICAg
ICAgaWYgKHBvcnQuaXNFbXB0eSgpKQorICAgICAgICAgICAgYWN0aW9uLnBvcnQgPSB7IHN0ZDo6
b3B0aW9uYWw8dWludDE2X3Q+IHsgfSB9OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGF1
dG8gcGFyc2VkUG9ydCA9IHBhcnNlSW50ZWdlcjx1aW50MTZfdD4oU3RyaW5nVmlldyhwb3J0KSk7
CisgICAgICAgICAgICBpZiAoIXBhcnNlZFBvcnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTlJlZGlyZWN0SW52YWxpZFBv
cnQpOworICAgICAgICAgICAgYWN0aW9uLnBvcnQgPSB7IHBhcnNlZFBvcnQgfTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICBpZiAoYXV0byB1bmNhbm9uaWNhbGl6ZWRTY2hlbWUgPSB0cmFu
c2Zvcm0uZ2V0U3RyaW5nKCJzY2hlbWUiKTsgISF1bmNhbm9uaWNhbGl6ZWRTY2hlbWUpIHsKKyAg
ICAgICAgYXV0byBzY2hlbWUgPSBXVEY6OlVSTFBhcnNlcjo6bWF5YmVDYW5vbmljYWxpemVTY2hl
bWUodW5jYW5vbmljYWxpemVkU2NoZW1lKTsKKyAgICAgICAgaWYgKCFzY2hlbWUpCisgICAgICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVk
aXJlY3RVUkxTY2hlbWVJbnZhbGlkKTsKKyAgICAgICAgaWYgKGFsbG93ZWRSZWRpcmVjdFVSTFNj
aGVtZXMgJiYgIWFsbG93ZWRSZWRpcmVjdFVSTFNjaGVtZXMtPmNvbnRhaW5zKCpzY2hlbWUpKQor
ICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJvcjo6
SlNPTlJlZGlyZWN0VVJMU2NoZW1lTm90QWxsb3dlZCk7CisgICAgICAgIGFjdGlvbi5zY2hlbWUg
PSBXVEZNb3ZlKCpzY2hlbWUpOworICAgIH0KICAgICBhY3Rpb24udXNlcm5hbWUgPSB0cmFuc2Zv
cm0uZ2V0U3RyaW5nKCJ1c2VybmFtZSIpOwogICAgIGlmIChhdXRvIHF1ZXJ5VHJhbnNmb3JtID0g
dHJhbnNmb3JtLmdldE9iamVjdCgicXVlcnktdHJhbnNmb3JtIikpIHsKICAgICAgICAgYXV0byBw
YXJzZWRRdWVyeVRyYW5zZm9ybSA9IFF1ZXJ5VHJhbnNmb3JtOjpwYXJzZSgqcXVlcnlUcmFuc2Zv
cm0pOwogICAgICAgICBpZiAoIXBhcnNlZFF1ZXJ5VHJhbnNmb3JtKQogICAgICAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKHBhcnNlZFF1ZXJ5VHJhbnNmb3JtLmVycm9yKCkpOwogICAgICAg
ICBhY3Rpb24ucXVlcnlUcmFuc2Zvcm0gPSAqcGFyc2VkUXVlcnlUcmFuc2Zvcm07Ci0gICAgfSBl
bHNlCi0gICAgICAgIGFjdGlvbi5xdWVyeVRyYW5zZm9ybSA9IHRyYW5zZm9ybS5nZXRTdHJpbmco
InF1ZXJ5Iik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byBxdWVyeSA9IHRyYW5zZm9ybS5n
ZXRTdHJpbmcoInF1ZXJ5Iik7CisgICAgICAgIGlmICghcXVlcnkuaXNFbXB0eSgpICYmICFxdWVy
eS5zdGFydHNXaXRoKCc/JykpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29u
dGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RJbnZhbGlkUXVlcnkpOworICAgICAgICBh
Y3Rpb24ucXVlcnlUcmFuc2Zvcm0gPSBXVEZNb3ZlKHF1ZXJ5KTsKKyAgICB9CiAgICAgcmV0dXJu
IFdURk1vdmUoYWN0aW9uKTsKIH0KIApAQCAtMzk4LDEzICs0NjQsMTMgQEAgdm9pZCBSZWRpcmVj
dEFjdGlvbjo6VVJMVHJhbnNmb3JtQWN0aW9uOjpzZXJpYWxpemUoVmVjdG9yPHVpbnQ4X3Q+JiB2
ZWN0b3IpIGNvbnMKICAgICB1aW50OF90IGhhc1NjaGVtZSA9ICEhc2NoZW1lOwogICAgIHVpbnQ4
X3QgaGFzVXNlcm5hbWUgPSAhIXVzZXJuYW1lOwogICAgIGF1dG8qIHF1ZXJ5U3RyaW5nID0gc3Rk
OjpnZXRfaWY8U3RyaW5nPigmcXVlcnlUcmFuc2Zvcm0pOworICAgIGF1dG8gcXVlcnlTdHJpbmdV
VEY4ID0gcXVlcnlTdHJpbmcgPyBxdWVyeVN0cmluZy0+dXRmOCgpIDogQ1N0cmluZygpOwogICAg
IHVpbnQ4X3QgaGFzUXVlcnkgPSAhcXVlcnlTdHJpbmcgfHwgISEqcXVlcnlTdHJpbmc7CiAKICAg
ICBhdXRvIGZyYWdtZW50VVRGOCA9IGZyYWdtZW50LnV0ZjgoKTsKICAgICBhdXRvIGhvc3RVVEY4
ID0gaG9zdC51dGY4KCk7CiAgICAgYXV0byBwYXNzd29yZFVURjggPSBwYXNzd29yZC51dGY4KCk7
CiAgICAgYXV0byBwYXRoVVRGOCA9IHBhdGgudXRmOCgpOwotICAgIGF1dG8gcG9ydFVURjggPSBw
b3J0LnV0ZjgoKTsKICAgICBhdXRvIHNjaGVtZVVURjggPSBzY2hlbWUudXRmOCgpOwogICAgIGF1
dG8gdXNlcm5hbWVVVEY4ID0gdXNlcm5hbWUudXRmOCgpOwogCkBAIC00MTMsOSArNDc5LDEwIEBA
IHZvaWQgUmVkaXJlY3RBY3Rpb246OlVSTFRyYW5zZm9ybUFjdGlvbjo6c2VyaWFsaXplKFZlY3Rv
cjx1aW50OF90PiYgdmVjdG9yKSBjb25zCiAgICAgICAgICsgKGhhc0hvc3QgPyBzaXplb2YodWlu
dDMyX3QpICsgaG9zdFVURjgubGVuZ3RoKCkgOiAwKQogICAgICAgICArIChoYXNQYXNzd29yZCA/
IHNpemVvZih1aW50MzJfdCkgKyBwYXNzd29yZFVURjgubGVuZ3RoKCkgOiAwKQogICAgICAgICAr
IChoYXNQYXRoID8gc2l6ZW9mKHVpbnQzMl90KSArIHBhdGhVVEY4Lmxlbmd0aCgpIDogMCkKLSAg
ICAgICAgKyAoaGFzUG9ydCA/IHNpemVvZih1aW50MzJfdCkgKyBwb3J0VVRGOC5sZW5ndGgoKSA6
IDApCiAgICAgICAgICsgKGhhc1NjaGVtZSA/IHNpemVvZih1aW50MzJfdCkgKyBzY2hlbWVVVEY4
Lmxlbmd0aCgpIDogMCkKLSAgICAgICAgKyAoaGFzVXNlcm5hbWUgPyBzaXplb2YodWludDMyX3Qp
ICsgdXNlcm5hbWVVVEY4Lmxlbmd0aCgpIDogMCkpOworICAgICAgICArIChoYXNVc2VybmFtZSA/
IHNpemVvZih1aW50MzJfdCkgKyB1c2VybmFtZVVURjgubGVuZ3RoKCkgOiAwKQorICAgICAgICAr
IChoYXNQb3J0ID8gMSArICgqcG9ydCA/IHNpemVvZih1aW50MTZfdCkgOiAwKSA6IDApCisgICAg
ICAgICsgKGhhc1F1ZXJ5ID8gMSArIChxdWVyeVN0cmluZyA/IHNpemVvZih1aW50MzJfdCkgKyBx
dWVyeVN0cmluZ1VURjgubGVuZ3RoKCkgOiAwKSA6IDApKTsKIAogICAgIGF1dG8gYmVnaW5JbmRl
eCA9IHZlY3Rvci5zaXplKCk7CiAgICAgdW5jaGVja2VkQXBwZW5kKHZlY3RvciwgMCk7CkBAIC00
NDEsMTggKzUwOCwyMiBAQCB2b2lkIFJlZGlyZWN0QWN0aW9uOjpVUkxUcmFuc2Zvcm1BY3Rpb246
OnNlcmlhbGl6ZShWZWN0b3I8dWludDhfdD4mIHZlY3RvcikgY29ucwogICAgICAgICB1bmNoZWNr
ZWRBcHBlbmRMZW5ndGhBbmRTdHJpbmcocGFzc3dvcmRVVEY4KTsKICAgICBpZiAoaGFzUGF0aCkK
ICAgICAgICAgdW5jaGVja2VkQXBwZW5kTGVuZ3RoQW5kU3RyaW5nKHBhdGhVVEY4KTsKLSAgICBp
ZiAoaGFzUG9ydCkKLSAgICAgICAgdW5jaGVja2VkQXBwZW5kTGVuZ3RoQW5kU3RyaW5nKHBvcnRV
VEY4KTsKICAgICBpZiAoaGFzU2NoZW1lKQogICAgICAgICB1bmNoZWNrZWRBcHBlbmRMZW5ndGhB
bmRTdHJpbmcoc2NoZW1lVVRGOCk7CiAgICAgaWYgKGhhc1VzZXJuYW1lKQogICAgICAgICB1bmNo
ZWNrZWRBcHBlbmRMZW5ndGhBbmRTdHJpbmcodXNlcm5hbWVVVEY4KTsKKyAgICBpZiAoaGFzUG9y
dCkgeworICAgICAgICB2ZWN0b3IudW5jaGVja2VkQXBwZW5kKCEhKnBvcnQpOworICAgICAgICBp
ZiAoKnBvcnQpIHsKKyAgICAgICAgICAgIHZlY3Rvci51bmNoZWNrZWRBcHBlbmQoKipwb3J0ID4+
IDApOworICAgICAgICAgICAgdmVjdG9yLnVuY2hlY2tlZEFwcGVuZCgqKnBvcnQgPj4gOCk7Cisg
ICAgICAgIH0KKyAgICB9CiAgICAgaWYgKGhhc1F1ZXJ5KSB7Ci0gICAgICAgIHZlY3Rvci5hcHBl
bmQocXVlcnlUcmFuc2Zvcm0uaW5kZXgoKSk7Ci0gICAgICAgIHN0ZDo6dmlzaXQoV1RGOjptYWtl
VmlzaXRvcihbJl0oY29uc3QgU3RyaW5nJiBxdWVyeVN0cmluZykgewotICAgICAgICAgICAgYXV0
byBxdWVyeVN0cmluZ1VURjggPSBxdWVyeVN0cmluZy51dGY4KCk7Ci0gICAgICAgICAgICBhcHBl
bmQodmVjdG9yLCBxdWVyeVN0cmluZ1VURjgubGVuZ3RoKCkpOwotICAgICAgICAgICAgYXBwZW5k
KHZlY3RvciwgcXVlcnlTdHJpbmdVVEY4KTsKKyAgICAgICAgdmVjdG9yLnVuY2hlY2tlZEFwcGVu
ZChxdWVyeVRyYW5zZm9ybS5pbmRleCgpKTsKKyAgICAgICAgc3RkOjp2aXNpdChXVEY6Om1ha2VW
aXNpdG9yKFsmXShjb25zdCBTdHJpbmcmKSB7CisgICAgICAgICAgICB1bmNoZWNrZWRBcHBlbmQo
dmVjdG9yLCBxdWVyeVN0cmluZ1VURjgubGVuZ3RoKCkpOworICAgICAgICAgICAgdW5jaGVja2Vk
QXBwZW5kKHZlY3RvciwgcXVlcnlTdHJpbmdVVEY4KTsKICAgICAgICAgfSwgWyZdKGNvbnN0IFF1
ZXJ5VHJhbnNmb3JtJiB0cmFuc2Zvcm0pIHsKICAgICAgICAgICAgIHRyYW5zZm9ybS5zZXJpYWxp
emUodmVjdG9yKTsKICAgICAgICAgfSksIHF1ZXJ5VHJhbnNmb3JtKTsKQEAgLTQ4Niw5ICs1NTcs
MTggQEAgYXV0byBSZWRpcmVjdEFjdGlvbjo6VVJMVHJhbnNmb3JtQWN0aW9uOjpkZXNlcmlhbGl6
ZShTcGFuPGNvbnN0IHVpbnQ4X3Q+IHNwYW4pIC0KICAgICBhdXRvIGhvc3QgPSBoYXNIb3N0ID8g
ZGVzZXJpYWxpemVTdHJpbmcoKSA6IFN0cmluZygpOwogICAgIGF1dG8gcGFzc3dvcmQgPSBoYXNQ
YXNzd29yZCA/IGRlc2VyaWFsaXplU3RyaW5nKCkgOiBTdHJpbmcoKTsKICAgICBhdXRvIHBhdGgg
PSBoYXNQYXRoID8gZGVzZXJpYWxpemVTdHJpbmcoKSA6IFN0cmluZygpOwotICAgIGF1dG8gcG9y
dCA9IGhhc1BvcnQgPyBkZXNlcmlhbGl6ZVN0cmluZygpIDogU3RyaW5nKCk7CiAgICAgYXV0byBz
Y2hlbWUgPSBoYXNTY2hlbWUgPyBkZXNlcmlhbGl6ZVN0cmluZygpIDogU3RyaW5nKCk7CiAgICAg
YXV0byB1c2VybmFtZSA9IGhhc1VzZXJuYW1lID8gZGVzZXJpYWxpemVTdHJpbmcoKSA6IFN0cmlu
ZygpOworICAgIHN0ZDo6b3B0aW9uYWw8c3RkOjpvcHRpb25hbDx1aW50MTZfdD4+IHBvcnQ7Cisg
ICAgaWYgKGhhc1BvcnQpIHsKKyAgICAgICAgaWYgKHNwYW5bcHJvZ3Jlc3MrK10pIHsKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHNwYW4uc2l6ZSgpID4gcHJvZ3Jlc3MgKyAxKTsKKyAgICAg
ICAgICAgIHVpbnQxNl90IHZhbHVlID0gKHNwYW5bcHJvZ3Jlc3NdIDw8IDApIHwgKHNwYW5bcHJv
Z3Jlc3MgKyAxXSA8PCA4KTsKKyAgICAgICAgICAgIHBvcnQgPSB7IHsgdmFsdWUgfSB9OworICAg
ICAgICAgICAgcHJvZ3Jlc3MgKz0gMjsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBwb3J0
ID0geyBzdGQ6Om9wdGlvbmFsPHVpbnQxNl90PiB7IH0gfTsKKyAgICB9CiAgICAgUXVlcnlUcmFu
c2Zvcm1WYXJpYW50IHF1ZXJ5VHJhbnNmb3JtOwogICAgIGlmIChoYXNRdWVyeSkgewogICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzcGFuLnNpemUoKSA+IHByb2dyZXNzKTsKQEAgLTU1NSw2ICs2MzUs
NjYgQEAgYXV0byBSZWRpcmVjdEFjdGlvbjo6VVJMVHJhbnNmb3JtQWN0aW9uOjpRdWVyeVRyYW5z
Zm9ybTo6cGFyc2UoY29uc3QgSlNPTjo6T2JqZWMKICAgICByZXR1cm4gV1RGTW92ZShwYXJzZWRR
dWVyeVRyYW5zZm9ybSk7CiB9CiAKK3ZvaWQgUmVkaXJlY3RBY3Rpb246OlVSTFRyYW5zZm9ybUFj
dGlvbjo6YXBwbHlUb1VSTChVUkwmIHVybCkgY29uc3QKK3sKKyAgICBpZiAoISFmcmFnbWVudCkg
eworICAgICAgICBpZiAoZnJhZ21lbnQuaXNFbXB0eSgpKQorICAgICAgICAgICAgdXJsLnJlbW92
ZUZyYWdtZW50SWRlbnRpZmllcigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB1cmwuc2V0
RnJhZ21lbnRJZGVudGlmaWVyKFN0cmluZ1ZpZXcoZnJhZ21lbnQpLnN1YnN0cmluZygxKSk7Cisg
ICAgfQorICAgIGlmICghIWhvc3QpCisgICAgICAgIHVybC5zZXRIb3N0KGhvc3QpOworICAgIGlm
ICghIXBhc3N3b3JkKQorICAgICAgICB1cmwuc2V0UGFzc3dvcmQocGFzc3dvcmQpOworICAgIGlm
ICghIXBhdGgpCisgICAgICAgIHVybC5zZXRQYXRoKHBhdGgpOworICAgIGlmICghIXBvcnQpCisg
ICAgICAgIHVybC5zZXRQb3J0KCpwb3J0KTsKKyAgICBzdGQ6OnZpc2l0KFdURjo6bWFrZVZpc2l0
b3IoWyZdIChjb25zdCBTdHJpbmcmIHF1ZXJ5KSB7CisgICAgICAgIGlmICghcXVlcnkuaXNOdWxs
KCkpCisgICAgICAgICAgICB1cmwuc2V0UXVlcnkocXVlcnkuaXNFbXB0eSgpID8gU3RyaW5nVmll
dygpIDogU3RyaW5nVmlldyhxdWVyeSkpOworICAgIH0sIFsmXSAoY29uc3QgVVJMVHJhbnNmb3Jt
QWN0aW9uOjpRdWVyeVRyYW5zZm9ybSYgdHJhbnNmb3JtKSB7CisgICAgICAgIHRyYW5zZm9ybS5h
cHBseVRvVVJMKHVybCk7CisgICAgfSksIHF1ZXJ5VHJhbnNmb3JtKTsKKyAgICBpZiAoISFzY2hl
bWUpCisgICAgICAgIHVybC5zZXRQcm90b2NvbChzY2hlbWUpOworICAgIGlmICghIXVzZXJuYW1l
KQorICAgICAgICB1cmwuc2V0VXNlcih1c2VybmFtZSk7Cit9CisKK3ZvaWQgUmVkaXJlY3RBY3Rp
b246OlVSTFRyYW5zZm9ybUFjdGlvbjo6UXVlcnlUcmFuc2Zvcm06OmFwcGx5VG9VUkwoVVJMJiB1
cmwpIGNvbnN0Cit7CisgICAgYXV0byBmb3JtID0gV1RGOjpVUkxQYXJzZXI6OnBhcnNlVVJMRW5j
b2RlZEZvcm0odXJsLnF1ZXJ5KCkpOworCisgICAgSGFzaFNldDxTdHJpbmc+IGtleXNUb1JlbW92
ZTsKKyAgICBmb3IgKGF1dG8mIGtleSA6IHJlbW92ZVBhcmFtcykKKyAgICAgICAga2V5c1RvUmVt
b3ZlLmFkZChrZXkpOworICAgIGZvcm0ucmVtb3ZlQWxsTWF0Y2hpbmcoWyZdIChhdXRvJiBrZXlW
YWx1ZSkgeworICAgICAgICByZXR1cm4ga2V5c1RvUmVtb3ZlLmNvbnRhaW5zKGtleVZhbHVlLmtl
eSk7CisgICAgfSk7CisKKyAgICBWZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBTdHJp
bmc+PiBrZXlzVG9BZGQ7CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4ga2V5c1RvUmVwbGFj
ZTsKKyAgICBmb3IgKGF1dG8mIGtleVZhbHVlIDogYWRkT3JSZXBsYWNlUGFyYW1zKSB7CisgICAg
ICAgIGlmIChrZXlWYWx1ZS5yZXBsYWNlT25seSkKKyAgICAgICAgICAgIGtleXNUb1JlcGxhY2Uu
YWRkKGtleVZhbHVlLmtleSwga2V5VmFsdWUudmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBrZXlzVG9BZGQuYXBwZW5kKHsga2V5VmFsdWUua2V5LCBrZXlWYWx1ZS52YWx1ZSB9KTsK
KyAgICB9CisgICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6IGZvcm0pIHsKKyAgICAgICAgYXV0byBp
dGVyYXRvciA9IGtleXNUb1JlcGxhY2UuZmluZChrZXlWYWx1ZS5rZXkpOworICAgICAgICBpZiAo
aXRlcmF0b3IgIT0ga2V5c1RvUmVwbGFjZS5lbmQoKSkKKyAgICAgICAgICAgIGtleVZhbHVlLnZh
bHVlID0gaXRlcmF0b3ItPnZhbHVlOworICAgIH0KKyAgICBmb3JtLmFwcGVuZFZlY3RvcihXVEZN
b3ZlKGtleXNUb0FkZCkpOworCisgICAgU3RyaW5nQnVpbGRlciB0cmFuc2Zvcm1lZFF1ZXJ5Owor
ICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiBmb3JtKQorICAgICAgICB0cmFuc2Zvcm1lZFF1ZXJ5
LmFwcGVuZCh0cmFuc2Zvcm1lZFF1ZXJ5LmlzRW1wdHkoKSA/ICIiIDogIiYiLCBrZXlWYWx1ZS5r
ZXksICEha2V5VmFsdWUudmFsdWUgPyAiPSIgOiAiIiwga2V5VmFsdWUudmFsdWUpOworICAgIHVy
bC5zZXRRdWVyeSh0cmFuc2Zvcm1lZFF1ZXJ5KTsKK30KKwogYXV0byBSZWRpcmVjdEFjdGlvbjo6
VVJMVHJhbnNmb3JtQWN0aW9uOjpRdWVyeVRyYW5zZm9ybTo6aXNvbGF0ZWRDb3B5KCkgY29uc3Qg
LT4gUXVlcnlUcmFuc2Zvcm0KIHsKICAgICByZXR1cm4gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkFjdGlvbnMuaCBiL1NvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25BY3Rpb25zLmgKaW5k
ZXggNWEyZDBhZjZiYmMxNGMxNDc0MTJhZGNiMTA4NjMzMTJiMTZiNTE2YS4uYmZlODQyNmI2NTUy
YjdiZjYzZmFlZTk0OTM3ZmRlMGI5N2QwZjY4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkFjdGlvbnMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQWN0aW9ucy5oCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDkg
KzI5LDM4IEBACiAKICNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9uU3RyaW5nU2VyaWFsaXphdGlv
bi5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hGdW5j
dGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K2NsYXNzIFJlc291cmNlUmVxdWVzdDsKK30KIAogbmFtZXNwYWNlIFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zIHsKIAorLy8gRklYTUU6IFRoaXMgcHJvYmFibHkgYmVsb25ncyBpbiBXVEYsIHN1
Y2ggYXMgaW4gSGFzaEZ1bmN0aW9ucy5oLgorc3RydWN0IFZhcmlhbnRIYXNoZXIgeworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBWPgorICAgIHN0YXRpYyB1aW50MzJfdCBoYXNoKFYmJiB2YXJpYW50
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHBhaXJJbnRIYXNoKHZhcmlhbnQuaW5kZXgoKSwgc3Rk
Ojp2aXNpdChbXShjb25zdCBhdXRvJiB0eXBlKSB7CisgICAgICAgICAgICByZXR1cm4gdHlwZS5o
YXNoKCk7CisgICAgICAgIH0sIHN0ZDo6Zm9yd2FyZDxWPih2YXJpYW50KSkpOworICAgIH0KK307
CisKKy8vIEZJWE1FOiBUaGlzIHByb2JhYmx5IGJlbG9uZ3MgaW4gV1RGLCBzdWNoIGFzIGluIEhh
c2hlci5oLgorc3RydWN0IFZlY3Rvckhhc2hlciB7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFY+
CisgICAgc3RhdGljIHVpbnQzMl90IGhhc2goViYmIHZlY3RvcikKKyAgICB7CisgICAgICAgIEhh
c2hlciBoYXNoZXI7CisgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKKyAgICAg
ICAgICAgIGFkZChoYXNoZXIsIGVsZW1lbnQuaGFzaCgpKTsKKyAgICAgICAgcmV0dXJuIGhhc2hl
ci5oYXNoKCk7CisgICAgfQorfTsKKwogc3RydWN0IEFjdGlvbjsKIAogdXNpbmcgU2VyaWFsaXpl
ZEFjdGlvbkJ5dGUgPSB1aW50OF90OwpAQCAtNjYsNiArOTUsNyBAQCBzdHJ1Y3QgV0VCQ09SRV9F
WFBPUlQgTW9kaWZ5SGVhZGVyc0FjdGlvbiB7CiAgICAgICAgICAgICBTdHJpbmcgaGVhZGVyOwog
ICAgICAgICAgICAgU3RyaW5nIHZhbHVlOwogCisgICAgICAgICAgICB1aW50MzJfdCBoYXNoKCkg
Y29uc3QgeyByZXR1cm4gcGFpckludEhhc2goaGVhZGVyLmhhc2goKSwgdmFsdWUuaGFzaCgpKTsg
fQogICAgICAgICAgICAgQXBwZW5kT3BlcmF0aW9uIGlzb2xhdGVkQ29weSgpIGNvbnN0IHsgcmV0
dXJuIHsgaGVhZGVyLmlzb2xhdGVkQ29weSgpLCB2YWx1ZS5pc29sYXRlZENvcHkoKSB9OyB9CiAg
ICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQXBwZW5kT3BlcmF0aW9uJiBvdGhlcikg
Y29uc3QgeyByZXR1cm4gb3RoZXIuaGVhZGVyID09IHRoaXMtPmhlYWRlciAmJiBvdGhlci52YWx1
ZSA9PSB0aGlzLT52YWx1ZTsgfQogICAgICAgICB9OwpAQCAtNzMsNDcgKzEwMyw2NyBAQCBzdHJ1
Y3QgV0VCQ09SRV9FWFBPUlQgTW9kaWZ5SGVhZGVyc0FjdGlvbiB7CiAgICAgICAgICAgICBTdHJp
bmcgaGVhZGVyOwogICAgICAgICAgICAgU3RyaW5nIHZhbHVlOwogCisgICAgICAgICAgICB1aW50
MzJfdCBoYXNoKCkgY29uc3QgeyByZXR1cm4gcGFpckludEhhc2goaGVhZGVyLmhhc2goKSwgdmFs
dWUuaGFzaCgpKTsgfQogICAgICAgICAgICAgU2V0T3BlcmF0aW9uIGlzb2xhdGVkQ29weSgpIGNv
bnN0IHsgcmV0dXJuIHsgaGVhZGVyLmlzb2xhdGVkQ29weSgpLCB2YWx1ZS5pc29sYXRlZENvcHko
KSB9OyB9CiAgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU2V0T3BlcmF0aW9uJiBv
dGhlcikgY29uc3QgeyByZXR1cm4gb3RoZXIuaGVhZGVyID09IHRoaXMtPmhlYWRlciAmJiBvdGhl
ci52YWx1ZSA9PSB0aGlzLT52YWx1ZTsgfQogICAgICAgICB9OwogICAgICAgICBzdHJ1Y3QgUmVt
b3ZlT3BlcmF0aW9uIHsKICAgICAgICAgICAgIFN0cmluZyBoZWFkZXI7CiAKKyAgICAgICAgICAg
IHVpbnQzMl90IGhhc2goKSBjb25zdCB7IHJldHVybiBoZWFkZXIuaGFzaCgpOyB9CiAgICAgICAg
ICAgICBSZW1vdmVPcGVyYXRpb24gaXNvbGF0ZWRDb3B5KCkgY29uc3QgeyByZXR1cm4geyBoZWFk
ZXIuaXNvbGF0ZWRDb3B5KCkgfTsgfQogICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFJlbW92ZU9wZXJhdGlvbiYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG90aGVyLmhlYWRlciA9PSB0
aGlzLT5oZWFkZXI7IH0KICAgICAgICAgfTsKICAgICAgICAgdXNpbmcgT3BlcmF0aW9uVmFyaWFu
dCA9IHN0ZDo6dmFyaWFudDxBcHBlbmRPcGVyYXRpb24sIFNldE9wZXJhdGlvbiwgUmVtb3ZlT3Bl
cmF0aW9uPjsKICAgICAgICAgT3BlcmF0aW9uVmFyaWFudCBvcGVyYXRpb247CiAKKyAgICAgICAg
dWludDMyX3QgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIFZhcmlhbnRIYXNoZXI6Omhhc2gob3BlcmF0
aW9uKTsgfQogICAgICAgICBzdGF0aWMgRXhwZWN0ZWQ8TW9kaWZ5SGVhZGVySW5mbywgc3RkOjpl
cnJvcl9jb2RlPiBwYXJzZShjb25zdCBKU09OOjpWYWx1ZSYpOwogICAgICAgICBNb2RpZnlIZWFk
ZXJJbmZvIGlzb2xhdGVkQ29weSgpIGNvbnN0OwogICAgICAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgTW9kaWZ5SGVhZGVySW5mbyYpIGNvbnN0OwogICAgICAgICB2b2lkIHNlcmlhbGl6ZShWZWN0
b3I8dWludDhfdD4mKSBjb25zdDsKICAgICAgICAgc3RhdGljIE1vZGlmeUhlYWRlckluZm8gZGVz
ZXJpYWxpemUoU3Bhbjxjb25zdCB1aW50OF90Pik7CiAgICAgICAgIHN0YXRpYyBzaXplX3Qgc2Vy
aWFsaXplZExlbmd0aChTcGFuPGNvbnN0IHVpbnQ4X3Q+KTsKKyAgICAgICAgdm9pZCBhcHBseVRv
UmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmKTsKICAgICB9OwogCisgICAgZW51bSBjbGFzcyBIYXNo
VGFibGVUeXBlIDogdWludDhfdCB7IEVtcHR5LCBEZWxldGVkLCBGdWxsIH0gaGFzaFRhYmxlVHlw
ZTsKICAgICBWZWN0b3I8TW9kaWZ5SGVhZGVySW5mbz4gcmVxdWVzdEhlYWRlcnM7CiAgICAgVmVj
dG9yPE1vZGlmeUhlYWRlckluZm8+IHJlc3BvbnNlSGVhZGVyczsKIAorICAgIE1vZGlmeUhlYWRl
cnNBY3Rpb24oVmVjdG9yPE1vZGlmeUhlYWRlckluZm8+JiYgcmVxdWVzdEhlYWRlcnMsIFZlY3Rv
cjxNb2RpZnlIZWFkZXJJbmZvPiYmIHJlc3BvbnNlSGVhZGVycykKKyAgICAgICAgOiBoYXNoVGFi
bGVUeXBlKEhhc2hUYWJsZVR5cGU6OkZ1bGwpCisgICAgICAgICwgcmVxdWVzdEhlYWRlcnMoV1RG
TW92ZShyZXF1ZXN0SGVhZGVycykpCisgICAgICAgICwgcmVzcG9uc2VIZWFkZXJzKFdURk1vdmUo
cmVzcG9uc2VIZWFkZXJzKSkgeyB9CisKKyAgICBlbnVtIEVtcHR5VmFsdWVUYWcgeyBFbXB0eVZh
bHVlIH07CisgICAgZW51bSBEZWxldGVkVmFsdWVUYWcgeyBEZWxldGVkVmFsdWUgfTsKKyAgICBN
b2RpZnlIZWFkZXJzQWN0aW9uKEVtcHR5VmFsdWVUYWcpIDogaGFzaFRhYmxlVHlwZShIYXNoVGFi
bGVUeXBlOjpFbXB0eSkgeyB9CisgICAgTW9kaWZ5SGVhZGVyc0FjdGlvbihEZWxldGVkVmFsdWVU
YWcpIDogaGFzaFRhYmxlVHlwZShIYXNoVGFibGVUeXBlOjpEZWxldGVkKSB7IH0KKyAgICBib29s
IGlzRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gaGFzaFRhYmxlVHlwZSA9PSBIYXNoVGFi
bGVUeXBlOjpEZWxldGVkOyB9CisKKyAgICB1aW50MzJfdCBoYXNoKCkgY29uc3QgeyByZXR1cm4g
cGFpckludEhhc2goVmVjdG9ySGFzaGVyOjpoYXNoKHJlcXVlc3RIZWFkZXJzKSwgVmVjdG9ySGFz
aGVyOjpoYXNoKHJlc3BvbnNlSGVhZGVycykpOyB9CiAgICAgc3RhdGljIEV4cGVjdGVkPE1vZGlm
eUhlYWRlcnNBY3Rpb24sIHN0ZDo6ZXJyb3JfY29kZT4gcGFyc2UoY29uc3QgSlNPTjo6T2JqZWN0
Jik7CiAgICAgTW9kaWZ5SGVhZGVyc0FjdGlvbiBpc29sYXRlZENvcHkoKSBjb25zdDsKICAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgTW9kaWZ5SGVhZGVyc0FjdGlvbiYpIGNvbnN0OwogICAgIHZv
aWQgc2VyaWFsaXplKFZlY3Rvcjx1aW50OF90PiYpIGNvbnN0OwogICAgIHN0YXRpYyBNb2RpZnlI
ZWFkZXJzQWN0aW9uIGRlc2VyaWFsaXplKFNwYW48Y29uc3QgdWludDhfdD4pOwogICAgIHN0YXRp
YyBzaXplX3Qgc2VyaWFsaXplZExlbmd0aChTcGFuPGNvbnN0IHVpbnQ4X3Q+KTsKKyAgICB2b2lk
IGFwcGx5VG9SZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYpOwogfTsKIAogc3RydWN0IFdFQkNPUkVf
RVhQT1JUIFJlZGlyZWN0QWN0aW9uIHsKICAgICBzdHJ1Y3QgRXh0ZW5zaW9uUGF0aEFjdGlvbiB7
CiAgICAgICAgIFN0cmluZyBleHRlbnNpb25QYXRoOwogCisgICAgICAgIHVpbnQzMl90IGhhc2go
KSBjb25zdCB7IHJldHVybiBleHRlbnNpb25QYXRoLmhhc2goKTsgfQogICAgICAgICBFeHRlbnNp
b25QYXRoQWN0aW9uIGlzb2xhdGVkQ29weSgpIGNvbnN0IHsgcmV0dXJuIHsgZXh0ZW5zaW9uUGF0
aC5pc29sYXRlZENvcHkoKSB9OyB9CiAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFeHRl
bnNpb25QYXRoQWN0aW9uJiBvdGhlcikgY29uc3QgeyByZXR1cm4gb3RoZXIuZXh0ZW5zaW9uUGF0
aCA9PSB0aGlzLT5leHRlbnNpb25QYXRoOyB9CiAgICAgfTsKICAgICBzdHJ1Y3QgUmVnZXhTdWJz
dGl0dXRpb25BY3Rpb24gewogICAgICAgICBTdHJpbmcgcmVnZXhTdWJzdGl0dXRpb247CiAKKyAg
ICAgICAgdWludDMyX3QgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIHJlZ2V4U3Vic3RpdHV0aW9uLmhh
c2goKTsgfQogICAgICAgICBSZWdleFN1YnN0aXR1dGlvbkFjdGlvbiBpc29sYXRlZENvcHkoKSBj
b25zdCB7IHJldHVybiB7IHJlZ2V4U3Vic3RpdHV0aW9uLmlzb2xhdGVkQ29weSgpIH07IH0KICAg
ICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlZ2V4U3Vic3RpdHV0aW9uQWN0aW9uJiBvdGhl
cikgY29uc3QgeyByZXR1cm4gb3RoZXIucmVnZXhTdWJzdGl0dXRpb24gPT0gdGhpcy0+cmVnZXhT
dWJzdGl0dXRpb247IH0KICAgICB9OwpAQCAtMTI0LDYgKzE3NCw3IEBAIHN0cnVjdCBXRUJDT1JF
X0VYUE9SVCBSZWRpcmVjdEFjdGlvbiB7CiAgICAgICAgICAgICAgICAgYm9vbCByZXBsYWNlT25s
eSB7IGZhbHNlIH07CiAgICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlOwogCisgICAgICAgICAg
ICAgICAgdWludDMyX3QgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIGNvbXB1dGVIYXNoKGtleSwgcmVw
bGFjZU9ubHksIHZhbHVlKTsgfQogICAgICAgICAgICAgICAgIHN0YXRpYyBFeHBlY3RlZDxRdWVy
eUtleVZhbHVlLCBzdGQ6OmVycm9yX2NvZGU+IHBhcnNlKGNvbnN0IEpTT046OlZhbHVlJik7CiAg
ICAgICAgICAgICAgICAgUXVlcnlLZXlWYWx1ZSBpc29sYXRlZENvcHkoKSBjb25zdDsKICAgICAg
ICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUXVlcnlLZXlWYWx1ZSYpIGNvbnN0OwpA
QCAtMTM1LDQ3ICsxODYsNjUgQEAgc3RydWN0IFdFQkNPUkVfRVhQT1JUIFJlZGlyZWN0QWN0aW9u
IHsKICAgICAgICAgICAgIFZlY3RvcjxRdWVyeUtleVZhbHVlPiBhZGRPclJlcGxhY2VQYXJhbXM7
CiAgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiByZW1vdmVQYXJhbXM7CiAKKyAgICAgICAgICAg
IHVpbnQzMl90IGhhc2goKSBjb25zdCB7IHJldHVybiBjb21wdXRlSGFzaChWZWN0b3JIYXNoZXI6
Omhhc2goYWRkT3JSZXBsYWNlUGFyYW1zKSwgcmVtb3ZlUGFyYW1zKTsgfQogICAgICAgICAgICAg
c3RhdGljIEV4cGVjdGVkPFF1ZXJ5VHJhbnNmb3JtLCBzdGQ6OmVycm9yX2NvZGU+IHBhcnNlKGNv
bnN0IEpTT046Ok9iamVjdCYpOwogICAgICAgICAgICAgUXVlcnlUcmFuc2Zvcm0gaXNvbGF0ZWRD
b3B5KCkgY29uc3Q7CiAgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUXVlcnlUcmFu
c2Zvcm0mKSBjb25zdDsKICAgICAgICAgICAgIHZvaWQgc2VyaWFsaXplKFZlY3Rvcjx1aW50OF90
PiYpIGNvbnN0OwogICAgICAgICAgICAgc3RhdGljIFF1ZXJ5VHJhbnNmb3JtIGRlc2VyaWFsaXpl
KFNwYW48Y29uc3QgdWludDhfdD4pOwogICAgICAgICAgICAgc3RhdGljIHNpemVfdCBzZXJpYWxp
emVkTGVuZ3RoKFNwYW48Y29uc3QgdWludDhfdD4pOworICAgICAgICAgICAgdm9pZCBhcHBseVRv
VVJMKFVSTCYpIGNvbnN0OwogICAgICAgICB9OwogCiAgICAgICAgIFN0cmluZyBmcmFnbWVudDsK
ICAgICAgICAgU3RyaW5nIGhvc3Q7CiAgICAgICAgIFN0cmluZyBwYXNzd29yZDsKICAgICAgICAg
U3RyaW5nIHBhdGg7Ci0gICAgICAgIFN0cmluZyBwb3J0OworICAgICAgICBzdGQ6Om9wdGlvbmFs
PHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+PiBwb3J0OwogICAgICAgICB1c2luZyBRdWVyeVRyYW5z
Zm9ybVZhcmlhbnQgPSBzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBRdWVyeVRyYW5zZm9ybT47CiAgICAg
ICAgIFF1ZXJ5VHJhbnNmb3JtVmFyaWFudCBxdWVyeVRyYW5zZm9ybTsKICAgICAgICAgU3RyaW5n
IHNjaGVtZTsKICAgICAgICAgU3RyaW5nIHVzZXJuYW1lOwogCi0gICAgICAgIHN0YXRpYyBFeHBl
Y3RlZDxVUkxUcmFuc2Zvcm1BY3Rpb24sIHN0ZDo6ZXJyb3JfY29kZT4gcGFyc2UoY29uc3QgSlNP
Tjo6T2JqZWN0JiwgY29uc3QgSGFzaFNldDxTdHJpbmc+Jik7CisgICAgICAgIHVpbnQzMl90IGhh
c2goKSBjb25zdCB7IHJldHVybiBjb21wdXRlSGFzaChmcmFnbWVudC5oYXNoKCksIGhvc3QuaGFz
aCgpLCBwYXNzd29yZC5oYXNoKCksIHBhdGguaGFzaCgpLCBwb3J0LCBWYXJpYW50SGFzaGVyOjpo
YXNoKHF1ZXJ5VHJhbnNmb3JtKSwgc2NoZW1lLmhhc2goKSwgdXNlcm5hbWUuaGFzaCgpKTsgfQor
ICAgICAgICBzdGF0aWMgRXhwZWN0ZWQ8VVJMVHJhbnNmb3JtQWN0aW9uLCBzdGQ6OmVycm9yX2Nv
ZGU+IHBhcnNlKGNvbnN0IEpTT046Ok9iamVjdCYsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8SGFzaFNl
dDxTdHJpbmc+PiYpOwogICAgICAgICBVUkxUcmFuc2Zvcm1BY3Rpb24gaXNvbGF0ZWRDb3B5KCkg
Y29uc3Q7CiAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBVUkxUcmFuc2Zvcm1BY3Rpb24m
KSBjb25zdDsKICAgICAgICAgdm9pZCBzZXJpYWxpemUoVmVjdG9yPHVpbnQ4X3Q+JikgY29uc3Q7
CiAgICAgICAgIHN0YXRpYyBVUkxUcmFuc2Zvcm1BY3Rpb24gZGVzZXJpYWxpemUoU3Bhbjxjb25z
dCB1aW50OF90Pik7CiAgICAgICAgIHN0YXRpYyBzaXplX3Qgc2VyaWFsaXplZExlbmd0aChTcGFu
PGNvbnN0IHVpbnQ4X3Q+KTsKKyAgICAgICAgdm9pZCBhcHBseVRvVVJMKFVSTCYpIGNvbnN0Owog
ICAgIH07CiAgICAgc3RydWN0IFVSTEFjdGlvbiB7CiAgICAgICAgIFN0cmluZyB1cmw7CiAKKyAg
ICAgICAgdWludDMyX3QgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIHVybC5oYXNoKCk7IH0KICAgICAg
ICAgVVJMQWN0aW9uIGlzb2xhdGVkQ29weSgpIGNvbnN0IHsgcmV0dXJuIHsgdXJsLmlzb2xhdGVk
Q29weSgpIH07IH0KICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFVSTEFjdGlvbiYgb3Ro
ZXIpIGNvbnN0IHsgcmV0dXJuIG90aGVyLnVybCA9PSB0aGlzLT51cmw7IH0KICAgICB9OwogCisg
ICAgZW51bSBjbGFzcyBIYXNoVGFibGVUeXBlIDogdWludDhfdCB7IEVtcHR5LCBEZWxldGVkLCBG
dWxsIH0gaGFzaFRhYmxlVHlwZTsKICAgICB1c2luZyBBY3Rpb25WYXJpYW50ID0gc3RkOjp2YXJp
YW50PEV4dGVuc2lvblBhdGhBY3Rpb24sIFJlZ2V4U3Vic3RpdHV0aW9uQWN0aW9uLCBVUkxUcmFu
c2Zvcm1BY3Rpb24sIFVSTEFjdGlvbj47CiAgICAgQWN0aW9uVmFyaWFudCBhY3Rpb247CiAKLSAg
ICBzdGF0aWMgRXhwZWN0ZWQ8UmVkaXJlY3RBY3Rpb24sIHN0ZDo6ZXJyb3JfY29kZT4gcGFyc2Uo
Y29uc3QgSlNPTjo6T2JqZWN0JiwgY29uc3QgSGFzaFNldDxTdHJpbmc+Jik7CisgICAgUmVkaXJl
Y3RBY3Rpb24oQWN0aW9uVmFyaWFudCYmIGFjdGlvbikKKyAgICAgICAgOiBoYXNoVGFibGVUeXBl
KEhhc2hUYWJsZVR5cGU6OkZ1bGwpCisgICAgICAgICwgYWN0aW9uKFdURk1vdmUoYWN0aW9uKSkg
eyB9CisKKyAgICBlbnVtIEVtcHR5VmFsdWVUYWcgeyBFbXB0eVZhbHVlIH07CisgICAgZW51bSBE
ZWxldGVkVmFsdWVUYWcgeyBEZWxldGVkVmFsdWUgfTsKKyAgICBSZWRpcmVjdEFjdGlvbihFbXB0
eVZhbHVlVGFnKSA6IGhhc2hUYWJsZVR5cGUoSGFzaFRhYmxlVHlwZTo6RW1wdHkpIHsgfQorICAg
IFJlZGlyZWN0QWN0aW9uKERlbGV0ZWRWYWx1ZVRhZykgOiBoYXNoVGFibGVUeXBlKEhhc2hUYWJs
ZVR5cGU6OkRlbGV0ZWQpIHsgfQorICAgIGJvb2wgaXNEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJl
dHVybiBoYXNoVGFibGVUeXBlID09IEhhc2hUYWJsZVR5cGU6OkRlbGV0ZWQ7IH0KKyAgICB1aW50
MzJfdCBoYXNoKCkgY29uc3QgeyByZXR1cm4gVmFyaWFudEhhc2hlcjo6aGFzaChhY3Rpb24pOyB9
CisKKyAgICBzdGF0aWMgRXhwZWN0ZWQ8UmVkaXJlY3RBY3Rpb24sIHN0ZDo6ZXJyb3JfY29kZT4g
cGFyc2UoY29uc3QgSlNPTjo6T2JqZWN0JiwgY29uc3Qgc3RkOjpvcHRpb25hbDxIYXNoU2V0PFN0
cmluZz4+Jik7CiAgICAgUmVkaXJlY3RBY3Rpb24gaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFJlZGlyZWN0QWN0aW9uJikgY29uc3Q7CiAgICAgdm9pZCBz
ZXJpYWxpemUoVmVjdG9yPHVpbnQ4X3Q+JikgY29uc3Q7CiAgICAgc3RhdGljIFJlZGlyZWN0QWN0
aW9uIGRlc2VyaWFsaXplKFNwYW48Y29uc3QgdWludDhfdD4pOwogICAgIHN0YXRpYyBzaXplX3Qg
c2VyaWFsaXplZExlbmd0aChTcGFuPGNvbnN0IHVpbnQ4X3Q+KTsKKyAgICB2b2lkIGFwcGx5VG9S
ZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYpOwogfTsKIAogdXNpbmcgQWN0aW9uRGF0YSA9IHN0ZDo6
dmFyaWFudDwKQEAgLTE5MSw0ICsyNjAsMjQgQEAgdXNpbmcgQWN0aW9uRGF0YSA9IHN0ZDo6dmFy
aWFudDwKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnMKIAorbmFt
ZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpSZWRpcmVjdEFjdGlvbj4geworICAgIHVzaW5nIEFjdGlvbiA9IFdl
YkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpSZWRpcmVjdEFjdGlvbjsKKyAgICBzdGF0aWMgdWlu
dDMyX3QgaGFzaChjb25zdCBBY3Rpb24mIGFjdGlvbikgeyByZXR1cm4gYWN0aW9uLmhhc2goKTsg
fQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEFjdGlvbiYgYSwgY29uc3QgQWN0aW9uJiBi
KSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29t
cGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hU
cmFpdHM8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlJlZGlyZWN0QWN0aW9uPiA6IHB1Ymxp
YyBDdXN0b21IYXNoVHJhaXRzPFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpSZWRpcmVjdEFj
dGlvbj4geyB9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6TW9kaWZ5SGVhZGVyc0FjdGlvbj4geworICAgIHVzaW5nIEFjdGlvbiA9
IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpNb2RpZnlIZWFkZXJzQWN0aW9uOworICAgIHN0
YXRpYyB1aW50MzJfdCBoYXNoKGNvbnN0IEFjdGlvbiYgYWN0aW9uKSB7IHJldHVybiBhY3Rpb24u
aGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQWN0aW9uJiBhLCBjb25zdCBB
Y3Rpb24mIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBz
YWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OwordGVtcGxhdGU8PiBzdHJ1
Y3QgSGFzaFRyYWl0czxXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TW9kaWZ5SGVhZGVyc0Fj
dGlvbj4gOiBwdWJsaWMgQ3VzdG9tSGFzaFRyYWl0czxXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6TW9kaWZ5SGVhZGVyc0FjdGlvbj4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwogI2Vu
ZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNw
cAppbmRleCBmN2Q0YjQ5MjYwZDAyMmU0MDZiMDVhOWVlYmZiNDIzYzFiY2JkMGU3Li5jMGE4OGQz
MTc1MzhkYjIxZWY2ZmU3N2JmYTdhNzJlODZlZTU3ZDI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxl
ci5jcHAKQEAgLTc2LDEyICs3NiwxNiBAQCBzdGF0aWMgVmVjdG9yPHVuc2lnbmVkPiBzZXJpYWxp
emVBY3Rpb25zKGNvbnN0IFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uUnVsZT4mIHJ1bAogICAgIHVz
aW5nIEFjdGlvbkxvY2F0aW9uID0gdWludDMyX3Q7CiAgICAgdXNpbmcgQWN0aW9uTWFwID0gSGFz
aE1hcDxSZXNvdXJjZUZsYWdzLCBBY3Rpb25Mb2NhdGlvbiwgRGVmYXVsdEhhc2g8UmVzb3VyY2VG
bGFncz4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8UmVzb3VyY2VGbGFncz4+
OwogICAgIHVzaW5nIFN0cmluZ0FjdGlvbk1hcCA9IEhhc2hNYXA8c3RkOjpwYWlyPFN0cmluZywg
UmVzb3VyY2VGbGFncz4sIEFjdGlvbkxvY2F0aW9uLCBEZWZhdWx0SGFzaDxzdGQ6OnBhaXI8U3Ry
aW5nLCBSZXNvdXJjZUZsYWdzPj4sIFBhaXJIYXNoVHJhaXRzPEhhc2hUcmFpdHM8U3RyaW5nPiwg
V1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxSZXNvdXJjZUZsYWdzPj4+OworICAg
IHVzaW5nIFJlZGlyZWN0QWN0aW9uTWFwID0gSGFzaE1hcDxzdGQ6OnBhaXI8UmVkaXJlY3RBY3Rp
b24sIFJlc291cmNlRmxhZ3M+LCBBY3Rpb25Mb2NhdGlvbiwgRGVmYXVsdEhhc2g8c3RkOjpwYWly
PFJlZGlyZWN0QWN0aW9uLCBSZXNvdXJjZUZsYWdzPj4sIFBhaXJIYXNoVHJhaXRzPEhhc2hUcmFp
dHM8UmVkaXJlY3RBY3Rpb24+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPFJl
c291cmNlRmxhZ3M+Pj47CisgICAgdXNpbmcgTW9kaWZ5SGVhZGVyc0FjdGlvbk1hcCA9IEhhc2hN
YXA8c3RkOjpwYWlyPE1vZGlmeUhlYWRlcnNBY3Rpb24sIFJlc291cmNlRmxhZ3M+LCBBY3Rpb25M
b2NhdGlvbiwgRGVmYXVsdEhhc2g8c3RkOjpwYWlyPE1vZGlmeUhlYWRlcnNBY3Rpb24sIFJlc291
cmNlRmxhZ3M+PiwgUGFpckhhc2hUcmFpdHM8SGFzaFRyYWl0czxNb2RpZnlIZWFkZXJzQWN0aW9u
PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxSZXNvdXJjZUZsYWdzPj4+Owog
ICAgIEFjdGlvbk1hcCBibG9ja0xvYWRBY3Rpb25zTWFwOwogICAgIEFjdGlvbk1hcCBibG9ja0Nv
b2tpZXNBY3Rpb25zTWFwOwogICAgIFBlbmRpbmdEaXNwbGF5Tm9uZUFjdGlvbnNNYXAgY3NzRGlz
cGxheU5vbmVBY3Rpb25zTWFwOwogICAgIEFjdGlvbk1hcCBpZ25vcmVQcmV2aW91c1J1bGVBY3Rp
b25zTWFwOwogICAgIEFjdGlvbk1hcCBtYWtlSFRUUFNBY3Rpb25zTWFwOwogICAgIFN0cmluZ0Fj
dGlvbk1hcCBub3RpZnlBY3Rpb25zTWFwOworICAgIFJlZGlyZWN0QWN0aW9uTWFwIHJlZGlyZWN0
QWN0aW9uTWFwOworICAgIE1vZGlmeUhlYWRlcnNBY3Rpb25NYXAgbW9kaWZ5SGVhZGVyc0FjdGlv
bk1hcDsKIAogICAgIGZvciAodW5zaWduZWQgcnVsZUluZGV4ID0gMDsgcnVsZUluZGV4IDwgcnVs
ZUxpc3Quc2l6ZSgpOyArK3J1bGVJbmRleCkgewogICAgICAgICBjb25zdCBDb250ZW50RXh0ZW5z
aW9uUnVsZSYgcnVsZSA9IHJ1bGVMaXN0W3J1bGVJbmRleF07CkBAIC0xMTEsMzEgKzExNSwzNCBA
QCBzdGF0aWMgVmVjdG9yPHVuc2lnbmVkPiBzZXJpYWxpemVBY3Rpb25zKGNvbnN0IFZlY3RvcjxD
b250ZW50RXh0ZW5zaW9uUnVsZT4mIHJ1bAogICAgICAgICB9CiAKICAgICAgICAgUmVzb3VyY2VG
bGFncyBmbGFncyA9IHJ1bGUudHJpZ2dlcigpLmZsYWdzOwotICAgICAgICB1bnNpZ25lZCBhY3Rp
b25Mb2NhdGlvbiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKLSAgICAg
ICAgCisKICAgICAgICAgYXV0byBmaW5kT3JNYWtlQWN0aW9uTG9jYXRpb24gPSBbJl0gKEFjdGlv
bk1hcCYgbWFwKSB7Ci0gICAgICAgICAgICBjb25zdCBhdXRvIGV4aXN0aW5nQWN0aW9uID0gbWFw
LmZpbmQoZmxhZ3MpOwotICAgICAgICAgICAgaWYgKGV4aXN0aW5nQWN0aW9uID09IG1hcC5lbmQo
KSkgewotICAgICAgICAgICAgICAgIGFjdGlvbkxvY2F0aW9uID0gYWN0aW9ucy5zaXplKCk7Cisg
ICAgICAgICAgICByZXR1cm4gbWFwLmVuc3VyZShmbGFncywgWyZdIHsKKyAgICAgICAgICAgICAg
ICBhdXRvIG5ld0FjdGlvbkxvY2F0aW9uID0gYWN0aW9ucy5zaXplKCk7CiAgICAgICAgICAgICAg
ICAgYWN0aW9ucy5hcHBlbmQoYWN0aW9uRGF0YS5pbmRleCgpKTsKLSAgICAgICAgICAgICAgICBt
YXAuc2V0KGZsYWdzLCBhY3Rpb25Mb2NhdGlvbik7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICBhY3Rpb25Mb2NhdGlvbiA9IGV4aXN0aW5nQWN0aW9uLT52YWx1ZTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbmV3QWN0aW9uTG9jYXRpb247CisgICAgICAgICAgICB9KS5pdGVy
YXRvci0+dmFsdWU7CiAgICAgICAgIH07Ci0gICAgICAgIAotICAgICAgICBhdXRvIGZpbmRPck1h
a2VTdHJpbmdBY3Rpb25Mb2NhdGlvbiA9IFsmXSAoU3RyaW5nQWN0aW9uTWFwJiBtYXAsIGNvbnN0
IE5vdGlmeUFjdGlvbiYgYWN0aW9uRGF0YSkgewotICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBu
b3RpZmljYXRpb24gPSBhY3Rpb25EYXRhLnN0cmluZzsKLSAgICAgICAgICAgIGF1dG8gZXhpc3Rp
bmdBY3Rpb24gPSBtYXAuZmluZChzdGQ6Om1ha2VfcGFpcihub3RpZmljYXRpb24sIGZsYWdzKSk7
Ci0gICAgICAgICAgICBpZiAoZXhpc3RpbmdBY3Rpb24gPT0gbWFwLmVuZCgpKSB7Ci0gICAgICAg
ICAgICAgICAgYWN0aW9uTG9jYXRpb24gPSBhY3Rpb25zLnNpemUoKTsKLSAgICAgICAgICAgICAg
ICBhY3Rpb25zLmFwcGVuZChXVEY6OmFsdGVybmF0aXZlSW5kZXhWPE5vdGlmeUFjdGlvbiwgQWN0
aW9uRGF0YT4pOwotICAgICAgICAgICAgICAgIHNlcmlhbGl6ZVN0cmluZyhhY3Rpb25zLCBub3Rp
ZmljYXRpb24pOwotICAgICAgICAgICAgICAgIG1hcC5zZXQoc3RkOjptYWtlX3BhaXIobm90aWZp
Y2F0aW9uLCBmbGFncyksIGFjdGlvbkxvY2F0aW9uKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgICAgIGFjdGlvbkxvY2F0aW9uID0gZXhpc3RpbmdBY3Rpb24tPnZhbHVlOworCisg
ICAgICAgIGF1dG8gZmluZE9yTWFrZU5vdGlmeUFjdGlvbkxvY2F0aW9uID0gWyZdIChhdXRvJiBt
YXAsIGNvbnN0IGF1dG8mIGFjdGlvbikgeworICAgICAgICAgICAgcmV0dXJuIG1hcC5lbnN1cmUo
eyBhY3Rpb24uc3RyaW5nLCBmbGFncyB9LCBbJl0geworICAgICAgICAgICAgICAgIGF1dG8gbmV3
QWN0aW9uTG9jYXRpb24gPSBhY3Rpb25zLnNpemUoKTsKKyAgICAgICAgICAgICAgICBhY3Rpb25z
LmFwcGVuZChhY3Rpb25EYXRhLmluZGV4KCkpOworICAgICAgICAgICAgICAgIGFjdGlvbi5zZXJp
YWxpemUoYWN0aW9ucyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ld0FjdGlvbkxvY2F0aW9u
OworICAgICAgICAgICAgfSkuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICB9OwotICAgICAgICAK
LSAgICAgICAgc3RkOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXSAoY29uc3QgQ1NTRGlzcGxh
eU5vbmVTZWxlY3RvckFjdGlvbiYgYWN0aW9uRGF0YSkgeworCisgICAgICAgIGF1dG8gZmluZE9y
TWFrZU90aGVyQWN0aW9uTG9jYXRpb24gPSBbJl0gKGF1dG8mIG1hcCwgY29uc3QgYXV0byYgYWN0
aW9uKSB7CisgICAgICAgICAgICByZXR1cm4gbWFwLmVuc3VyZSh7IGFjdGlvbiwgZmxhZ3MgfSwg
WyZdIHsKKyAgICAgICAgICAgICAgICBhdXRvIG5ld0FjdGlvbkxvY2F0aW9uID0gYWN0aW9ucy5z
aXplKCk7CisgICAgICAgICAgICAgICAgYWN0aW9ucy5hcHBlbmQoYWN0aW9uRGF0YS5pbmRleCgp
KTsKKyAgICAgICAgICAgICAgICBhY3Rpb24uc2VyaWFsaXplKGFjdGlvbnMpOworICAgICAgICAg
ICAgICAgIHJldHVybiBuZXdBY3Rpb25Mb2NhdGlvbjsKKyAgICAgICAgICAgIH0pLml0ZXJhdG9y
LT52YWx1ZTsKKyAgICAgICAgfTsKKworICAgICAgICBhdXRvIGFjdGlvbkxvY2F0aW9uID0gc3Rk
Ojp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXSAoY29uc3QgQ1NTRGlzcGxheU5vbmVTZWxlY3Rv
ckFjdGlvbiYgYWN0aW9uRGF0YSkgewogICAgICAgICAgICAgY29uc3QgYXV0byBhZGRSZXN1bHQg
PSBjc3NEaXNwbGF5Tm9uZUFjdGlvbnNNYXAuYWRkKHJ1bGUudHJpZ2dlcigpLCBQZW5kaW5nRGlz
cGxheU5vbmVBY3Rpb25zKCkpOwogICAgICAgICAgICAgYXV0byYgcGVuZGluZ1N0cmluZ0FjdGlv
bnMgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAgICAgaWYgKCFwZW5kaW5n
U3RyaW5nQWN0aW9ucy5jb21iaW5lZFNlbGVjdG9ycy5pc0VtcHR5KCkpCkBAIC0xNDMsMjEgKzE1
MCwyMiBAQCBzdGF0aWMgVmVjdG9yPHVuc2lnbmVkPiBzZXJpYWxpemVBY3Rpb25zKGNvbnN0IFZl
Y3RvcjxDb250ZW50RXh0ZW5zaW9uUnVsZT4mIHJ1bAogICAgICAgICAgICAgcGVuZGluZ1N0cmlu
Z0FjdGlvbnMuY29tYmluZWRTZWxlY3RvcnMuYXBwZW5kKGFjdGlvbkRhdGEuc3RyaW5nKTsKICAg
ICAgICAgICAgIHBlbmRpbmdTdHJpbmdBY3Rpb25zLmNsaWVudExvY2F0aW9ucy5hcHBlbmQoYWN0
aW9uTG9jYXRpb25zLnNpemUoKSk7CiAKLSAgICAgICAgICAgIGFjdGlvbkxvY2F0aW9uID0gc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOworICAgICAgICAgICAgLy8gcmVzb2x2
ZVBlbmRpbmdEaXNwbGF5Tm9uZUFjdGlvbnMgd2lsbCBmaWxsIHRoaXMgaW4gbGF0ZXIuCisgICAg
ICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxBY3Rpb25Mb2NhdGlvbj46Om1heCgp
OwogICAgICAgICB9LCBbJl0gKGNvbnN0IElnbm9yZVByZXZpb3VzUnVsZXNBY3Rpb24mKSB7Ci0g
ICAgICAgICAgICBmaW5kT3JNYWtlQWN0aW9uTG9jYXRpb24oaWdub3JlUHJldmlvdXNSdWxlQWN0
aW9uc01hcCk7CisgICAgICAgICAgICByZXR1cm4gZmluZE9yTWFrZUFjdGlvbkxvY2F0aW9uKGln
bm9yZVByZXZpb3VzUnVsZUFjdGlvbnNNYXApOwogICAgICAgICB9LCBbJl0gKGNvbnN0IEJsb2Nr
TG9hZEFjdGlvbiYpIHsKLSAgICAgICAgICAgIGZpbmRPck1ha2VBY3Rpb25Mb2NhdGlvbihibG9j
a0xvYWRBY3Rpb25zTWFwKTsKKyAgICAgICAgICAgIHJldHVybiBmaW5kT3JNYWtlQWN0aW9uTG9j
YXRpb24oYmxvY2tMb2FkQWN0aW9uc01hcCk7CiAgICAgICAgIH0sIFsmXSAoY29uc3QgQmxvY2tD
b29raWVzQWN0aW9uJikgewotICAgICAgICAgICAgZmluZE9yTWFrZUFjdGlvbkxvY2F0aW9uKGJs
b2NrQ29va2llc0FjdGlvbnNNYXApOworICAgICAgICAgICAgcmV0dXJuIGZpbmRPck1ha2VBY3Rp
b25Mb2NhdGlvbihibG9ja0Nvb2tpZXNBY3Rpb25zTWFwKTsKICAgICAgICAgfSwgWyZdIChjb25z
dCBNYWtlSFRUUFNBY3Rpb24mKSB7Ci0gICAgICAgICAgICBmaW5kT3JNYWtlQWN0aW9uTG9jYXRp
b24obWFrZUhUVFBTQWN0aW9uc01hcCk7CisgICAgICAgICAgICByZXR1cm4gZmluZE9yTWFrZUFj
dGlvbkxvY2F0aW9uKG1ha2VIVFRQU0FjdGlvbnNNYXApOwogICAgICAgICB9LCBbJl0gKGNvbnN0
IE5vdGlmeUFjdGlvbiYgYWN0aW9uRGF0YSkgewotICAgICAgICAgICAgZmluZE9yTWFrZVN0cmlu
Z0FjdGlvbkxvY2F0aW9uKG5vdGlmeUFjdGlvbnNNYXAsIGFjdGlvbkRhdGEpOwotICAgICAgICB9
LCBbJl0gKGNvbnN0IE1vZGlmeUhlYWRlcnNBY3Rpb24mKSB7Ci0gICAgICAgICAgICAvLyBGSVhN
RTogSW1wbGVtZW50Ci0gICAgICAgIH0sIFsmXSAoY29uc3QgUmVkaXJlY3RBY3Rpb24mKSB7Ci0g
ICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50CisgICAgICAgICAgICByZXR1cm4gZmluZE9y
TWFrZU5vdGlmeUFjdGlvbkxvY2F0aW9uKG5vdGlmeUFjdGlvbnNNYXAsIGFjdGlvbkRhdGEpOwor
ICAgICAgICB9LCBbJl0gKGNvbnN0IE1vZGlmeUhlYWRlcnNBY3Rpb24mIGFjdGlvbikgeworICAg
ICAgICAgICAgcmV0dXJuIGZpbmRPck1ha2VPdGhlckFjdGlvbkxvY2F0aW9uKG1vZGlmeUhlYWRl
cnNBY3Rpb25NYXAsIGFjdGlvbik7CisgICAgICAgIH0sIFsmXSAoY29uc3QgUmVkaXJlY3RBY3Rp
b24mIGFjdGlvbikgeworICAgICAgICAgICAgcmV0dXJuIGZpbmRPck1ha2VPdGhlckFjdGlvbkxv
Y2F0aW9uKHJlZGlyZWN0QWN0aW9uTWFwLCBhY3Rpb24pOwogICAgICAgICB9KSwgYWN0aW9uRGF0
YSk7CiAgICAgICAgIGFjdGlvbkxvY2F0aW9ucy5hcHBlbmQoYWN0aW9uTG9jYXRpb24pOwogICAg
IH0KQEAgLTI2Nyw3ICsyNzUsNyBAQCBzdGQ6OmVycm9yX2NvZGUgY29tcGlsZVJ1bGVMaXN0KENv
bnRlbnRFeHRlbnNpb25Db21waWxhdGlvbkNsaWVudCYgY2xpZW50LCBTdHJpbgogewogI2lmIEFT
U0VSVF9FTkFCTEVECiAgICAgY2FsbE9uTWFpblRocmVhZChbcnVsZUpTT04gPSBydWxlSlNPTi5p
c29sYXRlZENvcHkoKSwgcGFyc2VkUnVsZUxpc3QgPSBwYXJzZWRSdWxlTGlzdC5pc29sYXRlZENv
cHkoKV0gewotICAgICAgICBBU1NFUlQocGFyc2VSdWxlTGlzdChydWxlSlNPTiwgeyB9KS52YWx1
ZSgpID09IHBhcnNlZFJ1bGVMaXN0KTsKKyAgICAgICAgQVNTRVJUKHBhcnNlUnVsZUxpc3QocnVs
ZUpTT04sIHN0ZDo6bnVsbG9wdCkudmFsdWUoKSA9PSBwYXJzZWRSdWxlTGlzdCk7CiAgICAgfSk7
CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
Q29udGVudEV4dGVuc2lvbkVycm9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5jcHAKaW5kZXggYmY2NDNkMTk5YjQxOGQ5MjM3NGVh
ZjJiODI2YzkzNTQ4ZGY1NjU2OC4uZmQxYmU4MTJhYTk2NzVjODcwYmZmNmRlODhhMmRlYWE3OWJh
NjE2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVu
dEV4dGVuc2lvbkVycm9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwCkBAIC0xMDMsOCArMTAzLDIwIEBAIGNvbnN0IHN0
ZDo6ZXJyb3JfY2F0ZWdvcnkmIGNvbnRlbnRFeHRlbnNpb25FcnJvckNhdGVnb3J5KCkKICAgICAg
ICAgICAgICAgICByZXR1cm4gIkEgcmVkaXJlY3QgZXh0ZW5zaW9uIHBhdGggbXVzdCBzdGFydCB3
aXRoIGEgc2xhc2giOwogICAgICAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpT
T05SZWRpcmVjdFVSTFNjaGVtZU5vdEFsbG93ZWQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuICJB
IHJlZGlyZWN0IHVybCBzY2hlbWUgbXVzdCBiZSBpbiB0aGUgc2V0IG9mIGFsbG93ZWQgc2NoZW1l
cyI7CisgICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTlJlZGlyZWN0
VVJMU2NoZW1lSW52YWxpZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIkEgcmVkaXJlY3QgdXIg
bHNjaGVtZSBtdXN0IGJlIGEgdmFsaWQgc2NoZW1lIjsKKyAgICAgICAgICAgIGNhc2UgQ29udGVu
dEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RVUkxTY2hlbWVzU2hvdWxkTm90SW5jbHVkZUph
dmFzY3JpcHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuICJUaGUgc2V0IG9mIGFsbG93ZWQgcmVk
aXJlY3Qgc2NoZW1lcyBzaG91bGRuJ3QgaW5jbHVkZSBqYXZhc2NyaXB0IjsKKyAgICAgICAgICAg
IGNhc2UgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RVUkxJbnZhbGlkOgorICAg
ICAgICAgICAgICAgIHJldHVybiAiQSByZWRpcmVjdCB1cmwgbXVzdCBiZSB2YWxpZCI7CiAgICAg
ICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTlJlZGlyZWN0SW52YWxpZFR5
cGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuICJBIHJlZGlyZWN0IG11c3QgaGF2ZSBhIG1lbWJl
ciBuYW1lZCBcImV4dGVuc2lvbi1wYXRoXCIsIFwicmVnZXgtc3Vic3RpdHV0aW9uXCIsIFwidHJh
bnNmb3JtXCIgb3IgXCJ1cmxcIiI7CisgICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25F
cnJvcjo6SlNPTlJlZGlyZWN0SW52YWxpZFBvcnQ6CisgICAgICAgICAgICAgICAgcmV0dXJuICJB
IHJlZGlyZWN0IHBvcnQgbXVzdCBiZSBlaXRoZXIgZW1wdHkgb3IgYSBudW1iZXIgYmV0d2VlbiAw
IGFuZCA2NTUzNSwgaW5jbHVzaXZlIjsKKyAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lv
bkVycm9yOjpKU09OUmVkaXJlY3RJbnZhbGlkUXVlcnk6CisgICAgICAgICAgICAgICAgcmV0dXJu
ICJBIHJlZGlyZWN0IHF1ZXJ5IG11c3QgZWl0aGVyIGJlIGVtcHR5IG9yIGJlZ2luIHdpdGggJz8n
IjsKKyAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RJ
bnZhbGlkRnJhZ21lbnQ6CisgICAgICAgICAgICAgICAgcmV0dXJuICJBIHJlZGlyZWN0IGZyYWdt
ZW50IG11c3QgZWl0aGVyIGJlIGVtcHR5IG9yIGJlZ2luIHdpdGggJyMnIjsKICAgICAgICAgICAg
IGNhc2UgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OTW9kaWZ5SGVhZGVyc0ludmFsaWRPcGVy
YXRpb246CiAgICAgICAgICAgICAgICAgcmV0dXJuICJBIG1vZGlmeS1oZWFkZXJzIG9wZXJhdGlv
biBtdXN0IGhhdmUgYW4gb3BlcmF0aW9uIHRoYXQgaXMgZWl0aGVyIFwic2V0XCIsIFwiYXBwZW5k
XCIsIG9yIFwicmVtb3ZlXCIiOwogICAgICAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uRXJy
b3I6OkpTT05Nb2RpZnlIZWFkZXJzSW5mb05vdEFEaWN0aW9uYXJ5OgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkVycm9yLmggYi9T
b3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuaApp
bmRleCBlNzA3YjQ2Y2EzOTAzYmExNDIyZTdhNmZkZmRmZDllNDMxNDBkZjcyLi45MjY3NWY0OGFh
ZGU3MDQ0NzhhMmI2N2Q4YmEwMTgzY2RhZjY4MTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuaApAQCAtNjAs
OCArNjAsMTQgQEAgZW51bSBjbGFzcyBDb250ZW50RXh0ZW5zaW9uRXJyb3IgewogCiAgICAgSlNP
TlJlZGlyZWN0TWlzc2luZywKICAgICBKU09OUmVkaXJlY3RFeHRlbnNpb25QYXRoRG9lc05vdFN0
YXJ0V2l0aFNsYXNoLAorICAgIEpTT05SZWRpcmVjdFVSTFNjaGVtZUludmFsaWQsCiAgICAgSlNP
TlJlZGlyZWN0VVJMU2NoZW1lTm90QWxsb3dlZCwKKyAgICBKU09OUmVkaXJlY3RVUkxTY2hlbWVz
U2hvdWxkTm90SW5jbHVkZUphdmFzY3JpcHQsCisgICAgSlNPTlJlZGlyZWN0VVJMSW52YWxpZCwK
ICAgICBKU09OUmVkaXJlY3RJbnZhbGlkVHlwZSwKKyAgICBKU09OUmVkaXJlY3RJbnZhbGlkUG9y
dCwKKyAgICBKU09OUmVkaXJlY3RJbnZhbGlkUXVlcnksCisgICAgSlNPTlJlZGlyZWN0SW52YWxp
ZEZyYWdtZW50LAogCiAgICAgSlNPTlJlbW92ZVBhcmFtZXRlcnNOb3RTdHJpbmdBcnJheSwKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVu
c2lvblBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50
RXh0ZW5zaW9uUGFyc2VyLmNwcAppbmRleCBjZDUyMDQzMDZhZjA5OWMzZTY1NWEzMzBkOTlmYTNm
YzI1ZjZiMTg4Li43OTVlZDY3MGRkMDI2ZWJkY2NjYjIyZDljYjc0MDgwMWY4MTkzM2EwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9u
UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50
RXh0ZW5zaW9uUGFyc2VyLmNwcApAQCAtMTc5LDcgKzE3OSw3IEBAIGJvb2wgaXNWYWxpZENTU1Nl
bGVjdG9yKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpCiAgICAgcmV0dXJuICEhcGFyc2VyLnBhcnNl
U2VsZWN0b3Ioc2VsZWN0b3IpOwogfQogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxFeHBlY3RlZDxB
Y3Rpb24sIHN0ZDo6ZXJyb3JfY29kZT4+IGxvYWRBY3Rpb24oY29uc3QgSlNPTjo6T2JqZWN0JiBy
dWxlT2JqZWN0LCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGFsbG93ZWRSZWRpcmVjdFVSTFNjaGVt
ZXMpCitzdGF0aWMgc3RkOjpvcHRpb25hbDxFeHBlY3RlZDxBY3Rpb24sIHN0ZDo6ZXJyb3JfY29k
ZT4+IGxvYWRBY3Rpb24oY29uc3QgSlNPTjo6T2JqZWN0JiBydWxlT2JqZWN0LCBjb25zdCBzdGQ6
Om9wdGlvbmFsPEhhc2hTZXQ8U3RyaW5nPj4mIGFsbG93ZWRSZWRpcmVjdFVSTFNjaGVtZXMpCiB7
CiAgICAgYXV0byBhY3Rpb25PYmplY3QgPSBydWxlT2JqZWN0LmdldE9iamVjdCgiYWN0aW9uIik7
CiAgICAgaWYgKCFhY3Rpb25PYmplY3QpCkBAIC0yMjQsNyArMjI0LDcgQEAgc3RhdGljIHN0ZDo6
b3B0aW9uYWw8RXhwZWN0ZWQ8QWN0aW9uLCBzdGQ6OmVycm9yX2NvZGU+PiBsb2FkQWN0aW9uKGNv
bnN0IEpTT046Ok8KICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVy
cm9yOjpKU09OSW52YWxpZEFjdGlvblR5cGUpOwogfQogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxF
eHBlY3RlZDxDb250ZW50RXh0ZW5zaW9uUnVsZSwgc3RkOjplcnJvcl9jb2RlPj4gbG9hZFJ1bGUo
Y29uc3QgSlNPTjo6T2JqZWN0JiBydWxlT2JqZWN0LCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGFs
bG93ZWRSZWRpcmVjdFVSTFNjaGVtZXMpCitzdGF0aWMgc3RkOjpvcHRpb25hbDxFeHBlY3RlZDxD
b250ZW50RXh0ZW5zaW9uUnVsZSwgc3RkOjplcnJvcl9jb2RlPj4gbG9hZFJ1bGUoY29uc3QgSlNP
Tjo6T2JqZWN0JiBydWxlT2JqZWN0LCBjb25zdCBzdGQ6Om9wdGlvbmFsPEhhc2hTZXQ8U3RyaW5n
Pj4mIGFsbG93ZWRSZWRpcmVjdFVSTFNjaGVtZXMpCiB7CiAgICAgYXV0byB0cmlnZ2VyID0gbG9h
ZFRyaWdnZXIocnVsZU9iamVjdCk7CiAgICAgaWYgKCF0cmlnZ2VyLmhhc192YWx1ZSgpKQpAQCAt
MjM5LDggKzIzOSwxMSBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxFeHBlY3RlZDxDb250ZW50RXh0
ZW5zaW9uUnVsZSwgc3RkOjplcnJvcl9jb2RlPj4gbG9hZFJ1bGUoYwogICAgIHJldHVybiB7IHsg
eyBXVEZNb3ZlKHRyaWdnZXIudmFsdWUoKSksIFdURk1vdmUoYWN0aW9uLT52YWx1ZSgpKSB9IH0g
fTsKIH0KIAotc3RhdGljIEV4cGVjdGVkPFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uUnVsZT4sIHN0
ZDo6ZXJyb3JfY29kZT4gbG9hZEVuY29kZWRSdWxlcyhjb25zdCBTdHJpbmcmIHJ1bGVKU09OLCBj
b25zdCBIYXNoU2V0PFN0cmluZz4mIGFsbG93ZWRSZWRpcmVjdFVSTFNjaGVtZXMpCitzdGF0aWMg
RXhwZWN0ZWQ8VmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPiwgc3RkOjplcnJvcl9jb2RlPiBs
b2FkRW5jb2RlZFJ1bGVzKGNvbnN0IFN0cmluZyYgcnVsZUpTT04sIGNvbnN0IHN0ZDo6b3B0aW9u
YWw8SGFzaFNldDxTdHJpbmc+PiYgYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcykKIHsKKyAgICBp
ZiAoYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcyAmJiBhbGxvd2VkUmVkaXJlY3RVUkxTY2hlbWVz
LT5jb250YWlucygiamF2YXNjcmlwdCIpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
Q29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RVUkxTY2hlbWVzU2hvdWxkTm90SW5j
bHVkZUphdmFzY3JpcHQpOworCiAgICAgYXV0byBkZWNvZGVkUnVsZXMgPSBKU09OOjpWYWx1ZTo6
cGFyc2VKU09OKHJ1bGVKU09OKTsKIAogICAgIGlmICghZGVjb2RlZFJ1bGVzKQpAQCAtMjcyLDcg
KzI3NSw3IEBAIHN0YXRpYyBFeHBlY3RlZDxWZWN0b3I8Q29udGVudEV4dGVuc2lvblJ1bGU+LCBz
dGQ6OmVycm9yX2NvZGU+IGxvYWRFbmNvZGVkUnVsZXMoCiAgICAgcmV0dXJuIHJ1bGVMaXN0Owog
fQogCi1FeHBlY3RlZDxWZWN0b3I8Q29udGVudEV4dGVuc2lvblJ1bGU+LCBzdGQ6OmVycm9yX2Nv
ZGU+IHBhcnNlUnVsZUxpc3QoY29uc3QgU3RyaW5nJiBydWxlSlNPTiwgY29uc3QgSGFzaFNldDxT
dHJpbmc+JiBhbGxvd2VkUmVkaXJlY3RVUkxTY2hlbWVzKQorRXhwZWN0ZWQ8VmVjdG9yPENvbnRl
bnRFeHRlbnNpb25SdWxlPiwgc3RkOjplcnJvcl9jb2RlPiBwYXJzZVJ1bGVMaXN0KGNvbnN0IFN0
cmluZyYgcnVsZUpTT04sIGNvbnN0IHN0ZDo6b3B0aW9uYWw8SGFzaFNldDxTdHJpbmc+PiYgYWxs
b3dlZFJlZGlyZWN0VVJMU2NoZW1lcykKIHsKICNpZiBDT05URU5UX0VYVEVOU0lPTlNfUEVSRk9S
TUFOQ0VfUkVQT1JUSU5HCiAgICAgTW9ub3RvbmljVGltZSBsb2FkRXh0ZW5zaW9uU3RhcnRUaW1l
ID0gTW9ub3RvbmljVGltZTo6bm93KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmgKaW5kZXggY2E3Mjk0MGU3
NDNlYWIzM2UyZDQyYzU1ZDg0MzZkMzMyMGFhODFkYy4uZDg1Mzc5ODg5NTliOTEwYTdlZTc4NDM1
ZDdkYjA2ODgwNjU2ZTRmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvQ29udGVudEV4dGVuc2lvblBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuaApAQCAtMzgsNyArMzgsMTIgQEAg
bmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKIAogY2xhc3MgQ29udGVudEV4dGVuc2lvblJ1
bGU7CiAKLVdFQkNPUkVfRVhQT1JUIEV4cGVjdGVkPFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uUnVs
ZT4sIHN0ZDo6ZXJyb3JfY29kZT4gcGFyc2VSdWxlTGlzdChjb25zdCBTdHJpbmcmLCBjb25zdCBI
YXNoU2V0PFN0cmluZz4mIGFsbG93ZWRSZWRpcmVjdFVSTFNjaGVtZXMpOworLy8gQW4gYWxsb3dl
ZFJlZGlyZWN0VVJMU2NoZW1lcyBvZiBzdGQ6Om51bGxvcHQgaW5kaWNhdGVzIHRoYXQgYWxsIFVS
TCBzY2hlbWVzIGFyZSBhbGxvd2VkLgorLy8gVGhpcyBpcyB1c2VkIHdoZW4gcmVjb21waWxpbmcg
c291cmNlIGZyb20gb2xkZXIgdmVyc2lvbnMgb2YgV0tDb250ZW50UnVsZUxpc3RzIG9uIGRpc2ss
CisvLyB3aGVyZSB3ZSBkb24ndCBoYXZlIHRoZSBsaXN0IG9mIGFsbG93ZWQgVVJMIHNjaGVtZXMg
YnV0IGFzc3VtZSB0aGF0IGlmIGl0IGNvbXBpbGVkCisvLyBzdWNjZXNzZnVsbHkgdGhlIGZpcnN0
IHRpbWUgdGhlbiBhbGwgdGhlIHNjaGVtZXMgdXNlZCBtdXN0IGhhdmUgYmVlbiBhbGxvd2VkLgor
Ly8gQW4gYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcyBvZiBhbiBlbXB0eSBIYXNoU2V0IGluZGlj
YXRlcyB0aGF0IG5vIGFjdGl2ZSBhY3Rpb25zIGFyZSBhbGxvd2VkLgorV0VCQ09SRV9FWFBPUlQg
RXhwZWN0ZWQ8VmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPiwgc3RkOjplcnJvcl9jb2RlPiBw
YXJzZVJ1bGVMaXN0KGNvbnN0IFN0cmluZyYsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8SGFzaFNldDxT
dHJpbmc+PiYgYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcyk7CiBXRUJDT1JFX0VYUE9SVCBib29s
IGlzVmFsaWRDU1NTZWxlY3Rvcihjb25zdCBTdHJpbmcmKTsKIAogfSAvLyBuYW1lc3BhY2UgQ29u
dGVudEV4dGVuc2lvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwCmluZGV4IDZmY2FjZjQyMDYx
YmZlODk3YjY2ZTBkNDEyNmIwZjZiNjZhYWY2ZjQuLmZjODJmMmJiYzljYTBjMTE0ZjJjYzc5NDFm
ZTYxYjZkODY5MjVjMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcApAQCAtMjI4LDEwICsy
MjgsMTIgQEAgQ29udGVudFJ1bGVMaXN0UmVzdWx0cyBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6
OnByb2Nlc3NDb250ZW50UnVsZUxpc3RzRm9yTG9hZCgKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9LCBbJl0oY29uc3QgSWdub3JlUHJldmlvdXNSdWxlc0FjdGlvbiYpIHsKICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfSwg
WyZdIChjb25zdCBNb2RpZnlIZWFkZXJzQWN0aW9uJikgewotICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQKLSAgICAgICAgICAgIH0sIFsmXSAoY29uc3QgUmVkaXJlY3RBY3Rpb24m
KSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudAorICAgICAgICAgICAgfSwg
WyZdIChjb25zdCBNb2RpZnlIZWFkZXJzQWN0aW9uJiBhY3Rpb24pIHsKKyAgICAgICAgICAgICAg
ICBpZiAoaW5pdGlhdGluZ0RvY3VtZW50TG9hZGVyLmFsbG93c0FjdGl2ZUNvbnRlbnRSdWxlTGlz
dEFjdGlvbnNGb3JVUkwodXJsKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5zdW1tYXJ5
Lm1vZGlmeUhlYWRlcnNBY3Rpb25zLmFwcGVuZChhY3Rpb24pOworICAgICAgICAgICAgfSwgWyZd
IChjb25zdCBSZWRpcmVjdEFjdGlvbiYgYWN0aW9uKSB7CisgICAgICAgICAgICAgICAgaWYgKGlu
aXRpYXRpbmdEb2N1bWVudExvYWRlci5hbGxvd3NBY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25z
Rm9yVVJMKHVybCkpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuc3VtbWFyeS5yZWRpcmVj
dEFjdGlvbnMuYXBwZW5kKGFjdGlvbik7CiAgICAgICAgICAgICB9KSwgYWN0aW9uLmRhdGEoKSk7
CiAgICAgICAgIH0KIApAQCAtMjkyLDkgKzI5NCw5IEBAIENvbnRlbnRSdWxlTGlzdFJlc3VsdHMg
Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kOjpwcm9jZXNzQ29udGVudFJ1bGVMaXN0c0ZvclBpbmdM
CiAgICAgICAgICAgICB9LCBbJl0oY29uc3QgSWdub3JlUHJldmlvdXNSdWxlc0FjdGlvbiYpIHsK
ICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAg
ICAgfSwgWyZdIChjb25zdCBNb2RpZnlIZWFkZXJzQWN0aW9uJikgewotICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQKKyAgICAgICAgICAgICAgICAvLyBXZSBjdXJyZW50bHkgaGF2
ZSBub3QgaW1wbGVtZW50ZWQgYWN0aXZlIGFjdGlvbnMgZnJvbSB0aGUgbmV0d29yayBwcm9jZXNz
IChDT1JTIHByZWZsaWdodCkuCiAgICAgICAgICAgICB9LCBbJl0gKGNvbnN0IFJlZGlyZWN0QWN0
aW9uJikgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQKKyAgICAgICAgICAg
ICAgICAvLyBXZSBjdXJyZW50bHkgaGF2ZSBub3QgaW1wbGVtZW50ZWQgYWN0aXZlIGFjdGlvbnMg
ZnJvbSB0aGUgbmV0d29yayBwcm9jZXNzIChDT1JTIHByZWZsaWdodCkuCiAgICAgICAgICAgICB9
KSwgYWN0aW9uLmRhdGEoKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMjUsNiArMzI3LDEyIEBA
IHZvaWQgYXBwbHlSZXN1bHRzVG9SZXF1ZXN0KENvbnRlbnRSdWxlTGlzdFJlc3VsdHMmJiByZXN1
bHRzLCBQYWdlKiBwYWdlLCBSZXNvdXJjCiAgICAgICAgIHJlcXVlc3Quc2V0VVJMKG5ld1VSTCk7
CiAgICAgfQogCisgICAgZm9yIChhdXRvJiBhY3Rpb24gOiByZXN1bHRzLnN1bW1hcnkubW9kaWZ5
SGVhZGVyc0FjdGlvbnMpCisgICAgICAgIGFjdGlvbi5hcHBseVRvUmVxdWVzdChyZXF1ZXN0KTsK
KworICAgIGZvciAoYXV0byYgYWN0aW9uIDogcmVzdWx0cy5zdW1tYXJ5LnJlZGlyZWN0QWN0aW9u
cykKKyAgICAgICAgYWN0aW9uLmFwcGx5VG9SZXF1ZXN0KHJlcXVlc3QpOworCiAgICAgaWYgKHBh
Z2UgJiYgcmVzdWx0cy5zaG91bGROb3RpZnlBcHBsaWNhdGlvbigpKSB7CiAgICAgICAgIHJlc3Vs
dHMucmVzdWx0cy5yZW1vdmVBbGxNYXRjaGluZyhbXShjb25zdCBhdXRvJiBwYWlyKSB7CiAgICAg
ICAgICAgICByZXR1cm4gIXBhaXIuc2Vjb25kLnNob3VsZE5vdGlmeUFwcGxpY2F0aW9uKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50UnVsZUxp
c3RSZXN1bHRzLmggYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50UnVs
ZUxpc3RSZXN1bHRzLmgKaW5kZXggMGY0MDNjMmQwODU1ZTNmMzZhNmM4MzJmNDA2NzcxM2FmMDZk
N2I4NC4uY2ZhYjk2OTE2ZjQ4ODc4M2IxYWIyMWE5Y2I5OTlhNzliNzk4ODljYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudFJ1bGVMaXN0UmVzdWx0
cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRSdWxlTGlz
dFJlc3VsdHMuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUg
IkNvbnRlbnRFeHRlbnNpb25BY3Rpb25zLmgiCiAjaW5jbHVkZSA8d3RmL0tleVZhbHVlUGFpci5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KQEAgLTU0LDYgKzU1LDggQEAgc3RydWN0IENvbnRlbnRSdWxlTGlzdFJlc3VsdHMgewogICAg
ICAgICBib29sIG1hZGVIVFRQUyB7IGZhbHNlIH07CiAgICAgICAgIGJvb2wgYmxvY2tlZENvb2tp
ZXMgeyBmYWxzZSB9OwogICAgICAgICBib29sIGhhc05vdGlmaWNhdGlvbnMgeyBmYWxzZSB9Owor
ICAgICAgICBWZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6Ok1vZGlmeUhlYWRlcnNBY3Rpb24+IG1v
ZGlmeUhlYWRlcnNBY3Rpb25zOworICAgICAgICBWZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OlJl
ZGlyZWN0QWN0aW9uPiByZWRpcmVjdEFjdGlvbnM7CiAKICAgICAgICAgdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgICAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxTdW1tYXJ5PiBkZWNvZGUoRGVjb2Rl
ciYpOwpAQCAtMTY4LDYgKzE3MSw4IEBAIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IGF1dG8gQ29u
dGVudFJ1bGVMaXN0UmVzdWx0czo6U3VtbWFyeTo6ZGVjb2RlKERlY29kZXImIGRlCiAgICAgICAg
IFdURk1vdmUoKm1hZGVIVFRQUyksCiAgICAgICAgIFdURk1vdmUoKmJsb2NrZWRDb29raWVzKSwK
ICAgICAgICAgV1RGTW92ZSgqaGFzTm90aWZpY2F0aW9ucyksCisgICAgICAgIHsgfSwgLy8gbW9k
aWZ5SGVhZGVyc0FjdGlvbnMgYW5kIHJlZGlyZWN0QWN0aW9ucyBoYXZlIG5vIG5lZWQgdG8gYmUg
c2VyaWFsaXplZCB0byBhbm90aGVyIHByb2Nlc3MuCisgICAgICAgIHsgfQogICAgIH19OwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwCmluZGV4IDY5YjMwOTM5
MmEwNWNlNGU2MmM3ZGM1NjUzYzAyN2M3ODRjNGU5OWQuLjY1OGU4NGRiODg5MTE3OGQ1OTRmMzRi
ZDM5YTZjMzNhZDhjNTkxY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNo
ZWV0Q29udGVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVu
dHMuY3BwCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgogI2lu
Y2x1ZGUgIkNhY2hlUG9saWN5LmgiCiAjaW5jbHVkZSAiQ2FjaGVkQ1NTU3R5bGVTaGVldC5oIgot
I2luY2x1ZGUgIkNvbnRlbnRSdWxlTGlzdFJlc3VsdHMuaCIKICNpbmNsdWRlICJEb2N1bWVudC5o
IgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKQEAgLTQ0LDYg
KzQzLDcgQEAKICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRF
TlNJT05TKQorI2luY2x1ZGUgIkNvbnRlbnRSdWxlTGlzdFJlc3VsdHMuaCIKICNpbmNsdWRlICJV
c2VyQ29udGVudENvbnRyb2xsZXIuaCIKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Rv
Y3VtZW50TG9hZGVyLmNwcAppbmRleCAwNjdmNDEzZjVjMTg5MmM1M2Q5M2NlMjk4YWY3YTA4MDNj
NjRjZWEyLi4wNzhmZDY5YmFhZWZiOTA2ZDU2YTRiNjk4ZTlhNzJkNTg5OTlhMzU0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKQEAgLTk0LDYgKzk0LDcgQEAKICNp
bmNsdWRlICJTdWJyZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29k
ZXIuaCIKICNpbmNsdWRlICJVc2VyQ29udGVudFByb3ZpZGVyLmgiCisjaW5jbHVkZSAiVXNlckNv
bnRlbnRVUkxQYXR0ZXJuLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRl
IDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KQEAgLTE3Myw3ICsxNzQsMTAgQEAgRG9jdW1lbnRMb2FkZXI6OkRvY3VtZW50TG9hZGVyKGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3Vic3RpdHV0ZUQKICAgICAsIG1f
b3JpZ2luYWxTdWJzdGl0dXRlRGF0YVdhc1ZhbGlkKHN1YnN0aXR1dGVEYXRhLmlzVmFsaWQoKSkK
ICAgICAsIG1fc3Vic3RpdHV0ZVJlc291cmNlRGVsaXZlcnlUaW1lcigqdGhpcywgJkRvY3VtZW50
TG9hZGVyOjpzdWJzdGl0dXRlUmVzb3VyY2VEZWxpdmVyeVRpbWVyRmlyZWQpCiAgICAgLCBtX2Fw
cGxpY2F0aW9uQ2FjaGVIb3N0KG1ha2VVbmlxdWU8QXBwbGljYXRpb25DYWNoZUhvc3Q+KCp0aGlz
KSkKKyAgICAsIG1fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uUGF0dGVybnMoVmVjdG9yPFVz
ZXJDb250ZW50VVJMUGF0dGVybj4oKSkKIHsKKyAgICAvLyBGSVhNRTogVmVjdG9yIGRlZmF1bHQg
Y29uc3RydWN0b3Igc2hvdWxkbid0IG5lZWQgdG8ga25vdyB0aGUgc2l6ZSBvZiB0aGUgZWxlbWVu
dHMsCisgICAgLy8gc28gbV9hY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25QYXR0ZXJucyBvdWdo
dCB0byBiZSBhYmxlIHRvIGJlIGluaXRpYWxpemVkIHdpdGggYW4gaW5pdGlhbGl6ZXIgbGlzdCBp
biB0aGUgaGVhZGVyIHdpdGhvdXQgaW5jbHVkaW5nIFVzZXJDb250ZW50VVJMUGF0dGVybi5oLgog
fQogCiBGcmFtZUxvYWRlciogRG9jdW1lbnRMb2FkZXI6OmZyYW1lTG9hZGVyKCkgY29uc3QKQEAg
LTI0MzMsNiArMjQzNywzNCBAQCBSZXNvdXJjZUVycm9yIERvY3VtZW50TG9hZGVyOjpjb250ZW50
RmlsdGVyRGlkQmxvY2soQ29udGVudEZpbHRlclVuYmxvY2tIYW5kbGVyCiB9CiAjZW5kaWYgLy8g
RU5BQkxFKENPTlRFTlRfRklMVEVSSU5HKQogCit2b2lkIERvY3VtZW50TG9hZGVyOjpzZXRBY3Rp
dmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMoY29uc3Qgc3RkOjpvcHRpb25hbDxIYXNo
U2V0PFN0cmluZz4+JiBwYXR0ZXJucykKK3sKKyAgICBpZiAoIXBhdHRlcm5zKSB7CisgICAgICAg
IG1fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uUGF0dGVybnMgPSBzdGQ6Om51bGxvcHQ7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgVmVjdG9yPFdlYkNvcmU6OlVzZXJDb250ZW50VVJM
UGF0dGVybj4gcGF0dGVyblZlY3RvcjsKKyAgICBwYXR0ZXJuVmVjdG9yLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkocGF0dGVybnMtPnNpemUoKSk7CisgICAgZm9yIChhdXRvJiBwYXR0ZXJuU3RyaW5n
IDogKnBhdHRlcm5zKSB7CisgICAgICAgIFdlYkNvcmU6OlVzZXJDb250ZW50VVJMUGF0dGVybiBw
YXJzZWRQYXR0ZXJuKHBhdHRlcm5TdHJpbmcpOworICAgICAgICBpZiAocGFyc2VkUGF0dGVybi5p
c1ZhbGlkKCkpCisgICAgICAgICAgICBwYXR0ZXJuVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChXVEZN
b3ZlKHBhcnNlZFBhdHRlcm4pKTsKKyAgICB9CisKKyAgICBtX2FjdGl2ZUNvbnRlbnRSdWxlTGlz
dEFjdGlvblBhdHRlcm5zID0gV1RGTW92ZShwYXR0ZXJuVmVjdG9yKTsKK30KKworYm9vbCBEb2N1
bWVudExvYWRlcjo6YWxsb3dzQWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc0ZvclVSTChjb25z
dCBVUkwmIHVybCkgY29uc3QKK3sKKyAgICBpZiAoIW1fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0
aW9uUGF0dGVybnMpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGZvciAoY29uc3QgYXV0byYg
cGF0dGVybiA6ICptX2FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvblBhdHRlcm5zKSB7CisgICAg
ICAgIGlmIChwYXR0ZXJuLm1hdGNoZXModXJsKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I3VuZGVmIFBBR0VfSUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVu
dExvYWRlci5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmgKaW5kZXgg
NGZiZmQ3MTIwMTk5ZDI3Y2ZhODdiZGQ1OTY3MzcxMDZiY2UwOGRiMC4uMDRlNjYyYTVlMTBlNmZi
NGFlNmE2NmZkMTc2OWQ4NjlhMjc4NWZhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0RvY3VtZW50TG9hZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50
TG9hZGVyLmgKQEAgLTg3LDYgKzg3LDcgQEAgY2xhc3MgU2hhcmVkQnVmZmVyOwogY2xhc3MgU1dD
bGllbnRDb25uZWN0aW9uOwogY2xhc3MgU3VicmVzb3VyY2VMb2FkZXI7CiBjbGFzcyBTdWJzdGl0
dXRlUmVzb3VyY2U7CitjbGFzcyBVc2VyQ29udGVudFVSTFBhdHRlcm47CiAKIGVudW0gY2xhc3Mg
U2hvdWxkQ29udGludWU7CiAKQEAgLTMwMSw2ICszMDIsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCB1
c2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV91c2VyQ29udGVu
dEV4dGVuc2lvbnNFbmFibGVkOyB9CiAgICAgdm9pZCBzZXRVc2VyQ29udGVudEV4dGVuc2lvbnNF
bmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX3VzZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQgPSBl
bmFibGVkOyB9CiAKKyAgICBib29sIGFsbG93c0FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNG
b3JVUkwoY29uc3QgVVJMJikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRBY3Rp
dmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMoY29uc3Qgc3RkOjpvcHRpb25hbDxIYXNo
U2V0PFN0cmluZz4+Jik7CisKICNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQogICAgIERl
dmljZU9yaWVudGF0aW9uT3JNb3Rpb25QZXJtaXNzaW9uU3RhdGUgZGV2aWNlT3JpZW50YXRpb25B
bmRNb3Rpb25BY2Nlc3NTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGV2aWNlT3JpZW50YXRpb25B
bmRNb3Rpb25BY2Nlc3NTdGF0ZTsgfQogICAgIHZvaWQgc2V0RGV2aWNlT3JpZW50YXRpb25BbmRN
b3Rpb25BY2Nlc3NTdGF0ZShEZXZpY2VPcmllbnRhdGlvbk9yTW90aW9uUGVybWlzc2lvblN0YXRl
IHN0YXRlKSB7IG1fZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NTdGF0ZSA9IHN0YXRl
OyB9CkBAIC02NTEsNiArNjU1LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faWRlbXBvdGVudE1v
ZGVBdXRvc2l6aW5nT25seUhvbm9yc1BlcmNlbnRhZ2VzIHsgZmFsc2UgfTsKICAgICBTdHJpbmcg
bV9jdXN0b21OYXZpZ2F0b3JQbGF0Zm9ybTsKICAgICBib29sIG1fdXNlckNvbnRlbnRFeHRlbnNp
b25zRW5hYmxlZCB7IHRydWUgfTsKKyAgICBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxVc2VyQ29udGVu
dFVSTFBhdHRlcm4+PiBtX2FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvblBhdHRlcm5zOwogI2lm
IEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCiAgICAgRGV2aWNlT3JpZW50YXRpb25Pck1vdGlv
blBlcm1pc3Npb25TdGF0ZSBtX2RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzU3RhdGUg
eyBEZXZpY2VPcmllbnRhdGlvbk9yTW90aW9uUGVybWlzc2lvblN0YXRlOjpQcm9tcHQgfTsKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZVJlcXVlc3RCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3Vy
Y2VSZXF1ZXN0QmFzZS5jcHAKaW5kZXggNmM1Zjg2NWM1YzI3YjcyNDc5MTQxMTk5NDZlNjgxYzgz
ZWQxOTE2NS4uZTZlN2ZhMmVkMjQwZTVjMGFhOWJhNmFlZjcxOTgyYTRjMjA1NjI5MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVz
dEJhc2UuY3BwCkBAIC02MDEsNiArNjAxLDE1IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6
c2V0SFRUUEhlYWRlckZpZWxkcyhIVFRQSGVhZGVyTWFwIGhlYWRlckZpZWxkcykKICAgICBtX3Bs
YXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKIH0KIAordm9pZCBSZXNvdXJjZVJlcXVlc3RC
YXNlOjpyZW1vdmVIVFRQSGVhZGVyRmllbGQoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIHVw
ZGF0ZVJlc291cmNlUmVxdWVzdCgpOworCisgICAgbV9odHRwSGVhZGVyRmllbGRzLnJlbW92ZShu
YW1lKTsKKworICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOworfQorCiAjaWYg
VVNFKFNZU1RFTV9QUkVWSUVXKQogCiBib29sIFJlc291cmNlUmVxdWVzdEJhc2U6OmlzU3lzdGVt
UHJldmlldygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCmluZGV4IDI0NWU1OTlhOWNmNzhjNjJkNDVkZmI5YWNl
MzA0YTE5YTkyZWRkYzguLjQ2NDNiN2FiZTQzYTg1ODdmZTFiMjg2MTY1ZmZhM2FkZmQ4MmU0ZGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1
ZXN0QmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VS
ZXF1ZXN0QmFzZS5oCkBAIC0xMDUsNiArMTA1LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgYWRkSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lLCBjb25zdCBTdHJpbmcm
IHZhbHVlKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZEhUVFBIZWFkZXJGaWVsZChjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgYWRkSFRUUEhlYWRlckZpZWxkSWZOb3RQcmVzZW50KEhUVFBIZWFkZXJOYW1lLCBjb25z
dCBTdHJpbmcmKTsKKyAgICB2b2lkIHJlbW92ZUhUVFBIZWFkZXJGaWVsZChjb25zdCBTdHJpbmcm
IG5hbWUpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNIVFRQSGVhZGVyRmllbGQoSFRU
UEhlYWRlck5hbWUpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJzaXRlUG9saWNpZXNEYXRhLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVQb2xp
Y2llc0RhdGEuY3BwCmluZGV4IDM4YWZiYjZhODk2ZDQ1Zjk3ZjU2NDViMzJmYzQ3ZjJhYmNjMjcw
YmMuLjY1NGExNDE5ZDZjOWJlM2QzMjZiYzM3ZDJkMjg2YTA1MzhhNDdjZTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVQb2xpY2llc0RhdGEuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVQb2xpY2llc0RhdGEuY3BwCkBAIC0zNiw2ICszNiw3IEBA
IG5hbWVzcGFjZSBXZWJLaXQgewogdm9pZCBXZWJzaXRlUG9saWNpZXNEYXRhOjplbmNvZGUoSVBD
OjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgY29udGVudEJsb2Nr
ZXJzRW5hYmxlZDsKKyAgICBlbmNvZGVyIDw8IGFjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNQ
YXR0ZXJuczsKICAgICBlbmNvZGVyIDw8IGF1dG9wbGF5UG9saWN5OwogI2lmIEVOQUJMRShERVZJ
Q0VfT1JJRU5UQVRJT04pCiAgICAgZW5jb2RlciA8PCBkZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlv
bkFjY2Vzc1N0YXRlOwpAQCAtNjIsNyArNjMsMTIgQEAgc3RkOjpvcHRpb25hbDxXZWJzaXRlUG9s
aWNpZXNEYXRhPiBXZWJzaXRlUG9saWNpZXNEYXRhOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWMK
ICAgICBkZWNvZGVyID4+IGNvbnRlbnRCbG9ja2Vyc0VuYWJsZWQ7CiAgICAgaWYgKCFjb250ZW50
QmxvY2tlcnNFbmFibGVkKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIAorCisg
ICAgc3RkOjpvcHRpb25hbDxzdGQ6Om9wdGlvbmFsPEhhc2hTZXQ8U3RyaW5nPj4+IGFjdGl2ZUNv
bnRlbnRSdWxlTGlzdEFjdGlvbnNQYXR0ZXJuczsKKyAgICBkZWNvZGVyID4+IGFjdGl2ZUNvbnRl
bnRSdWxlTGlzdEFjdGlvbnNQYXR0ZXJuczsKKyAgICBpZiAoIWFjdGl2ZUNvbnRlbnRSdWxlTGlz
dEFjdGlvbnNQYXR0ZXJucykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKwogICAgIHN0
ZDo6b3B0aW9uYWw8V2Vic2l0ZUF1dG9wbGF5UG9saWN5PiBhdXRvcGxheVBvbGljeTsKICAgICBk
ZWNvZGVyID4+IGF1dG9wbGF5UG9saWN5OwogICAgIGlmICghYXV0b3BsYXlQb2xpY3kpCkBAIC0x
NDcsNiArMTUzLDcgQEAgc3RkOjpvcHRpb25hbDxXZWJzaXRlUG9saWNpZXNEYXRhPiBXZWJzaXRl
UG9saWNpZXNEYXRhOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWMKIAogICAgIHJldHVybiB7IHsK
ICAgICAgICAgV1RGTW92ZSgqY29udGVudEJsb2NrZXJzRW5hYmxlZCksCisgICAgICAgIFdURk1v
dmUoKmFjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNQYXR0ZXJucyksCiAgICAgICAgIFdURk1v
dmUoKmFsbG93ZWRBdXRvcGxheVF1aXJrcyksCiAgICAgICAgIFdURk1vdmUoKmF1dG9wbGF5UG9s
aWN5KSwKICNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQpAQCAtMTgzLDYgKzE5MCw4IEBA
IHZvaWQgV2Vic2l0ZVBvbGljaWVzRGF0YTo6YXBwbHlUb0RvY3VtZW50TG9hZGVyKFdlYnNpdGVQ
b2xpY2llc0RhdGEmJiB3ZWJzaXRlUG9sCiAgICAgaWYgKGRvY3VtZW50TG9hZGVyLnVzZXJDb250
ZW50RXh0ZW5zaW9uc0VuYWJsZWQoKSkKICAgICAgICAgZG9jdW1lbnRMb2FkZXIuc2V0VXNlckNv
bnRlbnRFeHRlbnNpb25zRW5hYmxlZCh3ZWJzaXRlUG9saWNpZXMuY29udGVudEJsb2NrZXJzRW5h
YmxlZCk7CiAKKyAgICBkb2N1bWVudExvYWRlci5zZXRBY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rp
b25zUGF0dGVybnMod2Vic2l0ZVBvbGljaWVzLmFjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNQ
YXR0ZXJucyk7CisKICAgICBPcHRpb25TZXQ8V2ViQ29yZTo6QXV0b3BsYXlRdWlyaz4gcXVpcmtz
OwogICAgIGNvbnN0IGF1dG8mIGFsbG93ZWRRdWlya3MgPSB3ZWJzaXRlUG9saWNpZXMuYWxsb3dl
ZEF1dG9wbGF5UXVpcmtzOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQv
V2Vic2l0ZVBvbGljaWVzRGF0YS5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZVBvbGlj
aWVzRGF0YS5oCmluZGV4IGUwZjY3OTQ1ZTc1YzZhMzM1NWMxZDQ5MzFjOWEwZGExOGFiYWZlNWEu
LmJiYmY1MWEzZWVhMDMyNGFhMTM2NmY4ZmRlZjQ4NWE1YjNmZjA1NmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVQb2xpY2llc0RhdGEuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlUG9saWNpZXNEYXRhLmgKQEAgLTUzLDYgKzUzLDcgQEAgc3RydWN0
IFdlYnNpdGVQb2xpY2llc0RhdGEgewogICAgIHN0YXRpYyB2b2lkIGFwcGx5VG9Eb2N1bWVudExv
YWRlcihXZWJzaXRlUG9saWNpZXNEYXRhJiYsIFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyJik7CiAK
ICAgICBib29sIGNvbnRlbnRCbG9ja2Vyc0VuYWJsZWQgeyB0cnVlIH07CisgICAgc3RkOjpvcHRp
b25hbDxIYXNoU2V0PFN0cmluZz4+IGFjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNQYXR0ZXJu
cyB7IEhhc2hTZXQ8U3RyaW5nPigpIH07CiAgICAgT3B0aW9uU2V0PFdlYnNpdGVBdXRvcGxheVF1
aXJrPiBhbGxvd2VkQXV0b3BsYXlRdWlya3M7CiAgICAgV2Vic2l0ZUF1dG9wbGF5UG9saWN5IGF1
dG9wbGF5UG9saWN5IHsgV2Vic2l0ZUF1dG9wbGF5UG9saWN5OjpEZWZhdWx0IH07CiAjaWYgRU5B
QkxFKERFVklDRV9PUklFTlRBVElPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuY3BwCmluZGV4IGVmYjgwNzJiOTczNTI0
ZDRlZjZhNmU4N2NhM2NkY2UzNDcxZDJhZjUuLmVlNjJlMTA3MzlhZjhmZjA0NWY2ZGQ2ZGUxOTkz
ZTc1ZDYxYzg2NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElD
b250ZW50UnVsZUxpc3RTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNwcApAQCAtNDkxLDcgKzQ5MSw3IEBAIHZvaWQgQ29u
dGVudFJ1bGVMaXN0U3RvcmU6Omxvb2t1cENvbnRlbnRSdWxlTGlzdChjb25zdCBXVEY6OlN0cmlu
ZyYgaWRlbnRpZmllciwKICAgICAgICAgaWYgKGNvbnRlbnRSdWxlTGlzdC0+bWV0YURhdGEudmVy
c2lvbiAhPSBDb250ZW50UnVsZUxpc3RTdG9yZTo6Q3VycmVudENvbnRlbnRSdWxlTGlzdEZpbGVW
ZXJzaW9uKSB7CiAgICAgICAgICAgICBpZiAoYXV0byBzb3VyY2VGcm9tT2xkVmVyc2lvbiA9IGdl
dENvbnRlbnRSdWxlTGlzdFNvdXJjZUZyb21NYXBwZWRGaWxlKCpjb250ZW50UnVsZUxpc3QpOyAh
c291cmNlRnJvbU9sZFZlcnNpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgUnVuTG9v
cDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlz
KSwgc291cmNlRnJvbU9sZFZlcnNpb24gPSBzb3VyY2VGcm9tT2xkVmVyc2lvbi5pc29sYXRlZENv
cHkoKSwgaWRlbnRpZmllciA9IGlkZW50aWZpZXIuaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAg
ICAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5jb21waWxlQ29udGVudFJ1bGVMaXN0KGlkZW50
aWZpZXIsIFdURk1vdmUoc291cmNlRnJvbU9sZFZlcnNpb24pLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CisgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmNvbXBpbGVDb250
ZW50UnVsZUxpc3QoaWRlbnRpZmllciwgV1RGTW92ZShzb3VyY2VGcm9tT2xkVmVyc2lvbiksIHN0
ZDo6bnVsbG9wdCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgICAgICAgICAgICAg
IH0pOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KQEAgLTUzMCwxMyAr
NTMwLDEzIEBAIHZvaWQgQ29udGVudFJ1bGVMaXN0U3RvcmU6OmdldEF2YWlsYWJsZUNvbnRlbnRS
dWxlTGlzdElkZW50aWZpZXJzKENvbXBsZXRpb25IYW5kCiAgICAgfSk7CiB9CiAKLXZvaWQgQ29u
dGVudFJ1bGVMaXN0U3RvcmU6OmNvbXBpbGVDb250ZW50UnVsZUxpc3QoY29uc3QgV1RGOjpTdHJp
bmcmIGlkZW50aWZpZXIsIFdURjo6U3RyaW5nJiYganNvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChSZWZQdHI8QVBJOjpDb250ZW50UnVsZUxpc3Q+LCBzdGQ6OmVycm9yX2NvZGUpPiBjb21wbGV0
aW9uSGFuZGxlcikKK3ZvaWQgQ29udGVudFJ1bGVMaXN0U3RvcmU6OmNvbXBpbGVDb250ZW50UnVs
ZUxpc3QoY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIFdURjo6U3RyaW5nJiYganNvbiwg
c3RkOjpvcHRpb25hbDxIYXNoU2V0PFdURjo6U3RyaW5nPj4mJiBhbGxvd2VkUmVkaXJlY3RTY2hl
bWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxBUEk6OkNvbnRlbnRSdWxlTGlzdD4s
IHN0ZDo6ZXJyb3JfY29kZSk+IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CiAgICAgQXRvbVN0cmluZzo6aW5pdCgpOwogICAgIFdlYkNvcmU6OlF1
YWxpZmllZE5hbWU6OmluaXQoKTsKICAgICAKLSAgICBhdXRvIHBhcnNlZFJ1bGVzID0gV2ViQ29y
ZTo6Q29udGVudEV4dGVuc2lvbnM6OnBhcnNlUnVsZUxpc3QoanNvbiwgeyB9KTsKKyAgICBhdXRv
IHBhcnNlZFJ1bGVzID0gV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OnBhcnNlUnVsZUxpc3Qo
anNvbiwgV1RGTW92ZShhbGxvd2VkUmVkaXJlY3RTY2hlbWVzKSk7CiAgICAgaWYgKCFwYXJzZWRS
dWxlcy5oYXNfdmFsdWUoKSkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxw
dHIsIHBhcnNlZFJ1bGVzLmVycm9yKCkpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuaAppbmRleCA5MzQ1NGRkMTY4
NGU4NDgxNmJlNjhhMTlkZjJjNzJhNmQ5YWJlMjUxLi4xYmVmZjMzZWE5ZGRhMjRjZDE1ZDlkZTMz
Y2I1ZmU1Yjg3MjY4YjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
QVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuaApAQCAtNjcsNyArNjcsNyBAQCBwdWJsaWM6CiAg
ICAgZXhwbGljaXQgQ29udGVudFJ1bGVMaXN0U3RvcmUoY29uc3QgV1RGOjpTdHJpbmcmIHN0b3Jl
UGF0aCk7CiAgICAgdmlydHVhbCB+Q29udGVudFJ1bGVMaXN0U3RvcmUoKTsKIAotICAgIHZvaWQg
Y29tcGlsZUNvbnRlbnRSdWxlTGlzdChjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgV1RG
OjpTdHJpbmcmJiBqc29uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxBUEk6OkNvbnRl
bnRSdWxlTGlzdD4sIHN0ZDo6ZXJyb3JfY29kZSk+KTsKKyAgICB2b2lkIGNvbXBpbGVDb250ZW50
UnVsZUxpc3QoY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIFdURjo6U3RyaW5nJiYganNv
biwgc3RkOjpvcHRpb25hbDxIYXNoU2V0PFdURjo6U3RyaW5nPj4mJiBhbGxvd2VkUmVkaXJlY3RT
Y2hlbWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxBUEk6OkNvbnRlbnRSdWxlTGlz
dD4sIHN0ZDo6ZXJyb3JfY29kZSk+KTsKICAgICB2b2lkIGxvb2t1cENvbnRlbnRSdWxlTGlzdChj
b25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZWZQ
dHI8QVBJOjpDb250ZW50UnVsZUxpc3Q+LCBzdGQ6OmVycm9yX2NvZGUpPik7CiAgICAgdm9pZCBy
ZW1vdmVDb250ZW50UnVsZUxpc3QoY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoc3RkOjplcnJvcl9jb2RlKT4pOwogICAgIHZvaWQgZ2V0QXZhaWxh
YmxlQ29udGVudFJ1bGVMaXN0SWRlbnRpZmllcnMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXVEY6
OlZlY3RvcjxXVEY6OlN0cmluZz4pPik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQVBJV2Vic2l0ZVBvbGljaWVzLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9BUElXZWJzaXRlUG9saWNpZXMuY3BwCmluZGV4IDMwMzEwNWEzMjU0ZGM5M2JjMjJmZTA2
ZDE5NTA1MjhjZDk4YmY0ZmMuLjE5YzlhNTcwYzVhM2M2ZjJkMGQyMmRkNjJkNTAzZmNjM2FlYzUw
N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJzaXRlUG9s
aWNpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJzaXRlUG9s
aWNpZXMuY3BwCkBAIC0zOSw2ICszOSw3IEBAIFJlZjxXZWJzaXRlUG9saWNpZXM+IFdlYnNpdGVQ
b2xpY2llczo6Y29weSgpIGNvbnN0CiB7CiAgICAgYXV0byBwb2xpY2llcyA9IFdlYnNpdGVQb2xp
Y2llczo6Y3JlYXRlKCk7CiAgICAgcG9saWNpZXMtPnNldENvbnRlbnRCbG9ja2Vyc0VuYWJsZWQo
bV9jb250ZW50QmxvY2tlcnNFbmFibGVkKTsKKyAgICBwb2xpY2llcy0+bV9hY3RpdmVDb250ZW50
UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMgPSBtX2FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNQ
YXR0ZXJuczsKICAgICBwb2xpY2llcy0+c2V0QWxsb3dlZEF1dG9wbGF5UXVpcmtzKG1fYWxsb3dl
ZEF1dG9wbGF5UXVpcmtzKTsKICAgICBwb2xpY2llcy0+c2V0QXV0b3BsYXlQb2xpY3kobV9hdXRv
cGxheVBvbGljeSk7CiAjaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKQEAgLTc4LDkgKzc5
LDcgQEAgUmVmPFdlYnNpdGVQb2xpY2llcz4gV2Vic2l0ZVBvbGljaWVzOjpjb3B5KCkgY29uc3QK
ICAgICByZXR1cm4gcG9saWNpZXM7CiB9CiAKLVdlYnNpdGVQb2xpY2llczo6fldlYnNpdGVQb2xp
Y2llcygpCi17Ci19CitXZWJzaXRlUG9saWNpZXM6On5XZWJzaXRlUG9saWNpZXMoKSA9IGRlZmF1
bHQ7CiAKIHZvaWQgV2Vic2l0ZVBvbGljaWVzOjpzZXRXZWJzaXRlRGF0YVN0b3JlKFJlZlB0cjxX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU+JiYgd2Vic2l0ZURhdGFTdG9yZSkKIHsKQEAgLTEwNCw2
ICsxMDMsNyBAQCBXZWJLaXQ6OldlYnNpdGVQb2xpY2llc0RhdGEgV2Vic2l0ZVBvbGljaWVzOjpk
YXRhKCkKIAogICAgIHJldHVybiB7CiAgICAgICAgIGNvbnRlbnRCbG9ja2Vyc0VuYWJsZWQoKSwK
KyAgICAgICAgYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5zKCksCiAgICAgICAg
IGFsbG93ZWRBdXRvcGxheVF1aXJrcygpLAogICAgICAgICBhdXRvcGxheVBvbGljeSgpLAogI2lm
IEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQVBJV2Vic2l0ZVBvbGljaWVzLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQVBJV2Vic2l0ZVBvbGljaWVzLmgKaW5kZXggNjg2N2FhYzJiN2RmMmM4ZDFhMTk1ZTY3
NzA1OTBlMDVmYTEwOGFhYi4uYjdmNDQyNDY2NDE5MzA5ZjQzYmE4YjI0YWFmZDlmODA1NzA3Yzlk
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVQb2xp
Y2llcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJzaXRlUG9saWNp
ZXMuaApAQCAtNjMsNiArNjMsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBjb250ZW50QmxvY2tlcnNF
bmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50QmxvY2tlcnNFbmFibGVkOyB9CiAgICAg
dm9pZCBzZXRDb250ZW50QmxvY2tlcnNFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2NvbnRlbnRC
bG9ja2Vyc0VuYWJsZWQgPSBlbmFibGVkOyB9CiAgICAgCisgICAgdm9pZCBzZXRBY3RpdmVDb250
ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMoc3RkOjpvcHRpb25hbDxIYXNoU2V0PFdURjo6U3Ry
aW5nPj4mJiBwYXR0ZXJucykgeyBtX2FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNQYXR0ZXJu
cyA9IFdURk1vdmUocGF0dGVybnMpOyB9CisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxIYXNoU2V0
PFdURjo6U3RyaW5nPj4mIGFjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNQYXR0ZXJucygpIGNv
bnN0IHsgcmV0dXJuIG1fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5zOyB9Cisg
ICAgCiAgICAgT3B0aW9uU2V0PFdlYktpdDo6V2Vic2l0ZUF1dG9wbGF5UXVpcms+IGFsbG93ZWRB
dXRvcGxheVF1aXJrcygpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dlZEF1dG9wbGF5UXVpcmtzOyB9
CiAgICAgdm9pZCBzZXRBbGxvd2VkQXV0b3BsYXlRdWlya3MoT3B0aW9uU2V0PFdlYktpdDo6V2Vi
c2l0ZUF1dG9wbGF5UXVpcms+IHF1aXJrcykgeyBtX2FsbG93ZWRBdXRvcGxheVF1aXJrcyA9IHF1
aXJrczsgfQogICAgIApAQCAtMTM1LDcgKzEzOCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElk
ZW1wb3RlbnRNb2RlQXV0b3NpemluZ09ubHlIb25vcnNQZXJjZW50YWdlcyhib29sIGlkZW1wb3Rl
bnRNb2RlQXV0b3NpemluZ09ubHlIb25vcnNQZXJjZW50YWdlcykgeyBtX2lkZW1wb3RlbnRNb2Rl
QXV0b3NpemluZ09ubHlIb25vcnNQZXJjZW50YWdlcyA9IGlkZW1wb3RlbnRNb2RlQXV0b3Npemlu
Z09ubHlIb25vcnNQZXJjZW50YWdlczsgfQogCiBwcml2YXRlOgorICAgIC8vIEZJWE1FOiByZXBs
YWNlIG1vc3Qgb3IgYWxsIG9mIHRoZXNlIG1lbWJlcnMgd2l0aCBhIFdlYnNpdGVQb2xpY2llc0Rh
dGEuCiAgICAgYm9vbCBtX2NvbnRlbnRCbG9ja2Vyc0VuYWJsZWQgeyB0cnVlIH07CisgICAgc3Rk
OjpvcHRpb25hbDxIYXNoU2V0PFdURjo6U3RyaW5nPj4gbV9hY3RpdmVDb250ZW50UnVsZUxpc3RB
Y3Rpb25zUGF0dGVybnMgeyBIYXNoU2V0PFdURjo6U3RyaW5nPigpIH07CiAgICAgT3B0aW9uU2V0
PFdlYktpdDo6V2Vic2l0ZUF1dG9wbGF5UXVpcms+IG1fYWxsb3dlZEF1dG9wbGF5UXVpcmtzOwog
ICAgIFdlYktpdDo6V2Vic2l0ZUF1dG9wbGF5UG9saWN5IG1fYXV0b3BsYXlQb2xpY3kgeyBXZWJL
aXQ6OldlYnNpdGVBdXRvcGxheVBvbGljeTo6RGVmYXVsdCB9OwogI2lmIEVOQUJMRShERVZJQ0Vf
T1JJRU5UQVRJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVSZWYuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0MvV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUmVmLmNwcAppbmRleCBmZjQ3MDFj
OWI1NDg0N2I3M2YxMDkxNWZkNzVkZTM2MmM0MThiOTYxLi44MzI1YTRiMzcxMTg2MjFjODVhZjQ3
MTk3MDA3NDQzODI4OWIwMDdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVSZWYuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlZi5jcHAKQEAg
LTc2LDcgKzc2LDcgQEAgc3RhdGljIGlubGluZSBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVS
ZXN1bHQgdG9SZXN1bHQoY29uc3Qgc3RkOjplcnJvcl9jb2RlJgogdm9pZCBXS1VzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmVDb21waWxlKFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlZiBzdG9y
ZSwgV0tTdHJpbmdSZWYgaWRlbnRpZmllciwgV0tTdHJpbmdSZWYganNvblNvdXJjZSwgdm9pZCog
Y29udGV4dCwgV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRnVuY3Rpb24gY2FsbGJhY2spCiB7
CiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAgICB0b0ltcGwoc3RvcmUpLT5jb21w
aWxlQ29udGVudFJ1bGVMaXN0KHRvV1RGU3RyaW5nKGlkZW50aWZpZXIpLCB0b1dURlN0cmluZyhq
c29uU291cmNlKSwgW2NvbnRleHQsIGNhbGxiYWNrXShSZWZQdHI8QVBJOjpDb250ZW50UnVsZUxp
c3Q+IGNvbnRlbnRSdWxlTGlzdCwgc3RkOjplcnJvcl9jb2RlIGVycm9yKSB7CisgICAgdG9JbXBs
KHN0b3JlKS0+Y29tcGlsZUNvbnRlbnRSdWxlTGlzdCh0b1dURlN0cmluZyhpZGVudGlmaWVyKSwg
dG9XVEZTdHJpbmcoanNvblNvdXJjZSksIHsgSGFzaFNldDxTdHJpbmc+KCkgfSwgW2NvbnRleHQs
IGNhbGxiYWNrXShSZWZQdHI8QVBJOjpDb250ZW50UnVsZUxpc3Q+IGNvbnRlbnRSdWxlTGlzdCwg
c3RkOjplcnJvcl9jb2RlIGVycm9yKSB7CiAgICAgICAgIGNhbGxiYWNrKGVycm9yID8gbnVsbHB0
ciA6IHRvQVBJKGNvbnRlbnRSdWxlTGlzdC5sZWFrUmVmKCkpLCB0b1Jlc3VsdChlcnJvciksIGNv
bnRleHQpOwogICAgIH0pOwogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlLm1tIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudFJ1bGVMaXN0U3RvcmUubW0KaW5kZXggZDVhYjk0
ZmIxODc1ZGIwN2I3OGZhMDU1MzEwMjIzNGJmZDgzM2U1NC4uODMxMjFhNGIxODA2MmVjMDE5OWQx
OGU3ZjE3NmZiMjRhNGY5M2YzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLQ29udGVudFJ1bGVMaXN0U3RvcmUubW0KKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudFJ1bGVMaXN0U3RvcmUubW0KQEAgLTc3LDcgKzc3
LDcgQEAgc3RhdGljIFdLRXJyb3JDb2RlIHRvV0tFcnJvckNvZGUoY29uc3Qgc3RkOjplcnJvcl9j
b2RlJiBlcnJvcikKIAogLSAodm9pZCljb21waWxlQ29udGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmll
cjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGVuY29kZWRDb250ZW50UnVsZUxpc3Q6KE5TU3RyaW5n
ICopZW5jb2RlZENvbnRlbnRSdWxlTGlzdCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoV0tD
b250ZW50UnVsZUxpc3QgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIFtz
ZWxmIF9jb21waWxlQ29udGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmllcjppZGVudGlmaWVyIGVuY29k
ZWRDb250ZW50UnVsZUxpc3Q6ZW5jb2RlZENvbnRlbnRSdWxlTGlzdCBjb21wbGV0aW9uSGFuZGxl
cjpjb21wbGV0aW9uSGFuZGxlcl07CisgICAgW3NlbGYgX2NvbXBpbGVDb250ZW50UnVsZUxpc3RG
b3JJZGVudGlmaWVyOmlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRSdWxlTGlzdDplbmNvZGVkQ29u
dGVudFJ1bGVMaXN0IGFsbG93ZWRSZWRpcmVjdFNjaGVtZXM6bmlsIGNvbXBsZXRpb25IYW5kbGVy
OmNvbXBsZXRpb25IYW5kbGVyXTsKIH0KIAogLSAodm9pZClsb29rVXBDb250ZW50UnVsZUxpc3RG
b3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6KHZv
aWQgKF4pKFdLQ29udGVudFJ1bGVMaXN0ICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIK
QEAgLTE0OSw5ICsxNDksMTIgQEAgc3RhdGljIFdLRXJyb3JDb2RlIHRvV0tFcnJvckNvZGUoY29u
c3Qgc3RkOjplcnJvcl9jb2RlJiBlcnJvcikKICAgICB9KTsKIH0KIAotLSAodm9pZClfY29tcGls
ZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBlbmNv
ZGVkQ29udGVudFJ1bGVMaXN0OihOU1N0cmluZyAqKSBlbmNvZGVkQ29udGVudFJ1bGVMaXN0IGNv
bXBsZXRpb25IYW5kbGVyOih2b2lkICheKShXS0NvbnRlbnRSdWxlTGlzdCAqLCBOU0Vycm9yICop
KWNvbXBsZXRpb25IYW5kbGVyCistICh2b2lkKV9jb21waWxlQ29udGVudFJ1bGVMaXN0Rm9ySWRl
bnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGVuY29kZWRDb250ZW50UnVsZUxpc3Q6KE5T
U3RyaW5nICopZW5jb2RlZENvbnRlbnRSdWxlTGlzdCBhbGxvd2VkUmVkaXJlY3RTY2hlbWVzOihO
U1NldDxOU1N0cmluZyAqPiAqKXNjaGVtZXMgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFdL
Q29udGVudFJ1bGVMaXN0ICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBf
Y29udGVudFJ1bGVMaXN0U3RvcmUtPmNvbXBpbGVDb250ZW50UnVsZUxpc3QoaWRlbnRpZmllciwg
ZW5jb2RlZENvbnRlbnRSdWxlTGlzdCwgW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRy
KGNvbXBsZXRpb25IYW5kbGVyKV0oUmVmUHRyPEFQSTo6Q29udGVudFJ1bGVMaXN0PiBjb250ZW50
UnVsZUxpc3QsIHN0ZDo6ZXJyb3JfY29kZSBlcnJvcikgeworICAgIEhhc2hTZXQ8U3RyaW5nPiBh
bGxvd2VkUmVkaXJlY3RTY2hlbWVzOworICAgIGZvciAoTlNTdHJpbmcgKnNjaGVtZSBpbiBzY2hl
bWVzKQorICAgICAgICBhbGxvd2VkUmVkaXJlY3RTY2hlbWVzLmFkZChzY2hlbWUpOworICAgIF9j
b250ZW50UnVsZUxpc3RTdG9yZS0+Y29tcGlsZUNvbnRlbnRSdWxlTGlzdChpZGVudGlmaWVyLCBl
bmNvZGVkQ29udGVudFJ1bGVMaXN0LCBXVEZNb3ZlKGFsbG93ZWRSZWRpcmVjdFNjaGVtZXMpLCBb
Y29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXShSZWZQ
dHI8QVBJOjpDb250ZW50UnVsZUxpc3Q+IGNvbnRlbnRSdWxlTGlzdCwgc3RkOjplcnJvcl9jb2Rl
IGVycm9yKSB7CiAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgYXV0byB1c2VySW5m
byA9IEB7TlNIZWxwQW5jaG9yRXJyb3JLZXk6IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAi
UnVsZSBsaXN0IGNvbXBpbGF0aW9uIGZhaWxlZDogJXMiLCBlcnJvci5tZXNzYWdlKCkuY19zdHIo
KV19OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tD
b250ZW50UnVsZUxpc3RTdG9yZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlUHJpdmF0ZS5oCmluZGV4IDUwMjg2ODY4YmYz
ZDY0NzAwZjczMWUyNDhlZDUzNmQ0ZGQ4N2M4MmQuLmI3OWE2YThhYzQ0YzYyZWU1N2U5ZGVlNTZh
ZDc3Y2I2NWQ3ODczMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlUHJpdmF0ZS5oCkBAIC0z
Miw3ICszMiw3IEBACiAtICh2b2lkKV9pbnZhbGlkYXRlQ29udGVudFJ1bGVMaXN0VmVyc2lvbkZv
cklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcjsKIC0gKHZvaWQpX2dldENvbnRlbnRS
dWxlTGlzdFNvdXJjZUZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBjb21wbGV0
aW9uSGFuZGxlcjoodm9pZCAoXikoTlNTdHJpbmcgKikpY29tcGxldGlvbkhhbmRsZXI7CiAKLS0g
KHZvaWQpX2NvbXBpbGVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlk
ZW50aWZpZXIgZW5jb2RlZENvbnRlbnRSdWxlTGlzdDooTlNTdHJpbmcgKikgZW5jb2RlZENvbnRl
bnRSdWxlTGlzdCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoV0tDb250ZW50UnVsZUxpc3Qg
KiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQpX2NvbXBpbGVDb250ZW50
UnVsZUxpc3RGb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgZW5jb2RlZENvbnRl
bnRSdWxlTGlzdDooTlNTdHJpbmcgKillbmNvZGVkQ29udGVudFJ1bGVMaXN0IGFsbG93ZWRSZWRp
cmVjdFNjaGVtZXM6KE5TU2V0PE5TU3RyaW5nICo+ICopc2NoZW1lcyBjb21wbGV0aW9uSGFuZGxl
cjoodm9pZCAoXikoV0tDb250ZW50UnVsZUxpc3QgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFu
ZGxlcjsKIAogLy8gRklYTUU6IFJlbW92ZSBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLgog
KyAoaW5zdGFuY2V0eXBlKWRlZmF1bHRTdG9yZVdpdGhMZWdhY3lGaWxlbmFtZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnBhZ2VQcmVmZXJlbmNl
cy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnBhZ2VQcmVmZXJl
bmNlcy5tbQppbmRleCAxN2RiOWVjZmViMjUzMmQxMzIzN2YwZjZkMTgxMDNkMDEwMmQ1YWI4Li5m
ZTkxNDRmZmVlZGE4ZDYzNWQyM2ViZTI1YmI3OWRjNjI3NDZiMGM1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJwYWdlUHJlZmVyZW5jZXMubW0KKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2VicGFnZVByZWZlcmVuY2Vz
Lm1tCkBAIC0xNDEsNiArMTQxLDMyIEBAIHN0YXRpYyBXZWJDb3JlOjpNb3VzZUV2ZW50UG9saWN5
IGNvcmVNb3VzZUV2ZW50UG9saWN5KF9XS1dlYnNpdGVNb3VzZUV2ZW50UG9saWN5CiAgICAgcmV0
dXJuIF93ZWJzaXRlUG9saWNpZXMtPmNvbnRlbnRCbG9ja2Vyc0VuYWJsZWQoKTsKIH0KIAorLSAo
dm9pZClfc2V0QWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5zOihOU1NldDxOU1N0
cmluZyAqPiAqKXBhdHRlcm5zCit7CisgICAgaWYgKCFwYXR0ZXJucykgeworICAgICAgICBfd2Vi
c2l0ZVBvbGljaWVzLT5zZXRBY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMoc3Rk
OjpudWxsb3B0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEhhc2hTZXQ8U3RyaW5n
PiBwYXR0ZXJuSGFzaFNldDsKKyAgICBwYXR0ZXJuSGFzaFNldC5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KHBhdHRlcm5zLmNvdW50KTsKKyAgICBmb3IgKE5TU3RyaW5nICpwYXR0ZXJuIGluIHBhdHRl
cm5zKQorICAgICAgICBwYXR0ZXJuSGFzaFNldC5hZGQocGF0dGVybik7CisgICAgX3dlYnNpdGVQ
b2xpY2llcy0+c2V0QWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5zKFdURk1vdmUo
cGF0dGVybkhhc2hTZXQpKTsKK30KKworLSAoTlNTZXQ8TlNTdHJpbmcgKj4gKilfYWN0aXZlQ29u
dGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5zCit7CisgICAgY29uc3QgYXV0byYgcGF0dGVybnMg
PSBfd2Vic2l0ZVBvbGljaWVzLT5hY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMo
KTsKKyAgICBpZiAoIXBhdHRlcm5zKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgTlNNdXRh
YmxlU2V0PE5TU3RyaW5nICo+ICpzZXQgPSBbTlNNdXRhYmxlU2V0IHNldF07CisgICAgZm9yIChj
b25zdCBhdXRvJiBwYXR0ZXJuIDogKnBhdHRlcm5zKQorICAgICAgICBbc2V0IGFkZE9iamVjdDpw
YXR0ZXJuXTsKKyAgICByZXR1cm4gc2V0OworfQorCiAtICh2b2lkKV9zZXRBbGxvd2VkQXV0b3Bs
YXlRdWlya3M6KF9XS1dlYnNpdGVBdXRvcGxheVF1aXJrKWFsbG93ZWRRdWlya3MKIHsKICAgICBP
cHRpb25TZXQ8V2ViS2l0OjpXZWJzaXRlQXV0b3BsYXlRdWlyaz4gcXVpcmtzOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2VicGFnZVByZWZlcmVuY2Vz
UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2VicGFnZVBy
ZWZlcmVuY2VzUHJpdmF0ZS5oCmluZGV4IDQ3N2ZkYzExZjMyZjlkZmI5ZWIwZDE4YjkzZjRiMjQ3
MGQ0N2I0NDkuLmZjM2NhNmQ0Mzg2ZTQ2ODIxZmY2OGZhNjhmOTBiOWRkYWQ0NDg1ZjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnBhZ2VQcmVmZXJl
bmNlc1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tX
ZWJwYWdlUHJlZmVyZW5jZXNQcml2YXRlLmgKQEAgLTY5LDYgKzY5LDcgQEAgdHlwZWRlZiBOU19P
UFRJT05TKE5TVUludGVnZXIsIF9XS1dlYnNpdGVNb3VzZUV2ZW50UG9saWN5KSB7CiBAaW50ZXJm
YWNlIFdLV2VicGFnZVByZWZlcmVuY2VzIChXS1ByaXZhdGUpCiAKIEBwcm9wZXJ0eSAobm9uYXRv
bWljLCBzZXR0ZXI9X3NldENvbnRlbnRCbG9ja2Vyc0VuYWJsZWQ6KSBCT09MIF9jb250ZW50Qmxv
Y2tlcnNFbmFibGVkOworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIHNldHRlcj1fc2V0QWN0
aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5zOikgTlNTZXQ8TlNTdHJpbmcgKj4gKl9h
Y3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnM7CiBAcHJvcGVydHkgKG5vbmF0b21p
Yywgc2V0dGVyPV9zZXRBbGxvd2VkQXV0b3BsYXlRdWlya3M6KSBfV0tXZWJzaXRlQXV0b3BsYXlR
dWlyayBfYWxsb3dlZEF1dG9wbGF5UXVpcmtzOwogQHByb3BlcnR5IChub25hdG9taWMsIHNldHRl
cj1fc2V0QXV0b3BsYXlQb2xpY3k6KSBfV0tXZWJzaXRlQXV0b3BsYXlQb2xpY3kgX2F1dG9wbGF5
UG9saWN5OwogQHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIHNldHRlcj1fc2V0Q3VzdG9tSGVh
ZGVyRmllbGRzOikgTlNBcnJheTxfV0tDdXN0b21IZWFkZXJGaWVsZHMgKj4gKl9jdXN0b21IZWFk
ZXJGaWVsZHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
X1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCmluZGV4IDFkMWQ4NzI0
MjkxNzgzOWUwM2M2YzAxMTBhOTRhODNjYzZlMGU4NzEuLmUxYTlmZTM1M2UyNGQ3MjkyZWNlOWYy
YWViM2YyYmM0NTZiNjU2NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCkBA
IC03MCw3ICs3MCw3IEBAIHN0YXRpYyBOU0Vycm9yICp0b1VzZXJDb250ZW50UnVsZUxpc3RTdG9y
ZUVycm9yKGNvbnN0IE5TRXJyb3IgKmVycm9yKQogCiAtICh2b2lkKWNvbXBpbGVDb250ZW50RXh0
ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGVuY29kZWRDb250ZW50
RXh0ZW5zaW9uOihOU1N0cmluZyAqKWVuY29kZWRDb250ZW50UnVsZUxpc3QgY29tcGxldGlvbkhh
bmRsZXI6KHZvaWQgKF4pKF9XS1VzZXJDb250ZW50RmlsdGVyICosIE5TRXJyb3IgKikpY29tcGxl
dGlvbkhhbmRsZXIKIHsKLSAgICBbX2NvbnRlbnRSdWxlTGlzdFN0b3JlIF9jb21waWxlQ29udGVu
dFJ1bGVMaXN0Rm9ySWRlbnRpZmllcjppZGVudGlmaWVyIGVuY29kZWRDb250ZW50UnVsZUxpc3Q6
ZW5jb2RlZENvbnRlbnRSdWxlTGlzdCBjb21wbGV0aW9uSGFuZGxlcjpeKFdLQ29udGVudFJ1bGVM
aXN0ICpjb250ZW50UnVsZUxpc3QsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgW19jb250ZW50UnVs
ZUxpc3RTdG9yZSBjb21waWxlQ29udGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmllcjppZGVudGlmaWVy
IGVuY29kZWRDb250ZW50UnVsZUxpc3Q6ZW5jb2RlZENvbnRlbnRSdWxlTGlzdCBjb21wbGV0aW9u
SGFuZGxlcjpeKFdLQ29udGVudFJ1bGVMaXN0ICpjb250ZW50UnVsZUxpc3QsIE5TRXJyb3IgKmVy
cm9yKSB7CiAgICAgICAgIGF1dG8gY29udGVudEZpbHRlciA9IGNvbnRlbnRSdWxlTGlzdCA/IGFk
b3B0TlMoW1tfV0tVc2VyQ29udGVudEZpbHRlciBhbGxvY10gX2luaXRXaXRoV0tDb250ZW50UnVs
ZUxpc3Q6Y29udGVudFJ1bGVMaXN0XSkgOiBuaWw7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KGNvbnRlbnRGaWx0ZXIuZ2V0KCksIHRvVXNlckNvbnRlbnRSdWxlTGlzdFN0b3JlRXJyb3IoZXJy
b3IpKTsKICAgICB9XTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3
b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3
b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmNwcAppbmRleCBkNjcxZDA1ODEwNzExNDhiNDJlNjA3YWI1
OTg0ODZlOTBhNzAzNWUwLi5jNjM1Nzc5MjliNWUwMjQyM2UzNTIyYjAwNzM5ZTMwM2Y3ZmQ4Yjkw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJT
dHJhdGVneS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViTG9h
ZGVyU3RyYXRlZ3kuY3BwCkBAIC00NzksNiArNDc5LDEyIEBAIHZvaWQgV2ViTG9hZGVyU3RyYXRl
Z3k6OnJlbW92ZShSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCiAgICAgQVNTRVJUKHJl
c291cmNlTG9hZGVyKTsKICAgICBMT0coTmV0d29ya1NjaGVkdWxpbmcsICIoV2ViUHJvY2Vzcykg
V2ViTG9hZGVyU3RyYXRlZ3k6OnJlbW92ZSwgdXJsICclcyciLCByZXNvdXJjZUxvYWRlci0+dXJs
KCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKKyAgICBhdXRvIGlkZW50aWZpZXIgPSByZXNv
dXJjZUxvYWRlci0+aWRlbnRpZmllcigpOworICAgIGlmICghaWRlbnRpZmllcikgeworICAgICAg
ICBMT0dfRVJST1IoIldlYkxvYWRlclN0cmF0ZWd5IHJlbW92aW5nIGEgUmVzb3VyY2VMb2FkZXIg
dGhhdCBoYXMgbm8gaWRlbnRpZmllci4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAg
IGlmIChhdXRvIHRhc2sgPSBtX3VybFNjaGVtZVRhc2tzLnRha2UocmVzb3VyY2VMb2FkZXItPmlk
ZW50aWZpZXIoKSkpIHsKICAgICAgICAgQVNTRVJUKCFtX2ludGVybmFsbHlGYWlsZWRSZXNvdXJj
ZUxvYWRlcnMuY29udGFpbnMocmVzb3VyY2VMb2FkZXIpKTsKICAgICAgICAgdGFzay0+c3RvcExv
YWRpbmcoKTsKQEAgLTQ4OSwxMiArNDk1LDYgQEAgdm9pZCBXZWJMb2FkZXJTdHJhdGVneTo6cmVt
b3ZlKFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlcikKICAgICAgICAgbV9pbnRlcm5hbGx5
RmFpbGVkUmVzb3VyY2VMb2FkZXJzLnJlbW92ZShyZXNvdXJjZUxvYWRlcik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgCi0gICAgYXV0byBpZGVudGlmaWVyID0gcmVzb3VyY2VMb2FkZXIt
PmlkZW50aWZpZXIoKTsKLSAgICBpZiAoIWlkZW50aWZpZXIpIHsKLSAgICAgICAgTE9HX0VSUk9S
KCJXZWJMb2FkZXJTdHJhdGVneSByZW1vdmluZyBhIFJlc291cmNlTG9hZGVyIHRoYXQgaGFzIG5v
IGlkZW50aWZpZXIuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICBSZWZQdHI8V2Vi
UmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IG1fd2ViUmVzb3VyY2VMb2FkZXJzLnRha2UoaWRlbnRp
Zmllcik7CiAgICAgLy8gTG9hZGVyIG1heSBub3QgYmUgcmVnaXN0ZXJlZCBpZiB3ZSBjcmVhdGVk
IGl0LCBidXQgaGF2ZW4ndCBzY2hlZHVsZWQgeWV0IChhIGJ1bmRsZSBjbGllbnQgY2FuIGRlY2lk
ZSB0byBjYW5jZWwgc3VjaCByZXF1ZXN0IHZpYSB3aWxsU2VuZFJlcXVlc3QpLgpkaWZmIC0tZ2l0
IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDQ3MzNhZDJkNzQ0MmU5
MGY3MzNkOTJkZGVlNDlmMWRkYTE5Mzc5NjIuLjk4NTUwMzNmMzk1ZGY1YmIyNTIxMjA5OWQxYWUz
Y2UxNWZiZmY5OTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAyMS0xMS0xNyAgQWxleCBDaHJpc3RlbnNlbiAgPGFj
aHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIEltcGxlbWVudCBtb3N0IG9mIHJlZGly
ZWN0IGFuZCBtb2RpZnktaGVhZGVycyBhY3Rpb24gdHlwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzI2OAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L0NvbnRlbnRFeHRlbnNpb25zLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkluTWVtb3J5
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUpOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6Y2hlY2tDb21waWxlckVycm9yKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0NvbnRlbnRFeHRl
bnNpb25TdG9yZS5tbToKKyAgICAgICAgKGNvbXBpbGVDb250ZW50UnVsZUxpc3QpOgorICAgICAg
ICAobmF2aWdhdGlvbkRlbGVnYXRlQWxsb3dpbmdBY3RpdmVBY3Rpb25zT25UZXN0SG9zdCk6Cisg
ICAgICAgIChURVNUX0YpOgorCiAyMDIxLTExLTEwICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhm
aWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBCdWlsZCBXZWJHUFUgb24gb3VyIGJv
dHMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50
RXh0ZW5zaW9ucy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVu
dEV4dGVuc2lvbnMuY3BwCmluZGV4IDRkMzI1ZWI0MWQ0MThjNjM1YjQxYjU4N2VkYjcwMjRmZWJi
MzRkMDUuLjMzOTVhMGUxZTkzNDgzYWQ1MzUxOThjY2QwMGZhYTMyNzQ5NDZiZmQgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5j
cHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNp
b25zLmNwcApAQCAtMTI5LDcgKzEyOSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIENvbXBp
bGVkQ29udGVudEV4dGVuc2lvbkRhdGEgZXh0ZW5zaW9uRGF0YTsKICAgICAgICAgSW5NZW1vcnlD
b250ZW50RXh0ZW5zaW9uQ29tcGlsYXRpb25DbGllbnQgY2xpZW50KGV4dGVuc2lvbkRhdGEpOwot
ICAgICAgICBhdXRvIHBhcnNlZFJ1bGVzID0gQ29udGVudEV4dGVuc2lvbnM6OnBhcnNlUnVsZUxp
c3QoZmlsdGVyLCB7IH0pOworICAgICAgICBhdXRvIHBhcnNlZFJ1bGVzID0gQ29udGVudEV4dGVu
c2lvbnM6OnBhcnNlUnVsZUxpc3QoZmlsdGVyLCBzdGQ6Om51bGxvcHQpOwogICAgICAgICBhdXRv
IGNvbXBpbGVyRXJyb3IgPSBDb250ZW50RXh0ZW5zaW9uczo6Y29tcGlsZVJ1bGVMaXN0KGNsaWVu
dCwgV1RGTW92ZShmaWx0ZXIpLCBXVEZNb3ZlKHBhcnNlZFJ1bGVzLnZhbHVlKCkpKTsKIAogICAg
ICAgICAvLyBDb21waWxpbmcgc2hvdWxkIGFsd2F5cyBzdWNjZWVkIGhlcmUuIFdlIGhhdmUgb3Ro
ZXIgdGVzdHMgZm9yIGNvbXBpbGUgZmFpbHVyZXMuCkBAIC0xMzYwLDcgKzEzNjAsNyBAQCBURVNU
X0YoQ29udGVudEV4dGVuc2lvblRlc3QsIERlZXBORkEpCiAgICAgRVhQRUNUX0VRKDF1bCwgY3Jl
YXRlTkZBcyhjb21iaW5lZFVSTEZpbHRlcnMpLnNpemUoKSk7CiB9CiAKLXZvaWQgY2hlY2tDb21w
aWxlckVycm9yKGNvbnN0IGNoYXIqIGpzb24sIHN0ZDo6ZXJyb3JfY29kZSBleHBlY3RlZEVycm9y
LCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGFsbG93ZWRSZWRpcmVjdFVSTFNjaGVtZXMgPSB7IH0p
Cit2b2lkIGNoZWNrQ29tcGlsZXJFcnJvcihjb25zdCBjaGFyKiBqc29uLCBzdGQ6OmVycm9yX2Nv
ZGUgZXhwZWN0ZWRFcnJvciwgY29uc3Qgc3RkOjpvcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+JiBh
bGxvd2VkUmVkaXJlY3RVUkxTY2hlbWVzID0gc3RkOjpudWxsb3B0KQogewogICAgIENvbXBpbGVk
Q29udGVudEV4dGVuc2lvbkRhdGEgZXh0ZW5zaW9uRGF0YTsKICAgICBJbk1lbW9yeUNvbnRlbnRF
eHRlbnNpb25Db21waWxhdGlvbkNsaWVudCBjbGllbnQoZXh0ZW5zaW9uRGF0YSk7CkBAIC0xNTMw
LDYgKzE1MzAsNyBAQCBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIEludmFsaWRKU09OKQog
ICAgICAgICBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkQWN0aW9uVHlwZSk7CiAg
ICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiY3NzLWRpc3Bs
YXktbm9uZVwifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0i
LAogICAgICAgICBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkQ1NTRGlzcGxheU5v
bmVBY3Rpb25UeXBlKTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIiIsIENvbnRlbnRFeHRlbnNp
b25FcnJvcjo6SlNPTlJlZGlyZWN0VVJMU2NoZW1lc1Nob3VsZE5vdEluY2x1ZGVKYXZhc2NyaXB0
LCB7IHsgImphdmFzY3JpcHQiIH0gfSk7CiAKICAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJh
Y3Rpb25cIjp7XCJ0eXBlXCI6XCJpZ25vcmUtcHJldmlvdXMtcnVsZXNcIn0sXCJ0cmlnZ2VyXCI6
e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX0sIgogICAgICAgICAie1wiYWN0aW9uXCI6
e1widHlwZVwiOlwiY3NzLWRpc3BsYXktbm9uZVwiLFwic2VsZWN0b3JcIjpcIi5oaWRkZW5cIn0s
XCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiLipcIn19XSIsIHsgfSk7CkBAIC0xNTU4LDEy
ICsxNTU5LDIwIEBAIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgSW52YWxpZEpTT04pCiAg
ICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3Rc
IixcInJlZGlyZWN0XCI6e1widHJhbnNmb3JtXCI6e1wicXVlcnktdHJhbnNmb3JtXCI6e1wiYWRk
LW9yLXJlcGxhY2UtcGFyYW1ldGVyc1wiOlt7fV19fX19LFwidHJpZ2dlclwiOntcInVybC1maWx0
ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkFkZE9y
UmVwbGFjZVBhcmFtZXRlcnNLZXlWYWx1ZU1pc3NpbmdLZXlTdHJpbmcpOwogICAgIGNoZWNrQ29t
cGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRpcmVj
dFwiOntcInRyYW5zZm9ybVwiOntcInF1ZXJ5LXRyYW5zZm9ybVwiOntcImFkZC1vci1yZXBsYWNl
LXBhcmFtZXRlcnNcIjpbe1wia2V5XCI6NX1dfX19fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVy
XCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05BZGRPclJl
cGxhY2VQYXJhbWV0ZXJzS2V5VmFsdWVNaXNzaW5nS2V5U3RyaW5nKTsKICAgICBjaGVja0NvbXBp
bGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVkaXJlY3Rc
Ijp7XCJ0cmFuc2Zvcm1cIjp7XCJxdWVyeS10cmFuc2Zvcm1cIjp7XCJhZGQtb3ItcmVwbGFjZS1w
YXJhbWV0ZXJzXCI6W3tcImtleVwiOlwia1wiLFwidmFsdWVcIjo1fV19fX19LFwidHJpZ2dlclwi
OntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsIENvbnRlbnRFeHRlbnNpb25FcnJv
cjo6SlNPTkFkZE9yUmVwbGFjZVBhcmFtZXRlcnNLZXlWYWx1ZU1pc3NpbmdWYWx1ZVN0cmluZyk7
Ci0gICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJl
Y3RcIixcInJlZGlyZWN0XCI6e1widXJsXCI6XCJhYm91dDpibGFua1wifX0sXCJ0cmlnZ2VyXCI6
e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwgQ29udGVudEV4dGVuc2lvbkVycm9y
OjpKU09OUmVkaXJlY3RVUkxTY2hlbWVOb3RBbGxvd2VkKTsKLSAgICBjaGVja0NvbXBpbGVyRXJy
b3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVkaXJlY3RcIjp7XCJ1
cmxcIjpcImFib3V0OmJsYW5rXCJ9fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJr
aXQub3JnXCJ9fV0iLCB7IH0sIHsgImFib3V0IiB9KTsKLSAgICBjaGVja0NvbXBpbGVyRXJyb3Io
Ilt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVkaXJlY3RcIjp7XCJleHRl
bnNpb24tcGF0aFwiOlwiZG9lcy9ub3Qvc3RhcnQvd2l0aC9zbGFzaC9cIn19LFwidHJpZ2dlclwi
OntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsIENvbnRlbnRFeHRlbnNpb25FcnJv
cjo6SlNPTlJlZGlyZWN0RXh0ZW5zaW9uUGF0aERvZXNOb3RTdGFydFdpdGhTbGFzaCk7CisgICAg
Y2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixc
InJlZGlyZWN0XCI6e1widXJsXCI6XCJhYm91dDpibGFua1wifX0sXCJ0cmlnZ2VyXCI6e1widXJs
LWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09O
UmVkaXJlY3RVUkxTY2hlbWVOb3RBbGxvd2VkLCB7IHsgIm5vdC1hYm91dCIgfSB9KTsKKyAgICBj
aGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwi
cmVkaXJlY3RcIjp7XCJ1cmxcIjpcImFib3V0OmJsYW5rXCJ9fSxcInRyaWdnZXJcIjp7XCJ1cmwt
ZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCB7IH0sIHsgeyAiYWJvdXQiIH0gfSk7CisgICAg
Y2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixc
InJlZGlyZWN0XCI6e1widXJsXCI6XCJodHRwczovLzEyNy4uMS9cIn19LFwidHJpZ2dlclwiOntc
InVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6
SlNPTlJlZGlyZWN0VVJMSW52YWxpZCwgeyB7ICJodHRwcyIgfSB9KTsKKyAgICBjaGVja0NvbXBp
bGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVkaXJlY3Rc
Ijp7XCJ1cmxcIjpcImFib3V0OmJsYW5rXCJ9fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6
XCJ3ZWJraXQub3JnXCJ9fV0iLCB7IH0sIHsgeyAiYWJvdXQiIH0gfSk7CisgICAgY2hlY2tDb21w
aWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixcInJlZGlyZWN0
XCI6e1widHJhbnNmb3JtXCI6e1wicG9ydFwiOlwibm90IGEgbnVtYmVyXCJ9fX0sXCJ0cmlnZ2Vy
XCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwgQ29udGVudEV4dGVuc2lvbkVy
cm9yOjpKU09OUmVkaXJlY3RJbnZhbGlkUG9ydCk7CisgICAgY2hlY2tDb21waWxlckVycm9yKCJb
e1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixcInJlZGlyZWN0XCI6e1widHJhbnNm
b3JtXCI6e1wicG9ydFwiOlwiNjU1MzZcIn19fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6
XCJ3ZWJraXQub3JnXCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdElu
dmFsaWRQb3J0KTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBl
XCI6XCJyZWRpcmVjdFwiLFwicmVkaXJlY3RcIjp7XCJ0cmFuc2Zvcm1cIjp7XCJxdWVyeVwiOlwi
bm8tcXVlc3Rpb24tbWFya1wifX19LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtp
dC5vcmdcIn19XSIsIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTlJlZGlyZWN0SW52YWxpZFF1
ZXJ5KTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJy
ZWRpcmVjdFwiLFwicmVkaXJlY3RcIjp7XCJ0cmFuc2Zvcm1cIjp7XCJmcmFnbWVudFwiOlwibm8t
bnVtYmVyLXNpZ25cIn19fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3Jn
XCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdEludmFsaWRGcmFnbWVu
dCk7CisgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVk
aXJlY3RcIixcInJlZGlyZWN0XCI6e1widHJhbnNmb3JtXCI6e1wicG9ydFwiOlwiNjU1MzVcIn19
fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCB7IH0pOwor
ICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0
XCIsXCJyZWRpcmVjdFwiOntcInRyYW5zZm9ybVwiOntcInBvcnRcIjpcIlwifX19LFwidHJpZ2dl
clwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsIHsgfSk7CiAgICAgY2hlY2tD
b21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixcInJlZGly
ZWN0XCI6e1wiZXh0ZW5zaW9uLXBhdGhcIjpcIi9kb2VzL3N0YXJ0L3dpdGgvc2xhc2gvXCJ9fSxc
InRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCB7IH0pOwotICAg
IGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIs
XCJyZWRpcmVjdFwiOntcInRyYW5zZm9ybVwiOntcInNjaGVtZVwiOlwiYWJvdXRcIn19fSxcInRy
aWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCBDb250ZW50RXh0ZW5z
aW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTFNjaGVtZU5vdEFsbG93ZWQpOwotICAgIGNoZWNrQ29t
cGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRpcmVj
dFwiOntcInRyYW5zZm9ybVwiOntcInNjaGVtZVwiOlwiYWJvdXRcIn19fSxcInRyaWdnZXJcIjp7
XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCB7IH0sIHsgImFib3V0IiB9KTsKKyAg
ICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwi
LFwicmVkaXJlY3RcIjp7XCJ0cmFuc2Zvcm1cIjp7XCJzY2hlbWVcIjpcImFib3V0XCJ9fX0sXCJ0
cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwgQ29udGVudEV4dGVu
c2lvbkVycm9yOjpKU09OUmVkaXJlY3RVUkxTY2hlbWVOb3RBbGxvd2VkLCB7IHsgIm5vdC1hYm91
dCIgfSB9KTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6
XCJyZWRpcmVjdFwiLFwicmVkaXJlY3RcIjp7XCJ0cmFuc2Zvcm1cIjp7XCJzY2hlbWVcIjpcIiFA
IyQlXCJ9fX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwg
Q29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RVUkxTY2hlbWVJbnZhbGlkKTsKKyAg
ICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwi
LFwicmVkaXJlY3RcIjp7XCJ0cmFuc2Zvcm1cIjp7XCJzY2hlbWVcIjpcIkFib3V0XCJ9fX0sXCJ0
cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwgeyB9LCB7IHsgImFi
b3V0IiB9IH0pOwogICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVc
IjpcIm1vZGlmeS1oZWFkZXJzXCIsXCJyZXF1ZXN0LWhlYWRlcnNcIjo1fSxcInRyaWdnZXJcIjp7
XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9uRXJyb3I6
OkpTT05Nb2RpZnlIZWFkZXJzTm90QXJyYXkpOwogICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tc
ImFjdGlvblwiOntcInR5cGVcIjpcIm1vZGlmeS1oZWFkZXJzXCIsXCJyZXF1ZXN0LWhlYWRlcnNc
IjpbNV19LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsIENv
bnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTk1vZGlmeUhlYWRlcnNJbmZvTm90QURpY3Rpb25hcnkp
OwogICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcIm1vZGlm
eS1oZWFkZXJzXCIsXCJyZXF1ZXN0LWhlYWRlcnNcIjpbe31dfSxcInRyaWdnZXJcIjp7XCJ1cmwt
ZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05N
b2RpZnlIZWFkZXJzTWlzc2luZ09wZXJhdGlvbik7CkBAIC0zMDI0LDExICszMDMzLDExIEBAIFRF
U1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgU2VyaWFsaXphdGlvbikKICAgICAgICAgImhvc3Qi
LAogICAgICAgICAicGFzc3dvcmQiLAogICAgICAgICB7IC8qIHBhdGggKi8gfSwKLSAgICAgICAg
InBvcnQiLAorICAgICAgICAxMjMsCiAgICAgICAgIHsgLyogcXVlcnkgKi8gfSwKICAgICAgICAg
InNjaGVtZSIsCiAgICAgICAgICJ1c2VybmFtZSIKLSAgICB9IH0gfSwgNzUpOworICAgIH0gfSB9
LCA3MCk7CiAgICAgY2hlY2tSZWRpcmVjdEFjdGlvblNlcmlhbGl6YXRpb24oeyB7IFJlZGlyZWN0
QWN0aW9uOjpVUkxUcmFuc2Zvcm1BY3Rpb24geyB7IH0sIHsgfSwgeyB9LCB7IH0sIHsgfSwgeyAi
cXVlcnkiIH0sIHsgfSwgeyB9IH0gfSB9LCAyMCk7CiAgICAgY2hlY2tSZWRpcmVjdEFjdGlvblNl
cmlhbGl6YXRpb24oeyB7IFJlZGlyZWN0QWN0aW9uOjpVUkxUcmFuc2Zvcm1BY3Rpb24geyB7IH0s
IHsgfSwgeyB9LCB7IH0sIHsgfSwKICAgICAgICAgeyBSZWRpcmVjdEFjdGlvbjo6VVJMVHJhbnNm
b3JtQWN0aW9uOjpRdWVyeVRyYW5zZm9ybSB7IHsgeyAia2V5MSIsIGZhbHNlLCAidmFsdWUxIiB9
LCB7ICJrZXnwn5KpIiwgZmFsc2UsICJ2YWx1ZTIiIH0gfSwgeyAidGVzdFN0cmluZzEiLCAidGVz
dFN0cmluZzIiIH0gfSB9LCB7IH0sIHsgfSwKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0gYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlLm1t
CmluZGV4IDE1MGJjNzA4ODBmMDE4MDA0NTBkMmYzZjRiMDIzNTE0ZGU0YjNiMjQuLmM5NjQ2ZjJk
ZjRkYmZlYWZiZmIyYzhjYmIwZjAwODdlYWFlNTM1MTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0KKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0NvbnRlbnRFeHRlbnNp
b25TdG9yZS5tbQpAQCAtMjgsOCArMjgsMTAgQEAKIAogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRp
ZXMuaCIKICNpbXBvcnQgIlRlc3QuaCIKKyNpbXBvcnQgIlRlc3RVUkxTY2hlbWVIYW5kbGVyLmgi
CiAjaW1wb3J0IDxXZWJLaXQvV0tDb250ZW50UnVsZUxpc3QuaD4KICNpbXBvcnQgPFdlYktpdC9X
S0NvbnRlbnRSdWxlTGlzdFN0b3JlUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2VicGFn
ZVByZWZlcmVuY2VzUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyQ29udGVudEZpbHRlci5oPgog
I2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgpAQCAtNDc0LDMgKzQ3NiwyNzQgQEAgVEVTVF9GKFdL
Q29udGVudFJ1bGVMaXN0U3RvcmVUZXN0LCBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlU2Vs
ZWN0b3JzKQogICAgIH1dOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUxvb2tp
bmdVcCk7CiB9CisKK3N0YXRpYyBSZXRhaW5QdHI8V0tDb250ZW50UnVsZUxpc3Q+IGNvbXBpbGVD
b250ZW50UnVsZUxpc3QoY29uc3QgY2hhcioganNvbiwgTlNTdHJpbmcgKmlkZW50aWZpZXIgPSBA
InRlc3RpZGVudGlmaWVyIikKK3sKKyAgICBbW1dLQ29udGVudFJ1bGVMaXN0U3RvcmUgZGVmYXVs
dFN0b3JlXSBfcmVtb3ZlQWxsQ29udGVudFJ1bGVMaXN0c107CisKKyAgICBfX2Jsb2NrIFJldGFp
blB0cjxXS0NvbnRlbnRSdWxlTGlzdD4gbGlzdDsKKyAgICBbW1dLQ29udGVudFJ1bGVMaXN0U3Rv
cmUgZGVmYXVsdFN0b3JlXSBfY29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6QCJ0
ZXN0aWRlbnRpZmllciIgZW5jb2RlZENvbnRlbnRSdWxlTGlzdDpbTlNTdHJpbmcgc3RyaW5nV2l0
aEZvcm1hdDpAIiVzIiwganNvbl0gYWxsb3dlZFJlZGlyZWN0U2NoZW1lczpbTlNTZXQgc2V0V2l0
aE9iamVjdHM6QCJ0ZXN0c2NoZW1lIiwgQCJvdGhlcnRlc3RzY2hlbWUiLCBuaWxdIGNvbXBsZXRp
b25IYW5kbGVyOl4oV0tDb250ZW50UnVsZUxpc3QgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsK
KyAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOworICAgICAgICBsaXN0ID0gZmlsdGVyOworICAg
IH1dOworICAgIHdoaWxlICghbGlzdCkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3Bp
blJ1bkxvb3AoKTsKKworICAgIHJldHVybiBsaXN0OworfQorCitzdGF0aWMgUmV0YWluUHRyPFRl
c3ROYXZpZ2F0aW9uRGVsZWdhdGU+IG5hdmlnYXRpb25EZWxlZ2F0ZUFsbG93aW5nQWN0aXZlQWN0
aW9uc09uVGVzdEhvc3QoKQoreworICAgIHN0YXRpYyBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhb
VGVzdE5hdmlnYXRpb25EZWxlZ2F0ZSBuZXddKTsKKyAgICBkZWxlZ2F0ZS5nZXQoKS5kZWNpZGVQ
b2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uV2l0aFByZWZlcmVuY2VzID0gXihXS05hdmlnYXRpb25B
Y3Rpb24gKiwgV0tXZWJwYWdlUHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzLCB2b2lkICheZGVjaXNp
b25IYW5kbGVyKShXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3ksIFdLV2VicGFnZVByZWZlcmVuY2Vz
ICopKSB7CisgICAgICAgIHByZWZlcmVuY2VzLl9hY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25z
UGF0dGVybnMgPSBbTlNTZXQgc2V0V2l0aE9iamVjdDpAIio6Ly90ZXN0aG9zdC8qIl07CisgICAg
ICAgIGRlY2lzaW9uSGFuZGxlcihXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3lBbGxvdywgcHJlZmVy
ZW5jZXMpOworICAgIH07CisgICAgcmV0dXJuIGRlbGVnYXRlOworfQorCitURVNUX0YoV0tDb250
ZW50UnVsZUxpc3RTdG9yZVRlc3QsIE1vZGlmeUhlYWRlcnMpCit7CisgICAgYXV0byBsaXN0ID0g
Y29tcGlsZUNvbnRlbnRSdWxlTGlzdChSIkpTT04oCisgICAgICAgIFsgeworICAgICAgICAgICAg
ImFjdGlvbiI6IHsgInR5cGUiOiAibW9kaWZ5LWhlYWRlcnMiLCAicmVxdWVzdC1oZWFkZXJzIjog
WyB7CisgICAgICAgICAgICAgICAgIm9wZXJhdGlvbiI6ICJzZXQiLAorICAgICAgICAgICAgICAg
ICJoZWFkZXIiOiAidGVzdGtleSIsCisgICAgICAgICAgICAgICAgInZhbHVlIjogInRlc3R2YWx1
ZSIKKyAgICAgICAgICAgIH0gXSB9LAorICAgICAgICAgICAgInRyaWdnZXIiOiB7ICJ1cmwtZmls
dGVyIjogInRlc3RzY2hlbWUiIH0KKyAgICAgICAgfSwgeworICAgICAgICAgICAgImFjdGlvbiI6
IHsgInR5cGUiOiAibW9kaWZ5LWhlYWRlcnMiLCAicmVxdWVzdC1oZWFkZXJzIjogWyB7CisgICAg
ICAgICAgICAgICAgIm9wZXJhdGlvbiI6ICJyZW1vdmUiLAorICAgICAgICAgICAgICAgICJoZWFk
ZXIiOiAiQWNjZXB0IgorICAgICAgICAgICAgfSBdIH0sCisgICAgICAgICAgICAidHJpZ2dlciI6
IHsgInVybC1maWx0ZXIiOiAidGVzdHNjaGVtZSIgfQorICAgICAgICB9LCB7CisgICAgICAgICAg
ICAiYWN0aW9uIjogeyAidHlwZSI6ICJtb2RpZnktaGVhZGVycyIsICJyZXF1ZXN0LWhlYWRlcnMi
OiBbIHsKKyAgICAgICAgICAgICAgICAib3BlcmF0aW9uIjogImFwcGVuZCIsCisgICAgICAgICAg
ICAgICAgImhlYWRlciI6ICJDb250ZW50LVR5cGUiLAorICAgICAgICAgICAgICAgICJ2YWx1ZSI6
ICJNb2RpZmllZC1ieS10ZXN0IgorICAgICAgICAgICAgfSBdIH0sCisgICAgICAgICAgICAidHJp
Z2dlciI6IHsgInVybC1maWx0ZXIiOiAidGVzdHNjaGVtZSIgfQorICAgICAgICB9IF0KKyAgICAp
SlNPTiIpOworCisgICAgX19ibG9jayBib29sIHJlY2VpdmVkQWxsUmVxdWVzdHMgeyBmYWxzZSB9
OworICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW1Rlc3RVUkxTY2hlbWVIYW5kbGVyIG5ld10p
OworICAgIGhhbmRsZXIuZ2V0KCkuc3RhcnRVUkxTY2hlbWVUYXNrSGFuZGxlciA9IF4oV0tXZWJW
aWV3ICosIGlkIDxXS1VSTFNjaGVtZVRhc2s+IHRhc2spIHsKKyAgICAgICAgTlNTdHJpbmcgKnBh
dGggPSB0YXNrLnJlcXVlc3QuVVJMLnBhdGg7CisgICAgICAgIE5TRGljdGlvbmFyeTxOU1N0cmlu
ZyAqLCBOU1N0cmluZyAqPiAqZmllbGRzID0gW3Rhc2sucmVxdWVzdCBhbGxIVFRQSGVhZGVyRmll
bGRzXTsKKyAgICAgICAgaWYgKFtwYXRoIGlzRXF1YWxUb1N0cmluZzpAIi9tYWluLmh0bWwiXSkg
eworICAgICAgICAgICAgRVhQRUNUX1dLX1NUUkVRKGZpZWxkc1tAIkNvbnRlbnQtVHlwZSJdLCAi
TW9kaWZpZWQtYnktdGVzdCIpOworICAgICAgICAgICAgRVhQRUNUX1dLX1NUUkVRKGZpZWxkc1tA
InRlc3RrZXkiXSwgInRlc3R2YWx1ZSIpOworICAgICAgICAgICAgRVhQRUNUX05VTEwoZmllbGRz
W0AiQWNjZXB0Il0pOworICAgICAgICAgICAgcmV0dXJuIHJlc3BvbmQodGFzaywgIjxpZnJhbWUg
c3JjPScvL290aGVyaG9zdC9mcmFtZS5odG1sJz48L2lmcmFtZT4iKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoW3BhdGggaXNFcXVhbFRvU3RyaW5nOkAiL2ZyYW1lLmh0bWwiXSkgeworICAgICAg
ICAgICAgRVhQRUNUX05VTEwoZmllbGRzW0AiQ29udGVudC1UeXBlIl0pOworICAgICAgICAgICAg
RVhQRUNUX05VTEwoZmllbGRzW0AidGVzdGtleSJdKTsKKyAgICAgICAgICAgIEVYUEVDVF9OT1Rf
TlVMTChmaWVsZHNbQCJBY2NlcHQiXSk7CisgICAgICAgICAgICByZXR1cm4gcmVzcG9uZCh0YXNr
LCAiPHNjcmlwdD5mZXRjaCgnLy90ZXN0aG9zdC9mZXRjaC50eHQnLHtoZWFkZXJzOiB7J0NvbnRl
bnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ319KTwvc2NyaXB0PiIpOworICAgICAgICB9Cisg
ICAgICAgIGlmIChbcGF0aCBpc0VxdWFsVG9TdHJpbmc6QCIvZmV0Y2gudHh0Il0pIHsKKyAgICAg
ICAgICAgIEVYUEVDVF9XS19TVFJFUShmaWVsZHNbQCJDb250ZW50LVR5cGUiXSwgImFwcGxpY2F0
aW9uL2pzb247IE1vZGlmaWVkLWJ5LXRlc3QiKTsKKyAgICAgICAgICAgIEVYUEVDVF9XS19TVFJF
UShmaWVsZHNbQCJ0ZXN0a2V5Il0sICJ0ZXN0dmFsdWUiKTsKKyAgICAgICAgICAgIEVYUEVDVF9O
VUxMKGZpZWxkc1tAIkFjY2VwdCJdKTsKKyAgICAgICAgICAgIHJlY2VpdmVkQWxsUmVxdWVzdHMg
PSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlc3BvbmQodGFzaywgIiIpOworICAgICAgICB9
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH07CisKKyAgICBhdXRvIGNvbmZp
Z3VyYXRpb24gPSBhZG9wdE5TKFtXS1dlYlZpZXdDb25maWd1cmF0aW9uIG5ld10pOworICAgIFtb
Y29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZENvbnRlbnRSdWxlTGlzdDps
aXN0LmdldCgpXTsKKyAgICBbY29uZmlndXJhdGlvbiBzZXRVUkxTY2hlbWVIYW5kbGVyOmhhbmRs
ZXIuZ2V0KCkgZm9yVVJMU2NoZW1lOkAidGVzdHNjaGVtZSJdOworICAgIGF1dG8gd2ViVmlldyA9
IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNaZXJvUmVjdCBjb25m
aWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICB3ZWJWaWV3LmdldCgpLm5hdmln
YXRpb25EZWxlZ2F0ZSA9IG5hdmlnYXRpb25EZWxlZ2F0ZUFsbG93aW5nQWN0aXZlQWN0aW9uc09u
VGVzdEhvc3QoKS5nZXQoKTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0
IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAidGVzdHNjaGVtZTovL3Rlc3Ro
b3N0L21haW4uaHRtbCJdXV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZl
ZEFsbFJlcXVlc3RzKTsKK30KKworVEVTVF9GKFdLQ29udGVudFJ1bGVMaXN0U3RvcmVUZXN0LCBS
ZWRpcmVjdCkKK3sKKyAgICBhdXRvIGxpc3QgPSBjb21waWxlQ29udGVudFJ1bGVMaXN0KFIiSlNP
TigKKyAgICAgICAgWyB7CisgICAgICAgICAgICAiYWN0aW9uIjogeyAidHlwZSI6ICJyZWRpcmVj
dCIsICJyZWRpcmVjdCI6IHsKKyAgICAgICAgICAgICAgICAidXJsIjogIm90aGVydGVzdHNjaGVt
ZTovL25vdC10ZXN0aG9zdC8xLXJlZGlyZWN0ZWQudHh0IgorICAgICAgICAgICAgfSB9LAorICAg
ICAgICAgICAgInRyaWdnZXIiOiB7ICJ1cmwtZmlsdGVyIjogIjEudHh0IiB9CisgICAgICAgIH0s
IHsKKyAgICAgICAgICAgICJhY3Rpb24iOiB7ICJ0eXBlIjogInJlZGlyZWN0IiwgInJlZGlyZWN0
IjogeyAidHJhbnNmb3JtIjogeworICAgICAgICAgICAgICAgICJwb3J0IjogIjEyMyIsCisgICAg
ICAgICAgICAgICAgImlnbm9yZWQtY29tbWVudCI6ICIxMjMgaXMgYSBmb3JiaWRkZW4gcG9ydCwg
c28gdGhpcyBVUkwgaXMgbm90IHNlZW4gYnkgdGhlIFdLVVJMU2NoZW1lSGFuZGxlci4iCisgICAg
ICAgICAgICB9IH0gfSwKKyAgICAgICAgICAgICJ0cmlnZ2VyIjogeyAidXJsLWZpbHRlciI6ICIy
LnR4dCIgfQorICAgICAgICB9LCB7CisgICAgICAgICAgICAiYWN0aW9uIjogeyAidHlwZSI6ICJy
ZWRpcmVjdCIsICJyZWRpcmVjdCI6IHsgInRyYW5zZm9ybSI6IHsKKyAgICAgICAgICAgICAgICAi
aG9zdCI6ICJuZXdob3N0IiwKKyAgICAgICAgICAgICAgICAidXNlcm5hbWUiOiAibmV3dXNlcm5h
bWUiLAorICAgICAgICAgICAgICAgICJwb3J0IjogIjQ0MyIKKyAgICAgICAgICAgIH0gfSB9LAor
ICAgICAgICAgICAgInRyaWdnZXIiOiB7ICJ1cmwtZmlsdGVyIjogIjMudHh0IiB9CisgICAgICAg
IH0sIHsKKyAgICAgICAgICAgICJhY3Rpb24iOiB7ICJ0eXBlIjogInJlZGlyZWN0IiwgInJlZGly
ZWN0IjogeyAidHJhbnNmb3JtIjogeworICAgICAgICAgICAgICAgICJwb3J0IjogIiIsCisgICAg
ICAgICAgICAgICAgInNjaGVtZSI6ICJvdGhlcnRlc3RzY2hlbWUiLAorICAgICAgICAgICAgICAg
ICJxdWVyeSI6ICI/a2V5PXZhbHVlIgorICAgICAgICAgICAgfSB9IH0sCisgICAgICAgICAgICAi
dHJpZ2dlciI6IHsgInVybC1maWx0ZXIiOiAiNC50eHQiIH0KKyAgICAgICAgfSwgeworICAgICAg
ICAgICAgImFjdGlvbiI6IHsgInR5cGUiOiAicmVkaXJlY3QiLCAicmVkaXJlY3QiOiB7ICJ0cmFu
c2Zvcm0iOiB7CisgICAgICAgICAgICAgICAgInBhc3N3b3JkIjogInRlc3RwYXNzd29yZCIsCisg
ICAgICAgICAgICAgICAgInF1ZXJ5IjogIiIsCisgICAgICAgICAgICAgICAgImZyYWdtZW50Ijog
IiNmcmFnbWVudC10by1iZS1hZGRlZCIKKyAgICAgICAgICAgIH0gfSB9LAorICAgICAgICAgICAg
InRyaWdnZXIiOiB7ICJ1cmwtZmlsdGVyIjogIjUudHh0IiB9CisgICAgICAgIH0sIHsKKyAgICAg
ICAgICAgICJhY3Rpb24iOiB7ICJ0eXBlIjogInJlZGlyZWN0IiwgInJlZGlyZWN0IjogeyAidHJh
bnNmb3JtIjogeworICAgICAgICAgICAgICAgICJwYXNzd29yZCI6ICJ0ZXN0cGFzc3dvcmQiLAor
ICAgICAgICAgICAgICAgICJmcmFnbWVudCI6ICIiCisgICAgICAgICAgICB9IH0gfSwKKyAgICAg
ICAgICAgICJ0cmlnZ2VyIjogeyAidXJsLWZpbHRlciI6ICI2LnR4dCIgfQorICAgICAgICB9LCB7
CisgICAgICAgICAgICAiYWN0aW9uIjogeyAidHlwZSI6ICJyZWRpcmVjdCIsICJyZWRpcmVjdCI6
IHsgInRyYW5zZm9ybSI6IHsKKyAgICAgICAgICAgICAgICAicXVlcnkiOiAiPyIsCisgICAgICAg
ICAgICAgICAgImZyYWdtZW50IjogIiMiCisgICAgICAgICAgICB9IH0gfSwKKyAgICAgICAgICAg
ICJ0cmlnZ2VyIjogeyAidXJsLWZpbHRlciI6ICI3LnR4dCIgfQorICAgICAgICB9LCB7CisgICAg
ICAgICAgICAiYWN0aW9uIjogeyAidHlwZSI6ICJyZWRpcmVjdCIsICJyZWRpcmVjdCI6IHsgInRy
YW5zZm9ybSI6IHsKKyAgICAgICAgICAgICAgICAicXVlcnktdHJhbnNmb3JtIjogeworICAgICAg
ICAgICAgICAgICAgICAicmVtb3ZlLXBhcmFtZXRlcnMiOiBbICJwYXJhbWV0ZXItdG8tcmVtb3Zl
IiBdLAorICAgICAgICAgICAgICAgICAgICAiYWRkLW9yLXJlcGxhY2UtcGFyYW1ldGVycyI6IFsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHsgImtleSI6ICJrZXktdG8tYWRkIiwgInZhbHVlIjog
InZhbHVlLXRvLWFkZCIgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgImtleSI6ICJrZXkt
dG8tcmVwbGFjZS1vbmx5IiwgInZhbHVlIjogInZhbHVlLXRvLXJlcGxhY2Utb25seSIsICJyZXBs
YWNlLW9ubHkiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7ICJrZXkiOiAia2V5
LXRvLXJlcGxhY2Utb25seS1idXQtbm90LWZvdW5kIiwgInZhbHVlIjogInZhbHVlLXRvLXJlcGxh
Y2Utb25seS1idXQtbm90LWZvdW5kIiwgInJlcGxhY2Utb25seSI6IHRydWUgfQorICAgICAgICAg
ICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSB9IH0sCisgICAg
ICAgICAgICAidHJpZ2dlciI6IHsgInVybC1maWx0ZXIiOiAiOC50eHQiIH0KKyAgICAgICAgfSBd
CisgICAgKUpTT04iKTsKKworICAgIF9fYmxvY2sgYm9vbCByZWNlaXZlZEFsbFJlcXVlc3RzIHsg
ZmFsc2UgfTsKKyAgICBfX2Jsb2NrIGF1dG8gdXJscyA9IGFkb3B0TlMoW05TTXV0YWJsZUFycmF5
IG5ld10pOworICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW1Rlc3RVUkxTY2hlbWVIYW5kbGVy
IG5ld10pOworICAgIGhhbmRsZXIuZ2V0KCkuc3RhcnRVUkxTY2hlbWVUYXNrSGFuZGxlciA9IF4o
V0tXZWJWaWV3ICosIGlkIDxXS1VSTFNjaGVtZVRhc2s+IHRhc2spIHsKKyAgICAgICAgTlNVUkwg
KnVybCA9IHRhc2sucmVxdWVzdC5VUkw7CisgICAgICAgIFt1cmxzIGFkZE9iamVjdDp1cmxdOwor
ICAgICAgICBOU1N0cmluZyAqcGF0aCA9IHVybC5wYXRoOworICAgICAgICBpZiAoW3BhdGggaXNF
cXVhbFRvU3RyaW5nOkAiL21haW4uaHRtbCJdKSB7CisgICAgICAgICAgICByZXR1cm4gcmVzcG9u
ZCh0YXNrLCBSIkhUTUwoCisgICAgICAgICAgICAgICAgPHNjcmlwdD4KKyAgICAgICAgICAgICAg
ICAgICAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hTdWJyZXNvdXJjZXMoKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeyBhd2FpdCBmZXRjaCgnMS50eHQn
KSB9IGNhdGNoKGUpIHsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7IGF3YWl0IGZl
dGNoKCcvL25vdC10ZXN0aG9zdC1zaG91bGQtbm90LXRyaWdnZXItYWN0aW9uLzIudHh0Jywge21v
ZGU6J25vLWNvcnMnfSkgfSBjYXRjaChlKSB7IH07CisgICAgICAgICAgICAgICAgICAgICAgICB0
cnkgeyBhd2FpdCBmZXRjaCgnLy90ZXN0aG9zdC8yLnR4dCcpIH0gY2F0Y2goZSkgeyB9OworICAg
ICAgICAgICAgICAgICAgICAgICAgdHJ5IHsgYXdhaXQgZmV0Y2goJy8zLnR4dD9xdWVyeS1zaG91
bGQtbm90LWJlLXJlbW92ZWQnKSB9IGNhdGNoKGUpIHsgfTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRyeSB7IGF3YWl0IGZldGNoKCcvL3Rlc3Rob3N0OjgwLzQudHh0I2ZyYWdtZW50LXNob3Vs
ZC1ub3QtYmUtcmVtb3ZlZCcpIH0gY2F0Y2goZSkgeyB9OworICAgICAgICAgICAgICAgICAgICAg
ICAgdHJ5IHsgYXdhaXQgZmV0Y2goJzUudHh0P3F1ZXJ5LXNob3VsZC1iZS1yZW1vdmVkJykgfSBj
YXRjaChlKSB7IH07CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeyBhd2FpdCBmZXRjaCgn
Ni50eHQjZnJhZ21lbnQtc2hvdWxkLWJlLXJlbW92ZWQnKSB9IGNhdGNoKGUpIHsgfTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRyeSB7IGF3YWl0IGZldGNoKCc3LnR4dCcpIH0gY2F0Y2goZSkg
eyB9OworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsgYXdhaXQgZmV0Y2goJzgudHh0P2tl
eS10by1yZXBsYWNlLW9ubHk9cHJlLXJlcGxhY2VtZW50LXZhbHVlJykgfSBjYXRjaChlKSB7IH07
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZmV0Y2hTdWJyZXNv
dXJjZXMoKTsKKyAgICAgICAgICAgICAgICA8L3NjcmlwdD4KKyAgICAgICAgICAgIClIVE1MIik7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKFtwYXRoIGlzRXF1YWxUb1N0cmluZzpAIi84LnR4dCJd
KQorICAgICAgICAgICAgcmVjZWl2ZWRBbGxSZXF1ZXN0cyA9IHRydWU7CisgICAgICAgIHJlc3Bv
bmQodGFzaywgIiIpOworICAgIH07CisKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5T
KFtXS1dlYlZpZXdDb25maWd1cmF0aW9uIG5ld10pOworICAgIFtbY29uZmlndXJhdGlvbiB1c2Vy
Q29udGVudENvbnRyb2xsZXJdIGFkZENvbnRlbnRSdWxlTGlzdDpsaXN0LmdldCgpXTsKKyAgICBb
Y29uZmlndXJhdGlvbiBzZXRVUkxTY2hlbWVIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgZm9yVVJMU2No
ZW1lOkAidGVzdHNjaGVtZSJdOworICAgIFtjb25maWd1cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRs
ZXI6aGFuZGxlci5nZXQoKSBmb3JVUkxTY2hlbWU6QCJvdGhlcnRlc3RzY2hlbWUiXTsKKyAgICBh
dXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5T
WmVyb1JlY3QgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CisgICAgd2ViVmll
dy5nZXQoKS5uYXZpZ2F0aW9uRGVsZWdhdGUgPSBuYXZpZ2F0aW9uRGVsZWdhdGVBbGxvd2luZ0Fj
dGl2ZUFjdGlvbnNPblRlc3RIb3N0KCkuZ2V0KCk7CisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6
W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAInRlc3Rz
Y2hlbWU6Ly90ZXN0aG9zdC9tYWluLmh0bWwiXV1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmcmVjZWl2ZWRBbGxSZXF1ZXN0cyk7CisKKyAgICBWZWN0b3I8Y29uc3QgY2hhcio+IGV4
cGVjdGVkUmVxdWVzdGVkVVJMcyB7CisgICAgICAgICJ0ZXN0c2NoZW1lOi8vdGVzdGhvc3QvbWFp
bi5odG1sIiwKKyAgICAgICAgIm90aGVydGVzdHNjaGVtZTovL25vdC10ZXN0aG9zdC8xLXJlZGly
ZWN0ZWQudHh0IiwKKyAgICAgICAgInRlc3RzY2hlbWU6Ly9ub3QtdGVzdGhvc3Qtc2hvdWxkLW5v
dC10cmlnZ2VyLWFjdGlvbi8yLnR4dCIsCisgICAgICAgICJ0ZXN0c2NoZW1lOi8vbmV3dXNlcm5h
bWVAbmV3aG9zdDo0NDMvMy50eHQ/cXVlcnktc2hvdWxkLW5vdC1iZS1yZW1vdmVkIiwKKyAgICAg
ICAgIm90aGVydGVzdHNjaGVtZTovL3Rlc3Rob3N0LzQudHh0P2tleT12YWx1ZSNmcmFnbWVudC1z
aG91bGQtbm90LWJlLXJlbW92ZWQiLAorICAgICAgICAidGVzdHNjaGVtZTovLzp0ZXN0cGFzc3dv
cmRAdGVzdGhvc3QvNS50eHQjZnJhZ21lbnQtdG8tYmUtYWRkZWQiLAorICAgICAgICAidGVzdHNj
aGVtZTovLzp0ZXN0cGFzc3dvcmRAdGVzdGhvc3QvNi50eHQiLAorICAgICAgICAidGVzdHNjaGVt
ZTovL3Rlc3Rob3N0LzcudHh0PyMiLAorICAgICAgICAidGVzdHNjaGVtZTovL3Rlc3Rob3N0Lzgu
dHh0P2tleS10by1yZXBsYWNlLW9ubHk9dmFsdWUtdG8tcmVwbGFjZS1vbmx5JmtleS10by1hZGQ9
dmFsdWUtdG8tYWRkIiwKKyAgICB9OworICAgIEVYUEVDVF9FUShleHBlY3RlZFJlcXVlc3RlZFVS
THMuc2l6ZSgpLCBbdXJscyBjb3VudF0pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZXhw
ZWN0ZWRSZXF1ZXN0ZWRVUkxzLnNpemUoKTsgaSsrKQorICAgICAgICBFWFBFQ1RfV0tfU1RSRVEo
ZXhwZWN0ZWRSZXF1ZXN0ZWRVUkxzW2ldLCBbW3VybHMgb2JqZWN0QXRJbmRleDppXSBhYnNvbHV0
ZVN0cmluZ10pOworfQorCitURVNUX0YoV0tDb250ZW50UnVsZUxpc3RTdG9yZVRlc3QsIE51bGxQ
YXR0ZXJuU2V0KQoreworICAgIGF1dG8gbGlzdCA9IGNvbXBpbGVDb250ZW50UnVsZUxpc3QoUiJK
U09OKAorICAgICAgICBbIHsKKyAgICAgICAgICAgICJhY3Rpb24iOiB7ICJ0eXBlIjogInJlZGly
ZWN0IiwgInJlZGlyZWN0IjogeworICAgICAgICAgICAgICAgICJ1cmwiOiAidGVzdHNjaGVtZTov
L3Rlc3Rob3N0L21haW4tcmVkaXJlY3RlZC5odG1sIgorICAgICAgICAgICAgfSB9LAorICAgICAg
ICAgICAgInRyaWdnZXIiOiB7ICJ1cmwtZmlsdGVyIjogIm1haW4uaHRtbCIgfQorICAgICAgICB9
IF0KKyAgICApSlNPTiIpOworCisgICAgX19ibG9jayBzdGQ6Om9wdGlvbmFsPGJvb2w+IHJlZGly
ZWN0ZWRSZXN1bHQ7CisgICAgYXV0byBoYW5kbGVyID0gYWRvcHROUyhbVGVzdFVSTFNjaGVtZUhh
bmRsZXIgbmV3XSk7CisgICAgaGFuZGxlci5nZXQoKS5zdGFydFVSTFNjaGVtZVRhc2tIYW5kbGVy
ID0gXihXS1dlYlZpZXcgKiwgaWQgPFdLVVJMU2NoZW1lVGFzaz4gdGFzaykgeworICAgICAgICBO
U1N0cmluZyAqcGF0aCA9IHRhc2sucmVxdWVzdC5VUkwucGF0aDsKKyAgICAgICAgaWYgKFtwYXRo
IGlzRXF1YWxUb1N0cmluZzpAIi9tYWluLmh0bWwiXSkKKyAgICAgICAgICAgIHJlZGlyZWN0ZWRS
ZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBFWFBFQ1RfV0tfU1RS
RVEocGF0aCwgIi9tYWluLXJlZGlyZWN0ZWQuaHRtbCIpOworICAgICAgICAgICAgcmVkaXJlY3Rl
ZFJlc3VsdCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmVzcG9uZCh0YXNrLCAiIik7Cisg
ICAgfTsKKworICAgIF9fYmxvY2sgZW51bSBjbGFzcyBEZWxlZ2F0ZUFjdGlvbiA6IHVpbnQ4X3Qg
eworICAgICAgICBBbGxvd0FsbCwKKyAgICAgICAgQWxsb3dOb25lLAorICAgICAgICBBbGxvd1Rl
c3RIb3N0LAorICAgIH0gZGVsZWdhdGVBY3Rpb247CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0
TlMoW1Rlc3ROYXZpZ2F0aW9uRGVsZWdhdGUgbmV3XSk7CisgICAgZGVsZWdhdGUuZ2V0KCkuZGVj
aWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbldpdGhQcmVmZXJlbmNlcyA9IF4oV0tOYXZpZ2F0
aW9uQWN0aW9uICosIFdLV2VicGFnZVByZWZlcmVuY2VzICpwcmVmZXJlbmNlcywgdm9pZCAoXmRl
Y2lzaW9uSGFuZGxlcikoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5LCBXS1dlYnBhZ2VQcmVmZXJl
bmNlcyAqKSkgeworICAgICAgICBFWFBFQ1RfTk9UX05VTEwocHJlZmVyZW5jZXMuX2FjdGl2ZUNv
bnRlbnRSdWxlTGlzdEFjdGlvbnNQYXR0ZXJucyk7CisgICAgICAgIEVYUEVDVF9FUShwcmVmZXJl
bmNlcy5fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5zLmNvdW50LCAwdSk7Cisg
ICAgICAgIHN3aXRjaCAoZGVsZWdhdGVBY3Rpb24pIHsKKyAgICAgICAgY2FzZSBEZWxlZ2F0ZUFj
dGlvbjo6QWxsb3dBbGw6CisgICAgICAgICAgICBwcmVmZXJlbmNlcy5fYWN0aXZlQ29udGVudFJ1
bGVMaXN0QWN0aW9uc1BhdHRlcm5zID0gbmlsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRGVsZWdhdGVBY3Rpb246OkFsbG93Tm9uZToKKyAgICAgICAgICAgIHByZWZlcmVuY2Vz
Ll9hY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMgPSBbTlNTZXQgc2V0XTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERlbGVnYXRlQWN0aW9uOjpBbGxvd1Rlc3RI
b3N0OgorICAgICAgICAgICAgcHJlZmVyZW5jZXMuX2FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlv
bnNQYXR0ZXJucyA9IFtOU1NldCBzZXRXaXRoT2JqZWN0OkAiKjovL3Rlc3Rob3N0LyoiXTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlY2lzaW9uSGFuZGxlcihXS05h
dmlnYXRpb25BY3Rpb25Qb2xpY3lBbGxvdywgcHJlZmVyZW5jZXMpOworICAgIH07CisKKyAgICBh
dXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtXS1dlYlZpZXdDb25maWd1cmF0aW9uIG5ld10p
OworICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZENvbnRlbnRS
dWxlTGlzdDpsaXN0LmdldCgpXTsKKyAgICBbY29uZmlndXJhdGlvbiBzZXRVUkxTY2hlbWVIYW5k
bGVyOmhhbmRsZXIuZ2V0KCkgZm9yVVJMU2NoZW1lOkAidGVzdHNjaGVtZSJdOworICAgIGF1dG8g
d2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNaZXJv
UmVjdCBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICB3ZWJWaWV3Lmdl
dCgpLm5hdmlnYXRpb25EZWxlZ2F0ZSA9IGRlbGVnYXRlLmdldCgpOworCisgICAgYXV0byBnZXRS
ZWRpcmVjdFJlc3VsdCA9IF4oRGVsZWdhdGVBY3Rpb24gYWN0aW9uKSB7CisgICAgICAgIGRlbGVn
YXRlQWN0aW9uID0gYWN0aW9uOworICAgICAgICByZWRpcmVjdGVkUmVzdWx0ID0gc3RkOjpudWxs
b3B0OworICAgICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RX
aXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAidGVzdHNjaGVtZTovL3Rlc3Rob3N0L21haW4u
aHRtbCJdXV07CisgICAgICAgIHdoaWxlICghcmVkaXJlY3RlZFJlc3VsdCkKKyAgICAgICAgICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CisgICAgICAgIHJldHVybiAqcmVk
aXJlY3RlZFJlc3VsdDsKKyAgICB9OworICAgIEVYUEVDVF9UUlVFKGdldFJlZGlyZWN0UmVzdWx0
KERlbGVnYXRlQWN0aW9uOjpBbGxvd0FsbCkpOworICAgIEVYUEVDVF9GQUxTRShnZXRSZWRpcmVj
dFJlc3VsdChEZWxlZ2F0ZUFjdGlvbjo6QWxsb3dOb25lKSk7CisgICAgRVhQRUNUX1RSVUUoZ2V0
UmVkaXJlY3RSZXN1bHQoRGVsZWdhdGVBY3Rpb246OkFsbG93VGVzdEhvc3QpKTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444567</attachid>
            <date>2021-11-17 13:51:52 -0800</date>
            <delta_ts>2021-11-17 14:31:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233268-20211117135151.patch</filename>
            <type>text/plain</type>
            <size>98793</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1OTUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmQzYjE2OTYxNWI4M2E0
ZDg1ZDhkMDMwNzRlYmYxZmJkMDUzMzc5MS4uYmI3NDYxMjFmODNjZjM0MWM0YzA4OTA4MmYxZDg2
Nzk2OGVlNmJkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDIxLTExLTE3ICBBbGV4
IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVt
ZW50IG1vc3Qgb2YgcmVkaXJlY3QgYW5kIG1vZGlmeS1oZWFkZXJzIGFjdGlvbiB0eXBlcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzMjY4CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpbXBsZW1l
bnRzIG1vZGlmeS1oZWFkZXJzIGFuZCByZWRpcmVjdCBhY3Rpb25zIGV4Y2VwdCBmb3IgZXh0ZW5z
aW9uLXBhdGggYW5kIHJlZ2V4LXN1YnN0aXR1dGlvbiB2YXJpYW50cyBvZiByZWRpcmVjdGluZywK
KyAgICAgICAgd2hpY2ggYXJlIGJpZyBlbm91Z2ggdG8gYmUgaW1wbGVtZW50ZWQgaW4gdGhlaXIg
b3duIHBhdGNoLiAgSW4gb3JkZXIgdG8gZW5hYmxlIHRoZXNlIGFjdGlvbnMsIHRoZSBXS0NvbnRl
bnRSdWxlTGlzdCBuZWVkcyB0bworICAgICAgICBiZSBjb21waWxlZCB3aXRoIG5ldyBTUEkgd2hl
cmUgeW91IHNwZWNpZnkgd2hpY2ggc2NoZW1lcyBhcmUgYWxsb3dlZCB0byBiZSByZWRpcmVjdGVk
IHRvLCBhbmQgU1BJIGluIFdLV2VicGFnZVByZWZlcmVuY2VzIGFsbG93cworICAgICAgICBhZGRp
dGlvbiBvZiBhIHNldCBvZiBwYXR0ZXJucyB0byBzcGVjaWZ5IHdoaWNoIFVSTHMgYXJlIGFsbG93
ZWQgdG8gYmUgbW9kaWZpZWQuICBBbiBlbXB0eSBzZXQgbWVhbnMgbm8gYWN0aXZlIGFjdGlvbnMg
YXJlIGFsbG93ZWQsCisgICAgICAgIHdoaWNoIGlzIHRoZSBkZWZhdWx0LCB3aGVyZWFzIGEgbnVs
bCBzZXQgbWVhbnMgYWxsIGFjdGl2ZSBhY3Rpb25zIGFyZSBhbGxvd2VkLgorCisgICAgICAgIEkg
YWxzbyBtYWRlIHRoZSBwYXJzZXIgYSBsaXR0bGUgYml0IHN0cmljdGVyLCBzdWNoIGFzIG9ubHkg
YWxsb3dpbmcgdmFsaWQgcG9ydHMsIHF1ZXJpZXMsIGFuZCBmcmFnbWVudHMuCisKKyAgICAgICAg
KiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHA6CisgICAgICAgICogY29u
dGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkFjdGlvbnMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6Ok1vZGlmeUhlYWRlcnNBY3Rpb246Om9wZXJhdG9yPT0g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Ok1vZGlmeUhlYWRl
cnNBY3Rpb246OmFwcGx5VG9SZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpNb2RpZnlIZWFkZXJzQWN0aW9uOjpNb2RpZnlIZWFkZXJJbmZvOjphcHBseVRvUmVx
dWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6UmVkaXJlY3RBY3Rp
b246OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpSZWRpcmVj
dEFjdGlvbjo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0
ZW5zaW9uczo6UmVkaXJlY3RBY3Rpb246OmFwcGx5VG9SZXF1ZXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpSZWRpcmVjdEFjdGlvbjo6VVJMVHJhbnNmb3JtQWN0aW9u
OjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6UmVkaXJlY3RB
Y3Rpb246OlVSTFRyYW5zZm9ybUFjdGlvbjo6c2VyaWFsaXplIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpSZWRpcmVjdEFjdGlvbjo6VVJMVHJhbnNmb3JtQWN0
aW9uOjpkZXNlcmlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6
UmVkaXJlY3RBY3Rpb246OlVSTFRyYW5zZm9ybUFjdGlvbjo6YXBwbHlUb1VSTCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6UmVkaXJlY3RBY3Rpb246OlVSTFRy
YW5zZm9ybUFjdGlvbjo6UXVlcnlUcmFuc2Zvcm06OmFwcGx5VG9VUkwgY29uc3QpOgorICAgICAg
ICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25BY3Rpb25zLmg6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VmFyaWFudEhhc2hlcjo6aGFzaCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VmVjdG9ySGFzaGVyOjpoYXNoKToKKyAg
ICAgICAgKFdURjo6RGVmYXVsdEhhc2g8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlJlZGly
ZWN0QWN0aW9uPjo6aGFzaCk6CisgICAgICAgIChXVEY6OkRlZmF1bHRIYXNoPFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpSZWRpcmVjdEFjdGlvbj46OmVxdWFsKToKKyAgICAgICAgKFdURjo6
RGVmYXVsdEhhc2g8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Ok1vZGlmeUhlYWRlcnNBY3Rp
b24+OjpoYXNoKToKKyAgICAgICAgKFdURjo6RGVmYXVsdEhhc2g8V2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6Ok1vZGlmeUhlYWRlcnNBY3Rpb24+OjplcXVhbCk6CisgICAgICAgICogY29udGVu
dGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpzZXJpYWxpemVBY3Rpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpjb21waWxlUnVsZUxpc3QpOgorICAgICAgICAqIGNvbnRl
bnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6Y29udGVudEV4dGVuc2lvbkVycm9yQ2F0ZWdvcnkpOgorICAg
ICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5oOgorICAgICAg
ICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmxvYWRBY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmxvYWRSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpsb2FkRW5jb2RlZFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpwYXJzZVJ1bGVMaXN0KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5z
aW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmg6CisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OnByb2Nlc3NDb250ZW50UnVs
ZUxpc3RzRm9yTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29u
dGVudEV4dGVuc2lvbnNCYWNrZW5kOjpwcm9jZXNzQ29udGVudFJ1bGVMaXN0c0ZvclBpbmdMb2Fk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjphcHBseVJlc3VsdHNUb1Jl
cXVlc3QpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRSdWxlTGlzdFJlc3Vs
dHMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRSdWxlTGlzdFJlc3VsdHM6OlN1bW1hcnk6
OmRlY29kZSk6CisgICAgICAgICogY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHA6CisgICAgICAg
ICogbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
TG9hZGVyOjpzZXRBY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OmFsbG93c0FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFj
dGlvbnNGb3JVUkwgY29uc3QpOgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpyZW1vdmVIVFRQSGVhZGVyRmllbGQp
OgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oOgorCiAy
MDIxLTExLTE3ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAg
ICAgIEFkZCBhIGhlbHBlciBjbGFzcyB0byBjb29yZGluYXRlIGJhdGNoIGFuYWx5c2lzIG9mIGlt
YWdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwppbmRleCBmOWMzYzVhODM0OGU4MWE4ZDY1N2JhMDczZTM3ZmRjZGE1MWZiNzRm
Li5jZWEzYTg3ODM5ZWM5MWY2OWIzN2M5NWVjNjgwZGQ0MDAzZTgxODNjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQ0IEBACisyMDIxLTExLTE3ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2Vu
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IG1vc3Qgb2YgcmVkaXJlY3QgYW5kIG1v
ZGlmeS1oZWFkZXJzIGFjdGlvbiB0eXBlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjMzMjY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZVBvbGljaWVzRGF0YS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVQb2xpY2llc0RhdGE6OmVuY29kZSBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVQb2xpY2llc0RhdGE6OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVQb2xpY2llc0RhdGE6OmFwcGx5VG9Eb2N1bWVudExvYWRlcik6CisgICAgICAgICog
U2hhcmVkL1dlYnNpdGVQb2xpY2llc0RhdGEuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQ
SUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNwcDoKKyAgICAgICAgKEFQSTo6Q29udGVudFJ1bGVMaXN0
U3RvcmU6Omxvb2t1cENvbnRlbnRSdWxlTGlzdCk6CisgICAgICAgIChBUEk6OkNvbnRlbnRSdWxl
TGlzdFN0b3JlOjpjb21waWxlQ29udGVudFJ1bGVMaXN0KToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9B
UElXZWJzaXRlUG9saWNpZXMuY3BwOgorICAgICAgICAoQVBJOjpXZWJzaXRlUG9saWNpZXM6OmNv
cHkgY29uc3QpOgorICAgICAgICAoQVBJOjpXZWJzaXRlUG9saWNpZXM6OmRhdGEpOgorICAgICAg
ICAoQVBJOjpXZWJzaXRlUG9saWNpZXM6On5XZWJzaXRlUG9saWNpZXMpOiBEZWxldGVkLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJV2Vic2l0ZVBvbGljaWVzLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9DL1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlZi5jcHA6CisgICAgICAg
IChXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVDb21waWxlKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0NvY29hL1dLQ29udGVudFJ1bGVMaXN0U3RvcmUubW06CisgICAgICAgICgtW1dLQ29u
dGVudFJ1bGVMaXN0U3RvcmUgY29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6ZW5j
b2RlZENvbnRlbnRSdWxlTGlzdDpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tD
b250ZW50UnVsZUxpc3RTdG9yZSBfY29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6
ZW5jb2RlZENvbnRlbnRSdWxlTGlzdDphbGxvd2VkUmVkaXJlY3RTY2hlbWVzOmNvbXBsZXRpb25I
YW5kbGVyOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRSdWxlTGlzdFN0b3JlIF9jb21waWxlQ29u
dGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmllcjplbmNvZGVkQ29udGVudFJ1bGVMaXN0OmNvbXBsZXRp
b25IYW5kbGVyOl0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tD
b250ZW50UnVsZUxpc3RTdG9yZVByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2VicGFnZVByZWZlcmVuY2VzLm1tOgorICAgICAgICAoLVtXS1dlYnBhZ2VQcmVmZXJl
bmNlcyBfc2V0QWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5zOl0pOgorICAgICAg
ICAoLVtXS1dlYnBhZ2VQcmVmZXJlbmNlcyBfYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc1Bh
dHRlcm5zXSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnBhZ2VQcmVmZXJl
bmNlc1ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUubW06CisgICAgICAgICgtW19XS1VzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmUgY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmVuY29kZWRDb250ZW50
RXh0ZW5zaW9uOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAqIFdlYlByb2Nlc3MvTmV0
d29yay9XZWJMb2FkZXJTdHJhdGVneS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkxvYWRlclN0
cmF0ZWd5OjpyZW1vdmUpOgorICAgICAgICBGaXggYSByZWdyZXNzaW9uIGZyb20gaHR0cHM6Ly90
cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzI3NjE5My93ZWJraXQKKyAgICAgICAgV2hlbiBmZXRj
aGluZyBhIHJlc291cmNlIHdpdGggYSBmb3JiaWRkZW4gcG9ydCBhbmQgYSBjdXN0b20gc2NoZW1l
IGFuZCB7bW9kZToibm8tY29ycyJ9LAorICAgICAgICBXZWJMb2FkZXJTdHJhdGVneTo6cmVtb3Zl
IGlzIGNhbGxlZCB3aXRoIGEgcmVzb3VyY2UgdGhhdCBkb2Vzbid0IGhhdmUgYW4gaWRlbnRpZmll
ci4KKyAgICAgICAgTXkgdGVzdCBoaXQgdGhpcywgc28gSSBtb3ZlZCB0aGUgY2hlY2sgdG8gYmVm
b3JlIHRoZSBpZGVudGlmaWVyIGlzIHVzZWQuCisKIDIwMjEtMTEtMTcgIFdlbnNvbiBIc2llaCAg
PHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEgaGVscGVyIGNsYXNzIHRv
IGNvb3JkaW5hdGUgYmF0Y2ggYW5hbHlzaXMgb2YgaW1hZ2VzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAKaW5kZXggMmJh
NzIxMmEyNzEzOTFkMzMxNjUxYWQ2NWU2NjY1M2ZhYWZkNDc0Yy4uMzM4NWQyNzY2NDViMTJkZDY1
NDA0NjFhNmM2N2YyODUyYjk1ZGI0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcApAQCAtMzMsNyArMzMsNiBAQAog
I2luY2x1ZGUgIldlYlNvY2tldENoYW5uZWwuaCIKIAogI2luY2x1ZGUgIkJsb2IuaCIKLSNpbmNs
dWRlICJDb250ZW50UnVsZUxpc3RSZXN1bHRzLmgiCiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQWN0
aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5z
aW9uQWN0aW9ucy5jcHAKaW5kZXggN2I0YzEzMTU4YTE1ZmVjZmNhNGVkM2JhZjlmZjgwZDdlMzkz
NjE5ZS4uZGIyMTUxNDNhYjNlOTg1MTAxMDU2YzUwNGI0NjgzNDQ2OTk1OGU1MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkFjdGlv
bnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRl
bnNpb25BY3Rpb25zLmNwcApAQCAtMzEsNiArMzEsOCBAQAogI2luY2x1ZGUgIkNvbnRlbnRFeHRl
bnNpb25FcnJvci5oIgogI2luY2x1ZGUgPHd0Zi9Dcm9zc1RocmVhZENvcGllci5oPgogI2luY2x1
ZGUgPHd0Zi9VUkwuaD4KKyNpbmNsdWRlIDx3dGYvVVJMUGFyc2VyLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZTo6
Q29udGVudEV4dGVuc2lvbnMgewogCkBAIC0xMjEsNyArMTIzLDggQEAgTW9kaWZ5SGVhZGVyc0Fj
dGlvbiBNb2RpZnlIZWFkZXJzQWN0aW9uOjppc29sYXRlZENvcHkoKSBjb25zdAogCiBib29sIE1v
ZGlmeUhlYWRlcnNBY3Rpb246Om9wZXJhdG9yPT0oY29uc3QgTW9kaWZ5SGVhZGVyc0FjdGlvbiYg
b3RoZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG90aGVyLnJlcXVlc3RIZWFkZXJzID09IHRoaXMt
PnJlcXVlc3RIZWFkZXJzCisgICAgcmV0dXJuIG90aGVyLmhhc2hUYWJsZVR5cGUgPT0gdGhpcy0+
aGFzaFRhYmxlVHlwZQorICAgICAgICAmJiBvdGhlci5yZXF1ZXN0SGVhZGVycyA9PSB0aGlzLT5y
ZXF1ZXN0SGVhZGVycwogICAgICAgICAmJiBvdGhlci5yZXNwb25zZUhlYWRlcnMgPT0gdGhpcy0+
cmVzcG9uc2VIZWFkZXJzOwogfQogCkBAIC0xNjYsNiArMTY5LDI3IEBAIHNpemVfdCBNb2RpZnlI
ZWFkZXJzQWN0aW9uOjpzZXJpYWxpemVkTGVuZ3RoKFNwYW48Y29uc3QgdWludDhfdD4gc3BhbikK
ICAgICByZXR1cm4gZGVzZXJpYWxpemVMZW5ndGgoc3BhbiwgMCk7CiB9CiAKK3ZvaWQgTW9kaWZ5
SGVhZGVyc0FjdGlvbjo6YXBwbHlUb1JlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQor
eworICAgIGZvciAoYXV0byYgaW5mbyA6IHJlcXVlc3RIZWFkZXJzKQorICAgICAgICBpbmZvLmFw
cGx5VG9SZXF1ZXN0KHJlcXVlc3QpOworfQorCit2b2lkIE1vZGlmeUhlYWRlcnNBY3Rpb246Ok1v
ZGlmeUhlYWRlckluZm86OmFwcGx5VG9SZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkK
K3sKKyAgICBzdGQ6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdIChjb25zdCBBcHBlbmRPcGVy
YXRpb24mIG9wZXJhdGlvbikgeworICAgICAgICBhdXRvIGV4aXN0aW5nVmFsdWUgPSByZXF1ZXN0
Lmh0dHBIZWFkZXJGaWVsZChvcGVyYXRpb24uaGVhZGVyKTsKKyAgICAgICAgaWYgKGV4aXN0aW5n
VmFsdWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQo
b3BlcmF0aW9uLmhlYWRlciwgb3BlcmF0aW9uLnZhbHVlKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQob3BlcmF0aW9uLmhlYWRlciwgbWFrZVN0
cmluZyhleGlzdGluZ1ZhbHVlLCAiOyAiLCBvcGVyYXRpb24udmFsdWUpKTsKKyAgICB9LCBbJl0g
KGNvbnN0IFNldE9wZXJhdGlvbiYgb3BlcmF0aW9uKSB7CisgICAgICAgIHJlcXVlc3Quc2V0SFRU
UEhlYWRlckZpZWxkKG9wZXJhdGlvbi5oZWFkZXIsIG9wZXJhdGlvbi52YWx1ZSk7CisgICAgfSwg
WyZdIChjb25zdCBSZW1vdmVPcGVyYXRpb24mIG9wZXJhdGlvbikgeworICAgICAgICByZXF1ZXN0
LnJlbW92ZUhUVFBIZWFkZXJGaWVsZChvcGVyYXRpb24uaGVhZGVyKTsKKyAgICB9KSwgb3BlcmF0
aW9uKTsKK30KKwogYXV0byBNb2RpZnlIZWFkZXJzQWN0aW9uOjpNb2RpZnlIZWFkZXJJbmZvOjpw
YXJzZShjb25zdCBKU09OOjpWYWx1ZSYgaW5mb1ZhbHVlKSAtPiBFeHBlY3RlZDxNb2RpZnlIZWFk
ZXJJbmZvLCBzdGQ6OmVycm9yX2NvZGU+CiB7CiAgICAgYXV0byBvYmplY3QgPSBpbmZvVmFsdWUu
YXNPYmplY3QoKTsKQEAgLTI1NSw3ICsyNzksNyBAQCBzaXplX3QgTW9kaWZ5SGVhZGVyc0FjdGlv
bjo6TW9kaWZ5SGVhZGVySW5mbzo6c2VyaWFsaXplZExlbmd0aChTcGFuPGNvbnN0IHVpbnQ4Xwog
ICAgIHJldHVybiBkZXNlcmlhbGl6ZUxlbmd0aChzcGFuLCAwKTsKIH0KIAotRXhwZWN0ZWQ8UmVk
aXJlY3RBY3Rpb24sIHN0ZDo6ZXJyb3JfY29kZT4gUmVkaXJlY3RBY3Rpb246OnBhcnNlKGNvbnN0
IEpTT046Ok9iamVjdCYgcmVkaXJlY3RPYmplY3QsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYWxs
b3dlZFJlZGlyZWN0VVJMU2NoZW1lcykKK0V4cGVjdGVkPFJlZGlyZWN0QWN0aW9uLCBzdGQ6OmVy
cm9yX2NvZGU+IFJlZGlyZWN0QWN0aW9uOjpwYXJzZShjb25zdCBKU09OOjpPYmplY3QmIHJlZGly
ZWN0T2JqZWN0LCBjb25zdCBzdGQ6Om9wdGlvbmFsPEhhc2hTZXQ8U3RyaW5nPj4mIGFsbG93ZWRS
ZWRpcmVjdFVSTFNjaGVtZXMpCiB7CiAgICAgYXV0byByZWRpcmVjdCA9IHJlZGlyZWN0T2JqZWN0
LmdldE9iamVjdCgicmVkaXJlY3QiKTsKICAgICBpZiAoIXJlZGlyZWN0KQpAQCAtMjc3LDEwICsz
MDEsMTMgQEAgRXhwZWN0ZWQ8UmVkaXJlY3RBY3Rpb24sIHN0ZDo6ZXJyb3JfY29kZT4gUmVkaXJl
Y3RBY3Rpb246OnBhcnNlKGNvbnN0IEpTT046Ok9iamUKICAgICAgICAgcmV0dXJuIFJlZGlyZWN0
QWN0aW9uIHsgV1RGTW92ZSgqcGFyc2VkVHJhbnNmb3JtKSB9OwogICAgIH0KIAotICAgIGlmIChh
dXRvIHVybCA9IHJlZGlyZWN0LT5nZXRTdHJpbmcoInVybCIpOyAhIXVybCkgewotICAgICAgICBp
ZiAoIWFsbG93ZWRSZWRpcmVjdFVSTFNjaGVtZXMuY29udGFpbnMoVVJMKFVSTCgpLCB1cmwpLnBy
b3RvY29sKCkudG9TdHJpbmdXaXRob3V0Q29weWluZygpKSkKKyAgICBpZiAoYXV0byB1cmxTdHJp
bmcgPSByZWRpcmVjdC0+Z2V0U3RyaW5nKCJ1cmwiKTsgISF1cmxTdHJpbmcpIHsKKyAgICAgICAg
YXV0byB1cmwgPSBVUkwoVVJMKCksIHVybFN0cmluZyk7CisgICAgICAgIGlmICghdXJsLmlzVmFs
aWQoKSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9u
RXJyb3I6OkpTT05SZWRpcmVjdFVSTEludmFsaWQpOworICAgICAgICBpZiAoYWxsb3dlZFJlZGly
ZWN0VVJMU2NoZW1lcyAmJiAhYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcy0+Y29udGFpbnModXJs
LnByb3RvY29sKCkudG9TdHJpbmdXaXRob3V0Q29weWluZygpKSkKICAgICAgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTFNj
aGVtZU5vdEFsbG93ZWQpOwotICAgICAgICByZXR1cm4gUmVkaXJlY3RBY3Rpb24geyBVUkxBY3Rp
b24geyBXVEZNb3ZlKHVybCkgfSB9OworICAgICAgICByZXR1cm4gUmVkaXJlY3RBY3Rpb24geyBV
UkxBY3Rpb24geyBXVEZNb3ZlKHVybFN0cmluZykgfSB9OwogICAgIH0KIAogICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdEludmFsaWRU
eXBlKTsKQEAgLTI5NSw3ICszMjIsOCBAQCBSZWRpcmVjdEFjdGlvbiBSZWRpcmVjdEFjdGlvbjo6
aXNvbGF0ZWRDb3B5KCkgY29uc3QKIAogYm9vbCBSZWRpcmVjdEFjdGlvbjo6b3BlcmF0b3I9PShj
b25zdCBSZWRpcmVjdEFjdGlvbiYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG90aGVyLmFj
dGlvbiA9PSB0aGlzLT5hY3Rpb247CisgICAgcmV0dXJuIG90aGVyLmhhc2hUYWJsZVR5cGUgPT0g
dGhpcy0+aGFzaFRhYmxlVHlwZQorICAgICAgICAmJiBvdGhlci5hY3Rpb24gPT0gdGhpcy0+YWN0
aW9uOwogfQogCiB2b2lkIFJlZGlyZWN0QWN0aW9uOjpzZXJpYWxpemUoVmVjdG9yPHVpbnQ4X3Q+
JiB2ZWN0b3IpIGNvbnN0CkBAIC0zNDAsMjYgKzM2OCw2NCBAQCBzaXplX3QgUmVkaXJlY3RBY3Rp
b246OnNlcmlhbGl6ZWRMZW5ndGgoU3Bhbjxjb25zdCB1aW50OF90PiBzcGFuKQogICAgIHJldHVy
biBkZXNlcmlhbGl6ZUxlbmd0aChzcGFuLCAwKTsKIH0KIAotYXV0byBSZWRpcmVjdEFjdGlvbjo6
VVJMVHJhbnNmb3JtQWN0aW9uOjpwYXJzZShjb25zdCBKU09OOjpPYmplY3QmIHRyYW5zZm9ybSwg
Y29uc3QgSGFzaFNldDxTdHJpbmc+JiBhbGxvd2VkUmVkaXJlY3RVUkxTY2hlbWVzKSAtPiBFeHBl
Y3RlZDxVUkxUcmFuc2Zvcm1BY3Rpb24sIHN0ZDo6ZXJyb3JfY29kZT4KK3ZvaWQgUmVkaXJlY3RB
Y3Rpb246OmFwcGx5VG9SZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBz
dGQ6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oY29uc3QgRXh0ZW5zaW9uUGF0aEFjdGlvbiYp
IHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudC4gV2UgbmVlZCB0byBrbm93IHRoZSBiYXNl
IFVSTCBvZiB0aGUgZXh0ZW5zaW9uIGhlcmUgZnJvbSBuZXcgU1BJLgorICAgIH0sIFsmXSAoY29u
c3QgUmVnZXhTdWJzdGl0dXRpb25BY3Rpb24mKSB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQsIGlkZWFsbHkgaW4gYSB3YXkgdGhhdCBkb2Vzbid0IHJlcXVpcmUgbWFraW5nIGEgbmV3IFZN
IGFuZCBnbG9iYWwgb2JqZWN0IGZvciBlYWNoIHJlZGlyZWN0IG9wZXJhdGlvbi4KKyAgICB9LCBb
Jl0gKGNvbnN0IFVSTFRyYW5zZm9ybUFjdGlvbiYgYWN0aW9uKSB7CisgICAgICAgIGF1dG8gdXJs
ID0gcmVxdWVzdC51cmwoKTsKKyAgICAgICAgYWN0aW9uLmFwcGx5VG9VUkwodXJsKTsKKyAgICAg
ICAgcmVxdWVzdC5zZXRVUkwoV1RGTW92ZSh1cmwpKTsKKyAgICB9LCBbJl0gKGNvbnN0IFVSTEFj
dGlvbiYgYWN0aW9uKSB7CisgICAgICAgIHJlcXVlc3Quc2V0VVJMKFVSTChVUkwoKSwgYWN0aW9u
LnVybCkpOworICAgIH0pLCBhY3Rpb24pOworfQorCithdXRvIFJlZGlyZWN0QWN0aW9uOjpVUkxU
cmFuc2Zvcm1BY3Rpb246OnBhcnNlKGNvbnN0IEpTT046Ok9iamVjdCYgdHJhbnNmb3JtLCBjb25z
dCBzdGQ6Om9wdGlvbmFsPEhhc2hTZXQ8U3RyaW5nPj4mIGFsbG93ZWRSZWRpcmVjdFVSTFNjaGVt
ZXMpIC0+IEV4cGVjdGVkPFVSTFRyYW5zZm9ybUFjdGlvbiwgc3RkOjplcnJvcl9jb2RlPgogewog
ICAgIFVSTFRyYW5zZm9ybUFjdGlvbiBhY3Rpb247Ci0gICAgYWN0aW9uLmZyYWdtZW50ID0gdHJh
bnNmb3JtLmdldFN0cmluZygiZnJhZ21lbnQiKTsKKyAgICBpZiAoYXV0byBmcmFnbWVudCA9IHRy
YW5zZm9ybS5nZXRTdHJpbmcoImZyYWdtZW50Iik7ICEhZnJhZ21lbnQpIHsKKyAgICAgICAgaWYg
KCFmcmFnbWVudC5pc0VtcHR5KCkgJiYgIWZyYWdtZW50LnN0YXJ0c1dpdGgoJyMnKSkKKyAgICAg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05S
ZWRpcmVjdEludmFsaWRGcmFnbWVudCk7CisgICAgICAgIGFjdGlvbi5mcmFnbWVudCA9IFdURk1v
dmUoZnJhZ21lbnQpOworICAgIH0KICAgICBhY3Rpb24uaG9zdCA9IHRyYW5zZm9ybS5nZXRTdHJp
bmcoImhvc3QiKTsKICAgICBhY3Rpb24ucGFzc3dvcmQgPSB0cmFuc2Zvcm0uZ2V0U3RyaW5nKCJw
YXNzd29yZCIpOwogICAgIGFjdGlvbi5wYXRoID0gdHJhbnNmb3JtLmdldFN0cmluZygicGF0aCIp
OwotICAgIGFjdGlvbi5wb3J0ID0gdHJhbnNmb3JtLmdldFN0cmluZygicG9ydCIpOwotICAgIGF1
dG8gc2NoZW1lID0gdHJhbnNmb3JtLmdldFN0cmluZygic2NoZW1lIik7Ci0gICAgaWYgKCEhc2No
ZW1lICYmICFhbGxvd2VkUmVkaXJlY3RVUkxTY2hlbWVzLmNvbnRhaW5zKHNjaGVtZSkpCi0gICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRp
cmVjdFVSTFNjaGVtZU5vdEFsbG93ZWQpOwotICAgIGFjdGlvbi5zY2hlbWUgPSBXVEZNb3ZlKHNj
aGVtZSk7CisgICAgYXV0byBwb3J0ID0gdHJhbnNmb3JtLmdldFN0cmluZygicG9ydCIpOworICAg
IGlmICghIXBvcnQpIHsKKyAgICAgICAgaWYgKHBvcnQuaXNFbXB0eSgpKQorICAgICAgICAgICAg
YWN0aW9uLnBvcnQgPSB7IHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+IHsgfSB9OworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIGF1dG8gcGFyc2VkUG9ydCA9IHBhcnNlSW50ZWdlcjx1aW50MTZf
dD4oU3RyaW5nVmlldyhwb3J0KSk7CisgICAgICAgICAgICBpZiAoIXBhcnNlZFBvcnQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJvcjo6
SlNPTlJlZGlyZWN0SW52YWxpZFBvcnQpOworICAgICAgICAgICAgYWN0aW9uLnBvcnQgPSB7IHBh
cnNlZFBvcnQgfTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChhdXRvIHVuY2Fub25pY2Fs
aXplZFNjaGVtZSA9IHRyYW5zZm9ybS5nZXRTdHJpbmcoInNjaGVtZSIpOyAhIXVuY2Fub25pY2Fs
aXplZFNjaGVtZSkgeworICAgICAgICBhdXRvIHNjaGVtZSA9IFdURjo6VVJMUGFyc2VyOjptYXli
ZUNhbm9uaWNhbGl6ZVNjaGVtZSh1bmNhbm9uaWNhbGl6ZWRTY2hlbWUpOworICAgICAgICBpZiAo
IXNjaGVtZSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5z
aW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTFNjaGVtZUludmFsaWQpOworICAgICAgICBpZiAoYWxs
b3dlZFJlZGlyZWN0VVJMU2NoZW1lcyAmJiAhYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcy0+Y29u
dGFpbnMoKnNjaGVtZSkpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29udGVu
dEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RVUkxTY2hlbWVOb3RBbGxvd2VkKTsKKyAgICAg
ICAgYWN0aW9uLnNjaGVtZSA9IFdURk1vdmUoKnNjaGVtZSk7CisgICAgfQogICAgIGFjdGlvbi51
c2VybmFtZSA9IHRyYW5zZm9ybS5nZXRTdHJpbmcoInVzZXJuYW1lIik7CiAgICAgaWYgKGF1dG8g
cXVlcnlUcmFuc2Zvcm0gPSB0cmFuc2Zvcm0uZ2V0T2JqZWN0KCJxdWVyeS10cmFuc2Zvcm0iKSkg
ewogICAgICAgICBhdXRvIHBhcnNlZFF1ZXJ5VHJhbnNmb3JtID0gUXVlcnlUcmFuc2Zvcm06OnBh
cnNlKCpxdWVyeVRyYW5zZm9ybSk7CiAgICAgICAgIGlmICghcGFyc2VkUXVlcnlUcmFuc2Zvcm0p
CiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQocGFyc2VkUXVlcnlUcmFuc2Zvcm0u
ZXJyb3IoKSk7CiAgICAgICAgIGFjdGlvbi5xdWVyeVRyYW5zZm9ybSA9ICpwYXJzZWRRdWVyeVRy
YW5zZm9ybTsKLSAgICB9IGVsc2UKLSAgICAgICAgYWN0aW9uLnF1ZXJ5VHJhbnNmb3JtID0gdHJh
bnNmb3JtLmdldFN0cmluZygicXVlcnkiKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvIHF1
ZXJ5ID0gdHJhbnNmb3JtLmdldFN0cmluZygicXVlcnkiKTsKKyAgICAgICAgaWYgKCFxdWVyeS5p
c0VtcHR5KCkgJiYgIXF1ZXJ5LnN0YXJ0c1dpdGgoJz8nKSkKKyAgICAgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdEludmFsaWRR
dWVyeSk7CisgICAgICAgIGFjdGlvbi5xdWVyeVRyYW5zZm9ybSA9IFdURk1vdmUocXVlcnkpOwor
ICAgIH0KICAgICByZXR1cm4gYWN0aW9uOwogfQogCkBAIC0zOTksMTMgKzQ2NSwxMyBAQCB2b2lk
IFJlZGlyZWN0QWN0aW9uOjpVUkxUcmFuc2Zvcm1BY3Rpb246OnNlcmlhbGl6ZShWZWN0b3I8dWlu
dDhfdD4mIHZlY3RvcikgY29ucwogICAgIHVpbnQ4X3QgaGFzU2NoZW1lID0gISFzY2hlbWU7CiAg
ICAgdWludDhfdCBoYXNVc2VybmFtZSA9ICEhdXNlcm5hbWU7CiAgICAgYXV0byogcXVlcnlTdHJp
bmcgPSBzdGQ6OmdldF9pZjxTdHJpbmc+KCZxdWVyeVRyYW5zZm9ybSk7CisgICAgYXV0byBxdWVy
eVN0cmluZ1VURjggPSBxdWVyeVN0cmluZyA/IHF1ZXJ5U3RyaW5nLT51dGY4KCkgOiBDU3RyaW5n
KCk7CiAgICAgdWludDhfdCBoYXNRdWVyeSA9ICFxdWVyeVN0cmluZyB8fCAhISpxdWVyeVN0cmlu
ZzsKIAogICAgIGF1dG8gZnJhZ21lbnRVVEY4ID0gZnJhZ21lbnQudXRmOCgpOwogICAgIGF1dG8g
aG9zdFVURjggPSBob3N0LnV0ZjgoKTsKICAgICBhdXRvIHBhc3N3b3JkVVRGOCA9IHBhc3N3b3Jk
LnV0ZjgoKTsKICAgICBhdXRvIHBhdGhVVEY4ID0gcGF0aC51dGY4KCk7Ci0gICAgYXV0byBwb3J0
VVRGOCA9IHBvcnQudXRmOCgpOwogICAgIGF1dG8gc2NoZW1lVVRGOCA9IHNjaGVtZS51dGY4KCk7
CiAgICAgYXV0byB1c2VybmFtZVVURjggPSB1c2VybmFtZS51dGY4KCk7CiAKQEAgLTQxNCw5ICs0
ODAsMTAgQEAgdm9pZCBSZWRpcmVjdEFjdGlvbjo6VVJMVHJhbnNmb3JtQWN0aW9uOjpzZXJpYWxp
emUoVmVjdG9yPHVpbnQ4X3Q+JiB2ZWN0b3IpIGNvbnMKICAgICAgICAgKyAoaGFzSG9zdCA/IHNp
emVvZih1aW50MzJfdCkgKyBob3N0VVRGOC5sZW5ndGgoKSA6IDApCiAgICAgICAgICsgKGhhc1Bh
c3N3b3JkID8gc2l6ZW9mKHVpbnQzMl90KSArIHBhc3N3b3JkVVRGOC5sZW5ndGgoKSA6IDApCiAg
ICAgICAgICsgKGhhc1BhdGggPyBzaXplb2YodWludDMyX3QpICsgcGF0aFVURjgubGVuZ3RoKCkg
OiAwKQotICAgICAgICArIChoYXNQb3J0ID8gc2l6ZW9mKHVpbnQzMl90KSArIHBvcnRVVEY4Lmxl
bmd0aCgpIDogMCkKICAgICAgICAgKyAoaGFzU2NoZW1lID8gc2l6ZW9mKHVpbnQzMl90KSArIHNj
aGVtZVVURjgubGVuZ3RoKCkgOiAwKQotICAgICAgICArIChoYXNVc2VybmFtZSA/IHNpemVvZih1
aW50MzJfdCkgKyB1c2VybmFtZVVURjgubGVuZ3RoKCkgOiAwKSk7CisgICAgICAgICsgKGhhc1Vz
ZXJuYW1lID8gc2l6ZW9mKHVpbnQzMl90KSArIHVzZXJuYW1lVVRGOC5sZW5ndGgoKSA6IDApCisg
ICAgICAgICsgKGhhc1BvcnQgPyAxICsgKCpwb3J0ID8gc2l6ZW9mKHVpbnQxNl90KSA6IDApIDog
MCkKKyAgICAgICAgKyAoaGFzUXVlcnkgPyAxICsgKHF1ZXJ5U3RyaW5nID8gc2l6ZW9mKHVpbnQz
Ml90KSArIHF1ZXJ5U3RyaW5nVVRGOC5sZW5ndGgoKSA6IDApIDogMCkpOwogCiAgICAgYXV0byBi
ZWdpbkluZGV4ID0gdmVjdG9yLnNpemUoKTsKICAgICB1bmNoZWNrZWRBcHBlbmQodmVjdG9yLCAw
KTsKQEAgLTQ0MiwxOCArNTA5LDIyIEBAIHZvaWQgUmVkaXJlY3RBY3Rpb246OlVSTFRyYW5zZm9y
bUFjdGlvbjo6c2VyaWFsaXplKFZlY3Rvcjx1aW50OF90PiYgdmVjdG9yKSBjb25zCiAgICAgICAg
IHVuY2hlY2tlZEFwcGVuZExlbmd0aEFuZFN0cmluZyhwYXNzd29yZFVURjgpOwogICAgIGlmICho
YXNQYXRoKQogICAgICAgICB1bmNoZWNrZWRBcHBlbmRMZW5ndGhBbmRTdHJpbmcocGF0aFVURjgp
OwotICAgIGlmIChoYXNQb3J0KQotICAgICAgICB1bmNoZWNrZWRBcHBlbmRMZW5ndGhBbmRTdHJp
bmcocG9ydFVURjgpOwogICAgIGlmIChoYXNTY2hlbWUpCiAgICAgICAgIHVuY2hlY2tlZEFwcGVu
ZExlbmd0aEFuZFN0cmluZyhzY2hlbWVVVEY4KTsKICAgICBpZiAoaGFzVXNlcm5hbWUpCiAgICAg
ICAgIHVuY2hlY2tlZEFwcGVuZExlbmd0aEFuZFN0cmluZyh1c2VybmFtZVVURjgpOworICAgIGlm
IChoYXNQb3J0KSB7CisgICAgICAgIHZlY3Rvci51bmNoZWNrZWRBcHBlbmQoISEqcG9ydCk7Cisg
ICAgICAgIGlmICgqcG9ydCkgeworICAgICAgICAgICAgdmVjdG9yLnVuY2hlY2tlZEFwcGVuZCgq
KnBvcnQgPj4gMCk7CisgICAgICAgICAgICB2ZWN0b3IudW5jaGVja2VkQXBwZW5kKCoqcG9ydCA+
PiA4KTsKKyAgICAgICAgfQorICAgIH0KICAgICBpZiAoaGFzUXVlcnkpIHsKLSAgICAgICAgdmVj
dG9yLmFwcGVuZChxdWVyeVRyYW5zZm9ybS5pbmRleCgpKTsKLSAgICAgICAgc3RkOjp2aXNpdChX
VEY6Om1ha2VWaXNpdG9yKFsmXShjb25zdCBTdHJpbmcmIHF1ZXJ5U3RyaW5nKSB7Ci0gICAgICAg
ICAgICBhdXRvIHF1ZXJ5U3RyaW5nVVRGOCA9IHF1ZXJ5U3RyaW5nLnV0ZjgoKTsKLSAgICAgICAg
ICAgIGFwcGVuZCh2ZWN0b3IsIHF1ZXJ5U3RyaW5nVVRGOC5sZW5ndGgoKSk7Ci0gICAgICAgICAg
ICBhcHBlbmQodmVjdG9yLCBxdWVyeVN0cmluZ1VURjgpOworICAgICAgICB2ZWN0b3IudW5jaGVj
a2VkQXBwZW5kKHF1ZXJ5VHJhbnNmb3JtLmluZGV4KCkpOworICAgICAgICBzdGQ6OnZpc2l0KFdU
Rjo6bWFrZVZpc2l0b3IoWyZdKGNvbnN0IFN0cmluZyYpIHsKKyAgICAgICAgICAgIHVuY2hlY2tl
ZEFwcGVuZCh2ZWN0b3IsIHF1ZXJ5U3RyaW5nVVRGOC5sZW5ndGgoKSk7CisgICAgICAgICAgICB1
bmNoZWNrZWRBcHBlbmQodmVjdG9yLCBxdWVyeVN0cmluZ1VURjgpOwogICAgICAgICB9LCBbJl0o
Y29uc3QgUXVlcnlUcmFuc2Zvcm0mIHRyYW5zZm9ybSkgewogICAgICAgICAgICAgdHJhbnNmb3Jt
LnNlcmlhbGl6ZSh2ZWN0b3IpOwogICAgICAgICB9KSwgcXVlcnlUcmFuc2Zvcm0pOwpAQCAtNDg3
LDkgKzU1OCwxOCBAQCBhdXRvIFJlZGlyZWN0QWN0aW9uOjpVUkxUcmFuc2Zvcm1BY3Rpb246OmRl
c2VyaWFsaXplKFNwYW48Y29uc3QgdWludDhfdD4gc3BhbikgLQogICAgIGF1dG8gaG9zdCA9IGhh
c0hvc3QgPyBkZXNlcmlhbGl6ZVN0cmluZygpIDogU3RyaW5nKCk7CiAgICAgYXV0byBwYXNzd29y
ZCA9IGhhc1Bhc3N3b3JkID8gZGVzZXJpYWxpemVTdHJpbmcoKSA6IFN0cmluZygpOwogICAgIGF1
dG8gcGF0aCA9IGhhc1BhdGggPyBkZXNlcmlhbGl6ZVN0cmluZygpIDogU3RyaW5nKCk7Ci0gICAg
YXV0byBwb3J0ID0gaGFzUG9ydCA/IGRlc2VyaWFsaXplU3RyaW5nKCkgOiBTdHJpbmcoKTsKICAg
ICBhdXRvIHNjaGVtZSA9IGhhc1NjaGVtZSA/IGRlc2VyaWFsaXplU3RyaW5nKCkgOiBTdHJpbmco
KTsKICAgICBhdXRvIHVzZXJuYW1lID0gaGFzVXNlcm5hbWUgPyBkZXNlcmlhbGl6ZVN0cmluZygp
IDogU3RyaW5nKCk7CisgICAgc3RkOjpvcHRpb25hbDxzdGQ6Om9wdGlvbmFsPHVpbnQxNl90Pj4g
cG9ydDsKKyAgICBpZiAoaGFzUG9ydCkgeworICAgICAgICBpZiAoc3Bhbltwcm9ncmVzcysrXSkg
eworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3Bhbi5zaXplKCkgPiBwcm9ncmVzcyArIDEp
OworICAgICAgICAgICAgdWludDE2X3QgdmFsdWUgPSAoc3Bhbltwcm9ncmVzc10gPDwgMCkgfCAo
c3Bhbltwcm9ncmVzcyArIDFdIDw8IDgpOworICAgICAgICAgICAgcG9ydCA9IHsgeyB2YWx1ZSB9
IH07CisgICAgICAgICAgICBwcm9ncmVzcyArPSAyOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIHBvcnQgPSB7IHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+IHsgfSB9OworICAgIH0KICAgICBR
dWVyeVRyYW5zZm9ybVZhcmlhbnQgcXVlcnlUcmFuc2Zvcm07CiAgICAgaWYgKGhhc1F1ZXJ5KSB7
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNwYW4uc2l6ZSgpID4gcHJvZ3Jlc3MpOwpAQCAtNTU2
LDYgKzYzNiw2NiBAQCBhdXRvIFJlZGlyZWN0QWN0aW9uOjpVUkxUcmFuc2Zvcm1BY3Rpb246OlF1
ZXJ5VHJhbnNmb3JtOjpwYXJzZShjb25zdCBKU09OOjpPYmplYwogICAgIHJldHVybiBwYXJzZWRR
dWVyeVRyYW5zZm9ybTsKIH0KIAordm9pZCBSZWRpcmVjdEFjdGlvbjo6VVJMVHJhbnNmb3JtQWN0
aW9uOjphcHBseVRvVVJMKFVSTCYgdXJsKSBjb25zdAoreworICAgIGlmICghIWZyYWdtZW50KSB7
CisgICAgICAgIGlmIChmcmFnbWVudC5pc0VtcHR5KCkpCisgICAgICAgICAgICB1cmwucmVtb3Zl
RnJhZ21lbnRJZGVudGlmaWVyKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHVybC5zZXRG
cmFnbWVudElkZW50aWZpZXIoU3RyaW5nVmlldyhmcmFnbWVudCkuc3Vic3RyaW5nKDEpKTsKKyAg
ICB9CisgICAgaWYgKCEhaG9zdCkKKyAgICAgICAgdXJsLnNldEhvc3QoaG9zdCk7CisgICAgaWYg
KCEhcGFzc3dvcmQpCisgICAgICAgIHVybC5zZXRQYXNzd29yZChwYXNzd29yZCk7CisgICAgaWYg
KCEhcGF0aCkKKyAgICAgICAgdXJsLnNldFBhdGgocGF0aCk7CisgICAgaWYgKCEhcG9ydCkKKyAg
ICAgICAgdXJsLnNldFBvcnQoKnBvcnQpOworICAgIHN0ZDo6dmlzaXQoV1RGOjptYWtlVmlzaXRv
cihbJl0gKGNvbnN0IFN0cmluZyYgcXVlcnkpIHsKKyAgICAgICAgaWYgKCFxdWVyeS5pc051bGwo
KSkKKyAgICAgICAgICAgIHVybC5zZXRRdWVyeShxdWVyeS5pc0VtcHR5KCkgPyBTdHJpbmdWaWV3
KCkgOiBTdHJpbmdWaWV3KHF1ZXJ5KSk7CisgICAgfSwgWyZdIChjb25zdCBVUkxUcmFuc2Zvcm1B
Y3Rpb246OlF1ZXJ5VHJhbnNmb3JtJiB0cmFuc2Zvcm0pIHsKKyAgICAgICAgdHJhbnNmb3JtLmFw
cGx5VG9VUkwodXJsKTsKKyAgICB9KSwgcXVlcnlUcmFuc2Zvcm0pOworICAgIGlmICghIXNjaGVt
ZSkKKyAgICAgICAgdXJsLnNldFByb3RvY29sKHNjaGVtZSk7CisgICAgaWYgKCEhdXNlcm5hbWUp
CisgICAgICAgIHVybC5zZXRVc2VyKHVzZXJuYW1lKTsKK30KKwordm9pZCBSZWRpcmVjdEFjdGlv
bjo6VVJMVHJhbnNmb3JtQWN0aW9uOjpRdWVyeVRyYW5zZm9ybTo6YXBwbHlUb1VSTChVUkwmIHVy
bCkgY29uc3QKK3sKKyAgICBhdXRvIGZvcm0gPSBXVEY6OlVSTFBhcnNlcjo6cGFyc2VVUkxFbmNv
ZGVkRm9ybSh1cmwucXVlcnkoKSk7CisKKyAgICBIYXNoU2V0PFN0cmluZz4ga2V5c1RvUmVtb3Zl
OworICAgIGZvciAoYXV0byYga2V5IDogcmVtb3ZlUGFyYW1zKQorICAgICAgICBrZXlzVG9SZW1v
dmUuYWRkKGtleSk7CisgICAgZm9ybS5yZW1vdmVBbGxNYXRjaGluZyhbJl0gKGF1dG8mIGtleVZh
bHVlKSB7CisgICAgICAgIHJldHVybiBrZXlzVG9SZW1vdmUuY29udGFpbnMoa2V5VmFsdWUua2V5
KTsKKyAgICB9KTsKKworICAgIFZlY3RvcjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0cmlu
Zz4+IGtleXNUb0FkZDsKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBrZXlzVG9SZXBsYWNl
OworICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiBhZGRPclJlcGxhY2VQYXJhbXMpIHsKKyAgICAg
ICAgaWYgKGtleVZhbHVlLnJlcGxhY2VPbmx5KQorICAgICAgICAgICAga2V5c1RvUmVwbGFjZS5h
ZGQoa2V5VmFsdWUua2V5LCBrZXlWYWx1ZS52YWx1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGtleXNUb0FkZC5hcHBlbmQoeyBrZXlWYWx1ZS5rZXksIGtleVZhbHVlLnZhbHVlIH0pOwor
ICAgIH0KKyAgICBmb3IgKGF1dG8mIGtleVZhbHVlIDogZm9ybSkgeworICAgICAgICBhdXRvIGl0
ZXJhdG9yID0ga2V5c1RvUmVwbGFjZS5maW5kKGtleVZhbHVlLmtleSk7CisgICAgICAgIGlmIChp
dGVyYXRvciAhPSBrZXlzVG9SZXBsYWNlLmVuZCgpKQorICAgICAgICAgICAga2V5VmFsdWUudmFs
dWUgPSBpdGVyYXRvci0+dmFsdWU7CisgICAgfQorICAgIGZvcm0uYXBwZW5kVmVjdG9yKFdURk1v
dmUoa2V5c1RvQWRkKSk7CisKKyAgICBTdHJpbmdCdWlsZGVyIHRyYW5zZm9ybWVkUXVlcnk7Cisg
ICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6IGZvcm0pCisgICAgICAgIHRyYW5zZm9ybWVkUXVlcnku
YXBwZW5kKHRyYW5zZm9ybWVkUXVlcnkuaXNFbXB0eSgpID8gIiIgOiAiJiIsIGtleVZhbHVlLmtl
eSwgISFrZXlWYWx1ZS52YWx1ZSA/ICI9IiA6ICIiLCBrZXlWYWx1ZS52YWx1ZSk7CisgICAgdXJs
LnNldFF1ZXJ5KHRyYW5zZm9ybWVkUXVlcnkpOworfQorCiBhdXRvIFJlZGlyZWN0QWN0aW9uOjpV
UkxUcmFuc2Zvcm1BY3Rpb246OlF1ZXJ5VHJhbnNmb3JtOjppc29sYXRlZENvcHkoKSBjb25zdCAt
PiBRdWVyeVRyYW5zZm9ybQogewogICAgIHJldHVybiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQWN0aW9ucy5oIGIvU291cmNl
L1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkFjdGlvbnMuaAppbmRl
eCA1YTJkMGFmNmJiYzE0YzE0NzQxMmFkY2IxMDg2MzMxMmIxNmI1MTZhLi5iZmU4NDI2YjY1NTJi
N2JmNjNmYWVlOTQ5MzdmZGUwYjk3ZDBmNjhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQWN0aW9ucy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25BY3Rpb25zLmgKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksOSAr
MjksMzggQEAKIAogI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25TdHJpbmdTZXJpYWxpemF0aW9u
LmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0
aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Y2xhc3MgUmVzb3VyY2VSZXF1ZXN0OworfQogCiBuYW1lc3BhY2UgV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnMgewogCisvLyBGSVhNRTogVGhpcyBwcm9iYWJseSBiZWxvbmdzIGluIFdURiwgc3Vj
aCBhcyBpbiBIYXNoRnVuY3Rpb25zLmguCitzdHJ1Y3QgVmFyaWFudEhhc2hlciB7CisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFY+CisgICAgc3RhdGljIHVpbnQzMl90IGhhc2goViYmIHZhcmlhbnQp
CisgICAgeworICAgICAgICByZXR1cm4gcGFpckludEhhc2godmFyaWFudC5pbmRleCgpLCBzdGQ6
OnZpc2l0KFtdKGNvbnN0IGF1dG8mIHR5cGUpIHsKKyAgICAgICAgICAgIHJldHVybiB0eXBlLmhh
c2goKTsKKyAgICAgICAgfSwgc3RkOjpmb3J3YXJkPFY+KHZhcmlhbnQpKSk7CisgICAgfQorfTsK
KworLy8gRklYTUU6IFRoaXMgcHJvYmFibHkgYmVsb25ncyBpbiBXVEYsIHN1Y2ggYXMgaW4gSGFz
aGVyLmguCitzdHJ1Y3QgVmVjdG9ySGFzaGVyIHsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVj4K
KyAgICBzdGF0aWMgdWludDMyX3QgaGFzaChWJiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgSGFz
aGVyIGhhc2hlcjsKKyAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQorICAgICAg
ICAgICAgYWRkKGhhc2hlciwgZWxlbWVudC5oYXNoKCkpOworICAgICAgICByZXR1cm4gaGFzaGVy
Lmhhc2goKTsKKyAgICB9Cit9OworCiBzdHJ1Y3QgQWN0aW9uOwogCiB1c2luZyBTZXJpYWxpemVk
QWN0aW9uQnl0ZSA9IHVpbnQ4X3Q7CkBAIC02Niw2ICs5NSw3IEBAIHN0cnVjdCBXRUJDT1JFX0VY
UE9SVCBNb2RpZnlIZWFkZXJzQWN0aW9uIHsKICAgICAgICAgICAgIFN0cmluZyBoZWFkZXI7CiAg
ICAgICAgICAgICBTdHJpbmcgdmFsdWU7CiAKKyAgICAgICAgICAgIHVpbnQzMl90IGhhc2goKSBj
b25zdCB7IHJldHVybiBwYWlySW50SGFzaChoZWFkZXIuaGFzaCgpLCB2YWx1ZS5oYXNoKCkpOyB9
CiAgICAgICAgICAgICBBcHBlbmRPcGVyYXRpb24gaXNvbGF0ZWRDb3B5KCkgY29uc3QgeyByZXR1
cm4geyBoZWFkZXIuaXNvbGF0ZWRDb3B5KCksIHZhbHVlLmlzb2xhdGVkQ29weSgpIH07IH0KICAg
ICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBcHBlbmRPcGVyYXRpb24mIG90aGVyKSBj
b25zdCB7IHJldHVybiBvdGhlci5oZWFkZXIgPT0gdGhpcy0+aGVhZGVyICYmIG90aGVyLnZhbHVl
ID09IHRoaXMtPnZhbHVlOyB9CiAgICAgICAgIH07CkBAIC03Myw0NyArMTAzLDY3IEBAIHN0cnVj
dCBXRUJDT1JFX0VYUE9SVCBNb2RpZnlIZWFkZXJzQWN0aW9uIHsKICAgICAgICAgICAgIFN0cmlu
ZyBoZWFkZXI7CiAgICAgICAgICAgICBTdHJpbmcgdmFsdWU7CiAKKyAgICAgICAgICAgIHVpbnQz
Ml90IGhhc2goKSBjb25zdCB7IHJldHVybiBwYWlySW50SGFzaChoZWFkZXIuaGFzaCgpLCB2YWx1
ZS5oYXNoKCkpOyB9CiAgICAgICAgICAgICBTZXRPcGVyYXRpb24gaXNvbGF0ZWRDb3B5KCkgY29u
c3QgeyByZXR1cm4geyBoZWFkZXIuaXNvbGF0ZWRDb3B5KCksIHZhbHVlLmlzb2xhdGVkQ29weSgp
IH07IH0KICAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTZXRPcGVyYXRpb24mIG90
aGVyKSBjb25zdCB7IHJldHVybiBvdGhlci5oZWFkZXIgPT0gdGhpcy0+aGVhZGVyICYmIG90aGVy
LnZhbHVlID09IHRoaXMtPnZhbHVlOyB9CiAgICAgICAgIH07CiAgICAgICAgIHN0cnVjdCBSZW1v
dmVPcGVyYXRpb24gewogICAgICAgICAgICAgU3RyaW5nIGhlYWRlcjsKIAorICAgICAgICAgICAg
dWludDMyX3QgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIGhlYWRlci5oYXNoKCk7IH0KICAgICAgICAg
ICAgIFJlbW92ZU9wZXJhdGlvbiBpc29sYXRlZENvcHkoKSBjb25zdCB7IHJldHVybiB7IGhlYWRl
ci5pc29sYXRlZENvcHkoKSB9OyB9CiAgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
UmVtb3ZlT3BlcmF0aW9uJiBvdGhlcikgY29uc3QgeyByZXR1cm4gb3RoZXIuaGVhZGVyID09IHRo
aXMtPmhlYWRlcjsgfQogICAgICAgICB9OwogICAgICAgICB1c2luZyBPcGVyYXRpb25WYXJpYW50
ID0gc3RkOjp2YXJpYW50PEFwcGVuZE9wZXJhdGlvbiwgU2V0T3BlcmF0aW9uLCBSZW1vdmVPcGVy
YXRpb24+OwogICAgICAgICBPcGVyYXRpb25WYXJpYW50IG9wZXJhdGlvbjsKIAorICAgICAgICB1
aW50MzJfdCBoYXNoKCkgY29uc3QgeyByZXR1cm4gVmFyaWFudEhhc2hlcjo6aGFzaChvcGVyYXRp
b24pOyB9CiAgICAgICAgIHN0YXRpYyBFeHBlY3RlZDxNb2RpZnlIZWFkZXJJbmZvLCBzdGQ6OmVy
cm9yX2NvZGU+IHBhcnNlKGNvbnN0IEpTT046OlZhbHVlJik7CiAgICAgICAgIE1vZGlmeUhlYWRl
ckluZm8gaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBNb2RpZnlIZWFkZXJJbmZvJikgY29uc3Q7CiAgICAgICAgIHZvaWQgc2VyaWFsaXplKFZlY3Rv
cjx1aW50OF90PiYpIGNvbnN0OwogICAgICAgICBzdGF0aWMgTW9kaWZ5SGVhZGVySW5mbyBkZXNl
cmlhbGl6ZShTcGFuPGNvbnN0IHVpbnQ4X3Q+KTsKICAgICAgICAgc3RhdGljIHNpemVfdCBzZXJp
YWxpemVkTGVuZ3RoKFNwYW48Y29uc3QgdWludDhfdD4pOworICAgICAgICB2b2lkIGFwcGx5VG9S
ZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYpOwogICAgIH07CiAKKyAgICBlbnVtIGNsYXNzIEhhc2hU
YWJsZVR5cGUgOiB1aW50OF90IHsgRW1wdHksIERlbGV0ZWQsIEZ1bGwgfSBoYXNoVGFibGVUeXBl
OwogICAgIFZlY3RvcjxNb2RpZnlIZWFkZXJJbmZvPiByZXF1ZXN0SGVhZGVyczsKICAgICBWZWN0
b3I8TW9kaWZ5SGVhZGVySW5mbz4gcmVzcG9uc2VIZWFkZXJzOwogCisgICAgTW9kaWZ5SGVhZGVy
c0FjdGlvbihWZWN0b3I8TW9kaWZ5SGVhZGVySW5mbz4mJiByZXF1ZXN0SGVhZGVycywgVmVjdG9y
PE1vZGlmeUhlYWRlckluZm8+JiYgcmVzcG9uc2VIZWFkZXJzKQorICAgICAgICA6IGhhc2hUYWJs
ZVR5cGUoSGFzaFRhYmxlVHlwZTo6RnVsbCkKKyAgICAgICAgLCByZXF1ZXN0SGVhZGVycyhXVEZN
b3ZlKHJlcXVlc3RIZWFkZXJzKSkKKyAgICAgICAgLCByZXNwb25zZUhlYWRlcnMoV1RGTW92ZShy
ZXNwb25zZUhlYWRlcnMpKSB7IH0KKworICAgIGVudW0gRW1wdHlWYWx1ZVRhZyB7IEVtcHR5VmFs
dWUgfTsKKyAgICBlbnVtIERlbGV0ZWRWYWx1ZVRhZyB7IERlbGV0ZWRWYWx1ZSB9OworICAgIE1v
ZGlmeUhlYWRlcnNBY3Rpb24oRW1wdHlWYWx1ZVRhZykgOiBoYXNoVGFibGVUeXBlKEhhc2hUYWJs
ZVR5cGU6OkVtcHR5KSB7IH0KKyAgICBNb2RpZnlIZWFkZXJzQWN0aW9uKERlbGV0ZWRWYWx1ZVRh
ZykgOiBoYXNoVGFibGVUeXBlKEhhc2hUYWJsZVR5cGU6OkRlbGV0ZWQpIHsgfQorICAgIGJvb2wg
aXNEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBoYXNoVGFibGVUeXBlID09IEhhc2hUYWJs
ZVR5cGU6OkRlbGV0ZWQ7IH0KKworICAgIHVpbnQzMl90IGhhc2goKSBjb25zdCB7IHJldHVybiBw
YWlySW50SGFzaChWZWN0b3JIYXNoZXI6Omhhc2gocmVxdWVzdEhlYWRlcnMpLCBWZWN0b3JIYXNo
ZXI6Omhhc2gocmVzcG9uc2VIZWFkZXJzKSk7IH0KICAgICBzdGF0aWMgRXhwZWN0ZWQ8TW9kaWZ5
SGVhZGVyc0FjdGlvbiwgc3RkOjplcnJvcl9jb2RlPiBwYXJzZShjb25zdCBKU09OOjpPYmplY3Qm
KTsKICAgICBNb2RpZnlIZWFkZXJzQWN0aW9uIGlzb2xhdGVkQ29weSgpIGNvbnN0OwogICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBNb2RpZnlIZWFkZXJzQWN0aW9uJikgY29uc3Q7CiAgICAgdm9p
ZCBzZXJpYWxpemUoVmVjdG9yPHVpbnQ4X3Q+JikgY29uc3Q7CiAgICAgc3RhdGljIE1vZGlmeUhl
YWRlcnNBY3Rpb24gZGVzZXJpYWxpemUoU3Bhbjxjb25zdCB1aW50OF90Pik7CiAgICAgc3RhdGlj
IHNpemVfdCBzZXJpYWxpemVkTGVuZ3RoKFNwYW48Y29uc3QgdWludDhfdD4pOworICAgIHZvaWQg
YXBwbHlUb1JlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0Jik7CiB9OwogCiBzdHJ1Y3QgV0VCQ09SRV9F
WFBPUlQgUmVkaXJlY3RBY3Rpb24gewogICAgIHN0cnVjdCBFeHRlbnNpb25QYXRoQWN0aW9uIHsK
ICAgICAgICAgU3RyaW5nIGV4dGVuc2lvblBhdGg7CiAKKyAgICAgICAgdWludDMyX3QgaGFzaCgp
IGNvbnN0IHsgcmV0dXJuIGV4dGVuc2lvblBhdGguaGFzaCgpOyB9CiAgICAgICAgIEV4dGVuc2lv
blBhdGhBY3Rpb24gaXNvbGF0ZWRDb3B5KCkgY29uc3QgeyByZXR1cm4geyBleHRlbnNpb25QYXRo
Lmlzb2xhdGVkQ29weSgpIH07IH0KICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEV4dGVu
c2lvblBhdGhBY3Rpb24mIG90aGVyKSBjb25zdCB7IHJldHVybiBvdGhlci5leHRlbnNpb25QYXRo
ID09IHRoaXMtPmV4dGVuc2lvblBhdGg7IH0KICAgICB9OwogICAgIHN0cnVjdCBSZWdleFN1YnN0
aXR1dGlvbkFjdGlvbiB7CiAgICAgICAgIFN0cmluZyByZWdleFN1YnN0aXR1dGlvbjsKIAorICAg
ICAgICB1aW50MzJfdCBoYXNoKCkgY29uc3QgeyByZXR1cm4gcmVnZXhTdWJzdGl0dXRpb24uaGFz
aCgpOyB9CiAgICAgICAgIFJlZ2V4U3Vic3RpdHV0aW9uQWN0aW9uIGlzb2xhdGVkQ29weSgpIGNv
bnN0IHsgcmV0dXJuIHsgcmVnZXhTdWJzdGl0dXRpb24uaXNvbGF0ZWRDb3B5KCkgfTsgfQogICAg
ICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVnZXhTdWJzdGl0dXRpb25BY3Rpb24mIG90aGVy
KSBjb25zdCB7IHJldHVybiBvdGhlci5yZWdleFN1YnN0aXR1dGlvbiA9PSB0aGlzLT5yZWdleFN1
YnN0aXR1dGlvbjsgfQogICAgIH07CkBAIC0xMjQsNiArMTc0LDcgQEAgc3RydWN0IFdFQkNPUkVf
RVhQT1JUIFJlZGlyZWN0QWN0aW9uIHsKICAgICAgICAgICAgICAgICBib29sIHJlcGxhY2VPbmx5
IHsgZmFsc2UgfTsKICAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWU7CiAKKyAgICAgICAgICAg
ICAgICB1aW50MzJfdCBoYXNoKCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZUhhc2goa2V5LCByZXBs
YWNlT25seSwgdmFsdWUpOyB9CiAgICAgICAgICAgICAgICAgc3RhdGljIEV4cGVjdGVkPFF1ZXJ5
S2V5VmFsdWUsIHN0ZDo6ZXJyb3JfY29kZT4gcGFyc2UoY29uc3QgSlNPTjo6VmFsdWUmKTsKICAg
ICAgICAgICAgICAgICBRdWVyeUtleVZhbHVlIGlzb2xhdGVkQ29weSgpIGNvbnN0OwogICAgICAg
ICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBRdWVyeUtleVZhbHVlJikgY29uc3Q7CkBA
IC0xMzUsNDcgKzE4Niw2NSBAQCBzdHJ1Y3QgV0VCQ09SRV9FWFBPUlQgUmVkaXJlY3RBY3Rpb24g
ewogICAgICAgICAgICAgVmVjdG9yPFF1ZXJ5S2V5VmFsdWU+IGFkZE9yUmVwbGFjZVBhcmFtczsK
ICAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IHJlbW92ZVBhcmFtczsKIAorICAgICAgICAgICAg
dWludDMyX3QgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIGNvbXB1dGVIYXNoKFZlY3Rvckhhc2hlcjo6
aGFzaChhZGRPclJlcGxhY2VQYXJhbXMpLCByZW1vdmVQYXJhbXMpOyB9CiAgICAgICAgICAgICBz
dGF0aWMgRXhwZWN0ZWQ8UXVlcnlUcmFuc2Zvcm0sIHN0ZDo6ZXJyb3JfY29kZT4gcGFyc2UoY29u
c3QgSlNPTjo6T2JqZWN0Jik7CiAgICAgICAgICAgICBRdWVyeVRyYW5zZm9ybSBpc29sYXRlZENv
cHkoKSBjb25zdDsKICAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBRdWVyeVRyYW5z
Zm9ybSYpIGNvbnN0OwogICAgICAgICAgICAgdm9pZCBzZXJpYWxpemUoVmVjdG9yPHVpbnQ4X3Q+
JikgY29uc3Q7CiAgICAgICAgICAgICBzdGF0aWMgUXVlcnlUcmFuc2Zvcm0gZGVzZXJpYWxpemUo
U3Bhbjxjb25zdCB1aW50OF90Pik7CiAgICAgICAgICAgICBzdGF0aWMgc2l6ZV90IHNlcmlhbGl6
ZWRMZW5ndGgoU3Bhbjxjb25zdCB1aW50OF90Pik7CisgICAgICAgICAgICB2b2lkIGFwcGx5VG9V
UkwoVVJMJikgY29uc3Q7CiAgICAgICAgIH07CiAKICAgICAgICAgU3RyaW5nIGZyYWdtZW50Owog
ICAgICAgICBTdHJpbmcgaG9zdDsKICAgICAgICAgU3RyaW5nIHBhc3N3b3JkOwogICAgICAgICBT
dHJpbmcgcGF0aDsKLSAgICAgICAgU3RyaW5nIHBvcnQ7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8
c3RkOjpvcHRpb25hbDx1aW50MTZfdD4+IHBvcnQ7CiAgICAgICAgIHVzaW5nIFF1ZXJ5VHJhbnNm
b3JtVmFyaWFudCA9IHN0ZDo6dmFyaWFudDxTdHJpbmcsIFF1ZXJ5VHJhbnNmb3JtPjsKICAgICAg
ICAgUXVlcnlUcmFuc2Zvcm1WYXJpYW50IHF1ZXJ5VHJhbnNmb3JtOwogICAgICAgICBTdHJpbmcg
c2NoZW1lOwogICAgICAgICBTdHJpbmcgdXNlcm5hbWU7CiAKLSAgICAgICAgc3RhdGljIEV4cGVj
dGVkPFVSTFRyYW5zZm9ybUFjdGlvbiwgc3RkOjplcnJvcl9jb2RlPiBwYXJzZShjb25zdCBKU09O
OjpPYmplY3QmLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mKTsKKyAgICAgICAgdWludDMyX3QgaGFz
aCgpIGNvbnN0IHsgcmV0dXJuIGNvbXB1dGVIYXNoKGZyYWdtZW50Lmhhc2goKSwgaG9zdC5oYXNo
KCksIHBhc3N3b3JkLmhhc2goKSwgcGF0aC5oYXNoKCksIHBvcnQsIFZhcmlhbnRIYXNoZXI6Omhh
c2gocXVlcnlUcmFuc2Zvcm0pLCBzY2hlbWUuaGFzaCgpLCB1c2VybmFtZS5oYXNoKCkpOyB9Cisg
ICAgICAgIHN0YXRpYyBFeHBlY3RlZDxVUkxUcmFuc2Zvcm1BY3Rpb24sIHN0ZDo6ZXJyb3JfY29k
ZT4gcGFyc2UoY29uc3QgSlNPTjo6T2JqZWN0JiwgY29uc3Qgc3RkOjpvcHRpb25hbDxIYXNoU2V0
PFN0cmluZz4+Jik7CiAgICAgICAgIFVSTFRyYW5zZm9ybUFjdGlvbiBpc29sYXRlZENvcHkoKSBj
b25zdDsKICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFVSTFRyYW5zZm9ybUFjdGlvbiYp
IGNvbnN0OwogICAgICAgICB2b2lkIHNlcmlhbGl6ZShWZWN0b3I8dWludDhfdD4mKSBjb25zdDsK
ICAgICAgICAgc3RhdGljIFVSTFRyYW5zZm9ybUFjdGlvbiBkZXNlcmlhbGl6ZShTcGFuPGNvbnN0
IHVpbnQ4X3Q+KTsKICAgICAgICAgc3RhdGljIHNpemVfdCBzZXJpYWxpemVkTGVuZ3RoKFNwYW48
Y29uc3QgdWludDhfdD4pOworICAgICAgICB2b2lkIGFwcGx5VG9VUkwoVVJMJikgY29uc3Q7CiAg
ICAgfTsKICAgICBzdHJ1Y3QgVVJMQWN0aW9uIHsKICAgICAgICAgU3RyaW5nIHVybDsKIAorICAg
ICAgICB1aW50MzJfdCBoYXNoKCkgY29uc3QgeyByZXR1cm4gdXJsLmhhc2goKTsgfQogICAgICAg
ICBVUkxBY3Rpb24gaXNvbGF0ZWRDb3B5KCkgY29uc3QgeyByZXR1cm4geyB1cmwuaXNvbGF0ZWRD
b3B5KCkgfTsgfQogICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVVJMQWN0aW9uJiBvdGhl
cikgY29uc3QgeyByZXR1cm4gb3RoZXIudXJsID09IHRoaXMtPnVybDsgfQogICAgIH07CiAKKyAg
ICBlbnVtIGNsYXNzIEhhc2hUYWJsZVR5cGUgOiB1aW50OF90IHsgRW1wdHksIERlbGV0ZWQsIEZ1
bGwgfSBoYXNoVGFibGVUeXBlOwogICAgIHVzaW5nIEFjdGlvblZhcmlhbnQgPSBzdGQ6OnZhcmlh
bnQ8RXh0ZW5zaW9uUGF0aEFjdGlvbiwgUmVnZXhTdWJzdGl0dXRpb25BY3Rpb24sIFVSTFRyYW5z
Zm9ybUFjdGlvbiwgVVJMQWN0aW9uPjsKICAgICBBY3Rpb25WYXJpYW50IGFjdGlvbjsKIAotICAg
IHN0YXRpYyBFeHBlY3RlZDxSZWRpcmVjdEFjdGlvbiwgc3RkOjplcnJvcl9jb2RlPiBwYXJzZShj
b25zdCBKU09OOjpPYmplY3QmLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mKTsKKyAgICBSZWRpcmVj
dEFjdGlvbihBY3Rpb25WYXJpYW50JiYgYWN0aW9uKQorICAgICAgICA6IGhhc2hUYWJsZVR5cGUo
SGFzaFRhYmxlVHlwZTo6RnVsbCkKKyAgICAgICAgLCBhY3Rpb24oV1RGTW92ZShhY3Rpb24pKSB7
IH0KKworICAgIGVudW0gRW1wdHlWYWx1ZVRhZyB7IEVtcHR5VmFsdWUgfTsKKyAgICBlbnVtIERl
bGV0ZWRWYWx1ZVRhZyB7IERlbGV0ZWRWYWx1ZSB9OworICAgIFJlZGlyZWN0QWN0aW9uKEVtcHR5
VmFsdWVUYWcpIDogaGFzaFRhYmxlVHlwZShIYXNoVGFibGVUeXBlOjpFbXB0eSkgeyB9CisgICAg
UmVkaXJlY3RBY3Rpb24oRGVsZXRlZFZhbHVlVGFnKSA6IGhhc2hUYWJsZVR5cGUoSGFzaFRhYmxl
VHlwZTo6RGVsZXRlZCkgeyB9CisgICAgYm9vbCBpc0RlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIGhhc2hUYWJsZVR5cGUgPT0gSGFzaFRhYmxlVHlwZTo6RGVsZXRlZDsgfQorICAgIHVpbnQz
Ml90IGhhc2goKSBjb25zdCB7IHJldHVybiBWYXJpYW50SGFzaGVyOjpoYXNoKGFjdGlvbik7IH0K
KworICAgIHN0YXRpYyBFeHBlY3RlZDxSZWRpcmVjdEFjdGlvbiwgc3RkOjplcnJvcl9jb2RlPiBw
YXJzZShjb25zdCBKU09OOjpPYmplY3QmLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEhhc2hTZXQ8U3Ry
aW5nPj4mKTsKICAgICBSZWRpcmVjdEFjdGlvbiBpc29sYXRlZENvcHkoKSBjb25zdDsKICAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgUmVkaXJlY3RBY3Rpb24mKSBjb25zdDsKICAgICB2b2lkIHNl
cmlhbGl6ZShWZWN0b3I8dWludDhfdD4mKSBjb25zdDsKICAgICBzdGF0aWMgUmVkaXJlY3RBY3Rp
b24gZGVzZXJpYWxpemUoU3Bhbjxjb25zdCB1aW50OF90Pik7CiAgICAgc3RhdGljIHNpemVfdCBz
ZXJpYWxpemVkTGVuZ3RoKFNwYW48Y29uc3QgdWludDhfdD4pOworICAgIHZvaWQgYXBwbHlUb1Jl
cXVlc3QoUmVzb3VyY2VSZXF1ZXN0Jik7CiB9OwogCiB1c2luZyBBY3Rpb25EYXRhID0gc3RkOjp2
YXJpYW50PApAQCAtMTkxLDQgKzI2MCwyNCBAQCB1c2luZyBBY3Rpb25EYXRhID0gc3RkOjp2YXJp
YW50PAogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9ucwogCituYW1l
c3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8V2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6OlJlZGlyZWN0QWN0aW9uPiB7CisgICAgdXNpbmcgQWN0aW9uID0gV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlJlZGlyZWN0QWN0aW9uOworICAgIHN0YXRpYyB1aW50
MzJfdCBoYXNoKGNvbnN0IEFjdGlvbiYgYWN0aW9uKSB7IHJldHVybiBhY3Rpb24uaGFzaCgpOyB9
CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQWN0aW9uJiBhLCBjb25zdCBBY3Rpb24mIGIp
IHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21w
YXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRy
YWl0czxXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6UmVkaXJlY3RBY3Rpb24+IDogcHVibGlj
IEN1c3RvbUhhc2hUcmFpdHM8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlJlZGlyZWN0QWN0
aW9uPiB7IH07CisKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpNb2RpZnlIZWFkZXJzQWN0aW9uPiB7CisgICAgdXNpbmcgQWN0aW9uID0g
V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Ok1vZGlmeUhlYWRlcnNBY3Rpb247CisgICAgc3Rh
dGljIHVpbnQzMl90IGhhc2goY29uc3QgQWN0aW9uJiBhY3Rpb24pIHsgcmV0dXJuIGFjdGlvbi5o
YXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBBY3Rpb24mIGEsIGNvbnN0IEFj
dGlvbiYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307Cit0ZW1wbGF0ZTw+IHN0cnVj
dCBIYXNoVHJhaXRzPFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpNb2RpZnlIZWFkZXJzQWN0
aW9uPiA6IHB1YmxpYyBDdXN0b21IYXNoVHJhaXRzPFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpNb2RpZnlIZWFkZXJzQWN0aW9uPiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCiAjZW5k
aWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3Bw
CmluZGV4IGY3ZDRiNDkyNjBkMDIyZTQwNmIwNWE5ZWViZmI0MjNjMWJjYmQwZTcuLmMwYTg4ZDMx
NzUzOGRiMjFlZjZmZTc3YmZhN2E3MmU4NmVlNTdkMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVy
LmNwcApAQCAtNzYsMTIgKzc2LDE2IEBAIHN0YXRpYyBWZWN0b3I8dW5zaWduZWQ+IHNlcmlhbGl6
ZUFjdGlvbnMoY29uc3QgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPiYgcnVsCiAgICAgdXNp
bmcgQWN0aW9uTG9jYXRpb24gPSB1aW50MzJfdDsKICAgICB1c2luZyBBY3Rpb25NYXAgPSBIYXNo
TWFwPFJlc291cmNlRmxhZ3MsIEFjdGlvbkxvY2F0aW9uLCBEZWZhdWx0SGFzaDxSZXNvdXJjZUZs
YWdzPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxSZXNvdXJjZUZsYWdzPj47
CiAgICAgdXNpbmcgU3RyaW5nQWN0aW9uTWFwID0gSGFzaE1hcDxzdGQ6OnBhaXI8U3RyaW5nLCBS
ZXNvdXJjZUZsYWdzPiwgQWN0aW9uTG9jYXRpb24sIERlZmF1bHRIYXNoPHN0ZDo6cGFpcjxTdHJp
bmcsIFJlc291cmNlRmxhZ3M+PiwgUGFpckhhc2hUcmFpdHM8SGFzaFRyYWl0czxTdHJpbmc+LCBX
VEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPFJlc291cmNlRmxhZ3M+Pj47CisgICAg
dXNpbmcgUmVkaXJlY3RBY3Rpb25NYXAgPSBIYXNoTWFwPHN0ZDo6cGFpcjxSZWRpcmVjdEFjdGlv
biwgUmVzb3VyY2VGbGFncz4sIEFjdGlvbkxvY2F0aW9uLCBEZWZhdWx0SGFzaDxzdGQ6OnBhaXI8
UmVkaXJlY3RBY3Rpb24sIFJlc291cmNlRmxhZ3M+PiwgUGFpckhhc2hUcmFpdHM8SGFzaFRyYWl0
czxSZWRpcmVjdEFjdGlvbj4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8UmVz
b3VyY2VGbGFncz4+PjsKKyAgICB1c2luZyBNb2RpZnlIZWFkZXJzQWN0aW9uTWFwID0gSGFzaE1h
cDxzdGQ6OnBhaXI8TW9kaWZ5SGVhZGVyc0FjdGlvbiwgUmVzb3VyY2VGbGFncz4sIEFjdGlvbkxv
Y2F0aW9uLCBEZWZhdWx0SGFzaDxzdGQ6OnBhaXI8TW9kaWZ5SGVhZGVyc0FjdGlvbiwgUmVzb3Vy
Y2VGbGFncz4+LCBQYWlySGFzaFRyYWl0czxIYXNoVHJhaXRzPE1vZGlmeUhlYWRlcnNBY3Rpb24+
LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPFJlc291cmNlRmxhZ3M+Pj47CiAg
ICAgQWN0aW9uTWFwIGJsb2NrTG9hZEFjdGlvbnNNYXA7CiAgICAgQWN0aW9uTWFwIGJsb2NrQ29v
a2llc0FjdGlvbnNNYXA7CiAgICAgUGVuZGluZ0Rpc3BsYXlOb25lQWN0aW9uc01hcCBjc3NEaXNw
bGF5Tm9uZUFjdGlvbnNNYXA7CiAgICAgQWN0aW9uTWFwIGlnbm9yZVByZXZpb3VzUnVsZUFjdGlv
bnNNYXA7CiAgICAgQWN0aW9uTWFwIG1ha2VIVFRQU0FjdGlvbnNNYXA7CiAgICAgU3RyaW5nQWN0
aW9uTWFwIG5vdGlmeUFjdGlvbnNNYXA7CisgICAgUmVkaXJlY3RBY3Rpb25NYXAgcmVkaXJlY3RB
Y3Rpb25NYXA7CisgICAgTW9kaWZ5SGVhZGVyc0FjdGlvbk1hcCBtb2RpZnlIZWFkZXJzQWN0aW9u
TWFwOwogCiAgICAgZm9yICh1bnNpZ25lZCBydWxlSW5kZXggPSAwOyBydWxlSW5kZXggPCBydWxl
TGlzdC5zaXplKCk7ICsrcnVsZUluZGV4KSB7CiAgICAgICAgIGNvbnN0IENvbnRlbnRFeHRlbnNp
b25SdWxlJiBydWxlID0gcnVsZUxpc3RbcnVsZUluZGV4XTsKQEAgLTExMSwzMSArMTE1LDM0IEBA
IHN0YXRpYyBWZWN0b3I8dW5zaWduZWQ+IHNlcmlhbGl6ZUFjdGlvbnMoY29uc3QgVmVjdG9yPENv
bnRlbnRFeHRlbnNpb25SdWxlPiYgcnVsCiAgICAgICAgIH0KIAogICAgICAgICBSZXNvdXJjZUZs
YWdzIGZsYWdzID0gcnVsZS50cmlnZ2VyKCkuZmxhZ3M7Ci0gICAgICAgIHVuc2lnbmVkIGFjdGlv
bkxvY2F0aW9uID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOwotICAgICAg
ICAKKwogICAgICAgICBhdXRvIGZpbmRPck1ha2VBY3Rpb25Mb2NhdGlvbiA9IFsmXSAoQWN0aW9u
TWFwJiBtYXApIHsKLSAgICAgICAgICAgIGNvbnN0IGF1dG8gZXhpc3RpbmdBY3Rpb24gPSBtYXAu
ZmluZChmbGFncyk7Ci0gICAgICAgICAgICBpZiAoZXhpc3RpbmdBY3Rpb24gPT0gbWFwLmVuZCgp
KSB7Ci0gICAgICAgICAgICAgICAgYWN0aW9uTG9jYXRpb24gPSBhY3Rpb25zLnNpemUoKTsKKyAg
ICAgICAgICAgIHJldHVybiBtYXAuZW5zdXJlKGZsYWdzLCBbJl0geworICAgICAgICAgICAgICAg
IGF1dG8gbmV3QWN0aW9uTG9jYXRpb24gPSBhY3Rpb25zLnNpemUoKTsKICAgICAgICAgICAgICAg
ICBhY3Rpb25zLmFwcGVuZChhY3Rpb25EYXRhLmluZGV4KCkpOwotICAgICAgICAgICAgICAgIG1h
cC5zZXQoZmxhZ3MsIGFjdGlvbkxvY2F0aW9uKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgICAgIGFjdGlvbkxvY2F0aW9uID0gZXhpc3RpbmdBY3Rpb24tPnZhbHVlOworICAgICAg
ICAgICAgICAgIHJldHVybiBuZXdBY3Rpb25Mb2NhdGlvbjsKKyAgICAgICAgICAgIH0pLml0ZXJh
dG9yLT52YWx1ZTsKICAgICAgICAgfTsKLSAgICAgICAgCi0gICAgICAgIGF1dG8gZmluZE9yTWFr
ZVN0cmluZ0FjdGlvbkxvY2F0aW9uID0gWyZdIChTdHJpbmdBY3Rpb25NYXAmIG1hcCwgY29uc3Qg
Tm90aWZ5QWN0aW9uJiBhY3Rpb25EYXRhKSB7Ci0gICAgICAgICAgICBjb25zdCBTdHJpbmcmIG5v
dGlmaWNhdGlvbiA9IGFjdGlvbkRhdGEuc3RyaW5nOwotICAgICAgICAgICAgYXV0byBleGlzdGlu
Z0FjdGlvbiA9IG1hcC5maW5kKHN0ZDo6bWFrZV9wYWlyKG5vdGlmaWNhdGlvbiwgZmxhZ3MpKTsK
LSAgICAgICAgICAgIGlmIChleGlzdGluZ0FjdGlvbiA9PSBtYXAuZW5kKCkpIHsKLSAgICAgICAg
ICAgICAgICBhY3Rpb25Mb2NhdGlvbiA9IGFjdGlvbnMuc2l6ZSgpOwotICAgICAgICAgICAgICAg
IGFjdGlvbnMuYXBwZW5kKFdURjo6YWx0ZXJuYXRpdmVJbmRleFY8Tm90aWZ5QWN0aW9uLCBBY3Rp
b25EYXRhPik7Ci0gICAgICAgICAgICAgICAgc2VyaWFsaXplU3RyaW5nKGFjdGlvbnMsIG5vdGlm
aWNhdGlvbik7Ci0gICAgICAgICAgICAgICAgbWFwLnNldChzdGQ6Om1ha2VfcGFpcihub3RpZmlj
YXRpb24sIGZsYWdzKSwgYWN0aW9uTG9jYXRpb24pOwotICAgICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICAgICAgYWN0aW9uTG9jYXRpb24gPSBleGlzdGluZ0FjdGlvbi0+dmFsdWU7CisKKyAg
ICAgICAgYXV0byBmaW5kT3JNYWtlTm90aWZ5QWN0aW9uTG9jYXRpb24gPSBbJl0gKGF1dG8mIG1h
cCwgY29uc3QgYXV0byYgYWN0aW9uKSB7CisgICAgICAgICAgICByZXR1cm4gbWFwLmVuc3VyZSh7
IGFjdGlvbi5zdHJpbmcsIGZsYWdzIH0sIFsmXSB7CisgICAgICAgICAgICAgICAgYXV0byBuZXdB
Y3Rpb25Mb2NhdGlvbiA9IGFjdGlvbnMuc2l6ZSgpOworICAgICAgICAgICAgICAgIGFjdGlvbnMu
YXBwZW5kKGFjdGlvbkRhdGEuaW5kZXgoKSk7CisgICAgICAgICAgICAgICAgYWN0aW9uLnNlcmlh
bGl6ZShhY3Rpb25zKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3QWN0aW9uTG9jYXRpb247
CisgICAgICAgICAgICB9KS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIH07Ci0gICAgICAgIAot
ICAgICAgICBzdGQ6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdIChjb25zdCBDU1NEaXNwbGF5
Tm9uZVNlbGVjdG9yQWN0aW9uJiBhY3Rpb25EYXRhKSB7CisKKyAgICAgICAgYXV0byBmaW5kT3JN
YWtlT3RoZXJBY3Rpb25Mb2NhdGlvbiA9IFsmXSAoYXV0byYgbWFwLCBjb25zdCBhdXRvJiBhY3Rp
b24pIHsKKyAgICAgICAgICAgIHJldHVybiBtYXAuZW5zdXJlKHsgYWN0aW9uLCBmbGFncyB9LCBb
Jl0geworICAgICAgICAgICAgICAgIGF1dG8gbmV3QWN0aW9uTG9jYXRpb24gPSBhY3Rpb25zLnNp
emUoKTsKKyAgICAgICAgICAgICAgICBhY3Rpb25zLmFwcGVuZChhY3Rpb25EYXRhLmluZGV4KCkp
OworICAgICAgICAgICAgICAgIGFjdGlvbi5zZXJpYWxpemUoYWN0aW9ucyk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG5ld0FjdGlvbkxvY2F0aW9uOworICAgICAgICAgICAgfSkuaXRlcmF0b3It
PnZhbHVlOworICAgICAgICB9OworCisgICAgICAgIGF1dG8gYWN0aW9uTG9jYXRpb24gPSBzdGQ6
OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdIChjb25zdCBDU1NEaXNwbGF5Tm9uZVNlbGVjdG9y
QWN0aW9uJiBhY3Rpb25EYXRhKSB7CiAgICAgICAgICAgICBjb25zdCBhdXRvIGFkZFJlc3VsdCA9
IGNzc0Rpc3BsYXlOb25lQWN0aW9uc01hcC5hZGQocnVsZS50cmlnZ2VyKCksIFBlbmRpbmdEaXNw
bGF5Tm9uZUFjdGlvbnMoKSk7CiAgICAgICAgICAgICBhdXRvJiBwZW5kaW5nU3RyaW5nQWN0aW9u
cyA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgICAgICBpZiAoIXBlbmRpbmdT
dHJpbmdBY3Rpb25zLmNvbWJpbmVkU2VsZWN0b3JzLmlzRW1wdHkoKSkKQEAgLTE0MywyMSArMTUw
LDIyIEBAIHN0YXRpYyBWZWN0b3I8dW5zaWduZWQ+IHNlcmlhbGl6ZUFjdGlvbnMoY29uc3QgVmVj
dG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPiYgcnVsCiAgICAgICAgICAgICBwZW5kaW5nU3RyaW5n
QWN0aW9ucy5jb21iaW5lZFNlbGVjdG9ycy5hcHBlbmQoYWN0aW9uRGF0YS5zdHJpbmcpOwogICAg
ICAgICAgICAgcGVuZGluZ1N0cmluZ0FjdGlvbnMuY2xpZW50TG9jYXRpb25zLmFwcGVuZChhY3Rp
b25Mb2NhdGlvbnMuc2l6ZSgpKTsKIAotICAgICAgICAgICAgYWN0aW9uTG9jYXRpb24gPSBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CisgICAgICAgICAgICAvLyByZXNvbHZl
UGVuZGluZ0Rpc3BsYXlOb25lQWN0aW9ucyB3aWxsIGZpbGwgdGhpcyBpbiBsYXRlci4KKyAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPEFjdGlvbkxvY2F0aW9uPjo6bWF4KCk7
CiAgICAgICAgIH0sIFsmXSAoY29uc3QgSWdub3JlUHJldmlvdXNSdWxlc0FjdGlvbiYpIHsKLSAg
ICAgICAgICAgIGZpbmRPck1ha2VBY3Rpb25Mb2NhdGlvbihpZ25vcmVQcmV2aW91c1J1bGVBY3Rp
b25zTWFwKTsKKyAgICAgICAgICAgIHJldHVybiBmaW5kT3JNYWtlQWN0aW9uTG9jYXRpb24oaWdu
b3JlUHJldmlvdXNSdWxlQWN0aW9uc01hcCk7CiAgICAgICAgIH0sIFsmXSAoY29uc3QgQmxvY2tM
b2FkQWN0aW9uJikgewotICAgICAgICAgICAgZmluZE9yTWFrZUFjdGlvbkxvY2F0aW9uKGJsb2Nr
TG9hZEFjdGlvbnNNYXApOworICAgICAgICAgICAgcmV0dXJuIGZpbmRPck1ha2VBY3Rpb25Mb2Nh
dGlvbihibG9ja0xvYWRBY3Rpb25zTWFwKTsKICAgICAgICAgfSwgWyZdIChjb25zdCBCbG9ja0Nv
b2tpZXNBY3Rpb24mKSB7Ci0gICAgICAgICAgICBmaW5kT3JNYWtlQWN0aW9uTG9jYXRpb24oYmxv
Y2tDb29raWVzQWN0aW9uc01hcCk7CisgICAgICAgICAgICByZXR1cm4gZmluZE9yTWFrZUFjdGlv
bkxvY2F0aW9uKGJsb2NrQ29va2llc0FjdGlvbnNNYXApOwogICAgICAgICB9LCBbJl0gKGNvbnN0
IE1ha2VIVFRQU0FjdGlvbiYpIHsKLSAgICAgICAgICAgIGZpbmRPck1ha2VBY3Rpb25Mb2NhdGlv
bihtYWtlSFRUUFNBY3Rpb25zTWFwKTsKKyAgICAgICAgICAgIHJldHVybiBmaW5kT3JNYWtlQWN0
aW9uTG9jYXRpb24obWFrZUhUVFBTQWN0aW9uc01hcCk7CiAgICAgICAgIH0sIFsmXSAoY29uc3Qg
Tm90aWZ5QWN0aW9uJiBhY3Rpb25EYXRhKSB7Ci0gICAgICAgICAgICBmaW5kT3JNYWtlU3RyaW5n
QWN0aW9uTG9jYXRpb24obm90aWZ5QWN0aW9uc01hcCwgYWN0aW9uRGF0YSk7Ci0gICAgICAgIH0s
IFsmXSAoY29uc3QgTW9kaWZ5SGVhZGVyc0FjdGlvbiYpIHsKLSAgICAgICAgICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQKLSAgICAgICAgfSwgWyZdIChjb25zdCBSZWRpcmVjdEFjdGlvbiYpIHsKLSAg
ICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQKKyAgICAgICAgICAgIHJldHVybiBmaW5kT3JN
YWtlTm90aWZ5QWN0aW9uTG9jYXRpb24obm90aWZ5QWN0aW9uc01hcCwgYWN0aW9uRGF0YSk7Cisg
ICAgICAgIH0sIFsmXSAoY29uc3QgTW9kaWZ5SGVhZGVyc0FjdGlvbiYgYWN0aW9uKSB7CisgICAg
ICAgICAgICByZXR1cm4gZmluZE9yTWFrZU90aGVyQWN0aW9uTG9jYXRpb24obW9kaWZ5SGVhZGVy
c0FjdGlvbk1hcCwgYWN0aW9uKTsKKyAgICAgICAgfSwgWyZdIChjb25zdCBSZWRpcmVjdEFjdGlv
biYgYWN0aW9uKSB7CisgICAgICAgICAgICByZXR1cm4gZmluZE9yTWFrZU90aGVyQWN0aW9uTG9j
YXRpb24ocmVkaXJlY3RBY3Rpb25NYXAsIGFjdGlvbik7CiAgICAgICAgIH0pLCBhY3Rpb25EYXRh
KTsKICAgICAgICAgYWN0aW9uTG9jYXRpb25zLmFwcGVuZChhY3Rpb25Mb2NhdGlvbik7CiAgICAg
fQpAQCAtMjY3LDcgKzI3NSw3IEBAIHN0ZDo6ZXJyb3JfY29kZSBjb21waWxlUnVsZUxpc3QoQ29u
dGVudEV4dGVuc2lvbkNvbXBpbGF0aW9uQ2xpZW50JiBjbGllbnQsIFN0cmluCiB7CiAjaWYgQVNT
RVJUX0VOQUJMRUQKICAgICBjYWxsT25NYWluVGhyZWFkKFtydWxlSlNPTiA9IHJ1bGVKU09OLmlz
b2xhdGVkQ29weSgpLCBwYXJzZWRSdWxlTGlzdCA9IHBhcnNlZFJ1bGVMaXN0Lmlzb2xhdGVkQ29w
eSgpXSB7Ci0gICAgICAgIEFTU0VSVChwYXJzZVJ1bGVMaXN0KHJ1bGVKU09OLCB7IH0pLnZhbHVl
KCkgPT0gcGFyc2VkUnVsZUxpc3QpOworICAgICAgICBBU1NFUlQocGFyc2VSdWxlTGlzdChydWxl
SlNPTiwgc3RkOjpudWxsb3B0KS52YWx1ZSgpID09IHBhcnNlZFJ1bGVMaXN0KTsKICAgICB9KTsK
ICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbkVycm9yLmNwcAppbmRleCBiZjY0M2QxOTliNDE4ZDkyMzc0ZWFm
MmI4MjZjOTM1NDhkZjU2NTY4Li5mZDFiZTgxMmFhOTY3NWM4NzBiZmY2ZGU4OGEyZGVhYTc5YmE2
MTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50
RXh0ZW5zaW9uRXJyb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25z
L0NvbnRlbnRFeHRlbnNpb25FcnJvci5jcHAKQEAgLTEwMyw4ICsxMDMsMjAgQEAgY29uc3Qgc3Rk
OjplcnJvcl9jYXRlZ29yeSYgY29udGVudEV4dGVuc2lvbkVycm9yQ2F0ZWdvcnkoKQogICAgICAg
ICAgICAgICAgIHJldHVybiAiQSByZWRpcmVjdCBleHRlbnNpb24gcGF0aCBtdXN0IHN0YXJ0IHdp
dGggYSBzbGFzaCI7CiAgICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNP
TlJlZGlyZWN0VVJMU2NoZW1lTm90QWxsb3dlZDoKICAgICAgICAgICAgICAgICByZXR1cm4gIkEg
cmVkaXJlY3QgdXJsIHNjaGVtZSBtdXN0IGJlIGluIHRoZSBzZXQgb2YgYWxsb3dlZCBzY2hlbWVz
IjsKKyAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RV
UkxTY2hlbWVJbnZhbGlkOgorICAgICAgICAgICAgICAgIHJldHVybiAiQSByZWRpcmVjdCB1ciBs
c2NoZW1lIG11c3QgYmUgYSB2YWxpZCBzY2hlbWUiOworICAgICAgICAgICAgY2FzZSBDb250ZW50
RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTFNjaGVtZXNTaG91bGROb3RJbmNsdWRlSmF2
YXNjcmlwdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIlRoZSBzZXQgb2YgYWxsb3dlZCByZWRp
cmVjdCBzY2hlbWVzIHNob3VsZG4ndCBpbmNsdWRlIGphdmFzY3JpcHQiOworICAgICAgICAgICAg
Y2FzZSBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTEludmFsaWQ6CisgICAg
ICAgICAgICAgICAgcmV0dXJuICJBIHJlZGlyZWN0IHVybCBtdXN0IGJlIHZhbGlkIjsKICAgICAg
ICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RJbnZhbGlkVHlw
ZToKICAgICAgICAgICAgICAgICByZXR1cm4gIkEgcmVkaXJlY3QgbXVzdCBoYXZlIGEgbWVtYmVy
IG5hbWVkIFwiZXh0ZW5zaW9uLXBhdGhcIiwgXCJyZWdleC1zdWJzdGl0dXRpb25cIiwgXCJ0cmFu
c2Zvcm1cIiBvciBcInVybFwiIjsKKyAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvbkVy
cm9yOjpKU09OUmVkaXJlY3RJbnZhbGlkUG9ydDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIkEg
cmVkaXJlY3QgcG9ydCBtdXN0IGJlIGVpdGhlciBlbXB0eSBvciBhIG51bWJlciBiZXR3ZWVuIDAg
YW5kIDY1NTM1LCBpbmNsdXNpdmUiOworICAgICAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9u
RXJyb3I6OkpTT05SZWRpcmVjdEludmFsaWRRdWVyeToKKyAgICAgICAgICAgICAgICByZXR1cm4g
IkEgcmVkaXJlY3QgcXVlcnkgbXVzdCBlaXRoZXIgYmUgZW1wdHkgb3IgYmVnaW4gd2l0aCAnPyci
OworICAgICAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdElu
dmFsaWRGcmFnbWVudDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIkEgcmVkaXJlY3QgZnJhZ21l
bnQgbXVzdCBlaXRoZXIgYmUgZW1wdHkgb3IgYmVnaW4gd2l0aCAnIyciOwogICAgICAgICAgICAg
Y2FzZSBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05Nb2RpZnlIZWFkZXJzSW52YWxpZE9wZXJh
dGlvbjoKICAgICAgICAgICAgICAgICByZXR1cm4gIkEgbW9kaWZ5LWhlYWRlcnMgb3BlcmF0aW9u
IG11c3QgaGF2ZSBhbiBvcGVyYXRpb24gdGhhdCBpcyBlaXRoZXIgXCJzZXRcIiwgXCJhcHBlbmRc
Iiwgb3IgXCJyZW1vdmVcIiI7CiAgICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25FcnJv
cjo6SlNPTk1vZGlmeUhlYWRlcnNJbmZvTm90QURpY3Rpb25hcnk6CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuaCBiL1Nv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5oCmlu
ZGV4IGU3MDdiNDZjYTM5MDNiYTE0MjJlN2E2ZmRmZGZkOWU0MzE0MGRmNzIuLjkyNjc1ZjQ4YWFk
ZTcwNDQ3OGEyYjY3ZDhiYTAxODNjZGFmNjgxMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5oCkBAIC02MCw4
ICs2MCwxNCBAQCBlbnVtIGNsYXNzIENvbnRlbnRFeHRlbnNpb25FcnJvciB7CiAKICAgICBKU09O
UmVkaXJlY3RNaXNzaW5nLAogICAgIEpTT05SZWRpcmVjdEV4dGVuc2lvblBhdGhEb2VzTm90U3Rh
cnRXaXRoU2xhc2gsCisgICAgSlNPTlJlZGlyZWN0VVJMU2NoZW1lSW52YWxpZCwKICAgICBKU09O
UmVkaXJlY3RVUkxTY2hlbWVOb3RBbGxvd2VkLAorICAgIEpTT05SZWRpcmVjdFVSTFNjaGVtZXNT
aG91bGROb3RJbmNsdWRlSmF2YXNjcmlwdCwKKyAgICBKU09OUmVkaXJlY3RVUkxJbnZhbGlkLAog
ICAgIEpTT05SZWRpcmVjdEludmFsaWRUeXBlLAorICAgIEpTT05SZWRpcmVjdEludmFsaWRQb3J0
LAorICAgIEpTT05SZWRpcmVjdEludmFsaWRRdWVyeSwKKyAgICBKU09OUmVkaXJlY3RJbnZhbGlk
RnJhZ21lbnQsCiAKICAgICBKU09OUmVtb3ZlUGFyYW1ldGVyc05vdFN0cmluZ0FycmF5LAogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5z
aW9uUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRF
eHRlbnNpb25QYXJzZXIuY3BwCmluZGV4IGNkNTIwNDMwNmFmMDk5YzNlNjU1YTMzMGQ5OWZhM2Zj
MjVmNmIxODguLjc5NWVkNjcwZGQwMjZlYmRjY2NiMjJkOWNiNzQwODAxZjgxOTMzYTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Q
YXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRF
eHRlbnNpb25QYXJzZXIuY3BwCkBAIC0xNzksNyArMTc5LDcgQEAgYm9vbCBpc1ZhbGlkQ1NTU2Vs
ZWN0b3IoY29uc3QgU3RyaW5nJiBzZWxlY3RvcikKICAgICByZXR1cm4gISFwYXJzZXIucGFyc2VT
ZWxlY3RvcihzZWxlY3Rvcik7CiB9CiAKLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPEV4cGVjdGVkPEFj
dGlvbiwgc3RkOjplcnJvcl9jb2RlPj4gbG9hZEFjdGlvbihjb25zdCBKU09OOjpPYmplY3QmIHJ1
bGVPYmplY3QsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1l
cykKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPEV4cGVjdGVkPEFjdGlvbiwgc3RkOjplcnJvcl9jb2Rl
Pj4gbG9hZEFjdGlvbihjb25zdCBKU09OOjpPYmplY3QmIHJ1bGVPYmplY3QsIGNvbnN0IHN0ZDo6
b3B0aW9uYWw8SGFzaFNldDxTdHJpbmc+PiYgYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcykKIHsK
ICAgICBhdXRvIGFjdGlvbk9iamVjdCA9IHJ1bGVPYmplY3QuZ2V0T2JqZWN0KCJhY3Rpb24iKTsK
ICAgICBpZiAoIWFjdGlvbk9iamVjdCkKQEAgLTIyNCw3ICsyMjQsNyBAQCBzdGF0aWMgc3RkOjpv
cHRpb25hbDxFeHBlY3RlZDxBY3Rpb24sIHN0ZDo6ZXJyb3JfY29kZT4+IGxvYWRBY3Rpb24oY29u
c3QgSlNPTjo6TwogICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJy
b3I6OkpTT05JbnZhbGlkQWN0aW9uVHlwZSk7CiB9CiAKLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPEV4
cGVjdGVkPENvbnRlbnRFeHRlbnNpb25SdWxlLCBzdGQ6OmVycm9yX2NvZGU+PiBsb2FkUnVsZShj
b25zdCBKU09OOjpPYmplY3QmIHJ1bGVPYmplY3QsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYWxs
b3dlZFJlZGlyZWN0VVJMU2NoZW1lcykKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPEV4cGVjdGVkPENv
bnRlbnRFeHRlbnNpb25SdWxlLCBzdGQ6OmVycm9yX2NvZGU+PiBsb2FkUnVsZShjb25zdCBKU09O
OjpPYmplY3QmIHJ1bGVPYmplY3QsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8SGFzaFNldDxTdHJpbmc+
PiYgYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcykKIHsKICAgICBhdXRvIHRyaWdnZXIgPSBsb2Fk
VHJpZ2dlcihydWxlT2JqZWN0KTsKICAgICBpZiAoIXRyaWdnZXIuaGFzX3ZhbHVlKCkpCkBAIC0y
MzksOCArMjM5LDExIEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEV4cGVjdGVkPENvbnRlbnRFeHRl
bnNpb25SdWxlLCBzdGQ6OmVycm9yX2NvZGU+PiBsb2FkUnVsZShjCiAgICAgcmV0dXJuIHsgeyB7
IFdURk1vdmUodHJpZ2dlci52YWx1ZSgpKSwgV1RGTW92ZShhY3Rpb24tPnZhbHVlKCkpIH0gfSB9
OwogfQogCi1zdGF0aWMgRXhwZWN0ZWQ8VmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPiwgc3Rk
OjplcnJvcl9jb2RlPiBsb2FkRW5jb2RlZFJ1bGVzKGNvbnN0IFN0cmluZyYgcnVsZUpTT04sIGNv
bnN0IEhhc2hTZXQ8U3RyaW5nPiYgYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcykKK3N0YXRpYyBF
eHBlY3RlZDxWZWN0b3I8Q29udGVudEV4dGVuc2lvblJ1bGU+LCBzdGQ6OmVycm9yX2NvZGU+IGxv
YWRFbmNvZGVkUnVsZXMoY29uc3QgU3RyaW5nJiBydWxlSlNPTiwgY29uc3Qgc3RkOjpvcHRpb25h
bDxIYXNoU2V0PFN0cmluZz4+JiBhbGxvd2VkUmVkaXJlY3RVUkxTY2hlbWVzKQogeworICAgIGlm
IChhbGxvd2VkUmVkaXJlY3RVUkxTY2hlbWVzICYmIGFsbG93ZWRSZWRpcmVjdFVSTFNjaGVtZXMt
PmNvbnRhaW5zKCJqYXZhc2NyaXB0IikpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChD
b250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTFNjaGVtZXNTaG91bGROb3RJbmNs
dWRlSmF2YXNjcmlwdCk7CisKICAgICBhdXRvIGRlY29kZWRSdWxlcyA9IEpTT046OlZhbHVlOjpw
YXJzZUpTT04ocnVsZUpTT04pOwogCiAgICAgaWYgKCFkZWNvZGVkUnVsZXMpCkBAIC0yNzIsNyAr
Mjc1LDcgQEAgc3RhdGljIEV4cGVjdGVkPFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uUnVsZT4sIHN0
ZDo6ZXJyb3JfY29kZT4gbG9hZEVuY29kZWRSdWxlcygKICAgICByZXR1cm4gcnVsZUxpc3Q7CiB9
CiAKLUV4cGVjdGVkPFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uUnVsZT4sIHN0ZDo6ZXJyb3JfY29k
ZT4gcGFyc2VSdWxlTGlzdChjb25zdCBTdHJpbmcmIHJ1bGVKU09OLCBjb25zdCBIYXNoU2V0PFN0
cmluZz4mIGFsbG93ZWRSZWRpcmVjdFVSTFNjaGVtZXMpCitFeHBlY3RlZDxWZWN0b3I8Q29udGVu
dEV4dGVuc2lvblJ1bGU+LCBzdGQ6OmVycm9yX2NvZGU+IHBhcnNlUnVsZUxpc3QoY29uc3QgU3Ry
aW5nJiBydWxlSlNPTiwgY29uc3Qgc3RkOjpvcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+JiBhbGxv
d2VkUmVkaXJlY3RVUkxTY2hlbWVzKQogewogI2lmIENPTlRFTlRfRVhURU5TSU9OU19QRVJGT1JN
QU5DRV9SRVBPUlRJTkcKICAgICBNb25vdG9uaWNUaW1lIGxvYWRFeHRlbnNpb25TdGFydFRpbWUg
PSBNb25vdG9uaWNUaW1lOjpub3coKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuaAppbmRleCBjYTcyOTQwZTc0
M2VhYjMzZTJkNDJjNTVkODQzNmQzMzIwYWE4MWRjLi5kODUzNzk4ODk1OWI5MTBhN2VlNzg0MzVk
N2RiMDY4ODA2NTZlNGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblBhcnNlci5oCkBAIC0zOCw3ICszOCwxMiBAQCBu
YW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgewogCiBjbGFzcyBDb250ZW50RXh0ZW5zaW9uUnVs
ZTsKIAotV0VCQ09SRV9FWFBPUlQgRXhwZWN0ZWQ8VmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxl
Piwgc3RkOjplcnJvcl9jb2RlPiBwYXJzZVJ1bGVMaXN0KGNvbnN0IFN0cmluZyYsIGNvbnN0IEhh
c2hTZXQ8U3RyaW5nPiYgYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcyk7CisvLyBBbiBhbGxvd2Vk
UmVkaXJlY3RVUkxTY2hlbWVzIG9mIHN0ZDo6bnVsbG9wdCBpbmRpY2F0ZXMgdGhhdCBhbGwgVVJM
IHNjaGVtZXMgYXJlIGFsbG93ZWQuCisvLyBUaGlzIGlzIHVzZWQgd2hlbiByZWNvbXBpbGluZyBz
b3VyY2UgZnJvbSBvbGRlciB2ZXJzaW9ucyBvZiBXS0NvbnRlbnRSdWxlTGlzdHMgb24gZGlzaywK
Ky8vIHdoZXJlIHdlIGRvbid0IGhhdmUgdGhlIGxpc3Qgb2YgYWxsb3dlZCBVUkwgc2NoZW1lcyBi
dXQgYXNzdW1lIHRoYXQgaWYgaXQgY29tcGlsZWQKKy8vIHN1Y2Nlc3NmdWxseSB0aGUgZmlyc3Qg
dGltZSB0aGVuIGFsbCB0aGUgc2NoZW1lcyB1c2VkIG11c3QgaGF2ZSBiZWVuIGFsbG93ZWQuCisv
LyBBbiBhbGxvd2VkUmVkaXJlY3RVUkxTY2hlbWVzIG9mIGFuIGVtcHR5IEhhc2hTZXQgaW5kaWNh
dGVzIHRoYXQgbm8gYWN0aXZlIGFjdGlvbnMgYXJlIGFsbG93ZWQuCitXRUJDT1JFX0VYUE9SVCBF
eHBlY3RlZDxWZWN0b3I8Q29udGVudEV4dGVuc2lvblJ1bGU+LCBzdGQ6OmVycm9yX2NvZGU+IHBh
cnNlUnVsZUxpc3QoY29uc3QgU3RyaW5nJiwgY29uc3Qgc3RkOjpvcHRpb25hbDxIYXNoU2V0PFN0
cmluZz4+JiBhbGxvd2VkUmVkaXJlY3RVUkxTY2hlbWVzKTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wg
aXNWYWxpZENTU1NlbGVjdG9yKGNvbnN0IFN0cmluZyYpOwogCiB9IC8vIG5hbWVzcGFjZSBDb250
ZW50RXh0ZW5zaW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHAKaW5kZXggNmZjYWNmNDIwNjFi
ZmU4OTdiNjZlMGQ0MTI2YjBmNmI2NmFhZjZmNC4uZmM4MmYyYmJjOWNhMGMxMTRmMmNjNzk0MWZl
NjFiNmQ4NjkyNWMwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwCkBAIC0yMjgsMTAgKzIy
OCwxMiBAQCBDb250ZW50UnVsZUxpc3RSZXN1bHRzIENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6
cHJvY2Vzc0NvbnRlbnRSdWxlTGlzdHNGb3JMb2FkKAogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0sIFsmXShjb25zdCBJZ25vcmVQcmV2aW91c1J1bGVzQWN0aW9uJikgewogICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9LCBb
Jl0gKGNvbnN0IE1vZGlmeUhlYWRlcnNBY3Rpb24mKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklY
TUU6IEltcGxlbWVudAotICAgICAgICAgICAgfSwgWyZdIChjb25zdCBSZWRpcmVjdEFjdGlvbiYp
IHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50CisgICAgICAgICAgICB9LCBb
Jl0gKGNvbnN0IE1vZGlmeUhlYWRlcnNBY3Rpb24mIGFjdGlvbikgeworICAgICAgICAgICAgICAg
IGlmIChpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIuYWxsb3dzQWN0aXZlQ29udGVudFJ1bGVMaXN0
QWN0aW9uc0ZvclVSTCh1cmwpKQorICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnN1bW1hcnku
bW9kaWZ5SGVhZGVyc0FjdGlvbnMuYXBwZW5kKGFjdGlvbik7CisgICAgICAgICAgICB9LCBbJl0g
KGNvbnN0IFJlZGlyZWN0QWN0aW9uJiBhY3Rpb24pIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5p
dGlhdGluZ0RvY3VtZW50TG9hZGVyLmFsbG93c0FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNG
b3JVUkwodXJsKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5zdW1tYXJ5LnJlZGlyZWN0
QWN0aW9ucy5hcHBlbmQoYWN0aW9uKTsKICAgICAgICAgICAgIH0pLCBhY3Rpb24uZGF0YSgpKTsK
ICAgICAgICAgfQogCkBAIC0yOTIsOSArMjk0LDkgQEAgQ29udGVudFJ1bGVMaXN0UmVzdWx0cyBD
b250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OnByb2Nlc3NDb250ZW50UnVsZUxpc3RzRm9yUGluZ0wK
ICAgICAgICAgICAgIH0sIFsmXShjb25zdCBJZ25vcmVQcmV2aW91c1J1bGVzQWN0aW9uJikgewog
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAg
ICB9LCBbJl0gKGNvbnN0IE1vZGlmeUhlYWRlcnNBY3Rpb24mKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gRklYTUU6IEltcGxlbWVudAorICAgICAgICAgICAgICAgIC8vIFdlIGN1cnJlbnRseSBoYXZl
IG5vdCBpbXBsZW1lbnRlZCBhY3RpdmUgYWN0aW9ucyBmcm9tIHRoZSBuZXR3b3JrIHByb2Nlc3Mg
KENPUlMgcHJlZmxpZ2h0KS4KICAgICAgICAgICAgIH0sIFsmXSAoY29uc3QgUmVkaXJlY3RBY3Rp
b24mKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudAorICAgICAgICAgICAg
ICAgIC8vIFdlIGN1cnJlbnRseSBoYXZlIG5vdCBpbXBsZW1lbnRlZCBhY3RpdmUgYWN0aW9ucyBm
cm9tIHRoZSBuZXR3b3JrIHByb2Nlc3MgKENPUlMgcHJlZmxpZ2h0KS4KICAgICAgICAgICAgIH0p
LCBhY3Rpb24uZGF0YSgpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTMyNSw2ICszMjcsMTIgQEAg
dm9pZCBhcHBseVJlc3VsdHNUb1JlcXVlc3QoQ29udGVudFJ1bGVMaXN0UmVzdWx0cyYmIHJlc3Vs
dHMsIFBhZ2UqIHBhZ2UsIFJlc291cmMKICAgICAgICAgcmVxdWVzdC5zZXRVUkwobmV3VVJMKTsK
ICAgICB9CiAKKyAgICBmb3IgKGF1dG8mIGFjdGlvbiA6IHJlc3VsdHMuc3VtbWFyeS5tb2RpZnlI
ZWFkZXJzQWN0aW9ucykKKyAgICAgICAgYWN0aW9uLmFwcGx5VG9SZXF1ZXN0KHJlcXVlc3QpOwor
CisgICAgZm9yIChhdXRvJiBhY3Rpb24gOiByZXN1bHRzLnN1bW1hcnkucmVkaXJlY3RBY3Rpb25z
KQorICAgICAgICBhY3Rpb24uYXBwbHlUb1JlcXVlc3QocmVxdWVzdCk7CisKICAgICBpZiAocGFn
ZSAmJiByZXN1bHRzLnNob3VsZE5vdGlmeUFwcGxpY2F0aW9uKCkpIHsKICAgICAgICAgcmVzdWx0
cy5yZXN1bHRzLnJlbW92ZUFsbE1hdGNoaW5nKFtdKGNvbnN0IGF1dG8mIHBhaXIpIHsKICAgICAg
ICAgICAgIHJldHVybiAhcGFpci5zZWNvbmQuc2hvdWxkTm90aWZ5QXBwbGljYXRpb24oKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRSdWxlTGlz
dFJlc3VsdHMuaCBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRSdWxl
TGlzdFJlc3VsdHMuaAppbmRleCAwZjQwM2MyZDA4NTVlM2YzNmE2YzgzMmY0MDY3NzEzYWYwNmQ3
Yjg0Li5jZmFiOTY5MTZmNDg4NzgzYjFhYjIxYTljYjk5OWE3OWI3OTg4OWNiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50UnVsZUxpc3RSZXN1bHRz
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudFJ1bGVMaXN0
UmVzdWx0cy5oCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAi
Q29udGVudEV4dGVuc2lvbkFjdGlvbnMuaCIKICNpbmNsdWRlIDx3dGYvS2V5VmFsdWVQYWlyLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgpAQCAtNTQsNiArNTUsOCBAQCBzdHJ1Y3QgQ29udGVudFJ1bGVMaXN0UmVzdWx0cyB7CiAgICAg
ICAgIGJvb2wgbWFkZUhUVFBTIHsgZmFsc2UgfTsKICAgICAgICAgYm9vbCBibG9ja2VkQ29va2ll
cyB7IGZhbHNlIH07CiAgICAgICAgIGJvb2wgaGFzTm90aWZpY2F0aW9ucyB7IGZhbHNlIH07Cisg
ICAgICAgIFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6TW9kaWZ5SGVhZGVyc0FjdGlvbj4gbW9k
aWZ5SGVhZGVyc0FjdGlvbnM7CisgICAgICAgIFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6UmVk
aXJlY3RBY3Rpb24+IHJlZGlyZWN0QWN0aW9uczsKIAogICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFN1bW1hcnk+IGRlY29kZShEZWNvZGVy
Jik7CkBAIC0xNjgsNiArMTcxLDggQEAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gYXV0byBDb250
ZW50UnVsZUxpc3RSZXN1bHRzOjpTdW1tYXJ5OjpkZWNvZGUoRGVjb2RlciYgZGUKICAgICAgICAg
V1RGTW92ZSgqbWFkZUhUVFBTKSwKICAgICAgICAgV1RGTW92ZSgqYmxvY2tlZENvb2tpZXMpLAog
ICAgICAgICBXVEZNb3ZlKCpoYXNOb3RpZmljYXRpb25zKSwKKyAgICAgICAgeyB9LCAvLyBtb2Rp
ZnlIZWFkZXJzQWN0aW9ucyBhbmQgcmVkaXJlY3RBY3Rpb25zIGhhdmUgbm8gbmVlZCB0byBiZSBz
ZXJpYWxpemVkIHRvIGFub3RoZXIgcHJvY2Vzcy4KKyAgICAgICAgeyB9CiAgICAgfX07CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKaW5kZXggNjliMzA5Mzky
YTA1Y2U0ZTYyYzdkYzU2NTNjMDI3Yzc4NGM0ZTk5ZC4uNjU4ZTg0ZGI4ODkxMTc4ZDU5NGYzNGJk
MzlhNmMzM2FkOGM1OTFjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hl
ZXRDb250ZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50
cy5jcHAKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5j
bHVkZSAiQ2FjaGVQb2xpY3kuaCIKICNpbmNsdWRlICJDYWNoZWRDU1NTdHlsZVNoZWV0LmgiCi0j
aW5jbHVkZSAiQ29udGVudFJ1bGVMaXN0UmVzdWx0cy5oIgogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgpAQCAtNDQsNiAr
NDMsNyBAQAogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCisjaW5jbHVkZSAiQ29udGVudFJ1bGVMaXN0UmVzdWx0cy5oIgogI2luY2x1ZGUgIlVz
ZXJDb250ZW50Q29udHJvbGxlci5oIgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9j
dW1lbnRMb2FkZXIuY3BwCmluZGV4IDM5Y2U1ZmQ0MWQ2Njk5OTI4ZDhiOTAwY2I0ZjU4Yzk2Mjdh
Njk1ZGUuLmZmZjM5ZDA4OTRiZWM1YTkyMTMwNTEzNjg0NWMxNzE1Yjk5MDIzYWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcApAQCAtOTQsNiArOTQsNyBAQAogI2lu
Y2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rl
ci5oIgogI2luY2x1ZGUgIlVzZXJDb250ZW50UHJvdmlkZXIuaCIKKyNpbmNsdWRlICJVc2VyQ29u
dGVudFVSTFBhdHRlcm4uaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUg
PHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgpAQCAtMTczLDcgKzE3NCwxMCBAQCBEb2N1bWVudExvYWRlcjo6RG9jdW1lbnRMb2FkZXIoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdWJzdGl0dXRlRAogICAgICwgbV9v
cmlnaW5hbFN1YnN0aXR1dGVEYXRhV2FzVmFsaWQoc3Vic3RpdHV0ZURhdGEuaXNWYWxpZCgpKQog
ICAgICwgbV9zdWJzdGl0dXRlUmVzb3VyY2VEZWxpdmVyeVRpbWVyKCp0aGlzLCAmRG9jdW1lbnRM
b2FkZXI6OnN1YnN0aXR1dGVSZXNvdXJjZURlbGl2ZXJ5VGltZXJGaXJlZCkKICAgICAsIG1fYXBw
bGljYXRpb25DYWNoZUhvc3QobWFrZVVuaXF1ZTxBcHBsaWNhdGlvbkNhY2hlSG9zdD4oKnRoaXMp
KQorICAgICwgbV9hY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25QYXR0ZXJucyhWZWN0b3I8VXNl
ckNvbnRlbnRVUkxQYXR0ZXJuPigpKQogeworICAgIC8vIEZJWE1FOiBWZWN0b3IgZGVmYXVsdCBj
b25zdHJ1Y3RvciBzaG91bGRuJ3QgbmVlZCB0byBrbm93IHRoZSBzaXplIG9mIHRoZSBlbGVtZW50
cywKKyAgICAvLyBzbyBtX2FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvblBhdHRlcm5zIG91Z2h0
IHRvIGJlIGFibGUgdG8gYmUgaW5pdGlhbGl6ZWQgd2l0aCBhbiBpbml0aWFsaXplciBsaXN0IGlu
IHRoZSBoZWFkZXIgd2l0aG91dCBpbmNsdWRpbmcgVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmguCiB9
CiAKIEZyYW1lTG9hZGVyKiBEb2N1bWVudExvYWRlcjo6ZnJhbWVMb2FkZXIoKSBjb25zdApAQCAt
MjQzMyw2ICsyNDM3LDM0IEBAIFJlc291cmNlRXJyb3IgRG9jdW1lbnRMb2FkZXI6OmNvbnRlbnRG
aWx0ZXJEaWRCbG9jayhDb250ZW50RmlsdGVyVW5ibG9ja0hhbmRsZXIKIH0KICNlbmRpZiAvLyBF
TkFCTEUoQ09OVEVOVF9GSUxURVJJTkcpCiAKK3ZvaWQgRG9jdW1lbnRMb2FkZXI6OnNldEFjdGl2
ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNQYXR0ZXJucyhjb25zdCBzdGQ6Om9wdGlvbmFsPEhhc2hT
ZXQ8U3RyaW5nPj4mIHBhdHRlcm5zKQoreworICAgIGlmICghcGF0dGVybnMpIHsKKyAgICAgICAg
bV9hY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25QYXR0ZXJucyA9IHN0ZDo6bnVsbG9wdDsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBWZWN0b3I8V2ViQ29yZTo6VXNlckNvbnRlbnRVUkxQ
YXR0ZXJuPiBwYXR0ZXJuVmVjdG9yOworICAgIHBhdHRlcm5WZWN0b3IucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShwYXR0ZXJucy0+c2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIHBhdHRlcm5TdHJpbmcg
OiAqcGF0dGVybnMpIHsKKyAgICAgICAgV2ViQ29yZTo6VXNlckNvbnRlbnRVUkxQYXR0ZXJuIHBh
cnNlZFBhdHRlcm4ocGF0dGVyblN0cmluZyk7CisgICAgICAgIGlmIChwYXJzZWRQYXR0ZXJuLmlz
VmFsaWQoKSkKKyAgICAgICAgICAgIHBhdHRlcm5WZWN0b3IudW5jaGVja2VkQXBwZW5kKFdURk1v
dmUocGFyc2VkUGF0dGVybikpOworICAgIH0KKworICAgIG1fYWN0aXZlQ29udGVudFJ1bGVMaXN0
QWN0aW9uUGF0dGVybnMgPSBXVEZNb3ZlKHBhdHRlcm5WZWN0b3IpOworfQorCitib29sIERvY3Vt
ZW50TG9hZGVyOjphbGxvd3NBY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zRm9yVVJMKGNvbnN0
IFVSTCYgdXJsKSBjb25zdAoreworICAgIGlmICghbV9hY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rp
b25QYXR0ZXJucykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZm9yIChjb25zdCBhdXRvJiBw
YXR0ZXJuIDogKm1fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uUGF0dGVybnMpIHsKKyAgICAg
ICAgaWYgKHBhdHRlcm4ubWF0Y2hlcyh1cmwpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
dW5kZWYgUEFHRV9JRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50
TG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaAppbmRleCA0
ZmJmZDcxMjAxOTlkMjdjZmE4N2JkZDU5NjczNzEwNmJjZTA4ZGIwLi4wNGU2NjJhNWUxMGU2ZmI0
YWU2YTY2ZmQxNzY5ZDg2OWEyNzg1ZmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRG9jdW1lbnRMb2FkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRM
b2FkZXIuaApAQCAtODcsNiArODcsNyBAQCBjbGFzcyBTaGFyZWRCdWZmZXI7CiBjbGFzcyBTV0Ns
aWVudENvbm5lY3Rpb247CiBjbGFzcyBTdWJyZXNvdXJjZUxvYWRlcjsKIGNsYXNzIFN1YnN0aXR1
dGVSZXNvdXJjZTsKK2NsYXNzIFVzZXJDb250ZW50VVJMUGF0dGVybjsKIAogZW51bSBjbGFzcyBT
aG91bGRDb250aW51ZTsKIApAQCAtMzAxLDYgKzMwMiw5IEBAIHB1YmxpYzoKICAgICBib29sIHVz
ZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX3VzZXJDb250ZW50
RXh0ZW5zaW9uc0VuYWJsZWQ7IH0KICAgICB2b2lkIHNldFVzZXJDb250ZW50RXh0ZW5zaW9uc0Vu
YWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fdXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZCA9IGVu
YWJsZWQ7IH0KIAorICAgIGJvb2wgYWxsb3dzQWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc0Zv
clVSTChjb25zdCBVUkwmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEFjdGl2
ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNQYXR0ZXJucyhjb25zdCBzdGQ6Om9wdGlvbmFsPEhhc2hT
ZXQ8U3RyaW5nPj4mKTsKKwogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCiAgICAgRGV2
aWNlT3JpZW50YXRpb25Pck1vdGlvblBlcm1pc3Npb25TdGF0ZSBkZXZpY2VPcmllbnRhdGlvbkFu
ZE1vdGlvbkFjY2Vzc1N0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9kZXZpY2VPcmllbnRhdGlvbkFu
ZE1vdGlvbkFjY2Vzc1N0YXRlOyB9CiAgICAgdm9pZCBzZXREZXZpY2VPcmllbnRhdGlvbkFuZE1v
dGlvbkFjY2Vzc1N0YXRlKERldmljZU9yaWVudGF0aW9uT3JNb3Rpb25QZXJtaXNzaW9uU3RhdGUg
c3RhdGUpIHsgbV9kZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc1N0YXRlID0gc3RhdGU7
IH0KQEAgLTY1MSw2ICs2NTUsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pZGVtcG90ZW50TW9k
ZUF1dG9zaXppbmdPbmx5SG9ub3JzUGVyY2VudGFnZXMgeyBmYWxzZSB9OwogICAgIFN0cmluZyBt
X2N1c3RvbU5hdmlnYXRvclBsYXRmb3JtOwogICAgIGJvb2wgbV91c2VyQ29udGVudEV4dGVuc2lv
bnNFbmFibGVkIHsgdHJ1ZSB9OworICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFVzZXJDb250ZW50
VVJMUGF0dGVybj4+IG1fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uUGF0dGVybnM7CiAjaWYg
RU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKICAgICBEZXZpY2VPcmllbnRhdGlvbk9yTW90aW9u
UGVybWlzc2lvblN0YXRlIG1fZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NTdGF0ZSB7
IERldmljZU9yaWVudGF0aW9uT3JNb3Rpb25QZXJtaXNzaW9uU3RhdGU6OlByb21wdCB9OwogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
UmVxdWVzdEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZVJlcXVlc3RCYXNlLmNwcAppbmRleCA2YzVmODY1YzVjMjdiNzI0NzkxNDExOTk0NmU2ODFjODNl
ZDE5MTY1Li5lNmU3ZmEyZWQyNDBlNWMwYWE5YmE2YWVmNzE5ODJhNGMyMDU2MjkzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0
QmFzZS5jcHAKQEAgLTYwMSw2ICs2MDEsMTUgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpz
ZXRIVFRQSGVhZGVyRmllbGRzKEhUVFBIZWFkZXJNYXAgaGVhZGVyRmllbGRzKQogICAgIG1fcGxh
dGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOwogfQogCit2b2lkIFJlc291cmNlUmVxdWVzdEJh
c2U6OnJlbW92ZUhUVFBIZWFkZXJGaWVsZChjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgdXBk
YXRlUmVzb3VyY2VSZXF1ZXN0KCk7CisKKyAgICBtX2h0dHBIZWFkZXJGaWVsZHMucmVtb3ZlKG5h
bWUpOworCisgICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7Cit9CisKICNpZiBV
U0UoU1lTVEVNX1BSRVZJRVcpCiAKIGJvb2wgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6aXNTeXN0ZW1Q
cmV2aWV3KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgKaW5kZXggMjQ1ZTU5OWE5Y2Y3OGM2MmQ0NWRmYjlhY2Uz
MDRhMTlhOTJlZGRjOC4uNDY0M2I3YWJlNDNhODU4N2ZlMWIyODYxNjVmZmEzYWRmZDgyZTRkYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVl
c3RCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJl
cXVlc3RCYXNlLmgKQEAgLTEwNSw2ICsxMDUsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBhZGRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWUsIGNvbnN0IFN0cmluZyYg
dmFsdWUpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkSFRUUEhlYWRlckZpZWxkKGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBhZGRIVFRQSGVhZGVyRmllbGRJZk5vdFByZXNlbnQoSFRUUEhlYWRlck5hbWUsIGNvbnN0
IFN0cmluZyYpOworICAgIHZvaWQgcmVtb3ZlSFRUUEhlYWRlckZpZWxkKGNvbnN0IFN0cmluZyYg
bmFtZSk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhhc0hUVFBIZWFkZXJGaWVsZChIVFRQ
SGVhZGVyTmFtZSkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dl
YnNpdGVQb2xpY2llc0RhdGEuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZVBvbGlj
aWVzRGF0YS5jcHAKaW5kZXggMzhhZmJiNmE4OTZkNDVmOTdmNTY0NWIzMmZjNDdmMmFiY2MyNzBi
Yy4uNjU0YTE0MTlkNmM5YmUzZDMyNmJjMzdkMmQyODZhMDUzOGE0N2NlMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZVBvbGljaWVzRGF0YS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvV2Vic2l0ZVBvbGljaWVzRGF0YS5jcHAKQEAgLTM2LDYgKzM2LDcgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiB2b2lkIFdlYnNpdGVQb2xpY2llc0RhdGE6OmVuY29kZShJUEM6
OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBjb250ZW50QmxvY2tl
cnNFbmFibGVkOworICAgIGVuY29kZXIgPDwgYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc1Bh
dHRlcm5zOwogICAgIGVuY29kZXIgPDwgYXV0b3BsYXlQb2xpY3k7CiAjaWYgRU5BQkxFKERFVklD
RV9PUklFTlRBVElPTikKICAgICBlbmNvZGVyIDw8IGRldmljZU9yaWVudGF0aW9uQW5kTW90aW9u
QWNjZXNzU3RhdGU7CkBAIC02Miw3ICs2MywxMiBAQCBzdGQ6Om9wdGlvbmFsPFdlYnNpdGVQb2xp
Y2llc0RhdGE+IFdlYnNpdGVQb2xpY2llc0RhdGE6OmRlY29kZShJUEM6OkRlY29kZXImIGRlYwog
ICAgIGRlY29kZXIgPj4gY29udGVudEJsb2NrZXJzRW5hYmxlZDsKICAgICBpZiAoIWNvbnRlbnRC
bG9ja2Vyc0VuYWJsZWQpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgCisKKyAg
ICBzdGQ6Om9wdGlvbmFsPHN0ZDo6b3B0aW9uYWw8SGFzaFNldDxTdHJpbmc+Pj4gYWN0aXZlQ29u
dGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5zOworICAgIGRlY29kZXIgPj4gYWN0aXZlQ29udGVu
dFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5zOworICAgIGlmICghYWN0aXZlQ29udGVudFJ1bGVMaXN0
QWN0aW9uc1BhdHRlcm5zKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCiAgICAgc3Rk
OjpvcHRpb25hbDxXZWJzaXRlQXV0b3BsYXlQb2xpY3k+IGF1dG9wbGF5UG9saWN5OwogICAgIGRl
Y29kZXIgPj4gYXV0b3BsYXlQb2xpY3k7CiAgICAgaWYgKCFhdXRvcGxheVBvbGljeSkKQEAgLTE0
Nyw2ICsxNTMsNyBAQCBzdGQ6Om9wdGlvbmFsPFdlYnNpdGVQb2xpY2llc0RhdGE+IFdlYnNpdGVQ
b2xpY2llc0RhdGE6OmRlY29kZShJUEM6OkRlY29kZXImIGRlYwogCiAgICAgcmV0dXJuIHsgewog
ICAgICAgICBXVEZNb3ZlKCpjb250ZW50QmxvY2tlcnNFbmFibGVkKSwKKyAgICAgICAgV1RGTW92
ZSgqYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5zKSwKICAgICAgICAgV1RGTW92
ZSgqYWxsb3dlZEF1dG9wbGF5UXVpcmtzKSwKICAgICAgICAgV1RGTW92ZSgqYXV0b3BsYXlQb2xp
Y3kpLAogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCkBAIC0xODMsNiArMTkwLDggQEAg
dm9pZCBXZWJzaXRlUG9saWNpZXNEYXRhOjphcHBseVRvRG9jdW1lbnRMb2FkZXIoV2Vic2l0ZVBv
bGljaWVzRGF0YSYmIHdlYnNpdGVQb2wKICAgICBpZiAoZG9jdW1lbnRMb2FkZXIudXNlckNvbnRl
bnRFeHRlbnNpb25zRW5hYmxlZCgpKQogICAgICAgICBkb2N1bWVudExvYWRlci5zZXRVc2VyQ29u
dGVudEV4dGVuc2lvbnNFbmFibGVkKHdlYnNpdGVQb2xpY2llcy5jb250ZW50QmxvY2tlcnNFbmFi
bGVkKTsKIAorICAgIGRvY3VtZW50TG9hZGVyLnNldEFjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlv
bnNQYXR0ZXJucyh3ZWJzaXRlUG9saWNpZXMuYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc1Bh
dHRlcm5zKTsKKwogICAgIE9wdGlvblNldDxXZWJDb3JlOjpBdXRvcGxheVF1aXJrPiBxdWlya3M7
CiAgICAgY29uc3QgYXV0byYgYWxsb3dlZFF1aXJrcyA9IHdlYnNpdGVQb2xpY2llcy5hbGxvd2Vk
QXV0b3BsYXlRdWlya3M7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJzaXRlUG9saWNpZXNEYXRhLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlUG9saWNp
ZXNEYXRhLmgKaW5kZXggZTBmNjc5NDVlNzVjNmEzMzU1YzFkNDkzMWM5YTBkYTE4YWJhZmU1YS4u
YmJiZjUxYTNlZWEwMzI0YWExMzY2ZjhmZGVmNDg1YTViM2ZmMDU2ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZVBvbGljaWVzRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYnNpdGVQb2xpY2llc0RhdGEuaApAQCAtNTMsNiArNTMsNyBAQCBzdHJ1Y3Qg
V2Vic2l0ZVBvbGljaWVzRGF0YSB7CiAgICAgc3RhdGljIHZvaWQgYXBwbHlUb0RvY3VtZW50TG9h
ZGVyKFdlYnNpdGVQb2xpY2llc0RhdGEmJiwgV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXImKTsKIAog
ICAgIGJvb2wgY29udGVudEJsb2NrZXJzRW5hYmxlZCB7IHRydWUgfTsKKyAgICBzdGQ6Om9wdGlv
bmFsPEhhc2hTZXQ8U3RyaW5nPj4gYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5z
IHsgSGFzaFNldDxTdHJpbmc+KCkgfTsKICAgICBPcHRpb25TZXQ8V2Vic2l0ZUF1dG9wbGF5UXVp
cms+IGFsbG93ZWRBdXRvcGxheVF1aXJrczsKICAgICBXZWJzaXRlQXV0b3BsYXlQb2xpY3kgYXV0
b3BsYXlQb2xpY3kgeyBXZWJzaXRlQXV0b3BsYXlQb2xpY3k6OkRlZmF1bHQgfTsKICNpZiBFTkFC
TEUoREVWSUNFX09SSUVOVEFUSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAKaW5kZXggZWZiODA3MmI5NzM1MjRk
NGVmNmE2ZTg3Y2EzY2RjZTM0NzFkMmFmNS4uZWU2MmUxMDczOWFmOGZmMDQ1ZjZkZDZkZTE5OTNl
NzVkNjFjODY1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNv
bnRlbnRSdWxlTGlzdFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
QVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuY3BwCkBAIC00OTEsNyArNDkxLDcgQEAgdm9pZCBDb250
ZW50UnVsZUxpc3RTdG9yZTo6bG9va3VwQ29udGVudFJ1bGVMaXN0KGNvbnN0IFdURjo6U3RyaW5n
JiBpZGVudGlmaWVyLAogICAgICAgICBpZiAoY29udGVudFJ1bGVMaXN0LT5tZXRhRGF0YS52ZXJz
aW9uICE9IENvbnRlbnRSdWxlTGlzdFN0b3JlOjpDdXJyZW50Q29udGVudFJ1bGVMaXN0RmlsZVZl
cnNpb24pIHsKICAgICAgICAgICAgIGlmIChhdXRvIHNvdXJjZUZyb21PbGRWZXJzaW9uID0gZ2V0
Q29udGVudFJ1bGVMaXN0U291cmNlRnJvbU1hcHBlZEZpbGUoKmNvbnRlbnRSdWxlTGlzdCk7ICFz
b3VyY2VGcm9tT2xkVmVyc2lvbi5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBSdW5Mb29w
OjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMp
LCBzb3VyY2VGcm9tT2xkVmVyc2lvbiA9IHNvdXJjZUZyb21PbGRWZXJzaW9uLmlzb2xhdGVkQ29w
eSgpLCBpZGVudGlmaWVyID0gaWRlbnRpZmllci5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmNvbXBpbGVDb250ZW50UnVsZUxpc3QoaWRlbnRp
ZmllciwgV1RGTW92ZShzb3VyY2VGcm9tT2xkVmVyc2lvbiksIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+Y29tcGlsZUNvbnRl
bnRSdWxlTGlzdChpZGVudGlmaWVyLCBXVEZNb3ZlKHNvdXJjZUZyb21PbGRWZXJzaW9uKSwgc3Rk
OjpudWxsb3B0LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgICAgICAgICAgICAg
fSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtNTMwLDEzICs1
MzAsMTMgQEAgdm9pZCBDb250ZW50UnVsZUxpc3RTdG9yZTo6Z2V0QXZhaWxhYmxlQ29udGVudFJ1
bGVMaXN0SWRlbnRpZmllcnMoQ29tcGxldGlvbkhhbmQKICAgICB9KTsKIH0KIAotdm9pZCBDb250
ZW50UnVsZUxpc3RTdG9yZTo6Y29tcGlsZUNvbnRlbnRSdWxlTGlzdChjb25zdCBXVEY6OlN0cmlu
ZyYgaWRlbnRpZmllciwgV1RGOjpTdHJpbmcmJiBqc29uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFJlZlB0cjxBUEk6OkNvbnRlbnRSdWxlTGlzdD4sIHN0ZDo6ZXJyb3JfY29kZSk+IGNvbXBsZXRp
b25IYW5kbGVyKQordm9pZCBDb250ZW50UnVsZUxpc3RTdG9yZTo6Y29tcGlsZUNvbnRlbnRSdWxl
TGlzdChjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgV1RGOjpTdHJpbmcmJiBqc29uLCBz
dGQ6Om9wdGlvbmFsPEhhc2hTZXQ8V1RGOjpTdHJpbmc+PiYmIGFsbG93ZWRSZWRpcmVjdFNjaGVt
ZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmUHRyPEFQSTo6Q29udGVudFJ1bGVMaXN0Piwg
c3RkOjplcnJvcl9jb2RlKT4gY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKICAgICBBdG9tU3RyaW5nOjppbml0KCk7CiAgICAgV2ViQ29yZTo6UXVh
bGlmaWVkTmFtZTo6aW5pdCgpOwogICAgIAotICAgIGF1dG8gcGFyc2VkUnVsZXMgPSBXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6cGFyc2VSdWxlTGlzdChqc29uLCB7IH0pOworICAgIGF1dG8g
cGFyc2VkUnVsZXMgPSBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6cGFyc2VSdWxlTGlzdChq
c29uLCBXVEZNb3ZlKGFsbG93ZWRSZWRpcmVjdFNjaGVtZXMpKTsKICAgICBpZiAoIXBhcnNlZFJ1
bGVzLmhhc192YWx1ZSgpKQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0
ciwgcGFyc2VkUnVsZXMuZXJyb3IoKSk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5oCmluZGV4IDkzNDU0ZGQxNjg0
ZTg0ODE2YmU2OGExOWRmMmM3MmE2ZDlhYmUyNTEuLjFiZWZmMzNlYTlkZGEyNGNkMTVkOWRlMzNj
YjVmZTViODcyNjhiNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9B
UElDb250ZW50UnVsZUxpc3RTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5oCkBAIC02Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKICAg
ICBleHBsaWNpdCBDb250ZW50UnVsZUxpc3RTdG9yZShjb25zdCBXVEY6OlN0cmluZyYgc3RvcmVQ
YXRoKTsKICAgICB2aXJ0dWFsIH5Db250ZW50UnVsZUxpc3RTdG9yZSgpOwogCi0gICAgdm9pZCBj
b21waWxlQ29udGVudFJ1bGVMaXN0KGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBXVEY6
OlN0cmluZyYmIGpzb24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmUHRyPEFQSTo6Q29udGVu
dFJ1bGVMaXN0Piwgc3RkOjplcnJvcl9jb2RlKT4pOworICAgIHZvaWQgY29tcGlsZUNvbnRlbnRS
dWxlTGlzdChjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgV1RGOjpTdHJpbmcmJiBqc29u
LCBzdGQ6Om9wdGlvbmFsPEhhc2hTZXQ8V1RGOjpTdHJpbmc+PiYmIGFsbG93ZWRSZWRpcmVjdFNj
aGVtZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmUHRyPEFQSTo6Q29udGVudFJ1bGVMaXN0
Piwgc3RkOjplcnJvcl9jb2RlKT4pOwogICAgIHZvaWQgbG9va3VwQ29udGVudFJ1bGVMaXN0KGNv
bnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0
cjxBUEk6OkNvbnRlbnRSdWxlTGlzdD4sIHN0ZDo6ZXJyb3JfY29kZSk+KTsKICAgICB2b2lkIHJl
bW92ZUNvbnRlbnRSdWxlTGlzdChjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChzdGQ6OmVycm9yX2NvZGUpPik7CiAgICAgdm9pZCBnZXRBdmFpbGFi
bGVDb250ZW50UnVsZUxpc3RJZGVudGlmaWVycyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdURjo6
VmVjdG9yPFdURjo6U3RyaW5nPik+KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9BUElXZWJzaXRlUG9saWNpZXMuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSVdlYnNpdGVQb2xpY2llcy5jcHAKaW5kZXggMzAzMTA1YTMyNTRkYzkzYmMyMmZlMDZk
MTk1MDUyOGNkOThiZjRmYy4uMTljOWE1NzBjNWEzYzZmMmQwZDIyZGQ2MmQ1MDNmY2MzYWVjNTA3
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVQb2xp
Y2llcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVQb2xp
Y2llcy5jcHAKQEAgLTM5LDYgKzM5LDcgQEAgUmVmPFdlYnNpdGVQb2xpY2llcz4gV2Vic2l0ZVBv
bGljaWVzOjpjb3B5KCkgY29uc3QKIHsKICAgICBhdXRvIHBvbGljaWVzID0gV2Vic2l0ZVBvbGlj
aWVzOjpjcmVhdGUoKTsKICAgICBwb2xpY2llcy0+c2V0Q29udGVudEJsb2NrZXJzRW5hYmxlZCht
X2NvbnRlbnRCbG9ja2Vyc0VuYWJsZWQpOworICAgIHBvbGljaWVzLT5tX2FjdGl2ZUNvbnRlbnRS
dWxlTGlzdEFjdGlvbnNQYXR0ZXJucyA9IG1fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc1Bh
dHRlcm5zOwogICAgIHBvbGljaWVzLT5zZXRBbGxvd2VkQXV0b3BsYXlRdWlya3MobV9hbGxvd2Vk
QXV0b3BsYXlRdWlya3MpOwogICAgIHBvbGljaWVzLT5zZXRBdXRvcGxheVBvbGljeShtX2F1dG9w
bGF5UG9saWN5KTsKICNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQpAQCAtNzgsOSArNzks
NyBAQCBSZWY8V2Vic2l0ZVBvbGljaWVzPiBXZWJzaXRlUG9saWNpZXM6OmNvcHkoKSBjb25zdAog
ICAgIHJldHVybiBwb2xpY2llczsKIH0KIAotV2Vic2l0ZVBvbGljaWVzOjp+V2Vic2l0ZVBvbGlj
aWVzKCkKLXsKLX0KK1dlYnNpdGVQb2xpY2llczo6fldlYnNpdGVQb2xpY2llcygpID0gZGVmYXVs
dDsKIAogdm9pZCBXZWJzaXRlUG9saWNpZXM6OnNldFdlYnNpdGVEYXRhU3RvcmUoUmVmUHRyPFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZT4mJiB3ZWJzaXRlRGF0YVN0b3JlKQogewpAQCAtMTA0LDYg
KzEwMyw3IEBAIFdlYktpdDo6V2Vic2l0ZVBvbGljaWVzRGF0YSBXZWJzaXRlUG9saWNpZXM6OmRh
dGEoKQogCiAgICAgcmV0dXJuIHsKICAgICAgICAgY29udGVudEJsb2NrZXJzRW5hYmxlZCgpLAor
ICAgICAgICBhY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMoKSwKICAgICAgICAg
YWxsb3dlZEF1dG9wbGF5UXVpcmtzKCksCiAgICAgICAgIGF1dG9wbGF5UG9saWN5KCksCiAjaWYg
RU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9BUElXZWJzaXRlUG9saWNpZXMuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9BUElXZWJzaXRlUG9saWNpZXMuaAppbmRleCA2ODY3YWFjMmI3ZGYyYzhkMWExOTVlNjc3
MDU5MGUwNWZhMTA4YWFiLi5iN2Y0NDI0NjY0MTkzMDlmNDNiYThiMjRhYWZkOWY4MDU3MDdjOWQ2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2Vic2l0ZVBvbGlj
aWVzLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVQb2xpY2ll
cy5oCkBAIC02Myw2ICs2Myw5IEBAIHB1YmxpYzoKICAgICBib29sIGNvbnRlbnRCbG9ja2Vyc0Vu
YWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRCbG9ja2Vyc0VuYWJsZWQ7IH0KICAgICB2
b2lkIHNldENvbnRlbnRCbG9ja2Vyc0VuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fY29udGVudEJs
b2NrZXJzRW5hYmxlZCA9IGVuYWJsZWQ7IH0KICAgICAKKyAgICB2b2lkIHNldEFjdGl2ZUNvbnRl
bnRSdWxlTGlzdEFjdGlvbnNQYXR0ZXJucyhzdGQ6Om9wdGlvbmFsPEhhc2hTZXQ8V1RGOjpTdHJp
bmc+PiYmIHBhdHRlcm5zKSB7IG1fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5z
ID0gV1RGTW92ZShwYXR0ZXJucyk7IH0KKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEhhc2hTZXQ8
V1RGOjpTdHJpbmc+PiYgYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5zKCkgY29u
c3QgeyByZXR1cm4gbV9hY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnM7IH0KKyAg
ICAKICAgICBPcHRpb25TZXQ8V2ViS2l0OjpXZWJzaXRlQXV0b3BsYXlRdWlyaz4gYWxsb3dlZEF1
dG9wbGF5UXVpcmtzKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd2VkQXV0b3BsYXlRdWlya3M7IH0K
ICAgICB2b2lkIHNldEFsbG93ZWRBdXRvcGxheVF1aXJrcyhPcHRpb25TZXQ8V2ViS2l0OjpXZWJz
aXRlQXV0b3BsYXlRdWlyaz4gcXVpcmtzKSB7IG1fYWxsb3dlZEF1dG9wbGF5UXVpcmtzID0gcXVp
cmtzOyB9CiAgICAgCkBAIC0xMzUsNyArMTM4LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SWRl
bXBvdGVudE1vZGVBdXRvc2l6aW5nT25seUhvbm9yc1BlcmNlbnRhZ2VzKGJvb2wgaWRlbXBvdGVu
dE1vZGVBdXRvc2l6aW5nT25seUhvbm9yc1BlcmNlbnRhZ2VzKSB7IG1faWRlbXBvdGVudE1vZGVB
dXRvc2l6aW5nT25seUhvbm9yc1BlcmNlbnRhZ2VzID0gaWRlbXBvdGVudE1vZGVBdXRvc2l6aW5n
T25seUhvbm9yc1BlcmNlbnRhZ2VzOyB9CiAKIHByaXZhdGU6CisgICAgLy8gRklYTUU6IHJlcGxh
Y2UgbW9zdCBvciBhbGwgb2YgdGhlc2UgbWVtYmVycyB3aXRoIGEgV2Vic2l0ZVBvbGljaWVzRGF0
YS4KICAgICBib29sIG1fY29udGVudEJsb2NrZXJzRW5hYmxlZCB7IHRydWUgfTsKKyAgICBzdGQ6
Om9wdGlvbmFsPEhhc2hTZXQ8V1RGOjpTdHJpbmc+PiBtX2FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFj
dGlvbnNQYXR0ZXJucyB7IEhhc2hTZXQ8V1RGOjpTdHJpbmc+KCkgfTsKICAgICBPcHRpb25TZXQ8
V2ViS2l0OjpXZWJzaXRlQXV0b3BsYXlRdWlyaz4gbV9hbGxvd2VkQXV0b3BsYXlRdWlya3M7CiAg
ICAgV2ViS2l0OjpXZWJzaXRlQXV0b3BsYXlQb2xpY3kgbV9hdXRvcGxheVBvbGljeSB7IFdlYktp
dDo6V2Vic2l0ZUF1dG9wbGF5UG9saWN5OjpEZWZhdWx0IH07CiAjaWYgRU5BQkxFKERFVklDRV9P
UklFTlRBVElPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlZi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVSZWYuY3BwCmluZGV4IGZmNDcwMWM5
YjU0ODQ3YjczZjEwOTE1ZmQ3NWRlMzYyYzQxOGI5NjEuLjgzMjVhNGIzNzExODYyMWM4NWFmNDcx
OTcwMDc0NDM4Mjg5YjAwN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlZi5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0MvV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUmVmLmNwcApAQCAt
NzYsNyArNzYsNyBAQCBzdGF0aWMgaW5saW5lIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVJl
c3VsdCB0b1Jlc3VsdChjb25zdCBzdGQ6OmVycm9yX2NvZGUmCiB2b2lkIFdLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZUNvbXBpbGUoV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUmVmIHN0b3Jl
LCBXS1N0cmluZ1JlZiBpZGVudGlmaWVyLCBXS1N0cmluZ1JlZiBqc29uU291cmNlLCB2b2lkKiBj
b250ZXh0LCBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVGdW5jdGlvbiBjYWxsYmFjaykKIHsK
ICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIHRvSW1wbChzdG9yZSktPmNvbXBp
bGVDb250ZW50UnVsZUxpc3QodG9XVEZTdHJpbmcoaWRlbnRpZmllciksIHRvV1RGU3RyaW5nKGpz
b25Tb3VyY2UpLCBbY29udGV4dCwgY2FsbGJhY2tdKFJlZlB0cjxBUEk6OkNvbnRlbnRSdWxlTGlz
dD4gY29udGVudFJ1bGVMaXN0LCBzdGQ6OmVycm9yX2NvZGUgZXJyb3IpIHsKKyAgICB0b0ltcGwo
c3RvcmUpLT5jb21waWxlQ29udGVudFJ1bGVMaXN0KHRvV1RGU3RyaW5nKGlkZW50aWZpZXIpLCB0
b1dURlN0cmluZyhqc29uU291cmNlKSwgeyBIYXNoU2V0PFN0cmluZz4oKSB9LCBbY29udGV4dCwg
Y2FsbGJhY2tdKFJlZlB0cjxBUEk6OkNvbnRlbnRSdWxlTGlzdD4gY29udGVudFJ1bGVMaXN0LCBz
dGQ6OmVycm9yX2NvZGUgZXJyb3IpIHsKICAgICAgICAgY2FsbGJhY2soZXJyb3IgPyBudWxscHRy
IDogdG9BUEkoY29udGVudFJ1bGVMaXN0LmxlYWtSZWYoKSksIHRvUmVzdWx0KGVycm9yKSwgY29u
dGV4dCk7CiAgICAgfSk7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLQ29udGVudFJ1bGVMaXN0U3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3RTdG9yZS5tbQppbmRleCBkNWFiOTRm
YjE4NzVkYjA3Yjc4ZmEwNTUzMTAyMjM0YmZkODMzZTU0Li44MzEyMWE0YjE4MDYyZWMwMTk5ZDE4
ZTdmMTc2ZmIyNGE0ZjkzZjM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3RTdG9yZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3RTdG9yZS5tbQpAQCAtNzcsNyArNzcs
NyBAQCBzdGF0aWMgV0tFcnJvckNvZGUgdG9XS0Vycm9yQ29kZShjb25zdCBzdGQ6OmVycm9yX2Nv
ZGUmIGVycm9yKQogCiAtICh2b2lkKWNvbXBpbGVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVy
OihOU1N0cmluZyAqKWlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRSdWxlTGlzdDooTlNTdHJpbmcg
KillbmNvZGVkQ29udGVudFJ1bGVMaXN0IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShXS0Nv
bnRlbnRSdWxlTGlzdCAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgW3Nl
bGYgX2NvbXBpbGVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOmlkZW50aWZpZXIgZW5jb2Rl
ZENvbnRlbnRSdWxlTGlzdDplbmNvZGVkQ29udGVudFJ1bGVMaXN0IGNvbXBsZXRpb25IYW5kbGVy
OmNvbXBsZXRpb25IYW5kbGVyXTsKKyAgICBbc2VsZiBfY29tcGlsZUNvbnRlbnRSdWxlTGlzdEZv
cklkZW50aWZpZXI6aWRlbnRpZmllciBlbmNvZGVkQ29udGVudFJ1bGVMaXN0OmVuY29kZWRDb250
ZW50UnVsZUxpc3QgYWxsb3dlZFJlZGlyZWN0U2NoZW1lczpuaWwgY29tcGxldGlvbkhhbmRsZXI6
Y29tcGxldGlvbkhhbmRsZXJdOwogfQogCiAtICh2b2lkKWxvb2tVcENvbnRlbnRSdWxlTGlzdEZv
cklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjoodm9p
ZCAoXikoV0tDb250ZW50UnVsZUxpc3QgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgpA
QCAtMTQ5LDkgKzE0OSwxMiBAQCBzdGF0aWMgV0tFcnJvckNvZGUgdG9XS0Vycm9yQ29kZShjb25z
dCBzdGQ6OmVycm9yX2NvZGUmIGVycm9yKQogICAgIH0pOwogfQogCi0tICh2b2lkKV9jb21waWxl
Q29udGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGVuY29k
ZWRDb250ZW50UnVsZUxpc3Q6KE5TU3RyaW5nICopIGVuY29kZWRDb250ZW50UnVsZUxpc3QgY29t
cGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFdLQ29udGVudFJ1bGVMaXN0ICosIE5TRXJyb3IgKikp
Y29tcGxldGlvbkhhbmRsZXIKKy0gKHZvaWQpX2NvbXBpbGVDb250ZW50UnVsZUxpc3RGb3JJZGVu
dGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRSdWxlTGlzdDooTlNT
dHJpbmcgKillbmNvZGVkQ29udGVudFJ1bGVMaXN0IGFsbG93ZWRSZWRpcmVjdFNjaGVtZXM6KE5T
U2V0PE5TU3RyaW5nICo+ICopc2NoZW1lcyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoV0tD
b250ZW50UnVsZUxpc3QgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIF9j
b250ZW50UnVsZUxpc3RTdG9yZS0+Y29tcGlsZUNvbnRlbnRSdWxlTGlzdChpZGVudGlmaWVyLCBl
bmNvZGVkQ29udGVudFJ1bGVMaXN0LCBbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIo
Y29tcGxldGlvbkhhbmRsZXIpXShSZWZQdHI8QVBJOjpDb250ZW50UnVsZUxpc3Q+IGNvbnRlbnRS
dWxlTGlzdCwgc3RkOjplcnJvcl9jb2RlIGVycm9yKSB7CisgICAgSGFzaFNldDxTdHJpbmc+IGFs
bG93ZWRSZWRpcmVjdFNjaGVtZXM7CisgICAgZm9yIChOU1N0cmluZyAqc2NoZW1lIGluIHNjaGVt
ZXMpCisgICAgICAgIGFsbG93ZWRSZWRpcmVjdFNjaGVtZXMuYWRkKHNjaGVtZSk7CisgICAgX2Nv
bnRlbnRSdWxlTGlzdFN0b3JlLT5jb21waWxlQ29udGVudFJ1bGVMaXN0KGlkZW50aWZpZXIsIGVu
Y29kZWRDb250ZW50UnVsZUxpc3QsIFdURk1vdmUoYWxsb3dlZFJlZGlyZWN0U2NoZW1lcyksIFtj
b21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildKFJlZlB0
cjxBUEk6OkNvbnRlbnRSdWxlTGlzdD4gY29udGVudFJ1bGVMaXN0LCBzdGQ6OmVycm9yX2NvZGUg
ZXJyb3IpIHsKICAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgICBhdXRvIHVzZXJJbmZv
ID0gQHtOU0hlbHBBbmNob3JFcnJvcktleTogW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJS
dWxlIGxpc3QgY29tcGlsYXRpb24gZmFpbGVkOiAlcyIsIGVycm9yLm1lc3NhZ2UoKS5jX3N0cigp
XX07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Nv
bnRlbnRSdWxlTGlzdFN0b3JlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLQ29udGVudFJ1bGVMaXN0U3RvcmVQcml2YXRlLmgKaW5kZXggNTAyODY4NjhiZjNk
NjQ3MDBmNzMxZTI0OGVkNTM2ZDRkZDg3YzgyZC4uYjc5YTZhOGFjNDRjNjJlZTU3ZTlkZWU1NmFk
NzdjYjY1ZDc4NzMxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLQ29udGVudFJ1bGVMaXN0U3RvcmVQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudFJ1bGVMaXN0U3RvcmVQcml2YXRlLmgKQEAgLTMy
LDcgKzMyLDcgQEAKIC0gKHZvaWQpX2ludmFsaWRhdGVDb250ZW50UnVsZUxpc3RWZXJzaW9uRm9y
SWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyOwogLSAodm9pZClfZ2V0Q29udGVudFJ1
bGVMaXN0U291cmNlRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRp
b25IYW5kbGVyOih2b2lkICheKShOU1N0cmluZyAqKSljb21wbGV0aW9uSGFuZGxlcjsKIAotLSAo
dm9pZClfY29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRl
bnRpZmllciBlbmNvZGVkQ29udGVudFJ1bGVMaXN0OihOU1N0cmluZyAqKSBlbmNvZGVkQ29udGVu
dFJ1bGVMaXN0IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShXS0NvbnRlbnRSdWxlTGlzdCAq
LCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyOworLSAodm9pZClfY29tcGlsZUNvbnRlbnRS
dWxlTGlzdEZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBlbmNvZGVkQ29udGVu
dFJ1bGVMaXN0OihOU1N0cmluZyAqKWVuY29kZWRDb250ZW50UnVsZUxpc3QgYWxsb3dlZFJlZGly
ZWN0U2NoZW1lczooTlNTZXQ8TlNTdHJpbmcgKj4gKilzY2hlbWVzIGNvbXBsZXRpb25IYW5kbGVy
Oih2b2lkICheKShXS0NvbnRlbnRSdWxlTGlzdCAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5k
bGVyOwogCiAvLyBGSVhNRTogUmVtb3ZlIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuCiAr
IChpbnN0YW5jZXR5cGUpZGVmYXVsdFN0b3JlV2l0aExlZ2FjeUZpbGVuYW1lOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2VicGFnZVByZWZlcmVuY2Vz
Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2VicGFnZVByZWZlcmVu
Y2VzLm1tCmluZGV4IDIwODEwYzM3NWQ0YWExNTRkMGI2YTJhYjRiMDZkNDFmMDJjYzY0NTUuLmEx
NDMwZThmNjU1MDVmMjkzY2M5N2EyZDg5NTk5MDVlOTE2YWJlNjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnBhZ2VQcmVmZXJlbmNlcy5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJwYWdlUHJlZmVyZW5jZXMu
bW0KQEAgLTE0MSw2ICsxNDEsMzIgQEAgc3RhdGljIFdlYkNvcmU6Ok1vdXNlRXZlbnRQb2xpY3kg
Y29yZU1vdXNlRXZlbnRQb2xpY3koX1dLV2Vic2l0ZU1vdXNlRXZlbnRQb2xpY3kKICAgICByZXR1
cm4gX3dlYnNpdGVQb2xpY2llcy0+Y29udGVudEJsb2NrZXJzRW5hYmxlZCgpOwogfQogCistICh2
b2lkKV9zZXRBY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnM6KE5TU2V0PE5TU3Ry
aW5nICo+ICopcGF0dGVybnMKK3sKKyAgICBpZiAoIXBhdHRlcm5zKSB7CisgICAgICAgIF93ZWJz
aXRlUG9saWNpZXMtPnNldEFjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNQYXR0ZXJucyhzdGQ6
Om51bGxvcHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSGFzaFNldDxTdHJpbmc+
IHBhdHRlcm5IYXNoU2V0OworICAgIHBhdHRlcm5IYXNoU2V0LnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkocGF0dGVybnMuY291bnQpOworICAgIGZvciAoTlNTdHJpbmcgKnBhdHRlcm4gaW4gcGF0dGVy
bnMpCisgICAgICAgIHBhdHRlcm5IYXNoU2V0LmFkZChwYXR0ZXJuKTsKKyAgICBfd2Vic2l0ZVBv
bGljaWVzLT5zZXRBY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMoV1RGTW92ZShw
YXR0ZXJuSGFzaFNldCkpOworfQorCistIChOU1NldDxOU1N0cmluZyAqPiAqKV9hY3RpdmVDb250
ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMKK3sKKyAgICBjb25zdCBhdXRvJiBwYXR0ZXJucyA9
IF93ZWJzaXRlUG9saWNpZXMtPmFjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNQYXR0ZXJucygp
OworICAgIGlmICghcGF0dGVybnMpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBOU011dGFi
bGVTZXQ8TlNTdHJpbmcgKj4gKnNldCA9IFtOU011dGFibGVTZXQgc2V0XTsKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIHBhdHRlcm4gOiAqcGF0dGVybnMpCisgICAgICAgIFtzZXQgYWRkT2JqZWN0OnBh
dHRlcm5dOworICAgIHJldHVybiBzZXQ7Cit9CisKIC0gKHZvaWQpX3NldEFsbG93ZWRBdXRvcGxh
eVF1aXJrczooX1dLV2Vic2l0ZUF1dG9wbGF5UXVpcmspYWxsb3dlZFF1aXJrcwogewogICAgIE9w
dGlvblNldDxXZWJLaXQ6OldlYnNpdGVBdXRvcGxheVF1aXJrPiBxdWlya3M7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJwYWdlUHJlZmVyZW5jZXNQ
cml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJwYWdlUHJl
ZmVyZW5jZXNQcml2YXRlLmgKaW5kZXggNWY4Zjc0YjVlY2YxMzM2NmZhMDZjM2RiYWYzNmY0YzBm
MmFlYzA5Ni4uNGVjN2RmNmM1NmQ5Mjc5MTczYjRiMjQyYzVjMWQ1YWJjYWQ5OWEyNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2VicGFnZVByZWZlcmVu
Y2VzUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YnBhZ2VQcmVmZXJlbmNlc1ByaXZhdGUuaApAQCAtNjksNiArNjksNyBAQCB0eXBlZGVmIE5TX09Q
VElPTlMoTlNVSW50ZWdlciwgX1dLV2Vic2l0ZU1vdXNlRXZlbnRQb2xpY3kpIHsKIEBpbnRlcmZh
Y2UgV0tXZWJwYWdlUHJlZmVyZW5jZXMgKFdLUHJpdmF0ZSkKIAogQHByb3BlcnR5IChub25hdG9t
aWMsIHNldHRlcj1fc2V0Q29udGVudEJsb2NrZXJzRW5hYmxlZDopIEJPT0wgX2NvbnRlbnRCbG9j
a2Vyc0VuYWJsZWQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgc2V0dGVyPV9zZXRBY3Rp
dmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnM6KSBOU1NldDxOU1N0cmluZyAqPiAqX2Fj
dGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNQYXR0ZXJuczsKIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCBzZXR0ZXI9X3NldEFsbG93ZWRBdXRvcGxheVF1aXJrczopIF9XS1dlYnNpdGVBdXRvcGxheVF1
aXJrIF9hbGxvd2VkQXV0b3BsYXlRdWlya3M7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVy
PV9zZXRBdXRvcGxheVBvbGljeTopIF9XS1dlYnNpdGVBdXRvcGxheVBvbGljeSBfYXV0b3BsYXlQ
b2xpY3k7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgc2V0dGVyPV9zZXRDdXN0b21IZWFk
ZXJGaWVsZHM6KSBOU0FycmF5PF9XS0N1c3RvbUhlYWRlckZpZWxkcyAqPiAqX2N1c3RvbUhlYWRl
ckZpZWxkczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0KaW5kZXggMWQxZDg3MjQy
OTE3ODM5ZTAzYzZjMDExMGE5NGE4M2NjNmUwZTg3MS4uZTFhOWZlMzUzZTI0ZDcyOTJlY2U5ZjJh
ZWIzZjJiYzQ1NmI2NTY3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0KKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0KQEAg
LTcwLDcgKzcwLDcgQEAgc3RhdGljIE5TRXJyb3IgKnRvVXNlckNvbnRlbnRSdWxlTGlzdFN0b3Jl
RXJyb3IoY29uc3QgTlNFcnJvciAqZXJyb3IpCiAKIC0gKHZvaWQpY29tcGlsZUNvbnRlbnRFeHRl
bnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRF
eHRlbnNpb246KE5TU3RyaW5nICopZW5jb2RlZENvbnRlbnRSdWxlTGlzdCBjb21wbGV0aW9uSGFu
ZGxlcjoodm9pZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSljb21wbGV0
aW9uSGFuZGxlcgogewotICAgIFtfY29udGVudFJ1bGVMaXN0U3RvcmUgX2NvbXBpbGVDb250ZW50
UnVsZUxpc3RGb3JJZGVudGlmaWVyOmlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRSdWxlTGlzdDpl
bmNvZGVkQ29udGVudFJ1bGVMaXN0IGNvbXBsZXRpb25IYW5kbGVyOl4oV0tDb250ZW50UnVsZUxp
c3QgKmNvbnRlbnRSdWxlTGlzdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbX2NvbnRlbnRSdWxl
TGlzdFN0b3JlIGNvbXBpbGVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOmlkZW50aWZpZXIg
ZW5jb2RlZENvbnRlbnRSdWxlTGlzdDplbmNvZGVkQ29udGVudFJ1bGVMaXN0IGNvbXBsZXRpb25I
YW5kbGVyOl4oV0tDb250ZW50UnVsZUxpc3QgKmNvbnRlbnRSdWxlTGlzdCwgTlNFcnJvciAqZXJy
b3IpIHsKICAgICAgICAgYXV0byBjb250ZW50RmlsdGVyID0gY29udGVudFJ1bGVMaXN0ID8gYWRv
cHROUyhbW19XS1VzZXJDb250ZW50RmlsdGVyIGFsbG9jXSBfaW5pdFdpdGhXS0NvbnRlbnRSdWxl
TGlzdDpjb250ZW50UnVsZUxpc3RdKSA6IG5pbDsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
Y29udGVudEZpbHRlci5nZXQoKSwgdG9Vc2VyQ29udGVudFJ1bGVMaXN0U3RvcmVFcnJvcihlcnJv
cikpOwogICAgIH1dOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdv
cmsvV2ViTG9hZGVyU3RyYXRlZ3kuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdv
cmsvV2ViTG9hZGVyU3RyYXRlZ3kuY3BwCmluZGV4IGQ2NzFkMDU4MTA3MTE0OGI0MmU2MDdhYjU5
ODQ4NmU5MGE3MDM1ZTAuLmM2MzU3NzkyOWI1ZTAyNDIzZTM1MjJiMDA3MzllMzAzZjdmZDhiOTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0
cmF0ZWd5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJMb2Fk
ZXJTdHJhdGVneS5jcHAKQEAgLTQ3OSw2ICs0NzksMTIgQEAgdm9pZCBXZWJMb2FkZXJTdHJhdGVn
eTo6cmVtb3ZlKFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlcikKICAgICBBU1NFUlQocmVz
b3VyY2VMb2FkZXIpOwogICAgIExPRyhOZXR3b3JrU2NoZWR1bGluZywgIihXZWJQcm9jZXNzKSBX
ZWJMb2FkZXJTdHJhdGVneTo6cmVtb3ZlLCB1cmwgJyVzJyIsIHJlc291cmNlTG9hZGVyLT51cmwo
KS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAorICAgIGF1dG8gaWRlbnRpZmllciA9IHJlc291
cmNlTG9hZGVyLT5pZGVudGlmaWVyKCk7CisgICAgaWYgKCFpZGVudGlmaWVyKSB7CisgICAgICAg
IExPR19FUlJPUigiV2ViTG9hZGVyU3RyYXRlZ3kgcmVtb3ZpbmcgYSBSZXNvdXJjZUxvYWRlciB0
aGF0IGhhcyBubyBpZGVudGlmaWVyLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAg
aWYgKGF1dG8gdGFzayA9IG1fdXJsU2NoZW1lVGFza3MudGFrZShyZXNvdXJjZUxvYWRlci0+aWRl
bnRpZmllcigpKSkgewogICAgICAgICBBU1NFUlQoIW1faW50ZXJuYWxseUZhaWxlZFJlc291cmNl
TG9hZGVycy5jb250YWlucyhyZXNvdXJjZUxvYWRlcikpOwogICAgICAgICB0YXNrLT5zdG9wTG9h
ZGluZygpOwpAQCAtNDg5LDEyICs0OTUsNiBAQCB2b2lkIFdlYkxvYWRlclN0cmF0ZWd5OjpyZW1v
dmUoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyKQogICAgICAgICBtX2ludGVybmFsbHlG
YWlsZWRSZXNvdXJjZUxvYWRlcnMucmVtb3ZlKHJlc291cmNlTG9hZGVyKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICAKLSAgICBhdXRvIGlkZW50aWZpZXIgPSByZXNvdXJjZUxvYWRlci0+
aWRlbnRpZmllcigpOwotICAgIGlmICghaWRlbnRpZmllcikgewotICAgICAgICBMT0dfRVJST1Io
IldlYkxvYWRlclN0cmF0ZWd5IHJlbW92aW5nIGEgUmVzb3VyY2VMb2FkZXIgdGhhdCBoYXMgbm8g
aWRlbnRpZmllci4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIFJlZlB0cjxXZWJS
ZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gbV93ZWJSZXNvdXJjZUxvYWRlcnMudGFrZShpZGVudGlm
aWVyKTsKICAgICAvLyBMb2FkZXIgbWF5IG5vdCBiZSByZWdpc3RlcmVkIGlmIHdlIGNyZWF0ZWQg
aXQsIGJ1dCBoYXZlbid0IHNjaGVkdWxlZCB5ZXQgKGEgYnVuZGxlIGNsaWVudCBjYW4gZGVjaWRl
IHRvIGNhbmNlbCBzdWNoIHJlcXVlc3QgdmlhIHdpbGxTZW5kUmVxdWVzdCkuCmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggODNmMWY2OWUzNWQ4ZDVm
Mjg3Y2UxNWNkMzA0NzQwNzg0ZWE1MGUxNS4uYWVjMWZhZmVlMGRlZWY1YjRiOWFkZTZlMzNkZjQw
NGE5ZmFiM2EwOSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDIxLTExLTE3ICBBbGV4IENocmlzdGVuc2VuICA8YWNo
cmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IG1vc3Qgb2YgcmVkaXJl
Y3QgYW5kIG1vZGlmeS1oZWFkZXJzIGFjdGlvbiB0eXBlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzMjY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
Q29udGVudEV4dGVuc2lvbnMuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SW5NZW1vcnlD
b21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpjaGVja0NvbXBpbGVyRXJyb3IpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLQ29udGVudEV4dGVu
c2lvblN0b3JlLm1tOgorICAgICAgICAoY29tcGlsZUNvbnRlbnRSdWxlTGlzdCk6CisgICAgICAg
IChuYXZpZ2F0aW9uRGVsZWdhdGVBbGxvd2luZ0FjdGl2ZUFjdGlvbnNPblRlc3RIb3N0KToKKyAg
ICAgICAgKFRFU1RfRik6CisKIDIwMjEtMTEtMTcgIFppeGluZyBMaXUgIDxsaXVzaHV5dTAxMUBn
bWFpbC5jb20+CiAKICAgICAgICAgW0dUS11bV1BFXSBTdXBwb3J0IGdldHRpbmcgYW5kIHNldHRp
bmcgSFRUUCBoZWFkZXJzIGluIGN1c3RvbSBVUkkgc2NoZW1lIGhhbmRsZXJzCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3Bw
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zLmNw
cAppbmRleCA0ZDMyNWViNDFkNDE4YzYzNWI0MWI1ODdlZGI3MDI0ZmViYjM0ZDA1Li4zMzk1YTBl
MWU5MzQ4M2FkNTM1MTk4Y2NkMDBmYWEzMjc0OTQ2YmZkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHAKQEAgLTEy
OSw3ICsxMjksNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBDb21waWxlZENvbnRlbnRFeHRl
bnNpb25EYXRhIGV4dGVuc2lvbkRhdGE7CiAgICAgICAgIEluTWVtb3J5Q29udGVudEV4dGVuc2lv
bkNvbXBpbGF0aW9uQ2xpZW50IGNsaWVudChleHRlbnNpb25EYXRhKTsKLSAgICAgICAgYXV0byBw
YXJzZWRSdWxlcyA9IENvbnRlbnRFeHRlbnNpb25zOjpwYXJzZVJ1bGVMaXN0KGZpbHRlciwgeyB9
KTsKKyAgICAgICAgYXV0byBwYXJzZWRSdWxlcyA9IENvbnRlbnRFeHRlbnNpb25zOjpwYXJzZVJ1
bGVMaXN0KGZpbHRlciwgc3RkOjpudWxsb3B0KTsKICAgICAgICAgYXV0byBjb21waWxlckVycm9y
ID0gQ29udGVudEV4dGVuc2lvbnM6OmNvbXBpbGVSdWxlTGlzdChjbGllbnQsIFdURk1vdmUoZmls
dGVyKSwgV1RGTW92ZShwYXJzZWRSdWxlcy52YWx1ZSgpKSk7CiAKICAgICAgICAgLy8gQ29tcGls
aW5nIHNob3VsZCBhbHdheXMgc3VjY2VlZCBoZXJlLiBXZSBoYXZlIG90aGVyIHRlc3RzIGZvciBj
b21waWxlIGZhaWx1cmVzLgpAQCAtMTM2MCw3ICsxMzYwLDcgQEAgVEVTVF9GKENvbnRlbnRFeHRl
bnNpb25UZXN0LCBEZWVwTkZBKQogICAgIEVYUEVDVF9FUSgxdWwsIGNyZWF0ZU5GQXMoY29tYmlu
ZWRVUkxGaWx0ZXJzKS5zaXplKCkpOwogfQogCi12b2lkIGNoZWNrQ29tcGlsZXJFcnJvcihjb25z
dCBjaGFyKiBqc29uLCBzdGQ6OmVycm9yX2NvZGUgZXhwZWN0ZWRFcnJvciwgY29uc3QgSGFzaFNl
dDxTdHJpbmc+JiBhbGxvd2VkUmVkaXJlY3RVUkxTY2hlbWVzID0geyB9KQordm9pZCBjaGVja0Nv
bXBpbGVyRXJyb3IoY29uc3QgY2hhcioganNvbiwgc3RkOjplcnJvcl9jb2RlIGV4cGVjdGVkRXJy
b3IsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8SGFzaFNldDxTdHJpbmc+PiYgYWxsb3dlZFJlZGlyZWN0
VVJMU2NoZW1lcyA9IHN0ZDo6bnVsbG9wdCkKIHsKICAgICBDb21waWxlZENvbnRlbnRFeHRlbnNp
b25EYXRhIGV4dGVuc2lvbkRhdGE7CiAgICAgSW5NZW1vcnlDb250ZW50RXh0ZW5zaW9uQ29tcGls
YXRpb25DbGllbnQgY2xpZW50KGV4dGVuc2lvbkRhdGEpOwpAQCAtMTUzMCw2ICsxNTMwLDcgQEAg
VEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBJbnZhbGlkSlNPTikKICAgICAgICAgQ29udGVu
dEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZEFjdGlvblR5cGUpOwogICAgIGNoZWNrQ29tcGls
ZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImNzcy1kaXNwbGF5LW5vbmVcIn0sXCJ0
cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwKICAgICAgICAgQ29u
dGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZENTU0Rpc3BsYXlOb25lQWN0aW9uVHlwZSk7
CisgICAgY2hlY2tDb21waWxlckVycm9yKCIiLCBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05S
ZWRpcmVjdFVSTFNjaGVtZXNTaG91bGROb3RJbmNsdWRlSmF2YXNjcmlwdCwgeyB7ICJqYXZhc2Ny
aXB0IiB9IH0pOwogCiAgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlw
ZVwiOlwiaWdub3JlLXByZXZpb3VzLXJ1bGVzXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJc
IjpcIndlYmtpdC5vcmdcIn19LCIKICAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImNz
cy1kaXNwbGF5LW5vbmVcIixcInNlbGVjdG9yXCI6XCIuaGlkZGVuXCJ9LFwidHJpZ2dlclwiOntc
InVybC1maWx0ZXJcIjpcIi4qXCJ9fV0iLCB7IH0pOwpAQCAtMTU1OCwxMiArMTU1OSwyMCBAQCBU
RVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIEludmFsaWRKU09OKQogICAgIGNoZWNrQ29tcGls
ZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRpcmVjdFwi
OntcInRyYW5zZm9ybVwiOntcInF1ZXJ5LXRyYW5zZm9ybVwiOntcImFkZC1vci1yZXBsYWNlLXBh
cmFtZXRlcnNcIjpbe31dfX19fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQu
b3JnXCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05BZGRPclJlcGxhY2VQYXJhbWV0
ZXJzS2V5VmFsdWVNaXNzaW5nS2V5U3RyaW5nKTsKICAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7
XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVkaXJlY3RcIjp7XCJ0cmFuc2Zv
cm1cIjp7XCJxdWVyeS10cmFuc2Zvcm1cIjp7XCJhZGQtb3ItcmVwbGFjZS1wYXJhbWV0ZXJzXCI6
W3tcImtleVwiOjV9XX19fX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9y
Z1wifX1dIiwgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OQWRkT3JSZXBsYWNlUGFyYW1ldGVy
c0tleVZhbHVlTWlzc2luZ0tleVN0cmluZyk7CiAgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wi
YWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixcInJlZGlyZWN0XCI6e1widHJhbnNmb3Jt
XCI6e1wicXVlcnktdHJhbnNmb3JtXCI6e1wiYWRkLW9yLXJlcGxhY2UtcGFyYW1ldGVyc1wiOlt7
XCJrZXlcIjpcImtcIixcInZhbHVlXCI6NX1dfX19fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVy
XCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05BZGRPclJl
cGxhY2VQYXJhbWV0ZXJzS2V5VmFsdWVNaXNzaW5nVmFsdWVTdHJpbmcpOwotICAgIGNoZWNrQ29t
cGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRpcmVj
dFwiOntcInVybFwiOlwiYWJvdXQ6YmxhbmtcIn19LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJc
IjpcIndlYmtpdC5vcmdcIn19XSIsIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTlJlZGlyZWN0
VVJMU2NoZW1lTm90QWxsb3dlZCk7Ci0gICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9u
XCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixcInJlZGlyZWN0XCI6e1widXJsXCI6XCJhYm91dDpi
bGFua1wifX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwg
eyB9LCB7ICJhYm91dCIgfSk7Ci0gICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6
e1widHlwZVwiOlwicmVkaXJlY3RcIixcInJlZGlyZWN0XCI6e1wiZXh0ZW5zaW9uLXBhdGhcIjpc
ImRvZXMvbm90L3N0YXJ0L3dpdGgvc2xhc2gvXCJ9fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVy
XCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVj
dEV4dGVuc2lvblBhdGhEb2VzTm90U3RhcnRXaXRoU2xhc2gpOworICAgIGNoZWNrQ29tcGlsZXJF
cnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRpcmVjdFwiOntc
InVybFwiOlwiYWJvdXQ6YmxhbmtcIn19LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndl
YmtpdC5vcmdcIn19XSIsIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTlJlZGlyZWN0VVJMU2No
ZW1lTm90QWxsb3dlZCwgeyB7ICJub3QtYWJvdXQiIH0gfSk7CisgICAgY2hlY2tDb21waWxlckVy
cm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixcInJlZGlyZWN0XCI6e1wi
dXJsXCI6XCJhYm91dDpibGFua1wifX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Vi
a2l0Lm9yZ1wifX1dIiwgeyB9LCB7IHsgImFib3V0IiB9IH0pOworICAgIGNoZWNrQ29tcGlsZXJF
cnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRpcmVjdFwiOntc
InVybFwiOlwiaHR0cHM6Ly8xMjcuLjEvXCJ9fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6
XCJ3ZWJraXQub3JnXCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVS
TEludmFsaWQsIHsgeyAiaHR0cHMiIH0gfSk7CisgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wi
YWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixcInJlZGlyZWN0XCI6e1widXJsXCI6XCJh
Ym91dDpibGFua1wifX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wi
fX1dIiwgeyB9LCB7IHsgImFib3V0IiB9IH0pOworICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tc
ImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRpcmVjdFwiOntcInRyYW5zZm9y
bVwiOntcInBvcnRcIjpcIm5vdCBhIG51bWJlclwifX19LFwidHJpZ2dlclwiOntcInVybC1maWx0
ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTlJlZGly
ZWN0SW52YWxpZFBvcnQpOworICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntc
InR5cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRpcmVjdFwiOntcInRyYW5zZm9ybVwiOntcInBvcnRc
IjpcIjY1NTM2XCJ9fX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wi
fX1dIiwgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RJbnZhbGlkUG9ydCk7Cisg
ICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3Rc
IixcInJlZGlyZWN0XCI6e1widHJhbnNmb3JtXCI6e1wicXVlcnlcIjpcIm5vLXF1ZXN0aW9uLW1h
cmtcIn19fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCBD
b250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdEludmFsaWRRdWVyeSk7CisgICAgY2hl
Y2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixcInJl
ZGlyZWN0XCI6e1widHJhbnNmb3JtXCI6e1wiZnJhZ21lbnRcIjpcIm5vLW51bWJlci1zaWduXCJ9
fX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwgQ29udGVu
dEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RJbnZhbGlkRnJhZ21lbnQpOworICAgIGNoZWNr
Q29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRp
cmVjdFwiOntcInRyYW5zZm9ybVwiOntcInBvcnRcIjpcIjY1NTM1XCJ9fX0sXCJ0cmlnZ2VyXCI6
e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwgeyB9KTsKKyAgICBjaGVja0NvbXBp
bGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVkaXJlY3Rc
Ijp7XCJ0cmFuc2Zvcm1cIjp7XCJwb3J0XCI6XCJcIn19fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmls
dGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCB7IH0pOwogICAgIGNoZWNrQ29tcGlsZXJFcnJvcigi
W3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRpcmVjdFwiOntcImV4dGVu
c2lvbi1wYXRoXCI6XCIvZG9lcy9zdGFydC93aXRoL3NsYXNoL1wifX0sXCJ0cmlnZ2VyXCI6e1wi
dXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwgeyB9KTsKLSAgICBjaGVja0NvbXBpbGVy
RXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVkaXJlY3RcIjp7
XCJ0cmFuc2Zvcm1cIjp7XCJzY2hlbWVcIjpcImFib3V0XCJ9fX0sXCJ0cmlnZ2VyXCI6e1widXJs
LWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09O
UmVkaXJlY3RVUkxTY2hlbWVOb3RBbGxvd2VkKTsKLSAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7
XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVkaXJlY3RcIjp7XCJ0cmFuc2Zv
cm1cIjp7XCJzY2hlbWVcIjpcImFib3V0XCJ9fX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwi
Olwid2Via2l0Lm9yZ1wifX1dIiwgeyB9LCB7ICJhYm91dCIgfSk7CisgICAgY2hlY2tDb21waWxl
ckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixcInJlZGlyZWN0XCI6
e1widHJhbnNmb3JtXCI6e1wic2NoZW1lXCI6XCJhYm91dFwifX19LFwidHJpZ2dlclwiOntcInVy
bC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNP
TlJlZGlyZWN0VVJMU2NoZW1lTm90QWxsb3dlZCwgeyB7ICJub3QtYWJvdXQiIH0gfSk7CisgICAg
Y2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixc
InJlZGlyZWN0XCI6e1widHJhbnNmb3JtXCI6e1wic2NoZW1lXCI6XCIhQCMkJVwifX19LFwidHJp
Z2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsIENvbnRlbnRFeHRlbnNp
b25FcnJvcjo6SlNPTlJlZGlyZWN0VVJMU2NoZW1lSW52YWxpZCk7CisgICAgY2hlY2tDb21waWxl
ckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixcInJlZGlyZWN0XCI6
e1widHJhbnNmb3JtXCI6e1wic2NoZW1lXCI6XCJBYm91dFwifX19LFwidHJpZ2dlclwiOntcInVy
bC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsIHsgfSwgeyB7ICJhYm91dCIgfSB9KTsKICAg
ICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJtb2RpZnktaGVh
ZGVyc1wiLFwicmVxdWVzdC1oZWFkZXJzXCI6NX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwi
Olwid2Via2l0Lm9yZ1wifX1dIiwgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OTW9kaWZ5SGVh
ZGVyc05vdEFycmF5KTsKICAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0
eXBlXCI6XCJtb2RpZnktaGVhZGVyc1wiLFwicmVxdWVzdC1oZWFkZXJzXCI6WzVdfSxcInRyaWdn
ZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9u
RXJyb3I6OkpTT05Nb2RpZnlIZWFkZXJzSW5mb05vdEFEaWN0aW9uYXJ5KTsKICAgICBjaGVja0Nv
bXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJtb2RpZnktaGVhZGVyc1wiLFwi
cmVxdWVzdC1oZWFkZXJzXCI6W3t9XX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Vi
a2l0Lm9yZ1wifX1dIiwgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OTW9kaWZ5SGVhZGVyc01p
c3NpbmdPcGVyYXRpb24pOwpAQCAtMzAyNCwxMSArMzAzMywxMSBAQCBURVNUX0YoQ29udGVudEV4
dGVuc2lvblRlc3QsIFNlcmlhbGl6YXRpb24pCiAgICAgICAgICJob3N0IiwKICAgICAgICAgInBh
c3N3b3JkIiwKICAgICAgICAgeyAvKiBwYXRoICovIH0sCi0gICAgICAgICJwb3J0IiwKKyAgICAg
ICAgMTIzLAogICAgICAgICB7IC8qIHF1ZXJ5ICovIH0sCiAgICAgICAgICJzY2hlbWUiLAogICAg
ICAgICAidXNlcm5hbWUiCi0gICAgfSB9IH0sIDc1KTsKKyAgICB9IH0gfSwgNzApOwogICAgIGNo
ZWNrUmVkaXJlY3RBY3Rpb25TZXJpYWxpemF0aW9uKHsgeyBSZWRpcmVjdEFjdGlvbjo6VVJMVHJh
bnNmb3JtQWN0aW9uIHsgeyB9LCB7IH0sIHsgfSwgeyB9LCB7IH0sIHsgInF1ZXJ5IiB9LCB7IH0s
IHsgfSB9IH0gfSwgMjApOwogICAgIGNoZWNrUmVkaXJlY3RBY3Rpb25TZXJpYWxpemF0aW9uKHsg
eyBSZWRpcmVjdEFjdGlvbjo6VVJMVHJhbnNmb3JtQWN0aW9uIHsgeyB9LCB7IH0sIHsgfSwgeyB9
LCB7IH0sCiAgICAgICAgIHsgUmVkaXJlY3RBY3Rpb246OlVSTFRyYW5zZm9ybUFjdGlvbjo6UXVl
cnlUcmFuc2Zvcm0geyB7IHsgImtleTEiLCBmYWxzZSwgInZhbHVlMSIgfSwgeyAia2V58J+SqSIs
IGZhbHNlLCAidmFsdWUyIiB9IH0sIHsgInRlc3RTdHJpbmcxIiwgInRlc3RTdHJpbmcyIiB9IH0g
fSwgeyB9LCB7IH0sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9XS0NvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQppbmRleCAxNTBiYzcw
ODgwZjAxODAwNDUwZDJmM2Y0YjAyMzUxNGRlNGIzYjI0Li4wY2ExOGVmNmEwZmIxYjJhYzgyODVm
ZjQ5OTNlZTI5MjEzOTk1ZDg4IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0KQEAg
LTI4LDggKzI4LDEwIEBACiAKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAjaW1wb3J0
ICJUZXN0LmgiCisjaW1wb3J0ICJUZXN0VVJMU2NoZW1lSGFuZGxlci5oIgogI2ltcG9ydCA8V2Vi
S2l0L1dLQ29udGVudFJ1bGVMaXN0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tDb250ZW50UnVsZUxp
c3RTdG9yZVByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnBhZ2VQcmVmZXJlbmNlc1By
aXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmg+
CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlckNvbnRlbnRGaWx0ZXIuaD4KICNpbXBvcnQgPHd0Zi9S
ZXRhaW5QdHIuaD4KQEAgLTQ3NCwzICs0NzYsMjc2IEBAIFRFU1RfRihXS0NvbnRlbnRSdWxlTGlz
dFN0b3JlVGVzdCwgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVNlbGVjdG9ycykKICAgICB9
XTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVMb29raW5nVXApOwogfQorCitz
dGF0aWMgUmV0YWluUHRyPFdLQ29udGVudFJ1bGVMaXN0PiBjb21waWxlQ29udGVudFJ1bGVMaXN0
KGNvbnN0IGNoYXIqIGpzb24sIE5TU3RyaW5nICppZGVudGlmaWVyID0gQCJ0ZXN0aWRlbnRpZmll
ciIpCit7CisgICAgW1tXS0NvbnRlbnRSdWxlTGlzdFN0b3JlIGRlZmF1bHRTdG9yZV0gX3JlbW92
ZUFsbENvbnRlbnRSdWxlTGlzdHNdOworCisgICAgX19ibG9jayBSZXRhaW5QdHI8V0tDb250ZW50
UnVsZUxpc3Q+IGxpc3Q7CisgICAgW1tXS0NvbnRlbnRSdWxlTGlzdFN0b3JlIGRlZmF1bHRTdG9y
ZV0gX2NvbXBpbGVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOkAidGVzdGlkZW50aWZpZXIi
IGVuY29kZWRDb250ZW50UnVsZUxpc3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlcyIs
IGpzb25dIGFsbG93ZWRSZWRpcmVjdFNjaGVtZXM6W05TU2V0IHNldFdpdGhPYmplY3RzOkAidGVz
dHNjaGVtZSIsIEAib3RoZXJ0ZXN0c2NoZW1lIiwgbmlsXSBjb21wbGV0aW9uSGFuZGxlcjpeKFdL
Q29udGVudFJ1bGVMaXN0ICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgIEVYUEVD
VF9OVUxMKGVycm9yKTsKKyAgICAgICAgbGlzdCA9IGZpbHRlcjsKKyAgICB9XTsKKyAgICB3aGls
ZSAoIWxpc3QpCisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CisK
KyAgICByZXR1cm4gbGlzdDsKK30KKworc3RhdGljIFJldGFpblB0cjxUZXN0TmF2aWdhdGlvbkRl
bGVnYXRlPiBuYXZpZ2F0aW9uRGVsZWdhdGVBbGxvd2luZ0FjdGl2ZUFjdGlvbnNPblRlc3RIb3N0
KCkKK3sKKyAgICBzdGF0aWMgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1Rlc3ROYXZpZ2F0aW9u
RGVsZWdhdGUgbmV3XSk7CisgICAgZGVsZWdhdGUuZ2V0KCkuZGVjaWRlUG9saWN5Rm9yTmF2aWdh
dGlvbkFjdGlvbldpdGhQcmVmZXJlbmNlcyA9IF4oV0tOYXZpZ2F0aW9uQWN0aW9uICosIFdLV2Vi
cGFnZVByZWZlcmVuY2VzICpwcmVmZXJlbmNlcywgdm9pZCAoXmRlY2lzaW9uSGFuZGxlcikoV0tO
YXZpZ2F0aW9uQWN0aW9uUG9saWN5LCBXS1dlYnBhZ2VQcmVmZXJlbmNlcyAqKSkgeworICAgICAg
ICBwcmVmZXJlbmNlcy5fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5zID0gW05T
U2V0IHNldFdpdGhPYmplY3Q6QCIqOi8vdGVzdGhvc3QvKiJdOworICAgICAgICBkZWNpc2lvbkhh
bmRsZXIoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5QWxsb3csIHByZWZlcmVuY2VzKTsKKyAgICB9
OworICAgIHJldHVybiBkZWxlZ2F0ZTsKK30KKworVEVTVF9GKFdLQ29udGVudFJ1bGVMaXN0U3Rv
cmVUZXN0LCBNb2RpZnlIZWFkZXJzKQoreworICAgIGF1dG8gbGlzdCA9IGNvbXBpbGVDb250ZW50
UnVsZUxpc3QoUiJKU09OKAorICAgICAgICBbIHsKKyAgICAgICAgICAgICJhY3Rpb24iOiB7ICJ0
eXBlIjogIm1vZGlmeS1oZWFkZXJzIiwgInJlcXVlc3QtaGVhZGVycyI6IFsgeworICAgICAgICAg
ICAgICAgICJvcGVyYXRpb24iOiAic2V0IiwKKyAgICAgICAgICAgICAgICAiaGVhZGVyIjogInRl
c3RrZXkiLAorICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICJ0ZXN0dmFsdWUiCisgICAgICAgICAg
ICB9IF0gfSwKKyAgICAgICAgICAgICJ0cmlnZ2VyIjogeyAidXJsLWZpbHRlciI6ICJ0ZXN0c2No
ZW1lIiB9CisgICAgICAgIH0sIHsKKyAgICAgICAgICAgICJhY3Rpb24iOiB7ICJ0eXBlIjogIm1v
ZGlmeS1oZWFkZXJzIiwgInJlcXVlc3QtaGVhZGVycyI6IFsgeworICAgICAgICAgICAgICAgICJv
cGVyYXRpb24iOiAicmVtb3ZlIiwKKyAgICAgICAgICAgICAgICAiaGVhZGVyIjogIkFjY2VwdCIK
KyAgICAgICAgICAgIH0gXSB9LAorICAgICAgICAgICAgInRyaWdnZXIiOiB7ICJ1cmwtZmlsdGVy
IjogInRlc3RzY2hlbWUiIH0KKyAgICAgICAgfSwgeworICAgICAgICAgICAgImFjdGlvbiI6IHsg
InR5cGUiOiAibW9kaWZ5LWhlYWRlcnMiLCAicmVxdWVzdC1oZWFkZXJzIjogWyB7CisgICAgICAg
ICAgICAgICAgIm9wZXJhdGlvbiI6ICJhcHBlbmQiLAorICAgICAgICAgICAgICAgICJoZWFkZXIi
OiAiQ29udGVudC1UeXBlIiwKKyAgICAgICAgICAgICAgICAidmFsdWUiOiAiTW9kaWZpZWQtYnkt
dGVzdCIKKyAgICAgICAgICAgIH0gXSB9LAorICAgICAgICAgICAgInRyaWdnZXIiOiB7ICJ1cmwt
ZmlsdGVyIjogInRlc3RzY2hlbWUiIH0KKyAgICAgICAgfSBdCisgICAgKUpTT04iKTsKKworICAg
IF9fYmxvY2sgYm9vbCByZWNlaXZlZEFsbFJlcXVlc3RzIHsgZmFsc2UgfTsKKyAgICBhdXRvIGhh
bmRsZXIgPSBhZG9wdE5TKFtUZXN0VVJMU2NoZW1lSGFuZGxlciBuZXddKTsKKyAgICBoYW5kbGVy
LmdldCgpLnN0YXJ0VVJMU2NoZW1lVGFza0hhbmRsZXIgPSBeKFdLV2ViVmlldyAqLCBpZCA8V0tV
UkxTY2hlbWVUYXNrPiB0YXNrKSB7CisgICAgICAgIE5TU3RyaW5nICpwYXRoID0gdGFzay5yZXF1
ZXN0LlVSTC5wYXRoOworICAgICAgICBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgTlNTdHJpbmcg
Kj4gKmZpZWxkcyA9IFt0YXNrLnJlcXVlc3QgYWxsSFRUUEhlYWRlckZpZWxkc107CisgICAgICAg
IGlmIChbcGF0aCBpc0VxdWFsVG9TdHJpbmc6QCIvbWFpbi5odG1sIl0pIHsKKyAgICAgICAgICAg
IEVYUEVDVF9XS19TVFJFUShmaWVsZHNbQCJDb250ZW50LVR5cGUiXSwgIk1vZGlmaWVkLWJ5LXRl
c3QiKTsKKyAgICAgICAgICAgIEVYUEVDVF9XS19TVFJFUShmaWVsZHNbQCJ0ZXN0a2V5Il0sICJ0
ZXN0dmFsdWUiKTsKKyAgICAgICAgICAgIEVYUEVDVF9OVUxMKGZpZWxkc1tAIkFjY2VwdCJdKTsK
KyAgICAgICAgICAgIHJldHVybiByZXNwb25kKHRhc2ssICI8aWZyYW1lIHNyYz0nLy9vdGhlcmhv
c3QvZnJhbWUuaHRtbCc+PC9pZnJhbWU+Iik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFtwYXRo
IGlzRXF1YWxUb1N0cmluZzpAIi9mcmFtZS5odG1sIl0pIHsKKyAgICAgICAgICAgIEVYUEVDVF9O
VUxMKGZpZWxkc1tAIkNvbnRlbnQtVHlwZSJdKTsKKyAgICAgICAgICAgIEVYUEVDVF9OVUxMKGZp
ZWxkc1tAInRlc3RrZXkiXSk7CisgICAgICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZmllbGRzW0Ai
QWNjZXB0Il0pOworICAgICAgICAgICAgcmV0dXJuIHJlc3BvbmQodGFzaywgIjxzY3JpcHQ+ZmV0
Y2goJy8vdGVzdGhvc3QvZmV0Y2gudHh0Jyx7aGVhZGVyczogeydDb250ZW50LVR5cGUnOiAnYXBw
bGljYXRpb24vanNvbid9fSk8L3NjcmlwdD4iKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoW3Bh
dGggaXNFcXVhbFRvU3RyaW5nOkAiL2ZldGNoLnR4dCJdKSB7CisgICAgICAgICAgICBFWFBFQ1Rf
V0tfU1RSRVEoZmllbGRzW0AiQ29udGVudC1UeXBlIl0sICJhcHBsaWNhdGlvbi9qc29uOyBNb2Rp
ZmllZC1ieS10ZXN0Iik7CisgICAgICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoZmllbGRzW0AidGVz
dGtleSJdLCAidGVzdHZhbHVlIik7CisgICAgICAgICAgICBFWFBFQ1RfTlVMTChmaWVsZHNbQCJB
Y2NlcHQiXSk7CisgICAgICAgICAgICByZWNlaXZlZEFsbFJlcXVlc3RzID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHJldHVybiByZXNwb25kKHRhc2ssICIiKTsKKyAgICAgICAgfQorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9OworCisgICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRv
cHROUyhbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBuZXddKTsKKyAgICBbW2NvbmZpZ3VyYXRpb24g
dXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRDb250ZW50UnVsZUxpc3Q6bGlzdC5nZXQoKV07Cisg
ICAgW2NvbmZpZ3VyYXRpb24gc2V0VVJMU2NoZW1lSGFuZGxlcjpoYW5kbGVyLmdldCgpIGZvclVS
TFNjaGVtZTpAInRlc3RzY2hlbWUiXTsKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tX
ZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TWmVyb1JlY3QgY29uZmlndXJhdGlvbjpjb25m
aWd1cmF0aW9uLmdldCgpXSk7CisgICAgd2ViVmlldy5nZXQoKS5uYXZpZ2F0aW9uRGVsZWdhdGUg
PSBuYXZpZ2F0aW9uRGVsZWdhdGVBbGxvd2luZ0FjdGl2ZUFjdGlvbnNPblRlc3RIb3N0KCkuZ2V0
KCk7CisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVS
TDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAInRlc3RzY2hlbWU6Ly90ZXN0aG9zdC9tYWluLmh0bWwi
XV1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRBbGxSZXF1ZXN0cyk7
CisgICAgCisgICAgLy8gRklYTUU6IEFwcGVuZGluZyB0byB0aGUgVXNlci1BZ2VudCByZXBsYWNl
cyB0aGUgdXNlciBhZ2VudCBiZWNhdXNlIHdlIGhhdmVuJ3QgYWRkZWQgdGhlIHVzZXIgYWdlbnQg
eWV0IHdoZW4gcHJvY2Vzc2luZyB0aGUgcmVxdWVzdC4KK30KKworVEVTVF9GKFdLQ29udGVudFJ1
bGVMaXN0U3RvcmVUZXN0LCBSZWRpcmVjdCkKK3sKKyAgICBhdXRvIGxpc3QgPSBjb21waWxlQ29u
dGVudFJ1bGVMaXN0KFIiSlNPTigKKyAgICAgICAgWyB7CisgICAgICAgICAgICAiYWN0aW9uIjog
eyAidHlwZSI6ICJyZWRpcmVjdCIsICJyZWRpcmVjdCI6IHsKKyAgICAgICAgICAgICAgICAidXJs
IjogIm90aGVydGVzdHNjaGVtZTovL25vdC10ZXN0aG9zdC8xLXJlZGlyZWN0ZWQudHh0IgorICAg
ICAgICAgICAgfSB9LAorICAgICAgICAgICAgInRyaWdnZXIiOiB7ICJ1cmwtZmlsdGVyIjogIjEu
dHh0IiB9CisgICAgICAgIH0sIHsKKyAgICAgICAgICAgICJhY3Rpb24iOiB7ICJ0eXBlIjogInJl
ZGlyZWN0IiwgInJlZGlyZWN0IjogeyAidHJhbnNmb3JtIjogeworICAgICAgICAgICAgICAgICJw
b3J0IjogIjEyMyIsCisgICAgICAgICAgICAgICAgImlnbm9yZWQtY29tbWVudCI6ICIxMjMgaXMg
YSBmb3JiaWRkZW4gcG9ydCwgc28gdGhpcyBVUkwgaXMgbm90IHNlZW4gYnkgdGhlIFdLVVJMU2No
ZW1lSGFuZGxlci4iCisgICAgICAgICAgICB9IH0gfSwKKyAgICAgICAgICAgICJ0cmlnZ2VyIjog
eyAidXJsLWZpbHRlciI6ICIyLnR4dCIgfQorICAgICAgICB9LCB7CisgICAgICAgICAgICAiYWN0
aW9uIjogeyAidHlwZSI6ICJyZWRpcmVjdCIsICJyZWRpcmVjdCI6IHsgInRyYW5zZm9ybSI6IHsK
KyAgICAgICAgICAgICAgICAiaG9zdCI6ICJuZXdob3N0IiwKKyAgICAgICAgICAgICAgICAidXNl
cm5hbWUiOiAibmV3dXNlcm5hbWUiLAorICAgICAgICAgICAgICAgICJwb3J0IjogIjQ0MyIKKyAg
ICAgICAgICAgIH0gfSB9LAorICAgICAgICAgICAgInRyaWdnZXIiOiB7ICJ1cmwtZmlsdGVyIjog
IjMudHh0IiB9CisgICAgICAgIH0sIHsKKyAgICAgICAgICAgICJhY3Rpb24iOiB7ICJ0eXBlIjog
InJlZGlyZWN0IiwgInJlZGlyZWN0IjogeyAidHJhbnNmb3JtIjogeworICAgICAgICAgICAgICAg
ICJwb3J0IjogIiIsCisgICAgICAgICAgICAgICAgInNjaGVtZSI6ICJvdGhlcnRlc3RzY2hlbWUi
LAorICAgICAgICAgICAgICAgICJxdWVyeSI6ICI/a2V5PXZhbHVlIgorICAgICAgICAgICAgfSB9
IH0sCisgICAgICAgICAgICAidHJpZ2dlciI6IHsgInVybC1maWx0ZXIiOiAiNC50eHQiIH0KKyAg
ICAgICAgfSwgeworICAgICAgICAgICAgImFjdGlvbiI6IHsgInR5cGUiOiAicmVkaXJlY3QiLCAi
cmVkaXJlY3QiOiB7ICJ0cmFuc2Zvcm0iOiB7CisgICAgICAgICAgICAgICAgInBhc3N3b3JkIjog
InRlc3RwYXNzd29yZCIsCisgICAgICAgICAgICAgICAgInF1ZXJ5IjogIiIsCisgICAgICAgICAg
ICAgICAgImZyYWdtZW50IjogIiNmcmFnbWVudC10by1iZS1hZGRlZCIKKyAgICAgICAgICAgIH0g
fSB9LAorICAgICAgICAgICAgInRyaWdnZXIiOiB7ICJ1cmwtZmlsdGVyIjogIjUudHh0IiB9Cisg
ICAgICAgIH0sIHsKKyAgICAgICAgICAgICJhY3Rpb24iOiB7ICJ0eXBlIjogInJlZGlyZWN0Iiwg
InJlZGlyZWN0IjogeyAidHJhbnNmb3JtIjogeworICAgICAgICAgICAgICAgICJwYXNzd29yZCI6
ICJ0ZXN0cGFzc3dvcmQiLAorICAgICAgICAgICAgICAgICJmcmFnbWVudCI6ICIiCisgICAgICAg
ICAgICB9IH0gfSwKKyAgICAgICAgICAgICJ0cmlnZ2VyIjogeyAidXJsLWZpbHRlciI6ICI2LnR4
dCIgfQorICAgICAgICB9LCB7CisgICAgICAgICAgICAiYWN0aW9uIjogeyAidHlwZSI6ICJyZWRp
cmVjdCIsICJyZWRpcmVjdCI6IHsgInRyYW5zZm9ybSI6IHsKKyAgICAgICAgICAgICAgICAicXVl
cnkiOiAiPyIsCisgICAgICAgICAgICAgICAgImZyYWdtZW50IjogIiMiCisgICAgICAgICAgICB9
IH0gfSwKKyAgICAgICAgICAgICJ0cmlnZ2VyIjogeyAidXJsLWZpbHRlciI6ICI3LnR4dCIgfQor
ICAgICAgICB9LCB7CisgICAgICAgICAgICAiYWN0aW9uIjogeyAidHlwZSI6ICJyZWRpcmVjdCIs
ICJyZWRpcmVjdCI6IHsgInRyYW5zZm9ybSI6IHsKKyAgICAgICAgICAgICAgICAicXVlcnktdHJh
bnNmb3JtIjogeworICAgICAgICAgICAgICAgICAgICAicmVtb3ZlLXBhcmFtZXRlcnMiOiBbICJw
YXJhbWV0ZXItdG8tcmVtb3ZlIiBdLAorICAgICAgICAgICAgICAgICAgICAiYWRkLW9yLXJlcGxh
Y2UtcGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgImtleSI6ICJrZXkt
dG8tYWRkIiwgInZhbHVlIjogInZhbHVlLXRvLWFkZCIgfSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHsgImtleSI6ICJrZXktdG8tcmVwbGFjZS1vbmx5IiwgInZhbHVlIjogInZhbHVlLXRvLXJl
cGxhY2Utb25seSIsICJyZXBsYWNlLW9ubHkiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgICAg
ICAgICB7ICJrZXkiOiAia2V5LXRvLXJlcGxhY2Utb25seS1idXQtbm90LWZvdW5kIiwgInZhbHVl
IjogInZhbHVlLXRvLXJlcGxhY2Utb25seS1idXQtbm90LWZvdW5kIiwgInJlcGxhY2Utb25seSI6
IHRydWUgfQorICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSB9IH0sCisgICAgICAgICAgICAidHJpZ2dlciI6IHsgInVybC1maWx0ZXIiOiAiOC50
eHQiIH0KKyAgICAgICAgfSBdCisgICAgKUpTT04iKTsKKworICAgIF9fYmxvY2sgYm9vbCByZWNl
aXZlZEFsbFJlcXVlc3RzIHsgZmFsc2UgfTsKKyAgICBfX2Jsb2NrIGF1dG8gdXJscyA9IGFkb3B0
TlMoW05TTXV0YWJsZUFycmF5IG5ld10pOworICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW1Rl
c3RVUkxTY2hlbWVIYW5kbGVyIG5ld10pOworICAgIGhhbmRsZXIuZ2V0KCkuc3RhcnRVUkxTY2hl
bWVUYXNrSGFuZGxlciA9IF4oV0tXZWJWaWV3ICosIGlkIDxXS1VSTFNjaGVtZVRhc2s+IHRhc2sp
IHsKKyAgICAgICAgTlNVUkwgKnVybCA9IHRhc2sucmVxdWVzdC5VUkw7CisgICAgICAgIFt1cmxz
IGFkZE9iamVjdDp1cmxdOworICAgICAgICBOU1N0cmluZyAqcGF0aCA9IHVybC5wYXRoOworICAg
ICAgICBpZiAoW3BhdGggaXNFcXVhbFRvU3RyaW5nOkAiL21haW4uaHRtbCJdKSB7CisgICAgICAg
ICAgICByZXR1cm4gcmVzcG9uZCh0YXNrLCBSIkhUTUwoCisgICAgICAgICAgICAgICAgPHNjcmlw
dD4KKyAgICAgICAgICAgICAgICAgICAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hTdWJyZXNvdXJjZXMo
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeyBh
d2FpdCBmZXRjaCgnMS50eHQnKSB9IGNhdGNoKGUpIHsgfTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRyeSB7IGF3YWl0IGZldGNoKCcvL25vdC10ZXN0aG9zdC1zaG91bGQtbm90LXRyaWdnZXIt
YWN0aW9uLzIudHh0Jywge21vZGU6J25vLWNvcnMnfSkgfSBjYXRjaChlKSB7IH07CisgICAgICAg
ICAgICAgICAgICAgICAgICB0cnkgeyBhd2FpdCBmZXRjaCgnLy90ZXN0aG9zdC8yLnR4dCcpIH0g
Y2F0Y2goZSkgeyB9OworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsgYXdhaXQgZmV0Y2go
Jy8zLnR4dD9xdWVyeS1zaG91bGQtbm90LWJlLXJlbW92ZWQnKSB9IGNhdGNoKGUpIHsgfTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRyeSB7IGF3YWl0IGZldGNoKCcvL3Rlc3Rob3N0OjgwLzQu
dHh0I2ZyYWdtZW50LXNob3VsZC1ub3QtYmUtcmVtb3ZlZCcpIH0gY2F0Y2goZSkgeyB9OworICAg
ICAgICAgICAgICAgICAgICAgICAgdHJ5IHsgYXdhaXQgZmV0Y2goJzUudHh0P3F1ZXJ5LXNob3Vs
ZC1iZS1yZW1vdmVkJykgfSBjYXRjaChlKSB7IH07CisgICAgICAgICAgICAgICAgICAgICAgICB0
cnkgeyBhd2FpdCBmZXRjaCgnNi50eHQjZnJhZ21lbnQtc2hvdWxkLWJlLXJlbW92ZWQnKSB9IGNh
dGNoKGUpIHsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7IGF3YWl0IGZldGNoKCc3
LnR4dCcpIH0gY2F0Y2goZSkgeyB9OworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsgYXdh
aXQgZmV0Y2goJzgudHh0P2tleS10by1yZXBsYWNlLW9ubHk9cHJlLXJlcGxhY2VtZW50LXZhbHVl
JykgfSBjYXRjaChlKSB7IH07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgZmV0Y2hTdWJyZXNvdXJjZXMoKTsKKyAgICAgICAgICAgICAgICA8L3NjcmlwdD4KKyAg
ICAgICAgICAgIClIVE1MIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFtwYXRoIGlzRXF1YWxU
b1N0cmluZzpAIi84LnR4dCJdKQorICAgICAgICAgICAgcmVjZWl2ZWRBbGxSZXF1ZXN0cyA9IHRy
dWU7CisgICAgICAgIHJlc3BvbmQodGFzaywgIiIpOworICAgIH07CisKKyAgICBhdXRvIGNvbmZp
Z3VyYXRpb24gPSBhZG9wdE5TKFtXS1dlYlZpZXdDb25maWd1cmF0aW9uIG5ld10pOworICAgIFtb
Y29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZENvbnRlbnRSdWxlTGlzdDps
aXN0LmdldCgpXTsKKyAgICBbY29uZmlndXJhdGlvbiBzZXRVUkxTY2hlbWVIYW5kbGVyOmhhbmRs
ZXIuZ2V0KCkgZm9yVVJMU2NoZW1lOkAidGVzdHNjaGVtZSJdOworICAgIFtjb25maWd1cmF0aW9u
IHNldFVSTFNjaGVtZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBmb3JVUkxTY2hlbWU6QCJvdGhlcnRl
c3RzY2hlbWUiXTsKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOk5TWmVyb1JlY3QgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdl
dCgpXSk7CisgICAgd2ViVmlldy5nZXQoKS5uYXZpZ2F0aW9uRGVsZWdhdGUgPSBuYXZpZ2F0aW9u
RGVsZWdhdGVBbGxvd2luZ0FjdGl2ZUFjdGlvbnNPblRlc3RIb3N0KCkuZ2V0KCk7CisgICAgW3dl
YlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJM
V2l0aFN0cmluZzpAInRlc3RzY2hlbWU6Ly90ZXN0aG9zdC9tYWluLmh0bWwiXV1dOworICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRBbGxSZXF1ZXN0cyk7CisKKyAgICBWZWN0
b3I8Y29uc3QgY2hhcio+IGV4cGVjdGVkUmVxdWVzdGVkVVJMcyB7CisgICAgICAgICJ0ZXN0c2No
ZW1lOi8vdGVzdGhvc3QvbWFpbi5odG1sIiwKKyAgICAgICAgIm90aGVydGVzdHNjaGVtZTovL25v
dC10ZXN0aG9zdC8xLXJlZGlyZWN0ZWQudHh0IiwKKyAgICAgICAgInRlc3RzY2hlbWU6Ly9ub3Qt
dGVzdGhvc3Qtc2hvdWxkLW5vdC10cmlnZ2VyLWFjdGlvbi8yLnR4dCIsCisgICAgICAgICJ0ZXN0
c2NoZW1lOi8vbmV3dXNlcm5hbWVAbmV3aG9zdDo0NDMvMy50eHQ/cXVlcnktc2hvdWxkLW5vdC1i
ZS1yZW1vdmVkIiwKKyAgICAgICAgIm90aGVydGVzdHNjaGVtZTovL3Rlc3Rob3N0LzQudHh0P2tl
eT12YWx1ZSNmcmFnbWVudC1zaG91bGQtbm90LWJlLXJlbW92ZWQiLAorICAgICAgICAidGVzdHNj
aGVtZTovLzp0ZXN0cGFzc3dvcmRAdGVzdGhvc3QvNS50eHQjZnJhZ21lbnQtdG8tYmUtYWRkZWQi
LAorICAgICAgICAidGVzdHNjaGVtZTovLzp0ZXN0cGFzc3dvcmRAdGVzdGhvc3QvNi50eHQiLAor
ICAgICAgICAidGVzdHNjaGVtZTovL3Rlc3Rob3N0LzcudHh0PyMiLAorICAgICAgICAidGVzdHNj
aGVtZTovL3Rlc3Rob3N0LzgudHh0P2tleS10by1yZXBsYWNlLW9ubHk9dmFsdWUtdG8tcmVwbGFj
ZS1vbmx5JmtleS10by1hZGQ9dmFsdWUtdG8tYWRkIiwKKyAgICB9OworICAgIEVYUEVDVF9FUShl
eHBlY3RlZFJlcXVlc3RlZFVSTHMuc2l6ZSgpLCBbdXJscyBjb3VudF0pOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgZXhwZWN0ZWRSZXF1ZXN0ZWRVUkxzLnNpemUoKTsgaSsrKQorICAgICAg
ICBFWFBFQ1RfV0tfU1RSRVEoZXhwZWN0ZWRSZXF1ZXN0ZWRVUkxzW2ldLCBbW3VybHMgb2JqZWN0
QXRJbmRleDppXSBhYnNvbHV0ZVN0cmluZ10pOworfQorCitURVNUX0YoV0tDb250ZW50UnVsZUxp
c3RTdG9yZVRlc3QsIE51bGxQYXR0ZXJuU2V0KQoreworICAgIGF1dG8gbGlzdCA9IGNvbXBpbGVD
b250ZW50UnVsZUxpc3QoUiJKU09OKAorICAgICAgICBbIHsKKyAgICAgICAgICAgICJhY3Rpb24i
OiB7ICJ0eXBlIjogInJlZGlyZWN0IiwgInJlZGlyZWN0IjogeworICAgICAgICAgICAgICAgICJ1
cmwiOiAidGVzdHNjaGVtZTovL3Rlc3Rob3N0L21haW4tcmVkaXJlY3RlZC5odG1sIgorICAgICAg
ICAgICAgfSB9LAorICAgICAgICAgICAgInRyaWdnZXIiOiB7ICJ1cmwtZmlsdGVyIjogIm1haW4u
aHRtbCIgfQorICAgICAgICB9IF0KKyAgICApSlNPTiIpOworCisgICAgX19ibG9jayBzdGQ6Om9w
dGlvbmFsPGJvb2w+IHJlZGlyZWN0ZWRSZXN1bHQ7CisgICAgYXV0byBoYW5kbGVyID0gYWRvcHRO
UyhbVGVzdFVSTFNjaGVtZUhhbmRsZXIgbmV3XSk7CisgICAgaGFuZGxlci5nZXQoKS5zdGFydFVS
TFNjaGVtZVRhc2tIYW5kbGVyID0gXihXS1dlYlZpZXcgKiwgaWQgPFdLVVJMU2NoZW1lVGFzaz4g
dGFzaykgeworICAgICAgICBOU1N0cmluZyAqcGF0aCA9IHRhc2sucmVxdWVzdC5VUkwucGF0aDsK
KyAgICAgICAgaWYgKFtwYXRoIGlzRXF1YWxUb1N0cmluZzpAIi9tYWluLmh0bWwiXSkKKyAgICAg
ICAgICAgIHJlZGlyZWN0ZWRSZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBFWFBFQ1RfV0tfU1RSRVEocGF0aCwgIi9tYWluLXJlZGlyZWN0ZWQuaHRtbCIpOworICAg
ICAgICAgICAgcmVkaXJlY3RlZFJlc3VsdCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmVz
cG9uZCh0YXNrLCAiIik7CisgICAgfTsKKworICAgIF9fYmxvY2sgZW51bSBjbGFzcyBEZWxlZ2F0
ZUFjdGlvbiA6IHVpbnQ4X3QgeworICAgICAgICBBbGxvd0FsbCwKKyAgICAgICAgQWxsb3dOb25l
LAorICAgICAgICBBbGxvd1Rlc3RIb3N0LAorICAgIH0gZGVsZWdhdGVBY3Rpb247CisgICAgYXV0
byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1Rlc3ROYXZpZ2F0aW9uRGVsZWdhdGUgbmV3XSk7CisgICAg
ZGVsZWdhdGUuZ2V0KCkuZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbldpdGhQcmVmZXJl
bmNlcyA9IF4oV0tOYXZpZ2F0aW9uQWN0aW9uICosIFdLV2VicGFnZVByZWZlcmVuY2VzICpwcmVm
ZXJlbmNlcywgdm9pZCAoXmRlY2lzaW9uSGFuZGxlcikoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5
LCBXS1dlYnBhZ2VQcmVmZXJlbmNlcyAqKSkgeworICAgICAgICBFWFBFQ1RfTk9UX05VTEwocHJl
ZmVyZW5jZXMuX2FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNQYXR0ZXJucyk7CisgICAgICAg
IEVYUEVDVF9FUShwcmVmZXJlbmNlcy5fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRl
cm5zLmNvdW50LCAwdSk7CisgICAgICAgIHN3aXRjaCAoZGVsZWdhdGVBY3Rpb24pIHsKKyAgICAg
ICAgY2FzZSBEZWxlZ2F0ZUFjdGlvbjo6QWxsb3dBbGw6CisgICAgICAgICAgICBwcmVmZXJlbmNl
cy5fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5zID0gbmlsOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRGVsZWdhdGVBY3Rpb246OkFsbG93Tm9uZToKKyAgICAg
ICAgICAgIHByZWZlcmVuY2VzLl9hY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMg
PSBbTlNTZXQgc2V0XTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERlbGVnYXRl
QWN0aW9uOjpBbGxvd1Rlc3RIb3N0OgorICAgICAgICAgICAgcHJlZmVyZW5jZXMuX2FjdGl2ZUNv
bnRlbnRSdWxlTGlzdEFjdGlvbnNQYXR0ZXJucyA9IFtOU1NldCBzZXRXaXRoT2JqZWN0OkAiKjov
L3Rlc3Rob3N0LyoiXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRl
Y2lzaW9uSGFuZGxlcihXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3lBbGxvdywgcHJlZmVyZW5jZXMp
OworICAgIH07CisKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtXS1dlYlZpZXdD
b25maWd1cmF0aW9uIG5ld10pOworICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRy
b2xsZXJdIGFkZENvbnRlbnRSdWxlTGlzdDpsaXN0LmdldCgpXTsKKyAgICBbY29uZmlndXJhdGlv
biBzZXRVUkxTY2hlbWVIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgZm9yVVJMU2NoZW1lOkAidGVzdHNj
aGVtZSJdOworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6TlNaZXJvUmVjdCBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCld
KTsKKyAgICB3ZWJWaWV3LmdldCgpLm5hdmlnYXRpb25EZWxlZ2F0ZSA9IGRlbGVnYXRlLmdldCgp
OworCisgICAgYXV0byBnZXRSZWRpcmVjdFJlc3VsdCA9IF4oRGVsZWdhdGVBY3Rpb24gYWN0aW9u
KSB7CisgICAgICAgIGRlbGVnYXRlQWN0aW9uID0gYWN0aW9uOworICAgICAgICByZWRpcmVjdGVk
UmVzdWx0ID0gc3RkOjpudWxsb3B0OworICAgICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNV
UkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAidGVzdHNjaGVt
ZTovL3Rlc3Rob3N0L21haW4uaHRtbCJdXV07CisgICAgICAgIHdoaWxlICghcmVkaXJlY3RlZFJl
c3VsdCkKKyAgICAgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7Cisg
ICAgICAgIHJldHVybiAqcmVkaXJlY3RlZFJlc3VsdDsKKyAgICB9OworICAgIEVYUEVDVF9UUlVF
KGdldFJlZGlyZWN0UmVzdWx0KERlbGVnYXRlQWN0aW9uOjpBbGxvd0FsbCkpOworICAgIEVYUEVD
VF9GQUxTRShnZXRSZWRpcmVjdFJlc3VsdChEZWxlZ2F0ZUFjdGlvbjo6QWxsb3dOb25lKSk7Cisg
ICAgRVhQRUNUX1RSVUUoZ2V0UmVkaXJlY3RSZXN1bHQoRGVsZWdhdGVBY3Rpb246OkFsbG93VGVz
dEhvc3QpKTsKK30K
</data>
<flag name="commit-queue"
          id="469629"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444578</attachid>
            <date>2021-11-17 14:30:36 -0800</date>
            <delta_ts>2021-11-17 15:38:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233268-20211117143035.patch</filename>
            <type>text/plain</type>
            <size>95507</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NTk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBACisyMDIxLTExLTE3ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50
IG1vc3Qgb2YgcmVkaXJlY3QgYW5kIG1vZGlmeS1oZWFkZXJzIGFjdGlvbiB0eXBlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzMjY4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRz
IG1vZGlmeS1oZWFkZXJzIGFuZCByZWRpcmVjdCBhY3Rpb25zIGV4Y2VwdCBmb3IgZXh0ZW5zaW9u
LXBhdGggYW5kIHJlZ2V4LXN1YnN0aXR1dGlvbiB2YXJpYW50cyBvZiByZWRpcmVjdGluZywKKyAg
ICAgICAgd2hpY2ggYXJlIGJpZyBlbm91Z2ggdG8gYmUgaW1wbGVtZW50ZWQgaW4gdGhlaXIgb3du
IHBhdGNoLiAgSW4gb3JkZXIgdG8gZW5hYmxlIHRoZXNlIGFjdGlvbnMsIHRoZSBXS0NvbnRlbnRS
dWxlTGlzdCBuZWVkcyB0bworICAgICAgICBiZSBjb21waWxlZCB3aXRoIG5ldyBTUEkgd2hlcmUg
eW91IHNwZWNpZnkgd2hpY2ggc2NoZW1lcyBhcmUgYWxsb3dlZCB0byBiZSByZWRpcmVjdGVkIHRv
LCBhbmQgU1BJIGluIFdLV2VicGFnZVByZWZlcmVuY2VzIGFsbG93cworICAgICAgICBhZGRpdGlv
biBvZiBhIHNldCBvZiBwYXR0ZXJucyB0byBzcGVjaWZ5IHdoaWNoIFVSTHMgYXJlIGFsbG93ZWQg
dG8gYmUgbW9kaWZpZWQuICBBbiBlbXB0eSBzZXQgbWVhbnMgbm8gYWN0aXZlIGFjdGlvbnMgYXJl
IGFsbG93ZWQsCisgICAgICAgIHdoaWNoIGlzIHRoZSBkZWZhdWx0LCB3aGVyZWFzIGEgbnVsbCBz
ZXQgbWVhbnMgYWxsIGFjdGl2ZSBhY3Rpb25zIGFyZSBhbGxvd2VkLgorCisgICAgICAgIEkgYWxz
byBtYWRlIHRoZSBwYXJzZXIgYSBsaXR0bGUgYml0IHN0cmljdGVyLCBzdWNoIGFzIG9ubHkgYWxs
b3dpbmcgdmFsaWQgcG9ydHMsIHF1ZXJpZXMsIGFuZCBmcmFnbWVudHMuCisKKyAgICAgICAgKiBN
b2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHA6CisgICAgICAgICogY29udGVu
dGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkFjdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudEV4dGVuc2lvbnM6Ok1vZGlmeUhlYWRlcnNBY3Rpb246Om9wZXJhdG9yPT0gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Ok1vZGlmeUhlYWRlcnNB
Y3Rpb246OmFwcGx5VG9SZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpNb2RpZnlIZWFkZXJzQWN0aW9uOjpNb2RpZnlIZWFkZXJJbmZvOjphcHBseVRvUmVxdWVz
dCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6UmVkaXJlY3RBY3Rpb246
OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpSZWRpcmVjdEFj
dGlvbjo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6UmVkaXJlY3RBY3Rpb246OmFwcGx5VG9SZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRFeHRlbnNpb25zOjpSZWRpcmVjdEFjdGlvbjo6VVJMVHJhbnNmb3JtQWN0aW9uOjpw
YXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6UmVkaXJlY3RBY3Rp
b246OlVSTFRyYW5zZm9ybUFjdGlvbjo6c2VyaWFsaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpSZWRpcmVjdEFjdGlvbjo6VVJMVHJhbnNmb3JtQWN0aW9u
OjpkZXNlcmlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6UmVk
aXJlY3RBY3Rpb246OlVSTFRyYW5zZm9ybUFjdGlvbjo6YXBwbHlUb1VSTCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6UmVkaXJlY3RBY3Rpb246OlVSTFRyYW5z
Zm9ybUFjdGlvbjo6UXVlcnlUcmFuc2Zvcm06OmFwcGx5VG9VUkwgY29uc3QpOgorICAgICAgICAq
IGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25BY3Rpb25zLmg6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VmFyaWFudEhhc2hlcjo6aGFzaCk6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VmVjdG9ySGFzaGVyOjpoYXNoKToKKyAgICAg
ICAgKFdURjo6RGVmYXVsdEhhc2g8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlJlZGlyZWN0
QWN0aW9uPjo6aGFzaCk6CisgICAgICAgIChXVEY6OkRlZmF1bHRIYXNoPFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpSZWRpcmVjdEFjdGlvbj46OmVxdWFsKToKKyAgICAgICAgKFdURjo6RGVm
YXVsdEhhc2g8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Ok1vZGlmeUhlYWRlcnNBY3Rpb24+
OjpoYXNoKToKKyAgICAgICAgKFdURjo6RGVmYXVsdEhhc2g8V2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6Ok1vZGlmeUhlYWRlcnNBY3Rpb24+OjplcXVhbCk6CisgICAgICAgICogY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRFeHRlbnNpb25zOjpzZXJpYWxpemVBY3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRFeHRlbnNpb25zOjpjb21waWxlUnVsZUxpc3QpOgorICAgICAgICAqIGNvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZW50RXh0ZW5zaW9uczo6Y29udGVudEV4dGVuc2lvbkVycm9yQ2F0ZWdvcnkpOgorICAgICAg
ICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5oOgorICAgICAgICAq
IGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmxvYWRBY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudEV4dGVuc2lvbnM6OmxvYWRSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpsb2FkRW5jb2RlZFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpwYXJzZVJ1bGVMaXN0KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9u
cy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmg6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMv
Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OnByb2Nlc3NDb250ZW50UnVsZUxp
c3RzRm9yTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVu
dEV4dGVuc2lvbnNCYWNrZW5kOjpwcm9jZXNzQ29udGVudFJ1bGVMaXN0c0ZvclBpbmdMb2FkKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjphcHBseVJlc3VsdHNUb1JlcXVl
c3QpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRSdWxlTGlzdFJlc3VsdHMu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRSdWxlTGlzdFJlc3VsdHM6OlN1bW1hcnk6OmRl
Y29kZSk6CisgICAgICAgICogY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHA6CisgICAgICAgICog
bG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9h
ZGVyOjpzZXRBY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMpOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OmFsbG93c0FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlv
bnNGb3JVUkwgY29uc3QpOgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpyZW1vdmVIVFRQSGVhZGVyRmllbGQpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oOgorCiAyMDIx
LTExLTE3ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIExv
Y2tzIEFQSSBkb2VzIGdldCBlbmFibGVkIGluIFNlcnZpY2UgV29ya2VycyB3aGVuIHJ1bm5pbmcg
bGF5b3V0IHRlc3RzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2Vi
U29ja2V0Q2hhbm5lbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJXZWJTb2NrZXRDaGFubmVsLmgi
CiAKICNpbmNsdWRlICJCbG9iLmgiCi0jaW5jbHVkZSAiQ29udGVudFJ1bGVMaXN0UmVzdWx0cy5o
IgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbkFjdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25BY3Rpb25zLmNwcAkocmV2aXNp
b24gMjg1OTU0KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4
dGVuc2lvbkFjdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw4IEBACiAjaW5j
bHVkZSAiQ29udGVudEV4dGVuc2lvbkVycm9yLmgiCiAjaW5jbHVkZSA8d3RmL0Nyb3NzVGhyZWFk
Q29waWVyLmg+CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgorI2luY2x1ZGUgPHd0Zi9VUkxQYXJzZXIu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdUb0ludGVnZXJDb252ZXJzaW9uLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9ucyB7CiAKQEAgLTEyMSw3ICsxMjMsOCBA
QCBNb2RpZnlIZWFkZXJzQWN0aW9uIE1vZGlmeUhlYWRlcnNBY3Rpb246CiAKIGJvb2wgTW9kaWZ5
SGVhZGVyc0FjdGlvbjo6b3BlcmF0b3I9PShjb25zdCBNb2RpZnlIZWFkZXJzQWN0aW9uJiBvdGhl
cikgY29uc3QKIHsKLSAgICByZXR1cm4gb3RoZXIucmVxdWVzdEhlYWRlcnMgPT0gdGhpcy0+cmVx
dWVzdEhlYWRlcnMKKyAgICByZXR1cm4gb3RoZXIuaGFzaFRhYmxlVHlwZSA9PSB0aGlzLT5oYXNo
VGFibGVUeXBlCisgICAgICAgICYmIG90aGVyLnJlcXVlc3RIZWFkZXJzID09IHRoaXMtPnJlcXVl
c3RIZWFkZXJzCiAgICAgICAgICYmIG90aGVyLnJlc3BvbnNlSGVhZGVycyA9PSB0aGlzLT5yZXNw
b25zZUhlYWRlcnM7CiB9CiAKQEAgLTE2Niw2ICsxNjksMjcgQEAgc2l6ZV90IE1vZGlmeUhlYWRl
cnNBY3Rpb246OnNlcmlhbGl6ZWRMZQogICAgIHJldHVybiBkZXNlcmlhbGl6ZUxlbmd0aChzcGFu
LCAwKTsKIH0KIAordm9pZCBNb2RpZnlIZWFkZXJzQWN0aW9uOjphcHBseVRvUmVxdWVzdChSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgZm9yIChhdXRvJiBpbmZvIDogcmVxdWVzdEhl
YWRlcnMpCisgICAgICAgIGluZm8uYXBwbHlUb1JlcXVlc3QocmVxdWVzdCk7Cit9CisKK3ZvaWQg
TW9kaWZ5SGVhZGVyc0FjdGlvbjo6TW9kaWZ5SGVhZGVySW5mbzo6YXBwbHlUb1JlcXVlc3QoUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHN0ZDo6dmlzaXQoV1RGOjptYWtlVmlzaXRv
cihbJl0gKGNvbnN0IEFwcGVuZE9wZXJhdGlvbiYgb3BlcmF0aW9uKSB7CisgICAgICAgIGF1dG8g
ZXhpc3RpbmdWYWx1ZSA9IHJlcXVlc3QuaHR0cEhlYWRlckZpZWxkKG9wZXJhdGlvbi5oZWFkZXIp
OworICAgICAgICBpZiAoZXhpc3RpbmdWYWx1ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXF1
ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChvcGVyYXRpb24uaGVhZGVyLCBvcGVyYXRpb24udmFsdWUp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChv
cGVyYXRpb24uaGVhZGVyLCBtYWtlU3RyaW5nKGV4aXN0aW5nVmFsdWUsICI7ICIsIG9wZXJhdGlv
bi52YWx1ZSkpOworICAgIH0sIFsmXSAoY29uc3QgU2V0T3BlcmF0aW9uJiBvcGVyYXRpb24pIHsK
KyAgICAgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQob3BlcmF0aW9uLmhlYWRlciwgb3Bl
cmF0aW9uLnZhbHVlKTsKKyAgICB9LCBbJl0gKGNvbnN0IFJlbW92ZU9wZXJhdGlvbiYgb3BlcmF0
aW9uKSB7CisgICAgICAgIHJlcXVlc3QucmVtb3ZlSFRUUEhlYWRlckZpZWxkKG9wZXJhdGlvbi5o
ZWFkZXIpOworICAgIH0pLCBvcGVyYXRpb24pOworfQorCiBhdXRvIE1vZGlmeUhlYWRlcnNBY3Rp
b246Ok1vZGlmeUhlYWRlckluZm86OnBhcnNlKGNvbnN0IEpTT046OlZhbHVlJiBpbmZvVmFsdWUp
IC0+IEV4cGVjdGVkPE1vZGlmeUhlYWRlckluZm8sIHN0ZDo6ZXJyb3JfY29kZT4KIHsKICAgICBh
dXRvIG9iamVjdCA9IGluZm9WYWx1ZS5hc09iamVjdCgpOwpAQCAtMjU1LDcgKzI3OSw3IEBAIHNp
emVfdCBNb2RpZnlIZWFkZXJzQWN0aW9uOjpNb2RpZnlIZWFkZXIKICAgICByZXR1cm4gZGVzZXJp
YWxpemVMZW5ndGgoc3BhbiwgMCk7CiB9CiAKLUV4cGVjdGVkPFJlZGlyZWN0QWN0aW9uLCBzdGQ6
OmVycm9yX2NvZGU+IFJlZGlyZWN0QWN0aW9uOjpwYXJzZShjb25zdCBKU09OOjpPYmplY3QmIHJl
ZGlyZWN0T2JqZWN0LCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGFsbG93ZWRSZWRpcmVjdFVSTFNj
aGVtZXMpCitFeHBlY3RlZDxSZWRpcmVjdEFjdGlvbiwgc3RkOjplcnJvcl9jb2RlPiBSZWRpcmVj
dEFjdGlvbjo6cGFyc2UoY29uc3QgSlNPTjo6T2JqZWN0JiByZWRpcmVjdE9iamVjdCwgY29uc3Qg
c3RkOjpvcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+JiBhbGxvd2VkUmVkaXJlY3RVUkxTY2hlbWVz
KQogewogICAgIGF1dG8gcmVkaXJlY3QgPSByZWRpcmVjdE9iamVjdC5nZXRPYmplY3QoInJlZGly
ZWN0Iik7CiAgICAgaWYgKCFyZWRpcmVjdCkKQEAgLTI3NywxMCArMzAxLDEzIEBAIEV4cGVjdGVk
PFJlZGlyZWN0QWN0aW9uLCBzdGQ6OmVycm9yX2NvZGUKICAgICAgICAgcmV0dXJuIFJlZGlyZWN0
QWN0aW9uIHsgV1RGTW92ZSgqcGFyc2VkVHJhbnNmb3JtKSB9OwogICAgIH0KIAotICAgIGlmIChh
dXRvIHVybCA9IHJlZGlyZWN0LT5nZXRTdHJpbmcoInVybCIpOyAhIXVybCkgewotICAgICAgICBp
ZiAoIWFsbG93ZWRSZWRpcmVjdFVSTFNjaGVtZXMuY29udGFpbnMoVVJMKFVSTCgpLCB1cmwpLnBy
b3RvY29sKCkudG9TdHJpbmdXaXRob3V0Q29weWluZygpKSkKKyAgICBpZiAoYXV0byB1cmxTdHJp
bmcgPSByZWRpcmVjdC0+Z2V0U3RyaW5nKCJ1cmwiKTsgISF1cmxTdHJpbmcpIHsKKyAgICAgICAg
YXV0byB1cmwgPSBVUkwoVVJMKCksIHVybFN0cmluZyk7CisgICAgICAgIGlmICghdXJsLmlzVmFs
aWQoKSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9u
RXJyb3I6OkpTT05SZWRpcmVjdFVSTEludmFsaWQpOworICAgICAgICBpZiAoYWxsb3dlZFJlZGly
ZWN0VVJMU2NoZW1lcyAmJiAhYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcy0+Y29udGFpbnModXJs
LnByb3RvY29sKCkudG9TdHJpbmdXaXRob3V0Q29weWluZygpKSkKICAgICAgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTFNj
aGVtZU5vdEFsbG93ZWQpOwotICAgICAgICByZXR1cm4gUmVkaXJlY3RBY3Rpb24geyBVUkxBY3Rp
b24geyBXVEZNb3ZlKHVybCkgfSB9OworICAgICAgICByZXR1cm4gUmVkaXJlY3RBY3Rpb24geyBV
UkxBY3Rpb24geyBXVEZNb3ZlKHVybFN0cmluZykgfSB9OwogICAgIH0KIAogICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdEludmFsaWRU
eXBlKTsKQEAgLTI5NSw3ICszMjIsOCBAQCBSZWRpcmVjdEFjdGlvbiBSZWRpcmVjdEFjdGlvbjo6
aXNvbGF0ZWRDCiAKIGJvb2wgUmVkaXJlY3RBY3Rpb246Om9wZXJhdG9yPT0oY29uc3QgUmVkaXJl
Y3RBY3Rpb24mIG90aGVyKSBjb25zdAogewotICAgIHJldHVybiBvdGhlci5hY3Rpb24gPT0gdGhp
cy0+YWN0aW9uOworICAgIHJldHVybiBvdGhlci5oYXNoVGFibGVUeXBlID09IHRoaXMtPmhhc2hU
YWJsZVR5cGUKKyAgICAgICAgJiYgb3RoZXIuYWN0aW9uID09IHRoaXMtPmFjdGlvbjsKIH0KIAog
dm9pZCBSZWRpcmVjdEFjdGlvbjo6c2VyaWFsaXplKFZlY3Rvcjx1aW50OF90PiYgdmVjdG9yKSBj
b25zdApAQCAtMzQwLDI2ICszNjgsNjQgQEAgc2l6ZV90IFJlZGlyZWN0QWN0aW9uOjpzZXJpYWxp
emVkTGVuZ3RoKAogICAgIHJldHVybiBkZXNlcmlhbGl6ZUxlbmd0aChzcGFuLCAwKTsKIH0KIAot
YXV0byBSZWRpcmVjdEFjdGlvbjo6VVJMVHJhbnNmb3JtQWN0aW9uOjpwYXJzZShjb25zdCBKU09O
OjpPYmplY3QmIHRyYW5zZm9ybSwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhbGxvd2VkUmVkaXJl
Y3RVUkxTY2hlbWVzKSAtPiBFeHBlY3RlZDxVUkxUcmFuc2Zvcm1BY3Rpb24sIHN0ZDo6ZXJyb3Jf
Y29kZT4KK3ZvaWQgUmVkaXJlY3RBY3Rpb246OmFwcGx5VG9SZXF1ZXN0KFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCkKK3sKKyAgICBzdGQ6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oY29uc3Qg
RXh0ZW5zaW9uUGF0aEFjdGlvbiYpIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudC4gV2Ug
bmVlZCB0byBrbm93IHRoZSBiYXNlIFVSTCBvZiB0aGUgZXh0ZW5zaW9uIGhlcmUgZnJvbSBuZXcg
U1BJLgorICAgIH0sIFsmXSAoY29uc3QgUmVnZXhTdWJzdGl0dXRpb25BY3Rpb24mKSB7CisgICAg
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQsIGlkZWFsbHkgaW4gYSB3YXkgdGhhdCBkb2Vzbid0IHJl
cXVpcmUgbWFraW5nIGEgbmV3IFZNIGFuZCBnbG9iYWwgb2JqZWN0IGZvciBlYWNoIHJlZGlyZWN0
IG9wZXJhdGlvbi4KKyAgICB9LCBbJl0gKGNvbnN0IFVSTFRyYW5zZm9ybUFjdGlvbiYgYWN0aW9u
KSB7CisgICAgICAgIGF1dG8gdXJsID0gcmVxdWVzdC51cmwoKTsKKyAgICAgICAgYWN0aW9uLmFw
cGx5VG9VUkwodXJsKTsKKyAgICAgICAgcmVxdWVzdC5zZXRVUkwoV1RGTW92ZSh1cmwpKTsKKyAg
ICB9LCBbJl0gKGNvbnN0IFVSTEFjdGlvbiYgYWN0aW9uKSB7CisgICAgICAgIHJlcXVlc3Quc2V0
VVJMKFVSTChVUkwoKSwgYWN0aW9uLnVybCkpOworICAgIH0pLCBhY3Rpb24pOworfQorCithdXRv
IFJlZGlyZWN0QWN0aW9uOjpVUkxUcmFuc2Zvcm1BY3Rpb246OnBhcnNlKGNvbnN0IEpTT046Ok9i
amVjdCYgdHJhbnNmb3JtLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEhhc2hTZXQ8U3RyaW5nPj4mIGFs
bG93ZWRSZWRpcmVjdFVSTFNjaGVtZXMpIC0+IEV4cGVjdGVkPFVSTFRyYW5zZm9ybUFjdGlvbiwg
c3RkOjplcnJvcl9jb2RlPgogewogICAgIFVSTFRyYW5zZm9ybUFjdGlvbiBhY3Rpb247Ci0gICAg
YWN0aW9uLmZyYWdtZW50ID0gdHJhbnNmb3JtLmdldFN0cmluZygiZnJhZ21lbnQiKTsKKyAgICBp
ZiAoYXV0byBmcmFnbWVudCA9IHRyYW5zZm9ybS5nZXRTdHJpbmcoImZyYWdtZW50Iik7ICEhZnJh
Z21lbnQpIHsKKyAgICAgICAgaWYgKCFmcmFnbWVudC5pc0VtcHR5KCkgJiYgIWZyYWdtZW50LnN0
YXJ0c1dpdGgoJyMnKSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50
RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdEludmFsaWRGcmFnbWVudCk7CisgICAgICAgIGFj
dGlvbi5mcmFnbWVudCA9IFdURk1vdmUoZnJhZ21lbnQpOworICAgIH0KICAgICBhY3Rpb24uaG9z
dCA9IHRyYW5zZm9ybS5nZXRTdHJpbmcoImhvc3QiKTsKICAgICBhY3Rpb24ucGFzc3dvcmQgPSB0
cmFuc2Zvcm0uZ2V0U3RyaW5nKCJwYXNzd29yZCIpOwogICAgIGFjdGlvbi5wYXRoID0gdHJhbnNm
b3JtLmdldFN0cmluZygicGF0aCIpOwotICAgIGFjdGlvbi5wb3J0ID0gdHJhbnNmb3JtLmdldFN0
cmluZygicG9ydCIpOwotICAgIGF1dG8gc2NoZW1lID0gdHJhbnNmb3JtLmdldFN0cmluZygic2No
ZW1lIik7Ci0gICAgaWYgKCEhc2NoZW1lICYmICFhbGxvd2VkUmVkaXJlY3RVUkxTY2hlbWVzLmNv
bnRhaW5zKHNjaGVtZSkpCi0gICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0
ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTFNjaGVtZU5vdEFsbG93ZWQpOwotICAgIGFjdGlv
bi5zY2hlbWUgPSBXVEZNb3ZlKHNjaGVtZSk7CisgICAgYXV0byBwb3J0ID0gdHJhbnNmb3JtLmdl
dFN0cmluZygicG9ydCIpOworICAgIGlmICghIXBvcnQpIHsKKyAgICAgICAgaWYgKHBvcnQuaXNF
bXB0eSgpKQorICAgICAgICAgICAgYWN0aW9uLnBvcnQgPSB7IHN0ZDo6b3B0aW9uYWw8dWludDE2
X3Q+IHsgfSB9OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8gcGFyc2VkUG9ydCA9
IHBhcnNlSW50ZWdlcjx1aW50MTZfdD4oU3RyaW5nVmlldyhwb3J0KSk7CisgICAgICAgICAgICBp
ZiAoIXBhcnNlZFBvcnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENv
bnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTlJlZGlyZWN0SW52YWxpZFBvcnQpOworICAgICAgICAg
ICAgYWN0aW9uLnBvcnQgPSB7IHBhcnNlZFBvcnQgfTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmIChhdXRvIHVuY2Fub25pY2FsaXplZFNjaGVtZSA9IHRyYW5zZm9ybS5nZXRTdHJpbmcoInNj
aGVtZSIpOyAhIXVuY2Fub25pY2FsaXplZFNjaGVtZSkgeworICAgICAgICBhdXRvIHNjaGVtZSA9
IFdURjo6VVJMUGFyc2VyOjptYXliZUNhbm9uaWNhbGl6ZVNjaGVtZSh1bmNhbm9uaWNhbGl6ZWRT
Y2hlbWUpOworICAgICAgICBpZiAoIXNjaGVtZSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTFNjaGVtZUludmFs
aWQpOworICAgICAgICBpZiAoYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcyAmJiAhYWxsb3dlZFJl
ZGlyZWN0VVJMU2NoZW1lcy0+Y29udGFpbnMoKnNjaGVtZSkpCisgICAgICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RVUkxTY2hl
bWVOb3RBbGxvd2VkKTsKKyAgICAgICAgYWN0aW9uLnNjaGVtZSA9IFdURk1vdmUoKnNjaGVtZSk7
CisgICAgfQogICAgIGFjdGlvbi51c2VybmFtZSA9IHRyYW5zZm9ybS5nZXRTdHJpbmcoInVzZXJu
YW1lIik7CiAgICAgaWYgKGF1dG8gcXVlcnlUcmFuc2Zvcm0gPSB0cmFuc2Zvcm0uZ2V0T2JqZWN0
KCJxdWVyeS10cmFuc2Zvcm0iKSkgewogICAgICAgICBhdXRvIHBhcnNlZFF1ZXJ5VHJhbnNmb3Jt
ID0gUXVlcnlUcmFuc2Zvcm06OnBhcnNlKCpxdWVyeVRyYW5zZm9ybSk7CiAgICAgICAgIGlmICgh
cGFyc2VkUXVlcnlUcmFuc2Zvcm0pCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
cGFyc2VkUXVlcnlUcmFuc2Zvcm0uZXJyb3IoKSk7CiAgICAgICAgIGFjdGlvbi5xdWVyeVRyYW5z
Zm9ybSA9ICpwYXJzZWRRdWVyeVRyYW5zZm9ybTsKLSAgICB9IGVsc2UKLSAgICAgICAgYWN0aW9u
LnF1ZXJ5VHJhbnNmb3JtID0gdHJhbnNmb3JtLmdldFN0cmluZygicXVlcnkiKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBhdXRvIHF1ZXJ5ID0gdHJhbnNmb3JtLmdldFN0cmluZygicXVlcnkiKTsK
KyAgICAgICAgaWYgKCFxdWVyeS5pc0VtcHR5KCkgJiYgIXF1ZXJ5LnN0YXJ0c1dpdGgoJz8nKSkK
KyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6
OkpTT05SZWRpcmVjdEludmFsaWRRdWVyeSk7CisgICAgICAgIGFjdGlvbi5xdWVyeVRyYW5zZm9y
bSA9IFdURk1vdmUocXVlcnkpOworICAgIH0KICAgICByZXR1cm4gYWN0aW9uOwogfQogCkBAIC0z
OTksMTMgKzQ2NSwxMyBAQCB2b2lkIFJlZGlyZWN0QWN0aW9uOjpVUkxUcmFuc2Zvcm1BY3Rpb246
CiAgICAgdWludDhfdCBoYXNTY2hlbWUgPSAhIXNjaGVtZTsKICAgICB1aW50OF90IGhhc1VzZXJu
YW1lID0gISF1c2VybmFtZTsKICAgICBhdXRvKiBxdWVyeVN0cmluZyA9IHN0ZDo6Z2V0X2lmPFN0
cmluZz4oJnF1ZXJ5VHJhbnNmb3JtKTsKKyAgICBhdXRvIHF1ZXJ5U3RyaW5nVVRGOCA9IHF1ZXJ5
U3RyaW5nID8gcXVlcnlTdHJpbmctPnV0ZjgoKSA6IENTdHJpbmcoKTsKICAgICB1aW50OF90IGhh
c1F1ZXJ5ID0gIXF1ZXJ5U3RyaW5nIHx8ICEhKnF1ZXJ5U3RyaW5nOwogCiAgICAgYXV0byBmcmFn
bWVudFVURjggPSBmcmFnbWVudC51dGY4KCk7CiAgICAgYXV0byBob3N0VVRGOCA9IGhvc3QudXRm
OCgpOwogICAgIGF1dG8gcGFzc3dvcmRVVEY4ID0gcGFzc3dvcmQudXRmOCgpOwogICAgIGF1dG8g
cGF0aFVURjggPSBwYXRoLnV0ZjgoKTsKLSAgICBhdXRvIHBvcnRVVEY4ID0gcG9ydC51dGY4KCk7
CiAgICAgYXV0byBzY2hlbWVVVEY4ID0gc2NoZW1lLnV0ZjgoKTsKICAgICBhdXRvIHVzZXJuYW1l
VVRGOCA9IHVzZXJuYW1lLnV0ZjgoKTsKIApAQCAtNDE0LDkgKzQ4MCwxMCBAQCB2b2lkIFJlZGly
ZWN0QWN0aW9uOjpVUkxUcmFuc2Zvcm1BY3Rpb246CiAgICAgICAgICsgKGhhc0hvc3QgPyBzaXpl
b2YodWludDMyX3QpICsgaG9zdFVURjgubGVuZ3RoKCkgOiAwKQogICAgICAgICArIChoYXNQYXNz
d29yZCA/IHNpemVvZih1aW50MzJfdCkgKyBwYXNzd29yZFVURjgubGVuZ3RoKCkgOiAwKQogICAg
ICAgICArIChoYXNQYXRoID8gc2l6ZW9mKHVpbnQzMl90KSArIHBhdGhVVEY4Lmxlbmd0aCgpIDog
MCkKLSAgICAgICAgKyAoaGFzUG9ydCA/IHNpemVvZih1aW50MzJfdCkgKyBwb3J0VVRGOC5sZW5n
dGgoKSA6IDApCiAgICAgICAgICsgKGhhc1NjaGVtZSA/IHNpemVvZih1aW50MzJfdCkgKyBzY2hl
bWVVVEY4Lmxlbmd0aCgpIDogMCkKLSAgICAgICAgKyAoaGFzVXNlcm5hbWUgPyBzaXplb2YodWlu
dDMyX3QpICsgdXNlcm5hbWVVVEY4Lmxlbmd0aCgpIDogMCkpOworICAgICAgICArIChoYXNVc2Vy
bmFtZSA/IHNpemVvZih1aW50MzJfdCkgKyB1c2VybmFtZVVURjgubGVuZ3RoKCkgOiAwKQorICAg
ICAgICArIChoYXNQb3J0ID8gMSArICgqcG9ydCA/IHNpemVvZih1aW50MTZfdCkgOiAwKSA6IDAp
CisgICAgICAgICsgKGhhc1F1ZXJ5ID8gMSArIChxdWVyeVN0cmluZyA/IHNpemVvZih1aW50MzJf
dCkgKyBxdWVyeVN0cmluZ1VURjgubGVuZ3RoKCkgOiAwKSA6IDApKTsKIAogICAgIGF1dG8gYmVn
aW5JbmRleCA9IHZlY3Rvci5zaXplKCk7CiAgICAgdW5jaGVja2VkQXBwZW5kKHZlY3RvciwgMCk7
CkBAIC00NDIsMTggKzUwOSwyMiBAQCB2b2lkIFJlZGlyZWN0QWN0aW9uOjpVUkxUcmFuc2Zvcm1B
Y3Rpb246CiAgICAgICAgIHVuY2hlY2tlZEFwcGVuZExlbmd0aEFuZFN0cmluZyhwYXNzd29yZFVU
RjgpOwogICAgIGlmIChoYXNQYXRoKQogICAgICAgICB1bmNoZWNrZWRBcHBlbmRMZW5ndGhBbmRT
dHJpbmcocGF0aFVURjgpOwotICAgIGlmIChoYXNQb3J0KQotICAgICAgICB1bmNoZWNrZWRBcHBl
bmRMZW5ndGhBbmRTdHJpbmcocG9ydFVURjgpOwogICAgIGlmIChoYXNTY2hlbWUpCiAgICAgICAg
IHVuY2hlY2tlZEFwcGVuZExlbmd0aEFuZFN0cmluZyhzY2hlbWVVVEY4KTsKICAgICBpZiAoaGFz
VXNlcm5hbWUpCiAgICAgICAgIHVuY2hlY2tlZEFwcGVuZExlbmd0aEFuZFN0cmluZyh1c2VybmFt
ZVVURjgpOworICAgIGlmIChoYXNQb3J0KSB7CisgICAgICAgIHZlY3Rvci51bmNoZWNrZWRBcHBl
bmQoISEqcG9ydCk7CisgICAgICAgIGlmICgqcG9ydCkgeworICAgICAgICAgICAgdmVjdG9yLnVu
Y2hlY2tlZEFwcGVuZCgqKnBvcnQgPj4gMCk7CisgICAgICAgICAgICB2ZWN0b3IudW5jaGVja2Vk
QXBwZW5kKCoqcG9ydCA+PiA4KTsKKyAgICAgICAgfQorICAgIH0KICAgICBpZiAoaGFzUXVlcnkp
IHsKLSAgICAgICAgdmVjdG9yLmFwcGVuZChxdWVyeVRyYW5zZm9ybS5pbmRleCgpKTsKLSAgICAg
ICAgc3RkOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShjb25zdCBTdHJpbmcmIHF1ZXJ5U3Ry
aW5nKSB7Ci0gICAgICAgICAgICBhdXRvIHF1ZXJ5U3RyaW5nVVRGOCA9IHF1ZXJ5U3RyaW5nLnV0
ZjgoKTsKLSAgICAgICAgICAgIGFwcGVuZCh2ZWN0b3IsIHF1ZXJ5U3RyaW5nVVRGOC5sZW5ndGgo
KSk7Ci0gICAgICAgICAgICBhcHBlbmQodmVjdG9yLCBxdWVyeVN0cmluZ1VURjgpOworICAgICAg
ICB2ZWN0b3IudW5jaGVja2VkQXBwZW5kKHF1ZXJ5VHJhbnNmb3JtLmluZGV4KCkpOworICAgICAg
ICBzdGQ6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKGNvbnN0IFN0cmluZyYpIHsKKyAgICAg
ICAgICAgIHVuY2hlY2tlZEFwcGVuZCh2ZWN0b3IsIHF1ZXJ5U3RyaW5nVVRGOC5sZW5ndGgoKSk7
CisgICAgICAgICAgICB1bmNoZWNrZWRBcHBlbmQodmVjdG9yLCBxdWVyeVN0cmluZ1VURjgpOwog
ICAgICAgICB9LCBbJl0oY29uc3QgUXVlcnlUcmFuc2Zvcm0mIHRyYW5zZm9ybSkgewogICAgICAg
ICAgICAgdHJhbnNmb3JtLnNlcmlhbGl6ZSh2ZWN0b3IpOwogICAgICAgICB9KSwgcXVlcnlUcmFu
c2Zvcm0pOwpAQCAtNDg3LDkgKzU1OCwxOCBAQCBhdXRvIFJlZGlyZWN0QWN0aW9uOjpVUkxUcmFu
c2Zvcm1BY3Rpb246CiAgICAgYXV0byBob3N0ID0gaGFzSG9zdCA/IGRlc2VyaWFsaXplU3RyaW5n
KCkgOiBTdHJpbmcoKTsKICAgICBhdXRvIHBhc3N3b3JkID0gaGFzUGFzc3dvcmQgPyBkZXNlcmlh
bGl6ZVN0cmluZygpIDogU3RyaW5nKCk7CiAgICAgYXV0byBwYXRoID0gaGFzUGF0aCA/IGRlc2Vy
aWFsaXplU3RyaW5nKCkgOiBTdHJpbmcoKTsKLSAgICBhdXRvIHBvcnQgPSBoYXNQb3J0ID8gZGVz
ZXJpYWxpemVTdHJpbmcoKSA6IFN0cmluZygpOwogICAgIGF1dG8gc2NoZW1lID0gaGFzU2NoZW1l
ID8gZGVzZXJpYWxpemVTdHJpbmcoKSA6IFN0cmluZygpOwogICAgIGF1dG8gdXNlcm5hbWUgPSBo
YXNVc2VybmFtZSA/IGRlc2VyaWFsaXplU3RyaW5nKCkgOiBTdHJpbmcoKTsKKyAgICBzdGQ6Om9w
dGlvbmFsPHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+PiBwb3J0OworICAgIGlmIChoYXNQb3J0KSB7
CisgICAgICAgIGlmIChzcGFuW3Byb2dyZXNzKytdKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChzcGFuLnNpemUoKSA+IHByb2dyZXNzICsgMSk7CisgICAgICAgICAgICB1aW50MTZfdCB2
YWx1ZSA9IChzcGFuW3Byb2dyZXNzXSA8PCAwKSB8IChzcGFuW3Byb2dyZXNzICsgMV0gPDwgOCk7
CisgICAgICAgICAgICBwb3J0ID0geyB7IHZhbHVlIH0gfTsKKyAgICAgICAgICAgIHByb2dyZXNz
ICs9IDI7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcG9ydCA9IHsgc3RkOjpvcHRpb25h
bDx1aW50MTZfdD4geyB9IH07CisgICAgfQogICAgIFF1ZXJ5VHJhbnNmb3JtVmFyaWFudCBxdWVy
eVRyYW5zZm9ybTsKICAgICBpZiAoaGFzUXVlcnkpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
c3Bhbi5zaXplKCkgPiBwcm9ncmVzcyk7CkBAIC01NTYsNiArNjM2LDY2IEBAIGF1dG8gUmVkaXJl
Y3RBY3Rpb246OlVSTFRyYW5zZm9ybUFjdGlvbjoKICAgICByZXR1cm4gcGFyc2VkUXVlcnlUcmFu
c2Zvcm07CiB9CiAKK3ZvaWQgUmVkaXJlY3RBY3Rpb246OlVSTFRyYW5zZm9ybUFjdGlvbjo6YXBw
bHlUb1VSTChVUkwmIHVybCkgY29uc3QKK3sKKyAgICBpZiAoISFmcmFnbWVudCkgeworICAgICAg
ICBpZiAoZnJhZ21lbnQuaXNFbXB0eSgpKQorICAgICAgICAgICAgdXJsLnJlbW92ZUZyYWdtZW50
SWRlbnRpZmllcigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB1cmwuc2V0RnJhZ21lbnRJ
ZGVudGlmaWVyKFN0cmluZ1ZpZXcoZnJhZ21lbnQpLnN1YnN0cmluZygxKSk7CisgICAgfQorICAg
IGlmICghIWhvc3QpCisgICAgICAgIHVybC5zZXRIb3N0KGhvc3QpOworICAgIGlmICghIXBhc3N3
b3JkKQorICAgICAgICB1cmwuc2V0UGFzc3dvcmQocGFzc3dvcmQpOworICAgIGlmICghIXBhdGgp
CisgICAgICAgIHVybC5zZXRQYXRoKHBhdGgpOworICAgIGlmICghIXBvcnQpCisgICAgICAgIHVy
bC5zZXRQb3J0KCpwb3J0KTsKKyAgICBzdGQ6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdIChj
b25zdCBTdHJpbmcmIHF1ZXJ5KSB7CisgICAgICAgIGlmICghcXVlcnkuaXNOdWxsKCkpCisgICAg
ICAgICAgICB1cmwuc2V0UXVlcnkocXVlcnkuaXNFbXB0eSgpID8gU3RyaW5nVmlldygpIDogU3Ry
aW5nVmlldyhxdWVyeSkpOworICAgIH0sIFsmXSAoY29uc3QgVVJMVHJhbnNmb3JtQWN0aW9uOjpR
dWVyeVRyYW5zZm9ybSYgdHJhbnNmb3JtKSB7CisgICAgICAgIHRyYW5zZm9ybS5hcHBseVRvVVJM
KHVybCk7CisgICAgfSksIHF1ZXJ5VHJhbnNmb3JtKTsKKyAgICBpZiAoISFzY2hlbWUpCisgICAg
ICAgIHVybC5zZXRQcm90b2NvbChzY2hlbWUpOworICAgIGlmICghIXVzZXJuYW1lKQorICAgICAg
ICB1cmwuc2V0VXNlcih1c2VybmFtZSk7Cit9CisKK3ZvaWQgUmVkaXJlY3RBY3Rpb246OlVSTFRy
YW5zZm9ybUFjdGlvbjo6UXVlcnlUcmFuc2Zvcm06OmFwcGx5VG9VUkwoVVJMJiB1cmwpIGNvbnN0
Cit7CisgICAgYXV0byBmb3JtID0gV1RGOjpVUkxQYXJzZXI6OnBhcnNlVVJMRW5jb2RlZEZvcm0o
dXJsLnF1ZXJ5KCkpOworCisgICAgSGFzaFNldDxTdHJpbmc+IGtleXNUb1JlbW92ZTsKKyAgICBm
b3IgKGF1dG8mIGtleSA6IHJlbW92ZVBhcmFtcykKKyAgICAgICAga2V5c1RvUmVtb3ZlLmFkZChr
ZXkpOworICAgIGZvcm0ucmVtb3ZlQWxsTWF0Y2hpbmcoWyZdIChhdXRvJiBrZXlWYWx1ZSkgewor
ICAgICAgICByZXR1cm4ga2V5c1RvUmVtb3ZlLmNvbnRhaW5zKGtleVZhbHVlLmtleSk7CisgICAg
fSk7CisKKyAgICBWZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBTdHJpbmc+PiBrZXlz
VG9BZGQ7CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4ga2V5c1RvUmVwbGFjZTsKKyAgICBm
b3IgKGF1dG8mIGtleVZhbHVlIDogYWRkT3JSZXBsYWNlUGFyYW1zKSB7CisgICAgICAgIGlmIChr
ZXlWYWx1ZS5yZXBsYWNlT25seSkKKyAgICAgICAgICAgIGtleXNUb1JlcGxhY2UuYWRkKGtleVZh
bHVlLmtleSwga2V5VmFsdWUudmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBrZXlz
VG9BZGQuYXBwZW5kKHsga2V5VmFsdWUua2V5LCBrZXlWYWx1ZS52YWx1ZSB9KTsKKyAgICB9Cisg
ICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6IGZvcm0pIHsKKyAgICAgICAgYXV0byBpdGVyYXRvciA9
IGtleXNUb1JlcGxhY2UuZmluZChrZXlWYWx1ZS5rZXkpOworICAgICAgICBpZiAoaXRlcmF0b3Ig
IT0ga2V5c1RvUmVwbGFjZS5lbmQoKSkKKyAgICAgICAgICAgIGtleVZhbHVlLnZhbHVlID0gaXRl
cmF0b3ItPnZhbHVlOworICAgIH0KKyAgICBmb3JtLmFwcGVuZFZlY3RvcihXVEZNb3ZlKGtleXNU
b0FkZCkpOworCisgICAgU3RyaW5nQnVpbGRlciB0cmFuc2Zvcm1lZFF1ZXJ5OworICAgIGZvciAo
YXV0byYga2V5VmFsdWUgOiBmb3JtKQorICAgICAgICB0cmFuc2Zvcm1lZFF1ZXJ5LmFwcGVuZCh0
cmFuc2Zvcm1lZFF1ZXJ5LmlzRW1wdHkoKSA/ICIiIDogIiYiLCBrZXlWYWx1ZS5rZXksICEha2V5
VmFsdWUudmFsdWUgPyAiPSIgOiAiIiwga2V5VmFsdWUudmFsdWUpOworICAgIHVybC5zZXRRdWVy
eSh0cmFuc2Zvcm1lZFF1ZXJ5KTsKK30KKwogYXV0byBSZWRpcmVjdEFjdGlvbjo6VVJMVHJhbnNm
b3JtQWN0aW9uOjpRdWVyeVRyYW5zZm9ybTo6aXNvbGF0ZWRDb3B5KCkgY29uc3QgLT4gUXVlcnlU
cmFuc2Zvcm0KIHsKICAgICByZXR1cm4gewpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkFjdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQWN0aW9ucy5oCShyZXZp
c2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50
RXh0ZW5zaW9uQWN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDkgKzI5LDM4IEBACiAKICNpbmNs
dWRlICJDb250ZW50RXh0ZW5zaW9uU3RyaW5nU2VyaWFsaXphdGlvbi5oIgogI2luY2x1ZGUgPHd0
Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KKyNpbmNsdWRl
IDx3dGYvSGFzaGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFJlc291cmNlUmVx
dWVzdDsKK30KIAogbmFtZXNwYWNlIFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zIHsKIAorLy8g
RklYTUU6IFRoaXMgcHJvYmFibHkgYmVsb25ncyBpbiBXVEYsIHN1Y2ggYXMgaW4gSGFzaEZ1bmN0
aW9ucy5oLgorc3RydWN0IFZhcmlhbnRIYXNoZXIgeworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBW
PgorICAgIHN0YXRpYyB1aW50MzJfdCBoYXNoKFYmJiB2YXJpYW50KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHBhaXJJbnRIYXNoKHZhcmlhbnQuaW5kZXgoKSwgc3RkOjp2aXNpdChbXShjb25zdCBh
dXRvJiB0eXBlKSB7CisgICAgICAgICAgICByZXR1cm4gdHlwZS5oYXNoKCk7CisgICAgICAgIH0s
IHN0ZDo6Zm9yd2FyZDxWPih2YXJpYW50KSkpOworICAgIH0KK307CisKKy8vIEZJWE1FOiBUaGlz
IHByb2JhYmx5IGJlbG9uZ3MgaW4gV1RGLCBzdWNoIGFzIGluIEhhc2hlci5oLgorc3RydWN0IFZl
Y3Rvckhhc2hlciB7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFY+CisgICAgc3RhdGljIHVpbnQz
Ml90IGhhc2goViYmIHZlY3RvcikKKyAgICB7CisgICAgICAgIEhhc2hlciBoYXNoZXI7CisgICAg
ICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKKyAgICAgICAgICAgIGFkZChoYXNoZXIs
IGVsZW1lbnQuaGFzaCgpKTsKKyAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7CisgICAgfQor
fTsKKwogc3RydWN0IEFjdGlvbjsKIAogdXNpbmcgU2VyaWFsaXplZEFjdGlvbkJ5dGUgPSB1aW50
OF90OwpAQCAtNjYsNiArOTUsNyBAQCBzdHJ1Y3QgV0VCQ09SRV9FWFBPUlQgTW9kaWZ5SGVhZGVy
c0FjdGlvCiAgICAgICAgICAgICBTdHJpbmcgaGVhZGVyOwogICAgICAgICAgICAgU3RyaW5nIHZh
bHVlOwogCisgICAgICAgICAgICB1aW50MzJfdCBoYXNoKCkgY29uc3QgeyByZXR1cm4gcGFpcklu
dEhhc2goaGVhZGVyLmhhc2goKSwgdmFsdWUuaGFzaCgpKTsgfQogICAgICAgICAgICAgQXBwZW5k
T3BlcmF0aW9uIGlzb2xhdGVkQ29weSgpIGNvbnN0IHsgcmV0dXJuIHsgaGVhZGVyLmlzb2xhdGVk
Q29weSgpLCB2YWx1ZS5pc29sYXRlZENvcHkoKSB9OyB9CiAgICAgICAgICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgQXBwZW5kT3BlcmF0aW9uJiBvdGhlcikgY29uc3QgeyByZXR1cm4gb3RoZXIu
aGVhZGVyID09IHRoaXMtPmhlYWRlciAmJiBvdGhlci52YWx1ZSA9PSB0aGlzLT52YWx1ZTsgfQog
ICAgICAgICB9OwpAQCAtNzMsNDcgKzEwMyw2NyBAQCBzdHJ1Y3QgV0VCQ09SRV9FWFBPUlQgTW9k
aWZ5SGVhZGVyc0FjdGlvCiAgICAgICAgICAgICBTdHJpbmcgaGVhZGVyOwogICAgICAgICAgICAg
U3RyaW5nIHZhbHVlOwogCisgICAgICAgICAgICB1aW50MzJfdCBoYXNoKCkgY29uc3QgeyByZXR1
cm4gcGFpckludEhhc2goaGVhZGVyLmhhc2goKSwgdmFsdWUuaGFzaCgpKTsgfQogICAgICAgICAg
ICAgU2V0T3BlcmF0aW9uIGlzb2xhdGVkQ29weSgpIGNvbnN0IHsgcmV0dXJuIHsgaGVhZGVyLmlz
b2xhdGVkQ29weSgpLCB2YWx1ZS5pc29sYXRlZENvcHkoKSB9OyB9CiAgICAgICAgICAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgU2V0T3BlcmF0aW9uJiBvdGhlcikgY29uc3QgeyByZXR1cm4gb3Ro
ZXIuaGVhZGVyID09IHRoaXMtPmhlYWRlciAmJiBvdGhlci52YWx1ZSA9PSB0aGlzLT52YWx1ZTsg
fQogICAgICAgICB9OwogICAgICAgICBzdHJ1Y3QgUmVtb3ZlT3BlcmF0aW9uIHsKICAgICAgICAg
ICAgIFN0cmluZyBoZWFkZXI7CiAKKyAgICAgICAgICAgIHVpbnQzMl90IGhhc2goKSBjb25zdCB7
IHJldHVybiBoZWFkZXIuaGFzaCgpOyB9CiAgICAgICAgICAgICBSZW1vdmVPcGVyYXRpb24gaXNv
bGF0ZWRDb3B5KCkgY29uc3QgeyByZXR1cm4geyBoZWFkZXIuaXNvbGF0ZWRDb3B5KCkgfTsgfQog
ICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlbW92ZU9wZXJhdGlvbiYgb3RoZXIp
IGNvbnN0IHsgcmV0dXJuIG90aGVyLmhlYWRlciA9PSB0aGlzLT5oZWFkZXI7IH0KICAgICAgICAg
fTsKICAgICAgICAgdXNpbmcgT3BlcmF0aW9uVmFyaWFudCA9IHN0ZDo6dmFyaWFudDxBcHBlbmRP
cGVyYXRpb24sIFNldE9wZXJhdGlvbiwgUmVtb3ZlT3BlcmF0aW9uPjsKICAgICAgICAgT3BlcmF0
aW9uVmFyaWFudCBvcGVyYXRpb247CiAKKyAgICAgICAgdWludDMyX3QgaGFzaCgpIGNvbnN0IHsg
cmV0dXJuIFZhcmlhbnRIYXNoZXI6Omhhc2gob3BlcmF0aW9uKTsgfQogICAgICAgICBzdGF0aWMg
RXhwZWN0ZWQ8TW9kaWZ5SGVhZGVySW5mbywgc3RkOjplcnJvcl9jb2RlPiBwYXJzZShjb25zdCBK
U09OOjpWYWx1ZSYpOwogICAgICAgICBNb2RpZnlIZWFkZXJJbmZvIGlzb2xhdGVkQ29weSgpIGNv
bnN0OwogICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgTW9kaWZ5SGVhZGVySW5mbyYpIGNv
bnN0OwogICAgICAgICB2b2lkIHNlcmlhbGl6ZShWZWN0b3I8dWludDhfdD4mKSBjb25zdDsKICAg
ICAgICAgc3RhdGljIE1vZGlmeUhlYWRlckluZm8gZGVzZXJpYWxpemUoU3Bhbjxjb25zdCB1aW50
OF90Pik7CiAgICAgICAgIHN0YXRpYyBzaXplX3Qgc2VyaWFsaXplZExlbmd0aChTcGFuPGNvbnN0
IHVpbnQ4X3Q+KTsKKyAgICAgICAgdm9pZCBhcHBseVRvUmVxdWVzdChSZXNvdXJjZVJlcXVlc3Qm
KTsKICAgICB9OwogCisgICAgZW51bSBjbGFzcyBIYXNoVGFibGVUeXBlIDogdWludDhfdCB7IEVt
cHR5LCBEZWxldGVkLCBGdWxsIH0gaGFzaFRhYmxlVHlwZTsKICAgICBWZWN0b3I8TW9kaWZ5SGVh
ZGVySW5mbz4gcmVxdWVzdEhlYWRlcnM7CiAgICAgVmVjdG9yPE1vZGlmeUhlYWRlckluZm8+IHJl
c3BvbnNlSGVhZGVyczsKIAorICAgIE1vZGlmeUhlYWRlcnNBY3Rpb24oVmVjdG9yPE1vZGlmeUhl
YWRlckluZm8+JiYgcmVxdWVzdEhlYWRlcnMsIFZlY3RvcjxNb2RpZnlIZWFkZXJJbmZvPiYmIHJl
c3BvbnNlSGVhZGVycykKKyAgICAgICAgOiBoYXNoVGFibGVUeXBlKEhhc2hUYWJsZVR5cGU6OkZ1
bGwpCisgICAgICAgICwgcmVxdWVzdEhlYWRlcnMoV1RGTW92ZShyZXF1ZXN0SGVhZGVycykpCisg
ICAgICAgICwgcmVzcG9uc2VIZWFkZXJzKFdURk1vdmUocmVzcG9uc2VIZWFkZXJzKSkgeyB9CisK
KyAgICBlbnVtIEVtcHR5VmFsdWVUYWcgeyBFbXB0eVZhbHVlIH07CisgICAgZW51bSBEZWxldGVk
VmFsdWVUYWcgeyBEZWxldGVkVmFsdWUgfTsKKyAgICBNb2RpZnlIZWFkZXJzQWN0aW9uKEVtcHR5
VmFsdWVUYWcpIDogaGFzaFRhYmxlVHlwZShIYXNoVGFibGVUeXBlOjpFbXB0eSkgeyB9CisgICAg
TW9kaWZ5SGVhZGVyc0FjdGlvbihEZWxldGVkVmFsdWVUYWcpIDogaGFzaFRhYmxlVHlwZShIYXNo
VGFibGVUeXBlOjpEZWxldGVkKSB7IH0KKyAgICBib29sIGlzRGVsZXRlZFZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gaGFzaFRhYmxlVHlwZSA9PSBIYXNoVGFibGVUeXBlOjpEZWxldGVkOyB9CisKKyAg
ICB1aW50MzJfdCBoYXNoKCkgY29uc3QgeyByZXR1cm4gcGFpckludEhhc2goVmVjdG9ySGFzaGVy
OjpoYXNoKHJlcXVlc3RIZWFkZXJzKSwgVmVjdG9ySGFzaGVyOjpoYXNoKHJlc3BvbnNlSGVhZGVy
cykpOyB9CiAgICAgc3RhdGljIEV4cGVjdGVkPE1vZGlmeUhlYWRlcnNBY3Rpb24sIHN0ZDo6ZXJy
b3JfY29kZT4gcGFyc2UoY29uc3QgSlNPTjo6T2JqZWN0Jik7CiAgICAgTW9kaWZ5SGVhZGVyc0Fj
dGlvbiBpc29sYXRlZENvcHkoKSBjb25zdDsKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgTW9k
aWZ5SGVhZGVyc0FjdGlvbiYpIGNvbnN0OwogICAgIHZvaWQgc2VyaWFsaXplKFZlY3Rvcjx1aW50
OF90PiYpIGNvbnN0OwogICAgIHN0YXRpYyBNb2RpZnlIZWFkZXJzQWN0aW9uIGRlc2VyaWFsaXpl
KFNwYW48Y29uc3QgdWludDhfdD4pOwogICAgIHN0YXRpYyBzaXplX3Qgc2VyaWFsaXplZExlbmd0
aChTcGFuPGNvbnN0IHVpbnQ4X3Q+KTsKKyAgICB2b2lkIGFwcGx5VG9SZXF1ZXN0KFJlc291cmNl
UmVxdWVzdCYpOwogfTsKIAogc3RydWN0IFdFQkNPUkVfRVhQT1JUIFJlZGlyZWN0QWN0aW9uIHsK
ICAgICBzdHJ1Y3QgRXh0ZW5zaW9uUGF0aEFjdGlvbiB7CiAgICAgICAgIFN0cmluZyBleHRlbnNp
b25QYXRoOwogCisgICAgICAgIHVpbnQzMl90IGhhc2goKSBjb25zdCB7IHJldHVybiBleHRlbnNp
b25QYXRoLmhhc2goKTsgfQogICAgICAgICBFeHRlbnNpb25QYXRoQWN0aW9uIGlzb2xhdGVkQ29w
eSgpIGNvbnN0IHsgcmV0dXJuIHsgZXh0ZW5zaW9uUGF0aC5pc29sYXRlZENvcHkoKSB9OyB9CiAg
ICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFeHRlbnNpb25QYXRoQWN0aW9uJiBvdGhlcikg
Y29uc3QgeyByZXR1cm4gb3RoZXIuZXh0ZW5zaW9uUGF0aCA9PSB0aGlzLT5leHRlbnNpb25QYXRo
OyB9CiAgICAgfTsKICAgICBzdHJ1Y3QgUmVnZXhTdWJzdGl0dXRpb25BY3Rpb24gewogICAgICAg
ICBTdHJpbmcgcmVnZXhTdWJzdGl0dXRpb247CiAKKyAgICAgICAgdWludDMyX3QgaGFzaCgpIGNv
bnN0IHsgcmV0dXJuIHJlZ2V4U3Vic3RpdHV0aW9uLmhhc2goKTsgfQogICAgICAgICBSZWdleFN1
YnN0aXR1dGlvbkFjdGlvbiBpc29sYXRlZENvcHkoKSBjb25zdCB7IHJldHVybiB7IHJlZ2V4U3Vi
c3RpdHV0aW9uLmlzb2xhdGVkQ29weSgpIH07IH0KICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFJlZ2V4U3Vic3RpdHV0aW9uQWN0aW9uJiBvdGhlcikgY29uc3QgeyByZXR1cm4gb3RoZXIu
cmVnZXhTdWJzdGl0dXRpb24gPT0gdGhpcy0+cmVnZXhTdWJzdGl0dXRpb247IH0KICAgICB9OwpA
QCAtMTI0LDYgKzE3NCw3IEBAIHN0cnVjdCBXRUJDT1JFX0VYUE9SVCBSZWRpcmVjdEFjdGlvbiB7
CiAgICAgICAgICAgICAgICAgYm9vbCByZXBsYWNlT25seSB7IGZhbHNlIH07CiAgICAgICAgICAg
ICAgICAgU3RyaW5nIHZhbHVlOwogCisgICAgICAgICAgICAgICAgdWludDMyX3QgaGFzaCgpIGNv
bnN0IHsgcmV0dXJuIGNvbXB1dGVIYXNoKGtleSwgcmVwbGFjZU9ubHksIHZhbHVlKTsgfQogICAg
ICAgICAgICAgICAgIHN0YXRpYyBFeHBlY3RlZDxRdWVyeUtleVZhbHVlLCBzdGQ6OmVycm9yX2Nv
ZGU+IHBhcnNlKGNvbnN0IEpTT046OlZhbHVlJik7CiAgICAgICAgICAgICAgICAgUXVlcnlLZXlW
YWx1ZSBpc29sYXRlZENvcHkoKSBjb25zdDsKICAgICAgICAgICAgICAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgUXVlcnlLZXlWYWx1ZSYpIGNvbnN0OwpAQCAtMTM1LDQ3ICsxODYsNjUgQEAgc3Ry
dWN0IFdFQkNPUkVfRVhQT1JUIFJlZGlyZWN0QWN0aW9uIHsKICAgICAgICAgICAgIFZlY3RvcjxR
dWVyeUtleVZhbHVlPiBhZGRPclJlcGxhY2VQYXJhbXM7CiAgICAgICAgICAgICBWZWN0b3I8U3Ry
aW5nPiByZW1vdmVQYXJhbXM7CiAKKyAgICAgICAgICAgIHVpbnQzMl90IGhhc2goKSBjb25zdCB7
IHJldHVybiBjb21wdXRlSGFzaChWZWN0b3JIYXNoZXI6Omhhc2goYWRkT3JSZXBsYWNlUGFyYW1z
KSwgcmVtb3ZlUGFyYW1zKTsgfQogICAgICAgICAgICAgc3RhdGljIEV4cGVjdGVkPFF1ZXJ5VHJh
bnNmb3JtLCBzdGQ6OmVycm9yX2NvZGU+IHBhcnNlKGNvbnN0IEpTT046Ok9iamVjdCYpOwogICAg
ICAgICAgICAgUXVlcnlUcmFuc2Zvcm0gaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAgICAgICAgICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgUXVlcnlUcmFuc2Zvcm0mKSBjb25zdDsKICAgICAgICAg
ICAgIHZvaWQgc2VyaWFsaXplKFZlY3Rvcjx1aW50OF90PiYpIGNvbnN0OwogICAgICAgICAgICAg
c3RhdGljIFF1ZXJ5VHJhbnNmb3JtIGRlc2VyaWFsaXplKFNwYW48Y29uc3QgdWludDhfdD4pOwog
ICAgICAgICAgICAgc3RhdGljIHNpemVfdCBzZXJpYWxpemVkTGVuZ3RoKFNwYW48Y29uc3QgdWlu
dDhfdD4pOworICAgICAgICAgICAgdm9pZCBhcHBseVRvVVJMKFVSTCYpIGNvbnN0OwogICAgICAg
ICB9OwogCiAgICAgICAgIFN0cmluZyBmcmFnbWVudDsKICAgICAgICAgU3RyaW5nIGhvc3Q7CiAg
ICAgICAgIFN0cmluZyBwYXNzd29yZDsKICAgICAgICAgU3RyaW5nIHBhdGg7Ci0gICAgICAgIFN0
cmluZyBwb3J0OworICAgICAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+
PiBwb3J0OwogICAgICAgICB1c2luZyBRdWVyeVRyYW5zZm9ybVZhcmlhbnQgPSBzdGQ6OnZhcmlh
bnQ8U3RyaW5nLCBRdWVyeVRyYW5zZm9ybT47CiAgICAgICAgIFF1ZXJ5VHJhbnNmb3JtVmFyaWFu
dCBxdWVyeVRyYW5zZm9ybTsKICAgICAgICAgU3RyaW5nIHNjaGVtZTsKICAgICAgICAgU3RyaW5n
IHVzZXJuYW1lOwogCi0gICAgICAgIHN0YXRpYyBFeHBlY3RlZDxVUkxUcmFuc2Zvcm1BY3Rpb24s
IHN0ZDo6ZXJyb3JfY29kZT4gcGFyc2UoY29uc3QgSlNPTjo6T2JqZWN0JiwgY29uc3QgSGFzaFNl
dDxTdHJpbmc+Jik7CisgICAgICAgIHVpbnQzMl90IGhhc2goKSBjb25zdCB7IHJldHVybiBjb21w
dXRlSGFzaChmcmFnbWVudC5oYXNoKCksIGhvc3QuaGFzaCgpLCBwYXNzd29yZC5oYXNoKCksIHBh
dGguaGFzaCgpLCBwb3J0LCBWYXJpYW50SGFzaGVyOjpoYXNoKHF1ZXJ5VHJhbnNmb3JtKSwgc2No
ZW1lLmhhc2goKSwgdXNlcm5hbWUuaGFzaCgpKTsgfQorICAgICAgICBzdGF0aWMgRXhwZWN0ZWQ8
VVJMVHJhbnNmb3JtQWN0aW9uLCBzdGQ6OmVycm9yX2NvZGU+IHBhcnNlKGNvbnN0IEpTT046Ok9i
amVjdCYsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8SGFzaFNldDxTdHJpbmc+PiYpOwogICAgICAgICBV
UkxUcmFuc2Zvcm1BY3Rpb24gaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAgICAgICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBVUkxUcmFuc2Zvcm1BY3Rpb24mKSBjb25zdDsKICAgICAgICAgdm9pZCBz
ZXJpYWxpemUoVmVjdG9yPHVpbnQ4X3Q+JikgY29uc3Q7CiAgICAgICAgIHN0YXRpYyBVUkxUcmFu
c2Zvcm1BY3Rpb24gZGVzZXJpYWxpemUoU3Bhbjxjb25zdCB1aW50OF90Pik7CiAgICAgICAgIHN0
YXRpYyBzaXplX3Qgc2VyaWFsaXplZExlbmd0aChTcGFuPGNvbnN0IHVpbnQ4X3Q+KTsKKyAgICAg
ICAgdm9pZCBhcHBseVRvVVJMKFVSTCYpIGNvbnN0OwogICAgIH07CiAgICAgc3RydWN0IFVSTEFj
dGlvbiB7CiAgICAgICAgIFN0cmluZyB1cmw7CiAKKyAgICAgICAgdWludDMyX3QgaGFzaCgpIGNv
bnN0IHsgcmV0dXJuIHVybC5oYXNoKCk7IH0KICAgICAgICAgVVJMQWN0aW9uIGlzb2xhdGVkQ29w
eSgpIGNvbnN0IHsgcmV0dXJuIHsgdXJsLmlzb2xhdGVkQ29weSgpIH07IH0KICAgICAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFVSTEFjdGlvbiYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG90aGVy
LnVybCA9PSB0aGlzLT51cmw7IH0KICAgICB9OwogCisgICAgZW51bSBjbGFzcyBIYXNoVGFibGVU
eXBlIDogdWludDhfdCB7IEVtcHR5LCBEZWxldGVkLCBGdWxsIH0gaGFzaFRhYmxlVHlwZTsKICAg
ICB1c2luZyBBY3Rpb25WYXJpYW50ID0gc3RkOjp2YXJpYW50PEV4dGVuc2lvblBhdGhBY3Rpb24s
IFJlZ2V4U3Vic3RpdHV0aW9uQWN0aW9uLCBVUkxUcmFuc2Zvcm1BY3Rpb24sIFVSTEFjdGlvbj47
CiAgICAgQWN0aW9uVmFyaWFudCBhY3Rpb247CiAKLSAgICBzdGF0aWMgRXhwZWN0ZWQ8UmVkaXJl
Y3RBY3Rpb24sIHN0ZDo6ZXJyb3JfY29kZT4gcGFyc2UoY29uc3QgSlNPTjo6T2JqZWN0JiwgY29u
c3QgSGFzaFNldDxTdHJpbmc+Jik7CisgICAgUmVkaXJlY3RBY3Rpb24oQWN0aW9uVmFyaWFudCYm
IGFjdGlvbikKKyAgICAgICAgOiBoYXNoVGFibGVUeXBlKEhhc2hUYWJsZVR5cGU6OkZ1bGwpCisg
ICAgICAgICwgYWN0aW9uKFdURk1vdmUoYWN0aW9uKSkgeyB9CisKKyAgICBlbnVtIEVtcHR5VmFs
dWVUYWcgeyBFbXB0eVZhbHVlIH07CisgICAgZW51bSBEZWxldGVkVmFsdWVUYWcgeyBEZWxldGVk
VmFsdWUgfTsKKyAgICBSZWRpcmVjdEFjdGlvbihFbXB0eVZhbHVlVGFnKSA6IGhhc2hUYWJsZVR5
cGUoSGFzaFRhYmxlVHlwZTo6RW1wdHkpIHsgfQorICAgIFJlZGlyZWN0QWN0aW9uKERlbGV0ZWRW
YWx1ZVRhZykgOiBoYXNoVGFibGVUeXBlKEhhc2hUYWJsZVR5cGU6OkRlbGV0ZWQpIHsgfQorICAg
IGJvb2wgaXNEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBoYXNoVGFibGVUeXBlID09IEhh
c2hUYWJsZVR5cGU6OkRlbGV0ZWQ7IH0KKyAgICB1aW50MzJfdCBoYXNoKCkgY29uc3QgeyByZXR1
cm4gVmFyaWFudEhhc2hlcjo6aGFzaChhY3Rpb24pOyB9CisKKyAgICBzdGF0aWMgRXhwZWN0ZWQ8
UmVkaXJlY3RBY3Rpb24sIHN0ZDo6ZXJyb3JfY29kZT4gcGFyc2UoY29uc3QgSlNPTjo6T2JqZWN0
JiwgY29uc3Qgc3RkOjpvcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+Jik7CiAgICAgUmVkaXJlY3RB
Y3Rpb24gaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJl
ZGlyZWN0QWN0aW9uJikgY29uc3Q7CiAgICAgdm9pZCBzZXJpYWxpemUoVmVjdG9yPHVpbnQ4X3Q+
JikgY29uc3Q7CiAgICAgc3RhdGljIFJlZGlyZWN0QWN0aW9uIGRlc2VyaWFsaXplKFNwYW48Y29u
c3QgdWludDhfdD4pOwogICAgIHN0YXRpYyBzaXplX3Qgc2VyaWFsaXplZExlbmd0aChTcGFuPGNv
bnN0IHVpbnQ4X3Q+KTsKKyAgICB2b2lkIGFwcGx5VG9SZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYp
OwogfTsKIAogdXNpbmcgQWN0aW9uRGF0YSA9IHN0ZDo6dmFyaWFudDwKQEAgLTE5MSw0ICsyNjAs
MjQgQEAgdXNpbmcgQWN0aW9uRGF0YSA9IHN0ZDo6dmFyaWFudDwKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnMKIAorbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRl
PD4gc3RydWN0IERlZmF1bHRIYXNoPFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpSZWRpcmVj
dEFjdGlvbj4geworICAgIHVzaW5nIEFjdGlvbiA9IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpSZWRpcmVjdEFjdGlvbjsKKyAgICBzdGF0aWMgdWludDMyX3QgaGFzaChjb25zdCBBY3Rpb24m
IGFjdGlvbikgeyByZXR1cm4gYWN0aW9uLmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFs
KGNvbnN0IEFjdGlvbiYgYSwgY29uc3QgQWN0aW9uJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0
cnVlOworfTsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8V2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OlJlZGlyZWN0QWN0aW9uPiA6IHB1YmxpYyBDdXN0b21IYXNoVHJhaXRzPFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpSZWRpcmVjdEFjdGlvbj4geyB9OworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBEZWZhdWx0SGFzaDxXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TW9kaWZ5SGVh
ZGVyc0FjdGlvbj4geworICAgIHVzaW5nIEFjdGlvbiA9IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpNb2RpZnlIZWFkZXJzQWN0aW9uOworICAgIHN0YXRpYyB1aW50MzJfdCBoYXNoKGNvbnN0
IEFjdGlvbiYgYWN0aW9uKSB7IHJldHVybiBhY3Rpb24uaGFzaCgpOyB9CisgICAgc3RhdGljIGJv
b2wgZXF1YWwoY29uc3QgQWN0aW9uJiBhLCBjb25zdCBBY3Rpb24mIGIpIHsgcmV0dXJuIGEgPT0g
YjsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVs
ZXRlZCA9IHRydWU7Cit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxXZWJDb3JlOjpD
b250ZW50RXh0ZW5zaW9uczo6TW9kaWZ5SGVhZGVyc0FjdGlvbj4gOiBwdWJsaWMgQ3VzdG9tSGFz
aFRyYWl0czxXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TW9kaWZ5SGVhZGVyc0FjdGlvbj4g
eyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwogI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50
RXh0ZW5zaW9uQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHAJKHJldmlzaW9uIDI4NTk1
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25D
b21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDEyICs3NiwxNiBAQCBzdGF0aWMgVmVj
dG9yPHVuc2lnbmVkPiBzZXJpYWxpemVBY3Rpb25zCiAgICAgdXNpbmcgQWN0aW9uTG9jYXRpb24g
PSB1aW50MzJfdDsKICAgICB1c2luZyBBY3Rpb25NYXAgPSBIYXNoTWFwPFJlc291cmNlRmxhZ3Ms
IEFjdGlvbkxvY2F0aW9uLCBEZWZhdWx0SGFzaDxSZXNvdXJjZUZsYWdzPiwgV1RGOjpVbnNpZ25l
ZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxSZXNvdXJjZUZsYWdzPj47CiAgICAgdXNpbmcgU3RyaW5n
QWN0aW9uTWFwID0gSGFzaE1hcDxzdGQ6OnBhaXI8U3RyaW5nLCBSZXNvdXJjZUZsYWdzPiwgQWN0
aW9uTG9jYXRpb24sIERlZmF1bHRIYXNoPHN0ZDo6cGFpcjxTdHJpbmcsIFJlc291cmNlRmxhZ3M+
PiwgUGFpckhhc2hUcmFpdHM8SGFzaFRyYWl0czxTdHJpbmc+LCBXVEY6OlVuc2lnbmVkV2l0aFpl
cm9LZXlIYXNoVHJhaXRzPFJlc291cmNlRmxhZ3M+Pj47CisgICAgdXNpbmcgUmVkaXJlY3RBY3Rp
b25NYXAgPSBIYXNoTWFwPHN0ZDo6cGFpcjxSZWRpcmVjdEFjdGlvbiwgUmVzb3VyY2VGbGFncz4s
IEFjdGlvbkxvY2F0aW9uLCBEZWZhdWx0SGFzaDxzdGQ6OnBhaXI8UmVkaXJlY3RBY3Rpb24sIFJl
c291cmNlRmxhZ3M+PiwgUGFpckhhc2hUcmFpdHM8SGFzaFRyYWl0czxSZWRpcmVjdEFjdGlvbj4s
IFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8UmVzb3VyY2VGbGFncz4+PjsKKyAg
ICB1c2luZyBNb2RpZnlIZWFkZXJzQWN0aW9uTWFwID0gSGFzaE1hcDxzdGQ6OnBhaXI8TW9kaWZ5
SGVhZGVyc0FjdGlvbiwgUmVzb3VyY2VGbGFncz4sIEFjdGlvbkxvY2F0aW9uLCBEZWZhdWx0SGFz
aDxzdGQ6OnBhaXI8TW9kaWZ5SGVhZGVyc0FjdGlvbiwgUmVzb3VyY2VGbGFncz4+LCBQYWlySGFz
aFRyYWl0czxIYXNoVHJhaXRzPE1vZGlmeUhlYWRlcnNBY3Rpb24+LCBXVEY6OlVuc2lnbmVkV2l0
aFplcm9LZXlIYXNoVHJhaXRzPFJlc291cmNlRmxhZ3M+Pj47CiAgICAgQWN0aW9uTWFwIGJsb2Nr
TG9hZEFjdGlvbnNNYXA7CiAgICAgQWN0aW9uTWFwIGJsb2NrQ29va2llc0FjdGlvbnNNYXA7CiAg
ICAgUGVuZGluZ0Rpc3BsYXlOb25lQWN0aW9uc01hcCBjc3NEaXNwbGF5Tm9uZUFjdGlvbnNNYXA7
CiAgICAgQWN0aW9uTWFwIGlnbm9yZVByZXZpb3VzUnVsZUFjdGlvbnNNYXA7CiAgICAgQWN0aW9u
TWFwIG1ha2VIVFRQU0FjdGlvbnNNYXA7CiAgICAgU3RyaW5nQWN0aW9uTWFwIG5vdGlmeUFjdGlv
bnNNYXA7CisgICAgUmVkaXJlY3RBY3Rpb25NYXAgcmVkaXJlY3RBY3Rpb25NYXA7CisgICAgTW9k
aWZ5SGVhZGVyc0FjdGlvbk1hcCBtb2RpZnlIZWFkZXJzQWN0aW9uTWFwOwogCiAgICAgZm9yICh1
bnNpZ25lZCBydWxlSW5kZXggPSAwOyBydWxlSW5kZXggPCBydWxlTGlzdC5zaXplKCk7ICsrcnVs
ZUluZGV4KSB7CiAgICAgICAgIGNvbnN0IENvbnRlbnRFeHRlbnNpb25SdWxlJiBydWxlID0gcnVs
ZUxpc3RbcnVsZUluZGV4XTsKQEAgLTExMSwzMSArMTE1LDM0IEBAIHN0YXRpYyBWZWN0b3I8dW5z
aWduZWQ+IHNlcmlhbGl6ZUFjdGlvbnMKICAgICAgICAgfQogCiAgICAgICAgIFJlc291cmNlRmxh
Z3MgZmxhZ3MgPSBydWxlLnRyaWdnZXIoKS5mbGFnczsKLSAgICAgICAgdW5zaWduZWQgYWN0aW9u
TG9jYXRpb24gPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7Ci0gICAgICAg
IAorCiAgICAgICAgIGF1dG8gZmluZE9yTWFrZUFjdGlvbkxvY2F0aW9uID0gWyZdIChBY3Rpb25N
YXAmIG1hcCkgewotICAgICAgICAgICAgY29uc3QgYXV0byBleGlzdGluZ0FjdGlvbiA9IG1hcC5m
aW5kKGZsYWdzKTsKLSAgICAgICAgICAgIGlmIChleGlzdGluZ0FjdGlvbiA9PSBtYXAuZW5kKCkp
IHsKLSAgICAgICAgICAgICAgICBhY3Rpb25Mb2NhdGlvbiA9IGFjdGlvbnMuc2l6ZSgpOworICAg
ICAgICAgICAgcmV0dXJuIG1hcC5lbnN1cmUoZmxhZ3MsIFsmXSB7CisgICAgICAgICAgICAgICAg
YXV0byBuZXdBY3Rpb25Mb2NhdGlvbiA9IGFjdGlvbnMuc2l6ZSgpOwogICAgICAgICAgICAgICAg
IGFjdGlvbnMuYXBwZW5kKGFjdGlvbkRhdGEuaW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgbWFw
LnNldChmbGFncywgYWN0aW9uTG9jYXRpb24pOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICAgICAgYWN0aW9uTG9jYXRpb24gPSBleGlzdGluZ0FjdGlvbi0+dmFsdWU7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG5ld0FjdGlvbkxvY2F0aW9uOworICAgICAgICAgICAgfSkuaXRlcmF0
b3ItPnZhbHVlOwogICAgICAgICB9OwotICAgICAgICAKLSAgICAgICAgYXV0byBmaW5kT3JNYWtl
U3RyaW5nQWN0aW9uTG9jYXRpb24gPSBbJl0gKFN0cmluZ0FjdGlvbk1hcCYgbWFwLCBjb25zdCBO
b3RpZnlBY3Rpb24mIGFjdGlvbkRhdGEpIHsKLSAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgbm90
aWZpY2F0aW9uID0gYWN0aW9uRGF0YS5zdHJpbmc7Ci0gICAgICAgICAgICBhdXRvIGV4aXN0aW5n
QWN0aW9uID0gbWFwLmZpbmQoc3RkOjptYWtlX3BhaXIobm90aWZpY2F0aW9uLCBmbGFncykpOwot
ICAgICAgICAgICAgaWYgKGV4aXN0aW5nQWN0aW9uID09IG1hcC5lbmQoKSkgewotICAgICAgICAg
ICAgICAgIGFjdGlvbkxvY2F0aW9uID0gYWN0aW9ucy5zaXplKCk7Ci0gICAgICAgICAgICAgICAg
YWN0aW9ucy5hcHBlbmQoV1RGOjphbHRlcm5hdGl2ZUluZGV4VjxOb3RpZnlBY3Rpb24sIEFjdGlv
bkRhdGE+KTsKLSAgICAgICAgICAgICAgICBzZXJpYWxpemVTdHJpbmcoYWN0aW9ucywgbm90aWZp
Y2F0aW9uKTsKLSAgICAgICAgICAgICAgICBtYXAuc2V0KHN0ZDo6bWFrZV9wYWlyKG5vdGlmaWNh
dGlvbiwgZmxhZ3MpLCBhY3Rpb25Mb2NhdGlvbik7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICBhY3Rpb25Mb2NhdGlvbiA9IGV4aXN0aW5nQWN0aW9uLT52YWx1ZTsKKworICAg
ICAgICBhdXRvIGZpbmRPck1ha2VOb3RpZnlBY3Rpb25Mb2NhdGlvbiA9IFsmXSAoYXV0byYgbWFw
LCBjb25zdCBhdXRvJiBhY3Rpb24pIHsKKyAgICAgICAgICAgIHJldHVybiBtYXAuZW5zdXJlKHsg
YWN0aW9uLnN0cmluZywgZmxhZ3MgfSwgWyZdIHsKKyAgICAgICAgICAgICAgICBhdXRvIG5ld0Fj
dGlvbkxvY2F0aW9uID0gYWN0aW9ucy5zaXplKCk7CisgICAgICAgICAgICAgICAgYWN0aW9ucy5h
cHBlbmQoYWN0aW9uRGF0YS5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICBhY3Rpb24uc2VyaWFs
aXplKGFjdGlvbnMpOworICAgICAgICAgICAgICAgIHJldHVybiBuZXdBY3Rpb25Mb2NhdGlvbjsK
KyAgICAgICAgICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgfTsKLSAgICAgICAgCi0g
ICAgICAgIHN0ZDo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0gKGNvbnN0IENTU0Rpc3BsYXlO
b25lU2VsZWN0b3JBY3Rpb24mIGFjdGlvbkRhdGEpIHsKKworICAgICAgICBhdXRvIGZpbmRPck1h
a2VPdGhlckFjdGlvbkxvY2F0aW9uID0gWyZdIChhdXRvJiBtYXAsIGNvbnN0IGF1dG8mIGFjdGlv
bikgeworICAgICAgICAgICAgcmV0dXJuIG1hcC5lbnN1cmUoeyBhY3Rpb24sIGZsYWdzIH0sIFsm
XSB7CisgICAgICAgICAgICAgICAgYXV0byBuZXdBY3Rpb25Mb2NhdGlvbiA9IGFjdGlvbnMuc2l6
ZSgpOworICAgICAgICAgICAgICAgIGFjdGlvbnMuYXBwZW5kKGFjdGlvbkRhdGEuaW5kZXgoKSk7
CisgICAgICAgICAgICAgICAgYWN0aW9uLnNlcmlhbGl6ZShhY3Rpb25zKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbmV3QWN0aW9uTG9jYXRpb247CisgICAgICAgICAgICB9KS5pdGVyYXRvci0+
dmFsdWU7CisgICAgICAgIH07CisKKyAgICAgICAgYXV0byBhY3Rpb25Mb2NhdGlvbiA9IHN0ZDo6
dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0gKGNvbnN0IENTU0Rpc3BsYXlOb25lU2VsZWN0b3JB
Y3Rpb24mIGFjdGlvbkRhdGEpIHsKICAgICAgICAgICAgIGNvbnN0IGF1dG8gYWRkUmVzdWx0ID0g
Y3NzRGlzcGxheU5vbmVBY3Rpb25zTWFwLmFkZChydWxlLnRyaWdnZXIoKSwgUGVuZGluZ0Rpc3Bs
YXlOb25lQWN0aW9ucygpKTsKICAgICAgICAgICAgIGF1dG8mIHBlbmRpbmdTdHJpbmdBY3Rpb25z
ID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgICAgIGlmICghcGVuZGluZ1N0
cmluZ0FjdGlvbnMuY29tYmluZWRTZWxlY3RvcnMuaXNFbXB0eSgpKQpAQCAtMTQzLDIxICsxNTAs
MjIgQEAgc3RhdGljIFZlY3Rvcjx1bnNpZ25lZD4gc2VyaWFsaXplQWN0aW9ucwogICAgICAgICAg
ICAgcGVuZGluZ1N0cmluZ0FjdGlvbnMuY29tYmluZWRTZWxlY3RvcnMuYXBwZW5kKGFjdGlvbkRh
dGEuc3RyaW5nKTsKICAgICAgICAgICAgIHBlbmRpbmdTdHJpbmdBY3Rpb25zLmNsaWVudExvY2F0
aW9ucy5hcHBlbmQoYWN0aW9uTG9jYXRpb25zLnNpemUoKSk7CiAKLSAgICAgICAgICAgIGFjdGlv
bkxvY2F0aW9uID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOworICAgICAg
ICAgICAgLy8gcmVzb2x2ZVBlbmRpbmdEaXNwbGF5Tm9uZUFjdGlvbnMgd2lsbCBmaWxsIHRoaXMg
aW4gbGF0ZXIuCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxBY3Rpb25M
b2NhdGlvbj46Om1heCgpOwogICAgICAgICB9LCBbJl0gKGNvbnN0IElnbm9yZVByZXZpb3VzUnVs
ZXNBY3Rpb24mKSB7Ci0gICAgICAgICAgICBmaW5kT3JNYWtlQWN0aW9uTG9jYXRpb24oaWdub3Jl
UHJldmlvdXNSdWxlQWN0aW9uc01hcCk7CisgICAgICAgICAgICByZXR1cm4gZmluZE9yTWFrZUFj
dGlvbkxvY2F0aW9uKGlnbm9yZVByZXZpb3VzUnVsZUFjdGlvbnNNYXApOwogICAgICAgICB9LCBb
Jl0gKGNvbnN0IEJsb2NrTG9hZEFjdGlvbiYpIHsKLSAgICAgICAgICAgIGZpbmRPck1ha2VBY3Rp
b25Mb2NhdGlvbihibG9ja0xvYWRBY3Rpb25zTWFwKTsKKyAgICAgICAgICAgIHJldHVybiBmaW5k
T3JNYWtlQWN0aW9uTG9jYXRpb24oYmxvY2tMb2FkQWN0aW9uc01hcCk7CiAgICAgICAgIH0sIFsm
XSAoY29uc3QgQmxvY2tDb29raWVzQWN0aW9uJikgewotICAgICAgICAgICAgZmluZE9yTWFrZUFj
dGlvbkxvY2F0aW9uKGJsb2NrQ29va2llc0FjdGlvbnNNYXApOworICAgICAgICAgICAgcmV0dXJu
IGZpbmRPck1ha2VBY3Rpb25Mb2NhdGlvbihibG9ja0Nvb2tpZXNBY3Rpb25zTWFwKTsKICAgICAg
ICAgfSwgWyZdIChjb25zdCBNYWtlSFRUUFNBY3Rpb24mKSB7Ci0gICAgICAgICAgICBmaW5kT3JN
YWtlQWN0aW9uTG9jYXRpb24obWFrZUhUVFBTQWN0aW9uc01hcCk7CisgICAgICAgICAgICByZXR1
cm4gZmluZE9yTWFrZUFjdGlvbkxvY2F0aW9uKG1ha2VIVFRQU0FjdGlvbnNNYXApOwogICAgICAg
ICB9LCBbJl0gKGNvbnN0IE5vdGlmeUFjdGlvbiYgYWN0aW9uRGF0YSkgewotICAgICAgICAgICAg
ZmluZE9yTWFrZVN0cmluZ0FjdGlvbkxvY2F0aW9uKG5vdGlmeUFjdGlvbnNNYXAsIGFjdGlvbkRh
dGEpOwotICAgICAgICB9LCBbJl0gKGNvbnN0IE1vZGlmeUhlYWRlcnNBY3Rpb24mKSB7Ci0gICAg
ICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50Ci0gICAgICAgIH0sIFsmXSAoY29uc3QgUmVkaXJl
Y3RBY3Rpb24mKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50CisgICAgICAgICAg
ICByZXR1cm4gZmluZE9yTWFrZU5vdGlmeUFjdGlvbkxvY2F0aW9uKG5vdGlmeUFjdGlvbnNNYXAs
IGFjdGlvbkRhdGEpOworICAgICAgICB9LCBbJl0gKGNvbnN0IE1vZGlmeUhlYWRlcnNBY3Rpb24m
IGFjdGlvbikgeworICAgICAgICAgICAgcmV0dXJuIGZpbmRPck1ha2VPdGhlckFjdGlvbkxvY2F0
aW9uKG1vZGlmeUhlYWRlcnNBY3Rpb25NYXAsIGFjdGlvbik7CisgICAgICAgIH0sIFsmXSAoY29u
c3QgUmVkaXJlY3RBY3Rpb24mIGFjdGlvbikgeworICAgICAgICAgICAgcmV0dXJuIGZpbmRPck1h
a2VPdGhlckFjdGlvbkxvY2F0aW9uKHJlZGlyZWN0QWN0aW9uTWFwLCBhY3Rpb24pOwogICAgICAg
ICB9KSwgYWN0aW9uRGF0YSk7CiAgICAgICAgIGFjdGlvbkxvY2F0aW9ucy5hcHBlbmQoYWN0aW9u
TG9jYXRpb24pOwogICAgIH0KQEAgLTI2Nyw3ICsyNzUsNyBAQCBzdGQ6OmVycm9yX2NvZGUgY29t
cGlsZVJ1bGVMaXN0KENvbnRlbnRFCiB7CiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICBjYWxsT25N
YWluVGhyZWFkKFtydWxlSlNPTiA9IHJ1bGVKU09OLmlzb2xhdGVkQ29weSgpLCBwYXJzZWRSdWxl
TGlzdCA9IHBhcnNlZFJ1bGVMaXN0Lmlzb2xhdGVkQ29weSgpXSB7Ci0gICAgICAgIEFTU0VSVChw
YXJzZVJ1bGVMaXN0KHJ1bGVKU09OLCB7IH0pLnZhbHVlKCkgPT0gcGFyc2VkUnVsZUxpc3QpOwor
ICAgICAgICBBU1NFUlQocGFyc2VSdWxlTGlzdChydWxlSlNPTiwgc3RkOjpudWxsb3B0KS52YWx1
ZSgpID09IHBhcnNlZFJ1bGVMaXN0KTsKICAgICB9KTsKICNlbmRpZgogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNp
b25FcnJvci5jcHAJKHJldmlzaW9uIDI4NTk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
Myw4ICsxMDMsMjAgQEAgY29uc3Qgc3RkOjplcnJvcl9jYXRlZ29yeSYgY29udGVudEV4dGVucwog
ICAgICAgICAgICAgICAgIHJldHVybiAiQSByZWRpcmVjdCBleHRlbnNpb24gcGF0aCBtdXN0IHN0
YXJ0IHdpdGggYSBzbGFzaCI7CiAgICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25FcnJv
cjo6SlNPTlJlZGlyZWN0VVJMU2NoZW1lTm90QWxsb3dlZDoKICAgICAgICAgICAgICAgICByZXR1
cm4gIkEgcmVkaXJlY3QgdXJsIHNjaGVtZSBtdXN0IGJlIGluIHRoZSBzZXQgb2YgYWxsb3dlZCBz
Y2hlbWVzIjsKKyAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVk
aXJlY3RVUkxTY2hlbWVJbnZhbGlkOgorICAgICAgICAgICAgICAgIHJldHVybiAiQSByZWRpcmVj
dCB1ciBsc2NoZW1lIG11c3QgYmUgYSB2YWxpZCBzY2hlbWUiOworICAgICAgICAgICAgY2FzZSBD
b250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTFNjaGVtZXNTaG91bGROb3RJbmNs
dWRlSmF2YXNjcmlwdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIlRoZSBzZXQgb2YgYWxsb3dl
ZCByZWRpcmVjdCBzY2hlbWVzIHNob3VsZG4ndCBpbmNsdWRlIGphdmFzY3JpcHQiOworICAgICAg
ICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTEludmFsaWQ6
CisgICAgICAgICAgICAgICAgcmV0dXJuICJBIHJlZGlyZWN0IHVybCBtdXN0IGJlIHZhbGlkIjsK
ICAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RJbnZh
bGlkVHlwZToKICAgICAgICAgICAgICAgICByZXR1cm4gIkEgcmVkaXJlY3QgbXVzdCBoYXZlIGEg
bWVtYmVyIG5hbWVkIFwiZXh0ZW5zaW9uLXBhdGhcIiwgXCJyZWdleC1zdWJzdGl0dXRpb25cIiwg
XCJ0cmFuc2Zvcm1cIiBvciBcInVybFwiIjsKKyAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVu
c2lvbkVycm9yOjpKU09OUmVkaXJlY3RJbnZhbGlkUG9ydDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gIkEgcmVkaXJlY3QgcG9ydCBtdXN0IGJlIGVpdGhlciBlbXB0eSBvciBhIG51bWJlciBiZXR3
ZWVuIDAgYW5kIDY1NTM1LCBpbmNsdXNpdmUiOworICAgICAgICAgICAgY2FzZSBDb250ZW50RXh0
ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdEludmFsaWRRdWVyeToKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gIkEgcmVkaXJlY3QgcXVlcnkgbXVzdCBlaXRoZXIgYmUgZW1wdHkgb3IgYmVnaW4gd2l0
aCAnPyciOworICAgICAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRp
cmVjdEludmFsaWRGcmFnbWVudDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIkEgcmVkaXJlY3Qg
ZnJhZ21lbnQgbXVzdCBlaXRoZXIgYmUgZW1wdHkgb3IgYmVnaW4gd2l0aCAnIyciOwogICAgICAg
ICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05Nb2RpZnlIZWFkZXJzSW52YWxp
ZE9wZXJhdGlvbjoKICAgICAgICAgICAgICAgICByZXR1cm4gIkEgbW9kaWZ5LWhlYWRlcnMgb3Bl
cmF0aW9uIG11c3QgaGF2ZSBhbiBvcGVyYXRpb24gdGhhdCBpcyBlaXRoZXIgXCJzZXRcIiwgXCJh
cHBlbmRcIiwgb3IgXCJyZW1vdmVcIiI7CiAgICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNp
b25FcnJvcjo6SlNPTk1vZGlmeUhlYWRlcnNJbmZvTm90QURpY3Rpb25hcnk6CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5z
aW9uRXJyb3IuaAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkVycm9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDgg
KzYwLDE0IEBAIGVudW0gY2xhc3MgQ29udGVudEV4dGVuc2lvbkVycm9yIHsKIAogICAgIEpTT05S
ZWRpcmVjdE1pc3NpbmcsCiAgICAgSlNPTlJlZGlyZWN0RXh0ZW5zaW9uUGF0aERvZXNOb3RTdGFy
dFdpdGhTbGFzaCwKKyAgICBKU09OUmVkaXJlY3RVUkxTY2hlbWVJbnZhbGlkLAogICAgIEpTT05S
ZWRpcmVjdFVSTFNjaGVtZU5vdEFsbG93ZWQsCisgICAgSlNPTlJlZGlyZWN0VVJMU2NoZW1lc1No
b3VsZE5vdEluY2x1ZGVKYXZhc2NyaXB0LAorICAgIEpTT05SZWRpcmVjdFVSTEludmFsaWQsCiAg
ICAgSlNPTlJlZGlyZWN0SW52YWxpZFR5cGUsCisgICAgSlNPTlJlZGlyZWN0SW52YWxpZFBvcnQs
CisgICAgSlNPTlJlZGlyZWN0SW52YWxpZFF1ZXJ5LAorICAgIEpTT05SZWRpcmVjdEludmFsaWRG
cmFnbWVudCwKIAogICAgIEpTT05SZW1vdmVQYXJhbWV0ZXJzTm90U3RyaW5nQXJyYXksCiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0Nv
bnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTc5LDcgKzE3OSw3IEBAIGJvb2wgaXNWYWxpZENTU1NlbGVjdG9yKGNvbnN0
IFN0cmluZyYgc2UKICAgICByZXR1cm4gISFwYXJzZXIucGFyc2VTZWxlY3RvcihzZWxlY3Rvcik7
CiB9CiAKLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPEV4cGVjdGVkPEFjdGlvbiwgc3RkOjplcnJvcl9j
b2RlPj4gbG9hZEFjdGlvbihjb25zdCBKU09OOjpPYmplY3QmIHJ1bGVPYmplY3QsIGNvbnN0IEhh
c2hTZXQ8U3RyaW5nPiYgYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcykKK3N0YXRpYyBzdGQ6Om9w
dGlvbmFsPEV4cGVjdGVkPEFjdGlvbiwgc3RkOjplcnJvcl9jb2RlPj4gbG9hZEFjdGlvbihjb25z
dCBKU09OOjpPYmplY3QmIHJ1bGVPYmplY3QsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8SGFzaFNldDxT
dHJpbmc+PiYgYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcykKIHsKICAgICBhdXRvIGFjdGlvbk9i
amVjdCA9IHJ1bGVPYmplY3QuZ2V0T2JqZWN0KCJhY3Rpb24iKTsKICAgICBpZiAoIWFjdGlvbk9i
amVjdCkKQEAgLTIyNCw3ICsyMjQsNyBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxFeHBlY3RlZDxB
Y3Rpb24sIHN0CiAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJv
cjo6SlNPTkludmFsaWRBY3Rpb25UeXBlKTsKIH0KIAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8RXhw
ZWN0ZWQ8Q29udGVudEV4dGVuc2lvblJ1bGUsIHN0ZDo6ZXJyb3JfY29kZT4+IGxvYWRSdWxlKGNv
bnN0IEpTT046Ok9iamVjdCYgcnVsZU9iamVjdCwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhbGxv
d2VkUmVkaXJlY3RVUkxTY2hlbWVzKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8RXhwZWN0ZWQ8Q29u
dGVudEV4dGVuc2lvblJ1bGUsIHN0ZDo6ZXJyb3JfY29kZT4+IGxvYWRSdWxlKGNvbnN0IEpTT046
Ok9iamVjdCYgcnVsZU9iamVjdCwgY29uc3Qgc3RkOjpvcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+
JiBhbGxvd2VkUmVkaXJlY3RVUkxTY2hlbWVzKQogewogICAgIGF1dG8gdHJpZ2dlciA9IGxvYWRU
cmlnZ2VyKHJ1bGVPYmplY3QpOwogICAgIGlmICghdHJpZ2dlci5oYXNfdmFsdWUoKSkKQEAgLTIz
OSw4ICsyMzksMTEgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8RXhwZWN0ZWQ8Q29udGVudEV4dAog
ICAgIHJldHVybiB7IHsgeyBXVEZNb3ZlKHRyaWdnZXIudmFsdWUoKSksIFdURk1vdmUoYWN0aW9u
LT52YWx1ZSgpKSB9IH0gfTsKIH0KIAotc3RhdGljIEV4cGVjdGVkPFZlY3RvcjxDb250ZW50RXh0
ZW5zaW9uUnVsZT4sIHN0ZDo6ZXJyb3JfY29kZT4gbG9hZEVuY29kZWRSdWxlcyhjb25zdCBTdHJp
bmcmIHJ1bGVKU09OLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGFsbG93ZWRSZWRpcmVjdFVSTFNj
aGVtZXMpCitzdGF0aWMgRXhwZWN0ZWQ8VmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPiwgc3Rk
OjplcnJvcl9jb2RlPiBsb2FkRW5jb2RlZFJ1bGVzKGNvbnN0IFN0cmluZyYgcnVsZUpTT04sIGNv
bnN0IHN0ZDo6b3B0aW9uYWw8SGFzaFNldDxTdHJpbmc+PiYgYWxsb3dlZFJlZGlyZWN0VVJMU2No
ZW1lcykKIHsKKyAgICBpZiAoYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcyAmJiBhbGxvd2VkUmVk
aXJlY3RVUkxTY2hlbWVzLT5jb250YWlucygiamF2YXNjcmlwdCIpKQorICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RVUkxTY2hl
bWVzU2hvdWxkTm90SW5jbHVkZUphdmFzY3JpcHQpOworCiAgICAgYXV0byBkZWNvZGVkUnVsZXMg
PSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHJ1bGVKU09OKTsKIAogICAgIGlmICghZGVjb2RlZFJ1
bGVzKQpAQCAtMjcyLDcgKzI3NSw3IEBAIHN0YXRpYyBFeHBlY3RlZDxWZWN0b3I8Q29udGVudEV4
dGVuc2lvblIKICAgICByZXR1cm4gcnVsZUxpc3Q7CiB9CiAKLUV4cGVjdGVkPFZlY3RvcjxDb250
ZW50RXh0ZW5zaW9uUnVsZT4sIHN0ZDo6ZXJyb3JfY29kZT4gcGFyc2VSdWxlTGlzdChjb25zdCBT
dHJpbmcmIHJ1bGVKU09OLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGFsbG93ZWRSZWRpcmVjdFVS
TFNjaGVtZXMpCitFeHBlY3RlZDxWZWN0b3I8Q29udGVudEV4dGVuc2lvblJ1bGU+LCBzdGQ6OmVy
cm9yX2NvZGU+IHBhcnNlUnVsZUxpc3QoY29uc3QgU3RyaW5nJiBydWxlSlNPTiwgY29uc3Qgc3Rk
OjpvcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+JiBhbGxvd2VkUmVkaXJlY3RVUkxTY2hlbWVzKQog
ewogI2lmIENPTlRFTlRfRVhURU5TSU9OU19QRVJGT1JNQU5DRV9SRVBPUlRJTkcKICAgICBNb25v
dG9uaWNUaW1lIGxvYWRFeHRlbnNpb25TdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Q
YXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uUGFyc2VyLmgJKHJldmlzaW9uIDI4NTk1NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzgsNyArMzgsMTIgQEAgbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKIAog
Y2xhc3MgQ29udGVudEV4dGVuc2lvblJ1bGU7CiAKLVdFQkNPUkVfRVhQT1JUIEV4cGVjdGVkPFZl
Y3RvcjxDb250ZW50RXh0ZW5zaW9uUnVsZT4sIHN0ZDo6ZXJyb3JfY29kZT4gcGFyc2VSdWxlTGlz
dChjb25zdCBTdHJpbmcmLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGFsbG93ZWRSZWRpcmVjdFVS
TFNjaGVtZXMpOworLy8gQW4gYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcyBvZiBzdGQ6Om51bGxv
cHQgaW5kaWNhdGVzIHRoYXQgYWxsIFVSTCBzY2hlbWVzIGFyZSBhbGxvd2VkLgorLy8gVGhpcyBp
cyB1c2VkIHdoZW4gcmVjb21waWxpbmcgc291cmNlIGZyb20gb2xkZXIgdmVyc2lvbnMgb2YgV0tD
b250ZW50UnVsZUxpc3RzIG9uIGRpc2ssCisvLyB3aGVyZSB3ZSBkb24ndCBoYXZlIHRoZSBsaXN0
IG9mIGFsbG93ZWQgVVJMIHNjaGVtZXMgYnV0IGFzc3VtZSB0aGF0IGlmIGl0IGNvbXBpbGVkCisv
LyBzdWNjZXNzZnVsbHkgdGhlIGZpcnN0IHRpbWUgdGhlbiBhbGwgdGhlIHNjaGVtZXMgdXNlZCBt
dXN0IGhhdmUgYmVlbiBhbGxvd2VkLgorLy8gQW4gYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcyBv
ZiBhbiBlbXB0eSBIYXNoU2V0IGluZGljYXRlcyB0aGF0IG5vIGFjdGl2ZSBhY3Rpb25zIGFyZSBh
bGxvd2VkLgorV0VCQ09SRV9FWFBPUlQgRXhwZWN0ZWQ8VmVjdG9yPENvbnRlbnRFeHRlbnNpb25S
dWxlPiwgc3RkOjplcnJvcl9jb2RlPiBwYXJzZVJ1bGVMaXN0KGNvbnN0IFN0cmluZyYsIGNvbnN0
IHN0ZDo6b3B0aW9uYWw8SGFzaFNldDxTdHJpbmc+PiYgYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1l
cyk7CiBXRUJDT1JFX0VYUE9SVCBib29sIGlzVmFsaWRDU1NTZWxlY3Rvcihjb25zdCBTdHJpbmcm
KTsKIAogfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lv
bnNCYWNrZW5kLmNwcAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjI4LDEwICsyMjgsMTIgQEAgQ29udGVudFJ1bGVMaXN0UmVzdWx0cyBDb250ZW50RXh0ZW5z
aW9ucwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0sIFsmXShjb25zdCBJZ25vcmVQ
cmV2aW91c1J1bGVzQWN0aW9uJikgewogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9LCBbJl0gKGNvbnN0IE1vZGlmeUhlYWRlcnNBY3Rp
b24mKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudAotICAgICAgICAgICAg
fSwgWyZdIChjb25zdCBSZWRpcmVjdEFjdGlvbiYpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhN
RTogSW1wbGVtZW50CisgICAgICAgICAgICB9LCBbJl0gKGNvbnN0IE1vZGlmeUhlYWRlcnNBY3Rp
b24mIGFjdGlvbikgeworICAgICAgICAgICAgICAgIGlmIChpbml0aWF0aW5nRG9jdW1lbnRMb2Fk
ZXIuYWxsb3dzQWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc0ZvclVSTCh1cmwpKQorICAgICAg
ICAgICAgICAgICAgICByZXN1bHRzLnN1bW1hcnkubW9kaWZ5SGVhZGVyc0FjdGlvbnMuYXBwZW5k
KGFjdGlvbik7CisgICAgICAgICAgICB9LCBbJl0gKGNvbnN0IFJlZGlyZWN0QWN0aW9uJiBhY3Rp
b24pIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5pdGlhdGluZ0RvY3VtZW50TG9hZGVyLmFsbG93
c0FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNGb3JVUkwodXJsKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0cy5zdW1tYXJ5LnJlZGlyZWN0QWN0aW9ucy5hcHBlbmQoYWN0aW9uKTsKICAg
ICAgICAgICAgIH0pLCBhY3Rpb24uZGF0YSgpKTsKICAgICAgICAgfQogCkBAIC0yOTIsOSArMjk0
LDkgQEAgQ29udGVudFJ1bGVMaXN0UmVzdWx0cyBDb250ZW50RXh0ZW5zaW9ucwogICAgICAgICAg
ICAgfSwgWyZdKGNvbnN0IElnbm9yZVByZXZpb3VzUnVsZXNBY3Rpb24mKSB7CiAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIH0sIFsmXSAo
Y29uc3QgTW9kaWZ5SGVhZGVyc0FjdGlvbiYpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTog
SW1wbGVtZW50CisgICAgICAgICAgICAgICAgLy8gV2UgY3VycmVudGx5IGhhdmUgbm90IGltcGxl
bWVudGVkIGFjdGl2ZSBhY3Rpb25zIGZyb20gdGhlIG5ldHdvcmsgcHJvY2VzcyAoQ09SUyBwcmVm
bGlnaHQpLgogICAgICAgICAgICAgfSwgWyZdIChjb25zdCBSZWRpcmVjdEFjdGlvbiYpIHsKLSAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50CisgICAgICAgICAgICAgICAgLy8gV2Ug
Y3VycmVudGx5IGhhdmUgbm90IGltcGxlbWVudGVkIGFjdGl2ZSBhY3Rpb25zIGZyb20gdGhlIG5l
dHdvcmsgcHJvY2VzcyAoQ09SUyBwcmVmbGlnaHQpLgogICAgICAgICAgICAgfSksIGFjdGlvbi5k
YXRhKCkpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzI1LDYgKzMyNywxMiBAQCB2b2lkIGFwcGx5
UmVzdWx0c1RvUmVxdWVzdChDb250ZW50UnVsZUxpCiAgICAgICAgIHJlcXVlc3Quc2V0VVJMKG5l
d1VSTCk7CiAgICAgfQogCisgICAgZm9yIChhdXRvJiBhY3Rpb24gOiByZXN1bHRzLnN1bW1hcnku
bW9kaWZ5SGVhZGVyc0FjdGlvbnMpCisgICAgICAgIGFjdGlvbi5hcHBseVRvUmVxdWVzdChyZXF1
ZXN0KTsKKworICAgIGZvciAoYXV0byYgYWN0aW9uIDogcmVzdWx0cy5zdW1tYXJ5LnJlZGlyZWN0
QWN0aW9ucykKKyAgICAgICAgYWN0aW9uLmFwcGx5VG9SZXF1ZXN0KHJlcXVlc3QpOworCiAgICAg
aWYgKHBhZ2UgJiYgcmVzdWx0cy5zaG91bGROb3RpZnlBcHBsaWNhdGlvbigpKSB7CiAgICAgICAg
IHJlc3VsdHMucmVzdWx0cy5yZW1vdmVBbGxNYXRjaGluZyhbXShjb25zdCBhdXRvJiBwYWlyKSB7
CiAgICAgICAgICAgICByZXR1cm4gIXBhaXIuc2Vjb25kLnNob3VsZE5vdGlmeUFwcGxpY2F0aW9u
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50UnVsZUxp
c3RSZXN1bHRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29udGVudFJ1bGVMaXN0UmVzdWx0cy5oCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50UnVsZUxpc3RSZXN1bHRzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJD
b250ZW50RXh0ZW5zaW9uQWN0aW9ucy5oIgogI2luY2x1ZGUgPHd0Zi9LZXlWYWx1ZVBhaXIuaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CkBAIC01NCw2ICs1NSw4IEBAIHN0cnVjdCBDb250ZW50UnVsZUxpc3RSZXN1bHRzIHsKICAgICAg
ICAgYm9vbCBtYWRlSFRUUFMgeyBmYWxzZSB9OwogICAgICAgICBib29sIGJsb2NrZWRDb29raWVz
IHsgZmFsc2UgfTsKICAgICAgICAgYm9vbCBoYXNOb3RpZmljYXRpb25zIHsgZmFsc2UgfTsKKyAg
ICAgICAgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpNb2RpZnlIZWFkZXJzQWN0aW9uPiBtb2Rp
ZnlIZWFkZXJzQWN0aW9uczsKKyAgICAgICAgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpSZWRp
cmVjdEFjdGlvbj4gcmVkaXJlY3RBY3Rpb25zOwogCiAgICAgICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAgICAgICAgdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8U3VtbWFyeT4gZGVjb2RlKERlY29kZXIm
KTsKQEAgLTE2OCw2ICsxNzEsOCBAQCB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBhdXRvIENvbnRl
bnRSdWxlCiAgICAgICAgIFdURk1vdmUoKm1hZGVIVFRQUyksCiAgICAgICAgIFdURk1vdmUoKmJs
b2NrZWRDb29raWVzKSwKICAgICAgICAgV1RGTW92ZSgqaGFzTm90aWZpY2F0aW9ucyksCisgICAg
ICAgIHsgfSwgLy8gbW9kaWZ5SGVhZGVyc0FjdGlvbnMgYW5kIHJlZGlyZWN0QWN0aW9ucyBoYXZl
IG5vIG5lZWQgdG8gYmUgc2VyaWFsaXplZCB0byBhbm90aGVyIHByb2Nlc3MuCisgICAgICAgIHsg
fQogICAgIH19OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRl
bnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRl
bnRzLmNwcAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hl
ZXRDb250ZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRl
ICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ2FjaGVQb2xpY3kuaCIKICNpbmNsdWRlICJD
YWNoZWRDU1NTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiQ29udGVudFJ1bGVMaXN0UmVzdWx0cy5o
IgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJG
cmFtZUxvYWRlci5oIgpAQCAtNDQsNiArNDMsNyBAQAogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KIAog
I2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisjaW5jbHVkZSAiQ29udGVudFJ1bGVMaXN0
UmVzdWx0cy5oIgogI2luY2x1ZGUgIlVzZXJDb250ZW50Q29udHJvbGxlci5oIgogI2VuZGlmCiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkocmV2aXNpb24g
Mjg1OTU0KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTQsNiArOTQsNyBAQAogI2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVy
LmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgogI2luY2x1ZGUgIlVzZXJDb250
ZW50UHJvdmlkZXIuaCIKKyNpbmNsdWRlICJVc2VyQ29udGVudFVSTFBhdHRlcm4uaCIKICNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5o
PgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAtMTczLDcgKzE3NCwxMCBAQCBE
b2N1bWVudExvYWRlcjo6RG9jdW1lbnRMb2FkZXIoY29uc3QgUmVzCiAgICAgLCBtX29yaWdpbmFs
U3Vic3RpdHV0ZURhdGFXYXNWYWxpZChzdWJzdGl0dXRlRGF0YS5pc1ZhbGlkKCkpCiAgICAgLCBt
X3N1YnN0aXR1dGVSZXNvdXJjZURlbGl2ZXJ5VGltZXIoKnRoaXMsICZEb2N1bWVudExvYWRlcjo6
c3Vic3RpdHV0ZVJlc291cmNlRGVsaXZlcnlUaW1lckZpcmVkKQogICAgICwgbV9hcHBsaWNhdGlv
bkNhY2hlSG9zdChtYWtlVW5pcXVlPEFwcGxpY2F0aW9uQ2FjaGVIb3N0PigqdGhpcykpCisgICAg
LCBtX2FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvblBhdHRlcm5zKFZlY3RvcjxVc2VyQ29udGVu
dFVSTFBhdHRlcm4+KCkpCiB7CisgICAgLy8gRklYTUU6IFZlY3RvciBkZWZhdWx0IGNvbnN0cnVj
dG9yIHNob3VsZG4ndCBuZWVkIHRvIGtub3cgdGhlIHNpemUgb2YgdGhlIGVsZW1lbnRzLAorICAg
IC8vIHNvIG1fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uUGF0dGVybnMgb3VnaHQgdG8gYmUg
YWJsZSB0byBiZSBpbml0aWFsaXplZCB3aXRoIGFuIGluaXRpYWxpemVyIGxpc3QgaW4gdGhlIGhl
YWRlciB3aXRob3V0IGluY2x1ZGluZyBVc2VyQ29udGVudFVSTFBhdHRlcm4uaC4KIH0KIAogRnJh
bWVMb2FkZXIqIERvY3VtZW50TG9hZGVyOjpmcmFtZUxvYWRlcigpIGNvbnN0CkBAIC0yNDMzLDYg
KzI0MzcsMzQgQEAgUmVzb3VyY2VFcnJvciBEb2N1bWVudExvYWRlcjo6Y29udGVudEZpbAogfQog
I2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0ZJTFRFUklORykKIAordm9pZCBEb2N1bWVudExvYWRl
cjo6c2V0QWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5zKGNvbnN0IHN0ZDo6b3B0
aW9uYWw8SGFzaFNldDxTdHJpbmc+PiYgcGF0dGVybnMpCit7CisgICAgaWYgKCFwYXR0ZXJucykg
eworICAgICAgICBtX2FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvblBhdHRlcm5zID0gc3RkOjpu
dWxsb3B0OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFZlY3RvcjxXZWJDb3JlOjpVc2Vy
Q29udGVudFVSTFBhdHRlcm4+IHBhdHRlcm5WZWN0b3I7CisgICAgcGF0dGVyblZlY3Rvci5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KHBhdHRlcm5zLT5zaXplKCkpOworICAgIGZvciAoYXV0byYgcGF0
dGVyblN0cmluZyA6ICpwYXR0ZXJucykgeworICAgICAgICBXZWJDb3JlOjpVc2VyQ29udGVudFVS
TFBhdHRlcm4gcGFyc2VkUGF0dGVybihwYXR0ZXJuU3RyaW5nKTsKKyAgICAgICAgaWYgKHBhcnNl
ZFBhdHRlcm4uaXNWYWxpZCgpKQorICAgICAgICAgICAgcGF0dGVyblZlY3Rvci51bmNoZWNrZWRB
cHBlbmQoV1RGTW92ZShwYXJzZWRQYXR0ZXJuKSk7CisgICAgfQorCisgICAgbV9hY3RpdmVDb250
ZW50UnVsZUxpc3RBY3Rpb25QYXR0ZXJucyA9IFdURk1vdmUocGF0dGVyblZlY3Rvcik7Cit9CisK
K2Jvb2wgRG9jdW1lbnRMb2FkZXI6OmFsbG93c0FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNG
b3JVUkwoY29uc3QgVVJMJiB1cmwpIGNvbnN0Cit7CisgICAgaWYgKCFtX2FjdGl2ZUNvbnRlbnRS
dWxlTGlzdEFjdGlvblBhdHRlcm5zKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIHBhdHRlcm4gOiAqbV9hY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25QYXR0ZXJu
cykgeworICAgICAgICBpZiAocGF0dGVybi5tYXRjaGVzKHVybCkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICN1bmRlZiBQQUdFX0lECkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9j
dW1lbnRMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1l
bnRMb2FkZXIuaAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0Rv
Y3VtZW50TG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgY2xhc3MgU2hh
cmVkQnVmZmVyOwogY2xhc3MgU1dDbGllbnRDb25uZWN0aW9uOwogY2xhc3MgU3VicmVzb3VyY2VM
b2FkZXI7CiBjbGFzcyBTdWJzdGl0dXRlUmVzb3VyY2U7CitjbGFzcyBVc2VyQ29udGVudFVSTFBh
dHRlcm47CiAKIGVudW0gY2xhc3MgU2hvdWxkQ29udGludWU7CiAKQEAgLTMwMSw2ICszMDIsOSBA
QCBwdWJsaWM6CiAgICAgYm9vbCB1c2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkKCkgY29uc3Qg
eyByZXR1cm4gbV91c2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkOyB9CiAgICAgdm9pZCBzZXRV
c2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX3VzZXJDb250ZW50
RXh0ZW5zaW9uc0VuYWJsZWQgPSBlbmFibGVkOyB9CiAKKyAgICBib29sIGFsbG93c0FjdGl2ZUNv
bnRlbnRSdWxlTGlzdEFjdGlvbnNGb3JVUkwoY29uc3QgVVJMJikgY29uc3Q7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRBY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMoY29u
c3Qgc3RkOjpvcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+Jik7CisKICNpZiBFTkFCTEUoREVWSUNF
X09SSUVOVEFUSU9OKQogICAgIERldmljZU9yaWVudGF0aW9uT3JNb3Rpb25QZXJtaXNzaW9uU3Rh
dGUgZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NTdGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NTdGF0ZTsgfQogICAgIHZvaWQgc2V0
RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NTdGF0ZShEZXZpY2VPcmllbnRhdGlvbk9y
TW90aW9uUGVybWlzc2lvblN0YXRlIHN0YXRlKSB7IG1fZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rp
b25BY2Nlc3NTdGF0ZSA9IHN0YXRlOyB9CkBAIC02NTEsNiArNjU1LDcgQEAgcHJpdmF0ZToKICAg
ICBib29sIG1faWRlbXBvdGVudE1vZGVBdXRvc2l6aW5nT25seUhvbm9yc1BlcmNlbnRhZ2VzIHsg
ZmFsc2UgfTsKICAgICBTdHJpbmcgbV9jdXN0b21OYXZpZ2F0b3JQbGF0Zm9ybTsKICAgICBib29s
IG1fdXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZCB7IHRydWUgfTsKKyAgICBzdGQ6Om9wdGlv
bmFsPFZlY3RvcjxVc2VyQ29udGVudFVSTFBhdHRlcm4+PiBtX2FjdGl2ZUNvbnRlbnRSdWxlTGlz
dEFjdGlvblBhdHRlcm5zOwogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCiAgICAgRGV2
aWNlT3JpZW50YXRpb25Pck1vdGlvblBlcm1pc3Npb25TdGF0ZSBtX2RldmljZU9yaWVudGF0aW9u
QW5kTW90aW9uQWNjZXNzU3RhdGUgeyBEZXZpY2VPcmllbnRhdGlvbk9yTW90aW9uUGVybWlzc2lv
blN0YXRlOjpQcm9tcHQgfTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCShyZXZpc2lvbiAy
ODU5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVz
dEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDEsNiArNjAxLDE1IEBAIHZvaWQgUmVzb3Vy
Y2VSZXF1ZXN0QmFzZTo6c2V0SFRUUEhlYWRlckYKICAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0
ZWQgPSBmYWxzZTsKIH0KIAordm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpyZW1vdmVIVFRQSGVh
ZGVyRmllbGQoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIHVwZGF0ZVJlc291cmNlUmVxdWVz
dCgpOworCisgICAgbV9odHRwSGVhZGVyRmllbGRzLnJlbW92ZShuYW1lKTsKKworICAgIG1fcGxh
dGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOworfQorCiAjaWYgVVNFKFNZU1RFTV9QUkVWSUVX
KQogCiBib29sIFJlc291cmNlUmVxdWVzdEJhc2U6OmlzU3lzdGVtUHJldmlldygpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
UmVxdWVzdEJhc2UuaAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw2
ICsxMDUsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRIVFRQSGVhZGVy
RmllbGQoSFRUUEhlYWRlck5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgYWRkSFRUUEhlYWRlckZpZWxkKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRIVFRQSGVhZGVyRmll
bGRJZk5vdFByZXNlbnQoSFRUUEhlYWRlck5hbWUsIGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQg
cmVtb3ZlSFRUUEhlYWRlckZpZWxkKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKICAgICBXRUJDT1JF
X0VYUE9SVCBib29sIGhhc0hUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZSkgY29uc3Q7CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDIxLTExLTE3ICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IG1v
c3Qgb2YgcmVkaXJlY3QgYW5kIG1vZGlmeS1oZWFkZXJzIGFjdGlvbiB0eXBlcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzMjY4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZVBv
bGljaWVzRGF0YS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVQb2xpY2llc0RhdGE6OmVu
Y29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVQb2xpY2llc0RhdGE6OmRlY29k
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVQb2xpY2llc0RhdGE6OmFwcGx5VG9Eb2N1bWVu
dExvYWRlcik6CisgICAgICAgICogU2hhcmVkL1dlYnNpdGVQb2xpY2llc0RhdGEuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNwcDoKKyAgICAgICAg
KEFQSTo6Q29udGVudFJ1bGVMaXN0U3RvcmU6Omxvb2t1cENvbnRlbnRSdWxlTGlzdCk6CisgICAg
ICAgIChBUEk6OkNvbnRlbnRSdWxlTGlzdFN0b3JlOjpjb21waWxlQ29udGVudFJ1bGVMaXN0KToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9BUElXZWJzaXRlUG9saWNpZXMuY3BwOgorICAgICAgICAoQVBJ
OjpXZWJzaXRlUG9saWNpZXM6OmNvcHkgY29uc3QpOgorICAgICAgICAoQVBJOjpXZWJzaXRlUG9s
aWNpZXM6OmRhdGEpOgorICAgICAgICAoQVBJOjpXZWJzaXRlUG9saWNpZXM6On5XZWJzaXRlUG9s
aWNpZXMpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJV2Vic2l0ZVBvbGlj
aWVzLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZVJlZi5jcHA6CisgICAgICAgIChXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVDb21waWxl
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudFJ1bGVMaXN0U3RvcmUu
bW06CisgICAgICAgICgtW1dLQ29udGVudFJ1bGVMaXN0U3RvcmUgY29tcGlsZUNvbnRlbnRSdWxl
TGlzdEZvcklkZW50aWZpZXI6ZW5jb2RlZENvbnRlbnRSdWxlTGlzdDpjb21wbGV0aW9uSGFuZGxl
cjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50UnVsZUxpc3RTdG9yZSBfY29tcGlsZUNvbnRlbnRS
dWxlTGlzdEZvcklkZW50aWZpZXI6ZW5jb2RlZENvbnRlbnRSdWxlTGlzdDphbGxvd2VkUmVkaXJl
Y3RTY2hlbWVzOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRSdWxl
TGlzdFN0b3JlIF9jb21waWxlQ29udGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmllcjplbmNvZGVkQ29u
dGVudFJ1bGVMaXN0OmNvbXBsZXRpb25IYW5kbGVyOl0pOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3RTdG9yZVByaXZhdGUuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2VicGFnZVByZWZlcmVuY2VzLm1tOgorICAgICAg
ICAoLVtXS1dlYnBhZ2VQcmVmZXJlbmNlcyBfc2V0QWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9u
c1BhdHRlcm5zOl0pOgorICAgICAgICAoLVtXS1dlYnBhZ2VQcmVmZXJlbmNlcyBfYWN0aXZlQ29u
dGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5zXSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYnBhZ2VQcmVmZXJlbmNlc1ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW06CisgICAgICAgICgtW19X
S1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVu
dGlmaWVyOmVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJTdHJhdGVneS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYkxvYWRlclN0cmF0ZWd5OjpyZW1vdmUpOgorICAgICAgICBGaXggYSByZWdy
ZXNzaW9uIGZyb20gaHR0cHM6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzI3NjE5My93ZWJr
aXQKKyAgICAgICAgV2hlbiBmZXRjaGluZyBhIHJlc291cmNlIHdpdGggYSBmb3JiaWRkZW4gcG9y
dCBhbmQgYSBjdXN0b20gc2NoZW1lIGFuZCB7bW9kZToibm8tY29ycyJ9LAorICAgICAgICBXZWJM
b2FkZXJTdHJhdGVneTo6cmVtb3ZlIGlzIGNhbGxlZCB3aXRoIGEgcmVzb3VyY2UgdGhhdCBkb2Vz
bid0IGhhdmUgYW4gaWRlbnRpZmllci4KKyAgICAgICAgTXkgdGVzdCBoaXQgdGhpcywgc28gSSBt
b3ZlZCB0aGUgY2hlY2sgdG8gYmVmb3JlIHRoZSBpZGVudGlmaWVyIGlzIHVzZWQuCisKIDIwMjEt
MTEtMTcgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAg
TW9tZW50dW0gYW5pbWF0b3Igc29tZXRpbWVzIHN0YXJ0cyB0aGUgYW5pbWF0aW9uIGF0IGEgdmVy
eSBoaWdoIHZlbG9jaXR5CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlUG9saWNp
ZXNEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlUG9s
aWNpZXNEYXRhLmNwcAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQv
V2Vic2l0ZVBvbGljaWVzRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiB2b2lkIFdlYnNpdGVQb2xpY2llc0RhdGE6OmVuY29kZShJUEM6
OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBjb250ZW50QmxvY2tl
cnNFbmFibGVkOworICAgIGVuY29kZXIgPDwgYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc1Bh
dHRlcm5zOwogICAgIGVuY29kZXIgPDwgYXV0b3BsYXlQb2xpY3k7CiAjaWYgRU5BQkxFKERFVklD
RV9PUklFTlRBVElPTikKICAgICBlbmNvZGVyIDw8IGRldmljZU9yaWVudGF0aW9uQW5kTW90aW9u
QWNjZXNzU3RhdGU7CkBAIC02Miw3ICs2MywxMiBAQCBzdGQ6Om9wdGlvbmFsPFdlYnNpdGVQb2xp
Y2llc0RhdGE+IFdlYnNpCiAgICAgZGVjb2RlciA+PiBjb250ZW50QmxvY2tlcnNFbmFibGVkOwog
ICAgIGlmICghY29udGVudEJsb2NrZXJzRW5hYmxlZCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLSAgICAKKworICAgIHN0ZDo6b3B0aW9uYWw8c3RkOjpvcHRpb25hbDxIYXNoU2V0PFN0
cmluZz4+PiBhY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnM7CisgICAgZGVjb2Rl
ciA+PiBhY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnM7CisgICAgaWYgKCFhY3Rp
dmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKICAgICBzdGQ6Om9wdGlvbmFsPFdlYnNpdGVBdXRvcGxheVBvbGljeT4gYXV0b3Bs
YXlQb2xpY3k7CiAgICAgZGVjb2RlciA+PiBhdXRvcGxheVBvbGljeTsKICAgICBpZiAoIWF1dG9w
bGF5UG9saWN5KQpAQCAtMTQ3LDYgKzE1Myw3IEBAIHN0ZDo6b3B0aW9uYWw8V2Vic2l0ZVBvbGlj
aWVzRGF0YT4gV2Vic2kKIAogICAgIHJldHVybiB7IHsKICAgICAgICAgV1RGTW92ZSgqY29udGVu
dEJsb2NrZXJzRW5hYmxlZCksCisgICAgICAgIFdURk1vdmUoKmFjdGl2ZUNvbnRlbnRSdWxlTGlz
dEFjdGlvbnNQYXR0ZXJucyksCiAgICAgICAgIFdURk1vdmUoKmFsbG93ZWRBdXRvcGxheVF1aXJr
cyksCiAgICAgICAgIFdURk1vdmUoKmF1dG9wbGF5UG9saWN5KSwKICNpZiBFTkFCTEUoREVWSUNF
X09SSUVOVEFUSU9OKQpAQCAtMTgzLDYgKzE5MCw4IEBAIHZvaWQgV2Vic2l0ZVBvbGljaWVzRGF0
YTo6YXBwbHlUb0RvY3VtZW4KICAgICBpZiAoZG9jdW1lbnRMb2FkZXIudXNlckNvbnRlbnRFeHRl
bnNpb25zRW5hYmxlZCgpKQogICAgICAgICBkb2N1bWVudExvYWRlci5zZXRVc2VyQ29udGVudEV4
dGVuc2lvbnNFbmFibGVkKHdlYnNpdGVQb2xpY2llcy5jb250ZW50QmxvY2tlcnNFbmFibGVkKTsK
IAorICAgIGRvY3VtZW50TG9hZGVyLnNldEFjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNQYXR0
ZXJucyh3ZWJzaXRlUG9saWNpZXMuYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5z
KTsKKwogICAgIE9wdGlvblNldDxXZWJDb3JlOjpBdXRvcGxheVF1aXJrPiBxdWlya3M7CiAgICAg
Y29uc3QgYXV0byYgYWxsb3dlZFF1aXJrcyA9IHdlYnNpdGVQb2xpY2llcy5hbGxvd2VkQXV0b3Bs
YXlRdWlya3M7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlUG9saWNp
ZXNEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZVBvbGlj
aWVzRGF0YS5oCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJz
aXRlUG9saWNpZXNEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDcgQEAgc3RydWN0
IFdlYnNpdGVQb2xpY2llc0RhdGEgewogICAgIHN0YXRpYyB2b2lkIGFwcGx5VG9Eb2N1bWVudExv
YWRlcihXZWJzaXRlUG9saWNpZXNEYXRhJiYsIFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyJik7CiAK
ICAgICBib29sIGNvbnRlbnRCbG9ja2Vyc0VuYWJsZWQgeyB0cnVlIH07CisgICAgc3RkOjpvcHRp
b25hbDxIYXNoU2V0PFN0cmluZz4+IGFjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNQYXR0ZXJu
cyB7IEhhc2hTZXQ8U3RyaW5nPigpIH07CiAgICAgT3B0aW9uU2V0PFdlYnNpdGVBdXRvcGxheVF1
aXJrPiBhbGxvd2VkQXV0b3BsYXlRdWlya3M7CiAgICAgV2Vic2l0ZUF1dG9wbGF5UG9saWN5IGF1
dG9wbGF5UG9saWN5IHsgV2Vic2l0ZUF1dG9wbGF5UG9saWN5OjpEZWZhdWx0IH07CiAjaWYgRU5B
QkxFKERFVklDRV9PUklFTlRBVElPTikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNwcAkocmV2aXNpb24gMjg1
OTU0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0
b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDkxLDcgKzQ5MSw3IEBAIHZvaWQgQ29udGVudFJ1
bGVMaXN0U3RvcmU6Omxvb2t1cENvbnRlbnQKICAgICAgICAgaWYgKGNvbnRlbnRSdWxlTGlzdC0+
bWV0YURhdGEudmVyc2lvbiAhPSBDb250ZW50UnVsZUxpc3RTdG9yZTo6Q3VycmVudENvbnRlbnRS
dWxlTGlzdEZpbGVWZXJzaW9uKSB7CiAgICAgICAgICAgICBpZiAoYXV0byBzb3VyY2VGcm9tT2xk
VmVyc2lvbiA9IGdldENvbnRlbnRSdWxlTGlzdFNvdXJjZUZyb21NYXBwZWRGaWxlKCpjb250ZW50
UnVsZUxpc3QpOyAhc291cmNlRnJvbU9sZFZlcnNpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShw
cm90ZWN0ZWRUaGlzKSwgc291cmNlRnJvbU9sZFZlcnNpb24gPSBzb3VyY2VGcm9tT2xkVmVyc2lv
bi5pc29sYXRlZENvcHkoKSwgaWRlbnRpZmllciA9IGlkZW50aWZpZXIuaXNvbGF0ZWRDb3B5KCks
IGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFi
bGUgewotICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5jb21waWxlQ29udGVudFJ1
bGVMaXN0KGlkZW50aWZpZXIsIFdURk1vdmUoc291cmNlRnJvbU9sZFZlcnNpb24pLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMt
PmNvbXBpbGVDb250ZW50UnVsZUxpc3QoaWRlbnRpZmllciwgV1RGTW92ZShzb3VyY2VGcm9tT2xk
VmVyc2lvbiksIHN0ZDo6bnVsbG9wdCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
QEAgLTUzMCwxMyArNTMwLDEzIEBAIHZvaWQgQ29udGVudFJ1bGVMaXN0U3RvcmU6OmdldEF2YWls
YWJsZUMKICAgICB9KTsKIH0KIAotdm9pZCBDb250ZW50UnVsZUxpc3RTdG9yZTo6Y29tcGlsZUNv
bnRlbnRSdWxlTGlzdChjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgV1RGOjpTdHJpbmcm
JiBqc29uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxBUEk6OkNvbnRlbnRSdWxlTGlz
dD4sIHN0ZDo6ZXJyb3JfY29kZSk+IGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBDb250ZW50UnVs
ZUxpc3RTdG9yZTo6Y29tcGlsZUNvbnRlbnRSdWxlTGlzdChjb25zdCBXVEY6OlN0cmluZyYgaWRl
bnRpZmllciwgV1RGOjpTdHJpbmcmJiBqc29uLCBzdGQ6Om9wdGlvbmFsPEhhc2hTZXQ8V1RGOjpT
dHJpbmc+PiYmIGFsbG93ZWRSZWRpcmVjdFNjaGVtZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
UmVmUHRyPEFQSTo6Q29udGVudFJ1bGVMaXN0Piwgc3RkOjplcnJvcl9jb2RlKT4gY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBBdG9tU3Ry
aW5nOjppbml0KCk7CiAgICAgV2ViQ29yZTo6UXVhbGlmaWVkTmFtZTo6aW5pdCgpOwogICAgIAot
ICAgIGF1dG8gcGFyc2VkUnVsZXMgPSBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6cGFyc2VS
dWxlTGlzdChqc29uLCB7IH0pOworICAgIGF1dG8gcGFyc2VkUnVsZXMgPSBXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6cGFyc2VSdWxlTGlzdChqc29uLCBXVEZNb3ZlKGFsbG93ZWRSZWRpcmVj
dFNjaGVtZXMpKTsKICAgICBpZiAoIXBhcnNlZFJ1bGVzLmhhc192YWx1ZSgpKQogICAgICAgICBy
ZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0ciwgcGFyc2VkUnVsZXMuZXJyb3IoKSk7CiAg
ICAgCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0
U3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29u
dGVudFJ1bGVMaXN0U3RvcmUuaAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY3LDcgKzY3LDcgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IENvbnRlbnRSdWxlTGlzdFN0b3Jl
KGNvbnN0IFdURjo6U3RyaW5nJiBzdG9yZVBhdGgpOwogICAgIHZpcnR1YWwgfkNvbnRlbnRSdWxl
TGlzdFN0b3JlKCk7CiAKLSAgICB2b2lkIGNvbXBpbGVDb250ZW50UnVsZUxpc3QoY29uc3QgV1RG
OjpTdHJpbmcmIGlkZW50aWZpZXIsIFdURjo6U3RyaW5nJiYganNvbiwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChSZWZQdHI8QVBJOjpDb250ZW50UnVsZUxpc3Q+LCBzdGQ6OmVycm9yX2NvZGUpPik7
CisgICAgdm9pZCBjb21waWxlQ29udGVudFJ1bGVMaXN0KGNvbnN0IFdURjo6U3RyaW5nJiBpZGVu
dGlmaWVyLCBXVEY6OlN0cmluZyYmIGpzb24sIHN0ZDo6b3B0aW9uYWw8SGFzaFNldDxXVEY6OlN0
cmluZz4+JiYgYWxsb3dlZFJlZGlyZWN0U2NoZW1lcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChS
ZWZQdHI8QVBJOjpDb250ZW50UnVsZUxpc3Q+LCBzdGQ6OmVycm9yX2NvZGUpPik7CiAgICAgdm9p
ZCBsb29rdXBDb250ZW50UnVsZUxpc3QoY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmUHRyPEFQSTo6Q29udGVudFJ1bGVMaXN0Piwgc3RkOjpl
cnJvcl9jb2RlKT4pOwogICAgIHZvaWQgcmVtb3ZlQ29udGVudFJ1bGVMaXN0KGNvbnN0IFdURjo6
U3RyaW5nJiBpZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6ZXJyb3JfY29k
ZSk+KTsKICAgICB2b2lkIGdldEF2YWlsYWJsZUNvbnRlbnRSdWxlTGlzdElkZW50aWZpZXJzKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+KT4pOwpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVQb2xpY2llcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVQb2xpY2llcy5j
cHAJKHJldmlzaW9uIDI4NTk1NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElX
ZWJzaXRlUG9saWNpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBAIFJlZjxX
ZWJzaXRlUG9saWNpZXM+IFdlYnNpdGVQb2xpY2llczo6Y28KIHsKICAgICBhdXRvIHBvbGljaWVz
ID0gV2Vic2l0ZVBvbGljaWVzOjpjcmVhdGUoKTsKICAgICBwb2xpY2llcy0+c2V0Q29udGVudEJs
b2NrZXJzRW5hYmxlZChtX2NvbnRlbnRCbG9ja2Vyc0VuYWJsZWQpOworICAgIHBvbGljaWVzLT5t
X2FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNQYXR0ZXJucyA9IG1fYWN0aXZlQ29udGVudFJ1
bGVMaXN0QWN0aW9uc1BhdHRlcm5zOwogICAgIHBvbGljaWVzLT5zZXRBbGxvd2VkQXV0b3BsYXlR
dWlya3MobV9hbGxvd2VkQXV0b3BsYXlRdWlya3MpOwogICAgIHBvbGljaWVzLT5zZXRBdXRvcGxh
eVBvbGljeShtX2F1dG9wbGF5UG9saWN5KTsKICNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9O
KQpAQCAtNzgsOSArNzksNyBAQCBSZWY8V2Vic2l0ZVBvbGljaWVzPiBXZWJzaXRlUG9saWNpZXM6
OmNvCiAgICAgcmV0dXJuIHBvbGljaWVzOwogfQogCi1XZWJzaXRlUG9saWNpZXM6On5XZWJzaXRl
UG9saWNpZXMoKQotewotfQorV2Vic2l0ZVBvbGljaWVzOjp+V2Vic2l0ZVBvbGljaWVzKCkgPSBk
ZWZhdWx0OwogCiB2b2lkIFdlYnNpdGVQb2xpY2llczo6c2V0V2Vic2l0ZURhdGFTdG9yZShSZWZQ
dHI8V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlPiYmIHdlYnNpdGVEYXRhU3RvcmUpCiB7CkBAIC0x
MDQsNiArMTAzLDcgQEAgV2ViS2l0OjpXZWJzaXRlUG9saWNpZXNEYXRhIFdlYnNpdGVQb2xpYwog
CiAgICAgcmV0dXJuIHsKICAgICAgICAgY29udGVudEJsb2NrZXJzRW5hYmxlZCgpLAorICAgICAg
ICBhY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMoKSwKICAgICAgICAgYWxsb3dl
ZEF1dG9wbGF5UXVpcmtzKCksCiAgICAgICAgIGF1dG9wbGF5UG9saWN5KCksCiAjaWYgRU5BQkxF
KERFVklDRV9PUklFTlRBVElPTikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9B
UElXZWJzaXRlUG9saWNpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQVBJV2Vic2l0ZVBvbGljaWVzLmgJKHJldmlzaW9uIDI4NTk1NCkKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJzaXRlUG9saWNpZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtNjMsNiArNjMsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBjb250ZW50QmxvY2tlcnNFbmFibGVk
KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50QmxvY2tlcnNFbmFibGVkOyB9CiAgICAgdm9pZCBz
ZXRDb250ZW50QmxvY2tlcnNFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2NvbnRlbnRCbG9ja2Vy
c0VuYWJsZWQgPSBlbmFibGVkOyB9CiAgICAgCisgICAgdm9pZCBzZXRBY3RpdmVDb250ZW50UnVs
ZUxpc3RBY3Rpb25zUGF0dGVybnMoc3RkOjpvcHRpb25hbDxIYXNoU2V0PFdURjo6U3RyaW5nPj4m
JiBwYXR0ZXJucykgeyBtX2FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNQYXR0ZXJucyA9IFdU
Rk1vdmUocGF0dGVybnMpOyB9CisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxIYXNoU2V0PFdURjo6
U3RyaW5nPj4mIGFjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNQYXR0ZXJucygpIGNvbnN0IHsg
cmV0dXJuIG1fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5zOyB9CisgICAgCiAg
ICAgT3B0aW9uU2V0PFdlYktpdDo6V2Vic2l0ZUF1dG9wbGF5UXVpcms+IGFsbG93ZWRBdXRvcGxh
eVF1aXJrcygpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dlZEF1dG9wbGF5UXVpcmtzOyB9CiAgICAg
dm9pZCBzZXRBbGxvd2VkQXV0b3BsYXlRdWlya3MoT3B0aW9uU2V0PFdlYktpdDo6V2Vic2l0ZUF1
dG9wbGF5UXVpcms+IHF1aXJrcykgeyBtX2FsbG93ZWRBdXRvcGxheVF1aXJrcyA9IHF1aXJrczsg
fQogICAgIApAQCAtMTM1LDcgKzEzOCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElkZW1wb3Rl
bnRNb2RlQXV0b3NpemluZ09ubHlIb25vcnNQZXJjZW50YWdlcyhib29sIGlkZW1wb3RlbnRNb2Rl
QXV0b3NpemluZ09ubHlIb25vcnNQZXJjZW50YWdlcykgeyBtX2lkZW1wb3RlbnRNb2RlQXV0b3Np
emluZ09ubHlIb25vcnNQZXJjZW50YWdlcyA9IGlkZW1wb3RlbnRNb2RlQXV0b3NpemluZ09ubHlI
b25vcnNQZXJjZW50YWdlczsgfQogCiBwcml2YXRlOgorICAgIC8vIEZJWE1FOiByZXBsYWNlIG1v
c3Qgb3IgYWxsIG9mIHRoZXNlIG1lbWJlcnMgd2l0aCBhIFdlYnNpdGVQb2xpY2llc0RhdGEuCiAg
ICAgYm9vbCBtX2NvbnRlbnRCbG9ja2Vyc0VuYWJsZWQgeyB0cnVlIH07CisgICAgc3RkOjpvcHRp
b25hbDxIYXNoU2V0PFdURjo6U3RyaW5nPj4gbV9hY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25z
UGF0dGVybnMgeyBIYXNoU2V0PFdURjo6U3RyaW5nPigpIH07CiAgICAgT3B0aW9uU2V0PFdlYktp
dDo6V2Vic2l0ZUF1dG9wbGF5UXVpcms+IG1fYWxsb3dlZEF1dG9wbGF5UXVpcmtzOwogICAgIFdl
YktpdDo6V2Vic2l0ZUF1dG9wbGF5UG9saWN5IG1fYXV0b3BsYXlQb2xpY3kgeyBXZWJLaXQ6Oldl
YnNpdGVBdXRvcGxheVBvbGljeTo6RGVmYXVsdCB9OwogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5U
QVRJT04pCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmVSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9DL1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlZi5jcHAJKHJldmlzaW9uIDI4
NTk1NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZVJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgc3RhdGlj
IGlubGluZSBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rvcgogdm9pZCBXS1VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmVDb21waWxlKFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlZiBzdG9yZSwg
V0tTdHJpbmdSZWYgaWRlbnRpZmllciwgV0tTdHJpbmdSZWYganNvblNvdXJjZSwgdm9pZCogY29u
dGV4dCwgV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRnVuY3Rpb24gY2FsbGJhY2spCiB7CiAj
aWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAgICB0b0ltcGwoc3RvcmUpLT5jb21waWxl
Q29udGVudFJ1bGVMaXN0KHRvV1RGU3RyaW5nKGlkZW50aWZpZXIpLCB0b1dURlN0cmluZyhqc29u
U291cmNlKSwgW2NvbnRleHQsIGNhbGxiYWNrXShSZWZQdHI8QVBJOjpDb250ZW50UnVsZUxpc3Q+
IGNvbnRlbnRSdWxlTGlzdCwgc3RkOjplcnJvcl9jb2RlIGVycm9yKSB7CisgICAgdG9JbXBsKHN0
b3JlKS0+Y29tcGlsZUNvbnRlbnRSdWxlTGlzdCh0b1dURlN0cmluZyhpZGVudGlmaWVyKSwgdG9X
VEZTdHJpbmcoanNvblNvdXJjZSksIHsgSGFzaFNldDxTdHJpbmc+KCkgfSwgW2NvbnRleHQsIGNh
bGxiYWNrXShSZWZQdHI8QVBJOjpDb250ZW50UnVsZUxpc3Q+IGNvbnRlbnRSdWxlTGlzdCwgc3Rk
OjplcnJvcl9jb2RlIGVycm9yKSB7CiAgICAgICAgIGNhbGxiYWNrKGVycm9yID8gbnVsbHB0ciA6
IHRvQVBJKGNvbnRlbnRSdWxlTGlzdC5sZWFrUmVmKCkpLCB0b1Jlc3VsdChlcnJvciksIGNvbnRl
eHQpOwogICAgIH0pOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlLm1tCShyZXZpc2lv
biAyODU5NTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50
UnVsZUxpc3RTdG9yZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCArIChpbnN0
YW5jZXR5cGUpc3RvcmVXaXRoVVJMOihOU1VSTCAqKXVyCiAKIC0gKHZvaWQpY29tcGlsZUNvbnRl
bnRSdWxlTGlzdEZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBlbmNvZGVkQ29u
dGVudFJ1bGVMaXN0OihOU1N0cmluZyAqKWVuY29kZWRDb250ZW50UnVsZUxpc3QgY29tcGxldGlv
bkhhbmRsZXI6KHZvaWQgKF4pKFdLQ29udGVudFJ1bGVMaXN0ICosIE5TRXJyb3IgKikpY29tcGxl
dGlvbkhhbmRsZXIKIHsKLSAgICBbc2VsZiBfY29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50
aWZpZXI6aWRlbnRpZmllciBlbmNvZGVkQ29udGVudFJ1bGVMaXN0OmVuY29kZWRDb250ZW50UnVs
ZUxpc3QgY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOworICAgIFtzZWxmIF9j
b21waWxlQ29udGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmllcjppZGVudGlmaWVyIGVuY29kZWRDb250
ZW50UnVsZUxpc3Q6ZW5jb2RlZENvbnRlbnRSdWxlTGlzdCBhbGxvd2VkUmVkaXJlY3RTY2hlbWVz
Om5pbCBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07CiB9CiAKIC0gKHZvaWQp
bG9va1VwQ29udGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVy
IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShXS0NvbnRlbnRSdWxlTGlzdCAqLCBOU0Vycm9y
ICopKWNvbXBsZXRpb25IYW5kbGVyCkBAIC0xNDksOSArMTQ5LDEyIEBAIC0gKHZvaWQpX2dldENv
bnRlbnRSdWxlTGlzdFNvdXJjZUZvcklkZW4KICAgICB9KTsKIH0KIAotLSAodm9pZClfY29tcGls
ZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBlbmNv
ZGVkQ29udGVudFJ1bGVMaXN0OihOU1N0cmluZyAqKSBlbmNvZGVkQ29udGVudFJ1bGVMaXN0IGNv
bXBsZXRpb25IYW5kbGVyOih2b2lkICheKShXS0NvbnRlbnRSdWxlTGlzdCAqLCBOU0Vycm9yICop
KWNvbXBsZXRpb25IYW5kbGVyCistICh2b2lkKV9jb21waWxlQ29udGVudFJ1bGVMaXN0Rm9ySWRl
bnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGVuY29kZWRDb250ZW50UnVsZUxpc3Q6KE5T
U3RyaW5nICopZW5jb2RlZENvbnRlbnRSdWxlTGlzdCBhbGxvd2VkUmVkaXJlY3RTY2hlbWVzOihO
U1NldDxOU1N0cmluZyAqPiAqKXNjaGVtZXMgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFdL
Q29udGVudFJ1bGVMaXN0ICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBf
Y29udGVudFJ1bGVMaXN0U3RvcmUtPmNvbXBpbGVDb250ZW50UnVsZUxpc3QoaWRlbnRpZmllciwg
ZW5jb2RlZENvbnRlbnRSdWxlTGlzdCwgW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRy
KGNvbXBsZXRpb25IYW5kbGVyKV0oUmVmUHRyPEFQSTo6Q29udGVudFJ1bGVMaXN0PiBjb250ZW50
UnVsZUxpc3QsIHN0ZDo6ZXJyb3JfY29kZSBlcnJvcikgeworICAgIEhhc2hTZXQ8U3RyaW5nPiBh
bGxvd2VkUmVkaXJlY3RTY2hlbWVzOworICAgIGZvciAoTlNTdHJpbmcgKnNjaGVtZSBpbiBzY2hl
bWVzKQorICAgICAgICBhbGxvd2VkUmVkaXJlY3RTY2hlbWVzLmFkZChzY2hlbWUpOworICAgIF9j
b250ZW50UnVsZUxpc3RTdG9yZS0+Y29tcGlsZUNvbnRlbnRSdWxlTGlzdChpZGVudGlmaWVyLCBl
bmNvZGVkQ29udGVudFJ1bGVMaXN0LCBXVEZNb3ZlKGFsbG93ZWRSZWRpcmVjdFNjaGVtZXMpLCBb
Y29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXShSZWZQ
dHI8QVBJOjpDb250ZW50UnVsZUxpc3Q+IGNvbnRlbnRSdWxlTGlzdCwgc3RkOjplcnJvcl9jb2Rl
IGVycm9yKSB7CiAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgYXV0byB1c2VySW5m
byA9IEB7TlNIZWxwQW5jaG9yRXJyb3JLZXk6IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAi
UnVsZSBsaXN0IGNvbXBpbGF0aW9uIGZhaWxlZDogJXMiLCBlcnJvci5tZXNzYWdlKCkuY19zdHIo
KV19OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50
UnVsZUxpc3RTdG9yZVByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3RTdG9yZVByaXZhdGUuaAkocmV2aXNpb24g
Mjg1OTU0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudFJ1
bGVMaXN0U3RvcmVQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKIC0g
KHZvaWQpX2ludmFsaWRhdGVDb250ZW50UnVsZUxpc3RWZXJzaW9uRm9ySWRlbnRpZmllcjooTlNT
dHJpbmcgKilpZGVudGlmaWVyOwogLSAodm9pZClfZ2V0Q29udGVudFJ1bGVMaXN0U291cmNlRm9y
SWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOih2b2lk
ICheKShOU1N0cmluZyAqKSljb21wbGV0aW9uSGFuZGxlcjsKIAotLSAodm9pZClfY29tcGlsZUNv
bnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBlbmNvZGVk
Q29udGVudFJ1bGVMaXN0OihOU1N0cmluZyAqKSBlbmNvZGVkQ29udGVudFJ1bGVMaXN0IGNvbXBs
ZXRpb25IYW5kbGVyOih2b2lkICheKShXS0NvbnRlbnRSdWxlTGlzdCAqLCBOU0Vycm9yICopKWNv
bXBsZXRpb25IYW5kbGVyOworLSAodm9pZClfY29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50
aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBlbmNvZGVkQ29udGVudFJ1bGVMaXN0OihOU1N0
cmluZyAqKWVuY29kZWRDb250ZW50UnVsZUxpc3QgYWxsb3dlZFJlZGlyZWN0U2NoZW1lczooTlNT
ZXQ8TlNTdHJpbmcgKj4gKilzY2hlbWVzIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShXS0Nv
bnRlbnRSdWxlTGlzdCAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyOwogCiAvLyBGSVhN
RTogUmVtb3ZlIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuCiArIChpbnN0YW5jZXR5cGUp
ZGVmYXVsdFN0b3JlV2l0aExlZ2FjeUZpbGVuYW1lOwpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2VicGFnZVByZWZlcmVuY2VzLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnBhZ2VQcmVmZXJlbmNlcy5tbQko
cmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2VicGFnZVByZWZlcmVuY2VzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNiArMTQxLDMyIEBA
IC0gKEJPT0wpX2NvbnRlbnRCbG9ja2Vyc0VuYWJsZWQKICAgICByZXR1cm4gX3dlYnNpdGVQb2xp
Y2llcy0+Y29udGVudEJsb2NrZXJzRW5hYmxlZCgpOwogfQogCistICh2b2lkKV9zZXRBY3RpdmVD
b250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnM6KE5TU2V0PE5TU3RyaW5nICo+ICopcGF0dGVy
bnMKK3sKKyAgICBpZiAoIXBhdHRlcm5zKSB7CisgICAgICAgIF93ZWJzaXRlUG9saWNpZXMtPnNl
dEFjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNQYXR0ZXJucyhzdGQ6Om51bGxvcHQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgSGFzaFNldDxTdHJpbmc+IHBhdHRlcm5IYXNoU2V0
OworICAgIHBhdHRlcm5IYXNoU2V0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocGF0dGVybnMuY291
bnQpOworICAgIGZvciAoTlNTdHJpbmcgKnBhdHRlcm4gaW4gcGF0dGVybnMpCisgICAgICAgIHBh
dHRlcm5IYXNoU2V0LmFkZChwYXR0ZXJuKTsKKyAgICBfd2Vic2l0ZVBvbGljaWVzLT5zZXRBY3Rp
dmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMoV1RGTW92ZShwYXR0ZXJuSGFzaFNldCkp
OworfQorCistIChOU1NldDxOU1N0cmluZyAqPiAqKV9hY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rp
b25zUGF0dGVybnMKK3sKKyAgICBjb25zdCBhdXRvJiBwYXR0ZXJucyA9IF93ZWJzaXRlUG9saWNp
ZXMtPmFjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNQYXR0ZXJucygpOworICAgIGlmICghcGF0
dGVybnMpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBOU011dGFibGVTZXQ8TlNTdHJpbmcg
Kj4gKnNldCA9IFtOU011dGFibGVTZXQgc2V0XTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHBhdHRl
cm4gOiAqcGF0dGVybnMpCisgICAgICAgIFtzZXQgYWRkT2JqZWN0OnBhdHRlcm5dOworICAgIHJl
dHVybiBzZXQ7Cit9CisKIC0gKHZvaWQpX3NldEFsbG93ZWRBdXRvcGxheVF1aXJrczooX1dLV2Vi
c2l0ZUF1dG9wbGF5UXVpcmspYWxsb3dlZFF1aXJrcwogewogICAgIE9wdGlvblNldDxXZWJLaXQ6
OldlYnNpdGVBdXRvcGxheVF1aXJrPiBxdWlya3M7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJwYWdlUHJlZmVyZW5jZXNQcml2YXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2VicGFnZVByZWZlcmVuY2Vz
UHJpdmF0ZS5oCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tXZWJwYWdlUHJlZmVyZW5jZXNQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY5LDYgKzY5LDcgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1dlYnNpdAog
QGludGVyZmFjZSBXS1dlYnBhZ2VQcmVmZXJlbmNlcyAoV0tQcml2YXRlKQogCiBAcHJvcGVydHkg
KG5vbmF0b21pYywgc2V0dGVyPV9zZXRDb250ZW50QmxvY2tlcnNFbmFibGVkOikgQk9PTCBfY29u
dGVudEJsb2NrZXJzRW5hYmxlZDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5LCBzZXR0ZXI9
X3NldEFjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNQYXR0ZXJuczopIE5TU2V0PE5TU3RyaW5n
ICo+ICpfYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5zOwogQHByb3BlcnR5IChu
b25hdG9taWMsIHNldHRlcj1fc2V0QWxsb3dlZEF1dG9wbGF5UXVpcmtzOikgX1dLV2Vic2l0ZUF1
dG9wbGF5UXVpcmsgX2FsbG93ZWRBdXRvcGxheVF1aXJrczsKIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCBzZXR0ZXI9X3NldEF1dG9wbGF5UG9saWN5OikgX1dLV2Vic2l0ZUF1dG9wbGF5UG9saWN5IF9h
dXRvcGxheVBvbGljeTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5LCBzZXR0ZXI9X3NldEN1
c3RvbUhlYWRlckZpZWxkczopIE5TQXJyYXk8X1dLQ3VzdG9tSGVhZGVyRmllbGRzICo+ICpfY3Vz
dG9tSGVhZGVyRmllbGRzOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0J
KHJldmlzaW9uIDI4NTk1NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3
MCw3IEBAICsgKGluc3RhbmNldHlwZSlzdG9yZVdpdGhVUkw6KE5TVVJMICopdXIKIAogLSAodm9p
ZCljb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRp
ZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjooTlNTdHJpbmcgKillbmNvZGVkQ29udGVudFJ1
bGVMaXN0IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRlciAq
LCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgW19jb250ZW50UnVsZUxpc3RT
dG9yZSBfY29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6aWRlbnRpZmllciBlbmNv
ZGVkQ29udGVudFJ1bGVMaXN0OmVuY29kZWRDb250ZW50UnVsZUxpc3QgY29tcGxldGlvbkhhbmRs
ZXI6XihXS0NvbnRlbnRSdWxlTGlzdCAqY29udGVudFJ1bGVMaXN0LCBOU0Vycm9yICplcnJvcikg
eworICAgIFtfY29udGVudFJ1bGVMaXN0U3RvcmUgY29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklk
ZW50aWZpZXI6aWRlbnRpZmllciBlbmNvZGVkQ29udGVudFJ1bGVMaXN0OmVuY29kZWRDb250ZW50
UnVsZUxpc3QgY29tcGxldGlvbkhhbmRsZXI6XihXS0NvbnRlbnRSdWxlTGlzdCAqY29udGVudFJ1
bGVMaXN0LCBOU0Vycm9yICplcnJvcikgewogICAgICAgICBhdXRvIGNvbnRlbnRGaWx0ZXIgPSBj
b250ZW50UnVsZUxpc3QgPyBhZG9wdE5TKFtbX1dLVXNlckNvbnRlbnRGaWx0ZXIgYWxsb2NdIF9p
bml0V2l0aFdLQ29udGVudFJ1bGVMaXN0OmNvbnRlbnRSdWxlTGlzdF0pIDogbmlsOwogICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihjb250ZW50RmlsdGVyLmdldCgpLCB0b1VzZXJDb250ZW50UnVs
ZUxpc3RTdG9yZUVycm9yKGVycm9yKSk7CiAgICAgfV07CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJTdHJhdGVneS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViTG9hZGVyU3RyYXRlZ3kuY3BwCShyZXZp
c2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJMb2Fk
ZXJTdHJhdGVneS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3OSw2ICs0NzksMTIgQEAgdm9pZCBX
ZWJMb2FkZXJTdHJhdGVneTo6cmVtb3ZlKFJlc291cmNlTAogICAgIEFTU0VSVChyZXNvdXJjZUxv
YWRlcik7CiAgICAgTE9HKE5ldHdvcmtTY2hlZHVsaW5nLCAiKFdlYlByb2Nlc3MpIFdlYkxvYWRl
clN0cmF0ZWd5OjpyZW1vdmUsIHVybCAnJXMnIiwgcmVzb3VyY2VMb2FkZXItPnVybCgpLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpOwogCisgICAgYXV0byBpZGVudGlmaWVyID0gcmVzb3VyY2VMb2Fk
ZXItPmlkZW50aWZpZXIoKTsKKyAgICBpZiAoIWlkZW50aWZpZXIpIHsKKyAgICAgICAgTE9HX0VS
Uk9SKCJXZWJMb2FkZXJTdHJhdGVneSByZW1vdmluZyBhIFJlc291cmNlTG9hZGVyIHRoYXQgaGFz
IG5vIGlkZW50aWZpZXIuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoYXV0
byB0YXNrID0gbV91cmxTY2hlbWVUYXNrcy50YWtlKHJlc291cmNlTG9hZGVyLT5pZGVudGlmaWVy
KCkpKSB7CiAgICAgICAgIEFTU0VSVCghbV9pbnRlcm5hbGx5RmFpbGVkUmVzb3VyY2VMb2FkZXJz
LmNvbnRhaW5zKHJlc291cmNlTG9hZGVyKSk7CiAgICAgICAgIHRhc2stPnN0b3BMb2FkaW5nKCk7
CkBAIC00ODksMTIgKzQ5NSw2IEBAIHZvaWQgV2ViTG9hZGVyU3RyYXRlZ3k6OnJlbW92ZShSZXNv
dXJjZUwKICAgICAgICAgbV9pbnRlcm5hbGx5RmFpbGVkUmVzb3VyY2VMb2FkZXJzLnJlbW92ZShy
ZXNvdXJjZUxvYWRlcik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCi0gICAgYXV0byBp
ZGVudGlmaWVyID0gcmVzb3VyY2VMb2FkZXItPmlkZW50aWZpZXIoKTsKLSAgICBpZiAoIWlkZW50
aWZpZXIpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJXZWJMb2FkZXJTdHJhdGVneSByZW1vdmluZyBh
IFJlc291cmNlTG9hZGVyIHRoYXQgaGFzIG5vIGlkZW50aWZpZXIuIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CiAKICAgICBSZWZQdHI8V2ViUmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IG1fd2Vi
UmVzb3VyY2VMb2FkZXJzLnRha2UoaWRlbnRpZmllcik7CiAgICAgLy8gTG9hZGVyIG1heSBub3Qg
YmUgcmVnaXN0ZXJlZCBpZiB3ZSBjcmVhdGVkIGl0LCBidXQgaGF2ZW4ndCBzY2hlZHVsZWQgeWV0
IChhIGJ1bmRsZSBjbGllbnQgY2FuIGRlY2lkZSB0byBjYW5jZWwgc3VjaCByZXF1ZXN0IHZpYSB3
aWxsU2VuZFJlcXVlc3QpLgpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjg1OTU0KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjEtMTEtMTcgIEFsZXggQ2hyaXN0ZW5zZW4g
IDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBJbXBsZW1lbnQgbW9zdCBvZiBy
ZWRpcmVjdCBhbmQgbW9kaWZ5LWhlYWRlcnMgYWN0aW9uIHR5cGVzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzMyNjgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpJbk1l
bW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlKToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OmNoZWNrQ29tcGlsZXJFcnJvcik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNU
X0YpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tDb250ZW50
RXh0ZW5zaW9uU3RvcmUubW06CisgICAgICAgIChjb21waWxlQ29udGVudFJ1bGVMaXN0KToKKyAg
ICAgICAgKG5hdmlnYXRpb25EZWxlZ2F0ZUFsbG93aW5nQWN0aXZlQWN0aW9uc09uVGVzdEhvc3Qp
OgorICAgICAgICAoVEVTVF9GKToKKwogMjAyMS0xMS0xNyAgWml4aW5nIExpdSAgPGxpdXNodXl1
MDExQGdtYWlsLmNvbT4KIAogICAgICAgICBbR1RLXVtXUEVdIFN1cHBvcnQgZ2V0dGluZyBhbmQg
c2V0dGluZyBIVFRQIGhlYWRlcnMgaW4gY3VzdG9tIFVSSSBzY2hlbWUgaGFuZGxlcnMKSW5kZXg6
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRF
eHRlbnNpb25zLmNwcAkocmV2aXNpb24gMjg1OTU0KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5
LDcgKzEyOSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIENvbXBpbGVkQ29udGVudEV4dGVu
c2lvbkRhdGEgZXh0ZW5zaW9uRGF0YTsKICAgICAgICAgSW5NZW1vcnlDb250ZW50RXh0ZW5zaW9u
Q29tcGlsYXRpb25DbGllbnQgY2xpZW50KGV4dGVuc2lvbkRhdGEpOwotICAgICAgICBhdXRvIHBh
cnNlZFJ1bGVzID0gQ29udGVudEV4dGVuc2lvbnM6OnBhcnNlUnVsZUxpc3QoZmlsdGVyLCB7IH0p
OworICAgICAgICBhdXRvIHBhcnNlZFJ1bGVzID0gQ29udGVudEV4dGVuc2lvbnM6OnBhcnNlUnVs
ZUxpc3QoZmlsdGVyLCBzdGQ6Om51bGxvcHQpOwogICAgICAgICBhdXRvIGNvbXBpbGVyRXJyb3Ig
PSBDb250ZW50RXh0ZW5zaW9uczo6Y29tcGlsZVJ1bGVMaXN0KGNsaWVudCwgV1RGTW92ZShmaWx0
ZXIpLCBXVEZNb3ZlKHBhcnNlZFJ1bGVzLnZhbHVlKCkpKTsKIAogICAgICAgICAvLyBDb21waWxp
bmcgc2hvdWxkIGFsd2F5cyBzdWNjZWVkIGhlcmUuIFdlIGhhdmUgb3RoZXIgdGVzdHMgZm9yIGNv
bXBpbGUgZmFpbHVyZXMuCkBAIC0xMzYwLDcgKzEzNjAsNyBAQCBURVNUX0YoQ29udGVudEV4dGVu
c2lvblRlc3QsIERlZXBORkEpCiAgICAgRVhQRUNUX0VRKDF1bCwgY3JlYXRlTkZBcyhjb21iaW5l
ZFVSTEZpbHRlcnMpLnNpemUoKSk7CiB9CiAKLXZvaWQgY2hlY2tDb21waWxlckVycm9yKGNvbnN0
IGNoYXIqIGpzb24sIHN0ZDo6ZXJyb3JfY29kZSBleHBlY3RlZEVycm9yLCBjb25zdCBIYXNoU2V0
PFN0cmluZz4mIGFsbG93ZWRSZWRpcmVjdFVSTFNjaGVtZXMgPSB7IH0pCit2b2lkIGNoZWNrQ29t
cGlsZXJFcnJvcihjb25zdCBjaGFyKiBqc29uLCBzdGQ6OmVycm9yX2NvZGUgZXhwZWN0ZWRFcnJv
ciwgY29uc3Qgc3RkOjpvcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+JiBhbGxvd2VkUmVkaXJlY3RV
UkxTY2hlbWVzID0gc3RkOjpudWxsb3B0KQogewogICAgIENvbXBpbGVkQ29udGVudEV4dGVuc2lv
bkRhdGEgZXh0ZW5zaW9uRGF0YTsKICAgICBJbk1lbW9yeUNvbnRlbnRFeHRlbnNpb25Db21waWxh
dGlvbkNsaWVudCBjbGllbnQoZXh0ZW5zaW9uRGF0YSk7CkBAIC0xNTMwLDYgKzE1MzAsNyBAQCBU
RVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIEludmFsaWRKU09OCiAgICAgICAgIENvbnRlbnRF
eHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRBY3Rpb25UeXBlKTsKICAgICBjaGVja0NvbXBpbGVy
RXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJjc3MtZGlzcGxheS1ub25lXCJ9LFwidHJp
Z2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsCiAgICAgICAgIENvbnRl
bnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRDU1NEaXNwbGF5Tm9uZUFjdGlvblR5cGUpOwor
ICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiIiwgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVk
aXJlY3RVUkxTY2hlbWVzU2hvdWxkTm90SW5jbHVkZUphdmFzY3JpcHQsIHsgeyAiamF2YXNjcmlw
dCIgfSB9KTsKIAogICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVc
IjpcImlnbm9yZS1wcmV2aW91cy1ydWxlc1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6
XCJ3ZWJraXQub3JnXCJ9fSwiCiAgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJjc3Mt
ZGlzcGxheS1ub25lXCIsXCJzZWxlY3RvclwiOlwiLmhpZGRlblwifSxcInRyaWdnZXJcIjp7XCJ1
cmwtZmlsdGVyXCI6XCIuKlwifX1dIiwgeyB9KTsKQEAgLTE1NTgsMTIgKzE1NTksMjAgQEAgVEVT
VF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBJbnZhbGlkSlNPTgogICAgIGNoZWNrQ29tcGlsZXJF
cnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRpcmVjdFwiOntc
InRyYW5zZm9ybVwiOntcInF1ZXJ5LXRyYW5zZm9ybVwiOntcImFkZC1vci1yZXBsYWNlLXBhcmFt
ZXRlcnNcIjpbe31dfX19fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3Jn
XCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05BZGRPclJlcGxhY2VQYXJhbWV0ZXJz
S2V5VmFsdWVNaXNzaW5nS2V5U3RyaW5nKTsKICAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJh
Y3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVkaXJlY3RcIjp7XCJ0cmFuc2Zvcm1c
Ijp7XCJxdWVyeS10cmFuc2Zvcm1cIjp7XCJhZGQtb3ItcmVwbGFjZS1wYXJhbWV0ZXJzXCI6W3tc
ImtleVwiOjV9XX19fX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wi
fX1dIiwgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OQWRkT3JSZXBsYWNlUGFyYW1ldGVyc0tl
eVZhbHVlTWlzc2luZ0tleVN0cmluZyk7CiAgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0
aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixcInJlZGlyZWN0XCI6e1widHJhbnNmb3JtXCI6
e1wicXVlcnktdHJhbnNmb3JtXCI6e1wiYWRkLW9yLXJlcGxhY2UtcGFyYW1ldGVyc1wiOlt7XCJr
ZXlcIjpcImtcIixcInZhbHVlXCI6NX1dfX19fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6
XCJ3ZWJraXQub3JnXCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05BZGRPclJlcGxh
Y2VQYXJhbWV0ZXJzS2V5VmFsdWVNaXNzaW5nVmFsdWVTdHJpbmcpOwotICAgIGNoZWNrQ29tcGls
ZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRpcmVjdFwi
OntcInVybFwiOlwiYWJvdXQ6YmxhbmtcIn19LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpc
IndlYmtpdC5vcmdcIn19XSIsIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTlJlZGlyZWN0VVJM
U2NoZW1lTm90QWxsb3dlZCk7Ci0gICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6
e1widHlwZVwiOlwicmVkaXJlY3RcIixcInJlZGlyZWN0XCI6e1widXJsXCI6XCJhYm91dDpibGFu
a1wifX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwgeyB9
LCB7ICJhYm91dCIgfSk7Ci0gICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1wi
dHlwZVwiOlwicmVkaXJlY3RcIixcInJlZGlyZWN0XCI6e1wiZXh0ZW5zaW9uLXBhdGhcIjpcImRv
ZXMvbm90L3N0YXJ0L3dpdGgvc2xhc2gvXCJ9fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6
XCJ3ZWJraXQub3JnXCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdEV4
dGVuc2lvblBhdGhEb2VzTm90U3RhcnRXaXRoU2xhc2gpOworICAgIGNoZWNrQ29tcGlsZXJFcnJv
cigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRpcmVjdFwiOntcInVy
bFwiOlwiYWJvdXQ6YmxhbmtcIn19LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtp
dC5vcmdcIn19XSIsIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTlJlZGlyZWN0VVJMU2NoZW1l
Tm90QWxsb3dlZCwgeyB7ICJub3QtYWJvdXQiIH0gfSk7CisgICAgY2hlY2tDb21waWxlckVycm9y
KCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixcInJlZGlyZWN0XCI6e1widXJs
XCI6XCJhYm91dDpibGFua1wifX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0
Lm9yZ1wifX1dIiwgeyB9LCB7IHsgImFib3V0IiB9IH0pOworICAgIGNoZWNrQ29tcGlsZXJFcnJv
cigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRpcmVjdFwiOntcInVy
bFwiOlwiaHR0cHM6Ly8xMjcuLjEvXCJ9fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3
ZWJraXQub3JnXCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTElu
dmFsaWQsIHsgeyAiaHR0cHMiIH0gfSk7CisgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0
aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixcInJlZGlyZWN0XCI6e1widXJsXCI6XCJhYm91
dDpibGFua1wifX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1d
IiwgeyB9LCB7IHsgImFib3V0IiB9IH0pOworICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFj
dGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRpcmVjdFwiOntcInRyYW5zZm9ybVwi
OntcInBvcnRcIjpcIm5vdCBhIG51bWJlclwifX19LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJc
IjpcIndlYmtpdC5vcmdcIn19XSIsIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTlJlZGlyZWN0
SW52YWxpZFBvcnQpOworICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5
cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRpcmVjdFwiOntcInRyYW5zZm9ybVwiOntcInBvcnRcIjpc
IjY1NTM2XCJ9fX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1d
IiwgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RJbnZhbGlkUG9ydCk7CisgICAg
Y2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixc
InJlZGlyZWN0XCI6e1widHJhbnNmb3JtXCI6e1wicXVlcnlcIjpcIm5vLXF1ZXN0aW9uLW1hcmtc
In19fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCBDb250
ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdEludmFsaWRRdWVyeSk7CisgICAgY2hlY2tD
b21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixcInJlZGly
ZWN0XCI6e1widHJhbnNmb3JtXCI6e1wiZnJhZ21lbnRcIjpcIm5vLW51bWJlci1zaWduXCJ9fX0s
XCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwgQ29udGVudEV4
dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RJbnZhbGlkRnJhZ21lbnQpOworICAgIGNoZWNrQ29t
cGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRpcmVj
dFwiOntcInRyYW5zZm9ybVwiOntcInBvcnRcIjpcIjY1NTM1XCJ9fX0sXCJ0cmlnZ2VyXCI6e1wi
dXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwgeyB9KTsKKyAgICBjaGVja0NvbXBpbGVy
RXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVkaXJlY3RcIjp7
XCJ0cmFuc2Zvcm1cIjp7XCJwb3J0XCI6XCJcIn19fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVy
XCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCB7IH0pOwogICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tc
ImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRpcmVjdFwiOntcImV4dGVuc2lv
bi1wYXRoXCI6XCIvZG9lcy9zdGFydC93aXRoL3NsYXNoL1wifX0sXCJ0cmlnZ2VyXCI6e1widXJs
LWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwgeyB9KTsKLSAgICBjaGVja0NvbXBpbGVyRXJy
b3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVkaXJlY3RcIjp7XCJ0
cmFuc2Zvcm1cIjp7XCJzY2hlbWVcIjpcImFib3V0XCJ9fX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZp
bHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVk
aXJlY3RVUkxTY2hlbWVOb3RBbGxvd2VkKTsKLSAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJh
Y3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVkaXJlY3RcIjp7XCJ0cmFuc2Zvcm1c
Ijp7XCJzY2hlbWVcIjpcImFib3V0XCJ9fX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwi
d2Via2l0Lm9yZ1wifX1dIiwgeyB9LCB7ICJhYm91dCIgfSk7CisgICAgY2hlY2tDb21waWxlckVy
cm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixcInJlZGlyZWN0XCI6e1wi
dHJhbnNmb3JtXCI6e1wic2NoZW1lXCI6XCJhYm91dFwifX19LFwidHJpZ2dlclwiOntcInVybC1m
aWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTlJl
ZGlyZWN0VVJMU2NoZW1lTm90QWxsb3dlZCwgeyB7ICJub3QtYWJvdXQiIH0gfSk7CisgICAgY2hl
Y2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixcInJl
ZGlyZWN0XCI6e1widHJhbnNmb3JtXCI6e1wic2NoZW1lXCI6XCIhQCMkJVwifX19LFwidHJpZ2dl
clwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsIENvbnRlbnRFeHRlbnNpb25F
cnJvcjo6SlNPTlJlZGlyZWN0VVJMU2NoZW1lSW52YWxpZCk7CisgICAgY2hlY2tDb21waWxlckVy
cm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixcInJlZGlyZWN0XCI6e1wi
dHJhbnNmb3JtXCI6e1wic2NoZW1lXCI6XCJBYm91dFwifX19LFwidHJpZ2dlclwiOntcInVybC1m
aWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsIHsgfSwgeyB7ICJhYm91dCIgfSB9KTsKICAgICBj
aGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJtb2RpZnktaGVhZGVy
c1wiLFwicmVxdWVzdC1oZWFkZXJzXCI6NX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwi
d2Via2l0Lm9yZ1wifX1dIiwgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OTW9kaWZ5SGVhZGVy
c05vdEFycmF5KTsKICAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBl
XCI6XCJtb2RpZnktaGVhZGVyc1wiLFwicmVxdWVzdC1oZWFkZXJzXCI6WzVdfSxcInRyaWdnZXJc
Ijp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9uRXJy
b3I6OkpTT05Nb2RpZnlIZWFkZXJzSW5mb05vdEFEaWN0aW9uYXJ5KTsKICAgICBjaGVja0NvbXBp
bGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJtb2RpZnktaGVhZGVyc1wiLFwicmVx
dWVzdC1oZWFkZXJzXCI6W3t9XX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0
Lm9yZ1wifX1dIiwgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OTW9kaWZ5SGVhZGVyc01pc3Np
bmdPcGVyYXRpb24pOwpAQCAtMzAyNCwxMSArMzAzMywxMSBAQCBURVNUX0YoQ29udGVudEV4dGVu
c2lvblRlc3QsIFNlcmlhbGl6YXRpCiAgICAgICAgICJob3N0IiwKICAgICAgICAgInBhc3N3b3Jk
IiwKICAgICAgICAgeyAvKiBwYXRoICovIH0sCi0gICAgICAgICJwb3J0IiwKKyAgICAgICAgMTIz
LAogICAgICAgICB7IC8qIHF1ZXJ5ICovIH0sCiAgICAgICAgICJzY2hlbWUiLAogICAgICAgICAi
dXNlcm5hbWUiCi0gICAgfSB9IH0sIDc1KTsKKyAgICB9IH0gfSwgNzApOwogICAgIGNoZWNrUmVk
aXJlY3RBY3Rpb25TZXJpYWxpemF0aW9uKHsgeyBSZWRpcmVjdEFjdGlvbjo6VVJMVHJhbnNmb3Jt
QWN0aW9uIHsgeyB9LCB7IH0sIHsgfSwgeyB9LCB7IH0sIHsgInF1ZXJ5IiB9LCB7IH0sIHsgfSB9
IH0gfSwgMjApOwogICAgIGNoZWNrUmVkaXJlY3RBY3Rpb25TZXJpYWxpemF0aW9uKHsgeyBSZWRp
cmVjdEFjdGlvbjo6VVJMVHJhbnNmb3JtQWN0aW9uIHsgeyB9LCB7IH0sIHsgfSwgeyB9LCB7IH0s
CiAgICAgICAgIHsgUmVkaXJlY3RBY3Rpb246OlVSTFRyYW5zZm9ybUFjdGlvbjo6UXVlcnlUcmFu
c2Zvcm0geyB7IHsgImtleTEiLCBmYWxzZSwgInZhbHVlMSIgfSwgeyAia2V58J+SqSIsIGZhbHNl
LCAidmFsdWUyIiB9IH0sIHsgInRlc3RTdHJpbmcxIiwgInRlc3RTdHJpbmcyIiB9IH0gfSwgeyB9
LCB7IH0sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLQ29u
dGVudEV4dGVuc2lvblN0b3JlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0JKHJldmlzaW9uIDI4
NTk1NCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tDb250ZW50
RXh0ZW5zaW9uU3RvcmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDExICsyOCwxNSBAQAogCiAj
aW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgogI2ltcG9ydCAiVGVzdC5oIgorI2ltcG9ydCAi
VGVzdE5hdmlnYXRpb25EZWxlZ2F0ZS5oIgorI2ltcG9ydCAiVGVzdFVSTFNjaGVtZUhhbmRsZXIu
aCIKICNpbXBvcnQgPFdlYktpdC9XS0NvbnRlbnRSdWxlTGlzdC5oPgogI2ltcG9ydCA8V2ViS2l0
L1dLQ29udGVudFJ1bGVMaXN0U3RvcmVQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJw
YWdlUHJlZmVyZW5jZXNQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZS5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJDb250ZW50RmlsdGVyLmg+
CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CiAKIGNs
YXNzIFdLQ29udGVudFJ1bGVMaXN0U3RvcmVUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3Qgewog
cHVibGljOgpAQCAtNDc0LDMgKzQ3OCwyNzYgQEAgVEVTVF9GKFdLQ29udGVudFJ1bGVMaXN0U3Rv
cmVUZXN0LCBfV0tVcwogICAgIH1dOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9u
ZUxvb2tpbmdVcCk7CiB9CisKK3N0YXRpYyBSZXRhaW5QdHI8V0tDb250ZW50UnVsZUxpc3Q+IGNv
bXBpbGVDb250ZW50UnVsZUxpc3QoY29uc3QgY2hhcioganNvbiwgTlNTdHJpbmcgKmlkZW50aWZp
ZXIgPSBAInRlc3RpZGVudGlmaWVyIikKK3sKKyAgICBbW1dLQ29udGVudFJ1bGVMaXN0U3RvcmUg
ZGVmYXVsdFN0b3JlXSBfcmVtb3ZlQWxsQ29udGVudFJ1bGVMaXN0c107CisKKyAgICBfX2Jsb2Nr
IFJldGFpblB0cjxXS0NvbnRlbnRSdWxlTGlzdD4gbGlzdDsKKyAgICBbW1dLQ29udGVudFJ1bGVM
aXN0U3RvcmUgZGVmYXVsdFN0b3JlXSBfY29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZp
ZXI6QCJ0ZXN0aWRlbnRpZmllciIgZW5jb2RlZENvbnRlbnRSdWxlTGlzdDpbTlNTdHJpbmcgc3Ry
aW5nV2l0aEZvcm1hdDpAIiVzIiwganNvbl0gYWxsb3dlZFJlZGlyZWN0U2NoZW1lczpbTlNTZXQg
c2V0V2l0aE9iamVjdHM6QCJ0ZXN0c2NoZW1lIiwgQCJvdGhlcnRlc3RzY2hlbWUiLCBuaWxdIGNv
bXBsZXRpb25IYW5kbGVyOl4oV0tDb250ZW50UnVsZUxpc3QgKmZpbHRlciwgTlNFcnJvciAqZXJy
b3IpIHsKKyAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOworICAgICAgICBsaXN0ID0gZmlsdGVy
OworICAgIH1dOworICAgIHdoaWxlICghbGlzdCkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6c3BpblJ1bkxvb3AoKTsKKworICAgIHJldHVybiBsaXN0OworfQorCitzdGF0aWMgUmV0YWlu
UHRyPFRlc3ROYXZpZ2F0aW9uRGVsZWdhdGU+IG5hdmlnYXRpb25EZWxlZ2F0ZUFsbG93aW5nQWN0
aXZlQWN0aW9uc09uVGVzdEhvc3QoKQoreworICAgIHN0YXRpYyBhdXRvIGRlbGVnYXRlID0gYWRv
cHROUyhbVGVzdE5hdmlnYXRpb25EZWxlZ2F0ZSBuZXddKTsKKyAgICBkZWxlZ2F0ZS5nZXQoKS5k
ZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uV2l0aFByZWZlcmVuY2VzID0gXihXS05hdmln
YXRpb25BY3Rpb24gKiwgV0tXZWJwYWdlUHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzLCB2b2lkIChe
ZGVjaXNpb25IYW5kbGVyKShXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3ksIFdLV2VicGFnZVByZWZl
cmVuY2VzICopKSB7CisgICAgICAgIHByZWZlcmVuY2VzLl9hY3RpdmVDb250ZW50UnVsZUxpc3RB
Y3Rpb25zUGF0dGVybnMgPSBbTlNTZXQgc2V0V2l0aE9iamVjdDpAIio6Ly90ZXN0aG9zdC8qIl07
CisgICAgICAgIGRlY2lzaW9uSGFuZGxlcihXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3lBbGxvdywg
cHJlZmVyZW5jZXMpOworICAgIH07CisgICAgcmV0dXJuIGRlbGVnYXRlOworfQorCitURVNUX0Yo
V0tDb250ZW50UnVsZUxpc3RTdG9yZVRlc3QsIE1vZGlmeUhlYWRlcnMpCit7CisgICAgYXV0byBs
aXN0ID0gY29tcGlsZUNvbnRlbnRSdWxlTGlzdChSIkpTT04oCisgICAgICAgIFsgeworICAgICAg
ICAgICAgImFjdGlvbiI6IHsgInR5cGUiOiAibW9kaWZ5LWhlYWRlcnMiLCAicmVxdWVzdC1oZWFk
ZXJzIjogWyB7CisgICAgICAgICAgICAgICAgIm9wZXJhdGlvbiI6ICJzZXQiLAorICAgICAgICAg
ICAgICAgICJoZWFkZXIiOiAidGVzdGtleSIsCisgICAgICAgICAgICAgICAgInZhbHVlIjogInRl
c3R2YWx1ZSIKKyAgICAgICAgICAgIH0gXSB9LAorICAgICAgICAgICAgInRyaWdnZXIiOiB7ICJ1
cmwtZmlsdGVyIjogInRlc3RzY2hlbWUiIH0KKyAgICAgICAgfSwgeworICAgICAgICAgICAgImFj
dGlvbiI6IHsgInR5cGUiOiAibW9kaWZ5LWhlYWRlcnMiLCAicmVxdWVzdC1oZWFkZXJzIjogWyB7
CisgICAgICAgICAgICAgICAgIm9wZXJhdGlvbiI6ICJyZW1vdmUiLAorICAgICAgICAgICAgICAg
ICJoZWFkZXIiOiAiQWNjZXB0IgorICAgICAgICAgICAgfSBdIH0sCisgICAgICAgICAgICAidHJp
Z2dlciI6IHsgInVybC1maWx0ZXIiOiAidGVzdHNjaGVtZSIgfQorICAgICAgICB9LCB7CisgICAg
ICAgICAgICAiYWN0aW9uIjogeyAidHlwZSI6ICJtb2RpZnktaGVhZGVycyIsICJyZXF1ZXN0LWhl
YWRlcnMiOiBbIHsKKyAgICAgICAgICAgICAgICAib3BlcmF0aW9uIjogImFwcGVuZCIsCisgICAg
ICAgICAgICAgICAgImhlYWRlciI6ICJDb250ZW50LVR5cGUiLAorICAgICAgICAgICAgICAgICJ2
YWx1ZSI6ICJNb2RpZmllZC1ieS10ZXN0IgorICAgICAgICAgICAgfSBdIH0sCisgICAgICAgICAg
ICAidHJpZ2dlciI6IHsgInVybC1maWx0ZXIiOiAidGVzdHNjaGVtZSIgfQorICAgICAgICB9IF0K
KyAgICApSlNPTiIpOworCisgICAgX19ibG9jayBib29sIHJlY2VpdmVkQWxsUmVxdWVzdHMgeyBm
YWxzZSB9OworICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW1Rlc3RVUkxTY2hlbWVIYW5kbGVy
IG5ld10pOworICAgIGhhbmRsZXIuZ2V0KCkuc3RhcnRVUkxTY2hlbWVUYXNrSGFuZGxlciA9IF4o
V0tXZWJWaWV3ICosIGlkIDxXS1VSTFNjaGVtZVRhc2s+IHRhc2spIHsKKyAgICAgICAgTlNTdHJp
bmcgKnBhdGggPSB0YXNrLnJlcXVlc3QuVVJMLnBhdGg7CisgICAgICAgIE5TRGljdGlvbmFyeTxO
U1N0cmluZyAqLCBOU1N0cmluZyAqPiAqZmllbGRzID0gW3Rhc2sucmVxdWVzdCBhbGxIVFRQSGVh
ZGVyRmllbGRzXTsKKyAgICAgICAgaWYgKFtwYXRoIGlzRXF1YWxUb1N0cmluZzpAIi9tYWluLmh0
bWwiXSkgeworICAgICAgICAgICAgRVhQRUNUX1dLX1NUUkVRKGZpZWxkc1tAIkNvbnRlbnQtVHlw
ZSJdLCAiTW9kaWZpZWQtYnktdGVzdCIpOworICAgICAgICAgICAgRVhQRUNUX1dLX1NUUkVRKGZp
ZWxkc1tAInRlc3RrZXkiXSwgInRlc3R2YWx1ZSIpOworICAgICAgICAgICAgRVhQRUNUX05VTEwo
ZmllbGRzW0AiQWNjZXB0Il0pOworICAgICAgICAgICAgcmV0dXJuIHJlc3BvbmQodGFzaywgIjxp
ZnJhbWUgc3JjPScvL290aGVyaG9zdC9mcmFtZS5odG1sJz48L2lmcmFtZT4iKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoW3BhdGggaXNFcXVhbFRvU3RyaW5nOkAiL2ZyYW1lLmh0bWwiXSkgewor
ICAgICAgICAgICAgRVhQRUNUX05VTEwoZmllbGRzW0AiQ29udGVudC1UeXBlIl0pOworICAgICAg
ICAgICAgRVhQRUNUX05VTEwoZmllbGRzW0AidGVzdGtleSJdKTsKKyAgICAgICAgICAgIEVYUEVD
VF9OT1RfTlVMTChmaWVsZHNbQCJBY2NlcHQiXSk7CisgICAgICAgICAgICByZXR1cm4gcmVzcG9u
ZCh0YXNrLCAiPHNjcmlwdD5mZXRjaCgnLy90ZXN0aG9zdC9mZXRjaC50eHQnLHtoZWFkZXJzOiB7
J0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ319KTwvc2NyaXB0PiIpOworICAgICAg
ICB9CisgICAgICAgIGlmIChbcGF0aCBpc0VxdWFsVG9TdHJpbmc6QCIvZmV0Y2gudHh0Il0pIHsK
KyAgICAgICAgICAgIEVYUEVDVF9XS19TVFJFUShmaWVsZHNbQCJDb250ZW50LVR5cGUiXSwgImFw
cGxpY2F0aW9uL2pzb247IE1vZGlmaWVkLWJ5LXRlc3QiKTsKKyAgICAgICAgICAgIEVYUEVDVF9X
S19TVFJFUShmaWVsZHNbQCJ0ZXN0a2V5Il0sICJ0ZXN0dmFsdWUiKTsKKyAgICAgICAgICAgIEVY
UEVDVF9OVUxMKGZpZWxkc1tAIkFjY2VwdCJdKTsKKyAgICAgICAgICAgIHJlY2VpdmVkQWxsUmVx
dWVzdHMgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlc3BvbmQodGFzaywgIiIpOworICAg
ICAgICB9CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH07CisKKyAgICBhdXRv
IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtXS1dlYlZpZXdDb25maWd1cmF0aW9uIG5ld10pOwor
ICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZENvbnRlbnRSdWxl
TGlzdDpsaXN0LmdldCgpXTsKKyAgICBbY29uZmlndXJhdGlvbiBzZXRVUkxTY2hlbWVIYW5kbGVy
OmhhbmRsZXIuZ2V0KCkgZm9yVVJMU2NoZW1lOkAidGVzdHNjaGVtZSJdOworICAgIGF1dG8gd2Vi
VmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNaZXJvUmVj
dCBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICB3ZWJWaWV3LmdldCgp
Lm5hdmlnYXRpb25EZWxlZ2F0ZSA9IG5hdmlnYXRpb25EZWxlZ2F0ZUFsbG93aW5nQWN0aXZlQWN0
aW9uc09uVGVzdEhvc3QoKS5nZXQoKTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxS
ZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAidGVzdHNjaGVtZTov
L3Rlc3Rob3N0L21haW4uaHRtbCJdXV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZy
ZWNlaXZlZEFsbFJlcXVlc3RzKTsKKyAgICAKKyAgICAvLyBGSVhNRTogQXBwZW5kaW5nIHRvIHRo
ZSBVc2VyLUFnZW50IHJlcGxhY2VzIHRoZSB1c2VyIGFnZW50IGJlY2F1c2Ugd2UgaGF2ZW4ndCBh
ZGRlZCB0aGUgdXNlciBhZ2VudCB5ZXQgd2hlbiBwcm9jZXNzaW5nIHRoZSByZXF1ZXN0LgorfQor
CitURVNUX0YoV0tDb250ZW50UnVsZUxpc3RTdG9yZVRlc3QsIFJlZGlyZWN0KQoreworICAgIGF1
dG8gbGlzdCA9IGNvbXBpbGVDb250ZW50UnVsZUxpc3QoUiJKU09OKAorICAgICAgICBbIHsKKyAg
ICAgICAgICAgICJhY3Rpb24iOiB7ICJ0eXBlIjogInJlZGlyZWN0IiwgInJlZGlyZWN0Ijogewor
ICAgICAgICAgICAgICAgICJ1cmwiOiAib3RoZXJ0ZXN0c2NoZW1lOi8vbm90LXRlc3Rob3N0LzEt
cmVkaXJlY3RlZC50eHQiCisgICAgICAgICAgICB9IH0sCisgICAgICAgICAgICAidHJpZ2dlciI6
IHsgInVybC1maWx0ZXIiOiAiMS50eHQiIH0KKyAgICAgICAgfSwgeworICAgICAgICAgICAgImFj
dGlvbiI6IHsgInR5cGUiOiAicmVkaXJlY3QiLCAicmVkaXJlY3QiOiB7ICJ0cmFuc2Zvcm0iOiB7
CisgICAgICAgICAgICAgICAgInBvcnQiOiAiMTIzIiwKKyAgICAgICAgICAgICAgICAiaWdub3Jl
ZC1jb21tZW50IjogIjEyMyBpcyBhIGZvcmJpZGRlbiBwb3J0LCBzbyB0aGlzIFVSTCBpcyBub3Qg
c2VlbiBieSB0aGUgV0tVUkxTY2hlbWVIYW5kbGVyLiIKKyAgICAgICAgICAgIH0gfSB9LAorICAg
ICAgICAgICAgInRyaWdnZXIiOiB7ICJ1cmwtZmlsdGVyIjogIjIudHh0IiB9CisgICAgICAgIH0s
IHsKKyAgICAgICAgICAgICJhY3Rpb24iOiB7ICJ0eXBlIjogInJlZGlyZWN0IiwgInJlZGlyZWN0
IjogeyAidHJhbnNmb3JtIjogeworICAgICAgICAgICAgICAgICJob3N0IjogIm5ld2hvc3QiLAor
ICAgICAgICAgICAgICAgICJ1c2VybmFtZSI6ICJuZXd1c2VybmFtZSIsCisgICAgICAgICAgICAg
ICAgInBvcnQiOiAiNDQzIgorICAgICAgICAgICAgfSB9IH0sCisgICAgICAgICAgICAidHJpZ2dl
ciI6IHsgInVybC1maWx0ZXIiOiAiMy50eHQiIH0KKyAgICAgICAgfSwgeworICAgICAgICAgICAg
ImFjdGlvbiI6IHsgInR5cGUiOiAicmVkaXJlY3QiLCAicmVkaXJlY3QiOiB7ICJ0cmFuc2Zvcm0i
OiB7CisgICAgICAgICAgICAgICAgInBvcnQiOiAiIiwKKyAgICAgICAgICAgICAgICAic2NoZW1l
IjogIm90aGVydGVzdHNjaGVtZSIsCisgICAgICAgICAgICAgICAgInF1ZXJ5IjogIj9rZXk9dmFs
dWUiCisgICAgICAgICAgICB9IH0gfSwKKyAgICAgICAgICAgICJ0cmlnZ2VyIjogeyAidXJsLWZp
bHRlciI6ICI0LnR4dCIgfQorICAgICAgICB9LCB7CisgICAgICAgICAgICAiYWN0aW9uIjogeyAi
dHlwZSI6ICJyZWRpcmVjdCIsICJyZWRpcmVjdCI6IHsgInRyYW5zZm9ybSI6IHsKKyAgICAgICAg
ICAgICAgICAicGFzc3dvcmQiOiAidGVzdHBhc3N3b3JkIiwKKyAgICAgICAgICAgICAgICAicXVl
cnkiOiAiIiwKKyAgICAgICAgICAgICAgICAiZnJhZ21lbnQiOiAiI2ZyYWdtZW50LXRvLWJlLWFk
ZGVkIgorICAgICAgICAgICAgfSB9IH0sCisgICAgICAgICAgICAidHJpZ2dlciI6IHsgInVybC1m
aWx0ZXIiOiAiNS50eHQiIH0KKyAgICAgICAgfSwgeworICAgICAgICAgICAgImFjdGlvbiI6IHsg
InR5cGUiOiAicmVkaXJlY3QiLCAicmVkaXJlY3QiOiB7ICJ0cmFuc2Zvcm0iOiB7CisgICAgICAg
ICAgICAgICAgInBhc3N3b3JkIjogInRlc3RwYXNzd29yZCIsCisgICAgICAgICAgICAgICAgImZy
YWdtZW50IjogIiIKKyAgICAgICAgICAgIH0gfSB9LAorICAgICAgICAgICAgInRyaWdnZXIiOiB7
ICJ1cmwtZmlsdGVyIjogIjYudHh0IiB9CisgICAgICAgIH0sIHsKKyAgICAgICAgICAgICJhY3Rp
b24iOiB7ICJ0eXBlIjogInJlZGlyZWN0IiwgInJlZGlyZWN0IjogeyAidHJhbnNmb3JtIjogewor
ICAgICAgICAgICAgICAgICJxdWVyeSI6ICI/IiwKKyAgICAgICAgICAgICAgICAiZnJhZ21lbnQi
OiAiIyIKKyAgICAgICAgICAgIH0gfSB9LAorICAgICAgICAgICAgInRyaWdnZXIiOiB7ICJ1cmwt
ZmlsdGVyIjogIjcudHh0IiB9CisgICAgICAgIH0sIHsKKyAgICAgICAgICAgICJhY3Rpb24iOiB7
ICJ0eXBlIjogInJlZGlyZWN0IiwgInJlZGlyZWN0IjogeyAidHJhbnNmb3JtIjogeworICAgICAg
ICAgICAgICAgICJxdWVyeS10cmFuc2Zvcm0iOiB7CisgICAgICAgICAgICAgICAgICAgICJyZW1v
dmUtcGFyYW1ldGVycyI6IFsgInBhcmFtZXRlci10by1yZW1vdmUiIF0sCisgICAgICAgICAgICAg
ICAgICAgICJhZGQtb3ItcmVwbGFjZS1wYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgICAg
ICAgICAgeyAia2V5IjogImtleS10by1hZGQiLCAidmFsdWUiOiAidmFsdWUtdG8tYWRkIiB9LAor
ICAgICAgICAgICAgICAgICAgICAgICAgeyAia2V5IjogImtleS10by1yZXBsYWNlLW9ubHkiLCAi
dmFsdWUiOiAidmFsdWUtdG8tcmVwbGFjZS1vbmx5IiwgInJlcGxhY2Utb25seSI6IHRydWUgfSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHsgImtleSI6ICJrZXktdG8tcmVwbGFjZS1vbmx5LWJ1
dC1ub3QtZm91bmQiLCAidmFsdWUiOiAidmFsdWUtdG8tcmVwbGFjZS1vbmx5LWJ1dC1ub3QtZm91
bmQiLCAicmVwbGFjZS1vbmx5IjogdHJ1ZSB9CisgICAgICAgICAgICAgICAgICAgIF0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9IH0gfSwKKyAgICAgICAgICAgICJ0cmlnZ2VyIjog
eyAidXJsLWZpbHRlciI6ICI4LnR4dCIgfQorICAgICAgICB9IF0KKyAgICApSlNPTiIpOworCisg
ICAgX19ibG9jayBib29sIHJlY2VpdmVkQWxsUmVxdWVzdHMgeyBmYWxzZSB9OworICAgIF9fYmxv
Y2sgYXV0byB1cmxzID0gYWRvcHROUyhbTlNNdXRhYmxlQXJyYXkgbmV3XSk7CisgICAgYXV0byBo
YW5kbGVyID0gYWRvcHROUyhbVGVzdFVSTFNjaGVtZUhhbmRsZXIgbmV3XSk7CisgICAgaGFuZGxl
ci5nZXQoKS5zdGFydFVSTFNjaGVtZVRhc2tIYW5kbGVyID0gXihXS1dlYlZpZXcgKiwgaWQgPFdL
VVJMU2NoZW1lVGFzaz4gdGFzaykgeworICAgICAgICBOU1VSTCAqdXJsID0gdGFzay5yZXF1ZXN0
LlVSTDsKKyAgICAgICAgW3VybHMgYWRkT2JqZWN0OnVybF07CisgICAgICAgIE5TU3RyaW5nICpw
YXRoID0gdXJsLnBhdGg7CisgICAgICAgIGlmIChbcGF0aCBpc0VxdWFsVG9TdHJpbmc6QCIvbWFp
bi5odG1sIl0pIHsKKyAgICAgICAgICAgIHJldHVybiByZXNwb25kKHRhc2ssIFIiSFRNTCgKKyAg
ICAgICAgICAgICAgICA8c2NyaXB0PgorICAgICAgICAgICAgICAgICAgICBhc3luYyBmdW5jdGlv
biBmZXRjaFN1YnJlc291cmNlcygpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRyeSB7IGF3YWl0IGZldGNoKCcxLnR4dCcpIH0gY2F0Y2goZSkgeyB9Owor
ICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsgYXdhaXQgZmV0Y2goJy8vbm90LXRlc3Rob3N0
LXNob3VsZC1ub3QtdHJpZ2dlci1hY3Rpb24vMi50eHQnLCB7bW9kZTonbm8tY29ycyd9KSB9IGNh
dGNoKGUpIHsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7IGF3YWl0IGZldGNoKCcv
L3Rlc3Rob3N0LzIudHh0JykgfSBjYXRjaChlKSB7IH07CisgICAgICAgICAgICAgICAgICAgICAg
ICB0cnkgeyBhd2FpdCBmZXRjaCgnLzMudHh0P3F1ZXJ5LXNob3VsZC1ub3QtYmUtcmVtb3ZlZCcp
IH0gY2F0Y2goZSkgeyB9OworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsgYXdhaXQgZmV0
Y2goJy8vdGVzdGhvc3Q6ODAvNC50eHQjZnJhZ21lbnQtc2hvdWxkLW5vdC1iZS1yZW1vdmVkJykg
fSBjYXRjaChlKSB7IH07CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeyBhd2FpdCBmZXRj
aCgnNS50eHQ/cXVlcnktc2hvdWxkLWJlLXJlbW92ZWQnKSB9IGNhdGNoKGUpIHsgfTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRyeSB7IGF3YWl0IGZldGNoKCc2LnR4dCNmcmFnbWVudC1zaG91
bGQtYmUtcmVtb3ZlZCcpIH0gY2F0Y2goZSkgeyB9OworICAgICAgICAgICAgICAgICAgICAgICAg
dHJ5IHsgYXdhaXQgZmV0Y2goJzcudHh0JykgfSBjYXRjaChlKSB7IH07CisgICAgICAgICAgICAg
ICAgICAgICAgICB0cnkgeyBhd2FpdCBmZXRjaCgnOC50eHQ/a2V5LXRvLXJlcGxhY2Utb25seT1w
cmUtcmVwbGFjZW1lbnQtdmFsdWUnKSB9IGNhdGNoKGUpIHsgfTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBmZXRjaFN1YnJlc291cmNlcygpOworICAgICAgICAg
ICAgICAgIDwvc2NyaXB0PgorICAgICAgICAgICAgKUhUTUwiKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoW3BhdGggaXNFcXVhbFRvU3RyaW5nOkAiLzgudHh0Il0pCisgICAgICAgICAgICByZWNl
aXZlZEFsbFJlcXVlc3RzID0gdHJ1ZTsKKyAgICAgICAgcmVzcG9uZCh0YXNrLCAiIik7CisgICAg
fTsKKworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1dLV2ViVmlld0NvbmZpZ3Vy
YXRpb24gbmV3XSk7CisgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0g
YWRkQ29udGVudFJ1bGVMaXN0Omxpc3QuZ2V0KCldOworICAgIFtjb25maWd1cmF0aW9uIHNldFVS
TFNjaGVtZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBmb3JVUkxTY2hlbWU6QCJ0ZXN0c2NoZW1lIl07
CisgICAgW2NvbmZpZ3VyYXRpb24gc2V0VVJMU2NoZW1lSGFuZGxlcjpoYW5kbGVyLmdldCgpIGZv
clVSTFNjaGVtZTpAIm90aGVydGVzdHNjaGVtZSJdOworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0
TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNaZXJvUmVjdCBjb25maWd1cmF0
aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICB3ZWJWaWV3LmdldCgpLm5hdmlnYXRpb25E
ZWxlZ2F0ZSA9IG5hdmlnYXRpb25EZWxlZ2F0ZUFsbG93aW5nQWN0aXZlQWN0aW9uc09uVGVzdEhv
c3QoKS5nZXQoKTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVl
c3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAidGVzdHNjaGVtZTovL3Rlc3Rob3N0L21h
aW4uaHRtbCJdXV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZEFsbFJl
cXVlc3RzKTsKKworICAgIFZlY3Rvcjxjb25zdCBjaGFyKj4gZXhwZWN0ZWRSZXF1ZXN0ZWRVUkxz
IHsKKyAgICAgICAgInRlc3RzY2hlbWU6Ly90ZXN0aG9zdC9tYWluLmh0bWwiLAorICAgICAgICAi
b3RoZXJ0ZXN0c2NoZW1lOi8vbm90LXRlc3Rob3N0LzEtcmVkaXJlY3RlZC50eHQiLAorICAgICAg
ICAidGVzdHNjaGVtZTovL25vdC10ZXN0aG9zdC1zaG91bGQtbm90LXRyaWdnZXItYWN0aW9uLzIu
dHh0IiwKKyAgICAgICAgInRlc3RzY2hlbWU6Ly9uZXd1c2VybmFtZUBuZXdob3N0OjQ0My8zLnR4
dD9xdWVyeS1zaG91bGQtbm90LWJlLXJlbW92ZWQiLAorICAgICAgICAib3RoZXJ0ZXN0c2NoZW1l
Oi8vdGVzdGhvc3QvNC50eHQ/a2V5PXZhbHVlI2ZyYWdtZW50LXNob3VsZC1ub3QtYmUtcmVtb3Zl
ZCIsCisgICAgICAgICJ0ZXN0c2NoZW1lOi8vOnRlc3RwYXNzd29yZEB0ZXN0aG9zdC81LnR4dCNm
cmFnbWVudC10by1iZS1hZGRlZCIsCisgICAgICAgICJ0ZXN0c2NoZW1lOi8vOnRlc3RwYXNzd29y
ZEB0ZXN0aG9zdC82LnR4dCIsCisgICAgICAgICJ0ZXN0c2NoZW1lOi8vdGVzdGhvc3QvNy50eHQ/
IyIsCisgICAgICAgICJ0ZXN0c2NoZW1lOi8vdGVzdGhvc3QvOC50eHQ/a2V5LXRvLXJlcGxhY2Ut
b25seT12YWx1ZS10by1yZXBsYWNlLW9ubHkma2V5LXRvLWFkZD12YWx1ZS10by1hZGQiLAorICAg
IH07CisgICAgRVhQRUNUX0VRKGV4cGVjdGVkUmVxdWVzdGVkVVJMcy5zaXplKCksIFt1cmxzIGNv
dW50XSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBleHBlY3RlZFJlcXVlc3RlZFVSTHMu
c2l6ZSgpOyBpKyspCisgICAgICAgIEVYUEVDVF9XS19TVFJFUShleHBlY3RlZFJlcXVlc3RlZFVS
THNbaV0sIFtbdXJscyBvYmplY3RBdEluZGV4OmldIGFic29sdXRlU3RyaW5nXSk7Cit9CisKK1RF
U1RfRihXS0NvbnRlbnRSdWxlTGlzdFN0b3JlVGVzdCwgTnVsbFBhdHRlcm5TZXQpCit7CisgICAg
YXV0byBsaXN0ID0gY29tcGlsZUNvbnRlbnRSdWxlTGlzdChSIkpTT04oCisgICAgICAgIFsgewor
ICAgICAgICAgICAgImFjdGlvbiI6IHsgInR5cGUiOiAicmVkaXJlY3QiLCAicmVkaXJlY3QiOiB7
CisgICAgICAgICAgICAgICAgInVybCI6ICJ0ZXN0c2NoZW1lOi8vdGVzdGhvc3QvbWFpbi1yZWRp
cmVjdGVkLmh0bWwiCisgICAgICAgICAgICB9IH0sCisgICAgICAgICAgICAidHJpZ2dlciI6IHsg
InVybC1maWx0ZXIiOiAibWFpbi5odG1sIiB9CisgICAgICAgIH0gXQorICAgIClKU09OIik7CisK
KyAgICBfX2Jsb2NrIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gcmVkaXJlY3RlZFJlc3VsdDsKKyAgICBh
dXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtUZXN0VVJMU2NoZW1lSGFuZGxlciBuZXddKTsKKyAgICBo
YW5kbGVyLmdldCgpLnN0YXJ0VVJMU2NoZW1lVGFza0hhbmRsZXIgPSBeKFdLV2ViVmlldyAqLCBp
ZCA8V0tVUkxTY2hlbWVUYXNrPiB0YXNrKSB7CisgICAgICAgIE5TU3RyaW5nICpwYXRoID0gdGFz
ay5yZXF1ZXN0LlVSTC5wYXRoOworICAgICAgICBpZiAoW3BhdGggaXNFcXVhbFRvU3RyaW5nOkAi
L21haW4uaHRtbCJdKQorICAgICAgICAgICAgcmVkaXJlY3RlZFJlc3VsdCA9IGZhbHNlOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIEVYUEVDVF9XS19TVFJFUShwYXRoLCAiL21haW4tcmVk
aXJlY3RlZC5odG1sIik7CisgICAgICAgICAgICByZWRpcmVjdGVkUmVzdWx0ID0gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICByZXNwb25kKHRhc2ssICIiKTsKKyAgICB9OworCisgICAgX19ibG9j
ayBlbnVtIGNsYXNzIERlbGVnYXRlQWN0aW9uIDogdWludDhfdCB7CisgICAgICAgIEFsbG93QWxs
LAorICAgICAgICBBbGxvd05vbmUsCisgICAgICAgIEFsbG93VGVzdEhvc3QsCisgICAgfSBkZWxl
Z2F0ZUFjdGlvbjsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbVGVzdE5hdmlnYXRpb25E
ZWxlZ2F0ZSBuZXddKTsKKyAgICBkZWxlZ2F0ZS5nZXQoKS5kZWNpZGVQb2xpY3lGb3JOYXZpZ2F0
aW9uQWN0aW9uV2l0aFByZWZlcmVuY2VzID0gXihXS05hdmlnYXRpb25BY3Rpb24gKiwgV0tXZWJw
YWdlUHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzLCB2b2lkICheZGVjaXNpb25IYW5kbGVyKShXS05h
dmlnYXRpb25BY3Rpb25Qb2xpY3ksIFdLV2VicGFnZVByZWZlcmVuY2VzICopKSB7CisgICAgICAg
IEVYUEVDVF9OT1RfTlVMTChwcmVmZXJlbmNlcy5fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9u
c1BhdHRlcm5zKTsKKyAgICAgICAgRVhQRUNUX0VRKHByZWZlcmVuY2VzLl9hY3RpdmVDb250ZW50
UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMuY291bnQsIDB1KTsKKyAgICAgICAgc3dpdGNoIChkZWxl
Z2F0ZUFjdGlvbikgeworICAgICAgICBjYXNlIERlbGVnYXRlQWN0aW9uOjpBbGxvd0FsbDoKKyAg
ICAgICAgICAgIHByZWZlcmVuY2VzLl9hY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVy
bnMgPSBuaWw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEZWxlZ2F0ZUFjdGlv
bjo6QWxsb3dOb25lOgorICAgICAgICAgICAgcHJlZmVyZW5jZXMuX2FjdGl2ZUNvbnRlbnRSdWxl
TGlzdEFjdGlvbnNQYXR0ZXJucyA9IFtOU1NldCBzZXRdOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRGVsZWdhdGVBY3Rpb246OkFsbG93VGVzdEhvc3Q6CisgICAgICAgICAgICBw
cmVmZXJlbmNlcy5fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5zID0gW05TU2V0
IHNldFdpdGhPYmplY3Q6QCIqOi8vdGVzdGhvc3QvKiJdOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgZGVjaXNpb25IYW5kbGVyKFdLTmF2aWdhdGlvbkFjdGlvblBvbGlj
eUFsbG93LCBwcmVmZXJlbmNlcyk7CisgICAgfTsKKworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9
IGFkb3B0TlMoW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gbmV3XSk7CisgICAgW1tjb25maWd1cmF0
aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkQ29udGVudFJ1bGVMaXN0Omxpc3QuZ2V0KCld
OworICAgIFtjb25maWd1cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBm
b3JVUkxTY2hlbWU6QCJ0ZXN0c2NoZW1lIl07CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhb
W1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU1plcm9SZWN0IGNvbmZpZ3VyYXRpb246
Y29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIHdlYlZpZXcuZ2V0KCkubmF2aWdhdGlvbkRlbGVn
YXRlID0gZGVsZWdhdGUuZ2V0KCk7CisKKyAgICBhdXRvIGdldFJlZGlyZWN0UmVzdWx0ID0gXihE
ZWxlZ2F0ZUFjdGlvbiBhY3Rpb24pIHsKKyAgICAgICAgZGVsZWdhdGVBY3Rpb24gPSBhY3Rpb247
CisgICAgICAgIHJlZGlyZWN0ZWRSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7CisgICAgICAgIFt3ZWJW
aWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdp
dGhTdHJpbmc6QCJ0ZXN0c2NoZW1lOi8vdGVzdGhvc3QvbWFpbi5odG1sIl1dXTsKKyAgICAgICAg
d2hpbGUgKCFyZWRpcmVjdGVkUmVzdWx0KQorICAgICAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6c3BpblJ1bkxvb3AoKTsKKyAgICAgICAgcmV0dXJuICpyZWRpcmVjdGVkUmVzdWx0OworICAg
IH07CisgICAgRVhQRUNUX1RSVUUoZ2V0UmVkaXJlY3RSZXN1bHQoRGVsZWdhdGVBY3Rpb246OkFs
bG93QWxsKSk7CisgICAgRVhQRUNUX0ZBTFNFKGdldFJlZGlyZWN0UmVzdWx0KERlbGVnYXRlQWN0
aW9uOjpBbGxvd05vbmUpKTsKKyAgICBFWFBFQ1RfVFJVRShnZXRSZWRpcmVjdFJlc3VsdChEZWxl
Z2F0ZUFjdGlvbjo6QWxsb3dUZXN0SG9zdCkpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444591</attachid>
            <date>2021-11-17 15:39:02 -0800</date>
            <delta_ts>2021-11-17 16:54:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233268-20211117153901.patch</filename>
            <type>text/plain</type>
            <size>95585</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NTk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBACisyMDIxLTExLTE3ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50
IG1vc3Qgb2YgcmVkaXJlY3QgYW5kIG1vZGlmeS1oZWFkZXJzIGFjdGlvbiB0eXBlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzMjY4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRz
IG1vZGlmeS1oZWFkZXJzIGFuZCByZWRpcmVjdCBhY3Rpb25zIGV4Y2VwdCBmb3IgZXh0ZW5zaW9u
LXBhdGggYW5kIHJlZ2V4LXN1YnN0aXR1dGlvbiB2YXJpYW50cyBvZiByZWRpcmVjdGluZywKKyAg
ICAgICAgd2hpY2ggYXJlIGJpZyBlbm91Z2ggdG8gYmUgaW1wbGVtZW50ZWQgaW4gdGhlaXIgb3du
IHBhdGNoLiAgSW4gb3JkZXIgdG8gZW5hYmxlIHRoZXNlIGFjdGlvbnMsIHRoZSBXS0NvbnRlbnRS
dWxlTGlzdCBuZWVkcyB0bworICAgICAgICBiZSBjb21waWxlZCB3aXRoIG5ldyBTUEkgd2hlcmUg
eW91IHNwZWNpZnkgd2hpY2ggc2NoZW1lcyBhcmUgYWxsb3dlZCB0byBiZSByZWRpcmVjdGVkIHRv
LCBhbmQgU1BJIGluIFdLV2VicGFnZVByZWZlcmVuY2VzIGFsbG93cworICAgICAgICBhZGRpdGlv
biBvZiBhIHNldCBvZiBwYXR0ZXJucyB0byBzcGVjaWZ5IHdoaWNoIFVSTHMgYXJlIGFsbG93ZWQg
dG8gYmUgbW9kaWZpZWQuICBBbiBlbXB0eSBzZXQgbWVhbnMgbm8gYWN0aXZlIGFjdGlvbnMgYXJl
IGFsbG93ZWQsCisgICAgICAgIHdoaWNoIGlzIHRoZSBkZWZhdWx0LCB3aGVyZWFzIGEgbnVsbCBz
ZXQgbWVhbnMgYWxsIGFjdGl2ZSBhY3Rpb25zIGFyZSBhbGxvd2VkLgorCisgICAgICAgIEkgYWxz
byBtYWRlIHRoZSBwYXJzZXIgYSBsaXR0bGUgYml0IHN0cmljdGVyLCBzdWNoIGFzIG9ubHkgYWxs
b3dpbmcgdmFsaWQgcG9ydHMsIHF1ZXJpZXMsIGFuZCBmcmFnbWVudHMuCisKKyAgICAgICAgKiBN
b2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHA6CisgICAgICAgICogY29udGVu
dGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkFjdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudEV4dGVuc2lvbnM6Ok1vZGlmeUhlYWRlcnNBY3Rpb246Om9wZXJhdG9yPT0gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Ok1vZGlmeUhlYWRlcnNB
Y3Rpb246OmFwcGx5VG9SZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpNb2RpZnlIZWFkZXJzQWN0aW9uOjpNb2RpZnlIZWFkZXJJbmZvOjphcHBseVRvUmVxdWVz
dCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6UmVkaXJlY3RBY3Rpb246
OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpSZWRpcmVjdEFj
dGlvbjo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6UmVkaXJlY3RBY3Rpb246OmFwcGx5VG9SZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRFeHRlbnNpb25zOjpSZWRpcmVjdEFjdGlvbjo6VVJMVHJhbnNmb3JtQWN0aW9uOjpw
YXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6UmVkaXJlY3RBY3Rp
b246OlVSTFRyYW5zZm9ybUFjdGlvbjo6c2VyaWFsaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpSZWRpcmVjdEFjdGlvbjo6VVJMVHJhbnNmb3JtQWN0aW9u
OjpkZXNlcmlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6UmVk
aXJlY3RBY3Rpb246OlVSTFRyYW5zZm9ybUFjdGlvbjo6YXBwbHlUb1VSTCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6UmVkaXJlY3RBY3Rpb246OlVSTFRyYW5z
Zm9ybUFjdGlvbjo6UXVlcnlUcmFuc2Zvcm06OmFwcGx5VG9VUkwgY29uc3QpOgorICAgICAgICAq
IGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25BY3Rpb25zLmg6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VmFyaWFudEhhc2hlcjo6aGFzaCk6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VmVjdG9ySGFzaGVyOjpoYXNoKToKKyAgICAg
ICAgKFdURjo6RGVmYXVsdEhhc2g8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlJlZGlyZWN0
QWN0aW9uPjo6aGFzaCk6CisgICAgICAgIChXVEY6OkRlZmF1bHRIYXNoPFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpSZWRpcmVjdEFjdGlvbj46OmVxdWFsKToKKyAgICAgICAgKFdURjo6RGVm
YXVsdEhhc2g8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Ok1vZGlmeUhlYWRlcnNBY3Rpb24+
OjpoYXNoKToKKyAgICAgICAgKFdURjo6RGVmYXVsdEhhc2g8V2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6Ok1vZGlmeUhlYWRlcnNBY3Rpb24+OjplcXVhbCk6CisgICAgICAgICogY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRFeHRlbnNpb25zOjpzZXJpYWxpemVBY3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRFeHRlbnNpb25zOjpjb21waWxlUnVsZUxpc3QpOgorICAgICAgICAqIGNvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZW50RXh0ZW5zaW9uczo6Y29udGVudEV4dGVuc2lvbkVycm9yQ2F0ZWdvcnkpOgorICAgICAg
ICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5oOgorICAgICAgICAq
IGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmxvYWRBY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudEV4dGVuc2lvbnM6OmxvYWRSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpsb2FkRW5jb2RlZFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpwYXJzZVJ1bGVMaXN0KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9u
cy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmg6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMv
Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OnByb2Nlc3NDb250ZW50UnVsZUxp
c3RzRm9yTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVu
dEV4dGVuc2lvbnNCYWNrZW5kOjpwcm9jZXNzQ29udGVudFJ1bGVMaXN0c0ZvclBpbmdMb2FkKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjphcHBseVJlc3VsdHNUb1JlcXVl
c3QpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRSdWxlTGlzdFJlc3VsdHMu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRSdWxlTGlzdFJlc3VsdHM6OlN1bW1hcnk6OmRl
Y29kZSk6CisgICAgICAgICogY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHA6CisgICAgICAgICog
bG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9h
ZGVyOjpzZXRBY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMpOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OmFsbG93c0FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlv
bnNGb3JVUkwgY29uc3QpOgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpyZW1vdmVIVFRQSGVhZGVyRmllbGQpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oOgorCiAyMDIx
LTExLTE3ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIExv
Y2tzIEFQSSBkb2VzIGdldCBlbmFibGVkIGluIFNlcnZpY2UgV29ya2VycyB3aGVuIHJ1bm5pbmcg
bGF5b3V0IHRlc3RzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2Vi
U29ja2V0Q2hhbm5lbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJXZWJTb2NrZXRDaGFubmVsLmgi
CiAKICNpbmNsdWRlICJCbG9iLmgiCi0jaW5jbHVkZSAiQ29udGVudFJ1bGVMaXN0UmVzdWx0cy5o
IgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbkFjdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25BY3Rpb25zLmNwcAkocmV2aXNp
b24gMjg1OTU0KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4
dGVuc2lvbkFjdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw4IEBACiAjaW5j
bHVkZSAiQ29udGVudEV4dGVuc2lvbkVycm9yLmgiCiAjaW5jbHVkZSA8d3RmL0Nyb3NzVGhyZWFk
Q29waWVyLmg+CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgorI2luY2x1ZGUgPHd0Zi9VUkxQYXJzZXIu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdUb0ludGVnZXJDb252ZXJzaW9uLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9ucyB7CiAKQEAgLTEyMSw3ICsxMjMsOCBA
QCBNb2RpZnlIZWFkZXJzQWN0aW9uIE1vZGlmeUhlYWRlcnNBY3Rpb246CiAKIGJvb2wgTW9kaWZ5
SGVhZGVyc0FjdGlvbjo6b3BlcmF0b3I9PShjb25zdCBNb2RpZnlIZWFkZXJzQWN0aW9uJiBvdGhl
cikgY29uc3QKIHsKLSAgICByZXR1cm4gb3RoZXIucmVxdWVzdEhlYWRlcnMgPT0gdGhpcy0+cmVx
dWVzdEhlYWRlcnMKKyAgICByZXR1cm4gb3RoZXIuaGFzaFRhYmxlVHlwZSA9PSB0aGlzLT5oYXNo
VGFibGVUeXBlCisgICAgICAgICYmIG90aGVyLnJlcXVlc3RIZWFkZXJzID09IHRoaXMtPnJlcXVl
c3RIZWFkZXJzCiAgICAgICAgICYmIG90aGVyLnJlc3BvbnNlSGVhZGVycyA9PSB0aGlzLT5yZXNw
b25zZUhlYWRlcnM7CiB9CiAKQEAgLTE2Niw2ICsxNjksMjcgQEAgc2l6ZV90IE1vZGlmeUhlYWRl
cnNBY3Rpb246OnNlcmlhbGl6ZWRMZQogICAgIHJldHVybiBkZXNlcmlhbGl6ZUxlbmd0aChzcGFu
LCAwKTsKIH0KIAordm9pZCBNb2RpZnlIZWFkZXJzQWN0aW9uOjphcHBseVRvUmVxdWVzdChSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgZm9yIChhdXRvJiBpbmZvIDogcmVxdWVzdEhl
YWRlcnMpCisgICAgICAgIGluZm8uYXBwbHlUb1JlcXVlc3QocmVxdWVzdCk7Cit9CisKK3ZvaWQg
TW9kaWZ5SGVhZGVyc0FjdGlvbjo6TW9kaWZ5SGVhZGVySW5mbzo6YXBwbHlUb1JlcXVlc3QoUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHN0ZDo6dmlzaXQoV1RGOjptYWtlVmlzaXRv
cihbJl0gKGNvbnN0IEFwcGVuZE9wZXJhdGlvbiYgb3BlcmF0aW9uKSB7CisgICAgICAgIGF1dG8g
ZXhpc3RpbmdWYWx1ZSA9IHJlcXVlc3QuaHR0cEhlYWRlckZpZWxkKG9wZXJhdGlvbi5oZWFkZXIp
OworICAgICAgICBpZiAoZXhpc3RpbmdWYWx1ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXF1
ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChvcGVyYXRpb24uaGVhZGVyLCBvcGVyYXRpb24udmFsdWUp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChv
cGVyYXRpb24uaGVhZGVyLCBtYWtlU3RyaW5nKGV4aXN0aW5nVmFsdWUsICI7ICIsIG9wZXJhdGlv
bi52YWx1ZSkpOworICAgIH0sIFsmXSAoY29uc3QgU2V0T3BlcmF0aW9uJiBvcGVyYXRpb24pIHsK
KyAgICAgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQob3BlcmF0aW9uLmhlYWRlciwgb3Bl
cmF0aW9uLnZhbHVlKTsKKyAgICB9LCBbJl0gKGNvbnN0IFJlbW92ZU9wZXJhdGlvbiYgb3BlcmF0
aW9uKSB7CisgICAgICAgIHJlcXVlc3QucmVtb3ZlSFRUUEhlYWRlckZpZWxkKG9wZXJhdGlvbi5o
ZWFkZXIpOworICAgIH0pLCBvcGVyYXRpb24pOworfQorCiBhdXRvIE1vZGlmeUhlYWRlcnNBY3Rp
b246Ok1vZGlmeUhlYWRlckluZm86OnBhcnNlKGNvbnN0IEpTT046OlZhbHVlJiBpbmZvVmFsdWUp
IC0+IEV4cGVjdGVkPE1vZGlmeUhlYWRlckluZm8sIHN0ZDo6ZXJyb3JfY29kZT4KIHsKICAgICBh
dXRvIG9iamVjdCA9IGluZm9WYWx1ZS5hc09iamVjdCgpOwpAQCAtMjU1LDcgKzI3OSw3IEBAIHNp
emVfdCBNb2RpZnlIZWFkZXJzQWN0aW9uOjpNb2RpZnlIZWFkZXIKICAgICByZXR1cm4gZGVzZXJp
YWxpemVMZW5ndGgoc3BhbiwgMCk7CiB9CiAKLUV4cGVjdGVkPFJlZGlyZWN0QWN0aW9uLCBzdGQ6
OmVycm9yX2NvZGU+IFJlZGlyZWN0QWN0aW9uOjpwYXJzZShjb25zdCBKU09OOjpPYmplY3QmIHJl
ZGlyZWN0T2JqZWN0LCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGFsbG93ZWRSZWRpcmVjdFVSTFNj
aGVtZXMpCitFeHBlY3RlZDxSZWRpcmVjdEFjdGlvbiwgc3RkOjplcnJvcl9jb2RlPiBSZWRpcmVj
dEFjdGlvbjo6cGFyc2UoY29uc3QgSlNPTjo6T2JqZWN0JiByZWRpcmVjdE9iamVjdCwgY29uc3Qg
c3RkOjpvcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+JiBhbGxvd2VkUmVkaXJlY3RVUkxTY2hlbWVz
KQogewogICAgIGF1dG8gcmVkaXJlY3QgPSByZWRpcmVjdE9iamVjdC5nZXRPYmplY3QoInJlZGly
ZWN0Iik7CiAgICAgaWYgKCFyZWRpcmVjdCkKQEAgLTI3NywxMCArMzAxLDEzIEBAIEV4cGVjdGVk
PFJlZGlyZWN0QWN0aW9uLCBzdGQ6OmVycm9yX2NvZGUKICAgICAgICAgcmV0dXJuIFJlZGlyZWN0
QWN0aW9uIHsgV1RGTW92ZSgqcGFyc2VkVHJhbnNmb3JtKSB9OwogICAgIH0KIAotICAgIGlmIChh
dXRvIHVybCA9IHJlZGlyZWN0LT5nZXRTdHJpbmcoInVybCIpOyAhIXVybCkgewotICAgICAgICBp
ZiAoIWFsbG93ZWRSZWRpcmVjdFVSTFNjaGVtZXMuY29udGFpbnMoVVJMKFVSTCgpLCB1cmwpLnBy
b3RvY29sKCkudG9TdHJpbmdXaXRob3V0Q29weWluZygpKSkKKyAgICBpZiAoYXV0byB1cmxTdHJp
bmcgPSByZWRpcmVjdC0+Z2V0U3RyaW5nKCJ1cmwiKTsgISF1cmxTdHJpbmcpIHsKKyAgICAgICAg
YXV0byB1cmwgPSBVUkwoVVJMKCksIHVybFN0cmluZyk7CisgICAgICAgIGlmICghdXJsLmlzVmFs
aWQoKSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9u
RXJyb3I6OkpTT05SZWRpcmVjdFVSTEludmFsaWQpOworICAgICAgICBpZiAoYWxsb3dlZFJlZGly
ZWN0VVJMU2NoZW1lcyAmJiAhYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcy0+Y29udGFpbnModXJs
LnByb3RvY29sKCkudG9TdHJpbmdXaXRob3V0Q29weWluZygpKSkKICAgICAgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTFNj
aGVtZU5vdEFsbG93ZWQpOwotICAgICAgICByZXR1cm4gUmVkaXJlY3RBY3Rpb24geyBVUkxBY3Rp
b24geyBXVEZNb3ZlKHVybCkgfSB9OworICAgICAgICByZXR1cm4gUmVkaXJlY3RBY3Rpb24geyBV
UkxBY3Rpb24geyBXVEZNb3ZlKHVybFN0cmluZykgfSB9OwogICAgIH0KIAogICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdEludmFsaWRU
eXBlKTsKQEAgLTI5NSw3ICszMjIsOCBAQCBSZWRpcmVjdEFjdGlvbiBSZWRpcmVjdEFjdGlvbjo6
aXNvbGF0ZWRDCiAKIGJvb2wgUmVkaXJlY3RBY3Rpb246Om9wZXJhdG9yPT0oY29uc3QgUmVkaXJl
Y3RBY3Rpb24mIG90aGVyKSBjb25zdAogewotICAgIHJldHVybiBvdGhlci5hY3Rpb24gPT0gdGhp
cy0+YWN0aW9uOworICAgIHJldHVybiBvdGhlci5oYXNoVGFibGVUeXBlID09IHRoaXMtPmhhc2hU
YWJsZVR5cGUKKyAgICAgICAgJiYgb3RoZXIuYWN0aW9uID09IHRoaXMtPmFjdGlvbjsKIH0KIAog
dm9pZCBSZWRpcmVjdEFjdGlvbjo6c2VyaWFsaXplKFZlY3Rvcjx1aW50OF90PiYgdmVjdG9yKSBj
b25zdApAQCAtMzQwLDI2ICszNjgsNjQgQEAgc2l6ZV90IFJlZGlyZWN0QWN0aW9uOjpzZXJpYWxp
emVkTGVuZ3RoKAogICAgIHJldHVybiBkZXNlcmlhbGl6ZUxlbmd0aChzcGFuLCAwKTsKIH0KIAot
YXV0byBSZWRpcmVjdEFjdGlvbjo6VVJMVHJhbnNmb3JtQWN0aW9uOjpwYXJzZShjb25zdCBKU09O
OjpPYmplY3QmIHRyYW5zZm9ybSwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhbGxvd2VkUmVkaXJl
Y3RVUkxTY2hlbWVzKSAtPiBFeHBlY3RlZDxVUkxUcmFuc2Zvcm1BY3Rpb24sIHN0ZDo6ZXJyb3Jf
Y29kZT4KK3ZvaWQgUmVkaXJlY3RBY3Rpb246OmFwcGx5VG9SZXF1ZXN0KFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCkKK3sKKyAgICBzdGQ6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oY29uc3Qg
RXh0ZW5zaW9uUGF0aEFjdGlvbiYpIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudC4gV2Ug
bmVlZCB0byBrbm93IHRoZSBiYXNlIFVSTCBvZiB0aGUgZXh0ZW5zaW9uIGhlcmUgZnJvbSBuZXcg
U1BJLgorICAgIH0sIFsmXSAoY29uc3QgUmVnZXhTdWJzdGl0dXRpb25BY3Rpb24mKSB7CisgICAg
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQsIGlkZWFsbHkgaW4gYSB3YXkgdGhhdCBkb2Vzbid0IHJl
cXVpcmUgbWFraW5nIGEgbmV3IFZNIGFuZCBnbG9iYWwgb2JqZWN0IGZvciBlYWNoIHJlZGlyZWN0
IG9wZXJhdGlvbi4KKyAgICB9LCBbJl0gKGNvbnN0IFVSTFRyYW5zZm9ybUFjdGlvbiYgYWN0aW9u
KSB7CisgICAgICAgIGF1dG8gdXJsID0gcmVxdWVzdC51cmwoKTsKKyAgICAgICAgYWN0aW9uLmFw
cGx5VG9VUkwodXJsKTsKKyAgICAgICAgcmVxdWVzdC5zZXRVUkwoV1RGTW92ZSh1cmwpKTsKKyAg
ICB9LCBbJl0gKGNvbnN0IFVSTEFjdGlvbiYgYWN0aW9uKSB7CisgICAgICAgIHJlcXVlc3Quc2V0
VVJMKFVSTChVUkwoKSwgYWN0aW9uLnVybCkpOworICAgIH0pLCBhY3Rpb24pOworfQorCithdXRv
IFJlZGlyZWN0QWN0aW9uOjpVUkxUcmFuc2Zvcm1BY3Rpb246OnBhcnNlKGNvbnN0IEpTT046Ok9i
amVjdCYgdHJhbnNmb3JtLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEhhc2hTZXQ8U3RyaW5nPj4mIGFs
bG93ZWRSZWRpcmVjdFVSTFNjaGVtZXMpIC0+IEV4cGVjdGVkPFVSTFRyYW5zZm9ybUFjdGlvbiwg
c3RkOjplcnJvcl9jb2RlPgogewogICAgIFVSTFRyYW5zZm9ybUFjdGlvbiBhY3Rpb247Ci0gICAg
YWN0aW9uLmZyYWdtZW50ID0gdHJhbnNmb3JtLmdldFN0cmluZygiZnJhZ21lbnQiKTsKKyAgICBp
ZiAoYXV0byBmcmFnbWVudCA9IHRyYW5zZm9ybS5nZXRTdHJpbmcoImZyYWdtZW50Iik7ICEhZnJh
Z21lbnQpIHsKKyAgICAgICAgaWYgKCFmcmFnbWVudC5pc0VtcHR5KCkgJiYgIWZyYWdtZW50LnN0
YXJ0c1dpdGgoJyMnKSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50
RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdEludmFsaWRGcmFnbWVudCk7CisgICAgICAgIGFj
dGlvbi5mcmFnbWVudCA9IFdURk1vdmUoZnJhZ21lbnQpOworICAgIH0KICAgICBhY3Rpb24uaG9z
dCA9IHRyYW5zZm9ybS5nZXRTdHJpbmcoImhvc3QiKTsKICAgICBhY3Rpb24ucGFzc3dvcmQgPSB0
cmFuc2Zvcm0uZ2V0U3RyaW5nKCJwYXNzd29yZCIpOwogICAgIGFjdGlvbi5wYXRoID0gdHJhbnNm
b3JtLmdldFN0cmluZygicGF0aCIpOwotICAgIGFjdGlvbi5wb3J0ID0gdHJhbnNmb3JtLmdldFN0
cmluZygicG9ydCIpOwotICAgIGF1dG8gc2NoZW1lID0gdHJhbnNmb3JtLmdldFN0cmluZygic2No
ZW1lIik7Ci0gICAgaWYgKCEhc2NoZW1lICYmICFhbGxvd2VkUmVkaXJlY3RVUkxTY2hlbWVzLmNv
bnRhaW5zKHNjaGVtZSkpCi0gICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0
ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTFNjaGVtZU5vdEFsbG93ZWQpOwotICAgIGFjdGlv
bi5zY2hlbWUgPSBXVEZNb3ZlKHNjaGVtZSk7CisgICAgYXV0byBwb3J0ID0gdHJhbnNmb3JtLmdl
dFN0cmluZygicG9ydCIpOworICAgIGlmICghIXBvcnQpIHsKKyAgICAgICAgaWYgKHBvcnQuaXNF
bXB0eSgpKQorICAgICAgICAgICAgYWN0aW9uLnBvcnQgPSB7IHN0ZDo6b3B0aW9uYWw8dWludDE2
X3Q+IHsgfSB9OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8gcGFyc2VkUG9ydCA9
IHBhcnNlSW50ZWdlcjx1aW50MTZfdD4oU3RyaW5nVmlldyhwb3J0KSk7CisgICAgICAgICAgICBp
ZiAoIXBhcnNlZFBvcnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENv
bnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTlJlZGlyZWN0SW52YWxpZFBvcnQpOworICAgICAgICAg
ICAgYWN0aW9uLnBvcnQgPSB7IHBhcnNlZFBvcnQgfTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmIChhdXRvIHVuY2Fub25pY2FsaXplZFNjaGVtZSA9IHRyYW5zZm9ybS5nZXRTdHJpbmcoInNj
aGVtZSIpOyAhIXVuY2Fub25pY2FsaXplZFNjaGVtZSkgeworICAgICAgICBhdXRvIHNjaGVtZSA9
IFdURjo6VVJMUGFyc2VyOjptYXliZUNhbm9uaWNhbGl6ZVNjaGVtZSh1bmNhbm9uaWNhbGl6ZWRT
Y2hlbWUpOworICAgICAgICBpZiAoIXNjaGVtZSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTFNjaGVtZUludmFs
aWQpOworICAgICAgICBpZiAoYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcyAmJiAhYWxsb3dlZFJl
ZGlyZWN0VVJMU2NoZW1lcy0+Y29udGFpbnMoKnNjaGVtZSkpCisgICAgICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RVUkxTY2hl
bWVOb3RBbGxvd2VkKTsKKyAgICAgICAgYWN0aW9uLnNjaGVtZSA9IFdURk1vdmUoKnNjaGVtZSk7
CisgICAgfQogICAgIGFjdGlvbi51c2VybmFtZSA9IHRyYW5zZm9ybS5nZXRTdHJpbmcoInVzZXJu
YW1lIik7CiAgICAgaWYgKGF1dG8gcXVlcnlUcmFuc2Zvcm0gPSB0cmFuc2Zvcm0uZ2V0T2JqZWN0
KCJxdWVyeS10cmFuc2Zvcm0iKSkgewogICAgICAgICBhdXRvIHBhcnNlZFF1ZXJ5VHJhbnNmb3Jt
ID0gUXVlcnlUcmFuc2Zvcm06OnBhcnNlKCpxdWVyeVRyYW5zZm9ybSk7CiAgICAgICAgIGlmICgh
cGFyc2VkUXVlcnlUcmFuc2Zvcm0pCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
cGFyc2VkUXVlcnlUcmFuc2Zvcm0uZXJyb3IoKSk7CiAgICAgICAgIGFjdGlvbi5xdWVyeVRyYW5z
Zm9ybSA9ICpwYXJzZWRRdWVyeVRyYW5zZm9ybTsKLSAgICB9IGVsc2UKLSAgICAgICAgYWN0aW9u
LnF1ZXJ5VHJhbnNmb3JtID0gdHJhbnNmb3JtLmdldFN0cmluZygicXVlcnkiKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBhdXRvIHF1ZXJ5ID0gdHJhbnNmb3JtLmdldFN0cmluZygicXVlcnkiKTsK
KyAgICAgICAgaWYgKCFxdWVyeS5pc0VtcHR5KCkgJiYgIXF1ZXJ5LnN0YXJ0c1dpdGgoJz8nKSkK
KyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6
OkpTT05SZWRpcmVjdEludmFsaWRRdWVyeSk7CisgICAgICAgIGFjdGlvbi5xdWVyeVRyYW5zZm9y
bSA9IFdURk1vdmUocXVlcnkpOworICAgIH0KICAgICByZXR1cm4gYWN0aW9uOwogfQogCkBAIC0z
OTksMTMgKzQ2NSwxMyBAQCB2b2lkIFJlZGlyZWN0QWN0aW9uOjpVUkxUcmFuc2Zvcm1BY3Rpb246
CiAgICAgdWludDhfdCBoYXNTY2hlbWUgPSAhIXNjaGVtZTsKICAgICB1aW50OF90IGhhc1VzZXJu
YW1lID0gISF1c2VybmFtZTsKICAgICBhdXRvKiBxdWVyeVN0cmluZyA9IHN0ZDo6Z2V0X2lmPFN0
cmluZz4oJnF1ZXJ5VHJhbnNmb3JtKTsKKyAgICBhdXRvIHF1ZXJ5U3RyaW5nVVRGOCA9IHF1ZXJ5
U3RyaW5nID8gcXVlcnlTdHJpbmctPnV0ZjgoKSA6IENTdHJpbmcoKTsKICAgICB1aW50OF90IGhh
c1F1ZXJ5ID0gIXF1ZXJ5U3RyaW5nIHx8ICEhKnF1ZXJ5U3RyaW5nOwogCiAgICAgYXV0byBmcmFn
bWVudFVURjggPSBmcmFnbWVudC51dGY4KCk7CiAgICAgYXV0byBob3N0VVRGOCA9IGhvc3QudXRm
OCgpOwogICAgIGF1dG8gcGFzc3dvcmRVVEY4ID0gcGFzc3dvcmQudXRmOCgpOwogICAgIGF1dG8g
cGF0aFVURjggPSBwYXRoLnV0ZjgoKTsKLSAgICBhdXRvIHBvcnRVVEY4ID0gcG9ydC51dGY4KCk7
CiAgICAgYXV0byBzY2hlbWVVVEY4ID0gc2NoZW1lLnV0ZjgoKTsKICAgICBhdXRvIHVzZXJuYW1l
VVRGOCA9IHVzZXJuYW1lLnV0ZjgoKTsKIApAQCAtNDE0LDkgKzQ4MCwxMCBAQCB2b2lkIFJlZGly
ZWN0QWN0aW9uOjpVUkxUcmFuc2Zvcm1BY3Rpb246CiAgICAgICAgICsgKGhhc0hvc3QgPyBzaXpl
b2YodWludDMyX3QpICsgaG9zdFVURjgubGVuZ3RoKCkgOiAwKQogICAgICAgICArIChoYXNQYXNz
d29yZCA/IHNpemVvZih1aW50MzJfdCkgKyBwYXNzd29yZFVURjgubGVuZ3RoKCkgOiAwKQogICAg
ICAgICArIChoYXNQYXRoID8gc2l6ZW9mKHVpbnQzMl90KSArIHBhdGhVVEY4Lmxlbmd0aCgpIDog
MCkKLSAgICAgICAgKyAoaGFzUG9ydCA/IHNpemVvZih1aW50MzJfdCkgKyBwb3J0VVRGOC5sZW5n
dGgoKSA6IDApCiAgICAgICAgICsgKGhhc1NjaGVtZSA/IHNpemVvZih1aW50MzJfdCkgKyBzY2hl
bWVVVEY4Lmxlbmd0aCgpIDogMCkKLSAgICAgICAgKyAoaGFzVXNlcm5hbWUgPyBzaXplb2YodWlu
dDMyX3QpICsgdXNlcm5hbWVVVEY4Lmxlbmd0aCgpIDogMCkpOworICAgICAgICArIChoYXNVc2Vy
bmFtZSA/IHNpemVvZih1aW50MzJfdCkgKyB1c2VybmFtZVVURjgubGVuZ3RoKCkgOiAwKQorICAg
ICAgICArIChoYXNQb3J0ID8gMSArICgqcG9ydCA/IHNpemVvZih1aW50MTZfdCkgOiAwKSA6IDAp
CisgICAgICAgICsgKGhhc1F1ZXJ5ID8gMSArIChxdWVyeVN0cmluZyA/IHNpemVvZih1aW50MzJf
dCkgKyBxdWVyeVN0cmluZ1VURjgubGVuZ3RoKCkgOiAwKSA6IDApKTsKIAogICAgIGF1dG8gYmVn
aW5JbmRleCA9IHZlY3Rvci5zaXplKCk7CiAgICAgdW5jaGVja2VkQXBwZW5kKHZlY3RvciwgMCk7
CkBAIC00NDIsMTggKzUwOSwyMiBAQCB2b2lkIFJlZGlyZWN0QWN0aW9uOjpVUkxUcmFuc2Zvcm1B
Y3Rpb246CiAgICAgICAgIHVuY2hlY2tlZEFwcGVuZExlbmd0aEFuZFN0cmluZyhwYXNzd29yZFVU
RjgpOwogICAgIGlmIChoYXNQYXRoKQogICAgICAgICB1bmNoZWNrZWRBcHBlbmRMZW5ndGhBbmRT
dHJpbmcocGF0aFVURjgpOwotICAgIGlmIChoYXNQb3J0KQotICAgICAgICB1bmNoZWNrZWRBcHBl
bmRMZW5ndGhBbmRTdHJpbmcocG9ydFVURjgpOwogICAgIGlmIChoYXNTY2hlbWUpCiAgICAgICAg
IHVuY2hlY2tlZEFwcGVuZExlbmd0aEFuZFN0cmluZyhzY2hlbWVVVEY4KTsKICAgICBpZiAoaGFz
VXNlcm5hbWUpCiAgICAgICAgIHVuY2hlY2tlZEFwcGVuZExlbmd0aEFuZFN0cmluZyh1c2VybmFt
ZVVURjgpOworICAgIGlmIChoYXNQb3J0KSB7CisgICAgICAgIHZlY3Rvci51bmNoZWNrZWRBcHBl
bmQoISEqcG9ydCk7CisgICAgICAgIGlmICgqcG9ydCkgeworICAgICAgICAgICAgdmVjdG9yLnVu
Y2hlY2tlZEFwcGVuZCgqKnBvcnQgPj4gMCk7CisgICAgICAgICAgICB2ZWN0b3IudW5jaGVja2Vk
QXBwZW5kKCoqcG9ydCA+PiA4KTsKKyAgICAgICAgfQorICAgIH0KICAgICBpZiAoaGFzUXVlcnkp
IHsKLSAgICAgICAgdmVjdG9yLmFwcGVuZChxdWVyeVRyYW5zZm9ybS5pbmRleCgpKTsKLSAgICAg
ICAgc3RkOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShjb25zdCBTdHJpbmcmIHF1ZXJ5U3Ry
aW5nKSB7Ci0gICAgICAgICAgICBhdXRvIHF1ZXJ5U3RyaW5nVVRGOCA9IHF1ZXJ5U3RyaW5nLnV0
ZjgoKTsKLSAgICAgICAgICAgIGFwcGVuZCh2ZWN0b3IsIHF1ZXJ5U3RyaW5nVVRGOC5sZW5ndGgo
KSk7Ci0gICAgICAgICAgICBhcHBlbmQodmVjdG9yLCBxdWVyeVN0cmluZ1VURjgpOworICAgICAg
ICB2ZWN0b3IudW5jaGVja2VkQXBwZW5kKHF1ZXJ5VHJhbnNmb3JtLmluZGV4KCkpOworICAgICAg
ICBzdGQ6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKGNvbnN0IFN0cmluZyYpIHsKKyAgICAg
ICAgICAgIHVuY2hlY2tlZEFwcGVuZCh2ZWN0b3IsIHF1ZXJ5U3RyaW5nVVRGOC5sZW5ndGgoKSk7
CisgICAgICAgICAgICB1bmNoZWNrZWRBcHBlbmQodmVjdG9yLCBxdWVyeVN0cmluZ1VURjgpOwog
ICAgICAgICB9LCBbJl0oY29uc3QgUXVlcnlUcmFuc2Zvcm0mIHRyYW5zZm9ybSkgewogICAgICAg
ICAgICAgdHJhbnNmb3JtLnNlcmlhbGl6ZSh2ZWN0b3IpOwogICAgICAgICB9KSwgcXVlcnlUcmFu
c2Zvcm0pOwpAQCAtNDg3LDkgKzU1OCwxOCBAQCBhdXRvIFJlZGlyZWN0QWN0aW9uOjpVUkxUcmFu
c2Zvcm1BY3Rpb246CiAgICAgYXV0byBob3N0ID0gaGFzSG9zdCA/IGRlc2VyaWFsaXplU3RyaW5n
KCkgOiBTdHJpbmcoKTsKICAgICBhdXRvIHBhc3N3b3JkID0gaGFzUGFzc3dvcmQgPyBkZXNlcmlh
bGl6ZVN0cmluZygpIDogU3RyaW5nKCk7CiAgICAgYXV0byBwYXRoID0gaGFzUGF0aCA/IGRlc2Vy
aWFsaXplU3RyaW5nKCkgOiBTdHJpbmcoKTsKLSAgICBhdXRvIHBvcnQgPSBoYXNQb3J0ID8gZGVz
ZXJpYWxpemVTdHJpbmcoKSA6IFN0cmluZygpOwogICAgIGF1dG8gc2NoZW1lID0gaGFzU2NoZW1l
ID8gZGVzZXJpYWxpemVTdHJpbmcoKSA6IFN0cmluZygpOwogICAgIGF1dG8gdXNlcm5hbWUgPSBo
YXNVc2VybmFtZSA/IGRlc2VyaWFsaXplU3RyaW5nKCkgOiBTdHJpbmcoKTsKKyAgICBzdGQ6Om9w
dGlvbmFsPHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+PiBwb3J0OworICAgIGlmIChoYXNQb3J0KSB7
CisgICAgICAgIGlmIChzcGFuW3Byb2dyZXNzKytdKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChzcGFuLnNpemUoKSA+IHByb2dyZXNzICsgMSk7CisgICAgICAgICAgICB1aW50MTZfdCB2
YWx1ZSA9IChzcGFuW3Byb2dyZXNzXSA8PCAwKSB8IChzcGFuW3Byb2dyZXNzICsgMV0gPDwgOCk7
CisgICAgICAgICAgICBwb3J0ID0geyB7IHZhbHVlIH0gfTsKKyAgICAgICAgICAgIHByb2dyZXNz
ICs9IDI7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcG9ydCA9IHsgc3RkOjpvcHRpb25h
bDx1aW50MTZfdD4geyB9IH07CisgICAgfQogICAgIFF1ZXJ5VHJhbnNmb3JtVmFyaWFudCBxdWVy
eVRyYW5zZm9ybTsKICAgICBpZiAoaGFzUXVlcnkpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
c3Bhbi5zaXplKCkgPiBwcm9ncmVzcyk7CkBAIC01NTYsNiArNjM2LDY2IEBAIGF1dG8gUmVkaXJl
Y3RBY3Rpb246OlVSTFRyYW5zZm9ybUFjdGlvbjoKICAgICByZXR1cm4gcGFyc2VkUXVlcnlUcmFu
c2Zvcm07CiB9CiAKK3ZvaWQgUmVkaXJlY3RBY3Rpb246OlVSTFRyYW5zZm9ybUFjdGlvbjo6YXBw
bHlUb1VSTChVUkwmIHVybCkgY29uc3QKK3sKKyAgICBpZiAoISFmcmFnbWVudCkgeworICAgICAg
ICBpZiAoZnJhZ21lbnQuaXNFbXB0eSgpKQorICAgICAgICAgICAgdXJsLnJlbW92ZUZyYWdtZW50
SWRlbnRpZmllcigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB1cmwuc2V0RnJhZ21lbnRJ
ZGVudGlmaWVyKFN0cmluZ1ZpZXcoZnJhZ21lbnQpLnN1YnN0cmluZygxKSk7CisgICAgfQorICAg
IGlmICghIWhvc3QpCisgICAgICAgIHVybC5zZXRIb3N0KGhvc3QpOworICAgIGlmICghIXBhc3N3
b3JkKQorICAgICAgICB1cmwuc2V0UGFzc3dvcmQocGFzc3dvcmQpOworICAgIGlmICghIXBhdGgp
CisgICAgICAgIHVybC5zZXRQYXRoKHBhdGgpOworICAgIGlmICghIXBvcnQpCisgICAgICAgIHVy
bC5zZXRQb3J0KCpwb3J0KTsKKyAgICBzdGQ6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdIChj
b25zdCBTdHJpbmcmIHF1ZXJ5KSB7CisgICAgICAgIGlmICghcXVlcnkuaXNOdWxsKCkpCisgICAg
ICAgICAgICB1cmwuc2V0UXVlcnkocXVlcnkuaXNFbXB0eSgpID8gU3RyaW5nVmlldygpIDogU3Ry
aW5nVmlldyhxdWVyeSkpOworICAgIH0sIFsmXSAoY29uc3QgVVJMVHJhbnNmb3JtQWN0aW9uOjpR
dWVyeVRyYW5zZm9ybSYgdHJhbnNmb3JtKSB7CisgICAgICAgIHRyYW5zZm9ybS5hcHBseVRvVVJM
KHVybCk7CisgICAgfSksIHF1ZXJ5VHJhbnNmb3JtKTsKKyAgICBpZiAoISFzY2hlbWUpCisgICAg
ICAgIHVybC5zZXRQcm90b2NvbChzY2hlbWUpOworICAgIGlmICghIXVzZXJuYW1lKQorICAgICAg
ICB1cmwuc2V0VXNlcih1c2VybmFtZSk7Cit9CisKK3ZvaWQgUmVkaXJlY3RBY3Rpb246OlVSTFRy
YW5zZm9ybUFjdGlvbjo6UXVlcnlUcmFuc2Zvcm06OmFwcGx5VG9VUkwoVVJMJiB1cmwpIGNvbnN0
Cit7CisgICAgYXV0byBmb3JtID0gV1RGOjpVUkxQYXJzZXI6OnBhcnNlVVJMRW5jb2RlZEZvcm0o
dXJsLnF1ZXJ5KCkpOworCisgICAgSGFzaFNldDxTdHJpbmc+IGtleXNUb1JlbW92ZTsKKyAgICBm
b3IgKGF1dG8mIGtleSA6IHJlbW92ZVBhcmFtcykKKyAgICAgICAga2V5c1RvUmVtb3ZlLmFkZChr
ZXkpOworICAgIGZvcm0ucmVtb3ZlQWxsTWF0Y2hpbmcoWyZdIChhdXRvJiBrZXlWYWx1ZSkgewor
ICAgICAgICByZXR1cm4ga2V5c1RvUmVtb3ZlLmNvbnRhaW5zKGtleVZhbHVlLmtleSk7CisgICAg
fSk7CisKKyAgICBWZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBTdHJpbmc+PiBrZXlz
VG9BZGQ7CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4ga2V5c1RvUmVwbGFjZTsKKyAgICBm
b3IgKGF1dG8mIGtleVZhbHVlIDogYWRkT3JSZXBsYWNlUGFyYW1zKSB7CisgICAgICAgIGlmIChr
ZXlWYWx1ZS5yZXBsYWNlT25seSkKKyAgICAgICAgICAgIGtleXNUb1JlcGxhY2UuYWRkKGtleVZh
bHVlLmtleSwga2V5VmFsdWUudmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBrZXlz
VG9BZGQuYXBwZW5kKHsga2V5VmFsdWUua2V5LCBrZXlWYWx1ZS52YWx1ZSB9KTsKKyAgICB9Cisg
ICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6IGZvcm0pIHsKKyAgICAgICAgYXV0byBpdGVyYXRvciA9
IGtleXNUb1JlcGxhY2UuZmluZChrZXlWYWx1ZS5rZXkpOworICAgICAgICBpZiAoaXRlcmF0b3Ig
IT0ga2V5c1RvUmVwbGFjZS5lbmQoKSkKKyAgICAgICAgICAgIGtleVZhbHVlLnZhbHVlID0gaXRl
cmF0b3ItPnZhbHVlOworICAgIH0KKyAgICBmb3JtLmFwcGVuZFZlY3RvcihXVEZNb3ZlKGtleXNU
b0FkZCkpOworCisgICAgU3RyaW5nQnVpbGRlciB0cmFuc2Zvcm1lZFF1ZXJ5OworICAgIGZvciAo
YXV0byYga2V5VmFsdWUgOiBmb3JtKQorICAgICAgICB0cmFuc2Zvcm1lZFF1ZXJ5LmFwcGVuZCh0
cmFuc2Zvcm1lZFF1ZXJ5LmlzRW1wdHkoKSA/ICIiIDogIiYiLCBrZXlWYWx1ZS5rZXksICEha2V5
VmFsdWUudmFsdWUgPyAiPSIgOiAiIiwga2V5VmFsdWUudmFsdWUpOworICAgIHVybC5zZXRRdWVy
eSh0cmFuc2Zvcm1lZFF1ZXJ5KTsKK30KKwogYXV0byBSZWRpcmVjdEFjdGlvbjo6VVJMVHJhbnNm
b3JtQWN0aW9uOjpRdWVyeVRyYW5zZm9ybTo6aXNvbGF0ZWRDb3B5KCkgY29uc3QgLT4gUXVlcnlU
cmFuc2Zvcm0KIHsKICAgICByZXR1cm4gewpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkFjdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQWN0aW9ucy5oCShyZXZp
c2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50
RXh0ZW5zaW9uQWN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDkgKzI5LDM4IEBACiAKICNpbmNs
dWRlICJDb250ZW50RXh0ZW5zaW9uU3RyaW5nU2VyaWFsaXphdGlvbi5oIgogI2luY2x1ZGUgPHd0
Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KKyNpbmNsdWRl
IDx3dGYvSGFzaGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFJlc291cmNlUmVx
dWVzdDsKK30KIAogbmFtZXNwYWNlIFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zIHsKIAorLy8g
RklYTUU6IFRoaXMgcHJvYmFibHkgYmVsb25ncyBpbiBXVEYsIHN1Y2ggYXMgaW4gSGFzaEZ1bmN0
aW9ucy5oLgorc3RydWN0IFZhcmlhbnRIYXNoZXIgeworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBW
PgorICAgIHN0YXRpYyB1aW50MzJfdCBoYXNoKFYmJiB2YXJpYW50KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHBhaXJJbnRIYXNoKHZhcmlhbnQuaW5kZXgoKSwgc3RkOjp2aXNpdChbXShjb25zdCBh
dXRvJiB0eXBlKSB7CisgICAgICAgICAgICByZXR1cm4gdHlwZS5oYXNoKCk7CisgICAgICAgIH0s
IHN0ZDo6Zm9yd2FyZDxWPih2YXJpYW50KSkpOworICAgIH0KK307CisKKy8vIEZJWE1FOiBUaGlz
IHByb2JhYmx5IGJlbG9uZ3MgaW4gV1RGLCBzdWNoIGFzIGluIEhhc2hlci5oLgorc3RydWN0IFZl
Y3Rvckhhc2hlciB7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFY+CisgICAgc3RhdGljIHVpbnQz
Ml90IGhhc2goViYmIHZlY3RvcikKKyAgICB7CisgICAgICAgIEhhc2hlciBoYXNoZXI7CisgICAg
ICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKKyAgICAgICAgICAgIGFkZChoYXNoZXIs
IGVsZW1lbnQuaGFzaCgpKTsKKyAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7CisgICAgfQor
fTsKKwogc3RydWN0IEFjdGlvbjsKIAogdXNpbmcgU2VyaWFsaXplZEFjdGlvbkJ5dGUgPSB1aW50
OF90OwpAQCAtNjYsNiArOTUsNyBAQCBzdHJ1Y3QgV0VCQ09SRV9FWFBPUlQgTW9kaWZ5SGVhZGVy
c0FjdGlvCiAgICAgICAgICAgICBTdHJpbmcgaGVhZGVyOwogICAgICAgICAgICAgU3RyaW5nIHZh
bHVlOwogCisgICAgICAgICAgICB1aW50MzJfdCBoYXNoKCkgY29uc3QgeyByZXR1cm4gcGFpcklu
dEhhc2goaGVhZGVyLmhhc2goKSwgdmFsdWUuaGFzaCgpKTsgfQogICAgICAgICAgICAgQXBwZW5k
T3BlcmF0aW9uIGlzb2xhdGVkQ29weSgpIGNvbnN0IHsgcmV0dXJuIHsgaGVhZGVyLmlzb2xhdGVk
Q29weSgpLCB2YWx1ZS5pc29sYXRlZENvcHkoKSB9OyB9CiAgICAgICAgICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgQXBwZW5kT3BlcmF0aW9uJiBvdGhlcikgY29uc3QgeyByZXR1cm4gb3RoZXIu
aGVhZGVyID09IHRoaXMtPmhlYWRlciAmJiBvdGhlci52YWx1ZSA9PSB0aGlzLT52YWx1ZTsgfQog
ICAgICAgICB9OwpAQCAtNzMsNDcgKzEwMyw2NyBAQCBzdHJ1Y3QgV0VCQ09SRV9FWFBPUlQgTW9k
aWZ5SGVhZGVyc0FjdGlvCiAgICAgICAgICAgICBTdHJpbmcgaGVhZGVyOwogICAgICAgICAgICAg
U3RyaW5nIHZhbHVlOwogCisgICAgICAgICAgICB1aW50MzJfdCBoYXNoKCkgY29uc3QgeyByZXR1
cm4gcGFpckludEhhc2goaGVhZGVyLmhhc2goKSwgdmFsdWUuaGFzaCgpKTsgfQogICAgICAgICAg
ICAgU2V0T3BlcmF0aW9uIGlzb2xhdGVkQ29weSgpIGNvbnN0IHsgcmV0dXJuIHsgaGVhZGVyLmlz
b2xhdGVkQ29weSgpLCB2YWx1ZS5pc29sYXRlZENvcHkoKSB9OyB9CiAgICAgICAgICAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgU2V0T3BlcmF0aW9uJiBvdGhlcikgY29uc3QgeyByZXR1cm4gb3Ro
ZXIuaGVhZGVyID09IHRoaXMtPmhlYWRlciAmJiBvdGhlci52YWx1ZSA9PSB0aGlzLT52YWx1ZTsg
fQogICAgICAgICB9OwogICAgICAgICBzdHJ1Y3QgUmVtb3ZlT3BlcmF0aW9uIHsKICAgICAgICAg
ICAgIFN0cmluZyBoZWFkZXI7CiAKKyAgICAgICAgICAgIHVpbnQzMl90IGhhc2goKSBjb25zdCB7
IHJldHVybiBoZWFkZXIuaGFzaCgpOyB9CiAgICAgICAgICAgICBSZW1vdmVPcGVyYXRpb24gaXNv
bGF0ZWRDb3B5KCkgY29uc3QgeyByZXR1cm4geyBoZWFkZXIuaXNvbGF0ZWRDb3B5KCkgfTsgfQog
ICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlbW92ZU9wZXJhdGlvbiYgb3RoZXIp
IGNvbnN0IHsgcmV0dXJuIG90aGVyLmhlYWRlciA9PSB0aGlzLT5oZWFkZXI7IH0KICAgICAgICAg
fTsKICAgICAgICAgdXNpbmcgT3BlcmF0aW9uVmFyaWFudCA9IHN0ZDo6dmFyaWFudDxBcHBlbmRP
cGVyYXRpb24sIFNldE9wZXJhdGlvbiwgUmVtb3ZlT3BlcmF0aW9uPjsKICAgICAgICAgT3BlcmF0
aW9uVmFyaWFudCBvcGVyYXRpb247CiAKKyAgICAgICAgdWludDMyX3QgaGFzaCgpIGNvbnN0IHsg
cmV0dXJuIFZhcmlhbnRIYXNoZXI6Omhhc2gob3BlcmF0aW9uKTsgfQogICAgICAgICBzdGF0aWMg
RXhwZWN0ZWQ8TW9kaWZ5SGVhZGVySW5mbywgc3RkOjplcnJvcl9jb2RlPiBwYXJzZShjb25zdCBK
U09OOjpWYWx1ZSYpOwogICAgICAgICBNb2RpZnlIZWFkZXJJbmZvIGlzb2xhdGVkQ29weSgpIGNv
bnN0OwogICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgTW9kaWZ5SGVhZGVySW5mbyYpIGNv
bnN0OwogICAgICAgICB2b2lkIHNlcmlhbGl6ZShWZWN0b3I8dWludDhfdD4mKSBjb25zdDsKICAg
ICAgICAgc3RhdGljIE1vZGlmeUhlYWRlckluZm8gZGVzZXJpYWxpemUoU3Bhbjxjb25zdCB1aW50
OF90Pik7CiAgICAgICAgIHN0YXRpYyBzaXplX3Qgc2VyaWFsaXplZExlbmd0aChTcGFuPGNvbnN0
IHVpbnQ4X3Q+KTsKKyAgICAgICAgdm9pZCBhcHBseVRvUmVxdWVzdChSZXNvdXJjZVJlcXVlc3Qm
KTsKICAgICB9OwogCisgICAgZW51bSBjbGFzcyBIYXNoVGFibGVUeXBlIDogdWludDhfdCB7IEVt
cHR5LCBEZWxldGVkLCBGdWxsIH0gaGFzaFRhYmxlVHlwZTsKICAgICBWZWN0b3I8TW9kaWZ5SGVh
ZGVySW5mbz4gcmVxdWVzdEhlYWRlcnM7CiAgICAgVmVjdG9yPE1vZGlmeUhlYWRlckluZm8+IHJl
c3BvbnNlSGVhZGVyczsKIAorICAgIE1vZGlmeUhlYWRlcnNBY3Rpb24oVmVjdG9yPE1vZGlmeUhl
YWRlckluZm8+JiYgcmVxdWVzdEhlYWRlcnMsIFZlY3RvcjxNb2RpZnlIZWFkZXJJbmZvPiYmIHJl
c3BvbnNlSGVhZGVycykKKyAgICAgICAgOiBoYXNoVGFibGVUeXBlKEhhc2hUYWJsZVR5cGU6OkZ1
bGwpCisgICAgICAgICwgcmVxdWVzdEhlYWRlcnMoV1RGTW92ZShyZXF1ZXN0SGVhZGVycykpCisg
ICAgICAgICwgcmVzcG9uc2VIZWFkZXJzKFdURk1vdmUocmVzcG9uc2VIZWFkZXJzKSkgeyB9CisK
KyAgICBlbnVtIEVtcHR5VmFsdWVUYWcgeyBFbXB0eVZhbHVlIH07CisgICAgZW51bSBEZWxldGVk
VmFsdWVUYWcgeyBEZWxldGVkVmFsdWUgfTsKKyAgICBNb2RpZnlIZWFkZXJzQWN0aW9uKEVtcHR5
VmFsdWVUYWcpIDogaGFzaFRhYmxlVHlwZShIYXNoVGFibGVUeXBlOjpFbXB0eSkgeyB9CisgICAg
TW9kaWZ5SGVhZGVyc0FjdGlvbihEZWxldGVkVmFsdWVUYWcpIDogaGFzaFRhYmxlVHlwZShIYXNo
VGFibGVUeXBlOjpEZWxldGVkKSB7IH0KKyAgICBib29sIGlzRGVsZXRlZFZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gaGFzaFRhYmxlVHlwZSA9PSBIYXNoVGFibGVUeXBlOjpEZWxldGVkOyB9CisKKyAg
ICB1aW50MzJfdCBoYXNoKCkgY29uc3QgeyByZXR1cm4gcGFpckludEhhc2goVmVjdG9ySGFzaGVy
OjpoYXNoKHJlcXVlc3RIZWFkZXJzKSwgVmVjdG9ySGFzaGVyOjpoYXNoKHJlc3BvbnNlSGVhZGVy
cykpOyB9CiAgICAgc3RhdGljIEV4cGVjdGVkPE1vZGlmeUhlYWRlcnNBY3Rpb24sIHN0ZDo6ZXJy
b3JfY29kZT4gcGFyc2UoY29uc3QgSlNPTjo6T2JqZWN0Jik7CiAgICAgTW9kaWZ5SGVhZGVyc0Fj
dGlvbiBpc29sYXRlZENvcHkoKSBjb25zdDsKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgTW9k
aWZ5SGVhZGVyc0FjdGlvbiYpIGNvbnN0OwogICAgIHZvaWQgc2VyaWFsaXplKFZlY3Rvcjx1aW50
OF90PiYpIGNvbnN0OwogICAgIHN0YXRpYyBNb2RpZnlIZWFkZXJzQWN0aW9uIGRlc2VyaWFsaXpl
KFNwYW48Y29uc3QgdWludDhfdD4pOwogICAgIHN0YXRpYyBzaXplX3Qgc2VyaWFsaXplZExlbmd0
aChTcGFuPGNvbnN0IHVpbnQ4X3Q+KTsKKyAgICB2b2lkIGFwcGx5VG9SZXF1ZXN0KFJlc291cmNl
UmVxdWVzdCYpOwogfTsKIAogc3RydWN0IFdFQkNPUkVfRVhQT1JUIFJlZGlyZWN0QWN0aW9uIHsK
ICAgICBzdHJ1Y3QgRXh0ZW5zaW9uUGF0aEFjdGlvbiB7CiAgICAgICAgIFN0cmluZyBleHRlbnNp
b25QYXRoOwogCisgICAgICAgIHVpbnQzMl90IGhhc2goKSBjb25zdCB7IHJldHVybiBleHRlbnNp
b25QYXRoLmhhc2goKTsgfQogICAgICAgICBFeHRlbnNpb25QYXRoQWN0aW9uIGlzb2xhdGVkQ29w
eSgpIGNvbnN0IHsgcmV0dXJuIHsgZXh0ZW5zaW9uUGF0aC5pc29sYXRlZENvcHkoKSB9OyB9CiAg
ICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFeHRlbnNpb25QYXRoQWN0aW9uJiBvdGhlcikg
Y29uc3QgeyByZXR1cm4gb3RoZXIuZXh0ZW5zaW9uUGF0aCA9PSB0aGlzLT5leHRlbnNpb25QYXRo
OyB9CiAgICAgfTsKICAgICBzdHJ1Y3QgUmVnZXhTdWJzdGl0dXRpb25BY3Rpb24gewogICAgICAg
ICBTdHJpbmcgcmVnZXhTdWJzdGl0dXRpb247CiAKKyAgICAgICAgdWludDMyX3QgaGFzaCgpIGNv
bnN0IHsgcmV0dXJuIHJlZ2V4U3Vic3RpdHV0aW9uLmhhc2goKTsgfQogICAgICAgICBSZWdleFN1
YnN0aXR1dGlvbkFjdGlvbiBpc29sYXRlZENvcHkoKSBjb25zdCB7IHJldHVybiB7IHJlZ2V4U3Vi
c3RpdHV0aW9uLmlzb2xhdGVkQ29weSgpIH07IH0KICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFJlZ2V4U3Vic3RpdHV0aW9uQWN0aW9uJiBvdGhlcikgY29uc3QgeyByZXR1cm4gb3RoZXIu
cmVnZXhTdWJzdGl0dXRpb24gPT0gdGhpcy0+cmVnZXhTdWJzdGl0dXRpb247IH0KICAgICB9OwpA
QCAtMTI0LDYgKzE3NCw3IEBAIHN0cnVjdCBXRUJDT1JFX0VYUE9SVCBSZWRpcmVjdEFjdGlvbiB7
CiAgICAgICAgICAgICAgICAgYm9vbCByZXBsYWNlT25seSB7IGZhbHNlIH07CiAgICAgICAgICAg
ICAgICAgU3RyaW5nIHZhbHVlOwogCisgICAgICAgICAgICAgICAgdWludDMyX3QgaGFzaCgpIGNv
bnN0IHsgcmV0dXJuIGNvbXB1dGVIYXNoKGtleSwgcmVwbGFjZU9ubHksIHZhbHVlKTsgfQogICAg
ICAgICAgICAgICAgIHN0YXRpYyBFeHBlY3RlZDxRdWVyeUtleVZhbHVlLCBzdGQ6OmVycm9yX2Nv
ZGU+IHBhcnNlKGNvbnN0IEpTT046OlZhbHVlJik7CiAgICAgICAgICAgICAgICAgUXVlcnlLZXlW
YWx1ZSBpc29sYXRlZENvcHkoKSBjb25zdDsKICAgICAgICAgICAgICAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgUXVlcnlLZXlWYWx1ZSYpIGNvbnN0OwpAQCAtMTM1LDQ3ICsxODYsNjUgQEAgc3Ry
dWN0IFdFQkNPUkVfRVhQT1JUIFJlZGlyZWN0QWN0aW9uIHsKICAgICAgICAgICAgIFZlY3RvcjxR
dWVyeUtleVZhbHVlPiBhZGRPclJlcGxhY2VQYXJhbXM7CiAgICAgICAgICAgICBWZWN0b3I8U3Ry
aW5nPiByZW1vdmVQYXJhbXM7CiAKKyAgICAgICAgICAgIHVpbnQzMl90IGhhc2goKSBjb25zdCB7
IHJldHVybiBjb21wdXRlSGFzaChWZWN0b3JIYXNoZXI6Omhhc2goYWRkT3JSZXBsYWNlUGFyYW1z
KSwgcmVtb3ZlUGFyYW1zKTsgfQogICAgICAgICAgICAgc3RhdGljIEV4cGVjdGVkPFF1ZXJ5VHJh
bnNmb3JtLCBzdGQ6OmVycm9yX2NvZGU+IHBhcnNlKGNvbnN0IEpTT046Ok9iamVjdCYpOwogICAg
ICAgICAgICAgUXVlcnlUcmFuc2Zvcm0gaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAgICAgICAgICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgUXVlcnlUcmFuc2Zvcm0mKSBjb25zdDsKICAgICAgICAg
ICAgIHZvaWQgc2VyaWFsaXplKFZlY3Rvcjx1aW50OF90PiYpIGNvbnN0OwogICAgICAgICAgICAg
c3RhdGljIFF1ZXJ5VHJhbnNmb3JtIGRlc2VyaWFsaXplKFNwYW48Y29uc3QgdWludDhfdD4pOwog
ICAgICAgICAgICAgc3RhdGljIHNpemVfdCBzZXJpYWxpemVkTGVuZ3RoKFNwYW48Y29uc3QgdWlu
dDhfdD4pOworICAgICAgICAgICAgdm9pZCBhcHBseVRvVVJMKFVSTCYpIGNvbnN0OwogICAgICAg
ICB9OwogCiAgICAgICAgIFN0cmluZyBmcmFnbWVudDsKICAgICAgICAgU3RyaW5nIGhvc3Q7CiAg
ICAgICAgIFN0cmluZyBwYXNzd29yZDsKICAgICAgICAgU3RyaW5nIHBhdGg7Ci0gICAgICAgIFN0
cmluZyBwb3J0OworICAgICAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+
PiBwb3J0OwogICAgICAgICB1c2luZyBRdWVyeVRyYW5zZm9ybVZhcmlhbnQgPSBzdGQ6OnZhcmlh
bnQ8U3RyaW5nLCBRdWVyeVRyYW5zZm9ybT47CiAgICAgICAgIFF1ZXJ5VHJhbnNmb3JtVmFyaWFu
dCBxdWVyeVRyYW5zZm9ybTsKICAgICAgICAgU3RyaW5nIHNjaGVtZTsKICAgICAgICAgU3RyaW5n
IHVzZXJuYW1lOwogCi0gICAgICAgIHN0YXRpYyBFeHBlY3RlZDxVUkxUcmFuc2Zvcm1BY3Rpb24s
IHN0ZDo6ZXJyb3JfY29kZT4gcGFyc2UoY29uc3QgSlNPTjo6T2JqZWN0JiwgY29uc3QgSGFzaFNl
dDxTdHJpbmc+Jik7CisgICAgICAgIHVpbnQzMl90IGhhc2goKSBjb25zdCB7IHJldHVybiBjb21w
dXRlSGFzaChmcmFnbWVudC5oYXNoKCksIGhvc3QuaGFzaCgpLCBwYXNzd29yZC5oYXNoKCksIHBh
dGguaGFzaCgpLCBwb3J0LCBWYXJpYW50SGFzaGVyOjpoYXNoKHF1ZXJ5VHJhbnNmb3JtKSwgc2No
ZW1lLmhhc2goKSwgdXNlcm5hbWUuaGFzaCgpKTsgfQorICAgICAgICBzdGF0aWMgRXhwZWN0ZWQ8
VVJMVHJhbnNmb3JtQWN0aW9uLCBzdGQ6OmVycm9yX2NvZGU+IHBhcnNlKGNvbnN0IEpTT046Ok9i
amVjdCYsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8SGFzaFNldDxTdHJpbmc+PiYpOwogICAgICAgICBV
UkxUcmFuc2Zvcm1BY3Rpb24gaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAgICAgICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBVUkxUcmFuc2Zvcm1BY3Rpb24mKSBjb25zdDsKICAgICAgICAgdm9pZCBz
ZXJpYWxpemUoVmVjdG9yPHVpbnQ4X3Q+JikgY29uc3Q7CiAgICAgICAgIHN0YXRpYyBVUkxUcmFu
c2Zvcm1BY3Rpb24gZGVzZXJpYWxpemUoU3Bhbjxjb25zdCB1aW50OF90Pik7CiAgICAgICAgIHN0
YXRpYyBzaXplX3Qgc2VyaWFsaXplZExlbmd0aChTcGFuPGNvbnN0IHVpbnQ4X3Q+KTsKKyAgICAg
ICAgdm9pZCBhcHBseVRvVVJMKFVSTCYpIGNvbnN0OwogICAgIH07CiAgICAgc3RydWN0IFVSTEFj
dGlvbiB7CiAgICAgICAgIFN0cmluZyB1cmw7CiAKKyAgICAgICAgdWludDMyX3QgaGFzaCgpIGNv
bnN0IHsgcmV0dXJuIHVybC5oYXNoKCk7IH0KICAgICAgICAgVVJMQWN0aW9uIGlzb2xhdGVkQ29w
eSgpIGNvbnN0IHsgcmV0dXJuIHsgdXJsLmlzb2xhdGVkQ29weSgpIH07IH0KICAgICAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFVSTEFjdGlvbiYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG90aGVy
LnVybCA9PSB0aGlzLT51cmw7IH0KICAgICB9OwogCisgICAgZW51bSBjbGFzcyBIYXNoVGFibGVU
eXBlIDogdWludDhfdCB7IEVtcHR5LCBEZWxldGVkLCBGdWxsIH0gaGFzaFRhYmxlVHlwZTsKICAg
ICB1c2luZyBBY3Rpb25WYXJpYW50ID0gc3RkOjp2YXJpYW50PEV4dGVuc2lvblBhdGhBY3Rpb24s
IFJlZ2V4U3Vic3RpdHV0aW9uQWN0aW9uLCBVUkxUcmFuc2Zvcm1BY3Rpb24sIFVSTEFjdGlvbj47
CiAgICAgQWN0aW9uVmFyaWFudCBhY3Rpb247CiAKLSAgICBzdGF0aWMgRXhwZWN0ZWQ8UmVkaXJl
Y3RBY3Rpb24sIHN0ZDo6ZXJyb3JfY29kZT4gcGFyc2UoY29uc3QgSlNPTjo6T2JqZWN0JiwgY29u
c3QgSGFzaFNldDxTdHJpbmc+Jik7CisgICAgUmVkaXJlY3RBY3Rpb24oQWN0aW9uVmFyaWFudCYm
IGFjdGlvbikKKyAgICAgICAgOiBoYXNoVGFibGVUeXBlKEhhc2hUYWJsZVR5cGU6OkZ1bGwpCisg
ICAgICAgICwgYWN0aW9uKFdURk1vdmUoYWN0aW9uKSkgeyB9CisKKyAgICBlbnVtIEVtcHR5VmFs
dWVUYWcgeyBFbXB0eVZhbHVlIH07CisgICAgZW51bSBEZWxldGVkVmFsdWVUYWcgeyBEZWxldGVk
VmFsdWUgfTsKKyAgICBSZWRpcmVjdEFjdGlvbihFbXB0eVZhbHVlVGFnKSA6IGhhc2hUYWJsZVR5
cGUoSGFzaFRhYmxlVHlwZTo6RW1wdHkpIHsgfQorICAgIFJlZGlyZWN0QWN0aW9uKERlbGV0ZWRW
YWx1ZVRhZykgOiBoYXNoVGFibGVUeXBlKEhhc2hUYWJsZVR5cGU6OkRlbGV0ZWQpIHsgfQorICAg
IGJvb2wgaXNEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBoYXNoVGFibGVUeXBlID09IEhh
c2hUYWJsZVR5cGU6OkRlbGV0ZWQ7IH0KKyAgICB1aW50MzJfdCBoYXNoKCkgY29uc3QgeyByZXR1
cm4gVmFyaWFudEhhc2hlcjo6aGFzaChhY3Rpb24pOyB9CisKKyAgICBzdGF0aWMgRXhwZWN0ZWQ8
UmVkaXJlY3RBY3Rpb24sIHN0ZDo6ZXJyb3JfY29kZT4gcGFyc2UoY29uc3QgSlNPTjo6T2JqZWN0
JiwgY29uc3Qgc3RkOjpvcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+Jik7CiAgICAgUmVkaXJlY3RB
Y3Rpb24gaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJl
ZGlyZWN0QWN0aW9uJikgY29uc3Q7CiAgICAgdm9pZCBzZXJpYWxpemUoVmVjdG9yPHVpbnQ4X3Q+
JikgY29uc3Q7CiAgICAgc3RhdGljIFJlZGlyZWN0QWN0aW9uIGRlc2VyaWFsaXplKFNwYW48Y29u
c3QgdWludDhfdD4pOwogICAgIHN0YXRpYyBzaXplX3Qgc2VyaWFsaXplZExlbmd0aChTcGFuPGNv
bnN0IHVpbnQ4X3Q+KTsKKyAgICB2b2lkIGFwcGx5VG9SZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYp
OwogfTsKIAogdXNpbmcgQWN0aW9uRGF0YSA9IHN0ZDo6dmFyaWFudDwKQEAgLTE5MSw0ICsyNjAs
MjQgQEAgdXNpbmcgQWN0aW9uRGF0YSA9IHN0ZDo6dmFyaWFudDwKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnMKIAorbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRl
PD4gc3RydWN0IERlZmF1bHRIYXNoPFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpSZWRpcmVj
dEFjdGlvbj4geworICAgIHVzaW5nIEFjdGlvbiA9IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpSZWRpcmVjdEFjdGlvbjsKKyAgICBzdGF0aWMgdWludDMyX3QgaGFzaChjb25zdCBBY3Rpb24m
IGFjdGlvbikgeyByZXR1cm4gYWN0aW9uLmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFs
KGNvbnN0IEFjdGlvbiYgYSwgY29uc3QgQWN0aW9uJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0
cnVlOworfTsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8V2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OlJlZGlyZWN0QWN0aW9uPiA6IHB1YmxpYyBDdXN0b21IYXNoVHJhaXRzPFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpSZWRpcmVjdEFjdGlvbj4geyB9OworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBEZWZhdWx0SGFzaDxXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TW9kaWZ5SGVh
ZGVyc0FjdGlvbj4geworICAgIHVzaW5nIEFjdGlvbiA9IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpNb2RpZnlIZWFkZXJzQWN0aW9uOworICAgIHN0YXRpYyB1aW50MzJfdCBoYXNoKGNvbnN0
IEFjdGlvbiYgYWN0aW9uKSB7IHJldHVybiBhY3Rpb24uaGFzaCgpOyB9CisgICAgc3RhdGljIGJv
b2wgZXF1YWwoY29uc3QgQWN0aW9uJiBhLCBjb25zdCBBY3Rpb24mIGIpIHsgcmV0dXJuIGEgPT0g
YjsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVs
ZXRlZCA9IHRydWU7Cit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxXZWJDb3JlOjpD
b250ZW50RXh0ZW5zaW9uczo6TW9kaWZ5SGVhZGVyc0FjdGlvbj4gOiBwdWJsaWMgQ3VzdG9tSGFz
aFRyYWl0czxXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TW9kaWZ5SGVhZGVyc0FjdGlvbj4g
eyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwogI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50
RXh0ZW5zaW9uQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHAJKHJldmlzaW9uIDI4NTk1
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25D
b21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDEyICs3NiwxNiBAQCBzdGF0aWMgVmVj
dG9yPHVuc2lnbmVkPiBzZXJpYWxpemVBY3Rpb25zCiAgICAgdXNpbmcgQWN0aW9uTG9jYXRpb24g
PSB1aW50MzJfdDsKICAgICB1c2luZyBBY3Rpb25NYXAgPSBIYXNoTWFwPFJlc291cmNlRmxhZ3Ms
IEFjdGlvbkxvY2F0aW9uLCBEZWZhdWx0SGFzaDxSZXNvdXJjZUZsYWdzPiwgV1RGOjpVbnNpZ25l
ZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxSZXNvdXJjZUZsYWdzPj47CiAgICAgdXNpbmcgU3RyaW5n
QWN0aW9uTWFwID0gSGFzaE1hcDxzdGQ6OnBhaXI8U3RyaW5nLCBSZXNvdXJjZUZsYWdzPiwgQWN0
aW9uTG9jYXRpb24sIERlZmF1bHRIYXNoPHN0ZDo6cGFpcjxTdHJpbmcsIFJlc291cmNlRmxhZ3M+
PiwgUGFpckhhc2hUcmFpdHM8SGFzaFRyYWl0czxTdHJpbmc+LCBXVEY6OlVuc2lnbmVkV2l0aFpl
cm9LZXlIYXNoVHJhaXRzPFJlc291cmNlRmxhZ3M+Pj47CisgICAgdXNpbmcgUmVkaXJlY3RBY3Rp
b25NYXAgPSBIYXNoTWFwPHN0ZDo6cGFpcjxSZWRpcmVjdEFjdGlvbiwgUmVzb3VyY2VGbGFncz4s
IEFjdGlvbkxvY2F0aW9uLCBEZWZhdWx0SGFzaDxzdGQ6OnBhaXI8UmVkaXJlY3RBY3Rpb24sIFJl
c291cmNlRmxhZ3M+PiwgUGFpckhhc2hUcmFpdHM8SGFzaFRyYWl0czxSZWRpcmVjdEFjdGlvbj4s
IFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8UmVzb3VyY2VGbGFncz4+PjsKKyAg
ICB1c2luZyBNb2RpZnlIZWFkZXJzQWN0aW9uTWFwID0gSGFzaE1hcDxzdGQ6OnBhaXI8TW9kaWZ5
SGVhZGVyc0FjdGlvbiwgUmVzb3VyY2VGbGFncz4sIEFjdGlvbkxvY2F0aW9uLCBEZWZhdWx0SGFz
aDxzdGQ6OnBhaXI8TW9kaWZ5SGVhZGVyc0FjdGlvbiwgUmVzb3VyY2VGbGFncz4+LCBQYWlySGFz
aFRyYWl0czxIYXNoVHJhaXRzPE1vZGlmeUhlYWRlcnNBY3Rpb24+LCBXVEY6OlVuc2lnbmVkV2l0
aFplcm9LZXlIYXNoVHJhaXRzPFJlc291cmNlRmxhZ3M+Pj47CiAgICAgQWN0aW9uTWFwIGJsb2Nr
TG9hZEFjdGlvbnNNYXA7CiAgICAgQWN0aW9uTWFwIGJsb2NrQ29va2llc0FjdGlvbnNNYXA7CiAg
ICAgUGVuZGluZ0Rpc3BsYXlOb25lQWN0aW9uc01hcCBjc3NEaXNwbGF5Tm9uZUFjdGlvbnNNYXA7
CiAgICAgQWN0aW9uTWFwIGlnbm9yZVByZXZpb3VzUnVsZUFjdGlvbnNNYXA7CiAgICAgQWN0aW9u
TWFwIG1ha2VIVFRQU0FjdGlvbnNNYXA7CiAgICAgU3RyaW5nQWN0aW9uTWFwIG5vdGlmeUFjdGlv
bnNNYXA7CisgICAgUmVkaXJlY3RBY3Rpb25NYXAgcmVkaXJlY3RBY3Rpb25NYXA7CisgICAgTW9k
aWZ5SGVhZGVyc0FjdGlvbk1hcCBtb2RpZnlIZWFkZXJzQWN0aW9uTWFwOwogCiAgICAgZm9yICh1
bnNpZ25lZCBydWxlSW5kZXggPSAwOyBydWxlSW5kZXggPCBydWxlTGlzdC5zaXplKCk7ICsrcnVs
ZUluZGV4KSB7CiAgICAgICAgIGNvbnN0IENvbnRlbnRFeHRlbnNpb25SdWxlJiBydWxlID0gcnVs
ZUxpc3RbcnVsZUluZGV4XTsKQEAgLTExMSwzMSArMTE1LDM0IEBAIHN0YXRpYyBWZWN0b3I8dW5z
aWduZWQ+IHNlcmlhbGl6ZUFjdGlvbnMKICAgICAgICAgfQogCiAgICAgICAgIFJlc291cmNlRmxh
Z3MgZmxhZ3MgPSBydWxlLnRyaWdnZXIoKS5mbGFnczsKLSAgICAgICAgdW5zaWduZWQgYWN0aW9u
TG9jYXRpb24gPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7Ci0gICAgICAg
IAorCiAgICAgICAgIGF1dG8gZmluZE9yTWFrZUFjdGlvbkxvY2F0aW9uID0gWyZdIChBY3Rpb25N
YXAmIG1hcCkgewotICAgICAgICAgICAgY29uc3QgYXV0byBleGlzdGluZ0FjdGlvbiA9IG1hcC5m
aW5kKGZsYWdzKTsKLSAgICAgICAgICAgIGlmIChleGlzdGluZ0FjdGlvbiA9PSBtYXAuZW5kKCkp
IHsKLSAgICAgICAgICAgICAgICBhY3Rpb25Mb2NhdGlvbiA9IGFjdGlvbnMuc2l6ZSgpOworICAg
ICAgICAgICAgcmV0dXJuIG1hcC5lbnN1cmUoZmxhZ3MsIFsmXSB7CisgICAgICAgICAgICAgICAg
YXV0byBuZXdBY3Rpb25Mb2NhdGlvbiA9IGFjdGlvbnMuc2l6ZSgpOwogICAgICAgICAgICAgICAg
IGFjdGlvbnMuYXBwZW5kKGFjdGlvbkRhdGEuaW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgbWFw
LnNldChmbGFncywgYWN0aW9uTG9jYXRpb24pOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICAgICAgYWN0aW9uTG9jYXRpb24gPSBleGlzdGluZ0FjdGlvbi0+dmFsdWU7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG5ld0FjdGlvbkxvY2F0aW9uOworICAgICAgICAgICAgfSkuaXRlcmF0
b3ItPnZhbHVlOwogICAgICAgICB9OwotICAgICAgICAKLSAgICAgICAgYXV0byBmaW5kT3JNYWtl
U3RyaW5nQWN0aW9uTG9jYXRpb24gPSBbJl0gKFN0cmluZ0FjdGlvbk1hcCYgbWFwLCBjb25zdCBO
b3RpZnlBY3Rpb24mIGFjdGlvbkRhdGEpIHsKLSAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgbm90
aWZpY2F0aW9uID0gYWN0aW9uRGF0YS5zdHJpbmc7Ci0gICAgICAgICAgICBhdXRvIGV4aXN0aW5n
QWN0aW9uID0gbWFwLmZpbmQoc3RkOjptYWtlX3BhaXIobm90aWZpY2F0aW9uLCBmbGFncykpOwot
ICAgICAgICAgICAgaWYgKGV4aXN0aW5nQWN0aW9uID09IG1hcC5lbmQoKSkgewotICAgICAgICAg
ICAgICAgIGFjdGlvbkxvY2F0aW9uID0gYWN0aW9ucy5zaXplKCk7Ci0gICAgICAgICAgICAgICAg
YWN0aW9ucy5hcHBlbmQoV1RGOjphbHRlcm5hdGl2ZUluZGV4VjxOb3RpZnlBY3Rpb24sIEFjdGlv
bkRhdGE+KTsKLSAgICAgICAgICAgICAgICBzZXJpYWxpemVTdHJpbmcoYWN0aW9ucywgbm90aWZp
Y2F0aW9uKTsKLSAgICAgICAgICAgICAgICBtYXAuc2V0KHN0ZDo6bWFrZV9wYWlyKG5vdGlmaWNh
dGlvbiwgZmxhZ3MpLCBhY3Rpb25Mb2NhdGlvbik7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICBhY3Rpb25Mb2NhdGlvbiA9IGV4aXN0aW5nQWN0aW9uLT52YWx1ZTsKKworICAg
ICAgICBhdXRvIGZpbmRPck1ha2VOb3RpZnlBY3Rpb25Mb2NhdGlvbiA9IFsmXSAoYXV0byYgbWFw
LCBjb25zdCBhdXRvJiBhY3Rpb24pIHsKKyAgICAgICAgICAgIHJldHVybiBtYXAuZW5zdXJlKHsg
YWN0aW9uLnN0cmluZywgZmxhZ3MgfSwgWyZdIHsKKyAgICAgICAgICAgICAgICBhdXRvIG5ld0Fj
dGlvbkxvY2F0aW9uID0gYWN0aW9ucy5zaXplKCk7CisgICAgICAgICAgICAgICAgYWN0aW9ucy5h
cHBlbmQoYWN0aW9uRGF0YS5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICBhY3Rpb24uc2VyaWFs
aXplKGFjdGlvbnMpOworICAgICAgICAgICAgICAgIHJldHVybiBuZXdBY3Rpb25Mb2NhdGlvbjsK
KyAgICAgICAgICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgfTsKLSAgICAgICAgCi0g
ICAgICAgIHN0ZDo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0gKGNvbnN0IENTU0Rpc3BsYXlO
b25lU2VsZWN0b3JBY3Rpb24mIGFjdGlvbkRhdGEpIHsKKworICAgICAgICBhdXRvIGZpbmRPck1h
a2VPdGhlckFjdGlvbkxvY2F0aW9uID0gWyZdIChhdXRvJiBtYXAsIGNvbnN0IGF1dG8mIGFjdGlv
bikgeworICAgICAgICAgICAgcmV0dXJuIG1hcC5lbnN1cmUoeyBhY3Rpb24sIGZsYWdzIH0sIFsm
XSB7CisgICAgICAgICAgICAgICAgYXV0byBuZXdBY3Rpb25Mb2NhdGlvbiA9IGFjdGlvbnMuc2l6
ZSgpOworICAgICAgICAgICAgICAgIGFjdGlvbnMuYXBwZW5kKGFjdGlvbkRhdGEuaW5kZXgoKSk7
CisgICAgICAgICAgICAgICAgYWN0aW9uLnNlcmlhbGl6ZShhY3Rpb25zKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbmV3QWN0aW9uTG9jYXRpb247CisgICAgICAgICAgICB9KS5pdGVyYXRvci0+
dmFsdWU7CisgICAgICAgIH07CisKKyAgICAgICAgYXV0byBhY3Rpb25Mb2NhdGlvbiA9IHN0ZDo6
dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0gKGNvbnN0IENTU0Rpc3BsYXlOb25lU2VsZWN0b3JB
Y3Rpb24mIGFjdGlvbkRhdGEpIHsKICAgICAgICAgICAgIGNvbnN0IGF1dG8gYWRkUmVzdWx0ID0g
Y3NzRGlzcGxheU5vbmVBY3Rpb25zTWFwLmFkZChydWxlLnRyaWdnZXIoKSwgUGVuZGluZ0Rpc3Bs
YXlOb25lQWN0aW9ucygpKTsKICAgICAgICAgICAgIGF1dG8mIHBlbmRpbmdTdHJpbmdBY3Rpb25z
ID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgICAgIGlmICghcGVuZGluZ1N0
cmluZ0FjdGlvbnMuY29tYmluZWRTZWxlY3RvcnMuaXNFbXB0eSgpKQpAQCAtMTQzLDIxICsxNTAs
MjIgQEAgc3RhdGljIFZlY3Rvcjx1bnNpZ25lZD4gc2VyaWFsaXplQWN0aW9ucwogICAgICAgICAg
ICAgcGVuZGluZ1N0cmluZ0FjdGlvbnMuY29tYmluZWRTZWxlY3RvcnMuYXBwZW5kKGFjdGlvbkRh
dGEuc3RyaW5nKTsKICAgICAgICAgICAgIHBlbmRpbmdTdHJpbmdBY3Rpb25zLmNsaWVudExvY2F0
aW9ucy5hcHBlbmQoYWN0aW9uTG9jYXRpb25zLnNpemUoKSk7CiAKLSAgICAgICAgICAgIGFjdGlv
bkxvY2F0aW9uID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOworICAgICAg
ICAgICAgLy8gcmVzb2x2ZVBlbmRpbmdEaXNwbGF5Tm9uZUFjdGlvbnMgd2lsbCBmaWxsIHRoaXMg
aW4gbGF0ZXIuCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxBY3Rpb25M
b2NhdGlvbj46Om1heCgpOwogICAgICAgICB9LCBbJl0gKGNvbnN0IElnbm9yZVByZXZpb3VzUnVs
ZXNBY3Rpb24mKSB7Ci0gICAgICAgICAgICBmaW5kT3JNYWtlQWN0aW9uTG9jYXRpb24oaWdub3Jl
UHJldmlvdXNSdWxlQWN0aW9uc01hcCk7CisgICAgICAgICAgICByZXR1cm4gZmluZE9yTWFrZUFj
dGlvbkxvY2F0aW9uKGlnbm9yZVByZXZpb3VzUnVsZUFjdGlvbnNNYXApOwogICAgICAgICB9LCBb
Jl0gKGNvbnN0IEJsb2NrTG9hZEFjdGlvbiYpIHsKLSAgICAgICAgICAgIGZpbmRPck1ha2VBY3Rp
b25Mb2NhdGlvbihibG9ja0xvYWRBY3Rpb25zTWFwKTsKKyAgICAgICAgICAgIHJldHVybiBmaW5k
T3JNYWtlQWN0aW9uTG9jYXRpb24oYmxvY2tMb2FkQWN0aW9uc01hcCk7CiAgICAgICAgIH0sIFsm
XSAoY29uc3QgQmxvY2tDb29raWVzQWN0aW9uJikgewotICAgICAgICAgICAgZmluZE9yTWFrZUFj
dGlvbkxvY2F0aW9uKGJsb2NrQ29va2llc0FjdGlvbnNNYXApOworICAgICAgICAgICAgcmV0dXJu
IGZpbmRPck1ha2VBY3Rpb25Mb2NhdGlvbihibG9ja0Nvb2tpZXNBY3Rpb25zTWFwKTsKICAgICAg
ICAgfSwgWyZdIChjb25zdCBNYWtlSFRUUFNBY3Rpb24mKSB7Ci0gICAgICAgICAgICBmaW5kT3JN
YWtlQWN0aW9uTG9jYXRpb24obWFrZUhUVFBTQWN0aW9uc01hcCk7CisgICAgICAgICAgICByZXR1
cm4gZmluZE9yTWFrZUFjdGlvbkxvY2F0aW9uKG1ha2VIVFRQU0FjdGlvbnNNYXApOwogICAgICAg
ICB9LCBbJl0gKGNvbnN0IE5vdGlmeUFjdGlvbiYgYWN0aW9uRGF0YSkgewotICAgICAgICAgICAg
ZmluZE9yTWFrZVN0cmluZ0FjdGlvbkxvY2F0aW9uKG5vdGlmeUFjdGlvbnNNYXAsIGFjdGlvbkRh
dGEpOwotICAgICAgICB9LCBbJl0gKGNvbnN0IE1vZGlmeUhlYWRlcnNBY3Rpb24mKSB7Ci0gICAg
ICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50Ci0gICAgICAgIH0sIFsmXSAoY29uc3QgUmVkaXJl
Y3RBY3Rpb24mKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50CisgICAgICAgICAg
ICByZXR1cm4gZmluZE9yTWFrZU5vdGlmeUFjdGlvbkxvY2F0aW9uKG5vdGlmeUFjdGlvbnNNYXAs
IGFjdGlvbkRhdGEpOworICAgICAgICB9LCBbJl0gKGNvbnN0IE1vZGlmeUhlYWRlcnNBY3Rpb24m
IGFjdGlvbikgeworICAgICAgICAgICAgcmV0dXJuIGZpbmRPck1ha2VPdGhlckFjdGlvbkxvY2F0
aW9uKG1vZGlmeUhlYWRlcnNBY3Rpb25NYXAsIGFjdGlvbik7CisgICAgICAgIH0sIFsmXSAoY29u
c3QgUmVkaXJlY3RBY3Rpb24mIGFjdGlvbikgeworICAgICAgICAgICAgcmV0dXJuIGZpbmRPck1h
a2VPdGhlckFjdGlvbkxvY2F0aW9uKHJlZGlyZWN0QWN0aW9uTWFwLCBhY3Rpb24pOwogICAgICAg
ICB9KSwgYWN0aW9uRGF0YSk7CiAgICAgICAgIGFjdGlvbkxvY2F0aW9ucy5hcHBlbmQoYWN0aW9u
TG9jYXRpb24pOwogICAgIH0KQEAgLTI2Nyw3ICsyNzUsNyBAQCBzdGQ6OmVycm9yX2NvZGUgY29t
cGlsZVJ1bGVMaXN0KENvbnRlbnRFCiB7CiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICBjYWxsT25N
YWluVGhyZWFkKFtydWxlSlNPTiA9IHJ1bGVKU09OLmlzb2xhdGVkQ29weSgpLCBwYXJzZWRSdWxl
TGlzdCA9IHBhcnNlZFJ1bGVMaXN0Lmlzb2xhdGVkQ29weSgpXSB7Ci0gICAgICAgIEFTU0VSVChw
YXJzZVJ1bGVMaXN0KHJ1bGVKU09OLCB7IH0pLnZhbHVlKCkgPT0gcGFyc2VkUnVsZUxpc3QpOwor
ICAgICAgICBBU1NFUlQocGFyc2VSdWxlTGlzdChydWxlSlNPTiwgc3RkOjpudWxsb3B0KS52YWx1
ZSgpID09IHBhcnNlZFJ1bGVMaXN0KTsKICAgICB9KTsKICNlbmRpZgogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNp
b25FcnJvci5jcHAJKHJldmlzaW9uIDI4NTk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
Myw4ICsxMDMsMjAgQEAgY29uc3Qgc3RkOjplcnJvcl9jYXRlZ29yeSYgY29udGVudEV4dGVucwog
ICAgICAgICAgICAgICAgIHJldHVybiAiQSByZWRpcmVjdCBleHRlbnNpb24gcGF0aCBtdXN0IHN0
YXJ0IHdpdGggYSBzbGFzaCI7CiAgICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25FcnJv
cjo6SlNPTlJlZGlyZWN0VVJMU2NoZW1lTm90QWxsb3dlZDoKICAgICAgICAgICAgICAgICByZXR1
cm4gIkEgcmVkaXJlY3QgdXJsIHNjaGVtZSBtdXN0IGJlIGluIHRoZSBzZXQgb2YgYWxsb3dlZCBz
Y2hlbWVzIjsKKyAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVk
aXJlY3RVUkxTY2hlbWVJbnZhbGlkOgorICAgICAgICAgICAgICAgIHJldHVybiAiQSByZWRpcmVj
dCB1ciBsc2NoZW1lIG11c3QgYmUgYSB2YWxpZCBzY2hlbWUiOworICAgICAgICAgICAgY2FzZSBD
b250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTFNjaGVtZXNTaG91bGROb3RJbmNs
dWRlSmF2YXNjcmlwdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIlRoZSBzZXQgb2YgYWxsb3dl
ZCByZWRpcmVjdCBzY2hlbWVzIHNob3VsZG4ndCBpbmNsdWRlIGphdmFzY3JpcHQiOworICAgICAg
ICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTEludmFsaWQ6
CisgICAgICAgICAgICAgICAgcmV0dXJuICJBIHJlZGlyZWN0IHVybCBtdXN0IGJlIHZhbGlkIjsK
ICAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RJbnZh
bGlkVHlwZToKICAgICAgICAgICAgICAgICByZXR1cm4gIkEgcmVkaXJlY3QgbXVzdCBoYXZlIGEg
bWVtYmVyIG5hbWVkIFwiZXh0ZW5zaW9uLXBhdGhcIiwgXCJyZWdleC1zdWJzdGl0dXRpb25cIiwg
XCJ0cmFuc2Zvcm1cIiBvciBcInVybFwiIjsKKyAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVu
c2lvbkVycm9yOjpKU09OUmVkaXJlY3RJbnZhbGlkUG9ydDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gIkEgcmVkaXJlY3QgcG9ydCBtdXN0IGJlIGVpdGhlciBlbXB0eSBvciBhIG51bWJlciBiZXR3
ZWVuIDAgYW5kIDY1NTM1LCBpbmNsdXNpdmUiOworICAgICAgICAgICAgY2FzZSBDb250ZW50RXh0
ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdEludmFsaWRRdWVyeToKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gIkEgcmVkaXJlY3QgcXVlcnkgbXVzdCBlaXRoZXIgYmUgZW1wdHkgb3IgYmVnaW4gd2l0
aCAnPyciOworICAgICAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRp
cmVjdEludmFsaWRGcmFnbWVudDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIkEgcmVkaXJlY3Qg
ZnJhZ21lbnQgbXVzdCBlaXRoZXIgYmUgZW1wdHkgb3IgYmVnaW4gd2l0aCAnIyciOwogICAgICAg
ICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05Nb2RpZnlIZWFkZXJzSW52YWxp
ZE9wZXJhdGlvbjoKICAgICAgICAgICAgICAgICByZXR1cm4gIkEgbW9kaWZ5LWhlYWRlcnMgb3Bl
cmF0aW9uIG11c3QgaGF2ZSBhbiBvcGVyYXRpb24gdGhhdCBpcyBlaXRoZXIgXCJzZXRcIiwgXCJh
cHBlbmRcIiwgb3IgXCJyZW1vdmVcIiI7CiAgICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNp
b25FcnJvcjo6SlNPTk1vZGlmeUhlYWRlcnNJbmZvTm90QURpY3Rpb25hcnk6CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5z
aW9uRXJyb3IuaAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkVycm9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDgg
KzYwLDE0IEBAIGVudW0gY2xhc3MgQ29udGVudEV4dGVuc2lvbkVycm9yIHsKIAogICAgIEpTT05S
ZWRpcmVjdE1pc3NpbmcsCiAgICAgSlNPTlJlZGlyZWN0RXh0ZW5zaW9uUGF0aERvZXNOb3RTdGFy
dFdpdGhTbGFzaCwKKyAgICBKU09OUmVkaXJlY3RVUkxTY2hlbWVJbnZhbGlkLAogICAgIEpTT05S
ZWRpcmVjdFVSTFNjaGVtZU5vdEFsbG93ZWQsCisgICAgSlNPTlJlZGlyZWN0VVJMU2NoZW1lc1No
b3VsZE5vdEluY2x1ZGVKYXZhc2NyaXB0LAorICAgIEpTT05SZWRpcmVjdFVSTEludmFsaWQsCiAg
ICAgSlNPTlJlZGlyZWN0SW52YWxpZFR5cGUsCisgICAgSlNPTlJlZGlyZWN0SW52YWxpZFBvcnQs
CisgICAgSlNPTlJlZGlyZWN0SW52YWxpZFF1ZXJ5LAorICAgIEpTT05SZWRpcmVjdEludmFsaWRG
cmFnbWVudCwKIAogICAgIEpTT05SZW1vdmVQYXJhbWV0ZXJzTm90U3RyaW5nQXJyYXksCiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0Nv
bnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTc5LDcgKzE3OSw3IEBAIGJvb2wgaXNWYWxpZENTU1NlbGVjdG9yKGNvbnN0
IFN0cmluZyYgc2UKICAgICByZXR1cm4gISFwYXJzZXIucGFyc2VTZWxlY3RvcihzZWxlY3Rvcik7
CiB9CiAKLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPEV4cGVjdGVkPEFjdGlvbiwgc3RkOjplcnJvcl9j
b2RlPj4gbG9hZEFjdGlvbihjb25zdCBKU09OOjpPYmplY3QmIHJ1bGVPYmplY3QsIGNvbnN0IEhh
c2hTZXQ8U3RyaW5nPiYgYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcykKK3N0YXRpYyBzdGQ6Om9w
dGlvbmFsPEV4cGVjdGVkPEFjdGlvbiwgc3RkOjplcnJvcl9jb2RlPj4gbG9hZEFjdGlvbihjb25z
dCBKU09OOjpPYmplY3QmIHJ1bGVPYmplY3QsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8SGFzaFNldDxT
dHJpbmc+PiYgYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcykKIHsKICAgICBhdXRvIGFjdGlvbk9i
amVjdCA9IHJ1bGVPYmplY3QuZ2V0T2JqZWN0KCJhY3Rpb24iKTsKICAgICBpZiAoIWFjdGlvbk9i
amVjdCkKQEAgLTIyNCw3ICsyMjQsNyBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxFeHBlY3RlZDxB
Y3Rpb24sIHN0CiAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJv
cjo6SlNPTkludmFsaWRBY3Rpb25UeXBlKTsKIH0KIAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8RXhw
ZWN0ZWQ8Q29udGVudEV4dGVuc2lvblJ1bGUsIHN0ZDo6ZXJyb3JfY29kZT4+IGxvYWRSdWxlKGNv
bnN0IEpTT046Ok9iamVjdCYgcnVsZU9iamVjdCwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhbGxv
d2VkUmVkaXJlY3RVUkxTY2hlbWVzKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8RXhwZWN0ZWQ8Q29u
dGVudEV4dGVuc2lvblJ1bGUsIHN0ZDo6ZXJyb3JfY29kZT4+IGxvYWRSdWxlKGNvbnN0IEpTT046
Ok9iamVjdCYgcnVsZU9iamVjdCwgY29uc3Qgc3RkOjpvcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+
JiBhbGxvd2VkUmVkaXJlY3RVUkxTY2hlbWVzKQogewogICAgIGF1dG8gdHJpZ2dlciA9IGxvYWRU
cmlnZ2VyKHJ1bGVPYmplY3QpOwogICAgIGlmICghdHJpZ2dlci5oYXNfdmFsdWUoKSkKQEAgLTIz
OSw4ICsyMzksMTEgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8RXhwZWN0ZWQ8Q29udGVudEV4dAog
ICAgIHJldHVybiB7IHsgeyBXVEZNb3ZlKHRyaWdnZXIudmFsdWUoKSksIFdURk1vdmUoYWN0aW9u
LT52YWx1ZSgpKSB9IH0gfTsKIH0KIAotc3RhdGljIEV4cGVjdGVkPFZlY3RvcjxDb250ZW50RXh0
ZW5zaW9uUnVsZT4sIHN0ZDo6ZXJyb3JfY29kZT4gbG9hZEVuY29kZWRSdWxlcyhjb25zdCBTdHJp
bmcmIHJ1bGVKU09OLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGFsbG93ZWRSZWRpcmVjdFVSTFNj
aGVtZXMpCitzdGF0aWMgRXhwZWN0ZWQ8VmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPiwgc3Rk
OjplcnJvcl9jb2RlPiBsb2FkRW5jb2RlZFJ1bGVzKGNvbnN0IFN0cmluZyYgcnVsZUpTT04sIGNv
bnN0IHN0ZDo6b3B0aW9uYWw8SGFzaFNldDxTdHJpbmc+PiYgYWxsb3dlZFJlZGlyZWN0VVJMU2No
ZW1lcykKIHsKKyAgICBpZiAoYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcyAmJiBhbGxvd2VkUmVk
aXJlY3RVUkxTY2hlbWVzLT5jb250YWlucygiamF2YXNjcmlwdCIpKQorICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RVUkxTY2hl
bWVzU2hvdWxkTm90SW5jbHVkZUphdmFzY3JpcHQpOworCiAgICAgYXV0byBkZWNvZGVkUnVsZXMg
PSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHJ1bGVKU09OKTsKIAogICAgIGlmICghZGVjb2RlZFJ1
bGVzKQpAQCAtMjcyLDcgKzI3NSw3IEBAIHN0YXRpYyBFeHBlY3RlZDxWZWN0b3I8Q29udGVudEV4
dGVuc2lvblIKICAgICByZXR1cm4gcnVsZUxpc3Q7CiB9CiAKLUV4cGVjdGVkPFZlY3RvcjxDb250
ZW50RXh0ZW5zaW9uUnVsZT4sIHN0ZDo6ZXJyb3JfY29kZT4gcGFyc2VSdWxlTGlzdChjb25zdCBT
dHJpbmcmIHJ1bGVKU09OLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGFsbG93ZWRSZWRpcmVjdFVS
TFNjaGVtZXMpCitFeHBlY3RlZDxWZWN0b3I8Q29udGVudEV4dGVuc2lvblJ1bGU+LCBzdGQ6OmVy
cm9yX2NvZGU+IHBhcnNlUnVsZUxpc3QoY29uc3QgU3RyaW5nJiBydWxlSlNPTiwgY29uc3Qgc3Rk
OjpvcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+JiBhbGxvd2VkUmVkaXJlY3RVUkxTY2hlbWVzKQog
ewogI2lmIENPTlRFTlRfRVhURU5TSU9OU19QRVJGT1JNQU5DRV9SRVBPUlRJTkcKICAgICBNb25v
dG9uaWNUaW1lIGxvYWRFeHRlbnNpb25TdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Q
YXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uUGFyc2VyLmgJKHJldmlzaW9uIDI4NTk1NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzgsNyArMzgsMTIgQEAgbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKIAog
Y2xhc3MgQ29udGVudEV4dGVuc2lvblJ1bGU7CiAKLVdFQkNPUkVfRVhQT1JUIEV4cGVjdGVkPFZl
Y3RvcjxDb250ZW50RXh0ZW5zaW9uUnVsZT4sIHN0ZDo6ZXJyb3JfY29kZT4gcGFyc2VSdWxlTGlz
dChjb25zdCBTdHJpbmcmLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGFsbG93ZWRSZWRpcmVjdFVS
TFNjaGVtZXMpOworLy8gQW4gYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcyBvZiBzdGQ6Om51bGxv
cHQgaW5kaWNhdGVzIHRoYXQgYWxsIFVSTCBzY2hlbWVzIGFyZSBhbGxvd2VkLgorLy8gVGhpcyBp
cyB1c2VkIHdoZW4gcmVjb21waWxpbmcgc291cmNlIGZyb20gb2xkZXIgdmVyc2lvbnMgb2YgV0tD
b250ZW50UnVsZUxpc3RzIG9uIGRpc2ssCisvLyB3aGVyZSB3ZSBkb24ndCBoYXZlIHRoZSBsaXN0
IG9mIGFsbG93ZWQgVVJMIHNjaGVtZXMgYnV0IGFzc3VtZSB0aGF0IGlmIGl0IGNvbXBpbGVkCisv
LyBzdWNjZXNzZnVsbHkgdGhlIGZpcnN0IHRpbWUgdGhlbiBhbGwgdGhlIHNjaGVtZXMgdXNlZCBt
dXN0IGhhdmUgYmVlbiBhbGxvd2VkLgorLy8gQW4gYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcyBv
ZiBhbiBlbXB0eSBIYXNoU2V0IGluZGljYXRlcyB0aGF0IG5vIGFjdGl2ZSBhY3Rpb25zIGFyZSBh
bGxvd2VkLgorV0VCQ09SRV9FWFBPUlQgRXhwZWN0ZWQ8VmVjdG9yPENvbnRlbnRFeHRlbnNpb25S
dWxlPiwgc3RkOjplcnJvcl9jb2RlPiBwYXJzZVJ1bGVMaXN0KGNvbnN0IFN0cmluZyYsIGNvbnN0
IHN0ZDo6b3B0aW9uYWw8SGFzaFNldDxTdHJpbmc+PiYgYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1l
cyk7CiBXRUJDT1JFX0VYUE9SVCBib29sIGlzVmFsaWRDU1NTZWxlY3Rvcihjb25zdCBTdHJpbmcm
KTsKIAogfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lv
bnNCYWNrZW5kLmNwcAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjI4LDEwICsyMjgsMTIgQEAgQ29udGVudFJ1bGVMaXN0UmVzdWx0cyBDb250ZW50RXh0ZW5z
aW9ucwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0sIFsmXShjb25zdCBJZ25vcmVQ
cmV2aW91c1J1bGVzQWN0aW9uJikgewogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9LCBbJl0gKGNvbnN0IE1vZGlmeUhlYWRlcnNBY3Rp
b24mKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudAotICAgICAgICAgICAg
fSwgWyZdIChjb25zdCBSZWRpcmVjdEFjdGlvbiYpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhN
RTogSW1wbGVtZW50CisgICAgICAgICAgICB9LCBbJl0gKGNvbnN0IE1vZGlmeUhlYWRlcnNBY3Rp
b24mIGFjdGlvbikgeworICAgICAgICAgICAgICAgIGlmIChpbml0aWF0aW5nRG9jdW1lbnRMb2Fk
ZXIuYWxsb3dzQWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc0ZvclVSTCh1cmwpKQorICAgICAg
ICAgICAgICAgICAgICByZXN1bHRzLnN1bW1hcnkubW9kaWZ5SGVhZGVyc0FjdGlvbnMuYXBwZW5k
KGFjdGlvbik7CisgICAgICAgICAgICB9LCBbJl0gKGNvbnN0IFJlZGlyZWN0QWN0aW9uJiBhY3Rp
b24pIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5pdGlhdGluZ0RvY3VtZW50TG9hZGVyLmFsbG93
c0FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNGb3JVUkwodXJsKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0cy5zdW1tYXJ5LnJlZGlyZWN0QWN0aW9ucy5hcHBlbmQoYWN0aW9uKTsKICAg
ICAgICAgICAgIH0pLCBhY3Rpb24uZGF0YSgpKTsKICAgICAgICAgfQogCkBAIC0yOTIsOSArMjk0
LDkgQEAgQ29udGVudFJ1bGVMaXN0UmVzdWx0cyBDb250ZW50RXh0ZW5zaW9ucwogICAgICAgICAg
ICAgfSwgWyZdKGNvbnN0IElnbm9yZVByZXZpb3VzUnVsZXNBY3Rpb24mKSB7CiAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIH0sIFsmXSAo
Y29uc3QgTW9kaWZ5SGVhZGVyc0FjdGlvbiYpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTog
SW1wbGVtZW50CisgICAgICAgICAgICAgICAgLy8gV2UgY3VycmVudGx5IGhhdmUgbm90IGltcGxl
bWVudGVkIGFjdGl2ZSBhY3Rpb25zIGZyb20gdGhlIG5ldHdvcmsgcHJvY2VzcyAoQ09SUyBwcmVm
bGlnaHQpLgogICAgICAgICAgICAgfSwgWyZdIChjb25zdCBSZWRpcmVjdEFjdGlvbiYpIHsKLSAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50CisgICAgICAgICAgICAgICAgLy8gV2Ug
Y3VycmVudGx5IGhhdmUgbm90IGltcGxlbWVudGVkIGFjdGl2ZSBhY3Rpb25zIGZyb20gdGhlIG5l
dHdvcmsgcHJvY2VzcyAoQ09SUyBwcmVmbGlnaHQpLgogICAgICAgICAgICAgfSksIGFjdGlvbi5k
YXRhKCkpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzI1LDYgKzMyNywxMiBAQCB2b2lkIGFwcGx5
UmVzdWx0c1RvUmVxdWVzdChDb250ZW50UnVsZUxpCiAgICAgICAgIHJlcXVlc3Quc2V0VVJMKG5l
d1VSTCk7CiAgICAgfQogCisgICAgZm9yIChhdXRvJiBhY3Rpb24gOiByZXN1bHRzLnN1bW1hcnku
bW9kaWZ5SGVhZGVyc0FjdGlvbnMpCisgICAgICAgIGFjdGlvbi5hcHBseVRvUmVxdWVzdChyZXF1
ZXN0KTsKKworICAgIGZvciAoYXV0byYgYWN0aW9uIDogcmVzdWx0cy5zdW1tYXJ5LnJlZGlyZWN0
QWN0aW9ucykKKyAgICAgICAgYWN0aW9uLmFwcGx5VG9SZXF1ZXN0KHJlcXVlc3QpOworCiAgICAg
aWYgKHBhZ2UgJiYgcmVzdWx0cy5zaG91bGROb3RpZnlBcHBsaWNhdGlvbigpKSB7CiAgICAgICAg
IHJlc3VsdHMucmVzdWx0cy5yZW1vdmVBbGxNYXRjaGluZyhbXShjb25zdCBhdXRvJiBwYWlyKSB7
CiAgICAgICAgICAgICByZXR1cm4gIXBhaXIuc2Vjb25kLnNob3VsZE5vdGlmeUFwcGxpY2F0aW9u
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50UnVsZUxp
c3RSZXN1bHRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29udGVudFJ1bGVMaXN0UmVzdWx0cy5oCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50UnVsZUxpc3RSZXN1bHRzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDYgKzI1LDkgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpZiBFTkFCTEUo
Q09OVEVOVF9FWFRFTlNJT05TKQorCisjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbkFjdGlvbnMu
aCIKICNpbmNsdWRlIDx3dGYvS2V5VmFsdWVQYWlyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNTQsNiArNTcsOCBAQCBzdHJ1
Y3QgQ29udGVudFJ1bGVMaXN0UmVzdWx0cyB7CiAgICAgICAgIGJvb2wgbWFkZUhUVFBTIHsgZmFs
c2UgfTsKICAgICAgICAgYm9vbCBibG9ja2VkQ29va2llcyB7IGZhbHNlIH07CiAgICAgICAgIGJv
b2wgaGFzTm90aWZpY2F0aW9ucyB7IGZhbHNlIH07CisgICAgICAgIFZlY3RvcjxDb250ZW50RXh0
ZW5zaW9uczo6TW9kaWZ5SGVhZGVyc0FjdGlvbj4gbW9kaWZ5SGVhZGVyc0FjdGlvbnM7CisgICAg
ICAgIFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6UmVkaXJlY3RBY3Rpb24+IHJlZGlyZWN0QWN0
aW9uczsKIAogICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7CiAgICAgICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPFN1bW1hcnk+IGRlY29kZShEZWNvZGVyJik7CkBAIC0xNjgsNyArMTczLDExIEBA
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IGF1dG8gQ29udGVudFJ1bGUKICAgICAgICAgV1RGTW92
ZSgqbWFkZUhUVFBTKSwKICAgICAgICAgV1RGTW92ZSgqYmxvY2tlZENvb2tpZXMpLAogICAgICAg
ICBXVEZNb3ZlKCpoYXNOb3RpZmljYXRpb25zKSwKKyAgICAgICAgeyB9LCAvLyBtb2RpZnlIZWFk
ZXJzQWN0aW9ucyBhbmQgcmVkaXJlY3RBY3Rpb25zIGhhdmUgbm8gbmVlZCB0byBiZSBzZXJpYWxp
emVkIHRvIGFub3RoZXIgcHJvY2Vzcy4KKyAgICAgICAgeyB9CiAgICAgfX07CiB9CiAKIH0KKwor
I2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDcgKzI2LDYgQEAKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ2FjaGVQ
b2xpY3kuaCIKICNpbmNsdWRlICJDYWNoZWRDU1NTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiQ29u
dGVudFJ1bGVMaXN0UmVzdWx0cy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAi
RnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgpAQCAtNDQsNiArNDMsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9SZWYuaD4KIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisjaW5j
bHVkZSAiQ29udGVudFJ1bGVMaXN0UmVzdWx0cy5oIgogI2luY2x1ZGUgIlVzZXJDb250ZW50Q29u
dHJvbGxlci5oIgogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVu
dExvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50
TG9hZGVyLmNwcAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0Rv
Y3VtZW50TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsNiArOTQsNyBAQAogI2luY2x1
ZGUgIlN1YnJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5o
IgogI2luY2x1ZGUgIlVzZXJDb250ZW50UHJvdmlkZXIuaCIKKyNpbmNsdWRlICJVc2VyQ29udGVu
dFVSTFBhdHRlcm4uaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0
Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpA
QCAtMTczLDcgKzE3NCwxMCBAQCBEb2N1bWVudExvYWRlcjo6RG9jdW1lbnRMb2FkZXIoY29uc3Qg
UmVzCiAgICAgLCBtX29yaWdpbmFsU3Vic3RpdHV0ZURhdGFXYXNWYWxpZChzdWJzdGl0dXRlRGF0
YS5pc1ZhbGlkKCkpCiAgICAgLCBtX3N1YnN0aXR1dGVSZXNvdXJjZURlbGl2ZXJ5VGltZXIoKnRo
aXMsICZEb2N1bWVudExvYWRlcjo6c3Vic3RpdHV0ZVJlc291cmNlRGVsaXZlcnlUaW1lckZpcmVk
KQogICAgICwgbV9hcHBsaWNhdGlvbkNhY2hlSG9zdChtYWtlVW5pcXVlPEFwcGxpY2F0aW9uQ2Fj
aGVIb3N0PigqdGhpcykpCisgICAgLCBtX2FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvblBhdHRl
cm5zKFZlY3RvcjxVc2VyQ29udGVudFVSTFBhdHRlcm4+KCkpCiB7CisgICAgLy8gRklYTUU6IFZl
Y3RvciBkZWZhdWx0IGNvbnN0cnVjdG9yIHNob3VsZG4ndCBuZWVkIHRvIGtub3cgdGhlIHNpemUg
b2YgdGhlIGVsZW1lbnRzLAorICAgIC8vIHNvIG1fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9u
UGF0dGVybnMgb3VnaHQgdG8gYmUgYWJsZSB0byBiZSBpbml0aWFsaXplZCB3aXRoIGFuIGluaXRp
YWxpemVyIGxpc3QgaW4gdGhlIGhlYWRlciB3aXRob3V0IGluY2x1ZGluZyBVc2VyQ29udGVudFVS
TFBhdHRlcm4uaC4KIH0KIAogRnJhbWVMb2FkZXIqIERvY3VtZW50TG9hZGVyOjpmcmFtZUxvYWRl
cigpIGNvbnN0CkBAIC0yNDMzLDYgKzI0MzcsMzQgQEAgUmVzb3VyY2VFcnJvciBEb2N1bWVudExv
YWRlcjo6Y29udGVudEZpbAogfQogI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0ZJTFRFUklORykK
IAordm9pZCBEb2N1bWVudExvYWRlcjo6c2V0QWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc1Bh
dHRlcm5zKGNvbnN0IHN0ZDo6b3B0aW9uYWw8SGFzaFNldDxTdHJpbmc+PiYgcGF0dGVybnMpCit7
CisgICAgaWYgKCFwYXR0ZXJucykgeworICAgICAgICBtX2FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFj
dGlvblBhdHRlcm5zID0gc3RkOjpudWxsb3B0OworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IFZlY3RvcjxXZWJDb3JlOjpVc2VyQ29udGVudFVSTFBhdHRlcm4+IHBhdHRlcm5WZWN0b3I7Cisg
ICAgcGF0dGVyblZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBhdHRlcm5zLT5zaXplKCkp
OworICAgIGZvciAoYXV0byYgcGF0dGVyblN0cmluZyA6ICpwYXR0ZXJucykgeworICAgICAgICBX
ZWJDb3JlOjpVc2VyQ29udGVudFVSTFBhdHRlcm4gcGFyc2VkUGF0dGVybihwYXR0ZXJuU3RyaW5n
KTsKKyAgICAgICAgaWYgKHBhcnNlZFBhdHRlcm4uaXNWYWxpZCgpKQorICAgICAgICAgICAgcGF0
dGVyblZlY3Rvci51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShwYXJzZWRQYXR0ZXJuKSk7CisgICAg
fQorCisgICAgbV9hY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25QYXR0ZXJucyA9IFdURk1vdmUo
cGF0dGVyblZlY3Rvcik7Cit9CisKK2Jvb2wgRG9jdW1lbnRMb2FkZXI6OmFsbG93c0FjdGl2ZUNv
bnRlbnRSdWxlTGlzdEFjdGlvbnNGb3JVUkwoY29uc3QgVVJMJiB1cmwpIGNvbnN0Cit7CisgICAg
aWYgKCFtX2FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvblBhdHRlcm5zKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHBhdHRlcm4gOiAqbV9hY3RpdmVDb250ZW50
UnVsZUxpc3RBY3Rpb25QYXR0ZXJucykgeworICAgICAgICBpZiAocGF0dGVybi5tYXRjaGVzKHVy
bCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICN1bmRlZiBQQUdFX0lECkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaAkocmV2aXNpb24gMjg1OTU0KQorKysgU291
cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3
LDYgKzg3LDcgQEAgY2xhc3MgU2hhcmVkQnVmZmVyOwogY2xhc3MgU1dDbGllbnRDb25uZWN0aW9u
OwogY2xhc3MgU3VicmVzb3VyY2VMb2FkZXI7CiBjbGFzcyBTdWJzdGl0dXRlUmVzb3VyY2U7Citj
bGFzcyBVc2VyQ29udGVudFVSTFBhdHRlcm47CiAKIGVudW0gY2xhc3MgU2hvdWxkQ29udGludWU7
CiAKQEAgLTMwMSw2ICszMDIsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCB1c2VyQ29udGVudEV4dGVu
c2lvbnNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV91c2VyQ29udGVudEV4dGVuc2lvbnNFbmFi
bGVkOyB9CiAgICAgdm9pZCBzZXRVc2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkKGJvb2wgZW5h
YmxlZCkgeyBtX3VzZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQgPSBlbmFibGVkOyB9CiAKKyAg
ICBib29sIGFsbG93c0FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNGb3JVUkwoY29uc3QgVVJM
JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRBY3RpdmVDb250ZW50UnVsZUxp
c3RBY3Rpb25zUGF0dGVybnMoY29uc3Qgc3RkOjpvcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+Jik7
CisKICNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQogICAgIERldmljZU9yaWVudGF0aW9u
T3JNb3Rpb25QZXJtaXNzaW9uU3RhdGUgZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NT
dGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NT
dGF0ZTsgfQogICAgIHZvaWQgc2V0RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NTdGF0
ZShEZXZpY2VPcmllbnRhdGlvbk9yTW90aW9uUGVybWlzc2lvblN0YXRlIHN0YXRlKSB7IG1fZGV2
aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NTdGF0ZSA9IHN0YXRlOyB9CkBAIC02NTEsNiAr
NjU1LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faWRlbXBvdGVudE1vZGVBdXRvc2l6aW5nT25s
eUhvbm9yc1BlcmNlbnRhZ2VzIHsgZmFsc2UgfTsKICAgICBTdHJpbmcgbV9jdXN0b21OYXZpZ2F0
b3JQbGF0Zm9ybTsKICAgICBib29sIG1fdXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZCB7IHRy
dWUgfTsKKyAgICBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxVc2VyQ29udGVudFVSTFBhdHRlcm4+PiBt
X2FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvblBhdHRlcm5zOwogI2lmIEVOQUJMRShERVZJQ0Vf
T1JJRU5UQVRJT04pCiAgICAgRGV2aWNlT3JpZW50YXRpb25Pck1vdGlvblBlcm1pc3Npb25TdGF0
ZSBtX2RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzU3RhdGUgeyBEZXZpY2VPcmllbnRh
dGlvbk9yTW90aW9uUGVybWlzc2lvblN0YXRlOjpQcm9tcHQgfTsKICNlbmRpZgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVz
dEJhc2UuY3BwCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDEsNiAr
NjAxLDE1IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0SFRUUEhlYWRlckYKICAgICBt
X3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKIH0KIAordm9pZCBSZXNvdXJjZVJlcXVl
c3RCYXNlOjpyZW1vdmVIVFRQSGVhZGVyRmllbGQoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAg
IHVwZGF0ZVJlc291cmNlUmVxdWVzdCgpOworCisgICAgbV9odHRwSGVhZGVyRmllbGRzLnJlbW92
ZShuYW1lKTsKKworICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOworfQorCiAj
aWYgVVNFKFNZU1RFTV9QUkVWSUVXKQogCiBib29sIFJlc291cmNlUmVxdWVzdEJhc2U6OmlzU3lz
dGVtUHJldmlldygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlUmVxdWVzdEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaAkocmV2aXNpb24gMjg1OTU0KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwNSw2ICsxMDUsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBhZGRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWUsIGNvbnN0IFN0cmluZyYg
dmFsdWUpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkSFRUUEhlYWRlckZpZWxkKGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBhZGRIVFRQSGVhZGVyRmllbGRJZk5vdFByZXNlbnQoSFRUUEhlYWRlck5hbWUsIGNvbnN0
IFN0cmluZyYpOworICAgIHZvaWQgcmVtb3ZlSFRUUEhlYWRlckZpZWxkKGNvbnN0IFN0cmluZyYg
bmFtZSk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhhc0hUVFBIZWFkZXJGaWVsZChIVFRQ
SGVhZGVyTmFtZSkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODU5NTQpCisrKyBT
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisy
MDIxLTExLTE3ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgSW1wbGVtZW50IG1vc3Qgb2YgcmVkaXJlY3QgYW5kIG1vZGlmeS1oZWFkZXJzIGFj
dGlvbiB0eXBlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjMzMjY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBTaGFyZWQvV2Vic2l0ZVBvbGljaWVzRGF0YS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVQb2xpY2llc0RhdGE6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVQb2xpY2llc0RhdGE6OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVQb2xpY2ll
c0RhdGE6OmFwcGx5VG9Eb2N1bWVudExvYWRlcik6CisgICAgICAgICogU2hhcmVkL1dlYnNpdGVQ
b2xpY2llc0RhdGEuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlz
dFN0b3JlLmNwcDoKKyAgICAgICAgKEFQSTo6Q29udGVudFJ1bGVMaXN0U3RvcmU6Omxvb2t1cENv
bnRlbnRSdWxlTGlzdCk6CisgICAgICAgIChBUEk6OkNvbnRlbnRSdWxlTGlzdFN0b3JlOjpjb21w
aWxlQ29udGVudFJ1bGVMaXN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRS
dWxlTGlzdFN0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElXZWJzaXRlUG9saWNp
ZXMuY3BwOgorICAgICAgICAoQVBJOjpXZWJzaXRlUG9saWNpZXM6OmNvcHkgY29uc3QpOgorICAg
ICAgICAoQVBJOjpXZWJzaXRlUG9saWNpZXM6OmRhdGEpOgorICAgICAgICAoQVBJOjpXZWJzaXRl
UG9saWNpZXM6On5XZWJzaXRlUG9saWNpZXMpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQVBJV2Vic2l0ZVBvbGljaWVzLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlZi5jcHA6CisgICAgICAgIChXS1VzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmVDb21waWxlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dL
Q29udGVudFJ1bGVMaXN0U3RvcmUubW06CisgICAgICAgICgtW1dLQ29udGVudFJ1bGVMaXN0U3Rv
cmUgY29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6ZW5jb2RlZENvbnRlbnRSdWxl
TGlzdDpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50UnVsZUxpc3RT
dG9yZSBfY29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6ZW5jb2RlZENvbnRlbnRS
dWxlTGlzdDphbGxvd2VkUmVkaXJlY3RTY2hlbWVzOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAg
ICAgICAoLVtXS0NvbnRlbnRSdWxlTGlzdFN0b3JlIF9jb21waWxlQ29udGVudFJ1bGVMaXN0Rm9y
SWRlbnRpZmllcjplbmNvZGVkQ29udGVudFJ1bGVMaXN0OmNvbXBsZXRpb25IYW5kbGVyOl0pOiBE
ZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3RT
dG9yZVByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2VicGFnZVBy
ZWZlcmVuY2VzLm1tOgorICAgICAgICAoLVtXS1dlYnBhZ2VQcmVmZXJlbmNlcyBfc2V0QWN0aXZl
Q29udGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5zOl0pOgorICAgICAgICAoLVtXS1dlYnBhZ2VQ
cmVmZXJlbmNlcyBfYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5zXSk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnBhZ2VQcmVmZXJlbmNlc1ByaXZhdGUuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUubW06CisgICAgICAgICgtW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgY29tcGlsZUNv
bnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmNvbXBs
ZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAqIFdlYlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJT
dHJhdGVneS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkxvYWRlclN0cmF0ZWd5OjpyZW1vdmUp
OgorICAgICAgICBGaXggYSByZWdyZXNzaW9uIGZyb20gaHR0cHM6Ly90cmFjLndlYmtpdC5vcmcv
Y2hhbmdlc2V0LzI3NjE5My93ZWJraXQKKyAgICAgICAgV2hlbiBmZXRjaGluZyBhIHJlc291cmNl
IHdpdGggYSBmb3JiaWRkZW4gcG9ydCBhbmQgYSBjdXN0b20gc2NoZW1lIGFuZCB7bW9kZToibm8t
Y29ycyJ9LAorICAgICAgICBXZWJMb2FkZXJTdHJhdGVneTo6cmVtb3ZlIGlzIGNhbGxlZCB3aXRo
IGEgcmVzb3VyY2UgdGhhdCBkb2Vzbid0IGhhdmUgYW4gaWRlbnRpZmllci4KKyAgICAgICAgTXkg
dGVzdCBoaXQgdGhpcywgc28gSSBtb3ZlZCB0aGUgY2hlY2sgdG8gYmVmb3JlIHRoZSBpZGVudGlm
aWVyIGlzIHVzZWQuCisKIDIwMjEtMTEtMTcgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBh
cHBsZS5jb20+CiAKICAgICAgICAgTW9tZW50dW0gYW5pbWF0b3Igc29tZXRpbWVzIHN0YXJ0cyB0
aGUgYW5pbWF0aW9uIGF0IGEgdmVyeSBoaWdoIHZlbG9jaXR5CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1NoYXJlZC9XZWJzaXRlUG9saWNpZXNEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlUG9saWNpZXNEYXRhLmNwcAkocmV2aXNpb24gMjg1OTU0KQorKysg
U291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZVBvbGljaWVzRGF0YS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDYgKzM2LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiB2b2lkIFdlYnNpdGVQb2xp
Y2llc0RhdGE6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5j
b2RlciA8PCBjb250ZW50QmxvY2tlcnNFbmFibGVkOworICAgIGVuY29kZXIgPDwgYWN0aXZlQ29u
dGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5zOwogICAgIGVuY29kZXIgPDwgYXV0b3BsYXlQb2xp
Y3k7CiAjaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKICAgICBlbmNvZGVyIDw8IGRldmlj
ZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzU3RhdGU7CkBAIC02Miw3ICs2MywxMiBAQCBzdGQ6
Om9wdGlvbmFsPFdlYnNpdGVQb2xpY2llc0RhdGE+IFdlYnNpCiAgICAgZGVjb2RlciA+PiBjb250
ZW50QmxvY2tlcnNFbmFibGVkOwogICAgIGlmICghY29udGVudEJsb2NrZXJzRW5hYmxlZCkKICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAKKworICAgIHN0ZDo6b3B0aW9uYWw8c3Rk
OjpvcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+PiBhY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25z
UGF0dGVybnM7CisgICAgZGVjb2RlciA+PiBhY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0
dGVybnM7CisgICAgaWYgKCFhY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKICAgICBzdGQ6Om9wdGlvbmFsPFdlYnNpdGVB
dXRvcGxheVBvbGljeT4gYXV0b3BsYXlQb2xpY3k7CiAgICAgZGVjb2RlciA+PiBhdXRvcGxheVBv
bGljeTsKICAgICBpZiAoIWF1dG9wbGF5UG9saWN5KQpAQCAtMTQ3LDYgKzE1Myw3IEBAIHN0ZDo6
b3B0aW9uYWw8V2Vic2l0ZVBvbGljaWVzRGF0YT4gV2Vic2kKIAogICAgIHJldHVybiB7IHsKICAg
ICAgICAgV1RGTW92ZSgqY29udGVudEJsb2NrZXJzRW5hYmxlZCksCisgICAgICAgIFdURk1vdmUo
KmFjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNQYXR0ZXJucyksCiAgICAgICAgIFdURk1vdmUo
KmFsbG93ZWRBdXRvcGxheVF1aXJrcyksCiAgICAgICAgIFdURk1vdmUoKmF1dG9wbGF5UG9saWN5
KSwKICNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQpAQCAtMTgzLDYgKzE5MCw4IEBAIHZv
aWQgV2Vic2l0ZVBvbGljaWVzRGF0YTo6YXBwbHlUb0RvY3VtZW4KICAgICBpZiAoZG9jdW1lbnRM
b2FkZXIudXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZCgpKQogICAgICAgICBkb2N1bWVudExv
YWRlci5zZXRVc2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkKHdlYnNpdGVQb2xpY2llcy5jb250
ZW50QmxvY2tlcnNFbmFibGVkKTsKIAorICAgIGRvY3VtZW50TG9hZGVyLnNldEFjdGl2ZUNvbnRl
bnRSdWxlTGlzdEFjdGlvbnNQYXR0ZXJucyh3ZWJzaXRlUG9saWNpZXMuYWN0aXZlQ29udGVudFJ1
bGVMaXN0QWN0aW9uc1BhdHRlcm5zKTsKKwogICAgIE9wdGlvblNldDxXZWJDb3JlOjpBdXRvcGxh
eVF1aXJrPiBxdWlya3M7CiAgICAgY29uc3QgYXV0byYgYWxsb3dlZFF1aXJrcyA9IHdlYnNpdGVQ
b2xpY2llcy5hbGxvd2VkQXV0b3BsYXlRdWlya3M7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1NoYXJlZC9XZWJzaXRlUG9saWNpZXNEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9TaGFyZWQvV2Vic2l0ZVBvbGljaWVzRGF0YS5oCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlUG9saWNpZXNEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAg
LTUzLDYgKzUzLDcgQEAgc3RydWN0IFdlYnNpdGVQb2xpY2llc0RhdGEgewogICAgIHN0YXRpYyB2
b2lkIGFwcGx5VG9Eb2N1bWVudExvYWRlcihXZWJzaXRlUG9saWNpZXNEYXRhJiYsIFdlYkNvcmU6
OkRvY3VtZW50TG9hZGVyJik7CiAKICAgICBib29sIGNvbnRlbnRCbG9ja2Vyc0VuYWJsZWQgeyB0
cnVlIH07CisgICAgc3RkOjpvcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+IGFjdGl2ZUNvbnRlbnRS
dWxlTGlzdEFjdGlvbnNQYXR0ZXJucyB7IEhhc2hTZXQ8U3RyaW5nPigpIH07CiAgICAgT3B0aW9u
U2V0PFdlYnNpdGVBdXRvcGxheVF1aXJrPiBhbGxvd2VkQXV0b3BsYXlRdWlya3M7CiAgICAgV2Vi
c2l0ZUF1dG9wbGF5UG9saWN5IGF1dG9wbGF5UG9saWN5IHsgV2Vic2l0ZUF1dG9wbGF5UG9saWN5
OjpEZWZhdWx0IH07CiAjaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0
b3JlLmNwcAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDkxLDcgKzQ5
MSw3IEBAIHZvaWQgQ29udGVudFJ1bGVMaXN0U3RvcmU6Omxvb2t1cENvbnRlbnQKICAgICAgICAg
aWYgKGNvbnRlbnRSdWxlTGlzdC0+bWV0YURhdGEudmVyc2lvbiAhPSBDb250ZW50UnVsZUxpc3RT
dG9yZTo6Q3VycmVudENvbnRlbnRSdWxlTGlzdEZpbGVWZXJzaW9uKSB7CiAgICAgICAgICAgICBp
ZiAoYXV0byBzb3VyY2VGcm9tT2xkVmVyc2lvbiA9IGdldENvbnRlbnRSdWxlTGlzdFNvdXJjZUZy
b21NYXBwZWRGaWxlKCpjb250ZW50UnVsZUxpc3QpOyAhc291cmNlRnJvbU9sZFZlcnNpb24uaXNF
bXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90
ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgc291cmNlRnJvbU9sZFZlcnNpb24g
PSBzb3VyY2VGcm9tT2xkVmVyc2lvbi5pc29sYXRlZENvcHkoKSwgaWRlbnRpZmllciA9IGlkZW50
aWZpZXIuaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWRU
aGlzLT5jb21waWxlQ29udGVudFJ1bGVMaXN0KGlkZW50aWZpZXIsIFdURk1vdmUoc291cmNlRnJv
bU9sZFZlcnNpb24pLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgICAgICAgICAg
ICAgICAgIHByb3RlY3RlZFRoaXMtPmNvbXBpbGVDb250ZW50UnVsZUxpc3QoaWRlbnRpZmllciwg
V1RGTW92ZShzb3VyY2VGcm9tT2xkVmVyc2lvbiksIHN0ZDo6bnVsbG9wdCwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KQEAgLTUzMCwxMyArNTMwLDEzIEBAIHZvaWQgQ29udGVudFJ1
bGVMaXN0U3RvcmU6OmdldEF2YWlsYWJsZUMKICAgICB9KTsKIH0KIAotdm9pZCBDb250ZW50UnVs
ZUxpc3RTdG9yZTo6Y29tcGlsZUNvbnRlbnRSdWxlTGlzdChjb25zdCBXVEY6OlN0cmluZyYgaWRl
bnRpZmllciwgV1RGOjpTdHJpbmcmJiBqc29uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0
cjxBUEk6OkNvbnRlbnRSdWxlTGlzdD4sIHN0ZDo6ZXJyb3JfY29kZSk+IGNvbXBsZXRpb25IYW5k
bGVyKQordm9pZCBDb250ZW50UnVsZUxpc3RTdG9yZTo6Y29tcGlsZUNvbnRlbnRSdWxlTGlzdChj
b25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgV1RGOjpTdHJpbmcmJiBqc29uLCBzdGQ6Om9w
dGlvbmFsPEhhc2hTZXQ8V1RGOjpTdHJpbmc+PiYmIGFsbG93ZWRSZWRpcmVjdFNjaGVtZXMsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmUHRyPEFQSTo6Q29udGVudFJ1bGVMaXN0Piwgc3RkOjpl
cnJvcl9jb2RlKT4gY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKICAgICBBdG9tU3RyaW5nOjppbml0KCk7CiAgICAgV2ViQ29yZTo6UXVhbGlmaWVk
TmFtZTo6aW5pdCgpOwogICAgIAotICAgIGF1dG8gcGFyc2VkUnVsZXMgPSBXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6cGFyc2VSdWxlTGlzdChqc29uLCB7IH0pOworICAgIGF1dG8gcGFyc2Vk
UnVsZXMgPSBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6cGFyc2VSdWxlTGlzdChqc29uLCBX
VEZNb3ZlKGFsbG93ZWRSZWRpcmVjdFNjaGVtZXMpKTsKICAgICBpZiAoIXBhcnNlZFJ1bGVzLmhh
c192YWx1ZSgpKQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0ciwgcGFy
c2VkUnVsZXMuZXJyb3IoKSk7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuaAkocmV2aXNpb24gMjg1OTU0
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3Jl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgcHVibGljOgogICAgIGV4cGxpY2l0
IENvbnRlbnRSdWxlTGlzdFN0b3JlKGNvbnN0IFdURjo6U3RyaW5nJiBzdG9yZVBhdGgpOwogICAg
IHZpcnR1YWwgfkNvbnRlbnRSdWxlTGlzdFN0b3JlKCk7CiAKLSAgICB2b2lkIGNvbXBpbGVDb250
ZW50UnVsZUxpc3QoY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIFdURjo6U3RyaW5nJiYg
anNvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZWZQdHI8QVBJOjpDb250ZW50UnVsZUxpc3Q+
LCBzdGQ6OmVycm9yX2NvZGUpPik7CisgICAgdm9pZCBjb21waWxlQ29udGVudFJ1bGVMaXN0KGNv
bnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBXVEY6OlN0cmluZyYmIGpzb24sIHN0ZDo6b3B0
aW9uYWw8SGFzaFNldDxXVEY6OlN0cmluZz4+JiYgYWxsb3dlZFJlZGlyZWN0U2NoZW1lcywgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChSZWZQdHI8QVBJOjpDb250ZW50UnVsZUxpc3Q+LCBzdGQ6OmVy
cm9yX2NvZGUpPik7CiAgICAgdm9pZCBsb29rdXBDb250ZW50UnVsZUxpc3QoY29uc3QgV1RGOjpT
dHJpbmcmIGlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmUHRyPEFQSTo6Q29u
dGVudFJ1bGVMaXN0Piwgc3RkOjplcnJvcl9jb2RlKT4pOwogICAgIHZvaWQgcmVtb3ZlQ29udGVu
dFJ1bGVMaXN0KGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKHN0ZDo6ZXJyb3JfY29kZSk+KTsKICAgICB2b2lkIGdldEF2YWlsYWJsZUNvbnRlbnRS
dWxlTGlzdElkZW50aWZpZXJzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV1RGOjpWZWN0b3I8V1RG
OjpTdHJpbmc+KT4pOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNp
dGVQb2xpY2llcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0FQSVdlYnNpdGVQb2xpY2llcy5jcHAJKHJldmlzaW9uIDI4NTk1NCkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9BUElXZWJzaXRlUG9saWNpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSw2ICszOSw3IEBAIFJlZjxXZWJzaXRlUG9saWNpZXM+IFdlYnNpdGVQb2xpY2llczo6Y28K
IHsKICAgICBhdXRvIHBvbGljaWVzID0gV2Vic2l0ZVBvbGljaWVzOjpjcmVhdGUoKTsKICAgICBw
b2xpY2llcy0+c2V0Q29udGVudEJsb2NrZXJzRW5hYmxlZChtX2NvbnRlbnRCbG9ja2Vyc0VuYWJs
ZWQpOworICAgIHBvbGljaWVzLT5tX2FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNQYXR0ZXJu
cyA9IG1fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5zOwogICAgIHBvbGljaWVz
LT5zZXRBbGxvd2VkQXV0b3BsYXlRdWlya3MobV9hbGxvd2VkQXV0b3BsYXlRdWlya3MpOwogICAg
IHBvbGljaWVzLT5zZXRBdXRvcGxheVBvbGljeShtX2F1dG9wbGF5UG9saWN5KTsKICNpZiBFTkFC
TEUoREVWSUNFX09SSUVOVEFUSU9OKQpAQCAtNzgsOSArNzksNyBAQCBSZWY8V2Vic2l0ZVBvbGlj
aWVzPiBXZWJzaXRlUG9saWNpZXM6OmNvCiAgICAgcmV0dXJuIHBvbGljaWVzOwogfQogCi1XZWJz
aXRlUG9saWNpZXM6On5XZWJzaXRlUG9saWNpZXMoKQotewotfQorV2Vic2l0ZVBvbGljaWVzOjp+
V2Vic2l0ZVBvbGljaWVzKCkgPSBkZWZhdWx0OwogCiB2b2lkIFdlYnNpdGVQb2xpY2llczo6c2V0
V2Vic2l0ZURhdGFTdG9yZShSZWZQdHI8V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlPiYmIHdlYnNp
dGVEYXRhU3RvcmUpCiB7CkBAIC0xMDQsNiArMTAzLDcgQEAgV2ViS2l0OjpXZWJzaXRlUG9saWNp
ZXNEYXRhIFdlYnNpdGVQb2xpYwogCiAgICAgcmV0dXJuIHsKICAgICAgICAgY29udGVudEJsb2Nr
ZXJzRW5hYmxlZCgpLAorICAgICAgICBhY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVy
bnMoKSwKICAgICAgICAgYWxsb3dlZEF1dG9wbGF5UXVpcmtzKCksCiAgICAgICAgIGF1dG9wbGF5
UG9saWN5KCksCiAjaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJzaXRlUG9saWNpZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2Vic2l0ZVBvbGljaWVzLmgJKHJldmlzaW9u
IDI4NTk1NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJzaXRlUG9saWNp
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBj
b250ZW50QmxvY2tlcnNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50QmxvY2tlcnNF
bmFibGVkOyB9CiAgICAgdm9pZCBzZXRDb250ZW50QmxvY2tlcnNFbmFibGVkKGJvb2wgZW5hYmxl
ZCkgeyBtX2NvbnRlbnRCbG9ja2Vyc0VuYWJsZWQgPSBlbmFibGVkOyB9CiAgICAgCisgICAgdm9p
ZCBzZXRBY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMoc3RkOjpvcHRpb25hbDxI
YXNoU2V0PFdURjo6U3RyaW5nPj4mJiBwYXR0ZXJucykgeyBtX2FjdGl2ZUNvbnRlbnRSdWxlTGlz
dEFjdGlvbnNQYXR0ZXJucyA9IFdURk1vdmUocGF0dGVybnMpOyB9CisgICAgY29uc3Qgc3RkOjpv
cHRpb25hbDxIYXNoU2V0PFdURjo6U3RyaW5nPj4mIGFjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlv
bnNQYXR0ZXJucygpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9u
c1BhdHRlcm5zOyB9CisgICAgCiAgICAgT3B0aW9uU2V0PFdlYktpdDo6V2Vic2l0ZUF1dG9wbGF5
UXVpcms+IGFsbG93ZWRBdXRvcGxheVF1aXJrcygpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dlZEF1
dG9wbGF5UXVpcmtzOyB9CiAgICAgdm9pZCBzZXRBbGxvd2VkQXV0b3BsYXlRdWlya3MoT3B0aW9u
U2V0PFdlYktpdDo6V2Vic2l0ZUF1dG9wbGF5UXVpcms+IHF1aXJrcykgeyBtX2FsbG93ZWRBdXRv
cGxheVF1aXJrcyA9IHF1aXJrczsgfQogICAgIApAQCAtMTM1LDcgKzEzOCw5IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldElkZW1wb3RlbnRNb2RlQXV0b3NpemluZ09ubHlIb25vcnNQZXJjZW50YWdl
cyhib29sIGlkZW1wb3RlbnRNb2RlQXV0b3NpemluZ09ubHlIb25vcnNQZXJjZW50YWdlcykgeyBt
X2lkZW1wb3RlbnRNb2RlQXV0b3NpemluZ09ubHlIb25vcnNQZXJjZW50YWdlcyA9IGlkZW1wb3Rl
bnRNb2RlQXV0b3NpemluZ09ubHlIb25vcnNQZXJjZW50YWdlczsgfQogCiBwcml2YXRlOgorICAg
IC8vIEZJWE1FOiByZXBsYWNlIG1vc3Qgb3IgYWxsIG9mIHRoZXNlIG1lbWJlcnMgd2l0aCBhIFdl
YnNpdGVQb2xpY2llc0RhdGEuCiAgICAgYm9vbCBtX2NvbnRlbnRCbG9ja2Vyc0VuYWJsZWQgeyB0
cnVlIH07CisgICAgc3RkOjpvcHRpb25hbDxIYXNoU2V0PFdURjo6U3RyaW5nPj4gbV9hY3RpdmVD
b250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMgeyBIYXNoU2V0PFdURjo6U3RyaW5nPigpIH07
CiAgICAgT3B0aW9uU2V0PFdlYktpdDo6V2Vic2l0ZUF1dG9wbGF5UXVpcms+IG1fYWxsb3dlZEF1
dG9wbGF5UXVpcmtzOwogICAgIFdlYktpdDo6V2Vic2l0ZUF1dG9wbGF5UG9saWN5IG1fYXV0b3Bs
YXlQb2xpY3kgeyBXZWJLaXQ6OldlYnNpdGVBdXRvcGxheVBvbGljeTo6RGVmYXVsdCB9OwogI2lm
IEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVSZWYuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZVJlZi5jcHAJKHJldmlzaW9uIDI4NTk1NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc2LDcgKzc2LDcgQEAgc3RhdGljIGlubGluZSBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rvcgog
dm9pZCBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVDb21waWxlKFdLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZVJlZiBzdG9yZSwgV0tTdHJpbmdSZWYgaWRlbnRpZmllciwgV0tTdHJpbmdSZWYg
anNvblNvdXJjZSwgdm9pZCogY29udGV4dCwgV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRnVu
Y3Rpb24gY2FsbGJhY2spCiB7CiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAgICB0
b0ltcGwoc3RvcmUpLT5jb21waWxlQ29udGVudFJ1bGVMaXN0KHRvV1RGU3RyaW5nKGlkZW50aWZp
ZXIpLCB0b1dURlN0cmluZyhqc29uU291cmNlKSwgW2NvbnRleHQsIGNhbGxiYWNrXShSZWZQdHI8
QVBJOjpDb250ZW50UnVsZUxpc3Q+IGNvbnRlbnRSdWxlTGlzdCwgc3RkOjplcnJvcl9jb2RlIGVy
cm9yKSB7CisgICAgdG9JbXBsKHN0b3JlKS0+Y29tcGlsZUNvbnRlbnRSdWxlTGlzdCh0b1dURlN0
cmluZyhpZGVudGlmaWVyKSwgdG9XVEZTdHJpbmcoanNvblNvdXJjZSksIHsgSGFzaFNldDxTdHJp
bmc+KCkgfSwgW2NvbnRleHQsIGNhbGxiYWNrXShSZWZQdHI8QVBJOjpDb250ZW50UnVsZUxpc3Q+
IGNvbnRlbnRSdWxlTGlzdCwgc3RkOjplcnJvcl9jb2RlIGVycm9yKSB7CiAgICAgICAgIGNhbGxi
YWNrKGVycm9yID8gbnVsbHB0ciA6IHRvQVBJKGNvbnRlbnRSdWxlTGlzdC5sZWFrUmVmKCkpLCB0
b1Jlc3VsdChlcnJvciksIGNvbnRleHQpOwogICAgIH0pOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxl
TGlzdFN0b3JlLm1tCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3RTdG9yZS5tbQkod29ya2luZyBjb3B5KQpAQCAt
NzcsNyArNzcsNyBAQCArIChpbnN0YW5jZXR5cGUpc3RvcmVXaXRoVVJMOihOU1VSTCAqKXVyCiAK
IC0gKHZvaWQpY29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6KE5TU3RyaW5nICop
aWRlbnRpZmllciBlbmNvZGVkQ29udGVudFJ1bGVMaXN0OihOU1N0cmluZyAqKWVuY29kZWRDb250
ZW50UnVsZUxpc3QgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFdLQ29udGVudFJ1bGVMaXN0
ICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBbc2VsZiBfY29tcGlsZUNv
bnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6aWRlbnRpZmllciBlbmNvZGVkQ29udGVudFJ1bGVM
aXN0OmVuY29kZWRDb250ZW50UnVsZUxpc3QgY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhh
bmRsZXJdOworICAgIFtzZWxmIF9jb21waWxlQ29udGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmllcjpp
ZGVudGlmaWVyIGVuY29kZWRDb250ZW50UnVsZUxpc3Q6ZW5jb2RlZENvbnRlbnRSdWxlTGlzdCBh
bGxvd2VkUmVkaXJlY3RTY2hlbWVzOm5pbCBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFu
ZGxlcl07CiB9CiAKIC0gKHZvaWQpbG9va1VwQ29udGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmllcjoo
TlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShXS0NvbnRl
bnRSdWxlTGlzdCAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCkBAIC0xNDksOSArMTQ5
LDEyIEBAIC0gKHZvaWQpX2dldENvbnRlbnRSdWxlTGlzdFNvdXJjZUZvcklkZW4KICAgICB9KTsK
IH0KIAotLSAodm9pZClfY29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6KE5TU3Ry
aW5nICopaWRlbnRpZmllciBlbmNvZGVkQ29udGVudFJ1bGVMaXN0OihOU1N0cmluZyAqKSBlbmNv
ZGVkQ29udGVudFJ1bGVMaXN0IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShXS0NvbnRlbnRS
dWxlTGlzdCAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCistICh2b2lkKV9jb21waWxl
Q29udGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGVuY29k
ZWRDb250ZW50UnVsZUxpc3Q6KE5TU3RyaW5nICopZW5jb2RlZENvbnRlbnRSdWxlTGlzdCBhbGxv
d2VkUmVkaXJlY3RTY2hlbWVzOihOU1NldDxOU1N0cmluZyAqPiAqKXNjaGVtZXMgY29tcGxldGlv
bkhhbmRsZXI6KHZvaWQgKF4pKFdLQ29udGVudFJ1bGVMaXN0ICosIE5TRXJyb3IgKikpY29tcGxl
dGlvbkhhbmRsZXIKIHsKLSAgICBfY29udGVudFJ1bGVMaXN0U3RvcmUtPmNvbXBpbGVDb250ZW50
UnVsZUxpc3QoaWRlbnRpZmllciwgZW5jb2RlZENvbnRlbnRSdWxlTGlzdCwgW2NvbXBsZXRpb25I
YW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0oUmVmUHRyPEFQSTo6Q29u
dGVudFJ1bGVMaXN0PiBjb250ZW50UnVsZUxpc3QsIHN0ZDo6ZXJyb3JfY29kZSBlcnJvcikgewor
ICAgIEhhc2hTZXQ8U3RyaW5nPiBhbGxvd2VkUmVkaXJlY3RTY2hlbWVzOworICAgIGZvciAoTlNT
dHJpbmcgKnNjaGVtZSBpbiBzY2hlbWVzKQorICAgICAgICBhbGxvd2VkUmVkaXJlY3RTY2hlbWVz
LmFkZChzY2hlbWUpOworICAgIF9jb250ZW50UnVsZUxpc3RTdG9yZS0+Y29tcGlsZUNvbnRlbnRS
dWxlTGlzdChpZGVudGlmaWVyLCBlbmNvZGVkQ29udGVudFJ1bGVMaXN0LCBXVEZNb3ZlKGFsbG93
ZWRSZWRpcmVjdFNjaGVtZXMpLCBbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29t
cGxldGlvbkhhbmRsZXIpXShSZWZQdHI8QVBJOjpDb250ZW50UnVsZUxpc3Q+IGNvbnRlbnRSdWxl
TGlzdCwgc3RkOjplcnJvcl9jb2RlIGVycm9yKSB7CiAgICAgICAgIGlmIChlcnJvcikgewogICAg
ICAgICAgICAgYXV0byB1c2VySW5mbyA9IEB7TlNIZWxwQW5jaG9yRXJyb3JLZXk6IFtOU1N0cmlu
ZyBzdHJpbmdXaXRoRm9ybWF0OkAiUnVsZSBsaXN0IGNvbXBpbGF0aW9uIGZhaWxlZDogJXMiLCBl
cnJvci5tZXNzYWdlKCkuY19zdHIoKV19OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3RTdG9yZVByaXZhdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3RTdG9y
ZVByaXZhdGUuaAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLQ29udGVudFJ1bGVMaXN0U3RvcmVQcml2YXRlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDcgKzMyLDcgQEAKIC0gKHZvaWQpX2ludmFsaWRhdGVDb250ZW50UnVsZUxpc3RWZXJz
aW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyOwogLSAodm9pZClfZ2V0Q29u
dGVudFJ1bGVMaXN0U291cmNlRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNv
bXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU1N0cmluZyAqKSljb21wbGV0aW9uSGFuZGxlcjsK
IAotLSAodm9pZClfY29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6KE5TU3RyaW5n
ICopaWRlbnRpZmllciBlbmNvZGVkQ29udGVudFJ1bGVMaXN0OihOU1N0cmluZyAqKSBlbmNvZGVk
Q29udGVudFJ1bGVMaXN0IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShXS0NvbnRlbnRSdWxl
TGlzdCAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyOworLSAodm9pZClfY29tcGlsZUNv
bnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBlbmNvZGVk
Q29udGVudFJ1bGVMaXN0OihOU1N0cmluZyAqKWVuY29kZWRDb250ZW50UnVsZUxpc3QgYWxsb3dl
ZFJlZGlyZWN0U2NoZW1lczooTlNTZXQ8TlNTdHJpbmcgKj4gKilzY2hlbWVzIGNvbXBsZXRpb25I
YW5kbGVyOih2b2lkICheKShXS0NvbnRlbnRSdWxlTGlzdCAqLCBOU0Vycm9yICopKWNvbXBsZXRp
b25IYW5kbGVyOwogCiAvLyBGSVhNRTogUmVtb3ZlIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUuCiArIChpbnN0YW5jZXR5cGUpZGVmYXVsdFN0b3JlV2l0aExlZ2FjeUZpbGVuYW1lOwpJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2VicGFnZVByZWZlcmVuY2Vz
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YnBhZ2VQcmVmZXJlbmNlcy5tbQkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2VicGFnZVByZWZlcmVuY2VzLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDEsNiArMTQxLDMyIEBAIC0gKEJPT0wpX2NvbnRlbnRCbG9ja2Vyc0VuYWJsZWQKICAg
ICByZXR1cm4gX3dlYnNpdGVQb2xpY2llcy0+Y29udGVudEJsb2NrZXJzRW5hYmxlZCgpOwogfQog
CistICh2b2lkKV9zZXRBY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnM6KE5TU2V0
PE5TU3RyaW5nICo+ICopcGF0dGVybnMKK3sKKyAgICBpZiAoIXBhdHRlcm5zKSB7CisgICAgICAg
IF93ZWJzaXRlUG9saWNpZXMtPnNldEFjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNQYXR0ZXJu
cyhzdGQ6Om51bGxvcHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSGFzaFNldDxT
dHJpbmc+IHBhdHRlcm5IYXNoU2V0OworICAgIHBhdHRlcm5IYXNoU2V0LnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkocGF0dGVybnMuY291bnQpOworICAgIGZvciAoTlNTdHJpbmcgKnBhdHRlcm4gaW4g
cGF0dGVybnMpCisgICAgICAgIHBhdHRlcm5IYXNoU2V0LmFkZChwYXR0ZXJuKTsKKyAgICBfd2Vi
c2l0ZVBvbGljaWVzLT5zZXRBY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMoV1RG
TW92ZShwYXR0ZXJuSGFzaFNldCkpOworfQorCistIChOU1NldDxOU1N0cmluZyAqPiAqKV9hY3Rp
dmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMKK3sKKyAgICBjb25zdCBhdXRvJiBwYXR0
ZXJucyA9IF93ZWJzaXRlUG9saWNpZXMtPmFjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNQYXR0
ZXJucygpOworICAgIGlmICghcGF0dGVybnMpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBO
U011dGFibGVTZXQ8TlNTdHJpbmcgKj4gKnNldCA9IFtOU011dGFibGVTZXQgc2V0XTsKKyAgICBm
b3IgKGNvbnN0IGF1dG8mIHBhdHRlcm4gOiAqcGF0dGVybnMpCisgICAgICAgIFtzZXQgYWRkT2Jq
ZWN0OnBhdHRlcm5dOworICAgIHJldHVybiBzZXQ7Cit9CisKIC0gKHZvaWQpX3NldEFsbG93ZWRB
dXRvcGxheVF1aXJrczooX1dLV2Vic2l0ZUF1dG9wbGF5UXVpcmspYWxsb3dlZFF1aXJrcwogewog
ICAgIE9wdGlvblNldDxXZWJLaXQ6OldlYnNpdGVBdXRvcGxheVF1aXJrPiBxdWlya3M7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJwYWdlUHJlZmVyZW5jZXNQ
cml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2VicGFnZVByZWZlcmVuY2VzUHJpdmF0ZS5oCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJwYWdlUHJlZmVyZW5jZXNQcml2YXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDcgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5T
VUludGVnZXIsIF9XS1dlYnNpdAogQGludGVyZmFjZSBXS1dlYnBhZ2VQcmVmZXJlbmNlcyAoV0tQ
cml2YXRlKQogCiBAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRDb250ZW50QmxvY2tl
cnNFbmFibGVkOikgQk9PTCBfY29udGVudEJsb2NrZXJzRW5hYmxlZDsKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCBjb3B5LCBzZXR0ZXI9X3NldEFjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNQYXR0
ZXJuczopIE5TU2V0PE5TU3RyaW5nICo+ICpfYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc1Bh
dHRlcm5zOwogQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0QWxsb3dlZEF1dG9wbGF5
UXVpcmtzOikgX1dLV2Vic2l0ZUF1dG9wbGF5UXVpcmsgX2FsbG93ZWRBdXRvcGxheVF1aXJrczsK
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldEF1dG9wbGF5UG9saWN5OikgX1dLV2Vi
c2l0ZUF1dG9wbGF5UG9saWN5IF9hdXRvcGxheVBvbGljeTsKIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCBjb3B5LCBzZXR0ZXI9X3NldEN1c3RvbUhlYWRlckZpZWxkczopIE5TQXJyYXk8X1dLQ3VzdG9t
SGVhZGVyRmllbGRzICo+ICpfY3VzdG9tSGVhZGVyRmllbGRzOwpJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUubW0JKHJldmlzaW9uIDI4NTk1NCkKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAICsgKGluc3RhbmNldHlwZSlzdG9yZVdpdGhVUkw6
KE5TVVJMICopdXIKIAogLSAodm9pZCljb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZp
ZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjooTlNTdHJp
bmcgKillbmNvZGVkQ29udGVudFJ1bGVMaXN0IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShf
V0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0g
ICAgW19jb250ZW50UnVsZUxpc3RTdG9yZSBfY29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50
aWZpZXI6aWRlbnRpZmllciBlbmNvZGVkQ29udGVudFJ1bGVMaXN0OmVuY29kZWRDb250ZW50UnVs
ZUxpc3QgY29tcGxldGlvbkhhbmRsZXI6XihXS0NvbnRlbnRSdWxlTGlzdCAqY29udGVudFJ1bGVM
aXN0LCBOU0Vycm9yICplcnJvcikgeworICAgIFtfY29udGVudFJ1bGVMaXN0U3RvcmUgY29tcGls
ZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6aWRlbnRpZmllciBlbmNvZGVkQ29udGVudFJ1
bGVMaXN0OmVuY29kZWRDb250ZW50UnVsZUxpc3QgY29tcGxldGlvbkhhbmRsZXI6XihXS0NvbnRl
bnRSdWxlTGlzdCAqY29udGVudFJ1bGVMaXN0LCBOU0Vycm9yICplcnJvcikgewogICAgICAgICBh
dXRvIGNvbnRlbnRGaWx0ZXIgPSBjb250ZW50UnVsZUxpc3QgPyBhZG9wdE5TKFtbX1dLVXNlckNv
bnRlbnRGaWx0ZXIgYWxsb2NdIF9pbml0V2l0aFdLQ29udGVudFJ1bGVMaXN0OmNvbnRlbnRSdWxl
TGlzdF0pIDogbmlsOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihjb250ZW50RmlsdGVyLmdl
dCgpLCB0b1VzZXJDb250ZW50UnVsZUxpc3RTdG9yZUVycm9yKGVycm9yKSk7CiAgICAgfV07Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJTdHJhdGVneS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViTG9h
ZGVyU3RyYXRlZ3kuY3BwCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvTmV0d29yay9XZWJMb2FkZXJTdHJhdGVneS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3
OSw2ICs0NzksMTIgQEAgdm9pZCBXZWJMb2FkZXJTdHJhdGVneTo6cmVtb3ZlKFJlc291cmNlTAog
ICAgIEFTU0VSVChyZXNvdXJjZUxvYWRlcik7CiAgICAgTE9HKE5ldHdvcmtTY2hlZHVsaW5nLCAi
KFdlYlByb2Nlc3MpIFdlYkxvYWRlclN0cmF0ZWd5OjpyZW1vdmUsIHVybCAnJXMnIiwgcmVzb3Vy
Y2VMb2FkZXItPnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCisgICAgYXV0byBpZGVu
dGlmaWVyID0gcmVzb3VyY2VMb2FkZXItPmlkZW50aWZpZXIoKTsKKyAgICBpZiAoIWlkZW50aWZp
ZXIpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJXZWJMb2FkZXJTdHJhdGVneSByZW1vdmluZyBhIFJl
c291cmNlTG9hZGVyIHRoYXQgaGFzIG5vIGlkZW50aWZpZXIuIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKICAgICBpZiAoYXV0byB0YXNrID0gbV91cmxTY2hlbWVUYXNrcy50YWtlKHJlc291
cmNlTG9hZGVyLT5pZGVudGlmaWVyKCkpKSB7CiAgICAgICAgIEFTU0VSVCghbV9pbnRlcm5hbGx5
RmFpbGVkUmVzb3VyY2VMb2FkZXJzLmNvbnRhaW5zKHJlc291cmNlTG9hZGVyKSk7CiAgICAgICAg
IHRhc2stPnN0b3BMb2FkaW5nKCk7CkBAIC00ODksMTIgKzQ5NSw2IEBAIHZvaWQgV2ViTG9hZGVy
U3RyYXRlZ3k6OnJlbW92ZShSZXNvdXJjZUwKICAgICAgICAgbV9pbnRlcm5hbGx5RmFpbGVkUmVz
b3VyY2VMb2FkZXJzLnJlbW92ZShyZXNvdXJjZUxvYWRlcik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgCi0gICAgYXV0byBpZGVudGlmaWVyID0gcmVzb3VyY2VMb2FkZXItPmlkZW50aWZp
ZXIoKTsKLSAgICBpZiAoIWlkZW50aWZpZXIpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJXZWJMb2Fk
ZXJTdHJhdGVneSByZW1vdmluZyBhIFJlc291cmNlTG9hZGVyIHRoYXQgaGFzIG5vIGlkZW50aWZp
ZXIuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICBSZWZQdHI8V2ViUmVzb3VyY2VM
b2FkZXI+IGxvYWRlciA9IG1fd2ViUmVzb3VyY2VMb2FkZXJzLnRha2UoaWRlbnRpZmllcik7CiAg
ICAgLy8gTG9hZGVyIG1heSBub3QgYmUgcmVnaXN0ZXJlZCBpZiB3ZSBjcmVhdGVkIGl0LCBidXQg
aGF2ZW4ndCBzY2hlZHVsZWQgeWV0IChhIGJ1bmRsZSBjbGllbnQgY2FuIGRlY2lkZSB0byBjYW5j
ZWwgc3VjaCByZXF1ZXN0IHZpYSB3aWxsU2VuZFJlcXVlc3QpLgpJbmRleDogVG9vbHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjg1OTU0KQorKysg
VG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjEtMTEt
MTcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAg
ICBJbXBsZW1lbnQgbW9zdCBvZiByZWRpcmVjdCBhbmQgbW9kaWZ5LWhlYWRlcnMgYWN0aW9uIHR5
cGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzMy
NjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHA6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRl
KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmNoZWNrQ29tcGlsZXJFcnJvcik6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpURVNUX0YpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUubW06CisgICAgICAgIChjb21waWxl
Q29udGVudFJ1bGVMaXN0KToKKyAgICAgICAgKG5hdmlnYXRpb25EZWxlZ2F0ZUFsbG93aW5nQWN0
aXZlQWN0aW9uc09uVGVzdEhvc3QpOgorICAgICAgICAoVEVTVF9GKToKKwogMjAyMS0xMS0xNyAg
Wml4aW5nIExpdSAgPGxpdXNodXl1MDExQGdtYWlsLmNvbT4KIAogICAgICAgICBbR1RLXVtXUEVd
IFN1cHBvcnQgZ2V0dGluZyBhbmQgc2V0dGluZyBIVFRQIGhlYWRlcnMgaW4gY3VzdG9tIFVSSSBz
Y2hlbWUgaGFuZGxlcnMKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9D
b250ZW50RXh0ZW5zaW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zLmNwcAkocmV2aXNpb24gMjg1OTU0KQorKysg
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTI5LDcgKzEyOSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IENvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEgZXh0ZW5zaW9uRGF0YTsKICAgICAgICAgSW5N
ZW1vcnlDb250ZW50RXh0ZW5zaW9uQ29tcGlsYXRpb25DbGllbnQgY2xpZW50KGV4dGVuc2lvbkRh
dGEpOwotICAgICAgICBhdXRvIHBhcnNlZFJ1bGVzID0gQ29udGVudEV4dGVuc2lvbnM6OnBhcnNl
UnVsZUxpc3QoZmlsdGVyLCB7IH0pOworICAgICAgICBhdXRvIHBhcnNlZFJ1bGVzID0gQ29udGVu
dEV4dGVuc2lvbnM6OnBhcnNlUnVsZUxpc3QoZmlsdGVyLCBzdGQ6Om51bGxvcHQpOwogICAgICAg
ICBhdXRvIGNvbXBpbGVyRXJyb3IgPSBDb250ZW50RXh0ZW5zaW9uczo6Y29tcGlsZVJ1bGVMaXN0
KGNsaWVudCwgV1RGTW92ZShmaWx0ZXIpLCBXVEZNb3ZlKHBhcnNlZFJ1bGVzLnZhbHVlKCkpKTsK
IAogICAgICAgICAvLyBDb21waWxpbmcgc2hvdWxkIGFsd2F5cyBzdWNjZWVkIGhlcmUuIFdlIGhh
dmUgb3RoZXIgdGVzdHMgZm9yIGNvbXBpbGUgZmFpbHVyZXMuCkBAIC0xMzYwLDcgKzEzNjAsNyBA
QCBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIERlZXBORkEpCiAgICAgRVhQRUNUX0VRKDF1
bCwgY3JlYXRlTkZBcyhjb21iaW5lZFVSTEZpbHRlcnMpLnNpemUoKSk7CiB9CiAKLXZvaWQgY2hl
Y2tDb21waWxlckVycm9yKGNvbnN0IGNoYXIqIGpzb24sIHN0ZDo6ZXJyb3JfY29kZSBleHBlY3Rl
ZEVycm9yLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGFsbG93ZWRSZWRpcmVjdFVSTFNjaGVtZXMg
PSB7IH0pCit2b2lkIGNoZWNrQ29tcGlsZXJFcnJvcihjb25zdCBjaGFyKiBqc29uLCBzdGQ6OmVy
cm9yX2NvZGUgZXhwZWN0ZWRFcnJvciwgY29uc3Qgc3RkOjpvcHRpb25hbDxIYXNoU2V0PFN0cmlu
Zz4+JiBhbGxvd2VkUmVkaXJlY3RVUkxTY2hlbWVzID0gc3RkOjpudWxsb3B0KQogewogICAgIENv
bXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEgZXh0ZW5zaW9uRGF0YTsKICAgICBJbk1lbW9yeUNv
bnRlbnRFeHRlbnNpb25Db21waWxhdGlvbkNsaWVudCBjbGllbnQoZXh0ZW5zaW9uRGF0YSk7CkBA
IC0xNTMwLDYgKzE1MzAsNyBAQCBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIEludmFsaWRK
U09OCiAgICAgICAgIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRBY3Rpb25UeXBl
KTsKICAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJjc3Mt
ZGlzcGxheS1ub25lXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdc
In19XSIsCiAgICAgICAgIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRDU1NEaXNw
bGF5Tm9uZUFjdGlvblR5cGUpOworICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiIiwgQ29udGVudEV4
dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RVUkxTY2hlbWVzU2hvdWxkTm90SW5jbHVkZUphdmFz
Y3JpcHQsIHsgeyAiamF2YXNjcmlwdCIgfSB9KTsKIAogICAgIGNoZWNrQ29tcGlsZXJFcnJvcigi
W3tcImFjdGlvblwiOntcInR5cGVcIjpcImlnbm9yZS1wcmV2aW91cy1ydWxlc1wifSxcInRyaWdn
ZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fSwiCiAgICAgICAgICJ7XCJhY3Rp
b25cIjp7XCJ0eXBlXCI6XCJjc3MtZGlzcGxheS1ub25lXCIsXCJzZWxlY3RvclwiOlwiLmhpZGRl
blwifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCIuKlwifX1dIiwgeyB9KTsKQEAgLTE1
NTgsMTIgKzE1NTksMjAgQEAgVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBJbnZhbGlkSlNP
TgogICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGly
ZWN0XCIsXCJyZWRpcmVjdFwiOntcInRyYW5zZm9ybVwiOntcInF1ZXJ5LXRyYW5zZm9ybVwiOntc
ImFkZC1vci1yZXBsYWNlLXBhcmFtZXRlcnNcIjpbe31dfX19fSxcInRyaWdnZXJcIjp7XCJ1cmwt
ZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05B
ZGRPclJlcGxhY2VQYXJhbWV0ZXJzS2V5VmFsdWVNaXNzaW5nS2V5U3RyaW5nKTsKICAgICBjaGVj
a0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVk
aXJlY3RcIjp7XCJ0cmFuc2Zvcm1cIjp7XCJxdWVyeS10cmFuc2Zvcm1cIjp7XCJhZGQtb3ItcmVw
bGFjZS1wYXJhbWV0ZXJzXCI6W3tcImtleVwiOjV9XX19fX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZp
bHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OQWRk
T3JSZXBsYWNlUGFyYW1ldGVyc0tleVZhbHVlTWlzc2luZ0tleVN0cmluZyk7CiAgICAgY2hlY2tD
b21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixcInJlZGly
ZWN0XCI6e1widHJhbnNmb3JtXCI6e1wicXVlcnktdHJhbnNmb3JtXCI6e1wiYWRkLW9yLXJlcGxh
Y2UtcGFyYW1ldGVyc1wiOlt7XCJrZXlcIjpcImtcIixcInZhbHVlXCI6NX1dfX19fSxcInRyaWdn
ZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9u
RXJyb3I6OkpTT05BZGRPclJlcGxhY2VQYXJhbWV0ZXJzS2V5VmFsdWVNaXNzaW5nVmFsdWVTdHJp
bmcpOwotICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJl
ZGlyZWN0XCIsXCJyZWRpcmVjdFwiOntcInVybFwiOlwiYWJvdXQ6YmxhbmtcIn19LFwidHJpZ2dl
clwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsIENvbnRlbnRFeHRlbnNpb25F
cnJvcjo6SlNPTlJlZGlyZWN0VVJMU2NoZW1lTm90QWxsb3dlZCk7Ci0gICAgY2hlY2tDb21waWxl
ckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixcInJlZGlyZWN0XCI6
e1widXJsXCI6XCJhYm91dDpibGFua1wifX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwi
d2Via2l0Lm9yZ1wifX1dIiwgeyB9LCB7ICJhYm91dCIgfSk7Ci0gICAgY2hlY2tDb21waWxlckVy
cm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixcInJlZGlyZWN0XCI6e1wi
ZXh0ZW5zaW9uLXBhdGhcIjpcImRvZXMvbm90L3N0YXJ0L3dpdGgvc2xhc2gvXCJ9fSxcInRyaWdn
ZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9u
RXJyb3I6OkpTT05SZWRpcmVjdEV4dGVuc2lvblBhdGhEb2VzTm90U3RhcnRXaXRoU2xhc2gpOwor
ICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0
XCIsXCJyZWRpcmVjdFwiOntcInVybFwiOlwiYWJvdXQ6YmxhbmtcIn19LFwidHJpZ2dlclwiOntc
InVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6
SlNPTlJlZGlyZWN0VVJMU2NoZW1lTm90QWxsb3dlZCwgeyB7ICJub3QtYWJvdXQiIH0gfSk7Cisg
ICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3Rc
IixcInJlZGlyZWN0XCI6e1widXJsXCI6XCJhYm91dDpibGFua1wifX0sXCJ0cmlnZ2VyXCI6e1wi
dXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwgeyB9LCB7IHsgImFib3V0IiB9IH0pOwor
ICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0
XCIsXCJyZWRpcmVjdFwiOntcInVybFwiOlwiaHR0cHM6Ly8xMjcuLjEvXCJ9fSxcInRyaWdnZXJc
Ijp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9uRXJy
b3I6OkpTT05SZWRpcmVjdFVSTEludmFsaWQsIHsgeyAiaHR0cHMiIH0gfSk7CisgICAgY2hlY2tD
b21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixcInJlZGly
ZWN0XCI6e1widXJsXCI6XCJhYm91dDpibGFua1wifX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRl
clwiOlwid2Via2l0Lm9yZ1wifX1dIiwgeyB9LCB7IHsgImFib3V0IiB9IH0pOworICAgIGNoZWNr
Q29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRp
cmVjdFwiOntcInRyYW5zZm9ybVwiOntcInBvcnRcIjpcIm5vdCBhIG51bWJlclwifX19LFwidHJp
Z2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsIENvbnRlbnRFeHRlbnNp
b25FcnJvcjo6SlNPTlJlZGlyZWN0SW52YWxpZFBvcnQpOworICAgIGNoZWNrQ29tcGlsZXJFcnJv
cigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRpcmVjdFwiOntcInRy
YW5zZm9ybVwiOntcInBvcnRcIjpcIjY1NTM2XCJ9fX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRl
clwiOlwid2Via2l0Lm9yZ1wifX1dIiwgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJl
Y3RJbnZhbGlkUG9ydCk7CisgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1wi
dHlwZVwiOlwicmVkaXJlY3RcIixcInJlZGlyZWN0XCI6e1widHJhbnNmb3JtXCI6e1wicXVlcnlc
IjpcIm5vLXF1ZXN0aW9uLW1hcmtcIn19fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3
ZWJraXQub3JnXCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdEludmFs
aWRRdWVyeSk7CisgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwi
OlwicmVkaXJlY3RcIixcInJlZGlyZWN0XCI6e1widHJhbnNmb3JtXCI6e1wiZnJhZ21lbnRcIjpc
Im5vLW51bWJlci1zaWduXCJ9fX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0
Lm9yZ1wifX1dIiwgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RJbnZhbGlkRnJh
Z21lbnQpOworICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpc
InJlZGlyZWN0XCIsXCJyZWRpcmVjdFwiOntcInRyYW5zZm9ybVwiOntcInBvcnRcIjpcIjY1NTM1
XCJ9fX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwgeyB9
KTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRp
cmVjdFwiLFwicmVkaXJlY3RcIjp7XCJ0cmFuc2Zvcm1cIjp7XCJwb3J0XCI6XCJcIn19fSxcInRy
aWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCB7IH0pOwogICAgIGNo
ZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJy
ZWRpcmVjdFwiOntcImV4dGVuc2lvbi1wYXRoXCI6XCIvZG9lcy9zdGFydC93aXRoL3NsYXNoL1wi
fX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwgeyB9KTsK
LSAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVj
dFwiLFwicmVkaXJlY3RcIjp7XCJ0cmFuc2Zvcm1cIjp7XCJzY2hlbWVcIjpcImFib3V0XCJ9fX0s
XCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwgQ29udGVudEV4
dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RVUkxTY2hlbWVOb3RBbGxvd2VkKTsKLSAgICBjaGVj
a0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVk
aXJlY3RcIjp7XCJ0cmFuc2Zvcm1cIjp7XCJzY2hlbWVcIjpcImFib3V0XCJ9fX0sXCJ0cmlnZ2Vy
XCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwgeyB9LCB7ICJhYm91dCIgfSk7
CisgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJl
Y3RcIixcInJlZGlyZWN0XCI6e1widHJhbnNmb3JtXCI6e1wic2NoZW1lXCI6XCJhYm91dFwifX19
LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsIENvbnRlbnRF
eHRlbnNpb25FcnJvcjo6SlNPTlJlZGlyZWN0VVJMU2NoZW1lTm90QWxsb3dlZCwgeyB7ICJub3Qt
YWJvdXQiIH0gfSk7CisgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlw
ZVwiOlwicmVkaXJlY3RcIixcInJlZGlyZWN0XCI6e1widHJhbnNmb3JtXCI6e1wic2NoZW1lXCI6
XCIhQCMkJVwifX19LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19
XSIsIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTlJlZGlyZWN0VVJMU2NoZW1lSW52YWxpZCk7
CisgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJl
Y3RcIixcInJlZGlyZWN0XCI6e1widHJhbnNmb3JtXCI6e1wic2NoZW1lXCI6XCJBYm91dFwifX19
LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsIHsgfSwgeyB7
ICJhYm91dCIgfSB9KTsKICAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0
eXBlXCI6XCJtb2RpZnktaGVhZGVyc1wiLFwicmVxdWVzdC1oZWFkZXJzXCI6NX0sXCJ0cmlnZ2Vy
XCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwgQ29udGVudEV4dGVuc2lvbkVy
cm9yOjpKU09OTW9kaWZ5SGVhZGVyc05vdEFycmF5KTsKICAgICBjaGVja0NvbXBpbGVyRXJyb3Io
Ilt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJtb2RpZnktaGVhZGVyc1wiLFwicmVxdWVzdC1oZWFk
ZXJzXCI6WzVdfSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0i
LCBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05Nb2RpZnlIZWFkZXJzSW5mb05vdEFEaWN0aW9u
YXJ5KTsKICAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJt
b2RpZnktaGVhZGVyc1wiLFwicmVxdWVzdC1oZWFkZXJzXCI6W3t9XX0sXCJ0cmlnZ2VyXCI6e1wi
dXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwgQ29udGVudEV4dGVuc2lvbkVycm9yOjpK
U09OTW9kaWZ5SGVhZGVyc01pc3NpbmdPcGVyYXRpb24pOwpAQCAtMzAyNCwxMSArMzAzMywxMSBA
QCBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIFNlcmlhbGl6YXRpCiAgICAgICAgICJob3N0
IiwKICAgICAgICAgInBhc3N3b3JkIiwKICAgICAgICAgeyAvKiBwYXRoICovIH0sCi0gICAgICAg
ICJwb3J0IiwKKyAgICAgICAgMTIzLAogICAgICAgICB7IC8qIHF1ZXJ5ICovIH0sCiAgICAgICAg
ICJzY2hlbWUiLAogICAgICAgICAidXNlcm5hbWUiCi0gICAgfSB9IH0sIDc1KTsKKyAgICB9IH0g
fSwgNzApOwogICAgIGNoZWNrUmVkaXJlY3RBY3Rpb25TZXJpYWxpemF0aW9uKHsgeyBSZWRpcmVj
dEFjdGlvbjo6VVJMVHJhbnNmb3JtQWN0aW9uIHsgeyB9LCB7IH0sIHsgfSwgeyB9LCB7IH0sIHsg
InF1ZXJ5IiB9LCB7IH0sIHsgfSB9IH0gfSwgMjApOwogICAgIGNoZWNrUmVkaXJlY3RBY3Rpb25T
ZXJpYWxpemF0aW9uKHsgeyBSZWRpcmVjdEFjdGlvbjo6VVJMVHJhbnNmb3JtQWN0aW9uIHsgeyB9
LCB7IH0sIHsgfSwgeyB9LCB7IH0sCiAgICAgICAgIHsgUmVkaXJlY3RBY3Rpb246OlVSTFRyYW5z
Zm9ybUFjdGlvbjo6UXVlcnlUcmFuc2Zvcm0geyB7IHsgImtleTEiLCBmYWxzZSwgInZhbHVlMSIg
fSwgeyAia2V58J+SqSIsIGZhbHNlLCAidmFsdWUyIiB9IH0sIHsgInRlc3RTdHJpbmcxIiwgInRl
c3RTdHJpbmcyIiB9IH0gfSwgeyB9LCB7IH0sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tDb250ZW50RXh0ZW5zaW9u
U3RvcmUubW0JKHJldmlzaW9uIDI4NTk1NCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI4LDExICsyOCwxNSBAQAogCiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgogI2ltcG9y
dCAiVGVzdC5oIgorI2ltcG9ydCAiVGVzdE5hdmlnYXRpb25EZWxlZ2F0ZS5oIgorI2ltcG9ydCAi
VGVzdFVSTFNjaGVtZUhhbmRsZXIuaCIKICNpbXBvcnQgPFdlYktpdC9XS0NvbnRlbnRSdWxlTGlz
dC5oPgogI2ltcG9ydCA8V2ViS2l0L1dLQ29udGVudFJ1bGVMaXN0U3RvcmVQcml2YXRlLmg+Cisj
aW1wb3J0IDxXZWJLaXQvV0tXZWJwYWdlUHJlZmVyZW5jZXNQcml2YXRlLmg+CiAjaW1wb3J0IDxX
ZWJLaXQvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oPgogI2ltcG9ydCA8V2ViS2l0L19X
S1VzZXJDb250ZW50RmlsdGVyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0
IDx3dGYvVmVjdG9yLmg+CiAKIGNsYXNzIFdLQ29udGVudFJ1bGVMaXN0U3RvcmVUZXN0IDogcHVi
bGljIHRlc3Rpbmc6OlRlc3QgewogcHVibGljOgpAQCAtNDc0LDMgKzQ3OCwyNzYgQEAgVEVTVF9G
KFdLQ29udGVudFJ1bGVMaXN0U3RvcmVUZXN0LCBfV0tVcwogICAgIH1dOwogICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmZG9uZUxvb2tpbmdVcCk7CiB9CisKK3N0YXRpYyBSZXRhaW5QdHI8
V0tDb250ZW50UnVsZUxpc3Q+IGNvbXBpbGVDb250ZW50UnVsZUxpc3QoY29uc3QgY2hhcioganNv
biwgTlNTdHJpbmcgKmlkZW50aWZpZXIgPSBAInRlc3RpZGVudGlmaWVyIikKK3sKKyAgICBbW1dL
Q29udGVudFJ1bGVMaXN0U3RvcmUgZGVmYXVsdFN0b3JlXSBfcmVtb3ZlQWxsQ29udGVudFJ1bGVM
aXN0c107CisKKyAgICBfX2Jsb2NrIFJldGFpblB0cjxXS0NvbnRlbnRSdWxlTGlzdD4gbGlzdDsK
KyAgICBbW1dLQ29udGVudFJ1bGVMaXN0U3RvcmUgZGVmYXVsdFN0b3JlXSBfY29tcGlsZUNvbnRl
bnRSdWxlTGlzdEZvcklkZW50aWZpZXI6QCJ0ZXN0aWRlbnRpZmllciIgZW5jb2RlZENvbnRlbnRS
dWxlTGlzdDpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVzIiwganNvbl0gYWxsb3dlZFJl
ZGlyZWN0U2NoZW1lczpbTlNTZXQgc2V0V2l0aE9iamVjdHM6QCJ0ZXN0c2NoZW1lIiwgQCJvdGhl
cnRlc3RzY2hlbWUiLCBuaWxdIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tDb250ZW50UnVsZUxpc3Qg
KmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOwor
ICAgICAgICBsaXN0ID0gZmlsdGVyOworICAgIH1dOworICAgIHdoaWxlICghbGlzdCkKKyAgICAg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoKTsKKworICAgIHJldHVybiBsaXN0
OworfQorCitzdGF0aWMgUmV0YWluUHRyPFRlc3ROYXZpZ2F0aW9uRGVsZWdhdGU+IG5hdmlnYXRp
b25EZWxlZ2F0ZUFsbG93aW5nQWN0aXZlQWN0aW9uc09uVGVzdEhvc3QoKQoreworICAgIHN0YXRp
YyBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbVGVzdE5hdmlnYXRpb25EZWxlZ2F0ZSBuZXddKTsK
KyAgICBkZWxlZ2F0ZS5nZXQoKS5kZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uV2l0aFBy
ZWZlcmVuY2VzID0gXihXS05hdmlnYXRpb25BY3Rpb24gKiwgV0tXZWJwYWdlUHJlZmVyZW5jZXMg
KnByZWZlcmVuY2VzLCB2b2lkICheZGVjaXNpb25IYW5kbGVyKShXS05hdmlnYXRpb25BY3Rpb25Q
b2xpY3ksIFdLV2VicGFnZVByZWZlcmVuY2VzICopKSB7CisgICAgICAgIHByZWZlcmVuY2VzLl9h
Y3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMgPSBbTlNTZXQgc2V0V2l0aE9iamVj
dDpAIio6Ly90ZXN0aG9zdC8qIl07CisgICAgICAgIGRlY2lzaW9uSGFuZGxlcihXS05hdmlnYXRp
b25BY3Rpb25Qb2xpY3lBbGxvdywgcHJlZmVyZW5jZXMpOworICAgIH07CisgICAgcmV0dXJuIGRl
bGVnYXRlOworfQorCitURVNUX0YoV0tDb250ZW50UnVsZUxpc3RTdG9yZVRlc3QsIE1vZGlmeUhl
YWRlcnMpCit7CisgICAgYXV0byBsaXN0ID0gY29tcGlsZUNvbnRlbnRSdWxlTGlzdChSIkpTT04o
CisgICAgICAgIFsgeworICAgICAgICAgICAgImFjdGlvbiI6IHsgInR5cGUiOiAibW9kaWZ5LWhl
YWRlcnMiLCAicmVxdWVzdC1oZWFkZXJzIjogWyB7CisgICAgICAgICAgICAgICAgIm9wZXJhdGlv
biI6ICJzZXQiLAorICAgICAgICAgICAgICAgICJoZWFkZXIiOiAidGVzdGtleSIsCisgICAgICAg
ICAgICAgICAgInZhbHVlIjogInRlc3R2YWx1ZSIKKyAgICAgICAgICAgIH0gXSB9LAorICAgICAg
ICAgICAgInRyaWdnZXIiOiB7ICJ1cmwtZmlsdGVyIjogInRlc3RzY2hlbWUiIH0KKyAgICAgICAg
fSwgeworICAgICAgICAgICAgImFjdGlvbiI6IHsgInR5cGUiOiAibW9kaWZ5LWhlYWRlcnMiLCAi
cmVxdWVzdC1oZWFkZXJzIjogWyB7CisgICAgICAgICAgICAgICAgIm9wZXJhdGlvbiI6ICJyZW1v
dmUiLAorICAgICAgICAgICAgICAgICJoZWFkZXIiOiAiQWNjZXB0IgorICAgICAgICAgICAgfSBd
IH0sCisgICAgICAgICAgICAidHJpZ2dlciI6IHsgInVybC1maWx0ZXIiOiAidGVzdHNjaGVtZSIg
fQorICAgICAgICB9LCB7CisgICAgICAgICAgICAiYWN0aW9uIjogeyAidHlwZSI6ICJtb2RpZnkt
aGVhZGVycyIsICJyZXF1ZXN0LWhlYWRlcnMiOiBbIHsKKyAgICAgICAgICAgICAgICAib3BlcmF0
aW9uIjogImFwcGVuZCIsCisgICAgICAgICAgICAgICAgImhlYWRlciI6ICJDb250ZW50LVR5cGUi
LAorICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICJNb2RpZmllZC1ieS10ZXN0IgorICAgICAgICAg
ICAgfSBdIH0sCisgICAgICAgICAgICAidHJpZ2dlciI6IHsgInVybC1maWx0ZXIiOiAidGVzdHNj
aGVtZSIgfQorICAgICAgICB9IF0KKyAgICApSlNPTiIpOworCisgICAgX19ibG9jayBib29sIHJl
Y2VpdmVkQWxsUmVxdWVzdHMgeyBmYWxzZSB9OworICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMo
W1Rlc3RVUkxTY2hlbWVIYW5kbGVyIG5ld10pOworICAgIGhhbmRsZXIuZ2V0KCkuc3RhcnRVUkxT
Y2hlbWVUYXNrSGFuZGxlciA9IF4oV0tXZWJWaWV3ICosIGlkIDxXS1VSTFNjaGVtZVRhc2s+IHRh
c2spIHsKKyAgICAgICAgTlNTdHJpbmcgKnBhdGggPSB0YXNrLnJlcXVlc3QuVVJMLnBhdGg7Cisg
ICAgICAgIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBOU1N0cmluZyAqPiAqZmllbGRzID0gW3Rh
c2sucmVxdWVzdCBhbGxIVFRQSGVhZGVyRmllbGRzXTsKKyAgICAgICAgaWYgKFtwYXRoIGlzRXF1
YWxUb1N0cmluZzpAIi9tYWluLmh0bWwiXSkgeworICAgICAgICAgICAgRVhQRUNUX1dLX1NUUkVR
KGZpZWxkc1tAIkNvbnRlbnQtVHlwZSJdLCAiTW9kaWZpZWQtYnktdGVzdCIpOworICAgICAgICAg
ICAgRVhQRUNUX1dLX1NUUkVRKGZpZWxkc1tAInRlc3RrZXkiXSwgInRlc3R2YWx1ZSIpOworICAg
ICAgICAgICAgRVhQRUNUX05VTEwoZmllbGRzW0AiQWNjZXB0Il0pOworICAgICAgICAgICAgcmV0
dXJuIHJlc3BvbmQodGFzaywgIjxpZnJhbWUgc3JjPScvL290aGVyaG9zdC9mcmFtZS5odG1sJz48
L2lmcmFtZT4iKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoW3BhdGggaXNFcXVhbFRvU3RyaW5n
OkAiL2ZyYW1lLmh0bWwiXSkgeworICAgICAgICAgICAgRVhQRUNUX05VTEwoZmllbGRzW0AiQ29u
dGVudC1UeXBlIl0pOworICAgICAgICAgICAgRVhQRUNUX05VTEwoZmllbGRzW0AidGVzdGtleSJd
KTsKKyAgICAgICAgICAgIEVYUEVDVF9OT1RfTlVMTChmaWVsZHNbQCJBY2NlcHQiXSk7CisgICAg
ICAgICAgICByZXR1cm4gcmVzcG9uZCh0YXNrLCAiPHNjcmlwdD5mZXRjaCgnLy90ZXN0aG9zdC9m
ZXRjaC50eHQnLHtoZWFkZXJzOiB7J0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ319
KTwvc2NyaXB0PiIpOworICAgICAgICB9CisgICAgICAgIGlmIChbcGF0aCBpc0VxdWFsVG9TdHJp
bmc6QCIvZmV0Y2gudHh0Il0pIHsKKyAgICAgICAgICAgIEVYUEVDVF9XS19TVFJFUShmaWVsZHNb
QCJDb250ZW50LVR5cGUiXSwgImFwcGxpY2F0aW9uL2pzb247IE1vZGlmaWVkLWJ5LXRlc3QiKTsK
KyAgICAgICAgICAgIEVYUEVDVF9XS19TVFJFUShmaWVsZHNbQCJ0ZXN0a2V5Il0sICJ0ZXN0dmFs
dWUiKTsKKyAgICAgICAgICAgIEVYUEVDVF9OVUxMKGZpZWxkc1tAIkFjY2VwdCJdKTsKKyAgICAg
ICAgICAgIHJlY2VpdmVkQWxsUmVxdWVzdHMgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJl
c3BvbmQodGFzaywgIiIpOworICAgICAgICB9CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH07CisKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtXS1dlYlZpZXdD
b25maWd1cmF0aW9uIG5ld10pOworICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRy
b2xsZXJdIGFkZENvbnRlbnRSdWxlTGlzdDpsaXN0LmdldCgpXTsKKyAgICBbY29uZmlndXJhdGlv
biBzZXRVUkxTY2hlbWVIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgZm9yVVJMU2NoZW1lOkAidGVzdHNj
aGVtZSJdOworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6TlNaZXJvUmVjdCBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCld
KTsKKyAgICB3ZWJWaWV3LmdldCgpLm5hdmlnYXRpb25EZWxlZ2F0ZSA9IG5hdmlnYXRpb25EZWxl
Z2F0ZUFsbG93aW5nQWN0aXZlQWN0aW9uc09uVGVzdEhvc3QoKS5nZXQoKTsKKyAgICBbd2ViVmll
dyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRo
U3RyaW5nOkAidGVzdHNjaGVtZTovL3Rlc3Rob3N0L21haW4uaHRtbCJdXV07CisgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZEFsbFJlcXVlc3RzKTsKKyAgICAKKyAgICAvLyBG
SVhNRTogQXBwZW5kaW5nIHRvIHRoZSBVc2VyLUFnZW50IHJlcGxhY2VzIHRoZSB1c2VyIGFnZW50
IGJlY2F1c2Ugd2UgaGF2ZW4ndCBhZGRlZCB0aGUgdXNlciBhZ2VudCB5ZXQgd2hlbiBwcm9jZXNz
aW5nIHRoZSByZXF1ZXN0LgorfQorCitURVNUX0YoV0tDb250ZW50UnVsZUxpc3RTdG9yZVRlc3Qs
IFJlZGlyZWN0KQoreworICAgIGF1dG8gbGlzdCA9IGNvbXBpbGVDb250ZW50UnVsZUxpc3QoUiJK
U09OKAorICAgICAgICBbIHsKKyAgICAgICAgICAgICJhY3Rpb24iOiB7ICJ0eXBlIjogInJlZGly
ZWN0IiwgInJlZGlyZWN0IjogeworICAgICAgICAgICAgICAgICJ1cmwiOiAib3RoZXJ0ZXN0c2No
ZW1lOi8vbm90LXRlc3Rob3N0LzEtcmVkaXJlY3RlZC50eHQiCisgICAgICAgICAgICB9IH0sCisg
ICAgICAgICAgICAidHJpZ2dlciI6IHsgInVybC1maWx0ZXIiOiAiMS50eHQiIH0KKyAgICAgICAg
fSwgeworICAgICAgICAgICAgImFjdGlvbiI6IHsgInR5cGUiOiAicmVkaXJlY3QiLCAicmVkaXJl
Y3QiOiB7ICJ0cmFuc2Zvcm0iOiB7CisgICAgICAgICAgICAgICAgInBvcnQiOiAiMTIzIiwKKyAg
ICAgICAgICAgICAgICAiaWdub3JlZC1jb21tZW50IjogIjEyMyBpcyBhIGZvcmJpZGRlbiBwb3J0
LCBzbyB0aGlzIFVSTCBpcyBub3Qgc2VlbiBieSB0aGUgV0tVUkxTY2hlbWVIYW5kbGVyLiIKKyAg
ICAgICAgICAgIH0gfSB9LAorICAgICAgICAgICAgInRyaWdnZXIiOiB7ICJ1cmwtZmlsdGVyIjog
IjIudHh0IiB9CisgICAgICAgIH0sIHsKKyAgICAgICAgICAgICJhY3Rpb24iOiB7ICJ0eXBlIjog
InJlZGlyZWN0IiwgInJlZGlyZWN0IjogeyAidHJhbnNmb3JtIjogeworICAgICAgICAgICAgICAg
ICJob3N0IjogIm5ld2hvc3QiLAorICAgICAgICAgICAgICAgICJ1c2VybmFtZSI6ICJuZXd1c2Vy
bmFtZSIsCisgICAgICAgICAgICAgICAgInBvcnQiOiAiNDQzIgorICAgICAgICAgICAgfSB9IH0s
CisgICAgICAgICAgICAidHJpZ2dlciI6IHsgInVybC1maWx0ZXIiOiAiMy50eHQiIH0KKyAgICAg
ICAgfSwgeworICAgICAgICAgICAgImFjdGlvbiI6IHsgInR5cGUiOiAicmVkaXJlY3QiLCAicmVk
aXJlY3QiOiB7ICJ0cmFuc2Zvcm0iOiB7CisgICAgICAgICAgICAgICAgInBvcnQiOiAiIiwKKyAg
ICAgICAgICAgICAgICAic2NoZW1lIjogIm90aGVydGVzdHNjaGVtZSIsCisgICAgICAgICAgICAg
ICAgInF1ZXJ5IjogIj9rZXk9dmFsdWUiCisgICAgICAgICAgICB9IH0gfSwKKyAgICAgICAgICAg
ICJ0cmlnZ2VyIjogeyAidXJsLWZpbHRlciI6ICI0LnR4dCIgfQorICAgICAgICB9LCB7CisgICAg
ICAgICAgICAiYWN0aW9uIjogeyAidHlwZSI6ICJyZWRpcmVjdCIsICJyZWRpcmVjdCI6IHsgInRy
YW5zZm9ybSI6IHsKKyAgICAgICAgICAgICAgICAicGFzc3dvcmQiOiAidGVzdHBhc3N3b3JkIiwK
KyAgICAgICAgICAgICAgICAicXVlcnkiOiAiIiwKKyAgICAgICAgICAgICAgICAiZnJhZ21lbnQi
OiAiI2ZyYWdtZW50LXRvLWJlLWFkZGVkIgorICAgICAgICAgICAgfSB9IH0sCisgICAgICAgICAg
ICAidHJpZ2dlciI6IHsgInVybC1maWx0ZXIiOiAiNS50eHQiIH0KKyAgICAgICAgfSwgeworICAg
ICAgICAgICAgImFjdGlvbiI6IHsgInR5cGUiOiAicmVkaXJlY3QiLCAicmVkaXJlY3QiOiB7ICJ0
cmFuc2Zvcm0iOiB7CisgICAgICAgICAgICAgICAgInBhc3N3b3JkIjogInRlc3RwYXNzd29yZCIs
CisgICAgICAgICAgICAgICAgImZyYWdtZW50IjogIiIKKyAgICAgICAgICAgIH0gfSB9LAorICAg
ICAgICAgICAgInRyaWdnZXIiOiB7ICJ1cmwtZmlsdGVyIjogIjYudHh0IiB9CisgICAgICAgIH0s
IHsKKyAgICAgICAgICAgICJhY3Rpb24iOiB7ICJ0eXBlIjogInJlZGlyZWN0IiwgInJlZGlyZWN0
IjogeyAidHJhbnNmb3JtIjogeworICAgICAgICAgICAgICAgICJxdWVyeSI6ICI/IiwKKyAgICAg
ICAgICAgICAgICAiZnJhZ21lbnQiOiAiIyIKKyAgICAgICAgICAgIH0gfSB9LAorICAgICAgICAg
ICAgInRyaWdnZXIiOiB7ICJ1cmwtZmlsdGVyIjogIjcudHh0IiB9CisgICAgICAgIH0sIHsKKyAg
ICAgICAgICAgICJhY3Rpb24iOiB7ICJ0eXBlIjogInJlZGlyZWN0IiwgInJlZGlyZWN0IjogeyAi
dHJhbnNmb3JtIjogeworICAgICAgICAgICAgICAgICJxdWVyeS10cmFuc2Zvcm0iOiB7CisgICAg
ICAgICAgICAgICAgICAgICJyZW1vdmUtcGFyYW1ldGVycyI6IFsgInBhcmFtZXRlci10by1yZW1v
dmUiIF0sCisgICAgICAgICAgICAgICAgICAgICJhZGQtb3ItcmVwbGFjZS1wYXJhbWV0ZXJzIjog
WworICAgICAgICAgICAgICAgICAgICAgICAgeyAia2V5IjogImtleS10by1hZGQiLCAidmFsdWUi
OiAidmFsdWUtdG8tYWRkIiB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAia2V5IjogImtl
eS10by1yZXBsYWNlLW9ubHkiLCAidmFsdWUiOiAidmFsdWUtdG8tcmVwbGFjZS1vbmx5IiwgInJl
cGxhY2Utb25seSI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgImtleSI6ICJr
ZXktdG8tcmVwbGFjZS1vbmx5LWJ1dC1ub3QtZm91bmQiLCAidmFsdWUiOiAidmFsdWUtdG8tcmVw
bGFjZS1vbmx5LWJ1dC1ub3QtZm91bmQiLCAicmVwbGFjZS1vbmx5IjogdHJ1ZSB9CisgICAgICAg
ICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IH0gfSwKKyAg
ICAgICAgICAgICJ0cmlnZ2VyIjogeyAidXJsLWZpbHRlciI6ICI4LnR4dCIgfQorICAgICAgICB9
IF0KKyAgICApSlNPTiIpOworCisgICAgX19ibG9jayBib29sIHJlY2VpdmVkQWxsUmVxdWVzdHMg
eyBmYWxzZSB9OworICAgIF9fYmxvY2sgYXV0byB1cmxzID0gYWRvcHROUyhbTlNNdXRhYmxlQXJy
YXkgbmV3XSk7CisgICAgYXV0byBoYW5kbGVyID0gYWRvcHROUyhbVGVzdFVSTFNjaGVtZUhhbmRs
ZXIgbmV3XSk7CisgICAgaGFuZGxlci5nZXQoKS5zdGFydFVSTFNjaGVtZVRhc2tIYW5kbGVyID0g
XihXS1dlYlZpZXcgKiwgaWQgPFdLVVJMU2NoZW1lVGFzaz4gdGFzaykgeworICAgICAgICBOU1VS
TCAqdXJsID0gdGFzay5yZXF1ZXN0LlVSTDsKKyAgICAgICAgW3VybHMgYWRkT2JqZWN0OnVybF07
CisgICAgICAgIE5TU3RyaW5nICpwYXRoID0gdXJsLnBhdGg7CisgICAgICAgIGlmIChbcGF0aCBp
c0VxdWFsVG9TdHJpbmc6QCIvbWFpbi5odG1sIl0pIHsKKyAgICAgICAgICAgIHJldHVybiByZXNw
b25kKHRhc2ssIFIiSFRNTCgKKyAgICAgICAgICAgICAgICA8c2NyaXB0PgorICAgICAgICAgICAg
ICAgICAgICBhc3luYyBmdW5jdGlvbiBmZXRjaFN1YnJlc291cmNlcygpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7IGF3YWl0IGZldGNoKCcxLnR4
dCcpIH0gY2F0Y2goZSkgeyB9OworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsgYXdhaXQg
ZmV0Y2goJy8vbm90LXRlc3Rob3N0LXNob3VsZC1ub3QtdHJpZ2dlci1hY3Rpb24vMi50eHQnLCB7
bW9kZTonbm8tY29ycyd9KSB9IGNhdGNoKGUpIHsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRyeSB7IGF3YWl0IGZldGNoKCcvL3Rlc3Rob3N0LzIudHh0JykgfSBjYXRjaChlKSB7IH07Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0cnkgeyBhd2FpdCBmZXRjaCgnLzMudHh0P3F1ZXJ5LXNo
b3VsZC1ub3QtYmUtcmVtb3ZlZCcpIH0gY2F0Y2goZSkgeyB9OworICAgICAgICAgICAgICAgICAg
ICAgICAgdHJ5IHsgYXdhaXQgZmV0Y2goJy8vdGVzdGhvc3Q6ODAvNC50eHQjZnJhZ21lbnQtc2hv
dWxkLW5vdC1iZS1yZW1vdmVkJykgfSBjYXRjaChlKSB7IH07CisgICAgICAgICAgICAgICAgICAg
ICAgICB0cnkgeyBhd2FpdCBmZXRjaCgnNS50eHQ/cXVlcnktc2hvdWxkLWJlLXJlbW92ZWQnKSB9
IGNhdGNoKGUpIHsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7IGF3YWl0IGZldGNo
KCc2LnR4dCNmcmFnbWVudC1zaG91bGQtYmUtcmVtb3ZlZCcpIH0gY2F0Y2goZSkgeyB9OworICAg
ICAgICAgICAgICAgICAgICAgICAgdHJ5IHsgYXdhaXQgZmV0Y2goJzcudHh0JykgfSBjYXRjaChl
KSB7IH07CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeyBhd2FpdCBmZXRjaCgnOC50eHQ/
a2V5LXRvLXJlcGxhY2Utb25seT1wcmUtcmVwbGFjZW1lbnQtdmFsdWUnKSB9IGNhdGNoKGUpIHsg
fTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBmZXRjaFN1YnJl
c291cmNlcygpOworICAgICAgICAgICAgICAgIDwvc2NyaXB0PgorICAgICAgICAgICAgKUhUTUwi
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoW3BhdGggaXNFcXVhbFRvU3RyaW5nOkAiLzgudHh0
Il0pCisgICAgICAgICAgICByZWNlaXZlZEFsbFJlcXVlc3RzID0gdHJ1ZTsKKyAgICAgICAgcmVz
cG9uZCh0YXNrLCAiIik7CisgICAgfTsKKworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0
TlMoW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gbmV3XSk7CisgICAgW1tjb25maWd1cmF0aW9uIHVz
ZXJDb250ZW50Q29udHJvbGxlcl0gYWRkQ29udGVudFJ1bGVMaXN0Omxpc3QuZ2V0KCldOworICAg
IFtjb25maWd1cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBmb3JVUkxT
Y2hlbWU6QCJ0ZXN0c2NoZW1lIl07CisgICAgW2NvbmZpZ3VyYXRpb24gc2V0VVJMU2NoZW1lSGFu
ZGxlcjpoYW5kbGVyLmdldCgpIGZvclVSTFNjaGVtZTpAIm90aGVydGVzdHNjaGVtZSJdOworICAg
IGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
TlNaZXJvUmVjdCBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICB3ZWJW
aWV3LmdldCgpLm5hdmlnYXRpb25EZWxlZ2F0ZSA9IG5hdmlnYXRpb25EZWxlZ2F0ZUFsbG93aW5n
QWN0aXZlQWN0aW9uc09uVGVzdEhvc3QoKS5nZXQoKTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVz
dDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAidGVz
dHNjaGVtZTovL3Rlc3Rob3N0L21haW4uaHRtbCJdXV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6cnVuKCZyZWNlaXZlZEFsbFJlcXVlc3RzKTsKKworICAgIFZlY3Rvcjxjb25zdCBjaGFyKj4g
ZXhwZWN0ZWRSZXF1ZXN0ZWRVUkxzIHsKKyAgICAgICAgInRlc3RzY2hlbWU6Ly90ZXN0aG9zdC9t
YWluLmh0bWwiLAorICAgICAgICAib3RoZXJ0ZXN0c2NoZW1lOi8vbm90LXRlc3Rob3N0LzEtcmVk
aXJlY3RlZC50eHQiLAorICAgICAgICAidGVzdHNjaGVtZTovL25vdC10ZXN0aG9zdC1zaG91bGQt
bm90LXRyaWdnZXItYWN0aW9uLzIudHh0IiwKKyAgICAgICAgInRlc3RzY2hlbWU6Ly9uZXd1c2Vy
bmFtZUBuZXdob3N0OjQ0My8zLnR4dD9xdWVyeS1zaG91bGQtbm90LWJlLXJlbW92ZWQiLAorICAg
ICAgICAib3RoZXJ0ZXN0c2NoZW1lOi8vdGVzdGhvc3QvNC50eHQ/a2V5PXZhbHVlI2ZyYWdtZW50
LXNob3VsZC1ub3QtYmUtcmVtb3ZlZCIsCisgICAgICAgICJ0ZXN0c2NoZW1lOi8vOnRlc3RwYXNz
d29yZEB0ZXN0aG9zdC81LnR4dCNmcmFnbWVudC10by1iZS1hZGRlZCIsCisgICAgICAgICJ0ZXN0
c2NoZW1lOi8vOnRlc3RwYXNzd29yZEB0ZXN0aG9zdC82LnR4dCIsCisgICAgICAgICJ0ZXN0c2No
ZW1lOi8vdGVzdGhvc3QvNy50eHQ/IyIsCisgICAgICAgICJ0ZXN0c2NoZW1lOi8vdGVzdGhvc3Qv
OC50eHQ/a2V5LXRvLXJlcGxhY2Utb25seT12YWx1ZS10by1yZXBsYWNlLW9ubHkma2V5LXRvLWFk
ZD12YWx1ZS10by1hZGQiLAorICAgIH07CisgICAgRVhQRUNUX0VRKGV4cGVjdGVkUmVxdWVzdGVk
VVJMcy5zaXplKCksIFt1cmxzIGNvdW50XSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBl
eHBlY3RlZFJlcXVlc3RlZFVSTHMuc2l6ZSgpOyBpKyspCisgICAgICAgIEVYUEVDVF9XS19TVFJF
UShleHBlY3RlZFJlcXVlc3RlZFVSTHNbaV0sIFtbdXJscyBvYmplY3RBdEluZGV4OmldIGFic29s
dXRlU3RyaW5nXSk7Cit9CisKK1RFU1RfRihXS0NvbnRlbnRSdWxlTGlzdFN0b3JlVGVzdCwgTnVs
bFBhdHRlcm5TZXQpCit7CisgICAgYXV0byBsaXN0ID0gY29tcGlsZUNvbnRlbnRSdWxlTGlzdChS
IkpTT04oCisgICAgICAgIFsgeworICAgICAgICAgICAgImFjdGlvbiI6IHsgInR5cGUiOiAicmVk
aXJlY3QiLCAicmVkaXJlY3QiOiB7CisgICAgICAgICAgICAgICAgInVybCI6ICJ0ZXN0c2NoZW1l
Oi8vdGVzdGhvc3QvbWFpbi1yZWRpcmVjdGVkLmh0bWwiCisgICAgICAgICAgICB9IH0sCisgICAg
ICAgICAgICAidHJpZ2dlciI6IHsgInVybC1maWx0ZXIiOiAibWFpbi5odG1sIiB9CisgICAgICAg
IH0gXQorICAgIClKU09OIik7CisKKyAgICBfX2Jsb2NrIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gcmVk
aXJlY3RlZFJlc3VsdDsKKyAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtUZXN0VVJMU2NoZW1l
SGFuZGxlciBuZXddKTsKKyAgICBoYW5kbGVyLmdldCgpLnN0YXJ0VVJMU2NoZW1lVGFza0hhbmRs
ZXIgPSBeKFdLV2ViVmlldyAqLCBpZCA8V0tVUkxTY2hlbWVUYXNrPiB0YXNrKSB7CisgICAgICAg
IE5TU3RyaW5nICpwYXRoID0gdGFzay5yZXF1ZXN0LlVSTC5wYXRoOworICAgICAgICBpZiAoW3Bh
dGggaXNFcXVhbFRvU3RyaW5nOkAiL21haW4uaHRtbCJdKQorICAgICAgICAgICAgcmVkaXJlY3Rl
ZFJlc3VsdCA9IGZhbHNlOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEVYUEVDVF9XS19T
VFJFUShwYXRoLCAiL21haW4tcmVkaXJlY3RlZC5odG1sIik7CisgICAgICAgICAgICByZWRpcmVj
dGVkUmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXNwb25kKHRhc2ssICIiKTsK
KyAgICB9OworCisgICAgX19ibG9jayBlbnVtIGNsYXNzIERlbGVnYXRlQWN0aW9uIDogdWludDhf
dCB7CisgICAgICAgIEFsbG93QWxsLAorICAgICAgICBBbGxvd05vbmUsCisgICAgICAgIEFsbG93
VGVzdEhvc3QsCisgICAgfSBkZWxlZ2F0ZUFjdGlvbjsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRv
cHROUyhbVGVzdE5hdmlnYXRpb25EZWxlZ2F0ZSBuZXddKTsKKyAgICBkZWxlZ2F0ZS5nZXQoKS5k
ZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uV2l0aFByZWZlcmVuY2VzID0gXihXS05hdmln
YXRpb25BY3Rpb24gKiwgV0tXZWJwYWdlUHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzLCB2b2lkIChe
ZGVjaXNpb25IYW5kbGVyKShXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3ksIFdLV2VicGFnZVByZWZl
cmVuY2VzICopKSB7CisgICAgICAgIEVYUEVDVF9OT1RfTlVMTChwcmVmZXJlbmNlcy5fYWN0aXZl
Q29udGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5zKTsKKyAgICAgICAgRVhQRUNUX0VRKHByZWZl
cmVuY2VzLl9hY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMuY291bnQsIDB1KTsK
KyAgICAgICAgc3dpdGNoIChkZWxlZ2F0ZUFjdGlvbikgeworICAgICAgICBjYXNlIERlbGVnYXRl
QWN0aW9uOjpBbGxvd0FsbDoKKyAgICAgICAgICAgIHByZWZlcmVuY2VzLl9hY3RpdmVDb250ZW50
UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMgPSBuaWw7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBEZWxlZ2F0ZUFjdGlvbjo6QWxsb3dOb25lOgorICAgICAgICAgICAgcHJlZmVyZW5j
ZXMuX2FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNQYXR0ZXJucyA9IFtOU1NldCBzZXRdOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRGVsZWdhdGVBY3Rpb246OkFsbG93VGVz
dEhvc3Q6CisgICAgICAgICAgICBwcmVmZXJlbmNlcy5fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0
aW9uc1BhdHRlcm5zID0gW05TU2V0IHNldFdpdGhPYmplY3Q6QCIqOi8vdGVzdGhvc3QvKiJdOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVjaXNpb25IYW5kbGVyKFdL
TmF2aWdhdGlvbkFjdGlvblBvbGljeUFsbG93LCBwcmVmZXJlbmNlcyk7CisgICAgfTsKKworICAg
IGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gbmV3
XSk7CisgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkQ29udGVu
dFJ1bGVMaXN0Omxpc3QuZ2V0KCldOworICAgIFtjb25maWd1cmF0aW9uIHNldFVSTFNjaGVtZUhh
bmRsZXI6aGFuZGxlci5nZXQoKSBmb3JVUkxTY2hlbWU6QCJ0ZXN0c2NoZW1lIl07CisgICAgYXV0
byB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU1pl
cm9SZWN0IGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIHdlYlZpZXcu
Z2V0KCkubmF2aWdhdGlvbkRlbGVnYXRlID0gZGVsZWdhdGUuZ2V0KCk7CisKKyAgICBhdXRvIGdl
dFJlZGlyZWN0UmVzdWx0ID0gXihEZWxlZ2F0ZUFjdGlvbiBhY3Rpb24pIHsKKyAgICAgICAgZGVs
ZWdhdGVBY3Rpb24gPSBhY3Rpb247CisgICAgICAgIHJlZGlyZWN0ZWRSZXN1bHQgPSBzdGQ6Om51
bGxvcHQ7CisgICAgICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVz
dFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJ0ZXN0c2NoZW1lOi8vdGVzdGhvc3QvbWFp
bi5odG1sIl1dXTsKKyAgICAgICAgd2hpbGUgKCFyZWRpcmVjdGVkUmVzdWx0KQorICAgICAgICAg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoKTsKKyAgICAgICAgcmV0dXJuICpy
ZWRpcmVjdGVkUmVzdWx0OworICAgIH07CisgICAgRVhQRUNUX1RSVUUoZ2V0UmVkaXJlY3RSZXN1
bHQoRGVsZWdhdGVBY3Rpb246OkFsbG93QWxsKSk7CisgICAgRVhQRUNUX0ZBTFNFKGdldFJlZGly
ZWN0UmVzdWx0KERlbGVnYXRlQWN0aW9uOjpBbGxvd05vbmUpKTsKKyAgICBFWFBFQ1RfVFJVRShn
ZXRSZWRpcmVjdFJlc3VsdChEZWxlZ2F0ZUFjdGlvbjo6QWxsb3dUZXN0SG9zdCkpOworfQo=
</data>
<flag name="commit-queue"
          id="469672"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444600</attachid>
            <date>2021-11-17 16:32:38 -0800</date>
            <delta_ts>2021-11-17 17:06:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233268-20211117163237.patch</filename>
            <type>text/plain</type>
            <size>113134</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NTk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBACisyMDIxLTExLTE3ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50
IG1vc3Qgb2YgcmVkaXJlY3QgYW5kIG1vZGlmeS1oZWFkZXJzIGFjdGlvbiB0eXBlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzMjY4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCisKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRzIG1v
ZGlmeS1oZWFkZXJzIGFuZCByZWRpcmVjdCBhY3Rpb25zIGV4Y2VwdCBmb3IgZXh0ZW5zaW9uLXBh
dGggYW5kIHJlZ2V4LXN1YnN0aXR1dGlvbiB2YXJpYW50cyBvZiByZWRpcmVjdGluZywKKyAgICAg
ICAgd2hpY2ggYXJlIGJpZyBlbm91Z2ggdG8gYmUgaW1wbGVtZW50ZWQgaW4gdGhlaXIgb3duIHBh
dGNoLiAgSW4gb3JkZXIgdG8gZW5hYmxlIHRoZXNlIGFjdGlvbnMsIHRoZSBXS0NvbnRlbnRSdWxl
TGlzdCBuZWVkcyB0bworICAgICAgICBiZSBjb21waWxlZCB3aXRoIG5ldyBTUEkgd2hlcmUgeW91
IHNwZWNpZnkgd2hpY2ggc2NoZW1lcyBhcmUgYWxsb3dlZCB0byBiZSByZWRpcmVjdGVkIHRvLCBh
bmQgU1BJIGluIFdLV2VicGFnZVByZWZlcmVuY2VzIGFsbG93cworICAgICAgICBhZGRpdGlvbiBv
ZiBhIHNldCBvZiBwYXR0ZXJucyB0byBzcGVjaWZ5IHdoaWNoIFVSTHMgYXJlIGFsbG93ZWQgdG8g
YmUgbW9kaWZpZWQuICBBbiBlbXB0eSBzZXQgbWVhbnMgbm8gYWN0aXZlIGFjdGlvbnMgYXJlIGFs
bG93ZWQsCisgICAgICAgIHdoaWNoIGlzIHRoZSBkZWZhdWx0LCB3aGVyZWFzIGEgbnVsbCBzZXQg
bWVhbnMgYWxsIGFjdGl2ZSBhY3Rpb25zIGFyZSBhbGxvd2VkLgorCisgICAgICAgIEkgYWxzbyBt
YWRlIHRoZSBwYXJzZXIgYSBsaXR0bGUgYml0IHN0cmljdGVyLCBzdWNoIGFzIG9ubHkgYWxsb3dp
bmcgdmFsaWQgcG9ydHMsIHF1ZXJpZXMsIGFuZCBmcmFnbWVudHMuCisKKyAgICAgICAgKiBNb2R1
bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHA6CisgICAgICAgICogY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkFjdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGVudEV4dGVuc2lvbnM6Ok1vZGlmeUhlYWRlcnNBY3Rpb246Om9wZXJhdG9yPT0gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Ok1vZGlmeUhlYWRlcnNBY3Rp
b246OmFwcGx5VG9SZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpNb2RpZnlIZWFkZXJzQWN0aW9uOjpNb2RpZnlIZWFkZXJJbmZvOjphcHBseVRvUmVxdWVzdCk6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6UmVkaXJlY3RBY3Rpb246OnBh
cnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpSZWRpcmVjdEFjdGlv
bjo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6UmVkaXJlY3RBY3Rpb246OmFwcGx5VG9SZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpSZWRpcmVjdEFjdGlvbjo6VVJMVHJhbnNmb3JtQWN0aW9uOjpwYXJz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6UmVkaXJlY3RBY3Rpb246
OlVSTFRyYW5zZm9ybUFjdGlvbjo6c2VyaWFsaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRFeHRlbnNpb25zOjpSZWRpcmVjdEFjdGlvbjo6VVJMVHJhbnNmb3JtQWN0aW9uOjpk
ZXNlcmlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6UmVkaXJl
Y3RBY3Rpb246OlVSTFRyYW5zZm9ybUFjdGlvbjo6YXBwbHlUb1VSTCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6UmVkaXJlY3RBY3Rpb246OlVSTFRyYW5zZm9y
bUFjdGlvbjo6UXVlcnlUcmFuc2Zvcm06OmFwcGx5VG9VUkwgY29uc3QpOgorICAgICAgICAqIGNv
bnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25BY3Rpb25zLmg6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VmFyaWFudEhhc2hlcjo6aGFzaCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VmVjdG9ySGFzaGVyOjpoYXNoKToKKyAgICAgICAg
KFdURjo6RGVmYXVsdEhhc2g8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlJlZGlyZWN0QWN0
aW9uPjo6aGFzaCk6CisgICAgICAgIChXVEY6OkRlZmF1bHRIYXNoPFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpSZWRpcmVjdEFjdGlvbj46OmVxdWFsKToKKyAgICAgICAgKFdURjo6RGVmYXVs
dEhhc2g8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Ok1vZGlmeUhlYWRlcnNBY3Rpb24+Ojpo
YXNoKToKKyAgICAgICAgKFdURjo6RGVmYXVsdEhhc2g8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6Ok1vZGlmeUhlYWRlcnNBY3Rpb24+OjplcXVhbCk6CisgICAgICAgICogY29udGVudGV4dGVu
c2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpzZXJpYWxpemVBY3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpjb21waWxlUnVsZUxpc3QpOgorICAgICAgICAqIGNvbnRlbnRleHRl
bnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6Y29udGVudEV4dGVuc2lvbkVycm9yQ2F0ZWdvcnkpOgorICAgICAgICAq
IGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5oOgorICAgICAgICAqIGNv
bnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmxvYWRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGVudEV4dGVuc2lvbnM6OmxvYWRSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpsb2FkRW5jb2RlZFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpwYXJzZVJ1bGVMaXN0KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uUGFyc2VyLmg6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29u
dGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OnByb2Nlc3NDb250ZW50UnVsZUxpc3Rz
Rm9yTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4
dGVuc2lvbnNCYWNrZW5kOjpwcm9jZXNzQ29udGVudFJ1bGVMaXN0c0ZvclBpbmdMb2FkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjphcHBseVJlc3VsdHNUb1JlcXVlc3Qp
OgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRSdWxlTGlzdFJlc3VsdHMuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRSdWxlTGlzdFJlc3VsdHM6OlN1bW1hcnk6OmRlY29k
ZSk6CisgICAgICAgICogY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHA6CisgICAgICAgICogbG9h
ZGVyL0RvY3VtZW50TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVy
OjpzZXRBY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMpOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnRMb2FkZXI6OmFsbG93c0FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNG
b3JVUkwgY29uc3QpOgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpyZW1vdmVIVFRQSGVhZGVyRmllbGQpOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oOgorCiAyMDIxLTEx
LTE3ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIExvY2tz
IEFQSSBkb2VzIGdldCBlbmFibGVkIGluIFNlcnZpY2UgV29ya2VycyB3aGVuIHJ1bm5pbmcgbGF5
b3V0IHRlc3RzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29j
a2V0Q2hhbm5lbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJz
b2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJXZWJTb2NrZXRDaGFubmVsLmgiCiAK
ICNpbmNsdWRlICJCbG9iLmgiCi0jaW5jbHVkZSAiQ29udGVudFJ1bGVMaXN0UmVzdWx0cy5oIgog
I2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
Q29udGVudEV4dGVuc2lvbkFjdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25BY3Rpb25zLmNwcAkocmV2aXNpb24g
Mjg1OTU0KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVu
c2lvbkFjdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw4IEBACiAjaW5jbHVk
ZSAiQ29udGVudEV4dGVuc2lvbkVycm9yLmgiCiAjaW5jbHVkZSA8d3RmL0Nyb3NzVGhyZWFkQ29w
aWVyLmg+CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgorI2luY2x1ZGUgPHd0Zi9VUkxQYXJzZXIuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdUb0ludGVnZXJDb252ZXJzaW9uLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9ucyB7CiAKQEAgLTEyMSw3ICsxMjMsOCBAQCBN
b2RpZnlIZWFkZXJzQWN0aW9uIE1vZGlmeUhlYWRlcnNBY3Rpb246CiAKIGJvb2wgTW9kaWZ5SGVh
ZGVyc0FjdGlvbjo6b3BlcmF0b3I9PShjb25zdCBNb2RpZnlIZWFkZXJzQWN0aW9uJiBvdGhlcikg
Y29uc3QKIHsKLSAgICByZXR1cm4gb3RoZXIucmVxdWVzdEhlYWRlcnMgPT0gdGhpcy0+cmVxdWVz
dEhlYWRlcnMKKyAgICByZXR1cm4gb3RoZXIuaGFzaFRhYmxlVHlwZSA9PSB0aGlzLT5oYXNoVGFi
bGVUeXBlCisgICAgICAgICYmIG90aGVyLnJlcXVlc3RIZWFkZXJzID09IHRoaXMtPnJlcXVlc3RI
ZWFkZXJzCiAgICAgICAgICYmIG90aGVyLnJlc3BvbnNlSGVhZGVycyA9PSB0aGlzLT5yZXNwb25z
ZUhlYWRlcnM7CiB9CiAKQEAgLTE2Niw2ICsxNjksMjcgQEAgc2l6ZV90IE1vZGlmeUhlYWRlcnNB
Y3Rpb246OnNlcmlhbGl6ZWRMZQogICAgIHJldHVybiBkZXNlcmlhbGl6ZUxlbmd0aChzcGFuLCAw
KTsKIH0KIAordm9pZCBNb2RpZnlIZWFkZXJzQWN0aW9uOjphcHBseVRvUmVxdWVzdChSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgZm9yIChhdXRvJiBpbmZvIDogcmVxdWVzdEhlYWRl
cnMpCisgICAgICAgIGluZm8uYXBwbHlUb1JlcXVlc3QocmVxdWVzdCk7Cit9CisKK3ZvaWQgTW9k
aWZ5SGVhZGVyc0FjdGlvbjo6TW9kaWZ5SGVhZGVySW5mbzo6YXBwbHlUb1JlcXVlc3QoUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHN0ZDo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihb
Jl0gKGNvbnN0IEFwcGVuZE9wZXJhdGlvbiYgb3BlcmF0aW9uKSB7CisgICAgICAgIGF1dG8gZXhp
c3RpbmdWYWx1ZSA9IHJlcXVlc3QuaHR0cEhlYWRlckZpZWxkKG9wZXJhdGlvbi5oZWFkZXIpOwor
ICAgICAgICBpZiAoZXhpc3RpbmdWYWx1ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXF1ZXN0
LnNldEhUVFBIZWFkZXJGaWVsZChvcGVyYXRpb24uaGVhZGVyLCBvcGVyYXRpb24udmFsdWUpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChvcGVy
YXRpb24uaGVhZGVyLCBtYWtlU3RyaW5nKGV4aXN0aW5nVmFsdWUsICI7ICIsIG9wZXJhdGlvbi52
YWx1ZSkpOworICAgIH0sIFsmXSAoY29uc3QgU2V0T3BlcmF0aW9uJiBvcGVyYXRpb24pIHsKKyAg
ICAgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQob3BlcmF0aW9uLmhlYWRlciwgb3BlcmF0
aW9uLnZhbHVlKTsKKyAgICB9LCBbJl0gKGNvbnN0IFJlbW92ZU9wZXJhdGlvbiYgb3BlcmF0aW9u
KSB7CisgICAgICAgIHJlcXVlc3QucmVtb3ZlSFRUUEhlYWRlckZpZWxkKG9wZXJhdGlvbi5oZWFk
ZXIpOworICAgIH0pLCBvcGVyYXRpb24pOworfQorCiBhdXRvIE1vZGlmeUhlYWRlcnNBY3Rpb246
Ok1vZGlmeUhlYWRlckluZm86OnBhcnNlKGNvbnN0IEpTT046OlZhbHVlJiBpbmZvVmFsdWUpIC0+
IEV4cGVjdGVkPE1vZGlmeUhlYWRlckluZm8sIHN0ZDo6ZXJyb3JfY29kZT4KIHsKICAgICBhdXRv
IG9iamVjdCA9IGluZm9WYWx1ZS5hc09iamVjdCgpOwpAQCAtMjU1LDcgKzI3OSw3IEBAIHNpemVf
dCBNb2RpZnlIZWFkZXJzQWN0aW9uOjpNb2RpZnlIZWFkZXIKICAgICByZXR1cm4gZGVzZXJpYWxp
emVMZW5ndGgoc3BhbiwgMCk7CiB9CiAKLUV4cGVjdGVkPFJlZGlyZWN0QWN0aW9uLCBzdGQ6OmVy
cm9yX2NvZGU+IFJlZGlyZWN0QWN0aW9uOjpwYXJzZShjb25zdCBKU09OOjpPYmplY3QmIHJlZGly
ZWN0T2JqZWN0LCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGFsbG93ZWRSZWRpcmVjdFVSTFNjaGVt
ZXMpCitFeHBlY3RlZDxSZWRpcmVjdEFjdGlvbiwgc3RkOjplcnJvcl9jb2RlPiBSZWRpcmVjdEFj
dGlvbjo6cGFyc2UoY29uc3QgSlNPTjo6T2JqZWN0JiByZWRpcmVjdE9iamVjdCwgY29uc3Qgc3Rk
OjpvcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+JiBhbGxvd2VkUmVkaXJlY3RVUkxTY2hlbWVzKQog
ewogICAgIGF1dG8gcmVkaXJlY3QgPSByZWRpcmVjdE9iamVjdC5nZXRPYmplY3QoInJlZGlyZWN0
Iik7CiAgICAgaWYgKCFyZWRpcmVjdCkKQEAgLTI3NywxMCArMzAxLDEzIEBAIEV4cGVjdGVkPFJl
ZGlyZWN0QWN0aW9uLCBzdGQ6OmVycm9yX2NvZGUKICAgICAgICAgcmV0dXJuIFJlZGlyZWN0QWN0
aW9uIHsgV1RGTW92ZSgqcGFyc2VkVHJhbnNmb3JtKSB9OwogICAgIH0KIAotICAgIGlmIChhdXRv
IHVybCA9IHJlZGlyZWN0LT5nZXRTdHJpbmcoInVybCIpOyAhIXVybCkgewotICAgICAgICBpZiAo
IWFsbG93ZWRSZWRpcmVjdFVSTFNjaGVtZXMuY29udGFpbnMoVVJMKFVSTCgpLCB1cmwpLnByb3Rv
Y29sKCkudG9TdHJpbmdXaXRob3V0Q29weWluZygpKSkKKyAgICBpZiAoYXV0byB1cmxTdHJpbmcg
PSByZWRpcmVjdC0+Z2V0U3RyaW5nKCJ1cmwiKTsgISF1cmxTdHJpbmcpIHsKKyAgICAgICAgYXV0
byB1cmwgPSBVUkwoVVJMKCksIHVybFN0cmluZyk7CisgICAgICAgIGlmICghdXJsLmlzVmFsaWQo
KSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJy
b3I6OkpTT05SZWRpcmVjdFVSTEludmFsaWQpOworICAgICAgICBpZiAoYWxsb3dlZFJlZGlyZWN0
VVJMU2NoZW1lcyAmJiAhYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcy0+Y29udGFpbnModXJsLnBy
b3RvY29sKCkudG9TdHJpbmdXaXRob3V0Q29weWluZygpKSkKICAgICAgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTFNjaGVt
ZU5vdEFsbG93ZWQpOwotICAgICAgICByZXR1cm4gUmVkaXJlY3RBY3Rpb24geyBVUkxBY3Rpb24g
eyBXVEZNb3ZlKHVybCkgfSB9OworICAgICAgICByZXR1cm4gUmVkaXJlY3RBY3Rpb24geyBVUkxB
Y3Rpb24geyBXVEZNb3ZlKHVybFN0cmluZykgfSB9OwogICAgIH0KIAogICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdEludmFsaWRUeXBl
KTsKQEAgLTI5NSw3ICszMjIsOCBAQCBSZWRpcmVjdEFjdGlvbiBSZWRpcmVjdEFjdGlvbjo6aXNv
bGF0ZWRDCiAKIGJvb2wgUmVkaXJlY3RBY3Rpb246Om9wZXJhdG9yPT0oY29uc3QgUmVkaXJlY3RB
Y3Rpb24mIG90aGVyKSBjb25zdAogewotICAgIHJldHVybiBvdGhlci5hY3Rpb24gPT0gdGhpcy0+
YWN0aW9uOworICAgIHJldHVybiBvdGhlci5oYXNoVGFibGVUeXBlID09IHRoaXMtPmhhc2hUYWJs
ZVR5cGUKKyAgICAgICAgJiYgb3RoZXIuYWN0aW9uID09IHRoaXMtPmFjdGlvbjsKIH0KIAogdm9p
ZCBSZWRpcmVjdEFjdGlvbjo6c2VyaWFsaXplKFZlY3Rvcjx1aW50OF90PiYgdmVjdG9yKSBjb25z
dApAQCAtMzQwLDI2ICszNjgsNjQgQEAgc2l6ZV90IFJlZGlyZWN0QWN0aW9uOjpzZXJpYWxpemVk
TGVuZ3RoKAogICAgIHJldHVybiBkZXNlcmlhbGl6ZUxlbmd0aChzcGFuLCAwKTsKIH0KIAotYXV0
byBSZWRpcmVjdEFjdGlvbjo6VVJMVHJhbnNmb3JtQWN0aW9uOjpwYXJzZShjb25zdCBKU09OOjpP
YmplY3QmIHRyYW5zZm9ybSwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhbGxvd2VkUmVkaXJlY3RV
UkxTY2hlbWVzKSAtPiBFeHBlY3RlZDxVUkxUcmFuc2Zvcm1BY3Rpb24sIHN0ZDo6ZXJyb3JfY29k
ZT4KK3ZvaWQgUmVkaXJlY3RBY3Rpb246OmFwcGx5VG9SZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCkKK3sKKyAgICBzdGQ6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oY29uc3QgRXh0
ZW5zaW9uUGF0aEFjdGlvbiYpIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudC4gV2UgbmVl
ZCB0byBrbm93IHRoZSBiYXNlIFVSTCBvZiB0aGUgZXh0ZW5zaW9uIGhlcmUgZnJvbSBuZXcgU1BJ
LgorICAgIH0sIFsmXSAoY29uc3QgUmVnZXhTdWJzdGl0dXRpb25BY3Rpb24mKSB7CisgICAgICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQsIGlkZWFsbHkgaW4gYSB3YXkgdGhhdCBkb2Vzbid0IHJlcXVp
cmUgbWFraW5nIGEgbmV3IFZNIGFuZCBnbG9iYWwgb2JqZWN0IGZvciBlYWNoIHJlZGlyZWN0IG9w
ZXJhdGlvbi4KKyAgICB9LCBbJl0gKGNvbnN0IFVSTFRyYW5zZm9ybUFjdGlvbiYgYWN0aW9uKSB7
CisgICAgICAgIGF1dG8gdXJsID0gcmVxdWVzdC51cmwoKTsKKyAgICAgICAgYWN0aW9uLmFwcGx5
VG9VUkwodXJsKTsKKyAgICAgICAgcmVxdWVzdC5zZXRVUkwoV1RGTW92ZSh1cmwpKTsKKyAgICB9
LCBbJl0gKGNvbnN0IFVSTEFjdGlvbiYgYWN0aW9uKSB7CisgICAgICAgIHJlcXVlc3Quc2V0VVJM
KFVSTChVUkwoKSwgYWN0aW9uLnVybCkpOworICAgIH0pLCBhY3Rpb24pOworfQorCithdXRvIFJl
ZGlyZWN0QWN0aW9uOjpVUkxUcmFuc2Zvcm1BY3Rpb246OnBhcnNlKGNvbnN0IEpTT046Ok9iamVj
dCYgdHJhbnNmb3JtLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEhhc2hTZXQ8U3RyaW5nPj4mIGFsbG93
ZWRSZWRpcmVjdFVSTFNjaGVtZXMpIC0+IEV4cGVjdGVkPFVSTFRyYW5zZm9ybUFjdGlvbiwgc3Rk
OjplcnJvcl9jb2RlPgogewogICAgIFVSTFRyYW5zZm9ybUFjdGlvbiBhY3Rpb247Ci0gICAgYWN0
aW9uLmZyYWdtZW50ID0gdHJhbnNmb3JtLmdldFN0cmluZygiZnJhZ21lbnQiKTsKKyAgICBpZiAo
YXV0byBmcmFnbWVudCA9IHRyYW5zZm9ybS5nZXRTdHJpbmcoImZyYWdtZW50Iik7ICEhZnJhZ21l
bnQpIHsKKyAgICAgICAgaWYgKCFmcmFnbWVudC5pc0VtcHR5KCkgJiYgIWZyYWdtZW50LnN0YXJ0
c1dpdGgoJyMnKSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0
ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdEludmFsaWRGcmFnbWVudCk7CisgICAgICAgIGFjdGlv
bi5mcmFnbWVudCA9IFdURk1vdmUoZnJhZ21lbnQpOworICAgIH0KICAgICBhY3Rpb24uaG9zdCA9
IHRyYW5zZm9ybS5nZXRTdHJpbmcoImhvc3QiKTsKICAgICBhY3Rpb24ucGFzc3dvcmQgPSB0cmFu
c2Zvcm0uZ2V0U3RyaW5nKCJwYXNzd29yZCIpOwogICAgIGFjdGlvbi5wYXRoID0gdHJhbnNmb3Jt
LmdldFN0cmluZygicGF0aCIpOwotICAgIGFjdGlvbi5wb3J0ID0gdHJhbnNmb3JtLmdldFN0cmlu
ZygicG9ydCIpOwotICAgIGF1dG8gc2NoZW1lID0gdHJhbnNmb3JtLmdldFN0cmluZygic2NoZW1l
Iik7Ci0gICAgaWYgKCEhc2NoZW1lICYmICFhbGxvd2VkUmVkaXJlY3RVUkxTY2hlbWVzLmNvbnRh
aW5zKHNjaGVtZSkpCi0gICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5z
aW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTFNjaGVtZU5vdEFsbG93ZWQpOwotICAgIGFjdGlvbi5z
Y2hlbWUgPSBXVEZNb3ZlKHNjaGVtZSk7CisgICAgYXV0byBwb3J0ID0gdHJhbnNmb3JtLmdldFN0
cmluZygicG9ydCIpOworICAgIGlmICghIXBvcnQpIHsKKyAgICAgICAgaWYgKHBvcnQuaXNFbXB0
eSgpKQorICAgICAgICAgICAgYWN0aW9uLnBvcnQgPSB7IHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+
IHsgfSB9OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8gcGFyc2VkUG9ydCA9IHBh
cnNlSW50ZWdlcjx1aW50MTZfdD4oU3RyaW5nVmlldyhwb3J0KSk7CisgICAgICAgICAgICBpZiAo
IXBhcnNlZFBvcnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRl
bnRFeHRlbnNpb25FcnJvcjo6SlNPTlJlZGlyZWN0SW52YWxpZFBvcnQpOworICAgICAgICAgICAg
YWN0aW9uLnBvcnQgPSB7IHBhcnNlZFBvcnQgfTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChhdXRvIHVuY2Fub25pY2FsaXplZFNjaGVtZSA9IHRyYW5zZm9ybS5nZXRTdHJpbmcoInNjaGVt
ZSIpOyAhIXVuY2Fub25pY2FsaXplZFNjaGVtZSkgeworICAgICAgICBhdXRvIHNjaGVtZSA9IFdU
Rjo6VVJMUGFyc2VyOjptYXliZUNhbm9uaWNhbGl6ZVNjaGVtZSh1bmNhbm9uaWNhbGl6ZWRTY2hl
bWUpOworICAgICAgICBpZiAoIXNjaGVtZSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTFNjaGVtZUludmFsaWQp
OworICAgICAgICBpZiAoYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcyAmJiAhYWxsb3dlZFJlZGly
ZWN0VVJMU2NoZW1lcy0+Y29udGFpbnMoKnNjaGVtZSkpCisgICAgICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RVUkxTY2hlbWVO
b3RBbGxvd2VkKTsKKyAgICAgICAgYWN0aW9uLnNjaGVtZSA9IFdURk1vdmUoKnNjaGVtZSk7Cisg
ICAgfQogICAgIGFjdGlvbi51c2VybmFtZSA9IHRyYW5zZm9ybS5nZXRTdHJpbmcoInVzZXJuYW1l
Iik7CiAgICAgaWYgKGF1dG8gcXVlcnlUcmFuc2Zvcm0gPSB0cmFuc2Zvcm0uZ2V0T2JqZWN0KCJx
dWVyeS10cmFuc2Zvcm0iKSkgewogICAgICAgICBhdXRvIHBhcnNlZFF1ZXJ5VHJhbnNmb3JtID0g
UXVlcnlUcmFuc2Zvcm06OnBhcnNlKCpxdWVyeVRyYW5zZm9ybSk7CiAgICAgICAgIGlmICghcGFy
c2VkUXVlcnlUcmFuc2Zvcm0pCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQocGFy
c2VkUXVlcnlUcmFuc2Zvcm0uZXJyb3IoKSk7CiAgICAgICAgIGFjdGlvbi5xdWVyeVRyYW5zZm9y
bSA9ICpwYXJzZWRRdWVyeVRyYW5zZm9ybTsKLSAgICB9IGVsc2UKLSAgICAgICAgYWN0aW9uLnF1
ZXJ5VHJhbnNmb3JtID0gdHJhbnNmb3JtLmdldFN0cmluZygicXVlcnkiKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBhdXRvIHF1ZXJ5ID0gdHJhbnNmb3JtLmdldFN0cmluZygicXVlcnkiKTsKKyAg
ICAgICAgaWYgKCFxdWVyeS5pc0VtcHR5KCkgJiYgIXF1ZXJ5LnN0YXJ0c1dpdGgoJz8nKSkKKyAg
ICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpT
T05SZWRpcmVjdEludmFsaWRRdWVyeSk7CisgICAgICAgIGFjdGlvbi5xdWVyeVRyYW5zZm9ybSA9
IFdURk1vdmUocXVlcnkpOworICAgIH0KICAgICByZXR1cm4gYWN0aW9uOwogfQogCkBAIC0zOTks
MTMgKzQ2NSwxMyBAQCB2b2lkIFJlZGlyZWN0QWN0aW9uOjpVUkxUcmFuc2Zvcm1BY3Rpb246CiAg
ICAgdWludDhfdCBoYXNTY2hlbWUgPSAhIXNjaGVtZTsKICAgICB1aW50OF90IGhhc1VzZXJuYW1l
ID0gISF1c2VybmFtZTsKICAgICBhdXRvKiBxdWVyeVN0cmluZyA9IHN0ZDo6Z2V0X2lmPFN0cmlu
Zz4oJnF1ZXJ5VHJhbnNmb3JtKTsKKyAgICBhdXRvIHF1ZXJ5U3RyaW5nVVRGOCA9IHF1ZXJ5U3Ry
aW5nID8gcXVlcnlTdHJpbmctPnV0ZjgoKSA6IENTdHJpbmcoKTsKICAgICB1aW50OF90IGhhc1F1
ZXJ5ID0gIXF1ZXJ5U3RyaW5nIHx8ICEhKnF1ZXJ5U3RyaW5nOwogCiAgICAgYXV0byBmcmFnbWVu
dFVURjggPSBmcmFnbWVudC51dGY4KCk7CiAgICAgYXV0byBob3N0VVRGOCA9IGhvc3QudXRmOCgp
OwogICAgIGF1dG8gcGFzc3dvcmRVVEY4ID0gcGFzc3dvcmQudXRmOCgpOwogICAgIGF1dG8gcGF0
aFVURjggPSBwYXRoLnV0ZjgoKTsKLSAgICBhdXRvIHBvcnRVVEY4ID0gcG9ydC51dGY4KCk7CiAg
ICAgYXV0byBzY2hlbWVVVEY4ID0gc2NoZW1lLnV0ZjgoKTsKICAgICBhdXRvIHVzZXJuYW1lVVRG
OCA9IHVzZXJuYW1lLnV0ZjgoKTsKIApAQCAtNDE0LDkgKzQ4MCwxMCBAQCB2b2lkIFJlZGlyZWN0
QWN0aW9uOjpVUkxUcmFuc2Zvcm1BY3Rpb246CiAgICAgICAgICsgKGhhc0hvc3QgPyBzaXplb2Yo
dWludDMyX3QpICsgaG9zdFVURjgubGVuZ3RoKCkgOiAwKQogICAgICAgICArIChoYXNQYXNzd29y
ZCA/IHNpemVvZih1aW50MzJfdCkgKyBwYXNzd29yZFVURjgubGVuZ3RoKCkgOiAwKQogICAgICAg
ICArIChoYXNQYXRoID8gc2l6ZW9mKHVpbnQzMl90KSArIHBhdGhVVEY4Lmxlbmd0aCgpIDogMCkK
LSAgICAgICAgKyAoaGFzUG9ydCA/IHNpemVvZih1aW50MzJfdCkgKyBwb3J0VVRGOC5sZW5ndGgo
KSA6IDApCiAgICAgICAgICsgKGhhc1NjaGVtZSA/IHNpemVvZih1aW50MzJfdCkgKyBzY2hlbWVV
VEY4Lmxlbmd0aCgpIDogMCkKLSAgICAgICAgKyAoaGFzVXNlcm5hbWUgPyBzaXplb2YodWludDMy
X3QpICsgdXNlcm5hbWVVVEY4Lmxlbmd0aCgpIDogMCkpOworICAgICAgICArIChoYXNVc2VybmFt
ZSA/IHNpemVvZih1aW50MzJfdCkgKyB1c2VybmFtZVVURjgubGVuZ3RoKCkgOiAwKQorICAgICAg
ICArIChoYXNQb3J0ID8gMSArICgqcG9ydCA/IHNpemVvZih1aW50MTZfdCkgOiAwKSA6IDApCisg
ICAgICAgICsgKGhhc1F1ZXJ5ID8gMSArIChxdWVyeVN0cmluZyA/IHNpemVvZih1aW50MzJfdCkg
KyBxdWVyeVN0cmluZ1VURjgubGVuZ3RoKCkgOiAwKSA6IDApKTsKIAogICAgIGF1dG8gYmVnaW5J
bmRleCA9IHZlY3Rvci5zaXplKCk7CiAgICAgdW5jaGVja2VkQXBwZW5kKHZlY3RvciwgMCk7CkBA
IC00NDIsMTggKzUwOSwyMiBAQCB2b2lkIFJlZGlyZWN0QWN0aW9uOjpVUkxUcmFuc2Zvcm1BY3Rp
b246CiAgICAgICAgIHVuY2hlY2tlZEFwcGVuZExlbmd0aEFuZFN0cmluZyhwYXNzd29yZFVURjgp
OwogICAgIGlmIChoYXNQYXRoKQogICAgICAgICB1bmNoZWNrZWRBcHBlbmRMZW5ndGhBbmRTdHJp
bmcocGF0aFVURjgpOwotICAgIGlmIChoYXNQb3J0KQotICAgICAgICB1bmNoZWNrZWRBcHBlbmRM
ZW5ndGhBbmRTdHJpbmcocG9ydFVURjgpOwogICAgIGlmIChoYXNTY2hlbWUpCiAgICAgICAgIHVu
Y2hlY2tlZEFwcGVuZExlbmd0aEFuZFN0cmluZyhzY2hlbWVVVEY4KTsKICAgICBpZiAoaGFzVXNl
cm5hbWUpCiAgICAgICAgIHVuY2hlY2tlZEFwcGVuZExlbmd0aEFuZFN0cmluZyh1c2VybmFtZVVU
RjgpOworICAgIGlmIChoYXNQb3J0KSB7CisgICAgICAgIHZlY3Rvci51bmNoZWNrZWRBcHBlbmQo
ISEqcG9ydCk7CisgICAgICAgIGlmICgqcG9ydCkgeworICAgICAgICAgICAgdmVjdG9yLnVuY2hl
Y2tlZEFwcGVuZCgqKnBvcnQgPj4gMCk7CisgICAgICAgICAgICB2ZWN0b3IudW5jaGVja2VkQXBw
ZW5kKCoqcG9ydCA+PiA4KTsKKyAgICAgICAgfQorICAgIH0KICAgICBpZiAoaGFzUXVlcnkpIHsK
LSAgICAgICAgdmVjdG9yLmFwcGVuZChxdWVyeVRyYW5zZm9ybS5pbmRleCgpKTsKLSAgICAgICAg
c3RkOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShjb25zdCBTdHJpbmcmIHF1ZXJ5U3RyaW5n
KSB7Ci0gICAgICAgICAgICBhdXRvIHF1ZXJ5U3RyaW5nVVRGOCA9IHF1ZXJ5U3RyaW5nLnV0Zjgo
KTsKLSAgICAgICAgICAgIGFwcGVuZCh2ZWN0b3IsIHF1ZXJ5U3RyaW5nVVRGOC5sZW5ndGgoKSk7
Ci0gICAgICAgICAgICBhcHBlbmQodmVjdG9yLCBxdWVyeVN0cmluZ1VURjgpOworICAgICAgICB2
ZWN0b3IudW5jaGVja2VkQXBwZW5kKHF1ZXJ5VHJhbnNmb3JtLmluZGV4KCkpOworICAgICAgICBz
dGQ6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKGNvbnN0IFN0cmluZyYpIHsKKyAgICAgICAg
ICAgIHVuY2hlY2tlZEFwcGVuZCh2ZWN0b3IsIHF1ZXJ5U3RyaW5nVVRGOC5sZW5ndGgoKSk7Cisg
ICAgICAgICAgICB1bmNoZWNrZWRBcHBlbmQodmVjdG9yLCBxdWVyeVN0cmluZ1VURjgpOwogICAg
ICAgICB9LCBbJl0oY29uc3QgUXVlcnlUcmFuc2Zvcm0mIHRyYW5zZm9ybSkgewogICAgICAgICAg
ICAgdHJhbnNmb3JtLnNlcmlhbGl6ZSh2ZWN0b3IpOwogICAgICAgICB9KSwgcXVlcnlUcmFuc2Zv
cm0pOwpAQCAtNDg3LDkgKzU1OCwxOCBAQCBhdXRvIFJlZGlyZWN0QWN0aW9uOjpVUkxUcmFuc2Zv
cm1BY3Rpb246CiAgICAgYXV0byBob3N0ID0gaGFzSG9zdCA/IGRlc2VyaWFsaXplU3RyaW5nKCkg
OiBTdHJpbmcoKTsKICAgICBhdXRvIHBhc3N3b3JkID0gaGFzUGFzc3dvcmQgPyBkZXNlcmlhbGl6
ZVN0cmluZygpIDogU3RyaW5nKCk7CiAgICAgYXV0byBwYXRoID0gaGFzUGF0aCA/IGRlc2VyaWFs
aXplU3RyaW5nKCkgOiBTdHJpbmcoKTsKLSAgICBhdXRvIHBvcnQgPSBoYXNQb3J0ID8gZGVzZXJp
YWxpemVTdHJpbmcoKSA6IFN0cmluZygpOwogICAgIGF1dG8gc2NoZW1lID0gaGFzU2NoZW1lID8g
ZGVzZXJpYWxpemVTdHJpbmcoKSA6IFN0cmluZygpOwogICAgIGF1dG8gdXNlcm5hbWUgPSBoYXNV
c2VybmFtZSA/IGRlc2VyaWFsaXplU3RyaW5nKCkgOiBTdHJpbmcoKTsKKyAgICBzdGQ6Om9wdGlv
bmFsPHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+PiBwb3J0OworICAgIGlmIChoYXNQb3J0KSB7Cisg
ICAgICAgIGlmIChzcGFuW3Byb2dyZXNzKytdKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChzcGFuLnNpemUoKSA+IHByb2dyZXNzICsgMSk7CisgICAgICAgICAgICB1aW50MTZfdCB2YWx1
ZSA9IChzcGFuW3Byb2dyZXNzXSA8PCAwKSB8IChzcGFuW3Byb2dyZXNzICsgMV0gPDwgOCk7Cisg
ICAgICAgICAgICBwb3J0ID0geyB7IHZhbHVlIH0gfTsKKyAgICAgICAgICAgIHByb2dyZXNzICs9
IDI7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcG9ydCA9IHsgc3RkOjpvcHRpb25hbDx1
aW50MTZfdD4geyB9IH07CisgICAgfQogICAgIFF1ZXJ5VHJhbnNmb3JtVmFyaWFudCBxdWVyeVRy
YW5zZm9ybTsKICAgICBpZiAoaGFzUXVlcnkpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3Bh
bi5zaXplKCkgPiBwcm9ncmVzcyk7CkBAIC01NTYsNiArNjM2LDY2IEBAIGF1dG8gUmVkaXJlY3RB
Y3Rpb246OlVSTFRyYW5zZm9ybUFjdGlvbjoKICAgICByZXR1cm4gcGFyc2VkUXVlcnlUcmFuc2Zv
cm07CiB9CiAKK3ZvaWQgUmVkaXJlY3RBY3Rpb246OlVSTFRyYW5zZm9ybUFjdGlvbjo6YXBwbHlU
b1VSTChVUkwmIHVybCkgY29uc3QKK3sKKyAgICBpZiAoISFmcmFnbWVudCkgeworICAgICAgICBp
ZiAoZnJhZ21lbnQuaXNFbXB0eSgpKQorICAgICAgICAgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRl
bnRpZmllcigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB1cmwuc2V0RnJhZ21lbnRJZGVu
dGlmaWVyKFN0cmluZ1ZpZXcoZnJhZ21lbnQpLnN1YnN0cmluZygxKSk7CisgICAgfQorICAgIGlm
ICghIWhvc3QpCisgICAgICAgIHVybC5zZXRIb3N0KGhvc3QpOworICAgIGlmICghIXBhc3N3b3Jk
KQorICAgICAgICB1cmwuc2V0UGFzc3dvcmQocGFzc3dvcmQpOworICAgIGlmICghIXBhdGgpCisg
ICAgICAgIHVybC5zZXRQYXRoKHBhdGgpOworICAgIGlmICghIXBvcnQpCisgICAgICAgIHVybC5z
ZXRQb3J0KCpwb3J0KTsKKyAgICBzdGQ6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdIChjb25z
dCBTdHJpbmcmIHF1ZXJ5KSB7CisgICAgICAgIGlmICghcXVlcnkuaXNOdWxsKCkpCisgICAgICAg
ICAgICB1cmwuc2V0UXVlcnkocXVlcnkuaXNFbXB0eSgpID8gU3RyaW5nVmlldygpIDogU3RyaW5n
VmlldyhxdWVyeSkpOworICAgIH0sIFsmXSAoY29uc3QgVVJMVHJhbnNmb3JtQWN0aW9uOjpRdWVy
eVRyYW5zZm9ybSYgdHJhbnNmb3JtKSB7CisgICAgICAgIHRyYW5zZm9ybS5hcHBseVRvVVJMKHVy
bCk7CisgICAgfSksIHF1ZXJ5VHJhbnNmb3JtKTsKKyAgICBpZiAoISFzY2hlbWUpCisgICAgICAg
IHVybC5zZXRQcm90b2NvbChzY2hlbWUpOworICAgIGlmICghIXVzZXJuYW1lKQorICAgICAgICB1
cmwuc2V0VXNlcih1c2VybmFtZSk7Cit9CisKK3ZvaWQgUmVkaXJlY3RBY3Rpb246OlVSTFRyYW5z
Zm9ybUFjdGlvbjo6UXVlcnlUcmFuc2Zvcm06OmFwcGx5VG9VUkwoVVJMJiB1cmwpIGNvbnN0Cit7
CisgICAgYXV0byBmb3JtID0gV1RGOjpVUkxQYXJzZXI6OnBhcnNlVVJMRW5jb2RlZEZvcm0odXJs
LnF1ZXJ5KCkpOworCisgICAgSGFzaFNldDxTdHJpbmc+IGtleXNUb1JlbW92ZTsKKyAgICBmb3Ig
KGF1dG8mIGtleSA6IHJlbW92ZVBhcmFtcykKKyAgICAgICAga2V5c1RvUmVtb3ZlLmFkZChrZXkp
OworICAgIGZvcm0ucmVtb3ZlQWxsTWF0Y2hpbmcoWyZdIChhdXRvJiBrZXlWYWx1ZSkgeworICAg
ICAgICByZXR1cm4ga2V5c1RvUmVtb3ZlLmNvbnRhaW5zKGtleVZhbHVlLmtleSk7CisgICAgfSk7
CisKKyAgICBWZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBTdHJpbmc+PiBrZXlzVG9B
ZGQ7CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4ga2V5c1RvUmVwbGFjZTsKKyAgICBmb3Ig
KGF1dG8mIGtleVZhbHVlIDogYWRkT3JSZXBsYWNlUGFyYW1zKSB7CisgICAgICAgIGlmIChrZXlW
YWx1ZS5yZXBsYWNlT25seSkKKyAgICAgICAgICAgIGtleXNUb1JlcGxhY2UuYWRkKGtleVZhbHVl
LmtleSwga2V5VmFsdWUudmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBrZXlzVG9B
ZGQuYXBwZW5kKHsga2V5VmFsdWUua2V5LCBrZXlWYWx1ZS52YWx1ZSB9KTsKKyAgICB9CisgICAg
Zm9yIChhdXRvJiBrZXlWYWx1ZSA6IGZvcm0pIHsKKyAgICAgICAgYXV0byBpdGVyYXRvciA9IGtl
eXNUb1JlcGxhY2UuZmluZChrZXlWYWx1ZS5rZXkpOworICAgICAgICBpZiAoaXRlcmF0b3IgIT0g
a2V5c1RvUmVwbGFjZS5lbmQoKSkKKyAgICAgICAgICAgIGtleVZhbHVlLnZhbHVlID0gaXRlcmF0
b3ItPnZhbHVlOworICAgIH0KKyAgICBmb3JtLmFwcGVuZFZlY3RvcihXVEZNb3ZlKGtleXNUb0Fk
ZCkpOworCisgICAgU3RyaW5nQnVpbGRlciB0cmFuc2Zvcm1lZFF1ZXJ5OworICAgIGZvciAoYXV0
byYga2V5VmFsdWUgOiBmb3JtKQorICAgICAgICB0cmFuc2Zvcm1lZFF1ZXJ5LmFwcGVuZCh0cmFu
c2Zvcm1lZFF1ZXJ5LmlzRW1wdHkoKSA/ICIiIDogIiYiLCBrZXlWYWx1ZS5rZXksICEha2V5VmFs
dWUudmFsdWUgPyAiPSIgOiAiIiwga2V5VmFsdWUudmFsdWUpOworICAgIHVybC5zZXRRdWVyeSh0
cmFuc2Zvcm1lZFF1ZXJ5KTsKK30KKwogYXV0byBSZWRpcmVjdEFjdGlvbjo6VVJMVHJhbnNmb3Jt
QWN0aW9uOjpRdWVyeVRyYW5zZm9ybTo6aXNvbGF0ZWRDb3B5KCkgY29uc3QgLT4gUXVlcnlUcmFu
c2Zvcm0KIHsKICAgICByZXR1cm4gewpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvQ29udGVudEV4dGVuc2lvbkFjdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQWN0aW9ucy5oCShyZXZpc2lv
biAyODU5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0
ZW5zaW9uQWN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDkgKzI5LDM4IEBACiAKICNpbmNsdWRl
ICJDb250ZW50RXh0ZW5zaW9uU3RyaW5nU2VyaWFsaXphdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KKyNpbmNsdWRlIDx3
dGYvSGFzaGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFJlc291cmNlUmVxdWVz
dDsKK30KIAogbmFtZXNwYWNlIFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zIHsKIAorLy8gRklY
TUU6IFRoaXMgcHJvYmFibHkgYmVsb25ncyBpbiBXVEYsIHN1Y2ggYXMgaW4gSGFzaEZ1bmN0aW9u
cy5oLgorc3RydWN0IFZhcmlhbnRIYXNoZXIgeworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWPgor
ICAgIHN0YXRpYyB1aW50MzJfdCBoYXNoKFYmJiB2YXJpYW50KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHBhaXJJbnRIYXNoKHZhcmlhbnQuaW5kZXgoKSwgc3RkOjp2aXNpdChbXShjb25zdCBhdXRv
JiB0eXBlKSB7CisgICAgICAgICAgICByZXR1cm4gdHlwZS5oYXNoKCk7CisgICAgICAgIH0sIHN0
ZDo6Zm9yd2FyZDxWPih2YXJpYW50KSkpOworICAgIH0KK307CisKKy8vIEZJWE1FOiBUaGlzIHBy
b2JhYmx5IGJlbG9uZ3MgaW4gV1RGLCBzdWNoIGFzIGluIEhhc2hlci5oLgorc3RydWN0IFZlY3Rv
ckhhc2hlciB7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFY+CisgICAgc3RhdGljIHVpbnQzMl90
IGhhc2goViYmIHZlY3RvcikKKyAgICB7CisgICAgICAgIEhhc2hlciBoYXNoZXI7CisgICAgICAg
IGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKKyAgICAgICAgICAgIGFkZChoYXNoZXIsIGVs
ZW1lbnQuaGFzaCgpKTsKKyAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7CisgICAgfQorfTsK
Kwogc3RydWN0IEFjdGlvbjsKIAogdXNpbmcgU2VyaWFsaXplZEFjdGlvbkJ5dGUgPSB1aW50OF90
OwpAQCAtNjYsNiArOTUsNyBAQCBzdHJ1Y3QgV0VCQ09SRV9FWFBPUlQgTW9kaWZ5SGVhZGVyc0Fj
dGlvCiAgICAgICAgICAgICBTdHJpbmcgaGVhZGVyOwogICAgICAgICAgICAgU3RyaW5nIHZhbHVl
OwogCisgICAgICAgICAgICB1aW50MzJfdCBoYXNoKCkgY29uc3QgeyByZXR1cm4gcGFpckludEhh
c2goaGVhZGVyLmhhc2goKSwgdmFsdWUuaGFzaCgpKTsgfQogICAgICAgICAgICAgQXBwZW5kT3Bl
cmF0aW9uIGlzb2xhdGVkQ29weSgpIGNvbnN0IHsgcmV0dXJuIHsgaGVhZGVyLmlzb2xhdGVkQ29w
eSgpLCB2YWx1ZS5pc29sYXRlZENvcHkoKSB9OyB9CiAgICAgICAgICAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgQXBwZW5kT3BlcmF0aW9uJiBvdGhlcikgY29uc3QgeyByZXR1cm4gb3RoZXIuaGVh
ZGVyID09IHRoaXMtPmhlYWRlciAmJiBvdGhlci52YWx1ZSA9PSB0aGlzLT52YWx1ZTsgfQogICAg
ICAgICB9OwpAQCAtNzMsNDcgKzEwMyw2NyBAQCBzdHJ1Y3QgV0VCQ09SRV9FWFBPUlQgTW9kaWZ5
SGVhZGVyc0FjdGlvCiAgICAgICAgICAgICBTdHJpbmcgaGVhZGVyOwogICAgICAgICAgICAgU3Ry
aW5nIHZhbHVlOwogCisgICAgICAgICAgICB1aW50MzJfdCBoYXNoKCkgY29uc3QgeyByZXR1cm4g
cGFpckludEhhc2goaGVhZGVyLmhhc2goKSwgdmFsdWUuaGFzaCgpKTsgfQogICAgICAgICAgICAg
U2V0T3BlcmF0aW9uIGlzb2xhdGVkQ29weSgpIGNvbnN0IHsgcmV0dXJuIHsgaGVhZGVyLmlzb2xh
dGVkQ29weSgpLCB2YWx1ZS5pc29sYXRlZENvcHkoKSB9OyB9CiAgICAgICAgICAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgU2V0T3BlcmF0aW9uJiBvdGhlcikgY29uc3QgeyByZXR1cm4gb3RoZXIu
aGVhZGVyID09IHRoaXMtPmhlYWRlciAmJiBvdGhlci52YWx1ZSA9PSB0aGlzLT52YWx1ZTsgfQog
ICAgICAgICB9OwogICAgICAgICBzdHJ1Y3QgUmVtb3ZlT3BlcmF0aW9uIHsKICAgICAgICAgICAg
IFN0cmluZyBoZWFkZXI7CiAKKyAgICAgICAgICAgIHVpbnQzMl90IGhhc2goKSBjb25zdCB7IHJl
dHVybiBoZWFkZXIuaGFzaCgpOyB9CiAgICAgICAgICAgICBSZW1vdmVPcGVyYXRpb24gaXNvbGF0
ZWRDb3B5KCkgY29uc3QgeyByZXR1cm4geyBoZWFkZXIuaXNvbGF0ZWRDb3B5KCkgfTsgfQogICAg
ICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlbW92ZU9wZXJhdGlvbiYgb3RoZXIpIGNv
bnN0IHsgcmV0dXJuIG90aGVyLmhlYWRlciA9PSB0aGlzLT5oZWFkZXI7IH0KICAgICAgICAgfTsK
ICAgICAgICAgdXNpbmcgT3BlcmF0aW9uVmFyaWFudCA9IHN0ZDo6dmFyaWFudDxBcHBlbmRPcGVy
YXRpb24sIFNldE9wZXJhdGlvbiwgUmVtb3ZlT3BlcmF0aW9uPjsKICAgICAgICAgT3BlcmF0aW9u
VmFyaWFudCBvcGVyYXRpb247CiAKKyAgICAgICAgdWludDMyX3QgaGFzaCgpIGNvbnN0IHsgcmV0
dXJuIFZhcmlhbnRIYXNoZXI6Omhhc2gob3BlcmF0aW9uKTsgfQogICAgICAgICBzdGF0aWMgRXhw
ZWN0ZWQ8TW9kaWZ5SGVhZGVySW5mbywgc3RkOjplcnJvcl9jb2RlPiBwYXJzZShjb25zdCBKU09O
OjpWYWx1ZSYpOwogICAgICAgICBNb2RpZnlIZWFkZXJJbmZvIGlzb2xhdGVkQ29weSgpIGNvbnN0
OwogICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgTW9kaWZ5SGVhZGVySW5mbyYpIGNvbnN0
OwogICAgICAgICB2b2lkIHNlcmlhbGl6ZShWZWN0b3I8dWludDhfdD4mKSBjb25zdDsKICAgICAg
ICAgc3RhdGljIE1vZGlmeUhlYWRlckluZm8gZGVzZXJpYWxpemUoU3Bhbjxjb25zdCB1aW50OF90
Pik7CiAgICAgICAgIHN0YXRpYyBzaXplX3Qgc2VyaWFsaXplZExlbmd0aChTcGFuPGNvbnN0IHVp
bnQ4X3Q+KTsKKyAgICAgICAgdm9pZCBhcHBseVRvUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmKTsK
ICAgICB9OwogCisgICAgZW51bSBjbGFzcyBIYXNoVGFibGVUeXBlIDogdWludDhfdCB7IEVtcHR5
LCBEZWxldGVkLCBGdWxsIH0gaGFzaFRhYmxlVHlwZTsKICAgICBWZWN0b3I8TW9kaWZ5SGVhZGVy
SW5mbz4gcmVxdWVzdEhlYWRlcnM7CiAgICAgVmVjdG9yPE1vZGlmeUhlYWRlckluZm8+IHJlc3Bv
bnNlSGVhZGVyczsKIAorICAgIE1vZGlmeUhlYWRlcnNBY3Rpb24oVmVjdG9yPE1vZGlmeUhlYWRl
ckluZm8+JiYgcmVxdWVzdEhlYWRlcnMsIFZlY3RvcjxNb2RpZnlIZWFkZXJJbmZvPiYmIHJlc3Bv
bnNlSGVhZGVycykKKyAgICAgICAgOiBoYXNoVGFibGVUeXBlKEhhc2hUYWJsZVR5cGU6OkZ1bGwp
CisgICAgICAgICwgcmVxdWVzdEhlYWRlcnMoV1RGTW92ZShyZXF1ZXN0SGVhZGVycykpCisgICAg
ICAgICwgcmVzcG9uc2VIZWFkZXJzKFdURk1vdmUocmVzcG9uc2VIZWFkZXJzKSkgeyB9CisKKyAg
ICBlbnVtIEVtcHR5VmFsdWVUYWcgeyBFbXB0eVZhbHVlIH07CisgICAgZW51bSBEZWxldGVkVmFs
dWVUYWcgeyBEZWxldGVkVmFsdWUgfTsKKyAgICBNb2RpZnlIZWFkZXJzQWN0aW9uKEVtcHR5VmFs
dWVUYWcpIDogaGFzaFRhYmxlVHlwZShIYXNoVGFibGVUeXBlOjpFbXB0eSkgeyB9CisgICAgTW9k
aWZ5SGVhZGVyc0FjdGlvbihEZWxldGVkVmFsdWVUYWcpIDogaGFzaFRhYmxlVHlwZShIYXNoVGFi
bGVUeXBlOjpEZWxldGVkKSB7IH0KKyAgICBib29sIGlzRGVsZXRlZFZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gaGFzaFRhYmxlVHlwZSA9PSBIYXNoVGFibGVUeXBlOjpEZWxldGVkOyB9CisKKyAgICB1
aW50MzJfdCBoYXNoKCkgY29uc3QgeyByZXR1cm4gcGFpckludEhhc2goVmVjdG9ySGFzaGVyOjpo
YXNoKHJlcXVlc3RIZWFkZXJzKSwgVmVjdG9ySGFzaGVyOjpoYXNoKHJlc3BvbnNlSGVhZGVycykp
OyB9CiAgICAgc3RhdGljIEV4cGVjdGVkPE1vZGlmeUhlYWRlcnNBY3Rpb24sIHN0ZDo6ZXJyb3Jf
Y29kZT4gcGFyc2UoY29uc3QgSlNPTjo6T2JqZWN0Jik7CiAgICAgTW9kaWZ5SGVhZGVyc0FjdGlv
biBpc29sYXRlZENvcHkoKSBjb25zdDsKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgTW9kaWZ5
SGVhZGVyc0FjdGlvbiYpIGNvbnN0OwogICAgIHZvaWQgc2VyaWFsaXplKFZlY3Rvcjx1aW50OF90
PiYpIGNvbnN0OwogICAgIHN0YXRpYyBNb2RpZnlIZWFkZXJzQWN0aW9uIGRlc2VyaWFsaXplKFNw
YW48Y29uc3QgdWludDhfdD4pOwogICAgIHN0YXRpYyBzaXplX3Qgc2VyaWFsaXplZExlbmd0aChT
cGFuPGNvbnN0IHVpbnQ4X3Q+KTsKKyAgICB2b2lkIGFwcGx5VG9SZXF1ZXN0KFJlc291cmNlUmVx
dWVzdCYpOwogfTsKIAogc3RydWN0IFdFQkNPUkVfRVhQT1JUIFJlZGlyZWN0QWN0aW9uIHsKICAg
ICBzdHJ1Y3QgRXh0ZW5zaW9uUGF0aEFjdGlvbiB7CiAgICAgICAgIFN0cmluZyBleHRlbnNpb25Q
YXRoOwogCisgICAgICAgIHVpbnQzMl90IGhhc2goKSBjb25zdCB7IHJldHVybiBleHRlbnNpb25Q
YXRoLmhhc2goKTsgfQogICAgICAgICBFeHRlbnNpb25QYXRoQWN0aW9uIGlzb2xhdGVkQ29weSgp
IGNvbnN0IHsgcmV0dXJuIHsgZXh0ZW5zaW9uUGF0aC5pc29sYXRlZENvcHkoKSB9OyB9CiAgICAg
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFeHRlbnNpb25QYXRoQWN0aW9uJiBvdGhlcikgY29u
c3QgeyByZXR1cm4gb3RoZXIuZXh0ZW5zaW9uUGF0aCA9PSB0aGlzLT5leHRlbnNpb25QYXRoOyB9
CiAgICAgfTsKICAgICBzdHJ1Y3QgUmVnZXhTdWJzdGl0dXRpb25BY3Rpb24gewogICAgICAgICBT
dHJpbmcgcmVnZXhTdWJzdGl0dXRpb247CiAKKyAgICAgICAgdWludDMyX3QgaGFzaCgpIGNvbnN0
IHsgcmV0dXJuIHJlZ2V4U3Vic3RpdHV0aW9uLmhhc2goKTsgfQogICAgICAgICBSZWdleFN1YnN0
aXR1dGlvbkFjdGlvbiBpc29sYXRlZENvcHkoKSBjb25zdCB7IHJldHVybiB7IHJlZ2V4U3Vic3Rp
dHV0aW9uLmlzb2xhdGVkQ29weSgpIH07IH0KICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFJlZ2V4U3Vic3RpdHV0aW9uQWN0aW9uJiBvdGhlcikgY29uc3QgeyByZXR1cm4gb3RoZXIucmVn
ZXhTdWJzdGl0dXRpb24gPT0gdGhpcy0+cmVnZXhTdWJzdGl0dXRpb247IH0KICAgICB9OwpAQCAt
MTI0LDYgKzE3NCw3IEBAIHN0cnVjdCBXRUJDT1JFX0VYUE9SVCBSZWRpcmVjdEFjdGlvbiB7CiAg
ICAgICAgICAgICAgICAgYm9vbCByZXBsYWNlT25seSB7IGZhbHNlIH07CiAgICAgICAgICAgICAg
ICAgU3RyaW5nIHZhbHVlOwogCisgICAgICAgICAgICAgICAgdWludDMyX3QgaGFzaCgpIGNvbnN0
IHsgcmV0dXJuIGNvbXB1dGVIYXNoKGtleSwgcmVwbGFjZU9ubHksIHZhbHVlKTsgfQogICAgICAg
ICAgICAgICAgIHN0YXRpYyBFeHBlY3RlZDxRdWVyeUtleVZhbHVlLCBzdGQ6OmVycm9yX2NvZGU+
IHBhcnNlKGNvbnN0IEpTT046OlZhbHVlJik7CiAgICAgICAgICAgICAgICAgUXVlcnlLZXlWYWx1
ZSBpc29sYXRlZENvcHkoKSBjb25zdDsKICAgICAgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgUXVlcnlLZXlWYWx1ZSYpIGNvbnN0OwpAQCAtMTM1LDQ3ICsxODYsNjUgQEAgc3RydWN0
IFdFQkNPUkVfRVhQT1JUIFJlZGlyZWN0QWN0aW9uIHsKICAgICAgICAgICAgIFZlY3RvcjxRdWVy
eUtleVZhbHVlPiBhZGRPclJlcGxhY2VQYXJhbXM7CiAgICAgICAgICAgICBWZWN0b3I8U3RyaW5n
PiByZW1vdmVQYXJhbXM7CiAKKyAgICAgICAgICAgIHVpbnQzMl90IGhhc2goKSBjb25zdCB7IHJl
dHVybiBjb21wdXRlSGFzaChWZWN0b3JIYXNoZXI6Omhhc2goYWRkT3JSZXBsYWNlUGFyYW1zKSwg
cmVtb3ZlUGFyYW1zKTsgfQogICAgICAgICAgICAgc3RhdGljIEV4cGVjdGVkPFF1ZXJ5VHJhbnNm
b3JtLCBzdGQ6OmVycm9yX2NvZGU+IHBhcnNlKGNvbnN0IEpTT046Ok9iamVjdCYpOwogICAgICAg
ICAgICAgUXVlcnlUcmFuc2Zvcm0gaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAgICAgICAgICAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgUXVlcnlUcmFuc2Zvcm0mKSBjb25zdDsKICAgICAgICAgICAg
IHZvaWQgc2VyaWFsaXplKFZlY3Rvcjx1aW50OF90PiYpIGNvbnN0OwogICAgICAgICAgICAgc3Rh
dGljIFF1ZXJ5VHJhbnNmb3JtIGRlc2VyaWFsaXplKFNwYW48Y29uc3QgdWludDhfdD4pOwogICAg
ICAgICAgICAgc3RhdGljIHNpemVfdCBzZXJpYWxpemVkTGVuZ3RoKFNwYW48Y29uc3QgdWludDhf
dD4pOworICAgICAgICAgICAgdm9pZCBhcHBseVRvVVJMKFVSTCYpIGNvbnN0OwogICAgICAgICB9
OwogCiAgICAgICAgIFN0cmluZyBmcmFnbWVudDsKICAgICAgICAgU3RyaW5nIGhvc3Q7CiAgICAg
ICAgIFN0cmluZyBwYXNzd29yZDsKICAgICAgICAgU3RyaW5nIHBhdGg7Ci0gICAgICAgIFN0cmlu
ZyBwb3J0OworICAgICAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+PiBw
b3J0OwogICAgICAgICB1c2luZyBRdWVyeVRyYW5zZm9ybVZhcmlhbnQgPSBzdGQ6OnZhcmlhbnQ8
U3RyaW5nLCBRdWVyeVRyYW5zZm9ybT47CiAgICAgICAgIFF1ZXJ5VHJhbnNmb3JtVmFyaWFudCBx
dWVyeVRyYW5zZm9ybTsKICAgICAgICAgU3RyaW5nIHNjaGVtZTsKICAgICAgICAgU3RyaW5nIHVz
ZXJuYW1lOwogCi0gICAgICAgIHN0YXRpYyBFeHBlY3RlZDxVUkxUcmFuc2Zvcm1BY3Rpb24sIHN0
ZDo6ZXJyb3JfY29kZT4gcGFyc2UoY29uc3QgSlNPTjo6T2JqZWN0JiwgY29uc3QgSGFzaFNldDxT
dHJpbmc+Jik7CisgICAgICAgIHVpbnQzMl90IGhhc2goKSBjb25zdCB7IHJldHVybiBjb21wdXRl
SGFzaChmcmFnbWVudC5oYXNoKCksIGhvc3QuaGFzaCgpLCBwYXNzd29yZC5oYXNoKCksIHBhdGgu
aGFzaCgpLCBwb3J0LCBWYXJpYW50SGFzaGVyOjpoYXNoKHF1ZXJ5VHJhbnNmb3JtKSwgc2NoZW1l
Lmhhc2goKSwgdXNlcm5hbWUuaGFzaCgpKTsgfQorICAgICAgICBzdGF0aWMgRXhwZWN0ZWQ8VVJM
VHJhbnNmb3JtQWN0aW9uLCBzdGQ6OmVycm9yX2NvZGU+IHBhcnNlKGNvbnN0IEpTT046Ok9iamVj
dCYsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8SGFzaFNldDxTdHJpbmc+PiYpOwogICAgICAgICBVUkxU
cmFuc2Zvcm1BY3Rpb24gaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAgICAgICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBVUkxUcmFuc2Zvcm1BY3Rpb24mKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXJp
YWxpemUoVmVjdG9yPHVpbnQ4X3Q+JikgY29uc3Q7CiAgICAgICAgIHN0YXRpYyBVUkxUcmFuc2Zv
cm1BY3Rpb24gZGVzZXJpYWxpemUoU3Bhbjxjb25zdCB1aW50OF90Pik7CiAgICAgICAgIHN0YXRp
YyBzaXplX3Qgc2VyaWFsaXplZExlbmd0aChTcGFuPGNvbnN0IHVpbnQ4X3Q+KTsKKyAgICAgICAg
dm9pZCBhcHBseVRvVVJMKFVSTCYpIGNvbnN0OwogICAgIH07CiAgICAgc3RydWN0IFVSTEFjdGlv
biB7CiAgICAgICAgIFN0cmluZyB1cmw7CiAKKyAgICAgICAgdWludDMyX3QgaGFzaCgpIGNvbnN0
IHsgcmV0dXJuIHVybC5oYXNoKCk7IH0KICAgICAgICAgVVJMQWN0aW9uIGlzb2xhdGVkQ29weSgp
IGNvbnN0IHsgcmV0dXJuIHsgdXJsLmlzb2xhdGVkQ29weSgpIH07IH0KICAgICAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFVSTEFjdGlvbiYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG90aGVyLnVy
bCA9PSB0aGlzLT51cmw7IH0KICAgICB9OwogCisgICAgZW51bSBjbGFzcyBIYXNoVGFibGVUeXBl
IDogdWludDhfdCB7IEVtcHR5LCBEZWxldGVkLCBGdWxsIH0gaGFzaFRhYmxlVHlwZTsKICAgICB1
c2luZyBBY3Rpb25WYXJpYW50ID0gc3RkOjp2YXJpYW50PEV4dGVuc2lvblBhdGhBY3Rpb24sIFJl
Z2V4U3Vic3RpdHV0aW9uQWN0aW9uLCBVUkxUcmFuc2Zvcm1BY3Rpb24sIFVSTEFjdGlvbj47CiAg
ICAgQWN0aW9uVmFyaWFudCBhY3Rpb247CiAKLSAgICBzdGF0aWMgRXhwZWN0ZWQ8UmVkaXJlY3RB
Y3Rpb24sIHN0ZDo6ZXJyb3JfY29kZT4gcGFyc2UoY29uc3QgSlNPTjo6T2JqZWN0JiwgY29uc3Qg
SGFzaFNldDxTdHJpbmc+Jik7CisgICAgUmVkaXJlY3RBY3Rpb24oQWN0aW9uVmFyaWFudCYmIGFj
dGlvbikKKyAgICAgICAgOiBoYXNoVGFibGVUeXBlKEhhc2hUYWJsZVR5cGU6OkZ1bGwpCisgICAg
ICAgICwgYWN0aW9uKFdURk1vdmUoYWN0aW9uKSkgeyB9CisKKyAgICBlbnVtIEVtcHR5VmFsdWVU
YWcgeyBFbXB0eVZhbHVlIH07CisgICAgZW51bSBEZWxldGVkVmFsdWVUYWcgeyBEZWxldGVkVmFs
dWUgfTsKKyAgICBSZWRpcmVjdEFjdGlvbihFbXB0eVZhbHVlVGFnKSA6IGhhc2hUYWJsZVR5cGUo
SGFzaFRhYmxlVHlwZTo6RW1wdHkpIHsgfQorICAgIFJlZGlyZWN0QWN0aW9uKERlbGV0ZWRWYWx1
ZVRhZykgOiBoYXNoVGFibGVUeXBlKEhhc2hUYWJsZVR5cGU6OkRlbGV0ZWQpIHsgfQorICAgIGJv
b2wgaXNEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBoYXNoVGFibGVUeXBlID09IEhhc2hU
YWJsZVR5cGU6OkRlbGV0ZWQ7IH0KKyAgICB1aW50MzJfdCBoYXNoKCkgY29uc3QgeyByZXR1cm4g
VmFyaWFudEhhc2hlcjo6aGFzaChhY3Rpb24pOyB9CisKKyAgICBzdGF0aWMgRXhwZWN0ZWQ8UmVk
aXJlY3RBY3Rpb24sIHN0ZDo6ZXJyb3JfY29kZT4gcGFyc2UoY29uc3QgSlNPTjo6T2JqZWN0Jiwg
Y29uc3Qgc3RkOjpvcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+Jik7CiAgICAgUmVkaXJlY3RBY3Rp
b24gaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlZGly
ZWN0QWN0aW9uJikgY29uc3Q7CiAgICAgdm9pZCBzZXJpYWxpemUoVmVjdG9yPHVpbnQ4X3Q+Jikg
Y29uc3Q7CiAgICAgc3RhdGljIFJlZGlyZWN0QWN0aW9uIGRlc2VyaWFsaXplKFNwYW48Y29uc3Qg
dWludDhfdD4pOwogICAgIHN0YXRpYyBzaXplX3Qgc2VyaWFsaXplZExlbmd0aChTcGFuPGNvbnN0
IHVpbnQ4X3Q+KTsKKyAgICB2b2lkIGFwcGx5VG9SZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYpOwog
fTsKIAogdXNpbmcgQWN0aW9uRGF0YSA9IHN0ZDo6dmFyaWFudDwKQEAgLTE5MSw0ICsyNjAsMjQg
QEAgdXNpbmcgQWN0aW9uRGF0YSA9IHN0ZDo6dmFyaWFudDwKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnMKIAorbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPD4g
c3RydWN0IERlZmF1bHRIYXNoPFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpSZWRpcmVjdEFj
dGlvbj4geworICAgIHVzaW5nIEFjdGlvbiA9IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpS
ZWRpcmVjdEFjdGlvbjsKKyAgICBzdGF0aWMgdWludDMyX3QgaGFzaChjb25zdCBBY3Rpb24mIGFj
dGlvbikgeyByZXR1cm4gYWN0aW9uLmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNv
bnN0IEFjdGlvbiYgYSwgY29uc3QgQWN0aW9uJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVl
OworfTsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8V2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OlJlZGlyZWN0QWN0aW9uPiA6IHB1YmxpYyBDdXN0b21IYXNoVHJhaXRzPFdlYkNvcmU6
OkNvbnRlbnRFeHRlbnNpb25zOjpSZWRpcmVjdEFjdGlvbj4geyB9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBEZWZhdWx0SGFzaDxXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TW9kaWZ5SGVhZGVy
c0FjdGlvbj4geworICAgIHVzaW5nIEFjdGlvbiA9IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpNb2RpZnlIZWFkZXJzQWN0aW9uOworICAgIHN0YXRpYyB1aW50MzJfdCBoYXNoKGNvbnN0IEFj
dGlvbiYgYWN0aW9uKSB7IHJldHVybiBhY3Rpb24uaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wg
ZXF1YWwoY29uc3QgQWN0aW9uJiBhLCBjb25zdCBBY3Rpb24mIGIpIHsgcmV0dXJuIGEgPT0gYjsg
fQorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRl
ZCA9IHRydWU7Cit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6TW9kaWZ5SGVhZGVyc0FjdGlvbj4gOiBwdWJsaWMgQ3VzdG9tSGFzaFRy
YWl0czxXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TW9kaWZ5SGVhZGVyc0FjdGlvbj4geyB9
OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwogI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0
ZW5zaW9uQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHAJKHJldmlzaW9uIDI4NTk1NCkK
KysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21w
aWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDEyICs3NiwxNiBAQCBzdGF0aWMgVmVjdG9y
PHVuc2lnbmVkPiBzZXJpYWxpemVBY3Rpb25zCiAgICAgdXNpbmcgQWN0aW9uTG9jYXRpb24gPSB1
aW50MzJfdDsKICAgICB1c2luZyBBY3Rpb25NYXAgPSBIYXNoTWFwPFJlc291cmNlRmxhZ3MsIEFj
dGlvbkxvY2F0aW9uLCBEZWZhdWx0SGFzaDxSZXNvdXJjZUZsYWdzPiwgV1RGOjpVbnNpZ25lZFdp
dGhaZXJvS2V5SGFzaFRyYWl0czxSZXNvdXJjZUZsYWdzPj47CiAgICAgdXNpbmcgU3RyaW5nQWN0
aW9uTWFwID0gSGFzaE1hcDxzdGQ6OnBhaXI8U3RyaW5nLCBSZXNvdXJjZUZsYWdzPiwgQWN0aW9u
TG9jYXRpb24sIERlZmF1bHRIYXNoPHN0ZDo6cGFpcjxTdHJpbmcsIFJlc291cmNlRmxhZ3M+Piwg
UGFpckhhc2hUcmFpdHM8SGFzaFRyYWl0czxTdHJpbmc+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9L
ZXlIYXNoVHJhaXRzPFJlc291cmNlRmxhZ3M+Pj47CisgICAgdXNpbmcgUmVkaXJlY3RBY3Rpb25N
YXAgPSBIYXNoTWFwPHN0ZDo6cGFpcjxSZWRpcmVjdEFjdGlvbiwgUmVzb3VyY2VGbGFncz4sIEFj
dGlvbkxvY2F0aW9uLCBEZWZhdWx0SGFzaDxzdGQ6OnBhaXI8UmVkaXJlY3RBY3Rpb24sIFJlc291
cmNlRmxhZ3M+PiwgUGFpckhhc2hUcmFpdHM8SGFzaFRyYWl0czxSZWRpcmVjdEFjdGlvbj4sIFdU
Rjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8UmVzb3VyY2VGbGFncz4+PjsKKyAgICB1
c2luZyBNb2RpZnlIZWFkZXJzQWN0aW9uTWFwID0gSGFzaE1hcDxzdGQ6OnBhaXI8TW9kaWZ5SGVh
ZGVyc0FjdGlvbiwgUmVzb3VyY2VGbGFncz4sIEFjdGlvbkxvY2F0aW9uLCBEZWZhdWx0SGFzaDxz
dGQ6OnBhaXI8TW9kaWZ5SGVhZGVyc0FjdGlvbiwgUmVzb3VyY2VGbGFncz4+LCBQYWlySGFzaFRy
YWl0czxIYXNoVHJhaXRzPE1vZGlmeUhlYWRlcnNBY3Rpb24+LCBXVEY6OlVuc2lnbmVkV2l0aFpl
cm9LZXlIYXNoVHJhaXRzPFJlc291cmNlRmxhZ3M+Pj47CiAgICAgQWN0aW9uTWFwIGJsb2NrTG9h
ZEFjdGlvbnNNYXA7CiAgICAgQWN0aW9uTWFwIGJsb2NrQ29va2llc0FjdGlvbnNNYXA7CiAgICAg
UGVuZGluZ0Rpc3BsYXlOb25lQWN0aW9uc01hcCBjc3NEaXNwbGF5Tm9uZUFjdGlvbnNNYXA7CiAg
ICAgQWN0aW9uTWFwIGlnbm9yZVByZXZpb3VzUnVsZUFjdGlvbnNNYXA7CiAgICAgQWN0aW9uTWFw
IG1ha2VIVFRQU0FjdGlvbnNNYXA7CiAgICAgU3RyaW5nQWN0aW9uTWFwIG5vdGlmeUFjdGlvbnNN
YXA7CisgICAgUmVkaXJlY3RBY3Rpb25NYXAgcmVkaXJlY3RBY3Rpb25NYXA7CisgICAgTW9kaWZ5
SGVhZGVyc0FjdGlvbk1hcCBtb2RpZnlIZWFkZXJzQWN0aW9uTWFwOwogCiAgICAgZm9yICh1bnNp
Z25lZCBydWxlSW5kZXggPSAwOyBydWxlSW5kZXggPCBydWxlTGlzdC5zaXplKCk7ICsrcnVsZUlu
ZGV4KSB7CiAgICAgICAgIGNvbnN0IENvbnRlbnRFeHRlbnNpb25SdWxlJiBydWxlID0gcnVsZUxp
c3RbcnVsZUluZGV4XTsKQEAgLTExMSwzMSArMTE1LDM0IEBAIHN0YXRpYyBWZWN0b3I8dW5zaWdu
ZWQ+IHNlcmlhbGl6ZUFjdGlvbnMKICAgICAgICAgfQogCiAgICAgICAgIFJlc291cmNlRmxhZ3Mg
ZmxhZ3MgPSBydWxlLnRyaWdnZXIoKS5mbGFnczsKLSAgICAgICAgdW5zaWduZWQgYWN0aW9uTG9j
YXRpb24gPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7Ci0gICAgICAgIAor
CiAgICAgICAgIGF1dG8gZmluZE9yTWFrZUFjdGlvbkxvY2F0aW9uID0gWyZdIChBY3Rpb25NYXAm
IG1hcCkgewotICAgICAgICAgICAgY29uc3QgYXV0byBleGlzdGluZ0FjdGlvbiA9IG1hcC5maW5k
KGZsYWdzKTsKLSAgICAgICAgICAgIGlmIChleGlzdGluZ0FjdGlvbiA9PSBtYXAuZW5kKCkpIHsK
LSAgICAgICAgICAgICAgICBhY3Rpb25Mb2NhdGlvbiA9IGFjdGlvbnMuc2l6ZSgpOworICAgICAg
ICAgICAgcmV0dXJuIG1hcC5lbnN1cmUoZmxhZ3MsIFsmXSB7CisgICAgICAgICAgICAgICAgYXV0
byBuZXdBY3Rpb25Mb2NhdGlvbiA9IGFjdGlvbnMuc2l6ZSgpOwogICAgICAgICAgICAgICAgIGFj
dGlvbnMuYXBwZW5kKGFjdGlvbkRhdGEuaW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgbWFwLnNl
dChmbGFncywgYWN0aW9uTG9jYXRpb24pOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICAgICAgYWN0aW9uTG9jYXRpb24gPSBleGlzdGluZ0FjdGlvbi0+dmFsdWU7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG5ld0FjdGlvbkxvY2F0aW9uOworICAgICAgICAgICAgfSkuaXRlcmF0b3It
PnZhbHVlOwogICAgICAgICB9OwotICAgICAgICAKLSAgICAgICAgYXV0byBmaW5kT3JNYWtlU3Ry
aW5nQWN0aW9uTG9jYXRpb24gPSBbJl0gKFN0cmluZ0FjdGlvbk1hcCYgbWFwLCBjb25zdCBOb3Rp
ZnlBY3Rpb24mIGFjdGlvbkRhdGEpIHsKLSAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgbm90aWZp
Y2F0aW9uID0gYWN0aW9uRGF0YS5zdHJpbmc7Ci0gICAgICAgICAgICBhdXRvIGV4aXN0aW5nQWN0
aW9uID0gbWFwLmZpbmQoc3RkOjptYWtlX3BhaXIobm90aWZpY2F0aW9uLCBmbGFncykpOwotICAg
ICAgICAgICAgaWYgKGV4aXN0aW5nQWN0aW9uID09IG1hcC5lbmQoKSkgewotICAgICAgICAgICAg
ICAgIGFjdGlvbkxvY2F0aW9uID0gYWN0aW9ucy5zaXplKCk7Ci0gICAgICAgICAgICAgICAgYWN0
aW9ucy5hcHBlbmQoV1RGOjphbHRlcm5hdGl2ZUluZGV4VjxOb3RpZnlBY3Rpb24sIEFjdGlvbkRh
dGE+KTsKLSAgICAgICAgICAgICAgICBzZXJpYWxpemVTdHJpbmcoYWN0aW9ucywgbm90aWZpY2F0
aW9uKTsKLSAgICAgICAgICAgICAgICBtYXAuc2V0KHN0ZDo6bWFrZV9wYWlyKG5vdGlmaWNhdGlv
biwgZmxhZ3MpLCBhY3Rpb25Mb2NhdGlvbik7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgICAgICBhY3Rpb25Mb2NhdGlvbiA9IGV4aXN0aW5nQWN0aW9uLT52YWx1ZTsKKworICAgICAg
ICBhdXRvIGZpbmRPck1ha2VOb3RpZnlBY3Rpb25Mb2NhdGlvbiA9IFsmXSAoYXV0byYgbWFwLCBj
b25zdCBhdXRvJiBhY3Rpb24pIHsKKyAgICAgICAgICAgIHJldHVybiBtYXAuZW5zdXJlKHsgYWN0
aW9uLnN0cmluZywgZmxhZ3MgfSwgWyZdIHsKKyAgICAgICAgICAgICAgICBhdXRvIG5ld0FjdGlv
bkxvY2F0aW9uID0gYWN0aW9ucy5zaXplKCk7CisgICAgICAgICAgICAgICAgYWN0aW9ucy5hcHBl
bmQoYWN0aW9uRGF0YS5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICBhY3Rpb24uc2VyaWFsaXpl
KGFjdGlvbnMpOworICAgICAgICAgICAgICAgIHJldHVybiBuZXdBY3Rpb25Mb2NhdGlvbjsKKyAg
ICAgICAgICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgfTsKLSAgICAgICAgCi0gICAg
ICAgIHN0ZDo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0gKGNvbnN0IENTU0Rpc3BsYXlOb25l
U2VsZWN0b3JBY3Rpb24mIGFjdGlvbkRhdGEpIHsKKworICAgICAgICBhdXRvIGZpbmRPck1ha2VP
dGhlckFjdGlvbkxvY2F0aW9uID0gWyZdIChhdXRvJiBtYXAsIGNvbnN0IGF1dG8mIGFjdGlvbikg
eworICAgICAgICAgICAgcmV0dXJuIG1hcC5lbnN1cmUoeyBhY3Rpb24sIGZsYWdzIH0sIFsmXSB7
CisgICAgICAgICAgICAgICAgYXV0byBuZXdBY3Rpb25Mb2NhdGlvbiA9IGFjdGlvbnMuc2l6ZSgp
OworICAgICAgICAgICAgICAgIGFjdGlvbnMuYXBwZW5kKGFjdGlvbkRhdGEuaW5kZXgoKSk7Cisg
ICAgICAgICAgICAgICAgYWN0aW9uLnNlcmlhbGl6ZShhY3Rpb25zKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbmV3QWN0aW9uTG9jYXRpb247CisgICAgICAgICAgICB9KS5pdGVyYXRvci0+dmFs
dWU7CisgICAgICAgIH07CisKKyAgICAgICAgYXV0byBhY3Rpb25Mb2NhdGlvbiA9IHN0ZDo6dmlz
aXQoV1RGOjptYWtlVmlzaXRvcihbJl0gKGNvbnN0IENTU0Rpc3BsYXlOb25lU2VsZWN0b3JBY3Rp
b24mIGFjdGlvbkRhdGEpIHsKICAgICAgICAgICAgIGNvbnN0IGF1dG8gYWRkUmVzdWx0ID0gY3Nz
RGlzcGxheU5vbmVBY3Rpb25zTWFwLmFkZChydWxlLnRyaWdnZXIoKSwgUGVuZGluZ0Rpc3BsYXlO
b25lQWN0aW9ucygpKTsKICAgICAgICAgICAgIGF1dG8mIHBlbmRpbmdTdHJpbmdBY3Rpb25zID0g
YWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgICAgIGlmICghcGVuZGluZ1N0cmlu
Z0FjdGlvbnMuY29tYmluZWRTZWxlY3RvcnMuaXNFbXB0eSgpKQpAQCAtMTQzLDIxICsxNTAsMjIg
QEAgc3RhdGljIFZlY3Rvcjx1bnNpZ25lZD4gc2VyaWFsaXplQWN0aW9ucwogICAgICAgICAgICAg
cGVuZGluZ1N0cmluZ0FjdGlvbnMuY29tYmluZWRTZWxlY3RvcnMuYXBwZW5kKGFjdGlvbkRhdGEu
c3RyaW5nKTsKICAgICAgICAgICAgIHBlbmRpbmdTdHJpbmdBY3Rpb25zLmNsaWVudExvY2F0aW9u
cy5hcHBlbmQoYWN0aW9uTG9jYXRpb25zLnNpemUoKSk7CiAKLSAgICAgICAgICAgIGFjdGlvbkxv
Y2F0aW9uID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOworICAgICAgICAg
ICAgLy8gcmVzb2x2ZVBlbmRpbmdEaXNwbGF5Tm9uZUFjdGlvbnMgd2lsbCBmaWxsIHRoaXMgaW4g
bGF0ZXIuCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxBY3Rpb25Mb2Nh
dGlvbj46Om1heCgpOwogICAgICAgICB9LCBbJl0gKGNvbnN0IElnbm9yZVByZXZpb3VzUnVsZXNB
Y3Rpb24mKSB7Ci0gICAgICAgICAgICBmaW5kT3JNYWtlQWN0aW9uTG9jYXRpb24oaWdub3JlUHJl
dmlvdXNSdWxlQWN0aW9uc01hcCk7CisgICAgICAgICAgICByZXR1cm4gZmluZE9yTWFrZUFjdGlv
bkxvY2F0aW9uKGlnbm9yZVByZXZpb3VzUnVsZUFjdGlvbnNNYXApOwogICAgICAgICB9LCBbJl0g
KGNvbnN0IEJsb2NrTG9hZEFjdGlvbiYpIHsKLSAgICAgICAgICAgIGZpbmRPck1ha2VBY3Rpb25M
b2NhdGlvbihibG9ja0xvYWRBY3Rpb25zTWFwKTsKKyAgICAgICAgICAgIHJldHVybiBmaW5kT3JN
YWtlQWN0aW9uTG9jYXRpb24oYmxvY2tMb2FkQWN0aW9uc01hcCk7CiAgICAgICAgIH0sIFsmXSAo
Y29uc3QgQmxvY2tDb29raWVzQWN0aW9uJikgewotICAgICAgICAgICAgZmluZE9yTWFrZUFjdGlv
bkxvY2F0aW9uKGJsb2NrQ29va2llc0FjdGlvbnNNYXApOworICAgICAgICAgICAgcmV0dXJuIGZp
bmRPck1ha2VBY3Rpb25Mb2NhdGlvbihibG9ja0Nvb2tpZXNBY3Rpb25zTWFwKTsKICAgICAgICAg
fSwgWyZdIChjb25zdCBNYWtlSFRUUFNBY3Rpb24mKSB7Ci0gICAgICAgICAgICBmaW5kT3JNYWtl
QWN0aW9uTG9jYXRpb24obWFrZUhUVFBTQWN0aW9uc01hcCk7CisgICAgICAgICAgICByZXR1cm4g
ZmluZE9yTWFrZUFjdGlvbkxvY2F0aW9uKG1ha2VIVFRQU0FjdGlvbnNNYXApOwogICAgICAgICB9
LCBbJl0gKGNvbnN0IE5vdGlmeUFjdGlvbiYgYWN0aW9uRGF0YSkgewotICAgICAgICAgICAgZmlu
ZE9yTWFrZVN0cmluZ0FjdGlvbkxvY2F0aW9uKG5vdGlmeUFjdGlvbnNNYXAsIGFjdGlvbkRhdGEp
OwotICAgICAgICB9LCBbJl0gKGNvbnN0IE1vZGlmeUhlYWRlcnNBY3Rpb24mKSB7Ci0gICAgICAg
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50Ci0gICAgICAgIH0sIFsmXSAoY29uc3QgUmVkaXJlY3RB
Y3Rpb24mKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50CisgICAgICAgICAgICBy
ZXR1cm4gZmluZE9yTWFrZU5vdGlmeUFjdGlvbkxvY2F0aW9uKG5vdGlmeUFjdGlvbnNNYXAsIGFj
dGlvbkRhdGEpOworICAgICAgICB9LCBbJl0gKGNvbnN0IE1vZGlmeUhlYWRlcnNBY3Rpb24mIGFj
dGlvbikgeworICAgICAgICAgICAgcmV0dXJuIGZpbmRPck1ha2VPdGhlckFjdGlvbkxvY2F0aW9u
KG1vZGlmeUhlYWRlcnNBY3Rpb25NYXAsIGFjdGlvbik7CisgICAgICAgIH0sIFsmXSAoY29uc3Qg
UmVkaXJlY3RBY3Rpb24mIGFjdGlvbikgeworICAgICAgICAgICAgcmV0dXJuIGZpbmRPck1ha2VP
dGhlckFjdGlvbkxvY2F0aW9uKHJlZGlyZWN0QWN0aW9uTWFwLCBhY3Rpb24pOwogICAgICAgICB9
KSwgYWN0aW9uRGF0YSk7CiAgICAgICAgIGFjdGlvbkxvY2F0aW9ucy5hcHBlbmQoYWN0aW9uTG9j
YXRpb24pOwogICAgIH0KQEAgLTI2Nyw3ICsyNzUsNyBAQCBzdGQ6OmVycm9yX2NvZGUgY29tcGls
ZVJ1bGVMaXN0KENvbnRlbnRFCiB7CiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICBjYWxsT25NYWlu
VGhyZWFkKFtydWxlSlNPTiA9IHJ1bGVKU09OLmlzb2xhdGVkQ29weSgpLCBwYXJzZWRSdWxlTGlz
dCA9IHBhcnNlZFJ1bGVMaXN0Lmlzb2xhdGVkQ29weSgpXSB7Ci0gICAgICAgIEFTU0VSVChwYXJz
ZVJ1bGVMaXN0KHJ1bGVKU09OLCB7IH0pLnZhbHVlKCkgPT0gcGFyc2VkUnVsZUxpc3QpOworICAg
ICAgICBBU1NFUlQocGFyc2VSdWxlTGlzdChydWxlSlNPTiwgc3RkOjpudWxsb3B0KS52YWx1ZSgp
ID09IHBhcnNlZFJ1bGVMaXN0KTsKICAgICB9KTsKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25F
cnJvci5jcHAJKHJldmlzaW9uIDI4NTk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw4
ICsxMDMsMjAgQEAgY29uc3Qgc3RkOjplcnJvcl9jYXRlZ29yeSYgY29udGVudEV4dGVucwogICAg
ICAgICAgICAgICAgIHJldHVybiAiQSByZWRpcmVjdCBleHRlbnNpb24gcGF0aCBtdXN0IHN0YXJ0
IHdpdGggYSBzbGFzaCI7CiAgICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6
SlNPTlJlZGlyZWN0VVJMU2NoZW1lTm90QWxsb3dlZDoKICAgICAgICAgICAgICAgICByZXR1cm4g
IkEgcmVkaXJlY3QgdXJsIHNjaGVtZSBtdXN0IGJlIGluIHRoZSBzZXQgb2YgYWxsb3dlZCBzY2hl
bWVzIjsKKyAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJl
Y3RVUkxTY2hlbWVJbnZhbGlkOgorICAgICAgICAgICAgICAgIHJldHVybiAiQSByZWRpcmVjdCB1
cmwgc2NoZW1lIG11c3QgYmUgYSB2YWxpZCBzY2hlbWUiOworICAgICAgICAgICAgY2FzZSBDb250
ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTFNjaGVtZXNTaG91bGROb3RJbmNsdWRl
SmF2YXNjcmlwdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIlRoZSBzZXQgb2YgYWxsb3dlZCBy
ZWRpcmVjdCBzY2hlbWVzIHNob3VsZG4ndCBpbmNsdWRlIGphdmFzY3JpcHQiOworICAgICAgICAg
ICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTEludmFsaWQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuICJBIHJlZGlyZWN0IHVybCBtdXN0IGJlIHZhbGlkIjsKICAg
ICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RJbnZhbGlk
VHlwZToKICAgICAgICAgICAgICAgICByZXR1cm4gIkEgcmVkaXJlY3QgbXVzdCBoYXZlIGEgbWVt
YmVyIG5hbWVkIFwiZXh0ZW5zaW9uLXBhdGhcIiwgXCJyZWdleC1zdWJzdGl0dXRpb25cIiwgXCJ0
cmFuc2Zvcm1cIiBvciBcInVybFwiIjsKKyAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lv
bkVycm9yOjpKU09OUmVkaXJlY3RJbnZhbGlkUG9ydDoKKyAgICAgICAgICAgICAgICByZXR1cm4g
IkEgcmVkaXJlY3QgcG9ydCBtdXN0IGJlIGVpdGhlciBlbXB0eSBvciBhIG51bWJlciBiZXR3ZWVu
IDAgYW5kIDY1NTM1LCBpbmNsdXNpdmUiOworICAgICAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5z
aW9uRXJyb3I6OkpTT05SZWRpcmVjdEludmFsaWRRdWVyeToKKyAgICAgICAgICAgICAgICByZXR1
cm4gIkEgcmVkaXJlY3QgcXVlcnkgbXVzdCBlaXRoZXIgYmUgZW1wdHkgb3IgYmVnaW4gd2l0aCAn
PyciOworICAgICAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVj
dEludmFsaWRGcmFnbWVudDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIkEgcmVkaXJlY3QgZnJh
Z21lbnQgbXVzdCBlaXRoZXIgYmUgZW1wdHkgb3IgYmVnaW4gd2l0aCAnIyciOwogICAgICAgICAg
ICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05Nb2RpZnlIZWFkZXJzSW52YWxpZE9w
ZXJhdGlvbjoKICAgICAgICAgICAgICAgICByZXR1cm4gIkEgbW9kaWZ5LWhlYWRlcnMgb3BlcmF0
aW9uIG11c3QgaGF2ZSBhbiBvcGVyYXRpb24gdGhhdCBpcyBlaXRoZXIgXCJzZXRcIiwgXCJhcHBl
bmRcIiwgb3IgXCJyZW1vdmVcIiI7CiAgICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25F
cnJvcjo6SlNPTk1vZGlmeUhlYWRlcnNJbmZvTm90QURpY3Rpb25hcnk6CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9u
RXJyb3IuaAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvQ29udGVudEV4dGVuc2lvbkVycm9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDggKzYw
LDE0IEBAIGVudW0gY2xhc3MgQ29udGVudEV4dGVuc2lvbkVycm9yIHsKIAogICAgIEpTT05SZWRp
cmVjdE1pc3NpbmcsCiAgICAgSlNPTlJlZGlyZWN0RXh0ZW5zaW9uUGF0aERvZXNOb3RTdGFydFdp
dGhTbGFzaCwKKyAgICBKU09OUmVkaXJlY3RVUkxTY2hlbWVJbnZhbGlkLAogICAgIEpTT05SZWRp
cmVjdFVSTFNjaGVtZU5vdEFsbG93ZWQsCisgICAgSlNPTlJlZGlyZWN0VVJMU2NoZW1lc1Nob3Vs
ZE5vdEluY2x1ZGVKYXZhc2NyaXB0LAorICAgIEpTT05SZWRpcmVjdFVSTEludmFsaWQsCiAgICAg
SlNPTlJlZGlyZWN0SW52YWxpZFR5cGUsCisgICAgSlNPTlJlZGlyZWN0SW52YWxpZFBvcnQsCisg
ICAgSlNPTlJlZGlyZWN0SW52YWxpZFF1ZXJ5LAorICAgIEpTT05SZWRpcmVjdEludmFsaWRGcmFn
bWVudCwKIAogICAgIEpTT05SZW1vdmVQYXJhbWV0ZXJzTm90U3RyaW5nQXJyYXksCiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRl
bnRFeHRlbnNpb25QYXJzZXIuY3BwCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTc5LDcgKzE3OSw3IEBAIGJvb2wgaXNWYWxpZENTU1NlbGVjdG9yKGNvbnN0IFN0
cmluZyYgc2UKICAgICByZXR1cm4gISFwYXJzZXIucGFyc2VTZWxlY3RvcihzZWxlY3Rvcik7CiB9
CiAKLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPEV4cGVjdGVkPEFjdGlvbiwgc3RkOjplcnJvcl9jb2Rl
Pj4gbG9hZEFjdGlvbihjb25zdCBKU09OOjpPYmplY3QmIHJ1bGVPYmplY3QsIGNvbnN0IEhhc2hT
ZXQ8U3RyaW5nPiYgYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcykKK3N0YXRpYyBzdGQ6Om9wdGlv
bmFsPEV4cGVjdGVkPEFjdGlvbiwgc3RkOjplcnJvcl9jb2RlPj4gbG9hZEFjdGlvbihjb25zdCBK
U09OOjpPYmplY3QmIHJ1bGVPYmplY3QsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8SGFzaFNldDxTdHJp
bmc+PiYgYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcykKIHsKICAgICBhdXRvIGFjdGlvbk9iamVj
dCA9IHJ1bGVPYmplY3QuZ2V0T2JqZWN0KCJhY3Rpb24iKTsKICAgICBpZiAoIWFjdGlvbk9iamVj
dCkKQEAgLTIyNCw3ICsyMjQsNyBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxFeHBlY3RlZDxBY3Rp
b24sIHN0CiAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJvcjo6
SlNPTkludmFsaWRBY3Rpb25UeXBlKTsKIH0KIAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8RXhwZWN0
ZWQ8Q29udGVudEV4dGVuc2lvblJ1bGUsIHN0ZDo6ZXJyb3JfY29kZT4+IGxvYWRSdWxlKGNvbnN0
IEpTT046Ok9iamVjdCYgcnVsZU9iamVjdCwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhbGxvd2Vk
UmVkaXJlY3RVUkxTY2hlbWVzKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8RXhwZWN0ZWQ8Q29udGVu
dEV4dGVuc2lvblJ1bGUsIHN0ZDo6ZXJyb3JfY29kZT4+IGxvYWRSdWxlKGNvbnN0IEpTT046Ok9i
amVjdCYgcnVsZU9iamVjdCwgY29uc3Qgc3RkOjpvcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+JiBh
bGxvd2VkUmVkaXJlY3RVUkxTY2hlbWVzKQogewogICAgIGF1dG8gdHJpZ2dlciA9IGxvYWRUcmln
Z2VyKHJ1bGVPYmplY3QpOwogICAgIGlmICghdHJpZ2dlci5oYXNfdmFsdWUoKSkKQEAgLTIzOSw4
ICsyMzksMTEgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8RXhwZWN0ZWQ8Q29udGVudEV4dAogICAg
IHJldHVybiB7IHsgeyBXVEZNb3ZlKHRyaWdnZXIudmFsdWUoKSksIFdURk1vdmUoYWN0aW9uLT52
YWx1ZSgpKSB9IH0gfTsKIH0KIAotc3RhdGljIEV4cGVjdGVkPFZlY3RvcjxDb250ZW50RXh0ZW5z
aW9uUnVsZT4sIHN0ZDo6ZXJyb3JfY29kZT4gbG9hZEVuY29kZWRSdWxlcyhjb25zdCBTdHJpbmcm
IHJ1bGVKU09OLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGFsbG93ZWRSZWRpcmVjdFVSTFNjaGVt
ZXMpCitzdGF0aWMgRXhwZWN0ZWQ8VmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPiwgc3RkOjpl
cnJvcl9jb2RlPiBsb2FkRW5jb2RlZFJ1bGVzKGNvbnN0IFN0cmluZyYgcnVsZUpTT04sIGNvbnN0
IHN0ZDo6b3B0aW9uYWw8SGFzaFNldDxTdHJpbmc+PiYgYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1l
cykKIHsKKyAgICBpZiAoYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcyAmJiBhbGxvd2VkUmVkaXJl
Y3RVUkxTY2hlbWVzLT5jb250YWlucygiamF2YXNjcmlwdCIpKQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RVUkxTY2hlbWVz
U2hvdWxkTm90SW5jbHVkZUphdmFzY3JpcHQpOworCiAgICAgYXV0byBkZWNvZGVkUnVsZXMgPSBK
U09OOjpWYWx1ZTo6cGFyc2VKU09OKHJ1bGVKU09OKTsKIAogICAgIGlmICghZGVjb2RlZFJ1bGVz
KQpAQCAtMjcyLDcgKzI3NSw3IEBAIHN0YXRpYyBFeHBlY3RlZDxWZWN0b3I8Q29udGVudEV4dGVu
c2lvblIKICAgICByZXR1cm4gcnVsZUxpc3Q7CiB9CiAKLUV4cGVjdGVkPFZlY3RvcjxDb250ZW50
RXh0ZW5zaW9uUnVsZT4sIHN0ZDo6ZXJyb3JfY29kZT4gcGFyc2VSdWxlTGlzdChjb25zdCBTdHJp
bmcmIHJ1bGVKU09OLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGFsbG93ZWRSZWRpcmVjdFVSTFNj
aGVtZXMpCitFeHBlY3RlZDxWZWN0b3I8Q29udGVudEV4dGVuc2lvblJ1bGU+LCBzdGQ6OmVycm9y
X2NvZGU+IHBhcnNlUnVsZUxpc3QoY29uc3QgU3RyaW5nJiBydWxlSlNPTiwgY29uc3Qgc3RkOjpv
cHRpb25hbDxIYXNoU2V0PFN0cmluZz4+JiBhbGxvd2VkUmVkaXJlY3RVUkxTY2hlbWVzKQogewog
I2lmIENPTlRFTlRfRVhURU5TSU9OU19QRVJGT1JNQU5DRV9SRVBPUlRJTkcKICAgICBNb25vdG9u
aWNUaW1lIGxvYWRFeHRlbnNpb25TdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJz
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250
ZW50RXh0ZW5zaW9uUGFyc2VyLmgJKHJldmlzaW9uIDI4NTk1NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMzgsNyArMzgsMTIgQEAgbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKIAogY2xh
c3MgQ29udGVudEV4dGVuc2lvblJ1bGU7CiAKLVdFQkNPUkVfRVhQT1JUIEV4cGVjdGVkPFZlY3Rv
cjxDb250ZW50RXh0ZW5zaW9uUnVsZT4sIHN0ZDo6ZXJyb3JfY29kZT4gcGFyc2VSdWxlTGlzdChj
b25zdCBTdHJpbmcmLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGFsbG93ZWRSZWRpcmVjdFVSTFNj
aGVtZXMpOworLy8gQW4gYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcyBvZiBzdGQ6Om51bGxvcHQg
aW5kaWNhdGVzIHRoYXQgYWxsIFVSTCBzY2hlbWVzIGFyZSBhbGxvd2VkLgorLy8gVGhpcyBpcyB1
c2VkIHdoZW4gcmVjb21waWxpbmcgc291cmNlIGZyb20gb2xkZXIgdmVyc2lvbnMgb2YgV0tDb250
ZW50UnVsZUxpc3RzIG9uIGRpc2ssCisvLyB3aGVyZSB3ZSBkb24ndCBoYXZlIHRoZSBsaXN0IG9m
IGFsbG93ZWQgVVJMIHNjaGVtZXMgYnV0IGFzc3VtZSB0aGF0IGlmIGl0IGNvbXBpbGVkCisvLyBz
dWNjZXNzZnVsbHkgdGhlIGZpcnN0IHRpbWUgdGhlbiBhbGwgdGhlIHNjaGVtZXMgdXNlZCBtdXN0
IGhhdmUgYmVlbiBhbGxvd2VkLgorLy8gQW4gYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcyBvZiBh
biBlbXB0eSBIYXNoU2V0IGluZGljYXRlcyB0aGF0IG5vIGFjdGl2ZSBhY3Rpb25zIGFyZSBhbGxv
d2VkLgorV0VCQ09SRV9FWFBPUlQgRXhwZWN0ZWQ8VmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxl
Piwgc3RkOjplcnJvcl9jb2RlPiBwYXJzZVJ1bGVMaXN0KGNvbnN0IFN0cmluZyYsIGNvbnN0IHN0
ZDo6b3B0aW9uYWw8SGFzaFNldDxTdHJpbmc+PiYgYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcyk7
CiBXRUJDT1JFX0VYUE9SVCBib29sIGlzVmFsaWRDU1NTZWxlY3Rvcihjb25zdCBTdHJpbmcmKTsK
IAogfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNC
YWNrZW5kLmNwcAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjI4LDEwICsyMjgsMTIgQEAgQ29udGVudFJ1bGVMaXN0UmVzdWx0cyBDb250ZW50RXh0ZW5zaW9u
cwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0sIFsmXShjb25zdCBJZ25vcmVQcmV2
aW91c1J1bGVzQWN0aW9uJikgewogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgICAgICB9LCBbJl0gKGNvbnN0IE1vZGlmeUhlYWRlcnNBY3Rpb24m
KSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudAotICAgICAgICAgICAgfSwg
WyZdIChjb25zdCBSZWRpcmVjdEFjdGlvbiYpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTog
SW1wbGVtZW50CisgICAgICAgICAgICB9LCBbJl0gKGNvbnN0IE1vZGlmeUhlYWRlcnNBY3Rpb24m
IGFjdGlvbikgeworICAgICAgICAgICAgICAgIGlmIChpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIu
YWxsb3dzQWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc0ZvclVSTCh1cmwpKQorICAgICAgICAg
ICAgICAgICAgICByZXN1bHRzLnN1bW1hcnkubW9kaWZ5SGVhZGVyc0FjdGlvbnMuYXBwZW5kKGFj
dGlvbik7CisgICAgICAgICAgICB9LCBbJl0gKGNvbnN0IFJlZGlyZWN0QWN0aW9uJiBhY3Rpb24p
IHsKKyAgICAgICAgICAgICAgICBpZiAoaW5pdGlhdGluZ0RvY3VtZW50TG9hZGVyLmFsbG93c0Fj
dGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNGb3JVUkwodXJsKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0cy5zdW1tYXJ5LnJlZGlyZWN0QWN0aW9ucy5hcHBlbmQoYWN0aW9uKTsKICAgICAg
ICAgICAgIH0pLCBhY3Rpb24uZGF0YSgpKTsKICAgICAgICAgfQogCkBAIC0yOTIsOSArMjk0LDkg
QEAgQ29udGVudFJ1bGVMaXN0UmVzdWx0cyBDb250ZW50RXh0ZW5zaW9ucwogICAgICAgICAgICAg
fSwgWyZdKGNvbnN0IElnbm9yZVByZXZpb3VzUnVsZXNBY3Rpb24mKSB7CiAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIH0sIFsmXSAoY29u
c3QgTW9kaWZ5SGVhZGVyc0FjdGlvbiYpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSW1w
bGVtZW50CisgICAgICAgICAgICAgICAgLy8gV2UgY3VycmVudGx5IGhhdmUgbm90IGltcGxlbWVu
dGVkIGFjdGl2ZSBhY3Rpb25zIGZyb20gdGhlIG5ldHdvcmsgcHJvY2VzcyAoQ09SUyBwcmVmbGln
aHQpLgogICAgICAgICAgICAgfSwgWyZdIChjb25zdCBSZWRpcmVjdEFjdGlvbiYpIHsKLSAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50CisgICAgICAgICAgICAgICAgLy8gV2UgY3Vy
cmVudGx5IGhhdmUgbm90IGltcGxlbWVudGVkIGFjdGl2ZSBhY3Rpb25zIGZyb20gdGhlIG5ldHdv
cmsgcHJvY2VzcyAoQ09SUyBwcmVmbGlnaHQpLgogICAgICAgICAgICAgfSksIGFjdGlvbi5kYXRh
KCkpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzI1LDYgKzMyNywxMiBAQCB2b2lkIGFwcGx5UmVz
dWx0c1RvUmVxdWVzdChDb250ZW50UnVsZUxpCiAgICAgICAgIHJlcXVlc3Quc2V0VVJMKG5ld1VS
TCk7CiAgICAgfQogCisgICAgZm9yIChhdXRvJiBhY3Rpb24gOiByZXN1bHRzLnN1bW1hcnkubW9k
aWZ5SGVhZGVyc0FjdGlvbnMpCisgICAgICAgIGFjdGlvbi5hcHBseVRvUmVxdWVzdChyZXF1ZXN0
KTsKKworICAgIGZvciAoYXV0byYgYWN0aW9uIDogcmVzdWx0cy5zdW1tYXJ5LnJlZGlyZWN0QWN0
aW9ucykKKyAgICAgICAgYWN0aW9uLmFwcGx5VG9SZXF1ZXN0KHJlcXVlc3QpOworCiAgICAgaWYg
KHBhZ2UgJiYgcmVzdWx0cy5zaG91bGROb3RpZnlBcHBsaWNhdGlvbigpKSB7CiAgICAgICAgIHJl
c3VsdHMucmVzdWx0cy5yZW1vdmVBbGxNYXRjaGluZyhbXShjb25zdCBhdXRvJiBwYWlyKSB7CiAg
ICAgICAgICAgICByZXR1cm4gIXBhaXIuc2Vjb25kLnNob3VsZE5vdGlmeUFwcGxpY2F0aW9uKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50UnVsZUxpc3RS
ZXN1bHRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
Q29udGVudFJ1bGVMaXN0UmVzdWx0cy5oCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50UnVsZUxpc3RSZXN1bHRzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDYgKzI1LDkgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpZiBFTkFCTEUoQ09O
VEVOVF9FWFRFTlNJT05TKQorCisjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbkFjdGlvbnMuaCIK
ICNpbmNsdWRlIDx3dGYvS2V5VmFsdWVQYWlyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNTQsNiArNTcsOCBAQCBzdHJ1Y3Qg
Q29udGVudFJ1bGVMaXN0UmVzdWx0cyB7CiAgICAgICAgIGJvb2wgbWFkZUhUVFBTIHsgZmFsc2Ug
fTsKICAgICAgICAgYm9vbCBibG9ja2VkQ29va2llcyB7IGZhbHNlIH07CiAgICAgICAgIGJvb2wg
aGFzTm90aWZpY2F0aW9ucyB7IGZhbHNlIH07CisgICAgICAgIFZlY3RvcjxDb250ZW50RXh0ZW5z
aW9uczo6TW9kaWZ5SGVhZGVyc0FjdGlvbj4gbW9kaWZ5SGVhZGVyc0FjdGlvbnM7CisgICAgICAg
IFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6UmVkaXJlY3RBY3Rpb24+IHJlZGlyZWN0QWN0aW9u
czsKIAogICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVy
JikgY29uc3Q7CiAgICAgICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPFN1bW1hcnk+IGRlY29kZShEZWNvZGVyJik7CkBAIC0xNjgsNyArMTczLDExIEBAIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+IGF1dG8gQ29udGVudFJ1bGUKICAgICAgICAgV1RGTW92ZSgq
bWFkZUhUVFBTKSwKICAgICAgICAgV1RGTW92ZSgqYmxvY2tlZENvb2tpZXMpLAogICAgICAgICBX
VEZNb3ZlKCpoYXNOb3RpZmljYXRpb25zKSwKKyAgICAgICAgeyB9LCAvLyBtb2RpZnlIZWFkZXJz
QWN0aW9ucyBhbmQgcmVkaXJlY3RBY3Rpb25zIGhhdmUgbm8gbmVlZCB0byBiZSBzZXJpYWxpemVk
IHRvIGFub3RoZXIgcHJvY2Vzcy4KKyAgICAgICAgeyB9CiAgICAgfX07CiB9CiAKIH0KKworI2Vu
ZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcg
KzI2LDYgQEAKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ2FjaGVQb2xp
Y3kuaCIKICNpbmNsdWRlICJDYWNoZWRDU1NTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiQ29udGVu
dFJ1bGVMaXN0UmVzdWx0cy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgpAQCAtNDQsNiArNDMsNyBAQAogI2luY2x1
ZGUgPHd0Zi9SZWYuaD4KIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisjaW5jbHVk
ZSAiQ29udGVudFJ1bGVMaXN0UmVzdWx0cy5oIgogI2luY2x1ZGUgIlVzZXJDb250ZW50Q29udHJv
bGxlci5oIgogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9h
ZGVyLmNwcAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3Vt
ZW50TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsNiArOTQsNyBAQAogI2luY2x1ZGUg
IlN1YnJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgog
I2luY2x1ZGUgIlVzZXJDb250ZW50UHJvdmlkZXIuaCIKKyNpbmNsdWRlICJVc2VyQ29udGVudFVS
TFBhdHRlcm4uaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9D
b21wbGV0aW9uSGFuZGxlci5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAt
MTczLDcgKzE3NCwxMCBAQCBEb2N1bWVudExvYWRlcjo6RG9jdW1lbnRMb2FkZXIoY29uc3QgUmVz
CiAgICAgLCBtX29yaWdpbmFsU3Vic3RpdHV0ZURhdGFXYXNWYWxpZChzdWJzdGl0dXRlRGF0YS5p
c1ZhbGlkKCkpCiAgICAgLCBtX3N1YnN0aXR1dGVSZXNvdXJjZURlbGl2ZXJ5VGltZXIoKnRoaXMs
ICZEb2N1bWVudExvYWRlcjo6c3Vic3RpdHV0ZVJlc291cmNlRGVsaXZlcnlUaW1lckZpcmVkKQog
ICAgICwgbV9hcHBsaWNhdGlvbkNhY2hlSG9zdChtYWtlVW5pcXVlPEFwcGxpY2F0aW9uQ2FjaGVI
b3N0PigqdGhpcykpCisgICAgLCBtX2FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvblBhdHRlcm5z
KFZlY3RvcjxVc2VyQ29udGVudFVSTFBhdHRlcm4+KCkpCiB7CisgICAgLy8gRklYTUU6IFZlY3Rv
ciBkZWZhdWx0IGNvbnN0cnVjdG9yIHNob3VsZG4ndCBuZWVkIHRvIGtub3cgdGhlIHNpemUgb2Yg
dGhlIGVsZW1lbnRzLAorICAgIC8vIHNvIG1fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uUGF0
dGVybnMgb3VnaHQgdG8gYmUgYWJsZSB0byBiZSBpbml0aWFsaXplZCB3aXRoIGFuIGluaXRpYWxp
emVyIGxpc3QgaW4gdGhlIGhlYWRlciB3aXRob3V0IGluY2x1ZGluZyBVc2VyQ29udGVudFVSTFBh
dHRlcm4uaC4KIH0KIAogRnJhbWVMb2FkZXIqIERvY3VtZW50TG9hZGVyOjpmcmFtZUxvYWRlcigp
IGNvbnN0CkBAIC0yNDMzLDYgKzI0MzcsMzQgQEAgUmVzb3VyY2VFcnJvciBEb2N1bWVudExvYWRl
cjo6Y29udGVudEZpbAogfQogI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0ZJTFRFUklORykKIAor
dm9pZCBEb2N1bWVudExvYWRlcjo6c2V0QWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRl
cm5zKGNvbnN0IHN0ZDo6b3B0aW9uYWw8SGFzaFNldDxTdHJpbmc+PiYgcGF0dGVybnMpCit7Cisg
ICAgaWYgKCFwYXR0ZXJucykgeworICAgICAgICBtX2FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlv
blBhdHRlcm5zID0gc3RkOjpudWxsb3B0OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFZl
Y3RvcjxXZWJDb3JlOjpVc2VyQ29udGVudFVSTFBhdHRlcm4+IHBhdHRlcm5WZWN0b3I7CisgICAg
cGF0dGVyblZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBhdHRlcm5zLT5zaXplKCkpOwor
ICAgIGZvciAoYXV0byYgcGF0dGVyblN0cmluZyA6ICpwYXR0ZXJucykgeworICAgICAgICBXZWJD
b3JlOjpVc2VyQ29udGVudFVSTFBhdHRlcm4gcGFyc2VkUGF0dGVybihwYXR0ZXJuU3RyaW5nKTsK
KyAgICAgICAgaWYgKHBhcnNlZFBhdHRlcm4uaXNWYWxpZCgpKQorICAgICAgICAgICAgcGF0dGVy
blZlY3Rvci51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShwYXJzZWRQYXR0ZXJuKSk7CisgICAgfQor
CisgICAgbV9hY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25QYXR0ZXJucyA9IFdURk1vdmUocGF0
dGVyblZlY3Rvcik7Cit9CisKK2Jvb2wgRG9jdW1lbnRMb2FkZXI6OmFsbG93c0FjdGl2ZUNvbnRl
bnRSdWxlTGlzdEFjdGlvbnNGb3JVUkwoY29uc3QgVVJMJiB1cmwpIGNvbnN0Cit7CisgICAgaWYg
KCFtX2FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvblBhdHRlcm5zKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHBhdHRlcm4gOiAqbV9hY3RpdmVDb250ZW50UnVs
ZUxpc3RBY3Rpb25QYXR0ZXJucykgeworICAgICAgICBpZiAocGF0dGVybi5tYXRjaGVzKHVybCkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICN1bmRlZiBQQUdFX0lECkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNl
L1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYg
Kzg3LDcgQEAgY2xhc3MgU2hhcmVkQnVmZmVyOwogY2xhc3MgU1dDbGllbnRDb25uZWN0aW9uOwog
Y2xhc3MgU3VicmVzb3VyY2VMb2FkZXI7CiBjbGFzcyBTdWJzdGl0dXRlUmVzb3VyY2U7CitjbGFz
cyBVc2VyQ29udGVudFVSTFBhdHRlcm47CiAKIGVudW0gY2xhc3MgU2hvdWxkQ29udGludWU7CiAK
QEAgLTMwMSw2ICszMDIsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCB1c2VyQ29udGVudEV4dGVuc2lv
bnNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV91c2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVk
OyB9CiAgICAgdm9pZCBzZXRVc2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkKGJvb2wgZW5hYmxl
ZCkgeyBtX3VzZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQgPSBlbmFibGVkOyB9CiAKKyAgICBi
b29sIGFsbG93c0FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNGb3JVUkwoY29uc3QgVVJMJikg
Y29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRBY3RpdmVDb250ZW50UnVsZUxpc3RB
Y3Rpb25zUGF0dGVybnMoY29uc3Qgc3RkOjpvcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+Jik7CisK
ICNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQogICAgIERldmljZU9yaWVudGF0aW9uT3JN
b3Rpb25QZXJtaXNzaW9uU3RhdGUgZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NTdGF0
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NTdGF0
ZTsgfQogICAgIHZvaWQgc2V0RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NTdGF0ZShE
ZXZpY2VPcmllbnRhdGlvbk9yTW90aW9uUGVybWlzc2lvblN0YXRlIHN0YXRlKSB7IG1fZGV2aWNl
T3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NTdGF0ZSA9IHN0YXRlOyB9CkBAIC02NTEsNiArNjU1
LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faWRlbXBvdGVudE1vZGVBdXRvc2l6aW5nT25seUhv
bm9yc1BlcmNlbnRhZ2VzIHsgZmFsc2UgfTsKICAgICBTdHJpbmcgbV9jdXN0b21OYXZpZ2F0b3JQ
bGF0Zm9ybTsKICAgICBib29sIG1fdXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZCB7IHRydWUg
fTsKKyAgICBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxVc2VyQ29udGVudFVSTFBhdHRlcm4+PiBtX2Fj
dGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvblBhdHRlcm5zOwogI2lmIEVOQUJMRShERVZJQ0VfT1JJ
RU5UQVRJT04pCiAgICAgRGV2aWNlT3JpZW50YXRpb25Pck1vdGlvblBlcm1pc3Npb25TdGF0ZSBt
X2RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzU3RhdGUgeyBEZXZpY2VPcmllbnRhdGlv
bk9yTW90aW9uUGVybWlzc2lvblN0YXRlOjpQcm9tcHQgfTsKICNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJh
c2UuY3BwCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDEsNiArNjAx
LDE1IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0SFRUUEhlYWRlckYKICAgICBtX3Bs
YXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKIH0KIAordm9pZCBSZXNvdXJjZVJlcXVlc3RC
YXNlOjpyZW1vdmVIVFRQSGVhZGVyRmllbGQoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIHVw
ZGF0ZVJlc291cmNlUmVxdWVzdCgpOworCisgICAgbV9odHRwSGVhZGVyRmllbGRzLnJlbW92ZShu
YW1lKTsKKworICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOworfQorCiAjaWYg
VVNFKFNZU1RFTV9QUkVWSUVXKQogCiBib29sIFJlc291cmNlUmVxdWVzdEJhc2U6OmlzU3lzdGVt
UHJldmlldygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlUmVxdWVzdEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaAkocmV2aXNpb24gMjg1OTU0KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwNSw2ICsxMDUsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBhZGRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWUsIGNvbnN0IFN0cmluZyYgdmFs
dWUpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkSFRUUEhlYWRlckZpZWxkKGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBhZGRIVFRQSGVhZGVyRmllbGRJZk5vdFByZXNlbnQoSFRUUEhlYWRlck5hbWUsIGNvbnN0IFN0
cmluZyYpOworICAgIHZvaWQgcmVtb3ZlSFRUUEhlYWRlckZpZWxkKGNvbnN0IFN0cmluZyYgbmFt
ZSk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhhc0hUVFBIZWFkZXJGaWVsZChIVFRQSGVh
ZGVyTmFtZSkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDIx
LTExLTE3ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAg
ICAgICAgSW1wbGVtZW50IG1vc3Qgb2YgcmVkaXJlY3QgYW5kIG1vZGlmeS1oZWFkZXJzIGFjdGlv
biB0eXBlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjMzMjY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCisKKyAgICAgICAgKiBT
aGFyZWQvV2Vic2l0ZVBvbGljaWVzRGF0YS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVQ
b2xpY2llc0RhdGE6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVQb2xp
Y2llc0RhdGE6OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVQb2xpY2llc0RhdGE6
OmFwcGx5VG9Eb2N1bWVudExvYWRlcik6CisgICAgICAgICogU2hhcmVkL1dlYnNpdGVQb2xpY2ll
c0RhdGEuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3Jl
LmNwcDoKKyAgICAgICAgKEFQSTo6Q29udGVudFJ1bGVMaXN0U3RvcmU6Omxvb2t1cENvbnRlbnRS
dWxlTGlzdCk6CisgICAgICAgIChBUEk6OkNvbnRlbnRSdWxlTGlzdFN0b3JlOjpjb21waWxlQ29u
dGVudFJ1bGVMaXN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlz
dFN0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElXZWJzaXRlUG9saWNpZXMuY3Bw
OgorICAgICAgICAoQVBJOjpXZWJzaXRlUG9saWNpZXM6OmNvcHkgY29uc3QpOgorICAgICAgICAo
QVBJOjpXZWJzaXRlUG9saWNpZXM6OmRhdGEpOgorICAgICAgICAoQVBJOjpXZWJzaXRlUG9saWNp
ZXM6On5XZWJzaXRlUG9saWNpZXMpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
QVBJV2Vic2l0ZVBvbGljaWVzLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZVJlZi5jcHA6CisgICAgICAgIChXS1VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmVDb21waWxlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVu
dFJ1bGVMaXN0U3RvcmUubW06CisgICAgICAgICgtW1dLQ29udGVudFJ1bGVMaXN0U3RvcmUgY29t
cGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6ZW5jb2RlZENvbnRlbnRSdWxlTGlzdDpj
b21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50UnVsZUxpc3RTdG9yZSBf
Y29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6ZW5jb2RlZENvbnRlbnRSdWxlTGlz
dDphbGxvd2VkUmVkaXJlY3RTY2hlbWVzOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAo
LVtXS0NvbnRlbnRSdWxlTGlzdFN0b3JlIF9jb21waWxlQ29udGVudFJ1bGVMaXN0Rm9ySWRlbnRp
ZmllcjplbmNvZGVkQ29udGVudFJ1bGVMaXN0OmNvbXBsZXRpb25IYW5kbGVyOl0pOiBEZWxldGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3RTdG9yZVBy
aXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2VicGFnZVByZWZlcmVu
Y2VzLm1tOgorICAgICAgICAoLVtXS1dlYnBhZ2VQcmVmZXJlbmNlcyBfc2V0QWN0aXZlQ29udGVu
dFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5zOl0pOgorICAgICAgICAoLVtXS1dlYnBhZ2VQcmVmZXJl
bmNlcyBfYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5zXSk6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnBhZ2VQcmVmZXJlbmNlc1ByaXZhdGUuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW06
CisgICAgICAgICgtW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgY29tcGlsZUNvbnRlbnRF
eHRlbnNpb25Gb3JJZGVudGlmaWVyOmVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmNvbXBsZXRpb25I
YW5kbGVyOl0pOgorICAgICAgICAqIFdlYlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJTdHJhdGVn
eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkxvYWRlclN0cmF0ZWd5OjpyZW1vdmUpOgorICAg
ICAgICBGaXggYSByZWdyZXNzaW9uIGZyb20gaHR0cHM6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdl
c2V0LzI3NjE5My93ZWJraXQKKyAgICAgICAgV2hlbiBmZXRjaGluZyBhIHJlc291cmNlIHdpdGgg
YSBmb3JiaWRkZW4gcG9ydCBhbmQgYSBjdXN0b20gc2NoZW1lIGFuZCB7bW9kZToibm8tY29ycyJ9
LAorICAgICAgICBXZWJMb2FkZXJTdHJhdGVneTo6cmVtb3ZlIGlzIGNhbGxlZCB3aXRoIGEgcmVz
b3VyY2UgdGhhdCBkb2Vzbid0IGhhdmUgYW4gaWRlbnRpZmllci4KKyAgICAgICAgTXkgdGVzdCBo
aXQgdGhpcywgc28gSSBtb3ZlZCB0aGUgY2hlY2sgdG8gYmVmb3JlIHRoZSBpZGVudGlmaWVyIGlz
IHVzZWQuCisKIDIwMjEtMTEtMTcgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5j
b20+CiAKICAgICAgICAgTW9tZW50dW0gYW5pbWF0b3Igc29tZXRpbWVzIHN0YXJ0cyB0aGUgYW5p
bWF0aW9uIGF0IGEgdmVyeSBoaWdoIHZlbG9jaXR5CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJl
ZC9XZWJzaXRlUG9saWNpZXNEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1No
YXJlZC9XZWJzaXRlUG9saWNpZXNEYXRhLmNwcAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNl
L1dlYktpdC9TaGFyZWQvV2Vic2l0ZVBvbGljaWVzRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDYgKzM2LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiB2b2lkIFdlYnNpdGVQb2xpY2llc0Rh
dGE6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8
PCBjb250ZW50QmxvY2tlcnNFbmFibGVkOworICAgIGVuY29kZXIgPDwgYWN0aXZlQ29udGVudFJ1
bGVMaXN0QWN0aW9uc1BhdHRlcm5zOwogICAgIGVuY29kZXIgPDwgYXV0b3BsYXlQb2xpY3k7CiAj
aWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKICAgICBlbmNvZGVyIDw8IGRldmljZU9yaWVu
dGF0aW9uQW5kTW90aW9uQWNjZXNzU3RhdGU7CkBAIC02Miw3ICs2MywxMiBAQCBzdGQ6Om9wdGlv
bmFsPFdlYnNpdGVQb2xpY2llc0RhdGE+IFdlYnNpCiAgICAgZGVjb2RlciA+PiBjb250ZW50Qmxv
Y2tlcnNFbmFibGVkOwogICAgIGlmICghY29udGVudEJsb2NrZXJzRW5hYmxlZCkKICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAKKworICAgIHN0ZDo6b3B0aW9uYWw8c3RkOjpvcHRp
b25hbDxIYXNoU2V0PFN0cmluZz4+PiBhY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVy
bnM7CisgICAgZGVjb2RlciA+PiBhY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnM7
CisgICAgaWYgKCFhY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKICAgICBzdGQ6Om9wdGlvbmFsPFdlYnNpdGVBdXRvcGxh
eVBvbGljeT4gYXV0b3BsYXlQb2xpY3k7CiAgICAgZGVjb2RlciA+PiBhdXRvcGxheVBvbGljeTsK
ICAgICBpZiAoIWF1dG9wbGF5UG9saWN5KQpAQCAtMTQ3LDYgKzE1Myw3IEBAIHN0ZDo6b3B0aW9u
YWw8V2Vic2l0ZVBvbGljaWVzRGF0YT4gV2Vic2kKIAogICAgIHJldHVybiB7IHsKICAgICAgICAg
V1RGTW92ZSgqY29udGVudEJsb2NrZXJzRW5hYmxlZCksCisgICAgICAgIFdURk1vdmUoKmFjdGl2
ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNQYXR0ZXJucyksCiAgICAgICAgIFdURk1vdmUoKmFsbG93
ZWRBdXRvcGxheVF1aXJrcyksCiAgICAgICAgIFdURk1vdmUoKmF1dG9wbGF5UG9saWN5KSwKICNp
ZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQpAQCAtMTgzLDYgKzE5MCw4IEBAIHZvaWQgV2Vi
c2l0ZVBvbGljaWVzRGF0YTo6YXBwbHlUb0RvY3VtZW4KICAgICBpZiAoZG9jdW1lbnRMb2FkZXIu
dXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZCgpKQogICAgICAgICBkb2N1bWVudExvYWRlci5z
ZXRVc2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkKHdlYnNpdGVQb2xpY2llcy5jb250ZW50Qmxv
Y2tlcnNFbmFibGVkKTsKIAorICAgIGRvY3VtZW50TG9hZGVyLnNldEFjdGl2ZUNvbnRlbnRSdWxl
TGlzdEFjdGlvbnNQYXR0ZXJucyh3ZWJzaXRlUG9saWNpZXMuYWN0aXZlQ29udGVudFJ1bGVMaXN0
QWN0aW9uc1BhdHRlcm5zKTsKKwogICAgIE9wdGlvblNldDxXZWJDb3JlOjpBdXRvcGxheVF1aXJr
PiBxdWlya3M7CiAgICAgY29uc3QgYXV0byYgYWxsb3dlZFF1aXJrcyA9IHdlYnNpdGVQb2xpY2ll
cy5hbGxvd2VkQXV0b3BsYXlRdWlya3M7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJl
ZC9XZWJzaXRlUG9saWNpZXNEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFy
ZWQvV2Vic2l0ZVBvbGljaWVzRGF0YS5oCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlUG9saWNpZXNEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYg
KzUzLDcgQEAgc3RydWN0IFdlYnNpdGVQb2xpY2llc0RhdGEgewogICAgIHN0YXRpYyB2b2lkIGFw
cGx5VG9Eb2N1bWVudExvYWRlcihXZWJzaXRlUG9saWNpZXNEYXRhJiYsIFdlYkNvcmU6OkRvY3Vt
ZW50TG9hZGVyJik7CiAKICAgICBib29sIGNvbnRlbnRCbG9ja2Vyc0VuYWJsZWQgeyB0cnVlIH07
CisgICAgc3RkOjpvcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+IGFjdGl2ZUNvbnRlbnRSdWxlTGlz
dEFjdGlvbnNQYXR0ZXJucyB7IEhhc2hTZXQ8U3RyaW5nPigpIH07CiAgICAgT3B0aW9uU2V0PFdl
YnNpdGVBdXRvcGxheVF1aXJrPiBhbGxvd2VkQXV0b3BsYXlRdWlya3M7CiAgICAgV2Vic2l0ZUF1
dG9wbGF5UG9saWN5IGF1dG9wbGF5UG9saWN5IHsgV2Vic2l0ZUF1dG9wbGF5UG9saWN5OjpEZWZh
dWx0IH07CiAjaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTY4
MCwxMCArNTY4MCwxMiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6d2lsbFN1Ym1pdEZvcm0oRnJhbWVJ
CiAgICAgfSk7CiB9CiAKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogdm9pZCBXZWJQ
YWdlUHJveHk6OmNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbihVUkwmJiB1cmwsIENvbnRlbnRS
dWxlTGlzdFJlc3VsdHMmJiByZXN1bHRzKQogewogICAgIG1fbmF2aWdhdGlvbkNsaWVudC0+Y29u
dGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uKCp0aGlzLCBXVEZNb3ZlKHVybCksIFdURk1vdmUocmVz
dWx0cykpOwogfQorI2VuZGlmCiAgICAgCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkTmF2aWdhdGVX
aXRoTmF2aWdhdGlvbkRhdGEoY29uc3QgV2ViTmF2aWdhdGlvbkRhdGFTdG9yZSYgc3RvcmUsIEZy
YW1lSWRlbnRpZmllciBmcmFtZUlEKQogewpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmgJKHJldmlzaW9uIDI4NTk1NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTA4LDcgKzIxMDgsOSBAQCBwcml2
YXRlOgogCiAgICAgdm9pZCB3aWxsU3VibWl0Rm9ybShXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIs
IFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciBzb3VyY2VGcmFtZUlELCBjb25zdCBWZWN0b3I8c3Rk
OjpwYWlyPFN0cmluZywgU3RyaW5nPj4mIHRleHRGaWVsZFZhbHVlcywgRm9ybVN1Ym1pdExpc3Rl
bmVySWRlbnRpZmllciwgY29uc3QgVXNlckRhdGEmKTsKIAorI2lmIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCiAgICAgdm9pZCBjb250ZW50UnVsZUxpc3ROb3RpZmljYXRpb24oVVJMJiYsIFdl
YkNvcmU6OkNvbnRlbnRSdWxlTGlzdFJlc3VsdHMmJik7CisjZW5kaWYKIAogICAgIC8vIEhpc3Rv
cnkgY2xpZW50CiAgICAgdm9pZCBkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YShjb25zdCBX
ZWJOYXZpZ2F0aW9uRGF0YVN0b3JlJiwgV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4J
KHJldmlzaW9uIDI4NTk1NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNDY0LDcgKzQ2NCw5IEBAIG1lc3NhZ2Vz
IC0+IFdlYlBhZ2VQcm94eSB7CiAKICAgICBEaWRSZXNpZ25JbnB1dEVsZW1lbnRTdHJvbmdQYXNz
d29yZEFwcGVhcmFuY2UoV2ViS2l0OjpVc2VyRGF0YSB1c2VyRGF0YSkKIAorI2lmIEVOQUJMRShD
T05URU5UX0VYVEVOU0lPTlMpCiAgICAgQ29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uKFVSTCB1
cmwsIHN0cnVjdCBXZWJDb3JlOjpDb250ZW50UnVsZUxpc3RSZXN1bHRzIHJlc3VsdHMpCisjZW5k
aWYKIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICYmICFQTEFURk9STShJ
T1NfRkFNSUxZKQogICAgIEFkZFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KFdlYkNvcmU6OlBs
YXliYWNrVGFyZ2V0Q2xpZW50Q29udGV4dElkZW50aWZpZXIgY29udGV4dElkKQpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdEFjdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlz
dEFjdGlvbi5jcHAJKHJldmlzaW9uIDI4NTk1NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9BUElDb250ZW50UnVsZUxpc3RBY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2
ICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQVBJQ29udGVudFJ1bGVM
aXN0QWN0aW9uLmgiCiAKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCiBuYW1lc3Bh
Y2UgQVBJIHsKIAogUmVmPENvbnRlbnRSdWxlTGlzdEFjdGlvbj4gQ29udGVudFJ1bGVMaXN0QWN0
aW9uOjpjcmVhdGUoV2ViQ29yZTo6Q29udGVudFJ1bGVMaXN0UmVzdWx0czo6UmVzdWx0JiYgcmVz
dWx0KQpAQCAtNjEsMyArNjMsNSBAQCBjb25zdCBWZWN0b3I8V1RGOjpTdHJpbmc+JiBDb250ZW50
UnVsZUxpCiB9CiAKIH0gLy8gbmFtZXNwYWNlIEFQSQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRF
TlRfRVhURU5TSU9OUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElDb250
ZW50UnVsZUxpc3RBY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0QWN0aW9uLmgJKHJldmlzaW9uIDI4NTk1NCkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RBY3Rpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQCBuYW1lc3BhY2UgQVBJIHsKIAogY2xhc3MgQ29u
dGVudFJ1bGVMaXN0QWN0aW9uIGZpbmFsIDogcHVibGljIE9iamVjdEltcGw8T2JqZWN0OjpUeXBl
OjpDb250ZW50UnVsZUxpc3RBY3Rpb24+IHsKIHB1YmxpYzoKKyNpZiBFTkFCTEUoQ09OVEVOVF9F
WFRFTlNJT05TKQogICAgIHN0YXRpYyBSZWY8Q29udGVudFJ1bGVMaXN0QWN0aW9uPiBjcmVhdGUo
V2ViQ29yZTo6Q29udGVudFJ1bGVMaXN0UmVzdWx0czo6UmVzdWx0JiYpOwogICAgIHZpcnR1YWwg
fkNvbnRlbnRSdWxlTGlzdEFjdGlvbigpOwogCkBAIC00NSw2ICs0Niw3IEBAIHByaXZhdGU6CiAg
ICAgQ29udGVudFJ1bGVMaXN0QWN0aW9uKFdlYkNvcmU6OkNvbnRlbnRSdWxlTGlzdFJlc3VsdHM6
OlJlc3VsdCYmKTsKIAogICAgIFdlYkNvcmU6OkNvbnRlbnRSdWxlTGlzdFJlc3VsdHM6OlJlc3Vs
dCBtX3Jlc3VsdDsKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogfTsKICAg
ICAKIH0gLy8gbmFtZXNwYWNlIEFQSQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuY3BwCShyZXZpc2lvbiAyODU5
NTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3Rv
cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTEsNyArNDkxLDcgQEAgdm9pZCBDb250ZW50UnVs
ZUxpc3RTdG9yZTo6bG9va3VwQ29udGVudAogICAgICAgICBpZiAoY29udGVudFJ1bGVMaXN0LT5t
ZXRhRGF0YS52ZXJzaW9uICE9IENvbnRlbnRSdWxlTGlzdFN0b3JlOjpDdXJyZW50Q29udGVudFJ1
bGVMaXN0RmlsZVZlcnNpb24pIHsKICAgICAgICAgICAgIGlmIChhdXRvIHNvdXJjZUZyb21PbGRW
ZXJzaW9uID0gZ2V0Q29udGVudFJ1bGVMaXN0U291cmNlRnJvbU1hcHBlZEZpbGUoKmNvbnRlbnRS
dWxlTGlzdCk7ICFzb3VyY2VGcm9tT2xkVmVyc2lvbi5pc0VtcHR5KCkpIHsKICAgICAgICAgICAg
ICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHBy
b3RlY3RlZFRoaXMpLCBzb3VyY2VGcm9tT2xkVmVyc2lvbiA9IHNvdXJjZUZyb21PbGRWZXJzaW9u
Lmlzb2xhdGVkQ29weSgpLCBpZGVudGlmaWVyID0gaWRlbnRpZmllci5pc29sYXRlZENvcHkoKSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJs
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmNvbXBpbGVDb250ZW50UnVs
ZUxpc3QoaWRlbnRpZmllciwgV1RGTW92ZShzb3VyY2VGcm9tT2xkVmVyc2lvbiksIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+
Y29tcGlsZUNvbnRlbnRSdWxlTGlzdChpZGVudGlmaWVyLCBXVEZNb3ZlKHNvdXJjZUZyb21PbGRW
ZXJzaW9uKSwgc3RkOjpudWxsb3B0LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAg
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpA
QCAtNTMwLDEzICs1MzAsMTMgQEAgdm9pZCBDb250ZW50UnVsZUxpc3RTdG9yZTo6Z2V0QXZhaWxh
YmxlQwogICAgIH0pOwogfQogCi12b2lkIENvbnRlbnRSdWxlTGlzdFN0b3JlOjpjb21waWxlQ29u
dGVudFJ1bGVMaXN0KGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBXVEY6OlN0cmluZyYm
IGpzb24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmUHRyPEFQSTo6Q29udGVudFJ1bGVMaXN0
Piwgc3RkOjplcnJvcl9jb2RlKT4gY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIENvbnRlbnRSdWxl
TGlzdFN0b3JlOjpjb21waWxlQ29udGVudFJ1bGVMaXN0KGNvbnN0IFdURjo6U3RyaW5nJiBpZGVu
dGlmaWVyLCBXVEY6OlN0cmluZyYmIGpzb24sIHN0ZDo6b3B0aW9uYWw8SGFzaFNldDxXVEY6OlN0
cmluZz4+JiYgYWxsb3dlZFJlZGlyZWN0U2NoZW1lcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChS
ZWZQdHI8QVBJOjpDb250ZW50UnVsZUxpc3Q+LCBzdGQ6OmVycm9yX2NvZGUpPiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIEF0b21TdHJp
bmc6OmluaXQoKTsKICAgICBXZWJDb3JlOjpRdWFsaWZpZWROYW1lOjppbml0KCk7CiAgICAgCi0g
ICAgYXV0byBwYXJzZWRSdWxlcyA9IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpwYXJzZVJ1
bGVMaXN0KGpzb24sIHsgfSk7CisgICAgYXV0byBwYXJzZWRSdWxlcyA9IFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpwYXJzZVJ1bGVMaXN0KGpzb24sIFdURk1vdmUoYWxsb3dlZFJlZGlyZWN0
U2NoZW1lcykpOwogICAgIGlmICghcGFyc2VkUnVsZXMuaGFzX3ZhbHVlKCkpCiAgICAgICAgIHJl
dHVybiBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyLCBwYXJzZWRSdWxlcy5lcnJvcigpKTsKICAg
ICAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RT
dG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElDb250
ZW50UnVsZUxpc3RTdG9yZS5oCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjUsOCArMjUsNiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2lmIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCi0KICNpbmNsdWRlICJBUElPYmplY3QuaCIKICNpbmNsdWRlIDxzeXN0ZW1fZXJyb3I+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC01Miw3ICs1MCw4IEBAIHB1Ymxp
YzoKICAgICAgICAgQ29tcGlsZUZhaWxlZCwKICAgICAgICAgUmVtb3ZlRmFpbGVkCiAgICAgfTsK
LSAgICAKKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgLy8gVGhpcyBzaG91
bGQgYmUgaW5jcmVtZW50ZWQgZXZlcnkgdGltZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGlzIG1hZGUg
dG8gdGhlIGJ5dGVjb2RlLCBmaWxlIGZvcm1hdCwgZXRjLgogICAgIC8vIHRvIHByZXZlbnQgY3Jh
c2hpbmcgd2hpbGUgbG9hZGluZyBvbGQgZGF0YS4KICAgICAvLyBBbHNvIHVwZGF0ZSBDb250ZW50
UnVsZUxpc3RTdG9yZTo6Z2V0Q29udGVudFJ1bGVMaXN0U291cmNlIHRvIGJlIGFibGUgdG8gZmlu
ZCB0aGUgb3JpZ2luYWwgSlNPTgpAQCAtNjcsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGlj
aXQgQ29udGVudFJ1bGVMaXN0U3RvcmUoY29uc3QgV1RGOjpTdHJpbmcmIHN0b3JlUGF0aCk7CiAg
ICAgdmlydHVhbCB+Q29udGVudFJ1bGVMaXN0U3RvcmUoKTsKIAotICAgIHZvaWQgY29tcGlsZUNv
bnRlbnRSdWxlTGlzdChjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgV1RGOjpTdHJpbmcm
JiBqc29uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxBUEk6OkNvbnRlbnRSdWxlTGlz
dD4sIHN0ZDo6ZXJyb3JfY29kZSk+KTsKKyAgICB2b2lkIGNvbXBpbGVDb250ZW50UnVsZUxpc3Qo
Y29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIFdURjo6U3RyaW5nJiYganNvbiwgc3RkOjpv
cHRpb25hbDxIYXNoU2V0PFdURjo6U3RyaW5nPj4mJiBhbGxvd2VkUmVkaXJlY3RTY2hlbWVzLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxBUEk6OkNvbnRlbnRSdWxlTGlzdD4sIHN0ZDo6
ZXJyb3JfY29kZSk+KTsKICAgICB2b2lkIGxvb2t1cENvbnRlbnRSdWxlTGlzdChjb25zdCBXVEY6
OlN0cmluZyYgaWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZWZQdHI8QVBJOjpD
b250ZW50UnVsZUxpc3Q+LCBzdGQ6OmVycm9yX2NvZGUpPik7CiAgICAgdm9pZCByZW1vdmVDb250
ZW50UnVsZUxpc3QoY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoc3RkOjplcnJvcl9jb2RlKT4pOwogICAgIHZvaWQgZ2V0QXZhaWxhYmxlQ29udGVu
dFJ1bGVMaXN0SWRlbnRpZmllcnMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXVEY6OlZlY3RvcjxX
VEY6OlN0cmluZz4pPik7CkBAIC04NCw2ICs4Myw3IEBAIHByaXZhdGU6CiAgICAgUmVmPFdURjo6
Q29uY3VycmVudFdvcmtRdWV1ZT4gbV9jb21waWxlUXVldWU7CiAgICAgUmVmPFdURjo6V29ya1F1
ZXVlPiBtX3JlYWRRdWV1ZTsKICAgICBSZWY8V1RGOjpXb3JrUXVldWU+IG1fcmVtb3ZlUXVldWU7
CisjZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKIH07CiAKIGNvbnN0IHN0ZDo6
ZXJyb3JfY2F0ZWdvcnkmIGNvbnRlbnRSdWxlTGlzdFN0b3JlRXJyb3JDYXRlZ29yeSgpOwpAQCAt
OTgsNSArOTgsMyBAQCBpbmxpbmUgc3RkOjplcnJvcl9jb2RlIG1ha2VfZXJyb3JfY29kZShDCiBu
YW1lc3BhY2Ugc3RkIHsKIHRlbXBsYXRlPD4gc3RydWN0IGlzX2Vycm9yX2NvZGVfZW51bTxBUEk6
OkNvbnRlbnRSdWxlTGlzdFN0b3JlOjpFcnJvcj4gOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsKIH0K
LQotI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2Vic2l0ZVBvbGljaWVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2Vic2l0ZVBvbGljaWVzLmNwcAkocmV2aXNp
b24gMjg1OTU0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVQb2xp
Y2llcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAgUmVmPFdlYnNpdGVQb2xp
Y2llcz4gV2Vic2l0ZVBvbGljaWVzOjpjbwogewogICAgIGF1dG8gcG9saWNpZXMgPSBXZWJzaXRl
UG9saWNpZXM6OmNyZWF0ZSgpOwogICAgIHBvbGljaWVzLT5zZXRDb250ZW50QmxvY2tlcnNFbmFi
bGVkKG1fY29udGVudEJsb2NrZXJzRW5hYmxlZCk7CisgICAgcG9saWNpZXMtPm1fYWN0aXZlQ29u
dGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5zID0gbV9hY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rp
b25zUGF0dGVybnM7CiAgICAgcG9saWNpZXMtPnNldEFsbG93ZWRBdXRvcGxheVF1aXJrcyhtX2Fs
bG93ZWRBdXRvcGxheVF1aXJrcyk7CiAgICAgcG9saWNpZXMtPnNldEF1dG9wbGF5UG9saWN5KG1f
YXV0b3BsYXlQb2xpY3kpOwogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCkBAIC03OCw5
ICs3OSw3IEBAIFJlZjxXZWJzaXRlUG9saWNpZXM+IFdlYnNpdGVQb2xpY2llczo6Y28KICAgICBy
ZXR1cm4gcG9saWNpZXM7CiB9CiAKLVdlYnNpdGVQb2xpY2llczo6fldlYnNpdGVQb2xpY2llcygp
Ci17Ci19CitXZWJzaXRlUG9saWNpZXM6On5XZWJzaXRlUG9saWNpZXMoKSA9IGRlZmF1bHQ7CiAK
IHZvaWQgV2Vic2l0ZVBvbGljaWVzOjpzZXRXZWJzaXRlRGF0YVN0b3JlKFJlZlB0cjxXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU+JiYgd2Vic2l0ZURhdGFTdG9yZSkKIHsKQEAgLTEwNCw2ICsxMDMs
NyBAQCBXZWJLaXQ6OldlYnNpdGVQb2xpY2llc0RhdGEgV2Vic2l0ZVBvbGljCiAKICAgICByZXR1
cm4gewogICAgICAgICBjb250ZW50QmxvY2tlcnNFbmFibGVkKCksCisgICAgICAgIGFjdGl2ZUNv
bnRlbnRSdWxlTGlzdEFjdGlvbnNQYXR0ZXJucygpLAogICAgICAgICBhbGxvd2VkQXV0b3BsYXlR
dWlya3MoKSwKICAgICAgICAgYXV0b3BsYXlQb2xpY3koKSwKICNpZiBFTkFCTEUoREVWSUNFX09S
SUVOVEFUSU9OKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVQ
b2xpY2llcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElX
ZWJzaXRlUG9saWNpZXMuaAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSVdlYnNpdGVQb2xpY2llcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2
Myw5IEBAIHB1YmxpYzoKICAgICBib29sIGNvbnRlbnRCbG9ja2Vyc0VuYWJsZWQoKSBjb25zdCB7
IHJldHVybiBtX2NvbnRlbnRCbG9ja2Vyc0VuYWJsZWQ7IH0KICAgICB2b2lkIHNldENvbnRlbnRC
bG9ja2Vyc0VuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fY29udGVudEJsb2NrZXJzRW5hYmxlZCA9
IGVuYWJsZWQ7IH0KICAgICAKKyAgICB2b2lkIHNldEFjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlv
bnNQYXR0ZXJucyhzdGQ6Om9wdGlvbmFsPEhhc2hTZXQ8V1RGOjpTdHJpbmc+PiYmIHBhdHRlcm5z
KSB7IG1fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5zID0gV1RGTW92ZShwYXR0
ZXJucyk7IH0KKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEhhc2hTZXQ8V1RGOjpTdHJpbmc+PiYg
YWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5zKCkgY29uc3QgeyByZXR1cm4gbV9h
Y3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnM7IH0KKyAgICAKICAgICBPcHRpb25T
ZXQ8V2ViS2l0OjpXZWJzaXRlQXV0b3BsYXlRdWlyaz4gYWxsb3dlZEF1dG9wbGF5UXVpcmtzKCkg
Y29uc3QgeyByZXR1cm4gbV9hbGxvd2VkQXV0b3BsYXlRdWlya3M7IH0KICAgICB2b2lkIHNldEFs
bG93ZWRBdXRvcGxheVF1aXJrcyhPcHRpb25TZXQ8V2ViS2l0OjpXZWJzaXRlQXV0b3BsYXlRdWly
az4gcXVpcmtzKSB7IG1fYWxsb3dlZEF1dG9wbGF5UXVpcmtzID0gcXVpcmtzOyB9CiAgICAgCkBA
IC0xMzUsNyArMTM4LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SWRlbXBvdGVudE1vZGVBdXRv
c2l6aW5nT25seUhvbm9yc1BlcmNlbnRhZ2VzKGJvb2wgaWRlbXBvdGVudE1vZGVBdXRvc2l6aW5n
T25seUhvbm9yc1BlcmNlbnRhZ2VzKSB7IG1faWRlbXBvdGVudE1vZGVBdXRvc2l6aW5nT25seUhv
bm9yc1BlcmNlbnRhZ2VzID0gaWRlbXBvdGVudE1vZGVBdXRvc2l6aW5nT25seUhvbm9yc1BlcmNl
bnRhZ2VzOyB9CiAKIHByaXZhdGU6CisgICAgLy8gRklYTUU6IHJlcGxhY2UgbW9zdCBvciBhbGwg
b2YgdGhlc2UgbWVtYmVycyB3aXRoIGEgV2Vic2l0ZVBvbGljaWVzRGF0YS4KICAgICBib29sIG1f
Y29udGVudEJsb2NrZXJzRW5hYmxlZCB7IHRydWUgfTsKKyAgICBzdGQ6Om9wdGlvbmFsPEhhc2hT
ZXQ8V1RGOjpTdHJpbmc+PiBtX2FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNQYXR0ZXJucyB7
IEhhc2hTZXQ8V1RGOjpTdHJpbmc+KCkgfTsKICAgICBPcHRpb25TZXQ8V2ViS2l0OjpXZWJzaXRl
QXV0b3BsYXlRdWlyaz4gbV9hbGxvd2VkQXV0b3BsYXlRdWlya3M7CiAgICAgV2ViS2l0OjpXZWJz
aXRlQXV0b3BsYXlQb2xpY3kgbV9hdXRvcGxheVBvbGljeSB7IFdlYktpdDo6V2Vic2l0ZUF1dG9w
bGF5UG9saWN5OjpEZWZhdWx0IH07CiAjaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAkocmV2aXNpb24gMjg1
OTU0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjM3Miw2ICsyMzcyLDcgQEAgdm9pZCBXS1BhZ2VTZXRQYWdlTmF2aWdhdGlv
bkNsaWVudChXS1BhZwogICAgICAgICAgICAgbV9jbGllbnQuZGlkUmVtb3ZlTmF2aWdhdGlvbkdl
c3R1cmVTbmFwc2hvdCh0b0FQSSgmcGFnZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAg
ICAgICAgIH0KICAgICAgICAgCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAgICAg
ICAgdm9pZCBjb250ZW50UnVsZUxpc3ROb3RpZmljYXRpb24oV2ViUGFnZVByb3h5JiBwYWdlLCBV
UkwmJiB1cmwsIENvbnRlbnRSdWxlTGlzdFJlc3VsdHMmJiByZXN1bHRzKSBmaW5hbAogICAgICAg
ICB7CiAgICAgICAgICAgICBpZiAoIW1fY2xpZW50LmNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlv
bikKQEAgLTIzOTEsNiArMjM5Miw3IEBAIHZvaWQgV0tQYWdlU2V0UGFnZU5hdmlnYXRpb25DbGll
bnQoV0tQYWcKICAgICAgICAgICAgIGlmICghYXBpTm90aWZpY2F0aW9ucy5pc0VtcHR5KCkpCiAg
ICAgICAgICAgICAgICAgbV9jbGllbnQuY29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uKHRvQVBJ
KCZwYWdlKSwgdG9VUkxSZWYodXJsLnN0cmluZygpLmltcGwoKSksIHRvQVBJKEFQSTo6QXJyYXk6
OmNyZWF0ZShXVEZNb3ZlKGFwaUxpc3RJZGVudGlmaWVycykpLnB0cigpKSwgdG9BUEkoQVBJOjpB
cnJheTo6Y3JlYXRlKFdURk1vdmUoYXBpTm90aWZpY2F0aW9ucykpLnB0cigpKSwgbV9jbGllbnQu
YmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAgfQorI2VuZGlmCiAgICAgfTsKIAogICAgIFdlYlBh
Z2VQcm94eSogd2ViUGFnZVByb3h5ID0gdG9JbXBsKHBhZ2VSZWYpOwpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUmVmLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmVSZWYuY3BwCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVSZWYuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIHN0YXRpYyBpbmxpbmUgV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3IKIHZvaWQgV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlQ29tcGlsZShXS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVSZWYgc3RvcmUsIFdLU3RyaW5nUmVmIGlkZW50aWZpZXIs
IFdLU3RyaW5nUmVmIGpzb25Tb3VyY2UsIHZvaWQqIGNvbnRleHQsIFdLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZUZ1bmN0aW9uIGNhbGxiYWNrKQogewogI2lmIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCi0gICAgdG9JbXBsKHN0b3JlKS0+Y29tcGlsZUNvbnRlbnRSdWxlTGlzdCh0b1dURlN0
cmluZyhpZGVudGlmaWVyKSwgdG9XVEZTdHJpbmcoanNvblNvdXJjZSksIFtjb250ZXh0LCBjYWxs
YmFja10oUmVmUHRyPEFQSTo6Q29udGVudFJ1bGVMaXN0PiBjb250ZW50UnVsZUxpc3QsIHN0ZDo6
ZXJyb3JfY29kZSBlcnJvcikgeworICAgIHRvSW1wbChzdG9yZSktPmNvbXBpbGVDb250ZW50UnVs
ZUxpc3QodG9XVEZTdHJpbmcoaWRlbnRpZmllciksIHRvV1RGU3RyaW5nKGpzb25Tb3VyY2UpLCB7
IEhhc2hTZXQ8U3RyaW5nPigpIH0sIFtjb250ZXh0LCBjYWxsYmFja10oUmVmUHRyPEFQSTo6Q29u
dGVudFJ1bGVMaXN0PiBjb250ZW50UnVsZUxpc3QsIHN0ZDo6ZXJyb3JfY29kZSBlcnJvcikgewog
ICAgICAgICBjYWxsYmFjayhlcnJvciA/IG51bGxwdHIgOiB0b0FQSShjb250ZW50UnVsZUxpc3Qu
bGVha1JlZigpKSwgdG9SZXN1bHQoZXJyb3IpLCBjb250ZXh0KTsKICAgICB9KTsKICNlbHNlCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3Qu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29u
dGVudFJ1bGVMaXN0Lm1tCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTUw
LDcgKzUwLDExIEBAIC0gKEFQSTo6T2JqZWN0JilfYXBpT2JqZWN0CiAKIC0gKE5TU3RyaW5nICop
aWRlbnRpZmllcgogeworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgcmV0dXJu
IF9jb250ZW50UnVsZUxpc3QtPm5hbWUoKTsKKyNlbHNlCisgICAgcmV0dXJuIG5pbDsKKyNlbmRp
ZgogfQogCiBAZW5kCkBAIC01OSw3ICs2MywxMSBAQCAtIChOU1N0cmluZyAqKWlkZW50aWZpZXIK
IAogKyAoQk9PTClfc3VwcG9ydHNSZWd1bGFyRXhwcmVzc2lvbjooTlNTdHJpbmcgKilyZWdleAog
eworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgcmV0dXJuIEFQSTo6Q29udGVu
dFJ1bGVMaXN0OjpzdXBwb3J0c1JlZ3VsYXJFeHByZXNzaW9uKHJlZ2V4KTsKKyNlbHNlCisgICAg
cmV0dXJuIE5POworI2VuZGlmCiB9CiAKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlLm1t
CShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tDb250ZW50UnVsZUxpc3RTdG9yZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBA
QAogI2ltcG9ydCA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAjaW1wb3J0IDx3dGYvY29jb2Ev
VmVjdG9yQ29jb2EuaD4KIAorI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiBzdGF0aWMg
V0tFcnJvckNvZGUgdG9XS0Vycm9yQ29kZShjb25zdCBzdGQ6OmVycm9yX2NvZGUmIGVycm9yKQog
ewogICAgIEFTU0VSVChlcnJvci5jYXRlZ29yeSgpID09IEFQSTo6Y29udGVudFJ1bGVMaXN0U3Rv
cmVFcnJvckNhdGVnb3J5KCkpOwpAQCAtNTIsNiArNTMsNyBAQCBzdGF0aWMgV0tFcnJvckNvZGUg
dG9XS0Vycm9yQ29kZShjb25zdCBzCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0
dXJuIFdLRXJyb3JVbmtub3duOwogfQorI2VuZGlmCiAKIEBpbXBsZW1lbnRhdGlvbiBXS0NvbnRl
bnRSdWxlTGlzdFN0b3JlCiAKQEAgLTY3LDIxICs2OSwzMCBAQCAtICh2b2lkKWRlYWxsb2MKIAog
KyAoaW5zdGFuY2V0eXBlKWRlZmF1bHRTdG9yZQogeworI2lmIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCiAgICAgcmV0dXJuIHdyYXBwZXIoQVBJOjpDb250ZW50UnVsZUxpc3RTdG9yZTo6ZGVm
YXVsdFN0b3JlKCkpOworI2Vsc2UKKyAgICByZXR1cm4gbmlsOworI2VuZGlmCiB9CiAKICsgKGlu
c3RhbmNldHlwZSlzdG9yZVdpdGhVUkw6KE5TVVJMICopdXJsCiB7CisjaWYgRU5BQkxFKENPTlRF
TlRfRVhURU5TSU9OUykKICAgICByZXR1cm4gd3JhcHBlcihBUEk6OkNvbnRlbnRSdWxlTGlzdFN0
b3JlOjpzdG9yZVdpdGhQYXRoKHVybC5hYnNvbHV0ZVVSTC5maWxlU3lzdGVtUmVwcmVzZW50YXRp
b24pKTsKKyNlbHNlCisgICAgcmV0dXJuIG5pbDsKKyNlbmRpZgogfQogCiAtICh2b2lkKWNvbXBp
bGVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgZW5j
b2RlZENvbnRlbnRSdWxlTGlzdDooTlNTdHJpbmcgKillbmNvZGVkQ29udGVudFJ1bGVMaXN0IGNv
bXBsZXRpb25IYW5kbGVyOih2b2lkICheKShXS0NvbnRlbnRSdWxlTGlzdCAqLCBOU0Vycm9yICop
KWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgW3NlbGYgX2NvbXBpbGVDb250ZW50UnVsZUxpc3RG
b3JJZGVudGlmaWVyOmlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRSdWxlTGlzdDplbmNvZGVkQ29u
dGVudFJ1bGVMaXN0IGNvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKKyAgICBb
c2VsZiBfY29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6aWRlbnRpZmllciBlbmNv
ZGVkQ29udGVudFJ1bGVMaXN0OmVuY29kZWRDb250ZW50UnVsZUxpc3QgYWxsb3dlZFJlZGlyZWN0
U2NoZW1lczpuaWwgY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOwogfQogCiAt
ICh2b2lkKWxvb2tVcENvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRl
bnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoV0tDb250ZW50UnVsZUxpc3QgKiwg
TlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgogeworI2lmIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCiAgICAgX2NvbnRlbnRSdWxlTGlzdFN0b3JlLT5sb29rdXBDb250ZW50UnVsZUxpc3Qo
aWRlbnRpZmllciwgW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25I
YW5kbGVyKV0oUmVmUHRyPEFQSTo6Q29udGVudFJ1bGVMaXN0PiBjb250ZW50UnVsZUxpc3QsIHN0
ZDo6ZXJyb3JfY29kZSBlcnJvcikgewogICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAg
IGF1dG8gdXNlckluZm8gPSBAe05TSGVscEFuY2hvckVycm9yS2V5OiBbTlNTdHJpbmcgc3RyaW5n
V2l0aEZvcm1hdDpAIlJ1bGUgbGlzdCBsb29rdXAgZmFpbGVkOiAlcyIsIGVycm9yLm1lc3NhZ2Uo
KS5jX3N0cigpXX07CkBAIC05MiwxNyArMTAzLDIxIEBAIC0gKHZvaWQpbG9va1VwQ29udGVudFJ1
bGVMaXN0Rm9ySWRlbnRpZmkKIAogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih3cmFwcGVyKCpj
b250ZW50UnVsZUxpc3QpLCBuaWwpOwogICAgIH0pOworI2VuZGlmCiB9CiAKIC0gKHZvaWQpZ2V0
QXZhaWxhYmxlQ29udGVudFJ1bGVMaXN0SWRlbnRpZmllcnM6KHZvaWQgKF4pKE5TQXJyYXk8TlNT
dHJpbmcgKj4qKSljb21wbGV0aW9uSGFuZGxlcgogeworI2lmIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCiAgICAgX2NvbnRlbnRSdWxlTGlzdFN0b3JlLT5nZXRBdmFpbGFibGVDb250ZW50UnVs
ZUxpc3RJZGVudGlmaWVycyhbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxl
dGlvbkhhbmRsZXIpXShWZWN0b3I8U3RyaW5nPiBpZGVudGlmaWVycykgewogICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihjcmVhdGVOU0FycmF5KGlkZW50aWZpZXJzKS5nZXQoKSk7CiAgICAgfSk7
CisjZW5kaWYKIH0KIAogLSAodm9pZClyZW1vdmVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVy
OihOU1N0cmluZyAqKWlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TRXJy
b3IgKikpY29tcGxldGlvbkhhbmRsZXIKIHsKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05T
KQogICAgIF9jb250ZW50UnVsZUxpc3RTdG9yZS0+cmVtb3ZlQ29udGVudFJ1bGVMaXN0KGlkZW50
aWZpZXIsIFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxl
cildKHN0ZDo6ZXJyb3JfY29kZSBlcnJvcikgewogICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAg
ICAgICAgIGF1dG8gdXNlckluZm8gPSBAe05TSGVscEFuY2hvckVycm9yS2V5OiBbTlNTdHJpbmcg
c3RyaW5nV2l0aEZvcm1hdDpAIlJ1bGUgbGlzdCByZW1vdmFsIGZhaWxlZDogJXMiLCBlcnJvci5t
ZXNzYWdlKCkuY19zdHIoKV19OwpAQCAtMTEyLDYgKzEyNyw3IEBAIC0gKHZvaWQpcmVtb3ZlQ29u
dGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmkKIAogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihuaWwp
OwogICAgIH0pOworI2VuZGlmCiB9CiAKICNwcmFnbWEgbWFyayBXS09iamVjdCBwcm90b2NvbCBp
bXBsZW1lbnRhdGlvbgpAQCAtMTI5LDE2ICsxNDUsMjEgQEAgLSAoQVBJOjpPYmplY3QmKV9hcGlP
YmplY3QKIAogLSAodm9pZClfcmVtb3ZlQWxsQ29udGVudFJ1bGVMaXN0cwogeworI2lmIEVOQUJM
RShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgX2NvbnRlbnRSdWxlTGlzdFN0b3JlLT5zeW5jaHJv
bm91c1JlbW92ZUFsbENvbnRlbnRSdWxlTGlzdHMoKTsKKyNlbmRpZgogfQogCiAtICh2b2lkKV9p
bnZhbGlkYXRlQ29udGVudFJ1bGVMaXN0VmVyc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICop
aWRlbnRpZmllcgogeworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgX2NvbnRl
bnRSdWxlTGlzdFN0b3JlLT5pbnZhbGlkYXRlQ29udGVudFJ1bGVMaXN0VmVyc2lvbihpZGVudGlm
aWVyKTsKKyNlbmRpZgogfQogCiAtICh2b2lkKV9nZXRDb250ZW50UnVsZUxpc3RTb3VyY2VGb3JJ
ZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQg
KF4pKE5TU3RyaW5nKikpY29tcGxldGlvbkhhbmRsZXIKIHsKKyNpZiBFTkFCTEUoQ09OVEVOVF9F
WFRFTlNJT05TKQogICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW2NvbXBsZXRpb25IYW5kbGVy
IGNvcHldKTsKICAgICBfY29udGVudFJ1bGVMaXN0U3RvcmUtPmdldENvbnRlbnRSdWxlTGlzdFNv
dXJjZShpZGVudGlmaWVyLCBbaGFuZGxlcl0oU3RyaW5nIHNvdXJjZSkgewogICAgICAgICBhdXRv
IHJhd0hhbmRsZXIgPSAodm9pZCAoXikoTlNTdHJpbmcgKikpaGFuZGxlci5nZXQoKTsKQEAgLTE0
NywxMSArMTY4LDE2IEBAIC0gKHZvaWQpX2dldENvbnRlbnRSdWxlTGlzdFNvdXJjZUZvcklkZW4K
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmF3SGFuZGxlcihzb3VyY2UpOwogICAgIH0pOwor
I2VuZGlmCiB9CiAKLS0gKHZvaWQpX2NvbXBpbGVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVy
OihOU1N0cmluZyAqKWlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRSdWxlTGlzdDooTlNTdHJpbmcg
KikgZW5jb2RlZENvbnRlbnRSdWxlTGlzdCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoV0tD
b250ZW50UnVsZUxpc3QgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgorLSAodm9pZClf
Y29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmll
ciBlbmNvZGVkQ29udGVudFJ1bGVMaXN0OihOU1N0cmluZyAqKWVuY29kZWRDb250ZW50UnVsZUxp
c3QgYWxsb3dlZFJlZGlyZWN0U2NoZW1lczooTlNTZXQ8TlNTdHJpbmcgKj4gKilzY2hlbWVzIGNv
bXBsZXRpb25IYW5kbGVyOih2b2lkICheKShXS0NvbnRlbnRSdWxlTGlzdCAqLCBOU0Vycm9yICop
KWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgX2NvbnRlbnRSdWxlTGlzdFN0b3JlLT5jb21waWxl
Q29udGVudFJ1bGVMaXN0KGlkZW50aWZpZXIsIGVuY29kZWRDb250ZW50UnVsZUxpc3QsIFtjb21w
bGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildKFJlZlB0cjxB
UEk6OkNvbnRlbnRSdWxlTGlzdD4gY29udGVudFJ1bGVMaXN0LCBzdGQ6OmVycm9yX2NvZGUgZXJy
b3IpIHsKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorICAgIEhhc2hTZXQ8U3RyaW5n
PiBhbGxvd2VkUmVkaXJlY3RTY2hlbWVzOworICAgIGZvciAoTlNTdHJpbmcgKnNjaGVtZSBpbiBz
Y2hlbWVzKQorICAgICAgICBhbGxvd2VkUmVkaXJlY3RTY2hlbWVzLmFkZChzY2hlbWUpOworICAg
IF9jb250ZW50UnVsZUxpc3RTdG9yZS0+Y29tcGlsZUNvbnRlbnRSdWxlTGlzdChpZGVudGlmaWVy
LCBlbmNvZGVkQ29udGVudFJ1bGVMaXN0LCBXVEZNb3ZlKGFsbG93ZWRSZWRpcmVjdFNjaGVtZXMp
LCBbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXShS
ZWZQdHI8QVBJOjpDb250ZW50UnVsZUxpc3Q+IGNvbnRlbnRSdWxlTGlzdCwgc3RkOjplcnJvcl9j
b2RlIGVycm9yKSB7CiAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgYXV0byB1c2Vy
SW5mbyA9IEB7TlNIZWxwQW5jaG9yRXJyb3JLZXk6IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0
OkAiUnVsZSBsaXN0IGNvbXBpbGF0aW9uIGZhaWxlZDogJXMiLCBlcnJvci5tZXNzYWdlKCkuY19z
dHIoKV19OwogCkBAIC0xNjEsMTYgKzE4NywyNSBAQCAtICh2b2lkKV9jb21waWxlQ29udGVudFJ1
bGVMaXN0Rm9ySWRlbnRpCiAgICAgICAgIH0KICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod3Jh
cHBlcigqY29udGVudFJ1bGVMaXN0KSwgbmlsKTsKICAgICB9KTsKKyNlbmRpZgogfQogCiArIChp
bnN0YW5jZXR5cGUpZGVmYXVsdFN0b3JlV2l0aExlZ2FjeUZpbGVuYW1lCiB7CisjaWYgRU5BQkxF
KENPTlRFTlRfRVhURU5TSU9OUykKICAgICByZXR1cm4gd3JhcHBlcihBUEk6OkNvbnRlbnRSdWxl
TGlzdFN0b3JlOjpkZWZhdWx0U3RvcmUoKSk7CisjZWxzZQorICAgIHJldHVybiBuaWw7CisjZW5k
aWYKIH0KIAogKyAoaW5zdGFuY2V0eXBlKXN0b3JlV2l0aFVSTEFuZExlZ2FjeUZpbGVuYW1lOihO
U1VSTCAqKXVybAogeworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgcmV0dXJu
IHdyYXBwZXIoQVBJOjpDb250ZW50UnVsZUxpc3RTdG9yZTo6c3RvcmVXaXRoUGF0aCh1cmwuYWJz
b2x1dGVVUkwuZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKSk7CisjZWxzZQorICAgIHJldHVybiBu
aWw7CisjZW5kaWYKIH0KIAogLSAodm9pZCljb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50
aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjooTlNT
dHJpbmcgKillbmNvZGVkQ29udGVudEV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAo
XikoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgpJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudFJ1bGVMaXN0
U3RvcmVQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLQ29udGVudFJ1bGVMaXN0U3RvcmVQcml2YXRlLmgJKHJldmlzaW9uIDI4NTk1NCkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0
b3JlUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAtICh2b2lkKV9p
bnZhbGlkYXRlQ29udGVudFJ1bGVMaXN0VmVyc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICop
aWRlbnRpZmllcjsKIC0gKHZvaWQpX2dldENvbnRlbnRSdWxlTGlzdFNvdXJjZUZvcklkZW50aWZp
ZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNT
dHJpbmcgKikpY29tcGxldGlvbkhhbmRsZXI7CiAKLS0gKHZvaWQpX2NvbXBpbGVDb250ZW50UnVs
ZUxpc3RGb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRS
dWxlTGlzdDooTlNTdHJpbmcgKikgZW5jb2RlZENvbnRlbnRSdWxlTGlzdCBjb21wbGV0aW9uSGFu
ZGxlcjoodm9pZCAoXikoV0tDb250ZW50UnVsZUxpc3QgKiwgTlNFcnJvciAqKSljb21wbGV0aW9u
SGFuZGxlcjsKKy0gKHZvaWQpX2NvbXBpbGVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOihO
U1N0cmluZyAqKWlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRSdWxlTGlzdDooTlNTdHJpbmcgKill
bmNvZGVkQ29udGVudFJ1bGVMaXN0IGFsbG93ZWRSZWRpcmVjdFNjaGVtZXM6KE5TU2V0PE5TU3Ry
aW5nICo+ICopc2NoZW1lcyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoV0tDb250ZW50UnVs
ZUxpc3QgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcjsKIAogLy8gRklYTUU6IFJlbW92
ZSBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLgogKyAoaW5zdGFuY2V0eXBlKWRlZmF1bHRT
dG9yZVdpdGhMZWdhY3lGaWxlbmFtZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAt
Mjc2Niw3ICsyNzY2LDExIEBAICsgKEJPT0wpX2hhbmRsZXNTYWZlQnJvd3NpbmcKIAogKyAoQk9P
TClfd2lsbFVwZ3JhZGVUb0hUVFBTOihOU1VSTCAqKXVybAogeworI2lmIEVOQUJMRShDT05URU5U
X0VYVEVOU0lPTlMpCiAgICAgcmV0dXJuIFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb250
ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OnNob3VsZEJlTWFkZVNlY3VyZSh1cmwpOworI2Vsc2UKKyAg
ICByZXR1cm4gTk87CisjZW5kaWYKIH0KIAogLSAodm9pZClfc2hvd1NhZmVCcm93c2luZ1dhcm5p
bmdXaXRoVGl0bGU6KE5TU3RyaW5nICopdGl0bGUgd2FybmluZzooTlNTdHJpbmcgKil3YXJuaW5n
IGRldGFpbHM6KE5TQXR0cmlidXRlZFN0cmluZyAqKWRldGFpbHMgY29tcGxldGlvbkhhbmRsZXI6
KHZvaWQoXikoQk9PTCkpY29tcGxldGlvbkhhbmRsZXIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYnBhZ2VQcmVmZXJlbmNlcy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJwYWdlUHJlZmVyZW5jZXMubW0J
KHJldmlzaW9uIDI4NTk1NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYnBhZ2VQcmVmZXJlbmNlcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTQxLDYgKzE0MSwzMiBA
QCAtIChCT09MKV9jb250ZW50QmxvY2tlcnNFbmFibGVkCiAgICAgcmV0dXJuIF93ZWJzaXRlUG9s
aWNpZXMtPmNvbnRlbnRCbG9ja2Vyc0VuYWJsZWQoKTsKIH0KIAorLSAodm9pZClfc2V0QWN0aXZl
Q29udGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5zOihOU1NldDxOU1N0cmluZyAqPiAqKXBhdHRl
cm5zCit7CisgICAgaWYgKCFwYXR0ZXJucykgeworICAgICAgICBfd2Vic2l0ZVBvbGljaWVzLT5z
ZXRBY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMoc3RkOjpudWxsb3B0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEhhc2hTZXQ8U3RyaW5nPiBwYXR0ZXJuSGFzaFNl
dDsKKyAgICBwYXR0ZXJuSGFzaFNldC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBhdHRlcm5zLmNv
dW50KTsKKyAgICBmb3IgKE5TU3RyaW5nICpwYXR0ZXJuIGluIHBhdHRlcm5zKQorICAgICAgICBw
YXR0ZXJuSGFzaFNldC5hZGQocGF0dGVybik7CisgICAgX3dlYnNpdGVQb2xpY2llcy0+c2V0QWN0
aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5zKFdURk1vdmUocGF0dGVybkhhc2hTZXQp
KTsKK30KKworLSAoTlNTZXQ8TlNTdHJpbmcgKj4gKilfYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0
aW9uc1BhdHRlcm5zCit7CisgICAgY29uc3QgYXV0byYgcGF0dGVybnMgPSBfd2Vic2l0ZVBvbGlj
aWVzLT5hY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMoKTsKKyAgICBpZiAoIXBh
dHRlcm5zKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgTlNNdXRhYmxlU2V0PE5TU3RyaW5n
ICo+ICpzZXQgPSBbTlNNdXRhYmxlU2V0IHNldF07CisgICAgZm9yIChjb25zdCBhdXRvJiBwYXR0
ZXJuIDogKnBhdHRlcm5zKQorICAgICAgICBbc2V0IGFkZE9iamVjdDpwYXR0ZXJuXTsKKyAgICBy
ZXR1cm4gc2V0OworfQorCiAtICh2b2lkKV9zZXRBbGxvd2VkQXV0b3BsYXlRdWlya3M6KF9XS1dl
YnNpdGVBdXRvcGxheVF1aXJrKWFsbG93ZWRRdWlya3MKIHsKICAgICBPcHRpb25TZXQ8V2ViS2l0
OjpXZWJzaXRlQXV0b3BsYXlRdWlyaz4gcXVpcmtzOwpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2VicGFnZVByZWZlcmVuY2VzUHJpdmF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnBhZ2VQcmVmZXJlbmNl
c1ByaXZhdGUuaAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2VicGFnZVByZWZlcmVuY2VzUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC02OSw2ICs2OSw3IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tXZWJzaXQK
IEBpbnRlcmZhY2UgV0tXZWJwYWdlUHJlZmVyZW5jZXMgKFdLUHJpdmF0ZSkKIAogQHByb3BlcnR5
IChub25hdG9taWMsIHNldHRlcj1fc2V0Q29udGVudEJsb2NrZXJzRW5hYmxlZDopIEJPT0wgX2Nv
bnRlbnRCbG9ja2Vyc0VuYWJsZWQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgc2V0dGVy
PV9zZXRBY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnM6KSBOU1NldDxOU1N0cmlu
ZyAqPiAqX2FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNQYXR0ZXJuczsKIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBzZXR0ZXI9X3NldEFsbG93ZWRBdXRvcGxheVF1aXJrczopIF9XS1dlYnNpdGVB
dXRvcGxheVF1aXJrIF9hbGxvd2VkQXV0b3BsYXlRdWlya3M7CiBAcHJvcGVydHkgKG5vbmF0b21p
Yywgc2V0dGVyPV9zZXRBdXRvcGxheVBvbGljeTopIF9XS1dlYnNpdGVBdXRvcGxheVBvbGljeSBf
YXV0b3BsYXlQb2xpY3k7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgc2V0dGVyPV9zZXRD
dXN0b21IZWFkZXJGaWVsZHM6KSBOU0FycmF5PF9XS0N1c3RvbUhlYWRlckZpZWxkcyAqPiAqX2N1
c3RvbUhlYWRlckZpZWxkczsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9fV0tDb250ZW50UnVsZUxpc3RBY3Rpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0NvbnRlbnRSdWxlTGlzdEFjdGlvbi5tbQkocmV2aXNp
b24gMjg1OTU0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0NvbnRl
bnRSdWxlTGlzdEFjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNDMsMjUgKzQzLDQxIEBAIC0g
KHZvaWQpZGVhbGxvYwogCiAtIChCT09MKWJsb2NrZWRMb2FkCiB7CisjaWYgRU5BQkxFKENPTlRF
TlRfRVhURU5TSU9OUykKICAgICByZXR1cm4gX2FjdGlvbi0+YmxvY2tlZExvYWQoKTsKKyNlbHNl
CisgICAgcmV0dXJuIE5POworI2VuZGlmCiB9CiAKIC0gKEJPT0wpYmxvY2tlZENvb2tpZXMKIHsK
KyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAgIHJldHVybiBfYWN0aW9uLT5ibG9j
a2VkQ29va2llcygpOworI2Vsc2UKKyAgICByZXR1cm4gTk87CisjZW5kaWYKIH0KIAogLSAoQk9P
TCltYWRlSFRUUFMKIHsKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAgIHJldHVy
biBfYWN0aW9uLT5tYWRlSFRUUFMoKTsKKyNlbHNlCisgICAgcmV0dXJuIE5POworI2VuZGlmCiB9
CiAKIC0gKE5TQXJyYXk8TlNTdHJpbmcgKj4gKilub3RpZmljYXRpb25zCiB7CisjaWYgRU5BQkxF
KENPTlRFTlRfRVhURU5TSU9OUykKICAgICBhdXRvJiB2ZWN0b3IgPSBfYWN0aW9uLT5ub3RpZmlj
YXRpb25zKCk7CiAgICAgaWYgKHZlY3Rvci5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBuaWw7
CiAgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkodmVjdG9yKS5hdXRvcmVsZWFzZSgpOworI2Vsc2UK
KyAgICByZXR1cm4gbmlsOworI2VuZGlmCiB9CiAKIC0gKEFQSTo6T2JqZWN0JilfYXBpT2JqZWN0
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQkocmV2aXNpb24gMjg1OTU0
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAgKyAoaW5zdGFu
Y2V0eXBlKXN0b3JlV2l0aFVSTDooTlNVUkwgKil1cgogCiAtICh2b2lkKWNvbXBpbGVDb250ZW50
RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGVuY29kZWRDb250
ZW50RXh0ZW5zaW9uOihOU1N0cmluZyAqKWVuY29kZWRDb250ZW50UnVsZUxpc3QgY29tcGxldGlv
bkhhbmRsZXI6KHZvaWQgKF4pKF9XS1VzZXJDb250ZW50RmlsdGVyICosIE5TRXJyb3IgKikpY29t
cGxldGlvbkhhbmRsZXIKIHsKLSAgICBbX2NvbnRlbnRSdWxlTGlzdFN0b3JlIF9jb21waWxlQ29u
dGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmllcjppZGVudGlmaWVyIGVuY29kZWRDb250ZW50UnVsZUxp
c3Q6ZW5jb2RlZENvbnRlbnRSdWxlTGlzdCBjb21wbGV0aW9uSGFuZGxlcjpeKFdLQ29udGVudFJ1
bGVMaXN0ICpjb250ZW50UnVsZUxpc3QsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgW19jb250ZW50
UnVsZUxpc3RTdG9yZSBjb21waWxlQ29udGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmllcjppZGVudGlm
aWVyIGVuY29kZWRDb250ZW50UnVsZUxpc3Q6ZW5jb2RlZENvbnRlbnRSdWxlTGlzdCBjb21wbGV0
aW9uSGFuZGxlcjpeKFdLQ29udGVudFJ1bGVMaXN0ICpjb250ZW50UnVsZUxpc3QsIE5TRXJyb3Ig
KmVycm9yKSB7CiAgICAgICAgIGF1dG8gY29udGVudEZpbHRlciA9IGNvbnRlbnRSdWxlTGlzdCA/
IGFkb3B0TlMoW1tfV0tVc2VyQ29udGVudEZpbHRlciBhbGxvY10gX2luaXRXaXRoV0tDb250ZW50
UnVsZUxpc3Q6Y29udGVudFJ1bGVMaXN0XSkgOiBuaWw7CiAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKGNvbnRlbnRGaWx0ZXIuZ2V0KCksIHRvVXNlckNvbnRlbnRSdWxlTGlzdFN0b3JlRXJyb3Io
ZXJyb3IpKTsKICAgICB9XTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05h
dmlnYXRpb25TdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL05hdmlnYXRpb25TdGF0ZS5oCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQz
LDcgKzE0Myw5IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICAgICAgYm9vbCB3aWxsR29Ub0JhY2tG
b3J3YXJkTGlzdEl0ZW0oV2ViUGFnZVByb3h5JiwgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYsIGJv
b2wgaW5CYWNrRm9yd2FyZENhY2hlKSBmaW5hbDsKIAorI2lmIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCiAgICAgICAgIHZvaWQgY29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uKFdlYlBhZ2VQ
cm94eSYsIFVSTCYmLCBXZWJDb3JlOjpDb250ZW50UnVsZUxpc3RSZXN1bHRzJiYpIGZpbmFsOwor
I2VuZGlmCiAgICAgICAgIHZvaWQgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihXZWJQ
YWdlUHJveHkmLCBSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmLCBSZWY8V2ViRnJhbWVQb2xp
Y3lMaXN0ZW5lclByb3h5PiYmLCBBUEk6Ok9iamVjdCogdXNlckRhdGEpIG92ZXJyaWRlOwogICAg
ICAgICB2b2lkIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNwb25zZShXZWJQYWdlUHJveHkm
LCBSZWY8QVBJOjpOYXZpZ2F0aW9uUmVzcG9uc2U+JiYsIFJlZjxXZWJGcmFtZVBvbGljeUxpc3Rl
bmVyUHJveHk+JiYsIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0JKHJl
dmlzaW9uIDI4NTk1NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRp
b25TdGF0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNTg3LDYgKzU4Nyw3IEBAIHZvaWQgTmF2aWdh
dGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjoKICAgICB9CiB9CiAKKyNpZiBFTkFCTEUoQ09O
VEVOVF9FWFRFTlNJT05TKQogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6
OmNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbihXZWJQYWdlUHJveHkmLCBVUkwmJiB1cmwsIENv
bnRlbnRSdWxlTGlzdFJlc3VsdHMmJiByZXN1bHRzKQogewogICAgIGlmICghbV9uYXZpZ2F0aW9u
U3RhdGUpCkBAIC02MjQsNiArNjI1LDcgQEAgdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRp
b25DbGllbnQ6OgogICAgICAgICAgICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRl
PiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmll
dyBjb250ZW50UnVsZUxpc3RXaXRoSWRlbnRpZmllcjpwYWlyLmZpcnN0IHBlcmZvcm1lZEFjdGlv
bjp3cmFwcGVyKEFQSTo6Q29udGVudFJ1bGVMaXN0QWN0aW9uOjpjcmVhdGUoV1RGTW92ZShwYWly
LnNlY29uZCkpLmdldCgpKSBmb3JVUkw6dXJsXTsKICAgICB9CiB9CisjZW5kaWYKICAgICAKIHZv
aWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkZWNpZGVQb2xpY3lGb3JOYXZp
Z2F0aW9uUmVzcG9uc2UoV2ViUGFnZVByb3h5JiBwYWdlLCBSZWY8QVBJOjpOYXZpZ2F0aW9uUmVz
cG9uc2U+JiYgbmF2aWdhdGlvblJlc3BvbnNlLCBSZWY8V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclBy
b3h5PiYmIGxpc3RlbmVyLCBBUEk6Ok9iamVjdCogdXNlckRhdGEpCiB7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJTdHJhdGVneS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViTG9hZGVyU3RyYXRlZ3ku
Y3BwCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29y
ay9XZWJMb2FkZXJTdHJhdGVneS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3OSw2ICs0NzksMTIg
QEAgdm9pZCBXZWJMb2FkZXJTdHJhdGVneTo6cmVtb3ZlKFJlc291cmNlTAogICAgIEFTU0VSVChy
ZXNvdXJjZUxvYWRlcik7CiAgICAgTE9HKE5ldHdvcmtTY2hlZHVsaW5nLCAiKFdlYlByb2Nlc3Mp
IFdlYkxvYWRlclN0cmF0ZWd5OjpyZW1vdmUsIHVybCAnJXMnIiwgcmVzb3VyY2VMb2FkZXItPnVy
bCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCisgICAgYXV0byBpZGVudGlmaWVyID0gcmVz
b3VyY2VMb2FkZXItPmlkZW50aWZpZXIoKTsKKyAgICBpZiAoIWlkZW50aWZpZXIpIHsKKyAgICAg
ICAgTE9HX0VSUk9SKCJXZWJMb2FkZXJTdHJhdGVneSByZW1vdmluZyBhIFJlc291cmNlTG9hZGVy
IHRoYXQgaGFzIG5vIGlkZW50aWZpZXIuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAg
ICBpZiAoYXV0byB0YXNrID0gbV91cmxTY2hlbWVUYXNrcy50YWtlKHJlc291cmNlTG9hZGVyLT5p
ZGVudGlmaWVyKCkpKSB7CiAgICAgICAgIEFTU0VSVCghbV9pbnRlcm5hbGx5RmFpbGVkUmVzb3Vy
Y2VMb2FkZXJzLmNvbnRhaW5zKHJlc291cmNlTG9hZGVyKSk7CiAgICAgICAgIHRhc2stPnN0b3BM
b2FkaW5nKCk7CkBAIC00ODksMTIgKzQ5NSw2IEBAIHZvaWQgV2ViTG9hZGVyU3RyYXRlZ3k6OnJl
bW92ZShSZXNvdXJjZUwKICAgICAgICAgbV9pbnRlcm5hbGx5RmFpbGVkUmVzb3VyY2VMb2FkZXJz
LnJlbW92ZShyZXNvdXJjZUxvYWRlcik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCi0g
ICAgYXV0byBpZGVudGlmaWVyID0gcmVzb3VyY2VMb2FkZXItPmlkZW50aWZpZXIoKTsKLSAgICBp
ZiAoIWlkZW50aWZpZXIpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJXZWJMb2FkZXJTdHJhdGVneSBy
ZW1vdmluZyBhIFJlc291cmNlTG9hZGVyIHRoYXQgaGFzIG5vIGlkZW50aWZpZXIuIik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9CiAKICAgICBSZWZQdHI8V2ViUmVzb3VyY2VMb2FkZXI+IGxvYWRl
ciA9IG1fd2ViUmVzb3VyY2VMb2FkZXJzLnRha2UoaWRlbnRpZmllcik7CiAgICAgLy8gTG9hZGVy
IG1heSBub3QgYmUgcmVnaXN0ZXJlZCBpZiB3ZSBjcmVhdGVkIGl0LCBidXQgaGF2ZW4ndCBzY2hl
ZHVsZWQgeWV0IChhIGJ1bmRsZSBjbGllbnQgY2FuIGRlY2lkZSB0byBjYW5jZWwgc3VjaCByZXF1
ZXN0IHZpYSB3aWxsU2VuZFJlcXVlc3QpLgpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjg1OTU0KQorKysgVG9vbHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjEtMTEtMTcgIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBJbXBsZW1lbnQg
bW9zdCBvZiByZWRpcmVjdCBhbmQgbW9kaWZ5LWhlYWRlcnMgYWN0aW9uIHR5cGVzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzMyNjgKKworICAgICAg
ICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlKToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OmNoZWNrQ29tcGlsZXJFcnJvcik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpURVNUX0YpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tD
b250ZW50RXh0ZW5zaW9uU3RvcmUubW06CisgICAgICAgIChjb21waWxlQ29udGVudFJ1bGVMaXN0
KToKKyAgICAgICAgKG5hdmlnYXRpb25EZWxlZ2F0ZUFsbG93aW5nQWN0aXZlQWN0aW9uc09uVGVz
dEhvc3QpOgorICAgICAgICAoVEVTVF9GKToKKwogMjAyMS0xMS0xNyAgWml4aW5nIExpdSAgPGxp
dXNodXl1MDExQGdtYWlsLmNvbT4KIAogICAgICAgICBbR1RLXVtXUEVdIFN1cHBvcnQgZ2V0dGlu
ZyBhbmQgc2V0dGluZyBIVFRQIGhlYWRlcnMgaW4gY3VzdG9tIFVSSSBzY2hlbWUgaGFuZGxlcnMK
SW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9u
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0Nv
bnRlbnRFeHRlbnNpb25zLmNwcAkocmV2aXNpb24gMjg1OTU0KQorKysgVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjUsNiArMjUsOCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKKyNpZiBFTkFCTEUoQ09O
VEVOVF9FWFRFTlNJT05TKQorCiAjaW5jbHVkZSAiVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29t
YmluZWRVUkxGaWx0ZXJzLmg+CkBAIC0xMjksNyArMTMxLDcgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSBleHRlbnNpb25EYXRhOwogICAgICAg
ICBJbk1lbW9yeUNvbnRlbnRFeHRlbnNpb25Db21waWxhdGlvbkNsaWVudCBjbGllbnQoZXh0ZW5z
aW9uRGF0YSk7Ci0gICAgICAgIGF1dG8gcGFyc2VkUnVsZXMgPSBDb250ZW50RXh0ZW5zaW9uczo6
cGFyc2VSdWxlTGlzdChmaWx0ZXIsIHsgfSk7CisgICAgICAgIGF1dG8gcGFyc2VkUnVsZXMgPSBD
b250ZW50RXh0ZW5zaW9uczo6cGFyc2VSdWxlTGlzdChmaWx0ZXIsIHN0ZDo6bnVsbG9wdCk7CiAg
ICAgICAgIGF1dG8gY29tcGlsZXJFcnJvciA9IENvbnRlbnRFeHRlbnNpb25zOjpjb21waWxlUnVs
ZUxpc3QoY2xpZW50LCBXVEZNb3ZlKGZpbHRlciksIFdURk1vdmUocGFyc2VkUnVsZXMudmFsdWUo
KSkpOwogCiAgICAgICAgIC8vIENvbXBpbGluZyBzaG91bGQgYWx3YXlzIHN1Y2NlZWQgaGVyZS4g
V2UgaGF2ZSBvdGhlciB0ZXN0cyBmb3IgY29tcGlsZSBmYWlsdXJlcy4KQEAgLTEzNjAsNyArMTM2
Miw3IEBAIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgRGVlcE5GQSkKICAgICBFWFBFQ1Rf
RVEoMXVsLCBjcmVhdGVORkFzKGNvbWJpbmVkVVJMRmlsdGVycykuc2l6ZSgpKTsKIH0KIAotdm9p
ZCBjaGVja0NvbXBpbGVyRXJyb3IoY29uc3QgY2hhcioganNvbiwgc3RkOjplcnJvcl9jb2RlIGV4
cGVjdGVkRXJyb3IsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYWxsb3dlZFJlZGlyZWN0VVJMU2No
ZW1lcyA9IHsgfSkKK3ZvaWQgY2hlY2tDb21waWxlckVycm9yKGNvbnN0IGNoYXIqIGpzb24sIHN0
ZDo6ZXJyb3JfY29kZSBleHBlY3RlZEVycm9yLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEhhc2hTZXQ8
U3RyaW5nPj4mIGFsbG93ZWRSZWRpcmVjdFVSTFNjaGVtZXMgPSBzdGQ6Om51bGxvcHQpCiB7CiAg
ICAgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSBleHRlbnNpb25EYXRhOwogICAgIEluTWVt
b3J5Q29udGVudEV4dGVuc2lvbkNvbXBpbGF0aW9uQ2xpZW50IGNsaWVudChleHRlbnNpb25EYXRh
KTsKQEAgLTE1MzAsNiArMTUzMiw3IEBAIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgSW52
YWxpZEpTT04KICAgICAgICAgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZEFjdGlv
blR5cGUpOwogICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpc
ImNzcy1kaXNwbGF5LW5vbmVcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0
Lm9yZ1wifX1dIiwKICAgICAgICAgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZENT
U0Rpc3BsYXlOb25lQWN0aW9uVHlwZSk7CisgICAgY2hlY2tDb21waWxlckVycm9yKCIiLCBDb250
ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTFNjaGVtZXNTaG91bGROb3RJbmNsdWRl
SmF2YXNjcmlwdCwgeyB7ICJqYXZhc2NyaXB0IiB9IH0pOwogCiAgICAgY2hlY2tDb21waWxlckVy
cm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiaWdub3JlLXByZXZpb3VzLXJ1bGVzXCJ9LFwi
dHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19LCIKICAgICAgICAgIntc
ImFjdGlvblwiOntcInR5cGVcIjpcImNzcy1kaXNwbGF5LW5vbmVcIixcInNlbGVjdG9yXCI6XCIu
aGlkZGVuXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIi4qXCJ9fV0iLCB7IH0pOwpA
QCAtMTU1OCwxMiArMTU2MSwyMCBAQCBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIEludmFs
aWRKU09OCiAgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwi
cmVkaXJlY3RcIixcInJlZGlyZWN0XCI6e1widHJhbnNmb3JtXCI6e1wicXVlcnktdHJhbnNmb3Jt
XCI6e1wiYWRkLW9yLXJlcGxhY2UtcGFyYW1ldGVyc1wiOlt7fV19fX19LFwidHJpZ2dlclwiOntc
InVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6
SlNPTkFkZE9yUmVwbGFjZVBhcmFtZXRlcnNLZXlWYWx1ZU1pc3NpbmdLZXlTdHJpbmcpOwogICAg
IGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIs
XCJyZWRpcmVjdFwiOntcInRyYW5zZm9ybVwiOntcInF1ZXJ5LXRyYW5zZm9ybVwiOntcImFkZC1v
ci1yZXBsYWNlLXBhcmFtZXRlcnNcIjpbe1wia2V5XCI6NX1dfX19fSxcInRyaWdnZXJcIjp7XCJ1
cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpT
T05BZGRPclJlcGxhY2VQYXJhbWV0ZXJzS2V5VmFsdWVNaXNzaW5nS2V5U3RyaW5nKTsKICAgICBj
aGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwi
cmVkaXJlY3RcIjp7XCJ0cmFuc2Zvcm1cIjp7XCJxdWVyeS10cmFuc2Zvcm1cIjp7XCJhZGQtb3It
cmVwbGFjZS1wYXJhbWV0ZXJzXCI6W3tcImtleVwiOlwia1wiLFwidmFsdWVcIjo1fV19fX19LFwi
dHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsIENvbnRlbnRFeHRl
bnNpb25FcnJvcjo6SlNPTkFkZE9yUmVwbGFjZVBhcmFtZXRlcnNLZXlWYWx1ZU1pc3NpbmdWYWx1
ZVN0cmluZyk7Ci0gICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwi
OlwicmVkaXJlY3RcIixcInJlZGlyZWN0XCI6e1widXJsXCI6XCJhYm91dDpibGFua1wifX0sXCJ0
cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwgQ29udGVudEV4dGVu
c2lvbkVycm9yOjpKU09OUmVkaXJlY3RVUkxTY2hlbWVOb3RBbGxvd2VkKTsKLSAgICBjaGVja0Nv
bXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVkaXJl
Y3RcIjp7XCJ1cmxcIjpcImFib3V0OmJsYW5rXCJ9fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVy
XCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCB7IH0sIHsgImFib3V0IiB9KTsKLSAgICBjaGVja0NvbXBp
bGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVkaXJlY3Rc
Ijp7XCJleHRlbnNpb24tcGF0aFwiOlwiZG9lcy9ub3Qvc3RhcnQvd2l0aC9zbGFzaC9cIn19LFwi
dHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsIENvbnRlbnRFeHRl
bnNpb25FcnJvcjo6SlNPTlJlZGlyZWN0RXh0ZW5zaW9uUGF0aERvZXNOb3RTdGFydFdpdGhTbGFz
aCk7CisgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVk
aXJlY3RcIixcInJlZGlyZWN0XCI6e1widXJsXCI6XCJhYm91dDpibGFua1wifX0sXCJ0cmlnZ2Vy
XCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwgQ29udGVudEV4dGVuc2lvbkVy
cm9yOjpKU09OUmVkaXJlY3RVUkxTY2hlbWVOb3RBbGxvd2VkLCB7IHsgIm5vdC1hYm91dCIgfSB9
KTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRp
cmVjdFwiLFwicmVkaXJlY3RcIjp7XCJ1cmxcIjpcImFib3V0OmJsYW5rXCJ9fSxcInRyaWdnZXJc
Ijp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCB7IH0sIHsgeyAiYWJvdXQiIH0g
fSk7CisgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVk
aXJlY3RcIixcInJlZGlyZWN0XCI6e1widXJsXCI6XCJodHRwczovLzEyNy4uMS9cIn19LFwidHJp
Z2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsIENvbnRlbnRFeHRlbnNp
b25FcnJvcjo6SlNPTlJlZGlyZWN0VVJMSW52YWxpZCwgeyB7ICJodHRwcyIgfSB9KTsKKyAgICBj
aGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwi
cmVkaXJlY3RcIjp7XCJ1cmxcIjpcImFib3V0OmJsYW5rXCJ9fSxcInRyaWdnZXJcIjp7XCJ1cmwt
ZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCB7IH0sIHsgeyAiYWJvdXQiIH0gfSk7CisgICAg
Y2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixc
InJlZGlyZWN0XCI6e1widHJhbnNmb3JtXCI6e1wicG9ydFwiOlwibm90IGEgbnVtYmVyXCJ9fX0s
XCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwgQ29udGVudEV4
dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RJbnZhbGlkUG9ydCk7CisgICAgY2hlY2tDb21waWxl
ckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixcInJlZGlyZWN0XCI6
e1widHJhbnNmb3JtXCI6e1wicG9ydFwiOlwiNjU1MzZcIn19fSxcInRyaWdnZXJcIjp7XCJ1cmwt
ZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05S
ZWRpcmVjdEludmFsaWRQb3J0KTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25c
Ijp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVkaXJlY3RcIjp7XCJ0cmFuc2Zvcm1cIjp7XCJx
dWVyeVwiOlwibm8tcXVlc3Rpb24tbWFya1wifX19LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJc
IjpcIndlYmtpdC5vcmdcIn19XSIsIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTlJlZGlyZWN0
SW52YWxpZFF1ZXJ5KTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0
eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVkaXJlY3RcIjp7XCJ0cmFuc2Zvcm1cIjp7XCJmcmFnbWVu
dFwiOlwibm8tbnVtYmVyLXNpZ25cIn19fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3
ZWJraXQub3JnXCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdEludmFs
aWRGcmFnbWVudCk7CisgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlw
ZVwiOlwicmVkaXJlY3RcIixcInJlZGlyZWN0XCI6e1widHJhbnNmb3JtXCI6e1wicG9ydFwiOlwi
NjU1MzVcIn19fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0i
LCB7IH0pOworICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpc
InJlZGlyZWN0XCIsXCJyZWRpcmVjdFwiOntcInRyYW5zZm9ybVwiOntcInBvcnRcIjpcIlwifX19
LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsIHsgfSk7CiAg
ICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3Rc
IixcInJlZGlyZWN0XCI6e1wiZXh0ZW5zaW9uLXBhdGhcIjpcIi9kb2VzL3N0YXJ0L3dpdGgvc2xh
c2gvXCJ9fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCB7
IH0pOwotICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJl
ZGlyZWN0XCIsXCJyZWRpcmVjdFwiOntcInRyYW5zZm9ybVwiOntcInNjaGVtZVwiOlwiYWJvdXRc
In19fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCBDb250
ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTFNjaGVtZU5vdEFsbG93ZWQpOwotICAg
IGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIs
XCJyZWRpcmVjdFwiOntcInRyYW5zZm9ybVwiOntcInNjaGVtZVwiOlwiYWJvdXRcIn19fSxcInRy
aWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCB7IH0sIHsgImFib3V0
IiB9KTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJy
ZWRpcmVjdFwiLFwicmVkaXJlY3RcIjp7XCJ0cmFuc2Zvcm1cIjp7XCJzY2hlbWVcIjpcImFib3V0
XCJ9fX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwgQ29u
dGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RVUkxTY2hlbWVOb3RBbGxvd2VkLCB7IHsg
Im5vdC1hYm91dCIgfSB9KTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7
XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVkaXJlY3RcIjp7XCJ0cmFuc2Zvcm1cIjp7XCJzY2hl
bWVcIjpcIiFAIyQlXCJ9fX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9y
Z1wifX1dIiwgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RVUkxTY2hlbWVJbnZh
bGlkKTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJy
ZWRpcmVjdFwiLFwicmVkaXJlY3RcIjp7XCJ0cmFuc2Zvcm1cIjp7XCJzY2hlbWVcIjpcIkFib3V0
XCJ9fX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwgeyB9
LCB7IHsgImFib3V0IiB9IH0pOwogICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwi
OntcInR5cGVcIjpcIm1vZGlmeS1oZWFkZXJzXCIsXCJyZXF1ZXN0LWhlYWRlcnNcIjo1fSxcInRy
aWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCBDb250ZW50RXh0ZW5z
aW9uRXJyb3I6OkpTT05Nb2RpZnlIZWFkZXJzTm90QXJyYXkpOwogICAgIGNoZWNrQ29tcGlsZXJF
cnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcIm1vZGlmeS1oZWFkZXJzXCIsXCJyZXF1ZXN0
LWhlYWRlcnNcIjpbNV19LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdc
In19XSIsIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTk1vZGlmeUhlYWRlcnNJbmZvTm90QURp
Y3Rpb25hcnkpOwogICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVc
IjpcIm1vZGlmeS1oZWFkZXJzXCIsXCJyZXF1ZXN0LWhlYWRlcnNcIjpbe31dfSxcInRyaWdnZXJc
Ijp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9uRXJy
b3I6OkpTT05Nb2RpZnlIZWFkZXJzTWlzc2luZ09wZXJhdGlvbik7CkBAIC0zMDI0LDExICszMDM1
LDExIEBAIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgU2VyaWFsaXphdGkKICAgICAgICAg
Imhvc3QiLAogICAgICAgICAicGFzc3dvcmQiLAogICAgICAgICB7IC8qIHBhdGggKi8gfSwKLSAg
ICAgICAgInBvcnQiLAorICAgICAgICAxMjMsCiAgICAgICAgIHsgLyogcXVlcnkgKi8gfSwKICAg
ICAgICAgInNjaGVtZSIsCiAgICAgICAgICJ1c2VybmFtZSIKLSAgICB9IH0gfSwgNzUpOworICAg
IH0gfSB9LCA3MCk7CiAgICAgY2hlY2tSZWRpcmVjdEFjdGlvblNlcmlhbGl6YXRpb24oeyB7IFJl
ZGlyZWN0QWN0aW9uOjpVUkxUcmFuc2Zvcm1BY3Rpb24geyB7IH0sIHsgfSwgeyB9LCB7IH0sIHsg
fSwgeyAicXVlcnkiIH0sIHsgfSwgeyB9IH0gfSB9LCAyMCk7CiAgICAgY2hlY2tSZWRpcmVjdEFj
dGlvblNlcmlhbGl6YXRpb24oeyB7IFJlZGlyZWN0QWN0aW9uOjpVUkxUcmFuc2Zvcm1BY3Rpb24g
eyB7IH0sIHsgfSwgeyB9LCB7IH0sIHsgfSwKICAgICAgICAgeyBSZWRpcmVjdEFjdGlvbjo6VVJM
VHJhbnNmb3JtQWN0aW9uOjpRdWVyeVRyYW5zZm9ybSB7IHsgeyAia2V5MSIsIGZhbHNlLCAidmFs
dWUxIiB9LCB7ICJrZXnwn5KpIiwgZmFsc2UsICJ2YWx1ZTIiIH0gfSwgeyAidGVzdFN0cmluZzEi
LCAidGVzdFN0cmluZzIiIH0gfSB9LCB7IH0sIHsgfSwKQEAgLTMwNDgsMyArMzA1OSw1IEBAIFRF
U1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgU2VyaWFsaXphdGkKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgVGVzdFdlYktpdEFQSQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykK
SW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9ERkFDb21iaW5lci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0RGQUNvbWJp
bmVyLmNwcAkocmV2aXNpb24gMjg1OTU0KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL0RGQUNvbWJpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsOCBAQAog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQor
CiAjaW5jbHVkZSAiREZBSGVscGVycy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvREZBQ29tYmluZXIu
aD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgpAQCAtMTE5LDMgKzEyMSw1IEBAIFRFU1Rf
RihERkFDb21iaW5lclRlc3QsIENvbWJpbmVkSW5wdXRSZWEKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
VGVzdFdlYktpdEFQSQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKSW5k
ZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9ERkFIZWxwZXJzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0RGQUhlbHBlcnMuaAko
cmV2aXNpb24gMjg1OTU0KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0RG
QUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsOCBAQAogCiAjcHJhZ21hIG9u
Y2UKIAorI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisKICNpbmNsdWRlIDxXZWJDb3Jl
L0NvbWJpbmVkVVJMRmlsdGVycy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTkZBLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9ORkFUb0RGQS5oPgpAQCAtNjcsMyArNjksNSBAQCBzdGF0aWMgQ29udGVudEV4
dGVuc2lvbnM6OkRGQSBidWlsZERGQUZyCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRB
UEkKKworI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvREZBTWluaW1pemVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvREZBTWluaW1pemVyLmNwcAkocmV2
aXNpb24gMjg1OTU0KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0RGQU1p
bmltaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDggQEAKIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKwogI2luY2x1ZGUg
IkRGQUhlbHBlcnMuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCkBAIC0xMTksMyAr
MTIxLDUgQEAgVEVTVF9GKERGQU1pbmltaXplclRlc3QsIFNpbXBsZUZhbGxCYWNrVAogfQogCiB9
IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9F
WFRFTlNJT05TKQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9X
S0NvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCShyZXZpc2lv
biAyODU5NTQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLQ29u
dGVudEV4dGVuc2lvblN0b3JlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMSArMjgsMTUgQEAK
IAogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKICNpbXBvcnQgIlRlc3QuaCIKKyNpbXBv
cnQgIlRlc3ROYXZpZ2F0aW9uRGVsZWdhdGUuaCIKKyNpbXBvcnQgIlRlc3RVUkxTY2hlbWVIYW5k
bGVyLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tDb250ZW50UnVsZUxpc3QuaD4KICNpbXBvcnQgPFdl
YktpdC9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dL
V2VicGFnZVByZWZlcmVuY2VzUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyQ29udGVudEZpbHRl
ci5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgog
CiBjbGFzcyBXS0NvbnRlbnRSdWxlTGlzdFN0b3JlVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0
IHsKIHB1YmxpYzoKQEAgLTQ3NCwzICs0NzgsMjc2IEBAIFRFU1RfRihXS0NvbnRlbnRSdWxlTGlz
dFN0b3JlVGVzdCwgX1dLVXMKICAgICB9XTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JmRvbmVMb29raW5nVXApOwogfQorCitzdGF0aWMgUmV0YWluUHRyPFdLQ29udGVudFJ1bGVMaXN0
PiBjb21waWxlQ29udGVudFJ1bGVMaXN0KGNvbnN0IGNoYXIqIGpzb24sIE5TU3RyaW5nICppZGVu
dGlmaWVyID0gQCJ0ZXN0aWRlbnRpZmllciIpCit7CisgICAgW1tXS0NvbnRlbnRSdWxlTGlzdFN0
b3JlIGRlZmF1bHRTdG9yZV0gX3JlbW92ZUFsbENvbnRlbnRSdWxlTGlzdHNdOworCisgICAgX19i
bG9jayBSZXRhaW5QdHI8V0tDb250ZW50UnVsZUxpc3Q+IGxpc3Q7CisgICAgW1tXS0NvbnRlbnRS
dWxlTGlzdFN0b3JlIGRlZmF1bHRTdG9yZV0gX2NvbXBpbGVDb250ZW50UnVsZUxpc3RGb3JJZGVu
dGlmaWVyOkAidGVzdGlkZW50aWZpZXIiIGVuY29kZWRDb250ZW50UnVsZUxpc3Q6W05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6QCIlcyIsIGpzb25dIGFsbG93ZWRSZWRpcmVjdFNjaGVtZXM6W05T
U2V0IHNldFdpdGhPYmplY3RzOkAidGVzdHNjaGVtZSIsIEAib3RoZXJ0ZXN0c2NoZW1lIiwgbmls
XSBjb21wbGV0aW9uSGFuZGxlcjpeKFdLQ29udGVudFJ1bGVMaXN0ICpmaWx0ZXIsIE5TRXJyb3Ig
KmVycm9yKSB7CisgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKKyAgICAgICAgbGlzdCA9IGZp
bHRlcjsKKyAgICB9XTsKKyAgICB3aGlsZSAoIWxpc3QpCisgICAgICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnNwaW5SdW5Mb29wKCk7CisKKyAgICByZXR1cm4gbGlzdDsKK30KKworc3RhdGljIFJl
dGFpblB0cjxUZXN0TmF2aWdhdGlvbkRlbGVnYXRlPiBuYXZpZ2F0aW9uRGVsZWdhdGVBbGxvd2lu
Z0FjdGl2ZUFjdGlvbnNPblRlc3RIb3N0KCkKK3sKKyAgICBzdGF0aWMgYXV0byBkZWxlZ2F0ZSA9
IGFkb3B0TlMoW1Rlc3ROYXZpZ2F0aW9uRGVsZWdhdGUgbmV3XSk7CisgICAgZGVsZWdhdGUuZ2V0
KCkuZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbldpdGhQcmVmZXJlbmNlcyA9IF4oV0tO
YXZpZ2F0aW9uQWN0aW9uICosIFdLV2VicGFnZVByZWZlcmVuY2VzICpwcmVmZXJlbmNlcywgdm9p
ZCAoXmRlY2lzaW9uSGFuZGxlcikoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5LCBXS1dlYnBhZ2VQ
cmVmZXJlbmNlcyAqKSkgeworICAgICAgICBwcmVmZXJlbmNlcy5fYWN0aXZlQ29udGVudFJ1bGVM
aXN0QWN0aW9uc1BhdHRlcm5zID0gW05TU2V0IHNldFdpdGhPYmplY3Q6QCIqOi8vdGVzdGhvc3Qv
KiJdOworICAgICAgICBkZWNpc2lvbkhhbmRsZXIoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5QWxs
b3csIHByZWZlcmVuY2VzKTsKKyAgICB9OworICAgIHJldHVybiBkZWxlZ2F0ZTsKK30KKworVEVT
VF9GKFdLQ29udGVudFJ1bGVMaXN0U3RvcmVUZXN0LCBNb2RpZnlIZWFkZXJzKQoreworICAgIGF1
dG8gbGlzdCA9IGNvbXBpbGVDb250ZW50UnVsZUxpc3QoUiJKU09OKAorICAgICAgICBbIHsKKyAg
ICAgICAgICAgICJhY3Rpb24iOiB7ICJ0eXBlIjogIm1vZGlmeS1oZWFkZXJzIiwgInJlcXVlc3Qt
aGVhZGVycyI6IFsgeworICAgICAgICAgICAgICAgICJvcGVyYXRpb24iOiAic2V0IiwKKyAgICAg
ICAgICAgICAgICAiaGVhZGVyIjogInRlc3RrZXkiLAorICAgICAgICAgICAgICAgICJ2YWx1ZSI6
ICJ0ZXN0dmFsdWUiCisgICAgICAgICAgICB9IF0gfSwKKyAgICAgICAgICAgICJ0cmlnZ2VyIjog
eyAidXJsLWZpbHRlciI6ICJ0ZXN0c2NoZW1lIiB9CisgICAgICAgIH0sIHsKKyAgICAgICAgICAg
ICJhY3Rpb24iOiB7ICJ0eXBlIjogIm1vZGlmeS1oZWFkZXJzIiwgInJlcXVlc3QtaGVhZGVycyI6
IFsgeworICAgICAgICAgICAgICAgICJvcGVyYXRpb24iOiAicmVtb3ZlIiwKKyAgICAgICAgICAg
ICAgICAiaGVhZGVyIjogIkFjY2VwdCIKKyAgICAgICAgICAgIH0gXSB9LAorICAgICAgICAgICAg
InRyaWdnZXIiOiB7ICJ1cmwtZmlsdGVyIjogInRlc3RzY2hlbWUiIH0KKyAgICAgICAgfSwgewor
ICAgICAgICAgICAgImFjdGlvbiI6IHsgInR5cGUiOiAibW9kaWZ5LWhlYWRlcnMiLCAicmVxdWVz
dC1oZWFkZXJzIjogWyB7CisgICAgICAgICAgICAgICAgIm9wZXJhdGlvbiI6ICJhcHBlbmQiLAor
ICAgICAgICAgICAgICAgICJoZWFkZXIiOiAiQ29udGVudC1UeXBlIiwKKyAgICAgICAgICAgICAg
ICAidmFsdWUiOiAiTW9kaWZpZWQtYnktdGVzdCIKKyAgICAgICAgICAgIH0gXSB9LAorICAgICAg
ICAgICAgInRyaWdnZXIiOiB7ICJ1cmwtZmlsdGVyIjogInRlc3RzY2hlbWUiIH0KKyAgICAgICAg
fSBdCisgICAgKUpTT04iKTsKKworICAgIF9fYmxvY2sgYm9vbCByZWNlaXZlZEFsbFJlcXVlc3Rz
IHsgZmFsc2UgfTsKKyAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtUZXN0VVJMU2NoZW1lSGFu
ZGxlciBuZXddKTsKKyAgICBoYW5kbGVyLmdldCgpLnN0YXJ0VVJMU2NoZW1lVGFza0hhbmRsZXIg
PSBeKFdLV2ViVmlldyAqLCBpZCA8V0tVUkxTY2hlbWVUYXNrPiB0YXNrKSB7CisgICAgICAgIE5T
U3RyaW5nICpwYXRoID0gdGFzay5yZXF1ZXN0LlVSTC5wYXRoOworICAgICAgICBOU0RpY3Rpb25h
cnk8TlNTdHJpbmcgKiwgTlNTdHJpbmcgKj4gKmZpZWxkcyA9IFt0YXNrLnJlcXVlc3QgYWxsSFRU
UEhlYWRlckZpZWxkc107CisgICAgICAgIGlmIChbcGF0aCBpc0VxdWFsVG9TdHJpbmc6QCIvbWFp
bi5odG1sIl0pIHsKKyAgICAgICAgICAgIEVYUEVDVF9XS19TVFJFUShmaWVsZHNbQCJDb250ZW50
LVR5cGUiXSwgIk1vZGlmaWVkLWJ5LXRlc3QiKTsKKyAgICAgICAgICAgIEVYUEVDVF9XS19TVFJF
UShmaWVsZHNbQCJ0ZXN0a2V5Il0sICJ0ZXN0dmFsdWUiKTsKKyAgICAgICAgICAgIEVYUEVDVF9O
VUxMKGZpZWxkc1tAIkFjY2VwdCJdKTsKKyAgICAgICAgICAgIHJldHVybiByZXNwb25kKHRhc2ss
ICI8aWZyYW1lIHNyYz0nLy9vdGhlcmhvc3QvZnJhbWUuaHRtbCc+PC9pZnJhbWU+Iik7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKFtwYXRoIGlzRXF1YWxUb1N0cmluZzpAIi9mcmFtZS5odG1sIl0p
IHsKKyAgICAgICAgICAgIEVYUEVDVF9OVUxMKGZpZWxkc1tAIkNvbnRlbnQtVHlwZSJdKTsKKyAg
ICAgICAgICAgIEVYUEVDVF9OVUxMKGZpZWxkc1tAInRlc3RrZXkiXSk7CisgICAgICAgICAgICBF
WFBFQ1RfTk9UX05VTEwoZmllbGRzW0AiQWNjZXB0Il0pOworICAgICAgICAgICAgcmV0dXJuIHJl
c3BvbmQodGFzaywgIjxzY3JpcHQ+ZmV0Y2goJy8vdGVzdGhvc3QvZmV0Y2gudHh0Jyx7aGVhZGVy
czogeydDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbid9fSk8L3NjcmlwdD4iKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoW3BhdGggaXNFcXVhbFRvU3RyaW5nOkAiL2ZldGNoLnR4dCJd
KSB7CisgICAgICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoZmllbGRzW0AiQ29udGVudC1UeXBlIl0s
ICJhcHBsaWNhdGlvbi9qc29uOyBNb2RpZmllZC1ieS10ZXN0Iik7CisgICAgICAgICAgICBFWFBF
Q1RfV0tfU1RSRVEoZmllbGRzW0AidGVzdGtleSJdLCAidGVzdHZhbHVlIik7CisgICAgICAgICAg
ICBFWFBFQ1RfTlVMTChmaWVsZHNbQCJBY2NlcHQiXSk7CisgICAgICAgICAgICByZWNlaXZlZEFs
bFJlcXVlc3RzID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZXNwb25kKHRhc2ssICIiKTsK
KyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9OworCisgICAg
YXV0byBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBuZXdd
KTsKKyAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRDb250ZW50
UnVsZUxpc3Q6bGlzdC5nZXQoKV07CisgICAgW2NvbmZpZ3VyYXRpb24gc2V0VVJMU2NoZW1lSGFu
ZGxlcjpoYW5kbGVyLmdldCgpIGZvclVSTFNjaGVtZTpAInRlc3RzY2hlbWUiXTsKKyAgICBhdXRv
IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TWmVy
b1JlY3QgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CisgICAgd2ViVmlldy5n
ZXQoKS5uYXZpZ2F0aW9uRGVsZWdhdGUgPSBuYXZpZ2F0aW9uRGVsZWdhdGVBbGxvd2luZ0FjdGl2
ZUFjdGlvbnNPblRlc3RIb3N0KCkuZ2V0KCk7CisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05T
VVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAInRlc3RzY2hl
bWU6Ly90ZXN0aG9zdC9tYWluLmh0bWwiXV1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmcmVjZWl2ZWRBbGxSZXF1ZXN0cyk7CisgICAgCisgICAgLy8gRklYTUU6IEFwcGVuZGluZyB0
byB0aGUgVXNlci1BZ2VudCByZXBsYWNlcyB0aGUgdXNlciBhZ2VudCBiZWNhdXNlIHdlIGhhdmVu
J3QgYWRkZWQgdGhlIHVzZXIgYWdlbnQgeWV0IHdoZW4gcHJvY2Vzc2luZyB0aGUgcmVxdWVzdC4K
K30KKworVEVTVF9GKFdLQ29udGVudFJ1bGVMaXN0U3RvcmVUZXN0LCBSZWRpcmVjdCkKK3sKKyAg
ICBhdXRvIGxpc3QgPSBjb21waWxlQ29udGVudFJ1bGVMaXN0KFIiSlNPTigKKyAgICAgICAgWyB7
CisgICAgICAgICAgICAiYWN0aW9uIjogeyAidHlwZSI6ICJyZWRpcmVjdCIsICJyZWRpcmVjdCI6
IHsKKyAgICAgICAgICAgICAgICAidXJsIjogIm90aGVydGVzdHNjaGVtZTovL25vdC10ZXN0aG9z
dC8xLXJlZGlyZWN0ZWQudHh0IgorICAgICAgICAgICAgfSB9LAorICAgICAgICAgICAgInRyaWdn
ZXIiOiB7ICJ1cmwtZmlsdGVyIjogIjEudHh0IiB9CisgICAgICAgIH0sIHsKKyAgICAgICAgICAg
ICJhY3Rpb24iOiB7ICJ0eXBlIjogInJlZGlyZWN0IiwgInJlZGlyZWN0IjogeyAidHJhbnNmb3Jt
IjogeworICAgICAgICAgICAgICAgICJwb3J0IjogIjEyMyIsCisgICAgICAgICAgICAgICAgImln
bm9yZWQtY29tbWVudCI6ICIxMjMgaXMgYSBmb3JiaWRkZW4gcG9ydCwgc28gdGhpcyBVUkwgaXMg
bm90IHNlZW4gYnkgdGhlIFdLVVJMU2NoZW1lSGFuZGxlci4iCisgICAgICAgICAgICB9IH0gfSwK
KyAgICAgICAgICAgICJ0cmlnZ2VyIjogeyAidXJsLWZpbHRlciI6ICIyLnR4dCIgfQorICAgICAg
ICB9LCB7CisgICAgICAgICAgICAiYWN0aW9uIjogeyAidHlwZSI6ICJyZWRpcmVjdCIsICJyZWRp
cmVjdCI6IHsgInRyYW5zZm9ybSI6IHsKKyAgICAgICAgICAgICAgICAiaG9zdCI6ICJuZXdob3N0
IiwKKyAgICAgICAgICAgICAgICAidXNlcm5hbWUiOiAibmV3dXNlcm5hbWUiLAorICAgICAgICAg
ICAgICAgICJwb3J0IjogIjQ0MyIKKyAgICAgICAgICAgIH0gfSB9LAorICAgICAgICAgICAgInRy
aWdnZXIiOiB7ICJ1cmwtZmlsdGVyIjogIjMudHh0IiB9CisgICAgICAgIH0sIHsKKyAgICAgICAg
ICAgICJhY3Rpb24iOiB7ICJ0eXBlIjogInJlZGlyZWN0IiwgInJlZGlyZWN0IjogeyAidHJhbnNm
b3JtIjogeworICAgICAgICAgICAgICAgICJwb3J0IjogIiIsCisgICAgICAgICAgICAgICAgInNj
aGVtZSI6ICJvdGhlcnRlc3RzY2hlbWUiLAorICAgICAgICAgICAgICAgICJxdWVyeSI6ICI/a2V5
PXZhbHVlIgorICAgICAgICAgICAgfSB9IH0sCisgICAgICAgICAgICAidHJpZ2dlciI6IHsgInVy
bC1maWx0ZXIiOiAiNC50eHQiIH0KKyAgICAgICAgfSwgeworICAgICAgICAgICAgImFjdGlvbiI6
IHsgInR5cGUiOiAicmVkaXJlY3QiLCAicmVkaXJlY3QiOiB7ICJ0cmFuc2Zvcm0iOiB7CisgICAg
ICAgICAgICAgICAgInBhc3N3b3JkIjogInRlc3RwYXNzd29yZCIsCisgICAgICAgICAgICAgICAg
InF1ZXJ5IjogIiIsCisgICAgICAgICAgICAgICAgImZyYWdtZW50IjogIiNmcmFnbWVudC10by1i
ZS1hZGRlZCIKKyAgICAgICAgICAgIH0gfSB9LAorICAgICAgICAgICAgInRyaWdnZXIiOiB7ICJ1
cmwtZmlsdGVyIjogIjUudHh0IiB9CisgICAgICAgIH0sIHsKKyAgICAgICAgICAgICJhY3Rpb24i
OiB7ICJ0eXBlIjogInJlZGlyZWN0IiwgInJlZGlyZWN0IjogeyAidHJhbnNmb3JtIjogeworICAg
ICAgICAgICAgICAgICJwYXNzd29yZCI6ICJ0ZXN0cGFzc3dvcmQiLAorICAgICAgICAgICAgICAg
ICJmcmFnbWVudCI6ICIiCisgICAgICAgICAgICB9IH0gfSwKKyAgICAgICAgICAgICJ0cmlnZ2Vy
IjogeyAidXJsLWZpbHRlciI6ICI2LnR4dCIgfQorICAgICAgICB9LCB7CisgICAgICAgICAgICAi
YWN0aW9uIjogeyAidHlwZSI6ICJyZWRpcmVjdCIsICJyZWRpcmVjdCI6IHsgInRyYW5zZm9ybSI6
IHsKKyAgICAgICAgICAgICAgICAicXVlcnkiOiAiPyIsCisgICAgICAgICAgICAgICAgImZyYWdt
ZW50IjogIiMiCisgICAgICAgICAgICB9IH0gfSwKKyAgICAgICAgICAgICJ0cmlnZ2VyIjogeyAi
dXJsLWZpbHRlciI6ICI3LnR4dCIgfQorICAgICAgICB9LCB7CisgICAgICAgICAgICAiYWN0aW9u
IjogeyAidHlwZSI6ICJyZWRpcmVjdCIsICJyZWRpcmVjdCI6IHsgInRyYW5zZm9ybSI6IHsKKyAg
ICAgICAgICAgICAgICAicXVlcnktdHJhbnNmb3JtIjogeworICAgICAgICAgICAgICAgICAgICAi
cmVtb3ZlLXBhcmFtZXRlcnMiOiBbICJwYXJhbWV0ZXItdG8tcmVtb3ZlIiBdLAorICAgICAgICAg
ICAgICAgICAgICAiYWRkLW9yLXJlcGxhY2UtcGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHsgImtleSI6ICJrZXktdG8tYWRkIiwgInZhbHVlIjogInZhbHVlLXRvLWFkZCIg
fSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgImtleSI6ICJrZXktdG8tcmVwbGFjZS1vbmx5
IiwgInZhbHVlIjogInZhbHVlLXRvLXJlcGxhY2Utb25seSIsICJyZXBsYWNlLW9ubHkiOiB0cnVl
IH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7ICJrZXkiOiAia2V5LXRvLXJlcGxhY2Utb25s
eS1idXQtbm90LWZvdW5kIiwgInZhbHVlIjogInZhbHVlLXRvLXJlcGxhY2Utb25seS1idXQtbm90
LWZvdW5kIiwgInJlcGxhY2Utb25seSI6IHRydWUgfQorICAgICAgICAgICAgICAgICAgICBdCisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSB9IH0sCisgICAgICAgICAgICAidHJpZ2dl
ciI6IHsgInVybC1maWx0ZXIiOiAiOC50eHQiIH0KKyAgICAgICAgfSBdCisgICAgKUpTT04iKTsK
KworICAgIF9fYmxvY2sgYm9vbCByZWNlaXZlZEFsbFJlcXVlc3RzIHsgZmFsc2UgfTsKKyAgICBf
X2Jsb2NrIGF1dG8gdXJscyA9IGFkb3B0TlMoW05TTXV0YWJsZUFycmF5IG5ld10pOworICAgIGF1
dG8gaGFuZGxlciA9IGFkb3B0TlMoW1Rlc3RVUkxTY2hlbWVIYW5kbGVyIG5ld10pOworICAgIGhh
bmRsZXIuZ2V0KCkuc3RhcnRVUkxTY2hlbWVUYXNrSGFuZGxlciA9IF4oV0tXZWJWaWV3ICosIGlk
IDxXS1VSTFNjaGVtZVRhc2s+IHRhc2spIHsKKyAgICAgICAgTlNVUkwgKnVybCA9IHRhc2sucmVx
dWVzdC5VUkw7CisgICAgICAgIFt1cmxzIGFkZE9iamVjdDp1cmxdOworICAgICAgICBOU1N0cmlu
ZyAqcGF0aCA9IHVybC5wYXRoOworICAgICAgICBpZiAoW3BhdGggaXNFcXVhbFRvU3RyaW5nOkAi
L21haW4uaHRtbCJdKSB7CisgICAgICAgICAgICByZXR1cm4gcmVzcG9uZCh0YXNrLCBSIkhUTUwo
CisgICAgICAgICAgICAgICAgPHNjcmlwdD4KKyAgICAgICAgICAgICAgICAgICAgYXN5bmMgZnVu
Y3Rpb24gZmV0Y2hTdWJyZXNvdXJjZXMoKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0cnkgeyBhd2FpdCBmZXRjaCgnMS50eHQnKSB9IGNhdGNoKGUpIHsg
fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7IGF3YWl0IGZldGNoKCcvL25vdC10ZXN0
aG9zdC1zaG91bGQtbm90LXRyaWdnZXItYWN0aW9uLzIudHh0Jywge21vZGU6J25vLWNvcnMnfSkg
fSBjYXRjaChlKSB7IH07CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeyBhd2FpdCBmZXRj
aCgnLy90ZXN0aG9zdC8yLnR4dCcpIH0gY2F0Y2goZSkgeyB9OworICAgICAgICAgICAgICAgICAg
ICAgICAgdHJ5IHsgYXdhaXQgZmV0Y2goJy8zLnR4dD9xdWVyeS1zaG91bGQtbm90LWJlLXJlbW92
ZWQnKSB9IGNhdGNoKGUpIHsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7IGF3YWl0
IGZldGNoKCcvL3Rlc3Rob3N0OjgwLzQudHh0I2ZyYWdtZW50LXNob3VsZC1ub3QtYmUtcmVtb3Zl
ZCcpIH0gY2F0Y2goZSkgeyB9OworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsgYXdhaXQg
ZmV0Y2goJzUudHh0P3F1ZXJ5LXNob3VsZC1iZS1yZW1vdmVkJykgfSBjYXRjaChlKSB7IH07Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0cnkgeyBhd2FpdCBmZXRjaCgnNi50eHQjZnJhZ21lbnQt
c2hvdWxkLWJlLXJlbW92ZWQnKSB9IGNhdGNoKGUpIHsgfTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRyeSB7IGF3YWl0IGZldGNoKCc3LnR4dCcpIH0gY2F0Y2goZSkgeyB9OworICAgICAgICAg
ICAgICAgICAgICAgICAgdHJ5IHsgYXdhaXQgZmV0Y2goJzgudHh0P2tleS10by1yZXBsYWNlLW9u
bHk9cHJlLXJlcGxhY2VtZW50LXZhbHVlJykgfSBjYXRjaChlKSB7IH07CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZmV0Y2hTdWJyZXNvdXJjZXMoKTsKKyAgICAg
ICAgICAgICAgICA8L3NjcmlwdD4KKyAgICAgICAgICAgIClIVE1MIik7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKFtwYXRoIGlzRXF1YWxUb1N0cmluZzpAIi84LnR4dCJdKQorICAgICAgICAgICAg
cmVjZWl2ZWRBbGxSZXF1ZXN0cyA9IHRydWU7CisgICAgICAgIHJlc3BvbmQodGFzaywgIiIpOwor
ICAgIH07CisKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtXS1dlYlZpZXdDb25m
aWd1cmF0aW9uIG5ld10pOworICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xs
ZXJdIGFkZENvbnRlbnRSdWxlTGlzdDpsaXN0LmdldCgpXTsKKyAgICBbY29uZmlndXJhdGlvbiBz
ZXRVUkxTY2hlbWVIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgZm9yVVJMU2NoZW1lOkAidGVzdHNjaGVt
ZSJdOworICAgIFtjb25maWd1cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6aGFuZGxlci5nZXQo
KSBmb3JVUkxTY2hlbWU6QCJvdGhlcnRlc3RzY2hlbWUiXTsKKyAgICBhdXRvIHdlYlZpZXcgPSBh
ZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TWmVyb1JlY3QgY29uZmln
dXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CisgICAgd2ViVmlldy5nZXQoKS5uYXZpZ2F0
aW9uRGVsZWdhdGUgPSBuYXZpZ2F0aW9uRGVsZWdhdGVBbGxvd2luZ0FjdGl2ZUFjdGlvbnNPblRl
c3RIb3N0KCkuZ2V0KCk7CisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCBy
ZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAInRlc3RzY2hlbWU6Ly90ZXN0aG9z
dC9tYWluLmh0bWwiXV1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRB
bGxSZXF1ZXN0cyk7CisKKyAgICBWZWN0b3I8Y29uc3QgY2hhcio+IGV4cGVjdGVkUmVxdWVzdGVk
VVJMcyB7CisgICAgICAgICJ0ZXN0c2NoZW1lOi8vdGVzdGhvc3QvbWFpbi5odG1sIiwKKyAgICAg
ICAgIm90aGVydGVzdHNjaGVtZTovL25vdC10ZXN0aG9zdC8xLXJlZGlyZWN0ZWQudHh0IiwKKyAg
ICAgICAgInRlc3RzY2hlbWU6Ly9ub3QtdGVzdGhvc3Qtc2hvdWxkLW5vdC10cmlnZ2VyLWFjdGlv
bi8yLnR4dCIsCisgICAgICAgICJ0ZXN0c2NoZW1lOi8vbmV3dXNlcm5hbWVAbmV3aG9zdDo0NDMv
My50eHQ/cXVlcnktc2hvdWxkLW5vdC1iZS1yZW1vdmVkIiwKKyAgICAgICAgIm90aGVydGVzdHNj
aGVtZTovL3Rlc3Rob3N0LzQudHh0P2tleT12YWx1ZSNmcmFnbWVudC1zaG91bGQtbm90LWJlLXJl
bW92ZWQiLAorICAgICAgICAidGVzdHNjaGVtZTovLzp0ZXN0cGFzc3dvcmRAdGVzdGhvc3QvNS50
eHQjZnJhZ21lbnQtdG8tYmUtYWRkZWQiLAorICAgICAgICAidGVzdHNjaGVtZTovLzp0ZXN0cGFz
c3dvcmRAdGVzdGhvc3QvNi50eHQiLAorICAgICAgICAidGVzdHNjaGVtZTovL3Rlc3Rob3N0Lzcu
dHh0PyMiLAorICAgICAgICAidGVzdHNjaGVtZTovL3Rlc3Rob3N0LzgudHh0P2tleS10by1yZXBs
YWNlLW9ubHk9dmFsdWUtdG8tcmVwbGFjZS1vbmx5JmtleS10by1hZGQ9dmFsdWUtdG8tYWRkIiwK
KyAgICB9OworICAgIEVYUEVDVF9FUShleHBlY3RlZFJlcXVlc3RlZFVSTHMuc2l6ZSgpLCBbdXJs
cyBjb3VudF0pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZXhwZWN0ZWRSZXF1ZXN0ZWRV
UkxzLnNpemUoKTsgaSsrKQorICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoZXhwZWN0ZWRSZXF1ZXN0
ZWRVUkxzW2ldLCBbW3VybHMgb2JqZWN0QXRJbmRleDppXSBhYnNvbHV0ZVN0cmluZ10pOworfQor
CitURVNUX0YoV0tDb250ZW50UnVsZUxpc3RTdG9yZVRlc3QsIE51bGxQYXR0ZXJuU2V0KQorewor
ICAgIGF1dG8gbGlzdCA9IGNvbXBpbGVDb250ZW50UnVsZUxpc3QoUiJKU09OKAorICAgICAgICBb
IHsKKyAgICAgICAgICAgICJhY3Rpb24iOiB7ICJ0eXBlIjogInJlZGlyZWN0IiwgInJlZGlyZWN0
IjogeworICAgICAgICAgICAgICAgICJ1cmwiOiAidGVzdHNjaGVtZTovL3Rlc3Rob3N0L21haW4t
cmVkaXJlY3RlZC5odG1sIgorICAgICAgICAgICAgfSB9LAorICAgICAgICAgICAgInRyaWdnZXIi
OiB7ICJ1cmwtZmlsdGVyIjogIm1haW4uaHRtbCIgfQorICAgICAgICB9IF0KKyAgICApSlNPTiIp
OworCisgICAgX19ibG9jayBzdGQ6Om9wdGlvbmFsPGJvb2w+IHJlZGlyZWN0ZWRSZXN1bHQ7Cisg
ICAgYXV0byBoYW5kbGVyID0gYWRvcHROUyhbVGVzdFVSTFNjaGVtZUhhbmRsZXIgbmV3XSk7Cisg
ICAgaGFuZGxlci5nZXQoKS5zdGFydFVSTFNjaGVtZVRhc2tIYW5kbGVyID0gXihXS1dlYlZpZXcg
KiwgaWQgPFdLVVJMU2NoZW1lVGFzaz4gdGFzaykgeworICAgICAgICBOU1N0cmluZyAqcGF0aCA9
IHRhc2sucmVxdWVzdC5VUkwucGF0aDsKKyAgICAgICAgaWYgKFtwYXRoIGlzRXF1YWxUb1N0cmlu
ZzpAIi9tYWluLmh0bWwiXSkKKyAgICAgICAgICAgIHJlZGlyZWN0ZWRSZXN1bHQgPSBmYWxzZTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBFWFBFQ1RfV0tfU1RSRVEocGF0aCwgIi9tYWlu
LXJlZGlyZWN0ZWQuaHRtbCIpOworICAgICAgICAgICAgcmVkaXJlY3RlZFJlc3VsdCA9IHRydWU7
CisgICAgICAgIH0KKyAgICAgICAgcmVzcG9uZCh0YXNrLCAiIik7CisgICAgfTsKKworICAgIF9f
YmxvY2sgZW51bSBjbGFzcyBEZWxlZ2F0ZUFjdGlvbiA6IHVpbnQ4X3QgeworICAgICAgICBBbGxv
d0FsbCwKKyAgICAgICAgQWxsb3dOb25lLAorICAgICAgICBBbGxvd1Rlc3RIb3N0LAorICAgIH0g
ZGVsZWdhdGVBY3Rpb247CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1Rlc3ROYXZpZ2F0
aW9uRGVsZWdhdGUgbmV3XSk7CisgICAgZGVsZWdhdGUuZ2V0KCkuZGVjaWRlUG9saWN5Rm9yTmF2
aWdhdGlvbkFjdGlvbldpdGhQcmVmZXJlbmNlcyA9IF4oV0tOYXZpZ2F0aW9uQWN0aW9uICosIFdL
V2VicGFnZVByZWZlcmVuY2VzICpwcmVmZXJlbmNlcywgdm9pZCAoXmRlY2lzaW9uSGFuZGxlciko
V0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5LCBXS1dlYnBhZ2VQcmVmZXJlbmNlcyAqKSkgeworICAg
ICAgICBFWFBFQ1RfTk9UX05VTEwocHJlZmVyZW5jZXMuX2FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFj
dGlvbnNQYXR0ZXJucyk7CisgICAgICAgIEVYUEVDVF9FUShwcmVmZXJlbmNlcy5fYWN0aXZlQ29u
dGVudFJ1bGVMaXN0QWN0aW9uc1BhdHRlcm5zLmNvdW50LCAwdSk7CisgICAgICAgIHN3aXRjaCAo
ZGVsZWdhdGVBY3Rpb24pIHsKKyAgICAgICAgY2FzZSBEZWxlZ2F0ZUFjdGlvbjo6QWxsb3dBbGw6
CisgICAgICAgICAgICBwcmVmZXJlbmNlcy5fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc1Bh
dHRlcm5zID0gbmlsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRGVsZWdhdGVB
Y3Rpb246OkFsbG93Tm9uZToKKyAgICAgICAgICAgIHByZWZlcmVuY2VzLl9hY3RpdmVDb250ZW50
UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMgPSBbTlNTZXQgc2V0XTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIERlbGVnYXRlQWN0aW9uOjpBbGxvd1Rlc3RIb3N0OgorICAgICAgICAg
ICAgcHJlZmVyZW5jZXMuX2FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNQYXR0ZXJucyA9IFtO
U1NldCBzZXRXaXRoT2JqZWN0OkAiKjovL3Rlc3Rob3N0LyoiXTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGRlY2lzaW9uSGFuZGxlcihXS05hdmlnYXRpb25BY3Rpb25Q
b2xpY3lBbGxvdywgcHJlZmVyZW5jZXMpOworICAgIH07CisKKyAgICBhdXRvIGNvbmZpZ3VyYXRp
b24gPSBhZG9wdE5TKFtXS1dlYlZpZXdDb25maWd1cmF0aW9uIG5ld10pOworICAgIFtbY29uZmln
dXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZENvbnRlbnRSdWxlTGlzdDpsaXN0Lmdl
dCgpXTsKKyAgICBbY29uZmlndXJhdGlvbiBzZXRVUkxTY2hlbWVIYW5kbGVyOmhhbmRsZXIuZ2V0
KCkgZm9yVVJMU2NoZW1lOkAidGVzdHNjaGVtZSJdOworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0
TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNaZXJvUmVjdCBjb25maWd1cmF0
aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICB3ZWJWaWV3LmdldCgpLm5hdmlnYXRpb25E
ZWxlZ2F0ZSA9IGRlbGVnYXRlLmdldCgpOworCisgICAgYXV0byBnZXRSZWRpcmVjdFJlc3VsdCA9
IF4oRGVsZWdhdGVBY3Rpb24gYWN0aW9uKSB7CisgICAgICAgIGRlbGVnYXRlQWN0aW9uID0gYWN0
aW9uOworICAgICAgICByZWRpcmVjdGVkUmVzdWx0ID0gc3RkOjpudWxsb3B0OworICAgICAgICBb
d2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBV
UkxXaXRoU3RyaW5nOkAidGVzdHNjaGVtZTovL3Rlc3Rob3N0L21haW4uaHRtbCJdXV07CisgICAg
ICAgIHdoaWxlICghcmVkaXJlY3RlZFJlc3VsdCkKKyAgICAgICAgICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnNwaW5SdW5Mb29wKCk7CisgICAgICAgIHJldHVybiAqcmVkaXJlY3RlZFJlc3VsdDsK
KyAgICB9OworICAgIEVYUEVDVF9UUlVFKGdldFJlZGlyZWN0UmVzdWx0KERlbGVnYXRlQWN0aW9u
OjpBbGxvd0FsbCkpOworICAgIEVYUEVDVF9GQUxTRShnZXRSZWRpcmVjdFJlc3VsdChEZWxlZ2F0
ZUFjdGlvbjo6QWxsb3dOb25lKSk7CisgICAgRVhQRUNUX1RSVUUoZ2V0UmVkaXJlY3RSZXN1bHQo
RGVsZWdhdGVBY3Rpb246OkFsbG93VGVzdEhvc3QpKTsKK30KSW5kZXg6IFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0JKHJldmlzaW9u
IDI4NTk1NCkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENvbnRyb2xsZXJD
b2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjY0LDYgKzI2NCw3IEBAIHZvaWQgVGVzdENvbnRy
b2xsZXI6OnNldERlZmF1bHRDYWxlbmRhclQKICAgICAgICAgbV9jYWxlbmRhclN3aXp6bGVyID0g
bWFrZVVuaXF1ZTxDbGFzc01ldGhvZFN3aXp6bGVyPihbTlNDYWxlbmRhciBjbGFzc10sIEBzZWxl
Y3RvcihjdXJyZW50Q2FsZW5kYXIpLCByZWludGVycHJldF9jYXN0PElNUD4oc3dpenpsZWRDYWxl
bmRhcikpOwogfQogCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKIHZvaWQgVGVzdENv
bnRyb2xsZXI6OnJlc2V0Q29udGVudEV4dGVuc2lvbnMoKQogewogICAgIF9fYmxvY2sgYm9vbCBk
b25lUmVtb3ZpbmcgPSBmYWxzZTsKQEAgLTI3OCw2ICsyNzksNyBAQCB2b2lkIFRlc3RDb250cm9s
bGVyOjpyZXNldENvbnRlbnRFeHRlbnNpCiAgICAgICAgIFtwbGF0Zm9ybVZpZXcuY29uZmlndXJh
dGlvbi51c2VyQ29udGVudENvbnRyb2xsZXIgX3JlbW92ZUFsbFVzZXJDb250ZW50RmlsdGVyc107
CiAgICAgfQogfQorI2VuZGlmCiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldEFwcGxpY2F0aW9u
QnVuZGxlSWRlbnRpZmllcihjb25zdCBzdGQ6OnN0cmluZyYgYnVuZGxlSWRlbnRpZmllcikKIHsK
SW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1Rlc3RDb250cm9sbGVyTWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1Rlc3RDb250cm9sbGVyTWFj
Lm1tCShyZXZpc2lvbiAyODU5NTQpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9UZXN0
Q29udHJvbGxlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTc1LDYgKzE3NSw3IEBAIFRlc3RG
ZWF0dXJlcyBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1TcGUKICAgICByZXR1cm4gZmVhdHVyZXM7
CiB9CiAKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogdm9pZCBUZXN0Q29udHJvbGxl
cjo6Y29uZmlndXJlQ29udGVudEV4dGVuc2lvbkZvclRlc3QoY29uc3QgVGVzdEludm9jYXRpb24m
IHRlc3QpCiB7CiAgICAgaWYgKCF0ZXN0LnVybENvbnRhaW5zKCJjb250ZW50ZXh0ZW5zaW9ucy8i
KSkKQEAgLTIxNiw2ICsyMTcsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpjb25maWd1cmVDb250
ZW50RXh0CiAgICAgfV07CiAgICAgcGxhdGZvcm1SdW5VbnRpbChkb25lQ29tcGlsaW5nLCBub1Rp
bWVvdXQpOwogfQorI2VuZGlmCiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQ29uZmln
dXJlVmlld0ZvclRlc3QoY29uc3QgVGVzdEludm9jYXRpb24mIHRlc3QpCiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444612</attachid>
            <date>2021-11-17 17:06:35 -0800</date>
            <delta_ts>2021-11-17 20:21:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233268-20211117170634.patch</filename>
            <type>text/plain</type>
            <size>113103</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NTk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBACisyMDIxLTExLTE3ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50
IG1vc3Qgb2YgcmVkaXJlY3QgYW5kIG1vZGlmeS1oZWFkZXJzIGFjdGlvbiB0eXBlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzMjY4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCisKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRzIG1v
ZGlmeS1oZWFkZXJzIGFuZCByZWRpcmVjdCBhY3Rpb25zIGV4Y2VwdCBmb3IgZXh0ZW5zaW9uLXBh
dGggYW5kIHJlZ2V4LXN1YnN0aXR1dGlvbiB2YXJpYW50cyBvZiByZWRpcmVjdGluZywKKyAgICAg
ICAgd2hpY2ggYXJlIGJpZyBlbm91Z2ggdG8gYmUgaW1wbGVtZW50ZWQgaW4gdGhlaXIgb3duIHBh
dGNoLiAgSW4gb3JkZXIgdG8gZW5hYmxlIHRoZXNlIGFjdGlvbnMsIHRoZSBXS0NvbnRlbnRSdWxl
TGlzdCBuZWVkcyB0bworICAgICAgICBiZSBjb21waWxlZCB3aXRoIG5ldyBTUEkgd2hlcmUgeW91
IHNwZWNpZnkgd2hpY2ggc2NoZW1lcyBhcmUgYWxsb3dlZCB0byBiZSByZWRpcmVjdGVkIHRvLCBh
bmQgU1BJIGluIFdLV2VicGFnZVByZWZlcmVuY2VzIGFsbG93cworICAgICAgICBhZGRpdGlvbiBv
ZiBhIHNldCBvZiBwYXR0ZXJucyB0byBzcGVjaWZ5IHdoaWNoIFVSTHMgYXJlIGFsbG93ZWQgdG8g
YmUgbW9kaWZpZWQuICBBbiBlbXB0eSBzZXQgbWVhbnMgbm8gYWN0aXZlIGFjdGlvbnMgYXJlIGFs
bG93ZWQsCisgICAgICAgIHdoaWNoIGlzIHRoZSBkZWZhdWx0LCB3aGVyZWFzIGEgbnVsbCBzZXQg
bWVhbnMgYWxsIGFjdGl2ZSBhY3Rpb25zIGFyZSBhbGxvd2VkLgorCisgICAgICAgIEkgYWxzbyBt
YWRlIHRoZSBwYXJzZXIgYSBsaXR0bGUgYml0IHN0cmljdGVyLCBzdWNoIGFzIG9ubHkgYWxsb3dp
bmcgdmFsaWQgcG9ydHMsIHF1ZXJpZXMsIGFuZCBmcmFnbWVudHMuCisKKyAgICAgICAgKiBNb2R1
bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHA6CisgICAgICAgICogY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkFjdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGVudEV4dGVuc2lvbnM6Ok1vZGlmeUhlYWRlcnNBY3Rpb246Om9wZXJhdG9yPT0gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Ok1vZGlmeUhlYWRlcnNBY3Rp
b246OmFwcGx5VG9SZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpNb2RpZnlIZWFkZXJzQWN0aW9uOjpNb2RpZnlIZWFkZXJJbmZvOjphcHBseVRvUmVxdWVzdCk6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6UmVkaXJlY3RBY3Rpb246OnBh
cnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpSZWRpcmVjdEFjdGlv
bjo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6UmVkaXJlY3RBY3Rpb246OmFwcGx5VG9SZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpSZWRpcmVjdEFjdGlvbjo6VVJMVHJhbnNmb3JtQWN0aW9uOjpwYXJz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6UmVkaXJlY3RBY3Rpb246
OlVSTFRyYW5zZm9ybUFjdGlvbjo6c2VyaWFsaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRFeHRlbnNpb25zOjpSZWRpcmVjdEFjdGlvbjo6VVJMVHJhbnNmb3JtQWN0aW9uOjpk
ZXNlcmlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6UmVkaXJl
Y3RBY3Rpb246OlVSTFRyYW5zZm9ybUFjdGlvbjo6YXBwbHlUb1VSTCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6UmVkaXJlY3RBY3Rpb246OlVSTFRyYW5zZm9y
bUFjdGlvbjo6UXVlcnlUcmFuc2Zvcm06OmFwcGx5VG9VUkwgY29uc3QpOgorICAgICAgICAqIGNv
bnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25BY3Rpb25zLmg6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VmFyaWFudEhhc2hlcjo6aGFzaCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VmVjdG9ySGFzaGVyOjpoYXNoKToKKyAgICAgICAg
KFdURjo6RGVmYXVsdEhhc2g8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlJlZGlyZWN0QWN0
aW9uPjo6aGFzaCk6CisgICAgICAgIChXVEY6OkRlZmF1bHRIYXNoPFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpSZWRpcmVjdEFjdGlvbj46OmVxdWFsKToKKyAgICAgICAgKFdURjo6RGVmYXVs
dEhhc2g8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Ok1vZGlmeUhlYWRlcnNBY3Rpb24+Ojpo
YXNoKToKKyAgICAgICAgKFdURjo6RGVmYXVsdEhhc2g8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6Ok1vZGlmeUhlYWRlcnNBY3Rpb24+OjplcXVhbCk6CisgICAgICAgICogY29udGVudGV4dGVu
c2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpzZXJpYWxpemVBY3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpjb21waWxlUnVsZUxpc3QpOgorICAgICAgICAqIGNvbnRlbnRleHRl
bnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6Y29udGVudEV4dGVuc2lvbkVycm9yQ2F0ZWdvcnkpOgorICAgICAgICAq
IGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5oOgorICAgICAgICAqIGNv
bnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmxvYWRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGVudEV4dGVuc2lvbnM6OmxvYWRSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpsb2FkRW5jb2RlZFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpwYXJzZVJ1bGVMaXN0KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uUGFyc2VyLmg6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29u
dGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OnByb2Nlc3NDb250ZW50UnVsZUxpc3Rz
Rm9yTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4
dGVuc2lvbnNCYWNrZW5kOjpwcm9jZXNzQ29udGVudFJ1bGVMaXN0c0ZvclBpbmdMb2FkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjphcHBseVJlc3VsdHNUb1JlcXVlc3Qp
OgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRSdWxlTGlzdFJlc3VsdHMuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRSdWxlTGlzdFJlc3VsdHM6OlN1bW1hcnk6OmRlY29k
ZSk6CisgICAgICAgICogY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHA6CisgICAgICAgICogbG9h
ZGVyL0RvY3VtZW50TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVy
OjpzZXRBY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMpOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnRMb2FkZXI6OmFsbG93c0FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNG
b3JVUkwgY29uc3QpOgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpyZW1vdmVIVFRQSGVhZGVyRmllbGQpOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oOgorCiAyMDIxLTEx
LTE3ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIExvY2tz
IEFQSSBkb2VzIGdldCBlbmFibGVkIGluIFNlcnZpY2UgV29ya2VycyB3aGVuIHJ1bm5pbmcgbGF5
b3V0IHRlc3RzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29j
a2V0Q2hhbm5lbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJz
b2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJXZWJTb2NrZXRDaGFubmVsLmgiCiAK
ICNpbmNsdWRlICJCbG9iLmgiCi0jaW5jbHVkZSAiQ29udGVudFJ1bGVMaXN0UmVzdWx0cy5oIgog
I2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
Q29udGVudEV4dGVuc2lvbkFjdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25BY3Rpb25zLmNwcAkocmV2aXNpb24g
Mjg1OTU0KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVu
c2lvbkFjdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw4IEBACiAjaW5jbHVk
ZSAiQ29udGVudEV4dGVuc2lvbkVycm9yLmgiCiAjaW5jbHVkZSA8d3RmL0Nyb3NzVGhyZWFkQ29w
aWVyLmg+CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgorI2luY2x1ZGUgPHd0Zi9VUkxQYXJzZXIuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdUb0ludGVnZXJDb252ZXJzaW9uLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9ucyB7CiAKQEAgLTEyMSw3ICsxMjMsOCBAQCBN
b2RpZnlIZWFkZXJzQWN0aW9uIE1vZGlmeUhlYWRlcnNBY3Rpb246CiAKIGJvb2wgTW9kaWZ5SGVh
ZGVyc0FjdGlvbjo6b3BlcmF0b3I9PShjb25zdCBNb2RpZnlIZWFkZXJzQWN0aW9uJiBvdGhlcikg
Y29uc3QKIHsKLSAgICByZXR1cm4gb3RoZXIucmVxdWVzdEhlYWRlcnMgPT0gdGhpcy0+cmVxdWVz
dEhlYWRlcnMKKyAgICByZXR1cm4gb3RoZXIuaGFzaFRhYmxlVHlwZSA9PSB0aGlzLT5oYXNoVGFi
bGVUeXBlCisgICAgICAgICYmIG90aGVyLnJlcXVlc3RIZWFkZXJzID09IHRoaXMtPnJlcXVlc3RI
ZWFkZXJzCiAgICAgICAgICYmIG90aGVyLnJlc3BvbnNlSGVhZGVycyA9PSB0aGlzLT5yZXNwb25z
ZUhlYWRlcnM7CiB9CiAKQEAgLTE2Niw2ICsxNjksMjcgQEAgc2l6ZV90IE1vZGlmeUhlYWRlcnNB
Y3Rpb246OnNlcmlhbGl6ZWRMZQogICAgIHJldHVybiBkZXNlcmlhbGl6ZUxlbmd0aChzcGFuLCAw
KTsKIH0KIAordm9pZCBNb2RpZnlIZWFkZXJzQWN0aW9uOjphcHBseVRvUmVxdWVzdChSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgZm9yIChhdXRvJiBpbmZvIDogcmVxdWVzdEhlYWRl
cnMpCisgICAgICAgIGluZm8uYXBwbHlUb1JlcXVlc3QocmVxdWVzdCk7Cit9CisKK3ZvaWQgTW9k
aWZ5SGVhZGVyc0FjdGlvbjo6TW9kaWZ5SGVhZGVySW5mbzo6YXBwbHlUb1JlcXVlc3QoUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHN0ZDo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihb
Jl0gKGNvbnN0IEFwcGVuZE9wZXJhdGlvbiYgb3BlcmF0aW9uKSB7CisgICAgICAgIGF1dG8gZXhp
c3RpbmdWYWx1ZSA9IHJlcXVlc3QuaHR0cEhlYWRlckZpZWxkKG9wZXJhdGlvbi5oZWFkZXIpOwor
ICAgICAgICBpZiAoZXhpc3RpbmdWYWx1ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXF1ZXN0
LnNldEhUVFBIZWFkZXJGaWVsZChvcGVyYXRpb24uaGVhZGVyLCBvcGVyYXRpb24udmFsdWUpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChvcGVy
YXRpb24uaGVhZGVyLCBtYWtlU3RyaW5nKGV4aXN0aW5nVmFsdWUsICI7ICIsIG9wZXJhdGlvbi52
YWx1ZSkpOworICAgIH0sIFsmXSAoY29uc3QgU2V0T3BlcmF0aW9uJiBvcGVyYXRpb24pIHsKKyAg
ICAgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQob3BlcmF0aW9uLmhlYWRlciwgb3BlcmF0
aW9uLnZhbHVlKTsKKyAgICB9LCBbJl0gKGNvbnN0IFJlbW92ZU9wZXJhdGlvbiYgb3BlcmF0aW9u
KSB7CisgICAgICAgIHJlcXVlc3QucmVtb3ZlSFRUUEhlYWRlckZpZWxkKG9wZXJhdGlvbi5oZWFk
ZXIpOworICAgIH0pLCBvcGVyYXRpb24pOworfQorCiBhdXRvIE1vZGlmeUhlYWRlcnNBY3Rpb246
Ok1vZGlmeUhlYWRlckluZm86OnBhcnNlKGNvbnN0IEpTT046OlZhbHVlJiBpbmZvVmFsdWUpIC0+
IEV4cGVjdGVkPE1vZGlmeUhlYWRlckluZm8sIHN0ZDo6ZXJyb3JfY29kZT4KIHsKICAgICBhdXRv
IG9iamVjdCA9IGluZm9WYWx1ZS5hc09iamVjdCgpOwpAQCAtMjU1LDcgKzI3OSw3IEBAIHNpemVf
dCBNb2RpZnlIZWFkZXJzQWN0aW9uOjpNb2RpZnlIZWFkZXIKICAgICByZXR1cm4gZGVzZXJpYWxp
emVMZW5ndGgoc3BhbiwgMCk7CiB9CiAKLUV4cGVjdGVkPFJlZGlyZWN0QWN0aW9uLCBzdGQ6OmVy
cm9yX2NvZGU+IFJlZGlyZWN0QWN0aW9uOjpwYXJzZShjb25zdCBKU09OOjpPYmplY3QmIHJlZGly
ZWN0T2JqZWN0LCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGFsbG93ZWRSZWRpcmVjdFVSTFNjaGVt
ZXMpCitFeHBlY3RlZDxSZWRpcmVjdEFjdGlvbiwgc3RkOjplcnJvcl9jb2RlPiBSZWRpcmVjdEFj
dGlvbjo6cGFyc2UoY29uc3QgSlNPTjo6T2JqZWN0JiByZWRpcmVjdE9iamVjdCwgY29uc3Qgc3Rk
OjpvcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+JiBhbGxvd2VkUmVkaXJlY3RVUkxTY2hlbWVzKQog
ewogICAgIGF1dG8gcmVkaXJlY3QgPSByZWRpcmVjdE9iamVjdC5nZXRPYmplY3QoInJlZGlyZWN0
Iik7CiAgICAgaWYgKCFyZWRpcmVjdCkKQEAgLTI3NywxMCArMzAxLDEzIEBAIEV4cGVjdGVkPFJl
ZGlyZWN0QWN0aW9uLCBzdGQ6OmVycm9yX2NvZGUKICAgICAgICAgcmV0dXJuIFJlZGlyZWN0QWN0
aW9uIHsgV1RGTW92ZSgqcGFyc2VkVHJhbnNmb3JtKSB9OwogICAgIH0KIAotICAgIGlmIChhdXRv
IHVybCA9IHJlZGlyZWN0LT5nZXRTdHJpbmcoInVybCIpOyAhIXVybCkgewotICAgICAgICBpZiAo
IWFsbG93ZWRSZWRpcmVjdFVSTFNjaGVtZXMuY29udGFpbnMoVVJMKFVSTCgpLCB1cmwpLnByb3Rv
Y29sKCkudG9TdHJpbmdXaXRob3V0Q29weWluZygpKSkKKyAgICBpZiAoYXV0byB1cmxTdHJpbmcg
PSByZWRpcmVjdC0+Z2V0U3RyaW5nKCJ1cmwiKTsgISF1cmxTdHJpbmcpIHsKKyAgICAgICAgYXV0
byB1cmwgPSBVUkwoVVJMKCksIHVybFN0cmluZyk7CisgICAgICAgIGlmICghdXJsLmlzVmFsaWQo
KSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJy
b3I6OkpTT05SZWRpcmVjdFVSTEludmFsaWQpOworICAgICAgICBpZiAoYWxsb3dlZFJlZGlyZWN0
VVJMU2NoZW1lcyAmJiAhYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcy0+Y29udGFpbnModXJsLnBy
b3RvY29sKCkudG9TdHJpbmdXaXRob3V0Q29weWluZygpKSkKICAgICAgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTFNjaGVt
ZU5vdEFsbG93ZWQpOwotICAgICAgICByZXR1cm4gUmVkaXJlY3RBY3Rpb24geyBVUkxBY3Rpb24g
eyBXVEZNb3ZlKHVybCkgfSB9OworICAgICAgICByZXR1cm4gUmVkaXJlY3RBY3Rpb24geyBVUkxB
Y3Rpb24geyBXVEZNb3ZlKHVybFN0cmluZykgfSB9OwogICAgIH0KIAogICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdEludmFsaWRUeXBl
KTsKQEAgLTI5NSw3ICszMjIsOCBAQCBSZWRpcmVjdEFjdGlvbiBSZWRpcmVjdEFjdGlvbjo6aXNv
bGF0ZWRDCiAKIGJvb2wgUmVkaXJlY3RBY3Rpb246Om9wZXJhdG9yPT0oY29uc3QgUmVkaXJlY3RB
Y3Rpb24mIG90aGVyKSBjb25zdAogewotICAgIHJldHVybiBvdGhlci5hY3Rpb24gPT0gdGhpcy0+
YWN0aW9uOworICAgIHJldHVybiBvdGhlci5oYXNoVGFibGVUeXBlID09IHRoaXMtPmhhc2hUYWJs
ZVR5cGUKKyAgICAgICAgJiYgb3RoZXIuYWN0aW9uID09IHRoaXMtPmFjdGlvbjsKIH0KIAogdm9p
ZCBSZWRpcmVjdEFjdGlvbjo6c2VyaWFsaXplKFZlY3Rvcjx1aW50OF90PiYgdmVjdG9yKSBjb25z
dApAQCAtMzQwLDI2ICszNjgsNjQgQEAgc2l6ZV90IFJlZGlyZWN0QWN0aW9uOjpzZXJpYWxpemVk
TGVuZ3RoKAogICAgIHJldHVybiBkZXNlcmlhbGl6ZUxlbmd0aChzcGFuLCAwKTsKIH0KIAotYXV0
byBSZWRpcmVjdEFjdGlvbjo6VVJMVHJhbnNmb3JtQWN0aW9uOjpwYXJzZShjb25zdCBKU09OOjpP
YmplY3QmIHRyYW5zZm9ybSwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhbGxvd2VkUmVkaXJlY3RV
UkxTY2hlbWVzKSAtPiBFeHBlY3RlZDxVUkxUcmFuc2Zvcm1BY3Rpb24sIHN0ZDo6ZXJyb3JfY29k
ZT4KK3ZvaWQgUmVkaXJlY3RBY3Rpb246OmFwcGx5VG9SZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCkKK3sKKyAgICBzdGQ6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oY29uc3QgRXh0
ZW5zaW9uUGF0aEFjdGlvbiYpIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudC4gV2UgbmVl
ZCB0byBrbm93IHRoZSBiYXNlIFVSTCBvZiB0aGUgZXh0ZW5zaW9uIGhlcmUgZnJvbSBuZXcgU1BJ
LgorICAgIH0sIFsmXSAoY29uc3QgUmVnZXhTdWJzdGl0dXRpb25BY3Rpb24mKSB7CisgICAgICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQsIGlkZWFsbHkgaW4gYSB3YXkgdGhhdCBkb2Vzbid0IHJlcXVp
cmUgbWFraW5nIGEgbmV3IFZNIGFuZCBnbG9iYWwgb2JqZWN0IGZvciBlYWNoIHJlZGlyZWN0IG9w
ZXJhdGlvbi4KKyAgICB9LCBbJl0gKGNvbnN0IFVSTFRyYW5zZm9ybUFjdGlvbiYgYWN0aW9uKSB7
CisgICAgICAgIGF1dG8gdXJsID0gcmVxdWVzdC51cmwoKTsKKyAgICAgICAgYWN0aW9uLmFwcGx5
VG9VUkwodXJsKTsKKyAgICAgICAgcmVxdWVzdC5zZXRVUkwoV1RGTW92ZSh1cmwpKTsKKyAgICB9
LCBbJl0gKGNvbnN0IFVSTEFjdGlvbiYgYWN0aW9uKSB7CisgICAgICAgIHJlcXVlc3Quc2V0VVJM
KFVSTChVUkwoKSwgYWN0aW9uLnVybCkpOworICAgIH0pLCBhY3Rpb24pOworfQorCithdXRvIFJl
ZGlyZWN0QWN0aW9uOjpVUkxUcmFuc2Zvcm1BY3Rpb246OnBhcnNlKGNvbnN0IEpTT046Ok9iamVj
dCYgdHJhbnNmb3JtLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEhhc2hTZXQ8U3RyaW5nPj4mIGFsbG93
ZWRSZWRpcmVjdFVSTFNjaGVtZXMpIC0+IEV4cGVjdGVkPFVSTFRyYW5zZm9ybUFjdGlvbiwgc3Rk
OjplcnJvcl9jb2RlPgogewogICAgIFVSTFRyYW5zZm9ybUFjdGlvbiBhY3Rpb247Ci0gICAgYWN0
aW9uLmZyYWdtZW50ID0gdHJhbnNmb3JtLmdldFN0cmluZygiZnJhZ21lbnQiKTsKKyAgICBpZiAo
YXV0byBmcmFnbWVudCA9IHRyYW5zZm9ybS5nZXRTdHJpbmcoImZyYWdtZW50Iik7ICEhZnJhZ21l
bnQpIHsKKyAgICAgICAgaWYgKCFmcmFnbWVudC5pc0VtcHR5KCkgJiYgIWZyYWdtZW50LnN0YXJ0
c1dpdGgoJyMnKSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0
ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdEludmFsaWRGcmFnbWVudCk7CisgICAgICAgIGFjdGlv
bi5mcmFnbWVudCA9IFdURk1vdmUoZnJhZ21lbnQpOworICAgIH0KICAgICBhY3Rpb24uaG9zdCA9
IHRyYW5zZm9ybS5nZXRTdHJpbmcoImhvc3QiKTsKICAgICBhY3Rpb24ucGFzc3dvcmQgPSB0cmFu
c2Zvcm0uZ2V0U3RyaW5nKCJwYXNzd29yZCIpOwogICAgIGFjdGlvbi5wYXRoID0gdHJhbnNmb3Jt
LmdldFN0cmluZygicGF0aCIpOwotICAgIGFjdGlvbi5wb3J0ID0gdHJhbnNmb3JtLmdldFN0cmlu
ZygicG9ydCIpOwotICAgIGF1dG8gc2NoZW1lID0gdHJhbnNmb3JtLmdldFN0cmluZygic2NoZW1l
Iik7Ci0gICAgaWYgKCEhc2NoZW1lICYmICFhbGxvd2VkUmVkaXJlY3RVUkxTY2hlbWVzLmNvbnRh
aW5zKHNjaGVtZSkpCi0gICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5z
aW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTFNjaGVtZU5vdEFsbG93ZWQpOwotICAgIGFjdGlvbi5z
Y2hlbWUgPSBXVEZNb3ZlKHNjaGVtZSk7CisgICAgYXV0byBwb3J0ID0gdHJhbnNmb3JtLmdldFN0
cmluZygicG9ydCIpOworICAgIGlmICghIXBvcnQpIHsKKyAgICAgICAgaWYgKHBvcnQuaXNFbXB0
eSgpKQorICAgICAgICAgICAgYWN0aW9uLnBvcnQgPSB7IHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+
IHsgfSB9OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8gcGFyc2VkUG9ydCA9IHBh
cnNlSW50ZWdlcjx1aW50MTZfdD4oU3RyaW5nVmlldyhwb3J0KSk7CisgICAgICAgICAgICBpZiAo
IXBhcnNlZFBvcnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRl
bnRFeHRlbnNpb25FcnJvcjo6SlNPTlJlZGlyZWN0SW52YWxpZFBvcnQpOworICAgICAgICAgICAg
YWN0aW9uLnBvcnQgPSB7IHBhcnNlZFBvcnQgfTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChhdXRvIHVuY2Fub25pY2FsaXplZFNjaGVtZSA9IHRyYW5zZm9ybS5nZXRTdHJpbmcoInNjaGVt
ZSIpOyAhIXVuY2Fub25pY2FsaXplZFNjaGVtZSkgeworICAgICAgICBhdXRvIHNjaGVtZSA9IFdU
Rjo6VVJMUGFyc2VyOjptYXliZUNhbm9uaWNhbGl6ZVNjaGVtZSh1bmNhbm9uaWNhbGl6ZWRTY2hl
bWUpOworICAgICAgICBpZiAoIXNjaGVtZSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTFNjaGVtZUludmFsaWQp
OworICAgICAgICBpZiAoYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcyAmJiAhYWxsb3dlZFJlZGly
ZWN0VVJMU2NoZW1lcy0+Y29udGFpbnMoKnNjaGVtZSkpCisgICAgICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RVUkxTY2hlbWVO
b3RBbGxvd2VkKTsKKyAgICAgICAgYWN0aW9uLnNjaGVtZSA9IFdURk1vdmUoKnNjaGVtZSk7Cisg
ICAgfQogICAgIGFjdGlvbi51c2VybmFtZSA9IHRyYW5zZm9ybS5nZXRTdHJpbmcoInVzZXJuYW1l
Iik7CiAgICAgaWYgKGF1dG8gcXVlcnlUcmFuc2Zvcm0gPSB0cmFuc2Zvcm0uZ2V0T2JqZWN0KCJx
dWVyeS10cmFuc2Zvcm0iKSkgewogICAgICAgICBhdXRvIHBhcnNlZFF1ZXJ5VHJhbnNmb3JtID0g
UXVlcnlUcmFuc2Zvcm06OnBhcnNlKCpxdWVyeVRyYW5zZm9ybSk7CiAgICAgICAgIGlmICghcGFy
c2VkUXVlcnlUcmFuc2Zvcm0pCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQocGFy
c2VkUXVlcnlUcmFuc2Zvcm0uZXJyb3IoKSk7CiAgICAgICAgIGFjdGlvbi5xdWVyeVRyYW5zZm9y
bSA9ICpwYXJzZWRRdWVyeVRyYW5zZm9ybTsKLSAgICB9IGVsc2UKLSAgICAgICAgYWN0aW9uLnF1
ZXJ5VHJhbnNmb3JtID0gdHJhbnNmb3JtLmdldFN0cmluZygicXVlcnkiKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBhdXRvIHF1ZXJ5ID0gdHJhbnNmb3JtLmdldFN0cmluZygicXVlcnkiKTsKKyAg
ICAgICAgaWYgKCFxdWVyeS5pc0VtcHR5KCkgJiYgIXF1ZXJ5LnN0YXJ0c1dpdGgoJz8nKSkKKyAg
ICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpT
T05SZWRpcmVjdEludmFsaWRRdWVyeSk7CisgICAgICAgIGFjdGlvbi5xdWVyeVRyYW5zZm9ybSA9
IFdURk1vdmUocXVlcnkpOworICAgIH0KICAgICByZXR1cm4gYWN0aW9uOwogfQogCkBAIC0zOTks
MTMgKzQ2NSwxMyBAQCB2b2lkIFJlZGlyZWN0QWN0aW9uOjpVUkxUcmFuc2Zvcm1BY3Rpb246CiAg
ICAgdWludDhfdCBoYXNTY2hlbWUgPSAhIXNjaGVtZTsKICAgICB1aW50OF90IGhhc1VzZXJuYW1l
ID0gISF1c2VybmFtZTsKICAgICBhdXRvKiBxdWVyeVN0cmluZyA9IHN0ZDo6Z2V0X2lmPFN0cmlu
Zz4oJnF1ZXJ5VHJhbnNmb3JtKTsKKyAgICBhdXRvIHF1ZXJ5U3RyaW5nVVRGOCA9IHF1ZXJ5U3Ry
aW5nID8gcXVlcnlTdHJpbmctPnV0ZjgoKSA6IENTdHJpbmcoKTsKICAgICB1aW50OF90IGhhc1F1
ZXJ5ID0gIXF1ZXJ5U3RyaW5nIHx8ICEhKnF1ZXJ5U3RyaW5nOwogCiAgICAgYXV0byBmcmFnbWVu
dFVURjggPSBmcmFnbWVudC51dGY4KCk7CiAgICAgYXV0byBob3N0VVRGOCA9IGhvc3QudXRmOCgp
OwogICAgIGF1dG8gcGFzc3dvcmRVVEY4ID0gcGFzc3dvcmQudXRmOCgpOwogICAgIGF1dG8gcGF0
aFVURjggPSBwYXRoLnV0ZjgoKTsKLSAgICBhdXRvIHBvcnRVVEY4ID0gcG9ydC51dGY4KCk7CiAg
ICAgYXV0byBzY2hlbWVVVEY4ID0gc2NoZW1lLnV0ZjgoKTsKICAgICBhdXRvIHVzZXJuYW1lVVRG
OCA9IHVzZXJuYW1lLnV0ZjgoKTsKIApAQCAtNDE0LDkgKzQ4MCwxMCBAQCB2b2lkIFJlZGlyZWN0
QWN0aW9uOjpVUkxUcmFuc2Zvcm1BY3Rpb246CiAgICAgICAgICsgKGhhc0hvc3QgPyBzaXplb2Yo
dWludDMyX3QpICsgaG9zdFVURjgubGVuZ3RoKCkgOiAwKQogICAgICAgICArIChoYXNQYXNzd29y
ZCA/IHNpemVvZih1aW50MzJfdCkgKyBwYXNzd29yZFVURjgubGVuZ3RoKCkgOiAwKQogICAgICAg
ICArIChoYXNQYXRoID8gc2l6ZW9mKHVpbnQzMl90KSArIHBhdGhVVEY4Lmxlbmd0aCgpIDogMCkK
LSAgICAgICAgKyAoaGFzUG9ydCA/IHNpemVvZih1aW50MzJfdCkgKyBwb3J0VVRGOC5sZW5ndGgo
KSA6IDApCiAgICAgICAgICsgKGhhc1NjaGVtZSA/IHNpemVvZih1aW50MzJfdCkgKyBzY2hlbWVV
VEY4Lmxlbmd0aCgpIDogMCkKLSAgICAgICAgKyAoaGFzVXNlcm5hbWUgPyBzaXplb2YodWludDMy
X3QpICsgdXNlcm5hbWVVVEY4Lmxlbmd0aCgpIDogMCkpOworICAgICAgICArIChoYXNVc2VybmFt
ZSA/IHNpemVvZih1aW50MzJfdCkgKyB1c2VybmFtZVVURjgubGVuZ3RoKCkgOiAwKQorICAgICAg
ICArIChoYXNQb3J0ID8gMSArICgqcG9ydCA/IHNpemVvZih1aW50MTZfdCkgOiAwKSA6IDApCisg
ICAgICAgICsgKGhhc1F1ZXJ5ID8gMSArIChxdWVyeVN0cmluZyA/IHNpemVvZih1aW50MzJfdCkg
KyBxdWVyeVN0cmluZ1VURjgubGVuZ3RoKCkgOiAwKSA6IDApKTsKIAogICAgIGF1dG8gYmVnaW5J
bmRleCA9IHZlY3Rvci5zaXplKCk7CiAgICAgdW5jaGVja2VkQXBwZW5kKHZlY3RvciwgMCk7CkBA
IC00NDIsMTggKzUwOSwyMiBAQCB2b2lkIFJlZGlyZWN0QWN0aW9uOjpVUkxUcmFuc2Zvcm1BY3Rp
b246CiAgICAgICAgIHVuY2hlY2tlZEFwcGVuZExlbmd0aEFuZFN0cmluZyhwYXNzd29yZFVURjgp
OwogICAgIGlmIChoYXNQYXRoKQogICAgICAgICB1bmNoZWNrZWRBcHBlbmRMZW5ndGhBbmRTdHJp
bmcocGF0aFVURjgpOwotICAgIGlmIChoYXNQb3J0KQotICAgICAgICB1bmNoZWNrZWRBcHBlbmRM
ZW5ndGhBbmRTdHJpbmcocG9ydFVURjgpOwogICAgIGlmIChoYXNTY2hlbWUpCiAgICAgICAgIHVu
Y2hlY2tlZEFwcGVuZExlbmd0aEFuZFN0cmluZyhzY2hlbWVVVEY4KTsKICAgICBpZiAoaGFzVXNl
cm5hbWUpCiAgICAgICAgIHVuY2hlY2tlZEFwcGVuZExlbmd0aEFuZFN0cmluZyh1c2VybmFtZVVU
RjgpOworICAgIGlmIChoYXNQb3J0KSB7CisgICAgICAgIHZlY3Rvci51bmNoZWNrZWRBcHBlbmQo
ISEqcG9ydCk7CisgICAgICAgIGlmICgqcG9ydCkgeworICAgICAgICAgICAgdmVjdG9yLnVuY2hl
Y2tlZEFwcGVuZCgqKnBvcnQgPj4gMCk7CisgICAgICAgICAgICB2ZWN0b3IudW5jaGVja2VkQXBw
ZW5kKCoqcG9ydCA+PiA4KTsKKyAgICAgICAgfQorICAgIH0KICAgICBpZiAoaGFzUXVlcnkpIHsK
LSAgICAgICAgdmVjdG9yLmFwcGVuZChxdWVyeVRyYW5zZm9ybS5pbmRleCgpKTsKLSAgICAgICAg
c3RkOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShjb25zdCBTdHJpbmcmIHF1ZXJ5U3RyaW5n
KSB7Ci0gICAgICAgICAgICBhdXRvIHF1ZXJ5U3RyaW5nVVRGOCA9IHF1ZXJ5U3RyaW5nLnV0Zjgo
KTsKLSAgICAgICAgICAgIGFwcGVuZCh2ZWN0b3IsIHF1ZXJ5U3RyaW5nVVRGOC5sZW5ndGgoKSk7
Ci0gICAgICAgICAgICBhcHBlbmQodmVjdG9yLCBxdWVyeVN0cmluZ1VURjgpOworICAgICAgICB2
ZWN0b3IudW5jaGVja2VkQXBwZW5kKHF1ZXJ5VHJhbnNmb3JtLmluZGV4KCkpOworICAgICAgICBz
dGQ6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKGNvbnN0IFN0cmluZyYpIHsKKyAgICAgICAg
ICAgIHVuY2hlY2tlZEFwcGVuZCh2ZWN0b3IsIHF1ZXJ5U3RyaW5nVVRGOC5sZW5ndGgoKSk7Cisg
ICAgICAgICAgICB1bmNoZWNrZWRBcHBlbmQodmVjdG9yLCBxdWVyeVN0cmluZ1VURjgpOwogICAg
ICAgICB9LCBbJl0oY29uc3QgUXVlcnlUcmFuc2Zvcm0mIHRyYW5zZm9ybSkgewogICAgICAgICAg
ICAgdHJhbnNmb3JtLnNlcmlhbGl6ZSh2ZWN0b3IpOwogICAgICAgICB9KSwgcXVlcnlUcmFuc2Zv
cm0pOwpAQCAtNDg3LDkgKzU1OCwxOCBAQCBhdXRvIFJlZGlyZWN0QWN0aW9uOjpVUkxUcmFuc2Zv
cm1BY3Rpb246CiAgICAgYXV0byBob3N0ID0gaGFzSG9zdCA/IGRlc2VyaWFsaXplU3RyaW5nKCkg
OiBTdHJpbmcoKTsKICAgICBhdXRvIHBhc3N3b3JkID0gaGFzUGFzc3dvcmQgPyBkZXNlcmlhbGl6
ZVN0cmluZygpIDogU3RyaW5nKCk7CiAgICAgYXV0byBwYXRoID0gaGFzUGF0aCA/IGRlc2VyaWFs
aXplU3RyaW5nKCkgOiBTdHJpbmcoKTsKLSAgICBhdXRvIHBvcnQgPSBoYXNQb3J0ID8gZGVzZXJp
YWxpemVTdHJpbmcoKSA6IFN0cmluZygpOwogICAgIGF1dG8gc2NoZW1lID0gaGFzU2NoZW1lID8g
ZGVzZXJpYWxpemVTdHJpbmcoKSA6IFN0cmluZygpOwogICAgIGF1dG8gdXNlcm5hbWUgPSBoYXNV
c2VybmFtZSA/IGRlc2VyaWFsaXplU3RyaW5nKCkgOiBTdHJpbmcoKTsKKyAgICBzdGQ6Om9wdGlv
bmFsPHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+PiBwb3J0OworICAgIGlmIChoYXNQb3J0KSB7Cisg
ICAgICAgIGlmIChzcGFuW3Byb2dyZXNzKytdKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChzcGFuLnNpemUoKSA+IHByb2dyZXNzICsgMSk7CisgICAgICAgICAgICB1aW50MTZfdCB2YWx1
ZSA9IChzcGFuW3Byb2dyZXNzXSA8PCAwKSB8IChzcGFuW3Byb2dyZXNzICsgMV0gPDwgOCk7Cisg
ICAgICAgICAgICBwb3J0ID0geyB7IHZhbHVlIH0gfTsKKyAgICAgICAgICAgIHByb2dyZXNzICs9
IDI7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcG9ydCA9IHsgc3RkOjpvcHRpb25hbDx1
aW50MTZfdD4geyB9IH07CisgICAgfQogICAgIFF1ZXJ5VHJhbnNmb3JtVmFyaWFudCBxdWVyeVRy
YW5zZm9ybTsKICAgICBpZiAoaGFzUXVlcnkpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3Bh
bi5zaXplKCkgPiBwcm9ncmVzcyk7CkBAIC01NTYsNiArNjM2LDY2IEBAIGF1dG8gUmVkaXJlY3RB
Y3Rpb246OlVSTFRyYW5zZm9ybUFjdGlvbjoKICAgICByZXR1cm4gcGFyc2VkUXVlcnlUcmFuc2Zv
cm07CiB9CiAKK3ZvaWQgUmVkaXJlY3RBY3Rpb246OlVSTFRyYW5zZm9ybUFjdGlvbjo6YXBwbHlU
b1VSTChVUkwmIHVybCkgY29uc3QKK3sKKyAgICBpZiAoISFmcmFnbWVudCkgeworICAgICAgICBp
ZiAoZnJhZ21lbnQuaXNFbXB0eSgpKQorICAgICAgICAgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRl
bnRpZmllcigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB1cmwuc2V0RnJhZ21lbnRJZGVu
dGlmaWVyKFN0cmluZ1ZpZXcoZnJhZ21lbnQpLnN1YnN0cmluZygxKSk7CisgICAgfQorICAgIGlm
ICghIWhvc3QpCisgICAgICAgIHVybC5zZXRIb3N0KGhvc3QpOworICAgIGlmICghIXBhc3N3b3Jk
KQorICAgICAgICB1cmwuc2V0UGFzc3dvcmQocGFzc3dvcmQpOworICAgIGlmICghIXBhdGgpCisg
ICAgICAgIHVybC5zZXRQYXRoKHBhdGgpOworICAgIGlmICghIXBvcnQpCisgICAgICAgIHVybC5z
ZXRQb3J0KCpwb3J0KTsKKyAgICBzdGQ6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdIChjb25z
dCBTdHJpbmcmIHF1ZXJ5KSB7CisgICAgICAgIGlmICghcXVlcnkuaXNOdWxsKCkpCisgICAgICAg
ICAgICB1cmwuc2V0UXVlcnkocXVlcnkuaXNFbXB0eSgpID8gU3RyaW5nVmlldygpIDogU3RyaW5n
VmlldyhxdWVyeSkpOworICAgIH0sIFsmXSAoY29uc3QgVVJMVHJhbnNmb3JtQWN0aW9uOjpRdWVy
eVRyYW5zZm9ybSYgdHJhbnNmb3JtKSB7CisgICAgICAgIHRyYW5zZm9ybS5hcHBseVRvVVJMKHVy
bCk7CisgICAgfSksIHF1ZXJ5VHJhbnNmb3JtKTsKKyAgICBpZiAoISFzY2hlbWUpCisgICAgICAg
IHVybC5zZXRQcm90b2NvbChzY2hlbWUpOworICAgIGlmICghIXVzZXJuYW1lKQorICAgICAgICB1
cmwuc2V0VXNlcih1c2VybmFtZSk7Cit9CisKK3ZvaWQgUmVkaXJlY3RBY3Rpb246OlVSTFRyYW5z
Zm9ybUFjdGlvbjo6UXVlcnlUcmFuc2Zvcm06OmFwcGx5VG9VUkwoVVJMJiB1cmwpIGNvbnN0Cit7
CisgICAgYXV0byBmb3JtID0gV1RGOjpVUkxQYXJzZXI6OnBhcnNlVVJMRW5jb2RlZEZvcm0odXJs
LnF1ZXJ5KCkpOworCisgICAgSGFzaFNldDxTdHJpbmc+IGtleXNUb1JlbW92ZTsKKyAgICBmb3Ig
KGF1dG8mIGtleSA6IHJlbW92ZVBhcmFtcykKKyAgICAgICAga2V5c1RvUmVtb3ZlLmFkZChrZXkp
OworICAgIGZvcm0ucmVtb3ZlQWxsTWF0Y2hpbmcoWyZdIChhdXRvJiBrZXlWYWx1ZSkgeworICAg
ICAgICByZXR1cm4ga2V5c1RvUmVtb3ZlLmNvbnRhaW5zKGtleVZhbHVlLmtleSk7CisgICAgfSk7
CisKKyAgICBWZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBTdHJpbmc+PiBrZXlzVG9B
ZGQ7CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4ga2V5c1RvUmVwbGFjZTsKKyAgICBmb3Ig
KGF1dG8mIGtleVZhbHVlIDogYWRkT3JSZXBsYWNlUGFyYW1zKSB7CisgICAgICAgIGlmIChrZXlW
YWx1ZS5yZXBsYWNlT25seSkKKyAgICAgICAgICAgIGtleXNUb1JlcGxhY2UuYWRkKGtleVZhbHVl
LmtleSwga2V5VmFsdWUudmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBrZXlzVG9B
ZGQuYXBwZW5kKHsga2V5VmFsdWUua2V5LCBrZXlWYWx1ZS52YWx1ZSB9KTsKKyAgICB9CisgICAg
Zm9yIChhdXRvJiBrZXlWYWx1ZSA6IGZvcm0pIHsKKyAgICAgICAgYXV0byBpdGVyYXRvciA9IGtl
eXNUb1JlcGxhY2UuZmluZChrZXlWYWx1ZS5rZXkpOworICAgICAgICBpZiAoaXRlcmF0b3IgIT0g
a2V5c1RvUmVwbGFjZS5lbmQoKSkKKyAgICAgICAgICAgIGtleVZhbHVlLnZhbHVlID0gaXRlcmF0
b3ItPnZhbHVlOworICAgIH0KKyAgICBmb3JtLmFwcGVuZFZlY3RvcihXVEZNb3ZlKGtleXNUb0Fk
ZCkpOworCisgICAgU3RyaW5nQnVpbGRlciB0cmFuc2Zvcm1lZFF1ZXJ5OworICAgIGZvciAoYXV0
byYga2V5VmFsdWUgOiBmb3JtKQorICAgICAgICB0cmFuc2Zvcm1lZFF1ZXJ5LmFwcGVuZCh0cmFu
c2Zvcm1lZFF1ZXJ5LmlzRW1wdHkoKSA/ICIiIDogIiYiLCBrZXlWYWx1ZS5rZXksICEha2V5VmFs
dWUudmFsdWUgPyAiPSIgOiAiIiwga2V5VmFsdWUudmFsdWUpOworICAgIHVybC5zZXRRdWVyeSh0
cmFuc2Zvcm1lZFF1ZXJ5KTsKK30KKwogYXV0byBSZWRpcmVjdEFjdGlvbjo6VVJMVHJhbnNmb3Jt
QWN0aW9uOjpRdWVyeVRyYW5zZm9ybTo6aXNvbGF0ZWRDb3B5KCkgY29uc3QgLT4gUXVlcnlUcmFu
c2Zvcm0KIHsKICAgICByZXR1cm4gewpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvQ29udGVudEV4dGVuc2lvbkFjdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQWN0aW9ucy5oCShyZXZpc2lv
biAyODU5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0
ZW5zaW9uQWN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDkgKzI5LDM4IEBACiAKICNpbmNsdWRl
ICJDb250ZW50RXh0ZW5zaW9uU3RyaW5nU2VyaWFsaXphdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KKyNpbmNsdWRlIDx3
dGYvSGFzaGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFJlc291cmNlUmVxdWVz
dDsKK30KIAogbmFtZXNwYWNlIFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zIHsKIAorLy8gRklY
TUU6IFRoaXMgcHJvYmFibHkgYmVsb25ncyBpbiBXVEYsIHN1Y2ggYXMgaW4gSGFzaEZ1bmN0aW9u
cy5oLgorc3RydWN0IFZhcmlhbnRIYXNoZXIgeworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWPgor
ICAgIHN0YXRpYyB1aW50MzJfdCBoYXNoKFYmJiB2YXJpYW50KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHBhaXJJbnRIYXNoKHZhcmlhbnQuaW5kZXgoKSwgc3RkOjp2aXNpdChbXShjb25zdCBhdXRv
JiB0eXBlKSB7CisgICAgICAgICAgICByZXR1cm4gdHlwZS5oYXNoKCk7CisgICAgICAgIH0sIHN0
ZDo6Zm9yd2FyZDxWPih2YXJpYW50KSkpOworICAgIH0KK307CisKKy8vIEZJWE1FOiBUaGlzIHBy
b2JhYmx5IGJlbG9uZ3MgaW4gV1RGLCBzdWNoIGFzIGluIEhhc2hlci5oLgorc3RydWN0IFZlY3Rv
ckhhc2hlciB7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFY+CisgICAgc3RhdGljIHVpbnQzMl90
IGhhc2goViYmIHZlY3RvcikKKyAgICB7CisgICAgICAgIEhhc2hlciBoYXNoZXI7CisgICAgICAg
IGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKKyAgICAgICAgICAgIGFkZChoYXNoZXIsIGVs
ZW1lbnQuaGFzaCgpKTsKKyAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7CisgICAgfQorfTsK
Kwogc3RydWN0IEFjdGlvbjsKIAogdXNpbmcgU2VyaWFsaXplZEFjdGlvbkJ5dGUgPSB1aW50OF90
OwpAQCAtNjYsNiArOTUsNyBAQCBzdHJ1Y3QgV0VCQ09SRV9FWFBPUlQgTW9kaWZ5SGVhZGVyc0Fj
dGlvCiAgICAgICAgICAgICBTdHJpbmcgaGVhZGVyOwogICAgICAgICAgICAgU3RyaW5nIHZhbHVl
OwogCisgICAgICAgICAgICB1aW50MzJfdCBoYXNoKCkgY29uc3QgeyByZXR1cm4gcGFpckludEhh
c2goaGVhZGVyLmhhc2goKSwgdmFsdWUuaGFzaCgpKTsgfQogICAgICAgICAgICAgQXBwZW5kT3Bl
cmF0aW9uIGlzb2xhdGVkQ29weSgpIGNvbnN0IHsgcmV0dXJuIHsgaGVhZGVyLmlzb2xhdGVkQ29w
eSgpLCB2YWx1ZS5pc29sYXRlZENvcHkoKSB9OyB9CiAgICAgICAgICAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgQXBwZW5kT3BlcmF0aW9uJiBvdGhlcikgY29uc3QgeyByZXR1cm4gb3RoZXIuaGVh
ZGVyID09IHRoaXMtPmhlYWRlciAmJiBvdGhlci52YWx1ZSA9PSB0aGlzLT52YWx1ZTsgfQogICAg
ICAgICB9OwpAQCAtNzMsNDcgKzEwMyw2NyBAQCBzdHJ1Y3QgV0VCQ09SRV9FWFBPUlQgTW9kaWZ5
SGVhZGVyc0FjdGlvCiAgICAgICAgICAgICBTdHJpbmcgaGVhZGVyOwogICAgICAgICAgICAgU3Ry
aW5nIHZhbHVlOwogCisgICAgICAgICAgICB1aW50MzJfdCBoYXNoKCkgY29uc3QgeyByZXR1cm4g
cGFpckludEhhc2goaGVhZGVyLmhhc2goKSwgdmFsdWUuaGFzaCgpKTsgfQogICAgICAgICAgICAg
U2V0T3BlcmF0aW9uIGlzb2xhdGVkQ29weSgpIGNvbnN0IHsgcmV0dXJuIHsgaGVhZGVyLmlzb2xh
dGVkQ29weSgpLCB2YWx1ZS5pc29sYXRlZENvcHkoKSB9OyB9CiAgICAgICAgICAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgU2V0T3BlcmF0aW9uJiBvdGhlcikgY29uc3QgeyByZXR1cm4gb3RoZXIu
aGVhZGVyID09IHRoaXMtPmhlYWRlciAmJiBvdGhlci52YWx1ZSA9PSB0aGlzLT52YWx1ZTsgfQog
ICAgICAgICB9OwogICAgICAgICBzdHJ1Y3QgUmVtb3ZlT3BlcmF0aW9uIHsKICAgICAgICAgICAg
IFN0cmluZyBoZWFkZXI7CiAKKyAgICAgICAgICAgIHVpbnQzMl90IGhhc2goKSBjb25zdCB7IHJl
dHVybiBoZWFkZXIuaGFzaCgpOyB9CiAgICAgICAgICAgICBSZW1vdmVPcGVyYXRpb24gaXNvbGF0
ZWRDb3B5KCkgY29uc3QgeyByZXR1cm4geyBoZWFkZXIuaXNvbGF0ZWRDb3B5KCkgfTsgfQogICAg
ICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlbW92ZU9wZXJhdGlvbiYgb3RoZXIpIGNv
bnN0IHsgcmV0dXJuIG90aGVyLmhlYWRlciA9PSB0aGlzLT5oZWFkZXI7IH0KICAgICAgICAgfTsK
ICAgICAgICAgdXNpbmcgT3BlcmF0aW9uVmFyaWFudCA9IHN0ZDo6dmFyaWFudDxBcHBlbmRPcGVy
YXRpb24sIFNldE9wZXJhdGlvbiwgUmVtb3ZlT3BlcmF0aW9uPjsKICAgICAgICAgT3BlcmF0aW9u
VmFyaWFudCBvcGVyYXRpb247CiAKKyAgICAgICAgdWludDMyX3QgaGFzaCgpIGNvbnN0IHsgcmV0
dXJuIFZhcmlhbnRIYXNoZXI6Omhhc2gob3BlcmF0aW9uKTsgfQogICAgICAgICBzdGF0aWMgRXhw
ZWN0ZWQ8TW9kaWZ5SGVhZGVySW5mbywgc3RkOjplcnJvcl9jb2RlPiBwYXJzZShjb25zdCBKU09O
OjpWYWx1ZSYpOwogICAgICAgICBNb2RpZnlIZWFkZXJJbmZvIGlzb2xhdGVkQ29weSgpIGNvbnN0
OwogICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgTW9kaWZ5SGVhZGVySW5mbyYpIGNvbnN0
OwogICAgICAgICB2b2lkIHNlcmlhbGl6ZShWZWN0b3I8dWludDhfdD4mKSBjb25zdDsKICAgICAg
ICAgc3RhdGljIE1vZGlmeUhlYWRlckluZm8gZGVzZXJpYWxpemUoU3Bhbjxjb25zdCB1aW50OF90
Pik7CiAgICAgICAgIHN0YXRpYyBzaXplX3Qgc2VyaWFsaXplZExlbmd0aChTcGFuPGNvbnN0IHVp
bnQ4X3Q+KTsKKyAgICAgICAgdm9pZCBhcHBseVRvUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmKTsK
ICAgICB9OwogCisgICAgZW51bSBjbGFzcyBIYXNoVGFibGVUeXBlIDogdWludDhfdCB7IEVtcHR5
LCBEZWxldGVkLCBGdWxsIH0gaGFzaFRhYmxlVHlwZTsKICAgICBWZWN0b3I8TW9kaWZ5SGVhZGVy
SW5mbz4gcmVxdWVzdEhlYWRlcnM7CiAgICAgVmVjdG9yPE1vZGlmeUhlYWRlckluZm8+IHJlc3Bv
bnNlSGVhZGVyczsKIAorICAgIE1vZGlmeUhlYWRlcnNBY3Rpb24oVmVjdG9yPE1vZGlmeUhlYWRl
ckluZm8+JiYgcmVxdWVzdEhlYWRlcnMsIFZlY3RvcjxNb2RpZnlIZWFkZXJJbmZvPiYmIHJlc3Bv
bnNlSGVhZGVycykKKyAgICAgICAgOiBoYXNoVGFibGVUeXBlKEhhc2hUYWJsZVR5cGU6OkZ1bGwp
CisgICAgICAgICwgcmVxdWVzdEhlYWRlcnMoV1RGTW92ZShyZXF1ZXN0SGVhZGVycykpCisgICAg
ICAgICwgcmVzcG9uc2VIZWFkZXJzKFdURk1vdmUocmVzcG9uc2VIZWFkZXJzKSkgeyB9CisKKyAg
ICBlbnVtIEVtcHR5VmFsdWVUYWcgeyBFbXB0eVZhbHVlIH07CisgICAgZW51bSBEZWxldGVkVmFs
dWVUYWcgeyBEZWxldGVkVmFsdWUgfTsKKyAgICBNb2RpZnlIZWFkZXJzQWN0aW9uKEVtcHR5VmFs
dWVUYWcpIDogaGFzaFRhYmxlVHlwZShIYXNoVGFibGVUeXBlOjpFbXB0eSkgeyB9CisgICAgTW9k
aWZ5SGVhZGVyc0FjdGlvbihEZWxldGVkVmFsdWVUYWcpIDogaGFzaFRhYmxlVHlwZShIYXNoVGFi
bGVUeXBlOjpEZWxldGVkKSB7IH0KKyAgICBib29sIGlzRGVsZXRlZFZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gaGFzaFRhYmxlVHlwZSA9PSBIYXNoVGFibGVUeXBlOjpEZWxldGVkOyB9CisKKyAgICB1
aW50MzJfdCBoYXNoKCkgY29uc3QgeyByZXR1cm4gcGFpckludEhhc2goVmVjdG9ySGFzaGVyOjpo
YXNoKHJlcXVlc3RIZWFkZXJzKSwgVmVjdG9ySGFzaGVyOjpoYXNoKHJlc3BvbnNlSGVhZGVycykp
OyB9CiAgICAgc3RhdGljIEV4cGVjdGVkPE1vZGlmeUhlYWRlcnNBY3Rpb24sIHN0ZDo6ZXJyb3Jf
Y29kZT4gcGFyc2UoY29uc3QgSlNPTjo6T2JqZWN0Jik7CiAgICAgTW9kaWZ5SGVhZGVyc0FjdGlv
biBpc29sYXRlZENvcHkoKSBjb25zdDsKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgTW9kaWZ5
SGVhZGVyc0FjdGlvbiYpIGNvbnN0OwogICAgIHZvaWQgc2VyaWFsaXplKFZlY3Rvcjx1aW50OF90
PiYpIGNvbnN0OwogICAgIHN0YXRpYyBNb2RpZnlIZWFkZXJzQWN0aW9uIGRlc2VyaWFsaXplKFNw
YW48Y29uc3QgdWludDhfdD4pOwogICAgIHN0YXRpYyBzaXplX3Qgc2VyaWFsaXplZExlbmd0aChT
cGFuPGNvbnN0IHVpbnQ4X3Q+KTsKKyAgICB2b2lkIGFwcGx5VG9SZXF1ZXN0KFJlc291cmNlUmVx
dWVzdCYpOwogfTsKIAogc3RydWN0IFdFQkNPUkVfRVhQT1JUIFJlZGlyZWN0QWN0aW9uIHsKICAg
ICBzdHJ1Y3QgRXh0ZW5zaW9uUGF0aEFjdGlvbiB7CiAgICAgICAgIFN0cmluZyBleHRlbnNpb25Q
YXRoOwogCisgICAgICAgIHVpbnQzMl90IGhhc2goKSBjb25zdCB7IHJldHVybiBleHRlbnNpb25Q
YXRoLmhhc2goKTsgfQogICAgICAgICBFeHRlbnNpb25QYXRoQWN0aW9uIGlzb2xhdGVkQ29weSgp
IGNvbnN0IHsgcmV0dXJuIHsgZXh0ZW5zaW9uUGF0aC5pc29sYXRlZENvcHkoKSB9OyB9CiAgICAg
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFeHRlbnNpb25QYXRoQWN0aW9uJiBvdGhlcikgY29u
c3QgeyByZXR1cm4gb3RoZXIuZXh0ZW5zaW9uUGF0aCA9PSB0aGlzLT5leHRlbnNpb25QYXRoOyB9
CiAgICAgfTsKICAgICBzdHJ1Y3QgUmVnZXhTdWJzdGl0dXRpb25BY3Rpb24gewogICAgICAgICBT
dHJpbmcgcmVnZXhTdWJzdGl0dXRpb247CiAKKyAgICAgICAgdWludDMyX3QgaGFzaCgpIGNvbnN0
IHsgcmV0dXJuIHJlZ2V4U3Vic3RpdHV0aW9uLmhhc2goKTsgfQogICAgICAgICBSZWdleFN1YnN0
aXR1dGlvbkFjdGlvbiBpc29sYXRlZENvcHkoKSBjb25zdCB7IHJldHVybiB7IHJlZ2V4U3Vic3Rp
dHV0aW9uLmlzb2xhdGVkQ29weSgpIH07IH0KICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFJlZ2V4U3Vic3RpdHV0aW9uQWN0aW9uJiBvdGhlcikgY29uc3QgeyByZXR1cm4gb3RoZXIucmVn
ZXhTdWJzdGl0dXRpb24gPT0gdGhpcy0+cmVnZXhTdWJzdGl0dXRpb247IH0KICAgICB9OwpAQCAt
MTI0LDYgKzE3NCw3IEBAIHN0cnVjdCBXRUJDT1JFX0VYUE9SVCBSZWRpcmVjdEFjdGlvbiB7CiAg
ICAgICAgICAgICAgICAgYm9vbCByZXBsYWNlT25seSB7IGZhbHNlIH07CiAgICAgICAgICAgICAg
ICAgU3RyaW5nIHZhbHVlOwogCisgICAgICAgICAgICAgICAgdWludDMyX3QgaGFzaCgpIGNvbnN0
IHsgcmV0dXJuIGNvbXB1dGVIYXNoKGtleSwgcmVwbGFjZU9ubHksIHZhbHVlKTsgfQogICAgICAg
ICAgICAgICAgIHN0YXRpYyBFeHBlY3RlZDxRdWVyeUtleVZhbHVlLCBzdGQ6OmVycm9yX2NvZGU+
IHBhcnNlKGNvbnN0IEpTT046OlZhbHVlJik7CiAgICAgICAgICAgICAgICAgUXVlcnlLZXlWYWx1
ZSBpc29sYXRlZENvcHkoKSBjb25zdDsKICAgICAgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgUXVlcnlLZXlWYWx1ZSYpIGNvbnN0OwpAQCAtMTM1LDQ3ICsxODYsNjUgQEAgc3RydWN0
IFdFQkNPUkVfRVhQT1JUIFJlZGlyZWN0QWN0aW9uIHsKICAgICAgICAgICAgIFZlY3RvcjxRdWVy
eUtleVZhbHVlPiBhZGRPclJlcGxhY2VQYXJhbXM7CiAgICAgICAgICAgICBWZWN0b3I8U3RyaW5n
PiByZW1vdmVQYXJhbXM7CiAKKyAgICAgICAgICAgIHVpbnQzMl90IGhhc2goKSBjb25zdCB7IHJl
dHVybiBjb21wdXRlSGFzaChWZWN0b3JIYXNoZXI6Omhhc2goYWRkT3JSZXBsYWNlUGFyYW1zKSwg
cmVtb3ZlUGFyYW1zKTsgfQogICAgICAgICAgICAgc3RhdGljIEV4cGVjdGVkPFF1ZXJ5VHJhbnNm
b3JtLCBzdGQ6OmVycm9yX2NvZGU+IHBhcnNlKGNvbnN0IEpTT046Ok9iamVjdCYpOwogICAgICAg
ICAgICAgUXVlcnlUcmFuc2Zvcm0gaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAgICAgICAgICAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgUXVlcnlUcmFuc2Zvcm0mKSBjb25zdDsKICAgICAgICAgICAg
IHZvaWQgc2VyaWFsaXplKFZlY3Rvcjx1aW50OF90PiYpIGNvbnN0OwogICAgICAgICAgICAgc3Rh
dGljIFF1ZXJ5VHJhbnNmb3JtIGRlc2VyaWFsaXplKFNwYW48Y29uc3QgdWludDhfdD4pOwogICAg
ICAgICAgICAgc3RhdGljIHNpemVfdCBzZXJpYWxpemVkTGVuZ3RoKFNwYW48Y29uc3QgdWludDhf
dD4pOworICAgICAgICAgICAgdm9pZCBhcHBseVRvVVJMKFVSTCYpIGNvbnN0OwogICAgICAgICB9
OwogCiAgICAgICAgIFN0cmluZyBmcmFnbWVudDsKICAgICAgICAgU3RyaW5nIGhvc3Q7CiAgICAg
ICAgIFN0cmluZyBwYXNzd29yZDsKICAgICAgICAgU3RyaW5nIHBhdGg7Ci0gICAgICAgIFN0cmlu
ZyBwb3J0OworICAgICAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+PiBw
b3J0OwogICAgICAgICB1c2luZyBRdWVyeVRyYW5zZm9ybVZhcmlhbnQgPSBzdGQ6OnZhcmlhbnQ8
U3RyaW5nLCBRdWVyeVRyYW5zZm9ybT47CiAgICAgICAgIFF1ZXJ5VHJhbnNmb3JtVmFyaWFudCBx
dWVyeVRyYW5zZm9ybTsKICAgICAgICAgU3RyaW5nIHNjaGVtZTsKICAgICAgICAgU3RyaW5nIHVz
ZXJuYW1lOwogCi0gICAgICAgIHN0YXRpYyBFeHBlY3RlZDxVUkxUcmFuc2Zvcm1BY3Rpb24sIHN0
ZDo6ZXJyb3JfY29kZT4gcGFyc2UoY29uc3QgSlNPTjo6T2JqZWN0JiwgY29uc3QgSGFzaFNldDxT
dHJpbmc+Jik7CisgICAgICAgIHVpbnQzMl90IGhhc2goKSBjb25zdCB7IHJldHVybiBjb21wdXRl
SGFzaChmcmFnbWVudC5oYXNoKCksIGhvc3QuaGFzaCgpLCBwYXNzd29yZC5oYXNoKCksIHBhdGgu
aGFzaCgpLCBwb3J0LCBWYXJpYW50SGFzaGVyOjpoYXNoKHF1ZXJ5VHJhbnNmb3JtKSwgc2NoZW1l
Lmhhc2goKSwgdXNlcm5hbWUuaGFzaCgpKTsgfQorICAgICAgICBzdGF0aWMgRXhwZWN0ZWQ8VVJM
VHJhbnNmb3JtQWN0aW9uLCBzdGQ6OmVycm9yX2NvZGU+IHBhcnNlKGNvbnN0IEpTT046Ok9iamVj
dCYsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8SGFzaFNldDxTdHJpbmc+PiYpOwogICAgICAgICBVUkxU
cmFuc2Zvcm1BY3Rpb24gaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAgICAgICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBVUkxUcmFuc2Zvcm1BY3Rpb24mKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXJp
YWxpemUoVmVjdG9yPHVpbnQ4X3Q+JikgY29uc3Q7CiAgICAgICAgIHN0YXRpYyBVUkxUcmFuc2Zv
cm1BY3Rpb24gZGVzZXJpYWxpemUoU3Bhbjxjb25zdCB1aW50OF90Pik7CiAgICAgICAgIHN0YXRp
YyBzaXplX3Qgc2VyaWFsaXplZExlbmd0aChTcGFuPGNvbnN0IHVpbnQ4X3Q+KTsKKyAgICAgICAg
dm9pZCBhcHBseVRvVVJMKFVSTCYpIGNvbnN0OwogICAgIH07CiAgICAgc3RydWN0IFVSTEFjdGlv
biB7CiAgICAgICAgIFN0cmluZyB1cmw7CiAKKyAgICAgICAgdWludDMyX3QgaGFzaCgpIGNvbnN0
IHsgcmV0dXJuIHVybC5oYXNoKCk7IH0KICAgICAgICAgVVJMQWN0aW9uIGlzb2xhdGVkQ29weSgp
IGNvbnN0IHsgcmV0dXJuIHsgdXJsLmlzb2xhdGVkQ29weSgpIH07IH0KICAgICAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFVSTEFjdGlvbiYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG90aGVyLnVy
bCA9PSB0aGlzLT51cmw7IH0KICAgICB9OwogCisgICAgZW51bSBjbGFzcyBIYXNoVGFibGVUeXBl
IDogdWludDhfdCB7IEVtcHR5LCBEZWxldGVkLCBGdWxsIH0gaGFzaFRhYmxlVHlwZTsKICAgICB1
c2luZyBBY3Rpb25WYXJpYW50ID0gc3RkOjp2YXJpYW50PEV4dGVuc2lvblBhdGhBY3Rpb24sIFJl
Z2V4U3Vic3RpdHV0aW9uQWN0aW9uLCBVUkxUcmFuc2Zvcm1BY3Rpb24sIFVSTEFjdGlvbj47CiAg
ICAgQWN0aW9uVmFyaWFudCBhY3Rpb247CiAKLSAgICBzdGF0aWMgRXhwZWN0ZWQ8UmVkaXJlY3RB
Y3Rpb24sIHN0ZDo6ZXJyb3JfY29kZT4gcGFyc2UoY29uc3QgSlNPTjo6T2JqZWN0JiwgY29uc3Qg
SGFzaFNldDxTdHJpbmc+Jik7CisgICAgUmVkaXJlY3RBY3Rpb24oQWN0aW9uVmFyaWFudCYmIGFj
dGlvbikKKyAgICAgICAgOiBoYXNoVGFibGVUeXBlKEhhc2hUYWJsZVR5cGU6OkZ1bGwpCisgICAg
ICAgICwgYWN0aW9uKFdURk1vdmUoYWN0aW9uKSkgeyB9CisKKyAgICBlbnVtIEVtcHR5VmFsdWVU
YWcgeyBFbXB0eVZhbHVlIH07CisgICAgZW51bSBEZWxldGVkVmFsdWVUYWcgeyBEZWxldGVkVmFs
dWUgfTsKKyAgICBSZWRpcmVjdEFjdGlvbihFbXB0eVZhbHVlVGFnKSA6IGhhc2hUYWJsZVR5cGUo
SGFzaFRhYmxlVHlwZTo6RW1wdHkpIHsgfQorICAgIFJlZGlyZWN0QWN0aW9uKERlbGV0ZWRWYWx1
ZVRhZykgOiBoYXNoVGFibGVUeXBlKEhhc2hUYWJsZVR5cGU6OkRlbGV0ZWQpIHsgfQorICAgIGJv
b2wgaXNEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBoYXNoVGFibGVUeXBlID09IEhhc2hU
YWJsZVR5cGU6OkRlbGV0ZWQ7IH0KKyAgICB1aW50MzJfdCBoYXNoKCkgY29uc3QgeyByZXR1cm4g
VmFyaWFudEhhc2hlcjo6aGFzaChhY3Rpb24pOyB9CisKKyAgICBzdGF0aWMgRXhwZWN0ZWQ8UmVk
aXJlY3RBY3Rpb24sIHN0ZDo6ZXJyb3JfY29kZT4gcGFyc2UoY29uc3QgSlNPTjo6T2JqZWN0Jiwg
Y29uc3Qgc3RkOjpvcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+Jik7CiAgICAgUmVkaXJlY3RBY3Rp
b24gaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlZGly
ZWN0QWN0aW9uJikgY29uc3Q7CiAgICAgdm9pZCBzZXJpYWxpemUoVmVjdG9yPHVpbnQ4X3Q+Jikg
Y29uc3Q7CiAgICAgc3RhdGljIFJlZGlyZWN0QWN0aW9uIGRlc2VyaWFsaXplKFNwYW48Y29uc3Qg
dWludDhfdD4pOwogICAgIHN0YXRpYyBzaXplX3Qgc2VyaWFsaXplZExlbmd0aChTcGFuPGNvbnN0
IHVpbnQ4X3Q+KTsKKyAgICB2b2lkIGFwcGx5VG9SZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYpOwog
fTsKIAogdXNpbmcgQWN0aW9uRGF0YSA9IHN0ZDo6dmFyaWFudDwKQEAgLTE5MSw0ICsyNjAsMjQg
QEAgdXNpbmcgQWN0aW9uRGF0YSA9IHN0ZDo6dmFyaWFudDwKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnMKIAorbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPD4g
c3RydWN0IERlZmF1bHRIYXNoPFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpSZWRpcmVjdEFj
dGlvbj4geworICAgIHVzaW5nIEFjdGlvbiA9IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpS
ZWRpcmVjdEFjdGlvbjsKKyAgICBzdGF0aWMgdWludDMyX3QgaGFzaChjb25zdCBBY3Rpb24mIGFj
dGlvbikgeyByZXR1cm4gYWN0aW9uLmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNv
bnN0IEFjdGlvbiYgYSwgY29uc3QgQWN0aW9uJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVl
OworfTsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8V2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OlJlZGlyZWN0QWN0aW9uPiA6IHB1YmxpYyBDdXN0b21IYXNoVHJhaXRzPFdlYkNvcmU6
OkNvbnRlbnRFeHRlbnNpb25zOjpSZWRpcmVjdEFjdGlvbj4geyB9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBEZWZhdWx0SGFzaDxXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TW9kaWZ5SGVhZGVy
c0FjdGlvbj4geworICAgIHVzaW5nIEFjdGlvbiA9IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpNb2RpZnlIZWFkZXJzQWN0aW9uOworICAgIHN0YXRpYyB1aW50MzJfdCBoYXNoKGNvbnN0IEFj
dGlvbiYgYWN0aW9uKSB7IHJldHVybiBhY3Rpb24uaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wg
ZXF1YWwoY29uc3QgQWN0aW9uJiBhLCBjb25zdCBBY3Rpb24mIGIpIHsgcmV0dXJuIGEgPT0gYjsg
fQorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRl
ZCA9IHRydWU7Cit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6TW9kaWZ5SGVhZGVyc0FjdGlvbj4gOiBwdWJsaWMgQ3VzdG9tSGFzaFRy
YWl0czxXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TW9kaWZ5SGVhZGVyc0FjdGlvbj4geyB9
OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwogI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0
ZW5zaW9uQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHAJKHJldmlzaW9uIDI4NTk1NCkK
KysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21w
aWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDEyICs3NiwxNiBAQCBzdGF0aWMgVmVjdG9y
PHVuc2lnbmVkPiBzZXJpYWxpemVBY3Rpb25zCiAgICAgdXNpbmcgQWN0aW9uTG9jYXRpb24gPSB1
aW50MzJfdDsKICAgICB1c2luZyBBY3Rpb25NYXAgPSBIYXNoTWFwPFJlc291cmNlRmxhZ3MsIEFj
dGlvbkxvY2F0aW9uLCBEZWZhdWx0SGFzaDxSZXNvdXJjZUZsYWdzPiwgV1RGOjpVbnNpZ25lZFdp
dGhaZXJvS2V5SGFzaFRyYWl0czxSZXNvdXJjZUZsYWdzPj47CiAgICAgdXNpbmcgU3RyaW5nQWN0
aW9uTWFwID0gSGFzaE1hcDxzdGQ6OnBhaXI8U3RyaW5nLCBSZXNvdXJjZUZsYWdzPiwgQWN0aW9u
TG9jYXRpb24sIERlZmF1bHRIYXNoPHN0ZDo6cGFpcjxTdHJpbmcsIFJlc291cmNlRmxhZ3M+Piwg
UGFpckhhc2hUcmFpdHM8SGFzaFRyYWl0czxTdHJpbmc+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9L
ZXlIYXNoVHJhaXRzPFJlc291cmNlRmxhZ3M+Pj47CisgICAgdXNpbmcgUmVkaXJlY3RBY3Rpb25N
YXAgPSBIYXNoTWFwPHN0ZDo6cGFpcjxSZWRpcmVjdEFjdGlvbiwgUmVzb3VyY2VGbGFncz4sIEFj
dGlvbkxvY2F0aW9uLCBEZWZhdWx0SGFzaDxzdGQ6OnBhaXI8UmVkaXJlY3RBY3Rpb24sIFJlc291
cmNlRmxhZ3M+PiwgUGFpckhhc2hUcmFpdHM8SGFzaFRyYWl0czxSZWRpcmVjdEFjdGlvbj4sIFdU
Rjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8UmVzb3VyY2VGbGFncz4+PjsKKyAgICB1
c2luZyBNb2RpZnlIZWFkZXJzQWN0aW9uTWFwID0gSGFzaE1hcDxzdGQ6OnBhaXI8TW9kaWZ5SGVh
ZGVyc0FjdGlvbiwgUmVzb3VyY2VGbGFncz4sIEFjdGlvbkxvY2F0aW9uLCBEZWZhdWx0SGFzaDxz
dGQ6OnBhaXI8TW9kaWZ5SGVhZGVyc0FjdGlvbiwgUmVzb3VyY2VGbGFncz4+LCBQYWlySGFzaFRy
YWl0czxIYXNoVHJhaXRzPE1vZGlmeUhlYWRlcnNBY3Rpb24+LCBXVEY6OlVuc2lnbmVkV2l0aFpl
cm9LZXlIYXNoVHJhaXRzPFJlc291cmNlRmxhZ3M+Pj47CiAgICAgQWN0aW9uTWFwIGJsb2NrTG9h
ZEFjdGlvbnNNYXA7CiAgICAgQWN0aW9uTWFwIGJsb2NrQ29va2llc0FjdGlvbnNNYXA7CiAgICAg
UGVuZGluZ0Rpc3BsYXlOb25lQWN0aW9uc01hcCBjc3NEaXNwbGF5Tm9uZUFjdGlvbnNNYXA7CiAg
ICAgQWN0aW9uTWFwIGlnbm9yZVByZXZpb3VzUnVsZUFjdGlvbnNNYXA7CiAgICAgQWN0aW9uTWFw
IG1ha2VIVFRQU0FjdGlvbnNNYXA7CiAgICAgU3RyaW5nQWN0aW9uTWFwIG5vdGlmeUFjdGlvbnNN
YXA7CisgICAgUmVkaXJlY3RBY3Rpb25NYXAgcmVkaXJlY3RBY3Rpb25NYXA7CisgICAgTW9kaWZ5
SGVhZGVyc0FjdGlvbk1hcCBtb2RpZnlIZWFkZXJzQWN0aW9uTWFwOwogCiAgICAgZm9yICh1bnNp
Z25lZCBydWxlSW5kZXggPSAwOyBydWxlSW5kZXggPCBydWxlTGlzdC5zaXplKCk7ICsrcnVsZUlu
ZGV4KSB7CiAgICAgICAgIGNvbnN0IENvbnRlbnRFeHRlbnNpb25SdWxlJiBydWxlID0gcnVsZUxp
c3RbcnVsZUluZGV4XTsKQEAgLTExMSwzMSArMTE1LDM0IEBAIHN0YXRpYyBWZWN0b3I8dW5zaWdu
ZWQ+IHNlcmlhbGl6ZUFjdGlvbnMKICAgICAgICAgfQogCiAgICAgICAgIFJlc291cmNlRmxhZ3Mg
ZmxhZ3MgPSBydWxlLnRyaWdnZXIoKS5mbGFnczsKLSAgICAgICAgdW5zaWduZWQgYWN0aW9uTG9j
YXRpb24gPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7Ci0gICAgICAgIAor
CiAgICAgICAgIGF1dG8gZmluZE9yTWFrZUFjdGlvbkxvY2F0aW9uID0gWyZdIChBY3Rpb25NYXAm
IG1hcCkgewotICAgICAgICAgICAgY29uc3QgYXV0byBleGlzdGluZ0FjdGlvbiA9IG1hcC5maW5k
KGZsYWdzKTsKLSAgICAgICAgICAgIGlmIChleGlzdGluZ0FjdGlvbiA9PSBtYXAuZW5kKCkpIHsK
LSAgICAgICAgICAgICAgICBhY3Rpb25Mb2NhdGlvbiA9IGFjdGlvbnMuc2l6ZSgpOworICAgICAg
ICAgICAgcmV0dXJuIG1hcC5lbnN1cmUoZmxhZ3MsIFsmXSB7CisgICAgICAgICAgICAgICAgYXV0
byBuZXdBY3Rpb25Mb2NhdGlvbiA9IGFjdGlvbnMuc2l6ZSgpOwogICAgICAgICAgICAgICAgIGFj
dGlvbnMuYXBwZW5kKGFjdGlvbkRhdGEuaW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgbWFwLnNl
dChmbGFncywgYWN0aW9uTG9jYXRpb24pOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICAgICAgYWN0aW9uTG9jYXRpb24gPSBleGlzdGluZ0FjdGlvbi0+dmFsdWU7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG5ld0FjdGlvbkxvY2F0aW9uOworICAgICAgICAgICAgfSkuaXRlcmF0b3It
PnZhbHVlOwogICAgICAgICB9OwotICAgICAgICAKLSAgICAgICAgYXV0byBmaW5kT3JNYWtlU3Ry
aW5nQWN0aW9uTG9jYXRpb24gPSBbJl0gKFN0cmluZ0FjdGlvbk1hcCYgbWFwLCBjb25zdCBOb3Rp
ZnlBY3Rpb24mIGFjdGlvbkRhdGEpIHsKLSAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgbm90aWZp
Y2F0aW9uID0gYWN0aW9uRGF0YS5zdHJpbmc7Ci0gICAgICAgICAgICBhdXRvIGV4aXN0aW5nQWN0
aW9uID0gbWFwLmZpbmQoc3RkOjptYWtlX3BhaXIobm90aWZpY2F0aW9uLCBmbGFncykpOwotICAg
ICAgICAgICAgaWYgKGV4aXN0aW5nQWN0aW9uID09IG1hcC5lbmQoKSkgewotICAgICAgICAgICAg
ICAgIGFjdGlvbkxvY2F0aW9uID0gYWN0aW9ucy5zaXplKCk7Ci0gICAgICAgICAgICAgICAgYWN0
aW9ucy5hcHBlbmQoV1RGOjphbHRlcm5hdGl2ZUluZGV4VjxOb3RpZnlBY3Rpb24sIEFjdGlvbkRh
dGE+KTsKLSAgICAgICAgICAgICAgICBzZXJpYWxpemVTdHJpbmcoYWN0aW9ucywgbm90aWZpY2F0
aW9uKTsKLSAgICAgICAgICAgICAgICBtYXAuc2V0KHN0ZDo6bWFrZV9wYWlyKG5vdGlmaWNhdGlv
biwgZmxhZ3MpLCBhY3Rpb25Mb2NhdGlvbik7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgICAgICBhY3Rpb25Mb2NhdGlvbiA9IGV4aXN0aW5nQWN0aW9uLT52YWx1ZTsKKworICAgICAg
ICBhdXRvIGZpbmRPck1ha2VOb3RpZnlBY3Rpb25Mb2NhdGlvbiA9IFsmXSAoYXV0byYgbWFwLCBj
b25zdCBhdXRvJiBhY3Rpb24pIHsKKyAgICAgICAgICAgIHJldHVybiBtYXAuZW5zdXJlKHsgYWN0
aW9uLnN0cmluZywgZmxhZ3MgfSwgWyZdIHsKKyAgICAgICAgICAgICAgICBhdXRvIG5ld0FjdGlv
bkxvY2F0aW9uID0gYWN0aW9ucy5zaXplKCk7CisgICAgICAgICAgICAgICAgYWN0aW9ucy5hcHBl
bmQoYWN0aW9uRGF0YS5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICBhY3Rpb24uc2VyaWFsaXpl
KGFjdGlvbnMpOworICAgICAgICAgICAgICAgIHJldHVybiBuZXdBY3Rpb25Mb2NhdGlvbjsKKyAg
ICAgICAgICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgfTsKLSAgICAgICAgCi0gICAg
ICAgIHN0ZDo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0gKGNvbnN0IENTU0Rpc3BsYXlOb25l
U2VsZWN0b3JBY3Rpb24mIGFjdGlvbkRhdGEpIHsKKworICAgICAgICBhdXRvIGZpbmRPck1ha2VP
dGhlckFjdGlvbkxvY2F0aW9uID0gWyZdIChhdXRvJiBtYXAsIGNvbnN0IGF1dG8mIGFjdGlvbikg
eworICAgICAgICAgICAgcmV0dXJuIG1hcC5lbnN1cmUoeyBhY3Rpb24sIGZsYWdzIH0sIFsmXSB7
CisgICAgICAgICAgICAgICAgYXV0byBuZXdBY3Rpb25Mb2NhdGlvbiA9IGFjdGlvbnMuc2l6ZSgp
OworICAgICAgICAgICAgICAgIGFjdGlvbnMuYXBwZW5kKGFjdGlvbkRhdGEuaW5kZXgoKSk7Cisg
ICAgICAgICAgICAgICAgYWN0aW9uLnNlcmlhbGl6ZShhY3Rpb25zKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbmV3QWN0aW9uTG9jYXRpb247CisgICAgICAgICAgICB9KS5pdGVyYXRvci0+dmFs
dWU7CisgICAgICAgIH07CisKKyAgICAgICAgYXV0byBhY3Rpb25Mb2NhdGlvbiA9IHN0ZDo6dmlz
aXQoV1RGOjptYWtlVmlzaXRvcihbJl0gKGNvbnN0IENTU0Rpc3BsYXlOb25lU2VsZWN0b3JBY3Rp
b24mIGFjdGlvbkRhdGEpIHsKICAgICAgICAgICAgIGNvbnN0IGF1dG8gYWRkUmVzdWx0ID0gY3Nz
RGlzcGxheU5vbmVBY3Rpb25zTWFwLmFkZChydWxlLnRyaWdnZXIoKSwgUGVuZGluZ0Rpc3BsYXlO
b25lQWN0aW9ucygpKTsKICAgICAgICAgICAgIGF1dG8mIHBlbmRpbmdTdHJpbmdBY3Rpb25zID0g
YWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgICAgIGlmICghcGVuZGluZ1N0cmlu
Z0FjdGlvbnMuY29tYmluZWRTZWxlY3RvcnMuaXNFbXB0eSgpKQpAQCAtMTQzLDIxICsxNTAsMjIg
QEAgc3RhdGljIFZlY3Rvcjx1bnNpZ25lZD4gc2VyaWFsaXplQWN0aW9ucwogICAgICAgICAgICAg
cGVuZGluZ1N0cmluZ0FjdGlvbnMuY29tYmluZWRTZWxlY3RvcnMuYXBwZW5kKGFjdGlvbkRhdGEu
c3RyaW5nKTsKICAgICAgICAgICAgIHBlbmRpbmdTdHJpbmdBY3Rpb25zLmNsaWVudExvY2F0aW9u
cy5hcHBlbmQoYWN0aW9uTG9jYXRpb25zLnNpemUoKSk7CiAKLSAgICAgICAgICAgIGFjdGlvbkxv
Y2F0aW9uID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOworICAgICAgICAg
ICAgLy8gcmVzb2x2ZVBlbmRpbmdEaXNwbGF5Tm9uZUFjdGlvbnMgd2lsbCBmaWxsIHRoaXMgaW4g
bGF0ZXIuCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxBY3Rpb25Mb2Nh
dGlvbj46Om1heCgpOwogICAgICAgICB9LCBbJl0gKGNvbnN0IElnbm9yZVByZXZpb3VzUnVsZXNB
Y3Rpb24mKSB7Ci0gICAgICAgICAgICBmaW5kT3JNYWtlQWN0aW9uTG9jYXRpb24oaWdub3JlUHJl
dmlvdXNSdWxlQWN0aW9uc01hcCk7CisgICAgICAgICAgICByZXR1cm4gZmluZE9yTWFrZUFjdGlv
bkxvY2F0aW9uKGlnbm9yZVByZXZpb3VzUnVsZUFjdGlvbnNNYXApOwogICAgICAgICB9LCBbJl0g
KGNvbnN0IEJsb2NrTG9hZEFjdGlvbiYpIHsKLSAgICAgICAgICAgIGZpbmRPck1ha2VBY3Rpb25M
b2NhdGlvbihibG9ja0xvYWRBY3Rpb25zTWFwKTsKKyAgICAgICAgICAgIHJldHVybiBmaW5kT3JN
YWtlQWN0aW9uTG9jYXRpb24oYmxvY2tMb2FkQWN0aW9uc01hcCk7CiAgICAgICAgIH0sIFsmXSAo
Y29uc3QgQmxvY2tDb29raWVzQWN0aW9uJikgewotICAgICAgICAgICAgZmluZE9yTWFrZUFjdGlv
bkxvY2F0aW9uKGJsb2NrQ29va2llc0FjdGlvbnNNYXApOworICAgICAgICAgICAgcmV0dXJuIGZp
bmRPck1ha2VBY3Rpb25Mb2NhdGlvbihibG9ja0Nvb2tpZXNBY3Rpb25zTWFwKTsKICAgICAgICAg
fSwgWyZdIChjb25zdCBNYWtlSFRUUFNBY3Rpb24mKSB7Ci0gICAgICAgICAgICBmaW5kT3JNYWtl
QWN0aW9uTG9jYXRpb24obWFrZUhUVFBTQWN0aW9uc01hcCk7CisgICAgICAgICAgICByZXR1cm4g
ZmluZE9yTWFrZUFjdGlvbkxvY2F0aW9uKG1ha2VIVFRQU0FjdGlvbnNNYXApOwogICAgICAgICB9
LCBbJl0gKGNvbnN0IE5vdGlmeUFjdGlvbiYgYWN0aW9uRGF0YSkgewotICAgICAgICAgICAgZmlu
ZE9yTWFrZVN0cmluZ0FjdGlvbkxvY2F0aW9uKG5vdGlmeUFjdGlvbnNNYXAsIGFjdGlvbkRhdGEp
OwotICAgICAgICB9LCBbJl0gKGNvbnN0IE1vZGlmeUhlYWRlcnNBY3Rpb24mKSB7Ci0gICAgICAg
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50Ci0gICAgICAgIH0sIFsmXSAoY29uc3QgUmVkaXJlY3RB
Y3Rpb24mKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50CisgICAgICAgICAgICBy
ZXR1cm4gZmluZE9yTWFrZU5vdGlmeUFjdGlvbkxvY2F0aW9uKG5vdGlmeUFjdGlvbnNNYXAsIGFj
dGlvbkRhdGEpOworICAgICAgICB9LCBbJl0gKGNvbnN0IE1vZGlmeUhlYWRlcnNBY3Rpb24mIGFj
dGlvbikgeworICAgICAgICAgICAgcmV0dXJuIGZpbmRPck1ha2VPdGhlckFjdGlvbkxvY2F0aW9u
KG1vZGlmeUhlYWRlcnNBY3Rpb25NYXAsIGFjdGlvbik7CisgICAgICAgIH0sIFsmXSAoY29uc3Qg
UmVkaXJlY3RBY3Rpb24mIGFjdGlvbikgeworICAgICAgICAgICAgcmV0dXJuIGZpbmRPck1ha2VP
dGhlckFjdGlvbkxvY2F0aW9uKHJlZGlyZWN0QWN0aW9uTWFwLCBhY3Rpb24pOwogICAgICAgICB9
KSwgYWN0aW9uRGF0YSk7CiAgICAgICAgIGFjdGlvbkxvY2F0aW9ucy5hcHBlbmQoYWN0aW9uTG9j
YXRpb24pOwogICAgIH0KQEAgLTI2Nyw3ICsyNzUsNyBAQCBzdGQ6OmVycm9yX2NvZGUgY29tcGls
ZVJ1bGVMaXN0KENvbnRlbnRFCiB7CiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICBjYWxsT25NYWlu
VGhyZWFkKFtydWxlSlNPTiA9IHJ1bGVKU09OLmlzb2xhdGVkQ29weSgpLCBwYXJzZWRSdWxlTGlz
dCA9IHBhcnNlZFJ1bGVMaXN0Lmlzb2xhdGVkQ29weSgpXSB7Ci0gICAgICAgIEFTU0VSVChwYXJz
ZVJ1bGVMaXN0KHJ1bGVKU09OLCB7IH0pLnZhbHVlKCkgPT0gcGFyc2VkUnVsZUxpc3QpOworICAg
ICAgICBBU1NFUlQocGFyc2VSdWxlTGlzdChydWxlSlNPTiwgc3RkOjpudWxsb3B0KS52YWx1ZSgp
ID09IHBhcnNlZFJ1bGVMaXN0KTsKICAgICB9KTsKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25F
cnJvci5jcHAJKHJldmlzaW9uIDI4NTk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw4
ICsxMDMsMjAgQEAgY29uc3Qgc3RkOjplcnJvcl9jYXRlZ29yeSYgY29udGVudEV4dGVucwogICAg
ICAgICAgICAgICAgIHJldHVybiAiQSByZWRpcmVjdCBleHRlbnNpb24gcGF0aCBtdXN0IHN0YXJ0
IHdpdGggYSBzbGFzaCI7CiAgICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6
SlNPTlJlZGlyZWN0VVJMU2NoZW1lTm90QWxsb3dlZDoKICAgICAgICAgICAgICAgICByZXR1cm4g
IkEgcmVkaXJlY3QgdXJsIHNjaGVtZSBtdXN0IGJlIGluIHRoZSBzZXQgb2YgYWxsb3dlZCBzY2hl
bWVzIjsKKyAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJl
Y3RVUkxTY2hlbWVJbnZhbGlkOgorICAgICAgICAgICAgICAgIHJldHVybiAiQSByZWRpcmVjdCB1
cmwgc2NoZW1lIG11c3QgYmUgYSB2YWxpZCBzY2hlbWUiOworICAgICAgICAgICAgY2FzZSBDb250
ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTFNjaGVtZXNTaG91bGROb3RJbmNsdWRl
SmF2YXNjcmlwdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIlRoZSBzZXQgb2YgYWxsb3dlZCBy
ZWRpcmVjdCBzY2hlbWVzIHNob3VsZG4ndCBpbmNsdWRlIGphdmFzY3JpcHQiOworICAgICAgICAg
ICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTEludmFsaWQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuICJBIHJlZGlyZWN0IHVybCBtdXN0IGJlIHZhbGlkIjsKICAg
ICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RJbnZhbGlk
VHlwZToKICAgICAgICAgICAgICAgICByZXR1cm4gIkEgcmVkaXJlY3QgbXVzdCBoYXZlIGEgbWVt
YmVyIG5hbWVkIFwiZXh0ZW5zaW9uLXBhdGhcIiwgXCJyZWdleC1zdWJzdGl0dXRpb25cIiwgXCJ0
cmFuc2Zvcm1cIiBvciBcInVybFwiIjsKKyAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lv
bkVycm9yOjpKU09OUmVkaXJlY3RJbnZhbGlkUG9ydDoKKyAgICAgICAgICAgICAgICByZXR1cm4g
IkEgcmVkaXJlY3QgcG9ydCBtdXN0IGJlIGVpdGhlciBlbXB0eSBvciBhIG51bWJlciBiZXR3ZWVu
IDAgYW5kIDY1NTM1LCBpbmNsdXNpdmUiOworICAgICAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5z
aW9uRXJyb3I6OkpTT05SZWRpcmVjdEludmFsaWRRdWVyeToKKyAgICAgICAgICAgICAgICByZXR1
cm4gIkEgcmVkaXJlY3QgcXVlcnkgbXVzdCBlaXRoZXIgYmUgZW1wdHkgb3IgYmVnaW4gd2l0aCAn
PyciOworICAgICAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVj
dEludmFsaWRGcmFnbWVudDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIkEgcmVkaXJlY3QgZnJh
Z21lbnQgbXVzdCBlaXRoZXIgYmUgZW1wdHkgb3IgYmVnaW4gd2l0aCAnIyciOwogICAgICAgICAg
ICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05Nb2RpZnlIZWFkZXJzSW52YWxpZE9w
ZXJhdGlvbjoKICAgICAgICAgICAgICAgICByZXR1cm4gIkEgbW9kaWZ5LWhlYWRlcnMgb3BlcmF0
aW9uIG11c3QgaGF2ZSBhbiBvcGVyYXRpb24gdGhhdCBpcyBlaXRoZXIgXCJzZXRcIiwgXCJhcHBl
bmRcIiwgb3IgXCJyZW1vdmVcIiI7CiAgICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25F
cnJvcjo6SlNPTk1vZGlmeUhlYWRlcnNJbmZvTm90QURpY3Rpb25hcnk6CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9u
RXJyb3IuaAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvQ29udGVudEV4dGVuc2lvbkVycm9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDggKzYw
LDE0IEBAIGVudW0gY2xhc3MgQ29udGVudEV4dGVuc2lvbkVycm9yIHsKIAogICAgIEpTT05SZWRp
cmVjdE1pc3NpbmcsCiAgICAgSlNPTlJlZGlyZWN0RXh0ZW5zaW9uUGF0aERvZXNOb3RTdGFydFdp
dGhTbGFzaCwKKyAgICBKU09OUmVkaXJlY3RVUkxTY2hlbWVJbnZhbGlkLAogICAgIEpTT05SZWRp
cmVjdFVSTFNjaGVtZU5vdEFsbG93ZWQsCisgICAgSlNPTlJlZGlyZWN0VVJMU2NoZW1lc1Nob3Vs
ZE5vdEluY2x1ZGVKYXZhc2NyaXB0LAorICAgIEpTT05SZWRpcmVjdFVSTEludmFsaWQsCiAgICAg
SlNPTlJlZGlyZWN0SW52YWxpZFR5cGUsCisgICAgSlNPTlJlZGlyZWN0SW52YWxpZFBvcnQsCisg
ICAgSlNPTlJlZGlyZWN0SW52YWxpZFF1ZXJ5LAorICAgIEpTT05SZWRpcmVjdEludmFsaWRGcmFn
bWVudCwKIAogICAgIEpTT05SZW1vdmVQYXJhbWV0ZXJzTm90U3RyaW5nQXJyYXksCiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRl
bnRFeHRlbnNpb25QYXJzZXIuY3BwCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTc5LDcgKzE3OSw3IEBAIGJvb2wgaXNWYWxpZENTU1NlbGVjdG9yKGNvbnN0IFN0
cmluZyYgc2UKICAgICByZXR1cm4gISFwYXJzZXIucGFyc2VTZWxlY3RvcihzZWxlY3Rvcik7CiB9
CiAKLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPEV4cGVjdGVkPEFjdGlvbiwgc3RkOjplcnJvcl9jb2Rl
Pj4gbG9hZEFjdGlvbihjb25zdCBKU09OOjpPYmplY3QmIHJ1bGVPYmplY3QsIGNvbnN0IEhhc2hT
ZXQ8U3RyaW5nPiYgYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcykKK3N0YXRpYyBzdGQ6Om9wdGlv
bmFsPEV4cGVjdGVkPEFjdGlvbiwgc3RkOjplcnJvcl9jb2RlPj4gbG9hZEFjdGlvbihjb25zdCBK
U09OOjpPYmplY3QmIHJ1bGVPYmplY3QsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8SGFzaFNldDxTdHJp
bmc+PiYgYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcykKIHsKICAgICBhdXRvIGFjdGlvbk9iamVj
dCA9IHJ1bGVPYmplY3QuZ2V0T2JqZWN0KCJhY3Rpb24iKTsKICAgICBpZiAoIWFjdGlvbk9iamVj
dCkKQEAgLTIyNCw3ICsyMjQsNyBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxFeHBlY3RlZDxBY3Rp
b24sIHN0CiAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJvcjo6
SlNPTkludmFsaWRBY3Rpb25UeXBlKTsKIH0KIAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8RXhwZWN0
ZWQ8Q29udGVudEV4dGVuc2lvblJ1bGUsIHN0ZDo6ZXJyb3JfY29kZT4+IGxvYWRSdWxlKGNvbnN0
IEpTT046Ok9iamVjdCYgcnVsZU9iamVjdCwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhbGxvd2Vk
UmVkaXJlY3RVUkxTY2hlbWVzKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8RXhwZWN0ZWQ8Q29udGVu
dEV4dGVuc2lvblJ1bGUsIHN0ZDo6ZXJyb3JfY29kZT4+IGxvYWRSdWxlKGNvbnN0IEpTT046Ok9i
amVjdCYgcnVsZU9iamVjdCwgY29uc3Qgc3RkOjpvcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+JiBh
bGxvd2VkUmVkaXJlY3RVUkxTY2hlbWVzKQogewogICAgIGF1dG8gdHJpZ2dlciA9IGxvYWRUcmln
Z2VyKHJ1bGVPYmplY3QpOwogICAgIGlmICghdHJpZ2dlci5oYXNfdmFsdWUoKSkKQEAgLTIzOSw4
ICsyMzksMTEgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8RXhwZWN0ZWQ8Q29udGVudEV4dAogICAg
IHJldHVybiB7IHsgeyBXVEZNb3ZlKHRyaWdnZXIudmFsdWUoKSksIFdURk1vdmUoYWN0aW9uLT52
YWx1ZSgpKSB9IH0gfTsKIH0KIAotc3RhdGljIEV4cGVjdGVkPFZlY3RvcjxDb250ZW50RXh0ZW5z
aW9uUnVsZT4sIHN0ZDo6ZXJyb3JfY29kZT4gbG9hZEVuY29kZWRSdWxlcyhjb25zdCBTdHJpbmcm
IHJ1bGVKU09OLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGFsbG93ZWRSZWRpcmVjdFVSTFNjaGVt
ZXMpCitzdGF0aWMgRXhwZWN0ZWQ8VmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPiwgc3RkOjpl
cnJvcl9jb2RlPiBsb2FkRW5jb2RlZFJ1bGVzKGNvbnN0IFN0cmluZyYgcnVsZUpTT04sIGNvbnN0
IHN0ZDo6b3B0aW9uYWw8SGFzaFNldDxTdHJpbmc+PiYgYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1l
cykKIHsKKyAgICBpZiAoYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcyAmJiBhbGxvd2VkUmVkaXJl
Y3RVUkxTY2hlbWVzLT5jb250YWlucygiamF2YXNjcmlwdCIpKQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RVUkxTY2hlbWVz
U2hvdWxkTm90SW5jbHVkZUphdmFzY3JpcHQpOworCiAgICAgYXV0byBkZWNvZGVkUnVsZXMgPSBK
U09OOjpWYWx1ZTo6cGFyc2VKU09OKHJ1bGVKU09OKTsKIAogICAgIGlmICghZGVjb2RlZFJ1bGVz
KQpAQCAtMjcyLDcgKzI3NSw3IEBAIHN0YXRpYyBFeHBlY3RlZDxWZWN0b3I8Q29udGVudEV4dGVu
c2lvblIKICAgICByZXR1cm4gcnVsZUxpc3Q7CiB9CiAKLUV4cGVjdGVkPFZlY3RvcjxDb250ZW50
RXh0ZW5zaW9uUnVsZT4sIHN0ZDo6ZXJyb3JfY29kZT4gcGFyc2VSdWxlTGlzdChjb25zdCBTdHJp
bmcmIHJ1bGVKU09OLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGFsbG93ZWRSZWRpcmVjdFVSTFNj
aGVtZXMpCitFeHBlY3RlZDxWZWN0b3I8Q29udGVudEV4dGVuc2lvblJ1bGU+LCBzdGQ6OmVycm9y
X2NvZGU+IHBhcnNlUnVsZUxpc3QoY29uc3QgU3RyaW5nJiBydWxlSlNPTiwgY29uc3Qgc3RkOjpv
cHRpb25hbDxIYXNoU2V0PFN0cmluZz4+JiBhbGxvd2VkUmVkaXJlY3RVUkxTY2hlbWVzKQogewog
I2lmIENPTlRFTlRfRVhURU5TSU9OU19QRVJGT1JNQU5DRV9SRVBPUlRJTkcKICAgICBNb25vdG9u
aWNUaW1lIGxvYWRFeHRlbnNpb25TdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJz
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250
ZW50RXh0ZW5zaW9uUGFyc2VyLmgJKHJldmlzaW9uIDI4NTk1NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMzgsNyArMzgsMTIgQEAgbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKIAogY2xh
c3MgQ29udGVudEV4dGVuc2lvblJ1bGU7CiAKLVdFQkNPUkVfRVhQT1JUIEV4cGVjdGVkPFZlY3Rv
cjxDb250ZW50RXh0ZW5zaW9uUnVsZT4sIHN0ZDo6ZXJyb3JfY29kZT4gcGFyc2VSdWxlTGlzdChj
b25zdCBTdHJpbmcmLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGFsbG93ZWRSZWRpcmVjdFVSTFNj
aGVtZXMpOworLy8gQW4gYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcyBvZiBzdGQ6Om51bGxvcHQg
aW5kaWNhdGVzIHRoYXQgYWxsIFVSTCBzY2hlbWVzIGFyZSBhbGxvd2VkLgorLy8gVGhpcyBpcyB1
c2VkIHdoZW4gcmVjb21waWxpbmcgc291cmNlIGZyb20gb2xkZXIgdmVyc2lvbnMgb2YgV0tDb250
ZW50UnVsZUxpc3RzIG9uIGRpc2ssCisvLyB3aGVyZSB3ZSBkb24ndCBoYXZlIHRoZSBsaXN0IG9m
IGFsbG93ZWQgVVJMIHNjaGVtZXMgYnV0IGFzc3VtZSB0aGF0IGlmIGl0IGNvbXBpbGVkCisvLyBz
dWNjZXNzZnVsbHkgdGhlIGZpcnN0IHRpbWUgdGhlbiBhbGwgdGhlIHNjaGVtZXMgdXNlZCBtdXN0
IGhhdmUgYmVlbiBhbGxvd2VkLgorLy8gQW4gYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcyBvZiBh
biBlbXB0eSBIYXNoU2V0IGluZGljYXRlcyB0aGF0IG5vIGFjdGl2ZSBhY3Rpb25zIGFyZSBhbGxv
d2VkLgorV0VCQ09SRV9FWFBPUlQgRXhwZWN0ZWQ8VmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxl
Piwgc3RkOjplcnJvcl9jb2RlPiBwYXJzZVJ1bGVMaXN0KGNvbnN0IFN0cmluZyYsIGNvbnN0IHN0
ZDo6b3B0aW9uYWw8SGFzaFNldDxTdHJpbmc+PiYgYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcyk7
CiBXRUJDT1JFX0VYUE9SVCBib29sIGlzVmFsaWRDU1NTZWxlY3Rvcihjb25zdCBTdHJpbmcmKTsK
IAogfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNC
YWNrZW5kLmNwcAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjI4LDEwICsyMjgsMTIgQEAgQ29udGVudFJ1bGVMaXN0UmVzdWx0cyBDb250ZW50RXh0ZW5zaW9u
cwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0sIFsmXShjb25zdCBJZ25vcmVQcmV2
aW91c1J1bGVzQWN0aW9uJikgewogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgICAgICB9LCBbJl0gKGNvbnN0IE1vZGlmeUhlYWRlcnNBY3Rpb24m
KSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudAotICAgICAgICAgICAgfSwg
WyZdIChjb25zdCBSZWRpcmVjdEFjdGlvbiYpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTog
SW1wbGVtZW50CisgICAgICAgICAgICB9LCBbJl0gKGNvbnN0IE1vZGlmeUhlYWRlcnNBY3Rpb24m
IGFjdGlvbikgeworICAgICAgICAgICAgICAgIGlmIChpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIu
YWxsb3dzQWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc0ZvclVSTCh1cmwpKQorICAgICAgICAg
ICAgICAgICAgICByZXN1bHRzLnN1bW1hcnkubW9kaWZ5SGVhZGVyc0FjdGlvbnMuYXBwZW5kKGFj
dGlvbik7CisgICAgICAgICAgICB9LCBbJl0gKGNvbnN0IFJlZGlyZWN0QWN0aW9uJiBhY3Rpb24p
IHsKKyAgICAgICAgICAgICAgICBpZiAoaW5pdGlhdGluZ0RvY3VtZW50TG9hZGVyLmFsbG93c0Fj
dGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNGb3JVUkwodXJsKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0cy5zdW1tYXJ5LnJlZGlyZWN0QWN0aW9ucy5hcHBlbmQoYWN0aW9uKTsKICAgICAg
ICAgICAgIH0pLCBhY3Rpb24uZGF0YSgpKTsKICAgICAgICAgfQogCkBAIC0yOTIsOSArMjk0LDkg
QEAgQ29udGVudFJ1bGVMaXN0UmVzdWx0cyBDb250ZW50RXh0ZW5zaW9ucwogICAgICAgICAgICAg
fSwgWyZdKGNvbnN0IElnbm9yZVByZXZpb3VzUnVsZXNBY3Rpb24mKSB7CiAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIH0sIFsmXSAoY29u
c3QgTW9kaWZ5SGVhZGVyc0FjdGlvbiYpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSW1w
bGVtZW50CisgICAgICAgICAgICAgICAgLy8gV2UgY3VycmVudGx5IGhhdmUgbm90IGltcGxlbWVu
dGVkIGFjdGl2ZSBhY3Rpb25zIGZyb20gdGhlIG5ldHdvcmsgcHJvY2VzcyAoQ09SUyBwcmVmbGln
aHQpLgogICAgICAgICAgICAgfSwgWyZdIChjb25zdCBSZWRpcmVjdEFjdGlvbiYpIHsKLSAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50CisgICAgICAgICAgICAgICAgLy8gV2UgY3Vy
cmVudGx5IGhhdmUgbm90IGltcGxlbWVudGVkIGFjdGl2ZSBhY3Rpb25zIGZyb20gdGhlIG5ldHdv
cmsgcHJvY2VzcyAoQ09SUyBwcmVmbGlnaHQpLgogICAgICAgICAgICAgfSksIGFjdGlvbi5kYXRh
KCkpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzI1LDYgKzMyNywxMiBAQCB2b2lkIGFwcGx5UmVz
dWx0c1RvUmVxdWVzdChDb250ZW50UnVsZUxpCiAgICAgICAgIHJlcXVlc3Quc2V0VVJMKG5ld1VS
TCk7CiAgICAgfQogCisgICAgZm9yIChhdXRvJiBhY3Rpb24gOiByZXN1bHRzLnN1bW1hcnkubW9k
aWZ5SGVhZGVyc0FjdGlvbnMpCisgICAgICAgIGFjdGlvbi5hcHBseVRvUmVxdWVzdChyZXF1ZXN0
KTsKKworICAgIGZvciAoYXV0byYgYWN0aW9uIDogcmVzdWx0cy5zdW1tYXJ5LnJlZGlyZWN0QWN0
aW9ucykKKyAgICAgICAgYWN0aW9uLmFwcGx5VG9SZXF1ZXN0KHJlcXVlc3QpOworCiAgICAgaWYg
KHBhZ2UgJiYgcmVzdWx0cy5zaG91bGROb3RpZnlBcHBsaWNhdGlvbigpKSB7CiAgICAgICAgIHJl
c3VsdHMucmVzdWx0cy5yZW1vdmVBbGxNYXRjaGluZyhbXShjb25zdCBhdXRvJiBwYWlyKSB7CiAg
ICAgICAgICAgICByZXR1cm4gIXBhaXIuc2Vjb25kLnNob3VsZE5vdGlmeUFwcGxpY2F0aW9uKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50UnVsZUxpc3RS
ZXN1bHRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
Q29udGVudFJ1bGVMaXN0UmVzdWx0cy5oCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50UnVsZUxpc3RSZXN1bHRzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDYgKzI1LDkgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpZiBFTkFCTEUoQ09O
VEVOVF9FWFRFTlNJT05TKQorCisjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbkFjdGlvbnMuaCIK
ICNpbmNsdWRlIDx3dGYvS2V5VmFsdWVQYWlyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNTQsNiArNTcsOCBAQCBzdHJ1Y3Qg
Q29udGVudFJ1bGVMaXN0UmVzdWx0cyB7CiAgICAgICAgIGJvb2wgbWFkZUhUVFBTIHsgZmFsc2Ug
fTsKICAgICAgICAgYm9vbCBibG9ja2VkQ29va2llcyB7IGZhbHNlIH07CiAgICAgICAgIGJvb2wg
aGFzTm90aWZpY2F0aW9ucyB7IGZhbHNlIH07CisgICAgICAgIFZlY3RvcjxDb250ZW50RXh0ZW5z
aW9uczo6TW9kaWZ5SGVhZGVyc0FjdGlvbj4gbW9kaWZ5SGVhZGVyc0FjdGlvbnM7CisgICAgICAg
IFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6UmVkaXJlY3RBY3Rpb24+IHJlZGlyZWN0QWN0aW9u
czsKIAogICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVy
JikgY29uc3Q7CiAgICAgICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPFN1bW1hcnk+IGRlY29kZShEZWNvZGVyJik7CkBAIC0xNjgsNyArMTczLDExIEBAIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+IGF1dG8gQ29udGVudFJ1bGUKICAgICAgICAgV1RGTW92ZSgq
bWFkZUhUVFBTKSwKICAgICAgICAgV1RGTW92ZSgqYmxvY2tlZENvb2tpZXMpLAogICAgICAgICBX
VEZNb3ZlKCpoYXNOb3RpZmljYXRpb25zKSwKKyAgICAgICAgeyB9LCAvLyBtb2RpZnlIZWFkZXJz
QWN0aW9ucyBhbmQgcmVkaXJlY3RBY3Rpb25zIGhhdmUgbm8gbmVlZCB0byBiZSBzZXJpYWxpemVk
IHRvIGFub3RoZXIgcHJvY2Vzcy4KKyAgICAgICAgeyB9CiAgICAgfX07CiB9CiAKIH0KKworI2Vu
ZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcg
KzI2LDYgQEAKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ2FjaGVQb2xp
Y3kuaCIKICNpbmNsdWRlICJDYWNoZWRDU1NTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiQ29udGVu
dFJ1bGVMaXN0UmVzdWx0cy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgpAQCAtNDQsNiArNDMsNyBAQAogI2luY2x1
ZGUgPHd0Zi9SZWYuaD4KIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisjaW5jbHVk
ZSAiQ29udGVudFJ1bGVMaXN0UmVzdWx0cy5oIgogI2luY2x1ZGUgIlVzZXJDb250ZW50Q29udHJv
bGxlci5oIgogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9h
ZGVyLmNwcAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3Vt
ZW50TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsNiArOTQsNyBAQAogI2luY2x1ZGUg
IlN1YnJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgog
I2luY2x1ZGUgIlVzZXJDb250ZW50UHJvdmlkZXIuaCIKKyNpbmNsdWRlICJVc2VyQ29udGVudFVS
TFBhdHRlcm4uaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9D
b21wbGV0aW9uSGFuZGxlci5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAt
MTczLDcgKzE3NCwxMCBAQCBEb2N1bWVudExvYWRlcjo6RG9jdW1lbnRMb2FkZXIoY29uc3QgUmVz
CiAgICAgLCBtX29yaWdpbmFsU3Vic3RpdHV0ZURhdGFXYXNWYWxpZChzdWJzdGl0dXRlRGF0YS5p
c1ZhbGlkKCkpCiAgICAgLCBtX3N1YnN0aXR1dGVSZXNvdXJjZURlbGl2ZXJ5VGltZXIoKnRoaXMs
ICZEb2N1bWVudExvYWRlcjo6c3Vic3RpdHV0ZVJlc291cmNlRGVsaXZlcnlUaW1lckZpcmVkKQog
ICAgICwgbV9hcHBsaWNhdGlvbkNhY2hlSG9zdChtYWtlVW5pcXVlPEFwcGxpY2F0aW9uQ2FjaGVI
b3N0PigqdGhpcykpCisgICAgLCBtX2FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvblBhdHRlcm5z
KFZlY3RvcjxVc2VyQ29udGVudFVSTFBhdHRlcm4+KCkpCiB7CisgICAgLy8gRklYTUU6IFZlY3Rv
ciBkZWZhdWx0IGNvbnN0cnVjdG9yIHNob3VsZG4ndCBuZWVkIHRvIGtub3cgdGhlIHNpemUgb2Yg
dGhlIGVsZW1lbnRzLAorICAgIC8vIHNvIG1fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uUGF0
dGVybnMgb3VnaHQgdG8gYmUgYWJsZSB0byBiZSBpbml0aWFsaXplZCB3aXRoIGFuIGluaXRpYWxp
emVyIGxpc3QgaW4gdGhlIGhlYWRlciB3aXRob3V0IGluY2x1ZGluZyBVc2VyQ29udGVudFVSTFBh
dHRlcm4uaC4KIH0KIAogRnJhbWVMb2FkZXIqIERvY3VtZW50TG9hZGVyOjpmcmFtZUxvYWRlcigp
IGNvbnN0CkBAIC0yNDMzLDYgKzI0MzcsMzQgQEAgUmVzb3VyY2VFcnJvciBEb2N1bWVudExvYWRl
cjo6Y29udGVudEZpbAogfQogI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0ZJTFRFUklORykKIAor
dm9pZCBEb2N1bWVudExvYWRlcjo6c2V0QWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uUGF0dGVy
bnMoY29uc3Qgc3RkOjpvcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+JiBwYXR0ZXJucykKK3sKKyAg
ICBpZiAoIXBhdHRlcm5zKSB7CisgICAgICAgIG1fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9u
UGF0dGVybnMgPSBzdGQ6Om51bGxvcHQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgVmVj
dG9yPFdlYkNvcmU6OlVzZXJDb250ZW50VVJMUGF0dGVybj4gcGF0dGVyblZlY3RvcjsKKyAgICBw
YXR0ZXJuVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocGF0dGVybnMtPnNpemUoKSk7Cisg
ICAgZm9yIChhdXRvJiBwYXR0ZXJuU3RyaW5nIDogKnBhdHRlcm5zKSB7CisgICAgICAgIFdlYkNv
cmU6OlVzZXJDb250ZW50VVJMUGF0dGVybiBwYXJzZWRQYXR0ZXJuKHBhdHRlcm5TdHJpbmcpOwor
ICAgICAgICBpZiAocGFyc2VkUGF0dGVybi5pc1ZhbGlkKCkpCisgICAgICAgICAgICBwYXR0ZXJu
VmVjdG9yLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKHBhcnNlZFBhdHRlcm4pKTsKKyAgICB9CisK
KyAgICBtX2FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvblBhdHRlcm5zID0gV1RGTW92ZShwYXR0
ZXJuVmVjdG9yKTsKK30KKworYm9vbCBEb2N1bWVudExvYWRlcjo6YWxsb3dzQWN0aXZlQ29udGVu
dFJ1bGVMaXN0QWN0aW9uc0ZvclVSTChjb25zdCBVUkwmIHVybCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uUGF0dGVybnMpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGZvciAoY29uc3QgYXV0byYgcGF0dGVybiA6ICptX2FjdGl2ZUNvbnRlbnRSdWxl
TGlzdEFjdGlvblBhdHRlcm5zKSB7CisgICAgICAgIGlmIChwYXR0ZXJuLm1hdGNoZXModXJsKSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI3VuZGVmIFBBR0VfSUQKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5oCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODcsNiAr
ODcsNyBAQCBjbGFzcyBTaGFyZWRCdWZmZXI7CiBjbGFzcyBTV0NsaWVudENvbm5lY3Rpb247CiBj
bGFzcyBTdWJyZXNvdXJjZUxvYWRlcjsKIGNsYXNzIFN1YnN0aXR1dGVSZXNvdXJjZTsKK2NsYXNz
IFVzZXJDb250ZW50VVJMUGF0dGVybjsKIAogZW51bSBjbGFzcyBTaG91bGRDb250aW51ZTsKIApA
QCAtMzAxLDYgKzMwMiw5IEBAIHB1YmxpYzoKICAgICBib29sIHVzZXJDb250ZW50RXh0ZW5zaW9u
c0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX3VzZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQ7
IH0KICAgICB2b2lkIHNldFVzZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQoYm9vbCBlbmFibGVk
KSB7IG1fdXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZCA9IGVuYWJsZWQ7IH0KIAorICAgIGJv
b2wgYWxsb3dzQWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc0ZvclVSTChjb25zdCBVUkwmKSBj
b25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEFjdGl2ZUNvbnRlbnRSdWxlTGlzdEFj
dGlvblBhdHRlcm5zKGNvbnN0IHN0ZDo6b3B0aW9uYWw8SGFzaFNldDxTdHJpbmc+PiYpOworCiAj
aWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKICAgICBEZXZpY2VPcmllbnRhdGlvbk9yTW90
aW9uUGVybWlzc2lvblN0YXRlIGRldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzU3RhdGUo
KSBjb25zdCB7IHJldHVybiBtX2RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzU3RhdGU7
IH0KICAgICB2b2lkIHNldERldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzU3RhdGUoRGV2
aWNlT3JpZW50YXRpb25Pck1vdGlvblBlcm1pc3Npb25TdGF0ZSBzdGF0ZSkgeyBtX2RldmljZU9y
aWVudGF0aW9uQW5kTW90aW9uQWNjZXNzU3RhdGUgPSBzdGF0ZTsgfQpAQCAtNjUxLDYgKzY1NSw3
IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lkZW1wb3RlbnRNb2RlQXV0b3NpemluZ09ubHlIb25v
cnNQZXJjZW50YWdlcyB7IGZhbHNlIH07CiAgICAgU3RyaW5nIG1fY3VzdG9tTmF2aWdhdG9yUGxh
dGZvcm07CiAgICAgYm9vbCBtX3VzZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQgeyB0cnVlIH07
CisgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8VXNlckNvbnRlbnRVUkxQYXR0ZXJuPj4gbV9hY3Rp
dmVDb250ZW50UnVsZUxpc3RBY3Rpb25QYXR0ZXJuczsKICNpZiBFTkFCTEUoREVWSUNFX09SSUVO
VEFUSU9OKQogICAgIERldmljZU9yaWVudGF0aW9uT3JNb3Rpb25QZXJtaXNzaW9uU3RhdGUgbV9k
ZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc1N0YXRlIHsgRGV2aWNlT3JpZW50YXRpb25P
ck1vdGlvblBlcm1pc3Npb25TdGF0ZTo6UHJvbXB0IH07CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNl
LmNwcAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAxLDYgKzYwMSwx
NSBAQCB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OnNldEhUVFBIZWFkZXJGCiAgICAgbV9wbGF0
Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7CiB9CiAKK3ZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFz
ZTo6cmVtb3ZlSFRUUEhlYWRlckZpZWxkKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICB1cGRh
dGVSZXNvdXJjZVJlcXVlc3QoKTsKKworICAgIG1faHR0cEhlYWRlckZpZWxkcy5yZW1vdmUobmFt
ZSk7CisKKyAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKK30KKwogI2lmIFVT
RShTWVNURU1fUFJFVklFVykKIAogYm9vbCBSZXNvdXJjZVJlcXVlc3RCYXNlOjppc1N5c3RlbVBy
ZXZpZXcoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZVJlcXVlc3RCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgJKHJldmlzaW9uIDI4NTk1NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDUsNiArMTA1LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgYWRkSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVl
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZEhUVFBIZWFkZXJGaWVsZChjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
YWRkSFRUUEhlYWRlckZpZWxkSWZOb3RQcmVzZW50KEhUVFBIZWFkZXJOYW1lLCBjb25zdCBTdHJp
bmcmKTsKKyAgICB2b2lkIHJlbW92ZUhUVFBIZWFkZXJGaWVsZChjb25zdCBTdHJpbmcmIG5hbWUp
OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRl
ck5hbWUpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0NCBAQAorMjAyMS0x
MS0xNyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAg
ICAgIEltcGxlbWVudCBtb3N0IG9mIHJlZGlyZWN0IGFuZCBtb2RpZnktaGVhZGVycyBhY3Rpb24g
dHlwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIz
MzI2OAorCisgICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgorCisgICAgICAgICogU2hh
cmVkL1dlYnNpdGVQb2xpY2llc0RhdGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlUG9s
aWNpZXNEYXRhOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlUG9saWNp
ZXNEYXRhOjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlUG9saWNpZXNEYXRhOjph
cHBseVRvRG9jdW1lbnRMb2FkZXIpOgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlUG9saWNpZXNE
YXRhLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5j
cHA6CisgICAgICAgIChBUEk6OkNvbnRlbnRSdWxlTGlzdFN0b3JlOjpsb29rdXBDb250ZW50UnVs
ZUxpc3QpOgorICAgICAgICAoQVBJOjpDb250ZW50UnVsZUxpc3RTdG9yZTo6Y29tcGlsZUNvbnRl
bnRSdWxlTGlzdCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RT
dG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJV2Vic2l0ZVBvbGljaWVzLmNwcDoK
KyAgICAgICAgKEFQSTo6V2Vic2l0ZVBvbGljaWVzOjpjb3B5IGNvbnN0KToKKyAgICAgICAgKEFQ
STo6V2Vic2l0ZVBvbGljaWVzOjpkYXRhKToKKyAgICAgICAgKEFQSTo6V2Vic2l0ZVBvbGljaWVz
Ojp+V2Vic2l0ZVBvbGljaWVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQ
SVdlYnNpdGVQb2xpY2llcy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmVSZWYuY3BwOgorICAgICAgICAoV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlQ29tcGlsZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRS
dWxlTGlzdFN0b3JlLm1tOgorICAgICAgICAoLVtXS0NvbnRlbnRSdWxlTGlzdFN0b3JlIGNvbXBp
bGVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOmVuY29kZWRDb250ZW50UnVsZUxpc3Q6Y29t
cGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLQ29udGVudFJ1bGVMaXN0U3RvcmUgX2Nv
bXBpbGVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOmVuY29kZWRDb250ZW50UnVsZUxpc3Q6
YWxsb3dlZFJlZGlyZWN0U2NoZW1lczpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1b
V0tDb250ZW50UnVsZUxpc3RTdG9yZSBfY29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZp
ZXI6ZW5jb2RlZENvbnRlbnRSdWxlTGlzdDpjb21wbGV0aW9uSGFuZGxlcjpdKTogRGVsZXRlZC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudFJ1bGVMaXN0U3RvcmVQcml2
YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnBhZ2VQcmVmZXJlbmNl
cy5tbToKKyAgICAgICAgKC1bV0tXZWJwYWdlUHJlZmVyZW5jZXMgX3NldEFjdGl2ZUNvbnRlbnRS
dWxlTGlzdEFjdGlvbnNQYXR0ZXJuczpdKToKKyAgICAgICAgKC1bV0tXZWJwYWdlUHJlZmVyZW5j
ZXMgX2FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNQYXR0ZXJuc10pOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJwYWdlUHJlZmVyZW5jZXNQcml2YXRlLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tOgor
ICAgICAgICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGNvbXBpbGVDb250ZW50RXh0
ZW5zaW9uRm9ySWRlbnRpZmllcjplbmNvZGVkQ29udGVudEV4dGVuc2lvbjpjb21wbGV0aW9uSGFu
ZGxlcjpdKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsvV2ViTG9hZGVyU3RyYXRlZ3ku
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJMb2FkZXJTdHJhdGVneTo6cmVtb3ZlKToKKyAgICAg
ICAgRml4IGEgcmVncmVzc2lvbiBmcm9tIGh0dHBzOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNl
dC8yNzYxOTMvd2Via2l0CisgICAgICAgIFdoZW4gZmV0Y2hpbmcgYSByZXNvdXJjZSB3aXRoIGEg
Zm9yYmlkZGVuIHBvcnQgYW5kIGEgY3VzdG9tIHNjaGVtZSBhbmQge21vZGU6Im5vLWNvcnMifSwK
KyAgICAgICAgV2ViTG9hZGVyU3RyYXRlZ3k6OnJlbW92ZSBpcyBjYWxsZWQgd2l0aCBhIHJlc291
cmNlIHRoYXQgZG9lc24ndCBoYXZlIGFuIGlkZW50aWZpZXIuCisgICAgICAgIE15IHRlc3QgaGl0
IHRoaXMsIHNvIEkgbW92ZWQgdGhlIGNoZWNrIHRvIGJlZm9yZSB0aGUgaWRlbnRpZmllciBpcyB1
c2VkLgorCiAyMDIxLTExLTE3ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29t
PgogCiAgICAgICAgIE1vbWVudHVtIGFuaW1hdG9yIHNvbWV0aW1lcyBzdGFydHMgdGhlIGFuaW1h
dGlvbiBhdCBhIHZlcnkgaGlnaCB2ZWxvY2l0eQpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQv
V2Vic2l0ZVBvbGljaWVzRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFy
ZWQvV2Vic2l0ZVBvbGljaWVzRGF0YS5jcHAJKHJldmlzaW9uIDI4NTk1NCkKKysrIFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL1dlYnNpdGVQb2xpY2llc0RhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw2ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogdm9pZCBXZWJzaXRlUG9saWNpZXNEYXRh
OjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwg
Y29udGVudEJsb2NrZXJzRW5hYmxlZDsKKyAgICBlbmNvZGVyIDw8IGFjdGl2ZUNvbnRlbnRSdWxl
TGlzdEFjdGlvblBhdHRlcm5zOwogICAgIGVuY29kZXIgPDwgYXV0b3BsYXlQb2xpY3k7CiAjaWYg
RU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKICAgICBlbmNvZGVyIDw8IGRldmljZU9yaWVudGF0
aW9uQW5kTW90aW9uQWNjZXNzU3RhdGU7CkBAIC02Miw3ICs2MywxMiBAQCBzdGQ6Om9wdGlvbmFs
PFdlYnNpdGVQb2xpY2llc0RhdGE+IFdlYnNpCiAgICAgZGVjb2RlciA+PiBjb250ZW50QmxvY2tl
cnNFbmFibGVkOwogICAgIGlmICghY29udGVudEJsb2NrZXJzRW5hYmxlZCkKICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAKKworICAgIHN0ZDo6b3B0aW9uYWw8c3RkOjpvcHRpb25h
bDxIYXNoU2V0PFN0cmluZz4+PiBhY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25QYXR0ZXJuczsK
KyAgICBkZWNvZGVyID4+IGFjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvblBhdHRlcm5zOworICAg
IGlmICghYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uUGF0dGVybnMpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisKICAgICBzdGQ6Om9wdGlvbmFsPFdlYnNpdGVBdXRvcGxheVBvbGlj
eT4gYXV0b3BsYXlQb2xpY3k7CiAgICAgZGVjb2RlciA+PiBhdXRvcGxheVBvbGljeTsKICAgICBp
ZiAoIWF1dG9wbGF5UG9saWN5KQpAQCAtMTQ3LDYgKzE1Myw3IEBAIHN0ZDo6b3B0aW9uYWw8V2Vi
c2l0ZVBvbGljaWVzRGF0YT4gV2Vic2kKIAogICAgIHJldHVybiB7IHsKICAgICAgICAgV1RGTW92
ZSgqY29udGVudEJsb2NrZXJzRW5hYmxlZCksCisgICAgICAgIFdURk1vdmUoKmFjdGl2ZUNvbnRl
bnRSdWxlTGlzdEFjdGlvblBhdHRlcm5zKSwKICAgICAgICAgV1RGTW92ZSgqYWxsb3dlZEF1dG9w
bGF5UXVpcmtzKSwKICAgICAgICAgV1RGTW92ZSgqYXV0b3BsYXlQb2xpY3kpLAogI2lmIEVOQUJM
RShERVZJQ0VfT1JJRU5UQVRJT04pCkBAIC0xODMsNiArMTkwLDggQEAgdm9pZCBXZWJzaXRlUG9s
aWNpZXNEYXRhOjphcHBseVRvRG9jdW1lbgogICAgIGlmIChkb2N1bWVudExvYWRlci51c2VyQ29u
dGVudEV4dGVuc2lvbnNFbmFibGVkKCkpCiAgICAgICAgIGRvY3VtZW50TG9hZGVyLnNldFVzZXJD
b250ZW50RXh0ZW5zaW9uc0VuYWJsZWQod2Vic2l0ZVBvbGljaWVzLmNvbnRlbnRCbG9ja2Vyc0Vu
YWJsZWQpOwogCisgICAgZG9jdW1lbnRMb2FkZXIuc2V0QWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0
aW9uUGF0dGVybnMod2Vic2l0ZVBvbGljaWVzLmFjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvblBh
dHRlcm5zKTsKKwogICAgIE9wdGlvblNldDxXZWJDb3JlOjpBdXRvcGxheVF1aXJrPiBxdWlya3M7
CiAgICAgY29uc3QgYXV0byYgYWxsb3dlZFF1aXJrcyA9IHdlYnNpdGVQb2xpY2llcy5hbGxvd2Vk
QXV0b3BsYXlRdWlya3M7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRl
UG9saWNpZXNEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0
ZVBvbGljaWVzRGF0YS5oCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJl
ZC9XZWJzaXRlUG9saWNpZXNEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDcgQEAg
c3RydWN0IFdlYnNpdGVQb2xpY2llc0RhdGEgewogICAgIHN0YXRpYyB2b2lkIGFwcGx5VG9Eb2N1
bWVudExvYWRlcihXZWJzaXRlUG9saWNpZXNEYXRhJiYsIFdlYkNvcmU6OkRvY3VtZW50TG9hZGVy
Jik7CiAKICAgICBib29sIGNvbnRlbnRCbG9ja2Vyc0VuYWJsZWQgeyB0cnVlIH07CisgICAgc3Rk
OjpvcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+IGFjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvblBh
dHRlcm5zIHsgSGFzaFNldDxTdHJpbmc+KCkgfTsKICAgICBPcHRpb25TZXQ8V2Vic2l0ZUF1dG9w
bGF5UXVpcms+IGFsbG93ZWRBdXRvcGxheVF1aXJrczsKICAgICBXZWJzaXRlQXV0b3BsYXlQb2xp
Y3kgYXV0b3BsYXlQb2xpY3kgeyBXZWJzaXRlQXV0b3BsYXlQb2xpY3k6OkRlZmF1bHQgfTsKICNp
ZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjgwLDEwICs1Njgw
LDEyIEBAIHZvaWQgV2ViUGFnZVByb3h5Ojp3aWxsU3VibWl0Rm9ybShGcmFtZUkKICAgICB9KTsK
IH0KIAorI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiB2b2lkIFdlYlBhZ2VQcm94eTo6
Y29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uKFVSTCYmIHVybCwgQ29udGVudFJ1bGVMaXN0UmVz
dWx0cyYmIHJlc3VsdHMpCiB7CiAgICAgbV9uYXZpZ2F0aW9uQ2xpZW50LT5jb250ZW50UnVsZUxp
c3ROb3RpZmljYXRpb24oKnRoaXMsIFdURk1vdmUodXJsKSwgV1RGTW92ZShyZXN1bHRzKSk7CiB9
CisjZW5kaWYKICAgICAKIHZvaWQgV2ViUGFnZVByb3h5OjpkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0
aW9uRGF0YShjb25zdCBXZWJOYXZpZ2F0aW9uRGF0YVN0b3JlJiBzdG9yZSwgRnJhbWVJZGVudGlm
aWVyIGZyYW1lSUQpCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxMDgsNyArMjEwOCw5IEBAIHByaXZhdGU6CiAKICAg
ICB2b2lkIHdpbGxTdWJtaXRGb3JtKFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciwgV2ViQ29yZTo6
RnJhbWVJZGVudGlmaWVyIHNvdXJjZUZyYW1lSUQsIGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8U3Ry
aW5nLCBTdHJpbmc+PiYgdGV4dEZpZWxkVmFsdWVzLCBGb3JtU3VibWl0TGlzdGVuZXJJZGVudGlm
aWVyLCBjb25zdCBVc2VyRGF0YSYpOwogCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykK
ICAgICB2b2lkIGNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbihVUkwmJiwgV2ViQ29yZTo6Q29u
dGVudFJ1bGVMaXN0UmVzdWx0cyYmKTsKKyNlbmRpZgogCiAgICAgLy8gSGlzdG9yeSBjbGllbnQK
ICAgICB2b2lkIGRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKGNvbnN0IFdlYk5hdmlnYXRp
b25EYXRhU3RvcmUmLCBXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIpOwpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24g
Mjg1OTU0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2Vz
LmluCSh3b3JraW5nIGNvcHkpCkBAIC00NjQsNyArNDY0LDkgQEAgbWVzc2FnZXMgLT4gV2ViUGFn
ZVByb3h5IHsKIAogICAgIERpZFJlc2lnbklucHV0RWxlbWVudFN0cm9uZ1Bhc3N3b3JkQXBwZWFy
YW5jZShXZWJLaXQ6OlVzZXJEYXRhIHVzZXJEYXRhKQogCisjaWYgRU5BQkxFKENPTlRFTlRfRVhU
RU5TSU9OUykKICAgICBDb250ZW50UnVsZUxpc3ROb3RpZmljYXRpb24oVVJMIHVybCwgc3RydWN0
IFdlYkNvcmU6OkNvbnRlbnRSdWxlTGlzdFJlc3VsdHMgcmVzdWx0cykKKyNlbmRpZgogCiAjaWYg
RU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBMQVRGT1JNKElPU19GQU1JTFkp
CiAgICAgQWRkUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQoV2ViQ29yZTo6UGxheWJhY2tUYXJn
ZXRDbGllbnRDb250ZXh0SWRlbnRpZmllciBjb250ZXh0SWQpCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0QWN0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0QWN0aW9uLmNw
cAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNv
bnRlbnRSdWxlTGlzdEFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDggQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBUElDb250ZW50UnVsZUxpc3RBY3Rpb24u
aCIKIAorI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisKIG5hbWVzcGFjZSBBUEkgewog
CiBSZWY8Q29udGVudFJ1bGVMaXN0QWN0aW9uPiBDb250ZW50UnVsZUxpc3RBY3Rpb246OmNyZWF0
ZShXZWJDb3JlOjpDb250ZW50UnVsZUxpc3RSZXN1bHRzOjpSZXN1bHQmJiByZXN1bHQpCkBAIC02
MSwzICs2Myw1IEBAIGNvbnN0IFZlY3RvcjxXVEY6OlN0cmluZz4mIENvbnRlbnRSdWxlTGkKIH0K
IAogfSAvLyBuYW1lc3BhY2UgQVBJCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJ
T05TKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlz
dEFjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElD
b250ZW50UnVsZUxpc3RBY3Rpb24uaAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdEFjdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw2ICszMyw3IEBAIG5hbWVzcGFjZSBBUEkgewogCiBjbGFzcyBDb250ZW50UnVsZUxp
c3RBY3Rpb24gZmluYWwgOiBwdWJsaWMgT2JqZWN0SW1wbDxPYmplY3Q6OlR5cGU6OkNvbnRlbnRS
dWxlTGlzdEFjdGlvbj4gewogcHVibGljOgorI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMp
CiAgICAgc3RhdGljIFJlZjxDb250ZW50UnVsZUxpc3RBY3Rpb24+IGNyZWF0ZShXZWJDb3JlOjpD
b250ZW50UnVsZUxpc3RSZXN1bHRzOjpSZXN1bHQmJik7CiAgICAgdmlydHVhbCB+Q29udGVudFJ1
bGVMaXN0QWN0aW9uKCk7CiAKQEAgLTQ1LDYgKzQ2LDcgQEAgcHJpdmF0ZToKICAgICBDb250ZW50
UnVsZUxpc3RBY3Rpb24oV2ViQ29yZTo6Q29udGVudFJ1bGVMaXN0UmVzdWx0czo6UmVzdWx0JiYp
OwogCiAgICAgV2ViQ29yZTo6Q29udGVudFJ1bGVMaXN0UmVzdWx0czo6UmVzdWx0IG1fcmVzdWx0
OworI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiB9OwogICAgIAogfSAvLyBu
YW1lc3BhY2UgQVBJCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVu
dFJ1bGVMaXN0U3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAJKHJldmlzaW9uIDI4NTk1NCkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ5MSw3ICs0OTEsNyBAQCB2b2lkIENvbnRlbnRSdWxlTGlzdFN0b3Jl
Ojpsb29rdXBDb250ZW50CiAgICAgICAgIGlmIChjb250ZW50UnVsZUxpc3QtPm1ldGFEYXRhLnZl
cnNpb24gIT0gQ29udGVudFJ1bGVMaXN0U3RvcmU6OkN1cnJlbnRDb250ZW50UnVsZUxpc3RGaWxl
VmVyc2lvbikgewogICAgICAgICAgICAgaWYgKGF1dG8gc291cmNlRnJvbU9sZFZlcnNpb24gPSBn
ZXRDb250ZW50UnVsZUxpc3RTb3VyY2VGcm9tTWFwcGVkRmlsZSgqY29udGVudFJ1bGVMaXN0KTsg
IXNvdXJjZUZyb21PbGRWZXJzaW9uLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIFJ1bkxv
b3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhp
cyksIHNvdXJjZUZyb21PbGRWZXJzaW9uID0gc291cmNlRnJvbU9sZFZlcnNpb24uaXNvbGF0ZWRD
b3B5KCksIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyLmlzb2xhdGVkQ29weSgpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAg
ICAgICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+Y29tcGlsZUNvbnRlbnRSdWxlTGlzdChpZGVu
dGlmaWVyLCBXVEZNb3ZlKHNvdXJjZUZyb21PbGRWZXJzaW9uKSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOworICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5jb21waWxlQ29u
dGVudFJ1bGVMaXN0KGlkZW50aWZpZXIsIFdURk1vdmUoc291cmNlRnJvbU9sZFZlcnNpb24pLCBz
dGQ6Om51bGxvcHQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC01MzAsMTMg
KzUzMCwxMyBAQCB2b2lkIENvbnRlbnRSdWxlTGlzdFN0b3JlOjpnZXRBdmFpbGFibGVDCiAgICAg
fSk7CiB9CiAKLXZvaWQgQ29udGVudFJ1bGVMaXN0U3RvcmU6OmNvbXBpbGVDb250ZW50UnVsZUxp
c3QoY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIFdURjo6U3RyaW5nJiYganNvbiwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChSZWZQdHI8QVBJOjpDb250ZW50UnVsZUxpc3Q+LCBzdGQ6OmVy
cm9yX2NvZGUpPiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgQ29udGVudFJ1bGVMaXN0U3RvcmU6
OmNvbXBpbGVDb250ZW50UnVsZUxpc3QoY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIFdU
Rjo6U3RyaW5nJiYganNvbiwgc3RkOjpvcHRpb25hbDxIYXNoU2V0PFdURjo6U3RyaW5nPj4mJiBh
bGxvd2VkUmVkaXJlY3RTY2hlbWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxBUEk6
OkNvbnRlbnRSdWxlTGlzdD4sIHN0ZDo6ZXJyb3JfY29kZSk+IGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgQXRvbVN0cmluZzo6aW5pdCgp
OwogICAgIFdlYkNvcmU6OlF1YWxpZmllZE5hbWU6OmluaXQoKTsKICAgICAKLSAgICBhdXRvIHBh
cnNlZFJ1bGVzID0gV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OnBhcnNlUnVsZUxpc3QoanNv
biwgeyB9KTsKKyAgICBhdXRvIHBhcnNlZFJ1bGVzID0gV2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6OnBhcnNlUnVsZUxpc3QoanNvbiwgV1RGTW92ZShhbGxvd2VkUmVkaXJlY3RTY2hlbWVzKSk7
CiAgICAgaWYgKCFwYXJzZWRSdWxlcy5oYXNfdmFsdWUoKSkKICAgICAgICAgcmV0dXJuIGNvbXBs
ZXRpb25IYW5kbGVyKG51bGxwdHIsIHBhcnNlZFJ1bGVzLmVycm9yKCkpOwogICAgIApJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlz
dFN0b3JlLmgJKHJldmlzaW9uIDI4NTk1NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSw2
IEBACiAKICNwcmFnbWEgb25jZQogCi0jaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLQog
I2luY2x1ZGUgIkFQSU9iamVjdC5oIgogI2luY2x1ZGUgPHN5c3RlbV9lcnJvcj4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTUyLDcgKzUwLDggQEAgcHVibGljOgogICAgICAg
ICBDb21waWxlRmFpbGVkLAogICAgICAgICBSZW1vdmVGYWlsZWQKICAgICB9OwotICAgIAorCisj
aWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAgICAvLyBUaGlzIHNob3VsZCBiZSBpbmNy
ZW1lbnRlZCBldmVyeSB0aW1lIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaXMgbWFkZSB0byB0aGUgYnl0
ZWNvZGUsIGZpbGUgZm9ybWF0LCBldGMuCiAgICAgLy8gdG8gcHJldmVudCBjcmFzaGluZyB3aGls
ZSBsb2FkaW5nIG9sZCBkYXRhLgogICAgIC8vIEFsc28gdXBkYXRlIENvbnRlbnRSdWxlTGlzdFN0
b3JlOjpnZXRDb250ZW50UnVsZUxpc3RTb3VyY2UgdG8gYmUgYWJsZSB0byBmaW5kIHRoZSBvcmln
aW5hbCBKU09OCkBAIC02Nyw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBDb250ZW50
UnVsZUxpc3RTdG9yZShjb25zdCBXVEY6OlN0cmluZyYgc3RvcmVQYXRoKTsKICAgICB2aXJ0dWFs
IH5Db250ZW50UnVsZUxpc3RTdG9yZSgpOwogCi0gICAgdm9pZCBjb21waWxlQ29udGVudFJ1bGVM
aXN0KGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBXVEY6OlN0cmluZyYmIGpzb24sIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmUHRyPEFQSTo6Q29udGVudFJ1bGVMaXN0Piwgc3RkOjpl
cnJvcl9jb2RlKT4pOworICAgIHZvaWQgY29tcGlsZUNvbnRlbnRSdWxlTGlzdChjb25zdCBXVEY6
OlN0cmluZyYgaWRlbnRpZmllciwgV1RGOjpTdHJpbmcmJiBqc29uLCBzdGQ6Om9wdGlvbmFsPEhh
c2hTZXQ8V1RGOjpTdHJpbmc+PiYmIGFsbG93ZWRSZWRpcmVjdFNjaGVtZXMsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoUmVmUHRyPEFQSTo6Q29udGVudFJ1bGVMaXN0Piwgc3RkOjplcnJvcl9jb2Rl
KT4pOwogICAgIHZvaWQgbG9va3VwQ29udGVudFJ1bGVMaXN0KGNvbnN0IFdURjo6U3RyaW5nJiBp
ZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxBUEk6OkNvbnRlbnRSdWxl
TGlzdD4sIHN0ZDo6ZXJyb3JfY29kZSk+KTsKICAgICB2b2lkIHJlbW92ZUNvbnRlbnRSdWxlTGlz
dChjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChz
dGQ6OmVycm9yX2NvZGUpPik7CiAgICAgdm9pZCBnZXRBdmFpbGFibGVDb250ZW50UnVsZUxpc3RJ
ZGVudGlmaWVycyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdURjo6VmVjdG9yPFdURjo6U3RyaW5n
Pik+KTsKQEAgLTg0LDYgKzgzLDcgQEAgcHJpdmF0ZToKICAgICBSZWY8V1RGOjpDb25jdXJyZW50
V29ya1F1ZXVlPiBtX2NvbXBpbGVRdWV1ZTsKICAgICBSZWY8V1RGOjpXb3JrUXVldWU+IG1fcmVh
ZFF1ZXVlOwogICAgIFJlZjxXVEY6OldvcmtRdWV1ZT4gbV9yZW1vdmVRdWV1ZTsKKyNlbmRpZiAv
LyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogfTsKIAogY29uc3Qgc3RkOjplcnJvcl9jYXRl
Z29yeSYgY29udGVudFJ1bGVMaXN0U3RvcmVFcnJvckNhdGVnb3J5KCk7CkBAIC05OCw1ICs5OCwz
IEBAIGlubGluZSBzdGQ6OmVycm9yX2NvZGUgbWFrZV9lcnJvcl9jb2RlKEMKIG5hbWVzcGFjZSBz
dGQgewogdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfZXJyb3JfY29kZV9lbnVtPEFQSTo6Q29udGVudFJ1
bGVMaXN0U3RvcmU6OkVycm9yPiA6IHB1YmxpYyB0cnVlX3R5cGUgeyB9OwogfQotCi0jZW5kaWYg
Ly8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9BUElXZWJzaXRlUG9saWNpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9BUElXZWJzaXRlUG9saWNpZXMuY3BwCShyZXZpc2lvbiAyODU5NTQp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2Vic2l0ZVBvbGljaWVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBSZWY8V2Vic2l0ZVBvbGljaWVzPiBXZWJz
aXRlUG9saWNpZXM6OmNvCiB7CiAgICAgYXV0byBwb2xpY2llcyA9IFdlYnNpdGVQb2xpY2llczo6
Y3JlYXRlKCk7CiAgICAgcG9saWNpZXMtPnNldENvbnRlbnRCbG9ja2Vyc0VuYWJsZWQobV9jb250
ZW50QmxvY2tlcnNFbmFibGVkKTsKKyAgICBwb2xpY2llcy0+bV9hY3RpdmVDb250ZW50UnVsZUxp
c3RBY3Rpb25QYXR0ZXJucyA9IG1fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uUGF0dGVybnM7
CiAgICAgcG9saWNpZXMtPnNldEFsbG93ZWRBdXRvcGxheVF1aXJrcyhtX2FsbG93ZWRBdXRvcGxh
eVF1aXJrcyk7CiAgICAgcG9saWNpZXMtPnNldEF1dG9wbGF5UG9saWN5KG1fYXV0b3BsYXlQb2xp
Y3kpOwogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCkBAIC03OCw5ICs3OSw3IEBAIFJl
ZjxXZWJzaXRlUG9saWNpZXM+IFdlYnNpdGVQb2xpY2llczo6Y28KICAgICByZXR1cm4gcG9saWNp
ZXM7CiB9CiAKLVdlYnNpdGVQb2xpY2llczo6fldlYnNpdGVQb2xpY2llcygpCi17Ci19CitXZWJz
aXRlUG9saWNpZXM6On5XZWJzaXRlUG9saWNpZXMoKSA9IGRlZmF1bHQ7CiAKIHZvaWQgV2Vic2l0
ZVBvbGljaWVzOjpzZXRXZWJzaXRlRGF0YVN0b3JlKFJlZlB0cjxXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU+JiYgd2Vic2l0ZURhdGFTdG9yZSkKIHsKQEAgLTEwNCw2ICsxMDMsNyBAQCBXZWJLaXQ6
OldlYnNpdGVQb2xpY2llc0RhdGEgV2Vic2l0ZVBvbGljCiAKICAgICByZXR1cm4gewogICAgICAg
ICBjb250ZW50QmxvY2tlcnNFbmFibGVkKCksCisgICAgICAgIGFjdGl2ZUNvbnRlbnRSdWxlTGlz
dEFjdGlvblBhdHRlcm5zKCksCiAgICAgICAgIGFsbG93ZWRBdXRvcGxheVF1aXJrcygpLAogICAg
ICAgICBhdXRvcGxheVBvbGljeSgpLAogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2Vic2l0ZVBvbGljaWVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVQb2xpY2ll
cy5oCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJ
V2Vic2l0ZVBvbGljaWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDkgQEAgcHVibGlj
OgogICAgIGJvb2wgY29udGVudEJsb2NrZXJzRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
dGVudEJsb2NrZXJzRW5hYmxlZDsgfQogICAgIHZvaWQgc2V0Q29udGVudEJsb2NrZXJzRW5hYmxl
ZChib29sIGVuYWJsZWQpIHsgbV9jb250ZW50QmxvY2tlcnNFbmFibGVkID0gZW5hYmxlZDsgfQog
ICAgIAorICAgIHZvaWQgc2V0QWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uUGF0dGVybnMoc3Rk
OjpvcHRpb25hbDxIYXNoU2V0PFdURjo6U3RyaW5nPj4mJiBwYXR0ZXJucykgeyBtX2FjdGl2ZUNv
bnRlbnRSdWxlTGlzdEFjdGlvblBhdHRlcm5zID0gV1RGTW92ZShwYXR0ZXJucyk7IH0KKyAgICBj
b25zdCBzdGQ6Om9wdGlvbmFsPEhhc2hTZXQ8V1RGOjpTdHJpbmc+PiYgYWN0aXZlQ29udGVudFJ1
bGVMaXN0QWN0aW9uUGF0dGVybnMoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZUNvbnRlbnRSdWxl
TGlzdEFjdGlvblBhdHRlcm5zOyB9CisgICAgCiAgICAgT3B0aW9uU2V0PFdlYktpdDo6V2Vic2l0
ZUF1dG9wbGF5UXVpcms+IGFsbG93ZWRBdXRvcGxheVF1aXJrcygpIGNvbnN0IHsgcmV0dXJuIG1f
YWxsb3dlZEF1dG9wbGF5UXVpcmtzOyB9CiAgICAgdm9pZCBzZXRBbGxvd2VkQXV0b3BsYXlRdWly
a3MoT3B0aW9uU2V0PFdlYktpdDo6V2Vic2l0ZUF1dG9wbGF5UXVpcms+IHF1aXJrcykgeyBtX2Fs
bG93ZWRBdXRvcGxheVF1aXJrcyA9IHF1aXJrczsgfQogICAgIApAQCAtMTM1LDcgKzEzOCw5IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldElkZW1wb3RlbnRNb2RlQXV0b3NpemluZ09ubHlIb25vcnNQ
ZXJjZW50YWdlcyhib29sIGlkZW1wb3RlbnRNb2RlQXV0b3NpemluZ09ubHlIb25vcnNQZXJjZW50
YWdlcykgeyBtX2lkZW1wb3RlbnRNb2RlQXV0b3NpemluZ09ubHlIb25vcnNQZXJjZW50YWdlcyA9
IGlkZW1wb3RlbnRNb2RlQXV0b3NpemluZ09ubHlIb25vcnNQZXJjZW50YWdlczsgfQogCiBwcml2
YXRlOgorICAgIC8vIEZJWE1FOiByZXBsYWNlIG1vc3Qgb3IgYWxsIG9mIHRoZXNlIG1lbWJlcnMg
d2l0aCBhIFdlYnNpdGVQb2xpY2llc0RhdGEuCiAgICAgYm9vbCBtX2NvbnRlbnRCbG9ja2Vyc0Vu
YWJsZWQgeyB0cnVlIH07CisgICAgc3RkOjpvcHRpb25hbDxIYXNoU2V0PFdURjo6U3RyaW5nPj4g
bV9hY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25QYXR0ZXJucyB7IEhhc2hTZXQ8V1RGOjpTdHJp
bmc+KCkgfTsKICAgICBPcHRpb25TZXQ8V2ViS2l0OjpXZWJzaXRlQXV0b3BsYXlRdWlyaz4gbV9h
bGxvd2VkQXV0b3BsYXlRdWlya3M7CiAgICAgV2ViS2l0OjpXZWJzaXRlQXV0b3BsYXlQb2xpY3kg
bV9hdXRvcGxheVBvbGljeSB7IFdlYktpdDo6V2Vic2l0ZUF1dG9wbGF5UG9saWN5OjpEZWZhdWx0
IH07CiAjaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM3Miw2
ICsyMzcyLDcgQEAgdm9pZCBXS1BhZ2VTZXRQYWdlTmF2aWdhdGlvbkNsaWVudChXS1BhZwogICAg
ICAgICAgICAgbV9jbGllbnQuZGlkUmVtb3ZlTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdCh0b0FQ
SSgmcGFnZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgICAgIH0KICAgICAgICAg
CisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAgICAgICAgdm9pZCBjb250ZW50UnVs
ZUxpc3ROb3RpZmljYXRpb24oV2ViUGFnZVByb3h5JiBwYWdlLCBVUkwmJiB1cmwsIENvbnRlbnRS
dWxlTGlzdFJlc3VsdHMmJiByZXN1bHRzKSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAgICBp
ZiAoIW1fY2xpZW50LmNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbikKQEAgLTIzOTEsNiArMjM5
Miw3IEBAIHZvaWQgV0tQYWdlU2V0UGFnZU5hdmlnYXRpb25DbGllbnQoV0tQYWcKICAgICAgICAg
ICAgIGlmICghYXBpTm90aWZpY2F0aW9ucy5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgbV9j
bGllbnQuY29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uKHRvQVBJKCZwYWdlKSwgdG9VUkxSZWYo
dXJsLnN0cmluZygpLmltcGwoKSksIHRvQVBJKEFQSTo6QXJyYXk6OmNyZWF0ZShXVEZNb3ZlKGFw
aUxpc3RJZGVudGlmaWVycykpLnB0cigpKSwgdG9BUEkoQVBJOjpBcnJheTo6Y3JlYXRlKFdURk1v
dmUoYXBpTm90aWZpY2F0aW9ucykpLnB0cigpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsK
ICAgICAgICAgfQorI2VuZGlmCiAgICAgfTsKIAogICAgIFdlYlBhZ2VQcm94eSogd2ViUGFnZVBy
b3h5ID0gdG9JbXBsKHBhZ2VSZWYpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUmVmLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVSZWYu
Y3BwCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3
ICs3Niw3IEBAIHN0YXRpYyBpbmxpbmUgV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3IKIHZvaWQg
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlQ29tcGlsZShXS1VzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmVSZWYgc3RvcmUsIFdLU3RyaW5nUmVmIGlkZW50aWZpZXIsIFdLU3RyaW5nUmVmIGpzb25T
b3VyY2UsIHZvaWQqIGNvbnRleHQsIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUZ1bmN0aW9u
IGNhbGxiYWNrKQogewogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAgdG9JbXBs
KHN0b3JlKS0+Y29tcGlsZUNvbnRlbnRSdWxlTGlzdCh0b1dURlN0cmluZyhpZGVudGlmaWVyKSwg
dG9XVEZTdHJpbmcoanNvblNvdXJjZSksIFtjb250ZXh0LCBjYWxsYmFja10oUmVmUHRyPEFQSTo6
Q29udGVudFJ1bGVMaXN0PiBjb250ZW50UnVsZUxpc3QsIHN0ZDo6ZXJyb3JfY29kZSBlcnJvcikg
eworICAgIHRvSW1wbChzdG9yZSktPmNvbXBpbGVDb250ZW50UnVsZUxpc3QodG9XVEZTdHJpbmco
aWRlbnRpZmllciksIHRvV1RGU3RyaW5nKGpzb25Tb3VyY2UpLCB7IEhhc2hTZXQ8U3RyaW5nPigp
IH0sIFtjb250ZXh0LCBjYWxsYmFja10oUmVmUHRyPEFQSTo6Q29udGVudFJ1bGVMaXN0PiBjb250
ZW50UnVsZUxpc3QsIHN0ZDo6ZXJyb3JfY29kZSBlcnJvcikgewogICAgICAgICBjYWxsYmFjayhl
cnJvciA/IG51bGxwdHIgOiB0b0FQSShjb250ZW50UnVsZUxpc3QubGVha1JlZigpKSwgdG9SZXN1
bHQoZXJyb3IpLCBjb250ZXh0KTsKICAgICB9KTsKICNlbHNlCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3QubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudFJ1bGVMaXN0Lm1tCShy
ZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tD
b250ZW50UnVsZUxpc3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDExIEBAIC0gKEFQ
STo6T2JqZWN0JilfYXBpT2JqZWN0CiAKIC0gKE5TU3RyaW5nICopaWRlbnRpZmllcgogeworI2lm
IEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgcmV0dXJuIF9jb250ZW50UnVsZUxpc3Qt
Pm5hbWUoKTsKKyNlbHNlCisgICAgcmV0dXJuIG5pbDsKKyNlbmRpZgogfQogCiBAZW5kCkBAIC01
OSw3ICs2MywxMSBAQCAtIChOU1N0cmluZyAqKWlkZW50aWZpZXIKIAogKyAoQk9PTClfc3VwcG9y
dHNSZWd1bGFyRXhwcmVzc2lvbjooTlNTdHJpbmcgKilyZWdleAogeworI2lmIEVOQUJMRShDT05U
RU5UX0VYVEVOU0lPTlMpCiAgICAgcmV0dXJuIEFQSTo6Q29udGVudFJ1bGVMaXN0OjpzdXBwb3J0
c1JlZ3VsYXJFeHByZXNzaW9uKHJlZ2V4KTsKKyNlbHNlCisgICAgcmV0dXJuIE5POworI2VuZGlm
CiB9CiAKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Nv
bnRlbnRSdWxlTGlzdFN0b3JlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlLm1tCShyZXZpc2lvbiAyODU5NTQp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3RT
dG9yZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2ltcG9ydCA8d3RmL0Nv
bXBsZXRpb25IYW5kbGVyLmg+CiAjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KIAor
I2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiBzdGF0aWMgV0tFcnJvckNvZGUgdG9XS0Vy
cm9yQ29kZShjb25zdCBzdGQ6OmVycm9yX2NvZGUmIGVycm9yKQogewogICAgIEFTU0VSVChlcnJv
ci5jYXRlZ29yeSgpID09IEFQSTo6Y29udGVudFJ1bGVMaXN0U3RvcmVFcnJvckNhdGVnb3J5KCkp
OwpAQCAtNTIsNiArNTMsNyBAQCBzdGF0aWMgV0tFcnJvckNvZGUgdG9XS0Vycm9yQ29kZShjb25z
dCBzCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIFdLRXJyb3JVbmtub3du
OwogfQorI2VuZGlmCiAKIEBpbXBsZW1lbnRhdGlvbiBXS0NvbnRlbnRSdWxlTGlzdFN0b3JlCiAK
QEAgLTY3LDIxICs2OSwzMCBAQCAtICh2b2lkKWRlYWxsb2MKIAogKyAoaW5zdGFuY2V0eXBlKWRl
ZmF1bHRTdG9yZQogeworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgcmV0dXJu
IHdyYXBwZXIoQVBJOjpDb250ZW50UnVsZUxpc3RTdG9yZTo6ZGVmYXVsdFN0b3JlKCkpOworI2Vs
c2UKKyAgICByZXR1cm4gbmlsOworI2VuZGlmCiB9CiAKICsgKGluc3RhbmNldHlwZSlzdG9yZVdp
dGhVUkw6KE5TVVJMICopdXJsCiB7CisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAg
ICByZXR1cm4gd3JhcHBlcihBUEk6OkNvbnRlbnRSdWxlTGlzdFN0b3JlOjpzdG9yZVdpdGhQYXRo
KHVybC5hYnNvbHV0ZVVSTC5maWxlU3lzdGVtUmVwcmVzZW50YXRpb24pKTsKKyNlbHNlCisgICAg
cmV0dXJuIG5pbDsKKyNlbmRpZgogfQogCiAtICh2b2lkKWNvbXBpbGVDb250ZW50UnVsZUxpc3RG
b3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRSdWxlTGlz
dDooTlNTdHJpbmcgKillbmNvZGVkQ29udGVudFJ1bGVMaXN0IGNvbXBsZXRpb25IYW5kbGVyOih2
b2lkICheKShXS0NvbnRlbnRSdWxlTGlzdCAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVy
CiB7Ci0gICAgW3NlbGYgX2NvbXBpbGVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOmlkZW50
aWZpZXIgZW5jb2RlZENvbnRlbnRSdWxlTGlzdDplbmNvZGVkQ29udGVudFJ1bGVMaXN0IGNvbXBs
ZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKKyAgICBbc2VsZiBfY29tcGlsZUNvbnRl
bnRSdWxlTGlzdEZvcklkZW50aWZpZXI6aWRlbnRpZmllciBlbmNvZGVkQ29udGVudFJ1bGVMaXN0
OmVuY29kZWRDb250ZW50UnVsZUxpc3QgYWxsb3dlZFJlZGlyZWN0U2NoZW1lczpuaWwgY29tcGxl
dGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOwogfQogCiAtICh2b2lkKWxvb2tVcENvbnRl
bnRSdWxlTGlzdEZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBjb21wbGV0aW9u
SGFuZGxlcjoodm9pZCAoXikoV0tDb250ZW50UnVsZUxpc3QgKiwgTlNFcnJvciAqKSljb21wbGV0
aW9uSGFuZGxlcgogeworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgX2NvbnRl
bnRSdWxlTGlzdFN0b3JlLT5sb29rdXBDb250ZW50UnVsZUxpc3QoaWRlbnRpZmllciwgW2NvbXBs
ZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0oUmVmUHRyPEFQ
STo6Q29udGVudFJ1bGVMaXN0PiBjb250ZW50UnVsZUxpc3QsIHN0ZDo6ZXJyb3JfY29kZSBlcnJv
cikgewogICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgIGF1dG8gdXNlckluZm8gPSBA
e05TSGVscEFuY2hvckVycm9yS2V5OiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIlJ1bGUg
bGlzdCBsb29rdXAgZmFpbGVkOiAlcyIsIGVycm9yLm1lc3NhZ2UoKS5jX3N0cigpXX07CkBAIC05
MiwxNyArMTAzLDIxIEBAIC0gKHZvaWQpbG9va1VwQ29udGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmkK
IAogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih3cmFwcGVyKCpjb250ZW50UnVsZUxpc3QpLCBu
aWwpOwogICAgIH0pOworI2VuZGlmCiB9CiAKIC0gKHZvaWQpZ2V0QXZhaWxhYmxlQ29udGVudFJ1
bGVMaXN0SWRlbnRpZmllcnM6KHZvaWQgKF4pKE5TQXJyYXk8TlNTdHJpbmcgKj4qKSljb21wbGV0
aW9uSGFuZGxlcgogeworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgX2NvbnRl
bnRSdWxlTGlzdFN0b3JlLT5nZXRBdmFpbGFibGVDb250ZW50UnVsZUxpc3RJZGVudGlmaWVycyhb
Y29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXShWZWN0
b3I8U3RyaW5nPiBpZGVudGlmaWVycykgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihjcmVh
dGVOU0FycmF5KGlkZW50aWZpZXJzKS5nZXQoKSk7CiAgICAgfSk7CisjZW5kaWYKIH0KIAogLSAo
dm9pZClyZW1vdmVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50
aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TRXJyb3IgKikpY29tcGxldGlvbkhh
bmRsZXIKIHsKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAgIF9jb250ZW50UnVs
ZUxpc3RTdG9yZS0+cmVtb3ZlQ29udGVudFJ1bGVMaXN0KGlkZW50aWZpZXIsIFtjb21wbGV0aW9u
SGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildKHN0ZDo6ZXJyb3JfY29k
ZSBlcnJvcikgewogICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgIGF1dG8gdXNlcklu
Zm8gPSBAe05TSGVscEFuY2hvckVycm9yS2V5OiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpA
IlJ1bGUgbGlzdCByZW1vdmFsIGZhaWxlZDogJXMiLCBlcnJvci5tZXNzYWdlKCkuY19zdHIoKV19
OwpAQCAtMTEyLDYgKzEyNyw3IEBAIC0gKHZvaWQpcmVtb3ZlQ29udGVudFJ1bGVMaXN0Rm9ySWRl
bnRpZmkKIAogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihuaWwpOwogICAgIH0pOworI2VuZGlm
CiB9CiAKICNwcmFnbWEgbWFyayBXS09iamVjdCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbgpAQCAt
MTI5LDE2ICsxNDUsMjEgQEAgLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKIAogLSAodm9pZClf
cmVtb3ZlQWxsQ29udGVudFJ1bGVMaXN0cwogeworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lP
TlMpCiAgICAgX2NvbnRlbnRSdWxlTGlzdFN0b3JlLT5zeW5jaHJvbm91c1JlbW92ZUFsbENvbnRl
bnRSdWxlTGlzdHMoKTsKKyNlbmRpZgogfQogCiAtICh2b2lkKV9pbnZhbGlkYXRlQ29udGVudFJ1
bGVMaXN0VmVyc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcgogeworI2lm
IEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgX2NvbnRlbnRSdWxlTGlzdFN0b3JlLT5p
bnZhbGlkYXRlQ29udGVudFJ1bGVMaXN0VmVyc2lvbihpZGVudGlmaWVyKTsKKyNlbmRpZgogfQog
CiAtICh2b2lkKV9nZXRDb250ZW50UnVsZUxpc3RTb3VyY2VGb3JJZGVudGlmaWVyOihOU1N0cmlu
ZyAqKWlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TU3RyaW5nKikpY29t
cGxldGlvbkhhbmRsZXIKIHsKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAgIGF1
dG8gaGFuZGxlciA9IGFkb3B0TlMoW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldKTsKICAgICBfY29u
dGVudFJ1bGVMaXN0U3RvcmUtPmdldENvbnRlbnRSdWxlTGlzdFNvdXJjZShpZGVudGlmaWVyLCBb
aGFuZGxlcl0oU3RyaW5nIHNvdXJjZSkgewogICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9p
ZCAoXikoTlNTdHJpbmcgKikpaGFuZGxlci5nZXQoKTsKQEAgLTE0NywxMSArMTY4LDE2IEBAIC0g
KHZvaWQpX2dldENvbnRlbnRSdWxlTGlzdFNvdXJjZUZvcklkZW4KICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgcmF3SGFuZGxlcihzb3VyY2UpOwogICAgIH0pOworI2VuZGlmCiB9CiAKLS0gKHZv
aWQpX2NvbXBpbGVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50
aWZpZXIgZW5jb2RlZENvbnRlbnRSdWxlTGlzdDooTlNTdHJpbmcgKikgZW5jb2RlZENvbnRlbnRS
dWxlTGlzdCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoV0tDb250ZW50UnVsZUxpc3QgKiwg
TlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgorLSAodm9pZClfY29tcGlsZUNvbnRlbnRSdWxl
TGlzdEZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBlbmNvZGVkQ29udGVudFJ1
bGVMaXN0OihOU1N0cmluZyAqKWVuY29kZWRDb250ZW50UnVsZUxpc3QgYWxsb3dlZFJlZGlyZWN0
U2NoZW1lczooTlNTZXQ8TlNTdHJpbmcgKj4gKilzY2hlbWVzIGNvbXBsZXRpb25IYW5kbGVyOih2
b2lkICheKShXS0NvbnRlbnRSdWxlTGlzdCAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVy
CiB7Ci0gICAgX2NvbnRlbnRSdWxlTGlzdFN0b3JlLT5jb21waWxlQ29udGVudFJ1bGVMaXN0KGlk
ZW50aWZpZXIsIGVuY29kZWRDb250ZW50UnVsZUxpc3QsIFtjb21wbGV0aW9uSGFuZGxlciA9IG1h
a2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildKFJlZlB0cjxBUEk6OkNvbnRlbnRSdWxlTGlz
dD4gY29udGVudFJ1bGVMaXN0LCBzdGQ6OmVycm9yX2NvZGUgZXJyb3IpIHsKKyNpZiBFTkFCTEUo
Q09OVEVOVF9FWFRFTlNJT05TKQorICAgIEhhc2hTZXQ8U3RyaW5nPiBhbGxvd2VkUmVkaXJlY3RT
Y2hlbWVzOworICAgIGZvciAoTlNTdHJpbmcgKnNjaGVtZSBpbiBzY2hlbWVzKQorICAgICAgICBh
bGxvd2VkUmVkaXJlY3RTY2hlbWVzLmFkZChzY2hlbWUpOworICAgIF9jb250ZW50UnVsZUxpc3RT
dG9yZS0+Y29tcGlsZUNvbnRlbnRSdWxlTGlzdChpZGVudGlmaWVyLCBlbmNvZGVkQ29udGVudFJ1
bGVMaXN0LCBXVEZNb3ZlKGFsbG93ZWRSZWRpcmVjdFNjaGVtZXMpLCBbY29tcGxldGlvbkhhbmRs
ZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXShSZWZQdHI8QVBJOjpDb250ZW50
UnVsZUxpc3Q+IGNvbnRlbnRSdWxlTGlzdCwgc3RkOjplcnJvcl9jb2RlIGVycm9yKSB7CiAgICAg
ICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgYXV0byB1c2VySW5mbyA9IEB7TlNIZWxwQW5j
aG9yRXJyb3JLZXk6IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiUnVsZSBsaXN0IGNvbXBp
bGF0aW9uIGZhaWxlZDogJXMiLCBlcnJvci5tZXNzYWdlKCkuY19zdHIoKV19OwogCkBAIC0xNjEs
MTYgKzE4NywyNSBAQCAtICh2b2lkKV9jb21waWxlQ29udGVudFJ1bGVMaXN0Rm9ySWRlbnRpCiAg
ICAgICAgIH0KICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod3JhcHBlcigqY29udGVudFJ1bGVM
aXN0KSwgbmlsKTsKICAgICB9KTsKKyNlbmRpZgogfQogCiArIChpbnN0YW5jZXR5cGUpZGVmYXVs
dFN0b3JlV2l0aExlZ2FjeUZpbGVuYW1lCiB7CisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9O
UykKICAgICByZXR1cm4gd3JhcHBlcihBUEk6OkNvbnRlbnRSdWxlTGlzdFN0b3JlOjpkZWZhdWx0
U3RvcmUoKSk7CisjZWxzZQorICAgIHJldHVybiBuaWw7CisjZW5kaWYKIH0KIAogKyAoaW5zdGFu
Y2V0eXBlKXN0b3JlV2l0aFVSTEFuZExlZ2FjeUZpbGVuYW1lOihOU1VSTCAqKXVybAogeworI2lm
IEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgcmV0dXJuIHdyYXBwZXIoQVBJOjpDb250
ZW50UnVsZUxpc3RTdG9yZTo6c3RvcmVXaXRoUGF0aCh1cmwuYWJzb2x1dGVVUkwuZmlsZVN5c3Rl
bVJlcHJlc2VudGF0aW9uKSk7CisjZWxzZQorICAgIHJldHVybiBuaWw7CisjZW5kaWYKIH0KIAog
LSAodm9pZCljb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICop
aWRlbnRpZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjooTlNTdHJpbmcgKillbmNvZGVkQ29u
dGVudEV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoX1dLVXNlckNvbnRlbnRG
aWx0ZXIgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgpJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudFJ1bGVMaXN0U3RvcmVQcml2YXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudFJ1
bGVMaXN0U3RvcmVQcml2YXRlLmgJKHJldmlzaW9uIDI4NTk1NCkKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlUHJpdmF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAtICh2b2lkKV9pbnZhbGlkYXRlQ29udGVudFJ1
bGVMaXN0VmVyc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcjsKIC0gKHZv
aWQpX2dldENvbnRlbnRSdWxlTGlzdFNvdXJjZUZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRl
bnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNTdHJpbmcgKikpY29tcGxldGlv
bkhhbmRsZXI7CiAKLS0gKHZvaWQpX2NvbXBpbGVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVy
OihOU1N0cmluZyAqKWlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRSdWxlTGlzdDooTlNTdHJpbmcg
KikgZW5jb2RlZENvbnRlbnRSdWxlTGlzdCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoV0tD
b250ZW50UnVsZUxpc3QgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQp
X2NvbXBpbGVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZp
ZXIgZW5jb2RlZENvbnRlbnRSdWxlTGlzdDooTlNTdHJpbmcgKillbmNvZGVkQ29udGVudFJ1bGVM
aXN0IGFsbG93ZWRSZWRpcmVjdFNjaGVtZXM6KE5TU2V0PE5TU3RyaW5nICo+ICopc2NoZW1lcyBj
b21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoV0tDb250ZW50UnVsZUxpc3QgKiwgTlNFcnJvciAq
KSljb21wbGV0aW9uSGFuZGxlcjsKIAogLy8gRklYTUU6IFJlbW92ZSBfV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlLgogKyAoaW5zdGFuY2V0eXBlKWRlZmF1bHRTdG9yZVdpdGhMZWdhY3lGaWxl
bmFtZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vi
Vmlldy5tbQkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjc2Niw3ICsyNzY2LDExIEBA
ICsgKEJPT0wpX2hhbmRsZXNTYWZlQnJvd3NpbmcKIAogKyAoQk9PTClfd2lsbFVwZ3JhZGVUb0hU
VFBTOihOU1VSTCAqKXVybAogeworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAg
cmV0dXJuIFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tl
bmQ6OnNob3VsZEJlTWFkZVNlY3VyZSh1cmwpOworI2Vsc2UKKyAgICByZXR1cm4gTk87CisjZW5k
aWYKIH0KIAogLSAodm9pZClfc2hvd1NhZmVCcm93c2luZ1dhcm5pbmdXaXRoVGl0bGU6KE5TU3Ry
aW5nICopdGl0bGUgd2FybmluZzooTlNTdHJpbmcgKil3YXJuaW5nIGRldGFpbHM6KE5TQXR0cmli
dXRlZFN0cmluZyAqKWRldGFpbHMgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoQk9PTCkpY29t
cGxldGlvbkhhbmRsZXIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYnBhZ2VQcmVmZXJlbmNlcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJwYWdlUHJlZmVyZW5jZXMubW0JKHJldmlzaW9uIDI4NTk1NCkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnBhZ2VQcmVmZXJlbmNl
cy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTQxLDYgKzE0MSwzMiBAQCAtIChCT09MKV9jb250ZW50
QmxvY2tlcnNFbmFibGVkCiAgICAgcmV0dXJuIF93ZWJzaXRlUG9saWNpZXMtPmNvbnRlbnRCbG9j
a2Vyc0VuYWJsZWQoKTsKIH0KIAorLSAodm9pZClfc2V0QWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0
aW9uUGF0dGVybnM6KE5TU2V0PE5TU3RyaW5nICo+ICopcGF0dGVybnMKK3sKKyAgICBpZiAoIXBh
dHRlcm5zKSB7CisgICAgICAgIF93ZWJzaXRlUG9saWNpZXMtPnNldEFjdGl2ZUNvbnRlbnRSdWxl
TGlzdEFjdGlvblBhdHRlcm5zKHN0ZDo6bnVsbG9wdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBIYXNoU2V0PFN0cmluZz4gcGF0dGVybkhhc2hTZXQ7CisgICAgcGF0dGVybkhhc2hT
ZXQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwYXR0ZXJucy5jb3VudCk7CisgICAgZm9yIChOU1N0
cmluZyAqcGF0dGVybiBpbiBwYXR0ZXJucykKKyAgICAgICAgcGF0dGVybkhhc2hTZXQuYWRkKHBh
dHRlcm4pOworICAgIF93ZWJzaXRlUG9saWNpZXMtPnNldEFjdGl2ZUNvbnRlbnRSdWxlTGlzdEFj
dGlvblBhdHRlcm5zKFdURk1vdmUocGF0dGVybkhhc2hTZXQpKTsKK30KKworLSAoTlNTZXQ8TlNT
dHJpbmcgKj4gKilfYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uUGF0dGVybnMKK3sKKyAgICBj
b25zdCBhdXRvJiBwYXR0ZXJucyA9IF93ZWJzaXRlUG9saWNpZXMtPmFjdGl2ZUNvbnRlbnRSdWxl
TGlzdEFjdGlvblBhdHRlcm5zKCk7CisgICAgaWYgKCFwYXR0ZXJucykKKyAgICAgICAgcmV0dXJu
IG5pbDsKKworICAgIE5TTXV0YWJsZVNldDxOU1N0cmluZyAqPiAqc2V0ID0gW05TTXV0YWJsZVNl
dCBzZXRdOworICAgIGZvciAoY29uc3QgYXV0byYgcGF0dGVybiA6ICpwYXR0ZXJucykKKyAgICAg
ICAgW3NldCBhZGRPYmplY3Q6cGF0dGVybl07CisgICAgcmV0dXJuIHNldDsKK30KKwogLSAodm9p
ZClfc2V0QWxsb3dlZEF1dG9wbGF5UXVpcmtzOihfV0tXZWJzaXRlQXV0b3BsYXlRdWlyaylhbGxv
d2VkUXVpcmtzCiB7CiAgICAgT3B0aW9uU2V0PFdlYktpdDo6V2Vic2l0ZUF1dG9wbGF5UXVpcms+
IHF1aXJrczsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnBh
Z2VQcmVmZXJlbmNlc1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJwYWdlUHJlZmVyZW5jZXNQcml2YXRlLmgJKHJldmlzaW9uIDI4
NTk1NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnBhZ2VQcmVm
ZXJlbmNlc1ByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQCB0eXBlZGVm
IE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLV2Vic2l0CiBAaW50ZXJmYWNlIFdLV2VicGFnZVBy
ZWZlcmVuY2VzIChXS1ByaXZhdGUpCiAKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3Nl
dENvbnRlbnRCbG9ja2Vyc0VuYWJsZWQ6KSBCT09MIF9jb250ZW50QmxvY2tlcnNFbmFibGVkOwor
QHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIHNldHRlcj1fc2V0QWN0aXZlQ29udGVudFJ1bGVM
aXN0QWN0aW9uUGF0dGVybnM6KSBOU1NldDxOU1N0cmluZyAqPiAqX2FjdGl2ZUNvbnRlbnRSdWxl
TGlzdEFjdGlvblBhdHRlcm5zOwogQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0QWxs
b3dlZEF1dG9wbGF5UXVpcmtzOikgX1dLV2Vic2l0ZUF1dG9wbGF5UXVpcmsgX2FsbG93ZWRBdXRv
cGxheVF1aXJrczsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldEF1dG9wbGF5UG9s
aWN5OikgX1dLV2Vic2l0ZUF1dG9wbGF5UG9saWN5IF9hdXRvcGxheVBvbGljeTsKIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCBjb3B5LCBzZXR0ZXI9X3NldEN1c3RvbUhlYWRlckZpZWxkczopIE5TQXJy
YXk8X1dLQ3VzdG9tSGVhZGVyRmllbGRzICo+ICpfY3VzdG9tSGVhZGVyRmllbGRzOwpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0NvbnRlbnRSdWxlTGlzdEFjdGlv
bi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
Q29udGVudFJ1bGVMaXN0QWN0aW9uLm1tCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQ29udGVudFJ1bGVMaXN0QWN0aW9uLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MywyNSArNDMsNDEgQEAgLSAodm9pZClkZWFsbG9jCiAKIC0gKEJPT0wp
YmxvY2tlZExvYWQKIHsKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAgIHJldHVy
biBfYWN0aW9uLT5ibG9ja2VkTG9hZCgpOworI2Vsc2UKKyAgICByZXR1cm4gTk87CisjZW5kaWYK
IH0KIAogLSAoQk9PTClibG9ja2VkQ29va2llcwogeworI2lmIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCiAgICAgcmV0dXJuIF9hY3Rpb24tPmJsb2NrZWRDb29raWVzKCk7CisjZWxzZQorICAg
IHJldHVybiBOTzsKKyNlbmRpZgogfQogCiAtIChCT09MKW1hZGVIVFRQUwogeworI2lmIEVOQUJM
RShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgcmV0dXJuIF9hY3Rpb24tPm1hZGVIVFRQUygpOwor
I2Vsc2UKKyAgICByZXR1cm4gTk87CisjZW5kaWYKIH0KIAogLSAoTlNBcnJheTxOU1N0cmluZyAq
PiAqKW5vdGlmaWNhdGlvbnMKIHsKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAg
IGF1dG8mIHZlY3RvciA9IF9hY3Rpb24tPm5vdGlmaWNhdGlvbnMoKTsKICAgICBpZiAodmVjdG9y
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICByZXR1cm4gY3JlYXRlTlNBcnJh
eSh2ZWN0b3IpLmF1dG9yZWxlYXNlKCk7CisjZWxzZQorICAgIHJldHVybiBuaWw7CisjZW5kaWYK
IH0KIAogLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlLm1tCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQkod29ya2luZyBj
b3B5KQpAQCAtNzAsNyArNzAsNyBAQCArIChpbnN0YW5jZXR5cGUpc3RvcmVXaXRoVVJMOihOU1VS
TCAqKXVyCiAKIC0gKHZvaWQpY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihO
U1N0cmluZyAqKWlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246KE5TU3RyaW5nICop
ZW5jb2RlZENvbnRlbnRSdWxlTGlzdCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoX1dLVXNl
ckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIFtf
Y29udGVudFJ1bGVMaXN0U3RvcmUgX2NvbXBpbGVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVy
OmlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRSdWxlTGlzdDplbmNvZGVkQ29udGVudFJ1bGVMaXN0
IGNvbXBsZXRpb25IYW5kbGVyOl4oV0tDb250ZW50UnVsZUxpc3QgKmNvbnRlbnRSdWxlTGlzdCwg
TlNFcnJvciAqZXJyb3IpIHsKKyAgICBbX2NvbnRlbnRSdWxlTGlzdFN0b3JlIGNvbXBpbGVDb250
ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOmlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRSdWxlTGlz
dDplbmNvZGVkQ29udGVudFJ1bGVMaXN0IGNvbXBsZXRpb25IYW5kbGVyOl4oV0tDb250ZW50UnVs
ZUxpc3QgKmNvbnRlbnRSdWxlTGlzdCwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAgICAgYXV0byBj
b250ZW50RmlsdGVyID0gY29udGVudFJ1bGVMaXN0ID8gYWRvcHROUyhbW19XS1VzZXJDb250ZW50
RmlsdGVyIGFsbG9jXSBfaW5pdFdpdGhXS0NvbnRlbnRSdWxlTGlzdDpjb250ZW50UnVsZUxpc3Rd
KSA6IG5pbDsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY29udGVudEZpbHRlci5nZXQoKSwg
dG9Vc2VyQ29udGVudFJ1bGVMaXN0U3RvcmVFcnJvcihlcnJvcikpOwogICAgIH1dOwpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLmgJKHJl
dmlzaW9uIDI4NTk1NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRp
b25TdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsNyArMTQzLDkgQEAgcHJpdmF0ZToKICNl
bmRpZgogICAgICAgICBib29sIHdpbGxHb1RvQmFja0ZvcndhcmRMaXN0SXRlbShXZWJQYWdlUHJv
eHkmLCBXZWJCYWNrRm9yd2FyZExpc3RJdGVtJiwgYm9vbCBpbkJhY2tGb3J3YXJkQ2FjaGUpIGZp
bmFsOwogCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAgICAgICAgdm9pZCBjb250
ZW50UnVsZUxpc3ROb3RpZmljYXRpb24oV2ViUGFnZVByb3h5JiwgVVJMJiYsIFdlYkNvcmU6OkNv
bnRlbnRSdWxlTGlzdFJlc3VsdHMmJikgZmluYWw7CisjZW5kaWYKICAgICAgICAgdm9pZCBkZWNp
ZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdlYlBhZ2VQcm94eSYsIFJlZjxBUEk6Ok5hdmln
YXRpb25BY3Rpb24+JiYsIFJlZjxXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk+JiYsIEFQSTo6
T2JqZWN0KiB1c2VyRGF0YSkgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgZGVjaWRlUG9saWN5Rm9y
TmF2aWdhdGlvblJlc3BvbnNlKFdlYlBhZ2VQcm94eSYsIFJlZjxBUEk6Ok5hdmlnYXRpb25SZXNw
b25zZT4mJiwgUmVmPFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eT4mJiwgQVBJOjpPYmplY3Qq
IHVzZXJEYXRhKSBvdmVycmlkZTsKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvTmF2aWdhdGlvblN0YXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbQkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC01ODcsNiArNTg3LDcgQEAgdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGll
bnQ6OgogICAgIH0KIH0KIAorI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiB2b2lkIE5h
dmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6Y29udGVudFJ1bGVMaXN0Tm90aWZpY2F0
aW9uKFdlYlBhZ2VQcm94eSYsIFVSTCYmIHVybCwgQ29udGVudFJ1bGVMaXN0UmVzdWx0cyYmIHJl
c3VsdHMpCiB7CiAgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZSkKQEAgLTYyNCw2ICs2MjUsNyBA
QCB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6CiAgICAgICAgICAgICBb
KGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2Vi
VmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3IGNvbnRlbnRSdWxlTGlzdFdpdGhJZGVu
dGlmaWVyOnBhaXIuZmlyc3QgcGVyZm9ybWVkQWN0aW9uOndyYXBwZXIoQVBJOjpDb250ZW50UnVs
ZUxpc3RBY3Rpb246OmNyZWF0ZShXVEZNb3ZlKHBhaXIuc2Vjb25kKSkuZ2V0KCkpIGZvclVSTDp1
cmxdOwogICAgIH0KIH0KKyNlbmRpZgogICAgIAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmln
YXRpb25DbGllbnQ6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNwb25zZShXZWJQYWdlUHJv
eHkmIHBhZ2UsIFJlZjxBUEk6Ok5hdmlnYXRpb25SZXNwb25zZT4mJiBuYXZpZ2F0aW9uUmVzcG9u
c2UsIFJlZjxXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk+JiYgbGlzdGVuZXIsIEFQSTo6T2Jq
ZWN0KiB1c2VyRGF0YSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3Jr
L1dlYkxvYWRlclN0cmF0ZWd5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvTmV0d29yay9XZWJMb2FkZXJTdHJhdGVneS5jcHAJKHJldmlzaW9uIDI4NTk1NCkKKysr
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDc5LDYgKzQ3OSwxMiBAQCB2b2lkIFdlYkxvYWRlclN0cmF0ZWd5
OjpyZW1vdmUoUmVzb3VyY2VMCiAgICAgQVNTRVJUKHJlc291cmNlTG9hZGVyKTsKICAgICBMT0co
TmV0d29ya1NjaGVkdWxpbmcsICIoV2ViUHJvY2VzcykgV2ViTG9hZGVyU3RyYXRlZ3k6OnJlbW92
ZSwgdXJsICclcyciLCByZXNvdXJjZUxvYWRlci0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSk7CiAKKyAgICBhdXRvIGlkZW50aWZpZXIgPSByZXNvdXJjZUxvYWRlci0+aWRlbnRpZmllcigp
OworICAgIGlmICghaWRlbnRpZmllcikgeworICAgICAgICBMT0dfRVJST1IoIldlYkxvYWRlclN0
cmF0ZWd5IHJlbW92aW5nIGEgUmVzb3VyY2VMb2FkZXIgdGhhdCBoYXMgbm8gaWRlbnRpZmllci4i
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChhdXRvIHRhc2sgPSBtX3VybFNj
aGVtZVRhc2tzLnRha2UocmVzb3VyY2VMb2FkZXItPmlkZW50aWZpZXIoKSkpIHsKICAgICAgICAg
QVNTRVJUKCFtX2ludGVybmFsbHlGYWlsZWRSZXNvdXJjZUxvYWRlcnMuY29udGFpbnMocmVzb3Vy
Y2VMb2FkZXIpKTsKICAgICAgICAgdGFzay0+c3RvcExvYWRpbmcoKTsKQEAgLTQ4OSwxMiArNDk1
LDYgQEAgdm9pZCBXZWJMb2FkZXJTdHJhdGVneTo6cmVtb3ZlKFJlc291cmNlTAogICAgICAgICBt
X2ludGVybmFsbHlGYWlsZWRSZXNvdXJjZUxvYWRlcnMucmVtb3ZlKHJlc291cmNlTG9hZGVyKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKLSAgICBhdXRvIGlkZW50aWZpZXIgPSByZXNv
dXJjZUxvYWRlci0+aWRlbnRpZmllcigpOwotICAgIGlmICghaWRlbnRpZmllcikgewotICAgICAg
ICBMT0dfRVJST1IoIldlYkxvYWRlclN0cmF0ZWd5IHJlbW92aW5nIGEgUmVzb3VyY2VMb2FkZXIg
dGhhdCBoYXMgbm8gaWRlbnRpZmllci4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAg
IFJlZlB0cjxXZWJSZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gbV93ZWJSZXNvdXJjZUxvYWRlcnMu
dGFrZShpZGVudGlmaWVyKTsKICAgICAvLyBMb2FkZXIgbWF5IG5vdCBiZSByZWdpc3RlcmVkIGlm
IHdlIGNyZWF0ZWQgaXQsIGJ1dCBoYXZlbid0IHNjaGVkdWxlZCB5ZXQgKGEgYnVuZGxlIGNsaWVu
dCBjYW4gZGVjaWRlIHRvIGNhbmNlbCBzdWNoIHJlcXVlc3QgdmlhIHdpbGxTZW5kUmVxdWVzdCku
CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyODU5NTQpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxOSBAQAorMjAyMS0xMS0xNyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3
ZWJraXQub3JnPgorCisgICAgICAgIEltcGxlbWVudCBtb3N0IG9mIHJlZGlyZWN0IGFuZCBtb2Rp
ZnktaGVhZGVycyBhY3Rpb24gdHlwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzMzI2OAorCisgICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVy
LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNp
b25zLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkluTWVtb3J5Q29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uOjpjcmVhdGUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Y2hlY2tDb21waWxl
ckVycm9yKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0NvbnRlbnRFeHRlbnNpb25TdG9yZS5tbToK
KyAgICAgICAgKGNvbXBpbGVDb250ZW50UnVsZUxpc3QpOgorICAgICAgICAobmF2aWdhdGlvbkRl
bGVnYXRlQWxsb3dpbmdBY3RpdmVBY3Rpb25zT25UZXN0SG9zdCk6CisgICAgICAgIChURVNUX0Yp
OgorCiAyMDIxLTExLTE3ICBaaXhpbmcgTGl1ICA8bGl1c2h1eXUwMTFAZ21haWwuY29tPgogCiAg
ICAgICAgIFtHVEtdW1dQRV0gU3VwcG9ydCBnZXR0aW5nIGFuZCBzZXR0aW5nIEhUVFAgaGVhZGVy
cyBpbiBjdXN0b20gVVJJIHNjaGVtZSBoYW5kbGVycwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwCShyZXZp
c2lvbiAyODU5NTQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVu
dEV4dGVuc2lvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw4IEBACiAKICNpbmNs
dWRlICJjb25maWcuaCIKIAorI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisKICNpbmNs
dWRlICJVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Jbml0aWFsaXplVGhy
ZWFkaW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db21iaW5lZFVSTEZpbHRlcnMuaD4KQEAgLTEy
OSw3ICsxMzEsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBDb21waWxlZENvbnRlbnRFeHRl
bnNpb25EYXRhIGV4dGVuc2lvbkRhdGE7CiAgICAgICAgIEluTWVtb3J5Q29udGVudEV4dGVuc2lv
bkNvbXBpbGF0aW9uQ2xpZW50IGNsaWVudChleHRlbnNpb25EYXRhKTsKLSAgICAgICAgYXV0byBw
YXJzZWRSdWxlcyA9IENvbnRlbnRFeHRlbnNpb25zOjpwYXJzZVJ1bGVMaXN0KGZpbHRlciwgeyB9
KTsKKyAgICAgICAgYXV0byBwYXJzZWRSdWxlcyA9IENvbnRlbnRFeHRlbnNpb25zOjpwYXJzZVJ1
bGVMaXN0KGZpbHRlciwgc3RkOjpudWxsb3B0KTsKICAgICAgICAgYXV0byBjb21waWxlckVycm9y
ID0gQ29udGVudEV4dGVuc2lvbnM6OmNvbXBpbGVSdWxlTGlzdChjbGllbnQsIFdURk1vdmUoZmls
dGVyKSwgV1RGTW92ZShwYXJzZWRSdWxlcy52YWx1ZSgpKSk7CiAKICAgICAgICAgLy8gQ29tcGls
aW5nIHNob3VsZCBhbHdheXMgc3VjY2VlZCBoZXJlLiBXZSBoYXZlIG90aGVyIHRlc3RzIGZvciBj
b21waWxlIGZhaWx1cmVzLgpAQCAtMTM2MCw3ICsxMzYyLDcgQEAgVEVTVF9GKENvbnRlbnRFeHRl
bnNpb25UZXN0LCBEZWVwTkZBKQogICAgIEVYUEVDVF9FUSgxdWwsIGNyZWF0ZU5GQXMoY29tYmlu
ZWRVUkxGaWx0ZXJzKS5zaXplKCkpOwogfQogCi12b2lkIGNoZWNrQ29tcGlsZXJFcnJvcihjb25z
dCBjaGFyKiBqc29uLCBzdGQ6OmVycm9yX2NvZGUgZXhwZWN0ZWRFcnJvciwgY29uc3QgSGFzaFNl
dDxTdHJpbmc+JiBhbGxvd2VkUmVkaXJlY3RVUkxTY2hlbWVzID0geyB9KQordm9pZCBjaGVja0Nv
bXBpbGVyRXJyb3IoY29uc3QgY2hhcioganNvbiwgc3RkOjplcnJvcl9jb2RlIGV4cGVjdGVkRXJy
b3IsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8SGFzaFNldDxTdHJpbmc+PiYgYWxsb3dlZFJlZGlyZWN0
VVJMU2NoZW1lcyA9IHN0ZDo6bnVsbG9wdCkKIHsKICAgICBDb21waWxlZENvbnRlbnRFeHRlbnNp
b25EYXRhIGV4dGVuc2lvbkRhdGE7CiAgICAgSW5NZW1vcnlDb250ZW50RXh0ZW5zaW9uQ29tcGls
YXRpb25DbGllbnQgY2xpZW50KGV4dGVuc2lvbkRhdGEpOwpAQCAtMTUzMCw2ICsxNTMyLDcgQEAg
VEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBJbnZhbGlkSlNPTgogICAgICAgICBDb250ZW50
RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkQWN0aW9uVHlwZSk7CiAgICAgY2hlY2tDb21waWxl
ckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiY3NzLWRpc3BsYXktbm9uZVwifSxcInRy
aWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLAogICAgICAgICBDb250
ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkQ1NTRGlzcGxheU5vbmVBY3Rpb25UeXBlKTsK
KyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIiIsIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTlJl
ZGlyZWN0VVJMU2NoZW1lc1Nob3VsZE5vdEluY2x1ZGVKYXZhc2NyaXB0LCB7IHsgImphdmFzY3Jp
cHQiIH0gfSk7CiAKICAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBl
XCI6XCJpZ25vcmUtcHJldmlvdXMtcnVsZXNcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwi
Olwid2Via2l0Lm9yZ1wifX0sIgogICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiY3Nz
LWRpc3BsYXktbm9uZVwiLFwic2VsZWN0b3JcIjpcIi5oaWRkZW5cIn0sXCJ0cmlnZ2VyXCI6e1wi
dXJsLWZpbHRlclwiOlwiLipcIn19XSIsIHsgfSk7CkBAIC0xNTU4LDEyICsxNTYxLDIwIEBAIFRF
U1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgSW52YWxpZEpTT04KICAgICBjaGVja0NvbXBpbGVy
RXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVkaXJlY3RcIjp7
XCJ0cmFuc2Zvcm1cIjp7XCJxdWVyeS10cmFuc2Zvcm1cIjp7XCJhZGQtb3ItcmVwbGFjZS1wYXJh
bWV0ZXJzXCI6W3t9XX19fX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9y
Z1wifX1dIiwgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OQWRkT3JSZXBsYWNlUGFyYW1ldGVy
c0tleVZhbHVlTWlzc2luZ0tleVN0cmluZyk7CiAgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wi
YWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixcInJlZGlyZWN0XCI6e1widHJhbnNmb3Jt
XCI6e1wicXVlcnktdHJhbnNmb3JtXCI6e1wiYWRkLW9yLXJlcGxhY2UtcGFyYW1ldGVyc1wiOlt7
XCJrZXlcIjo1fV19fX19LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdc
In19XSIsIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkFkZE9yUmVwbGFjZVBhcmFtZXRlcnNL
ZXlWYWx1ZU1pc3NpbmdLZXlTdHJpbmcpOwogICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFj
dGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRpcmVjdFwiOntcInRyYW5zZm9ybVwi
OntcInF1ZXJ5LXRyYW5zZm9ybVwiOntcImFkZC1vci1yZXBsYWNlLXBhcmFtZXRlcnNcIjpbe1wi
a2V5XCI6XCJrXCIsXCJ2YWx1ZVwiOjV9XX19fX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwi
Olwid2Via2l0Lm9yZ1wifX1dIiwgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OQWRkT3JSZXBs
YWNlUGFyYW1ldGVyc0tleVZhbHVlTWlzc2luZ1ZhbHVlU3RyaW5nKTsKLSAgICBjaGVja0NvbXBp
bGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVkaXJlY3Rc
Ijp7XCJ1cmxcIjpcImFib3V0OmJsYW5rXCJ9fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6
XCJ3ZWJraXQub3JnXCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVS
TFNjaGVtZU5vdEFsbG93ZWQpOwotICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwi
OntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRpcmVjdFwiOntcInVybFwiOlwiYWJvdXQ6Ymxh
bmtcIn19LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsIHsg
fSwgeyAiYWJvdXQiIH0pOwotICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntc
InR5cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRpcmVjdFwiOntcImV4dGVuc2lvbi1wYXRoXCI6XCJk
b2VzL25vdC9zdGFydC93aXRoL3NsYXNoL1wifX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwi
Olwid2Via2l0Lm9yZ1wifX1dIiwgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RF
eHRlbnNpb25QYXRoRG9lc05vdFN0YXJ0V2l0aFNsYXNoKTsKKyAgICBjaGVja0NvbXBpbGVyRXJy
b3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVkaXJlY3RcIjp7XCJ1
cmxcIjpcImFib3V0OmJsYW5rXCJ9fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJr
aXQub3JnXCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTFNjaGVt
ZU5vdEFsbG93ZWQsIHsgeyAibm90LWFib3V0IiB9IH0pOworICAgIGNoZWNrQ29tcGlsZXJFcnJv
cigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRpcmVjdFwiOntcInVy
bFwiOlwiYWJvdXQ6YmxhbmtcIn19LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtp
dC5vcmdcIn19XSIsIHsgfSwgeyB7ICJhYm91dCIgfSB9KTsKKyAgICBjaGVja0NvbXBpbGVyRXJy
b3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVkaXJlY3RcIjp7XCJ1
cmxcIjpcImh0dHBzOi8vMTI3Li4xL1wifX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwi
d2Via2l0Lm9yZ1wifX1dIiwgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RVUkxJ
bnZhbGlkLCB7IHsgImh0dHBzIiB9IH0pOworICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFj
dGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRpcmVjdFwiOntcInVybFwiOlwiYWJv
dXQ6YmxhbmtcIn19LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19
XSIsIHsgfSwgeyB7ICJhYm91dCIgfSB9KTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJh
Y3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVkaXJlY3RcIjp7XCJ0cmFuc2Zvcm1c
Ijp7XCJwb3J0XCI6XCJub3QgYSBudW1iZXJcIn19fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVy
XCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVj
dEludmFsaWRQb3J0KTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0
eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVkaXJlY3RcIjp7XCJ0cmFuc2Zvcm1cIjp7XCJwb3J0XCI6
XCI2NTUzNlwifX19LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19
XSIsIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTlJlZGlyZWN0SW52YWxpZFBvcnQpOworICAg
IGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIs
XCJyZWRpcmVjdFwiOntcInRyYW5zZm9ybVwiOntcInF1ZXJ5XCI6XCJuby1xdWVzdGlvbi1tYXJr
XCJ9fX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwgQ29u
dGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RJbnZhbGlkUXVlcnkpOworICAgIGNoZWNr
Q29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRp
cmVjdFwiOntcInRyYW5zZm9ybVwiOntcImZyYWdtZW50XCI6XCJuby1udW1iZXItc2lnblwifX19
LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsIENvbnRlbnRF
eHRlbnNpb25FcnJvcjo6SlNPTlJlZGlyZWN0SW52YWxpZEZyYWdtZW50KTsKKyAgICBjaGVja0Nv
bXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVkaXJl
Y3RcIjp7XCJ0cmFuc2Zvcm1cIjp7XCJwb3J0XCI6XCI2NTUzNVwifX19LFwidHJpZ2dlclwiOntc
InVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsIHsgfSk7CisgICAgY2hlY2tDb21waWxl
ckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixcInJlZGlyZWN0XCI6
e1widHJhbnNmb3JtXCI6e1wicG9ydFwiOlwiXCJ9fX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRl
clwiOlwid2Via2l0Lm9yZ1wifX1dIiwgeyB9KTsKICAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7
XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVkaXJlY3RcIjp7XCJleHRlbnNp
b24tcGF0aFwiOlwiL2RvZXMvc3RhcnQvd2l0aC9zbGFzaC9cIn19LFwidHJpZ2dlclwiOntcInVy
bC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsIHsgfSk7Ci0gICAgY2hlY2tDb21waWxlckVy
cm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixcInJlZGlyZWN0XCI6e1wi
dHJhbnNmb3JtXCI6e1wic2NoZW1lXCI6XCJhYm91dFwifX19LFwidHJpZ2dlclwiOntcInVybC1m
aWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTlJl
ZGlyZWN0VVJMU2NoZW1lTm90QWxsb3dlZCk7Ci0gICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wi
YWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixcInJlZGlyZWN0XCI6e1widHJhbnNmb3Jt
XCI6e1wic2NoZW1lXCI6XCJhYm91dFwifX19LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpc
IndlYmtpdC5vcmdcIn19XSIsIHsgfSwgeyAiYWJvdXQiIH0pOworICAgIGNoZWNrQ29tcGlsZXJF
cnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRpcmVjdFwiOntc
InRyYW5zZm9ybVwiOntcInNjaGVtZVwiOlwiYWJvdXRcIn19fSxcInRyaWdnZXJcIjp7XCJ1cmwt
ZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05S
ZWRpcmVjdFVSTFNjaGVtZU5vdEFsbG93ZWQsIHsgeyAibm90LWFib3V0IiB9IH0pOworICAgIGNo
ZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJy
ZWRpcmVjdFwiOntcInRyYW5zZm9ybVwiOntcInNjaGVtZVwiOlwiIUAjJCVcIn19fSxcInRyaWdn
ZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9u
RXJyb3I6OkpTT05SZWRpcmVjdFVSTFNjaGVtZUludmFsaWQpOworICAgIGNoZWNrQ29tcGlsZXJF
cnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRpcmVjdFwiOntc
InRyYW5zZm9ybVwiOntcInNjaGVtZVwiOlwiQWJvdXRcIn19fSxcInRyaWdnZXJcIjp7XCJ1cmwt
ZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCB7IH0sIHsgeyAiYWJvdXQiIH0gfSk7CiAgICAg
Y2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwibW9kaWZ5LWhlYWRl
cnNcIixcInJlcXVlc3QtaGVhZGVyc1wiOjV9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpc
IndlYmtpdC5vcmdcIn19XSIsIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTk1vZGlmeUhlYWRl
cnNOb3RBcnJheSk7CiAgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlw
ZVwiOlwibW9kaWZ5LWhlYWRlcnNcIixcInJlcXVlc3QtaGVhZGVyc1wiOls1XX0sXCJ0cmlnZ2Vy
XCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwgQ29udGVudEV4dGVuc2lvbkVy
cm9yOjpKU09OTW9kaWZ5SGVhZGVyc0luZm9Ob3RBRGljdGlvbmFyeSk7CiAgICAgY2hlY2tDb21w
aWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwibW9kaWZ5LWhlYWRlcnNcIixcInJl
cXVlc3QtaGVhZGVyc1wiOlt7fV19LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtp
dC5vcmdcIn19XSIsIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTk1vZGlmeUhlYWRlcnNNaXNz
aW5nT3BlcmF0aW9uKTsKQEAgLTMwMjQsMTEgKzMwMzUsMTEgQEAgVEVTVF9GKENvbnRlbnRFeHRl
bnNpb25UZXN0LCBTZXJpYWxpemF0aQogICAgICAgICAiaG9zdCIsCiAgICAgICAgICJwYXNzd29y
ZCIsCiAgICAgICAgIHsgLyogcGF0aCAqLyB9LAotICAgICAgICAicG9ydCIsCisgICAgICAgIDEy
MywKICAgICAgICAgeyAvKiBxdWVyeSAqLyB9LAogICAgICAgICAic2NoZW1lIiwKICAgICAgICAg
InVzZXJuYW1lIgotICAgIH0gfSB9LCA3NSk7CisgICAgfSB9IH0sIDcwKTsKICAgICBjaGVja1Jl
ZGlyZWN0QWN0aW9uU2VyaWFsaXphdGlvbih7IHsgUmVkaXJlY3RBY3Rpb246OlVSTFRyYW5zZm9y
bUFjdGlvbiB7IHsgfSwgeyB9LCB7IH0sIHsgfSwgeyB9LCB7ICJxdWVyeSIgfSwgeyB9LCB7IH0g
fSB9IH0sIDIwKTsKICAgICBjaGVja1JlZGlyZWN0QWN0aW9uU2VyaWFsaXphdGlvbih7IHsgUmVk
aXJlY3RBY3Rpb246OlVSTFRyYW5zZm9ybUFjdGlvbiB7IHsgfSwgeyB9LCB7IH0sIHsgfSwgeyB9
LAogICAgICAgICB7IFJlZGlyZWN0QWN0aW9uOjpVUkxUcmFuc2Zvcm1BY3Rpb246OlF1ZXJ5VHJh
bnNmb3JtIHsgeyB7ICJrZXkxIiwgZmFsc2UsICJ2YWx1ZTEiIH0sIHsgImtlefCfkqkiLCBmYWxz
ZSwgInZhbHVlMiIgfSB9LCB7ICJ0ZXN0U3RyaW5nMSIsICJ0ZXN0U3RyaW5nMiIgfSB9IH0sIHsg
fSwgeyB9LApAQCAtMzA0OCwzICszMDU5LDUgQEAgVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0
LCBTZXJpYWxpemF0aQogfQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL0RGQUNvbWJpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvREZBQ29tYmluZXIuY3BwCShyZXZpc2lvbiAyODU5NTQp
CisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvREZBQ29tYmluZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw4IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAor
I2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisKICNpbmNsdWRlICJERkFIZWxwZXJzLmgi
CiAjaW5jbHVkZSA8V2ViQ29yZS9ERkFDb21iaW5lci5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhy
ZWFkLmg+CkBAIC0xMTksMyArMTIxLDUgQEAgVEVTVF9GKERGQUNvbWJpbmVyVGVzdCwgQ29tYmlu
ZWRJbnB1dFJlYQogfQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCisKKyNlbmRpZiAv
LyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL0RGQUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvREZBSGVscGVycy5oCShyZXZpc2lvbiAyODU5NTQpCisrKyBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvREZBSGVscGVycy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSw2ICsyNSw4IEBACiAKICNwcmFnbWEgb25jZQogCisjaWYgRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKKwogI2luY2x1ZGUgPFdlYkNvcmUvQ29tYmluZWRVUkxGaWx0ZXJzLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9ORkEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05GQVRvREZBLmg+CkBA
IC02NywzICs2OSw1IEBAIHN0YXRpYyBDb250ZW50RXh0ZW5zaW9uczo6REZBIGJ1aWxkREZBRnIK
IH0KIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQorCisjZW5kaWYgLy8gRU5BQkxFKENP
TlRFTlRfRVhURU5TSU9OUykKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9ERkFNaW5pbWl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9ERkFNaW5pbWl6ZXIuY3BwCShyZXZpc2lvbiAyODU5NTQpCisrKyBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvREZBTWluaW1pemVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjUsNiArMjUsOCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKKyNpZiBFTkFCTEUo
Q09OVEVOVF9FWFRFTlNJT05TKQorCiAjaW5jbHVkZSAiREZBSGVscGVycy5oIgogI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+CiAKQEAgLTExOSwzICsxMjEsNSBAQCBURVNUX0YoREZBTWluaW1p
emVyVGVzdCwgU2ltcGxlRmFsbEJhY2tUCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRB
UEkKKworI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tD
b250ZW50RXh0ZW5zaW9uU3RvcmUubW0JKHJldmlzaW9uIDI4NTk1NCkKKysrIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0JKHdv
cmtpbmcgY29weSkKQEAgLTI4LDExICsyOCwxNSBAQAogCiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxp
dGllcy5oIgogI2ltcG9ydCAiVGVzdC5oIgorI2ltcG9ydCAiVGVzdE5hdmlnYXRpb25EZWxlZ2F0
ZS5oIgorI2ltcG9ydCAiVGVzdFVSTFNjaGVtZUhhbmRsZXIuaCIKICNpbXBvcnQgPFdlYktpdC9X
S0NvbnRlbnRSdWxlTGlzdC5oPgogI2ltcG9ydCA8V2ViS2l0L1dLQ29udGVudFJ1bGVMaXN0U3Rv
cmVQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJwYWdlUHJlZmVyZW5jZXNQcml2YXRl
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oPgogI2lt
cG9ydCA8V2ViS2l0L19XS1VzZXJDb250ZW50RmlsdGVyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWlu
UHRyLmg+CisjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CiAKIGNsYXNzIFdLQ29udGVudFJ1bGVMaXN0
U3RvcmVUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgewogcHVibGljOgpAQCAtNDc0LDMgKzQ3
OCwyNzYgQEAgVEVTVF9GKFdLQ29udGVudFJ1bGVMaXN0U3RvcmVUZXN0LCBfV0tVcwogICAgIH1d
OwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUxvb2tpbmdVcCk7CiB9CisKK3N0
YXRpYyBSZXRhaW5QdHI8V0tDb250ZW50UnVsZUxpc3Q+IGNvbXBpbGVDb250ZW50UnVsZUxpc3Qo
Y29uc3QgY2hhcioganNvbiwgTlNTdHJpbmcgKmlkZW50aWZpZXIgPSBAInRlc3RpZGVudGlmaWVy
IikKK3sKKyAgICBbW1dLQ29udGVudFJ1bGVMaXN0U3RvcmUgZGVmYXVsdFN0b3JlXSBfcmVtb3Zl
QWxsQ29udGVudFJ1bGVMaXN0c107CisKKyAgICBfX2Jsb2NrIFJldGFpblB0cjxXS0NvbnRlbnRS
dWxlTGlzdD4gbGlzdDsKKyAgICBbW1dLQ29udGVudFJ1bGVMaXN0U3RvcmUgZGVmYXVsdFN0b3Jl
XSBfY29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6QCJ0ZXN0aWRlbnRpZmllciIg
ZW5jb2RlZENvbnRlbnRSdWxlTGlzdDpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVzIiwg
anNvbl0gYWxsb3dlZFJlZGlyZWN0U2NoZW1lczpbTlNTZXQgc2V0V2l0aE9iamVjdHM6QCJ0ZXN0
c2NoZW1lIiwgQCJvdGhlcnRlc3RzY2hlbWUiLCBuaWxdIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tD
b250ZW50UnVsZUxpc3QgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgRVhQRUNU
X05VTEwoZXJyb3IpOworICAgICAgICBsaXN0ID0gZmlsdGVyOworICAgIH1dOworICAgIHdoaWxl
ICghbGlzdCkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoKTsKKwor
ICAgIHJldHVybiBsaXN0OworfQorCitzdGF0aWMgUmV0YWluUHRyPFRlc3ROYXZpZ2F0aW9uRGVs
ZWdhdGU+IG5hdmlnYXRpb25EZWxlZ2F0ZUFsbG93aW5nQWN0aXZlQWN0aW9uc09uVGVzdEhvc3Qo
KQoreworICAgIHN0YXRpYyBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbVGVzdE5hdmlnYXRpb25E
ZWxlZ2F0ZSBuZXddKTsKKyAgICBkZWxlZ2F0ZS5nZXQoKS5kZWNpZGVQb2xpY3lGb3JOYXZpZ2F0
aW9uQWN0aW9uV2l0aFByZWZlcmVuY2VzID0gXihXS05hdmlnYXRpb25BY3Rpb24gKiwgV0tXZWJw
YWdlUHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzLCB2b2lkICheZGVjaXNpb25IYW5kbGVyKShXS05h
dmlnYXRpb25BY3Rpb25Qb2xpY3ksIFdLV2VicGFnZVByZWZlcmVuY2VzICopKSB7CisgICAgICAg
IHByZWZlcmVuY2VzLl9hY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25QYXR0ZXJucyA9IFtOU1Nl
dCBzZXRXaXRoT2JqZWN0OkAiKjovL3Rlc3Rob3N0LyoiXTsKKyAgICAgICAgZGVjaXNpb25IYW5k
bGVyKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeUFsbG93LCBwcmVmZXJlbmNlcyk7CisgICAgfTsK
KyAgICByZXR1cm4gZGVsZWdhdGU7Cit9CisKK1RFU1RfRihXS0NvbnRlbnRSdWxlTGlzdFN0b3Jl
VGVzdCwgTW9kaWZ5SGVhZGVycykKK3sKKyAgICBhdXRvIGxpc3QgPSBjb21waWxlQ29udGVudFJ1
bGVMaXN0KFIiSlNPTigKKyAgICAgICAgWyB7CisgICAgICAgICAgICAiYWN0aW9uIjogeyAidHlw
ZSI6ICJtb2RpZnktaGVhZGVycyIsICJyZXF1ZXN0LWhlYWRlcnMiOiBbIHsKKyAgICAgICAgICAg
ICAgICAib3BlcmF0aW9uIjogInNldCIsCisgICAgICAgICAgICAgICAgImhlYWRlciI6ICJ0ZXN0
a2V5IiwKKyAgICAgICAgICAgICAgICAidmFsdWUiOiAidGVzdHZhbHVlIgorICAgICAgICAgICAg
fSBdIH0sCisgICAgICAgICAgICAidHJpZ2dlciI6IHsgInVybC1maWx0ZXIiOiAidGVzdHNjaGVt
ZSIgfQorICAgICAgICB9LCB7CisgICAgICAgICAgICAiYWN0aW9uIjogeyAidHlwZSI6ICJtb2Rp
ZnktaGVhZGVycyIsICJyZXF1ZXN0LWhlYWRlcnMiOiBbIHsKKyAgICAgICAgICAgICAgICAib3Bl
cmF0aW9uIjogInJlbW92ZSIsCisgICAgICAgICAgICAgICAgImhlYWRlciI6ICJBY2NlcHQiCisg
ICAgICAgICAgICB9IF0gfSwKKyAgICAgICAgICAgICJ0cmlnZ2VyIjogeyAidXJsLWZpbHRlciI6
ICJ0ZXN0c2NoZW1lIiB9CisgICAgICAgIH0sIHsKKyAgICAgICAgICAgICJhY3Rpb24iOiB7ICJ0
eXBlIjogIm1vZGlmeS1oZWFkZXJzIiwgInJlcXVlc3QtaGVhZGVycyI6IFsgeworICAgICAgICAg
ICAgICAgICJvcGVyYXRpb24iOiAiYXBwZW5kIiwKKyAgICAgICAgICAgICAgICAiaGVhZGVyIjog
IkNvbnRlbnQtVHlwZSIsCisgICAgICAgICAgICAgICAgInZhbHVlIjogIk1vZGlmaWVkLWJ5LXRl
c3QiCisgICAgICAgICAgICB9IF0gfSwKKyAgICAgICAgICAgICJ0cmlnZ2VyIjogeyAidXJsLWZp
bHRlciI6ICJ0ZXN0c2NoZW1lIiB9CisgICAgICAgIH0gXQorICAgIClKU09OIik7CisKKyAgICBf
X2Jsb2NrIGJvb2wgcmVjZWl2ZWRBbGxSZXF1ZXN0cyB7IGZhbHNlIH07CisgICAgYXV0byBoYW5k
bGVyID0gYWRvcHROUyhbVGVzdFVSTFNjaGVtZUhhbmRsZXIgbmV3XSk7CisgICAgaGFuZGxlci5n
ZXQoKS5zdGFydFVSTFNjaGVtZVRhc2tIYW5kbGVyID0gXihXS1dlYlZpZXcgKiwgaWQgPFdLVVJM
U2NoZW1lVGFzaz4gdGFzaykgeworICAgICAgICBOU1N0cmluZyAqcGF0aCA9IHRhc2sucmVxdWVz
dC5VUkwucGF0aDsKKyAgICAgICAgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIE5TU3RyaW5nICo+
ICpmaWVsZHMgPSBbdGFzay5yZXF1ZXN0IGFsbEhUVFBIZWFkZXJGaWVsZHNdOworICAgICAgICBp
ZiAoW3BhdGggaXNFcXVhbFRvU3RyaW5nOkAiL21haW4uaHRtbCJdKSB7CisgICAgICAgICAgICBF
WFBFQ1RfV0tfU1RSRVEoZmllbGRzW0AiQ29udGVudC1UeXBlIl0sICJNb2RpZmllZC1ieS10ZXN0
Iik7CisgICAgICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoZmllbGRzW0AidGVzdGtleSJdLCAidGVz
dHZhbHVlIik7CisgICAgICAgICAgICBFWFBFQ1RfTlVMTChmaWVsZHNbQCJBY2NlcHQiXSk7Cisg
ICAgICAgICAgICByZXR1cm4gcmVzcG9uZCh0YXNrLCAiPGlmcmFtZSBzcmM9Jy8vb3RoZXJob3N0
L2ZyYW1lLmh0bWwnPjwvaWZyYW1lPiIpOworICAgICAgICB9CisgICAgICAgIGlmIChbcGF0aCBp
c0VxdWFsVG9TdHJpbmc6QCIvZnJhbWUuaHRtbCJdKSB7CisgICAgICAgICAgICBFWFBFQ1RfTlVM
TChmaWVsZHNbQCJDb250ZW50LVR5cGUiXSk7CisgICAgICAgICAgICBFWFBFQ1RfTlVMTChmaWVs
ZHNbQCJ0ZXN0a2V5Il0pOworICAgICAgICAgICAgRVhQRUNUX05PVF9OVUxMKGZpZWxkc1tAIkFj
Y2VwdCJdKTsKKyAgICAgICAgICAgIHJldHVybiByZXNwb25kKHRhc2ssICI8c2NyaXB0PmZldGNo
KCcvL3Rlc3Rob3N0L2ZldGNoLnR4dCcse2hlYWRlcnM6IHsnQ29udGVudC1UeXBlJzogJ2FwcGxp
Y2F0aW9uL2pzb24nfX0pPC9zY3JpcHQ+Iik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFtwYXRo
IGlzRXF1YWxUb1N0cmluZzpAIi9mZXRjaC50eHQiXSkgeworICAgICAgICAgICAgRVhQRUNUX1dL
X1NUUkVRKGZpZWxkc1tAIkNvbnRlbnQtVHlwZSJdLCAiYXBwbGljYXRpb24vanNvbjsgTW9kaWZp
ZWQtYnktdGVzdCIpOworICAgICAgICAgICAgRVhQRUNUX1dLX1NUUkVRKGZpZWxkc1tAInRlc3Rr
ZXkiXSwgInRlc3R2YWx1ZSIpOworICAgICAgICAgICAgRVhQRUNUX05VTEwoZmllbGRzW0AiQWNj
ZXB0Il0pOworICAgICAgICAgICAgcmVjZWl2ZWRBbGxSZXF1ZXN0cyA9IHRydWU7CisgICAgICAg
ICAgICByZXR1cm4gcmVzcG9uZCh0YXNrLCAiIik7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfTsKKworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0
TlMoW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gbmV3XSk7CisgICAgW1tjb25maWd1cmF0aW9uIHVz
ZXJDb250ZW50Q29udHJvbGxlcl0gYWRkQ29udGVudFJ1bGVMaXN0Omxpc3QuZ2V0KCldOworICAg
IFtjb25maWd1cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBmb3JVUkxT
Y2hlbWU6QCJ0ZXN0c2NoZW1lIl07CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2Vi
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU1plcm9SZWN0IGNvbmZpZ3VyYXRpb246Y29uZmln
dXJhdGlvbi5nZXQoKV0pOworICAgIHdlYlZpZXcuZ2V0KCkubmF2aWdhdGlvbkRlbGVnYXRlID0g
bmF2aWdhdGlvbkRlbGVnYXRlQWxsb3dpbmdBY3RpdmVBY3Rpb25zT25UZXN0SG9zdCgpLmdldCgp
OworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6
W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJ0ZXN0c2NoZW1lOi8vdGVzdGhvc3QvbWFpbi5odG1sIl1d
XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkQWxsUmVxdWVzdHMpOwor
ICAgIAorICAgIC8vIEZJWE1FOiBBcHBlbmRpbmcgdG8gdGhlIFVzZXItQWdlbnQgcmVwbGFjZXMg
dGhlIHVzZXIgYWdlbnQgYmVjYXVzZSB3ZSBoYXZlbid0IGFkZGVkIHRoZSB1c2VyIGFnZW50IHll
dCB3aGVuIHByb2Nlc3NpbmcgdGhlIHJlcXVlc3QuCit9CisKK1RFU1RfRihXS0NvbnRlbnRSdWxl
TGlzdFN0b3JlVGVzdCwgUmVkaXJlY3QpCit7CisgICAgYXV0byBsaXN0ID0gY29tcGlsZUNvbnRl
bnRSdWxlTGlzdChSIkpTT04oCisgICAgICAgIFsgeworICAgICAgICAgICAgImFjdGlvbiI6IHsg
InR5cGUiOiAicmVkaXJlY3QiLCAicmVkaXJlY3QiOiB7CisgICAgICAgICAgICAgICAgInVybCI6
ICJvdGhlcnRlc3RzY2hlbWU6Ly9ub3QtdGVzdGhvc3QvMS1yZWRpcmVjdGVkLnR4dCIKKyAgICAg
ICAgICAgIH0gfSwKKyAgICAgICAgICAgICJ0cmlnZ2VyIjogeyAidXJsLWZpbHRlciI6ICIxLnR4
dCIgfQorICAgICAgICB9LCB7CisgICAgICAgICAgICAiYWN0aW9uIjogeyAidHlwZSI6ICJyZWRp
cmVjdCIsICJyZWRpcmVjdCI6IHsgInRyYW5zZm9ybSI6IHsKKyAgICAgICAgICAgICAgICAicG9y
dCI6ICIxMjMiLAorICAgICAgICAgICAgICAgICJpZ25vcmVkLWNvbW1lbnQiOiAiMTIzIGlzIGEg
Zm9yYmlkZGVuIHBvcnQsIHNvIHRoaXMgVVJMIGlzIG5vdCBzZWVuIGJ5IHRoZSBXS1VSTFNjaGVt
ZUhhbmRsZXIuIgorICAgICAgICAgICAgfSB9IH0sCisgICAgICAgICAgICAidHJpZ2dlciI6IHsg
InVybC1maWx0ZXIiOiAiMi50eHQiIH0KKyAgICAgICAgfSwgeworICAgICAgICAgICAgImFjdGlv
biI6IHsgInR5cGUiOiAicmVkaXJlY3QiLCAicmVkaXJlY3QiOiB7ICJ0cmFuc2Zvcm0iOiB7Cisg
ICAgICAgICAgICAgICAgImhvc3QiOiAibmV3aG9zdCIsCisgICAgICAgICAgICAgICAgInVzZXJu
YW1lIjogIm5ld3VzZXJuYW1lIiwKKyAgICAgICAgICAgICAgICAicG9ydCI6ICI0NDMiCisgICAg
ICAgICAgICB9IH0gfSwKKyAgICAgICAgICAgICJ0cmlnZ2VyIjogeyAidXJsLWZpbHRlciI6ICIz
LnR4dCIgfQorICAgICAgICB9LCB7CisgICAgICAgICAgICAiYWN0aW9uIjogeyAidHlwZSI6ICJy
ZWRpcmVjdCIsICJyZWRpcmVjdCI6IHsgInRyYW5zZm9ybSI6IHsKKyAgICAgICAgICAgICAgICAi
cG9ydCI6ICIiLAorICAgICAgICAgICAgICAgICJzY2hlbWUiOiAib3RoZXJ0ZXN0c2NoZW1lIiwK
KyAgICAgICAgICAgICAgICAicXVlcnkiOiAiP2tleT12YWx1ZSIKKyAgICAgICAgICAgIH0gfSB9
LAorICAgICAgICAgICAgInRyaWdnZXIiOiB7ICJ1cmwtZmlsdGVyIjogIjQudHh0IiB9CisgICAg
ICAgIH0sIHsKKyAgICAgICAgICAgICJhY3Rpb24iOiB7ICJ0eXBlIjogInJlZGlyZWN0IiwgInJl
ZGlyZWN0IjogeyAidHJhbnNmb3JtIjogeworICAgICAgICAgICAgICAgICJwYXNzd29yZCI6ICJ0
ZXN0cGFzc3dvcmQiLAorICAgICAgICAgICAgICAgICJxdWVyeSI6ICIiLAorICAgICAgICAgICAg
ICAgICJmcmFnbWVudCI6ICIjZnJhZ21lbnQtdG8tYmUtYWRkZWQiCisgICAgICAgICAgICB9IH0g
fSwKKyAgICAgICAgICAgICJ0cmlnZ2VyIjogeyAidXJsLWZpbHRlciI6ICI1LnR4dCIgfQorICAg
ICAgICB9LCB7CisgICAgICAgICAgICAiYWN0aW9uIjogeyAidHlwZSI6ICJyZWRpcmVjdCIsICJy
ZWRpcmVjdCI6IHsgInRyYW5zZm9ybSI6IHsKKyAgICAgICAgICAgICAgICAicGFzc3dvcmQiOiAi
dGVzdHBhc3N3b3JkIiwKKyAgICAgICAgICAgICAgICAiZnJhZ21lbnQiOiAiIgorICAgICAgICAg
ICAgfSB9IH0sCisgICAgICAgICAgICAidHJpZ2dlciI6IHsgInVybC1maWx0ZXIiOiAiNi50eHQi
IH0KKyAgICAgICAgfSwgeworICAgICAgICAgICAgImFjdGlvbiI6IHsgInR5cGUiOiAicmVkaXJl
Y3QiLCAicmVkaXJlY3QiOiB7ICJ0cmFuc2Zvcm0iOiB7CisgICAgICAgICAgICAgICAgInF1ZXJ5
IjogIj8iLAorICAgICAgICAgICAgICAgICJmcmFnbWVudCI6ICIjIgorICAgICAgICAgICAgfSB9
IH0sCisgICAgICAgICAgICAidHJpZ2dlciI6IHsgInVybC1maWx0ZXIiOiAiNy50eHQiIH0KKyAg
ICAgICAgfSwgeworICAgICAgICAgICAgImFjdGlvbiI6IHsgInR5cGUiOiAicmVkaXJlY3QiLCAi
cmVkaXJlY3QiOiB7ICJ0cmFuc2Zvcm0iOiB7CisgICAgICAgICAgICAgICAgInF1ZXJ5LXRyYW5z
Zm9ybSI6IHsKKyAgICAgICAgICAgICAgICAgICAgInJlbW92ZS1wYXJhbWV0ZXJzIjogWyAicGFy
YW1ldGVyLXRvLXJlbW92ZSIgXSwKKyAgICAgICAgICAgICAgICAgICAgImFkZC1vci1yZXBsYWNl
LXBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICB7ICJrZXkiOiAia2V5LXRv
LWFkZCIsICJ2YWx1ZSI6ICJ2YWx1ZS10by1hZGQiIH0sCisgICAgICAgICAgICAgICAgICAgICAg
ICB7ICJrZXkiOiAia2V5LXRvLXJlcGxhY2Utb25seSIsICJ2YWx1ZSI6ICJ2YWx1ZS10by1yZXBs
YWNlLW9ubHkiLCAicmVwbGFjZS1vbmx5IjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgICAgICAg
ICAgeyAia2V5IjogImtleS10by1yZXBsYWNlLW9ubHktYnV0LW5vdC1mb3VuZCIsICJ2YWx1ZSI6
ICJ2YWx1ZS10by1yZXBsYWNlLW9ubHktYnV0LW5vdC1mb3VuZCIsICJyZXBsYWNlLW9ubHkiOiB0
cnVlIH0KKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0gfSB9LAorICAgICAgICAgICAgInRyaWdnZXIiOiB7ICJ1cmwtZmlsdGVyIjogIjgudHh0
IiB9CisgICAgICAgIH0gXQorICAgIClKU09OIik7CisKKyAgICBfX2Jsb2NrIGJvb2wgcmVjZWl2
ZWRBbGxSZXF1ZXN0cyB7IGZhbHNlIH07CisgICAgX19ibG9jayBhdXRvIHVybHMgPSBhZG9wdE5T
KFtOU011dGFibGVBcnJheSBuZXddKTsKKyAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtUZXN0
VVJMU2NoZW1lSGFuZGxlciBuZXddKTsKKyAgICBoYW5kbGVyLmdldCgpLnN0YXJ0VVJMU2NoZW1l
VGFza0hhbmRsZXIgPSBeKFdLV2ViVmlldyAqLCBpZCA8V0tVUkxTY2hlbWVUYXNrPiB0YXNrKSB7
CisgICAgICAgIE5TVVJMICp1cmwgPSB0YXNrLnJlcXVlc3QuVVJMOworICAgICAgICBbdXJscyBh
ZGRPYmplY3Q6dXJsXTsKKyAgICAgICAgTlNTdHJpbmcgKnBhdGggPSB1cmwucGF0aDsKKyAgICAg
ICAgaWYgKFtwYXRoIGlzRXF1YWxUb1N0cmluZzpAIi9tYWluLmh0bWwiXSkgeworICAgICAgICAg
ICAgcmV0dXJuIHJlc3BvbmQodGFzaywgUiJIVE1MKAorICAgICAgICAgICAgICAgIDxzY3JpcHQ+
CisgICAgICAgICAgICAgICAgICAgIGFzeW5jIGZ1bmN0aW9uIGZldGNoU3VicmVzb3VyY2VzKCkK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsgYXdh
aXQgZmV0Y2goJzEudHh0JykgfSBjYXRjaChlKSB7IH07CisgICAgICAgICAgICAgICAgICAgICAg
ICB0cnkgeyBhd2FpdCBmZXRjaCgnLy9ub3QtdGVzdGhvc3Qtc2hvdWxkLW5vdC10cmlnZ2VyLWFj
dGlvbi8yLnR4dCcsIHttb2RlOiduby1jb3JzJ30pIH0gY2F0Y2goZSkgeyB9OworICAgICAgICAg
ICAgICAgICAgICAgICAgdHJ5IHsgYXdhaXQgZmV0Y2goJy8vdGVzdGhvc3QvMi50eHQnKSB9IGNh
dGNoKGUpIHsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7IGF3YWl0IGZldGNoKCcv
My50eHQ/cXVlcnktc2hvdWxkLW5vdC1iZS1yZW1vdmVkJykgfSBjYXRjaChlKSB7IH07CisgICAg
ICAgICAgICAgICAgICAgICAgICB0cnkgeyBhd2FpdCBmZXRjaCgnLy90ZXN0aG9zdDo4MC80LnR4
dCNmcmFnbWVudC1zaG91bGQtbm90LWJlLXJlbW92ZWQnKSB9IGNhdGNoKGUpIHsgfTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRyeSB7IGF3YWl0IGZldGNoKCc1LnR4dD9xdWVyeS1zaG91bGQt
YmUtcmVtb3ZlZCcpIH0gY2F0Y2goZSkgeyB9OworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5
IHsgYXdhaXQgZmV0Y2goJzYudHh0I2ZyYWdtZW50LXNob3VsZC1iZS1yZW1vdmVkJykgfSBjYXRj
aChlKSB7IH07CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeyBhd2FpdCBmZXRjaCgnNy50
eHQnKSB9IGNhdGNoKGUpIHsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7IGF3YWl0
IGZldGNoKCc4LnR4dD9rZXktdG8tcmVwbGFjZS1vbmx5PXByZS1yZXBsYWNlbWVudC12YWx1ZScp
IH0gY2F0Y2goZSkgeyB9OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGZldGNoU3VicmVzb3VyY2VzKCk7CisgICAgICAgICAgICAgICAgPC9zY3JpcHQ+CisgICAg
ICAgICAgICApSFRNTCIpOworICAgICAgICB9CisgICAgICAgIGlmIChbcGF0aCBpc0VxdWFsVG9T
dHJpbmc6QCIvOC50eHQiXSkKKyAgICAgICAgICAgIHJlY2VpdmVkQWxsUmVxdWVzdHMgPSB0cnVl
OworICAgICAgICByZXNwb25kKHRhc2ssICIiKTsKKyAgICB9OworCisgICAgYXV0byBjb25maWd1
cmF0aW9uID0gYWRvcHROUyhbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBuZXddKTsKKyAgICBbW2Nv
bmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRDb250ZW50UnVsZUxpc3Q6bGlz
dC5nZXQoKV07CisgICAgW2NvbmZpZ3VyYXRpb24gc2V0VVJMU2NoZW1lSGFuZGxlcjpoYW5kbGVy
LmdldCgpIGZvclVSTFNjaGVtZTpAInRlc3RzY2hlbWUiXTsKKyAgICBbY29uZmlndXJhdGlvbiBz
ZXRVUkxTY2hlbWVIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgZm9yVVJMU2NoZW1lOkAib3RoZXJ0ZXN0
c2NoZW1lIl07CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpOU1plcm9SZWN0IGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQo
KV0pOworICAgIHdlYlZpZXcuZ2V0KCkubmF2aWdhdGlvbkRlbGVnYXRlID0gbmF2aWdhdGlvbkRl
bGVnYXRlQWxsb3dpbmdBY3RpdmVBY3Rpb25zT25UZXN0SG9zdCgpLmdldCgpOworICAgIFt3ZWJW
aWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdp
dGhTdHJpbmc6QCJ0ZXN0c2NoZW1lOi8vdGVzdGhvc3QvbWFpbi5odG1sIl1dXTsKKyAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkQWxsUmVxdWVzdHMpOworCisgICAgVmVjdG9y
PGNvbnN0IGNoYXIqPiBleHBlY3RlZFJlcXVlc3RlZFVSTHMgeworICAgICAgICAidGVzdHNjaGVt
ZTovL3Rlc3Rob3N0L21haW4uaHRtbCIsCisgICAgICAgICJvdGhlcnRlc3RzY2hlbWU6Ly9ub3Qt
dGVzdGhvc3QvMS1yZWRpcmVjdGVkLnR4dCIsCisgICAgICAgICJ0ZXN0c2NoZW1lOi8vbm90LXRl
c3Rob3N0LXNob3VsZC1ub3QtdHJpZ2dlci1hY3Rpb24vMi50eHQiLAorICAgICAgICAidGVzdHNj
aGVtZTovL25ld3VzZXJuYW1lQG5ld2hvc3Q6NDQzLzMudHh0P3F1ZXJ5LXNob3VsZC1ub3QtYmUt
cmVtb3ZlZCIsCisgICAgICAgICJvdGhlcnRlc3RzY2hlbWU6Ly90ZXN0aG9zdC80LnR4dD9rZXk9
dmFsdWUjZnJhZ21lbnQtc2hvdWxkLW5vdC1iZS1yZW1vdmVkIiwKKyAgICAgICAgInRlc3RzY2hl
bWU6Ly86dGVzdHBhc3N3b3JkQHRlc3Rob3N0LzUudHh0I2ZyYWdtZW50LXRvLWJlLWFkZGVkIiwK
KyAgICAgICAgInRlc3RzY2hlbWU6Ly86dGVzdHBhc3N3b3JkQHRlc3Rob3N0LzYudHh0IiwKKyAg
ICAgICAgInRlc3RzY2hlbWU6Ly90ZXN0aG9zdC83LnR4dD8jIiwKKyAgICAgICAgInRlc3RzY2hl
bWU6Ly90ZXN0aG9zdC84LnR4dD9rZXktdG8tcmVwbGFjZS1vbmx5PXZhbHVlLXRvLXJlcGxhY2Ut
b25seSZrZXktdG8tYWRkPXZhbHVlLXRvLWFkZCIsCisgICAgfTsKKyAgICBFWFBFQ1RfRVEoZXhw
ZWN0ZWRSZXF1ZXN0ZWRVUkxzLnNpemUoKSwgW3VybHMgY291bnRdKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGV4cGVjdGVkUmVxdWVzdGVkVVJMcy5zaXplKCk7IGkrKykKKyAgICAgICAg
RVhQRUNUX1dLX1NUUkVRKGV4cGVjdGVkUmVxdWVzdGVkVVJMc1tpXSwgW1t1cmxzIG9iamVjdEF0
SW5kZXg6aV0gYWJzb2x1dGVTdHJpbmddKTsKK30KKworVEVTVF9GKFdLQ29udGVudFJ1bGVMaXN0
U3RvcmVUZXN0LCBOdWxsUGF0dGVyblNldCkKK3sKKyAgICBhdXRvIGxpc3QgPSBjb21waWxlQ29u
dGVudFJ1bGVMaXN0KFIiSlNPTigKKyAgICAgICAgWyB7CisgICAgICAgICAgICAiYWN0aW9uIjog
eyAidHlwZSI6ICJyZWRpcmVjdCIsICJyZWRpcmVjdCI6IHsKKyAgICAgICAgICAgICAgICAidXJs
IjogInRlc3RzY2hlbWU6Ly90ZXN0aG9zdC9tYWluLXJlZGlyZWN0ZWQuaHRtbCIKKyAgICAgICAg
ICAgIH0gfSwKKyAgICAgICAgICAgICJ0cmlnZ2VyIjogeyAidXJsLWZpbHRlciI6ICJtYWluLmh0
bWwiIH0KKyAgICAgICAgfSBdCisgICAgKUpTT04iKTsKKworICAgIF9fYmxvY2sgc3RkOjpvcHRp
b25hbDxib29sPiByZWRpcmVjdGVkUmVzdWx0OworICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMo
W1Rlc3RVUkxTY2hlbWVIYW5kbGVyIG5ld10pOworICAgIGhhbmRsZXIuZ2V0KCkuc3RhcnRVUkxT
Y2hlbWVUYXNrSGFuZGxlciA9IF4oV0tXZWJWaWV3ICosIGlkIDxXS1VSTFNjaGVtZVRhc2s+IHRh
c2spIHsKKyAgICAgICAgTlNTdHJpbmcgKnBhdGggPSB0YXNrLnJlcXVlc3QuVVJMLnBhdGg7Cisg
ICAgICAgIGlmIChbcGF0aCBpc0VxdWFsVG9TdHJpbmc6QCIvbWFpbi5odG1sIl0pCisgICAgICAg
ICAgICByZWRpcmVjdGVkUmVzdWx0ID0gZmFsc2U7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgRVhQRUNUX1dLX1NUUkVRKHBhdGgsICIvbWFpbi1yZWRpcmVjdGVkLmh0bWwiKTsKKyAgICAg
ICAgICAgIHJlZGlyZWN0ZWRSZXN1bHQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIHJlc3Bv
bmQodGFzaywgIiIpOworICAgIH07CisKKyAgICBfX2Jsb2NrIGVudW0gY2xhc3MgRGVsZWdhdGVB
Y3Rpb24gOiB1aW50OF90IHsKKyAgICAgICAgQWxsb3dBbGwsCisgICAgICAgIEFsbG93Tm9uZSwK
KyAgICAgICAgQWxsb3dUZXN0SG9zdCwKKyAgICB9IGRlbGVnYXRlQWN0aW9uOworICAgIGF1dG8g
ZGVsZWdhdGUgPSBhZG9wdE5TKFtUZXN0TmF2aWdhdGlvbkRlbGVnYXRlIG5ld10pOworICAgIGRl
bGVnYXRlLmdldCgpLmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25XaXRoUHJlZmVyZW5j
ZXMgPSBeKFdLTmF2aWdhdGlvbkFjdGlvbiAqLCBXS1dlYnBhZ2VQcmVmZXJlbmNlcyAqcHJlZmVy
ZW5jZXMsIHZvaWQgKF5kZWNpc2lvbkhhbmRsZXIpKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeSwg
V0tXZWJwYWdlUHJlZmVyZW5jZXMgKikpIHsKKyAgICAgICAgRVhQRUNUX05PVF9OVUxMKHByZWZl
cmVuY2VzLl9hY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25QYXR0ZXJucyk7CisgICAgICAgIEVY
UEVDVF9FUShwcmVmZXJlbmNlcy5fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uUGF0dGVybnMu
Y291bnQsIDB1KTsKKyAgICAgICAgc3dpdGNoIChkZWxlZ2F0ZUFjdGlvbikgeworICAgICAgICBj
YXNlIERlbGVnYXRlQWN0aW9uOjpBbGxvd0FsbDoKKyAgICAgICAgICAgIHByZWZlcmVuY2VzLl9h
Y3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25QYXR0ZXJucyA9IG5pbDsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIERlbGVnYXRlQWN0aW9uOjpBbGxvd05vbmU6CisgICAgICAgICAg
ICBwcmVmZXJlbmNlcy5fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uUGF0dGVybnMgPSBbTlNT
ZXQgc2V0XTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERlbGVnYXRlQWN0aW9u
OjpBbGxvd1Rlc3RIb3N0OgorICAgICAgICAgICAgcHJlZmVyZW5jZXMuX2FjdGl2ZUNvbnRlbnRS
dWxlTGlzdEFjdGlvblBhdHRlcm5zID0gW05TU2V0IHNldFdpdGhPYmplY3Q6QCIqOi8vdGVzdGhv
c3QvKiJdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVjaXNpb25I
YW5kbGVyKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeUFsbG93LCBwcmVmZXJlbmNlcyk7CisgICAg
fTsKKworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1dLV2ViVmlld0NvbmZpZ3Vy
YXRpb24gbmV3XSk7CisgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0g
YWRkQ29udGVudFJ1bGVMaXN0Omxpc3QuZ2V0KCldOworICAgIFtjb25maWd1cmF0aW9uIHNldFVS
TFNjaGVtZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBmb3JVUkxTY2hlbWU6QCJ0ZXN0c2NoZW1lIl07
CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpOU1plcm9SZWN0IGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOworICAg
IHdlYlZpZXcuZ2V0KCkubmF2aWdhdGlvbkRlbGVnYXRlID0gZGVsZWdhdGUuZ2V0KCk7CisKKyAg
ICBhdXRvIGdldFJlZGlyZWN0UmVzdWx0ID0gXihEZWxlZ2F0ZUFjdGlvbiBhY3Rpb24pIHsKKyAg
ICAgICAgZGVsZWdhdGVBY3Rpb24gPSBhY3Rpb247CisgICAgICAgIHJlZGlyZWN0ZWRSZXN1bHQg
PSBzdGQ6Om51bGxvcHQ7CisgICAgICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVl
c3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJ0ZXN0c2NoZW1lOi8vdGVz
dGhvc3QvbWFpbi5odG1sIl1dXTsKKyAgICAgICAgd2hpbGUgKCFyZWRpcmVjdGVkUmVzdWx0KQor
ICAgICAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoKTsKKyAgICAgICAg
cmV0dXJuICpyZWRpcmVjdGVkUmVzdWx0OworICAgIH07CisgICAgRVhQRUNUX1RSVUUoZ2V0UmVk
aXJlY3RSZXN1bHQoRGVsZWdhdGVBY3Rpb246OkFsbG93QWxsKSk7CisgICAgRVhQRUNUX0ZBTFNF
KGdldFJlZGlyZWN0UmVzdWx0KERlbGVnYXRlQWN0aW9uOjpBbGxvd05vbmUpKTsKKyAgICBFWFBF
Q1RfVFJVRShnZXRSZWRpcmVjdFJlc3VsdChEZWxlZ2F0ZUFjdGlvbjo6QWxsb3dUZXN0SG9zdCkp
OworfQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNv
Y29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENv
bnRyb2xsZXJDb2NvYS5tbQkocmV2aXNpb24gMjg1OTU0KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNjQs
NiArMjY0LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0RGVmYXVsdENhbGVuZGFyVAogICAg
ICAgICBtX2NhbGVuZGFyU3dpenpsZXIgPSBtYWtlVW5pcXVlPENsYXNzTWV0aG9kU3dpenpsZXI+
KFtOU0NhbGVuZGFyIGNsYXNzXSwgQHNlbGVjdG9yKGN1cnJlbnRDYWxlbmRhciksIHJlaW50ZXJw
cmV0X2Nhc3Q8SU1QPihzd2l6emxlZENhbGVuZGFyKSk7CiB9CiAKKyNpZiBFTkFCTEUoQ09OVEVO
VF9FWFRFTlNJT05TKQogdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRDb250ZW50RXh0ZW5zaW9u
cygpCiB7CiAgICAgX19ibG9jayBib29sIGRvbmVSZW1vdmluZyA9IGZhbHNlOwpAQCAtMjc4LDYg
KzI3OSw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0Q29udGVudEV4dGVuc2kKICAgICAg
ICAgW3BsYXRmb3JtVmlldy5jb25maWd1cmF0aW9uLnVzZXJDb250ZW50Q29udHJvbGxlciBfcmVt
b3ZlQWxsVXNlckNvbnRlbnRGaWx0ZXJzXTsKICAgICB9CiB9CisjZW5kaWYKIAogdm9pZCBUZXN0
Q29udHJvbGxlcjo6c2V0QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBidW5kbGVJZGVudGlmaWVyKQogewpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9t
YWMvVGVzdENvbnRyb2xsZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9tYWMvVGVzdENvbnRyb2xsZXJNYWMubW0JKHJldmlzaW9uIDI4NTk1NCkKKysrIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvbWFjL1Rlc3RDb250cm9sbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzUsNiArMTc1LDcgQEAgVGVzdEZlYXR1cmVzIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9y
bVNwZQogICAgIHJldHVybiBmZWF0dXJlczsKIH0KIAorI2lmIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCiB2b2lkIFRlc3RDb250cm9sbGVyOjpjb25maWd1cmVDb250ZW50RXh0ZW5zaW9uRm9y
VGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYgdGVzdCkKIHsKICAgICBpZiAoIXRlc3QudXJsQ29u
dGFpbnMoImNvbnRlbnRleHRlbnNpb25zLyIpKQpAQCAtMjE2LDYgKzIxNyw3IEBAIHZvaWQgVGVz
dENvbnRyb2xsZXI6OmNvbmZpZ3VyZUNvbnRlbnRFeHQKICAgICB9XTsKICAgICBwbGF0Zm9ybVJ1
blVudGlsKGRvbmVDb21waWxpbmcsIG5vVGltZW91dCk7CiB9CisjZW5kaWYKIAogdm9pZCBUZXN0
Q29udHJvbGxlcjo6cGxhdGZvcm1Db25maWd1cmVWaWV3Rm9yVGVzdChjb25zdCBUZXN0SW52b2Nh
dGlvbiYgdGVzdCkKIHsK
</data>
<flag name="commit-queue"
          id="469706"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444633</attachid>
            <date>2021-11-17 20:18:36 -0800</date>
            <delta_ts>2021-11-17 21:35:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233268-20211117201835.patch</filename>
            <type>text/plain</type>
            <size>114075</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NTk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBACisyMDIxLTExLTE3ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50
IG1vc3Qgb2YgcmVkaXJlY3QgYW5kIG1vZGlmeS1oZWFkZXJzIGFjdGlvbiB0eXBlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzMjY4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCisKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRzIG1v
ZGlmeS1oZWFkZXJzIGFuZCByZWRpcmVjdCBhY3Rpb25zIGV4Y2VwdCBmb3IgZXh0ZW5zaW9uLXBh
dGggYW5kIHJlZ2V4LXN1YnN0aXR1dGlvbiB2YXJpYW50cyBvZiByZWRpcmVjdGluZywKKyAgICAg
ICAgd2hpY2ggYXJlIGJpZyBlbm91Z2ggdG8gYmUgaW1wbGVtZW50ZWQgaW4gdGhlaXIgb3duIHBh
dGNoLiAgSW4gb3JkZXIgdG8gZW5hYmxlIHRoZXNlIGFjdGlvbnMsIHRoZSBXS0NvbnRlbnRSdWxl
TGlzdCBuZWVkcyB0bworICAgICAgICBiZSBjb21waWxlZCB3aXRoIG5ldyBTUEkgd2hlcmUgeW91
IHNwZWNpZnkgd2hpY2ggc2NoZW1lcyBhcmUgYWxsb3dlZCB0byBiZSByZWRpcmVjdGVkIHRvLCBh
bmQgU1BJIGluIFdLV2VicGFnZVByZWZlcmVuY2VzIGFsbG93cworICAgICAgICBhZGRpdGlvbiBv
ZiBhIHNldCBvZiBwYXR0ZXJucyB0byBzcGVjaWZ5IHdoaWNoIFVSTHMgYXJlIGFsbG93ZWQgdG8g
YmUgbW9kaWZpZWQuICBBbiBlbXB0eSBzZXQgbWVhbnMgbm8gYWN0aXZlIGFjdGlvbnMgYXJlIGFs
bG93ZWQsCisgICAgICAgIHdoaWNoIGlzIHRoZSBkZWZhdWx0LCB3aGVyZWFzIGEgbnVsbCBzZXQg
bWVhbnMgYWxsIGFjdGl2ZSBhY3Rpb25zIGFyZSBhbGxvd2VkLgorCisgICAgICAgIEkgYWxzbyBt
YWRlIHRoZSBwYXJzZXIgYSBsaXR0bGUgYml0IHN0cmljdGVyLCBzdWNoIGFzIG9ubHkgYWxsb3dp
bmcgdmFsaWQgcG9ydHMsIHF1ZXJpZXMsIGFuZCBmcmFnbWVudHMuCisKKyAgICAgICAgKiBNb2R1
bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHA6CisgICAgICAgICogY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkFjdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGVudEV4dGVuc2lvbnM6Ok1vZGlmeUhlYWRlcnNBY3Rpb246Om9wZXJhdG9yPT0gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Ok1vZGlmeUhlYWRlcnNBY3Rp
b246OmFwcGx5VG9SZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpNb2RpZnlIZWFkZXJzQWN0aW9uOjpNb2RpZnlIZWFkZXJJbmZvOjphcHBseVRvUmVxdWVzdCk6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6UmVkaXJlY3RBY3Rpb246OnBh
cnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpSZWRpcmVjdEFjdGlv
bjo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6UmVkaXJlY3RBY3Rpb246OmFwcGx5VG9SZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpSZWRpcmVjdEFjdGlvbjo6VVJMVHJhbnNmb3JtQWN0aW9uOjpwYXJz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6UmVkaXJlY3RBY3Rpb246
OlVSTFRyYW5zZm9ybUFjdGlvbjo6c2VyaWFsaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRFeHRlbnNpb25zOjpSZWRpcmVjdEFjdGlvbjo6VVJMVHJhbnNmb3JtQWN0aW9uOjpk
ZXNlcmlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6UmVkaXJl
Y3RBY3Rpb246OlVSTFRyYW5zZm9ybUFjdGlvbjo6YXBwbHlUb1VSTCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6UmVkaXJlY3RBY3Rpb246OlVSTFRyYW5zZm9y
bUFjdGlvbjo6UXVlcnlUcmFuc2Zvcm06OmFwcGx5VG9VUkwgY29uc3QpOgorICAgICAgICAqIGNv
bnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25BY3Rpb25zLmg6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VmFyaWFudEhhc2hlcjo6aGFzaCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VmVjdG9ySGFzaGVyOjpoYXNoKToKKyAgICAgICAg
KFdURjo6RGVmYXVsdEhhc2g8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlJlZGlyZWN0QWN0
aW9uPjo6aGFzaCk6CisgICAgICAgIChXVEY6OkRlZmF1bHRIYXNoPFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpSZWRpcmVjdEFjdGlvbj46OmVxdWFsKToKKyAgICAgICAgKFdURjo6RGVmYXVs
dEhhc2g8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Ok1vZGlmeUhlYWRlcnNBY3Rpb24+Ojpo
YXNoKToKKyAgICAgICAgKFdURjo6RGVmYXVsdEhhc2g8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6Ok1vZGlmeUhlYWRlcnNBY3Rpb24+OjplcXVhbCk6CisgICAgICAgICogY29udGVudGV4dGVu
c2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpzZXJpYWxpemVBY3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpjb21waWxlUnVsZUxpc3QpOgorICAgICAgICAqIGNvbnRlbnRleHRl
bnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6Y29udGVudEV4dGVuc2lvbkVycm9yQ2F0ZWdvcnkpOgorICAgICAgICAq
IGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5oOgorICAgICAgICAqIGNv
bnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmxvYWRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGVudEV4dGVuc2lvbnM6OmxvYWRSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpsb2FkRW5jb2RlZFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpwYXJzZVJ1bGVMaXN0KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uUGFyc2VyLmg6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29u
dGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OnByb2Nlc3NDb250ZW50UnVsZUxpc3Rz
Rm9yTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4
dGVuc2lvbnNCYWNrZW5kOjpwcm9jZXNzQ29udGVudFJ1bGVMaXN0c0ZvclBpbmdMb2FkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjphcHBseVJlc3VsdHNUb1JlcXVlc3Qp
OgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRSdWxlTGlzdFJlc3VsdHMuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRSdWxlTGlzdFJlc3VsdHM6OlN1bW1hcnk6OmRlY29k
ZSk6CisgICAgICAgICogY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHA6CisgICAgICAgICogbG9h
ZGVyL0RvY3VtZW50TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVy
OjpzZXRBY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25zUGF0dGVybnMpOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnRMb2FkZXI6OmFsbG93c0FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNG
b3JVUkwgY29uc3QpOgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpyZW1vdmVIVFRQSGVhZGVyRmllbGQpOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oOgorCiAyMDIxLTEx
LTE3ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIExvY2tz
IEFQSSBkb2VzIGdldCBlbmFibGVkIGluIFNlcnZpY2UgV29ya2VycyB3aGVuIHJ1bm5pbmcgbGF5
b3V0IHRlc3RzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29j
a2V0Q2hhbm5lbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJz
b2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJXZWJTb2NrZXRDaGFubmVsLmgiCiAK
ICNpbmNsdWRlICJCbG9iLmgiCi0jaW5jbHVkZSAiQ29udGVudFJ1bGVMaXN0UmVzdWx0cy5oIgog
I2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
Q29udGVudEV4dGVuc2lvbkFjdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25BY3Rpb25zLmNwcAkocmV2aXNpb24g
Mjg1OTU0KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVu
c2lvbkFjdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw4IEBACiAjaW5jbHVk
ZSAiQ29udGVudEV4dGVuc2lvbkVycm9yLmgiCiAjaW5jbHVkZSA8d3RmL0Nyb3NzVGhyZWFkQ29w
aWVyLmg+CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgorI2luY2x1ZGUgPHd0Zi9VUkxQYXJzZXIuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdUb0ludGVnZXJDb252ZXJzaW9uLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9ucyB7CiAKQEAgLTEyMSw3ICsxMjMsOCBAQCBN
b2RpZnlIZWFkZXJzQWN0aW9uIE1vZGlmeUhlYWRlcnNBY3Rpb246CiAKIGJvb2wgTW9kaWZ5SGVh
ZGVyc0FjdGlvbjo6b3BlcmF0b3I9PShjb25zdCBNb2RpZnlIZWFkZXJzQWN0aW9uJiBvdGhlcikg
Y29uc3QKIHsKLSAgICByZXR1cm4gb3RoZXIucmVxdWVzdEhlYWRlcnMgPT0gdGhpcy0+cmVxdWVz
dEhlYWRlcnMKKyAgICByZXR1cm4gb3RoZXIuaGFzaFRhYmxlVHlwZSA9PSB0aGlzLT5oYXNoVGFi
bGVUeXBlCisgICAgICAgICYmIG90aGVyLnJlcXVlc3RIZWFkZXJzID09IHRoaXMtPnJlcXVlc3RI
ZWFkZXJzCiAgICAgICAgICYmIG90aGVyLnJlc3BvbnNlSGVhZGVycyA9PSB0aGlzLT5yZXNwb25z
ZUhlYWRlcnM7CiB9CiAKQEAgLTE2Niw2ICsxNjksMjcgQEAgc2l6ZV90IE1vZGlmeUhlYWRlcnNB
Y3Rpb246OnNlcmlhbGl6ZWRMZQogICAgIHJldHVybiBkZXNlcmlhbGl6ZUxlbmd0aChzcGFuLCAw
KTsKIH0KIAordm9pZCBNb2RpZnlIZWFkZXJzQWN0aW9uOjphcHBseVRvUmVxdWVzdChSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgZm9yIChhdXRvJiBpbmZvIDogcmVxdWVzdEhlYWRl
cnMpCisgICAgICAgIGluZm8uYXBwbHlUb1JlcXVlc3QocmVxdWVzdCk7Cit9CisKK3ZvaWQgTW9k
aWZ5SGVhZGVyc0FjdGlvbjo6TW9kaWZ5SGVhZGVySW5mbzo6YXBwbHlUb1JlcXVlc3QoUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHN0ZDo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihb
Jl0gKGNvbnN0IEFwcGVuZE9wZXJhdGlvbiYgb3BlcmF0aW9uKSB7CisgICAgICAgIGF1dG8gZXhp
c3RpbmdWYWx1ZSA9IHJlcXVlc3QuaHR0cEhlYWRlckZpZWxkKG9wZXJhdGlvbi5oZWFkZXIpOwor
ICAgICAgICBpZiAoZXhpc3RpbmdWYWx1ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXF1ZXN0
LnNldEhUVFBIZWFkZXJGaWVsZChvcGVyYXRpb24uaGVhZGVyLCBvcGVyYXRpb24udmFsdWUpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChvcGVy
YXRpb24uaGVhZGVyLCBtYWtlU3RyaW5nKGV4aXN0aW5nVmFsdWUsICI7ICIsIG9wZXJhdGlvbi52
YWx1ZSkpOworICAgIH0sIFsmXSAoY29uc3QgU2V0T3BlcmF0aW9uJiBvcGVyYXRpb24pIHsKKyAg
ICAgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQob3BlcmF0aW9uLmhlYWRlciwgb3BlcmF0
aW9uLnZhbHVlKTsKKyAgICB9LCBbJl0gKGNvbnN0IFJlbW92ZU9wZXJhdGlvbiYgb3BlcmF0aW9u
KSB7CisgICAgICAgIHJlcXVlc3QucmVtb3ZlSFRUUEhlYWRlckZpZWxkKG9wZXJhdGlvbi5oZWFk
ZXIpOworICAgIH0pLCBvcGVyYXRpb24pOworfQorCiBhdXRvIE1vZGlmeUhlYWRlcnNBY3Rpb246
Ok1vZGlmeUhlYWRlckluZm86OnBhcnNlKGNvbnN0IEpTT046OlZhbHVlJiBpbmZvVmFsdWUpIC0+
IEV4cGVjdGVkPE1vZGlmeUhlYWRlckluZm8sIHN0ZDo6ZXJyb3JfY29kZT4KIHsKICAgICBhdXRv
IG9iamVjdCA9IGluZm9WYWx1ZS5hc09iamVjdCgpOwpAQCAtMjU1LDcgKzI3OSw3IEBAIHNpemVf
dCBNb2RpZnlIZWFkZXJzQWN0aW9uOjpNb2RpZnlIZWFkZXIKICAgICByZXR1cm4gZGVzZXJpYWxp
emVMZW5ndGgoc3BhbiwgMCk7CiB9CiAKLUV4cGVjdGVkPFJlZGlyZWN0QWN0aW9uLCBzdGQ6OmVy
cm9yX2NvZGU+IFJlZGlyZWN0QWN0aW9uOjpwYXJzZShjb25zdCBKU09OOjpPYmplY3QmIHJlZGly
ZWN0T2JqZWN0LCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGFsbG93ZWRSZWRpcmVjdFVSTFNjaGVt
ZXMpCitFeHBlY3RlZDxSZWRpcmVjdEFjdGlvbiwgc3RkOjplcnJvcl9jb2RlPiBSZWRpcmVjdEFj
dGlvbjo6cGFyc2UoY29uc3QgSlNPTjo6T2JqZWN0JiByZWRpcmVjdE9iamVjdCwgY29uc3Qgc3Rk
OjpvcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+JiBhbGxvd2VkUmVkaXJlY3RVUkxTY2hlbWVzKQog
ewogICAgIGF1dG8gcmVkaXJlY3QgPSByZWRpcmVjdE9iamVjdC5nZXRPYmplY3QoInJlZGlyZWN0
Iik7CiAgICAgaWYgKCFyZWRpcmVjdCkKQEAgLTI3NywxMCArMzAxLDEzIEBAIEV4cGVjdGVkPFJl
ZGlyZWN0QWN0aW9uLCBzdGQ6OmVycm9yX2NvZGUKICAgICAgICAgcmV0dXJuIFJlZGlyZWN0QWN0
aW9uIHsgV1RGTW92ZSgqcGFyc2VkVHJhbnNmb3JtKSB9OwogICAgIH0KIAotICAgIGlmIChhdXRv
IHVybCA9IHJlZGlyZWN0LT5nZXRTdHJpbmcoInVybCIpOyAhIXVybCkgewotICAgICAgICBpZiAo
IWFsbG93ZWRSZWRpcmVjdFVSTFNjaGVtZXMuY29udGFpbnMoVVJMKFVSTCgpLCB1cmwpLnByb3Rv
Y29sKCkudG9TdHJpbmdXaXRob3V0Q29weWluZygpKSkKKyAgICBpZiAoYXV0byB1cmxTdHJpbmcg
PSByZWRpcmVjdC0+Z2V0U3RyaW5nKCJ1cmwiKTsgISF1cmxTdHJpbmcpIHsKKyAgICAgICAgYXV0
byB1cmwgPSBVUkwoVVJMKCksIHVybFN0cmluZyk7CisgICAgICAgIGlmICghdXJsLmlzVmFsaWQo
KSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJy
b3I6OkpTT05SZWRpcmVjdFVSTEludmFsaWQpOworICAgICAgICBpZiAoYWxsb3dlZFJlZGlyZWN0
VVJMU2NoZW1lcyAmJiAhYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcy0+Y29udGFpbnModXJsLnBy
b3RvY29sKCkudG9TdHJpbmdXaXRob3V0Q29weWluZygpKSkKICAgICAgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTFNjaGVt
ZU5vdEFsbG93ZWQpOwotICAgICAgICByZXR1cm4gUmVkaXJlY3RBY3Rpb24geyBVUkxBY3Rpb24g
eyBXVEZNb3ZlKHVybCkgfSB9OworICAgICAgICByZXR1cm4gUmVkaXJlY3RBY3Rpb24geyBVUkxB
Y3Rpb24geyBXVEZNb3ZlKHVybFN0cmluZykgfSB9OwogICAgIH0KIAogICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdEludmFsaWRUeXBl
KTsKQEAgLTI5NSw3ICszMjIsOCBAQCBSZWRpcmVjdEFjdGlvbiBSZWRpcmVjdEFjdGlvbjo6aXNv
bGF0ZWRDCiAKIGJvb2wgUmVkaXJlY3RBY3Rpb246Om9wZXJhdG9yPT0oY29uc3QgUmVkaXJlY3RB
Y3Rpb24mIG90aGVyKSBjb25zdAogewotICAgIHJldHVybiBvdGhlci5hY3Rpb24gPT0gdGhpcy0+
YWN0aW9uOworICAgIHJldHVybiBvdGhlci5oYXNoVGFibGVUeXBlID09IHRoaXMtPmhhc2hUYWJs
ZVR5cGUKKyAgICAgICAgJiYgb3RoZXIuYWN0aW9uID09IHRoaXMtPmFjdGlvbjsKIH0KIAogdm9p
ZCBSZWRpcmVjdEFjdGlvbjo6c2VyaWFsaXplKFZlY3Rvcjx1aW50OF90PiYgdmVjdG9yKSBjb25z
dApAQCAtMzQwLDI2ICszNjgsNjQgQEAgc2l6ZV90IFJlZGlyZWN0QWN0aW9uOjpzZXJpYWxpemVk
TGVuZ3RoKAogICAgIHJldHVybiBkZXNlcmlhbGl6ZUxlbmd0aChzcGFuLCAwKTsKIH0KIAotYXV0
byBSZWRpcmVjdEFjdGlvbjo6VVJMVHJhbnNmb3JtQWN0aW9uOjpwYXJzZShjb25zdCBKU09OOjpP
YmplY3QmIHRyYW5zZm9ybSwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhbGxvd2VkUmVkaXJlY3RV
UkxTY2hlbWVzKSAtPiBFeHBlY3RlZDxVUkxUcmFuc2Zvcm1BY3Rpb24sIHN0ZDo6ZXJyb3JfY29k
ZT4KK3ZvaWQgUmVkaXJlY3RBY3Rpb246OmFwcGx5VG9SZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCkKK3sKKyAgICBzdGQ6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oY29uc3QgRXh0
ZW5zaW9uUGF0aEFjdGlvbiYpIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudC4gV2UgbmVl
ZCB0byBrbm93IHRoZSBiYXNlIFVSTCBvZiB0aGUgZXh0ZW5zaW9uIGhlcmUgZnJvbSBuZXcgU1BJ
LgorICAgIH0sIFsmXSAoY29uc3QgUmVnZXhTdWJzdGl0dXRpb25BY3Rpb24mKSB7CisgICAgICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQsIGlkZWFsbHkgaW4gYSB3YXkgdGhhdCBkb2Vzbid0IHJlcXVp
cmUgbWFraW5nIGEgbmV3IFZNIGFuZCBnbG9iYWwgb2JqZWN0IGZvciBlYWNoIHJlZGlyZWN0IG9w
ZXJhdGlvbi4KKyAgICB9LCBbJl0gKGNvbnN0IFVSTFRyYW5zZm9ybUFjdGlvbiYgYWN0aW9uKSB7
CisgICAgICAgIGF1dG8gdXJsID0gcmVxdWVzdC51cmwoKTsKKyAgICAgICAgYWN0aW9uLmFwcGx5
VG9VUkwodXJsKTsKKyAgICAgICAgcmVxdWVzdC5zZXRVUkwoV1RGTW92ZSh1cmwpKTsKKyAgICB9
LCBbJl0gKGNvbnN0IFVSTEFjdGlvbiYgYWN0aW9uKSB7CisgICAgICAgIHJlcXVlc3Quc2V0VVJM
KFVSTChVUkwoKSwgYWN0aW9uLnVybCkpOworICAgIH0pLCBhY3Rpb24pOworfQorCithdXRvIFJl
ZGlyZWN0QWN0aW9uOjpVUkxUcmFuc2Zvcm1BY3Rpb246OnBhcnNlKGNvbnN0IEpTT046Ok9iamVj
dCYgdHJhbnNmb3JtLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEhhc2hTZXQ8U3RyaW5nPj4mIGFsbG93
ZWRSZWRpcmVjdFVSTFNjaGVtZXMpIC0+IEV4cGVjdGVkPFVSTFRyYW5zZm9ybUFjdGlvbiwgc3Rk
OjplcnJvcl9jb2RlPgogewogICAgIFVSTFRyYW5zZm9ybUFjdGlvbiBhY3Rpb247Ci0gICAgYWN0
aW9uLmZyYWdtZW50ID0gdHJhbnNmb3JtLmdldFN0cmluZygiZnJhZ21lbnQiKTsKKyAgICBpZiAo
YXV0byBmcmFnbWVudCA9IHRyYW5zZm9ybS5nZXRTdHJpbmcoImZyYWdtZW50Iik7ICEhZnJhZ21l
bnQpIHsKKyAgICAgICAgaWYgKCFmcmFnbWVudC5pc0VtcHR5KCkgJiYgIWZyYWdtZW50LnN0YXJ0
c1dpdGgoJyMnKSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0
ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdEludmFsaWRGcmFnbWVudCk7CisgICAgICAgIGFjdGlv
bi5mcmFnbWVudCA9IFdURk1vdmUoZnJhZ21lbnQpOworICAgIH0KICAgICBhY3Rpb24uaG9zdCA9
IHRyYW5zZm9ybS5nZXRTdHJpbmcoImhvc3QiKTsKICAgICBhY3Rpb24ucGFzc3dvcmQgPSB0cmFu
c2Zvcm0uZ2V0U3RyaW5nKCJwYXNzd29yZCIpOwogICAgIGFjdGlvbi5wYXRoID0gdHJhbnNmb3Jt
LmdldFN0cmluZygicGF0aCIpOwotICAgIGFjdGlvbi5wb3J0ID0gdHJhbnNmb3JtLmdldFN0cmlu
ZygicG9ydCIpOwotICAgIGF1dG8gc2NoZW1lID0gdHJhbnNmb3JtLmdldFN0cmluZygic2NoZW1l
Iik7Ci0gICAgaWYgKCEhc2NoZW1lICYmICFhbGxvd2VkUmVkaXJlY3RVUkxTY2hlbWVzLmNvbnRh
aW5zKHNjaGVtZSkpCi0gICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5z
aW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTFNjaGVtZU5vdEFsbG93ZWQpOwotICAgIGFjdGlvbi5z
Y2hlbWUgPSBXVEZNb3ZlKHNjaGVtZSk7CisgICAgYXV0byBwb3J0ID0gdHJhbnNmb3JtLmdldFN0
cmluZygicG9ydCIpOworICAgIGlmICghIXBvcnQpIHsKKyAgICAgICAgaWYgKHBvcnQuaXNFbXB0
eSgpKQorICAgICAgICAgICAgYWN0aW9uLnBvcnQgPSB7IHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+
IHsgfSB9OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8gcGFyc2VkUG9ydCA9IHBh
cnNlSW50ZWdlcjx1aW50MTZfdD4oU3RyaW5nVmlldyhwb3J0KSk7CisgICAgICAgICAgICBpZiAo
IXBhcnNlZFBvcnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRl
bnRFeHRlbnNpb25FcnJvcjo6SlNPTlJlZGlyZWN0SW52YWxpZFBvcnQpOworICAgICAgICAgICAg
YWN0aW9uLnBvcnQgPSB7IHBhcnNlZFBvcnQgfTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChhdXRvIHVuY2Fub25pY2FsaXplZFNjaGVtZSA9IHRyYW5zZm9ybS5nZXRTdHJpbmcoInNjaGVt
ZSIpOyAhIXVuY2Fub25pY2FsaXplZFNjaGVtZSkgeworICAgICAgICBhdXRvIHNjaGVtZSA9IFdU
Rjo6VVJMUGFyc2VyOjptYXliZUNhbm9uaWNhbGl6ZVNjaGVtZSh1bmNhbm9uaWNhbGl6ZWRTY2hl
bWUpOworICAgICAgICBpZiAoIXNjaGVtZSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTFNjaGVtZUludmFsaWQp
OworICAgICAgICBpZiAoYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcyAmJiAhYWxsb3dlZFJlZGly
ZWN0VVJMU2NoZW1lcy0+Y29udGFpbnMoKnNjaGVtZSkpCisgICAgICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RVUkxTY2hlbWVO
b3RBbGxvd2VkKTsKKyAgICAgICAgYWN0aW9uLnNjaGVtZSA9IFdURk1vdmUoKnNjaGVtZSk7Cisg
ICAgfQogICAgIGFjdGlvbi51c2VybmFtZSA9IHRyYW5zZm9ybS5nZXRTdHJpbmcoInVzZXJuYW1l
Iik7CiAgICAgaWYgKGF1dG8gcXVlcnlUcmFuc2Zvcm0gPSB0cmFuc2Zvcm0uZ2V0T2JqZWN0KCJx
dWVyeS10cmFuc2Zvcm0iKSkgewogICAgICAgICBhdXRvIHBhcnNlZFF1ZXJ5VHJhbnNmb3JtID0g
UXVlcnlUcmFuc2Zvcm06OnBhcnNlKCpxdWVyeVRyYW5zZm9ybSk7CiAgICAgICAgIGlmICghcGFy
c2VkUXVlcnlUcmFuc2Zvcm0pCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQocGFy
c2VkUXVlcnlUcmFuc2Zvcm0uZXJyb3IoKSk7CiAgICAgICAgIGFjdGlvbi5xdWVyeVRyYW5zZm9y
bSA9ICpwYXJzZWRRdWVyeVRyYW5zZm9ybTsKLSAgICB9IGVsc2UKLSAgICAgICAgYWN0aW9uLnF1
ZXJ5VHJhbnNmb3JtID0gdHJhbnNmb3JtLmdldFN0cmluZygicXVlcnkiKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBhdXRvIHF1ZXJ5ID0gdHJhbnNmb3JtLmdldFN0cmluZygicXVlcnkiKTsKKyAg
ICAgICAgaWYgKCFxdWVyeS5pc0VtcHR5KCkgJiYgIXF1ZXJ5LnN0YXJ0c1dpdGgoJz8nKSkKKyAg
ICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpT
T05SZWRpcmVjdEludmFsaWRRdWVyeSk7CisgICAgICAgIGFjdGlvbi5xdWVyeVRyYW5zZm9ybSA9
IFdURk1vdmUocXVlcnkpOworICAgIH0KICAgICByZXR1cm4gYWN0aW9uOwogfQogCkBAIC0zOTks
MTMgKzQ2NSwxMyBAQCB2b2lkIFJlZGlyZWN0QWN0aW9uOjpVUkxUcmFuc2Zvcm1BY3Rpb246CiAg
ICAgdWludDhfdCBoYXNTY2hlbWUgPSAhIXNjaGVtZTsKICAgICB1aW50OF90IGhhc1VzZXJuYW1l
ID0gISF1c2VybmFtZTsKICAgICBhdXRvKiBxdWVyeVN0cmluZyA9IHN0ZDo6Z2V0X2lmPFN0cmlu
Zz4oJnF1ZXJ5VHJhbnNmb3JtKTsKKyAgICBhdXRvIHF1ZXJ5U3RyaW5nVVRGOCA9IHF1ZXJ5U3Ry
aW5nID8gcXVlcnlTdHJpbmctPnV0ZjgoKSA6IENTdHJpbmcoKTsKICAgICB1aW50OF90IGhhc1F1
ZXJ5ID0gIXF1ZXJ5U3RyaW5nIHx8ICEhKnF1ZXJ5U3RyaW5nOwogCiAgICAgYXV0byBmcmFnbWVu
dFVURjggPSBmcmFnbWVudC51dGY4KCk7CiAgICAgYXV0byBob3N0VVRGOCA9IGhvc3QudXRmOCgp
OwogICAgIGF1dG8gcGFzc3dvcmRVVEY4ID0gcGFzc3dvcmQudXRmOCgpOwogICAgIGF1dG8gcGF0
aFVURjggPSBwYXRoLnV0ZjgoKTsKLSAgICBhdXRvIHBvcnRVVEY4ID0gcG9ydC51dGY4KCk7CiAg
ICAgYXV0byBzY2hlbWVVVEY4ID0gc2NoZW1lLnV0ZjgoKTsKICAgICBhdXRvIHVzZXJuYW1lVVRG
OCA9IHVzZXJuYW1lLnV0ZjgoKTsKIApAQCAtNDE0LDkgKzQ4MCwxMCBAQCB2b2lkIFJlZGlyZWN0
QWN0aW9uOjpVUkxUcmFuc2Zvcm1BY3Rpb246CiAgICAgICAgICsgKGhhc0hvc3QgPyBzaXplb2Yo
dWludDMyX3QpICsgaG9zdFVURjgubGVuZ3RoKCkgOiAwKQogICAgICAgICArIChoYXNQYXNzd29y
ZCA/IHNpemVvZih1aW50MzJfdCkgKyBwYXNzd29yZFVURjgubGVuZ3RoKCkgOiAwKQogICAgICAg
ICArIChoYXNQYXRoID8gc2l6ZW9mKHVpbnQzMl90KSArIHBhdGhVVEY4Lmxlbmd0aCgpIDogMCkK
LSAgICAgICAgKyAoaGFzUG9ydCA/IHNpemVvZih1aW50MzJfdCkgKyBwb3J0VVRGOC5sZW5ndGgo
KSA6IDApCiAgICAgICAgICsgKGhhc1NjaGVtZSA/IHNpemVvZih1aW50MzJfdCkgKyBzY2hlbWVV
VEY4Lmxlbmd0aCgpIDogMCkKLSAgICAgICAgKyAoaGFzVXNlcm5hbWUgPyBzaXplb2YodWludDMy
X3QpICsgdXNlcm5hbWVVVEY4Lmxlbmd0aCgpIDogMCkpOworICAgICAgICArIChoYXNVc2VybmFt
ZSA/IHNpemVvZih1aW50MzJfdCkgKyB1c2VybmFtZVVURjgubGVuZ3RoKCkgOiAwKQorICAgICAg
ICArIChoYXNQb3J0ID8gMSArICgqcG9ydCA/IHNpemVvZih1aW50MTZfdCkgOiAwKSA6IDApCisg
ICAgICAgICsgKGhhc1F1ZXJ5ID8gMSArIChxdWVyeVN0cmluZyA/IHNpemVvZih1aW50MzJfdCkg
KyBxdWVyeVN0cmluZ1VURjgubGVuZ3RoKCkgOiAwKSA6IDApKTsKIAogICAgIGF1dG8gYmVnaW5J
bmRleCA9IHZlY3Rvci5zaXplKCk7CiAgICAgdW5jaGVja2VkQXBwZW5kKHZlY3RvciwgMCk7CkBA
IC00NDIsMTggKzUwOSwyMiBAQCB2b2lkIFJlZGlyZWN0QWN0aW9uOjpVUkxUcmFuc2Zvcm1BY3Rp
b246CiAgICAgICAgIHVuY2hlY2tlZEFwcGVuZExlbmd0aEFuZFN0cmluZyhwYXNzd29yZFVURjgp
OwogICAgIGlmIChoYXNQYXRoKQogICAgICAgICB1bmNoZWNrZWRBcHBlbmRMZW5ndGhBbmRTdHJp
bmcocGF0aFVURjgpOwotICAgIGlmIChoYXNQb3J0KQotICAgICAgICB1bmNoZWNrZWRBcHBlbmRM
ZW5ndGhBbmRTdHJpbmcocG9ydFVURjgpOwogICAgIGlmIChoYXNTY2hlbWUpCiAgICAgICAgIHVu
Y2hlY2tlZEFwcGVuZExlbmd0aEFuZFN0cmluZyhzY2hlbWVVVEY4KTsKICAgICBpZiAoaGFzVXNl
cm5hbWUpCiAgICAgICAgIHVuY2hlY2tlZEFwcGVuZExlbmd0aEFuZFN0cmluZyh1c2VybmFtZVVU
RjgpOworICAgIGlmIChoYXNQb3J0KSB7CisgICAgICAgIHZlY3Rvci51bmNoZWNrZWRBcHBlbmQo
ISEqcG9ydCk7CisgICAgICAgIGlmICgqcG9ydCkgeworICAgICAgICAgICAgdmVjdG9yLnVuY2hl
Y2tlZEFwcGVuZCgqKnBvcnQgPj4gMCk7CisgICAgICAgICAgICB2ZWN0b3IudW5jaGVja2VkQXBw
ZW5kKCoqcG9ydCA+PiA4KTsKKyAgICAgICAgfQorICAgIH0KICAgICBpZiAoaGFzUXVlcnkpIHsK
LSAgICAgICAgdmVjdG9yLmFwcGVuZChxdWVyeVRyYW5zZm9ybS5pbmRleCgpKTsKLSAgICAgICAg
c3RkOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShjb25zdCBTdHJpbmcmIHF1ZXJ5U3RyaW5n
KSB7Ci0gICAgICAgICAgICBhdXRvIHF1ZXJ5U3RyaW5nVVRGOCA9IHF1ZXJ5U3RyaW5nLnV0Zjgo
KTsKLSAgICAgICAgICAgIGFwcGVuZCh2ZWN0b3IsIHF1ZXJ5U3RyaW5nVVRGOC5sZW5ndGgoKSk7
Ci0gICAgICAgICAgICBhcHBlbmQodmVjdG9yLCBxdWVyeVN0cmluZ1VURjgpOworICAgICAgICB2
ZWN0b3IudW5jaGVja2VkQXBwZW5kKHF1ZXJ5VHJhbnNmb3JtLmluZGV4KCkpOworICAgICAgICBz
dGQ6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKGNvbnN0IFN0cmluZyYpIHsKKyAgICAgICAg
ICAgIHVuY2hlY2tlZEFwcGVuZCh2ZWN0b3IsIHF1ZXJ5U3RyaW5nVVRGOC5sZW5ndGgoKSk7Cisg
ICAgICAgICAgICB1bmNoZWNrZWRBcHBlbmQodmVjdG9yLCBxdWVyeVN0cmluZ1VURjgpOwogICAg
ICAgICB9LCBbJl0oY29uc3QgUXVlcnlUcmFuc2Zvcm0mIHRyYW5zZm9ybSkgewogICAgICAgICAg
ICAgdHJhbnNmb3JtLnNlcmlhbGl6ZSh2ZWN0b3IpOwogICAgICAgICB9KSwgcXVlcnlUcmFuc2Zv
cm0pOwpAQCAtNDg3LDkgKzU1OCwxOCBAQCBhdXRvIFJlZGlyZWN0QWN0aW9uOjpVUkxUcmFuc2Zv
cm1BY3Rpb246CiAgICAgYXV0byBob3N0ID0gaGFzSG9zdCA/IGRlc2VyaWFsaXplU3RyaW5nKCkg
OiBTdHJpbmcoKTsKICAgICBhdXRvIHBhc3N3b3JkID0gaGFzUGFzc3dvcmQgPyBkZXNlcmlhbGl6
ZVN0cmluZygpIDogU3RyaW5nKCk7CiAgICAgYXV0byBwYXRoID0gaGFzUGF0aCA/IGRlc2VyaWFs
aXplU3RyaW5nKCkgOiBTdHJpbmcoKTsKLSAgICBhdXRvIHBvcnQgPSBoYXNQb3J0ID8gZGVzZXJp
YWxpemVTdHJpbmcoKSA6IFN0cmluZygpOwogICAgIGF1dG8gc2NoZW1lID0gaGFzU2NoZW1lID8g
ZGVzZXJpYWxpemVTdHJpbmcoKSA6IFN0cmluZygpOwogICAgIGF1dG8gdXNlcm5hbWUgPSBoYXNV
c2VybmFtZSA/IGRlc2VyaWFsaXplU3RyaW5nKCkgOiBTdHJpbmcoKTsKKyAgICBzdGQ6Om9wdGlv
bmFsPHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+PiBwb3J0OworICAgIGlmIChoYXNQb3J0KSB7Cisg
ICAgICAgIGlmIChzcGFuW3Byb2dyZXNzKytdKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChzcGFuLnNpemUoKSA+IHByb2dyZXNzICsgMSk7CisgICAgICAgICAgICB1aW50MTZfdCB2YWx1
ZSA9IChzcGFuW3Byb2dyZXNzXSA8PCAwKSB8IChzcGFuW3Byb2dyZXNzICsgMV0gPDwgOCk7Cisg
ICAgICAgICAgICBwb3J0ID0geyB7IHZhbHVlIH0gfTsKKyAgICAgICAgICAgIHByb2dyZXNzICs9
IDI7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcG9ydCA9IHsgc3RkOjpvcHRpb25hbDx1
aW50MTZfdD4geyB9IH07CisgICAgfQogICAgIFF1ZXJ5VHJhbnNmb3JtVmFyaWFudCBxdWVyeVRy
YW5zZm9ybTsKICAgICBpZiAoaGFzUXVlcnkpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3Bh
bi5zaXplKCkgPiBwcm9ncmVzcyk7CkBAIC01NTYsNiArNjM2LDY2IEBAIGF1dG8gUmVkaXJlY3RB
Y3Rpb246OlVSTFRyYW5zZm9ybUFjdGlvbjoKICAgICByZXR1cm4gcGFyc2VkUXVlcnlUcmFuc2Zv
cm07CiB9CiAKK3ZvaWQgUmVkaXJlY3RBY3Rpb246OlVSTFRyYW5zZm9ybUFjdGlvbjo6YXBwbHlU
b1VSTChVUkwmIHVybCkgY29uc3QKK3sKKyAgICBpZiAoISFmcmFnbWVudCkgeworICAgICAgICBp
ZiAoZnJhZ21lbnQuaXNFbXB0eSgpKQorICAgICAgICAgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRl
bnRpZmllcigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB1cmwuc2V0RnJhZ21lbnRJZGVu
dGlmaWVyKFN0cmluZ1ZpZXcoZnJhZ21lbnQpLnN1YnN0cmluZygxKSk7CisgICAgfQorICAgIGlm
ICghIWhvc3QpCisgICAgICAgIHVybC5zZXRIb3N0KGhvc3QpOworICAgIGlmICghIXBhc3N3b3Jk
KQorICAgICAgICB1cmwuc2V0UGFzc3dvcmQocGFzc3dvcmQpOworICAgIGlmICghIXBhdGgpCisg
ICAgICAgIHVybC5zZXRQYXRoKHBhdGgpOworICAgIGlmICghIXBvcnQpCisgICAgICAgIHVybC5z
ZXRQb3J0KCpwb3J0KTsKKyAgICBzdGQ6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdIChjb25z
dCBTdHJpbmcmIHF1ZXJ5KSB7CisgICAgICAgIGlmICghcXVlcnkuaXNOdWxsKCkpCisgICAgICAg
ICAgICB1cmwuc2V0UXVlcnkocXVlcnkuaXNFbXB0eSgpID8gU3RyaW5nVmlldygpIDogU3RyaW5n
VmlldyhxdWVyeSkpOworICAgIH0sIFsmXSAoY29uc3QgVVJMVHJhbnNmb3JtQWN0aW9uOjpRdWVy
eVRyYW5zZm9ybSYgdHJhbnNmb3JtKSB7CisgICAgICAgIHRyYW5zZm9ybS5hcHBseVRvVVJMKHVy
bCk7CisgICAgfSksIHF1ZXJ5VHJhbnNmb3JtKTsKKyAgICBpZiAoISFzY2hlbWUpCisgICAgICAg
IHVybC5zZXRQcm90b2NvbChzY2hlbWUpOworICAgIGlmICghIXVzZXJuYW1lKQorICAgICAgICB1
cmwuc2V0VXNlcih1c2VybmFtZSk7Cit9CisKK3ZvaWQgUmVkaXJlY3RBY3Rpb246OlVSTFRyYW5z
Zm9ybUFjdGlvbjo6UXVlcnlUcmFuc2Zvcm06OmFwcGx5VG9VUkwoVVJMJiB1cmwpIGNvbnN0Cit7
CisgICAgYXV0byBmb3JtID0gV1RGOjpVUkxQYXJzZXI6OnBhcnNlVVJMRW5jb2RlZEZvcm0odXJs
LnF1ZXJ5KCkpOworCisgICAgSGFzaFNldDxTdHJpbmc+IGtleXNUb1JlbW92ZTsKKyAgICBmb3Ig
KGF1dG8mIGtleSA6IHJlbW92ZVBhcmFtcykKKyAgICAgICAga2V5c1RvUmVtb3ZlLmFkZChrZXkp
OworICAgIGZvcm0ucmVtb3ZlQWxsTWF0Y2hpbmcoWyZdIChhdXRvJiBrZXlWYWx1ZSkgeworICAg
ICAgICByZXR1cm4ga2V5c1RvUmVtb3ZlLmNvbnRhaW5zKGtleVZhbHVlLmtleSk7CisgICAgfSk7
CisKKyAgICBWZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBTdHJpbmc+PiBrZXlzVG9B
ZGQ7CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4ga2V5c1RvUmVwbGFjZTsKKyAgICBmb3Ig
KGF1dG8mIGtleVZhbHVlIDogYWRkT3JSZXBsYWNlUGFyYW1zKSB7CisgICAgICAgIGlmIChrZXlW
YWx1ZS5yZXBsYWNlT25seSkKKyAgICAgICAgICAgIGtleXNUb1JlcGxhY2UuYWRkKGtleVZhbHVl
LmtleSwga2V5VmFsdWUudmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBrZXlzVG9B
ZGQuYXBwZW5kKHsga2V5VmFsdWUua2V5LCBrZXlWYWx1ZS52YWx1ZSB9KTsKKyAgICB9CisgICAg
Zm9yIChhdXRvJiBrZXlWYWx1ZSA6IGZvcm0pIHsKKyAgICAgICAgYXV0byBpdGVyYXRvciA9IGtl
eXNUb1JlcGxhY2UuZmluZChrZXlWYWx1ZS5rZXkpOworICAgICAgICBpZiAoaXRlcmF0b3IgIT0g
a2V5c1RvUmVwbGFjZS5lbmQoKSkKKyAgICAgICAgICAgIGtleVZhbHVlLnZhbHVlID0gaXRlcmF0
b3ItPnZhbHVlOworICAgIH0KKyAgICBmb3JtLmFwcGVuZFZlY3RvcihXVEZNb3ZlKGtleXNUb0Fk
ZCkpOworCisgICAgU3RyaW5nQnVpbGRlciB0cmFuc2Zvcm1lZFF1ZXJ5OworICAgIGZvciAoYXV0
byYga2V5VmFsdWUgOiBmb3JtKQorICAgICAgICB0cmFuc2Zvcm1lZFF1ZXJ5LmFwcGVuZCh0cmFu
c2Zvcm1lZFF1ZXJ5LmlzRW1wdHkoKSA/ICIiIDogIiYiLCBrZXlWYWx1ZS5rZXksICEha2V5VmFs
dWUudmFsdWUgPyAiPSIgOiAiIiwga2V5VmFsdWUudmFsdWUpOworICAgIHVybC5zZXRRdWVyeSh0
cmFuc2Zvcm1lZFF1ZXJ5KTsKK30KKwogYXV0byBSZWRpcmVjdEFjdGlvbjo6VVJMVHJhbnNmb3Jt
QWN0aW9uOjpRdWVyeVRyYW5zZm9ybTo6aXNvbGF0ZWRDb3B5KCkgY29uc3QgLT4gUXVlcnlUcmFu
c2Zvcm0KIHsKICAgICByZXR1cm4gewpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvQ29udGVudEV4dGVuc2lvbkFjdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQWN0aW9ucy5oCShyZXZpc2lv
biAyODU5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0
ZW5zaW9uQWN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDkgKzI5LDM4IEBACiAKICNpbmNsdWRl
ICJDb250ZW50RXh0ZW5zaW9uU3RyaW5nU2VyaWFsaXphdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KKyNpbmNsdWRlIDx3
dGYvSGFzaGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFJlc291cmNlUmVxdWVz
dDsKK30KIAogbmFtZXNwYWNlIFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zIHsKIAorLy8gRklY
TUU6IFRoaXMgcHJvYmFibHkgYmVsb25ncyBpbiBXVEYsIHN1Y2ggYXMgaW4gSGFzaEZ1bmN0aW9u
cy5oLgorc3RydWN0IFZhcmlhbnRIYXNoZXIgeworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWPgor
ICAgIHN0YXRpYyB1aW50MzJfdCBoYXNoKFYmJiB2YXJpYW50KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHBhaXJJbnRIYXNoKHZhcmlhbnQuaW5kZXgoKSwgc3RkOjp2aXNpdChbXShjb25zdCBhdXRv
JiB0eXBlKSB7CisgICAgICAgICAgICByZXR1cm4gdHlwZS5oYXNoKCk7CisgICAgICAgIH0sIHN0
ZDo6Zm9yd2FyZDxWPih2YXJpYW50KSkpOworICAgIH0KK307CisKKy8vIEZJWE1FOiBUaGlzIHBy
b2JhYmx5IGJlbG9uZ3MgaW4gV1RGLCBzdWNoIGFzIGluIEhhc2hlci5oLgorc3RydWN0IFZlY3Rv
ckhhc2hlciB7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFY+CisgICAgc3RhdGljIHVpbnQzMl90
IGhhc2goViYmIHZlY3RvcikKKyAgICB7CisgICAgICAgIEhhc2hlciBoYXNoZXI7CisgICAgICAg
IGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKKyAgICAgICAgICAgIGFkZChoYXNoZXIsIGVs
ZW1lbnQuaGFzaCgpKTsKKyAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7CisgICAgfQorfTsK
Kwogc3RydWN0IEFjdGlvbjsKIAogdXNpbmcgU2VyaWFsaXplZEFjdGlvbkJ5dGUgPSB1aW50OF90
OwpAQCAtNjYsNiArOTUsNyBAQCBzdHJ1Y3QgV0VCQ09SRV9FWFBPUlQgTW9kaWZ5SGVhZGVyc0Fj
dGlvCiAgICAgICAgICAgICBTdHJpbmcgaGVhZGVyOwogICAgICAgICAgICAgU3RyaW5nIHZhbHVl
OwogCisgICAgICAgICAgICB1aW50MzJfdCBoYXNoKCkgY29uc3QgeyByZXR1cm4gcGFpckludEhh
c2goaGVhZGVyLmhhc2goKSwgdmFsdWUuaGFzaCgpKTsgfQogICAgICAgICAgICAgQXBwZW5kT3Bl
cmF0aW9uIGlzb2xhdGVkQ29weSgpIGNvbnN0IHsgcmV0dXJuIHsgaGVhZGVyLmlzb2xhdGVkQ29w
eSgpLCB2YWx1ZS5pc29sYXRlZENvcHkoKSB9OyB9CiAgICAgICAgICAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgQXBwZW5kT3BlcmF0aW9uJiBvdGhlcikgY29uc3QgeyByZXR1cm4gb3RoZXIuaGVh
ZGVyID09IHRoaXMtPmhlYWRlciAmJiBvdGhlci52YWx1ZSA9PSB0aGlzLT52YWx1ZTsgfQogICAg
ICAgICB9OwpAQCAtNzMsNDcgKzEwMyw2NyBAQCBzdHJ1Y3QgV0VCQ09SRV9FWFBPUlQgTW9kaWZ5
SGVhZGVyc0FjdGlvCiAgICAgICAgICAgICBTdHJpbmcgaGVhZGVyOwogICAgICAgICAgICAgU3Ry
aW5nIHZhbHVlOwogCisgICAgICAgICAgICB1aW50MzJfdCBoYXNoKCkgY29uc3QgeyByZXR1cm4g
cGFpckludEhhc2goaGVhZGVyLmhhc2goKSwgdmFsdWUuaGFzaCgpKTsgfQogICAgICAgICAgICAg
U2V0T3BlcmF0aW9uIGlzb2xhdGVkQ29weSgpIGNvbnN0IHsgcmV0dXJuIHsgaGVhZGVyLmlzb2xh
dGVkQ29weSgpLCB2YWx1ZS5pc29sYXRlZENvcHkoKSB9OyB9CiAgICAgICAgICAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgU2V0T3BlcmF0aW9uJiBvdGhlcikgY29uc3QgeyByZXR1cm4gb3RoZXIu
aGVhZGVyID09IHRoaXMtPmhlYWRlciAmJiBvdGhlci52YWx1ZSA9PSB0aGlzLT52YWx1ZTsgfQog
ICAgICAgICB9OwogICAgICAgICBzdHJ1Y3QgUmVtb3ZlT3BlcmF0aW9uIHsKICAgICAgICAgICAg
IFN0cmluZyBoZWFkZXI7CiAKKyAgICAgICAgICAgIHVpbnQzMl90IGhhc2goKSBjb25zdCB7IHJl
dHVybiBoZWFkZXIuaGFzaCgpOyB9CiAgICAgICAgICAgICBSZW1vdmVPcGVyYXRpb24gaXNvbGF0
ZWRDb3B5KCkgY29uc3QgeyByZXR1cm4geyBoZWFkZXIuaXNvbGF0ZWRDb3B5KCkgfTsgfQogICAg
ICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlbW92ZU9wZXJhdGlvbiYgb3RoZXIpIGNv
bnN0IHsgcmV0dXJuIG90aGVyLmhlYWRlciA9PSB0aGlzLT5oZWFkZXI7IH0KICAgICAgICAgfTsK
ICAgICAgICAgdXNpbmcgT3BlcmF0aW9uVmFyaWFudCA9IHN0ZDo6dmFyaWFudDxBcHBlbmRPcGVy
YXRpb24sIFNldE9wZXJhdGlvbiwgUmVtb3ZlT3BlcmF0aW9uPjsKICAgICAgICAgT3BlcmF0aW9u
VmFyaWFudCBvcGVyYXRpb247CiAKKyAgICAgICAgdWludDMyX3QgaGFzaCgpIGNvbnN0IHsgcmV0
dXJuIFZhcmlhbnRIYXNoZXI6Omhhc2gob3BlcmF0aW9uKTsgfQogICAgICAgICBzdGF0aWMgRXhw
ZWN0ZWQ8TW9kaWZ5SGVhZGVySW5mbywgc3RkOjplcnJvcl9jb2RlPiBwYXJzZShjb25zdCBKU09O
OjpWYWx1ZSYpOwogICAgICAgICBNb2RpZnlIZWFkZXJJbmZvIGlzb2xhdGVkQ29weSgpIGNvbnN0
OwogICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgTW9kaWZ5SGVhZGVySW5mbyYpIGNvbnN0
OwogICAgICAgICB2b2lkIHNlcmlhbGl6ZShWZWN0b3I8dWludDhfdD4mKSBjb25zdDsKICAgICAg
ICAgc3RhdGljIE1vZGlmeUhlYWRlckluZm8gZGVzZXJpYWxpemUoU3Bhbjxjb25zdCB1aW50OF90
Pik7CiAgICAgICAgIHN0YXRpYyBzaXplX3Qgc2VyaWFsaXplZExlbmd0aChTcGFuPGNvbnN0IHVp
bnQ4X3Q+KTsKKyAgICAgICAgdm9pZCBhcHBseVRvUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmKTsK
ICAgICB9OwogCisgICAgZW51bSBjbGFzcyBIYXNoVGFibGVUeXBlIDogdWludDhfdCB7IEVtcHR5
LCBEZWxldGVkLCBGdWxsIH0gaGFzaFRhYmxlVHlwZTsKICAgICBWZWN0b3I8TW9kaWZ5SGVhZGVy
SW5mbz4gcmVxdWVzdEhlYWRlcnM7CiAgICAgVmVjdG9yPE1vZGlmeUhlYWRlckluZm8+IHJlc3Bv
bnNlSGVhZGVyczsKIAorICAgIE1vZGlmeUhlYWRlcnNBY3Rpb24oVmVjdG9yPE1vZGlmeUhlYWRl
ckluZm8+JiYgcmVxdWVzdEhlYWRlcnMsIFZlY3RvcjxNb2RpZnlIZWFkZXJJbmZvPiYmIHJlc3Bv
bnNlSGVhZGVycykKKyAgICAgICAgOiBoYXNoVGFibGVUeXBlKEhhc2hUYWJsZVR5cGU6OkZ1bGwp
CisgICAgICAgICwgcmVxdWVzdEhlYWRlcnMoV1RGTW92ZShyZXF1ZXN0SGVhZGVycykpCisgICAg
ICAgICwgcmVzcG9uc2VIZWFkZXJzKFdURk1vdmUocmVzcG9uc2VIZWFkZXJzKSkgeyB9CisKKyAg
ICBlbnVtIEVtcHR5VmFsdWVUYWcgeyBFbXB0eVZhbHVlIH07CisgICAgZW51bSBEZWxldGVkVmFs
dWVUYWcgeyBEZWxldGVkVmFsdWUgfTsKKyAgICBNb2RpZnlIZWFkZXJzQWN0aW9uKEVtcHR5VmFs
dWVUYWcpIDogaGFzaFRhYmxlVHlwZShIYXNoVGFibGVUeXBlOjpFbXB0eSkgeyB9CisgICAgTW9k
aWZ5SGVhZGVyc0FjdGlvbihEZWxldGVkVmFsdWVUYWcpIDogaGFzaFRhYmxlVHlwZShIYXNoVGFi
bGVUeXBlOjpEZWxldGVkKSB7IH0KKyAgICBib29sIGlzRGVsZXRlZFZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gaGFzaFRhYmxlVHlwZSA9PSBIYXNoVGFibGVUeXBlOjpEZWxldGVkOyB9CisKKyAgICB1
aW50MzJfdCBoYXNoKCkgY29uc3QgeyByZXR1cm4gcGFpckludEhhc2goVmVjdG9ySGFzaGVyOjpo
YXNoKHJlcXVlc3RIZWFkZXJzKSwgVmVjdG9ySGFzaGVyOjpoYXNoKHJlc3BvbnNlSGVhZGVycykp
OyB9CiAgICAgc3RhdGljIEV4cGVjdGVkPE1vZGlmeUhlYWRlcnNBY3Rpb24sIHN0ZDo6ZXJyb3Jf
Y29kZT4gcGFyc2UoY29uc3QgSlNPTjo6T2JqZWN0Jik7CiAgICAgTW9kaWZ5SGVhZGVyc0FjdGlv
biBpc29sYXRlZENvcHkoKSBjb25zdDsKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgTW9kaWZ5
SGVhZGVyc0FjdGlvbiYpIGNvbnN0OwogICAgIHZvaWQgc2VyaWFsaXplKFZlY3Rvcjx1aW50OF90
PiYpIGNvbnN0OwogICAgIHN0YXRpYyBNb2RpZnlIZWFkZXJzQWN0aW9uIGRlc2VyaWFsaXplKFNw
YW48Y29uc3QgdWludDhfdD4pOwogICAgIHN0YXRpYyBzaXplX3Qgc2VyaWFsaXplZExlbmd0aChT
cGFuPGNvbnN0IHVpbnQ4X3Q+KTsKKyAgICB2b2lkIGFwcGx5VG9SZXF1ZXN0KFJlc291cmNlUmVx
dWVzdCYpOwogfTsKIAogc3RydWN0IFdFQkNPUkVfRVhQT1JUIFJlZGlyZWN0QWN0aW9uIHsKICAg
ICBzdHJ1Y3QgRXh0ZW5zaW9uUGF0aEFjdGlvbiB7CiAgICAgICAgIFN0cmluZyBleHRlbnNpb25Q
YXRoOwogCisgICAgICAgIHVpbnQzMl90IGhhc2goKSBjb25zdCB7IHJldHVybiBleHRlbnNpb25Q
YXRoLmhhc2goKTsgfQogICAgICAgICBFeHRlbnNpb25QYXRoQWN0aW9uIGlzb2xhdGVkQ29weSgp
IGNvbnN0IHsgcmV0dXJuIHsgZXh0ZW5zaW9uUGF0aC5pc29sYXRlZENvcHkoKSB9OyB9CiAgICAg
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFeHRlbnNpb25QYXRoQWN0aW9uJiBvdGhlcikgY29u
c3QgeyByZXR1cm4gb3RoZXIuZXh0ZW5zaW9uUGF0aCA9PSB0aGlzLT5leHRlbnNpb25QYXRoOyB9
CiAgICAgfTsKICAgICBzdHJ1Y3QgUmVnZXhTdWJzdGl0dXRpb25BY3Rpb24gewogICAgICAgICBT
dHJpbmcgcmVnZXhTdWJzdGl0dXRpb247CiAKKyAgICAgICAgdWludDMyX3QgaGFzaCgpIGNvbnN0
IHsgcmV0dXJuIHJlZ2V4U3Vic3RpdHV0aW9uLmhhc2goKTsgfQogICAgICAgICBSZWdleFN1YnN0
aXR1dGlvbkFjdGlvbiBpc29sYXRlZENvcHkoKSBjb25zdCB7IHJldHVybiB7IHJlZ2V4U3Vic3Rp
dHV0aW9uLmlzb2xhdGVkQ29weSgpIH07IH0KICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFJlZ2V4U3Vic3RpdHV0aW9uQWN0aW9uJiBvdGhlcikgY29uc3QgeyByZXR1cm4gb3RoZXIucmVn
ZXhTdWJzdGl0dXRpb24gPT0gdGhpcy0+cmVnZXhTdWJzdGl0dXRpb247IH0KICAgICB9OwpAQCAt
MTI0LDYgKzE3NCw3IEBAIHN0cnVjdCBXRUJDT1JFX0VYUE9SVCBSZWRpcmVjdEFjdGlvbiB7CiAg
ICAgICAgICAgICAgICAgYm9vbCByZXBsYWNlT25seSB7IGZhbHNlIH07CiAgICAgICAgICAgICAg
ICAgU3RyaW5nIHZhbHVlOwogCisgICAgICAgICAgICAgICAgdWludDMyX3QgaGFzaCgpIGNvbnN0
IHsgcmV0dXJuIGNvbXB1dGVIYXNoKGtleSwgcmVwbGFjZU9ubHksIHZhbHVlKTsgfQogICAgICAg
ICAgICAgICAgIHN0YXRpYyBFeHBlY3RlZDxRdWVyeUtleVZhbHVlLCBzdGQ6OmVycm9yX2NvZGU+
IHBhcnNlKGNvbnN0IEpTT046OlZhbHVlJik7CiAgICAgICAgICAgICAgICAgUXVlcnlLZXlWYWx1
ZSBpc29sYXRlZENvcHkoKSBjb25zdDsKICAgICAgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgUXVlcnlLZXlWYWx1ZSYpIGNvbnN0OwpAQCAtMTM1LDQ3ICsxODYsNjUgQEAgc3RydWN0
IFdFQkNPUkVfRVhQT1JUIFJlZGlyZWN0QWN0aW9uIHsKICAgICAgICAgICAgIFZlY3RvcjxRdWVy
eUtleVZhbHVlPiBhZGRPclJlcGxhY2VQYXJhbXM7CiAgICAgICAgICAgICBWZWN0b3I8U3RyaW5n
PiByZW1vdmVQYXJhbXM7CiAKKyAgICAgICAgICAgIHVpbnQzMl90IGhhc2goKSBjb25zdCB7IHJl
dHVybiBjb21wdXRlSGFzaChWZWN0b3JIYXNoZXI6Omhhc2goYWRkT3JSZXBsYWNlUGFyYW1zKSwg
cmVtb3ZlUGFyYW1zKTsgfQogICAgICAgICAgICAgc3RhdGljIEV4cGVjdGVkPFF1ZXJ5VHJhbnNm
b3JtLCBzdGQ6OmVycm9yX2NvZGU+IHBhcnNlKGNvbnN0IEpTT046Ok9iamVjdCYpOwogICAgICAg
ICAgICAgUXVlcnlUcmFuc2Zvcm0gaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAgICAgICAgICAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgUXVlcnlUcmFuc2Zvcm0mKSBjb25zdDsKICAgICAgICAgICAg
IHZvaWQgc2VyaWFsaXplKFZlY3Rvcjx1aW50OF90PiYpIGNvbnN0OwogICAgICAgICAgICAgc3Rh
dGljIFF1ZXJ5VHJhbnNmb3JtIGRlc2VyaWFsaXplKFNwYW48Y29uc3QgdWludDhfdD4pOwogICAg
ICAgICAgICAgc3RhdGljIHNpemVfdCBzZXJpYWxpemVkTGVuZ3RoKFNwYW48Y29uc3QgdWludDhf
dD4pOworICAgICAgICAgICAgdm9pZCBhcHBseVRvVVJMKFVSTCYpIGNvbnN0OwogICAgICAgICB9
OwogCiAgICAgICAgIFN0cmluZyBmcmFnbWVudDsKICAgICAgICAgU3RyaW5nIGhvc3Q7CiAgICAg
ICAgIFN0cmluZyBwYXNzd29yZDsKICAgICAgICAgU3RyaW5nIHBhdGg7Ci0gICAgICAgIFN0cmlu
ZyBwb3J0OworICAgICAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+PiBw
b3J0OwogICAgICAgICB1c2luZyBRdWVyeVRyYW5zZm9ybVZhcmlhbnQgPSBzdGQ6OnZhcmlhbnQ8
U3RyaW5nLCBRdWVyeVRyYW5zZm9ybT47CiAgICAgICAgIFF1ZXJ5VHJhbnNmb3JtVmFyaWFudCBx
dWVyeVRyYW5zZm9ybTsKICAgICAgICAgU3RyaW5nIHNjaGVtZTsKICAgICAgICAgU3RyaW5nIHVz
ZXJuYW1lOwogCi0gICAgICAgIHN0YXRpYyBFeHBlY3RlZDxVUkxUcmFuc2Zvcm1BY3Rpb24sIHN0
ZDo6ZXJyb3JfY29kZT4gcGFyc2UoY29uc3QgSlNPTjo6T2JqZWN0JiwgY29uc3QgSGFzaFNldDxT
dHJpbmc+Jik7CisgICAgICAgIHVpbnQzMl90IGhhc2goKSBjb25zdCB7IHJldHVybiBjb21wdXRl
SGFzaChmcmFnbWVudC5oYXNoKCksIGhvc3QuaGFzaCgpLCBwYXNzd29yZC5oYXNoKCksIHBhdGgu
aGFzaCgpLCBwb3J0LCBWYXJpYW50SGFzaGVyOjpoYXNoKHF1ZXJ5VHJhbnNmb3JtKSwgc2NoZW1l
Lmhhc2goKSwgdXNlcm5hbWUuaGFzaCgpKTsgfQorICAgICAgICBzdGF0aWMgRXhwZWN0ZWQ8VVJM
VHJhbnNmb3JtQWN0aW9uLCBzdGQ6OmVycm9yX2NvZGU+IHBhcnNlKGNvbnN0IEpTT046Ok9iamVj
dCYsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8SGFzaFNldDxTdHJpbmc+PiYpOwogICAgICAgICBVUkxU
cmFuc2Zvcm1BY3Rpb24gaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAgICAgICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBVUkxUcmFuc2Zvcm1BY3Rpb24mKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXJp
YWxpemUoVmVjdG9yPHVpbnQ4X3Q+JikgY29uc3Q7CiAgICAgICAgIHN0YXRpYyBVUkxUcmFuc2Zv
cm1BY3Rpb24gZGVzZXJpYWxpemUoU3Bhbjxjb25zdCB1aW50OF90Pik7CiAgICAgICAgIHN0YXRp
YyBzaXplX3Qgc2VyaWFsaXplZExlbmd0aChTcGFuPGNvbnN0IHVpbnQ4X3Q+KTsKKyAgICAgICAg
dm9pZCBhcHBseVRvVVJMKFVSTCYpIGNvbnN0OwogICAgIH07CiAgICAgc3RydWN0IFVSTEFjdGlv
biB7CiAgICAgICAgIFN0cmluZyB1cmw7CiAKKyAgICAgICAgdWludDMyX3QgaGFzaCgpIGNvbnN0
IHsgcmV0dXJuIHVybC5oYXNoKCk7IH0KICAgICAgICAgVVJMQWN0aW9uIGlzb2xhdGVkQ29weSgp
IGNvbnN0IHsgcmV0dXJuIHsgdXJsLmlzb2xhdGVkQ29weSgpIH07IH0KICAgICAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFVSTEFjdGlvbiYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG90aGVyLnVy
bCA9PSB0aGlzLT51cmw7IH0KICAgICB9OwogCisgICAgZW51bSBjbGFzcyBIYXNoVGFibGVUeXBl
IDogdWludDhfdCB7IEVtcHR5LCBEZWxldGVkLCBGdWxsIH0gaGFzaFRhYmxlVHlwZTsKICAgICB1
c2luZyBBY3Rpb25WYXJpYW50ID0gc3RkOjp2YXJpYW50PEV4dGVuc2lvblBhdGhBY3Rpb24sIFJl
Z2V4U3Vic3RpdHV0aW9uQWN0aW9uLCBVUkxUcmFuc2Zvcm1BY3Rpb24sIFVSTEFjdGlvbj47CiAg
ICAgQWN0aW9uVmFyaWFudCBhY3Rpb247CiAKLSAgICBzdGF0aWMgRXhwZWN0ZWQ8UmVkaXJlY3RB
Y3Rpb24sIHN0ZDo6ZXJyb3JfY29kZT4gcGFyc2UoY29uc3QgSlNPTjo6T2JqZWN0JiwgY29uc3Qg
SGFzaFNldDxTdHJpbmc+Jik7CisgICAgUmVkaXJlY3RBY3Rpb24oQWN0aW9uVmFyaWFudCYmIGFj
dGlvbikKKyAgICAgICAgOiBoYXNoVGFibGVUeXBlKEhhc2hUYWJsZVR5cGU6OkZ1bGwpCisgICAg
ICAgICwgYWN0aW9uKFdURk1vdmUoYWN0aW9uKSkgeyB9CisKKyAgICBlbnVtIEVtcHR5VmFsdWVU
YWcgeyBFbXB0eVZhbHVlIH07CisgICAgZW51bSBEZWxldGVkVmFsdWVUYWcgeyBEZWxldGVkVmFs
dWUgfTsKKyAgICBSZWRpcmVjdEFjdGlvbihFbXB0eVZhbHVlVGFnKSA6IGhhc2hUYWJsZVR5cGUo
SGFzaFRhYmxlVHlwZTo6RW1wdHkpIHsgfQorICAgIFJlZGlyZWN0QWN0aW9uKERlbGV0ZWRWYWx1
ZVRhZykgOiBoYXNoVGFibGVUeXBlKEhhc2hUYWJsZVR5cGU6OkRlbGV0ZWQpIHsgfQorICAgIGJv
b2wgaXNEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBoYXNoVGFibGVUeXBlID09IEhhc2hU
YWJsZVR5cGU6OkRlbGV0ZWQ7IH0KKyAgICB1aW50MzJfdCBoYXNoKCkgY29uc3QgeyByZXR1cm4g
VmFyaWFudEhhc2hlcjo6aGFzaChhY3Rpb24pOyB9CisKKyAgICBzdGF0aWMgRXhwZWN0ZWQ8UmVk
aXJlY3RBY3Rpb24sIHN0ZDo6ZXJyb3JfY29kZT4gcGFyc2UoY29uc3QgSlNPTjo6T2JqZWN0Jiwg
Y29uc3Qgc3RkOjpvcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+Jik7CiAgICAgUmVkaXJlY3RBY3Rp
b24gaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlZGly
ZWN0QWN0aW9uJikgY29uc3Q7CiAgICAgdm9pZCBzZXJpYWxpemUoVmVjdG9yPHVpbnQ4X3Q+Jikg
Y29uc3Q7CiAgICAgc3RhdGljIFJlZGlyZWN0QWN0aW9uIGRlc2VyaWFsaXplKFNwYW48Y29uc3Qg
dWludDhfdD4pOwogICAgIHN0YXRpYyBzaXplX3Qgc2VyaWFsaXplZExlbmd0aChTcGFuPGNvbnN0
IHVpbnQ4X3Q+KTsKKyAgICB2b2lkIGFwcGx5VG9SZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYpOwog
fTsKIAogdXNpbmcgQWN0aW9uRGF0YSA9IHN0ZDo6dmFyaWFudDwKQEAgLTE5MSw0ICsyNjAsMjQg
QEAgdXNpbmcgQWN0aW9uRGF0YSA9IHN0ZDo6dmFyaWFudDwKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnMKIAorbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPD4g
c3RydWN0IERlZmF1bHRIYXNoPFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpSZWRpcmVjdEFj
dGlvbj4geworICAgIHVzaW5nIEFjdGlvbiA9IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpS
ZWRpcmVjdEFjdGlvbjsKKyAgICBzdGF0aWMgdWludDMyX3QgaGFzaChjb25zdCBBY3Rpb24mIGFj
dGlvbikgeyByZXR1cm4gYWN0aW9uLmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNv
bnN0IEFjdGlvbiYgYSwgY29uc3QgQWN0aW9uJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVl
OworfTsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8V2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OlJlZGlyZWN0QWN0aW9uPiA6IHB1YmxpYyBDdXN0b21IYXNoVHJhaXRzPFdlYkNvcmU6
OkNvbnRlbnRFeHRlbnNpb25zOjpSZWRpcmVjdEFjdGlvbj4geyB9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBEZWZhdWx0SGFzaDxXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TW9kaWZ5SGVhZGVy
c0FjdGlvbj4geworICAgIHVzaW5nIEFjdGlvbiA9IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpNb2RpZnlIZWFkZXJzQWN0aW9uOworICAgIHN0YXRpYyB1aW50MzJfdCBoYXNoKGNvbnN0IEFj
dGlvbiYgYWN0aW9uKSB7IHJldHVybiBhY3Rpb24uaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wg
ZXF1YWwoY29uc3QgQWN0aW9uJiBhLCBjb25zdCBBY3Rpb24mIGIpIHsgcmV0dXJuIGEgPT0gYjsg
fQorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRl
ZCA9IHRydWU7Cit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6TW9kaWZ5SGVhZGVyc0FjdGlvbj4gOiBwdWJsaWMgQ3VzdG9tSGFzaFRy
YWl0czxXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TW9kaWZ5SGVhZGVyc0FjdGlvbj4geyB9
OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwogI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0
ZW5zaW9uQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHAJKHJldmlzaW9uIDI4NTk1NCkK
KysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21w
aWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDEyICs3NiwxNiBAQCBzdGF0aWMgVmVjdG9y
PHVuc2lnbmVkPiBzZXJpYWxpemVBY3Rpb25zCiAgICAgdXNpbmcgQWN0aW9uTG9jYXRpb24gPSB1
aW50MzJfdDsKICAgICB1c2luZyBBY3Rpb25NYXAgPSBIYXNoTWFwPFJlc291cmNlRmxhZ3MsIEFj
dGlvbkxvY2F0aW9uLCBEZWZhdWx0SGFzaDxSZXNvdXJjZUZsYWdzPiwgV1RGOjpVbnNpZ25lZFdp
dGhaZXJvS2V5SGFzaFRyYWl0czxSZXNvdXJjZUZsYWdzPj47CiAgICAgdXNpbmcgU3RyaW5nQWN0
aW9uTWFwID0gSGFzaE1hcDxzdGQ6OnBhaXI8U3RyaW5nLCBSZXNvdXJjZUZsYWdzPiwgQWN0aW9u
TG9jYXRpb24sIERlZmF1bHRIYXNoPHN0ZDo6cGFpcjxTdHJpbmcsIFJlc291cmNlRmxhZ3M+Piwg
UGFpckhhc2hUcmFpdHM8SGFzaFRyYWl0czxTdHJpbmc+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9L
ZXlIYXNoVHJhaXRzPFJlc291cmNlRmxhZ3M+Pj47CisgICAgdXNpbmcgUmVkaXJlY3RBY3Rpb25N
YXAgPSBIYXNoTWFwPHN0ZDo6cGFpcjxSZWRpcmVjdEFjdGlvbiwgUmVzb3VyY2VGbGFncz4sIEFj
dGlvbkxvY2F0aW9uLCBEZWZhdWx0SGFzaDxzdGQ6OnBhaXI8UmVkaXJlY3RBY3Rpb24sIFJlc291
cmNlRmxhZ3M+PiwgUGFpckhhc2hUcmFpdHM8SGFzaFRyYWl0czxSZWRpcmVjdEFjdGlvbj4sIFdU
Rjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8UmVzb3VyY2VGbGFncz4+PjsKKyAgICB1
c2luZyBNb2RpZnlIZWFkZXJzQWN0aW9uTWFwID0gSGFzaE1hcDxzdGQ6OnBhaXI8TW9kaWZ5SGVh
ZGVyc0FjdGlvbiwgUmVzb3VyY2VGbGFncz4sIEFjdGlvbkxvY2F0aW9uLCBEZWZhdWx0SGFzaDxz
dGQ6OnBhaXI8TW9kaWZ5SGVhZGVyc0FjdGlvbiwgUmVzb3VyY2VGbGFncz4+LCBQYWlySGFzaFRy
YWl0czxIYXNoVHJhaXRzPE1vZGlmeUhlYWRlcnNBY3Rpb24+LCBXVEY6OlVuc2lnbmVkV2l0aFpl
cm9LZXlIYXNoVHJhaXRzPFJlc291cmNlRmxhZ3M+Pj47CiAgICAgQWN0aW9uTWFwIGJsb2NrTG9h
ZEFjdGlvbnNNYXA7CiAgICAgQWN0aW9uTWFwIGJsb2NrQ29va2llc0FjdGlvbnNNYXA7CiAgICAg
UGVuZGluZ0Rpc3BsYXlOb25lQWN0aW9uc01hcCBjc3NEaXNwbGF5Tm9uZUFjdGlvbnNNYXA7CiAg
ICAgQWN0aW9uTWFwIGlnbm9yZVByZXZpb3VzUnVsZUFjdGlvbnNNYXA7CiAgICAgQWN0aW9uTWFw
IG1ha2VIVFRQU0FjdGlvbnNNYXA7CiAgICAgU3RyaW5nQWN0aW9uTWFwIG5vdGlmeUFjdGlvbnNN
YXA7CisgICAgUmVkaXJlY3RBY3Rpb25NYXAgcmVkaXJlY3RBY3Rpb25NYXA7CisgICAgTW9kaWZ5
SGVhZGVyc0FjdGlvbk1hcCBtb2RpZnlIZWFkZXJzQWN0aW9uTWFwOwogCiAgICAgZm9yICh1bnNp
Z25lZCBydWxlSW5kZXggPSAwOyBydWxlSW5kZXggPCBydWxlTGlzdC5zaXplKCk7ICsrcnVsZUlu
ZGV4KSB7CiAgICAgICAgIGNvbnN0IENvbnRlbnRFeHRlbnNpb25SdWxlJiBydWxlID0gcnVsZUxp
c3RbcnVsZUluZGV4XTsKQEAgLTExMSwzMSArMTE1LDM0IEBAIHN0YXRpYyBWZWN0b3I8dW5zaWdu
ZWQ+IHNlcmlhbGl6ZUFjdGlvbnMKICAgICAgICAgfQogCiAgICAgICAgIFJlc291cmNlRmxhZ3Mg
ZmxhZ3MgPSBydWxlLnRyaWdnZXIoKS5mbGFnczsKLSAgICAgICAgdW5zaWduZWQgYWN0aW9uTG9j
YXRpb24gPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7Ci0gICAgICAgIAor
CiAgICAgICAgIGF1dG8gZmluZE9yTWFrZUFjdGlvbkxvY2F0aW9uID0gWyZdIChBY3Rpb25NYXAm
IG1hcCkgewotICAgICAgICAgICAgY29uc3QgYXV0byBleGlzdGluZ0FjdGlvbiA9IG1hcC5maW5k
KGZsYWdzKTsKLSAgICAgICAgICAgIGlmIChleGlzdGluZ0FjdGlvbiA9PSBtYXAuZW5kKCkpIHsK
LSAgICAgICAgICAgICAgICBhY3Rpb25Mb2NhdGlvbiA9IGFjdGlvbnMuc2l6ZSgpOworICAgICAg
ICAgICAgcmV0dXJuIG1hcC5lbnN1cmUoZmxhZ3MsIFsmXSB7CisgICAgICAgICAgICAgICAgYXV0
byBuZXdBY3Rpb25Mb2NhdGlvbiA9IGFjdGlvbnMuc2l6ZSgpOwogICAgICAgICAgICAgICAgIGFj
dGlvbnMuYXBwZW5kKGFjdGlvbkRhdGEuaW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgbWFwLnNl
dChmbGFncywgYWN0aW9uTG9jYXRpb24pOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICAgICAgYWN0aW9uTG9jYXRpb24gPSBleGlzdGluZ0FjdGlvbi0+dmFsdWU7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG5ld0FjdGlvbkxvY2F0aW9uOworICAgICAgICAgICAgfSkuaXRlcmF0b3It
PnZhbHVlOwogICAgICAgICB9OwotICAgICAgICAKLSAgICAgICAgYXV0byBmaW5kT3JNYWtlU3Ry
aW5nQWN0aW9uTG9jYXRpb24gPSBbJl0gKFN0cmluZ0FjdGlvbk1hcCYgbWFwLCBjb25zdCBOb3Rp
ZnlBY3Rpb24mIGFjdGlvbkRhdGEpIHsKLSAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgbm90aWZp
Y2F0aW9uID0gYWN0aW9uRGF0YS5zdHJpbmc7Ci0gICAgICAgICAgICBhdXRvIGV4aXN0aW5nQWN0
aW9uID0gbWFwLmZpbmQoc3RkOjptYWtlX3BhaXIobm90aWZpY2F0aW9uLCBmbGFncykpOwotICAg
ICAgICAgICAgaWYgKGV4aXN0aW5nQWN0aW9uID09IG1hcC5lbmQoKSkgewotICAgICAgICAgICAg
ICAgIGFjdGlvbkxvY2F0aW9uID0gYWN0aW9ucy5zaXplKCk7Ci0gICAgICAgICAgICAgICAgYWN0
aW9ucy5hcHBlbmQoV1RGOjphbHRlcm5hdGl2ZUluZGV4VjxOb3RpZnlBY3Rpb24sIEFjdGlvbkRh
dGE+KTsKLSAgICAgICAgICAgICAgICBzZXJpYWxpemVTdHJpbmcoYWN0aW9ucywgbm90aWZpY2F0
aW9uKTsKLSAgICAgICAgICAgICAgICBtYXAuc2V0KHN0ZDo6bWFrZV9wYWlyKG5vdGlmaWNhdGlv
biwgZmxhZ3MpLCBhY3Rpb25Mb2NhdGlvbik7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgICAgICBhY3Rpb25Mb2NhdGlvbiA9IGV4aXN0aW5nQWN0aW9uLT52YWx1ZTsKKworICAgICAg
ICBhdXRvIGZpbmRPck1ha2VOb3RpZnlBY3Rpb25Mb2NhdGlvbiA9IFsmXSAoYXV0byYgbWFwLCBj
b25zdCBhdXRvJiBhY3Rpb24pIHsKKyAgICAgICAgICAgIHJldHVybiBtYXAuZW5zdXJlKHsgYWN0
aW9uLnN0cmluZywgZmxhZ3MgfSwgWyZdIHsKKyAgICAgICAgICAgICAgICBhdXRvIG5ld0FjdGlv
bkxvY2F0aW9uID0gYWN0aW9ucy5zaXplKCk7CisgICAgICAgICAgICAgICAgYWN0aW9ucy5hcHBl
bmQoYWN0aW9uRGF0YS5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICBhY3Rpb24uc2VyaWFsaXpl
KGFjdGlvbnMpOworICAgICAgICAgICAgICAgIHJldHVybiBuZXdBY3Rpb25Mb2NhdGlvbjsKKyAg
ICAgICAgICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgfTsKLSAgICAgICAgCi0gICAg
ICAgIHN0ZDo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0gKGNvbnN0IENTU0Rpc3BsYXlOb25l
U2VsZWN0b3JBY3Rpb24mIGFjdGlvbkRhdGEpIHsKKworICAgICAgICBhdXRvIGZpbmRPck1ha2VP
dGhlckFjdGlvbkxvY2F0aW9uID0gWyZdIChhdXRvJiBtYXAsIGNvbnN0IGF1dG8mIGFjdGlvbikg
eworICAgICAgICAgICAgcmV0dXJuIG1hcC5lbnN1cmUoeyBhY3Rpb24sIGZsYWdzIH0sIFsmXSB7
CisgICAgICAgICAgICAgICAgYXV0byBuZXdBY3Rpb25Mb2NhdGlvbiA9IGFjdGlvbnMuc2l6ZSgp
OworICAgICAgICAgICAgICAgIGFjdGlvbnMuYXBwZW5kKGFjdGlvbkRhdGEuaW5kZXgoKSk7Cisg
ICAgICAgICAgICAgICAgYWN0aW9uLnNlcmlhbGl6ZShhY3Rpb25zKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbmV3QWN0aW9uTG9jYXRpb247CisgICAgICAgICAgICB9KS5pdGVyYXRvci0+dmFs
dWU7CisgICAgICAgIH07CisKKyAgICAgICAgYXV0byBhY3Rpb25Mb2NhdGlvbiA9IHN0ZDo6dmlz
aXQoV1RGOjptYWtlVmlzaXRvcihbJl0gKGNvbnN0IENTU0Rpc3BsYXlOb25lU2VsZWN0b3JBY3Rp
b24mIGFjdGlvbkRhdGEpIHsKICAgICAgICAgICAgIGNvbnN0IGF1dG8gYWRkUmVzdWx0ID0gY3Nz
RGlzcGxheU5vbmVBY3Rpb25zTWFwLmFkZChydWxlLnRyaWdnZXIoKSwgUGVuZGluZ0Rpc3BsYXlO
b25lQWN0aW9ucygpKTsKICAgICAgICAgICAgIGF1dG8mIHBlbmRpbmdTdHJpbmdBY3Rpb25zID0g
YWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgICAgIGlmICghcGVuZGluZ1N0cmlu
Z0FjdGlvbnMuY29tYmluZWRTZWxlY3RvcnMuaXNFbXB0eSgpKQpAQCAtMTQzLDIxICsxNTAsMjIg
QEAgc3RhdGljIFZlY3Rvcjx1bnNpZ25lZD4gc2VyaWFsaXplQWN0aW9ucwogICAgICAgICAgICAg
cGVuZGluZ1N0cmluZ0FjdGlvbnMuY29tYmluZWRTZWxlY3RvcnMuYXBwZW5kKGFjdGlvbkRhdGEu
c3RyaW5nKTsKICAgICAgICAgICAgIHBlbmRpbmdTdHJpbmdBY3Rpb25zLmNsaWVudExvY2F0aW9u
cy5hcHBlbmQoYWN0aW9uTG9jYXRpb25zLnNpemUoKSk7CiAKLSAgICAgICAgICAgIGFjdGlvbkxv
Y2F0aW9uID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOworICAgICAgICAg
ICAgLy8gcmVzb2x2ZVBlbmRpbmdEaXNwbGF5Tm9uZUFjdGlvbnMgd2lsbCBmaWxsIHRoaXMgaW4g
bGF0ZXIuCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxBY3Rpb25Mb2Nh
dGlvbj46Om1heCgpOwogICAgICAgICB9LCBbJl0gKGNvbnN0IElnbm9yZVByZXZpb3VzUnVsZXNB
Y3Rpb24mKSB7Ci0gICAgICAgICAgICBmaW5kT3JNYWtlQWN0aW9uTG9jYXRpb24oaWdub3JlUHJl
dmlvdXNSdWxlQWN0aW9uc01hcCk7CisgICAgICAgICAgICByZXR1cm4gZmluZE9yTWFrZUFjdGlv
bkxvY2F0aW9uKGlnbm9yZVByZXZpb3VzUnVsZUFjdGlvbnNNYXApOwogICAgICAgICB9LCBbJl0g
KGNvbnN0IEJsb2NrTG9hZEFjdGlvbiYpIHsKLSAgICAgICAgICAgIGZpbmRPck1ha2VBY3Rpb25M
b2NhdGlvbihibG9ja0xvYWRBY3Rpb25zTWFwKTsKKyAgICAgICAgICAgIHJldHVybiBmaW5kT3JN
YWtlQWN0aW9uTG9jYXRpb24oYmxvY2tMb2FkQWN0aW9uc01hcCk7CiAgICAgICAgIH0sIFsmXSAo
Y29uc3QgQmxvY2tDb29raWVzQWN0aW9uJikgewotICAgICAgICAgICAgZmluZE9yTWFrZUFjdGlv
bkxvY2F0aW9uKGJsb2NrQ29va2llc0FjdGlvbnNNYXApOworICAgICAgICAgICAgcmV0dXJuIGZp
bmRPck1ha2VBY3Rpb25Mb2NhdGlvbihibG9ja0Nvb2tpZXNBY3Rpb25zTWFwKTsKICAgICAgICAg
fSwgWyZdIChjb25zdCBNYWtlSFRUUFNBY3Rpb24mKSB7Ci0gICAgICAgICAgICBmaW5kT3JNYWtl
QWN0aW9uTG9jYXRpb24obWFrZUhUVFBTQWN0aW9uc01hcCk7CisgICAgICAgICAgICByZXR1cm4g
ZmluZE9yTWFrZUFjdGlvbkxvY2F0aW9uKG1ha2VIVFRQU0FjdGlvbnNNYXApOwogICAgICAgICB9
LCBbJl0gKGNvbnN0IE5vdGlmeUFjdGlvbiYgYWN0aW9uRGF0YSkgewotICAgICAgICAgICAgZmlu
ZE9yTWFrZVN0cmluZ0FjdGlvbkxvY2F0aW9uKG5vdGlmeUFjdGlvbnNNYXAsIGFjdGlvbkRhdGEp
OwotICAgICAgICB9LCBbJl0gKGNvbnN0IE1vZGlmeUhlYWRlcnNBY3Rpb24mKSB7Ci0gICAgICAg
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50Ci0gICAgICAgIH0sIFsmXSAoY29uc3QgUmVkaXJlY3RB
Y3Rpb24mKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50CisgICAgICAgICAgICBy
ZXR1cm4gZmluZE9yTWFrZU5vdGlmeUFjdGlvbkxvY2F0aW9uKG5vdGlmeUFjdGlvbnNNYXAsIGFj
dGlvbkRhdGEpOworICAgICAgICB9LCBbJl0gKGNvbnN0IE1vZGlmeUhlYWRlcnNBY3Rpb24mIGFj
dGlvbikgeworICAgICAgICAgICAgcmV0dXJuIGZpbmRPck1ha2VPdGhlckFjdGlvbkxvY2F0aW9u
KG1vZGlmeUhlYWRlcnNBY3Rpb25NYXAsIGFjdGlvbik7CisgICAgICAgIH0sIFsmXSAoY29uc3Qg
UmVkaXJlY3RBY3Rpb24mIGFjdGlvbikgeworICAgICAgICAgICAgcmV0dXJuIGZpbmRPck1ha2VP
dGhlckFjdGlvbkxvY2F0aW9uKHJlZGlyZWN0QWN0aW9uTWFwLCBhY3Rpb24pOwogICAgICAgICB9
KSwgYWN0aW9uRGF0YSk7CiAgICAgICAgIGFjdGlvbkxvY2F0aW9ucy5hcHBlbmQoYWN0aW9uTG9j
YXRpb24pOwogICAgIH0KQEAgLTI2Nyw3ICsyNzUsNyBAQCBzdGQ6OmVycm9yX2NvZGUgY29tcGls
ZVJ1bGVMaXN0KENvbnRlbnRFCiB7CiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICBjYWxsT25NYWlu
VGhyZWFkKFtydWxlSlNPTiA9IHJ1bGVKU09OLmlzb2xhdGVkQ29weSgpLCBwYXJzZWRSdWxlTGlz
dCA9IHBhcnNlZFJ1bGVMaXN0Lmlzb2xhdGVkQ29weSgpXSB7Ci0gICAgICAgIEFTU0VSVChwYXJz
ZVJ1bGVMaXN0KHJ1bGVKU09OLCB7IH0pLnZhbHVlKCkgPT0gcGFyc2VkUnVsZUxpc3QpOworICAg
ICAgICBBU1NFUlQocGFyc2VSdWxlTGlzdChydWxlSlNPTiwgc3RkOjpudWxsb3B0KS52YWx1ZSgp
ID09IHBhcnNlZFJ1bGVMaXN0KTsKICAgICB9KTsKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25F
cnJvci5jcHAJKHJldmlzaW9uIDI4NTk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw4
ICsxMDMsMjAgQEAgY29uc3Qgc3RkOjplcnJvcl9jYXRlZ29yeSYgY29udGVudEV4dGVucwogICAg
ICAgICAgICAgICAgIHJldHVybiAiQSByZWRpcmVjdCBleHRlbnNpb24gcGF0aCBtdXN0IHN0YXJ0
IHdpdGggYSBzbGFzaCI7CiAgICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6
SlNPTlJlZGlyZWN0VVJMU2NoZW1lTm90QWxsb3dlZDoKICAgICAgICAgICAgICAgICByZXR1cm4g
IkEgcmVkaXJlY3QgdXJsIHNjaGVtZSBtdXN0IGJlIGluIHRoZSBzZXQgb2YgYWxsb3dlZCBzY2hl
bWVzIjsKKyAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJl
Y3RVUkxTY2hlbWVJbnZhbGlkOgorICAgICAgICAgICAgICAgIHJldHVybiAiQSByZWRpcmVjdCB1
cmwgc2NoZW1lIG11c3QgYmUgYSB2YWxpZCBzY2hlbWUiOworICAgICAgICAgICAgY2FzZSBDb250
ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTFNjaGVtZXNTaG91bGROb3RJbmNsdWRl
SmF2YXNjcmlwdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIlRoZSBzZXQgb2YgYWxsb3dlZCBy
ZWRpcmVjdCBzY2hlbWVzIHNob3VsZG4ndCBpbmNsdWRlIGphdmFzY3JpcHQiOworICAgICAgICAg
ICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTEludmFsaWQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuICJBIHJlZGlyZWN0IHVybCBtdXN0IGJlIHZhbGlkIjsKICAg
ICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RJbnZhbGlk
VHlwZToKICAgICAgICAgICAgICAgICByZXR1cm4gIkEgcmVkaXJlY3QgbXVzdCBoYXZlIGEgbWVt
YmVyIG5hbWVkIFwiZXh0ZW5zaW9uLXBhdGhcIiwgXCJyZWdleC1zdWJzdGl0dXRpb25cIiwgXCJ0
cmFuc2Zvcm1cIiBvciBcInVybFwiIjsKKyAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lv
bkVycm9yOjpKU09OUmVkaXJlY3RJbnZhbGlkUG9ydDoKKyAgICAgICAgICAgICAgICByZXR1cm4g
IkEgcmVkaXJlY3QgcG9ydCBtdXN0IGJlIGVpdGhlciBlbXB0eSBvciBhIG51bWJlciBiZXR3ZWVu
IDAgYW5kIDY1NTM1LCBpbmNsdXNpdmUiOworICAgICAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5z
aW9uRXJyb3I6OkpTT05SZWRpcmVjdEludmFsaWRRdWVyeToKKyAgICAgICAgICAgICAgICByZXR1
cm4gIkEgcmVkaXJlY3QgcXVlcnkgbXVzdCBlaXRoZXIgYmUgZW1wdHkgb3IgYmVnaW4gd2l0aCAn
PyciOworICAgICAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVj
dEludmFsaWRGcmFnbWVudDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIkEgcmVkaXJlY3QgZnJh
Z21lbnQgbXVzdCBlaXRoZXIgYmUgZW1wdHkgb3IgYmVnaW4gd2l0aCAnIyciOwogICAgICAgICAg
ICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05Nb2RpZnlIZWFkZXJzSW52YWxpZE9w
ZXJhdGlvbjoKICAgICAgICAgICAgICAgICByZXR1cm4gIkEgbW9kaWZ5LWhlYWRlcnMgb3BlcmF0
aW9uIG11c3QgaGF2ZSBhbiBvcGVyYXRpb24gdGhhdCBpcyBlaXRoZXIgXCJzZXRcIiwgXCJhcHBl
bmRcIiwgb3IgXCJyZW1vdmVcIiI7CiAgICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25F
cnJvcjo6SlNPTk1vZGlmeUhlYWRlcnNJbmZvTm90QURpY3Rpb25hcnk6CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9u
RXJyb3IuaAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvQ29udGVudEV4dGVuc2lvbkVycm9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDggKzYw
LDE0IEBAIGVudW0gY2xhc3MgQ29udGVudEV4dGVuc2lvbkVycm9yIHsKIAogICAgIEpTT05SZWRp
cmVjdE1pc3NpbmcsCiAgICAgSlNPTlJlZGlyZWN0RXh0ZW5zaW9uUGF0aERvZXNOb3RTdGFydFdp
dGhTbGFzaCwKKyAgICBKU09OUmVkaXJlY3RVUkxTY2hlbWVJbnZhbGlkLAogICAgIEpTT05SZWRp
cmVjdFVSTFNjaGVtZU5vdEFsbG93ZWQsCisgICAgSlNPTlJlZGlyZWN0VVJMU2NoZW1lc1Nob3Vs
ZE5vdEluY2x1ZGVKYXZhc2NyaXB0LAorICAgIEpTT05SZWRpcmVjdFVSTEludmFsaWQsCiAgICAg
SlNPTlJlZGlyZWN0SW52YWxpZFR5cGUsCisgICAgSlNPTlJlZGlyZWN0SW52YWxpZFBvcnQsCisg
ICAgSlNPTlJlZGlyZWN0SW52YWxpZFF1ZXJ5LAorICAgIEpTT05SZWRpcmVjdEludmFsaWRGcmFn
bWVudCwKIAogICAgIEpTT05SZW1vdmVQYXJhbWV0ZXJzTm90U3RyaW5nQXJyYXksCiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRl
bnRFeHRlbnNpb25QYXJzZXIuY3BwCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTc5LDcgKzE3OSw3IEBAIGJvb2wgaXNWYWxpZENTU1NlbGVjdG9yKGNvbnN0IFN0
cmluZyYgc2UKICAgICByZXR1cm4gISFwYXJzZXIucGFyc2VTZWxlY3RvcihzZWxlY3Rvcik7CiB9
CiAKLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPEV4cGVjdGVkPEFjdGlvbiwgc3RkOjplcnJvcl9jb2Rl
Pj4gbG9hZEFjdGlvbihjb25zdCBKU09OOjpPYmplY3QmIHJ1bGVPYmplY3QsIGNvbnN0IEhhc2hT
ZXQ8U3RyaW5nPiYgYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcykKK3N0YXRpYyBzdGQ6Om9wdGlv
bmFsPEV4cGVjdGVkPEFjdGlvbiwgc3RkOjplcnJvcl9jb2RlPj4gbG9hZEFjdGlvbihjb25zdCBK
U09OOjpPYmplY3QmIHJ1bGVPYmplY3QsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8SGFzaFNldDxTdHJp
bmc+PiYgYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcykKIHsKICAgICBhdXRvIGFjdGlvbk9iamVj
dCA9IHJ1bGVPYmplY3QuZ2V0T2JqZWN0KCJhY3Rpb24iKTsKICAgICBpZiAoIWFjdGlvbk9iamVj
dCkKQEAgLTIyNCw3ICsyMjQsNyBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxFeHBlY3RlZDxBY3Rp
b24sIHN0CiAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJvcjo6
SlNPTkludmFsaWRBY3Rpb25UeXBlKTsKIH0KIAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8RXhwZWN0
ZWQ8Q29udGVudEV4dGVuc2lvblJ1bGUsIHN0ZDo6ZXJyb3JfY29kZT4+IGxvYWRSdWxlKGNvbnN0
IEpTT046Ok9iamVjdCYgcnVsZU9iamVjdCwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhbGxvd2Vk
UmVkaXJlY3RVUkxTY2hlbWVzKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8RXhwZWN0ZWQ8Q29udGVu
dEV4dGVuc2lvblJ1bGUsIHN0ZDo6ZXJyb3JfY29kZT4+IGxvYWRSdWxlKGNvbnN0IEpTT046Ok9i
amVjdCYgcnVsZU9iamVjdCwgY29uc3Qgc3RkOjpvcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+JiBh
bGxvd2VkUmVkaXJlY3RVUkxTY2hlbWVzKQogewogICAgIGF1dG8gdHJpZ2dlciA9IGxvYWRUcmln
Z2VyKHJ1bGVPYmplY3QpOwogICAgIGlmICghdHJpZ2dlci5oYXNfdmFsdWUoKSkKQEAgLTIzOSw4
ICsyMzksMTEgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8RXhwZWN0ZWQ8Q29udGVudEV4dAogICAg
IHJldHVybiB7IHsgeyBXVEZNb3ZlKHRyaWdnZXIudmFsdWUoKSksIFdURk1vdmUoYWN0aW9uLT52
YWx1ZSgpKSB9IH0gfTsKIH0KIAotc3RhdGljIEV4cGVjdGVkPFZlY3RvcjxDb250ZW50RXh0ZW5z
aW9uUnVsZT4sIHN0ZDo6ZXJyb3JfY29kZT4gbG9hZEVuY29kZWRSdWxlcyhjb25zdCBTdHJpbmcm
IHJ1bGVKU09OLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGFsbG93ZWRSZWRpcmVjdFVSTFNjaGVt
ZXMpCitzdGF0aWMgRXhwZWN0ZWQ8VmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPiwgc3RkOjpl
cnJvcl9jb2RlPiBsb2FkRW5jb2RlZFJ1bGVzKGNvbnN0IFN0cmluZyYgcnVsZUpTT04sIGNvbnN0
IHN0ZDo6b3B0aW9uYWw8SGFzaFNldDxTdHJpbmc+PiYgYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1l
cykKIHsKKyAgICBpZiAoYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcyAmJiBhbGxvd2VkUmVkaXJl
Y3RVUkxTY2hlbWVzLT5jb250YWlucygiamF2YXNjcmlwdCIpKQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RVUkxTY2hlbWVz
U2hvdWxkTm90SW5jbHVkZUphdmFzY3JpcHQpOworCiAgICAgYXV0byBkZWNvZGVkUnVsZXMgPSBK
U09OOjpWYWx1ZTo6cGFyc2VKU09OKHJ1bGVKU09OKTsKIAogICAgIGlmICghZGVjb2RlZFJ1bGVz
KQpAQCAtMjcyLDcgKzI3NSw3IEBAIHN0YXRpYyBFeHBlY3RlZDxWZWN0b3I8Q29udGVudEV4dGVu
c2lvblIKICAgICByZXR1cm4gcnVsZUxpc3Q7CiB9CiAKLUV4cGVjdGVkPFZlY3RvcjxDb250ZW50
RXh0ZW5zaW9uUnVsZT4sIHN0ZDo6ZXJyb3JfY29kZT4gcGFyc2VSdWxlTGlzdChjb25zdCBTdHJp
bmcmIHJ1bGVKU09OLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGFsbG93ZWRSZWRpcmVjdFVSTFNj
aGVtZXMpCitFeHBlY3RlZDxWZWN0b3I8Q29udGVudEV4dGVuc2lvblJ1bGU+LCBzdGQ6OmVycm9y
X2NvZGU+IHBhcnNlUnVsZUxpc3QoY29uc3QgU3RyaW5nJiBydWxlSlNPTiwgY29uc3Qgc3RkOjpv
cHRpb25hbDxIYXNoU2V0PFN0cmluZz4+JiBhbGxvd2VkUmVkaXJlY3RVUkxTY2hlbWVzKQogewog
I2lmIENPTlRFTlRfRVhURU5TSU9OU19QRVJGT1JNQU5DRV9SRVBPUlRJTkcKICAgICBNb25vdG9u
aWNUaW1lIGxvYWRFeHRlbnNpb25TdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJz
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250
ZW50RXh0ZW5zaW9uUGFyc2VyLmgJKHJldmlzaW9uIDI4NTk1NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMzgsNyArMzgsMTIgQEAgbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKIAogY2xh
c3MgQ29udGVudEV4dGVuc2lvblJ1bGU7CiAKLVdFQkNPUkVfRVhQT1JUIEV4cGVjdGVkPFZlY3Rv
cjxDb250ZW50RXh0ZW5zaW9uUnVsZT4sIHN0ZDo6ZXJyb3JfY29kZT4gcGFyc2VSdWxlTGlzdChj
b25zdCBTdHJpbmcmLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGFsbG93ZWRSZWRpcmVjdFVSTFNj
aGVtZXMpOworLy8gQW4gYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcyBvZiBzdGQ6Om51bGxvcHQg
aW5kaWNhdGVzIHRoYXQgYWxsIFVSTCBzY2hlbWVzIGFyZSBhbGxvd2VkLgorLy8gVGhpcyBpcyB1
c2VkIHdoZW4gcmVjb21waWxpbmcgc291cmNlIGZyb20gb2xkZXIgdmVyc2lvbnMgb2YgV0tDb250
ZW50UnVsZUxpc3RzIG9uIGRpc2ssCisvLyB3aGVyZSB3ZSBkb24ndCBoYXZlIHRoZSBsaXN0IG9m
IGFsbG93ZWQgVVJMIHNjaGVtZXMgYnV0IGFzc3VtZSB0aGF0IGlmIGl0IGNvbXBpbGVkCisvLyBz
dWNjZXNzZnVsbHkgdGhlIGZpcnN0IHRpbWUgdGhlbiBhbGwgdGhlIHNjaGVtZXMgdXNlZCBtdXN0
IGhhdmUgYmVlbiBhbGxvd2VkLgorLy8gQW4gYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcyBvZiBh
biBlbXB0eSBIYXNoU2V0IGluZGljYXRlcyB0aGF0IG5vIGFjdGl2ZSBhY3Rpb25zIGFyZSBhbGxv
d2VkLgorV0VCQ09SRV9FWFBPUlQgRXhwZWN0ZWQ8VmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxl
Piwgc3RkOjplcnJvcl9jb2RlPiBwYXJzZVJ1bGVMaXN0KGNvbnN0IFN0cmluZyYsIGNvbnN0IHN0
ZDo6b3B0aW9uYWw8SGFzaFNldDxTdHJpbmc+PiYgYWxsb3dlZFJlZGlyZWN0VVJMU2NoZW1lcyk7
CiBXRUJDT1JFX0VYUE9SVCBib29sIGlzVmFsaWRDU1NTZWxlY3Rvcihjb25zdCBTdHJpbmcmKTsK
IAogfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNC
YWNrZW5kLmNwcAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjI4LDEwICsyMjgsMTIgQEAgQ29udGVudFJ1bGVMaXN0UmVzdWx0cyBDb250ZW50RXh0ZW5zaW9u
cwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0sIFsmXShjb25zdCBJZ25vcmVQcmV2
aW91c1J1bGVzQWN0aW9uJikgewogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgICAgICB9LCBbJl0gKGNvbnN0IE1vZGlmeUhlYWRlcnNBY3Rpb24m
KSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudAotICAgICAgICAgICAgfSwg
WyZdIChjb25zdCBSZWRpcmVjdEFjdGlvbiYpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTog
SW1wbGVtZW50CisgICAgICAgICAgICB9LCBbJl0gKGNvbnN0IE1vZGlmeUhlYWRlcnNBY3Rpb24m
IGFjdGlvbikgeworICAgICAgICAgICAgICAgIGlmIChpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIu
YWxsb3dzQWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc0ZvclVSTCh1cmwpKQorICAgICAgICAg
ICAgICAgICAgICByZXN1bHRzLnN1bW1hcnkubW9kaWZ5SGVhZGVyc0FjdGlvbnMuYXBwZW5kKGFj
dGlvbik7CisgICAgICAgICAgICB9LCBbJl0gKGNvbnN0IFJlZGlyZWN0QWN0aW9uJiBhY3Rpb24p
IHsKKyAgICAgICAgICAgICAgICBpZiAoaW5pdGlhdGluZ0RvY3VtZW50TG9hZGVyLmFsbG93c0Fj
dGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNGb3JVUkwodXJsKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0cy5zdW1tYXJ5LnJlZGlyZWN0QWN0aW9ucy5hcHBlbmQoYWN0aW9uKTsKICAgICAg
ICAgICAgIH0pLCBhY3Rpb24uZGF0YSgpKTsKICAgICAgICAgfQogCkBAIC0yOTIsOSArMjk0LDkg
QEAgQ29udGVudFJ1bGVMaXN0UmVzdWx0cyBDb250ZW50RXh0ZW5zaW9ucwogICAgICAgICAgICAg
fSwgWyZdKGNvbnN0IElnbm9yZVByZXZpb3VzUnVsZXNBY3Rpb24mKSB7CiAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIH0sIFsmXSAoY29u
c3QgTW9kaWZ5SGVhZGVyc0FjdGlvbiYpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSW1w
bGVtZW50CisgICAgICAgICAgICAgICAgLy8gV2UgY3VycmVudGx5IGhhdmUgbm90IGltcGxlbWVu
dGVkIGFjdGl2ZSBhY3Rpb25zIGZyb20gdGhlIG5ldHdvcmsgcHJvY2VzcyAoQ09SUyBwcmVmbGln
aHQpLgogICAgICAgICAgICAgfSwgWyZdIChjb25zdCBSZWRpcmVjdEFjdGlvbiYpIHsKLSAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50CisgICAgICAgICAgICAgICAgLy8gV2UgY3Vy
cmVudGx5IGhhdmUgbm90IGltcGxlbWVudGVkIGFjdGl2ZSBhY3Rpb25zIGZyb20gdGhlIG5ldHdv
cmsgcHJvY2VzcyAoQ09SUyBwcmVmbGlnaHQpLgogICAgICAgICAgICAgfSksIGFjdGlvbi5kYXRh
KCkpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzI1LDYgKzMyNywxMiBAQCB2b2lkIGFwcGx5UmVz
dWx0c1RvUmVxdWVzdChDb250ZW50UnVsZUxpCiAgICAgICAgIHJlcXVlc3Quc2V0VVJMKG5ld1VS
TCk7CiAgICAgfQogCisgICAgZm9yIChhdXRvJiBhY3Rpb24gOiByZXN1bHRzLnN1bW1hcnkubW9k
aWZ5SGVhZGVyc0FjdGlvbnMpCisgICAgICAgIGFjdGlvbi5hcHBseVRvUmVxdWVzdChyZXF1ZXN0
KTsKKworICAgIGZvciAoYXV0byYgYWN0aW9uIDogcmVzdWx0cy5zdW1tYXJ5LnJlZGlyZWN0QWN0
aW9ucykKKyAgICAgICAgYWN0aW9uLmFwcGx5VG9SZXF1ZXN0KHJlcXVlc3QpOworCiAgICAgaWYg
KHBhZ2UgJiYgcmVzdWx0cy5zaG91bGROb3RpZnlBcHBsaWNhdGlvbigpKSB7CiAgICAgICAgIHJl
c3VsdHMucmVzdWx0cy5yZW1vdmVBbGxNYXRjaGluZyhbXShjb25zdCBhdXRvJiBwYWlyKSB7CiAg
ICAgICAgICAgICByZXR1cm4gIXBhaXIuc2Vjb25kLnNob3VsZE5vdGlmeUFwcGxpY2F0aW9uKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50UnVsZUxpc3RS
ZXN1bHRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
Q29udGVudFJ1bGVMaXN0UmVzdWx0cy5oCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50UnVsZUxpc3RSZXN1bHRzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDYgKzI1LDkgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpZiBFTkFCTEUoQ09O
VEVOVF9FWFRFTlNJT05TKQorCisjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbkFjdGlvbnMuaCIK
ICNpbmNsdWRlIDx3dGYvS2V5VmFsdWVQYWlyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNTQsNiArNTcsOCBAQCBzdHJ1Y3Qg
Q29udGVudFJ1bGVMaXN0UmVzdWx0cyB7CiAgICAgICAgIGJvb2wgbWFkZUhUVFBTIHsgZmFsc2Ug
fTsKICAgICAgICAgYm9vbCBibG9ja2VkQ29va2llcyB7IGZhbHNlIH07CiAgICAgICAgIGJvb2wg
aGFzTm90aWZpY2F0aW9ucyB7IGZhbHNlIH07CisgICAgICAgIFZlY3RvcjxDb250ZW50RXh0ZW5z
aW9uczo6TW9kaWZ5SGVhZGVyc0FjdGlvbj4gbW9kaWZ5SGVhZGVyc0FjdGlvbnM7CisgICAgICAg
IFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6UmVkaXJlY3RBY3Rpb24+IHJlZGlyZWN0QWN0aW9u
czsKIAogICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVy
JikgY29uc3Q7CiAgICAgICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPFN1bW1hcnk+IGRlY29kZShEZWNvZGVyJik7CkBAIC0xNjgsNyArMTczLDExIEBAIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+IGF1dG8gQ29udGVudFJ1bGUKICAgICAgICAgV1RGTW92ZSgq
bWFkZUhUVFBTKSwKICAgICAgICAgV1RGTW92ZSgqYmxvY2tlZENvb2tpZXMpLAogICAgICAgICBX
VEZNb3ZlKCpoYXNOb3RpZmljYXRpb25zKSwKKyAgICAgICAgeyB9LCAvLyBtb2RpZnlIZWFkZXJz
QWN0aW9ucyBhbmQgcmVkaXJlY3RBY3Rpb25zIGhhdmUgbm8gbmVlZCB0byBiZSBzZXJpYWxpemVk
IHRvIGFub3RoZXIgcHJvY2Vzcy4KKyAgICAgICAgeyB9CiAgICAgfX07CiB9CiAKIH0KKworI2Vu
ZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcg
KzI2LDYgQEAKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ2FjaGVQb2xp
Y3kuaCIKICNpbmNsdWRlICJDYWNoZWRDU1NTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiQ29udGVu
dFJ1bGVMaXN0UmVzdWx0cy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgpAQCAtNDQsNiArNDMsNyBAQAogI2luY2x1
ZGUgPHd0Zi9SZWYuaD4KIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisjaW5jbHVk
ZSAiQ29udGVudFJ1bGVMaXN0UmVzdWx0cy5oIgogI2luY2x1ZGUgIlVzZXJDb250ZW50Q29udHJv
bGxlci5oIgogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9h
ZGVyLmNwcAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3Vt
ZW50TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsNiArOTQsNyBAQAogI2luY2x1ZGUg
IlN1YnJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgog
I2luY2x1ZGUgIlVzZXJDb250ZW50UHJvdmlkZXIuaCIKKyNpbmNsdWRlICJVc2VyQ29udGVudFVS
TFBhdHRlcm4uaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9D
b21wbGV0aW9uSGFuZGxlci5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAt
MTczLDcgKzE3NCwxMCBAQCBEb2N1bWVudExvYWRlcjo6RG9jdW1lbnRMb2FkZXIoY29uc3QgUmVz
CiAgICAgLCBtX29yaWdpbmFsU3Vic3RpdHV0ZURhdGFXYXNWYWxpZChzdWJzdGl0dXRlRGF0YS5p
c1ZhbGlkKCkpCiAgICAgLCBtX3N1YnN0aXR1dGVSZXNvdXJjZURlbGl2ZXJ5VGltZXIoKnRoaXMs
ICZEb2N1bWVudExvYWRlcjo6c3Vic3RpdHV0ZVJlc291cmNlRGVsaXZlcnlUaW1lckZpcmVkKQog
ICAgICwgbV9hcHBsaWNhdGlvbkNhY2hlSG9zdChtYWtlVW5pcXVlPEFwcGxpY2F0aW9uQ2FjaGVI
b3N0PigqdGhpcykpCisgICAgLCBtX2FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvblBhdHRlcm5z
KFZlY3RvcjxVc2VyQ29udGVudFVSTFBhdHRlcm4+KCkpCiB7CisgICAgLy8gRklYTUU6IFZlY3Rv
ciBkZWZhdWx0IGNvbnN0cnVjdG9yIHNob3VsZG4ndCBuZWVkIHRvIGtub3cgdGhlIHNpemUgb2Yg
dGhlIGVsZW1lbnRzLAorICAgIC8vIHNvIG1fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uUGF0
dGVybnMgb3VnaHQgdG8gYmUgYWJsZSB0byBiZSBpbml0aWFsaXplZCB3aXRoIGFuIGluaXRpYWxp
emVyIGxpc3QgaW4gdGhlIGhlYWRlciB3aXRob3V0IGluY2x1ZGluZyBVc2VyQ29udGVudFVSTFBh
dHRlcm4uaC4KIH0KIAogRnJhbWVMb2FkZXIqIERvY3VtZW50TG9hZGVyOjpmcmFtZUxvYWRlcigp
IGNvbnN0CkBAIC0yNDMzLDYgKzI0MzcsMzQgQEAgUmVzb3VyY2VFcnJvciBEb2N1bWVudExvYWRl
cjo6Y29udGVudEZpbAogfQogI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0ZJTFRFUklORykKIAor
dm9pZCBEb2N1bWVudExvYWRlcjo6c2V0QWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uUGF0dGVy
bnMoY29uc3Qgc3RkOjpvcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+JiBwYXR0ZXJucykKK3sKKyAg
ICBpZiAoIXBhdHRlcm5zKSB7CisgICAgICAgIG1fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9u
UGF0dGVybnMgPSBzdGQ6Om51bGxvcHQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgVmVj
dG9yPFdlYkNvcmU6OlVzZXJDb250ZW50VVJMUGF0dGVybj4gcGF0dGVyblZlY3RvcjsKKyAgICBw
YXR0ZXJuVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocGF0dGVybnMtPnNpemUoKSk7Cisg
ICAgZm9yIChhdXRvJiBwYXR0ZXJuU3RyaW5nIDogKnBhdHRlcm5zKSB7CisgICAgICAgIFdlYkNv
cmU6OlVzZXJDb250ZW50VVJMUGF0dGVybiBwYXJzZWRQYXR0ZXJuKHBhdHRlcm5TdHJpbmcpOwor
ICAgICAgICBpZiAocGFyc2VkUGF0dGVybi5pc1ZhbGlkKCkpCisgICAgICAgICAgICBwYXR0ZXJu
VmVjdG9yLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKHBhcnNlZFBhdHRlcm4pKTsKKyAgICB9CisK
KyAgICBtX2FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvblBhdHRlcm5zID0gV1RGTW92ZShwYXR0
ZXJuVmVjdG9yKTsKK30KKworYm9vbCBEb2N1bWVudExvYWRlcjo6YWxsb3dzQWN0aXZlQ29udGVu
dFJ1bGVMaXN0QWN0aW9uc0ZvclVSTChjb25zdCBVUkwmIHVybCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uUGF0dGVybnMpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGZvciAoY29uc3QgYXV0byYgcGF0dGVybiA6ICptX2FjdGl2ZUNvbnRlbnRSdWxl
TGlzdEFjdGlvblBhdHRlcm5zKSB7CisgICAgICAgIGlmIChwYXR0ZXJuLm1hdGNoZXModXJsKSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI3VuZGVmIFBBR0VfSUQKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5oCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODcsNiAr
ODcsNyBAQCBjbGFzcyBTaGFyZWRCdWZmZXI7CiBjbGFzcyBTV0NsaWVudENvbm5lY3Rpb247CiBj
bGFzcyBTdWJyZXNvdXJjZUxvYWRlcjsKIGNsYXNzIFN1YnN0aXR1dGVSZXNvdXJjZTsKK2NsYXNz
IFVzZXJDb250ZW50VVJMUGF0dGVybjsKIAogZW51bSBjbGFzcyBTaG91bGRDb250aW51ZTsKIApA
QCAtMzAxLDYgKzMwMiw5IEBAIHB1YmxpYzoKICAgICBib29sIHVzZXJDb250ZW50RXh0ZW5zaW9u
c0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX3VzZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQ7
IH0KICAgICB2b2lkIHNldFVzZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQoYm9vbCBlbmFibGVk
KSB7IG1fdXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZCA9IGVuYWJsZWQ7IH0KIAorICAgIGJv
b2wgYWxsb3dzQWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uc0ZvclVSTChjb25zdCBVUkwmKSBj
b25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEFjdGl2ZUNvbnRlbnRSdWxlTGlzdEFj
dGlvblBhdHRlcm5zKGNvbnN0IHN0ZDo6b3B0aW9uYWw8SGFzaFNldDxTdHJpbmc+PiYpOworCiAj
aWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKICAgICBEZXZpY2VPcmllbnRhdGlvbk9yTW90
aW9uUGVybWlzc2lvblN0YXRlIGRldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzU3RhdGUo
KSBjb25zdCB7IHJldHVybiBtX2RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzU3RhdGU7
IH0KICAgICB2b2lkIHNldERldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzU3RhdGUoRGV2
aWNlT3JpZW50YXRpb25Pck1vdGlvblBlcm1pc3Npb25TdGF0ZSBzdGF0ZSkgeyBtX2RldmljZU9y
aWVudGF0aW9uQW5kTW90aW9uQWNjZXNzU3RhdGUgPSBzdGF0ZTsgfQpAQCAtNjUxLDYgKzY1NSw3
IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lkZW1wb3RlbnRNb2RlQXV0b3NpemluZ09ubHlIb25v
cnNQZXJjZW50YWdlcyB7IGZhbHNlIH07CiAgICAgU3RyaW5nIG1fY3VzdG9tTmF2aWdhdG9yUGxh
dGZvcm07CiAgICAgYm9vbCBtX3VzZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQgeyB0cnVlIH07
CisgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8VXNlckNvbnRlbnRVUkxQYXR0ZXJuPj4gbV9hY3Rp
dmVDb250ZW50UnVsZUxpc3RBY3Rpb25QYXR0ZXJuczsKICNpZiBFTkFCTEUoREVWSUNFX09SSUVO
VEFUSU9OKQogICAgIERldmljZU9yaWVudGF0aW9uT3JNb3Rpb25QZXJtaXNzaW9uU3RhdGUgbV9k
ZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc1N0YXRlIHsgRGV2aWNlT3JpZW50YXRpb25P
ck1vdGlvblBlcm1pc3Npb25TdGF0ZTo6UHJvbXB0IH07CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNl
LmNwcAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAxLDYgKzYwMSwx
NSBAQCB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OnNldEhUVFBIZWFkZXJGCiAgICAgbV9wbGF0
Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7CiB9CiAKK3ZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFz
ZTo6cmVtb3ZlSFRUUEhlYWRlckZpZWxkKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICB1cGRh
dGVSZXNvdXJjZVJlcXVlc3QoKTsKKworICAgIG1faHR0cEhlYWRlckZpZWxkcy5yZW1vdmUobmFt
ZSk7CisKKyAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKK30KKwogI2lmIFVT
RShTWVNURU1fUFJFVklFVykKIAogYm9vbCBSZXNvdXJjZVJlcXVlc3RCYXNlOjppc1N5c3RlbVBy
ZXZpZXcoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZVJlcXVlc3RCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgJKHJldmlzaW9uIDI4NTk1NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDUsNiArMTA1LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgYWRkSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVl
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZEhUVFBIZWFkZXJGaWVsZChjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
YWRkSFRUUEhlYWRlckZpZWxkSWZOb3RQcmVzZW50KEhUVFBIZWFkZXJOYW1lLCBjb25zdCBTdHJp
bmcmKTsKKyAgICB2b2lkIHJlbW92ZUhUVFBIZWFkZXJGaWVsZChjb25zdCBTdHJpbmcmIG5hbWUp
OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRl
ck5hbWUpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0NCBAQAorMjAyMS0x
MS0xNyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAg
ICAgIEltcGxlbWVudCBtb3N0IG9mIHJlZGlyZWN0IGFuZCBtb2RpZnktaGVhZGVycyBhY3Rpb24g
dHlwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIz
MzI2OAorCisgICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgorCisgICAgICAgICogU2hh
cmVkL1dlYnNpdGVQb2xpY2llc0RhdGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlUG9s
aWNpZXNEYXRhOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlUG9saWNp
ZXNEYXRhOjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlUG9saWNpZXNEYXRhOjph
cHBseVRvRG9jdW1lbnRMb2FkZXIpOgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlUG9saWNpZXNE
YXRhLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5j
cHA6CisgICAgICAgIChBUEk6OkNvbnRlbnRSdWxlTGlzdFN0b3JlOjpsb29rdXBDb250ZW50UnVs
ZUxpc3QpOgorICAgICAgICAoQVBJOjpDb250ZW50UnVsZUxpc3RTdG9yZTo6Y29tcGlsZUNvbnRl
bnRSdWxlTGlzdCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RT
dG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJV2Vic2l0ZVBvbGljaWVzLmNwcDoK
KyAgICAgICAgKEFQSTo6V2Vic2l0ZVBvbGljaWVzOjpjb3B5IGNvbnN0KToKKyAgICAgICAgKEFQ
STo6V2Vic2l0ZVBvbGljaWVzOjpkYXRhKToKKyAgICAgICAgKEFQSTo6V2Vic2l0ZVBvbGljaWVz
Ojp+V2Vic2l0ZVBvbGljaWVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQ
SVdlYnNpdGVQb2xpY2llcy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmVSZWYuY3BwOgorICAgICAgICAoV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlQ29tcGlsZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRS
dWxlTGlzdFN0b3JlLm1tOgorICAgICAgICAoLVtXS0NvbnRlbnRSdWxlTGlzdFN0b3JlIGNvbXBp
bGVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOmVuY29kZWRDb250ZW50UnVsZUxpc3Q6Y29t
cGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLQ29udGVudFJ1bGVMaXN0U3RvcmUgX2Nv
bXBpbGVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOmVuY29kZWRDb250ZW50UnVsZUxpc3Q6
YWxsb3dlZFJlZGlyZWN0U2NoZW1lczpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1b
V0tDb250ZW50UnVsZUxpc3RTdG9yZSBfY29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZp
ZXI6ZW5jb2RlZENvbnRlbnRSdWxlTGlzdDpjb21wbGV0aW9uSGFuZGxlcjpdKTogRGVsZXRlZC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudFJ1bGVMaXN0U3RvcmVQcml2
YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnBhZ2VQcmVmZXJlbmNl
cy5tbToKKyAgICAgICAgKC1bV0tXZWJwYWdlUHJlZmVyZW5jZXMgX3NldEFjdGl2ZUNvbnRlbnRS
dWxlTGlzdEFjdGlvbnNQYXR0ZXJuczpdKToKKyAgICAgICAgKC1bV0tXZWJwYWdlUHJlZmVyZW5j
ZXMgX2FjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvbnNQYXR0ZXJuc10pOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJwYWdlUHJlZmVyZW5jZXNQcml2YXRlLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tOgor
ICAgICAgICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGNvbXBpbGVDb250ZW50RXh0
ZW5zaW9uRm9ySWRlbnRpZmllcjplbmNvZGVkQ29udGVudEV4dGVuc2lvbjpjb21wbGV0aW9uSGFu
ZGxlcjpdKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsvV2ViTG9hZGVyU3RyYXRlZ3ku
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJMb2FkZXJTdHJhdGVneTo6cmVtb3ZlKToKKyAgICAg
ICAgRml4IGEgcmVncmVzc2lvbiBmcm9tIGh0dHBzOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNl
dC8yNzYxOTMvd2Via2l0CisgICAgICAgIFdoZW4gZmV0Y2hpbmcgYSByZXNvdXJjZSB3aXRoIGEg
Zm9yYmlkZGVuIHBvcnQgYW5kIGEgY3VzdG9tIHNjaGVtZSBhbmQge21vZGU6Im5vLWNvcnMifSwK
KyAgICAgICAgV2ViTG9hZGVyU3RyYXRlZ3k6OnJlbW92ZSBpcyBjYWxsZWQgd2l0aCBhIHJlc291
cmNlIHRoYXQgZG9lc24ndCBoYXZlIGFuIGlkZW50aWZpZXIuCisgICAgICAgIE15IHRlc3QgaGl0
IHRoaXMsIHNvIEkgbW92ZWQgdGhlIGNoZWNrIHRvIGJlZm9yZSB0aGUgaWRlbnRpZmllciBpcyB1
c2VkLgorCiAyMDIxLTExLTE3ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29t
PgogCiAgICAgICAgIE1vbWVudHVtIGFuaW1hdG9yIHNvbWV0aW1lcyBzdGFydHMgdGhlIGFuaW1h
dGlvbiBhdCBhIHZlcnkgaGlnaCB2ZWxvY2l0eQpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQv
V2Vic2l0ZVBvbGljaWVzRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFy
ZWQvV2Vic2l0ZVBvbGljaWVzRGF0YS5jcHAJKHJldmlzaW9uIDI4NTk1NCkKKysrIFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL1dlYnNpdGVQb2xpY2llc0RhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw2ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogdm9pZCBXZWJzaXRlUG9saWNpZXNEYXRh
OjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwg
Y29udGVudEJsb2NrZXJzRW5hYmxlZDsKKyAgICBlbmNvZGVyIDw8IGFjdGl2ZUNvbnRlbnRSdWxl
TGlzdEFjdGlvblBhdHRlcm5zOwogICAgIGVuY29kZXIgPDwgYXV0b3BsYXlQb2xpY3k7CiAjaWYg
RU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKICAgICBlbmNvZGVyIDw8IGRldmljZU9yaWVudGF0
aW9uQW5kTW90aW9uQWNjZXNzU3RhdGU7CkBAIC02Miw3ICs2MywxMiBAQCBzdGQ6Om9wdGlvbmFs
PFdlYnNpdGVQb2xpY2llc0RhdGE+IFdlYnNpCiAgICAgZGVjb2RlciA+PiBjb250ZW50QmxvY2tl
cnNFbmFibGVkOwogICAgIGlmICghY29udGVudEJsb2NrZXJzRW5hYmxlZCkKICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAKKworICAgIHN0ZDo6b3B0aW9uYWw8c3RkOjpvcHRpb25h
bDxIYXNoU2V0PFN0cmluZz4+PiBhY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25QYXR0ZXJuczsK
KyAgICBkZWNvZGVyID4+IGFjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvblBhdHRlcm5zOworICAg
IGlmICghYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uUGF0dGVybnMpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisKICAgICBzdGQ6Om9wdGlvbmFsPFdlYnNpdGVBdXRvcGxheVBvbGlj
eT4gYXV0b3BsYXlQb2xpY3k7CiAgICAgZGVjb2RlciA+PiBhdXRvcGxheVBvbGljeTsKICAgICBp
ZiAoIWF1dG9wbGF5UG9saWN5KQpAQCAtMTQ3LDYgKzE1Myw3IEBAIHN0ZDo6b3B0aW9uYWw8V2Vi
c2l0ZVBvbGljaWVzRGF0YT4gV2Vic2kKIAogICAgIHJldHVybiB7IHsKICAgICAgICAgV1RGTW92
ZSgqY29udGVudEJsb2NrZXJzRW5hYmxlZCksCisgICAgICAgIFdURk1vdmUoKmFjdGl2ZUNvbnRl
bnRSdWxlTGlzdEFjdGlvblBhdHRlcm5zKSwKICAgICAgICAgV1RGTW92ZSgqYWxsb3dlZEF1dG9w
bGF5UXVpcmtzKSwKICAgICAgICAgV1RGTW92ZSgqYXV0b3BsYXlQb2xpY3kpLAogI2lmIEVOQUJM
RShERVZJQ0VfT1JJRU5UQVRJT04pCkBAIC0xODMsNiArMTkwLDggQEAgdm9pZCBXZWJzaXRlUG9s
aWNpZXNEYXRhOjphcHBseVRvRG9jdW1lbgogICAgIGlmIChkb2N1bWVudExvYWRlci51c2VyQ29u
dGVudEV4dGVuc2lvbnNFbmFibGVkKCkpCiAgICAgICAgIGRvY3VtZW50TG9hZGVyLnNldFVzZXJD
b250ZW50RXh0ZW5zaW9uc0VuYWJsZWQod2Vic2l0ZVBvbGljaWVzLmNvbnRlbnRCbG9ja2Vyc0Vu
YWJsZWQpOwogCisgICAgZG9jdW1lbnRMb2FkZXIuc2V0QWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0
aW9uUGF0dGVybnMod2Vic2l0ZVBvbGljaWVzLmFjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvblBh
dHRlcm5zKTsKKwogICAgIE9wdGlvblNldDxXZWJDb3JlOjpBdXRvcGxheVF1aXJrPiBxdWlya3M7
CiAgICAgY29uc3QgYXV0byYgYWxsb3dlZFF1aXJrcyA9IHdlYnNpdGVQb2xpY2llcy5hbGxvd2Vk
QXV0b3BsYXlRdWlya3M7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRl
UG9saWNpZXNEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0
ZVBvbGljaWVzRGF0YS5oCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJl
ZC9XZWJzaXRlUG9saWNpZXNEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDcgQEAg
c3RydWN0IFdlYnNpdGVQb2xpY2llc0RhdGEgewogICAgIHN0YXRpYyB2b2lkIGFwcGx5VG9Eb2N1
bWVudExvYWRlcihXZWJzaXRlUG9saWNpZXNEYXRhJiYsIFdlYkNvcmU6OkRvY3VtZW50TG9hZGVy
Jik7CiAKICAgICBib29sIGNvbnRlbnRCbG9ja2Vyc0VuYWJsZWQgeyB0cnVlIH07CisgICAgc3Rk
OjpvcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+IGFjdGl2ZUNvbnRlbnRSdWxlTGlzdEFjdGlvblBh
dHRlcm5zIHsgSGFzaFNldDxTdHJpbmc+KCkgfTsKICAgICBPcHRpb25TZXQ8V2Vic2l0ZUF1dG9w
bGF5UXVpcms+IGFsbG93ZWRBdXRvcGxheVF1aXJrczsKICAgICBXZWJzaXRlQXV0b3BsYXlQb2xp
Y3kgYXV0b3BsYXlQb2xpY3kgeyBXZWJzaXRlQXV0b3BsYXlQb2xpY3k6OkRlZmF1bHQgfTsKICNp
ZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjgwLDEwICs1Njgw
LDEyIEBAIHZvaWQgV2ViUGFnZVByb3h5Ojp3aWxsU3VibWl0Rm9ybShGcmFtZUkKICAgICB9KTsK
IH0KIAorI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiB2b2lkIFdlYlBhZ2VQcm94eTo6
Y29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uKFVSTCYmIHVybCwgQ29udGVudFJ1bGVMaXN0UmVz
dWx0cyYmIHJlc3VsdHMpCiB7CiAgICAgbV9uYXZpZ2F0aW9uQ2xpZW50LT5jb250ZW50UnVsZUxp
c3ROb3RpZmljYXRpb24oKnRoaXMsIFdURk1vdmUodXJsKSwgV1RGTW92ZShyZXN1bHRzKSk7CiB9
CisjZW5kaWYKICAgICAKIHZvaWQgV2ViUGFnZVByb3h5OjpkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0
aW9uRGF0YShjb25zdCBXZWJOYXZpZ2F0aW9uRGF0YVN0b3JlJiBzdG9yZSwgRnJhbWVJZGVudGlm
aWVyIGZyYW1lSUQpCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxMDgsNyArMjEwOCw5IEBAIHByaXZhdGU6CiAKICAg
ICB2b2lkIHdpbGxTdWJtaXRGb3JtKFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciwgV2ViQ29yZTo6
RnJhbWVJZGVudGlmaWVyIHNvdXJjZUZyYW1lSUQsIGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8U3Ry
aW5nLCBTdHJpbmc+PiYgdGV4dEZpZWxkVmFsdWVzLCBGb3JtU3VibWl0TGlzdGVuZXJJZGVudGlm
aWVyLCBjb25zdCBVc2VyRGF0YSYpOwogCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykK
ICAgICB2b2lkIGNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbihVUkwmJiwgV2ViQ29yZTo6Q29u
dGVudFJ1bGVMaXN0UmVzdWx0cyYmKTsKKyNlbmRpZgogCiAgICAgLy8gSGlzdG9yeSBjbGllbnQK
ICAgICB2b2lkIGRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKGNvbnN0IFdlYk5hdmlnYXRp
b25EYXRhU3RvcmUmLCBXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIpOwpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24g
Mjg1OTU0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2Vz
LmluCSh3b3JraW5nIGNvcHkpCkBAIC00NjQsNyArNDY0LDkgQEAgbWVzc2FnZXMgLT4gV2ViUGFn
ZVByb3h5IHsKIAogICAgIERpZFJlc2lnbklucHV0RWxlbWVudFN0cm9uZ1Bhc3N3b3JkQXBwZWFy
YW5jZShXZWJLaXQ6OlVzZXJEYXRhIHVzZXJEYXRhKQogCisjaWYgRU5BQkxFKENPTlRFTlRfRVhU
RU5TSU9OUykKICAgICBDb250ZW50UnVsZUxpc3ROb3RpZmljYXRpb24oVVJMIHVybCwgc3RydWN0
IFdlYkNvcmU6OkNvbnRlbnRSdWxlTGlzdFJlc3VsdHMgcmVzdWx0cykKKyNlbmRpZgogCiAjaWYg
RU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBMQVRGT1JNKElPU19GQU1JTFkp
CiAgICAgQWRkUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQoV2ViQ29yZTo6UGxheWJhY2tUYXJn
ZXRDbGllbnRDb250ZXh0SWRlbnRpZmllciBjb250ZXh0SWQpCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0QWN0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0QWN0aW9uLmNw
cAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNv
bnRlbnRSdWxlTGlzdEFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDggQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBUElDb250ZW50UnVsZUxpc3RBY3Rpb24u
aCIKIAorI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisKIG5hbWVzcGFjZSBBUEkgewog
CiBSZWY8Q29udGVudFJ1bGVMaXN0QWN0aW9uPiBDb250ZW50UnVsZUxpc3RBY3Rpb246OmNyZWF0
ZShXZWJDb3JlOjpDb250ZW50UnVsZUxpc3RSZXN1bHRzOjpSZXN1bHQmJiByZXN1bHQpCkBAIC02
MSwzICs2Myw1IEBAIGNvbnN0IFZlY3RvcjxXVEY6OlN0cmluZz4mIENvbnRlbnRSdWxlTGkKIH0K
IAogfSAvLyBuYW1lc3BhY2UgQVBJCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJ
T05TKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlz
dEFjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElD
b250ZW50UnVsZUxpc3RBY3Rpb24uaAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdEFjdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw2ICszMyw3IEBAIG5hbWVzcGFjZSBBUEkgewogCiBjbGFzcyBDb250ZW50UnVsZUxp
c3RBY3Rpb24gZmluYWwgOiBwdWJsaWMgT2JqZWN0SW1wbDxPYmplY3Q6OlR5cGU6OkNvbnRlbnRS
dWxlTGlzdEFjdGlvbj4gewogcHVibGljOgorI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMp
CiAgICAgc3RhdGljIFJlZjxDb250ZW50UnVsZUxpc3RBY3Rpb24+IGNyZWF0ZShXZWJDb3JlOjpD
b250ZW50UnVsZUxpc3RSZXN1bHRzOjpSZXN1bHQmJik7CiAgICAgdmlydHVhbCB+Q29udGVudFJ1
bGVMaXN0QWN0aW9uKCk7CiAKQEAgLTQ1LDYgKzQ2LDcgQEAgcHJpdmF0ZToKICAgICBDb250ZW50
UnVsZUxpc3RBY3Rpb24oV2ViQ29yZTo6Q29udGVudFJ1bGVMaXN0UmVzdWx0czo6UmVzdWx0JiYp
OwogCiAgICAgV2ViQ29yZTo6Q29udGVudFJ1bGVMaXN0UmVzdWx0czo6UmVzdWx0IG1fcmVzdWx0
OworI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiB9OwogICAgIAogfSAvLyBu
YW1lc3BhY2UgQVBJCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVu
dFJ1bGVMaXN0U3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAJKHJldmlzaW9uIDI4NTk1NCkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ5MSw3ICs0OTEsNyBAQCB2b2lkIENvbnRlbnRSdWxlTGlzdFN0b3Jl
Ojpsb29rdXBDb250ZW50CiAgICAgICAgIGlmIChjb250ZW50UnVsZUxpc3QtPm1ldGFEYXRhLnZl
cnNpb24gIT0gQ29udGVudFJ1bGVMaXN0U3RvcmU6OkN1cnJlbnRDb250ZW50UnVsZUxpc3RGaWxl
VmVyc2lvbikgewogICAgICAgICAgICAgaWYgKGF1dG8gc291cmNlRnJvbU9sZFZlcnNpb24gPSBn
ZXRDb250ZW50UnVsZUxpc3RTb3VyY2VGcm9tTWFwcGVkRmlsZSgqY29udGVudFJ1bGVMaXN0KTsg
IXNvdXJjZUZyb21PbGRWZXJzaW9uLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIFJ1bkxv
b3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhp
cyksIHNvdXJjZUZyb21PbGRWZXJzaW9uID0gc291cmNlRnJvbU9sZFZlcnNpb24uaXNvbGF0ZWRD
b3B5KCksIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyLmlzb2xhdGVkQ29weSgpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAg
ICAgICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+Y29tcGlsZUNvbnRlbnRSdWxlTGlzdChpZGVu
dGlmaWVyLCBXVEZNb3ZlKHNvdXJjZUZyb21PbGRWZXJzaW9uKSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOworICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5jb21waWxlQ29u
dGVudFJ1bGVMaXN0KGlkZW50aWZpZXIsIFdURk1vdmUoc291cmNlRnJvbU9sZFZlcnNpb24pLCBz
dGQ6Om51bGxvcHQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC01MzAsMTMg
KzUzMCwxMyBAQCB2b2lkIENvbnRlbnRSdWxlTGlzdFN0b3JlOjpnZXRBdmFpbGFibGVDCiAgICAg
fSk7CiB9CiAKLXZvaWQgQ29udGVudFJ1bGVMaXN0U3RvcmU6OmNvbXBpbGVDb250ZW50UnVsZUxp
c3QoY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIFdURjo6U3RyaW5nJiYganNvbiwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChSZWZQdHI8QVBJOjpDb250ZW50UnVsZUxpc3Q+LCBzdGQ6OmVy
cm9yX2NvZGUpPiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgQ29udGVudFJ1bGVMaXN0U3RvcmU6
OmNvbXBpbGVDb250ZW50UnVsZUxpc3QoY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIFdU
Rjo6U3RyaW5nJiYganNvbiwgc3RkOjpvcHRpb25hbDxIYXNoU2V0PFdURjo6U3RyaW5nPj4mJiBh
bGxvd2VkUmVkaXJlY3RTY2hlbWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxBUEk6
OkNvbnRlbnRSdWxlTGlzdD4sIHN0ZDo6ZXJyb3JfY29kZSk+IGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgQXRvbVN0cmluZzo6aW5pdCgp
OwogICAgIFdlYkNvcmU6OlF1YWxpZmllZE5hbWU6OmluaXQoKTsKICAgICAKLSAgICBhdXRvIHBh
cnNlZFJ1bGVzID0gV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OnBhcnNlUnVsZUxpc3QoanNv
biwgeyB9KTsKKyAgICBhdXRvIHBhcnNlZFJ1bGVzID0gV2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6OnBhcnNlUnVsZUxpc3QoanNvbiwgV1RGTW92ZShhbGxvd2VkUmVkaXJlY3RTY2hlbWVzKSk7
CiAgICAgaWYgKCFwYXJzZWRSdWxlcy5oYXNfdmFsdWUoKSkKICAgICAgICAgcmV0dXJuIGNvbXBs
ZXRpb25IYW5kbGVyKG51bGxwdHIsIHBhcnNlZFJ1bGVzLmVycm9yKCkpOwogICAgIApJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlz
dFN0b3JlLmgJKHJldmlzaW9uIDI4NTk1NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSw2
IEBACiAKICNwcmFnbWEgb25jZQogCi0jaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLQog
I2luY2x1ZGUgIkFQSU9iamVjdC5oIgogI2luY2x1ZGUgPHN5c3RlbV9lcnJvcj4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTUyLDcgKzUwLDggQEAgcHVibGljOgogICAgICAg
ICBDb21waWxlRmFpbGVkLAogICAgICAgICBSZW1vdmVGYWlsZWQKICAgICB9OwotICAgIAorCisj
aWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAgICAvLyBUaGlzIHNob3VsZCBiZSBpbmNy
ZW1lbnRlZCBldmVyeSB0aW1lIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaXMgbWFkZSB0byB0aGUgYnl0
ZWNvZGUsIGZpbGUgZm9ybWF0LCBldGMuCiAgICAgLy8gdG8gcHJldmVudCBjcmFzaGluZyB3aGls
ZSBsb2FkaW5nIG9sZCBkYXRhLgogICAgIC8vIEFsc28gdXBkYXRlIENvbnRlbnRSdWxlTGlzdFN0
b3JlOjpnZXRDb250ZW50UnVsZUxpc3RTb3VyY2UgdG8gYmUgYWJsZSB0byBmaW5kIHRoZSBvcmln
aW5hbCBKU09OCkBAIC02Nyw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBDb250ZW50
UnVsZUxpc3RTdG9yZShjb25zdCBXVEY6OlN0cmluZyYgc3RvcmVQYXRoKTsKICAgICB2aXJ0dWFs
IH5Db250ZW50UnVsZUxpc3RTdG9yZSgpOwogCi0gICAgdm9pZCBjb21waWxlQ29udGVudFJ1bGVM
aXN0KGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBXVEY6OlN0cmluZyYmIGpzb24sIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmUHRyPEFQSTo6Q29udGVudFJ1bGVMaXN0Piwgc3RkOjpl
cnJvcl9jb2RlKT4pOworICAgIHZvaWQgY29tcGlsZUNvbnRlbnRSdWxlTGlzdChjb25zdCBXVEY6
OlN0cmluZyYgaWRlbnRpZmllciwgV1RGOjpTdHJpbmcmJiBqc29uLCBzdGQ6Om9wdGlvbmFsPEhh
c2hTZXQ8V1RGOjpTdHJpbmc+PiYmIGFsbG93ZWRSZWRpcmVjdFNjaGVtZXMsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoUmVmUHRyPEFQSTo6Q29udGVudFJ1bGVMaXN0Piwgc3RkOjplcnJvcl9jb2Rl
KT4pOwogICAgIHZvaWQgbG9va3VwQ29udGVudFJ1bGVMaXN0KGNvbnN0IFdURjo6U3RyaW5nJiBp
ZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxBUEk6OkNvbnRlbnRSdWxl
TGlzdD4sIHN0ZDo6ZXJyb3JfY29kZSk+KTsKICAgICB2b2lkIHJlbW92ZUNvbnRlbnRSdWxlTGlz
dChjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChz
dGQ6OmVycm9yX2NvZGUpPik7CiAgICAgdm9pZCBnZXRBdmFpbGFibGVDb250ZW50UnVsZUxpc3RJ
ZGVudGlmaWVycyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdURjo6VmVjdG9yPFdURjo6U3RyaW5n
Pik+KTsKQEAgLTg0LDYgKzgzLDcgQEAgcHJpdmF0ZToKICAgICBSZWY8V1RGOjpDb25jdXJyZW50
V29ya1F1ZXVlPiBtX2NvbXBpbGVRdWV1ZTsKICAgICBSZWY8V1RGOjpXb3JrUXVldWU+IG1fcmVh
ZFF1ZXVlOwogICAgIFJlZjxXVEY6OldvcmtRdWV1ZT4gbV9yZW1vdmVRdWV1ZTsKKyNlbmRpZiAv
LyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogfTsKIAogY29uc3Qgc3RkOjplcnJvcl9jYXRl
Z29yeSYgY29udGVudFJ1bGVMaXN0U3RvcmVFcnJvckNhdGVnb3J5KCk7CkBAIC05OCw1ICs5OCwz
IEBAIGlubGluZSBzdGQ6OmVycm9yX2NvZGUgbWFrZV9lcnJvcl9jb2RlKEMKIG5hbWVzcGFjZSBz
dGQgewogdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfZXJyb3JfY29kZV9lbnVtPEFQSTo6Q29udGVudFJ1
bGVMaXN0U3RvcmU6OkVycm9yPiA6IHB1YmxpYyB0cnVlX3R5cGUgeyB9OwogfQotCi0jZW5kaWYg
Ly8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9BUElXZWJzaXRlUG9saWNpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9BUElXZWJzaXRlUG9saWNpZXMuY3BwCShyZXZpc2lvbiAyODU5NTQp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2Vic2l0ZVBvbGljaWVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBSZWY8V2Vic2l0ZVBvbGljaWVzPiBXZWJz
aXRlUG9saWNpZXM6OmNvCiB7CiAgICAgYXV0byBwb2xpY2llcyA9IFdlYnNpdGVQb2xpY2llczo6
Y3JlYXRlKCk7CiAgICAgcG9saWNpZXMtPnNldENvbnRlbnRCbG9ja2Vyc0VuYWJsZWQobV9jb250
ZW50QmxvY2tlcnNFbmFibGVkKTsKKyAgICBwb2xpY2llcy0+bV9hY3RpdmVDb250ZW50UnVsZUxp
c3RBY3Rpb25QYXR0ZXJucyA9IG1fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uUGF0dGVybnM7
CiAgICAgcG9saWNpZXMtPnNldEFsbG93ZWRBdXRvcGxheVF1aXJrcyhtX2FsbG93ZWRBdXRvcGxh
eVF1aXJrcyk7CiAgICAgcG9saWNpZXMtPnNldEF1dG9wbGF5UG9saWN5KG1fYXV0b3BsYXlQb2xp
Y3kpOwogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCkBAIC03OCw5ICs3OSw3IEBAIFJl
ZjxXZWJzaXRlUG9saWNpZXM+IFdlYnNpdGVQb2xpY2llczo6Y28KICAgICByZXR1cm4gcG9saWNp
ZXM7CiB9CiAKLVdlYnNpdGVQb2xpY2llczo6fldlYnNpdGVQb2xpY2llcygpCi17Ci19CitXZWJz
aXRlUG9saWNpZXM6On5XZWJzaXRlUG9saWNpZXMoKSA9IGRlZmF1bHQ7CiAKIHZvaWQgV2Vic2l0
ZVBvbGljaWVzOjpzZXRXZWJzaXRlRGF0YVN0b3JlKFJlZlB0cjxXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU+JiYgd2Vic2l0ZURhdGFTdG9yZSkKIHsKQEAgLTEwNCw2ICsxMDMsNyBAQCBXZWJLaXQ6
OldlYnNpdGVQb2xpY2llc0RhdGEgV2Vic2l0ZVBvbGljCiAKICAgICByZXR1cm4gewogICAgICAg
ICBjb250ZW50QmxvY2tlcnNFbmFibGVkKCksCisgICAgICAgIGFjdGl2ZUNvbnRlbnRSdWxlTGlz
dEFjdGlvblBhdHRlcm5zKCksCiAgICAgICAgIGFsbG93ZWRBdXRvcGxheVF1aXJrcygpLAogICAg
ICAgICBhdXRvcGxheVBvbGljeSgpLAogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2Vic2l0ZVBvbGljaWVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVQb2xpY2ll
cy5oCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJ
V2Vic2l0ZVBvbGljaWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDkgQEAgcHVibGlj
OgogICAgIGJvb2wgY29udGVudEJsb2NrZXJzRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
dGVudEJsb2NrZXJzRW5hYmxlZDsgfQogICAgIHZvaWQgc2V0Q29udGVudEJsb2NrZXJzRW5hYmxl
ZChib29sIGVuYWJsZWQpIHsgbV9jb250ZW50QmxvY2tlcnNFbmFibGVkID0gZW5hYmxlZDsgfQog
ICAgIAorICAgIHZvaWQgc2V0QWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uUGF0dGVybnMoc3Rk
OjpvcHRpb25hbDxIYXNoU2V0PFdURjo6U3RyaW5nPj4mJiBwYXR0ZXJucykgeyBtX2FjdGl2ZUNv
bnRlbnRSdWxlTGlzdEFjdGlvblBhdHRlcm5zID0gV1RGTW92ZShwYXR0ZXJucyk7IH0KKyAgICBj
b25zdCBzdGQ6Om9wdGlvbmFsPEhhc2hTZXQ8V1RGOjpTdHJpbmc+PiYgYWN0aXZlQ29udGVudFJ1
bGVMaXN0QWN0aW9uUGF0dGVybnMoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZUNvbnRlbnRSdWxl
TGlzdEFjdGlvblBhdHRlcm5zOyB9CisgICAgCiAgICAgT3B0aW9uU2V0PFdlYktpdDo6V2Vic2l0
ZUF1dG9wbGF5UXVpcms+IGFsbG93ZWRBdXRvcGxheVF1aXJrcygpIGNvbnN0IHsgcmV0dXJuIG1f
YWxsb3dlZEF1dG9wbGF5UXVpcmtzOyB9CiAgICAgdm9pZCBzZXRBbGxvd2VkQXV0b3BsYXlRdWly
a3MoT3B0aW9uU2V0PFdlYktpdDo6V2Vic2l0ZUF1dG9wbGF5UXVpcms+IHF1aXJrcykgeyBtX2Fs
bG93ZWRBdXRvcGxheVF1aXJrcyA9IHF1aXJrczsgfQogICAgIApAQCAtMTM1LDcgKzEzOCw5IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldElkZW1wb3RlbnRNb2RlQXV0b3NpemluZ09ubHlIb25vcnNQ
ZXJjZW50YWdlcyhib29sIGlkZW1wb3RlbnRNb2RlQXV0b3NpemluZ09ubHlIb25vcnNQZXJjZW50
YWdlcykgeyBtX2lkZW1wb3RlbnRNb2RlQXV0b3NpemluZ09ubHlIb25vcnNQZXJjZW50YWdlcyA9
IGlkZW1wb3RlbnRNb2RlQXV0b3NpemluZ09ubHlIb25vcnNQZXJjZW50YWdlczsgfQogCiBwcml2
YXRlOgorICAgIC8vIEZJWE1FOiByZXBsYWNlIG1vc3Qgb3IgYWxsIG9mIHRoZXNlIG1lbWJlcnMg
d2l0aCBhIFdlYnNpdGVQb2xpY2llc0RhdGEuCiAgICAgYm9vbCBtX2NvbnRlbnRCbG9ja2Vyc0Vu
YWJsZWQgeyB0cnVlIH07CisgICAgc3RkOjpvcHRpb25hbDxIYXNoU2V0PFdURjo6U3RyaW5nPj4g
bV9hY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25QYXR0ZXJucyB7IEhhc2hTZXQ8V1RGOjpTdHJp
bmc+KCkgfTsKICAgICBPcHRpb25TZXQ8V2ViS2l0OjpXZWJzaXRlQXV0b3BsYXlRdWlyaz4gbV9h
bGxvd2VkQXV0b3BsYXlRdWlya3M7CiAgICAgV2ViS2l0OjpXZWJzaXRlQXV0b3BsYXlQb2xpY3kg
bV9hdXRvcGxheVBvbGljeSB7IFdlYktpdDo6V2Vic2l0ZUF1dG9wbGF5UG9saWN5OjpEZWZhdWx0
IH07CiAjaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM3Miw2
ICsyMzcyLDcgQEAgdm9pZCBXS1BhZ2VTZXRQYWdlTmF2aWdhdGlvbkNsaWVudChXS1BhZwogICAg
ICAgICAgICAgbV9jbGllbnQuZGlkUmVtb3ZlTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdCh0b0FQ
SSgmcGFnZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgICAgIH0KICAgICAgICAg
CisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAgICAgICAgdm9pZCBjb250ZW50UnVs
ZUxpc3ROb3RpZmljYXRpb24oV2ViUGFnZVByb3h5JiBwYWdlLCBVUkwmJiB1cmwsIENvbnRlbnRS
dWxlTGlzdFJlc3VsdHMmJiByZXN1bHRzKSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAgICBp
ZiAoIW1fY2xpZW50LmNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbikKQEAgLTIzOTEsNiArMjM5
Miw3IEBAIHZvaWQgV0tQYWdlU2V0UGFnZU5hdmlnYXRpb25DbGllbnQoV0tQYWcKICAgICAgICAg
ICAgIGlmICghYXBpTm90aWZpY2F0aW9ucy5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgbV9j
bGllbnQuY29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uKHRvQVBJKCZwYWdlKSwgdG9VUkxSZWYo
dXJsLnN0cmluZygpLmltcGwoKSksIHRvQVBJKEFQSTo6QXJyYXk6OmNyZWF0ZShXVEZNb3ZlKGFw
aUxpc3RJZGVudGlmaWVycykpLnB0cigpKSwgdG9BUEkoQVBJOjpBcnJheTo6Y3JlYXRlKFdURk1v
dmUoYXBpTm90aWZpY2F0aW9ucykpLnB0cigpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsK
ICAgICAgICAgfQorI2VuZGlmCiAgICAgfTsKIAogICAgIFdlYlBhZ2VQcm94eSogd2ViUGFnZVBy
b3h5ID0gdG9JbXBsKHBhZ2VSZWYpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUmVmLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVSZWYu
Y3BwCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3
ICs3Niw3IEBAIHN0YXRpYyBpbmxpbmUgV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3IKIHZvaWQg
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlQ29tcGlsZShXS1VzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmVSZWYgc3RvcmUsIFdLU3RyaW5nUmVmIGlkZW50aWZpZXIsIFdLU3RyaW5nUmVmIGpzb25T
b3VyY2UsIHZvaWQqIGNvbnRleHQsIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUZ1bmN0aW9u
IGNhbGxiYWNrKQogewogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAgdG9JbXBs
KHN0b3JlKS0+Y29tcGlsZUNvbnRlbnRSdWxlTGlzdCh0b1dURlN0cmluZyhpZGVudGlmaWVyKSwg
dG9XVEZTdHJpbmcoanNvblNvdXJjZSksIFtjb250ZXh0LCBjYWxsYmFja10oUmVmUHRyPEFQSTo6
Q29udGVudFJ1bGVMaXN0PiBjb250ZW50UnVsZUxpc3QsIHN0ZDo6ZXJyb3JfY29kZSBlcnJvcikg
eworICAgIHRvSW1wbChzdG9yZSktPmNvbXBpbGVDb250ZW50UnVsZUxpc3QodG9XVEZTdHJpbmco
aWRlbnRpZmllciksIHRvV1RGU3RyaW5nKGpzb25Tb3VyY2UpLCB7IEhhc2hTZXQ8U3RyaW5nPigp
IH0sIFtjb250ZXh0LCBjYWxsYmFja10oUmVmUHRyPEFQSTo6Q29udGVudFJ1bGVMaXN0PiBjb250
ZW50UnVsZUxpc3QsIHN0ZDo6ZXJyb3JfY29kZSBlcnJvcikgewogICAgICAgICBjYWxsYmFjayhl
cnJvciA/IG51bGxwdHIgOiB0b0FQSShjb250ZW50UnVsZUxpc3QubGVha1JlZigpKSwgdG9SZXN1
bHQoZXJyb3IpLCBjb250ZXh0KTsKICAgICB9KTsKICNlbHNlCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3QubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudFJ1bGVMaXN0Lm1tCShy
ZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tD
b250ZW50UnVsZUxpc3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDExIEBAIC0gKEFQ
STo6T2JqZWN0JilfYXBpT2JqZWN0CiAKIC0gKE5TU3RyaW5nICopaWRlbnRpZmllcgogeworI2lm
IEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgcmV0dXJuIF9jb250ZW50UnVsZUxpc3Qt
Pm5hbWUoKTsKKyNlbHNlCisgICAgcmV0dXJuIG5pbDsKKyNlbmRpZgogfQogCiBAZW5kCkBAIC01
OSw3ICs2MywxMSBAQCAtIChOU1N0cmluZyAqKWlkZW50aWZpZXIKIAogKyAoQk9PTClfc3VwcG9y
dHNSZWd1bGFyRXhwcmVzc2lvbjooTlNTdHJpbmcgKilyZWdleAogeworI2lmIEVOQUJMRShDT05U
RU5UX0VYVEVOU0lPTlMpCiAgICAgcmV0dXJuIEFQSTo6Q29udGVudFJ1bGVMaXN0OjpzdXBwb3J0
c1JlZ3VsYXJFeHByZXNzaW9uKHJlZ2V4KTsKKyNlbHNlCisgICAgcmV0dXJuIE5POworI2VuZGlm
CiB9CiAKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Nv
bnRlbnRSdWxlTGlzdFN0b3JlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlLm1tCShyZXZpc2lvbiAyODU5NTQp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3RT
dG9yZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2ltcG9ydCA8d3RmL0Nv
bXBsZXRpb25IYW5kbGVyLmg+CiAjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KIAor
I2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiBzdGF0aWMgV0tFcnJvckNvZGUgdG9XS0Vy
cm9yQ29kZShjb25zdCBzdGQ6OmVycm9yX2NvZGUmIGVycm9yKQogewogICAgIEFTU0VSVChlcnJv
ci5jYXRlZ29yeSgpID09IEFQSTo6Y29udGVudFJ1bGVMaXN0U3RvcmVFcnJvckNhdGVnb3J5KCkp
OwpAQCAtNTIsNiArNTMsNyBAQCBzdGF0aWMgV0tFcnJvckNvZGUgdG9XS0Vycm9yQ29kZShjb25z
dCBzCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIFdLRXJyb3JVbmtub3du
OwogfQorI2VuZGlmCiAKIEBpbXBsZW1lbnRhdGlvbiBXS0NvbnRlbnRSdWxlTGlzdFN0b3JlCiAK
QEAgLTY3LDIxICs2OSwzMCBAQCAtICh2b2lkKWRlYWxsb2MKIAogKyAoaW5zdGFuY2V0eXBlKWRl
ZmF1bHRTdG9yZQogeworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgcmV0dXJu
IHdyYXBwZXIoQVBJOjpDb250ZW50UnVsZUxpc3RTdG9yZTo6ZGVmYXVsdFN0b3JlKCkpOworI2Vs
c2UKKyAgICByZXR1cm4gbmlsOworI2VuZGlmCiB9CiAKICsgKGluc3RhbmNldHlwZSlzdG9yZVdp
dGhVUkw6KE5TVVJMICopdXJsCiB7CisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAg
ICByZXR1cm4gd3JhcHBlcihBUEk6OkNvbnRlbnRSdWxlTGlzdFN0b3JlOjpzdG9yZVdpdGhQYXRo
KHVybC5hYnNvbHV0ZVVSTC5maWxlU3lzdGVtUmVwcmVzZW50YXRpb24pKTsKKyNlbHNlCisgICAg
cmV0dXJuIG5pbDsKKyNlbmRpZgogfQogCiAtICh2b2lkKWNvbXBpbGVDb250ZW50UnVsZUxpc3RG
b3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRSdWxlTGlz
dDooTlNTdHJpbmcgKillbmNvZGVkQ29udGVudFJ1bGVMaXN0IGNvbXBsZXRpb25IYW5kbGVyOih2
b2lkICheKShXS0NvbnRlbnRSdWxlTGlzdCAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVy
CiB7Ci0gICAgW3NlbGYgX2NvbXBpbGVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOmlkZW50
aWZpZXIgZW5jb2RlZENvbnRlbnRSdWxlTGlzdDplbmNvZGVkQ29udGVudFJ1bGVMaXN0IGNvbXBs
ZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKKyAgICBbc2VsZiBfY29tcGlsZUNvbnRl
bnRSdWxlTGlzdEZvcklkZW50aWZpZXI6aWRlbnRpZmllciBlbmNvZGVkQ29udGVudFJ1bGVMaXN0
OmVuY29kZWRDb250ZW50UnVsZUxpc3QgYWxsb3dlZFJlZGlyZWN0U2NoZW1lczpuaWwgY29tcGxl
dGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOwogfQogCiAtICh2b2lkKWxvb2tVcENvbnRl
bnRSdWxlTGlzdEZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBjb21wbGV0aW9u
SGFuZGxlcjoodm9pZCAoXikoV0tDb250ZW50UnVsZUxpc3QgKiwgTlNFcnJvciAqKSljb21wbGV0
aW9uSGFuZGxlcgogeworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgX2NvbnRl
bnRSdWxlTGlzdFN0b3JlLT5sb29rdXBDb250ZW50UnVsZUxpc3QoaWRlbnRpZmllciwgW2NvbXBs
ZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0oUmVmUHRyPEFQ
STo6Q29udGVudFJ1bGVMaXN0PiBjb250ZW50UnVsZUxpc3QsIHN0ZDo6ZXJyb3JfY29kZSBlcnJv
cikgewogICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgIGF1dG8gdXNlckluZm8gPSBA
e05TSGVscEFuY2hvckVycm9yS2V5OiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIlJ1bGUg
bGlzdCBsb29rdXAgZmFpbGVkOiAlcyIsIGVycm9yLm1lc3NhZ2UoKS5jX3N0cigpXX07CkBAIC05
MiwxNyArMTAzLDIxIEBAIC0gKHZvaWQpbG9va1VwQ29udGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmkK
IAogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih3cmFwcGVyKCpjb250ZW50UnVsZUxpc3QpLCBu
aWwpOwogICAgIH0pOworI2VuZGlmCiB9CiAKIC0gKHZvaWQpZ2V0QXZhaWxhYmxlQ29udGVudFJ1
bGVMaXN0SWRlbnRpZmllcnM6KHZvaWQgKF4pKE5TQXJyYXk8TlNTdHJpbmcgKj4qKSljb21wbGV0
aW9uSGFuZGxlcgogeworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgX2NvbnRl
bnRSdWxlTGlzdFN0b3JlLT5nZXRBdmFpbGFibGVDb250ZW50UnVsZUxpc3RJZGVudGlmaWVycyhb
Y29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXShWZWN0
b3I8U3RyaW5nPiBpZGVudGlmaWVycykgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihjcmVh
dGVOU0FycmF5KGlkZW50aWZpZXJzKS5nZXQoKSk7CiAgICAgfSk7CisjZW5kaWYKIH0KIAogLSAo
dm9pZClyZW1vdmVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50
aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TRXJyb3IgKikpY29tcGxldGlvbkhh
bmRsZXIKIHsKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAgIF9jb250ZW50UnVs
ZUxpc3RTdG9yZS0+cmVtb3ZlQ29udGVudFJ1bGVMaXN0KGlkZW50aWZpZXIsIFtjb21wbGV0aW9u
SGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildKHN0ZDo6ZXJyb3JfY29k
ZSBlcnJvcikgewogICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgIGF1dG8gdXNlcklu
Zm8gPSBAe05TSGVscEFuY2hvckVycm9yS2V5OiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpA
IlJ1bGUgbGlzdCByZW1vdmFsIGZhaWxlZDogJXMiLCBlcnJvci5tZXNzYWdlKCkuY19zdHIoKV19
OwpAQCAtMTEyLDYgKzEyNyw3IEBAIC0gKHZvaWQpcmVtb3ZlQ29udGVudFJ1bGVMaXN0Rm9ySWRl
bnRpZmkKIAogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihuaWwpOwogICAgIH0pOworI2VuZGlm
CiB9CiAKICNwcmFnbWEgbWFyayBXS09iamVjdCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbgpAQCAt
MTI5LDE2ICsxNDUsMjEgQEAgLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKIAogLSAodm9pZClf
cmVtb3ZlQWxsQ29udGVudFJ1bGVMaXN0cwogeworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lP
TlMpCiAgICAgX2NvbnRlbnRSdWxlTGlzdFN0b3JlLT5zeW5jaHJvbm91c1JlbW92ZUFsbENvbnRl
bnRSdWxlTGlzdHMoKTsKKyNlbmRpZgogfQogCiAtICh2b2lkKV9pbnZhbGlkYXRlQ29udGVudFJ1
bGVMaXN0VmVyc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcgogeworI2lm
IEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgX2NvbnRlbnRSdWxlTGlzdFN0b3JlLT5p
bnZhbGlkYXRlQ29udGVudFJ1bGVMaXN0VmVyc2lvbihpZGVudGlmaWVyKTsKKyNlbmRpZgogfQog
CiAtICh2b2lkKV9nZXRDb250ZW50UnVsZUxpc3RTb3VyY2VGb3JJZGVudGlmaWVyOihOU1N0cmlu
ZyAqKWlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TU3RyaW5nKikpY29t
cGxldGlvbkhhbmRsZXIKIHsKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAgIGF1
dG8gaGFuZGxlciA9IGFkb3B0TlMoW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldKTsKICAgICBfY29u
dGVudFJ1bGVMaXN0U3RvcmUtPmdldENvbnRlbnRSdWxlTGlzdFNvdXJjZShpZGVudGlmaWVyLCBb
aGFuZGxlcl0oU3RyaW5nIHNvdXJjZSkgewogICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9p
ZCAoXikoTlNTdHJpbmcgKikpaGFuZGxlci5nZXQoKTsKQEAgLTE0NywxMSArMTY4LDE2IEBAIC0g
KHZvaWQpX2dldENvbnRlbnRSdWxlTGlzdFNvdXJjZUZvcklkZW4KICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgcmF3SGFuZGxlcihzb3VyY2UpOwogICAgIH0pOworI2VuZGlmCiB9CiAKLS0gKHZv
aWQpX2NvbXBpbGVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50
aWZpZXIgZW5jb2RlZENvbnRlbnRSdWxlTGlzdDooTlNTdHJpbmcgKikgZW5jb2RlZENvbnRlbnRS
dWxlTGlzdCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoV0tDb250ZW50UnVsZUxpc3QgKiwg
TlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgorLSAodm9pZClfY29tcGlsZUNvbnRlbnRSdWxl
TGlzdEZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBlbmNvZGVkQ29udGVudFJ1
bGVMaXN0OihOU1N0cmluZyAqKWVuY29kZWRDb250ZW50UnVsZUxpc3QgYWxsb3dlZFJlZGlyZWN0
U2NoZW1lczooTlNTZXQ8TlNTdHJpbmcgKj4gKilzY2hlbWVzIGNvbXBsZXRpb25IYW5kbGVyOih2
b2lkICheKShXS0NvbnRlbnRSdWxlTGlzdCAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVy
CiB7Ci0gICAgX2NvbnRlbnRSdWxlTGlzdFN0b3JlLT5jb21waWxlQ29udGVudFJ1bGVMaXN0KGlk
ZW50aWZpZXIsIGVuY29kZWRDb250ZW50UnVsZUxpc3QsIFtjb21wbGV0aW9uSGFuZGxlciA9IG1h
a2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildKFJlZlB0cjxBUEk6OkNvbnRlbnRSdWxlTGlz
dD4gY29udGVudFJ1bGVMaXN0LCBzdGQ6OmVycm9yX2NvZGUgZXJyb3IpIHsKKyNpZiBFTkFCTEUo
Q09OVEVOVF9FWFRFTlNJT05TKQorICAgIEhhc2hTZXQ8U3RyaW5nPiBhbGxvd2VkUmVkaXJlY3RT
Y2hlbWVzOworICAgIGZvciAoTlNTdHJpbmcgKnNjaGVtZSBpbiBzY2hlbWVzKQorICAgICAgICBh
bGxvd2VkUmVkaXJlY3RTY2hlbWVzLmFkZChzY2hlbWUpOworICAgIF9jb250ZW50UnVsZUxpc3RT
dG9yZS0+Y29tcGlsZUNvbnRlbnRSdWxlTGlzdChpZGVudGlmaWVyLCBlbmNvZGVkQ29udGVudFJ1
bGVMaXN0LCBXVEZNb3ZlKGFsbG93ZWRSZWRpcmVjdFNjaGVtZXMpLCBbY29tcGxldGlvbkhhbmRs
ZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXShSZWZQdHI8QVBJOjpDb250ZW50
UnVsZUxpc3Q+IGNvbnRlbnRSdWxlTGlzdCwgc3RkOjplcnJvcl9jb2RlIGVycm9yKSB7CiAgICAg
ICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgYXV0byB1c2VySW5mbyA9IEB7TlNIZWxwQW5j
aG9yRXJyb3JLZXk6IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiUnVsZSBsaXN0IGNvbXBp
bGF0aW9uIGZhaWxlZDogJXMiLCBlcnJvci5tZXNzYWdlKCkuY19zdHIoKV19OwogCkBAIC0xNjEs
MTYgKzE4NywyNSBAQCAtICh2b2lkKV9jb21waWxlQ29udGVudFJ1bGVMaXN0Rm9ySWRlbnRpCiAg
ICAgICAgIH0KICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod3JhcHBlcigqY29udGVudFJ1bGVM
aXN0KSwgbmlsKTsKICAgICB9KTsKKyNlbmRpZgogfQogCiArIChpbnN0YW5jZXR5cGUpZGVmYXVs
dFN0b3JlV2l0aExlZ2FjeUZpbGVuYW1lCiB7CisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9O
UykKICAgICByZXR1cm4gd3JhcHBlcihBUEk6OkNvbnRlbnRSdWxlTGlzdFN0b3JlOjpkZWZhdWx0
U3RvcmUoKSk7CisjZWxzZQorICAgIHJldHVybiBuaWw7CisjZW5kaWYKIH0KIAogKyAoaW5zdGFu
Y2V0eXBlKXN0b3JlV2l0aFVSTEFuZExlZ2FjeUZpbGVuYW1lOihOU1VSTCAqKXVybAogeworI2lm
IEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgcmV0dXJuIHdyYXBwZXIoQVBJOjpDb250
ZW50UnVsZUxpc3RTdG9yZTo6c3RvcmVXaXRoUGF0aCh1cmwuYWJzb2x1dGVVUkwuZmlsZVN5c3Rl
bVJlcHJlc2VudGF0aW9uKSk7CisjZWxzZQorICAgIHJldHVybiBuaWw7CisjZW5kaWYKIH0KIAog
LSAodm9pZCljb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICop
aWRlbnRpZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjooTlNTdHJpbmcgKillbmNvZGVkQ29u
dGVudEV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoX1dLVXNlckNvbnRlbnRG
aWx0ZXIgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgpJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudFJ1bGVMaXN0U3RvcmVQcml2YXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudFJ1
bGVMaXN0U3RvcmVQcml2YXRlLmgJKHJldmlzaW9uIDI4NTk1NCkKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlUHJpdmF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAtICh2b2lkKV9pbnZhbGlkYXRlQ29udGVudFJ1
bGVMaXN0VmVyc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcjsKIC0gKHZv
aWQpX2dldENvbnRlbnRSdWxlTGlzdFNvdXJjZUZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRl
bnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNTdHJpbmcgKikpY29tcGxldGlv
bkhhbmRsZXI7CiAKLS0gKHZvaWQpX2NvbXBpbGVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVy
OihOU1N0cmluZyAqKWlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRSdWxlTGlzdDooTlNTdHJpbmcg
KikgZW5jb2RlZENvbnRlbnRSdWxlTGlzdCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoV0tD
b250ZW50UnVsZUxpc3QgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQp
X2NvbXBpbGVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZp
ZXIgZW5jb2RlZENvbnRlbnRSdWxlTGlzdDooTlNTdHJpbmcgKillbmNvZGVkQ29udGVudFJ1bGVM
aXN0IGFsbG93ZWRSZWRpcmVjdFNjaGVtZXM6KE5TU2V0PE5TU3RyaW5nICo+ICopc2NoZW1lcyBj
b21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoV0tDb250ZW50UnVsZUxpc3QgKiwgTlNFcnJvciAq
KSljb21wbGV0aW9uSGFuZGxlcjsKIAogLy8gRklYTUU6IFJlbW92ZSBfV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlLgogKyAoaW5zdGFuY2V0eXBlKWRlZmF1bHRTdG9yZVdpdGhMZWdhY3lGaWxl
bmFtZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vi
Vmlldy5tbQkocmV2aXNpb24gMjg1OTU0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjc2Niw3ICsyNzY2LDExIEBA
ICsgKEJPT0wpX2hhbmRsZXNTYWZlQnJvd3NpbmcKIAogKyAoQk9PTClfd2lsbFVwZ3JhZGVUb0hU
VFBTOihOU1VSTCAqKXVybAogeworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAg
cmV0dXJuIFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tl
bmQ6OnNob3VsZEJlTWFkZVNlY3VyZSh1cmwpOworI2Vsc2UKKyAgICByZXR1cm4gTk87CisjZW5k
aWYKIH0KIAogLSAodm9pZClfc2hvd1NhZmVCcm93c2luZ1dhcm5pbmdXaXRoVGl0bGU6KE5TU3Ry
aW5nICopdGl0bGUgd2FybmluZzooTlNTdHJpbmcgKil3YXJuaW5nIGRldGFpbHM6KE5TQXR0cmli
dXRlZFN0cmluZyAqKWRldGFpbHMgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoQk9PTCkpY29t
cGxldGlvbkhhbmRsZXIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYnBhZ2VQcmVmZXJlbmNlcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJwYWdlUHJlZmVyZW5jZXMubW0JKHJldmlzaW9uIDI4NTk1NCkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnBhZ2VQcmVmZXJlbmNl
cy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTQxLDYgKzE0MSwzMiBAQCAtIChCT09MKV9jb250ZW50
QmxvY2tlcnNFbmFibGVkCiAgICAgcmV0dXJuIF93ZWJzaXRlUG9saWNpZXMtPmNvbnRlbnRCbG9j
a2Vyc0VuYWJsZWQoKTsKIH0KIAorLSAodm9pZClfc2V0QWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0
aW9uUGF0dGVybnM6KE5TU2V0PE5TU3RyaW5nICo+ICopcGF0dGVybnMKK3sKKyAgICBpZiAoIXBh
dHRlcm5zKSB7CisgICAgICAgIF93ZWJzaXRlUG9saWNpZXMtPnNldEFjdGl2ZUNvbnRlbnRSdWxl
TGlzdEFjdGlvblBhdHRlcm5zKHN0ZDo6bnVsbG9wdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBIYXNoU2V0PFN0cmluZz4gcGF0dGVybkhhc2hTZXQ7CisgICAgcGF0dGVybkhhc2hT
ZXQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwYXR0ZXJucy5jb3VudCk7CisgICAgZm9yIChOU1N0
cmluZyAqcGF0dGVybiBpbiBwYXR0ZXJucykKKyAgICAgICAgcGF0dGVybkhhc2hTZXQuYWRkKHBh
dHRlcm4pOworICAgIF93ZWJzaXRlUG9saWNpZXMtPnNldEFjdGl2ZUNvbnRlbnRSdWxlTGlzdEFj
dGlvblBhdHRlcm5zKFdURk1vdmUocGF0dGVybkhhc2hTZXQpKTsKK30KKworLSAoTlNTZXQ8TlNT
dHJpbmcgKj4gKilfYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uUGF0dGVybnMKK3sKKyAgICBj
b25zdCBhdXRvJiBwYXR0ZXJucyA9IF93ZWJzaXRlUG9saWNpZXMtPmFjdGl2ZUNvbnRlbnRSdWxl
TGlzdEFjdGlvblBhdHRlcm5zKCk7CisgICAgaWYgKCFwYXR0ZXJucykKKyAgICAgICAgcmV0dXJu
IG5pbDsKKworICAgIE5TTXV0YWJsZVNldDxOU1N0cmluZyAqPiAqc2V0ID0gW05TTXV0YWJsZVNl
dCBzZXRdOworICAgIGZvciAoY29uc3QgYXV0byYgcGF0dGVybiA6ICpwYXR0ZXJucykKKyAgICAg
ICAgW3NldCBhZGRPYmplY3Q6cGF0dGVybl07CisgICAgcmV0dXJuIHNldDsKK30KKwogLSAodm9p
ZClfc2V0QWxsb3dlZEF1dG9wbGF5UXVpcmtzOihfV0tXZWJzaXRlQXV0b3BsYXlRdWlyaylhbGxv
d2VkUXVpcmtzCiB7CiAgICAgT3B0aW9uU2V0PFdlYktpdDo6V2Vic2l0ZUF1dG9wbGF5UXVpcms+
IHF1aXJrczsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnBh
Z2VQcmVmZXJlbmNlc1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJwYWdlUHJlZmVyZW5jZXNQcml2YXRlLmgJKHJldmlzaW9uIDI4
NTk1NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnBhZ2VQcmVm
ZXJlbmNlc1ByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQCB0eXBlZGVm
IE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLV2Vic2l0CiBAaW50ZXJmYWNlIFdLV2VicGFnZVBy
ZWZlcmVuY2VzIChXS1ByaXZhdGUpCiAKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3Nl
dENvbnRlbnRCbG9ja2Vyc0VuYWJsZWQ6KSBCT09MIF9jb250ZW50QmxvY2tlcnNFbmFibGVkOwor
QHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIHNldHRlcj1fc2V0QWN0aXZlQ29udGVudFJ1bGVM
aXN0QWN0aW9uUGF0dGVybnM6KSBOU1NldDxOU1N0cmluZyAqPiAqX2FjdGl2ZUNvbnRlbnRSdWxl
TGlzdEFjdGlvblBhdHRlcm5zOwogQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0QWxs
b3dlZEF1dG9wbGF5UXVpcmtzOikgX1dLV2Vic2l0ZUF1dG9wbGF5UXVpcmsgX2FsbG93ZWRBdXRv
cGxheVF1aXJrczsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldEF1dG9wbGF5UG9s
aWN5OikgX1dLV2Vic2l0ZUF1dG9wbGF5UG9saWN5IF9hdXRvcGxheVBvbGljeTsKIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCBjb3B5LCBzZXR0ZXI9X3NldEN1c3RvbUhlYWRlckZpZWxkczopIE5TQXJy
YXk8X1dLQ3VzdG9tSGVhZGVyRmllbGRzICo+ICpfY3VzdG9tSGVhZGVyRmllbGRzOwpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0NvbnRlbnRSdWxlTGlzdEFjdGlv
bi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
Q29udGVudFJ1bGVMaXN0QWN0aW9uLm1tCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQ29udGVudFJ1bGVMaXN0QWN0aW9uLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MywyNSArNDMsNDEgQEAgLSAodm9pZClkZWFsbG9jCiAKIC0gKEJPT0wp
YmxvY2tlZExvYWQKIHsKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAgIHJldHVy
biBfYWN0aW9uLT5ibG9ja2VkTG9hZCgpOworI2Vsc2UKKyAgICByZXR1cm4gTk87CisjZW5kaWYK
IH0KIAogLSAoQk9PTClibG9ja2VkQ29va2llcwogeworI2lmIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCiAgICAgcmV0dXJuIF9hY3Rpb24tPmJsb2NrZWRDb29raWVzKCk7CisjZWxzZQorICAg
IHJldHVybiBOTzsKKyNlbmRpZgogfQogCiAtIChCT09MKW1hZGVIVFRQUwogeworI2lmIEVOQUJM
RShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgcmV0dXJuIF9hY3Rpb24tPm1hZGVIVFRQUygpOwor
I2Vsc2UKKyAgICByZXR1cm4gTk87CisjZW5kaWYKIH0KIAogLSAoTlNBcnJheTxOU1N0cmluZyAq
PiAqKW5vdGlmaWNhdGlvbnMKIHsKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAg
IGF1dG8mIHZlY3RvciA9IF9hY3Rpb24tPm5vdGlmaWNhdGlvbnMoKTsKICAgICBpZiAodmVjdG9y
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICByZXR1cm4gY3JlYXRlTlNBcnJh
eSh2ZWN0b3IpLmF1dG9yZWxlYXNlKCk7CisjZWxzZQorICAgIHJldHVybiBuaWw7CisjZW5kaWYK
IH0KIAogLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlLm1tCShyZXZpc2lvbiAyODU5NTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQkod29ya2luZyBj
b3B5KQpAQCAtNzAsNyArNzAsNyBAQCArIChpbnN0YW5jZXR5cGUpc3RvcmVXaXRoVVJMOihOU1VS
TCAqKXVyCiAKIC0gKHZvaWQpY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihO
U1N0cmluZyAqKWlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246KE5TU3RyaW5nICop
ZW5jb2RlZENvbnRlbnRSdWxlTGlzdCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoX1dLVXNl
ckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIFtf
Y29udGVudFJ1bGVMaXN0U3RvcmUgX2NvbXBpbGVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVy
OmlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRSdWxlTGlzdDplbmNvZGVkQ29udGVudFJ1bGVMaXN0
IGNvbXBsZXRpb25IYW5kbGVyOl4oV0tDb250ZW50UnVsZUxpc3QgKmNvbnRlbnRSdWxlTGlzdCwg
TlNFcnJvciAqZXJyb3IpIHsKKyAgICBbX2NvbnRlbnRSdWxlTGlzdFN0b3JlIGNvbXBpbGVDb250
ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOmlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRSdWxlTGlz
dDplbmNvZGVkQ29udGVudFJ1bGVMaXN0IGNvbXBsZXRpb25IYW5kbGVyOl4oV0tDb250ZW50UnVs
ZUxpc3QgKmNvbnRlbnRSdWxlTGlzdCwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAgICAgYXV0byBj
b250ZW50RmlsdGVyID0gY29udGVudFJ1bGVMaXN0ID8gYWRvcHROUyhbW19XS1VzZXJDb250ZW50
RmlsdGVyIGFsbG9jXSBfaW5pdFdpdGhXS0NvbnRlbnRSdWxlTGlzdDpjb250ZW50UnVsZUxpc3Rd
KSA6IG5pbDsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY29udGVudEZpbHRlci5nZXQoKSwg
dG9Vc2VyQ29udGVudFJ1bGVMaXN0U3RvcmVFcnJvcihlcnJvcikpOwogICAgIH1dOwpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0VXNlckNvbnRlbnRGaWx0ZXJT
dG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIv
V2ViS2l0VXNlckNvbnRlbnRGaWx0ZXJTdG9yZS5jcHAJKHJldmlzaW9uIDI4NTk1NCkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFVzZXJDb250ZW50RmlsdGVyU3Rv
cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsNyArMTg3LDcgQEAgc3RhdGljIHZvaWQgd2Vi
a2l0VXNlckNvbnRlbnRGaWx0ZXJTdG9yZQogICAgIH0KIAogICAgIGF1dG8qIHN0b3JlID0gV0VC
S0lUX1VTRVJfQ09OVEVOVF9GSUxURVJfU1RPUkUoZ190YXNrX2dldF9zb3VyY2Vfb2JqZWN0KHRh
c2suZ2V0KCkpKTsKLSAgICBzdG9yZS0+cHJpdi0+c3RvcmUtPmNvbXBpbGVDb250ZW50UnVsZUxp
c3QoaWRlbnRpZmllciwgU3RyaW5nOjpmcm9tVVRGOChzb3VyY2VEYXRhLCBzb3VyY2VTaXplKSwg
W3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShSZWZQdHI8QVBJOjpDb250ZW50UnVsZUxpc3Q+IGNvbnRl
bnRSdWxlTGlzdCwgc3RkOjplcnJvcl9jb2RlIGVycm9yKSB7CisgICAgc3RvcmUtPnByaXYtPnN0
b3JlLT5jb21waWxlQ29udGVudFJ1bGVMaXN0KGlkZW50aWZpZXIsIFN0cmluZzo6ZnJvbVVURjgo
c291cmNlRGF0YSwgc291cmNlU2l6ZSksIHsgSGFzaFNldDxTdHJpbmc+KCkgfSwgW3Rhc2sgPSBX
VEZNb3ZlKHRhc2spXShSZWZQdHI8QVBJOjpDb250ZW50UnVsZUxpc3Q+IGNvbnRlbnRSdWxlTGlz
dCwgc3RkOjplcnJvcl9jb2RlIGVycm9yKSB7CiAgICAgICAgIGlmIChnX3Rhc2tfcmV0dXJuX2Vy
cm9yX2lmX2NhbmNlbGxlZCh0YXNrLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybjsKIApJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLmgJ
KHJldmlzaW9uIDI4NTk1NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmln
YXRpb25TdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsNyArMTQzLDkgQEAgcHJpdmF0ZToK
ICNlbmRpZgogICAgICAgICBib29sIHdpbGxHb1RvQmFja0ZvcndhcmRMaXN0SXRlbShXZWJQYWdl
UHJveHkmLCBXZWJCYWNrRm9yd2FyZExpc3RJdGVtJiwgYm9vbCBpbkJhY2tGb3J3YXJkQ2FjaGUp
IGZpbmFsOwogCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAgICAgICAgdm9pZCBj
b250ZW50UnVsZUxpc3ROb3RpZmljYXRpb24oV2ViUGFnZVByb3h5JiwgVVJMJiYsIFdlYkNvcmU6
OkNvbnRlbnRSdWxlTGlzdFJlc3VsdHMmJikgZmluYWw7CisjZW5kaWYKICAgICAgICAgdm9pZCBk
ZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdlYlBhZ2VQcm94eSYsIFJlZjxBUEk6Ok5h
dmlnYXRpb25BY3Rpb24+JiYsIFJlZjxXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk+JiYsIEFQ
STo6T2JqZWN0KiB1c2VyRGF0YSkgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgZGVjaWRlUG9saWN5
Rm9yTmF2aWdhdGlvblJlc3BvbnNlKFdlYlBhZ2VQcm94eSYsIFJlZjxBUEk6Ok5hdmlnYXRpb25S
ZXNwb25zZT4mJiwgUmVmPFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eT4mJiwgQVBJOjpPYmpl
Y3QqIHVzZXJEYXRhKSBvdmVycmlkZTsKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbQkocmV2aXNpb24gMjg1OTU0KQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC01ODcsNiArNTg3LDcgQEAgdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25D
bGllbnQ6OgogICAgIH0KIH0KIAorI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiB2b2lk
IE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6Y29udGVudFJ1bGVMaXN0Tm90aWZp
Y2F0aW9uKFdlYlBhZ2VQcm94eSYsIFVSTCYmIHVybCwgQ29udGVudFJ1bGVMaXN0UmVzdWx0cyYm
IHJlc3VsdHMpCiB7CiAgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZSkKQEAgLTYyNCw2ICs2MjUs
NyBAQCB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6CiAgICAgICAgICAg
ICBbKGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBf
d2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3IGNvbnRlbnRSdWxlTGlzdFdpdGhJ
ZGVudGlmaWVyOnBhaXIuZmlyc3QgcGVyZm9ybWVkQWN0aW9uOndyYXBwZXIoQVBJOjpDb250ZW50
UnVsZUxpc3RBY3Rpb246OmNyZWF0ZShXVEZNb3ZlKHBhaXIuc2Vjb25kKSkuZ2V0KCkpIGZvclVS
TDp1cmxdOwogICAgIH0KIH0KKyNlbmRpZgogICAgIAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5h
dmlnYXRpb25DbGllbnQ6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNwb25zZShXZWJQYWdl
UHJveHkmIHBhZ2UsIFJlZjxBUEk6Ok5hdmlnYXRpb25SZXNwb25zZT4mJiBuYXZpZ2F0aW9uUmVz
cG9uc2UsIFJlZjxXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk+JiYgbGlzdGVuZXIsIEFQSTo6
T2JqZWN0KiB1c2VyRGF0YSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3
b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJTdHJhdGVneS5jcHAJKHJldmlzaW9uIDI4NTk1NCkK
KysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDc5LDYgKzQ3OSwxMiBAQCB2b2lkIFdlYkxvYWRlclN0cmF0
ZWd5OjpyZW1vdmUoUmVzb3VyY2VMCiAgICAgQVNTRVJUKHJlc291cmNlTG9hZGVyKTsKICAgICBM
T0coTmV0d29ya1NjaGVkdWxpbmcsICIoV2ViUHJvY2VzcykgV2ViTG9hZGVyU3RyYXRlZ3k6OnJl
bW92ZSwgdXJsICclcyciLCByZXNvdXJjZUxvYWRlci0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSk7CiAKKyAgICBhdXRvIGlkZW50aWZpZXIgPSByZXNvdXJjZUxvYWRlci0+aWRlbnRpZmll
cigpOworICAgIGlmICghaWRlbnRpZmllcikgeworICAgICAgICBMT0dfRVJST1IoIldlYkxvYWRl
clN0cmF0ZWd5IHJlbW92aW5nIGEgUmVzb3VyY2VMb2FkZXIgdGhhdCBoYXMgbm8gaWRlbnRpZmll
ci4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChhdXRvIHRhc2sgPSBtX3Vy
bFNjaGVtZVRhc2tzLnRha2UocmVzb3VyY2VMb2FkZXItPmlkZW50aWZpZXIoKSkpIHsKICAgICAg
ICAgQVNTRVJUKCFtX2ludGVybmFsbHlGYWlsZWRSZXNvdXJjZUxvYWRlcnMuY29udGFpbnMocmVz
b3VyY2VMb2FkZXIpKTsKICAgICAgICAgdGFzay0+c3RvcExvYWRpbmcoKTsKQEAgLTQ4OSwxMiAr
NDk1LDYgQEAgdm9pZCBXZWJMb2FkZXJTdHJhdGVneTo6cmVtb3ZlKFJlc291cmNlTAogICAgICAg
ICBtX2ludGVybmFsbHlGYWlsZWRSZXNvdXJjZUxvYWRlcnMucmVtb3ZlKHJlc291cmNlTG9hZGVy
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKLSAgICBhdXRvIGlkZW50aWZpZXIgPSBy
ZXNvdXJjZUxvYWRlci0+aWRlbnRpZmllcigpOwotICAgIGlmICghaWRlbnRpZmllcikgewotICAg
ICAgICBMT0dfRVJST1IoIldlYkxvYWRlclN0cmF0ZWd5IHJlbW92aW5nIGEgUmVzb3VyY2VMb2Fk
ZXIgdGhhdCBoYXMgbm8gaWRlbnRpZmllci4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KIAog
ICAgIFJlZlB0cjxXZWJSZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gbV93ZWJSZXNvdXJjZUxvYWRl
cnMudGFrZShpZGVudGlmaWVyKTsKICAgICAvLyBMb2FkZXIgbWF5IG5vdCBiZSByZWdpc3RlcmVk
IGlmIHdlIGNyZWF0ZWQgaXQsIGJ1dCBoYXZlbid0IHNjaGVkdWxlZCB5ZXQgKGEgYnVuZGxlIGNs
aWVudCBjYW4gZGVjaWRlIHRvIGNhbmNlbCBzdWNoIHJlcXVlc3QgdmlhIHdpbGxTZW5kUmVxdWVz
dCkuCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyODU5NTQpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxOSBAQAorMjAyMS0xMS0xNyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNl
bkB3ZWJraXQub3JnPgorCisgICAgICAgIEltcGxlbWVudCBtb3N0IG9mIHJlZGlyZWN0IGFuZCBt
b2RpZnktaGVhZGVycyBhY3Rpb24gdHlwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIzMzI2OAorCisgICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRj
aGVyLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRl
bnNpb25zLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkluTWVtb3J5Q29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uOjpjcmVhdGUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Y2hlY2tDb21w
aWxlckVycm9yKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0NvbnRlbnRFeHRlbnNpb25TdG9yZS5t
bToKKyAgICAgICAgKGNvbXBpbGVDb250ZW50UnVsZUxpc3QpOgorICAgICAgICAobmF2aWdhdGlv
bkRlbGVnYXRlQWxsb3dpbmdBY3RpdmVBY3Rpb25zT25UZXN0SG9zdCk6CisgICAgICAgIChURVNU
X0YpOgorCiAyMDIxLTExLTE3ICBaaXhpbmcgTGl1ICA8bGl1c2h1eXUwMTFAZ21haWwuY29tPgog
CiAgICAgICAgIFtHVEtdW1dQRV0gU3VwcG9ydCBnZXR0aW5nIGFuZCBzZXR0aW5nIEhUVFAgaGVh
ZGVycyBpbiBjdXN0b20gVVJJIHNjaGVtZSBoYW5kbGVycwpJbmRleDogVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwCShy
ZXZpc2lvbiAyODU5NTQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29u
dGVudEV4dGVuc2lvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw4IEBACiAKICNp
bmNsdWRlICJjb25maWcuaCIKIAorI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisKICNp
bmNsdWRlICJVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Jbml0aWFsaXpl
VGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db21iaW5lZFVSTEZpbHRlcnMuaD4KQEAg
LTEyOSw3ICsxMzEsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBDb21waWxlZENvbnRlbnRF
eHRlbnNpb25EYXRhIGV4dGVuc2lvbkRhdGE7CiAgICAgICAgIEluTWVtb3J5Q29udGVudEV4dGVu
c2lvbkNvbXBpbGF0aW9uQ2xpZW50IGNsaWVudChleHRlbnNpb25EYXRhKTsKLSAgICAgICAgYXV0
byBwYXJzZWRSdWxlcyA9IENvbnRlbnRFeHRlbnNpb25zOjpwYXJzZVJ1bGVMaXN0KGZpbHRlciwg
eyB9KTsKKyAgICAgICAgYXV0byBwYXJzZWRSdWxlcyA9IENvbnRlbnRFeHRlbnNpb25zOjpwYXJz
ZVJ1bGVMaXN0KGZpbHRlciwgc3RkOjpudWxsb3B0KTsKICAgICAgICAgYXV0byBjb21waWxlckVy
cm9yID0gQ29udGVudEV4dGVuc2lvbnM6OmNvbXBpbGVSdWxlTGlzdChjbGllbnQsIFdURk1vdmUo
ZmlsdGVyKSwgV1RGTW92ZShwYXJzZWRSdWxlcy52YWx1ZSgpKSk7CiAKICAgICAgICAgLy8gQ29t
cGlsaW5nIHNob3VsZCBhbHdheXMgc3VjY2VlZCBoZXJlLiBXZSBoYXZlIG90aGVyIHRlc3RzIGZv
ciBjb21waWxlIGZhaWx1cmVzLgpAQCAtMTM2MCw3ICsxMzYyLDcgQEAgVEVTVF9GKENvbnRlbnRF
eHRlbnNpb25UZXN0LCBEZWVwTkZBKQogICAgIEVYUEVDVF9FUSgxdWwsIGNyZWF0ZU5GQXMoY29t
YmluZWRVUkxGaWx0ZXJzKS5zaXplKCkpOwogfQogCi12b2lkIGNoZWNrQ29tcGlsZXJFcnJvcihj
b25zdCBjaGFyKiBqc29uLCBzdGQ6OmVycm9yX2NvZGUgZXhwZWN0ZWRFcnJvciwgY29uc3QgSGFz
aFNldDxTdHJpbmc+JiBhbGxvd2VkUmVkaXJlY3RVUkxTY2hlbWVzID0geyB9KQordm9pZCBjaGVj
a0NvbXBpbGVyRXJyb3IoY29uc3QgY2hhcioganNvbiwgc3RkOjplcnJvcl9jb2RlIGV4cGVjdGVk
RXJyb3IsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8SGFzaFNldDxTdHJpbmc+PiYgYWxsb3dlZFJlZGly
ZWN0VVJMU2NoZW1lcyA9IHN0ZDo6bnVsbG9wdCkKIHsKICAgICBDb21waWxlZENvbnRlbnRFeHRl
bnNpb25EYXRhIGV4dGVuc2lvbkRhdGE7CiAgICAgSW5NZW1vcnlDb250ZW50RXh0ZW5zaW9uQ29t
cGlsYXRpb25DbGllbnQgY2xpZW50KGV4dGVuc2lvbkRhdGEpOwpAQCAtMTUzMCw2ICsxNTMyLDcg
QEAgVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBJbnZhbGlkSlNPTgogICAgICAgICBDb250
ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkQWN0aW9uVHlwZSk7CiAgICAgY2hlY2tDb21w
aWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiY3NzLWRpc3BsYXktbm9uZVwifSxc
InRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLAogICAgICAgICBD
b250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkQ1NTRGlzcGxheU5vbmVBY3Rpb25UeXBl
KTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIiIsIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNP
TlJlZGlyZWN0VVJMU2NoZW1lc1Nob3VsZE5vdEluY2x1ZGVKYXZhc2NyaXB0LCB7IHsgImphdmFz
Y3JpcHQiIH0gfSk7CiAKICAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0
eXBlXCI6XCJpZ25vcmUtcHJldmlvdXMtcnVsZXNcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRl
clwiOlwid2Via2l0Lm9yZ1wifX0sIgogICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwi
Y3NzLWRpc3BsYXktbm9uZVwiLFwic2VsZWN0b3JcIjpcIi5oaWRkZW5cIn0sXCJ0cmlnZ2VyXCI6
e1widXJsLWZpbHRlclwiOlwiLipcIn19XSIsIHsgfSk7CkBAIC0xNTU4LDEyICsxNTYxLDIwIEBA
IFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgSW52YWxpZEpTT04KICAgICBjaGVja0NvbXBp
bGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVkaXJlY3Rc
Ijp7XCJ0cmFuc2Zvcm1cIjp7XCJxdWVyeS10cmFuc2Zvcm1cIjp7XCJhZGQtb3ItcmVwbGFjZS1w
YXJhbWV0ZXJzXCI6W3t9XX19fX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0
Lm9yZ1wifX1dIiwgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OQWRkT3JSZXBsYWNlUGFyYW1l
dGVyc0tleVZhbHVlTWlzc2luZ0tleVN0cmluZyk7CiAgICAgY2hlY2tDb21waWxlckVycm9yKCJb
e1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixcInJlZGlyZWN0XCI6e1widHJhbnNm
b3JtXCI6e1wicXVlcnktdHJhbnNmb3JtXCI6e1wiYWRkLW9yLXJlcGxhY2UtcGFyYW1ldGVyc1wi
Olt7XCJrZXlcIjo1fV19fX19LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5v
cmdcIn19XSIsIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkFkZE9yUmVwbGFjZVBhcmFtZXRl
cnNLZXlWYWx1ZU1pc3NpbmdLZXlTdHJpbmcpOwogICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tc
ImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRpcmVjdFwiOntcInRyYW5zZm9y
bVwiOntcInF1ZXJ5LXRyYW5zZm9ybVwiOntcImFkZC1vci1yZXBsYWNlLXBhcmFtZXRlcnNcIjpb
e1wia2V5XCI6XCJrXCIsXCJ2YWx1ZVwiOjV9XX19fX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRl
clwiOlwid2Via2l0Lm9yZ1wifX1dIiwgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OQWRkT3JS
ZXBsYWNlUGFyYW1ldGVyc0tleVZhbHVlTWlzc2luZ1ZhbHVlU3RyaW5nKTsKLSAgICBjaGVja0Nv
bXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVkaXJl
Y3RcIjp7XCJ1cmxcIjpcImFib3V0OmJsYW5rXCJ9fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVy
XCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVj
dFVSTFNjaGVtZU5vdEFsbG93ZWQpOwotICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlv
blwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRpcmVjdFwiOntcInVybFwiOlwiYWJvdXQ6
YmxhbmtcIn19LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIs
IHsgfSwgeyAiYWJvdXQiIH0pOwotICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwi
OntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRpcmVjdFwiOntcImV4dGVuc2lvbi1wYXRoXCI6
XCJkb2VzL25vdC9zdGFydC93aXRoL3NsYXNoL1wifX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRl
clwiOlwid2Via2l0Lm9yZ1wifX1dIiwgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJl
Y3RFeHRlbnNpb25QYXRoRG9lc05vdFN0YXJ0V2l0aFNsYXNoKTsKKyAgICBjaGVja0NvbXBpbGVy
RXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVkaXJlY3RcIjp7
XCJ1cmxcIjpcImFib3V0OmJsYW5rXCJ9fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3
ZWJraXQub3JnXCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTFNj
aGVtZU5vdEFsbG93ZWQsIHsgeyAibm90LWFib3V0IiB9IH0pOworICAgIGNoZWNrQ29tcGlsZXJF
cnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRpcmVjdFwiOntc
InVybFwiOlwiYWJvdXQ6YmxhbmtcIn19LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndl
YmtpdC5vcmdcIn19XSIsIHsgfSwgeyB7ICJhYm91dCIgfSB9KTsKKyAgICBjaGVja0NvbXBpbGVy
RXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVkaXJlY3RcIjp7
XCJ1cmxcIjpcImh0dHBzOi8vMTI3Li4xL1wifX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwi
Olwid2Via2l0Lm9yZ1wifX1dIiwgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RV
UkxJbnZhbGlkLCB7IHsgImh0dHBzIiB9IH0pOworICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tc
ImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRpcmVjdFwiOntcInVybFwiOlwi
YWJvdXQ6YmxhbmtcIn19LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdc
In19XSIsIHsgfSwgeyB7ICJhYm91dCIgfSB9KTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7
XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVkaXJlY3RcIjp7XCJ0cmFuc2Zv
cm1cIjp7XCJwb3J0XCI6XCJub3QgYSBudW1iZXJcIn19fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmls
dGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05SZWRp
cmVjdEludmFsaWRQb3J0KTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7
XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVkaXJlY3RcIjp7XCJ0cmFuc2Zvcm1cIjp7XCJwb3J0
XCI6XCI2NTUzNlwifX19LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdc
In19XSIsIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTlJlZGlyZWN0SW52YWxpZFBvcnQpOwor
ICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0
XCIsXCJyZWRpcmVjdFwiOntcInRyYW5zZm9ybVwiOntcInF1ZXJ5XCI6XCJuby1xdWVzdGlvbi1t
YXJrXCJ9fX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwg
Q29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OUmVkaXJlY3RJbnZhbGlkUXVlcnkpOworICAgIGNo
ZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJy
ZWRpcmVjdFwiOntcInRyYW5zZm9ybVwiOntcImZyYWdtZW50XCI6XCJuby1udW1iZXItc2lnblwi
fX19LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsIENvbnRl
bnRFeHRlbnNpb25FcnJvcjo6SlNPTlJlZGlyZWN0SW52YWxpZEZyYWdtZW50KTsKKyAgICBjaGVj
a0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVk
aXJlY3RcIjp7XCJ0cmFuc2Zvcm1cIjp7XCJwb3J0XCI6XCI2NTUzNVwifX19LFwidHJpZ2dlclwi
OntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsIHsgfSk7CisgICAgY2hlY2tDb21w
aWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixcInJlZGlyZWN0
XCI6e1widHJhbnNmb3JtXCI6e1wicG9ydFwiOlwiXCJ9fX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZp
bHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwgeyB9KTsKICAgICBjaGVja0NvbXBpbGVyRXJyb3Io
Ilt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJyZWRpcmVjdFwiLFwicmVkaXJlY3RcIjp7XCJleHRl
bnNpb24tcGF0aFwiOlwiL2RvZXMvc3RhcnQvd2l0aC9zbGFzaC9cIn19LFwidHJpZ2dlclwiOntc
InVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsIHsgfSk7Ci0gICAgY2hlY2tDb21waWxl
ckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixcInJlZGlyZWN0XCI6
e1widHJhbnNmb3JtXCI6e1wic2NoZW1lXCI6XCJhYm91dFwifX19LFwidHJpZ2dlclwiOntcInVy
bC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNP
TlJlZGlyZWN0VVJMU2NoZW1lTm90QWxsb3dlZCk7Ci0gICAgY2hlY2tDb21waWxlckVycm9yKCJb
e1wiYWN0aW9uXCI6e1widHlwZVwiOlwicmVkaXJlY3RcIixcInJlZGlyZWN0XCI6e1widHJhbnNm
b3JtXCI6e1wic2NoZW1lXCI6XCJhYm91dFwifX19LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJc
IjpcIndlYmtpdC5vcmdcIn19XSIsIHsgfSwgeyAiYWJvdXQiIH0pOworICAgIGNoZWNrQ29tcGls
ZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRpcmVjdFwi
OntcInRyYW5zZm9ybVwiOntcInNjaGVtZVwiOlwiYWJvdXRcIn19fSxcInRyaWdnZXJcIjp7XCJ1
cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpT
T05SZWRpcmVjdFVSTFNjaGVtZU5vdEFsbG93ZWQsIHsgeyAibm90LWFib3V0IiB9IH0pOworICAg
IGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIs
XCJyZWRpcmVjdFwiOntcInRyYW5zZm9ybVwiOntcInNjaGVtZVwiOlwiIUAjJCVcIn19fSxcInRy
aWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCBDb250ZW50RXh0ZW5z
aW9uRXJyb3I6OkpTT05SZWRpcmVjdFVSTFNjaGVtZUludmFsaWQpOworICAgIGNoZWNrQ29tcGls
ZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcInJlZGlyZWN0XCIsXCJyZWRpcmVjdFwi
OntcInRyYW5zZm9ybVwiOntcInNjaGVtZVwiOlwiQWJvdXRcIn19fSxcInRyaWdnZXJcIjp7XCJ1
cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLCB7IH0sIHsgeyAiYWJvdXQiIH0gfSk7CiAg
ICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwibW9kaWZ5LWhl
YWRlcnNcIixcInJlcXVlc3QtaGVhZGVyc1wiOjV9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJc
IjpcIndlYmtpdC5vcmdcIn19XSIsIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTk1vZGlmeUhl
YWRlcnNOb3RBcnJheSk7CiAgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1wi
dHlwZVwiOlwibW9kaWZ5LWhlYWRlcnNcIixcInJlcXVlc3QtaGVhZGVyc1wiOls1XX0sXCJ0cmln
Z2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwgQ29udGVudEV4dGVuc2lv
bkVycm9yOjpKU09OTW9kaWZ5SGVhZGVyc0luZm9Ob3RBRGljdGlvbmFyeSk7CiAgICAgY2hlY2tD
b21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwibW9kaWZ5LWhlYWRlcnNcIixc
InJlcXVlc3QtaGVhZGVyc1wiOlt7fV19LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndl
YmtpdC5vcmdcIn19XSIsIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTk1vZGlmeUhlYWRlcnNN
aXNzaW5nT3BlcmF0aW9uKTsKQEAgLTMwMjQsMTEgKzMwMzUsMTEgQEAgVEVTVF9GKENvbnRlbnRF
eHRlbnNpb25UZXN0LCBTZXJpYWxpemF0aQogICAgICAgICAiaG9zdCIsCiAgICAgICAgICJwYXNz
d29yZCIsCiAgICAgICAgIHsgLyogcGF0aCAqLyB9LAotICAgICAgICAicG9ydCIsCisgICAgICAg
IDEyMywKICAgICAgICAgeyAvKiBxdWVyeSAqLyB9LAogICAgICAgICAic2NoZW1lIiwKICAgICAg
ICAgInVzZXJuYW1lIgotICAgIH0gfSB9LCA3NSk7CisgICAgfSB9IH0sIDcwKTsKICAgICBjaGVj
a1JlZGlyZWN0QWN0aW9uU2VyaWFsaXphdGlvbih7IHsgUmVkaXJlY3RBY3Rpb246OlVSTFRyYW5z
Zm9ybUFjdGlvbiB7IHsgfSwgeyB9LCB7IH0sIHsgfSwgeyB9LCB7ICJxdWVyeSIgfSwgeyB9LCB7
IH0gfSB9IH0sIDIwKTsKICAgICBjaGVja1JlZGlyZWN0QWN0aW9uU2VyaWFsaXphdGlvbih7IHsg
UmVkaXJlY3RBY3Rpb246OlVSTFRyYW5zZm9ybUFjdGlvbiB7IHsgfSwgeyB9LCB7IH0sIHsgfSwg
eyB9LAogICAgICAgICB7IFJlZGlyZWN0QWN0aW9uOjpVUkxUcmFuc2Zvcm1BY3Rpb246OlF1ZXJ5
VHJhbnNmb3JtIHsgeyB7ICJrZXkxIiwgZmFsc2UsICJ2YWx1ZTEiIH0sIHsgImtlefCfkqkiLCBm
YWxzZSwgInZhbHVlMiIgfSB9LCB7ICJ0ZXN0U3RyaW5nMSIsICJ0ZXN0U3RyaW5nMiIgfSB9IH0s
IHsgfSwgeyB9LApAQCAtMzA0OCwzICszMDU5LDUgQEAgVEVTVF9GKENvbnRlbnRFeHRlbnNpb25U
ZXN0LCBTZXJpYWxpemF0aQogfQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCisKKyNl
bmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQpJbmRleDogVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL0RGQUNvbWJpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvREZBQ29tYmluZXIuY3BwCShyZXZpc2lvbiAyODU5
NTQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvREZBQ29tYmluZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw4IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIK
IAorI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisKICNpbmNsdWRlICJERkFIZWxwZXJz
LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9ERkFDb21iaW5lci5oPgogI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+CkBAIC0xMTksMyArMTIxLDUgQEAgVEVTVF9GKERGQUNvbWJpbmVyVGVzdCwgQ29t
YmluZWRJbnB1dFJlYQogfQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL0RGQUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvREZBSGVscGVycy5oCShyZXZpc2lvbiAyODU5NTQpCisrKyBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvREZBSGVscGVycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNSw2ICsyNSw4IEBACiAKICNwcmFnbWEgb25jZQogCisjaWYgRU5BQkxFKENPTlRF
TlRfRVhURU5TSU9OUykKKwogI2luY2x1ZGUgPFdlYkNvcmUvQ29tYmluZWRVUkxGaWx0ZXJzLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9ORkEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05GQVRvREZBLmg+
CkBAIC02NywzICs2OSw1IEBAIHN0YXRpYyBDb250ZW50RXh0ZW5zaW9uczo6REZBIGJ1aWxkREZB
RnIKIH0KIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQorCisjZW5kaWYgLy8gRU5BQkxF
KENPTlRFTlRfRVhURU5TSU9OUykKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9ERkFNaW5pbWl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9ERkFNaW5pbWl6ZXIuY3BwCShyZXZpc2lvbiAyODU5NTQpCisrKyBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvREZBTWluaW1pemVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjUsNiArMjUsOCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKKyNpZiBFTkFC
TEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCiAjaW5jbHVkZSAiREZBSGVscGVycy5oIgogI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKQEAgLTExOSwzICsxMjEsNSBAQCBURVNUX0YoREZBTWlu
aW1pemVyVGVzdCwgU2ltcGxlRmFsbEJhY2tUCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJL
aXRBUEkKKworI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3Jl
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
V0tDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0JKHJldmlzaW9uIDI4NTk1NCkKKysrIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0J
KHdvcmtpbmcgY29weSkKQEAgLTI4LDExICsyOCwxNSBAQAogCiAjaW1wb3J0ICJQbGF0Zm9ybVV0
aWxpdGllcy5oIgogI2ltcG9ydCAiVGVzdC5oIgorI2ltcG9ydCAiVGVzdE5hdmlnYXRpb25EZWxl
Z2F0ZS5oIgorI2ltcG9ydCAiVGVzdFVSTFNjaGVtZUhhbmRsZXIuaCIKICNpbXBvcnQgPFdlYktp
dC9XS0NvbnRlbnRSdWxlTGlzdC5oPgogI2ltcG9ydCA8V2ViS2l0L1dLQ29udGVudFJ1bGVMaXN0
U3RvcmVQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJwYWdlUHJlZmVyZW5jZXNQcml2
YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oPgog
I2ltcG9ydCA8V2ViS2l0L19XS1VzZXJDb250ZW50RmlsdGVyLmg+CiAjaW1wb3J0IDx3dGYvUmV0
YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CiAKIGNsYXNzIFdLQ29udGVudFJ1bGVM
aXN0U3RvcmVUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgewogcHVibGljOgpAQCAtNDc0LDMg
KzQ3OCwyNzYgQEAgVEVTVF9GKFdLQ29udGVudFJ1bGVMaXN0U3RvcmVUZXN0LCBfV0tVcwogICAg
IH1dOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUxvb2tpbmdVcCk7CiB9CisK
K3N0YXRpYyBSZXRhaW5QdHI8V0tDb250ZW50UnVsZUxpc3Q+IGNvbXBpbGVDb250ZW50UnVsZUxp
c3QoY29uc3QgY2hhcioganNvbiwgTlNTdHJpbmcgKmlkZW50aWZpZXIgPSBAInRlc3RpZGVudGlm
aWVyIikKK3sKKyAgICBbW1dLQ29udGVudFJ1bGVMaXN0U3RvcmUgZGVmYXVsdFN0b3JlXSBfcmVt
b3ZlQWxsQ29udGVudFJ1bGVMaXN0c107CisKKyAgICBfX2Jsb2NrIFJldGFpblB0cjxXS0NvbnRl
bnRSdWxlTGlzdD4gbGlzdDsKKyAgICBbW1dLQ29udGVudFJ1bGVMaXN0U3RvcmUgZGVmYXVsdFN0
b3JlXSBfY29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6QCJ0ZXN0aWRlbnRpZmll
ciIgZW5jb2RlZENvbnRlbnRSdWxlTGlzdDpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVz
IiwganNvbl0gYWxsb3dlZFJlZGlyZWN0U2NoZW1lczpbTlNTZXQgc2V0V2l0aE9iamVjdHM6QCJ0
ZXN0c2NoZW1lIiwgQCJvdGhlcnRlc3RzY2hlbWUiLCBuaWxdIGNvbXBsZXRpb25IYW5kbGVyOl4o
V0tDb250ZW50UnVsZUxpc3QgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgRVhQ
RUNUX05VTEwoZXJyb3IpOworICAgICAgICBsaXN0ID0gZmlsdGVyOworICAgIH1dOworICAgIHdo
aWxlICghbGlzdCkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoKTsK
KworICAgIHJldHVybiBsaXN0OworfQorCitzdGF0aWMgUmV0YWluUHRyPFRlc3ROYXZpZ2F0aW9u
RGVsZWdhdGU+IG5hdmlnYXRpb25EZWxlZ2F0ZUFsbG93aW5nQWN0aXZlQWN0aW9uc09uVGVzdEhv
c3QoKQoreworICAgIHN0YXRpYyBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbVGVzdE5hdmlnYXRp
b25EZWxlZ2F0ZSBuZXddKTsKKyAgICBkZWxlZ2F0ZS5nZXQoKS5kZWNpZGVQb2xpY3lGb3JOYXZp
Z2F0aW9uQWN0aW9uV2l0aFByZWZlcmVuY2VzID0gXihXS05hdmlnYXRpb25BY3Rpb24gKiwgV0tX
ZWJwYWdlUHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzLCB2b2lkICheZGVjaXNpb25IYW5kbGVyKShX
S05hdmlnYXRpb25BY3Rpb25Qb2xpY3ksIFdLV2VicGFnZVByZWZlcmVuY2VzICopKSB7CisgICAg
ICAgIHByZWZlcmVuY2VzLl9hY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25QYXR0ZXJucyA9IFtO
U1NldCBzZXRXaXRoT2JqZWN0OkAiKjovL3Rlc3Rob3N0LyoiXTsKKyAgICAgICAgZGVjaXNpb25I
YW5kbGVyKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeUFsbG93LCBwcmVmZXJlbmNlcyk7CisgICAg
fTsKKyAgICByZXR1cm4gZGVsZWdhdGU7Cit9CisKK1RFU1RfRihXS0NvbnRlbnRSdWxlTGlzdFN0
b3JlVGVzdCwgTW9kaWZ5SGVhZGVycykKK3sKKyAgICBhdXRvIGxpc3QgPSBjb21waWxlQ29udGVu
dFJ1bGVMaXN0KFIiSlNPTigKKyAgICAgICAgWyB7CisgICAgICAgICAgICAiYWN0aW9uIjogeyAi
dHlwZSI6ICJtb2RpZnktaGVhZGVycyIsICJyZXF1ZXN0LWhlYWRlcnMiOiBbIHsKKyAgICAgICAg
ICAgICAgICAib3BlcmF0aW9uIjogInNldCIsCisgICAgICAgICAgICAgICAgImhlYWRlciI6ICJ0
ZXN0a2V5IiwKKyAgICAgICAgICAgICAgICAidmFsdWUiOiAidGVzdHZhbHVlIgorICAgICAgICAg
ICAgfSBdIH0sCisgICAgICAgICAgICAidHJpZ2dlciI6IHsgInVybC1maWx0ZXIiOiAidGVzdHNj
aGVtZSIgfQorICAgICAgICB9LCB7CisgICAgICAgICAgICAiYWN0aW9uIjogeyAidHlwZSI6ICJt
b2RpZnktaGVhZGVycyIsICJyZXF1ZXN0LWhlYWRlcnMiOiBbIHsKKyAgICAgICAgICAgICAgICAi
b3BlcmF0aW9uIjogInJlbW92ZSIsCisgICAgICAgICAgICAgICAgImhlYWRlciI6ICJBY2NlcHQi
CisgICAgICAgICAgICB9IF0gfSwKKyAgICAgICAgICAgICJ0cmlnZ2VyIjogeyAidXJsLWZpbHRl
ciI6ICJ0ZXN0c2NoZW1lIiB9CisgICAgICAgIH0sIHsKKyAgICAgICAgICAgICJhY3Rpb24iOiB7
ICJ0eXBlIjogIm1vZGlmeS1oZWFkZXJzIiwgInJlcXVlc3QtaGVhZGVycyI6IFsgeworICAgICAg
ICAgICAgICAgICJvcGVyYXRpb24iOiAiYXBwZW5kIiwKKyAgICAgICAgICAgICAgICAiaGVhZGVy
IjogIkNvbnRlbnQtVHlwZSIsCisgICAgICAgICAgICAgICAgInZhbHVlIjogIk1vZGlmaWVkLWJ5
LXRlc3QiCisgICAgICAgICAgICB9IF0gfSwKKyAgICAgICAgICAgICJ0cmlnZ2VyIjogeyAidXJs
LWZpbHRlciI6ICJ0ZXN0c2NoZW1lIiB9CisgICAgICAgIH0gXQorICAgIClKU09OIik7CisKKyAg
ICBfX2Jsb2NrIGJvb2wgcmVjZWl2ZWRBbGxSZXF1ZXN0cyB7IGZhbHNlIH07CisgICAgYXV0byBo
YW5kbGVyID0gYWRvcHROUyhbVGVzdFVSTFNjaGVtZUhhbmRsZXIgbmV3XSk7CisgICAgaGFuZGxl
ci5nZXQoKS5zdGFydFVSTFNjaGVtZVRhc2tIYW5kbGVyID0gXihXS1dlYlZpZXcgKiwgaWQgPFdL
VVJMU2NoZW1lVGFzaz4gdGFzaykgeworICAgICAgICBOU1N0cmluZyAqcGF0aCA9IHRhc2sucmVx
dWVzdC5VUkwucGF0aDsKKyAgICAgICAgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIE5TU3RyaW5n
ICo+ICpmaWVsZHMgPSBbdGFzay5yZXF1ZXN0IGFsbEhUVFBIZWFkZXJGaWVsZHNdOworICAgICAg
ICBpZiAoW3BhdGggaXNFcXVhbFRvU3RyaW5nOkAiL21haW4uaHRtbCJdKSB7CisgICAgICAgICAg
ICBFWFBFQ1RfV0tfU1RSRVEoZmllbGRzW0AiQ29udGVudC1UeXBlIl0sICJNb2RpZmllZC1ieS10
ZXN0Iik7CisgICAgICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoZmllbGRzW0AidGVzdGtleSJdLCAi
dGVzdHZhbHVlIik7CisgICAgICAgICAgICBFWFBFQ1RfTlVMTChmaWVsZHNbQCJBY2NlcHQiXSk7
CisgICAgICAgICAgICByZXR1cm4gcmVzcG9uZCh0YXNrLCAiPGlmcmFtZSBzcmM9Jy8vb3RoZXJo
b3N0L2ZyYW1lLmh0bWwnPjwvaWZyYW1lPiIpOworICAgICAgICB9CisgICAgICAgIGlmIChbcGF0
aCBpc0VxdWFsVG9TdHJpbmc6QCIvZnJhbWUuaHRtbCJdKSB7CisgICAgICAgICAgICBFWFBFQ1Rf
TlVMTChmaWVsZHNbQCJDb250ZW50LVR5cGUiXSk7CisgICAgICAgICAgICBFWFBFQ1RfTlVMTChm
aWVsZHNbQCJ0ZXN0a2V5Il0pOworICAgICAgICAgICAgRVhQRUNUX05PVF9OVUxMKGZpZWxkc1tA
IkFjY2VwdCJdKTsKKyAgICAgICAgICAgIHJldHVybiByZXNwb25kKHRhc2ssICI8c2NyaXB0PmZl
dGNoKCcvL3Rlc3Rob3N0L2ZldGNoLnR4dCcse2hlYWRlcnM6IHsnQ29udGVudC1UeXBlJzogJ2Fw
cGxpY2F0aW9uL2pzb24nfX0pPC9zY3JpcHQ+Iik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFtw
YXRoIGlzRXF1YWxUb1N0cmluZzpAIi9mZXRjaC50eHQiXSkgeworICAgICAgICAgICAgRVhQRUNU
X1dLX1NUUkVRKGZpZWxkc1tAIkNvbnRlbnQtVHlwZSJdLCAiYXBwbGljYXRpb24vanNvbjsgTW9k
aWZpZWQtYnktdGVzdCIpOworICAgICAgICAgICAgRVhQRUNUX1dLX1NUUkVRKGZpZWxkc1tAInRl
c3RrZXkiXSwgInRlc3R2YWx1ZSIpOworICAgICAgICAgICAgRVhQRUNUX05VTEwoZmllbGRzW0Ai
QWNjZXB0Il0pOworICAgICAgICAgICAgcmVjZWl2ZWRBbGxSZXF1ZXN0cyA9IHRydWU7CisgICAg
ICAgICAgICByZXR1cm4gcmVzcG9uZCh0YXNrLCAiIik7CisgICAgICAgIH0KKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfTsKKworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFk
b3B0TlMoW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gbmV3XSk7CisgICAgW1tjb25maWd1cmF0aW9u
IHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkQ29udGVudFJ1bGVMaXN0Omxpc3QuZ2V0KCldOwor
ICAgIFtjb25maWd1cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBmb3JV
UkxTY2hlbWU6QCJ0ZXN0c2NoZW1lIl07CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1dL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU1plcm9SZWN0IGNvbmZpZ3VyYXRpb246Y29u
ZmlndXJhdGlvbi5nZXQoKV0pOworICAgIHdlYlZpZXcuZ2V0KCkubmF2aWdhdGlvbkRlbGVnYXRl
ID0gbmF2aWdhdGlvbkRlbGVnYXRlQWxsb3dpbmdBY3RpdmVBY3Rpb25zT25UZXN0SG9zdCgpLmdl
dCgpOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhV
Ukw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJ0ZXN0c2NoZW1lOi8vdGVzdGhvc3QvbWFpbi5odG1s
Il1dXTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkQWxsUmVxdWVzdHMp
OworICAgIAorICAgIC8vIEZJWE1FOiBBcHBlbmRpbmcgdG8gdGhlIFVzZXItQWdlbnQgcmVwbGFj
ZXMgdGhlIHVzZXIgYWdlbnQgYmVjYXVzZSB3ZSBoYXZlbid0IGFkZGVkIHRoZSB1c2VyIGFnZW50
IHlldCB3aGVuIHByb2Nlc3NpbmcgdGhlIHJlcXVlc3QuCit9CisKK1RFU1RfRihXS0NvbnRlbnRS
dWxlTGlzdFN0b3JlVGVzdCwgUmVkaXJlY3QpCit7CisgICAgYXV0byBsaXN0ID0gY29tcGlsZUNv
bnRlbnRSdWxlTGlzdChSIkpTT04oCisgICAgICAgIFsgeworICAgICAgICAgICAgImFjdGlvbiI6
IHsgInR5cGUiOiAicmVkaXJlY3QiLCAicmVkaXJlY3QiOiB7CisgICAgICAgICAgICAgICAgInVy
bCI6ICJvdGhlcnRlc3RzY2hlbWU6Ly9ub3QtdGVzdGhvc3QvMS1yZWRpcmVjdGVkLnR4dCIKKyAg
ICAgICAgICAgIH0gfSwKKyAgICAgICAgICAgICJ0cmlnZ2VyIjogeyAidXJsLWZpbHRlciI6ICIx
LnR4dCIgfQorICAgICAgICB9LCB7CisgICAgICAgICAgICAiYWN0aW9uIjogeyAidHlwZSI6ICJy
ZWRpcmVjdCIsICJyZWRpcmVjdCI6IHsgInRyYW5zZm9ybSI6IHsKKyAgICAgICAgICAgICAgICAi
cG9ydCI6ICIxMjMiLAorICAgICAgICAgICAgICAgICJpZ25vcmVkLWNvbW1lbnQiOiAiMTIzIGlz
IGEgZm9yYmlkZGVuIHBvcnQsIHNvIHRoaXMgVVJMIGlzIG5vdCBzZWVuIGJ5IHRoZSBXS1VSTFNj
aGVtZUhhbmRsZXIuIgorICAgICAgICAgICAgfSB9IH0sCisgICAgICAgICAgICAidHJpZ2dlciI6
IHsgInVybC1maWx0ZXIiOiAiMi50eHQiIH0KKyAgICAgICAgfSwgeworICAgICAgICAgICAgImFj
dGlvbiI6IHsgInR5cGUiOiAicmVkaXJlY3QiLCAicmVkaXJlY3QiOiB7ICJ0cmFuc2Zvcm0iOiB7
CisgICAgICAgICAgICAgICAgImhvc3QiOiAibmV3aG9zdCIsCisgICAgICAgICAgICAgICAgInVz
ZXJuYW1lIjogIm5ld3VzZXJuYW1lIiwKKyAgICAgICAgICAgICAgICAicG9ydCI6ICI0NDMiCisg
ICAgICAgICAgICB9IH0gfSwKKyAgICAgICAgICAgICJ0cmlnZ2VyIjogeyAidXJsLWZpbHRlciI6
ICIzLnR4dCIgfQorICAgICAgICB9LCB7CisgICAgICAgICAgICAiYWN0aW9uIjogeyAidHlwZSI6
ICJyZWRpcmVjdCIsICJyZWRpcmVjdCI6IHsgInRyYW5zZm9ybSI6IHsKKyAgICAgICAgICAgICAg
ICAicG9ydCI6ICIiLAorICAgICAgICAgICAgICAgICJzY2hlbWUiOiAib3RoZXJ0ZXN0c2NoZW1l
IiwKKyAgICAgICAgICAgICAgICAicXVlcnkiOiAiP2tleT12YWx1ZSIKKyAgICAgICAgICAgIH0g
fSB9LAorICAgICAgICAgICAgInRyaWdnZXIiOiB7ICJ1cmwtZmlsdGVyIjogIjQudHh0IiB9Cisg
ICAgICAgIH0sIHsKKyAgICAgICAgICAgICJhY3Rpb24iOiB7ICJ0eXBlIjogInJlZGlyZWN0Iiwg
InJlZGlyZWN0IjogeyAidHJhbnNmb3JtIjogeworICAgICAgICAgICAgICAgICJwYXNzd29yZCI6
ICJ0ZXN0cGFzc3dvcmQiLAorICAgICAgICAgICAgICAgICJxdWVyeSI6ICIiLAorICAgICAgICAg
ICAgICAgICJmcmFnbWVudCI6ICIjZnJhZ21lbnQtdG8tYmUtYWRkZWQiCisgICAgICAgICAgICB9
IH0gfSwKKyAgICAgICAgICAgICJ0cmlnZ2VyIjogeyAidXJsLWZpbHRlciI6ICI1LnR4dCIgfQor
ICAgICAgICB9LCB7CisgICAgICAgICAgICAiYWN0aW9uIjogeyAidHlwZSI6ICJyZWRpcmVjdCIs
ICJyZWRpcmVjdCI6IHsgInRyYW5zZm9ybSI6IHsKKyAgICAgICAgICAgICAgICAicGFzc3dvcmQi
OiAidGVzdHBhc3N3b3JkIiwKKyAgICAgICAgICAgICAgICAiZnJhZ21lbnQiOiAiIgorICAgICAg
ICAgICAgfSB9IH0sCisgICAgICAgICAgICAidHJpZ2dlciI6IHsgInVybC1maWx0ZXIiOiAiNi50
eHQiIH0KKyAgICAgICAgfSwgeworICAgICAgICAgICAgImFjdGlvbiI6IHsgInR5cGUiOiAicmVk
aXJlY3QiLCAicmVkaXJlY3QiOiB7ICJ0cmFuc2Zvcm0iOiB7CisgICAgICAgICAgICAgICAgInF1
ZXJ5IjogIj8iLAorICAgICAgICAgICAgICAgICJmcmFnbWVudCI6ICIjIgorICAgICAgICAgICAg
fSB9IH0sCisgICAgICAgICAgICAidHJpZ2dlciI6IHsgInVybC1maWx0ZXIiOiAiNy50eHQiIH0K
KyAgICAgICAgfSwgeworICAgICAgICAgICAgImFjdGlvbiI6IHsgInR5cGUiOiAicmVkaXJlY3Qi
LCAicmVkaXJlY3QiOiB7ICJ0cmFuc2Zvcm0iOiB7CisgICAgICAgICAgICAgICAgInF1ZXJ5LXRy
YW5zZm9ybSI6IHsKKyAgICAgICAgICAgICAgICAgICAgInJlbW92ZS1wYXJhbWV0ZXJzIjogWyAi
cGFyYW1ldGVyLXRvLXJlbW92ZSIgXSwKKyAgICAgICAgICAgICAgICAgICAgImFkZC1vci1yZXBs
YWNlLXBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICB7ICJrZXkiOiAia2V5
LXRvLWFkZCIsICJ2YWx1ZSI6ICJ2YWx1ZS10by1hZGQiIH0sCisgICAgICAgICAgICAgICAgICAg
ICAgICB7ICJrZXkiOiAia2V5LXRvLXJlcGxhY2Utb25seSIsICJ2YWx1ZSI6ICJ2YWx1ZS10by1y
ZXBsYWNlLW9ubHkiLCAicmVwbGFjZS1vbmx5IjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgICAg
ICAgICAgeyAia2V5IjogImtleS10by1yZXBsYWNlLW9ubHktYnV0LW5vdC1mb3VuZCIsICJ2YWx1
ZSI6ICJ2YWx1ZS10by1yZXBsYWNlLW9ubHktYnV0LW5vdC1mb3VuZCIsICJyZXBsYWNlLW9ubHki
OiB0cnVlIH0KKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0gfSB9LAorICAgICAgICAgICAgInRyaWdnZXIiOiB7ICJ1cmwtZmlsdGVyIjogIjgu
dHh0IiB9CisgICAgICAgIH0gXQorICAgIClKU09OIik7CisKKyAgICBfX2Jsb2NrIGJvb2wgcmVj
ZWl2ZWRBbGxSZXF1ZXN0cyB7IGZhbHNlIH07CisgICAgX19ibG9jayBhdXRvIHVybHMgPSBhZG9w
dE5TKFtOU011dGFibGVBcnJheSBuZXddKTsKKyAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtU
ZXN0VVJMU2NoZW1lSGFuZGxlciBuZXddKTsKKyAgICBoYW5kbGVyLmdldCgpLnN0YXJ0VVJMU2No
ZW1lVGFza0hhbmRsZXIgPSBeKFdLV2ViVmlldyAqLCBpZCA8V0tVUkxTY2hlbWVUYXNrPiB0YXNr
KSB7CisgICAgICAgIE5TVVJMICp1cmwgPSB0YXNrLnJlcXVlc3QuVVJMOworICAgICAgICBbdXJs
cyBhZGRPYmplY3Q6dXJsXTsKKyAgICAgICAgTlNTdHJpbmcgKnBhdGggPSB1cmwucGF0aDsKKyAg
ICAgICAgaWYgKFtwYXRoIGlzRXF1YWxUb1N0cmluZzpAIi9tYWluLmh0bWwiXSkgeworICAgICAg
ICAgICAgcmV0dXJuIHJlc3BvbmQodGFzaywgUiJIVE1MKAorICAgICAgICAgICAgICAgIDxzY3Jp
cHQ+CisgICAgICAgICAgICAgICAgICAgIGFzeW5jIGZ1bmN0aW9uIGZldGNoU3VicmVzb3VyY2Vz
KCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsg
YXdhaXQgZmV0Y2goJzEudHh0JykgfSBjYXRjaChlKSB7IH07CisgICAgICAgICAgICAgICAgICAg
ICAgICB0cnkgeyBhd2FpdCBmZXRjaCgnLy9ub3QtdGVzdGhvc3Qtc2hvdWxkLW5vdC10cmlnZ2Vy
LWFjdGlvbi8yLnR4dCcsIHttb2RlOiduby1jb3JzJ30pIH0gY2F0Y2goZSkgeyB9OworICAgICAg
ICAgICAgICAgICAgICAgICAgdHJ5IHsgYXdhaXQgZmV0Y2goJy8vdGVzdGhvc3QvMi50eHQnKSB9
IGNhdGNoKGUpIHsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7IGF3YWl0IGZldGNo
KCcvMy50eHQ/cXVlcnktc2hvdWxkLW5vdC1iZS1yZW1vdmVkJykgfSBjYXRjaChlKSB7IH07Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0cnkgeyBhd2FpdCBmZXRjaCgnLy90ZXN0aG9zdDo4MC80
LnR4dCNmcmFnbWVudC1zaG91bGQtbm90LWJlLXJlbW92ZWQnKSB9IGNhdGNoKGUpIHsgfTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRyeSB7IGF3YWl0IGZldGNoKCc1LnR4dD9xdWVyeS1zaG91
bGQtYmUtcmVtb3ZlZCcpIH0gY2F0Y2goZSkgeyB9OworICAgICAgICAgICAgICAgICAgICAgICAg
dHJ5IHsgYXdhaXQgZmV0Y2goJzYudHh0I2ZyYWdtZW50LXNob3VsZC1iZS1yZW1vdmVkJykgfSBj
YXRjaChlKSB7IH07CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeyBhd2FpdCBmZXRjaCgn
Ny50eHQnKSB9IGNhdGNoKGUpIHsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7IGF3
YWl0IGZldGNoKCc4LnR4dD9rZXktdG8tcmVwbGFjZS1vbmx5PXByZS1yZXBsYWNlbWVudC12YWx1
ZScpIH0gY2F0Y2goZSkgeyB9OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGZldGNoU3VicmVzb3VyY2VzKCk7CisgICAgICAgICAgICAgICAgPC9zY3JpcHQ+Cisg
ICAgICAgICAgICApSFRNTCIpOworICAgICAgICB9CisgICAgICAgIGlmIChbcGF0aCBpc0VxdWFs
VG9TdHJpbmc6QCIvOC50eHQiXSkKKyAgICAgICAgICAgIHJlY2VpdmVkQWxsUmVxdWVzdHMgPSB0
cnVlOworICAgICAgICByZXNwb25kKHRhc2ssICIiKTsKKyAgICB9OworCisgICAgYXV0byBjb25m
aWd1cmF0aW9uID0gYWRvcHROUyhbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBuZXddKTsKKyAgICBb
W2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRDb250ZW50UnVsZUxpc3Q6
bGlzdC5nZXQoKV07CisgICAgW2NvbmZpZ3VyYXRpb24gc2V0VVJMU2NoZW1lSGFuZGxlcjpoYW5k
bGVyLmdldCgpIGZvclVSTFNjaGVtZTpAInRlc3RzY2hlbWUiXTsKKyAgICBbY29uZmlndXJhdGlv
biBzZXRVUkxTY2hlbWVIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgZm9yVVJMU2NoZW1lOkAib3RoZXJ0
ZXN0c2NoZW1lIl07CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpOU1plcm9SZWN0IGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5n
ZXQoKV0pOworICAgIHdlYlZpZXcuZ2V0KCkubmF2aWdhdGlvbkRlbGVnYXRlID0gbmF2aWdhdGlv
bkRlbGVnYXRlQWxsb3dpbmdBY3RpdmVBY3Rpb25zT25UZXN0SG9zdCgpLmdldCgpOworICAgIFt3
ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVS
TFdpdGhTdHJpbmc6QCJ0ZXN0c2NoZW1lOi8vdGVzdGhvc3QvbWFpbi5odG1sIl1dXTsKKyAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkQWxsUmVxdWVzdHMpOworCisgICAgVmVj
dG9yPGNvbnN0IGNoYXIqPiBleHBlY3RlZFJlcXVlc3RlZFVSTHMgeworICAgICAgICAidGVzdHNj
aGVtZTovL3Rlc3Rob3N0L21haW4uaHRtbCIsCisgICAgICAgICJvdGhlcnRlc3RzY2hlbWU6Ly9u
b3QtdGVzdGhvc3QvMS1yZWRpcmVjdGVkLnR4dCIsCisgICAgICAgICJ0ZXN0c2NoZW1lOi8vbm90
LXRlc3Rob3N0LXNob3VsZC1ub3QtdHJpZ2dlci1hY3Rpb24vMi50eHQiLAorICAgICAgICAidGVz
dHNjaGVtZTovL25ld3VzZXJuYW1lQG5ld2hvc3Q6NDQzLzMudHh0P3F1ZXJ5LXNob3VsZC1ub3Qt
YmUtcmVtb3ZlZCIsCisgICAgICAgICJvdGhlcnRlc3RzY2hlbWU6Ly90ZXN0aG9zdC80LnR4dD9r
ZXk9dmFsdWUjZnJhZ21lbnQtc2hvdWxkLW5vdC1iZS1yZW1vdmVkIiwKKyAgICAgICAgInRlc3Rz
Y2hlbWU6Ly86dGVzdHBhc3N3b3JkQHRlc3Rob3N0LzUudHh0I2ZyYWdtZW50LXRvLWJlLWFkZGVk
IiwKKyAgICAgICAgInRlc3RzY2hlbWU6Ly86dGVzdHBhc3N3b3JkQHRlc3Rob3N0LzYudHh0IiwK
KyAgICAgICAgInRlc3RzY2hlbWU6Ly90ZXN0aG9zdC83LnR4dD8jIiwKKyAgICAgICAgInRlc3Rz
Y2hlbWU6Ly90ZXN0aG9zdC84LnR4dD9rZXktdG8tcmVwbGFjZS1vbmx5PXZhbHVlLXRvLXJlcGxh
Y2Utb25seSZrZXktdG8tYWRkPXZhbHVlLXRvLWFkZCIsCisgICAgfTsKKyAgICBFWFBFQ1RfRVEo
ZXhwZWN0ZWRSZXF1ZXN0ZWRVUkxzLnNpemUoKSwgW3VybHMgY291bnRdKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGV4cGVjdGVkUmVxdWVzdGVkVVJMcy5zaXplKCk7IGkrKykKKyAgICAg
ICAgRVhQRUNUX1dLX1NUUkVRKGV4cGVjdGVkUmVxdWVzdGVkVVJMc1tpXSwgW1t1cmxzIG9iamVj
dEF0SW5kZXg6aV0gYWJzb2x1dGVTdHJpbmddKTsKK30KKworVEVTVF9GKFdLQ29udGVudFJ1bGVM
aXN0U3RvcmVUZXN0LCBOdWxsUGF0dGVyblNldCkKK3sKKyAgICBhdXRvIGxpc3QgPSBjb21waWxl
Q29udGVudFJ1bGVMaXN0KFIiSlNPTigKKyAgICAgICAgWyB7CisgICAgICAgICAgICAiYWN0aW9u
IjogeyAidHlwZSI6ICJyZWRpcmVjdCIsICJyZWRpcmVjdCI6IHsKKyAgICAgICAgICAgICAgICAi
dXJsIjogInRlc3RzY2hlbWU6Ly90ZXN0aG9zdC9tYWluLXJlZGlyZWN0ZWQuaHRtbCIKKyAgICAg
ICAgICAgIH0gfSwKKyAgICAgICAgICAgICJ0cmlnZ2VyIjogeyAidXJsLWZpbHRlciI6ICJtYWlu
Lmh0bWwiIH0KKyAgICAgICAgfSBdCisgICAgKUpTT04iKTsKKworICAgIF9fYmxvY2sgc3RkOjpv
cHRpb25hbDxib29sPiByZWRpcmVjdGVkUmVzdWx0OworICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0
TlMoW1Rlc3RVUkxTY2hlbWVIYW5kbGVyIG5ld10pOworICAgIGhhbmRsZXIuZ2V0KCkuc3RhcnRV
UkxTY2hlbWVUYXNrSGFuZGxlciA9IF4oV0tXZWJWaWV3ICosIGlkIDxXS1VSTFNjaGVtZVRhc2s+
IHRhc2spIHsKKyAgICAgICAgTlNTdHJpbmcgKnBhdGggPSB0YXNrLnJlcXVlc3QuVVJMLnBhdGg7
CisgICAgICAgIGlmIChbcGF0aCBpc0VxdWFsVG9TdHJpbmc6QCIvbWFpbi5odG1sIl0pCisgICAg
ICAgICAgICByZWRpcmVjdGVkUmVzdWx0ID0gZmFsc2U7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgRVhQRUNUX1dLX1NUUkVRKHBhdGgsICIvbWFpbi1yZWRpcmVjdGVkLmh0bWwiKTsKKyAg
ICAgICAgICAgIHJlZGlyZWN0ZWRSZXN1bHQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIHJl
c3BvbmQodGFzaywgIiIpOworICAgIH07CisKKyAgICBfX2Jsb2NrIGVudW0gY2xhc3MgRGVsZWdh
dGVBY3Rpb24gOiB1aW50OF90IHsKKyAgICAgICAgQWxsb3dBbGwsCisgICAgICAgIEFsbG93Tm9u
ZSwKKyAgICAgICAgQWxsb3dUZXN0SG9zdCwKKyAgICB9IGRlbGVnYXRlQWN0aW9uOworICAgIGF1
dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtUZXN0TmF2aWdhdGlvbkRlbGVnYXRlIG5ld10pOworICAg
IGRlbGVnYXRlLmdldCgpLmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25XaXRoUHJlZmVy
ZW5jZXMgPSBeKFdLTmF2aWdhdGlvbkFjdGlvbiAqLCBXS1dlYnBhZ2VQcmVmZXJlbmNlcyAqcHJl
ZmVyZW5jZXMsIHZvaWQgKF5kZWNpc2lvbkhhbmRsZXIpKFdLTmF2aWdhdGlvbkFjdGlvblBvbGlj
eSwgV0tXZWJwYWdlUHJlZmVyZW5jZXMgKikpIHsKKyAgICAgICAgRVhQRUNUX05PVF9OVUxMKHBy
ZWZlcmVuY2VzLl9hY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25QYXR0ZXJucyk7CisgICAgICAg
IEVYUEVDVF9FUShwcmVmZXJlbmNlcy5fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uUGF0dGVy
bnMuY291bnQsIDB1KTsKKyAgICAgICAgc3dpdGNoIChkZWxlZ2F0ZUFjdGlvbikgeworICAgICAg
ICBjYXNlIERlbGVnYXRlQWN0aW9uOjpBbGxvd0FsbDoKKyAgICAgICAgICAgIHByZWZlcmVuY2Vz
Ll9hY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25QYXR0ZXJucyA9IG5pbDsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIERlbGVnYXRlQWN0aW9uOjpBbGxvd05vbmU6CisgICAgICAg
ICAgICBwcmVmZXJlbmNlcy5fYWN0aXZlQ29udGVudFJ1bGVMaXN0QWN0aW9uUGF0dGVybnMgPSBb
TlNTZXQgc2V0XTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERlbGVnYXRlQWN0
aW9uOjpBbGxvd1Rlc3RIb3N0OgorICAgICAgICAgICAgcHJlZmVyZW5jZXMuX2FjdGl2ZUNvbnRl
bnRSdWxlTGlzdEFjdGlvblBhdHRlcm5zID0gW05TU2V0IHNldFdpdGhPYmplY3Q6QCIqOi8vdGVz
dGhvc3QvKiJdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVjaXNp
b25IYW5kbGVyKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeUFsbG93LCBwcmVmZXJlbmNlcyk7Cisg
ICAgfTsKKworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1dLV2ViVmlld0NvbmZp
Z3VyYXRpb24gbmV3XSk7CisgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxl
cl0gYWRkQ29udGVudFJ1bGVMaXN0Omxpc3QuZ2V0KCldOworICAgIFtjb25maWd1cmF0aW9uIHNl
dFVSTFNjaGVtZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBmb3JVUkxTY2hlbWU6QCJ0ZXN0c2NoZW1l
Il07CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpOU1plcm9SZWN0IGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwor
ICAgIHdlYlZpZXcuZ2V0KCkubmF2aWdhdGlvbkRlbGVnYXRlID0gZGVsZWdhdGUuZ2V0KCk7CisK
KyAgICBhdXRvIGdldFJlZGlyZWN0UmVzdWx0ID0gXihEZWxlZ2F0ZUFjdGlvbiBhY3Rpb24pIHsK
KyAgICAgICAgZGVsZWdhdGVBY3Rpb24gPSBhY3Rpb247CisgICAgICAgIHJlZGlyZWN0ZWRSZXN1
bHQgPSBzdGQ6Om51bGxvcHQ7CisgICAgICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJl
cXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJ0ZXN0c2NoZW1lOi8v
dGVzdGhvc3QvbWFpbi5odG1sIl1dXTsKKyAgICAgICAgd2hpbGUgKCFyZWRpcmVjdGVkUmVzdWx0
KQorICAgICAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoKTsKKyAgICAg
ICAgcmV0dXJuICpyZWRpcmVjdGVkUmVzdWx0OworICAgIH07CisgICAgRVhQRUNUX1RSVUUoZ2V0
UmVkaXJlY3RSZXN1bHQoRGVsZWdhdGVBY3Rpb246OkFsbG93QWxsKSk7CisgICAgRVhQRUNUX0ZB
TFNFKGdldFJlZGlyZWN0UmVzdWx0KERlbGVnYXRlQWN0aW9uOjpBbGxvd05vbmUpKTsKKyAgICBF
WFBFQ1RfVFJVRShnZXRSZWRpcmVjdFJlc3VsdChEZWxlZ2F0ZUFjdGlvbjo6QWxsb3dUZXN0SG9z
dCkpOworfQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxl
ckNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVz
dENvbnRyb2xsZXJDb2NvYS5tbQkocmV2aXNpb24gMjg1OTU0KQorKysgVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0y
NjQsNiArMjY0LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0RGVmYXVsdENhbGVuZGFyVAog
ICAgICAgICBtX2NhbGVuZGFyU3dpenpsZXIgPSBtYWtlVW5pcXVlPENsYXNzTWV0aG9kU3dpenps
ZXI+KFtOU0NhbGVuZGFyIGNsYXNzXSwgQHNlbGVjdG9yKGN1cnJlbnRDYWxlbmRhciksIHJlaW50
ZXJwcmV0X2Nhc3Q8SU1QPihzd2l6emxlZENhbGVuZGFyKSk7CiB9CiAKKyNpZiBFTkFCTEUoQ09O
VEVOVF9FWFRFTlNJT05TKQogdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRDb250ZW50RXh0ZW5z
aW9ucygpCiB7CiAgICAgX19ibG9jayBib29sIGRvbmVSZW1vdmluZyA9IGZhbHNlOwpAQCAtMjc4
LDYgKzI3OSw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0Q29udGVudEV4dGVuc2kKICAg
ICAgICAgW3BsYXRmb3JtVmlldy5jb25maWd1cmF0aW9uLnVzZXJDb250ZW50Q29udHJvbGxlciBf
cmVtb3ZlQWxsVXNlckNvbnRlbnRGaWx0ZXJzXTsKICAgICB9CiB9CisjZW5kaWYKIAogdm9pZCBU
ZXN0Q29udHJvbGxlcjo6c2V0QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKGNvbnN0IHN0ZDo6
c3RyaW5nJiBidW5kbGVJZGVudGlmaWVyKQogewpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9tYWMvVGVzdENvbnRyb2xsZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9tYWMvVGVzdENvbnRyb2xsZXJNYWMubW0JKHJldmlzaW9uIDI4NTk1NCkKKysrIFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1Rlc3RDb250cm9sbGVyTWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzUsNiArMTc1LDcgQEAgVGVzdEZlYXR1cmVzIFRlc3RDb250cm9sbGVyOjpwbGF0
Zm9ybVNwZQogICAgIHJldHVybiBmZWF0dXJlczsKIH0KIAorI2lmIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCiB2b2lkIFRlc3RDb250cm9sbGVyOjpjb25maWd1cmVDb250ZW50RXh0ZW5zaW9u
Rm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYgdGVzdCkKIHsKICAgICBpZiAoIXRlc3QudXJs
Q29udGFpbnMoImNvbnRlbnRleHRlbnNpb25zLyIpKQpAQCAtMjE2LDYgKzIxNyw3IEBAIHZvaWQg
VGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyZUNvbnRlbnRFeHQKICAgICB9XTsKICAgICBwbGF0Zm9y
bVJ1blVudGlsKGRvbmVDb21waWxpbmcsIG5vVGltZW91dCk7CiB9CisjZW5kaWYKIAogdm9pZCBU
ZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1Db25maWd1cmVWaWV3Rm9yVGVzdChjb25zdCBUZXN0SW52
b2NhdGlvbiYgdGVzdCkKIHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>