<?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>229162</bug_id>
          
          <creation_ts>2021-08-16 13:56:59 -0700</creation_ts>
          <short_desc>[LFC][IFC] Decouple line box building and vertical aligning</short_desc>
          <delta_ts>2021-08-23 17:20:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</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="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1784643</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2021-08-16 13:56:59 -0700</bug_when>
    <thetext>This is preparation for incremental inline layout. We should be able to vertically align the content without rebuilding the line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1784646</commentid>
    <comment_count>1</comment_count>
      <attachid>435630</attachid>
    <who name="alan">zalan</who>
    <bug_when>2021-08-16 14:01:15 -0700</bug_when>
    <thetext>Created attachment 435630
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786542</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-08-23 13:57:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/82260272&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786611</commentid>
    <comment_count>3</comment_count>
      <attachid>436249</attachid>
    <who name="alan">zalan</who>
    <bug_when>2021-08-23 16:50:56 -0700</bug_when>
    <thetext>Created attachment 436249
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786628</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-08-23 17:20:34 -0700</bug_when>
    <thetext>Committed r281479 (240857@main): &lt;https://commits.webkit.org/240857@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 436249.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435630</attachid>
            <date>2021-08-16 14:01:15 -0700</date>
            <delta_ts>2021-08-23 16:50:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229162-20210816140114.patch</filename>
            <type>text/plain</type>
            <size>57369</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMzgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWE0YjA2NDY0YWVkY2Ew
MDM4NjY5ZGY5NjA1NGU3NWJlYzZmYTRjZC4uMjZjNDFlNGE0ZDdhN2ZkYjhhZDRlMjUwY2FkNjg5
YTE2MzhkZmRkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDIxLTA4LTE2ICBBbGFu
IEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbTEZDXVtJRkNdIERlY291cGxl
IGxpbmUgYm94IGJ1aWxkaW5nIGFuZCB2ZXJ0aWNhbCBhbGlnbmluZworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MTYyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBpbiBwcmVwYXJhdGlvbiBm
b3Igc3VwcG9ydGluZyBpbmNyZW1lbnRhbCBpbmxpbmUgbGF5b3V0LgorICAgICAgICBXZSBzaG91
bGQgYmUgYWJsZSB0byB2ZXJ0aWNhbGx5IGFsaWduIHRoZSBpbmxpbmUgbGV2ZWwgYm94IG9uIHRo
ZSBsaW5lIHdpdGhvdXQgcmVidWlsZGluZyB0aGUgTGluZUJveC4KKworICAgICAgICAqIFNvdXJj
ZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5n
R2VvbWV0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94QnVpbGRlcjo6
Y29uc3RydWN0QW5kQWxpZ25JbmxpbmVMZXZlbEJveGVzKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZUJveEJ1aWxkZXI6OlNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudDo6cm9vdElu
bGluZUJveExvZ2ljYWxUb3AgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMaW5lQm94QnVpbGRlcjo6U2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50OjpsaW5lQm94
SGVpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJv
eEJ1aWxkZXI6OlNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudDo6c2V0RW5hYmxlZCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3hCdWlsZGVyOjpTaW1wbGlmaWVk
VmVydGljYWxBbGlnbm1lbnQ6OmlzRW5hYmxlZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICgp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94QnVpbGRlcjo6Y29t
cHV0ZUxpbmVCb3hIZWlnaHRBbmRBbGlnbklubGluZUxldmVsQm94ZXNWZXJ0aWNhbGx5KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveEJ1aWxkZXI6OlNpbXBsaWZp
ZWRWZXJ0aWNhbEFsaWdubWVudDo6U2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveEJ1aWxkZXI6OlNpbXBsaWZpZWRW
ZXJ0aWNhbEFsaWdubWVudDo6Y2FuVXNlU2ltcGxpZmllZEFsaWdubWVudCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3hCdWlsZGVyOjpTaW1wbGlmaWVkVmVydGlj
YWxBbGlnbm1lbnQ6OmFsaWduKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUJveEJ1aWxkZXI6OlNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudDo6YWRqdXN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVM
ZXZlbEJveC5oOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lu
bGluZUxpbmVCb3guaDoKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGlu
ZS9JbmxpbmVMaW5lQm94VmVydGljYWxBbGlnbmVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkxpbmVCb3hWZXJ0aWNhbEFsaWduZXI6OkxpbmVCb3hWZXJ0aWNhbEFsaWdu
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94VmVydGljYWxBbGlnbmVyOjpj
YW5Vc2VTaW1wbGlmaWVkQWxpZ25tZW50Rm9ySW5saW5lTGV2ZWxCb3gpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpMaW5lQm94VmVydGljYWxBbGlnbmVyOjphbGlnbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3hWZXJ0aWNhbEFsaWduZXI6OnNpbXBsaWZpZWRW
ZXJ0aWNhbEFsaWdubWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVC
b3hWZXJ0aWNhbEFsaWduZXI6OmNvbXB1dGVMaW5lQm94TG9naWNhbEhlaWdodCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3hWZXJ0aWNhbEFsaWduZXI6OmNvbXB1dGVS
b290SW5saW5lQm94VmVydGljYWxQb3NpdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkxpbmVCb3hWZXJ0aWNhbEFsaWduZXI6OmFsaWduSW5saW5lTGV2ZWxCb3hlcyBjb25z
dCk6CisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGlu
ZUJveFZlcnRpY2FsQWxpZ25lci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUJveFZlcnRpY2FsQWxpZ25lcjo6Zm9ybWF0dGluZ0dlb21ldHJ5IGNvbnN0KToKKwogMjAy
MS0wOC0xMyAgQWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11b
SUZDXSBBZGQgc3VwcG9ydCBmb3Igb3V0LW9mLWZsb3cgYm94IHN0YXRpYyBwb3NpdGlvbmluZwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAppbmRleCBiZWUyMzY0ZThiYWU4YTBlOTg1MmQ2YzQyM2RkMTljYTI2MGFjNDYy
Li4yZmUyYTYwMjQ0MmRiNjljYmI4OTFiMzkxZWQzZWRlNWNlMTg3MGFlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dApAQCAtMTU0MSw2ICsxNTQxLDcgQEAgbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUv
SW5saW5lRm9ybWF0dGluZ1N0YXRlLmNwcAogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxp
bmUvSW5saW5lSXRlbS5jcHAKIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGlu
ZUxpbmUuY3BwCiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lQm94
LmNwcAorbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGluZUJveFZlcnRp
Y2FsQWxpZ25lci5jcHAKIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxp
bmVCdWlsZGVyLmNwcAogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lVGV4
dEl0ZW0uY3BwCiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS90ZXh0L1RleHRVdGls
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDliNjM1OGIxYjBmMTYxYjY2ZTc3N2E5MWRiNGM3NmRkMWY2ZjZkZWIuLmU1MGQ2
ODEyNDhlMWIyNDQ1ZDAyNjljNWJjMzE4M2JkMTkwYWRjNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIxNzUsNiArMjE3NSw3
IEBACiAJCTZGQjdEMkREMjUwRkQ4MjgwMDAyMDdBQSAvKiBGbGV4Rm9ybWF0dGluZ0NvbnRleHQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGQjdEMkQ5
MjUwRkQ3RkMwMDAyMDdBQSAvKiBGbGV4Rm9ybWF0dGluZ0NvbnRleHQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RkI3RDJERTI1MEZEODJFMDAw
MjA3QUEgLyogRmxleEZvcm1hdHRpbmdTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNkZCN0QyREEyNTBGRDdGQzAwMDIwN0FBIC8qIEZsZXhGb3Jt
YXR0aW5nU3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk2RkMzRjk0NzI1MTY3NTY3MDBBNDlCRUEgLyogSW5saW5lTGluZVJ1bi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkZDM0Y5NDUyNTE2NzU2
NjAwQTQ5QkVBIC8qIElubGluZUxpbmVSdW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQk2RkM0MUFCQjI2Q0FGNzVEMDA1Qzg5MDkgLyogSW5saW5l
TGluZUJveFZlcnRpY2FsQWxpZ25lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkZDNDFBQkEyNkNBRjc1QzAwNUM4OTA5IC8qIElubGluZUxpbmVCb3hW
ZXJ0aWNhbEFsaWduZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk2RkNCREI5NzI2NURGMkM4MDAyMUVBN0IgLyogTGF5b3V0Q29udGFpbmluZ0Js
b2NrQ2hhaW5JdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNkZDQkRCOTUyNjVERjJDNzAwMjFFQTdCIC8qIExheW91dENvbnRhaW5pbmdCbG9j
a0NoYWluSXRlcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk2RkNFMUExQTIyNjE4QUJEMDA0RjAzNDMgLyogTGF5b3V0SW50ZWdyYXRpb25S
dW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGQ0Ux
QTE4MjI2MThBQjMwMDRGMDM0MyAvKiBMYXlvdXRJbnRlZ3JhdGlvblJ1bi5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZGRDA5NTQzMjUxMTE1MjIw
MDk4ODc3RCAvKiBMYXlvdXRHZW9tZXRyeVJlY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGRDA5NTQxMjUxMTE1MjIwMDk4ODc3RCAvKiBMYXlvdXRH
ZW9tZXRyeVJlY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtMTAwOTEsNiArMTAwOTIsOCBAQAogCQk2RkI3RDJEQTI1MEZEN0ZDMDAwMjA3QUEg
LyogRmxleEZvcm1hdHRpbmdTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGbGV4Rm9ybWF0dGluZ1N0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZG
QkI4NjA1MjBCNDY0QjYwMERBRDkzOCAvKiBGb3JtYXR0aW5nR2VvbWV0cnkuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRm9ybWF0dGluZ0dlb21ldHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNkZDM0Y5NDUyNTE2NzU2NjAwQTQ5QkVBIC8qIElubGluZUxpbmVSdW4uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lTGluZVJ1bi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk2RkM0MUFCODI2Q0FGNzRCMDA1Qzg5MDkgLyogSW5saW5lTGlu
ZUJveFZlcnRpY2FsQWxpZ25lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVMaW5lQm94
VmVydGljYWxBbGlnbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkZDNDFB
QkEyNkNBRjc1QzAwNUM4OTA5IC8qIElubGluZUxpbmVCb3hWZXJ0aWNhbEFsaWduZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lTGluZUJveFZlcnRpY2FsQWxpZ25l
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RkM1M0FFQjI0QUY3QThFMDA2MDU5
RkUgLyogVGFibGVGb3JtYXR0aW5nUXVpcmtzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRhYmxl
Rm9ybWF0dGluZ1F1aXJrcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGQzVD
QTkyMjJFMzU5OTMwMEIxM0UxMSAvKiBUYWJsZUZvcm1hdHRpbmdTdGF0ZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUYWJsZUZvcm1hdHRpbmdTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTZGQzVDQTk0MjJFMzU5OTQwMEIxM0UxMSAvKiBUYWJsZUZvcm1hdHRpbmdDb250
ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTgzOTYsNiArMTgzOTksOCBAQAogCQkJCTZG
RTE5ODE1MjE3ODM5N0MwMDQ0NkYwOCAvKiBJbmxpbmVDb250ZW50QnJlYWtlci5oICovLAogCQkJ
CTZGN0NBM0M5MjA4QzJCMkUwMDJGMjlBQiAvKiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAg
Ki8sCiAJCQkJNkY3Q0EzQzgyMDhDMkIyRTAwMkYyOUFCIC8qIElubGluZUZvcm1hdHRpbmdDb250
ZXh0LmggKi8sCisJCQkJNkZDNDFBQjgyNkNBRjc0QjAwNUM4OTA5IC8qIElubGluZUxpbmVCb3hW
ZXJ0aWNhbEFsaWduZXIuY3BwICovLAorCQkJCTZGQzQxQUJBMjZDQUY3NUMwMDVDODkwOSAvKiBJ
bmxpbmVMaW5lQm94VmVydGljYWxBbGlnbmVyLmggKi8sCiAJCQkJNkYzNUVGQUYyMTg3Q0JENTAw
NDRFMEY0IC8qIElubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5jcHAgKi8sCiAJCQkJNDdDNEQ1N0My
NjUwOEJDQTAwQzdBQjFGIC8qIElubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5oICovLAogCQkJCTZG
MTBCMDg2MjJCODU2OEQwMDkwRTY5QyAvKiBJbmxpbmVGb3JtYXR0aW5nUXVpcmtzLmNwcCAqLywK
QEAgLTMyMzk4LDYgKzMyNDAzLDcgQEAKIAkJCQk5N0JDNkEzMDE1MDVGMDgxMDAxQjc0QUMgLyog
RGF0YWJhc2VUaHJlYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2QTMyMTUwNUYwODEwMDFC
NzRBQyAvKiBEYXRhYmFzZVRyYWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJFMjM0ODBEMThB
OTg3MTQwMEU0QjZFOCAvKiBEYXRhQ3VlLmggaW4gSGVhZGVycyAqLywKKwkJCQk2RkM0MUFCQjI2
Q0FGNzVEMDA1Qzg5MDkgLyogSW5saW5lTGluZUJveFZlcnRpY2FsQWxpZ25lci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQzUyMjdERjExQzNDNkRGMTAwRjVFRDU0IC8qIERhdGFEZXRlY3Rpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCUY0NDZFRERGMjY1REFGRTMwMDMxREE4RiAvKiBEYXRhRGV0ZWN0
aW9uUmVzdWx0c1N0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0NDZFREU4MjY1REQ4OTAw
MDMxREE4RiAvKiBEYXRhRGV0ZWN0b3JFbGVtZW50SW5mby5oIGluIEhlYWRlcnMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9J
bmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5LmNwcAppbmRleCBm
ZmNkYmZiOTliZjlkODc3NjlkN2E5ZjEwZWMyMzcxZjc4NzI2Njc2Li5jMDNmOWZiYmI1Njk1Nzhm
YzI2MTA5NDFmM2ZlYzE3NTg4YjgxYzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lu
bGluZUZvcm1hdHRpbmdHZW9tZXRyeS5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJG
b3JtYXR0aW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ1F1aXJrcy5oIgorI2luY2x1ZGUgIklubGluZUxp
bmVCb3hWZXJ0aWNhbEFsaWduZXIuaCIKICNpbmNsdWRlICJMYXlvdXRCb3guaCIKICNpbmNsdWRl
ICJMYXlvdXRDb250YWluZXJCb3guaCIKICNpbmNsdWRlICJMYXlvdXRSZXBsYWNlZEJveC5oIgpA
QCAtNDMsMzUgKzQ0LDEyIEBAIG5hbWVzcGFjZSBMYXlvdXQgewogY2xhc3MgTGluZUJveEJ1aWxk
ZXIgewogcHVibGljOgogICAgIExpbmVCb3hCdWlsZGVyKGNvbnN0IElubGluZUZvcm1hdHRpbmdD
b250ZXh0Jik7CisKICAgICBMaW5lQm94IGJ1aWxkKGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29u
dGVudCYpOwogCiBwcml2YXRlOgotICAgIHN0cnVjdCBTaW1wbGlmaWVkVmVydGljYWxBbGlnbm1l
bnQgewotICAgICAgICBTaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQoY29uc3QgSW5saW5lTGV2
ZWxCb3gmIHJvb3RJbmxpbmVCb3gpOwotCi0gICAgICAgIHN0YXRpYyBib29sIGNhblVzZVNpbXBs
aWZpZWRBbGlnbm1lbnQoY29uc3QgSW5saW5lTGV2ZWxCb3gmIHJvb3RJbmxpbmVCb3gsIGNvbnN0
IElubGluZUxldmVsQm94Jiwgc3RkOjpvcHRpb25hbDxjb25zdCBCb3hHZW9tZXRyeT4gaW5saW5l
TGV2ZWxCb3hHZW9tZXRyeSk7Ci0KLSAgICAgICAgdm9pZCBhbGlnbihJbmxpbmVMZXZlbEJveCYp
OwotCi0gICAgICAgIElubGluZUxheW91dFVuaXQgcm9vdElubGluZUJveExvZ2ljYWxUb3AoKSBj
b25zdCB7IHJldHVybiBtX3Jvb3RJbmxpbmVCb3hMb2dpY2FsVG9wOyB9Ci0gICAgICAgIElubGlu
ZUxheW91dFVuaXQgbGluZUJveEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUJveExvZ2lj
YWxCb3R0b20gLSBtX2xpbmVCb3hMb2dpY2FsVG9wOyB9Ci0KLSAgICAgICAgdm9pZCBzZXRFbmFi
bGVkKGJvb2wgZW5hYmxlZCkgeyBtX2lzRW5hYmxlZCA9IGVuYWJsZWQ7IH0KLSAgICAgICAgYm9v
bCBpc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRW5hYmxlZDsgfQotCi0gICAgcHJpdmF0
ZToKLSAgICAgICAgdm9pZCBhZGp1c3QoY29uc3QgSW5saW5lTGV2ZWxCb3gmKTsKLQotICAgICAg
ICBjb25zdCBJbmxpbmVMZXZlbEJveCYgbV9yb290SW5saW5lQm94OwotICAgICAgICBib29sIG1f
aXNFbmFibGVkIHsgdHJ1ZSB9OwotICAgICAgICBJbmxpbmVMYXlvdXRVbml0IG1fbGluZUJveExv
Z2ljYWxUb3AgeyAwIH07Ci0gICAgICAgIElubGluZUxheW91dFVuaXQgbV9saW5lQm94TG9naWNh
bEJvdHRvbSB7IDAgfTsKLSAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBtX3Jvb3RJbmxpbmVCb3hM
b2dpY2FsVG9wIHsgMCB9OwotICAgIH07Ci0KICAgICB2b2lkIHNldFZlcnRpY2FsR2VvbWV0cnlG
b3JJbmxpbmVCb3goSW5saW5lTGV2ZWxCb3gmKSBjb25zdDsKICAgICB2b2lkIGNvbnN0cnVjdEFu
ZEFsaWduSW5saW5lTGV2ZWxCb3hlcyhMaW5lQm94JiwgY29uc3QgTGluZTo6UnVuTGlzdCYpOwot
ICAgIHZvaWQgY29tcHV0ZUxpbmVCb3hIZWlnaHRBbmRBbGlnbklubGluZUxldmVsQm94ZXNWZXJ0
aWNhbGx5KExpbmVCb3gmKTsKIAogICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBm
b3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ7IH0KICAgICBjb25zdCBCb3gmIHJvb3RCb3goKSBjb25zdCB7IHJldHVybiBmb3JtYXR0aW5n
Q29udGV4dCgpLnJvb3QoKTsgfQpAQCAtMjA2LDE4ICsxODQsMTMgQEAgdm9pZCBMaW5lQm94QnVp
bGRlcjo6Y29uc3RydWN0QW5kQWxpZ25JbmxpbmVMZXZlbEJveGVzKExpbmVCb3gmIGxpbmVCb3gs
IGNvbnN0IEwKICAgICBhdXRvJiByb290SW5saW5lQm94ID0gbGluZUJveC5yb290SW5saW5lQm94
KCk7CiAgICAgc2V0VmVydGljYWxHZW9tZXRyeUZvcklubGluZUJveChyb290SW5saW5lQm94KTsK
IAotICAgIGF1dG8gc2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50ID0gU2ltcGxpZmllZFZlcnRp
Y2FsQWxpZ25tZW50IHsgcm9vdElubGluZUJveCB9OwogICAgIC8vIEZJWE1FOiBBZGQgZmFzdCBw
YXRoIHN1cHBvcnQgZm9yIGxpbmUtaGVpZ2h0IGNvbnRlbnQuCi0gICAgc2ltcGxpZmllZFZlcnRp
Y2FsQWxpZ25tZW50LnNldEVuYWJsZWQobGF5b3V0U3RhdGUoKS5pblN0YW5kYXJkc01vZGUoKSAm
JiByb290Qm94KCkuc3R5bGUoKS5saW5lSGVpZ2h0KCkuaXNOZWdhdGl2ZSgpKTsKLQotICAgIGF1
dG8gc2ltcGxpZmllZEFsaWduVmVydGljYWxseUlmQXBwbGljYWJsZSA9IFsmXShhdXRvJiBpbmxp
bmVMZXZlbEJveCwgc3RkOjpvcHRpb25hbDxjb25zdCBCb3hHZW9tZXRyeT4gYm94R2VvbWV0cnkp
IHsKLSAgICAgICAgaWYgKCFzaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQuaXNFbmFibGVkKCkp
CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhbHdheXMgYmUgYWJsZSB0byBleGVyY2lzZSB0aGUg
ZmFzdCBwYXRoIHdoZW4gdGhlIGxpbmUgaGFzIG5vIGNvbnRlbnQgYXQgYWxsLCBldmVuIGluIG5v
bi1zdGFuZGFyZHMgbW9kZSBvciB3aXRoIGxpbmUtaGVpZ2h0IHNldC4KKyAgICBhdXRvIGNhblVz
ZVNpbXBsaWZpZWRBbGlnbm1lbnQgPSBsYXlvdXRTdGF0ZSgpLmluU3RhbmRhcmRzTW9kZSgpICYm
IHJvb3RCb3goKS5zdHlsZSgpLmxpbmVIZWlnaHQoKS5pc05lZ2F0aXZlKCk7CisgICAgYXV0byB1
cGRhdGVDYW5Vc2VTaW1wbGlmaWVkQWxpZ25tZW50ID0gWyZdKGF1dG8mIGlubGluZUxldmVsQm94
LCBzdGQ6Om9wdGlvbmFsPGNvbnN0IEJveEdlb21ldHJ5PiBib3hHZW9tZXRyeSA9IHN0ZDo6bnVs
bG9wdCkgeworICAgICAgICBpZiAoIWNhblVzZVNpbXBsaWZpZWRBbGlnbm1lbnQpCiAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGlmICghU2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50Ojpj
YW5Vc2VTaW1wbGlmaWVkQWxpZ25tZW50KHJvb3RJbmxpbmVCb3gsIGlubGluZUxldmVsQm94LCBi
b3hHZW9tZXRyeSkpIHsKLSAgICAgICAgICAgIHNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudC5z
ZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICBzaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQuYWxpZ24oaW5saW5lTGV2ZWxCb3gpOworICAg
ICAgICBjYW5Vc2VTaW1wbGlmaWVkQWxpZ25tZW50ID0gTGluZUJveFZlcnRpY2FsQWxpZ25lcjo6
Y2FuVXNlU2ltcGxpZmllZEFsaWdubWVudEZvcklubGluZUxldmVsQm94KHJvb3RJbmxpbmVCb3gs
IGlubGluZUxldmVsQm94LCBib3hHZW9tZXRyeSk7CiAgICAgfTsKIAogICAgIGF1dG8gY3JlYXRl
V3JhcHBlZElubGluZUJveGVzID0gWyZdIHsKQEAgLTI1MSw3ICsyMjQsNyBAQCB2b2lkIExpbmVC
b3hCdWlsZGVyOjpjb25zdHJ1Y3RBbmRBbGlnbklubGluZUxldmVsQm94ZXMoTGluZUJveCYgbGlu
ZUJveCwgY29uc3QgTAogICAgICAgICBmb3IgKGF1dG8qIGxheW91dEJveCA6IFdURjo6bWFrZVJl
dmVyc2VkUmFuZ2UobGF5b3V0Qm94ZXNXaXRob3V0SW5saW5lQm94ZXMpKSB7CiAgICAgICAgICAg
ICBhdXRvIGlubGluZUJveCA9IElubGluZUxldmVsQm94OjpjcmVhdGVJbmxpbmVCb3goKmxheW91
dEJveCwgcm9vdElubGluZUJveC5sb2dpY2FsTGVmdCgpLCBsaW5lQm94LmNvbnRlbnRMb2dpY2Fs
V2lkdGgoKSk7CiAgICAgICAgICAgICBzZXRWZXJ0aWNhbEdlb21ldHJ5Rm9ySW5saW5lQm94KGlu
bGluZUJveCk7Ci0gICAgICAgICAgICBzaW1wbGlmaWVkQWxpZ25WZXJ0aWNhbGx5SWZBcHBsaWNh
YmxlKGlubGluZUJveCwgeyB9KTsKKyAgICAgICAgICAgIHVwZGF0ZUNhblVzZVNpbXBsaWZpZWRB
bGlnbm1lbnQoaW5saW5lQm94KTsKICAgICAgICAgICAgIGxpbmVCb3guYWRkSW5saW5lTGV2ZWxC
b3goV1RGTW92ZShpbmxpbmVCb3gpKTsKICAgICAgICAgfQogICAgIH07CkBAIC0zMDUsNyArMjc4
LDcgQEAgdm9pZCBMaW5lQm94QnVpbGRlcjo6Y29uc3RydWN0QW5kQWxpZ25JbmxpbmVMZXZlbEJv
eGVzKExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0IEwKICAgICAgICAgICAgIGF1dG8gYXRvbWljSW5s
aW5lTGV2ZWxCb3ggPSBJbmxpbmVMZXZlbEJveDo6Y3JlYXRlQXRvbWljSW5saW5lTGV2ZWxCb3go
bGF5b3V0Qm94LCBsb2dpY2FsTGVmdCwgeyBpbmxpbmVMZXZlbEJveEdlb21ldHJ5LmJvcmRlckJv
eFdpZHRoKCksIG1hcmdpbkJveEhlaWdodCB9KTsKICAgICAgICAgICAgIGF0b21pY0lubGluZUxl
dmVsQm94LnNldEJhc2VsaW5lKGFzY2VudCk7CiAgICAgICAgICAgICBhdG9taWNJbmxpbmVMZXZl
bEJveC5zZXRMYXlvdXRCb3VuZHMoSW5saW5lTGV2ZWxCb3g6OkxheW91dEJvdW5kcyB7IGFzY2Vu
dCwgbWFyZ2luQm94SGVpZ2h0IC0gYXNjZW50IH0pOwotICAgICAgICAgICAgc2ltcGxpZmllZEFs
aWduVmVydGljYWxseUlmQXBwbGljYWJsZShhdG9taWNJbmxpbmVMZXZlbEJveCwgaW5saW5lTGV2
ZWxCb3hHZW9tZXRyeSk7CisgICAgICAgICAgICB1cGRhdGVDYW5Vc2VTaW1wbGlmaWVkQWxpZ25t
ZW50KGF0b21pY0lubGluZUxldmVsQm94LCBpbmxpbmVMZXZlbEJveEdlb21ldHJ5KTsKICAgICAg
ICAgICAgIGxpbmVCb3guYWRkSW5saW5lTGV2ZWxCb3goV1RGTW92ZShhdG9taWNJbmxpbmVMZXZl
bEJveCkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAgLTMyMCw3ICsyOTMs
NyBAQCB2b2lkIExpbmVCb3hCdWlsZGVyOjpjb25zdHJ1Y3RBbmRBbGlnbklubGluZUxldmVsQm94
ZXMoTGluZUJveCYgbGluZUJveCwgY29uc3QgTAogICAgICAgICAgICAgaW5pdGlhbExvZ2ljYWxX
aWR0aCAtPSBtYXJnaW5TdGFydDsKICAgICAgICAgICAgIGF1dG8gaW5saW5lQm94ID0gSW5saW5l
TGV2ZWxCb3g6OmNyZWF0ZUlubGluZUJveChsYXlvdXRCb3gsIGxvZ2ljYWxMZWZ0LCBpbml0aWFs
TG9naWNhbFdpZHRoKTsKICAgICAgICAgICAgIHNldFZlcnRpY2FsR2VvbWV0cnlGb3JJbmxpbmVC
b3goaW5saW5lQm94KTsKLSAgICAgICAgICAgIHNpbXBsaWZpZWRBbGlnblZlcnRpY2FsbHlJZkFw
cGxpY2FibGUoaW5saW5lQm94LCB7IH0pOworICAgICAgICAgICAgdXBkYXRlQ2FuVXNlU2ltcGxp
ZmllZEFsaWdubWVudChpbmxpbmVCb3gpOwogICAgICAgICAgICAgbGluZUJveC5hZGRJbmxpbmVM
ZXZlbEJveChXVEZNb3ZlKGlubGluZUJveCkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIH0KQEAgLTMzMiw3ICszMDUsNyBAQCB2b2lkIExpbmVCb3hCdWlsZGVyOjpjb25zdHJ1Y3RB
bmRBbGlnbklubGluZUxldmVsQm94ZXMoTGluZUJveCYgbGluZUJveCwgY29uc3QgTAogICAgICAg
ICAgICAgYXV0byBtYXJnaW5FbmQgPSBzdGQ6Om1heCgwX2x1LCBmb3JtYXR0aW5nQ29udGV4dCgp
Lmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCkubWFyZ2luRW5kKCkpOwogICAgICAgICAgICAgYXV0
byBpbmxpbmVCb3hMb2dpY2FsUmlnaHQgPSBsb2dpY2FsTGVmdCArIHJ1bi5sb2dpY2FsV2lkdGgo
KSAtIG1hcmdpbkVuZDsKICAgICAgICAgICAgIGlubGluZUJveC5zZXRMb2dpY2FsV2lkdGgoaW5s
aW5lQm94TG9naWNhbFJpZ2h0IC0gaW5saW5lQm94LmxvZ2ljYWxMZWZ0KCkpOwotICAgICAgICAg
ICAgc2ltcGxpZmllZEFsaWduVmVydGljYWxseUlmQXBwbGljYWJsZShpbmxpbmVCb3gsIHsgfSk7
CisgICAgICAgICAgICB1cGRhdGVDYW5Vc2VTaW1wbGlmaWVkQWxpZ25tZW50KGlubGluZUJveCk7
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBpZiAocnVuLmlzVGV4
dCgpIHx8IHJ1bi5pc1NvZnRMaW5lQnJlYWsoKSkgewpAQCAtMzQzLDcgKzMxNiw3IEBAIHZvaWQg
TGluZUJveEJ1aWxkZXI6OmNvbnN0cnVjdEFuZEFsaWduSW5saW5lTGV2ZWxCb3hlcyhMaW5lQm94
JiBsaW5lQm94LCBjb25zdCBMCiAgICAgICAgIGlmIChydW4uaXNIYXJkTGluZUJyZWFrKCkpIHsK
ICAgICAgICAgICAgIGF1dG8gbGluZUJyZWFrQm94ID0gSW5saW5lTGV2ZWxCb3g6OmNyZWF0ZUxp
bmVCcmVha0JveChsYXlvdXRCb3gsIGxvZ2ljYWxMZWZ0KTsKICAgICAgICAgICAgIHNldFZlcnRp
Y2FsR2VvbWV0cnlGb3JJbmxpbmVCb3gobGluZUJyZWFrQm94KTsKLSAgICAgICAgICAgIHNpbXBs
aWZpZWRBbGlnblZlcnRpY2FsbHlJZkFwcGxpY2FibGUobGluZUJyZWFrQm94LCB7IH0pOworICAg
ICAgICAgICAgdXBkYXRlQ2FuVXNlU2ltcGxpZmllZEFsaWdubWVudChsaW5lQnJlYWtCb3gpOwog
ICAgICAgICAgICAgbGluZUJveC5hZGRJbmxpbmVMZXZlbEJveChXVEZNb3ZlKGxpbmVCcmVha0Jv
eCkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAgLTM1NSwyOTUgKzMyOCw5
IEBAIHZvaWQgTGluZUJveEJ1aWxkZXI6OmNvbnN0cnVjdEFuZEFsaWduSW5saW5lTGV2ZWxCb3hl
cyhMaW5lQm94JiBsaW5lQm94LCBjb25zdCBMCiAgICAgfQogCiAgICAgbGluZUJveC5zZXRIYXND
b250ZW50KGxpbmVIYXNDb250ZW50KTsKLSAgICBpZiAoc2ltcGxpZmllZFZlcnRpY2FsQWxpZ25t
ZW50LmlzRW5hYmxlZCgpIHx8ICFsaW5lSGFzQ29udGVudCkgewotICAgICAgICAvLyBXZSBzaG91
bGQgYWx3YXlzIGJlIGFibGUgdG8gZXhlcmNpc2UgdGhlIGZhc3QgcGF0aCB3aGVuIHRoZSBsaW5l
IGhhcyBubyBjb250ZW50IGF0IGFsbCwgZXZlbiBpbiBub24tc3RhbmRhcmRzIG1vZGUgb3Igd2l0
aCBsaW5lLWhlaWdodCBzZXQuCi0gICAgICAgIHJvb3RJbmxpbmVCb3guc2V0TG9naWNhbFRvcChs
aW5lSGFzQ29udGVudCA/IHNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudC5yb290SW5saW5lQm94
TG9naWNhbFRvcCgpIDogLXJvb3RJbmxpbmVCb3guYmFzZWxpbmUoKSk7Ci0gICAgICAgIGxpbmVC
b3guc2V0TG9naWNhbEhlaWdodChsaW5lSGFzQ29udGVudCA/IHNpbXBsaWZpZWRWZXJ0aWNhbEFs
aWdubWVudC5saW5lQm94SGVpZ2h0KCkgOiBJbmxpbmVMYXlvdXRVbml0KCkpOwotICAgIH0gZWxz
ZQotICAgICAgICBjb21wdXRlTGluZUJveEhlaWdodEFuZEFsaWduSW5saW5lTGV2ZWxCb3hlc1Zl
cnRpY2FsbHkobGluZUJveCk7Ci19Ci0KLXZvaWQgTGluZUJveEJ1aWxkZXI6OmNvbXB1dGVMaW5l
Qm94SGVpZ2h0QW5kQWxpZ25JbmxpbmVMZXZlbEJveGVzVmVydGljYWxseShMaW5lQm94JiBsaW5l
Qm94KQotewotICAgIEFTU0VSVChsaW5lQm94Lmhhc0NvbnRlbnQoKSk7Ci0gICAgLy8gVGhpcyBm
dW5jdGlvbiAocGFydGlhbGx5KSBpbXBsZW1lbnRzOgotICAgIC8vIDIuMi4gTGF5b3V0IFdpdGhp
biBMaW5lIEJveGVzCi0gICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1pbmxpbmUtMy8j
bGluZS1sYXlvdXQKLSAgICAvLyAxLiBDb21wdXRlIHRoZSBsaW5lIGJveCBoZWlnaHQgdXNpbmcg
dGhlIGxheW91dCBib3VuZHMgZ2VvbWV0cnkuIFRoaXMgaGVpZ2h0IGNvbXB1dGF0aW9uIHN0cmlj
dGx5IHVzZXMgbGF5b3V0IGJvdW5kcyBhbmQgbm90IG5vcm1hbCBpbmxpbmUgbGV2ZWwgYm94IGdl
b21ldHJpZXMuCi0gICAgLy8gMi4gQ29tcHV0ZSB0aGUgYmFzZWxpbmUvbG9naWNhbCB0b3AgcG9z
aXRpb24gb2YgdGhlIHJvb3QgaW5saW5lIGJveC4gQWxpZ25lZCBib3hlcyBwdXNoIHRoZSByb290
IGlubGluZSBib3ggYXJvdW5kIGluc2lkZSB0aGUgbGluZSBib3guCi0gICAgLy8gMy4gRmluYWxs
eSBhbGlnbiB0aGUgaW5saW5lIGxldmVsIGJveGVzIHVzaW5nIChtb3N0bHkpIG5vcm1hbCBpbmxp
bmUgbGV2ZWwgYm94IGdlb21ldHJpZXMuCi0gICAgYXV0byYgcm9vdElubGluZUJveCA9IGxpbmVC
b3gucm9vdElubGluZUJveCgpOwotICAgIGF1dG8mIGZvcm1hdHRpbmdHZW9tZXRyeSA9IGZvcm1h
dHRpbmdDb250ZXh0KCkuZm9ybWF0dGluZ0dlb21ldHJ5KCk7Ci0KLSAgICBhdXRvIGNvbXB1dGVM
aW5lQm94TG9naWNhbEhlaWdodCA9IFsmXSB7Ci0gICAgICAgIC8vIExpbmUgYm94IGhlaWdodCBj
b21wdXRhdGlvbiBpcyBiYXNlZCBvbiB0aGUgbGF5b3V0IGJvdW5kcyBvZiB0aGUgaW5saW5lIGJv
eGVzIGFuZCBub3QgdGhlaXIgbG9naWNhbCAoYXNjZW50L2Rlc2NlbnQpIGRpbWVuc2lvbnMuCi0g
ICAgICAgIHN0cnVjdCBBYnNvbHV0ZVRvcEFuZEJvdHRvbSB7Ci0gICAgICAgICAgICBJbmxpbmVM
YXlvdXRVbml0IHRvcCB7IDAgfTsKLSAgICAgICAgICAgIElubGluZUxheW91dFVuaXQgYm90dG9t
IHsgMCB9OwotICAgICAgICB9OwotICAgICAgICBIYXNoTWFwPGNvbnN0IElubGluZUxldmVsQm94
KiwgQWJzb2x1dGVUb3BBbmRCb3R0b20+IGlubGluZUxldmVsQm94QWJzb2x1dGVUb3BBbmRCb3R0
b21NYXA7Ci0KLSAgICAgICAgYXV0byBtaW5pbXVtTG9naWNhbFRvcCA9IHN0ZDo6b3B0aW9uYWw8
SW5saW5lTGF5b3V0VW5pdD4geyB9OwotICAgICAgICBhdXRvIG1heGltdW1Mb2dpY2FsQm90dG9t
ID0gc3RkOjpvcHRpb25hbDxJbmxpbmVMYXlvdXRVbml0PiB7IH07Ci0gICAgICAgIGlmIChmb3Jt
YXR0aW5nR2VvbWV0cnkuaW5saW5lTGV2ZWxCb3hBZmZlY3RzTGluZUJveChyb290SW5saW5lQm94
LCBsaW5lQm94KSkgewotICAgICAgICAgICAgbWluaW11bUxvZ2ljYWxUb3AgPSBJbmxpbmVMYXlv
dXRVbml0IHsgfTsKLSAgICAgICAgICAgIG1heGltdW1Mb2dpY2FsQm90dG9tID0gcm9vdElubGlu
ZUJveC5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKTsKLSAgICAgICAgICAgIGlubGluZUxldmVsQm94
QWJzb2x1dGVUb3BBbmRCb3R0b21NYXAuYWRkKCZyb290SW5saW5lQm94LCBBYnNvbHV0ZVRvcEFu
ZEJvdHRvbSB7ICptaW5pbXVtTG9naWNhbFRvcCwgKm1heGltdW1Mb2dpY2FsQm90dG9tIH0pOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGlubGluZUxldmVsQm94QWJzb2x1dGVUb3BBbmRC
b3R0b21NYXAuYWRkKCZyb290SW5saW5lQm94LCBBYnNvbHV0ZVRvcEFuZEJvdHRvbSB7IH0pOwot
Ci0gICAgICAgIFZlY3RvcjxJbmxpbmVMZXZlbEJveCo+IGxpbmVCb3hSZWxhdGl2ZUlubGluZUxl
dmVsQm94ZXM7Ci0gICAgICAgIGZvciAoYXV0byYgaW5saW5lTGV2ZWxCb3ggOiBsaW5lQm94Lm5v
blJvb3RJbmxpbmVMZXZlbEJveGVzKCkpIHsKLSAgICAgICAgICAgIGF1dG8mIGxheW91dEJveCA9
IGlubGluZUxldmVsQm94LmxheW91dEJveCgpOwotICAgICAgICAgICAgaWYgKGlubGluZUxldmVs
Qm94Lmhhc0xpbmVCb3hSZWxhdGl2ZUFsaWdubWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgbGlu
ZUJveFJlbGF0aXZlSW5saW5lTGV2ZWxCb3hlcy5hcHBlbmQoJmlubGluZUxldmVsQm94KTsKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGF1dG8m
IHBhcmVudElubGluZUJveCA9IGxpbmVCb3guaW5saW5lTGV2ZWxCb3hGb3JMYXlvdXRCb3gobGF5
b3V0Qm94LnBhcmVudCgpKTsKLSAgICAgICAgICAgIC8vIExvZ2ljYWwgdG9wIGlzIHJlbGF0aXZl
IHRvIHRoZSBwYXJlbnQgaW5saW5lIGJveCdzIGxheW91dCBib3VuZHMuCi0gICAgICAgICAgICAv
LyBOb3RlIHRoYXQgdGhpcyBsb2dpY2FsIHRvcCBpcyBub3QgdGhlIGZpbmFsIGxvZ2ljYWwgdG9w
IG9mIHRoZSBpbmxpbmUgbGV2ZWwgYm94LgotICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgbG9n
aWNhbCB0b3AgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxheW91dCBib3VuZHMgZ2VvbWV0cnkgd2hp
Y2ggbWF5IGJlIHZlcnkgZGlmZmVyZW50IGZyb20gdGhlIGlubGluZSBib3gncyBub3JtYWwgZ2Vv
bWV0cnkuCi0gICAgICAgICAgICBhdXRvIGxvZ2ljYWxUb3AgPSBJbmxpbmVMYXlvdXRVbml0IHsg
fTsKLSAgICAgICAgICAgIHN3aXRjaCAoaW5saW5lTGV2ZWxCb3gudmVydGljYWxBbGlnbigpKSB7
Ci0gICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lOiB7Ci0gICAgICAgICAg
ICAgICAgYXV0byBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gaW5saW5lTGV2
ZWxCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50OwotICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3Ag
PSBwYXJlbnRJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50IC0gbG9naWNhbFRvcE9mZnNl
dEZyb21QYXJlbnRCYXNlbGluZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6TWlkZGxlOiB7Ci0gICAgICAgICAg
ICAgICAgYXV0byBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gaW5saW5lTGV2
ZWxCb3gubGF5b3V0Qm91bmRzKCkuaGVpZ2h0KCkgLyAyICsgcGFyZW50SW5saW5lQm94LnN0eWxl
KCkuZm9udE1ldHJpY3MoKS54SGVpZ2h0KCkgLyAyOwotICAgICAgICAgICAgICAgIGxvZ2ljYWxU
b3AgPSBwYXJlbnRJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50IC0gbG9naWNhbFRvcE9m
ZnNldEZyb21QYXJlbnRCYXNlbGluZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6QmFzZWxpbmVNaWRkbGU6IHsK
LSAgICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUg
PSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKSAvIDI7Ci0gICAgICAgICAg
ICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQg
LSBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpMZW5n
dGg6IHsKLSAgICAgICAgICAgICAgICBhdXRvJiBzdHlsZSA9IGlubGluZUxldmVsQm94LnN0eWxl
KCk7Ci0gICAgICAgICAgICAgICAgYXV0byBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2Vs
aW5lID0gZmxvYXRWYWx1ZUZvckxlbmd0aChzdHlsZS52ZXJ0aWNhbEFsaWduTGVuZ3RoKCksIHN0
eWxlLmNvbXB1dGVkTGluZUhlaWdodCgpKSArIGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygp
LmFzY2VudDsKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94Lmxh
eW91dEJvdW5kcygpLmFzY2VudCAtIGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmU7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNl
IFZlcnRpY2FsQWxpZ246OlRleHRUb3A6IHsKLSAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQg
dGV4dC10b3AgYWxpZ25zIHdpdGggdGhlIGlubGluZSBib3gncyBmb250IG1ldHJpY3MgdG9wIChh
c2NlbnQpIGFuZCBub3QgdGhlIGxheW91dCBib3VuZHMgdG9wLgotICAgICAgICAgICAgICAgIGxv
Z2ljYWxUb3AgPSBwYXJlbnRJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50IC0gcGFyZW50
SW5saW5lQm94LmJhc2VsaW5lKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRleHRCb3R0b206IHsKLSAgICAg
ICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGV4dC1ib3R0b20gYWxpZ25zIHdpdGggdGhlIGlubGlu
ZSBib3gncyBmb250IG1ldHJpY3MgYm90dG9tIChkZXNjZW50KSBhbmQgbm90IHRoZSBsYXlvdXQg
Ym91bmRzIGJvdHRvbS4KLSAgICAgICAgICAgICAgICBhdXRvIHBhcmVudElubGluZUJveExheW91
dEJvdW5kcyA9IHBhcmVudElubGluZUJveC5sYXlvdXRCb3VuZHMoKTsKLSAgICAgICAgICAgICAg
ICBhdXRvIHBhcmVudElubGluZUJveExvZ2ljYWxCb3R0b20gPSBwYXJlbnRJbmxpbmVCb3hMYXlv
dXRCb3VuZHMuaGVpZ2h0KCkgLSBwYXJlbnRJbmxpbmVCb3hMYXlvdXRCb3VuZHMuZGVzY2VudCAr
IHBhcmVudElubGluZUJveC5kZXNjZW50KCkudmFsdWVfb3IoSW5saW5lTGF5b3V0VW5pdCgpKTsK
LSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94TG9naWNhbEJvdHRv
bSAtIGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmhlaWdodCgpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXV0byBwYXJlbnRJbmxpbmVCb3hBYnNv
bHV0ZVRvcEFuZEJvdHRvbSA9IGlubGluZUxldmVsQm94QWJzb2x1dGVUb3BBbmRCb3R0b21NYXAu
Z2V0KCZwYXJlbnRJbmxpbmVCb3gpOwotICAgICAgICAgICAgYXV0byBhYnNvbHV0ZUxvZ2ljYWxU
b3AgPSBwYXJlbnRJbmxpbmVCb3hBYnNvbHV0ZVRvcEFuZEJvdHRvbS50b3AgKyBsb2dpY2FsVG9w
OwotICAgICAgICAgICAgYXV0byBhYnNvbHV0ZUxvZ2ljYWxCb3R0b20gPSBhYnNvbHV0ZUxvZ2lj
YWxUb3AgKyBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKTsKLSAgICAgICAg
ICAgIGlubGluZUxldmVsQm94QWJzb2x1dGVUb3BBbmRCb3R0b21NYXAuYWRkKCZpbmxpbmVMZXZl
bEJveCwgQWJzb2x1dGVUb3BBbmRCb3R0b20geyBhYnNvbHV0ZUxvZ2ljYWxUb3AsIGFic29sdXRl
TG9naWNhbEJvdHRvbSB9KTsKLSAgICAgICAgICAgIC8vIFN0cmV0Y2ggdGhlIG1pbi9tYXggYWJz
b2x1dGUgdmFsdWVzIGlmIGFwcGxpY2FibGUuCi0gICAgICAgICAgICBpZiAoZm9ybWF0dGluZ0dl
b21ldHJ5LmlubGluZUxldmVsQm94QWZmZWN0c0xpbmVCb3goaW5saW5lTGV2ZWxCb3gsIGxpbmVC
b3gpKSB7Ci0gICAgICAgICAgICAgICAgbWluaW11bUxvZ2ljYWxUb3AgPSBzdGQ6Om1pbihtaW5p
bXVtTG9naWNhbFRvcC52YWx1ZV9vcihhYnNvbHV0ZUxvZ2ljYWxUb3ApLCBhYnNvbHV0ZUxvZ2lj
YWxUb3ApOwotICAgICAgICAgICAgICAgIG1heGltdW1Mb2dpY2FsQm90dG9tID0gc3RkOjptYXgo
bWF4aW11bUxvZ2ljYWxCb3R0b20udmFsdWVfb3IoYWJzb2x1dGVMb2dpY2FsQm90dG9tKSwgYWJz
b2x1dGVMb2dpY2FsQm90dG9tKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAv
LyBUaGUgbGluZSBib3ggaGVpZ2h0IGNvbXB1dGF0aW9uIGlzIGFzIGZvbGxvd3M6Ci0gICAgICAg
IC8vIDEuIFN0cmV0Y2ggdGhlIGxpbmUgYm94IHdpdGggdGhlIG5vbi1saW5lLWJveCByZWxhdGl2
ZSBhbGlnbmVkIGlubGluZSBib3ggYWJzb2x1dGUgdG9wIGFuZCBib3R0b20gdmFsdWVzLgotICAg
ICAgICAvLyAyLiBDaGVjayBpZiB0aGUgbGluZSBib3ggcmVsYXRpdmUgYWxpZ25lZCBpbmxpbmUg
Ym94ZXMgKHRvcCwgYm90dG9tIGV0YykgaGF2ZSBlbm91Z2ggcm9vbSBhbmQgc3RyZXRjaCB0aGUg
bGluZSBib3ggZnVydGhlciBpZiBuZWVkZWQuCi0gICAgICAgIGF1dG8gbGluZUJveExvZ2ljYWxI
ZWlnaHQgPSBtYXhpbXVtTG9naWNhbEJvdHRvbS52YWx1ZV9vcihJbmxpbmVMYXlvdXRVbml0KCkp
IC0gbWluaW11bUxvZ2ljYWxUb3AudmFsdWVfb3IoSW5saW5lTGF5b3V0VW5pdCgpKTsKLSAgICAg
ICAgZm9yIChhdXRvKiBsaW5lQm94UmVsYXRpdmVJbmxpbmVMZXZlbEJveCA6IGxpbmVCb3hSZWxh
dGl2ZUlubGluZUxldmVsQm94ZXMpIHsKLSAgICAgICAgICAgIGlmICghZm9ybWF0dGluZ0dlb21l
dHJ5LmlubGluZUxldmVsQm94QWZmZWN0c0xpbmVCb3goKmxpbmVCb3hSZWxhdGl2ZUlubGluZUxl
dmVsQm94LCBsaW5lQm94KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IGxpbmVCb3hMb2dpY2FsSGVpZ2h0ID0gc3RkOjptYXgobGluZUJveExvZ2ljYWxIZWlnaHQsIGxp
bmVCb3hSZWxhdGl2ZUlubGluZUxldmVsQm94LT5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0KGxpbmVCb3hMb2dpY2Fs
SGVpZ2h0KTsKLSAgICB9OwotICAgIGNvbXB1dGVMaW5lQm94TG9naWNhbEhlaWdodCgpOwotCi0g
ICAgYXV0byBjb21wdXRlUm9vdElubGluZUJveFZlcnRpY2FsUG9zaXRpb24gPSBbJl0gewotICAg
ICAgICBIYXNoTWFwPGNvbnN0IElubGluZUxldmVsQm94KiwgSW5saW5lTGF5b3V0VW5pdD4gaW5s
aW5lTGV2ZWxCb3hBYnNvbHV0ZUJhc2VsaW5lT2Zmc2V0TWFwOwotICAgICAgICBpbmxpbmVMZXZl
bEJveEFic29sdXRlQmFzZWxpbmVPZmZzZXRNYXAuYWRkKCZyb290SW5saW5lQm94LCBJbmxpbmVM
YXlvdXRVbml0IHsgfSk7Ci0KLSAgICAgICAgYXV0byBtYXhpbXVtVG9wT2Zmc2V0RnJvbVJvb3RJ
bmxpbmVCb3hCYXNlbGluZSA9IHN0ZDo6b3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4geyB9Owot
ICAgICAgICBpZiAoZm9ybWF0dGluZ0dlb21ldHJ5LmlubGluZUxldmVsQm94QWZmZWN0c0xpbmVC
b3gocm9vdElubGluZUJveCwgbGluZUJveCkpCi0gICAgICAgICAgICBtYXhpbXVtVG9wT2Zmc2V0
RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZSA9IHJvb3RJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCku
YXNjZW50OwotCi0gICAgICAgIGZvciAoYXV0byYgaW5saW5lTGV2ZWxCb3ggOiBsaW5lQm94Lm5v
blJvb3RJbmxpbmVMZXZlbEJveGVzKCkpIHsKLSAgICAgICAgICAgIGF1dG8gYWJzb2x1dGVCYXNl
bGluZU9mZnNldCA9IElubGluZUxheW91dFVuaXQgeyB9OwotICAgICAgICAgICAgaWYgKCFpbmxp
bmVMZXZlbEJveC5oYXNMaW5lQm94UmVsYXRpdmVBbGlnbm1lbnQoKSkgewotICAgICAgICAgICAg
ICAgIGF1dG8mIGxheW91dEJveCA9IGlubGluZUxldmVsQm94LmxheW91dEJveCgpOwotICAgICAg
ICAgICAgICAgIGF1dG8mIHBhcmVudElubGluZUJveCA9IGxpbmVCb3guaW5saW5lTGV2ZWxCb3hG
b3JMYXlvdXRCb3gobGF5b3V0Qm94LnBhcmVudCgpKTsKLSAgICAgICAgICAgICAgICBhdXRvIGJh
c2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gSW5saW5lTGF5b3V0VW5pdCB7IH07Ci0K
LSAgICAgICAgICAgICAgICBzd2l0Y2ggKGlubGluZUxldmVsQm94LnZlcnRpY2FsQWxpZ24oKSkg
ewotICAgICAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6QmFzZWxpbmU6Ci0gICAgICAg
ICAgICAgICAgICAgIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0geyB9OwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxp
Z246Ok1pZGRsZTogewotICAgICAgICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWxUb3BPZmZzZXRG
cm9tUGFyZW50QmFzZWxpbmUgPSAoaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuaGVpZ2h0
KCkgLyAyICsgcGFyZW50SW5saW5lQm94LnN0eWxlKCkuZm9udE1ldHJpY3MoKS54SGVpZ2h0KCkg
LyAyKTsKLSAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVPZmZzZXRGcm9tUGFyZW50QmFzZWxp
bmUgPSBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lIC0gaW5saW5lTGV2ZWxCb3gu
bGF5b3V0Qm91bmRzKCkuYXNjZW50OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGlu
ZU1pZGRsZTogewotICAgICAgICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWxUb3BPZmZzZXRGcm9t
UGFyZW50QmFzZWxpbmUgPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKSAv
IDI7Ci0gICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5l
ID0gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZSAtIGlubGluZUxldmVsQm94Lmxh
eW91dEJvdW5kcygpLmFzY2VudDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6TGVuZ3RoOiB7
Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8mIHN0eWxlID0gaW5saW5lTGV2ZWxCb3guc3R5bGUo
KTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byB2ZXJ0aWNhbEFsaWduT2Zmc2V0ID0gZmxvYXRW
YWx1ZUZvckxlbmd0aChzdHlsZS52ZXJ0aWNhbEFsaWduTGVuZ3RoKCksIHN0eWxlLmNvbXB1dGVk
TGluZUhlaWdodCgpKTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBsb2dpY2FsVG9wT2Zmc2V0
RnJvbVBhcmVudEJhc2VsaW5lID0gdmVydGljYWxBbGlnbk9mZnNldCArIGlubGluZUxldmVsQm94
LmJhc2VsaW5lKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVu
dEJhc2VsaW5lID0gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZSAtIGlubGluZUxl
dmVsQm94LmJhc2VsaW5lKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRleHRUb3A6Ci0g
ICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gcGFy
ZW50SW5saW5lQm94LmJhc2VsaW5lKCkgLSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5h
c2NlbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2Ug
VmVydGljYWxBbGlnbjo6VGV4dEJvdHRvbToKLSAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVP
ZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5k
ZXNjZW50IC0gKnBhcmVudElubGluZUJveC5kZXNjZW50KCk7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIEFT
U0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhYnNvbHV0ZUJhc2VsaW5lT2Zmc2V0
ID0gaW5saW5lTGV2ZWxCb3hBYnNvbHV0ZUJhc2VsaW5lT2Zmc2V0TWFwLmdldCgmcGFyZW50SW5s
aW5lQm94KSArIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lOwotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGlubGluZUxldmVsQm94LnZlcnRpY2Fs
QWxpZ24oKSkgewotICAgICAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VG9wOiB7Ci0g
ICAgICAgICAgICAgICAgICAgIGFic29sdXRlQmFzZWxpbmVPZmZzZXQgPSByb290SW5saW5lQm94
LmxheW91dEJvdW5kcygpLmFzY2VudCAtIGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmFz
Y2VudDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6Qm90dG9tOiB7Ci0gICAgICAgICAgICAg
ICAgICAgIGFic29sdXRlQmFzZWxpbmVPZmZzZXQgPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3Vu
ZHMoKS5kZXNjZW50IC0gcm9vdElubGluZUJveC5sYXlvdXRCb3VuZHMoKS5kZXNjZW50OwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9Z
RVQoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaW5saW5lTGV2ZWxCb3hBYnNvbHV0ZUJhc2VsaW5lT2Zm
c2V0TWFwLmFkZCgmaW5saW5lTGV2ZWxCb3gsIGFic29sdXRlQmFzZWxpbmVPZmZzZXQpOwotICAg
ICAgICAgICAgYXV0byBhZmZlY3RzUm9vdElubGluZUJveFZlcnRpY2FsUG9zaXRpb24gPSBmb3Jt
YXR0aW5nR2VvbWV0cnkuaW5saW5lTGV2ZWxCb3hBZmZlY3RzTGluZUJveChpbmxpbmVMZXZlbEJv
eCwgbGluZUJveCk7Ci0gICAgICAgICAgICBpZiAoYWZmZWN0c1Jvb3RJbmxpbmVCb3hWZXJ0aWNh
bFBvc2l0aW9uKSB7Ci0gICAgICAgICAgICAgICAgYXV0byB0b3BPZmZzZXRGcm9tUm9vdElubGlu
ZUJveEJhc2VsaW5lID0gYWJzb2x1dGVCYXNlbGluZU9mZnNldCArIGlubGluZUxldmVsQm94Lmxh
eW91dEJvdW5kcygpLmFzY2VudDsKLSAgICAgICAgICAgICAgICBpZiAobWF4aW11bVRvcE9mZnNl
dEZyb21Sb290SW5saW5lQm94QmFzZWxpbmUpCi0gICAgICAgICAgICAgICAgICAgIG1heGltdW1U
b3BPZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5lID0gc3RkOjptYXgoKm1heGltdW1Ub3BP
ZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5lLCB0b3BPZmZzZXRGcm9tUm9vdElubGluZUJv
eEJhc2VsaW5lKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gV2UgYXJlIGlzIHF1aXJrIG1vZGUgYW5kIHRoZSByb290IGlubGluZSBib3ggaGFzIG5vIGNv
bnRlbnQuIFRoZSByb290IGlubGluZSBib3gncyBiYXNlbGluZSBpcyBhbmNob3JlZCBhdCAwLgot
ICAgICAgICAgICAgICAgICAgICAvLyBIb3dldmVyIG5lZ2F0aXZlIGFzY2VudCAoZS5nIG5lZ2F0
aXZlIHRvcCBtYXJnaW4pIGNhbiAicHVzaCIgdGhlIHJvb3QgaW5saW5lIGJveCB1cHdhcmRzIGFu
ZCBoYXZlIGEgbmVnYXRpdmUgdmFsdWUuCi0gICAgICAgICAgICAgICAgICAgIG1heGltdW1Ub3BP
ZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5lID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91
bmRzKCkuYXNjZW50ID49IDAKLSAgICAgICAgICAgICAgICAgICAgICAgID8gc3RkOjptYXgoMC4w
ZiwgdG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIDogdG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYXV0byByb290SW5saW5l
Qm94TG9naWNhbFRvcCA9IG1heGltdW1Ub3BPZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5l
LnZhbHVlX29yKDAuZikgLSByb290SW5saW5lQm94LmJhc2VsaW5lKCk7Ci0gICAgICAgIHJvb3RJ
bmxpbmVCb3guc2V0TG9naWNhbFRvcChyb290SW5saW5lQm94TG9naWNhbFRvcCk7Ci0gICAgfTsK
LSAgICBjb21wdXRlUm9vdElubGluZUJveFZlcnRpY2FsUG9zaXRpb24oKTsKLQotICAgIGF1dG8g
YWxpZ25JbmxpbmVMZXZlbEJveGVzID0gWyZdIHsKLSAgICAgICAgZm9yIChhdXRvJiBpbmxpbmVM
ZXZlbEJveCA6IGxpbmVCb3gubm9uUm9vdElubGluZUxldmVsQm94ZXMoKSkgewotICAgICAgICAg
ICAgYXV0byYgbGF5b3V0Qm94ID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm94KCk7Ci0gICAgICAg
ICAgICBhdXRvJiBwYXJlbnRJbmxpbmVCb3ggPSBsaW5lQm94LmlubGluZUxldmVsQm94Rm9yTGF5
b3V0Qm94KGxheW91dEJveC5wYXJlbnQoKSk7Ci0gICAgICAgICAgICBhdXRvIGxvZ2ljYWxUb3Ag
PSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKLSAgICAgICAgICAgIHN3aXRjaCAoaW5saW5lTGV2ZWxC
b3gudmVydGljYWxBbGlnbigpKSB7Ci0gICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJh
c2VsaW5lOgotICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBwYXJlbnRJbmxpbmVCb3guYmFz
ZWxpbmUoKSAtIGlubGluZUxldmVsQm94LmJhc2VsaW5lKCk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246Ok1pZGRsZTogewotICAgICAgICAg
ICAgICAgIGF1dG8gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IChpbmxpbmVM
ZXZlbEJveC5sb2dpY2FsSGVpZ2h0KCkgLyAyICsgcGFyZW50SW5saW5lQm94LnN0eWxlKCkuZm9u
dE1ldHJpY3MoKS54SGVpZ2h0KCkgLyAyKTsKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0g
cGFyZW50SW5saW5lQm94LmJhc2VsaW5lKCkgLSBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJh
c2VsaW5lOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZU1pZGRsZTogewotICAgICAgICAgICAgICAg
IGF1dG8gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IGlubGluZUxldmVsQm94
LmxvZ2ljYWxIZWlnaHQoKSAvIDI7Ci0gICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVu
dElubGluZUJveC5iYXNlbGluZSgpIC0gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGlu
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNh
c2UgVmVydGljYWxBbGlnbjo6TGVuZ3RoOiB7Ci0gICAgICAgICAgICAgICAgYXV0byYgc3R5bGUg
PSBpbmxpbmVMZXZlbEJveC5zdHlsZSgpOwotICAgICAgICAgICAgICAgIGF1dG8gdmVydGljYWxB
bGlnbk9mZnNldCA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoc3R5bGUudmVydGljYWxBbGlnbkxlbmd0
aCgpLCBzdHlsZS5jb21wdXRlZExpbmVIZWlnaHQoKSk7Ci0gICAgICAgICAgICAgICAgYXV0byBs
b2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gdmVydGljYWxBbGlnbk9mZnNldCAr
IGlubGluZUxldmVsQm94LmJhc2VsaW5lKCk7Ci0gICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9
IHBhcmVudElubGluZUJveC5iYXNlbGluZSgpIC0gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRC
YXNlbGluZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIC8vIE5vdGUgdGhhdCAodGV4dCl0b3AvYm90dG9tIGFsaWduIHRoZWlyIGxheW91dCBib3Vu
ZHMuCi0gICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRleHRUb3A6Ci0gICAgICAgICAg
ICAgICAgbG9naWNhbFRvcCA9IGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmFzY2VudCAt
IGlubGluZUxldmVsQm94LmJhc2VsaW5lKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRleHRCb3R0b206Ci0gICAgICAgICAgICAgICAg
bG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5sb2dpY2FsSGVpZ2h0KCkgLSBpbmxpbmVMZXZl
bEJveC5sYXlvdXRCb3VuZHMoKS5kZXNjZW50IC0gaW5saW5lTGV2ZWxCb3guYmFzZWxpbmUoKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6
VG9wOgotICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGxvZ2ljYWwgdG9wIGlzIG5v
dCByZWxhdGl2ZSB0byB0aGUgcGFyZW50IGlubGluZSBib3guCi0gICAgICAgICAgICAgICAgbG9n
aWNhbFRvcCA9IGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmFzY2VudCAtIGlubGluZUxl
dmVsQm94LmJhc2VsaW5lKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIFZlcnRpY2FsQWxpZ246OkJvdHRvbToKLSAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQg
dGhpcyBsb2dpY2FsIHRvcCBpcyBub3QgcmVsYXRpdmUgdG8gdGhlIHBhcmVudCBpbmxpbmUgYm94
LgotICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBsaW5lQm94LmxvZ2ljYWxIZWlnaHQoKSAt
IGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmRlc2NlbnQgLSBpbmxpbmVMZXZlbEJveC5i
YXNlbGluZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5saW5lTGV2ZWxCb3gu
c2V0TG9naWNhbFRvcChsb2dpY2FsVG9wKTsKLSAgICAgICAgfQotICAgIH07Ci0gICAgYWxpZ25J
bmxpbmVMZXZlbEJveGVzKCk7Ci19Ci0KLUxpbmVCb3hCdWlsZGVyOjpTaW1wbGlmaWVkVmVydGlj
YWxBbGlnbm1lbnQ6OlNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudChjb25zdCBJbmxpbmVMZXZl
bEJveCYgcm9vdElubGluZUJveCkKLSAgICA6IG1fcm9vdElubGluZUJveChyb290SW5saW5lQm94
KQotewotICAgIGFkanVzdChyb290SW5saW5lQm94KTsKLX0KLQotYm9vbCBMaW5lQm94QnVpbGRl
cjo6U2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50OjpjYW5Vc2VTaW1wbGlmaWVkQWxpZ25tZW50
KGNvbnN0IElubGluZUxldmVsQm94JiByb290SW5saW5lQm94LCBjb25zdCBJbmxpbmVMZXZlbEJv
eCYgaW5saW5lTGV2ZWxCb3gsIHN0ZDo6b3B0aW9uYWw8Y29uc3QgQm94R2VvbWV0cnk+IGlubGlu
ZUxldmVsQm94R2VvbWV0cnkpCi17Ci0gICAgaWYgKGlubGluZUxldmVsQm94LmlzQXRvbWljSW5s
aW5lTGV2ZWxCb3goKSkgewotICAgICAgICBBU1NFUlQoaW5saW5lTGV2ZWxCb3hHZW9tZXRyeSk7
Ci0gICAgICAgIC8vIEJhc2VsaW5lIGFsaWduZWQsIG5vbi1zdHJldGNoeSBkaXJlY3QgY2hpbGRy
ZW4gYXJlIGNvbnNpZGVyZWQgdG8gYmUgc2ltcGxlIGZvciBub3cuCi0gICAgICAgIGF1dG8mIGxh
eW91dEJveCA9IGlubGluZUxldmVsQm94LmxheW91dEJveCgpOwotICAgICAgICByZXR1cm4gJmxh
eW91dEJveC5wYXJlbnQoKSA9PSAmcm9vdElubGluZUJveC5sYXlvdXRCb3goKQotICAgICAgICAg
ICAgJiYgbGF5b3V0Qm94LnN0eWxlKCkudmVydGljYWxBbGlnbigpID09IFZlcnRpY2FsQWxpZ246
OkJhc2VsaW5lCi0gICAgICAgICAgICAmJiAhaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS0+bWFyZ2lu
QmVmb3JlKCkKLSAgICAgICAgICAgICYmICFpbmxpbmVMZXZlbEJveEdlb21ldHJ5LT5tYXJnaW5B
ZnRlcigpCi0gICAgICAgICAgICAmJiBpbmxpbmVMZXZlbEJveEdlb21ldHJ5LT5tYXJnaW5Cb3hI
ZWlnaHQoKSA8PSByb290SW5saW5lQm94LmJhc2VsaW5lKCk7Ci0gICAgfQotICAgIGlmIChpbmxp
bmVMZXZlbEJveC5pc0xpbmVCcmVha0JveCgpKSB7Ci0gICAgICAgIC8vIEJhc2VsaW5lIGFsaWdu
ZWQsIG5vbi1zdHJldGNoeSBsaW5lIGJyZWFrcyBlLmcuIDxkaXY+PHNwYW4+PGJyPjwvc3Bhbj48
L2Rpdj4gYnV0IG5vdCA8ZGl2PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwMHB4OyI+PGJyPjwv
c3Bhbj48L2Rpdj4uCi0gICAgICAgIHJldHVybiBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3goKS5z
dHlsZSgpLnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZSAmJiBpbmxp
bmVMZXZlbEJveC5iYXNlbGluZSgpIDw9IHJvb3RJbmxpbmVCb3guYmFzZWxpbmUoKTsKLSAgICB9
Ci0gICAgaWYgKGlubGluZUxldmVsQm94LmlzSW5saW5lQm94KCkpIHsKLSAgICAgICAgLy8gQmFz
ZWxpbmUgYWxpZ25lZCwgbm9uLXN0cmV0Y2h5IGlubGluZSBib3hlcyBlLmcuIDxkaXY+PHNwYW4+
PC9zcGFuPjwvZGl2PiBidXQgbm90IDxkaXY+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTAwcHg7
Ij48L3NwYW4+PC9kaXY+LgotICAgICAgICByZXR1cm4gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm94
KCkuc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCkgPT0gVmVydGljYWxBbGlnbjo6QmFzZWxpbmUgJiYg
aW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkgPT0gcm9vdElubGluZUJveC5sYXlvdXRCb3Vu
ZHMoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIExpbmVCb3hCdWlsZGVy
OjpTaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQ6OmFsaWduKElubGluZUxldmVsQm94JiBpbmxp
bmVMZXZlbEJveCkKLXsKLSAgICBpZiAoaW5saW5lTGV2ZWxCb3guaXNBdG9taWNJbmxpbmVMZXZl
bEJveCgpIHx8IGlubGluZUxldmVsQm94LmlzTGluZUJyZWFrQm94KCkgfHwgaW5saW5lTGV2ZWxC
b3guaXNJbmxpbmVCb3goKSkgewotICAgICAgICAvLyBPbmx5IGJhc2VsaW5lIGFsaWdubWVudCBm
b3Igbm93LgotICAgICAgICBpbmxpbmVMZXZlbEJveC5zZXRMb2dpY2FsVG9wKG1fcm9vdElubGlu
ZUJveC5iYXNlbGluZSgpIC0gaW5saW5lTGV2ZWxCb3guYmFzZWxpbmUoKSk7Ci0gICAgICAgIGFk
anVzdChpbmxpbmVMZXZlbEJveCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgQVNTRVJU
X05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKLX0KLQotdm9pZCBMaW5lQm94QnVpbGRlcjo6U2ltcGxp
ZmllZFZlcnRpY2FsQWxpZ25tZW50OjphZGp1c3QoY29uc3QgSW5saW5lTGV2ZWxCb3gmIGlubGlu
ZUxldmVsQm94KQotewotICAgIGF1dG8gbGF5b3V0Qm91bmRzTG9naWNhbFRvcCA9IG1fcm9vdElu
bGluZUJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQgLSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3Vu
ZHMoKS5hc2NlbnQ7Ci0gICAgbV9saW5lQm94TG9naWNhbFRvcCA9IHN0ZDo6bWluKG1fbGluZUJv
eExvZ2ljYWxUb3AsIGxheW91dEJvdW5kc0xvZ2ljYWxUb3ApOwotICAgIG1fbGluZUJveExvZ2lj
YWxCb3R0b20gPSBzdGQ6Om1heChtX2xpbmVCb3hMb2dpY2FsQm90dG9tLCBsYXlvdXRCb3VuZHNM
b2dpY2FsVG9wICsgaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuaGVpZ2h0KCkpOwotICAg
IG1fcm9vdElubGluZUJveExvZ2ljYWxUb3AgPSBzdGQ6Om1heChtX3Jvb3RJbmxpbmVCb3hMb2dp
Y2FsVG9wLCBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQgLSBtX3Jvb3RJbmxp
bmVCb3guYmFzZWxpbmUoKSk7CisgICAgYXV0byB2ZXJ0aWNhbEFsaWduZXIgPSBMaW5lQm94VmVy
dGljYWxBbGlnbmVyIHsgZm9ybWF0dGluZ0NvbnRleHQoKSB9OworICAgIGNhblVzZVNpbXBsaWZp
ZWRBbGlnbm1lbnQgPSBjYW5Vc2VTaW1wbGlmaWVkQWxpZ25tZW50IHx8ICFsaW5lSGFzQ29udGVu
dDsKKyAgICB2ZXJ0aWNhbEFsaWduZXIuYWxpZ24obGluZUJveCwgY2FuVXNlU2ltcGxpZmllZEFs
aWdubWVudCk7CiB9CiAKIElubGluZUZvcm1hdHRpbmdHZW9tZXRyeTo6SW5saW5lRm9ybWF0dGlu
Z0dlb21ldHJ5KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5n
Q29udGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvaW5saW5lL0lubGluZUxldmVsQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMZXZlbEJveC5oCmluZGV4IDdjZTgxNzIyOGJl
YWM5MDI0NmExNWZiYzE4NjEzMzUyYzg0OTRhMzcuLmQ4NzE4NDdmMWZlN2ZkOWNmYzIxMDNiNGJi
MDFmNGFkMGU5NzFhNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxldmVsQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGV2ZWxCb3guaApAQCAtMzcs
NyArMzcsNyBAQCBuYW1lc3BhY2UgTGF5b3V0IHsKIAogY2xhc3MgTGluZUJveDsKIGNsYXNzIExp
bmVCb3hCdWlsZGVyOwotc3RydWN0IFNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudDsKK2NsYXNz
IExpbmVCb3hWZXJ0aWNhbEFsaWduZXI7CiAKIGNsYXNzIElubGluZUxldmVsQm94IHsKIHB1Ymxp
YzoKQEAgLTg0LDcgKzg0LDcgQEAgcHVibGljOgogICAgIElubGluZUxldmVsQm94KCkgPSBkZWZh
dWx0OwogCiBwcml2YXRlOgotICAgIGZyaWVuZCBzdHJ1Y3QgU2ltcGxpZmllZFZlcnRpY2FsQWxp
Z25tZW50OworICAgIGZyaWVuZCBjbGFzcyBMaW5lQm94VmVydGljYWxBbGlnbmVyOwogICAgIGZy
aWVuZCBjbGFzcyBMaW5lQm94QnVpbGRlcjsKICAgICBmcmllbmQgY2xhc3MgTGluZUJveDsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxp
bmUvSW5saW5lTGluZUJveC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy9pbmxpbmUvSW5saW5lTGluZUJveC5oCmluZGV4IDUwOTc0ZjhjZmJjNjI2ZmM5MDk4MWNj
YTBlYWFkODVjMTk0YmRjYWQuLmViOGZjOGZiMmU1YWFkZmFiMzYwNGE2ODlkZDE1Mzg0ZjZhYmE0
NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
aW5saW5lL0lubGluZUxpbmVCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lQm94LmgKQEAgLTQwLDcgKzQwLDcgQEAgbmFt
ZXNwYWNlIExheW91dCB7CiBjbGFzcyBCb3hHZW9tZXRyeTsKIGNsYXNzIElubGluZUZvcm1hdHRp
bmdDb250ZXh0OwogY2xhc3MgTGluZUJveEJ1aWxkZXI7Ci1zdHJ1Y3QgU2ltcGxpZmllZFZlcnRp
Y2FsQWxpZ25tZW50OworY2xhc3MgTGluZUJveFZlcnRpY2FsQWxpZ25lcjsKIAogLy8gICBfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18g
TGluZSBCb3gKIC8vIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0t
LS0tLS0tLS0tLS0tLQpAQCAtOTEsNiArOTEsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAg
ZnJpZW5kIGNsYXNzIExpbmVCb3hCdWlsZGVyOworICAgIGZyaWVuZCBjbGFzcyBMaW5lQm94VmVy
dGljYWxBbGlnbmVyOwogCiAgICAgdm9pZCBzZXRMb2dpY2FsSGVpZ2h0KElubGluZUxheW91dFVu
aXQgbG9naWNhbEhlaWdodCkgeyBtX2xvZ2ljYWxSZWN0LnNldEhlaWdodChsb2dpY2FsSGVpZ2h0
KTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL2lubGluZS9JbmxpbmVMaW5lQm94VmVydGljYWxBbGlnbmVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmVCb3hWZXJ0aWNh
bEFsaWduZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcxNDc5YWJjZDE0Yzc4ZjQ0OTdiMTEyMzAyYmIxY2Fm
ZDEyYmEzNTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lQm94VmVydGljYWxBbGlnbmVyLmNwcApAQCAt
MCwwICsxLDMzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJJbmxpbmVMaW5lQm94VmVydGljYWxBbGlnbmVyLmgiCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZP
Uk1BVFRJTkdfQ09OVEVYVCkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIExheW91
dCB7CisKK0xpbmVCb3hWZXJ0aWNhbEFsaWduZXI6OkxpbmVCb3hWZXJ0aWNhbEFsaWduZXIoY29u
c3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQorICAg
IDogbV9pbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkoaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCit7
Cit9CisKK2Jvb2wgTGluZUJveFZlcnRpY2FsQWxpZ25lcjo6Y2FuVXNlU2ltcGxpZmllZEFsaWdu
bWVudEZvcklubGluZUxldmVsQm94KGNvbnN0IElubGluZUxldmVsQm94JiByb290SW5saW5lQm94
LCBjb25zdCBJbmxpbmVMZXZlbEJveCYgaW5saW5lTGV2ZWxCb3gsIHN0ZDo6b3B0aW9uYWw8Y29u
c3QgQm94R2VvbWV0cnk+IGlubGluZUxldmVsQm94R2VvbWV0cnkpCit7CisgICAgaWYgKGlubGlu
ZUxldmVsQm94LmlzQXRvbWljSW5saW5lTGV2ZWxCb3goKSkgeworICAgICAgICBBU1NFUlQoaW5s
aW5lTGV2ZWxCb3hHZW9tZXRyeSk7CisgICAgICAgIC8vIEJhc2VsaW5lIGFsaWduZWQsIG5vbi1z
dHJldGNoeSBkaXJlY3QgY2hpbGRyZW4gYXJlIGNvbnNpZGVyZWQgdG8gYmUgc2ltcGxlIGZvciBu
b3cuCisgICAgICAgIGF1dG8mIGxheW91dEJveCA9IGlubGluZUxldmVsQm94LmxheW91dEJveCgp
OworICAgICAgICByZXR1cm4gJmxheW91dEJveC5wYXJlbnQoKSA9PSAmcm9vdElubGluZUJveC5s
YXlvdXRCb3goKQorICAgICAgICAgICAgJiYgbGF5b3V0Qm94LnN0eWxlKCkudmVydGljYWxBbGln
bigpID09IFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lCisgICAgICAgICAgICAmJiAhaW5saW5lTGV2
ZWxCb3hHZW9tZXRyeS0+bWFyZ2luQmVmb3JlKCkKKyAgICAgICAgICAgICYmICFpbmxpbmVMZXZl
bEJveEdlb21ldHJ5LT5tYXJnaW5BZnRlcigpCisgICAgICAgICAgICAmJiBpbmxpbmVMZXZlbEJv
eEdlb21ldHJ5LT5tYXJnaW5Cb3hIZWlnaHQoKSA8PSByb290SW5saW5lQm94LmJhc2VsaW5lKCk7
CisgICAgfQorICAgIGlmIChpbmxpbmVMZXZlbEJveC5pc0xpbmVCcmVha0JveCgpKSB7CisgICAg
ICAgIC8vIEJhc2VsaW5lIGFsaWduZWQsIG5vbi1zdHJldGNoeSBsaW5lIGJyZWFrcyBlLmcuIDxk
aXY+PHNwYW4+PGJyPjwvc3Bhbj48L2Rpdj4gYnV0IG5vdCA8ZGl2PjxzcGFuIHN0eWxlPSJmb250
LXNpemU6IDEwMHB4OyI+PGJyPjwvc3Bhbj48L2Rpdj4uCisgICAgICAgIHJldHVybiBpbmxpbmVM
ZXZlbEJveC5sYXlvdXRCb3goKS5zdHlsZSgpLnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNhbEFs
aWduOjpCYXNlbGluZSAmJiBpbmxpbmVMZXZlbEJveC5iYXNlbGluZSgpIDw9IHJvb3RJbmxpbmVC
b3guYmFzZWxpbmUoKTsKKyAgICB9CisgICAgaWYgKGlubGluZUxldmVsQm94LmlzSW5saW5lQm94
KCkpIHsKKyAgICAgICAgLy8gQmFzZWxpbmUgYWxpZ25lZCwgbm9uLXN0cmV0Y2h5IGlubGluZSBi
b3hlcyBlLmcuIDxkaXY+PHNwYW4+PC9zcGFuPjwvZGl2PiBidXQgbm90IDxkaXY+PHNwYW4gc3R5
bGU9ImZvbnQtc2l6ZTogMTAwcHg7Ij48L3NwYW4+PC9kaXY+LgorICAgICAgICByZXR1cm4gaW5s
aW5lTGV2ZWxCb3gubGF5b3V0Qm94KCkuc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCkgPT0gVmVydGlj
YWxBbGlnbjo6QmFzZWxpbmUgJiYgaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkgPT0gcm9v
dElubGluZUJveC5sYXlvdXRCb3VuZHMoKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIExpbmVCb3hWZXJ0aWNhbEFsaWduZXI6OmFsaWduKExpbmVCb3gmIGxpbmVCb3gsIGJv
b2wgdXNlU2ltcGxpZmllZEFsaWdubWVudCkgY29uc3QKK3sKKyAgICBpZiAodXNlU2ltcGxpZmll
ZEFsaWdubWVudCkKKyAgICAgICAgcmV0dXJuIHNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudChs
aW5lQm94KTsKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIChwYXJ0aWFsbHkpIGltcGxlbWVudHM6Cisg
ICAgLy8gMi4yLiBMYXlvdXQgV2l0aGluIExpbmUgQm94ZXMKKyAgICAvLyBodHRwczovL3d3dy53
My5vcmcvVFIvY3NzLWlubGluZS0zLyNsaW5lLWxheW91dAorICAgIC8vIDEuIENvbXB1dGUgdGhl
IGxpbmUgYm94IGhlaWdodCB1c2luZyB0aGUgbGF5b3V0IGJvdW5kcyBnZW9tZXRyeS4gVGhpcyBo
ZWlnaHQgY29tcHV0YXRpb24gc3RyaWN0bHkgdXNlcyBsYXlvdXQgYm91bmRzIGFuZCBub3Qgbm9y
bWFsIGlubGluZSBsZXZlbCBib3ggZ2VvbWV0cmllcy4KKyAgICAvLyAyLiBDb21wdXRlIHRoZSBi
YXNlbGluZS9sb2dpY2FsIHRvcCBwb3NpdGlvbiBvZiB0aGUgcm9vdCBpbmxpbmUgYm94LiBBbGln
bmVkIGJveGVzIHB1c2ggdGhlIHJvb3QgaW5saW5lIGJveCBhcm91bmQgaW5zaWRlIHRoZSBsaW5l
IGJveC4KKyAgICAvLyAzLiBGaW5hbGx5IGFsaWduIHRoZSBpbmxpbmUgbGV2ZWwgYm94ZXMgdXNp
bmcgKG1vc3RseSkgbm9ybWFsIGlubGluZSBsZXZlbCBib3ggZ2VvbWV0cmllcy4KKyAgICBBU1NF
UlQobGluZUJveC5oYXNDb250ZW50KCkpOworICAgIGNvbXB1dGVMaW5lQm94TG9naWNhbEhlaWdo
dChsaW5lQm94KTsKKyAgICBjb21wdXRlUm9vdElubGluZUJveFZlcnRpY2FsUG9zaXRpb24obGlu
ZUJveCk7CisgICAgYWxpZ25JbmxpbmVMZXZlbEJveGVzKGxpbmVCb3gpOworfQorCit2b2lkIExp
bmVCb3hWZXJ0aWNhbEFsaWduZXI6OnNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudChMaW5lQm94
JiBsaW5lQm94KSBjb25zdAoreworICAgIGF1dG8mIHJvb3RJbmxpbmVCb3ggPSBsaW5lQm94LnJv
b3RJbmxpbmVCb3goKTsKKyAgICBhdXRvIHJvb3RJbmxpbmVCb3hCYXNlbGluZSA9IHJvb3RJbmxp
bmVCb3guYmFzZWxpbmUoKTsKKworICAgIGlmICghbGluZUJveC5oYXNDb250ZW50KCkpIHsKKyAg
ICAgICAgcm9vdElubGluZUJveC5zZXRMb2dpY2FsVG9wKC1yb290SW5saW5lQm94QmFzZWxpbmUp
OworICAgICAgICBsaW5lQm94LnNldExvZ2ljYWxIZWlnaHQoeyB9KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGF1dG8gcm9vdElubGluZUJveExheW91dEJvdW5kcyA9IHJvb3RJbmxp
bmVCb3gubGF5b3V0Qm91bmRzKCk7CisKKyAgICBhdXRvIGxpbmVCb3hMb2dpY2FsVG9wID0gSW5s
aW5lTGF5b3V0VW5pdCB7IDAgfTsKKyAgICBhdXRvIGxpbmVCb3hMb2dpY2FsQm90dG9tID0gcm9v
dElubGluZUJveExheW91dEJvdW5kcy5oZWlnaHQoKTsKKyAgICBhdXRvIHJvb3RJbmxpbmVCb3hM
b2dpY2FsVG9wID0gcm9vdElubGluZUJveExheW91dEJvdW5kcy5hc2NlbnQgLSByb290SW5saW5l
Qm94QmFzZWxpbmU7CisgICAgZm9yIChhdXRvJiBpbmxpbmVMZXZlbEJveCA6IGxpbmVCb3gubm9u
Um9vdElubGluZUxldmVsQm94ZXMoKSkgeworICAgICAgICAvLyBPbmx5IGJhc2VsaW5lIGFsaWdu
bWVudCBmb3Igbm93LgorICAgICAgICBpbmxpbmVMZXZlbEJveC5zZXRMb2dpY2FsVG9wKHJvb3RJ
bmxpbmVCb3hCYXNlbGluZSAtIGlubGluZUxldmVsQm94LmJhc2VsaW5lKCkpOworICAgICAgICBh
dXRvIGxheW91dEJvdW5kcyA9IGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpOworCisgICAg
ICAgIGF1dG8gbGF5b3V0Qm91bmRzTG9naWNhbFRvcCA9IHJvb3RJbmxpbmVCb3hMYXlvdXRCb3Vu
ZHMuYXNjZW50IC0gbGF5b3V0Qm91bmRzLmFzY2VudDsKKyAgICAgICAgbGluZUJveExvZ2ljYWxU
b3AgPSBzdGQ6Om1pbihsaW5lQm94TG9naWNhbFRvcCwgbGF5b3V0Qm91bmRzTG9naWNhbFRvcCk7
CisgICAgICAgIGxpbmVCb3hMb2dpY2FsQm90dG9tID0gc3RkOjptYXgobGluZUJveExvZ2ljYWxC
b3R0b20sIGxheW91dEJvdW5kc0xvZ2ljYWxUb3AgKyBsYXlvdXRCb3VuZHMuaGVpZ2h0KCkpOwor
ICAgICAgICByb290SW5saW5lQm94TG9naWNhbFRvcCA9IHN0ZDo6bWF4KHJvb3RJbmxpbmVCb3hM
b2dpY2FsVG9wLCBsYXlvdXRCb3VuZHMuYXNjZW50IC0gcm9vdElubGluZUJveEJhc2VsaW5lKTsK
KyAgICB9CisgICAgcm9vdElubGluZUJveC5zZXRMb2dpY2FsVG9wKHJvb3RJbmxpbmVCb3hMb2dp
Y2FsVG9wKTsKKyAgICBsaW5lQm94LnNldExvZ2ljYWxIZWlnaHQobGluZUJveExvZ2ljYWxCb3R0
b20gLSBsaW5lQm94TG9naWNhbFRvcCk7Cit9CisKK3ZvaWQgTGluZUJveFZlcnRpY2FsQWxpZ25l
cjo6Y29tcHV0ZUxpbmVCb3hMb2dpY2FsSGVpZ2h0KExpbmVCb3gmIGxpbmVCb3gpIGNvbnN0Cit7
CisgICAgYXV0byYgcm9vdElubGluZUJveCA9IGxpbmVCb3gucm9vdElubGluZUJveCgpOworICAg
IGF1dG8mIGZvcm1hdHRpbmdHZW9tZXRyeSA9IHRoaXMtPmZvcm1hdHRpbmdHZW9tZXRyeSgpOwor
CisgICAgLy8gTGluZSBib3ggaGVpZ2h0IGNvbXB1dGF0aW9uIGlzIGJhc2VkIG9uIHRoZSBsYXlv
dXQgYm91bmRzIG9mIHRoZSBpbmxpbmUgYm94ZXMgYW5kIG5vdCB0aGVpciBsb2dpY2FsIChhc2Nl
bnQvZGVzY2VudCkgZGltZW5zaW9ucy4KKyAgICBzdHJ1Y3QgQWJzb2x1dGVUb3BBbmRCb3R0b20g
eworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IHRvcCB7IDAgfTsKKyAgICAgICAgSW5saW5lTGF5
b3V0VW5pdCBib3R0b20geyAwIH07CisgICAgfTsKKyAgICBIYXNoTWFwPGNvbnN0IElubGluZUxl
dmVsQm94KiwgQWJzb2x1dGVUb3BBbmRCb3R0b20+IGlubGluZUxldmVsQm94QWJzb2x1dGVUb3BB
bmRCb3R0b21NYXA7CisKKyAgICBhdXRvIG1pbmltdW1Mb2dpY2FsVG9wID0gc3RkOjpvcHRpb25h
bDxJbmxpbmVMYXlvdXRVbml0PiB7IH07CisgICAgYXV0byBtYXhpbXVtTG9naWNhbEJvdHRvbSA9
IHN0ZDo6b3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4geyB9OworICAgIGlmIChmb3JtYXR0aW5n
R2VvbWV0cnkuaW5saW5lTGV2ZWxCb3hBZmZlY3RzTGluZUJveChyb290SW5saW5lQm94LCBsaW5l
Qm94KSkgeworICAgICAgICBtaW5pbXVtTG9naWNhbFRvcCA9IElubGluZUxheW91dFVuaXQgeyB9
OworICAgICAgICBtYXhpbXVtTG9naWNhbEJvdHRvbSA9IHJvb3RJbmxpbmVCb3gubGF5b3V0Qm91
bmRzKCkuaGVpZ2h0KCk7CisgICAgICAgIGlubGluZUxldmVsQm94QWJzb2x1dGVUb3BBbmRCb3R0
b21NYXAuYWRkKCZyb290SW5saW5lQm94LCBBYnNvbHV0ZVRvcEFuZEJvdHRvbSB7ICptaW5pbXVt
TG9naWNhbFRvcCwgKm1heGltdW1Mb2dpY2FsQm90dG9tIH0pOworICAgIH0gZWxzZQorICAgICAg
ICBpbmxpbmVMZXZlbEJveEFic29sdXRlVG9wQW5kQm90dG9tTWFwLmFkZCgmcm9vdElubGluZUJv
eCwgQWJzb2x1dGVUb3BBbmRCb3R0b20geyB9KTsKKworICAgIFZlY3RvcjxJbmxpbmVMZXZlbEJv
eCo+IGxpbmVCb3hSZWxhdGl2ZUlubGluZUxldmVsQm94ZXM7CisgICAgZm9yIChhdXRvJiBpbmxp
bmVMZXZlbEJveCA6IGxpbmVCb3gubm9uUm9vdElubGluZUxldmVsQm94ZXMoKSkgeworICAgICAg
ICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3goKTsKKyAgICAgICAg
aWYgKGlubGluZUxldmVsQm94Lmhhc0xpbmVCb3hSZWxhdGl2ZUFsaWdubWVudCgpKSB7CisgICAg
ICAgICAgICBsaW5lQm94UmVsYXRpdmVJbmxpbmVMZXZlbEJveGVzLmFwcGVuZCgmaW5saW5lTGV2
ZWxCb3gpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgYXV0byYg
cGFyZW50SW5saW5lQm94ID0gbGluZUJveC5pbmxpbmVMZXZlbEJveEZvckxheW91dEJveChsYXlv
dXRCb3gucGFyZW50KCkpOworICAgICAgICAvLyBMb2dpY2FsIHRvcCBpcyByZWxhdGl2ZSB0byB0
aGUgcGFyZW50IGlubGluZSBib3gncyBsYXlvdXQgYm91bmRzLgorICAgICAgICAvLyBOb3RlIHRo
YXQgdGhpcyBsb2dpY2FsIHRvcCBpcyBub3QgdGhlIGZpbmFsIGxvZ2ljYWwgdG9wIG9mIHRoZSBp
bmxpbmUgbGV2ZWwgYm94LgorICAgICAgICAvLyBUaGlzIGlzIHRoZSBsb2dpY2FsIHRvcCBpbiB0
aGUgY29udGV4dCBvZiB0aGUgbGF5b3V0IGJvdW5kcyBnZW9tZXRyeSB3aGljaCBtYXkgYmUgdmVy
eSBkaWZmZXJlbnQgZnJvbSB0aGUgaW5saW5lIGJveCdzIG5vcm1hbCBnZW9tZXRyeS4KKyAgICAg
ICAgYXV0byBsb2dpY2FsVG9wID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CisgICAgICAgIHN3aXRj
aCAoaW5saW5lTGV2ZWxCb3gudmVydGljYWxBbGlnbigpKSB7CisgICAgICAgIGNhc2UgVmVydGlj
YWxBbGlnbjo6QmFzZWxpbmU6IHsKKyAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcE9mZnNldEZy
b21QYXJlbnRCYXNlbGluZSA9IGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmFzY2VudDsK
KyAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBwYXJlbnRJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCku
YXNjZW50IC0gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6TWlkZGxlOiB7
CisgICAgICAgICAgICBhdXRvIGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgPSBp
bmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKSAvIDIgKyBwYXJlbnRJbmxpbmVC
b3guc3R5bGUoKS5mb250TWV0cmljcygpLnhIZWlnaHQoKSAvIDI7CisgICAgICAgICAgICBsb2dp
Y2FsVG9wID0gcGFyZW50SW5saW5lQm94LmxheW91dEJvdW5kcygpLmFzY2VudCAtIGxvZ2ljYWxU
b3BPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lTWlkZGxlOiB7CisgICAgICAg
ICAgICBhdXRvIGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgPSBpbmxpbmVMZXZl
bEJveC5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKSAvIDI7CisgICAgICAgICAgICBsb2dpY2FsVG9w
ID0gcGFyZW50SW5saW5lQm94LmxheW91dEJvdW5kcygpLmFzY2VudCAtIGxvZ2ljYWxUb3BPZmZz
ZXRGcm9tUGFyZW50QmFzZWxpbmU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIFZlcnRpY2FsQWxpZ246Okxlbmd0aDogeworICAgICAgICAgICAgYXV0byYgc3R5
bGUgPSBpbmxpbmVMZXZlbEJveC5zdHlsZSgpOworICAgICAgICAgICAgYXV0byBsb2dpY2FsVG9w
T2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gZmxvYXRWYWx1ZUZvckxlbmd0aChzdHlsZS52ZXJ0
aWNhbEFsaWduTGVuZ3RoKCksIHN0eWxlLmNvbXB1dGVkTGluZUhlaWdodCgpKSArIGlubGluZUxl
dmVsQm94LmxheW91dEJvdW5kcygpLmFzY2VudDsKKyAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBw
YXJlbnRJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50IC0gbG9naWNhbFRvcE9mZnNldEZy
b21QYXJlbnRCYXNlbGluZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2UgVmVydGljYWxBbGlnbjo6VGV4dFRvcDogeworICAgICAgICAgICAgLy8gTm90ZSB0aGF0
IHRleHQtdG9wIGFsaWducyB3aXRoIHRoZSBpbmxpbmUgYm94J3MgZm9udCBtZXRyaWNzIHRvcCAo
YXNjZW50KSBhbmQgbm90IHRoZSBsYXlvdXQgYm91bmRzIHRvcC4KKyAgICAgICAgICAgIGxvZ2lj
YWxUb3AgPSBwYXJlbnRJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50IC0gcGFyZW50SW5s
aW5lQm94LmJhc2VsaW5lKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIFZlcnRpY2FsQWxpZ246OlRleHRCb3R0b206IHsKKyAgICAgICAgICAgIC8vIE5vdGUg
dGhhdCB0ZXh0LWJvdHRvbSBhbGlnbnMgd2l0aCB0aGUgaW5saW5lIGJveCdzIGZvbnQgbWV0cmlj
cyBib3R0b20gKGRlc2NlbnQpIGFuZCBub3QgdGhlIGxheW91dCBib3VuZHMgYm90dG9tLgorICAg
ICAgICAgICAgYXV0byBwYXJlbnRJbmxpbmVCb3hMYXlvdXRCb3VuZHMgPSBwYXJlbnRJbmxpbmVC
b3gubGF5b3V0Qm91bmRzKCk7CisgICAgICAgICAgICBhdXRvIHBhcmVudElubGluZUJveExvZ2lj
YWxCb3R0b20gPSBwYXJlbnRJbmxpbmVCb3hMYXlvdXRCb3VuZHMuaGVpZ2h0KCkgLSBwYXJlbnRJ
bmxpbmVCb3hMYXlvdXRCb3VuZHMuZGVzY2VudCArIHBhcmVudElubGluZUJveC5kZXNjZW50KCku
dmFsdWVfb3IoSW5saW5lTGF5b3V0VW5pdCgpKTsKKyAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBw
YXJlbnRJbmxpbmVCb3hMb2dpY2FsQm90dG9tIC0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRz
KCkuaGVpZ2h0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGF1dG8gcGFyZW50SW5saW5lQm94QWJzb2x1
dGVUb3BBbmRCb3R0b20gPSBpbmxpbmVMZXZlbEJveEFic29sdXRlVG9wQW5kQm90dG9tTWFwLmdl
dCgmcGFyZW50SW5saW5lQm94KTsKKyAgICAgICAgYXV0byBhYnNvbHV0ZUxvZ2ljYWxUb3AgPSBw
YXJlbnRJbmxpbmVCb3hBYnNvbHV0ZVRvcEFuZEJvdHRvbS50b3AgKyBsb2dpY2FsVG9wOworICAg
ICAgICBhdXRvIGFic29sdXRlTG9naWNhbEJvdHRvbSA9IGFic29sdXRlTG9naWNhbFRvcCArIGlu
bGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmhlaWdodCgpOworICAgICAgICBpbmxpbmVMZXZl
bEJveEFic29sdXRlVG9wQW5kQm90dG9tTWFwLmFkZCgmaW5saW5lTGV2ZWxCb3gsIEFic29sdXRl
VG9wQW5kQm90dG9tIHsgYWJzb2x1dGVMb2dpY2FsVG9wLCBhYnNvbHV0ZUxvZ2ljYWxCb3R0b20g
fSk7CisgICAgICAgIC8vIFN0cmV0Y2ggdGhlIG1pbi9tYXggYWJzb2x1dGUgdmFsdWVzIGlmIGFw
cGxpY2FibGUuCisgICAgICAgIGlmIChmb3JtYXR0aW5nR2VvbWV0cnkuaW5saW5lTGV2ZWxCb3hB
ZmZlY3RzTGluZUJveChpbmxpbmVMZXZlbEJveCwgbGluZUJveCkpIHsKKyAgICAgICAgICAgIG1p
bmltdW1Mb2dpY2FsVG9wID0gc3RkOjptaW4obWluaW11bUxvZ2ljYWxUb3AudmFsdWVfb3IoYWJz
b2x1dGVMb2dpY2FsVG9wKSwgYWJzb2x1dGVMb2dpY2FsVG9wKTsKKyAgICAgICAgICAgIG1heGlt
dW1Mb2dpY2FsQm90dG9tID0gc3RkOjptYXgobWF4aW11bUxvZ2ljYWxCb3R0b20udmFsdWVfb3Io
YWJzb2x1dGVMb2dpY2FsQm90dG9tKSwgYWJzb2x1dGVMb2dpY2FsQm90dG9tKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAvLyBUaGUgbGluZSBib3ggaGVpZ2h0IGNvbXB1dGF0aW9uIGlzIGFzIGZv
bGxvd3M6CisgICAgLy8gMS4gU3RyZXRjaCB0aGUgbGluZSBib3ggd2l0aCB0aGUgbm9uLWxpbmUt
Ym94IHJlbGF0aXZlIGFsaWduZWQgaW5saW5lIGJveCBhYnNvbHV0ZSB0b3AgYW5kIGJvdHRvbSB2
YWx1ZXMuCisgICAgLy8gMi4gQ2hlY2sgaWYgdGhlIGxpbmUgYm94IHJlbGF0aXZlIGFsaWduZWQg
aW5saW5lIGJveGVzICh0b3AsIGJvdHRvbSBldGMpIGhhdmUgZW5vdWdoIHJvb20gYW5kIHN0cmV0
Y2ggdGhlIGxpbmUgYm94IGZ1cnRoZXIgaWYgbmVlZGVkLgorICAgIGF1dG8gbGluZUJveExvZ2lj
YWxIZWlnaHQgPSBtYXhpbXVtTG9naWNhbEJvdHRvbS52YWx1ZV9vcihJbmxpbmVMYXlvdXRVbml0
KCkpIC0gbWluaW11bUxvZ2ljYWxUb3AudmFsdWVfb3IoSW5saW5lTGF5b3V0VW5pdCgpKTsKKyAg
ICBmb3IgKGF1dG8qIGxpbmVCb3hSZWxhdGl2ZUlubGluZUxldmVsQm94IDogbGluZUJveFJlbGF0
aXZlSW5saW5lTGV2ZWxCb3hlcykgeworICAgICAgICBpZiAoIWZvcm1hdHRpbmdHZW9tZXRyeS5p
bmxpbmVMZXZlbEJveEFmZmVjdHNMaW5lQm94KCpsaW5lQm94UmVsYXRpdmVJbmxpbmVMZXZlbEJv
eCwgbGluZUJveCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbGluZUJveExvZ2lj
YWxIZWlnaHQgPSBzdGQ6Om1heChsaW5lQm94TG9naWNhbEhlaWdodCwgbGluZUJveFJlbGF0aXZl
SW5saW5lTGV2ZWxCb3gtPmxheW91dEJvdW5kcygpLmhlaWdodCgpKTsKKyAgICB9CisgICAgbGlu
ZUJveC5zZXRMb2dpY2FsSGVpZ2h0KGxpbmVCb3hMb2dpY2FsSGVpZ2h0KTsKK30KKwordm9pZCBM
aW5lQm94VmVydGljYWxBbGlnbmVyOjpjb21wdXRlUm9vdElubGluZUJveFZlcnRpY2FsUG9zaXRp
b24oTGluZUJveCYgbGluZUJveCkgY29uc3QKK3sKKyAgICBhdXRvJiByb290SW5saW5lQm94ID0g
bGluZUJveC5yb290SW5saW5lQm94KCk7CisgICAgYXV0byYgZm9ybWF0dGluZ0dlb21ldHJ5ID0g
dGhpcy0+Zm9ybWF0dGluZ0dlb21ldHJ5KCk7CisKKyAgICBIYXNoTWFwPGNvbnN0IElubGluZUxl
dmVsQm94KiwgSW5saW5lTGF5b3V0VW5pdD4gaW5saW5lTGV2ZWxCb3hBYnNvbHV0ZUJhc2VsaW5l
T2Zmc2V0TWFwOworICAgIGlubGluZUxldmVsQm94QWJzb2x1dGVCYXNlbGluZU9mZnNldE1hcC5h
ZGQoJnJvb3RJbmxpbmVCb3gsIElubGluZUxheW91dFVuaXQgeyB9KTsKKworICAgIGF1dG8gbWF4
aW11bVRvcE9mZnNldEZyb21Sb290SW5saW5lQm94QmFzZWxpbmUgPSBzdGQ6Om9wdGlvbmFsPElu
bGluZUxheW91dFVuaXQ+IHsgfTsKKyAgICBpZiAoZm9ybWF0dGluZ0dlb21ldHJ5LmlubGluZUxl
dmVsQm94QWZmZWN0c0xpbmVCb3gocm9vdElubGluZUJveCwgbGluZUJveCkpCisgICAgICAgIG1h
eGltdW1Ub3BPZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5lID0gcm9vdElubGluZUJveC5s
YXlvdXRCb3VuZHMoKS5hc2NlbnQ7CisKKyAgICBmb3IgKGF1dG8mIGlubGluZUxldmVsQm94IDog
bGluZUJveC5ub25Sb290SW5saW5lTGV2ZWxCb3hlcygpKSB7CisgICAgICAgIGF1dG8gYWJzb2x1
dGVCYXNlbGluZU9mZnNldCA9IElubGluZUxheW91dFVuaXQgeyB9OworICAgICAgICBpZiAoIWlu
bGluZUxldmVsQm94Lmhhc0xpbmVCb3hSZWxhdGl2ZUFsaWdubWVudCgpKSB7CisgICAgICAgICAg
ICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3goKTsKKyAgICAgICAg
ICAgIGF1dG8mIHBhcmVudElubGluZUJveCA9IGxpbmVCb3guaW5saW5lTGV2ZWxCb3hGb3JMYXlv
dXRCb3gobGF5b3V0Qm94LnBhcmVudCgpKTsKKyAgICAgICAgICAgIGF1dG8gYmFzZWxpbmVPZmZz
ZXRGcm9tUGFyZW50QmFzZWxpbmUgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKKworICAgICAgICAg
ICAgc3dpdGNoIChpbmxpbmVMZXZlbEJveC52ZXJ0aWNhbEFsaWduKCkpIHsKKyAgICAgICAgICAg
IGNhc2UgVmVydGljYWxBbGlnbjo6QmFzZWxpbmU6CisgICAgICAgICAgICAgICAgYmFzZWxpbmVP
ZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgPSB7IH07CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246Ok1pZGRsZTogeworICAgICAgICAgICAgICAg
IGF1dG8gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IChpbmxpbmVMZXZlbEJv
eC5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKSAvIDIgKyBwYXJlbnRJbmxpbmVCb3guc3R5bGUoKS5m
b250TWV0cmljcygpLnhIZWlnaHQoKSAvIDIpOworICAgICAgICAgICAgICAgIGJhc2VsaW5lT2Zm
c2V0RnJvbVBhcmVudEJhc2VsaW5lID0gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGlu
ZSAtIGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmFzY2VudDsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6
QmFzZWxpbmVNaWRkbGU6IHsKKyAgICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWxUb3BPZmZzZXRG
cm9tUGFyZW50QmFzZWxpbmUgPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5oZWlnaHQo
KSAvIDI7CisgICAgICAgICAgICAgICAgYmFzZWxpbmVPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUg
PSBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lIC0gaW5saW5lTGV2ZWxCb3gubGF5
b3V0Qm91bmRzKCkuYXNjZW50OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpMZW5ndGg6IHsKKyAgICAgICAgICAg
ICAgICBhdXRvJiBzdHlsZSA9IGlubGluZUxldmVsQm94LnN0eWxlKCk7CisgICAgICAgICAgICAg
ICAgYXV0byB2ZXJ0aWNhbEFsaWduT2Zmc2V0ID0gZmxvYXRWYWx1ZUZvckxlbmd0aChzdHlsZS52
ZXJ0aWNhbEFsaWduTGVuZ3RoKCksIHN0eWxlLmNvbXB1dGVkTGluZUhlaWdodCgpKTsKKyAgICAg
ICAgICAgICAgICBhdXRvIGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgPSB2ZXJ0
aWNhbEFsaWduT2Zmc2V0ICsgaW5saW5lTGV2ZWxCb3guYmFzZWxpbmUoKTsKKyAgICAgICAgICAg
ICAgICBiYXNlbGluZU9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IGxvZ2ljYWxUb3BPZmZzZXRG
cm9tUGFyZW50QmFzZWxpbmUgLSBpbmxpbmVMZXZlbEJveC5iYXNlbGluZSgpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFs
aWduOjpUZXh0VG9wOgorICAgICAgICAgICAgICAgIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJh
c2VsaW5lID0gcGFyZW50SW5saW5lQm94LmJhc2VsaW5lKCkgLSBpbmxpbmVMZXZlbEJveC5sYXlv
dXRCb3VuZHMoKS5hc2NlbnQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIFZlcnRpY2FsQWxpZ246OlRleHRCb3R0b206CisgICAgICAgICAgICAgICAgYmFzZWxpbmVP
ZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5k
ZXNjZW50IC0gKnBhcmVudElubGluZUJveC5kZXNjZW50KCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1Q
TEVNRU5URURfWUVUKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBhYnNvbHV0ZUJhc2VsaW5lT2Zmc2V0ID0gaW5saW5lTGV2ZWxCb3hBYnNvbHV0
ZUJhc2VsaW5lT2Zmc2V0TWFwLmdldCgmcGFyZW50SW5saW5lQm94KSArIGJhc2VsaW5lT2Zmc2V0
RnJvbVBhcmVudEJhc2VsaW5lOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3dpdGNo
IChpbmxpbmVMZXZlbEJveC52ZXJ0aWNhbEFsaWduKCkpIHsKKyAgICAgICAgICAgIGNhc2UgVmVy
dGljYWxBbGlnbjo6VG9wOiB7CisgICAgICAgICAgICAgICAgYWJzb2x1dGVCYXNlbGluZU9mZnNl
dCA9IHJvb3RJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50IC0gaW5saW5lTGV2ZWxCb3gu
bGF5b3V0Qm91bmRzKCkuYXNjZW50OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCb3R0b206IHsKKyAgICAgICAg
ICAgICAgICBhYnNvbHV0ZUJhc2VsaW5lT2Zmc2V0ID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91
bmRzKCkuZGVzY2VudCAtIHJvb3RJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCkuZGVzY2VudDsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpbmxpbmVM
ZXZlbEJveEFic29sdXRlQmFzZWxpbmVPZmZzZXRNYXAuYWRkKCZpbmxpbmVMZXZlbEJveCwgYWJz
b2x1dGVCYXNlbGluZU9mZnNldCk7CisgICAgICAgIGF1dG8gYWZmZWN0c1Jvb3RJbmxpbmVCb3hW
ZXJ0aWNhbFBvc2l0aW9uID0gZm9ybWF0dGluZ0dlb21ldHJ5LmlubGluZUxldmVsQm94QWZmZWN0
c0xpbmVCb3goaW5saW5lTGV2ZWxCb3gsIGxpbmVCb3gpOworICAgICAgICBpZiAoYWZmZWN0c1Jv
b3RJbmxpbmVCb3hWZXJ0aWNhbFBvc2l0aW9uKSB7CisgICAgICAgICAgICBhdXRvIHRvcE9mZnNl
dEZyb21Sb290SW5saW5lQm94QmFzZWxpbmUgPSBhYnNvbHV0ZUJhc2VsaW5lT2Zmc2V0ICsgaW5s
aW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50OworICAgICAgICAgICAgaWYgKG1heGlt
dW1Ub3BPZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5lKQorICAgICAgICAgICAgICAgIG1h
eGltdW1Ub3BPZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5lID0gc3RkOjptYXgoKm1heGlt
dW1Ub3BPZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5lLCB0b3BPZmZzZXRGcm9tUm9vdElu
bGluZUJveEJhc2VsaW5lKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8v
IFdlIGFyZSBpcyBxdWlyayBtb2RlIGFuZCB0aGUgcm9vdCBpbmxpbmUgYm94IGhhcyBubyBjb250
ZW50LiBUaGUgcm9vdCBpbmxpbmUgYm94J3MgYmFzZWxpbmUgaXMgYW5jaG9yZWQgYXQgMC4KKyAg
ICAgICAgICAgICAgICAvLyBIb3dldmVyIG5lZ2F0aXZlIGFzY2VudCAoZS5nIG5lZ2F0aXZlIHRv
cCBtYXJnaW4pIGNhbiAicHVzaCIgdGhlIHJvb3QgaW5saW5lIGJveCB1cHdhcmRzIGFuZCBoYXZl
IGEgbmVnYXRpdmUgdmFsdWUuCisgICAgICAgICAgICAgICAgbWF4aW11bVRvcE9mZnNldEZyb21S
b290SW5saW5lQm94QmFzZWxpbmUgPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5hc2Nl
bnQgPj0gMAorICAgICAgICAgICAgICAgICAgICA/IHN0ZDo6bWF4KDAuMGYsIHRvcE9mZnNldEZy
b21Sb290SW5saW5lQm94QmFzZWxpbmUpCisgICAgICAgICAgICAgICAgICAgIDogdG9wT2Zmc2V0
RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICBhdXRvIHJvb3RJbmxpbmVCb3hMb2dpY2FsVG9wID0gbWF4aW11bVRvcE9mZnNldEZy
b21Sb290SW5saW5lQm94QmFzZWxpbmUudmFsdWVfb3IoMC5mKSAtIHJvb3RJbmxpbmVCb3guYmFz
ZWxpbmUoKTsKKyAgICByb290SW5saW5lQm94LnNldExvZ2ljYWxUb3Aocm9vdElubGluZUJveExv
Z2ljYWxUb3ApOworfQorCit2b2lkIExpbmVCb3hWZXJ0aWNhbEFsaWduZXI6OmFsaWduSW5saW5l
TGV2ZWxCb3hlcyhMaW5lQm94JiBsaW5lQm94KSBjb25zdAoreworICAgIGZvciAoYXV0byYgaW5s
aW5lTGV2ZWxCb3ggOiBsaW5lQm94Lm5vblJvb3RJbmxpbmVMZXZlbEJveGVzKCkpIHsKKyAgICAg
ICAgYXV0byYgbGF5b3V0Qm94ID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm94KCk7CisgICAgICAg
IGF1dG8mIHBhcmVudElubGluZUJveCA9IGxpbmVCb3guaW5saW5lTGV2ZWxCb3hGb3JMYXlvdXRC
b3gobGF5b3V0Qm94LnBhcmVudCgpKTsKKyAgICAgICAgYXV0byBsb2dpY2FsVG9wID0gSW5saW5l
TGF5b3V0VW5pdCB7IH07CisgICAgICAgIHN3aXRjaCAoaW5saW5lTGV2ZWxCb3gudmVydGljYWxB
bGlnbigpKSB7CisgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6QmFzZWxpbmU6CisgICAgICAg
ICAgICBsb2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94LmJhc2VsaW5lKCkgLSBpbmxpbmVMZXZl
bEJveC5iYXNlbGluZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmVydGlj
YWxBbGlnbjo6TWlkZGxlOiB7CisgICAgICAgICAgICBhdXRvIGxvZ2ljYWxUb3BPZmZzZXRGcm9t
UGFyZW50QmFzZWxpbmUgPSAoaW5saW5lTGV2ZWxCb3gubG9naWNhbEhlaWdodCgpIC8gMiArIHBh
cmVudElubGluZUJveC5zdHlsZSgpLmZvbnRNZXRyaWNzKCkueEhlaWdodCgpIC8gMik7CisgICAg
ICAgICAgICBsb2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94LmJhc2VsaW5lKCkgLSBsb2dpY2Fs
VG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZU1pZGRsZTogeworICAgICAg
ICAgICAgYXV0byBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gaW5saW5lTGV2
ZWxCb3gubG9naWNhbEhlaWdodCgpIC8gMjsKKyAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBwYXJl
bnRJbmxpbmVCb3guYmFzZWxpbmUoKSAtIGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxp
bmU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFZlcnRpY2Fs
QWxpZ246Okxlbmd0aDogeworICAgICAgICAgICAgYXV0byYgc3R5bGUgPSBpbmxpbmVMZXZlbEJv
eC5zdHlsZSgpOworICAgICAgICAgICAgYXV0byB2ZXJ0aWNhbEFsaWduT2Zmc2V0ID0gZmxvYXRW
YWx1ZUZvckxlbmd0aChzdHlsZS52ZXJ0aWNhbEFsaWduTGVuZ3RoKCksIHN0eWxlLmNvbXB1dGVk
TGluZUhlaWdodCgpKTsKKyAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcE9mZnNldEZyb21QYXJl
bnRCYXNlbGluZSA9IHZlcnRpY2FsQWxpZ25PZmZzZXQgKyBpbmxpbmVMZXZlbEJveC5iYXNlbGlu
ZSgpOworICAgICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5iYXNlbGluZSgp
IC0gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIC8vIE5vdGUgdGhhdCAodGV4dCl0b3AvYm90dG9tIGFsaWdu
IHRoZWlyIGxheW91dCBib3VuZHMuCisgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VGV4dFRv
cDoKKyAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMo
KS5hc2NlbnQgLSBpbmxpbmVMZXZlbEJveC5iYXNlbGluZSgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VGV4dEJvdHRvbToKKyAgICAgICAgICAgIGxv
Z2ljYWxUb3AgPSBwYXJlbnRJbmxpbmVCb3gubG9naWNhbEhlaWdodCgpIC0gaW5saW5lTGV2ZWxC
b3gubGF5b3V0Qm91bmRzKCkuZGVzY2VudCAtIGlubGluZUxldmVsQm94LmJhc2VsaW5lKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUb3A6CisgICAg
ICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBsb2dpY2FsIHRvcCBpcyBub3QgcmVsYXRpdmUgdG8g
dGhlIHBhcmVudCBpbmxpbmUgYm94LgorICAgICAgICAgICAgbG9naWNhbFRvcCA9IGlubGluZUxl
dmVsQm94LmxheW91dEJvdW5kcygpLmFzY2VudCAtIGlubGluZUxldmVsQm94LmJhc2VsaW5lKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCb3R0b206
CisgICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBsb2dpY2FsIHRvcCBpcyBub3QgcmVsYXRp
dmUgdG8gdGhlIHBhcmVudCBpbmxpbmUgYm94LgorICAgICAgICAgICAgbG9naWNhbFRvcCA9IGxp
bmVCb3gubG9naWNhbEhlaWdodCgpIC0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuZGVz
Y2VudCAtIGlubGluZUxldmVsQm94LmJhc2VsaW5lKCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpbmxpbmVMZXZlbEJveC5z
ZXRMb2dpY2FsVG9wKGxvZ2ljYWxUb3ApOworICAgIH0KK30KKworfQorfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5l
L0lubGluZUxpbmVCb3hWZXJ0aWNhbEFsaWduZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9m
b3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmVCb3hWZXJ0aWNhbEFsaWduZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4yZWI4NWZmYTQyNDIxNTdlNDcxZTNlNTdkZmQ2MjNhYWI5ZTgyM2M2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9p
bmxpbmUvSW5saW5lTGluZUJveFZlcnRpY2FsQWxpZ25lci5oCkBAIC0wLDAgKzEsNjAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19D
T05URVhUKQorCisjaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5LmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBMYXlvdXQgeworCitjbGFzcyBMaW5lQm94VmVydGlj
YWxBbGlnbmVyIHsKK3B1YmxpYzoKKyAgICBMaW5lQm94VmVydGljYWxBbGlnbmVyKGNvbnN0IElu
bGluZUZvcm1hdHRpbmdDb250ZXh0Jik7CisKKyAgICBzdGF0aWMgYm9vbCBjYW5Vc2VTaW1wbGlm
aWVkQWxpZ25tZW50Rm9ySW5saW5lTGV2ZWxCb3goY29uc3QgSW5saW5lTGV2ZWxCb3gmIHJvb3RJ
bmxpbmVCb3gsIGNvbnN0IElubGluZUxldmVsQm94Jiwgc3RkOjpvcHRpb25hbDxjb25zdCBCb3hH
ZW9tZXRyeT4gaW5saW5lTGV2ZWxCb3hHZW9tZXRyeSk7CisKKyAgICB2b2lkIGFsaWduKExpbmVC
b3gmLCBib29sIHVzZVNpbXBsaWZpZWRBbGlnbm1lbnQpIGNvbnN0OworCitwcml2YXRlOgorICAg
IHZvaWQgc2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50KExpbmVCb3gmKSBjb25zdDsKKworICAg
IHZvaWQgY29tcHV0ZUxpbmVCb3hMb2dpY2FsSGVpZ2h0KExpbmVCb3gmKSBjb25zdDsKKyAgICB2
b2lkIGNvbXB1dGVSb290SW5saW5lQm94VmVydGljYWxQb3NpdGlvbihMaW5lQm94JikgY29uc3Q7
CisgICAgdm9pZCBhbGlnbklubGluZUxldmVsQm94ZXMoTGluZUJveCYpIGNvbnN0OworCisgICAg
Y29uc3QgSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5JiBmb3JtYXR0aW5nR2VvbWV0cnkoKSBjb25z
dCB7IHJldHVybiBtX2lubGluZUZvcm1hdHRpbmdHZW9tZXRyeTsgfQorCitwcml2YXRlOgorICAg
IGNvbnN0IElubGluZUZvcm1hdHRpbmdHZW9tZXRyeSBtX2lubGluZUZvcm1hdHRpbmdHZW9tZXRy
eTsKKworfTsKKworfQorfQorCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436249</attachid>
            <date>2021-08-23 16:50:56 -0700</date>
            <delta_ts>2021-08-23 17:20:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229162-20210823165055.patch</filename>
            <type>text/plain</type>
            <size>62498</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNDY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2I3NmFhNWQzYzc1Njg5
MjU4M2E2YzI5ZTkzMzI5YzFlODA4ZWQ4Yi4uZDhkNmRlYTk0ZWU1N2NkMjE0MDg4NWVjOWViY2Qy
OWZmNDYzMmU1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDIxLTA4LTIzICBBbGFu
IEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbTEZDXVtJRkNdIERlY291cGxl
IGxpbmUgYm94IGJ1aWxkaW5nIGFuZCB2ZXJ0aWNhbCBhbGlnbmluZworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MTYyCisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS84MjI2MDI3Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBBbnR0aSBLb2l2aXN0by4K
KworICAgICAgICBUaGlzIGlzIGluIHByZXBhcmF0aW9uIGZvciBzdXBwb3J0aW5nIGluY3JlbWVu
dGFsIGlubGluZSBsYXlvdXQuCisgICAgICAgIFdlIHNob3VsZCBiZSBhYmxlIHRvIHZlcnRpY2Fs
bHkgYWxpZ24gdGhlIGlubGluZSBsZXZlbCBib3hlcyBvbiBhbnkgbGluZSB3aXRob3V0IHJlYnVp
bGRpbmcgdGhlIExpbmVCb3guCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveEJ1aWxkZXI6OmJ1aWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZUJveEJ1aWxkZXI6OmNvbnN0cnVjdEFuZEFsaWduSW5saW5lTGV2
ZWxCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3hCdWlsZGVyOjpTaW1w
bGlmaWVkVmVydGljYWxBbGlnbm1lbnQ6OnJvb3RJbmxpbmVCb3hMb2dpY2FsVG9wIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveEJ1aWxkZXI6OlNpbXBs
aWZpZWRWZXJ0aWNhbEFsaWdubWVudDo6bGluZUJveEhlaWdodCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3hCdWlsZGVyOjpTaW1wbGlmaWVkVmVydGlj
YWxBbGlnbm1lbnQ6OnNldEVuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMaW5lQm94QnVpbGRlcjo6U2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50Ojppc0VuYWJs
ZWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUJveEJ1aWxkZXI6OmNvbXB1dGVMaW5lQm94SGVpZ2h0QW5kQWxpZ25J
bmxpbmVMZXZlbEJveGVzVmVydGljYWxseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkxpbmVCb3hCdWlsZGVyOjpTaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQ6OlNpbXBs
aWZpZWRWZXJ0aWNhbEFsaWdubWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVCb3hCdWlsZGVyOjpTaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQ6OmNhblVzZVNp
bXBsaWZpZWRBbGlnbm1lbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lQm94QnVpbGRlcjo6U2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50OjphbGlnbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3hCdWlsZGVyOjpTaW1wbGlmaWVk
VmVydGljYWxBbGlnbm1lbnQ6OmFkanVzdCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGV2ZWxCb3guaDoKKyAgICAgICAgKiBsYXlv
dXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lQm94Lmg6CisKIDIwMjEtMDgt
MjMgIEFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFNpbXBsaWZpZWQg
dGV4dCBtZWFzdXJpbmcgb25seSB3b3JrcyB3aXRoIHRoZSBwcmltYXJ5IGZvbnQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKaW5kZXggMDNlMTJhN2E3ODcyMzFkNmE4OWVjMzc1YWZhNWM0N2RjMTZmMjljMy4uNmQ1OWRj
M2ZkODc4NGFjMzU3NjBhZGRmNWQ5MjA1OGQyNTg0ZDA3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE0
NjAsNiArMTQ2MCw3IEBAIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUl0
ZW0uY3BwCiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lLmNwcAog
bGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGluZUJveC5jcHAKIGxheW91
dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmVCdWlsZGVyLmNwcAorbGF5b3V0
L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGluZUJveFZlcnRpY2FsQWxpZ25lci5j
cHAKIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZVRleHRJdGVtLmNwcAog
bGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvdGV4dC9UZXh0VXRpbC5jcHAKIGxheW91
dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkJveFRyZWUuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYjA5MzZhMGQ0
NTlmMjQxYmU1MmE3YTFlYzRmYzg2YzczNzYxNzNmYi4uZDBhYTBlOGQyYjliOTEwNzNiOTgzYTY4
Y2Y1OWY3ZTY2YTJhNTM3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjE0Nyw2ICsyMTQ3LDcgQEAKIAkJNkY1NkI0NDcyNjQ3
OUU2MjAwQUFFMjU3IC8qIEZvcm1hdHRpbmdRdWlya3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGNTZCNDQ2MjY0NzlFNjEwMEFBRTI1NyAvKiBGb3Jt
YXR0aW5nUXVpcmtzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNkY2MzgzRjYyNDI3QUY0QTAwREFCQTUzIC8qIExheW91dEluaXRpYWxDb250YWlu
aW5nQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDZGNjM4M0Y0MjQyN0FGNDkwMERBQkE1MyAvKiBMYXlvdXRJbml0aWFsQ29udGFpbmluZ0Jsb2Nr
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkY2
REYzNkYyNjQ3MjJFQTAwOTNFODM0IC8qIEJsb2NrTWFyZ2luQ29sbGFwc2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGNkRGMzZFMjY0NzIyRUEwMDkz
RTgzNCAvKiBCbG9ja01hcmdpbkNvbGxhcHNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNkY2RUU3NDMyNkQ0NEVFMzAwMzc0Q0RBIC8qIElubGlu
ZUxpbmVCb3hWZXJ0aWNhbEFsaWduZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZGNkVFNzQxMjZENDRFRTIwMDM3NENEQSAvKiBJbmxpbmVMaW5lQm94
VmVydGljYWxBbGlnbmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNkY3Q0EzQzYyMDhDMjk1NzAwMkYyOUFCIC8qIExheW91dFN0YXRlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjdDQTNDNDIwOEMy
OTU2MDAyRjI5QUIgLyogTGF5b3V0U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk2RjdDQTNDQTIwOEMyQjJFMDAyRjI5QUIgLyogSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDZGN0NBM0M4MjA4QzJCMkUwMDJGMjlBQiAvKiBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTZGOTE0MjExMjUxNTIxMzgwMDRFNEZFQSAvKiBJbmxpbmVMaW5lR2VvbWV0cnkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGOTE0MjBGMjUxNTIxMzcw
MDRFNEZFQSAvKiBJbmxpbmVMaW5lR2VvbWV0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTk3NSw2ICs5OTc2LDggQEAKIAkJNkY2NjM4RDQy
NDlFMjY4QjAwMTkyNUZDIC8qIFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ1F1aXJrcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdRdWlya3MuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RjY5QTc5OTI0RDZGQUI4MDBFNkI4NUQg
LyogSW5saW5lTGluZUJveC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVMaW5lQm94LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkY2REYzNkUyNjQ3MjJFQTAwOTNFODM0
IC8qIEJsb2NrTWFyZ2luQ29sbGFwc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQmxvY2tNYXJnaW5Db2xsYXBzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2
RjZFRTc0MTI2RDQ0RUUyMDAzNzRDREEgLyogSW5saW5lTGluZUJveFZlcnRpY2FsQWxpZ25lci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVMaW5lQm94VmVydGljYWxB
bGlnbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZGNkVFNzQ0MjZENDRGMDMw
MDM3NENEQSAvKiBJbmxpbmVMaW5lQm94VmVydGljYWxBbGlnbmVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IElubGluZUxpbmVCb3hWZXJ0aWNhbEFsaWduZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk2RjcwREVERDI1MTEyNkYzMDBGMEZDNzggLyogRmxleEZvcm1hdHRpbmdH
ZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbGV4Rm9ybWF0dGluZ0dlb21ldHJ5LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkY3MzkxOEMyMTA2Q0VERDAwNkFGMjYy
IC8qIExheW91dFVuaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dFVuaXRzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGN0I4Q0VDMjM2MjZFNjYwMEM5RkYxNSAvKiBJbmxpbmVJ
dGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZUl0ZW0uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTgwNDIsNiArMTgwNDUsOCBAQAogCQkJCTZGMENENjk0MjI5RUQz
MjcwMEM1OTk0RSAvKiBJbmxpbmVMaW5lLmggKi8sCiAJCQkJNkY2OUE3OTkyNEQ2RkFCODAwRTZC
ODVEIC8qIElubGluZUxpbmVCb3guY3BwICovLAogCQkJCTZGQjI0MDAzMjNERkYxMjcwMDc5NjQ1
OCAvKiBJbmxpbmVMaW5lQm94LmggKi8sCisJCQkJNkY2RUU3NDQyNkQ0NEYwMzAwMzc0Q0RBIC8q
IElubGluZUxpbmVCb3hWZXJ0aWNhbEFsaWduZXIuY3BwICovLAorCQkJCTZGNkVFNzQxMjZENDRF
RTIwMDM3NENEQSAvKiBJbmxpbmVMaW5lQm94VmVydGljYWxBbGlnbmVyLmggKi8sCiAJCQkJNkYy
NUIyMDAyMjBBODVBQjAwMDAwMTFCIC8qIElubGluZUxpbmVCdWlsZGVyLmNwcCAqLywKIAkJCQk2
RjI2RUI0NjIzNDAwNEE1MDA2OTA2RTIgLyogSW5saW5lTGluZUJ1aWxkZXIuaCAqLywKIAkJCQk2
RjkxNDIwRjI1MTUyMTM3MDA0RTRGRUEgLyogSW5saW5lTGluZUdlb21ldHJ5LmggKi8sCkBAIC0z
MjQzMyw2ICszMjQzOCw3IEBACiAJCQkJNkZBQUU3MTMyNkEyODE0QjAwRTA3NTAyIC8qIElubGlu
ZUxldmVsQm94LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RjBDRDY5NTIyOUVEMzI3MDBDNTk5NEUg
LyogSW5saW5lTGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkZCMjQwMDUyM0RGRjEyODAwNzk2
NDU4IC8qIElubGluZUxpbmVCb3guaCBpbiBIZWFkZXJzICovLAorCQkJCTZGNkVFNzQzMjZENDRF
RTMwMDM3NENEQSAvKiBJbmxpbmVMaW5lQm94VmVydGljYWxBbGlnbmVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk2RjI2RUI0ODIzNDAwNEE1MDA2OTA2RTIgLyogSW5saW5lTGluZUJ1aWxkZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTZGOTE0MjExMjUxNTIxMzgwMDRFNEZFQSAvKiBJbmxpbmVMaW5l
R2VvbWV0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTZGQzNGOTQ3MjUxNjc1NjcwMEE0OUJFQSAv
KiBJbmxpbmVMaW5lUnVuLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdHZW9t
ZXRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGlu
ZS9JbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuY3BwCmluZGV4IDEzOTUzY2Q3YWJkOWUyYjU4NDNj
NDk5NTcyOWYxZDRmNjU3YzNiZGUuLjJjMTQ1OTkyNTA0N2Y2YjNlYjEyYzJiMGI4NWE0MWM3NWEy
ZWFkZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0dlb21l
dHJ5LmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkZvcm1hdHRpbmdDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJJbmxpbmVG
b3JtYXR0aW5nUXVpcmtzLmgiCisjaW5jbHVkZSAiSW5saW5lTGluZUJveFZlcnRpY2FsQWxpZ25l
ci5oIgogI2luY2x1ZGUgIkxheW91dEJveC5oIgogI2luY2x1ZGUgIkxheW91dENvbnRhaW5lckJv
eC5oIgogI2luY2x1ZGUgIkxheW91dFJlcGxhY2VkQm94LmgiCkBAIC00NywzMiArNDgsOCBAQCBw
dWJsaWM6CiAgICAgSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5OjpMaW5lQm94QW5kR2VvbWV0cnkg
YnVpbGQoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50Jik7CiAKIHByaXZhdGU6Ci0gICAg
c3RydWN0IFNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudCB7Ci0gICAgICAgIFNpbXBsaWZpZWRW
ZXJ0aWNhbEFsaWdubWVudChjb25zdCBJbmxpbmVMZXZlbEJveCYgcm9vdElubGluZUJveCk7Ci0K
LSAgICAgICAgc3RhdGljIGJvb2wgY2FuVXNlU2ltcGxpZmllZEFsaWdubWVudChjb25zdCBJbmxp
bmVMZXZlbEJveCYgcm9vdElubGluZUJveCwgY29uc3QgSW5saW5lTGV2ZWxCb3gmLCBzdGQ6Om9w
dGlvbmFsPGNvbnN0IEJveEdlb21ldHJ5PiBpbmxpbmVMZXZlbEJveEdlb21ldHJ5KTsKLQotICAg
ICAgICB2b2lkIGFsaWduKElubGluZUxldmVsQm94Jik7Ci0KLSAgICAgICAgSW5saW5lTGF5b3V0
VW5pdCByb290SW5saW5lQm94TG9naWNhbFRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElubGlu
ZUJveExvZ2ljYWxUb3A7IH0KLSAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsaW5lQm94SGVpZ2h0
KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm94TG9naWNhbEJvdHRvbSAtIG1fbGluZUJveExvZ2lj
YWxUb3A7IH0KLQotICAgICAgICB2b2lkIHNldEVuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1faXNF
bmFibGVkID0gZW5hYmxlZDsgfQotICAgICAgICBib29sIGlzRW5hYmxlZCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNFbmFibGVkOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB2b2lkIGFkanVzdChj
b25zdCBJbmxpbmVMZXZlbEJveCYpOwotCi0gICAgICAgIGNvbnN0IElubGluZUxldmVsQm94JiBt
X3Jvb3RJbmxpbmVCb3g7Ci0gICAgICAgIGJvb2wgbV9pc0VuYWJsZWQgeyB0cnVlIH07Ci0gICAg
ICAgIElubGluZUxheW91dFVuaXQgbV9saW5lQm94TG9naWNhbFRvcCB7IDAgfTsKLSAgICAgICAg
SW5saW5lTGF5b3V0VW5pdCBtX2xpbmVCb3hMb2dpY2FsQm90dG9tIHsgMCB9OwotICAgICAgICBJ
bmxpbmVMYXlvdXRVbml0IG1fcm9vdElubGluZUJveExvZ2ljYWxUb3AgeyAwIH07Ci0gICAgfTsK
LQogICAgIHZvaWQgc2V0VmVydGljYWxHZW9tZXRyeUZvcklubGluZUJveChJbmxpbmVMZXZlbEJv
eCYpIGNvbnN0OwotICAgIHZvaWQgY29uc3RydWN0QW5kQWxpZ25JbmxpbmVMZXZlbEJveGVzKExp
bmVCb3gmLCBjb25zdCBMaW5lOjpSdW5MaXN0Jik7Ci0gICAgdm9pZCBjb21wdXRlTGluZUJveEhl
aWdodEFuZEFsaWduSW5saW5lTGV2ZWxCb3hlc1ZlcnRpY2FsbHkoTGluZUJveCYpOworICAgIElu
bGluZUxheW91dFVuaXQgY29uc3RydWN0QW5kQWxpZ25JbmxpbmVMZXZlbEJveGVzKExpbmVCb3gm
LCBjb25zdCBMaW5lOjpSdW5MaXN0Jik7CiAKICAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUZvcm1hdHRp
bmdDb250ZXh0OyB9CiAgICAgY29uc3QgQm94JiByb290Qm94KCkgY29uc3QgeyByZXR1cm4gZm9y
bWF0dGluZ0NvbnRleHQoKS5yb290KCk7IH0KQEAgLTgyLDcgKzU5LDYgQEAgcHJpdmF0ZToKIAog
cHJpdmF0ZToKICAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgbV9pbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDsKLSAgICBJbmxpbmVMYXlvdXRVbml0IG1fbG9naWNhbEhlaWdodCB7IDAg
fTsKIH07CiAKIHN0YXRpYyBJbmxpbmVMYXlvdXRVbml0IGhhbmdpbmdHbHlwaFdpZHRoKElubGlu
ZUxheW91dFVuaXQgZXh0cmFIb3Jpem9udGFsU3BhY2UsIGNvbnN0IExpbmU6OlJ1bkxpc3QmIHJ1
bnMsIGJvb2wgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KQpAQCAtMTY1LDEwICsxNDEsMTAg
QEAgSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5OjpMaW5lQm94QW5kR2VvbWV0cnkgTGluZUJveEJ1
aWxkZXI6OmJ1aWxkKGNvbnN0IExpbmVCdWkKICAgICBhdXRvIGNvbnRlbnRMb2dpY2FsTGVmdCA9
IExheW91dDo6aG9yaXpvbnRhbEFsaWdubWVudE9mZnNldChydW5zLCByb290Qm94KCkuc3R5bGUo
KS50ZXh0QWxpZ24oKSwgbGluZUNvbnRlbnQubGluZUxvZ2ljYWxXaWR0aCwgY29udGVudExvZ2lj
YWxXaWR0aCwgbGluZUNvbnRlbnQuaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KS52YWx1ZV9v
cihJbmxpbmVMYXlvdXRVbml0IHsgfSk7CiAgICAgYXV0byBsaW5lQm94ID0gTGluZUJveCB7IHJv
b3RCb3goKSwgY29udGVudExvZ2ljYWxMZWZ0LCBjb250ZW50TG9naWNhbFdpZHRoLCBsaW5lQ29u
dGVudC5ub25TcGFubmluZ0lubGluZUxldmVsQm94Q291bnQgfTsKIAotICAgIGNvbnN0cnVjdEFu
ZEFsaWduSW5saW5lTGV2ZWxCb3hlcyhsaW5lQm94LCBydW5zKTsKKyAgICBhdXRvIGxpbmVCb3hM
b2dpY2FsSGVpZ2h0ID0gY29uc3RydWN0QW5kQWxpZ25JbmxpbmVMZXZlbEJveGVzKGxpbmVCb3gs
IHJ1bnMpOwogCiAgICAgYXV0byBsaW5lR2VvbWV0cnkgPSBbJl0gewotICAgICAgICBhdXRvIGxp
bmVCb3hMb2dpY2FsUmVjdCA9IElubGluZVJlY3QgeyBsaW5lQ29udGVudC5sb2dpY2FsVG9wTGVm
dCwgbGluZUNvbnRlbnQubGluZUxvZ2ljYWxXaWR0aCwgbV9sb2dpY2FsSGVpZ2h0IH07CisgICAg
ICAgIGF1dG8gbGluZUJveExvZ2ljYWxSZWN0ID0gSW5saW5lUmVjdCB7IGxpbmVDb250ZW50Lmxv
Z2ljYWxUb3BMZWZ0LCBsaW5lQ29udGVudC5saW5lTG9naWNhbFdpZHRoLCBsaW5lQm94TG9naWNh
bEhlaWdodCB9OwogICAgICAgICBhdXRvJiByb290SW5saW5lQm94ID0gbGluZUJveC5yb290SW5s
aW5lQm94KCk7CiAgICAgICAgIGF1dG8gZW5jbG9zaW5nVG9wQW5kQm90dG9tID0gTGluZUdlb21l
dHJ5OjpFbmNsb3NpbmdUb3BBbmRCb3R0b20geyByb290SW5saW5lQm94LmxvZ2ljYWxUb3AoKSwg
cm9vdElubGluZUJveC5sb2dpY2FsQm90dG9tKCkgfTsKIApAQCAtMjI5LDIzICsyMDUsMTggQEAg
dm9pZCBMaW5lQm94QnVpbGRlcjo6c2V0VmVydGljYWxHZW9tZXRyeUZvcklubGluZUJveChJbmxp
bmVMZXZlbEJveCYgaW5saW5lTGV2ZWwKICAgICBpbmxpbmVMZXZlbEJveC5zZXRMYXlvdXRCb3Vu
ZHMoSW5saW5lTGV2ZWxCb3g6OkxheW91dEJvdW5kcyB7IGZsb29yZihhc2NlbnQpLCBjZWlsKGRl
c2NlbnQpIH0pOwogfQogCi12b2lkIExpbmVCb3hCdWlsZGVyOjpjb25zdHJ1Y3RBbmRBbGlnbklu
bGluZUxldmVsQm94ZXMoTGluZUJveCYgbGluZUJveCwgY29uc3QgTGluZTo6UnVuTGlzdCYgcnVu
cykKK0lubGluZUxheW91dFVuaXQgTGluZUJveEJ1aWxkZXI6OmNvbnN0cnVjdEFuZEFsaWduSW5s
aW5lTGV2ZWxCb3hlcyhMaW5lQm94JiBsaW5lQm94LCBjb25zdCBMaW5lOjpSdW5MaXN0JiBydW5z
KQogewogICAgIGF1dG8mIHJvb3RJbmxpbmVCb3ggPSBsaW5lQm94LnJvb3RJbmxpbmVCb3goKTsK
ICAgICBzZXRWZXJ0aWNhbEdlb21ldHJ5Rm9ySW5saW5lQm94KHJvb3RJbmxpbmVCb3gpOwogCi0g
ICAgYXV0byBzaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQgPSBTaW1wbGlmaWVkVmVydGljYWxB
bGlnbm1lbnQgeyByb290SW5saW5lQm94IH07CiAgICAgLy8gRklYTUU6IEFkZCBmYXN0IHBhdGgg
c3VwcG9ydCBmb3IgbGluZS1oZWlnaHQgY29udGVudC4KLSAgICBzaW1wbGlmaWVkVmVydGljYWxB
bGlnbm1lbnQuc2V0RW5hYmxlZChsYXlvdXRTdGF0ZSgpLmluU3RhbmRhcmRzTW9kZSgpICYmIHJv
b3RCb3goKS5zdHlsZSgpLmxpbmVIZWlnaHQoKS5pc05lZ2F0aXZlKCkpOwotCi0gICAgYXV0byBz
aW1wbGlmaWVkQWxpZ25WZXJ0aWNhbGx5SWZBcHBsaWNhYmxlID0gWyZdKGF1dG8mIGlubGluZUxl
dmVsQm94LCBzdGQ6Om9wdGlvbmFsPGNvbnN0IEJveEdlb21ldHJ5PiBib3hHZW9tZXRyeSkgewot
ICAgICAgICBpZiAoIXNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudC5pc0VuYWJsZWQoKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKCFTaW1wbGlmaWVkVmVydGljYWxBbGlnbm1l
bnQ6OmNhblVzZVNpbXBsaWZpZWRBbGlnbm1lbnQocm9vdElubGluZUJveCwgaW5saW5lTGV2ZWxC
b3gsIGJveEdlb21ldHJ5KSkgewotICAgICAgICAgICAgc2ltcGxpZmllZFZlcnRpY2FsQWxpZ25t
ZW50LnNldEVuYWJsZWQoZmFsc2UpOworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYWx3YXlzIGJl
IGFibGUgdG8gZXhlcmNpc2UgdGhlIGZhc3QgcGF0aCB3aGVuIHRoZSBsaW5lIGhhcyBubyBjb250
ZW50IGF0IGFsbCwgZXZlbiBpbiBub24tc3RhbmRhcmRzIG1vZGUgb3Igd2l0aCBsaW5lLWhlaWdo
dCBzZXQuCisgICAgYXV0byBjYW5Vc2VTaW1wbGlmaWVkQWxpZ25tZW50ID0gbGF5b3V0U3RhdGUo
KS5pblN0YW5kYXJkc01vZGUoKSAmJiByb290Qm94KCkuc3R5bGUoKS5saW5lSGVpZ2h0KCkuaXNO
ZWdhdGl2ZSgpOworICAgIGF1dG8gdXBkYXRlQ2FuVXNlU2ltcGxpZmllZEFsaWdubWVudCA9IFsm
XShhdXRvJiBpbmxpbmVMZXZlbEJveCwgc3RkOjpvcHRpb25hbDxjb25zdCBCb3hHZW9tZXRyeT4g
Ym94R2VvbWV0cnkgPSBzdGQ6Om51bGxvcHQpIHsKKyAgICAgICAgaWYgKCFjYW5Vc2VTaW1wbGlm
aWVkQWxpZ25tZW50KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHNp
bXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudC5hbGlnbihpbmxpbmVMZXZlbEJveCk7CisgICAgICAg
IGNhblVzZVNpbXBsaWZpZWRBbGlnbm1lbnQgPSBMaW5lQm94VmVydGljYWxBbGlnbmVyOjpjYW5V
c2VTaW1wbGlmaWVkQWxpZ25tZW50Rm9ySW5saW5lTGV2ZWxCb3gocm9vdElubGluZUJveCwgaW5s
aW5lTGV2ZWxCb3gsIGJveEdlb21ldHJ5KTsKICAgICB9OwogCiAgICAgYXV0byBjcmVhdGVXcmFw
cGVkSW5saW5lQm94ZXMgPSBbJl0gewpAQCAtMjc5LDcgKzI1MCw3IEBAIHZvaWQgTGluZUJveEJ1
aWxkZXI6OmNvbnN0cnVjdEFuZEFsaWduSW5saW5lTGV2ZWxCb3hlcyhMaW5lQm94JiBsaW5lQm94
LCBjb25zdCBMCiAgICAgICAgIGZvciAoYXV0byogbGF5b3V0Qm94IDogV1RGOjptYWtlUmV2ZXJz
ZWRSYW5nZShsYXlvdXRCb3hlc1dpdGhvdXRJbmxpbmVCb3hlcykpIHsKICAgICAgICAgICAgIGF1
dG8gaW5saW5lQm94ID0gSW5saW5lTGV2ZWxCb3g6OmNyZWF0ZUlubGluZUJveCgqbGF5b3V0Qm94
LCByb290SW5saW5lQm94LmxvZ2ljYWxMZWZ0KCksIHJvb3RJbmxpbmVCb3gubG9naWNhbFdpZHRo
KCkpOwogICAgICAgICAgICAgc2V0VmVydGljYWxHZW9tZXRyeUZvcklubGluZUJveChpbmxpbmVC
b3gpOwotICAgICAgICAgICAgc2ltcGxpZmllZEFsaWduVmVydGljYWxseUlmQXBwbGljYWJsZShp
bmxpbmVCb3gsIHsgfSk7CisgICAgICAgICAgICB1cGRhdGVDYW5Vc2VTaW1wbGlmaWVkQWxpZ25t
ZW50KGlubGluZUJveCk7CiAgICAgICAgICAgICBsaW5lQm94LmFkZElubGluZUxldmVsQm94KFdU
Rk1vdmUoaW5saW5lQm94KSk7CiAgICAgICAgIH0KICAgICB9OwpAQCAtMzMzLDcgKzMwNCw3IEBA
IHZvaWQgTGluZUJveEJ1aWxkZXI6OmNvbnN0cnVjdEFuZEFsaWduSW5saW5lTGV2ZWxCb3hlcyhM
aW5lQm94JiBsaW5lQm94LCBjb25zdCBMCiAgICAgICAgICAgICBhdXRvIGF0b21pY0lubGluZUxl
dmVsQm94ID0gSW5saW5lTGV2ZWxCb3g6OmNyZWF0ZUF0b21pY0lubGluZUxldmVsQm94KGxheW91
dEJveCwgbG9naWNhbExlZnQsIHsgaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS5ib3JkZXJCb3hXaWR0
aCgpLCBtYXJnaW5Cb3hIZWlnaHQgfSk7CiAgICAgICAgICAgICBhdG9taWNJbmxpbmVMZXZlbEJv
eC5zZXRCYXNlbGluZShhc2NlbnQpOwogICAgICAgICAgICAgYXRvbWljSW5saW5lTGV2ZWxCb3gu
c2V0TGF5b3V0Qm91bmRzKElubGluZUxldmVsQm94OjpMYXlvdXRCb3VuZHMgeyBhc2NlbnQsIG1h
cmdpbkJveEhlaWdodCAtIGFzY2VudCB9KTsKLSAgICAgICAgICAgIHNpbXBsaWZpZWRBbGlnblZl
cnRpY2FsbHlJZkFwcGxpY2FibGUoYXRvbWljSW5saW5lTGV2ZWxCb3gsIGlubGluZUxldmVsQm94
R2VvbWV0cnkpOworICAgICAgICAgICAgdXBkYXRlQ2FuVXNlU2ltcGxpZmllZEFsaWdubWVudChh
dG9taWNJbmxpbmVMZXZlbEJveCwgaW5saW5lTGV2ZWxCb3hHZW9tZXRyeSk7CiAgICAgICAgICAg
ICBsaW5lQm94LmFkZElubGluZUxldmVsQm94KFdURk1vdmUoYXRvbWljSW5saW5lTGV2ZWxCb3gp
KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC0zNDYsNyArMzE3LDcgQEAg
dm9pZCBMaW5lQm94QnVpbGRlcjo6Y29uc3RydWN0QW5kQWxpZ25JbmxpbmVMZXZlbEJveGVzKExp
bmVCb3gmIGxpbmVCb3gsIGNvbnN0IEwKICAgICAgICAgICAgIEFTU0VSVChpbml0aWFsTG9naWNh
bFdpZHRoID49IDApOwogICAgICAgICAgICAgYXV0byBpbmxpbmVCb3ggPSBJbmxpbmVMZXZlbEJv
eDo6Y3JlYXRlSW5saW5lQm94KGxheW91dEJveCwgbG9naWNhbExlZnQgKyBtYXJnaW5TdGFydCwg
aW5pdGlhbExvZ2ljYWxXaWR0aCk7CiAgICAgICAgICAgICBzZXRWZXJ0aWNhbEdlb21ldHJ5Rm9y
SW5saW5lQm94KGlubGluZUJveCk7Ci0gICAgICAgICAgICBzaW1wbGlmaWVkQWxpZ25WZXJ0aWNh
bGx5SWZBcHBsaWNhYmxlKGlubGluZUJveCwgeyB9KTsKKyAgICAgICAgICAgIHVwZGF0ZUNhblVz
ZVNpbXBsaWZpZWRBbGlnbm1lbnQoaW5saW5lQm94KTsKICAgICAgICAgICAgIGxpbmVCb3guYWRk
SW5saW5lTGV2ZWxCb3goV1RGTW92ZShpbmxpbmVCb3gpKTsKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB9CkBAIC0zNjMsNyArMzM0LDcgQEAgdm9pZCBMaW5lQm94QnVpbGRlcjo6Y29u
c3RydWN0QW5kQWxpZ25JbmxpbmVMZXZlbEJveGVzKExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0IEwK
ICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGNvbnRlbnQgcHVsbHMgdGhlIDwvc3Bhbj4gdG8gdGhl
IGxvZ2ljYWwgbGVmdCBkaXJlY3Rpb24gKGUuZy4gbmVnYXRpdmUgbGV0dGVyIHNwYWNlKQogICAg
ICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIGRvbid0IGVuZCB1cCB3aXRoIG5lZ2F0aXZlIGxvZ2lj
YWwgd2lkdGggb24gdGhlIGlubGluZSBib3guCiAgICAgICAgICAgICBpbmxpbmVCb3guc2V0TG9n
aWNhbFdpZHRoKHN0ZDo6bWF4KDAuZiwgaW5saW5lQm94TG9naWNhbFJpZ2h0IC0gaW5saW5lQm94
LmxvZ2ljYWxMZWZ0KCkpKTsKLSAgICAgICAgICAgIHNpbXBsaWZpZWRBbGlnblZlcnRpY2FsbHlJ
ZkFwcGxpY2FibGUoaW5saW5lQm94LCB7IH0pOworICAgICAgICAgICAgdXBkYXRlQ2FuVXNlU2lt
cGxpZmllZEFsaWdubWVudChpbmxpbmVCb3gpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIH0KICAgICAgICAgaWYgKHJ1bi5pc1RleHQoKSB8fCBydW4uaXNTb2Z0TGluZUJyZWFrKCkp
IHsKQEAgLTM3NCw3ICszNDUsNyBAQCB2b2lkIExpbmVCb3hCdWlsZGVyOjpjb25zdHJ1Y3RBbmRB
bGlnbklubGluZUxldmVsQm94ZXMoTGluZUJveCYgbGluZUJveCwgY29uc3QgTAogICAgICAgICBp
ZiAocnVuLmlzSGFyZExpbmVCcmVhaygpKSB7CiAgICAgICAgICAgICBhdXRvIGxpbmVCcmVha0Jv
eCA9IElubGluZUxldmVsQm94OjpjcmVhdGVMaW5lQnJlYWtCb3gobGF5b3V0Qm94LCBsb2dpY2Fs
TGVmdCk7CiAgICAgICAgICAgICBzZXRWZXJ0aWNhbEdlb21ldHJ5Rm9ySW5saW5lQm94KGxpbmVC
cmVha0JveCk7Ci0gICAgICAgICAgICBzaW1wbGlmaWVkQWxpZ25WZXJ0aWNhbGx5SWZBcHBsaWNh
YmxlKGxpbmVCcmVha0JveCwgeyB9KTsKKyAgICAgICAgICAgIHVwZGF0ZUNhblVzZVNpbXBsaWZp
ZWRBbGlnbm1lbnQobGluZUJyZWFrQm94KTsKICAgICAgICAgICAgIGxpbmVCb3guYWRkSW5saW5l
TGV2ZWxCb3goV1RGTW92ZShsaW5lQnJlYWtCb3gpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9CkBAIC0zODYsMzI0ICszNTcsMTAgQEAgdm9pZCBMaW5lQm94QnVpbGRlcjo6Y29u
c3RydWN0QW5kQWxpZ25JbmxpbmVMZXZlbEJveGVzKExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0IEwK
ICAgICB9CiAKICAgICBsaW5lQm94LnNldEhhc0NvbnRlbnQobGluZUhhc0NvbnRlbnQpOwotICAg
IGlmICghbGluZUhhc0NvbnRlbnQpIHsKLSAgICAgICAgbV9sb2dpY2FsSGVpZ2h0ID0geyB9Owot
ICAgICAgICByb290SW5saW5lQm94LnNldExvZ2ljYWxUb3AoLXJvb3RJbmxpbmVCb3guYmFzZWxp
bmUoKSk7Ci0gICAgfSBlbHNlIGlmIChzaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQuaXNFbmFi
bGVkKCkpIHsKLSAgICAgICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBiZSBhYmxlIHRvIGV4ZXJjaXNl
IHRoZSBmYXN0IHBhdGggd2hlbiB0aGUgbGluZSBoYXMgbm8gY29udGVudCBhdCBhbGwsIGV2ZW4g
aW4gbm9uLXN0YW5kYXJkcyBtb2RlIG9yIHdpdGggbGluZS1oZWlnaHQgc2V0LgotICAgICAgICBt
X2xvZ2ljYWxIZWlnaHQgPSBzaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQubGluZUJveEhlaWdo
dCgpOwotICAgICAgICByb290SW5saW5lQm94LnNldExvZ2ljYWxUb3Aoc2ltcGxpZmllZFZlcnRp
Y2FsQWxpZ25tZW50LnJvb3RJbmxpbmVCb3hMb2dpY2FsVG9wKCkpOwotICAgIH0gZWxzZQotICAg
ICAgICBjb21wdXRlTGluZUJveEhlaWdodEFuZEFsaWduSW5saW5lTGV2ZWxCb3hlc1ZlcnRpY2Fs
bHkobGluZUJveCk7Ci19CiAKLXZvaWQgTGluZUJveEJ1aWxkZXI6OmNvbXB1dGVMaW5lQm94SGVp
Z2h0QW5kQWxpZ25JbmxpbmVMZXZlbEJveGVzVmVydGljYWxseShMaW5lQm94JiBsaW5lQm94KQot
ewotICAgIEFTU0VSVChsaW5lQm94Lmhhc0NvbnRlbnQoKSk7Ci0gICAgLy8gVGhpcyBmdW5jdGlv
biAocGFydGlhbGx5KSBpbXBsZW1lbnRzOgotICAgIC8vIDIuMi4gTGF5b3V0IFdpdGhpbiBMaW5l
IEJveGVzCi0gICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1pbmxpbmUtMy8jbGluZS1s
YXlvdXQKLSAgICAvLyAxLiBDb21wdXRlIHRoZSBsaW5lIGJveCBoZWlnaHQgdXNpbmcgdGhlIGxh
eW91dCBib3VuZHMgZ2VvbWV0cnkuIFRoaXMgaGVpZ2h0IGNvbXB1dGF0aW9uIHN0cmljdGx5IHVz
ZXMgbGF5b3V0IGJvdW5kcyBhbmQgbm90IG5vcm1hbCBpbmxpbmUgbGV2ZWwgYm94IGdlb21ldHJp
ZXMuCi0gICAgLy8gMi4gQ29tcHV0ZSB0aGUgYmFzZWxpbmUvbG9naWNhbCB0b3AgcG9zaXRpb24g
b2YgdGhlIHJvb3QgaW5saW5lIGJveC4gQWxpZ25lZCBib3hlcyBwdXNoIHRoZSByb290IGlubGlu
ZSBib3ggYXJvdW5kIGluc2lkZSB0aGUgbGluZSBib3guCi0gICAgLy8gMy4gRmluYWxseSBhbGln
biB0aGUgaW5saW5lIGxldmVsIGJveGVzIHVzaW5nIChtb3N0bHkpIG5vcm1hbCBpbmxpbmUgbGV2
ZWwgYm94IGdlb21ldHJpZXMuCi0gICAgYXV0byYgcm9vdElubGluZUJveCA9IGxpbmVCb3gucm9v
dElubGluZUJveCgpOwotICAgIGF1dG8mIGZvcm1hdHRpbmdHZW9tZXRyeSA9IGZvcm1hdHRpbmdD
b250ZXh0KCkuZm9ybWF0dGluZ0dlb21ldHJ5KCk7Ci0KLSAgICBhdXRvIGNvbXB1dGVMaW5lQm94
TG9naWNhbEhlaWdodCA9IFsmXSB7Ci0gICAgICAgIC8vIExpbmUgYm94IGhlaWdodCBjb21wdXRh
dGlvbiBpcyBiYXNlZCBvbiB0aGUgbGF5b3V0IGJvdW5kcyBvZiB0aGUgaW5saW5lIGJveGVzIGFu
ZCBub3QgdGhlaXIgbG9naWNhbCAoYXNjZW50L2Rlc2NlbnQpIGRpbWVuc2lvbnMuCi0gICAgICAg
IHN0cnVjdCBBYnNvbHV0ZVRvcEFuZEJvdHRvbSB7Ci0gICAgICAgICAgICBJbmxpbmVMYXlvdXRV
bml0IHRvcCB7IDAgfTsKLSAgICAgICAgICAgIElubGluZUxheW91dFVuaXQgYm90dG9tIHsgMCB9
OwotICAgICAgICB9OwotICAgICAgICBIYXNoTWFwPGNvbnN0IElubGluZUxldmVsQm94KiwgQWJz
b2x1dGVUb3BBbmRCb3R0b20+IGlubGluZUxldmVsQm94QWJzb2x1dGVUb3BBbmRCb3R0b21NYXA7
Ci0KLSAgICAgICAgYXV0byBtaW5pbXVtTG9naWNhbFRvcCA9IHN0ZDo6b3B0aW9uYWw8SW5saW5l
TGF5b3V0VW5pdD4geyB9OwotICAgICAgICBhdXRvIG1heGltdW1Mb2dpY2FsQm90dG9tID0gc3Rk
OjpvcHRpb25hbDxJbmxpbmVMYXlvdXRVbml0PiB7IH07Ci0gICAgICAgIGlmIChmb3JtYXR0aW5n
R2VvbWV0cnkuaW5saW5lTGV2ZWxCb3hBZmZlY3RzTGluZUJveChyb290SW5saW5lQm94LCBsaW5l
Qm94KSkgewotICAgICAgICAgICAgbWluaW11bUxvZ2ljYWxUb3AgPSBJbmxpbmVMYXlvdXRVbml0
IHsgfTsKLSAgICAgICAgICAgIG1heGltdW1Mb2dpY2FsQm90dG9tID0gcm9vdElubGluZUJveC5s
YXlvdXRCb3VuZHMoKS5oZWlnaHQoKTsKLSAgICAgICAgICAgIGlubGluZUxldmVsQm94QWJzb2x1
dGVUb3BBbmRCb3R0b21NYXAuYWRkKCZyb290SW5saW5lQm94LCBBYnNvbHV0ZVRvcEFuZEJvdHRv
bSB7ICptaW5pbXVtTG9naWNhbFRvcCwgKm1heGltdW1Mb2dpY2FsQm90dG9tIH0pOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIGlubGluZUxldmVsQm94QWJzb2x1dGVUb3BBbmRCb3R0b21N
YXAuYWRkKCZyb290SW5saW5lQm94LCBBYnNvbHV0ZVRvcEFuZEJvdHRvbSB7IH0pOwotCi0gICAg
ICAgIFZlY3RvcjxJbmxpbmVMZXZlbEJveCo+IGxpbmVCb3hSZWxhdGl2ZUlubGluZUxldmVsQm94
ZXM7Ci0gICAgICAgIGZvciAoYXV0byYgaW5saW5lTGV2ZWxCb3ggOiBsaW5lQm94Lm5vblJvb3RJ
bmxpbmVMZXZlbEJveGVzKCkpIHsKLSAgICAgICAgICAgIGF1dG8mIGxheW91dEJveCA9IGlubGlu
ZUxldmVsQm94LmxheW91dEJveCgpOwotICAgICAgICAgICAgaWYgKGlubGluZUxldmVsQm94Lmhh
c0xpbmVCb3hSZWxhdGl2ZUFsaWdubWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgbGluZUJveFJl
bGF0aXZlSW5saW5lTGV2ZWxCb3hlcy5hcHBlbmQoJmlubGluZUxldmVsQm94KTsKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGF1dG8mIHBhcmVu
dElubGluZUJveCA9IGxpbmVCb3guaW5saW5lTGV2ZWxCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94
LnBhcmVudCgpKTsKLSAgICAgICAgICAgIC8vIExvZ2ljYWwgdG9wIGlzIHJlbGF0aXZlIHRvIHRo
ZSBwYXJlbnQgaW5saW5lIGJveCdzIGxheW91dCBib3VuZHMuCi0gICAgICAgICAgICAvLyBOb3Rl
IHRoYXQgdGhpcyBsb2dpY2FsIHRvcCBpcyBub3QgdGhlIGZpbmFsIGxvZ2ljYWwgdG9wIG9mIHRo
ZSBpbmxpbmUgbGV2ZWwgYm94LgotICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgbG9naWNhbCB0
b3AgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxheW91dCBib3VuZHMgZ2VvbWV0cnkgd2hpY2ggbWF5
IGJlIHZlcnkgZGlmZmVyZW50IGZyb20gdGhlIGlubGluZSBib3gncyBub3JtYWwgZ2VvbWV0cnku
Ci0gICAgICAgICAgICBhdXRvIGxvZ2ljYWxUb3AgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKLSAg
ICAgICAgICAgIHN3aXRjaCAoaW5saW5lTGV2ZWxCb3gudmVydGljYWxBbGlnbigpKSB7Ci0gICAg
ICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lOiB7Ci0gICAgICAgICAgICAgICAg
YXV0byBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gaW5saW5lTGV2ZWxCb3gu
bGF5b3V0Qm91bmRzKCkuYXNjZW50OwotICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBwYXJl
bnRJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50IC0gbG9naWNhbFRvcE9mZnNldEZyb21Q
YXJlbnRCYXNlbGluZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6TWlkZGxlOiB7Ci0gICAgICAgICAgICAgICAg
YXV0byBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gaW5saW5lTGV2ZWxCb3gu
bGF5b3V0Qm91bmRzKCkuaGVpZ2h0KCkgLyAyICsgcGFyZW50SW5saW5lQm94LnN0eWxlKCkuZm9u
dE1ldHJpY3MoKS54SGVpZ2h0KCkgLyAyOwotICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBw
YXJlbnRJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50IC0gbG9naWNhbFRvcE9mZnNldEZy
b21QYXJlbnRCYXNlbGluZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6QmFzZWxpbmVNaWRkbGU6IHsKLSAgICAg
ICAgICAgICAgICBhdXRvIGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgPSBpbmxp
bmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKSAvIDI7Ci0gICAgICAgICAgICAgICAg
bG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQgLSBsb2dp
Y2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpMZW5ndGg6IHsK
LSAgICAgICAgICAgICAgICBhdXRvJiBzdHlsZSA9IGlubGluZUxldmVsQm94LnN0eWxlKCk7Ci0g
ICAgICAgICAgICAgICAgYXV0byBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0g
ZmxvYXRWYWx1ZUZvckxlbmd0aChzdHlsZS52ZXJ0aWNhbEFsaWduTGVuZ3RoKCksIHN0eWxlLmNv
bXB1dGVkTGluZUhlaWdodCgpKSArIGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmFzY2Vu
dDsKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94LmxheW91dEJv
dW5kcygpLmFzY2VudCAtIGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFZlcnRp
Y2FsQWxpZ246OlRleHRUb3A6IHsKLSAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGV4dC10
b3AgYWxpZ25zIHdpdGggdGhlIGlubGluZSBib3gncyBmb250IG1ldHJpY3MgdG9wIChhc2NlbnQp
IGFuZCBub3QgdGhlIGxheW91dCBib3VuZHMgdG9wLgotICAgICAgICAgICAgICAgIGxvZ2ljYWxU
b3AgPSBwYXJlbnRJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50IC0gcGFyZW50SW5saW5l
Qm94LmJhc2VsaW5lKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRleHRCb3R0b206IHsKLSAgICAgICAgICAg
ICAgICAvLyBOb3RlIHRoYXQgdGV4dC1ib3R0b20gYWxpZ25zIHdpdGggdGhlIGlubGluZSBib3gn
cyBmb250IG1ldHJpY3MgYm90dG9tIChkZXNjZW50KSBhbmQgbm90IHRoZSBsYXlvdXQgYm91bmRz
IGJvdHRvbS4KLSAgICAgICAgICAgICAgICBhdXRvIHBhcmVudElubGluZUJveExheW91dEJvdW5k
cyA9IHBhcmVudElubGluZUJveC5sYXlvdXRCb3VuZHMoKTsKLSAgICAgICAgICAgICAgICBhdXRv
IHBhcmVudElubGluZUJveExvZ2ljYWxCb3R0b20gPSBwYXJlbnRJbmxpbmVCb3hMYXlvdXRCb3Vu
ZHMuaGVpZ2h0KCkgLSBwYXJlbnRJbmxpbmVCb3hMYXlvdXRCb3VuZHMuZGVzY2VudCArIHBhcmVu
dElubGluZUJveC5kZXNjZW50KCkudmFsdWVfb3IoSW5saW5lTGF5b3V0VW5pdCgpKTsKLSAgICAg
ICAgICAgICAgICBsb2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94TG9naWNhbEJvdHRvbSAtIGlu
bGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmhlaWdodCgpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpTdWI6
IHsKLSAgICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxp
bmUgPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQgLSAocGFyZW50SW5saW5l
Qm94LnN0eWxlKCkuZm9udENhc2NhZGUoKS5zaXplKCkgLyA1ICsgMSk7Ci0gICAgICAgICAgICAg
ICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQgLSBs
b2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpTdXBlcjog
ewotICAgICAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGlu
ZSA9IGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmFzY2VudCArIHBhcmVudElubGluZUJv
eC5zdHlsZSgpLmZvbnRDYXNjYWRlKCkuc2l6ZSgpIC8gMyArIDE7Ci0gICAgICAgICAgICAgICAg
bG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQgLSBsb2dp
Y2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgYXV0byBwYXJlbnRJbmxpbmVCb3hBYnNvbHV0ZVRvcEFuZEJv
dHRvbSA9IGlubGluZUxldmVsQm94QWJzb2x1dGVUb3BBbmRCb3R0b21NYXAuZ2V0KCZwYXJlbnRJ
bmxpbmVCb3gpOwotICAgICAgICAgICAgYXV0byBhYnNvbHV0ZUxvZ2ljYWxUb3AgPSBwYXJlbnRJ
bmxpbmVCb3hBYnNvbHV0ZVRvcEFuZEJvdHRvbS50b3AgKyBsb2dpY2FsVG9wOwotICAgICAgICAg
ICAgYXV0byBhYnNvbHV0ZUxvZ2ljYWxCb3R0b20gPSBhYnNvbHV0ZUxvZ2ljYWxUb3AgKyBpbmxp
bmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKTsKLSAgICAgICAgICAgIGlubGluZUxl
dmVsQm94QWJzb2x1dGVUb3BBbmRCb3R0b21NYXAuYWRkKCZpbmxpbmVMZXZlbEJveCwgQWJzb2x1
dGVUb3BBbmRCb3R0b20geyBhYnNvbHV0ZUxvZ2ljYWxUb3AsIGFic29sdXRlTG9naWNhbEJvdHRv
bSB9KTsKLSAgICAgICAgICAgIC8vIFN0cmV0Y2ggdGhlIG1pbi9tYXggYWJzb2x1dGUgdmFsdWVz
IGlmIGFwcGxpY2FibGUuCi0gICAgICAgICAgICBpZiAoZm9ybWF0dGluZ0dlb21ldHJ5LmlubGlu
ZUxldmVsQm94QWZmZWN0c0xpbmVCb3goaW5saW5lTGV2ZWxCb3gsIGxpbmVCb3gpKSB7Ci0gICAg
ICAgICAgICAgICAgbWluaW11bUxvZ2ljYWxUb3AgPSBzdGQ6Om1pbihtaW5pbXVtTG9naWNhbFRv
cC52YWx1ZV9vcihhYnNvbHV0ZUxvZ2ljYWxUb3ApLCBhYnNvbHV0ZUxvZ2ljYWxUb3ApOwotICAg
ICAgICAgICAgICAgIG1heGltdW1Mb2dpY2FsQm90dG9tID0gc3RkOjptYXgobWF4aW11bUxvZ2lj
YWxCb3R0b20udmFsdWVfb3IoYWJzb2x1dGVMb2dpY2FsQm90dG9tKSwgYWJzb2x1dGVMb2dpY2Fs
Qm90dG9tKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyBUaGUgbGluZSBi
b3ggaGVpZ2h0IGNvbXB1dGF0aW9uIGlzIGFzIGZvbGxvd3M6Ci0gICAgICAgIC8vIDEuIFN0cmV0
Y2ggdGhlIGxpbmUgYm94IHdpdGggdGhlIG5vbi1saW5lLWJveCByZWxhdGl2ZSBhbGlnbmVkIGlu
bGluZSBib3ggYWJzb2x1dGUgdG9wIGFuZCBib3R0b20gdmFsdWVzLgotICAgICAgICAvLyAyLiBD
aGVjayBpZiB0aGUgbGluZSBib3ggcmVsYXRpdmUgYWxpZ25lZCBpbmxpbmUgYm94ZXMgKHRvcCwg
Ym90dG9tIGV0YykgaGF2ZSBlbm91Z2ggcm9vbSBhbmQgc3RyZXRjaCB0aGUgbGluZSBib3ggZnVy
dGhlciBpZiBuZWVkZWQuCi0gICAgICAgIGF1dG8gbGluZUJveExvZ2ljYWxIZWlnaHQgPSBtYXhp
bXVtTG9naWNhbEJvdHRvbS52YWx1ZV9vcihJbmxpbmVMYXlvdXRVbml0KCkpIC0gbWluaW11bUxv
Z2ljYWxUb3AudmFsdWVfb3IoSW5saW5lTGF5b3V0VW5pdCgpKTsKLSAgICAgICAgZm9yIChhdXRv
KiBsaW5lQm94UmVsYXRpdmVJbmxpbmVMZXZlbEJveCA6IGxpbmVCb3hSZWxhdGl2ZUlubGluZUxl
dmVsQm94ZXMpIHsKLSAgICAgICAgICAgIGlmICghZm9ybWF0dGluZ0dlb21ldHJ5LmlubGluZUxl
dmVsQm94QWZmZWN0c0xpbmVCb3goKmxpbmVCb3hSZWxhdGl2ZUlubGluZUxldmVsQm94LCBsaW5l
Qm94KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGxpbmVCb3hMb2dp
Y2FsSGVpZ2h0ID0gc3RkOjptYXgobGluZUJveExvZ2ljYWxIZWlnaHQsIGxpbmVCb3hSZWxhdGl2
ZUlubGluZUxldmVsQm94LT5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgbV9sb2dpY2FsSGVpZ2h0ID0gbGluZUJveExvZ2ljYWxIZWlnaHQ7Ci0gICAgfTsKLSAg
ICBjb21wdXRlTGluZUJveExvZ2ljYWxIZWlnaHQoKTsKLQotICAgIGF1dG8gY29tcHV0ZVJvb3RJ
bmxpbmVCb3hWZXJ0aWNhbFBvc2l0aW9uID0gWyZdIHsKLSAgICAgICAgSGFzaE1hcDxjb25zdCBJ
bmxpbmVMZXZlbEJveCosIElubGluZUxheW91dFVuaXQ+IGlubGluZUxldmVsQm94QWJzb2x1dGVC
YXNlbGluZU9mZnNldE1hcDsKLSAgICAgICAgaW5saW5lTGV2ZWxCb3hBYnNvbHV0ZUJhc2VsaW5l
T2Zmc2V0TWFwLmFkZCgmcm9vdElubGluZUJveCwgSW5saW5lTGF5b3V0VW5pdCB7IH0pOwotCi0g
ICAgICAgIGF1dG8gbWF4aW11bVRvcE9mZnNldEZyb21Sb290SW5saW5lQm94QmFzZWxpbmUgPSBz
dGQ6Om9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IHsgfTsKLSAgICAgICAgaWYgKGZvcm1hdHRp
bmdHZW9tZXRyeS5pbmxpbmVMZXZlbEJveEFmZmVjdHNMaW5lQm94KHJvb3RJbmxpbmVCb3gsIGxp
bmVCb3gpKQotICAgICAgICAgICAgbWF4aW11bVRvcE9mZnNldEZyb21Sb290SW5saW5lQm94QmFz
ZWxpbmUgPSByb290SW5saW5lQm94LmxheW91dEJvdW5kcygpLmFzY2VudDsKLQotICAgICAgICBm
b3IgKGF1dG8mIGlubGluZUxldmVsQm94IDogbGluZUJveC5ub25Sb290SW5saW5lTGV2ZWxCb3hl
cygpKSB7Ci0gICAgICAgICAgICBhdXRvIGFic29sdXRlQmFzZWxpbmVPZmZzZXQgPSBJbmxpbmVM
YXlvdXRVbml0IHsgfTsKLSAgICAgICAgICAgIGlmICghaW5saW5lTGV2ZWxCb3guaGFzTGluZUJv
eFJlbGF0aXZlQWxpZ25tZW50KCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3gg
PSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3goKTsKLSAgICAgICAgICAgICAgICBhdXRvJiBwYXJl
bnRJbmxpbmVCb3ggPSBsaW5lQm94LmlubGluZUxldmVsQm94Rm9yTGF5b3V0Qm94KGxheW91dEJv
eC5wYXJlbnQoKSk7Ci0gICAgICAgICAgICAgICAgYXV0byBiYXNlbGluZU9mZnNldEZyb21QYXJl
bnRCYXNlbGluZSA9IElubGluZUxheW91dFVuaXQgeyB9OwotCi0gICAgICAgICAgICAgICAgc3dp
dGNoIChpbmxpbmVMZXZlbEJveC52ZXJ0aWNhbEFsaWduKCkpIHsKLSAgICAgICAgICAgICAgICBj
YXNlIFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lOgotICAgICAgICAgICAgICAgICAgICBiYXNlbGlu
ZU9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IHsgfTsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpNaWRkbGU6IHsKLSAgICAg
ICAgICAgICAgICAgICAgYXV0byBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0g
KGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmhlaWdodCgpIC8gMiArIHBhcmVudElubGlu
ZUJveC5zdHlsZSgpLmZvbnRNZXRyaWNzKCkueEhlaWdodCgpIC8gMik7Ci0gICAgICAgICAgICAg
ICAgICAgIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gbG9naWNhbFRvcE9mZnNl
dEZyb21QYXJlbnRCYXNlbGluZSAtIGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmFzY2Vu
dDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6QmFzZWxpbmVNaWRkbGU6IHsKLSAgICAgICAg
ICAgICAgICAgICAgYXV0byBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gaW5s
aW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuaGVpZ2h0KCkgLyAyOwotICAgICAgICAgICAgICAg
ICAgICBiYXNlbGluZU9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IGxvZ2ljYWxUb3BPZmZzZXRG
cm9tUGFyZW50QmFzZWxpbmUgLSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQ7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246Okxlbmd0aDogewotICAgICAgICAgICAgICAgICAg
ICBhdXRvJiBzdHlsZSA9IGlubGluZUxldmVsQm94LnN0eWxlKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGF1dG8gdmVydGljYWxBbGlnbk9mZnNldCA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoc3R5bGUu
dmVydGljYWxBbGlnbkxlbmd0aCgpLCBzdHlsZS5jb21wdXRlZExpbmVIZWlnaHQoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9
IHZlcnRpY2FsQWxpZ25PZmZzZXQgKyBpbmxpbmVMZXZlbEJveC5iYXNlbGluZSgpOwotICAgICAg
ICAgICAgICAgICAgICBiYXNlbGluZU9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IGxvZ2ljYWxU
b3BPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgLSBpbmxpbmVMZXZlbEJveC5iYXNlbGluZSgpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUZXh0VG9wOgotICAgICAgICAgICAgICAgICAgICBi
YXNlbGluZU9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IHBhcmVudElubGluZUJveC5iYXNlbGlu
ZSgpIC0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50OwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRleHRC
b3R0b206Ci0gICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJhc2Vs
aW5lID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuZGVzY2VudCAtICpwYXJlbnRJbmxp
bmVCb3guZGVzY2VudCgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlN1YjoKLSAgICAgICAgICAgICAgICAgICAgYmFzZWxp
bmVPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgPSAtKHBhcmVudElubGluZUJveC5zdHlsZSgpLmZv
bnRDYXNjYWRlKCkuc2l6ZSgpIC8gNSArIDEpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlN1cGVyOgotICAgICAgICAgICAg
ICAgICAgICBiYXNlbGluZU9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IHBhcmVudElubGluZUJv
eC5zdHlsZSgpLmZvbnRDYXNjYWRlKCkuc2l6ZSgpIC8gMyArIDE7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAg
IEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhYnNvbHV0ZUJhc2VsaW5lT2Zm
c2V0ID0gaW5saW5lTGV2ZWxCb3hBYnNvbHV0ZUJhc2VsaW5lT2Zmc2V0TWFwLmdldCgmcGFyZW50
SW5saW5lQm94KSArIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lOwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGlubGluZUxldmVsQm94LnZlcnRp
Y2FsQWxpZ24oKSkgewotICAgICAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VG9wOiB7
Ci0gICAgICAgICAgICAgICAgICAgIGFic29sdXRlQmFzZWxpbmVPZmZzZXQgPSByb290SW5saW5l
Qm94LmxheW91dEJvdW5kcygpLmFzY2VudCAtIGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygp
LmFzY2VudDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6Qm90dG9tOiB7Ci0gICAgICAgICAg
ICAgICAgICAgIGFic29sdXRlQmFzZWxpbmVPZmZzZXQgPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRC
b3VuZHMoKS5kZXNjZW50IC0gcm9vdElubGluZUJveC5sYXlvdXRCb3VuZHMoKS5kZXNjZW50Owot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRF
RF9ZRVQoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5saW5lTGV2ZWxCb3hBYnNvbHV0ZUJhc2VsaW5l
T2Zmc2V0TWFwLmFkZCgmaW5saW5lTGV2ZWxCb3gsIGFic29sdXRlQmFzZWxpbmVPZmZzZXQpOwot
ICAgICAgICAgICAgYXV0byBhZmZlY3RzUm9vdElubGluZUJveFZlcnRpY2FsUG9zaXRpb24gPSBm
b3JtYXR0aW5nR2VvbWV0cnkuaW5saW5lTGV2ZWxCb3hBZmZlY3RzTGluZUJveChpbmxpbmVMZXZl
bEJveCwgbGluZUJveCk7Ci0gICAgICAgICAgICBpZiAoYWZmZWN0c1Jvb3RJbmxpbmVCb3hWZXJ0
aWNhbFBvc2l0aW9uKSB7Ci0gICAgICAgICAgICAgICAgYXV0byB0b3BPZmZzZXRGcm9tUm9vdElu
bGluZUJveEJhc2VsaW5lID0gYWJzb2x1dGVCYXNlbGluZU9mZnNldCArIGlubGluZUxldmVsQm94
LmxheW91dEJvdW5kcygpLmFzY2VudDsKLSAgICAgICAgICAgICAgICBpZiAobWF4aW11bVRvcE9m
ZnNldEZyb21Sb290SW5saW5lQm94QmFzZWxpbmUpCi0gICAgICAgICAgICAgICAgICAgIG1heGlt
dW1Ub3BPZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5lID0gc3RkOjptYXgoKm1heGltdW1U
b3BPZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5lLCB0b3BPZmZzZXRGcm9tUm9vdElubGlu
ZUJveEJhc2VsaW5lKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gV2UgYXJlIGlzIHF1aXJrIG1vZGUgYW5kIHRoZSByb290IGlubGluZSBib3ggaGFzIG5v
IGNvbnRlbnQuIFRoZSByb290IGlubGluZSBib3gncyBiYXNlbGluZSBpcyBhbmNob3JlZCBhdCAw
LgotICAgICAgICAgICAgICAgICAgICAvLyBIb3dldmVyIG5lZ2F0aXZlIGFzY2VudCAoZS5nIG5l
Z2F0aXZlIHRvcCBtYXJnaW4pIGNhbiAicHVzaCIgdGhlIHJvb3QgaW5saW5lIGJveCB1cHdhcmRz
IGFuZCBoYXZlIGEgbmVnYXRpdmUgdmFsdWUuCi0gICAgICAgICAgICAgICAgICAgIG1heGltdW1U
b3BPZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5lID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0
Qm91bmRzKCkuYXNjZW50ID49IDAKLSAgICAgICAgICAgICAgICAgICAgICAgID8gc3RkOjptYXgo
MC4wZiwgdG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIDogdG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYXV0byByb290SW5s
aW5lQm94TG9naWNhbFRvcCA9IG1heGltdW1Ub3BPZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2Vs
aW5lLnZhbHVlX29yKDAuZikgLSByb290SW5saW5lQm94LmJhc2VsaW5lKCk7Ci0gICAgICAgIHJv
b3RJbmxpbmVCb3guc2V0TG9naWNhbFRvcChyb290SW5saW5lQm94TG9naWNhbFRvcCk7Ci0gICAg
fTsKLSAgICBjb21wdXRlUm9vdElubGluZUJveFZlcnRpY2FsUG9zaXRpb24oKTsKLQotICAgIGF1
dG8gYWxpZ25JbmxpbmVMZXZlbEJveGVzID0gWyZdIHsKLSAgICAgICAgZm9yIChhdXRvJiBpbmxp
bmVMZXZlbEJveCA6IGxpbmVCb3gubm9uUm9vdElubGluZUxldmVsQm94ZXMoKSkgewotICAgICAg
ICAgICAgYXV0byYgbGF5b3V0Qm94ID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm94KCk7Ci0gICAg
ICAgICAgICBhdXRvJiBwYXJlbnRJbmxpbmVCb3ggPSBsaW5lQm94LmlubGluZUxldmVsQm94Rm9y
TGF5b3V0Qm94KGxheW91dEJveC5wYXJlbnQoKSk7Ci0gICAgICAgICAgICBhdXRvIGxvZ2ljYWxU
b3AgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKLSAgICAgICAgICAgIHN3aXRjaCAoaW5saW5lTGV2
ZWxCb3gudmVydGljYWxBbGlnbigpKSB7Ci0gICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246
OkJhc2VsaW5lOgotICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBwYXJlbnRJbmxpbmVCb3gu
YmFzZWxpbmUoKSAtIGlubGluZUxldmVsQm94LmJhc2VsaW5lKCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246Ok1pZGRsZTogewotICAgICAg
ICAgICAgICAgIGF1dG8gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IChpbmxp
bmVMZXZlbEJveC5sb2dpY2FsSGVpZ2h0KCkgLyAyICsgcGFyZW50SW5saW5lQm94LnN0eWxlKCku
Zm9udE1ldHJpY3MoKS54SGVpZ2h0KCkgLyAyKTsKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9w
ID0gcGFyZW50SW5saW5lQm94LmJhc2VsaW5lKCkgLSBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVu
dEJhc2VsaW5lOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZU1pZGRsZTogewotICAgICAgICAgICAg
ICAgIGF1dG8gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IGlubGluZUxldmVs
Qm94LmxvZ2ljYWxIZWlnaHQoKSAvIDI7Ci0gICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IHBh
cmVudElubGluZUJveC5iYXNlbGluZSgpIC0gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNl
bGluZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGNhc2UgVmVydGljYWxBbGlnbjo6TGVuZ3RoOiB7Ci0gICAgICAgICAgICAgICAgYXV0byYgc3R5
bGUgPSBpbmxpbmVMZXZlbEJveC5zdHlsZSgpOwotICAgICAgICAgICAgICAgIGF1dG8gdmVydGlj
YWxBbGlnbk9mZnNldCA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoc3R5bGUudmVydGljYWxBbGlnbkxl
bmd0aCgpLCBzdHlsZS5jb21wdXRlZExpbmVIZWlnaHQoKSk7Ci0gICAgICAgICAgICAgICAgYXV0
byBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gdmVydGljYWxBbGlnbk9mZnNl
dCArIGlubGluZUxldmVsQm94LmJhc2VsaW5lKCk7Ci0gICAgICAgICAgICAgICAgbG9naWNhbFRv
cCA9IHBhcmVudElubGluZUJveC5iYXNlbGluZSgpIC0gbG9naWNhbFRvcE9mZnNldEZyb21QYXJl
bnRCYXNlbGluZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6U3ViOiB7Ci0gICAgICAgICAgICAgICAgYXV0byBs
b2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gaW5saW5lTGV2ZWxCb3guYmFzZWxp
bmUoKSAtIChwYXJlbnRJbmxpbmVCb3guc3R5bGUoKS5mb250Q2FzY2FkZSgpLnNpemUoKSAvIDUg
KyAxKTsKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94LmJhc2Vs
aW5lKCkgLSBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWdu
OjpTdXBlcjogewotICAgICAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcE9mZnNldEZyb21QYXJl
bnRCYXNlbGluZSA9IGlubGluZUxldmVsQm94LmJhc2VsaW5lKCkgKyBwYXJlbnRJbmxpbmVCb3gu
c3R5bGUoKS5mb250Q2FzY2FkZSgpLnNpemUoKSAvIDMgKyAxOwotICAgICAgICAgICAgICAgIGxv
Z2ljYWxUb3AgPSBwYXJlbnRJbmxpbmVCb3guYmFzZWxpbmUoKSAtIGxvZ2ljYWxUb3BPZmZzZXRG
cm9tUGFyZW50QmFzZWxpbmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAvLyBOb3RlIHRoYXQgKHRleHQpdG9wL2JvdHRvbSBhbGlnbiB0aGVpciBs
YXlvdXQgYm91bmRzLgotICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUZXh0VG9wOgot
ICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMo
KS5hc2NlbnQgLSBpbmxpbmVMZXZlbEJveC5iYXNlbGluZSgpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUZXh0Qm90dG9tOgotICAgICAg
ICAgICAgICAgIGxvZ2ljYWxUb3AgPSBwYXJlbnRJbmxpbmVCb3gubG9naWNhbEhlaWdodCgpIC0g
aW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuZGVzY2VudCAtIGlubGluZUxldmVsQm94LmJh
c2VsaW5lKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFZlcnRp
Y2FsQWxpZ246OlRvcDoKLSAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBsb2dpY2Fs
IHRvcCBpcyBub3QgcmVsYXRpdmUgdG8gdGhlIHBhcmVudCBpbmxpbmUgYm94LgotICAgICAgICAg
ICAgICAgIGxvZ2ljYWxUb3AgPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQg
LSBpbmxpbmVMZXZlbEJveC5iYXNlbGluZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCb3R0b206Ci0gICAgICAgICAgICAgICAgLy8g
Tm90ZSB0aGF0IHRoaXMgbG9naWNhbCB0b3AgaXMgbm90IHJlbGF0aXZlIHRvIHRoZSBwYXJlbnQg
aW5saW5lIGJveC4KLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gbV9sb2dpY2FsSGVpZ2h0
IC0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuZGVzY2VudCAtIGlubGluZUxldmVsQm94
LmJhc2VsaW5lKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbmxpbmVMZXZlbEJv
eC5zZXRMb2dpY2FsVG9wKGxvZ2ljYWxUb3ApOwotICAgICAgICB9Ci0gICAgfTsKLSAgICBhbGln
bklubGluZUxldmVsQm94ZXMoKTsKLX0KLQotTGluZUJveEJ1aWxkZXI6OlNpbXBsaWZpZWRWZXJ0
aWNhbEFsaWdubWVudDo6U2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50KGNvbnN0IElubGluZUxl
dmVsQm94JiByb290SW5saW5lQm94KQotICAgIDogbV9yb290SW5saW5lQm94KHJvb3RJbmxpbmVC
b3gpCi17Ci0gICAgYWRqdXN0KHJvb3RJbmxpbmVCb3gpOwotfQotCi1ib29sIExpbmVCb3hCdWls
ZGVyOjpTaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQ6OmNhblVzZVNpbXBsaWZpZWRBbGlnbm1l
bnQoY29uc3QgSW5saW5lTGV2ZWxCb3gmIHJvb3RJbmxpbmVCb3gsIGNvbnN0IElubGluZUxldmVs
Qm94JiBpbmxpbmVMZXZlbEJveCwgc3RkOjpvcHRpb25hbDxjb25zdCBCb3hHZW9tZXRyeT4gaW5s
aW5lTGV2ZWxCb3hHZW9tZXRyeSkKLXsKLSAgICBpZiAoaW5saW5lTGV2ZWxCb3guaXNBdG9taWNJ
bmxpbmVMZXZlbEJveCgpKSB7Ci0gICAgICAgIEFTU0VSVChpbmxpbmVMZXZlbEJveEdlb21ldHJ5
KTsKLSAgICAgICAgLy8gQmFzZWxpbmUgYWxpZ25lZCwgbm9uLXN0cmV0Y2h5IGRpcmVjdCBjaGls
ZHJlbiBhcmUgY29uc2lkZXJlZCB0byBiZSBzaW1wbGUgZm9yIG5vdy4KLSAgICAgICAgYXV0byYg
bGF5b3V0Qm94ID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm94KCk7Ci0gICAgICAgIHJldHVybiAm
bGF5b3V0Qm94LnBhcmVudCgpID09ICZyb290SW5saW5lQm94LmxheW91dEJveCgpCi0gICAgICAg
ICAgICAmJiBsYXlvdXRCb3guc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCkgPT0gVmVydGljYWxBbGln
bjo6QmFzZWxpbmUKLSAgICAgICAgICAgICYmICFpbmxpbmVMZXZlbEJveEdlb21ldHJ5LT5tYXJn
aW5CZWZvcmUoKQotICAgICAgICAgICAgJiYgIWlubGluZUxldmVsQm94R2VvbWV0cnktPm1hcmdp
bkFmdGVyKCkKLSAgICAgICAgICAgICYmIGlubGluZUxldmVsQm94R2VvbWV0cnktPm1hcmdpbkJv
eEhlaWdodCgpIDw9IHJvb3RJbmxpbmVCb3guYmFzZWxpbmUoKTsKLSAgICB9Ci0gICAgaWYgKGlu
bGluZUxldmVsQm94LmlzTGluZUJyZWFrQm94KCkpIHsKLSAgICAgICAgLy8gQmFzZWxpbmUgYWxp
Z25lZCwgbm9uLXN0cmV0Y2h5IGxpbmUgYnJlYWtzIGUuZy4gPGRpdj48c3Bhbj48YnI+PC9zcGFu
PjwvZGl2PiBidXQgbm90IDxkaXY+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTAwcHg7Ij48YnI+
PC9zcGFuPjwvZGl2Pi4KLSAgICAgICAgcmV0dXJuIGlubGluZUxldmVsQm94LmxheW91dEJveCgp
LnN0eWxlKCkudmVydGljYWxBbGlnbigpID09IFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lICYmIGlu
bGluZUxldmVsQm94LmJhc2VsaW5lKCkgPD0gcm9vdElubGluZUJveC5iYXNlbGluZSgpOwotICAg
IH0KLSAgICBpZiAoaW5saW5lTGV2ZWxCb3guaXNJbmxpbmVCb3goKSkgewotICAgICAgICAvLyBC
YXNlbGluZSBhbGlnbmVkLCBub24tc3RyZXRjaHkgaW5saW5lIGJveGVzIGUuZy4gPGRpdj48c3Bh
bj48L3NwYW4+PC9kaXY+IGJ1dCBub3QgPGRpdj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMDBw
eDsiPjwvc3Bhbj48L2Rpdj4uCi0gICAgICAgIHJldHVybiBpbmxpbmVMZXZlbEJveC5sYXlvdXRC
b3goKS5zdHlsZSgpLnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZSAm
JiBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKSA9PSByb290SW5saW5lQm94LmxheW91dEJv
dW5kcygpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgTGluZUJveEJ1aWxk
ZXI6OlNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudDo6YWxpZ24oSW5saW5lTGV2ZWxCb3gmIGlu
bGluZUxldmVsQm94KQotewotICAgIGlmIChpbmxpbmVMZXZlbEJveC5pc0F0b21pY0lubGluZUxl
dmVsQm94KCkgfHwgaW5saW5lTGV2ZWxCb3guaXNMaW5lQnJlYWtCb3goKSB8fCBpbmxpbmVMZXZl
bEJveC5pc0lubGluZUJveCgpKSB7Ci0gICAgICAgIC8vIE9ubHkgYmFzZWxpbmUgYWxpZ25tZW50
IGZvciBub3cuCi0gICAgICAgIGlubGluZUxldmVsQm94LnNldExvZ2ljYWxUb3AobV9yb290SW5s
aW5lQm94LmJhc2VsaW5lKCkgLSBpbmxpbmVMZXZlbEJveC5iYXNlbGluZSgpKTsKLSAgICAgICAg
YWRqdXN0KGlubGluZUxldmVsQm94KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBBU1NF
UlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOwotfQotCi12b2lkIExpbmVCb3hCdWlsZGVyOjpTaW1w
bGlmaWVkVmVydGljYWxBbGlnbm1lbnQ6OmFkanVzdChjb25zdCBJbmxpbmVMZXZlbEJveCYgaW5s
aW5lTGV2ZWxCb3gpCi17Ci0gICAgYXV0byBsYXlvdXRCb3VuZHNMb2dpY2FsVG9wID0gbV9yb290
SW5saW5lQm94LmxheW91dEJvdW5kcygpLmFzY2VudCAtIGlubGluZUxldmVsQm94LmxheW91dEJv
dW5kcygpLmFzY2VudDsKLSAgICBtX2xpbmVCb3hMb2dpY2FsVG9wID0gc3RkOjptaW4obV9saW5l
Qm94TG9naWNhbFRvcCwgbGF5b3V0Qm91bmRzTG9naWNhbFRvcCk7Ci0gICAgbV9saW5lQm94TG9n
aWNhbEJvdHRvbSA9IHN0ZDo6bWF4KG1fbGluZUJveExvZ2ljYWxCb3R0b20sIGxheW91dEJvdW5k
c0xvZ2ljYWxUb3AgKyBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKSk7Ci0g
ICAgbV9yb290SW5saW5lQm94TG9naWNhbFRvcCA9IHN0ZDo6bWF4KG1fcm9vdElubGluZUJveExv
Z2ljYWxUb3AsIGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmFzY2VudCAtIG1fcm9vdElu
bGluZUJveC5iYXNlbGluZSgpKTsKKyAgICBhdXRvIHZlcnRpY2FsQWxpZ25lciA9IExpbmVCb3hW
ZXJ0aWNhbEFsaWduZXIgeyBmb3JtYXR0aW5nQ29udGV4dCgpIH07CisgICAgY2FuVXNlU2ltcGxp
ZmllZEFsaWdubWVudCA9IGNhblVzZVNpbXBsaWZpZWRBbGlnbm1lbnQgfHwgIWxpbmVIYXNDb250
ZW50OworICAgIHJldHVybiB2ZXJ0aWNhbEFsaWduZXIuY29tcHV0ZUxvZ2ljYWxIZWlnaHRBbmRB
bGlnbihsaW5lQm94LCBjYW5Vc2VTaW1wbGlmaWVkQWxpZ25tZW50KTsKIH0KIAogSW5saW5lRm9y
bWF0dGluZ0dlb21ldHJ5OjpJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkoY29uc3QgSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGV2ZWxC
b3guaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lu
bGluZUxldmVsQm94LmgKaW5kZXggN2NlODE3MjI4YmVhYzkwMjQ2YTE1ZmJjMTg2MTMzNTJjODQ5
NGEzNy4uODg2Y2ExZjhlZWM0NzQ0ZDM0YTk4ZWNhNTdjMDA4MGIwMTNjODg5YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5l
TGV2ZWxCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRz
L2lubGluZS9JbmxpbmVMZXZlbEJveC5oCkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBMYXlv
dXQgewogCiBjbGFzcyBMaW5lQm94OwogY2xhc3MgTGluZUJveEJ1aWxkZXI7Ci1zdHJ1Y3QgU2lt
cGxpZmllZFZlcnRpY2FsQWxpZ25tZW50OworY2xhc3MgTGluZUJveFZlcnRpY2FsQWxpZ25lcjsK
IAogY2xhc3MgSW5saW5lTGV2ZWxCb3ggewogcHVibGljOgpAQCAtODQsOSArODQsOSBAQCBwdWJs
aWM6CiAgICAgSW5saW5lTGV2ZWxCb3goKSA9IGRlZmF1bHQ7CiAKIHByaXZhdGU6Ci0gICAgZnJp
ZW5kIHN0cnVjdCBTaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQ7Ci0gICAgZnJpZW5kIGNsYXNz
IExpbmVCb3hCdWlsZGVyOwogICAgIGZyaWVuZCBjbGFzcyBMaW5lQm94OworICAgIGZyaWVuZCBj
bGFzcyBMaW5lQm94QnVpbGRlcjsKKyAgICBmcmllbmQgY2xhc3MgTGluZUJveFZlcnRpY2FsQWxp
Z25lcjsKIAogICAgIGNvbnN0IElubGluZVJlY3QmIGxvZ2ljYWxSZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9sb2dpY2FsUmVjdDsgfQogICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbFRvcCgpIGNv
bnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QudG9wKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmVCb3guaCBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxp
bmVCb3guaAppbmRleCBiNWYxYTYyYjliZjRhN2RiNDgyMDlhMjA3YWM2NTVjYmU3MDE3NjU5Li5i
NmQ4MDZmMzk1Y2EyNDUxOTBkNTQwOTgxMDk3YWE3ZTgzNjI2YmUzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lQm94
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUv
SW5saW5lTGluZUJveC5oCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBMYXlvdXQgewogY2xh
c3MgQm94R2VvbWV0cnk7CiBjbGFzcyBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKIGNsYXNzIExp
bmVCb3hCdWlsZGVyOwotc3RydWN0IFNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudDsKK2NsYXNz
IExpbmVCb3hWZXJ0aWNhbEFsaWduZXI7CiAKIC8vICAgX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIExpbmUgQm94CiAvLyB8ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTgy
LDYgKzgyLDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMaW5lQm94
QnVpbGRlcjsKKyAgICBmcmllbmQgY2xhc3MgTGluZUJveFZlcnRpY2FsQWxpZ25lcjsKIAogICAg
IHZvaWQgYWRkSW5saW5lTGV2ZWxCb3goSW5saW5lTGV2ZWxCb3gmJik7CiAgICAgSW5saW5lTGV2
ZWxCb3hMaXN0JiBub25Sb290SW5saW5lTGV2ZWxCb3hlcygpIHsgcmV0dXJuIG1fbm9uUm9vdElu
bGluZUxldmVsQm94TGlzdDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGluZUJveFZlcnRpY2FsQWxpZ25lci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVM
aW5lQm94VmVydGljYWxBbGlnbmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZGEzZDhmZjdhMjdkYzA3NTRk
M2M4YjZlNzFhNmRkNzQ5MjBmNzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGluZUJveFZlcnRpY2FsQWxp
Z25lci5jcHAKQEAgLTAsMCArMSwzNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSW5saW5lTGluZUJveFZlcnRpY2FsQWxpZ25lci5oIgorCisjaWYgRU5B
QkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25h
bWVzcGFjZSBMYXlvdXQgeworCitMaW5lQm94VmVydGljYWxBbGlnbmVyOjpMaW5lQm94VmVydGlj
YWxBbGlnbmVyKGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5n
Q29udGV4dCkKKyAgICA6IG1faW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KGlubGluZUZvcm1hdHRp
bmdDb250ZXh0KQoreworfQorCitib29sIExpbmVCb3hWZXJ0aWNhbEFsaWduZXI6OmNhblVzZVNp
bXBsaWZpZWRBbGlnbm1lbnRGb3JJbmxpbmVMZXZlbEJveChjb25zdCBJbmxpbmVMZXZlbEJveCYg
cm9vdElubGluZUJveCwgY29uc3QgSW5saW5lTGV2ZWxCb3gmIGlubGluZUxldmVsQm94LCBzdGQ6
Om9wdGlvbmFsPGNvbnN0IEJveEdlb21ldHJ5PiBpbmxpbmVMZXZlbEJveEdlb21ldHJ5KQorewor
ICAgIGlmIChpbmxpbmVMZXZlbEJveC5pc0F0b21pY0lubGluZUxldmVsQm94KCkpIHsKKyAgICAg
ICAgQVNTRVJUKGlubGluZUxldmVsQm94R2VvbWV0cnkpOworICAgICAgICAvLyBCYXNlbGluZSBh
bGlnbmVkLCBub24tc3RyZXRjaHkgZGlyZWN0IGNoaWxkcmVuIGFyZSBjb25zaWRlcmVkIHRvIGJl
IHNpbXBsZSBmb3Igbm93LgorICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVMZXZlbEJv
eC5sYXlvdXRCb3goKTsKKyAgICAgICAgcmV0dXJuICZsYXlvdXRCb3gucGFyZW50KCkgPT0gJnJv
b3RJbmxpbmVCb3gubGF5b3V0Qm94KCkKKyAgICAgICAgICAgICYmIGxheW91dEJveC5zdHlsZSgp
LnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZQorICAgICAgICAgICAg
JiYgIWlubGluZUxldmVsQm94R2VvbWV0cnktPm1hcmdpbkJlZm9yZSgpCisgICAgICAgICAgICAm
JiAhaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS0+bWFyZ2luQWZ0ZXIoKQorICAgICAgICAgICAgJiYg
aW5saW5lTGV2ZWxCb3hHZW9tZXRyeS0+bWFyZ2luQm94SGVpZ2h0KCkgPD0gcm9vdElubGluZUJv
eC5iYXNlbGluZSgpOworICAgIH0KKyAgICBpZiAoaW5saW5lTGV2ZWxCb3guaXNMaW5lQnJlYWtC
b3goKSkgeworICAgICAgICAvLyBCYXNlbGluZSBhbGlnbmVkLCBub24tc3RyZXRjaHkgbGluZSBi
cmVha3MgZS5nLiA8ZGl2PjxzcGFuPjxicj48L3NwYW4+PC9kaXY+IGJ1dCBub3QgPGRpdj48c3Bh
biBzdHlsZT0iZm9udC1zaXplOiAxMDBweDsiPjxicj48L3NwYW4+PC9kaXY+LgorICAgICAgICBy
ZXR1cm4gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm94KCkuc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCkg
PT0gVmVydGljYWxBbGlnbjo6QmFzZWxpbmUgJiYgaW5saW5lTGV2ZWxCb3guYmFzZWxpbmUoKSA8
PSByb290SW5saW5lQm94LmJhc2VsaW5lKCk7CisgICAgfQorICAgIGlmIChpbmxpbmVMZXZlbEJv
eC5pc0lubGluZUJveCgpKSB7CisgICAgICAgIC8vIEJhc2VsaW5lIGFsaWduZWQsIG5vbi1zdHJl
dGNoeSBpbmxpbmUgYm94ZXMgZS5nLiA8ZGl2PjxzcGFuPjwvc3Bhbj48L2Rpdj4gYnV0IG5vdCA8
ZGl2PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwMHB4OyI+PC9zcGFuPjwvZGl2Pi4KKyAgICAg
ICAgcmV0dXJuIGlubGluZUxldmVsQm94LmxheW91dEJveCgpLnN0eWxlKCkudmVydGljYWxBbGln
bigpID09IFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lICYmIGlubGluZUxldmVsQm94LmxheW91dEJv
dW5kcygpID09IHJvb3RJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCk7CisgICAgfQorICAgIHJldHVy
biBmYWxzZTsKK30KKworSW5saW5lTGF5b3V0VW5pdCBMaW5lQm94VmVydGljYWxBbGlnbmVyOjpj
b21wdXRlTG9naWNhbEhlaWdodEFuZEFsaWduKExpbmVCb3gmIGxpbmVCb3gsIGJvb2wgdXNlU2lt
cGxpZmllZEFsaWdubWVudCkgY29uc3QKK3sKKyAgICBpZiAodXNlU2ltcGxpZmllZEFsaWdubWVu
dCkKKyAgICAgICAgcmV0dXJuIHNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudChsaW5lQm94KTsK
KyAgICAvLyBUaGlzIGZ1bmN0aW9uIChwYXJ0aWFsbHkpIGltcGxlbWVudHM6CisgICAgLy8gMi4y
LiBMYXlvdXQgV2l0aGluIExpbmUgQm94ZXMKKyAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIv
Y3NzLWlubGluZS0zLyNsaW5lLWxheW91dAorICAgIC8vIDEuIENvbXB1dGUgdGhlIGxpbmUgYm94
IGhlaWdodCB1c2luZyB0aGUgbGF5b3V0IGJvdW5kcyBnZW9tZXRyeS4gVGhpcyBoZWlnaHQgY29t
cHV0YXRpb24gc3RyaWN0bHkgdXNlcyBsYXlvdXQgYm91bmRzIGFuZCBub3Qgbm9ybWFsIGlubGlu
ZSBsZXZlbCBib3ggZ2VvbWV0cmllcy4KKyAgICAvLyAyLiBDb21wdXRlIHRoZSBiYXNlbGluZS9s
b2dpY2FsIHRvcCBwb3NpdGlvbiBvZiB0aGUgcm9vdCBpbmxpbmUgYm94LiBBbGlnbmVkIGJveGVz
IHB1c2ggdGhlIHJvb3QgaW5saW5lIGJveCBhcm91bmQgaW5zaWRlIHRoZSBsaW5lIGJveC4KKyAg
ICAvLyAzLiBGaW5hbGx5IGFsaWduIHRoZSBpbmxpbmUgbGV2ZWwgYm94ZXMgdXNpbmcgKG1vc3Rs
eSkgbm9ybWFsIGlubGluZSBsZXZlbCBib3ggZ2VvbWV0cmllcy4KKyAgICBBU1NFUlQobGluZUJv
eC5oYXNDb250ZW50KCkpOworICAgIGF1dG8gbGluZUJveExvZ2ljYWxIZWlnaHQgPSBjb21wdXRl
TGluZUJveExvZ2ljYWxIZWlnaHQobGluZUJveCk7CisgICAgY29tcHV0ZVJvb3RJbmxpbmVCb3hW
ZXJ0aWNhbFBvc2l0aW9uKGxpbmVCb3gpOworICAgIGFsaWduSW5saW5lTGV2ZWxCb3hlcyhsaW5l
Qm94LCBsaW5lQm94TG9naWNhbEhlaWdodCk7CisgICAgcmV0dXJuIGxpbmVCb3hMb2dpY2FsSGVp
Z2h0OworfQorCitJbmxpbmVMYXlvdXRVbml0IExpbmVCb3hWZXJ0aWNhbEFsaWduZXI6OnNpbXBs
aWZpZWRWZXJ0aWNhbEFsaWdubWVudChMaW5lQm94JiBsaW5lQm94KSBjb25zdAoreworICAgIGF1
dG8mIHJvb3RJbmxpbmVCb3ggPSBsaW5lQm94LnJvb3RJbmxpbmVCb3goKTsKKyAgICBhdXRvIHJv
b3RJbmxpbmVCb3hCYXNlbGluZSA9IHJvb3RJbmxpbmVCb3guYmFzZWxpbmUoKTsKKworICAgIGlm
ICghbGluZUJveC5oYXNDb250ZW50KCkpIHsKKyAgICAgICAgcm9vdElubGluZUJveC5zZXRMb2dp
Y2FsVG9wKC1yb290SW5saW5lQm94QmFzZWxpbmUpOworICAgICAgICByZXR1cm4geyB9OworICAg
IH0KKworICAgIGF1dG8gcm9vdElubGluZUJveExheW91dEJvdW5kcyA9IHJvb3RJbmxpbmVCb3gu
bGF5b3V0Qm91bmRzKCk7CisKKyAgICBhdXRvIGxpbmVCb3hMb2dpY2FsVG9wID0gSW5saW5lTGF5
b3V0VW5pdCB7IDAgfTsKKyAgICBhdXRvIGxpbmVCb3hMb2dpY2FsQm90dG9tID0gcm9vdElubGlu
ZUJveExheW91dEJvdW5kcy5oZWlnaHQoKTsKKyAgICBhdXRvIHJvb3RJbmxpbmVCb3hMb2dpY2Fs
VG9wID0gcm9vdElubGluZUJveExheW91dEJvdW5kcy5hc2NlbnQgLSByb290SW5saW5lQm94QmFz
ZWxpbmU7CisgICAgZm9yIChhdXRvJiBpbmxpbmVMZXZlbEJveCA6IGxpbmVCb3gubm9uUm9vdElu
bGluZUxldmVsQm94ZXMoKSkgeworICAgICAgICAvLyBPbmx5IGJhc2VsaW5lIGFsaWdubWVudCBm
b3Igbm93LgorICAgICAgICBpbmxpbmVMZXZlbEJveC5zZXRMb2dpY2FsVG9wKHJvb3RJbmxpbmVC
b3hCYXNlbGluZSAtIGlubGluZUxldmVsQm94LmJhc2VsaW5lKCkpOworICAgICAgICBhdXRvIGxh
eW91dEJvdW5kcyA9IGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpOworCisgICAgICAgIGF1
dG8gbGF5b3V0Qm91bmRzTG9naWNhbFRvcCA9IHJvb3RJbmxpbmVCb3hMYXlvdXRCb3VuZHMuYXNj
ZW50IC0gbGF5b3V0Qm91bmRzLmFzY2VudDsKKyAgICAgICAgbGluZUJveExvZ2ljYWxUb3AgPSBz
dGQ6Om1pbihsaW5lQm94TG9naWNhbFRvcCwgbGF5b3V0Qm91bmRzTG9naWNhbFRvcCk7CisgICAg
ICAgIGxpbmVCb3hMb2dpY2FsQm90dG9tID0gc3RkOjptYXgobGluZUJveExvZ2ljYWxCb3R0b20s
IGxheW91dEJvdW5kc0xvZ2ljYWxUb3AgKyBsYXlvdXRCb3VuZHMuaGVpZ2h0KCkpOworICAgICAg
ICByb290SW5saW5lQm94TG9naWNhbFRvcCA9IHN0ZDo6bWF4KHJvb3RJbmxpbmVCb3hMb2dpY2Fs
VG9wLCBsYXlvdXRCb3VuZHMuYXNjZW50IC0gcm9vdElubGluZUJveEJhc2VsaW5lKTsKKyAgICB9
CisgICAgcm9vdElubGluZUJveC5zZXRMb2dpY2FsVG9wKHJvb3RJbmxpbmVCb3hMb2dpY2FsVG9w
KTsKKyAgICByZXR1cm4gbGluZUJveExvZ2ljYWxCb3R0b20gLSBsaW5lQm94TG9naWNhbFRvcDsK
K30KKworSW5saW5lTGF5b3V0VW5pdCBMaW5lQm94VmVydGljYWxBbGlnbmVyOjpjb21wdXRlTGlu
ZUJveExvZ2ljYWxIZWlnaHQoTGluZUJveCYgbGluZUJveCkgY29uc3QKK3sKKyAgICAvLyBUaGlz
IGZ1bmN0aW9uIChwYXJ0aWFsbHkpIGltcGxlbWVudHM6CisgICAgLy8gMi4yLiBMYXlvdXQgV2l0
aGluIExpbmUgQm94ZXMKKyAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLWlubGluZS0z
LyNsaW5lLWxheW91dAorICAgIC8vIDEuIENvbXB1dGUgdGhlIGxpbmUgYm94IGhlaWdodCB1c2lu
ZyB0aGUgbGF5b3V0IGJvdW5kcyBnZW9tZXRyeS4gVGhpcyBoZWlnaHQgY29tcHV0YXRpb24gc3Ry
aWN0bHkgdXNlcyBsYXlvdXQgYm91bmRzIGFuZCBub3Qgbm9ybWFsIGlubGluZSBsZXZlbCBib3gg
Z2VvbWV0cmllcy4KKyAgICAvLyAyLiBDb21wdXRlIHRoZSBiYXNlbGluZS9sb2dpY2FsIHRvcCBw
b3NpdGlvbiBvZiB0aGUgcm9vdCBpbmxpbmUgYm94LiBBbGlnbmVkIGJveGVzIHB1c2ggdGhlIHJv
b3QgaW5saW5lIGJveCBhcm91bmQgaW5zaWRlIHRoZSBsaW5lIGJveC4KKyAgICAvLyAzLiBGaW5h
bGx5IGFsaWduIHRoZSBpbmxpbmUgbGV2ZWwgYm94ZXMgdXNpbmcgKG1vc3RseSkgbm9ybWFsIGlu
bGluZSBsZXZlbCBib3ggZ2VvbWV0cmllcy4KKyAgICBhdXRvJiByb290SW5saW5lQm94ID0gbGlu
ZUJveC5yb290SW5saW5lQm94KCk7CisgICAgYXV0byYgZm9ybWF0dGluZ0dlb21ldHJ5ID0gdGhp
cy0+Zm9ybWF0dGluZ0dlb21ldHJ5KCk7CisKKyAgICAvLyBMaW5lIGJveCBoZWlnaHQgY29tcHV0
YXRpb24gaXMgYmFzZWQgb24gdGhlIGxheW91dCBib3VuZHMgb2YgdGhlIGlubGluZSBib3hlcyBh
bmQgbm90IHRoZWlyIGxvZ2ljYWwgKGFzY2VudC9kZXNjZW50KSBkaW1lbnNpb25zLgorICAgIHN0
cnVjdCBBYnNvbHV0ZVRvcEFuZEJvdHRvbSB7CisgICAgICAgIElubGluZUxheW91dFVuaXQgdG9w
IHsgMCB9OworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGJvdHRvbSB7IDAgfTsKKyAgICB9Owor
ICAgIEhhc2hNYXA8Y29uc3QgSW5saW5lTGV2ZWxCb3gqLCBBYnNvbHV0ZVRvcEFuZEJvdHRvbT4g
aW5saW5lTGV2ZWxCb3hBYnNvbHV0ZVRvcEFuZEJvdHRvbU1hcDsKKworICAgIGF1dG8gbWluaW11
bUxvZ2ljYWxUb3AgPSBzdGQ6Om9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IHsgfTsKKyAgICBh
dXRvIG1heGltdW1Mb2dpY2FsQm90dG9tID0gc3RkOjpvcHRpb25hbDxJbmxpbmVMYXlvdXRVbml0
PiB7IH07CisgICAgaWYgKGZvcm1hdHRpbmdHZW9tZXRyeS5pbmxpbmVMZXZlbEJveEFmZmVjdHNM
aW5lQm94KHJvb3RJbmxpbmVCb3gsIGxpbmVCb3gpKSB7CisgICAgICAgIG1pbmltdW1Mb2dpY2Fs
VG9wID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CisgICAgICAgIG1heGltdW1Mb2dpY2FsQm90dG9t
ID0gcm9vdElubGluZUJveC5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKTsKKyAgICAgICAgaW5saW5l
TGV2ZWxCb3hBYnNvbHV0ZVRvcEFuZEJvdHRvbU1hcC5hZGQoJnJvb3RJbmxpbmVCb3gsIEFic29s
dXRlVG9wQW5kQm90dG9tIHsgKm1pbmltdW1Mb2dpY2FsVG9wLCAqbWF4aW11bUxvZ2ljYWxCb3R0
b20gfSk7CisgICAgfSBlbHNlCisgICAgICAgIGlubGluZUxldmVsQm94QWJzb2x1dGVUb3BBbmRC
b3R0b21NYXAuYWRkKCZyb290SW5saW5lQm94LCBBYnNvbHV0ZVRvcEFuZEJvdHRvbSB7IH0pOwor
CisgICAgVmVjdG9yPElubGluZUxldmVsQm94Kj4gbGluZUJveFJlbGF0aXZlSW5saW5lTGV2ZWxC
b3hlczsKKyAgICBmb3IgKGF1dG8mIGlubGluZUxldmVsQm94IDogbGluZUJveC5ub25Sb290SW5s
aW5lTGV2ZWxCb3hlcygpKSB7CisgICAgICAgIGF1dG8mIGxheW91dEJveCA9IGlubGluZUxldmVs
Qm94LmxheW91dEJveCgpOworICAgICAgICBpZiAoaW5saW5lTGV2ZWxCb3guaGFzTGluZUJveFJl
bGF0aXZlQWxpZ25tZW50KCkpIHsKKyAgICAgICAgICAgIGxpbmVCb3hSZWxhdGl2ZUlubGluZUxl
dmVsQm94ZXMuYXBwZW5kKCZpbmxpbmVMZXZlbEJveCk7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorICAgICAgICBhdXRvJiBwYXJlbnRJbmxpbmVCb3ggPSBsaW5lQm94LmlubGlu
ZUxldmVsQm94Rm9yTGF5b3V0Qm94KGxheW91dEJveC5wYXJlbnQoKSk7CisgICAgICAgIC8vIExv
Z2ljYWwgdG9wIGlzIHJlbGF0aXZlIHRvIHRoZSBwYXJlbnQgaW5saW5lIGJveCdzIGxheW91dCBi
b3VuZHMuCisgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGxvZ2ljYWwgdG9wIGlzIG5vdCB0aGUg
ZmluYWwgbG9naWNhbCB0b3Agb2YgdGhlIGlubGluZSBsZXZlbCBib3guCisgICAgICAgIC8vIFRo
aXMgaXMgdGhlIGxvZ2ljYWwgdG9wIGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXlvdXQgYm91bmRz
IGdlb21ldHJ5IHdoaWNoIG1heSBiZSB2ZXJ5IGRpZmZlcmVudCBmcm9tIHRoZSBpbmxpbmUgYm94
J3Mgbm9ybWFsIGdlb21ldHJ5LgorICAgICAgICBhdXRvIGxvZ2ljYWxUb3AgPSBJbmxpbmVMYXlv
dXRVbml0IHsgfTsKKyAgICAgICAgc3dpdGNoIChpbmxpbmVMZXZlbEJveC52ZXJ0aWNhbEFsaWdu
KCkpIHsKKyAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZTogeworICAgICAgICAg
ICAgYXV0byBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gaW5saW5lTGV2ZWxC
b3gubGF5b3V0Qm91bmRzKCkuYXNjZW50OworICAgICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVu
dElubGluZUJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQgLSBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBh
cmVudEJhc2VsaW5lOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBWZXJ0aWNhbEFsaWduOjpNaWRkbGU6IHsKKyAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcE9m
ZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmhl
aWdodCgpIC8gMiArIHBhcmVudElubGluZUJveC5zdHlsZSgpLmZvbnRNZXRyaWNzKCkueEhlaWdo
dCgpIC8gMjsKKyAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBwYXJlbnRJbmxpbmVCb3gubGF5b3V0
Qm91bmRzKCkuYXNjZW50IC0gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6
QmFzZWxpbmVNaWRkbGU6IHsKKyAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcE9mZnNldEZyb21Q
YXJlbnRCYXNlbGluZSA9IGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmhlaWdodCgpIC8g
MjsKKyAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBwYXJlbnRJbmxpbmVCb3gubGF5b3V0Qm91bmRz
KCkuYXNjZW50IC0gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6TGVuZ3Ro
OiB7CisgICAgICAgICAgICBhdXRvJiBzdHlsZSA9IGlubGluZUxldmVsQm94LnN0eWxlKCk7Cisg
ICAgICAgICAgICBhdXRvIGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgPSBmbG9h
dFZhbHVlRm9yTGVuZ3RoKHN0eWxlLnZlcnRpY2FsQWxpZ25MZW5ndGgoKSwgc3R5bGUuY29tcHV0
ZWRMaW5lSGVpZ2h0KCkpICsgaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50Owor
ICAgICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5sYXlvdXRCb3VuZHMoKS5h
c2NlbnQgLSBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUZXh0VG9wOiB7
CisgICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGV4dC10b3AgYWxpZ25zIHdpdGggdGhlIGlubGlu
ZSBib3gncyBmb250IG1ldHJpY3MgdG9wIChhc2NlbnQpIGFuZCBub3QgdGhlIGxheW91dCBib3Vu
ZHMgdG9wLgorICAgICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5sYXlvdXRC
b3VuZHMoKS5hc2NlbnQgLSBwYXJlbnRJbmxpbmVCb3guYmFzZWxpbmUoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VGV4dEJvdHRv
bTogeworICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRleHQtYm90dG9tIGFsaWducyB3aXRoIHRo
ZSBpbmxpbmUgYm94J3MgZm9udCBtZXRyaWNzIGJvdHRvbSAoZGVzY2VudCkgYW5kIG5vdCB0aGUg
bGF5b3V0IGJvdW5kcyBib3R0b20uCisgICAgICAgICAgICBhdXRvIHBhcmVudElubGluZUJveExh
eW91dEJvdW5kcyA9IHBhcmVudElubGluZUJveC5sYXlvdXRCb3VuZHMoKTsKKyAgICAgICAgICAg
IGF1dG8gcGFyZW50SW5saW5lQm94TG9naWNhbEJvdHRvbSA9IHBhcmVudElubGluZUJveExheW91
dEJvdW5kcy5oZWlnaHQoKSAtIHBhcmVudElubGluZUJveExheW91dEJvdW5kcy5kZXNjZW50ICsg
cGFyZW50SW5saW5lQm94LmRlc2NlbnQoKS52YWx1ZV9vcihJbmxpbmVMYXlvdXRVbml0KCkpOwor
ICAgICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveExvZ2ljYWxCb3R0b20gLSBp
bmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6U3ViOiB7CisgICAgICAg
ICAgICBhdXRvIGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgPSBpbmxpbmVMZXZl
bEJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQgLSAocGFyZW50SW5saW5lQm94LnN0eWxlKCkuZm9u
dENhc2NhZGUoKS5zaXplKCkgLyA1ICsgMSk7CisgICAgICAgICAgICBsb2dpY2FsVG9wID0gcGFy
ZW50SW5saW5lQm94LmxheW91dEJvdW5kcygpLmFzY2VudCAtIGxvZ2ljYWxUb3BPZmZzZXRGcm9t
UGFyZW50QmFzZWxpbmU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIFZlcnRpY2FsQWxpZ246OlN1cGVyOiB7CisgICAgICAgICAgICBhdXRvIGxvZ2ljYWxUb3BP
ZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5h
c2NlbnQgKyBwYXJlbnRJbmxpbmVCb3guc3R5bGUoKS5mb250Q2FzY2FkZSgpLnNpemUoKSAvIDMg
KyAxOworICAgICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5sYXlvdXRCb3Vu
ZHMoKS5hc2NlbnQgLSBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFT
U0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBhdXRvIHBhcmVudElubGluZUJveEFic29sdXRlVG9wQW5kQm90dG9tID0gaW5s
aW5lTGV2ZWxCb3hBYnNvbHV0ZVRvcEFuZEJvdHRvbU1hcC5nZXQoJnBhcmVudElubGluZUJveCk7
CisgICAgICAgIGF1dG8gYWJzb2x1dGVMb2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94QWJzb2x1
dGVUb3BBbmRCb3R0b20udG9wICsgbG9naWNhbFRvcDsKKyAgICAgICAgYXV0byBhYnNvbHV0ZUxv
Z2ljYWxCb3R0b20gPSBhYnNvbHV0ZUxvZ2ljYWxUb3AgKyBpbmxpbmVMZXZlbEJveC5sYXlvdXRC
b3VuZHMoKS5oZWlnaHQoKTsKKyAgICAgICAgaW5saW5lTGV2ZWxCb3hBYnNvbHV0ZVRvcEFuZEJv
dHRvbU1hcC5hZGQoJmlubGluZUxldmVsQm94LCBBYnNvbHV0ZVRvcEFuZEJvdHRvbSB7IGFic29s
dXRlTG9naWNhbFRvcCwgYWJzb2x1dGVMb2dpY2FsQm90dG9tIH0pOworICAgICAgICAvLyBTdHJl
dGNoIHRoZSBtaW4vbWF4IGFic29sdXRlIHZhbHVlcyBpZiBhcHBsaWNhYmxlLgorICAgICAgICBp
ZiAoZm9ybWF0dGluZ0dlb21ldHJ5LmlubGluZUxldmVsQm94QWZmZWN0c0xpbmVCb3goaW5saW5l
TGV2ZWxCb3gsIGxpbmVCb3gpKSB7CisgICAgICAgICAgICBtaW5pbXVtTG9naWNhbFRvcCA9IHN0
ZDo6bWluKG1pbmltdW1Mb2dpY2FsVG9wLnZhbHVlX29yKGFic29sdXRlTG9naWNhbFRvcCksIGFi
c29sdXRlTG9naWNhbFRvcCk7CisgICAgICAgICAgICBtYXhpbXVtTG9naWNhbEJvdHRvbSA9IHN0
ZDo6bWF4KG1heGltdW1Mb2dpY2FsQm90dG9tLnZhbHVlX29yKGFic29sdXRlTG9naWNhbEJvdHRv
bSksIGFic29sdXRlTG9naWNhbEJvdHRvbSk7CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gVGhl
IGxpbmUgYm94IGhlaWdodCBjb21wdXRhdGlvbiBpcyBhcyBmb2xsb3dzOgorICAgIC8vIDEuIFN0
cmV0Y2ggdGhlIGxpbmUgYm94IHdpdGggdGhlIG5vbi1saW5lLWJveCByZWxhdGl2ZSBhbGlnbmVk
IGlubGluZSBib3ggYWJzb2x1dGUgdG9wIGFuZCBib3R0b20gdmFsdWVzLgorICAgIC8vIDIuIENo
ZWNrIGlmIHRoZSBsaW5lIGJveCByZWxhdGl2ZSBhbGlnbmVkIGlubGluZSBib3hlcyAodG9wLCBi
b3R0b20gZXRjKSBoYXZlIGVub3VnaCByb29tIGFuZCBzdHJldGNoIHRoZSBsaW5lIGJveCBmdXJ0
aGVyIGlmIG5lZWRlZC4KKyAgICBhdXRvIGxpbmVCb3hMb2dpY2FsSGVpZ2h0ID0gbWF4aW11bUxv
Z2ljYWxCb3R0b20udmFsdWVfb3IoSW5saW5lTGF5b3V0VW5pdCgpKSAtIG1pbmltdW1Mb2dpY2Fs
VG9wLnZhbHVlX29yKElubGluZUxheW91dFVuaXQoKSk7CisgICAgZm9yIChhdXRvKiBsaW5lQm94
UmVsYXRpdmVJbmxpbmVMZXZlbEJveCA6IGxpbmVCb3hSZWxhdGl2ZUlubGluZUxldmVsQm94ZXMp
IHsKKyAgICAgICAgaWYgKCFmb3JtYXR0aW5nR2VvbWV0cnkuaW5saW5lTGV2ZWxCb3hBZmZlY3Rz
TGluZUJveCgqbGluZUJveFJlbGF0aXZlSW5saW5lTGV2ZWxCb3gsIGxpbmVCb3gpKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGxpbmVCb3hMb2dpY2FsSGVpZ2h0ID0gc3RkOjptYXgo
bGluZUJveExvZ2ljYWxIZWlnaHQsIGxpbmVCb3hSZWxhdGl2ZUlubGluZUxldmVsQm94LT5sYXlv
dXRCb3VuZHMoKS5oZWlnaHQoKSk7CisgICAgfQorICAgIHJldHVybiBsaW5lQm94TG9naWNhbEhl
aWdodDsKK30KKwordm9pZCBMaW5lQm94VmVydGljYWxBbGlnbmVyOjpjb21wdXRlUm9vdElubGlu
ZUJveFZlcnRpY2FsUG9zaXRpb24oTGluZUJveCYgbGluZUJveCkgY29uc3QKK3sKKyAgICBhdXRv
JiByb290SW5saW5lQm94ID0gbGluZUJveC5yb290SW5saW5lQm94KCk7CisgICAgYXV0byYgZm9y
bWF0dGluZ0dlb21ldHJ5ID0gdGhpcy0+Zm9ybWF0dGluZ0dlb21ldHJ5KCk7CisKKyAgICBIYXNo
TWFwPGNvbnN0IElubGluZUxldmVsQm94KiwgSW5saW5lTGF5b3V0VW5pdD4gaW5saW5lTGV2ZWxC
b3hBYnNvbHV0ZUJhc2VsaW5lT2Zmc2V0TWFwOworICAgIGlubGluZUxldmVsQm94QWJzb2x1dGVC
YXNlbGluZU9mZnNldE1hcC5hZGQoJnJvb3RJbmxpbmVCb3gsIElubGluZUxheW91dFVuaXQgeyB9
KTsKKworICAgIGF1dG8gbWF4aW11bVRvcE9mZnNldEZyb21Sb290SW5saW5lQm94QmFzZWxpbmUg
PSBzdGQ6Om9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IHsgfTsKKyAgICBpZiAoZm9ybWF0dGlu
Z0dlb21ldHJ5LmlubGluZUxldmVsQm94QWZmZWN0c0xpbmVCb3gocm9vdElubGluZUJveCwgbGlu
ZUJveCkpCisgICAgICAgIG1heGltdW1Ub3BPZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5l
ID0gcm9vdElubGluZUJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQ7CisKKyAgICBmb3IgKGF1dG8m
IGlubGluZUxldmVsQm94IDogbGluZUJveC5ub25Sb290SW5saW5lTGV2ZWxCb3hlcygpKSB7Cisg
ICAgICAgIGF1dG8gYWJzb2x1dGVCYXNlbGluZU9mZnNldCA9IElubGluZUxheW91dFVuaXQgeyB9
OworICAgICAgICBpZiAoIWlubGluZUxldmVsQm94Lmhhc0xpbmVCb3hSZWxhdGl2ZUFsaWdubWVu
dCgpKSB7CisgICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVMZXZlbEJveC5sYXlv
dXRCb3goKTsKKyAgICAgICAgICAgIGF1dG8mIHBhcmVudElubGluZUJveCA9IGxpbmVCb3guaW5s
aW5lTGV2ZWxCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94LnBhcmVudCgpKTsKKyAgICAgICAgICAg
IGF1dG8gYmFzZWxpbmVPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgPSBJbmxpbmVMYXlvdXRVbml0
IHsgfTsKKworICAgICAgICAgICAgc3dpdGNoIChpbmxpbmVMZXZlbEJveC52ZXJ0aWNhbEFsaWdu
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6QmFzZWxpbmU6CisgICAgICAg
ICAgICAgICAgYmFzZWxpbmVPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgPSB7IH07CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246Ok1pZGRsZTog
eworICAgICAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGlu
ZSA9IChpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKSAvIDIgKyBwYXJlbnRJ
bmxpbmVCb3guc3R5bGUoKS5mb250TWV0cmljcygpLnhIZWlnaHQoKSAvIDIpOworICAgICAgICAg
ICAgICAgIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gbG9naWNhbFRvcE9mZnNl
dEZyb21QYXJlbnRCYXNlbGluZSAtIGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmFzY2Vu
dDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNh
c2UgVmVydGljYWxBbGlnbjo6QmFzZWxpbmVNaWRkbGU6IHsKKyAgICAgICAgICAgICAgICBhdXRv
IGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgPSBpbmxpbmVMZXZlbEJveC5sYXlv
dXRCb3VuZHMoKS5oZWlnaHQoKSAvIDI7CisgICAgICAgICAgICAgICAgYmFzZWxpbmVPZmZzZXRG
cm9tUGFyZW50QmFzZWxpbmUgPSBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lIC0g
aW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50OworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpMZW5n
dGg6IHsKKyAgICAgICAgICAgICAgICBhdXRvJiBzdHlsZSA9IGlubGluZUxldmVsQm94LnN0eWxl
KCk7CisgICAgICAgICAgICAgICAgYXV0byB2ZXJ0aWNhbEFsaWduT2Zmc2V0ID0gZmxvYXRWYWx1
ZUZvckxlbmd0aChzdHlsZS52ZXJ0aWNhbEFsaWduTGVuZ3RoKCksIHN0eWxlLmNvbXB1dGVkTGlu
ZUhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFy
ZW50QmFzZWxpbmUgPSB2ZXJ0aWNhbEFsaWduT2Zmc2V0ICsgaW5saW5lTGV2ZWxCb3guYmFzZWxp
bmUoKTsKKyAgICAgICAgICAgICAgICBiYXNlbGluZU9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9
IGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgLSBpbmxpbmVMZXZlbEJveC5iYXNl
bGluZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUZXh0VG9wOgorICAgICAgICAgICAgICAgIGJhc2VsaW5l
T2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gcGFyZW50SW5saW5lQm94LmJhc2VsaW5lKCkgLSBp
bmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQ7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRleHRCb3R0b206CisgICAgICAg
ICAgICAgICAgYmFzZWxpbmVPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgPSBpbmxpbmVMZXZlbEJv
eC5sYXlvdXRCb3VuZHMoKS5kZXNjZW50IC0gKnBhcmVudElubGluZUJveC5kZXNjZW50KCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlN1
YjoKKyAgICAgICAgICAgICAgICBiYXNlbGluZU9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IC0o
cGFyZW50SW5saW5lQm94LnN0eWxlKCkuZm9udENhc2NhZGUoKS5zaXplKCkgLyA1ICsgMSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlN1
cGVyOgorICAgICAgICAgICAgICAgIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0g
cGFyZW50SW5saW5lQm94LnN0eWxlKCkuZm9udENhc2NhZGUoKS5zaXplKCkgLyAzICsgMTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFic29sdXRlQmFzZWxpbmVPZmZzZXQgPSBpbmxp
bmVMZXZlbEJveEFic29sdXRlQmFzZWxpbmVPZmZzZXRNYXAuZ2V0KCZwYXJlbnRJbmxpbmVCb3gp
ICsgYmFzZWxpbmVPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmU7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKGlubGluZUxldmVsQm94LnZlcnRpY2FsQWxpZ24oKSkgeworICAg
ICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUb3A6IHsKKyAgICAgICAgICAgICAgICBhYnNv
bHV0ZUJhc2VsaW5lT2Zmc2V0ID0gcm9vdElubGluZUJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQg
LSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQ7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJv
dHRvbTogeworICAgICAgICAgICAgICAgIGFic29sdXRlQmFzZWxpbmVPZmZzZXQgPSBpbmxpbmVM
ZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5kZXNjZW50IC0gcm9vdElubGluZUJveC5sYXlvdXRCb3Vu
ZHMoKS5kZXNjZW50OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVE
X1lFVCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGlubGluZUxldmVsQm94QWJzb2x1dGVCYXNlbGluZU9mZnNldE1hcC5hZGQoJmlu
bGluZUxldmVsQm94LCBhYnNvbHV0ZUJhc2VsaW5lT2Zmc2V0KTsKKyAgICAgICAgYXV0byBhZmZl
Y3RzUm9vdElubGluZUJveFZlcnRpY2FsUG9zaXRpb24gPSBmb3JtYXR0aW5nR2VvbWV0cnkuaW5s
aW5lTGV2ZWxCb3hBZmZlY3RzTGluZUJveChpbmxpbmVMZXZlbEJveCwgbGluZUJveCk7CisgICAg
ICAgIGlmIChhZmZlY3RzUm9vdElubGluZUJveFZlcnRpY2FsUG9zaXRpb24pIHsKKyAgICAgICAg
ICAgIGF1dG8gdG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZSA9IGFic29sdXRlQmFz
ZWxpbmVPZmZzZXQgKyBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQ7CisgICAg
ICAgICAgICBpZiAobWF4aW11bVRvcE9mZnNldEZyb21Sb290SW5saW5lQm94QmFzZWxpbmUpCisg
ICAgICAgICAgICAgICAgbWF4aW11bVRvcE9mZnNldEZyb21Sb290SW5saW5lQm94QmFzZWxpbmUg
PSBzdGQ6Om1heCgqbWF4aW11bVRvcE9mZnNldEZyb21Sb290SW5saW5lQm94QmFzZWxpbmUsIHRv
cE9mZnNldEZyb21Sb290SW5saW5lQm94QmFzZWxpbmUpOworICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgLy8gV2UgYXJlIGlzIHF1aXJrIG1vZGUgYW5kIHRoZSByb290IGlubGlu
ZSBib3ggaGFzIG5vIGNvbnRlbnQuIFRoZSByb290IGlubGluZSBib3gncyBiYXNlbGluZSBpcyBh
bmNob3JlZCBhdCAwLgorICAgICAgICAgICAgICAgIC8vIEhvd2V2ZXIgbmVnYXRpdmUgYXNjZW50
IChlLmcgbmVnYXRpdmUgdG9wIG1hcmdpbikgY2FuICJwdXNoIiB0aGUgcm9vdCBpbmxpbmUgYm94
IHVwd2FyZHMgYW5kIGhhdmUgYSBuZWdhdGl2ZSB2YWx1ZS4KKyAgICAgICAgICAgICAgICBtYXhp
bXVtVG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZSA9IGlubGluZUxldmVsQm94Lmxh
eW91dEJvdW5kcygpLmFzY2VudCA+PSAwCisgICAgICAgICAgICAgICAgICAgID8gc3RkOjptYXgo
MC4wZiwgdG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZSkKKyAgICAgICAgICAgICAg
ICAgICAgOiB0b3BPZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5lOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIGF1dG8gcm9vdElubGluZUJveExvZ2ljYWxUb3AgPSBt
YXhpbXVtVG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZS52YWx1ZV9vcigwLmYpIC0g
cm9vdElubGluZUJveC5iYXNlbGluZSgpOworICAgIHJvb3RJbmxpbmVCb3guc2V0TG9naWNhbFRv
cChyb290SW5saW5lQm94TG9naWNhbFRvcCk7Cit9CisKK3ZvaWQgTGluZUJveFZlcnRpY2FsQWxp
Z25lcjo6YWxpZ25JbmxpbmVMZXZlbEJveGVzKExpbmVCb3gmIGxpbmVCb3gsIElubGluZUxheW91
dFVuaXQgbGluZUJveExvZ2ljYWxIZWlnaHQpIGNvbnN0Cit7CisgICAgZm9yIChhdXRvJiBpbmxp
bmVMZXZlbEJveCA6IGxpbmVCb3gubm9uUm9vdElubGluZUxldmVsQm94ZXMoKSkgeworICAgICAg
ICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3goKTsKKyAgICAgICAg
YXV0byYgcGFyZW50SW5saW5lQm94ID0gbGluZUJveC5pbmxpbmVMZXZlbEJveEZvckxheW91dEJv
eChsYXlvdXRCb3gucGFyZW50KCkpOworICAgICAgICBhdXRvIGxvZ2ljYWxUb3AgPSBJbmxpbmVM
YXlvdXRVbml0IHsgfTsKKyAgICAgICAgc3dpdGNoIChpbmxpbmVMZXZlbEJveC52ZXJ0aWNhbEFs
aWduKCkpIHsKKyAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZToKKyAgICAgICAg
ICAgIGxvZ2ljYWxUb3AgPSBwYXJlbnRJbmxpbmVCb3guYmFzZWxpbmUoKSAtIGlubGluZUxldmVs
Qm94LmJhc2VsaW5lKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWZXJ0aWNh
bEFsaWduOjpNaWRkbGU6IHsKKyAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcE9mZnNldEZyb21Q
YXJlbnRCYXNlbGluZSA9IChpbmxpbmVMZXZlbEJveC5sb2dpY2FsSGVpZ2h0KCkgLyAyICsgcGFy
ZW50SW5saW5lQm94LnN0eWxlKCkuZm9udE1ldHJpY3MoKS54SGVpZ2h0KCkgLyAyKTsKKyAgICAg
ICAgICAgIGxvZ2ljYWxUb3AgPSBwYXJlbnRJbmxpbmVCb3guYmFzZWxpbmUoKSAtIGxvZ2ljYWxU
b3BPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lTWlkZGxlOiB7CisgICAgICAg
ICAgICBhdXRvIGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgPSBpbmxpbmVMZXZl
bEJveC5sb2dpY2FsSGVpZ2h0KCkgLyAyOworICAgICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVu
dElubGluZUJveC5iYXNlbGluZSgpIC0gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGlu
ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgVmVydGljYWxB
bGlnbjo6TGVuZ3RoOiB7CisgICAgICAgICAgICBhdXRvJiBzdHlsZSA9IGlubGluZUxldmVsQm94
LnN0eWxlKCk7CisgICAgICAgICAgICBhdXRvIHZlcnRpY2FsQWxpZ25PZmZzZXQgPSBmbG9hdFZh
bHVlRm9yTGVuZ3RoKHN0eWxlLnZlcnRpY2FsQWxpZ25MZW5ndGgoKSwgc3R5bGUuY29tcHV0ZWRM
aW5lSGVpZ2h0KCkpOworICAgICAgICAgICAgYXV0byBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVu
dEJhc2VsaW5lID0gdmVydGljYWxBbGlnbk9mZnNldCArIGlubGluZUxldmVsQm94LmJhc2VsaW5l
KCk7CisgICAgICAgICAgICBsb2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94LmJhc2VsaW5lKCkg
LSBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpTdWI6IHsKKyAgICAgICAg
ICAgIGF1dG8gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IGlubGluZUxldmVs
Qm94LmJhc2VsaW5lKCkgLSAocGFyZW50SW5saW5lQm94LnN0eWxlKCkuZm9udENhc2NhZGUoKS5z
aXplKCkgLyA1ICsgMSk7CisgICAgICAgICAgICBsb2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94
LmJhc2VsaW5lKCkgLSBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpTdXBl
cjogeworICAgICAgICAgICAgYXV0byBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5l
ID0gaW5saW5lTGV2ZWxCb3guYmFzZWxpbmUoKSArIHBhcmVudElubGluZUJveC5zdHlsZSgpLmZv
bnRDYXNjYWRlKCkuc2l6ZSgpIC8gMyArIDE7CisgICAgICAgICAgICBsb2dpY2FsVG9wID0gcGFy
ZW50SW5saW5lQm94LmJhc2VsaW5lKCkgLSBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2Vs
aW5lOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgLy8gTm90ZSB0aGF0
ICh0ZXh0KXRvcC9ib3R0b20gYWxpZ24gdGhlaXIgbGF5b3V0IGJvdW5kcy4KKyAgICAgICAgY2Fz
ZSBWZXJ0aWNhbEFsaWduOjpUZXh0VG9wOgorICAgICAgICAgICAgbG9naWNhbFRvcCA9IGlubGlu
ZUxldmVsQm94LmxheW91dEJvdW5kcygpLmFzY2VudCAtIGlubGluZUxldmVsQm94LmJhc2VsaW5l
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUZXh0
Qm90dG9tOgorICAgICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5sb2dpY2Fs
SGVpZ2h0KCkgLSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5kZXNjZW50IC0gaW5saW5l
TGV2ZWxCb3guYmFzZWxpbmUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZl
cnRpY2FsQWxpZ246OlRvcDoKKyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGxvZ2ljYWwg
dG9wIGlzIG5vdCByZWxhdGl2ZSB0byB0aGUgcGFyZW50IGlubGluZSBib3guCisgICAgICAgICAg
ICBsb2dpY2FsVG9wID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50IC0gaW5s
aW5lTGV2ZWxCb3guYmFzZWxpbmUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFZlcnRpY2FsQWxpZ246OkJvdHRvbToKKyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGxv
Z2ljYWwgdG9wIGlzIG5vdCByZWxhdGl2ZSB0byB0aGUgcGFyZW50IGlubGluZSBib3guCisgICAg
ICAgICAgICBsb2dpY2FsVG9wID0gbGluZUJveExvZ2ljYWxIZWlnaHQgLSBpbmxpbmVMZXZlbEJv
eC5sYXlvdXRCb3VuZHMoKS5kZXNjZW50IC0gaW5saW5lTGV2ZWxCb3guYmFzZWxpbmUoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05P
VF9JTVBMRU1FTlRFRF9ZRVQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGlubGluZUxldmVsQm94LnNldExvZ2ljYWxUb3AobG9naWNhbFRvcCk7CisgICAgfQorfQor
Cit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGluZUJveFZlcnRpY2FsQWxpZ25lci5oIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGluZUJv
eFZlcnRpY2FsQWxpZ25lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFhMDM0YTBlNjllYzYwNDFmYzY4MjU1MjZh
YzhmMDcyODU5MGExMzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
Zm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lQm94VmVydGljYWxBbGlnbmVyLmgK
QEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5n
R2VvbWV0cnkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIExheW91dCB7CisK
K2NsYXNzIExpbmVCb3hWZXJ0aWNhbEFsaWduZXIgeworcHVibGljOgorICAgIExpbmVCb3hWZXJ0
aWNhbEFsaWduZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmKTsKKyAgICBJbmxpbmVM
YXlvdXRVbml0IGNvbXB1dGVMb2dpY2FsSGVpZ2h0QW5kQWxpZ24oTGluZUJveCYsIGJvb2wgdXNl
U2ltcGxpZmllZEFsaWdubWVudCkgY29uc3Q7CisKKyAgICBzdGF0aWMgYm9vbCBjYW5Vc2VTaW1w
bGlmaWVkQWxpZ25tZW50Rm9ySW5saW5lTGV2ZWxCb3goY29uc3QgSW5saW5lTGV2ZWxCb3gmIHJv
b3RJbmxpbmVCb3gsIGNvbnN0IElubGluZUxldmVsQm94Jiwgc3RkOjpvcHRpb25hbDxjb25zdCBC
b3hHZW9tZXRyeT4gbmxpbmVMZXZlbEJveEdlb21ldHJ5KTsKKworcHJpdmF0ZToKKyAgICBJbmxp
bmVMYXlvdXRVbml0IHNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudChMaW5lQm94JikgY29uc3Q7
CisKKyAgICBJbmxpbmVMYXlvdXRVbml0IGNvbXB1dGVMaW5lQm94TG9naWNhbEhlaWdodChMaW5l
Qm94JikgY29uc3Q7CisgICAgdm9pZCBjb21wdXRlUm9vdElubGluZUJveFZlcnRpY2FsUG9zaXRp
b24oTGluZUJveCYpIGNvbnN0OworICAgIHZvaWQgYWxpZ25JbmxpbmVMZXZlbEJveGVzKExpbmVC
b3gmLCBJbmxpbmVMYXlvdXRVbml0IGxpbmVCb3hMb2dpY2FsSGVpZ2h0KSBjb25zdDsKKworICAg
IGNvbnN0IElubGluZUZvcm1hdHRpbmdHZW9tZXRyeSYgZm9ybWF0dGluZ0dlb21ldHJ5KCkgY29u
c3QgeyByZXR1cm4gbV9pbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnk7IH0KKworcHJpdmF0ZToKKyAg
ICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkgbV9pbmxpbmVGb3JtYXR0aW5nR2VvbWV0
cnk7Cit9OworCit9Cit9CisKKyNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>